diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json
index 12b06c97b75..30a5c28fb52 100644
--- a/api/openapi-spec/swagger.json
+++ b/api/openapi-spec/swagger.json
@@ -65753,6 +65753,37 @@
}
]
},
+ "io.k8s.api.core.v1.PersistentVolumeClaimCondition": {
+ "description": "PersistentVolumeClaimCondition contails details about state of pvc",
+ "required": [
+ "type",
+ "status"
+ ],
+ "properties": {
+ "lastProbeTime": {
+ "description": "Last time we probed the condition.",
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"
+ },
+ "lastTransitionTime": {
+ "description": "Last time the condition transitioned from one status to another.",
+ "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time"
+ },
+ "message": {
+ "description": "Human-readable message indicating details about last transition.",
+ "type": "string"
+ },
+ "reason": {
+ "description": "Unique, this should be a short, machine understandable string that gives the reason for condition's last transition. If it reports \"ResizeStarted\" that means the underlying persistent volume is being resized.",
+ "type": "string"
+ },
+ "status": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ }
+ }
+ },
"io.k8s.api.core.v1.PersistentVolumeClaimList": {
"description": "PersistentVolumeClaimList is a list of PersistentVolumeClaim items.",
"required": [
@@ -65832,6 +65863,15 @@
"$ref": "#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"
}
},
+ "conditions": {
+ "description": "Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'.",
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/io.k8s.api.core.v1.PersistentVolumeClaimCondition"
+ },
+ "x-kubernetes-patch-merge-key": "type",
+ "x-kubernetes-patch-strategy": "merge"
+ },
"phase": {
"description": "Phase represents the current phase of PersistentVolumeClaim.",
"type": "string"
@@ -70708,6 +70748,10 @@
"provisioner"
],
"properties": {
+ "allowVolumeExpansion": {
+ "description": "AllowVolumeExpansion shows whether the storage class allow volume expand",
+ "type": "boolean"
+ },
"apiVersion": {
"description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources",
"type": "string"
@@ -70791,6 +70835,10 @@
"provisioner"
],
"properties": {
+ "allowVolumeExpansion": {
+ "description": "AllowVolumeExpansion shows whether the storage class allow volume expand",
+ "type": "boolean"
+ },
"apiVersion": {
"description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources",
"type": "string"
diff --git a/api/swagger-spec/apps_v1beta1.json b/api/swagger-spec/apps_v1beta1.json
index a297274bbc9..79babd0ed58 100644
--- a/api/swagger-spec/apps_v1beta1.json
+++ b/api/swagger-spec/apps_v1beta1.json
@@ -6524,6 +6524,45 @@
"capacity": {
"type": "object",
"description": "Represents the actual resources of the underlying volume."
+ },
+ "conditions": {
+ "type": "array",
+ "items": {
+ "$ref": "v1.PersistentVolumeClaimCondition"
+ },
+ "description": "Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'."
+ }
+ }
+ },
+ "v1.PersistentVolumeClaimCondition": {
+ "id": "v1.PersistentVolumeClaimCondition",
+ "description": "PersistentVolumeClaimCondition contails details about state of pvc",
+ "required": [
+ "type",
+ "status"
+ ],
+ "properties": {
+ "type": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string"
+ },
+ "lastProbeTime": {
+ "type": "string",
+ "description": "Last time we probed the condition."
+ },
+ "lastTransitionTime": {
+ "type": "string",
+ "description": "Last time the condition transitioned from one status to another."
+ },
+ "reason": {
+ "type": "string",
+ "description": "Unique, this should be a short, machine understandable string that gives the reason for condition's last transition. If it reports \"ResizeStarted\" that means the underlying persistent volume is being resized."
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable message indicating details about last transition."
}
}
},
diff --git a/api/swagger-spec/apps_v1beta2.json b/api/swagger-spec/apps_v1beta2.json
index e2f5fc8e992..71f9178a4b9 100644
--- a/api/swagger-spec/apps_v1beta2.json
+++ b/api/swagger-spec/apps_v1beta2.json
@@ -9142,6 +9142,45 @@
"capacity": {
"type": "object",
"description": "Represents the actual resources of the underlying volume."
+ },
+ "conditions": {
+ "type": "array",
+ "items": {
+ "$ref": "v1.PersistentVolumeClaimCondition"
+ },
+ "description": "Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'."
+ }
+ }
+ },
+ "v1.PersistentVolumeClaimCondition": {
+ "id": "v1.PersistentVolumeClaimCondition",
+ "description": "PersistentVolumeClaimCondition contails details about state of pvc",
+ "required": [
+ "type",
+ "status"
+ ],
+ "properties": {
+ "type": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string"
+ },
+ "lastProbeTime": {
+ "type": "string",
+ "description": "Last time we probed the condition."
+ },
+ "lastTransitionTime": {
+ "type": "string",
+ "description": "Last time the condition transitioned from one status to another."
+ },
+ "reason": {
+ "type": "string",
+ "description": "Unique, this should be a short, machine understandable string that gives the reason for condition's last transition. If it reports \"ResizeStarted\" that means the underlying persistent volume is being resized."
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable message indicating details about last transition."
}
}
},
diff --git a/api/swagger-spec/storage.k8s.io_v1.json b/api/swagger-spec/storage.k8s.io_v1.json
index 6b2ba5e3ab7..e583a4892f4 100644
--- a/api/swagger-spec/storage.k8s.io_v1.json
+++ b/api/swagger-spec/storage.k8s.io_v1.json
@@ -795,6 +795,10 @@
"type": "string"
},
"description": "Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated - mount of the PVs will simply fail if one is invalid."
+ },
+ "allowVolumeExpansion": {
+ "type": "boolean",
+ "description": "AllowVolumeExpansion shows whether the storage class allow volume expand"
}
}
},
diff --git a/api/swagger-spec/storage.k8s.io_v1beta1.json b/api/swagger-spec/storage.k8s.io_v1beta1.json
index 86f8dcb1aee..b80206e4e5a 100644
--- a/api/swagger-spec/storage.k8s.io_v1beta1.json
+++ b/api/swagger-spec/storage.k8s.io_v1beta1.json
@@ -795,6 +795,10 @@
"type": "string"
},
"description": "Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated - mount of the PVs will simply fail if one is invalid."
+ },
+ "allowVolumeExpansion": {
+ "type": "boolean",
+ "description": "AllowVolumeExpansion shows whether the storage class allow volume expand"
}
}
},
diff --git a/api/swagger-spec/v1.json b/api/swagger-spec/v1.json
index a6636dad5ad..559ff273089 100644
--- a/api/swagger-spec/v1.json
+++ b/api/swagger-spec/v1.json
@@ -20099,6 +20099,45 @@
"capacity": {
"type": "object",
"description": "Represents the actual resources of the underlying volume."
+ },
+ "conditions": {
+ "type": "array",
+ "items": {
+ "$ref": "v1.PersistentVolumeClaimCondition"
+ },
+ "description": "Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'."
+ }
+ }
+ },
+ "v1.PersistentVolumeClaimCondition": {
+ "id": "v1.PersistentVolumeClaimCondition",
+ "description": "PersistentVolumeClaimCondition contails details about state of pvc",
+ "required": [
+ "type",
+ "status"
+ ],
+ "properties": {
+ "type": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string"
+ },
+ "lastProbeTime": {
+ "type": "string",
+ "description": "Last time we probed the condition."
+ },
+ "lastTransitionTime": {
+ "type": "string",
+ "description": "Last time the condition transitioned from one status to another."
+ },
+ "reason": {
+ "type": "string",
+ "description": "Unique, this should be a short, machine understandable string that gives the reason for condition's last transition. If it reports \"ResizeStarted\" that means the underlying persistent volume is being resized."
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable message indicating details about last transition."
}
}
},
diff --git a/cmd/kube-apiserver/app/options/BUILD b/cmd/kube-apiserver/app/options/BUILD
index 9a36fd5b360..f65e5b213d4 100644
--- a/cmd/kube-apiserver/app/options/BUILD
+++ b/cmd/kube-apiserver/app/options/BUILD
@@ -37,6 +37,7 @@ go_library(
"//plugin/pkg/admission/namespace/exists:go_default_library",
"//plugin/pkg/admission/noderestriction:go_default_library",
"//plugin/pkg/admission/persistentvolume/label:go_default_library",
+ "//plugin/pkg/admission/persistentvolume/resize:go_default_library",
"//plugin/pkg/admission/podnodeselector:go_default_library",
"//plugin/pkg/admission/podpreset:go_default_library",
"//plugin/pkg/admission/podtolerationrestriction:go_default_library",
diff --git a/cmd/kube-apiserver/app/options/plugins.go b/cmd/kube-apiserver/app/options/plugins.go
index 192fd275d38..1c71ac6b5c2 100644
--- a/cmd/kube-apiserver/app/options/plugins.go
+++ b/cmd/kube-apiserver/app/options/plugins.go
@@ -41,6 +41,7 @@ import (
"k8s.io/kubernetes/plugin/pkg/admission/namespace/exists"
"k8s.io/kubernetes/plugin/pkg/admission/noderestriction"
"k8s.io/kubernetes/plugin/pkg/admission/persistentvolume/label"
+ "k8s.io/kubernetes/plugin/pkg/admission/persistentvolume/resize"
"k8s.io/kubernetes/plugin/pkg/admission/podnodeselector"
"k8s.io/kubernetes/plugin/pkg/admission/podpreset"
"k8s.io/kubernetes/plugin/pkg/admission/podtolerationrestriction"
@@ -81,4 +82,5 @@ func RegisterAllAdmissionPlugins(plugins *admission.Plugins) {
serviceaccount.Register(plugins)
setdefault.Register(plugins)
webhook.Register(plugins)
+ resize.Register(plugins)
}
diff --git a/cmd/kube-controller-manager/app/BUILD b/cmd/kube-controller-manager/app/BUILD
index 683c45450c1..a9d8968191e 100644
--- a/cmd/kube-controller-manager/app/BUILD
+++ b/cmd/kube-controller-manager/app/BUILD
@@ -72,6 +72,7 @@ go_library(
"//pkg/controller/statefulset:go_default_library",
"//pkg/controller/ttl:go_default_library",
"//pkg/controller/volume/attachdetach:go_default_library",
+ "//pkg/controller/volume/expand:go_default_library",
"//pkg/controller/volume/persistentvolume:go_default_library",
"//pkg/features:go_default_library",
"//pkg/quota/install:go_default_library",
diff --git a/cmd/kube-controller-manager/app/controllermanager.go b/cmd/kube-controller-manager/app/controllermanager.go
index 0221f58ab98..ba781a9a6e4 100644
--- a/cmd/kube-controller-manager/app/controllermanager.go
+++ b/cmd/kube-controller-manager/app/controllermanager.go
@@ -357,6 +357,7 @@ func NewControllerInitializers() map[string]InitFunc {
controllers["route"] = startRouteController
controllers["persistentvolume-binder"] = startPersistentVolumeBinderController
controllers["attachdetach"] = startAttachDetachController
+ controllers["persistentvolume-expander"] = startVolumeExpandController
return controllers
}
diff --git a/cmd/kube-controller-manager/app/core.go b/cmd/kube-controller-manager/app/core.go
index 9b8be77460d..15443874360 100644
--- a/cmd/kube-controller-manager/app/core.go
+++ b/cmd/kube-controller-manager/app/core.go
@@ -51,6 +51,7 @@ import (
serviceaccountcontroller "k8s.io/kubernetes/pkg/controller/serviceaccount"
ttlcontroller "k8s.io/kubernetes/pkg/controller/ttl"
"k8s.io/kubernetes/pkg/controller/volume/attachdetach"
+ "k8s.io/kubernetes/pkg/controller/volume/expand"
persistentvolumecontroller "k8s.io/kubernetes/pkg/controller/volume/persistentvolume"
"k8s.io/kubernetes/pkg/features"
quotainstall "k8s.io/kubernetes/pkg/quota/install"
@@ -189,6 +190,24 @@ func startAttachDetachController(ctx ControllerContext) (bool, error) {
return true, nil
}
+func startVolumeExpandController(ctx ControllerContext) (bool, error) {
+ if utilfeature.DefaultFeatureGate.Enabled(features.ExpandPersistentVolumes) {
+ expandController, expandControllerErr := expand.NewExpandController(
+ ctx.ClientBuilder.ClientOrDie("expand-controller"),
+ ctx.InformerFactory.Core().V1().PersistentVolumeClaims(),
+ ctx.InformerFactory.Core().V1().PersistentVolumes(),
+ ctx.Cloud,
+ ProbeExpandableVolumePlugins(ctx.Options.VolumeConfiguration))
+
+ if expandControllerErr != nil {
+ return true, fmt.Errorf("Failed to start volume expand controller : %v", expandControllerErr)
+ }
+ go expandController.Run(ctx.Stop)
+ return true, nil
+ }
+ return false, nil
+}
+
func startEndpointController(ctx ControllerContext) (bool, error) {
go endpointcontroller.NewEndpointController(
ctx.InformerFactory.Core().V1().Pods(),
diff --git a/cmd/kube-controller-manager/app/plugins.go b/cmd/kube-controller-manager/app/plugins.go
index f26ab264cef..bf9c9fe1299 100644
--- a/cmd/kube-controller-manager/app/plugins.go
+++ b/cmd/kube-controller-manager/app/plugins.go
@@ -88,6 +88,25 @@ func GetDynamicPluginProber(config componentconfig.VolumeConfiguration) volume.D
return flexvolume.GetDynamicPluginProber(config.FlexVolumePluginDir)
}
+// ProbeExpandableVolumePlugins returns volume plugins which are expandable
+func ProbeExpandableVolumePlugins(config componentconfig.VolumeConfiguration) []volume.VolumePlugin {
+ allPlugins := []volume.VolumePlugin{}
+
+ allPlugins = append(allPlugins, aws_ebs.ProbeVolumePlugins()...)
+ allPlugins = append(allPlugins, gce_pd.ProbeVolumePlugins()...)
+ allPlugins = append(allPlugins, cinder.ProbeVolumePlugins()...)
+ allPlugins = append(allPlugins, portworx.ProbeVolumePlugins()...)
+ allPlugins = append(allPlugins, vsphere_volume.ProbeVolumePlugins()...)
+ allPlugins = append(allPlugins, glusterfs.ProbeVolumePlugins()...)
+ allPlugins = append(allPlugins, rbd.ProbeVolumePlugins()...)
+ allPlugins = append(allPlugins, azure_dd.ProbeVolumePlugins()...)
+ allPlugins = append(allPlugins, photon_pd.ProbeVolumePlugins()...)
+ allPlugins = append(allPlugins, scaleio.ProbeVolumePlugins()...)
+ allPlugins = append(allPlugins, storageos.ProbeVolumePlugins()...)
+ allPlugins = append(allPlugins, fc.ProbeVolumePlugins()...)
+ return allPlugins
+}
+
// ProbeControllerVolumePlugins collects all persistent volume plugins into an
// easy to use list. Only volume plugins that implement any of
// provisioner/recycler/deleter interface should be returned.
diff --git a/docs/api-reference/apps/v1beta1/definitions.html b/docs/api-reference/apps/v1beta1/definitions.html
index 2dafbff04de..ef36e5a6efd 100755
--- a/docs/api-reference/apps/v1beta1/definitions.html
+++ b/docs/api-reference/apps/v1beta1/definitions.html
@@ -2482,6 +2482,13 @@ When an object is created, the system will populate this list with the current s
object |
|
+
+conditions |
+Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to ResizeStarted. |
+false |
+v1.PersistentVolumeClaimCondition array |
+ |
+
@@ -2519,6 +2526,75 @@ When an object is created, the system will populate this list with the current s
+
+
+
v1.PersistentVolumeClaimCondition
+
+
PersistentVolumeClaimCondition contails details about state of pvc
+
+
+
+
+
+
+
+
+
+
+
+Name |
+Description |
+Required |
+Schema |
+Default |
+
+
+
+
+type |
+ |
+true |
+string |
+ |
+
+
+status |
+ |
+true |
+string |
+ |
+
+
+lastProbeTime |
+Last time we probed the condition. |
+false |
+string |
+ |
+
+
+lastTransitionTime |
+Last time the condition transitioned from one status to another. |
+false |
+string |
+ |
+
+
+reason |
+Unique, this should be a short, machine understandable string that gives the reason for condition’s last transition. If it reports "ResizeStarted" that means the underlying persistent volume is being resized. |
+false |
+string |
+ |
+
+
+message |
+Human-readable message indicating details about last transition. |
+false |
+string |
+ |
+
+
+
+
v1.SecretVolumeSource
diff --git a/docs/api-reference/apps/v1beta2/definitions.html b/docs/api-reference/apps/v1beta2/definitions.html
index 34a1ded7df1..3afb4401ecb 100755
--- a/docs/api-reference/apps/v1beta2/definitions.html
+++ b/docs/api-reference/apps/v1beta2/definitions.html
@@ -2808,6 +2808,13 @@ When an object is created, the system will populate this list with the current s
object |
|
+
+conditions |
+Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to ResizeStarted. |
+false |
+v1.PersistentVolumeClaimCondition array |
+ |
+
@@ -3094,6 +3101,75 @@ When an object is created, the system will populate this list with the current s
+
+
+
v1.PersistentVolumeClaimCondition
+
+
PersistentVolumeClaimCondition contails details about state of pvc
+
+
+
+
+
+
+
+
+
+
+
+Name |
+Description |
+Required |
+Schema |
+Default |
+
+
+
+
+type |
+ |
+true |
+string |
+ |
+
+
+status |
+ |
+true |
+string |
+ |
+
+
+lastProbeTime |
+Last time we probed the condition. |
+false |
+string |
+ |
+
+
+lastTransitionTime |
+Last time the condition transitioned from one status to another. |
+false |
+string |
+ |
+
+
+reason |
+Unique, this should be a short, machine understandable string that gives the reason for condition’s last transition. If it reports "ResizeStarted" that means the underlying persistent volume is being resized. |
+false |
+string |
+ |
+
+
+message |
+Human-readable message indicating details about last transition. |
+false |
+string |
+ |
+
+
+
+
v1.SecretVolumeSource
diff --git a/docs/api-reference/storage.k8s.io/v1/definitions.html b/docs/api-reference/storage.k8s.io/v1/definitions.html
index 88a2edf669a..3263c0ca075 100755
--- a/docs/api-reference/storage.k8s.io/v1/definitions.html
+++ b/docs/api-reference/storage.k8s.io/v1/definitions.html
@@ -989,6 +989,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
string array |
|
+
+allowVolumeExpansion |
+AllowVolumeExpansion shows whether the storage class allow volume expand |
+false |
+boolean |
+false |
+
diff --git a/docs/api-reference/storage.k8s.io/v1beta1/definitions.html b/docs/api-reference/storage.k8s.io/v1beta1/definitions.html
index fbeef75b905..0f64250074b 100755
--- a/docs/api-reference/storage.k8s.io/v1beta1/definitions.html
+++ b/docs/api-reference/storage.k8s.io/v1beta1/definitions.html
@@ -951,6 +951,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
string array |
|
+
+allowVolumeExpansion |
+AllowVolumeExpansion shows whether the storage class allow volume expand |
+false |
+boolean |
+false |
+
diff --git a/docs/api-reference/v1/definitions.html b/docs/api-reference/v1/definitions.html
index 0c0be691b89..db8f27a6c52 100755
--- a/docs/api-reference/v1/definitions.html
+++ b/docs/api-reference/v1/definitions.html
@@ -1632,6 +1632,54 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
+
+
+
v1.GitRepoVolumeSource
+
+
Represents a volume that is populated with the contents of a git repository. Git repo volumes do not support ownership management. Git repo volumes support SELinux relabeling.
+
+
+
+
+
+
+
+
+
+
+
+Name |
+Description |
+Required |
+Schema |
+Default |
+
+
+
+
+repository |
+Repository URL |
+true |
+string |
+ |
+
+
+revision |
+Commit hash for the specified revision. |
+false |
+string |
+ |
+
+
+directory |
+Target directory name. Must not contain or start with ... If . is supplied, the volume directory will be the git repository. Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name. |
+false |
+string |
+ |
+
+
+
+
v1.EndpointsList
@@ -1687,54 +1735,6 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
-
-
-
v1.GitRepoVolumeSource
-
-
Represents a volume that is populated with the contents of a git repository. Git repo volumes do not support ownership management. Git repo volumes support SELinux relabeling.
-
-
-
-
-
-
-
-
-
-
-
-Name |
-Description |
-Required |
-Schema |
-Default |
-
-
-
-
-repository |
-Repository URL |
-true |
-string |
- |
-
-
-revision |
-Commit hash for the specified revision. |
-false |
-string |
- |
-
-
-directory |
-Target directory name. Must not contain or start with ... If . is supplied, the volume directory will be the git repository. Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name. |
-false |
-string |
- |
-
-
-
-
v1.ReplicationControllerCondition
@@ -3582,6 +3582,13 @@ When an object is created, the system will populate this list with the current s
object |
|
+
+conditions |
+Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to ResizeStarted. |
+false |
+v1.PersistentVolumeClaimCondition array |
+ |
+
@@ -3644,6 +3651,75 @@ The resulting set of endpoints can be viewed as:
+
+
+
v1.PersistentVolumeClaimCondition
+
+
PersistentVolumeClaimCondition contails details about state of pvc
+
+
+
+
+
+
+
+
+
+
+
+Name |
+Description |
+Required |
+Schema |
+Default |
+
+
+
+
+type |
+ |
+true |
+string |
+ |
+
+
+status |
+ |
+true |
+string |
+ |
+
+
+lastProbeTime |
+Last time we probed the condition. |
+false |
+string |
+ |
+
+
+lastTransitionTime |
+Last time the condition transitioned from one status to another. |
+false |
+string |
+ |
+
+
+reason |
+Unique, this should be a short, machine understandable string that gives the reason for condition’s last transition. If it reports "ResizeStarted" that means the underlying persistent volume is being resized. |
+false |
+string |
+ |
+
+
+message |
+Human-readable message indicating details about last transition. |
+false |
+string |
+ |
+
+
+
+
v1.SecretVolumeSource
diff --git a/hack/.golint_failures b/hack/.golint_failures
index d73c3779a5b..4f5a61cac89 100644
--- a/hack/.golint_failures
+++ b/hack/.golint_failures
@@ -190,6 +190,7 @@ pkg/controller/volume/attachdetach
pkg/controller/volume/attachdetach/statusupdater
pkg/controller/volume/attachdetach/testing
pkg/controller/volume/events
+pkg/controller/volume/expand
pkg/controller/volume/persistentvolume
pkg/controller/volume/persistentvolume/options
pkg/credentialprovider
diff --git a/pkg/api/types.go b/pkg/api/types.go
index 69d9f42c9c4..089b20aa8d0 100644
--- a/pkg/api/types.go
+++ b/pkg/api/types.go
@@ -547,6 +547,27 @@ type PersistentVolumeClaimSpec struct {
StorageClassName *string
}
+type PersistentVolumeClaimConditionType string
+
+// These are valid conditions of Pvc
+const (
+ // An user trigger resize of pvc has been started
+ PersistentVolumeClaimResizing PersistentVolumeClaimConditionType = "Resizing"
+)
+
+type PersistentVolumeClaimCondition struct {
+ Type PersistentVolumeClaimConditionType
+ Status ConditionStatus
+ // +optional
+ LastProbeTime metav1.Time
+ // +optional
+ LastTransitionTime metav1.Time
+ // +optional
+ Reason string
+ // +optional
+ Message string
+}
+
type PersistentVolumeClaimStatus struct {
// Phase represents the current phase of PersistentVolumeClaim
// +optional
@@ -557,6 +578,8 @@ type PersistentVolumeClaimStatus struct {
// Represents the actual resources of the underlying volume
// +optional
Capacity ResourceList
+ // +optional
+ Conditions []PersistentVolumeClaimCondition
}
type PersistentVolumeAccessMode string
diff --git a/pkg/api/v1/zz_generated.conversion.go b/pkg/api/v1/zz_generated.conversion.go
index 24216c3dd52..716ca05ed77 100644
--- a/pkg/api/v1/zz_generated.conversion.go
+++ b/pkg/api/v1/zz_generated.conversion.go
@@ -233,6 +233,8 @@ func RegisterConversions(scheme *runtime.Scheme) error {
Convert_api_PersistentVolume_To_v1_PersistentVolume,
Convert_v1_PersistentVolumeClaim_To_api_PersistentVolumeClaim,
Convert_api_PersistentVolumeClaim_To_v1_PersistentVolumeClaim,
+ Convert_v1_PersistentVolumeClaimCondition_To_api_PersistentVolumeClaimCondition,
+ Convert_api_PersistentVolumeClaimCondition_To_v1_PersistentVolumeClaimCondition,
Convert_v1_PersistentVolumeClaimList_To_api_PersistentVolumeClaimList,
Convert_api_PersistentVolumeClaimList_To_v1_PersistentVolumeClaimList,
Convert_v1_PersistentVolumeClaimSpec_To_api_PersistentVolumeClaimSpec,
@@ -2942,6 +2944,36 @@ func Convert_api_PersistentVolumeClaim_To_v1_PersistentVolumeClaim(in *api.Persi
return autoConvert_api_PersistentVolumeClaim_To_v1_PersistentVolumeClaim(in, out, s)
}
+func autoConvert_v1_PersistentVolumeClaimCondition_To_api_PersistentVolumeClaimCondition(in *v1.PersistentVolumeClaimCondition, out *api.PersistentVolumeClaimCondition, s conversion.Scope) error {
+ out.Type = api.PersistentVolumeClaimConditionType(in.Type)
+ out.Status = api.ConditionStatus(in.Status)
+ out.LastProbeTime = in.LastProbeTime
+ out.LastTransitionTime = in.LastTransitionTime
+ out.Reason = in.Reason
+ out.Message = in.Message
+ return nil
+}
+
+// Convert_v1_PersistentVolumeClaimCondition_To_api_PersistentVolumeClaimCondition is an autogenerated conversion function.
+func Convert_v1_PersistentVolumeClaimCondition_To_api_PersistentVolumeClaimCondition(in *v1.PersistentVolumeClaimCondition, out *api.PersistentVolumeClaimCondition, s conversion.Scope) error {
+ return autoConvert_v1_PersistentVolumeClaimCondition_To_api_PersistentVolumeClaimCondition(in, out, s)
+}
+
+func autoConvert_api_PersistentVolumeClaimCondition_To_v1_PersistentVolumeClaimCondition(in *api.PersistentVolumeClaimCondition, out *v1.PersistentVolumeClaimCondition, s conversion.Scope) error {
+ out.Type = v1.PersistentVolumeClaimConditionType(in.Type)
+ out.Status = v1.ConditionStatus(in.Status)
+ out.LastProbeTime = in.LastProbeTime
+ out.LastTransitionTime = in.LastTransitionTime
+ out.Reason = in.Reason
+ out.Message = in.Message
+ return nil
+}
+
+// Convert_api_PersistentVolumeClaimCondition_To_v1_PersistentVolumeClaimCondition is an autogenerated conversion function.
+func Convert_api_PersistentVolumeClaimCondition_To_v1_PersistentVolumeClaimCondition(in *api.PersistentVolumeClaimCondition, out *v1.PersistentVolumeClaimCondition, s conversion.Scope) error {
+ return autoConvert_api_PersistentVolumeClaimCondition_To_v1_PersistentVolumeClaimCondition(in, out, s)
+}
+
func autoConvert_v1_PersistentVolumeClaimList_To_api_PersistentVolumeClaimList(in *v1.PersistentVolumeClaimList, out *api.PersistentVolumeClaimList, s conversion.Scope) error {
out.ListMeta = in.ListMeta
out.Items = *(*[]api.PersistentVolumeClaim)(unsafe.Pointer(&in.Items))
@@ -3000,6 +3032,7 @@ func autoConvert_v1_PersistentVolumeClaimStatus_To_api_PersistentVolumeClaimStat
out.Phase = api.PersistentVolumeClaimPhase(in.Phase)
out.AccessModes = *(*[]api.PersistentVolumeAccessMode)(unsafe.Pointer(&in.AccessModes))
out.Capacity = *(*api.ResourceList)(unsafe.Pointer(&in.Capacity))
+ out.Conditions = *(*[]api.PersistentVolumeClaimCondition)(unsafe.Pointer(&in.Conditions))
return nil
}
@@ -3012,6 +3045,7 @@ func autoConvert_api_PersistentVolumeClaimStatus_To_v1_PersistentVolumeClaimStat
out.Phase = v1.PersistentVolumeClaimPhase(in.Phase)
out.AccessModes = *(*[]v1.PersistentVolumeAccessMode)(unsafe.Pointer(&in.AccessModes))
out.Capacity = *(*v1.ResourceList)(unsafe.Pointer(&in.Capacity))
+ out.Conditions = *(*[]v1.PersistentVolumeClaimCondition)(unsafe.Pointer(&in.Conditions))
return nil
}
diff --git a/pkg/api/validation/validation.go b/pkg/api/validation/validation.go
index f52e55405ba..c484f124431 100644
--- a/pkg/api/validation/validation.go
+++ b/pkg/api/validation/validation.go
@@ -1588,10 +1588,31 @@ func ValidatePersistentVolumeClaimUpdate(newPvc, oldPvc *api.PersistentVolumeCla
oldPvc.Spec.VolumeName = newPvc.Spec.VolumeName
defer func() { oldPvc.Spec.VolumeName = "" }()
}
- // changes to Spec are not allowed, but updates to label/and some annotations are OK.
- // no-op updates pass validation.
- if !apiequality.Semantic.DeepEqual(newPvc.Spec, oldPvc.Spec) {
- allErrs = append(allErrs, field.Forbidden(field.NewPath("spec"), "field is immutable after creation"))
+
+ if utilfeature.DefaultFeatureGate.Enabled(features.ExpandPersistentVolumes) {
+ newPVCSpecCopy := newPvc.Spec.DeepCopy()
+
+ // lets make sure storage values are same.
+ if newPvc.Status.Phase == api.ClaimBound && newPVCSpecCopy.Resources.Requests != nil {
+ newPVCSpecCopy.Resources.Requests["storage"] = oldPvc.Spec.Resources.Requests["storage"]
+ }
+
+ oldSize := oldPvc.Spec.Resources.Requests["storage"]
+ newSize := newPvc.Spec.Resources.Requests["storage"]
+
+ if !apiequality.Semantic.DeepEqual(*newPVCSpecCopy, oldPvc.Spec) {
+ allErrs = append(allErrs, field.Forbidden(field.NewPath("spec"), "is immutable after creation except resources.requests for bound claims"))
+ }
+ if newSize.Cmp(oldSize) < 0 {
+ allErrs = append(allErrs, field.Forbidden(field.NewPath("spec", "resources", "requests", "storage"), "field can not be less than previous value"))
+ }
+
+ } else {
+ // changes to Spec are not allowed, but updates to label/and some annotations are OK.
+ // no-op updates pass validation.
+ if !apiequality.Semantic.DeepEqual(newPvc.Spec, oldPvc.Spec) {
+ allErrs = append(allErrs, field.Forbidden(field.NewPath("spec"), "field is immutable after creation"))
+ }
}
// storageclass annotation should be immutable after creation
@@ -1611,6 +1632,10 @@ func ValidatePersistentVolumeClaimStatusUpdate(newPvc, oldPvc *api.PersistentVol
if len(newPvc.Spec.AccessModes) == 0 {
allErrs = append(allErrs, field.Required(field.NewPath("Spec", "accessModes"), ""))
}
+ if !utilfeature.DefaultFeatureGate.Enabled(features.ExpandPersistentVolumes) && len(newPvc.Status.Conditions) > 0 {
+ conditionPath := field.NewPath("status", "conditions")
+ allErrs = append(allErrs, field.Forbidden(conditionPath, "invalid field"))
+ }
capPath := field.NewPath("status", "capacity")
for r, qty := range newPvc.Status.Capacity {
allErrs = append(allErrs, validateBasicResource(qty, capPath.Key(string(r)))...)
diff --git a/pkg/api/validation/validation_test.go b/pkg/api/validation/validation_test.go
index 065af85d543..26b5aa061e5 100644
--- a/pkg/api/validation/validation_test.go
+++ b/pkg/api/validation/validation_test.go
@@ -530,6 +530,17 @@ func testVolumeClaim(name string, namespace string, spec api.PersistentVolumeCla
}
}
+func testVolumeClaimWithStatus(
+ name, namespace string,
+ spec api.PersistentVolumeClaimSpec,
+ status api.PersistentVolumeClaimStatus) *api.PersistentVolumeClaim {
+ return &api.PersistentVolumeClaim{
+ ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: namespace},
+ Spec: spec,
+ Status: status,
+ }
+}
+
func testVolumeClaimStorageClass(name string, namespace string, annval string, spec api.PersistentVolumeClaimSpec) *api.PersistentVolumeClaim {
annotations := map[string]string{
v1.BetaStorageClassAnnotation: annval,
@@ -728,7 +739,7 @@ func TestValidatePersistentVolumeClaim(t *testing.T) {
}
func TestValidatePersistentVolumeClaimUpdate(t *testing.T) {
- validClaim := testVolumeClaim("foo", "ns", api.PersistentVolumeClaimSpec{
+ validClaim := testVolumeClaimWithStatus("foo", "ns", api.PersistentVolumeClaimSpec{
AccessModes: []api.PersistentVolumeAccessMode{
api.ReadWriteOnce,
api.ReadOnlyMany,
@@ -738,7 +749,10 @@ func TestValidatePersistentVolumeClaimUpdate(t *testing.T) {
api.ResourceName(api.ResourceStorage): resource.MustParse("10G"),
},
},
+ }, api.PersistentVolumeClaimStatus{
+ Phase: api.ClaimBound,
})
+
validClaimStorageClass := testVolumeClaimStorageClass("foo", "ns", "fast", api.PersistentVolumeClaimSpec{
AccessModes: []api.PersistentVolumeAccessMode{
api.ReadOnlyMany,
@@ -828,50 +842,125 @@ func TestValidatePersistentVolumeClaimUpdate(t *testing.T) {
},
VolumeName: "volume",
})
+ validSizeUpdate := testVolumeClaimWithStatus("foo", "ns", api.PersistentVolumeClaimSpec{
+ AccessModes: []api.PersistentVolumeAccessMode{
+ api.ReadWriteOnce,
+ api.ReadOnlyMany,
+ },
+ Resources: api.ResourceRequirements{
+ Requests: api.ResourceList{
+ api.ResourceName(api.ResourceStorage): resource.MustParse("15G"),
+ },
+ },
+ }, api.PersistentVolumeClaimStatus{
+ Phase: api.ClaimBound,
+ })
+
+ invalidSizeUpdate := testVolumeClaimWithStatus("foo", "ns", api.PersistentVolumeClaimSpec{
+ AccessModes: []api.PersistentVolumeAccessMode{
+ api.ReadWriteOnce,
+ api.ReadOnlyMany,
+ },
+ Resources: api.ResourceRequirements{
+ Requests: api.ResourceList{
+ api.ResourceName(api.ResourceStorage): resource.MustParse("5G"),
+ },
+ },
+ }, api.PersistentVolumeClaimStatus{
+ Phase: api.ClaimBound,
+ })
+
+ unboundSizeUpdate := testVolumeClaimWithStatus("foo", "ns", api.PersistentVolumeClaimSpec{
+ AccessModes: []api.PersistentVolumeAccessMode{
+ api.ReadWriteOnce,
+ api.ReadOnlyMany,
+ },
+ Resources: api.ResourceRequirements{
+ Requests: api.ResourceList{
+ api.ResourceName(api.ResourceStorage): resource.MustParse("12G"),
+ },
+ },
+ }, api.PersistentVolumeClaimStatus{
+ Phase: api.ClaimPending,
+ })
+
scenarios := map[string]struct {
isExpectedFailure bool
oldClaim *api.PersistentVolumeClaim
newClaim *api.PersistentVolumeClaim
+ enableResize bool
}{
"valid-update-volumeName-only": {
isExpectedFailure: false,
oldClaim: validClaim,
newClaim: validUpdateClaim,
+ enableResize: false,
},
"valid-no-op-update": {
isExpectedFailure: false,
oldClaim: validUpdateClaim,
newClaim: validUpdateClaim,
+ enableResize: false,
},
"invalid-update-change-resources-on-bound-claim": {
isExpectedFailure: true,
oldClaim: validUpdateClaim,
newClaim: invalidUpdateClaimResources,
+ enableResize: false,
},
"invalid-update-change-access-modes-on-bound-claim": {
isExpectedFailure: true,
oldClaim: validUpdateClaim,
newClaim: invalidUpdateClaimAccessModes,
+ enableResize: false,
},
"invalid-update-change-storage-class-annotation-after-creation": {
isExpectedFailure: true,
oldClaim: validClaimStorageClass,
newClaim: invalidUpdateClaimStorageClass,
+ enableResize: false,
},
"valid-update-mutable-annotation": {
isExpectedFailure: false,
oldClaim: validClaimAnnotation,
newClaim: validUpdateClaimMutableAnnotation,
+ enableResize: false,
},
"valid-update-add-annotation": {
isExpectedFailure: false,
oldClaim: validClaim,
newClaim: validAddClaimAnnotation,
+ enableResize: false,
+ },
+ "valid-size-update-resize-disabled": {
+ isExpectedFailure: true,
+ oldClaim: validClaim,
+ newClaim: validSizeUpdate,
+ enableResize: false,
+ },
+ "valid-size-update-resize-enabled": {
+ isExpectedFailure: false,
+ oldClaim: validClaim,
+ newClaim: validSizeUpdate,
+ enableResize: true,
+ },
+ "invalid-size-update-resize-enabled": {
+ isExpectedFailure: true,
+ oldClaim: validClaim,
+ newClaim: invalidSizeUpdate,
+ enableResize: true,
+ },
+ "unbound-size-update-resize-enabled": {
+ isExpectedFailure: true,
+ oldClaim: validClaim,
+ newClaim: unboundSizeUpdate,
+ enableResize: true,
},
}
for name, scenario := range scenarios {
// ensure we have a resource version specified for updates
+ togglePVExpandFeature(scenario.enableResize, t)
scenario.oldClaim.ResourceVersion = "1"
scenario.newClaim.ResourceVersion = "1"
errs := ValidatePersistentVolumeClaimUpdate(scenario.newClaim, scenario.oldClaim)
@@ -884,6 +973,23 @@ func TestValidatePersistentVolumeClaimUpdate(t *testing.T) {
}
}
+func togglePVExpandFeature(toggleFlag bool, t *testing.T) {
+ if toggleFlag {
+ // Enable alpha feature LocalStorageCapacityIsolation
+ err := utilfeature.DefaultFeatureGate.Set("ExpandPersistentVolumes=true")
+ if err != nil {
+ t.Errorf("Failed to enable feature gate for ExpandPersistentVolumes: %v", err)
+ return
+ }
+ } else {
+ err := utilfeature.DefaultFeatureGate.Set("ExpandPersistentVolumes=false")
+ if err != nil {
+ t.Errorf("Failed to disable feature gate for ExpandPersistentVolumes: %v", err)
+ return
+ }
+ }
+}
+
func TestValidateKeyToPath(t *testing.T) {
testCases := []struct {
kp api.KeyToPath
@@ -9232,6 +9338,68 @@ func TestValidateLimitRange(t *testing.T) {
}
+func TestValidatePersistentVolumeClaimStatusUpdate(t *testing.T) {
+ validClaim := testVolumeClaim("foo", "ns", api.PersistentVolumeClaimSpec{
+ AccessModes: []api.PersistentVolumeAccessMode{
+ api.ReadWriteOnce,
+ api.ReadOnlyMany,
+ },
+ Resources: api.ResourceRequirements{
+ Requests: api.ResourceList{
+ api.ResourceName(api.ResourceStorage): resource.MustParse("10G"),
+ },
+ },
+ })
+ validConditionUpdate := testVolumeClaimWithStatus("foo", "ns", api.PersistentVolumeClaimSpec{
+ AccessModes: []api.PersistentVolumeAccessMode{
+ api.ReadWriteOnce,
+ api.ReadOnlyMany,
+ },
+ Resources: api.ResourceRequirements{
+ Requests: api.ResourceList{
+ api.ResourceName(api.ResourceStorage): resource.MustParse("10G"),
+ },
+ },
+ }, api.PersistentVolumeClaimStatus{
+ Phase: api.ClaimPending,
+ Conditions: []api.PersistentVolumeClaimCondition{
+ {Type: api.PersistentVolumeClaimResizing, Status: api.ConditionTrue},
+ },
+ })
+ scenarios := map[string]struct {
+ isExpectedFailure bool
+ oldClaim *api.PersistentVolumeClaim
+ newClaim *api.PersistentVolumeClaim
+ enableResize bool
+ }{
+ "condition-update-with-disabled-feature-gate": {
+ isExpectedFailure: true,
+ oldClaim: validClaim,
+ newClaim: validConditionUpdate,
+ enableResize: false,
+ },
+ "condition-update-with-enabled-feature-gate": {
+ isExpectedFailure: false,
+ oldClaim: validClaim,
+ newClaim: validConditionUpdate,
+ enableResize: true,
+ },
+ }
+ for name, scenario := range scenarios {
+ // ensure we have a resource version specified for updates
+ togglePVExpandFeature(scenario.enableResize, t)
+ scenario.oldClaim.ResourceVersion = "1"
+ scenario.newClaim.ResourceVersion = "1"
+ errs := ValidatePersistentVolumeClaimStatusUpdate(scenario.newClaim, scenario.oldClaim)
+ if len(errs) == 0 && scenario.isExpectedFailure {
+ t.Errorf("Unexpected success for scenario: %s", name)
+ }
+ if len(errs) > 0 && !scenario.isExpectedFailure {
+ t.Errorf("Unexpected failure for scenario: %s - %+v", name, errs)
+ }
+ }
+}
+
func TestValidateResourceQuota(t *testing.T) {
spec := api.ResourceQuotaSpec{
Hard: api.ResourceList{
diff --git a/pkg/api/zz_generated.deepcopy.go b/pkg/api/zz_generated.deepcopy.go
index d9ab39d3354..938b7316a05 100644
--- a/pkg/api/zz_generated.deepcopy.go
+++ b/pkg/api/zz_generated.deepcopy.go
@@ -427,6 +427,10 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error {
in.(*PersistentVolumeClaim).DeepCopyInto(out.(*PersistentVolumeClaim))
return nil
}, InType: reflect.TypeOf(&PersistentVolumeClaim{})},
+ conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error {
+ in.(*PersistentVolumeClaimCondition).DeepCopyInto(out.(*PersistentVolumeClaimCondition))
+ return nil
+ }, InType: reflect.TypeOf(&PersistentVolumeClaimCondition{})},
conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error {
in.(*PersistentVolumeClaimList).DeepCopyInto(out.(*PersistentVolumeClaimList))
return nil
@@ -3513,6 +3517,24 @@ func (in *PersistentVolumeClaim) DeepCopyObject() runtime.Object {
}
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *PersistentVolumeClaimCondition) DeepCopyInto(out *PersistentVolumeClaimCondition) {
+ *out = *in
+ in.LastProbeTime.DeepCopyInto(&out.LastProbeTime)
+ in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime)
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PersistentVolumeClaimCondition.
+func (in *PersistentVolumeClaimCondition) DeepCopy() *PersistentVolumeClaimCondition {
+ if in == nil {
+ return nil
+ }
+ out := new(PersistentVolumeClaimCondition)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PersistentVolumeClaimList) DeepCopyInto(out *PersistentVolumeClaimList) {
*out = *in
@@ -3602,6 +3624,13 @@ func (in *PersistentVolumeClaimStatus) DeepCopyInto(out *PersistentVolumeClaimSt
(*out)[key] = val.DeepCopy()
}
}
+ if in.Conditions != nil {
+ in, out := &in.Conditions, &out.Conditions
+ *out = make([]PersistentVolumeClaimCondition, len(*in))
+ for i := range *in {
+ (*in)[i].DeepCopyInto(&(*out)[i])
+ }
+ }
return
}
diff --git a/pkg/apis/storage/types.go b/pkg/apis/storage/types.go
index 2a45e3557d1..1af94b2d745 100644
--- a/pkg/apis/storage/types.go
+++ b/pkg/apis/storage/types.go
@@ -59,6 +59,12 @@ type StorageClass struct {
// PersistentVolumes of this storage class are created with
// +optional
MountOptions []string
+
+ // AllowVolumeExpansion shows whether the storage class allow volume expand
+ // If the field is nil or not set, it would amount to expansion disabled
+ // for all PVs created from this storageclass.
+ // +optional
+ AllowVolumeExpansion *bool
}
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
diff --git a/pkg/apis/storage/v1/zz_generated.conversion.go b/pkg/apis/storage/v1/zz_generated.conversion.go
index d7d8f95860b..59594d26519 100644
--- a/pkg/apis/storage/v1/zz_generated.conversion.go
+++ b/pkg/apis/storage/v1/zz_generated.conversion.go
@@ -51,6 +51,7 @@ func autoConvert_v1_StorageClass_To_storage_StorageClass(in *v1.StorageClass, ou
out.Parameters = *(*map[string]string)(unsafe.Pointer(&in.Parameters))
out.ReclaimPolicy = (*api.PersistentVolumeReclaimPolicy)(unsafe.Pointer(in.ReclaimPolicy))
out.MountOptions = *(*[]string)(unsafe.Pointer(&in.MountOptions))
+ out.AllowVolumeExpansion = (*bool)(unsafe.Pointer(in.AllowVolumeExpansion))
return nil
}
@@ -65,6 +66,7 @@ func autoConvert_storage_StorageClass_To_v1_StorageClass(in *storage.StorageClas
out.Parameters = *(*map[string]string)(unsafe.Pointer(&in.Parameters))
out.ReclaimPolicy = (*core_v1.PersistentVolumeReclaimPolicy)(unsafe.Pointer(in.ReclaimPolicy))
out.MountOptions = *(*[]string)(unsafe.Pointer(&in.MountOptions))
+ out.AllowVolumeExpansion = (*bool)(unsafe.Pointer(in.AllowVolumeExpansion))
return nil
}
diff --git a/pkg/apis/storage/v1beta1/zz_generated.conversion.go b/pkg/apis/storage/v1beta1/zz_generated.conversion.go
index 4477999da79..d340530abbc 100644
--- a/pkg/apis/storage/v1beta1/zz_generated.conversion.go
+++ b/pkg/apis/storage/v1beta1/zz_generated.conversion.go
@@ -51,6 +51,7 @@ func autoConvert_v1beta1_StorageClass_To_storage_StorageClass(in *v1beta1.Storag
out.Parameters = *(*map[string]string)(unsafe.Pointer(&in.Parameters))
out.ReclaimPolicy = (*api.PersistentVolumeReclaimPolicy)(unsafe.Pointer(in.ReclaimPolicy))
out.MountOptions = *(*[]string)(unsafe.Pointer(&in.MountOptions))
+ out.AllowVolumeExpansion = (*bool)(unsafe.Pointer(in.AllowVolumeExpansion))
return nil
}
@@ -65,6 +66,7 @@ func autoConvert_storage_StorageClass_To_v1beta1_StorageClass(in *storage.Storag
out.Parameters = *(*map[string]string)(unsafe.Pointer(&in.Parameters))
out.ReclaimPolicy = (*v1.PersistentVolumeReclaimPolicy)(unsafe.Pointer(in.ReclaimPolicy))
out.MountOptions = *(*[]string)(unsafe.Pointer(&in.MountOptions))
+ out.AllowVolumeExpansion = (*bool)(unsafe.Pointer(in.AllowVolumeExpansion))
return nil
}
diff --git a/pkg/apis/storage/validation/BUILD b/pkg/apis/storage/validation/BUILD
index 2ce7952d201..cdb70b259ad 100644
--- a/pkg/apis/storage/validation/BUILD
+++ b/pkg/apis/storage/validation/BUILD
@@ -13,9 +13,11 @@ go_library(
"//pkg/api:go_default_library",
"//pkg/api/validation:go_default_library",
"//pkg/apis/storage:go_default_library",
+ "//pkg/features:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/util/validation:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/util/validation/field:go_default_library",
+ "//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library",
],
)
@@ -27,6 +29,7 @@ go_test(
"//pkg/api:go_default_library",
"//pkg/apis/storage:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
+ "//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library",
],
)
diff --git a/pkg/apis/storage/validation/validation.go b/pkg/apis/storage/validation/validation.go
index 84dc042faec..38b7915167e 100644
--- a/pkg/apis/storage/validation/validation.go
+++ b/pkg/apis/storage/validation/validation.go
@@ -23,9 +23,11 @@ import (
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/validation"
"k8s.io/apimachinery/pkg/util/validation/field"
+ utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/kubernetes/pkg/api"
apivalidation "k8s.io/kubernetes/pkg/api/validation"
"k8s.io/kubernetes/pkg/apis/storage"
+ "k8s.io/kubernetes/pkg/features"
)
// ValidateStorageClass validates a StorageClass.
@@ -34,6 +36,7 @@ func ValidateStorageClass(storageClass *storage.StorageClass) field.ErrorList {
allErrs = append(allErrs, validateProvisioner(storageClass.Provisioner, field.NewPath("provisioner"))...)
allErrs = append(allErrs, validateParameters(storageClass.Parameters, field.NewPath("parameters"))...)
allErrs = append(allErrs, validateReclaimPolicy(storageClass.ReclaimPolicy, field.NewPath("reclaimPolicy"))...)
+ allErrs = append(allErrs, validateAllowVolumeExpansion(storageClass.AllowVolumeExpansion, field.NewPath("allowVolumeExpansion"))...)
return allErrs
}
@@ -108,3 +111,13 @@ func validateReclaimPolicy(reclaimPolicy *api.PersistentVolumeReclaimPolicy, fld
}
return allErrs
}
+
+// validateAllowVolumeExpansion tests that if ExpandPersistentVolumes feature gate is disabled, whether the AllowVolumeExpansion filed
+// of storage class is set
+func validateAllowVolumeExpansion(allowExpand *bool, fldPath *field.Path) field.ErrorList {
+ allErrs := field.ErrorList{}
+ if allowExpand != nil && !utilfeature.DefaultFeatureGate.Enabled(features.ExpandPersistentVolumes) {
+ allErrs = append(allErrs, field.Forbidden(fldPath, "field is disabled by feature-gate ExpandPersistentVolumes"))
+ }
+ return allErrs
+}
diff --git a/pkg/apis/storage/validation/validation_test.go b/pkg/apis/storage/validation/validation_test.go
index 07b020b52eb..8e8e9f499a2 100644
--- a/pkg/apis/storage/validation/validation_test.go
+++ b/pkg/apis/storage/validation/validation_test.go
@@ -21,6 +21,7 @@ import (
"testing"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/apis/storage"
)
@@ -123,3 +124,36 @@ func TestValidateStorageClass(t *testing.T) {
}
}
}
+
+func TestAlphaExpandPersistentVolumesFeatureValidation(t *testing.T) {
+ deleteReclaimPolicy := api.PersistentVolumeReclaimPolicy("Delete")
+ falseVar := false
+ testSC := &storage.StorageClass{
+ // empty parameters
+ ObjectMeta: metav1.ObjectMeta{Name: "foo"},
+ Provisioner: "kubernetes.io/foo-provisioner",
+ Parameters: map[string]string{},
+ ReclaimPolicy: &deleteReclaimPolicy,
+ AllowVolumeExpansion: &falseVar,
+ }
+
+ // Enable alpha feature ExpandPersistentVolumes
+ err := utilfeature.DefaultFeatureGate.Set("ExpandPersistentVolumes=true")
+ if err != nil {
+ t.Errorf("Failed to enable feature gate for ExpandPersistentVolumes: %v", err)
+ return
+ }
+ if errs := ValidateStorageClass(testSC); len(errs) != 0 {
+ t.Errorf("expected success: %v", errs)
+ }
+ // Disable alpha feature ExpandPersistentVolumes
+ err = utilfeature.DefaultFeatureGate.Set("ExpandPersistentVolumes=false")
+ if err != nil {
+ t.Errorf("Failed to disable feature gate for ExpandPersistentVolumes: %v", err)
+ return
+ }
+ if errs := ValidateStorageClass(testSC); len(errs) == 0 {
+ t.Errorf("expected failure, but got no error")
+ }
+
+}
diff --git a/pkg/apis/storage/zz_generated.deepcopy.go b/pkg/apis/storage/zz_generated.deepcopy.go
index e95da89445a..b6564ce03ad 100644
--- a/pkg/apis/storage/zz_generated.deepcopy.go
+++ b/pkg/apis/storage/zz_generated.deepcopy.go
@@ -74,6 +74,15 @@ func (in *StorageClass) DeepCopyInto(out *StorageClass) {
*out = make([]string, len(*in))
copy(*out, *in)
}
+ if in.AllowVolumeExpansion != nil {
+ in, out := &in.AllowVolumeExpansion, &out.AllowVolumeExpansion
+ if *in == nil {
+ *out = nil
+ } else {
+ *out = new(bool)
+ **out = **in
+ }
+ }
return
}
diff --git a/pkg/controller/BUILD b/pkg/controller/BUILD
index 405f2571b1f..06544fbddad 100644
--- a/pkg/controller/BUILD
+++ b/pkg/controller/BUILD
@@ -128,6 +128,7 @@ filegroup(
"//pkg/controller/ttl:all-srcs",
"//pkg/controller/volume/attachdetach:all-srcs",
"//pkg/controller/volume/events:all-srcs",
+ "//pkg/controller/volume/expand:all-srcs",
"//pkg/controller/volume/persistentvolume:all-srcs",
],
tags = ["automanaged"],
diff --git a/pkg/controller/volume/expand/BUILD b/pkg/controller/volume/expand/BUILD
new file mode 100644
index 00000000000..b68223bee84
--- /dev/null
+++ b/pkg/controller/volume/expand/BUILD
@@ -0,0 +1,60 @@
+package(default_visibility = ["//visibility:public"])
+
+licenses(["notice"])
+
+load(
+ "@io_bazel_rules_go//go:def.bzl",
+ "go_library",
+)
+
+go_library(
+ name = "go_default_library",
+ srcs = [
+ "expand_controller.go",
+ "pvc_populator.go",
+ "sync_volume_resize.go",
+ ],
+ tags = ["automanaged"],
+ deps = [
+ "//pkg/cloudprovider:go_default_library",
+ "//pkg/controller:go_default_library",
+ "//pkg/controller/volume/expand/cache:go_default_library",
+ "//pkg/controller/volume/expand/util:go_default_library",
+ "//pkg/util/goroutinemap/exponentialbackoff:go_default_library",
+ "//pkg/util/io:go_default_library",
+ "//pkg/util/mount:go_default_library",
+ "//pkg/volume:go_default_library",
+ "//pkg/volume/util/operationexecutor:go_default_library",
+ "//vendor/github.com/golang/glog:go_default_library",
+ "//vendor/k8s.io/api/core/v1:go_default_library",
+ "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
+ "//vendor/k8s.io/apimachinery/pkg/labels:go_default_library",
+ "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
+ "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
+ "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
+ "//vendor/k8s.io/client-go/informers/core/v1:go_default_library",
+ "//vendor/k8s.io/client-go/kubernetes:go_default_library",
+ "//vendor/k8s.io/client-go/kubernetes/scheme:go_default_library",
+ "//vendor/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library",
+ "//vendor/k8s.io/client-go/listers/core/v1:go_default_library",
+ "//vendor/k8s.io/client-go/tools/cache:go_default_library",
+ "//vendor/k8s.io/client-go/tools/record:go_default_library",
+ ],
+)
+
+filegroup(
+ name = "package-srcs",
+ srcs = glob(["**"]),
+ tags = ["automanaged"],
+ visibility = ["//visibility:private"],
+)
+
+filegroup(
+ name = "all-srcs",
+ srcs = [
+ ":package-srcs",
+ "//pkg/controller/volume/expand/cache:all-srcs",
+ "//pkg/controller/volume/expand/util:all-srcs",
+ ],
+ tags = ["automanaged"],
+)
diff --git a/pkg/controller/volume/expand/OWNERS b/pkg/controller/volume/expand/OWNERS
new file mode 100644
index 00000000000..f9e1482748f
--- /dev/null
+++ b/pkg/controller/volume/expand/OWNERS
@@ -0,0 +1,4 @@
+approvers:
+- saad-ali
+- jsafrane
+- gnufied
diff --git a/pkg/controller/volume/expand/cache/BUILD b/pkg/controller/volume/expand/cache/BUILD
new file mode 100644
index 00000000000..f07d34a020a
--- /dev/null
+++ b/pkg/controller/volume/expand/cache/BUILD
@@ -0,0 +1,53 @@
+package(default_visibility = ["//visibility:public"])
+
+licenses(["notice"])
+
+load(
+ "@io_bazel_rules_go//go:def.bzl",
+ "go_library",
+ "go_test",
+)
+
+go_library(
+ name = "go_default_library",
+ srcs = ["volume_resize_map.go"],
+ tags = ["automanaged"],
+ deps = [
+ "//pkg/controller/volume/expand/util:go_default_library",
+ "//pkg/util/strings:go_default_library",
+ "//pkg/volume/util/types:go_default_library",
+ "//vendor/github.com/golang/glog:go_default_library",
+ "//vendor/k8s.io/api/core/v1:go_default_library",
+ "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
+ "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
+ "//vendor/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library",
+ "//vendor/k8s.io/client-go/kubernetes:go_default_library",
+ ],
+)
+
+filegroup(
+ name = "package-srcs",
+ srcs = glob(["**"]),
+ tags = ["automanaged"],
+ visibility = ["//visibility:private"],
+)
+
+filegroup(
+ name = "all-srcs",
+ srcs = [":package-srcs"],
+ tags = ["automanaged"],
+)
+
+go_test(
+ name = "go_default_test",
+ srcs = ["volume_resize_map_test.go"],
+ library = ":go_default_library",
+ deps = [
+ "//pkg/volume/util/types:go_default_library",
+ "//vendor/github.com/stretchr/testify/assert:go_default_library",
+ "//vendor/k8s.io/api/core/v1:go_default_library",
+ "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
+ "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
+ "//vendor/k8s.io/client-go/kubernetes/fake:go_default_library",
+ ],
+)
diff --git a/pkg/controller/volume/expand/cache/volume_resize_map.go b/pkg/controller/volume/expand/cache/volume_resize_map.go
new file mode 100644
index 00000000000..b04bf9f254e
--- /dev/null
+++ b/pkg/controller/volume/expand/cache/volume_resize_map.go
@@ -0,0 +1,211 @@
+/*
+Copyright 2017 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 cache
+
+import (
+ "encoding/json"
+ "fmt"
+ "sync"
+
+ "github.com/golang/glog"
+ "k8s.io/api/core/v1"
+ "k8s.io/apimachinery/pkg/api/resource"
+ commontypes "k8s.io/apimachinery/pkg/types"
+ "k8s.io/apimachinery/pkg/util/strategicpatch"
+ clientset "k8s.io/client-go/kubernetes"
+ "k8s.io/kubernetes/pkg/controller/volume/expand/util"
+ "k8s.io/kubernetes/pkg/util/strings"
+ "k8s.io/kubernetes/pkg/volume/util/types"
+)
+
+// VolumeResizeMap defines an interface that serves as a cache for holding pending resizing requests
+type VolumeResizeMap interface {
+ // AddPVCUpdate adds pvc for resizing
+ AddPVCUpdate(pvc *v1.PersistentVolumeClaim, pv *v1.PersistentVolume)
+ // DeletePVC deletes pvc that is scheduled for resizing
+ DeletePVC(pvc *v1.PersistentVolumeClaim)
+ // GetPVCsWithResizeRequest returns all pending pvc resize requests
+ GetPVCsWithResizeRequest() []*PVCWithResizeRequest
+ // MarkAsResized marks a pvc as fully resized
+ MarkAsResized(*PVCWithResizeRequest, resource.Quantity) error
+ // UpdatePVSize updates just pv size after cloudprovider resizing is successful
+ UpdatePVSize(*PVCWithResizeRequest, resource.Quantity) error
+}
+
+type volumeResizeMap struct {
+ // map of unique pvc name and resize requests that are pending or inflight
+ pvcrs map[types.UniquePVCName]*PVCWithResizeRequest
+ // kube client for making API calls
+ kubeClient clientset.Interface
+ // for guarding access to pvcrs map
+ sync.RWMutex
+}
+
+// PVCWithResizeRequest struct defines data structure that stores state needed for
+// performing file system resize
+type PVCWithResizeRequest struct {
+ // PVC that needs to be resized
+ PVC *v1.PersistentVolumeClaim
+ // persistentvolume
+ PersistentVolume *v1.PersistentVolume
+ // Current volume size
+ CurrentSize resource.Quantity
+ // Expended volume size
+ ExpectedSize resource.Quantity
+}
+
+// UniquePVCKey returns unique key of the PVC based on its UID
+func (pvcr *PVCWithResizeRequest) UniquePVCKey() types.UniquePVCName {
+ return types.UniquePVCName(pvcr.PVC.UID)
+}
+
+// QualifiedName returns namespace and name combination of the PVC
+func (pvcr *PVCWithResizeRequest) QualifiedName() string {
+ return strings.JoinQualifiedName(pvcr.PVC.Namespace, pvcr.PVC.Name)
+}
+
+// NewVolumeResizeMap returns new VolumeResizeMap which acts as a cache
+// for holding pending resize requests.
+func NewVolumeResizeMap(kubeClient clientset.Interface) VolumeResizeMap {
+ resizeMap := &volumeResizeMap{}
+ resizeMap.pvcrs = make(map[types.UniquePVCName]*PVCWithResizeRequest)
+ resizeMap.kubeClient = kubeClient
+ return resizeMap
+}
+
+// AddPVCUpdate adds pvc for resizing
+func (resizeMap *volumeResizeMap) AddPVCUpdate(pvc *v1.PersistentVolumeClaim, pv *v1.PersistentVolume) {
+ if pvc.Namespace != pv.Spec.ClaimRef.Namespace || pvc.Name != pv.Spec.ClaimRef.Name {
+ glog.V(4).Infof("Persistent Volume is not mapped to PVC being updated : %s", util.ClaimToClaimKey(pvc))
+ return
+ }
+
+ if pvc.Status.Phase != v1.ClaimBound {
+ return
+ }
+
+ resizeMap.Lock()
+ defer resizeMap.Unlock()
+
+ pvcSize := pvc.Spec.Resources.Requests[v1.ResourceStorage]
+ pvcStatusSize := pvc.Status.Capacity[v1.ResourceStorage]
+
+ if pvcStatusSize.Cmp(pvcSize) >= 0 {
+ return
+ }
+
+ glog.V(4).Infof("Adding pvc %s with Size %s/%s for resizing", util.ClaimToClaimKey(pvc), pvcSize.String(), pvcStatusSize.String())
+
+ pvcRequest := &PVCWithResizeRequest{
+ PVC: pvc,
+ CurrentSize: pvcStatusSize,
+ ExpectedSize: pvcSize,
+ PersistentVolume: pv,
+ }
+ resizeMap.pvcrs[types.UniquePVCName(pvc.UID)] = pvcRequest
+}
+
+// GetPVCsWithResizeRequest returns all pending pvc resize requests
+func (resizeMap *volumeResizeMap) GetPVCsWithResizeRequest() []*PVCWithResizeRequest {
+ resizeMap.Lock()
+ defer resizeMap.Unlock()
+
+ pvcrs := []*PVCWithResizeRequest{}
+ for _, pvcr := range resizeMap.pvcrs {
+ pvcrs = append(pvcrs, pvcr)
+ }
+ // Empty out pvcrs map, we will add back failed resize requests later
+ resizeMap.pvcrs = map[types.UniquePVCName]*PVCWithResizeRequest{}
+ return pvcrs
+}
+
+// DeletePVC removes given pvc object from list of pvcs that needs resizing.
+// deleting a pvc in this map doesn't affect operations that are already inflight.
+func (resizeMap *volumeResizeMap) DeletePVC(pvc *v1.PersistentVolumeClaim) {
+ resizeMap.Lock()
+ defer resizeMap.Unlock()
+ pvcUniqueName := types.UniquePVCName(pvc.UID)
+ glog.V(5).Infof("Removing PVC %v from resize map", pvcUniqueName)
+ delete(resizeMap.pvcrs, pvcUniqueName)
+}
+
+// MarkAsResized marks a pvc as fully resized
+func (resizeMap *volumeResizeMap) MarkAsResized(pvcr *PVCWithResizeRequest, newSize resource.Quantity) error {
+ resizeMap.Lock()
+ defer resizeMap.Unlock()
+
+ emptyCondition := []v1.PersistentVolumeClaimCondition{}
+
+ err := resizeMap.updatePVCCapacityAndConditions(pvcr, newSize, emptyCondition)
+ if err != nil {
+ glog.V(4).Infof("Error updating PV spec capacity for volume %q with : %v", pvcr.QualifiedName(), err)
+ return err
+ }
+ return nil
+}
+
+// UpdatePVSize updates just pv size after cloudprovider resizing is successful
+func (resizeMap *volumeResizeMap) UpdatePVSize(pvcr *PVCWithResizeRequest, newSize resource.Quantity) error {
+ resizeMap.Lock()
+ defer resizeMap.Unlock()
+
+ oldPv := pvcr.PersistentVolume
+ pvClone := oldPv.DeepCopy()
+
+ oldData, err := json.Marshal(pvClone)
+
+ if err != nil {
+ return fmt.Errorf("Unexpected error marshaling PV : %q with error %v", pvClone.Name, err)
+ }
+
+ pvClone.Spec.Capacity[v1.ResourceStorage] = newSize
+
+ newData, err := json.Marshal(pvClone)
+
+ if err != nil {
+ return fmt.Errorf("Unexpected error marshaling PV : %q with error %v", pvClone.Name, err)
+ }
+
+ patchBytes, err := strategicpatch.CreateTwoWayMergePatch(oldData, newData, pvClone)
+
+ if err != nil {
+ return fmt.Errorf("Error Creating two way merge patch for PV : %q with error %v", pvClone.Name, err)
+ }
+
+ _, updateErr := resizeMap.kubeClient.CoreV1().PersistentVolumes().Patch(pvClone.Name, commontypes.StrategicMergePatchType, patchBytes)
+
+ if updateErr != nil {
+ glog.V(4).Infof("Error updating pv %q with error : %v", pvClone.Name, updateErr)
+ return updateErr
+ }
+ return nil
+}
+
+func (resizeMap *volumeResizeMap) updatePVCCapacityAndConditions(pvcr *PVCWithResizeRequest, newSize resource.Quantity, pvcConditions []v1.PersistentVolumeClaimCondition) error {
+
+ claimClone := pvcr.PVC.DeepCopy()
+
+ claimClone.Status.Capacity[v1.ResourceStorage] = newSize
+ claimClone.Status.Conditions = pvcConditions
+
+ _, updateErr := resizeMap.kubeClient.CoreV1().PersistentVolumeClaims(claimClone.Namespace).UpdateStatus(claimClone)
+ if updateErr != nil {
+ glog.V(4).Infof("updating PersistentVolumeClaim[%s] status: failed: %v", pvcr.QualifiedName(), updateErr)
+ return updateErr
+ }
+ return nil
+}
diff --git a/pkg/controller/volume/expand/cache/volume_resize_map_test.go b/pkg/controller/volume/expand/cache/volume_resize_map_test.go
new file mode 100644
index 00000000000..8a52df1544c
--- /dev/null
+++ b/pkg/controller/volume/expand/cache/volume_resize_map_test.go
@@ -0,0 +1,88 @@
+/*
+Copyright 2017 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 cache
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "k8s.io/api/core/v1"
+ "k8s.io/apimachinery/pkg/api/resource"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/client-go/kubernetes/fake"
+ "k8s.io/kubernetes/pkg/volume/util/types"
+)
+
+func Test_AddValidPvcUpdate(t *testing.T) {
+ resizeMap := createTestVolumeResizeMap()
+ claim1 := testVolumeClaim("foo", "ns", v1.PersistentVolumeClaimSpec{
+ AccessModes: []v1.PersistentVolumeAccessMode{
+ v1.ReadWriteOnce,
+ v1.ReadOnlyMany,
+ },
+ Resources: v1.ResourceRequirements{
+ Requests: v1.ResourceList{
+ v1.ResourceName(v1.ResourceStorage): resource.MustParse("10G"),
+ },
+ },
+ VolumeName: "foo",
+ })
+
+ claimClone := claim1.DeepCopy()
+ claimClone.Spec.Resources.Requests[v1.ResourceStorage] = resource.MustParse("12G")
+ pv := getPersistentVolume("foo", resource.MustParse("10G"), claim1)
+ resizeMap.AddPVCUpdate(claimClone, pv)
+ pvcr := resizeMap.GetPVCsWithResizeRequest()
+ if len(pvcr) != 1 {
+ t.Fatalf("Expected 1 pvc resize request got 0")
+ }
+ assert.Equal(t, resource.MustParse("12G"), pvcr[0].ExpectedSize)
+ assert.Equal(t, 0, len(resizeMap.pvcrs))
+}
+
+func createTestVolumeResizeMap() *volumeResizeMap {
+ fakeClient := &fake.Clientset{}
+ resizeMap := &volumeResizeMap{}
+ resizeMap.pvcrs = make(map[types.UniquePVCName]*PVCWithResizeRequest)
+ resizeMap.kubeClient = fakeClient
+ return resizeMap
+}
+
+func testVolumeClaim(name string, namespace string, spec v1.PersistentVolumeClaimSpec) *v1.PersistentVolumeClaim {
+ return &v1.PersistentVolumeClaim{
+ ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: namespace},
+ Spec: spec,
+ Status: v1.PersistentVolumeClaimStatus{
+ Phase: v1.ClaimBound,
+ },
+ }
+}
+
+func getPersistentVolume(volumeName string, capacity resource.Quantity, pvc *v1.PersistentVolumeClaim) *v1.PersistentVolume {
+ return &v1.PersistentVolume{
+ ObjectMeta: metav1.ObjectMeta{Name: volumeName},
+ Spec: v1.PersistentVolumeSpec{
+ Capacity: v1.ResourceList{
+ v1.ResourceName(v1.ResourceStorage): capacity,
+ },
+ ClaimRef: &v1.ObjectReference{
+ Namespace: pvc.Namespace,
+ Name: pvc.Name,
+ },
+ },
+ }
+}
diff --git a/pkg/controller/volume/expand/expand_controller.go b/pkg/controller/volume/expand/expand_controller.go
new file mode 100644
index 00000000000..1c71528ef91
--- /dev/null
+++ b/pkg/controller/volume/expand/expand_controller.go
@@ -0,0 +1,268 @@
+/*
+Copyright 2017 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 expand implements interfaces that attempt to resize a pvc
+// by adding pvc to a volume resize map from which PVCs are picked and
+// resized
+package expand
+
+import (
+ "fmt"
+ "net"
+ "time"
+
+ "github.com/golang/glog"
+
+ "k8s.io/api/core/v1"
+ "k8s.io/apimachinery/pkg/types"
+ "k8s.io/apimachinery/pkg/util/runtime"
+ coreinformers "k8s.io/client-go/informers/core/v1"
+ clientset "k8s.io/client-go/kubernetes"
+ "k8s.io/client-go/kubernetes/scheme"
+ v1core "k8s.io/client-go/kubernetes/typed/core/v1"
+ corelisters "k8s.io/client-go/listers/core/v1"
+ kcache "k8s.io/client-go/tools/cache"
+ "k8s.io/client-go/tools/record"
+ "k8s.io/kubernetes/pkg/cloudprovider"
+ "k8s.io/kubernetes/pkg/controller"
+ "k8s.io/kubernetes/pkg/controller/volume/expand/cache"
+ "k8s.io/kubernetes/pkg/util/io"
+ "k8s.io/kubernetes/pkg/util/mount"
+ "k8s.io/kubernetes/pkg/volume"
+ "k8s.io/kubernetes/pkg/volume/util/operationexecutor"
+)
+
+const (
+ // How often resizing loop runs
+ syncLoopPeriod time.Duration = 30 * time.Second
+ // How often pvc populator runs
+ populatorLoopPeriod time.Duration = 2 * time.Minute
+)
+
+// ExpandController expands the pvs
+type ExpandController interface {
+ Run(stopCh <-chan struct{})
+}
+
+type expandController struct {
+ // kubeClient is the kube API client used by volumehost to communicate with
+ // the API server.
+ kubeClient clientset.Interface
+
+ // pvcLister is the shared PVC lister used to fetch and store PVC
+ // objects from the API server. It is shared with other controllers and
+ // therefore the PVC objects in its store should be treated as immutable.
+ pvcLister corelisters.PersistentVolumeClaimLister
+ pvcsSynced kcache.InformerSynced
+
+ pvLister corelisters.PersistentVolumeLister
+ pvSynced kcache.InformerSynced
+
+ // cloud provider used by volume host
+ cloud cloudprovider.Interface
+
+ // volumePluginMgr used to initialize and fetch volume plugins
+ volumePluginMgr volume.VolumePluginMgr
+
+ // recorder is used to record events in the API server
+ recorder record.EventRecorder
+
+ // Volume resize map of volumes that needs resizing
+ resizeMap cache.VolumeResizeMap
+
+ // Worker goroutine to process resize requests from resizeMap
+ syncResize SyncVolumeResize
+
+ // Operation executor
+ opExecutor operationexecutor.OperationExecutor
+
+ // populator for periodically polling all PVCs
+ pvcPopulator PVCPopulator
+}
+
+func NewExpandController(
+ kubeClient clientset.Interface,
+ pvcInformer coreinformers.PersistentVolumeClaimInformer,
+ pvInformer coreinformers.PersistentVolumeInformer,
+ cloud cloudprovider.Interface,
+ plugins []volume.VolumePlugin) (ExpandController, error) {
+
+ expc := &expandController{
+ kubeClient: kubeClient,
+ cloud: cloud,
+ pvcLister: pvcInformer.Lister(),
+ pvcsSynced: pvcInformer.Informer().HasSynced,
+ pvLister: pvInformer.Lister(),
+ pvSynced: pvInformer.Informer().HasSynced,
+ }
+
+ if err := expc.volumePluginMgr.InitPlugins(plugins, nil, expc); err != nil {
+ return nil, fmt.Errorf("Could not initialize volume plugins for Expand Controller : %+v", err)
+ }
+
+ eventBroadcaster := record.NewBroadcaster()
+ eventBroadcaster.StartLogging(glog.Infof)
+ eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(kubeClient.CoreV1().RESTClient()).Events("")})
+ recorder := eventBroadcaster.NewRecorder(scheme.Scheme, v1.EventSource{Component: "volume_expand"})
+
+ expc.opExecutor = operationexecutor.NewOperationExecutor(operationexecutor.NewOperationGenerator(
+ kubeClient,
+ &expc.volumePluginMgr,
+ recorder,
+ false))
+
+ expc.resizeMap = cache.NewVolumeResizeMap(expc.kubeClient)
+
+ pvcInformer.Informer().AddEventHandler(kcache.ResourceEventHandlerFuncs{
+ UpdateFunc: expc.pvcUpdate,
+ DeleteFunc: expc.deletePVC,
+ })
+
+ expc.syncResize = NewSyncVolumeResize(syncLoopPeriod, expc.opExecutor, expc.resizeMap, kubeClient)
+ expc.pvcPopulator = NewPVCPopulator(
+ populatorLoopPeriod,
+ expc.resizeMap,
+ expc.pvcLister,
+ expc.pvLister,
+ kubeClient)
+ return expc, nil
+}
+
+func (expc *expandController) Run(stopCh <-chan struct{}) {
+ defer runtime.HandleCrash()
+ glog.Infof("Starting expand controller")
+ defer glog.Infof("Shutting down expand controller")
+
+ if !controller.WaitForCacheSync("expand", stopCh, expc.pvcsSynced, expc.pvSynced) {
+ return
+ }
+
+ // Run volume sync work goroutine
+ go expc.syncResize.Run(stopCh)
+ // Start the pvc populator loop
+ go expc.pvcPopulator.Run(stopCh)
+ <-stopCh
+}
+
+func (expc *expandController) deletePVC(obj interface{}) {
+ pvc, ok := obj.(*v1.PersistentVolumeClaim)
+
+ if pvc == nil || !ok {
+ return
+ }
+
+ expc.resizeMap.DeletePVC(pvc)
+}
+
+func (expc *expandController) pvcUpdate(oldObj, newObj interface{}) {
+ oldPvc, ok := oldObj.(*v1.PersistentVolumeClaim)
+
+ if oldPvc == nil || !ok {
+ return
+ }
+
+ newPVC, ok := newObj.(*v1.PersistentVolumeClaim)
+
+ if newPVC == nil || !ok {
+ return
+ }
+ pv, err := getPersistentVolume(newPVC, expc.pvLister)
+ if err != nil {
+ glog.V(5).Infof("Error getting Persistent Volume for pvc %q : %v", newPVC.UID, err)
+ return
+ }
+ expc.resizeMap.AddPVCUpdate(newPVC, pv)
+}
+
+func getPersistentVolume(pvc *v1.PersistentVolumeClaim, pvLister corelisters.PersistentVolumeLister) (*v1.PersistentVolume, error) {
+ volumeName := pvc.Spec.VolumeName
+ pv, err := pvLister.Get(volumeName)
+
+ if err != nil {
+ return nil, fmt.Errorf("failed to find PV %q in PV informer cache with error : %v", volumeName, err)
+ }
+
+ return pv.DeepCopy(), nil
+}
+
+// Implementing VolumeHost interface
+func (expc *expandController) GetPluginDir(pluginName string) string {
+ return ""
+}
+
+func (expc *expandController) GetPodVolumeDir(podUID types.UID, pluginName string, volumeName string) string {
+ return ""
+}
+
+func (expc *expandController) GetPodPluginDir(podUID types.UID, pluginName string) string {
+ return ""
+}
+
+func (expc *expandController) GetKubeClient() clientset.Interface {
+ return expc.kubeClient
+}
+
+func (expc *expandController) NewWrapperMounter(volName string, spec volume.Spec, pod *v1.Pod, opts volume.VolumeOptions) (volume.Mounter, error) {
+ return nil, fmt.Errorf("NewWrapperMounter not supported by expand controller's VolumeHost implementation")
+}
+
+func (expc *expandController) NewWrapperUnmounter(volName string, spec volume.Spec, podUID types.UID) (volume.Unmounter, error) {
+ return nil, fmt.Errorf("NewWrapperUnmounter not supported by expand controller's VolumeHost implementation")
+}
+
+func (expc *expandController) GetCloudProvider() cloudprovider.Interface {
+ return expc.cloud
+}
+
+func (expc *expandController) GetMounter(pluginName string) mount.Interface {
+ return nil
+}
+
+func (expc *expandController) GetExec(pluginName string) mount.Exec {
+ return mount.NewOsExec()
+}
+
+func (expc *expandController) GetWriter() io.Writer {
+ return nil
+}
+
+func (expc *expandController) GetHostName() string {
+ return ""
+}
+
+func (expc *expandController) GetHostIP() (net.IP, error) {
+ return nil, fmt.Errorf("GetHostIP not supported by expand controller's VolumeHost implementation")
+}
+
+func (expc *expandController) GetNodeAllocatable() (v1.ResourceList, error) {
+ return v1.ResourceList{}, nil
+}
+
+func (expc *expandController) GetSecretFunc() func(namespace, name string) (*v1.Secret, error) {
+ return func(_, _ string) (*v1.Secret, error) {
+ return nil, fmt.Errorf("GetSecret unsupported in expandController")
+ }
+}
+
+func (expc *expandController) GetConfigMapFunc() func(namespace, name string) (*v1.ConfigMap, error) {
+ return func(_, _ string) (*v1.ConfigMap, error) {
+ return nil, fmt.Errorf("GetConfigMap unsupported in expandController")
+ }
+}
+
+func (expc *expandController) GetNodeLabels() (map[string]string, error) {
+ return nil, fmt.Errorf("GetNodeLabels unsupported in expandController")
+}
diff --git a/pkg/controller/volume/expand/pvc_populator.go b/pkg/controller/volume/expand/pvc_populator.go
new file mode 100644
index 00000000000..220e1092f7d
--- /dev/null
+++ b/pkg/controller/volume/expand/pvc_populator.go
@@ -0,0 +1,85 @@
+/*
+Copyright 2017 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 reconciler implements interfaces that attempt to reconcile the
+// desired state of the with the actual state of the world by triggering
+// actions.
+
+package expand
+
+import (
+ "time"
+
+ "github.com/golang/glog"
+
+ "k8s.io/apimachinery/pkg/labels"
+ "k8s.io/apimachinery/pkg/util/wait"
+ clientset "k8s.io/client-go/kubernetes"
+ corelisters "k8s.io/client-go/listers/core/v1"
+ "k8s.io/kubernetes/pkg/controller/volume/expand/cache"
+)
+
+// PVCPopulator iterates through PVCs and checks if for bound PVCs
+// their size doesn't match with Persistent Volume size
+type PVCPopulator interface {
+ Run(stopCh <-chan struct{})
+}
+
+type pvcPopulator struct {
+ loopPeriod time.Duration
+ resizeMap cache.VolumeResizeMap
+ pvcLister corelisters.PersistentVolumeClaimLister
+ pvLister corelisters.PersistentVolumeLister
+ kubeClient clientset.Interface
+}
+
+func NewPVCPopulator(
+ loopPeriod time.Duration,
+ resizeMap cache.VolumeResizeMap,
+ pvcLister corelisters.PersistentVolumeClaimLister,
+ pvLister corelisters.PersistentVolumeLister,
+ kubeClient clientset.Interface) PVCPopulator {
+ populator := &pvcPopulator{
+ loopPeriod: loopPeriod,
+ pvcLister: pvcLister,
+ pvLister: pvLister,
+ resizeMap: resizeMap,
+ kubeClient: kubeClient,
+ }
+ return populator
+}
+
+func (populator *pvcPopulator) Run(stopCh <-chan struct{}) {
+ wait.Until(populator.Sync, populator.loopPeriod, stopCh)
+}
+
+func (populator *pvcPopulator) Sync() {
+ pvcs, err := populator.pvcLister.List(labels.Everything())
+ if err != nil {
+ glog.Errorf("Listing PVCs failed in populator : %v", err)
+ return
+ }
+
+ for _, pvc := range pvcs {
+ pv, err := getPersistentVolume(pvc, populator.pvLister)
+
+ if err != nil {
+ glog.V(5).Infof("Error getting persistent volume for pvc %q : %v", pvc.UID, err)
+ continue
+ }
+ populator.resizeMap.AddPVCUpdate(pvc, pv)
+ }
+}
diff --git a/pkg/controller/volume/expand/sync_volume_resize.go b/pkg/controller/volume/expand/sync_volume_resize.go
new file mode 100644
index 00000000000..06565775e63
--- /dev/null
+++ b/pkg/controller/volume/expand/sync_volume_resize.go
@@ -0,0 +1,101 @@
+/*
+Copyright 2017 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 expand
+
+import (
+ "time"
+
+ "github.com/golang/glog"
+ "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/util/wait"
+ clientset "k8s.io/client-go/kubernetes"
+ "k8s.io/kubernetes/pkg/controller/volume/expand/cache"
+ "k8s.io/kubernetes/pkg/controller/volume/expand/util"
+ "k8s.io/kubernetes/pkg/util/goroutinemap/exponentialbackoff"
+ "k8s.io/kubernetes/pkg/volume/util/operationexecutor"
+)
+
+type SyncVolumeResize interface {
+ Run(stopCh <-chan struct{})
+}
+
+type syncResize struct {
+ loopPeriod time.Duration
+ resizeMap cache.VolumeResizeMap
+ opsExecutor operationexecutor.OperationExecutor
+ kubeClient clientset.Interface
+}
+
+// NewSyncVolumeResize returns actual volume resize handler
+func NewSyncVolumeResize(
+ loopPeriod time.Duration,
+ opsExecutor operationexecutor.OperationExecutor,
+ resizeMap cache.VolumeResizeMap,
+ kubeClient clientset.Interface) SyncVolumeResize {
+ rc := &syncResize{
+ loopPeriod: loopPeriod,
+ opsExecutor: opsExecutor,
+ resizeMap: resizeMap,
+ kubeClient: kubeClient,
+ }
+ return rc
+}
+
+func (rc *syncResize) Run(stopCh <-chan struct{}) {
+ wait.Until(rc.Sync, rc.loopPeriod, stopCh)
+}
+
+func (rc *syncResize) Sync() {
+ // Resize PVCs that require resize
+ for _, pvcWithResizeRequest := range rc.resizeMap.GetPVCsWithResizeRequest() {
+ uniqueVolumeKey := v1.UniqueVolumeName(pvcWithResizeRequest.UniquePVCKey())
+ updatedClaim, err := markPVCResizeInProgress(pvcWithResizeRequest, rc.kubeClient)
+ if err != nil {
+ glog.V(5).Infof("Error setting PVC %s in progress with error : %v", pvcWithResizeRequest.QualifiedName(), err)
+ continue
+ }
+ if updatedClaim != nil {
+ pvcWithResizeRequest.PVC = updatedClaim
+ }
+
+ if rc.opsExecutor.IsOperationPending(uniqueVolumeKey, "") {
+ glog.V(10).Infof("Operation for PVC %v is already pending", pvcWithResizeRequest.QualifiedName())
+ continue
+ }
+ glog.V(5).Infof("Starting opsExecutor.ExpandVolume for volume %s", pvcWithResizeRequest.QualifiedName())
+ growFuncError := rc.opsExecutor.ExpandVolume(pvcWithResizeRequest, rc.resizeMap)
+ if growFuncError != nil && !exponentialbackoff.IsExponentialBackoff(growFuncError) {
+ glog.Errorf("Error growing pvc %s with %v", pvcWithResizeRequest.QualifiedName(), growFuncError)
+ }
+ if growFuncError == nil {
+ glog.V(5).Infof("Started opsExecutor.ExpandVolume for volume %s", pvcWithResizeRequest.QualifiedName())
+ }
+ }
+}
+
+func markPVCResizeInProgress(pvcWithResizeRequest *cache.PVCWithResizeRequest, kubeClient clientset.Interface) (*v1.PersistentVolumeClaim, error) {
+ // Mark PVC as Resize Started
+ progressCondition := v1.PersistentVolumeClaimCondition{
+ Type: v1.PersistentVolumeClaimResizing,
+ Status: v1.ConditionTrue,
+ LastTransitionTime: metav1.Now(),
+ }
+ conditions := []v1.PersistentVolumeClaimCondition{progressCondition}
+
+ return util.UpdatePVCCondition(pvcWithResizeRequest.PVC, conditions, kubeClient)
+}
diff --git a/pkg/controller/volume/expand/util/BUILD b/pkg/controller/volume/expand/util/BUILD
new file mode 100644
index 00000000000..ce155342a61
--- /dev/null
+++ b/pkg/controller/volume/expand/util/BUILD
@@ -0,0 +1,26 @@
+load("@io_bazel_rules_go//go:def.bzl", "go_library")
+
+go_library(
+ name = "go_default_library",
+ srcs = ["util.go"],
+ visibility = ["//visibility:public"],
+ deps = [
+ "//vendor/github.com/golang/glog:go_default_library",
+ "//vendor/k8s.io/api/core/v1:go_default_library",
+ "//vendor/k8s.io/client-go/kubernetes:go_default_library",
+ ],
+)
+
+filegroup(
+ name = "package-srcs",
+ srcs = glob(["**"]),
+ tags = ["automanaged"],
+ visibility = ["//visibility:private"],
+)
+
+filegroup(
+ name = "all-srcs",
+ srcs = [":package-srcs"],
+ tags = ["automanaged"],
+ visibility = ["//visibility:public"],
+)
diff --git a/pkg/controller/volume/expand/util/util.go b/pkg/controller/volume/expand/util/util.go
new file mode 100644
index 00000000000..bc6795c4fa7
--- /dev/null
+++ b/pkg/controller/volume/expand/util/util.go
@@ -0,0 +1,46 @@
+/*
+Copyright 2017 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 util
+
+import (
+ "fmt"
+
+ "github.com/golang/glog"
+
+ "k8s.io/api/core/v1"
+ clientset "k8s.io/client-go/kubernetes"
+)
+
+// ClaimToClaimKey return namespace/name string for pvc
+func ClaimToClaimKey(claim *v1.PersistentVolumeClaim) string {
+ return fmt.Sprintf("%s/%s", claim.Namespace, claim.Name)
+}
+
+// UpdatePVCCondition updates pvc with given condition status
+func UpdatePVCCondition(pvc *v1.PersistentVolumeClaim,
+ pvcConditions []v1.PersistentVolumeClaimCondition,
+ kubeClient clientset.Interface) (*v1.PersistentVolumeClaim, error) {
+
+ claimClone := pvc.DeepCopy()
+ claimClone.Status.Conditions = pvcConditions
+ updatedClaim, updateErr := kubeClient.CoreV1().PersistentVolumeClaims(claimClone.Namespace).UpdateStatus(claimClone)
+ if updateErr != nil {
+ glog.V(4).Infof("updating PersistentVolumeClaim[%s] status: failed: %v", ClaimToClaimKey(pvc), updateErr)
+ return nil, updateErr
+ }
+ return updatedClaim, nil
+}
diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go
index 60549a65e5a..29b5cc2b46b 100644
--- a/pkg/features/kube_features.go
+++ b/pkg/features/kube_features.go
@@ -114,6 +114,11 @@ const (
// New local storage types to support local storage capacity isolation
LocalStorageCapacityIsolation utilfeature.Feature = "LocalStorageCapacityIsolation"
+ // owner: @gnufied
+ // alpha: v1.8
+ // Ability to Expand persistent volumes
+ ExpandPersistentVolumes utilfeature.Feature = "ExpandPersistentVolumes"
+
// owner: @verb
// alpha: v1.8
//
@@ -179,6 +184,7 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS
EnableEquivalenceClassCache: {Default: false, PreRelease: utilfeature.Alpha},
TaintNodesByCondition: {Default: false, PreRelease: utilfeature.Alpha},
MountPropagation: {Default: false, PreRelease: utilfeature.Alpha},
+ ExpandPersistentVolumes: {Default: false, PreRelease: utilfeature.Alpha},
// inherited features from generic apiserver, relisted here to get a conflict if it is changed
// unintentionally on either side:
diff --git a/pkg/kubelet/events/event.go b/pkg/kubelet/events/event.go
index b8cae2cfad9..a1bb2682ed0 100644
--- a/pkg/kubelet/events/event.go
+++ b/pkg/kubelet/events/event.go
@@ -45,6 +45,7 @@ const (
FailedAttachVolume = "FailedAttachVolume"
FailedDetachVolume = "FailedDetachVolume"
FailedMountVolume = "FailedMount"
+ VolumeResizeFailed = "VolumeResizeFailed"
FailedUnMountVolume = "FailedUnMount"
WarnAlreadyMountedVolume = "AlreadyMountedVolume"
SuccessfulDetachVolume = "SuccessfulDetachVolume"
diff --git a/pkg/quota/evaluator/core/BUILD b/pkg/quota/evaluator/core/BUILD
index b413ddac201..205408b97b3 100644
--- a/pkg/quota/evaluator/core/BUILD
+++ b/pkg/quota/evaluator/core/BUILD
@@ -25,6 +25,7 @@ go_library(
"//pkg/api/helper/qos:go_default_library",
"//pkg/api/v1:go_default_library",
"//pkg/api/validation:go_default_library",
+ "//pkg/features:go_default_library",
"//pkg/kubeapiserver/admission/util:go_default_library",
"//pkg/quota:go_default_library",
"//pkg/quota/generic:go_default_library",
@@ -36,6 +37,7 @@ go_library(
"//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/util/validation/field:go_default_library",
"//vendor/k8s.io/apiserver/pkg/admission:go_default_library",
+ "//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//vendor/k8s.io/client-go/informers:go_default_library",
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
],
diff --git a/pkg/quota/evaluator/core/persistent_volume_claims.go b/pkg/quota/evaluator/core/persistent_volume_claims.go
index ed2d8bef0d0..c7a3a61ea44 100644
--- a/pkg/quota/evaluator/core/persistent_volume_claims.go
+++ b/pkg/quota/evaluator/core/persistent_volume_claims.go
@@ -27,11 +27,13 @@ import (
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apiserver/pkg/admission"
+ utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/client-go/informers"
clientset "k8s.io/client-go/kubernetes"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/helper"
k8s_api_v1 "k8s.io/kubernetes/pkg/api/v1"
+ "k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/kubeapiserver/admission/util"
"k8s.io/kubernetes/pkg/quota"
"k8s.io/kubernetes/pkg/quota/generic"
@@ -147,6 +149,10 @@ func (p *pvcEvaluator) Handles(a admission.Attributes) bool {
if op == admission.Create {
return true
}
+ if op == admission.Update && utilfeature.DefaultFeatureGate.Enabled(features.ExpandPersistentVolumes) {
+ return true
+ }
+
updateUninitialized, err := util.IsUpdatingUninitializedObject(a)
if err != nil {
// fail closed, will try to give an evaluation.
diff --git a/pkg/registry/storage/storageclass/BUILD b/pkg/registry/storage/storageclass/BUILD
index 1e906231a19..9ad952bafc9 100644
--- a/pkg/registry/storage/storageclass/BUILD
+++ b/pkg/registry/storage/storageclass/BUILD
@@ -16,10 +16,12 @@ go_library(
"//pkg/api:go_default_library",
"//pkg/apis/storage:go_default_library",
"//pkg/apis/storage/validation:go_default_library",
+ "//pkg/features:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/util/validation/field:go_default_library",
"//vendor/k8s.io/apiserver/pkg/endpoints/request:go_default_library",
"//vendor/k8s.io/apiserver/pkg/storage/names:go_default_library",
+ "//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library",
],
)
diff --git a/pkg/registry/storage/storageclass/strategy.go b/pkg/registry/storage/storageclass/strategy.go
index 216cc7ddc26..0da81213437 100644
--- a/pkg/registry/storage/storageclass/strategy.go
+++ b/pkg/registry/storage/storageclass/strategy.go
@@ -21,9 +21,11 @@ import (
"k8s.io/apimachinery/pkg/util/validation/field"
genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
"k8s.io/apiserver/pkg/storage/names"
+ utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/apis/storage"
"k8s.io/kubernetes/pkg/apis/storage/validation"
+ "k8s.io/kubernetes/pkg/features"
)
// storageClassStrategy implements behavior for StorageClass objects
@@ -42,7 +44,11 @@ func (storageClassStrategy) NamespaceScoped() bool {
// ResetBeforeCreate clears the Status field which is not allowed to be set by end users on creation.
func (storageClassStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) {
- _ = obj.(*storage.StorageClass)
+ class := obj.(*storage.StorageClass)
+
+ if !utilfeature.DefaultFeatureGate.Enabled(features.ExpandPersistentVolumes) {
+ class.AllowVolumeExpansion = nil
+ }
}
func (storageClassStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList {
@@ -60,8 +66,13 @@ func (storageClassStrategy) AllowCreateOnUpdate() bool {
// PrepareForUpdate sets the Status fields which is not allowed to be set by an end user updating a PV
func (storageClassStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) {
- _ = obj.(*storage.StorageClass)
- _ = old.(*storage.StorageClass)
+ newClass := obj.(*storage.StorageClass)
+ oldClass := old.(*storage.StorageClass)
+
+ if !utilfeature.DefaultFeatureGate.Enabled(features.ExpandPersistentVolumes) {
+ newClass.AllowVolumeExpansion = nil
+ oldClass.AllowVolumeExpansion = nil
+ }
}
func (storageClassStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList {
diff --git a/pkg/volume/glusterfs/glusterfs.go b/pkg/volume/glusterfs/glusterfs.go
index 2145fa63333..a3225e16a44 100644
--- a/pkg/volume/glusterfs/glusterfs.go
+++ b/pkg/volume/glusterfs/glusterfs.go
@@ -127,6 +127,10 @@ func (plugin *glusterfsPlugin) SupportsBulkVolumeVerification() bool {
return false
}
+func (plugin *glusterfsPlugin) RequiresFSResize() bool {
+ return false
+}
+
func (plugin *glusterfsPlugin) GetAccessModes() []v1.PersistentVolumeAccessMode {
return []v1.PersistentVolumeAccessMode{
v1.ReadWriteOnce,
@@ -1046,3 +1050,49 @@ func parseClassParameters(params map[string]string, kubeClient clientset.Interfa
}
return &cfg, nil
}
+
+func (plugin *glusterfsPlugin) ExpandVolumeDevice(spec *volume.Spec, newSize resource.Quantity, oldSize resource.Quantity) (resource.Quantity, error) {
+ pvSpec := spec.PersistentVolume.Spec
+ glog.V(2).Infof("Request to expand volume: %s ", pvSpec.Glusterfs.Path)
+ volumeName := pvSpec.Glusterfs.Path
+
+ // Fetch the volume for expansion.
+ volumeID := dstrings.TrimPrefix(volumeName, volPrefix)
+
+ //Get details of SC.
+ class, err := volutil.GetClassForVolume(plugin.host.GetKubeClient(), spec.PersistentVolume)
+ if err != nil {
+ return oldSize, err
+ }
+ cfg, err := parseClassParameters(class.Parameters, plugin.host.GetKubeClient())
+ if err != nil {
+ return oldSize, err
+ }
+
+ glog.V(4).Infof("Expanding volume %q with configuration %+v", volumeID, cfg)
+
+ //Create REST server connection
+ cli := gcli.NewClient(cfg.url, cfg.user, cfg.secretValue)
+ if cli == nil {
+ glog.Errorf("failed to create glusterfs rest client")
+ return oldSize, fmt.Errorf("failed to create glusterfs rest client, REST server authentication failed")
+ }
+
+ // Find out delta size
+ expansionSize := (newSize.Value() - oldSize.Value())
+ expansionSizeGB := int(volume.RoundUpSize(expansionSize, 1024*1024*1024))
+
+ // Make volume expansion request
+ volumeExpandReq := &gapi.VolumeExpandRequest{Size: expansionSizeGB}
+
+ // Expand the volume
+ volumeInfoRes, err := cli.VolumeExpand(volumeID, volumeExpandReq)
+ if err != nil {
+ glog.Errorf("error when expanding the volume :%v", err)
+ return oldSize, err
+ }
+
+ glog.V(2).Infof("volume %s expanded to new size %d successfully", volumeName, volumeInfoRes.Size)
+ newVolumeSize := resource.MustParse(fmt.Sprintf("%dG", volumeInfoRes.Size))
+ return newVolumeSize, nil
+}
diff --git a/pkg/volume/plugins.go b/pkg/volume/plugins.go
index b97f54af33b..eb2f8149ac4 100644
--- a/pkg/volume/plugins.go
+++ b/pkg/volume/plugins.go
@@ -24,6 +24,7 @@ import (
"github.com/golang/glog"
"k8s.io/api/core/v1"
+ "k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
utilerrors "k8s.io/apimachinery/pkg/util/errors"
@@ -201,6 +202,14 @@ type AttachableVolumePlugin interface {
GetDeviceMountRefs(deviceMountPath string) ([]string, error)
}
+// ExpandableVolumePlugin is an extended interface of VolumePlugin and is used for volumes that can be
+// expanded
+type ExpandableVolumePlugin interface {
+ VolumePlugin
+ ExpandVolumeDevice(spec *Spec, newSize resource.Quantity, oldSize resource.Quantity) (resource.Quantity, error)
+ RequiresFSResize() bool
+}
+
// VolumeHost is an interface that plugins can use to access the kubelet.
type VolumeHost interface {
// GetPluginDir returns the absolute path to a directory under which
@@ -642,6 +651,32 @@ func (pm *VolumePluginMgr) FindAttachablePluginByName(name string) (AttachableVo
return nil, nil
}
+// FindExpandablePluginBySpec fetches a persistent volume plugin by spec.
+func (pm *VolumePluginMgr) FindExpandablePluginBySpec(spec *Spec) (ExpandableVolumePlugin, error) {
+ volumePlugin, err := pm.FindPluginBySpec(spec)
+ if err != nil {
+ return nil, err
+ }
+
+ if expandableVolumePlugin, ok := volumePlugin.(ExpandableVolumePlugin); ok {
+ return expandableVolumePlugin, nil
+ }
+ return nil, nil
+}
+
+// FindExpandablePluginBySpec fetches a persistent volume plugin by name.
+func (pm *VolumePluginMgr) FindExpandablePluginByName(name string) (ExpandableVolumePlugin, error) {
+ volumePlugin, err := pm.FindPluginByName(name)
+ if err != nil {
+ return nil, err
+ }
+
+ if expandableVolumePlugin, ok := volumePlugin.(ExpandableVolumePlugin); ok {
+ return expandableVolumePlugin, nil
+ }
+ return nil, nil
+}
+
// NewPersistentVolumeRecyclerPodTemplate creates a template for a recycler
// pod. By default, a recycler pod simply runs "rm -rf" on a volume and tests
// for emptiness. Most attributes of the template will be correct for most
diff --git a/pkg/volume/util/operationexecutor/BUILD b/pkg/volume/util/operationexecutor/BUILD
index dae1131fc3a..647fd569d33 100644
--- a/pkg/volume/util/operationexecutor/BUILD
+++ b/pkg/volume/util/operationexecutor/BUILD
@@ -13,6 +13,7 @@ go_library(
"operation_generator.go",
],
deps = [
+ "//pkg/controller/volume/expand/cache:go_default_library",
"//pkg/features:go_default_library",
"//pkg/kubelet/events:go_default_library",
"//pkg/util/mount:go_default_library",
@@ -37,6 +38,7 @@ go_test(
srcs = ["operation_executor_test.go"],
library = ":go_default_library",
deps = [
+ "//pkg/controller/volume/expand/cache:go_default_library",
"//pkg/util/mount:go_default_library",
"//pkg/volume:go_default_library",
"//pkg/volume/util/types:go_default_library",
diff --git a/pkg/volume/util/operationexecutor/operation_executor.go b/pkg/volume/util/operationexecutor/operation_executor.go
index 21e8eecbdc7..8b11358436a 100644
--- a/pkg/volume/util/operationexecutor/operation_executor.go
+++ b/pkg/volume/util/operationexecutor/operation_executor.go
@@ -29,6 +29,7 @@ import (
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/types"
+ expandcache "k8s.io/kubernetes/pkg/controller/volume/expand/cache"
"k8s.io/kubernetes/pkg/util/mount"
"k8s.io/kubernetes/pkg/volume"
"k8s.io/kubernetes/pkg/volume/util"
@@ -119,6 +120,8 @@ type OperationExecutor interface {
// IsOperationPending returns true if an operation for the given volumeName and podName is pending,
// otherwise it returns false
IsOperationPending(volumeName v1.UniqueVolumeName, podName volumetypes.UniquePodName) bool
+ // Expand Volume will grow size available to PVC
+ ExpandVolume(*expandcache.PVCWithResizeRequest, expandcache.VolumeResizeMap) error
}
// NewOperationExecutor returns a new instance of OperationExecutor.
@@ -719,6 +722,17 @@ func (oe *operationExecutor) UnmountDevice(
deviceToDetach.VolumeName, "" /* podName */, unmountDeviceFunc, opCompleteFunc)
}
+func (oe *operationExecutor) ExpandVolume(pvcWithResizeRequest *expandcache.PVCWithResizeRequest, resizeMap expandcache.VolumeResizeMap) error {
+ expandFunc, pluginName, err := oe.operationGenerator.GenerateExpandVolumeFunc(pvcWithResizeRequest, resizeMap)
+
+ if err != nil {
+ return err
+ }
+ uniqueVolumeKey := v1.UniqueVolumeName(pvcWithResizeRequest.UniquePVCKey())
+ opCompleteFunc := util.OperationCompleteHook(pluginName, "expand_volume")
+ return oe.pendingOperations.Run(uniqueVolumeKey, "", expandFunc, opCompleteFunc)
+}
+
func (oe *operationExecutor) VerifyControllerAttachedVolume(
volumeToMount VolumeToMount,
nodeName types.NodeName,
diff --git a/pkg/volume/util/operationexecutor/operation_executor_test.go b/pkg/volume/util/operationexecutor/operation_executor_test.go
index 94118674ecc..35b7064c0d1 100644
--- a/pkg/volume/util/operationexecutor/operation_executor_test.go
+++ b/pkg/volume/util/operationexecutor/operation_executor_test.go
@@ -25,6 +25,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/uuid"
+ expandcache "k8s.io/kubernetes/pkg/controller/volume/expand/cache"
"k8s.io/kubernetes/pkg/util/mount"
"k8s.io/kubernetes/pkg/volume"
volumetypes "k8s.io/kubernetes/pkg/volume/util/types"
@@ -282,6 +283,14 @@ func (fopg *fakeOperationGenerator) GenerateVerifyControllerAttachedVolumeFunc(v
}, "", nil
}
+func (fopg *fakeOperationGenerator) GenerateExpandVolumeFunc(pvcWithResizeRequest *expandcache.PVCWithResizeRequest,
+ resizeMap expandcache.VolumeResizeMap) (func() error, string, error) {
+ return func() error {
+ startOperationAndBlock(fopg.ch, fopg.quit)
+ return nil
+ }, "", nil
+}
+
func (fopg *fakeOperationGenerator) GenerateBulkVolumeVerifyFunc(
pluginNodeVolumes map[types.NodeName][]*volume.Spec,
pluginNane string,
diff --git a/pkg/volume/util/operationexecutor/operation_generator.go b/pkg/volume/util/operationexecutor/operation_generator.go
index 73445ac3a0f..93b05ae6dd1 100644
--- a/pkg/volume/util/operationexecutor/operation_generator.go
+++ b/pkg/volume/util/operationexecutor/operation_generator.go
@@ -28,6 +28,7 @@ import (
utilfeature "k8s.io/apiserver/pkg/util/feature"
clientset "k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/record"
+ expandcache "k8s.io/kubernetes/pkg/controller/volume/expand/cache"
"k8s.io/kubernetes/pkg/features"
kevents "k8s.io/kubernetes/pkg/kubelet/events"
"k8s.io/kubernetes/pkg/util/mount"
@@ -100,6 +101,8 @@ type OperationGenerator interface {
map[types.NodeName][]*volume.Spec,
string,
map[*volume.Spec]v1.UniqueVolumeName, ActualStateOfWorldAttacherUpdater) (func() error, error)
+
+ GenerateExpandVolumeFunc(*expandcache.PVCWithResizeRequest, expandcache.VolumeResizeMap) (func() error, string, error)
}
func (og *operationGenerator) GenerateVolumesAreAttachedFunc(
@@ -726,6 +729,59 @@ func (og *operationGenerator) verifyVolumeIsSafeToDetach(
return nil
}
+func (og *operationGenerator) GenerateExpandVolumeFunc(
+ pvcWithResizeRequest *expandcache.PVCWithResizeRequest,
+ resizeMap expandcache.VolumeResizeMap) (func() error, string, error) {
+
+ volumeSpec := volume.NewSpecFromPersistentVolume(pvcWithResizeRequest.PersistentVolume, false)
+
+ volumePlugin, err := og.volumePluginMgr.FindExpandablePluginBySpec(volumeSpec)
+
+ if err != nil {
+ return nil, "", fmt.Errorf("Error finding plugin for expanding volume: %q with error %v", pvcWithResizeRequest.QualifiedName(), err)
+ }
+
+ expandFunc := func() error {
+ newSize := pvcWithResizeRequest.ExpectedSize
+ pvSize := pvcWithResizeRequest.PersistentVolume.Spec.Capacity[v1.ResourceStorage]
+ if pvSize.Cmp(newSize) < 0 {
+ updatedSize, expandErr := volumePlugin.ExpandVolumeDevice(
+ volumeSpec,
+ pvcWithResizeRequest.ExpectedSize,
+ pvcWithResizeRequest.CurrentSize)
+
+ if expandErr != nil {
+ glog.Errorf("Error expanding volume %q of plugin %s : %v", pvcWithResizeRequest.QualifiedName(), volumePlugin.GetPluginName(), expandErr)
+ og.recorder.Eventf(pvcWithResizeRequest.PVC, v1.EventTypeWarning, kevents.VolumeResizeFailed, expandErr.Error())
+ return expandErr
+ }
+ newSize = updatedSize
+ updateErr := resizeMap.UpdatePVSize(pvcWithResizeRequest, newSize)
+
+ if updateErr != nil {
+ glog.V(4).Infof("Error updating PV spec capacity for volume %q with : %v", pvcWithResizeRequest.QualifiedName(), updateErr)
+ og.recorder.Eventf(pvcWithResizeRequest.PVC, v1.EventTypeWarning, kevents.VolumeResizeFailed, updateErr.Error())
+ return updateErr
+ }
+ }
+
+ // No Cloudprovider resize needed, lets mark resizing as done
+ if !volumePlugin.RequiresFSResize() {
+ glog.V(4).Infof("Controller resizing done for PVC %s", pvcWithResizeRequest.QualifiedName())
+ err := resizeMap.MarkAsResized(pvcWithResizeRequest, newSize)
+
+ if err != nil {
+ glog.Errorf("Error marking pvc %s as resized : %v", pvcWithResizeRequest.QualifiedName(), err)
+ og.recorder.Eventf(pvcWithResizeRequest.PVC, v1.EventTypeWarning, kevents.VolumeResizeFailed, err.Error())
+ return err
+ }
+ }
+ return nil
+
+ }
+ return expandFunc, volumePlugin.GetPluginName(), nil
+}
+
func checkMountOptionSupport(og *operationGenerator, volumeToMount VolumeToMount, plugin volume.VolumePlugin) error {
mountOptions := volume.MountOptionFromSpec(volumeToMount.VolumeSpec)
diff --git a/pkg/volume/util/types/types.go b/pkg/volume/util/types/types.go
index 90bbdc4e21f..9375ad6750c 100644
--- a/pkg/volume/util/types/types.go
+++ b/pkg/volume/util/types/types.go
@@ -21,3 +21,6 @@ import "k8s.io/apimachinery/pkg/types"
// UniquePodName defines the type to key pods off of
type UniquePodName types.UID
+
+// UniquePVCName defines the type to key pvc off
+type UniquePVCName types.UID
diff --git a/plugin/BUILD b/plugin/BUILD
index 0fa7c38696f..f6fece455fa 100644
--- a/plugin/BUILD
+++ b/plugin/BUILD
@@ -28,6 +28,7 @@ filegroup(
"//plugin/pkg/admission/namespace/exists:all-srcs",
"//plugin/pkg/admission/noderestriction:all-srcs",
"//plugin/pkg/admission/persistentvolume/label:all-srcs",
+ "//plugin/pkg/admission/persistentvolume/resize:all-srcs",
"//plugin/pkg/admission/podnodeselector:all-srcs",
"//plugin/pkg/admission/podpreset:all-srcs",
"//plugin/pkg/admission/podtolerationrestriction:all-srcs",
diff --git a/plugin/pkg/admission/persistentvolume/resize/BUILD b/plugin/pkg/admission/persistentvolume/resize/BUILD
new file mode 100644
index 00000000000..37289faba64
--- /dev/null
+++ b/plugin/pkg/admission/persistentvolume/resize/BUILD
@@ -0,0 +1,55 @@
+package(default_visibility = ["//visibility:public"])
+
+licenses(["notice"])
+
+load(
+ "@io_bazel_rules_go//go:def.bzl",
+ "go_library",
+ "go_test",
+)
+
+go_test(
+ name = "go_default_test",
+ srcs = ["admission_test.go"],
+ library = ":go_default_library",
+ tags = ["automanaged"],
+ deps = [
+ "//pkg/api:go_default_library",
+ "//pkg/apis/storage:go_default_library",
+ "//pkg/client/informers/informers_generated/internalversion:go_default_library",
+ "//pkg/controller:go_default_library",
+ "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
+ "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
+ "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
+ "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
+ "//vendor/k8s.io/apiserver/pkg/admission:go_default_library",
+ ],
+)
+
+go_library(
+ name = "go_default_library",
+ srcs = ["admission.go"],
+ tags = ["automanaged"],
+ deps = [
+ "//pkg/api:go_default_library",
+ "//pkg/api/helper:go_default_library",
+ "//pkg/client/informers/informers_generated/internalversion:go_default_library",
+ "//pkg/client/listers/core/internalversion:go_default_library",
+ "//pkg/client/listers/storage/internalversion:go_default_library",
+ "//pkg/kubeapiserver/admission:go_default_library",
+ "//vendor/k8s.io/apiserver/pkg/admission:go_default_library",
+ ],
+)
+
+filegroup(
+ name = "package-srcs",
+ srcs = glob(["**"]),
+ tags = ["automanaged"],
+ visibility = ["//visibility:private"],
+)
+
+filegroup(
+ name = "all-srcs",
+ srcs = [":package-srcs"],
+ tags = ["automanaged"],
+)
diff --git a/plugin/pkg/admission/persistentvolume/resize/admission.go b/plugin/pkg/admission/persistentvolume/resize/admission.go
new file mode 100644
index 00000000000..65909370560
--- /dev/null
+++ b/plugin/pkg/admission/persistentvolume/resize/admission.go
@@ -0,0 +1,146 @@
+/*
+Copyright 2017 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 resize
+
+import (
+ "fmt"
+ "io"
+
+ "k8s.io/apiserver/pkg/admission"
+ "k8s.io/kubernetes/pkg/api"
+ apihelper "k8s.io/kubernetes/pkg/api/helper"
+ informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
+ pvlister "k8s.io/kubernetes/pkg/client/listers/core/internalversion"
+ storagelisters "k8s.io/kubernetes/pkg/client/listers/storage/internalversion"
+ kubeapiserveradmission "k8s.io/kubernetes/pkg/kubeapiserver/admission"
+)
+
+const (
+ // PluginName is the name of pvc resize admission plugin
+ PluginName = "PersistentVolumeClaimResize"
+)
+
+// Register registers a plugin
+func Register(plugins *admission.Plugins) {
+ plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) {
+ plugin := newPlugin()
+ return plugin, nil
+ })
+}
+
+var _ admission.Interface = &persistentVolumeClaimResize{}
+var _ = kubeapiserveradmission.WantsInternalKubeInformerFactory(&persistentVolumeClaimResize{})
+
+type persistentVolumeClaimResize struct {
+ *admission.Handler
+
+ pvLister pvlister.PersistentVolumeLister
+ scLister storagelisters.StorageClassLister
+}
+
+func newPlugin() *persistentVolumeClaimResize {
+ return &persistentVolumeClaimResize{
+ Handler: admission.NewHandler(admission.Update),
+ }
+}
+
+func (pvcr *persistentVolumeClaimResize) SetInternalKubeInformerFactory(f informers.SharedInformerFactory) {
+ pvcInformer := f.Core().InternalVersion().PersistentVolumes()
+ pvcr.pvLister = pvcInformer.Lister()
+ scInformer := f.Storage().InternalVersion().StorageClasses()
+ pvcr.scLister = scInformer.Lister()
+ pvcr.SetReadyFunc(func() bool {
+ return pvcInformer.Informer().HasSynced() && scInformer.Informer().HasSynced()
+ })
+}
+
+// Validate ensures lister is set.
+func (pvcr *persistentVolumeClaimResize) Validate() error {
+ if pvcr.pvLister == nil {
+ return fmt.Errorf("missing persistent volume lister")
+ }
+ if pvcr.scLister == nil {
+ return fmt.Errorf("missing storageclass lister")
+ }
+ return nil
+}
+
+func (pvcr *persistentVolumeClaimResize) Admit(a admission.Attributes) error {
+ if a.GetResource().GroupResource() != api.Resource("persistentvolumeclaims") {
+ return nil
+ }
+
+ if len(a.GetSubresource()) != 0 {
+ return nil
+ }
+
+ pvc, ok := a.GetObject().(*api.PersistentVolumeClaim)
+ // if we can't convert then we don't handle this object so just return
+ if !ok {
+ return nil
+ }
+ oldPvc, ok := a.GetOldObject().(*api.PersistentVolumeClaim)
+ if !ok {
+ return nil
+ }
+
+ // Growing Persistent volumes is only allowed for PVCs for which their StorageClass
+ // explicitly allows it
+ if !pvcr.allowResize(pvc, oldPvc) {
+ return admission.NewForbidden(a, fmt.Errorf("only dynamically provisioned pvc can be resized and "+
+ "the storageclass that provisions the pvc must support resize"))
+ }
+
+ // volume plugin must support resize
+ pv, err := pvcr.pvLister.Get(pvc.Spec.VolumeName)
+ if err != nil {
+ return nil
+ }
+
+ if !pvcr.checkVolumePlugin(pv) {
+ return admission.NewForbidden(a, fmt.Errorf("volume plugin does not support resize"))
+ }
+
+ return nil
+}
+
+// Growing Persistent volumes is only allowed for PVCs for which their StorageClass
+// explicitly allows it.
+func (pvcr *persistentVolumeClaimResize) allowResize(pvc, oldPvc *api.PersistentVolumeClaim) bool {
+ pvcStorageClass := apihelper.GetPersistentVolumeClaimClass(pvc)
+ oldPvcStorageClass := apihelper.GetPersistentVolumeClaimClass(oldPvc)
+ if pvcStorageClass == "" || oldPvcStorageClass == "" || pvcStorageClass != oldPvcStorageClass {
+ return false
+ }
+ sc, err := pvcr.scLister.Get(pvcStorageClass)
+ if err != nil {
+ return false
+ }
+ if sc.AllowVolumeExpansion != nil {
+ return *sc.AllowVolumeExpansion
+ }
+ return false
+}
+
+// checkVolumePlugin checks whether the volume plugin supports resize
+func (pvcr *persistentVolumeClaimResize) checkVolumePlugin(pv *api.PersistentVolume) bool {
+ if pv.Spec.Glusterfs != nil {
+ return true
+ }
+ return false
+
+}
diff --git a/plugin/pkg/admission/persistentvolume/resize/admission_test.go b/plugin/pkg/admission/persistentvolume/resize/admission_test.go
new file mode 100644
index 00000000000..66ca4142169
--- /dev/null
+++ b/plugin/pkg/admission/persistentvolume/resize/admission_test.go
@@ -0,0 +1,265 @@
+/*
+Copyright 2017 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 resize
+
+import (
+ "fmt"
+ "strings"
+ "testing"
+
+ "k8s.io/apimachinery/pkg/api/resource"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/apimachinery/pkg/runtime"
+ "k8s.io/apimachinery/pkg/runtime/schema"
+ "k8s.io/apiserver/pkg/admission"
+ "k8s.io/kubernetes/pkg/api"
+ "k8s.io/kubernetes/pkg/apis/storage"
+ informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
+ "k8s.io/kubernetes/pkg/controller"
+)
+
+func getResourceList(storage string) api.ResourceList {
+ res := api.ResourceList{}
+ if storage != "" {
+ res[api.ResourceStorage] = resource.MustParse(storage)
+ }
+ return res
+}
+
+func TestPVCResizeAdmission(t *testing.T) {
+ goldClassName := "gold"
+ trueVal := true
+ falseVar := false
+ goldClass := &storage.StorageClass{
+ TypeMeta: metav1.TypeMeta{
+ Kind: "StorageClass",
+ },
+ ObjectMeta: metav1.ObjectMeta{
+ Name: goldClassName,
+ },
+ Provisioner: "kubernetes.io/glusterfs",
+ AllowVolumeExpansion: &trueVal,
+ }
+ silverClassName := "silver"
+ silverClass := &storage.StorageClass{
+ TypeMeta: metav1.TypeMeta{
+ Kind: "StorageClass",
+ },
+ ObjectMeta: metav1.ObjectMeta{
+ Name: silverClassName,
+ },
+ Provisioner: "kubernetes.io/glusterfs",
+ AllowVolumeExpansion: &falseVar,
+ }
+ expectNoError := func(err error) bool {
+ return err == nil
+ }
+ expectDynamicallyProvisionedError := func(err error) bool {
+ return strings.Contains(err.Error(), "only dynamically provisioned pvc can be resized and "+
+ "the storageclass that provisions the pvc must support resize")
+ }
+ expectVolumePluginError := func(err error) bool {
+ return strings.Contains(err.Error(), "volume plugin does not support resize")
+ }
+ tests := []struct {
+ name string
+ resource schema.GroupVersionResource
+ subresource string
+ oldObj runtime.Object
+ newObj runtime.Object
+
+ checkError func(error) bool
+ }{
+ {
+ name: "pvc-resize, update, no error",
+ resource: api.SchemeGroupVersion.WithResource("persistentvolumeclaims"),
+ oldObj: &api.PersistentVolumeClaim{
+ Spec: api.PersistentVolumeClaimSpec{
+ VolumeName: "volume1",
+ Resources: api.ResourceRequirements{
+ Requests: getResourceList("1Gi"),
+ },
+ StorageClassName: &goldClassName,
+ },
+ Status: api.PersistentVolumeClaimStatus{
+ Capacity: getResourceList("1Gi"),
+ },
+ },
+ newObj: &api.PersistentVolumeClaim{
+ Spec: api.PersistentVolumeClaimSpec{
+ VolumeName: "volume1",
+ Resources: api.ResourceRequirements{
+ Requests: getResourceList("2Gi"),
+ },
+ StorageClassName: &goldClassName,
+ },
+ Status: api.PersistentVolumeClaimStatus{
+ Capacity: getResourceList("2Gi"),
+ },
+ },
+ checkError: expectNoError,
+ },
+ {
+ name: "pvc-resize, update, volume plugin error",
+ resource: api.SchemeGroupVersion.WithResource("persistentvolumeclaims"),
+ oldObj: &api.PersistentVolumeClaim{
+ Spec: api.PersistentVolumeClaimSpec{
+ VolumeName: "volume2",
+ Resources: api.ResourceRequirements{
+ Requests: getResourceList("1Gi"),
+ },
+ StorageClassName: &goldClassName,
+ },
+ Status: api.PersistentVolumeClaimStatus{
+ Capacity: getResourceList("1Gi"),
+ },
+ },
+ newObj: &api.PersistentVolumeClaim{
+ Spec: api.PersistentVolumeClaimSpec{
+ VolumeName: "volume2",
+ Resources: api.ResourceRequirements{
+ Requests: getResourceList("2Gi"),
+ },
+ StorageClassName: &goldClassName,
+ },
+ Status: api.PersistentVolumeClaimStatus{
+ Capacity: getResourceList("2Gi"),
+ },
+ },
+ checkError: expectVolumePluginError,
+ },
+ {
+ name: "pvc-resize, update, dynamically provisioned error",
+ resource: api.SchemeGroupVersion.WithResource("persistentvolumeclaims"),
+ oldObj: &api.PersistentVolumeClaim{
+ Spec: api.PersistentVolumeClaimSpec{
+ VolumeName: "volume3",
+ Resources: api.ResourceRequirements{
+ Requests: getResourceList("1Gi"),
+ },
+ },
+ Status: api.PersistentVolumeClaimStatus{
+ Capacity: getResourceList("1Gi"),
+ },
+ },
+ newObj: &api.PersistentVolumeClaim{
+ Spec: api.PersistentVolumeClaimSpec{
+ VolumeName: "volume3",
+ Resources: api.ResourceRequirements{
+ Requests: getResourceList("2Gi"),
+ },
+ },
+ Status: api.PersistentVolumeClaimStatus{
+ Capacity: getResourceList("2Gi"),
+ },
+ },
+ checkError: expectDynamicallyProvisionedError,
+ },
+ {
+ name: "pvc-resize, update, dynamically provisioned error",
+ resource: api.SchemeGroupVersion.WithResource("persistentvolumeclaims"),
+ oldObj: &api.PersistentVolumeClaim{
+ Spec: api.PersistentVolumeClaimSpec{
+ VolumeName: "volume4",
+ Resources: api.ResourceRequirements{
+ Requests: getResourceList("1Gi"),
+ },
+ StorageClassName: &silverClassName,
+ },
+ Status: api.PersistentVolumeClaimStatus{
+ Capacity: getResourceList("1Gi"),
+ },
+ },
+ newObj: &api.PersistentVolumeClaim{
+ Spec: api.PersistentVolumeClaimSpec{
+ VolumeName: "volume4",
+ Resources: api.ResourceRequirements{
+ Requests: getResourceList("2Gi"),
+ },
+ StorageClassName: &silverClassName,
+ },
+ Status: api.PersistentVolumeClaimStatus{
+ Capacity: getResourceList("2Gi"),
+ },
+ },
+ checkError: expectDynamicallyProvisionedError,
+ },
+ }
+
+ ctrl := newPlugin()
+ informerFactory := informers.NewSharedInformerFactory(nil, controller.NoResyncPeriodFunc())
+ ctrl.SetInternalKubeInformerFactory(informerFactory)
+ err := ctrl.Validate()
+ if err != nil {
+ t.Fatalf("neither pv lister nor storageclass lister can be nil")
+ }
+
+ pv1 := &api.PersistentVolume{
+ ObjectMeta: metav1.ObjectMeta{Name: "volume1"},
+ Spec: api.PersistentVolumeSpec{
+ PersistentVolumeSource: api.PersistentVolumeSource{
+ Glusterfs: &api.GlusterfsVolumeSource{
+ EndpointsName: "http://localhost:8080/",
+ Path: "/heketi",
+ ReadOnly: false,
+ },
+ },
+ StorageClassName: goldClassName,
+ },
+ }
+ pv2 := &api.PersistentVolume{
+ ObjectMeta: metav1.ObjectMeta{Name: "volume2"},
+ Spec: api.PersistentVolumeSpec{
+ PersistentVolumeSource: api.PersistentVolumeSource{
+ HostPath: &api.HostPathVolumeSource{},
+ },
+ StorageClassName: goldClassName,
+ },
+ }
+
+ pvs := []*api.PersistentVolume{}
+ pvs = append(pvs, pv1, pv2)
+
+ for _, pv := range pvs {
+ err := informerFactory.Core().InternalVersion().PersistentVolumes().Informer().GetStore().Add(pv)
+ if err != nil {
+ fmt.Println("add pv error: ", err)
+ }
+ }
+
+ scs := []*storage.StorageClass{}
+ scs = append(scs, goldClass, silverClass)
+ for _, sc := range scs {
+ err := informerFactory.Storage().InternalVersion().StorageClasses().Informer().GetStore().Add(sc)
+ if err != nil {
+ fmt.Println("add storageclass error: ", err)
+ }
+ }
+
+ for _, tc := range tests {
+ operation := admission.Update
+ attributes := admission.NewAttributesRecord(tc.newObj, tc.oldObj, schema.GroupVersionKind{}, metav1.NamespaceDefault, "foo", tc.resource, tc.subresource, operation, nil)
+
+ err := ctrl.Admit(attributes)
+ fmt.Println(tc.name)
+ fmt.Println(err)
+ if !tc.checkError(err) {
+ t.Errorf("%v: unexpected err: %v", tc.name, err)
+ }
+ }
+
+}
diff --git a/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/controller_policy.go b/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/controller_policy.go
index 6aa07e23d8b..178cf8ff453 100644
--- a/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/controller_policy.go
+++ b/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/controller_policy.go
@@ -22,7 +22,9 @@ import (
"github.com/golang/glog"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ utilfeature "k8s.io/apiserver/pkg/util/feature"
rbac "k8s.io/kubernetes/pkg/apis/rbac"
+ "k8s.io/kubernetes/pkg/features"
)
const saRolePrefix = "system:controller:"
@@ -121,6 +123,23 @@ func buildControllerRoles() ([]rbac.ClusterRole, []rbac.ClusterRoleBinding) {
eventsRule(),
},
})
+
+ if utilfeature.DefaultFeatureGate.Enabled(features.ExpandPersistentVolumes) {
+ addControllerRole(&controllerRoles, &controllerRoleBindings, rbac.ClusterRole{
+ ObjectMeta: metav1.ObjectMeta{Name: saRolePrefix + "expand-controller"},
+ Rules: []rbac.PolicyRule{
+ rbac.NewRule("get", "list", "watch", "update", "patch").Groups(legacyGroup).Resources("persistentvolumes").RuleOrDie(),
+ rbac.NewRule("update", "patch").Groups(legacyGroup).Resources("persistentvolumeclaims/status").RuleOrDie(),
+ rbac.NewRule("get", "list", "watch").Groups(legacyGroup).Resources("persistentvolumeclaims").RuleOrDie(),
+ // glusterfs
+ rbac.NewRule("get", "list", "watch").Groups(storageGroup).Resources("storageclasses").RuleOrDie(),
+ rbac.NewRule("get").Groups(legacyGroup).Resources("services", "endpoints").RuleOrDie(),
+ rbac.NewRule("get").Groups(legacyGroup).Resources("secrets").RuleOrDie(),
+ eventsRule(),
+ },
+ })
+ }
+
addControllerRole(&controllerRoles, &controllerRoleBindings, rbac.ClusterRole{
ObjectMeta: metav1.ObjectMeta{Name: saRolePrefix + "generic-garbage-collector"},
Rules: []rbac.PolicyRule{
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 2efac0eb90c..6db917375e4 100644
--- a/staging/src/k8s.io/api/core/v1/generated.pb.go
+++ b/staging/src/k8s.io/api/core/v1/generated.pb.go
@@ -122,6 +122,7 @@ limitations under the License.
ObjectReference
PersistentVolume
PersistentVolumeClaim
+ PersistentVolumeClaimCondition
PersistentVolumeClaimList
PersistentVolumeClaimSpec
PersistentVolumeClaimStatus
@@ -635,354 +636,360 @@ func (m *PersistentVolumeClaim) Reset() { *m = PersistentVolu
func (*PersistentVolumeClaim) ProtoMessage() {}
func (*PersistentVolumeClaim) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{96} }
+func (m *PersistentVolumeClaimCondition) Reset() { *m = PersistentVolumeClaimCondition{} }
+func (*PersistentVolumeClaimCondition) ProtoMessage() {}
+func (*PersistentVolumeClaimCondition) Descriptor() ([]byte, []int) {
+ return fileDescriptorGenerated, []int{97}
+}
+
func (m *PersistentVolumeClaimList) Reset() { *m = PersistentVolumeClaimList{} }
func (*PersistentVolumeClaimList) ProtoMessage() {}
func (*PersistentVolumeClaimList) Descriptor() ([]byte, []int) {
- return fileDescriptorGenerated, []int{97}
+ return fileDescriptorGenerated, []int{98}
}
func (m *PersistentVolumeClaimSpec) Reset() { *m = PersistentVolumeClaimSpec{} }
func (*PersistentVolumeClaimSpec) ProtoMessage() {}
func (*PersistentVolumeClaimSpec) Descriptor() ([]byte, []int) {
- return fileDescriptorGenerated, []int{98}
+ return fileDescriptorGenerated, []int{99}
}
func (m *PersistentVolumeClaimStatus) Reset() { *m = PersistentVolumeClaimStatus{} }
func (*PersistentVolumeClaimStatus) ProtoMessage() {}
func (*PersistentVolumeClaimStatus) Descriptor() ([]byte, []int) {
- return fileDescriptorGenerated, []int{99}
+ return fileDescriptorGenerated, []int{100}
}
func (m *PersistentVolumeClaimVolumeSource) Reset() { *m = PersistentVolumeClaimVolumeSource{} }
func (*PersistentVolumeClaimVolumeSource) ProtoMessage() {}
func (*PersistentVolumeClaimVolumeSource) Descriptor() ([]byte, []int) {
- return fileDescriptorGenerated, []int{100}
+ return fileDescriptorGenerated, []int{101}
}
func (m *PersistentVolumeList) Reset() { *m = PersistentVolumeList{} }
func (*PersistentVolumeList) ProtoMessage() {}
-func (*PersistentVolumeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{101} }
+func (*PersistentVolumeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{102} }
func (m *PersistentVolumeSource) Reset() { *m = PersistentVolumeSource{} }
func (*PersistentVolumeSource) ProtoMessage() {}
func (*PersistentVolumeSource) Descriptor() ([]byte, []int) {
- return fileDescriptorGenerated, []int{102}
+ return fileDescriptorGenerated, []int{103}
}
func (m *PersistentVolumeSpec) Reset() { *m = PersistentVolumeSpec{} }
func (*PersistentVolumeSpec) ProtoMessage() {}
-func (*PersistentVolumeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{103} }
+func (*PersistentVolumeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{104} }
func (m *PersistentVolumeStatus) Reset() { *m = PersistentVolumeStatus{} }
func (*PersistentVolumeStatus) ProtoMessage() {}
func (*PersistentVolumeStatus) Descriptor() ([]byte, []int) {
- return fileDescriptorGenerated, []int{104}
+ return fileDescriptorGenerated, []int{105}
}
func (m *PhotonPersistentDiskVolumeSource) Reset() { *m = PhotonPersistentDiskVolumeSource{} }
func (*PhotonPersistentDiskVolumeSource) ProtoMessage() {}
func (*PhotonPersistentDiskVolumeSource) Descriptor() ([]byte, []int) {
- return fileDescriptorGenerated, []int{105}
+ return fileDescriptorGenerated, []int{106}
}
func (m *Pod) Reset() { *m = Pod{} }
func (*Pod) ProtoMessage() {}
-func (*Pod) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{106} }
+func (*Pod) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{107} }
func (m *PodAffinity) Reset() { *m = PodAffinity{} }
func (*PodAffinity) ProtoMessage() {}
-func (*PodAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{107} }
+func (*PodAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{108} }
func (m *PodAffinityTerm) Reset() { *m = PodAffinityTerm{} }
func (*PodAffinityTerm) ProtoMessage() {}
-func (*PodAffinityTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{108} }
+func (*PodAffinityTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{109} }
func (m *PodAntiAffinity) Reset() { *m = PodAntiAffinity{} }
func (*PodAntiAffinity) ProtoMessage() {}
-func (*PodAntiAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{109} }
+func (*PodAntiAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{110} }
func (m *PodAttachOptions) Reset() { *m = PodAttachOptions{} }
func (*PodAttachOptions) ProtoMessage() {}
-func (*PodAttachOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{110} }
+func (*PodAttachOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{111} }
func (m *PodCondition) Reset() { *m = PodCondition{} }
func (*PodCondition) ProtoMessage() {}
-func (*PodCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{111} }
+func (*PodCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{112} }
func (m *PodExecOptions) Reset() { *m = PodExecOptions{} }
func (*PodExecOptions) ProtoMessage() {}
-func (*PodExecOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{112} }
+func (*PodExecOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{113} }
func (m *PodList) Reset() { *m = PodList{} }
func (*PodList) ProtoMessage() {}
-func (*PodList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{113} }
+func (*PodList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{114} }
func (m *PodLogOptions) Reset() { *m = PodLogOptions{} }
func (*PodLogOptions) ProtoMessage() {}
-func (*PodLogOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{114} }
+func (*PodLogOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{115} }
func (m *PodPortForwardOptions) Reset() { *m = PodPortForwardOptions{} }
func (*PodPortForwardOptions) ProtoMessage() {}
-func (*PodPortForwardOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{115} }
+func (*PodPortForwardOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{116} }
func (m *PodProxyOptions) Reset() { *m = PodProxyOptions{} }
func (*PodProxyOptions) ProtoMessage() {}
-func (*PodProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{116} }
+func (*PodProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{117} }
func (m *PodSecurityContext) Reset() { *m = PodSecurityContext{} }
func (*PodSecurityContext) ProtoMessage() {}
-func (*PodSecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{117} }
+func (*PodSecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{118} }
func (m *PodSignature) Reset() { *m = PodSignature{} }
func (*PodSignature) ProtoMessage() {}
-func (*PodSignature) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{118} }
+func (*PodSignature) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{119} }
func (m *PodSpec) Reset() { *m = PodSpec{} }
func (*PodSpec) ProtoMessage() {}
-func (*PodSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{119} }
+func (*PodSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{120} }
func (m *PodStatus) Reset() { *m = PodStatus{} }
func (*PodStatus) ProtoMessage() {}
-func (*PodStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{120} }
+func (*PodStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{121} }
func (m *PodStatusResult) Reset() { *m = PodStatusResult{} }
func (*PodStatusResult) ProtoMessage() {}
-func (*PodStatusResult) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{121} }
+func (*PodStatusResult) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{122} }
func (m *PodTemplate) Reset() { *m = PodTemplate{} }
func (*PodTemplate) ProtoMessage() {}
-func (*PodTemplate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{122} }
+func (*PodTemplate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{123} }
func (m *PodTemplateList) Reset() { *m = PodTemplateList{} }
func (*PodTemplateList) ProtoMessage() {}
-func (*PodTemplateList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{123} }
+func (*PodTemplateList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{124} }
func (m *PodTemplateSpec) Reset() { *m = PodTemplateSpec{} }
func (*PodTemplateSpec) ProtoMessage() {}
-func (*PodTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{124} }
+func (*PodTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{125} }
func (m *PortworxVolumeSource) Reset() { *m = PortworxVolumeSource{} }
func (*PortworxVolumeSource) ProtoMessage() {}
-func (*PortworxVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{125} }
+func (*PortworxVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{126} }
func (m *Preconditions) Reset() { *m = Preconditions{} }
func (*Preconditions) ProtoMessage() {}
-func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{126} }
+func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{127} }
func (m *PreferAvoidPodsEntry) Reset() { *m = PreferAvoidPodsEntry{} }
func (*PreferAvoidPodsEntry) ProtoMessage() {}
-func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{127} }
+func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{128} }
func (m *PreferredSchedulingTerm) Reset() { *m = PreferredSchedulingTerm{} }
func (*PreferredSchedulingTerm) ProtoMessage() {}
func (*PreferredSchedulingTerm) Descriptor() ([]byte, []int) {
- return fileDescriptorGenerated, []int{128}
+ return fileDescriptorGenerated, []int{129}
}
func (m *Probe) Reset() { *m = Probe{} }
func (*Probe) ProtoMessage() {}
-func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{129} }
+func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{130} }
func (m *ProjectedVolumeSource) Reset() { *m = ProjectedVolumeSource{} }
func (*ProjectedVolumeSource) ProtoMessage() {}
-func (*ProjectedVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{130} }
+func (*ProjectedVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{131} }
func (m *QuobyteVolumeSource) Reset() { *m = QuobyteVolumeSource{} }
func (*QuobyteVolumeSource) ProtoMessage() {}
-func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{131} }
+func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{132} }
func (m *RBDVolumeSource) Reset() { *m = RBDVolumeSource{} }
func (*RBDVolumeSource) ProtoMessage() {}
-func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{132} }
+func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} }
func (m *RangeAllocation) Reset() { *m = RangeAllocation{} }
func (*RangeAllocation) ProtoMessage() {}
-func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} }
+func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} }
func (m *ReplicationController) Reset() { *m = ReplicationController{} }
func (*ReplicationController) ProtoMessage() {}
-func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} }
+func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} }
func (m *ReplicationControllerCondition) Reset() { *m = ReplicationControllerCondition{} }
func (*ReplicationControllerCondition) ProtoMessage() {}
func (*ReplicationControllerCondition) Descriptor() ([]byte, []int) {
- return fileDescriptorGenerated, []int{135}
+ return fileDescriptorGenerated, []int{136}
}
func (m *ReplicationControllerList) Reset() { *m = ReplicationControllerList{} }
func (*ReplicationControllerList) ProtoMessage() {}
func (*ReplicationControllerList) Descriptor() ([]byte, []int) {
- return fileDescriptorGenerated, []int{136}
+ return fileDescriptorGenerated, []int{137}
}
func (m *ReplicationControllerSpec) Reset() { *m = ReplicationControllerSpec{} }
func (*ReplicationControllerSpec) ProtoMessage() {}
func (*ReplicationControllerSpec) Descriptor() ([]byte, []int) {
- return fileDescriptorGenerated, []int{137}
+ return fileDescriptorGenerated, []int{138}
}
func (m *ReplicationControllerStatus) Reset() { *m = ReplicationControllerStatus{} }
func (*ReplicationControllerStatus) ProtoMessage() {}
func (*ReplicationControllerStatus) Descriptor() ([]byte, []int) {
- return fileDescriptorGenerated, []int{138}
+ return fileDescriptorGenerated, []int{139}
}
func (m *ResourceFieldSelector) Reset() { *m = ResourceFieldSelector{} }
func (*ResourceFieldSelector) ProtoMessage() {}
-func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{139} }
+func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{140} }
func (m *ResourceQuota) Reset() { *m = ResourceQuota{} }
func (*ResourceQuota) ProtoMessage() {}
-func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{140} }
+func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{141} }
func (m *ResourceQuotaList) Reset() { *m = ResourceQuotaList{} }
func (*ResourceQuotaList) ProtoMessage() {}
-func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{141} }
+func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{142} }
func (m *ResourceQuotaSpec) Reset() { *m = ResourceQuotaSpec{} }
func (*ResourceQuotaSpec) ProtoMessage() {}
-func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{142} }
+func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{143} }
func (m *ResourceQuotaStatus) Reset() { *m = ResourceQuotaStatus{} }
func (*ResourceQuotaStatus) ProtoMessage() {}
-func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{143} }
+func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{144} }
func (m *ResourceRequirements) Reset() { *m = ResourceRequirements{} }
func (*ResourceRequirements) ProtoMessage() {}
-func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{144} }
+func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{145} }
func (m *SELinuxOptions) Reset() { *m = SELinuxOptions{} }
func (*SELinuxOptions) ProtoMessage() {}
-func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{145} }
+func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{146} }
func (m *ScaleIOVolumeSource) Reset() { *m = ScaleIOVolumeSource{} }
func (*ScaleIOVolumeSource) ProtoMessage() {}
-func (*ScaleIOVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{146} }
+func (*ScaleIOVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{147} }
func (m *Secret) Reset() { *m = Secret{} }
func (*Secret) ProtoMessage() {}
-func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{147} }
+func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{148} }
func (m *SecretEnvSource) Reset() { *m = SecretEnvSource{} }
func (*SecretEnvSource) ProtoMessage() {}
-func (*SecretEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{148} }
+func (*SecretEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{149} }
func (m *SecretKeySelector) Reset() { *m = SecretKeySelector{} }
func (*SecretKeySelector) ProtoMessage() {}
-func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{149} }
+func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} }
func (m *SecretList) Reset() { *m = SecretList{} }
func (*SecretList) ProtoMessage() {}
-func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} }
+func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} }
func (m *SecretProjection) Reset() { *m = SecretProjection{} }
func (*SecretProjection) ProtoMessage() {}
-func (*SecretProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} }
+func (*SecretProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{152} }
func (m *SecretReference) Reset() { *m = SecretReference{} }
func (*SecretReference) ProtoMessage() {}
-func (*SecretReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{152} }
+func (*SecretReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} }
func (m *SecretVolumeSource) Reset() { *m = SecretVolumeSource{} }
func (*SecretVolumeSource) ProtoMessage() {}
-func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} }
+func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{154} }
func (m *SecurityContext) Reset() { *m = SecurityContext{} }
func (*SecurityContext) ProtoMessage() {}
-func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{154} }
+func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{155} }
func (m *SerializedReference) Reset() { *m = SerializedReference{} }
func (*SerializedReference) ProtoMessage() {}
-func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{155} }
+func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{156} }
func (m *Service) Reset() { *m = Service{} }
func (*Service) ProtoMessage() {}
-func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{156} }
+func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{157} }
func (m *ServiceAccount) Reset() { *m = ServiceAccount{} }
func (*ServiceAccount) ProtoMessage() {}
-func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{157} }
+func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{158} }
func (m *ServiceAccountList) Reset() { *m = ServiceAccountList{} }
func (*ServiceAccountList) ProtoMessage() {}
-func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{158} }
+func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{159} }
func (m *ServiceList) Reset() { *m = ServiceList{} }
func (*ServiceList) ProtoMessage() {}
-func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{159} }
+func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{160} }
func (m *ServicePort) Reset() { *m = ServicePort{} }
func (*ServicePort) ProtoMessage() {}
-func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{160} }
+func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{161} }
func (m *ServiceProxyOptions) Reset() { *m = ServiceProxyOptions{} }
func (*ServiceProxyOptions) ProtoMessage() {}
-func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{161} }
+func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{162} }
func (m *ServiceSpec) Reset() { *m = ServiceSpec{} }
func (*ServiceSpec) ProtoMessage() {}
-func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{162} }
+func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{163} }
func (m *ServiceStatus) Reset() { *m = ServiceStatus{} }
func (*ServiceStatus) ProtoMessage() {}
-func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{163} }
+func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{164} }
func (m *SessionAffinityConfig) Reset() { *m = SessionAffinityConfig{} }
func (*SessionAffinityConfig) ProtoMessage() {}
-func (*SessionAffinityConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{164} }
+func (*SessionAffinityConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{165} }
func (m *StorageOSPersistentVolumeSource) Reset() { *m = StorageOSPersistentVolumeSource{} }
func (*StorageOSPersistentVolumeSource) ProtoMessage() {}
func (*StorageOSPersistentVolumeSource) Descriptor() ([]byte, []int) {
- return fileDescriptorGenerated, []int{165}
+ return fileDescriptorGenerated, []int{166}
}
func (m *StorageOSVolumeSource) Reset() { *m = StorageOSVolumeSource{} }
func (*StorageOSVolumeSource) ProtoMessage() {}
-func (*StorageOSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{166} }
+func (*StorageOSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{167} }
func (m *Sysctl) Reset() { *m = Sysctl{} }
func (*Sysctl) ProtoMessage() {}
-func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{167} }
+func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{168} }
func (m *TCPSocketAction) Reset() { *m = TCPSocketAction{} }
func (*TCPSocketAction) ProtoMessage() {}
-func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{168} }
+func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{169} }
func (m *Taint) Reset() { *m = Taint{} }
func (*Taint) ProtoMessage() {}
-func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{169} }
+func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{170} }
func (m *Toleration) Reset() { *m = Toleration{} }
func (*Toleration) ProtoMessage() {}
-func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{170} }
+func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{171} }
func (m *Volume) Reset() { *m = Volume{} }
func (*Volume) ProtoMessage() {}
-func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{171} }
+func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{172} }
func (m *VolumeMount) Reset() { *m = VolumeMount{} }
func (*VolumeMount) ProtoMessage() {}
-func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{172} }
+func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{173} }
func (m *VolumeProjection) Reset() { *m = VolumeProjection{} }
func (*VolumeProjection) ProtoMessage() {}
-func (*VolumeProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{173} }
+func (*VolumeProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{174} }
func (m *VolumeSource) Reset() { *m = VolumeSource{} }
func (*VolumeSource) ProtoMessage() {}
-func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{174} }
+func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{175} }
func (m *VsphereVirtualDiskVolumeSource) Reset() { *m = VsphereVirtualDiskVolumeSource{} }
func (*VsphereVirtualDiskVolumeSource) ProtoMessage() {}
func (*VsphereVirtualDiskVolumeSource) Descriptor() ([]byte, []int) {
- return fileDescriptorGenerated, []int{175}
+ return fileDescriptorGenerated, []int{176}
}
func (m *WeightedPodAffinityTerm) Reset() { *m = WeightedPodAffinityTerm{} }
func (*WeightedPodAffinityTerm) ProtoMessage() {}
func (*WeightedPodAffinityTerm) Descriptor() ([]byte, []int) {
- return fileDescriptorGenerated, []int{176}
+ return fileDescriptorGenerated, []int{177}
}
func init() {
@@ -1083,6 +1090,7 @@ func init() {
proto.RegisterType((*ObjectReference)(nil), "k8s.io.api.core.v1.ObjectReference")
proto.RegisterType((*PersistentVolume)(nil), "k8s.io.api.core.v1.PersistentVolume")
proto.RegisterType((*PersistentVolumeClaim)(nil), "k8s.io.api.core.v1.PersistentVolumeClaim")
+ proto.RegisterType((*PersistentVolumeClaimCondition)(nil), "k8s.io.api.core.v1.PersistentVolumeClaimCondition")
proto.RegisterType((*PersistentVolumeClaimList)(nil), "k8s.io.api.core.v1.PersistentVolumeClaimList")
proto.RegisterType((*PersistentVolumeClaimSpec)(nil), "k8s.io.api.core.v1.PersistentVolumeClaimSpec")
proto.RegisterType((*PersistentVolumeClaimStatus)(nil), "k8s.io.api.core.v1.PersistentVolumeClaimStatus")
@@ -5538,6 +5546,56 @@ func (m *PersistentVolumeClaim) MarshalTo(dAtA []byte) (int, error) {
return i, nil
}
+func (m *PersistentVolumeClaimCondition) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalTo(dAtA)
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *PersistentVolumeClaimCondition) MarshalTo(dAtA []byte) (int, error) {
+ var i int
+ _ = i
+ var l int
+ _ = l
+ dAtA[i] = 0xa
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type)))
+ i += copy(dAtA[i:], m.Type)
+ dAtA[i] = 0x12
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Status)))
+ i += copy(dAtA[i:], m.Status)
+ dAtA[i] = 0x1a
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(m.LastProbeTime.Size()))
+ n94, err := m.LastProbeTime.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n94
+ dAtA[i] = 0x22
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size()))
+ n95, err := m.LastTransitionTime.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n95
+ dAtA[i] = 0x2a
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason)))
+ i += copy(dAtA[i:], m.Reason)
+ dAtA[i] = 0x32
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message)))
+ i += copy(dAtA[i:], m.Message)
+ return i, nil
+}
+
func (m *PersistentVolumeClaimList) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -5556,11 +5614,11 @@ func (m *PersistentVolumeClaimList) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size()))
- n94, err := m.ListMeta.MarshalTo(dAtA[i:])
+ n96, err := m.ListMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n94
+ i += n96
if len(m.Items) > 0 {
for _, msg := range m.Items {
dAtA[i] = 0x12
@@ -5609,11 +5667,11 @@ func (m *PersistentVolumeClaimSpec) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.Resources.Size()))
- n95, err := m.Resources.MarshalTo(dAtA[i:])
+ n97, err := m.Resources.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n95
+ i += n97
dAtA[i] = 0x1a
i++
i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeName)))
@@ -5622,11 +5680,11 @@ func (m *PersistentVolumeClaimSpec) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x22
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size()))
- n96, err := m.Selector.MarshalTo(dAtA[i:])
+ n98, err := m.Selector.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n96
+ i += n98
}
if m.StorageClassName != nil {
dAtA[i] = 0x2a
@@ -5695,11 +5753,23 @@ func (m *PersistentVolumeClaimStatus) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64((&v).Size()))
- n97, err := (&v).MarshalTo(dAtA[i:])
+ n99, err := (&v).MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n97
+ i += n99
+ }
+ }
+ if len(m.Conditions) > 0 {
+ for _, msg := range m.Conditions {
+ dAtA[i] = 0x22
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(msg.Size()))
+ n, err := msg.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n
}
}
return i, nil
@@ -5753,11 +5823,11 @@ func (m *PersistentVolumeList) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size()))
- n98, err := m.ListMeta.MarshalTo(dAtA[i:])
+ n100, err := m.ListMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n98
+ i += n100
if len(m.Items) > 0 {
for _, msg := range m.Items {
dAtA[i] = 0x12
@@ -5792,163 +5862,163 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.GCEPersistentDisk.Size()))
- n99, err := m.GCEPersistentDisk.MarshalTo(dAtA[i:])
- if err != nil {
- return 0, err
- }
- i += n99
- }
- if m.AWSElasticBlockStore != nil {
- dAtA[i] = 0x12
- i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.AWSElasticBlockStore.Size()))
- n100, err := m.AWSElasticBlockStore.MarshalTo(dAtA[i:])
- if err != nil {
- return 0, err
- }
- i += n100
- }
- if m.HostPath != nil {
- dAtA[i] = 0x1a
- i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.HostPath.Size()))
- n101, err := m.HostPath.MarshalTo(dAtA[i:])
+ n101, err := m.GCEPersistentDisk.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n101
}
- if m.Glusterfs != nil {
- dAtA[i] = 0x22
+ if m.AWSElasticBlockStore != nil {
+ dAtA[i] = 0x12
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.Glusterfs.Size()))
- n102, err := m.Glusterfs.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.AWSElasticBlockStore.Size()))
+ n102, err := m.AWSElasticBlockStore.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n102
}
- if m.NFS != nil {
- dAtA[i] = 0x2a
+ if m.HostPath != nil {
+ dAtA[i] = 0x1a
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.NFS.Size()))
- n103, err := m.NFS.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.HostPath.Size()))
+ n103, err := m.HostPath.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n103
}
- if m.RBD != nil {
- dAtA[i] = 0x32
+ if m.Glusterfs != nil {
+ dAtA[i] = 0x22
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.RBD.Size()))
- n104, err := m.RBD.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.Glusterfs.Size()))
+ n104, err := m.Glusterfs.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n104
}
- if m.ISCSI != nil {
- dAtA[i] = 0x3a
+ if m.NFS != nil {
+ dAtA[i] = 0x2a
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.ISCSI.Size()))
- n105, err := m.ISCSI.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.NFS.Size()))
+ n105, err := m.NFS.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n105
}
- if m.Cinder != nil {
- dAtA[i] = 0x42
+ if m.RBD != nil {
+ dAtA[i] = 0x32
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.Cinder.Size()))
- n106, err := m.Cinder.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.RBD.Size()))
+ n106, err := m.RBD.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n106
}
- if m.CephFS != nil {
- dAtA[i] = 0x4a
+ if m.ISCSI != nil {
+ dAtA[i] = 0x3a
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.CephFS.Size()))
- n107, err := m.CephFS.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.ISCSI.Size()))
+ n107, err := m.ISCSI.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n107
}
- if m.FC != nil {
- dAtA[i] = 0x52
+ if m.Cinder != nil {
+ dAtA[i] = 0x42
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.FC.Size()))
- n108, err := m.FC.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.Cinder.Size()))
+ n108, err := m.Cinder.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n108
}
- if m.Flocker != nil {
- dAtA[i] = 0x5a
+ if m.CephFS != nil {
+ dAtA[i] = 0x4a
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.Flocker.Size()))
- n109, err := m.Flocker.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.CephFS.Size()))
+ n109, err := m.CephFS.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n109
}
- if m.FlexVolume != nil {
- dAtA[i] = 0x62
+ if m.FC != nil {
+ dAtA[i] = 0x52
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.FlexVolume.Size()))
- n110, err := m.FlexVolume.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.FC.Size()))
+ n110, err := m.FC.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n110
}
- if m.AzureFile != nil {
- dAtA[i] = 0x6a
+ if m.Flocker != nil {
+ dAtA[i] = 0x5a
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.AzureFile.Size()))
- n111, err := m.AzureFile.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.Flocker.Size()))
+ n111, err := m.Flocker.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n111
}
- if m.VsphereVolume != nil {
- dAtA[i] = 0x72
+ if m.FlexVolume != nil {
+ dAtA[i] = 0x62
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.VsphereVolume.Size()))
- n112, err := m.VsphereVolume.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.FlexVolume.Size()))
+ n112, err := m.FlexVolume.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n112
}
- if m.Quobyte != nil {
- dAtA[i] = 0x7a
+ if m.AzureFile != nil {
+ dAtA[i] = 0x6a
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.Quobyte.Size()))
- n113, err := m.Quobyte.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.AzureFile.Size()))
+ n113, err := m.AzureFile.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n113
}
+ if m.VsphereVolume != nil {
+ dAtA[i] = 0x72
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(m.VsphereVolume.Size()))
+ n114, err := m.VsphereVolume.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n114
+ }
+ if m.Quobyte != nil {
+ dAtA[i] = 0x7a
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(m.Quobyte.Size()))
+ n115, err := m.Quobyte.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n115
+ }
if m.AzureDisk != nil {
dAtA[i] = 0x82
i++
dAtA[i] = 0x1
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.AzureDisk.Size()))
- n114, err := m.AzureDisk.MarshalTo(dAtA[i:])
+ n116, err := m.AzureDisk.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n114
+ i += n116
}
if m.PhotonPersistentDisk != nil {
dAtA[i] = 0x8a
@@ -5956,11 +6026,11 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.PhotonPersistentDisk.Size()))
- n115, err := m.PhotonPersistentDisk.MarshalTo(dAtA[i:])
+ n117, err := m.PhotonPersistentDisk.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n115
+ i += n117
}
if m.PortworxVolume != nil {
dAtA[i] = 0x92
@@ -5968,11 +6038,11 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.PortworxVolume.Size()))
- n116, err := m.PortworxVolume.MarshalTo(dAtA[i:])
+ n118, err := m.PortworxVolume.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n116
+ i += n118
}
if m.ScaleIO != nil {
dAtA[i] = 0x9a
@@ -5980,11 +6050,11 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ScaleIO.Size()))
- n117, err := m.ScaleIO.MarshalTo(dAtA[i:])
+ n119, err := m.ScaleIO.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n117
+ i += n119
}
if m.Local != nil {
dAtA[i] = 0xa2
@@ -5992,11 +6062,11 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.Local.Size()))
- n118, err := m.Local.MarshalTo(dAtA[i:])
+ n120, err := m.Local.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n118
+ i += n120
}
if m.StorageOS != nil {
dAtA[i] = 0xaa
@@ -6004,11 +6074,11 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.StorageOS.Size()))
- n119, err := m.StorageOS.MarshalTo(dAtA[i:])
+ n121, err := m.StorageOS.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n119
+ i += n121
}
return i, nil
}
@@ -6052,21 +6122,21 @@ func (m *PersistentVolumeSpec) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64((&v).Size()))
- n120, err := (&v).MarshalTo(dAtA[i:])
+ n122, err := (&v).MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n120
+ i += n122
}
}
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.PersistentVolumeSource.Size()))
- n121, err := m.PersistentVolumeSource.MarshalTo(dAtA[i:])
+ n123, err := m.PersistentVolumeSource.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n121
+ i += n123
if len(m.AccessModes) > 0 {
for _, s := range m.AccessModes {
dAtA[i] = 0x1a
@@ -6086,11 +6156,11 @@ func (m *PersistentVolumeSpec) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x22
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ClaimRef.Size()))
- n122, err := m.ClaimRef.MarshalTo(dAtA[i:])
+ n124, err := m.ClaimRef.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n122
+ i += n124
}
dAtA[i] = 0x2a
i++
@@ -6192,27 +6262,27 @@ func (m *Pod) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size()))
- n123, err := m.ObjectMeta.MarshalTo(dAtA[i:])
- if err != nil {
- return 0, err
- }
- i += n123
- dAtA[i] = 0x12
- i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size()))
- n124, err := m.Spec.MarshalTo(dAtA[i:])
- if err != nil {
- return 0, err
- }
- i += n124
- dAtA[i] = 0x1a
- i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size()))
- n125, err := m.Status.MarshalTo(dAtA[i:])
+ n125, err := m.ObjectMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n125
+ dAtA[i] = 0x12
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size()))
+ n126, err := m.Spec.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n126
+ dAtA[i] = 0x1a
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size()))
+ n127, err := m.Status.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n127
return i, nil
}
@@ -6277,11 +6347,11 @@ func (m *PodAffinityTerm) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.LabelSelector.Size()))
- n126, err := m.LabelSelector.MarshalTo(dAtA[i:])
+ n128, err := m.LabelSelector.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n126
+ i += n128
}
if len(m.Namespaces) > 0 {
for _, s := range m.Namespaces {
@@ -6427,19 +6497,19 @@ func (m *PodCondition) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1a
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.LastProbeTime.Size()))
- n127, err := m.LastProbeTime.MarshalTo(dAtA[i:])
+ n129, err := m.LastProbeTime.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n127
+ i += n129
dAtA[i] = 0x22
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size()))
- n128, err := m.LastTransitionTime.MarshalTo(dAtA[i:])
+ n130, err := m.LastTransitionTime.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n128
+ i += n130
dAtA[i] = 0x2a
i++
i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason)))
@@ -6538,11 +6608,11 @@ func (m *PodList) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size()))
- n129, err := m.ListMeta.MarshalTo(dAtA[i:])
+ n131, err := m.ListMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n129
+ i += n131
if len(m.Items) > 0 {
for _, msg := range m.Items {
dAtA[i] = 0x12
@@ -6602,11 +6672,11 @@ func (m *PodLogOptions) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2a
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.SinceTime.Size()))
- n130, err := m.SinceTime.MarshalTo(dAtA[i:])
+ n132, err := m.SinceTime.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n130
+ i += n132
}
dAtA[i] = 0x30
i++
@@ -6695,11 +6765,11 @@ func (m *PodSecurityContext) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.SELinuxOptions.Size()))
- n131, err := m.SELinuxOptions.MarshalTo(dAtA[i:])
+ n133, err := m.SELinuxOptions.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n131
+ i += n133
}
if m.RunAsUser != nil {
dAtA[i] = 0x10
@@ -6750,11 +6820,11 @@ func (m *PodSignature) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.PodController.Size()))
- n132, err := m.PodController.MarshalTo(dAtA[i:])
+ n134, err := m.PodController.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n132
+ i += n134
}
return i, nil
}
@@ -6878,11 +6948,11 @@ func (m *PodSpec) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x72
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.SecurityContext.Size()))
- n133, err := m.SecurityContext.MarshalTo(dAtA[i:])
+ n135, err := m.SecurityContext.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n133
+ i += n135
}
if len(m.ImagePullSecrets) > 0 {
for _, msg := range m.ImagePullSecrets {
@@ -6914,11 +6984,11 @@ func (m *PodSpec) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.Affinity.Size()))
- n134, err := m.Affinity.MarshalTo(dAtA[i:])
+ n136, err := m.Affinity.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n134
+ i += n136
}
dAtA[i] = 0x9a
i++
@@ -7047,11 +7117,11 @@ func (m *PodStatus) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x3a
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.StartTime.Size()))
- n135, err := m.StartTime.MarshalTo(dAtA[i:])
+ n137, err := m.StartTime.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n135
+ i += n137
}
if len(m.ContainerStatuses) > 0 {
for _, msg := range m.ContainerStatuses {
@@ -7102,19 +7172,19 @@ func (m *PodStatusResult) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size()))
- n136, err := m.ObjectMeta.MarshalTo(dAtA[i:])
+ n138, err := m.ObjectMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n136
+ i += n138
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size()))
- n137, err := m.Status.MarshalTo(dAtA[i:])
+ n139, err := m.Status.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n137
+ i += n139
return i, nil
}
@@ -7136,19 +7206,19 @@ func (m *PodTemplate) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size()))
- n138, err := m.ObjectMeta.MarshalTo(dAtA[i:])
+ n140, err := m.ObjectMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n138
+ i += n140
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size()))
- n139, err := m.Template.MarshalTo(dAtA[i:])
+ n141, err := m.Template.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n139
+ i += n141
return i, nil
}
@@ -7170,11 +7240,11 @@ func (m *PodTemplateList) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size()))
- n140, err := m.ListMeta.MarshalTo(dAtA[i:])
+ n142, err := m.ListMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n140
+ i += n142
if len(m.Items) > 0 {
for _, msg := range m.Items {
dAtA[i] = 0x12
@@ -7208,19 +7278,19 @@ func (m *PodTemplateSpec) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size()))
- n141, err := m.ObjectMeta.MarshalTo(dAtA[i:])
+ n143, err := m.ObjectMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n141
+ i += n143
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size()))
- n142, err := m.Spec.MarshalTo(dAtA[i:])
+ n144, err := m.Spec.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n142
+ i += n144
return i, nil
}
@@ -7300,19 +7370,19 @@ func (m *PreferAvoidPodsEntry) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.PodSignature.Size()))
- n143, err := m.PodSignature.MarshalTo(dAtA[i:])
+ n145, err := m.PodSignature.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n143
+ i += n145
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.EvictionTime.Size()))
- n144, err := m.EvictionTime.MarshalTo(dAtA[i:])
+ n146, err := m.EvictionTime.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n144
+ i += n146
dAtA[i] = 0x1a
i++
i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason)))
@@ -7345,11 +7415,11 @@ func (m *PreferredSchedulingTerm) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.Preference.Size()))
- n145, err := m.Preference.MarshalTo(dAtA[i:])
+ n147, err := m.Preference.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n145
+ i += n147
return i, nil
}
@@ -7371,11 +7441,11 @@ func (m *Probe) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.Handler.Size()))
- n146, err := m.Handler.MarshalTo(dAtA[i:])
+ n148, err := m.Handler.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n146
+ i += n148
dAtA[i] = 0x10
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.InitialDelaySeconds))
@@ -7525,11 +7595,11 @@ func (m *RBDVolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x3a
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size()))
- n147, err := m.SecretRef.MarshalTo(dAtA[i:])
+ n149, err := m.SecretRef.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n147
+ i += n149
}
dAtA[i] = 0x40
i++
@@ -7560,11 +7630,11 @@ func (m *RangeAllocation) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size()))
- n148, err := m.ObjectMeta.MarshalTo(dAtA[i:])
+ n150, err := m.ObjectMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n148
+ i += n150
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64(len(m.Range)))
@@ -7596,27 +7666,27 @@ func (m *ReplicationController) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size()))
- n149, err := m.ObjectMeta.MarshalTo(dAtA[i:])
- if err != nil {
- return 0, err
- }
- i += n149
- dAtA[i] = 0x12
- i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size()))
- n150, err := m.Spec.MarshalTo(dAtA[i:])
- if err != nil {
- return 0, err
- }
- i += n150
- dAtA[i] = 0x1a
- i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size()))
- n151, err := m.Status.MarshalTo(dAtA[i:])
+ n151, err := m.ObjectMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n151
+ dAtA[i] = 0x12
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size()))
+ n152, err := m.Spec.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n152
+ dAtA[i] = 0x1a
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size()))
+ n153, err := m.Status.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n153
return i, nil
}
@@ -7646,11 +7716,11 @@ func (m *ReplicationControllerCondition) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1a
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size()))
- n152, err := m.LastTransitionTime.MarshalTo(dAtA[i:])
+ n154, err := m.LastTransitionTime.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n152
+ i += n154
dAtA[i] = 0x22
i++
i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason)))
@@ -7680,11 +7750,11 @@ func (m *ReplicationControllerList) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size()))
- n153, err := m.ListMeta.MarshalTo(dAtA[i:])
+ n155, err := m.ListMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n153
+ i += n155
if len(m.Items) > 0 {
for _, msg := range m.Items {
dAtA[i] = 0x12
@@ -7746,11 +7816,11 @@ func (m *ReplicationControllerSpec) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1a
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size()))
- n154, err := m.Template.MarshalTo(dAtA[i:])
+ n156, err := m.Template.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n154
+ i += n156
}
dAtA[i] = 0x20
i++
@@ -7829,11 +7899,11 @@ func (m *ResourceFieldSelector) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1a
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.Divisor.Size()))
- n155, err := m.Divisor.MarshalTo(dAtA[i:])
+ n157, err := m.Divisor.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n155
+ i += n157
return i, nil
}
@@ -7855,27 +7925,27 @@ func (m *ResourceQuota) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size()))
- n156, err := m.ObjectMeta.MarshalTo(dAtA[i:])
- if err != nil {
- return 0, err
- }
- i += n156
- dAtA[i] = 0x12
- i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size()))
- n157, err := m.Spec.MarshalTo(dAtA[i:])
- if err != nil {
- return 0, err
- }
- i += n157
- dAtA[i] = 0x1a
- i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size()))
- n158, err := m.Status.MarshalTo(dAtA[i:])
+ n158, err := m.ObjectMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n158
+ dAtA[i] = 0x12
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size()))
+ n159, err := m.Spec.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n159
+ dAtA[i] = 0x1a
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size()))
+ n160, err := m.Status.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n160
return i, nil
}
@@ -7897,11 +7967,11 @@ func (m *ResourceQuotaList) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size()))
- n159, err := m.ListMeta.MarshalTo(dAtA[i:])
+ n161, err := m.ListMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n159
+ i += n161
if len(m.Items) > 0 {
for _, msg := range m.Items {
dAtA[i] = 0x12
@@ -7956,11 +8026,11 @@ func (m *ResourceQuotaSpec) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64((&v).Size()))
- n160, err := (&v).MarshalTo(dAtA[i:])
+ n162, err := (&v).MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n160
+ i += n162
}
}
if len(m.Scopes) > 0 {
@@ -8020,11 +8090,11 @@ func (m *ResourceQuotaStatus) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64((&v).Size()))
- n161, err := (&v).MarshalTo(dAtA[i:])
+ n163, err := (&v).MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n161
+ i += n163
}
}
if len(m.Used) > 0 {
@@ -8051,11 +8121,11 @@ func (m *ResourceQuotaStatus) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64((&v).Size()))
- n162, err := (&v).MarshalTo(dAtA[i:])
+ n164, err := (&v).MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n162
+ i += n164
}
}
return i, nil
@@ -8100,11 +8170,11 @@ func (m *ResourceRequirements) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64((&v).Size()))
- n163, err := (&v).MarshalTo(dAtA[i:])
+ n165, err := (&v).MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n163
+ i += n165
}
}
if len(m.Requests) > 0 {
@@ -8131,11 +8201,11 @@ func (m *ResourceRequirements) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64((&v).Size()))
- n164, err := (&v).MarshalTo(dAtA[i:])
+ n166, err := (&v).MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n164
+ i += n166
}
}
return i, nil
@@ -8202,11 +8272,11 @@ func (m *ScaleIOVolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1a
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size()))
- n165, err := m.SecretRef.MarshalTo(dAtA[i:])
+ n167, err := m.SecretRef.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n165
+ i += n167
}
dAtA[i] = 0x20
i++
@@ -8265,11 +8335,11 @@ func (m *Secret) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size()))
- n166, err := m.ObjectMeta.MarshalTo(dAtA[i:])
+ n168, err := m.ObjectMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n166
+ i += n168
if len(m.Data) > 0 {
keysForData := make([]string, 0, len(m.Data))
for k := range m.Data {
@@ -8345,11 +8415,11 @@ func (m *SecretEnvSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size()))
- n167, err := m.LocalObjectReference.MarshalTo(dAtA[i:])
+ n169, err := m.LocalObjectReference.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n167
+ i += n169
if m.Optional != nil {
dAtA[i] = 0x10
i++
@@ -8381,11 +8451,11 @@ func (m *SecretKeySelector) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size()))
- n168, err := m.LocalObjectReference.MarshalTo(dAtA[i:])
+ n170, err := m.LocalObjectReference.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n168
+ i += n170
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key)))
@@ -8421,11 +8491,11 @@ func (m *SecretList) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size()))
- n169, err := m.ListMeta.MarshalTo(dAtA[i:])
+ n171, err := m.ListMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n169
+ i += n171
if len(m.Items) > 0 {
for _, msg := range m.Items {
dAtA[i] = 0x12
@@ -8459,11 +8529,11 @@ func (m *SecretProjection) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size()))
- n170, err := m.LocalObjectReference.MarshalTo(dAtA[i:])
+ n172, err := m.LocalObjectReference.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n170
+ i += n172
if len(m.Items) > 0 {
for _, msg := range m.Items {
dAtA[i] = 0x12
@@ -8583,11 +8653,11 @@ func (m *SecurityContext) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.Capabilities.Size()))
- n171, err := m.Capabilities.MarshalTo(dAtA[i:])
+ n173, err := m.Capabilities.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n171
+ i += n173
}
if m.Privileged != nil {
dAtA[i] = 0x10
@@ -8603,11 +8673,11 @@ func (m *SecurityContext) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1a
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.SELinuxOptions.Size()))
- n172, err := m.SELinuxOptions.MarshalTo(dAtA[i:])
+ n174, err := m.SELinuxOptions.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n172
+ i += n174
}
if m.RunAsUser != nil {
dAtA[i] = 0x20
@@ -8665,11 +8735,11 @@ func (m *SerializedReference) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.Reference.Size()))
- n173, err := m.Reference.MarshalTo(dAtA[i:])
+ n175, err := m.Reference.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n173
+ i += n175
return i, nil
}
@@ -8691,27 +8761,27 @@ func (m *Service) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size()))
- n174, err := m.ObjectMeta.MarshalTo(dAtA[i:])
- if err != nil {
- return 0, err
- }
- i += n174
- dAtA[i] = 0x12
- i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size()))
- n175, err := m.Spec.MarshalTo(dAtA[i:])
- if err != nil {
- return 0, err
- }
- i += n175
- dAtA[i] = 0x1a
- i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size()))
- n176, err := m.Status.MarshalTo(dAtA[i:])
+ n176, err := m.ObjectMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n176
+ dAtA[i] = 0x12
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size()))
+ n177, err := m.Spec.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n177
+ dAtA[i] = 0x1a
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size()))
+ n178, err := m.Status.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n178
return i, nil
}
@@ -8733,11 +8803,11 @@ func (m *ServiceAccount) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size()))
- n177, err := m.ObjectMeta.MarshalTo(dAtA[i:])
+ n179, err := m.ObjectMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n177
+ i += n179
if len(m.Secrets) > 0 {
for _, msg := range m.Secrets {
dAtA[i] = 0x12
@@ -8793,11 +8863,11 @@ func (m *ServiceAccountList) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size()))
- n178, err := m.ListMeta.MarshalTo(dAtA[i:])
+ n180, err := m.ListMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n178
+ i += n180
if len(m.Items) > 0 {
for _, msg := range m.Items {
dAtA[i] = 0x12
@@ -8831,11 +8901,11 @@ func (m *ServiceList) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size()))
- n179, err := m.ListMeta.MarshalTo(dAtA[i:])
+ n181, err := m.ListMeta.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n179
+ i += n181
if len(m.Items) > 0 {
for _, msg := range m.Items {
dAtA[i] = 0x12
@@ -8880,11 +8950,11 @@ func (m *ServicePort) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x22
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.TargetPort.Size()))
- n180, err := m.TargetPort.MarshalTo(dAtA[i:])
+ n182, err := m.TargetPort.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n180
+ i += n182
dAtA[i] = 0x28
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.NodePort))
@@ -9031,11 +9101,11 @@ func (m *ServiceSpec) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x72
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.SessionAffinityConfig.Size()))
- n181, err := m.SessionAffinityConfig.MarshalTo(dAtA[i:])
+ n183, err := m.SessionAffinityConfig.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n181
+ i += n183
}
return i, nil
}
@@ -9058,11 +9128,11 @@ func (m *ServiceStatus) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.LoadBalancer.Size()))
- n182, err := m.LoadBalancer.MarshalTo(dAtA[i:])
+ n184, err := m.LoadBalancer.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n182
+ i += n184
return i, nil
}
@@ -9085,11 +9155,11 @@ func (m *SessionAffinityConfig) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ClientIP.Size()))
- n183, err := m.ClientIP.MarshalTo(dAtA[i:])
+ n185, err := m.ClientIP.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n183
+ i += n185
}
return i, nil
}
@@ -9133,11 +9203,11 @@ func (m *StorageOSPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2a
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size()))
- n184, err := m.SecretRef.MarshalTo(dAtA[i:])
+ n186, err := m.SecretRef.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n184
+ i += n186
}
return i, nil
}
@@ -9181,11 +9251,11 @@ func (m *StorageOSVolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x2a
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size()))
- n185, err := m.SecretRef.MarshalTo(dAtA[i:])
+ n187, err := m.SecretRef.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n185
+ i += n187
}
return i, nil
}
@@ -9234,11 +9304,11 @@ func (m *TCPSocketAction) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.Port.Size()))
- n186, err := m.Port.MarshalTo(dAtA[i:])
+ n188, err := m.Port.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n186
+ i += n188
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host)))
@@ -9276,11 +9346,11 @@ func (m *Taint) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x22
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.TimeAdded.Size()))
- n187, err := m.TimeAdded.MarshalTo(dAtA[i:])
+ n189, err := m.TimeAdded.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n187
+ i += n189
return i, nil
}
@@ -9345,11 +9415,11 @@ func (m *Volume) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.VolumeSource.Size()))
- n188, err := m.VolumeSource.MarshalTo(dAtA[i:])
+ n190, err := m.VolumeSource.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n188
+ i += n190
return i, nil
}
@@ -9416,31 +9486,31 @@ func (m *VolumeProjection) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.Secret.Size()))
- n189, err := m.Secret.MarshalTo(dAtA[i:])
+ n191, err := m.Secret.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n189
+ i += n191
}
if m.DownwardAPI != nil {
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.DownwardAPI.Size()))
- n190, err := m.DownwardAPI.MarshalTo(dAtA[i:])
+ n192, err := m.DownwardAPI.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n190
+ i += n192
}
if m.ConfigMap != nil {
dAtA[i] = 0x1a
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMap.Size()))
- n191, err := m.ConfigMap.MarshalTo(dAtA[i:])
+ n193, err := m.ConfigMap.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n191
+ i += n193
}
return i, nil
}
@@ -9464,163 +9534,163 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0xa
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.HostPath.Size()))
- n192, err := m.HostPath.MarshalTo(dAtA[i:])
- if err != nil {
- return 0, err
- }
- i += n192
- }
- if m.EmptyDir != nil {
- dAtA[i] = 0x12
- i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.EmptyDir.Size()))
- n193, err := m.EmptyDir.MarshalTo(dAtA[i:])
- if err != nil {
- return 0, err
- }
- i += n193
- }
- if m.GCEPersistentDisk != nil {
- dAtA[i] = 0x1a
- i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.GCEPersistentDisk.Size()))
- n194, err := m.GCEPersistentDisk.MarshalTo(dAtA[i:])
+ n194, err := m.HostPath.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n194
}
- if m.AWSElasticBlockStore != nil {
- dAtA[i] = 0x22
+ if m.EmptyDir != nil {
+ dAtA[i] = 0x12
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.AWSElasticBlockStore.Size()))
- n195, err := m.AWSElasticBlockStore.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.EmptyDir.Size()))
+ n195, err := m.EmptyDir.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n195
}
- if m.GitRepo != nil {
- dAtA[i] = 0x2a
+ if m.GCEPersistentDisk != nil {
+ dAtA[i] = 0x1a
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.GitRepo.Size()))
- n196, err := m.GitRepo.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.GCEPersistentDisk.Size()))
+ n196, err := m.GCEPersistentDisk.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n196
}
- if m.Secret != nil {
- dAtA[i] = 0x32
+ if m.AWSElasticBlockStore != nil {
+ dAtA[i] = 0x22
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.Secret.Size()))
- n197, err := m.Secret.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.AWSElasticBlockStore.Size()))
+ n197, err := m.AWSElasticBlockStore.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n197
}
- if m.NFS != nil {
- dAtA[i] = 0x3a
+ if m.GitRepo != nil {
+ dAtA[i] = 0x2a
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.NFS.Size()))
- n198, err := m.NFS.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.GitRepo.Size()))
+ n198, err := m.GitRepo.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n198
}
- if m.ISCSI != nil {
- dAtA[i] = 0x42
+ if m.Secret != nil {
+ dAtA[i] = 0x32
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.ISCSI.Size()))
- n199, err := m.ISCSI.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.Secret.Size()))
+ n199, err := m.Secret.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n199
}
- if m.Glusterfs != nil {
- dAtA[i] = 0x4a
+ if m.NFS != nil {
+ dAtA[i] = 0x3a
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.Glusterfs.Size()))
- n200, err := m.Glusterfs.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.NFS.Size()))
+ n200, err := m.NFS.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n200
}
- if m.PersistentVolumeClaim != nil {
- dAtA[i] = 0x52
+ if m.ISCSI != nil {
+ dAtA[i] = 0x42
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.PersistentVolumeClaim.Size()))
- n201, err := m.PersistentVolumeClaim.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.ISCSI.Size()))
+ n201, err := m.ISCSI.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n201
}
- if m.RBD != nil {
- dAtA[i] = 0x5a
+ if m.Glusterfs != nil {
+ dAtA[i] = 0x4a
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.RBD.Size()))
- n202, err := m.RBD.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.Glusterfs.Size()))
+ n202, err := m.Glusterfs.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n202
}
- if m.FlexVolume != nil {
- dAtA[i] = 0x62
+ if m.PersistentVolumeClaim != nil {
+ dAtA[i] = 0x52
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.FlexVolume.Size()))
- n203, err := m.FlexVolume.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.PersistentVolumeClaim.Size()))
+ n203, err := m.PersistentVolumeClaim.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n203
}
- if m.Cinder != nil {
- dAtA[i] = 0x6a
+ if m.RBD != nil {
+ dAtA[i] = 0x5a
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.Cinder.Size()))
- n204, err := m.Cinder.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.RBD.Size()))
+ n204, err := m.RBD.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n204
}
- if m.CephFS != nil {
- dAtA[i] = 0x72
+ if m.FlexVolume != nil {
+ dAtA[i] = 0x62
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.CephFS.Size()))
- n205, err := m.CephFS.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.FlexVolume.Size()))
+ n205, err := m.FlexVolume.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n205
}
- if m.Flocker != nil {
- dAtA[i] = 0x7a
+ if m.Cinder != nil {
+ dAtA[i] = 0x6a
i++
- i = encodeVarintGenerated(dAtA, i, uint64(m.Flocker.Size()))
- n206, err := m.Flocker.MarshalTo(dAtA[i:])
+ i = encodeVarintGenerated(dAtA, i, uint64(m.Cinder.Size()))
+ n206, err := m.Cinder.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
i += n206
}
+ if m.CephFS != nil {
+ dAtA[i] = 0x72
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(m.CephFS.Size()))
+ n207, err := m.CephFS.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n207
+ }
+ if m.Flocker != nil {
+ dAtA[i] = 0x7a
+ i++
+ i = encodeVarintGenerated(dAtA, i, uint64(m.Flocker.Size()))
+ n208, err := m.Flocker.MarshalTo(dAtA[i:])
+ if err != nil {
+ return 0, err
+ }
+ i += n208
+ }
if m.DownwardAPI != nil {
dAtA[i] = 0x82
i++
dAtA[i] = 0x1
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.DownwardAPI.Size()))
- n207, err := m.DownwardAPI.MarshalTo(dAtA[i:])
+ n209, err := m.DownwardAPI.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n207
+ i += n209
}
if m.FC != nil {
dAtA[i] = 0x8a
@@ -9628,11 +9698,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.FC.Size()))
- n208, err := m.FC.MarshalTo(dAtA[i:])
+ n210, err := m.FC.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n208
+ i += n210
}
if m.AzureFile != nil {
dAtA[i] = 0x92
@@ -9640,11 +9710,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.AzureFile.Size()))
- n209, err := m.AzureFile.MarshalTo(dAtA[i:])
+ n211, err := m.AzureFile.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n209
+ i += n211
}
if m.ConfigMap != nil {
dAtA[i] = 0x9a
@@ -9652,11 +9722,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMap.Size()))
- n210, err := m.ConfigMap.MarshalTo(dAtA[i:])
+ n212, err := m.ConfigMap.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n210
+ i += n212
}
if m.VsphereVolume != nil {
dAtA[i] = 0xa2
@@ -9664,11 +9734,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.VsphereVolume.Size()))
- n211, err := m.VsphereVolume.MarshalTo(dAtA[i:])
+ n213, err := m.VsphereVolume.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n211
+ i += n213
}
if m.Quobyte != nil {
dAtA[i] = 0xaa
@@ -9676,11 +9746,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.Quobyte.Size()))
- n212, err := m.Quobyte.MarshalTo(dAtA[i:])
+ n214, err := m.Quobyte.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n212
+ i += n214
}
if m.AzureDisk != nil {
dAtA[i] = 0xb2
@@ -9688,11 +9758,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.AzureDisk.Size()))
- n213, err := m.AzureDisk.MarshalTo(dAtA[i:])
+ n215, err := m.AzureDisk.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n213
+ i += n215
}
if m.PhotonPersistentDisk != nil {
dAtA[i] = 0xba
@@ -9700,11 +9770,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.PhotonPersistentDisk.Size()))
- n214, err := m.PhotonPersistentDisk.MarshalTo(dAtA[i:])
+ n216, err := m.PhotonPersistentDisk.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n214
+ i += n216
}
if m.PortworxVolume != nil {
dAtA[i] = 0xc2
@@ -9712,11 +9782,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.PortworxVolume.Size()))
- n215, err := m.PortworxVolume.MarshalTo(dAtA[i:])
+ n217, err := m.PortworxVolume.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n215
+ i += n217
}
if m.ScaleIO != nil {
dAtA[i] = 0xca
@@ -9724,11 +9794,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.ScaleIO.Size()))
- n216, err := m.ScaleIO.MarshalTo(dAtA[i:])
+ n218, err := m.ScaleIO.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n216
+ i += n218
}
if m.Projected != nil {
dAtA[i] = 0xd2
@@ -9736,11 +9806,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.Projected.Size()))
- n217, err := m.Projected.MarshalTo(dAtA[i:])
+ n219, err := m.Projected.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n217
+ i += n219
}
if m.StorageOS != nil {
dAtA[i] = 0xda
@@ -9748,11 +9818,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x1
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.StorageOS.Size()))
- n218, err := m.StorageOS.MarshalTo(dAtA[i:])
+ n220, err := m.StorageOS.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n218
+ i += n220
}
return i, nil
}
@@ -9812,11 +9882,11 @@ func (m *WeightedPodAffinityTerm) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x12
i++
i = encodeVarintGenerated(dAtA, i, uint64(m.PodAffinityTerm.Size()))
- n219, err := m.PodAffinityTerm.MarshalTo(dAtA[i:])
+ n221, err := m.PodAffinityTerm.MarshalTo(dAtA[i:])
if err != nil {
return 0, err
}
- i += n219
+ i += n221
return i, nil
}
@@ -11446,6 +11516,24 @@ func (m *PersistentVolumeClaim) Size() (n int) {
return n
}
+func (m *PersistentVolumeClaimCondition) Size() (n int) {
+ var l int
+ _ = l
+ l = len(m.Type)
+ n += 1 + l + sovGenerated(uint64(l))
+ l = len(m.Status)
+ n += 1 + l + sovGenerated(uint64(l))
+ l = m.LastProbeTime.Size()
+ n += 1 + l + sovGenerated(uint64(l))
+ l = m.LastTransitionTime.Size()
+ n += 1 + l + sovGenerated(uint64(l))
+ l = len(m.Reason)
+ n += 1 + l + sovGenerated(uint64(l))
+ l = len(m.Message)
+ n += 1 + l + sovGenerated(uint64(l))
+ return n
+}
+
func (m *PersistentVolumeClaimList) Size() (n int) {
var l int
_ = l
@@ -11504,6 +11592,12 @@ func (m *PersistentVolumeClaimStatus) Size() (n int) {
n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize))
}
}
+ if len(m.Conditions) > 0 {
+ for _, e := range m.Conditions {
+ l = e.Size()
+ n += 1 + l + sovGenerated(uint64(l))
+ }
+ }
return n
}
@@ -14327,6 +14421,21 @@ func (this *PersistentVolumeClaim) String() string {
}, "")
return s
}
+func (this *PersistentVolumeClaimCondition) String() string {
+ if this == nil {
+ return "nil"
+ }
+ s := strings.Join([]string{`&PersistentVolumeClaimCondition{`,
+ `Type:` + fmt.Sprintf("%v", this.Type) + `,`,
+ `Status:` + fmt.Sprintf("%v", this.Status) + `,`,
+ `LastProbeTime:` + strings.Replace(strings.Replace(this.LastProbeTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`,
+ `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`,
+ `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`,
+ `Message:` + fmt.Sprintf("%v", this.Message) + `,`,
+ `}`,
+ }, "")
+ return s
+}
func (this *PersistentVolumeClaimList) String() string {
if this == nil {
return "nil"
@@ -14370,6 +14479,7 @@ func (this *PersistentVolumeClaimStatus) String() string {
`Phase:` + fmt.Sprintf("%v", this.Phase) + `,`,
`AccessModes:` + fmt.Sprintf("%v", this.AccessModes) + `,`,
`Capacity:` + mapStringForCapacity + `,`,
+ `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "PersistentVolumeClaimCondition", "PersistentVolumeClaimCondition", 1), `&`, ``, 1) + `,`,
`}`,
}, "")
return s
@@ -30959,6 +31069,232 @@ func (m *PersistentVolumeClaim) Unmarshal(dAtA []byte) error {
}
return nil
}
+func (m *PersistentVolumeClaimCondition) 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: PersistentVolumeClaimCondition: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: PersistentVolumeClaimCondition: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Type", 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 > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Type = PersistentVolumeClaimConditionType(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Status", 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 > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Status = ConditionStatus(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field LastProbeTime", 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 > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.LastProbeTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field LastTransitionTime", 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 > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.LastTransitionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Reason", 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 > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Reason = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 6:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Message", 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 > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Message = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipGenerated(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if skippy < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
func (m *PersistentVolumeClaimList) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
@@ -31479,6 +31815,37 @@ func (m *PersistentVolumeClaimStatus) Unmarshal(dAtA []byte) error {
m.Capacity[ResourceName(mapkey)] = mapvalue
}
iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthGenerated
+ }
+ postIndex := iNdEx + msglen
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Conditions = append(m.Conditions, PersistentVolumeClaimCondition{})
+ if err := m.Conditions[len(m.Conditions)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipGenerated(dAtA[iNdEx:])
@@ -45970,743 +46337,745 @@ func init() {
}
var fileDescriptorGenerated = []byte{
- // 11802 bytes of a gzipped FileDescriptorProto
+ // 11834 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x70, 0x24, 0xd7,
- 0x75, 0x18, 0xac, 0x9e, 0xc1, 0x6b, 0x0e, 0xde, 0x77, 0xb1, 0xe4, 0x2c, 0x48, 0x2e, 0x96, 0x4d,
- 0x89, 0x5c, 0xbe, 0x00, 0x71, 0x49, 0x8a, 0xb4, 0x48, 0x51, 0x02, 0x30, 0xc0, 0x2e, 0xb8, 0x8b,
- 0xdd, 0xe1, 0x1d, 0xec, 0x52, 0xa4, 0x68, 0x7e, 0x6a, 0x4c, 0x5f, 0x00, 0x4d, 0x34, 0xba, 0x87,
- 0xdd, 0x3d, 0xd8, 0x05, 0xcb, 0xaa, 0xfa, 0xa2, 0xc8, 0xca, 0x43, 0xfe, 0xe1, 0x4a, 0x5c, 0x89,
- 0x63, 0xa9, 0x9c, 0xaa, 0x3c, 0xca, 0x56, 0xec, 0xa4, 0xe2, 0xc8, 0xb1, 0x1d, 0xc9, 0xa9, 0x38,
- 0xce, 0xa3, 0xa4, 0x3f, 0x8a, 0x9d, 0x3f, 0x52, 0x55, 0x2a, 0xb0, 0xb5, 0x4a, 0x25, 0xe5, 0x1f,
- 0x49, 0x25, 0xf1, 0x2f, 0x23, 0x4e, 0x94, 0xba, 0xcf, 0xbe, 0xb7, 0xa7, 0x7b, 0x66, 0xb0, 0xdc,
- 0x05, 0x29, 0x55, 0xfe, 0xcd, 0x9c, 0x73, 0xee, 0xb9, 0xb7, 0xef, 0xe3, 0xdc, 0x73, 0xcf, 0x3d,
- 0xe7, 0x5c, 0x78, 0x69, 0xf7, 0xc5, 0x78, 0xde, 0x0b, 0x17, 0x76, 0xdb, 0x9b, 0x24, 0x0a, 0x48,
- 0x42, 0xe2, 0x85, 0x7d, 0x12, 0xb8, 0x61, 0xb4, 0x20, 0x10, 0x4e, 0xcb, 0x5b, 0x68, 0x86, 0x11,
- 0x59, 0xd8, 0x7f, 0x66, 0x61, 0x9b, 0x04, 0x24, 0x72, 0x12, 0xe2, 0xce, 0xb7, 0xa2, 0x30, 0x09,
- 0x11, 0xe2, 0x34, 0xf3, 0x4e, 0xcb, 0x9b, 0xa7, 0x34, 0xf3, 0xfb, 0xcf, 0xcc, 0x3e, 0xbd, 0xed,
- 0x25, 0x3b, 0xed, 0xcd, 0xf9, 0x66, 0xb8, 0xb7, 0xb0, 0x1d, 0x6e, 0x87, 0x0b, 0x8c, 0x74, 0xb3,
- 0xbd, 0xc5, 0xfe, 0xb1, 0x3f, 0xec, 0x17, 0x67, 0x31, 0xbb, 0x9e, 0x56, 0x43, 0x6e, 0x25, 0x24,
- 0x88, 0xbd, 0x30, 0x88, 0x9f, 0x76, 0x5a, 0x5e, 0x4c, 0xa2, 0x7d, 0x12, 0x2d, 0xb4, 0x76, 0xb7,
- 0x29, 0x2e, 0x36, 0x09, 0x16, 0xf6, 0x9f, 0xd9, 0x24, 0x89, 0xd3, 0xd1, 0xa2, 0xd9, 0xe7, 0x52,
- 0x76, 0x7b, 0x4e, 0x73, 0xc7, 0x0b, 0x48, 0x74, 0x20, 0x79, 0x2c, 0x44, 0x24, 0x0e, 0xdb, 0x51,
- 0x93, 0x1c, 0xab, 0x54, 0xbc, 0xb0, 0x47, 0x12, 0x27, 0xe7, 0xeb, 0x67, 0x17, 0x8a, 0x4a, 0x45,
- 0xed, 0x20, 0xf1, 0xf6, 0x3a, 0xab, 0xf9, 0x44, 0xaf, 0x02, 0x71, 0x73, 0x87, 0xec, 0x39, 0x1d,
- 0xe5, 0x9e, 0x2d, 0x2a, 0xd7, 0x4e, 0x3c, 0x7f, 0xc1, 0x0b, 0x92, 0x38, 0x89, 0xb2, 0x85, 0xec,
- 0xef, 0x59, 0x70, 0x6e, 0xf1, 0xf5, 0xc6, 0x8a, 0xef, 0xc4, 0x89, 0xd7, 0x5c, 0xf2, 0xc3, 0xe6,
- 0x6e, 0x23, 0x09, 0x23, 0x72, 0x23, 0xf4, 0xdb, 0x7b, 0xa4, 0xc1, 0x3a, 0x02, 0x3d, 0x05, 0x23,
- 0xfb, 0xec, 0xff, 0x5a, 0xad, 0x6a, 0x9d, 0xb3, 0xce, 0x57, 0x96, 0xa6, 0xbe, 0x7d, 0x38, 0xf7,
- 0x91, 0xdb, 0x87, 0x73, 0x23, 0x37, 0x04, 0x1c, 0x2b, 0x0a, 0xf4, 0x28, 0x0c, 0x6d, 0xc5, 0x1b,
- 0x07, 0x2d, 0x52, 0x2d, 0x31, 0xda, 0x09, 0x41, 0x3b, 0xb4, 0xda, 0xa0, 0x50, 0x2c, 0xb0, 0x68,
- 0x01, 0x2a, 0x2d, 0x27, 0x4a, 0xbc, 0xc4, 0x0b, 0x83, 0x6a, 0xf9, 0x9c, 0x75, 0x7e, 0x70, 0x69,
- 0x5a, 0x90, 0x56, 0xea, 0x12, 0x81, 0x53, 0x1a, 0xda, 0x8c, 0x88, 0x38, 0xee, 0xb5, 0xc0, 0x3f,
- 0xa8, 0x0e, 0x9c, 0xb3, 0xce, 0x8f, 0xa4, 0xcd, 0xc0, 0x02, 0x8e, 0x15, 0x85, 0xfd, 0x4b, 0x25,
- 0x18, 0x59, 0xdc, 0xda, 0xf2, 0x02, 0x2f, 0x39, 0x40, 0x37, 0x60, 0x2c, 0x08, 0x5d, 0x22, 0xff,
- 0xb3, 0xaf, 0x18, 0xbd, 0x70, 0x6e, 0xbe, 0x73, 0x66, 0xce, 0x5f, 0xd5, 0xe8, 0x96, 0xa6, 0x6e,
- 0x1f, 0xce, 0x8d, 0xe9, 0x10, 0x6c, 0xf0, 0x41, 0x18, 0x46, 0x5b, 0xa1, 0xab, 0xd8, 0x96, 0x18,
- 0xdb, 0xb9, 0x3c, 0xb6, 0xf5, 0x94, 0x6c, 0x69, 0xf2, 0xf6, 0xe1, 0xdc, 0xa8, 0x06, 0xc0, 0x3a,
- 0x13, 0xb4, 0x09, 0x93, 0xf4, 0x6f, 0x90, 0x78, 0x8a, 0x6f, 0x99, 0xf1, 0x7d, 0xa4, 0x88, 0xaf,
- 0x46, 0xba, 0x74, 0xea, 0xf6, 0xe1, 0xdc, 0x64, 0x06, 0x88, 0xb3, 0x0c, 0xed, 0xf7, 0x60, 0x62,
- 0x31, 0x49, 0x9c, 0xe6, 0x0e, 0x71, 0xf9, 0x08, 0xa2, 0xe7, 0x60, 0x20, 0x70, 0xf6, 0x88, 0x18,
- 0xdf, 0x73, 0xa2, 0x63, 0x07, 0xae, 0x3a, 0x7b, 0xe4, 0xe8, 0x70, 0x6e, 0xea, 0x7a, 0xe0, 0xbd,
- 0xdb, 0x16, 0xb3, 0x82, 0xc2, 0x30, 0xa3, 0x46, 0x17, 0x00, 0x5c, 0xb2, 0xef, 0x35, 0x49, 0xdd,
- 0x49, 0x76, 0xc4, 0x78, 0x23, 0x51, 0x16, 0x6a, 0x0a, 0x83, 0x35, 0x2a, 0xfb, 0x16, 0x54, 0x16,
- 0xf7, 0x43, 0xcf, 0xad, 0x87, 0x6e, 0x8c, 0x76, 0x61, 0xb2, 0x15, 0x91, 0x2d, 0x12, 0x29, 0x50,
- 0xd5, 0x3a, 0x57, 0x3e, 0x3f, 0x7a, 0xe1, 0x7c, 0xee, 0xc7, 0x9a, 0xa4, 0x2b, 0x41, 0x12, 0x1d,
- 0x2c, 0xdd, 0x2f, 0xea, 0x9b, 0xcc, 0x60, 0x71, 0x96, 0xb3, 0xfd, 0xaf, 0x4b, 0x70, 0x7a, 0xf1,
- 0xbd, 0x76, 0x44, 0x6a, 0x5e, 0xbc, 0x9b, 0x9d, 0xe1, 0xae, 0x17, 0xef, 0x5e, 0x4d, 0x7b, 0x40,
- 0x4d, 0xad, 0x9a, 0x80, 0x63, 0x45, 0x81, 0x9e, 0x86, 0x61, 0xfa, 0xfb, 0x3a, 0x5e, 0x13, 0x9f,
- 0x7c, 0x4a, 0x10, 0x8f, 0xd6, 0x9c, 0xc4, 0xa9, 0x71, 0x14, 0x96, 0x34, 0x68, 0x1d, 0x46, 0x9b,
- 0x6c, 0x41, 0x6e, 0xaf, 0x87, 0x2e, 0x61, 0x83, 0x59, 0x59, 0x7a, 0x92, 0x92, 0x2f, 0xa7, 0xe0,
- 0xa3, 0xc3, 0xb9, 0x2a, 0x6f, 0x9b, 0x60, 0xa1, 0xe1, 0xb0, 0x5e, 0x1e, 0xd9, 0x6a, 0x7d, 0x0d,
- 0x30, 0x4e, 0x90, 0xb3, 0xb6, 0xce, 0x6b, 0x4b, 0x65, 0x90, 0x2d, 0x95, 0xb1, 0xfc, 0x65, 0x82,
- 0x9e, 0x81, 0x81, 0x5d, 0x2f, 0x70, 0xab, 0x43, 0x8c, 0xd7, 0x43, 0x74, 0xcc, 0x2f, 0x7b, 0x81,
- 0x7b, 0x74, 0x38, 0x37, 0x6d, 0x34, 0x87, 0x02, 0x31, 0x23, 0xb5, 0xff, 0xd4, 0x82, 0x39, 0x86,
- 0x5b, 0xf5, 0x7c, 0x52, 0x27, 0x51, 0xec, 0xc5, 0x09, 0x09, 0x12, 0xa3, 0x43, 0x2f, 0x00, 0xc4,
- 0xa4, 0x19, 0x91, 0x44, 0xeb, 0x52, 0x35, 0x31, 0x1a, 0x0a, 0x83, 0x35, 0x2a, 0x2a, 0x10, 0xe2,
- 0x1d, 0x27, 0x62, 0xf3, 0x4b, 0x74, 0xac, 0x12, 0x08, 0x0d, 0x89, 0xc0, 0x29, 0x8d, 0x21, 0x10,
- 0xca, 0xbd, 0x04, 0x02, 0xfa, 0x14, 0x4c, 0xa6, 0x95, 0xc5, 0x2d, 0xa7, 0x29, 0x3b, 0x90, 0x2d,
- 0x99, 0x86, 0x89, 0xc2, 0x59, 0x5a, 0xfb, 0x1f, 0x58, 0x62, 0xf2, 0xd0, 0xaf, 0xfe, 0x90, 0x7f,
- 0xab, 0xfd, 0x3b, 0x16, 0x0c, 0x2f, 0x79, 0x81, 0xeb, 0x05, 0xdb, 0xe8, 0xf3, 0x30, 0x42, 0xf7,
- 0x26, 0xd7, 0x49, 0x1c, 0x21, 0xf7, 0x3e, 0xae, 0xad, 0x2d, 0xb5, 0x55, 0xcc, 0xb7, 0x76, 0xb7,
- 0x29, 0x20, 0x9e, 0xa7, 0xd4, 0x74, 0xb5, 0x5d, 0xdb, 0x7c, 0x87, 0x34, 0x93, 0x75, 0x92, 0x38,
- 0xe9, 0xe7, 0xa4, 0x30, 0xac, 0xb8, 0xa2, 0xcb, 0x30, 0x94, 0x38, 0xd1, 0x36, 0x49, 0x84, 0x00,
- 0xcc, 0x15, 0x54, 0xbc, 0x24, 0xa6, 0x2b, 0x92, 0x04, 0x4d, 0x92, 0x6e, 0x0b, 0x1b, 0xac, 0x28,
- 0x16, 0x2c, 0xec, 0x26, 0x8c, 0x2d, 0x3b, 0x2d, 0x67, 0xd3, 0xf3, 0xbd, 0xc4, 0x23, 0x31, 0x7a,
- 0x0c, 0xca, 0x8e, 0xeb, 0x32, 0xa9, 0x50, 0x59, 0x3a, 0x7d, 0xfb, 0x70, 0xae, 0xbc, 0xe8, 0xd2,
- 0xe9, 0x09, 0x8a, 0xea, 0x00, 0x53, 0x0a, 0xf4, 0x04, 0x0c, 0xb8, 0x51, 0xd8, 0xaa, 0x96, 0x18,
- 0xe5, 0x7d, 0x74, 0x26, 0xd7, 0xa2, 0xb0, 0x95, 0x21, 0x65, 0x34, 0xf6, 0xef, 0x95, 0xe0, 0xc1,
- 0x65, 0xd2, 0xda, 0x59, 0x6d, 0x14, 0xcc, 0xdf, 0xf3, 0x30, 0xb2, 0x17, 0x06, 0x5e, 0x12, 0x46,
- 0xb1, 0xa8, 0x9a, 0x2d, 0xa0, 0x75, 0x01, 0xc3, 0x0a, 0x8b, 0xce, 0xc1, 0x40, 0x2b, 0x15, 0x7e,
- 0x63, 0x52, 0x70, 0x32, 0xb1, 0xc7, 0x30, 0x94, 0xa2, 0x1d, 0x93, 0x48, 0x2c, 0x7c, 0x45, 0x71,
- 0x3d, 0x26, 0x11, 0x66, 0x98, 0x74, 0x06, 0xd1, 0xb9, 0x25, 0x66, 0x65, 0x66, 0x06, 0x51, 0x0c,
- 0xd6, 0xa8, 0x50, 0x1d, 0x2a, 0xfc, 0x1f, 0x26, 0x5b, 0x6c, 0x8d, 0x17, 0xf4, 0x7b, 0x43, 0x12,
- 0x89, 0x7e, 0x1f, 0x67, 0x53, 0x4c, 0x02, 0x71, 0xca, 0xc4, 0x98, 0x62, 0x43, 0x3d, 0xa7, 0xd8,
- 0xb7, 0x4a, 0x80, 0x78, 0x17, 0xfe, 0x98, 0x75, 0xdc, 0xf5, 0xce, 0x8e, 0xcb, 0xdd, 0x6c, 0xae,
- 0x84, 0x4d, 0xc7, 0xcf, 0xce, 0xda, 0xbb, 0xd5, 0x7b, 0xbf, 0x68, 0x01, 0x5a, 0xf6, 0x02, 0x97,
- 0x44, 0x27, 0xa0, 0x69, 0x1d, 0x4f, 0x76, 0x5c, 0x81, 0x89, 0x65, 0xdf, 0x23, 0x41, 0xb2, 0x56,
- 0x5f, 0x0e, 0x83, 0x2d, 0x6f, 0x1b, 0x7d, 0x12, 0x26, 0xa8, 0xe2, 0x19, 0xb6, 0x93, 0x06, 0x69,
- 0x86, 0x01, 0xdb, 0xa3, 0xa9, 0xba, 0x86, 0x6e, 0x1f, 0xce, 0x4d, 0x6c, 0x18, 0x18, 0x9c, 0xa1,
- 0xb4, 0xff, 0x03, 0xfd, 0xd0, 0x70, 0xaf, 0x15, 0x06, 0x24, 0x48, 0x96, 0xc3, 0xc0, 0xe5, 0xba,
- 0xdc, 0x27, 0x61, 0x20, 0xa1, 0x0d, 0xe7, 0x1f, 0xf9, 0xa8, 0x1c, 0x5a, 0xda, 0xdc, 0xa3, 0xc3,
- 0xb9, 0xfb, 0x3a, 0x4b, 0xb0, 0x0f, 0x62, 0x65, 0xd0, 0x4f, 0xc1, 0x50, 0x9c, 0x38, 0x49, 0x3b,
- 0x16, 0x9f, 0xfd, 0xb0, 0xfc, 0xec, 0x06, 0x83, 0x1e, 0x1d, 0xce, 0x4d, 0xaa, 0x62, 0x1c, 0x84,
- 0x45, 0x01, 0xf4, 0x38, 0x0c, 0xef, 0x91, 0x38, 0x76, 0xb6, 0xe5, 0x36, 0x3c, 0x29, 0xca, 0x0e,
- 0xaf, 0x73, 0x30, 0x96, 0x78, 0xf4, 0x08, 0x0c, 0x92, 0x28, 0x0a, 0x23, 0x31, 0xab, 0xc6, 0x05,
- 0xe1, 0xe0, 0x0a, 0x05, 0x62, 0x8e, 0xb3, 0xff, 0x9d, 0x05, 0x93, 0xaa, 0xad, 0xbc, 0xae, 0x13,
- 0x90, 0xb7, 0x6f, 0x02, 0x34, 0xe5, 0x07, 0xc6, 0x4c, 0xde, 0x8d, 0x5e, 0x78, 0x34, 0x6f, 0x0a,
- 0x77, 0x76, 0x63, 0xca, 0x59, 0x81, 0x62, 0xac, 0x71, 0xb3, 0xff, 0xb9, 0x05, 0xa7, 0x32, 0x5f,
- 0x74, 0xc5, 0x8b, 0x13, 0xf4, 0x56, 0xc7, 0x57, 0xcd, 0xf7, 0xf7, 0x55, 0xb4, 0x34, 0xfb, 0x26,
- 0x35, 0xe7, 0x24, 0x44, 0xfb, 0xa2, 0x4b, 0x30, 0xe8, 0x25, 0x64, 0x4f, 0x7e, 0xcc, 0x23, 0x5d,
- 0x3f, 0x86, 0xb7, 0x2a, 0x1d, 0x91, 0x35, 0x5a, 0x12, 0x73, 0x06, 0xf6, 0xff, 0xb0, 0xa0, 0xc2,
- 0xa7, 0xed, 0xba, 0xd3, 0x3a, 0x81, 0xb1, 0x58, 0x83, 0x01, 0xc6, 0x9d, 0x37, 0xfc, 0xb1, 0xfc,
- 0x86, 0x8b, 0xe6, 0xcc, 0x53, 0x65, 0x8a, 0x2b, 0xad, 0x4a, 0x98, 0x51, 0x10, 0x66, 0x2c, 0x66,
- 0x5f, 0x80, 0x8a, 0x22, 0x40, 0x53, 0x50, 0xde, 0x25, 0xfc, 0xa0, 0x52, 0xc1, 0xf4, 0x27, 0x9a,
- 0x81, 0xc1, 0x7d, 0xc7, 0x6f, 0x8b, 0xc5, 0x8e, 0xf9, 0x9f, 0x4f, 0x96, 0x5e, 0xb4, 0xec, 0x6f,
- 0xb2, 0x35, 0x26, 0x2a, 0x59, 0x09, 0xf6, 0x85, 0x30, 0x79, 0x0f, 0x66, 0xfc, 0x1c, 0x19, 0x26,
- 0x3a, 0xa2, 0x7f, 0x99, 0xf7, 0xa0, 0x68, 0xeb, 0x4c, 0x1e, 0x16, 0xe7, 0xd6, 0x41, 0xb7, 0x81,
- 0xb0, 0x45, 0x67, 0x94, 0xe3, 0xb3, 0xf6, 0x0a, 0x05, 0xf4, 0x9a, 0x80, 0x61, 0x85, 0xa5, 0x02,
- 0x62, 0x46, 0x35, 0xfe, 0x32, 0x39, 0x68, 0x10, 0x9f, 0x34, 0x93, 0x30, 0xfa, 0x40, 0x9b, 0xff,
- 0x10, 0xef, 0x7d, 0x2e, 0x5f, 0x46, 0x05, 0x83, 0xf2, 0x65, 0x72, 0xc0, 0x87, 0x42, 0xff, 0xba,
- 0x72, 0xd7, 0xaf, 0xfb, 0x0d, 0x0b, 0xc6, 0xd5, 0xd7, 0x9d, 0xc0, 0x42, 0x5a, 0x32, 0x17, 0xd2,
- 0x43, 0x5d, 0xe7, 0x63, 0xc1, 0x12, 0xfa, 0x11, 0x13, 0x01, 0x82, 0xa6, 0x1e, 0x85, 0xb4, 0x6b,
- 0xa8, 0xcc, 0xfe, 0x20, 0x07, 0xa4, 0x9f, 0xef, 0xba, 0x4c, 0x0e, 0x36, 0x42, 0xaa, 0x3e, 0xe4,
- 0x7f, 0x97, 0x31, 0x6a, 0x03, 0x5d, 0x47, 0xed, 0x37, 0x4b, 0x70, 0x5a, 0xf5, 0x80, 0xb1, 0x41,
- 0xff, 0xb8, 0xf7, 0xc1, 0x33, 0x30, 0xea, 0x92, 0x2d, 0xa7, 0xed, 0x27, 0xea, 0x2c, 0x3a, 0xc8,
- 0xed, 0x11, 0xb5, 0x14, 0x8c, 0x75, 0x9a, 0x63, 0x74, 0xdb, 0xbf, 0x01, 0x26, 0x7b, 0x13, 0x87,
- 0xce, 0x60, 0xaa, 0xbd, 0x69, 0x16, 0x85, 0x31, 0xdd, 0xa2, 0x20, 0xac, 0x07, 0x8f, 0xc0, 0xa0,
- 0xb7, 0x47, 0xf7, 0xe2, 0x92, 0xb9, 0xc5, 0xae, 0x51, 0x20, 0xe6, 0x38, 0xf4, 0x31, 0x18, 0x6e,
- 0x86, 0x7b, 0x7b, 0x4e, 0xe0, 0x56, 0xcb, 0x4c, 0x9f, 0x1c, 0xa5, 0xdb, 0xf5, 0x32, 0x07, 0x61,
- 0x89, 0x43, 0x0f, 0xc2, 0x80, 0x13, 0x6d, 0xc7, 0xd5, 0x01, 0x46, 0x33, 0x42, 0x6b, 0x5a, 0x8c,
- 0xb6, 0x63, 0xcc, 0xa0, 0x54, 0x4f, 0xbc, 0x19, 0x46, 0xbb, 0x5e, 0xb0, 0x5d, 0xf3, 0x22, 0xa6,
- 0xf4, 0x69, 0x7a, 0xe2, 0xeb, 0x0a, 0x83, 0x35, 0x2a, 0xb4, 0x0a, 0x83, 0xad, 0x30, 0x4a, 0xe2,
- 0xea, 0x10, 0xeb, 0xee, 0x87, 0x0b, 0x96, 0x12, 0xff, 0xda, 0x7a, 0x18, 0x25, 0xe9, 0x07, 0xd0,
- 0x7f, 0x31, 0xe6, 0xc5, 0xd1, 0x4f, 0x41, 0x99, 0x04, 0xfb, 0xd5, 0x61, 0xc6, 0x65, 0x36, 0x8f,
- 0xcb, 0x4a, 0xb0, 0x7f, 0xc3, 0x89, 0x52, 0x39, 0xb3, 0x12, 0xec, 0x63, 0x5a, 0x06, 0xbd, 0x01,
- 0x15, 0x69, 0x8d, 0x8c, 0xab, 0x23, 0xc5, 0x53, 0x0c, 0x0b, 0x22, 0x4c, 0xde, 0x6d, 0x7b, 0x11,
- 0xd9, 0x23, 0x41, 0x12, 0xa7, 0xe7, 0x49, 0x89, 0x8d, 0x71, 0xca, 0x0d, 0xbd, 0x01, 0x63, 0x5c,
- 0x8f, 0x5c, 0x0f, 0xdb, 0x41, 0x12, 0x57, 0x2b, 0xac, 0x79, 0xb9, 0xa6, 0xab, 0x1b, 0x29, 0xdd,
- 0xd2, 0x8c, 0x60, 0x3a, 0xa6, 0x01, 0x63, 0x6c, 0xb0, 0x42, 0x18, 0xc6, 0x7d, 0x6f, 0x9f, 0x04,
- 0x24, 0x8e, 0xeb, 0x51, 0xb8, 0x49, 0xaa, 0xc0, 0x5a, 0x7e, 0x26, 0xdf, 0xa2, 0x13, 0x6e, 0x92,
- 0xa5, 0xe9, 0xdb, 0x87, 0x73, 0xe3, 0x57, 0xf4, 0x32, 0xd8, 0x64, 0x81, 0xae, 0xc3, 0x04, 0x55,
- 0x50, 0xbd, 0x94, 0xe9, 0x68, 0x2f, 0xa6, 0x4c, 0x3b, 0xc5, 0x46, 0x21, 0x9c, 0x61, 0x82, 0x5e,
- 0x85, 0x8a, 0xef, 0x6d, 0x91, 0xe6, 0x41, 0xd3, 0x27, 0xd5, 0x31, 0xc6, 0x31, 0x77, 0x59, 0x5d,
- 0x91, 0x44, 0xfc, 0x00, 0xa0, 0xfe, 0xe2, 0xb4, 0x38, 0xba, 0x01, 0xf7, 0x25, 0x24, 0xda, 0xf3,
- 0x02, 0x87, 0x2e, 0x07, 0xa1, 0x4f, 0x32, 0xbb, 0xd8, 0x38, 0x9b, 0x6f, 0x67, 0x45, 0xd7, 0xdd,
- 0xb7, 0x91, 0x4b, 0x85, 0x0b, 0x4a, 0xa3, 0x6b, 0x30, 0xc9, 0x56, 0x42, 0xbd, 0xed, 0xfb, 0xf5,
- 0xd0, 0xf7, 0x9a, 0x07, 0xd5, 0x09, 0xc6, 0xf0, 0x63, 0xd2, 0xf0, 0xb5, 0x66, 0xa2, 0xe9, 0x89,
- 0x37, 0xfd, 0x87, 0xb3, 0xa5, 0xd1, 0x26, 0x33, 0x84, 0xb4, 0x23, 0x2f, 0x39, 0xa0, 0xf3, 0x97,
- 0xdc, 0x4a, 0xaa, 0x93, 0x5d, 0xcf, 0x8f, 0x3a, 0xa9, 0xb2, 0x96, 0xe8, 0x40, 0x9c, 0x65, 0x48,
- 0x97, 0x76, 0x9c, 0xb8, 0x5e, 0x50, 0x9d, 0x62, 0x12, 0x43, 0xad, 0x8c, 0x06, 0x05, 0x62, 0x8e,
- 0x63, 0x46, 0x10, 0xfa, 0xe3, 0x1a, 0x95, 0xa0, 0xd3, 0x8c, 0x30, 0x35, 0x82, 0x48, 0x04, 0x4e,
- 0x69, 0xe8, 0xb6, 0x9c, 0x24, 0x07, 0x55, 0xc4, 0x48, 0xd5, 0x72, 0xd9, 0xd8, 0x78, 0x03, 0x53,
- 0x38, 0xba, 0x02, 0xc3, 0x24, 0xd8, 0x5f, 0x8d, 0xc2, 0xbd, 0xea, 0xa9, 0xe2, 0x35, 0xbb, 0xc2,
- 0x49, 0xb8, 0x40, 0x4f, 0x0f, 0x00, 0x02, 0x8c, 0x25, 0x0b, 0x74, 0x0b, 0xaa, 0x39, 0x23, 0xc2,
- 0x07, 0x60, 0x86, 0x0d, 0xc0, 0xcb, 0xa2, 0x6c, 0x75, 0xa3, 0x80, 0xee, 0xa8, 0x0b, 0x0e, 0x17,
- 0x72, 0xb7, 0x37, 0x61, 0x42, 0x09, 0x16, 0x36, 0xb6, 0x68, 0x0e, 0x06, 0xa9, 0xc4, 0x94, 0x47,
- 0xea, 0x0a, 0xed, 0x4a, 0x66, 0x9a, 0xc2, 0x1c, 0xce, 0xba, 0xd2, 0x7b, 0x8f, 0x2c, 0x1d, 0x24,
- 0x84, 0x1f, 0x8b, 0xca, 0x5a, 0x57, 0x4a, 0x04, 0x4e, 0x69, 0xec, 0xff, 0xc3, 0x15, 0x93, 0x54,
- 0x7a, 0xf5, 0x21, 0xaf, 0x9f, 0x82, 0x91, 0x9d, 0x30, 0x4e, 0x28, 0x35, 0xab, 0x63, 0x30, 0x55,
- 0x45, 0x2e, 0x09, 0x38, 0x56, 0x14, 0xe8, 0x25, 0x18, 0x6f, 0xea, 0x15, 0x88, 0xcd, 0xe6, 0xb4,
- 0x28, 0x62, 0xd6, 0x8e, 0x4d, 0x5a, 0xf4, 0x22, 0x8c, 0xb0, 0x0b, 0x8a, 0x66, 0xe8, 0x8b, 0x03,
- 0x98, 0xdc, 0x31, 0x47, 0xea, 0x02, 0x7e, 0xa4, 0xfd, 0xc6, 0x8a, 0x9a, 0x1e, 0x8a, 0x69, 0x13,
- 0xd6, 0xea, 0x42, 0xcc, 0xab, 0x43, 0xf1, 0x25, 0x06, 0xc5, 0x02, 0x6b, 0xff, 0xb5, 0x92, 0xd6,
- 0xcb, 0xf4, 0x48, 0x41, 0x50, 0x1d, 0x86, 0x6f, 0x3a, 0x5e, 0xe2, 0x05, 0xdb, 0x62, 0x3f, 0x7f,
- 0xbc, 0xab, 0xcc, 0x67, 0x85, 0x5e, 0xe7, 0x05, 0xf8, 0xae, 0x24, 0xfe, 0x60, 0xc9, 0x86, 0x72,
- 0x8c, 0xda, 0x41, 0x40, 0x39, 0x96, 0xfa, 0xe5, 0x88, 0x79, 0x01, 0xce, 0x51, 0xfc, 0xc1, 0x92,
- 0x0d, 0x7a, 0x0b, 0x40, 0xce, 0x1b, 0xe2, 0x8a, 0x8b, 0x81, 0xa7, 0x7a, 0x33, 0xdd, 0x50, 0x65,
- 0x96, 0x26, 0xe8, 0x9e, 0x97, 0xfe, 0xc7, 0x1a, 0x3f, 0x3b, 0x61, 0x7a, 0x4f, 0x67, 0x63, 0xd0,
- 0xe7, 0xe8, 0x52, 0x75, 0xa2, 0x84, 0xb8, 0x8b, 0x89, 0xe8, 0x9c, 0x27, 0xfa, 0x53, 0x5b, 0x37,
- 0xbc, 0x3d, 0xa2, 0x2f, 0x6b, 0xc1, 0x04, 0xa7, 0xfc, 0xec, 0xdf, 0x2e, 0x43, 0xb5, 0xa8, 0xb9,
- 0x74, 0xd2, 0x91, 0x5b, 0x5e, 0xb2, 0x4c, 0xd5, 0x15, 0xcb, 0x9c, 0x74, 0x2b, 0x02, 0x8e, 0x15,
- 0x05, 0x1d, 0xfd, 0xd8, 0xdb, 0x96, 0xa7, 0x8e, 0xc1, 0x74, 0xf4, 0x1b, 0x0c, 0x8a, 0x05, 0x96,
- 0xd2, 0x45, 0xc4, 0x89, 0xc5, 0xcd, 0x93, 0x36, 0x4b, 0x30, 0x83, 0x62, 0x81, 0xd5, 0x0d, 0x06,
- 0x03, 0x3d, 0x0c, 0x06, 0x46, 0x17, 0x0d, 0xde, 0xdd, 0x2e, 0x42, 0x6f, 0x03, 0x6c, 0x79, 0x81,
- 0x17, 0xef, 0x30, 0xee, 0x43, 0xc7, 0xe6, 0xae, 0x94, 0x9d, 0x55, 0xc5, 0x05, 0x6b, 0x1c, 0xd1,
- 0xf3, 0x30, 0xaa, 0x16, 0xe0, 0x5a, 0xad, 0x3a, 0x6c, 0x5e, 0x6b, 0xa4, 0xd2, 0xa8, 0x86, 0x75,
- 0x3a, 0xfb, 0x9d, 0xec, 0x7c, 0x11, 0x2b, 0x40, 0xeb, 0x5f, 0xab, 0xdf, 0xfe, 0x2d, 0x75, 0xef,
- 0x5f, 0xfb, 0xf7, 0xcb, 0x30, 0x69, 0x54, 0xd6, 0x8e, 0xfb, 0x90, 0x59, 0x17, 0xe9, 0x46, 0xe4,
- 0x24, 0x44, 0xac, 0x3f, 0xbb, 0xf7, 0x52, 0xd1, 0x37, 0x2b, 0xba, 0x02, 0x78, 0x79, 0xf4, 0x36,
- 0x54, 0x7c, 0x27, 0x66, 0xc6, 0x07, 0x22, 0xd6, 0x5d, 0x3f, 0xcc, 0x52, 0x45, 0xdf, 0x89, 0x13,
- 0x6d, 0x2f, 0xe0, 0xbc, 0x53, 0x96, 0x74, 0xc7, 0xa4, 0xca, 0x89, 0xbc, 0xda, 0x54, 0x8d, 0xa0,
- 0x1a, 0xcc, 0x01, 0xe6, 0x38, 0xf4, 0x22, 0x8c, 0x45, 0x84, 0xcd, 0x8a, 0x65, 0xaa, 0x6b, 0xb1,
- 0x69, 0x36, 0x98, 0x2a, 0x65, 0x58, 0xc3, 0x61, 0x83, 0x32, 0xd5, 0xb5, 0x87, 0xba, 0xe8, 0xda,
- 0x8f, 0xc3, 0x30, 0xfb, 0xa1, 0x66, 0x80, 0x1a, 0x8d, 0x35, 0x0e, 0xc6, 0x12, 0x9f, 0x9d, 0x30,
- 0x23, 0x7d, 0x4e, 0x98, 0x27, 0x60, 0xa2, 0xe6, 0x90, 0xbd, 0x30, 0x58, 0x09, 0xdc, 0x56, 0xe8,
- 0x05, 0x09, 0xaa, 0xc2, 0x00, 0xdb, 0x1d, 0xf8, 0xda, 0x1e, 0xa0, 0x1c, 0xf0, 0x00, 0xd5, 0x9c,
- 0xed, 0x3f, 0x2c, 0xc1, 0x78, 0x8d, 0xf8, 0x24, 0x21, 0xfc, 0xac, 0x11, 0xa3, 0x55, 0x40, 0xdb,
- 0x91, 0xd3, 0x24, 0x75, 0x12, 0x79, 0xa1, 0xab, 0x1b, 0x23, 0xcb, 0xcc, 0xe0, 0x8f, 0x2e, 0x76,
- 0x60, 0x71, 0x4e, 0x09, 0xf4, 0x26, 0x8c, 0xb7, 0x22, 0x62, 0xd8, 0xd0, 0xac, 0x22, 0x75, 0xa1,
- 0xae, 0x13, 0x72, 0x4d, 0xd5, 0x00, 0x61, 0x93, 0x15, 0xfa, 0x0c, 0x4c, 0x85, 0x51, 0x6b, 0xc7,
- 0x09, 0x6a, 0xa4, 0x45, 0x02, 0x97, 0xaa, 0xe2, 0xc2, 0x46, 0x30, 0x73, 0xfb, 0x70, 0x6e, 0xea,
- 0x5a, 0x06, 0x87, 0x3b, 0xa8, 0xd1, 0x9b, 0x30, 0xdd, 0x8a, 0xc2, 0x96, 0xb3, 0xcd, 0x26, 0x8a,
- 0xd0, 0x38, 0xb8, 0xf4, 0x79, 0xea, 0xf6, 0xe1, 0xdc, 0x74, 0x3d, 0x8b, 0x3c, 0x3a, 0x9c, 0x3b,
- 0xc5, 0x3a, 0x8a, 0x42, 0x52, 0x24, 0xee, 0x64, 0x63, 0x6f, 0xc3, 0xe9, 0x5a, 0x78, 0x33, 0xb8,
- 0xe9, 0x44, 0xee, 0x62, 0x7d, 0x4d, 0x3b, 0xdc, 0x5f, 0x95, 0x87, 0x4b, 0x7e, 0xfd, 0x9a, 0xbb,
- 0x4f, 0x69, 0x25, 0xb9, 0xfa, 0xbf, 0xea, 0xf9, 0xa4, 0xc0, 0x88, 0xf0, 0x37, 0x4b, 0x46, 0x4d,
- 0x29, 0xbd, 0xb2, 0xfb, 0x5b, 0x85, 0x76, 0xff, 0xd7, 0x60, 0x64, 0xcb, 0x23, 0xbe, 0x8b, 0xc9,
- 0x96, 0x18, 0x99, 0xc7, 0x8a, 0x6f, 0x94, 0x56, 0x29, 0xa5, 0x34, 0x1a, 0xf1, 0xa3, 0xe9, 0xaa,
- 0x28, 0x8c, 0x15, 0x1b, 0xb4, 0x0b, 0x53, 0xf2, 0xec, 0x23, 0xb1, 0x62, 0x11, 0x3f, 0xde, 0xed,
- 0x40, 0x65, 0x32, 0x67, 0x03, 0x88, 0x33, 0x6c, 0x70, 0x07, 0x63, 0x7a, 0x16, 0xdd, 0xa3, 0xdb,
- 0xd5, 0x00, 0x9b, 0xd2, 0xec, 0x2c, 0xca, 0x8e, 0xd5, 0x0c, 0x6a, 0x7f, 0xcd, 0x82, 0xfb, 0x3b,
- 0x7a, 0x46, 0x98, 0x17, 0xee, 0xf2, 0x28, 0x64, 0x8f, 0xfb, 0xa5, 0xde, 0xc7, 0x7d, 0xfb, 0xd7,
- 0x2d, 0x98, 0x59, 0xd9, 0x6b, 0x25, 0x07, 0x35, 0xcf, 0xbc, 0x9b, 0x78, 0x01, 0x86, 0xf6, 0x88,
- 0xeb, 0xb5, 0xf7, 0xc4, 0xc8, 0xcd, 0x49, 0x91, 0xbe, 0xce, 0xa0, 0x47, 0x87, 0x73, 0xe3, 0x8d,
- 0x24, 0x8c, 0x9c, 0x6d, 0xc2, 0x01, 0x58, 0x90, 0xb3, 0x8d, 0xd1, 0x7b, 0x8f, 0x5c, 0xf1, 0xf6,
- 0x3c, 0x79, 0x43, 0xd8, 0xd5, 0xe4, 0x35, 0x2f, 0x3b, 0x74, 0xfe, 0xb5, 0xb6, 0x13, 0x24, 0x5e,
- 0x72, 0x20, 0xae, 0x5d, 0x24, 0x13, 0x9c, 0xf2, 0xb3, 0xbf, 0x67, 0xc1, 0xa4, 0x94, 0x25, 0x8b,
- 0xae, 0x1b, 0x91, 0x38, 0x46, 0xb3, 0x50, 0xf2, 0x5a, 0xa2, 0x95, 0x20, 0x5a, 0x59, 0x5a, 0xab,
- 0xe3, 0x92, 0xd7, 0x42, 0x75, 0xa8, 0xf0, 0x8b, 0xc6, 0x74, 0x72, 0xf5, 0x75, 0x5d, 0xc9, 0x5a,
- 0xb0, 0x21, 0x4b, 0xe2, 0x94, 0x89, 0xd4, 0x8a, 0xd9, 0x3e, 0x54, 0x36, 0xef, 0x6c, 0x2e, 0x09,
- 0x38, 0x56, 0x14, 0xe8, 0x3c, 0x8c, 0x04, 0xa1, 0xcb, 0xef, 0x7d, 0xf9, 0x9a, 0x66, 0x53, 0xf6,
- 0xaa, 0x80, 0x61, 0x85, 0xb5, 0x7f, 0xce, 0x82, 0x31, 0xf9, 0x65, 0x7d, 0x2a, 0xe8, 0x74, 0x69,
- 0xa5, 0xca, 0x79, 0xba, 0xb4, 0xa8, 0x82, 0xcd, 0x30, 0x86, 0x5e, 0x5d, 0x3e, 0x8e, 0x5e, 0x6d,
- 0x7f, 0xb5, 0x04, 0x13, 0xb2, 0x39, 0x8d, 0xf6, 0x66, 0x4c, 0x12, 0xb4, 0x01, 0x15, 0x87, 0x77,
- 0x39, 0x91, 0x33, 0xf6, 0x91, 0xfc, 0x13, 0x97, 0x31, 0x3e, 0xa9, 0xaa, 0xb3, 0x28, 0x4b, 0xe3,
- 0x94, 0x11, 0xf2, 0x61, 0x3a, 0x08, 0x13, 0xb6, 0xed, 0x29, 0x7c, 0xb7, 0x7b, 0x81, 0x2c, 0xf7,
- 0x33, 0x82, 0xfb, 0xf4, 0xd5, 0x2c, 0x17, 0xdc, 0xc9, 0x18, 0xad, 0x48, 0x2b, 0x4f, 0x99, 0xd5,
- 0x70, 0xae, 0x5b, 0x0d, 0xc5, 0x46, 0x1e, 0xfb, 0x77, 0x2d, 0xa8, 0x48, 0xb2, 0x93, 0xb8, 0x02,
- 0x5a, 0x87, 0xe1, 0x98, 0x0d, 0x82, 0xec, 0x1a, 0xbb, 0x5b, 0xc3, 0xf9, 0x78, 0xa5, 0xbb, 0x39,
- 0xff, 0x1f, 0x63, 0xc9, 0x83, 0x99, 0xa9, 0x55, 0xf3, 0x3f, 0x24, 0x66, 0x6a, 0xd5, 0x9e, 0x82,
- 0x1d, 0xe6, 0xbf, 0xb0, 0x36, 0x6b, 0x67, 0x79, 0xaa, 0x74, 0xb6, 0x22, 0xb2, 0xe5, 0xdd, 0xca,
- 0x2a, 0x9d, 0x75, 0x06, 0xc5, 0x02, 0x8b, 0xde, 0x82, 0xb1, 0xa6, 0xb4, 0xee, 0xa6, 0x62, 0xe0,
- 0xd1, 0xae, 0xb6, 0x72, 0x75, 0xad, 0xc2, 0x7d, 0xc2, 0x96, 0xb5, 0xf2, 0xd8, 0xe0, 0x66, 0x5e,
- 0xcc, 0x97, 0x7b, 0x5d, 0xcc, 0xa7, 0x7c, 0x0b, 0xaf, 0x96, 0xed, 0x5f, 0xb6, 0x60, 0x88, 0xdb,
- 0x08, 0xfb, 0x33, 0xaa, 0x6a, 0xd7, 0x44, 0x69, 0xdf, 0xdd, 0xa0, 0x40, 0x71, 0x6b, 0x84, 0xd6,
- 0xa1, 0xc2, 0x7e, 0x30, 0x5b, 0x49, 0xb9, 0xd8, 0x19, 0x8e, 0xd7, 0xaa, 0x37, 0xf0, 0x86, 0x2c,
- 0x86, 0x53, 0x0e, 0xf6, 0x2f, 0x94, 0xa9, 0xa8, 0x4a, 0x49, 0x8d, 0x1d, 0xdc, 0xba, 0x77, 0x3b,
- 0x78, 0xe9, 0x5e, 0xed, 0xe0, 0xdb, 0x30, 0xd9, 0xd4, 0xee, 0xa4, 0xd2, 0x91, 0x3c, 0xdf, 0x75,
- 0x92, 0x68, 0xd7, 0x57, 0xdc, 0x4e, 0xb6, 0x6c, 0x32, 0xc1, 0x59, 0xae, 0xe8, 0x73, 0x30, 0xc6,
- 0xc7, 0x59, 0xd4, 0x32, 0xc0, 0x6a, 0xf9, 0x58, 0xf1, 0x7c, 0xd1, 0xab, 0x60, 0x33, 0xb1, 0xa1,
- 0x15, 0xc7, 0x06, 0x33, 0xfb, 0xcb, 0x83, 0x30, 0xb8, 0xb2, 0x4f, 0x82, 0xe4, 0x04, 0x04, 0x52,
- 0x13, 0x26, 0xbc, 0x60, 0x3f, 0xf4, 0xf7, 0x89, 0xcb, 0xf1, 0xc7, 0xd9, 0x5c, 0xef, 0x13, 0xac,
- 0x27, 0xd6, 0x0c, 0x16, 0x38, 0xc3, 0xf2, 0x5e, 0x9c, 0xda, 0x2f, 0xc2, 0x10, 0x1f, 0x7b, 0x71,
- 0x64, 0xcf, 0xb5, 0x80, 0xb3, 0x4e, 0x14, 0xab, 0x20, 0xb5, 0x28, 0x70, 0x93, 0xbb, 0x28, 0x8e,
- 0xde, 0x81, 0x89, 0x2d, 0x2f, 0x8a, 0x13, 0x7a, 0xdc, 0x8e, 0x13, 0x67, 0xaf, 0x75, 0x07, 0xa7,
- 0x74, 0xd5, 0x0f, 0xab, 0x06, 0x27, 0x9c, 0xe1, 0x8c, 0xb6, 0x61, 0x9c, 0x1e, 0x1c, 0xd3, 0xaa,
- 0x86, 0x8f, 0x5d, 0x95, 0x32, 0xc3, 0x5d, 0xd1, 0x19, 0x61, 0x93, 0x2f, 0x15, 0x26, 0x4d, 0x76,
- 0xd0, 0x1c, 0x61, 0x1a, 0x85, 0x12, 0x26, 0xfc, 0x84, 0xc9, 0x71, 0x54, 0x26, 0x31, 0x5f, 0x8e,
- 0x8a, 0x29, 0x93, 0x52, 0x8f, 0x0d, 0xfb, 0xeb, 0x74, 0x77, 0xa4, 0x7d, 0x78, 0x02, 0x5b, 0xcb,
- 0x2b, 0xe6, 0xd6, 0x72, 0xa6, 0x70, 0x3c, 0x0b, 0xb6, 0x95, 0xcf, 0xc3, 0xa8, 0x36, 0xdc, 0x68,
- 0x01, 0x2a, 0x4d, 0xe9, 0x78, 0x20, 0xa4, 0xae, 0x52, 0x5f, 0x94, 0x47, 0x02, 0x4e, 0x69, 0x68,
- 0x6f, 0x50, 0x65, 0x2f, 0xeb, 0xd6, 0x44, 0x55, 0x41, 0xcc, 0x30, 0xf6, 0xb3, 0x00, 0x2b, 0xb7,
- 0x48, 0x73, 0x91, 0x1f, 0xbc, 0xb4, 0xfb, 0x2d, 0xab, 0xf8, 0x7e, 0xcb, 0xfe, 0xf7, 0x16, 0x4c,
- 0xac, 0x2e, 0x1b, 0x0a, 0xf9, 0x3c, 0x00, 0xd7, 0x42, 0x5f, 0x7f, 0xfd, 0xaa, 0xb4, 0x0c, 0x73,
- 0xe3, 0x9e, 0x82, 0x62, 0x8d, 0x02, 0x9d, 0x81, 0xb2, 0xdf, 0x0e, 0x84, 0x72, 0x38, 0x7c, 0xfb,
- 0x70, 0xae, 0x7c, 0xa5, 0x1d, 0x60, 0x0a, 0xd3, 0x3c, 0x89, 0xca, 0x7d, 0x7b, 0x12, 0xf5, 0x74,
- 0xc1, 0x46, 0x73, 0x30, 0x78, 0xf3, 0xa6, 0xe7, 0xc6, 0xd5, 0xc1, 0xd4, 0x6a, 0xfd, 0xfa, 0xeb,
- 0x6b, 0xb5, 0x18, 0x73, 0xb8, 0xfd, 0x17, 0xca, 0x30, 0xb5, 0xea, 0x93, 0x5b, 0xc6, 0x67, 0x3d,
- 0x0a, 0x43, 0x6e, 0xe4, 0xed, 0x93, 0x28, 0xbb, 0x8b, 0xd7, 0x18, 0x14, 0x0b, 0x6c, 0xdf, 0xde,
- 0x4f, 0xd7, 0x3b, 0xf7, 0xe3, 0xbb, 0xed, 0xef, 0xd5, 0xbb, 0x2b, 0xde, 0x82, 0x61, 0x7e, 0x4d,
- 0xca, 0x3b, 0x63, 0xf4, 0xc2, 0x33, 0x79, 0x4d, 0xc8, 0xf6, 0xc5, 0xbc, 0x30, 0x7c, 0x70, 0x9f,
- 0x11, 0x25, 0xc4, 0x04, 0x14, 0x4b, 0x96, 0xb3, 0x9f, 0x84, 0x31, 0x9d, 0xf2, 0x58, 0xce, 0x23,
- 0x7f, 0xd1, 0x82, 0x53, 0xab, 0x7e, 0xd8, 0xdc, 0xcd, 0xb8, 0xa2, 0x3d, 0x0f, 0xa3, 0x74, 0x3d,
- 0xc5, 0x86, 0x5b, 0xab, 0xe1, 0xe8, 0x2c, 0x50, 0x58, 0xa7, 0xd3, 0x8a, 0x5d, 0xbf, 0xbe, 0x56,
- 0xcb, 0xf3, 0x8f, 0x16, 0x28, 0xac, 0xd3, 0xd9, 0xdf, 0xb5, 0xe0, 0xa1, 0x8b, 0xcb, 0x2b, 0xa9,
- 0x37, 0x66, 0x87, 0x8b, 0x36, 0x55, 0xee, 0x5c, 0xad, 0x29, 0xa9, 0x72, 0x57, 0x63, 0xad, 0x10,
- 0xd8, 0x0f, 0x4b, 0xf8, 0xc1, 0xaf, 0x5a, 0x70, 0xea, 0xa2, 0x97, 0x60, 0xd2, 0x0a, 0xb3, 0xce,
- 0xc2, 0x11, 0x69, 0x85, 0xb1, 0x97, 0x84, 0xd1, 0x41, 0xd6, 0x59, 0x18, 0x2b, 0x0c, 0xd6, 0xa8,
- 0x78, 0xcd, 0xfb, 0x5e, 0x4c, 0x5b, 0x5a, 0x32, 0x4f, 0x98, 0x58, 0xc0, 0xb1, 0xa2, 0xa0, 0x1f,
- 0xe6, 0x7a, 0x11, 0xd3, 0x10, 0x0e, 0xc4, 0x72, 0x56, 0x1f, 0x56, 0x93, 0x08, 0x9c, 0xd2, 0xd8,
- 0x5f, 0xb3, 0xe0, 0xf4, 0x45, 0xbf, 0x1d, 0x27, 0x24, 0xda, 0x8a, 0x8d, 0xc6, 0x3e, 0x0b, 0x15,
- 0x22, 0xb5, 0x70, 0xd1, 0x56, 0xb5, 0x6f, 0x28, 0xf5, 0x9c, 0x7b, 0x2a, 0x2b, 0xba, 0x3e, 0xfc,
- 0x3a, 0x8f, 0xe7, 0x8f, 0xf8, 0x8d, 0x12, 0x8c, 0x5f, 0xda, 0xd8, 0xa8, 0x5f, 0x24, 0x89, 0x10,
- 0x99, 0xbd, 0x2d, 0x48, 0x58, 0x3b, 0x08, 0x77, 0xd3, 0x75, 0xda, 0x89, 0xe7, 0xcf, 0xf3, 0xd0,
- 0x98, 0xf9, 0xb5, 0x20, 0xb9, 0x16, 0x35, 0x92, 0xc8, 0x0b, 0xb6, 0x73, 0x8f, 0xce, 0x52, 0xb0,
- 0x97, 0x8b, 0x04, 0x3b, 0x7a, 0x16, 0x86, 0x58, 0x6c, 0x8e, 0xd4, 0x3a, 0x1e, 0x50, 0xaa, 0x02,
- 0x83, 0x1e, 0x1d, 0xce, 0x55, 0xae, 0xe3, 0x35, 0xfe, 0x07, 0x0b, 0x52, 0x74, 0x1d, 0x46, 0x77,
- 0x92, 0xa4, 0x75, 0x89, 0x38, 0x2e, 0x89, 0xa4, 0x74, 0x38, 0x9b, 0x27, 0x1d, 0x68, 0x27, 0x70,
- 0xb2, 0x74, 0x41, 0xa5, 0xb0, 0x18, 0xeb, 0x7c, 0xec, 0x06, 0x40, 0x8a, 0xbb, 0x4b, 0xc7, 0x06,
- 0xfb, 0x87, 0x16, 0x0c, 0x5f, 0x72, 0x02, 0xd7, 0x27, 0x11, 0x7a, 0x19, 0x06, 0xc8, 0x2d, 0xd2,
- 0x14, 0x3b, 0x78, 0x6e, 0x83, 0xd3, 0x5d, 0x8e, 0x1b, 0xc1, 0xe8, 0x7f, 0xcc, 0x4a, 0xa1, 0x4b,
- 0x30, 0x4c, 0x5b, 0x7b, 0x51, 0xf9, 0x8c, 0x3f, 0x5c, 0xf4, 0xc5, 0x6a, 0xd8, 0xf9, 0xc6, 0x28,
- 0x40, 0x58, 0x16, 0x67, 0x06, 0x9d, 0x66, 0xab, 0x41, 0x05, 0x58, 0xd2, 0xed, 0xb8, 0xb5, 0xb1,
- 0x5c, 0xe7, 0x44, 0x82, 0x1b, 0x37, 0xe8, 0x48, 0x20, 0x4e, 0x99, 0xd8, 0x1b, 0x50, 0xa1, 0x83,
- 0xba, 0xe8, 0x7b, 0x4e, 0x77, 0x5b, 0xd2, 0x93, 0x50, 0x91, 0x76, 0x9d, 0x58, 0xb8, 0x9d, 0x33,
- 0xae, 0xd2, 0xec, 0x13, 0xe3, 0x14, 0x6f, 0x6f, 0xc1, 0x0c, 0xbb, 0x24, 0x75, 0x92, 0x1d, 0x63,
- 0x8d, 0xf5, 0x9e, 0xcc, 0x4f, 0x09, 0xfd, 0x8a, 0x8f, 0x4c, 0x55, 0xf3, 0x93, 0x1d, 0x93, 0x1c,
- 0x35, 0x5d, 0xeb, 0x3f, 0x0d, 0xc0, 0xf4, 0x5a, 0x63, 0xb9, 0x61, 0x1a, 0x16, 0x5f, 0x84, 0x31,
- 0xae, 0x09, 0xd0, 0x09, 0xed, 0xf8, 0xa2, 0x36, 0x75, 0x71, 0xb0, 0xa1, 0xe1, 0xb0, 0x41, 0x89,
- 0x1e, 0x82, 0xb2, 0xf7, 0x6e, 0x90, 0x75, 0x85, 0x5b, 0x7b, 0xed, 0x2a, 0xa6, 0x70, 0x8a, 0xa6,
- 0x4a, 0x05, 0x17, 0xa0, 0x0a, 0xad, 0x14, 0x8b, 0x57, 0x60, 0xc2, 0x8b, 0x9b, 0xb1, 0xb7, 0x16,
- 0x50, 0xe9, 0x92, 0xc6, 0x5c, 0xa4, 0x1a, 0x3f, 0x6d, 0xaa, 0xc2, 0xe2, 0x0c, 0xb5, 0x26, 0xcd,
- 0x07, 0xfb, 0x56, 0x4c, 0x7a, 0x7a, 0x5f, 0x53, 0x9d, 0xab, 0xc5, 0xbe, 0x2e, 0x66, 0x6e, 0x39,
- 0x42, 0xe7, 0xe2, 0x1f, 0x1c, 0x63, 0x89, 0x43, 0x17, 0x61, 0xba, 0xb9, 0xe3, 0xb4, 0x16, 0xdb,
- 0xc9, 0x4e, 0xcd, 0x8b, 0x9b, 0xe1, 0x3e, 0x89, 0x0e, 0x98, 0x26, 0x3c, 0x92, 0x1a, 0x99, 0x14,
- 0x62, 0xf9, 0xd2, 0x62, 0x9d, 0x52, 0xe2, 0xce, 0x32, 0xa6, 0x0a, 0x02, 0x77, 0x4d, 0x05, 0x59,
- 0x84, 0x49, 0x59, 0x57, 0x83, 0xc4, 0x6c, 0x7b, 0x18, 0x65, 0xad, 0x53, 0x21, 0x51, 0x02, 0xac,
- 0xda, 0x96, 0xa5, 0x47, 0x2f, 0xc0, 0xb8, 0x17, 0x78, 0x89, 0xe7, 0x24, 0x61, 0xc4, 0x36, 0xd7,
- 0x31, 0xbe, 0x61, 0x50, 0x09, 0xbf, 0xa6, 0x23, 0xb0, 0x49, 0x67, 0xbf, 0x03, 0x15, 0xe5, 0x6b,
- 0x26, 0xdd, 0x25, 0xad, 0x02, 0x77, 0xc9, 0xde, 0x3b, 0x82, 0xb4, 0x98, 0x97, 0x73, 0x2d, 0xe6,
- 0x7f, 0xcb, 0x82, 0xd4, 0xe5, 0x06, 0x5d, 0x82, 0x4a, 0x2b, 0x64, 0xb7, 0x66, 0x91, 0xbc, 0x8a,
- 0x7e, 0x20, 0x57, 0x78, 0x70, 0x41, 0xc5, 0xfb, 0xaf, 0x2e, 0x4b, 0xe0, 0xb4, 0x30, 0x5a, 0x82,
- 0xe1, 0x56, 0x44, 0x1a, 0x09, 0x0b, 0x1a, 0xe9, 0xc9, 0x87, 0xcf, 0x11, 0x4e, 0x8f, 0x65, 0x41,
- 0xfb, 0x37, 0x2d, 0x00, 0x6e, 0x94, 0x76, 0x82, 0x6d, 0x72, 0x02, 0x07, 0xed, 0x1a, 0x0c, 0xc4,
- 0x2d, 0xd2, 0xec, 0x76, 0x9f, 0x99, 0xb6, 0xa7, 0xd1, 0x22, 0xcd, 0xb4, 0xc3, 0xe9, 0x3f, 0xcc,
- 0x4a, 0xdb, 0x3f, 0x0b, 0x30, 0x91, 0x92, 0xd1, 0x03, 0x10, 0x7a, 0xda, 0x70, 0xc9, 0x3f, 0x93,
- 0x71, 0xc9, 0xaf, 0x30, 0x6a, 0xcd, 0x0b, 0xff, 0x1d, 0x28, 0xef, 0x39, 0xb7, 0xc4, 0x29, 0xeb,
- 0xc9, 0xee, 0xcd, 0xa0, 0xfc, 0xe7, 0xd7, 0x9d, 0x5b, 0x5c, 0x8f, 0x7d, 0x52, 0x4e, 0x90, 0x75,
- 0xe7, 0xd6, 0x11, 0xbf, 0xb5, 0x64, 0x42, 0x8a, 0x1e, 0xe6, 0xbe, 0xf8, 0x47, 0xe9, 0x7f, 0x36,
- 0xed, 0x68, 0x25, 0xac, 0x2e, 0x2f, 0x10, 0x26, 0xda, 0xbe, 0xea, 0xf2, 0x82, 0x6c, 0x5d, 0x5e,
- 0xd0, 0x47, 0x5d, 0x5e, 0x80, 0xde, 0x83, 0x61, 0x71, 0x1d, 0xc2, 0x7c, 0x09, 0x47, 0x2f, 0x2c,
- 0xf4, 0x51, 0x9f, 0xb8, 0x4d, 0xe1, 0x75, 0x2e, 0x48, 0x3d, 0x5d, 0x40, 0x7b, 0xd6, 0x2b, 0x2b,
- 0x44, 0x7f, 0xc3, 0x82, 0x09, 0xf1, 0x1b, 0x93, 0x77, 0xdb, 0x24, 0x4e, 0x84, 0x3e, 0xf0, 0x89,
- 0xfe, 0xdb, 0x20, 0x0a, 0xf2, 0xa6, 0x7c, 0x42, 0x8a, 0x59, 0x13, 0xd9, 0xb3, 0x45, 0x99, 0x56,
- 0xa0, 0x7f, 0x64, 0xc1, 0xcc, 0x9e, 0x73, 0x8b, 0xd7, 0xc8, 0x61, 0xd8, 0x49, 0xbc, 0x50, 0xf8,
- 0x46, 0xbe, 0xdc, 0xdf, 0xf0, 0x77, 0x14, 0xe7, 0x8d, 0x94, 0x6e, 0x54, 0x33, 0x79, 0x24, 0x3d,
- 0x9b, 0x9a, 0xdb, 0xae, 0xd9, 0x2d, 0x18, 0x91, 0xf3, 0x2d, 0xe7, 0x34, 0x54, 0xd3, 0x95, 0x9d,
- 0x63, 0xdf, 0x46, 0x69, 0xa7, 0x27, 0x56, 0x8f, 0x98, 0x6b, 0xf7, 0xb4, 0x9e, 0x77, 0x60, 0x4c,
- 0x9f, 0x63, 0xf7, 0xb4, 0xae, 0x77, 0xe1, 0x54, 0xce, 0x5c, 0xba, 0xa7, 0x55, 0xde, 0x84, 0x33,
- 0x85, 0xf3, 0xe3, 0x5e, 0x56, 0x6c, 0x7f, 0xc3, 0xd2, 0xe5, 0xe0, 0x09, 0x98, 0xa7, 0x96, 0x4d,
- 0xf3, 0xd4, 0xd9, 0xee, 0x2b, 0xa7, 0xc0, 0x46, 0xf5, 0x96, 0xde, 0x68, 0x2a, 0xd5, 0xd1, 0xab,
- 0x30, 0xe4, 0x53, 0x88, 0xbc, 0x87, 0xb3, 0x7b, 0xaf, 0xc8, 0x54, 0x97, 0x62, 0xf0, 0x18, 0x0b,
- 0x0e, 0xf6, 0xef, 0x58, 0x30, 0x70, 0x02, 0x3d, 0x81, 0xcd, 0x9e, 0x78, 0xba, 0x90, 0xb5, 0xc8,
- 0x7b, 0x30, 0x8f, 0x9d, 0x9b, 0x2b, 0x32, 0xb7, 0x43, 0x41, 0xc7, 0xfc, 0xef, 0x12, 0x8c, 0xd2,
- 0xaa, 0xa4, 0xc3, 0xc8, 0x4b, 0x30, 0xee, 0x3b, 0x9b, 0xc4, 0x97, 0x26, 0xf3, 0xec, 0x21, 0xf6,
- 0x8a, 0x8e, 0xc4, 0x26, 0x2d, 0x2d, 0xbc, 0xa5, 0xdf, 0x1e, 0x08, 0xfd, 0x45, 0x15, 0x36, 0xae,
- 0x16, 0xb0, 0x49, 0x4b, 0xcf, 0x53, 0x37, 0x9d, 0xa4, 0xb9, 0x23, 0x0e, 0xb8, 0xaa, 0xb9, 0xaf,
- 0x53, 0x20, 0xe6, 0x38, 0xaa, 0xc0, 0xc9, 0xd9, 0x79, 0x83, 0x44, 0x4c, 0x81, 0xe3, 0xea, 0xb1,
- 0x52, 0xe0, 0xb0, 0x89, 0xc6, 0x59, 0xfa, 0x9c, 0xd8, 0xbc, 0x41, 0xe6, 0x0e, 0xd3, 0x47, 0x6c,
- 0x1e, 0xaa, 0xc3, 0x8c, 0x17, 0x34, 0xfd, 0xb6, 0x4b, 0xae, 0x07, 0x5c, 0xbb, 0xf3, 0xbd, 0xf7,
- 0x88, 0x2b, 0x14, 0x68, 0xe5, 0xb9, 0xb4, 0x96, 0x43, 0x83, 0x73, 0x4b, 0xda, 0xff, 0x1f, 0x9c,
- 0xba, 0x12, 0x3a, 0xee, 0x92, 0xe3, 0x3b, 0x41, 0x93, 0x44, 0x6b, 0xc1, 0x76, 0xcf, 0x0b, 0x79,
- 0xfd, 0xfa, 0xbc, 0xd4, 0xeb, 0xfa, 0xdc, 0xde, 0x01, 0xa4, 0x57, 0x20, 0xdc, 0xc0, 0x30, 0x0c,
- 0x7b, 0xbc, 0x2a, 0x31, 0xfd, 0x1f, 0xcb, 0xd7, 0xae, 0x3b, 0x5a, 0xa6, 0x39, 0x38, 0x71, 0x00,
- 0x96, 0x8c, 0xec, 0x17, 0x21, 0x37, 0x36, 0xa3, 0xf7, 0x51, 0xda, 0x7e, 0x1e, 0xa6, 0x59, 0xc9,
- 0xe3, 0x1d, 0xf3, 0xec, 0xbf, 0x62, 0xc1, 0xe4, 0xd5, 0x4c, 0x34, 0xed, 0xa3, 0x30, 0xc4, 0x33,
- 0x9c, 0x64, 0x8d, 0x5e, 0x0d, 0x06, 0xc5, 0x02, 0x7b, 0xd7, 0x6d, 0x2e, 0x3f, 0xb2, 0xa0, 0xa2,
- 0x42, 0xdf, 0x4f, 0x40, 0xa9, 0x5d, 0x36, 0x94, 0xda, 0x5c, 0x5b, 0x80, 0x6a, 0x4e, 0x91, 0x4e,
- 0x8b, 0x2e, 0xab, 0xb8, 0xd0, 0x2e, 0x66, 0x80, 0x94, 0x0d, 0x8f, 0x22, 0x9c, 0x30, 0x83, 0x47,
- 0x65, 0xa4, 0x28, 0xbb, 0x11, 0x57, 0xb4, 0x1f, 0x92, 0x1b, 0x71, 0xd5, 0x9e, 0x02, 0xe9, 0x57,
- 0xd7, 0x9a, 0xcc, 0x76, 0x85, 0x4f, 0x33, 0xaf, 0x51, 0xb6, 0x36, 0x55, 0x38, 0xf6, 0x9c, 0xf0,
- 0x02, 0x15, 0xd0, 0x23, 0x26, 0xc8, 0xc4, 0x3f, 0x9e, 0xa6, 0x20, 0x2d, 0x62, 0x5f, 0x82, 0xc9,
- 0x4c, 0x87, 0xa1, 0xe7, 0x61, 0xb0, 0xb5, 0xe3, 0xc4, 0x24, 0xe3, 0x05, 0x34, 0x58, 0xa7, 0xc0,
- 0xa3, 0xc3, 0xb9, 0x09, 0x55, 0x80, 0x41, 0x30, 0xa7, 0xb6, 0xff, 0xbb, 0x05, 0x03, 0x57, 0x43,
- 0xf7, 0x24, 0x26, 0xd3, 0x2b, 0xc6, 0x64, 0x7a, 0xb0, 0x28, 0xc9, 0x4b, 0xe1, 0x3c, 0x5a, 0xcd,
- 0xcc, 0xa3, 0xb3, 0x85, 0x1c, 0xba, 0x4f, 0xa1, 0x3d, 0x18, 0x65, 0xa9, 0x63, 0x84, 0x57, 0xd2,
- 0xb3, 0xc6, 0xf9, 0x6a, 0x2e, 0x73, 0xbe, 0x9a, 0xd4, 0x48, 0xb5, 0x53, 0xd6, 0xe3, 0x30, 0x2c,
- 0x3c, 0x63, 0xb2, 0xfe, 0xb1, 0x82, 0x16, 0x4b, 0xbc, 0xfd, 0xcb, 0x65, 0x30, 0x52, 0xd5, 0xa0,
- 0xdf, 0xb5, 0x60, 0x3e, 0xe2, 0x11, 0x41, 0x6e, 0xad, 0x1d, 0x79, 0xc1, 0x76, 0xa3, 0xb9, 0x43,
- 0xdc, 0xb6, 0xef, 0x05, 0xdb, 0x6b, 0xdb, 0x41, 0xa8, 0xc0, 0x2b, 0xb7, 0x48, 0xb3, 0xcd, 0xec,
- 0xe0, 0x3d, 0xf2, 0xe2, 0xa8, 0x9b, 0xe7, 0x0b, 0xb7, 0x0f, 0xe7, 0xe6, 0xf1, 0xb1, 0x78, 0xe3,
- 0x63, 0xb6, 0x05, 0x7d, 0xd7, 0x82, 0x05, 0x9e, 0xc1, 0xa5, 0xff, 0xf6, 0x77, 0x39, 0x8d, 0xd6,
- 0x25, 0xab, 0x94, 0xc9, 0x06, 0x89, 0xf6, 0x96, 0x5e, 0x10, 0x1d, 0xba, 0x50, 0x3f, 0x5e, 0x5d,
- 0xf8, 0xb8, 0x8d, 0xb3, 0xff, 0x65, 0x19, 0xc6, 0x69, 0x2f, 0xa6, 0x51, 0xf0, 0xcf, 0x1b, 0x53,
- 0xe2, 0xe1, 0xcc, 0x94, 0x98, 0x36, 0x88, 0xef, 0x4e, 0x00, 0x7c, 0x0c, 0xd3, 0xbe, 0x13, 0x27,
- 0x97, 0x88, 0x13, 0x25, 0x9b, 0xc4, 0x61, 0x57, 0xbd, 0x62, 0x9a, 0x1f, 0xe7, 0xf6, 0x58, 0x99,
- 0xbf, 0xae, 0x64, 0x99, 0xe1, 0x4e, 0xfe, 0x68, 0x1f, 0x10, 0xbb, 0x56, 0x8e, 0x9c, 0x20, 0xe6,
- 0xdf, 0xe2, 0x09, 0x1b, 0xf9, 0xf1, 0x6a, 0x9d, 0x15, 0xb5, 0xa2, 0x2b, 0x1d, 0xdc, 0x70, 0x4e,
- 0x0d, 0x9a, 0xbb, 0xc0, 0x60, 0xbf, 0xee, 0x02, 0x43, 0x3d, 0x9c, 0xd0, 0xf7, 0x60, 0x4a, 0x8c,
- 0xca, 0x96, 0xb7, 0x2d, 0x36, 0xe9, 0x37, 0x32, 0xee, 0x44, 0x56, 0xff, 0x8e, 0x0f, 0x3d, 0x7c,
- 0x89, 0xec, 0x9f, 0x81, 0x53, 0xb4, 0x3a, 0xd3, 0x65, 0x3a, 0x46, 0x04, 0x26, 0x77, 0xdb, 0x9b,
- 0xc4, 0x27, 0x89, 0x84, 0x89, 0x4a, 0x73, 0xd5, 0x7e, 0xb3, 0x74, 0xaa, 0x5b, 0x5e, 0x36, 0x59,
- 0xe0, 0x2c, 0x4f, 0xfb, 0x57, 0x2c, 0x60, 0x8e, 0x89, 0x27, 0xb0, 0xfd, 0x7d, 0xca, 0xdc, 0xfe,
- 0xaa, 0x45, 0x12, 0xa8, 0x60, 0xe7, 0x7b, 0x8e, 0x0f, 0x4b, 0x3d, 0x0a, 0x6f, 0x1d, 0x48, 0xdd,
- 0xbf, 0xb7, 0xc6, 0xf5, 0xbf, 0x2c, 0xbe, 0x20, 0x55, 0x80, 0x24, 0xfa, 0x02, 0x8c, 0x34, 0x9d,
- 0x96, 0xd3, 0xe4, 0x39, 0xc2, 0x0a, 0xad, 0x3f, 0x46, 0xa1, 0xf9, 0x65, 0x51, 0x82, 0x5b, 0x33,
- 0x3e, 0x2e, 0xbf, 0x52, 0x82, 0x7b, 0x5a, 0x30, 0x54, 0x95, 0xb3, 0xbb, 0x30, 0x6e, 0x30, 0xbb,
- 0xa7, 0x47, 0xdf, 0x2f, 0xf0, 0xed, 0x42, 0x9d, 0x58, 0xf6, 0x60, 0x3a, 0xd0, 0xfe, 0x53, 0xe1,
- 0x28, 0xd5, 0xe9, 0x8f, 0xf6, 0xda, 0x10, 0x98, 0x24, 0xd5, 0x1c, 0x2f, 0x33, 0x6c, 0x70, 0x27,
+ 0x75, 0x18, 0xac, 0x9e, 0xc1, 0x6b, 0x0e, 0xde, 0x77, 0xb1, 0xe4, 0x10, 0x24, 0x17, 0xcb, 0xa6,
+ 0x44, 0x2e, 0x5f, 0x80, 0xb8, 0x24, 0x45, 0x5a, 0xa4, 0x68, 0x03, 0x18, 0x60, 0x17, 0xdc, 0xc5,
+ 0xee, 0xf0, 0x0e, 0x76, 0x69, 0x52, 0x34, 0x3f, 0x35, 0xa6, 0x2f, 0x80, 0x26, 0x1a, 0xdd, 0xc3,
+ 0xee, 0x1e, 0xec, 0x82, 0x65, 0x57, 0x7d, 0x51, 0x64, 0xe5, 0x21, 0xff, 0x70, 0x25, 0xaa, 0xc4,
+ 0xb1, 0x54, 0x4e, 0x55, 0x1e, 0x65, 0x2b, 0x4e, 0x52, 0x71, 0xe4, 0xd8, 0x8e, 0xe4, 0x54, 0x1c,
+ 0xe7, 0x51, 0xf2, 0x1f, 0xc5, 0xce, 0x1f, 0xa9, 0x2a, 0x15, 0xd8, 0x5a, 0xa5, 0x92, 0xf2, 0x8f,
+ 0xa4, 0x92, 0xf8, 0x97, 0x11, 0x27, 0x4a, 0xdd, 0x67, 0xdf, 0xdb, 0xd3, 0x3d, 0x33, 0x58, 0x62,
+ 0x41, 0x4a, 0xe5, 0x7f, 0x33, 0xe7, 0x9c, 0x7b, 0xee, 0xed, 0xfb, 0x38, 0xf7, 0xdc, 0x73, 0xcf,
+ 0x39, 0x17, 0x5e, 0xde, 0x7d, 0x29, 0x9e, 0xf7, 0xc2, 0x85, 0xdd, 0xf6, 0x26, 0x89, 0x02, 0x92,
+ 0x90, 0x78, 0x61, 0x9f, 0x04, 0x6e, 0x18, 0x2d, 0x08, 0x84, 0xd3, 0xf2, 0x16, 0x9a, 0x61, 0x44,
+ 0x16, 0xf6, 0x9f, 0x5d, 0xd8, 0x26, 0x01, 0x89, 0x9c, 0x84, 0xb8, 0xf3, 0xad, 0x28, 0x4c, 0x42,
+ 0x84, 0x38, 0xcd, 0xbc, 0xd3, 0xf2, 0xe6, 0x29, 0xcd, 0xfc, 0xfe, 0xb3, 0xb3, 0xcf, 0x6c, 0x7b,
+ 0xc9, 0x4e, 0x7b, 0x73, 0xbe, 0x19, 0xee, 0x2d, 0x6c, 0x87, 0xdb, 0xe1, 0x02, 0x23, 0xdd, 0x6c,
+ 0x6f, 0xb1, 0x7f, 0xec, 0x0f, 0xfb, 0xc5, 0x59, 0xcc, 0xae, 0xa7, 0xd5, 0x90, 0xdb, 0x09, 0x09,
+ 0x62, 0x2f, 0x0c, 0xe2, 0x67, 0x9c, 0x96, 0x17, 0x93, 0x68, 0x9f, 0x44, 0x0b, 0xad, 0xdd, 0x6d,
+ 0x8a, 0x8b, 0x4d, 0x82, 0x85, 0xfd, 0x67, 0x37, 0x49, 0xe2, 0x74, 0xb4, 0x68, 0xf6, 0xf9, 0x94,
+ 0xdd, 0x9e, 0xd3, 0xdc, 0xf1, 0x02, 0x12, 0x1d, 0x48, 0x1e, 0x0b, 0x11, 0x89, 0xc3, 0x76, 0xd4,
+ 0x24, 0xc7, 0x2a, 0x15, 0x2f, 0xec, 0x91, 0xc4, 0xc9, 0xf9, 0xfa, 0xd9, 0x85, 0xa2, 0x52, 0x51,
+ 0x3b, 0x48, 0xbc, 0xbd, 0xce, 0x6a, 0x3e, 0xd5, 0xab, 0x40, 0xdc, 0xdc, 0x21, 0x7b, 0x4e, 0x47,
+ 0xb9, 0xe7, 0x8a, 0xca, 0xb5, 0x13, 0xcf, 0x5f, 0xf0, 0x82, 0x24, 0x4e, 0xa2, 0x6c, 0x21, 0xfb,
+ 0x3b, 0x16, 0x9c, 0x5f, 0x7c, 0xa3, 0xb1, 0xe2, 0x3b, 0x71, 0xe2, 0x35, 0x97, 0xfc, 0xb0, 0xb9,
+ 0xdb, 0x48, 0xc2, 0x88, 0xdc, 0x0c, 0xfd, 0xf6, 0x1e, 0x69, 0xb0, 0x8e, 0x40, 0x4f, 0xc3, 0xc8,
+ 0x3e, 0xfb, 0xbf, 0x56, 0xab, 0x5a, 0xe7, 0xad, 0x0b, 0x95, 0xa5, 0xa9, 0x6f, 0x1d, 0xce, 0x7d,
+ 0xec, 0xce, 0xe1, 0xdc, 0xc8, 0x4d, 0x01, 0xc7, 0x8a, 0x02, 0x3d, 0x06, 0x43, 0x5b, 0xf1, 0xc6,
+ 0x41, 0x8b, 0x54, 0x4b, 0x8c, 0x76, 0x42, 0xd0, 0x0e, 0xad, 0x36, 0x28, 0x14, 0x0b, 0x2c, 0x5a,
+ 0x80, 0x4a, 0xcb, 0x89, 0x12, 0x2f, 0xf1, 0xc2, 0xa0, 0x5a, 0x3e, 0x6f, 0x5d, 0x18, 0x5c, 0x9a,
+ 0x16, 0xa4, 0x95, 0xba, 0x44, 0xe0, 0x94, 0x86, 0x36, 0x23, 0x22, 0x8e, 0x7b, 0x3d, 0xf0, 0x0f,
+ 0xaa, 0x03, 0xe7, 0xad, 0x0b, 0x23, 0x69, 0x33, 0xb0, 0x80, 0x63, 0x45, 0x61, 0xff, 0x62, 0x09,
+ 0x46, 0x16, 0xb7, 0xb6, 0xbc, 0xc0, 0x4b, 0x0e, 0xd0, 0x4d, 0x18, 0x0b, 0x42, 0x97, 0xc8, 0xff,
+ 0xec, 0x2b, 0x46, 0x2f, 0x9e, 0x9f, 0xef, 0x9c, 0x99, 0xf3, 0xd7, 0x34, 0xba, 0xa5, 0xa9, 0x3b,
+ 0x87, 0x73, 0x63, 0x3a, 0x04, 0x1b, 0x7c, 0x10, 0x86, 0xd1, 0x56, 0xe8, 0x2a, 0xb6, 0x25, 0xc6,
+ 0x76, 0x2e, 0x8f, 0x6d, 0x3d, 0x25, 0x5b, 0x9a, 0xbc, 0x73, 0x38, 0x37, 0xaa, 0x01, 0xb0, 0xce,
+ 0x04, 0x6d, 0xc2, 0x24, 0xfd, 0x1b, 0x24, 0x9e, 0xe2, 0x5b, 0x66, 0x7c, 0x1f, 0x2d, 0xe2, 0xab,
+ 0x91, 0x2e, 0x9d, 0xb9, 0x73, 0x38, 0x37, 0x99, 0x01, 0xe2, 0x2c, 0x43, 0xfb, 0x7d, 0x98, 0x58,
+ 0x4c, 0x12, 0xa7, 0xb9, 0x43, 0x5c, 0x3e, 0x82, 0xe8, 0x79, 0x18, 0x08, 0x9c, 0x3d, 0x22, 0xc6,
+ 0xf7, 0xbc, 0xe8, 0xd8, 0x81, 0x6b, 0xce, 0x1e, 0x39, 0x3a, 0x9c, 0x9b, 0xba, 0x11, 0x78, 0xef,
+ 0xb5, 0xc5, 0xac, 0xa0, 0x30, 0xcc, 0xa8, 0xd1, 0x45, 0x00, 0x97, 0xec, 0x7b, 0x4d, 0x52, 0x77,
+ 0x92, 0x1d, 0x31, 0xde, 0x48, 0x94, 0x85, 0x9a, 0xc2, 0x60, 0x8d, 0xca, 0xbe, 0x0d, 0x95, 0xc5,
+ 0xfd, 0xd0, 0x73, 0xeb, 0xa1, 0x1b, 0xa3, 0x5d, 0x98, 0x6c, 0x45, 0x64, 0x8b, 0x44, 0x0a, 0x54,
+ 0xb5, 0xce, 0x97, 0x2f, 0x8c, 0x5e, 0xbc, 0x90, 0xfb, 0xb1, 0x26, 0xe9, 0x4a, 0x90, 0x44, 0x07,
+ 0x4b, 0xf7, 0x8b, 0xfa, 0x26, 0x33, 0x58, 0x9c, 0xe5, 0x6c, 0xff, 0x9b, 0x12, 0x9c, 0x5d, 0x7c,
+ 0xbf, 0x1d, 0x91, 0x9a, 0x17, 0xef, 0x66, 0x67, 0xb8, 0xeb, 0xc5, 0xbb, 0xd7, 0xd2, 0x1e, 0x50,
+ 0x53, 0xab, 0x26, 0xe0, 0x58, 0x51, 0xa0, 0x67, 0x60, 0x98, 0xfe, 0xbe, 0x81, 0xd7, 0xc4, 0x27,
+ 0x9f, 0x11, 0xc4, 0xa3, 0x35, 0x27, 0x71, 0x6a, 0x1c, 0x85, 0x25, 0x0d, 0x5a, 0x87, 0xd1, 0x26,
+ 0x5b, 0x90, 0xdb, 0xeb, 0xa1, 0x4b, 0xd8, 0x60, 0x56, 0x96, 0x9e, 0xa2, 0xe4, 0xcb, 0x29, 0xf8,
+ 0xe8, 0x70, 0xae, 0xca, 0xdb, 0x26, 0x58, 0x68, 0x38, 0xac, 0x97, 0x47, 0xb6, 0x5a, 0x5f, 0x03,
+ 0x8c, 0x13, 0xe4, 0xac, 0xad, 0x0b, 0xda, 0x52, 0x19, 0x64, 0x4b, 0x65, 0x2c, 0x7f, 0x99, 0xa0,
+ 0x67, 0x61, 0x60, 0xd7, 0x0b, 0xdc, 0xea, 0x10, 0xe3, 0xf5, 0x30, 0x1d, 0xf3, 0x2b, 0x5e, 0xe0,
+ 0x1e, 0x1d, 0xce, 0x4d, 0x1b, 0xcd, 0xa1, 0x40, 0xcc, 0x48, 0xed, 0x3f, 0xb1, 0x60, 0x8e, 0xe1,
+ 0x56, 0x3d, 0x9f, 0xd4, 0x49, 0x14, 0x7b, 0x71, 0x42, 0x82, 0xc4, 0xe8, 0xd0, 0x8b, 0x00, 0x31,
+ 0x69, 0x46, 0x24, 0xd1, 0xba, 0x54, 0x4d, 0x8c, 0x86, 0xc2, 0x60, 0x8d, 0x8a, 0x0a, 0x84, 0x78,
+ 0xc7, 0x89, 0xd8, 0xfc, 0x12, 0x1d, 0xab, 0x04, 0x42, 0x43, 0x22, 0x70, 0x4a, 0x63, 0x08, 0x84,
+ 0x72, 0x2f, 0x81, 0x80, 0x3e, 0x03, 0x93, 0x69, 0x65, 0x71, 0xcb, 0x69, 0xca, 0x0e, 0x64, 0x4b,
+ 0xa6, 0x61, 0xa2, 0x70, 0x96, 0xd6, 0xfe, 0x07, 0x96, 0x98, 0x3c, 0xf4, 0xab, 0x3f, 0xe2, 0xdf,
+ 0x6a, 0xff, 0x96, 0x05, 0xc3, 0x4b, 0x5e, 0xe0, 0x7a, 0xc1, 0x36, 0xfa, 0x1c, 0x8c, 0xd0, 0xbd,
+ 0xc9, 0x75, 0x12, 0x47, 0xc8, 0xbd, 0x4f, 0x6a, 0x6b, 0x4b, 0x6d, 0x15, 0xf3, 0xad, 0xdd, 0x6d,
+ 0x0a, 0x88, 0xe7, 0x29, 0x35, 0x5d, 0x6d, 0xd7, 0x37, 0xdf, 0x25, 0xcd, 0x64, 0x9d, 0x24, 0x4e,
+ 0xfa, 0x39, 0x29, 0x0c, 0x2b, 0xae, 0xe8, 0x0a, 0x0c, 0x25, 0x4e, 0xb4, 0x4d, 0x12, 0x21, 0x00,
+ 0x73, 0x05, 0x15, 0x2f, 0x89, 0xe9, 0x8a, 0x24, 0x41, 0x93, 0xa4, 0xdb, 0xc2, 0x06, 0x2b, 0x8a,
+ 0x05, 0x0b, 0xbb, 0x09, 0x63, 0xcb, 0x4e, 0xcb, 0xd9, 0xf4, 0x7c, 0x2f, 0xf1, 0x48, 0x8c, 0x1e,
+ 0x87, 0xb2, 0xe3, 0xba, 0x4c, 0x2a, 0x54, 0x96, 0xce, 0xde, 0x39, 0x9c, 0x2b, 0x2f, 0xba, 0x74,
+ 0x7a, 0x82, 0xa2, 0x3a, 0xc0, 0x94, 0x02, 0x3d, 0x09, 0x03, 0x6e, 0x14, 0xb6, 0xaa, 0x25, 0x46,
+ 0x79, 0x1f, 0x9d, 0xc9, 0xb5, 0x28, 0x6c, 0x65, 0x48, 0x19, 0x8d, 0xfd, 0x3b, 0x25, 0x78, 0x68,
+ 0x99, 0xb4, 0x76, 0x56, 0x1b, 0x05, 0xf3, 0xf7, 0x02, 0x8c, 0xec, 0x85, 0x81, 0x97, 0x84, 0x51,
+ 0x2c, 0xaa, 0x66, 0x0b, 0x68, 0x5d, 0xc0, 0xb0, 0xc2, 0xa2, 0xf3, 0x30, 0xd0, 0x4a, 0x85, 0xdf,
+ 0x98, 0x14, 0x9c, 0x4c, 0xec, 0x31, 0x0c, 0xa5, 0x68, 0xc7, 0x24, 0x12, 0x0b, 0x5f, 0x51, 0xdc,
+ 0x88, 0x49, 0x84, 0x19, 0x26, 0x9d, 0x41, 0x74, 0x6e, 0x89, 0x59, 0x99, 0x99, 0x41, 0x14, 0x83,
+ 0x35, 0x2a, 0x54, 0x87, 0x0a, 0xff, 0x87, 0xc9, 0x16, 0x5b, 0xe3, 0x05, 0xfd, 0xde, 0x90, 0x44,
+ 0xa2, 0xdf, 0xc7, 0xd9, 0x14, 0x93, 0x40, 0x9c, 0x32, 0x31, 0xa6, 0xd8, 0x50, 0xcf, 0x29, 0xf6,
+ 0xcd, 0x12, 0x20, 0xde, 0x85, 0x3f, 0x64, 0x1d, 0x77, 0xa3, 0xb3, 0xe3, 0x72, 0x37, 0x9b, 0xab,
+ 0x61, 0xd3, 0xf1, 0xb3, 0xb3, 0xf6, 0xa4, 0x7a, 0xef, 0x17, 0x2c, 0x40, 0xcb, 0x5e, 0xe0, 0x92,
+ 0xe8, 0x14, 0x34, 0xad, 0xe3, 0xc9, 0x8e, 0xab, 0x30, 0xb1, 0xec, 0x7b, 0x24, 0x48, 0xd6, 0xea,
+ 0xcb, 0x61, 0xb0, 0xe5, 0x6d, 0xa3, 0x4f, 0xc3, 0x04, 0x55, 0x3c, 0xc3, 0x76, 0xd2, 0x20, 0xcd,
+ 0x30, 0x60, 0x7b, 0x34, 0x55, 0xd7, 0xd0, 0x9d, 0xc3, 0xb9, 0x89, 0x0d, 0x03, 0x83, 0x33, 0x94,
+ 0xf6, 0x7f, 0xa4, 0x1f, 0x1a, 0xee, 0xb5, 0xc2, 0x80, 0x04, 0xc9, 0x72, 0x18, 0xb8, 0x5c, 0x97,
+ 0xfb, 0x34, 0x0c, 0x24, 0xb4, 0xe1, 0xfc, 0x23, 0x1f, 0x93, 0x43, 0x4b, 0x9b, 0x7b, 0x74, 0x38,
+ 0x77, 0x5f, 0x67, 0x09, 0xf6, 0x41, 0xac, 0x0c, 0xfa, 0x31, 0x18, 0x8a, 0x13, 0x27, 0x69, 0xc7,
+ 0xe2, 0xb3, 0x1f, 0x91, 0x9f, 0xdd, 0x60, 0xd0, 0xa3, 0xc3, 0xb9, 0x49, 0x55, 0x8c, 0x83, 0xb0,
+ 0x28, 0x80, 0x9e, 0x80, 0xe1, 0x3d, 0x12, 0xc7, 0xce, 0xb6, 0xdc, 0x86, 0x27, 0x45, 0xd9, 0xe1,
+ 0x75, 0x0e, 0xc6, 0x12, 0x8f, 0x1e, 0x85, 0x41, 0x12, 0x45, 0x61, 0x24, 0x66, 0xd5, 0xb8, 0x20,
+ 0x1c, 0x5c, 0xa1, 0x40, 0xcc, 0x71, 0xf6, 0xbf, 0xb7, 0x60, 0x52, 0xb5, 0x95, 0xd7, 0x75, 0x0a,
+ 0xf2, 0xf6, 0x2d, 0x80, 0xa6, 0xfc, 0xc0, 0x98, 0xc9, 0xbb, 0xd1, 0x8b, 0x8f, 0xe5, 0x4d, 0xe1,
+ 0xce, 0x6e, 0x4c, 0x39, 0x2b, 0x50, 0x8c, 0x35, 0x6e, 0xf6, 0xbf, 0xb0, 0xe0, 0x4c, 0xe6, 0x8b,
+ 0xae, 0x7a, 0x71, 0x82, 0xde, 0xee, 0xf8, 0xaa, 0xf9, 0xfe, 0xbe, 0x8a, 0x96, 0x66, 0xdf, 0xa4,
+ 0xe6, 0x9c, 0x84, 0x68, 0x5f, 0x74, 0x19, 0x06, 0xbd, 0x84, 0xec, 0xc9, 0x8f, 0x79, 0xb4, 0xeb,
+ 0xc7, 0xf0, 0x56, 0xa5, 0x23, 0xb2, 0x46, 0x4b, 0x62, 0xce, 0xc0, 0xfe, 0x9f, 0x16, 0x54, 0xf8,
+ 0xb4, 0x5d, 0x77, 0x5a, 0xa7, 0x30, 0x16, 0x6b, 0x30, 0xc0, 0xb8, 0xf3, 0x86, 0x3f, 0x9e, 0xdf,
+ 0x70, 0xd1, 0x9c, 0x79, 0xaa, 0x4c, 0x71, 0xa5, 0x55, 0x09, 0x33, 0x0a, 0xc2, 0x8c, 0xc5, 0xec,
+ 0x8b, 0x50, 0x51, 0x04, 0x68, 0x0a, 0xca, 0xbb, 0x84, 0x1f, 0x54, 0x2a, 0x98, 0xfe, 0x44, 0x33,
+ 0x30, 0xb8, 0xef, 0xf8, 0x6d, 0xb1, 0xd8, 0x31, 0xff, 0xf3, 0xe9, 0xd2, 0x4b, 0x96, 0xfd, 0x0d,
+ 0xb6, 0xc6, 0x44, 0x25, 0x2b, 0xc1, 0xbe, 0x10, 0x26, 0xef, 0xc3, 0x8c, 0x9f, 0x23, 0xc3, 0x44,
+ 0x47, 0xf4, 0x2f, 0xf3, 0x1e, 0x12, 0x6d, 0x9d, 0xc9, 0xc3, 0xe2, 0xdc, 0x3a, 0xe8, 0x36, 0x10,
+ 0xb6, 0xe8, 0x8c, 0x72, 0x7c, 0xd6, 0x5e, 0xa1, 0x80, 0x5e, 0x17, 0x30, 0xac, 0xb0, 0x54, 0x40,
+ 0xcc, 0xa8, 0xc6, 0x5f, 0x21, 0x07, 0x0d, 0xe2, 0x93, 0x66, 0x12, 0x46, 0x1f, 0x6a, 0xf3, 0x1f,
+ 0xe6, 0xbd, 0xcf, 0xe5, 0xcb, 0xa8, 0x60, 0x50, 0xbe, 0x42, 0x0e, 0xf8, 0x50, 0xe8, 0x5f, 0x57,
+ 0xee, 0xfa, 0x75, 0xbf, 0x66, 0xc1, 0xb8, 0xfa, 0xba, 0x53, 0x58, 0x48, 0x4b, 0xe6, 0x42, 0x7a,
+ 0xb8, 0xeb, 0x7c, 0x2c, 0x58, 0x42, 0x3f, 0x60, 0x22, 0x40, 0xd0, 0xd4, 0xa3, 0x90, 0x76, 0x0d,
+ 0x95, 0xd9, 0x1f, 0xe6, 0x80, 0xf4, 0xf3, 0x5d, 0x57, 0xc8, 0xc1, 0x46, 0x48, 0xd5, 0x87, 0xfc,
+ 0xef, 0x32, 0x46, 0x6d, 0xa0, 0xeb, 0xa8, 0xfd, 0x7a, 0x09, 0xce, 0xaa, 0x1e, 0x30, 0x36, 0xe8,
+ 0x1f, 0xf6, 0x3e, 0x78, 0x16, 0x46, 0x5d, 0xb2, 0xe5, 0xb4, 0xfd, 0x44, 0x9d, 0x45, 0x07, 0xb9,
+ 0x3d, 0xa2, 0x96, 0x82, 0xb1, 0x4e, 0x73, 0x8c, 0x6e, 0xfb, 0xb7, 0xc0, 0x64, 0x6f, 0xe2, 0xd0,
+ 0x19, 0x4c, 0xb5, 0x37, 0xcd, 0xa2, 0x30, 0xa6, 0x5b, 0x14, 0x84, 0xf5, 0xe0, 0x51, 0x18, 0xf4,
+ 0xf6, 0xe8, 0x5e, 0x5c, 0x32, 0xb7, 0xd8, 0x35, 0x0a, 0xc4, 0x1c, 0x87, 0x3e, 0x01, 0xc3, 0xcd,
+ 0x70, 0x6f, 0xcf, 0x09, 0xdc, 0x6a, 0x99, 0xe9, 0x93, 0xa3, 0x74, 0xbb, 0x5e, 0xe6, 0x20, 0x2c,
+ 0x71, 0xe8, 0x21, 0x18, 0x70, 0xa2, 0xed, 0xb8, 0x3a, 0xc0, 0x68, 0x46, 0x68, 0x4d, 0x8b, 0xd1,
+ 0x76, 0x8c, 0x19, 0x94, 0xea, 0x89, 0xb7, 0xc2, 0x68, 0xd7, 0x0b, 0xb6, 0x6b, 0x5e, 0xc4, 0x94,
+ 0x3e, 0x4d, 0x4f, 0x7c, 0x43, 0x61, 0xb0, 0x46, 0x85, 0x56, 0x61, 0xb0, 0x15, 0x46, 0x49, 0x5c,
+ 0x1d, 0x62, 0xdd, 0xfd, 0x48, 0xc1, 0x52, 0xe2, 0x5f, 0x5b, 0x0f, 0xa3, 0x24, 0xfd, 0x00, 0xfa,
+ 0x2f, 0xc6, 0xbc, 0x38, 0xfa, 0x31, 0x28, 0x93, 0x60, 0xbf, 0x3a, 0xcc, 0xb8, 0xcc, 0xe6, 0x71,
+ 0x59, 0x09, 0xf6, 0x6f, 0x3a, 0x51, 0x2a, 0x67, 0x56, 0x82, 0x7d, 0x4c, 0xcb, 0xa0, 0x37, 0xa1,
+ 0x22, 0xad, 0x91, 0x71, 0x75, 0xa4, 0x78, 0x8a, 0x61, 0x41, 0x84, 0xc9, 0x7b, 0x6d, 0x2f, 0x22,
+ 0x7b, 0x24, 0x48, 0xe2, 0xf4, 0x3c, 0x29, 0xb1, 0x31, 0x4e, 0xb9, 0xa1, 0x37, 0x61, 0x8c, 0xeb,
+ 0x91, 0xeb, 0x61, 0x3b, 0x48, 0xe2, 0x6a, 0x85, 0x35, 0x2f, 0xd7, 0x74, 0x75, 0x33, 0xa5, 0x5b,
+ 0x9a, 0x11, 0x4c, 0xc7, 0x34, 0x60, 0x8c, 0x0d, 0x56, 0x08, 0xc3, 0xb8, 0xef, 0xed, 0x93, 0x80,
+ 0xc4, 0x71, 0x3d, 0x0a, 0x37, 0x49, 0x15, 0x58, 0xcb, 0x1f, 0xc8, 0xb7, 0xe8, 0x84, 0x9b, 0x64,
+ 0x69, 0xfa, 0xce, 0xe1, 0xdc, 0xf8, 0x55, 0xbd, 0x0c, 0x36, 0x59, 0xa0, 0x1b, 0x30, 0x41, 0x15,
+ 0x54, 0x2f, 0x65, 0x3a, 0xda, 0x8b, 0x29, 0xd3, 0x4e, 0xb1, 0x51, 0x08, 0x67, 0x98, 0xa0, 0xd7,
+ 0xa0, 0xe2, 0x7b, 0x5b, 0xa4, 0x79, 0xd0, 0xf4, 0x49, 0x75, 0x8c, 0x71, 0xcc, 0x5d, 0x56, 0x57,
+ 0x25, 0x11, 0x3f, 0x00, 0xa8, 0xbf, 0x38, 0x2d, 0x8e, 0x6e, 0xc2, 0x7d, 0x09, 0x89, 0xf6, 0xbc,
+ 0xc0, 0xa1, 0xcb, 0x41, 0xe8, 0x93, 0xcc, 0x2e, 0x36, 0xce, 0xe6, 0xdb, 0x39, 0xd1, 0x75, 0xf7,
+ 0x6d, 0xe4, 0x52, 0xe1, 0x82, 0xd2, 0xe8, 0x3a, 0x4c, 0xb2, 0x95, 0x50, 0x6f, 0xfb, 0x7e, 0x3d,
+ 0xf4, 0xbd, 0xe6, 0x41, 0x75, 0x82, 0x31, 0xfc, 0x84, 0x34, 0x7c, 0xad, 0x99, 0x68, 0x7a, 0xe2,
+ 0x4d, 0xff, 0xe1, 0x6c, 0x69, 0xb4, 0xc9, 0x0c, 0x21, 0xed, 0xc8, 0x4b, 0x0e, 0xe8, 0xfc, 0x25,
+ 0xb7, 0x93, 0xea, 0x64, 0xd7, 0xf3, 0xa3, 0x4e, 0xaa, 0xac, 0x25, 0x3a, 0x10, 0x67, 0x19, 0xd2,
+ 0xa5, 0x1d, 0x27, 0xae, 0x17, 0x54, 0xa7, 0x98, 0xc4, 0x50, 0x2b, 0xa3, 0x41, 0x81, 0x98, 0xe3,
+ 0x98, 0x11, 0x84, 0xfe, 0xb8, 0x4e, 0x25, 0xe8, 0x34, 0x23, 0x4c, 0x8d, 0x20, 0x12, 0x81, 0x53,
+ 0x1a, 0xba, 0x2d, 0x27, 0xc9, 0x41, 0x15, 0x31, 0x52, 0xb5, 0x5c, 0x36, 0x36, 0xde, 0xc4, 0x14,
+ 0x8e, 0xae, 0xc2, 0x30, 0x09, 0xf6, 0x57, 0xa3, 0x70, 0xaf, 0x7a, 0xa6, 0x78, 0xcd, 0xae, 0x70,
+ 0x12, 0x2e, 0xd0, 0xd3, 0x03, 0x80, 0x00, 0x63, 0xc9, 0x02, 0xdd, 0x86, 0x6a, 0xce, 0x88, 0xf0,
+ 0x01, 0x98, 0x61, 0x03, 0xf0, 0x8a, 0x28, 0x5b, 0xdd, 0x28, 0xa0, 0x3b, 0xea, 0x82, 0xc3, 0x85,
+ 0xdc, 0xed, 0x4d, 0x98, 0x50, 0x82, 0x85, 0x8d, 0x2d, 0x9a, 0x83, 0x41, 0x2a, 0x31, 0xe5, 0x91,
+ 0xba, 0x42, 0xbb, 0x92, 0x99, 0xa6, 0x30, 0x87, 0xb3, 0xae, 0xf4, 0xde, 0x27, 0x4b, 0x07, 0x09,
+ 0xe1, 0xc7, 0xa2, 0xb2, 0xd6, 0x95, 0x12, 0x81, 0x53, 0x1a, 0xfb, 0xff, 0x72, 0xc5, 0x24, 0x95,
+ 0x5e, 0x7d, 0xc8, 0xeb, 0xa7, 0x61, 0x64, 0x27, 0x8c, 0x13, 0x4a, 0xcd, 0xea, 0x18, 0x4c, 0x55,
+ 0x91, 0xcb, 0x02, 0x8e, 0x15, 0x05, 0x7a, 0x19, 0xc6, 0x9b, 0x7a, 0x05, 0x62, 0xb3, 0x39, 0x2b,
+ 0x8a, 0x98, 0xb5, 0x63, 0x93, 0x16, 0xbd, 0x04, 0x23, 0xec, 0x82, 0xa2, 0x19, 0xfa, 0xe2, 0x00,
+ 0x26, 0x77, 0xcc, 0x91, 0xba, 0x80, 0x1f, 0x69, 0xbf, 0xb1, 0xa2, 0xa6, 0x87, 0x62, 0xda, 0x84,
+ 0xb5, 0xba, 0x10, 0xf3, 0xea, 0x50, 0x7c, 0x99, 0x41, 0xb1, 0xc0, 0xda, 0x7f, 0xad, 0xa4, 0xf5,
+ 0x32, 0x3d, 0x52, 0x10, 0x54, 0x87, 0xe1, 0x5b, 0x8e, 0x97, 0x78, 0xc1, 0xb6, 0xd8, 0xcf, 0x9f,
+ 0xe8, 0x2a, 0xf3, 0x59, 0xa1, 0x37, 0x78, 0x01, 0xbe, 0x2b, 0x89, 0x3f, 0x58, 0xb2, 0xa1, 0x1c,
+ 0xa3, 0x76, 0x10, 0x50, 0x8e, 0xa5, 0x7e, 0x39, 0x62, 0x5e, 0x80, 0x73, 0x14, 0x7f, 0xb0, 0x64,
+ 0x83, 0xde, 0x06, 0x90, 0xf3, 0x86, 0xb8, 0xe2, 0x62, 0xe0, 0xe9, 0xde, 0x4c, 0x37, 0x54, 0x99,
+ 0xa5, 0x09, 0xba, 0xe7, 0xa5, 0xff, 0xb1, 0xc6, 0xcf, 0x4e, 0x98, 0xde, 0xd3, 0xd9, 0x18, 0xf4,
+ 0x59, 0xba, 0x54, 0x9d, 0x28, 0x21, 0xee, 0x62, 0x22, 0x3a, 0xe7, 0xc9, 0xfe, 0xd4, 0xd6, 0x0d,
+ 0x6f, 0x8f, 0xe8, 0xcb, 0x5a, 0x30, 0xc1, 0x29, 0x3f, 0xfb, 0x37, 0xcb, 0x50, 0x2d, 0x6a, 0x2e,
+ 0x9d, 0x74, 0xe4, 0xb6, 0x97, 0x2c, 0x53, 0x75, 0xc5, 0x32, 0x27, 0xdd, 0x8a, 0x80, 0x63, 0x45,
+ 0x41, 0x47, 0x3f, 0xf6, 0xb6, 0xe5, 0xa9, 0x63, 0x30, 0x1d, 0xfd, 0x06, 0x83, 0x62, 0x81, 0xa5,
+ 0x74, 0x11, 0x71, 0x62, 0x71, 0xf3, 0xa4, 0xcd, 0x12, 0xcc, 0xa0, 0x58, 0x60, 0x75, 0x83, 0xc1,
+ 0x40, 0x0f, 0x83, 0x81, 0xd1, 0x45, 0x83, 0x27, 0xdb, 0x45, 0xe8, 0x1d, 0x80, 0x2d, 0x2f, 0xf0,
+ 0xe2, 0x1d, 0xc6, 0x7d, 0xe8, 0xd8, 0xdc, 0x95, 0xb2, 0xb3, 0xaa, 0xb8, 0x60, 0x8d, 0x23, 0x7a,
+ 0x01, 0x46, 0xd5, 0x02, 0x5c, 0xab, 0x55, 0x87, 0xcd, 0x6b, 0x8d, 0x54, 0x1a, 0xd5, 0xb0, 0x4e,
+ 0x67, 0xbf, 0x9b, 0x9d, 0x2f, 0x62, 0x05, 0x68, 0xfd, 0x6b, 0xf5, 0xdb, 0xbf, 0xa5, 0xee, 0xfd,
+ 0x6b, 0xff, 0x6e, 0x19, 0x26, 0x8d, 0xca, 0xda, 0x71, 0x1f, 0x32, 0xeb, 0x12, 0xdd, 0x88, 0x9c,
+ 0x84, 0x88, 0xf5, 0x67, 0xf7, 0x5e, 0x2a, 0xfa, 0x66, 0x45, 0x57, 0x00, 0x2f, 0x8f, 0xde, 0x81,
+ 0x8a, 0xef, 0xc4, 0xcc, 0xf8, 0x40, 0xc4, 0xba, 0xeb, 0x87, 0x59, 0xaa, 0xe8, 0x3b, 0x71, 0xa2,
+ 0xed, 0x05, 0x9c, 0x77, 0xca, 0x92, 0xee, 0x98, 0x54, 0x39, 0x91, 0x57, 0x9b, 0xaa, 0x11, 0x54,
+ 0x83, 0x39, 0xc0, 0x1c, 0x87, 0x5e, 0x82, 0xb1, 0x88, 0xb0, 0x59, 0xb1, 0x4c, 0x75, 0x2d, 0x36,
+ 0xcd, 0x06, 0x53, 0xa5, 0x0c, 0x6b, 0x38, 0x6c, 0x50, 0xa6, 0xba, 0xf6, 0x50, 0x17, 0x5d, 0xfb,
+ 0x09, 0x18, 0x66, 0x3f, 0xd4, 0x0c, 0x50, 0xa3, 0xb1, 0xc6, 0xc1, 0x58, 0xe2, 0xb3, 0x13, 0x66,
+ 0xa4, 0xcf, 0x09, 0xf3, 0x24, 0x4c, 0xd4, 0x1c, 0xb2, 0x17, 0x06, 0x2b, 0x81, 0xdb, 0x0a, 0xbd,
+ 0x20, 0x41, 0x55, 0x18, 0x60, 0xbb, 0x03, 0x5f, 0xdb, 0x03, 0x94, 0x03, 0x1e, 0xa0, 0x9a, 0xb3,
+ 0xfd, 0x07, 0x25, 0x18, 0xaf, 0x11, 0x9f, 0x24, 0x84, 0x9f, 0x35, 0x62, 0xb4, 0x0a, 0x68, 0x3b,
+ 0x72, 0x9a, 0xa4, 0x4e, 0x22, 0x2f, 0x74, 0x75, 0x63, 0x64, 0x99, 0x19, 0xfc, 0xd1, 0xa5, 0x0e,
+ 0x2c, 0xce, 0x29, 0x81, 0xde, 0x82, 0xf1, 0x56, 0x44, 0x0c, 0x1b, 0x9a, 0x55, 0xa4, 0x2e, 0xd4,
+ 0x75, 0x42, 0xae, 0xa9, 0x1a, 0x20, 0x6c, 0xb2, 0x42, 0x3f, 0x01, 0x53, 0x61, 0xd4, 0xda, 0x71,
+ 0x82, 0x1a, 0x69, 0x91, 0xc0, 0xa5, 0xaa, 0xb8, 0xb0, 0x11, 0xcc, 0xdc, 0x39, 0x9c, 0x9b, 0xba,
+ 0x9e, 0xc1, 0xe1, 0x0e, 0x6a, 0xf4, 0x16, 0x4c, 0xb7, 0xa2, 0xb0, 0xe5, 0x6c, 0xb3, 0x89, 0x22,
+ 0x34, 0x0e, 0x2e, 0x7d, 0x9e, 0xbe, 0x73, 0x38, 0x37, 0x5d, 0xcf, 0x22, 0x8f, 0x0e, 0xe7, 0xce,
+ 0xb0, 0x8e, 0xa2, 0x90, 0x14, 0x89, 0x3b, 0xd9, 0xd8, 0xdb, 0x70, 0xb6, 0x16, 0xde, 0x0a, 0x6e,
+ 0x39, 0x91, 0xbb, 0x58, 0x5f, 0xd3, 0x0e, 0xf7, 0xd7, 0xe4, 0xe1, 0x92, 0x5f, 0xbf, 0xe6, 0xee,
+ 0x53, 0x5a, 0x49, 0xae, 0xfe, 0xaf, 0x7a, 0x3e, 0x29, 0x30, 0x22, 0xfc, 0xcd, 0x92, 0x51, 0x53,
+ 0x4a, 0xaf, 0xec, 0xfe, 0x56, 0xa1, 0xdd, 0xff, 0x75, 0x18, 0xd9, 0xf2, 0x88, 0xef, 0x62, 0xb2,
+ 0x25, 0x46, 0xe6, 0xf1, 0xe2, 0x1b, 0xa5, 0x55, 0x4a, 0x29, 0x8d, 0x46, 0xfc, 0x68, 0xba, 0x2a,
+ 0x0a, 0x63, 0xc5, 0x06, 0xed, 0xc2, 0x94, 0x3c, 0xfb, 0x48, 0xac, 0x58, 0xc4, 0x4f, 0x74, 0x3b,
+ 0x50, 0x99, 0xcc, 0xd9, 0x00, 0xe2, 0x0c, 0x1b, 0xdc, 0xc1, 0x98, 0x9e, 0x45, 0xf7, 0xe8, 0x76,
+ 0x35, 0xc0, 0xa6, 0x34, 0x3b, 0x8b, 0xb2, 0x63, 0x35, 0x83, 0xda, 0x5f, 0xb5, 0xe0, 0xfe, 0x8e,
+ 0x9e, 0x11, 0xe6, 0x85, 0x13, 0x1e, 0x85, 0xec, 0x71, 0xbf, 0xd4, 0xfb, 0xb8, 0x6f, 0xff, 0x43,
+ 0x0b, 0x66, 0x56, 0xf6, 0x5a, 0xc9, 0x41, 0xcd, 0x33, 0xef, 0x26, 0x5e, 0x84, 0xa1, 0x3d, 0xe2,
+ 0x7a, 0xed, 0x3d, 0x31, 0x72, 0x73, 0x52, 0xa4, 0xaf, 0x33, 0xe8, 0xd1, 0xe1, 0xdc, 0x78, 0x23,
+ 0x09, 0x23, 0x67, 0x9b, 0x70, 0x00, 0x16, 0xe4, 0x6c, 0x63, 0xf4, 0xde, 0x27, 0x57, 0xbd, 0x3d,
+ 0x4f, 0xde, 0x10, 0x76, 0x35, 0x79, 0xcd, 0xcb, 0x0e, 0x9d, 0x7f, 0xbd, 0xed, 0x04, 0x89, 0x97,
+ 0x1c, 0x88, 0x6b, 0x17, 0xc9, 0x04, 0xa7, 0xfc, 0xec, 0xef, 0x58, 0x30, 0x29, 0x65, 0xc9, 0xa2,
+ 0xeb, 0x46, 0x24, 0x8e, 0xd1, 0x2c, 0x94, 0xbc, 0x96, 0x68, 0x25, 0x88, 0x56, 0x96, 0xd6, 0xea,
+ 0xb8, 0xe4, 0xb5, 0x50, 0x1d, 0x2a, 0xfc, 0xa2, 0x31, 0x9d, 0x5c, 0x7d, 0x5d, 0x57, 0xb2, 0x16,
+ 0x6c, 0xc8, 0x92, 0x38, 0x65, 0x22, 0xb5, 0x62, 0xb6, 0x0f, 0x95, 0xcd, 0x3b, 0x9b, 0xcb, 0x02,
+ 0x8e, 0x15, 0x05, 0xba, 0x00, 0x23, 0x41, 0xe8, 0xf2, 0x7b, 0x5f, 0xbe, 0xa6, 0xd9, 0x94, 0xbd,
+ 0x26, 0x60, 0x58, 0x61, 0xed, 0x9f, 0xb3, 0x60, 0x4c, 0x7e, 0x59, 0x9f, 0x0a, 0x3a, 0x5d, 0x5a,
+ 0xa9, 0x72, 0x9e, 0x2e, 0x2d, 0xaa, 0x60, 0x33, 0x8c, 0xa1, 0x57, 0x97, 0x8f, 0xa3, 0x57, 0xdb,
+ 0x5f, 0x29, 0xc1, 0x84, 0x6c, 0x4e, 0xa3, 0xbd, 0x19, 0x93, 0x04, 0x6d, 0x40, 0xc5, 0xe1, 0x5d,
+ 0x4e, 0xe4, 0x8c, 0x7d, 0x34, 0xff, 0xc4, 0x65, 0x8c, 0x4f, 0xaa, 0xea, 0x2c, 0xca, 0xd2, 0x38,
+ 0x65, 0x84, 0x7c, 0x98, 0x0e, 0xc2, 0x84, 0x6d, 0x7b, 0x0a, 0xdf, 0xed, 0x5e, 0x20, 0xcb, 0xfd,
+ 0x01, 0xc1, 0x7d, 0xfa, 0x5a, 0x96, 0x0b, 0xee, 0x64, 0x8c, 0x56, 0xa4, 0x95, 0xa7, 0xcc, 0x6a,
+ 0x38, 0xdf, 0xad, 0x86, 0x62, 0x23, 0x8f, 0xfd, 0xdb, 0x16, 0x54, 0x24, 0xd9, 0x69, 0x5c, 0x01,
+ 0xad, 0xc3, 0x70, 0xcc, 0x06, 0x41, 0x76, 0x8d, 0xdd, 0xad, 0xe1, 0x7c, 0xbc, 0xd2, 0xdd, 0x9c,
+ 0xff, 0x8f, 0xb1, 0xe4, 0xc1, 0xcc, 0xd4, 0xaa, 0xf9, 0x1f, 0x11, 0x33, 0xb5, 0x6a, 0x4f, 0xc1,
+ 0x0e, 0xf3, 0x5f, 0x59, 0x9b, 0xb5, 0xb3, 0x3c, 0x55, 0x3a, 0x5b, 0x11, 0xd9, 0xf2, 0x6e, 0x67,
+ 0x95, 0xce, 0x3a, 0x83, 0x62, 0x81, 0x45, 0x6f, 0xc3, 0x58, 0x53, 0x5a, 0x77, 0x53, 0x31, 0xf0,
+ 0x58, 0x57, 0x5b, 0xb9, 0xba, 0x56, 0xe1, 0x3e, 0x61, 0xcb, 0x5a, 0x79, 0x6c, 0x70, 0x33, 0x2f,
+ 0xe6, 0xcb, 0xbd, 0x2e, 0xe6, 0x53, 0xbe, 0x85, 0x57, 0xcb, 0xf6, 0x2f, 0x59, 0x30, 0xc4, 0x6d,
+ 0x84, 0xfd, 0x19, 0x55, 0xb5, 0x6b, 0xa2, 0xb4, 0xef, 0x6e, 0x52, 0xa0, 0xb8, 0x35, 0x42, 0xeb,
+ 0x50, 0x61, 0x3f, 0x98, 0xad, 0xa4, 0x5c, 0xec, 0x0c, 0xc7, 0x6b, 0xd5, 0x1b, 0x78, 0x53, 0x16,
+ 0xc3, 0x29, 0x07, 0xfb, 0xcb, 0x65, 0x2a, 0xaa, 0x52, 0x52, 0x63, 0x07, 0xb7, 0xee, 0xdd, 0x0e,
+ 0x5e, 0xba, 0x57, 0x3b, 0xf8, 0x36, 0x4c, 0x36, 0xb5, 0x3b, 0xa9, 0x74, 0x24, 0x2f, 0x74, 0x9d,
+ 0x24, 0xda, 0xf5, 0x15, 0xb7, 0x93, 0x2d, 0x9b, 0x4c, 0x70, 0x96, 0x2b, 0xfa, 0x2c, 0x8c, 0xf1,
+ 0x71, 0x16, 0xb5, 0x0c, 0xb0, 0x5a, 0x3e, 0x51, 0x3c, 0x5f, 0xf4, 0x2a, 0xd8, 0x4c, 0x6c, 0x68,
+ 0xc5, 0xb1, 0xc1, 0xcc, 0xfe, 0xe2, 0x20, 0x0c, 0xae, 0xec, 0x93, 0x20, 0x39, 0x05, 0x81, 0xd4,
+ 0x84, 0x09, 0x2f, 0xd8, 0x0f, 0xfd, 0x7d, 0xe2, 0x72, 0xfc, 0x71, 0x36, 0xd7, 0xfb, 0x04, 0xeb,
+ 0x89, 0x35, 0x83, 0x05, 0xce, 0xb0, 0xbc, 0x17, 0xa7, 0xf6, 0x4b, 0x30, 0xc4, 0xc7, 0x5e, 0x1c,
+ 0xd9, 0x73, 0x2d, 0xe0, 0xac, 0x13, 0xc5, 0x2a, 0x48, 0x2d, 0x0a, 0xdc, 0xe4, 0x2e, 0x8a, 0xa3,
+ 0x77, 0x61, 0x62, 0xcb, 0x8b, 0xe2, 0x84, 0x1e, 0xb7, 0xe3, 0xc4, 0xd9, 0x6b, 0xdd, 0xc5, 0x29,
+ 0x5d, 0xf5, 0xc3, 0xaa, 0xc1, 0x09, 0x67, 0x38, 0xa3, 0x6d, 0x18, 0xa7, 0x07, 0xc7, 0xb4, 0xaa,
+ 0xe1, 0x63, 0x57, 0xa5, 0xcc, 0x70, 0x57, 0x75, 0x46, 0xd8, 0xe4, 0x4b, 0x85, 0x49, 0x93, 0x1d,
+ 0x34, 0x47, 0x98, 0x46, 0xa1, 0x84, 0x09, 0x3f, 0x61, 0x72, 0x1c, 0x95, 0x49, 0xcc, 0x97, 0xa3,
+ 0x62, 0xca, 0xa4, 0xd4, 0x63, 0xc3, 0xfe, 0x1a, 0xdd, 0x1d, 0x69, 0x1f, 0x9e, 0xc2, 0xd6, 0xf2,
+ 0xaa, 0xb9, 0xb5, 0x3c, 0x50, 0x38, 0x9e, 0x05, 0xdb, 0xca, 0xe7, 0x60, 0x54, 0x1b, 0x6e, 0xb4,
+ 0x00, 0x95, 0xa6, 0x74, 0x3c, 0x10, 0x52, 0x57, 0xa9, 0x2f, 0xca, 0x23, 0x01, 0xa7, 0x34, 0xb4,
+ 0x37, 0xa8, 0xb2, 0x97, 0x75, 0x6b, 0xa2, 0xaa, 0x20, 0x66, 0x18, 0xfb, 0x39, 0x80, 0x95, 0xdb,
+ 0xa4, 0xb9, 0xc8, 0x0f, 0x5e, 0xda, 0xfd, 0x96, 0x55, 0x7c, 0xbf, 0x65, 0xff, 0x07, 0x0b, 0x26,
+ 0x56, 0x97, 0x0d, 0x85, 0x7c, 0x1e, 0x80, 0x6b, 0xa1, 0x6f, 0xbc, 0x71, 0x4d, 0x5a, 0x86, 0xb9,
+ 0x71, 0x4f, 0x41, 0xb1, 0x46, 0x81, 0x1e, 0x80, 0xb2, 0xdf, 0x0e, 0x84, 0x72, 0x38, 0x7c, 0xe7,
+ 0x70, 0xae, 0x7c, 0xb5, 0x1d, 0x60, 0x0a, 0xd3, 0x3c, 0x89, 0xca, 0x7d, 0x7b, 0x12, 0xf5, 0x74,
+ 0xc1, 0x46, 0x73, 0x30, 0x78, 0xeb, 0x96, 0xe7, 0xc6, 0xd5, 0xc1, 0xd4, 0x6a, 0xfd, 0xc6, 0x1b,
+ 0x6b, 0xb5, 0x18, 0x73, 0xb8, 0xfd, 0x17, 0xca, 0x30, 0xb5, 0xea, 0x93, 0xdb, 0xc6, 0x67, 0x3d,
+ 0x06, 0x43, 0x6e, 0xe4, 0xed, 0x93, 0x28, 0xbb, 0x8b, 0xd7, 0x18, 0x14, 0x0b, 0x6c, 0xdf, 0xde,
+ 0x4f, 0x37, 0x3a, 0xf7, 0xe3, 0x93, 0xf6, 0xf7, 0xea, 0xdd, 0x15, 0x6f, 0xc3, 0x30, 0xbf, 0x26,
+ 0xe5, 0x9d, 0x31, 0x7a, 0xf1, 0xd9, 0xbc, 0x26, 0x64, 0xfb, 0x62, 0x5e, 0x18, 0x3e, 0xb8, 0xcf,
+ 0x88, 0x12, 0x62, 0x02, 0x8a, 0x25, 0xcb, 0xd9, 0x4f, 0xc3, 0x98, 0x4e, 0x79, 0x2c, 0xe7, 0x91,
+ 0xbf, 0x68, 0xc1, 0x99, 0x55, 0x3f, 0x6c, 0xee, 0x66, 0x5c, 0xd1, 0x5e, 0x80, 0x51, 0xba, 0x9e,
+ 0x62, 0xc3, 0xad, 0xd5, 0x70, 0x74, 0x16, 0x28, 0xac, 0xd3, 0x69, 0xc5, 0x6e, 0xdc, 0x58, 0xab,
+ 0xe5, 0xf9, 0x47, 0x0b, 0x14, 0xd6, 0xe9, 0xec, 0x6f, 0x5b, 0xf0, 0xf0, 0xa5, 0xe5, 0x95, 0xd4,
+ 0x1b, 0xb3, 0xc3, 0x45, 0x9b, 0x2a, 0x77, 0xae, 0xd6, 0x94, 0x54, 0xb9, 0xab, 0xb1, 0x56, 0x08,
+ 0xec, 0x47, 0x25, 0xfc, 0xe0, 0x57, 0x2c, 0x38, 0x73, 0xc9, 0x4b, 0x30, 0x69, 0x85, 0x59, 0x67,
+ 0xe1, 0x88, 0xb4, 0xc2, 0xd8, 0x4b, 0xc2, 0xe8, 0x20, 0xeb, 0x2c, 0x8c, 0x15, 0x06, 0x6b, 0x54,
+ 0xbc, 0xe6, 0x7d, 0x2f, 0xa6, 0x2d, 0x2d, 0x99, 0x27, 0x4c, 0x2c, 0xe0, 0x58, 0x51, 0xd0, 0x0f,
+ 0x73, 0xbd, 0x88, 0x69, 0x08, 0x07, 0x62, 0x39, 0xab, 0x0f, 0xab, 0x49, 0x04, 0x4e, 0x69, 0xec,
+ 0xaf, 0x5a, 0x70, 0xf6, 0x92, 0xdf, 0x8e, 0x13, 0x12, 0x6d, 0xc5, 0x46, 0x63, 0x9f, 0x83, 0x0a,
+ 0x91, 0x5a, 0xb8, 0x68, 0xab, 0xda, 0x37, 0x94, 0x7a, 0xce, 0x3d, 0x95, 0x15, 0x5d, 0x1f, 0x7e,
+ 0x9d, 0xc7, 0xf3, 0x47, 0xfc, 0x7a, 0x09, 0xc6, 0x2f, 0x6f, 0x6c, 0xd4, 0x2f, 0x91, 0x44, 0x88,
+ 0xcc, 0xde, 0x16, 0x24, 0xac, 0x1d, 0x84, 0xbb, 0xe9, 0x3a, 0xed, 0xc4, 0xf3, 0xe7, 0x79, 0x68,
+ 0xcc, 0xfc, 0x5a, 0x90, 0x5c, 0x8f, 0x1a, 0x49, 0xe4, 0x05, 0xdb, 0xb9, 0x47, 0x67, 0x29, 0xd8,
+ 0xcb, 0x45, 0x82, 0x1d, 0x3d, 0x07, 0x43, 0x2c, 0x36, 0x47, 0x6a, 0x1d, 0x0f, 0x2a, 0x55, 0x81,
+ 0x41, 0x8f, 0x0e, 0xe7, 0x2a, 0x37, 0xf0, 0x1a, 0xff, 0x83, 0x05, 0x29, 0xba, 0x01, 0xa3, 0x3b,
+ 0x49, 0xd2, 0xba, 0x4c, 0x1c, 0x97, 0x44, 0x52, 0x3a, 0x9c, 0xcb, 0x93, 0x0e, 0xb4, 0x13, 0x38,
+ 0x59, 0xba, 0xa0, 0x52, 0x58, 0x8c, 0x75, 0x3e, 0x76, 0x03, 0x20, 0xc5, 0x9d, 0xd0, 0xb1, 0xc1,
+ 0xfe, 0xbe, 0x05, 0xc3, 0x97, 0x9d, 0xc0, 0xf5, 0x49, 0x84, 0x5e, 0x81, 0x01, 0x72, 0x9b, 0x34,
+ 0xc5, 0x0e, 0x9e, 0xdb, 0xe0, 0x74, 0x97, 0xe3, 0x46, 0x30, 0xfa, 0x1f, 0xb3, 0x52, 0xe8, 0x32,
+ 0x0c, 0xd3, 0xd6, 0x5e, 0x52, 0x3e, 0xe3, 0x8f, 0x14, 0x7d, 0xb1, 0x1a, 0x76, 0xbe, 0x31, 0x0a,
+ 0x10, 0x96, 0xc5, 0x99, 0x41, 0xa7, 0xd9, 0x6a, 0x50, 0x01, 0x96, 0x74, 0x3b, 0x6e, 0x6d, 0x2c,
+ 0xd7, 0x39, 0x91, 0xe0, 0xc6, 0x0d, 0x3a, 0x12, 0x88, 0x53, 0x26, 0xf6, 0x06, 0x54, 0xe8, 0xa0,
+ 0x2e, 0xfa, 0x9e, 0xd3, 0xdd, 0x96, 0xf4, 0x14, 0x54, 0xa4, 0x5d, 0x27, 0x16, 0x6e, 0xe7, 0x8c,
+ 0xab, 0x34, 0xfb, 0xc4, 0x38, 0xc5, 0xdb, 0x5b, 0x30, 0xc3, 0x2e, 0x49, 0x9d, 0x64, 0xc7, 0x58,
+ 0x63, 0xbd, 0x27, 0xf3, 0xd3, 0x42, 0xbf, 0xe2, 0x23, 0x53, 0xd5, 0xfc, 0x64, 0xc7, 0x24, 0x47,
+ 0x4d, 0xd7, 0xfa, 0xcf, 0x03, 0x30, 0xbd, 0xd6, 0x58, 0x6e, 0x98, 0x86, 0xc5, 0x97, 0x60, 0x8c,
+ 0x6b, 0x02, 0x74, 0x42, 0x3b, 0xbe, 0xa8, 0x4d, 0x5d, 0x1c, 0x6c, 0x68, 0x38, 0x6c, 0x50, 0xa2,
+ 0x87, 0xa1, 0xec, 0xbd, 0x17, 0x64, 0x5d, 0xe1, 0xd6, 0x5e, 0xbf, 0x86, 0x29, 0x9c, 0xa2, 0xa9,
+ 0x52, 0xc1, 0x05, 0xa8, 0x42, 0x2b, 0xc5, 0xe2, 0x55, 0x98, 0xf0, 0xe2, 0x66, 0xec, 0xad, 0x05,
+ 0x54, 0xba, 0xa4, 0x31, 0x17, 0xa9, 0xc6, 0x4f, 0x9b, 0xaa, 0xb0, 0x38, 0x43, 0xad, 0x49, 0xf3,
+ 0xc1, 0xbe, 0x15, 0x93, 0x9e, 0xde, 0xd7, 0x54, 0xe7, 0x6a, 0xb1, 0xaf, 0x8b, 0x99, 0x5b, 0x8e,
+ 0xd0, 0xb9, 0xf8, 0x07, 0xc7, 0x58, 0xe2, 0xd0, 0x25, 0x98, 0x6e, 0xee, 0x38, 0xad, 0xc5, 0x76,
+ 0xb2, 0x53, 0xf3, 0xe2, 0x66, 0xb8, 0x4f, 0xa2, 0x03, 0xa6, 0x09, 0x8f, 0xa4, 0x46, 0x26, 0x85,
+ 0x58, 0xbe, 0xbc, 0x58, 0xa7, 0x94, 0xb8, 0xb3, 0x8c, 0xa9, 0x82, 0xc0, 0x89, 0xa9, 0x20, 0x8b,
+ 0x30, 0x29, 0xeb, 0x6a, 0x90, 0x98, 0x6d, 0x0f, 0xa3, 0xac, 0x75, 0x2a, 0x24, 0x4a, 0x80, 0x55,
+ 0xdb, 0xb2, 0xf4, 0xe8, 0x45, 0x18, 0xf7, 0x02, 0x2f, 0xf1, 0x9c, 0x24, 0x8c, 0xd8, 0xe6, 0x3a,
+ 0xc6, 0x37, 0x0c, 0x2a, 0xe1, 0xd7, 0x74, 0x04, 0x36, 0xe9, 0xec, 0x77, 0xa1, 0xa2, 0x7c, 0xcd,
+ 0xa4, 0xbb, 0xa4, 0x55, 0xe0, 0x2e, 0xd9, 0x7b, 0x47, 0x90, 0x16, 0xf3, 0x72, 0xae, 0xc5, 0xfc,
+ 0x6f, 0x59, 0x90, 0xba, 0xdc, 0xa0, 0xcb, 0x50, 0x69, 0x85, 0xec, 0xd6, 0x2c, 0x92, 0x57, 0xd1,
+ 0x0f, 0xe6, 0x0a, 0x0f, 0x2e, 0xa8, 0x78, 0xff, 0xd5, 0x65, 0x09, 0x9c, 0x16, 0x46, 0x4b, 0x30,
+ 0xdc, 0x8a, 0x48, 0x23, 0x61, 0x41, 0x23, 0x3d, 0xf9, 0xf0, 0x39, 0xc2, 0xe9, 0xb1, 0x2c, 0x68,
+ 0xff, 0xba, 0x05, 0xc0, 0x8d, 0xd2, 0x4e, 0xb0, 0x4d, 0x4e, 0xe1, 0xa0, 0x5d, 0x83, 0x81, 0xb8,
+ 0x45, 0x9a, 0xdd, 0xee, 0x33, 0xd3, 0xf6, 0x34, 0x5a, 0xa4, 0x99, 0x76, 0x38, 0xfd, 0x87, 0x59,
+ 0x69, 0xfb, 0x67, 0x01, 0x26, 0x52, 0x32, 0x7a, 0x00, 0x42, 0xcf, 0x18, 0x2e, 0xf9, 0x0f, 0x64,
+ 0x5c, 0xf2, 0x2b, 0x8c, 0x5a, 0xf3, 0xc2, 0x7f, 0x17, 0xca, 0x7b, 0xce, 0x6d, 0x71, 0xca, 0x7a,
+ 0xaa, 0x7b, 0x33, 0x28, 0xff, 0xf9, 0x75, 0xe7, 0x36, 0xd7, 0x63, 0x9f, 0x92, 0x13, 0x64, 0xdd,
+ 0xb9, 0x7d, 0xc4, 0x6f, 0x2d, 0x99, 0x90, 0xa2, 0x87, 0xb9, 0xcf, 0xff, 0x61, 0xfa, 0x9f, 0x4d,
+ 0x3b, 0x5a, 0x09, 0xab, 0xcb, 0x0b, 0x84, 0x89, 0xb6, 0xaf, 0xba, 0xbc, 0x20, 0x5b, 0x97, 0x17,
+ 0xf4, 0x51, 0x97, 0x17, 0xa0, 0xf7, 0x61, 0x58, 0x5c, 0x87, 0x30, 0x5f, 0xc2, 0xd1, 0x8b, 0x0b,
+ 0x7d, 0xd4, 0x27, 0x6e, 0x53, 0x78, 0x9d, 0x0b, 0x52, 0x4f, 0x17, 0xd0, 0x9e, 0xf5, 0xca, 0x0a,
+ 0xd1, 0xdf, 0xb0, 0x60, 0x42, 0xfc, 0xc6, 0xe4, 0xbd, 0x36, 0x89, 0x13, 0xa1, 0x0f, 0x7c, 0xaa,
+ 0xff, 0x36, 0x88, 0x82, 0xbc, 0x29, 0x9f, 0x92, 0x62, 0xd6, 0x44, 0xf6, 0x6c, 0x51, 0xa6, 0x15,
+ 0xe8, 0x1f, 0x5b, 0x30, 0xb3, 0xe7, 0xdc, 0xe6, 0x35, 0x72, 0x18, 0x76, 0x12, 0x2f, 0x14, 0xbe,
+ 0x91, 0xaf, 0xf4, 0x37, 0xfc, 0x1d, 0xc5, 0x79, 0x23, 0xa5, 0x1b, 0xd5, 0x4c, 0x1e, 0x49, 0xcf,
+ 0xa6, 0xe6, 0xb6, 0x6b, 0x76, 0x0b, 0x46, 0xe4, 0x7c, 0xcb, 0x39, 0x0d, 0xd5, 0x74, 0x65, 0xe7,
+ 0xd8, 0xb7, 0x51, 0xda, 0xe9, 0x89, 0xd5, 0x23, 0xe6, 0xda, 0x3d, 0xad, 0xe7, 0x5d, 0x18, 0xd3,
+ 0xe7, 0xd8, 0x3d, 0xad, 0xeb, 0x3d, 0x38, 0x93, 0x33, 0x97, 0xee, 0x69, 0x95, 0xb7, 0xe0, 0x81,
+ 0xc2, 0xf9, 0x71, 0x2f, 0x2b, 0xb6, 0xbf, 0x6e, 0xe9, 0x72, 0xf0, 0x14, 0xcc, 0x53, 0xcb, 0xa6,
+ 0x79, 0xea, 0x5c, 0xf7, 0x95, 0x53, 0x60, 0xa3, 0x7a, 0x5b, 0x6f, 0x34, 0x95, 0xea, 0xe8, 0x35,
+ 0x18, 0xf2, 0x29, 0x44, 0xde, 0xc3, 0xd9, 0xbd, 0x57, 0x64, 0xaa, 0x4b, 0x31, 0x78, 0x8c, 0x05,
+ 0x07, 0xfb, 0xb7, 0x2c, 0x18, 0x38, 0x85, 0x9e, 0xc0, 0x66, 0x4f, 0x3c, 0x53, 0xc8, 0x5a, 0xe4,
+ 0x3d, 0x98, 0xc7, 0xce, 0xad, 0x15, 0x99, 0xdb, 0xa1, 0xa0, 0x63, 0xfe, 0x4f, 0x09, 0x46, 0x69,
+ 0x55, 0xd2, 0x61, 0xe4, 0x65, 0x18, 0xf7, 0x9d, 0x4d, 0xe2, 0x4b, 0x93, 0x79, 0xf6, 0x10, 0x7b,
+ 0x55, 0x47, 0x62, 0x93, 0x96, 0x16, 0xde, 0xd2, 0x6f, 0x0f, 0x84, 0xfe, 0xa2, 0x0a, 0x1b, 0x57,
+ 0x0b, 0xd8, 0xa4, 0xa5, 0xe7, 0xa9, 0x5b, 0x4e, 0xd2, 0xdc, 0x11, 0x07, 0x5c, 0xd5, 0xdc, 0x37,
+ 0x28, 0x10, 0x73, 0x1c, 0x55, 0xe0, 0xe4, 0xec, 0xbc, 0x49, 0x22, 0xa6, 0xc0, 0x71, 0xf5, 0x58,
+ 0x29, 0x70, 0xd8, 0x44, 0xe3, 0x2c, 0x7d, 0x4e, 0x6c, 0xde, 0x20, 0x73, 0x87, 0xe9, 0x23, 0x36,
+ 0x0f, 0xd5, 0x61, 0xc6, 0x0b, 0x9a, 0x7e, 0xdb, 0x25, 0x37, 0x02, 0xae, 0xdd, 0xf9, 0xde, 0xfb,
+ 0xc4, 0x15, 0x0a, 0xb4, 0xf2, 0x5c, 0x5a, 0xcb, 0xa1, 0xc1, 0xb9, 0x25, 0xed, 0xff, 0x0f, 0xce,
+ 0x5c, 0x0d, 0x1d, 0x77, 0xc9, 0xf1, 0x9d, 0xa0, 0x49, 0xa2, 0xb5, 0x60, 0xbb, 0xe7, 0x85, 0xbc,
+ 0x7e, 0x7d, 0x5e, 0xea, 0x75, 0x7d, 0x6e, 0xef, 0x00, 0xd2, 0x2b, 0x10, 0x6e, 0x60, 0x18, 0x86,
+ 0x3d, 0x5e, 0x95, 0x98, 0xfe, 0x8f, 0xe7, 0x6b, 0xd7, 0x1d, 0x2d, 0xd3, 0x1c, 0x9c, 0x38, 0x00,
+ 0x4b, 0x46, 0xf6, 0x4b, 0x90, 0x1b, 0x9b, 0xd1, 0xfb, 0x28, 0x6d, 0xbf, 0x00, 0xd3, 0xac, 0xe4,
+ 0xf1, 0x8e, 0x79, 0xf6, 0x5f, 0xb1, 0x60, 0xf2, 0x5a, 0x26, 0x9a, 0xf6, 0x31, 0x18, 0xe2, 0x19,
+ 0x4e, 0xb2, 0x46, 0xaf, 0x06, 0x83, 0x62, 0x81, 0x3d, 0x71, 0x9b, 0xcb, 0x0f, 0x2c, 0xa8, 0xa8,
+ 0xd0, 0xf7, 0x53, 0x50, 0x6a, 0x97, 0x0d, 0xa5, 0x36, 0xd7, 0x16, 0xa0, 0x9a, 0x53, 0xa4, 0xd3,
+ 0xa2, 0x2b, 0x2a, 0x2e, 0xb4, 0x8b, 0x19, 0x20, 0x65, 0xc3, 0xa3, 0x08, 0x27, 0xcc, 0xe0, 0x51,
+ 0x19, 0x29, 0xca, 0x6e, 0xc4, 0x15, 0xed, 0x47, 0xe4, 0x46, 0x5c, 0xb5, 0xa7, 0x40, 0xfa, 0xd5,
+ 0xb5, 0x26, 0xb3, 0x5d, 0xe1, 0xc7, 0x99, 0xd7, 0x28, 0x5b, 0x9b, 0x2a, 0x1c, 0x7b, 0x4e, 0x78,
+ 0x81, 0x0a, 0xe8, 0x11, 0x13, 0x64, 0xe2, 0x1f, 0x4f, 0x53, 0x90, 0x16, 0xb1, 0x2f, 0xc3, 0x64,
+ 0xa6, 0xc3, 0xd0, 0x0b, 0x30, 0xd8, 0xda, 0x71, 0x62, 0x92, 0xf1, 0x02, 0x1a, 0xac, 0x53, 0xe0,
+ 0xd1, 0xe1, 0xdc, 0x84, 0x2a, 0xc0, 0x20, 0x98, 0x53, 0xdb, 0xff, 0xc3, 0x82, 0x81, 0x6b, 0xa1,
+ 0x7b, 0x1a, 0x93, 0xe9, 0x55, 0x63, 0x32, 0x3d, 0x54, 0x94, 0xe4, 0xa5, 0x70, 0x1e, 0xad, 0x66,
+ 0xe6, 0xd1, 0xb9, 0x42, 0x0e, 0xdd, 0xa7, 0xd0, 0x1e, 0x8c, 0xb2, 0xd4, 0x31, 0xc2, 0x2b, 0xe9,
+ 0x39, 0xe3, 0x7c, 0x35, 0x97, 0x39, 0x5f, 0x4d, 0x6a, 0xa4, 0xda, 0x29, 0xeb, 0x09, 0x18, 0x16,
+ 0x9e, 0x31, 0x59, 0xff, 0x58, 0x41, 0x8b, 0x25, 0xde, 0xfe, 0xa5, 0x32, 0x18, 0xa9, 0x6a, 0xd0,
+ 0x6f, 0x5b, 0x30, 0x1f, 0xf1, 0x88, 0x20, 0xb7, 0xd6, 0x8e, 0xbc, 0x60, 0xbb, 0xd1, 0xdc, 0x21,
+ 0x6e, 0xdb, 0xf7, 0x82, 0xed, 0xb5, 0xed, 0x20, 0x54, 0xe0, 0x95, 0xdb, 0xa4, 0xd9, 0x66, 0x76,
+ 0xf0, 0x1e, 0x79, 0x71, 0xd4, 0xcd, 0xf3, 0xc5, 0x3b, 0x87, 0x73, 0xf3, 0xf8, 0x58, 0xbc, 0xf1,
+ 0x31, 0xdb, 0x82, 0xbe, 0x6d, 0xc1, 0x02, 0xcf, 0xe0, 0xd2, 0x7f, 0xfb, 0xbb, 0x9c, 0x46, 0xeb,
+ 0x92, 0x55, 0xca, 0x64, 0x83, 0x44, 0x7b, 0x4b, 0x2f, 0x8a, 0x0e, 0x5d, 0xa8, 0x1f, 0xaf, 0x2e,
+ 0x7c, 0xdc, 0xc6, 0xd9, 0xff, 0xaa, 0x0c, 0xe3, 0xb4, 0x17, 0xd3, 0x28, 0xf8, 0x17, 0x8c, 0x29,
+ 0xf1, 0x48, 0x66, 0x4a, 0x4c, 0x1b, 0xc4, 0x27, 0x13, 0x00, 0x1f, 0xc3, 0xb4, 0xef, 0xc4, 0xc9,
+ 0x65, 0xe2, 0x44, 0xc9, 0x26, 0x71, 0xd8, 0x55, 0xaf, 0x98, 0xe6, 0xc7, 0xb9, 0x3d, 0x56, 0xe6,
+ 0xaf, 0xab, 0x59, 0x66, 0xb8, 0x93, 0x3f, 0xda, 0x07, 0xc4, 0xae, 0x95, 0x23, 0x27, 0x88, 0xf9,
+ 0xb7, 0x78, 0xc2, 0x46, 0x7e, 0xbc, 0x5a, 0x67, 0x45, 0xad, 0xe8, 0x6a, 0x07, 0x37, 0x9c, 0x53,
+ 0x83, 0xe6, 0x2e, 0x30, 0xd8, 0xaf, 0xbb, 0xc0, 0x50, 0x0f, 0x27, 0xf4, 0x3d, 0x98, 0x12, 0xa3,
+ 0xb2, 0xe5, 0x6d, 0x8b, 0x4d, 0xfa, 0xcd, 0x8c, 0x3b, 0x91, 0xd5, 0xbf, 0xe3, 0x43, 0x0f, 0x5f,
+ 0x22, 0xfb, 0xa7, 0xe1, 0x0c, 0xad, 0xce, 0x74, 0x99, 0x8e, 0x11, 0x81, 0xc9, 0xdd, 0xf6, 0x26,
+ 0xf1, 0x49, 0x22, 0x61, 0xa2, 0xd2, 0x5c, 0xb5, 0xdf, 0x2c, 0x9d, 0xea, 0x96, 0x57, 0x4c, 0x16,
+ 0x38, 0xcb, 0xd3, 0xfe, 0x65, 0x0b, 0x98, 0x63, 0xe2, 0x29, 0x6c, 0x7f, 0x9f, 0x31, 0xb7, 0xbf,
+ 0x6a, 0x91, 0x04, 0x2a, 0xd8, 0xf9, 0x9e, 0xe7, 0xc3, 0x52, 0x8f, 0xc2, 0xdb, 0x07, 0x52, 0xf7,
+ 0xef, 0xad, 0x71, 0xfd, 0x6f, 0x8b, 0x2f, 0x48, 0x15, 0x20, 0x89, 0x7e, 0x06, 0x46, 0x9a, 0x4e,
+ 0xcb, 0x69, 0xf2, 0x1c, 0x61, 0x85, 0xd6, 0x1f, 0xa3, 0xd0, 0xfc, 0xb2, 0x28, 0xc1, 0xad, 0x19,
+ 0x9f, 0x94, 0x5f, 0x29, 0xc1, 0x3d, 0x2d, 0x18, 0xaa, 0xca, 0xd9, 0x5d, 0x18, 0x37, 0x98, 0xdd,
+ 0xd3, 0xa3, 0xef, 0xcf, 0xf0, 0xed, 0x42, 0x9d, 0x58, 0xf6, 0x60, 0x3a, 0xd0, 0xfe, 0x53, 0xe1,
+ 0x28, 0xd5, 0xe9, 0x8f, 0xf7, 0xda, 0x10, 0x98, 0x24, 0xd5, 0x1c, 0x2f, 0x33, 0x6c, 0x70, 0x27,
0x67, 0xfb, 0xef, 0x58, 0x70, 0xbf, 0x4e, 0xa8, 0xc5, 0xae, 0xf6, 0xb2, 0x27, 0xd7, 0x60, 0x24,
- 0x6c, 0x91, 0xc8, 0x49, 0xcf, 0x64, 0xe7, 0x65, 0xa7, 0x5f, 0x13, 0xf0, 0xa3, 0xc3, 0xb9, 0x19,
+ 0x6c, 0x91, 0xc8, 0x49, 0xcf, 0x64, 0x17, 0x64, 0xa7, 0x5f, 0x17, 0xf0, 0xa3, 0xc3, 0xb9, 0x19,
0x9d, 0xbb, 0x84, 0x63, 0x55, 0x12, 0xd9, 0x30, 0xc4, 0x3a, 0x23, 0x16, 0x71, 0xc5, 0x2c, 0x8f,
- 0x16, 0xbb, 0xee, 0x8a, 0xb1, 0xc0, 0xd8, 0x3f, 0x6b, 0xf1, 0x89, 0xa5, 0x37, 0x1d, 0xbd, 0x0b,
- 0x53, 0x7b, 0xf4, 0xf8, 0xb6, 0x72, 0xab, 0x15, 0x71, 0x33, 0xba, 0xec, 0xa7, 0x27, 0x7b, 0xf5,
- 0x93, 0xf6, 0x91, 0x4b, 0x55, 0xd1, 0xe6, 0xa9, 0xf5, 0x0c, 0x33, 0xdc, 0xc1, 0xde, 0xfe, 0xb3,
- 0x12, 0x5f, 0x89, 0x4c, 0xab, 0x7b, 0x1c, 0x86, 0x5b, 0xa1, 0xbb, 0xbc, 0x56, 0xc3, 0xa2, 0x87,
- 0x94, 0xb8, 0xaa, 0x73, 0x30, 0x96, 0x78, 0x74, 0x01, 0x80, 0xdc, 0x4a, 0x48, 0x14, 0x38, 0xbe,
+ 0x16, 0xbb, 0xee, 0x8a, 0xb1, 0xc0, 0xd8, 0x3f, 0x6b, 0xf1, 0x89, 0xa5, 0x37, 0x1d, 0xbd, 0x07,
+ 0x53, 0x7b, 0xf4, 0xf8, 0xb6, 0x72, 0xbb, 0x15, 0x71, 0x33, 0xba, 0xec, 0xa7, 0xa7, 0x7a, 0xf5,
+ 0x93, 0xf6, 0x91, 0x4b, 0x55, 0xd1, 0xe6, 0xa9, 0xf5, 0x0c, 0x33, 0xdc, 0xc1, 0xde, 0xfe, 0xd3,
+ 0x12, 0x5f, 0x89, 0x4c, 0xab, 0x7b, 0x02, 0x86, 0x5b, 0xa1, 0xbb, 0xbc, 0x56, 0xc3, 0xa2, 0x87,
+ 0x94, 0xb8, 0xaa, 0x73, 0x30, 0x96, 0x78, 0x74, 0x11, 0x80, 0xdc, 0x4e, 0x48, 0x14, 0x38, 0xbe,
0xba, 0x8c, 0x57, 0xca, 0xd3, 0x8a, 0xc2, 0x60, 0x8d, 0x8a, 0x96, 0x69, 0x45, 0xe1, 0xbe, 0xe7,
0xb2, 0xc0, 0x8e, 0xb2, 0x59, 0xa6, 0xae, 0x30, 0x58, 0xa3, 0xa2, 0x47, 0xe5, 0x76, 0x10, 0xf3,
- 0x0d, 0xd0, 0xd9, 0x14, 0xa9, 0x78, 0x46, 0xd2, 0xa3, 0xf2, 0x75, 0x1d, 0x89, 0x4d, 0x5a, 0xb4,
+ 0x0d, 0xd0, 0xd9, 0x14, 0xa9, 0x78, 0x46, 0xd2, 0xa3, 0xf2, 0x0d, 0x1d, 0x89, 0x4d, 0x5a, 0xb4,
0x08, 0x43, 0x89, 0xc3, 0xae, 0x98, 0x07, 0x8b, 0x5d, 0x76, 0x36, 0x28, 0x85, 0x9e, 0x34, 0x8a,
- 0x16, 0xc0, 0xa2, 0x20, 0x7a, 0x53, 0x8a, 0x60, 0x2e, 0x92, 0x85, 0xeb, 0x55, 0xe1, 0xb4, 0xd5,
- 0xc5, 0xb7, 0x2e, 0x83, 0x85, 0x4b, 0x97, 0xc1, 0xcb, 0xfe, 0x52, 0x05, 0x20, 0xd5, 0xf6, 0xd0,
- 0x7b, 0x1d, 0x22, 0xe2, 0xa9, 0xee, 0xfa, 0xe1, 0xdd, 0x93, 0x0f, 0xe8, 0xcb, 0x16, 0x8c, 0x3a,
- 0xbe, 0x1f, 0x36, 0x9d, 0x84, 0xf5, 0x72, 0xa9, 0xbb, 0x88, 0x12, 0xf5, 0x2f, 0xa6, 0x25, 0x78,
- 0x13, 0x9e, 0x95, 0xb7, 0xc7, 0x1a, 0xa6, 0x67, 0x2b, 0xf4, 0x8a, 0xd1, 0xc7, 0xe5, 0x21, 0x80,
- 0x4f, 0x8f, 0xd9, 0xec, 0x21, 0xa0, 0xc2, 0xa4, 0xb1, 0xa6, 0xff, 0xa3, 0xeb, 0x46, 0xce, 0x9a,
- 0x81, 0xe2, 0xf0, 0x5c, 0x43, 0xe9, 0xe9, 0x95, 0xae, 0x06, 0xd5, 0x75, 0x17, 0xf4, 0xc1, 0xe2,
- 0x18, 0x76, 0x4d, 0xbb, 0xee, 0xe1, 0x7e, 0xfe, 0x0e, 0x4c, 0xba, 0xe6, 0x76, 0x2b, 0x66, 0xd3,
- 0x63, 0x45, 0x7c, 0x33, 0xbb, 0x73, 0xba, 0xc1, 0x66, 0x10, 0x38, 0xcb, 0x18, 0xd5, 0x79, 0x30,
- 0xc0, 0x5a, 0xb0, 0x15, 0x0a, 0x17, 0x3e, 0xbb, 0x70, 0x2c, 0x0f, 0xe2, 0x84, 0xec, 0x51, 0xca,
- 0x74, 0x1f, 0xbd, 0x2a, 0xca, 0x62, 0xc5, 0x05, 0xbd, 0x0a, 0x43, 0x2c, 0x42, 0x2b, 0xae, 0x8e,
- 0x14, 0xdb, 0x01, 0xcd, 0xe0, 0xe2, 0x74, 0x51, 0xb1, 0xbf, 0x31, 0x16, 0x1c, 0xd0, 0x25, 0x99,
- 0x22, 0x20, 0x5e, 0x0b, 0xae, 0xc7, 0x84, 0xa5, 0x08, 0xa8, 0x2c, 0x7d, 0x34, 0x8d, 0xfe, 0xe7,
- 0xf0, 0xdc, 0xf4, 0x90, 0x46, 0x49, 0xaa, 0xaf, 0x88, 0xff, 0x32, 0xeb, 0x64, 0x15, 0x8a, 0x9b,
- 0x67, 0x66, 0xa6, 0x4c, 0xbb, 0xf3, 0x86, 0xc9, 0x02, 0x67, 0x79, 0x9e, 0xe8, 0xf6, 0x39, 0x1b,
- 0xc0, 0x54, 0x76, 0x61, 0xdd, 0xd3, 0xed, 0xfa, 0x87, 0x03, 0x30, 0x61, 0x4e, 0x04, 0xb4, 0x00,
- 0x15, 0xc1, 0x44, 0xa5, 0x0b, 0x53, 0x73, 0x7b, 0x5d, 0x22, 0x70, 0x4a, 0xc3, 0xd2, 0xa5, 0xb1,
- 0xe2, 0x9a, 0x6f, 0x56, 0x9a, 0x2e, 0x4d, 0x61, 0xb0, 0x46, 0x45, 0x95, 0xe8, 0xcd, 0x30, 0x4c,
- 0xd4, 0x56, 0xa0, 0x66, 0xcb, 0x12, 0x83, 0x62, 0x81, 0xa5, 0x5b, 0xc0, 0x2e, 0x89, 0x02, 0xe2,
- 0x9b, 0x96, 0x4c, 0xb5, 0x05, 0x5c, 0xd6, 0x91, 0xd8, 0xa4, 0xa5, 0x5b, 0x5a, 0x18, 0xb3, 0xe9,
- 0x27, 0x54, 0xf5, 0xd4, 0xd7, 0xad, 0xc1, 0x23, 0x14, 0x25, 0x1e, 0xbd, 0x01, 0xf7, 0xab, 0x80,
- 0x42, 0xcc, 0x2d, 0xc3, 0xb2, 0xc6, 0x21, 0xe3, 0x64, 0x7d, 0xff, 0x72, 0x3e, 0x19, 0x2e, 0x2a,
- 0x8f, 0x5e, 0x81, 0x09, 0xa1, 0x02, 0x4b, 0x8e, 0xc3, 0xa6, 0xb3, 0xc2, 0x65, 0x03, 0x8b, 0x33,
- 0xd4, 0xa8, 0x06, 0x53, 0x14, 0xc2, 0xb4, 0x50, 0xc9, 0x81, 0x07, 0x46, 0xaa, 0xbd, 0xfe, 0x72,
- 0x06, 0x8f, 0x3b, 0x4a, 0xa0, 0x45, 0x98, 0xe4, 0x3a, 0x0a, 0x3d, 0x53, 0xb2, 0x71, 0x10, 0x9e,
- 0xb5, 0x6a, 0x21, 0x5c, 0x33, 0xd1, 0x38, 0x4b, 0x8f, 0x5e, 0x84, 0x31, 0x27, 0x6a, 0xee, 0x78,
- 0x09, 0x69, 0x26, 0xed, 0x88, 0x27, 0xe0, 0xd0, 0xbc, 0x3d, 0x16, 0x35, 0x1c, 0x36, 0x28, 0xed,
- 0xf7, 0xe0, 0x54, 0x8e, 0x53, 0x3e, 0x9d, 0x38, 0x4e, 0xcb, 0x93, 0xdf, 0x94, 0xf1, 0x5a, 0x5b,
- 0xac, 0xaf, 0xc9, 0xaf, 0xd1, 0xa8, 0xe8, 0xec, 0x64, 0x26, 0x71, 0x2d, 0x35, 0xac, 0x9a, 0x9d,
- 0xab, 0x12, 0x81, 0x53, 0x1a, 0xfb, 0x3b, 0x00, 0x9a, 0x41, 0xa7, 0x0f, 0x9f, 0xa5, 0x17, 0x61,
- 0x4c, 0xe6, 0x33, 0xd6, 0xf2, 0x68, 0xaa, 0xcf, 0xbc, 0xa8, 0xe1, 0xb0, 0x41, 0x49, 0xdb, 0x16,
- 0xa8, 0x2c, 0xa0, 0x19, 0x1f, 0xb9, 0x34, 0x07, 0x68, 0x4a, 0x83, 0x9e, 0x82, 0x91, 0x98, 0xf8,
- 0x5b, 0x57, 0xbc, 0x60, 0x57, 0x4c, 0x6c, 0x25, 0x85, 0x1b, 0x02, 0x8e, 0x15, 0x05, 0x5a, 0x82,
- 0x72, 0xdb, 0x73, 0xc5, 0x54, 0x96, 0x1b, 0x7e, 0xf9, 0xfa, 0x5a, 0xed, 0xe8, 0x70, 0xee, 0xe1,
+ 0x16, 0xc0, 0xa2, 0x20, 0x7a, 0x4b, 0x8a, 0x60, 0x2e, 0x92, 0x85, 0xeb, 0x55, 0xe1, 0xb4, 0xd5,
+ 0xc5, 0xb7, 0x2e, 0x83, 0x85, 0x4b, 0x97, 0xc1, 0xcb, 0xfe, 0x42, 0x05, 0x20, 0xd5, 0xf6, 0xd0,
+ 0xfb, 0x1d, 0x22, 0xe2, 0xe9, 0xee, 0xfa, 0xe1, 0xc9, 0xc9, 0x07, 0xf4, 0x45, 0x0b, 0x46, 0x1d,
+ 0xdf, 0x0f, 0x9b, 0x4e, 0xc2, 0x7a, 0xb9, 0xd4, 0x5d, 0x44, 0x89, 0xfa, 0x17, 0xd3, 0x12, 0xbc,
+ 0x09, 0xcf, 0xc9, 0xdb, 0x63, 0x0d, 0xd3, 0xb3, 0x15, 0x7a, 0xc5, 0xe8, 0x93, 0xf2, 0x10, 0xc0,
+ 0xa7, 0xc7, 0x6c, 0xf6, 0x10, 0x50, 0x61, 0xd2, 0x58, 0xd3, 0xff, 0xd1, 0x0d, 0x23, 0x67, 0xcd,
+ 0x40, 0x71, 0x78, 0xae, 0xa1, 0xf4, 0xf4, 0x4a, 0x57, 0x83, 0xea, 0xba, 0x0b, 0xfa, 0x60, 0x71,
+ 0x0c, 0xbb, 0xa6, 0x5d, 0xf7, 0x70, 0x3f, 0x7f, 0x17, 0x26, 0x5d, 0x73, 0xbb, 0x15, 0xb3, 0xe9,
+ 0xf1, 0x22, 0xbe, 0x99, 0xdd, 0x39, 0xdd, 0x60, 0x33, 0x08, 0x9c, 0x65, 0x8c, 0xea, 0x3c, 0x18,
+ 0x60, 0x2d, 0xd8, 0x0a, 0x85, 0x0b, 0x9f, 0x5d, 0x38, 0x96, 0x07, 0x71, 0x42, 0xf6, 0x28, 0x65,
+ 0xba, 0x8f, 0x5e, 0x13, 0x65, 0xb1, 0xe2, 0x82, 0x5e, 0x83, 0x21, 0x16, 0xa1, 0x15, 0x57, 0x47,
+ 0x8a, 0xed, 0x80, 0x66, 0x70, 0x71, 0xba, 0xa8, 0xd8, 0xdf, 0x18, 0x0b, 0x0e, 0xe8, 0xb2, 0x4c,
+ 0x11, 0x10, 0xaf, 0x05, 0x37, 0x62, 0xc2, 0x52, 0x04, 0x54, 0x96, 0x3e, 0x9e, 0x46, 0xff, 0x73,
+ 0x78, 0x6e, 0x7a, 0x48, 0xa3, 0x24, 0xd5, 0x57, 0xc4, 0x7f, 0x99, 0x75, 0xb2, 0x0a, 0xc5, 0xcd,
+ 0x33, 0x33, 0x53, 0xa6, 0xdd, 0x79, 0xd3, 0x64, 0x81, 0xb3, 0x3c, 0x4f, 0x75, 0xfb, 0x9c, 0x0d,
+ 0x60, 0x2a, 0xbb, 0xb0, 0xee, 0xe9, 0x76, 0xfd, 0xfd, 0x01, 0x98, 0x30, 0x27, 0x02, 0x5a, 0x80,
+ 0x8a, 0x60, 0xa2, 0xd2, 0x85, 0xa9, 0xb9, 0xbd, 0x2e, 0x11, 0x38, 0xa5, 0x61, 0xe9, 0xd2, 0x58,
+ 0x71, 0xcd, 0x37, 0x2b, 0x4d, 0x97, 0xa6, 0x30, 0x58, 0xa3, 0xa2, 0x4a, 0xf4, 0x66, 0x18, 0x26,
+ 0x6a, 0x2b, 0x50, 0xb3, 0x65, 0x89, 0x41, 0xb1, 0xc0, 0xd2, 0x2d, 0x60, 0x97, 0x44, 0x01, 0xf1,
+ 0x4d, 0x4b, 0xa6, 0xda, 0x02, 0xae, 0xe8, 0x48, 0x6c, 0xd2, 0xd2, 0x2d, 0x2d, 0x8c, 0xd9, 0xf4,
+ 0x13, 0xaa, 0x7a, 0xea, 0xeb, 0xd6, 0xe0, 0x11, 0x8a, 0x12, 0x8f, 0xde, 0x84, 0xfb, 0x55, 0x40,
+ 0x21, 0xe6, 0x96, 0x61, 0x59, 0xe3, 0x90, 0x71, 0xb2, 0xbe, 0x7f, 0x39, 0x9f, 0x0c, 0x17, 0x95,
+ 0x47, 0xaf, 0xc2, 0x84, 0x50, 0x81, 0x25, 0xc7, 0x61, 0xd3, 0x59, 0xe1, 0x8a, 0x81, 0xc5, 0x19,
+ 0x6a, 0x54, 0x83, 0x29, 0x0a, 0x61, 0x5a, 0xa8, 0xe4, 0xc0, 0x03, 0x23, 0xd5, 0x5e, 0x7f, 0x25,
+ 0x83, 0xc7, 0x1d, 0x25, 0xd0, 0x22, 0x4c, 0x72, 0x1d, 0x85, 0x9e, 0x29, 0xd9, 0x38, 0x08, 0xcf,
+ 0x5a, 0xb5, 0x10, 0xae, 0x9b, 0x68, 0x9c, 0xa5, 0x47, 0x2f, 0xc1, 0x98, 0x13, 0x35, 0x77, 0xbc,
+ 0x84, 0x34, 0x93, 0x76, 0xc4, 0x13, 0x70, 0x68, 0xde, 0x1e, 0x8b, 0x1a, 0x0e, 0x1b, 0x94, 0xf6,
+ 0xfb, 0x70, 0x26, 0xc7, 0x29, 0x9f, 0x4e, 0x1c, 0xa7, 0xe5, 0xc9, 0x6f, 0xca, 0x78, 0xad, 0x2d,
+ 0xd6, 0xd7, 0xe4, 0xd7, 0x68, 0x54, 0x74, 0x76, 0x32, 0x93, 0xb8, 0x96, 0x1a, 0x56, 0xcd, 0xce,
+ 0x55, 0x89, 0xc0, 0x29, 0x8d, 0xfd, 0x7b, 0x00, 0x9a, 0x41, 0xa7, 0x0f, 0x9f, 0xa5, 0x97, 0x60,
+ 0x4c, 0xe6, 0x33, 0xd6, 0xf2, 0x68, 0xaa, 0xcf, 0xbc, 0xa4, 0xe1, 0xb0, 0x41, 0x49, 0xdb, 0x16,
+ 0xa8, 0x2c, 0xa0, 0x19, 0x1f, 0xb9, 0x34, 0x07, 0x68, 0x4a, 0x83, 0x9e, 0x86, 0x91, 0x98, 0xf8,
+ 0x5b, 0x57, 0xbd, 0x60, 0x57, 0x4c, 0x6c, 0x25, 0x85, 0x1b, 0x02, 0x8e, 0x15, 0x05, 0x5a, 0x82,
+ 0x72, 0xdb, 0x73, 0xc5, 0x54, 0x96, 0x1b, 0x7e, 0xf9, 0xc6, 0x5a, 0xed, 0xe8, 0x70, 0xee, 0x91,
0xa2, 0x34, 0xcd, 0xf4, 0x68, 0x1f, 0xcf, 0xd3, 0xe5, 0x47, 0x0b, 0xe7, 0xdd, 0x0d, 0x0c, 0x1d,
- 0xf3, 0x6e, 0xe0, 0x02, 0x80, 0xf8, 0x6a, 0x39, 0x97, 0xcb, 0xe9, 0xa8, 0x5d, 0x54, 0x18, 0xac,
- 0x51, 0xa1, 0x18, 0xa6, 0x9b, 0x11, 0x71, 0xe4, 0x19, 0x9a, 0xbb, 0x97, 0x8f, 0xdc, 0xb9, 0x81,
+ 0xf3, 0x6e, 0xe0, 0x22, 0x80, 0xf8, 0x6a, 0x39, 0x97, 0xcb, 0xe9, 0xa8, 0x5d, 0x52, 0x18, 0xac,
+ 0x51, 0xa1, 0x18, 0xa6, 0x9b, 0x11, 0x71, 0xe4, 0x19, 0x9a, 0xbb, 0x97, 0x8f, 0xdc, 0xbd, 0x81,
0x60, 0x39, 0xcb, 0x0c, 0x77, 0xf2, 0x47, 0x21, 0x4c, 0xbb, 0x22, 0x7e, 0x35, 0xad, 0xb4, 0x72,
- 0x7c, 0x9f, 0x76, 0xe6, 0x90, 0x93, 0x65, 0x84, 0x3b, 0x79, 0xa3, 0xb7, 0x61, 0x56, 0x02, 0x3b,
- 0x43, 0x86, 0xd9, 0x72, 0x29, 0x2f, 0x9d, 0xbd, 0x7d, 0x38, 0x37, 0x5b, 0x2b, 0xa4, 0xc2, 0x5d,
- 0x38, 0x20, 0x0c, 0x43, 0xec, 0x2e, 0x29, 0xae, 0x8e, 0xb2, 0x7d, 0xee, 0x89, 0x62, 0x63, 0x00,
+ 0x7c, 0x9f, 0x76, 0xe6, 0x90, 0x93, 0x65, 0x84, 0x3b, 0x79, 0xa3, 0x77, 0x60, 0x56, 0x02, 0x3b,
+ 0x43, 0x86, 0xd9, 0x72, 0x29, 0x2f, 0x9d, 0xbb, 0x73, 0x38, 0x37, 0x5b, 0x2b, 0xa4, 0xc2, 0x5d,
+ 0x38, 0x20, 0x0c, 0x43, 0xec, 0x2e, 0x29, 0xae, 0x8e, 0xb2, 0x7d, 0xee, 0xc9, 0x62, 0x63, 0x00,
0x9d, 0xeb, 0xf3, 0xec, 0x1e, 0x4a, 0xb8, 0xf9, 0xa6, 0xd7, 0x72, 0x0c, 0x88, 0x05, 0x27, 0xb4,
0x05, 0xa3, 0x4e, 0x10, 0x84, 0x89, 0xc3, 0x55, 0xa8, 0xb1, 0x62, 0xdd, 0x4f, 0x63, 0xbc, 0x98,
- 0x96, 0xe0, 0xdc, 0x95, 0xe7, 0xa0, 0x86, 0xc1, 0x3a, 0x63, 0x74, 0x13, 0x26, 0xc3, 0x9b, 0x54,
- 0x38, 0x4a, 0x2b, 0x45, 0x5c, 0x1d, 0x67, 0x75, 0x3d, 0xd7, 0xa7, 0x9d, 0xd6, 0x28, 0xac, 0x49,
+ 0x96, 0xe0, 0xdc, 0x95, 0xe7, 0xa0, 0x86, 0xc1, 0x3a, 0x63, 0x74, 0x0b, 0x26, 0xc3, 0x5b, 0x54,
+ 0x38, 0x4a, 0x2b, 0x45, 0x5c, 0x1d, 0x67, 0x75, 0x3d, 0xdf, 0xa7, 0x9d, 0xd6, 0x28, 0xac, 0x49,
0x2d, 0x93, 0x29, 0xce, 0xd6, 0x82, 0xe6, 0x0d, 0x6b, 0xf5, 0x44, 0xea, 0xcf, 0x9e, 0x5a, 0xab,
0x75, 0xe3, 0x34, 0x0b, 0x41, 0xe7, 0x6e, 0xab, 0x6c, 0xf5, 0x4f, 0x66, 0x42, 0xd0, 0x53, 0x14,
- 0xd6, 0xe9, 0xd0, 0x0e, 0x8c, 0xa5, 0x57, 0x56, 0x51, 0xcc, 0x32, 0xd4, 0x8c, 0x5e, 0xb8, 0xd0,
- 0xdf, 0xc7, 0xad, 0x69, 0x25, 0xf9, 0xc9, 0x41, 0x87, 0x60, 0x83, 0xf3, 0xec, 0x4f, 0xc1, 0xa8,
- 0x36, 0xb0, 0xc7, 0xf1, 0xca, 0x9e, 0x7d, 0x05, 0xa6, 0xb2, 0x43, 0x77, 0x2c, 0xaf, 0xee, 0xff,
- 0x59, 0x82, 0xc9, 0x9c, 0x9b, 0x2b, 0x96, 0xea, 0x39, 0x23, 0x50, 0xd3, 0xcc, 0xce, 0xa6, 0x58,
- 0x2c, 0xf5, 0x21, 0x16, 0xa5, 0x8c, 0x2e, 0x17, 0xca, 0x68, 0x21, 0x0a, 0x07, 0xde, 0x8f, 0x28,
- 0x34, 0x77, 0x9f, 0xc1, 0xbe, 0x76, 0x9f, 0xbb, 0x20, 0x3e, 0x8d, 0x0d, 0x6c, 0xb8, 0x8f, 0x0d,
- 0xec, 0x17, 0x4a, 0x30, 0x95, 0xcd, 0x27, 0x7c, 0x02, 0xf7, 0x1d, 0xaf, 0x1a, 0xf7, 0x1d, 0xf9,
- 0x89, 0xd3, 0xb3, 0x59, 0x8e, 0x8b, 0xee, 0x3e, 0x70, 0xe6, 0xee, 0xe3, 0x89, 0xbe, 0xb8, 0x75,
- 0xbf, 0x07, 0xf9, 0xbb, 0x25, 0x38, 0x9d, 0x2d, 0xb2, 0xec, 0x3b, 0xde, 0xde, 0x09, 0xf4, 0xcd,
- 0x35, 0xa3, 0x6f, 0x9e, 0xee, 0xe7, 0x6b, 0x58, 0xd3, 0x0a, 0x3b, 0xe8, 0xf5, 0x4c, 0x07, 0x2d,
- 0xf4, 0xcf, 0xb2, 0x7b, 0x2f, 0x7d, 0xc7, 0x82, 0x33, 0xb9, 0xe5, 0x4e, 0xc0, 0xfa, 0x7a, 0xd5,
- 0xb4, 0xbe, 0x3e, 0xde, 0xf7, 0x37, 0x15, 0x98, 0x63, 0xbf, 0x56, 0x2e, 0xf8, 0x16, 0x66, 0xbf,
- 0xba, 0x06, 0xa3, 0x4e, 0xb3, 0x49, 0xe2, 0x78, 0x3d, 0x74, 0x55, 0x4a, 0xab, 0xa7, 0xd9, 0x9e,
- 0x94, 0x82, 0x8f, 0x0e, 0xe7, 0x66, 0xb3, 0x2c, 0x52, 0x34, 0xd6, 0x39, 0x98, 0x69, 0xf2, 0x4a,
- 0x77, 0x35, 0x4d, 0xde, 0x05, 0x80, 0x7d, 0x75, 0xaa, 0xcd, 0x1a, 0xc3, 0xb4, 0xf3, 0xae, 0x46,
- 0x85, 0x7e, 0x9a, 0xe9, 0x8a, 0xdc, 0x65, 0x84, 0x5f, 0x72, 0x3c, 0xdb, 0xe7, 0x58, 0xe9, 0xee,
- 0x27, 0x3c, 0x10, 0x56, 0x19, 0x0e, 0x15, 0x4b, 0xf4, 0x19, 0x98, 0x8a, 0x79, 0x9e, 0x85, 0x65,
- 0xdf, 0x89, 0x59, 0xf8, 0x85, 0x90, 0x89, 0x2c, 0xba, 0xb5, 0x91, 0xc1, 0xe1, 0x0e, 0x6a, 0xfb,
- 0xd7, 0xcb, 0xf0, 0x40, 0x97, 0x29, 0x8a, 0x16, 0xcd, 0x2b, 0xde, 0x27, 0xb3, 0xd6, 0x9d, 0xd9,
- 0xdc, 0xc2, 0x86, 0xb9, 0x27, 0x33, 0xc6, 0xa5, 0xf7, 0x3d, 0xc6, 0x5f, 0xb1, 0x34, 0xbb, 0x1b,
- 0x77, 0x04, 0xfd, 0xd4, 0x31, 0x97, 0xde, 0x8f, 0xab, 0xa1, 0xfe, 0x8b, 0x16, 0x3c, 0x9c, 0xfb,
- 0x59, 0x86, 0xab, 0xc8, 0x02, 0x54, 0x9a, 0x14, 0xa8, 0x85, 0x48, 0xa5, 0x81, 0x8a, 0x12, 0x81,
- 0x53, 0x1a, 0xc3, 0x23, 0xa4, 0xd4, 0xd3, 0x23, 0xe4, 0x5f, 0x58, 0x30, 0x93, 0x6d, 0xc4, 0x09,
- 0x48, 0xa6, 0x35, 0x53, 0x32, 0x7d, 0xb4, 0x9f, 0x21, 0x2f, 0x10, 0x4a, 0x7f, 0x32, 0x01, 0xf7,
- 0x15, 0x64, 0xfb, 0xdf, 0x87, 0xe9, 0xed, 0x26, 0x31, 0x83, 0xcf, 0xc4, 0xc7, 0xe4, 0xc6, 0xe9,
- 0x75, 0x8d, 0x54, 0xe3, 0xc7, 0x90, 0x0e, 0x12, 0xdc, 0x59, 0x05, 0xfa, 0xa2, 0x05, 0x33, 0xce,
- 0xcd, 0xb8, 0xe3, 0xf5, 0x1d, 0x31, 0x67, 0x9e, 0xcb, 0xb5, 0x8e, 0xf5, 0x78, 0xad, 0x87, 0x05,
- 0x88, 0xcc, 0xe4, 0x51, 0xe1, 0xdc, 0xba, 0x10, 0x16, 0x59, 0xfd, 0xa8, 0x96, 0xd3, 0x25, 0x3c,
- 0x32, 0x2f, 0x78, 0x85, 0xcb, 0x28, 0x89, 0xc1, 0x8a, 0x0f, 0xba, 0x01, 0x95, 0x6d, 0x19, 0x51,
- 0x26, 0x64, 0x60, 0xee, 0xa6, 0x92, 0x1b, 0x76, 0xc6, 0x3d, 0xf6, 0x15, 0x0a, 0xa7, 0xac, 0xd0,
- 0x2b, 0x50, 0x0e, 0xb6, 0xe2, 0x6e, 0xcf, 0x1d, 0x64, 0x3c, 0xa8, 0x78, 0x9c, 0xeb, 0xd5, 0xd5,
- 0x06, 0xa6, 0x05, 0x69, 0xf9, 0x68, 0xd3, 0x15, 0x06, 0xdd, 0xdc, 0xf2, 0x78, 0xa9, 0xd6, 0x59,
- 0x1e, 0x2f, 0xd5, 0x30, 0x2d, 0x88, 0x56, 0x61, 0x90, 0x05, 0xa8, 0x08, 0x6b, 0x6d, 0x6e, 0x9c,
- 0x7e, 0x47, 0xf0, 0x0d, 0x0f, 0x7c, 0x65, 0x60, 0xcc, 0x8b, 0xa3, 0x57, 0x61, 0xa8, 0xc9, 0xb2,
- 0xff, 0x8b, 0xa3, 0x75, 0x7e, 0xee, 0x89, 0x8e, 0xf7, 0x01, 0xf8, 0x1d, 0x15, 0x87, 0x63, 0xc1,
- 0x01, 0x6d, 0xc0, 0x50, 0x93, 0xb4, 0x76, 0xb6, 0x62, 0x71, 0x62, 0xfe, 0x78, 0x2e, 0xaf, 0x2e,
- 0x8f, 0x5d, 0x08, 0xae, 0x8c, 0x02, 0x0b, 0x5e, 0xe8, 0x93, 0x50, 0xda, 0x6a, 0x8a, 0x58, 0x95,
- 0x5c, 0x2b, 0xad, 0x19, 0x8c, 0xbc, 0x34, 0x74, 0xfb, 0x70, 0xae, 0xb4, 0xba, 0x8c, 0x4b, 0x5b,
- 0x4d, 0x74, 0x15, 0x86, 0xb7, 0x78, 0x44, 0xa9, 0xc8, 0xd2, 0xfa, 0x58, 0x7e, 0xb0, 0x6b, 0x47,
- 0xd0, 0x29, 0x8f, 0xb1, 0x10, 0x08, 0x2c, 0x99, 0xa0, 0x0d, 0x80, 0x2d, 0x15, 0x19, 0x2b, 0xd2,
- 0xb4, 0x7e, 0xb4, 0x9f, 0xf8, 0x59, 0x71, 0x7c, 0x54, 0x50, 0xac, 0xf1, 0x41, 0x9f, 0x87, 0x8a,
- 0x23, 0xdf, 0x73, 0x61, 0x29, 0x5a, 0xcd, 0x7d, 0x3a, 0x5d, 0x70, 0xdd, 0x9f, 0xba, 0xe1, 0xb3,
- 0x55, 0x11, 0xe1, 0x94, 0x29, 0xda, 0x85, 0xf1, 0xfd, 0xb8, 0xb5, 0x43, 0xe4, 0x02, 0x65, 0x79,
- 0x5b, 0xcd, 0xa3, 0x66, 0x9a, 0x64, 0x57, 0x10, 0x7a, 0x51, 0xd2, 0x76, 0xfc, 0x0e, 0x99, 0xc2,
- 0x02, 0x72, 0x6e, 0xe8, 0xcc, 0xb0, 0xc9, 0x9b, 0x76, 0xfa, 0xbb, 0xed, 0x70, 0xf3, 0x20, 0x21,
- 0x22, 0x9b, 0x6b, 0x6e, 0xa7, 0xbf, 0xc6, 0x49, 0x3a, 0x3b, 0x5d, 0x20, 0xb0, 0x64, 0x42, 0x97,
- 0xb0, 0x23, 0xdf, 0x4a, 0x12, 0x67, 0xe4, 0xc7, 0x0b, 0xbb, 0xa7, 0xa3, 0xbd, 0x69, 0xa7, 0x30,
- 0xd9, 0x97, 0xb2, 0x62, 0x32, 0xaf, 0xb5, 0x13, 0x26, 0x61, 0x90, 0x91, 0xb7, 0xd3, 0xc5, 0x32,
- 0xaf, 0x9e, 0x43, 0xdf, 0x29, 0xf3, 0xf2, 0xa8, 0x70, 0x6e, 0x5d, 0xc8, 0x85, 0x89, 0x56, 0x18,
- 0x25, 0x37, 0xc3, 0x48, 0xce, 0x2a, 0xd4, 0xe5, 0xf0, 0x64, 0x50, 0x8a, 0x1a, 0x99, 0x7f, 0xad,
- 0x89, 0xc1, 0x19, 0x9e, 0x74, 0x48, 0xe2, 0xa6, 0xe3, 0x93, 0xb5, 0x6b, 0xd5, 0x53, 0xc5, 0x43,
- 0xd2, 0xe0, 0x24, 0x9d, 0x43, 0x22, 0x10, 0x58, 0x32, 0xa1, 0xd2, 0x87, 0x25, 0x06, 0x67, 0xe9,
- 0x67, 0x0b, 0xa4, 0x4f, 0x87, 0xe7, 0x29, 0x97, 0x3e, 0x0c, 0x8c, 0x79, 0x71, 0x3a, 0xf3, 0x85,
- 0x4e, 0x18, 0xc6, 0xd5, 0xd3, 0xc5, 0x33, 0x5f, 0xa8, 0x92, 0xd7, 0x1a, 0xdd, 0x66, 0xbe, 0x22,
- 0xc2, 0x29, 0x53, 0xfb, 0x9b, 0x43, 0x9d, 0xda, 0x02, 0xd3, 0xfd, 0xbf, 0x64, 0x75, 0x5c, 0x9f,
- 0x7e, 0xa2, 0xdf, 0x03, 0xeb, 0x5d, 0xbc, 0x48, 0xfd, 0xa2, 0x05, 0xf7, 0xb5, 0x72, 0x3f, 0x4a,
- 0x6c, 0xbd, 0xfd, 0x9d, 0x7b, 0x79, 0x37, 0xa8, 0xc4, 0xce, 0xf9, 0x78, 0x5c, 0x50, 0x53, 0x56,
- 0x47, 0x2e, 0xbf, 0x6f, 0x1d, 0x79, 0x1d, 0x46, 0x98, 0x7a, 0x97, 0x26, 0x92, 0xe9, 0xcb, 0x09,
- 0x89, 0x6d, 0xe2, 0xcb, 0xa2, 0x20, 0x56, 0x2c, 0xd0, 0xcf, 0x59, 0xf0, 0x50, 0xb6, 0xe9, 0x98,
- 0x30, 0xb4, 0x48, 0x4a, 0xc8, 0x8f, 0x1d, 0xab, 0xe2, 0xfb, 0x1f, 0xaa, 0x77, 0x23, 0x3e, 0xea,
- 0x45, 0x80, 0xbb, 0x57, 0x86, 0x6a, 0x39, 0xe7, 0x9e, 0x21, 0xf3, 0x76, 0xa5, 0xf7, 0xd9, 0x07,
- 0x3d, 0x07, 0x63, 0x7b, 0x61, 0x3b, 0x90, 0x11, 0x02, 0x22, 0xfe, 0x93, 0x59, 0xf2, 0xd6, 0x35,
- 0x38, 0x36, 0xa8, 0x4e, 0x56, 0xdf, 0xff, 0xba, 0x95, 0xa3, 0xa8, 0xf2, 0x93, 0xd9, 0xcb, 0xe6,
- 0xc9, 0xec, 0xd1, 0xec, 0xc9, 0xac, 0xc3, 0xce, 0x62, 0x1c, 0xca, 0xfa, 0x4f, 0xb6, 0xda, 0x6f,
- 0xa6, 0x1d, 0xdb, 0x87, 0x73, 0xbd, 0x84, 0x33, 0x73, 0xc4, 0x72, 0xd5, 0x0d, 0x65, 0xea, 0x88,
- 0xe5, 0xae, 0xd5, 0x30, 0xc3, 0xf4, 0x9b, 0xb3, 0xc1, 0xfe, 0xaf, 0x16, 0x94, 0xeb, 0xa1, 0x7b,
- 0x02, 0x76, 0xa3, 0x4f, 0x19, 0x76, 0xa3, 0x07, 0x0a, 0x5e, 0x5e, 0x2c, 0xb4, 0x12, 0xad, 0x64,
- 0xac, 0x44, 0x0f, 0x15, 0x31, 0xe8, 0x6e, 0x13, 0xfa, 0x7b, 0x65, 0xd0, 0xdf, 0x89, 0x44, 0xff,
- 0xea, 0x4e, 0x3c, 0x7a, 0xcb, 0xdd, 0x9e, 0x8e, 0x14, 0x9c, 0x99, 0xff, 0x96, 0x0c, 0x16, 0xfc,
- 0x31, 0x73, 0xec, 0x7d, 0x9d, 0x78, 0xdb, 0x3b, 0x09, 0x71, 0xb3, 0x9f, 0x73, 0x72, 0x8e, 0xbd,
- 0xff, 0xd9, 0x82, 0xc9, 0x4c, 0xed, 0xc8, 0xcf, 0x8b, 0x3c, 0xba, 0x43, 0x4b, 0xd0, 0x74, 0xcf,
- 0x50, 0xa5, 0x79, 0x00, 0x65, 0x94, 0x97, 0xd6, 0x16, 0xa6, 0xfb, 0x2a, 0xab, 0x7d, 0x8c, 0x35,
- 0x0a, 0xf4, 0x3c, 0x8c, 0x26, 0x61, 0x2b, 0xf4, 0xc3, 0xed, 0x83, 0xcb, 0x44, 0x66, 0x09, 0x51,
- 0x57, 0x27, 0x1b, 0x29, 0x0a, 0xeb, 0x74, 0xf6, 0xaf, 0x96, 0x21, 0xfb, 0xb6, 0xe8, 0xff, 0x9b,
- 0x93, 0x1f, 0xce, 0x39, 0xf9, 0x3d, 0x0b, 0xa6, 0x68, 0xed, 0xcc, 0x37, 0x46, 0xba, 0xc4, 0xaa,
- 0x57, 0x19, 0xac, 0x2e, 0xaf, 0x32, 0x3c, 0x4a, 0x65, 0x97, 0x1b, 0xb6, 0x13, 0x61, 0x15, 0xd2,
- 0x84, 0x13, 0x85, 0x62, 0x81, 0x15, 0x74, 0x24, 0x8a, 0x44, 0x3c, 0x91, 0x4e, 0x47, 0xa2, 0x08,
- 0x0b, 0xac, 0x7c, 0xb4, 0x61, 0xa0, 0xe0, 0xd1, 0x06, 0x96, 0x60, 0x4b, 0xf8, 0x63, 0x08, 0x85,
- 0x42, 0x4b, 0xb0, 0x25, 0x1d, 0x35, 0x52, 0x1a, 0xfb, 0x1b, 0x65, 0x18, 0xab, 0x87, 0x6e, 0xea,
- 0x45, 0xff, 0x9c, 0xe1, 0x45, 0x7f, 0x2e, 0xe3, 0x45, 0x3f, 0xa5, 0xd3, 0xde, 0x1d, 0x27, 0x7a,
- 0x91, 0x7e, 0x8d, 0x3d, 0x21, 0x72, 0x87, 0x0e, 0xf4, 0x46, 0xfa, 0x35, 0xc5, 0x08, 0x9b, 0x7c,
- 0x7f, 0x92, 0x1c, 0xe7, 0xff, 0xdc, 0x82, 0x89, 0x7a, 0xe8, 0xd2, 0x09, 0xfa, 0x93, 0x34, 0x1b,
- 0xf5, 0xf4, 0x6d, 0x43, 0x5d, 0xd2, 0xb7, 0xfd, 0x7d, 0x0b, 0x86, 0xeb, 0xa1, 0x7b, 0x02, 0x16,
- 0xd3, 0x97, 0x4d, 0x8b, 0xe9, 0xfd, 0x05, 0x52, 0xb6, 0xc0, 0x48, 0xfa, 0x5b, 0x65, 0x18, 0xa7,
- 0xed, 0x0c, 0xb7, 0xe5, 0x28, 0x19, 0x3d, 0x62, 0xf5, 0xd1, 0x23, 0x54, 0x99, 0x0b, 0x7d, 0x3f,
- 0xbc, 0x99, 0x1d, 0xb1, 0x55, 0x06, 0xc5, 0x02, 0x8b, 0x9e, 0x82, 0x91, 0x56, 0x44, 0xf6, 0xbd,
- 0xb0, 0x1d, 0x67, 0x23, 0x12, 0xeb, 0x02, 0x8e, 0x15, 0x05, 0xd5, 0xdb, 0x63, 0x2f, 0x68, 0x12,
- 0xe9, 0xa3, 0x31, 0xc0, 0x7c, 0x34, 0x78, 0x06, 0x4c, 0x0d, 0x8e, 0x0d, 0x2a, 0xf4, 0x3a, 0x54,
- 0xd8, 0x7f, 0xb6, 0x6e, 0x8e, 0xff, 0x26, 0x83, 0x48, 0x3b, 0x2d, 0x18, 0xe0, 0x94, 0x17, 0xba,
- 0x00, 0x90, 0x48, 0x6f, 0x92, 0x58, 0x04, 0xcc, 0x2a, 0x8d, 0x52, 0xf9, 0x99, 0xc4, 0x58, 0xa3,
- 0x42, 0x4f, 0x42, 0x25, 0x71, 0x3c, 0xff, 0x8a, 0x17, 0x90, 0x58, 0x78, 0xe3, 0x88, 0xac, 0xd2,
- 0x02, 0x88, 0x53, 0x3c, 0xdd, 0xd1, 0x59, 0x38, 0x36, 0x7f, 0xd1, 0x65, 0x84, 0x51, 0xb3, 0x1d,
- 0xfd, 0x8a, 0x82, 0x62, 0x8d, 0xc2, 0x7e, 0x11, 0x4e, 0xd7, 0x43, 0xb7, 0x1e, 0x46, 0xc9, 0x6a,
- 0x18, 0xdd, 0x74, 0x22, 0x57, 0x8e, 0xdf, 0x9c, 0x4c, 0x70, 0x4c, 0x77, 0xdd, 0x41, 0x6e, 0x0d,
- 0x30, 0x52, 0x17, 0x3f, 0xcb, 0xf6, 0xf4, 0x63, 0x86, 0x4e, 0xfc, 0xdb, 0x12, 0xa0, 0x3a, 0xf3,
- 0x77, 0x31, 0x9e, 0xfd, 0x79, 0x1b, 0x26, 0x62, 0x72, 0xc5, 0x0b, 0xda, 0xb7, 0xe4, 0xf9, 0xaa,
- 0x4b, 0x5c, 0x4a, 0x63, 0x45, 0xa7, 0xe4, 0x16, 0x15, 0x13, 0x86, 0x33, 0xdc, 0x68, 0x17, 0x46,
- 0xed, 0x60, 0x31, 0xbe, 0x1e, 0x93, 0x48, 0x3c, 0x73, 0xc3, 0xba, 0x10, 0x4b, 0x20, 0x4e, 0xf1,
- 0x74, 0xca, 0xb0, 0x3f, 0x57, 0xc3, 0x00, 0x87, 0x61, 0x22, 0x27, 0x19, 0x7b, 0x28, 0x41, 0x83,
- 0x63, 0x83, 0x0a, 0xad, 0x02, 0x8a, 0xdb, 0xad, 0x96, 0xcf, 0xae, 0x07, 0x1d, 0xff, 0x62, 0x14,
- 0xb6, 0x5b, 0xdc, 0x61, 0x59, 0xbc, 0x31, 0xd0, 0xe8, 0xc0, 0xe2, 0x9c, 0x12, 0x54, 0x30, 0x6c,
- 0xc5, 0xec, 0xb7, 0x88, 0xc8, 0xe6, 0xb6, 0xcd, 0x06, 0x03, 0x61, 0x89, 0xb3, 0xbf, 0xc0, 0x36,
- 0x33, 0xf6, 0x3a, 0x49, 0xd2, 0x8e, 0x08, 0xda, 0x83, 0xf1, 0x16, 0xdb, 0xb0, 0x92, 0x28, 0xf4,
- 0x7d, 0x22, 0xf5, 0xc6, 0x3b, 0xf3, 0xbd, 0xe1, 0xaf, 0x15, 0xe8, 0xec, 0xb0, 0xc9, 0xdd, 0xfe,
- 0xd2, 0x24, 0x93, 0x4b, 0x0d, 0x7e, 0x68, 0x19, 0x16, 0x1e, 0xb5, 0x42, 0x43, 0x9b, 0x2d, 0x7e,
- 0x0d, 0x2c, 0x95, 0xf4, 0xc2, 0x2b, 0x17, 0xcb, 0xb2, 0xe8, 0x35, 0xe6, 0xe9, 0xcd, 0x85, 0x41,
- 0xaf, 0x77, 0x08, 0x39, 0x95, 0xe1, 0xe5, 0x2d, 0x0a, 0x62, 0x8d, 0x09, 0xba, 0x02, 0xe3, 0xe2,
- 0x31, 0x0b, 0x61, 0x78, 0x28, 0x1b, 0xc7, 0xdf, 0x71, 0xac, 0x23, 0x8f, 0xb2, 0x00, 0x6c, 0x16,
- 0x46, 0xdb, 0xf0, 0x90, 0xf6, 0xf4, 0x52, 0x8e, 0xff, 0x17, 0x97, 0x2d, 0x0f, 0xdf, 0x3e, 0x9c,
- 0x7b, 0x68, 0xa3, 0x1b, 0x21, 0xee, 0xce, 0x07, 0x5d, 0x83, 0xd3, 0x4e, 0x33, 0xf1, 0xf6, 0x49,
- 0x8d, 0x38, 0xae, 0xef, 0x05, 0xc4, 0x0c, 0xd1, 0x3f, 0x73, 0xfb, 0x70, 0xee, 0xf4, 0x62, 0x1e,
- 0x01, 0xce, 0x2f, 0x87, 0x5e, 0x86, 0x8a, 0x1b, 0xc4, 0xa2, 0x0f, 0x86, 0x8c, 0x57, 0xc5, 0x2a,
- 0xb5, 0xab, 0x0d, 0xf5, 0xfd, 0xe9, 0x1f, 0x9c, 0x16, 0x40, 0xdb, 0x30, 0xa6, 0x87, 0xe1, 0x88,
- 0x17, 0xe9, 0x9e, 0xee, 0x72, 0xb6, 0x35, 0x62, 0x57, 0xb8, 0xd5, 0x4d, 0x79, 0x57, 0x1a, 0x61,
- 0x2d, 0x06, 0x63, 0xf4, 0x2a, 0xa0, 0x98, 0x44, 0xfb, 0x5e, 0x93, 0x2c, 0x36, 0x59, 0x8a, 0x58,
- 0x66, 0xab, 0x19, 0x31, 0x42, 0x05, 0x50, 0xa3, 0x83, 0x02, 0xe7, 0x94, 0x42, 0x97, 0xa8, 0x44,
- 0xd1, 0xa1, 0xc2, 0x19, 0x56, 0xaa, 0x79, 0xd5, 0x1a, 0x69, 0x45, 0xa4, 0xe9, 0x24, 0xc4, 0x35,
- 0x39, 0xe2, 0x4c, 0x39, 0xba, 0xdf, 0xa8, 0xcc, 0xfb, 0x60, 0xba, 0x70, 0x76, 0x66, 0xdf, 0xa7,
- 0x27, 0xa4, 0x9d, 0x30, 0x4e, 0xae, 0x92, 0xe4, 0x66, 0x18, 0xed, 0x8a, 0xbc, 0x5a, 0x69, 0xda,
- 0xbd, 0x14, 0x85, 0x75, 0x3a, 0xaa, 0x11, 0xb1, 0x4b, 0xb0, 0xb5, 0x1a, 0xbb, 0xa7, 0x18, 0x49,
- 0xd7, 0xc9, 0x25, 0x0e, 0xc6, 0x12, 0x2f, 0x49, 0xd7, 0xea, 0xcb, 0xec, 0xf6, 0x21, 0x43, 0xba,
- 0x56, 0x5f, 0xc6, 0x12, 0x8f, 0x48, 0xe7, 0x8b, 0x6d, 0x13, 0xc5, 0xf7, 0x46, 0x9d, 0x72, 0xb9,
- 0xcf, 0x47, 0xdb, 0x02, 0x98, 0x52, 0x6f, 0xc5, 0xf1, 0x84, 0x63, 0x71, 0x75, 0x92, 0x4d, 0x92,
- 0xfe, 0xb3, 0x95, 0x29, 0x5b, 0xdc, 0x5a, 0x86, 0x13, 0xee, 0xe0, 0x6d, 0xa4, 0x7e, 0x98, 0xea,
- 0xf9, 0x72, 0xc2, 0x02, 0x54, 0xe2, 0xf6, 0xa6, 0x1b, 0xee, 0x39, 0x5e, 0xc0, 0x2e, 0x0b, 0xf4,
- 0x27, 0xf3, 0x25, 0x02, 0xa7, 0x34, 0x68, 0x15, 0x46, 0x1c, 0x71, 0xf8, 0x12, 0xe6, 0xfd, 0xdc,
- 0x58, 0x70, 0x79, 0x40, 0xe3, 0x76, 0x50, 0xf9, 0x0f, 0xab, 0xb2, 0xe8, 0x25, 0x18, 0x17, 0xe1,
- 0x4a, 0xc2, 0xd3, 0xf0, 0x94, 0xe9, 0xd9, 0xde, 0xd0, 0x91, 0xd8, 0xa4, 0x45, 0x3f, 0x0d, 0x13,
- 0x94, 0x4b, 0x2a, 0xd8, 0xaa, 0x33, 0xfd, 0x48, 0x44, 0x2d, 0x23, 0xb6, 0x5e, 0x18, 0x67, 0x98,
- 0x21, 0x17, 0x1e, 0x74, 0xda, 0x49, 0xc8, 0x8c, 0x95, 0xe6, 0xfc, 0xdf, 0x08, 0x77, 0x49, 0xc0,
- 0xac, 0xfb, 0x23, 0x4b, 0xe7, 0x6e, 0x1f, 0xce, 0x3d, 0xb8, 0xd8, 0x85, 0x0e, 0x77, 0xe5, 0x82,
- 0xae, 0xc3, 0x68, 0x12, 0xfa, 0xc2, 0x45, 0x38, 0xae, 0xde, 0x57, 0x9c, 0xba, 0x66, 0x43, 0x91,
- 0xe9, 0xe6, 0x04, 0x55, 0x14, 0xeb, 0x7c, 0xd0, 0x06, 0x5f, 0x63, 0x2c, 0xd1, 0x22, 0x89, 0xab,
- 0xf7, 0x17, 0x77, 0x8c, 0xca, 0xc7, 0x68, 0x2e, 0x41, 0x51, 0x12, 0xeb, 0x6c, 0xd0, 0x45, 0x98,
- 0x6e, 0x45, 0x5e, 0xc8, 0x26, 0xb6, 0x32, 0x14, 0x57, 0x8d, 0xa4, 0x66, 0xd3, 0xf5, 0x2c, 0x01,
- 0xee, 0x2c, 0x83, 0xce, 0x53, 0x05, 0x95, 0x03, 0xab, 0x67, 0xf8, 0x8b, 0x1a, 0x5c, 0x39, 0xe5,
- 0x30, 0xac, 0xb0, 0xb3, 0x9f, 0x86, 0xe9, 0x0e, 0x49, 0x79, 0x2c, 0x77, 0xcd, 0x7f, 0x3c, 0x08,
- 0x15, 0x65, 0x0e, 0x44, 0x0b, 0xa6, 0x95, 0xf7, 0x4c, 0xd6, 0xca, 0x3b, 0x42, 0xf5, 0x35, 0xdd,
- 0xb0, 0xbb, 0x91, 0xf3, 0x20, 0xf8, 0xb9, 0x02, 0xd1, 0xd0, 0x7f, 0x6c, 0xd5, 0x31, 0x1e, 0x4b,
- 0x4f, 0x0f, 0x8c, 0x03, 0x5d, 0x0f, 0x8c, 0x7d, 0x3e, 0xce, 0x47, 0x8f, 0x86, 0xad, 0xd0, 0x5d,
- 0xab, 0x67, 0x5f, 0xab, 0xaa, 0x53, 0x20, 0xe6, 0x38, 0xa6, 0xdc, 0xd3, 0x6d, 0x9d, 0x29, 0xf7,
- 0xc3, 0x77, 0xa8, 0xdc, 0x4b, 0x06, 0x38, 0xe5, 0x85, 0x7c, 0x98, 0x6e, 0x9a, 0x0f, 0x8d, 0xa9,
- 0x78, 0xaa, 0x47, 0x7a, 0x3e, 0xf9, 0xd5, 0xd6, 0x5e, 0x20, 0x59, 0xce, 0x72, 0xc1, 0x9d, 0x8c,
- 0xd1, 0x4b, 0x30, 0xf2, 0x6e, 0x18, 0xb3, 0x69, 0x27, 0xf6, 0x36, 0x19, 0xc1, 0x32, 0xf2, 0xda,
- 0xb5, 0x06, 0x83, 0x1f, 0x1d, 0xce, 0x8d, 0xd6, 0x43, 0x57, 0xfe, 0xc5, 0xaa, 0x00, 0xba, 0x05,
- 0xa7, 0x0d, 0x89, 0xa0, 0x9a, 0x0b, 0xfd, 0x37, 0xf7, 0x21, 0x51, 0xdd, 0xe9, 0xb5, 0x3c, 0x4e,
- 0x38, 0xbf, 0x02, 0xfb, 0x9b, 0xdc, 0xe8, 0x29, 0x4c, 0x23, 0x24, 0x6e, 0xfb, 0x27, 0xf1, 0xcc,
- 0xc0, 0x8a, 0x61, 0xb5, 0xb9, 0x63, 0xc3, 0xfa, 0xef, 0x5b, 0xcc, 0xb0, 0xbe, 0x41, 0xf6, 0x5a,
- 0xbe, 0x93, 0x9c, 0x84, 0x93, 0xee, 0x6b, 0x30, 0x92, 0x88, 0xda, 0xba, 0xbd, 0x8c, 0xa0, 0x35,
- 0x8a, 0x5d, 0x2e, 0xa8, 0x0d, 0x51, 0x42, 0xb1, 0x62, 0x63, 0xff, 0x53, 0x3e, 0x02, 0x12, 0x73,
- 0x02, 0xb6, 0x85, 0x9a, 0x69, 0x5b, 0x98, 0xeb, 0xf1, 0x05, 0x05, 0x36, 0x86, 0x7f, 0x62, 0xb6,
- 0x9b, 0x9d, 0x3d, 0x3e, 0xec, 0x37, 0x3a, 0xf6, 0x2f, 0x59, 0x30, 0x93, 0xe7, 0x08, 0x40, 0x95,
- 0x18, 0x7e, 0xf2, 0x51, 0x37, 0x5c, 0xaa, 0x07, 0x6f, 0x08, 0x38, 0x56, 0x14, 0x7d, 0x67, 0x27,
- 0x3f, 0x5e, 0xba, 0xa6, 0x6b, 0x60, 0xbe, 0x49, 0x87, 0x5e, 0xe1, 0x5e, 0xf7, 0x96, 0x7a, 0x34,
- 0xee, 0x78, 0x1e, 0xf7, 0xf6, 0xaf, 0x95, 0x60, 0x86, 0x9b, 0xa8, 0x17, 0xf7, 0x43, 0xcf, 0xad,
- 0x87, 0xae, 0x88, 0x41, 0x78, 0x13, 0xc6, 0x5a, 0xda, 0x71, 0xb5, 0x5b, 0xc2, 0x18, 0xfd, 0x58,
- 0x9b, 0x1e, 0x1b, 0x74, 0x28, 0x36, 0x78, 0x21, 0x17, 0xc6, 0xc8, 0xbe, 0xd7, 0x54, 0x76, 0xce,
- 0xd2, 0xb1, 0x45, 0xba, 0xaa, 0x65, 0x45, 0xe3, 0x83, 0x0d, 0xae, 0xf7, 0xe0, 0x0d, 0x11, 0xfb,
- 0xab, 0x16, 0xdc, 0x5f, 0x90, 0x5e, 0x86, 0x56, 0x77, 0x93, 0x5d, 0x06, 0x88, 0x07, 0x0e, 0x55,
- 0x75, 0xfc, 0x8a, 0x00, 0x0b, 0x2c, 0xfa, 0x2c, 0x00, 0x37, 0xf1, 0xb3, 0xe7, 0xe4, 0x4b, 0xdd,
- 0xe3, 0xd7, 0x8d, 0xb4, 0x0b, 0x5a, 0x6c, 0xbe, 0x7a, 0x40, 0x5e, 0xe3, 0x65, 0xff, 0x4a, 0x19,
- 0x06, 0xf9, 0x6b, 0xd7, 0xab, 0x30, 0xbc, 0xc3, 0x93, 0xd9, 0xf6, 0x93, 0x37, 0x37, 0x3d, 0x8e,
- 0x70, 0x00, 0x96, 0x85, 0xd1, 0x3a, 0x9c, 0x12, 0x71, 0x2e, 0x35, 0xe2, 0x3b, 0x07, 0xf2, 0x54,
- 0xcb, 0x1f, 0x96, 0x90, 0x49, 0xcf, 0x4f, 0xad, 0x75, 0x92, 0xe0, 0xbc, 0x72, 0xe8, 0x95, 0x8e,
- 0x14, 0x76, 0x3c, 0x0d, 0xb0, 0xd2, 0x81, 0x7b, 0xa4, 0xb1, 0x7b, 0x09, 0xc6, 0x5b, 0x1d, 0xe7,
- 0x77, 0xed, 0xa1, 0x61, 0xf3, 0xcc, 0x6e, 0xd2, 0x32, 0xaf, 0x82, 0x36, 0xf3, 0xa1, 0xd8, 0xd8,
- 0x89, 0x48, 0xbc, 0x13, 0xfa, 0xae, 0x78, 0x55, 0x33, 0xf5, 0x2a, 0xc8, 0xe0, 0x71, 0x47, 0x09,
- 0xca, 0x65, 0xcb, 0xf1, 0xfc, 0x76, 0x44, 0x52, 0x2e, 0x43, 0x26, 0x97, 0xd5, 0x0c, 0x1e, 0x77,
- 0x94, 0xa0, 0xf3, 0xe8, 0xb4, 0x78, 0x92, 0x51, 0x46, 0x3f, 0x2b, 0x57, 0x91, 0x61, 0xe9, 0xdf,
- 0xde, 0x25, 0x23, 0x87, 0xb8, 0xf2, 0x57, 0x8f, 0x3a, 0x6a, 0x0f, 0x7e, 0x09, 0xcf, 0x76, 0xc9,
- 0xe5, 0x4e, 0x1e, 0x06, 0xfc, 0x63, 0x0b, 0x4e, 0xe5, 0xb8, 0x8f, 0x71, 0x51, 0xb5, 0xed, 0xc5,
- 0x89, 0x7a, 0xcf, 0x40, 0x13, 0x55, 0x1c, 0x8e, 0x15, 0x05, 0x5d, 0x0f, 0x5c, 0x18, 0x66, 0x05,
- 0xa0, 0x70, 0xf9, 0x10, 0xd8, 0xe3, 0x09, 0x40, 0x74, 0x0e, 0x06, 0xda, 0x31, 0x89, 0xe4, 0x8b,
- 0x7a, 0x52, 0x7e, 0x33, 0x8b, 0x20, 0xc3, 0x50, 0x8d, 0x72, 0x5b, 0x19, 0xe3, 0x34, 0x8d, 0x92,
- 0x9b, 0xe3, 0x38, 0xce, 0xfe, 0x4a, 0x19, 0x26, 0x33, 0x0e, 0xa0, 0xb4, 0x21, 0x7b, 0x61, 0xe0,
- 0x25, 0xa1, 0xca, 0xa0, 0xc6, 0x13, 0x46, 0x90, 0xd6, 0xce, 0xba, 0x80, 0x63, 0x45, 0x81, 0x1e,
- 0x95, 0xcf, 0xac, 0x66, 0xdf, 0x69, 0x58, 0xaa, 0x19, 0x2f, 0xad, 0xf6, 0xfb, 0xe0, 0xca, 0x23,
- 0x30, 0xd0, 0x0a, 0xd5, 0x1b, 0xd8, 0x6a, 0x3c, 0xf1, 0x52, 0xad, 0x1e, 0x86, 0x3e, 0x66, 0x48,
- 0xf4, 0x31, 0xf1, 0xf5, 0x99, 0xfb, 0x0a, 0xec, 0xb8, 0x61, 0xac, 0x75, 0xc1, 0xe3, 0x30, 0xbc,
- 0x4b, 0x0e, 0x22, 0x2f, 0xd8, 0xce, 0xde, 0xd6, 0x5c, 0xe6, 0x60, 0x2c, 0xf1, 0x66, 0xc2, 0xf2,
- 0xe1, 0x7b, 0xf2, 0x66, 0xca, 0x48, 0xcf, 0x5d, 0xed, 0xb7, 0x2c, 0x98, 0x64, 0xd9, 0x4a, 0x45,
- 0x9c, 0xbd, 0x17, 0x06, 0x27, 0xa0, 0x27, 0x3c, 0x02, 0x83, 0x11, 0xad, 0x34, 0xfb, 0x10, 0x02,
- 0x6b, 0x09, 0xe6, 0x38, 0xf4, 0x20, 0x0c, 0xb0, 0x26, 0xd0, 0xc1, 0x1b, 0xe3, 0xf9, 0xca, 0x6b,
- 0x4e, 0xe2, 0x60, 0x06, 0x65, 0x01, 0x4f, 0x98, 0xb4, 0x7c, 0x8f, 0x37, 0x3a, 0x35, 0xb7, 0x7e,
- 0x38, 0x02, 0x9e, 0x72, 0x9b, 0xf6, 0xfe, 0x02, 0x9e, 0xf2, 0x59, 0x76, 0xd7, 0xc1, 0xff, 0x5b,
- 0x09, 0xce, 0xe6, 0x96, 0x4b, 0x6f, 0x76, 0x57, 0x8d, 0x9b, 0xdd, 0x0b, 0x99, 0x9b, 0x5d, 0xbb,
- 0x7b, 0xe9, 0xbb, 0x73, 0xd7, 0x9b, 0x7f, 0x05, 0x5b, 0x3e, 0xc1, 0x2b, 0xd8, 0x81, 0x7e, 0xd5,
- 0x94, 0xc1, 0x1e, 0x6a, 0xca, 0x77, 0x2c, 0x38, 0x93, 0xdb, 0x65, 0x1f, 0x92, 0x08, 0xb3, 0xdc,
- 0xb6, 0x15, 0x9c, 0x21, 0x7e, 0x54, 0x2a, 0xf8, 0x16, 0x76, 0x9a, 0x38, 0x4f, 0xe5, 0x0c, 0x43,
- 0xc6, 0x42, 0xed, 0x1a, 0xe3, 0x32, 0x86, 0xc3, 0xb0, 0xc2, 0x22, 0x4f, 0x8b, 0xd5, 0xe2, 0x4d,
- 0x7b, 0xe9, 0x58, 0x4b, 0x66, 0xde, 0xb4, 0x8e, 0xeb, 0x49, 0x01, 0xb2, 0x71, 0x5b, 0xeb, 0xda,
- 0x09, 0xb0, 0xdc, 0xff, 0x09, 0x70, 0x2c, 0xff, 0xf4, 0x87, 0x16, 0x61, 0x72, 0xcf, 0x0b, 0xd8,
- 0x6b, 0xa6, 0xa6, 0xde, 0xa3, 0x02, 0x5c, 0xd7, 0x4d, 0x34, 0xce, 0xd2, 0xcf, 0xbe, 0x04, 0xe3,
- 0x77, 0x6e, 0xb2, 0xfa, 0x5e, 0x19, 0x1e, 0xe8, 0xb2, 0xec, 0xb9, 0xac, 0x37, 0xc6, 0x40, 0x93,
- 0xf5, 0x1d, 0xe3, 0x50, 0x87, 0x99, 0xad, 0xb6, 0xef, 0x1f, 0x30, 0x2f, 0x27, 0xe2, 0x4a, 0x0a,
- 0xa1, 0x98, 0xa8, 0x54, 0xc4, 0xab, 0x39, 0x34, 0x38, 0xb7, 0x24, 0x7a, 0x15, 0x50, 0xb8, 0xc9,
- 0xd2, 0xe3, 0xba, 0x69, 0xaa, 0x03, 0xd6, 0xf1, 0xe5, 0x74, 0x31, 0x5e, 0xeb, 0xa0, 0xc0, 0x39,
- 0xa5, 0xa8, 0x86, 0xc9, 0xde, 0x5f, 0x57, 0xcd, 0xca, 0x68, 0x98, 0x58, 0x47, 0x62, 0x93, 0x16,
- 0x5d, 0x84, 0x69, 0x67, 0xdf, 0xf1, 0x78, 0xea, 0x2b, 0xc9, 0x80, 0xab, 0x98, 0xca, 0x50, 0xb4,
- 0x98, 0x25, 0xc0, 0x9d, 0x65, 0xd0, 0x96, 0x61, 0xe5, 0xe3, 0x99, 0xf7, 0x2f, 0xf4, 0x3d, 0x5b,
- 0xfb, 0xb6, 0xfb, 0xd9, 0xff, 0xd1, 0xa2, 0xdb, 0x57, 0xce, 0xf3, 0x99, 0xb4, 0x1f, 0x94, 0xfd,
- 0x4a, 0x8b, 0x33, 0x53, 0xfd, 0xb0, 0xac, 0x23, 0xb1, 0x49, 0xcb, 0x27, 0x44, 0x9c, 0x3a, 0x59,
- 0x1b, 0x7a, 0xa2, 0x08, 0xcc, 0x54, 0x14, 0xe8, 0x0d, 0x18, 0x76, 0xbd, 0x7d, 0x2f, 0x0e, 0x23,
- 0xb1, 0x58, 0x8e, 0xfb, 0x64, 0xb4, 0x92, 0x83, 0x35, 0xce, 0x06, 0x4b, 0x7e, 0xf6, 0x57, 0x4a,
- 0x30, 0x2e, 0x6b, 0x7c, 0xad, 0x1d, 0x26, 0xce, 0x09, 0x6c, 0xcb, 0x17, 0x8d, 0x6d, 0xf9, 0x63,
- 0xdd, 0xa2, 0x53, 0x59, 0x93, 0x0a, 0xb7, 0xe3, 0x6b, 0x99, 0xed, 0xf8, 0xb1, 0xde, 0xac, 0xba,
- 0x6f, 0xc3, 0xff, 0xcc, 0x82, 0x69, 0x83, 0xfe, 0x04, 0x76, 0x83, 0x55, 0x73, 0x37, 0x78, 0xb8,
- 0xe7, 0x37, 0x14, 0xec, 0x02, 0x5f, 0x2f, 0x65, 0xda, 0xce, 0xa4, 0xff, 0xbb, 0x30, 0xb0, 0xe3,
- 0x44, 0x6e, 0xb7, 0x04, 0x8e, 0x1d, 0x85, 0xe6, 0x2f, 0x39, 0x91, 0xcb, 0x65, 0xf8, 0x53, 0xea,
- 0x65, 0x2f, 0x27, 0x72, 0x7b, 0xc6, 0x14, 0xb0, 0xaa, 0xd0, 0x8b, 0x30, 0x14, 0x37, 0xc3, 0x96,
- 0xf2, 0xbd, 0x3c, 0xc7, 0x5f, 0xfd, 0xa2, 0x90, 0xa3, 0xc3, 0x39, 0x64, 0x56, 0x47, 0xc1, 0x58,
- 0xd0, 0xcf, 0x6e, 0x43, 0x45, 0x55, 0x7d, 0x4f, 0xbd, 0xca, 0xff, 0xb0, 0x0c, 0xa7, 0x72, 0xe6,
- 0x05, 0x8a, 0x8d, 0xde, 0x7a, 0xa6, 0xcf, 0xe9, 0xf4, 0x3e, 0xfb, 0x2b, 0x66, 0x27, 0x16, 0x57,
- 0x8c, 0x7f, 0xdf, 0x95, 0x5e, 0x8f, 0x49, 0xb6, 0x52, 0x0a, 0xea, 0x5d, 0x29, 0xad, 0xec, 0xc4,
- 0xba, 0x9a, 0x56, 0xa4, 0x5a, 0x7a, 0x4f, 0xc7, 0xf4, 0x4f, 0xcb, 0x30, 0x93, 0x17, 0xd4, 0x8e,
- 0x7e, 0x26, 0xf3, 0x1c, 0xc4, 0x73, 0xfd, 0x86, 0xc3, 0xf3, 0x37, 0x22, 0x44, 0xae, 0x98, 0x79,
- 0xf3, 0x81, 0x88, 0x9e, 0xdd, 0x2c, 0xea, 0x64, 0x41, 0x3e, 0x11, 0x7f, 0xc6, 0x43, 0x2e, 0xf1,
- 0x4f, 0xf4, 0xdd, 0x00, 0xf1, 0xfe, 0x47, 0x9c, 0x09, 0xf2, 0x91, 0xe0, 0xde, 0x41, 0x3e, 0xb2,
- 0xe6, 0x59, 0x0f, 0x46, 0xb5, 0xaf, 0xb9, 0xa7, 0x23, 0xbe, 0x4b, 0x77, 0x14, 0xad, 0xdd, 0xf7,
- 0x74, 0xd4, 0xbf, 0x6a, 0x41, 0xc6, 0x4f, 0x4a, 0xd9, 0x3f, 0xac, 0x42, 0xfb, 0xc7, 0x39, 0x18,
- 0x88, 0x42, 0x9f, 0x64, 0x5f, 0x08, 0xc0, 0xa1, 0x4f, 0x30, 0xc3, 0xa8, 0x67, 0x7c, 0xcb, 0x45,
- 0xcf, 0xf8, 0xd2, 0xa3, 0xb1, 0x4f, 0xf6, 0x89, 0xb4, 0x46, 0x28, 0x99, 0x7c, 0x85, 0x02, 0x31,
- 0xc7, 0xd9, 0xbf, 0x31, 0x00, 0xa7, 0x72, 0x42, 0xda, 0xe8, 0x41, 0x65, 0xdb, 0x49, 0xc8, 0x4d,
- 0xe7, 0x20, 0x9b, 0xb5, 0xf4, 0x22, 0x07, 0x63, 0x89, 0x67, 0xbe, 0x9c, 0x3c, 0xf1, 0x59, 0xc6,
- 0x46, 0x24, 0xf2, 0x9d, 0x09, 0xec, 0xbd, 0x7a, 0xd9, 0xf5, 0x02, 0x40, 0x1c, 0xfb, 0x2b, 0x01,
- 0x55, 0xbe, 0x5c, 0xe1, 0x29, 0x9a, 0x66, 0xc9, 0x6b, 0x5c, 0x11, 0x18, 0xac, 0x51, 0xa1, 0x1a,
- 0x4c, 0xb5, 0xa2, 0x30, 0xe1, 0x76, 0xb7, 0x1a, 0xf7, 0x51, 0x18, 0x34, 0x83, 0x93, 0xea, 0x19,
- 0x3c, 0xee, 0x28, 0x81, 0x9e, 0x87, 0x51, 0x11, 0xb0, 0x54, 0x0f, 0x43, 0x5f, 0x58, 0x69, 0xd4,
- 0x8d, 0x77, 0x23, 0x45, 0x61, 0x9d, 0x4e, 0x2b, 0xc6, 0x8c, 0x79, 0xc3, 0xb9, 0xc5, 0xb8, 0x41,
- 0x4f, 0xa3, 0xcb, 0xe4, 0xb6, 0x18, 0xe9, 0x2b, 0xb7, 0x45, 0x6a, 0xb7, 0xaa, 0xf4, 0x7d, 0x7f,
- 0x01, 0x3d, 0x2d, 0x3d, 0xdf, 0x2c, 0xc3, 0x10, 0x1f, 0x8a, 0x13, 0x50, 0xc5, 0x56, 0x85, 0xed,
- 0xa6, 0x4b, 0x46, 0x01, 0xde, 0x96, 0xf9, 0x9a, 0x93, 0x38, 0x5c, 0x0c, 0xa9, 0xd5, 0x90, 0x5a,
- 0x79, 0xd0, 0xbc, 0xb1, 0x5e, 0x66, 0x33, 0xc6, 0x09, 0xe0, 0x3c, 0xb4, 0xd5, 0xf3, 0x36, 0x40,
- 0xcc, 0x5e, 0x17, 0xa5, 0x3c, 0x44, 0x06, 0xd4, 0x27, 0xba, 0xd4, 0xde, 0x50, 0xc4, 0xbc, 0x0d,
- 0xe9, 0x14, 0x54, 0x08, 0xac, 0x71, 0x9c, 0x7d, 0x01, 0x2a, 0x8a, 0xb8, 0xd7, 0x49, 0x6e, 0x4c,
- 0x17, 0x5e, 0x9f, 0x82, 0xc9, 0x4c, 0x5d, 0xc7, 0x3a, 0x08, 0xfe, 0xb6, 0x05, 0x93, 0xbc, 0xc9,
- 0x2b, 0xc1, 0xbe, 0x58, 0xec, 0xef, 0xc1, 0x8c, 0x9f, 0xb3, 0xe8, 0xc4, 0x88, 0xf6, 0xbf, 0x48,
- 0xd5, 0xc1, 0x2f, 0x0f, 0x8b, 0x73, 0xeb, 0xa0, 0x87, 0x7f, 0xfe, 0x2e, 0xb2, 0xe3, 0x0b, 0x0f,
- 0xe4, 0x31, 0x9e, 0x19, 0x9a, 0xc3, 0xb0, 0xc2, 0xda, 0xdf, 0xb7, 0x60, 0xba, 0xe3, 0x55, 0xfd,
- 0x0f, 0xb4, 0xed, 0x22, 0xf1, 0x75, 0xa9, 0x20, 0xf1, 0xb5, 0xfe, 0x69, 0xe5, 0xae, 0x9f, 0xf6,
- 0x6b, 0x16, 0x88, 0x19, 0x78, 0x02, 0xea, 0xfc, 0xa7, 0x4d, 0x75, 0x7e, 0xb6, 0x78, 0x52, 0x17,
- 0xe8, 0xf1, 0x7f, 0x6e, 0xc1, 0x14, 0x27, 0x48, 0x2f, 0x2f, 0x3e, 0xd0, 0x71, 0xe8, 0xe7, 0x35,
- 0x16, 0xf5, 0xfc, 0x65, 0xfe, 0x47, 0x19, 0x83, 0x35, 0xd0, 0x75, 0xb0, 0x5c, 0xb9, 0x80, 0x8e,
- 0xf1, 0xca, 0xd0, 0xb1, 0x73, 0xb5, 0xd9, 0x7f, 0x62, 0x01, 0xe2, 0xd5, 0x64, 0x1f, 0xa4, 0xe6,
- 0x5b, 0x9f, 0x76, 0xa0, 0x4f, 0x45, 0x8d, 0xc2, 0x60, 0x8d, 0xea, 0xae, 0x74, 0x4f, 0xe6, 0x06,
- 0xaa, 0xdc, 0xfb, 0x06, 0xea, 0x18, 0x3d, 0xfa, 0x57, 0x07, 0x20, 0xeb, 0xee, 0x88, 0x6e, 0xc0,
- 0x58, 0xd3, 0x69, 0x39, 0x9b, 0x9e, 0xef, 0x25, 0x1e, 0x89, 0xbb, 0x5d, 0x5d, 0x2f, 0x6b, 0x74,
- 0xe2, 0xba, 0x47, 0x83, 0x60, 0x83, 0x0f, 0x9a, 0x07, 0x68, 0x45, 0xde, 0xbe, 0xe7, 0x93, 0x6d,
- 0x76, 0xa2, 0x61, 0x31, 0x0f, 0xfc, 0x3e, 0x56, 0x42, 0xb1, 0x46, 0x91, 0xe3, 0x23, 0x5f, 0xbe,
- 0x77, 0x3e, 0xf2, 0x03, 0xc7, 0xf4, 0x91, 0x1f, 0xec, 0xcb, 0x47, 0x1e, 0xc3, 0x7d, 0x72, 0xef,
- 0xa6, 0xff, 0x57, 0x3d, 0x9f, 0x08, 0x85, 0x8d, 0x47, 0x42, 0xcc, 0xde, 0x3e, 0x9c, 0xbb, 0x0f,
- 0xe7, 0x52, 0xe0, 0x82, 0x92, 0xe8, 0xb3, 0x50, 0x75, 0x7c, 0x3f, 0xbc, 0xa9, 0x7a, 0x6d, 0x25,
- 0x6e, 0x3a, 0x7e, 0x9a, 0xba, 0x74, 0x64, 0xe9, 0xc1, 0xdb, 0x87, 0x73, 0xd5, 0xc5, 0x02, 0x1a,
- 0x5c, 0x58, 0xda, 0xde, 0x85, 0x53, 0x0d, 0x12, 0xc9, 0x87, 0xcb, 0xd4, 0x12, 0xdb, 0x80, 0x4a,
- 0x94, 0x11, 0x2a, 0x7d, 0x85, 0xcb, 0x6b, 0x09, 0xc3, 0xa4, 0x10, 0x49, 0x19, 0xd9, 0x7f, 0x66,
- 0xc1, 0xb0, 0x70, 0xa1, 0x3c, 0x01, 0x5d, 0x66, 0xd1, 0x30, 0x2b, 0xcd, 0xe5, 0x0b, 0x5e, 0xd6,
- 0x98, 0x42, 0x83, 0xd2, 0x5a, 0xc6, 0xa0, 0xf4, 0x70, 0x37, 0x26, 0xdd, 0x4d, 0x49, 0xbf, 0x58,
- 0x86, 0x09, 0xd3, 0x7d, 0xf4, 0x04, 0xba, 0xe0, 0x2a, 0x0c, 0xc7, 0xc2, 0x57, 0xb9, 0x54, 0xec,
- 0xf3, 0x96, 0x1d, 0xc4, 0xf4, 0x66, 0x5c, 0x78, 0x27, 0x4b, 0x26, 0xb9, 0x4e, 0xd0, 0xe5, 0x7b,
- 0xe8, 0x04, 0xdd, 0xcb, 0x83, 0x77, 0xe0, 0x6e, 0x78, 0xf0, 0xda, 0xdf, 0x62, 0xc2, 0x5f, 0x87,
- 0x9f, 0x80, 0x5e, 0x70, 0xd1, 0xdc, 0x26, 0xec, 0x2e, 0x33, 0x4b, 0x34, 0xaa, 0x40, 0x3f, 0xf8,
- 0x87, 0x16, 0x8c, 0x0a, 0xc2, 0x13, 0x68, 0xf6, 0x67, 0xcc, 0x66, 0x3f, 0xd0, 0xa5, 0xd9, 0x05,
- 0xed, 0xfd, 0xdb, 0x25, 0xd5, 0xde, 0x7a, 0x18, 0x25, 0x7d, 0xa5, 0xb2, 0x1e, 0xa1, 0xa7, 0xc1,
- 0xb0, 0x19, 0xfa, 0x62, 0x33, 0x7f, 0x30, 0x0d, 0x86, 0xe3, 0xf0, 0x23, 0xed, 0x37, 0x56, 0xd4,
- 0x2c, 0x56, 0x2b, 0x8c, 0x12, 0xb1, 0x81, 0xa6, 0xb1, 0x5a, 0x61, 0x94, 0x60, 0x86, 0x41, 0x2e,
- 0x40, 0xfa, 0xa2, 0xbb, 0x88, 0x1e, 0x2d, 0x5e, 0x85, 0xed, 0xc4, 0xf3, 0xe7, 0xbd, 0x20, 0x89,
- 0x93, 0x68, 0x7e, 0x2d, 0x48, 0xae, 0x45, 0xfc, 0x6c, 0xa0, 0x45, 0xb7, 0x29, 0x5e, 0x58, 0xe3,
- 0x2b, 0xc3, 0x2b, 0x58, 0x1d, 0x83, 0xe6, 0x7d, 0xcf, 0x55, 0x01, 0xc7, 0x8a, 0xc2, 0x7e, 0x81,
- 0xc9, 0x64, 0xd6, 0x41, 0xc7, 0x0b, 0x3c, 0xfb, 0xee, 0x88, 0xea, 0x5a, 0x66, 0xec, 0xad, 0xe9,
- 0xe1, 0x6d, 0xdd, 0x45, 0x20, 0xad, 0x58, 0x77, 0x25, 0x4e, 0x63, 0xe0, 0xd0, 0xe7, 0x3a, 0xae,
- 0x01, 0x9f, 0xee, 0x21, 0x4b, 0x8f, 0x71, 0xf1, 0xc7, 0x32, 0xf3, 0xb1, 0x0c, 0x66, 0x6b, 0xf5,
- 0x6c, 0xb2, 0xf1, 0x65, 0x89, 0xc0, 0x29, 0x0d, 0x5a, 0x10, 0x27, 0x4b, 0x6e, 0x66, 0x79, 0x20,
- 0x73, 0xb2, 0x94, 0x9f, 0xaf, 0x1d, 0x2d, 0x9f, 0x81, 0x51, 0xf5, 0x80, 0x4b, 0x9d, 0xbf, 0x83,
- 0x51, 0xe1, 0xba, 0xd4, 0x4a, 0x0a, 0xc6, 0x3a, 0x0d, 0xda, 0x80, 0xc9, 0x98, 0xbf, 0x2e, 0x23,
- 0x23, 0x1e, 0x84, 0xdd, 0xe0, 0x89, 0xcc, 0xdb, 0xf1, 0x12, 0x7d, 0xc4, 0x40, 0x7c, 0xb1, 0xca,
- 0x18, 0x89, 0x2c, 0x0b, 0xf4, 0x0a, 0x4c, 0xf8, 0xfa, 0x2b, 0x9b, 0x75, 0x61, 0x56, 0x50, 0xae,
- 0x5c, 0xc6, 0x1b, 0x9c, 0x75, 0x9c, 0xa1, 0xa6, 0x4a, 0x80, 0x0e, 0x11, 0x09, 0x74, 0x9c, 0x60,
- 0x9b, 0xc4, 0xe2, 0xf9, 0x09, 0xa6, 0x04, 0x5c, 0x29, 0xa0, 0xc1, 0x85, 0xa5, 0xd1, 0x8b, 0x30,
- 0x26, 0x3f, 0x5f, 0x8b, 0x00, 0x4a, 0x1d, 0x06, 0x35, 0x1c, 0x36, 0x28, 0xd1, 0x4d, 0x38, 0x2d,
- 0xff, 0x6f, 0x44, 0xce, 0xd6, 0x96, 0xd7, 0x14, 0x01, 0x58, 0xa3, 0x8c, 0xc5, 0xa2, 0xf4, 0x9e,
- 0x5e, 0xc9, 0x23, 0x3a, 0x3a, 0x9c, 0x3b, 0x27, 0x7a, 0x2d, 0x17, 0xcf, 0x06, 0x31, 0x9f, 0x3f,
- 0x5a, 0x87, 0x53, 0x3b, 0xc4, 0xf1, 0x93, 0x9d, 0xe5, 0x1d, 0xd2, 0xdc, 0x95, 0x8b, 0x88, 0xc5,
- 0x15, 0x69, 0x6e, 0x76, 0x97, 0x3a, 0x49, 0x70, 0x5e, 0x39, 0xf4, 0x16, 0x54, 0x5b, 0xed, 0x4d,
- 0xdf, 0x8b, 0x77, 0xae, 0x86, 0x09, 0xbb, 0xb1, 0x54, 0xef, 0x9f, 0x88, 0x00, 0x24, 0x15, 0x53,
- 0x55, 0x2f, 0xa0, 0xc3, 0x85, 0x1c, 0xd0, 0x7b, 0x70, 0x3a, 0x33, 0x19, 0xf8, 0x93, 0x3a, 0x22,
- 0x50, 0xe9, 0xf1, 0xfc, 0xe5, 0x94, 0x53, 0x80, 0x87, 0xc5, 0xe5, 0xa2, 0x70, 0x7e, 0x15, 0xef,
- 0xef, 0x1e, 0xfb, 0x5d, 0x5a, 0x58, 0xd3, 0x6e, 0xd0, 0xe7, 0x61, 0x4c, 0x9f, 0x45, 0x62, 0x83,
- 0x79, 0xb4, 0xd7, 0x8b, 0xb2, 0x42, 0x37, 0x52, 0x33, 0x4a, 0xc7, 0x61, 0x83, 0xa3, 0x4d, 0x20,
- 0xff, 0xfb, 0xd0, 0x15, 0x18, 0x69, 0xfa, 0x1e, 0x09, 0x92, 0xb5, 0x7a, 0xb7, 0xc0, 0xd9, 0x65,
- 0x41, 0x23, 0x3a, 0x4c, 0xe4, 0x6f, 0xe2, 0x30, 0xac, 0x38, 0xd8, 0xbf, 0x57, 0x82, 0xb9, 0x1e,
- 0x29, 0xbc, 0x32, 0x36, 0x40, 0xab, 0x2f, 0x1b, 0xe0, 0xa2, 0x7c, 0xcd, 0xe5, 0x6a, 0xe6, 0xfc,
- 0x99, 0x79, 0xa9, 0x25, 0x3d, 0x85, 0x66, 0xe9, 0xfb, 0x76, 0x7f, 0xd3, 0xcd, 0x88, 0x03, 0x3d,
- 0xbd, 0x00, 0xeb, 0xba, 0x3d, 0x78, 0xb0, 0x7f, 0x8d, 0xbe, 0xd0, 0x14, 0x6c, 0x7f, 0xab, 0x04,
- 0xa7, 0x55, 0x17, 0xfe, 0xe4, 0x76, 0xdc, 0xf5, 0xce, 0x8e, 0xbb, 0x0b, 0x86, 0x74, 0xfb, 0x1a,
- 0x0c, 0x35, 0x0e, 0xe2, 0x66, 0xe2, 0xf7, 0xa1, 0x00, 0x3d, 0x62, 0x2c, 0xd0, 0x74, 0x9b, 0x66,
- 0x0f, 0xb2, 0x89, 0xf5, 0x6a, 0xff, 0x25, 0x0b, 0x26, 0x37, 0x96, 0xeb, 0x8d, 0xb0, 0xb9, 0x4b,
- 0x92, 0x45, 0x6e, 0x26, 0xc2, 0x42, 0xff, 0xb1, 0xee, 0x50, 0xaf, 0xc9, 0xd3, 0x98, 0xce, 0xc1,
- 0xc0, 0x4e, 0x18, 0x27, 0xd9, 0xcb, 0x92, 0x4b, 0x61, 0x9c, 0x60, 0x86, 0xb1, 0xff, 0xc8, 0x82,
- 0x41, 0xf6, 0x06, 0x59, 0xaf, 0xb7, 0xea, 0xfa, 0xf9, 0x2e, 0xf4, 0x3c, 0x0c, 0x91, 0xad, 0x2d,
- 0xd2, 0x4c, 0xc4, 0xa8, 0xca, 0x88, 0x9c, 0xa1, 0x15, 0x06, 0xa5, 0x9b, 0x3e, 0xab, 0x8c, 0xff,
- 0xc5, 0x82, 0x18, 0x7d, 0x0e, 0x2a, 0x89, 0xb7, 0x47, 0x16, 0x5d, 0x57, 0xdc, 0x53, 0x1c, 0xcf,
- 0x25, 0x4d, 0x29, 0x21, 0x1b, 0x92, 0x09, 0x4e, 0xf9, 0xd9, 0x3f, 0x5f, 0x02, 0x48, 0x23, 0xf7,
- 0x7a, 0x7d, 0xe6, 0x52, 0xc7, 0x93, 0x7c, 0x8f, 0xe6, 0x3c, 0xc9, 0x87, 0x52, 0x86, 0x39, 0x0f,
- 0xf2, 0xa9, 0xae, 0x2a, 0xf7, 0xd5, 0x55, 0x03, 0xc7, 0xe9, 0xaa, 0x65, 0x98, 0x4e, 0x23, 0x0f,
- 0xcd, 0x30, 0x6c, 0x96, 0xae, 0x77, 0x23, 0x8b, 0xc4, 0x9d, 0xf4, 0xf6, 0x97, 0x2d, 0x10, 0x6e,
- 0xca, 0x7d, 0x4c, 0xe8, 0x37, 0xe5, 0xeb, 0x59, 0x46, 0x5e, 0xc1, 0x73, 0xc5, 0x7e, 0xdb, 0x22,
- 0x9b, 0xa0, 0xda, 0x40, 0x8c, 0x1c, 0x82, 0x06, 0x2f, 0xfb, 0xaf, 0x97, 0x60, 0x94, 0xa3, 0x59,
- 0xce, 0xba, 0x3e, 0x5a, 0x73, 0xac, 0x64, 0xcf, 0xec, 0x61, 0x29, 0xca, 0x58, 0xe5, 0x04, 0xd6,
- 0x1f, 0x96, 0x92, 0x08, 0x9c, 0xd2, 0xa0, 0xc7, 0x61, 0x38, 0x6e, 0x6f, 0x32, 0xf2, 0x8c, 0xa7,
- 0x72, 0x83, 0x83, 0xb1, 0xc4, 0xa3, 0xcf, 0xc2, 0x14, 0x2f, 0x17, 0x85, 0x2d, 0x67, 0x9b, 0xdb,
- 0x77, 0x06, 0x55, 0x9c, 0xca, 0xd4, 0x7a, 0x06, 0x77, 0x74, 0x38, 0x37, 0x93, 0x85, 0x31, 0xcb,
- 0x60, 0x07, 0x17, 0x3a, 0x63, 0xa7, 0xb2, 0x2e, 0xf0, 0xe8, 0x12, 0x0c, 0x71, 0x81, 0x24, 0x04,
- 0x44, 0x97, 0xfb, 0x1e, 0xcd, 0x71, 0x1e, 0xf8, 0x1b, 0xeb, 0x4c, 0x90, 0x89, 0xf2, 0xe8, 0x2d,
- 0x18, 0x75, 0xc3, 0x9b, 0xc1, 0x4d, 0x27, 0x72, 0x17, 0xeb, 0x6b, 0x62, 0x3c, 0x73, 0xf5, 0x9a,
- 0x5a, 0x4a, 0xa6, 0x3b, 0xe3, 0x33, 0xdb, 0x66, 0x8a, 0xc2, 0x3a, 0x3b, 0xb4, 0xc1, 0xd2, 0xac,
- 0xf0, 0x97, 0x5f, 0xbb, 0xb9, 0xf6, 0xa8, 0xc7, 0x62, 0x35, 0xce, 0xe3, 0x22, 0x17, 0x8b, 0x78,
- 0x37, 0x36, 0x65, 0x64, 0x7f, 0xf1, 0x14, 0x18, 0xf3, 0xc8, 0x48, 0xf6, 0x6c, 0xdd, 0xa5, 0x64,
- 0xcf, 0x18, 0x46, 0xc8, 0x5e, 0x2b, 0x39, 0xa8, 0x79, 0x51, 0xb7, 0xec, 0xfb, 0x2b, 0x82, 0xa6,
- 0x93, 0xa7, 0xc4, 0x60, 0xc5, 0x27, 0x3f, 0x23, 0x77, 0xf9, 0x03, 0xcc, 0xc8, 0x3d, 0x70, 0x82,
- 0x19, 0xb9, 0xaf, 0xc2, 0xf0, 0xb6, 0x97, 0x60, 0xd2, 0x0a, 0xc5, 0x66, 0x9c, 0x3b, 0x13, 0x2e,
- 0x72, 0x92, 0xce, 0xbc, 0xb1, 0x02, 0x81, 0x25, 0x13, 0xf4, 0xaa, 0x5a, 0x03, 0x43, 0xc5, 0xba,
- 0x6c, 0xe7, 0xd5, 0x40, 0xee, 0x2a, 0x10, 0x19, 0xb8, 0x87, 0xef, 0x34, 0x03, 0xb7, 0xca, 0xa0,
- 0x3d, 0xf2, 0xfe, 0x32, 0x68, 0x1b, 0x19, 0xc6, 0x2b, 0x77, 0x2f, 0xc3, 0xf8, 0x97, 0x2d, 0x38,
- 0xdd, 0xca, 0x4b, 0xb6, 0x2f, 0x72, 0x61, 0x3f, 0xdf, 0xf7, 0xa3, 0x03, 0x46, 0x85, 0xec, 0x50,
- 0x93, 0x4b, 0x86, 0xf3, 0xab, 0x93, 0xa9, 0xca, 0x47, 0xef, 0x34, 0x55, 0xf9, 0xbd, 0x49, 0x9a,
- 0x9d, 0x26, 0x2e, 0x1f, 0x7f, 0xdf, 0x89, 0xcb, 0x5f, 0x55, 0x89, 0xcb, 0xbb, 0x24, 0xb3, 0xe0,
- 0x69, 0xc9, 0x7b, 0xa6, 0x2b, 0xd7, 0x52, 0x8e, 0x4f, 0xde, 0x8d, 0x94, 0xe3, 0x6f, 0x9b, 0xc2,
- 0x9e, 0xe7, 0xbf, 0x7e, 0xb2, 0x87, 0xb0, 0x37, 0xf8, 0x76, 0x17, 0xf7, 0x3c, 0xbd, 0xfa, 0xf4,
- 0x1d, 0xa5, 0x57, 0xbf, 0xa1, 0x27, 0x2e, 0x47, 0x3d, 0x32, 0x73, 0x53, 0xa2, 0x3e, 0xd3, 0x95,
- 0xdf, 0xd0, 0xb7, 0xa0, 0x53, 0xc5, 0x7c, 0xd5, 0x4e, 0xd3, 0xc9, 0x37, 0x6f, 0x13, 0xea, 0x4c,
- 0x83, 0x3e, 0x73, 0x32, 0x69, 0xd0, 0x4f, 0xdf, 0xf5, 0x34, 0xe8, 0xf7, 0x9d, 0x40, 0x1a, 0xf4,
- 0xfb, 0x3f, 0xd0, 0x34, 0xe8, 0xd5, 0x7b, 0x9b, 0x06, 0xfd, 0xcc, 0xdd, 0x48, 0x83, 0x7e, 0x03,
- 0x2a, 0x2d, 0x19, 0x25, 0x59, 0x9d, 0x2d, 0x1e, 0x92, 0xdc, 0x50, 0x4a, 0x3e, 0x24, 0x0a, 0x85,
- 0x53, 0x56, 0x94, 0x6f, 0x9a, 0x16, 0xfd, 0x81, 0x2e, 0x66, 0xab, 0x3c, 0x83, 0x40, 0x97, 0x64,
- 0xe8, 0x7f, 0xb9, 0x04, 0x67, 0xbb, 0xcf, 0xeb, 0xd4, 0x9a, 0x50, 0x4f, 0xad, 0xdf, 0x19, 0x6b,
- 0x02, 0x53, 0xba, 0x34, 0xaa, 0xbe, 0x43, 0xc9, 0x2f, 0xc2, 0xb4, 0x72, 0x16, 0xf3, 0xbd, 0xe6,
- 0x81, 0xf6, 0x92, 0x91, 0x8a, 0x3f, 0x68, 0x64, 0x09, 0x70, 0x67, 0x19, 0xb4, 0x08, 0x93, 0x06,
- 0x70, 0xad, 0x26, 0x94, 0x7d, 0x65, 0xbe, 0x68, 0x98, 0x68, 0x9c, 0xa5, 0xb7, 0xbf, 0x6e, 0xc1,
- 0xfd, 0x05, 0xb9, 0x51, 0xfb, 0x8e, 0x94, 0xde, 0x82, 0xc9, 0x96, 0x59, 0xb4, 0x47, 0x42, 0x05,
- 0x23, 0x03, 0xab, 0x6a, 0x6b, 0x06, 0x81, 0xb3, 0x4c, 0x97, 0xce, 0x7f, 0xfb, 0x07, 0x67, 0x3f,
- 0xf2, 0x07, 0x3f, 0x38, 0xfb, 0x91, 0xef, 0xff, 0xe0, 0xec, 0x47, 0xfe, 0xff, 0xdb, 0x67, 0xad,
- 0x6f, 0xdf, 0x3e, 0x6b, 0xfd, 0xc1, 0xed, 0xb3, 0xd6, 0xf7, 0x6f, 0x9f, 0xb5, 0xfe, 0xf8, 0xf6,
- 0x59, 0xeb, 0xe7, 0x7f, 0x78, 0xf6, 0x23, 0x6f, 0x96, 0xf6, 0x9f, 0xf9, 0xbf, 0x01, 0x00, 0x00,
- 0xff, 0xff, 0x38, 0x93, 0x28, 0xc3, 0x1e, 0xcf, 0x00, 0x00,
+ 0xd6, 0xe9, 0xd0, 0x0e, 0x8c, 0xa5, 0x57, 0x56, 0x51, 0xcc, 0x32, 0xd4, 0x8c, 0x5e, 0xbc, 0xd8,
+ 0xdf, 0xc7, 0xad, 0x69, 0x25, 0xf9, 0xc9, 0x41, 0x87, 0x60, 0x83, 0xf3, 0xec, 0x8f, 0xc1, 0xa8,
+ 0x36, 0xb0, 0xc7, 0xf1, 0xca, 0x9e, 0x7d, 0x15, 0xa6, 0xb2, 0x43, 0x77, 0x2c, 0xaf, 0xee, 0xff,
+ 0x55, 0x82, 0xc9, 0x9c, 0x9b, 0x2b, 0x96, 0xea, 0x39, 0x23, 0x50, 0xd3, 0xcc, 0xce, 0xa6, 0x58,
+ 0x2c, 0xf5, 0x21, 0x16, 0xa5, 0x8c, 0x2e, 0x17, 0xca, 0x68, 0x21, 0x0a, 0x07, 0x3e, 0x88, 0x28,
+ 0x34, 0x77, 0x9f, 0xc1, 0xbe, 0x76, 0x9f, 0x13, 0x10, 0x9f, 0xc6, 0x06, 0x36, 0xdc, 0xc7, 0x06,
+ 0xf6, 0xe5, 0x12, 0x4c, 0x65, 0xf3, 0x09, 0x9f, 0xc2, 0x7d, 0xc7, 0x6b, 0xc6, 0x7d, 0x47, 0x7e,
+ 0xe2, 0xf4, 0x6c, 0x96, 0xe3, 0xa2, 0xbb, 0x0f, 0x9c, 0xb9, 0xfb, 0x78, 0xb2, 0x2f, 0x6e, 0xdd,
+ 0xef, 0x41, 0xfe, 0x6e, 0x09, 0xce, 0x66, 0x8b, 0x2c, 0xfb, 0x8e, 0xb7, 0x77, 0x0a, 0x7d, 0x73,
+ 0xdd, 0xe8, 0x9b, 0x67, 0xfa, 0xf9, 0x1a, 0xd6, 0xb4, 0xc2, 0x0e, 0x7a, 0x23, 0xd3, 0x41, 0x0b,
+ 0xfd, 0xb3, 0xec, 0xde, 0x4b, 0xdf, 0x29, 0xc3, 0xb9, 0xdc, 0x72, 0xe9, 0x75, 0xc1, 0xaa, 0x71,
+ 0x5d, 0x70, 0x31, 0x73, 0x5d, 0x60, 0x77, 0x2f, 0x7d, 0x32, 0xf7, 0x07, 0x22, 0xf2, 0x8c, 0x65,
+ 0x4f, 0xbb, 0xcb, 0xbb, 0x03, 0x23, 0xf2, 0x4c, 0x31, 0xc2, 0x26, 0xdf, 0x1f, 0xa5, 0x3b, 0x83,
+ 0xdf, 0xb3, 0xe0, 0x81, 0xdc, 0xb1, 0x39, 0x05, 0xbb, 0xfa, 0x35, 0xd3, 0xae, 0xfe, 0x44, 0xdf,
+ 0xb3, 0xb5, 0xc0, 0xd0, 0xfe, 0xd5, 0x72, 0xc1, 0xb7, 0x30, 0xcb, 0xe4, 0x75, 0x18, 0x75, 0x9a,
+ 0x4d, 0x12, 0xc7, 0xeb, 0xa1, 0xab, 0x92, 0x95, 0x3d, 0xc3, 0xb4, 0x8d, 0x14, 0x7c, 0x74, 0x38,
+ 0x37, 0x9b, 0x65, 0x91, 0xa2, 0xb1, 0xce, 0xc1, 0x4c, 0x80, 0x58, 0x3a, 0xd1, 0x04, 0x88, 0x17,
+ 0x01, 0xf6, 0x95, 0xbd, 0x22, 0x6b, 0xe6, 0xd4, 0x2c, 0x19, 0x1a, 0x15, 0xfa, 0x29, 0x76, 0x0a,
+ 0xe0, 0xce, 0x40, 0x7c, 0x2a, 0x3e, 0xd7, 0xe7, 0x58, 0xe9, 0x8e, 0x45, 0x3c, 0xc4, 0x59, 0x99,
+ 0x84, 0x15, 0x4b, 0xf4, 0x13, 0x30, 0x15, 0xf3, 0x0c, 0x1a, 0xcb, 0xbe, 0x13, 0xb3, 0xc0, 0x1a,
+ 0x31, 0x0b, 0x59, 0xdc, 0x72, 0x23, 0x83, 0xc3, 0x1d, 0xd4, 0xf6, 0x97, 0x07, 0xe0, 0xc1, 0x2e,
+ 0xc2, 0x07, 0x2d, 0x9a, 0x97, 0xf7, 0x4f, 0x65, 0xed, 0x76, 0xb3, 0xb9, 0x85, 0x0d, 0x43, 0x5e,
+ 0x66, 0x8c, 0x4b, 0x1f, 0x78, 0x8c, 0xbf, 0x64, 0x69, 0x16, 0x55, 0xee, 0xe2, 0xfb, 0x99, 0x63,
+ 0x0a, 0xd5, 0x13, 0x34, 0xb1, 0x6e, 0xe5, 0xd8, 0x29, 0x2f, 0xf6, 0xdd, 0x9c, 0xbe, 0x0d, 0x97,
+ 0xa7, 0x7b, 0xd5, 0xf3, 0x79, 0x0b, 0x1e, 0xc9, 0x6d, 0xaf, 0xe1, 0x6c, 0xb4, 0x00, 0x95, 0x26,
+ 0x05, 0x6a, 0x41, 0x76, 0x69, 0xa8, 0xab, 0x44, 0xe0, 0x94, 0xc6, 0xf0, 0x29, 0x2a, 0xf5, 0xf4,
+ 0x29, 0xfa, 0x97, 0x16, 0xcc, 0x64, 0x1b, 0x71, 0x0a, 0x12, 0x70, 0xcd, 0x94, 0x80, 0x1f, 0xef,
+ 0x67, 0x2c, 0x0b, 0x84, 0xdf, 0x1f, 0x4f, 0xc0, 0x7d, 0x05, 0xef, 0x45, 0xec, 0xc3, 0xf4, 0x76,
+ 0x93, 0x98, 0xe1, 0x8b, 0xe2, 0x63, 0x72, 0x23, 0x3d, 0xbb, 0xc6, 0x3a, 0xf2, 0x83, 0x6c, 0x07,
+ 0x09, 0xee, 0xac, 0x02, 0x7d, 0xde, 0x82, 0x19, 0xe7, 0x56, 0xdc, 0xf1, 0x7e, 0x93, 0x98, 0x33,
+ 0xcf, 0xe7, 0xda, 0x57, 0x7b, 0xbc, 0xf7, 0xc4, 0x42, 0x8c, 0x66, 0xf2, 0xa8, 0x70, 0x6e, 0x5d,
+ 0x08, 0x8b, 0xbc, 0x90, 0x54, 0x4f, 0xee, 0x12, 0x60, 0x9b, 0x17, 0xfe, 0xc4, 0x65, 0xa1, 0xc4,
+ 0x60, 0xc5, 0x07, 0xdd, 0x84, 0xca, 0xb6, 0x8c, 0x49, 0x14, 0xb2, 0x36, 0x77, 0xf3, 0xca, 0x0d,
+ 0x5c, 0xe4, 0x31, 0x1f, 0x0a, 0x85, 0x53, 0x56, 0xe8, 0x55, 0x28, 0x07, 0x5b, 0x71, 0xb7, 0x07,
+ 0x33, 0x32, 0x3e, 0x78, 0x3c, 0x52, 0xfa, 0xda, 0x6a, 0x03, 0xd3, 0x82, 0xb4, 0x7c, 0xb4, 0xe9,
+ 0x8a, 0x2b, 0x81, 0xdc, 0xf2, 0x78, 0xa9, 0xd6, 0x59, 0x1e, 0x2f, 0xd5, 0x30, 0x2d, 0x88, 0x56,
+ 0x61, 0x90, 0x85, 0x38, 0x09, 0x7b, 0x7f, 0x6e, 0xa6, 0x87, 0x8e, 0xf0, 0x2d, 0x1e, 0x3a, 0xcd,
+ 0xc0, 0x98, 0x17, 0x47, 0xaf, 0xc1, 0x50, 0x93, 0xbd, 0x1f, 0x21, 0x8c, 0x33, 0xf9, 0xd9, 0x4b,
+ 0x3a, 0x5e, 0x98, 0xe0, 0xb7, 0x9c, 0x1c, 0x8e, 0x05, 0x07, 0xb4, 0x01, 0x43, 0x4d, 0xd2, 0xda,
+ 0xd9, 0x8a, 0x85, 0xcd, 0xe5, 0x93, 0xb9, 0xbc, 0xba, 0x3c, 0x97, 0x22, 0xb8, 0x32, 0x0a, 0x2c,
+ 0x78, 0xa1, 0x4f, 0x43, 0x69, 0xab, 0x29, 0xa2, 0x9d, 0x72, 0xed, 0xfc, 0x66, 0x38, 0xfb, 0xd2,
+ 0xd0, 0x9d, 0xc3, 0xb9, 0xd2, 0xea, 0x32, 0x2e, 0x6d, 0x35, 0xd1, 0x35, 0x18, 0xde, 0xe2, 0x31,
+ 0xc9, 0x22, 0xcf, 0xef, 0xe3, 0xf9, 0xe1, 0xd2, 0x1d, 0x61, 0xcb, 0x3c, 0x4a, 0x47, 0x20, 0xb0,
+ 0x64, 0x82, 0x36, 0x00, 0xb6, 0x54, 0x6c, 0xb5, 0x48, 0xf4, 0xfb, 0xf1, 0x7e, 0x22, 0xb0, 0x85,
+ 0x01, 0x42, 0x41, 0xb1, 0xc6, 0x07, 0x7d, 0x0e, 0x2a, 0x8e, 0x7c, 0x11, 0x88, 0x25, 0xf9, 0x35,
+ 0xf5, 0x81, 0x74, 0xc1, 0x75, 0x7f, 0x2c, 0x89, 0xcf, 0x56, 0x45, 0x84, 0x53, 0xa6, 0x68, 0x17,
+ 0xc6, 0xf7, 0xe3, 0xd6, 0x0e, 0x91, 0x0b, 0x94, 0x65, 0xfe, 0x2d, 0xd8, 0x90, 0x6e, 0x0a, 0x42,
+ 0x2f, 0x4a, 0xda, 0x8e, 0xdf, 0x21, 0x53, 0x58, 0x48, 0xd7, 0x4d, 0x9d, 0x19, 0x36, 0x79, 0xd3,
+ 0x4e, 0x7f, 0xaf, 0x1d, 0x6e, 0x1e, 0x24, 0x44, 0xe4, 0x03, 0xce, 0xed, 0xf4, 0xd7, 0x39, 0x49,
+ 0x67, 0xa7, 0x0b, 0x04, 0x96, 0x4c, 0xe8, 0x12, 0x76, 0xe4, 0x6b, 0x5b, 0xc2, 0xca, 0xf2, 0x44,
+ 0x61, 0xf7, 0x74, 0xb4, 0x37, 0xed, 0x14, 0x26, 0xfb, 0x52, 0x56, 0x4c, 0xe6, 0xb5, 0x76, 0xc2,
+ 0x24, 0x0c, 0x32, 0xf2, 0x76, 0xba, 0x58, 0xe6, 0xd5, 0x73, 0xe8, 0x3b, 0x65, 0x5e, 0x1e, 0x15,
+ 0xce, 0xad, 0x0b, 0xb9, 0x30, 0xd1, 0x0a, 0xa3, 0xe4, 0x56, 0x18, 0xc9, 0x59, 0x85, 0xba, 0x1c,
+ 0xbf, 0x0d, 0x4a, 0x51, 0x23, 0xf3, 0xd0, 0x36, 0x31, 0x38, 0xc3, 0x93, 0x0e, 0x49, 0xdc, 0x74,
+ 0x7c, 0xb2, 0x76, 0xbd, 0x7a, 0xa6, 0x78, 0x48, 0x1a, 0x9c, 0xa4, 0x73, 0x48, 0x04, 0x02, 0x4b,
+ 0x26, 0x54, 0xfa, 0xb0, 0xd4, 0xf2, 0x2c, 0x81, 0x71, 0x81, 0xf4, 0xe9, 0xf0, 0x5d, 0xe6, 0xd2,
+ 0x87, 0x81, 0x31, 0x2f, 0x4e, 0x67, 0xbe, 0xd0, 0x3d, 0xc3, 0xb8, 0x7a, 0xb6, 0x78, 0xe6, 0x0b,
+ 0x95, 0xf5, 0x7a, 0xa3, 0xdb, 0xcc, 0x57, 0x44, 0x38, 0x65, 0x6a, 0x7f, 0x63, 0xa8, 0x53, 0x5b,
+ 0x60, 0x67, 0x8c, 0x2f, 0x58, 0x1d, 0x17, 0xf0, 0x9f, 0xea, 0xd7, 0xe4, 0x71, 0x82, 0x7a, 0xe2,
+ 0xe7, 0x2d, 0xb8, 0xaf, 0x95, 0xfb, 0x51, 0x62, 0xeb, 0xed, 0xcf, 0x72, 0xc2, 0xbb, 0x41, 0xa5,
+ 0x06, 0xcf, 0xc7, 0xe3, 0x82, 0x9a, 0xb2, 0xba, 0x78, 0xf9, 0x03, 0xeb, 0xe2, 0xeb, 0x30, 0xc2,
+ 0xd4, 0xbb, 0x34, 0x15, 0x51, 0x5f, 0x6e, 0x6c, 0x6c, 0x13, 0x5f, 0x16, 0x05, 0xb1, 0x62, 0x81,
+ 0x7e, 0xce, 0x82, 0x87, 0xb3, 0x4d, 0xc7, 0x84, 0xa1, 0x45, 0x5a, 0x4b, 0x7e, 0xbc, 0x59, 0x15,
+ 0xdf, 0xff, 0x70, 0xbd, 0x1b, 0xf1, 0x51, 0x2f, 0x02, 0xdc, 0xbd, 0x32, 0x54, 0xcb, 0x39, 0x5f,
+ 0x0d, 0x99, 0xf7, 0x73, 0xbd, 0xcf, 0x58, 0xe8, 0x79, 0x18, 0xdb, 0x0b, 0xdb, 0x81, 0x8c, 0x31,
+ 0x11, 0x11, 0xc4, 0xcc, 0x16, 0xbc, 0xae, 0xc1, 0xb1, 0x41, 0x75, 0xba, 0xfa, 0xfe, 0xd7, 0xac,
+ 0x1c, 0x45, 0x95, 0x9f, 0x00, 0x5f, 0x31, 0x4f, 0x80, 0x8f, 0x65, 0x4f, 0x80, 0x1d, 0x96, 0x3a,
+ 0xe3, 0xf0, 0xd7, 0x7f, 0xba, 0xde, 0x7e, 0x73, 0x35, 0xd9, 0x3e, 0x9c, 0xef, 0x25, 0x9c, 0x99,
+ 0x2b, 0x9f, 0xab, 0xee, 0xb8, 0x53, 0x57, 0x3e, 0x77, 0xad, 0x86, 0x19, 0xa6, 0xdf, 0xac, 0x1f,
+ 0xf6, 0x7f, 0xb3, 0xa0, 0x5c, 0x0f, 0xdd, 0x53, 0xb0, 0x3c, 0x7e, 0xc6, 0xb0, 0x3c, 0x3e, 0x58,
+ 0xf0, 0x76, 0x67, 0xa1, 0x9d, 0x71, 0x25, 0x63, 0x67, 0x7c, 0xb8, 0x88, 0x41, 0x77, 0xab, 0xe2,
+ 0xdf, 0x2b, 0x83, 0xfe, 0xd2, 0x28, 0xfa, 0xd7, 0x77, 0xe3, 0x13, 0x5e, 0xee, 0xf6, 0xf8, 0xa8,
+ 0xe0, 0xcc, 0x3c, 0x00, 0x65, 0xb8, 0xe9, 0x0f, 0x99, 0x6b, 0xf8, 0x1b, 0xc4, 0xdb, 0xde, 0x49,
+ 0x88, 0x9b, 0xfd, 0x9c, 0xd3, 0x73, 0x0d, 0xff, 0x2f, 0x16, 0x4c, 0x66, 0x6a, 0x47, 0x7e, 0x5e,
+ 0xec, 0xda, 0x5d, 0x5a, 0x9c, 0xa6, 0x7b, 0x06, 0xbb, 0xcd, 0x03, 0xa8, 0x6b, 0x1d, 0x69, 0xd5,
+ 0x61, 0xba, 0xaf, 0xba, 0xf7, 0x89, 0xb1, 0x46, 0x81, 0x5e, 0x80, 0xd1, 0x24, 0x6c, 0x85, 0x7e,
+ 0xb8, 0x7d, 0x70, 0x85, 0xc8, 0x3c, 0x33, 0xea, 0xf2, 0x6d, 0x23, 0x45, 0x61, 0x9d, 0xce, 0xfe,
+ 0x95, 0x32, 0x64, 0x5f, 0xa7, 0xfd, 0xf3, 0x39, 0xf9, 0xd1, 0x9c, 0x93, 0xdf, 0xb1, 0x60, 0x8a,
+ 0xd6, 0xce, 0xbc, 0xab, 0xa4, 0x53, 0xb5, 0x7a, 0xd7, 0xc3, 0xea, 0xf2, 0xae, 0xc7, 0x63, 0x54,
+ 0x76, 0xb9, 0x61, 0x3b, 0x11, 0x56, 0x21, 0x4d, 0x38, 0x51, 0x28, 0x16, 0x58, 0x41, 0x47, 0xa2,
+ 0x48, 0x44, 0xa4, 0xe9, 0x74, 0x24, 0x8a, 0xb0, 0xc0, 0xca, 0x67, 0x3f, 0x06, 0x0a, 0x9e, 0xfd,
+ 0x60, 0x29, 0xda, 0x84, 0x47, 0x8f, 0x50, 0x28, 0xb4, 0x14, 0x6d, 0xd2, 0xd5, 0x27, 0xa5, 0xb1,
+ 0xbf, 0x5e, 0x86, 0xb1, 0x7a, 0xe8, 0xa6, 0x17, 0x2b, 0xcf, 0x1b, 0x17, 0x2b, 0xe7, 0x33, 0x17,
+ 0x2b, 0x53, 0x3a, 0xed, 0x9f, 0x5f, 0xa3, 0x7c, 0x58, 0xd7, 0x28, 0x7f, 0x66, 0xc1, 0x44, 0x3d,
+ 0x74, 0xe9, 0x04, 0xfd, 0x51, 0x9a, 0x8d, 0x7a, 0x02, 0xc0, 0xa1, 0x2e, 0x09, 0x00, 0xff, 0xbe,
+ 0x05, 0xc3, 0xf5, 0xd0, 0x3d, 0x05, 0x8b, 0xe9, 0x2b, 0xa6, 0xc5, 0xf4, 0xfe, 0x02, 0x29, 0x5b,
+ 0x60, 0x24, 0xfd, 0x8d, 0x32, 0x8c, 0xd3, 0x76, 0x86, 0xdb, 0x72, 0x94, 0x8c, 0x1e, 0xb1, 0xfa,
+ 0xe8, 0x11, 0xaa, 0xcc, 0x85, 0xbe, 0x1f, 0xde, 0xca, 0x8e, 0xd8, 0x2a, 0x83, 0x62, 0x81, 0x45,
+ 0x4f, 0xc3, 0x48, 0x2b, 0x22, 0xfb, 0x5e, 0xd8, 0x8e, 0xb3, 0x31, 0xad, 0x75, 0x01, 0xc7, 0x8a,
+ 0x82, 0xea, 0xed, 0xb1, 0x17, 0x34, 0x89, 0xf4, 0xf2, 0x19, 0x60, 0x5e, 0x3e, 0x3c, 0x87, 0xaa,
+ 0x06, 0xc7, 0x06, 0x15, 0x7a, 0x03, 0x2a, 0xec, 0x3f, 0x5b, 0x37, 0xc7, 0x7f, 0xd5, 0x43, 0x24,
+ 0x2e, 0x17, 0x0c, 0x70, 0xca, 0x0b, 0x5d, 0x04, 0x48, 0xa4, 0x3f, 0x52, 0x2c, 0x42, 0xae, 0x95,
+ 0x46, 0xa9, 0x3c, 0x95, 0x62, 0xac, 0x51, 0xa1, 0xa7, 0xa0, 0x92, 0x38, 0x9e, 0x7f, 0xd5, 0x0b,
+ 0x48, 0x2c, 0xfc, 0xb9, 0x44, 0x5e, 0x72, 0x01, 0xc4, 0x29, 0x9e, 0xee, 0xe8, 0x2c, 0xa0, 0x9f,
+ 0xbf, 0x09, 0x34, 0xc2, 0xa8, 0xd9, 0x8e, 0x7e, 0x55, 0x41, 0xb1, 0x46, 0x61, 0xbf, 0x04, 0x67,
+ 0xeb, 0xa1, 0x5b, 0x0f, 0xa3, 0x64, 0x35, 0x8c, 0x6e, 0x39, 0x91, 0x2b, 0xc7, 0x6f, 0x4e, 0xa6,
+ 0xc8, 0xa6, 0xbb, 0xee, 0x20, 0xb7, 0x06, 0x18, 0xc9, 0xaf, 0x9f, 0x63, 0x7b, 0xfa, 0x31, 0x83,
+ 0x6f, 0xfe, 0x5d, 0x09, 0x50, 0x9d, 0x79, 0x4c, 0x19, 0x0f, 0x47, 0xbd, 0x03, 0x13, 0x31, 0xb9,
+ 0xea, 0x05, 0xed, 0xdb, 0xf2, 0x7c, 0xd5, 0x25, 0xb2, 0xa9, 0xb1, 0xa2, 0x53, 0x72, 0x8b, 0x8a,
+ 0x09, 0xc3, 0x19, 0x6e, 0xb4, 0x0b, 0xa3, 0x76, 0xb0, 0x18, 0xdf, 0x88, 0x49, 0x24, 0x1e, 0x4a,
+ 0x62, 0x5d, 0x88, 0x25, 0x10, 0xa7, 0x78, 0x3a, 0x65, 0xd8, 0x9f, 0x6b, 0x61, 0x80, 0xc3, 0x30,
+ 0x91, 0x93, 0x8c, 0x3d, 0xb5, 0xa1, 0xc1, 0xb1, 0x41, 0x85, 0x56, 0x01, 0xc5, 0xed, 0x56, 0xcb,
+ 0x67, 0xd7, 0x90, 0x8e, 0x7f, 0x29, 0x0a, 0xdb, 0x2d, 0x7e, 0x95, 0x24, 0x5e, 0xa9, 0x68, 0x74,
+ 0x60, 0x71, 0x4e, 0x09, 0x2a, 0x18, 0xb6, 0x62, 0xf6, 0x5b, 0xc4, 0xf4, 0x73, 0xdb, 0x66, 0x83,
+ 0x81, 0xb0, 0xc4, 0xd9, 0x3f, 0xc3, 0x36, 0x33, 0xf6, 0xbe, 0x4d, 0xd2, 0x8e, 0x08, 0xda, 0x83,
+ 0xf1, 0x16, 0xdb, 0xb0, 0x92, 0x28, 0xf4, 0x7d, 0x22, 0xf5, 0xc6, 0xbb, 0xf3, 0xde, 0xe2, 0xef,
+ 0x5d, 0xe8, 0xec, 0xb0, 0xc9, 0xdd, 0xfe, 0xc2, 0x24, 0x93, 0x4b, 0x0d, 0x7e, 0x68, 0x19, 0x16,
+ 0x3e, 0xd9, 0x42, 0x43, 0x9b, 0x2d, 0x7e, 0x4f, 0x2e, 0x95, 0xf4, 0xc2, 0xaf, 0x1b, 0xcb, 0xb2,
+ 0xe8, 0x75, 0x76, 0x07, 0xc7, 0x85, 0x41, 0xaf, 0x97, 0x2c, 0x39, 0x95, 0x71, 0xdd, 0x26, 0x0a,
+ 0x62, 0x8d, 0x09, 0xba, 0x0a, 0xe3, 0xe2, 0x39, 0x14, 0x61, 0x78, 0x28, 0x1b, 0xc7, 0xdf, 0x71,
+ 0xac, 0x23, 0x8f, 0xb2, 0x00, 0x6c, 0x16, 0x46, 0xdb, 0xf0, 0xb0, 0xf6, 0x78, 0x57, 0x8e, 0x07,
+ 0x21, 0x97, 0x2d, 0x8f, 0xdc, 0x39, 0x9c, 0x7b, 0x78, 0xa3, 0x1b, 0x21, 0xee, 0xce, 0x07, 0x5d,
+ 0x87, 0xb3, 0x4e, 0x33, 0xf1, 0xf6, 0x49, 0x8d, 0x38, 0xae, 0xef, 0x05, 0xc4, 0x4c, 0xf2, 0xf0,
+ 0xc0, 0x9d, 0xc3, 0xb9, 0xb3, 0x8b, 0x79, 0x04, 0x38, 0xbf, 0x1c, 0x7a, 0x05, 0x2a, 0x6e, 0x10,
+ 0x8b, 0x3e, 0x18, 0x32, 0xde, 0xa5, 0xab, 0xd4, 0xae, 0x35, 0xd4, 0xf7, 0xa7, 0x7f, 0x70, 0x5a,
+ 0x00, 0x6d, 0xc3, 0x98, 0x1e, 0xc8, 0x25, 0xde, 0x34, 0x7c, 0xa6, 0xcb, 0xd9, 0xd6, 0x88, 0x7e,
+ 0xe2, 0x56, 0x37, 0xe5, 0x9f, 0x6b, 0x04, 0x46, 0x19, 0x8c, 0xd1, 0x6b, 0x80, 0x62, 0x12, 0xed,
+ 0x7b, 0x4d, 0xb2, 0xd8, 0x64, 0x49, 0x86, 0x99, 0xad, 0x66, 0xc4, 0x08, 0x36, 0x41, 0x8d, 0x0e,
+ 0x0a, 0x9c, 0x53, 0x0a, 0x5d, 0xa6, 0x12, 0x45, 0x87, 0x0a, 0x77, 0x6a, 0xa9, 0xe6, 0x55, 0x6b,
+ 0xa4, 0x15, 0x91, 0xa6, 0x93, 0x10, 0xd7, 0xe4, 0x88, 0x33, 0xe5, 0xe8, 0x7e, 0xa3, 0xde, 0x6e,
+ 0x00, 0xd3, 0x09, 0xb8, 0xf3, 0xfd, 0x06, 0x7a, 0x42, 0xda, 0x09, 0xe3, 0xe4, 0x1a, 0x49, 0x6e,
+ 0x85, 0xd1, 0xae, 0xc8, 0xcc, 0x96, 0x26, 0x6e, 0x4c, 0x51, 0x58, 0xa7, 0xa3, 0x1a, 0x11, 0xbb,
+ 0x04, 0x5b, 0xab, 0xb1, 0x7b, 0x8a, 0x91, 0x74, 0x9d, 0x5c, 0xe6, 0x60, 0x2c, 0xf1, 0x92, 0x74,
+ 0xad, 0xbe, 0xcc, 0x6e, 0x1f, 0x32, 0xa4, 0x6b, 0xf5, 0x65, 0x2c, 0xf1, 0x88, 0x74, 0xbe, 0xf9,
+ 0x37, 0x51, 0x7c, 0x6f, 0xd4, 0x29, 0x97, 0xfb, 0x7c, 0xf6, 0x2f, 0x80, 0x29, 0xf5, 0xda, 0x20,
+ 0x4f, 0x59, 0x17, 0x57, 0x27, 0xd9, 0x24, 0xe9, 0x3f, 0xdf, 0x9d, 0xb2, 0xc5, 0xad, 0x65, 0x38,
+ 0xe1, 0x0e, 0xde, 0x46, 0xf2, 0x90, 0xa9, 0x9e, 0x6f, 0x6f, 0x2c, 0x40, 0x25, 0x6e, 0x6f, 0xba,
+ 0xe1, 0x9e, 0xe3, 0x05, 0xec, 0xb2, 0x40, 0x53, 0x44, 0x1a, 0x12, 0x81, 0x53, 0x1a, 0xb4, 0x0a,
+ 0x23, 0x8e, 0x38, 0x7c, 0x09, 0xf3, 0x7e, 0x6e, 0x36, 0x01, 0x79, 0x40, 0xe3, 0x76, 0x50, 0xf9,
+ 0x0f, 0xab, 0xb2, 0xe8, 0x65, 0x18, 0x17, 0x01, 0x6f, 0xc2, 0x57, 0xf5, 0x8c, 0x19, 0x1b, 0xd1,
+ 0xd0, 0x91, 0xd8, 0xa4, 0x45, 0x3f, 0x05, 0x13, 0x94, 0x4b, 0x2a, 0xd8, 0xaa, 0x33, 0xfd, 0x48,
+ 0x44, 0x2d, 0xa7, 0xba, 0x5e, 0x18, 0x67, 0x98, 0x21, 0x17, 0x1e, 0x72, 0xda, 0x49, 0xc8, 0x8c,
+ 0x95, 0xe6, 0xfc, 0xdf, 0x08, 0x77, 0x49, 0xc0, 0xac, 0xfb, 0x23, 0x4b, 0xe7, 0xef, 0x1c, 0xce,
+ 0x3d, 0xb4, 0xd8, 0x85, 0x0e, 0x77, 0xe5, 0x82, 0x6e, 0xc0, 0x68, 0x12, 0xfa, 0xc2, 0xc9, 0x3c,
+ 0xae, 0xde, 0x57, 0x9c, 0xfc, 0x68, 0x43, 0x91, 0xe9, 0xe6, 0x04, 0x55, 0x14, 0xeb, 0x7c, 0xd0,
+ 0x06, 0x5f, 0x63, 0x2c, 0x55, 0x27, 0x89, 0xab, 0xf7, 0x17, 0x77, 0x8c, 0xca, 0xe8, 0x69, 0x2e,
+ 0x41, 0x51, 0x12, 0xeb, 0x6c, 0xd0, 0x25, 0x98, 0x6e, 0x45, 0x5e, 0xc8, 0x26, 0xb6, 0x32, 0x14,
+ 0x57, 0x8d, 0xb4, 0x78, 0xd3, 0xf5, 0x2c, 0x01, 0xee, 0x2c, 0x83, 0x2e, 0x50, 0x05, 0x95, 0x03,
+ 0xab, 0x0f, 0xf0, 0x37, 0x59, 0xb8, 0x72, 0xca, 0x61, 0x58, 0x61, 0x67, 0x7f, 0x1c, 0xa6, 0x3b,
+ 0x24, 0xe5, 0xb1, 0x1c, 0x7e, 0xff, 0xc9, 0x20, 0x54, 0x94, 0x39, 0x10, 0x2d, 0x98, 0x56, 0xde,
+ 0x07, 0xb2, 0x56, 0xde, 0x11, 0xaa, 0xaf, 0xe9, 0x86, 0xdd, 0x8d, 0x9c, 0x27, 0xe5, 0xcf, 0x17,
+ 0x88, 0x86, 0xfe, 0xa3, 0xf3, 0x8e, 0xf1, 0xdc, 0x7e, 0x7a, 0x60, 0x1c, 0xe8, 0x7a, 0x60, 0xec,
+ 0xf3, 0x79, 0x47, 0x7a, 0x34, 0x6c, 0x85, 0xee, 0x5a, 0x3d, 0xfb, 0xde, 0x59, 0x9d, 0x02, 0x31,
+ 0xc7, 0x31, 0xe5, 0x9e, 0x6e, 0xeb, 0x4c, 0xb9, 0x1f, 0xbe, 0x4b, 0xe5, 0x5e, 0x32, 0xc0, 0x29,
+ 0x2f, 0xe4, 0xc3, 0x74, 0xd3, 0x7c, 0xaa, 0x4e, 0x45, 0xe4, 0x3d, 0xda, 0xf3, 0xd1, 0xb8, 0xb6,
+ 0xf6, 0x86, 0xcd, 0x72, 0x96, 0x0b, 0xee, 0x64, 0x8c, 0x5e, 0x86, 0x91, 0xf7, 0xc2, 0x98, 0x4d,
+ 0x3b, 0xb1, 0xb7, 0xc9, 0x18, 0xa8, 0x91, 0xd7, 0xaf, 0x37, 0x18, 0xfc, 0xe8, 0x70, 0x6e, 0xb4,
+ 0x1e, 0xba, 0xf2, 0x2f, 0x56, 0x05, 0xd0, 0x6d, 0x38, 0x6b, 0x48, 0x04, 0xd5, 0x5c, 0xe8, 0xbf,
+ 0xb9, 0x0f, 0x8b, 0xea, 0xce, 0xae, 0xe5, 0x71, 0xc2, 0xf9, 0x15, 0xd8, 0xdf, 0xe0, 0x46, 0x4f,
+ 0x61, 0x1a, 0x21, 0x71, 0xdb, 0x3f, 0x8d, 0x87, 0x2a, 0x56, 0x0c, 0xab, 0xcd, 0x5d, 0x1b, 0xd6,
+ 0x7f, 0xd7, 0x62, 0x86, 0xf5, 0x0d, 0xb2, 0xd7, 0xf2, 0x9d, 0xe4, 0x34, 0xdc, 0xbc, 0x5f, 0x87,
+ 0x91, 0x44, 0xd4, 0xd6, 0xed, 0x6d, 0x0d, 0xad, 0x51, 0xec, 0x72, 0x41, 0x6d, 0x88, 0x12, 0x8a,
+ 0x15, 0x1b, 0xfb, 0x9f, 0xf1, 0x11, 0x90, 0x98, 0x53, 0xb0, 0x2d, 0xd4, 0x4c, 0xdb, 0xc2, 0x5c,
+ 0x8f, 0x2f, 0x28, 0xb0, 0x31, 0xfc, 0x53, 0xb3, 0xdd, 0xec, 0xec, 0xf1, 0x51, 0xbf, 0xd1, 0xb1,
+ 0x7f, 0xd1, 0x82, 0x99, 0x3c, 0x47, 0x00, 0xaa, 0xc4, 0xf0, 0x93, 0x8f, 0xba, 0xe1, 0x52, 0x3d,
+ 0x78, 0x53, 0xc0, 0xb1, 0xa2, 0xe8, 0x3b, 0xbf, 0xfd, 0xf1, 0x12, 0x7e, 0x5d, 0x07, 0xf3, 0x55,
+ 0x43, 0xf4, 0x2a, 0x8f, 0xdb, 0xb0, 0xd4, 0xb3, 0x83, 0xc7, 0x8b, 0xd9, 0xb0, 0x7f, 0xb5, 0x04,
+ 0x33, 0xdc, 0x44, 0xbd, 0xb8, 0x1f, 0x7a, 0x6e, 0x3d, 0x74, 0x45, 0x14, 0xcb, 0x5b, 0x30, 0xd6,
+ 0xd2, 0x8e, 0xab, 0xdd, 0x52, 0x0e, 0xe9, 0xc7, 0xda, 0xf4, 0xd8, 0xa0, 0x43, 0xb1, 0xc1, 0x0b,
+ 0xb9, 0x30, 0x46, 0xf6, 0xbd, 0xa6, 0xb2, 0x73, 0x96, 0x8e, 0x2d, 0xd2, 0x55, 0x2d, 0x2b, 0x1a,
+ 0x1f, 0x6c, 0x70, 0xbd, 0x07, 0xaf, 0xd0, 0xd8, 0x5f, 0xb1, 0xe0, 0xfe, 0x82, 0x04, 0x45, 0xb4,
+ 0xba, 0x5b, 0xec, 0x32, 0x40, 0x3c, 0x91, 0xa9, 0xaa, 0xe3, 0x57, 0x04, 0x58, 0x60, 0xd1, 0x4f,
+ 0x02, 0x70, 0x13, 0x3f, 0xd5, 0xa2, 0xc5, 0xa7, 0xf7, 0x97, 0xb8, 0x43, 0xcb, 0xee, 0x20, 0xcb,
+ 0x63, 0x8d, 0x97, 0xfd, 0xcb, 0x65, 0x18, 0xe4, 0xef, 0xa5, 0xaf, 0xc2, 0xf0, 0x0e, 0x4f, 0x87,
+ 0xdc, 0x4f, 0xe6, 0xe5, 0xf4, 0x38, 0xc2, 0x01, 0x58, 0x16, 0x46, 0xeb, 0x70, 0x46, 0x44, 0x4a,
+ 0xd5, 0x88, 0xef, 0x1c, 0xc8, 0x53, 0x2d, 0x7f, 0x9a, 0x44, 0xa6, 0xcd, 0x3f, 0xb3, 0xd6, 0x49,
+ 0x82, 0xf3, 0xca, 0xa1, 0x57, 0x3b, 0x92, 0x20, 0xf2, 0x44, 0xd2, 0x4a, 0x07, 0xee, 0x91, 0x08,
+ 0xf1, 0x65, 0x18, 0x6f, 0x75, 0x9c, 0xdf, 0xb5, 0xa7, 0xaa, 0xcd, 0x33, 0xbb, 0x49, 0xcb, 0xbc,
+ 0x0a, 0xda, 0xcc, 0x87, 0x62, 0x63, 0x27, 0x22, 0xf1, 0x4e, 0xe8, 0xbb, 0xe2, 0x5d, 0xd6, 0xd4,
+ 0xab, 0x20, 0x83, 0xc7, 0x1d, 0x25, 0x28, 0x97, 0x2d, 0xc7, 0xf3, 0xdb, 0x11, 0x49, 0xb9, 0x0c,
+ 0x99, 0x5c, 0x56, 0x33, 0x78, 0xdc, 0x51, 0x82, 0xce, 0xa3, 0xb3, 0xe2, 0x51, 0x4f, 0x19, 0x3f,
+ 0xaf, 0x5c, 0x45, 0x86, 0xa5, 0x1f, 0x7d, 0x97, 0x9c, 0x2e, 0xe2, 0xca, 0x5f, 0x3d, 0x0b, 0xaa,
+ 0x3d, 0x19, 0x27, 0x3c, 0xe8, 0x25, 0x97, 0xbb, 0x79, 0x5a, 0xf2, 0x8f, 0x2c, 0x38, 0x93, 0xe3,
+ 0x3e, 0xc6, 0x45, 0xd5, 0xb6, 0x17, 0x27, 0xea, 0x45, 0x0c, 0x4d, 0x54, 0x71, 0x38, 0x56, 0x14,
+ 0x74, 0x3d, 0x70, 0x61, 0x98, 0x15, 0x80, 0xc2, 0xe5, 0x43, 0x60, 0x8f, 0x27, 0x00, 0xd1, 0x79,
+ 0x18, 0x68, 0xc7, 0x24, 0x92, 0x6f, 0x32, 0x4a, 0xf9, 0xcd, 0x2c, 0x82, 0x0c, 0x43, 0x35, 0xca,
+ 0x6d, 0x65, 0x8c, 0xd3, 0x34, 0x4a, 0x6e, 0x8e, 0xe3, 0x38, 0xfb, 0x4b, 0x65, 0x98, 0xcc, 0x38,
+ 0x80, 0xd2, 0x86, 0xec, 0x85, 0x81, 0x97, 0x84, 0x2a, 0x07, 0x1f, 0x4f, 0x39, 0x42, 0x5a, 0x3b,
+ 0xeb, 0x02, 0x8e, 0x15, 0x05, 0x7a, 0x4c, 0x3e, 0xd4, 0x9b, 0x7d, 0xe9, 0x63, 0xa9, 0x66, 0xbc,
+ 0xd5, 0xdb, 0xef, 0x93, 0x3d, 0x8f, 0xc2, 0x40, 0x2b, 0x54, 0xaf, 0xa8, 0xab, 0xf1, 0xc4, 0x4b,
+ 0xb5, 0x7a, 0x18, 0xfa, 0x98, 0x21, 0xd1, 0x27, 0xc4, 0xd7, 0x67, 0xee, 0x2b, 0xb0, 0xe3, 0x86,
+ 0xb1, 0xd6, 0x05, 0x4f, 0xc0, 0xf0, 0x2e, 0x39, 0x88, 0xbc, 0x60, 0x3b, 0x7b, 0x5b, 0x73, 0x85,
+ 0x83, 0xb1, 0xc4, 0x9b, 0x29, 0xef, 0x87, 0xef, 0xc9, 0xab, 0x3b, 0x23, 0x3d, 0x77, 0xb5, 0xdf,
+ 0xb0, 0x60, 0x92, 0xe5, 0xbb, 0x15, 0x99, 0x1a, 0xbc, 0x30, 0x38, 0x05, 0x3d, 0xe1, 0x51, 0x18,
+ 0x8c, 0x68, 0xa5, 0xd9, 0xa7, 0x34, 0x58, 0x4b, 0x30, 0xc7, 0xa1, 0x87, 0x60, 0x80, 0x35, 0x81,
+ 0x0e, 0xde, 0x18, 0xcf, 0x78, 0x5f, 0x73, 0x12, 0x07, 0x33, 0x28, 0x0b, 0x99, 0xc3, 0xa4, 0xe5,
+ 0x7b, 0xbc, 0xd1, 0xa9, 0xb9, 0xf5, 0xa3, 0x11, 0x32, 0x97, 0xdb, 0xb4, 0x0f, 0x16, 0x32, 0x97,
+ 0xcf, 0xb2, 0xbb, 0x0e, 0xfe, 0xdf, 0x4b, 0x70, 0x2e, 0xb7, 0x5c, 0xdf, 0x21, 0x73, 0xdd, 0x4b,
+ 0x9f, 0xcc, 0x5d, 0x6f, 0xfe, 0x15, 0x6c, 0xf9, 0x14, 0xaf, 0x60, 0x07, 0xfa, 0x55, 0x53, 0x06,
+ 0xfb, 0x88, 0x64, 0xcb, 0xed, 0xb2, 0x8f, 0x48, 0x24, 0x5b, 0x6e, 0xdb, 0x0a, 0xce, 0x10, 0x3f,
+ 0x28, 0x15, 0x7c, 0x0b, 0x3b, 0x4d, 0x5c, 0xa0, 0x72, 0x86, 0x21, 0x63, 0xa1, 0x76, 0x8d, 0x71,
+ 0x19, 0xc3, 0x61, 0x58, 0x61, 0x91, 0xa7, 0xc5, 0x84, 0xf1, 0xa6, 0xbd, 0x7c, 0xac, 0x25, 0x33,
+ 0x6f, 0x5a, 0xc7, 0xf5, 0xb4, 0x12, 0xd9, 0xf8, 0xb0, 0x75, 0xed, 0x04, 0x58, 0xee, 0xff, 0x04,
+ 0x38, 0x96, 0x7f, 0xfa, 0x43, 0x8b, 0x30, 0xb9, 0xe7, 0x05, 0xec, 0x3d, 0x5c, 0x53, 0xef, 0x51,
+ 0x21, 0xd2, 0xeb, 0x26, 0x1a, 0x67, 0xe9, 0x67, 0x5f, 0x86, 0xf1, 0xbb, 0x37, 0x59, 0x7d, 0xa7,
+ 0x0c, 0x0f, 0x76, 0x59, 0xf6, 0x5c, 0xd6, 0x1b, 0x63, 0xa0, 0xc9, 0xfa, 0x8e, 0x71, 0xa8, 0xc3,
+ 0xcc, 0x56, 0xdb, 0xf7, 0x0f, 0x98, 0x97, 0x13, 0x71, 0x25, 0x85, 0x50, 0x4c, 0x54, 0x32, 0xeb,
+ 0xd5, 0x1c, 0x1a, 0x9c, 0x5b, 0x12, 0xbd, 0x06, 0x28, 0xdc, 0x64, 0x09, 0x96, 0xdd, 0x34, 0x59,
+ 0x06, 0xeb, 0xf8, 0x72, 0xba, 0x18, 0xaf, 0x77, 0x50, 0xe0, 0x9c, 0x52, 0x54, 0xc3, 0x64, 0x2f,
+ 0xf8, 0xab, 0x66, 0x65, 0x34, 0x4c, 0xac, 0x23, 0xb1, 0x49, 0x8b, 0x2e, 0xc1, 0xb4, 0xb3, 0xef,
+ 0x78, 0x3c, 0x79, 0x9a, 0x64, 0xc0, 0x55, 0x4c, 0x65, 0x28, 0x5a, 0xcc, 0x12, 0xe0, 0xce, 0x32,
+ 0x99, 0xe0, 0xb6, 0xa1, 0xe2, 0xe0, 0xb6, 0xee, 0x72, 0xb1, 0x97, 0xdd, 0xcf, 0xfe, 0x4f, 0x16,
+ 0xdd, 0xbe, 0x72, 0x1e, 0x60, 0xa5, 0xfd, 0xa0, 0xec, 0x57, 0x5a, 0x9c, 0x99, 0xea, 0x87, 0x65,
+ 0x1d, 0x89, 0x4d, 0x5a, 0x3e, 0x21, 0xe2, 0xd4, 0xc9, 0xda, 0xd0, 0x13, 0x45, 0x00, 0xa8, 0xa2,
+ 0x40, 0x6f, 0xc2, 0xb0, 0xeb, 0xed, 0x7b, 0x71, 0x18, 0x89, 0xc5, 0x72, 0xdc, 0x47, 0xc7, 0x95,
+ 0x1c, 0xac, 0x71, 0x36, 0x58, 0xf2, 0xb3, 0xbf, 0x54, 0x82, 0x71, 0x59, 0xe3, 0xeb, 0xed, 0x30,
+ 0x71, 0x4e, 0x61, 0x5b, 0xbe, 0x64, 0x6c, 0xcb, 0x9f, 0xe8, 0x16, 0x05, 0xcb, 0x9a, 0x54, 0xb8,
+ 0x1d, 0x5f, 0xcf, 0x6c, 0xc7, 0x8f, 0xf7, 0x66, 0xd5, 0x7d, 0x1b, 0xfe, 0xe7, 0x16, 0x4c, 0x1b,
+ 0xf4, 0xa7, 0xb0, 0x1b, 0xac, 0x9a, 0xbb, 0xc1, 0x23, 0x3d, 0xbf, 0xa1, 0x60, 0x17, 0xf8, 0x5a,
+ 0x29, 0xd3, 0x76, 0x26, 0xfd, 0xdf, 0x83, 0x81, 0x1d, 0x27, 0x72, 0xbb, 0xa5, 0x00, 0xed, 0x28,
+ 0x34, 0x7f, 0xd9, 0x89, 0x5c, 0x2e, 0xc3, 0x9f, 0x56, 0x6f, 0xc3, 0x39, 0x91, 0xdb, 0x33, 0xa6,
+ 0x80, 0x55, 0x85, 0x5e, 0x82, 0xa1, 0xb8, 0x19, 0xb6, 0x94, 0xef, 0xe5, 0x79, 0xfe, 0x6e, 0x1c,
+ 0x85, 0x1c, 0x1d, 0xce, 0x21, 0xb3, 0x3a, 0x0a, 0xc6, 0x82, 0x7e, 0x76, 0x1b, 0x2a, 0xaa, 0xea,
+ 0x7b, 0xea, 0x55, 0xfe, 0x07, 0x65, 0x38, 0x93, 0x33, 0x2f, 0x50, 0x6c, 0xf4, 0xd6, 0xb3, 0x7d,
+ 0x4e, 0xa7, 0x0f, 0xd8, 0x5f, 0x31, 0x3b, 0xb1, 0xb8, 0x62, 0xfc, 0xfb, 0xae, 0xf4, 0x46, 0x4c,
+ 0xb2, 0x95, 0x52, 0x50, 0xef, 0x4a, 0x69, 0x65, 0xa7, 0xd6, 0xd5, 0xb4, 0x22, 0xd5, 0xd2, 0x7b,
+ 0x3a, 0xa6, 0x7f, 0x52, 0x86, 0x99, 0xbc, 0xe0, 0x79, 0xf4, 0xd3, 0x99, 0x07, 0x45, 0x9e, 0xef,
+ 0x37, 0xec, 0x9e, 0xbf, 0x32, 0x22, 0xb2, 0x0d, 0xcd, 0x9b, 0x4f, 0x8c, 0xf4, 0xec, 0x66, 0x51,
+ 0x27, 0x0b, 0xf2, 0x89, 0xf8, 0x43, 0x30, 0x72, 0x89, 0x7f, 0xaa, 0xef, 0x06, 0x88, 0x17, 0x64,
+ 0xe2, 0x4c, 0x90, 0x8f, 0x04, 0xf7, 0x0e, 0xf2, 0x91, 0x35, 0xcf, 0x7a, 0x30, 0xaa, 0x7d, 0xcd,
+ 0x3d, 0x1d, 0xf1, 0x5d, 0xba, 0xa3, 0x68, 0xed, 0xbe, 0xa7, 0xa3, 0xfe, 0x15, 0x0b, 0x32, 0x7e,
+ 0x52, 0xca, 0xfe, 0x61, 0x15, 0xda, 0x3f, 0xce, 0xc3, 0x40, 0x14, 0xfa, 0x24, 0xfb, 0xc6, 0x04,
+ 0x0e, 0x7d, 0x82, 0x19, 0x46, 0x3d, 0x04, 0x5d, 0x2e, 0x7a, 0x08, 0x9a, 0x1e, 0x8d, 0x7d, 0xb2,
+ 0x4f, 0xa4, 0x35, 0x42, 0xc9, 0xe4, 0xab, 0x14, 0x88, 0x39, 0xce, 0xfe, 0xb5, 0x01, 0x38, 0x93,
+ 0x13, 0xd2, 0x46, 0x0f, 0x2a, 0xdb, 0x4e, 0x42, 0x6e, 0x39, 0x07, 0xd9, 0xbc, 0xb7, 0x97, 0x38,
+ 0x18, 0x4b, 0x3c, 0xf3, 0xe5, 0xe4, 0xa9, 0xf3, 0x32, 0x36, 0x22, 0x91, 0x31, 0x4f, 0x60, 0xef,
+ 0xd5, 0xdb, 0xc0, 0x17, 0x01, 0xe2, 0xd8, 0x5f, 0x09, 0xa8, 0xf2, 0xe5, 0x0a, 0x4f, 0xd1, 0x34,
+ 0xcf, 0x62, 0xe3, 0xaa, 0xc0, 0x60, 0x8d, 0x0a, 0xd5, 0x60, 0xaa, 0x15, 0x85, 0x09, 0xb7, 0xbb,
+ 0xd5, 0xb8, 0x8f, 0xc2, 0xa0, 0x19, 0x9c, 0x54, 0xcf, 0xe0, 0x71, 0x47, 0x09, 0xf4, 0x02, 0x8c,
+ 0x8a, 0x80, 0xa5, 0x7a, 0x18, 0xfa, 0xc2, 0x4a, 0xa3, 0x6e, 0xbc, 0x1b, 0x29, 0x0a, 0xeb, 0x74,
+ 0x5a, 0x31, 0x66, 0xcc, 0x1b, 0xce, 0x2d, 0xc6, 0x0d, 0x7a, 0x1a, 0x5d, 0x26, 0x87, 0xc6, 0x48,
+ 0x5f, 0x39, 0x34, 0x52, 0xbb, 0x55, 0xa5, 0xef, 0xfb, 0x0b, 0xe8, 0x69, 0xe9, 0xf9, 0x46, 0x19,
+ 0x86, 0xf8, 0x50, 0x9c, 0x82, 0x2a, 0xb6, 0x2a, 0x6c, 0x37, 0x5d, 0x32, 0x0a, 0xf0, 0xb6, 0xcc,
+ 0xd7, 0x9c, 0xc4, 0xe1, 0x62, 0x48, 0xad, 0x86, 0xd4, 0xca, 0x83, 0xe6, 0x8d, 0xf5, 0x32, 0x9b,
+ 0x31, 0x4e, 0x00, 0xe7, 0xa1, 0xad, 0x9e, 0x77, 0x00, 0x62, 0xf6, 0x3e, 0x2d, 0xe5, 0x21, 0x72,
+ 0x53, 0x3c, 0xd9, 0xa5, 0xf6, 0x86, 0x22, 0xe6, 0x6d, 0x48, 0xa7, 0xa0, 0x42, 0x60, 0x8d, 0xe3,
+ 0xec, 0x8b, 0x50, 0x51, 0xc4, 0xbd, 0x4e, 0x72, 0x63, 0xba, 0xf0, 0xfa, 0x0c, 0x4c, 0x66, 0xea,
+ 0x3a, 0xd6, 0x41, 0xf0, 0x37, 0x2d, 0x98, 0xe4, 0x4d, 0x5e, 0x09, 0xf6, 0xc5, 0x62, 0x7f, 0x1f,
+ 0x66, 0xfc, 0x9c, 0x45, 0x27, 0x46, 0xb4, 0xff, 0x45, 0xaa, 0x0e, 0x7e, 0x79, 0x58, 0x9c, 0x5b,
+ 0x07, 0x3d, 0xfc, 0xf3, 0x97, 0xb5, 0x1d, 0x5f, 0x78, 0x20, 0x8f, 0xf1, 0xdc, 0xe2, 0x1c, 0x86,
+ 0x15, 0xd6, 0xfe, 0xae, 0x05, 0xd3, 0xbc, 0xe5, 0x57, 0xc8, 0x81, 0x3a, 0xe4, 0x7c, 0x98, 0x6d,
+ 0x17, 0xa9, 0xd3, 0x4b, 0x05, 0xa9, 0xd3, 0xf5, 0x4f, 0x2b, 0x77, 0xfd, 0xb4, 0x5f, 0xb5, 0x40,
+ 0xcc, 0xc0, 0x53, 0x50, 0xe7, 0x7f, 0xdc, 0x54, 0xe7, 0x67, 0x8b, 0x27, 0x75, 0x81, 0x1e, 0xff,
+ 0x67, 0x16, 0x4c, 0x71, 0x82, 0xf4, 0xf2, 0xe2, 0x43, 0x1d, 0x87, 0x7e, 0xde, 0xf3, 0x51, 0x0f,
+ 0xa8, 0xe6, 0x7f, 0x94, 0x31, 0x58, 0x03, 0x5d, 0x07, 0xcb, 0x95, 0x0b, 0xe8, 0x18, 0xef, 0x54,
+ 0x1d, 0x3b, 0xdb, 0x9f, 0xfd, 0xc7, 0x16, 0x20, 0x5e, 0x4d, 0xf6, 0x49, 0x73, 0xbe, 0xf5, 0x69,
+ 0x07, 0xfa, 0x54, 0xd4, 0x28, 0x0c, 0xd6, 0xa8, 0x4e, 0xa4, 0x7b, 0x32, 0x37, 0x50, 0xe5, 0xde,
+ 0x37, 0x50, 0xc7, 0xe8, 0xd1, 0xbf, 0x3a, 0x00, 0x59, 0x77, 0x47, 0x74, 0x13, 0xc6, 0x9a, 0x4e,
+ 0xcb, 0xd9, 0xf4, 0x7c, 0x2f, 0xf1, 0x48, 0xdc, 0xed, 0xea, 0x7a, 0x59, 0xa3, 0x13, 0xd7, 0x3d,
+ 0x1a, 0x04, 0x1b, 0x7c, 0xd0, 0x3c, 0x40, 0x2b, 0xf2, 0xf6, 0x3d, 0x9f, 0x6c, 0xb3, 0x13, 0x0d,
+ 0x8b, 0x79, 0xe0, 0xf7, 0xb1, 0x12, 0x8a, 0x35, 0x8a, 0x1c, 0x1f, 0xf9, 0xf2, 0xbd, 0xf3, 0x91,
+ 0x1f, 0x38, 0xa6, 0x8f, 0xfc, 0x60, 0x5f, 0x3e, 0xf2, 0x18, 0xee, 0x93, 0x7b, 0x37, 0xfd, 0xbf,
+ 0xea, 0xf9, 0x44, 0x28, 0x6c, 0x3c, 0x12, 0x62, 0xf6, 0xce, 0xe1, 0xdc, 0x7d, 0x38, 0x97, 0x02,
+ 0x17, 0x94, 0x44, 0x3f, 0x09, 0x55, 0xc7, 0xf7, 0xc3, 0x5b, 0xaa, 0xd7, 0x56, 0xe2, 0xa6, 0xe3,
+ 0xa7, 0xc9, 0x6f, 0x47, 0x96, 0x1e, 0xba, 0x73, 0x38, 0x57, 0x5d, 0x2c, 0xa0, 0xc1, 0x85, 0xa5,
+ 0xed, 0x5d, 0x38, 0xd3, 0x20, 0x91, 0x7c, 0xfa, 0x4e, 0x2d, 0xb1, 0x0d, 0xa8, 0x44, 0x19, 0xa1,
+ 0xd2, 0x57, 0xb8, 0xbc, 0x96, 0x98, 0x4c, 0x0a, 0x91, 0x94, 0x91, 0xfd, 0xa7, 0x16, 0x0c, 0x0b,
+ 0x17, 0xca, 0x53, 0xd0, 0x65, 0x16, 0x0d, 0xb3, 0xd2, 0x5c, 0xbe, 0xe0, 0x65, 0x8d, 0x29, 0x34,
+ 0x28, 0xad, 0x65, 0x0c, 0x4a, 0x8f, 0x74, 0x63, 0xd2, 0xdd, 0x94, 0xf4, 0x0b, 0x65, 0x98, 0x30,
+ 0xdd, 0x47, 0x4f, 0xa1, 0x0b, 0xae, 0xc1, 0x70, 0x2c, 0x7c, 0x95, 0x4b, 0xc5, 0x3e, 0x6f, 0xd9,
+ 0x41, 0x4c, 0x6f, 0xc6, 0x85, 0x77, 0xb2, 0x64, 0x92, 0xeb, 0x04, 0x5d, 0xbe, 0x87, 0x4e, 0xd0,
+ 0xbd, 0x3c, 0x78, 0x07, 0x4e, 0xc2, 0x83, 0xd7, 0xfe, 0x26, 0x13, 0xfe, 0x3a, 0xfc, 0x14, 0xf4,
+ 0x82, 0x4b, 0xe6, 0x36, 0x61, 0x77, 0x99, 0x59, 0xa2, 0x51, 0x05, 0xfa, 0xc1, 0x3f, 0xb2, 0x60,
+ 0x54, 0x10, 0x9e, 0x42, 0xb3, 0x7f, 0xc2, 0x6c, 0xf6, 0x83, 0x5d, 0x9a, 0x5d, 0xd0, 0xde, 0xbf,
+ 0x5d, 0x52, 0xed, 0xad, 0x87, 0x51, 0xd2, 0x57, 0x32, 0xf4, 0x11, 0x7a, 0x1a, 0x0c, 0x9b, 0xa1,
+ 0x2f, 0x36, 0xf3, 0x87, 0xd2, 0x60, 0x38, 0x0e, 0x3f, 0xd2, 0x7e, 0x63, 0x45, 0xcd, 0x62, 0xb5,
+ 0xc2, 0x28, 0x11, 0x1b, 0x68, 0x1a, 0xab, 0x15, 0x46, 0x09, 0x66, 0x18, 0xe4, 0x02, 0x24, 0x4e,
+ 0xb4, 0x4d, 0x12, 0x0a, 0x13, 0xd1, 0xa3, 0xc5, 0xab, 0xb0, 0x9d, 0x78, 0xfe, 0xbc, 0x17, 0x24,
+ 0x71, 0x12, 0xcd, 0xaf, 0x05, 0xc9, 0xf5, 0x88, 0x9f, 0x0d, 0xb4, 0xe8, 0x36, 0xc5, 0x0b, 0x6b,
+ 0x7c, 0x65, 0x78, 0x05, 0xab, 0x63, 0xd0, 0xbc, 0xef, 0xb9, 0x26, 0xe0, 0x58, 0x51, 0xd8, 0x2f,
+ 0x32, 0x99, 0xcc, 0x3a, 0xe8, 0x78, 0x81, 0x67, 0xdf, 0x1e, 0x51, 0x5d, 0xcb, 0x8c, 0xbd, 0x35,
+ 0x3d, 0xbc, 0xad, 0xbb, 0x08, 0xa4, 0x15, 0xeb, 0xae, 0xc4, 0x69, 0x0c, 0x1c, 0xfa, 0x6c, 0xc7,
+ 0x35, 0xe0, 0x33, 0x3d, 0x64, 0xe9, 0x31, 0x2e, 0xfe, 0x58, 0x66, 0x3e, 0x96, 0xc1, 0x6c, 0xad,
+ 0x9e, 0x4d, 0x57, 0xbf, 0x2c, 0x11, 0x38, 0xa5, 0x41, 0x0b, 0xe2, 0x64, 0xc9, 0xcd, 0x2c, 0x0f,
+ 0x66, 0x4e, 0x96, 0xf2, 0xf3, 0xb5, 0xa3, 0xe5, 0xb3, 0x30, 0xaa, 0x9e, 0x00, 0xaa, 0xf3, 0x97,
+ 0x54, 0x2a, 0x5c, 0x97, 0x5a, 0x49, 0xc1, 0x58, 0xa7, 0x41, 0x1b, 0x30, 0x19, 0xf3, 0xf7, 0x89,
+ 0x64, 0xc4, 0x83, 0xb0, 0x1b, 0x3c, 0x29, 0xaf, 0x0f, 0x1b, 0x26, 0xfa, 0x88, 0x81, 0xf8, 0x62,
+ 0x95, 0x31, 0x12, 0x59, 0x16, 0xe8, 0x55, 0x98, 0xf0, 0xf5, 0x77, 0x5a, 0xeb, 0xc2, 0xac, 0xa0,
+ 0x5c, 0xb9, 0x8c, 0x57, 0x5c, 0xeb, 0x38, 0x43, 0x4d, 0x95, 0x00, 0x1d, 0x22, 0x12, 0xe8, 0x38,
+ 0xc1, 0x36, 0x89, 0xc5, 0x03, 0x26, 0x4c, 0x09, 0xb8, 0x5a, 0x40, 0x83, 0x0b, 0x4b, 0xa3, 0x97,
+ 0x60, 0x4c, 0x7e, 0xbe, 0x16, 0x01, 0x94, 0x3a, 0x0c, 0x6a, 0x38, 0x6c, 0x50, 0xa2, 0x5b, 0x70,
+ 0x56, 0xfe, 0xdf, 0x88, 0x9c, 0xad, 0x2d, 0xaf, 0x29, 0x02, 0xb0, 0x46, 0x19, 0x8b, 0x45, 0xe9,
+ 0x3d, 0xbd, 0x92, 0x47, 0x74, 0x74, 0x38, 0x77, 0x5e, 0xf4, 0x5a, 0x2e, 0x9e, 0x0d, 0x62, 0x3e,
+ 0x7f, 0xb4, 0x0e, 0x67, 0x76, 0x88, 0xe3, 0x27, 0x3b, 0xcb, 0x3b, 0xa4, 0xb9, 0x2b, 0x17, 0x11,
+ 0x8b, 0x2b, 0xd2, 0xdc, 0xec, 0x2e, 0x77, 0x92, 0xe0, 0xbc, 0x72, 0xe8, 0x6d, 0xa8, 0xb6, 0xda,
+ 0x9b, 0xbe, 0x17, 0xef, 0x5c, 0x0b, 0x13, 0x76, 0x63, 0xa9, 0x5e, 0xd0, 0x11, 0x01, 0x48, 0x2a,
+ 0xa6, 0xaa, 0x5e, 0x40, 0x87, 0x0b, 0x39, 0xa0, 0xf7, 0xe1, 0x6c, 0x66, 0x32, 0xf0, 0x47, 0x99,
+ 0x44, 0xa0, 0xd2, 0x13, 0xf9, 0xcb, 0x29, 0xa7, 0x00, 0x0f, 0x8b, 0xcb, 0x45, 0xe1, 0xfc, 0x2a,
+ 0x3e, 0xd8, 0x3d, 0xf6, 0x7b, 0xb4, 0xb0, 0xa6, 0xdd, 0xa0, 0xcf, 0xc1, 0x98, 0x3e, 0x8b, 0xc4,
+ 0x06, 0xf3, 0x58, 0xaf, 0x37, 0x89, 0x85, 0x6e, 0xa4, 0x66, 0x94, 0x8e, 0xc3, 0x06, 0x47, 0x9b,
+ 0x40, 0xfe, 0xf7, 0xa1, 0xab, 0x30, 0xd2, 0xf4, 0x3d, 0x12, 0x24, 0x6b, 0xf5, 0x6e, 0x81, 0xb3,
+ 0xcb, 0x82, 0x46, 0x74, 0x98, 0xc8, 0xdf, 0xc4, 0x61, 0x58, 0x71, 0xb0, 0x7f, 0xa7, 0x04, 0x73,
+ 0x3d, 0x52, 0x78, 0x65, 0x6c, 0x80, 0x56, 0x5f, 0x36, 0xc0, 0x45, 0xf9, 0x1e, 0xd0, 0xb5, 0xcc,
+ 0xf9, 0x33, 0xf3, 0xd6, 0x4f, 0x7a, 0x0a, 0xcd, 0xd2, 0xf7, 0xed, 0xfe, 0xa6, 0x9b, 0x11, 0x07,
+ 0x7a, 0x7a, 0x01, 0xd6, 0x75, 0x7b, 0xf0, 0x60, 0xff, 0x1a, 0x7d, 0xa1, 0x29, 0xd8, 0xfe, 0x66,
+ 0x09, 0xce, 0xaa, 0x2e, 0xfc, 0xd1, 0xed, 0xb8, 0x1b, 0x9d, 0x1d, 0x77, 0x02, 0x86, 0x74, 0xfb,
+ 0x3a, 0x0c, 0x35, 0x0e, 0xe2, 0x66, 0xe2, 0xf7, 0xa1, 0x00, 0x3d, 0x6a, 0x2c, 0xd0, 0x74, 0x9b,
+ 0x66, 0x4f, 0xfa, 0x89, 0xf5, 0x6a, 0xff, 0x25, 0x0b, 0x26, 0x37, 0x96, 0xeb, 0x8d, 0xb0, 0xb9,
+ 0x4b, 0x92, 0x45, 0x6e, 0x26, 0xc2, 0x42, 0xff, 0xb1, 0xee, 0x52, 0xaf, 0xc9, 0xd3, 0x98, 0xce,
+ 0xc3, 0xc0, 0x4e, 0x18, 0x27, 0xd9, 0xcb, 0x92, 0xcb, 0x61, 0x9c, 0x60, 0x86, 0xb1, 0xff, 0xd0,
+ 0x82, 0x41, 0xf6, 0x8a, 0x5d, 0xaf, 0xd7, 0x0e, 0xfb, 0xf9, 0x2e, 0xf4, 0x02, 0x0c, 0x91, 0xad,
+ 0x2d, 0xd2, 0x4c, 0xc4, 0xa8, 0xca, 0x88, 0x9c, 0xa1, 0x15, 0x06, 0xa5, 0x9b, 0x3e, 0xab, 0x8c,
+ 0xff, 0xc5, 0x82, 0x18, 0x7d, 0x16, 0x2a, 0x89, 0xb7, 0x47, 0x16, 0x5d, 0x57, 0xdc, 0x53, 0x1c,
+ 0xcf, 0x25, 0x4d, 0x29, 0x21, 0x1b, 0x92, 0x09, 0x4e, 0xf9, 0xd9, 0x3f, 0x5f, 0x02, 0x48, 0x23,
+ 0xf7, 0x7a, 0x7d, 0xe6, 0x52, 0xc7, 0xa3, 0x8e, 0x8f, 0xe5, 0x3c, 0xea, 0x88, 0x52, 0x86, 0x39,
+ 0x4f, 0x3a, 0xaa, 0xae, 0x2a, 0xf7, 0xd5, 0x55, 0x03, 0xc7, 0xe9, 0xaa, 0x65, 0x98, 0x4e, 0x23,
+ 0x0f, 0xcd, 0x30, 0x6c, 0x96, 0xae, 0x77, 0x23, 0x8b, 0xc4, 0x9d, 0xf4, 0xf6, 0x17, 0x2d, 0x10,
+ 0x6e, 0xca, 0x7d, 0x4c, 0xe8, 0xb7, 0xe4, 0xfb, 0x6b, 0x46, 0x5e, 0xc1, 0xf3, 0xc5, 0x7e, 0xdb,
+ 0x22, 0x9b, 0xa0, 0xda, 0x40, 0x8c, 0x1c, 0x82, 0x06, 0x2f, 0xfb, 0xaf, 0x97, 0x60, 0x94, 0xa3,
+ 0x59, 0xce, 0xba, 0x3e, 0x5a, 0x73, 0xac, 0x64, 0xcf, 0xec, 0x69, 0x32, 0xca, 0x58, 0xe5, 0x04,
+ 0xd6, 0x9f, 0x26, 0x93, 0x08, 0x9c, 0xd2, 0xa0, 0x27, 0x60, 0x38, 0x6e, 0x6f, 0x32, 0xf2, 0x8c,
+ 0xa7, 0x72, 0x83, 0x83, 0xb1, 0xc4, 0xa3, 0x9f, 0x84, 0x29, 0x5e, 0x2e, 0x0a, 0x5b, 0xce, 0x36,
+ 0xb7, 0xef, 0x0c, 0xaa, 0x38, 0x95, 0xa9, 0xf5, 0x0c, 0xee, 0xe8, 0x70, 0x6e, 0x26, 0x0b, 0x63,
+ 0x96, 0xc1, 0x0e, 0x2e, 0x74, 0xc6, 0x4e, 0x65, 0x5d, 0xe0, 0xd1, 0x65, 0x18, 0xe2, 0x02, 0x49,
+ 0x08, 0x88, 0x2e, 0xf7, 0x3d, 0x9a, 0xe3, 0x3c, 0xf0, 0x57, 0xfa, 0x99, 0x20, 0x13, 0xe5, 0xd1,
+ 0xdb, 0x30, 0xea, 0x86, 0xb7, 0x82, 0x5b, 0x4e, 0xe4, 0x2e, 0xd6, 0xd7, 0xc4, 0x78, 0xe6, 0xea,
+ 0x35, 0xb5, 0x94, 0x4c, 0x77, 0xc6, 0x67, 0xb6, 0xcd, 0x14, 0x85, 0x75, 0x76, 0x68, 0x83, 0xa5,
+ 0x59, 0xe1, 0x6f, 0x07, 0x77, 0x73, 0xed, 0x51, 0xcf, 0x0d, 0x6b, 0x9c, 0xc7, 0x45, 0x2e, 0x16,
+ 0xf1, 0xf2, 0x70, 0xca, 0xc8, 0xfe, 0xfc, 0x19, 0x30, 0xe6, 0x91, 0x91, 0xec, 0xd9, 0x3a, 0xa1,
+ 0x64, 0xcf, 0x18, 0x46, 0xc8, 0x5e, 0x2b, 0x39, 0xa8, 0x79, 0x51, 0xb7, 0x2c, 0xff, 0x2b, 0x82,
+ 0xa6, 0x93, 0xa7, 0xc4, 0x60, 0xc5, 0x27, 0x3f, 0x23, 0x77, 0xf9, 0x43, 0xcc, 0xc8, 0x3d, 0x70,
+ 0x8a, 0x19, 0xb9, 0xaf, 0xc1, 0xf0, 0xb6, 0x97, 0x60, 0xd2, 0x0a, 0xc5, 0x66, 0x9c, 0x3b, 0x13,
+ 0x2e, 0x71, 0x92, 0xce, 0xbc, 0xb1, 0x02, 0x81, 0x25, 0x13, 0xf4, 0x9a, 0x5a, 0x03, 0x43, 0xc5,
+ 0xba, 0x6c, 0xe7, 0xd5, 0x40, 0xee, 0x2a, 0x10, 0x19, 0xb8, 0x87, 0xef, 0x36, 0x03, 0xb7, 0xca,
+ 0xa0, 0x3d, 0xf2, 0xc1, 0x32, 0x68, 0x1b, 0x19, 0xc6, 0x2b, 0x27, 0x97, 0x61, 0xfc, 0x8b, 0x16,
+ 0x9c, 0x6d, 0xe5, 0x25, 0xdb, 0x17, 0xb9, 0xb0, 0x5f, 0xe8, 0xfb, 0x35, 0x01, 0xa3, 0x42, 0x76,
+ 0xa8, 0xc9, 0x25, 0xc3, 0xf9, 0xd5, 0xc9, 0x54, 0xe5, 0xa3, 0x77, 0x9b, 0xaa, 0xfc, 0xde, 0x24,
+ 0xcd, 0x4e, 0x13, 0x97, 0x8f, 0x7f, 0xe0, 0xc4, 0xe5, 0xaf, 0xa9, 0xc4, 0xe5, 0x5d, 0x92, 0x59,
+ 0xf0, 0xb4, 0xe4, 0x3d, 0xd3, 0x95, 0x6b, 0x29, 0xc7, 0x27, 0x4f, 0x22, 0xe5, 0xf8, 0x3b, 0xa6,
+ 0xb0, 0xe7, 0xf9, 0xaf, 0x9f, 0xea, 0x21, 0xec, 0x0d, 0xbe, 0xdd, 0xc5, 0x3d, 0x4f, 0xaf, 0x3e,
+ 0x7d, 0x57, 0xe9, 0xd5, 0x6f, 0xea, 0x89, 0xcb, 0x51, 0x8f, 0xcc, 0xdc, 0x94, 0xa8, 0xcf, 0x74,
+ 0xe5, 0x37, 0xf5, 0x2d, 0xe8, 0x4c, 0x31, 0x5f, 0xb5, 0xd3, 0x74, 0xf2, 0xcd, 0xdb, 0x84, 0x3a,
+ 0xd3, 0xa0, 0xcf, 0x9c, 0x4e, 0x1a, 0xf4, 0xb3, 0x27, 0x9e, 0x06, 0xfd, 0xbe, 0x53, 0x48, 0x83,
+ 0x7e, 0xff, 0x87, 0x9a, 0x06, 0xbd, 0x7a, 0x6f, 0xd3, 0xa0, 0x3f, 0x70, 0x12, 0x69, 0xd0, 0x6f,
+ 0x42, 0xa5, 0x25, 0xa3, 0x24, 0xab, 0xb3, 0xc5, 0x43, 0x92, 0x1b, 0x4a, 0xc9, 0x87, 0x44, 0xa1,
+ 0x70, 0xca, 0x8a, 0xf2, 0x4d, 0xd3, 0xa2, 0x3f, 0xd8, 0xc5, 0x6c, 0x95, 0x67, 0x10, 0xe8, 0x92,
+ 0x0c, 0xfd, 0x2f, 0x97, 0xe0, 0x5c, 0xf7, 0x79, 0x9d, 0x5a, 0x13, 0xea, 0xa9, 0xf5, 0x3b, 0x63,
+ 0x4d, 0x60, 0x4a, 0x97, 0x46, 0xd5, 0x77, 0x28, 0xf9, 0x25, 0x98, 0x56, 0xce, 0x62, 0xbe, 0xd7,
+ 0x3c, 0xd0, 0x5e, 0x4c, 0x52, 0xf1, 0x07, 0x8d, 0x2c, 0x01, 0xee, 0x2c, 0x83, 0x16, 0x61, 0xd2,
+ 0x00, 0xae, 0xd5, 0x84, 0xb2, 0xaf, 0xcc, 0x17, 0x0d, 0x13, 0x8d, 0xb3, 0xf4, 0xf6, 0xd7, 0x2c,
+ 0xb8, 0xbf, 0x20, 0x37, 0x6a, 0xdf, 0x91, 0xd2, 0x5b, 0x30, 0xd9, 0x32, 0x8b, 0xf6, 0x48, 0xa8,
+ 0x60, 0x64, 0x60, 0x55, 0x6d, 0xcd, 0x20, 0x70, 0x96, 0xe9, 0xd2, 0x85, 0x6f, 0x7d, 0xef, 0xdc,
+ 0xc7, 0x7e, 0xff, 0x7b, 0xe7, 0x3e, 0xf6, 0xdd, 0xef, 0x9d, 0xfb, 0xd8, 0xff, 0x7f, 0xe7, 0x9c,
+ 0xf5, 0xad, 0x3b, 0xe7, 0xac, 0xdf, 0xbf, 0x73, 0xce, 0xfa, 0xee, 0x9d, 0x73, 0xd6, 0x1f, 0xdd,
+ 0x39, 0x67, 0xfd, 0xfc, 0xf7, 0xcf, 0x7d, 0xec, 0xad, 0xd2, 0xfe, 0xb3, 0xff, 0x2f, 0x00, 0x00,
+ 0xff, 0xff, 0x98, 0xcc, 0x13, 0x07, 0x60, 0xd1, 0x00, 0x00,
}
diff --git a/staging/src/k8s.io/api/core/v1/generated.proto b/staging/src/k8s.io/api/core/v1/generated.proto
index 5e0f3848dcf..344fc87fb87 100644
--- a/staging/src/k8s.io/api/core/v1/generated.proto
+++ b/staging/src/k8s.io/api/core/v1/generated.proto
@@ -2133,6 +2133,31 @@ message PersistentVolumeClaim {
optional PersistentVolumeClaimStatus status = 3;
}
+// PersistentVolumeClaimCondition contails details about state of pvc
+message PersistentVolumeClaimCondition {
+ optional string type = 1;
+
+ optional string status = 2;
+
+ // Last time we probed the condition.
+ // +optional
+ optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastProbeTime = 3;
+
+ // Last time the condition transitioned from one status to another.
+ // +optional
+ optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTransitionTime = 4;
+
+ // Unique, this should be a short, machine understandable string that gives the reason
+ // for condition's last transition. If it reports "ResizeStarted" that means the underlying
+ // persistent volume is being resized.
+ // +optional
+ optional string reason = 5;
+
+ // Human-readable message indicating details about last transition.
+ // +optional
+ optional string message = 6;
+}
+
// PersistentVolumeClaimList is a list of PersistentVolumeClaim items.
message PersistentVolumeClaimList {
// Standard list metadata.
@@ -2186,6 +2211,13 @@ message PersistentVolumeClaimStatus {
// Represents the actual resources of the underlying volume.
// +optional
map capacity = 3;
+
+ // Current Condition of persistent volume claim. If underlying persistent volume is being
+ // resized then the Condition will be set to 'ResizeStarted'.
+ // +optional
+ // +patchMergeKey=type
+ // +patchStrategy=merge
+ repeated PersistentVolumeClaimCondition conditions = 4;
}
// PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace.
diff --git a/staging/src/k8s.io/api/core/v1/types.go b/staging/src/k8s.io/api/core/v1/types.go
index 7e8959a58b5..4520cc6d5b0 100644
--- a/staging/src/k8s.io/api/core/v1/types.go
+++ b/staging/src/k8s.io/api/core/v1/types.go
@@ -630,6 +630,34 @@ type PersistentVolumeClaimSpec struct {
StorageClassName *string `json:"storageClassName,omitempty" protobuf:"bytes,5,opt,name=storageClassName"`
}
+// PersistentVolumeClaimConditionType is a valid value of PersistentVolumeClaimCondition.Type
+type PersistentVolumeClaimConditionType string
+
+const (
+ // PersistentVolumeClaimResizing - a user trigger resize of pvc has been started
+ PersistentVolumeClaimResizing PersistentVolumeClaimConditionType = "Resizing"
+)
+
+// PersistentVolumeClaimCondition contails details about state of pvc
+type PersistentVolumeClaimCondition struct {
+ Type PersistentVolumeClaimConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=PersistentVolumeClaimConditionType"`
+ Status ConditionStatus `json:"status" protobuf:"bytes,2,opt,name=status,casttype=ConditionStatus"`
+ // Last time we probed the condition.
+ // +optional
+ LastProbeTime metav1.Time `json:"lastProbeTime,omitempty" protobuf:"bytes,3,opt,name=lastProbeTime"`
+ // Last time the condition transitioned from one status to another.
+ // +optional
+ LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,4,opt,name=lastTransitionTime"`
+ // Unique, this should be a short, machine understandable string that gives the reason
+ // for condition's last transition. If it reports "ResizeStarted" that means the underlying
+ // persistent volume is being resized.
+ // +optional
+ Reason string `json:"reason,omitempty" protobuf:"bytes,5,opt,name=reason"`
+ // Human-readable message indicating details about last transition.
+ // +optional
+ Message string `json:"message,omitempty" protobuf:"bytes,6,opt,name=message"`
+}
+
// PersistentVolumeClaimStatus is the current status of a persistent volume claim.
type PersistentVolumeClaimStatus struct {
// Phase represents the current phase of PersistentVolumeClaim.
@@ -642,6 +670,12 @@ type PersistentVolumeClaimStatus struct {
// Represents the actual resources of the underlying volume.
// +optional
Capacity ResourceList `json:"capacity,omitempty" protobuf:"bytes,3,rep,name=capacity,casttype=ResourceList,castkey=ResourceName"`
+ // Current Condition of persistent volume claim. If underlying persistent volume is being
+ // resized then the Condition will be set to 'ResizeStarted'.
+ // +optional
+ // +patchMergeKey=type
+ // +patchStrategy=merge
+ Conditions []PersistentVolumeClaimCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,4,rep,name=conditions"`
}
type PersistentVolumeAccessMode string
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 55bb4ffeabf..7676b004753 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
@@ -1122,6 +1122,18 @@ func (PersistentVolumeClaim) SwaggerDoc() map[string]string {
return map_PersistentVolumeClaim
}
+var map_PersistentVolumeClaimCondition = map[string]string{
+ "": "PersistentVolumeClaimCondition contails details about state of pvc",
+ "lastProbeTime": "Last time we probed the condition.",
+ "lastTransitionTime": "Last time the condition transitioned from one status to another.",
+ "reason": "Unique, this should be a short, machine understandable string that gives the reason for condition's last transition. If it reports \"ResizeStarted\" that means the underlying persistent volume is being resized.",
+ "message": "Human-readable message indicating details about last transition.",
+}
+
+func (PersistentVolumeClaimCondition) SwaggerDoc() map[string]string {
+ return map_PersistentVolumeClaimCondition
+}
+
var map_PersistentVolumeClaimList = map[string]string{
"": "PersistentVolumeClaimList is a list of PersistentVolumeClaim items.",
"metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds",
@@ -1150,6 +1162,7 @@ var map_PersistentVolumeClaimStatus = map[string]string{
"phase": "Phase represents the current phase of PersistentVolumeClaim.",
"accessModes": "AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1",
"capacity": "Represents the actual resources of the underlying volume.",
+ "conditions": "Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'.",
}
func (PersistentVolumeClaimStatus) SwaggerDoc() map[string]string {
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 8133d135b27..66d4e8e1fa7 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
@@ -427,6 +427,10 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error {
in.(*PersistentVolumeClaim).DeepCopyInto(out.(*PersistentVolumeClaim))
return nil
}, InType: reflect.TypeOf(&PersistentVolumeClaim{})},
+ conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error {
+ in.(*PersistentVolumeClaimCondition).DeepCopyInto(out.(*PersistentVolumeClaimCondition))
+ return nil
+ }, InType: reflect.TypeOf(&PersistentVolumeClaimCondition{})},
conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error {
in.(*PersistentVolumeClaimList).DeepCopyInto(out.(*PersistentVolumeClaimList))
return nil
@@ -3499,6 +3503,24 @@ func (in *PersistentVolumeClaim) DeepCopyObject() runtime.Object {
}
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *PersistentVolumeClaimCondition) DeepCopyInto(out *PersistentVolumeClaimCondition) {
+ *out = *in
+ in.LastProbeTime.DeepCopyInto(&out.LastProbeTime)
+ in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime)
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PersistentVolumeClaimCondition.
+func (in *PersistentVolumeClaimCondition) DeepCopy() *PersistentVolumeClaimCondition {
+ if in == nil {
+ return nil
+ }
+ out := new(PersistentVolumeClaimCondition)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *PersistentVolumeClaimList) DeepCopyInto(out *PersistentVolumeClaimList) {
*out = *in
@@ -3588,6 +3610,13 @@ func (in *PersistentVolumeClaimStatus) DeepCopyInto(out *PersistentVolumeClaimSt
(*out)[key] = val.DeepCopy()
}
}
+ if in.Conditions != nil {
+ in, out := &in.Conditions, &out.Conditions
+ *out = make([]PersistentVolumeClaimCondition, len(*in))
+ for i := range *in {
+ (*in)[i].DeepCopyInto(&(*out)[i])
+ }
+ }
return
}
diff --git a/staging/src/k8s.io/api/storage/v1/generated.pb.go b/staging/src/k8s.io/api/storage/v1/generated.pb.go
index 9a024884bb0..4befedff1ef 100644
--- a/staging/src/k8s.io/api/storage/v1/generated.pb.go
+++ b/staging/src/k8s.io/api/storage/v1/generated.pb.go
@@ -136,6 +136,16 @@ func (m *StorageClass) MarshalTo(dAtA []byte) (int, error) {
i += copy(dAtA[i:], s)
}
}
+ if m.AllowVolumeExpansion != nil {
+ dAtA[i] = 0x30
+ i++
+ if *m.AllowVolumeExpansion {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i++
+ }
return i, nil
}
@@ -229,6 +239,9 @@ func (m *StorageClass) Size() (n int) {
n += 1 + l + sovGenerated(uint64(l))
}
}
+ if m.AllowVolumeExpansion != nil {
+ n += 2
+ }
return n
}
@@ -279,6 +292,7 @@ func (this *StorageClass) String() string {
`Parameters:` + mapStringForParameters + `,`,
`ReclaimPolicy:` + valueToStringGenerated(this.ReclaimPolicy) + `,`,
`MountOptions:` + fmt.Sprintf("%v", this.MountOptions) + `,`,
+ `AllowVolumeExpansion:` + valueToStringGenerated(this.AllowVolumeExpansion) + `,`,
`}`,
}, "")
return s
@@ -565,6 +579,27 @@ func (m *StorageClass) Unmarshal(dAtA []byte) error {
}
m.MountOptions = append(m.MountOptions, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
+ case 6:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field AllowVolumeExpansion", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ b := bool(v != 0)
+ m.AllowVolumeExpansion = &b
default:
iNdEx = preIndex
skippy, err := skipGenerated(dAtA[iNdEx:])
@@ -807,40 +842,43 @@ func init() {
}
var fileDescriptorGenerated = []byte{
- // 558 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x52, 0xcd, 0x6e, 0xd3, 0x40,
- 0x10, 0x8e, 0x13, 0x22, 0x35, 0x9b, 0x44, 0x44, 0x06, 0x24, 0x2b, 0x07, 0x27, 0x2a, 0x97, 0x08,
- 0x89, 0xdd, 0xa6, 0x2d, 0xa8, 0x42, 0x82, 0x43, 0x50, 0x25, 0x90, 0xa8, 0x1a, 0x19, 0x89, 0x03,
- 0xe2, 0xc0, 0xc6, 0x19, 0x9c, 0xc5, 0x3f, 0x6b, 0xed, 0xae, 0x2d, 0xe5, 0xc6, 0x23, 0xf0, 0x3c,
- 0x3c, 0x41, 0x8e, 0x3d, 0xf6, 0x14, 0x11, 0xf3, 0x06, 0x1c, 0x39, 0x21, 0xdb, 0x21, 0x76, 0x9a,
- 0x54, 0xf4, 0xb6, 0x33, 0xf3, 0x7d, 0xdf, 0xce, 0xcc, 0x37, 0xe8, 0x95, 0x7b, 0x26, 0x31, 0xe3,
- 0xc4, 0x8d, 0x26, 0x20, 0x02, 0x50, 0x20, 0x49, 0x0c, 0xc1, 0x94, 0x0b, 0xb2, 0x2e, 0xd0, 0x90,
- 0x11, 0xa9, 0xb8, 0xa0, 0x0e, 0x90, 0x78, 0x48, 0x1c, 0x08, 0x40, 0x50, 0x05, 0x53, 0x1c, 0x0a,
- 0xae, 0xb8, 0xfe, 0x28, 0x87, 0x61, 0x1a, 0x32, 0xbc, 0x86, 0xe1, 0x78, 0xd8, 0x7d, 0xea, 0x30,
- 0x35, 0x8b, 0x26, 0xd8, 0xe6, 0x3e, 0x71, 0xb8, 0xc3, 0x49, 0x86, 0x9e, 0x44, 0x5f, 0xb2, 0x28,
- 0x0b, 0xb2, 0x57, 0xae, 0xd2, 0x7d, 0xb2, 0xf7, 0xb3, 0x09, 0x28, 0xba, 0xf3, 0x63, 0xf7, 0xb4,
- 0xc0, 0xfa, 0xd4, 0x9e, 0xb1, 0x00, 0xc4, 0x9c, 0x84, 0xae, 0x93, 0x26, 0x24, 0xf1, 0x41, 0xd1,
- 0x3d, 0x7d, 0x76, 0xc9, 0x6d, 0x2c, 0x11, 0x05, 0x8a, 0xf9, 0xb0, 0x43, 0x78, 0xfe, 0x3f, 0x82,
- 0xb4, 0x67, 0xe0, 0xd3, 0x1d, 0xde, 0xc9, 0x6d, 0xbc, 0x48, 0x31, 0x8f, 0xb0, 0x40, 0x49, 0x25,
- 0x6e, 0x92, 0x0e, 0x7f, 0xd7, 0x50, 0xeb, 0x7d, 0x3e, 0xf7, 0x6b, 0x8f, 0x4a, 0xa9, 0x7f, 0x46,
- 0x07, 0xe9, 0x24, 0x53, 0xaa, 0xa8, 0xa1, 0xf5, 0xb5, 0x41, 0xf3, 0xf8, 0x08, 0x17, 0x9b, 0xde,
- 0x08, 0xe3, 0xd0, 0x75, 0xd2, 0x84, 0xc4, 0x29, 0x1a, 0xc7, 0x43, 0x7c, 0x39, 0xf9, 0x0a, 0xb6,
- 0xba, 0x00, 0x45, 0x47, 0xfa, 0x62, 0xd9, 0xab, 0x24, 0xcb, 0x1e, 0x2a, 0x72, 0xd6, 0x46, 0x55,
- 0x7f, 0x86, 0x9a, 0xa1, 0xe0, 0x31, 0x93, 0x8c, 0x07, 0x20, 0x8c, 0x6a, 0x5f, 0x1b, 0x34, 0x46,
- 0x0f, 0xd6, 0x94, 0xe6, 0xb8, 0x28, 0x59, 0x65, 0x9c, 0xee, 0x20, 0x14, 0x52, 0x41, 0x7d, 0x50,
- 0x20, 0xa4, 0x51, 0xeb, 0xd7, 0x06, 0xcd, 0xe3, 0x13, 0xbc, 0xf7, 0x08, 0x70, 0x79, 0x22, 0x3c,
- 0xde, 0xb0, 0xce, 0x03, 0x25, 0xe6, 0x45, 0x77, 0x45, 0xc1, 0x2a, 0x49, 0xeb, 0x2e, 0x6a, 0x0b,
- 0xb0, 0x3d, 0xca, 0xfc, 0x31, 0xf7, 0x98, 0x3d, 0x37, 0xee, 0x65, 0x1d, 0x9e, 0x27, 0xcb, 0x5e,
- 0xdb, 0x2a, 0x17, 0xfe, 0x2c, 0x7b, 0x47, 0xa5, 0xf3, 0xb1, 0xb9, 0x48, 0x6f, 0x07, 0x8f, 0x41,
- 0x48, 0x26, 0x15, 0x04, 0xea, 0x03, 0xf7, 0x22, 0x1f, 0xb6, 0x38, 0xd6, 0xb6, 0xb6, 0x7e, 0x8a,
- 0x5a, 0x3e, 0x8f, 0x02, 0x75, 0x19, 0x2a, 0xc6, 0x03, 0x69, 0xd4, 0xfb, 0xb5, 0x41, 0x63, 0xd4,
- 0x49, 0x96, 0xbd, 0xd6, 0x45, 0x29, 0x6f, 0x6d, 0xa1, 0xba, 0x2f, 0xd1, 0xfd, 0x1b, 0x53, 0xe9,
- 0x1d, 0x54, 0x73, 0x61, 0x9e, 0x59, 0xd6, 0xb0, 0xd2, 0xa7, 0xfe, 0x10, 0xd5, 0x63, 0xea, 0x45,
- 0x90, 0x6f, 0xd8, 0xca, 0x83, 0x17, 0xd5, 0x33, 0xed, 0xf0, 0x87, 0x86, 0x3a, 0xe5, 0x15, 0xbd,
- 0x63, 0x52, 0xe9, 0x9f, 0x76, 0x8c, 0xc7, 0x77, 0x33, 0x3e, 0x65, 0x67, 0xb6, 0x77, 0xd6, 0x8b,
- 0x3d, 0xf8, 0x97, 0x29, 0x99, 0xfe, 0x06, 0xd5, 0x99, 0x02, 0x5f, 0x1a, 0xd5, 0xcc, 0xb8, 0xc7,
- 0x77, 0x30, 0x6e, 0xd4, 0x5e, 0xeb, 0xd5, 0xdf, 0xa6, 0x4c, 0x2b, 0x17, 0x18, 0x0d, 0x16, 0x2b,
- 0xb3, 0x72, 0xb5, 0x32, 0x2b, 0xd7, 0x2b, 0xb3, 0xf2, 0x2d, 0x31, 0xb5, 0x45, 0x62, 0x6a, 0x57,
- 0x89, 0xa9, 0x5d, 0x27, 0xa6, 0xf6, 0x33, 0x31, 0xb5, 0xef, 0xbf, 0xcc, 0xca, 0xc7, 0x6a, 0x3c,
- 0xfc, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xbf, 0xb4, 0xf1, 0xb4, 0x62, 0x04, 0x00, 0x00,
+ // 593 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x41, 0x6f, 0xd3, 0x3e,
+ 0x18, 0xc6, 0x9b, 0x76, 0xfd, 0x6b, 0x73, 0x37, 0xfd, 0xab, 0x30, 0xa4, 0xa8, 0x87, 0xb4, 0x1a,
+ 0x97, 0x0a, 0x09, 0x7b, 0xdd, 0x06, 0x9a, 0x90, 0x40, 0xa2, 0x68, 0x12, 0x48, 0x9b, 0x56, 0x05,
+ 0x89, 0x03, 0xe2, 0x80, 0x9b, 0xbd, 0x64, 0x26, 0x89, 0x1d, 0xd9, 0x4e, 0xa0, 0x37, 0x3e, 0x02,
+ 0x9f, 0x87, 0x13, 0xc7, 0x1d, 0x77, 0xdc, 0x29, 0x62, 0xe1, 0x5b, 0x70, 0x42, 0x49, 0xca, 0x92,
+ 0xad, 0x9d, 0xd8, 0xcd, 0x7e, 0xdf, 0xe7, 0xf7, 0xd8, 0x7e, 0xfd, 0xa0, 0xe7, 0xfe, 0xbe, 0xc2,
+ 0x4c, 0x10, 0x3f, 0x9e, 0x82, 0xe4, 0xa0, 0x41, 0x91, 0x04, 0xf8, 0x89, 0x90, 0x64, 0xde, 0xa0,
+ 0x11, 0x23, 0x4a, 0x0b, 0x49, 0x3d, 0x20, 0xc9, 0x88, 0x78, 0xc0, 0x41, 0x52, 0x0d, 0x27, 0x38,
+ 0x92, 0x42, 0x0b, 0xf3, 0x7e, 0x29, 0xc3, 0x34, 0x62, 0x78, 0x2e, 0xc3, 0xc9, 0xa8, 0xf7, 0xc8,
+ 0x63, 0xfa, 0x34, 0x9e, 0x62, 0x57, 0x84, 0xc4, 0x13, 0x9e, 0x20, 0x85, 0x7a, 0x1a, 0x7f, 0x2c,
+ 0x76, 0xc5, 0xa6, 0x58, 0x95, 0x2e, 0xbd, 0x87, 0x4b, 0x0f, 0x9b, 0x82, 0xa6, 0x0b, 0x27, 0xf6,
+ 0xf6, 0x2a, 0x6d, 0x48, 0xdd, 0x53, 0xc6, 0x41, 0xce, 0x48, 0xe4, 0x7b, 0x79, 0x41, 0x91, 0x10,
+ 0x34, 0x5d, 0x72, 0xcf, 0x1e, 0xb9, 0x8d, 0x92, 0x31, 0xd7, 0x2c, 0x84, 0x05, 0xe0, 0xc9, 0xbf,
+ 0x00, 0xe5, 0x9e, 0x42, 0x48, 0x17, 0xb8, 0xdd, 0xdb, 0xb8, 0x58, 0xb3, 0x80, 0x30, 0xae, 0x95,
+ 0x96, 0x37, 0xa1, 0xad, 0x1f, 0x2b, 0x68, 0xfd, 0x4d, 0xf9, 0xee, 0x97, 0x01, 0x55, 0xca, 0xfc,
+ 0x80, 0x56, 0xf3, 0x97, 0x9c, 0x50, 0x4d, 0x2d, 0x63, 0x60, 0x0c, 0x3b, 0x3b, 0xdb, 0xb8, 0x9a,
+ 0xf4, 0x95, 0x31, 0x8e, 0x7c, 0x2f, 0x2f, 0x28, 0x9c, 0xab, 0x71, 0x32, 0xc2, 0xc7, 0xd3, 0x4f,
+ 0xe0, 0xea, 0x23, 0xd0, 0x74, 0x6c, 0x9e, 0xa5, 0xfd, 0x46, 0x96, 0xf6, 0x51, 0x55, 0x73, 0xae,
+ 0x5c, 0xcd, 0xc7, 0xa8, 0x13, 0x49, 0x91, 0x30, 0xc5, 0x04, 0x07, 0x69, 0x35, 0x07, 0xc6, 0x70,
+ 0x6d, 0x7c, 0x6f, 0x8e, 0x74, 0x26, 0x55, 0xcb, 0xa9, 0xeb, 0x4c, 0x0f, 0xa1, 0x88, 0x4a, 0x1a,
+ 0x82, 0x06, 0xa9, 0xac, 0xd6, 0xa0, 0x35, 0xec, 0xec, 0xec, 0xe2, 0xa5, 0x21, 0xc0, 0xf5, 0x17,
+ 0xe1, 0xc9, 0x15, 0x75, 0xc0, 0xb5, 0x9c, 0x55, 0xb7, 0xab, 0x1a, 0x4e, 0xcd, 0xda, 0xf4, 0xd1,
+ 0x86, 0x04, 0x37, 0xa0, 0x2c, 0x9c, 0x88, 0x80, 0xb9, 0x33, 0x6b, 0xa5, 0xb8, 0xe1, 0x41, 0x96,
+ 0xf6, 0x37, 0x9c, 0x7a, 0xe3, 0x77, 0xda, 0xdf, 0xae, 0xc5, 0xc7, 0x15, 0x32, 0xcf, 0x0e, 0x9e,
+ 0x80, 0x54, 0x4c, 0x69, 0xe0, 0xfa, 0xad, 0x08, 0xe2, 0x10, 0xae, 0x31, 0xce, 0x75, 0x6f, 0x73,
+ 0x0f, 0xad, 0x87, 0x22, 0xe6, 0xfa, 0x38, 0xd2, 0x4c, 0x70, 0x65, 0xb5, 0x07, 0xad, 0xe1, 0xda,
+ 0xb8, 0x9b, 0xa5, 0xfd, 0xf5, 0xa3, 0x5a, 0xdd, 0xb9, 0xa6, 0x32, 0x0f, 0xd1, 0x26, 0x0d, 0x02,
+ 0xf1, 0xb9, 0x3c, 0xe0, 0xe0, 0x4b, 0x44, 0x79, 0x3e, 0x25, 0xeb, 0xbf, 0x81, 0x31, 0x5c, 0x1d,
+ 0x5b, 0x59, 0xda, 0xdf, 0x7c, 0xb1, 0xa4, 0xef, 0x2c, 0xa5, 0x7a, 0xcf, 0xd0, 0xff, 0x37, 0x66,
+ 0x64, 0x76, 0x51, 0xcb, 0x87, 0x59, 0x11, 0x80, 0x35, 0x27, 0x5f, 0x9a, 0x9b, 0xa8, 0x9d, 0xd0,
+ 0x20, 0x86, 0xf2, 0xbf, 0x9c, 0x72, 0xf3, 0xb4, 0xb9, 0x6f, 0x6c, 0x7d, 0x37, 0x50, 0xb7, 0x3e,
+ 0xf0, 0x43, 0xa6, 0xb4, 0xf9, 0x7e, 0x21, 0x46, 0xf8, 0x6e, 0x31, 0xca, 0xe9, 0x22, 0x44, 0xdd,
+ 0xf9, 0x37, 0xad, 0xfe, 0xad, 0xd4, 0x22, 0xf4, 0x0a, 0xb5, 0x99, 0x86, 0x50, 0x59, 0xcd, 0x22,
+ 0x06, 0x0f, 0xee, 0x10, 0x83, 0xf1, 0xc6, 0xdc, 0xaf, 0xfd, 0x3a, 0x27, 0x9d, 0xd2, 0x60, 0x3c,
+ 0x3c, 0xbb, 0xb4, 0x1b, 0xe7, 0x97, 0x76, 0xe3, 0xe2, 0xd2, 0x6e, 0x7c, 0xcd, 0x6c, 0xe3, 0x2c,
+ 0xb3, 0x8d, 0xf3, 0xcc, 0x36, 0x2e, 0x32, 0xdb, 0xf8, 0x99, 0xd9, 0xc6, 0xb7, 0x5f, 0x76, 0xe3,
+ 0x5d, 0x33, 0x19, 0xfd, 0x09, 0x00, 0x00, 0xff, 0xff, 0xbb, 0x57, 0xe7, 0x15, 0xb0, 0x04, 0x00,
+ 0x00,
}
diff --git a/staging/src/k8s.io/api/storage/v1/generated.proto b/staging/src/k8s.io/api/storage/v1/generated.proto
index b7143c12f58..6a335e5268a 100644
--- a/staging/src/k8s.io/api/storage/v1/generated.proto
+++ b/staging/src/k8s.io/api/storage/v1/generated.proto
@@ -59,6 +59,10 @@ message StorageClass {
// mount of the PVs will simply fail if one is invalid.
// +optional
repeated string mountOptions = 5;
+
+ // AllowVolumeExpansion shows whether the storage class allow volume expand
+ // +optional
+ optional bool allowVolumeExpansion = 6;
}
// StorageClassList is a collection of storage classes.
diff --git a/staging/src/k8s.io/api/storage/v1/types.go b/staging/src/k8s.io/api/storage/v1/types.go
index e843c085a89..9afdafb62ac 100644
--- a/staging/src/k8s.io/api/storage/v1/types.go
+++ b/staging/src/k8s.io/api/storage/v1/types.go
@@ -55,6 +55,10 @@ type StorageClass struct {
// mount of the PVs will simply fail if one is invalid.
// +optional
MountOptions []string `json:"mountOptions,omitempty" protobuf:"bytes,5,opt,name=mountOptions"`
+
+ // AllowVolumeExpansion shows whether the storage class allow volume expand
+ // +optional
+ AllowVolumeExpansion *bool `json:"allowVolumeExpansion,omitempty" protobuf:"varint,6,opt,name=allowVolumeExpansion"`
}
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
diff --git a/staging/src/k8s.io/api/storage/v1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/storage/v1/types_swagger_doc_generated.go
index 7afb7c2265c..b4be857dd1a 100644
--- a/staging/src/k8s.io/api/storage/v1/types_swagger_doc_generated.go
+++ b/staging/src/k8s.io/api/storage/v1/types_swagger_doc_generated.go
@@ -28,12 +28,13 @@ package v1
// AUTO-GENERATED FUNCTIONS START HERE
var map_StorageClass = map[string]string{
- "": "StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.",
- "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata",
- "provisioner": "Provisioner indicates the type of the provisioner.",
- "parameters": "Parameters holds the parameters for the provisioner that should create volumes of this storage class.",
- "reclaimPolicy": "Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.",
- "mountOptions": "Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated - mount of the PVs will simply fail if one is invalid.",
+ "": "StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.",
+ "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata",
+ "provisioner": "Provisioner indicates the type of the provisioner.",
+ "parameters": "Parameters holds the parameters for the provisioner that should create volumes of this storage class.",
+ "reclaimPolicy": "Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.",
+ "mountOptions": "Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated - mount of the PVs will simply fail if one is invalid.",
+ "allowVolumeExpansion": "AllowVolumeExpansion shows whether the storage class allow volume expand",
}
func (StorageClass) SwaggerDoc() map[string]string {
diff --git a/staging/src/k8s.io/api/storage/v1/zz_generated.deepcopy.go b/staging/src/k8s.io/api/storage/v1/zz_generated.deepcopy.go
index 838d2536cd7..50c707abb9d 100644
--- a/staging/src/k8s.io/api/storage/v1/zz_generated.deepcopy.go
+++ b/staging/src/k8s.io/api/storage/v1/zz_generated.deepcopy.go
@@ -74,6 +74,15 @@ func (in *StorageClass) DeepCopyInto(out *StorageClass) {
*out = make([]string, len(*in))
copy(*out, *in)
}
+ if in.AllowVolumeExpansion != nil {
+ in, out := &in.AllowVolumeExpansion, &out.AllowVolumeExpansion
+ if *in == nil {
+ *out = nil
+ } else {
+ *out = new(bool)
+ **out = **in
+ }
+ }
return
}
diff --git a/staging/src/k8s.io/api/storage/v1beta1/generated.pb.go b/staging/src/k8s.io/api/storage/v1beta1/generated.pb.go
index 1887e80f970..b31d6f12296 100644
--- a/staging/src/k8s.io/api/storage/v1beta1/generated.pb.go
+++ b/staging/src/k8s.io/api/storage/v1beta1/generated.pb.go
@@ -136,6 +136,16 @@ func (m *StorageClass) MarshalTo(dAtA []byte) (int, error) {
i += copy(dAtA[i:], s)
}
}
+ if m.AllowVolumeExpansion != nil {
+ dAtA[i] = 0x30
+ i++
+ if *m.AllowVolumeExpansion {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i++
+ }
return i, nil
}
@@ -229,6 +239,9 @@ func (m *StorageClass) Size() (n int) {
n += 1 + l + sovGenerated(uint64(l))
}
}
+ if m.AllowVolumeExpansion != nil {
+ n += 2
+ }
return n
}
@@ -279,6 +292,7 @@ func (this *StorageClass) String() string {
`Parameters:` + mapStringForParameters + `,`,
`ReclaimPolicy:` + valueToStringGenerated(this.ReclaimPolicy) + `,`,
`MountOptions:` + fmt.Sprintf("%v", this.MountOptions) + `,`,
+ `AllowVolumeExpansion:` + valueToStringGenerated(this.AllowVolumeExpansion) + `,`,
`}`,
}, "")
return s
@@ -565,6 +579,27 @@ func (m *StorageClass) Unmarshal(dAtA []byte) error {
}
m.MountOptions = append(m.MountOptions, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
+ case 6:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field AllowVolumeExpansion", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenerated
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= (int(b) & 0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ b := bool(v != 0)
+ m.AllowVolumeExpansion = &b
default:
iNdEx = preIndex
skippy, err := skipGenerated(dAtA[iNdEx:])
@@ -807,40 +842,42 @@ func init() {
}
var fileDescriptorGenerated = []byte{
- // 554 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x3f, 0x8f, 0x12, 0x41,
- 0x18, 0xc6, 0xd9, 0x43, 0xe2, 0xdd, 0x00, 0x91, 0xac, 0x16, 0x1b, 0x8a, 0x85, 0x50, 0xd1, 0xdc,
- 0xcc, 0x71, 0x9e, 0x86, 0x98, 0xd8, 0x70, 0xb9, 0xc2, 0x44, 0x72, 0x64, 0x4d, 0x2c, 0x8c, 0x85,
- 0xc3, 0xf2, 0xba, 0x8c, 0xfb, 0x67, 0x36, 0x33, 0xb3, 0x24, 0x74, 0x7e, 0x04, 0xbf, 0x91, 0x2d,
- 0xe5, 0x95, 0x57, 0x11, 0x59, 0x3f, 0x84, 0x89, 0x95, 0xd9, 0x3f, 0xb2, 0x0b, 0x48, 0xbc, 0x6e,
- 0xe6, 0x7d, 0x9f, 0xdf, 0x33, 0x33, 0xef, 0x33, 0xe8, 0xda, 0x1d, 0x4a, 0xcc, 0x38, 0x71, 0xa3,
- 0x29, 0x88, 0x00, 0x14, 0x48, 0xb2, 0x80, 0x60, 0xc6, 0x05, 0xc9, 0x1b, 0x34, 0x64, 0x44, 0x2a,
- 0x2e, 0xa8, 0x03, 0x64, 0x31, 0x98, 0x82, 0xa2, 0x03, 0xe2, 0x40, 0x00, 0x82, 0x2a, 0x98, 0xe1,
- 0x50, 0x70, 0xc5, 0xf5, 0x76, 0xa6, 0xc5, 0x34, 0x64, 0x38, 0xd7, 0xe2, 0x5c, 0xdb, 0x3e, 0x77,
- 0x98, 0x9a, 0x47, 0x53, 0x6c, 0x73, 0x9f, 0x38, 0xdc, 0xe1, 0x24, 0x45, 0xa6, 0xd1, 0xe7, 0x74,
- 0x97, 0x6e, 0xd2, 0x55, 0x66, 0xd5, 0xee, 0x95, 0x8e, 0xb5, 0xb9, 0x48, 0xce, 0xdc, 0x3f, 0xae,
- 0x7d, 0x55, 0x68, 0x7c, 0x6a, 0xcf, 0x59, 0x00, 0x62, 0x49, 0x42, 0xd7, 0x49, 0x0a, 0x92, 0xf8,
- 0xa0, 0xe8, 0xbf, 0x28, 0x72, 0x8c, 0x12, 0x51, 0xa0, 0x98, 0x0f, 0x07, 0xc0, 0xcb, 0xff, 0x01,
- 0xd2, 0x9e, 0x83, 0x4f, 0x0f, 0xb8, 0xe7, 0xc7, 0xb8, 0x48, 0x31, 0x8f, 0xb0, 0x40, 0x49, 0x25,
- 0xf6, 0xa1, 0xde, 0xaf, 0x2a, 0x6a, 0xbc, 0xcb, 0x46, 0x77, 0xed, 0x51, 0x29, 0xf5, 0x4f, 0xe8,
- 0x34, 0x79, 0xc9, 0x8c, 0x2a, 0x6a, 0x68, 0x5d, 0xad, 0x5f, 0xbf, 0xbc, 0xc0, 0xc5, 0x98, 0xb7,
- 0xc6, 0x38, 0x74, 0x9d, 0xa4, 0x20, 0x71, 0xa2, 0xc6, 0x8b, 0x01, 0xbe, 0x9d, 0x7e, 0x01, 0x5b,
- 0x8d, 0x41, 0xd1, 0x91, 0xbe, 0x5a, 0x77, 0x2a, 0xf1, 0xba, 0x83, 0x8a, 0x9a, 0xb5, 0x75, 0xd5,
- 0x5f, 0xa0, 0x7a, 0x28, 0xf8, 0x82, 0x49, 0xc6, 0x03, 0x10, 0xc6, 0x49, 0x57, 0xeb, 0x9f, 0x8d,
- 0x9e, 0xe6, 0x48, 0x7d, 0x52, 0xb4, 0xac, 0xb2, 0x4e, 0xf7, 0x10, 0x0a, 0xa9, 0xa0, 0x3e, 0x28,
- 0x10, 0xd2, 0xa8, 0x76, 0xab, 0xfd, 0xfa, 0xe5, 0x10, 0x1f, 0xff, 0x01, 0xb8, 0xfc, 0x2c, 0x3c,
- 0xd9, 0xa2, 0x37, 0x81, 0x12, 0xcb, 0xe2, 0x8a, 0x45, 0xc3, 0x2a, 0xf9, 0xeb, 0x2e, 0x6a, 0x0a,
- 0xb0, 0x3d, 0xca, 0xfc, 0x09, 0xf7, 0x98, 0xbd, 0x34, 0x1e, 0xa5, 0xd7, 0xbc, 0x89, 0xd7, 0x9d,
- 0xa6, 0x55, 0x6e, 0xfc, 0x5e, 0x77, 0x2e, 0x0e, 0xff, 0x0e, 0x9e, 0x80, 0x90, 0x4c, 0x2a, 0x08,
- 0xd4, 0x7b, 0xee, 0x45, 0x3e, 0xec, 0x30, 0xd6, 0xae, 0xb7, 0x7e, 0x85, 0x1a, 0x3e, 0x8f, 0x02,
- 0x75, 0x1b, 0x2a, 0xc6, 0x03, 0x69, 0xd4, 0xba, 0xd5, 0xfe, 0xd9, 0xa8, 0x15, 0xaf, 0x3b, 0x8d,
- 0x71, 0xa9, 0x6e, 0xed, 0xa8, 0xda, 0xaf, 0xd1, 0x93, 0xbd, 0x57, 0xe9, 0x2d, 0x54, 0x75, 0x61,
- 0x99, 0xe6, 0x76, 0x66, 0x25, 0x4b, 0xfd, 0x19, 0xaa, 0x2d, 0xa8, 0x17, 0x41, 0x36, 0x66, 0x2b,
- 0xdb, 0xbc, 0x3a, 0x19, 0x6a, 0xbd, 0xef, 0x1a, 0x6a, 0x95, 0x47, 0xf4, 0x96, 0x49, 0xa5, 0x7f,
- 0x3c, 0x48, 0x1f, 0x3f, 0x2c, 0xfd, 0x84, 0x4e, 0xb3, 0x6f, 0xe5, 0x83, 0x3d, 0xfd, 0x5b, 0x29,
- 0x25, 0x3f, 0x46, 0x35, 0xa6, 0xc0, 0x97, 0xc6, 0x49, 0x9a, 0x5e, 0xff, 0xa1, 0xe9, 0x8d, 0x9a,
- 0xb9, 0x69, 0xed, 0x4d, 0x82, 0x5b, 0x99, 0xcb, 0xe8, 0x7c, 0xb5, 0x31, 0x2b, 0x77, 0x1b, 0xb3,
- 0x72, 0xbf, 0x31, 0x2b, 0x5f, 0x63, 0x53, 0x5b, 0xc5, 0xa6, 0x76, 0x17, 0x9b, 0xda, 0x7d, 0x6c,
- 0x6a, 0x3f, 0x62, 0x53, 0xfb, 0xf6, 0xd3, 0xac, 0x7c, 0x78, 0x9c, 0x3b, 0xfe, 0x09, 0x00, 0x00,
- 0xff, 0xff, 0x2a, 0xfd, 0x7a, 0x0a, 0x73, 0x04, 0x00, 0x00,
+ // 589 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0x4f, 0x4f, 0xd4, 0x40,
+ 0x18, 0xc6, 0xb7, 0x2c, 0xab, 0x30, 0x0b, 0x71, 0x53, 0x39, 0x34, 0x7b, 0xe8, 0x6e, 0x38, 0xf5,
+ 0xc2, 0x0c, 0x20, 0x1a, 0x62, 0xe2, 0xc1, 0x12, 0x0e, 0x26, 0x10, 0x36, 0x35, 0xf1, 0x60, 0x3c,
+ 0x38, 0x5b, 0x5e, 0xcb, 0xd8, 0x76, 0xa6, 0x99, 0x99, 0xae, 0xee, 0xcd, 0x8f, 0xe0, 0x37, 0xf2,
+ 0x64, 0xc2, 0x91, 0x23, 0xa7, 0x46, 0xea, 0xb7, 0xf0, 0x64, 0xfa, 0x47, 0x5a, 0x58, 0x88, 0xdc,
+ 0x3a, 0xef, 0xfb, 0xfc, 0x9e, 0xb7, 0xf3, 0xce, 0x83, 0x0e, 0xc2, 0x7d, 0x85, 0x99, 0x20, 0x61,
+ 0x3a, 0x05, 0xc9, 0x41, 0x83, 0x22, 0x33, 0xe0, 0xa7, 0x42, 0x92, 0xba, 0x41, 0x13, 0x46, 0x94,
+ 0x16, 0x92, 0x06, 0x40, 0x66, 0x3b, 0x53, 0xd0, 0x74, 0x87, 0x04, 0xc0, 0x41, 0x52, 0x0d, 0xa7,
+ 0x38, 0x91, 0x42, 0x0b, 0x73, 0x58, 0x69, 0x31, 0x4d, 0x18, 0xae, 0xb5, 0xb8, 0xd6, 0x0e, 0xb7,
+ 0x02, 0xa6, 0xcf, 0xd2, 0x29, 0xf6, 0x45, 0x4c, 0x02, 0x11, 0x08, 0x52, 0x22, 0xd3, 0xf4, 0x53,
+ 0x79, 0x2a, 0x0f, 0xe5, 0x57, 0x65, 0x35, 0xdc, 0x6c, 0x8d, 0xf5, 0x85, 0x2c, 0x66, 0xde, 0x1e,
+ 0x37, 0xdc, 0x6b, 0x34, 0x31, 0xf5, 0xcf, 0x18, 0x07, 0x39, 0x27, 0x49, 0x18, 0x14, 0x05, 0x45,
+ 0x62, 0xd0, 0xf4, 0x2e, 0x8a, 0xdc, 0x47, 0xc9, 0x94, 0x6b, 0x16, 0xc3, 0x02, 0xf0, 0xe2, 0x7f,
+ 0x80, 0xf2, 0xcf, 0x20, 0xa6, 0x0b, 0xdc, 0xb3, 0xfb, 0xb8, 0x54, 0xb3, 0x88, 0x30, 0xae, 0x95,
+ 0x96, 0xb7, 0xa1, 0xcd, 0x9f, 0xcb, 0x68, 0xed, 0x6d, 0xb5, 0xba, 0x83, 0x88, 0x2a, 0x65, 0x7e,
+ 0x44, 0x2b, 0xc5, 0x4d, 0x4e, 0xa9, 0xa6, 0x96, 0x31, 0x36, 0x9c, 0xfe, 0xee, 0x36, 0x6e, 0xd6,
+ 0x7c, 0x6d, 0x8c, 0x93, 0x30, 0x28, 0x0a, 0x0a, 0x17, 0x6a, 0x3c, 0xdb, 0xc1, 0x27, 0xd3, 0xcf,
+ 0xe0, 0xeb, 0x63, 0xd0, 0xd4, 0x35, 0xcf, 0xb3, 0x51, 0x27, 0xcf, 0x46, 0xa8, 0xa9, 0x79, 0xd7,
+ 0xae, 0xe6, 0x73, 0xd4, 0x4f, 0xa4, 0x98, 0x31, 0xc5, 0x04, 0x07, 0x69, 0x2d, 0x8d, 0x0d, 0x67,
+ 0xd5, 0x7d, 0x5a, 0x23, 0xfd, 0x49, 0xd3, 0xf2, 0xda, 0x3a, 0x33, 0x42, 0x28, 0xa1, 0x92, 0xc6,
+ 0xa0, 0x41, 0x2a, 0xab, 0x3b, 0xee, 0x3a, 0xfd, 0xdd, 0x7d, 0x7c, 0x7f, 0x02, 0x70, 0xfb, 0x5a,
+ 0x78, 0x72, 0x8d, 0x1e, 0x72, 0x2d, 0xe7, 0xcd, 0x2f, 0x36, 0x0d, 0xaf, 0xe5, 0x6f, 0x86, 0x68,
+ 0x5d, 0x82, 0x1f, 0x51, 0x16, 0x4f, 0x44, 0xc4, 0xfc, 0xb9, 0xb5, 0x5c, 0xfe, 0xe6, 0x61, 0x9e,
+ 0x8d, 0xd6, 0xbd, 0x76, 0xe3, 0x4f, 0x36, 0xda, 0x5e, 0xcc, 0x0e, 0x9e, 0x80, 0x54, 0x4c, 0x69,
+ 0xe0, 0xfa, 0x9d, 0x88, 0xd2, 0x18, 0x6e, 0x30, 0xde, 0x4d, 0x6f, 0x73, 0x0f, 0xad, 0xc5, 0x22,
+ 0xe5, 0xfa, 0x24, 0xd1, 0x4c, 0x70, 0x65, 0xf5, 0xc6, 0x5d, 0x67, 0xd5, 0x1d, 0xe4, 0xd9, 0x68,
+ 0xed, 0xb8, 0x55, 0xf7, 0x6e, 0xa8, 0xcc, 0x23, 0xb4, 0x41, 0xa3, 0x48, 0x7c, 0xa9, 0x06, 0x1c,
+ 0x7e, 0x4d, 0x28, 0x2f, 0x56, 0x65, 0x3d, 0x1a, 0x1b, 0xce, 0x8a, 0x6b, 0xe5, 0xd9, 0x68, 0xe3,
+ 0xf5, 0x1d, 0x7d, 0xef, 0x4e, 0x6a, 0xf8, 0x0a, 0x3d, 0xb9, 0xb5, 0x23, 0x73, 0x80, 0xba, 0x21,
+ 0xcc, 0xcb, 0x14, 0xac, 0x7a, 0xc5, 0xa7, 0xb9, 0x81, 0x7a, 0x33, 0x1a, 0xa5, 0x50, 0x3d, 0x9a,
+ 0x57, 0x1d, 0x5e, 0x2e, 0xed, 0x1b, 0x9b, 0x3f, 0x0c, 0x34, 0x68, 0x2f, 0xfc, 0x88, 0x29, 0x6d,
+ 0x7e, 0x58, 0xc8, 0x12, 0x7e, 0x58, 0x96, 0x0a, 0xba, 0x4c, 0xd2, 0xa0, 0x7e, 0xa6, 0x95, 0x7f,
+ 0x95, 0x56, 0x8e, 0x8e, 0x51, 0x8f, 0x69, 0x88, 0x95, 0xb5, 0x54, 0x66, 0xc1, 0x79, 0x68, 0x16,
+ 0xdc, 0xf5, 0xda, 0xb4, 0xf7, 0xa6, 0xc0, 0xbd, 0xca, 0xc5, 0xdd, 0x3a, 0xbf, 0xb2, 0x3b, 0x17,
+ 0x57, 0x76, 0xe7, 0xf2, 0xca, 0xee, 0x7c, 0xcb, 0x6d, 0xe3, 0x3c, 0xb7, 0x8d, 0x8b, 0xdc, 0x36,
+ 0x2e, 0x73, 0xdb, 0xf8, 0x95, 0xdb, 0xc6, 0xf7, 0xdf, 0x76, 0xe7, 0xfd, 0xe3, 0xda, 0xf1, 0x6f,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x1b, 0xae, 0x44, 0x72, 0xc1, 0x04, 0x00, 0x00,
}
diff --git a/staging/src/k8s.io/api/storage/v1beta1/generated.proto b/staging/src/k8s.io/api/storage/v1beta1/generated.proto
index 4332d3fbcd5..f8070b67cf4 100644
--- a/staging/src/k8s.io/api/storage/v1beta1/generated.proto
+++ b/staging/src/k8s.io/api/storage/v1beta1/generated.proto
@@ -59,6 +59,10 @@ message StorageClass {
// mount of the PVs will simply fail if one is invalid.
// +optional
repeated string mountOptions = 5;
+
+ // AllowVolumeExpansion shows whether the storage class allow volume expand
+ // +optional
+ optional bool allowVolumeExpansion = 6;
}
// StorageClassList is a collection of storage classes.
diff --git a/staging/src/k8s.io/api/storage/v1beta1/types.go b/staging/src/k8s.io/api/storage/v1beta1/types.go
index d5e2fe585e2..e5036b55b33 100644
--- a/staging/src/k8s.io/api/storage/v1beta1/types.go
+++ b/staging/src/k8s.io/api/storage/v1beta1/types.go
@@ -55,6 +55,10 @@ type StorageClass struct {
// mount of the PVs will simply fail if one is invalid.
// +optional
MountOptions []string `json:"mountOptions,omitempty" protobuf:"bytes,5,opt,name=mountOptions"`
+
+ // AllowVolumeExpansion shows whether the storage class allow volume expand
+ // +optional
+ AllowVolumeExpansion *bool `json:"allowVolumeExpansion,omitempty" protobuf:"varint,6,opt,name=allowVolumeExpansion"`
}
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
diff --git a/staging/src/k8s.io/api/storage/v1beta1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/storage/v1beta1/types_swagger_doc_generated.go
index ca5c041a03b..e2148c231f4 100644
--- a/staging/src/k8s.io/api/storage/v1beta1/types_swagger_doc_generated.go
+++ b/staging/src/k8s.io/api/storage/v1beta1/types_swagger_doc_generated.go
@@ -28,12 +28,13 @@ package v1beta1
// AUTO-GENERATED FUNCTIONS START HERE
var map_StorageClass = map[string]string{
- "": "StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.",
- "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata",
- "provisioner": "Provisioner indicates the type of the provisioner.",
- "parameters": "Parameters holds the parameters for the provisioner that should create volumes of this storage class.",
- "reclaimPolicy": "Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.",
- "mountOptions": "Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated - mount of the PVs will simply fail if one is invalid.",
+ "": "StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.",
+ "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata",
+ "provisioner": "Provisioner indicates the type of the provisioner.",
+ "parameters": "Parameters holds the parameters for the provisioner that should create volumes of this storage class.",
+ "reclaimPolicy": "Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.",
+ "mountOptions": "Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated - mount of the PVs will simply fail if one is invalid.",
+ "allowVolumeExpansion": "AllowVolumeExpansion shows whether the storage class allow volume expand",
}
func (StorageClass) SwaggerDoc() map[string]string {
diff --git a/staging/src/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go b/staging/src/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go
index cca5a200b02..bf1f91a67d7 100644
--- a/staging/src/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go
+++ b/staging/src/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go
@@ -74,6 +74,15 @@ func (in *StorageClass) DeepCopyInto(out *StorageClass) {
*out = make([]string, len(*in))
copy(*out, *in)
}
+ if in.AllowVolumeExpansion != nil {
+ in, out := &in.AllowVolumeExpansion, &out.AllowVolumeExpansion
+ if *in == nil {
+ *out = nil
+ } else {
+ *out = new(bool)
+ **out = **in
+ }
+ }
return
}