From 16e8911fdccbdb348a0b3291acf6102494494f9b Mon Sep 17 00:00:00 2001 From: Sergey Kanzhelev Date: Mon, 22 Jul 2024 05:18:19 +0000 Subject: [PATCH 1/4] add AllocatedResourcesStatus field to ContainerStatus --- pkg/apis/core/types.go | 53 ++++++++++++++++++++++ staging/src/k8s.io/api/core/v1/types.go | 59 +++++++++++++++++++++++++ 2 files changed, 112 insertions(+) diff --git a/pkg/apis/core/types.go b/pkg/apis/core/types.go index 8607bc31a62..96e9b0a5c6e 100644 --- a/pkg/apis/core/types.go +++ b/pkg/apis/core/types.go @@ -2780,6 +2780,59 @@ type ContainerStatus struct { // +featureGate=SupplementalGroupsPolicy // +optional User *ContainerUser + // AllocatedResourcesStatus represents the status of various resources + // allocated for this Pod. + // +featureGate=ResourceHealthStatus + // +optional + AllocatedResourcesStatus []ResourceStatus +} + +type ResourceStatus struct { + Name ResourceName + // List of unique Resources health. Each element in the list contains a unique resource ID and resource health. + // At a minimum, ResourceID must uniquely identify the Resource + // allocated to the Pod on the Node for the lifetime of a Pod. + // See ResourceID type for it's definition. + Resources []ResourceHealth + + // allow to extend this struct in future with the overall health fields or things like Device Plugin version +} + +// ResourceID is calculated based on the source of this resource health information. +// For DevicePlugin: +// +// deviceplugin:DeviceID, where DeviceID is from the Device structure of DevicePlugin's ListAndWatchResponse type: https://github.com/kubernetes/kubernetes/blob/eda1c780543a27c078450e2f17d674471e00f494/staging/src/k8s.io/kubelet/pkg/apis/deviceplugin/v1alpha/api.proto#L61-L73 +// +// DevicePlugin ID is usually a constant for the lifetime of a Node and typically can be used to uniquely identify the device on the node. +// For DRA: +// +// dra://: such a device can be looked up in the information published by that DRA driver to learn more about it. It is designed to be globally unique in a cluster. +type ResourceID string + +type ResourceHealthStatus string + +const ( + ResourceHealthStatusHealthy ResourceHealthStatus = "Healthy" + ResourceHealthStatusUnhealthy ResourceHealthStatus = "Unhealthy" + ResourceHealthStatusUnknown ResourceHealthStatus = "Unknown" +) + +// ResourceHealth represents the health of a resource. It has the latest device health information. +// This is a part of KEP https://kep.k8s.io/4680 and historical health changes are planned to be added in future iterations of a KEP. +type ResourceHealth struct { + // ResourceID is the unique identifier of the resource. See the ResourceID type for more information. + ResourceID ResourceID + // Health of the resource. + // can be one of: + // - Healthy: operates as normal + // - Unhealthy: reported unhealthy. We consider this a temporary health issue + // since we do not have a mechanism today to distinguish + // temporary and permanent issues. + // - Unknown: The status cannot be determined. + // For example, Device Plugin got unregistered and hasn't been re-registered since. + // + // In future we may want to introduce the PermanentlyUnhealthy Status. + Health ResourceHealthStatus } // ContainerUser represents user identity information diff --git a/staging/src/k8s.io/api/core/v1/types.go b/staging/src/k8s.io/api/core/v1/types.go index f2fc2053f4e..3a74138baeb 100644 --- a/staging/src/k8s.io/api/core/v1/types.go +++ b/staging/src/k8s.io/api/core/v1/types.go @@ -3091,6 +3091,65 @@ type ContainerStatus struct { // +featureGate=SupplementalGroupsPolicy // +optional User *ContainerUser `json:"user,omitempty" protobuf:"bytes,13,opt,name=user,casttype=ContainerUser"` + // AllocatedResourcesStatus represents the status of various resources + // allocated for this Pod. + // +featureGate=ResourceHealthStatus + // +optional + // +patchMergeKey=name + // +patchStrategy=merge + // +listType=map + // +listMapKey=name + AllocatedResourcesStatus []ResourceStatus `json:"allocatedResourcesStatus,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,14,rep,name=allocatedResourcesStatus"` +} + +type ResourceStatus struct { + // Name of the resource. Must be unique within the pod and match one of the resources from the pod spec. + // +required + Name ResourceName `json:"name" protobuf:"bytes,1,opt,name=name"` + // List of unique Resources health. Each element in the list contains an unique resource ID and resource health. + // At a minimum, ResourceID must uniquely identify the Resource + // allocated to the Pod on the Node for the lifetime of a Pod. + // See ResourceID type for it's definition. + // +listType=map + // +listMapKey=resourceID + Resources []ResourceHealth `json:"resources,omitempty" protobuf:"bytes,2,rep,name=resources"` +} + +type ResourceHealthStatus string + +const ( + ResourceHealthStatusHealthy ResourceHealthStatus = "Healthy" + ResourceHealthStatusUnhealthy ResourceHealthStatus = "Unhealthy" + ResourceHealthStatusUnknown ResourceHealthStatus = "Unknown" +) + +// ResourceID is calculated based on the source of this resource health information. +// For DevicePlugin: +// +// deviceplugin:DeviceID, where DeviceID is from the Device structure of DevicePlugin's ListAndWatchResponse type: https://github.com/kubernetes/kubernetes/blob/eda1c780543a27c078450e2f17d674471e00f494/staging/src/k8s.io/kubelet/pkg/apis/deviceplugin/v1alpha/api.proto#L61-L73 +// +// DevicePlugin ID is usually a constant for the lifetime of a Node and typically can be used to uniquely identify the device on the node. +// For DRA: +// +// dra://: such a device can be looked up in the information published by that DRA driver to learn more about it. It is designed to be globally unique in a cluster. +type ResourceID string + +// ResourceHealth represents the health of a resource. It has the latest device health information. +// This is a part of KEP https://kep.k8s.io/4680 and historical health changes are planned to be added in future iterations of a KEP. +type ResourceHealth struct { + // ResourceID is the unique identifier of the resource. See the ResourceID type for more information. + ResourceID ResourceID `json:"resourceID" protobuf:"bytes,1,opt,name=resourceID"` + // Health of the resource. + // can be one of: + // - Healthy: operates as normal + // - Unhealthy: reported unhealthy. We consider this a temporary health issue + // since we do not have a mechanism today to distinguish + // temporary and permanent issues. + // - Unknown: The status cannot be determined. + // For example, Device Plugin got unregistered and hasn't been re-registered since. + // + // In future we may want to introduce the PermanentlyUnhealthy Status. + Health ResourceHealthStatus `json:"health,omitempty" protobuf:"bytes,2,name=health"` } // ContainerUser represents user identity information From 2253b53b585e3405c5ce2dda2921db3a0afa02c9 Mon Sep 17 00:00:00 2001 From: Sergey Kanzhelev Date: Mon, 22 Jul 2024 05:20:58 +0000 Subject: [PATCH 2/4] generated files --- api/openapi-spec/swagger.json | 52 + api/openapi-spec/v3/api__v1_openapi.json | 64 + pkg/apis/core/v1/zz_generated.conversion.go | 66 + pkg/apis/core/zz_generated.deepcopy.go | 44 + pkg/generated/openapi/zz_generated.openapi.go | 102 +- .../src/k8s.io/api/core/v1/generated.pb.go | 2588 ++++++++++------- .../src/k8s.io/api/core/v1/generated.proto | 43 + .../core/v1/types_swagger_doc_generated.go | 48 +- .../api/core/v1/zz_generated.deepcopy.go | 44 + .../k8s.io/api/testdata/HEAD/core.v1.Pod.json | 39 +- .../k8s.io/api/testdata/HEAD/core.v1.Pod.pb | Bin 11936 -> 12071 bytes .../k8s.io/api/testdata/HEAD/core.v1.Pod.yaml | 15 + .../HEAD/core.v1.PodStatusResult.json | 39 +- .../testdata/HEAD/core.v1.PodStatusResult.pb | Bin 2013 -> 2148 bytes .../HEAD/core.v1.PodStatusResult.yaml | 15 + .../core/v1/containerstatus.go | 40 +- .../core/v1/resourcehealth.go | 52 + .../core/v1/resourcestatus.go | 57 + .../applyconfigurations/internal/internal.go | 33 + .../client-go/applyconfigurations/utils.go | 4 + 20 files changed, 2261 insertions(+), 1084 deletions(-) create mode 100644 staging/src/k8s.io/client-go/applyconfigurations/core/v1/resourcehealth.go create mode 100644 staging/src/k8s.io/client-go/applyconfigurations/core/v1/resourcestatus.go diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 8ee1136101d..69d6f2ade38 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -6526,6 +6526,19 @@ "description": "AllocatedResources represents the compute resources allocated for this container by the node. Kubelet sets this value to Container.Resources.Requests upon successful pod admission and after successfully admitting desired pod resize.", "type": "object" }, + "allocatedResourcesStatus": { + "description": "AllocatedResourcesStatus represents the status of various resources allocated for this Pod.", + "items": { + "$ref": "#/definitions/io.k8s.api.core.v1.ResourceStatus" + }, + "type": "array", + "x-kubernetes-list-map-keys": [ + "name" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge" + }, "containerID": { "description": "ContainerID is the ID of the container in the format '://'. Where type is a container runtime identifier, returned from Version call of CRI API (for example \"containerd\").", "type": "string" @@ -10502,6 +10515,23 @@ "type": "object", "x-kubernetes-map-type": "atomic" }, + "io.k8s.api.core.v1.ResourceHealth": { + "description": "ResourceHealth represents the health of a resource. It has the latest device health information. This is a part of KEP https://kep.k8s.io/4680 and historical health changes are planned to be added in future iterations of a KEP.", + "properties": { + "health": { + "description": "Health of the resource. can be one of:\n - Healthy: operates as normal\n - Unhealthy: reported unhealthy. We consider this a temporary health issue\n since we do not have a mechanism today to distinguish\n temporary and permanent issues.\n - Unknown: The status cannot be determined.\n For example, Device Plugin got unregistered and hasn't been re-registered since.\n\nIn future we may want to introduce the PermanentlyUnhealthy Status.", + "type": "string" + }, + "resourceID": { + "description": "ResourceID is the unique identifier of the resource. See the ResourceID type for more information.", + "type": "string" + } + }, + "required": [ + "resourceID" + ], + "type": "object" + }, "io.k8s.api.core.v1.ResourceQuota": { "description": "ResourceQuota sets aggregate quota restrictions enforced per namespace", "properties": { @@ -10646,6 +10676,28 @@ }, "type": "object" }, + "io.k8s.api.core.v1.ResourceStatus": { + "properties": { + "name": { + "type": "string" + }, + "resources": { + "description": "List of unique Resources health. Each element in the list contains an unique resource ID and resource health. At a minimum, ResourceID must uniquely identify the Resource allocated to the Pod on the Node for the lifetime of a Pod. See ResourceID type for it's definition.", + "items": { + "$ref": "#/definitions/io.k8s.api.core.v1.ResourceHealth" + }, + "type": "array", + "x-kubernetes-list-map-keys": [ + "resourceID" + ], + "x-kubernetes-list-type": "map" + } + }, + "required": [ + "name" + ], + "type": "object" + }, "io.k8s.api.core.v1.SELinuxOptions": { "description": "SELinuxOptions are the labels to be applied to the container", "properties": { diff --git a/api/openapi-spec/v3/api__v1_openapi.json b/api/openapi-spec/v3/api__v1_openapi.json index d8da6a69ecb..85f68e90fa5 100644 --- a/api/openapi-spec/v3/api__v1_openapi.json +++ b/api/openapi-spec/v3/api__v1_openapi.json @@ -1525,6 +1525,24 @@ "description": "AllocatedResources represents the compute resources allocated for this container by the node. Kubelet sets this value to Container.Resources.Requests upon successful pod admission and after successfully admitting desired pod resize.", "type": "object" }, + "allocatedResourcesStatus": { + "description": "AllocatedResourcesStatus represents the status of various resources allocated for this Pod.", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/io.k8s.api.core.v1.ResourceStatus" + } + ], + "default": {} + }, + "type": "array", + "x-kubernetes-list-map-keys": [ + "name" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge" + }, "containerID": { "description": "ContainerID is the ID of the container in the format '://'. Where type is a container runtime identifier, returned from Version call of CRI API (for example \"containerd\").", "type": "string" @@ -6598,6 +6616,24 @@ "type": "object", "x-kubernetes-map-type": "atomic" }, + "io.k8s.api.core.v1.ResourceHealth": { + "description": "ResourceHealth represents the health of a resource. It has the latest device health information. This is a part of KEP https://kep.k8s.io/4680 and historical health changes are planned to be added in future iterations of a KEP.", + "properties": { + "health": { + "description": "Health of the resource. can be one of:\n - Healthy: operates as normal\n - Unhealthy: reported unhealthy. We consider this a temporary health issue\n since we do not have a mechanism today to distinguish\n temporary and permanent issues.\n - Unknown: The status cannot be determined.\n For example, Device Plugin got unregistered and hasn't been re-registered since.\n\nIn future we may want to introduce the PermanentlyUnhealthy Status.", + "type": "string" + }, + "resourceID": { + "default": "", + "description": "ResourceID is the unique identifier of the resource. See the ResourceID type for more information.", + "type": "string" + } + }, + "required": [ + "resourceID" + ], + "type": "object" + }, "io.k8s.api.core.v1.ResourceQuota": { "description": "ResourceQuota sets aggregate quota restrictions enforced per namespace", "properties": { @@ -6777,6 +6813,34 @@ }, "type": "object" }, + "io.k8s.api.core.v1.ResourceStatus": { + "properties": { + "name": { + "default": "", + "type": "string" + }, + "resources": { + "description": "List of unique Resources health. Each element in the list contains an unique resource ID and resource health. At a minimum, ResourceID must uniquely identify the Resource allocated to the Pod on the Node for the lifetime of a Pod. See ResourceID type for it's definition.", + "items": { + "allOf": [ + { + "$ref": "#/components/schemas/io.k8s.api.core.v1.ResourceHealth" + } + ], + "default": {} + }, + "type": "array", + "x-kubernetes-list-map-keys": [ + "resourceID" + ], + "x-kubernetes-list-type": "map" + } + }, + "required": [ + "name" + ], + "type": "object" + }, "io.k8s.api.core.v1.SELinuxOptions": { "description": "SELinuxOptions are the labels to be applied to the container", "properties": { diff --git a/pkg/apis/core/v1/zz_generated.conversion.go b/pkg/apis/core/v1/zz_generated.conversion.go index 6a250a2fa78..19b869eba6c 100644 --- a/pkg/apis/core/v1/zz_generated.conversion.go +++ b/pkg/apis/core/v1/zz_generated.conversion.go @@ -1722,6 +1722,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*v1.ResourceHealth)(nil), (*core.ResourceHealth)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_ResourceHealth_To_core_ResourceHealth(a.(*v1.ResourceHealth), b.(*core.ResourceHealth), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.ResourceHealth)(nil), (*v1.ResourceHealth)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_ResourceHealth_To_v1_ResourceHealth(a.(*core.ResourceHealth), b.(*v1.ResourceHealth), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*v1.ResourceQuota)(nil), (*core.ResourceQuota)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1_ResourceQuota_To_core_ResourceQuota(a.(*v1.ResourceQuota), b.(*core.ResourceQuota), scope) }); err != nil { @@ -1772,6 +1782,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*v1.ResourceStatus)(nil), (*core.ResourceStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_ResourceStatus_To_core_ResourceStatus(a.(*v1.ResourceStatus), b.(*core.ResourceStatus), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.ResourceStatus)(nil), (*v1.ResourceStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_ResourceStatus_To_v1_ResourceStatus(a.(*core.ResourceStatus), b.(*v1.ResourceStatus), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*v1.SELinuxOptions)(nil), (*core.SELinuxOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1_SELinuxOptions_To_core_SELinuxOptions(a.(*v1.SELinuxOptions), b.(*core.SELinuxOptions), scope) }); err != nil { @@ -3379,6 +3399,7 @@ func autoConvert_v1_ContainerStatus_To_core_ContainerStatus(in *v1.ContainerStat out.Resources = (*core.ResourceRequirements)(unsafe.Pointer(in.Resources)) out.VolumeMounts = *(*[]core.VolumeMountStatus)(unsafe.Pointer(&in.VolumeMounts)) out.User = (*core.ContainerUser)(unsafe.Pointer(in.User)) + out.AllocatedResourcesStatus = *(*[]core.ResourceStatus)(unsafe.Pointer(&in.AllocatedResourcesStatus)) return nil } @@ -3405,6 +3426,7 @@ func autoConvert_core_ContainerStatus_To_v1_ContainerStatus(in *core.ContainerSt out.Resources = (*v1.ResourceRequirements)(unsafe.Pointer(in.Resources)) out.VolumeMounts = *(*[]v1.VolumeMountStatus)(unsafe.Pointer(&in.VolumeMounts)) out.User = (*v1.ContainerUser)(unsafe.Pointer(in.User)) + out.AllocatedResourcesStatus = *(*[]v1.ResourceStatus)(unsafe.Pointer(&in.AllocatedResourcesStatus)) return nil } @@ -7483,6 +7505,28 @@ func Convert_core_ResourceFieldSelector_To_v1_ResourceFieldSelector(in *core.Res return autoConvert_core_ResourceFieldSelector_To_v1_ResourceFieldSelector(in, out, s) } +func autoConvert_v1_ResourceHealth_To_core_ResourceHealth(in *v1.ResourceHealth, out *core.ResourceHealth, s conversion.Scope) error { + out.ResourceID = core.ResourceID(in.ResourceID) + out.Health = core.ResourceHealthStatus(in.Health) + return nil +} + +// Convert_v1_ResourceHealth_To_core_ResourceHealth is an autogenerated conversion function. +func Convert_v1_ResourceHealth_To_core_ResourceHealth(in *v1.ResourceHealth, out *core.ResourceHealth, s conversion.Scope) error { + return autoConvert_v1_ResourceHealth_To_core_ResourceHealth(in, out, s) +} + +func autoConvert_core_ResourceHealth_To_v1_ResourceHealth(in *core.ResourceHealth, out *v1.ResourceHealth, s conversion.Scope) error { + out.ResourceID = v1.ResourceID(in.ResourceID) + out.Health = v1.ResourceHealthStatus(in.Health) + return nil +} + +// Convert_core_ResourceHealth_To_v1_ResourceHealth is an autogenerated conversion function. +func Convert_core_ResourceHealth_To_v1_ResourceHealth(in *core.ResourceHealth, out *v1.ResourceHealth, s conversion.Scope) error { + return autoConvert_core_ResourceHealth_To_v1_ResourceHealth(in, out, s) +} + func autoConvert_v1_ResourceQuota_To_core_ResourceQuota(in *v1.ResourceQuota, out *core.ResourceQuota, s conversion.Scope) error { out.ObjectMeta = in.ObjectMeta if err := Convert_v1_ResourceQuotaSpec_To_core_ResourceQuotaSpec(&in.Spec, &out.Spec, s); err != nil { @@ -7607,6 +7651,28 @@ func Convert_core_ResourceRequirements_To_v1_ResourceRequirements(in *core.Resou return autoConvert_core_ResourceRequirements_To_v1_ResourceRequirements(in, out, s) } +func autoConvert_v1_ResourceStatus_To_core_ResourceStatus(in *v1.ResourceStatus, out *core.ResourceStatus, s conversion.Scope) error { + out.Name = core.ResourceName(in.Name) + out.Resources = *(*[]core.ResourceHealth)(unsafe.Pointer(&in.Resources)) + return nil +} + +// Convert_v1_ResourceStatus_To_core_ResourceStatus is an autogenerated conversion function. +func Convert_v1_ResourceStatus_To_core_ResourceStatus(in *v1.ResourceStatus, out *core.ResourceStatus, s conversion.Scope) error { + return autoConvert_v1_ResourceStatus_To_core_ResourceStatus(in, out, s) +} + +func autoConvert_core_ResourceStatus_To_v1_ResourceStatus(in *core.ResourceStatus, out *v1.ResourceStatus, s conversion.Scope) error { + out.Name = v1.ResourceName(in.Name) + out.Resources = *(*[]v1.ResourceHealth)(unsafe.Pointer(&in.Resources)) + return nil +} + +// Convert_core_ResourceStatus_To_v1_ResourceStatus is an autogenerated conversion function. +func Convert_core_ResourceStatus_To_v1_ResourceStatus(in *core.ResourceStatus, out *v1.ResourceStatus, s conversion.Scope) error { + return autoConvert_core_ResourceStatus_To_v1_ResourceStatus(in, out, s) +} + func autoConvert_v1_SELinuxOptions_To_core_SELinuxOptions(in *v1.SELinuxOptions, out *core.SELinuxOptions, s conversion.Scope) error { out.User = in.User out.Role = in.Role diff --git a/pkg/apis/core/zz_generated.deepcopy.go b/pkg/apis/core/zz_generated.deepcopy.go index 23da39eb117..f7ea2a6456a 100644 --- a/pkg/apis/core/zz_generated.deepcopy.go +++ b/pkg/apis/core/zz_generated.deepcopy.go @@ -1048,6 +1048,13 @@ func (in *ContainerStatus) DeepCopyInto(out *ContainerStatus) { *out = new(ContainerUser) (*in).DeepCopyInto(*out) } + if in.AllocatedResourcesStatus != nil { + in, out := &in.AllocatedResourcesStatus, &out.AllocatedResourcesStatus + *out = make([]ResourceStatus, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } @@ -4979,6 +4986,22 @@ func (in *ResourceFieldSelector) DeepCopy() *ResourceFieldSelector { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourceHealth) DeepCopyInto(out *ResourceHealth) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceHealth. +func (in *ResourceHealth) DeepCopy() *ResourceHealth { + if in == nil { + return nil + } + out := new(ResourceHealth) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in ResourceList) DeepCopyInto(out *ResourceList) { { @@ -5160,6 +5183,27 @@ func (in *ResourceRequirements) DeepCopy() *ResourceRequirements { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourceStatus) DeepCopyInto(out *ResourceStatus) { + *out = *in + if in.Resources != nil { + in, out := &in.Resources, &out.Resources + *out = make([]ResourceHealth, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceStatus. +func (in *ResourceStatus) DeepCopy() *ResourceStatus { + if in == nil { + return nil + } + out := new(ResourceStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SELinuxOptions) DeepCopyInto(out *SELinuxOptions) { *out = *in diff --git a/pkg/generated/openapi/zz_generated.openapi.go b/pkg/generated/openapi/zz_generated.openapi.go index dd85c8883b8..b7d65ffacb4 100644 --- a/pkg/generated/openapi/zz_generated.openapi.go +++ b/pkg/generated/openapi/zz_generated.openapi.go @@ -553,11 +553,13 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "k8s.io/api/core/v1.ReplicationControllerStatus": schema_k8sio_api_core_v1_ReplicationControllerStatus(ref), "k8s.io/api/core/v1.ResourceClaim": schema_k8sio_api_core_v1_ResourceClaim(ref), "k8s.io/api/core/v1.ResourceFieldSelector": schema_k8sio_api_core_v1_ResourceFieldSelector(ref), + "k8s.io/api/core/v1.ResourceHealth": schema_k8sio_api_core_v1_ResourceHealth(ref), "k8s.io/api/core/v1.ResourceQuota": schema_k8sio_api_core_v1_ResourceQuota(ref), "k8s.io/api/core/v1.ResourceQuotaList": schema_k8sio_api_core_v1_ResourceQuotaList(ref), "k8s.io/api/core/v1.ResourceQuotaSpec": schema_k8sio_api_core_v1_ResourceQuotaSpec(ref), "k8s.io/api/core/v1.ResourceQuotaStatus": schema_k8sio_api_core_v1_ResourceQuotaStatus(ref), "k8s.io/api/core/v1.ResourceRequirements": schema_k8sio_api_core_v1_ResourceRequirements(ref), + "k8s.io/api/core/v1.ResourceStatus": schema_k8sio_api_core_v1_ResourceStatus(ref), "k8s.io/api/core/v1.SELinuxOptions": schema_k8sio_api_core_v1_SELinuxOptions(ref), "k8s.io/api/core/v1.ScaleIOPersistentVolumeSource": schema_k8sio_api_core_v1_ScaleIOPersistentVolumeSource(ref), "k8s.io/api/core/v1.ScaleIOVolumeSource": schema_k8sio_api_core_v1_ScaleIOVolumeSource(ref), @@ -21099,12 +21101,36 @@ func schema_k8sio_api_core_v1_ContainerStatus(ref common.ReferenceCallback) comm Ref: ref("k8s.io/api/core/v1.ContainerUser"), }, }, + "allocatedResourcesStatus": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "name", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "AllocatedResourcesStatus represents the status of various resources allocated for this Pod.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/core/v1.ResourceStatus"), + }, + }, + }, + }, + }, }, Required: []string{"name", "ready", "restartCount", "image", "imageID"}, }, }, Dependencies: []string{ - "k8s.io/api/core/v1.ContainerState", "k8s.io/api/core/v1.ContainerUser", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.VolumeMountStatus", "k8s.io/apimachinery/pkg/api/resource.Quantity"}, + "k8s.io/api/core/v1.ContainerState", "k8s.io/api/core/v1.ContainerUser", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.ResourceStatus", "k8s.io/api/core/v1.VolumeMountStatus", "k8s.io/apimachinery/pkg/api/resource.Quantity"}, } } @@ -29263,6 +29289,35 @@ func schema_k8sio_api_core_v1_ResourceFieldSelector(ref common.ReferenceCallback } } +func schema_k8sio_api_core_v1_ResourceHealth(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceHealth represents the health of a resource. It has the latest device health information. This is a part of KEP https://kep.k8s.io/4680 and historical health changes are planned to be added in future iterations of a KEP.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "resourceID": { + SchemaProps: spec.SchemaProps{ + Description: "ResourceID is the unique identifier of the resource. See the ResourceID type for more information.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "health": { + SchemaProps: spec.SchemaProps{ + Description: "Health of the resource. can be one of:\n - Healthy: operates as normal\n - Unhealthy: reported unhealthy. We consider this a temporary health issue\n since we do not have a mechanism today to distinguish\n temporary and permanent issues.\n - Unknown: The status cannot be determined.\n For example, Device Plugin got unregistered and hasn't been re-registered since.\n\nIn future we may want to introduce the PermanentlyUnhealthy Status.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"resourceID"}, + }, + }, + } +} + func schema_k8sio_api_core_v1_ResourceQuota(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -29528,6 +29583,51 @@ func schema_k8sio_api_core_v1_ResourceRequirements(ref common.ReferenceCallback) } } +func schema_k8sio_api_core_v1_ResourceStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "Name of the resource. Must be unique within the pod and match one of the resources from the pod spec.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "resources": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "resourceID", + }, + "x-kubernetes-list-type": "map", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "List of unique Resources health. Each element in the list contains an unique resource ID and resource health. At a minimum, ResourceID must uniquely identify the Resource allocated to the Pod on the Node for the lifetime of a Pod. See ResourceID type for it's definition.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/api/core/v1.ResourceHealth"), + }, + }, + }, + }, + }, + }, + Required: []string{"name"}, + }, + }, + Dependencies: []string{ + "k8s.io/api/core/v1.ResourceHealth"}, + } +} + func schema_k8sio_api_core_v1_SELinuxOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/staging/src/k8s.io/api/core/v1/generated.pb.go b/staging/src/k8s.io/api/core/v1/generated.pb.go index 5f5df875658..5654ee48291 100644 --- a/staging/src/k8s.io/api/core/v1/generated.pb.go +++ b/staging/src/k8s.io/api/core/v1/generated.pb.go @@ -4949,10 +4949,38 @@ func (m *ResourceFieldSelector) XXX_DiscardUnknown() { var xxx_messageInfo_ResourceFieldSelector proto.InternalMessageInfo +func (m *ResourceHealth) Reset() { *m = ResourceHealth{} } +func (*ResourceHealth) ProtoMessage() {} +func (*ResourceHealth) Descriptor() ([]byte, []int) { + return fileDescriptor_6c07b07c062484ab, []int{175} +} +func (m *ResourceHealth) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceHealth) 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 *ResourceHealth) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceHealth.Merge(m, src) +} +func (m *ResourceHealth) XXX_Size() int { + return m.Size() +} +func (m *ResourceHealth) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceHealth.DiscardUnknown(m) +} + +var xxx_messageInfo_ResourceHealth proto.InternalMessageInfo + func (m *ResourceQuota) Reset() { *m = ResourceQuota{} } func (*ResourceQuota) ProtoMessage() {} func (*ResourceQuota) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{175} + return fileDescriptor_6c07b07c062484ab, []int{176} } func (m *ResourceQuota) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4980,7 +5008,7 @@ var xxx_messageInfo_ResourceQuota proto.InternalMessageInfo func (m *ResourceQuotaList) Reset() { *m = ResourceQuotaList{} } func (*ResourceQuotaList) ProtoMessage() {} func (*ResourceQuotaList) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{176} + return fileDescriptor_6c07b07c062484ab, []int{177} } func (m *ResourceQuotaList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5008,7 +5036,7 @@ var xxx_messageInfo_ResourceQuotaList proto.InternalMessageInfo func (m *ResourceQuotaSpec) Reset() { *m = ResourceQuotaSpec{} } func (*ResourceQuotaSpec) ProtoMessage() {} func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{177} + return fileDescriptor_6c07b07c062484ab, []int{178} } func (m *ResourceQuotaSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5036,7 +5064,7 @@ var xxx_messageInfo_ResourceQuotaSpec proto.InternalMessageInfo func (m *ResourceQuotaStatus) Reset() { *m = ResourceQuotaStatus{} } func (*ResourceQuotaStatus) ProtoMessage() {} func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{178} + return fileDescriptor_6c07b07c062484ab, []int{179} } func (m *ResourceQuotaStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5064,7 +5092,7 @@ var xxx_messageInfo_ResourceQuotaStatus proto.InternalMessageInfo func (m *ResourceRequirements) Reset() { *m = ResourceRequirements{} } func (*ResourceRequirements) ProtoMessage() {} func (*ResourceRequirements) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{179} + return fileDescriptor_6c07b07c062484ab, []int{180} } func (m *ResourceRequirements) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5089,10 +5117,38 @@ func (m *ResourceRequirements) XXX_DiscardUnknown() { var xxx_messageInfo_ResourceRequirements proto.InternalMessageInfo +func (m *ResourceStatus) Reset() { *m = ResourceStatus{} } +func (*ResourceStatus) ProtoMessage() {} +func (*ResourceStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_6c07b07c062484ab, []int{181} +} +func (m *ResourceStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ResourceStatus) 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 *ResourceStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ResourceStatus.Merge(m, src) +} +func (m *ResourceStatus) XXX_Size() int { + return m.Size() +} +func (m *ResourceStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ResourceStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_ResourceStatus proto.InternalMessageInfo + func (m *SELinuxOptions) Reset() { *m = SELinuxOptions{} } func (*SELinuxOptions) ProtoMessage() {} func (*SELinuxOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{180} + return fileDescriptor_6c07b07c062484ab, []int{182} } func (m *SELinuxOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5120,7 +5176,7 @@ var xxx_messageInfo_SELinuxOptions proto.InternalMessageInfo func (m *ScaleIOPersistentVolumeSource) Reset() { *m = ScaleIOPersistentVolumeSource{} } func (*ScaleIOPersistentVolumeSource) ProtoMessage() {} func (*ScaleIOPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{181} + return fileDescriptor_6c07b07c062484ab, []int{183} } func (m *ScaleIOPersistentVolumeSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5148,7 +5204,7 @@ var xxx_messageInfo_ScaleIOPersistentVolumeSource proto.InternalMessageInfo func (m *ScaleIOVolumeSource) Reset() { *m = ScaleIOVolumeSource{} } func (*ScaleIOVolumeSource) ProtoMessage() {} func (*ScaleIOVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{182} + return fileDescriptor_6c07b07c062484ab, []int{184} } func (m *ScaleIOVolumeSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5176,7 +5232,7 @@ var xxx_messageInfo_ScaleIOVolumeSource proto.InternalMessageInfo func (m *ScopeSelector) Reset() { *m = ScopeSelector{} } func (*ScopeSelector) ProtoMessage() {} func (*ScopeSelector) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{183} + return fileDescriptor_6c07b07c062484ab, []int{185} } func (m *ScopeSelector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5204,7 +5260,7 @@ var xxx_messageInfo_ScopeSelector proto.InternalMessageInfo func (m *ScopedResourceSelectorRequirement) Reset() { *m = ScopedResourceSelectorRequirement{} } func (*ScopedResourceSelectorRequirement) ProtoMessage() {} func (*ScopedResourceSelectorRequirement) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{184} + return fileDescriptor_6c07b07c062484ab, []int{186} } func (m *ScopedResourceSelectorRequirement) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5232,7 +5288,7 @@ var xxx_messageInfo_ScopedResourceSelectorRequirement proto.InternalMessageInfo func (m *SeccompProfile) Reset() { *m = SeccompProfile{} } func (*SeccompProfile) ProtoMessage() {} func (*SeccompProfile) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{185} + return fileDescriptor_6c07b07c062484ab, []int{187} } func (m *SeccompProfile) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5260,7 +5316,7 @@ var xxx_messageInfo_SeccompProfile proto.InternalMessageInfo func (m *Secret) Reset() { *m = Secret{} } func (*Secret) ProtoMessage() {} func (*Secret) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{186} + return fileDescriptor_6c07b07c062484ab, []int{188} } func (m *Secret) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5288,7 +5344,7 @@ var xxx_messageInfo_Secret proto.InternalMessageInfo func (m *SecretEnvSource) Reset() { *m = SecretEnvSource{} } func (*SecretEnvSource) ProtoMessage() {} func (*SecretEnvSource) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{187} + return fileDescriptor_6c07b07c062484ab, []int{189} } func (m *SecretEnvSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5316,7 +5372,7 @@ var xxx_messageInfo_SecretEnvSource proto.InternalMessageInfo func (m *SecretKeySelector) Reset() { *m = SecretKeySelector{} } func (*SecretKeySelector) ProtoMessage() {} func (*SecretKeySelector) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{188} + return fileDescriptor_6c07b07c062484ab, []int{190} } func (m *SecretKeySelector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5344,7 +5400,7 @@ var xxx_messageInfo_SecretKeySelector proto.InternalMessageInfo func (m *SecretList) Reset() { *m = SecretList{} } func (*SecretList) ProtoMessage() {} func (*SecretList) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{189} + return fileDescriptor_6c07b07c062484ab, []int{191} } func (m *SecretList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5372,7 +5428,7 @@ var xxx_messageInfo_SecretList proto.InternalMessageInfo func (m *SecretProjection) Reset() { *m = SecretProjection{} } func (*SecretProjection) ProtoMessage() {} func (*SecretProjection) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{190} + return fileDescriptor_6c07b07c062484ab, []int{192} } func (m *SecretProjection) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5400,7 +5456,7 @@ var xxx_messageInfo_SecretProjection proto.InternalMessageInfo func (m *SecretReference) Reset() { *m = SecretReference{} } func (*SecretReference) ProtoMessage() {} func (*SecretReference) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{191} + return fileDescriptor_6c07b07c062484ab, []int{193} } func (m *SecretReference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5428,7 +5484,7 @@ var xxx_messageInfo_SecretReference proto.InternalMessageInfo func (m *SecretVolumeSource) Reset() { *m = SecretVolumeSource{} } func (*SecretVolumeSource) ProtoMessage() {} func (*SecretVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{192} + return fileDescriptor_6c07b07c062484ab, []int{194} } func (m *SecretVolumeSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5456,7 +5512,7 @@ var xxx_messageInfo_SecretVolumeSource proto.InternalMessageInfo func (m *SecurityContext) Reset() { *m = SecurityContext{} } func (*SecurityContext) ProtoMessage() {} func (*SecurityContext) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{193} + return fileDescriptor_6c07b07c062484ab, []int{195} } func (m *SecurityContext) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5484,7 +5540,7 @@ var xxx_messageInfo_SecurityContext proto.InternalMessageInfo func (m *SerializedReference) Reset() { *m = SerializedReference{} } func (*SerializedReference) ProtoMessage() {} func (*SerializedReference) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{194} + return fileDescriptor_6c07b07c062484ab, []int{196} } func (m *SerializedReference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5512,7 +5568,7 @@ var xxx_messageInfo_SerializedReference proto.InternalMessageInfo func (m *Service) Reset() { *m = Service{} } func (*Service) ProtoMessage() {} func (*Service) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{195} + return fileDescriptor_6c07b07c062484ab, []int{197} } func (m *Service) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5540,7 +5596,7 @@ var xxx_messageInfo_Service proto.InternalMessageInfo func (m *ServiceAccount) Reset() { *m = ServiceAccount{} } func (*ServiceAccount) ProtoMessage() {} func (*ServiceAccount) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{196} + return fileDescriptor_6c07b07c062484ab, []int{198} } func (m *ServiceAccount) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5568,7 +5624,7 @@ var xxx_messageInfo_ServiceAccount proto.InternalMessageInfo func (m *ServiceAccountList) Reset() { *m = ServiceAccountList{} } func (*ServiceAccountList) ProtoMessage() {} func (*ServiceAccountList) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{197} + return fileDescriptor_6c07b07c062484ab, []int{199} } func (m *ServiceAccountList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5596,7 +5652,7 @@ var xxx_messageInfo_ServiceAccountList proto.InternalMessageInfo func (m *ServiceAccountTokenProjection) Reset() { *m = ServiceAccountTokenProjection{} } func (*ServiceAccountTokenProjection) ProtoMessage() {} func (*ServiceAccountTokenProjection) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{198} + return fileDescriptor_6c07b07c062484ab, []int{200} } func (m *ServiceAccountTokenProjection) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5624,7 +5680,7 @@ var xxx_messageInfo_ServiceAccountTokenProjection proto.InternalMessageInfo func (m *ServiceList) Reset() { *m = ServiceList{} } func (*ServiceList) ProtoMessage() {} func (*ServiceList) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{199} + return fileDescriptor_6c07b07c062484ab, []int{201} } func (m *ServiceList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5652,7 +5708,7 @@ var xxx_messageInfo_ServiceList proto.InternalMessageInfo func (m *ServicePort) Reset() { *m = ServicePort{} } func (*ServicePort) ProtoMessage() {} func (*ServicePort) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{200} + return fileDescriptor_6c07b07c062484ab, []int{202} } func (m *ServicePort) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5680,7 +5736,7 @@ var xxx_messageInfo_ServicePort proto.InternalMessageInfo func (m *ServiceProxyOptions) Reset() { *m = ServiceProxyOptions{} } func (*ServiceProxyOptions) ProtoMessage() {} func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{201} + return fileDescriptor_6c07b07c062484ab, []int{203} } func (m *ServiceProxyOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5708,7 +5764,7 @@ var xxx_messageInfo_ServiceProxyOptions proto.InternalMessageInfo func (m *ServiceSpec) Reset() { *m = ServiceSpec{} } func (*ServiceSpec) ProtoMessage() {} func (*ServiceSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{202} + return fileDescriptor_6c07b07c062484ab, []int{204} } func (m *ServiceSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5736,7 +5792,7 @@ var xxx_messageInfo_ServiceSpec proto.InternalMessageInfo func (m *ServiceStatus) Reset() { *m = ServiceStatus{} } func (*ServiceStatus) ProtoMessage() {} func (*ServiceStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{203} + return fileDescriptor_6c07b07c062484ab, []int{205} } func (m *ServiceStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5764,7 +5820,7 @@ var xxx_messageInfo_ServiceStatus proto.InternalMessageInfo func (m *SessionAffinityConfig) Reset() { *m = SessionAffinityConfig{} } func (*SessionAffinityConfig) ProtoMessage() {} func (*SessionAffinityConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{204} + return fileDescriptor_6c07b07c062484ab, []int{206} } func (m *SessionAffinityConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5792,7 +5848,7 @@ var xxx_messageInfo_SessionAffinityConfig proto.InternalMessageInfo func (m *SleepAction) Reset() { *m = SleepAction{} } func (*SleepAction) ProtoMessage() {} func (*SleepAction) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{205} + return fileDescriptor_6c07b07c062484ab, []int{207} } func (m *SleepAction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5820,7 +5876,7 @@ var xxx_messageInfo_SleepAction proto.InternalMessageInfo func (m *StorageOSPersistentVolumeSource) Reset() { *m = StorageOSPersistentVolumeSource{} } func (*StorageOSPersistentVolumeSource) ProtoMessage() {} func (*StorageOSPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{206} + return fileDescriptor_6c07b07c062484ab, []int{208} } func (m *StorageOSPersistentVolumeSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5848,7 +5904,7 @@ var xxx_messageInfo_StorageOSPersistentVolumeSource proto.InternalMessageInfo func (m *StorageOSVolumeSource) Reset() { *m = StorageOSVolumeSource{} } func (*StorageOSVolumeSource) ProtoMessage() {} func (*StorageOSVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{207} + return fileDescriptor_6c07b07c062484ab, []int{209} } func (m *StorageOSVolumeSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5876,7 +5932,7 @@ var xxx_messageInfo_StorageOSVolumeSource proto.InternalMessageInfo func (m *Sysctl) Reset() { *m = Sysctl{} } func (*Sysctl) ProtoMessage() {} func (*Sysctl) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{208} + return fileDescriptor_6c07b07c062484ab, []int{210} } func (m *Sysctl) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5904,7 +5960,7 @@ var xxx_messageInfo_Sysctl proto.InternalMessageInfo func (m *TCPSocketAction) Reset() { *m = TCPSocketAction{} } func (*TCPSocketAction) ProtoMessage() {} func (*TCPSocketAction) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{209} + return fileDescriptor_6c07b07c062484ab, []int{211} } func (m *TCPSocketAction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5932,7 +5988,7 @@ var xxx_messageInfo_TCPSocketAction proto.InternalMessageInfo func (m *Taint) Reset() { *m = Taint{} } func (*Taint) ProtoMessage() {} func (*Taint) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{210} + return fileDescriptor_6c07b07c062484ab, []int{212} } func (m *Taint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5960,7 +6016,7 @@ var xxx_messageInfo_Taint proto.InternalMessageInfo func (m *Toleration) Reset() { *m = Toleration{} } func (*Toleration) ProtoMessage() {} func (*Toleration) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{211} + return fileDescriptor_6c07b07c062484ab, []int{213} } func (m *Toleration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5988,7 +6044,7 @@ var xxx_messageInfo_Toleration proto.InternalMessageInfo func (m *TopologySelectorLabelRequirement) Reset() { *m = TopologySelectorLabelRequirement{} } func (*TopologySelectorLabelRequirement) ProtoMessage() {} func (*TopologySelectorLabelRequirement) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{212} + return fileDescriptor_6c07b07c062484ab, []int{214} } func (m *TopologySelectorLabelRequirement) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6016,7 +6072,7 @@ var xxx_messageInfo_TopologySelectorLabelRequirement proto.InternalMessageInfo func (m *TopologySelectorTerm) Reset() { *m = TopologySelectorTerm{} } func (*TopologySelectorTerm) ProtoMessage() {} func (*TopologySelectorTerm) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{213} + return fileDescriptor_6c07b07c062484ab, []int{215} } func (m *TopologySelectorTerm) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6044,7 +6100,7 @@ var xxx_messageInfo_TopologySelectorTerm proto.InternalMessageInfo func (m *TopologySpreadConstraint) Reset() { *m = TopologySpreadConstraint{} } func (*TopologySpreadConstraint) ProtoMessage() {} func (*TopologySpreadConstraint) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{214} + return fileDescriptor_6c07b07c062484ab, []int{216} } func (m *TopologySpreadConstraint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6072,7 +6128,7 @@ var xxx_messageInfo_TopologySpreadConstraint proto.InternalMessageInfo func (m *TypedLocalObjectReference) Reset() { *m = TypedLocalObjectReference{} } func (*TypedLocalObjectReference) ProtoMessage() {} func (*TypedLocalObjectReference) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{215} + return fileDescriptor_6c07b07c062484ab, []int{217} } func (m *TypedLocalObjectReference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6100,7 +6156,7 @@ var xxx_messageInfo_TypedLocalObjectReference proto.InternalMessageInfo func (m *TypedObjectReference) Reset() { *m = TypedObjectReference{} } func (*TypedObjectReference) ProtoMessage() {} func (*TypedObjectReference) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{216} + return fileDescriptor_6c07b07c062484ab, []int{218} } func (m *TypedObjectReference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6128,7 +6184,7 @@ var xxx_messageInfo_TypedObjectReference proto.InternalMessageInfo func (m *Volume) Reset() { *m = Volume{} } func (*Volume) ProtoMessage() {} func (*Volume) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{217} + return fileDescriptor_6c07b07c062484ab, []int{219} } func (m *Volume) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6156,7 +6212,7 @@ var xxx_messageInfo_Volume proto.InternalMessageInfo func (m *VolumeDevice) Reset() { *m = VolumeDevice{} } func (*VolumeDevice) ProtoMessage() {} func (*VolumeDevice) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{218} + return fileDescriptor_6c07b07c062484ab, []int{220} } func (m *VolumeDevice) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6184,7 +6240,7 @@ var xxx_messageInfo_VolumeDevice proto.InternalMessageInfo func (m *VolumeMount) Reset() { *m = VolumeMount{} } func (*VolumeMount) ProtoMessage() {} func (*VolumeMount) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{219} + return fileDescriptor_6c07b07c062484ab, []int{221} } func (m *VolumeMount) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6212,7 +6268,7 @@ var xxx_messageInfo_VolumeMount proto.InternalMessageInfo func (m *VolumeMountStatus) Reset() { *m = VolumeMountStatus{} } func (*VolumeMountStatus) ProtoMessage() {} func (*VolumeMountStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{220} + return fileDescriptor_6c07b07c062484ab, []int{222} } func (m *VolumeMountStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6240,7 +6296,7 @@ var xxx_messageInfo_VolumeMountStatus proto.InternalMessageInfo func (m *VolumeNodeAffinity) Reset() { *m = VolumeNodeAffinity{} } func (*VolumeNodeAffinity) ProtoMessage() {} func (*VolumeNodeAffinity) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{221} + return fileDescriptor_6c07b07c062484ab, []int{223} } func (m *VolumeNodeAffinity) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6268,7 +6324,7 @@ var xxx_messageInfo_VolumeNodeAffinity proto.InternalMessageInfo func (m *VolumeProjection) Reset() { *m = VolumeProjection{} } func (*VolumeProjection) ProtoMessage() {} func (*VolumeProjection) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{222} + return fileDescriptor_6c07b07c062484ab, []int{224} } func (m *VolumeProjection) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6296,7 +6352,7 @@ var xxx_messageInfo_VolumeProjection proto.InternalMessageInfo func (m *VolumeResourceRequirements) Reset() { *m = VolumeResourceRequirements{} } func (*VolumeResourceRequirements) ProtoMessage() {} func (*VolumeResourceRequirements) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{223} + return fileDescriptor_6c07b07c062484ab, []int{225} } func (m *VolumeResourceRequirements) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6324,7 +6380,7 @@ var xxx_messageInfo_VolumeResourceRequirements proto.InternalMessageInfo func (m *VolumeSource) Reset() { *m = VolumeSource{} } func (*VolumeSource) ProtoMessage() {} func (*VolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{224} + return fileDescriptor_6c07b07c062484ab, []int{226} } func (m *VolumeSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6352,7 +6408,7 @@ var xxx_messageInfo_VolumeSource proto.InternalMessageInfo func (m *VsphereVirtualDiskVolumeSource) Reset() { *m = VsphereVirtualDiskVolumeSource{} } func (*VsphereVirtualDiskVolumeSource) ProtoMessage() {} func (*VsphereVirtualDiskVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{225} + return fileDescriptor_6c07b07c062484ab, []int{227} } func (m *VsphereVirtualDiskVolumeSource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6380,7 +6436,7 @@ var xxx_messageInfo_VsphereVirtualDiskVolumeSource proto.InternalMessageInfo func (m *WeightedPodAffinityTerm) Reset() { *m = WeightedPodAffinityTerm{} } func (*WeightedPodAffinityTerm) ProtoMessage() {} func (*WeightedPodAffinityTerm) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{226} + return fileDescriptor_6c07b07c062484ab, []int{228} } func (m *WeightedPodAffinityTerm) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6408,7 +6464,7 @@ var xxx_messageInfo_WeightedPodAffinityTerm proto.InternalMessageInfo func (m *WindowsSecurityContextOptions) Reset() { *m = WindowsSecurityContextOptions{} } func (*WindowsSecurityContextOptions) ProtoMessage() {} func (*WindowsSecurityContextOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_6c07b07c062484ab, []int{227} + return fileDescriptor_6c07b07c062484ab, []int{229} } func (m *WindowsSecurityContextOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6630,6 +6686,7 @@ func init() { proto.RegisterType((*ReplicationControllerStatus)(nil), "k8s.io.api.core.v1.ReplicationControllerStatus") proto.RegisterType((*ResourceClaim)(nil), "k8s.io.api.core.v1.ResourceClaim") proto.RegisterType((*ResourceFieldSelector)(nil), "k8s.io.api.core.v1.ResourceFieldSelector") + proto.RegisterType((*ResourceHealth)(nil), "k8s.io.api.core.v1.ResourceHealth") proto.RegisterType((*ResourceQuota)(nil), "k8s.io.api.core.v1.ResourceQuota") proto.RegisterType((*ResourceQuotaList)(nil), "k8s.io.api.core.v1.ResourceQuotaList") proto.RegisterType((*ResourceQuotaSpec)(nil), "k8s.io.api.core.v1.ResourceQuotaSpec") @@ -6640,6 +6697,7 @@ func init() { proto.RegisterType((*ResourceRequirements)(nil), "k8s.io.api.core.v1.ResourceRequirements") proto.RegisterMapType((ResourceList)(nil), "k8s.io.api.core.v1.ResourceRequirements.LimitsEntry") proto.RegisterMapType((ResourceList)(nil), "k8s.io.api.core.v1.ResourceRequirements.RequestsEntry") + proto.RegisterType((*ResourceStatus)(nil), "k8s.io.api.core.v1.ResourceStatus") proto.RegisterType((*SELinuxOptions)(nil), "k8s.io.api.core.v1.SELinuxOptions") proto.RegisterType((*ScaleIOPersistentVolumeSource)(nil), "k8s.io.api.core.v1.ScaleIOPersistentVolumeSource") proto.RegisterType((*ScaleIOVolumeSource)(nil), "k8s.io.api.core.v1.ScaleIOVolumeSource") @@ -6700,1003 +6758,1011 @@ func init() { } var fileDescriptor_6c07b07c062484ab = []byte{ - // 15927 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x69, 0x90, 0x1c, 0xc9, - 0x75, 0x30, 0xc6, 0xea, 0x9e, 0xf3, 0xcd, 0x9d, 0x83, 0x63, 0x30, 0x0b, 0xa0, 0xb1, 0xb5, 0xbb, - 0x58, 0xec, 0x35, 0x20, 0xf6, 0xe0, 0x82, 0xbb, 0xcb, 0x15, 0xe7, 0x04, 0x7a, 0x81, 0x19, 0xf4, - 0x66, 0x0f, 0x00, 0x72, 0xb9, 0xe4, 0xc7, 0x42, 0x77, 0xce, 0x4c, 0x71, 0xba, 0xab, 0x7a, 0xab, - 0xaa, 0x07, 0x18, 0x98, 0x5f, 0xe8, 0x13, 0x65, 0x51, 0x22, 0x25, 0x47, 0x30, 0x1c, 0xf2, 0x11, - 0x94, 0x42, 0xe1, 0x90, 0x65, 0x1d, 0xa6, 0x25, 0x9b, 0xa6, 0x2c, 0xc9, 0xa2, 0x2e, 0x5f, 0x11, - 0x92, 0xed, 0x90, 0x65, 0x45, 0x98, 0x54, 0x58, 0xe1, 0x91, 0x39, 0x72, 0x84, 0x42, 0x3f, 0x2c, - 0x29, 0x64, 0xff, 0xb0, 0x27, 0x64, 0xeb, 0x8b, 0x3c, 0x2b, 0xb3, 0x8e, 0xee, 0x1e, 0x2c, 0x30, - 0x5c, 0x32, 0xf6, 0x5f, 0x77, 0xbe, 0x97, 0x2f, 0xb3, 0xf2, 0x7c, 0xf9, 0x4e, 0xb0, 0xb7, 0x2f, - 0x87, 0x73, 0xae, 0x7f, 0xd1, 0x69, 0xb9, 0x17, 0x6b, 0x7e, 0x40, 0x2e, 0xee, 0x5c, 0xba, 0xb8, - 0x49, 0x3c, 0x12, 0x38, 0x11, 0xa9, 0xcf, 0xb5, 0x02, 0x3f, 0xf2, 0x11, 0xe2, 0x38, 0x73, 0x4e, - 0xcb, 0x9d, 0xa3, 0x38, 0x73, 0x3b, 0x97, 0x66, 0x5f, 0xd8, 0x74, 0xa3, 0xad, 0xf6, 0x9d, 0xb9, - 0x9a, 0xdf, 0xbc, 0xb8, 0xe9, 0x6f, 0xfa, 0x17, 0x19, 0xea, 0x9d, 0xf6, 0x06, 0xfb, 0xc7, 0xfe, - 0xb0, 0x5f, 0x9c, 0xc4, 0xec, 0xcb, 0x71, 0x33, 0x4d, 0xa7, 0xb6, 0xe5, 0x7a, 0x24, 0xd8, 0xbd, - 0xd8, 0xda, 0xde, 0x64, 0xed, 0x06, 0x24, 0xf4, 0xdb, 0x41, 0x8d, 0x24, 0x1b, 0xee, 0x58, 0x2b, - 0xbc, 0xd8, 0x24, 0x91, 0x93, 0xd1, 0xdd, 0xd9, 0x8b, 0x79, 0xb5, 0x82, 0xb6, 0x17, 0xb9, 0xcd, - 0x74, 0x33, 0x1f, 0xeb, 0x56, 0x21, 0xac, 0x6d, 0x91, 0xa6, 0x93, 0xaa, 0xf7, 0x52, 0x5e, 0xbd, - 0x76, 0xe4, 0x36, 0x2e, 0xba, 0x5e, 0x14, 0x46, 0x41, 0xb2, 0x92, 0xfd, 0x5d, 0x0b, 0xce, 0xcd, - 0xdf, 0xae, 0x2e, 0x37, 0x9c, 0x30, 0x72, 0x6b, 0x0b, 0x0d, 0xbf, 0xb6, 0x5d, 0x8d, 0xfc, 0x80, - 0xdc, 0xf2, 0x1b, 0xed, 0x26, 0xa9, 0xb2, 0x81, 0x40, 0xcf, 0xc3, 0xd0, 0x0e, 0xfb, 0x5f, 0x5e, - 0x9a, 0xb1, 0xce, 0x59, 0x17, 0x86, 0x17, 0x26, 0xff, 0x78, 0xaf, 0xf4, 0x91, 0xfd, 0xbd, 0xd2, - 0xd0, 0x2d, 0x51, 0x8e, 0x15, 0x06, 0x3a, 0x0f, 0x03, 0x1b, 0xe1, 0xfa, 0x6e, 0x8b, 0xcc, 0x14, - 0x18, 0xee, 0xb8, 0xc0, 0x1d, 0x58, 0xa9, 0xd2, 0x52, 0x2c, 0xa0, 0xe8, 0x22, 0x0c, 0xb7, 0x9c, - 0x20, 0x72, 0x23, 0xd7, 0xf7, 0x66, 0x8a, 0xe7, 0xac, 0x0b, 0xfd, 0x0b, 0x53, 0x02, 0x75, 0xb8, - 0x22, 0x01, 0x38, 0xc6, 0xa1, 0xdd, 0x08, 0x88, 0x53, 0xbf, 0xe1, 0x35, 0x76, 0x67, 0xfa, 0xce, - 0x59, 0x17, 0x86, 0xe2, 0x6e, 0x60, 0x51, 0x8e, 0x15, 0x86, 0xfd, 0xf5, 0x02, 0x0c, 0xcd, 0x6f, - 0x6c, 0xb8, 0x9e, 0x1b, 0xed, 0xa2, 0x5b, 0x30, 0xea, 0xf9, 0x75, 0x22, 0xff, 0xb3, 0xaf, 0x18, - 0x79, 0xf1, 0xdc, 0x5c, 0x7a, 0x29, 0xcd, 0xad, 0x69, 0x78, 0x0b, 0x93, 0xfb, 0x7b, 0xa5, 0x51, - 0xbd, 0x04, 0x1b, 0x74, 0x10, 0x86, 0x91, 0x96, 0x5f, 0x57, 0x64, 0x0b, 0x8c, 0x6c, 0x29, 0x8b, - 0x6c, 0x25, 0x46, 0x5b, 0x98, 0xd8, 0xdf, 0x2b, 0x8d, 0x68, 0x05, 0x58, 0x27, 0x82, 0xee, 0xc0, - 0x04, 0xfd, 0xeb, 0x45, 0xae, 0xa2, 0x5b, 0x64, 0x74, 0x9f, 0xc8, 0xa3, 0xab, 0xa1, 0x2e, 0x4c, - 0xef, 0xef, 0x95, 0x26, 0x12, 0x85, 0x38, 0x49, 0xd0, 0xfe, 0x19, 0x0b, 0x26, 0xe6, 0x5b, 0xad, - 0xf9, 0xa0, 0xe9, 0x07, 0x95, 0xc0, 0xdf, 0x70, 0x1b, 0x04, 0xbd, 0x0a, 0x7d, 0x11, 0x9d, 0x35, - 0x3e, 0xc3, 0x4f, 0x88, 0xa1, 0xed, 0xa3, 0x73, 0x75, 0xb0, 0x57, 0x9a, 0x4e, 0xa0, 0xb3, 0xa9, - 0x64, 0x15, 0xd0, 0x27, 0x61, 0xb2, 0xe1, 0xd7, 0x9c, 0xc6, 0x96, 0x1f, 0x46, 0x02, 0x2a, 0xa6, - 0xfe, 0xd8, 0xfe, 0x5e, 0x69, 0xf2, 0x7a, 0x02, 0x86, 0x53, 0xd8, 0xf6, 0x7d, 0x18, 0x9f, 0x8f, - 0x22, 0xa7, 0xb6, 0x45, 0xea, 0x7c, 0x41, 0xa1, 0x97, 0xa1, 0xcf, 0x73, 0x9a, 0xb2, 0x33, 0xe7, - 0x64, 0x67, 0xd6, 0x9c, 0x26, 0xed, 0xcc, 0xe4, 0x4d, 0xcf, 0x7d, 0xaf, 0x2d, 0x16, 0x29, 0x2d, - 0xc3, 0x0c, 0x1b, 0xbd, 0x08, 0x50, 0x27, 0x3b, 0x6e, 0x8d, 0x54, 0x9c, 0x68, 0x4b, 0xf4, 0x01, - 0x89, 0xba, 0xb0, 0xa4, 0x20, 0x58, 0xc3, 0xb2, 0xef, 0xc1, 0xf0, 0xfc, 0x8e, 0xef, 0xd6, 0x2b, - 0x7e, 0x3d, 0x44, 0xdb, 0x30, 0xd1, 0x0a, 0xc8, 0x06, 0x09, 0x54, 0xd1, 0x8c, 0x75, 0xae, 0x78, - 0x61, 0xe4, 0xc5, 0x0b, 0x99, 0x63, 0x6f, 0xa2, 0x2e, 0x7b, 0x51, 0xb0, 0xbb, 0x70, 0x52, 0xb4, - 0x37, 0x91, 0x80, 0xe2, 0x24, 0x65, 0xfb, 0xbf, 0x2d, 0xc0, 0xf1, 0xf9, 0xfb, 0xed, 0x80, 0x2c, - 0xb9, 0xe1, 0x76, 0x72, 0xc3, 0xd5, 0xdd, 0x70, 0x7b, 0x2d, 0x1e, 0x01, 0xb5, 0xd2, 0x97, 0x44, - 0x39, 0x56, 0x18, 0xe8, 0x05, 0x18, 0xa4, 0xbf, 0x6f, 0xe2, 0xb2, 0xf8, 0xe4, 0x69, 0x81, 0x3c, - 0xb2, 0xe4, 0x44, 0xce, 0x12, 0x07, 0x61, 0x89, 0x83, 0x56, 0x61, 0xa4, 0xc6, 0xce, 0x87, 0xcd, - 0x55, 0xbf, 0x4e, 0xd8, 0xda, 0x1a, 0x5e, 0x78, 0x8e, 0xa2, 0x2f, 0xc6, 0xc5, 0x07, 0x7b, 0xa5, - 0x19, 0xde, 0x37, 0x41, 0x42, 0x83, 0x61, 0xbd, 0x3e, 0xb2, 0xd5, 0x76, 0xef, 0x63, 0x94, 0x20, - 0x63, 0xab, 0x5f, 0xd0, 0x76, 0x6e, 0x3f, 0xdb, 0xb9, 0xa3, 0xd9, 0xbb, 0x16, 0x5d, 0x82, 0xbe, - 0x6d, 0xd7, 0xab, 0xcf, 0x0c, 0x30, 0x5a, 0x67, 0xe8, 0x9c, 0x5f, 0x73, 0xbd, 0xfa, 0xc1, 0x5e, - 0x69, 0xca, 0xe8, 0x0e, 0x2d, 0xc4, 0x0c, 0xd5, 0xfe, 0xbf, 0x2c, 0x28, 0x31, 0xd8, 0x8a, 0xdb, - 0x20, 0x15, 0x12, 0x84, 0x6e, 0x18, 0x11, 0x2f, 0x32, 0x06, 0xf4, 0x45, 0x80, 0x90, 0xd4, 0x02, - 0x12, 0x69, 0x43, 0xaa, 0x16, 0x46, 0x55, 0x41, 0xb0, 0x86, 0x45, 0xcf, 0xa7, 0x70, 0xcb, 0x09, - 0xd8, 0xfa, 0x12, 0x03, 0xab, 0xce, 0xa7, 0xaa, 0x04, 0xe0, 0x18, 0xc7, 0x38, 0x9f, 0x8a, 0xdd, - 0xce, 0x27, 0xf4, 0x09, 0x98, 0x88, 0x1b, 0x0b, 0x5b, 0x4e, 0x4d, 0x0e, 0x20, 0xdb, 0xc1, 0x55, - 0x13, 0x84, 0x93, 0xb8, 0xf6, 0x7f, 0x6c, 0x89, 0xc5, 0x43, 0xbf, 0xfa, 0x03, 0xfe, 0xad, 0xf6, - 0xef, 0x58, 0x30, 0xb8, 0xe0, 0x7a, 0x75, 0xd7, 0xdb, 0x44, 0x9f, 0x87, 0x21, 0x7a, 0x55, 0xd6, - 0x9d, 0xc8, 0x11, 0xc7, 0xf0, 0x47, 0xb5, 0xbd, 0xa5, 0x6e, 0xae, 0xb9, 0xd6, 0xf6, 0x26, 0x2d, - 0x08, 0xe7, 0x28, 0x36, 0xdd, 0x6d, 0x37, 0xee, 0x7c, 0x81, 0xd4, 0xa2, 0x55, 0x12, 0x39, 0xf1, - 0xe7, 0xc4, 0x65, 0x58, 0x51, 0x45, 0xd7, 0x60, 0x20, 0x72, 0x82, 0x4d, 0x12, 0x89, 0xf3, 0x38, - 0xf3, 0xdc, 0xe4, 0x35, 0x31, 0xdd, 0x91, 0xc4, 0xab, 0x91, 0xf8, 0x96, 0x5a, 0x67, 0x55, 0xb1, - 0x20, 0x61, 0xff, 0x7f, 0x83, 0x70, 0x6a, 0xb1, 0x5a, 0xce, 0x59, 0x57, 0xe7, 0x61, 0xa0, 0x1e, - 0xb8, 0x3b, 0x24, 0x10, 0xe3, 0xac, 0xa8, 0x2c, 0xb1, 0x52, 0x2c, 0xa0, 0xe8, 0x32, 0x8c, 0xf2, - 0xfb, 0xf1, 0xaa, 0xe3, 0xd5, 0xe3, 0xe3, 0x51, 0x60, 0x8f, 0xde, 0xd2, 0x60, 0xd8, 0xc0, 0x3c, - 0xe4, 0xa2, 0x3a, 0x9f, 0xd8, 0x8c, 0x79, 0x77, 0xef, 0x57, 0x2c, 0x98, 0xe4, 0xcd, 0xcc, 0x47, - 0x51, 0xe0, 0xde, 0x69, 0x47, 0x24, 0x9c, 0xe9, 0x67, 0x27, 0xdd, 0x62, 0xd6, 0x68, 0xe5, 0x8e, - 0xc0, 0xdc, 0xad, 0x04, 0x15, 0x7e, 0x08, 0xce, 0x88, 0x76, 0x27, 0x93, 0x60, 0x9c, 0x6a, 0x16, - 0xfd, 0xb8, 0x05, 0xb3, 0x35, 0xdf, 0x8b, 0x02, 0xbf, 0xd1, 0x20, 0x41, 0xa5, 0x7d, 0xa7, 0xe1, - 0x86, 0x5b, 0x7c, 0x9d, 0x62, 0xb2, 0xc1, 0x4e, 0x82, 0x9c, 0x39, 0x54, 0x48, 0x62, 0x0e, 0xcf, - 0xee, 0xef, 0x95, 0x66, 0x17, 0x73, 0x49, 0xe1, 0x0e, 0xcd, 0xa0, 0x6d, 0x40, 0xf4, 0x66, 0xaf, - 0x46, 0xce, 0x26, 0x89, 0x1b, 0x1f, 0xec, 0xbd, 0xf1, 0x13, 0xfb, 0x7b, 0x25, 0xb4, 0x96, 0x22, - 0x81, 0x33, 0xc8, 0xa2, 0xf7, 0xe0, 0x18, 0x2d, 0x4d, 0x7d, 0xeb, 0x50, 0xef, 0xcd, 0xcd, 0xec, - 0xef, 0x95, 0x8e, 0xad, 0x65, 0x10, 0xc1, 0x99, 0xa4, 0xd1, 0xbf, 0xb2, 0xe0, 0x54, 0xfc, 0xf9, - 0xcb, 0xf7, 0x5a, 0x8e, 0x57, 0x8f, 0x1b, 0x1e, 0xee, 0xbd, 0x61, 0x7a, 0x26, 0x9f, 0x5a, 0xcc, - 0xa3, 0x84, 0xf3, 0x1b, 0x41, 0x1e, 0x4c, 0xd3, 0xae, 0x25, 0xdb, 0x86, 0xde, 0xdb, 0x3e, 0xb9, - 0xbf, 0x57, 0x9a, 0x5e, 0x4b, 0xd3, 0xc0, 0x59, 0x84, 0x67, 0x17, 0xe1, 0x78, 0xe6, 0xea, 0x44, - 0x93, 0x50, 0xdc, 0x26, 0x9c, 0x09, 0x1c, 0xc6, 0xf4, 0x27, 0x3a, 0x06, 0xfd, 0x3b, 0x4e, 0xa3, - 0x2d, 0x36, 0x26, 0xe6, 0x7f, 0x5e, 0x2b, 0x5c, 0xb6, 0xec, 0xff, 0xae, 0x08, 0x13, 0x8b, 0xd5, - 0xf2, 0x03, 0xed, 0x7a, 0xfd, 0xda, 0x2b, 0x74, 0xbc, 0xf6, 0xe2, 0x4b, 0xb4, 0x98, 0x7b, 0x89, - 0xfe, 0x68, 0xc6, 0x96, 0xed, 0x63, 0x5b, 0xf6, 0xe3, 0x39, 0x5b, 0xf6, 0x21, 0x6f, 0xd4, 0x9d, - 0x9c, 0x55, 0xdb, 0xcf, 0x26, 0x30, 0x93, 0x43, 0x62, 0xbc, 0x5f, 0xf2, 0xa8, 0x3d, 0xe4, 0xd2, - 0x7d, 0x38, 0xf3, 0x58, 0x83, 0xd1, 0x45, 0xa7, 0xe5, 0xdc, 0x71, 0x1b, 0x6e, 0xe4, 0x92, 0x10, - 0x3d, 0x0d, 0x45, 0xa7, 0x5e, 0x67, 0xdc, 0xdd, 0xf0, 0xc2, 0xf1, 0xfd, 0xbd, 0x52, 0x71, 0xbe, - 0x4e, 0xd9, 0x0c, 0x50, 0x58, 0xbb, 0x98, 0x62, 0xa0, 0x67, 0xa1, 0xaf, 0x1e, 0xf8, 0xad, 0x99, - 0x02, 0xc3, 0xa4, 0xbb, 0xbc, 0x6f, 0x29, 0xf0, 0x5b, 0x09, 0x54, 0x86, 0x63, 0xff, 0x51, 0x01, - 0x4e, 0x2f, 0x92, 0xd6, 0xd6, 0x4a, 0x35, 0xe7, 0xbe, 0xb8, 0x00, 0x43, 0x4d, 0xdf, 0x73, 0x23, - 0x3f, 0x08, 0x45, 0xd3, 0x6c, 0x45, 0xac, 0x8a, 0x32, 0xac, 0xa0, 0xe8, 0x1c, 0xf4, 0xb5, 0x62, - 0x26, 0x76, 0x54, 0x32, 0xc0, 0x8c, 0x7d, 0x65, 0x10, 0x8a, 0xd1, 0x0e, 0x49, 0x20, 0x56, 0x8c, - 0xc2, 0xb8, 0x19, 0x92, 0x00, 0x33, 0x48, 0xcc, 0x09, 0x50, 0x1e, 0x41, 0xdc, 0x08, 0x09, 0x4e, - 0x80, 0x42, 0xb0, 0x86, 0x85, 0x2a, 0x30, 0x1c, 0x26, 0x66, 0xb6, 0xa7, 0xad, 0x39, 0xc6, 0x58, - 0x05, 0x35, 0x93, 0x31, 0x11, 0xe3, 0x06, 0x1b, 0xe8, 0xca, 0x2a, 0x7c, 0xbb, 0x00, 0x88, 0x0f, - 0xe1, 0x0f, 0xd8, 0xc0, 0xdd, 0x4c, 0x0f, 0x5c, 0xef, 0x5b, 0xe2, 0x61, 0x8d, 0xde, 0xff, 0x6d, - 0xc1, 0xe9, 0x45, 0xd7, 0xab, 0x93, 0x20, 0x67, 0x01, 0x3e, 0x9a, 0xa7, 0xfc, 0xe1, 0x98, 0x14, - 0x63, 0x89, 0xf5, 0x3d, 0x84, 0x25, 0x66, 0xff, 0xbd, 0x05, 0x88, 0x7f, 0xf6, 0x07, 0xee, 0x63, - 0x6f, 0xa6, 0x3f, 0xf6, 0x21, 0x2c, 0x0b, 0xfb, 0x3a, 0x8c, 0x2f, 0x36, 0x5c, 0xe2, 0x45, 0xe5, - 0xca, 0xa2, 0xef, 0x6d, 0xb8, 0x9b, 0xe8, 0x35, 0x18, 0x8f, 0xdc, 0x26, 0xf1, 0xdb, 0x51, 0x95, - 0xd4, 0x7c, 0x8f, 0xbd, 0x5c, 0xad, 0x0b, 0xfd, 0x0b, 0x68, 0x7f, 0xaf, 0x34, 0xbe, 0x6e, 0x40, - 0x70, 0x02, 0xd3, 0xfe, 0x65, 0x7a, 0x6e, 0x35, 0xda, 0x61, 0x44, 0x82, 0xf5, 0xa0, 0x1d, 0x46, - 0x0b, 0x6d, 0xca, 0x7b, 0x56, 0x02, 0x9f, 0x76, 0xc7, 0xf5, 0x3d, 0x74, 0xda, 0x78, 0x8e, 0x0f, - 0xc9, 0xa7, 0xb8, 0x78, 0x76, 0xcf, 0x01, 0x84, 0xee, 0xa6, 0x47, 0x02, 0xed, 0xf9, 0x30, 0xce, - 0xb6, 0x8a, 0x2a, 0xc5, 0x1a, 0x06, 0x6a, 0xc0, 0x58, 0xc3, 0xb9, 0x43, 0x1a, 0x55, 0xd2, 0x20, - 0xb5, 0xc8, 0x0f, 0x84, 0x7c, 0xe3, 0xa5, 0xde, 0xde, 0x01, 0xd7, 0xf5, 0xaa, 0x0b, 0x53, 0xfb, - 0x7b, 0xa5, 0x31, 0xa3, 0x08, 0x9b, 0xc4, 0xe9, 0xd1, 0xe1, 0xb7, 0xe8, 0x57, 0x38, 0x0d, 0xfd, - 0xf1, 0x79, 0x43, 0x94, 0x61, 0x05, 0x55, 0x47, 0x47, 0x5f, 0xde, 0xd1, 0x61, 0xff, 0x25, 0x5d, - 0x68, 0x7e, 0xb3, 0xe5, 0x7b, 0xc4, 0x8b, 0x16, 0x7d, 0xaf, 0xce, 0x25, 0x53, 0xaf, 0x19, 0xa2, - 0x93, 0xf3, 0x09, 0xd1, 0xc9, 0x89, 0x74, 0x0d, 0x4d, 0x7a, 0xf2, 0x71, 0x18, 0x08, 0x23, 0x27, - 0x6a, 0x87, 0x62, 0xe0, 0x1e, 0x97, 0xcb, 0xae, 0xca, 0x4a, 0x0f, 0xf6, 0x4a, 0x13, 0xaa, 0x1a, - 0x2f, 0xc2, 0xa2, 0x02, 0x7a, 0x06, 0x06, 0x9b, 0x24, 0x0c, 0x9d, 0x4d, 0xc9, 0x36, 0x4c, 0x88, - 0xba, 0x83, 0xab, 0xbc, 0x18, 0x4b, 0x38, 0x7a, 0x02, 0xfa, 0x49, 0x10, 0xf8, 0x81, 0xf8, 0xb6, - 0x31, 0x81, 0xd8, 0xbf, 0x4c, 0x0b, 0x31, 0x87, 0xd9, 0xff, 0x93, 0x05, 0x13, 0xaa, 0xaf, 0xbc, - 0xad, 0x23, 0x78, 0xae, 0xbd, 0x03, 0x50, 0x93, 0x1f, 0x18, 0xb2, 0x6b, 0x76, 0xe4, 0xc5, 0xf3, - 0x99, 0x1c, 0x4d, 0x6a, 0x18, 0x63, 0xca, 0xaa, 0x28, 0xc4, 0x1a, 0x35, 0xfb, 0xf7, 0x2d, 0x98, - 0x4e, 0x7c, 0xd1, 0x75, 0x37, 0x8c, 0xd0, 0xbb, 0xa9, 0xaf, 0x9a, 0xeb, 0x71, 0xf1, 0xb9, 0x21, - 0xff, 0x26, 0xb5, 0xe7, 0x65, 0x89, 0xf6, 0x45, 0x57, 0xa1, 0xdf, 0x8d, 0x48, 0x53, 0x7e, 0xcc, - 0x13, 0x1d, 0x3f, 0x86, 0xf7, 0x2a, 0x9e, 0x91, 0x32, 0xad, 0x89, 0x39, 0x01, 0xfb, 0x8f, 0x8a, - 0x30, 0xcc, 0xf7, 0xf7, 0xaa, 0xd3, 0x3a, 0x82, 0xb9, 0x78, 0x0e, 0x86, 0xdd, 0x66, 0xb3, 0x1d, - 0x39, 0x77, 0xc4, 0xbd, 0x37, 0xc4, 0xcf, 0xa0, 0xb2, 0x2c, 0xc4, 0x31, 0x1c, 0x95, 0xa1, 0x8f, - 0x75, 0x85, 0x7f, 0xe5, 0xd3, 0xd9, 0x5f, 0x29, 0xfa, 0x3e, 0xb7, 0xe4, 0x44, 0x0e, 0x67, 0x39, - 0xd5, 0xbe, 0xa2, 0x45, 0x98, 0x91, 0x40, 0x0e, 0xc0, 0x1d, 0xd7, 0x73, 0x82, 0x5d, 0x5a, 0x36, - 0x53, 0x64, 0x04, 0x5f, 0xe8, 0x4c, 0x70, 0x41, 0xe1, 0x73, 0xb2, 0xea, 0xc3, 0x62, 0x00, 0xd6, - 0x88, 0xce, 0xbe, 0x0a, 0xc3, 0x0a, 0xf9, 0x30, 0x9c, 0xe3, 0xec, 0x27, 0x60, 0x22, 0xd1, 0x56, - 0xb7, 0xea, 0xa3, 0x3a, 0xe3, 0xf9, 0xbb, 0xec, 0xc8, 0x10, 0xbd, 0x5e, 0xf6, 0x76, 0xc4, 0xdd, - 0x74, 0x1f, 0x8e, 0x35, 0x32, 0x8e, 0x7c, 0x31, 0xaf, 0xbd, 0x5f, 0x11, 0xa7, 0xc5, 0x67, 0x1f, - 0xcb, 0x82, 0xe2, 0xcc, 0x36, 0x8c, 0x13, 0xb1, 0xd0, 0xe9, 0x44, 0xa4, 0xe7, 0xdd, 0x31, 0xd5, - 0xf9, 0x6b, 0x64, 0x57, 0x1d, 0xaa, 0xdf, 0xcf, 0xee, 0x9f, 0xe1, 0xa3, 0xcf, 0x8f, 0xcb, 0x11, - 0x41, 0xa0, 0x78, 0x8d, 0xec, 0xf2, 0xa9, 0xd0, 0xbf, 0xae, 0xd8, 0xf1, 0xeb, 0xbe, 0x69, 0xc1, - 0x98, 0xfa, 0xba, 0x23, 0x38, 0x17, 0x16, 0xcc, 0x73, 0xe1, 0x4c, 0xc7, 0x05, 0x9e, 0x73, 0x22, - 0x7c, 0xbb, 0x00, 0xa7, 0x14, 0x0e, 0x7d, 0x44, 0xf1, 0x3f, 0x62, 0x55, 0x5d, 0x84, 0x61, 0x4f, - 0x89, 0x13, 0x2d, 0x53, 0x8e, 0x17, 0x0b, 0x13, 0x63, 0x1c, 0x7a, 0xe5, 0x79, 0xf1, 0xa5, 0x3d, - 0xaa, 0xcb, 0xd9, 0xc5, 0xe5, 0xbe, 0x00, 0xc5, 0xb6, 0x5b, 0x17, 0x17, 0xcc, 0x47, 0xe5, 0x68, - 0xdf, 0x2c, 0x2f, 0x1d, 0xec, 0x95, 0x1e, 0xcf, 0x53, 0x39, 0xd1, 0x9b, 0x2d, 0x9c, 0xbb, 0x59, - 0x5e, 0xc2, 0xb4, 0x32, 0x9a, 0x87, 0x09, 0xa9, 0x55, 0xbb, 0x45, 0xf9, 0x52, 0xdf, 0x13, 0xf7, - 0x90, 0x12, 0x96, 0x63, 0x13, 0x8c, 0x93, 0xf8, 0x68, 0x09, 0x26, 0xb7, 0xdb, 0x77, 0x48, 0x83, - 0x44, 0xfc, 0x83, 0xaf, 0x11, 0x2e, 0x4a, 0x1e, 0x8e, 0x9f, 0xb0, 0xd7, 0x12, 0x70, 0x9c, 0xaa, - 0x61, 0xff, 0x33, 0xbb, 0x0f, 0xc4, 0xe8, 0x69, 0xfc, 0xcd, 0xf7, 0x73, 0x39, 0xf7, 0xb2, 0x2a, - 0xae, 0x91, 0xdd, 0x75, 0x9f, 0xf2, 0x21, 0xd9, 0xab, 0xc2, 0x58, 0xf3, 0x7d, 0x1d, 0xd7, 0xfc, - 0x6f, 0x16, 0xe0, 0xb8, 0x1a, 0x01, 0x83, 0x5b, 0xfe, 0x41, 0x1f, 0x83, 0x4b, 0x30, 0x52, 0x27, - 0x1b, 0x4e, 0xbb, 0x11, 0x29, 0xbd, 0x46, 0x3f, 0x57, 0xb5, 0x2d, 0xc5, 0xc5, 0x58, 0xc7, 0x39, - 0xc4, 0xb0, 0xfd, 0xfa, 0x18, 0xbb, 0x88, 0x23, 0x87, 0xae, 0x71, 0xb5, 0x6b, 0xac, 0xdc, 0x5d, - 0xf3, 0x04, 0xf4, 0xbb, 0x4d, 0xca, 0x98, 0x15, 0x4c, 0x7e, 0xab, 0x4c, 0x0b, 0x31, 0x87, 0xa1, - 0xa7, 0x60, 0xb0, 0xe6, 0x37, 0x9b, 0x8e, 0x57, 0x67, 0x57, 0xde, 0xf0, 0xc2, 0x08, 0xe5, 0xdd, - 0x16, 0x79, 0x11, 0x96, 0x30, 0xca, 0x7c, 0x3b, 0xc1, 0x26, 0x17, 0xf6, 0x08, 0xe6, 0x7b, 0x3e, - 0xd8, 0x0c, 0x31, 0x2b, 0xa5, 0x6f, 0xd5, 0xbb, 0x7e, 0xb0, 0xed, 0x7a, 0x9b, 0x4b, 0x6e, 0x20, - 0xb6, 0x84, 0xba, 0x0b, 0x6f, 0x2b, 0x08, 0xd6, 0xb0, 0xd0, 0x0a, 0xf4, 0xb7, 0xfc, 0x20, 0x0a, - 0x67, 0x06, 0xd8, 0x70, 0x3f, 0x9e, 0x73, 0x10, 0xf1, 0xaf, 0xad, 0xf8, 0x41, 0x14, 0x7f, 0x00, - 0xfd, 0x17, 0x62, 0x5e, 0x1d, 0x5d, 0x87, 0x41, 0xe2, 0xed, 0xac, 0x04, 0x7e, 0x73, 0x66, 0x3a, - 0x9f, 0xd2, 0x32, 0x47, 0xe1, 0xcb, 0x2c, 0xe6, 0x51, 0x45, 0x31, 0x96, 0x24, 0xd0, 0xc7, 0xa1, - 0x48, 0xbc, 0x9d, 0x99, 0x41, 0x46, 0x69, 0x36, 0x87, 0xd2, 0x2d, 0x27, 0x88, 0xcf, 0xfc, 0x65, - 0x6f, 0x07, 0xd3, 0x3a, 0xe8, 0xd3, 0x30, 0x2c, 0x0f, 0x8c, 0x50, 0x48, 0x51, 0x33, 0x17, 0xac, - 0x3c, 0x66, 0x30, 0x79, 0xaf, 0xed, 0x06, 0xa4, 0x49, 0xbc, 0x28, 0x8c, 0x4f, 0x48, 0x09, 0x0d, - 0x71, 0x4c, 0x0d, 0xd5, 0x60, 0x34, 0x20, 0xa1, 0x7b, 0x9f, 0x54, 0xfc, 0x86, 0x5b, 0xdb, 0x9d, - 0x39, 0xc9, 0xba, 0xf7, 0x4c, 0xc7, 0x21, 0xc3, 0x5a, 0x85, 0x58, 0xca, 0xaf, 0x97, 0x62, 0x83, - 0x28, 0x7a, 0x1b, 0xc6, 0x02, 0x12, 0x46, 0x4e, 0x10, 0x89, 0x56, 0x66, 0x94, 0x56, 0x6e, 0x0c, - 0xeb, 0x00, 0xfe, 0x9c, 0x88, 0x9b, 0x89, 0x21, 0xd8, 0xa4, 0x80, 0x3e, 0x2d, 0x55, 0x0e, 0xab, - 0x7e, 0xdb, 0x8b, 0xc2, 0x99, 0x61, 0xd6, 0xef, 0x4c, 0xdd, 0xf4, 0xad, 0x18, 0x2f, 0xa9, 0x93, - 0xe0, 0x95, 0xb1, 0x41, 0x0a, 0x7d, 0x16, 0xc6, 0xf8, 0x7f, 0xae, 0x52, 0x0d, 0x67, 0x8e, 0x33, - 0xda, 0xe7, 0xf2, 0x69, 0x73, 0xc4, 0x85, 0xe3, 0x82, 0xf8, 0x98, 0x5e, 0x1a, 0x62, 0x93, 0x1a, - 0xc2, 0x30, 0xd6, 0x70, 0x77, 0x88, 0x47, 0xc2, 0xb0, 0x12, 0xf8, 0x77, 0x88, 0x90, 0x10, 0x9f, - 0xca, 0x56, 0xc1, 0xfa, 0x77, 0x88, 0x78, 0x04, 0xea, 0x75, 0xb0, 0x49, 0x02, 0xdd, 0x84, 0x71, - 0xfa, 0x24, 0x77, 0x63, 0xa2, 0x23, 0xdd, 0x88, 0xb2, 0x87, 0x33, 0x36, 0x2a, 0xe1, 0x04, 0x11, - 0x74, 0x03, 0x46, 0xd9, 0x98, 0xb7, 0x5b, 0x9c, 0xe8, 0x89, 0x6e, 0x44, 0x99, 0x41, 0x41, 0x55, - 0xab, 0x82, 0x0d, 0x02, 0xe8, 0x2d, 0x18, 0x6e, 0xb8, 0x1b, 0xa4, 0xb6, 0x5b, 0x6b, 0x90, 0x99, - 0x51, 0x46, 0x2d, 0xf3, 0x30, 0xbc, 0x2e, 0x91, 0x38, 0x7f, 0xae, 0xfe, 0xe2, 0xb8, 0x3a, 0xba, - 0x05, 0x27, 0x22, 0x12, 0x34, 0x5d, 0xcf, 0xa1, 0x87, 0x98, 0x78, 0x12, 0x32, 0xcd, 0xf8, 0x18, - 0x5b, 0x5d, 0x67, 0xc5, 0x6c, 0x9c, 0x58, 0xcf, 0xc4, 0xc2, 0x39, 0xb5, 0xd1, 0x3d, 0x98, 0xc9, - 0x80, 0xf0, 0x75, 0x7b, 0x8c, 0x51, 0x7e, 0x43, 0x50, 0x9e, 0x59, 0xcf, 0xc1, 0x3b, 0xe8, 0x00, - 0xc3, 0xb9, 0xd4, 0xd1, 0x0d, 0x98, 0x60, 0x27, 0x67, 0xa5, 0xdd, 0x68, 0x88, 0x06, 0xc7, 0x59, - 0x83, 0x4f, 0x49, 0x3e, 0xa2, 0x6c, 0x82, 0x0f, 0xf6, 0x4a, 0x10, 0xff, 0xc3, 0xc9, 0xda, 0xe8, - 0x0e, 0x53, 0xc2, 0xb6, 0x03, 0x37, 0xda, 0xa5, 0xbb, 0x8a, 0xdc, 0x8b, 0x66, 0x26, 0x3a, 0x0a, - 0xa4, 0x74, 0x54, 0xa5, 0xa9, 0xd5, 0x0b, 0x71, 0x92, 0x20, 0xbd, 0x0a, 0xc2, 0xa8, 0xee, 0x7a, - 0x33, 0x93, 0xfc, 0x3d, 0x25, 0x4f, 0xd2, 0x2a, 0x2d, 0xc4, 0x1c, 0xc6, 0x14, 0xb0, 0xf4, 0xc7, - 0x0d, 0x7a, 0xe3, 0x4e, 0x31, 0xc4, 0x58, 0x01, 0x2b, 0x01, 0x38, 0xc6, 0xa1, 0x4c, 0x70, 0x14, - 0xed, 0xce, 0x20, 0x86, 0xaa, 0x0e, 0xc4, 0xf5, 0xf5, 0x4f, 0x63, 0x5a, 0x6e, 0xdf, 0x81, 0x71, - 0x75, 0x4c, 0xb0, 0x31, 0x41, 0x25, 0xe8, 0x67, 0x6c, 0x9f, 0x10, 0x9f, 0x0e, 0xd3, 0x2e, 0x30, - 0x96, 0x10, 0xf3, 0x72, 0xd6, 0x05, 0xf7, 0x3e, 0x59, 0xd8, 0x8d, 0x08, 0x97, 0x45, 0x14, 0xb5, - 0x2e, 0x48, 0x00, 0x8e, 0x71, 0xec, 0xff, 0x9f, 0xb3, 0xcf, 0xf1, 0x2d, 0xd1, 0xc3, 0xbd, 0xf8, - 0x3c, 0x0c, 0x31, 0xc3, 0x0f, 0x3f, 0xe0, 0xda, 0xd9, 0xfe, 0x98, 0x61, 0xbe, 0x2a, 0xca, 0xb1, - 0xc2, 0x40, 0xaf, 0xc3, 0x58, 0x4d, 0x6f, 0x40, 0x5c, 0xea, 0xea, 0x18, 0x31, 0x5a, 0xc7, 0x26, - 0x2e, 0xba, 0x0c, 0x43, 0xcc, 0xc6, 0xa9, 0xe6, 0x37, 0x04, 0xb7, 0x29, 0x39, 0x93, 0xa1, 0x8a, - 0x28, 0x3f, 0xd0, 0x7e, 0x63, 0x85, 0x8d, 0xce, 0xc3, 0x00, 0xed, 0x42, 0xb9, 0x22, 0xae, 0x53, - 0x25, 0x09, 0xbc, 0xca, 0x4a, 0xb1, 0x80, 0xda, 0xbf, 0x6f, 0x31, 0x5e, 0x2a, 0x7d, 0xe6, 0xa3, - 0xab, 0xec, 0xd2, 0x60, 0x37, 0x88, 0xa6, 0x85, 0x7f, 0x52, 0xbb, 0x09, 0x14, 0xec, 0x20, 0xf1, - 0x1f, 0x1b, 0x35, 0xd1, 0x3b, 0xc9, 0x9b, 0x81, 0x33, 0x14, 0x2f, 0xcb, 0x21, 0x48, 0xde, 0x0e, - 0x8f, 0xc5, 0x57, 0x1c, 0xed, 0x4f, 0xa7, 0x2b, 0xc2, 0xfe, 0xb7, 0x0b, 0xda, 0x2a, 0xa9, 0x46, - 0x4e, 0x44, 0x50, 0x05, 0x06, 0xef, 0x3a, 0x6e, 0xe4, 0x7a, 0x9b, 0x82, 0xef, 0xeb, 0x7c, 0xd1, - 0xb1, 0x4a, 0xb7, 0x79, 0x05, 0xce, 0xbd, 0x88, 0x3f, 0x58, 0x92, 0xa1, 0x14, 0x83, 0xb6, 0xe7, - 0x51, 0x8a, 0x85, 0x5e, 0x29, 0x62, 0x5e, 0x81, 0x53, 0x14, 0x7f, 0xb0, 0x24, 0x83, 0xde, 0x05, - 0x90, 0x27, 0x04, 0xa9, 0x0b, 0xd9, 0xe1, 0xf3, 0xdd, 0x89, 0xae, 0xab, 0x3a, 0x5c, 0x38, 0x19, - 0xff, 0xc7, 0x1a, 0x3d, 0x3b, 0xd2, 0xe6, 0x54, 0xef, 0x0c, 0xfa, 0x0c, 0xdd, 0xa2, 0x4e, 0x10, - 0x91, 0xfa, 0x7c, 0x24, 0x06, 0xe7, 0xd9, 0xde, 0x1e, 0x87, 0xeb, 0x6e, 0x93, 0xe8, 0xdb, 0x59, - 0x10, 0xc1, 0x31, 0x3d, 0xfb, 0xb7, 0x8b, 0x30, 0x93, 0xd7, 0x5d, 0xba, 0x69, 0xc8, 0x3d, 0x37, - 0x5a, 0xa4, 0x6c, 0xad, 0x65, 0x6e, 0x9a, 0x65, 0x51, 0x8e, 0x15, 0x06, 0x5d, 0xbd, 0xa1, 0xbb, - 0x29, 0xdf, 0xf6, 0xfd, 0xf1, 0xea, 0xad, 0xb2, 0x52, 0x2c, 0xa0, 0x14, 0x2f, 0x20, 0x4e, 0x28, - 0x8c, 0xef, 0xb4, 0x55, 0x8e, 0x59, 0x29, 0x16, 0x50, 0x5d, 0xca, 0xd8, 0xd7, 0x45, 0xca, 0x68, - 0x0c, 0x51, 0xff, 0xc3, 0x1d, 0x22, 0xf4, 0x39, 0x80, 0x0d, 0xd7, 0x73, 0xc3, 0x2d, 0x46, 0x7d, - 0xe0, 0xd0, 0xd4, 0x15, 0x53, 0xbc, 0xa2, 0xa8, 0x60, 0x8d, 0x22, 0x7a, 0x05, 0x46, 0xd4, 0x01, - 0x52, 0x5e, 0x62, 0xaa, 0x7f, 0xcd, 0x94, 0x2a, 0x3e, 0x4d, 0x97, 0xb0, 0x8e, 0x67, 0x7f, 0x21, - 0xb9, 0x5e, 0xc4, 0x0e, 0xd0, 0xc6, 0xd7, 0xea, 0x75, 0x7c, 0x0b, 0x9d, 0xc7, 0xd7, 0xfe, 0xd9, - 0x21, 0x98, 0x30, 0x1a, 0x6b, 0x87, 0x3d, 0x9c, 0xb9, 0x57, 0xe8, 0x05, 0xe4, 0x44, 0x44, 0xec, - 0x3f, 0xbb, 0xfb, 0x56, 0xd1, 0x2f, 0x29, 0xba, 0x03, 0x78, 0x7d, 0xf4, 0x39, 0x18, 0x6e, 0x38, - 0x21, 0x93, 0x58, 0x12, 0xb1, 0xef, 0x7a, 0x21, 0x16, 0x3f, 0x08, 0x9d, 0x30, 0xd2, 0x6e, 0x7d, - 0x4e, 0x3b, 0x26, 0x49, 0x6f, 0x4a, 0xca, 0x5f, 0x49, 0xeb, 0x4e, 0xd5, 0x09, 0xca, 0x84, 0xed, - 0x62, 0x0e, 0x43, 0x97, 0xd9, 0xd1, 0x4a, 0x57, 0xc5, 0x22, 0xe5, 0x46, 0xd9, 0x32, 0xeb, 0x37, - 0x98, 0x6c, 0x05, 0xc3, 0x06, 0x66, 0xfc, 0x26, 0x1b, 0xe8, 0xf0, 0x26, 0x7b, 0x06, 0x06, 0xd9, - 0x0f, 0xb5, 0x02, 0xd4, 0x6c, 0x94, 0x79, 0x31, 0x96, 0xf0, 0xe4, 0x82, 0x19, 0xea, 0x6d, 0xc1, - 0xd0, 0x57, 0x9f, 0x58, 0xd4, 0xcc, 0xec, 0x62, 0x88, 0x9f, 0x72, 0x62, 0xc9, 0x63, 0x09, 0x43, - 0xbf, 0x62, 0x01, 0x72, 0x1a, 0xf4, 0xb5, 0x4c, 0x8b, 0xd5, 0xe3, 0x06, 0x18, 0xab, 0xfd, 0x7a, - 0xd7, 0x61, 0x6f, 0x87, 0x73, 0xf3, 0xa9, 0xda, 0x5c, 0x52, 0xfa, 0x9a, 0xe8, 0x22, 0x4a, 0x23, - 0xe8, 0x97, 0xd1, 0x75, 0x37, 0x8c, 0xbe, 0xf4, 0x57, 0x89, 0xcb, 0x29, 0xa3, 0x4b, 0xe8, 0xa6, - 0xfe, 0xf8, 0x1a, 0x39, 0xe4, 0xe3, 0x6b, 0x2c, 0xf7, 0xe1, 0xf5, 0x2f, 0x12, 0x0f, 0x98, 0x51, - 0xf6, 0xe5, 0x4f, 0x75, 0x79, 0xc0, 0x08, 0x71, 0x7a, 0x2f, 0xcf, 0x98, 0x8a, 0xd0, 0x03, 0x8f, - 0xb1, 0x2e, 0x77, 0x7e, 0x04, 0xdf, 0x0c, 0x49, 0xb0, 0x70, 0x4a, 0xaa, 0x89, 0x0f, 0x74, 0xde, - 0x23, 0xd6, 0x1b, 0xcf, 0xb6, 0xe1, 0x64, 0xce, 0xa0, 0x67, 0x88, 0x8c, 0x97, 0x74, 0x91, 0x71, - 0x17, 0x41, 0xe3, 0x9c, 0x1c, 0x96, 0xb9, 0xb7, 0xdb, 0x8e, 0x17, 0xb9, 0xd1, 0xae, 0x2e, 0x62, - 0xf6, 0xc0, 0xec, 0x0d, 0xfa, 0x2c, 0xf4, 0x37, 0x5c, 0xaf, 0x7d, 0x4f, 0x5c, 0x53, 0xe7, 0xb3, - 0x5f, 0x10, 0x5e, 0xfb, 0x9e, 0xf9, 0x7d, 0x25, 0xba, 0x1b, 0x58, 0xf9, 0xc1, 0x5e, 0x09, 0xa5, - 0x11, 0x30, 0xa7, 0x6a, 0x3f, 0x0b, 0xe3, 0x4b, 0x0e, 0x69, 0xfa, 0xde, 0xb2, 0x57, 0x6f, 0xf9, - 0xae, 0x17, 0xa1, 0x19, 0xe8, 0x63, 0xfc, 0x19, 0xbf, 0x9d, 0xfa, 0xe8, 0xe0, 0x63, 0x56, 0x62, - 0x6f, 0xc2, 0xf1, 0x25, 0xff, 0xae, 0x77, 0xd7, 0x09, 0xea, 0xf3, 0x95, 0xb2, 0x26, 0x72, 0x5b, - 0x93, 0x22, 0x1f, 0x2b, 0xff, 0x41, 0xad, 0xd5, 0xe4, 0xf3, 0xb8, 0xe2, 0x36, 0x48, 0x8e, 0x60, - 0xf4, 0xdf, 0x2b, 0x18, 0x2d, 0xc5, 0xf8, 0x4a, 0xad, 0x67, 0xe5, 0x5a, 0x04, 0xbc, 0x0d, 0x43, - 0x1b, 0x2e, 0x69, 0xd4, 0x31, 0xd9, 0x10, 0xb3, 0xf1, 0x74, 0xbe, 0xcd, 0xe0, 0x0a, 0xc5, 0x54, - 0xfa, 0x47, 0x26, 0x30, 0x5a, 0x11, 0x95, 0xb1, 0x22, 0x83, 0xb6, 0x61, 0x52, 0xce, 0x99, 0x84, - 0x8a, 0x23, 0xf3, 0x99, 0x4e, 0x7b, 0xc3, 0x24, 0xce, 0xec, 0xa7, 0x71, 0x82, 0x0c, 0x4e, 0x11, - 0x46, 0xa7, 0xa1, 0xaf, 0x49, 0x99, 0x83, 0x3e, 0x36, 0xfc, 0x4c, 0x42, 0xc4, 0x84, 0x5d, 0xac, - 0xd4, 0xfe, 0x79, 0x0b, 0x4e, 0xa6, 0x46, 0x46, 0x08, 0xfd, 0x1e, 0xf2, 0x2c, 0x24, 0x85, 0x70, - 0x85, 0xee, 0x42, 0x38, 0xfb, 0x3f, 0xb1, 0xe0, 0xd8, 0x72, 0xb3, 0x15, 0xed, 0x2e, 0xb9, 0xa6, - 0xfa, 0xfe, 0x55, 0x18, 0x68, 0x92, 0xba, 0xdb, 0x6e, 0x8a, 0x99, 0x2b, 0xc9, 0x0b, 0x74, 0x95, - 0x95, 0xd2, 0x4d, 0x58, 0x8d, 0xfc, 0xc0, 0xd9, 0x24, 0xbc, 0x00, 0x0b, 0x74, 0xc6, 0x86, 0xb8, - 0xf7, 0xc9, 0x75, 0xb7, 0xe9, 0x46, 0x0f, 0xb6, 0xbb, 0x84, 0xe6, 0x5d, 0x12, 0xc1, 0x31, 0x3d, - 0xfb, 0xbb, 0x16, 0x4c, 0xc8, 0x75, 0x3f, 0x5f, 0xaf, 0x07, 0x24, 0x0c, 0xd1, 0x2c, 0x14, 0xdc, - 0x96, 0xe8, 0x25, 0x88, 0x5e, 0x16, 0xca, 0x15, 0x5c, 0x70, 0x5b, 0xf2, 0xc5, 0xc3, 0xee, 0xe8, - 0xa2, 0x69, 0x84, 0x70, 0x55, 0x94, 0x63, 0x85, 0x81, 0x2e, 0xc0, 0x90, 0xe7, 0xd7, 0xf9, 0xa3, - 0x41, 0xa8, 0xa1, 0x29, 0xe6, 0x9a, 0x28, 0xc3, 0x0a, 0x8a, 0x2a, 0x30, 0xcc, 0x4d, 0x54, 0xe3, - 0x45, 0xdb, 0x93, 0xa1, 0x2b, 0xfb, 0xb2, 0x75, 0x59, 0x13, 0xc7, 0x44, 0xec, 0x3f, 0xb4, 0x60, - 0x54, 0x7e, 0x59, 0x8f, 0xcf, 0x39, 0xba, 0xb5, 0xe2, 0xa7, 0x5c, 0xbc, 0xb5, 0xe8, 0x73, 0x8c, - 0x41, 0x8c, 0x57, 0x58, 0xf1, 0x50, 0xaf, 0xb0, 0x4b, 0x30, 0xe2, 0xb4, 0x5a, 0x15, 0xf3, 0x09, - 0xc7, 0x96, 0xd2, 0x7c, 0x5c, 0x8c, 0x75, 0x1c, 0xfb, 0xe7, 0x0a, 0x30, 0x2e, 0xbf, 0xa0, 0xda, - 0xbe, 0x13, 0x92, 0x08, 0xad, 0xc3, 0xb0, 0xc3, 0x67, 0x89, 0xc8, 0x45, 0xfe, 0x44, 0xb6, 0x68, - 0xd1, 0x98, 0xd2, 0x98, 0x17, 0x9d, 0x97, 0xb5, 0x71, 0x4c, 0x08, 0x35, 0x60, 0xca, 0xf3, 0x23, - 0xc6, 0x97, 0x28, 0x78, 0x27, 0x6d, 0x6f, 0x92, 0xfa, 0x29, 0x41, 0x7d, 0x6a, 0x2d, 0x49, 0x05, - 0xa7, 0x09, 0xa3, 0x65, 0x29, 0xae, 0x2d, 0xe6, 0xcb, 0xd9, 0xf4, 0x89, 0xcb, 0x96, 0xd6, 0xda, - 0xbf, 0x67, 0xc1, 0xb0, 0x44, 0x3b, 0x0a, 0xc5, 0xfe, 0x2a, 0x0c, 0x86, 0x6c, 0x12, 0xe4, 0xd0, - 0xd8, 0x9d, 0x3a, 0xce, 0xe7, 0x2b, 0x66, 0xb7, 0xf8, 0xff, 0x10, 0x4b, 0x1a, 0x4c, 0x5b, 0xa7, - 0xba, 0xff, 0x01, 0xd1, 0xd6, 0xa9, 0xfe, 0xe4, 0x5c, 0x4a, 0x7f, 0xc3, 0xfa, 0xac, 0x89, 0xbf, - 0xe9, 0xab, 0xa0, 0x15, 0x90, 0x0d, 0xf7, 0x5e, 0xf2, 0x55, 0x50, 0x61, 0xa5, 0x58, 0x40, 0xd1, - 0xbb, 0x30, 0x5a, 0x93, 0x6a, 0x9a, 0x78, 0x87, 0x9f, 0xef, 0xa8, 0x32, 0x54, 0xda, 0x65, 0x2e, - 0x66, 0x5c, 0xd4, 0xea, 0x63, 0x83, 0x9a, 0x69, 0x82, 0x55, 0xec, 0x66, 0x82, 0x15, 0xd3, 0xcd, - 0x37, 0x48, 0xfa, 0x05, 0x0b, 0x06, 0xb8, 0x78, 0xbe, 0x37, 0xed, 0x88, 0xa6, 0x6c, 0x8f, 0xc7, - 0xee, 0x16, 0x2d, 0x14, 0x9c, 0x0d, 0x5a, 0x85, 0x61, 0xf6, 0x83, 0xa9, 0x17, 0x8a, 0xf9, 0x0e, - 0x5b, 0xbc, 0x55, 0xbd, 0x83, 0xb7, 0x64, 0x35, 0x1c, 0x53, 0xb0, 0x7f, 0xb6, 0x48, 0x4f, 0xb7, - 0x18, 0xd5, 0xb8, 0xf4, 0xad, 0x47, 0x77, 0xe9, 0x17, 0x1e, 0xd5, 0xa5, 0xbf, 0x09, 0x13, 0x35, - 0x4d, 0x35, 0x1f, 0xcf, 0xe4, 0x85, 0x8e, 0x8b, 0x44, 0xd3, 0xe2, 0x73, 0x01, 0xe6, 0xa2, 0x49, - 0x04, 0x27, 0xa9, 0xa2, 0xcf, 0xc0, 0x28, 0x9f, 0x67, 0xd1, 0x0a, 0xb7, 0x62, 0x7b, 0x2a, 0x7f, - 0xbd, 0xe8, 0x4d, 0x70, 0x81, 0xb7, 0x56, 0x1d, 0x1b, 0xc4, 0xec, 0x7f, 0xb0, 0x00, 0x2d, 0xb7, - 0xb6, 0x48, 0x93, 0x04, 0x4e, 0x23, 0xd6, 0xb0, 0x7d, 0xd5, 0x82, 0x19, 0x92, 0x2a, 0x5e, 0xf4, - 0x9b, 0x4d, 0xf1, 0x9e, 0xce, 0x11, 0xf9, 0x2c, 0xe7, 0xd4, 0x51, 0x2e, 0x64, 0x33, 0x79, 0x18, - 0x38, 0xb7, 0x3d, 0xb4, 0x0a, 0xd3, 0xfc, 0x96, 0x54, 0x00, 0xcd, 0xd0, 0xed, 0x31, 0x41, 0x78, - 0x7a, 0x3d, 0x8d, 0x82, 0xb3, 0xea, 0xd9, 0xbf, 0x37, 0x06, 0xb9, 0xbd, 0xf8, 0x50, 0xb5, 0xf8, - 0xa1, 0x6a, 0xf1, 0x43, 0xd5, 0xe2, 0x87, 0xaa, 0xc5, 0x0f, 0x55, 0x8b, 0x1f, 0xaa, 0x16, 0x3f, - 0xa0, 0xaa, 0xc5, 0x7f, 0xc7, 0x82, 0xe3, 0xea, 0xfa, 0x32, 0x1e, 0xec, 0x5f, 0x84, 0x69, 0xbe, - 0xdd, 0x16, 0x1b, 0x8e, 0xdb, 0x5c, 0x27, 0xcd, 0x56, 0xc3, 0x89, 0xa4, 0x01, 0xd1, 0xa5, 0xcc, - 0x95, 0x9b, 0xf0, 0x52, 0x30, 0x2a, 0x72, 0x77, 0xaf, 0x0c, 0x00, 0xce, 0x6a, 0xc6, 0xfe, 0xed, - 0x21, 0xe8, 0x5f, 0xde, 0x21, 0x5e, 0x74, 0x04, 0x4f, 0x9b, 0x1a, 0x8c, 0xbb, 0xde, 0x8e, 0xdf, - 0xd8, 0x21, 0x75, 0x0e, 0x3f, 0xcc, 0x0b, 0xfc, 0x84, 0x20, 0x3d, 0x5e, 0x36, 0x48, 0xe0, 0x04, - 0xc9, 0x47, 0xa1, 0xa0, 0xb9, 0x02, 0x03, 0xfc, 0xf2, 0x11, 0xda, 0x99, 0xcc, 0x33, 0x9b, 0x0d, - 0xa2, 0xb8, 0x52, 0x63, 0xe5, 0x11, 0xbf, 0xdc, 0x44, 0x75, 0xf4, 0x05, 0x18, 0xdf, 0x70, 0x83, - 0x30, 0x5a, 0x77, 0x9b, 0xf4, 0x6a, 0x68, 0xb6, 0x1e, 0x40, 0x21, 0xa3, 0xc6, 0x61, 0xc5, 0xa0, - 0x84, 0x13, 0x94, 0xd1, 0x26, 0x8c, 0x35, 0x1c, 0xbd, 0xa9, 0xc1, 0x43, 0x37, 0xa5, 0x6e, 0x87, - 0xeb, 0x3a, 0x21, 0x6c, 0xd2, 0xa5, 0xdb, 0xa9, 0xc6, 0x74, 0x0a, 0x43, 0x4c, 0x9c, 0xa1, 0xb6, - 0x13, 0x57, 0x26, 0x70, 0x18, 0x65, 0xd0, 0x98, 0xad, 0xff, 0xb0, 0xc9, 0xa0, 0x69, 0x16, 0xfd, - 0x9f, 0x87, 0x61, 0x42, 0x87, 0x90, 0x12, 0x16, 0x17, 0xcc, 0xc5, 0xde, 0xfa, 0xba, 0xea, 0xd6, - 0x02, 0xdf, 0x54, 0x85, 0x2d, 0x4b, 0x4a, 0x38, 0x26, 0x8a, 0x16, 0x61, 0x20, 0x24, 0x81, 0xab, - 0xc4, 0xed, 0x1d, 0xa6, 0x91, 0xa1, 0x71, 0x7f, 0x42, 0xfe, 0x1b, 0x8b, 0xaa, 0x74, 0x79, 0x39, - 0x4c, 0x14, 0xcb, 0x2e, 0x03, 0x6d, 0x79, 0xcd, 0xb3, 0x52, 0x2c, 0xa0, 0xe8, 0x2d, 0x18, 0x0c, - 0x48, 0x83, 0xe9, 0x5a, 0xc7, 0x7a, 0x5f, 0xe4, 0x5c, 0x75, 0xcb, 0xeb, 0x61, 0x49, 0x00, 0x5d, - 0x03, 0x14, 0x10, 0xca, 0xe0, 0xb9, 0xde, 0xa6, 0xb2, 0x80, 0x17, 0x07, 0xad, 0x62, 0xa4, 0x71, - 0x8c, 0x21, 0x5d, 0x49, 0x71, 0x46, 0x35, 0x74, 0x05, 0xa6, 0x54, 0x69, 0xd9, 0x0b, 0x23, 0x87, - 0x1e, 0x70, 0x13, 0x8c, 0x96, 0x92, 0xaf, 0xe0, 0x24, 0x02, 0x4e, 0xd7, 0xb1, 0x7f, 0xcd, 0x02, - 0x3e, 0xce, 0x47, 0x20, 0x55, 0x78, 0xd3, 0x94, 0x2a, 0x9c, 0xca, 0x9d, 0xb9, 0x1c, 0x89, 0xc2, - 0xaf, 0x59, 0x30, 0xa2, 0xcd, 0x6c, 0xbc, 0x66, 0xad, 0x0e, 0x6b, 0xb6, 0x0d, 0x93, 0x74, 0xa5, - 0xdf, 0xb8, 0x13, 0x92, 0x60, 0x87, 0xd4, 0xd9, 0xc2, 0x2c, 0x3c, 0xd8, 0xc2, 0x54, 0xd6, 0xb6, - 0xd7, 0x13, 0x04, 0x71, 0xaa, 0x09, 0xfb, 0xf3, 0xb2, 0xab, 0xca, 0x38, 0xb9, 0xa6, 0xe6, 0x3c, - 0x61, 0x9c, 0xac, 0x66, 0x15, 0xc7, 0x38, 0x74, 0xab, 0x6d, 0xf9, 0x61, 0x94, 0x34, 0x4e, 0xbe, - 0xea, 0x87, 0x11, 0x66, 0x10, 0xfb, 0x25, 0x80, 0xe5, 0x7b, 0xa4, 0xc6, 0x57, 0xac, 0xfe, 0xe8, - 0xb1, 0xf2, 0x1f, 0x3d, 0xf6, 0x9f, 0x5b, 0x30, 0xbe, 0xb2, 0x68, 0xdc, 0x5c, 0x73, 0x00, 0xfc, - 0xa5, 0x76, 0xfb, 0xf6, 0x9a, 0xb4, 0x90, 0xe1, 0x46, 0x02, 0xaa, 0x14, 0x6b, 0x18, 0xe8, 0x14, - 0x14, 0x1b, 0x6d, 0x4f, 0x88, 0x3d, 0x07, 0xe9, 0xf5, 0x78, 0xbd, 0xed, 0x61, 0x5a, 0xa6, 0xb9, - 0x91, 0x15, 0x7b, 0x76, 0x23, 0xeb, 0x1a, 0xcd, 0x06, 0x95, 0xa0, 0xff, 0xee, 0x5d, 0xb7, 0xce, - 0x9d, 0xf4, 0x85, 0xf5, 0xce, 0xed, 0xdb, 0xe5, 0xa5, 0x10, 0xf3, 0x72, 0xfb, 0x6b, 0x45, 0x98, - 0x5d, 0x69, 0x90, 0x7b, 0xef, 0x33, 0x50, 0x41, 0xaf, 0x4e, 0x70, 0x87, 0x13, 0x20, 0x1d, 0xd6, - 0xd1, 0xb1, 0xfb, 0x78, 0x6c, 0xc0, 0x20, 0xb7, 0xcd, 0x95, 0x61, 0x0b, 0x32, 0x35, 0xa2, 0xf9, - 0x03, 0x32, 0xc7, 0x6d, 0x7c, 0x85, 0x46, 0x54, 0x5d, 0x98, 0xa2, 0x14, 0x4b, 0xe2, 0xb3, 0xaf, - 0xc1, 0xa8, 0x8e, 0x79, 0x28, 0x97, 0xe3, 0x1f, 0x2b, 0xc2, 0x24, 0xed, 0xc1, 0x23, 0x9d, 0x88, - 0x9b, 0xe9, 0x89, 0x78, 0xd8, 0x6e, 0xa7, 0xdd, 0x67, 0xe3, 0xdd, 0xe4, 0x6c, 0x5c, 0xca, 0x9b, - 0x8d, 0xa3, 0x9e, 0x83, 0x1f, 0xb7, 0x60, 0x7a, 0xa5, 0xe1, 0xd7, 0xb6, 0x13, 0xae, 0xa1, 0xaf, - 0xc0, 0x08, 0x3d, 0x8e, 0x43, 0x23, 0x4a, 0x8a, 0x11, 0x37, 0x47, 0x80, 0xb0, 0x8e, 0xa7, 0x55, - 0xbb, 0x79, 0xb3, 0xbc, 0x94, 0x15, 0x6e, 0x47, 0x80, 0xb0, 0x8e, 0x67, 0xff, 0xa9, 0x05, 0x67, - 0xae, 0x2c, 0x2e, 0xc7, 0x4b, 0x31, 0x15, 0xf1, 0xe7, 0x3c, 0x0c, 0xb4, 0xea, 0x5a, 0x57, 0x62, - 0xb1, 0xf0, 0x12, 0xeb, 0x85, 0x80, 0x7e, 0x50, 0x82, 0x6b, 0xdd, 0x04, 0xb8, 0x82, 0x2b, 0x8b, - 0xe2, 0xdc, 0x95, 0x5a, 0x20, 0x2b, 0x57, 0x0b, 0xf4, 0x14, 0x0c, 0xd2, 0x7b, 0xc1, 0xad, 0xc9, - 0x7e, 0x73, 0x9b, 0x07, 0x5e, 0x84, 0x25, 0xcc, 0xfe, 0x55, 0x0b, 0xa6, 0xaf, 0xb8, 0x11, 0xbd, - 0xb4, 0x93, 0x21, 0x6d, 0xe8, 0xad, 0x1d, 0xba, 0x91, 0x1f, 0xec, 0x26, 0x43, 0xda, 0x60, 0x05, - 0xc1, 0x1a, 0x16, 0xff, 0xa0, 0x1d, 0x97, 0x39, 0x9b, 0x14, 0x4c, 0xbd, 0x1b, 0x16, 0xe5, 0x58, - 0x61, 0xd0, 0xf1, 0xaa, 0xbb, 0x01, 0x13, 0x59, 0xee, 0x8a, 0x83, 0x5b, 0x8d, 0xd7, 0x92, 0x04, - 0xe0, 0x18, 0xc7, 0xfe, 0x3b, 0x0b, 0x4a, 0x57, 0xb8, 0xcb, 0xec, 0x46, 0x98, 0x73, 0xe8, 0xbe, - 0x04, 0xc3, 0x44, 0x2a, 0x08, 0x44, 0xaf, 0x15, 0x23, 0xaa, 0x34, 0x07, 0x3c, 0xb2, 0x8e, 0xc2, - 0xeb, 0xc1, 0x7f, 0xfd, 0x70, 0x0e, 0xc8, 0x2b, 0x80, 0x88, 0xde, 0x96, 0x1e, 0x6a, 0x88, 0xc5, - 0x2c, 0x59, 0x4e, 0x41, 0x71, 0x46, 0x0d, 0xfb, 0xe7, 0x2d, 0x38, 0xae, 0x3e, 0xf8, 0x03, 0xf7, - 0x99, 0xf6, 0xb7, 0x0a, 0x30, 0x76, 0x75, 0x7d, 0xbd, 0x72, 0x85, 0x44, 0xda, 0xaa, 0xec, 0xac, - 0xf6, 0xc7, 0x9a, 0xf6, 0xb2, 0xd3, 0x1b, 0xb1, 0x1d, 0xb9, 0x8d, 0x39, 0x1e, 0x40, 0x6f, 0xae, - 0xec, 0x45, 0x37, 0x82, 0x6a, 0x14, 0xb8, 0xde, 0x66, 0xe6, 0x4a, 0x97, 0x3c, 0x4b, 0x31, 0x8f, - 0x67, 0x41, 0x2f, 0xc1, 0x00, 0x8b, 0xe0, 0x27, 0x27, 0xe1, 0x31, 0xf5, 0xc4, 0x62, 0xa5, 0x07, - 0x7b, 0xa5, 0xe1, 0x9b, 0xb8, 0xcc, 0xff, 0x60, 0x81, 0x8a, 0x6e, 0xc2, 0xc8, 0x56, 0x14, 0xb5, - 0xae, 0x12, 0xa7, 0x4e, 0x02, 0x79, 0xca, 0x9e, 0xcd, 0x3a, 0x65, 0xe9, 0x20, 0x70, 0xb4, 0xf8, - 0x60, 0x8a, 0xcb, 0x42, 0xac, 0xd3, 0xb1, 0xab, 0x00, 0x31, 0xec, 0x21, 0x29, 0x6e, 0xec, 0x75, - 0x18, 0xa6, 0x9f, 0x3b, 0xdf, 0x70, 0x9d, 0xce, 0xaa, 0xf1, 0xe7, 0x60, 0x58, 0x2a, 0xbe, 0x43, - 0x11, 0x5f, 0x83, 0xdd, 0x48, 0x52, 0x2f, 0x1e, 0xe2, 0x18, 0x6e, 0x3f, 0x09, 0xc2, 0xfc, 0xb6, - 0x13, 0x49, 0x7b, 0x03, 0x8e, 0x31, 0x3b, 0x62, 0x27, 0xda, 0x32, 0xd6, 0x68, 0xf7, 0xc5, 0xf0, - 0xbc, 0x78, 0xd7, 0xf1, 0x2f, 0x9b, 0xd1, 0xfc, 0xb7, 0x47, 0x25, 0xc5, 0xf8, 0x8d, 0x67, 0xff, - 0x6d, 0x1f, 0x3c, 0x56, 0xae, 0xe6, 0x07, 0x86, 0xba, 0x0c, 0xa3, 0x9c, 0x5d, 0xa4, 0x4b, 0xc3, - 0x69, 0x88, 0x76, 0x95, 0x04, 0x74, 0x5d, 0x83, 0x61, 0x03, 0x13, 0x9d, 0x81, 0xa2, 0xfb, 0x9e, - 0x97, 0xf4, 0x6e, 0x2c, 0xbf, 0xbd, 0x86, 0x69, 0x39, 0x05, 0x53, 0xce, 0x93, 0x1f, 0xe9, 0x0a, - 0xac, 0xb8, 0xcf, 0x37, 0x61, 0xdc, 0x0d, 0x6b, 0xa1, 0x5b, 0xf6, 0xe8, 0x3e, 0xd5, 0x76, 0xba, - 0x92, 0x39, 0xd0, 0x4e, 0x2b, 0x28, 0x4e, 0x60, 0x6b, 0xf7, 0x4b, 0x7f, 0xcf, 0xdc, 0x6b, 0xd7, - 0xb0, 0x14, 0xf4, 0xf8, 0x6f, 0xb1, 0xaf, 0x0b, 0x99, 0x08, 0x5e, 0x1c, 0xff, 0xfc, 0x83, 0x43, - 0x2c, 0x61, 0xf4, 0x41, 0x57, 0xdb, 0x72, 0x5a, 0xf3, 0xed, 0x68, 0x6b, 0xc9, 0x0d, 0x6b, 0xfe, - 0x0e, 0x09, 0x76, 0xd9, 0x5b, 0x7c, 0x28, 0x7e, 0xd0, 0x29, 0xc0, 0xe2, 0xd5, 0xf9, 0x0a, 0xc5, - 0xc4, 0xe9, 0x3a, 0x68, 0x1e, 0x26, 0x64, 0x61, 0x95, 0x84, 0xec, 0x0a, 0x18, 0x61, 0x64, 0x94, - 0xbf, 0xa1, 0x28, 0x56, 0x44, 0x92, 0xf8, 0x26, 0x83, 0x0b, 0x0f, 0x83, 0xc1, 0x7d, 0x15, 0xc6, - 0x5c, 0xcf, 0x8d, 0x5c, 0x27, 0xf2, 0xb9, 0xfe, 0x88, 0x3f, 0xbb, 0x99, 0x80, 0xb9, 0xac, 0x03, - 0xb0, 0x89, 0x67, 0xff, 0x1f, 0x7d, 0x30, 0xc5, 0xa6, 0xed, 0xc3, 0x15, 0xf6, 0xc3, 0xb4, 0xc2, - 0x6e, 0xa6, 0x57, 0xd8, 0xc3, 0xe0, 0xdc, 0x1f, 0x78, 0x99, 0x7d, 0xd9, 0x82, 0x29, 0x26, 0xe3, - 0x36, 0x96, 0xd9, 0x45, 0x18, 0x0e, 0x0c, 0x57, 0xd0, 0x61, 0x5d, 0xa9, 0x25, 0xbd, 0x3a, 0x63, - 0x1c, 0xf4, 0x49, 0x80, 0x56, 0x2c, 0x43, 0x2f, 0x18, 0xf1, 0x3b, 0x21, 0x57, 0x7c, 0xae, 0xd5, - 0xb1, 0xbf, 0x00, 0xc3, 0xca, 0xd7, 0x53, 0x3a, 0x7b, 0x5b, 0x39, 0xce, 0xde, 0xdd, 0xd9, 0x08, - 0x69, 0x1b, 0x57, 0xcc, 0xb4, 0x8d, 0xfb, 0x86, 0x05, 0xb1, 0x86, 0x03, 0xbd, 0x0d, 0xc3, 0x2d, - 0x9f, 0x59, 0x23, 0x07, 0xd2, 0xc4, 0xff, 0xc9, 0x8e, 0x2a, 0x12, 0x1e, 0xa4, 0x2f, 0xe0, 0xd3, - 0x51, 0x91, 0x55, 0x71, 0x4c, 0x05, 0x5d, 0x83, 0xc1, 0x56, 0x40, 0xaa, 0x11, 0x8b, 0x20, 0xd5, - 0x3b, 0x41, 0xbe, 0x7c, 0x79, 0x45, 0x2c, 0x29, 0xd8, 0xbf, 0x51, 0x80, 0xc9, 0x24, 0x2a, 0x7a, - 0x03, 0xfa, 0xc8, 0x3d, 0x52, 0x13, 0xfd, 0xcd, 0xe4, 0x09, 0x62, 0x19, 0x09, 0x1f, 0x00, 0xfa, - 0x1f, 0xb3, 0x5a, 0xe8, 0x2a, 0x0c, 0x52, 0x86, 0xe0, 0x8a, 0x8a, 0x96, 0xf8, 0x78, 0x1e, 0x53, - 0xa1, 0x38, 0x2b, 0xde, 0x39, 0x51, 0x84, 0x65, 0x75, 0x66, 0x90, 0x56, 0x6b, 0x55, 0xe9, 0x5b, - 0x2b, 0xea, 0x24, 0x12, 0x58, 0x5f, 0xac, 0x70, 0x24, 0x41, 0x8d, 0x1b, 0xa4, 0xc9, 0x42, 0x1c, - 0x13, 0x41, 0x9f, 0x84, 0xfe, 0xb0, 0x41, 0x48, 0x4b, 0x58, 0x1c, 0x64, 0x4a, 0x39, 0xab, 0x14, - 0x41, 0x50, 0x62, 0x52, 0x11, 0x56, 0x80, 0x79, 0x45, 0xfb, 0x37, 0x2d, 0x00, 0x6e, 0xc1, 0xe7, - 0x78, 0x9b, 0xe4, 0x08, 0x14, 0x03, 0x4b, 0xd0, 0x17, 0xb6, 0x48, 0xad, 0x93, 0xa9, 0x7d, 0xdc, - 0x9f, 0x6a, 0x8b, 0xd4, 0xe2, 0x35, 0x4b, 0xff, 0x61, 0x56, 0xdb, 0xfe, 0x09, 0x80, 0xf1, 0x18, - 0xad, 0x1c, 0x91, 0x26, 0x7a, 0xc1, 0x08, 0x31, 0x73, 0x2a, 0x11, 0x62, 0x66, 0x98, 0x61, 0x6b, - 0x32, 0xe8, 0x2f, 0x40, 0xb1, 0xe9, 0xdc, 0x13, 0x42, 0xc6, 0xe7, 0x3a, 0x77, 0x83, 0xd2, 0x9f, - 0x5b, 0x75, 0xee, 0xf1, 0x77, 0xf8, 0x73, 0x72, 0x8f, 0xad, 0x3a, 0xf7, 0xba, 0x9a, 0x83, 0xd3, - 0x46, 0x58, 0x5b, 0xae, 0x27, 0x8c, 0xd3, 0x7a, 0x6a, 0xcb, 0xf5, 0x92, 0x6d, 0xb9, 0x5e, 0x0f, - 0x6d, 0xb9, 0x1e, 0xba, 0x0f, 0x83, 0xc2, 0x76, 0x54, 0xc4, 0xbe, 0xbb, 0xd8, 0x43, 0x7b, 0xc2, - 0xf4, 0x94, 0xb7, 0x79, 0x51, 0xca, 0x19, 0x44, 0x69, 0xd7, 0x76, 0x65, 0x83, 0xe8, 0xdf, 0xb5, - 0x60, 0x5c, 0xfc, 0xc6, 0xe4, 0xbd, 0x36, 0x09, 0x23, 0xc1, 0x87, 0x7f, 0xac, 0xf7, 0x3e, 0x88, - 0x8a, 0xbc, 0x2b, 0x1f, 0x93, 0x57, 0xa6, 0x09, 0xec, 0xda, 0xa3, 0x44, 0x2f, 0xd0, 0x6f, 0x58, - 0x70, 0xac, 0xe9, 0xdc, 0xe3, 0x2d, 0xf2, 0x32, 0xec, 0x44, 0xae, 0x2f, 0x6c, 0x30, 0xde, 0xe8, - 0x6d, 0xfa, 0x53, 0xd5, 0x79, 0x27, 0xa5, 0xc2, 0xf5, 0x58, 0x16, 0x4a, 0xd7, 0xae, 0x66, 0xf6, - 0x6b, 0x76, 0x03, 0x86, 0xe4, 0x7a, 0x7b, 0x94, 0x86, 0xf1, 0xac, 0x1d, 0xb1, 0xd6, 0x1e, 0x69, - 0x3b, 0x5f, 0x80, 0x51, 0x7d, 0x8d, 0x3d, 0xd2, 0xb6, 0xde, 0x83, 0xe9, 0x8c, 0xb5, 0xf4, 0x48, - 0x9b, 0xbc, 0x0b, 0xa7, 0x72, 0xd7, 0xc7, 0x23, 0x75, 0x6c, 0xf8, 0x96, 0xa5, 0x9f, 0x83, 0x47, - 0xa0, 0x9d, 0x59, 0x34, 0xb5, 0x33, 0x67, 0x3b, 0xef, 0x9c, 0x1c, 0x15, 0xcd, 0xbb, 0x7a, 0xa7, - 0xe9, 0xa9, 0x8e, 0xde, 0x82, 0x81, 0x06, 0x2d, 0x91, 0x16, 0xc8, 0x76, 0xf7, 0x1d, 0x19, 0xf3, - 0xc5, 0xac, 0x3c, 0xc4, 0x82, 0x82, 0xfd, 0x75, 0x0b, 0x32, 0x5c, 0x33, 0x28, 0x9f, 0xd4, 0x76, - 0xeb, 0x6c, 0x48, 0x8a, 0x31, 0x9f, 0xa4, 0x22, 0xb0, 0x9c, 0x81, 0xe2, 0xa6, 0x5b, 0x17, 0x6e, - 0xbd, 0x0a, 0x7c, 0x85, 0x82, 0x37, 0xdd, 0x3a, 0x5a, 0x01, 0x14, 0xb6, 0x5b, 0xad, 0x06, 0x33, - 0x5b, 0x72, 0x1a, 0x57, 0x02, 0xbf, 0xdd, 0xe2, 0xe6, 0xc6, 0x45, 0x2e, 0x24, 0xaa, 0xa6, 0xa0, - 0x38, 0xa3, 0x86, 0xfd, 0x3b, 0x16, 0xf4, 0x1d, 0xc1, 0x34, 0x61, 0x73, 0x9a, 0x5e, 0xc8, 0x25, - 0x2d, 0x52, 0x26, 0xcc, 0x61, 0xe7, 0xee, 0xf2, 0xbd, 0x88, 0x78, 0x21, 0x63, 0x38, 0x32, 0x67, - 0x6d, 0xcf, 0x82, 0xe9, 0xeb, 0xbe, 0x53, 0x5f, 0x70, 0x1a, 0x8e, 0x57, 0x23, 0x41, 0xd9, 0xdb, - 0x3c, 0x94, 0x6d, 0x7f, 0xa1, 0xab, 0x6d, 0xff, 0x65, 0x18, 0x70, 0x5b, 0x5a, 0xcc, 0xf5, 0x73, - 0x74, 0x76, 0xcb, 0x15, 0x11, 0x6e, 0x1d, 0x19, 0x8d, 0xb3, 0x52, 0x2c, 0xf0, 0xe9, 0xb2, 0xe4, - 0x46, 0x75, 0x7d, 0xf9, 0xcb, 0x92, 0xbe, 0x75, 0x92, 0xb1, 0xc4, 0x0c, 0xf3, 0xef, 0x2d, 0x30, - 0x9a, 0x10, 0xee, 0x83, 0x18, 0x06, 0x5d, 0xfe, 0xa5, 0x62, 0x6d, 0x3e, 0x9d, 0xfd, 0x06, 0x49, - 0x0d, 0x8c, 0xe6, 0x18, 0xc7, 0x0b, 0xb0, 0x24, 0x64, 0x5f, 0x86, 0xcc, 0xd8, 0x2f, 0xdd, 0xe5, - 0x4b, 0xf6, 0xa7, 0x61, 0x8a, 0xd5, 0x3c, 0xa4, 0xec, 0xc6, 0x4e, 0x48, 0xc5, 0x33, 0xc2, 0xe7, - 0xda, 0xff, 0xab, 0x05, 0x68, 0xd5, 0xaf, 0xbb, 0x1b, 0xbb, 0x82, 0x38, 0xff, 0xfe, 0xf7, 0xa0, - 0xc4, 0x1f, 0xc7, 0xc9, 0x10, 0xb3, 0x8b, 0x0d, 0x27, 0x0c, 0x35, 0x89, 0xfc, 0xd3, 0xa2, 0xdd, - 0xd2, 0x7a, 0x67, 0x74, 0xdc, 0x8d, 0x1e, 0x7a, 0x3b, 0x11, 0xf1, 0xef, 0xe3, 0xa9, 0x88, 0x7f, - 0x4f, 0x67, 0xda, 0xc5, 0xa4, 0x7b, 0x2f, 0x23, 0x01, 0xda, 0x5f, 0xb1, 0x60, 0x62, 0x2d, 0x11, - 0x32, 0xf5, 0x3c, 0x33, 0x12, 0xc8, 0xd0, 0x34, 0x55, 0x59, 0x29, 0x16, 0xd0, 0x87, 0x2e, 0x89, - 0xfd, 0x67, 0x0b, 0xe2, 0x58, 0x53, 0x47, 0xc0, 0x72, 0x2f, 0x1a, 0x2c, 0x77, 0xe6, 0xf3, 0x45, - 0x75, 0x27, 0x8f, 0xe3, 0x46, 0xd7, 0xd4, 0x9c, 0x74, 0x78, 0xb9, 0xc4, 0x64, 0xf8, 0x3e, 0x1b, - 0x37, 0x27, 0x4e, 0xcd, 0xc6, 0x77, 0x0a, 0x80, 0x14, 0x6e, 0xcf, 0x51, 0x22, 0xd3, 0x35, 0x1e, - 0x4e, 0x94, 0xc8, 0x1d, 0x40, 0xcc, 0xcc, 0x25, 0x70, 0xbc, 0x90, 0x93, 0x75, 0x85, 0xec, 0xf9, - 0x70, 0x36, 0x34, 0xb3, 0xd2, 0x6d, 0xf4, 0x7a, 0x8a, 0x1a, 0xce, 0x68, 0x41, 0x33, 0x5f, 0xea, - 0xef, 0xd5, 0x7c, 0x69, 0xa0, 0x8b, 0xff, 0xf3, 0x37, 0x2d, 0x18, 0x53, 0xc3, 0xf4, 0x01, 0x71, - 0x01, 0x51, 0xfd, 0xc9, 0xb9, 0x57, 0x2a, 0x5a, 0x97, 0x19, 0x33, 0xf0, 0x23, 0xcc, 0x8f, 0xdd, - 0x69, 0xb8, 0xf7, 0x89, 0x0a, 0x66, 0x5c, 0x12, 0x7e, 0xe9, 0xa2, 0xf4, 0x60, 0xaf, 0x34, 0xa6, - 0xfe, 0xf1, 0xf0, 0xa9, 0x71, 0x15, 0xfb, 0x97, 0xe8, 0x66, 0x37, 0x97, 0x22, 0x7a, 0x05, 0xfa, - 0x5b, 0x5b, 0x4e, 0x48, 0x12, 0xae, 0x72, 0xfd, 0x15, 0x5a, 0x78, 0xb0, 0x57, 0x1a, 0x57, 0x15, - 0x58, 0x09, 0xe6, 0xd8, 0xbd, 0xc7, 0xde, 0x4c, 0x2f, 0xce, 0xae, 0xb1, 0x37, 0xff, 0xc1, 0x82, - 0xbe, 0x35, 0x7a, 0x7b, 0x3d, 0xfa, 0x23, 0xe0, 0x4d, 0xe3, 0x08, 0x38, 0x9d, 0x97, 0xd6, 0x27, - 0x77, 0xf7, 0xaf, 0x24, 0x76, 0xff, 0xd9, 0x5c, 0x0a, 0x9d, 0x37, 0x7e, 0x13, 0x46, 0x58, 0xb2, - 0x20, 0xe1, 0x16, 0xf8, 0x92, 0xb1, 0xe1, 0x4b, 0x89, 0x0d, 0x3f, 0xa1, 0xa1, 0x6a, 0x3b, 0xfd, - 0x19, 0x18, 0x14, 0x7e, 0x66, 0xc9, 0x70, 0x00, 0x02, 0x17, 0x4b, 0xb8, 0xfd, 0x0b, 0x45, 0x30, - 0x92, 0x13, 0xa1, 0xdf, 0xb3, 0x60, 0x2e, 0xe0, 0xf6, 0xe7, 0xf5, 0xa5, 0x76, 0xe0, 0x7a, 0x9b, - 0xd5, 0xda, 0x16, 0xa9, 0xb7, 0x1b, 0xae, 0xb7, 0x59, 0xde, 0xf4, 0x7c, 0x55, 0xbc, 0x7c, 0x8f, - 0xd4, 0xda, 0x4c, 0x37, 0xdc, 0x25, 0x13, 0x92, 0xf2, 0xe3, 0x78, 0x71, 0x7f, 0xaf, 0x34, 0x87, - 0x0f, 0x45, 0x1b, 0x1f, 0xb2, 0x2f, 0xe8, 0x4f, 0x2d, 0xb8, 0xc8, 0x93, 0xe4, 0xf4, 0xde, 0xff, - 0x0e, 0x12, 0x8e, 0x8a, 0x24, 0x15, 0x13, 0x59, 0x27, 0x41, 0x73, 0xe1, 0x55, 0x31, 0xa0, 0x17, - 0x2b, 0x87, 0x6b, 0x0b, 0x1f, 0xb6, 0x73, 0xf6, 0x7f, 0x55, 0x84, 0x31, 0x11, 0xa3, 0x51, 0xdc, - 0x01, 0xaf, 0x18, 0x4b, 0xe2, 0xf1, 0xc4, 0x92, 0x98, 0x32, 0x90, 0x1f, 0xce, 0xf1, 0x1f, 0xc2, - 0x14, 0x3d, 0x9c, 0xaf, 0x12, 0x27, 0x88, 0xee, 0x10, 0x87, 0x5b, 0x25, 0x16, 0x0f, 0x7d, 0xfa, - 0x2b, 0xf1, 0xf8, 0xf5, 0x24, 0x31, 0x9c, 0xa6, 0xff, 0xc3, 0x74, 0xe7, 0x78, 0x30, 0x99, 0x0a, - 0xb3, 0xf9, 0x0e, 0x0c, 0x2b, 0x27, 0x29, 0x71, 0xe8, 0x74, 0x8e, 0x56, 0x9b, 0xa4, 0xc0, 0x85, - 0x9e, 0xb1, 0x83, 0x5e, 0x4c, 0xce, 0xfe, 0xcf, 0x0a, 0x46, 0x83, 0x7c, 0x12, 0xd7, 0x60, 0xc8, - 0x09, 0x59, 0x04, 0xed, 0x7a, 0x27, 0xb9, 0x74, 0xaa, 0x19, 0xe6, 0xa8, 0x36, 0x2f, 0x6a, 0x62, - 0x45, 0x03, 0x5d, 0xe5, 0xb6, 0x9f, 0x3b, 0xa4, 0x93, 0x50, 0x3a, 0x45, 0x0d, 0xa4, 0x75, 0xe8, - 0x0e, 0xc1, 0xa2, 0x3e, 0xfa, 0x2c, 0x37, 0xce, 0xbd, 0xe6, 0xf9, 0x77, 0xbd, 0x2b, 0xbe, 0x2f, - 0xe3, 0xf1, 0xf4, 0x46, 0x70, 0x4a, 0x9a, 0xe4, 0xaa, 0xea, 0xd8, 0xa4, 0xd6, 0x5b, 0xdc, 0xea, - 0x2f, 0x02, 0x4b, 0x0a, 0x62, 0xc6, 0x24, 0x08, 0x11, 0x81, 0x09, 0x11, 0x00, 0x54, 0x96, 0x89, - 0xb1, 0xcb, 0x7c, 0x7e, 0x9b, 0xb5, 0x63, 0x3d, 0xce, 0x35, 0x93, 0x04, 0x4e, 0xd2, 0xb4, 0xb7, - 0xf8, 0x21, 0xbc, 0x42, 0x9c, 0xa8, 0x1d, 0x90, 0x10, 0x7d, 0x0a, 0x66, 0xd2, 0x2f, 0x63, 0xa1, - 0x0e, 0xb1, 0x18, 0xf7, 0x7c, 0x7a, 0x7f, 0xaf, 0x34, 0x53, 0xcd, 0xc1, 0xc1, 0xb9, 0xb5, 0xed, - 0x5f, 0xb1, 0x80, 0x79, 0x82, 0x1f, 0x01, 0xe7, 0xf3, 0x09, 0x93, 0xf3, 0x99, 0xc9, 0x9b, 0xce, - 0x1c, 0xa6, 0xe7, 0x65, 0xbe, 0x86, 0x2b, 0x81, 0x7f, 0x6f, 0x57, 0xd8, 0x6e, 0x75, 0x7f, 0xc6, - 0xd9, 0x5f, 0xb3, 0x80, 0x65, 0xd0, 0xc1, 0xfc, 0xd5, 0x2e, 0x15, 0x1c, 0xdd, 0xcd, 0x12, 0x3e, - 0x05, 0x43, 0x1b, 0x62, 0xf8, 0x33, 0x84, 0x4e, 0x46, 0x87, 0x4d, 0xda, 0x72, 0xd2, 0x84, 0x47, - 0xa7, 0xf8, 0x87, 0x15, 0x35, 0xfb, 0x3f, 0xb5, 0x60, 0x36, 0xbf, 0x1a, 0xba, 0x09, 0x27, 0x03, - 0x52, 0x6b, 0x07, 0x21, 0xdd, 0x12, 0xe2, 0x01, 0x24, 0x9c, 0xa2, 0xf8, 0x54, 0x3f, 0xb6, 0xbf, - 0x57, 0x3a, 0x89, 0xb3, 0x51, 0x70, 0x5e, 0x5d, 0xf4, 0x1a, 0x8c, 0xb7, 0x43, 0xce, 0xf9, 0x31, - 0xa6, 0x2b, 0x14, 0x61, 0x9a, 0x99, 0xdf, 0xd0, 0x4d, 0x03, 0x82, 0x13, 0x98, 0xf6, 0xbf, 0xe4, - 0xcb, 0x51, 0x45, 0x6a, 0x6e, 0xc2, 0x94, 0xa7, 0xfd, 0xa7, 0x37, 0xa0, 0x7c, 0xea, 0x3f, 0xd9, - 0xed, 0xd6, 0x67, 0xd7, 0xa5, 0xe6, 0xab, 0x9e, 0x20, 0x83, 0xd3, 0x94, 0xed, 0x5f, 0xb4, 0xe0, - 0xa4, 0x8e, 0xa8, 0xb9, 0xc3, 0x75, 0xd3, 0xe5, 0x2d, 0xc1, 0x90, 0xdf, 0x22, 0x81, 0x13, 0xf9, - 0x81, 0xb8, 0xe6, 0x2e, 0xc8, 0x15, 0x7a, 0x43, 0x94, 0x1f, 0x88, 0xcc, 0x31, 0x92, 0xba, 0x2c, - 0xc7, 0xaa, 0x26, 0xb2, 0x61, 0x80, 0x09, 0x10, 0x43, 0xe1, 0xf8, 0xc8, 0x0e, 0x2d, 0x66, 0x9f, - 0x12, 0x62, 0x01, 0xb1, 0xff, 0xd6, 0xe2, 0xeb, 0x53, 0xef, 0x3a, 0x7a, 0x0f, 0x26, 0x9b, 0x4e, - 0x54, 0xdb, 0x5a, 0xbe, 0xd7, 0x0a, 0xb8, 0x8a, 0x56, 0x8e, 0xd3, 0x73, 0xdd, 0xc6, 0x49, 0xfb, - 0xc8, 0xd8, 0x40, 0x7a, 0x35, 0x41, 0x0c, 0xa7, 0xc8, 0xa3, 0x3b, 0x30, 0xc2, 0xca, 0x98, 0x4f, - 0x6f, 0xd8, 0x89, 0x97, 0xc9, 0x6b, 0x4d, 0x99, 0xf8, 0xac, 0xc6, 0x74, 0xb0, 0x4e, 0xd4, 0xfe, - 0x46, 0x91, 0x1f, 0x1a, 0xec, 0xed, 0xf1, 0x0c, 0x0c, 0xb6, 0xfc, 0xfa, 0x62, 0x79, 0x09, 0x8b, - 0x59, 0x50, 0xf7, 0x5e, 0x85, 0x17, 0x63, 0x09, 0x47, 0x17, 0x60, 0x48, 0xfc, 0x94, 0x2a, 0x75, - 0xb6, 0x47, 0x04, 0x5e, 0x88, 0x15, 0x14, 0xbd, 0x08, 0xd0, 0x0a, 0xfc, 0x1d, 0xb7, 0xce, 0xc2, - 0x20, 0x15, 0x4d, 0xeb, 0xbc, 0x8a, 0x82, 0x60, 0x0d, 0x0b, 0xbd, 0x0e, 0x63, 0x6d, 0x2f, 0xe4, - 0xfc, 0x93, 0x16, 0x6c, 0x5e, 0xd9, 0x8d, 0xdd, 0xd4, 0x81, 0xd8, 0xc4, 0x45, 0xf3, 0x30, 0x10, - 0x39, 0xcc, 0xda, 0xac, 0x3f, 0xdf, 0x88, 0x7e, 0x9d, 0x62, 0xe8, 0x69, 0xdd, 0x68, 0x05, 0x2c, - 0x2a, 0xa2, 0x77, 0xa4, 0x7b, 0x3d, 0xbf, 0x89, 0x84, 0xf7, 0x4a, 0x6f, 0xb7, 0x96, 0xe6, 0x5c, - 0x2f, 0xbc, 0x62, 0x0c, 0x5a, 0xe8, 0x35, 0x00, 0x72, 0x2f, 0x22, 0x81, 0xe7, 0x34, 0x94, 0x8d, - 0xa8, 0x62, 0x64, 0x96, 0xfc, 0x35, 0x3f, 0xba, 0x19, 0x92, 0x65, 0x85, 0x81, 0x35, 0x6c, 0xfb, - 0x27, 0x46, 0x00, 0xe2, 0x87, 0x06, 0xba, 0x0f, 0x43, 0x35, 0xa7, 0xe5, 0xd4, 0x78, 0xce, 0xd2, - 0x62, 0x9e, 0xd7, 0x73, 0x5c, 0x63, 0x6e, 0x51, 0xa0, 0x73, 0xe5, 0x8d, 0x8c, 0xd7, 0x3d, 0x24, - 0x8b, 0xbb, 0x2a, 0x6c, 0x54, 0x7b, 0xe8, 0xcb, 0x16, 0x8c, 0x88, 0x68, 0x4f, 0x6c, 0x86, 0x0a, - 0xf9, 0xfa, 0x36, 0xad, 0xfd, 0xf9, 0xb8, 0x06, 0xef, 0xc2, 0x4b, 0x72, 0x85, 0x6a, 0x90, 0xae, - 0xbd, 0xd0, 0x1b, 0x46, 0x1f, 0x95, 0x6f, 0xdb, 0xa2, 0x31, 0x94, 0xea, 0x6d, 0x3b, 0xcc, 0xae, - 0x1a, 0xfd, 0x59, 0x7b, 0xd3, 0x78, 0xd6, 0xf6, 0xe5, 0xfb, 0x0f, 0x1b, 0xfc, 0x76, 0xb7, 0x17, - 0x2d, 0xaa, 0xe8, 0xb1, 0x44, 0xfa, 0xf3, 0x9d, 0x5e, 0xb5, 0x87, 0x5d, 0x97, 0x38, 0x22, 0x5f, - 0x80, 0x89, 0xba, 0xc9, 0xb5, 0x88, 0x95, 0xf8, 0x74, 0x1e, 0xdd, 0x04, 0x93, 0x13, 0xf3, 0x29, - 0x09, 0x00, 0x4e, 0x12, 0x46, 0x15, 0x1e, 0x5a, 0xa6, 0xec, 0x6d, 0xf8, 0xc2, 0x83, 0xca, 0xce, - 0x9d, 0xcb, 0xdd, 0x30, 0x22, 0x4d, 0x8a, 0x19, 0x33, 0x09, 0x6b, 0xa2, 0x2e, 0x56, 0x54, 0xd0, - 0x5b, 0x30, 0xc0, 0xbc, 0x1e, 0xc3, 0x99, 0xa1, 0x7c, 0xb5, 0x86, 0x19, 0x86, 0x34, 0xde, 0x90, - 0xec, 0x6f, 0x88, 0x05, 0x05, 0x74, 0x55, 0xfa, 0x14, 0x87, 0x65, 0xef, 0x66, 0x48, 0x98, 0x4f, - 0xf1, 0xf0, 0xc2, 0x93, 0xb1, 0xbb, 0x30, 0x2f, 0xcf, 0x4c, 0xfe, 0x6a, 0xd4, 0xa4, 0x6c, 0x9f, - 0xf8, 0x2f, 0x73, 0xca, 0x8a, 0xa0, 0x69, 0x99, 0xdd, 0x33, 0xf3, 0xce, 0xc6, 0xc3, 0x79, 0xcb, - 0x24, 0x81, 0x93, 0x34, 0x29, 0x0b, 0xcd, 0x77, 0xbd, 0xf0, 0xc1, 0xea, 0x76, 0x76, 0x70, 0xc9, - 0x01, 0xbb, 0x8d, 0x78, 0x09, 0x16, 0xf5, 0x91, 0x0b, 0x13, 0x81, 0xc1, 0x5e, 0xc8, 0x58, 0x67, - 0xe7, 0x7b, 0x63, 0x62, 0xb4, 0x28, 0xfa, 0x26, 0x19, 0x9c, 0xa4, 0x8b, 0xde, 0xd2, 0x18, 0xa5, - 0xb1, 0xce, 0x2f, 0xff, 0x6e, 0xac, 0xd1, 0xec, 0x36, 0x8c, 0x19, 0x87, 0xcd, 0x23, 0x55, 0x41, - 0x7a, 0x30, 0x99, 0x3c, 0x59, 0x1e, 0xa9, 0xe6, 0xf1, 0xaf, 0xfb, 0x60, 0xdc, 0xdc, 0x09, 0xe8, - 0x22, 0x0c, 0x0b, 0x22, 0x2a, 0x9d, 0x94, 0xda, 0xdc, 0xab, 0x12, 0x80, 0x63, 0x1c, 0x96, 0x45, - 0x8c, 0x55, 0xd7, 0x7c, 0x05, 0xe2, 0x2c, 0x62, 0x0a, 0x82, 0x35, 0x2c, 0xfa, 0x80, 0xbd, 0xe3, - 0xfb, 0x91, 0xba, 0x47, 0xd5, 0x76, 0x59, 0x60, 0xa5, 0x58, 0x40, 0xe9, 0xfd, 0xb9, 0x4d, 0x02, - 0x8f, 0x34, 0xcc, 0x7c, 0x0a, 0xea, 0xfe, 0xbc, 0xa6, 0x03, 0xb1, 0x89, 0x4b, 0xb9, 0x00, 0x3f, - 0x64, 0xfb, 0x4f, 0x3c, 0x93, 0x63, 0xdf, 0x8b, 0x2a, 0x8f, 0x22, 0x21, 0xe1, 0xe8, 0xd3, 0x70, - 0x52, 0xc5, 0x2e, 0x14, 0xab, 0x4b, 0xb6, 0x38, 0x60, 0x48, 0xb5, 0x4e, 0x2e, 0x66, 0xa3, 0xe1, - 0xbc, 0xfa, 0xe8, 0x4d, 0x18, 0x17, 0x4f, 0x29, 0x49, 0x71, 0xd0, 0x34, 0x24, 0xbc, 0x66, 0x40, - 0x71, 0x02, 0x5b, 0x66, 0x84, 0x60, 0x6f, 0x0c, 0x49, 0x61, 0x28, 0x9d, 0x11, 0x42, 0x87, 0xe3, - 0x54, 0x0d, 0x34, 0x0f, 0x13, 0x9c, 0x75, 0x74, 0xbd, 0x4d, 0x3e, 0x27, 0xc2, 0xb3, 0x53, 0x6d, - 0xaa, 0x1b, 0x26, 0x18, 0x27, 0xf1, 0xd1, 0x65, 0x18, 0x75, 0x82, 0xda, 0x96, 0x1b, 0x91, 0x1a, - 0xdd, 0x19, 0xcc, 0x96, 0x4f, 0xb3, 0xc4, 0x9c, 0xd7, 0x60, 0xd8, 0xc0, 0xb4, 0xef, 0xc3, 0x74, - 0x46, 0x78, 0x19, 0xba, 0x70, 0x9c, 0x96, 0x2b, 0xbf, 0x29, 0xe1, 0xee, 0x30, 0x5f, 0x29, 0xcb, - 0xaf, 0xd1, 0xb0, 0xe8, 0xea, 0x64, 0x61, 0x68, 0xb4, 0xcc, 0xd7, 0x6a, 0x75, 0xae, 0x48, 0x00, - 0x8e, 0x71, 0xec, 0x7f, 0x2c, 0xc0, 0x44, 0x86, 0x82, 0x8e, 0x65, 0x5f, 0x4e, 0xbc, 0xb4, 0xe2, - 0x64, 0xcb, 0x66, 0x82, 0x91, 0xc2, 0x21, 0x12, 0x8c, 0x14, 0xbb, 0x25, 0x18, 0xe9, 0x7b, 0x3f, - 0x09, 0x46, 0xcc, 0x11, 0xeb, 0xef, 0x69, 0xc4, 0x32, 0x92, 0x92, 0x0c, 0x1c, 0x32, 0x29, 0x89, - 0x31, 0xe8, 0x83, 0x3d, 0x0c, 0xfa, 0xcf, 0x16, 0x60, 0x32, 0xa9, 0xdb, 0x3b, 0x02, 0xf9, 0xf8, - 0x5b, 0x86, 0x7c, 0xfc, 0x42, 0x2f, 0x9e, 0xf8, 0xb9, 0xb2, 0x72, 0x9c, 0x90, 0x95, 0x3f, 0xdb, - 0x13, 0xb5, 0xce, 0x72, 0xf3, 0xff, 0xb0, 0x00, 0xc7, 0x33, 0x55, 0x9e, 0x47, 0x30, 0x36, 0x37, - 0x8c, 0xb1, 0x79, 0xa1, 0xe7, 0x28, 0x05, 0xb9, 0x03, 0x74, 0x3b, 0x31, 0x40, 0x17, 0x7b, 0x27, - 0xd9, 0x79, 0x94, 0xbe, 0x5b, 0x84, 0xb3, 0x99, 0xf5, 0x62, 0xf1, 0xf2, 0x8a, 0x21, 0x5e, 0x7e, - 0x31, 0x21, 0x5e, 0xb6, 0x3b, 0xd7, 0x7e, 0x38, 0xf2, 0x66, 0xe1, 0xad, 0xcf, 0x62, 0x8e, 0x3c, - 0xa0, 0xac, 0xd9, 0xf0, 0xd6, 0x57, 0x84, 0xb0, 0x49, 0xf7, 0x87, 0x49, 0xc6, 0xfc, 0x27, 0x16, - 0x9c, 0xca, 0x9c, 0x9b, 0x23, 0x90, 0xf4, 0xad, 0x99, 0x92, 0xbe, 0x67, 0x7a, 0x5e, 0xad, 0x39, - 0xa2, 0xbf, 0xaf, 0x0c, 0xe4, 0x7c, 0x0b, 0x13, 0x40, 0xdc, 0x80, 0x11, 0xa7, 0x56, 0x23, 0x61, - 0xb8, 0xea, 0xd7, 0x55, 0x2e, 0x82, 0x17, 0xd8, 0xf3, 0x30, 0x2e, 0x3e, 0xd8, 0x2b, 0xcd, 0x26, - 0x49, 0xc4, 0x60, 0xac, 0x53, 0x40, 0x9f, 0x85, 0xa1, 0x50, 0xa6, 0x91, 0xec, 0x7b, 0xf0, 0x34, - 0x92, 0x8c, 0xc9, 0x55, 0x02, 0x16, 0x45, 0x12, 0xfd, 0x0b, 0x3d, 0xfa, 0x53, 0x07, 0xd1, 0x22, - 0xef, 0xe4, 0x03, 0xc4, 0x80, 0x7a, 0x11, 0x60, 0x47, 0xbd, 0x64, 0x92, 0xc2, 0x13, 0xed, 0x8d, - 0xa3, 0x61, 0xa1, 0x4f, 0xc2, 0x64, 0xc8, 0x03, 0x9f, 0xc6, 0x46, 0x2a, 0x7c, 0x2d, 0xb2, 0xd8, - 0x71, 0xd5, 0x04, 0x0c, 0xa7, 0xb0, 0xd1, 0x8a, 0x6c, 0x95, 0x99, 0x23, 0xf1, 0xe5, 0x79, 0x3e, - 0x6e, 0x51, 0x98, 0x24, 0x1d, 0x4b, 0x4e, 0x02, 0x1b, 0x7e, 0xad, 0x26, 0xfa, 0x2c, 0x00, 0x5d, - 0x44, 0x42, 0x88, 0x32, 0x98, 0x7f, 0x84, 0xd2, 0xb3, 0xa5, 0x9e, 0xe9, 0xc9, 0xc0, 0xdc, 0xec, - 0x97, 0x14, 0x11, 0xac, 0x11, 0x44, 0x0e, 0x8c, 0xc5, 0xff, 0xe2, 0x04, 0xe9, 0x17, 0x72, 0x5b, - 0x48, 0x12, 0x67, 0x0a, 0x86, 0x25, 0x9d, 0x04, 0x36, 0x29, 0xa2, 0xcf, 0xc0, 0xa9, 0x9d, 0x5c, - 0xcb, 0x1f, 0xce, 0x09, 0xb2, 0x8c, 0xe7, 0xf9, 0xf6, 0x3e, 0xf9, 0xf5, 0xed, 0xff, 0x1e, 0xe0, - 0xb1, 0x0e, 0x27, 0x3d, 0x9a, 0x37, 0xb5, 0xf6, 0xcf, 0x25, 0x25, 0x1b, 0xb3, 0x99, 0x95, 0x0d, - 0x51, 0x47, 0x62, 0x43, 0x15, 0xde, 0xf7, 0x86, 0xfa, 0x69, 0x4b, 0x93, 0x39, 0x71, 0x9b, 0xee, - 0x4f, 0x1c, 0xf2, 0x06, 0x7b, 0x88, 0x42, 0xa8, 0x8d, 0x0c, 0x49, 0xce, 0x8b, 0x3d, 0x77, 0xa7, - 0x77, 0xd1, 0xce, 0xb7, 0xb2, 0xa3, 0xad, 0x73, 0x21, 0xcf, 0x95, 0xc3, 0x7e, 0xff, 0x51, 0x45, - 0x5e, 0xff, 0x8e, 0x05, 0xa7, 0x52, 0xc5, 0xbc, 0x0f, 0x24, 0x14, 0xd1, 0xee, 0xd6, 0xde, 0x77, - 0xe7, 0x25, 0x41, 0xfe, 0x0d, 0x57, 0xc5, 0x37, 0x9c, 0xca, 0xc5, 0x4b, 0x76, 0xfd, 0xab, 0x7f, - 0x55, 0x9a, 0x66, 0x0d, 0x98, 0x88, 0x38, 0xbf, 0xeb, 0xa8, 0x05, 0xe7, 0x6a, 0xed, 0x20, 0x88, - 0x17, 0x6b, 0xc6, 0xe6, 0xe4, 0x6f, 0xbd, 0x27, 0xf7, 0xf7, 0x4a, 0xe7, 0x16, 0xbb, 0xe0, 0xe2, - 0xae, 0xd4, 0x90, 0x07, 0xa8, 0x99, 0xb2, 0xaf, 0x63, 0x07, 0x40, 0x8e, 0x1c, 0x26, 0x6d, 0x8d, - 0xc7, 0x2d, 0x65, 0x33, 0xac, 0xf4, 0x32, 0x28, 0x1f, 0xad, 0xf4, 0xe4, 0xfb, 0x13, 0x97, 0x7e, - 0xf6, 0x3a, 0x9c, 0xed, 0xbc, 0x98, 0x0e, 0x15, 0xca, 0xe1, 0xcf, 0x2d, 0x38, 0xd3, 0x31, 0x5e, - 0xd8, 0x0f, 0xe0, 0x63, 0xc1, 0xfe, 0x92, 0x05, 0x8f, 0x67, 0xd6, 0x48, 0x3a, 0xe1, 0xd5, 0x68, - 0xa1, 0x66, 0x8e, 0x1a, 0x47, 0xce, 0x91, 0x00, 0x1c, 0xe3, 0x18, 0x16, 0x9b, 0x85, 0xae, 0x16, - 0x9b, 0x7f, 0x68, 0x41, 0xea, 0xaa, 0x3f, 0x02, 0xce, 0xb3, 0x6c, 0x72, 0x9e, 0x4f, 0xf6, 0x32, - 0x9a, 0x39, 0x4c, 0xe7, 0xdf, 0x4f, 0xc0, 0x89, 0x1c, 0x4f, 0xec, 0x1d, 0x98, 0xda, 0xac, 0x11, - 0x33, 0xf4, 0x46, 0xa7, 0x90, 0x74, 0x1d, 0xe3, 0x74, 0x2c, 0x1c, 0xdf, 0xdf, 0x2b, 0x4d, 0xa5, - 0x50, 0x70, 0xba, 0x09, 0xf4, 0x25, 0x0b, 0x8e, 0x39, 0x77, 0xc3, 0x65, 0xfa, 0x82, 0x70, 0x6b, - 0x0b, 0x0d, 0xbf, 0xb6, 0x4d, 0x19, 0x33, 0xb9, 0xad, 0x5e, 0xce, 0x14, 0x46, 0xdf, 0xae, 0xa6, - 0xf0, 0x8d, 0xe6, 0x67, 0xf6, 0xf7, 0x4a, 0xc7, 0xb2, 0xb0, 0x70, 0x66, 0x5b, 0x08, 0x8b, 0x74, - 0x5b, 0x4e, 0xb4, 0xd5, 0x29, 0x38, 0x4c, 0x96, 0xcb, 0x3c, 0x67, 0x89, 0x25, 0x04, 0x2b, 0x3a, - 0xe8, 0xf3, 0x30, 0xbc, 0x29, 0xe3, 0x40, 0x64, 0xb0, 0xdc, 0xf1, 0x40, 0x76, 0x8e, 0x8e, 0xc1, - 0x4d, 0x60, 0x14, 0x12, 0x8e, 0x89, 0xa2, 0x37, 0xa1, 0xe8, 0x6d, 0x84, 0x22, 0x44, 0x5d, 0xb6, - 0x25, 0xae, 0x69, 0xeb, 0xcc, 0x43, 0x30, 0xad, 0xad, 0x54, 0x31, 0xad, 0x88, 0xae, 0x42, 0x31, - 0xb8, 0x53, 0x17, 0x9a, 0x94, 0xcc, 0x4d, 0x8a, 0x17, 0x96, 0x72, 0x7a, 0xc5, 0x28, 0xe1, 0x85, - 0x25, 0x4c, 0x49, 0xa0, 0x0a, 0xf4, 0x33, 0xf7, 0x65, 0xc1, 0xda, 0x66, 0x3e, 0xe5, 0x3b, 0x84, - 0x01, 0xe0, 0x1e, 0x89, 0x0c, 0x01, 0x73, 0x42, 0x68, 0x1d, 0x06, 0x6a, 0xae, 0x57, 0x27, 0x81, - 0xe0, 0x65, 0x3f, 0x9a, 0xa9, 0x33, 0x61, 0x18, 0x39, 0x34, 0xb9, 0x0a, 0x81, 0x61, 0x60, 0x41, - 0x8b, 0x51, 0x25, 0xad, 0xad, 0x0d, 0x79, 0x63, 0x65, 0x53, 0x25, 0xad, 0xad, 0x95, 0x6a, 0x47, - 0xaa, 0x0c, 0x03, 0x0b, 0x5a, 0xe8, 0x35, 0x28, 0x6c, 0xd4, 0x84, 0x6b, 0x72, 0xa6, 0xf2, 0xc4, - 0x8c, 0xa2, 0xb5, 0x30, 0xb0, 0xbf, 0x57, 0x2a, 0xac, 0x2c, 0xe2, 0xc2, 0x46, 0x0d, 0xad, 0xc1, - 0xe0, 0x06, 0x8f, 0xbb, 0x23, 0xf4, 0x23, 0x4f, 0x67, 0x87, 0x04, 0x4a, 0x85, 0xe6, 0xe1, 0xde, - 0xa5, 0x02, 0x80, 0x25, 0x11, 0x96, 0xfd, 0x49, 0xc5, 0x0f, 0x12, 0xe1, 0x4b, 0xe7, 0x0e, 0x17, - 0xf3, 0x89, 0x3f, 0x35, 0xe2, 0x28, 0x44, 0x58, 0xa3, 0x48, 0x57, 0xb5, 0x73, 0xbf, 0x1d, 0xb0, - 0xdc, 0x16, 0x42, 0x35, 0x92, 0xb9, 0xaa, 0xe7, 0x25, 0x52, 0xa7, 0x55, 0xad, 0x90, 0x70, 0x4c, - 0x14, 0x6d, 0xc3, 0xd8, 0x4e, 0xd8, 0xda, 0x22, 0x72, 0x4b, 0xb3, 0xb0, 0x77, 0x39, 0xdc, 0xec, - 0x2d, 0x81, 0xe8, 0x06, 0x51, 0xdb, 0x69, 0xa4, 0x4e, 0x21, 0xf6, 0xac, 0xb9, 0xa5, 0x13, 0xc3, - 0x26, 0x6d, 0x3a, 0xfc, 0xef, 0xb5, 0xfd, 0x3b, 0xbb, 0x11, 0x11, 0x51, 0x47, 0x33, 0x87, 0xff, - 0x6d, 0x8e, 0x92, 0x1e, 0x7e, 0x01, 0xc0, 0x92, 0x08, 0xba, 0x25, 0x86, 0x87, 0x9d, 0x9e, 0x93, - 0xf9, 0x21, 0xcd, 0xe7, 0x25, 0x52, 0xce, 0xa0, 0xb0, 0xd3, 0x32, 0x26, 0xc5, 0x4e, 0xc9, 0xd6, - 0x96, 0x1f, 0xf9, 0x5e, 0xe2, 0x84, 0x9e, 0xca, 0x3f, 0x25, 0x2b, 0x19, 0xf8, 0xe9, 0x53, 0x32, - 0x0b, 0x0b, 0x67, 0xb6, 0x85, 0xea, 0x30, 0xde, 0xf2, 0x83, 0xe8, 0xae, 0x1f, 0xc8, 0xf5, 0x85, - 0x3a, 0x08, 0x4a, 0x0d, 0x4c, 0xd1, 0x22, 0x33, 0xcc, 0x31, 0x21, 0x38, 0x41, 0x13, 0x7d, 0x0a, - 0x06, 0xc3, 0x9a, 0xd3, 0x20, 0xe5, 0x1b, 0x33, 0xd3, 0xf9, 0xd7, 0x4f, 0x95, 0xa3, 0xe4, 0xac, - 0x2e, 0x1e, 0x36, 0x89, 0xa3, 0x60, 0x49, 0x0e, 0xad, 0x40, 0x3f, 0xcb, 0xaa, 0xcc, 0x42, 0xe4, - 0xe6, 0x44, 0x66, 0x4f, 0xb9, 0xd5, 0xf0, 0xb3, 0x89, 0x15, 0x63, 0x5e, 0x9d, 0xee, 0x01, 0x21, - 0x29, 0xf0, 0xc3, 0x99, 0xe3, 0xf9, 0x7b, 0x40, 0x08, 0x18, 0x6e, 0x54, 0x3b, 0xed, 0x01, 0x85, - 0x84, 0x63, 0xa2, 0xf4, 0x64, 0xa6, 0xa7, 0xe9, 0x89, 0x0e, 0x26, 0x93, 0xb9, 0x67, 0x29, 0x3b, - 0x99, 0xe9, 0x49, 0x4a, 0x49, 0xd8, 0xbf, 0x3f, 0x94, 0xe6, 0x59, 0x98, 0x84, 0xe9, 0xdf, 0xb4, - 0x52, 0x36, 0x13, 0x1f, 0xeb, 0x55, 0xe0, 0xfd, 0x10, 0x1f, 0xae, 0x5f, 0xb2, 0xe0, 0x44, 0x2b, - 0xf3, 0x43, 0x04, 0x03, 0xd0, 0x9b, 0xdc, 0x9c, 0x7f, 0xba, 0x0a, 0xa7, 0x9c, 0x0d, 0xc7, 0x39, - 0x2d, 0x25, 0x85, 0x03, 0xc5, 0xf7, 0x2d, 0x1c, 0x58, 0x85, 0xa1, 0x1a, 0x7f, 0xc9, 0xc9, 0x34, - 0x00, 0x3d, 0x05, 0x03, 0x65, 0xac, 0x84, 0x78, 0x02, 0x6e, 0x60, 0x45, 0x02, 0xfd, 0x8c, 0x05, - 0x67, 0x92, 0x5d, 0xc7, 0x84, 0x81, 0x85, 0xc1, 0x24, 0x17, 0x6b, 0xad, 0x88, 0xef, 0x4f, 0xf1, - 0xff, 0x06, 0xf2, 0x41, 0x37, 0x04, 0xdc, 0xb9, 0x31, 0xb4, 0x94, 0x21, 0x57, 0x1b, 0x30, 0x35, - 0x8a, 0x3d, 0xc8, 0xd6, 0x5e, 0x86, 0xd1, 0xa6, 0xdf, 0xf6, 0x22, 0x61, 0xf7, 0x28, 0x8c, 0xa7, - 0x98, 0xd1, 0xd0, 0xaa, 0x56, 0x8e, 0x0d, 0xac, 0x84, 0x44, 0x6e, 0xe8, 0x81, 0x25, 0x72, 0xef, - 0xc2, 0xa8, 0xa7, 0xb9, 0x04, 0x74, 0x7a, 0xc1, 0x0a, 0xe9, 0xa2, 0x86, 0xcd, 0x7b, 0xa9, 0x97, - 0x60, 0x83, 0x5a, 0x67, 0x69, 0x19, 0xbc, 0x3f, 0x69, 0xd9, 0x91, 0x3e, 0x89, 0xed, 0x5f, 0x2f, - 0x64, 0xbc, 0x18, 0xb8, 0x54, 0xee, 0x0d, 0x53, 0x2a, 0x77, 0x3e, 0x29, 0x95, 0x4b, 0xa9, 0xaa, - 0x0c, 0x81, 0x5c, 0xef, 0xe9, 0x1c, 0x7b, 0x0e, 0xf0, 0xfc, 0x63, 0x16, 0x9c, 0x64, 0xba, 0x0f, - 0xda, 0xc0, 0xfb, 0xd6, 0x77, 0x30, 0x93, 0xd4, 0xeb, 0xd9, 0xe4, 0x70, 0x5e, 0x3b, 0x76, 0x03, - 0xce, 0x75, 0xbb, 0x77, 0x99, 0x85, 0x6f, 0x5d, 0x19, 0x47, 0xc4, 0x16, 0xbe, 0xf5, 0xf2, 0x12, - 0x66, 0x90, 0x5e, 0xc3, 0x17, 0xda, 0xff, 0xa7, 0x05, 0xc5, 0x8a, 0x5f, 0x3f, 0x82, 0x17, 0xfd, - 0x27, 0x8c, 0x17, 0xfd, 0x63, 0xd9, 0x37, 0x7e, 0x3d, 0x57, 0xd9, 0xb7, 0x9c, 0x50, 0xf6, 0x9d, - 0xc9, 0x23, 0xd0, 0x59, 0xb5, 0xf7, 0x4b, 0x45, 0x18, 0xa9, 0xf8, 0x75, 0xb5, 0xcf, 0xfe, 0x9b, - 0x07, 0x71, 0xe4, 0xc9, 0xcd, 0x3e, 0xa5, 0x51, 0x66, 0x16, 0xbd, 0x32, 0xee, 0xc4, 0x0f, 0x98, - 0x3f, 0xcf, 0x6d, 0xe2, 0x6e, 0x6e, 0x45, 0xa4, 0x9e, 0xfc, 0x9c, 0xa3, 0xf3, 0xe7, 0xf9, 0x5e, - 0x11, 0x26, 0x12, 0xad, 0xa3, 0x06, 0x8c, 0x35, 0x74, 0x55, 0x92, 0x58, 0xa7, 0x0f, 0xa4, 0x85, - 0x12, 0xfe, 0x10, 0x5a, 0x11, 0x36, 0x89, 0xa3, 0x39, 0x00, 0x4f, 0xb7, 0x0a, 0x57, 0x81, 0x8a, - 0x35, 0x8b, 0x70, 0x0d, 0x03, 0xbd, 0x02, 0x23, 0x91, 0xdf, 0xf2, 0x1b, 0xfe, 0xe6, 0xee, 0x35, - 0x22, 0x23, 0x5b, 0x2a, 0xa3, 0xe1, 0xf5, 0x18, 0x84, 0x75, 0x3c, 0x74, 0x0f, 0xa6, 0x14, 0x91, - 0xea, 0x43, 0x50, 0xaf, 0x31, 0xb1, 0xc9, 0x5a, 0x92, 0x22, 0x4e, 0x37, 0x82, 0x5e, 0x83, 0x71, - 0x66, 0xbd, 0xcc, 0xea, 0x5f, 0x23, 0xbb, 0x32, 0xe2, 0x31, 0xe3, 0xb0, 0x57, 0x0d, 0x08, 0x4e, - 0x60, 0xa2, 0x45, 0x98, 0x6a, 0xba, 0x61, 0xa2, 0xfa, 0x00, 0xab, 0xce, 0x3a, 0xb0, 0x9a, 0x04, - 0xe2, 0x34, 0xbe, 0xfd, 0xab, 0x62, 0x8e, 0xbd, 0xc8, 0xfd, 0x70, 0x3b, 0x7e, 0xb0, 0xb7, 0xe3, - 0x77, 0x2d, 0x98, 0xa4, 0xad, 0x33, 0x93, 0x4c, 0xc9, 0x48, 0xa9, 0x9c, 0x18, 0x56, 0x87, 0x9c, - 0x18, 0xe7, 0xe9, 0xb1, 0x5d, 0xf7, 0xdb, 0x91, 0x90, 0x8e, 0x6a, 0xe7, 0x32, 0x2d, 0xc5, 0x02, - 0x2a, 0xf0, 0x48, 0x10, 0x08, 0xbf, 0x77, 0x1d, 0x8f, 0x04, 0x01, 0x16, 0x50, 0x99, 0x32, 0xa3, - 0x2f, 0x3b, 0x65, 0x06, 0x8f, 0x7c, 0x2e, 0xac, 0xe0, 0x04, 0x4b, 0xab, 0x45, 0x3e, 0x97, 0xe6, - 0x71, 0x31, 0x8e, 0xfd, 0xad, 0x22, 0x8c, 0x56, 0xfc, 0x7a, 0x6c, 0xd8, 0xf1, 0xb2, 0x61, 0xd8, - 0x71, 0x2e, 0x61, 0xd8, 0x31, 0xa9, 0xe3, 0x7e, 0x68, 0xc6, 0xf1, 0xfd, 0x32, 0xe3, 0xf8, 0x03, - 0x8b, 0xcd, 0xda, 0xd2, 0x5a, 0x95, 0x5b, 0xf8, 0xa2, 0x4b, 0x30, 0xc2, 0x4e, 0x38, 0x16, 0x68, - 0x41, 0x5a, 0x3b, 0xb0, 0x14, 0x96, 0x6b, 0x71, 0x31, 0xd6, 0x71, 0xd0, 0x05, 0x18, 0x0a, 0x89, - 0x13, 0xd4, 0xb6, 0xd4, 0xf1, 0x2e, 0x4c, 0x13, 0x78, 0x19, 0x56, 0x50, 0xf4, 0x76, 0x1c, 0x74, - 0xbb, 0x98, 0x6f, 0x2e, 0xac, 0xf7, 0x87, 0x6f, 0x91, 0xfc, 0x48, 0xdb, 0xf6, 0x6d, 0x40, 0x69, - 0xfc, 0x1e, 0xfc, 0xaf, 0x4a, 0x66, 0x58, 0xd8, 0xe1, 0x54, 0x48, 0xd8, 0x7f, 0xb2, 0x60, 0xbc, - 0xe2, 0xd7, 0xe9, 0xd6, 0xfd, 0x61, 0xda, 0xa7, 0x7a, 0xc6, 0x81, 0x81, 0x0e, 0x19, 0x07, 0x9e, - 0x80, 0xfe, 0x8a, 0x5f, 0xef, 0x12, 0xba, 0xf6, 0x3f, 0xb2, 0x60, 0xb0, 0xe2, 0xd7, 0x8f, 0x40, - 0xf1, 0xf2, 0x86, 0xa9, 0x78, 0x39, 0x99, 0xb3, 0x6e, 0x72, 0x74, 0x2d, 0xff, 0x41, 0x1f, 0x8c, - 0xd1, 0x7e, 0xfa, 0x9b, 0x72, 0x2a, 0x8d, 0x61, 0xb3, 0x7a, 0x18, 0x36, 0xfa, 0x0c, 0xf0, 0x1b, - 0x0d, 0xff, 0x6e, 0x72, 0x5a, 0x57, 0x58, 0x29, 0x16, 0x50, 0xf4, 0x3c, 0x0c, 0xb5, 0x02, 0xb2, - 0xe3, 0xfa, 0x82, 0xbf, 0xd6, 0xd4, 0x58, 0x15, 0x51, 0x8e, 0x15, 0x06, 0x7d, 0x78, 0x87, 0xae, - 0x47, 0x79, 0x89, 0x9a, 0xef, 0xd5, 0xb9, 0x6e, 0xa2, 0x28, 0xd2, 0x62, 0x69, 0xe5, 0xd8, 0xc0, - 0x42, 0xb7, 0x61, 0x98, 0xfd, 0x67, 0xc7, 0x4e, 0xff, 0xa1, 0x8f, 0x1d, 0x91, 0x28, 0x58, 0x10, - 0xc0, 0x31, 0x2d, 0xf4, 0x22, 0x40, 0x24, 0x53, 0xcb, 0x84, 0x22, 0x84, 0xa9, 0x7a, 0x8b, 0xa8, - 0xa4, 0x33, 0x21, 0xd6, 0xb0, 0xd0, 0x73, 0x30, 0x1c, 0x39, 0x6e, 0xe3, 0xba, 0xeb, 0x31, 0xfd, - 0x3d, 0xed, 0xbf, 0xc8, 0xd7, 0x2b, 0x0a, 0x71, 0x0c, 0xa7, 0xbc, 0x20, 0x8b, 0x09, 0xb5, 0xb0, - 0x1b, 0x89, 0xd4, 0x74, 0x45, 0xce, 0x0b, 0x5e, 0x57, 0xa5, 0x58, 0xc3, 0x40, 0x5b, 0x70, 0xda, - 0xf5, 0x58, 0x0a, 0x29, 0x52, 0xdd, 0x76, 0x5b, 0xeb, 0xd7, 0xab, 0xb7, 0x48, 0xe0, 0x6e, 0xec, - 0x2e, 0x38, 0xb5, 0x6d, 0xe2, 0xc9, 0x6c, 0xf4, 0x4f, 0x8a, 0x2e, 0x9e, 0x2e, 0x77, 0xc0, 0xc5, - 0x1d, 0x29, 0xd9, 0x2f, 0xb1, 0xf5, 0x7e, 0xa3, 0x8a, 0x9e, 0x35, 0x8e, 0x8e, 0x13, 0xfa, 0xd1, - 0x71, 0xb0, 0x57, 0x1a, 0xb8, 0x51, 0xd5, 0x62, 0xff, 0x5c, 0x86, 0xe3, 0x15, 0xbf, 0x5e, 0xf1, - 0x83, 0x68, 0xc5, 0x0f, 0xee, 0x3a, 0x41, 0x5d, 0x2e, 0xaf, 0x92, 0x8c, 0x7e, 0x44, 0xcf, 0xcf, - 0x7e, 0x7e, 0xba, 0x18, 0x91, 0x8d, 0x5e, 0x62, 0x1c, 0xdb, 0x21, 0x9d, 0x4d, 0x6b, 0x8c, 0x77, - 0x50, 0x49, 0xd8, 0xae, 0x38, 0x11, 0x41, 0x37, 0x60, 0xac, 0xa6, 0x5f, 0xa3, 0xa2, 0xfa, 0x33, - 0xf2, 0x22, 0x33, 0xee, 0xd8, 0xcc, 0x7b, 0xd7, 0xac, 0x6f, 0x7f, 0xc7, 0x12, 0xad, 0x70, 0x49, - 0x04, 0xb7, 0x69, 0xed, 0x7e, 0x9e, 0x2e, 0xc2, 0x54, 0xa0, 0x57, 0xd1, 0x6c, 0xc3, 0x8e, 0xf3, - 0xac, 0x36, 0x09, 0x20, 0x4e, 0xe3, 0xa3, 0xcf, 0xc0, 0x29, 0xa3, 0x50, 0xaa, 0xc9, 0xb5, 0xdc, - 0xd2, 0x4c, 0x56, 0x83, 0xf3, 0x90, 0x70, 0x7e, 0x7d, 0xfb, 0x47, 0xe1, 0x44, 0xf2, 0xbb, 0x84, - 0xf4, 0xe4, 0x01, 0xbf, 0xae, 0x70, 0xb8, 0xaf, 0xb3, 0x5f, 0x81, 0x29, 0xfa, 0xac, 0x56, 0x2c, - 0x22, 0x9b, 0xbf, 0xee, 0x01, 0xa6, 0xfe, 0x87, 0x41, 0x76, 0xc5, 0x25, 0x32, 0xab, 0xa1, 0xcf, - 0xc1, 0x78, 0x48, 0x58, 0x54, 0x35, 0x29, 0xb5, 0xeb, 0xe0, 0x29, 0x5e, 0x5d, 0xd6, 0x31, 0xf9, - 0xcb, 0xc4, 0x2c, 0xc3, 0x09, 0x6a, 0xa8, 0x09, 0xe3, 0x77, 0x5d, 0xaf, 0xee, 0xdf, 0x0d, 0x25, - 0xfd, 0xa1, 0x7c, 0x15, 0xc0, 0x6d, 0x8e, 0x99, 0xe8, 0xa3, 0xd1, 0xdc, 0x6d, 0x83, 0x18, 0x4e, - 0x10, 0xa7, 0xc7, 0x48, 0xd0, 0xf6, 0xe6, 0xc3, 0x9b, 0x21, 0x09, 0x44, 0xcc, 0x37, 0x76, 0x8c, - 0x60, 0x59, 0x88, 0x63, 0x38, 0x3d, 0x46, 0xd8, 0x1f, 0xe6, 0x6a, 0xce, 0xce, 0x29, 0x71, 0x8c, - 0x60, 0x55, 0x8a, 0x35, 0x0c, 0x7a, 0xcc, 0xb2, 0x7f, 0x6b, 0xbe, 0x87, 0x7d, 0x3f, 0x92, 0x07, - 0x33, 0x4b, 0x43, 0xa9, 0x95, 0x63, 0x03, 0x2b, 0x27, 0xc2, 0x5c, 0xdf, 0x61, 0x23, 0xcc, 0xa1, - 0xa8, 0x83, 0x77, 0x3d, 0x8f, 0x74, 0x7c, 0xb9, 0x93, 0x77, 0xfd, 0xc1, 0x03, 0x79, 0xde, 0xd3, - 0x7b, 0x7e, 0x43, 0x0c, 0x50, 0x3f, 0x0f, 0xa1, 0xc7, 0x94, 0x94, 0x55, 0x3e, 0x3a, 0x12, 0x86, - 0x96, 0x61, 0x30, 0xdc, 0x0d, 0x6b, 0x51, 0x23, 0xec, 0x94, 0x6a, 0xb4, 0xca, 0x50, 0xb4, 0x4c, - 0xd7, 0xbc, 0x0a, 0x96, 0x75, 0x51, 0x0d, 0xa6, 0x05, 0xc5, 0xc5, 0x2d, 0xc7, 0x53, 0x09, 0x10, - 0xb9, 0x35, 0xe2, 0xa5, 0xfd, 0xbd, 0xd2, 0xb4, 0x68, 0x59, 0x07, 0x1f, 0xec, 0x95, 0xe8, 0x96, - 0xcc, 0x80, 0xe0, 0x2c, 0x6a, 0x7c, 0xc9, 0xd7, 0x6a, 0x7e, 0xb3, 0x55, 0x09, 0xfc, 0x0d, 0xb7, - 0x41, 0x3a, 0x29, 0x7a, 0xab, 0x06, 0xa6, 0x58, 0xf2, 0x46, 0x19, 0x4e, 0x50, 0x43, 0x77, 0x60, - 0xc2, 0x69, 0xb5, 0xe6, 0x83, 0xa6, 0x1f, 0xc8, 0x06, 0x46, 0xf2, 0x35, 0x06, 0xf3, 0x26, 0x2a, - 0xcf, 0x7f, 0x98, 0x28, 0xc4, 0x49, 0x82, 0xf6, 0xbf, 0x64, 0xfc, 0x76, 0xd5, 0xdd, 0xf4, 0x98, - 0x4f, 0x1a, 0x6a, 0xc2, 0x58, 0x8b, 0x9d, 0xc8, 0x22, 0x6d, 0x98, 0xd8, 0xc5, 0x2f, 0xf7, 0x28, - 0x33, 0xbc, 0xcb, 0x12, 0x9f, 0x1a, 0xb6, 0xa3, 0x15, 0x9d, 0x1c, 0x36, 0xa9, 0xdb, 0xff, 0xe3, - 0x29, 0xc6, 0xb1, 0x55, 0xb9, 0x20, 0x70, 0x50, 0x78, 0x08, 0x8a, 0xa7, 0xff, 0x6c, 0xbe, 0xc8, - 0x3d, 0x9e, 0x7a, 0xe1, 0x65, 0x88, 0x65, 0x5d, 0xf4, 0x59, 0x18, 0xa7, 0x2f, 0x69, 0xc5, 0x35, - 0x85, 0x33, 0xc7, 0xf2, 0x43, 0x4f, 0x29, 0x2c, 0x3d, 0xa5, 0xa0, 0x5e, 0x19, 0x27, 0x88, 0xa1, - 0xb7, 0x99, 0x39, 0xa5, 0x24, 0x5d, 0xe8, 0x85, 0xb4, 0x6e, 0x39, 0x29, 0xc9, 0x6a, 0x44, 0x50, - 0x1b, 0xa6, 0xd3, 0x89, 0x93, 0xc3, 0x19, 0x3b, 0xff, 0x49, 0x92, 0xce, 0x7d, 0x1c, 0xe7, 0x7e, - 0x4b, 0xc3, 0x42, 0x9c, 0x45, 0x1f, 0x5d, 0x4f, 0xa6, 0xb5, 0x2d, 0x1a, 0xc2, 0xfa, 0x54, 0x6a, - 0xdb, 0xb1, 0x8e, 0x19, 0x6d, 0x37, 0xe1, 0x8c, 0x96, 0x19, 0xf4, 0x4a, 0xe0, 0x30, 0x73, 0x1e, - 0x97, 0x5d, 0x14, 0x1a, 0x2f, 0xf9, 0xf8, 0xfe, 0x5e, 0xe9, 0xcc, 0x7a, 0x27, 0x44, 0xdc, 0x99, - 0x0e, 0xba, 0x01, 0xc7, 0x79, 0xe0, 0x94, 0x25, 0xe2, 0xd4, 0x1b, 0xae, 0xa7, 0x98, 0x55, 0x7e, - 0xac, 0x9c, 0xda, 0xdf, 0x2b, 0x1d, 0x9f, 0xcf, 0x42, 0xc0, 0xd9, 0xf5, 0xd0, 0x1b, 0x30, 0x5c, - 0xf7, 0xe4, 0x01, 0x38, 0x60, 0x24, 0x5f, 0x1d, 0x5e, 0x5a, 0xab, 0xaa, 0xef, 0x8f, 0xff, 0xe0, - 0xb8, 0x02, 0xda, 0xe4, 0xda, 0x22, 0x25, 0xe2, 0x1b, 0x4c, 0xc5, 0xd3, 0x4c, 0x4a, 0xc1, 0x8d, - 0x48, 0x04, 0x5c, 0x4d, 0xaa, 0x3c, 0xdd, 0x8c, 0x20, 0x05, 0x06, 0x61, 0xf4, 0x16, 0x20, 0x91, - 0xe4, 0x67, 0xbe, 0xc6, 0x72, 0xd2, 0x69, 0x26, 0x9c, 0xea, 0xe5, 0x5e, 0x4d, 0x61, 0xe0, 0x8c, - 0x5a, 0xe8, 0x2a, 0x3d, 0xb9, 0xf4, 0x52, 0x71, 0x32, 0xaa, 0x14, 0xdf, 0x4b, 0xa4, 0x15, 0x10, - 0x66, 0x75, 0x68, 0x52, 0xc4, 0x89, 0x7a, 0xa8, 0x0e, 0xa7, 0x9d, 0x76, 0xe4, 0x33, 0x45, 0x9c, - 0x89, 0xba, 0xee, 0x6f, 0x13, 0x8f, 0xe9, 0xc0, 0x87, 0x58, 0x9c, 0xce, 0xd3, 0xf3, 0x1d, 0xf0, - 0x70, 0x47, 0x2a, 0xf4, 0x15, 0x43, 0xc7, 0x42, 0xd3, 0x91, 0x19, 0x4e, 0xd5, 0x5c, 0x71, 0x2c, - 0x31, 0xd0, 0x2b, 0x30, 0xb2, 0xe5, 0x87, 0xd1, 0x1a, 0x89, 0xee, 0xfa, 0xc1, 0xb6, 0xc8, 0x2a, - 0x10, 0x67, 0x72, 0x89, 0x41, 0x58, 0xc7, 0x43, 0xcf, 0xc0, 0x20, 0xb3, 0xd0, 0x2a, 0x2f, 0xb1, - 0x6b, 0x70, 0x28, 0x3e, 0x63, 0xae, 0xf2, 0x62, 0x2c, 0xe1, 0x12, 0xb5, 0x5c, 0x59, 0x64, 0x86, - 0x2e, 0x09, 0xd4, 0x72, 0x65, 0x11, 0x4b, 0x38, 0x5d, 0xae, 0xe1, 0x96, 0x13, 0x90, 0x4a, 0xe0, - 0xd7, 0x48, 0xa8, 0xe5, 0x0f, 0x7a, 0x8c, 0xe7, 0x4c, 0xa0, 0xcb, 0xb5, 0x9a, 0x85, 0x80, 0xb3, - 0xeb, 0x21, 0x92, 0xce, 0x8a, 0x3b, 0x9e, 0xaf, 0xa1, 0x4c, 0x73, 0x6a, 0x3d, 0x26, 0xc6, 0xf5, - 0x60, 0x52, 0xe5, 0xe3, 0xe5, 0x59, 0x12, 0xc2, 0x99, 0x09, 0xb6, 0xb6, 0x7b, 0x4f, 0xb1, 0xa0, - 0x74, 0xbe, 0xe5, 0x04, 0x25, 0x9c, 0xa2, 0x6d, 0x04, 0x82, 0x9d, 0xec, 0x1a, 0x08, 0xf6, 0x22, - 0x0c, 0x87, 0xed, 0x3b, 0x75, 0xbf, 0xe9, 0xb8, 0x1e, 0x33, 0x74, 0xd1, 0xde, 0xcb, 0x55, 0x09, - 0xc0, 0x31, 0x0e, 0x5a, 0x81, 0x21, 0x47, 0x2a, 0x74, 0x51, 0x7e, 0x8c, 0x3b, 0xa5, 0xc6, 0xe5, - 0x61, 0x9f, 0xa4, 0x0a, 0x57, 0xd5, 0x45, 0xaf, 0xc3, 0x98, 0x88, 0xa3, 0x21, 0x52, 0xd8, 0x4f, - 0x9b, 0x5e, 0xc3, 0x55, 0x1d, 0x88, 0x4d, 0x5c, 0x74, 0x13, 0x46, 0x22, 0xbf, 0xc1, 0x5c, 0x5f, - 0x29, 0x03, 0x7b, 0x22, 0x3f, 0x14, 0xed, 0xba, 0x42, 0xd3, 0x55, 0x0d, 0xaa, 0x2a, 0xd6, 0xe9, - 0xa0, 0x75, 0xbe, 0xde, 0x59, 0xb6, 0x20, 0x12, 0x8a, 0x1c, 0xe8, 0x67, 0xf2, 0xac, 0x14, 0x19, - 0x9a, 0xb9, 0x1d, 0x44, 0x4d, 0xac, 0x93, 0x41, 0x57, 0x60, 0xaa, 0x15, 0xb8, 0x3e, 0x5b, 0x13, - 0x4a, 0x41, 0x3d, 0x63, 0xe6, 0x06, 0xad, 0x24, 0x11, 0x70, 0xba, 0x0e, 0x0b, 0x83, 0x22, 0x0a, - 0x67, 0x4e, 0xf1, 0xfc, 0x66, 0x5c, 0xfc, 0xc0, 0xcb, 0xb0, 0x82, 0xa2, 0x55, 0x76, 0x12, 0x73, - 0xc9, 0xd9, 0xcc, 0x6c, 0xbe, 0x73, 0xbd, 0x2e, 0x61, 0xe3, 0x6c, 0xb9, 0xfa, 0x8b, 0x63, 0x0a, - 0xa8, 0xae, 0xa5, 0x15, 0xa7, 0x8f, 0x9b, 0x70, 0xe6, 0x74, 0x07, 0x33, 0xd9, 0xc4, 0x4b, 0x36, - 0x66, 0x08, 0x8c, 0xe2, 0x10, 0x27, 0x68, 0xa2, 0x4f, 0xc2, 0xa4, 0x88, 0x11, 0x10, 0x0f, 0xd3, - 0x99, 0xd8, 0x95, 0x08, 0x27, 0x60, 0x38, 0x85, 0xcd, 0xf3, 0x8b, 0x39, 0x77, 0x1a, 0x44, 0x1c, - 0x7d, 0xd7, 0x5d, 0x6f, 0x3b, 0x9c, 0x39, 0xcb, 0xce, 0x07, 0x91, 0x5f, 0x2c, 0x09, 0xc5, 0x19, - 0x35, 0xd0, 0x3a, 0x4c, 0xb6, 0x02, 0x42, 0x9a, 0xec, 0x09, 0x23, 0xee, 0xb3, 0x12, 0x8f, 0x02, - 0x44, 0x7b, 0x52, 0x49, 0xc0, 0x0e, 0x32, 0xca, 0x70, 0x8a, 0x02, 0xba, 0x0b, 0x43, 0xfe, 0x0e, - 0x09, 0xb6, 0x88, 0x53, 0x9f, 0x39, 0xd7, 0xc1, 0xc1, 0x4d, 0x5c, 0x6e, 0x37, 0x04, 0x6e, 0xc2, - 0xfe, 0x47, 0x16, 0x77, 0xb7, 0xff, 0x91, 0x8d, 0xa1, 0x7f, 0xcb, 0x82, 0x53, 0x52, 0xa3, 0x56, - 0x6d, 0xd1, 0x51, 0x5f, 0xf4, 0xbd, 0x30, 0x0a, 0x78, 0xdc, 0x9a, 0xc7, 0xf3, 0x63, 0xb9, 0xac, - 0xe7, 0x54, 0x52, 0xc2, 0xfb, 0x53, 0x79, 0x18, 0x21, 0xce, 0x6f, 0x91, 0x3e, 0xba, 0x43, 0x12, - 0xc9, 0xc3, 0x68, 0x3e, 0x5c, 0x79, 0x7b, 0x69, 0x6d, 0xe6, 0x09, 0x1e, 0x74, 0x87, 0x6e, 0x86, - 0x6a, 0x12, 0x88, 0xd3, 0xf8, 0xe8, 0x12, 0x14, 0xfc, 0x70, 0xe6, 0xc9, 0x0e, 0x99, 0xe8, 0xfd, - 0xfa, 0x8d, 0x2a, 0xb7, 0x03, 0xbd, 0x51, 0xc5, 0x05, 0x3f, 0x94, 0x39, 0xbe, 0xe8, 0x4b, 0x33, - 0x9c, 0x79, 0x8a, 0x8b, 0x7a, 0x65, 0x8e, 0x2f, 0x56, 0x88, 0x63, 0x38, 0xda, 0x82, 0x89, 0xd0, - 0x78, 0xd1, 0x87, 0x33, 0xe7, 0xd9, 0x48, 0x3d, 0x95, 0x37, 0x69, 0x06, 0xb6, 0x96, 0x7c, 0xc7, - 0xa4, 0x82, 0x93, 0x64, 0xf9, 0xee, 0xd2, 0x64, 0x0a, 0xe1, 0xcc, 0xd3, 0x5d, 0x76, 0x97, 0x86, - 0xac, 0xef, 0x2e, 0x9d, 0x06, 0x4e, 0xd0, 0x9c, 0xfd, 0x11, 0x98, 0x4a, 0xb1, 0x4b, 0x87, 0xf1, - 0x79, 0x98, 0xdd, 0x86, 0x31, 0x63, 0x49, 0x3e, 0x52, 0x93, 0x98, 0x3f, 0x19, 0x86, 0x61, 0x65, - 0xaa, 0x80, 0x2e, 0x9a, 0x56, 0x30, 0xa7, 0x92, 0x56, 0x30, 0x43, 0x15, 0xbf, 0x6e, 0x18, 0xbe, - 0xac, 0x67, 0xc4, 0x92, 0xcd, 0x3b, 0x00, 0x7b, 0x77, 0xcc, 0xd2, 0xd4, 0x2f, 0xc5, 0x9e, 0xcd, - 0x69, 0xfa, 0x3a, 0x6a, 0x74, 0xae, 0xc0, 0x94, 0xe7, 0x33, 0x1e, 0x9d, 0xd4, 0x25, 0x03, 0xc6, - 0xf8, 0xac, 0x61, 0x3d, 0xd6, 0x59, 0x02, 0x01, 0xa7, 0xeb, 0xd0, 0x06, 0x39, 0xa3, 0x94, 0x54, - 0x21, 0x71, 0x3e, 0x0a, 0x0b, 0x28, 0x7d, 0x1b, 0xf2, 0x5f, 0xe1, 0xcc, 0x64, 0xfe, 0xdb, 0x90, - 0x57, 0x4a, 0x32, 0x63, 0xa1, 0x64, 0xc6, 0x98, 0xc6, 0xa4, 0xe5, 0xd7, 0xcb, 0x15, 0xc1, 0xe6, - 0x6b, 0x51, 0xde, 0xeb, 0xe5, 0x0a, 0xe6, 0x30, 0x34, 0x0f, 0x03, 0xec, 0x87, 0x8c, 0x21, 0x93, - 0xb7, 0x4d, 0xcb, 0x15, 0x2d, 0xc7, 0x28, 0xab, 0x80, 0x45, 0x45, 0x26, 0x11, 0xa7, 0x6f, 0x23, - 0x26, 0x11, 0x1f, 0x7c, 0x40, 0x89, 0xb8, 0x24, 0x80, 0x63, 0x5a, 0xe8, 0x1e, 0x1c, 0x37, 0xde, - 0xa3, 0xca, 0x53, 0x0d, 0xf2, 0x95, 0xe5, 0x09, 0xe4, 0x85, 0x33, 0xa2, 0xd3, 0xc7, 0xcb, 0x59, - 0x94, 0x70, 0x76, 0x03, 0xa8, 0x01, 0x53, 0xb5, 0x54, 0xab, 0x43, 0xbd, 0xb7, 0xaa, 0xd6, 0x45, - 0xba, 0xc5, 0x34, 0x61, 0xf4, 0x3a, 0x0c, 0xbd, 0xe7, 0x73, 0xc3, 0x36, 0xf1, 0x34, 0x91, 0x51, - 0x52, 0x86, 0xde, 0xbe, 0x51, 0x65, 0xe5, 0x07, 0x7b, 0xa5, 0x91, 0x8a, 0x5f, 0x97, 0x7f, 0xb1, - 0xaa, 0x80, 0x7e, 0xd2, 0x82, 0xd9, 0xf4, 0x83, 0x57, 0x75, 0x7a, 0xac, 0xf7, 0x4e, 0xdb, 0xa2, - 0xd1, 0xd9, 0xe5, 0x5c, 0x72, 0xb8, 0x43, 0x53, 0xe8, 0xe3, 0x74, 0x3f, 0x85, 0xee, 0x7d, 0x22, - 0x12, 0xb4, 0x3f, 0x1e, 0xef, 0x27, 0x5a, 0x7a, 0xb0, 0x57, 0x9a, 0xe0, 0x27, 0xa3, 0x7b, 0x5f, - 0xc5, 0xa3, 0xe7, 0x15, 0xd0, 0x8f, 0xc2, 0xf1, 0x20, 0x2d, 0x1b, 0x26, 0x92, 0x09, 0x7f, 0xb6, - 0x97, 0x53, 0x36, 0x39, 0xe1, 0x38, 0x8b, 0x20, 0xce, 0x6e, 0xc7, 0xfe, 0x5d, 0x8b, 0xe9, 0x04, - 0x44, 0xb7, 0x48, 0xd8, 0x6e, 0x44, 0x47, 0x60, 0x4c, 0xb6, 0x6c, 0xe8, 0xdb, 0x1f, 0xd8, 0x1a, - 0xec, 0xbf, 0xb6, 0x98, 0x35, 0xd8, 0x11, 0xfa, 0xb5, 0xbd, 0x0d, 0x43, 0x91, 0x68, 0x4d, 0x74, - 0x3d, 0xcf, 0x72, 0x45, 0x76, 0x8a, 0x59, 0xc4, 0xa9, 0x47, 0x8e, 0x2c, 0xc5, 0x8a, 0x8c, 0xfd, - 0x5f, 0xf0, 0x19, 0x90, 0x90, 0x23, 0x50, 0x6b, 0x2e, 0x99, 0x6a, 0xcd, 0x52, 0x97, 0x2f, 0xc8, - 0x51, 0x6f, 0xfe, 0xe7, 0x66, 0xbf, 0x99, 0x70, 0xef, 0x83, 0x6e, 0x86, 0x68, 0x7f, 0xc5, 0x02, - 0x88, 0x13, 0x80, 0xf4, 0x90, 0x90, 0xf9, 0x32, 0x7d, 0xd6, 0xf8, 0x91, 0x5f, 0xf3, 0x1b, 0x42, - 0xf5, 0x72, 0x3a, 0xd6, 0xac, 0xf2, 0xf2, 0x03, 0xed, 0x37, 0x56, 0xd8, 0xa8, 0x24, 0x23, 0xf2, - 0x16, 0x63, 0x5d, 0xbf, 0x11, 0x8d, 0xf7, 0xeb, 0x16, 0x1c, 0xcb, 0x72, 0x92, 0xa0, 0x8f, 0x64, - 0x2e, 0xe6, 0x54, 0x26, 0xa2, 0x6a, 0x36, 0x6f, 0x89, 0x72, 0xac, 0x30, 0x7a, 0xce, 0x74, 0x7d, - 0xb8, 0xe4, 0x14, 0x37, 0x60, 0xac, 0x12, 0x10, 0x8d, 0xbf, 0x78, 0x33, 0xce, 0x9b, 0x33, 0xbc, - 0xf0, 0xfc, 0xa1, 0x23, 0x0f, 0xd9, 0xdf, 0x28, 0xc0, 0x31, 0x6e, 0xe8, 0x34, 0xbf, 0xe3, 0xbb, - 0xf5, 0x8a, 0x5f, 0x17, 0xae, 0xad, 0xef, 0xc0, 0x68, 0x4b, 0x93, 0x4d, 0x77, 0x0a, 0xb4, 0xae, - 0xcb, 0xb0, 0x63, 0x69, 0x9a, 0x5e, 0x8a, 0x0d, 0x5a, 0xa8, 0x0e, 0xa3, 0x64, 0xc7, 0xad, 0x29, - 0x6b, 0x99, 0xc2, 0xa1, 0x2f, 0x69, 0xd5, 0xca, 0xb2, 0x46, 0x07, 0x1b, 0x54, 0x7b, 0x36, 0x4f, - 0xd6, 0x58, 0xb4, 0xbe, 0x2e, 0x16, 0x32, 0x3f, 0x67, 0xc1, 0xc9, 0x9c, 0xb0, 0xec, 0xb4, 0xb9, - 0xbb, 0xcc, 0xa4, 0x4c, 0x2c, 0x5b, 0xd5, 0x1c, 0x37, 0x34, 0xc3, 0x02, 0x8a, 0x3e, 0x05, 0xd0, - 0x8a, 0x53, 0x52, 0x76, 0x89, 0x5f, 0x6d, 0x44, 0xb2, 0xd5, 0x82, 0x92, 0xaa, 0xcc, 0x95, 0x1a, - 0x2d, 0xfb, 0xeb, 0x7d, 0xd0, 0xcf, 0x0c, 0x93, 0x50, 0x05, 0x06, 0xb7, 0x78, 0xcc, 0xbc, 0x8e, - 0xf3, 0x46, 0x71, 0x65, 0x10, 0xbe, 0x78, 0xde, 0xb4, 0x52, 0x2c, 0xc9, 0xa0, 0x55, 0x98, 0xe6, - 0xe9, 0x36, 0x1b, 0x4b, 0xa4, 0xe1, 0xec, 0x4a, 0xb1, 0x6f, 0x81, 0x7d, 0xaa, 0x12, 0x7f, 0x97, - 0xd3, 0x28, 0x38, 0xab, 0x1e, 0x7a, 0x13, 0xc6, 0xe9, 0x33, 0xdc, 0x6f, 0x47, 0x92, 0x12, 0xcf, - 0x6f, 0xa9, 0x5e, 0x26, 0xeb, 0x06, 0x14, 0x27, 0xb0, 0xd1, 0xeb, 0x30, 0xd6, 0x4a, 0x09, 0xb8, - 0xfb, 0x63, 0x49, 0x90, 0x29, 0xd4, 0x36, 0x71, 0x99, 0x9f, 0x44, 0x9b, 0x79, 0x85, 0xac, 0x6f, - 0x05, 0x24, 0xdc, 0xf2, 0x1b, 0x75, 0xc6, 0x01, 0xf7, 0x6b, 0x7e, 0x12, 0x09, 0x38, 0x4e, 0xd5, - 0xa0, 0x54, 0x36, 0x1c, 0xb7, 0xd1, 0x0e, 0x48, 0x4c, 0x65, 0xc0, 0xa4, 0xb2, 0x92, 0x80, 0xe3, - 0x54, 0x8d, 0xee, 0x92, 0xfb, 0xc1, 0x87, 0x23, 0xb9, 0xb7, 0x7f, 0xb9, 0x00, 0xc6, 0xd4, 0xfe, - 0x10, 0xe7, 0xdd, 0x7c, 0x03, 0xfa, 0x36, 0x83, 0x56, 0x4d, 0x18, 0xe1, 0x65, 0x7e, 0x59, 0x9c, - 0xfd, 0x9f, 0x7f, 0x19, 0xfd, 0x8f, 0x59, 0x2d, 0xba, 0xc7, 0x8f, 0x57, 0x02, 0x9f, 0x5e, 0x72, - 0x32, 0xac, 0xa6, 0x72, 0x47, 0x1a, 0x94, 0x81, 0x35, 0x3a, 0x04, 0xa0, 0x16, 0x3e, 0x15, 0x9c, - 0x82, 0x61, 0xaf, 0x56, 0x15, 0xe1, 0x73, 0x24, 0x15, 0x74, 0x09, 0x46, 0x44, 0x2a, 0x44, 0xe6, - 0x35, 0xc3, 0x37, 0x13, 0xb3, 0xaf, 0x5b, 0x8a, 0x8b, 0xb1, 0x8e, 0x63, 0xff, 0x54, 0x01, 0xa6, - 0x33, 0xdc, 0x1e, 0xf9, 0x35, 0xb2, 0xe9, 0x86, 0x51, 0xb0, 0x9b, 0xbc, 0x9c, 0xb0, 0x28, 0xc7, - 0x0a, 0x83, 0x9e, 0x55, 0xfc, 0xa2, 0x4a, 0x5e, 0x4e, 0xc2, 0xad, 0x48, 0x40, 0x0f, 0x99, 0xaa, - 0xff, 0x1c, 0xf4, 0xb5, 0x43, 0x22, 0x63, 0xdd, 0xab, 0x6b, 0x9b, 0x29, 0xec, 0x19, 0x84, 0x3e, - 0x01, 0x37, 0x95, 0x16, 0x5a, 0x7b, 0x02, 0x72, 0x3d, 0x34, 0x87, 0xd1, 0xce, 0x45, 0xc4, 0x73, - 0xbc, 0x48, 0x3c, 0x14, 0xe3, 0x18, 0xc8, 0xac, 0x14, 0x0b, 0xa8, 0xfd, 0xb5, 0x22, 0x9c, 0xca, - 0x75, 0x84, 0xa6, 0x5d, 0x6f, 0xfa, 0x9e, 0x1b, 0xf9, 0xca, 0x70, 0x91, 0xc7, 0x3d, 0x26, 0xad, - 0xad, 0x55, 0x51, 0x8e, 0x15, 0x06, 0x3a, 0x0f, 0xfd, 0x4c, 0x28, 0x9e, 0x4c, 0x83, 0x86, 0x17, - 0x96, 0x78, 0x44, 0x49, 0x0e, 0xd6, 0x6e, 0xf5, 0x62, 0xc7, 0x5b, 0xfd, 0x09, 0xca, 0xc1, 0xf8, - 0x8d, 0xe4, 0x85, 0x42, 0xbb, 0xeb, 0xfb, 0x0d, 0xcc, 0x80, 0xe8, 0x29, 0x31, 0x5e, 0x09, 0x4b, - 0x3d, 0xec, 0xd4, 0xfd, 0x50, 0x1b, 0xb4, 0x67, 0x60, 0x70, 0x9b, 0xec, 0x06, 0xae, 0xb7, 0x99, - 0xb4, 0xe0, 0xbc, 0xc6, 0x8b, 0xb1, 0x84, 0x9b, 0x59, 0xbf, 0x07, 0x1f, 0x46, 0xd6, 0x6f, 0x7d, - 0x05, 0x0c, 0x75, 0x65, 0x4f, 0x7e, 0xba, 0x08, 0x13, 0x78, 0x61, 0xe9, 0xc3, 0x89, 0xb8, 0x99, - 0x9e, 0x88, 0x87, 0x91, 0x1c, 0xfb, 0x70, 0xb3, 0xf1, 0x5b, 0x16, 0x4c, 0xb0, 0x84, 0x8c, 0x22, - 0x8a, 0x89, 0xeb, 0x7b, 0x47, 0xf0, 0x14, 0x78, 0x02, 0xfa, 0x03, 0xda, 0xa8, 0x98, 0x41, 0xb5, - 0xc7, 0x59, 0x4f, 0x30, 0x87, 0xa1, 0xd3, 0xd0, 0xc7, 0xba, 0x40, 0x27, 0x6f, 0x94, 0x1f, 0xc1, - 0x4b, 0x4e, 0xe4, 0x60, 0x56, 0xca, 0xe2, 0x29, 0x62, 0xd2, 0x6a, 0xb8, 0xbc, 0xd3, 0xb1, 0xc9, - 0xc2, 0x07, 0x23, 0x44, 0x4a, 0x66, 0xd7, 0xde, 0x5f, 0x3c, 0xc5, 0x6c, 0x92, 0x9d, 0x9f, 0xd9, - 0x7f, 0x57, 0x80, 0xb3, 0x99, 0xf5, 0x7a, 0x8e, 0xa7, 0xd8, 0xb9, 0xf6, 0xa3, 0x4c, 0xdf, 0x56, - 0x3c, 0x42, 0xfb, 0xf8, 0xbe, 0x5e, 0xb9, 0xff, 0xfe, 0x1e, 0xc2, 0x1c, 0x66, 0x0e, 0xd9, 0x07, - 0x24, 0xcc, 0x61, 0x66, 0xdf, 0x72, 0xc4, 0x04, 0xff, 0x5c, 0xc8, 0xf9, 0x16, 0x26, 0x30, 0xb8, - 0x40, 0xcf, 0x19, 0x06, 0x0c, 0xe5, 0x23, 0x9c, 0x9f, 0x31, 0xbc, 0x0c, 0x2b, 0x28, 0x9a, 0x87, - 0x89, 0xa6, 0xeb, 0xd1, 0xc3, 0x67, 0xd7, 0x64, 0xc5, 0x95, 0x2e, 0x63, 0xd5, 0x04, 0xe3, 0x24, - 0x3e, 0x72, 0xb5, 0x10, 0x88, 0xfc, 0xeb, 0x5e, 0x3f, 0xd4, 0xae, 0x9b, 0x33, 0xcd, 0x39, 0xd4, - 0x28, 0x66, 0x84, 0x43, 0x5c, 0xd5, 0xe4, 0x44, 0xc5, 0xde, 0xe5, 0x44, 0xa3, 0xd9, 0x32, 0xa2, - 0xd9, 0xd7, 0x61, 0xec, 0x81, 0x75, 0x23, 0xf6, 0x77, 0x8b, 0xf0, 0x58, 0x87, 0x6d, 0xcf, 0xcf, - 0x7a, 0x63, 0x0e, 0xb4, 0xb3, 0x3e, 0x35, 0x0f, 0x15, 0x38, 0xb6, 0xd1, 0x6e, 0x34, 0x76, 0x99, - 0x23, 0x18, 0xa9, 0x4b, 0x0c, 0xc1, 0x53, 0x4a, 0xe1, 0xc8, 0xb1, 0x95, 0x0c, 0x1c, 0x9c, 0x59, - 0x93, 0x3e, 0xb1, 0xe8, 0x4d, 0xb2, 0xab, 0x48, 0x25, 0x9e, 0x58, 0x58, 0x07, 0x62, 0x13, 0x17, - 0x5d, 0x81, 0x29, 0x67, 0xc7, 0x71, 0x79, 0xfa, 0x0b, 0x49, 0x80, 0xbf, 0xb1, 0x94, 0x2c, 0x7a, - 0x3e, 0x89, 0x80, 0xd3, 0x75, 0xd0, 0x5b, 0x80, 0xfc, 0x3b, 0xcc, 0xb9, 0xa4, 0x7e, 0x85, 0x78, - 0x42, 0xeb, 0xce, 0xe6, 0xae, 0x18, 0x1f, 0x09, 0x37, 0x52, 0x18, 0x38, 0xa3, 0x56, 0x22, 0x18, - 0xdf, 0x40, 0x7e, 0x30, 0xbe, 0xce, 0xe7, 0x62, 0xd7, 0xcc, 0x81, 0xef, 0xc2, 0xd8, 0x61, 0x2d, - 0xa6, 0x9f, 0x81, 0xc1, 0x40, 0xe4, 0x64, 0x4f, 0x78, 0x5d, 0xcb, 0x8c, 0xd5, 0x12, 0x6e, 0xff, - 0x6f, 0x16, 0x28, 0x59, 0xb2, 0x19, 0x77, 0xfb, 0x75, 0x66, 0xfe, 0xcd, 0xa5, 0xe0, 0x5a, 0xa8, - 0xad, 0xe3, 0x9a, 0xf9, 0x77, 0x0c, 0xc4, 0x26, 0x2e, 0x5f, 0x6e, 0x61, 0x1c, 0xe1, 0xc1, 0x78, - 0x40, 0x88, 0xb0, 0xa0, 0x0a, 0x03, 0x7d, 0x1a, 0x06, 0xeb, 0xee, 0x8e, 0x1b, 0x0a, 0x39, 0xda, - 0xa1, 0xf5, 0x76, 0xf1, 0xf7, 0x2d, 0x71, 0x32, 0x58, 0xd2, 0xb3, 0x7f, 0xba, 0x10, 0x0f, 0xdf, - 0xdb, 0x6d, 0x3f, 0x72, 0x8e, 0xe0, 0xd2, 0xbf, 0x62, 0x5c, 0xfa, 0x4f, 0x65, 0xaf, 0x09, 0xad, - 0x4b, 0xb9, 0x97, 0xfd, 0x8d, 0xc4, 0x65, 0xff, 0x74, 0x77, 0x52, 0x9d, 0x2f, 0xf9, 0xff, 0xd2, - 0x82, 0x29, 0x03, 0xff, 0x08, 0xee, 0x9a, 0x15, 0xf3, 0xae, 0x79, 0xbc, 0xeb, 0x37, 0xe4, 0xdc, - 0x31, 0x3f, 0x51, 0x4c, 0xf4, 0x9d, 0xdd, 0x2d, 0xef, 0x41, 0xdf, 0x96, 0x13, 0xd4, 0xc5, 0x13, - 0xfa, 0x62, 0x4f, 0x63, 0x3d, 0x77, 0xd5, 0x09, 0x84, 0x51, 0xc3, 0xf3, 0x72, 0xd4, 0x69, 0x51, - 0x57, 0x83, 0x06, 0xd6, 0x14, 0xba, 0x0c, 0x03, 0x61, 0xcd, 0x6f, 0x29, 0x97, 0x34, 0x96, 0xb9, - 0xba, 0xca, 0x4a, 0x0e, 0xf6, 0x4a, 0xc8, 0x6c, 0x8e, 0x16, 0x63, 0x81, 0x8f, 0xde, 0x81, 0x31, - 0xf6, 0x4b, 0x59, 0x18, 0x16, 0xf3, 0x85, 0x1d, 0x55, 0x1d, 0x91, 0x9b, 0xdf, 0x1a, 0x45, 0xd8, - 0x24, 0x35, 0xbb, 0x09, 0xc3, 0xea, 0xb3, 0x1e, 0xa9, 0x62, 0xfc, 0x7f, 0x2e, 0xc2, 0x74, 0xc6, - 0x9a, 0x43, 0xa1, 0x31, 0x13, 0x97, 0x7a, 0x5c, 0xaa, 0xef, 0x73, 0x2e, 0x42, 0xf6, 0xd6, 0xaa, - 0x8b, 0xb5, 0xd5, 0x73, 0xa3, 0x37, 0x43, 0x92, 0x6c, 0x94, 0x16, 0x75, 0x6f, 0x94, 0x36, 0x76, - 0x64, 0x43, 0x4d, 0x1b, 0x52, 0x3d, 0x7d, 0xa4, 0x73, 0xfa, 0x07, 0x7d, 0x70, 0x2c, 0x2b, 0x5c, - 0x33, 0xfa, 0x62, 0x22, 0x57, 0xff, 0xcb, 0x9d, 0x46, 0x58, 0xaf, 0xc9, 0x13, 0xf8, 0x8b, 0x28, - 0xa9, 0x73, 0x66, 0xf6, 0xfe, 0xae, 0xc3, 0x2c, 0xda, 0x64, 0xd1, 0x8b, 0xc4, 0x45, 0x25, 0x8f, - 0x8f, 0x8f, 0xf5, 0xdc, 0x01, 0x71, 0xd5, 0x85, 0x09, 0xeb, 0x25, 0x59, 0xdc, 0xdd, 0x7a, 0x49, - 0xb6, 0x8c, 0xca, 0x30, 0x50, 0xe3, 0x66, 0x31, 0xc5, 0xee, 0x47, 0x18, 0xb7, 0x89, 0x51, 0x07, - 0xb0, 0xb0, 0x85, 0x11, 0x04, 0x66, 0x5d, 0x18, 0xd1, 0x06, 0xe6, 0x91, 0x2e, 0x9e, 0x6d, 0x7a, - 0xf1, 0x69, 0x43, 0xf0, 0x48, 0x17, 0xd0, 0xcf, 0x59, 0x90, 0xf0, 0xfa, 0x51, 0xf2, 0x3b, 0x2b, - 0x57, 0x7e, 0x77, 0x0e, 0xfa, 0x02, 0xbf, 0x41, 0x92, 0xb9, 0xd6, 0xb1, 0xdf, 0x20, 0x98, 0x41, - 0x28, 0x46, 0x14, 0x4b, 0x65, 0x46, 0xf5, 0x17, 0xa7, 0x78, 0x4b, 0x3e, 0x01, 0xfd, 0x0d, 0xb2, - 0x43, 0x1a, 0xc9, 0x94, 0x98, 0xd7, 0x69, 0x21, 0xe6, 0x30, 0xfb, 0xb7, 0xfa, 0xe0, 0x4c, 0xc7, - 0x50, 0x62, 0x94, 0x63, 0xda, 0x74, 0x22, 0x72, 0xd7, 0xd9, 0x4d, 0xa6, 0x82, 0xbb, 0xc2, 0x8b, - 0xb1, 0x84, 0x33, 0xef, 0x5a, 0x9e, 0x1a, 0x25, 0x21, 0xed, 0x14, 0x19, 0x51, 0x04, 0xd4, 0x94, - 0x9e, 0x15, 0x1f, 0x86, 0xf4, 0xec, 0x45, 0x80, 0x30, 0x6c, 0x70, 0x0b, 0xc2, 0xba, 0x70, 0xdb, - 0x8d, 0x53, 0xe8, 0x54, 0xaf, 0x0b, 0x08, 0xd6, 0xb0, 0xd0, 0x12, 0x4c, 0xb6, 0x02, 0x3f, 0xe2, - 0xc2, 0xe3, 0x25, 0x6e, 0x64, 0xdb, 0x6f, 0x46, 0x71, 0xaa, 0x24, 0xe0, 0x38, 0x55, 0x03, 0xbd, - 0x02, 0x23, 0x22, 0xb2, 0x53, 0xc5, 0xf7, 0x1b, 0x42, 0x5e, 0xa5, 0xec, 0x4e, 0xab, 0x31, 0x08, - 0xeb, 0x78, 0x5a, 0x35, 0x26, 0x91, 0x1e, 0xcc, 0xac, 0xc6, 0xa5, 0xd2, 0x1a, 0x5e, 0x22, 0x0a, - 0xfc, 0x50, 0x4f, 0x51, 0xe0, 0x63, 0x09, 0xde, 0x70, 0xcf, 0x0a, 0x52, 0xe8, 0x2a, 0xf3, 0xfa, - 0x66, 0x1f, 0x4c, 0x8b, 0x85, 0xf3, 0xa8, 0x97, 0xcb, 0xcd, 0xf4, 0x72, 0x79, 0x18, 0x32, 0xbe, - 0x0f, 0xd7, 0xcc, 0x51, 0xaf, 0x99, 0x9f, 0xb1, 0xc0, 0xe4, 0xd4, 0xd0, 0xbf, 0x91, 0x9b, 0x4b, - 0xf3, 0x95, 0x5c, 0xce, 0x2f, 0x0e, 0x11, 0xfd, 0xfe, 0xb2, 0x6a, 0xda, 0xff, 0x8b, 0x05, 0x8f, - 0x77, 0xa5, 0x88, 0x96, 0x61, 0x98, 0xb1, 0x93, 0xda, 0x43, 0xef, 0x69, 0x65, 0x84, 0x2f, 0x01, - 0x39, 0xdc, 0x6d, 0x5c, 0x13, 0x2d, 0xa7, 0x92, 0x96, 0x3e, 0x93, 0x91, 0xb4, 0xf4, 0xb8, 0x31, - 0x3c, 0x0f, 0x98, 0xb5, 0xf4, 0xab, 0xf4, 0xc6, 0x31, 0x9d, 0xec, 0x3e, 0x66, 0xc8, 0x27, 0xed, - 0x84, 0x7c, 0x12, 0x99, 0xd8, 0xda, 0x1d, 0xf2, 0x49, 0x98, 0x64, 0x21, 0x1f, 0x99, 0x4b, 0x88, - 0xf0, 0xce, 0x2b, 0xc4, 0x66, 0xdf, 0xd7, 0x13, 0x30, 0x9c, 0xc2, 0xb6, 0xff, 0xa6, 0x08, 0x03, - 0x7c, 0xfb, 0x1d, 0xc1, 0xf3, 0xf2, 0x39, 0x18, 0x76, 0x9b, 0xcd, 0x36, 0xcf, 0x43, 0xd9, 0x1f, - 0x1b, 0x11, 0x97, 0x65, 0x21, 0x8e, 0xe1, 0x68, 0x45, 0x88, 0xc6, 0x3b, 0x44, 0x95, 0xe6, 0x1d, - 0x9f, 0x5b, 0x72, 0x22, 0x87, 0xf3, 0x4a, 0xea, 0x9e, 0x8d, 0x85, 0xe8, 0xe8, 0x73, 0x00, 0x61, - 0x14, 0xb8, 0xde, 0x26, 0x2d, 0x13, 0xa9, 0x07, 0x9e, 0xed, 0x40, 0xad, 0xaa, 0x90, 0x39, 0xcd, - 0xf8, 0xcc, 0x51, 0x00, 0xac, 0x51, 0x44, 0x73, 0xc6, 0x4d, 0x3f, 0x9b, 0x98, 0x3b, 0xe0, 0x54, - 0xe3, 0x39, 0x9b, 0x7d, 0x15, 0x86, 0x15, 0xf1, 0x6e, 0x82, 0xb2, 0x51, 0x9d, 0x2d, 0xfa, 0x04, - 0x4c, 0x24, 0xfa, 0x76, 0x28, 0x39, 0xdb, 0x6f, 0x5b, 0x30, 0xc1, 0x3b, 0xb3, 0xec, 0xed, 0x88, - 0xdb, 0xe0, 0x3e, 0x1c, 0x6b, 0x64, 0x9c, 0xca, 0x62, 0xfa, 0x7b, 0x3f, 0xc5, 0x95, 0x5c, 0x2d, - 0x0b, 0x8a, 0x33, 0xdb, 0x40, 0x17, 0xe8, 0x8e, 0xa3, 0xa7, 0xae, 0xd3, 0x10, 0xe1, 0x23, 0x46, - 0xf9, 0x6e, 0xe3, 0x65, 0x58, 0x41, 0xed, 0xbf, 0xb0, 0x60, 0x8a, 0xf7, 0xfc, 0x1a, 0xd9, 0x55, - 0x67, 0xd3, 0xf7, 0xb3, 0xef, 0x22, 0x03, 0x72, 0x21, 0x27, 0x03, 0xb2, 0xfe, 0x69, 0xc5, 0x8e, - 0x9f, 0xf6, 0x0d, 0x0b, 0xc4, 0x0a, 0x39, 0x02, 0x79, 0xc6, 0x8f, 0x98, 0xf2, 0x8c, 0xd9, 0xfc, - 0x4d, 0x90, 0x23, 0xc8, 0xf8, 0x27, 0x0b, 0x26, 0x39, 0x42, 0xac, 0xd6, 0xff, 0xbe, 0xce, 0xc3, - 0x82, 0xf9, 0x45, 0x99, 0x76, 0x9a, 0xd7, 0xc8, 0xee, 0xba, 0x5f, 0x71, 0xa2, 0xad, 0xec, 0x8f, - 0x32, 0x26, 0xab, 0xaf, 0xe3, 0x64, 0xd5, 0xe5, 0x06, 0x32, 0x32, 0xed, 0x75, 0x91, 0x68, 0x1e, - 0x36, 0xd3, 0x9e, 0xfd, 0xb7, 0x16, 0x20, 0xde, 0x8c, 0xc1, 0xb8, 0x51, 0x76, 0x88, 0x95, 0x6a, - 0x17, 0x5d, 0x7c, 0x34, 0x29, 0x08, 0xd6, 0xb0, 0x1e, 0xca, 0xf0, 0x24, 0x6c, 0x33, 0x8a, 0xdd, - 0x6d, 0x33, 0x0e, 0x31, 0xa2, 0xdf, 0x18, 0x84, 0xa4, 0x13, 0x20, 0xba, 0x05, 0xa3, 0x35, 0xa7, - 0xe5, 0xdc, 0x71, 0x1b, 0x6e, 0xe4, 0x92, 0xb0, 0x93, 0xe1, 0xd6, 0xa2, 0x86, 0x27, 0xb4, 0xe9, - 0x5a, 0x09, 0x36, 0xe8, 0xa0, 0x39, 0x80, 0x56, 0xe0, 0xee, 0xb8, 0x0d, 0xb2, 0xc9, 0xc4, 0x2e, - 0x2c, 0x60, 0x0d, 0xb7, 0x22, 0x93, 0xa5, 0x58, 0xc3, 0xc8, 0x88, 0x25, 0x51, 0x7c, 0xc4, 0xb1, - 0x24, 0xe0, 0xc8, 0x62, 0x49, 0xf4, 0x1d, 0x2a, 0x96, 0xc4, 0xd0, 0xa1, 0x63, 0x49, 0xf4, 0xf7, - 0x14, 0x4b, 0x02, 0xc3, 0x09, 0xc9, 0x7b, 0xd2, 0xff, 0x2b, 0x6e, 0x83, 0x88, 0x07, 0x07, 0x8f, - 0xb2, 0x33, 0xbb, 0xbf, 0x57, 0x3a, 0x81, 0x33, 0x31, 0x70, 0x4e, 0x4d, 0xf4, 0x29, 0x98, 0x71, - 0x1a, 0x0d, 0xff, 0xae, 0x9a, 0xd4, 0xe5, 0xb0, 0xe6, 0x34, 0xb8, 0xb6, 0x64, 0x90, 0x51, 0x3d, - 0xbd, 0xbf, 0x57, 0x9a, 0x99, 0xcf, 0xc1, 0xc1, 0xb9, 0xb5, 0xd1, 0x1b, 0x30, 0xdc, 0x0a, 0xfc, - 0xda, 0xaa, 0xe6, 0xa9, 0x7c, 0x96, 0x0e, 0x60, 0x45, 0x16, 0x1e, 0xec, 0x95, 0xc6, 0xd4, 0x1f, - 0x76, 0xe1, 0xc7, 0x15, 0x32, 0xc2, 0x34, 0x8c, 0x3c, 0xea, 0x30, 0x0d, 0xa3, 0x0f, 0x3b, 0x4c, - 0xc3, 0x36, 0x4c, 0x57, 0x49, 0xe0, 0x3a, 0x0d, 0xf7, 0x3e, 0xe5, 0xc9, 0xe5, 0x19, 0xb8, 0x0e, - 0xc3, 0x41, 0xe2, 0xd4, 0xef, 0x29, 0x9a, 0xb4, 0x96, 0x50, 0x4d, 0x9e, 0xf2, 0x31, 0x21, 0xfb, - 0xff, 0xb5, 0x60, 0x50, 0x38, 0x16, 0x1e, 0x01, 0x67, 0x3a, 0x6f, 0x28, 0x3e, 0x4a, 0xd9, 0x93, - 0xc2, 0x3a, 0x93, 0xab, 0xf2, 0x28, 0x27, 0x54, 0x1e, 0x8f, 0x77, 0x22, 0xd2, 0x59, 0xd9, 0xf1, - 0xef, 0x17, 0xe9, 0x0b, 0xc1, 0x70, 0x71, 0x7f, 0xf4, 0x43, 0xb0, 0x06, 0x83, 0xa1, 0x70, 0xb1, - 0x2e, 0xe4, 0x3b, 0xa7, 0x24, 0x27, 0x31, 0x36, 0xea, 0x13, 0x4e, 0xd5, 0x92, 0x48, 0xa6, 0xef, - 0x76, 0xf1, 0x11, 0xfa, 0x6e, 0x77, 0x0b, 0x02, 0xd0, 0xf7, 0x30, 0x82, 0x00, 0xd8, 0xdf, 0x66, - 0xb7, 0xb3, 0x5e, 0x7e, 0x04, 0x8c, 0xdb, 0x15, 0xf3, 0x1e, 0xb7, 0x3b, 0xac, 0x2c, 0xd1, 0xa9, - 0x1c, 0x06, 0xee, 0x37, 0x2d, 0x38, 0x93, 0xf1, 0x55, 0x1a, 0x37, 0xf7, 0x3c, 0x0c, 0x39, 0xed, - 0xba, 0xab, 0xf6, 0xb2, 0xa6, 0xfe, 0x9c, 0x17, 0xe5, 0x58, 0x61, 0xa0, 0x45, 0x98, 0x22, 0xf7, - 0x5a, 0x2e, 0xd7, 0x2b, 0xeb, 0xb6, 0xd0, 0x45, 0xee, 0x8d, 0xba, 0x9c, 0x04, 0xe2, 0x34, 0xbe, - 0x8a, 0xf1, 0x55, 0xcc, 0x8d, 0xf1, 0xf5, 0xeb, 0x16, 0x8c, 0x28, 0x27, 0xe3, 0x47, 0x3e, 0xda, - 0x9f, 0x34, 0x47, 0xfb, 0xb1, 0x0e, 0xa3, 0x9d, 0x33, 0xcc, 0x7f, 0x5e, 0x50, 0xfd, 0xad, 0xf8, - 0x41, 0xd4, 0x03, 0x97, 0xf8, 0xe0, 0x7e, 0x1c, 0x97, 0x60, 0xc4, 0x69, 0xb5, 0x24, 0x40, 0x1a, - 0xe4, 0xb1, 0xdc, 0x00, 0x71, 0x31, 0xd6, 0x71, 0x94, 0x5b, 0x49, 0x31, 0xd7, 0xad, 0xa4, 0x0e, - 0x10, 0x39, 0xc1, 0x26, 0x89, 0x68, 0x99, 0xb0, 0x1f, 0xce, 0x3f, 0x6f, 0xda, 0x91, 0xdb, 0x98, - 0x73, 0xbd, 0x28, 0x8c, 0x82, 0xb9, 0xb2, 0x17, 0xdd, 0x08, 0xf8, 0x33, 0x55, 0x8b, 0x92, 0xa7, - 0x68, 0x61, 0x8d, 0xae, 0x0c, 0xa8, 0xc1, 0xda, 0xe8, 0x37, 0x2d, 0x3b, 0xd6, 0x44, 0x39, 0x56, - 0x18, 0xf6, 0xab, 0xec, 0xf6, 0x61, 0x63, 0x7a, 0xb8, 0x08, 0x71, 0x7f, 0x37, 0xaa, 0x66, 0x83, - 0x29, 0x5e, 0x97, 0xf4, 0x38, 0x74, 0x9d, 0x0f, 0x7b, 0xda, 0xb0, 0xee, 0xa0, 0x19, 0x07, 0xab, - 0x43, 0x9f, 0x49, 0x59, 0xeb, 0xbc, 0xd0, 0xe5, 0xd6, 0x38, 0x84, 0x7d, 0x0e, 0x4b, 0x14, 0xc6, - 0xd2, 0x28, 0x95, 0x2b, 0x62, 0x5f, 0x68, 0x89, 0xc2, 0x04, 0x00, 0xc7, 0x38, 0x94, 0x61, 0x53, - 0x7f, 0xc2, 0x19, 0x14, 0xc7, 0x93, 0x56, 0xd8, 0x21, 0xd6, 0x30, 0xd0, 0x45, 0x21, 0xb4, 0xe0, - 0xba, 0x87, 0xc7, 0x12, 0x42, 0x0b, 0x39, 0x5c, 0x9a, 0xa4, 0xe9, 0x12, 0x8c, 0x90, 0x7b, 0x11, - 0x09, 0x3c, 0xa7, 0x41, 0x5b, 0xe8, 0x8f, 0x43, 0xa0, 0x2e, 0xc7, 0xc5, 0x58, 0xc7, 0x41, 0xeb, - 0x30, 0x11, 0x72, 0x59, 0x9e, 0xca, 0x62, 0xc0, 0x65, 0xa2, 0xcf, 0x2a, 0xf7, 0x6e, 0x13, 0x7c, - 0xc0, 0x8a, 0xf8, 0xe9, 0x24, 0x83, 0x5e, 0x24, 0x49, 0xa0, 0x37, 0x61, 0xbc, 0xe1, 0x3b, 0xf5, - 0x05, 0xa7, 0xe1, 0x78, 0x35, 0x36, 0x3e, 0x43, 0x66, 0xba, 0xf9, 0xeb, 0x06, 0x14, 0x27, 0xb0, - 0x29, 0x83, 0xa8, 0x97, 0x88, 0xcc, 0x1b, 0x8e, 0xb7, 0x49, 0xc2, 0x99, 0x61, 0xf6, 0x55, 0x8c, - 0x41, 0xbc, 0x9e, 0x83, 0x83, 0x73, 0x6b, 0xa3, 0xcb, 0x30, 0x2a, 0x3f, 0x5f, 0x8b, 0x11, 0x13, - 0x7b, 0xe8, 0x68, 0x30, 0x6c, 0x60, 0xa2, 0x10, 0x8e, 0xcb, 0xff, 0xeb, 0x81, 0xb3, 0xb1, 0xe1, - 0xd6, 0x44, 0xe0, 0x04, 0xee, 0xcd, 0xfc, 0x09, 0xe9, 0x3a, 0xb9, 0x9c, 0x85, 0x74, 0xb0, 0x57, - 0x3a, 0x2d, 0x46, 0x2d, 0x13, 0x8e, 0xb3, 0x69, 0xa3, 0x55, 0x98, 0xde, 0x22, 0x4e, 0x23, 0xda, - 0x5a, 0xdc, 0x22, 0xb5, 0x6d, 0xb9, 0xe1, 0x18, 0xd7, 0xa8, 0x79, 0xb2, 0x5c, 0x4d, 0xa3, 0xe0, - 0xac, 0x7a, 0xe8, 0x5d, 0x98, 0x69, 0xb5, 0xef, 0x34, 0xdc, 0x70, 0x6b, 0xcd, 0x8f, 0x98, 0x4d, - 0xd4, 0x7c, 0xbd, 0x1e, 0x90, 0x90, 0x3b, 0xbb, 0xb2, 0xab, 0x57, 0xc6, 0xf5, 0xa9, 0xe4, 0xe0, - 0xe1, 0x5c, 0x0a, 0xe8, 0x3e, 0x1c, 0x4f, 0x2c, 0x04, 0x11, 0xa0, 0x63, 0x3c, 0x3f, 0x87, 0x51, - 0x35, 0xab, 0x82, 0x88, 0x75, 0x93, 0x05, 0xc2, 0xd9, 0x4d, 0xa0, 0xd7, 0x00, 0xdc, 0xd6, 0x8a, - 0xd3, 0x74, 0x1b, 0xf4, 0x39, 0x3a, 0xcd, 0xd6, 0x08, 0x7d, 0x9a, 0x40, 0xb9, 0x22, 0x4b, 0xe9, - 0xd9, 0x2c, 0xfe, 0xed, 0x62, 0x0d, 0x1b, 0x5d, 0x87, 0x71, 0xf1, 0x6f, 0x57, 0x4c, 0xe9, 0x94, - 0x4a, 0x77, 0x39, 0x2e, 0x6b, 0xa8, 0x79, 0x4c, 0x94, 0xe0, 0x44, 0x5d, 0xb4, 0x09, 0x67, 0x64, - 0xae, 0x4d, 0x7d, 0x7d, 0xca, 0x39, 0x08, 0x59, 0xe2, 0xa0, 0x21, 0xee, 0x24, 0x33, 0xdf, 0x09, - 0x11, 0x77, 0xa6, 0x43, 0xef, 0x75, 0x7d, 0x99, 0x73, 0x17, 0xe8, 0xe3, 0x71, 0x68, 0xc7, 0xeb, - 0x49, 0x20, 0x4e, 0xe3, 0x23, 0x1f, 0x8e, 0xbb, 0x5e, 0xd6, 0xaa, 0x3e, 0xc1, 0x08, 0x7d, 0x9c, - 0x7b, 0x7f, 0x77, 0x5e, 0xd1, 0x99, 0x70, 0x9c, 0x4d, 0x17, 0x95, 0x61, 0x3a, 0xe2, 0x05, 0x4b, - 0x6e, 0xc8, 0xf3, 0x92, 0xd0, 0x67, 0xdf, 0x49, 0xd6, 0xdc, 0x49, 0xba, 0x9a, 0xd7, 0xd3, 0x60, - 0x9c, 0x55, 0xe7, 0xfd, 0x59, 0x34, 0x7e, 0xc7, 0xa2, 0xb5, 0x35, 0x46, 0x1f, 0x7d, 0x1e, 0x46, - 0xf5, 0xf1, 0x11, 0x4c, 0xcb, 0xf9, 0x6c, 0x3e, 0x58, 0x3b, 0x5e, 0xf8, 0x33, 0x41, 0x1d, 0x21, - 0x3a, 0x0c, 0x1b, 0x14, 0x51, 0x2d, 0x23, 0x6a, 0xc3, 0xc5, 0xde, 0x98, 0xa2, 0xde, 0x0d, 0xfa, - 0x08, 0x64, 0xef, 0x1c, 0x74, 0x1d, 0x86, 0x6a, 0x0d, 0x97, 0x78, 0x51, 0xb9, 0xd2, 0x29, 0xe2, - 0xe6, 0xa2, 0xc0, 0x11, 0x5b, 0x51, 0xa4, 0x13, 0xe2, 0x65, 0x58, 0x51, 0xb0, 0x2f, 0xc3, 0x48, - 0xb5, 0x41, 0x48, 0x8b, 0x3b, 0x26, 0xa1, 0x67, 0xd8, 0xc3, 0x84, 0xb1, 0x96, 0x16, 0x63, 0x2d, - 0xf5, 0x37, 0x07, 0x63, 0x2a, 0x25, 0xdc, 0xfe, 0xa3, 0x02, 0x94, 0xba, 0x64, 0xb5, 0x4a, 0xe8, - 0xdb, 0xac, 0x9e, 0xf4, 0x6d, 0xf3, 0x30, 0x11, 0xff, 0xd3, 0x45, 0x79, 0xca, 0xba, 0xf7, 0x96, - 0x09, 0xc6, 0x49, 0xfc, 0x9e, 0x1d, 0x35, 0x74, 0x95, 0x5d, 0x5f, 0x57, 0x57, 0x23, 0x43, 0x55, - 0xdf, 0xdf, 0xfb, 0xdb, 0x3b, 0x57, 0xed, 0x6a, 0x7f, 0xbb, 0x00, 0xc7, 0xd5, 0x10, 0xfe, 0xf0, - 0x0e, 0xdc, 0xcd, 0xf4, 0xc0, 0x3d, 0x04, 0xa5, 0xb5, 0x7d, 0x03, 0x06, 0x78, 0x18, 0xd0, 0x1e, - 0x78, 0xfe, 0x27, 0xcc, 0x68, 0xeb, 0x8a, 0xcd, 0x34, 0x22, 0xae, 0xff, 0xa4, 0x05, 0x13, 0x09, - 0x8f, 0x3f, 0x84, 0x35, 0xb7, 0xf0, 0x07, 0xe1, 0xcb, 0xb3, 0x38, 0xfe, 0x73, 0xd0, 0xb7, 0xe5, - 0x2b, 0xab, 0x5b, 0x85, 0x71, 0xd5, 0x0f, 0x23, 0xcc, 0x20, 0xf6, 0x5f, 0x5a, 0xd0, 0xbf, 0xee, - 0xb8, 0x5e, 0x24, 0xb5, 0x1f, 0x56, 0x8e, 0xf6, 0xa3, 0x97, 0xef, 0x42, 0xaf, 0xc0, 0x00, 0xd9, - 0xd8, 0x20, 0xb5, 0x48, 0xcc, 0xaa, 0x0c, 0x0f, 0x31, 0xb0, 0xcc, 0x4a, 0x29, 0x13, 0xca, 0x1a, - 0xe3, 0x7f, 0xb1, 0x40, 0x46, 0xb7, 0x61, 0x38, 0x72, 0x9b, 0x64, 0xbe, 0x5e, 0x17, 0x36, 0x01, - 0x0f, 0x10, 0xd3, 0x64, 0x5d, 0x12, 0xc0, 0x31, 0x2d, 0xfb, 0x6b, 0x05, 0x80, 0x38, 0xb6, 0x59, - 0xb7, 0x4f, 0x5c, 0x48, 0x69, 0x8b, 0xcf, 0x67, 0x68, 0x8b, 0x51, 0x4c, 0x30, 0x43, 0x55, 0xac, - 0x86, 0xa9, 0xd8, 0xd3, 0x30, 0xf5, 0x1d, 0x66, 0x98, 0x16, 0x61, 0x2a, 0x8e, 0xcd, 0x66, 0x86, - 0xa6, 0x64, 0xf7, 0xf7, 0x7a, 0x12, 0x88, 0xd3, 0xf8, 0x36, 0x81, 0x73, 0x2a, 0x44, 0x95, 0xb8, - 0x0b, 0x99, 0x6d, 0xbc, 0xae, 0x7d, 0xef, 0x32, 0x4e, 0xb1, 0x3a, 0xbc, 0x90, 0xab, 0x0e, 0xff, - 0x45, 0x0b, 0x8e, 0x25, 0xdb, 0x61, 0x8e, 0xe4, 0x5f, 0xb1, 0xe0, 0x78, 0x9c, 0xd4, 0x25, 0x6d, - 0x82, 0xf0, 0x72, 0xc7, 0xb0, 0x5b, 0x39, 0x3d, 0x8e, 0xe3, 0x90, 0xac, 0x66, 0x91, 0xc6, 0xd9, - 0x2d, 0xda, 0xff, 0x4f, 0x1f, 0xcc, 0xe4, 0xc5, 0xeb, 0x62, 0xae, 0x33, 0xce, 0xbd, 0xea, 0x36, - 0xb9, 0x2b, 0x1c, 0x14, 0x62, 0xd7, 0x19, 0x5e, 0x8c, 0x25, 0x3c, 0x99, 0xc7, 0xa7, 0xd0, 0x63, - 0x1e, 0x9f, 0x2d, 0x98, 0xba, 0xbb, 0x45, 0xbc, 0x9b, 0x5e, 0xe8, 0x44, 0x6e, 0xb8, 0xe1, 0x32, - 0x05, 0x3a, 0x5f, 0x37, 0x32, 0x17, 0xfd, 0xd4, 0xed, 0x24, 0xc2, 0xc1, 0x5e, 0xe9, 0x8c, 0x51, - 0x10, 0x77, 0x99, 0x1f, 0x24, 0x38, 0x4d, 0x34, 0x9d, 0x06, 0xa9, 0xef, 0x11, 0xa7, 0x41, 0x6a, - 0xba, 0xc2, 0xec, 0x46, 0xfa, 0x45, 0xb0, 0x67, 0xeb, 0xaa, 0x2a, 0xc5, 0x1a, 0x06, 0xfa, 0x2c, - 0x20, 0x3d, 0x8f, 0x9d, 0x11, 0x2e, 0xf5, 0x85, 0xfd, 0xbd, 0x12, 0x5a, 0x4b, 0x41, 0x0f, 0xf6, - 0x4a, 0xd3, 0xb4, 0xb4, 0xec, 0xd1, 0xe7, 0x6f, 0x1c, 0x63, 0x2e, 0x83, 0x10, 0xba, 0x0d, 0x93, - 0xb4, 0x94, 0xed, 0x28, 0x19, 0x8b, 0x95, 0x3f, 0x59, 0x9f, 0xdb, 0xdf, 0x2b, 0x4d, 0xae, 0x25, - 0x60, 0x79, 0xa4, 0x53, 0x44, 0x32, 0xb2, 0x21, 0x0d, 0xf5, 0x9a, 0x0d, 0xc9, 0xfe, 0x8a, 0x05, - 0xa7, 0xe8, 0x05, 0x57, 0xbf, 0x9e, 0xa3, 0x45, 0x77, 0x5a, 0x2e, 0xd7, 0xd3, 0x88, 0xab, 0x86, - 0xc9, 0xea, 0x2a, 0x65, 0xae, 0xa5, 0x51, 0x50, 0x7a, 0xc2, 0x6f, 0xbb, 0x5e, 0x3d, 0x79, 0xc2, - 0x5f, 0x73, 0xbd, 0x3a, 0x66, 0x10, 0x75, 0x65, 0x15, 0x73, 0xc3, 0xae, 0x7f, 0x93, 0xee, 0x55, - 0xda, 0x97, 0xef, 0x6b, 0x37, 0xd0, 0x73, 0xba, 0x4e, 0x55, 0x98, 0x4f, 0xe6, 0xea, 0x53, 0xbf, - 0x6c, 0x81, 0x70, 0xe7, 0xee, 0xe1, 0x4e, 0x7e, 0x07, 0x46, 0x77, 0xd2, 0x39, 0x3e, 0xcf, 0xe5, - 0xfb, 0xb7, 0x8b, 0xcc, 0x9e, 0x8a, 0x45, 0x37, 0xf2, 0x79, 0x1a, 0xb4, 0xec, 0x3a, 0x08, 0xe8, - 0x12, 0x61, 0x5a, 0x8d, 0xee, 0xbd, 0x79, 0x11, 0xa0, 0xce, 0x70, 0x59, 0xe2, 0xef, 0x82, 0xc9, - 0x71, 0x2d, 0x29, 0x08, 0xd6, 0xb0, 0xec, 0x5f, 0x2d, 0xc2, 0x88, 0xcc, 0x29, 0xd9, 0xf6, 0x7a, - 0x91, 0x3d, 0x1e, 0x2a, 0xc9, 0x3c, 0x7a, 0x17, 0xa6, 0x02, 0x52, 0x6b, 0x07, 0xa1, 0xbb, 0x43, - 0x24, 0x58, 0x6c, 0x92, 0x39, 0x1e, 0xf5, 0x3f, 0x01, 0x3c, 0x60, 0x31, 0x9f, 0x12, 0x85, 0x4c, - 0x69, 0x9c, 0x26, 0x84, 0x2e, 0xc2, 0x30, 0x13, 0xbd, 0x57, 0x62, 0x81, 0xb0, 0x12, 0x7c, 0xad, - 0x4a, 0x00, 0x8e, 0x71, 0xd8, 0xe3, 0xa0, 0x7d, 0x87, 0xa1, 0x27, 0x5c, 0x9b, 0xab, 0xbc, 0x18, - 0x4b, 0x38, 0xfa, 0x14, 0x4c, 0xf2, 0x7a, 0x81, 0xdf, 0x72, 0x36, 0xb9, 0x4a, 0xb0, 0x5f, 0xc5, - 0x8b, 0x99, 0x5c, 0x4d, 0xc0, 0x0e, 0xf6, 0x4a, 0xc7, 0x92, 0x65, 0xac, 0xdb, 0x29, 0x2a, 0xcc, - 0xf2, 0x8f, 0x37, 0x42, 0xef, 0x8c, 0x94, 0xc1, 0x60, 0x0c, 0xc2, 0x3a, 0x9e, 0xfd, 0x8f, 0x16, - 0x4c, 0x69, 0x53, 0xd5, 0x73, 0xe2, 0x05, 0x63, 0x90, 0x0a, 0x3d, 0x0c, 0xd2, 0xe1, 0xc2, 0x17, - 0x64, 0xce, 0x70, 0xdf, 0x43, 0x9a, 0x61, 0xfb, 0xf3, 0x80, 0xd2, 0x09, 0x4b, 0xd1, 0x5b, 0xdc, - 0x5c, 0xde, 0x0d, 0x48, 0xbd, 0x93, 0xc2, 0x5f, 0x0f, 0x05, 0x23, 0x5d, 0x31, 0x79, 0x2d, 0xac, - 0xea, 0xdb, 0x3f, 0xd5, 0x07, 0x93, 0xc9, 0xe0, 0x13, 0xe8, 0x2a, 0x0c, 0x70, 0x2e, 0x5d, 0x90, - 0xef, 0x60, 0x4f, 0xa6, 0x85, 0xac, 0x60, 0xfc, 0x8a, 0x60, 0xf4, 0x45, 0x7d, 0xf4, 0x2e, 0x8c, - 0xd4, 0xfd, 0xbb, 0xde, 0x5d, 0x27, 0xa8, 0xcf, 0x57, 0xca, 0xe2, 0x84, 0xc8, 0x14, 0x40, 0x2d, - 0xc5, 0x68, 0x7a, 0x18, 0x0c, 0x66, 0x3b, 0x11, 0x83, 0xb0, 0x4e, 0x0e, 0xad, 0xb3, 0x1c, 0x3c, - 0x1b, 0xee, 0xe6, 0xaa, 0xd3, 0xea, 0xe4, 0x3b, 0xb5, 0x28, 0x91, 0x34, 0xca, 0x63, 0x22, 0x51, - 0x0f, 0x07, 0xe0, 0x98, 0x10, 0xfa, 0x22, 0x4c, 0x87, 0x39, 0x2a, 0xb1, 0xbc, 0xfc, 0xd5, 0x9d, - 0xb4, 0x44, 0x5c, 0x98, 0x92, 0xa5, 0x3c, 0xcb, 0x6a, 0x06, 0xdd, 0x03, 0x24, 0x44, 0xcf, 0xeb, - 0x41, 0x3b, 0x8c, 0x16, 0xda, 0x5e, 0xbd, 0x21, 0x73, 0xf4, 0x64, 0x67, 0xb8, 0x4f, 0x61, 0x6b, - 0x6d, 0xb3, 0x60, 0xb4, 0x69, 0x0c, 0x9c, 0xd1, 0x86, 0xfd, 0xe5, 0x3e, 0x98, 0x95, 0x19, 0x82, - 0x33, 0x7c, 0x44, 0xbe, 0x64, 0x25, 0x9c, 0x44, 0x5e, 0xcb, 0x3f, 0xe8, 0x1f, 0x99, 0xab, 0xc8, - 0x57, 0xd3, 0xae, 0x22, 0x6f, 0x1c, 0xb2, 0x1b, 0x0f, 0xcd, 0x61, 0xe4, 0x87, 0xd6, 0xcb, 0x63, - 0xff, 0x18, 0x18, 0x57, 0x33, 0xc2, 0x3c, 0xd2, 0x77, 0x45, 0xaa, 0x8e, 0x72, 0x9e, 0xff, 0x57, - 0x05, 0x8e, 0x71, 0xd9, 0x8f, 0xca, 0x78, 0xe0, 0xec, 0x9c, 0x55, 0x74, 0x28, 0x4d, 0xd2, 0x6c, - 0x45, 0xbb, 0x4b, 0x6e, 0x20, 0x7a, 0x9c, 0x49, 0x73, 0x59, 0xe0, 0xa4, 0x69, 0x4a, 0x08, 0x56, - 0x74, 0xd0, 0x0e, 0x4c, 0x6d, 0xb2, 0x10, 0x46, 0x7a, 0x52, 0xfd, 0x62, 0xfe, 0xbe, 0xbd, 0xb2, - 0xb8, 0xdc, 0x21, 0xa3, 0x3e, 0x7b, 0xfc, 0xa5, 0x50, 0x70, 0xba, 0x09, 0x96, 0xd0, 0xdf, 0xb9, - 0x1b, 0x2e, 0x37, 0x9c, 0x30, 0x72, 0x6b, 0x0b, 0x0d, 0xbf, 0xb6, 0x5d, 0x8d, 0xfc, 0x40, 0x66, - 0xf4, 0xcb, 0x7c, 0x7b, 0xcd, 0xdf, 0xae, 0xa6, 0xf0, 0xd3, 0x09, 0xfd, 0xb3, 0xb0, 0x70, 0x66, - 0x5b, 0x68, 0x0d, 0x06, 0x37, 0xdd, 0x08, 0x93, 0x96, 0x2f, 0x4e, 0x8b, 0xcc, 0xa3, 0xf0, 0x0a, - 0x47, 0x49, 0x27, 0xd8, 0x17, 0x00, 0x2c, 0x89, 0xa0, 0xb7, 0xd4, 0x25, 0x30, 0x90, 0x2f, 0x80, - 0x4d, 0xdb, 0xde, 0x65, 0x5e, 0x03, 0x6f, 0x42, 0xd1, 0xdb, 0x08, 0x3b, 0x05, 0x97, 0x59, 0x5b, - 0xa9, 0xa6, 0x13, 0xdf, 0xaf, 0xad, 0x54, 0x31, 0xad, 0xc8, 0x9c, 0x4b, 0xc3, 0x5a, 0xe8, 0x8a, - 0x0c, 0x42, 0x99, 0xbe, 0xb6, 0xe5, 0xea, 0x62, 0xb5, 0x9c, 0x4e, 0xf6, 0xcf, 0x8a, 0x31, 0xaf, - 0x8e, 0x6e, 0xc1, 0xf0, 0x26, 0x3f, 0xf8, 0x36, 0x42, 0x91, 0x25, 0x3c, 0xf3, 0x32, 0xba, 0x22, - 0x91, 0xd2, 0x29, 0xfe, 0x15, 0x08, 0xc7, 0xa4, 0xd0, 0x97, 0x2d, 0x38, 0x9e, 0x4c, 0xb3, 0xce, - 0x5c, 0xc2, 0x84, 0x99, 0xda, 0x2b, 0xbd, 0xe4, 0xbd, 0x67, 0x15, 0x8c, 0x06, 0x99, 0xfa, 0x25, - 0x13, 0x0d, 0x67, 0x37, 0x47, 0x07, 0x3a, 0xb8, 0x53, 0xef, 0x94, 0x74, 0x26, 0x11, 0x69, 0x87, - 0x0f, 0x34, 0x5e, 0x58, 0xc2, 0xb4, 0x22, 0x5a, 0x07, 0xd8, 0x68, 0x10, 0x11, 0xc2, 0x50, 0x18, - 0x45, 0x65, 0xde, 0xfe, 0x2b, 0x0a, 0x4b, 0xd0, 0x61, 0x2f, 0xd1, 0xb8, 0x14, 0x6b, 0x74, 0xe8, - 0x52, 0xaa, 0xb9, 0x5e, 0x9d, 0x04, 0x4c, 0xb9, 0x95, 0xb3, 0x94, 0x16, 0x19, 0x46, 0x7a, 0x29, - 0xf1, 0x72, 0x2c, 0x28, 0x30, 0x5a, 0xa4, 0xb5, 0xb5, 0x11, 0x76, 0xca, 0xa1, 0xb0, 0x48, 0x5a, - 0x5b, 0x89, 0x05, 0xc5, 0x69, 0xb1, 0x72, 0x2c, 0x28, 0xd0, 0x2d, 0xb3, 0x41, 0x37, 0x10, 0x09, - 0x66, 0x26, 0xf2, 0xb7, 0xcc, 0x0a, 0x47, 0x49, 0x6f, 0x19, 0x01, 0xc0, 0x92, 0x08, 0xfa, 0x9c, - 0xc9, 0xed, 0x4c, 0x32, 0x9a, 0xcf, 0x75, 0xe1, 0x76, 0x0c, 0xba, 0x9d, 0xf9, 0x9d, 0xd7, 0xa0, - 0xb0, 0x51, 0x63, 0x4a, 0xb1, 0x1c, 0x9d, 0xc1, 0xca, 0xa2, 0x41, 0x8d, 0xc5, 0x24, 0x5f, 0x59, - 0xc4, 0x85, 0x8d, 0x1a, 0x5d, 0xfa, 0xce, 0xfd, 0x76, 0x40, 0x56, 0xdc, 0x06, 0x11, 0xf9, 0x14, - 0x32, 0x97, 0xfe, 0xbc, 0x44, 0x4a, 0x2f, 0x7d, 0x05, 0xc2, 0x31, 0x29, 0x4a, 0x37, 0xe6, 0xc1, - 0xa6, 0xf3, 0xe9, 0x2a, 0x56, 0x2b, 0x4d, 0x37, 0x93, 0x0b, 0xdb, 0x86, 0xb1, 0x9d, 0xb0, 0xb5, - 0x45, 0xe4, 0xa9, 0xc8, 0xd4, 0x75, 0x39, 0xa1, 0x17, 0x6e, 0x09, 0x44, 0x37, 0x88, 0xda, 0x4e, - 0x23, 0x75, 0x90, 0x33, 0xd1, 0xca, 0x2d, 0x9d, 0x18, 0x36, 0x69, 0xd3, 0x85, 0xf0, 0x1e, 0x8f, - 0x8f, 0xc6, 0x14, 0x77, 0x39, 0x0b, 0x21, 0x23, 0x84, 0x1a, 0x5f, 0x08, 0x02, 0x80, 0x25, 0x11, - 0x35, 0xd8, 0xec, 0x02, 0x3a, 0xd1, 0x65, 0xb0, 0x53, 0xfd, 0x8d, 0x07, 0x9b, 0x5d, 0x38, 0x31, - 0x29, 0x76, 0xd1, 0xb4, 0x32, 0x32, 0xd2, 0x33, 0xb5, 0x5d, 0xce, 0x45, 0xd3, 0x2d, 0x83, 0x3d, - 0xbf, 0x68, 0xb2, 0xb0, 0x70, 0x66, 0x5b, 0xf4, 0xe3, 0x5a, 0x32, 0xd4, 0x9d, 0xc8, 0xf9, 0xf0, - 0x4c, 0x4e, 0xa4, 0xc8, 0x74, 0x3c, 0x3c, 0xfe, 0x71, 0x0a, 0x84, 0x63, 0x52, 0xa8, 0x0e, 0xe3, - 0x2d, 0x23, 0x84, 0x2a, 0xcb, 0x5d, 0x91, 0xc3, 0x17, 0x64, 0x05, 0x5b, 0xe5, 0x12, 0x22, 0x13, - 0x82, 0x13, 0x34, 0x99, 0xe5, 0x1e, 0x77, 0xf5, 0x63, 0xa9, 0x2d, 0x72, 0xa6, 0x3a, 0xc3, 0x1b, - 0x90, 0x4f, 0xb5, 0x00, 0x60, 0x49, 0x84, 0x8e, 0x86, 0x70, 0x50, 0xf3, 0x43, 0x96, 0x21, 0x26, - 0x4f, 0xc1, 0x9e, 0xa5, 0x26, 0x92, 0x71, 0xc3, 0x05, 0x08, 0xc7, 0xa4, 0xe8, 0x49, 0x4e, 0x2f, - 0xbc, 0xd3, 0xf9, 0x27, 0x79, 0xf2, 0xba, 0x63, 0x27, 0x39, 0xbd, 0xec, 0x8a, 0xe2, 0xaa, 0x53, - 0x61, 0xae, 0x59, 0x76, 0x8b, 0x9c, 0x7e, 0xa9, 0x38, 0xd9, 0xe9, 0x7e, 0x29, 0x10, 0x8e, 0x49, - 0xb1, 0xab, 0x98, 0xc5, 0x5a, 0x3b, 0xdb, 0xe1, 0x2a, 0xa6, 0x08, 0x19, 0x57, 0xb1, 0x16, 0x8b, - 0xcd, 0xfe, 0xa9, 0x02, 0x9c, 0xed, 0xbc, 0x6f, 0x63, 0x1d, 0x5a, 0x25, 0xb6, 0x59, 0x4a, 0xe8, - 0xd0, 0xb8, 0x44, 0x27, 0xc6, 0xea, 0x39, 0x82, 0xee, 0x15, 0x98, 0x52, 0xee, 0x88, 0x0d, 0xb7, - 0xb6, 0xab, 0x65, 0x9b, 0x54, 0xb1, 0x66, 0xaa, 0x49, 0x04, 0x9c, 0xae, 0x83, 0xe6, 0x61, 0xc2, - 0x28, 0x2c, 0x2f, 0x89, 0xe7, 0x7f, 0x9c, 0x97, 0xc1, 0x04, 0xe3, 0x24, 0xbe, 0xfd, 0x6b, 0x16, - 0x9c, 0xcc, 0x49, 0x2c, 0xde, 0x73, 0x80, 0xd8, 0x0d, 0x98, 0x68, 0x99, 0x55, 0xbb, 0xc4, 0xb4, - 0x36, 0xd2, 0x97, 0xab, 0xbe, 0x26, 0x00, 0x38, 0x49, 0xd4, 0xfe, 0x95, 0x02, 0x9c, 0xe9, 0x68, - 0x5f, 0x8f, 0x30, 0x9c, 0xd8, 0x6c, 0x86, 0xce, 0x62, 0x40, 0xea, 0xc4, 0x8b, 0x5c, 0xa7, 0x51, - 0x6d, 0x91, 0x9a, 0xa6, 0x05, 0x65, 0x86, 0xea, 0x57, 0x56, 0xab, 0xf3, 0x69, 0x0c, 0x9c, 0x53, - 0x13, 0xad, 0x00, 0x4a, 0x43, 0xc4, 0x0c, 0xb3, 0x27, 0x6e, 0x9a, 0x1e, 0xce, 0xa8, 0x81, 0x5e, - 0x85, 0x31, 0x65, 0xb7, 0xaf, 0xcd, 0x38, 0xbb, 0x20, 0xb0, 0x0e, 0xc0, 0x26, 0x1e, 0xba, 0xc4, - 0x13, 0xf6, 0x88, 0xd4, 0x4e, 0x42, 0x65, 0x3a, 0x21, 0xb3, 0xf1, 0x88, 0x62, 0xac, 0xe3, 0x2c, - 0x5c, 0xfe, 0xe3, 0xef, 0x9d, 0xfd, 0xc8, 0x9f, 0x7d, 0xef, 0xec, 0x47, 0xfe, 0xe2, 0x7b, 0x67, - 0x3f, 0xf2, 0xaf, 0xf6, 0xcf, 0x5a, 0x7f, 0xbc, 0x7f, 0xd6, 0xfa, 0xb3, 0xfd, 0xb3, 0xd6, 0x5f, - 0xec, 0x9f, 0xb5, 0xfe, 0xf7, 0xfd, 0xb3, 0xd6, 0xd7, 0xfe, 0xfa, 0xec, 0x47, 0xde, 0x41, 0x71, - 0xc8, 0xe5, 0x8b, 0x74, 0x76, 0x2e, 0xee, 0x5c, 0xfa, 0xd7, 0x01, 0x00, 0x00, 0xff, 0xff, 0xdd, - 0x69, 0x81, 0x32, 0x11, 0x22, 0x01, 0x00, + // 16056 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x79, 0x90, 0x1c, 0xd7, + 0x79, 0x18, 0xae, 0x9e, 0xd9, 0xf3, 0xdb, 0xfb, 0x2d, 0x8e, 0xc5, 0x12, 0xc0, 0x80, 0x4d, 0x12, + 0x04, 0xaf, 0x85, 0xc0, 0x43, 0x84, 0x48, 0x8a, 0xe6, 0x9e, 0xc0, 0x12, 0xd8, 0xc5, 0xf0, 0xcd, + 0x02, 0x90, 0x28, 0x4a, 0x56, 0x63, 0xe6, 0xed, 0x6e, 0x6b, 0x67, 0xba, 0x87, 0xdd, 0x3d, 0x0b, + 0x2c, 0x7e, 0x72, 0xd9, 0x96, 0x7f, 0x96, 0x2d, 0xd9, 0xa9, 0x52, 0xb9, 0x9c, 0x38, 0x25, 0xbb, + 0x5c, 0x29, 0xc7, 0xf1, 0x11, 0xc5, 0x4e, 0x14, 0x39, 0xb6, 0x63, 0xf9, 0xca, 0x55, 0x65, 0x27, + 0x29, 0xc7, 0x71, 0x55, 0x24, 0x57, 0x5c, 0x59, 0x47, 0xeb, 0x54, 0xb9, 0xfc, 0x47, 0x6c, 0x97, + 0x93, 0x3f, 0x92, 0x2d, 0x27, 0x4e, 0xbd, 0xb3, 0xdf, 0xeb, 0x63, 0x66, 0x16, 0x04, 0x56, 0x14, + 0x8b, 0xff, 0xcd, 0xbc, 0xef, 0x7b, 0xdf, 0x7b, 0xfd, 0xce, 0xef, 0x7d, 0x27, 0xd8, 0x5b, 0x17, + 0xc3, 0x19, 0xd7, 0x3f, 0xef, 0x34, 0xdd, 0xf3, 0x55, 0x3f, 0x20, 0xe7, 0xb7, 0x2f, 0x9c, 0xdf, + 0x20, 0x1e, 0x09, 0x9c, 0x88, 0xd4, 0x66, 0x9a, 0x81, 0x1f, 0xf9, 0x08, 0x71, 0x9c, 0x19, 0xa7, + 0xe9, 0xce, 0x50, 0x9c, 0x99, 0xed, 0x0b, 0xd3, 0xcf, 0x6c, 0xb8, 0xd1, 0x66, 0xeb, 0xd6, 0x4c, + 0xd5, 0x6f, 0x9c, 0xdf, 0xf0, 0x37, 0xfc, 0xf3, 0x0c, 0xf5, 0x56, 0x6b, 0x9d, 0xfd, 0x63, 0x7f, + 0xd8, 0x2f, 0x4e, 0x62, 0xfa, 0xf9, 0xb8, 0x99, 0x86, 0x53, 0xdd, 0x74, 0x3d, 0x12, 0xec, 0x9c, + 0x6f, 0x6e, 0x6d, 0xb0, 0x76, 0x03, 0x12, 0xfa, 0xad, 0xa0, 0x4a, 0x92, 0x0d, 0xb7, 0xad, 0x15, + 0x9e, 0x6f, 0x90, 0xc8, 0xc9, 0xe8, 0xee, 0xf4, 0xf9, 0xbc, 0x5a, 0x41, 0xcb, 0x8b, 0xdc, 0x46, + 0xba, 0x99, 0x0f, 0x75, 0xaa, 0x10, 0x56, 0x37, 0x49, 0xc3, 0x49, 0xd5, 0x7b, 0x2e, 0xaf, 0x5e, + 0x2b, 0x72, 0xeb, 0xe7, 0x5d, 0x2f, 0x0a, 0xa3, 0x20, 0x59, 0xc9, 0xfe, 0x86, 0x05, 0x67, 0x66, + 0x6f, 0x56, 0x16, 0xeb, 0x4e, 0x18, 0xb9, 0xd5, 0xb9, 0xba, 0x5f, 0xdd, 0xaa, 0x44, 0x7e, 0x40, + 0x6e, 0xf8, 0xf5, 0x56, 0x83, 0x54, 0xd8, 0x40, 0xa0, 0xa7, 0x61, 0x60, 0x9b, 0xfd, 0x5f, 0x5e, + 0x98, 0xb2, 0xce, 0x58, 0xe7, 0x06, 0xe7, 0xc6, 0x7f, 0x67, 0xb7, 0xf4, 0x81, 0xbd, 0xdd, 0xd2, + 0xc0, 0x0d, 0x51, 0x8e, 0x15, 0x06, 0x3a, 0x0b, 0x7d, 0xeb, 0xe1, 0xda, 0x4e, 0x93, 0x4c, 0x15, + 0x18, 0xee, 0xa8, 0xc0, 0xed, 0x5b, 0xaa, 0xd0, 0x52, 0x2c, 0xa0, 0xe8, 0x3c, 0x0c, 0x36, 0x9d, + 0x20, 0x72, 0x23, 0xd7, 0xf7, 0xa6, 0x8a, 0x67, 0xac, 0x73, 0xbd, 0x73, 0x13, 0x02, 0x75, 0xb0, + 0x2c, 0x01, 0x38, 0xc6, 0xa1, 0xdd, 0x08, 0x88, 0x53, 0xbb, 0xe6, 0xd5, 0x77, 0xa6, 0x7a, 0xce, + 0x58, 0xe7, 0x06, 0xe2, 0x6e, 0x60, 0x51, 0x8e, 0x15, 0x86, 0xfd, 0xa5, 0x02, 0x0c, 0xcc, 0xae, + 0xaf, 0xbb, 0x9e, 0x1b, 0xed, 0xa0, 0x1b, 0x30, 0xec, 0xf9, 0x35, 0x22, 0xff, 0xb3, 0xaf, 0x18, + 0x7a, 0xf6, 0xcc, 0x4c, 0x7a, 0x29, 0xcd, 0xac, 0x6a, 0x78, 0x73, 0xe3, 0x7b, 0xbb, 0xa5, 0x61, + 0xbd, 0x04, 0x1b, 0x74, 0x10, 0x86, 0xa1, 0xa6, 0x5f, 0x53, 0x64, 0x0b, 0x8c, 0x6c, 0x29, 0x8b, + 0x6c, 0x39, 0x46, 0x9b, 0x1b, 0xdb, 0xdb, 0x2d, 0x0d, 0x69, 0x05, 0x58, 0x27, 0x82, 0x6e, 0xc1, + 0x18, 0xfd, 0xeb, 0x45, 0xae, 0xa2, 0x5b, 0x64, 0x74, 0x1f, 0xc9, 0xa3, 0xab, 0xa1, 0xce, 0x4d, + 0xee, 0xed, 0x96, 0xc6, 0x12, 0x85, 0x38, 0x49, 0xd0, 0xfe, 0x61, 0x0b, 0xc6, 0x66, 0x9b, 0xcd, + 0xd9, 0xa0, 0xe1, 0x07, 0xe5, 0xc0, 0x5f, 0x77, 0xeb, 0x04, 0xbd, 0x08, 0x3d, 0x11, 0x9d, 0x35, + 0x3e, 0xc3, 0x8f, 0x88, 0xa1, 0xed, 0xa1, 0x73, 0xb5, 0xbf, 0x5b, 0x9a, 0x4c, 0xa0, 0xb3, 0xa9, + 0x64, 0x15, 0xd0, 0x6b, 0x30, 0x5e, 0xf7, 0xab, 0x4e, 0x7d, 0xd3, 0x0f, 0x23, 0x01, 0x15, 0x53, + 0x7f, 0x64, 0x6f, 0xb7, 0x34, 0x7e, 0x35, 0x01, 0xc3, 0x29, 0x6c, 0xfb, 0x2e, 0x8c, 0xce, 0x46, + 0x91, 0x53, 0xdd, 0x24, 0x35, 0xbe, 0xa0, 0xd0, 0xf3, 0xd0, 0xe3, 0x39, 0x0d, 0xd9, 0x99, 0x33, + 0xb2, 0x33, 0xab, 0x4e, 0x83, 0x76, 0x66, 0xfc, 0xba, 0xe7, 0xbe, 0xdd, 0x12, 0x8b, 0x94, 0x96, + 0x61, 0x86, 0x8d, 0x9e, 0x05, 0xa8, 0x91, 0x6d, 0xb7, 0x4a, 0xca, 0x4e, 0xb4, 0x29, 0xfa, 0x80, + 0x44, 0x5d, 0x58, 0x50, 0x10, 0xac, 0x61, 0xd9, 0x77, 0x60, 0x70, 0x76, 0xdb, 0x77, 0x6b, 0x65, + 0xbf, 0x16, 0xa2, 0x2d, 0x18, 0x6b, 0x06, 0x64, 0x9d, 0x04, 0xaa, 0x68, 0xca, 0x3a, 0x53, 0x3c, + 0x37, 0xf4, 0xec, 0xb9, 0xcc, 0xb1, 0x37, 0x51, 0x17, 0xbd, 0x28, 0xd8, 0x99, 0x3b, 0x2e, 0xda, + 0x1b, 0x4b, 0x40, 0x71, 0x92, 0xb2, 0xfd, 0xaf, 0x0b, 0x70, 0x74, 0xf6, 0x6e, 0x2b, 0x20, 0x0b, + 0x6e, 0xb8, 0x95, 0xdc, 0x70, 0x35, 0x37, 0xdc, 0x5a, 0x8d, 0x47, 0x40, 0xad, 0xf4, 0x05, 0x51, + 0x8e, 0x15, 0x06, 0x7a, 0x06, 0xfa, 0xe9, 0xef, 0xeb, 0x78, 0x59, 0x7c, 0xf2, 0xa4, 0x40, 0x1e, + 0x5a, 0x70, 0x22, 0x67, 0x81, 0x83, 0xb0, 0xc4, 0x41, 0x2b, 0x30, 0x54, 0x65, 0xe7, 0xc3, 0xc6, + 0x8a, 0x5f, 0x23, 0x6c, 0x6d, 0x0d, 0xce, 0x3d, 0x45, 0xd1, 0xe7, 0xe3, 0xe2, 0xfd, 0xdd, 0xd2, + 0x14, 0xef, 0x9b, 0x20, 0xa1, 0xc1, 0xb0, 0x5e, 0x1f, 0xd9, 0x6a, 0xbb, 0xf7, 0x30, 0x4a, 0x90, + 0xb1, 0xd5, 0xcf, 0x69, 0x3b, 0xb7, 0x97, 0xed, 0xdc, 0xe1, 0xec, 0x5d, 0x8b, 0x2e, 0x40, 0xcf, + 0x96, 0xeb, 0xd5, 0xa6, 0xfa, 0x18, 0xad, 0x53, 0x74, 0xce, 0xaf, 0xb8, 0x5e, 0x6d, 0x7f, 0xb7, + 0x34, 0x61, 0x74, 0x87, 0x16, 0x62, 0x86, 0x6a, 0xff, 0x0f, 0x0b, 0x4a, 0x0c, 0xb6, 0xe4, 0xd6, + 0x49, 0x99, 0x04, 0xa1, 0x1b, 0x46, 0xc4, 0x8b, 0x8c, 0x01, 0x7d, 0x16, 0x20, 0x24, 0xd5, 0x80, + 0x44, 0xda, 0x90, 0xaa, 0x85, 0x51, 0x51, 0x10, 0xac, 0x61, 0xd1, 0xf3, 0x29, 0xdc, 0x74, 0x02, + 0xb6, 0xbe, 0xc4, 0xc0, 0xaa, 0xf3, 0xa9, 0x22, 0x01, 0x38, 0xc6, 0x31, 0xce, 0xa7, 0x62, 0xa7, + 0xf3, 0x09, 0x7d, 0x04, 0xc6, 0xe2, 0xc6, 0xc2, 0xa6, 0x53, 0x95, 0x03, 0xc8, 0x76, 0x70, 0xc5, + 0x04, 0xe1, 0x24, 0xae, 0xfd, 0x0f, 0x2d, 0xb1, 0x78, 0xe8, 0x57, 0xbf, 0xcb, 0xbf, 0xd5, 0xfe, + 0x55, 0x0b, 0xfa, 0xe7, 0x5c, 0xaf, 0xe6, 0x7a, 0x1b, 0xe8, 0x53, 0x30, 0x40, 0xaf, 0xca, 0x9a, + 0x13, 0x39, 0xe2, 0x18, 0xfe, 0xa0, 0xb6, 0xb7, 0xd4, 0xcd, 0x35, 0xd3, 0xdc, 0xda, 0xa0, 0x05, + 0xe1, 0x0c, 0xc5, 0xa6, 0xbb, 0xed, 0xda, 0xad, 0x4f, 0x93, 0x6a, 0xb4, 0x42, 0x22, 0x27, 0xfe, + 0x9c, 0xb8, 0x0c, 0x2b, 0xaa, 0xe8, 0x0a, 0xf4, 0x45, 0x4e, 0xb0, 0x41, 0x22, 0x71, 0x1e, 0x67, + 0x9e, 0x9b, 0xbc, 0x26, 0xa6, 0x3b, 0x92, 0x78, 0x55, 0x12, 0xdf, 0x52, 0x6b, 0xac, 0x2a, 0x16, + 0x24, 0xec, 0xff, 0xd3, 0x0f, 0x27, 0xe6, 0x2b, 0xcb, 0x39, 0xeb, 0xea, 0x2c, 0xf4, 0xd5, 0x02, + 0x77, 0x9b, 0x04, 0x62, 0x9c, 0x15, 0x95, 0x05, 0x56, 0x8a, 0x05, 0x14, 0x5d, 0x84, 0x61, 0x7e, + 0x3f, 0x5e, 0x76, 0xbc, 0x5a, 0x7c, 0x3c, 0x0a, 0xec, 0xe1, 0x1b, 0x1a, 0x0c, 0x1b, 0x98, 0x07, + 0x5c, 0x54, 0x67, 0x13, 0x9b, 0x31, 0xef, 0xee, 0xfd, 0xbc, 0x05, 0xe3, 0xbc, 0x99, 0xd9, 0x28, + 0x0a, 0xdc, 0x5b, 0xad, 0x88, 0x84, 0x53, 0xbd, 0xec, 0xa4, 0x9b, 0xcf, 0x1a, 0xad, 0xdc, 0x11, + 0x98, 0xb9, 0x91, 0xa0, 0xc2, 0x0f, 0xc1, 0x29, 0xd1, 0xee, 0x78, 0x12, 0x8c, 0x53, 0xcd, 0xa2, + 0xef, 0xb3, 0x60, 0xba, 0xea, 0x7b, 0x51, 0xe0, 0xd7, 0xeb, 0x24, 0x28, 0xb7, 0x6e, 0xd5, 0xdd, + 0x70, 0x93, 0xaf, 0x53, 0x4c, 0xd6, 0xd9, 0x49, 0x90, 0x33, 0x87, 0x0a, 0x49, 0xcc, 0xe1, 0xe9, + 0xbd, 0xdd, 0xd2, 0xf4, 0x7c, 0x2e, 0x29, 0xdc, 0xa6, 0x19, 0xb4, 0x05, 0x88, 0xde, 0xec, 0x95, + 0xc8, 0xd9, 0x20, 0x71, 0xe3, 0xfd, 0xdd, 0x37, 0x7e, 0x6c, 0x6f, 0xb7, 0x84, 0x56, 0x53, 0x24, + 0x70, 0x06, 0x59, 0xf4, 0x36, 0x1c, 0xa1, 0xa5, 0xa9, 0x6f, 0x1d, 0xe8, 0xbe, 0xb9, 0xa9, 0xbd, + 0xdd, 0xd2, 0x91, 0xd5, 0x0c, 0x22, 0x38, 0x93, 0x34, 0xfa, 0x1e, 0x0b, 0x4e, 0xc4, 0x9f, 0xbf, + 0x78, 0xa7, 0xe9, 0x78, 0xb5, 0xb8, 0xe1, 0xc1, 0xee, 0x1b, 0xa6, 0x67, 0xf2, 0x89, 0xf9, 0x3c, + 0x4a, 0x38, 0xbf, 0x11, 0xe4, 0xc1, 0x24, 0xed, 0x5a, 0xb2, 0x6d, 0xe8, 0xbe, 0xed, 0xe3, 0x7b, + 0xbb, 0xa5, 0xc9, 0xd5, 0x34, 0x0d, 0x9c, 0x45, 0x78, 0x7a, 0x1e, 0x8e, 0x66, 0xae, 0x4e, 0x34, + 0x0e, 0xc5, 0x2d, 0xc2, 0x99, 0xc0, 0x41, 0x4c, 0x7f, 0xa2, 0x23, 0xd0, 0xbb, 0xed, 0xd4, 0x5b, + 0x62, 0x63, 0x62, 0xfe, 0xe7, 0xa5, 0xc2, 0x45, 0xcb, 0xfe, 0x37, 0x45, 0x18, 0x9b, 0xaf, 0x2c, + 0xdf, 0xd3, 0xae, 0xd7, 0xaf, 0xbd, 0x42, 0xdb, 0x6b, 0x2f, 0xbe, 0x44, 0x8b, 0xb9, 0x97, 0xe8, + 0x77, 0x67, 0x6c, 0xd9, 0x1e, 0xb6, 0x65, 0x3f, 0x9c, 0xb3, 0x65, 0xef, 0xf3, 0x46, 0xdd, 0xce, + 0x59, 0xb5, 0xbd, 0x6c, 0x02, 0x33, 0x39, 0x24, 0xc6, 0xfb, 0x25, 0x8f, 0xda, 0x03, 0x2e, 0xdd, + 0xfb, 0x33, 0x8f, 0x55, 0x18, 0x9e, 0x77, 0x9a, 0xce, 0x2d, 0xb7, 0xee, 0x46, 0x2e, 0x09, 0xd1, + 0xe3, 0x50, 0x74, 0x6a, 0x35, 0xc6, 0xdd, 0x0d, 0xce, 0x1d, 0xdd, 0xdb, 0x2d, 0x15, 0x67, 0x6b, + 0x94, 0xcd, 0x00, 0x85, 0xb5, 0x83, 0x29, 0x06, 0x7a, 0x12, 0x7a, 0x6a, 0x81, 0xdf, 0x9c, 0x2a, + 0x30, 0x4c, 0xba, 0xcb, 0x7b, 0x16, 0x02, 0xbf, 0x99, 0x40, 0x65, 0x38, 0xf6, 0x6f, 0x17, 0xe0, + 0xe4, 0x3c, 0x69, 0x6e, 0x2e, 0x55, 0x72, 0xee, 0x8b, 0x73, 0x30, 0xd0, 0xf0, 0x3d, 0x37, 0xf2, + 0x83, 0x50, 0x34, 0xcd, 0x56, 0xc4, 0x8a, 0x28, 0xc3, 0x0a, 0x8a, 0xce, 0x40, 0x4f, 0x33, 0x66, + 0x62, 0x87, 0x25, 0x03, 0xcc, 0xd8, 0x57, 0x06, 0xa1, 0x18, 0xad, 0x90, 0x04, 0x62, 0xc5, 0x28, + 0x8c, 0xeb, 0x21, 0x09, 0x30, 0x83, 0xc4, 0x9c, 0x00, 0xe5, 0x11, 0xc4, 0x8d, 0x90, 0xe0, 0x04, + 0x28, 0x04, 0x6b, 0x58, 0xa8, 0x0c, 0x83, 0x61, 0x62, 0x66, 0xbb, 0xda, 0x9a, 0x23, 0x8c, 0x55, + 0x50, 0x33, 0x19, 0x13, 0x31, 0x6e, 0xb0, 0xbe, 0x8e, 0xac, 0xc2, 0xd7, 0x0a, 0x80, 0xf8, 0x10, + 0x7e, 0x9b, 0x0d, 0xdc, 0xf5, 0xf4, 0xc0, 0x75, 0xbf, 0x25, 0xee, 0xd7, 0xe8, 0xfd, 0x4f, 0x0b, + 0x4e, 0xce, 0xbb, 0x5e, 0x8d, 0x04, 0x39, 0x0b, 0xf0, 0xc1, 0x3c, 0xe5, 0x0f, 0xc6, 0xa4, 0x18, + 0x4b, 0xac, 0xe7, 0x3e, 0x2c, 0x31, 0xfb, 0x2f, 0x2c, 0x40, 0xfc, 0xb3, 0xdf, 0x75, 0x1f, 0x7b, + 0x3d, 0xfd, 0xb1, 0xf7, 0x61, 0x59, 0xd8, 0x57, 0x61, 0x74, 0xbe, 0xee, 0x12, 0x2f, 0x5a, 0x2e, + 0xcf, 0xfb, 0xde, 0xba, 0xbb, 0x81, 0x5e, 0x82, 0xd1, 0xc8, 0x6d, 0x10, 0xbf, 0x15, 0x55, 0x48, + 0xd5, 0xf7, 0xd8, 0xcb, 0xd5, 0x3a, 0xd7, 0x3b, 0x87, 0xf6, 0x76, 0x4b, 0xa3, 0x6b, 0x06, 0x04, + 0x27, 0x30, 0xed, 0x9f, 0xa1, 0xe7, 0x56, 0xbd, 0x15, 0x46, 0x24, 0x58, 0x0b, 0x5a, 0x61, 0x34, + 0xd7, 0xa2, 0xbc, 0x67, 0x39, 0xf0, 0x69, 0x77, 0x5c, 0xdf, 0x43, 0x27, 0x8d, 0xe7, 0xf8, 0x80, + 0x7c, 0x8a, 0x8b, 0x67, 0xf7, 0x0c, 0x40, 0xe8, 0x6e, 0x78, 0x24, 0xd0, 0x9e, 0x0f, 0xa3, 0x6c, + 0xab, 0xa8, 0x52, 0xac, 0x61, 0xa0, 0x3a, 0x8c, 0xd4, 0x9d, 0x5b, 0xa4, 0x5e, 0x21, 0x75, 0x52, + 0x8d, 0xfc, 0x40, 0xc8, 0x37, 0x9e, 0xeb, 0xee, 0x1d, 0x70, 0x55, 0xaf, 0x3a, 0x37, 0xb1, 0xb7, + 0x5b, 0x1a, 0x31, 0x8a, 0xb0, 0x49, 0x9c, 0x1e, 0x1d, 0x7e, 0x93, 0x7e, 0x85, 0x53, 0xd7, 0x1f, + 0x9f, 0xd7, 0x44, 0x19, 0x56, 0x50, 0x75, 0x74, 0xf4, 0xe4, 0x1d, 0x1d, 0xf6, 0x1f, 0xd1, 0x85, + 0xe6, 0x37, 0x9a, 0xbe, 0x47, 0xbc, 0x68, 0xde, 0xf7, 0x6a, 0x5c, 0x32, 0xf5, 0x92, 0x21, 0x3a, + 0x39, 0x9b, 0x10, 0x9d, 0x1c, 0x4b, 0xd7, 0xd0, 0xa4, 0x27, 0x1f, 0x86, 0xbe, 0x30, 0x72, 0xa2, + 0x56, 0x28, 0x06, 0xee, 0x61, 0xb9, 0xec, 0x2a, 0xac, 0x74, 0x7f, 0xb7, 0x34, 0xa6, 0xaa, 0xf1, + 0x22, 0x2c, 0x2a, 0xa0, 0x27, 0xa0, 0xbf, 0x41, 0xc2, 0xd0, 0xd9, 0x90, 0x6c, 0xc3, 0x98, 0xa8, + 0xdb, 0xbf, 0xc2, 0x8b, 0xb1, 0x84, 0xa3, 0x47, 0xa0, 0x97, 0x04, 0x81, 0x1f, 0x88, 0x6f, 0x1b, + 0x11, 0x88, 0xbd, 0x8b, 0xb4, 0x10, 0x73, 0x98, 0xfd, 0x1f, 0x2c, 0x18, 0x53, 0x7d, 0xe5, 0x6d, + 0x1d, 0xc2, 0x73, 0xed, 0x4d, 0x80, 0xaa, 0xfc, 0xc0, 0x90, 0x5d, 0xb3, 0x43, 0xcf, 0x9e, 0xcd, + 0xe4, 0x68, 0x52, 0xc3, 0x18, 0x53, 0x56, 0x45, 0x21, 0xd6, 0xa8, 0xd9, 0xbf, 0x61, 0xc1, 0x64, + 0xe2, 0x8b, 0xae, 0xba, 0x61, 0x84, 0xde, 0x4a, 0x7d, 0xd5, 0x4c, 0x97, 0x8b, 0xcf, 0x0d, 0xf9, + 0x37, 0xa9, 0x3d, 0x2f, 0x4b, 0xb4, 0x2f, 0xba, 0x0c, 0xbd, 0x6e, 0x44, 0x1a, 0xf2, 0x63, 0x1e, + 0x69, 0xfb, 0x31, 0xbc, 0x57, 0xf1, 0x8c, 0x2c, 0xd3, 0x9a, 0x98, 0x13, 0xb0, 0x7f, 0xbb, 0x08, + 0x83, 0x7c, 0x7f, 0xaf, 0x38, 0xcd, 0x43, 0x98, 0x8b, 0xa7, 0x60, 0xd0, 0x6d, 0x34, 0x5a, 0x91, + 0x73, 0x4b, 0xdc, 0x7b, 0x03, 0xfc, 0x0c, 0x5a, 0x96, 0x85, 0x38, 0x86, 0xa3, 0x65, 0xe8, 0x61, + 0x5d, 0xe1, 0x5f, 0xf9, 0x78, 0xf6, 0x57, 0x8a, 0xbe, 0xcf, 0x2c, 0x38, 0x91, 0xc3, 0x59, 0x4e, + 0xb5, 0xaf, 0x68, 0x11, 0x66, 0x24, 0x90, 0x03, 0x70, 0xcb, 0xf5, 0x9c, 0x60, 0x87, 0x96, 0x4d, + 0x15, 0x19, 0xc1, 0x67, 0xda, 0x13, 0x9c, 0x53, 0xf8, 0x9c, 0xac, 0xfa, 0xb0, 0x18, 0x80, 0x35, + 0xa2, 0xd3, 0x2f, 0xc2, 0xa0, 0x42, 0x3e, 0x08, 0xe7, 0x38, 0xfd, 0x11, 0x18, 0x4b, 0xb4, 0xd5, + 0xa9, 0xfa, 0xb0, 0xce, 0x78, 0xfe, 0x1a, 0x3b, 0x32, 0x44, 0xaf, 0x17, 0xbd, 0x6d, 0x71, 0x37, + 0xdd, 0x85, 0x23, 0xf5, 0x8c, 0x23, 0x5f, 0xcc, 0x6b, 0xf7, 0x57, 0xc4, 0x49, 0xf1, 0xd9, 0x47, + 0xb2, 0xa0, 0x38, 0xb3, 0x0d, 0xe3, 0x44, 0x2c, 0xb4, 0x3b, 0x11, 0xe9, 0x79, 0x77, 0x44, 0x75, + 0xfe, 0x0a, 0xd9, 0x51, 0x87, 0xea, 0xb7, 0xb2, 0xfb, 0xa7, 0xf8, 0xe8, 0xf3, 0xe3, 0x72, 0x48, + 0x10, 0x28, 0x5e, 0x21, 0x3b, 0x7c, 0x2a, 0xf4, 0xaf, 0x2b, 0xb6, 0xfd, 0xba, 0xaf, 0x58, 0x30, + 0xa2, 0xbe, 0xee, 0x10, 0xce, 0x85, 0x39, 0xf3, 0x5c, 0x38, 0xd5, 0x76, 0x81, 0xe7, 0x9c, 0x08, + 0x5f, 0x2b, 0xc0, 0x09, 0x85, 0x43, 0x1f, 0x51, 0xfc, 0x8f, 0x58, 0x55, 0xe7, 0x61, 0xd0, 0x53, + 0xe2, 0x44, 0xcb, 0x94, 0xe3, 0xc5, 0xc2, 0xc4, 0x18, 0x87, 0x5e, 0x79, 0x5e, 0x7c, 0x69, 0x0f, + 0xeb, 0x72, 0x76, 0x71, 0xb9, 0xcf, 0x41, 0xb1, 0xe5, 0xd6, 0xc4, 0x05, 0xf3, 0x41, 0x39, 0xda, + 0xd7, 0x97, 0x17, 0xf6, 0x77, 0x4b, 0x0f, 0xe7, 0xa9, 0x9c, 0xe8, 0xcd, 0x16, 0xce, 0x5c, 0x5f, + 0x5e, 0xc0, 0xb4, 0x32, 0x9a, 0x85, 0x31, 0xa9, 0x55, 0xbb, 0x41, 0xf9, 0x52, 0xdf, 0x13, 0xf7, + 0x90, 0x12, 0x96, 0x63, 0x13, 0x8c, 0x93, 0xf8, 0x68, 0x01, 0xc6, 0xb7, 0x5a, 0xb7, 0x48, 0x9d, + 0x44, 0xfc, 0x83, 0xaf, 0x10, 0x2e, 0x4a, 0x1e, 0x8c, 0x9f, 0xb0, 0x57, 0x12, 0x70, 0x9c, 0xaa, + 0x61, 0xff, 0x0d, 0xbb, 0x0f, 0xc4, 0xe8, 0x69, 0xfc, 0xcd, 0xb7, 0x72, 0x39, 0x77, 0xb3, 0x2a, + 0xae, 0x90, 0x9d, 0x35, 0x9f, 0xf2, 0x21, 0xd9, 0xab, 0xc2, 0x58, 0xf3, 0x3d, 0x6d, 0xd7, 0xfc, + 0x2f, 0x15, 0xe0, 0xa8, 0x1a, 0x01, 0x83, 0x5b, 0xfe, 0x76, 0x1f, 0x83, 0x0b, 0x30, 0x54, 0x23, + 0xeb, 0x4e, 0xab, 0x1e, 0x29, 0xbd, 0x46, 0x2f, 0x57, 0xb5, 0x2d, 0xc4, 0xc5, 0x58, 0xc7, 0x39, + 0xc0, 0xb0, 0xfd, 0xc2, 0x08, 0xbb, 0x88, 0x23, 0x87, 0xae, 0x71, 0xb5, 0x6b, 0xac, 0xdc, 0x5d, + 0xf3, 0x08, 0xf4, 0xba, 0x0d, 0xca, 0x98, 0x15, 0x4c, 0x7e, 0x6b, 0x99, 0x16, 0x62, 0x0e, 0x43, + 0x8f, 0x41, 0x7f, 0xd5, 0x6f, 0x34, 0x1c, 0xaf, 0xc6, 0xae, 0xbc, 0xc1, 0xb9, 0x21, 0xca, 0xbb, + 0xcd, 0xf3, 0x22, 0x2c, 0x61, 0x94, 0xf9, 0x76, 0x82, 0x0d, 0x2e, 0xec, 0x11, 0xcc, 0xf7, 0x6c, + 0xb0, 0x11, 0x62, 0x56, 0x4a, 0xdf, 0xaa, 0xb7, 0xfd, 0x60, 0xcb, 0xf5, 0x36, 0x16, 0xdc, 0x40, + 0x6c, 0x09, 0x75, 0x17, 0xde, 0x54, 0x10, 0xac, 0x61, 0xa1, 0x25, 0xe8, 0x6d, 0xfa, 0x41, 0x14, + 0x4e, 0xf5, 0xb1, 0xe1, 0x7e, 0x38, 0xe7, 0x20, 0xe2, 0x5f, 0x5b, 0xf6, 0x83, 0x28, 0xfe, 0x00, + 0xfa, 0x2f, 0xc4, 0xbc, 0x3a, 0xba, 0x0a, 0xfd, 0xc4, 0xdb, 0x5e, 0x0a, 0xfc, 0xc6, 0xd4, 0x64, + 0x3e, 0xa5, 0x45, 0x8e, 0xc2, 0x97, 0x59, 0xcc, 0xa3, 0x8a, 0x62, 0x2c, 0x49, 0xa0, 0x0f, 0x43, + 0x91, 0x78, 0xdb, 0x53, 0xfd, 0x8c, 0xd2, 0x74, 0x0e, 0xa5, 0x1b, 0x4e, 0x10, 0x9f, 0xf9, 0x8b, + 0xde, 0x36, 0xa6, 0x75, 0xd0, 0xc7, 0x60, 0x50, 0x1e, 0x18, 0xa1, 0x90, 0xa2, 0x66, 0x2e, 0x58, + 0x79, 0xcc, 0x60, 0xf2, 0x76, 0xcb, 0x0d, 0x48, 0x83, 0x78, 0x51, 0x18, 0x9f, 0x90, 0x12, 0x1a, + 0xe2, 0x98, 0x1a, 0xaa, 0xc2, 0x70, 0x40, 0x42, 0xf7, 0x2e, 0x29, 0xfb, 0x75, 0xb7, 0xba, 0x33, + 0x75, 0x9c, 0x75, 0xef, 0x89, 0xb6, 0x43, 0x86, 0xb5, 0x0a, 0xb1, 0x94, 0x5f, 0x2f, 0xc5, 0x06, + 0x51, 0xf4, 0x06, 0x8c, 0x04, 0x24, 0x8c, 0x9c, 0x20, 0x12, 0xad, 0x4c, 0x29, 0xad, 0xdc, 0x08, + 0xd6, 0x01, 0xfc, 0x39, 0x11, 0x37, 0x13, 0x43, 0xb0, 0x49, 0x01, 0x7d, 0x4c, 0xaa, 0x1c, 0x56, + 0xfc, 0x96, 0x17, 0x85, 0x53, 0x83, 0xac, 0xdf, 0x99, 0xba, 0xe9, 0x1b, 0x31, 0x5e, 0x52, 0x27, + 0xc1, 0x2b, 0x63, 0x83, 0x14, 0xfa, 0x04, 0x8c, 0xf0, 0xff, 0x5c, 0xa5, 0x1a, 0x4e, 0x1d, 0x65, + 0xb4, 0xcf, 0xe4, 0xd3, 0xe6, 0x88, 0x73, 0x47, 0x05, 0xf1, 0x11, 0xbd, 0x34, 0xc4, 0x26, 0x35, + 0x84, 0x61, 0xa4, 0xee, 0x6e, 0x13, 0x8f, 0x84, 0x61, 0x39, 0xf0, 0x6f, 0x11, 0x21, 0x21, 0x3e, + 0x91, 0xad, 0x82, 0xf5, 0x6f, 0x11, 0xf1, 0x08, 0xd4, 0xeb, 0x60, 0x93, 0x04, 0xba, 0x0e, 0xa3, + 0xf4, 0x49, 0xee, 0xc6, 0x44, 0x87, 0x3a, 0x11, 0x65, 0x0f, 0x67, 0x6c, 0x54, 0xc2, 0x09, 0x22, + 0xe8, 0x1a, 0x0c, 0xb3, 0x31, 0x6f, 0x35, 0x39, 0xd1, 0x63, 0x9d, 0x88, 0x32, 0x83, 0x82, 0x8a, + 0x56, 0x05, 0x1b, 0x04, 0xd0, 0xeb, 0x30, 0x58, 0x77, 0xd7, 0x49, 0x75, 0xa7, 0x5a, 0x27, 0x53, + 0xc3, 0x8c, 0x5a, 0xe6, 0x61, 0x78, 0x55, 0x22, 0x71, 0xfe, 0x5c, 0xfd, 0xc5, 0x71, 0x75, 0x74, + 0x03, 0x8e, 0x45, 0x24, 0x68, 0xb8, 0x9e, 0x43, 0x0f, 0x31, 0xf1, 0x24, 0x64, 0x9a, 0xf1, 0x11, + 0xb6, 0xba, 0x4e, 0x8b, 0xd9, 0x38, 0xb6, 0x96, 0x89, 0x85, 0x73, 0x6a, 0xa3, 0x3b, 0x30, 0x95, + 0x01, 0xe1, 0xeb, 0xf6, 0x08, 0xa3, 0xfc, 0x8a, 0xa0, 0x3c, 0xb5, 0x96, 0x83, 0xb7, 0xdf, 0x06, + 0x86, 0x73, 0xa9, 0xa3, 0x6b, 0x30, 0xc6, 0x4e, 0xce, 0x72, 0xab, 0x5e, 0x17, 0x0d, 0x8e, 0xb2, + 0x06, 0x1f, 0x93, 0x7c, 0xc4, 0xb2, 0x09, 0xde, 0xdf, 0x2d, 0x41, 0xfc, 0x0f, 0x27, 0x6b, 0xa3, + 0x5b, 0x4c, 0x09, 0xdb, 0x0a, 0xdc, 0x68, 0x87, 0xee, 0x2a, 0x72, 0x27, 0x9a, 0x1a, 0x6b, 0x2b, + 0x90, 0xd2, 0x51, 0x95, 0xa6, 0x56, 0x2f, 0xc4, 0x49, 0x82, 0xf4, 0x2a, 0x08, 0xa3, 0x9a, 0xeb, + 0x4d, 0x8d, 0xf3, 0xf7, 0x94, 0x3c, 0x49, 0x2b, 0xb4, 0x10, 0x73, 0x18, 0x53, 0xc0, 0xd2, 0x1f, + 0xd7, 0xe8, 0x8d, 0x3b, 0xc1, 0x10, 0x63, 0x05, 0xac, 0x04, 0xe0, 0x18, 0x87, 0x32, 0xc1, 0x51, + 0xb4, 0x33, 0x85, 0x18, 0xaa, 0x3a, 0x10, 0xd7, 0xd6, 0x3e, 0x86, 0x69, 0xb9, 0x7d, 0x0b, 0x46, + 0xd5, 0x31, 0xc1, 0xc6, 0x04, 0x95, 0xa0, 0x97, 0xb1, 0x7d, 0x42, 0x7c, 0x3a, 0x48, 0xbb, 0xc0, + 0x58, 0x42, 0xcc, 0xcb, 0x59, 0x17, 0xdc, 0xbb, 0x64, 0x6e, 0x27, 0x22, 0x5c, 0x16, 0x51, 0xd4, + 0xba, 0x20, 0x01, 0x38, 0xc6, 0xb1, 0xff, 0x2f, 0x67, 0x9f, 0xe3, 0x5b, 0xa2, 0x8b, 0x7b, 0xf1, + 0x69, 0x18, 0x60, 0x86, 0x1f, 0x7e, 0xc0, 0xb5, 0xb3, 0xbd, 0x31, 0xc3, 0x7c, 0x59, 0x94, 0x63, + 0x85, 0x81, 0x5e, 0x86, 0x91, 0xaa, 0xde, 0x80, 0xb8, 0xd4, 0xd5, 0x31, 0x62, 0xb4, 0x8e, 0x4d, + 0x5c, 0x74, 0x11, 0x06, 0x98, 0x8d, 0x53, 0xd5, 0xaf, 0x0b, 0x6e, 0x53, 0x72, 0x26, 0x03, 0x65, + 0x51, 0xbe, 0xaf, 0xfd, 0xc6, 0x0a, 0x1b, 0x9d, 0x85, 0x3e, 0xda, 0x85, 0xe5, 0xb2, 0xb8, 0x4e, + 0x95, 0x24, 0xf0, 0x32, 0x2b, 0xc5, 0x02, 0x6a, 0xff, 0x86, 0xc5, 0x78, 0xa9, 0xf4, 0x99, 0x8f, + 0x2e, 0xb3, 0x4b, 0x83, 0xdd, 0x20, 0x9a, 0x16, 0xfe, 0x51, 0xed, 0x26, 0x50, 0xb0, 0xfd, 0xc4, + 0x7f, 0x6c, 0xd4, 0x44, 0x6f, 0x26, 0x6f, 0x06, 0xce, 0x50, 0x3c, 0x2f, 0x87, 0x20, 0x79, 0x3b, + 0x3c, 0x14, 0x5f, 0x71, 0xb4, 0x3f, 0xed, 0xae, 0x08, 0xfb, 0x47, 0x0a, 0xda, 0x2a, 0xa9, 0x44, + 0x4e, 0x44, 0x50, 0x19, 0xfa, 0x6f, 0x3b, 0x6e, 0xe4, 0x7a, 0x1b, 0x82, 0xef, 0x6b, 0x7f, 0xd1, + 0xb1, 0x4a, 0x37, 0x79, 0x05, 0xce, 0xbd, 0x88, 0x3f, 0x58, 0x92, 0xa1, 0x14, 0x83, 0x96, 0xe7, + 0x51, 0x8a, 0x85, 0x6e, 0x29, 0x62, 0x5e, 0x81, 0x53, 0x14, 0x7f, 0xb0, 0x24, 0x83, 0xde, 0x02, + 0x90, 0x27, 0x04, 0xa9, 0x09, 0xd9, 0xe1, 0xd3, 0x9d, 0x89, 0xae, 0xa9, 0x3a, 0x5c, 0x38, 0x19, + 0xff, 0xc7, 0x1a, 0x3d, 0x3b, 0xd2, 0xe6, 0x54, 0xef, 0x0c, 0xfa, 0x38, 0xdd, 0xa2, 0x4e, 0x10, + 0x91, 0xda, 0x6c, 0x24, 0x06, 0xe7, 0xc9, 0xee, 0x1e, 0x87, 0x6b, 0x6e, 0x83, 0xe8, 0xdb, 0x59, + 0x10, 0xc1, 0x31, 0x3d, 0xfb, 0x57, 0x8a, 0x30, 0x95, 0xd7, 0x5d, 0xba, 0x69, 0xc8, 0x1d, 0x37, + 0x9a, 0xa7, 0x6c, 0xad, 0x65, 0x6e, 0x9a, 0x45, 0x51, 0x8e, 0x15, 0x06, 0x5d, 0xbd, 0xa1, 0xbb, + 0x21, 0xdf, 0xf6, 0xbd, 0xf1, 0xea, 0xad, 0xb0, 0x52, 0x2c, 0xa0, 0x14, 0x2f, 0x20, 0x4e, 0x28, + 0x8c, 0xef, 0xb4, 0x55, 0x8e, 0x59, 0x29, 0x16, 0x50, 0x5d, 0xca, 0xd8, 0xd3, 0x41, 0xca, 0x68, + 0x0c, 0x51, 0xef, 0xfd, 0x1d, 0x22, 0xf4, 0x49, 0x80, 0x75, 0xd7, 0x73, 0xc3, 0x4d, 0x46, 0xbd, + 0xef, 0xc0, 0xd4, 0x15, 0x53, 0xbc, 0xa4, 0xa8, 0x60, 0x8d, 0x22, 0x7a, 0x01, 0x86, 0xd4, 0x01, + 0xb2, 0xbc, 0xc0, 0x54, 0xff, 0x9a, 0x29, 0x55, 0x7c, 0x9a, 0x2e, 0x60, 0x1d, 0xcf, 0xfe, 0x74, + 0x72, 0xbd, 0x88, 0x1d, 0xa0, 0x8d, 0xaf, 0xd5, 0xed, 0xf8, 0x16, 0xda, 0x8f, 0xaf, 0xfd, 0x63, + 0x83, 0x30, 0x66, 0x34, 0xd6, 0x0a, 0xbb, 0x38, 0x73, 0x2f, 0xd1, 0x0b, 0xc8, 0x89, 0x88, 0xd8, + 0x7f, 0x76, 0xe7, 0xad, 0xa2, 0x5f, 0x52, 0x74, 0x07, 0xf0, 0xfa, 0xe8, 0x93, 0x30, 0x58, 0x77, + 0x42, 0x26, 0xb1, 0x24, 0x62, 0xdf, 0x75, 0x43, 0x2c, 0x7e, 0x10, 0x3a, 0x61, 0xa4, 0xdd, 0xfa, + 0x9c, 0x76, 0x4c, 0x92, 0xde, 0x94, 0x94, 0xbf, 0x92, 0xd6, 0x9d, 0xaa, 0x13, 0x94, 0x09, 0xdb, + 0xc1, 0x1c, 0x86, 0x2e, 0xb2, 0xa3, 0x95, 0xae, 0x8a, 0x79, 0xca, 0x8d, 0xb2, 0x65, 0xd6, 0x6b, + 0x30, 0xd9, 0x0a, 0x86, 0x0d, 0xcc, 0xf8, 0x4d, 0xd6, 0xd7, 0xe6, 0x4d, 0xf6, 0x04, 0xf4, 0xb3, + 0x1f, 0x6a, 0x05, 0xa8, 0xd9, 0x58, 0xe6, 0xc5, 0x58, 0xc2, 0x93, 0x0b, 0x66, 0xa0, 0xbb, 0x05, + 0x43, 0x5f, 0x7d, 0x62, 0x51, 0x33, 0xb3, 0x8b, 0x01, 0x7e, 0xca, 0x89, 0x25, 0x8f, 0x25, 0x0c, + 0xfd, 0xac, 0x05, 0xc8, 0xa9, 0xd3, 0xd7, 0x32, 0x2d, 0x56, 0x8f, 0x1b, 0x60, 0xac, 0xf6, 0xcb, + 0x1d, 0x87, 0xbd, 0x15, 0xce, 0xcc, 0xa6, 0x6a, 0x73, 0x49, 0xe9, 0x4b, 0xa2, 0x8b, 0x28, 0x8d, + 0xa0, 0x5f, 0x46, 0x57, 0xdd, 0x30, 0xfa, 0xec, 0x1f, 0x27, 0x2e, 0xa7, 0x8c, 0x2e, 0xa1, 0xeb, + 0xfa, 0xe3, 0x6b, 0xe8, 0x80, 0x8f, 0xaf, 0x91, 0xdc, 0x87, 0xd7, 0x77, 0x26, 0x1e, 0x30, 0xc3, + 0xec, 0xcb, 0x1f, 0xeb, 0xf0, 0x80, 0x11, 0xe2, 0xf4, 0x6e, 0x9e, 0x31, 0x65, 0xa1, 0x07, 0x1e, + 0x61, 0x5d, 0x6e, 0xff, 0x08, 0xbe, 0x1e, 0x92, 0x60, 0xee, 0x84, 0x54, 0x13, 0xef, 0xeb, 0xbc, + 0x87, 0xa6, 0x37, 0xfe, 0x1e, 0x0b, 0xa6, 0xd2, 0x03, 0xc4, 0xbb, 0x34, 0x35, 0xca, 0xfa, 0x6f, + 0xb7, 0x1b, 0x19, 0xd1, 0x79, 0x69, 0xee, 0x3a, 0x35, 0x9b, 0x43, 0x0b, 0xe7, 0xb6, 0x32, 0xdd, + 0x82, 0xe3, 0x39, 0xf3, 0x9e, 0x21, 0xb5, 0x5e, 0xd0, 0xa5, 0xd6, 0x1d, 0x64, 0x9d, 0x33, 0x72, + 0x66, 0x66, 0xde, 0x68, 0x39, 0x5e, 0xe4, 0x46, 0x3b, 0xba, 0x94, 0xdb, 0x03, 0x73, 0x40, 0xd0, + 0x27, 0xa0, 0xb7, 0xee, 0x7a, 0xad, 0x3b, 0xe2, 0xa6, 0x3c, 0x9b, 0xfd, 0x88, 0xf1, 0x5a, 0x77, + 0xcc, 0x21, 0x2e, 0xd1, 0x0d, 0xc9, 0xca, 0xf7, 0x77, 0x4b, 0x28, 0x8d, 0x80, 0x39, 0x55, 0xfb, + 0x49, 0x18, 0x5d, 0x70, 0x48, 0xc3, 0xf7, 0x16, 0xbd, 0x5a, 0xd3, 0x77, 0xbd, 0x08, 0x4d, 0x41, + 0x0f, 0x63, 0x11, 0xf9, 0x05, 0xd9, 0x43, 0x87, 0x10, 0xb3, 0x12, 0x7b, 0x03, 0x8e, 0x2e, 0xf8, + 0xb7, 0xbd, 0xdb, 0x4e, 0x50, 0x9b, 0x2d, 0x2f, 0x6b, 0x52, 0xbf, 0x55, 0x29, 0x75, 0xb2, 0xf2, + 0xdf, 0xf4, 0x5a, 0x4d, 0xbe, 0x94, 0x96, 0xdc, 0x3a, 0xc9, 0x91, 0xcd, 0xfe, 0x58, 0xc1, 0x68, + 0x29, 0xc6, 0x57, 0x9a, 0x45, 0x2b, 0xd7, 0x28, 0xe1, 0x0d, 0x18, 0x58, 0x77, 0x49, 0xbd, 0x86, + 0xc9, 0xba, 0x98, 0x8d, 0xc7, 0xf3, 0xcd, 0x16, 0x97, 0x28, 0xa6, 0x52, 0x81, 0x32, 0x99, 0xd5, + 0x92, 0xa8, 0x8c, 0x15, 0x19, 0xb4, 0x05, 0xe3, 0x72, 0xce, 0x24, 0x54, 0x9c, 0xda, 0x4f, 0xb4, + 0x5b, 0x84, 0x26, 0x71, 0x66, 0xc2, 0x8d, 0x13, 0x64, 0x70, 0x8a, 0x30, 0x3a, 0x09, 0x3d, 0x0d, + 0xca, 0x9f, 0xf4, 0xb0, 0xe1, 0x67, 0x42, 0x2a, 0x26, 0x6f, 0x63, 0xa5, 0xf6, 0x4f, 0x58, 0x70, + 0x3c, 0x35, 0x32, 0x42, 0xee, 0x78, 0x9f, 0x67, 0x21, 0x29, 0x07, 0x2c, 0x74, 0x96, 0x03, 0xda, + 0xff, 0xc8, 0x82, 0x23, 0x8b, 0x8d, 0x66, 0xb4, 0xb3, 0xe0, 0x9a, 0x16, 0x04, 0x2f, 0x42, 0x5f, + 0x83, 0xd4, 0xdc, 0x56, 0x43, 0xcc, 0x5c, 0x49, 0xde, 0xe1, 0x2b, 0xac, 0x94, 0x9e, 0x03, 0x95, + 0xc8, 0x0f, 0x9c, 0x0d, 0xc2, 0x0b, 0xb0, 0x40, 0x67, 0x9c, 0x90, 0x7b, 0x97, 0x5c, 0x75, 0x1b, + 0x6e, 0x74, 0x6f, 0xbb, 0x4b, 0x28, 0xff, 0x25, 0x11, 0x1c, 0xd3, 0xb3, 0xbf, 0x61, 0xc1, 0x98, + 0x5c, 0xf7, 0xb3, 0xb5, 0x5a, 0x40, 0xc2, 0x10, 0x4d, 0x43, 0xc1, 0x6d, 0x8a, 0x5e, 0x82, 0xe8, + 0x65, 0x61, 0xb9, 0x8c, 0x0b, 0x6e, 0x53, 0x3e, 0xba, 0x18, 0x9b, 0x50, 0x34, 0xed, 0x20, 0x2e, + 0x8b, 0x72, 0xac, 0x30, 0xd0, 0x39, 0x18, 0xf0, 0xfc, 0x1a, 0x7f, 0xb7, 0x08, 0x4d, 0x38, 0xc5, + 0x5c, 0x15, 0x65, 0x58, 0x41, 0x51, 0x19, 0x06, 0xb9, 0x95, 0x6c, 0xbc, 0x68, 0xbb, 0xb2, 0xb5, + 0x65, 0x5f, 0xb6, 0x26, 0x6b, 0xe2, 0x98, 0x88, 0xfd, 0x5b, 0x16, 0x0c, 0xcb, 0x2f, 0xeb, 0xf2, + 0x45, 0x49, 0xb7, 0x56, 0xfc, 0x9a, 0x8c, 0xb7, 0x16, 0x7d, 0x11, 0x32, 0x88, 0xf1, 0x10, 0x2c, + 0x1e, 0xe8, 0x21, 0x78, 0x01, 0x86, 0x9c, 0x66, 0xb3, 0x6c, 0xbe, 0x22, 0xd9, 0x52, 0x9a, 0x8d, + 0x8b, 0xb1, 0x8e, 0x63, 0xff, 0x78, 0x01, 0x46, 0xe5, 0x17, 0x54, 0x5a, 0xb7, 0x42, 0x12, 0xa1, + 0x35, 0x18, 0x74, 0xf8, 0x2c, 0x11, 0xb9, 0xc8, 0x1f, 0xc9, 0x96, 0x6e, 0x1a, 0x53, 0x1a, 0xb3, + 0xc3, 0xb3, 0xb2, 0x36, 0x8e, 0x09, 0xa1, 0x3a, 0x4c, 0x78, 0x7e, 0xc4, 0x58, 0x23, 0x05, 0x6f, + 0xa7, 0x70, 0x4e, 0x52, 0x3f, 0x21, 0xa8, 0x4f, 0xac, 0x26, 0xa9, 0xe0, 0x34, 0x61, 0xb4, 0x28, + 0x25, 0xc6, 0xc5, 0x7c, 0x51, 0x9f, 0x3e, 0x71, 0xd9, 0x02, 0x63, 0xfb, 0xd7, 0x2d, 0x18, 0x94, + 0x68, 0x87, 0x61, 0x5b, 0xb0, 0x02, 0xfd, 0x21, 0x9b, 0x04, 0x39, 0x34, 0x76, 0xbb, 0x8e, 0xf3, + 0xf9, 0x8a, 0x39, 0x3e, 0xfe, 0x3f, 0xc4, 0x92, 0x06, 0x53, 0x18, 0xaa, 0xee, 0xbf, 0x4b, 0x14, + 0x86, 0xaa, 0x3f, 0x39, 0x97, 0xd2, 0x9f, 0xb2, 0x3e, 0x6b, 0x12, 0x78, 0xfa, 0x30, 0x69, 0x06, + 0x64, 0xdd, 0xbd, 0x93, 0x7c, 0x98, 0x94, 0x59, 0x29, 0x16, 0x50, 0xf4, 0x16, 0x0c, 0x57, 0xa5, + 0xa6, 0x28, 0xde, 0xe1, 0x67, 0xdb, 0x6a, 0x2d, 0x95, 0x82, 0x9b, 0x4b, 0x3a, 0xe7, 0xb5, 0xfa, + 0xd8, 0xa0, 0x66, 0x5a, 0x81, 0x15, 0x3b, 0x59, 0x81, 0xc5, 0x74, 0xf3, 0x6d, 0xa2, 0x7e, 0xd2, + 0x82, 0x3e, 0xae, 0x21, 0xe8, 0x4e, 0x41, 0xa3, 0xe9, 0xfb, 0xe3, 0xb1, 0xbb, 0x41, 0x0b, 0x05, + 0x67, 0x83, 0x56, 0x60, 0x90, 0xfd, 0x60, 0x1a, 0x8e, 0x62, 0xbe, 0xcf, 0x18, 0x6f, 0x55, 0xef, + 0xe0, 0x0d, 0x59, 0x0d, 0xc7, 0x14, 0xec, 0x1f, 0x2d, 0xd2, 0xd3, 0x2d, 0x46, 0x35, 0x2e, 0x7d, + 0xeb, 0xc1, 0x5d, 0xfa, 0x85, 0x07, 0x75, 0xe9, 0x6f, 0xc0, 0x58, 0x55, 0xb3, 0x0e, 0x88, 0x67, + 0xf2, 0x5c, 0xdb, 0x45, 0xa2, 0x19, 0x12, 0x70, 0x19, 0xea, 0xbc, 0x49, 0x04, 0x27, 0xa9, 0xa2, + 0x8f, 0xc3, 0x30, 0x9f, 0x67, 0xd1, 0x0a, 0x37, 0xa4, 0x7b, 0x2c, 0x7f, 0xbd, 0xe8, 0x4d, 0x70, + 0x99, 0xbb, 0x56, 0x1d, 0x1b, 0xc4, 0xec, 0xbf, 0xb4, 0x00, 0x2d, 0x36, 0x37, 0x49, 0x83, 0x04, + 0x4e, 0x3d, 0x56, 0xf2, 0x7d, 0xc1, 0x82, 0x29, 0x92, 0x2a, 0x9e, 0xf7, 0x1b, 0x0d, 0xf1, 0xa4, + 0xcf, 0x91, 0x3a, 0x2d, 0xe6, 0xd4, 0x89, 0xd9, 0xfa, 0x3c, 0x0c, 0x9c, 0xdb, 0x1e, 0x5a, 0x81, + 0x49, 0x7e, 0x4b, 0x2a, 0x80, 0x66, 0x6b, 0xf7, 0x90, 0x20, 0x3c, 0xb9, 0x96, 0x46, 0xc1, 0x59, + 0xf5, 0xec, 0x5f, 0x1f, 0x81, 0xdc, 0x5e, 0xbc, 0xaf, 0xdd, 0x7c, 0x5f, 0xbb, 0xf9, 0xbe, 0x76, + 0xf3, 0x7d, 0xed, 0xe6, 0xfb, 0xda, 0xcd, 0xf7, 0xb5, 0x9b, 0xef, 0x52, 0xed, 0xe6, 0xdf, 0xb6, + 0xe0, 0xa8, 0xba, 0xbe, 0x8c, 0x07, 0xfb, 0x67, 0x60, 0x92, 0x6f, 0xb7, 0xf9, 0xba, 0xe3, 0x36, + 0xd6, 0x48, 0xa3, 0x59, 0x77, 0x22, 0x69, 0xc3, 0x74, 0x21, 0x73, 0xe5, 0x26, 0x1c, 0x25, 0x8c, + 0x8a, 0xdc, 0xe3, 0x2c, 0x03, 0x80, 0xb3, 0x9a, 0xb1, 0x7f, 0x65, 0x00, 0x7a, 0x17, 0xb7, 0x89, + 0x17, 0x1d, 0xc2, 0xd3, 0xa6, 0x0a, 0xa3, 0xae, 0xb7, 0xed, 0xd7, 0xb7, 0x49, 0x8d, 0xc3, 0x0f, + 0xf2, 0x02, 0x3f, 0x26, 0x48, 0x8f, 0x2e, 0x1b, 0x24, 0x70, 0x82, 0xe4, 0x83, 0xd0, 0x11, 0x5d, + 0x82, 0x3e, 0x7e, 0xf9, 0x08, 0x05, 0x51, 0xe6, 0x99, 0xcd, 0x06, 0x51, 0x5c, 0xa9, 0xb1, 0xfe, + 0x8a, 0x5f, 0x6e, 0xa2, 0x3a, 0xfa, 0x34, 0x8c, 0xae, 0xbb, 0x41, 0x18, 0xad, 0xb9, 0x0d, 0x7a, + 0x35, 0x34, 0x9a, 0xf7, 0xa0, 0x13, 0x52, 0xe3, 0xb0, 0x64, 0x50, 0xc2, 0x09, 0xca, 0x68, 0x03, + 0x46, 0xea, 0x8e, 0xde, 0x54, 0xff, 0x81, 0x9b, 0x52, 0xb7, 0xc3, 0x55, 0x9d, 0x10, 0x36, 0xe9, + 0xd2, 0xed, 0x54, 0x65, 0x6a, 0x8d, 0x01, 0x26, 0xce, 0x50, 0xdb, 0x89, 0xeb, 0x33, 0x38, 0x8c, + 0x32, 0x68, 0xcc, 0xdd, 0x60, 0xd0, 0x64, 0xd0, 0x34, 0xa7, 0x82, 0x4f, 0xc1, 0x20, 0xa1, 0x43, + 0x48, 0x09, 0x8b, 0x0b, 0xe6, 0x7c, 0x77, 0x7d, 0x5d, 0x71, 0xab, 0x81, 0x6f, 0x6a, 0xe3, 0x16, + 0x25, 0x25, 0x1c, 0x13, 0x45, 0xf3, 0xd0, 0x17, 0x92, 0xc0, 0x55, 0x12, 0xff, 0x36, 0xd3, 0xc8, + 0xd0, 0xb8, 0x4b, 0x23, 0xff, 0x8d, 0x45, 0x55, 0xba, 0xbc, 0x1c, 0x26, 0x8a, 0x65, 0x97, 0x81, + 0xb6, 0xbc, 0x66, 0x59, 0x29, 0x16, 0x50, 0xf4, 0x3a, 0xf4, 0x07, 0xa4, 0xce, 0xd4, 0xbd, 0x23, + 0xdd, 0x2f, 0x72, 0xae, 0x3d, 0xe6, 0xf5, 0xb0, 0x24, 0x80, 0xae, 0x00, 0x0a, 0x08, 0x65, 0xf0, + 0x5c, 0x6f, 0x43, 0x19, 0xe1, 0x8b, 0x83, 0x56, 0x31, 0xd2, 0x38, 0xc6, 0x90, 0xde, 0xac, 0x38, + 0xa3, 0x1a, 0xba, 0x04, 0x13, 0xaa, 0x74, 0xd9, 0x0b, 0x23, 0x87, 0x1e, 0x70, 0x63, 0x8c, 0x96, + 0x92, 0xaf, 0xe0, 0x24, 0x02, 0x4e, 0xd7, 0xb1, 0x7f, 0xde, 0x02, 0x3e, 0xce, 0x87, 0x20, 0x55, + 0x78, 0xd5, 0x94, 0x2a, 0x9c, 0xc8, 0x9d, 0xb9, 0x1c, 0x89, 0xc2, 0xcf, 0x5b, 0x30, 0xa4, 0xcd, + 0x6c, 0xbc, 0x66, 0xad, 0x36, 0x6b, 0xb6, 0x05, 0xe3, 0x74, 0xa5, 0x5f, 0xbb, 0x15, 0x92, 0x60, + 0x9b, 0xd4, 0xd8, 0xc2, 0x2c, 0xdc, 0xdb, 0xc2, 0x54, 0x06, 0xbf, 0x57, 0x13, 0x04, 0x71, 0xaa, + 0x09, 0xfb, 0x53, 0xb2, 0xab, 0xca, 0x3e, 0xba, 0xaa, 0xe6, 0x3c, 0x61, 0x1f, 0xad, 0x66, 0x15, + 0xc7, 0x38, 0x74, 0xab, 0x6d, 0xfa, 0x61, 0x94, 0xb4, 0x8f, 0xbe, 0xec, 0x87, 0x11, 0x66, 0x10, + 0xfb, 0x39, 0x80, 0xc5, 0x3b, 0xa4, 0xca, 0x57, 0xac, 0xfe, 0xe8, 0xb1, 0xf2, 0x1f, 0x3d, 0xf6, + 0x1f, 0x58, 0x30, 0xba, 0x34, 0x6f, 0xdc, 0x5c, 0x33, 0x00, 0xfc, 0xa5, 0x76, 0xf3, 0xe6, 0xaa, + 0x34, 0xd2, 0xe1, 0x76, 0x0a, 0xaa, 0x14, 0x6b, 0x18, 0xe8, 0x04, 0x14, 0xeb, 0x2d, 0x4f, 0x88, + 0x3d, 0xfb, 0xe9, 0xf5, 0x78, 0xb5, 0xe5, 0x61, 0x5a, 0xa6, 0x79, 0xb2, 0x15, 0xbb, 0xf6, 0x64, + 0xeb, 0x18, 0x50, 0x07, 0x95, 0xa0, 0xf7, 0xf6, 0x6d, 0xb7, 0xc6, 0xe3, 0x04, 0x08, 0x03, 0xa2, + 0x9b, 0x37, 0x97, 0x17, 0x42, 0xcc, 0xcb, 0xed, 0x2f, 0x16, 0x61, 0x7a, 0xa9, 0x4e, 0xee, 0xbc, + 0xc3, 0x58, 0x09, 0xdd, 0xfa, 0xe1, 0x1d, 0x4c, 0x80, 0x74, 0x50, 0x5f, 0xcb, 0xce, 0xe3, 0xb1, + 0x0e, 0xfd, 0xdc, 0x3c, 0x58, 0x46, 0x4e, 0xc8, 0x54, 0xca, 0xe6, 0x0f, 0xc8, 0x0c, 0x37, 0x33, + 0x16, 0x4a, 0x59, 0x75, 0x61, 0x8a, 0x52, 0x2c, 0x89, 0x4f, 0xbf, 0x04, 0xc3, 0x3a, 0xe6, 0x81, + 0xbc, 0x9e, 0xbf, 0xb7, 0x08, 0xe3, 0xb4, 0x07, 0x0f, 0x74, 0x22, 0xae, 0xa7, 0x27, 0xe2, 0x7e, + 0x7b, 0xbe, 0x76, 0x9e, 0x8d, 0xb7, 0x92, 0xb3, 0x71, 0x21, 0x6f, 0x36, 0x0e, 0x7b, 0x0e, 0xbe, + 0xcf, 0x82, 0xc9, 0xa5, 0xba, 0x5f, 0xdd, 0x4a, 0x78, 0xa7, 0xbe, 0x00, 0x43, 0xf4, 0x38, 0x0e, + 0x8d, 0x40, 0x2d, 0x46, 0xe8, 0x1e, 0x01, 0xc2, 0x3a, 0x9e, 0x56, 0xed, 0xfa, 0xf5, 0xe5, 0x85, + 0xac, 0x88, 0x3f, 0x02, 0x84, 0x75, 0x3c, 0xfb, 0xf7, 0x2c, 0x38, 0x75, 0x69, 0x7e, 0x31, 0x5e, + 0x8a, 0xa9, 0xa0, 0x43, 0x67, 0xa1, 0xaf, 0x59, 0xd3, 0xba, 0x12, 0x8b, 0x85, 0x17, 0x58, 0x2f, + 0x04, 0xf4, 0xdd, 0x12, 0xdf, 0xeb, 0x3a, 0xc0, 0x25, 0x5c, 0x9e, 0x17, 0xe7, 0xae, 0xd4, 0x02, + 0x59, 0xb9, 0x5a, 0xa0, 0xc7, 0xa0, 0x9f, 0xde, 0x0b, 0x6e, 0x55, 0xf6, 0x9b, 0x9b, 0x5d, 0xf0, + 0x22, 0x2c, 0x61, 0xf6, 0xcf, 0x59, 0x30, 0x79, 0xc9, 0x8d, 0xe8, 0xa5, 0x9d, 0x8c, 0xaa, 0x43, + 0x6f, 0xed, 0xd0, 0x8d, 0xfc, 0x60, 0x27, 0x19, 0x55, 0x07, 0x2b, 0x08, 0xd6, 0xb0, 0xf8, 0x07, + 0x6d, 0xbb, 0xcc, 0xdf, 0xa5, 0x60, 0xea, 0xdd, 0xb0, 0x28, 0xc7, 0x0a, 0x83, 0x8e, 0x57, 0xcd, + 0x0d, 0x98, 0xc8, 0x72, 0x47, 0x1c, 0xdc, 0x6a, 0xbc, 0x16, 0x24, 0x00, 0xc7, 0x38, 0xf6, 0x9f, + 0x5b, 0x50, 0xba, 0xc4, 0xbd, 0x76, 0xd7, 0xc3, 0x9c, 0x43, 0xf7, 0x39, 0x18, 0x24, 0x52, 0x41, + 0x20, 0x7a, 0xad, 0x18, 0x51, 0xa5, 0x39, 0xe0, 0xc1, 0x7d, 0x14, 0x5e, 0x17, 0x2e, 0xf4, 0x07, + 0xf3, 0x81, 0x5e, 0x02, 0x44, 0xf4, 0xb6, 0xf4, 0x68, 0x47, 0x2c, 0x6c, 0xca, 0x62, 0x0a, 0x8a, + 0x33, 0x6a, 0xd8, 0x3f, 0x61, 0xc1, 0x51, 0xf5, 0xc1, 0xef, 0xba, 0xcf, 0xb4, 0xbf, 0x5a, 0x80, + 0x91, 0xcb, 0x6b, 0x6b, 0xe5, 0x4b, 0x24, 0xd2, 0x56, 0x65, 0x7b, 0xb5, 0x3f, 0xd6, 0xb4, 0x97, + 0xed, 0xde, 0x88, 0xad, 0xc8, 0xad, 0xcf, 0xf0, 0x18, 0x7e, 0x33, 0xcb, 0x5e, 0x74, 0x2d, 0xa8, + 0x44, 0x81, 0xeb, 0x6d, 0x64, 0xae, 0x74, 0xc9, 0xb3, 0x14, 0xf3, 0x78, 0x16, 0xf4, 0x1c, 0xf4, + 0xb1, 0x20, 0x82, 0x72, 0x12, 0x1e, 0x52, 0x4f, 0x2c, 0x56, 0xba, 0xbf, 0x5b, 0x1a, 0xbc, 0x8e, + 0x97, 0xf9, 0x1f, 0x2c, 0x50, 0xd1, 0x75, 0x18, 0xda, 0x8c, 0xa2, 0xe6, 0x65, 0xe2, 0xd4, 0x48, + 0x20, 0x4f, 0xd9, 0xd3, 0x59, 0xa7, 0x2c, 0x1d, 0x04, 0x8e, 0x16, 0x1f, 0x4c, 0x71, 0x59, 0x88, + 0x75, 0x3a, 0x76, 0x05, 0x20, 0x86, 0xdd, 0x27, 0xc5, 0x8d, 0xbd, 0x06, 0x83, 0xf4, 0x73, 0x67, + 0xeb, 0xae, 0xd3, 0x5e, 0x35, 0xfe, 0x14, 0x0c, 0x4a, 0xc5, 0x77, 0x28, 0x42, 0x7c, 0xb0, 0x1b, + 0x49, 0xea, 0xc5, 0x43, 0x1c, 0xc3, 0xed, 0x47, 0x41, 0x58, 0x00, 0xb7, 0x23, 0x69, 0xaf, 0xc3, + 0x11, 0x66, 0xca, 0xec, 0x44, 0x9b, 0xc6, 0x1a, 0xed, 0xbc, 0x18, 0x9e, 0x16, 0xef, 0x3a, 0xfe, + 0x65, 0x53, 0x9a, 0x0b, 0xf9, 0xb0, 0xa4, 0x18, 0xbf, 0xf1, 0xec, 0x3f, 0xeb, 0x81, 0x87, 0x96, + 0x2b, 0xf9, 0xb1, 0xa9, 0x2e, 0xc2, 0x30, 0x67, 0x17, 0xe9, 0xd2, 0x70, 0xea, 0xa2, 0x5d, 0x25, + 0x01, 0x5d, 0xd3, 0x60, 0xd8, 0xc0, 0x44, 0xa7, 0xa0, 0xe8, 0xbe, 0xed, 0x25, 0x1d, 0x2c, 0x97, + 0xdf, 0x58, 0xc5, 0xb4, 0x9c, 0x82, 0x29, 0xe7, 0xc9, 0x8f, 0x74, 0x05, 0x56, 0xdc, 0xe7, 0xab, + 0x30, 0xea, 0x86, 0xd5, 0xd0, 0x5d, 0xf6, 0xe8, 0x3e, 0xd5, 0x76, 0xba, 0x92, 0x39, 0xd0, 0x4e, + 0x2b, 0x28, 0x4e, 0x60, 0x6b, 0xf7, 0x4b, 0x6f, 0xd7, 0xdc, 0x6b, 0xc7, 0xc8, 0x18, 0xf4, 0xf8, + 0x6f, 0xb2, 0xaf, 0x0b, 0x99, 0x08, 0x5e, 0x1c, 0xff, 0xfc, 0x83, 0x43, 0x2c, 0x61, 0xf4, 0x41, + 0x57, 0xdd, 0x74, 0x9a, 0xb3, 0xad, 0x68, 0x73, 0xc1, 0x0d, 0xab, 0xfe, 0x36, 0x09, 0x76, 0xd8, + 0x5b, 0x7c, 0x20, 0x7e, 0xd0, 0x29, 0xc0, 0xfc, 0xe5, 0xd9, 0x32, 0xc5, 0xc4, 0xe9, 0x3a, 0x68, + 0x16, 0xc6, 0x64, 0x61, 0x85, 0x84, 0xec, 0x0a, 0x18, 0x62, 0x64, 0x94, 0xcb, 0xa3, 0x28, 0x56, + 0x44, 0x92, 0xf8, 0x26, 0x83, 0x0b, 0xf7, 0x83, 0xc1, 0x7d, 0x11, 0x46, 0x5c, 0xcf, 0x8d, 0x5c, + 0x27, 0xf2, 0xb9, 0xfe, 0x88, 0x3f, 0xbb, 0x99, 0x80, 0x79, 0x59, 0x07, 0x60, 0x13, 0xcf, 0xfe, + 0x6f, 0x3d, 0x30, 0xc1, 0xa6, 0xed, 0xfd, 0x15, 0xf6, 0x5e, 0x5a, 0x61, 0xd7, 0xd3, 0x2b, 0xec, + 0x7e, 0x70, 0xee, 0xf7, 0xbc, 0xcc, 0x3e, 0x67, 0xc1, 0x04, 0x93, 0x71, 0x1b, 0xcb, 0xec, 0x3c, + 0x0c, 0x06, 0x86, 0x37, 0xea, 0xa0, 0xae, 0xd4, 0x92, 0x8e, 0xa5, 0x31, 0x0e, 0x7a, 0x0d, 0xa0, + 0x19, 0xcb, 0xd0, 0x0b, 0x46, 0x08, 0x51, 0xc8, 0x15, 0x9f, 0x6b, 0x75, 0xec, 0x4f, 0xc3, 0xa0, + 0x72, 0x37, 0x95, 0xfe, 0xe6, 0x56, 0x8e, 0xbf, 0x79, 0x67, 0x36, 0x42, 0xda, 0xc6, 0x15, 0x33, + 0x6d, 0xe3, 0xbe, 0x6c, 0x41, 0xac, 0xe1, 0x40, 0x6f, 0xc0, 0x60, 0xd3, 0x67, 0x06, 0xd1, 0x81, + 0xf4, 0x32, 0x78, 0xb4, 0xad, 0x8a, 0x84, 0xc7, 0x09, 0x0c, 0xf8, 0x74, 0x94, 0x65, 0x55, 0x1c, + 0x53, 0x41, 0x57, 0xa0, 0xbf, 0x19, 0x90, 0x4a, 0xc4, 0x82, 0x58, 0x75, 0x4f, 0x90, 0x2f, 0x5f, + 0x5e, 0x11, 0x4b, 0x0a, 0xf6, 0x2f, 0x16, 0x60, 0x3c, 0x89, 0x8a, 0x5e, 0x81, 0x1e, 0x72, 0x87, + 0x54, 0x45, 0x7f, 0x33, 0x79, 0x82, 0x58, 0x46, 0xc2, 0x07, 0x80, 0xfe, 0xc7, 0xac, 0x16, 0xba, + 0x0c, 0xfd, 0x94, 0x21, 0xb8, 0xa4, 0x02, 0x36, 0x3e, 0x9c, 0xc7, 0x54, 0x28, 0xce, 0x8a, 0x77, + 0x4e, 0x14, 0x61, 0x59, 0x9d, 0x19, 0xa4, 0x55, 0x9b, 0x15, 0xfa, 0xd6, 0x8a, 0xda, 0x89, 0x04, + 0xd6, 0xe6, 0xcb, 0x1c, 0x49, 0x50, 0xe3, 0x06, 0x69, 0xb2, 0x10, 0xc7, 0x44, 0xd0, 0x6b, 0xd0, + 0x1b, 0xd6, 0x09, 0x69, 0x0a, 0x8b, 0x83, 0x4c, 0x29, 0x67, 0x85, 0x22, 0x08, 0x4a, 0x4c, 0x2a, + 0xc2, 0x0a, 0x30, 0xaf, 0x68, 0xff, 0x92, 0x05, 0xc0, 0x2d, 0xf8, 0x1c, 0x6f, 0x83, 0x1c, 0x82, + 0x62, 0x60, 0x01, 0x7a, 0xc2, 0x26, 0xa9, 0xb6, 0xb3, 0xf6, 0x8f, 0xfb, 0x53, 0x69, 0x92, 0x6a, + 0xbc, 0x66, 0xe9, 0x3f, 0xcc, 0x6a, 0xdb, 0xdf, 0x0f, 0x30, 0x1a, 0xa3, 0x2d, 0x47, 0xa4, 0x81, + 0x9e, 0x31, 0xa2, 0xdc, 0x9c, 0x48, 0x44, 0xb9, 0x19, 0x64, 0xd8, 0x9a, 0x0c, 0xfa, 0xd3, 0x50, + 0x6c, 0x38, 0x77, 0x84, 0x90, 0xf1, 0xa9, 0xf6, 0xdd, 0xa0, 0xf4, 0x67, 0x56, 0x9c, 0x3b, 0xfc, + 0x1d, 0xfe, 0x94, 0xdc, 0x63, 0x2b, 0xce, 0x9d, 0x8e, 0x16, 0xe9, 0xb4, 0x11, 0xd6, 0x96, 0xeb, + 0x09, 0xe3, 0xb4, 0xae, 0xda, 0x72, 0xbd, 0x64, 0x5b, 0xae, 0xd7, 0x45, 0x5b, 0xae, 0x87, 0xee, + 0x42, 0xbf, 0xb0, 0x1d, 0x15, 0xe1, 0xf7, 0xce, 0x77, 0xd1, 0x9e, 0x30, 0x3d, 0xe5, 0x6d, 0x9e, + 0x97, 0x72, 0x06, 0x51, 0xda, 0xb1, 0x5d, 0xd9, 0x20, 0xfa, 0x3b, 0x16, 0x8c, 0x8a, 0xdf, 0x98, + 0xbc, 0xdd, 0x22, 0x61, 0x24, 0xf8, 0xf0, 0x0f, 0x75, 0xdf, 0x07, 0x51, 0x91, 0x77, 0xe5, 0x43, + 0xf2, 0xca, 0x34, 0x81, 0x1d, 0x7b, 0x94, 0xe8, 0x05, 0xfa, 0x45, 0x0b, 0x8e, 0x34, 0x9c, 0x3b, + 0xbc, 0x45, 0x5e, 0x86, 0x9d, 0xc8, 0xf5, 0x85, 0x0d, 0xc6, 0x2b, 0xdd, 0x4d, 0x7f, 0xaa, 0x3a, + 0xef, 0xa4, 0x54, 0xb8, 0x1e, 0xc9, 0x42, 0xe9, 0xd8, 0xd5, 0xcc, 0x7e, 0x4d, 0xaf, 0xc3, 0x80, + 0x5c, 0x6f, 0x0f, 0xd2, 0x30, 0x9e, 0xb5, 0x23, 0xd6, 0xda, 0x03, 0x6d, 0xe7, 0xd3, 0x30, 0xac, + 0xaf, 0xb1, 0x07, 0xda, 0xd6, 0xdb, 0x30, 0x99, 0xb1, 0x96, 0x1e, 0x68, 0x93, 0xb7, 0xe1, 0x44, + 0xee, 0xfa, 0x78, 0xa0, 0x8e, 0x0d, 0x5f, 0xb5, 0xf4, 0x73, 0xf0, 0x10, 0xb4, 0x33, 0xf3, 0xa6, + 0x76, 0xe6, 0x74, 0xfb, 0x9d, 0x93, 0xa3, 0xa2, 0x79, 0x4b, 0xef, 0x34, 0x3d, 0xd5, 0xd1, 0xeb, + 0xd0, 0x57, 0xa7, 0x25, 0xd2, 0x02, 0xd9, 0xee, 0xbc, 0x23, 0x63, 0xbe, 0x98, 0x95, 0x87, 0x58, + 0x50, 0xb0, 0xbf, 0x64, 0x41, 0x86, 0x6b, 0x06, 0xe5, 0x93, 0x5a, 0x6e, 0x8d, 0x0d, 0x49, 0x31, + 0xe6, 0x93, 0x54, 0x10, 0x98, 0x53, 0x50, 0xdc, 0x70, 0x6b, 0xc2, 0xb3, 0x58, 0x81, 0x2f, 0x51, + 0xf0, 0x86, 0x5b, 0x43, 0x4b, 0x80, 0xc2, 0x56, 0xb3, 0x59, 0x67, 0x66, 0x4b, 0x4e, 0xfd, 0x52, + 0xe0, 0xb7, 0x9a, 0xdc, 0xdc, 0xb8, 0xc8, 0x85, 0x44, 0x95, 0x14, 0x14, 0x67, 0xd4, 0xb0, 0x7f, + 0xd5, 0x82, 0x9e, 0x43, 0x98, 0x26, 0x6c, 0x4e, 0xd3, 0x33, 0xb9, 0xa4, 0x45, 0xd6, 0x86, 0x19, + 0xec, 0xdc, 0x5e, 0xbc, 0x13, 0x11, 0x2f, 0x64, 0x0c, 0x47, 0xe6, 0xac, 0xed, 0x5a, 0x30, 0x79, + 0xd5, 0x77, 0x6a, 0x73, 0x4e, 0xdd, 0xf1, 0xaa, 0x24, 0x58, 0xf6, 0x36, 0x0e, 0x64, 0xdb, 0x5f, + 0xe8, 0x68, 0xdb, 0x7f, 0x11, 0xfa, 0xdc, 0xa6, 0x16, 0xf6, 0xfd, 0x0c, 0x9d, 0xdd, 0xe5, 0xb2, + 0x88, 0xf8, 0x8e, 0x8c, 0xc6, 0x59, 0x29, 0x16, 0xf8, 0x74, 0x59, 0x72, 0xa3, 0xba, 0x9e, 0xfc, + 0x65, 0x49, 0xdf, 0x3a, 0xc9, 0x70, 0x66, 0x86, 0xf9, 0xf7, 0x26, 0x18, 0x4d, 0x08, 0x0f, 0x46, + 0x0c, 0xfd, 0x2e, 0xff, 0x52, 0xb1, 0x36, 0x1f, 0xcf, 0x7e, 0x83, 0xa4, 0x06, 0x46, 0xf3, 0xcd, + 0xe3, 0x05, 0x58, 0x12, 0xb2, 0x2f, 0x42, 0x66, 0xf8, 0x99, 0xce, 0xf2, 0x25, 0xfb, 0x63, 0x30, + 0xc1, 0x6a, 0x1e, 0x50, 0x76, 0x63, 0x27, 0xa4, 0xe2, 0x19, 0x11, 0x7c, 0xed, 0xff, 0x6c, 0x01, + 0x5a, 0xf1, 0x6b, 0xee, 0xfa, 0x8e, 0x20, 0xce, 0xbf, 0xff, 0x6d, 0x28, 0xf1, 0xc7, 0x71, 0x32, + 0xca, 0xed, 0x7c, 0xdd, 0x09, 0x43, 0x4d, 0x22, 0xff, 0xb8, 0x68, 0xb7, 0xb4, 0xd6, 0x1e, 0x1d, + 0x77, 0xa2, 0x87, 0xde, 0x48, 0x04, 0x1d, 0xfc, 0x70, 0x2a, 0xe8, 0xe0, 0xe3, 0x99, 0x76, 0x31, + 0xe9, 0xde, 0xcb, 0x60, 0x84, 0xf6, 0xe7, 0x2d, 0x18, 0x5b, 0x4d, 0x44, 0x6d, 0x3d, 0xcb, 0x8c, + 0x04, 0x32, 0x34, 0x4d, 0x15, 0x56, 0x8a, 0x05, 0xf4, 0xbe, 0x4b, 0x62, 0xff, 0xc6, 0x82, 0x38, + 0xdc, 0xd5, 0x21, 0xb0, 0xdc, 0xf3, 0x06, 0xcb, 0x9d, 0xf9, 0x7c, 0x51, 0xdd, 0xc9, 0xe3, 0xb8, + 0xd1, 0x15, 0x35, 0x27, 0x6d, 0x5e, 0x2e, 0x31, 0x19, 0xbe, 0xcf, 0x46, 0xcd, 0x89, 0x53, 0xb3, + 0xf1, 0xf5, 0x02, 0x20, 0x85, 0xdb, 0x75, 0xa0, 0xca, 0x74, 0x8d, 0xfb, 0x13, 0xa8, 0x72, 0x1b, + 0x10, 0x33, 0x73, 0x09, 0x1c, 0x2f, 0xe4, 0x64, 0x5d, 0x21, 0x7b, 0x3e, 0x98, 0x0d, 0xcd, 0xb4, + 0xf4, 0x5c, 0xbd, 0x9a, 0xa2, 0x86, 0x33, 0x5a, 0xd0, 0xcc, 0x97, 0x7a, 0xbb, 0x35, 0x5f, 0xea, + 0xeb, 0xe0, 0x82, 0xfd, 0x15, 0x0b, 0x46, 0xd4, 0x30, 0xbd, 0x4b, 0x5c, 0x40, 0x54, 0x7f, 0x72, + 0xee, 0x95, 0xb2, 0xd6, 0x65, 0xc6, 0x0c, 0x7c, 0x07, 0x73, 0xa5, 0x77, 0xea, 0xee, 0x5d, 0xa2, + 0xe2, 0x29, 0x97, 0x84, 0x6b, 0xbc, 0x28, 0xdd, 0xdf, 0x2d, 0x8d, 0xa8, 0x7f, 0x3c, 0x82, 0x6b, + 0x5c, 0xc5, 0xfe, 0x69, 0xba, 0xd9, 0xcd, 0xa5, 0x88, 0x5e, 0x80, 0xde, 0xe6, 0xa6, 0x13, 0x92, + 0x84, 0xab, 0x5c, 0x6f, 0x99, 0x16, 0xee, 0xef, 0x96, 0x46, 0x55, 0x05, 0x56, 0x82, 0x39, 0x76, + 0xf7, 0xe1, 0x3f, 0xd3, 0x8b, 0xb3, 0x63, 0xf8, 0xcf, 0xbf, 0xb4, 0xa0, 0x67, 0x95, 0xde, 0x5e, + 0x0f, 0xfe, 0x08, 0x78, 0xd5, 0x38, 0x02, 0x4e, 0xe6, 0x65, 0x16, 0xca, 0xdd, 0xfd, 0x4b, 0x89, + 0xdd, 0x7f, 0x3a, 0x97, 0x42, 0xfb, 0x8d, 0xdf, 0x80, 0x21, 0x96, 0xaf, 0x48, 0xb8, 0x05, 0x3e, + 0x67, 0x6c, 0xf8, 0x52, 0x62, 0xc3, 0x8f, 0x69, 0xa8, 0xda, 0x4e, 0x7f, 0x02, 0xfa, 0x85, 0x9f, + 0x59, 0x32, 0x22, 0x81, 0xc0, 0xc5, 0x12, 0x6e, 0xff, 0x64, 0x11, 0x8c, 0xfc, 0x48, 0xe8, 0xd7, + 0x2d, 0x98, 0x09, 0xb8, 0xfd, 0x79, 0x6d, 0xa1, 0x15, 0xb8, 0xde, 0x46, 0xa5, 0xba, 0x49, 0x6a, + 0xad, 0xba, 0xeb, 0x6d, 0x2c, 0x6f, 0x78, 0xbe, 0x2a, 0x5e, 0xbc, 0x43, 0xaa, 0x2d, 0xa6, 0x1b, + 0xee, 0x90, 0x8c, 0x49, 0xf9, 0x71, 0x3c, 0xbb, 0xb7, 0x5b, 0x9a, 0xc1, 0x07, 0xa2, 0x8d, 0x0f, + 0xd8, 0x17, 0xf4, 0x7b, 0x16, 0x9c, 0xe7, 0x79, 0x7a, 0xba, 0xef, 0x7f, 0x1b, 0x09, 0x47, 0x59, + 0x92, 0x8a, 0x89, 0xac, 0x91, 0xa0, 0x31, 0xf7, 0xa2, 0x18, 0xd0, 0xf3, 0xe5, 0x83, 0xb5, 0x85, + 0x0f, 0xda, 0x39, 0xfb, 0x5f, 0x14, 0x61, 0x44, 0x84, 0x89, 0x14, 0x77, 0xc0, 0x0b, 0xc6, 0x92, + 0x78, 0x38, 0xb1, 0x24, 0x26, 0x0c, 0xe4, 0xfb, 0x73, 0xfc, 0x87, 0x30, 0x41, 0x0f, 0xe7, 0xcb, + 0xc4, 0x09, 0xa2, 0x5b, 0xc4, 0xe1, 0x56, 0x89, 0xc5, 0x03, 0x9f, 0xfe, 0x4a, 0x3c, 0x7e, 0x35, + 0x49, 0x0c, 0xa7, 0xe9, 0xbf, 0x97, 0xee, 0x1c, 0x0f, 0xc6, 0x53, 0x91, 0x3e, 0xdf, 0x84, 0x41, + 0xe5, 0x24, 0x25, 0x0e, 0x9d, 0xf6, 0x01, 0x73, 0x93, 0x14, 0xb8, 0xd0, 0x33, 0x76, 0xd0, 0x8b, + 0xc9, 0xd9, 0xff, 0xa4, 0x60, 0x34, 0xc8, 0x27, 0x71, 0x15, 0x06, 0x9c, 0x90, 0x05, 0xf1, 0xae, + 0xb5, 0x93, 0x4b, 0xa7, 0x9a, 0x61, 0x8e, 0x6a, 0xb3, 0xa2, 0x26, 0x56, 0x34, 0xd0, 0x65, 0x6e, + 0xfb, 0xb9, 0x4d, 0xda, 0x09, 0xa5, 0x53, 0xd4, 0x40, 0x5a, 0x87, 0x6e, 0x13, 0x2c, 0xea, 0xa3, + 0x4f, 0x70, 0xe3, 0xdc, 0x2b, 0x9e, 0x7f, 0xdb, 0xbb, 0xe4, 0xfb, 0x32, 0x24, 0x50, 0x77, 0x04, + 0x27, 0xa4, 0x49, 0xae, 0xaa, 0x8e, 0x4d, 0x6a, 0xdd, 0x85, 0xce, 0xfe, 0x0c, 0xb0, 0xbc, 0x24, + 0x66, 0x4c, 0x82, 0x10, 0x11, 0x18, 0x13, 0x31, 0x48, 0x65, 0x99, 0x18, 0xbb, 0xcc, 0xe7, 0xb7, + 0x59, 0x3b, 0xd6, 0xe3, 0x5c, 0x31, 0x49, 0xe0, 0x24, 0x4d, 0x7b, 0x93, 0x1f, 0xc2, 0x4b, 0xc4, + 0x89, 0x5a, 0x01, 0x09, 0xd1, 0x47, 0x61, 0x2a, 0xfd, 0x32, 0x16, 0xea, 0x10, 0x8b, 0x71, 0xcf, + 0x27, 0xf7, 0x76, 0x4b, 0x53, 0x95, 0x1c, 0x1c, 0x9c, 0x5b, 0xdb, 0xfe, 0x59, 0x0b, 0x98, 0x27, + 0xf8, 0x21, 0x70, 0x3e, 0x1f, 0x31, 0x39, 0x9f, 0xa9, 0xbc, 0xe9, 0xcc, 0x61, 0x7a, 0x9e, 0xe7, + 0x6b, 0xb8, 0x1c, 0xf8, 0x77, 0x76, 0x84, 0xed, 0x56, 0xe7, 0x67, 0x9c, 0xfd, 0x45, 0x0b, 0x58, + 0x12, 0x1f, 0xcc, 0x5f, 0xed, 0x52, 0xc1, 0xd1, 0xd9, 0x2c, 0xe1, 0xa3, 0x30, 0xb0, 0x2e, 0x86, + 0x3f, 0x43, 0xe8, 0x64, 0x74, 0xd8, 0xa4, 0x2d, 0x27, 0x4d, 0x78, 0x74, 0x8a, 0x7f, 0x58, 0x51, + 0xb3, 0xff, 0xb1, 0x05, 0xd3, 0xf9, 0xd5, 0xd0, 0x75, 0x38, 0x1e, 0x90, 0x6a, 0x2b, 0x08, 0xe9, + 0x96, 0x10, 0x0f, 0x20, 0xe1, 0x14, 0xc5, 0xa7, 0xfa, 0xa1, 0xbd, 0xdd, 0xd2, 0x71, 0x9c, 0x8d, + 0x82, 0xf3, 0xea, 0xa2, 0x97, 0x60, 0xb4, 0x15, 0x72, 0xce, 0x8f, 0x31, 0x5d, 0xa1, 0x88, 0x14, + 0xcd, 0xfc, 0x86, 0xae, 0x1b, 0x10, 0x9c, 0xc0, 0xb4, 0xbf, 0x8b, 0x2f, 0x47, 0x15, 0x2c, 0xba, + 0x01, 0x13, 0x9e, 0xf6, 0x9f, 0xde, 0x80, 0xf2, 0xa9, 0xff, 0x68, 0xa7, 0x5b, 0x9f, 0x5d, 0x97, + 0x9a, 0xaf, 0x7a, 0x82, 0x0c, 0x4e, 0x53, 0xb6, 0x7f, 0xca, 0x82, 0xe3, 0x3a, 0xa2, 0xe6, 0x0e, + 0xd7, 0x49, 0x97, 0xb7, 0x00, 0x03, 0x7e, 0x93, 0x04, 0x4e, 0xe4, 0x07, 0xe2, 0x9a, 0x3b, 0x27, + 0x57, 0xe8, 0x35, 0x51, 0xbe, 0x2f, 0x92, 0xd7, 0x48, 0xea, 0xb2, 0x1c, 0xab, 0x9a, 0xc8, 0x86, + 0x3e, 0x26, 0x40, 0x0c, 0x85, 0xe3, 0x23, 0x3b, 0xb4, 0x98, 0x7d, 0x4a, 0x88, 0x05, 0xc4, 0xfe, + 0x33, 0x8b, 0xaf, 0x4f, 0xbd, 0xeb, 0xe8, 0x6d, 0x18, 0x6f, 0x38, 0x51, 0x75, 0x73, 0xf1, 0x4e, + 0x33, 0xe0, 0x2a, 0x5a, 0x39, 0x4e, 0x4f, 0x75, 0x1a, 0x27, 0xed, 0x23, 0x63, 0x03, 0xe9, 0x95, + 0x04, 0x31, 0x9c, 0x22, 0x8f, 0x6e, 0xc1, 0x10, 0x2b, 0x63, 0x3e, 0xbd, 0x61, 0x3b, 0x5e, 0x26, + 0xaf, 0x35, 0x65, 0xe2, 0xb3, 0x12, 0xd3, 0xc1, 0x3a, 0x51, 0xfb, 0xcb, 0x45, 0x7e, 0x68, 0xb0, + 0xb7, 0xc7, 0x13, 0xd0, 0xdf, 0xf4, 0x6b, 0xf3, 0xcb, 0x0b, 0x58, 0xcc, 0x82, 0xba, 0xf7, 0xca, + 0xbc, 0x18, 0x4b, 0x38, 0x3a, 0x07, 0x03, 0xe2, 0xa7, 0x54, 0xa9, 0xb3, 0x3d, 0x22, 0xf0, 0x42, + 0xac, 0xa0, 0xe8, 0x59, 0x80, 0x66, 0xe0, 0x6f, 0xbb, 0x35, 0x16, 0x89, 0xa9, 0x68, 0x5a, 0xe7, + 0x95, 0x15, 0x04, 0x6b, 0x58, 0xe8, 0x65, 0x18, 0x69, 0x79, 0x21, 0xe7, 0x9f, 0xb4, 0x78, 0xf7, + 0xca, 0x6e, 0xec, 0xba, 0x0e, 0xc4, 0x26, 0x2e, 0x9a, 0x85, 0xbe, 0xc8, 0x61, 0xd6, 0x66, 0xbd, + 0xf9, 0x46, 0xf4, 0x6b, 0x14, 0x43, 0xcf, 0x2c, 0x47, 0x2b, 0x60, 0x51, 0x11, 0xbd, 0x29, 0xdd, + 0xeb, 0xf9, 0x4d, 0x24, 0xbc, 0x57, 0xba, 0xbb, 0xb5, 0x34, 0xe7, 0x7a, 0xe1, 0x15, 0x63, 0xd0, + 0x42, 0x2f, 0x01, 0x90, 0x3b, 0x11, 0x09, 0x3c, 0xa7, 0xae, 0x6c, 0x44, 0x15, 0x23, 0xb3, 0xe0, + 0xaf, 0xfa, 0xd1, 0xf5, 0x90, 0x2c, 0x2a, 0x0c, 0xac, 0x61, 0xdb, 0xdf, 0x3f, 0x04, 0x10, 0x3f, + 0x34, 0xd0, 0x5d, 0x18, 0xa8, 0x3a, 0x4d, 0xa7, 0xca, 0xd3, 0xa6, 0x16, 0xf3, 0xbc, 0x9e, 0xe3, + 0x1a, 0x33, 0xf3, 0x02, 0x9d, 0x2b, 0x6f, 0x64, 0xc8, 0xf0, 0x01, 0x59, 0xdc, 0x51, 0x61, 0xa3, + 0xda, 0x43, 0x9f, 0xb3, 0x60, 0x48, 0x44, 0x3a, 0x62, 0x33, 0x54, 0xc8, 0xd7, 0xb7, 0x69, 0xed, + 0xcf, 0xc6, 0x35, 0x78, 0x17, 0x9e, 0x93, 0x2b, 0x54, 0x83, 0x74, 0xec, 0x85, 0xde, 0x30, 0xfa, + 0xa0, 0x7c, 0xdb, 0x16, 0x8d, 0xa1, 0x54, 0x6f, 0xdb, 0x41, 0x76, 0xd5, 0xe8, 0xcf, 0xda, 0xeb, + 0xc6, 0xb3, 0xb6, 0x27, 0xdf, 0x7f, 0xd8, 0xe0, 0xb7, 0x3b, 0xbd, 0x68, 0x51, 0x59, 0x8f, 0x25, + 0xd2, 0x9b, 0xef, 0xf4, 0xaa, 0x3d, 0xec, 0x3a, 0xc4, 0x11, 0xf9, 0x34, 0x8c, 0xd5, 0x4c, 0xae, + 0x45, 0xac, 0xc4, 0xc7, 0xf3, 0xe8, 0x26, 0x98, 0x9c, 0x98, 0x4f, 0x49, 0x00, 0x70, 0x92, 0x30, + 0x2a, 0xf3, 0xd0, 0x32, 0xcb, 0xde, 0xba, 0x2f, 0x3c, 0xa8, 0xec, 0xdc, 0xb9, 0xdc, 0x09, 0x23, + 0xd2, 0xa0, 0x98, 0x31, 0x93, 0xb0, 0x2a, 0xea, 0x62, 0x45, 0x05, 0xbd, 0x0e, 0x7d, 0xcc, 0xeb, + 0x31, 0x9c, 0x1a, 0xc8, 0x57, 0x6b, 0x98, 0x91, 0x50, 0xe3, 0x0d, 0xc9, 0xfe, 0x86, 0x58, 0x50, + 0x40, 0x97, 0xa5, 0x4f, 0x71, 0xb8, 0xec, 0x5d, 0x0f, 0x09, 0xf3, 0x29, 0x1e, 0x9c, 0x7b, 0x34, + 0x76, 0x17, 0xe6, 0xe5, 0x99, 0xf9, 0x67, 0x8d, 0x9a, 0x94, 0xed, 0x13, 0xff, 0x65, 0x5a, 0x5b, + 0x11, 0xb7, 0x2d, 0xb3, 0x7b, 0x66, 0xea, 0xdb, 0x78, 0x38, 0x6f, 0x98, 0x24, 0x70, 0x92, 0x26, + 0x65, 0xa1, 0xf9, 0xae, 0x17, 0x3e, 0x58, 0x9d, 0xce, 0x0e, 0x2e, 0x39, 0x60, 0xb7, 0x11, 0x2f, + 0xc1, 0xa2, 0x3e, 0x72, 0x61, 0x2c, 0x30, 0xd8, 0x0b, 0x19, 0x6e, 0xed, 0x6c, 0x77, 0x4c, 0x8c, + 0x16, 0xc8, 0xdf, 0x24, 0x83, 0x93, 0x74, 0xd1, 0xeb, 0x1a, 0xa3, 0x34, 0xd2, 0xfe, 0xe5, 0xdf, + 0x89, 0x35, 0x9a, 0xde, 0x82, 0x11, 0xe3, 0xb0, 0x79, 0xa0, 0x2a, 0x48, 0x0f, 0xc6, 0x93, 0x27, + 0xcb, 0x03, 0xd5, 0x3c, 0xfe, 0x49, 0x0f, 0x8c, 0x9a, 0x3b, 0x01, 0x9d, 0x87, 0x41, 0x41, 0x44, + 0x65, 0xb4, 0x52, 0x9b, 0x7b, 0x45, 0x02, 0x70, 0x8c, 0xc3, 0x12, 0x99, 0xb1, 0xea, 0x9a, 0xaf, + 0x40, 0x9c, 0xc8, 0x4c, 0x41, 0xb0, 0x86, 0x45, 0x1f, 0xb0, 0xb7, 0x7c, 0x3f, 0x52, 0xf7, 0xa8, + 0xda, 0x2e, 0x73, 0xac, 0x14, 0x0b, 0x28, 0xbd, 0x3f, 0xb7, 0x48, 0xe0, 0x91, 0xba, 0x99, 0xd2, + 0x41, 0xdd, 0x9f, 0x57, 0x74, 0x20, 0x36, 0x71, 0x29, 0x17, 0xe0, 0x87, 0x6c, 0xff, 0x89, 0x67, + 0x72, 0xec, 0x7b, 0x51, 0xe1, 0x51, 0x24, 0x24, 0x1c, 0x7d, 0x0c, 0x8e, 0xab, 0xf0, 0x89, 0x62, + 0x75, 0xc9, 0x16, 0xfb, 0x0c, 0xa9, 0xd6, 0xf1, 0xf9, 0x6c, 0x34, 0x9c, 0x57, 0x1f, 0xbd, 0x0a, + 0xa3, 0xe2, 0x29, 0x25, 0x29, 0xf6, 0x9b, 0x86, 0x84, 0x57, 0x0c, 0x28, 0x4e, 0x60, 0xcb, 0xa4, + 0x14, 0xec, 0x8d, 0x21, 0x29, 0x0c, 0xa4, 0x93, 0x52, 0xe8, 0x70, 0x9c, 0xaa, 0x81, 0x66, 0x61, + 0x8c, 0xb3, 0x8e, 0xae, 0xb7, 0xc1, 0xe7, 0x44, 0x78, 0x76, 0xaa, 0x4d, 0x75, 0xcd, 0x04, 0xe3, + 0x24, 0x3e, 0xba, 0x08, 0xc3, 0x4e, 0x50, 0xdd, 0x74, 0x23, 0x52, 0xa5, 0x3b, 0x83, 0xd9, 0xf2, + 0x69, 0x96, 0x98, 0xb3, 0x1a, 0x0c, 0x1b, 0x98, 0xf6, 0x5d, 0x98, 0xcc, 0x08, 0x2f, 0x43, 0x17, + 0x8e, 0xd3, 0x74, 0xe5, 0x37, 0x25, 0xdc, 0x1d, 0x66, 0xcb, 0xcb, 0xf2, 0x6b, 0x34, 0x2c, 0xba, + 0x3a, 0x59, 0x18, 0x1a, 0x2d, 0xf9, 0xb6, 0x5a, 0x9d, 0x4b, 0x12, 0x80, 0x63, 0x1c, 0xfb, 0xaf, + 0x0a, 0x30, 0x96, 0xa1, 0xa0, 0x63, 0x09, 0xa0, 0x13, 0x2f, 0xad, 0x38, 0xdf, 0xb3, 0x99, 0xe3, + 0xa4, 0x70, 0x80, 0x1c, 0x27, 0xc5, 0x4e, 0x39, 0x4e, 0x7a, 0xde, 0x49, 0x8e, 0x13, 0x73, 0xc4, + 0x7a, 0xbb, 0x1a, 0xb1, 0x8c, 0xbc, 0x28, 0x7d, 0x07, 0xcc, 0x8b, 0x62, 0x0c, 0x7a, 0x7f, 0x17, + 0x83, 0xfe, 0xa3, 0x05, 0x18, 0x4f, 0xea, 0xf6, 0x0e, 0x41, 0x3e, 0xfe, 0xba, 0x21, 0x1f, 0x3f, + 0xd7, 0x8d, 0x27, 0x7e, 0xae, 0xac, 0x1c, 0x27, 0x64, 0xe5, 0x4f, 0x76, 0x45, 0xad, 0xbd, 0xdc, + 0xfc, 0xef, 0x17, 0xe0, 0x68, 0xa6, 0xca, 0xf3, 0x10, 0xc6, 0xe6, 0x9a, 0x31, 0x36, 0xcf, 0x74, + 0x1d, 0xa5, 0x20, 0x77, 0x80, 0x6e, 0x26, 0x06, 0xe8, 0x7c, 0xf7, 0x24, 0xdb, 0x8f, 0xd2, 0x37, + 0x8a, 0x70, 0x3a, 0xb3, 0x5e, 0x2c, 0x5e, 0x5e, 0x32, 0xc4, 0xcb, 0xcf, 0x26, 0xc4, 0xcb, 0x76, + 0xfb, 0xda, 0xf7, 0x47, 0xde, 0x2c, 0xbc, 0xf5, 0x59, 0xcc, 0x91, 0x7b, 0x94, 0x35, 0x1b, 0xde, + 0xfa, 0x8a, 0x10, 0x36, 0xe9, 0xbe, 0x97, 0x64, 0xcc, 0xbf, 0x6b, 0xc1, 0x89, 0xcc, 0xb9, 0x39, + 0x04, 0x49, 0xdf, 0xaa, 0x29, 0xe9, 0x7b, 0xa2, 0xeb, 0xd5, 0x9a, 0x23, 0xfa, 0xfb, 0x7c, 0x5f, + 0xce, 0xb7, 0x30, 0x01, 0xc4, 0x35, 0x18, 0x72, 0xaa, 0x55, 0x12, 0x86, 0x2b, 0x7e, 0x4d, 0xa5, + 0x43, 0x78, 0x86, 0x3d, 0x0f, 0xe3, 0xe2, 0xfd, 0xdd, 0xd2, 0x74, 0x92, 0x44, 0x0c, 0xc6, 0x3a, + 0x05, 0xf4, 0x09, 0x18, 0x08, 0x65, 0x26, 0xcb, 0x9e, 0x7b, 0xcf, 0x64, 0xc9, 0x98, 0x5c, 0x25, + 0x60, 0x51, 0x24, 0xd1, 0x77, 0xea, 0xd1, 0x9f, 0xda, 0x88, 0x16, 0x79, 0x27, 0xef, 0x21, 0x06, + 0xd4, 0xb3, 0x00, 0xdb, 0xea, 0x25, 0x93, 0x14, 0x9e, 0x68, 0x6f, 0x1c, 0x0d, 0x0b, 0xbd, 0x06, + 0xe3, 0x21, 0x0f, 0x7c, 0x1a, 0x1b, 0xa9, 0xf0, 0xb5, 0xc8, 0x62, 0xc7, 0x55, 0x12, 0x30, 0x9c, + 0xc2, 0x46, 0x4b, 0xb2, 0x55, 0x66, 0x8e, 0xc4, 0x97, 0xe7, 0xd9, 0xb8, 0x45, 0x61, 0x92, 0x74, + 0x24, 0x39, 0x09, 0x6c, 0xf8, 0xb5, 0x9a, 0xe8, 0x13, 0x00, 0x74, 0x11, 0x09, 0x21, 0x4a, 0x7f, + 0xfe, 0x11, 0x4a, 0xcf, 0x96, 0x5a, 0xa6, 0x27, 0x03, 0x73, 0xb3, 0x5f, 0x50, 0x44, 0xb0, 0x46, + 0x10, 0x39, 0x30, 0x12, 0xff, 0x8b, 0x73, 0xb4, 0x9f, 0xcb, 0x6d, 0x21, 0x49, 0x9c, 0x29, 0x18, + 0x16, 0x74, 0x12, 0xd8, 0xa4, 0x88, 0x3e, 0x0e, 0x27, 0xb6, 0x73, 0x2d, 0x7f, 0x38, 0x27, 0xc8, + 0x92, 0xae, 0xe7, 0xdb, 0xfb, 0xe4, 0xd7, 0xb7, 0xff, 0x2d, 0xc0, 0x43, 0x6d, 0x4e, 0x7a, 0x34, + 0x6b, 0x6a, 0xed, 0x9f, 0x4a, 0x4a, 0x36, 0xa6, 0x33, 0x2b, 0x1b, 0xa2, 0x8e, 0xc4, 0x86, 0x2a, + 0xbc, 0xe3, 0x0d, 0xf5, 0x43, 0x96, 0x26, 0x73, 0xe2, 0x36, 0xdd, 0x1f, 0x39, 0xe0, 0x0d, 0x76, + 0x1f, 0x85, 0x50, 0xeb, 0x19, 0x92, 0x9c, 0x67, 0xbb, 0xee, 0x4e, 0xf7, 0xa2, 0x9d, 0xaf, 0x66, + 0x07, 0x7c, 0xe7, 0x42, 0x9e, 0x4b, 0x07, 0xfd, 0xfe, 0xc3, 0x0a, 0xfe, 0xfe, 0x75, 0x0b, 0x4e, + 0xa4, 0x8a, 0x79, 0x1f, 0x48, 0x28, 0xa2, 0xdd, 0xad, 0xbe, 0xe3, 0xce, 0x4b, 0x82, 0xfc, 0x1b, + 0x2e, 0x8b, 0x6f, 0x38, 0x91, 0x8b, 0x97, 0xec, 0xfa, 0x17, 0xfe, 0xb8, 0x34, 0xc9, 0x1a, 0x30, + 0x11, 0x71, 0x7e, 0xd7, 0x51, 0x13, 0xce, 0x54, 0x5b, 0x41, 0x10, 0x2f, 0xd6, 0x8c, 0xcd, 0xc9, + 0xdf, 0x7a, 0x8f, 0xee, 0xed, 0x96, 0xce, 0xcc, 0x77, 0xc0, 0xc5, 0x1d, 0xa9, 0x21, 0x0f, 0x50, + 0x23, 0x65, 0x5f, 0xc7, 0x0e, 0x80, 0x1c, 0x39, 0x4c, 0xda, 0x1a, 0x8f, 0x5b, 0xca, 0x66, 0x58, + 0xe9, 0x65, 0x50, 0x3e, 0x5c, 0xe9, 0xc9, 0xb7, 0x26, 0x2e, 0xfd, 0xf4, 0x55, 0x38, 0xdd, 0x7e, + 0x31, 0x1d, 0x28, 0x94, 0xc3, 0x1f, 0x58, 0x70, 0xaa, 0x6d, 0xbc, 0xb0, 0x6f, 0xc3, 0xc7, 0x82, + 0xfd, 0x59, 0x0b, 0x1e, 0xce, 0xac, 0x91, 0x74, 0xc2, 0xab, 0xd2, 0x42, 0xcd, 0x1c, 0x35, 0x8e, + 0x9c, 0x23, 0x01, 0x38, 0xc6, 0x31, 0x2c, 0x36, 0x0b, 0x1d, 0x2d, 0x36, 0x7f, 0xcb, 0x82, 0xd4, + 0x55, 0x7f, 0x08, 0x9c, 0xe7, 0xb2, 0xc9, 0x79, 0x3e, 0xda, 0xcd, 0x68, 0xe6, 0x30, 0x9d, 0x7f, + 0x31, 0x06, 0xc7, 0x72, 0x3c, 0xb1, 0xb7, 0x61, 0x62, 0xa3, 0x4a, 0xcc, 0xd0, 0x1b, 0xed, 0x42, + 0xd2, 0xb5, 0x8d, 0xd3, 0x31, 0x77, 0x74, 0x6f, 0xb7, 0x34, 0x91, 0x42, 0xc1, 0xe9, 0x26, 0xd0, + 0x67, 0x2d, 0x38, 0xe2, 0xdc, 0x0e, 0x17, 0xe9, 0x0b, 0xc2, 0xad, 0xce, 0xd5, 0xfd, 0xea, 0x16, + 0x65, 0xcc, 0xe4, 0xb6, 0x7a, 0x3e, 0x53, 0x18, 0x7d, 0xb3, 0x92, 0xc2, 0x37, 0x9a, 0x9f, 0xda, + 0xdb, 0x2d, 0x1d, 0xc9, 0xc2, 0xc2, 0x99, 0x6d, 0x21, 0x2c, 0x32, 0x7e, 0x39, 0xd1, 0x66, 0xbb, + 0xe0, 0x30, 0x59, 0x2e, 0xf3, 0x9c, 0x25, 0x96, 0x10, 0xac, 0xe8, 0xa0, 0x4f, 0xc1, 0xe0, 0x86, + 0x8c, 0x03, 0x91, 0xc1, 0x72, 0xc7, 0x03, 0xd9, 0x3e, 0x3a, 0x06, 0x37, 0x81, 0x51, 0x48, 0x38, + 0x26, 0x8a, 0x5e, 0x85, 0xa2, 0xb7, 0x1e, 0x8a, 0x10, 0x75, 0xd9, 0x96, 0xb8, 0xa6, 0xad, 0x33, + 0x0f, 0xc1, 0xb4, 0xba, 0x54, 0xc1, 0xb4, 0x22, 0xba, 0x0c, 0xc5, 0xe0, 0x56, 0x4d, 0x68, 0x52, + 0x32, 0x37, 0x29, 0x9e, 0x5b, 0xc8, 0xe9, 0x15, 0xa3, 0x84, 0xe7, 0x16, 0x30, 0x25, 0x81, 0xca, + 0xd0, 0xcb, 0xdc, 0x97, 0x05, 0x6b, 0x9b, 0xf9, 0x94, 0x6f, 0x13, 0x06, 0x80, 0x7b, 0x24, 0x32, + 0x04, 0xcc, 0x09, 0xa1, 0x35, 0xe8, 0xab, 0xba, 0x5e, 0x8d, 0x04, 0x82, 0x97, 0xfd, 0x60, 0xa6, + 0xce, 0x84, 0x61, 0xe4, 0xd0, 0xe4, 0x2a, 0x04, 0x86, 0x81, 0x05, 0x2d, 0x46, 0x95, 0x34, 0x37, + 0xd7, 0xe5, 0x8d, 0x95, 0x4d, 0x95, 0x34, 0x37, 0x97, 0x2a, 0x6d, 0xa9, 0x32, 0x0c, 0x2c, 0x68, + 0xa1, 0x97, 0xa0, 0xb0, 0x5e, 0x15, 0xae, 0xc9, 0x99, 0xca, 0x13, 0x33, 0x8a, 0xd6, 0x5c, 0xdf, + 0xde, 0x6e, 0xa9, 0xb0, 0x34, 0x8f, 0x0b, 0xeb, 0x55, 0xb4, 0x0a, 0xfd, 0xeb, 0x3c, 0xee, 0x8e, + 0xd0, 0x8f, 0x3c, 0x9e, 0x1d, 0x12, 0x28, 0x15, 0x9a, 0x87, 0x7b, 0x97, 0x0a, 0x00, 0x96, 0x44, + 0x58, 0x02, 0x2a, 0x15, 0x3f, 0x48, 0x84, 0x2f, 0x9d, 0x39, 0x58, 0xcc, 0x27, 0xfe, 0xd4, 0x88, + 0xa3, 0x10, 0x61, 0x8d, 0x22, 0x5d, 0xd5, 0xce, 0xdd, 0x56, 0xc0, 0x72, 0x5b, 0x08, 0xd5, 0x48, + 0xe6, 0xaa, 0x9e, 0x95, 0x48, 0xed, 0x56, 0xb5, 0x42, 0xc2, 0x31, 0x51, 0xb4, 0x05, 0x23, 0xdb, + 0x61, 0x73, 0x93, 0xc8, 0x2d, 0xcd, 0xc2, 0xde, 0xe5, 0x70, 0xb3, 0x37, 0x04, 0xa2, 0x1b, 0x44, + 0x2d, 0xa7, 0x9e, 0x3a, 0x85, 0xd8, 0xb3, 0xe6, 0x86, 0x4e, 0x0c, 0x9b, 0xb4, 0xe9, 0xf0, 0xbf, + 0xdd, 0xf2, 0x6f, 0xed, 0x44, 0x44, 0x44, 0x1d, 0xcd, 0x1c, 0xfe, 0x37, 0x38, 0x4a, 0x7a, 0xf8, + 0x05, 0x00, 0x4b, 0x22, 0xe8, 0x86, 0x18, 0x1e, 0x76, 0x7a, 0x8e, 0xe7, 0x87, 0x34, 0x9f, 0x95, + 0x48, 0x39, 0x83, 0xc2, 0x4e, 0xcb, 0x98, 0x14, 0x3b, 0x25, 0x9b, 0x9b, 0x7e, 0xe4, 0x7b, 0x89, + 0x13, 0x7a, 0x22, 0xff, 0x94, 0x2c, 0x67, 0xe0, 0xa7, 0x4f, 0xc9, 0x2c, 0x2c, 0x9c, 0xd9, 0x16, + 0xaa, 0xc1, 0x68, 0xd3, 0x0f, 0xa2, 0xdb, 0x7e, 0x20, 0xd7, 0x17, 0x6a, 0x23, 0x28, 0x35, 0x30, + 0x45, 0x8b, 0xcc, 0x30, 0xc7, 0x84, 0xe0, 0x04, 0x4d, 0xf4, 0x51, 0xe8, 0x0f, 0xab, 0x4e, 0x9d, + 0x2c, 0x5f, 0x9b, 0x9a, 0xcc, 0xbf, 0x7e, 0x2a, 0x1c, 0x25, 0x67, 0x75, 0xf1, 0xb0, 0x49, 0x1c, + 0x05, 0x4b, 0x72, 0x68, 0x09, 0x7a, 0x59, 0x62, 0x67, 0x16, 0x22, 0x37, 0x27, 0x32, 0x7b, 0xca, + 0xad, 0x86, 0x9f, 0x4d, 0xac, 0x18, 0xf3, 0xea, 0x74, 0x0f, 0x08, 0x49, 0x81, 0x1f, 0x4e, 0x1d, + 0xcd, 0xdf, 0x03, 0x42, 0xc0, 0x70, 0xad, 0xd2, 0x6e, 0x0f, 0x28, 0x24, 0x1c, 0x13, 0xa5, 0x27, + 0x33, 0x3d, 0x4d, 0x8f, 0xb5, 0x31, 0x99, 0xcc, 0x3d, 0x4b, 0xd9, 0xc9, 0x4c, 0x4f, 0x52, 0x4a, + 0xc2, 0xfe, 0x8d, 0x81, 0x34, 0xcf, 0xc2, 0x24, 0x4c, 0xff, 0xbf, 0x95, 0xb2, 0x99, 0xf8, 0x50, + 0xb7, 0x02, 0xef, 0xfb, 0xf8, 0x70, 0xfd, 0xac, 0x05, 0xc7, 0x9a, 0x99, 0x1f, 0x22, 0x18, 0x80, + 0xee, 0xe4, 0xe6, 0xfc, 0xd3, 0x55, 0x38, 0xe5, 0x6c, 0x38, 0xce, 0x69, 0x29, 0x29, 0x1c, 0x28, + 0xbe, 0x63, 0xe1, 0xc0, 0x0a, 0x0c, 0x54, 0xf9, 0x4b, 0x4e, 0xa6, 0x01, 0xe8, 0x2a, 0x18, 0x28, + 0x63, 0x25, 0xc4, 0x13, 0x70, 0x1d, 0x2b, 0x12, 0xe8, 0x87, 0x2d, 0x38, 0x95, 0xec, 0x3a, 0x26, + 0x0c, 0x2c, 0x0c, 0x26, 0xb9, 0x58, 0x6b, 0x49, 0x7c, 0x7f, 0x8a, 0xff, 0x37, 0x90, 0xf7, 0x3b, + 0x21, 0xe0, 0xf6, 0x8d, 0xa1, 0x85, 0x0c, 0xb9, 0x5a, 0x9f, 0xa9, 0x51, 0xec, 0x42, 0xb6, 0xf6, + 0x3c, 0x0c, 0x37, 0xfc, 0x96, 0x17, 0x09, 0xbb, 0x47, 0x61, 0x3c, 0xc5, 0x8c, 0x86, 0x56, 0xb4, + 0x72, 0x6c, 0x60, 0x25, 0x24, 0x72, 0x03, 0xf7, 0x2c, 0x91, 0x7b, 0x0b, 0x86, 0x3d, 0xcd, 0x25, + 0xa0, 0xdd, 0x0b, 0x56, 0x48, 0x17, 0x35, 0x6c, 0xde, 0x4b, 0xbd, 0x04, 0x1b, 0xd4, 0xda, 0x4b, + 0xcb, 0xe0, 0x9d, 0x49, 0xcb, 0x0e, 0xf5, 0x49, 0x6c, 0xff, 0x42, 0x21, 0xe3, 0xc5, 0xc0, 0xa5, + 0x72, 0xaf, 0x98, 0x52, 0xb9, 0xb3, 0x49, 0xa9, 0x5c, 0x4a, 0x55, 0x65, 0x08, 0xe4, 0xba, 0xcf, + 0x28, 0xd9, 0x75, 0x80, 0xe7, 0xef, 0xb5, 0xe0, 0x38, 0xd3, 0x7d, 0xd0, 0x06, 0xde, 0xb1, 0xbe, + 0x83, 0x99, 0xa4, 0x5e, 0xcd, 0x26, 0x87, 0xf3, 0xda, 0xb1, 0xeb, 0x70, 0xa6, 0xd3, 0xbd, 0xcb, + 0x2c, 0x7c, 0x6b, 0xca, 0x38, 0x22, 0xb6, 0xf0, 0xad, 0x2d, 0x2f, 0x60, 0x06, 0xe9, 0x36, 0x7c, + 0xa1, 0xfd, 0xdf, 0x2d, 0x28, 0x96, 0xfd, 0xda, 0x21, 0xbc, 0xe8, 0x3f, 0x62, 0xbc, 0xe8, 0x1f, + 0xca, 0xbe, 0xf1, 0x6b, 0xb9, 0xca, 0xbe, 0xc5, 0x84, 0xb2, 0xef, 0x54, 0x1e, 0x81, 0xf6, 0xaa, + 0xbd, 0x9f, 0x2e, 0xc2, 0x50, 0xd9, 0xaf, 0xa9, 0x7d, 0xf6, 0xaf, 0xee, 0xc5, 0x91, 0x27, 0x37, + 0xfb, 0x94, 0x46, 0x99, 0x59, 0xf4, 0xca, 0xb8, 0x13, 0xdf, 0x66, 0xfe, 0x3c, 0x37, 0x89, 0xbb, + 0xb1, 0x19, 0x91, 0x5a, 0xf2, 0x73, 0x0e, 0xcf, 0x9f, 0xe7, 0x9b, 0x45, 0x18, 0x4b, 0xb4, 0x8e, + 0xea, 0x30, 0x52, 0xd7, 0x55, 0x49, 0x62, 0x9d, 0xde, 0x93, 0x16, 0x4a, 0xf8, 0x43, 0x68, 0x45, + 0xd8, 0x24, 0x8e, 0x66, 0x00, 0x3c, 0xdd, 0x2a, 0x5c, 0x05, 0x2a, 0xd6, 0x2c, 0xc2, 0x35, 0x0c, + 0xf4, 0x02, 0x0c, 0x45, 0x7e, 0xd3, 0xaf, 0xfb, 0x1b, 0x3b, 0x57, 0x88, 0x8c, 0x6c, 0xa9, 0x8c, + 0x86, 0xd7, 0x62, 0x10, 0xd6, 0xf1, 0xd0, 0x1d, 0x98, 0x50, 0x44, 0x2a, 0xf7, 0x41, 0xbd, 0xc6, + 0xc4, 0x26, 0xab, 0x49, 0x8a, 0x38, 0xdd, 0x08, 0x7a, 0x09, 0x46, 0x99, 0xf5, 0x32, 0xab, 0x7f, + 0x85, 0xec, 0xc8, 0x88, 0xc7, 0x8c, 0xc3, 0x5e, 0x31, 0x20, 0x38, 0x81, 0x89, 0xe6, 0x61, 0xa2, + 0xe1, 0x86, 0x89, 0xea, 0x7d, 0xac, 0x3a, 0xeb, 0xc0, 0x4a, 0x12, 0x88, 0xd3, 0xf8, 0xf6, 0xcf, + 0x89, 0x39, 0xf6, 0x22, 0xf7, 0xfd, 0xed, 0xf8, 0xee, 0xde, 0x8e, 0xdf, 0xb0, 0x60, 0x9c, 0xb6, + 0xce, 0x4c, 0x32, 0x25, 0x23, 0xa5, 0x72, 0x62, 0x58, 0x6d, 0x72, 0x62, 0x9c, 0xa5, 0xc7, 0x76, + 0xcd, 0x6f, 0x45, 0x42, 0x3a, 0xaa, 0x9d, 0xcb, 0xb4, 0x14, 0x0b, 0xa8, 0xc0, 0x23, 0x41, 0x20, + 0xfc, 0xde, 0x75, 0x3c, 0x12, 0x04, 0x58, 0x40, 0x65, 0xca, 0x8c, 0x9e, 0xec, 0x94, 0x19, 0x3c, + 0xf2, 0xb9, 0xb0, 0x82, 0x13, 0x2c, 0xad, 0x16, 0xf9, 0x5c, 0x9a, 0xc7, 0xc5, 0x38, 0xf6, 0x57, + 0x8b, 0x30, 0x5c, 0xf6, 0x6b, 0xb1, 0x61, 0xc7, 0xf3, 0x86, 0x61, 0xc7, 0x99, 0x84, 0x61, 0xc7, + 0xb8, 0x8e, 0xfb, 0xbe, 0x19, 0xc7, 0xb7, 0xca, 0x8c, 0xe3, 0x37, 0x2d, 0x36, 0x6b, 0x0b, 0xab, + 0x15, 0x6e, 0xe1, 0x8b, 0x2e, 0xc0, 0x10, 0x3b, 0xe1, 0x58, 0xa0, 0x05, 0x69, 0xed, 0xc0, 0x52, + 0x58, 0xae, 0xc6, 0xc5, 0x58, 0xc7, 0x41, 0xe7, 0x60, 0x20, 0x24, 0x4e, 0x50, 0xdd, 0x54, 0xc7, + 0xbb, 0x30, 0x4d, 0xe0, 0x65, 0x58, 0x41, 0xd1, 0x1b, 0x71, 0xd0, 0xed, 0x62, 0xbe, 0xb9, 0xb0, + 0xde, 0x1f, 0xbe, 0x45, 0xf2, 0x23, 0x6d, 0xdb, 0x37, 0x01, 0xa5, 0xf1, 0xbb, 0xf0, 0xbf, 0x2a, + 0x99, 0x61, 0x61, 0x07, 0x53, 0x21, 0x61, 0xff, 0xda, 0x82, 0xd1, 0xb2, 0x5f, 0xa3, 0x5b, 0xf7, + 0xbd, 0xb4, 0x4f, 0xf5, 0x8c, 0x03, 0x7d, 0x6d, 0x32, 0x0e, 0x3c, 0x02, 0xbd, 0x65, 0xbf, 0xd6, + 0x21, 0x74, 0xed, 0x3f, 0xb0, 0xa0, 0xbf, 0xec, 0xd7, 0x0e, 0x41, 0xf1, 0xf2, 0x8a, 0xa9, 0x78, + 0x39, 0x9e, 0xb3, 0x6e, 0x72, 0x74, 0x2d, 0x7f, 0xaf, 0x07, 0x46, 0x68, 0x3f, 0xfd, 0x0d, 0x39, + 0x95, 0xc6, 0xb0, 0x59, 0x5d, 0x0c, 0x1b, 0x7d, 0x06, 0xf8, 0xf5, 0xba, 0x7f, 0x3b, 0x39, 0xad, + 0x4b, 0xac, 0x14, 0x0b, 0x28, 0x7a, 0x1a, 0x06, 0x9a, 0x01, 0xd9, 0x76, 0x7d, 0xc1, 0x5f, 0x6b, + 0x6a, 0xac, 0xb2, 0x28, 0xc7, 0x0a, 0x83, 0x3e, 0xbc, 0x43, 0xd7, 0xa3, 0xbc, 0x44, 0xd5, 0xf7, + 0x6a, 0x5c, 0x37, 0x51, 0x14, 0x69, 0xb1, 0xb4, 0x72, 0x6c, 0x60, 0xa1, 0x9b, 0x30, 0xc8, 0xfe, + 0xb3, 0x63, 0xa7, 0xf7, 0xc0, 0xc7, 0x8e, 0x48, 0x14, 0x2c, 0x08, 0xe0, 0x98, 0x16, 0x7a, 0x16, + 0x20, 0x92, 0xa9, 0x65, 0x42, 0x11, 0xc2, 0x54, 0xbd, 0x45, 0x54, 0xd2, 0x99, 0x10, 0x6b, 0x58, + 0xe8, 0x29, 0x18, 0x8c, 0x1c, 0xb7, 0x7e, 0xd5, 0xf5, 0x98, 0xfe, 0x9e, 0xf6, 0x5f, 0xe4, 0xeb, + 0x15, 0x85, 0x38, 0x86, 0x53, 0x5e, 0x90, 0xc5, 0x84, 0x9a, 0xdb, 0x89, 0x44, 0x6a, 0xba, 0x22, + 0xe7, 0x05, 0xaf, 0xaa, 0x52, 0xac, 0x61, 0xa0, 0x4d, 0x38, 0xe9, 0x7a, 0x2c, 0x85, 0x14, 0xa9, + 0x6c, 0xb9, 0xcd, 0xb5, 0xab, 0x95, 0x1b, 0x24, 0x70, 0xd7, 0x77, 0xe6, 0x9c, 0xea, 0x16, 0xf1, + 0x64, 0x42, 0xfc, 0x47, 0x45, 0x17, 0x4f, 0x2e, 0xb7, 0xc1, 0xc5, 0x6d, 0x29, 0xd9, 0xcf, 0xb1, + 0xf5, 0x7e, 0xad, 0x82, 0x9e, 0x34, 0x8e, 0x8e, 0x63, 0xfa, 0xd1, 0xb1, 0xbf, 0x5b, 0xea, 0xbb, + 0x56, 0xd1, 0x62, 0xff, 0x5c, 0x84, 0xa3, 0x65, 0xbf, 0x56, 0xf6, 0x83, 0x68, 0xc9, 0x0f, 0x6e, + 0x3b, 0x41, 0x4d, 0x2e, 0xaf, 0x92, 0x8c, 0x7e, 0x44, 0xcf, 0xcf, 0x5e, 0x7e, 0xba, 0x18, 0x91, + 0x8d, 0x9e, 0x63, 0x1c, 0xdb, 0x01, 0x9d, 0x4d, 0xab, 0x8c, 0x77, 0x50, 0x49, 0xd8, 0x2e, 0x39, + 0x11, 0x41, 0xd7, 0x60, 0xa4, 0xaa, 0x5f, 0xa3, 0xa2, 0xfa, 0x13, 0xf2, 0x22, 0x33, 0xee, 0xd8, + 0xcc, 0x7b, 0xd7, 0xac, 0x6f, 0x7f, 0xdd, 0x12, 0xad, 0x70, 0x49, 0x04, 0xb7, 0x69, 0xed, 0x7c, + 0x9e, 0xce, 0xc3, 0x44, 0xa0, 0x57, 0xd1, 0x6c, 0xc3, 0x8e, 0xf2, 0xac, 0x36, 0x09, 0x20, 0x4e, + 0xe3, 0xa3, 0x8f, 0xc3, 0x09, 0xa3, 0x50, 0xaa, 0xc9, 0xb5, 0xdc, 0xd2, 0x4c, 0x56, 0x83, 0xf3, + 0x90, 0x70, 0x7e, 0x7d, 0xfb, 0xbb, 0xe1, 0x58, 0xf2, 0xbb, 0x84, 0xf4, 0xe4, 0x1e, 0xbf, 0xae, + 0x70, 0xb0, 0xaf, 0xb3, 0x5f, 0x80, 0x09, 0xfa, 0xac, 0x56, 0x2c, 0x22, 0x9b, 0xbf, 0xce, 0x01, + 0xa6, 0xfe, 0x5d, 0x3f, 0xbb, 0xe2, 0x12, 0x99, 0xd5, 0xd0, 0x27, 0x61, 0x34, 0x24, 0x2c, 0xaa, + 0x9a, 0x94, 0xda, 0xb5, 0xf1, 0x14, 0xaf, 0x2c, 0xea, 0x98, 0xfc, 0x65, 0x62, 0x96, 0xe1, 0x04, + 0x35, 0xd4, 0x80, 0xd1, 0xdb, 0xae, 0x57, 0xf3, 0x6f, 0x87, 0x92, 0xfe, 0x40, 0xbe, 0x0a, 0xe0, + 0x26, 0xc7, 0x4c, 0xf4, 0xd1, 0x68, 0xee, 0xa6, 0x41, 0x0c, 0x27, 0x88, 0xd3, 0x63, 0x24, 0x68, + 0x79, 0xb3, 0xe1, 0xf5, 0x90, 0x04, 0x22, 0xe6, 0x1b, 0x3b, 0x46, 0xb0, 0x2c, 0xc4, 0x31, 0x9c, + 0x1e, 0x23, 0xec, 0x0f, 0x73, 0x35, 0x67, 0xe7, 0x94, 0x38, 0x46, 0xb0, 0x2a, 0xc5, 0x1a, 0x06, + 0x3d, 0x66, 0xd9, 0xbf, 0x55, 0xdf, 0xc3, 0xbe, 0x1f, 0xc9, 0x83, 0x99, 0xa5, 0xa1, 0xd4, 0xca, + 0xb1, 0x81, 0x95, 0x13, 0x61, 0xae, 0xe7, 0xa0, 0x11, 0xe6, 0x50, 0xd4, 0xc6, 0xbb, 0x9e, 0x47, + 0x3a, 0xbe, 0xd8, 0xce, 0xbb, 0x7e, 0xff, 0x9e, 0x3c, 0xef, 0xe9, 0x3d, 0xbf, 0x2e, 0x06, 0xa8, + 0x97, 0x87, 0xd0, 0x63, 0x4a, 0xca, 0x0a, 0x1f, 0x1d, 0x09, 0x43, 0x8b, 0xd0, 0x1f, 0xee, 0x84, + 0xd5, 0xa8, 0x1e, 0xb6, 0x4b, 0x35, 0x5a, 0x61, 0x28, 0x5a, 0xa6, 0x6b, 0x5e, 0x05, 0xcb, 0xba, + 0xa8, 0x0a, 0x93, 0x82, 0xe2, 0xfc, 0xa6, 0xe3, 0xa9, 0x04, 0x88, 0xdc, 0x1a, 0xf1, 0xc2, 0xde, + 0x6e, 0x69, 0x52, 0xb4, 0xac, 0x83, 0xf7, 0x77, 0x4b, 0x74, 0x4b, 0x66, 0x40, 0x70, 0x16, 0x35, + 0xbe, 0xe4, 0xab, 0x55, 0xbf, 0xd1, 0x2c, 0x07, 0xfe, 0xba, 0x5b, 0x27, 0xed, 0x14, 0xbd, 0x15, + 0x03, 0x53, 0x2c, 0x79, 0xa3, 0x0c, 0x27, 0xa8, 0xa1, 0x5b, 0x30, 0xe6, 0x34, 0x9b, 0xb3, 0x41, + 0xc3, 0x0f, 0x64, 0x03, 0x43, 0xf9, 0x1a, 0x83, 0x59, 0x13, 0x95, 0xe7, 0x3f, 0x4c, 0x14, 0xe2, + 0x24, 0x41, 0xfb, 0xbb, 0x18, 0xbf, 0x5d, 0x71, 0x37, 0x3c, 0xe6, 0x93, 0x86, 0x1a, 0x30, 0xd2, + 0x64, 0x27, 0xb2, 0x48, 0x1b, 0x26, 0x76, 0xf1, 0xf3, 0x5d, 0xca, 0x0c, 0x6f, 0xb3, 0xc4, 0xa7, + 0x86, 0xed, 0x68, 0x59, 0x27, 0x87, 0x4d, 0xea, 0xf6, 0xbf, 0x3f, 0xc1, 0x38, 0xb6, 0x0a, 0x17, + 0x04, 0xf6, 0x0b, 0x0f, 0x41, 0xf1, 0xf4, 0x9f, 0xce, 0x17, 0xb9, 0xc7, 0x53, 0x2f, 0xbc, 0x0c, + 0xb1, 0xac, 0x8b, 0x3e, 0x01, 0xa3, 0xf4, 0x25, 0xad, 0xb8, 0xa6, 0x70, 0xea, 0x48, 0x7e, 0xe8, + 0x29, 0x85, 0xa5, 0xa7, 0x14, 0xd4, 0x2b, 0xe3, 0x04, 0x31, 0xf4, 0x06, 0x33, 0xa7, 0x94, 0xa4, + 0x0b, 0xdd, 0x90, 0xd6, 0x2d, 0x27, 0x25, 0x59, 0x8d, 0x08, 0x6a, 0xc1, 0x64, 0x3a, 0x71, 0x72, + 0x38, 0x65, 0xe7, 0x3f, 0x49, 0xd2, 0xb9, 0x8f, 0xe3, 0xdc, 0x6f, 0x69, 0x58, 0x88, 0xb3, 0xe8, + 0xa3, 0xab, 0xc9, 0xb4, 0xb6, 0x45, 0x43, 0x58, 0x9f, 0x4a, 0x6d, 0x3b, 0xd2, 0x36, 0xa3, 0xed, + 0x06, 0x9c, 0xd2, 0x32, 0x83, 0x5e, 0x0a, 0x1c, 0x66, 0xce, 0xe3, 0xb2, 0x8b, 0x42, 0xe3, 0x25, + 0x1f, 0xde, 0xdb, 0x2d, 0x9d, 0x5a, 0x6b, 0x87, 0x88, 0xdb, 0xd3, 0x41, 0xd7, 0xe0, 0x28, 0x0f, + 0x9c, 0xb2, 0x40, 0x9c, 0x5a, 0xdd, 0xf5, 0x14, 0xb3, 0xca, 0x8f, 0x95, 0x13, 0x7b, 0xbb, 0xa5, + 0xa3, 0xb3, 0x59, 0x08, 0x38, 0xbb, 0x1e, 0x7a, 0x05, 0x06, 0x6b, 0x9e, 0x3c, 0x00, 0xfb, 0x8c, + 0xe4, 0xab, 0x83, 0x0b, 0xab, 0x15, 0xf5, 0xfd, 0xf1, 0x1f, 0x1c, 0x57, 0x40, 0x1b, 0x5c, 0x5b, + 0xa4, 0x44, 0x7c, 0xfd, 0xa9, 0x78, 0x9a, 0x49, 0x29, 0xb8, 0x11, 0x89, 0x80, 0xab, 0x49, 0x95, + 0xa7, 0x9b, 0x11, 0xa4, 0xc0, 0x20, 0x8c, 0x5e, 0x07, 0x24, 0x92, 0xfc, 0xcc, 0x56, 0x59, 0x4e, + 0x3a, 0xcd, 0x84, 0x53, 0xbd, 0xdc, 0x2b, 0x29, 0x0c, 0x9c, 0x51, 0x0b, 0x5d, 0xa6, 0x27, 0x97, + 0x5e, 0x2a, 0x4e, 0x46, 0x95, 0xe2, 0x7b, 0x81, 0x34, 0x03, 0xc2, 0xac, 0x0e, 0x4d, 0x8a, 0x38, + 0x51, 0x0f, 0xd5, 0xe0, 0xa4, 0xd3, 0x8a, 0x7c, 0xa6, 0x88, 0x33, 0x51, 0xd7, 0xfc, 0x2d, 0xe2, + 0x31, 0x1d, 0xf8, 0x00, 0x8b, 0xd3, 0x79, 0x72, 0xb6, 0x0d, 0x1e, 0x6e, 0x4b, 0x85, 0xbe, 0x62, + 0xe8, 0x58, 0x68, 0x3a, 0x32, 0xc3, 0xa9, 0x9a, 0x2b, 0x8e, 0x25, 0x06, 0x7a, 0x01, 0x86, 0x36, + 0xfd, 0x30, 0x5a, 0x25, 0xd1, 0x6d, 0x3f, 0xd8, 0x12, 0x59, 0x05, 0xe2, 0x4c, 0x2e, 0x31, 0x08, + 0xeb, 0x78, 0xe8, 0x09, 0xe8, 0x67, 0x16, 0x5a, 0xcb, 0x0b, 0xec, 0x1a, 0x1c, 0x88, 0xcf, 0x98, + 0xcb, 0xbc, 0x18, 0x4b, 0xb8, 0x44, 0x5d, 0x2e, 0xcf, 0x33, 0x43, 0x97, 0x04, 0xea, 0x72, 0x79, + 0x1e, 0x4b, 0x38, 0x5d, 0xae, 0xe1, 0xa6, 0x13, 0x90, 0x72, 0xe0, 0x57, 0x49, 0xa8, 0xe5, 0x0f, + 0x7a, 0x88, 0xe7, 0x4c, 0xa0, 0xcb, 0xb5, 0x92, 0x85, 0x80, 0xb3, 0xeb, 0x21, 0x92, 0xce, 0x8a, + 0x3b, 0x9a, 0xaf, 0xa1, 0x4c, 0x73, 0x6a, 0x5d, 0x26, 0xc6, 0xf5, 0x60, 0x5c, 0xe5, 0xe3, 0xe5, + 0x59, 0x12, 0xc2, 0xa9, 0x31, 0xb6, 0xb6, 0xbb, 0x4f, 0xb1, 0xa0, 0x74, 0xbe, 0xcb, 0x09, 0x4a, + 0x38, 0x45, 0xdb, 0x08, 0x04, 0x3b, 0xde, 0x31, 0x10, 0xec, 0x79, 0x18, 0x0c, 0x5b, 0xb7, 0x6a, + 0x7e, 0xc3, 0x71, 0x3d, 0x66, 0xe8, 0xa2, 0xbd, 0x97, 0x2b, 0x12, 0x80, 0x63, 0x1c, 0xb4, 0x04, + 0x03, 0x8e, 0x54, 0xe8, 0xa2, 0xfc, 0x18, 0x77, 0x4a, 0x8d, 0xcb, 0xc3, 0x3e, 0x49, 0x15, 0xae, + 0xaa, 0x8b, 0x5e, 0x86, 0x11, 0x11, 0x47, 0x43, 0xa4, 0xb0, 0x9f, 0x34, 0xbd, 0x86, 0x2b, 0x3a, + 0x10, 0x9b, 0xb8, 0xe8, 0x3a, 0x0c, 0x45, 0x7e, 0x9d, 0xb9, 0xbe, 0x52, 0x06, 0xf6, 0x58, 0x7e, + 0x28, 0xda, 0x35, 0x85, 0xa6, 0xab, 0x1a, 0x54, 0x55, 0xac, 0xd3, 0x41, 0x6b, 0x7c, 0xbd, 0xb3, + 0x6c, 0x41, 0x24, 0x14, 0x39, 0xd0, 0x4f, 0xe5, 0x59, 0x29, 0x32, 0x34, 0x73, 0x3b, 0x88, 0x9a, + 0x58, 0x27, 0x83, 0x2e, 0xc1, 0x44, 0x33, 0x70, 0x7d, 0xb6, 0x26, 0x94, 0x82, 0x7a, 0xca, 0xcc, + 0x0d, 0x5a, 0x4e, 0x22, 0xe0, 0x74, 0x1d, 0x16, 0x06, 0x45, 0x14, 0x4e, 0x9d, 0xe0, 0xf9, 0xcd, + 0xb8, 0xf8, 0x81, 0x97, 0x61, 0x05, 0x45, 0x2b, 0xec, 0x24, 0xe6, 0x92, 0xb3, 0xa9, 0xe9, 0x7c, + 0xe7, 0x7a, 0x5d, 0xc2, 0xc6, 0xd9, 0x72, 0xf5, 0x17, 0xc7, 0x14, 0x50, 0x4d, 0x4b, 0x2b, 0x4e, + 0x1f, 0x37, 0xe1, 0xd4, 0xc9, 0x36, 0x66, 0xb2, 0x89, 0x97, 0x6c, 0xcc, 0x10, 0x18, 0xc5, 0x21, + 0x4e, 0xd0, 0x44, 0xaf, 0xc1, 0xb8, 0x88, 0x11, 0x10, 0x0f, 0xd3, 0xa9, 0xd8, 0x95, 0x08, 0x27, + 0x60, 0x38, 0x85, 0xcd, 0xf3, 0x8b, 0x39, 0xb7, 0xea, 0x44, 0x1c, 0x7d, 0x57, 0x5d, 0x6f, 0x2b, + 0x9c, 0x3a, 0xcd, 0xce, 0x07, 0x91, 0x5f, 0x2c, 0x09, 0xc5, 0x19, 0x35, 0xd0, 0x1a, 0x8c, 0x37, + 0x03, 0x42, 0x1a, 0xec, 0x09, 0x23, 0xee, 0xb3, 0x12, 0x8f, 0x02, 0x44, 0x7b, 0x52, 0x4e, 0xc0, + 0xf6, 0x33, 0xca, 0x70, 0x8a, 0x02, 0xba, 0x0d, 0x03, 0xfe, 0x36, 0x09, 0x36, 0x89, 0x53, 0x9b, + 0x3a, 0xd3, 0xc6, 0xc1, 0x4d, 0x5c, 0x6e, 0xd7, 0x04, 0x6e, 0xc2, 0xfe, 0x47, 0x16, 0x77, 0xb6, + 0xff, 0x91, 0x8d, 0xa1, 0xbf, 0x65, 0xc1, 0x09, 0xa9, 0x51, 0xab, 0x34, 0xe9, 0xa8, 0xcf, 0xfb, + 0x5e, 0x18, 0x05, 0x3c, 0x6e, 0xcd, 0xc3, 0xf9, 0xb1, 0x5c, 0xd6, 0x72, 0x2a, 0x29, 0xe1, 0xfd, + 0x89, 0x3c, 0x8c, 0x10, 0xe7, 0xb7, 0x48, 0x1f, 0xdd, 0x21, 0x89, 0xe4, 0x61, 0x34, 0x1b, 0x2e, + 0xbd, 0xb1, 0xb0, 0x3a, 0xf5, 0x08, 0x0f, 0xba, 0x43, 0x37, 0x43, 0x25, 0x09, 0xc4, 0x69, 0x7c, + 0x74, 0x01, 0x0a, 0x7e, 0x38, 0xf5, 0x68, 0x9b, 0x4c, 0xf4, 0x7e, 0xed, 0x5a, 0x85, 0xdb, 0x81, + 0x5e, 0xab, 0xe0, 0x82, 0x1f, 0xca, 0x1c, 0x5f, 0xf4, 0xa5, 0x19, 0x4e, 0x3d, 0xc6, 0x45, 0xbd, + 0x32, 0xc7, 0x17, 0x2b, 0xc4, 0x31, 0x1c, 0x6d, 0xc2, 0x58, 0x68, 0xbc, 0xe8, 0xc3, 0xa9, 0xb3, + 0x6c, 0xa4, 0x1e, 0xcb, 0x9b, 0x34, 0x03, 0x5b, 0x4b, 0xbe, 0x63, 0x52, 0xc1, 0x49, 0xb2, 0x7c, + 0x77, 0x69, 0x32, 0x85, 0x70, 0xea, 0xf1, 0x0e, 0xbb, 0x4b, 0x43, 0xd6, 0x77, 0x97, 0x4e, 0x03, + 0x27, 0x68, 0x4e, 0x7f, 0x07, 0x4c, 0xa4, 0xd8, 0xa5, 0x83, 0xf8, 0x3c, 0x4c, 0x6f, 0xc1, 0x88, + 0xb1, 0x24, 0x1f, 0xa8, 0x49, 0xcc, 0xef, 0x0e, 0xc2, 0xa0, 0x32, 0x55, 0x40, 0xe7, 0x4d, 0x2b, + 0x98, 0x13, 0x49, 0x2b, 0x98, 0x81, 0xb2, 0x5f, 0x33, 0x0c, 0x5f, 0xd6, 0x32, 0x62, 0xc9, 0xe6, + 0x1d, 0x80, 0xdd, 0x3b, 0x66, 0x69, 0xea, 0x97, 0x62, 0xd7, 0xe6, 0x34, 0x3d, 0x6d, 0x35, 0x3a, + 0x97, 0x60, 0xc2, 0xf3, 0x19, 0x8f, 0x4e, 0x6a, 0x92, 0x01, 0x63, 0x7c, 0xd6, 0xa0, 0x1e, 0xeb, + 0x2c, 0x81, 0x80, 0xd3, 0x75, 0x68, 0x83, 0x9c, 0x51, 0x4a, 0xaa, 0x90, 0x38, 0x1f, 0x85, 0x05, + 0x94, 0xbe, 0x0d, 0xf9, 0xaf, 0x70, 0x6a, 0x3c, 0xff, 0x6d, 0xc8, 0x2b, 0x25, 0x99, 0xb1, 0x50, + 0x32, 0x63, 0x4c, 0x63, 0xd2, 0xf4, 0x6b, 0xcb, 0x65, 0xc1, 0xe6, 0x6b, 0x51, 0xde, 0x6b, 0xcb, + 0x65, 0xcc, 0x61, 0x68, 0x16, 0xfa, 0xd8, 0x0f, 0x19, 0x43, 0x26, 0x6f, 0x9b, 0x2e, 0x97, 0xb5, + 0x1c, 0xa3, 0xac, 0x02, 0x16, 0x15, 0x99, 0x44, 0x9c, 0xbe, 0x8d, 0x98, 0x44, 0xbc, 0xff, 0x1e, + 0x25, 0xe2, 0x92, 0x00, 0x8e, 0x69, 0xa1, 0x3b, 0x70, 0xd4, 0x78, 0x8f, 0x2a, 0x4f, 0x35, 0xc8, + 0x57, 0x96, 0x27, 0x90, 0xe7, 0x4e, 0x89, 0x4e, 0x1f, 0x5d, 0xce, 0xa2, 0x84, 0xb3, 0x1b, 0x40, + 0x75, 0x98, 0xa8, 0xa6, 0x5a, 0x1d, 0xe8, 0xbe, 0x55, 0xb5, 0x2e, 0xd2, 0x2d, 0xa6, 0x09, 0xa3, + 0x97, 0x61, 0xe0, 0x6d, 0x9f, 0x1b, 0xb6, 0x89, 0xa7, 0x89, 0x8c, 0x92, 0x32, 0xf0, 0xc6, 0xb5, + 0x0a, 0x2b, 0xdf, 0xdf, 0x2d, 0x0d, 0x95, 0xfd, 0x9a, 0xfc, 0x8b, 0x55, 0x05, 0xf4, 0x03, 0x16, + 0x4c, 0xa7, 0x1f, 0xbc, 0xaa, 0xd3, 0x23, 0xdd, 0x77, 0xda, 0x16, 0x8d, 0x4e, 0x2f, 0xe6, 0x92, + 0xc3, 0x6d, 0x9a, 0x42, 0x1f, 0xa6, 0xfb, 0x29, 0x74, 0xef, 0x12, 0x91, 0xa0, 0xfd, 0xe1, 0x78, + 0x3f, 0xd1, 0xd2, 0xfd, 0xdd, 0xd2, 0x18, 0x3f, 0x19, 0xdd, 0xbb, 0x2a, 0x1e, 0x3d, 0xaf, 0x80, + 0xbe, 0x1b, 0x8e, 0x06, 0x69, 0xd9, 0x30, 0x91, 0x4c, 0xf8, 0x93, 0xdd, 0x9c, 0xb2, 0xc9, 0x09, + 0xc7, 0x59, 0x04, 0x71, 0x76, 0x3b, 0xf6, 0xaf, 0x59, 0x4c, 0x27, 0x20, 0xba, 0x45, 0xc2, 0x56, + 0x3d, 0x3a, 0x04, 0x63, 0xb2, 0x45, 0x43, 0xdf, 0x7e, 0xcf, 0xd6, 0x60, 0xff, 0xd2, 0x62, 0xd6, + 0x60, 0x87, 0xe8, 0xd7, 0xf6, 0x06, 0x0c, 0x44, 0xa2, 0x35, 0xd1, 0xf5, 0x3c, 0xcb, 0x15, 0xd9, + 0x29, 0x66, 0x11, 0xa7, 0x1e, 0x39, 0xb2, 0x14, 0x2b, 0x32, 0xf6, 0x3f, 0xe3, 0x33, 0x20, 0x21, + 0x87, 0xa0, 0xd6, 0x5c, 0x30, 0xd5, 0x9a, 0xa5, 0x0e, 0x5f, 0x90, 0xa3, 0xde, 0xfc, 0xa7, 0x66, + 0xbf, 0x99, 0x70, 0xef, 0xdd, 0x6e, 0x86, 0x68, 0x7f, 0xde, 0x02, 0x88, 0x13, 0x80, 0x74, 0x91, + 0x90, 0xf9, 0x22, 0x7d, 0xd6, 0xf8, 0x91, 0x5f, 0xf5, 0xeb, 0x42, 0xf5, 0x72, 0x32, 0xd6, 0xac, + 0xf2, 0xf2, 0x7d, 0xed, 0x37, 0x56, 0xd8, 0xa8, 0x24, 0x23, 0xf2, 0x16, 0x63, 0x5d, 0xbf, 0x11, + 0x8d, 0xf7, 0x4b, 0x16, 0x1c, 0xc9, 0x72, 0x92, 0xa0, 0x8f, 0x64, 0x2e, 0xe6, 0x54, 0x26, 0xa2, + 0x6a, 0x36, 0x6f, 0x88, 0x72, 0xac, 0x30, 0xba, 0xce, 0x74, 0x7d, 0xb0, 0xe4, 0x14, 0xd7, 0x60, + 0xa4, 0x1c, 0x10, 0x8d, 0xbf, 0x78, 0x35, 0xce, 0x9b, 0x33, 0x38, 0xf7, 0xf4, 0x81, 0x23, 0x0f, + 0xd9, 0x5f, 0x2e, 0xc0, 0x11, 0x6e, 0xe8, 0x34, 0xbb, 0xed, 0xbb, 0xb5, 0xb2, 0x5f, 0x13, 0xae, + 0xad, 0x6f, 0xc2, 0x70, 0x53, 0x93, 0x4d, 0xb7, 0x0b, 0xb4, 0xae, 0xcb, 0xb0, 0x63, 0x69, 0x9a, + 0x5e, 0x8a, 0x0d, 0x5a, 0xa8, 0x06, 0xc3, 0x64, 0xdb, 0xad, 0x2a, 0x6b, 0x99, 0xc2, 0x81, 0x2f, + 0x69, 0xd5, 0xca, 0xa2, 0x46, 0x07, 0x1b, 0x54, 0xbb, 0x36, 0x4f, 0xd6, 0x58, 0xb4, 0x9e, 0x0e, + 0x16, 0x32, 0x3f, 0x6e, 0xc1, 0xf1, 0x9c, 0xb0, 0xec, 0xb4, 0xb9, 0xdb, 0xcc, 0xa4, 0x4c, 0x2c, + 0x5b, 0xd5, 0x1c, 0x37, 0x34, 0xc3, 0x02, 0x8a, 0x3e, 0x0a, 0xd0, 0x8c, 0x53, 0x52, 0x76, 0x88, + 0x5f, 0x6d, 0x44, 0xb2, 0xd5, 0x82, 0x92, 0xaa, 0xcc, 0x95, 0x1a, 0x2d, 0xfb, 0x4b, 0x3d, 0xd0, + 0xcb, 0x0c, 0x93, 0x50, 0x19, 0xfa, 0x37, 0x79, 0xcc, 0xbc, 0xb6, 0xf3, 0x46, 0x71, 0x65, 0x10, + 0xbe, 0x78, 0xde, 0xb4, 0x52, 0x2c, 0xc9, 0xa0, 0x15, 0x98, 0xe4, 0xe9, 0x36, 0xeb, 0x0b, 0xa4, + 0xee, 0xec, 0x48, 0xb1, 0x6f, 0x81, 0x7d, 0xaa, 0x12, 0x7f, 0x2f, 0xa7, 0x51, 0x70, 0x56, 0x3d, + 0xf4, 0x2a, 0x8c, 0xd2, 0x67, 0xb8, 0xdf, 0x8a, 0x24, 0x25, 0x9e, 0xdf, 0x52, 0xbd, 0x4c, 0xd6, + 0x0c, 0x28, 0x4e, 0x60, 0xa3, 0x97, 0x61, 0xa4, 0x99, 0x12, 0x70, 0xf7, 0xc6, 0x92, 0x20, 0x53, + 0xa8, 0x6d, 0xe2, 0x32, 0x3f, 0x89, 0x16, 0xf3, 0x0a, 0x59, 0xdb, 0x0c, 0x48, 0xb8, 0xe9, 0xd7, + 0x6b, 0x8c, 0x03, 0xee, 0xd5, 0xfc, 0x24, 0x12, 0x70, 0x9c, 0xaa, 0x41, 0xa9, 0xac, 0x3b, 0x6e, + 0xbd, 0x15, 0x90, 0x98, 0x4a, 0x9f, 0x49, 0x65, 0x29, 0x01, 0xc7, 0xa9, 0x1a, 0x9d, 0x25, 0xf7, + 0xfd, 0xf7, 0x47, 0x72, 0x6f, 0xff, 0x4c, 0x01, 0x8c, 0xa9, 0x7d, 0x0f, 0xe7, 0xdd, 0x7c, 0x05, + 0x7a, 0x36, 0x82, 0x66, 0x55, 0x18, 0xe1, 0x65, 0x7e, 0x59, 0x9c, 0xfd, 0x9f, 0x7f, 0x19, 0xfd, + 0x8f, 0x59, 0x2d, 0xba, 0xc7, 0x8f, 0x96, 0x03, 0x9f, 0x5e, 0x72, 0x32, 0xac, 0xa6, 0x72, 0x47, + 0xea, 0x97, 0x81, 0x35, 0xda, 0x04, 0xa0, 0x16, 0x3e, 0x15, 0x9c, 0x82, 0x61, 0xaf, 0x56, 0x11, + 0xe1, 0x73, 0x24, 0x15, 0x74, 0x01, 0x86, 0x44, 0x2a, 0x44, 0xe6, 0x35, 0xc3, 0x37, 0x13, 0xb3, + 0xaf, 0x5b, 0x88, 0x8b, 0xb1, 0x8e, 0x63, 0xff, 0x60, 0x01, 0x26, 0x33, 0xdc, 0x1e, 0xf9, 0x35, + 0xb2, 0xe1, 0x86, 0x51, 0xb0, 0x93, 0xbc, 0x9c, 0xb0, 0x28, 0xc7, 0x0a, 0x83, 0x9e, 0x55, 0xfc, + 0xa2, 0x4a, 0x5e, 0x4e, 0xc2, 0xad, 0x48, 0x40, 0x0f, 0x98, 0xaa, 0xff, 0x0c, 0xf4, 0xb4, 0x42, + 0x22, 0x63, 0xdd, 0xab, 0x6b, 0x9b, 0x29, 0xec, 0x19, 0x84, 0x3e, 0x01, 0x37, 0x94, 0x16, 0x5a, + 0x7b, 0x02, 0x72, 0x3d, 0x34, 0x87, 0xd1, 0xce, 0x45, 0xc4, 0x73, 0xbc, 0x48, 0x3c, 0x14, 0xe3, + 0x18, 0xc8, 0xac, 0x14, 0x0b, 0xa8, 0xfd, 0xc5, 0x22, 0x9c, 0xc8, 0x75, 0x84, 0xa6, 0x5d, 0x6f, + 0xf8, 0x9e, 0x1b, 0xf9, 0xca, 0x70, 0x91, 0xc7, 0x3d, 0x26, 0xcd, 0xcd, 0x15, 0x51, 0x8e, 0x15, + 0x06, 0x3a, 0x0b, 0xbd, 0x4c, 0x28, 0x9e, 0x4c, 0x83, 0x86, 0xe7, 0x16, 0x78, 0x44, 0x49, 0x0e, + 0xd6, 0x6e, 0xf5, 0x62, 0xdb, 0x5b, 0xfd, 0x11, 0xca, 0xc1, 0xf8, 0xf5, 0xe4, 0x85, 0x42, 0xbb, + 0xeb, 0xfb, 0x75, 0xcc, 0x80, 0xe8, 0x31, 0x31, 0x5e, 0x09, 0x4b, 0x3d, 0xec, 0xd4, 0xfc, 0x50, + 0x1b, 0xb4, 0x27, 0xa0, 0x7f, 0x8b, 0xec, 0x04, 0xae, 0xb7, 0x91, 0xb4, 0xe0, 0xbc, 0xc2, 0x8b, + 0xb1, 0x84, 0x9b, 0x59, 0xbf, 0xfb, 0xef, 0x47, 0xd6, 0x6f, 0x7d, 0x05, 0x0c, 0x74, 0x64, 0x4f, + 0x7e, 0xa8, 0x08, 0x63, 0x78, 0x6e, 0xe1, 0xfd, 0x89, 0xb8, 0x9e, 0x9e, 0x88, 0xfb, 0x91, 0x1c, + 0xfb, 0x60, 0xb3, 0xf1, 0xcb, 0x16, 0x8c, 0xb1, 0x84, 0x8c, 0x22, 0x8a, 0x89, 0xeb, 0x7b, 0x87, + 0xf0, 0x14, 0x78, 0x04, 0x7a, 0x03, 0xda, 0xa8, 0x98, 0x41, 0xb5, 0xc7, 0x59, 0x4f, 0x30, 0x87, + 0xa1, 0x93, 0xd0, 0xc3, 0xba, 0x40, 0x27, 0x6f, 0x98, 0x1f, 0xc1, 0x0b, 0x4e, 0xe4, 0x60, 0x56, + 0xca, 0xe2, 0x29, 0x62, 0xd2, 0xac, 0xbb, 0xbc, 0xd3, 0xb1, 0xc9, 0xc2, 0xbb, 0x23, 0x44, 0x4a, + 0x66, 0xd7, 0xde, 0x59, 0x3c, 0xc5, 0x6c, 0x92, 0xed, 0x9f, 0xd9, 0x7f, 0x5e, 0x80, 0xd3, 0x99, + 0xf5, 0xba, 0x8e, 0xa7, 0xd8, 0xbe, 0xf6, 0x83, 0x4c, 0xdf, 0x56, 0x3c, 0x44, 0xfb, 0xf8, 0x9e, + 0x6e, 0xb9, 0xff, 0xde, 0x2e, 0xc2, 0x1c, 0x66, 0x0e, 0xd9, 0xbb, 0x24, 0xcc, 0x61, 0x66, 0xdf, + 0x72, 0xc4, 0x04, 0x7f, 0x53, 0xc8, 0xf9, 0x16, 0x26, 0x30, 0x38, 0x47, 0xcf, 0x19, 0x06, 0x0c, + 0xe5, 0x23, 0x9c, 0x9f, 0x31, 0xbc, 0x0c, 0x2b, 0x28, 0x9a, 0x85, 0xb1, 0x86, 0xeb, 0xd1, 0xc3, + 0x67, 0xc7, 0x64, 0xc5, 0x95, 0x2e, 0x63, 0xc5, 0x04, 0xe3, 0x24, 0x3e, 0x72, 0xb5, 0x10, 0x88, + 0xfc, 0xeb, 0x5e, 0x3e, 0xd0, 0xae, 0x9b, 0x31, 0xcd, 0x39, 0xd4, 0x28, 0x66, 0x84, 0x43, 0x5c, + 0xd1, 0xe4, 0x44, 0xc5, 0xee, 0xe5, 0x44, 0xc3, 0xd9, 0x32, 0xa2, 0xe9, 0x97, 0x61, 0xe4, 0x9e, + 0x75, 0x23, 0xf6, 0x37, 0x8a, 0xf0, 0x50, 0x9b, 0x6d, 0xcf, 0xcf, 0x7a, 0x63, 0x0e, 0xb4, 0xb3, + 0x3e, 0x35, 0x0f, 0x65, 0x38, 0xb2, 0xde, 0xaa, 0xd7, 0x77, 0x98, 0x23, 0x18, 0xa9, 0x49, 0x0c, + 0xc1, 0x53, 0x4a, 0xe1, 0xc8, 0x91, 0xa5, 0x0c, 0x1c, 0x9c, 0x59, 0x93, 0x3e, 0xb1, 0xe8, 0x4d, + 0xb2, 0xa3, 0x48, 0x25, 0x9e, 0x58, 0x58, 0x07, 0x62, 0x13, 0x17, 0x5d, 0x82, 0x09, 0x67, 0xdb, + 0x71, 0x79, 0xfa, 0x0b, 0x49, 0x80, 0xbf, 0xb1, 0x94, 0x2c, 0x7a, 0x36, 0x89, 0x80, 0xd3, 0x75, + 0xd0, 0xeb, 0x80, 0xfc, 0x5b, 0xcc, 0xb9, 0xa4, 0x76, 0x89, 0x78, 0x42, 0xeb, 0xce, 0xe6, 0xae, + 0x18, 0x1f, 0x09, 0xd7, 0x52, 0x18, 0x38, 0xa3, 0x56, 0x22, 0x18, 0x5f, 0x5f, 0x7e, 0x30, 0xbe, + 0xf6, 0xe7, 0x62, 0xc7, 0xcc, 0x81, 0x6f, 0xc1, 0xc8, 0x41, 0x2d, 0xa6, 0x9f, 0x80, 0xfe, 0x40, + 0xe4, 0x64, 0x4f, 0x78, 0x5d, 0xcb, 0x8c, 0xd5, 0x12, 0x6e, 0xff, 0x17, 0x0b, 0x94, 0x2c, 0xd9, + 0x8c, 0xbb, 0xfd, 0x32, 0x33, 0xff, 0xe6, 0x52, 0x70, 0x2d, 0xd4, 0xd6, 0x51, 0xcd, 0xfc, 0x3b, + 0x06, 0x62, 0x13, 0x97, 0x2f, 0xb7, 0x30, 0x8e, 0xf0, 0x60, 0x3c, 0x20, 0x44, 0x58, 0x50, 0x85, + 0x81, 0x3e, 0x06, 0xfd, 0x35, 0x77, 0xdb, 0x0d, 0x85, 0x1c, 0xed, 0xc0, 0x7a, 0xbb, 0xf8, 0xfb, + 0x16, 0x38, 0x19, 0x2c, 0xe9, 0xd9, 0x3f, 0x62, 0x81, 0xd2, 0x4b, 0x5e, 0x26, 0x4e, 0x3d, 0xda, + 0x44, 0xaf, 0x01, 0x48, 0x0a, 0x4a, 0xf6, 0x26, 0xad, 0xa5, 0x00, 0x2b, 0xc8, 0xbe, 0xf1, 0x0f, + 0x6b, 0x75, 0xd0, 0xab, 0xd0, 0xb7, 0xc9, 0x68, 0x89, 0x6f, 0x3b, 0xab, 0x54, 0x5d, 0xac, 0x74, + 0x7f, 0xb7, 0x74, 0xc4, 0x6c, 0x53, 0xde, 0x62, 0xbc, 0x96, 0xfd, 0x43, 0x85, 0x78, 0x4e, 0xdf, + 0x68, 0xf9, 0x91, 0x73, 0x08, 0x9c, 0xc8, 0x25, 0x83, 0x13, 0x79, 0x2c, 0x7b, 0xa1, 0x6a, 0x5d, + 0xca, 0xe5, 0x40, 0xae, 0x25, 0x38, 0x90, 0xc7, 0x3b, 0x93, 0x6a, 0xcf, 0x79, 0xfc, 0x73, 0x0b, + 0x26, 0x0c, 0xfc, 0x43, 0xb8, 0x00, 0x97, 0xcc, 0x0b, 0xf0, 0xe1, 0x8e, 0xdf, 0x90, 0x73, 0xf1, + 0x7d, 0x7f, 0x31, 0xd1, 0x77, 0x76, 0xe1, 0xbd, 0x0d, 0x3d, 0x9b, 0x4e, 0x50, 0x13, 0xef, 0xfa, + 0xf3, 0x5d, 0x8d, 0xf5, 0xcc, 0x65, 0x27, 0x10, 0x96, 0x16, 0x4f, 0xcb, 0x51, 0xa7, 0x45, 0x1d, + 0xad, 0x2c, 0x58, 0x53, 0xe8, 0x22, 0xf4, 0x85, 0x55, 0xbf, 0xa9, 0xfc, 0xe4, 0x58, 0x3a, 0xed, + 0x0a, 0x2b, 0xd9, 0xdf, 0x2d, 0x21, 0xb3, 0x39, 0x5a, 0x8c, 0x05, 0x3e, 0x7a, 0x13, 0x46, 0xd8, + 0x2f, 0x65, 0xf6, 0x58, 0xcc, 0x97, 0xc0, 0x54, 0x74, 0x44, 0x6e, 0x13, 0x6c, 0x14, 0x61, 0x93, + 0xd4, 0xf4, 0x06, 0x0c, 0xaa, 0xcf, 0x7a, 0xa0, 0xda, 0xfa, 0xff, 0x58, 0x84, 0xc9, 0x8c, 0x35, + 0x87, 0x42, 0x63, 0x26, 0x2e, 0x74, 0xb9, 0x54, 0xdf, 0xe1, 0x5c, 0x84, 0xec, 0x01, 0x58, 0x13, + 0x6b, 0xab, 0xeb, 0x46, 0xaf, 0x87, 0x24, 0xd9, 0x28, 0x2d, 0xea, 0xdc, 0x28, 0x6d, 0xec, 0xd0, + 0x86, 0x9a, 0x36, 0xa4, 0x7a, 0xfa, 0x40, 0xe7, 0xf4, 0x37, 0x7b, 0xe0, 0x48, 0x56, 0x0c, 0x69, + 0xf4, 0x19, 0x10, 0xe9, 0xff, 0xc5, 0xb4, 0x3e, 0xdf, 0x6e, 0x84, 0xf5, 0x9a, 0x33, 0xcc, 0x17, + 0x4c, 0x84, 0x6e, 0x9d, 0x91, 0xc7, 0x11, 0x2f, 0xec, 0x38, 0xcc, 0xa2, 0x4d, 0x16, 0x52, 0x49, + 0xdc, 0x9e, 0xf2, 0xf8, 0xf8, 0x50, 0xd7, 0x1d, 0x10, 0xf7, 0x6f, 0x98, 0x30, 0xa9, 0x92, 0xc5, + 0x9d, 0x4d, 0xaa, 0x64, 0xcb, 0x68, 0x19, 0xfa, 0xaa, 0xdc, 0x56, 0xa7, 0xd8, 0xf9, 0x08, 0xe3, + 0x86, 0x3a, 0xea, 0x00, 0x16, 0x06, 0x3a, 0x82, 0xc0, 0xb4, 0x0b, 0x43, 0xda, 0xc0, 0x3c, 0xd0, + 0xc5, 0xb3, 0x45, 0x2f, 0x3e, 0x6d, 0x08, 0x1e, 0xe8, 0x02, 0xfa, 0x31, 0xed, 0xee, 0x17, 0xe7, + 0xc1, 0x07, 0x0d, 0xde, 0xe9, 0x64, 0xc2, 0x05, 0x2f, 0xb1, 0xaf, 0x18, 0x2f, 0x55, 0x31, 0x63, + 0x9e, 0xe7, 0xa6, 0x4e, 0x32, 0x2f, 0xfc, 0xf6, 0x71, 0xce, 0xed, 0x1f, 0xb7, 0x20, 0xe1, 0x24, + 0xa5, 0xc4, 0x9d, 0x56, 0xae, 0xb8, 0xf3, 0x0c, 0xf4, 0x04, 0x7e, 0x9d, 0x24, 0x53, 0xd3, 0x63, + 0xbf, 0x4e, 0x30, 0x83, 0x50, 0x8c, 0x28, 0x16, 0x62, 0x0d, 0xeb, 0x0f, 0x74, 0xf1, 0xf4, 0x7e, + 0x04, 0x7a, 0xeb, 0x64, 0x9b, 0xd4, 0x93, 0x19, 0x44, 0xaf, 0xd2, 0x42, 0xcc, 0x61, 0xf6, 0x2f, + 0xf7, 0xc0, 0xa9, 0xb6, 0x91, 0xd7, 0x28, 0x83, 0xb9, 0xe1, 0x44, 0xe4, 0xb6, 0xb3, 0x93, 0xcc, + 0x9c, 0x77, 0x89, 0x17, 0x63, 0x09, 0x67, 0xce, 0xc8, 0x3c, 0x93, 0x4c, 0x42, 0x38, 0x2c, 0x12, + 0xc8, 0x08, 0xa8, 0x29, 0x6c, 0x2c, 0xde, 0x0f, 0x61, 0xe3, 0xb3, 0x00, 0x61, 0x58, 0xe7, 0x06, + 0x97, 0x35, 0xe1, 0xe5, 0x1c, 0x67, 0x1c, 0xaa, 0x5c, 0x15, 0x10, 0xac, 0x61, 0xa1, 0x05, 0x18, + 0x6f, 0x06, 0x7e, 0xc4, 0x65, 0xed, 0x0b, 0xdc, 0x26, 0xb9, 0xd7, 0x0c, 0x7a, 0x55, 0x4e, 0xc0, + 0x71, 0xaa, 0x06, 0x7a, 0x01, 0x86, 0x44, 0x20, 0xac, 0xb2, 0xef, 0xd7, 0x85, 0x78, 0x4f, 0x99, + 0xe9, 0x56, 0x62, 0x10, 0xd6, 0xf1, 0xb4, 0x6a, 0x4c, 0x80, 0xdf, 0x9f, 0x59, 0x8d, 0x0b, 0xf1, + 0x35, 0xbc, 0x44, 0xd0, 0xfc, 0x81, 0xae, 0x82, 0xe6, 0xc7, 0x02, 0xcf, 0xc1, 0xae, 0xf5, 0xc9, + 0xd0, 0x51, 0x44, 0xf8, 0x95, 0x1e, 0x98, 0x14, 0x0b, 0xe7, 0x41, 0x2f, 0x97, 0xeb, 0xe9, 0xe5, + 0x72, 0x3f, 0x44, 0xa2, 0xef, 0xaf, 0x99, 0xc3, 0x5e, 0x33, 0x3f, 0x6c, 0x81, 0xc9, 0x43, 0xa2, + 0xff, 0x2f, 0x37, 0xf5, 0xe8, 0x0b, 0xb9, 0x3c, 0x69, 0x1c, 0x51, 0xfb, 0x9d, 0x25, 0x21, 0xb5, + 0xff, 0x93, 0x05, 0x0f, 0x77, 0xa4, 0x88, 0x16, 0x61, 0x90, 0x31, 0xba, 0xda, 0xbb, 0xf8, 0x71, + 0xe5, 0xb3, 0x20, 0x01, 0x39, 0x7c, 0x77, 0x5c, 0x13, 0x2d, 0xa6, 0x72, 0xbc, 0x3e, 0x91, 0x91, + 0xe3, 0xf5, 0xa8, 0x31, 0x3c, 0xf7, 0x98, 0xe4, 0xf5, 0x0b, 0xf4, 0xc6, 0x31, 0x7d, 0x12, 0x3f, + 0x64, 0x88, 0x73, 0xed, 0x84, 0x38, 0x17, 0x99, 0xd8, 0xda, 0x1d, 0xf2, 0x1a, 0x8c, 0xb3, 0x08, + 0x99, 0xcc, 0x83, 0x46, 0x38, 0x33, 0x16, 0x62, 0x2b, 0xf9, 0xab, 0x09, 0x18, 0x4e, 0x61, 0xdb, + 0x7f, 0x5a, 0x84, 0x3e, 0xbe, 0xfd, 0x0e, 0xe1, 0xe1, 0xfb, 0x14, 0x0c, 0xba, 0x8d, 0x46, 0x8b, + 0xa7, 0xed, 0xec, 0x8d, 0x6d, 0xae, 0x97, 0x65, 0x21, 0x8e, 0xe1, 0x68, 0x49, 0x68, 0x12, 0xda, + 0x04, 0xe1, 0xe6, 0x1d, 0x9f, 0x59, 0x70, 0x22, 0x87, 0x73, 0x71, 0xea, 0x9e, 0x8d, 0x75, 0x0e, + 0xe8, 0x93, 0x00, 0x61, 0x14, 0xb8, 0xde, 0x06, 0x2d, 0x13, 0x99, 0x1a, 0x9e, 0x6c, 0x43, 0xad, + 0xa2, 0x90, 0x39, 0xcd, 0xf8, 0xcc, 0x51, 0x00, 0xac, 0x51, 0x44, 0x33, 0xc6, 0x4d, 0x3f, 0x9d, + 0x98, 0x3b, 0xe0, 0x54, 0xe3, 0x39, 0x9b, 0x7e, 0x11, 0x06, 0x15, 0xf1, 0x4e, 0x72, 0xc5, 0x61, + 0x9d, 0x61, 0xfb, 0x08, 0x8c, 0x25, 0xfa, 0x76, 0x20, 0xb1, 0xe4, 0xaf, 0x58, 0x30, 0xc6, 0x3b, + 0xb3, 0xe8, 0x6d, 0x8b, 0xdb, 0xe0, 0x2e, 0x1c, 0xa9, 0x67, 0x9c, 0xca, 0x62, 0xfa, 0xbb, 0x3f, + 0xc5, 0x95, 0x18, 0x32, 0x0b, 0x8a, 0x33, 0xdb, 0x40, 0xe7, 0xe8, 0x8e, 0xa3, 0xa7, 0xae, 0x53, + 0x17, 0xd1, 0x36, 0x86, 0xf9, 0x6e, 0xe3, 0x65, 0x58, 0x41, 0xed, 0x3f, 0xb4, 0x60, 0x82, 0xf7, + 0xfc, 0x0a, 0xd9, 0x51, 0x67, 0xd3, 0xb7, 0xb2, 0xef, 0x22, 0x61, 0x74, 0x21, 0x27, 0x61, 0xb4, + 0xfe, 0x69, 0xc5, 0xb6, 0x9f, 0xf6, 0x65, 0x0b, 0xc4, 0x0a, 0x39, 0x04, 0x49, 0xcb, 0x77, 0x98, + 0x92, 0x96, 0xe9, 0xfc, 0x4d, 0x90, 0x23, 0x62, 0xf9, 0x6b, 0x0b, 0xc6, 0x39, 0x42, 0x6c, 0x05, + 0xf1, 0x2d, 0x9d, 0x87, 0x39, 0xf3, 0x8b, 0x32, 0xcd, 0x5a, 0xaf, 0x90, 0x9d, 0x35, 0xbf, 0xec, + 0x44, 0x9b, 0xd9, 0x1f, 0x65, 0x4c, 0x56, 0x4f, 0xdb, 0xc9, 0xaa, 0xc9, 0x0d, 0x64, 0x24, 0x26, + 0xec, 0x20, 0x00, 0x3e, 0x68, 0x62, 0x42, 0xfb, 0xcf, 0x2c, 0x40, 0xbc, 0x19, 0x83, 0x71, 0xa3, + 0xec, 0x10, 0x2b, 0xd5, 0x2e, 0xba, 0xf8, 0x68, 0x52, 0x10, 0xac, 0x61, 0xdd, 0x97, 0xe1, 0x49, + 0x98, 0xb2, 0x14, 0x3b, 0x9b, 0xb2, 0x1c, 0x60, 0x44, 0xbf, 0xdc, 0x0f, 0x49, 0x9f, 0x49, 0x74, + 0x03, 0x86, 0xab, 0x4e, 0xd3, 0xb9, 0xe5, 0xd6, 0xdd, 0xc8, 0x25, 0x61, 0x3b, 0x3b, 0xb7, 0x79, + 0x0d, 0x4f, 0x18, 0x1f, 0x68, 0x25, 0xd8, 0xa0, 0x83, 0x66, 0x00, 0x9a, 0x81, 0xbb, 0xed, 0xd6, + 0xc9, 0x06, 0x13, 0x08, 0xb1, 0xf8, 0x3e, 0xdc, 0xe8, 0x4e, 0x96, 0x62, 0x0d, 0x23, 0x23, 0xf4, + 0x46, 0xf1, 0x01, 0x87, 0xde, 0x80, 0x43, 0x0b, 0xbd, 0xd1, 0x73, 0xa0, 0xd0, 0x1b, 0x03, 0x07, + 0x0e, 0xbd, 0xd1, 0xdb, 0x55, 0xe8, 0x0d, 0x0c, 0xc7, 0x24, 0xef, 0x49, 0xff, 0x2f, 0xb9, 0x75, + 0x22, 0x1e, 0x1c, 0x3c, 0x28, 0xd1, 0xf4, 0xde, 0x6e, 0xe9, 0x18, 0xce, 0xc4, 0xc0, 0x39, 0x35, + 0xd1, 0x47, 0x61, 0xca, 0xa9, 0xd7, 0xfd, 0xdb, 0x6a, 0x52, 0x17, 0xc3, 0xaa, 0x53, 0xe7, 0xca, + 0xa5, 0x7e, 0x46, 0xf5, 0xe4, 0xde, 0x6e, 0x69, 0x6a, 0x36, 0x07, 0x07, 0xe7, 0xd6, 0x46, 0xaf, + 0xc0, 0x60, 0x33, 0xf0, 0xab, 0x2b, 0x9a, 0x63, 0xf7, 0x69, 0x3a, 0x80, 0x65, 0x59, 0xb8, 0xbf, + 0x5b, 0x1a, 0x51, 0x7f, 0xd8, 0x85, 0x1f, 0x57, 0xc8, 0x88, 0x6a, 0x31, 0xf4, 0xa0, 0xa3, 0x5a, + 0x0c, 0xdf, 0xef, 0xa8, 0x16, 0x5b, 0x30, 0x59, 0x21, 0x81, 0xeb, 0xd4, 0xdd, 0xbb, 0x94, 0x27, + 0x97, 0x67, 0xe0, 0x1a, 0x0c, 0x06, 0x89, 0x53, 0xbf, 0xab, 0xe0, 0xdb, 0x9a, 0x5c, 0x46, 0x9e, + 0xf2, 0x31, 0x21, 0xfb, 0x7f, 0x5b, 0xd0, 0x2f, 0xfc, 0x30, 0x0f, 0x81, 0x33, 0x9d, 0x35, 0x54, + 0x32, 0xa5, 0xec, 0x49, 0x61, 0x9d, 0xc9, 0x55, 0xc6, 0x2c, 0x27, 0x94, 0x31, 0x0f, 0xb7, 0x23, + 0xd2, 0x5e, 0x0d, 0xf3, 0x77, 0x8b, 0xf4, 0x85, 0x60, 0x44, 0x04, 0x78, 0xf0, 0x43, 0xb0, 0x0a, + 0xfd, 0xa1, 0xf0, 0x48, 0x2f, 0xe4, 0xfb, 0xf2, 0x24, 0x27, 0x31, 0xb6, 0x81, 0x14, 0x3e, 0xe8, + 0x92, 0x48, 0xa6, 0xab, 0x7b, 0xf1, 0x01, 0xba, 0xba, 0x77, 0x8a, 0x99, 0xd0, 0x73, 0x3f, 0x62, + 0x26, 0xd8, 0x5f, 0x63, 0xb7, 0xb3, 0x5e, 0x7e, 0x08, 0x8c, 0xdb, 0x25, 0xf3, 0x1e, 0xb7, 0xdb, + 0xac, 0x2c, 0xd1, 0xa9, 0x1c, 0x06, 0xee, 0x97, 0x2c, 0x38, 0x95, 0xf1, 0x55, 0x1a, 0x37, 0xf7, + 0x34, 0x0c, 0x38, 0xad, 0x9a, 0xab, 0xf6, 0xb2, 0xa6, 0x2d, 0x9e, 0x15, 0xe5, 0x58, 0x61, 0xa0, + 0x79, 0x98, 0x20, 0x77, 0x9a, 0x2e, 0x57, 0xc3, 0xeb, 0xa6, 0xe3, 0x45, 0xee, 0xbc, 0xbb, 0x98, + 0x04, 0xe2, 0x34, 0xbe, 0x0a, 0x89, 0x56, 0xcc, 0x0d, 0x89, 0xf6, 0x0b, 0x16, 0x0c, 0x29, 0x9f, + 0xec, 0x07, 0x3e, 0xda, 0xaf, 0x99, 0xa3, 0xfd, 0x50, 0x9b, 0xd1, 0xce, 0x19, 0xe6, 0x3f, 0x28, + 0xa8, 0xfe, 0x96, 0xfd, 0x20, 0xea, 0x82, 0x4b, 0xbc, 0x77, 0xb7, 0x97, 0x0b, 0x30, 0xe4, 0x34, + 0x9b, 0x12, 0x20, 0xed, 0x17, 0x59, 0x2a, 0x85, 0xb8, 0x18, 0xeb, 0x38, 0xca, 0x0b, 0xa7, 0x98, + 0xeb, 0x85, 0x53, 0x03, 0x88, 0x9c, 0x60, 0x83, 0x44, 0xb4, 0x4c, 0x98, 0x5b, 0xe7, 0x9f, 0x37, + 0xad, 0xc8, 0xad, 0xcf, 0xb8, 0x5e, 0x14, 0x46, 0xc1, 0xcc, 0xb2, 0x17, 0x5d, 0x0b, 0xf8, 0x33, + 0x55, 0x0b, 0x2a, 0xa8, 0x68, 0x61, 0x8d, 0xae, 0x8c, 0x3f, 0xc2, 0xda, 0xe8, 0x35, 0x0d, 0x61, + 0x56, 0x45, 0x39, 0x56, 0x18, 0xf6, 0x8b, 0xec, 0xf6, 0x61, 0x63, 0x7a, 0xb0, 0x80, 0x7a, 0x7f, + 0x3e, 0xac, 0x66, 0x83, 0xa9, 0x84, 0x17, 0xf4, 0xb0, 0x7d, 0xed, 0x0f, 0x7b, 0xda, 0xb0, 0xee, + 0xcf, 0x1a, 0xc7, 0xf6, 0x43, 0x1f, 0x4f, 0x19, 0x37, 0x3d, 0xd3, 0xe1, 0xd6, 0x38, 0x80, 0x39, + 0x13, 0xcb, 0xab, 0xc6, 0xb2, 0x4e, 0x2d, 0x97, 0xc5, 0xbe, 0xd0, 0xf2, 0xaa, 0x09, 0x00, 0x8e, + 0x71, 0x28, 0xc3, 0xa6, 0xfe, 0x84, 0x53, 0x28, 0x0e, 0xbf, 0xad, 0xb0, 0x43, 0xac, 0x61, 0xa0, + 0xf3, 0x42, 0x68, 0xc1, 0x75, 0x0f, 0x0f, 0x25, 0x84, 0x16, 0x72, 0xb8, 0x34, 0x49, 0xd3, 0x05, + 0x18, 0x22, 0x77, 0x22, 0x12, 0x78, 0x4e, 0x9d, 0xb6, 0xd0, 0x1b, 0x47, 0x8c, 0x5d, 0x8c, 0x8b, + 0xb1, 0x8e, 0x83, 0xd6, 0x60, 0x2c, 0xe4, 0xb2, 0x3c, 0x95, 0xf4, 0x81, 0xcb, 0x44, 0x9f, 0x54, + 0xde, 0xf0, 0x26, 0x78, 0x9f, 0x15, 0xf1, 0xd3, 0x49, 0xc6, 0x08, 0x49, 0x92, 0x40, 0xaf, 0xc2, + 0x68, 0xdd, 0x77, 0x6a, 0x73, 0x4e, 0xdd, 0xf1, 0xaa, 0x6c, 0x7c, 0x06, 0xcc, 0xec, 0xfc, 0x57, + 0x0d, 0x28, 0x4e, 0x60, 0x53, 0x06, 0x51, 0x2f, 0x11, 0x89, 0x4a, 0x1c, 0x6f, 0x83, 0x84, 0x53, + 0x83, 0xec, 0xab, 0x18, 0x83, 0x78, 0x35, 0x07, 0x07, 0xe7, 0xd6, 0x46, 0x17, 0x61, 0x58, 0x7e, + 0xbe, 0x16, 0x52, 0x27, 0x76, 0x68, 0xd2, 0x60, 0xd8, 0xc0, 0x44, 0x21, 0x1c, 0x95, 0xff, 0xd7, + 0x02, 0x67, 0x7d, 0xdd, 0xad, 0x8a, 0x38, 0x13, 0xdc, 0xf9, 0xfb, 0x23, 0xd2, 0xd3, 0x74, 0x31, + 0x0b, 0x69, 0x7f, 0xb7, 0x74, 0x52, 0x8c, 0x5a, 0x26, 0x1c, 0x67, 0xd3, 0x46, 0x2b, 0x30, 0xc9, + 0x6d, 0x60, 0xe6, 0x37, 0x49, 0x75, 0x4b, 0x6e, 0x38, 0xc6, 0x35, 0x6a, 0x8e, 0x3f, 0x97, 0xd3, + 0x28, 0x38, 0xab, 0x1e, 0x7a, 0x0b, 0xa6, 0x9a, 0xad, 0x5b, 0x75, 0x37, 0xdc, 0x5c, 0xf5, 0x23, + 0x66, 0x42, 0x36, 0x5b, 0xab, 0x05, 0x24, 0xe4, 0xbe, 0xc1, 0xec, 0xea, 0x95, 0x61, 0x90, 0xca, + 0x39, 0x78, 0x38, 0x97, 0x02, 0xba, 0x0b, 0x47, 0x13, 0x0b, 0x41, 0xc4, 0x33, 0x19, 0xcd, 0x4f, + 0xf9, 0x54, 0xc9, 0xaa, 0x20, 0x42, 0x03, 0x65, 0x81, 0x70, 0x76, 0x13, 0xe8, 0x25, 0x00, 0xb7, + 0xb9, 0xe4, 0x34, 0xdc, 0x3a, 0x7d, 0x8e, 0x4e, 0xb2, 0x35, 0x42, 0x9f, 0x26, 0xb0, 0x5c, 0x96, + 0xa5, 0xf4, 0x6c, 0x16, 0xff, 0x76, 0xb0, 0x86, 0x8d, 0xae, 0xc2, 0xa8, 0xf8, 0xb7, 0x23, 0xa6, + 0x74, 0x42, 0x65, 0x07, 0x1d, 0x95, 0x35, 0xd4, 0x3c, 0x26, 0x4a, 0x70, 0xa2, 0x2e, 0xda, 0x80, + 0x53, 0x32, 0x35, 0xa9, 0xbe, 0x3e, 0xe5, 0x1c, 0x84, 0x2c, 0xcf, 0xd2, 0x00, 0xf7, 0x29, 0x9a, + 0x6d, 0x87, 0x88, 0xdb, 0xd3, 0xa1, 0xf7, 0xba, 0xbe, 0xcc, 0xb9, 0xc7, 0xf8, 0xd1, 0x38, 0x12, + 0xe6, 0xd5, 0x24, 0x10, 0xa7, 0xf1, 0x91, 0x0f, 0x47, 0x5d, 0x2f, 0x6b, 0x55, 0x1f, 0x63, 0x84, + 0x3e, 0xcc, 0x9d, 0xe5, 0xdb, 0xaf, 0xe8, 0x4c, 0x38, 0xce, 0xa6, 0x8b, 0x96, 0x61, 0x32, 0xe2, + 0x05, 0x0b, 0x6e, 0xc8, 0xd3, 0xb8, 0xd0, 0x67, 0xdf, 0x71, 0xd6, 0xdc, 0x71, 0xba, 0x9a, 0xd7, + 0xd2, 0x60, 0x9c, 0x55, 0xe7, 0x9d, 0x19, 0x80, 0x7e, 0xdd, 0xa2, 0xb5, 0x35, 0x46, 0x1f, 0x7d, + 0x0a, 0x86, 0xf5, 0xf1, 0x11, 0x4c, 0xcb, 0xd9, 0x6c, 0x3e, 0x58, 0x3b, 0x5e, 0xf8, 0x33, 0x41, + 0x1d, 0x21, 0x3a, 0x0c, 0x1b, 0x14, 0x51, 0x35, 0x23, 0xc8, 0xc5, 0xf9, 0xee, 0x98, 0xa2, 0xee, + 0xed, 0x1f, 0x09, 0x64, 0xef, 0x1c, 0x74, 0x15, 0x06, 0xaa, 0x75, 0x97, 0x78, 0xd1, 0x72, 0xb9, + 0x5d, 0x80, 0xd2, 0x79, 0x81, 0x23, 0xb6, 0xa2, 0xc8, 0xbe, 0xc4, 0xcb, 0xb0, 0xa2, 0x60, 0x5f, + 0x84, 0xa1, 0x4a, 0x9d, 0x90, 0x26, 0xf7, 0xe3, 0x42, 0x4f, 0xb0, 0x87, 0x09, 0x63, 0x2d, 0x2d, + 0xc6, 0x5a, 0xea, 0x6f, 0x0e, 0xc6, 0x54, 0x4a, 0xb8, 0xfd, 0xdb, 0x05, 0x28, 0x75, 0x48, 0x02, + 0x96, 0xd0, 0xb7, 0x59, 0x5d, 0xe9, 0xdb, 0x66, 0x61, 0x2c, 0xfe, 0xa7, 0x8b, 0xf2, 0x94, 0x31, + 0xf4, 0x0d, 0x13, 0x8c, 0x93, 0xf8, 0x5d, 0xfb, 0xb5, 0xe8, 0x2a, 0xbb, 0x9e, 0x8e, 0x9e, 0x59, + 0x86, 0xaa, 0xbe, 0xb7, 0xfb, 0xb7, 0x77, 0xae, 0xda, 0xd5, 0xfe, 0x5a, 0x01, 0x8e, 0xaa, 0x21, + 0x7c, 0xef, 0x0e, 0xdc, 0xf5, 0xf4, 0xc0, 0xdd, 0x07, 0xa5, 0xb5, 0x7d, 0x0d, 0xfa, 0x78, 0xd4, + 0xd4, 0x2e, 0x78, 0xfe, 0x47, 0xcc, 0xe0, 0xf4, 0x8a, 0xcd, 0x34, 0x02, 0xd4, 0xff, 0x80, 0x05, + 0x63, 0x09, 0x07, 0x49, 0x84, 0x35, 0x2f, 0xfa, 0x7b, 0xe1, 0xcb, 0xb3, 0x38, 0xfe, 0x33, 0xd0, + 0xb3, 0xe9, 0x2b, 0x23, 0x65, 0x85, 0x71, 0xd9, 0x0f, 0x23, 0xcc, 0x20, 0xf6, 0x1f, 0x59, 0xd0, + 0xbb, 0xe6, 0xb8, 0x5e, 0x24, 0xb5, 0x1f, 0x56, 0x8e, 0xf6, 0xa3, 0x9b, 0xef, 0x42, 0x2f, 0x40, + 0x1f, 0x59, 0x5f, 0x27, 0xd5, 0x48, 0xcc, 0xaa, 0x8c, 0xa6, 0xd1, 0xb7, 0xc8, 0x4a, 0x29, 0x13, + 0xca, 0x1a, 0xe3, 0x7f, 0xb1, 0x40, 0x46, 0x37, 0x61, 0x30, 0x72, 0x1b, 0x64, 0xb6, 0x56, 0x13, + 0x36, 0x01, 0xf7, 0x10, 0x02, 0x66, 0x4d, 0x12, 0xc0, 0x31, 0x2d, 0xfb, 0x8b, 0x05, 0x80, 0x38, + 0x14, 0x5c, 0xa7, 0x4f, 0x9c, 0x4b, 0x69, 0x8b, 0xcf, 0x66, 0x68, 0x8b, 0x51, 0x4c, 0x30, 0x43, + 0x55, 0xac, 0x86, 0xa9, 0xd8, 0xd5, 0x30, 0xf5, 0x1c, 0x64, 0x98, 0xe6, 0x61, 0x22, 0x0e, 0x65, + 0x67, 0x46, 0xf2, 0x64, 0xf7, 0xf7, 0x5a, 0x12, 0x88, 0xd3, 0xf8, 0x36, 0x81, 0x33, 0x2a, 0xa2, + 0x97, 0xb8, 0x0b, 0x99, 0x2b, 0x81, 0xae, 0x7d, 0xef, 0x30, 0x4e, 0xb1, 0x3a, 0xbc, 0x90, 0xab, + 0x0e, 0xff, 0x29, 0x0b, 0x8e, 0x24, 0xdb, 0x61, 0x7e, 0xf7, 0x9f, 0xb7, 0xe0, 0x68, 0x9c, 0x03, + 0x27, 0x6d, 0x82, 0xf0, 0x7c, 0xdb, 0x28, 0x65, 0x39, 0x3d, 0x8e, 0xc3, 0xb6, 0xac, 0x64, 0x91, + 0xc6, 0xd9, 0x2d, 0xda, 0xff, 0xab, 0x07, 0xa6, 0xf2, 0xc2, 0x9b, 0x31, 0x4f, 0x23, 0xe7, 0x4e, + 0x65, 0x8b, 0xdc, 0x16, 0xfe, 0x1c, 0xb1, 0xa7, 0x11, 0x2f, 0xc6, 0x12, 0x9e, 0x4c, 0x7b, 0x54, + 0xe8, 0x32, 0xed, 0xd1, 0x26, 0x4c, 0xdc, 0xde, 0x24, 0xde, 0x75, 0x2f, 0x74, 0x22, 0x37, 0x5c, + 0x77, 0x99, 0x02, 0x9d, 0xaf, 0x1b, 0x99, 0xba, 0x7f, 0xe2, 0x66, 0x12, 0x61, 0x7f, 0xb7, 0x74, + 0xca, 0x28, 0x88, 0xbb, 0xcc, 0x0f, 0x12, 0x9c, 0x26, 0x9a, 0xce, 0x1a, 0xd5, 0xf3, 0x80, 0xb3, + 0x46, 0x35, 0x5c, 0x61, 0x76, 0x23, 0xdd, 0x48, 0xd8, 0xb3, 0x75, 0x45, 0x95, 0x62, 0x0d, 0x03, + 0x7d, 0x02, 0x90, 0x9e, 0xf6, 0xcf, 0x88, 0x2e, 0xfb, 0xcc, 0xde, 0x6e, 0x09, 0xad, 0xa6, 0xa0, + 0xfb, 0xbb, 0xa5, 0x49, 0x5a, 0xba, 0xec, 0xd1, 0xe7, 0x6f, 0x1c, 0x92, 0x2f, 0x83, 0x10, 0xba, + 0x09, 0xe3, 0xb4, 0x94, 0xed, 0x28, 0x19, 0xba, 0x96, 0x3f, 0x59, 0x9f, 0xda, 0xdb, 0x2d, 0x8d, + 0xaf, 0x26, 0x60, 0x79, 0xa4, 0x53, 0x44, 0x32, 0x92, 0x47, 0x0d, 0x74, 0x9b, 0x3c, 0xca, 0xfe, + 0xbc, 0x05, 0x27, 0xe8, 0x05, 0x57, 0xbb, 0x9a, 0xa3, 0x45, 0x77, 0x9a, 0x2e, 0xd7, 0xd3, 0x88, + 0xab, 0x86, 0xc9, 0xea, 0xca, 0xcb, 0x5c, 0x4b, 0xa3, 0xa0, 0xf4, 0x84, 0xdf, 0x72, 0xbd, 0x5a, + 0xf2, 0x84, 0xbf, 0xe2, 0x7a, 0x35, 0xcc, 0x20, 0xea, 0xca, 0x2a, 0xe6, 0x46, 0xa9, 0xff, 0x0a, + 0xdd, 0xab, 0xb4, 0x2f, 0xdf, 0xd2, 0x6e, 0xa0, 0xa7, 0x74, 0x9d, 0xaa, 0x30, 0x9f, 0xcc, 0xd5, + 0xa7, 0x7e, 0xce, 0x02, 0xe1, 0xfd, 0xde, 0xc5, 0x9d, 0xfc, 0x26, 0x0c, 0x6f, 0xa7, 0x53, 0xa2, + 0x9e, 0xc9, 0x0f, 0x07, 0x20, 0x12, 0xa1, 0x2a, 0x16, 0xdd, 0x48, 0x7f, 0x6a, 0xd0, 0xb2, 0x6b, + 0x20, 0xa0, 0x0b, 0x84, 0x69, 0x35, 0x3a, 0xf7, 0xe6, 0x59, 0x80, 0x1a, 0xc3, 0x65, 0x79, 0xd2, + 0x0b, 0x26, 0xc7, 0xb5, 0xa0, 0x20, 0x58, 0xc3, 0xb2, 0x7f, 0xae, 0x08, 0x43, 0x32, 0x05, 0x67, + 0xcb, 0xeb, 0x46, 0xf6, 0x78, 0xa0, 0x9c, 0xfc, 0xe8, 0x2d, 0x98, 0x08, 0x48, 0xb5, 0x15, 0x84, + 0xee, 0x36, 0x91, 0x60, 0xb1, 0x49, 0x66, 0x78, 0x92, 0x84, 0x04, 0x70, 0x9f, 0x85, 0xc8, 0x4a, + 0x14, 0x32, 0xa5, 0x71, 0x9a, 0x10, 0x3a, 0x0f, 0x83, 0x4c, 0xf4, 0x5e, 0x8e, 0x05, 0xc2, 0x4a, + 0xf0, 0xb5, 0x22, 0x01, 0x38, 0xc6, 0x61, 0x8f, 0x83, 0xd6, 0x2d, 0x86, 0x9e, 0xf0, 0x04, 0xaf, + 0xf0, 0x62, 0x2c, 0xe1, 0xe8, 0xa3, 0x30, 0xce, 0xeb, 0x05, 0x7e, 0xd3, 0xd9, 0xe0, 0x2a, 0xc1, + 0x5e, 0x15, 0x5e, 0x67, 0x7c, 0x25, 0x01, 0xdb, 0xdf, 0x2d, 0x1d, 0x49, 0x96, 0xb1, 0x6e, 0xa7, + 0xa8, 0x30, 0xcb, 0x3f, 0xde, 0x08, 0xbd, 0x33, 0x52, 0x06, 0x83, 0x31, 0x08, 0xeb, 0x78, 0xf6, + 0x5f, 0x59, 0x30, 0xa1, 0x4d, 0x55, 0xd7, 0x79, 0x2a, 0x8c, 0x41, 0x2a, 0x74, 0x31, 0x48, 0x07, + 0x8b, 0xf6, 0x90, 0x39, 0xc3, 0x3d, 0xf7, 0x69, 0x86, 0xed, 0x4f, 0x01, 0x4a, 0xe7, 0x77, 0x45, + 0xaf, 0x73, 0x43, 0x7e, 0x37, 0x20, 0xb5, 0x76, 0x0a, 0x7f, 0x3d, 0x72, 0x8e, 0xf4, 0x5c, 0xe5, + 0xb5, 0xb0, 0xaa, 0x6f, 0xff, 0x60, 0x0f, 0x8c, 0x27, 0x63, 0x75, 0xa0, 0xcb, 0xd0, 0xc7, 0xb9, + 0x74, 0x41, 0xbe, 0x8d, 0x3d, 0x99, 0x16, 0xe1, 0x83, 0xf1, 0x2b, 0x82, 0xd1, 0x17, 0xf5, 0xd1, + 0x5b, 0x30, 0x54, 0xf3, 0x6f, 0x7b, 0xb7, 0x9d, 0xa0, 0x36, 0x5b, 0x5e, 0x16, 0x27, 0x44, 0xa6, + 0x00, 0x6a, 0x21, 0x46, 0xd3, 0xa3, 0x86, 0x30, 0xdb, 0x89, 0x18, 0x84, 0x75, 0x72, 0x68, 0x8d, + 0xa5, 0x2c, 0x5a, 0x77, 0x37, 0x56, 0x9c, 0x66, 0x3b, 0xaf, 0xae, 0x79, 0x89, 0xa4, 0x51, 0x1e, + 0x11, 0x79, 0x8d, 0x38, 0x00, 0xc7, 0x84, 0xd0, 0x67, 0x60, 0x32, 0xcc, 0x51, 0x89, 0xe5, 0xa5, + 0xfb, 0x6e, 0xa7, 0x25, 0xe2, 0xc2, 0x94, 0x2c, 0xe5, 0x59, 0x56, 0x33, 0xe8, 0x0e, 0x20, 0x21, + 0x7a, 0x5e, 0x0b, 0x5a, 0x61, 0x34, 0xd7, 0xf2, 0x6a, 0x75, 0x99, 0xd2, 0xe8, 0x83, 0xd9, 0x72, + 0x82, 0x24, 0xb6, 0xd6, 0x36, 0x8b, 0xdd, 0x9b, 0xc6, 0xc0, 0x19, 0x6d, 0xd8, 0x9f, 0xeb, 0x81, + 0x69, 0x99, 0x50, 0x39, 0xc3, 0x7b, 0xe5, 0xb3, 0x56, 0xc2, 0x7d, 0xe5, 0xa5, 0xfc, 0x83, 0xfe, + 0x81, 0x39, 0xb1, 0x7c, 0x21, 0xed, 0xc4, 0xf2, 0xca, 0x01, 0xbb, 0x71, 0xdf, 0x5c, 0x59, 0xde, + 0xb3, 0xfe, 0x27, 0x7b, 0x47, 0xc0, 0xb8, 0x9a, 0x11, 0xe6, 0x81, 0xd1, 0xcb, 0x52, 0x75, 0x94, + 0xf3, 0xfc, 0xbf, 0x2c, 0x70, 0x8c, 0xcb, 0x7e, 0x58, 0x86, 0x4f, 0x67, 0xe7, 0xac, 0xa2, 0x43, + 0x69, 0x92, 0x46, 0x33, 0xda, 0x59, 0x70, 0x03, 0xd1, 0xe3, 0x4c, 0x9a, 0x8b, 0x02, 0x27, 0x4d, + 0x53, 0x42, 0xb0, 0xa2, 0x83, 0xb6, 0x61, 0x62, 0x83, 0x45, 0x7c, 0xd2, 0x72, 0x1b, 0x8b, 0x73, + 0x21, 0x73, 0xdf, 0x5e, 0x9a, 0x5f, 0xcc, 0x4f, 0x84, 0xcc, 0x1f, 0x7f, 0x29, 0x14, 0x9c, 0x6e, + 0x82, 0x6e, 0x8d, 0x23, 0xce, 0xed, 0x70, 0xb1, 0xee, 0x84, 0x91, 0x5b, 0x9d, 0xab, 0xfb, 0xd5, + 0xad, 0x4a, 0xe4, 0x07, 0x32, 0x01, 0x62, 0xe6, 0xdb, 0x6b, 0xf6, 0x66, 0x25, 0x85, 0x6f, 0x34, + 0x3f, 0xb5, 0xb7, 0x5b, 0x3a, 0x92, 0x85, 0x85, 0x33, 0xdb, 0x42, 0xab, 0xd0, 0xbf, 0xe1, 0x46, + 0x98, 0x34, 0x7d, 0x71, 0x5a, 0x64, 0x1e, 0x85, 0x97, 0x38, 0x8a, 0xd1, 0x12, 0x8b, 0x48, 0x25, + 0x00, 0x58, 0x12, 0x41, 0xaf, 0xab, 0x4b, 0xa0, 0x2f, 0x5f, 0x00, 0x9b, 0xb6, 0xbd, 0xcb, 0xbc, + 0x06, 0x5e, 0x85, 0xa2, 0xb7, 0x1e, 0xb6, 0x8b, 0xc5, 0xb3, 0xba, 0x64, 0xc8, 0xcf, 0xe6, 0xfa, + 0xe9, 0xd3, 0x78, 0x75, 0xa9, 0x82, 0x69, 0x45, 0xe6, 0xf6, 0x1a, 0x56, 0x43, 0x57, 0x24, 0x5c, + 0xca, 0xf4, 0x02, 0x5e, 0xae, 0xcc, 0x57, 0x96, 0x0d, 0x1a, 0x2c, 0xaa, 0x21, 0x2b, 0xc6, 0xbc, + 0x3a, 0xba, 0x01, 0x83, 0x1b, 0xfc, 0xe0, 0x5b, 0x0f, 0x45, 0x52, 0xf5, 0xcc, 0xcb, 0xe8, 0x92, + 0x44, 0x32, 0xe8, 0xb1, 0x2b, 0x43, 0x81, 0x70, 0x4c, 0x0a, 0x7d, 0xce, 0x82, 0xa3, 0xc9, 0xac, + 0xf4, 0xcc, 0x59, 0x4d, 0x98, 0xa9, 0x65, 0x3a, 0x00, 0x94, 0xb3, 0x2a, 0x18, 0x0d, 0x32, 0xf5, + 0x4b, 0x26, 0x1a, 0xce, 0x6e, 0x8e, 0x0e, 0x74, 0x70, 0xab, 0xd6, 0x2e, 0x47, 0x4f, 0x22, 0x30, + 0x11, 0x1f, 0x68, 0x3c, 0xb7, 0x80, 0x69, 0x45, 0xb4, 0x06, 0xb0, 0x5e, 0x27, 0x22, 0xe2, 0xa3, + 0x30, 0x8a, 0xca, 0xbc, 0xfd, 0x97, 0x14, 0x96, 0xa0, 0xc3, 0x5e, 0xa2, 0x71, 0x29, 0xd6, 0xe8, + 0xd0, 0xa5, 0x54, 0x75, 0xbd, 0x1a, 0x09, 0x98, 0x72, 0x2b, 0x67, 0x29, 0xcd, 0x33, 0x8c, 0xf4, + 0x52, 0xe2, 0xe5, 0x58, 0x50, 0x60, 0xb4, 0x48, 0x73, 0x73, 0x3d, 0x6c, 0x97, 0x72, 0x62, 0x9e, + 0x34, 0x37, 0x13, 0x0b, 0x8a, 0xd3, 0x62, 0xe5, 0x58, 0x50, 0xa0, 0x5b, 0x66, 0x9d, 0x6e, 0x20, + 0x12, 0x4c, 0x8d, 0xe5, 0x6f, 0x99, 0x25, 0x8e, 0x92, 0xde, 0x32, 0x02, 0x80, 0x25, 0x11, 0xf4, + 0x49, 0x93, 0xdb, 0x19, 0x67, 0x34, 0x9f, 0xea, 0xc0, 0xed, 0x18, 0x74, 0xdb, 0xf3, 0x3b, 0x2f, + 0x41, 0x61, 0xbd, 0xca, 0x94, 0x62, 0x39, 0x3a, 0x83, 0xa5, 0x79, 0x83, 0x1a, 0x0b, 0xe1, 0xbe, + 0x34, 0x8f, 0x0b, 0xeb, 0x55, 0xba, 0xf4, 0x9d, 0xbb, 0xad, 0x80, 0x2c, 0xb9, 0x75, 0x22, 0xd2, + 0x4f, 0x64, 0x2e, 0xfd, 0x59, 0x89, 0x94, 0x5e, 0xfa, 0x0a, 0x84, 0x63, 0x52, 0x94, 0x6e, 0xcc, + 0x83, 0x4d, 0xe6, 0xd3, 0x55, 0xac, 0x56, 0x9a, 0x6e, 0x26, 0x17, 0xb6, 0x05, 0x23, 0xdb, 0x61, + 0x73, 0x93, 0xc8, 0x53, 0x91, 0xa9, 0xeb, 0x72, 0x22, 0x55, 0xdc, 0x10, 0x88, 0x6e, 0x10, 0xb5, + 0x9c, 0x7a, 0xea, 0x20, 0x67, 0xa2, 0x95, 0x1b, 0x3a, 0x31, 0x6c, 0xd2, 0xa6, 0x0b, 0xe1, 0x6d, + 0x1e, 0x4e, 0x8e, 0x29, 0xee, 0x72, 0x16, 0x42, 0x46, 0xc4, 0x39, 0xbe, 0x10, 0x04, 0x00, 0x4b, + 0x22, 0x6a, 0xb0, 0xd9, 0x05, 0x74, 0xac, 0xc3, 0x60, 0xa7, 0xfa, 0x1b, 0x0f, 0x36, 0xbb, 0x70, + 0x62, 0x52, 0xec, 0xa2, 0x69, 0x66, 0x24, 0xf0, 0x67, 0x6a, 0xbb, 0x9c, 0x8b, 0xa6, 0x53, 0xc2, + 0x7f, 0x7e, 0xd1, 0x64, 0x61, 0xe1, 0xcc, 0xb6, 0xe8, 0xc7, 0x35, 0x65, 0x64, 0x40, 0x91, 0x22, + 0xe3, 0x89, 0x9c, 0xc0, 0x9a, 0xe9, 0xf0, 0x81, 0xfc, 0xe3, 0x14, 0x08, 0xc7, 0xa4, 0x50, 0x0d, + 0x46, 0x9b, 0x46, 0xc4, 0x59, 0x96, 0xea, 0x23, 0x87, 0x2f, 0xc8, 0x8a, 0x4d, 0xcb, 0x25, 0x44, + 0x26, 0x04, 0x27, 0x68, 0x32, 0xcb, 0x3d, 0xee, 0xea, 0xc7, 0x32, 0x81, 0xe4, 0x4c, 0x75, 0x86, + 0x37, 0x20, 0x9f, 0x6a, 0x01, 0xc0, 0x92, 0x08, 0x1d, 0x0d, 0xe1, 0xa0, 0xe6, 0x87, 0x2c, 0xa1, + 0x4e, 0x9e, 0x82, 0x3d, 0x4b, 0x4d, 0x24, 0xc3, 0xac, 0x0b, 0x10, 0x8e, 0x49, 0xd1, 0x93, 0x9c, + 0x5e, 0x78, 0x27, 0xf3, 0x4f, 0xf2, 0xe4, 0x75, 0xc7, 0x4e, 0x72, 0x7a, 0xd9, 0x15, 0xc5, 0x55, + 0xa7, 0xa2, 0x82, 0xb3, 0x64, 0x20, 0x39, 0xfd, 0x52, 0x61, 0xc5, 0xd3, 0xfd, 0x52, 0x20, 0x1c, + 0x93, 0x62, 0x57, 0x31, 0x0b, 0x4d, 0x77, 0xba, 0xcd, 0x55, 0x4c, 0x11, 0x32, 0xae, 0x62, 0x2d, + 0x74, 0x9d, 0xfd, 0x83, 0x05, 0x38, 0xdd, 0x7e, 0xdf, 0xc6, 0x3a, 0xb4, 0x72, 0x6c, 0xb3, 0x94, + 0xd0, 0xa1, 0x71, 0x89, 0x4e, 0x8c, 0xd5, 0x75, 0xc0, 0xe1, 0x4b, 0x30, 0xa1, 0xdc, 0x11, 0xeb, + 0x6e, 0x75, 0x47, 0x4b, 0xce, 0xa9, 0x42, 0xf3, 0x54, 0x92, 0x08, 0x38, 0x5d, 0x07, 0xcd, 0xc2, + 0x98, 0x51, 0xb8, 0xbc, 0x20, 0x9e, 0xff, 0x71, 0x1a, 0x0b, 0x13, 0x8c, 0x93, 0xf8, 0xf6, 0xcf, + 0x5b, 0x70, 0x3c, 0x27, 0x0f, 0x7b, 0xd7, 0xf1, 0x74, 0xd7, 0x61, 0xac, 0x69, 0x56, 0xed, 0x10, + 0x02, 0xdc, 0xc8, 0xf6, 0xae, 0xfa, 0x9a, 0x00, 0xe0, 0x24, 0x51, 0xfb, 0x67, 0x0b, 0x70, 0xaa, + 0xad, 0x7d, 0x3d, 0xc2, 0x70, 0x6c, 0xa3, 0x11, 0x3a, 0xf3, 0x01, 0xa9, 0x11, 0x2f, 0x72, 0x9d, + 0x7a, 0xa5, 0x49, 0xaa, 0x9a, 0x16, 0x94, 0x19, 0xaa, 0x5f, 0x5a, 0xa9, 0xcc, 0xa6, 0x31, 0x70, + 0x4e, 0x4d, 0xb4, 0x04, 0x28, 0x0d, 0x11, 0x33, 0xcc, 0x9e, 0xb8, 0x69, 0x7a, 0x38, 0xa3, 0x06, + 0x7a, 0x11, 0x46, 0x94, 0xdd, 0xbe, 0x36, 0xe3, 0xec, 0x82, 0xc0, 0x3a, 0x00, 0x9b, 0x78, 0xe8, + 0x02, 0xcf, 0x6f, 0x24, 0x32, 0x61, 0x09, 0x95, 0xe9, 0x98, 0x4c, 0x5e, 0x24, 0x8a, 0xb1, 0x8e, + 0x33, 0x77, 0xf1, 0x77, 0xbe, 0x79, 0xfa, 0x03, 0xbf, 0xff, 0xcd, 0xd3, 0x1f, 0xf8, 0xc3, 0x6f, + 0x9e, 0xfe, 0xc0, 0xf7, 0xec, 0x9d, 0xb6, 0x7e, 0x67, 0xef, 0xb4, 0xf5, 0xfb, 0x7b, 0xa7, 0xad, + 0x3f, 0xdc, 0x3b, 0x6d, 0xfd, 0xd7, 0xbd, 0xd3, 0xd6, 0x17, 0xff, 0xe4, 0xf4, 0x07, 0xde, 0x44, + 0x71, 0x84, 0xea, 0xf3, 0x74, 0x76, 0xce, 0x6f, 0x5f, 0xf8, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, + 0x67, 0xd5, 0x38, 0x2d, 0xc3, 0x23, 0x01, 0x00, } func (m *AWSElasticBlockStoreVolumeSource) Marshal() (dAtA []byte, err error) { @@ -9817,6 +9883,20 @@ func (m *ContainerStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.AllocatedResourcesStatus) > 0 { + for iNdEx := len(m.AllocatedResourcesStatus) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.AllocatedResourcesStatus[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x72 + } + } if m.User != nil { { size, err := m.User.MarshalToSizedBuffer(dAtA[:i]) @@ -18180,6 +18260,39 @@ func (m *ResourceFieldSelector) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ResourceHealth) 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 *ResourceHealth) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceHealth) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + i -= len(m.Health) + copy(dAtA[i:], m.Health) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Health))) + i-- + dAtA[i] = 0x12 + i -= len(m.ResourceID) + copy(dAtA[i:], m.ResourceID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceID))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *ResourceQuota) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -18529,6 +18642,48 @@ func (m *ResourceRequirements) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ResourceStatus) 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 *ResourceStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResourceStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Resources) > 0 { + for iNdEx := len(m.Resources) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Resources[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.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *SELinuxOptions) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -22349,6 +22504,12 @@ func (m *ContainerStatus) Size() (n int) { l = m.User.Size() n += 1 + l + sovGenerated(uint64(l)) } + if len(m.AllocatedResourcesStatus) > 0 { + for _, e := range m.AllocatedResourcesStatus { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } return n } @@ -25383,6 +25544,19 @@ func (m *ResourceFieldSelector) Size() (n int) { return n } +func (m *ResourceHealth) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ResourceID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Health) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *ResourceQuota) Size() (n int) { if m == nil { return 0 @@ -25503,6 +25677,23 @@ func (m *ResourceRequirements) Size() (n int) { return n } +func (m *ResourceStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Resources) > 0 { + for _, e := range m.Resources { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + func (m *SELinuxOptions) Size() (n int) { if m == nil { return 0 @@ -27192,6 +27383,11 @@ func (this *ContainerStatus) String() string { repeatedStringForVolumeMounts += strings.Replace(strings.Replace(f.String(), "VolumeMountStatus", "VolumeMountStatus", 1), `&`, ``, 1) + "," } repeatedStringForVolumeMounts += "}" + repeatedStringForAllocatedResourcesStatus := "[]ResourceStatus{" + for _, f := range this.AllocatedResourcesStatus { + repeatedStringForAllocatedResourcesStatus += strings.Replace(strings.Replace(f.String(), "ResourceStatus", "ResourceStatus", 1), `&`, ``, 1) + "," + } + repeatedStringForAllocatedResourcesStatus += "}" keysForAllocatedResources := make([]string, 0, len(this.AllocatedResources)) for k := range this.AllocatedResources { keysForAllocatedResources = append(keysForAllocatedResources, string(k)) @@ -27216,6 +27412,7 @@ func (this *ContainerStatus) String() string { `Resources:` + strings.Replace(this.Resources.String(), "ResourceRequirements", "ResourceRequirements", 1) + `,`, `VolumeMounts:` + repeatedStringForVolumeMounts + `,`, `User:` + strings.Replace(this.User.String(), "ContainerUser", "ContainerUser", 1) + `,`, + `AllocatedResourcesStatus:` + repeatedStringForAllocatedResourcesStatus + `,`, `}`, }, "") return s @@ -29508,6 +29705,17 @@ func (this *ResourceFieldSelector) String() string { }, "") return s } +func (this *ResourceHealth) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ResourceHealth{`, + `ResourceID:` + fmt.Sprintf("%v", this.ResourceID) + `,`, + `Health:` + fmt.Sprintf("%v", this.Health) + `,`, + `}`, + }, "") + return s +} func (this *ResourceQuota) String() string { if this == nil { return "nil" @@ -29626,6 +29834,22 @@ func (this *ResourceRequirements) String() string { }, "") return s } +func (this *ResourceStatus) String() string { + if this == nil { + return "nil" + } + repeatedStringForResources := "[]ResourceHealth{" + for _, f := range this.Resources { + repeatedStringForResources += strings.Replace(strings.Replace(f.String(), "ResourceHealth", "ResourceHealth", 1), `&`, ``, 1) + "," + } + repeatedStringForResources += "}" + s := strings.Join([]string{`&ResourceStatus{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Resources:` + repeatedStringForResources + `,`, + `}`, + }, "") + return s +} func (this *SELinuxOptions) String() string { if this == nil { return "nil" @@ -37600,6 +37824,40 @@ func (m *ContainerStatus) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AllocatedResourcesStatus", 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.AllocatedResourcesStatus = append(m.AllocatedResourcesStatus, ResourceStatus{}) + if err := m.AllocatedResourcesStatus[len(m.AllocatedResourcesStatus)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -63692,6 +63950,120 @@ func (m *ResourceFieldSelector) Unmarshal(dAtA []byte) error { } return nil } +func (m *ResourceHealth) 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: ResourceHealth: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResourceHealth: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceID", 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.ResourceID = ResourceID(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Health", 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.Health = ResourceHealthStatus(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 *ResourceQuota) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -64855,6 +65227,122 @@ func (m *ResourceRequirements) Unmarshal(dAtA []byte) error { } return nil } +func (m *ResourceStatus) 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: ResourceStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResourceStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + 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 = ResourceName(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Resources", 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.Resources = append(m.Resources, ResourceHealth{}) + if err := m.Resources[len(m.Resources)-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 *SELinuxOptions) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/staging/src/k8s.io/api/core/v1/generated.proto b/staging/src/k8s.io/api/core/v1/generated.proto index d311b344738..68ac80ed0b1 100644 --- a/staging/src/k8s.io/api/core/v1/generated.proto +++ b/staging/src/k8s.io/api/core/v1/generated.proto @@ -1094,6 +1094,16 @@ message ContainerStatus { // +featureGate=SupplementalGroupsPolicy // +optional optional ContainerUser user = 13; + + // AllocatedResourcesStatus represents the status of various resources + // allocated for this Pod. + // +featureGate=ResourceHealthStatus + // +optional + // +patchMergeKey=name + // +patchStrategy=merge + // +listType=map + // +listMapKey=name + repeated ResourceStatus allocatedResourcesStatus = 14; } // ContainerUser represents user identity information @@ -5025,6 +5035,25 @@ message ResourceFieldSelector { optional .k8s.io.apimachinery.pkg.api.resource.Quantity divisor = 3; } +// ResourceHealth represents the health of a resource. It has the latest device health information. +// This is a part of KEP https://kep.k8s.io/4680 and historical health changes are planned to be added in future iterations of a KEP. +message ResourceHealth { + // ResourceID is the unique identifier of the resource. See the ResourceID type for more information. + optional string resourceID = 1; + + // Health of the resource. + // can be one of: + // - Healthy: operates as normal + // - Unhealthy: reported unhealthy. We consider this a temporary health issue + // since we do not have a mechanism today to distinguish + // temporary and permanent issues. + // - Unknown: The status cannot be determined. + // For example, Device Plugin got unregistered and hasn't been re-registered since. + // + // In future we may want to introduce the PermanentlyUnhealthy Status. + optional string health = 2; +} + // ResourceQuota sets aggregate quota restrictions enforced per namespace message ResourceQuota { // Standard object's metadata. @@ -5116,6 +5145,20 @@ message ResourceRequirements { repeated ResourceClaim claims = 3; } +message ResourceStatus { + // Name of the resource. Must be unique within the pod and match one of the resources from the pod spec. + // +required + optional string name = 1; + + // List of unique Resources health. Each element in the list contains an unique resource ID and resource health. + // At a minimum, ResourceID must uniquely identify the Resource + // allocated to the Pod on the Node for the lifetime of a Pod. + // See ResourceID type for it's definition. + // +listType=map + // +listMapKey=resourceID + repeated ResourceHealth resources = 2; +} + // SELinuxOptions are the labels to be applied to the container message SELinuxOptions { // User is a SELinux user label that applies to the container. diff --git a/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go index b7b4fa94222..950806ef8e7 100644 --- a/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go @@ -459,20 +459,21 @@ func (ContainerStateWaiting) SwaggerDoc() map[string]string { } var map_ContainerStatus = map[string]string{ - "": "ContainerStatus contains details for the current status of this container.", - "name": "Name is a DNS_LABEL representing the unique name of the container. Each container in a pod must have a unique name across all container types. Cannot be updated.", - "state": "State holds details about the container's current condition.", - "lastState": "LastTerminationState holds the last termination state of the container to help debug container crashes and restarts. This field is not populated if the container is still running and RestartCount is 0.", - "ready": "Ready specifies whether the container is currently passing its readiness check. The value will change as readiness probes keep executing. If no readiness probes are specified, this field defaults to true once the container is fully started (see Started field).\n\nThe value is typically used to determine whether a container is ready to accept traffic.", - "restartCount": "RestartCount holds the number of times the container has been restarted. Kubelet makes an effort to always increment the value, but there are cases when the state may be lost due to node restarts and then the value may be reset to 0. The value is never negative.", - "image": "Image is the name of container image that the container is running. The container image may not match the image used in the PodSpec, as it may have been resolved by the runtime. More info: https://kubernetes.io/docs/concepts/containers/images.", - "imageID": "ImageID is the image ID of the container's image. The image ID may not match the image ID of the image used in the PodSpec, as it may have been resolved by the runtime.", - "containerID": "ContainerID is the ID of the container in the format '://'. Where type is a container runtime identifier, returned from Version call of CRI API (for example \"containerd\").", - "started": "Started indicates whether the container has finished its postStart lifecycle hook and passed its startup probe. Initialized as false, becomes true after startupProbe is considered successful. Resets to false when the container is restarted, or if kubelet loses state temporarily. In both cases, startup probes will run again. Is always true when no startupProbe is defined and container is running and has passed the postStart lifecycle hook. The null value must be treated the same as false.", - "allocatedResources": "AllocatedResources represents the compute resources allocated for this container by the node. Kubelet sets this value to Container.Resources.Requests upon successful pod admission and after successfully admitting desired pod resize.", - "resources": "Resources represents the compute resource requests and limits that have been successfully enacted on the running container after it has been started or has been successfully resized.", - "volumeMounts": "Status of volume mounts.", - "user": "User represents user identity information initially attached to the first process of the container", + "": "ContainerStatus contains details for the current status of this container.", + "name": "Name is a DNS_LABEL representing the unique name of the container. Each container in a pod must have a unique name across all container types. Cannot be updated.", + "state": "State holds details about the container's current condition.", + "lastState": "LastTerminationState holds the last termination state of the container to help debug container crashes and restarts. This field is not populated if the container is still running and RestartCount is 0.", + "ready": "Ready specifies whether the container is currently passing its readiness check. The value will change as readiness probes keep executing. If no readiness probes are specified, this field defaults to true once the container is fully started (see Started field).\n\nThe value is typically used to determine whether a container is ready to accept traffic.", + "restartCount": "RestartCount holds the number of times the container has been restarted. Kubelet makes an effort to always increment the value, but there are cases when the state may be lost due to node restarts and then the value may be reset to 0. The value is never negative.", + "image": "Image is the name of container image that the container is running. The container image may not match the image used in the PodSpec, as it may have been resolved by the runtime. More info: https://kubernetes.io/docs/concepts/containers/images.", + "imageID": "ImageID is the image ID of the container's image. The image ID may not match the image ID of the image used in the PodSpec, as it may have been resolved by the runtime.", + "containerID": "ContainerID is the ID of the container in the format '://'. Where type is a container runtime identifier, returned from Version call of CRI API (for example \"containerd\").", + "started": "Started indicates whether the container has finished its postStart lifecycle hook and passed its startup probe. Initialized as false, becomes true after startupProbe is considered successful. Resets to false when the container is restarted, or if kubelet loses state temporarily. In both cases, startup probes will run again. Is always true when no startupProbe is defined and container is running and has passed the postStart lifecycle hook. The null value must be treated the same as false.", + "allocatedResources": "AllocatedResources represents the compute resources allocated for this container by the node. Kubelet sets this value to Container.Resources.Requests upon successful pod admission and after successfully admitting desired pod resize.", + "resources": "Resources represents the compute resource requests and limits that have been successfully enacted on the running container after it has been started or has been successfully resized.", + "volumeMounts": "Status of volume mounts.", + "user": "User represents user identity information initially attached to the first process of the container", + "allocatedResourcesStatus": "AllocatedResourcesStatus represents the status of various resources allocated for this Pod.", } func (ContainerStatus) SwaggerDoc() map[string]string { @@ -2123,6 +2124,16 @@ func (ResourceFieldSelector) SwaggerDoc() map[string]string { return map_ResourceFieldSelector } +var map_ResourceHealth = map[string]string{ + "": "ResourceHealth represents the health of a resource. It has the latest device health information. This is a part of KEP https://kep.k8s.io/4680 and historical health changes are planned to be added in future iterations of a KEP.", + "resourceID": "ResourceID is the unique identifier of the resource. See the ResourceID type for more information.", + "health": "Health of the resource. can be one of:\n - Healthy: operates as normal\n - Unhealthy: reported unhealthy. We consider this a temporary health issue\n since we do not have a mechanism today to distinguish\n temporary and permanent issues.\n - Unknown: The status cannot be determined.\n For example, Device Plugin got unregistered and hasn't been re-registered since.\n\nIn future we may want to introduce the PermanentlyUnhealthy Status.", +} + +func (ResourceHealth) SwaggerDoc() map[string]string { + return map_ResourceHealth +} + var map_ResourceQuota = map[string]string{ "": "ResourceQuota sets aggregate quota restrictions enforced per namespace", "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", @@ -2176,6 +2187,15 @@ func (ResourceRequirements) SwaggerDoc() map[string]string { return map_ResourceRequirements } +var map_ResourceStatus = map[string]string{ + "name": "Name of the resource. Must be unique within the pod and match one of the resources from the pod spec.", + "resources": "List of unique Resources health. Each element in the list contains an unique resource ID and resource health. At a minimum, ResourceID must uniquely identify the Resource allocated to the Pod on the Node for the lifetime of a Pod. See ResourceID type for it's definition.", +} + +func (ResourceStatus) SwaggerDoc() map[string]string { + return map_ResourceStatus +} + var map_SELinuxOptions = map[string]string{ "": "SELinuxOptions are the labels to be applied to the container", "user": "User is a SELinux user label that applies to the container.", diff --git a/staging/src/k8s.io/api/core/v1/zz_generated.deepcopy.go b/staging/src/k8s.io/api/core/v1/zz_generated.deepcopy.go index b84ac14f90d..3d23f7f620e 100644 --- a/staging/src/k8s.io/api/core/v1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/api/core/v1/zz_generated.deepcopy.go @@ -1048,6 +1048,13 @@ func (in *ContainerStatus) DeepCopyInto(out *ContainerStatus) { *out = new(ContainerUser) (*in).DeepCopyInto(*out) } + if in.AllocatedResourcesStatus != nil { + in, out := &in.AllocatedResourcesStatus, &out.AllocatedResourcesStatus + *out = make([]ResourceStatus, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } @@ -4982,6 +4989,22 @@ func (in *ResourceFieldSelector) DeepCopy() *ResourceFieldSelector { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourceHealth) DeepCopyInto(out *ResourceHealth) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceHealth. +func (in *ResourceHealth) DeepCopy() *ResourceHealth { + if in == nil { + return nil + } + out := new(ResourceHealth) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in ResourceList) DeepCopyInto(out *ResourceList) { { @@ -5163,6 +5186,27 @@ func (in *ResourceRequirements) DeepCopy() *ResourceRequirements { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourceStatus) DeepCopyInto(out *ResourceStatus) { + *out = *in + if in.Resources != nil { + in, out := &in.Resources, &out.Resources + *out = make([]ResourceHealth, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceStatus. +func (in *ResourceStatus) DeepCopy() *ResourceStatus { + if in == nil { + return nil + } + out := new(ResourceStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SELinuxOptions) DeepCopyInto(out *SELinuxOptions) { *out = *in diff --git a/staging/src/k8s.io/api/testdata/HEAD/core.v1.Pod.json b/staging/src/k8s.io/api/testdata/HEAD/core.v1.Pod.json index 0b7a61836ef..6abff6ad6af 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/core.v1.Pod.json +++ b/staging/src/k8s.io/api/testdata/HEAD/core.v1.Pod.json @@ -1815,7 +1815,18 @@ 3 ] } - } + }, + "allocatedResourcesStatus": [ + { + "name": "nameValue", + "resources": [ + { + "resourceID": "resourceIDValue", + "health": "healthValue" + } + ] + } + ] } ], "containerStatuses": [ @@ -1896,7 +1907,18 @@ 3 ] } - } + }, + "allocatedResourcesStatus": [ + { + "name": "nameValue", + "resources": [ + { + "resourceID": "resourceIDValue", + "health": "healthValue" + } + ] + } + ] } ], "qosClass": "qosClassValue", @@ -1978,7 +2000,18 @@ 3 ] } - } + }, + "allocatedResourcesStatus": [ + { + "name": "nameValue", + "resources": [ + { + "resourceID": "resourceIDValue", + "health": "healthValue" + } + ] + } + ] } ], "resize": "resizeValue", diff --git a/staging/src/k8s.io/api/testdata/HEAD/core.v1.Pod.pb b/staging/src/k8s.io/api/testdata/HEAD/core.v1.Pod.pb index 73db1ea18fcd7a8ea1b4946251fcefd04ca6a351..96631251d04796e2c98a968627343480af6bef20 100644 GIT binary patch delta 222 zcmZ1wyF5-P+oG6(i<66~%ut9qAU{QDV%+A394U;O%NWnAG2P*v?5;6|@x$hgT1Ob| zinO^n^AdAY!xD2!Q-$QX_={4D^Gl18Q$1ZELfjdti8&=1V2&4WVScf5PGWH}m>UE! ULzg5oCYS1{KrJUxW1OB704A4BApigX delta 85 zcmZ1;w;)z1+oG6(i<66~%ut9qAU{Q@D|YikjughtWsK+5n6C0ncGsA~czE+Yts{(r jUc80*#m+g2#l>NXIi;yV5aG$^byUDAjxtVursoI%;|m}m diff --git a/staging/src/k8s.io/api/testdata/HEAD/core.v1.Pod.yaml b/staging/src/k8s.io/api/testdata/HEAD/core.v1.Pod.yaml index 1977741c02f..b154b298aa5 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/core.v1.Pod.yaml +++ b/staging/src/k8s.io/api/testdata/HEAD/core.v1.Pod.yaml @@ -1181,6 +1181,11 @@ status: containerStatuses: - allocatedResources: allocatedResourcesKey: "0" + allocatedResourcesStatus: + - name: nameValue + resources: + - health: healthValue + resourceID: resourceIDValue containerID: containerIDValue image: imageValue imageID: imageIDValue @@ -1238,6 +1243,11 @@ status: ephemeralContainerStatuses: - allocatedResources: allocatedResourcesKey: "0" + allocatedResourcesStatus: + - name: nameValue + resources: + - health: healthValue + resourceID: resourceIDValue containerID: containerIDValue image: imageValue imageID: imageIDValue @@ -1298,6 +1308,11 @@ status: initContainerStatuses: - allocatedResources: allocatedResourcesKey: "0" + allocatedResourcesStatus: + - name: nameValue + resources: + - health: healthValue + resourceID: resourceIDValue containerID: containerIDValue image: imageValue imageID: imageIDValue diff --git a/staging/src/k8s.io/api/testdata/HEAD/core.v1.PodStatusResult.json b/staging/src/k8s.io/api/testdata/HEAD/core.v1.PodStatusResult.json index a401783f94d..7b09b5176d9 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/core.v1.PodStatusResult.json +++ b/staging/src/k8s.io/api/testdata/HEAD/core.v1.PodStatusResult.json @@ -149,7 +149,18 @@ 3 ] } - } + }, + "allocatedResourcesStatus": [ + { + "name": "nameValue", + "resources": [ + { + "resourceID": "resourceIDValue", + "health": "healthValue" + } + ] + } + ] } ], "containerStatuses": [ @@ -230,7 +241,18 @@ 3 ] } - } + }, + "allocatedResourcesStatus": [ + { + "name": "nameValue", + "resources": [ + { + "resourceID": "resourceIDValue", + "health": "healthValue" + } + ] + } + ] } ], "qosClass": "qosClassValue", @@ -312,7 +334,18 @@ 3 ] } - } + }, + "allocatedResourcesStatus": [ + { + "name": "nameValue", + "resources": [ + { + "resourceID": "resourceIDValue", + "health": "healthValue" + } + ] + } + ] } ], "resize": "resizeValue", diff --git a/staging/src/k8s.io/api/testdata/HEAD/core.v1.PodStatusResult.pb b/staging/src/k8s.io/api/testdata/HEAD/core.v1.PodStatusResult.pb index 172c1132b399a63ea8c658c73668153d914b494c..53312203d77e971ba3e33e98f28364b14f9d3b6f 100644 GIT binary patch delta 202 zcmcc1|3qMd4AUWjjdCfBOm}!Ew=hm&{IK~Q^ASe7B5f|tyu{qpu*96wR3SMo{-V_4 z{L-T2R8JR(5O+puVopg0nB&D;m|yIilUQ5~<_1B`&?U)?$(vYJpq7)UaW=aX0HV`J A@Bjb+ delta 65 zcmaDNaF>6A4AXA@jdCfBOjmg(w=hm&JiOVE?Fgfw7jI#Hv2#vhadB8;PHAcoM0hd} On+jOPQO3#29F73?=oUQy diff --git a/staging/src/k8s.io/api/testdata/HEAD/core.v1.PodStatusResult.yaml b/staging/src/k8s.io/api/testdata/HEAD/core.v1.PodStatusResult.yaml index 5ad52b13ef7..2bd9570b694 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/core.v1.PodStatusResult.yaml +++ b/staging/src/k8s.io/api/testdata/HEAD/core.v1.PodStatusResult.yaml @@ -43,6 +43,11 @@ status: containerStatuses: - allocatedResources: allocatedResourcesKey: "0" + allocatedResourcesStatus: + - name: nameValue + resources: + - health: healthValue + resourceID: resourceIDValue containerID: containerIDValue image: imageValue imageID: imageIDValue @@ -100,6 +105,11 @@ status: ephemeralContainerStatuses: - allocatedResources: allocatedResourcesKey: "0" + allocatedResourcesStatus: + - name: nameValue + resources: + - health: healthValue + resourceID: resourceIDValue containerID: containerIDValue image: imageValue imageID: imageIDValue @@ -160,6 +170,11 @@ status: initContainerStatuses: - allocatedResources: allocatedResourcesKey: "0" + allocatedResourcesStatus: + - name: nameValue + resources: + - health: healthValue + resourceID: resourceIDValue containerID: containerIDValue image: imageValue imageID: imageIDValue diff --git a/staging/src/k8s.io/client-go/applyconfigurations/core/v1/containerstatus.go b/staging/src/k8s.io/client-go/applyconfigurations/core/v1/containerstatus.go index bdf696aaa7f..6a28939c2fe 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/core/v1/containerstatus.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/core/v1/containerstatus.go @@ -25,19 +25,20 @@ import ( // ContainerStatusApplyConfiguration represents a declarative configuration of the ContainerStatus type for use // with apply. type ContainerStatusApplyConfiguration struct { - Name *string `json:"name,omitempty"` - State *ContainerStateApplyConfiguration `json:"state,omitempty"` - LastTerminationState *ContainerStateApplyConfiguration `json:"lastState,omitempty"` - Ready *bool `json:"ready,omitempty"` - RestartCount *int32 `json:"restartCount,omitempty"` - Image *string `json:"image,omitempty"` - ImageID *string `json:"imageID,omitempty"` - ContainerID *string `json:"containerID,omitempty"` - Started *bool `json:"started,omitempty"` - AllocatedResources *corev1.ResourceList `json:"allocatedResources,omitempty"` - Resources *ResourceRequirementsApplyConfiguration `json:"resources,omitempty"` - VolumeMounts []VolumeMountStatusApplyConfiguration `json:"volumeMounts,omitempty"` - User *ContainerUserApplyConfiguration `json:"user,omitempty"` + Name *string `json:"name,omitempty"` + State *ContainerStateApplyConfiguration `json:"state,omitempty"` + LastTerminationState *ContainerStateApplyConfiguration `json:"lastState,omitempty"` + Ready *bool `json:"ready,omitempty"` + RestartCount *int32 `json:"restartCount,omitempty"` + Image *string `json:"image,omitempty"` + ImageID *string `json:"imageID,omitempty"` + ContainerID *string `json:"containerID,omitempty"` + Started *bool `json:"started,omitempty"` + AllocatedResources *corev1.ResourceList `json:"allocatedResources,omitempty"` + Resources *ResourceRequirementsApplyConfiguration `json:"resources,omitempty"` + VolumeMounts []VolumeMountStatusApplyConfiguration `json:"volumeMounts,omitempty"` + User *ContainerUserApplyConfiguration `json:"user,omitempty"` + AllocatedResourcesStatus []ResourceStatusApplyConfiguration `json:"allocatedResourcesStatus,omitempty"` } // ContainerStatusApplyConfiguration constructs a declarative configuration of the ContainerStatus type for use with @@ -154,3 +155,16 @@ func (b *ContainerStatusApplyConfiguration) WithUser(value *ContainerUserApplyCo b.User = value return b } + +// WithAllocatedResourcesStatus adds the given value to the AllocatedResourcesStatus field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the AllocatedResourcesStatus field. +func (b *ContainerStatusApplyConfiguration) WithAllocatedResourcesStatus(values ...*ResourceStatusApplyConfiguration) *ContainerStatusApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithAllocatedResourcesStatus") + } + b.AllocatedResourcesStatus = append(b.AllocatedResourcesStatus, *values[i]) + } + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/core/v1/resourcehealth.go b/staging/src/k8s.io/client-go/applyconfigurations/core/v1/resourcehealth.go new file mode 100644 index 00000000000..5169cb4bc3d --- /dev/null +++ b/staging/src/k8s.io/client-go/applyconfigurations/core/v1/resourcehealth.go @@ -0,0 +1,52 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "k8s.io/api/core/v1" +) + +// ResourceHealthApplyConfiguration represents a declarative configuration of the ResourceHealth type for use +// with apply. +type ResourceHealthApplyConfiguration struct { + ResourceID *v1.ResourceID `json:"resourceID,omitempty"` + Health *v1.ResourceHealthStatus `json:"health,omitempty"` +} + +// ResourceHealthApplyConfiguration constructs a declarative configuration of the ResourceHealth type for use with +// apply. +func ResourceHealth() *ResourceHealthApplyConfiguration { + return &ResourceHealthApplyConfiguration{} +} + +// WithResourceID sets the ResourceID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ResourceID field is set to the value of the last call. +func (b *ResourceHealthApplyConfiguration) WithResourceID(value v1.ResourceID) *ResourceHealthApplyConfiguration { + b.ResourceID = &value + return b +} + +// WithHealth sets the Health field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Health field is set to the value of the last call. +func (b *ResourceHealthApplyConfiguration) WithHealth(value v1.ResourceHealthStatus) *ResourceHealthApplyConfiguration { + b.Health = &value + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/core/v1/resourcestatus.go b/staging/src/k8s.io/client-go/applyconfigurations/core/v1/resourcestatus.go new file mode 100644 index 00000000000..1e63c87f8cd --- /dev/null +++ b/staging/src/k8s.io/client-go/applyconfigurations/core/v1/resourcestatus.go @@ -0,0 +1,57 @@ +/* +Copyright The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "k8s.io/api/core/v1" +) + +// ResourceStatusApplyConfiguration represents a declarative configuration of the ResourceStatus type for use +// with apply. +type ResourceStatusApplyConfiguration struct { + Name *v1.ResourceName `json:"name,omitempty"` + Resources []ResourceHealthApplyConfiguration `json:"resources,omitempty"` +} + +// ResourceStatusApplyConfiguration constructs a declarative configuration of the ResourceStatus type for use with +// apply. +func ResourceStatus() *ResourceStatusApplyConfiguration { + return &ResourceStatusApplyConfiguration{} +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *ResourceStatusApplyConfiguration) WithName(value v1.ResourceName) *ResourceStatusApplyConfiguration { + b.Name = &value + return b +} + +// WithResources adds the given value to the Resources field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Resources field. +func (b *ResourceStatusApplyConfiguration) WithResources(values ...*ResourceHealthApplyConfiguration) *ResourceStatusApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithResources") + } + b.Resources = append(b.Resources, *values[i]) + } + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go b/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go index d0400ba1092..157e132dfd7 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go @@ -5042,6 +5042,14 @@ var schemaYAML = typed.YAMLObject(`types: map: elementType: namedType: io.k8s.apimachinery.pkg.api.resource.Quantity + - name: allocatedResourcesStatus + type: + list: + elementType: + namedType: io.k8s.api.core.v1.ResourceStatus + elementRelationship: associative + keys: + - name - name: containerID type: scalar: string @@ -7449,6 +7457,16 @@ var schemaYAML = typed.YAMLObject(`types: scalar: string default: "" elementRelationship: atomic +- name: io.k8s.api.core.v1.ResourceHealth + map: + fields: + - name: health + type: + scalar: string + - name: resourceID + type: + scalar: string + default: "" - name: io.k8s.api.core.v1.ResourceQuota map: fields: @@ -7521,6 +7539,21 @@ var schemaYAML = typed.YAMLObject(`types: map: elementType: namedType: io.k8s.apimachinery.pkg.api.resource.Quantity +- name: io.k8s.api.core.v1.ResourceStatus + map: + fields: + - name: name + type: + scalar: string + default: "" + - name: resources + type: + list: + elementType: + namedType: io.k8s.api.core.v1.ResourceHealth + elementRelationship: associative + keys: + - resourceID - name: io.k8s.api.core.v1.SELinuxOptions map: fields: diff --git a/staging/src/k8s.io/client-go/applyconfigurations/utils.go b/staging/src/k8s.io/client-go/applyconfigurations/utils.go index 98079c23a91..eb88e1c4def 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/utils.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/utils.go @@ -918,6 +918,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &applyconfigurationscorev1.ResourceClaimApplyConfiguration{} case corev1.SchemeGroupVersion.WithKind("ResourceFieldSelector"): return &applyconfigurationscorev1.ResourceFieldSelectorApplyConfiguration{} + case corev1.SchemeGroupVersion.WithKind("ResourceHealth"): + return &applyconfigurationscorev1.ResourceHealthApplyConfiguration{} case corev1.SchemeGroupVersion.WithKind("ResourceQuota"): return &applyconfigurationscorev1.ResourceQuotaApplyConfiguration{} case corev1.SchemeGroupVersion.WithKind("ResourceQuotaSpec"): @@ -926,6 +928,8 @@ func ForKind(kind schema.GroupVersionKind) interface{} { return &applyconfigurationscorev1.ResourceQuotaStatusApplyConfiguration{} case corev1.SchemeGroupVersion.WithKind("ResourceRequirements"): return &applyconfigurationscorev1.ResourceRequirementsApplyConfiguration{} + case corev1.SchemeGroupVersion.WithKind("ResourceStatus"): + return &applyconfigurationscorev1.ResourceStatusApplyConfiguration{} case corev1.SchemeGroupVersion.WithKind("ScaleIOPersistentVolumeSource"): return &applyconfigurationscorev1.ScaleIOPersistentVolumeSourceApplyConfiguration{} case corev1.SchemeGroupVersion.WithKind("ScaleIOVolumeSource"): From 3790ee2fe835fbd7dc32052416af5a86a1757c3d Mon Sep 17 00:00:00 2001 From: Sergey Kanzhelev Date: Mon, 22 Jul 2024 05:21:23 +0000 Subject: [PATCH 3/4] reset fields when the feature gate was not set --- pkg/api/pod/util.go | 27 +++ pkg/apis/core/validation/validation.go | 79 ++++++++ pkg/apis/core/validation/validation_test.go | 206 ++++++++++++++++++++ 3 files changed, 312 insertions(+) diff --git a/pkg/api/pod/util.go b/pkg/api/pod/util.go index 6b8b1e9580d..4c79e6381f3 100644 --- a/pkg/api/pod/util.go +++ b/pkg/api/pod/util.go @@ -813,6 +813,17 @@ func dropDisabledPodStatusFields(podStatus, oldPodStatus *api.PodStatus, podSpec } } + if !utilfeature.DefaultFeatureGate.Enabled(features.ResourceHealthStatus) { + setAllocatedResourcesStatusToNil := func(csl []api.ContainerStatus) { + for i := range csl { + csl[i].AllocatedResourcesStatus = nil + } + } + setAllocatedResourcesStatusToNil(podStatus.ContainerStatuses) + setAllocatedResourcesStatusToNil(podStatus.InitContainerStatuses) + setAllocatedResourcesStatusToNil(podStatus.EphemeralContainerStatuses) + } + // drop ContainerStatus.User field to empty (disable SupplementalGroupsPolicy) if !utilfeature.DefaultFeatureGate.Enabled(features.SupplementalGroupsPolicy) && !supplementalGroupsPolicyInUse(oldPodSpec) { dropUserField := func(csl []api.ContainerStatus) { @@ -1161,6 +1172,22 @@ func rroInUse(podSpec *api.PodSpec) bool { return inUse } +func allocatedResourcesStatusInUse(podSpec *api.PodStatus) bool { + if podSpec == nil { + return false + } + inUse := func(csl []api.ContainerStatus) bool { + for _, cs := range csl { + if len(cs.AllocatedResourcesStatus) > 0 { + return true + } + } + return false + } + + return inUse(podSpec.ContainerStatuses) || inUse(podSpec.InitContainerStatuses) || inUse(podSpec.EphemeralContainerStatuses) +} + func dropDisabledClusterTrustBundleProjection(podSpec, oldPodSpec *api.PodSpec) { if utilfeature.DefaultFeatureGate.Enabled(features.ClusterTrustBundleProjection) { return diff --git a/pkg/apis/core/validation/validation.go b/pkg/apis/core/validation/validation.go index 6be9b84a17e..abbcf0916d7 100644 --- a/pkg/apis/core/validation/validation.go +++ b/pkg/apis/core/validation/validation.go @@ -5378,6 +5378,11 @@ func ValidatePodStatusUpdate(newPod, oldPod *core.Pod, opts PodValidationOptions allErrs = append(allErrs, validateContainerStatusUsers(newPod.Status.InitContainerStatuses, fldPath.Child("initContainerStatuses"), newPod.Spec.OS)...) allErrs = append(allErrs, validateContainerStatusUsers(newPod.Status.EphemeralContainerStatuses, fldPath.Child("ephemeralContainerStatuses"), newPod.Spec.OS)...) + allErrs = append(allErrs, validateContainerStatusAllocatedResourcesStatus(newPod.Status.ContainerStatuses, fldPath.Child("containerStatuses"), newPod.Spec.Containers)...) + allErrs = append(allErrs, validateContainerStatusAllocatedResourcesStatus(newPod.Status.InitContainerStatuses, fldPath.Child("initContainerStatuses"), newPod.Spec.InitContainers)...) + // ephemeral containers are not allowed to have resources allocated + allErrs = append(allErrs, validateContainerStatusNoAllocatedResourcesStatus(newPod.Status.EphemeralContainerStatuses, fldPath.Child("ephemeralContainerStatuses"))...) + return allErrs } @@ -8200,6 +8205,80 @@ func validateContainerStatusUsers(containerStatuses []core.ContainerStatus, fldP return allErrors } +func validateContainerStatusNoAllocatedResourcesStatus(containerStatuses []core.ContainerStatus, fldPath *field.Path) field.ErrorList { + allErrors := field.ErrorList{} + + for i, containerStatus := range containerStatuses { + if containerStatus.AllocatedResourcesStatus == nil { + continue + } else { + allErrors = append(allErrors, field.Forbidden(fldPath.Index(i).Child("allocatedResourcesStatus"), "cannot be set for a container status")) + } + } + + return allErrors +} + +// validateContainerStatusAllocatedResourcesStatus iterate the allocated resources health and validate: +// - resourceName matches one of resources in container's resource requirements +// - resourceID is not empty and unique +func validateContainerStatusAllocatedResourcesStatus(containerStatuses []core.ContainerStatus, fldPath *field.Path, containers []core.Container) field.ErrorList { + allErrors := field.ErrorList{} + + for i, containerStatus := range containerStatuses { + if containerStatus.AllocatedResourcesStatus == nil { + continue + } + + allocatedResources := containerStatus.AllocatedResourcesStatus + for j, allocatedResource := range allocatedResources { + var container core.Container + containerFound := false + // get container by name + for _, c := range containers { + if c.Name == containerStatus.Name { + containerFound = true + container = c + break + } + } + + // ignore missing container, see https://github.com/kubernetes/kubernetes/issues/124915 + if containerFound { + found := false + + // get container resources from the spec + containerResources := container.Resources + for resourceName := range containerResources.Requests { + if resourceName == allocatedResource.Name { + found = true + break + } + } + if !found { + allErrors = append(allErrors, field.Invalid(fldPath.Index(i).Child("allocatedResourcesStatus").Index(j).Child("name"), allocatedResource.Name, "must match one of the container's resource requirements")) + } + } + + uniqueResources := sets.New[core.ResourceID]() + // check resource IDs are unique + for k, r := range allocatedResource.Resources { + if r.Health != core.ResourceHealthStatusHealthy && r.Health != core.ResourceHealthStatusUnhealthy && r.Health != core.ResourceHealthStatusUnknown { + allErrors = append(allErrors, field.Invalid(fldPath.Index(i).Child("allocatedResourcesStatus").Index(j).Child("resources").Index(k).Child("health"), r.Health, "must be one of Healthy, Unhealthy, Unknown")) + } + + if uniqueResources.Has(r.ResourceID) { + allErrors = append(allErrors, field.Invalid(fldPath.Index(i).Child("allocatedResourcesStatus").Index(j).Child("resources").Index(k).Child("resourceID"), r.ResourceID, "must be unique")) + } else { + uniqueResources.Insert(r.ResourceID) + } + } + } + } + + return allErrors +} + func validateLinuxContainerUser(linuxContainerUser *core.LinuxContainerUser, fldPath *field.Path) field.ErrorList { allErrors := field.ErrorList{} if linuxContainerUser == nil { diff --git a/pkg/apis/core/validation/validation_test.go b/pkg/apis/core/validation/validation_test.go index f7a724a1683..0573f0addc5 100644 --- a/pkg/apis/core/validation/validation_test.go +++ b/pkg/apis/core/validation/validation_test.go @@ -24423,3 +24423,209 @@ func TestValidatePodStatusUpdateWithSupplementalGroupsPolicy(t *testing.T) { } } } +func TestValidateContainerStatusNoAllocatedResourcesStatus(t *testing.T) { + containerStatuses := []core.ContainerStatus{ + { + Name: "container-1", + }, + { + Name: "container-2", + AllocatedResourcesStatus: []core.ResourceStatus{ + { + Name: "test.device/test", + Resources: nil, + }, + }, + }, + { + Name: "container-3", + AllocatedResourcesStatus: []core.ResourceStatus{ + { + Name: "test.device/test", + Resources: []core.ResourceHealth{ + { + ResourceID: "resource-1", + Health: core.ResourceHealthStatusHealthy, + }, + }, + }, + }, + }, + } + + fldPath := field.NewPath("spec", "containers") + + errs := validateContainerStatusNoAllocatedResourcesStatus(containerStatuses, fldPath) + + assert.Equal(t, 2, len(errs)) + assert.Equal(t, "spec.containers[1].allocatedResourcesStatus", errs[0].Field) + assert.Equal(t, "cannot be set for a container status", errs[0].Detail) + assert.Equal(t, "spec.containers[2].allocatedResourcesStatus", errs[1].Field) + assert.Equal(t, "cannot be set for a container status", errs[1].Detail) +} + +func TestValidateContainerStatusAllocatedResourcesStatus(t *testing.T) { + fldPath := field.NewPath("spec", "containers") + + testCases := map[string]struct { + containers []core.Container + containerStatuses []core.ContainerStatus + wantFieldErrors field.ErrorList + }{ + "basic correct status": { + containers: []core.Container{ + { + Name: "container-1", + Resources: core.ResourceRequirements{ + Requests: core.ResourceList{ + "test.device/test": resource.MustParse("1"), + }, + }, + }, + }, + containerStatuses: []core.ContainerStatus{ + { + Name: "container-1", + AllocatedResourcesStatus: []core.ResourceStatus{ + { + Name: "test.device/test", + Resources: []core.ResourceHealth{ + { + ResourceID: "resource-1", + Health: core.ResourceHealthStatusHealthy, + }, + }, + }, + }, + }, + }, + wantFieldErrors: field.ErrorList{}, + }, + "ignoring the missing container (see https://github.com/kubernetes/kubernetes/issues/124915)": { + containers: []core.Container{ + { + Name: "container-2", + Resources: core.ResourceRequirements{ + Requests: core.ResourceList{ + "test.device/test": resource.MustParse("1"), + }, + }, + }, + }, + containerStatuses: []core.ContainerStatus{ + { + Name: "container-1", + AllocatedResourcesStatus: []core.ResourceStatus{ + { + Name: "test.device/test", + Resources: []core.ResourceHealth{ + { + ResourceID: "resource-1", + Health: core.ResourceHealthStatusHealthy, + }, + }, + }, + }, + }, + }, + wantFieldErrors: field.ErrorList{}, + }, + "allow nil": { + containers: []core.Container{ + { + Name: "container-2", + Resources: core.ResourceRequirements{ + Requests: core.ResourceList{ + "test.device/test": resource.MustParse("1"), + }, + }, + }, + }, + containerStatuses: []core.ContainerStatus{ + { + Name: "container-1", + }, + }, + wantFieldErrors: field.ErrorList{}, + }, + "don't allow non-unique IDs": { + containers: []core.Container{ + { + Name: "container-2", + Resources: core.ResourceRequirements{ + Requests: core.ResourceList{ + "test.device/test": resource.MustParse("1"), + }, + }, + }, + }, + containerStatuses: []core.ContainerStatus{ + { + Name: "container-1", + AllocatedResourcesStatus: []core.ResourceStatus{ + { + Name: "test.device/test", + Resources: []core.ResourceHealth{ + { + ResourceID: "resource-1", + Health: core.ResourceHealthStatusHealthy, + }, + { + ResourceID: "resource-1", + Health: core.ResourceHealthStatusUnhealthy, + }, + }, + }, + }, + }, + }, + wantFieldErrors: field.ErrorList{ + field.Invalid(fldPath.Index(0).Child("allocatedResourcesStatus").Index(0).Child("resources").Index(1).Child("resourceID"), core.ResourceID("resource-1"), "must be unique"), + }, + }, + + "don't allow resources that are not in spec": { + containers: []core.Container{ + { + Name: "container-1", + Resources: core.ResourceRequirements{ + Requests: core.ResourceList{ + "test.device/test": resource.MustParse("1"), + }, + }, + }, + }, + containerStatuses: []core.ContainerStatus{ + { + Name: "container-1", + AllocatedResourcesStatus: []core.ResourceStatus{ + { + Name: "test.device/test", + Resources: []core.ResourceHealth{ + { + ResourceID: "resource-1", + Health: core.ResourceHealthStatusHealthy, + }, + }, + }, + { + Name: "test.device/test2", + Resources: []core.ResourceHealth{}, + }, + }, + }, + }, + wantFieldErrors: field.ErrorList{ + field.Invalid(fldPath.Index(0).Child("allocatedResourcesStatus").Index(1).Child("name"), core.ResourceName("test.device/test2"), "must match one of the container's resource requirements"), + }, + }, + } + for name, tt := range testCases { + t.Run(name, func(t *testing.T) { + errs := validateContainerStatusAllocatedResourcesStatus(tt.containerStatuses, fldPath, tt.containers) + if diff := cmp.Diff(tt.wantFieldErrors, errs); diff != "" { + t.Errorf("unexpected field errors (-want, +got):\n%s", diff) + } + }) + } +} From 62f96d2748285eb556705af7510d0065ff84a7b1 Mon Sep 17 00:00:00 2001 From: Sergey Kanzhelev Date: Mon, 22 Jul 2024 05:22:16 +0000 Subject: [PATCH 4/4] set AllocatedResourcesStatus in the Pod Status --- api/openapi-spec/swagger.json | 1 + api/openapi-spec/v3/api__v1_openapi.json | 1 + pkg/api/pod/util.go | 16 -- pkg/apis/core/validation/validation.go | 17 +- pkg/apis/core/validation/validation_test.go | 40 ++- pkg/features/kube_features.go | 9 + pkg/kubelet/cm/container_manager.go | 7 + pkg/kubelet/cm/container_manager_linux.go | 14 + pkg/kubelet/cm/container_manager_stub.go | 8 + pkg/kubelet/cm/container_manager_windows.go | 14 + pkg/kubelet/cm/devicemanager/manager.go | 102 +++++++ pkg/kubelet/cm/devicemanager/manager_test.go | 81 ++++++ pkg/kubelet/cm/devicemanager/pod_devices.go | 16 ++ pkg/kubelet/cm/devicemanager/types.go | 7 + pkg/kubelet/cm/fake_container_manager.go | 6 + pkg/kubelet/cm/resourceupdates/updates.go | 25 ++ pkg/kubelet/kubelet.go | 17 ++ pkg/kubelet/kubelet_pods.go | 5 + .../device_plugin_failures_pod_status_test.go | 249 ++++++++++++++++++ test/e2e_node/device_plugin_failures_test.go | 11 +- 20 files changed, 614 insertions(+), 32 deletions(-) create mode 100644 pkg/kubelet/cm/resourceupdates/updates.go create mode 100644 test/e2e_node/device_plugin_failures_pod_status_test.go diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 69d6f2ade38..344ea527335 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -10679,6 +10679,7 @@ "io.k8s.api.core.v1.ResourceStatus": { "properties": { "name": { + "description": "Name of the resource. Must be unique within the pod and match one of the resources from the pod spec.", "type": "string" }, "resources": { diff --git a/api/openapi-spec/v3/api__v1_openapi.json b/api/openapi-spec/v3/api__v1_openapi.json index 85f68e90fa5..f33ed5aa951 100644 --- a/api/openapi-spec/v3/api__v1_openapi.json +++ b/api/openapi-spec/v3/api__v1_openapi.json @@ -6817,6 +6817,7 @@ "properties": { "name": { "default": "", + "description": "Name of the resource. Must be unique within the pod and match one of the resources from the pod spec.", "type": "string" }, "resources": { diff --git a/pkg/api/pod/util.go b/pkg/api/pod/util.go index 4c79e6381f3..9d3746f31df 100644 --- a/pkg/api/pod/util.go +++ b/pkg/api/pod/util.go @@ -1172,22 +1172,6 @@ func rroInUse(podSpec *api.PodSpec) bool { return inUse } -func allocatedResourcesStatusInUse(podSpec *api.PodStatus) bool { - if podSpec == nil { - return false - } - inUse := func(csl []api.ContainerStatus) bool { - for _, cs := range csl { - if len(cs.AllocatedResourcesStatus) > 0 { - return true - } - } - return false - } - - return inUse(podSpec.ContainerStatuses) || inUse(podSpec.InitContainerStatuses) || inUse(podSpec.EphemeralContainerStatuses) -} - func dropDisabledClusterTrustBundleProjection(podSpec, oldPodSpec *api.PodSpec) { if utilfeature.DefaultFeatureGate.Enabled(features.ClusterTrustBundleProjection) { return diff --git a/pkg/apis/core/validation/validation.go b/pkg/apis/core/validation/validation.go index abbcf0916d7..248d57d237c 100644 --- a/pkg/apis/core/validation/validation.go +++ b/pkg/apis/core/validation/validation.go @@ -8209,11 +8209,10 @@ func validateContainerStatusNoAllocatedResourcesStatus(containerStatuses []core. allErrors := field.ErrorList{} for i, containerStatus := range containerStatuses { - if containerStatus.AllocatedResourcesStatus == nil { + if len(containerStatus.AllocatedResourcesStatus) == 0 { continue - } else { - allErrors = append(allErrors, field.Forbidden(fldPath.Index(i).Child("allocatedResourcesStatus"), "cannot be set for a container status")) } + allErrors = append(allErrors, field.Forbidden(fldPath.Index(i).Child("allocatedResourcesStatus"), "must not be specified in container status")) } return allErrors @@ -8263,12 +8262,18 @@ func validateContainerStatusAllocatedResourcesStatus(containerStatuses []core.Co uniqueResources := sets.New[core.ResourceID]() // check resource IDs are unique for k, r := range allocatedResource.Resources { - if r.Health != core.ResourceHealthStatusHealthy && r.Health != core.ResourceHealthStatusUnhealthy && r.Health != core.ResourceHealthStatusUnknown { - allErrors = append(allErrors, field.Invalid(fldPath.Index(i).Child("allocatedResourcesStatus").Index(j).Child("resources").Index(k).Child("health"), r.Health, "must be one of Healthy, Unhealthy, Unknown")) + + var supportedResourceHealthValues = sets.New( + core.ResourceHealthStatusHealthy, + core.ResourceHealthStatusUnhealthy, + core.ResourceHealthStatusUnknown) + + if !supportedResourceHealthValues.Has(r.Health) { + allErrors = append(allErrors, field.NotSupported(fldPath.Index(i).Child("allocatedResourcesStatus").Index(j).Child("resources").Index(k).Child("health"), r.Health, sets.List(supportedResourceHealthValues))) } if uniqueResources.Has(r.ResourceID) { - allErrors = append(allErrors, field.Invalid(fldPath.Index(i).Child("allocatedResourcesStatus").Index(j).Child("resources").Index(k).Child("resourceID"), r.ResourceID, "must be unique")) + allErrors = append(allErrors, field.Duplicate(fldPath.Index(i).Child("allocatedResourcesStatus").Index(j).Child("resources").Index(k).Child("resourceID"), r.ResourceID)) } else { uniqueResources.Insert(r.ResourceID) } diff --git a/pkg/apis/core/validation/validation_test.go b/pkg/apis/core/validation/validation_test.go index 0573f0addc5..18bbdecd524 100644 --- a/pkg/apis/core/validation/validation_test.go +++ b/pkg/apis/core/validation/validation_test.go @@ -24457,11 +24457,11 @@ func TestValidateContainerStatusNoAllocatedResourcesStatus(t *testing.T) { errs := validateContainerStatusNoAllocatedResourcesStatus(containerStatuses, fldPath) - assert.Equal(t, 2, len(errs)) + assert.Len(t, errs, 2) assert.Equal(t, "spec.containers[1].allocatedResourcesStatus", errs[0].Field) - assert.Equal(t, "cannot be set for a container status", errs[0].Detail) + assert.Equal(t, "must not be specified in container status", errs[0].Detail) assert.Equal(t, "spec.containers[2].allocatedResourcesStatus", errs[1].Field) - assert.Equal(t, "cannot be set for a container status", errs[1].Detail) + assert.Equal(t, "must not be specified in container status", errs[1].Detail) } func TestValidateContainerStatusAllocatedResourcesStatus(t *testing.T) { @@ -24580,7 +24580,7 @@ func TestValidateContainerStatusAllocatedResourcesStatus(t *testing.T) { }, }, wantFieldErrors: field.ErrorList{ - field.Invalid(fldPath.Index(0).Child("allocatedResourcesStatus").Index(0).Child("resources").Index(1).Child("resourceID"), core.ResourceID("resource-1"), "must be unique"), + field.Duplicate(fldPath.Index(0).Child("allocatedResourcesStatus").Index(0).Child("resources").Index(1).Child("resourceID"), core.ResourceID("resource-1")), }, }, @@ -24619,6 +24619,38 @@ func TestValidateContainerStatusAllocatedResourcesStatus(t *testing.T) { field.Invalid(fldPath.Index(0).Child("allocatedResourcesStatus").Index(1).Child("name"), core.ResourceName("test.device/test2"), "must match one of the container's resource requirements"), }, }, + + "don't allow health status outside the known values": { + containers: []core.Container{ + { + Name: "container-1", + Resources: core.ResourceRequirements{ + Requests: core.ResourceList{ + "test.device/test": resource.MustParse("1"), + }, + }, + }, + }, + containerStatuses: []core.ContainerStatus{ + { + Name: "container-1", + AllocatedResourcesStatus: []core.ResourceStatus{ + { + Name: "test.device/test", + Resources: []core.ResourceHealth{ + { + ResourceID: "resource-1", + Health: "invalid-health-value", + }, + }, + }, + }, + }, + }, + wantFieldErrors: field.ErrorList{ + field.NotSupported(fldPath.Index(0).Child("allocatedResourcesStatus").Index(0).Child("resources").Index(0).Child("health"), core.ResourceHealthStatus("invalid-health-value"), []string{"Healthy", "Unhealthy", "Unknown"}), + }, + }, } for name, tt := range testCases { t.Run(name, func(t *testing.T) { diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index 67df67eede0..ad5d514b0de 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -664,6 +664,13 @@ const ( // No effect for other cases such as using serverTLSbootstap. ReloadKubeletServerCertificateFile featuregate.Feature = "ReloadKubeletServerCertificateFile" + // owner: @SergeyKanzhelev + // kep: https://kep.k8s.io/4680 + // alpha: v1.31 + // + // Adds the AllocatedResourcesStatus to the container status. + ResourceHealthStatus featuregate.Feature = "ResourceHealthStatus" + // owner: @mikedanese // alpha: v1.7 // beta: v1.12 @@ -1150,6 +1157,8 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS ReloadKubeletServerCertificateFile: {Default: true, PreRelease: featuregate.Beta}, + ResourceHealthStatus: {Default: false, PreRelease: featuregate.Alpha}, + RotateKubeletServerCertificate: {Default: true, PreRelease: featuregate.Beta}, RuntimeClassInImageCriAPI: {Default: false, PreRelease: featuregate.Alpha}, diff --git a/pkg/kubelet/cm/container_manager.go b/pkg/kubelet/cm/container_manager.go index 33fb3ccb2f0..99fb69c8b98 100644 --- a/pkg/kubelet/cm/container_manager.go +++ b/pkg/kubelet/cm/container_manager.go @@ -32,6 +32,7 @@ import ( kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" "k8s.io/kubernetes/pkg/kubelet/apis/podresources" "k8s.io/kubernetes/pkg/kubelet/cm/devicemanager" + "k8s.io/kubernetes/pkg/kubelet/cm/resourceupdates" "k8s.io/kubernetes/pkg/kubelet/config" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" evictionapi "k8s.io/kubernetes/pkg/kubelet/eviction/api" @@ -132,6 +133,12 @@ type ContainerManager interface { // might need to unprepare resources. PodMightNeedToUnprepareResources(UID types.UID) bool + // UpdateAllocatedResourcesStatus updates the status of allocated resources for the pod. + UpdateAllocatedResourcesStatus(pod *v1.Pod, status *v1.PodStatus) + + // Updates returns a channel that receives an Update when the device changed its status. + Updates() <-chan resourceupdates.Update + // Implements the PodResources Provider API podresources.CPUsProvider podresources.DevicesProvider diff --git a/pkg/kubelet/cm/container_manager_linux.go b/pkg/kubelet/cm/container_manager_linux.go index c5ec87abfbd..29be9d202b8 100644 --- a/pkg/kubelet/cm/container_manager_linux.go +++ b/pkg/kubelet/cm/container_manager_linux.go @@ -53,6 +53,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/cm/dra" "k8s.io/kubernetes/pkg/kubelet/cm/memorymanager" memorymanagerstate "k8s.io/kubernetes/pkg/kubelet/cm/memorymanager/state" + "k8s.io/kubernetes/pkg/kubelet/cm/resourceupdates" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" cmutil "k8s.io/kubernetes/pkg/kubelet/cm/util" "k8s.io/kubernetes/pkg/kubelet/config" @@ -1027,3 +1028,16 @@ func (cm *containerManagerImpl) UnprepareDynamicResources(pod *v1.Pod) error { func (cm *containerManagerImpl) PodMightNeedToUnprepareResources(UID types.UID) bool { return cm.draManager.PodMightNeedToUnprepareResources(UID) } + +func (cm *containerManagerImpl) UpdateAllocatedResourcesStatus(pod *v1.Pod, status *v1.PodStatus) { + + // For now we only support Device Plugin + cm.deviceManager.UpdateAllocatedResourcesStatus(pod, status) + + // TODO(SergeyKanzhelev, https://kep.k8s.io/4680): add support for DRA resources which is planned for the next iteration of a KEP. +} + +func (cm *containerManagerImpl) Updates() <-chan resourceupdates.Update { + // TODO(SergeyKanzhelev, https://kep.k8s.io/4680): add support for DRA resources, for now only use device plugin updates. DRA support is planned for the next iteration of a KEP. + return cm.deviceManager.Updates() +} diff --git a/pkg/kubelet/cm/container_manager_stub.go b/pkg/kubelet/cm/container_manager_stub.go index cc9ab40ca97..6f849b67e52 100644 --- a/pkg/kubelet/cm/container_manager_stub.go +++ b/pkg/kubelet/cm/container_manager_stub.go @@ -28,6 +28,7 @@ import ( podresourcesapi "k8s.io/kubelet/pkg/apis/podresources/v1" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager" "k8s.io/kubernetes/pkg/kubelet/cm/memorymanager" + "k8s.io/kubernetes/pkg/kubelet/cm/resourceupdates" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" "k8s.io/kubernetes/pkg/kubelet/config" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" @@ -181,6 +182,13 @@ func (cm *containerManagerStub) PodMightNeedToUnprepareResources(UID types.UID) return false } +func (cm *containerManagerStub) UpdateAllocatedResourcesStatus(pod *v1.Pod, status *v1.PodStatus) { +} + +func (cm *containerManagerStub) Updates() <-chan resourceupdates.Update { + return nil +} + func NewStubContainerManager() ContainerManager { return &containerManagerStub{shouldResetExtendedResourceCapacity: false} } diff --git a/pkg/kubelet/cm/container_manager_windows.go b/pkg/kubelet/cm/container_manager_windows.go index f62944aafcd..79a308d6047 100644 --- a/pkg/kubelet/cm/container_manager_windows.go +++ b/pkg/kubelet/cm/container_manager_windows.go @@ -41,6 +41,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager" "k8s.io/kubernetes/pkg/kubelet/cm/devicemanager" "k8s.io/kubernetes/pkg/kubelet/cm/memorymanager" + "k8s.io/kubernetes/pkg/kubelet/cm/resourceupdates" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" "k8s.io/kubernetes/pkg/kubelet/config" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" @@ -205,6 +206,19 @@ func (cm *containerManagerImpl) GetResources(pod *v1.Pod, container *v1.Containe return opts, nil } +func (cm *containerManagerImpl) UpdateAllocatedResourcesStatus(pod *v1.Pod, status *v1.PodStatus) { + // For now we only support Device Plugin + + cm.deviceManager.UpdateAllocatedResourcesStatus(pod, status) + + // TODO(SergeyKanzhelev, https://kep.k8s.io/4680): add support for DRA resources when DRA supports Windows +} + +func (cm *containerManagerImpl) Updates() <-chan resourceupdates.Update { + // TODO(SergeyKanzhelev, https://kep.k8s.io/4680): add support for DRA resources, for now only use device plugin updates + return cm.deviceManager.Updates() +} + func (cm *containerManagerImpl) UpdatePluginResources(node *schedulerframework.NodeInfo, attrs *lifecycle.PodAdmitAttributes) error { return cm.deviceManager.UpdatePluginResources(node, attrs) } diff --git a/pkg/kubelet/cm/devicemanager/manager.go b/pkg/kubelet/cm/devicemanager/manager.go index 96943979da0..6264cb12dd9 100644 --- a/pkg/kubelet/cm/devicemanager/manager.go +++ b/pkg/kubelet/cm/devicemanager/manager.go @@ -33,12 +33,15 @@ import ( "k8s.io/apimachinery/pkg/api/resource" errorsutil "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" + utilfeature "k8s.io/apiserver/pkg/util/feature" pluginapi "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1" + "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/kubelet/checkpointmanager" "k8s.io/kubernetes/pkg/kubelet/checkpointmanager/errors" "k8s.io/kubernetes/pkg/kubelet/cm/containermap" "k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/checkpoint" plugin "k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/plugin/v1beta1" + "k8s.io/kubernetes/pkg/kubelet/cm/resourceupdates" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" "k8s.io/kubernetes/pkg/kubelet/config" "k8s.io/kubernetes/pkg/kubelet/lifecycle" @@ -108,6 +111,9 @@ type ManagerImpl struct { // was reported running by the container runtime when `containerMap` was computed. // Used to detect pods running across a restart containerRunningSet sets.Set[string] + + // update channel for device health updates + update chan resourceupdates.Update } type endpointInfo struct { @@ -151,6 +157,7 @@ func newManagerImpl(socketPath string, topology []cadvisorapi.Node, topologyAffi numaNodes: numaNodes, topologyAffinityStore: topologyAffinityStore, devicesToReuse: make(PodReusableDevices), + update: make(chan resourceupdates.Update), } server, err := plugin.NewServer(socketPath, manager, manager) @@ -174,6 +181,10 @@ func newManagerImpl(socketPath string, topology []cadvisorapi.Node, topologyAffi return manager, nil } +func (m *ManagerImpl) Updates() <-chan resourceupdates.Update { + return m.update +} + // CleanupPluginDirectory is to remove all existing unix sockets // from /var/lib/kubelet/device-plugins on Device Plugin Manager start func (m *ManagerImpl) CleanupPluginDirectory(dir string) error { @@ -259,8 +270,26 @@ func (m *ManagerImpl) genericDeviceUpdateCallback(resourceName string, devices [ m.mutex.Lock() m.healthyDevices[resourceName] = sets.New[string]() m.unhealthyDevices[resourceName] = sets.New[string]() + oldDevices := m.allDevices[resourceName] + podsToUpdate := sets.New[string]() m.allDevices[resourceName] = make(map[string]pluginapi.Device) for _, dev := range devices { + + if utilfeature.DefaultFeatureGate.Enabled(features.ResourceHealthStatus) { + // compare with old device's health and send update to the channel if needed + if oldDev, ok := oldDevices[dev.ID]; ok { + if oldDev.Health != dev.Health { + podUID, _ := m.podDevices.getPodAndContainerForDevice(dev.ID) + podsToUpdate.Insert(podUID) + } + } else { + // if this is a new device, it might have existed before and disappeared for a while + // but still be assigned to a Pod. In this case, we need to send an update to the channel + podUID, _ := m.podDevices.getPodAndContainerForDevice(dev.ID) + podsToUpdate.Insert(podUID) + } + } + m.allDevices[resourceName][dev.ID] = dev if dev.Health == pluginapi.Healthy { m.healthyDevices[resourceName].Insert(dev.ID) @@ -270,6 +299,15 @@ func (m *ManagerImpl) genericDeviceUpdateCallback(resourceName string, devices [ } } m.mutex.Unlock() + + if utilfeature.DefaultFeatureGate.Enabled(features.ResourceHealthStatus) { + if len(podsToUpdate) > 0 { + m.update <- resourceupdates.Update{ + PodUIDs: podsToUpdate.UnsortedList(), + } + } + } + if err := m.writeCheckpoint(); err != nil { klog.ErrorS(err, "Writing checkpoint encountered") } @@ -1048,6 +1086,70 @@ func (m *ManagerImpl) GetDevices(podUID, containerName string) ResourceDeviceIns return m.podDevices.getContainerDevices(podUID, containerName) } +func (m *ManagerImpl) UpdateAllocatedResourcesStatus(pod *v1.Pod, status *v1.PodStatus) { + m.mutex.Lock() + defer m.mutex.Unlock() + + // Today we ignore edge cases that are not likely to happen: + // - update statuses for containers that are in spec, but not in status + // - update statuses for resources requested in spec, but with no information in podDevices + for i, containerStatus := range status.ContainerStatuses { + devices := m.podDevices.getContainerDevices(string(pod.UID), containerStatus.Name) + + for resourceName, deviceInstances := range devices { + for id, d := range deviceInstances { + health := pluginapi.Healthy + // this is unlikely, but check for existence here anyways + if r, ok := m.allDevices[resourceName]; ok { + if _, ok := r[id]; ok { + health = m.allDevices[resourceName][id].Health + } + } + + d.Health = health + + deviceInstances[id] = d + } + } + + for resourceName, dI := range devices { + resourceStatus := v1.ResourceStatus{ + Name: v1.ResourceName(resourceName), + Resources: []v1.ResourceHealth{}, + } + + for id, d := range dI { + health := v1.ResourceHealthStatusHealthy + if d.Health != pluginapi.Healthy { + health = v1.ResourceHealthStatusUnhealthy + } + resourceStatus.Resources = append(resourceStatus.Resources, v1.ResourceHealth{ + ResourceID: v1.ResourceID(id), + Health: health, + }) + } + + if status.ContainerStatuses[i].AllocatedResourcesStatus == nil { + status.ContainerStatuses[i].AllocatedResourcesStatus = []v1.ResourceStatus{} + } + + // look up the resource status by name and update it + found := false + for j, rs := range status.ContainerStatuses[i].AllocatedResourcesStatus { + if rs.Name == resourceStatus.Name { + status.ContainerStatuses[i].AllocatedResourcesStatus[j] = resourceStatus + found = true + break + } + } + + if !found { + status.ContainerStatuses[i].AllocatedResourcesStatus = append(status.ContainerStatuses[i].AllocatedResourcesStatus, resourceStatus) + } + } + } +} + // ShouldResetExtendedResourceCapacity returns whether the extended resources should be zeroed or not, // depending on whether the node has been recreated. Absence of the checkpoint file strongly indicates the node // has been recreated. diff --git a/pkg/kubelet/cm/devicemanager/manager_test.go b/pkg/kubelet/cm/devicemanager/manager_test.go index 190c3b833fe..7a328a8bc72 100644 --- a/pkg/kubelet/cm/devicemanager/manager_test.go +++ b/pkg/kubelet/cm/devicemanager/manager_test.go @@ -1850,3 +1850,84 @@ func TestGetTopologyHintsWithUpdates(t *testing.T) { }) } } +func TestUpdateAllocatedResourcesStatus(t *testing.T) { + podUID := "test-pod-uid" + containerName := "test-container" + resourceName := "test-resource" + + tmpDir, err := os.MkdirTemp("", "checkpoint") + if err != nil { + t.Fatalf("failed to create temp dir: %v", err) + } + + defer func() { + err = os.RemoveAll(tmpDir) + if err != nil { + t.Fatalf("Fail to remove tmpdir: %v", err) + } + }() + ckm, err := checkpointmanager.NewCheckpointManager(tmpDir) + if err != nil { + t.Fatalf("failed to create checkpoint manager: %v", err) + } + + testManager := &ManagerImpl{ + endpoints: make(map[string]endpointInfo), + healthyDevices: make(map[string]sets.Set[string]), + unhealthyDevices: make(map[string]sets.Set[string]), + allocatedDevices: make(map[string]sets.Set[string]), + allDevices: make(map[string]DeviceInstances), + podDevices: newPodDevices(), + checkpointManager: ckm, + } + + testManager.podDevices.insert(podUID, containerName, resourceName, + constructDevices([]string{"dev1", "dev2"}), + newContainerAllocateResponse( + withDevices(map[string]string{"/dev/r1dev1": "/dev/r1dev1", "/dev/r1dev2": "/dev/r1dev2"}), + withMounts(map[string]string{"/home/r1lib1": "/usr/r1lib1"}), + ), + ) + + testManager.genericDeviceUpdateCallback(resourceName, []pluginapi.Device{ + {ID: "dev1", Health: pluginapi.Healthy}, + {ID: "dev2", Health: pluginapi.Unhealthy}, + }) + + pod := &v1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + UID: types.UID(podUID), + }, + } + status := &v1.PodStatus{ + ContainerStatuses: []v1.ContainerStatus{ + { + Name: containerName, + }, + }, + } + testManager.UpdateAllocatedResourcesStatus(pod, status) + + expectedStatus := v1.ResourceStatus{ + Name: v1.ResourceName(resourceName), + Resources: []v1.ResourceHealth{ + { + ResourceID: "dev1", + Health: pluginapi.Healthy, + }, + { + ResourceID: "dev2", + Health: pluginapi.Unhealthy, + }, + }, + } + expectedContainerStatuses := []v1.ContainerStatus{ + { + Name: containerName, + AllocatedResourcesStatus: []v1.ResourceStatus{expectedStatus}, + }, + } + if !reflect.DeepEqual(status.ContainerStatuses, expectedContainerStatuses) { + t.Errorf("UpdateAllocatedResourcesStatus failed, expected: %v, got: %v", expectedContainerStatuses, status.ContainerStatuses) + } +} diff --git a/pkg/kubelet/cm/devicemanager/pod_devices.go b/pkg/kubelet/cm/devicemanager/pod_devices.go index 99e7e89f482..32f47236fb4 100644 --- a/pkg/kubelet/cm/devicemanager/pod_devices.go +++ b/pkg/kubelet/cm/devicemanager/pod_devices.go @@ -183,6 +183,22 @@ func (pdev *podDevices) devices() map[string]sets.Set[string] { return ret } +// Returns podUID and containerName for a device +func (pdev *podDevices) getPodAndContainerForDevice(deviceID string) (string, string) { + pdev.RLock() + defer pdev.RUnlock() + for podUID, containerDevices := range pdev.devs { + for containerName, resources := range containerDevices { + for _, devices := range resources { + if devices.deviceIds.Devices().Has(deviceID) { + return podUID, containerName + } + } + } + } + return "", "" +} + // Turns podDevices to checkpointData. func (pdev *podDevices) toCheckpointData() []checkpoint.PodDevicesEntry { var data []checkpoint.PodDevicesEntry diff --git a/pkg/kubelet/cm/devicemanager/types.go b/pkg/kubelet/cm/devicemanager/types.go index 7e3261c667d..561b7e4e7ff 100644 --- a/pkg/kubelet/cm/devicemanager/types.go +++ b/pkg/kubelet/cm/devicemanager/types.go @@ -22,6 +22,7 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/kubernetes/pkg/kubelet/cm/containermap" + "k8s.io/kubernetes/pkg/kubelet/cm/resourceupdates" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" "k8s.io/kubernetes/pkg/kubelet/config" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" @@ -63,6 +64,9 @@ type Manager interface { // GetDevices returns information about the devices assigned to pods and containers GetDevices(podUID, containerName string) ResourceDeviceInstances + // UpdateAllocatedResourcesStatus updates the status of allocated resources for the pod. + UpdateAllocatedResourcesStatus(pod *v1.Pod, status *v1.PodStatus) + // GetAllocatableDevices returns information about all the devices known to the manager GetAllocatableDevices() ResourceDeviceInstances @@ -81,6 +85,9 @@ type Manager interface { // UpdateAllocatedDevices frees any Devices that are bound to terminated pods. UpdateAllocatedDevices() + + // Updates returns a channel that receives an Update when the device changed its status. + Updates() <-chan resourceupdates.Update } // DeviceRunContainerOptions contains the combined container runtime settings to consume its allocated devices. diff --git a/pkg/kubelet/cm/fake_container_manager.go b/pkg/kubelet/cm/fake_container_manager.go index 8cf4d9b7c48..e1c687c935e 100644 --- a/pkg/kubelet/cm/fake_container_manager.go +++ b/pkg/kubelet/cm/fake_container_manager.go @@ -27,6 +27,7 @@ import ( podresourcesapi "k8s.io/kubelet/pkg/apis/podresources/v1" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager" "k8s.io/kubernetes/pkg/kubelet/cm/memorymanager" + "k8s.io/kubernetes/pkg/kubelet/cm/resourceupdates" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" "k8s.io/kubernetes/pkg/kubelet/config" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" @@ -253,3 +254,8 @@ func (cm *FakeContainerManager) UnprepareDynamicResources(*v1.Pod) error { func (cm *FakeContainerManager) PodMightNeedToUnprepareResources(UID types.UID) bool { return false } +func (cm *FakeContainerManager) UpdateAllocatedResourcesStatus(pod *v1.Pod, status *v1.PodStatus) { +} +func (cm *FakeContainerManager) Updates() <-chan resourceupdates.Update { + return nil +} diff --git a/pkg/kubelet/cm/resourceupdates/updates.go b/pkg/kubelet/cm/resourceupdates/updates.go new file mode 100644 index 00000000000..3bf0155a3e5 --- /dev/null +++ b/pkg/kubelet/cm/resourceupdates/updates.go @@ -0,0 +1,25 @@ +/* +Copyright 2024 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package resourceupdates + +// Update is a struct that represents an update to a pod when +// the resource changes it's status. +// Later we may need to add fields like container name, resource name, and a new status. +type Update struct { + // PodUID is the UID of the pod which status needs to be updated. + PodUIDs []string +} diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index d4980a8dc52..f4317a36da7 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -2473,6 +2473,23 @@ func (kl *Kubelet) syncLoopIteration(ctx context.Context, configCh <-chan kubety status = "started" } handleProbeSync(kl, update, handler, "startup", status) + case update := <-kl.containerManager.Updates(): + pods := []*v1.Pod{} + for _, p := range update.PodUIDs { + if pod, ok := kl.podManager.GetPodByUID(types.UID(p)); ok { + klog.V(3).InfoS("SyncLoop (containermanager): event for pod", "pod", klog.KObj(pod), "event", update) + pods = append(pods, pod) + } else { + // If the pod no longer exists, ignore the event. + klog.V(4).InfoS("SyncLoop (containermanager): pod does not exist, ignore devices updates", "event", update) + } + } + if len(pods) > 0 { + // Updating the pod by syncing it again + // We do not apply the optimization by updating the status directly, but can do it later + handler.HandlePodSyncs(pods) + } + case <-housekeepingCh: if !kl.sourcesReady.AllReady() { // If the sources aren't ready or volume manager has not yet synced the states, diff --git a/pkg/kubelet/kubelet_pods.go b/pkg/kubelet/kubelet_pods.go index 8aaf01381aa..7d24a90b0e7 100644 --- a/pkg/kubelet/kubelet_pods.go +++ b/pkg/kubelet/kubelet_pods.go @@ -1834,6 +1834,11 @@ func (kl *Kubelet) generateAPIPodStatus(pod *v1.Pod, podStatus *kubecontainer.Po // ensure the probe managers have up to date status for containers kl.probeManager.UpdatePodStatus(pod, s) + // update the allocated resources status + if utilfeature.DefaultFeatureGate.Enabled(features.ResourceHealthStatus) { + kl.containerManager.UpdateAllocatedResourcesStatus(pod, s) + } + // preserve all conditions not owned by the kubelet s.Conditions = make([]v1.PodCondition, 0, len(pod.Status.Conditions)+1) for _, c := range pod.Status.Conditions { diff --git a/test/e2e_node/device_plugin_failures_pod_status_test.go b/test/e2e_node/device_plugin_failures_pod_status_test.go new file mode 100644 index 00000000000..5c1275bfaa5 --- /dev/null +++ b/test/e2e_node/device_plugin_failures_pod_status_test.go @@ -0,0 +1,249 @@ +/* +Copyright 2024 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package e2enode + +import ( + "context" + "fmt" + "time" + + "github.com/onsi/ginkgo/v2" + "github.com/onsi/gomega" + + v1 "k8s.io/api/core/v1" + kubeletdevicepluginv1beta1 "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1" + e2epod "k8s.io/kubernetes/test/e2e/framework/pod" + imageutils "k8s.io/kubernetes/test/utils/image" + admissionapi "k8s.io/pod-security-admission/api" + + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/uuid" + "k8s.io/kubernetes/pkg/features" + "k8s.io/kubernetes/test/e2e/framework" + "k8s.io/kubernetes/test/e2e_node/testdeviceplugin" +) + +var _ = SIGDescribe("Device Plugin Failures Pod Status:", framework.WithFeatureGate(features.ResourceHealthStatus), func() { + f := framework.NewDefaultFramework("device-plugin-failures") + f.NamespacePodSecurityLevel = admissionapi.LevelPrivileged + + type ResourceValue struct { + Allocatable int + Capacity int + } + + var getNodeResourceValues = func(ctx context.Context, resourceName string) ResourceValue { + ginkgo.GinkgoHelper() + node := getLocalNode(ctx, f) + + // -1 represents that the resource is not found + result := ResourceValue{ + Allocatable: -1, + Capacity: -1, + } + + for key, val := range node.Status.Capacity { + resource := string(key) + if resource == resourceName { + result.Capacity = int(val.Value()) + break + } + } + + for key, val := range node.Status.Allocatable { + resource := string(key) + if resource == resourceName { + result.Allocatable = int(val.Value()) + break + } + } + + return result + } + + var createPod = func(resourceName string, quantity int) *v1.Pod { + ginkgo.GinkgoHelper() + rl := v1.ResourceList{v1.ResourceName(resourceName): *resource.NewQuantity(int64(quantity), resource.DecimalSI)} + pod := &v1.Pod{ + ObjectMeta: metav1.ObjectMeta{Name: "device-plugin-failures-test-" + string(uuid.NewUUID())}, + Spec: v1.PodSpec{ + RestartPolicy: v1.RestartPolicyAlways, + Containers: []v1.Container{{ + Image: busyboxImage, + Name: "container-1", + Command: []string{"sh", "-c", fmt.Sprintf("env && sleep %s", sleepIntervalForever)}, + Resources: v1.ResourceRequirements{ + Limits: rl, + Requests: rl, + }, + }}, + }, + } + return pod + } + + var createPodWrongImage = func(resourceName string, quantity int) *v1.Pod { + ginkgo.GinkgoHelper() + rl := v1.ResourceList{v1.ResourceName(resourceName): *resource.NewQuantity(int64(quantity), resource.DecimalSI)} + pod := &v1.Pod{ + ObjectMeta: metav1.ObjectMeta{Name: "device-plugin-failures-test-" + string(uuid.NewUUID())}, + Spec: v1.PodSpec{ + RestartPolicy: v1.RestartPolicyAlways, + Containers: []v1.Container{{ + Image: imageutils.GetE2EImage(imageutils.InvalidRegistryImage), + ImagePullPolicy: v1.PullAlways, // this is to make test not fail on non pre-pulled image validation + Name: "container-1", + Command: []string{"sh", "-c", fmt.Sprintf("env && sleep %s", sleepIntervalForever)}, + Resources: v1.ResourceRequirements{ + Limits: rl, + Requests: rl, + }, + }}, + }, + } + return pod + } + + nodeStatusUpdateTimeout := 1 * time.Minute + devicePluginUpdateTimeout := 1 * time.Minute + + ginkgo.It("will report a Healthy and then Unhealthy single device in the pod status", func(ctx context.Context) { + // randomizing so tests can run in parallel + resourceName := fmt.Sprintf("test.device/%s", f.UniqueName) + devices := []kubeletdevicepluginv1beta1.Device{{ID: "testdevice", Health: kubeletdevicepluginv1beta1.Healthy}} + plugin := testdeviceplugin.NewDevicePlugin(nil) + + err := plugin.RegisterDevicePlugin(ctx, f.UniqueName, resourceName, devices) + defer plugin.Stop() // should stop even if registration failed + gomega.Expect(err).To(gomega.Succeed()) + + ginkgo.By("initial state: capacity and allocatable are set") + gomega.Eventually(getNodeResourceValues, nodeStatusUpdateTimeout, f.Timeouts.Poll).WithContext(ctx).WithArguments(resourceName).Should(gomega.Equal(ResourceValue{Allocatable: 1, Capacity: 1})) + + // schedule a pod that requests the device + client := e2epod.NewPodClient(f) + pod := client.Create(ctx, createPod(resourceName, 1)) + + // wait for the pod to be running + gomega.Expect(e2epod.WaitForPodRunningInNamespace(ctx, f.ClientSet, pod)).To(gomega.Succeed()) + + expectedStatus := []v1.ResourceStatus{ + { + Name: v1.ResourceName(resourceName), + Resources: []v1.ResourceHealth{ + { + ResourceID: "testdevice", + Health: v1.ResourceHealthStatusHealthy, + }, + }, + }, + } + + gomega.Eventually(func() []v1.ResourceStatus { + pod, err = f.ClientSet.CoreV1().Pods(f.Namespace.Name).Get(ctx, pod.Name, metav1.GetOptions{}) + return pod.Status.ContainerStatuses[0].AllocatedResourcesStatus + }, devicePluginUpdateTimeout, f.Timeouts.Poll).Should(gomega.Equal(expectedStatus)) + + // now make the device unhealthy + devices[0].Health = kubeletdevicepluginv1beta1.Unhealthy + plugin.UpdateDevices(devices) + + expectedStatus[0].Resources[0] = v1.ResourceHealth{ + ResourceID: "testdevice", + Health: v1.ResourceHealthStatusUnhealthy, + } + + gomega.Eventually(func() []v1.ResourceStatus { + pod, err = f.ClientSet.CoreV1().Pods(f.Namespace.Name).Get(ctx, pod.Name, metav1.GetOptions{}) + return pod.Status.ContainerStatuses[0].AllocatedResourcesStatus + }, devicePluginUpdateTimeout, f.Timeouts.Poll).Should(gomega.Equal(expectedStatus)) + + // deleting the pod + err = f.ClientSet.CoreV1().Pods(f.Namespace.Name).Delete(ctx, pod.Name, metav1.DeleteOptions{}) + gomega.Expect(err).To(gomega.Succeed()) + + waitForContainerRemoval(ctx, pod.Spec.Containers[0].Name, pod.Name, pod.Namespace) + }) + + ginkgo.It("will report a Device Status for the failed pod in the pod status", func(ctx context.Context) { + // randomizing so tests can run in parallel + resourceName := fmt.Sprintf("test.device/%s", f.UniqueName) + devices := []kubeletdevicepluginv1beta1.Device{{ID: "testdevice", Health: kubeletdevicepluginv1beta1.Healthy}} + plugin := testdeviceplugin.NewDevicePlugin(nil) + + err := plugin.RegisterDevicePlugin(ctx, f.UniqueName, resourceName, devices) + defer plugin.Stop() // should stop even if registration failed + gomega.Expect(err).To(gomega.Succeed()) + + ginkgo.By("initial state: capacity and allocatable are set") + gomega.Eventually(getNodeResourceValues, nodeStatusUpdateTimeout, f.Timeouts.Poll).WithContext(ctx).WithArguments(resourceName).Should(gomega.Equal(ResourceValue{Allocatable: 1, Capacity: 1})) + + // schedule a pod that requests the device + client := e2epod.NewPodClient(f) + pod := client.Create(ctx, createPodWrongImage(resourceName, 1)) + + // wait for the pod to be running + gomega.Expect(e2epod.WaitForPodCondition(ctx, f.ClientSet, pod.Namespace, pod.Name, "Back-off pulling image", f.Timeouts.PodStartShort, + func(pod *v1.Pod) (bool, error) { + if pod.Status.Phase == v1.PodPending && + len(pod.Status.ContainerStatuses) > 0 && + pod.Status.ContainerStatuses[0].State.Waiting != nil && + pod.Status.ContainerStatuses[0].State.Waiting.Reason == "ImagePullBackOff" { + return true, nil + } + return false, nil + })).To(gomega.Succeed()) + + expectedStatus := []v1.ResourceStatus{ + { + Name: v1.ResourceName(resourceName), + Resources: []v1.ResourceHealth{ + { + ResourceID: "testdevice", + Health: v1.ResourceHealthStatusHealthy, + }, + }, + }, + } + + gomega.Eventually(func() []v1.ResourceStatus { + pod, err = f.ClientSet.CoreV1().Pods(f.Namespace.Name).Get(ctx, pod.Name, metav1.GetOptions{}) + return pod.Status.ContainerStatuses[0].AllocatedResourcesStatus + }, devicePluginUpdateTimeout, f.Timeouts.Poll).Should(gomega.Equal(expectedStatus)) + + // now make the device unhealthy + devices[0].Health = kubeletdevicepluginv1beta1.Unhealthy + plugin.UpdateDevices(devices) + + expectedStatus[0].Resources[0] = v1.ResourceHealth{ + ResourceID: "testdevice", + Health: "Unhealthy", + } + + gomega.Eventually(func() []v1.ResourceStatus { + pod, err = f.ClientSet.CoreV1().Pods(f.Namespace.Name).Get(ctx, pod.Name, metav1.GetOptions{}) + return pod.Status.ContainerStatuses[0].AllocatedResourcesStatus + }, devicePluginUpdateTimeout, f.Timeouts.Poll).Should(gomega.Equal(expectedStatus)) + + // deleting the pod + err = f.ClientSet.CoreV1().Pods(f.Namespace.Name).Delete(ctx, pod.Name, metav1.DeleteOptions{}) + gomega.Expect(err).To(gomega.Succeed()) + + waitForContainerRemoval(ctx, pod.Spec.Containers[0].Name, pod.Name, pod.Namespace) + }) +}) diff --git a/test/e2e_node/device_plugin_failures_test.go b/test/e2e_node/device_plugin_failures_test.go index 8c128653191..27f7b12232e 100644 --- a/test/e2e_node/device_plugin_failures_test.go +++ b/test/e2e_node/device_plugin_failures_test.go @@ -36,16 +36,15 @@ import ( "k8s.io/kubernetes/test/e2e_node/testdeviceplugin" ) -type ResourceValue struct { - Allocatable int - Capacity int -} - -// Serial because the test restarts Kubelet var _ = SIGDescribe("Device Plugin Failures:", framework.WithNodeConformance(), func() { f := framework.NewDefaultFramework("device-plugin-failures") f.NamespacePodSecurityLevel = admissionapi.LevelPrivileged + type ResourceValue struct { + Allocatable int + Capacity int + } + var getNodeResourceValues = func(ctx context.Context, resourceName string) ResourceValue { ginkgo.GinkgoHelper() node := getLocalNode(ctx, f)