From 585f3649ab646fe984ae07d952101ed10e3687af Mon Sep 17 00:00:00 2001 From: Pau Rosello Date: Thu, 16 Apr 2020 14:47:54 +0200 Subject: [PATCH 1/5] Add fields to AWSCluster --- ...rastructure.giantswarm.io_awsclusters.yaml | 10 + .../v1alpha1/zz_generated.deepcopy.go | 595 ++++ .../backup/v1alpha1/zz_generated.deepcopy.go | 163 ++ .../core/v1alpha1/zz_generated.deepcopy.go | 2500 +++++++++++++++++ .../example/v1alpha1/zz_generated.deepcopy.go | 101 + .../v1alpha2/zz_generated.deepcopy.go | 784 ++++++ .../v1alpha1/zz_generated.deepcopy.go | 1580 +++++++++++ .../release/v1alpha1/zz_generated.deepcopy.go | 259 ++ .../v1alpha2/aws_cluster_types.go | 9 + pkg/crd/pkged.go | 2 +- 10 files changed, 6002 insertions(+), 1 deletion(-) create mode 100644 github/giantswarm/apiextensions/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go create mode 100644 github/giantswarm/apiextensions/pkg/apis/backup/v1alpha1/zz_generated.deepcopy.go create mode 100644 github/giantswarm/apiextensions/pkg/apis/core/v1alpha1/zz_generated.deepcopy.go create mode 100644 github/giantswarm/apiextensions/pkg/apis/example/v1alpha1/zz_generated.deepcopy.go create mode 100644 github/giantswarm/apiextensions/pkg/apis/infrastructure/v1alpha2/zz_generated.deepcopy.go create mode 100644 github/giantswarm/apiextensions/pkg/apis/provider/v1alpha1/zz_generated.deepcopy.go create mode 100644 github/giantswarm/apiextensions/pkg/apis/release/v1alpha1/zz_generated.deepcopy.go diff --git a/config/crd/bases/infrastructure.giantswarm.io_awsclusters.yaml b/config/crd/bases/infrastructure.giantswarm.io_awsclusters.yaml index 56bd060a2..fe4cb4a93 100644 --- a/config/crd/bases/infrastructure.giantswarm.io_awsclusters.yaml +++ b/config/crd/bases/infrastructure.giantswarm.io_awsclusters.yaml @@ -107,6 +107,16 @@ spec: - availabilityZone - instanceType type: object + pods: + description: Pod network configuration. + properties: + cidrBlock: + description: Subnet size, expresses as the count of leading + 1 bits in the subnet mask of this subnet. + type: string + required: + - cidrBlock + type: object region: description: Region is the AWS region the cluster is to be running in. diff --git a/github/giantswarm/apiextensions/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go b/github/giantswarm/apiextensions/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 000000000..8fb898661 --- /dev/null +++ b/github/giantswarm/apiextensions/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,595 @@ +// +build !ignore_autogenerated + +/* +Copyright 2020 Giant Swarm GmbH. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *App) DeepCopyInto(out *App) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new App. +func (in *App) DeepCopy() *App { + if in == nil { + return nil + } + out := new(App) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *App) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppCatalog) DeepCopyInto(out *AppCatalog) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalog. +func (in *AppCatalog) DeepCopy() *AppCatalog { + if in == nil { + return nil + } + out := new(AppCatalog) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AppCatalog) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppCatalogList) DeepCopyInto(out *AppCatalogList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]AppCatalog, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogList. +func (in *AppCatalogList) DeepCopy() *AppCatalogList { + if in == nil { + return nil + } + out := new(AppCatalogList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AppCatalogList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppCatalogSpec) DeepCopyInto(out *AppCatalogSpec) { + *out = *in + out.Config = in.Config + out.Storage = in.Storage + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogSpec. +func (in *AppCatalogSpec) DeepCopy() *AppCatalogSpec { + if in == nil { + return nil + } + out := new(AppCatalogSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppCatalogSpecConfig) DeepCopyInto(out *AppCatalogSpecConfig) { + *out = *in + out.ConfigMap = in.ConfigMap + out.Secret = in.Secret + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogSpecConfig. +func (in *AppCatalogSpecConfig) DeepCopy() *AppCatalogSpecConfig { + if in == nil { + return nil + } + out := new(AppCatalogSpecConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppCatalogSpecConfigConfigMap) DeepCopyInto(out *AppCatalogSpecConfigConfigMap) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogSpecConfigConfigMap. +func (in *AppCatalogSpecConfigConfigMap) DeepCopy() *AppCatalogSpecConfigConfigMap { + if in == nil { + return nil + } + out := new(AppCatalogSpecConfigConfigMap) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppCatalogSpecConfigSecret) DeepCopyInto(out *AppCatalogSpecConfigSecret) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogSpecConfigSecret. +func (in *AppCatalogSpecConfigSecret) DeepCopy() *AppCatalogSpecConfigSecret { + if in == nil { + return nil + } + out := new(AppCatalogSpecConfigSecret) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppCatalogSpecStorage) DeepCopyInto(out *AppCatalogSpecStorage) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogSpecStorage. +func (in *AppCatalogSpecStorage) DeepCopy() *AppCatalogSpecStorage { + if in == nil { + return nil + } + out := new(AppCatalogSpecStorage) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppList) DeepCopyInto(out *AppList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]App, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppList. +func (in *AppList) DeepCopy() *AppList { + if in == nil { + return nil + } + out := new(AppList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AppList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppSpec) DeepCopyInto(out *AppSpec) { + *out = *in + out.Config = in.Config + out.KubeConfig = in.KubeConfig + out.UserConfig = in.UserConfig + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpec. +func (in *AppSpec) DeepCopy() *AppSpec { + if in == nil { + return nil + } + out := new(AppSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppSpecConfig) DeepCopyInto(out *AppSpecConfig) { + *out = *in + out.ConfigMap = in.ConfigMap + out.Secret = in.Secret + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecConfig. +func (in *AppSpecConfig) DeepCopy() *AppSpecConfig { + if in == nil { + return nil + } + out := new(AppSpecConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppSpecConfigConfigMap) DeepCopyInto(out *AppSpecConfigConfigMap) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecConfigConfigMap. +func (in *AppSpecConfigConfigMap) DeepCopy() *AppSpecConfigConfigMap { + if in == nil { + return nil + } + out := new(AppSpecConfigConfigMap) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppSpecConfigSecret) DeepCopyInto(out *AppSpecConfigSecret) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecConfigSecret. +func (in *AppSpecConfigSecret) DeepCopy() *AppSpecConfigSecret { + if in == nil { + return nil + } + out := new(AppSpecConfigSecret) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppSpecKubeConfig) DeepCopyInto(out *AppSpecKubeConfig) { + *out = *in + out.Context = in.Context + out.Secret = in.Secret + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecKubeConfig. +func (in *AppSpecKubeConfig) DeepCopy() *AppSpecKubeConfig { + if in == nil { + return nil + } + out := new(AppSpecKubeConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppSpecKubeConfigContext) DeepCopyInto(out *AppSpecKubeConfigContext) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecKubeConfigContext. +func (in *AppSpecKubeConfigContext) DeepCopy() *AppSpecKubeConfigContext { + if in == nil { + return nil + } + out := new(AppSpecKubeConfigContext) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppSpecKubeConfigSecret) DeepCopyInto(out *AppSpecKubeConfigSecret) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecKubeConfigSecret. +func (in *AppSpecKubeConfigSecret) DeepCopy() *AppSpecKubeConfigSecret { + if in == nil { + return nil + } + out := new(AppSpecKubeConfigSecret) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppSpecUserConfig) DeepCopyInto(out *AppSpecUserConfig) { + *out = *in + out.ConfigMap = in.ConfigMap + out.Secret = in.Secret + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecUserConfig. +func (in *AppSpecUserConfig) DeepCopy() *AppSpecUserConfig { + if in == nil { + return nil + } + out := new(AppSpecUserConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppSpecUserConfigConfigMap) DeepCopyInto(out *AppSpecUserConfigConfigMap) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecUserConfigConfigMap. +func (in *AppSpecUserConfigConfigMap) DeepCopy() *AppSpecUserConfigConfigMap { + if in == nil { + return nil + } + out := new(AppSpecUserConfigConfigMap) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppSpecUserConfigSecret) DeepCopyInto(out *AppSpecUserConfigSecret) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecUserConfigSecret. +func (in *AppSpecUserConfigSecret) DeepCopy() *AppSpecUserConfigSecret { + if in == nil { + return nil + } + out := new(AppSpecUserConfigSecret) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppStatus) DeepCopyInto(out *AppStatus) { + *out = *in + in.Release.DeepCopyInto(&out.Release) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppStatus. +func (in *AppStatus) DeepCopy() *AppStatus { + if in == nil { + return nil + } + out := new(AppStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AppStatusRelease) DeepCopyInto(out *AppStatusRelease) { + *out = *in + in.LastDeployed.DeepCopyInto(&out.LastDeployed) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppStatusRelease. +func (in *AppStatusRelease) DeepCopy() *AppStatusRelease { + if in == nil { + return nil + } + out := new(AppStatusRelease) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Chart) DeepCopyInto(out *Chart) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Chart. +func (in *Chart) DeepCopy() *Chart { + if in == nil { + return nil + } + out := new(Chart) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Chart) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ChartList) DeepCopyInto(out *ChartList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Chart, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartList. +func (in *ChartList) DeepCopy() *ChartList { + if in == nil { + return nil + } + out := new(ChartList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ChartList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ChartSpec) DeepCopyInto(out *ChartSpec) { + *out = *in + out.Config = in.Config + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartSpec. +func (in *ChartSpec) DeepCopy() *ChartSpec { + if in == nil { + return nil + } + out := new(ChartSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ChartSpecConfig) DeepCopyInto(out *ChartSpecConfig) { + *out = *in + out.ConfigMap = in.ConfigMap + out.Secret = in.Secret + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartSpecConfig. +func (in *ChartSpecConfig) DeepCopy() *ChartSpecConfig { + if in == nil { + return nil + } + out := new(ChartSpecConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ChartSpecConfigConfigMap) DeepCopyInto(out *ChartSpecConfigConfigMap) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartSpecConfigConfigMap. +func (in *ChartSpecConfigConfigMap) DeepCopy() *ChartSpecConfigConfigMap { + if in == nil { + return nil + } + out := new(ChartSpecConfigConfigMap) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ChartSpecConfigSecret) DeepCopyInto(out *ChartSpecConfigSecret) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartSpecConfigSecret. +func (in *ChartSpecConfigSecret) DeepCopy() *ChartSpecConfigSecret { + if in == nil { + return nil + } + out := new(ChartSpecConfigSecret) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ChartStatus) DeepCopyInto(out *ChartStatus) { + *out = *in + in.Release.DeepCopyInto(&out.Release) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartStatus. +func (in *ChartStatus) DeepCopy() *ChartStatus { + if in == nil { + return nil + } + out := new(ChartStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ChartStatusRelease) DeepCopyInto(out *ChartStatusRelease) { + *out = *in + in.LastDeployed.DeepCopyInto(&out.LastDeployed) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartStatusRelease. +func (in *ChartStatusRelease) DeepCopy() *ChartStatusRelease { + if in == nil { + return nil + } + out := new(ChartStatusRelease) + in.DeepCopyInto(out) + return out +} diff --git a/github/giantswarm/apiextensions/pkg/apis/backup/v1alpha1/zz_generated.deepcopy.go b/github/giantswarm/apiextensions/pkg/apis/backup/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 000000000..6b2a1e60d --- /dev/null +++ b/github/giantswarm/apiextensions/pkg/apis/backup/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,163 @@ +// +build !ignore_autogenerated + +/* +Copyright 2020 Giant Swarm GmbH. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ETCDBackup) DeepCopyInto(out *ETCDBackup) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ETCDBackup. +func (in *ETCDBackup) DeepCopy() *ETCDBackup { + if in == nil { + return nil + } + out := new(ETCDBackup) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ETCDBackup) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ETCDBackupList) DeepCopyInto(out *ETCDBackupList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ETCDBackup, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ETCDBackupList. +func (in *ETCDBackupList) DeepCopy() *ETCDBackupList { + if in == nil { + return nil + } + out := new(ETCDBackupList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ETCDBackupList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ETCDBackupSpec) DeepCopyInto(out *ETCDBackupSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ETCDBackupSpec. +func (in *ETCDBackupSpec) DeepCopy() *ETCDBackupSpec { + if in == nil { + return nil + } + out := new(ETCDBackupSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ETCDBackupStatus) DeepCopyInto(out *ETCDBackupStatus) { + *out = *in + if in.Instances != nil { + in, out := &in.Instances, &out.Instances + *out = make(map[string]ETCDInstanceBackupStatusIndex, len(*in)) + for key, val := range *in { + (*out)[key] = *val.DeepCopy() + } + } + in.StartedTimestamp.DeepCopyInto(&out.StartedTimestamp) + in.FinishedTimestamp.DeepCopyInto(&out.FinishedTimestamp) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ETCDBackupStatus. +func (in *ETCDBackupStatus) DeepCopy() *ETCDBackupStatus { + if in == nil { + return nil + } + out := new(ETCDBackupStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ETCDInstanceBackupStatus) DeepCopyInto(out *ETCDInstanceBackupStatus) { + *out = *in + in.StartedTimestamp.DeepCopyInto(&out.StartedTimestamp) + in.FinishedTimestamp.DeepCopyInto(&out.FinishedTimestamp) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ETCDInstanceBackupStatus. +func (in *ETCDInstanceBackupStatus) DeepCopy() *ETCDInstanceBackupStatus { + if in == nil { + return nil + } + out := new(ETCDInstanceBackupStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ETCDInstanceBackupStatusIndex) DeepCopyInto(out *ETCDInstanceBackupStatusIndex) { + *out = *in + in.V2.DeepCopyInto(&out.V2) + in.V3.DeepCopyInto(&out.V3) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ETCDInstanceBackupStatusIndex. +func (in *ETCDInstanceBackupStatusIndex) DeepCopy() *ETCDInstanceBackupStatusIndex { + if in == nil { + return nil + } + out := new(ETCDInstanceBackupStatusIndex) + in.DeepCopyInto(out) + return out +} diff --git a/github/giantswarm/apiextensions/pkg/apis/core/v1alpha1/zz_generated.deepcopy.go b/github/giantswarm/apiextensions/pkg/apis/core/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 000000000..c5a2e70aa --- /dev/null +++ b/github/giantswarm/apiextensions/pkg/apis/core/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,2500 @@ +// +build !ignore_autogenerated + +/* +Copyright 2020 Giant Swarm GmbH. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterConfig) DeepCopyInto(out *AWSClusterConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterConfig. +func (in *AWSClusterConfig) DeepCopy() *AWSClusterConfig { + if in == nil { + return nil + } + out := new(AWSClusterConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AWSClusterConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterConfigList) DeepCopyInto(out *AWSClusterConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]AWSClusterConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterConfigList. +func (in *AWSClusterConfigList) DeepCopy() *AWSClusterConfigList { + if in == nil { + return nil + } + out := new(AWSClusterConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AWSClusterConfigList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterConfigSpec) DeepCopyInto(out *AWSClusterConfigSpec) { + *out = *in + in.Guest.DeepCopyInto(&out.Guest) + out.VersionBundle = in.VersionBundle + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterConfigSpec. +func (in *AWSClusterConfigSpec) DeepCopy() *AWSClusterConfigSpec { + if in == nil { + return nil + } + out := new(AWSClusterConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterConfigSpecGuest) DeepCopyInto(out *AWSClusterConfigSpecGuest) { + *out = *in + in.ClusterGuestConfig.DeepCopyInto(&out.ClusterGuestConfig) + out.CredentialSecret = in.CredentialSecret + if in.Masters != nil { + in, out := &in.Masters, &out.Masters + *out = make([]AWSClusterConfigSpecGuestMaster, len(*in)) + copy(*out, *in) + } + if in.Workers != nil { + in, out := &in.Workers, &out.Workers + *out = make([]AWSClusterConfigSpecGuestWorker, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterConfigSpecGuest. +func (in *AWSClusterConfigSpecGuest) DeepCopy() *AWSClusterConfigSpecGuest { + if in == nil { + return nil + } + out := new(AWSClusterConfigSpecGuest) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterConfigSpecGuestCredentialSecret) DeepCopyInto(out *AWSClusterConfigSpecGuestCredentialSecret) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterConfigSpecGuestCredentialSecret. +func (in *AWSClusterConfigSpecGuestCredentialSecret) DeepCopy() *AWSClusterConfigSpecGuestCredentialSecret { + if in == nil { + return nil + } + out := new(AWSClusterConfigSpecGuestCredentialSecret) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterConfigSpecGuestMaster) DeepCopyInto(out *AWSClusterConfigSpecGuestMaster) { + *out = *in + out.AWSClusterConfigSpecGuestNode = in.AWSClusterConfigSpecGuestNode + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterConfigSpecGuestMaster. +func (in *AWSClusterConfigSpecGuestMaster) DeepCopy() *AWSClusterConfigSpecGuestMaster { + if in == nil { + return nil + } + out := new(AWSClusterConfigSpecGuestMaster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterConfigSpecGuestNode) DeepCopyInto(out *AWSClusterConfigSpecGuestNode) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterConfigSpecGuestNode. +func (in *AWSClusterConfigSpecGuestNode) DeepCopy() *AWSClusterConfigSpecGuestNode { + if in == nil { + return nil + } + out := new(AWSClusterConfigSpecGuestNode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterConfigSpecGuestWorker) DeepCopyInto(out *AWSClusterConfigSpecGuestWorker) { + *out = *in + out.AWSClusterConfigSpecGuestNode = in.AWSClusterConfigSpecGuestNode + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterConfigSpecGuestWorker. +func (in *AWSClusterConfigSpecGuestWorker) DeepCopy() *AWSClusterConfigSpecGuestWorker { + if in == nil { + return nil + } + out := new(AWSClusterConfigSpecGuestWorker) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterConfigSpecVersionBundle) DeepCopyInto(out *AWSClusterConfigSpecVersionBundle) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterConfigSpecVersionBundle. +func (in *AWSClusterConfigSpecVersionBundle) DeepCopy() *AWSClusterConfigSpecVersionBundle { + if in == nil { + return nil + } + out := new(AWSClusterConfigSpecVersionBundle) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureClusterConfig) DeepCopyInto(out *AzureClusterConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureClusterConfig. +func (in *AzureClusterConfig) DeepCopy() *AzureClusterConfig { + if in == nil { + return nil + } + out := new(AzureClusterConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AzureClusterConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureClusterConfigList) DeepCopyInto(out *AzureClusterConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]AzureClusterConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureClusterConfigList. +func (in *AzureClusterConfigList) DeepCopy() *AzureClusterConfigList { + if in == nil { + return nil + } + out := new(AzureClusterConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AzureClusterConfigList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureClusterConfigSpec) DeepCopyInto(out *AzureClusterConfigSpec) { + *out = *in + in.Guest.DeepCopyInto(&out.Guest) + out.VersionBundle = in.VersionBundle + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureClusterConfigSpec. +func (in *AzureClusterConfigSpec) DeepCopy() *AzureClusterConfigSpec { + if in == nil { + return nil + } + out := new(AzureClusterConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureClusterConfigSpecGuest) DeepCopyInto(out *AzureClusterConfigSpecGuest) { + *out = *in + in.ClusterGuestConfig.DeepCopyInto(&out.ClusterGuestConfig) + out.CredentialSecret = in.CredentialSecret + if in.Masters != nil { + in, out := &in.Masters, &out.Masters + *out = make([]AzureClusterConfigSpecGuestMaster, len(*in)) + copy(*out, *in) + } + if in.Workers != nil { + in, out := &in.Workers, &out.Workers + *out = make([]AzureClusterConfigSpecGuestWorker, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureClusterConfigSpecGuest. +func (in *AzureClusterConfigSpecGuest) DeepCopy() *AzureClusterConfigSpecGuest { + if in == nil { + return nil + } + out := new(AzureClusterConfigSpecGuest) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureClusterConfigSpecGuestCredentialSecret) DeepCopyInto(out *AzureClusterConfigSpecGuestCredentialSecret) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureClusterConfigSpecGuestCredentialSecret. +func (in *AzureClusterConfigSpecGuestCredentialSecret) DeepCopy() *AzureClusterConfigSpecGuestCredentialSecret { + if in == nil { + return nil + } + out := new(AzureClusterConfigSpecGuestCredentialSecret) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureClusterConfigSpecGuestMaster) DeepCopyInto(out *AzureClusterConfigSpecGuestMaster) { + *out = *in + out.AzureClusterConfigSpecGuestNode = in.AzureClusterConfigSpecGuestNode + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureClusterConfigSpecGuestMaster. +func (in *AzureClusterConfigSpecGuestMaster) DeepCopy() *AzureClusterConfigSpecGuestMaster { + if in == nil { + return nil + } + out := new(AzureClusterConfigSpecGuestMaster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureClusterConfigSpecGuestNode) DeepCopyInto(out *AzureClusterConfigSpecGuestNode) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureClusterConfigSpecGuestNode. +func (in *AzureClusterConfigSpecGuestNode) DeepCopy() *AzureClusterConfigSpecGuestNode { + if in == nil { + return nil + } + out := new(AzureClusterConfigSpecGuestNode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureClusterConfigSpecGuestWorker) DeepCopyInto(out *AzureClusterConfigSpecGuestWorker) { + *out = *in + out.AzureClusterConfigSpecGuestNode = in.AzureClusterConfigSpecGuestNode + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureClusterConfigSpecGuestWorker. +func (in *AzureClusterConfigSpecGuestWorker) DeepCopy() *AzureClusterConfigSpecGuestWorker { + if in == nil { + return nil + } + out := new(AzureClusterConfigSpecGuestWorker) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureClusterConfigSpecVersionBundle) DeepCopyInto(out *AzureClusterConfigSpecVersionBundle) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureClusterConfigSpecVersionBundle. +func (in *AzureClusterConfigSpecVersionBundle) DeepCopy() *AzureClusterConfigSpecVersionBundle { + if in == nil { + return nil + } + out := new(AzureClusterConfigSpecVersionBundle) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CertConfig) DeepCopyInto(out *CertConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertConfig. +func (in *CertConfig) DeepCopy() *CertConfig { + if in == nil { + return nil + } + out := new(CertConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CertConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CertConfigList) DeepCopyInto(out *CertConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CertConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertConfigList. +func (in *CertConfigList) DeepCopy() *CertConfigList { + if in == nil { + return nil + } + out := new(CertConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *CertConfigList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CertConfigSpec) DeepCopyInto(out *CertConfigSpec) { + *out = *in + in.Cert.DeepCopyInto(&out.Cert) + out.VersionBundle = in.VersionBundle + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertConfigSpec. +func (in *CertConfigSpec) DeepCopy() *CertConfigSpec { + if in == nil { + return nil + } + out := new(CertConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CertConfigSpecCert) DeepCopyInto(out *CertConfigSpecCert) { + *out = *in + if in.AltNames != nil { + in, out := &in.AltNames, &out.AltNames + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.IPSANs != nil { + in, out := &in.IPSANs, &out.IPSANs + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Organizations != nil { + in, out := &in.Organizations, &out.Organizations + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertConfigSpecCert. +func (in *CertConfigSpecCert) DeepCopy() *CertConfigSpecCert { + if in == nil { + return nil + } + out := new(CertConfigSpecCert) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CertConfigSpecVersionBundle) DeepCopyInto(out *CertConfigSpecVersionBundle) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertConfigSpecVersionBundle. +func (in *CertConfigSpecVersionBundle) DeepCopy() *CertConfigSpecVersionBundle { + if in == nil { + return nil + } + out := new(CertConfigSpecVersionBundle) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ChartConfig) DeepCopyInto(out *ChartConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + out.Status = in.Status + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartConfig. +func (in *ChartConfig) DeepCopy() *ChartConfig { + if in == nil { + return nil + } + out := new(ChartConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ChartConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ChartConfigList) DeepCopyInto(out *ChartConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ChartConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartConfigList. +func (in *ChartConfigList) DeepCopy() *ChartConfigList { + if in == nil { + return nil + } + out := new(ChartConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ChartConfigList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ChartConfigSpec) DeepCopyInto(out *ChartConfigSpec) { + *out = *in + out.Chart = in.Chart + out.VersionBundle = in.VersionBundle + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartConfigSpec. +func (in *ChartConfigSpec) DeepCopy() *ChartConfigSpec { + if in == nil { + return nil + } + out := new(ChartConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ChartConfigSpecChart) DeepCopyInto(out *ChartConfigSpecChart) { + *out = *in + out.ConfigMap = in.ConfigMap + out.UserConfigMap = in.UserConfigMap + out.Secret = in.Secret + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartConfigSpecChart. +func (in *ChartConfigSpecChart) DeepCopy() *ChartConfigSpecChart { + if in == nil { + return nil + } + out := new(ChartConfigSpecChart) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ChartConfigSpecConfigMap) DeepCopyInto(out *ChartConfigSpecConfigMap) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartConfigSpecConfigMap. +func (in *ChartConfigSpecConfigMap) DeepCopy() *ChartConfigSpecConfigMap { + if in == nil { + return nil + } + out := new(ChartConfigSpecConfigMap) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ChartConfigSpecSecret) DeepCopyInto(out *ChartConfigSpecSecret) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartConfigSpecSecret. +func (in *ChartConfigSpecSecret) DeepCopy() *ChartConfigSpecSecret { + if in == nil { + return nil + } + out := new(ChartConfigSpecSecret) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ChartConfigSpecVersionBundle) DeepCopyInto(out *ChartConfigSpecVersionBundle) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartConfigSpecVersionBundle. +func (in *ChartConfigSpecVersionBundle) DeepCopy() *ChartConfigSpecVersionBundle { + if in == nil { + return nil + } + out := new(ChartConfigSpecVersionBundle) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ChartConfigStatus) DeepCopyInto(out *ChartConfigStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartConfigStatus. +func (in *ChartConfigStatus) DeepCopy() *ChartConfigStatus { + if in == nil { + return nil + } + out := new(ChartConfigStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Cluster) DeepCopyInto(out *Cluster) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Cluster. +func (in *Cluster) DeepCopy() *Cluster { + if in == nil { + return nil + } + out := new(Cluster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Cluster) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterGuestConfig) DeepCopyInto(out *ClusterGuestConfig) { + *out = *in + if in.VersionBundles != nil { + in, out := &in.VersionBundles, &out.VersionBundles + *out = make([]ClusterGuestConfigVersionBundle, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterGuestConfig. +func (in *ClusterGuestConfig) DeepCopy() *ClusterGuestConfig { + if in == nil { + return nil + } + out := new(ClusterGuestConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterGuestConfigVersionBundle) DeepCopyInto(out *ClusterGuestConfigVersionBundle) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterGuestConfigVersionBundle. +func (in *ClusterGuestConfigVersionBundle) DeepCopy() *ClusterGuestConfigVersionBundle { + if in == nil { + return nil + } + out := new(ClusterGuestConfigVersionBundle) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterList) DeepCopyInto(out *ClusterList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Cluster, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterList. +func (in *ClusterList) DeepCopy() *ClusterList { + if in == nil { + return nil + } + out := new(ClusterList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterSpec) DeepCopyInto(out *ClusterSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterSpec. +func (in *ClusterSpec) DeepCopy() *ClusterSpec { + if in == nil { + return nil + } + out := new(ClusterSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterStatus) DeepCopyInto(out *ClusterStatus) { + *out = *in + in.LastHeartbeatTime.DeepCopyInto(&out.LastHeartbeatTime) + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) + out.Cluster = in.Cluster + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]ClusterStatusCondition, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterStatus. +func (in *ClusterStatus) DeepCopy() *ClusterStatus { + if in == nil { + return nil + } + out := new(ClusterStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterStatusCluster) DeepCopyInto(out *ClusterStatusCluster) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterStatusCluster. +func (in *ClusterStatusCluster) DeepCopy() *ClusterStatusCluster { + if in == nil { + return nil + } + out := new(ClusterStatusCluster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterStatusCondition) DeepCopyInto(out *ClusterStatusCondition) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterStatusCondition. +func (in *ClusterStatusCondition) DeepCopy() *ClusterStatusCondition { + if in == nil { + return nil + } + out := new(ClusterStatusCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DrainerConfig) DeepCopyInto(out *DrainerConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrainerConfig. +func (in *DrainerConfig) DeepCopy() *DrainerConfig { + if in == nil { + return nil + } + out := new(DrainerConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DrainerConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DrainerConfigList) DeepCopyInto(out *DrainerConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DrainerConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrainerConfigList. +func (in *DrainerConfigList) DeepCopy() *DrainerConfigList { + if in == nil { + return nil + } + out := new(DrainerConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DrainerConfigList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DrainerConfigSpec) DeepCopyInto(out *DrainerConfigSpec) { + *out = *in + out.Guest = in.Guest + out.VersionBundle = in.VersionBundle + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrainerConfigSpec. +func (in *DrainerConfigSpec) DeepCopy() *DrainerConfigSpec { + if in == nil { + return nil + } + out := new(DrainerConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DrainerConfigSpecGuest) DeepCopyInto(out *DrainerConfigSpecGuest) { + *out = *in + out.Cluster = in.Cluster + out.Node = in.Node + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrainerConfigSpecGuest. +func (in *DrainerConfigSpecGuest) DeepCopy() *DrainerConfigSpecGuest { + if in == nil { + return nil + } + out := new(DrainerConfigSpecGuest) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DrainerConfigSpecGuestCluster) DeepCopyInto(out *DrainerConfigSpecGuestCluster) { + *out = *in + out.API = in.API + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrainerConfigSpecGuestCluster. +func (in *DrainerConfigSpecGuestCluster) DeepCopy() *DrainerConfigSpecGuestCluster { + if in == nil { + return nil + } + out := new(DrainerConfigSpecGuestCluster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DrainerConfigSpecGuestClusterAPI) DeepCopyInto(out *DrainerConfigSpecGuestClusterAPI) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrainerConfigSpecGuestClusterAPI. +func (in *DrainerConfigSpecGuestClusterAPI) DeepCopy() *DrainerConfigSpecGuestClusterAPI { + if in == nil { + return nil + } + out := new(DrainerConfigSpecGuestClusterAPI) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DrainerConfigSpecGuestNode) DeepCopyInto(out *DrainerConfigSpecGuestNode) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrainerConfigSpecGuestNode. +func (in *DrainerConfigSpecGuestNode) DeepCopy() *DrainerConfigSpecGuestNode { + if in == nil { + return nil + } + out := new(DrainerConfigSpecGuestNode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DrainerConfigSpecVersionBundle) DeepCopyInto(out *DrainerConfigSpecVersionBundle) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrainerConfigSpecVersionBundle. +func (in *DrainerConfigSpecVersionBundle) DeepCopy() *DrainerConfigSpecVersionBundle { + if in == nil { + return nil + } + out := new(DrainerConfigSpecVersionBundle) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DrainerConfigStatus) DeepCopyInto(out *DrainerConfigStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]DrainerConfigStatusCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrainerConfigStatus. +func (in *DrainerConfigStatus) DeepCopy() *DrainerConfigStatus { + if in == nil { + return nil + } + out := new(DrainerConfigStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DrainerConfigStatusCondition) DeepCopyInto(out *DrainerConfigStatusCondition) { + *out = *in + in.LastHeartbeatTime.DeepCopyInto(&out.LastHeartbeatTime) + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrainerConfigStatusCondition. +func (in *DrainerConfigStatusCondition) DeepCopy() *DrainerConfigStatusCondition { + if in == nil { + return nil + } + out := new(DrainerConfigStatusCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DraughtsmanConfig) DeepCopyInto(out *DraughtsmanConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DraughtsmanConfig. +func (in *DraughtsmanConfig) DeepCopy() *DraughtsmanConfig { + if in == nil { + return nil + } + out := new(DraughtsmanConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DraughtsmanConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DraughtsmanConfigList) DeepCopyInto(out *DraughtsmanConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DraughtsmanConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DraughtsmanConfigList. +func (in *DraughtsmanConfigList) DeepCopy() *DraughtsmanConfigList { + if in == nil { + return nil + } + out := new(DraughtsmanConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DraughtsmanConfigList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DraughtsmanConfigSpec) DeepCopyInto(out *DraughtsmanConfigSpec) { + *out = *in + if in.Projects != nil { + in, out := &in.Projects, &out.Projects + *out = make([]DraughtsmanConfigSpecProject, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DraughtsmanConfigSpec. +func (in *DraughtsmanConfigSpec) DeepCopy() *DraughtsmanConfigSpec { + if in == nil { + return nil + } + out := new(DraughtsmanConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DraughtsmanConfigSpecProject) DeepCopyInto(out *DraughtsmanConfigSpecProject) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DraughtsmanConfigSpecProject. +func (in *DraughtsmanConfigSpecProject) DeepCopy() *DraughtsmanConfigSpecProject { + if in == nil { + return nil + } + out := new(DraughtsmanConfigSpecProject) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FlannelConfig) DeepCopyInto(out *FlannelConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfig. +func (in *FlannelConfig) DeepCopy() *FlannelConfig { + if in == nil { + return nil + } + out := new(FlannelConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *FlannelConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FlannelConfigList) DeepCopyInto(out *FlannelConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]FlannelConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigList. +func (in *FlannelConfigList) DeepCopy() *FlannelConfigList { + if in == nil { + return nil + } + out := new(FlannelConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *FlannelConfigList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FlannelConfigSpec) DeepCopyInto(out *FlannelConfigSpec) { + *out = *in + in.Bridge.DeepCopyInto(&out.Bridge) + out.Cluster = in.Cluster + out.Flannel = in.Flannel + out.Health = in.Health + out.VersionBundle = in.VersionBundle + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpec. +func (in *FlannelConfigSpec) DeepCopy() *FlannelConfigSpec { + if in == nil { + return nil + } + out := new(FlannelConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FlannelConfigSpecBridge) DeepCopyInto(out *FlannelConfigSpecBridge) { + *out = *in + out.Docker = in.Docker + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecBridge. +func (in *FlannelConfigSpecBridge) DeepCopy() *FlannelConfigSpecBridge { + if in == nil { + return nil + } + out := new(FlannelConfigSpecBridge) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FlannelConfigSpecBridgeDocker) DeepCopyInto(out *FlannelConfigSpecBridgeDocker) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecBridgeDocker. +func (in *FlannelConfigSpecBridgeDocker) DeepCopy() *FlannelConfigSpecBridgeDocker { + if in == nil { + return nil + } + out := new(FlannelConfigSpecBridgeDocker) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FlannelConfigSpecBridgeSpec) DeepCopyInto(out *FlannelConfigSpecBridgeSpec) { + *out = *in + in.DNS.DeepCopyInto(&out.DNS) + in.NTP.DeepCopyInto(&out.NTP) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecBridgeSpec. +func (in *FlannelConfigSpecBridgeSpec) DeepCopy() *FlannelConfigSpecBridgeSpec { + if in == nil { + return nil + } + out := new(FlannelConfigSpecBridgeSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FlannelConfigSpecBridgeSpecDNS) DeepCopyInto(out *FlannelConfigSpecBridgeSpecDNS) { + *out = *in + if in.Servers != nil { + in, out := &in.Servers, &out.Servers + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecBridgeSpecDNS. +func (in *FlannelConfigSpecBridgeSpecDNS) DeepCopy() *FlannelConfigSpecBridgeSpecDNS { + if in == nil { + return nil + } + out := new(FlannelConfigSpecBridgeSpecDNS) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FlannelConfigSpecBridgeSpecNTP) DeepCopyInto(out *FlannelConfigSpecBridgeSpecNTP) { + *out = *in + if in.Servers != nil { + in, out := &in.Servers, &out.Servers + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecBridgeSpecNTP. +func (in *FlannelConfigSpecBridgeSpecNTP) DeepCopy() *FlannelConfigSpecBridgeSpecNTP { + if in == nil { + return nil + } + out := new(FlannelConfigSpecBridgeSpecNTP) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FlannelConfigSpecCluster) DeepCopyInto(out *FlannelConfigSpecCluster) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecCluster. +func (in *FlannelConfigSpecCluster) DeepCopy() *FlannelConfigSpecCluster { + if in == nil { + return nil + } + out := new(FlannelConfigSpecCluster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FlannelConfigSpecFlannel) DeepCopyInto(out *FlannelConfigSpecFlannel) { + *out = *in + out.Spec = in.Spec + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecFlannel. +func (in *FlannelConfigSpecFlannel) DeepCopy() *FlannelConfigSpecFlannel { + if in == nil { + return nil + } + out := new(FlannelConfigSpecFlannel) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FlannelConfigSpecFlannelSpec) DeepCopyInto(out *FlannelConfigSpecFlannelSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecFlannelSpec. +func (in *FlannelConfigSpecFlannelSpec) DeepCopy() *FlannelConfigSpecFlannelSpec { + if in == nil { + return nil + } + out := new(FlannelConfigSpecFlannelSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FlannelConfigSpecHealth) DeepCopyInto(out *FlannelConfigSpecHealth) { + *out = *in + out.Docker = in.Docker + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecHealth. +func (in *FlannelConfigSpecHealth) DeepCopy() *FlannelConfigSpecHealth { + if in == nil { + return nil + } + out := new(FlannelConfigSpecHealth) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FlannelConfigSpecHealthDocker) DeepCopyInto(out *FlannelConfigSpecHealthDocker) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecHealthDocker. +func (in *FlannelConfigSpecHealthDocker) DeepCopy() *FlannelConfigSpecHealthDocker { + if in == nil { + return nil + } + out := new(FlannelConfigSpecHealthDocker) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FlannelConfigSpecVersionBundle) DeepCopyInto(out *FlannelConfigSpecVersionBundle) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecVersionBundle. +func (in *FlannelConfigSpecVersionBundle) DeepCopy() *FlannelConfigSpecVersionBundle { + if in == nil { + return nil + } + out := new(FlannelConfigSpecVersionBundle) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Ignition) DeepCopyInto(out *Ignition) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + out.Status = in.Status + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ignition. +func (in *Ignition) DeepCopy() *Ignition { + if in == nil { + return nil + } + out := new(Ignition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Ignition) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionList) DeepCopyInto(out *IgnitionList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Ignition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionList. +func (in *IgnitionList) DeepCopy() *IgnitionList { + if in == nil { + return nil + } + out := new(IgnitionList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *IgnitionList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpec) DeepCopyInto(out *IgnitionSpec) { + *out = *in + out.Calico = in.Calico + out.Docker = in.Docker + out.Etcd = in.Etcd + in.Extension.DeepCopyInto(&out.Extension) + out.Ingress = in.Ingress + out.Kubernetes = in.Kubernetes + out.Registry = in.Registry + out.SSO = in.SSO + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpec. +func (in *IgnitionSpec) DeepCopy() *IgnitionSpec { + if in == nil { + return nil + } + out := new(IgnitionSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecCalico) DeepCopyInto(out *IgnitionSpecCalico) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecCalico. +func (in *IgnitionSpecCalico) DeepCopy() *IgnitionSpecCalico { + if in == nil { + return nil + } + out := new(IgnitionSpecCalico) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecDocker) DeepCopyInto(out *IgnitionSpecDocker) { + *out = *in + out.Daemon = in.Daemon + out.NetworkSetup = in.NetworkSetup + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecDocker. +func (in *IgnitionSpecDocker) DeepCopy() *IgnitionSpecDocker { + if in == nil { + return nil + } + out := new(IgnitionSpecDocker) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecDockerDaemon) DeepCopyInto(out *IgnitionSpecDockerDaemon) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecDockerDaemon. +func (in *IgnitionSpecDockerDaemon) DeepCopy() *IgnitionSpecDockerDaemon { + if in == nil { + return nil + } + out := new(IgnitionSpecDockerDaemon) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecDockerNetworkSetup) DeepCopyInto(out *IgnitionSpecDockerNetworkSetup) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecDockerNetworkSetup. +func (in *IgnitionSpecDockerNetworkSetup) DeepCopy() *IgnitionSpecDockerNetworkSetup { + if in == nil { + return nil + } + out := new(IgnitionSpecDockerNetworkSetup) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecEtcd) DeepCopyInto(out *IgnitionSpecEtcd) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecEtcd. +func (in *IgnitionSpecEtcd) DeepCopy() *IgnitionSpecEtcd { + if in == nil { + return nil + } + out := new(IgnitionSpecEtcd) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecExtension) DeepCopyInto(out *IgnitionSpecExtension) { + *out = *in + if in.Files != nil { + in, out := &in.Files, &out.Files + *out = make([]IgnitionSpecExtensionFile, len(*in)) + copy(*out, *in) + } + if in.Units != nil { + in, out := &in.Units, &out.Units + *out = make([]IgnitionSpecExtensionUnit, len(*in)) + copy(*out, *in) + } + if in.Users != nil { + in, out := &in.Users, &out.Users + *out = make([]IgnitionSpecExtensionUser, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecExtension. +func (in *IgnitionSpecExtension) DeepCopy() *IgnitionSpecExtension { + if in == nil { + return nil + } + out := new(IgnitionSpecExtension) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecExtensionFile) DeepCopyInto(out *IgnitionSpecExtensionFile) { + *out = *in + out.Metadata = in.Metadata + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecExtensionFile. +func (in *IgnitionSpecExtensionFile) DeepCopy() *IgnitionSpecExtensionFile { + if in == nil { + return nil + } + out := new(IgnitionSpecExtensionFile) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecExtensionFileMetadata) DeepCopyInto(out *IgnitionSpecExtensionFileMetadata) { + *out = *in + out.Owner = in.Owner + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecExtensionFileMetadata. +func (in *IgnitionSpecExtensionFileMetadata) DeepCopy() *IgnitionSpecExtensionFileMetadata { + if in == nil { + return nil + } + out := new(IgnitionSpecExtensionFileMetadata) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecExtensionFileMetadataOwner) DeepCopyInto(out *IgnitionSpecExtensionFileMetadataOwner) { + *out = *in + out.Group = in.Group + out.User = in.User + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecExtensionFileMetadataOwner. +func (in *IgnitionSpecExtensionFileMetadataOwner) DeepCopy() *IgnitionSpecExtensionFileMetadataOwner { + if in == nil { + return nil + } + out := new(IgnitionSpecExtensionFileMetadataOwner) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecExtensionFileMetadataOwnerGroup) DeepCopyInto(out *IgnitionSpecExtensionFileMetadataOwnerGroup) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecExtensionFileMetadataOwnerGroup. +func (in *IgnitionSpecExtensionFileMetadataOwnerGroup) DeepCopy() *IgnitionSpecExtensionFileMetadataOwnerGroup { + if in == nil { + return nil + } + out := new(IgnitionSpecExtensionFileMetadataOwnerGroup) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecExtensionFileMetadataOwnerUser) DeepCopyInto(out *IgnitionSpecExtensionFileMetadataOwnerUser) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecExtensionFileMetadataOwnerUser. +func (in *IgnitionSpecExtensionFileMetadataOwnerUser) DeepCopy() *IgnitionSpecExtensionFileMetadataOwnerUser { + if in == nil { + return nil + } + out := new(IgnitionSpecExtensionFileMetadataOwnerUser) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecExtensionUnit) DeepCopyInto(out *IgnitionSpecExtensionUnit) { + *out = *in + out.Metadata = in.Metadata + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecExtensionUnit. +func (in *IgnitionSpecExtensionUnit) DeepCopy() *IgnitionSpecExtensionUnit { + if in == nil { + return nil + } + out := new(IgnitionSpecExtensionUnit) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecExtensionUnitMetadata) DeepCopyInto(out *IgnitionSpecExtensionUnitMetadata) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecExtensionUnitMetadata. +func (in *IgnitionSpecExtensionUnitMetadata) DeepCopy() *IgnitionSpecExtensionUnitMetadata { + if in == nil { + return nil + } + out := new(IgnitionSpecExtensionUnitMetadata) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecExtensionUser) DeepCopyInto(out *IgnitionSpecExtensionUser) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecExtensionUser. +func (in *IgnitionSpecExtensionUser) DeepCopy() *IgnitionSpecExtensionUser { + if in == nil { + return nil + } + out := new(IgnitionSpecExtensionUser) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecIngress) DeepCopyInto(out *IgnitionSpecIngress) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecIngress. +func (in *IgnitionSpecIngress) DeepCopy() *IgnitionSpecIngress { + if in == nil { + return nil + } + out := new(IgnitionSpecIngress) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecKubernetes) DeepCopyInto(out *IgnitionSpecKubernetes) { + *out = *in + out.API = in.API + out.DNS = in.DNS + out.Kubelet = in.Kubelet + out.OIDC = in.OIDC + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecKubernetes. +func (in *IgnitionSpecKubernetes) DeepCopy() *IgnitionSpecKubernetes { + if in == nil { + return nil + } + out := new(IgnitionSpecKubernetes) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecKubernetesAPI) DeepCopyInto(out *IgnitionSpecKubernetesAPI) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecKubernetesAPI. +func (in *IgnitionSpecKubernetesAPI) DeepCopy() *IgnitionSpecKubernetesAPI { + if in == nil { + return nil + } + out := new(IgnitionSpecKubernetesAPI) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecKubernetesDNS) DeepCopyInto(out *IgnitionSpecKubernetesDNS) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecKubernetesDNS. +func (in *IgnitionSpecKubernetesDNS) DeepCopy() *IgnitionSpecKubernetesDNS { + if in == nil { + return nil + } + out := new(IgnitionSpecKubernetesDNS) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecKubernetesKubelet) DeepCopyInto(out *IgnitionSpecKubernetesKubelet) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecKubernetesKubelet. +func (in *IgnitionSpecKubernetesKubelet) DeepCopy() *IgnitionSpecKubernetesKubelet { + if in == nil { + return nil + } + out := new(IgnitionSpecKubernetesKubelet) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecOIDC) DeepCopyInto(out *IgnitionSpecOIDC) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecOIDC. +func (in *IgnitionSpecOIDC) DeepCopy() *IgnitionSpecOIDC { + if in == nil { + return nil + } + out := new(IgnitionSpecOIDC) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecRegistry) DeepCopyInto(out *IgnitionSpecRegistry) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecRegistry. +func (in *IgnitionSpecRegistry) DeepCopy() *IgnitionSpecRegistry { + if in == nil { + return nil + } + out := new(IgnitionSpecRegistry) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionSpecSSO) DeepCopyInto(out *IgnitionSpecSSO) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecSSO. +func (in *IgnitionSpecSSO) DeepCopy() *IgnitionSpecSSO { + if in == nil { + return nil + } + out := new(IgnitionSpecSSO) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionStatus) DeepCopyInto(out *IgnitionStatus) { + *out = *in + out.DataSecret = in.DataSecret + out.Verification = in.Verification + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionStatus. +func (in *IgnitionStatus) DeepCopy() *IgnitionStatus { + if in == nil { + return nil + } + out := new(IgnitionStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionStatusSecret) DeepCopyInto(out *IgnitionStatusSecret) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionStatusSecret. +func (in *IgnitionStatusSecret) DeepCopy() *IgnitionStatusSecret { + if in == nil { + return nil + } + out := new(IgnitionStatusSecret) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IgnitionStatusVerification) DeepCopyInto(out *IgnitionStatusVerification) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionStatusVerification. +func (in *IgnitionStatusVerification) DeepCopy() *IgnitionStatusVerification { + if in == nil { + return nil + } + out := new(IgnitionStatusVerification) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressConfig) DeepCopyInto(out *IngressConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressConfig. +func (in *IngressConfig) DeepCopy() *IngressConfig { + if in == nil { + return nil + } + out := new(IngressConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *IngressConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressConfigList) DeepCopyInto(out *IngressConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]IngressConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressConfigList. +func (in *IngressConfigList) DeepCopy() *IngressConfigList { + if in == nil { + return nil + } + out := new(IngressConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *IngressConfigList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressConfigSpec) DeepCopyInto(out *IngressConfigSpec) { + *out = *in + out.GuestCluster = in.GuestCluster + out.HostCluster = in.HostCluster + if in.ProtocolPorts != nil { + in, out := &in.ProtocolPorts, &out.ProtocolPorts + *out = make([]IngressConfigSpecProtocolPort, len(*in)) + copy(*out, *in) + } + out.VersionBundle = in.VersionBundle + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressConfigSpec. +func (in *IngressConfigSpec) DeepCopy() *IngressConfigSpec { + if in == nil { + return nil + } + out := new(IngressConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressConfigSpecGuestCluster) DeepCopyInto(out *IngressConfigSpecGuestCluster) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressConfigSpecGuestCluster. +func (in *IngressConfigSpecGuestCluster) DeepCopy() *IngressConfigSpecGuestCluster { + if in == nil { + return nil + } + out := new(IngressConfigSpecGuestCluster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressConfigSpecHostCluster) DeepCopyInto(out *IngressConfigSpecHostCluster) { + *out = *in + out.IngressController = in.IngressController + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressConfigSpecHostCluster. +func (in *IngressConfigSpecHostCluster) DeepCopy() *IngressConfigSpecHostCluster { + if in == nil { + return nil + } + out := new(IngressConfigSpecHostCluster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressConfigSpecHostClusterIngressController) DeepCopyInto(out *IngressConfigSpecHostClusterIngressController) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressConfigSpecHostClusterIngressController. +func (in *IngressConfigSpecHostClusterIngressController) DeepCopy() *IngressConfigSpecHostClusterIngressController { + if in == nil { + return nil + } + out := new(IngressConfigSpecHostClusterIngressController) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressConfigSpecProtocolPort) DeepCopyInto(out *IngressConfigSpecProtocolPort) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressConfigSpecProtocolPort. +func (in *IngressConfigSpecProtocolPort) DeepCopy() *IngressConfigSpecProtocolPort { + if in == nil { + return nil + } + out := new(IngressConfigSpecProtocolPort) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressConfigSpecVersionBundle) DeepCopyInto(out *IngressConfigSpecVersionBundle) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressConfigSpecVersionBundle. +func (in *IngressConfigSpecVersionBundle) DeepCopy() *IngressConfigSpecVersionBundle { + if in == nil { + return nil + } + out := new(IngressConfigSpecVersionBundle) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMClusterConfig) DeepCopyInto(out *KVMClusterConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMClusterConfig. +func (in *KVMClusterConfig) DeepCopy() *KVMClusterConfig { + if in == nil { + return nil + } + out := new(KVMClusterConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *KVMClusterConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMClusterConfigList) DeepCopyInto(out *KVMClusterConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]KVMClusterConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMClusterConfigList. +func (in *KVMClusterConfigList) DeepCopy() *KVMClusterConfigList { + if in == nil { + return nil + } + out := new(KVMClusterConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *KVMClusterConfigList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMClusterConfigSpec) DeepCopyInto(out *KVMClusterConfigSpec) { + *out = *in + in.Guest.DeepCopyInto(&out.Guest) + out.VersionBundle = in.VersionBundle + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMClusterConfigSpec. +func (in *KVMClusterConfigSpec) DeepCopy() *KVMClusterConfigSpec { + if in == nil { + return nil + } + out := new(KVMClusterConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMClusterConfigSpecGuest) DeepCopyInto(out *KVMClusterConfigSpecGuest) { + *out = *in + in.ClusterGuestConfig.DeepCopyInto(&out.ClusterGuestConfig) + if in.Masters != nil { + in, out := &in.Masters, &out.Masters + *out = make([]KVMClusterConfigSpecGuestMaster, len(*in)) + copy(*out, *in) + } + if in.Workers != nil { + in, out := &in.Workers, &out.Workers + *out = make([]KVMClusterConfigSpecGuestWorker, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMClusterConfigSpecGuest. +func (in *KVMClusterConfigSpecGuest) DeepCopy() *KVMClusterConfigSpecGuest { + if in == nil { + return nil + } + out := new(KVMClusterConfigSpecGuest) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMClusterConfigSpecGuestMaster) DeepCopyInto(out *KVMClusterConfigSpecGuestMaster) { + *out = *in + out.KVMClusterConfigSpecGuestNode = in.KVMClusterConfigSpecGuestNode + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMClusterConfigSpecGuestMaster. +func (in *KVMClusterConfigSpecGuestMaster) DeepCopy() *KVMClusterConfigSpecGuestMaster { + if in == nil { + return nil + } + out := new(KVMClusterConfigSpecGuestMaster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMClusterConfigSpecGuestNode) DeepCopyInto(out *KVMClusterConfigSpecGuestNode) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMClusterConfigSpecGuestNode. +func (in *KVMClusterConfigSpecGuestNode) DeepCopy() *KVMClusterConfigSpecGuestNode { + if in == nil { + return nil + } + out := new(KVMClusterConfigSpecGuestNode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMClusterConfigSpecGuestWorker) DeepCopyInto(out *KVMClusterConfigSpecGuestWorker) { + *out = *in + out.KVMClusterConfigSpecGuestNode = in.KVMClusterConfigSpecGuestNode + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMClusterConfigSpecGuestWorker. +func (in *KVMClusterConfigSpecGuestWorker) DeepCopy() *KVMClusterConfigSpecGuestWorker { + if in == nil { + return nil + } + out := new(KVMClusterConfigSpecGuestWorker) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMClusterConfigSpecVersionBundle) DeepCopyInto(out *KVMClusterConfigSpecVersionBundle) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMClusterConfigSpecVersionBundle. +func (in *KVMClusterConfigSpecVersionBundle) DeepCopy() *KVMClusterConfigSpecVersionBundle { + if in == nil { + return nil + } + out := new(KVMClusterConfigSpecVersionBundle) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NodeConfig) DeepCopyInto(out *NodeConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + out.Status = in.Status + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeConfig. +func (in *NodeConfig) DeepCopy() *NodeConfig { + if in == nil { + return nil + } + out := new(NodeConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NodeConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NodeConfigList) DeepCopyInto(out *NodeConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]NodeConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeConfigList. +func (in *NodeConfigList) DeepCopy() *NodeConfigList { + if in == nil { + return nil + } + out := new(NodeConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *NodeConfigList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NodeConfigSpec) DeepCopyInto(out *NodeConfigSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeConfigSpec. +func (in *NodeConfigSpec) DeepCopy() *NodeConfigSpec { + if in == nil { + return nil + } + out := new(NodeConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NodeConfigStatus) DeepCopyInto(out *NodeConfigStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeConfigStatus. +func (in *NodeConfigStatus) DeepCopy() *NodeConfigStatus { + if in == nil { + return nil + } + out := new(NodeConfigStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StorageConfig) DeepCopyInto(out *StorageConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StorageConfig. +func (in *StorageConfig) DeepCopy() *StorageConfig { + if in == nil { + return nil + } + out := new(StorageConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *StorageConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StorageConfigList) DeepCopyInto(out *StorageConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]StorageConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StorageConfigList. +func (in *StorageConfigList) DeepCopy() *StorageConfigList { + if in == nil { + return nil + } + out := new(StorageConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *StorageConfigList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StorageConfigSpec) DeepCopyInto(out *StorageConfigSpec) { + *out = *in + in.Storage.DeepCopyInto(&out.Storage) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StorageConfigSpec. +func (in *StorageConfigSpec) DeepCopy() *StorageConfigSpec { + if in == nil { + return nil + } + out := new(StorageConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StorageConfigSpecStorage) DeepCopyInto(out *StorageConfigSpecStorage) { + *out = *in + if in.Data != nil { + in, out := &in.Data, &out.Data + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StorageConfigSpecStorage. +func (in *StorageConfigSpecStorage) DeepCopy() *StorageConfigSpecStorage { + if in == nil { + return nil + } + out := new(StorageConfigSpecStorage) + in.DeepCopyInto(out) + return out +} diff --git a/github/giantswarm/apiextensions/pkg/apis/example/v1alpha1/zz_generated.deepcopy.go b/github/giantswarm/apiextensions/pkg/apis/example/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 000000000..e16068624 --- /dev/null +++ b/github/giantswarm/apiextensions/pkg/apis/example/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,101 @@ +// +build !ignore_autogenerated + +/* +Copyright 2020 Giant Swarm GmbH. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MemcachedConfig) DeepCopyInto(out *MemcachedConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MemcachedConfig. +func (in *MemcachedConfig) DeepCopy() *MemcachedConfig { + if in == nil { + return nil + } + out := new(MemcachedConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MemcachedConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MemcachedConfigList) DeepCopyInto(out *MemcachedConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]MemcachedConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MemcachedConfigList. +func (in *MemcachedConfigList) DeepCopy() *MemcachedConfigList { + if in == nil { + return nil + } + out := new(MemcachedConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MemcachedConfigList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MemcachedConfigSpec) DeepCopyInto(out *MemcachedConfigSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MemcachedConfigSpec. +func (in *MemcachedConfigSpec) DeepCopy() *MemcachedConfigSpec { + if in == nil { + return nil + } + out := new(MemcachedConfigSpec) + in.DeepCopyInto(out) + return out +} diff --git a/github/giantswarm/apiextensions/pkg/apis/infrastructure/v1alpha2/zz_generated.deepcopy.go b/github/giantswarm/apiextensions/pkg/apis/infrastructure/v1alpha2/zz_generated.deepcopy.go new file mode 100644 index 000000000..5e121752c --- /dev/null +++ b/github/giantswarm/apiextensions/pkg/apis/infrastructure/v1alpha2/zz_generated.deepcopy.go @@ -0,0 +1,784 @@ +// +build !ignore_autogenerated + +/* +Copyright 2020 Giant Swarm GmbH. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1alpha2 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSCluster) DeepCopyInto(out *AWSCluster) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSCluster. +func (in *AWSCluster) DeepCopy() *AWSCluster { + if in == nil { + return nil + } + out := new(AWSCluster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AWSCluster) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterList) DeepCopyInto(out *AWSClusterList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]AWSCluster, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterList. +func (in *AWSClusterList) DeepCopy() *AWSClusterList { + if in == nil { + return nil + } + out := new(AWSClusterList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AWSClusterList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterSpec) DeepCopyInto(out *AWSClusterSpec) { + *out = *in + out.Cluster = in.Cluster + out.Provider = in.Provider + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterSpec. +func (in *AWSClusterSpec) DeepCopy() *AWSClusterSpec { + if in == nil { + return nil + } + out := new(AWSClusterSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterSpecCluster) DeepCopyInto(out *AWSClusterSpecCluster) { + *out = *in + out.DNS = in.DNS + out.OIDC = in.OIDC + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterSpecCluster. +func (in *AWSClusterSpecCluster) DeepCopy() *AWSClusterSpecCluster { + if in == nil { + return nil + } + out := new(AWSClusterSpecCluster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterSpecClusterDNS) DeepCopyInto(out *AWSClusterSpecClusterDNS) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterSpecClusterDNS. +func (in *AWSClusterSpecClusterDNS) DeepCopy() *AWSClusterSpecClusterDNS { + if in == nil { + return nil + } + out := new(AWSClusterSpecClusterDNS) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterSpecClusterOIDC) DeepCopyInto(out *AWSClusterSpecClusterOIDC) { + *out = *in + out.Claims = in.Claims + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterSpecClusterOIDC. +func (in *AWSClusterSpecClusterOIDC) DeepCopy() *AWSClusterSpecClusterOIDC { + if in == nil { + return nil + } + out := new(AWSClusterSpecClusterOIDC) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterSpecClusterOIDCClaims) DeepCopyInto(out *AWSClusterSpecClusterOIDCClaims) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterSpecClusterOIDCClaims. +func (in *AWSClusterSpecClusterOIDCClaims) DeepCopy() *AWSClusterSpecClusterOIDCClaims { + if in == nil { + return nil + } + out := new(AWSClusterSpecClusterOIDCClaims) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterSpecProvider) DeepCopyInto(out *AWSClusterSpecProvider) { + *out = *in + out.CredentialSecret = in.CredentialSecret + out.Master = in.Master + out.Pods = in.Pods + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterSpecProvider. +func (in *AWSClusterSpecProvider) DeepCopy() *AWSClusterSpecProvider { + if in == nil { + return nil + } + out := new(AWSClusterSpecProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterSpecProviderCredentialSecret) DeepCopyInto(out *AWSClusterSpecProviderCredentialSecret) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterSpecProviderCredentialSecret. +func (in *AWSClusterSpecProviderCredentialSecret) DeepCopy() *AWSClusterSpecProviderCredentialSecret { + if in == nil { + return nil + } + out := new(AWSClusterSpecProviderCredentialSecret) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterSpecProviderMaster) DeepCopyInto(out *AWSClusterSpecProviderMaster) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterSpecProviderMaster. +func (in *AWSClusterSpecProviderMaster) DeepCopy() *AWSClusterSpecProviderMaster { + if in == nil { + return nil + } + out := new(AWSClusterSpecProviderMaster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterStatus) DeepCopyInto(out *AWSClusterStatus) { + *out = *in + in.Cluster.DeepCopyInto(&out.Cluster) + out.Provider = in.Provider + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterStatus. +func (in *AWSClusterStatus) DeepCopy() *AWSClusterStatus { + if in == nil { + return nil + } + out := new(AWSClusterStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterStatusProvider) DeepCopyInto(out *AWSClusterStatusProvider) { + *out = *in + out.Network = in.Network + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterStatusProvider. +func (in *AWSClusterStatusProvider) DeepCopy() *AWSClusterStatusProvider { + if in == nil { + return nil + } + out := new(AWSClusterStatusProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSClusterStatusProviderNetwork) DeepCopyInto(out *AWSClusterStatusProviderNetwork) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterStatusProviderNetwork. +func (in *AWSClusterStatusProviderNetwork) DeepCopy() *AWSClusterStatusProviderNetwork { + if in == nil { + return nil + } + out := new(AWSClusterStatusProviderNetwork) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSControlPlane) DeepCopyInto(out *AWSControlPlane) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + out.Status = in.Status + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSControlPlane. +func (in *AWSControlPlane) DeepCopy() *AWSControlPlane { + if in == nil { + return nil + } + out := new(AWSControlPlane) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AWSControlPlane) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSControlPlaneList) DeepCopyInto(out *AWSControlPlaneList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]AWSControlPlane, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSControlPlaneList. +func (in *AWSControlPlaneList) DeepCopy() *AWSControlPlaneList { + if in == nil { + return nil + } + out := new(AWSControlPlaneList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AWSControlPlaneList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSControlPlaneSpec) DeepCopyInto(out *AWSControlPlaneSpec) { + *out = *in + if in.AvailabilityZones != nil { + in, out := &in.AvailabilityZones, &out.AvailabilityZones + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSControlPlaneSpec. +func (in *AWSControlPlaneSpec) DeepCopy() *AWSControlPlaneSpec { + if in == nil { + return nil + } + out := new(AWSControlPlaneSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSControlPlaneStatus) DeepCopyInto(out *AWSControlPlaneStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSControlPlaneStatus. +func (in *AWSControlPlaneStatus) DeepCopy() *AWSControlPlaneStatus { + if in == nil { + return nil + } + out := new(AWSControlPlaneStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSMachineDeployment) DeepCopyInto(out *AWSMachineDeployment) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeployment. +func (in *AWSMachineDeployment) DeepCopy() *AWSMachineDeployment { + if in == nil { + return nil + } + out := new(AWSMachineDeployment) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AWSMachineDeployment) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSMachineDeploymentList) DeepCopyInto(out *AWSMachineDeploymentList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]AWSMachineDeployment, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentList. +func (in *AWSMachineDeploymentList) DeepCopy() *AWSMachineDeploymentList { + if in == nil { + return nil + } + out := new(AWSMachineDeploymentList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AWSMachineDeploymentList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSMachineDeploymentSpec) DeepCopyInto(out *AWSMachineDeploymentSpec) { + *out = *in + out.NodePool = in.NodePool + in.Provider.DeepCopyInto(&out.Provider) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentSpec. +func (in *AWSMachineDeploymentSpec) DeepCopy() *AWSMachineDeploymentSpec { + if in == nil { + return nil + } + out := new(AWSMachineDeploymentSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSMachineDeploymentSpecInstanceDistribution) DeepCopyInto(out *AWSMachineDeploymentSpecInstanceDistribution) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentSpecInstanceDistribution. +func (in *AWSMachineDeploymentSpecInstanceDistribution) DeepCopy() *AWSMachineDeploymentSpecInstanceDistribution { + if in == nil { + return nil + } + out := new(AWSMachineDeploymentSpecInstanceDistribution) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSMachineDeploymentSpecNodePool) DeepCopyInto(out *AWSMachineDeploymentSpecNodePool) { + *out = *in + out.Machine = in.Machine + out.Scaling = in.Scaling + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentSpecNodePool. +func (in *AWSMachineDeploymentSpecNodePool) DeepCopy() *AWSMachineDeploymentSpecNodePool { + if in == nil { + return nil + } + out := new(AWSMachineDeploymentSpecNodePool) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSMachineDeploymentSpecNodePoolMachine) DeepCopyInto(out *AWSMachineDeploymentSpecNodePoolMachine) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentSpecNodePoolMachine. +func (in *AWSMachineDeploymentSpecNodePoolMachine) DeepCopy() *AWSMachineDeploymentSpecNodePoolMachine { + if in == nil { + return nil + } + out := new(AWSMachineDeploymentSpecNodePoolMachine) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSMachineDeploymentSpecNodePoolScaling) DeepCopyInto(out *AWSMachineDeploymentSpecNodePoolScaling) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentSpecNodePoolScaling. +func (in *AWSMachineDeploymentSpecNodePoolScaling) DeepCopy() *AWSMachineDeploymentSpecNodePoolScaling { + if in == nil { + return nil + } + out := new(AWSMachineDeploymentSpecNodePoolScaling) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSMachineDeploymentSpecProvider) DeepCopyInto(out *AWSMachineDeploymentSpecProvider) { + *out = *in + if in.AvailabilityZones != nil { + in, out := &in.AvailabilityZones, &out.AvailabilityZones + *out = make([]string, len(*in)) + copy(*out, *in) + } + out.InstanceDistribution = in.InstanceDistribution + out.Worker = in.Worker + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentSpecProvider. +func (in *AWSMachineDeploymentSpecProvider) DeepCopy() *AWSMachineDeploymentSpecProvider { + if in == nil { + return nil + } + out := new(AWSMachineDeploymentSpecProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSMachineDeploymentSpecProviderWorker) DeepCopyInto(out *AWSMachineDeploymentSpecProviderWorker) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentSpecProviderWorker. +func (in *AWSMachineDeploymentSpecProviderWorker) DeepCopy() *AWSMachineDeploymentSpecProviderWorker { + if in == nil { + return nil + } + out := new(AWSMachineDeploymentSpecProviderWorker) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSMachineDeploymentStatus) DeepCopyInto(out *AWSMachineDeploymentStatus) { + *out = *in + in.Provider.DeepCopyInto(&out.Provider) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentStatus. +func (in *AWSMachineDeploymentStatus) DeepCopy() *AWSMachineDeploymentStatus { + if in == nil { + return nil + } + out := new(AWSMachineDeploymentStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSMachineDeploymentStatusProvider) DeepCopyInto(out *AWSMachineDeploymentStatusProvider) { + *out = *in + in.Worker.DeepCopyInto(&out.Worker) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentStatusProvider. +func (in *AWSMachineDeploymentStatusProvider) DeepCopy() *AWSMachineDeploymentStatusProvider { + if in == nil { + return nil + } + out := new(AWSMachineDeploymentStatusProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSMachineDeploymentStatusProviderWorker) DeepCopyInto(out *AWSMachineDeploymentStatusProviderWorker) { + *out = *in + if in.InstanceTypes != nil { + in, out := &in.InstanceTypes, &out.InstanceTypes + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentStatusProviderWorker. +func (in *AWSMachineDeploymentStatusProviderWorker) DeepCopy() *AWSMachineDeploymentStatusProviderWorker { + if in == nil { + return nil + } + out := new(AWSMachineDeploymentStatusProviderWorker) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CommonClusterStatus) DeepCopyInto(out *CommonClusterStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]CommonClusterStatusCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Versions != nil { + in, out := &in.Versions, &out.Versions + *out = make([]CommonClusterStatusVersion, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CommonClusterStatus. +func (in *CommonClusterStatus) DeepCopy() *CommonClusterStatus { + if in == nil { + return nil + } + out := new(CommonClusterStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CommonClusterStatusCondition) DeepCopyInto(out *CommonClusterStatusCondition) { + *out = *in + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CommonClusterStatusCondition. +func (in *CommonClusterStatusCondition) DeepCopy() *CommonClusterStatusCondition { + if in == nil { + return nil + } + out := new(CommonClusterStatusCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CommonClusterStatusVersion) DeepCopyInto(out *CommonClusterStatusVersion) { + *out = *in + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CommonClusterStatusVersion. +func (in *CommonClusterStatusVersion) DeepCopy() *CommonClusterStatusVersion { + if in == nil { + return nil + } + out := new(CommonClusterStatusVersion) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *G8sControlPlane) DeepCopyInto(out *G8sControlPlane) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + out.Status = in.Status + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new G8sControlPlane. +func (in *G8sControlPlane) DeepCopy() *G8sControlPlane { + if in == nil { + return nil + } + out := new(G8sControlPlane) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *G8sControlPlane) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *G8sControlPlaneList) DeepCopyInto(out *G8sControlPlaneList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]G8sControlPlane, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new G8sControlPlaneList. +func (in *G8sControlPlaneList) DeepCopy() *G8sControlPlaneList { + if in == nil { + return nil + } + out := new(G8sControlPlaneList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *G8sControlPlaneList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *G8sControlPlaneSpec) DeepCopyInto(out *G8sControlPlaneSpec) { + *out = *in + out.InfrastructureRef = in.InfrastructureRef + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new G8sControlPlaneSpec. +func (in *G8sControlPlaneSpec) DeepCopy() *G8sControlPlaneSpec { + if in == nil { + return nil + } + out := new(G8sControlPlaneSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *G8sControlPlaneStatus) DeepCopyInto(out *G8sControlPlaneStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new G8sControlPlaneStatus. +func (in *G8sControlPlaneStatus) DeepCopy() *G8sControlPlaneStatus { + if in == nil { + return nil + } + out := new(G8sControlPlaneStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PodNetworkRange) DeepCopyInto(out *PodNetworkRange) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodNetworkRange. +func (in *PodNetworkRange) DeepCopy() *PodNetworkRange { + if in == nil { + return nil + } + out := new(PodNetworkRange) + in.DeepCopyInto(out) + return out +} diff --git a/github/giantswarm/apiextensions/pkg/apis/provider/v1alpha1/zz_generated.deepcopy.go b/github/giantswarm/apiextensions/pkg/apis/provider/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 000000000..7fce2c74e --- /dev/null +++ b/github/giantswarm/apiextensions/pkg/apis/provider/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,1580 @@ +// +build !ignore_autogenerated + +/* +Copyright 2020 Giant Swarm GmbH. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + net "net" + + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfig) DeepCopyInto(out *AWSConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfig. +func (in *AWSConfig) DeepCopy() *AWSConfig { + if in == nil { + return nil + } + out := new(AWSConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AWSConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigList) DeepCopyInto(out *AWSConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]AWSConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigList. +func (in *AWSConfigList) DeepCopy() *AWSConfigList { + if in == nil { + return nil + } + out := new(AWSConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AWSConfigList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigSpec) DeepCopyInto(out *AWSConfigSpec) { + *out = *in + in.Cluster.DeepCopyInto(&out.Cluster) + in.AWS.DeepCopyInto(&out.AWS) + out.VersionBundle = in.VersionBundle + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpec. +func (in *AWSConfigSpec) DeepCopy() *AWSConfigSpec { + if in == nil { + return nil + } + out := new(AWSConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigSpecAWS) DeepCopyInto(out *AWSConfigSpecAWS) { + *out = *in + out.API = in.API + out.CredentialSecret = in.CredentialSecret + out.Etcd = in.Etcd + out.HostedZones = in.HostedZones + out.Ingress = in.Ingress + if in.Masters != nil { + in, out := &in.Masters, &out.Masters + *out = make([]AWSConfigSpecAWSNode, len(*in)) + copy(*out, *in) + } + in.VPC.DeepCopyInto(&out.VPC) + if in.Workers != nil { + in, out := &in.Workers, &out.Workers + *out = make([]AWSConfigSpecAWSNode, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWS. +func (in *AWSConfigSpecAWS) DeepCopy() *AWSConfigSpecAWS { + if in == nil { + return nil + } + out := new(AWSConfigSpecAWS) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigSpecAWSAPI) DeepCopyInto(out *AWSConfigSpecAWSAPI) { + *out = *in + out.ELB = in.ELB + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWSAPI. +func (in *AWSConfigSpecAWSAPI) DeepCopy() *AWSConfigSpecAWSAPI { + if in == nil { + return nil + } + out := new(AWSConfigSpecAWSAPI) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigSpecAWSAPIELB) DeepCopyInto(out *AWSConfigSpecAWSAPIELB) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWSAPIELB. +func (in *AWSConfigSpecAWSAPIELB) DeepCopy() *AWSConfigSpecAWSAPIELB { + if in == nil { + return nil + } + out := new(AWSConfigSpecAWSAPIELB) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigSpecAWSEtcd) DeepCopyInto(out *AWSConfigSpecAWSEtcd) { + *out = *in + out.ELB = in.ELB + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWSEtcd. +func (in *AWSConfigSpecAWSEtcd) DeepCopy() *AWSConfigSpecAWSEtcd { + if in == nil { + return nil + } + out := new(AWSConfigSpecAWSEtcd) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigSpecAWSEtcdELB) DeepCopyInto(out *AWSConfigSpecAWSEtcdELB) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWSEtcdELB. +func (in *AWSConfigSpecAWSEtcdELB) DeepCopy() *AWSConfigSpecAWSEtcdELB { + if in == nil { + return nil + } + out := new(AWSConfigSpecAWSEtcdELB) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigSpecAWSHostedZones) DeepCopyInto(out *AWSConfigSpecAWSHostedZones) { + *out = *in + out.API = in.API + out.Etcd = in.Etcd + out.Ingress = in.Ingress + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWSHostedZones. +func (in *AWSConfigSpecAWSHostedZones) DeepCopy() *AWSConfigSpecAWSHostedZones { + if in == nil { + return nil + } + out := new(AWSConfigSpecAWSHostedZones) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigSpecAWSHostedZonesZone) DeepCopyInto(out *AWSConfigSpecAWSHostedZonesZone) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWSHostedZonesZone. +func (in *AWSConfigSpecAWSHostedZonesZone) DeepCopy() *AWSConfigSpecAWSHostedZonesZone { + if in == nil { + return nil + } + out := new(AWSConfigSpecAWSHostedZonesZone) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigSpecAWSIngress) DeepCopyInto(out *AWSConfigSpecAWSIngress) { + *out = *in + out.ELB = in.ELB + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWSIngress. +func (in *AWSConfigSpecAWSIngress) DeepCopy() *AWSConfigSpecAWSIngress { + if in == nil { + return nil + } + out := new(AWSConfigSpecAWSIngress) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigSpecAWSIngressELB) DeepCopyInto(out *AWSConfigSpecAWSIngressELB) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWSIngressELB. +func (in *AWSConfigSpecAWSIngressELB) DeepCopy() *AWSConfigSpecAWSIngressELB { + if in == nil { + return nil + } + out := new(AWSConfigSpecAWSIngressELB) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigSpecAWSNode) DeepCopyInto(out *AWSConfigSpecAWSNode) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWSNode. +func (in *AWSConfigSpecAWSNode) DeepCopy() *AWSConfigSpecAWSNode { + if in == nil { + return nil + } + out := new(AWSConfigSpecAWSNode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigSpecAWSVPC) DeepCopyInto(out *AWSConfigSpecAWSVPC) { + *out = *in + if in.RouteTableNames != nil { + in, out := &in.RouteTableNames, &out.RouteTableNames + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWSVPC. +func (in *AWSConfigSpecAWSVPC) DeepCopy() *AWSConfigSpecAWSVPC { + if in == nil { + return nil + } + out := new(AWSConfigSpecAWSVPC) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigSpecVersionBundle) DeepCopyInto(out *AWSConfigSpecVersionBundle) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecVersionBundle. +func (in *AWSConfigSpecVersionBundle) DeepCopy() *AWSConfigSpecVersionBundle { + if in == nil { + return nil + } + out := new(AWSConfigSpecVersionBundle) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigStatus) DeepCopyInto(out *AWSConfigStatus) { + *out = *in + in.AWS.DeepCopyInto(&out.AWS) + in.Cluster.DeepCopyInto(&out.Cluster) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigStatus. +func (in *AWSConfigStatus) DeepCopy() *AWSConfigStatus { + if in == nil { + return nil + } + out := new(AWSConfigStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigStatusAWS) DeepCopyInto(out *AWSConfigStatusAWS) { + *out = *in + if in.AvailabilityZones != nil { + in, out := &in.AvailabilityZones, &out.AvailabilityZones + *out = make([]AWSConfigStatusAWSAvailabilityZone, len(*in)) + copy(*out, *in) + } + out.AutoScalingGroup = in.AutoScalingGroup + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigStatusAWS. +func (in *AWSConfigStatusAWS) DeepCopy() *AWSConfigStatusAWS { + if in == nil { + return nil + } + out := new(AWSConfigStatusAWS) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigStatusAWSAutoScalingGroup) DeepCopyInto(out *AWSConfigStatusAWSAutoScalingGroup) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigStatusAWSAutoScalingGroup. +func (in *AWSConfigStatusAWSAutoScalingGroup) DeepCopy() *AWSConfigStatusAWSAutoScalingGroup { + if in == nil { + return nil + } + out := new(AWSConfigStatusAWSAutoScalingGroup) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigStatusAWSAvailabilityZone) DeepCopyInto(out *AWSConfigStatusAWSAvailabilityZone) { + *out = *in + out.Subnet = in.Subnet + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigStatusAWSAvailabilityZone. +func (in *AWSConfigStatusAWSAvailabilityZone) DeepCopy() *AWSConfigStatusAWSAvailabilityZone { + if in == nil { + return nil + } + out := new(AWSConfigStatusAWSAvailabilityZone) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigStatusAWSAvailabilityZoneSubnet) DeepCopyInto(out *AWSConfigStatusAWSAvailabilityZoneSubnet) { + *out = *in + out.Private = in.Private + out.Public = in.Public + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigStatusAWSAvailabilityZoneSubnet. +func (in *AWSConfigStatusAWSAvailabilityZoneSubnet) DeepCopy() *AWSConfigStatusAWSAvailabilityZoneSubnet { + if in == nil { + return nil + } + out := new(AWSConfigStatusAWSAvailabilityZoneSubnet) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigStatusAWSAvailabilityZoneSubnetPrivate) DeepCopyInto(out *AWSConfigStatusAWSAvailabilityZoneSubnetPrivate) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigStatusAWSAvailabilityZoneSubnetPrivate. +func (in *AWSConfigStatusAWSAvailabilityZoneSubnetPrivate) DeepCopy() *AWSConfigStatusAWSAvailabilityZoneSubnetPrivate { + if in == nil { + return nil + } + out := new(AWSConfigStatusAWSAvailabilityZoneSubnetPrivate) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AWSConfigStatusAWSAvailabilityZoneSubnetPublic) DeepCopyInto(out *AWSConfigStatusAWSAvailabilityZoneSubnetPublic) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigStatusAWSAvailabilityZoneSubnetPublic. +func (in *AWSConfigStatusAWSAvailabilityZoneSubnetPublic) DeepCopy() *AWSConfigStatusAWSAvailabilityZoneSubnetPublic { + if in == nil { + return nil + } + out := new(AWSConfigStatusAWSAvailabilityZoneSubnetPublic) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureConfig) DeepCopyInto(out *AzureConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfig. +func (in *AzureConfig) DeepCopy() *AzureConfig { + if in == nil { + return nil + } + out := new(AzureConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AzureConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureConfigList) DeepCopyInto(out *AzureConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]AzureConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigList. +func (in *AzureConfigList) DeepCopy() *AzureConfigList { + if in == nil { + return nil + } + out := new(AzureConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *AzureConfigList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureConfigSpec) DeepCopyInto(out *AzureConfigSpec) { + *out = *in + in.Cluster.DeepCopyInto(&out.Cluster) + in.Azure.DeepCopyInto(&out.Azure) + out.VersionBundle = in.VersionBundle + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigSpec. +func (in *AzureConfigSpec) DeepCopy() *AzureConfigSpec { + if in == nil { + return nil + } + out := new(AzureConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureConfigSpecAzure) DeepCopyInto(out *AzureConfigSpecAzure) { + *out = *in + if in.AvailabilityZones != nil { + in, out := &in.AvailabilityZones, &out.AvailabilityZones + *out = make([]int, len(*in)) + copy(*out, *in) + } + out.CredentialSecret = in.CredentialSecret + out.DNSZones = in.DNSZones + if in.Masters != nil { + in, out := &in.Masters, &out.Masters + *out = make([]AzureConfigSpecAzureNode, len(*in)) + copy(*out, *in) + } + out.VirtualNetwork = in.VirtualNetwork + if in.Workers != nil { + in, out := &in.Workers, &out.Workers + *out = make([]AzureConfigSpecAzureNode, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigSpecAzure. +func (in *AzureConfigSpecAzure) DeepCopy() *AzureConfigSpecAzure { + if in == nil { + return nil + } + out := new(AzureConfigSpecAzure) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureConfigSpecAzureDNSZones) DeepCopyInto(out *AzureConfigSpecAzureDNSZones) { + *out = *in + out.API = in.API + out.Etcd = in.Etcd + out.Ingress = in.Ingress + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigSpecAzureDNSZones. +func (in *AzureConfigSpecAzureDNSZones) DeepCopy() *AzureConfigSpecAzureDNSZones { + if in == nil { + return nil + } + out := new(AzureConfigSpecAzureDNSZones) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureConfigSpecAzureDNSZonesDNSZone) DeepCopyInto(out *AzureConfigSpecAzureDNSZonesDNSZone) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigSpecAzureDNSZonesDNSZone. +func (in *AzureConfigSpecAzureDNSZonesDNSZone) DeepCopy() *AzureConfigSpecAzureDNSZonesDNSZone { + if in == nil { + return nil + } + out := new(AzureConfigSpecAzureDNSZonesDNSZone) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureConfigSpecAzureNode) DeepCopyInto(out *AzureConfigSpecAzureNode) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigSpecAzureNode. +func (in *AzureConfigSpecAzureNode) DeepCopy() *AzureConfigSpecAzureNode { + if in == nil { + return nil + } + out := new(AzureConfigSpecAzureNode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureConfigSpecAzureVirtualNetwork) DeepCopyInto(out *AzureConfigSpecAzureVirtualNetwork) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigSpecAzureVirtualNetwork. +func (in *AzureConfigSpecAzureVirtualNetwork) DeepCopy() *AzureConfigSpecAzureVirtualNetwork { + if in == nil { + return nil + } + out := new(AzureConfigSpecAzureVirtualNetwork) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureConfigSpecVersionBundle) DeepCopyInto(out *AzureConfigSpecVersionBundle) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigSpecVersionBundle. +func (in *AzureConfigSpecVersionBundle) DeepCopy() *AzureConfigSpecVersionBundle { + if in == nil { + return nil + } + out := new(AzureConfigSpecVersionBundle) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureConfigStatus) DeepCopyInto(out *AzureConfigStatus) { + *out = *in + in.Cluster.DeepCopyInto(&out.Cluster) + in.Provider.DeepCopyInto(&out.Provider) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigStatus. +func (in *AzureConfigStatus) DeepCopy() *AzureConfigStatus { + if in == nil { + return nil + } + out := new(AzureConfigStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureConfigStatusProvider) DeepCopyInto(out *AzureConfigStatusProvider) { + *out = *in + if in.AvailabilityZones != nil { + in, out := &in.AvailabilityZones, &out.AvailabilityZones + *out = make([]int, len(*in)) + copy(*out, *in) + } + out.Ingress = in.Ingress + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigStatusProvider. +func (in *AzureConfigStatusProvider) DeepCopy() *AzureConfigStatusProvider { + if in == nil { + return nil + } + out := new(AzureConfigStatusProvider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureConfigStatusProviderIngress) DeepCopyInto(out *AzureConfigStatusProviderIngress) { + *out = *in + out.LoadBalancer = in.LoadBalancer + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigStatusProviderIngress. +func (in *AzureConfigStatusProviderIngress) DeepCopy() *AzureConfigStatusProviderIngress { + if in == nil { + return nil + } + out := new(AzureConfigStatusProviderIngress) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AzureConfigStatusProviderIngressLoadBalancer) DeepCopyInto(out *AzureConfigStatusProviderIngressLoadBalancer) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigStatusProviderIngressLoadBalancer. +func (in *AzureConfigStatusProviderIngressLoadBalancer) DeepCopy() *AzureConfigStatusProviderIngressLoadBalancer { + if in == nil { + return nil + } + out := new(AzureConfigStatusProviderIngressLoadBalancer) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Cluster) DeepCopyInto(out *Cluster) { + *out = *in + out.Calico = in.Calico + out.Customer = in.Customer + out.Docker = in.Docker + out.Etcd = in.Etcd + in.Kubernetes.DeepCopyInto(&out.Kubernetes) + if in.Masters != nil { + in, out := &in.Masters, &out.Masters + *out = make([]ClusterNode, len(*in)) + copy(*out, *in) + } + out.Scaling = in.Scaling + if in.Workers != nil { + in, out := &in.Workers, &out.Workers + *out = make([]ClusterNode, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Cluster. +func (in *Cluster) DeepCopy() *Cluster { + if in == nil { + return nil + } + out := new(Cluster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterCalico) DeepCopyInto(out *ClusterCalico) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterCalico. +func (in *ClusterCalico) DeepCopy() *ClusterCalico { + if in == nil { + return nil + } + out := new(ClusterCalico) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterCustomer) DeepCopyInto(out *ClusterCustomer) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterCustomer. +func (in *ClusterCustomer) DeepCopy() *ClusterCustomer { + if in == nil { + return nil + } + out := new(ClusterCustomer) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterDocker) DeepCopyInto(out *ClusterDocker) { + *out = *in + out.Daemon = in.Daemon + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterDocker. +func (in *ClusterDocker) DeepCopy() *ClusterDocker { + if in == nil { + return nil + } + out := new(ClusterDocker) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterDockerDaemon) DeepCopyInto(out *ClusterDockerDaemon) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterDockerDaemon. +func (in *ClusterDockerDaemon) DeepCopy() *ClusterDockerDaemon { + if in == nil { + return nil + } + out := new(ClusterDockerDaemon) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterEtcd) DeepCopyInto(out *ClusterEtcd) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterEtcd. +func (in *ClusterEtcd) DeepCopy() *ClusterEtcd { + if in == nil { + return nil + } + out := new(ClusterEtcd) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterKubernetes) DeepCopyInto(out *ClusterKubernetes) { + *out = *in + out.API = in.API + in.DNS.DeepCopyInto(&out.DNS) + out.IngressController = in.IngressController + out.Kubelet = in.Kubelet + out.NetworkSetup = in.NetworkSetup + in.SSH.DeepCopyInto(&out.SSH) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetes. +func (in *ClusterKubernetes) DeepCopy() *ClusterKubernetes { + if in == nil { + return nil + } + out := new(ClusterKubernetes) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterKubernetesAPI) DeepCopyInto(out *ClusterKubernetesAPI) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetesAPI. +func (in *ClusterKubernetesAPI) DeepCopy() *ClusterKubernetesAPI { + if in == nil { + return nil + } + out := new(ClusterKubernetesAPI) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterKubernetesDNS) DeepCopyInto(out *ClusterKubernetesDNS) { + *out = *in + if in.IP != nil { + in, out := &in.IP, &out.IP + *out = make(net.IP, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetesDNS. +func (in *ClusterKubernetesDNS) DeepCopy() *ClusterKubernetesDNS { + if in == nil { + return nil + } + out := new(ClusterKubernetesDNS) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterKubernetesIngressController) DeepCopyInto(out *ClusterKubernetesIngressController) { + *out = *in + out.Docker = in.Docker + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetesIngressController. +func (in *ClusterKubernetesIngressController) DeepCopy() *ClusterKubernetesIngressController { + if in == nil { + return nil + } + out := new(ClusterKubernetesIngressController) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterKubernetesIngressControllerDocker) DeepCopyInto(out *ClusterKubernetesIngressControllerDocker) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetesIngressControllerDocker. +func (in *ClusterKubernetesIngressControllerDocker) DeepCopy() *ClusterKubernetesIngressControllerDocker { + if in == nil { + return nil + } + out := new(ClusterKubernetesIngressControllerDocker) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterKubernetesKubelet) DeepCopyInto(out *ClusterKubernetesKubelet) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetesKubelet. +func (in *ClusterKubernetesKubelet) DeepCopy() *ClusterKubernetesKubelet { + if in == nil { + return nil + } + out := new(ClusterKubernetesKubelet) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterKubernetesNetworkSetup) DeepCopyInto(out *ClusterKubernetesNetworkSetup) { + *out = *in + out.Docker = in.Docker + out.KubeProxy = in.KubeProxy + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetesNetworkSetup. +func (in *ClusterKubernetesNetworkSetup) DeepCopy() *ClusterKubernetesNetworkSetup { + if in == nil { + return nil + } + out := new(ClusterKubernetesNetworkSetup) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterKubernetesNetworkSetupDocker) DeepCopyInto(out *ClusterKubernetesNetworkSetupDocker) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetesNetworkSetupDocker. +func (in *ClusterKubernetesNetworkSetupDocker) DeepCopy() *ClusterKubernetesNetworkSetupDocker { + if in == nil { + return nil + } + out := new(ClusterKubernetesNetworkSetupDocker) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterKubernetesNetworkSetupKubeProxy) DeepCopyInto(out *ClusterKubernetesNetworkSetupKubeProxy) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetesNetworkSetupKubeProxy. +func (in *ClusterKubernetesNetworkSetupKubeProxy) DeepCopy() *ClusterKubernetesNetworkSetupKubeProxy { + if in == nil { + return nil + } + out := new(ClusterKubernetesNetworkSetupKubeProxy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterKubernetesSSH) DeepCopyInto(out *ClusterKubernetesSSH) { + *out = *in + if in.UserList != nil { + in, out := &in.UserList, &out.UserList + *out = make([]ClusterKubernetesSSHUser, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetesSSH. +func (in *ClusterKubernetesSSH) DeepCopy() *ClusterKubernetesSSH { + if in == nil { + return nil + } + out := new(ClusterKubernetesSSH) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterKubernetesSSHUser) DeepCopyInto(out *ClusterKubernetesSSHUser) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetesSSHUser. +func (in *ClusterKubernetesSSHUser) DeepCopy() *ClusterKubernetesSSHUser { + if in == nil { + return nil + } + out := new(ClusterKubernetesSSHUser) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterNode) DeepCopyInto(out *ClusterNode) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterNode. +func (in *ClusterNode) DeepCopy() *ClusterNode { + if in == nil { + return nil + } + out := new(ClusterNode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterScaling) DeepCopyInto(out *ClusterScaling) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterScaling. +func (in *ClusterScaling) DeepCopy() *ClusterScaling { + if in == nil { + return nil + } + out := new(ClusterScaling) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CredentialSecret) DeepCopyInto(out *CredentialSecret) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CredentialSecret. +func (in *CredentialSecret) DeepCopy() *CredentialSecret { + if in == nil { + return nil + } + out := new(CredentialSecret) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMConfig) DeepCopyInto(out *KVMConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfig. +func (in *KVMConfig) DeepCopy() *KVMConfig { + if in == nil { + return nil + } + out := new(KVMConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *KVMConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMConfigList) DeepCopyInto(out *KVMConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]KVMConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigList. +func (in *KVMConfigList) DeepCopy() *KVMConfigList { + if in == nil { + return nil + } + out := new(KVMConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *KVMConfigList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMConfigSpec) DeepCopyInto(out *KVMConfigSpec) { + *out = *in + in.Cluster.DeepCopyInto(&out.Cluster) + in.KVM.DeepCopyInto(&out.KVM) + out.VersionBundle = in.VersionBundle + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpec. +func (in *KVMConfigSpec) DeepCopy() *KVMConfigSpec { + if in == nil { + return nil + } + out := new(KVMConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMConfigSpecKVM) DeepCopyInto(out *KVMConfigSpecKVM) { + *out = *in + out.EndpointUpdater = in.EndpointUpdater + out.K8sKVM = in.K8sKVM + if in.Masters != nil { + in, out := &in.Masters, &out.Masters + *out = make([]KVMConfigSpecKVMNode, len(*in)) + copy(*out, *in) + } + out.Network = in.Network + out.NodeController = in.NodeController + if in.PortMappings != nil { + in, out := &in.PortMappings, &out.PortMappings + *out = make([]KVMConfigSpecKVMPortMappings, len(*in)) + copy(*out, *in) + } + if in.Workers != nil { + in, out := &in.Workers, &out.Workers + *out = make([]KVMConfigSpecKVMNode, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVM. +func (in *KVMConfigSpecKVM) DeepCopy() *KVMConfigSpecKVM { + if in == nil { + return nil + } + out := new(KVMConfigSpecKVM) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMConfigSpecKVMEndpointUpdater) DeepCopyInto(out *KVMConfigSpecKVMEndpointUpdater) { + *out = *in + out.Docker = in.Docker + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVMEndpointUpdater. +func (in *KVMConfigSpecKVMEndpointUpdater) DeepCopy() *KVMConfigSpecKVMEndpointUpdater { + if in == nil { + return nil + } + out := new(KVMConfigSpecKVMEndpointUpdater) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMConfigSpecKVMEndpointUpdaterDocker) DeepCopyInto(out *KVMConfigSpecKVMEndpointUpdaterDocker) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVMEndpointUpdaterDocker. +func (in *KVMConfigSpecKVMEndpointUpdaterDocker) DeepCopy() *KVMConfigSpecKVMEndpointUpdaterDocker { + if in == nil { + return nil + } + out := new(KVMConfigSpecKVMEndpointUpdaterDocker) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMConfigSpecKVMK8sKVM) DeepCopyInto(out *KVMConfigSpecKVMK8sKVM) { + *out = *in + out.Docker = in.Docker + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVMK8sKVM. +func (in *KVMConfigSpecKVMK8sKVM) DeepCopy() *KVMConfigSpecKVMK8sKVM { + if in == nil { + return nil + } + out := new(KVMConfigSpecKVMK8sKVM) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMConfigSpecKVMK8sKVMDocker) DeepCopyInto(out *KVMConfigSpecKVMK8sKVMDocker) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVMK8sKVMDocker. +func (in *KVMConfigSpecKVMK8sKVMDocker) DeepCopy() *KVMConfigSpecKVMK8sKVMDocker { + if in == nil { + return nil + } + out := new(KVMConfigSpecKVMK8sKVMDocker) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMConfigSpecKVMNetwork) DeepCopyInto(out *KVMConfigSpecKVMNetwork) { + *out = *in + out.Flannel = in.Flannel + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVMNetwork. +func (in *KVMConfigSpecKVMNetwork) DeepCopy() *KVMConfigSpecKVMNetwork { + if in == nil { + return nil + } + out := new(KVMConfigSpecKVMNetwork) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMConfigSpecKVMNetworkFlannel) DeepCopyInto(out *KVMConfigSpecKVMNetworkFlannel) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVMNetworkFlannel. +func (in *KVMConfigSpecKVMNetworkFlannel) DeepCopy() *KVMConfigSpecKVMNetworkFlannel { + if in == nil { + return nil + } + out := new(KVMConfigSpecKVMNetworkFlannel) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMConfigSpecKVMNode) DeepCopyInto(out *KVMConfigSpecKVMNode) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVMNode. +func (in *KVMConfigSpecKVMNode) DeepCopy() *KVMConfigSpecKVMNode { + if in == nil { + return nil + } + out := new(KVMConfigSpecKVMNode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMConfigSpecKVMNodeController) DeepCopyInto(out *KVMConfigSpecKVMNodeController) { + *out = *in + out.Docker = in.Docker + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVMNodeController. +func (in *KVMConfigSpecKVMNodeController) DeepCopy() *KVMConfigSpecKVMNodeController { + if in == nil { + return nil + } + out := new(KVMConfigSpecKVMNodeController) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMConfigSpecKVMNodeControllerDocker) DeepCopyInto(out *KVMConfigSpecKVMNodeControllerDocker) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVMNodeControllerDocker. +func (in *KVMConfigSpecKVMNodeControllerDocker) DeepCopy() *KVMConfigSpecKVMNodeControllerDocker { + if in == nil { + return nil + } + out := new(KVMConfigSpecKVMNodeControllerDocker) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMConfigSpecKVMPortMappings) DeepCopyInto(out *KVMConfigSpecKVMPortMappings) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVMPortMappings. +func (in *KVMConfigSpecKVMPortMappings) DeepCopy() *KVMConfigSpecKVMPortMappings { + if in == nil { + return nil + } + out := new(KVMConfigSpecKVMPortMappings) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMConfigSpecVersionBundle) DeepCopyInto(out *KVMConfigSpecVersionBundle) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecVersionBundle. +func (in *KVMConfigSpecVersionBundle) DeepCopy() *KVMConfigSpecVersionBundle { + if in == nil { + return nil + } + out := new(KVMConfigSpecVersionBundle) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMConfigStatus) DeepCopyInto(out *KVMConfigStatus) { + *out = *in + in.Cluster.DeepCopyInto(&out.Cluster) + in.KVM.DeepCopyInto(&out.KVM) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigStatus. +func (in *KVMConfigStatus) DeepCopy() *KVMConfigStatus { + if in == nil { + return nil + } + out := new(KVMConfigStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KVMConfigStatusKVM) DeepCopyInto(out *KVMConfigStatusKVM) { + *out = *in + if in.NodeIndexes != nil { + in, out := &in.NodeIndexes, &out.NodeIndexes + *out = make(map[string]int, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigStatusKVM. +func (in *KVMConfigStatusKVM) DeepCopy() *KVMConfigStatusKVM { + if in == nil { + return nil + } + out := new(KVMConfigStatusKVM) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StatusCluster) DeepCopyInto(out *StatusCluster) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]StatusClusterCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + out.Network = in.Network + if in.Nodes != nil { + in, out := &in.Nodes, &out.Nodes + *out = make([]StatusClusterNode, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Resources != nil { + in, out := &in.Resources, &out.Resources + *out = make([]StatusClusterResource, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + out.Scaling = in.Scaling + if in.Versions != nil { + in, out := &in.Versions, &out.Versions + *out = make([]StatusClusterVersion, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatusCluster. +func (in *StatusCluster) DeepCopy() *StatusCluster { + if in == nil { + return nil + } + out := new(StatusCluster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StatusClusterCondition) DeepCopyInto(out *StatusClusterCondition) { + *out = *in + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatusClusterCondition. +func (in *StatusClusterCondition) DeepCopy() *StatusClusterCondition { + if in == nil { + return nil + } + out := new(StatusClusterCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StatusClusterNetwork) DeepCopyInto(out *StatusClusterNetwork) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatusClusterNetwork. +func (in *StatusClusterNetwork) DeepCopy() *StatusClusterNetwork { + if in == nil { + return nil + } + out := new(StatusClusterNetwork) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StatusClusterNode) DeepCopyInto(out *StatusClusterNode) { + *out = *in + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatusClusterNode. +func (in *StatusClusterNode) DeepCopy() *StatusClusterNode { + if in == nil { + return nil + } + out := new(StatusClusterNode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StatusClusterResource) DeepCopyInto(out *StatusClusterResource) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]StatusClusterResourceCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatusClusterResource. +func (in *StatusClusterResource) DeepCopy() *StatusClusterResource { + if in == nil { + return nil + } + out := new(StatusClusterResource) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StatusClusterResourceCondition) DeepCopyInto(out *StatusClusterResourceCondition) { + *out = *in + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatusClusterResourceCondition. +func (in *StatusClusterResourceCondition) DeepCopy() *StatusClusterResourceCondition { + if in == nil { + return nil + } + out := new(StatusClusterResourceCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StatusClusterScaling) DeepCopyInto(out *StatusClusterScaling) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatusClusterScaling. +func (in *StatusClusterScaling) DeepCopy() *StatusClusterScaling { + if in == nil { + return nil + } + out := new(StatusClusterScaling) + in.DeepCopyInto(out) + return out +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatusClusterVersion. +func (in *StatusClusterVersion) DeepCopy() *StatusClusterVersion { + if in == nil { + return nil + } + out := new(StatusClusterVersion) + in.DeepCopyInto(out) + return out +} diff --git a/github/giantswarm/apiextensions/pkg/apis/release/v1alpha1/zz_generated.deepcopy.go b/github/giantswarm/apiextensions/pkg/apis/release/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 000000000..858091fee --- /dev/null +++ b/github/giantswarm/apiextensions/pkg/apis/release/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,259 @@ +// +build !ignore_autogenerated + +/* +Copyright 2020 Giant Swarm GmbH. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DeepCopyDate) DeepCopyInto(out *DeepCopyDate) { + *out = *in + in.Time.DeepCopyInto(&out.Time) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeepCopyDate. +func (in *DeepCopyDate) DeepCopy() *DeepCopyDate { + if in == nil { + return nil + } + out := new(DeepCopyDate) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Release) DeepCopyInto(out *Release) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Release. +func (in *Release) DeepCopy() *Release { + if in == nil { + return nil + } + out := new(Release) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Release) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ReleaseCycle) DeepCopyInto(out *ReleaseCycle) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + out.Status = in.Status + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseCycle. +func (in *ReleaseCycle) DeepCopy() *ReleaseCycle { + if in == nil { + return nil + } + out := new(ReleaseCycle) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ReleaseCycle) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ReleaseCycleList) DeepCopyInto(out *ReleaseCycleList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ReleaseCycle, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseCycleList. +func (in *ReleaseCycleList) DeepCopy() *ReleaseCycleList { + if in == nil { + return nil + } + out := new(ReleaseCycleList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ReleaseCycleList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ReleaseCycleSpec) DeepCopyInto(out *ReleaseCycleSpec) { + *out = *in + in.DisabledDate.DeepCopyInto(&out.DisabledDate) + in.EnabledDate.DeepCopyInto(&out.EnabledDate) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseCycleSpec. +func (in *ReleaseCycleSpec) DeepCopy() *ReleaseCycleSpec { + if in == nil { + return nil + } + out := new(ReleaseCycleSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ReleaseCycleStatus) DeepCopyInto(out *ReleaseCycleStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseCycleStatus. +func (in *ReleaseCycleStatus) DeepCopy() *ReleaseCycleStatus { + if in == nil { + return nil + } + out := new(ReleaseCycleStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ReleaseList) DeepCopyInto(out *ReleaseList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Release, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseList. +func (in *ReleaseList) DeepCopy() *ReleaseList { + if in == nil { + return nil + } + out := new(ReleaseList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ReleaseList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ReleaseSpec) DeepCopyInto(out *ReleaseSpec) { + *out = *in + if in.Apps != nil { + in, out := &in.Apps, &out.Apps + *out = make([]ReleaseSpecApp, len(*in)) + copy(*out, *in) + } + if in.Components != nil { + in, out := &in.Components, &out.Components + *out = make([]ReleaseSpecComponent, len(*in)) + copy(*out, *in) + } + if in.Date != nil { + in, out := &in.Date, &out.Date + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseSpec. +func (in *ReleaseSpec) DeepCopy() *ReleaseSpec { + if in == nil { + return nil + } + out := new(ReleaseSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ReleaseSpecApp) DeepCopyInto(out *ReleaseSpecApp) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseSpecApp. +func (in *ReleaseSpecApp) DeepCopy() *ReleaseSpecApp { + if in == nil { + return nil + } + out := new(ReleaseSpecApp) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ReleaseSpecComponent) DeepCopyInto(out *ReleaseSpecComponent) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseSpecComponent. +func (in *ReleaseSpecComponent) DeepCopy() *ReleaseSpecComponent { + if in == nil { + return nil + } + out := new(ReleaseSpecComponent) + in.DeepCopyInto(out) + return out +} diff --git a/pkg/apis/infrastructure/v1alpha2/aws_cluster_types.go b/pkg/apis/infrastructure/v1alpha2/aws_cluster_types.go index 4cc7f143e..6372c7aeb 100644 --- a/pkg/apis/infrastructure/v1alpha2/aws_cluster_types.go +++ b/pkg/apis/infrastructure/v1alpha2/aws_cluster_types.go @@ -93,6 +93,9 @@ type AWSClusterSpecProvider struct { CredentialSecret AWSClusterSpecProviderCredentialSecret `json:"credentialSecret" yaml:"credentialSecret"` // Master holds master node configuration details. Master AWSClusterSpecProviderMaster `json:"master" yaml:"master"` + // Pod network configuration. + // +kubebuilder:validation:Optional + Pods PodNetworkRange `json:"pods" yaml:"pods"` // Region is the AWS region the cluster is to be running in. Region string `json:"region" yaml:"region"` } @@ -114,6 +117,12 @@ type AWSClusterSpecProviderMaster struct { InstanceType string `json:"instanceType" yaml:"instanceType"` } +// AWSClusterSpecProviderMaster Pod network configuration. +type PodNetworkRange struct { + // Subnet size, expresses as the count of leading 1 bits in the subnet mask of this subnet. + CIDRBlock string `json:"cidrBlock" yaml:"cidrBlock"` +} + // AWSClusterStatus holds status information about the cluster, populated once the // cluster is in creation or created. type AWSClusterStatus struct { diff --git a/pkg/crd/pkged.go b/pkg/crd/pkged.go index a62ebda1c..f5fde9f38 100644 --- a/pkg/crd/pkged.go +++ b/pkg/crd/pkged.go @@ -9,4 +9,4 @@ import ( "github.com/markbates/pkger/pkging/mem" ) -var _ = pkger.Apply(mem.UnmarshalEmbed([]byte(`1f8b08000000000000ffecbd6993e238b637fe5526f2edbf9e692f3833e988fba24c61831b5c8d49bce8891b13969d830199f493ecdc98effe0f499617f09a4b75555f622263bac0d89674747496dff99dffb95bacfffdb2b9fbfd7feee68b6db083fff45ec2dfe60b77bddd1cdcd7f037375a3c1fb7cfebcde2654d2efbb678bdfbfdeeb7d9e6f975f3db31106167e3ff367ff96df3eafdd6e4165fee8661f4f2bafdd3dd0677bf377aea973bdd0d9fef7ebfbbfcf8db8b77f7fbdddd97bb27f775febc2d7caf6835ffcd775f0f8bf5bfdcd0bfef3479c97fba775fee8c9797c23bde7db91bbb5b2fb8fbfdffdefdf3eebfbfdc4db72e7abefb7dfbba7b8eff613cbb9b97f5ddef77eb97ed3f16ebcdd645e8d9ff07dc6dffe1eedd0572217afec762fd0fb85b20ff1f9eeb05cf775feed41765819e37f8bef9b799bfe0c7d069dbdcfdbede21f4e5eedb7394fcf7d3f3669bfc3afde8e217e3177f875ff47fee5acdfdd85dacd9e8debff8eacbf8c57fcf3d7e9bbffc337cf1c9adcce757fcd9ddef77fc3ff9cedd7ffef39f2f77ffa6b3d0489e7fffcd7b59ff7b31ffcd7bf57f83ee86fe10ef08fcfffef3d65d20f2d19aca1fbde4cbdd66717ebefbbd2b3c7eb90b5ffce7bbdf05bef3d079ecf01d9e7cf2afed825c2f7002f77fb8ceffe1ef9f78ee775efcbd73ff4f4994a46e477ce4ff3f4ef89de3eebedc2d36fff2f1bcd229de9ce8367bdedffdcedf3f3c3c08024fd6ee19fffbf1e1e1cb9d8e16ebd5ddef42f7cbdd70fd72f7fbe383c071f7bc84df67b6f0ef7e9738fecb9d8aff4be0bedc193ebe17f7e5ee4fd7ff97377ff91777f7fbffe5be90fffdf797bbaff86537d1b3871f3bc5ffc74b8f0f9cd079c4f7d337e4934741ec085d8efbcf97bb71f9f5f7ecfa6490fff972d76b79bdbc78dd060d7ed3e11e1ff94e57ecfce7cbdd345d1019bd78ab0d19af8c5674a53a5cf7fecb9d82dc39fd427d5e93ff1f6d22f7f599fce724fe4f3c31ff4d0429787ebde9bb0b7dd7e4ed6f1af167d2885fee2232b4ffb9fb73356f2b7fd7eaf13f5fee7c77ebb209c47b66bd4def9efe943cfa4d2af837378ad0c273b78b97f53fd39ffd73f1f22f378a3c77eba297f9e69f273744d5dabac57d984aef74ee05a6d33b5877d628f37b4ee41eb8eee3c39532ffb78b3635da5c14f9c7c7449bf317ca5c7cf85865de1199e2ec0addc7ee23cf8b0d957932c886ca3c7b7d6365ce3f4add8707f29b6966299836e7ef7f0e757ebd232ef47bba03d8d7d74a3b55b6a96ea5fb29569cb1f0e43567561fd2ab6ffaef47ebbf36ba29519577bd05b71d4da2c05391056cedec5addddf7858cff8d9e0706826b3d8282741e859b8e77922278ea0a634b43beda3ff6c26d04c3c9fdb0aff39e68eca1a9214fe8f25ea823433543d792225f457b388fb6c03602a02a9cf3f4f2c7b027073094f6beaa70f879de197ff6753e54f53d5c1b27281c37c01e6e8160ee46e196774273e15b680354f3340ad17e2402e491f7eadc0f07ce61b41ceef4af2ff8f72760d17b9a2ada025be71c8b3f7c5fc83bdf3a6e7a8baf73182a5bf0f432776cf9e0080ae758c73d10c73bfc6fa8a2a5631bf8be3b20a000ae8db32f28273895227888ce9e6a2ebfcff173fc1314cd0399a781bc712d3d20e35c486bd75276fe40171d5bdbe2774d9e698feff17f0f7bf2ab6b49abef0b59f606f237c73602a876d7f1771bd7d6b9a98076e0dbcb7c62cb87097b47ee1879e284ced340def8b616c06f57e388bfd72318fa3c549553fc8ecbec733c41df7beaec7ed897026899674f5596c0c2f79605c73a46205e1732d6ded73914650457ca646a3ae799a0bf008b0fd877c39e7cf0c2ee01d81ae75ae639fd1cafa77270cd74ade818d99fbc02b6bef442742073b77c996b1c7e4672fd1c501942de49e65c7536f743f3e409680f4373351ce84b5735b7ce54de8305fe1e9d87030d79f84f30774cb6f2cfc4efd40d87aab21baadd851b9a4bbfd799cf04f344ee7d92cfaedae5a13a993b4277873ff37bf20958fa1e0852f49c7dae3d9efbeae3dc570334548f81af9a67ffeb4bfe593d39826b0379a114403ab73c981ee68e25ad862a1f3c4ff1bd23e48893b96f4917cf01011c98c83b75e64f56f704a6720443b0ffbe905ffc8171f0ce2ffb91e0477e4f7afd3e18ef5ceb71ef08dd2db4cd9d6b1bd248a07bc9b534de57bb27efd45d011b20d8eb9e5dcbdb3ab6b67455c4014be77c5b43234139b8537e090549009644f7e549da829e7e02b6bef76d6d09ecf1fa620db9675b46df17f2d91f68110cbd3f32df51399fe7e704a8e6d911b5c81b1874fff6fc914be6039d876a7fee89f89da5351b7f7e4dd10ec4b2305b994f265e1bf66e532a0305eb1daf33be965c8ff0be1e2de427606b02d679f15ae0f9451e9325159ca0c0c5eb6beec040debb96c40d07c60b98ca4ba82204d7933ff2ebfd75ee89e6025a88f34ef8590a8f7510965f78eacc2782b28361971baa1a1a0ecc03de67c09aec867db41bf675bc173713413983e95fbee6645dbd134fd6d03b79f9710e0c89e88f81ce7921da814376cff3c8579515d637976bef0fd001eb5e2868ff0fbf4376ad3c51460e3b0792e7c827ac7bbcb511a5fa33bbb6fa1e86200297bf2bd12f13a1bb03215a135963eb2848a16b79642f3be16c1e9f0308f464d155cd1dd661de603c7742730305acdfa5f5d57bc47b019e98ece0f340d940c19b3bb68686aa813cf5b87fb6ccd5687ea9231a8c93de3f7e575f77ecaf25d7e039319027e827d796b9f82cff96f9dddc0bcd10d81a82a18ef56a90cce149dee2ef89de5395088664af2df3e753f19f1f2a1bdf32c99c3af664ee09c1deb78e2b22e778fed46304ac099d635b3e782739828babb9bad6d5ade687fec5e77b813c54ced177c7e251462e76f4dfddf0524ea0a51c623b25c0f60d0cbd7972fe1e0ad636bf86f40c88cf0e226b83d566a8ce76e0d421ff1e59c97c6cd9bc16ca4cc1be62bab3767e6cfde0583abadc9f977f57ba3a6b2f4ce5889dcbd97b66e78cc94e7296d5cf4f6e9e473d198d426f3754fdc8b124ce13fdc00bb97239a93d932e7475681e7d0b9d8035a990298e8e6f52faeedba19a9997d2eb92f7da3b2139f38bdf6ba02347d490ffad5c86afd645897f436c1580bcd0dc398249cf53c15c7aa1c995caec2991c98a3d83d759e18603fd058ae606f4e4059832db17db2ac69ee949d7eae03313cb46b2fee5f25b613b5eed593cc7b3cabd5fa4f39ff0da5dca6a6233ceeae7e783f7347bde2fbaa7cfc0c2f6e0848daf5acfe2e7e5fca89aebabec8afc9c13dbcab535042af6c928d6e3b57b3b1e67f9f913bf17b325afec7c7c8d863cdb8cbcd0bcb279d9b39cd8fe78b29443d1b346e9fc16d933b5fae3726d8b9e512b57ea710f84ae395b1d0a7f7f2d3fc9f5a9edb01e33bf2882e116dbd27b6f216fa0e0ef872ada3a968f862a88a03a9b83b07bc2b2e596e91fac577ad57648ed98063a07452d0042b1fe28d0a7ecfa027b890f3c7a4e718e8576595f85ee9d8c9e2c9293ded74b3b33b61b67795fbe706f35d397a6a98dcbf5c0b58ec4d7676c9f8d6b49af44a70ffc173cf6787df2f188934ffd6db57b766d63efad5755e707d62b1b28603d68ae986e740706e70dc6f7a353f7226ee247be1af0ce425a4281db5fe8d07dc579d2ecec8ff7730b1b7a86ef3bc4fe278d11e1b5165d152d5dea57ee3d01619991e27bcf7d218e2384b3b96feba84c16e8f3c8fea0f6705f3978fdd4264ee64a3537b0deb6a81877adcedc0e1573fa54f89e1cdd6345cfafd58d32e7dac6a6d8262f90451571582fb836d321e4dc9f43c189ff9dd707f9b9d3a76cbe2635e737bedf84fa228be7a93c20f2d7939fc8395535ce92b3a9c296dc263ed6c56f46d38bf1cfafbe273a13efcfab7ba63aed8fabb5a27358ecb35fad53b15c8ca6721ab34de7033ff700ac545717f9f4499c6ef932f7974a0007f28bf3d427f14516638e63be5b66d70d07ced1b18e0757ed1fe358e899c467acc9fd70609c7c6bf6c7a52e679f7ba211f883581faacad211cc03d6334f8571d7af8b613ccf9e7ae4bd50d9249f91753268cc7a3dbe1f2a5b9fc44b45638fcf75938d8b7d37ffafffbafb2b128defce305ea4161f1fba0f6d528b5257103b82c03f7e7c6a51ea7c5a6a51e21fc5ae78ffd01427c206d9142792b9be696a5112f9fb4ef7e1514c528b7429586a51e8dc528bb7d4e24f9e5abce514333945ef24d5e704d7e40c25e71210b5bd6f7fbd6771526cffe367611b381bf372ad473c46e2cfa6636373a51cbcf83c872a3afbfdcce7fdf2bc218bc77902da01d1dc38f690be07bed7405f4291d8942436ea8972e008e68a9eefcac6b58c20b6d9e277e91e8025c9b33eb2c67c9c23cbd87cde40db7baa79f25594be3fb53ff272529f2f22cf60d7635b1d607b8cd98b03b68e12f6adce8e102068f599fd18d1bc4c92070a8aecae618fc4870298fadabba1a2236f8def3dcec4b7b16ce1cf26d8fe5b42c1dfb9769479ae72a67e14f5ab88df50e0b7bb96c4015bdb39d6218ea5cf364355d9819ebc75ec15be37b1ad86037377f11c167bda0dfbfcde0b67f85e213cbfe47d2b7bb273cfc199c8b9a0efa1c5f33044dcf3b44bfc582f440b9ff870e33d504d015807eccfac479672728420f25573e90fcc139876034f5d6de3dce82eb69376d09a2cbdd03c43d13c398279d60ec5799f22ffdca5b9ee3faafdafaf6b9213a77e6490d8e02c7639cdad2989df1159503465c693b589df6d4665e0ca2748d6195f7bc0d703bcf74eb9dc30590b3cbfc01e32590abdb0bb8dd717c1d0384001613f82faf3c231c2f7298847f04ec847fe601cfb0de619ffb7af3ed23c20d66334c6ca7baa417ce6d142d6e042fe86f722eceb8127ccfef23527eb6a8fb7640d07ad72c317babba13f3948f566e65e353191d4572c8c8914e4cb52dfb2341f147883afd9187a9ccb22bee90258c73d0cfdeb5c743c2ff0d49983a9b41e2de4dcd9f0b678dd0fc88166c68cfd72a09a07a87625604d0a7331e5babee0bd393ef0dae43afa99df15e43b9c647c1571baaa987e831c661a87288f67379a03ba4644b6de16b7af8a9354e675f15ad6c6ee3379dd7d3c075292931bc82728f0083fcbb7c7bf7aae32c9e130f9a9ce33119c43e0f50e6c1f6fa180edd22e19d387cd416d4e81fcb1184a6d1e84da70e5d755e13332f2ca72146de2a74ff16faee3e983247779b15793cf3f263f99eab09f1967c0e6b668bf26fbb156361becd7ff6d794857341760ca9f9f6d9d03d6df1943d020ce9f3d7b4be2fd4c3eaa6c92523da112ff3ac61d790df388b9df64ce35f279de4611ba3b48317d69ee4c38f29e6820af44ee7cec8f2db03d246fa088521fa1f41c6f966ba3fbd4ecb4c26bf4494c023d0f26a5e34ceefb53db18a5ef4ccfc59ae70d7b79fb77f4d43f8dcf13fe673b3f1b9e8b115ce91b1feb177bd8e66cd432bf2373ed4ce510aa0acb6d611b9c7355f344cf31f30ca6f9dfe07312a8c4370be0605ca9db4cba0f386f6da28cfdcf013be0d8fa127c727afe2698e814bbaaa32ab964f3e584dd3d54cde03abe12cb6fac63dae4aa670caf33d01008cd13b0a425a07356767612fd80f53fb3ed7e453c52c17edbd4dba8590c121957806dd49195bbcf879d85497c92da996f9b9be4accfdb48f13d53dd53623736b08df03d5f7d4b43893cfcafc31936b411e81955f23dda4d2acfdcf7da10e5fbabfd3945e232d856c07e01b30110e8257118220f5e28215f35cf233b672b5761b14ad7bed6162ef10d989ce7c792d8c5f82c38d15a071aa7b9f079b2632b89bb509d00adee8ee076ca7076b5583c99f704f3c4e2490dc768667f93d9e3e45e9998055bab8c0fe7bf008a2d45498ea2607cbf767cca3c93d872033fcf5783207b365761ca7ee6f3aec17c7c6c9ccad691b7e093bcc9af79f6e5e5a40c5f54f05c120b8442278d1192dce861eea9c70086b304b73c7e1a9e1d6bf8373e037f1cd69eca5c6a9ffe6fdadf957352ef1f5662ebb11e8716f18d78efc493336464b3f5f928ac399b9b58e6de18f3ab39d7afe68be9af7a1b1fdbf2b3ad27a2b3af9adb9fcd77fec8d8739d0e194d733572c5762bdbf38518fe5a2cab5086532859fb0c4e21d1e942fa593e9f58b4e7eb6c99213be7bef577e35ea7b0aea07acdab7c01aeb40e269deb4b9dcfd158ebac14f35a549351a9d747d3bcad798d854db03b6d72c99c631bfc95fd575b73aa1c3ca5aca69dfe5ddb84b9dfa43a80d538a772207b83accc8008901c24a239d892f36e220481b79eec9e2d650b7ba92ec9c80e3d2716f28ce6a949ae1acb1fd5e3a1b2499e35f0235f9d93f72b91b722f95d42813f404142708de5d6243a3e2bbb895dd1eb9cc6d30e7e974c4db3b177c4f18e60dca7d2d9edc575cb6af780e5d516f417c7d638eff4b8c4ef35b2e8bf47360aa075d882106d2ab1e9e53ecc095847e4d88d7db429bb3eb39fcfbeaa70be3d4eedb37e80a0ca617db501967206533984e230d6fb692d70c9fc96e6a89af92dc7c0138d7ee207b6f25d2e7edb4bcf755f45dbd8ffcce1017c4139d3674e1ae8aab8d621e403ffdbcb9cd4bf4f79ceadaad16a784e7ba1197842895ea6f37a1d4b8c7f9359cbfc358b742f41553963dd9c5debea9a0c7a8642153f63c6f20fa9df4ef620c1f94470ad631dbbc1fbd413cd25b6273d01f030ebc730b9a9791ec34a0e556583e7040c5673600791271a15b9f9a67533253ab34aa694f837a75496185e3fa33f32710b2257898d67f4cdc953bf0b8c59854c35919106f579648dfbd5fb7394eef737d5e8656a239ad5c3b0eb1799bd483182a9bec99c2d204408db0e2e8b95f4635db926bab2446794ae43aab7b1ce5e16eba577d917b67c48c6785dff92e8e7f79ff9b73a975fabcec50bdcd7edfb2a5db2b760b52ef7a274dfaad6e581ef3ede0bdc3527eafb6b5df84fac7579b8971e1e84a6b52e6c904d6b5d32d737ae751124417a787cec26b52e74296e347ab75a975fa3d625ab4e6ed52e0ef13a8df328acaf5c49d99de4b51776792fae40a966dc7b49226fcc627319331ef578e3311fb1753b8a59f5beb9aa72f2cbaa5ee27766272fb6567ceb18784bf61d61c13b3b42979cf6d9a83ca9e0c61ebb8a56f13bb313177b65bb89296be6527f8a2b4ed2c8404544c1b1e5c82cb3080baa20c833528b70052c10c1d0bc8a2c114f2266ea63d69d6b8f73d50df118ae3397823377ac4e62e9e498d2d26c23650db33582c47084ee1a86e83efb5cca7a96784f1c96a5eb680adaf9aa79221188381a3222b23d99434b91f0bd63f6361eaef3cf4910c70b5987a246abf3c3c7fba11a70fe403e7f5f3cee8180b8ccbe5b4281dffa784f0d567b8212196891b336b1a5751e0906f243733312f5089cf8c00bf517d73690231abc17cef678ad4616adf8215526644ff3aba198eed9764c6974efd7b32292eb18328879688917905d539a3523b230354c7d96f3084b5836d83ae798f606e35cc513590b32bf2663eb9883b5b68771261a58d2ca53bb115c4f586669e35ae6ae20827af62d6debdac639f6c810f64c8703633f22d52dd20e8a8c3541c6fb8c64e9a716a9e8df02ebf80d7b037ffd9ae37535cf230baf8dd1aae2095a26e790eab9fee5da57788f72ca3e9a8d7ad444849c76d9f902f465d38c3cf5326954e39765bbfb48a4f9929c433f357ab39af98fbc7f156b097db73619ba784e7ef5ec7bc2f6539201b9fecbb3d9f17b1812b6183ca68f9c83940db59475b77e2e6669256751f66a94454ae5cf9792884cd17c5ccaa0c0075eaf33376d9d65b75780e8e1c9dcb58aae955f1c52ad130430f411e89544b6b2fb8320bdbe1ec7cb31a7ffaa4c643d2e53cd9aaecfbb98cb7e1c12f773101071f6eb17aceaf94c1dcb9ef98bea5886e23834ad242008ce91ad4b9e68a08f631acc67554a7db57a199916e8e6f46ca6d52f27189a1ca07e5a5ab15e121d2f98836b1409455cc60c9d062255dd3d39ba46e704d85fc3b2b30382b96a8c3ef9f673566c34459d900cc3f5bafcea2895727bb1bdee1a02ebb84dec7b2247178cd68b2a59f94591d5f44cb9a802aff16b121b235f0dfc36c64a23f0422d80eab13913a792fb4d3a4ec59c3ef5320884189dc0c6e8abcac909950d6408f9920c73119a23c33871706ce365241afb9188d798db8ea7dc61f4f475e7abfefdb0d00fac45677c16da2a3e230b7db9c608fa3823da5e862b745c15aaaa08195bade7b8746d0b981d4799b969138788b3df6d5938822cb2a9e17a5ea0a1d2358d595f92f36e92cd222fe4d0b5c87ac62cf325fa3f9f19cff824e93e677aef869c2a424e29e7c6083845438eade7500c17d764e69fa289722811f5025155a2a372289b58bf613d482b17d10edf13aa47c2d0e45bfa12d8fa19accd4dd69e66739fb5fbca905a70a021c732a4a16a765cd2e9a3b092b8f64c4bc6d59025759622cbaa5035f4eccea09018db724ecf95b11457f8553f19122d8b5a61ba5d74aae3781bc7d6b92667fa909c9ddad6b127f743c2c634db927778171b2f3d07fc1095ebc3f2b5175cfb12499ade6ba84a3cc436d72239f3f1dc15cc51bd9d4b98c92cbf14a99f43a4347dff444e2b1094453a98c5cffa8632eb1fffb46666ff7d88b6265590177258c69690ae49993d4f51705595769f8c3abf3c332bcecb3ca2b8443fd49c9739547a711ee03d8cca3944f595dd53764ebcc5e6297e0f2e9bc7c9a2c9489e26cdfd16aced20977bcfa1c1fc0cf20aff9bd977df17b230b6948da706c178c2581b0933ddea7b5ccdcf72dad8ef702c1f259fafb3a84d6c27eac81b1808f48b73ebc3c5f02a6f4e3f23b6e9cab5691eecfb4286f6e48521d51048d623f9eed35063d0f556bbe8029ef1bcf57cfa4513d458b35b24a8b14e576c851a93eec507f151bcff78d458e7fe3351638f8ff78f8d1992d9209ba2c632d7376ebe7a2f4a62b7f3903224d3a5b8a1c66ea8b19f0935d64c9ddc5063c0369640d50247d8f2de60bc734265e98ae6a1316aace2fa727e647336e18c9e63e9af3e8bb8e651638ad9d7fb93f8de4f2a4a7a79a6d86919f9aabe62cf2fe64e3639473016e9736e48b21b92ec8624bb21c97e7d241910c9fc321ddab0eed527fd6f995e653d7e135eb0858cc71c2387a5f550452c72c5014b0a484494710cadcbfa8305818fd798711733fdac16d76fd57193557b9df9f1fc80a83939cb3d2140403122ecadf9aab22de6a329eca5949cc579b41e8db0fea1629daf6cfe98ca818f6d0e5be686033f205ce7968186bd8044d9ca78ac491f663520914527349734736846f8191e3e6384eed6538fc857cd957692f7f83323542288ff5d140969511b5acf8b1d477bb12e2de6c60e801ad74085ca66d624a2d91449d2804ba30cad9722200c0443d2936a090778ddcdd350ed9e863dff1be56fef6e868abc712c0915ce65c3284b663e847125aaa12a9297449cadf14266f64fb6b7dfdcb5242cbbbbaa6c7c2bbe12d2478fee4323441b60ead17358874a29e62676ed289bf1cebc7f4976e4628fa6d161b4f3bf3925fc90056b426d96752dc7d1a57d5d87502ace0e4758be7cb5bb7769cf339a25497473fa0cca99a4234fac8aa0c7cf09bb276829dc77accbd71341af4733313d497ae303c13cd52089100cf5d373bc5e9f377e73e7889ac4b251f83c2475d8f59c4a3f60fdb19e466757355739ffaa1e11f4e16742edd87a5fe77f64efabc82f942f01dbdc841b08b9b6f102ece15ce3f43db4e50d20b699378722fe0c04ae75c4ff6e237bc4be1bd9648debf9c25a705ad34c91816d1fc55b6b7baf0ef95592cdf255f3ecf732bac5d64e78bc04812228eb067aa605528fd5ea6b1cb08c994b10024600ab90f489ac5df7beccfc3e976105213a6199716c8303167f88b36ed8c65fb5d39b4db26aef99876ace82729d917017c459138a00806b6a5768e238a33fa2bdb3f8fae208ca0ecb7a937da2f1a4670c1ec37ad4fbba9eadcd1d45867a3b7acef307a89a1cb026e4fbc4763a55f55a7d938cf39e7adc3bb1acbc59af4c650e0addd7a14afaa0e6ce52df96375050563fd3d9d28c93ae8ef3e1ead9d59c73786d96d528e47a399ccdcd6556f6323d5033766fe5d81b579f609d10c7ebfa00cb1fb197de22233301dde7b81fd3f78faefa95fe05f230ecc94b2f34694f3044ce9237ebcbe1c0d843613377d6abf87c8de730fb8c05b177090aa5fe39a96fe45a12a72fcbe5eb5207d465f193f9b5a4a5b78ed7ebf3c69fb3e77e267dd0cedfaedbb399dfe7fb2851e4492fc0cf0a606ff5c6f313ff05d9fb4e5c95208216c0d2892f092c4479e32fce92d88f541d0b6df0bfdbc85e23ce26f6d706654f7a17d2d8ae416da3b7c8de38eeb197b5eb4f1ef643556cc3e805fd92cbf74dc3b313aff1c9ff54db1c44de5ae786f80c52cdad3798c4bc5b7c00dae9cdcfb4934b625c8dd6ede902011411be28c2052c2dc1d43f67f4c7ff83c270fe87aa0770518e56cefff91360492b3c06ed74986bbcc6c350a276d7559cea90f541a28f967166077d9a1f3b20e8c500f47ea2b3a559550745eec431a5cacab066fd381a54e655f30d8fa6b2302e795ff25dc95a3779bfab752de4bf4ed171257613b6fb02a81e32f1b5e2b9ab7da716fe628bb32e746d0dfbbd8d6309cd755503546d153ab15e0721ac83a17044a5ba67fa753d53cd1d5089cfb619f6fca96f493baa67cad0956dfdba77551314fb2d378eb45f8a23cd7b797dbe6cbb7dd87868b7d93ebfd2ab9b20de9adf86a1de3ae2633bd4db23cf0922277c02579ac87d22eaed51141f9ba3ded8209ba2de32d73746bdf15cf751ec741e13d41b5d8a1beaed867afb99506fcd55ca0df9e6d8fe3941338431978538de3942f704a652be135e88f6bd75daed1a88dadeb7bfdee3f7f5c2593bae34d37f4a3a35adf2acec504567bfcfe654b1671ceb2aa7311e9db19ba0ade4031c9827c73adc0f5545f484e45a56cf5cccab5634ee03c18d2fa1482c9b4c7d2e456df8a1b271adb83b3fcbb8a8dd03b024d2fd7fcceb4b5735b7d9eee1e5114d392f6b1756d29535dbf3c933d21a0a0301ecd9a5aced0ce79ee9f4dfcf7aaed96ef4740cd7c80e6ccd632b92458b7328a9b4ee982286482d72bef37ffc5ce59ce11c8a3355d7de1bf1d26c6de7580786f6da0c5565077ab4abbd179a3172cbdc5d3c27e1eaf9abbbcd67784f5aa1a4e27d508b889ce2eb689d599078f3a7a46e26bba669473e455366fc24cfd78065e0ba5e92ad730e65e79d3af319ade33811afc85e91f925dd7da82c855ed8ddc6eb8b60681ca080767e2fe97a1ae1fb147873bc13f2913f18c7590ef38cffdb571f77c3be4e7521ad77e63d927d2375fc1a24c8391ec1be1e78c2ec2f5f73b2aef6784bd67030be6496aef08ce40bfddfc4fb21f396e8dcccbdea505a6b32bfc5a8ac665d646d12710a9c106d5cdb90acb0bbab441835451090f3c92032eb58c7a73774ee964d5effc61048ac03c74c9491c3c568b86cf7d1b43b1295532a73357c6ab3f9f41c9c339d95f25190fc18ce49d483bcdb78ee58f81c31773ead5f135d152dddaacc00dd4b74cdb2e8aa3c0f409ca5a9ac0bfde8ee4a9fc5c5f36b77e9528d9dc7477b5885eeba96dbfe13d25d7c46c7f272bddea43652e7bd81bc0158e7ad0d7cde89ae6dbc0cd5605f748ee6d7de0c5d3b40584743713827d50a020a5d6b1cd7e621c287e589e6d2c536c8e9823badaf4ca65319bf9be2ab7a859c7d9d0ffb6837547d0443627fb1b3a1ff84c673a22ba6294f96271a94d743409cdbfbbac03a7ab89037aeb56573819e558544bc2be586dadfc97c8d42b3836d5ba8ceb0cdba1d2d2abac3358c8abb5572d6f01ed806c2ef5795c5766d03c19acc44bb8c38aa8964b7ddcf79c4aa49ed990fcdd0b4403b44659c00b975a9e194cb8c3ff0d65a50d6b9a48e73add918e5bd2f48a80a9dd5f03e49c789265c5f0def99443a276b7307d463a57c7dbcac36397bde90c96aca85f679725ac3a95855ef5dfc7ed519a5acec2b272f54a492f516a1a8bde2e756f0224424935bcdfbda0a0d5da94bdfb8c699acd28cece50fd779d8e635374dd0798e65b0daf3002acd391ddf2283f9b5aed373ed329cae55995ddd2673d204d5ff113ab8416724a7c8c62fe1c200aa74263649a1be2f1b7f8bce492b8d87a1b129e1ca69b4679ae8ae26f2d280ebaf52ff54eb9deace49b422eb729eb8eb799a14c74aae9e592c07dba1ca235f55568e6d0459fe0b62ef26325ab47e19de924bfe8a41862b823c8b4be2a4f92c21edd2ebad019e83b93fd078361e9a8953d6e437e4f32887407108bf93cc01cbf85e5815dc1b2eaee29af16784375d452c563cb778ee0fc6ad012cc3ca642ec9773f32f377debd3e7f48eeafec4669f6afcbb7cafe75efbb9278dfed7c42f64ffc4cce0ba92b0a9da6d93f36c8a6d9bfccf5cdb37fe203ffc8497c26fb8797e296fdbb65ff7ef6ec5f9952b9e5ff1c3be2496e258ea7b0de1c24c6226aa831034659be903deb0ae522cbcf6bf3046697b93daf8809a3e4dad23ce0bd6f6ba820afc9ceee08863e0f55e584d798dcdbbacc1b7a37a68c1b53c68d29e3c694f13762ca28f6079bf1a62a8263a18d6369115411f76c467bac6f2a62490dab5c484e6b456556d9ccded0f36342cfb0f7e4032b73814c77bd351f48ce972991f72ca6a3ea9969ceb0c7f865cd1d3e87f17ea2e7d4f082079e9ef9955dce3fbae7489bb85d36f7f661f7fdc17d6e1ac6b7925853c538afabb18def339a4fa40c1531ab4b76bd5d9ab73b78ea1141ac535533e1f776d5eeb93a16289fb08df0ac9a4c36891e712d1039278a64762dd28fecec5bfacb5055ce97fd3fb0cd41aab4fa26e708d53d5cb09ec6762bb0b500f6e22a503cc6934cf39fa9fd402b95588eb3a7bd7e1f8c17d8fe731937b49ae4f8aae46641711fc97ced801d04a4927f2a2da1c0ed868b7a6ee19a9c495425670defb175a89df9cbc7e1fd906f5a75dbb25f58fd9ea6314054c8a674b91e1f943fa9e977d7708c6a5784a1797af77d12fe74b3ba7f41ab7b26f1cf9e6f492ba8569eef1f2ea38dce9cf61580d53cd53f444eabfb02d1aa95267dea5a54f33346315b3b39760933c3c0df7be116dbf5151816c4018baf5ebb1676459d0e7de31a63bb14c141932a4f65c562e88e759cb4914f3ad6763ab2cd9ad1fb832d6124f8597116d856529505b08e1f500dd94cf736e95d55e443945cbb826b8ac12af9be78fc2df8f0199ea2509e9af5996da0b33ea89740a5dea991ddea2a3f8a6dabe8efc3e6a9a9ef7be3bcfff938ef0ba2eddef3ebf65d39c0ab1bb0dc9ff0d811daf1dd3f48fcc303d7fdf8dc9fd0fdcccabf87c7cea3d498ef3e1e6463befbf4fac6b93feef1b1db91ba0f49ee8f2e05cbfd3dde527fb7d4df4f99fabbd225b7949f838f2bf50796fae1e7f5ab4afc746c0ed5a4f4c835d5257dd971dd4af96ea57cb752be5b29dfdfa3946f89bf7b873b1940f5b8f7392df042b30f053e702da949ea6e0185ee06584a19d97a00071730c682bf26a503cd5b71370ad52e33a9c0ada776775886df1fba4d20229af1fe340049474341fafe31616523f204650155730aacb8242b074da99a4b6d0f852372acb2d6c2e8301394dd4fb6c67b2ff40318a27b87b9c1ef0b55370efd360bad1a1c7ca78c34087b15eeebd26bd95e2d0c597269538b1521c0dec3b008b671792dea9785e4b2f25d168a736d3d70c2239a85e61a5812f2426ac39685e63c450f6071d38ded50ed9e80a060bb2288757c49c8cbe00adb47de427c6d437ce45cba18dff63a8d34bb117dfdbd88bebcc07d6f8cefea0e49534ba9d36913e4bbe7ee05e1fe51f884a696e26706f91eba9dfb7bae61902f1964c3205ff6fac6413e81e71ea4aec8a54d2dc952dc00feb728dfcf1ee5bbd226b7301fed949f86cc466159e82e4a11a5aa7f82a289ef578afe2fef6749bb6c33f4657cd46d5c5be7a6492890bc535da88fdc27a94428ec6999bf861c8d82be2766453f8334b468c59f631d2310af053363b0890657ca646a3ae7598c544f4d9c0a975c550eae99ae4f3d6a1b3f23b97e0ea8dc202f469526264a68ae868338ec38cdf4f6c8a2b1d512f358ed864355d92526552f17f6495838e210c8c9278c02fa1e0852f49c7d2e09413e26bd77487f986b3398207abd500a200bdf4d0f73c7925643950f9ea7f8de3414e55bd2c57328b2df3b75e64f56f704a6720443b0ffbe905ffc8171f0ce2ffb91e0477e4f7afd3e186379db3b42770b6d73e7da8644c2406bec3269bcaf764fdea9bb023640b0d73dbb96b7756c6de912c48acef9b68646827270a73cad5020e880eece3b495bd0d34fc0d6f7bead2d81dd2aec434db7fa102fa95c61bd05999bc7c69f5f531206a47deb56e69349cce0f8dda654060ad63b5ee75cd8f09cabd0a06b81e717a57d38c0090a5cbcbee60e0ce4bd6b495c1cfe5b421521b8be0eef7aa2b98016e268e85921c8545ad541d0f83b18763982421e9807c2c56f4d76841da6afe3bdb89908ca194cfff23527ebea9d78b286ed2a34d26ae3cbb5af42baa495522ddcc358b7bdc3b55cba2a5e1373d30a452f04f8cc429086a869b54e487a63251cdf135b3e788bf4fe343540aa71768e50d3974e55d68e85769e38d90cd5d90e9c3af3f1943b8cc819a66dc0f4dde85c76d6e94e554fa96b56a66f99dfcdbdd00c81ad21d2a3f1240743965222e1735a85edab4a04b3e1fb9a1e3caeaa70174c5e81379037ae857562925ec1f37af27be5f3d09c61a50ead5aa2b7e27e8f2e4b45a917fd1fabe782be7f7dff133667b43faa8dcffe55221330ecaec09447cf0379efe17366c1c7f3c227a9a2bf88b1ec6acf64ab0229731759c7ec3d33bcedecec9397b94ac78a3f682987514f46a3d0db0d556c27ceb69e88cebe6a6e2b99b9daa30359eaab019ab8447694d436ce542626ba642a9a0b606b3b601b889e23c919d7880d87eedda41f26dbeb580e7743c53c934a40f511bf17390b327d7bb3d7ce5d5539131d6b496b604d36f5cf8c75d5d3f0ac7f9b7d98ecfd5856bbafdb6c0560b23ef5a1c71a16bc1a16a76b5dfb9df6e3cdef95ccba0e8175dcb23390e8467c0ff5b87f9e1ee6602aad2be55ecd55ac6caf75c9bbcf9866faa264dc4c27e4f56bbc7653d2a3e204e24acaa96a6e607226c80529dfcc1f99270d25736599ab546fe47db8f732db79a1b90196726e55dda4b06a858ab3a51f20a872e9fda7b99e1df5670bb16f8bc62fed813adb023b384051239541ef9e83375429325432de8720344fc0920813a33395cf3103eae5799a7cce2a9c2bd36b6a10f8bd8caf17cee8d9aa220432558c342ef003ab04dbeb80b2f9f86cfb823df717b52f58656a033d499ff7ea5b1a1ad9bae489068215f6779bbd41af2d386bea18f9aee5649ad80899f849a23f2eaa13731099daf32d9983c4b7617b7ab4904d4f88ed72d5400446d293a3cbeb866a10785426774048f54dad3df1ad7f1a9f27fc87d96fcd58de6aab904679b9aabaee54b02eb5e76a4d5f2cde13d2caed274ba9e85557d0a3ced6d32e021ce959750216405e6892de5343b53f67b1c2c29e566a1cdfadf25f33b12b530d103ecb1cd13cfb6a779bb1ed032f9c655877cd55a6ef2c192395ab2eb6794f6e4def6aa09aa1639b1b3f0393fb89f536f36b88df12c7ba03d7223dedd8b9535fd5149f75749e9483a71ea58ab37c1bdf779bb0807ca05f94ad0a7f9b2f9dd876f9984aa2d393b94bce2c27173faf5a1f2cc7b1ae5fdc74795697b33924fe738d3ecf5e7ba5d3eb6d0d2a97379d7e754d93aa3d16472c87102571b912c84fe9f81bf8c5195fa3ecfbea4ac2ab33ab3d9b6651d575b19dd828f63728cb4bb5dcfb0dd8572bf7650d94aa423612dfffe3604515fdf6ebcecc81861c5b2fd177053e5e887ddcee2e7346e6af59a43a0aaacad94ffbd3123bdea53e7fc2f65d622b5dfbc534664f18936276e40d24ec203a4faa0c453df4ade32689a12cf07bc91b28aeb2bab68cf967e385660006ab39b083c8138de233b656aed271cddaf5c09c5efe2e33bfe7abfe9855718412fb2eb621c879949dbfc4eee81bcaac7ffcd39a99fdb78cbd52de532687a75b5fccbf275c8e524fbe152a97fb3583c9491dfea1552decbdd415c5eea3f0f1303949f8cc5a58e9be23084d6b61d9209bd6c266ae6f0a939384fb2e2f89a47e769a598a1b4cee0693fbd96172394d7283c825550ceb1f51051b3f6b5e5801cb2a8bca2071ecfb92cad7ccbd6f55afb7aad75bd5ebadeaf5e7af7a2d80a0c57a0c91ebd3f0e04026ee590a43a264d12024a1d5c00f9508aaca0212a2d4c7b96fe33d7f0dc972adce1c8ada8acac163ba863d2c9b0682a1b2cb37e34bcf121ac6974f500411a090cd1db0886b1d78eb551246f46d8d559f5d87eafb2002d671e59de417606b68a82a272c7fae6dbce0778296b2c3730b454d22449b6a97ce4da86c460bf94faa4b09ec36742d730306e33954cd10cb1c54959d7bbd3f44d73a6e28340044503d669a092a07a2db075a84f51bd5c70a0f07934c08de7f712919680c4bc06e34099904402030cf429dc852cd137e38672edea5db5c4b587c717e1485420a485473fa271326d867e62eb3be17d70fcc3385ceea4159b819bfb71fa2159876e653cbc9cf3f850b2684ad17ef37f705b481543f24d58e042aab548526e23db1b80a25613d4660ea8ee5135d43f7450cdfeeebd324ec75aaacfc2b4d6343515b3b96143d8779e87c4db8e6cf7c656e26ccaff2010cb15eec9e9ea7d975b8a8dc5cd4374d75a632072c2980eb49768e52798fed2040e1eafb3786acaaab34afc79eb16f0a652f09816542b54c5fcd1d41d9a53aa60c6a266b60216f8005b8a1aa6d1c4b7a65a140dfd64e809044a77b3913064bc6321cf811540f31b9ba4e88d54d35280b3716be332123267b58595372763acff1bb7c9b2d92d05c6593a9e254484d93a9fcbebafafe526ecb43c99df787908be0c4b15c17842b0f04d696a6fde2520a40a01c69c3e523a2f627d547d71071b4237b4665e964807c15ebe97e1151f89a903ac76152627388da96ed4dc702445739a286ca1a41f8829225e927f262840841d5380fd50079046a44ce33de57bbe4de8ea06ce060350721a2a1686a172f69430969f33c9511b6cfaec7a691f20887941010a2ea08aeb10f272d1934ae880cbda1ae2d38afae7438efa978ffa6f7cecc4d52e602d48bf5a2f3b06bcbecc164a5a17ef996eacc604fe73f43089f6df69bcade0e84dd138ced98623dd8a8ace0d25e6b436e5e762e5f9c5f15eb5962d365e712cb567a3e9326c614b21343a69366c514821c603b9ace8b1e40f52811c830b691f099121e03186e3eb799f0f5fa6a46a6fc22eb5f66ce387c4dc1bba763ab6e946b1e881ca7f78b9b8ae373f7ddf0d826ac06d7f09d02b8f8c5d9527b6e56c2dbab6462a0a3d88763250ebcb7d610b62b32f09ba2e7bf4f361aa458abcfb9f82c2b21417f5f93c7af57299566f677ee37ac510d2901a5671eb347f304a6853aa98678bae0d92c4616a7d1f46fe9333a7357ed127fc999e61b1fb07331db5cb176bf5a5a0c69c2fe8b826dd580e85e11ebe3140e95d86374dc59b84f81ed5ab2f79ac2bacaec939abd97da28a45c109f97336f4d9a2fa98e753cc77bc684e1760745bff8fc68a91313dfa312ca7fa51b49b3dfcc7b7e8bf5d60e9c0ef3093da311e81de6266d1884d76833549292c49a520f32ce3edee7f49e8d88d86b49faeb603ca334855df23c8eeed512ffb00914a78eb1884011fa012225d5784e15232a2bebb8de77c7c0138d21b09493af923598b97998e0c6c1fb7f40ee39f785d91c085d8e942bb372d1a95c0aef72a6f2dab501828bacce28d6bdcccef9bea00da3463679e6db7c5f3c278a71722ce91ceb2932ae8676da188fd91c68015ceb541f223afed417c6f33699fb2ada32bb36ab838683dcb34bcff4b8f916691c93d87c143ab98322892b7dee5cd53004317bb500e6933d2bae7db862992cbeae609d4a629a3752f15f9354dc7f7517eb77f6162eba47d256b8f3f0d8aeadb024dc8b1cff096d853b9dcf8453088f1db1795be178908ddb0aa7d737661dbae78487cebd20a56d85c952dce0143738c54f0ea728d227375005186801e1b7097f1cc5b8c19eb9aaa219c74602dad5770f4eaeaba41bbf1ae78d72fc06beb8812f6ee08b5f037c519798a0dd9b0a29659b75f54b025b158982167c36783eebeaa75b751b1cf632b2d7a0235d51f0ccc874bb4e1dfbebceadb4736acab7555f9bddbed35cd30e6fd4f94edfa561ad7b83ee750d3afbd5243ce22ed597c90e7caeb06ec8415c039a9c27f575928417839ee955dd916bf7df5be69b239dfdabbe770b9292ecaf61edf40e0a4615857cf37d51c7e752b20f86ab4bde281477e30311013625c0adabbdb1aee435a1cf8b3be60e69f29575ad5cd071e3f3666a752ef885ba23dfd290231a1b72ced82b9aa0cef1ee990d6447393379a375bb630ad661759571bd37b4949d63f98826e615fcb7c0e7b663e91ce125121409cba12328bc575187c9fef07c2549ab8bc42e505198e10fd90d95e32e9e27d9e4c7f7c3bef96d9c4d9a57d5b4d3dff59fd038b907e956fef432375731f7d0b443afeb6fada7a717da693a0ba21ac87b10f35c8c5870e9dd3aed833a7b37e9d8dd2011e75c80b72fbf279c2245f37ca394ffcbbb460ed31acbd66d577201d10f49525ef9a085c94a6007c49ef6b2dc152c31a0a28ac433036cf6639e9bd8fe2ee58d687a36d024ce5435036f6d2c80a570240e50c92151c067531cd42f4b8a88602aaf21b607accedca749bd4abe0cec93c005b611fc08dbddb9244305b861d8936350d404fbff81afceb6e41d2af9401aebb24d4932a8f29c2d49b4cdbc50d979024a6331596e095a53cc91045ccac9c1e4aa4e37e7134ebdd84f53bbbb6c9d2de154b2a43d5eaf2a3eb54f9ed3923d5d33874a024020fbc209677373a011fe622354369e309b437138372de915865db14666dab68c69b5574cfc9b69fa9e336cb3c7c9ee19adc7de307de25ad27ad493fb5ea8443034571f91a46f60df6ee97ebd4efed65c7f2dc32532f19727c7eb929b99f3e19670fcbb251c77f360bb09ddf57b938e85f7618947bedb95dab53b111f1f2449f8849ec6e2a7261eeff9eec363e37627f1201bb73b49af6f9c78e4254e12bafc7d9278a44b71eb697ccb3bfef479c7429572cb3d828116f896ffe20ff4ad63493fb0f78971726c73ed0e8c33b4945d550f1423ff8ef5b9c8cc7dab7ba2145fdbbbf546b9f546b9f546b9f546f93bf446c1df0b1101dabf251ed734df5859b4d386c7b1413ea50d2724a8e4ddfc50507a540638ae89b9133e335072df4ff6c7f1b944ee7b99532a7d6ef1fdb65999cefae84466937b17f9f89918fca58f3dc8f8b3e4595c62b7e4b9d648ce9ee066b0bde00f349ec537289f99b226bf219f47b9389863e94b60cb1cb02eda72333ba5375c5cd918f167d918b3777e995b3cf707f3ff81655819fe37f2dd0ff4c5ff8ddcf5fa19bdcb0f2fba470afee55bb51c951e25e9fe9ee71e3e01fccb7f66cbd147a1dbe93605ffb2413605ff66ae6fec838bddc77b4eec8819f02f7f6b397a73c27f7e27bc489fdc1c7040aaa62504d51f08fe65cfec57817fc1c6b1a41db08e350e77725d35f8f7729c37f0ef0dfc7b03ffdec0bf7f0ff0efc20bd10a94342c6ae444abc6de11b61f05fe8da0459c9e1f0d2ea3cf2d052c3404c716ae41f6fbe68d5b805a02447ad3bcc6d7b3fddae05abc16be6a6e9b5ddb1ec49c9767e5e4858a5403f869b496f48f4bc75af31ecd80b7f42f3e8bc2264d625a359f591b154d906e6bfd57acb537d0223f54383093904f80c89b3ab0f48703cab10ea80694a7f258751d96afaaef0bc6fad90d615650d05f815d0822be6a605030c7a57ab8ba18a561414bdcec0bd8c3f73557a90b3037bc47b3e6541f04f8650dd2ac02c6b6ca8031977bcfb73111319fecf08ec6381f7706c3d0e47ca17b72ebf462bb265b3c5c195195bdd4fe9ed8669690df3fa2da865d891e26ccbaeb923dc8e44580616d3116933b92100542b1dcc4636fdaecaa560f8da6f2c9b7a4be5bf1fe04546891429131b0ca019ea32919e767ebbc3cc0afd5be0890631d39f71d457a40ed2e5da1847db0c57de8fba02d010afef02668f4b99f5d04c2e6ea4d6b756bf275b166a4f9e5956f55cd18949c03572c40ae6a067060bc5cfde6cd4dc36ecd957e91e64a8bf97ab1c597bf2d2f78f173961214b88ec4b7ca0976eea5ee43e753fa2b499f89cb7d101e25ae694e900db2694e30737de3fe4aa2243d76c4c79410285e0b9614ec70b7a4e02d29f85326052f94c92d1fe85afe2e6179fd74102e5ac330cbe09a07de4ed37729c9fda5bf2f06d8e6efffc1a0da82a2faf4790c2c992f72cf8221bfbe4cf861941680e2ebb580343e56bbac59a80604262b19bbabaf4f0dfc7c0b90e2b1a1aa2ca008d068217b7021cb7021a36755d97aea1165e738db189a74cc5890fc8be05aa608ac09b6c94e607a01645403de59484b2870fbbc1c74aff782a06da030dc434b21f6e04830f68e38de3be2705f9653b6c5d45eb285f45d476b1440ebb048815fe5febe63cb5169a3eb823cdbc494b50c83359b47c67e9ad876784ebc78dd1913b04b9b5d27f9b332067e283873ca9c4fedc91c9875a0bf40d1dc005a50853fe30883bed0c5e3bfcf3e9702539362510ed8457e25edae034365c340b923a24b2673682912be770cb0e5e13aff9ca409fb42d6f1fea5ecf38ff74335e0fc817cfebe78c4ebce65f4dc120afcd6c73a6cb0da939cd9408b9cb589edd9f34830901f9a9b91a847e0c4075ea8bfb8b6811cd1e0bd70b6c76b35b2684e99e431899ee157433195cd766056aa4bea81ebe43ac670cd626b2c179d5b530a6e26b230354c7d96db3754060ad65b8bf3d71930f4609ccba993b520f34bba4010598ad96029994a869c266636dfb896b92b00ad9f7d4bdbbab691edf240f2f023923f95486361da2d841661831e25dd9808ca1658c76f8eada3bf7ecdf1ba9ae79185d7c6689553cf145f5eae7d25b140726e659e735db89deaa1992823e774c5f04f62f5a9eebec067a868e70d4c8e74c122be9b51d8090184dd132dfc3745382018881d3ecbf1be04e7e09c3dbf48b72b9be22bda7666c2f3cf72fc86252dbd75bc2f565bf45c98a32de8f465ca5ae93d68413b4fcf2eb41bf6cd9d236a52dc4587e177b08f5ac1d64ef41c82a17e7ab6656ed827f6cd09862687e7953576275d206851413129537d87a005967d43ed6e1d0b35ed12d4cbfe26c3944dee3554496787082ee4108ac3b9433a1a65ba7c90794384fca564ec2afe1d2950e9312298e3c66176588f153c244ceaf859546784dd139c7e7d4cf2252bb4fa73418b0ffec472281a0124c52f781d3bbb3f071a0202fb6fd6b9c83cfdb9c067b38fcff7c8217bfe6d1da81c41d9b896be6fda1d05db5d8ef09821cf195f7766cbcf6b0055b48427fe04ac23ed4242c1d791235c772dabb31d32635bba96511557bdde131ceacf321d30e8bf79ac2b0f509048478ab4c9399af8cbc91cdb695e78c4ebc862da2214b5d74a0280bebe87a483011e2bb6c9e6f399682ef0de18aa1a826a572cff7dc37ca66a449e403af2b5e97ed2776d3deea693d89367604f68e115216a20fb7a955cd767eb87af3378af57dfc1c409bb7ba89aa51ddea06df06dd6edc934cccc1ede3a7610419b7416899ec31925735295a52b107d73a61dbaba0221868be5bb1a5fd0993b6bc495eff716a40ef13ab7195f2a1bc918b559efc7c865bc270227ec0a60fabeee340d723164cf96e5a699cc957cbff50785c45edb240f579877a825884ae2e1d359f17b577442c991eb51322f563c59dc458b90bb8433d6f10adb796fd2db404567c7d23660963bbb655fd19027361d07d321a6c2ce714200651b5342221777b14b9e857585a59fb0be00599ba22c9f6f539ca3df9345dad952473eb51b08d145a53da06a7b281c9153903faccca915e8bc18f3f0339c592bc732b79579a582f78f7f937bffeb2e73dadeb7633fa41f630317c9f3aa72cd27df9208c10d896328c6374ac857324efa9b16394b3d02830a3c47894ebc3cabc1da24ddee52a23eb22674dff7982d4bbad9f59f387d6498dabf9f787966739a36ab38b3dae8f616b8c6523dd74c27d1bf0407c1ebc81f981558b58233f3e2b769d7cb246e92ec0bd7e20320cc12dd443b5692fd502537c9993354cd9d1fa21314a46ddc8d893cf363e4a759cebbc02724bffbf8715fac0df681d620f2c2ee0e62dfbf576f277d92cc7d0096b6094ec90880c597e87cee4a66df86bb303947687a86916b5be87672fdd60bcd4ddcf98ee47b5d4b47255d7c9be23ccafdd3923d5ae09faea0c007a48b7642e81a8f8ff9a4efb4d1483c5ed4dad9a76af7e467ec1c8ffe3bb173806d2cb3f338c2fa583469d7c46fc3b37e5ed5dbd575b8a8817c0216889e2bf6c035195dfc9b5eaeeb210221eac41d9c5680da2301b173e8385e818d7d779a8329ea689a99abc5f3542644b81e3e87aacfcc0fc209c6b18b92fd47d6a60427c8c6fec63dd9c1f66c61ccbe4cbeed80039614d74425fe263dabc9fcd37b821ea96b8a92dcc9827550373bfe400bcafcffcb385546d7af6837f9a403aae05a84ec9ac4dd1cdbd817132b36dceb21da546218af6d38d5b58ec8a3714952c395e9581d786b0dfb71783f85f1758c8c3bd36d5b433034901756932a5322146545e620adf30a5d8b3c8b103a67e39415f2da009bde8e109ec4a1b1add0800cbeb0f3e5da403922f8b4e68ad40f31a2c6a1daa76b34a572544b424d7387643e1ceb3007c2e3968c9dc4e1665b4f3424a8d29c032439489e129ed413e037c6a653b92927fa68b2df9ed2187b86f015445035cfcfd8ffb472248859d27042e6da649ee8bcd6d8366fa89ba0fb998f4979abbb1fd7ecb56fb9fb2cb06e3fee7d91e491c8fea2ba07ef2939f0449d76566fd23080be6740eafd48ee7726e83d1ec150df539da3ef21adf93b939c607c0e376a46d0227e961f7f57846115beb46e5fd1df67bbe9fb8244746572be375c73f2d702e79d1f478c4b68bc0e856b3ff0c22eefe51a1e90bae7b92f049123cce750f477c9776dc645d7be65038cfc5f1de94dc331e6624e0687fa99aeb76b3afe3663cacb5e93baa98279a1a4a72de7a3d86f55f284cb1731b5783d1be9aabc5cbea1762af96d239c74c15f75f389823f864b6d23932d1a885cacb9ad57d68f36592f13df2313a7f1e9bf99fd8275c939b5418ec531bfd2797fa32ea1ef5adf2ca5e0af208ed0cfe846733acbc4e207e6b9acfbeba7c9622fc17e7dc0d82e9b8ad07fffa5e3fb3beeb5378c69c47479496cb0e07aec5795c71cdf3d0ef9e0d8c6cb9bed0c450e7c759eb1dde9bf531b14dba9b386b2d6d2ae8edf1fd8dad6b5f5730eab59f7777dfe4e72f7c9604de0dadc025b8b9cd3c5b34e72e00de48d6b35688893eea1fd5bf4263bc709eec5f24b1aaae4e6a545cd2f2365cfd8d7f5efb565366afdd8b9b9a72a9c5b2ff3dbe140465ec8479ea81790c317ce67a3983bbdb6e97ee5529fb6f29d8bc9e7dfb32feb3aced3711012cbaaa623d7311b1adba0b83bab93f38be367d17cbb88ced847063d9970785cc62c2a6314e12c879dbac52c68cce2724e9be80a5f401cb6b332f1a4353cf11cb0f803c19f4ef9b33f20b19013b0e58d63e988e42906155887cb3dd3f01c2fc7f815fc5deb553dc1d667ec7f1a6bd3254f3410ccd686657d0201095575a699b56fa84bdfe0e7915cbfb669d01cb07cef5912c13f90784468448ea07031463160fc3d04d3d9cb902a87cded1790de7ff13c2538eac0b78ecd9a25be393ed1a4e15df99cd4f983f17cece1a2405e6a1bb325cf25d8eb38ff17c1851cc7cbf8a5af1ee68410d85276a0c99ea1f76b6d9fb4682e496b65d95a36392b1bdab9ad783a1abe6fdcc4852be49cca5f5754f779fdd7f81c4fd680c6d7cb1ad8607f75fd29b17c628f17c6f2e3b3ae92b43821420711a913889b24a6f53e9d7259ac2169a6f3d8c6b76e1adf79c3fea5f1020e9e486e28002ac9c9b21a8a263a9dda070310e17323cd21d59f07ed625ef2c1b7b48d6be92360d7713314fb0d99df67fd20de098fd8677805b16d95f1bd1936a1c93c5cce1d6b5027b856bf99dc5ceeb166bc1a8d6d65b2f6953a999b7b03730155b49c0a66255751635dd580ffa83ef7897640d4902716ef93829811bbbe052e21f94d8a4d28d16d75f8f486fc71efc30f5f630359bdc59af886b17deb85dd0d54497e81d6c855adbf627c1b0efc176075622cf23bb1c68d3827e2f77f5b73d1c8e3f8a082f7e84a1f4e6d5d67cd76816a72244e401b72444c27667da3ccbebde0f83402b7cce655e3775af0a47ec6b500d62f57f9f2b7e22fdd6c8d64a17c158c3b5f5799e6e40bde2bc6f1114c46fe77291eb30413f021581ec796a3567505a4f978b087aa71a6b559dd13b4d8589405144dd6e402ff96c82391f57ccd4c95cf2acffa55189a36fc867538a5329d96d4cca4be59825f4af24ff83d135eb83abfa2cdf9eb09e6d2b73544b048ed9ba03f014be7bd30c12e5d6199609ab3a0b521784d631d47788e55b322ee901f4f7decad31a68fe1c12ab996e8d8cc0914b506e760b5ddec08c7bd6f1993647f56e4878a70f1503457b34c63ed8c9d93d42e0d07e601eb33969365b5933146be92a7d43ba578e5d142d6e2b53c3871ce1ddb4b74ede23ace05cbd7838d6379efaeefa8e6072df0e9fbd213d50d936accb68a76232bad1320bf4b30e71571f1167bdfb5bfb6c6614fcdafe91af6d124b3d723b8e0d326e57de3fbec94c1002e649361001bd89ba4b63613232379282779ae32994e635e1e7b48de298e7b319f9fc62785eed653bbbb3a5f933e53439e7a24fce1ac1666b4ec5760965beaace6dc5ae51c910df7ec47634f3338e8acad39f7d6e60ed2d825ab67acdaab896c646521bbd6c33091f71d54bb4bc73a2cde5f17870eb350d995712bd36bae311533450b60e8a3cc7c9c1c4b5ac7beaa361b8cf3f3a27657295fde16bfcfbb750bb1abac23aa3adfae752eb12136c09ecc5db5bb01839ada1035bd3e59cf2aff4ec536cc47d683c476441deea0b08e87ca679aaf4e6c92249e90e2f27f38febef6ac6ee6b3ca7bd732ae6adeabf6f21387fa9393fc0285d837207d2108ce35ca9db302da40cae19ee423937c4b955fa62a07d74eced33fa733e31b3d4ffd8faa11a2bc097dd46f6d972ab9e671f3e96c42ebf4e91efed353cd1dfe6c22747790726ab06b374395e78b7a1f5cfe917c9540ea33c3611f9d3dd1441e32a74fd4f638037b52135369130f96110c494d5e2d56a0a01682e520b00e58b9964e9a28e2b97092dab0ae66f4497d3e479aff8969ef88fa9816895d1e3cf518115b4b08105c54d4f215c87ea3dc418c05f4387de35868fb86da9f308b051ff5ae628f41c2b75b2423b531752c434a04a7f15910d7a43d5be46c2471df640ca7cedc8ced5b3c96a40923e107303bd83f2ff76773fa8a6256b30d1dd5ee69d88f9e9eb80ea9c7840289ff6563d0b1bc55edd3fcfa34f1c528064f3ecfe27a820f581f5a7f11df97f95d64dfc5cfa0f2c66cbe82a69457f3c59a5d62fd86753820fa81c6e08e9143f857a8dd0745e305db958e6d72ae4afa492c99eec4f3416271022a8929e4d6a879dc544df4c809b6f76767589e4d531b67ecf1448e5d5b3ffb96791a61bf363c4ac37e303315f989355aad8ec112f9cee62a125e4bec6f61990236d69d88cbae536c1b71f044f89822b05e65f54dad8e9d22fdcfa7856c036b3837d5ee2bb03af33ffa916df62ae21eed752bd99b440fccdea85b94fc5c3bc231702d8ee66b08b788c2ecc7580f90dcdb6ed897f67e837c469ceba5fac51e27b2893f4f729caa193ab6b9f17b5f5f3451e79d8517517d427ab4ac7d4bc1b62b079ae08d122cbcb9736d85c7b601e15db2f8ad6f1b24d6fb91ba83e47b42c2e736f1423374ed797b9fd472d2b8ba856551c1764dbab6d83e4c6d9d037d4e80e5b3593d48eca3c45c533ba2afe8dc26714bd03b64c6328be5803f0fd52ed621c4fe70acce5c134cec676d2eb9920ac6197817face617b88e98a856cce56079a13b2c1deb5a8fc794280e839f338f7846de4617dba2ee7d5667fec59249692191be355a37d8cbeae47d30adfa6e51e6cda8381f5299acecaedb3d134b595aaeec5ce9509ddab55f7a398cb81ce64b3b2ded613751ed89ae985977cc9b9ebae744ed5bb16ec8fcfe6470f3cb55056b6d866b988e795d524ee8a7b8070496ca2e4d99117fbdd25dfbffa9686a06a168e6d34a5bed2dbf8c2d37864531e890bdec16c5d218b1d677139d93c4ee1f86bf526e57ec27b4a6af88e5360f911bedff3b4518e85c5f1099f46f67925be6996676149b9e848cdd31e86a4f69dd6a0bf2f2f591b1f78636ee294991b863748c7538d95e0a17a24fc83941753ce71f3501e81f7d6fe26cf99786197e65039033996b1712da9aaffc875bdf6c0c467df21b9cf495e014b5941ecef4daffad55df5a973a6f22ac95157ce4b623b90d8bb43b91ab3cfa2fe117e1f358e1b56c8477ccf0fe1d5afd13b07df3a6eb05ea33977bd9fbcf3dbf2c0674f786c860d50f4a7a716f9cf19afff39b2b10e24b5e81f93fb679813ae8c4fb0ecdd33bf9b666bea296663a892cf93581c7ef766398c8f59f33aec48f5995015e7e3aa3919af7b2ce4380baf7a26307ea1c3d5efb25c5457ef50c3f954707d613f8d6dcc29717d7da65efffa37093ee5ba37448a69b8fe2e9bbfbf1e6fba0fae9bcda7fafa7a7ef17e6bd86782f66e706c83bfda0f057980043f86e2dfc471d544d6e3339d72cee2f9c07ed8455ca02e2747fa672a4f944b8b36926f6a8338b611cc626e4dc6598ded44807504e5bb65f8f984ab8b62d89528cedd94e76d321c03392e53b5bb73845aceb246f1debadab5f6356a3ac2efe5f72ef0f4c9992fadf0dc54e2649bd51634cc3f65b8ca5b8f33fedd255e32eeed95b1658ad7b612a777311fbd6658c9869c32294fbad9a0774e91dd7afdfb4cdef9825b36db3bb7aa7f4ef2bcab79db0d1533c10b101c96a5d3f8fec5fcbaaa721eaafa0bc9059258c36c07aae380c7f172cce99fcfa54830b955dfd1fed8659c892947b6f98e1e44c39e1c3a16daf8b6869eb0fc0a657d648b6a8d94080ecc1398e177d5091757ccf7bd8182b406f6700ed93da7694d447e7f2be7527ebb449f11bd47de13aff91f789d55c40d55230225f1c5da355241e05a47de0bcd69fc0e0db1a157bf4b38ce5d8a454ab8ced31c4ea2b7b15c049e407b0324632bc3aae0f955cdd5b017446021477e4f5eb9d6247a230f339eeb5553fee959680660b0cac6e1489e28c17712ddad211062ff585ac6b66d7cae317c63595d5f354e92d6935df00dc53e2b9ebf783e096ebc0427c874fd020add0db0946b1919003cf761bc3e8d3991f05e23784c41c9f59dc07ac6cd706a958d8de82b4b3ae3fd563e370a47e53b083c3c4ec22d6f22b89097aeaaec00c5bc9075806a37a0dc250ab325b65034583d6e2606a9eda16860d90cca6a92b318f3a1a2a37c6f0a7def85e6de3bd1de14996bf7d84ef54e5dd68b7e7f8d93e685317a3c8dc2808357bdc9be36c7755ac73514b5c857838ab87fc19a91f12b1b20744fae6dbcc0bc4cbd38b6fe12e3d174dfd639ea13eb2fced3ec385ed4f32842f103b023587e5a71a3c579f3b83627734686d8372eb70503126f263564d5753af4fea2866d830314b02e93d6f979fcf4333280aabff7f0bbab8571df2d1d4f518cb5a616b7c21f1d4d490f87c44e7f2aa87b184d0bcecd8a6b66b1debff2cb061a722ce3d2dfdd5ee9a78b772cf5858bc7b5cd7253a5cfe268ee3b91c9a2394bfbb37c5fc8c2d852369e1a04633cd6b47760bc67b9a4af51be7f1ff1e108fe047c7ba1b501f15cd11e79c4e6883f8fcebeaa707eec773996be04b6cc018bfa59573d8d7ac3b8674da64f51fc19d1432a62bd9de6168f65483efb6af7042cc3caf41424dffdc89e7cebf9ebf366432f7d6b63be827bb0ee7c222f755b35e7bb7fe03b0f8f7cf7e39bf3751e3eb339dffd43a779733e36c8a6cdf932d7376dced7b997eea5c77b4e4c9af3d1a560bdf91e6fadf96eadf97eced67c05eae4d69f2fa98713182e73bc2bebadd65ba73dd4639eb37bfcaec53dfd5e9258133ba7dda40f5ffc4c2e7e667c3e933a967ed2cb2f8ee7eaacdf4f59cf3e761dcb53c43e997cc663f3ad63e02d0bc6899f39d0975024f6c0f7341e4173f57ea86c5cc21591f19dd4ee0158923ceb236bcc53ac9293f137cb731b725eaeeafa45f57cf20c76fd553fa8d42e21fcd08e102068257c999197cf9995e4c928ce10a6b650aeb758be960f7f467a252ca180fda228f35c822762315de6235dd7e4d13e57a40e22c6ad6c86d8d7ebc95bc726bdaae27e67e6eee23914e7618f77c33e8f658de2c7cf2f73776070de607c3f3a75d7ae3dd9b9e7e04cf6055e638b271c25cfd36e5ce78916be6decbdf5780f545300d661ef09683db29493230491af9a4b7f609e00e943b8da92b86548b0767bb81eefa03559a6713db3556fb158ee6b62fb5fd7a44f65ef2aff19e35caef3a04416144d99f1937ccc11cbc0757c84ad73ae379d77eacc59dec83bd1b5c0f31b63baf0bb845ed8ddc6eb8b7dae0314d08ef17d301ccc75fc41e79d908ffcc138f683cc33fe6f5f7ddc919e3d21c12bd1f807c93750fc1e243d9c7804fb7ae009b3bf7ccdc9badae32d59c3c1f8c2cfab8ab9cb17babec0672ece05253a76d8387e20afc9fc267d5f8afb5934c337a00a5cf7c7e6181ac6ee939aadf7bd5713ee725488d36a16af4ef2c8ed7d75121fe97ed4fa65cfcda4bebd62eedad441d0b393e303af0e13dc0a6bdc4c5e5adf375d933a0ce727e003698cf0c952caebe7583c21ce9f555d97e02a3ebd7f46b1fcbc1dc366ec1da1bb2175d183e2fa4fd736102cef49d4503ee508863ee1b6aeafc14ee62a826b03812a5e4af5b8f8d0fb65e6a49affa6613fb77a79ccae69550df636196b49fc3cc64370109fb525d734c17cd671032639d395c6c3d0d894e4eb1ac9855fd6c7b9e07dde19cb4de2881f8ded0122e9c7fb8d616faeb12fc1bef2fbeb7d78f58cab399fdce2b17fa378ec6a1f7a68b7d93ebfbe2b245b721b1695edf0dc43aba8ec83f8207102f7f0f1515951fac4a8ecc3c303f720348dcab241368dca66ae6f1c95e5efc5c7fbc77b2e89cad2a5605159fefe1696bd85657fcab06c894ab945665d116c932edce10f8ccef2409f24ddbfab22b45beb6996749aad89d26e0598b0c768d591daa271dfa2b5b768ed2d5a7b8bd6fe9da2b5851185a60c8004a5193821dab8b62159617757c9aed5b48ba56aec3c3edac3b01debe613d25dacdf62c4191d5f866189b216e9bc3790377177baa4da997aaf955d2c930a692cdf59460bd71ae719a04473e9d20e68b9ae973143177e37c557f55575177ab41baa3e822139bbd8beea3fa1f19cccf334ada2f44423c0ba96323f7c5d60f91e2ee48d6b6dd95ca06755d97a6a71d7f8e48fda2e29235568761cc2903fc3e7fd76b4a8e872d314815715b16c780f7c7ee0f7abea60501dcdab3b7b8be44d3ff83382ce6cc074df221247af6fd485a92513f31658fcde5ba3277c261a5c5d77f1f69d0c922886a947cfa1399834e892d58acdb2397b7a5459b9f2c16ce875d5390d334ab483e03b238214717e448e9da95078ff3d93e8d7646dee807aacdc1f1fbfd71a76436829af4da2b09f2ca7a5d528996b2a23b897eff711ccdec39e4c3ad4e3e75665363ebc6b8c28f313ec4736e95ad7d4764864a82a839cbc6fcbceb3d8d631374dba623996b1a2c87d29804afb0e7dad3b4db6e9dc44bbd06ca1a8493301dd8399dffbf0b91ae81c14b50008e6e79c3f2d18f56b3ade6d9375adae0cfcb833a45165be7426765ee1195436a6faeceb2dab7531cf24ab755de57dcb44fdad3351eb17fff95d39a8ab1bb0ec132f495c9becd33dd779e83c709f501220f29f59122088dc7db761f2898d916b987cca5edf3cf924700fa2d4494b02e84adc4a026eb9a79f3bf774a54a6e5927d293c9fa71d9a627fcbc59559689707bd76497c8359559a5dcb86ed9a45b36e9964dba65937e8d6c52856729e73c8626bf29f6f88afb3f131e2bd54cf92b8bde7d903b738e8e753cb8f80c5c64bcd4b87f258bc25d795349cf3873f53de66b673a1c7b2c8ee5a3e4f375962b0beb6c1d790303817ef1f9325cc4d1aa81bcf16d2d80c967845b80458acedf1732b4896747a2270828190f8f7ef75f3fd04bda6c5f5eddf9fb1ca5a27b24bed2a328b643ea49d2e3fdc3a7d44f8b9fe92c495cb7b1b3940cb231522fbdbeb1b3243ddcdfdf8b9c943a4b64296eced2cd59fab99da5227572f3979228de0ff49966ec99557e93926401aa7da7345b50e93f5d8df3e643dd7ca89b0f75f3a17e0d1faa0e9197fa1985dc834db2c89453ab228b1f00d5a0e758a8106eef66a88ce6d9df0feab77091296b7affea6c5f727edcb279bf6c36eff9e88611bab40bc3e7d073bde0d96feeacb6b951e2b176b9961e6be7be2b3c7e46764ff8d4d2325eec347758e9189b66f7b2d7b7c8ee3df0e223d7491d56b2123787f5e6b0fe440e6b1b9572f35aa1656e1d41c11ed88a3155782729c1aa8f423f72b0752bfa8117723bd77afc839cb034ea4abb507d7b99033b08a02d6f0abd5df6bcc462925f5d4b5a7d5fc83ab0f8a563e92fc03262ef34b66ad463e489c6a8fcbab20c208fa0a507d8a3024987d9313bb12318fa3c5495d3f705c166b37b2ed367636fac4b2c91a70c2307a011ee00aa6815775c6463c1d6db6e62ca9ab9d49f620f32b5a82a2c46c796a352bc708157439ec1ae5fc8ab8b2e4f89554319aaf1b8f880b1e5ba948d3ef156e2315c5990d8f375ac4e62858d16f213ed66ae9d8703fd058ae606d08839fe8c23acae42770d43749f7dae77229d8b68670055e1805d6085521ce9095bc1ac0b26e9b0194ee6d052247c6f9776c2e5e13aff1ceaf99ae7d142d6697727b403e1e3fd500d387f209fbf2f1ef740405c66bf2ea1c06f7dbc17072bc2dc8cad68676d7250d4ce23c1407e686e46a21e81131f78a1fee2da06724483f7c2d91eafd5c8a21e3cf11a892ee0574331ddebdec92bf64e8ab094b1b57761395f313a6b1cb92e615e678cebb1e79f5bd30cdbfcd430f55996393f968182f5d6e26881863c72bdb9f307e35c0483ac05995fda2d10bf0b586b7b388d3b5859d2ca53bb115cb3cedd7197e482ee43bea56d5ddb38c7563df2487753633f22deaa143380cfe6be4dbc0f047a9df9d4eacc2782b205d6f19b63938efd7ff19ae37535cf230baf8dd12a8291c9aeb5caee79aa79d569bb0ecfcff0c50d3bb6a051e8ed86dfc6f3a7f87794f13dd8fb2779eb5bfacb50d1e427da918cf78419ed5ead220e5819afae8c299b76a398ebfd4246ae5acf16cb3924dd6e8bbdee6bd6700d79ea317204e59ce994bff32d7e41ba3508cedcb524ec99ed1cc13c133dd94fcf8ecace0365f8f76aa6edb816e892e586cb8ead6174a3d8c326cf60f6c524e329d348c81f559e7606477ce1e9a6e74a2c635b561b7299e5650c6dc09adc0f07c6c9b766ecdc8d23cbb3e4734f34027f104760329d7b9f0aed84af8b613c9f9e7ae4bd50d9249f91333e8ea6acc7f74365ebe3df527934576626f34cbe9bffd7a7656f17eb7fbfba9bedebcedbeeae9226ee6113b31b34f18bdbdd8a79c68f1da105ebcac33f858e20080f8f5ce71372b99fcaba2289e2c343b56bfcc0ae4f0659ed1a175edf9c0b9b7fe4efbb0f29f0952e05738d85cecd37bef9c67fbd6fdc4eadbcd33b9e44cccbfbe6db3a07053eed9d35a379b8b8afca1f975611b504e37cdb3a390d96591ec291e523b89048df5d676d46105b340bfaec5c7cb7d7398d9624eecb7aeaec2132226899f8f4df62ef15aecd0de1b163279baa889e90b0949c47d87a5f6b01b6e87c4be77c5b6bec19bb96147aa1822d1b3eb62c5be57827a6ff94b0b0cc8b70b18a3de392772df18af3e329caeb3ab67f76b2cfa9cce936c073b1133bf608538ba8c6632eec45951de330d363ef7a5db2fd922ffb36b956077b16782d9073d95fbbafcbb3fe6a9eccf542fe365be77b97565adcaa7270ab7acafd451efd8fce4f13fecdb5417b83b39cf3f410f7bae28367d20b8de64f7d4b3a014bdf03418a9e4373c5a200dea9337fb248ffe2088660ff7d91edcfe4477e4f7afd3e18e33d87bdba2db44dac4b2492bb5c63af4be37db57bf24edd15b00182bdeed9b5bcad636b4b97782cf11e1694833be569348378d0dd9d7792b6a0a7a77d02edcb5c657d9564619eba189f40225c497fccd86364f390f3ca33bdd5662bf3c9ccf632249e382aec41f6633dfcff2df9ea7a1928f7f4eb2b59d373a4467ef2baffc953cd65c6db255183e14026cc24c45ba79fcb26af271ca1d928d1b5d7dba00a55ade6aa2e8a6a65746cbebf74f24ed863d5231062af98f693032a9e4fb429ee83d734375fa0872b79ae0b7aeb67c7b2601813f34c22f56b2dc27b050e56976b85f74de0a77df76baadccd8ea71e0337e93f28f3de5ade7b42a69f6c3aefa4d79e3b30b78e2555f4766f53dd2daf52bbabf8afa0b7fdf759da8398b0e45cf7c7c3b26004ae75ac79cf36d5faf20a0a3c9eabbfacbabdaa873bfb6bcc16a17623a0b69dfbae66f4c77357ed6ec0a070de095bd2932823b842fd615fdfc3502267f01ff4b751cd1c07be6dbcd03332eed356d18bb7350b8580659d6fc2ea73ad4bb2f631227a23d16d4f1cea4f387de35868eb9d32f6151d732d8304f139542582253decdf2eb3f13a12eca7dc60dc79196acc48817f63ebd4166bc2e642c7dc8e65a28d6c27738a105c1b9af1f18c4b9127ea3cb03573b63a7cb03e68c63ed18c873d7fae545cb72b63c46884f11a687b3f44ab3667f32cfd4da24f32f7d96619d7dea2df9bb21039a286804a6cb2002a71eff46aeefd6bdd50748f389be25a204a70c0ea719ff6b9bdeac15dc3b2c2fccdd43e9f98da779a5150ecd949d626336e8e6d1cb836227fb022e735de97c3811ff9ea9ce14353d6b78f3b1b77a53dfb6be68e44e22ffbbb4f337d7f3372925babd42f29cea2bc47d7b4e90fd2a277bd2b9a0b606b3b60133b34dbe385d96dd4aea961b78af504969dd4aea5bd9c57f4ec54361f3b27b57d3c32ba849c010dae89e7a7ba676e53269ead53e91b94ad131fc4fe01b327d97d68fd36ed071cba96cf7b21dbb706f2f1593da83eabdbb1a02902f6399cff9fbd37ed511cd9d685ffca165f6f9d6edb405652d2fba14c620345ba1a93783a3ada72d86c6c0803b79839eafffe2a5678040f6192acee7d77a9853a0b3cc4b8628dcfa30f3748c6dc4cab40c48cefbbb11b441738ce25dfd64f1bb78f4394ccd8561335fef506cd73d087f7b1e8291c3a8b4744d735ddaf214223ad892776748b4187a987e6968aa04e61cdde21672657cf48d97ed889e5a9fb36e8692faf80e6a870a6de867e92eb9974a048de5224cebcf179ecd8d4b01d72115ccbf61e204f65c7ec312875436c5522f3e5f2e7af627ef8d45a76a2ef237eed0c02ac7aa0dce3431e056d06b98ff78fb06bd97433e56c8567b5a99fdeca75002e5e4785cf8bc6b508c1ab923ba9742ded527e809b368ed2e7d0ad6fa782373c5d5f9d7d6e951f2acc774ff4c730da4f7d8c9d33d223992df9a8a971d76b6494eb57140f4e5fdbd2ac20f180c2aca69bb525e37d3a03722077ced1bf2d7d7cbbcf19f4a9382e52b4376ee57dcabf16c7232ea9b9cae8d1c9f8c467d896f483bc17f4ca623f4da6763dac034b3236deed2bcb6657d4f449ec2d8ab47cb10c0b3b81b4bd7a5ea45b794e309d9b4dedec800ff6d41ec8d231ccdef1915c71fe25310936fd19fcffd5be86dbfe809ff98096d7eb1cf8d1c23968cd2dc33b82cf6015d9160aefac8618ad2aec886eb6bee35bff7593b245d8fa5657bfb97a27931f226fada7fa1fd9e9a3ae8847beb81af95f7d6287811f3770fc5137fe37b6ba832d9b4fe2abaf19e2ca09a4a5a58ffd0f41ef944f44e79c3a81b477049c644f33d81979e722dc3b896afb92311ec89d45b8d6cbd1c7e376590727e03df7653db76489b3263c675720d8de3706ccb644c26b18f6a9a22dbbc2b12dd573eaf995aab8e4a24f29fa79eebec7a1ed666da2ccc12bff3b93dfb7720e6e6acf98f7df24429f4e3fe3e66cec6b171a477e9e5b81f4b36564aa063bd4018cd7b92b781b539843eec148077fb1e7ca9d0aa4f6f458b5e6ae205d46c069281ed04ad998c129a5e7e30beb3cd5f5590fbae296d8a45a7fe891f72679256c7ed6db8c55b8f726b6631acac5d579a2f3d058ac80054b6f253918a57ef8b8ad016a0e77a6317e1a40cc75ba7319f61f1deb7a3661a6bef2bef3640a32f36a4da4e71cf8dbe50e9125443f0833913d0f05ea96d52f3e48eaaec35824d338d6446066b50341572f5a4f95b2385e0b15ef78b83c65e85f1933c0cff06127f717fbb173f4ef0259c1cc41bbb70c1510dd6bcaf2efd17d59bba18dddbe7b70822db3fffd713e306563f51990c36ffb329cf64d6e204b4b8bac93e6ebdc0c4e0753d8822fc6ea8afe2cd48f5c59db9b7a9b4bc93d26bdd0d65bf331877b535f4cf20519f6714dbd487064852956752bd3ad31695f58d1e7d97a7c2e0fd56ee24bbfb7ffd6a4bd1af9a47dafbbd7b7c14579990aca65de7e9525df14546c2dbefe757e2d012f6f7d0e39ef7d483c2dde1f0572aaea5da5d537457af14d6545e173fe83b1022a738ed7abdd8f35de607b357b4869c4edf3a2fa08817b6ed7ab8f68f39d26fffc11acb44f1f8975c7f3ede727e6fa88b093ccf511c9f5ecd0019f9f9aade79610d747d0a9f8051df0ab3ce2dfa93ce256b4fcc7d74844480547244b7bcb78ddb3d53b6c928a56d93da3a67604a6b6c03a131bc85945f9b9b5d004685e6bd8ffa97cf2e2d869164d20e73aadac6ee2ba8f7968029edb54e2b177e27797a20930600d4598b5b718790872f9a4f144332fd39b1a8bfc1874cef8bca796e2ba7e221aa7318cd3e457fdc4affa895ff513bfea27fe3ef513d57e0fd1cbcbd329f49154fac919fd850c0c81acb93695be8dca7c82bc9c272d676f30e4a154ce530a05203b6eb7f1b45ea7f7768bc559ed8f2bc963605987bf7c037f9d6f20b01dcf5fcddcd906afcfc16cb57b8483a0e8a19197a0f5f4541345a1c5b75b9f9f3ec04bd0fe4844fccfadcf3c2016b07909c24e327b0992eb59bd046da1d36c09cfcda7d84b40a722f212f04fbfdc04bfdc047f7f37419180f94ff715f01ed11d51a02d2d43dca226de51dcec369bdd9f8b99cf86cb10d541dc9c9190b718b7ab976e5738465bdb50b8490a8be14d97880db42763eec8a7c38ce8dc2bb5c47f50d0ef63848f80f75653db9ac6a0f47a4035129403e82ae93a067dcc8ad2748e701f6e30172af0f88beaeef2c7627caf4fe1ca1f80f783be7624f75abab48bf0198ade39e687d99aa3d21cc7721e817c243e693c49fc13c4160d6cbd1de7a8c73178b0c3c3318ceb65f0256b8b4a8579533f1581f13f804fa0d206cb4562fc2b7805601ffa21e265fa5997cc1aa03e2022337192e3649d91c0857b4edb5b7df140e635ce01837acb5c5fd37f042263f51a48b0e4736441559e7c0ecf005b8e35d43269e2010945b5aaccf926d7f2ea213c022892b5a539b0f5f2e62cb9b3b005edac059dadabf3f80ef67bf08f5a4261cd45743de83248d6b88f7e17438e027c4613718904e587650c75249c78a4c7ccfc15757980febcb50cb5c67dd54cf471fb05c543649ecbf9276acd33d2a5d607cce9ae16ce43115267f699356a28796f5658ebf835ac077a040e044b9bb86b7f78598d12ddc705f99ea309d109a592dc4996b594aa352a923fcc7527f93ec8f25c3ab69ce53ab95fec39e5b11fb447ec8050a7c98f63a5f75dad3cbcce5e9501e365390ea48b35553ca2ffdb869a8ff09b9d9ba5a55b9eab9fb8effed763752e1fbf4101deb93af73478f9ca9c4f07baa4eee6d49a653f4868f7888e8a02756c11fb556f73a6eee2b13e3cb881d6253ac558908ea6ae103d8129f7d00a241ef5c74f8397def1b5748f7e0deb92bd0d32b4dd77ffebe995a18f645fdb44777d5bcf199eff51e7c7012d558c74696ff5869e23682fa6217aa680b95945cd68cd317fc8b9e20a9d3339eb4bd7673d3c83a4fe57a332fed135cd2e1907fdb4b1056d987d17534d406a9f8981a99f2ed539f6f178fa48e86c2d5d2aaf5f675f2bd763557eb6f5b58b352567c00e5fd76497e21e3c348f9335f614b5d93d38c1ae50debcbfb616f8e4c7645ef2e25fa97cf29bb1ade0c82ae06b66db0f0c39f1ac7603e49a57e133d43ba7f0de69aa1e0a14acd1183083fc663bbbefd9cfa9fde539aba1572e2721767c707b491f586a286b9d7f3572a8afe3abe5f823dc6ddb7fd6befde87d98f219d68a31173ef79a27aef839ffc97ce4a5918ef9f36373b7f39f1747653b1da15654b6f9dc797afe08d6b756e72353b75bede633c71a940dfb58c1fa967b3d7350967f6e37b9cfdc7312948599f81594fd1594fdb709cae68b96ffe478acd3fa9be56ef7bff79972b773ae2bcaddceed635eeef6ea7bff6f9fbb9d373e3731c8318da71c50578c72b0bf2341c5cef9eb7a92c5b853cc3ccca01ed83b976f346ee90d7a34963e90e81c0e2415a340dabbdd04dfe657ccf557ccf557ccf557ccf5df25e67a7bc669134b3799b10526f9f7470c8d49dc86ac27ddc24ea0ede9fa7b2ec21f28f42fdcbeab08a790d9df532183cbf6a208f93709ee480a0b36d002cb008cabc760e1c8d6c6d24fcb2991d935317f871c0ea2bca250561099ec0dfae2c6d2150cf53fb2b44fed7bf0935abab424bf55f89f3de48bb00f88ec8dcf8b6e74dec4f229c2f9875c6bc09420e769c8203be86ddedeb8d641159e2b7c69741c4286bc8b73a67e438be63c6da15604f0735e211608eb4e023f041e05bc87021c90336814c4f803e42c45af98abc2c29151739062f53dce6d3dc23d4ac9cbd4faa6395fcf640fc01963ea780fdc0402266353f53e323f07ab7b8cb0909be199cb99fa8ebc733f907b31eb2992f10fb28e063427701f8f3199f3e60e72fdfe35298da9cf075daf69cbe48cfbea536ce341b48ed3755af0ac0c0e5bba6f14bf8eccf9ca12b4f34d0edbf5873e03c359da5dcec918937145c1f33cdd87504f87314de484b61c7487a07be7cc671526da3af3fc10779ae8d496319f03ae6aac33917958ee07525823d7c4e4be16adb122ba9082ab706690d0dece2853e8da342c3ce8131d643a77056d8bba7c54a7b71cf45d72ae1239925a4bb07fbc88b704096615466f6a2fb7689dc8651dad23221f3696d082b1444187237b0a1887a9be159de5e13ecbaf01bb3abb43dd4c3d90f130f5f60aeaec425968ad349a87ea97e23633e7e014d5c295cb40ca1a1c6395257996dcdf5f6fc8ec1756be926a9cf31cddf2ed1ad33c758e95e8d760933b411bbba41fa063ab07b3f90a63044ca6fdd7030276766b6319ce81c641c9bae69bb6a1ae477ab85ec975d41e3e0c04ea277ee4788418e6f5f0eebaeef734fe79dd3594c5528775b4448272013b24009ff86524800f43b075ad396a42ec80ec811d9c155d3ed4f9c875a93c67e3f5f0a0b149ea3ecbea8dcbc7e82de21030cfb9cfa398d321be5d288bd2e765550c0d6c0e4b267621067d6536f9cb6b7ac9770bd71842bef68c5e03fe88914e6429fcfb621b449722bf3f46feb93a2e8f93e5ec6b6d8a7ba9333b1e77723e148f21e4d89d51a071d417f67cb0e4cec20139d8865a3be7dc3910fdd70d3076cf1d889d02d6a901e7e92ed2079d7387eebff3f382b4ff8619fe9eb16089d7f513d6eba231abcb949d62a74e615fc6f8fc7b24a8853c0fd571d1f23cb7d124c7afa80db1951b234cfaf19175a8eac5bbc47e3649dc9a7a1b4f53f87116913d71fd43c78fe287611d2ad5257b4ecbe1aef1126ef3f718ea95cfc46e9969f7ccbb7a7065a207b57944ce336acf05ae7e22badbd9d5db7ba8a5a77a127dcf24f1510ffab4efc5365c5cc752c805136181d33ca9f1e5f5ee7574efdacf1d833d125a3b57d6ce48c7fb106f7c67eaca3af23d9ac67065d1ef430cbb12bd518ee6f9380f7dcbf36f648fe9f83c904f9e19685bca6fa12eec1093d211b42d9123a839d87cfcd8fdaa6ffea8f8f9e6c7fae0bbb31fb95042fff2e72c3173c667c418674f9f5bcfec81f2a7dfdaed56f3f353b3f9f401e5cbdc4746ca9f9b1dfeb93c529e44b1a34e9647ca73af672f5fe65b9dcfed369f809cd1b98842e5ed5fa1f25fa1f2bf41a89c51a2bc333cae0fb12bf74edd202ab5557822f29196d0cdaa349c47a18ee79b9d65a89e254b1c0d958a14ea260cdb25e23f569bb640b92a68fb5100aabbefea786bc9da194cf26662da0dfae671b418ec15088127d42000416f289ca9f3c7ef3e51794fdb3844fd1651a253885de7dc4e517a319627a7d2d6ea97251373d9da44666c0ee53bfd9d3b6d6218a9542a59a6ed85a5c6a97794d2bd4b5b5b0fd315a2d28e8a92e162d5b53c0491636ac33b12f8f82b153b09c5a7a0b67a91a942cdee24ac47fb70ab02fd5488afffd7c3bf65619e5c77e64f0ffbc6f39c818073ceadf9949a6b67aa922f617c43573f694be0049d5de4c647817a4402debb0994fc26810e489b26ff09905e656e0cf14ab6339ae6b961deaa50a7e8b9cde2b4f9ca3476593ada25e5ae05d457548ef2405d276a3c852ab064585b8bd084bcd894b68eb46f0761ea402226dedc5df4aaca83e2bd564cdb51a33c53d6b666698970297c6460ebd4fd09d4cb9a3854a7a72e5c0f693140b305670dd97ff5a93dccd3ab2fa6e1031f4ddbb1b1e41386b35feff0aea4603827fb6c94cd754bdd58cb7568b9095e22599bda64cf37356e2a68900a5e453b5a87d6c1963b17225f8066b0badc8ad94dcbd64f6e6ee9a792502577ddbe62b7305b196d3d38bf5cfd63984bdde99c53d4b82b6d6742d836a6fcbd7a6f6939dd53f83cde11b425d51f142237bc88f225871e604543e450ba4361048cd7b9a92b67d454caa9f525756d19433c90a533d1516c9ddfc43af6593c20ffa6edf35900546e17cb5039729e3b6771e9ea34a5c50cf0de3486b99085d167a291f521ed2d613a779ae2d60e9f13ea3c69aadc4b26aca2bb104a31a12c919684913d5ede3f776de9ad901226298581d0b5d0b9c07b5f8aa856b5cba89ba2eca2d41ab888be043e3d3c1ef4871e0a5ca07346f21152b7683fc72027d0f92b175d43f41914000c280fe31dd0101bb9d615f01675c53d2a29a91c503dc1039aa3984653e3c85ccd02d01bde5c5d590fe4d306e93884b56d5f06b2e7b9413467b47f8e80975655fffae178cadac5d65dea120e43040955897a70e4ce16096e3b9cd3143d2f4dc1b1f4b68756e3846ea76c0e7b9e38e85b1b73924f9b4bf434436ecd35d0ff158c88ee42e94fe8d81a8a67a54397b244741b0f95f5f3baf47012efcb00ce680adb1ad148e6ed499aae41d6b9dcd9517dbd8c8a04f4bb05a5ed4aefc9af5c495be2bd4274e328e520a45389f64bd93ba3b587a1dcd318c4ae66e7fcf55cfcde63761ce5533ba213bbde4765726046653ad0b624a1d1db71a4e1f2d3c1d4299494d3d7380ae5f01ced11b29e405696bdcf8414691c44616bd27e27e85c9cbcf5e8a7d2e757af71fa0b40f9ca20ff36a5692f72e74c21ad88fc8eecfee91cd170e3603c1197ae016728b5c385132e1aef810c63ca3b25a19350f6ec0732d806737392919d45323c20ef23f3495361a4682cb363b12a3e77075db169eba72dc81d592263bb20e7f54056895d16a73f47e7a849435fe93d4ad6f0c23294cbc82f4ed162d5b34c635d0223716357fa901e04670b7fa0f290acebacee3ad6d6732bc018c9e3b90530d2ea61d0cb2f4d2e3f8b4efb70ccb2a17ad9e34dbfbd400277c8965774b27e25015f9ca6869df333a7bc7d6d0ede0b339c4f6d5c3c7e354af3439f5955fa1b7be96e1daaff5aa91fd5502fa330edaf4c4f45a99290e2f1632bb1b50c7551d61e469b53726565f9083b8cd8a3104e0dfdb48534c2b54ac3458ce42a1ab17c98c171a88b4d9b223639d2778d3305557aeb0d586decea12ee1a7daebb37e87a2eb0ed18cacbef8049aa45e56aebead6d2a064ece01a2a910b0714a855a990cc302044fea1a6c259ba5a697f7dd07e266bafecf76cfb8adfc7d667d93b9073d492aa608b6ed7fb6099bd175272a84d19b6711ceb5161ea20d5a7e01c23f796ce438a2a5d5a984287a7a98e40978a4d6237801d44cf4587fc9fea5bc4e670064be555d394a9aa0dff3599527fa3d12d85d6fa3e85b3563938c1786ec6b4cf89ee0af67e51bb88ad1adb729a07a9eed1334a6db2f65b58a275a636b44674b094ded28bf4a150e723fa0bde8776cd0afcb3b484ffe0d27447d15a55d82c7d756d1a90eebf7388be08a540209b37568017717bfaaf7317d2aec1a63810dd2d9ccfa78174e24613d173e4e57ecc9db429af4a53dc19aa616adfac59406f473f7b908fe7b6a8f1affb49d68fb21f6be270b4a469e5ff32b8b9d11fef063291a3e3a277cd4798a6d713193cba5a97a325bd175268cb2035fa7c27ecd70605ee19f4be9c75345aed3e0fba6df02b8e9664bdb707993d796e0f93fba11f65ebaef3af89e8b85d6efecd6fbfbc49da9bd6d32606877b618cf2f3ec5c3e5e13bdbd029ad973fb7bb92ef0958c67b14fabc639611ae2a6ca7f5997de9d492fcbcab68fa0b6add0a76ac8567a2d26baceafb1621aab78dffd1a2f06284c463f36d9aba57e6ea2d3179f513b489d07daf277fbb819e69755af8edbf400bd5a145edf067febd8552ce339ed750cd4c9a0ab507d002002140c7912671ef68569a887aa784fbd7edfb7ef8af4f55af0594cd0a8b5f762516c8d4ddfafb093e9dcb2ead6d93d545972cad6cf1dacbfd2dfb3ed7baf6f00e912e8c565ebc236548c2a748b7a106eeac11476d8c1d601f5b59da5299b59a0f5c755fbee8ef8a8adf39e25684cf4da3569bb3f162ab2068c5b11e475257ca32eadac29ee3d0ee6b106742723fdbf2594c38db3cd1950983fc40f09b4e355ebb4d63c8bd83286c34a3f4abd679e6dc322e7cc9bab43a9dc8badabe530a935d7bfd3d77c24e3c5b4a9f928d0b8f1c3c76548ce1eacc9928f642d9ba25ff4618679acab2f56d3e70dd8f7ec6e202b1bab5fea2f3a5aba769e94947b936b9c000b447fcacc41d97bfb226f06a78dc92bbc19b4b1dbab6cc7193535ced25488075398a277eb93615ec1b04c9fdcb8b2b6abf0f7fe5d690162b9faf075780d7dca601bd5dad31f4e338077a6eee2c9b414c66077d3cf52ff0fab6ec700d35ab97f8bedb2d1a420172857c691e7e4ceddae208656702df8c80a7eabd613d33eb382df7714c66b58f47b594ec06ed0b78e6641ff23e8eedcf1a99cd3c49f9b4fc9c9729e8b0b533f6d4ce1f9e7eb056cb4113bb75fa553d684810fcf899f6fd3549e33a4af65bf5fa81e53ad4f569c3d8b104ab19842a25ecc71f338bd8d39d6b429f6fbb0c68f42fbeb3163b034756d57057170471eed824567ad37c661df6ae5cc96afddccfbabcf20d6398ec6f4bdebbdc28f5dc72f266ddd2ba8e9aab6b1e81c96dcd9993a2e870aababc7c89db3cbba2fd964f1d109b4c036e63f3d9fd9d44f5c95de4df531deb3f5e2f542ec05d41c96e46e03dd00b602dc7aaf4fc92eeb13e35ecdc0bc94c89f1a72ca73e42aaa97fa322ad243269a3801a8a68f8857d4d82775c638d59e8ba52bbc136863b246fe067ededb71ada05560d903f13a17b4856b0cf194c8890aaa9d3ab50fa6703ab8ba3aaea4a9ba679e64755f9dd7523b67e8c834d739798e63bd0579f7212c25e4bd23790adf99babaa4b1ed23fc8664bc0861b0fc19c03655cd51f8e9593c0a94a876200d21e799c20e72b023188781ac6d20a7c4ffca8df461db95a7f36f3d3c7617e392385a660f1c1cffeb49f17968e3a0eb0da77d53f816b59ff4137261da47d718ef21f7b2d73eb8503f01307d71fb18df476c68623bc7d0c1a308f270350c6b0e9f0136383ba6a20739febe48dac70d646969f5cbe37cd9b9ec9c01d20ec6c64c3f37aa8504fa2757c68bd47a6aa7e08e3c4b56699e44254d15fdd05ce00def34c3dc70f98451e07276378146335798b3a2b17e5bcfcd496a2efacad62ecb83cc8eeb828c99d354e35a093a86a2a074536d2fc90d4e3d2b40cde1ce34c64f0319d6d45f1d8bde380f94571fa17bd971cc335347ffe87337f43f553d977eeac63fe93ea1be2a26f978cfbcd37b6ae451c227f6a1d5a92564590bb4cfea01e9d2a69cdef5fefeda7afbe3f50c4aa9939cef4ce35ad7c70b754b1b24ab0bd3182ed50fd4cdead9aaa15d5f2d479875a5eb39ab6c435fc166533b5b9a787072e1c9b3cf7705bcb564c57302b5c7d4a65ab1fc88d6b66aec6acb1f0ff555b698d49d7be583f5fdada90f31aa5993cc1617073d94ccfddfa0de39f159b0ec1d907dd57b271abb6a3be3c1f6050a340efce6bc82ddbe56a9bbd73df7a21819db9aab696bd0754763634c36f29d6bafde1a89e694b6ab924ab3a6fca17d0638df697f7898b150cde6d6e344b58bc3511a1af8ed6a3d00058b46e6c56bc7361bb9be521e84630d58311ad8574e136a3ee37a3bf0c74c7822275b59f8464ca1d36feb2c2b7015ee5ba3f09195030ada9c13480b9be3bd99246267a91c9c802107277ec64d0e9f1251f65ec1357e1f6b14661f05618de18a42d1bbfda1670aa539f3d76be1681983f9981735d2072798cebfbd7c85672159f3927a415a5b3d90a5cb48c797b0e67963096d724f9df72d90d0de87eddc211defbf4d5af3a92c5d622c003823a73b87ae4fb07147147a37759fd41a1922767c7e819ac34238d69cf7d7d7abeedbbfa9f6eec83c8e2d63f842dafa783db95eed532453abcf1fd055c6b0bf2ae4509df63a4d65fde873c23514ec2c01178c697e58f207d37ba49e2e16df570dd17efda9ad37256d74f5e1d6d6959165b0c9f4ebb9ab739edd61272635a42c675a181f48f589ed1db5cfc21ab954b5fbcda5d7e5cf8ed7798e5c3c66209fe40e6f492534b3a97e5872bb445fe562dba014e726df0f53d646d05390ac95c688ae75d0d278525359ff7be6275740c2d3b551c3a6635ec780d1545a3bcd2afb99f699783105694bd6ca6362c4bc37abdaa7b97ad73c4dbdb72bd0c36ef088aca6968b7f78fd496170808f1bc9a7831beb3f805b538501564b8f410c76fbad8ecf6f902f46d4359781cc6f508077aece65f19f222aec101a9fe24f866babda1621fabc6f41ee28c524a4fabbcb5b86524377af311ecc3942bc372bad67e24b6c73c6bc973e031dc7edfa4c6183e2cba0a74a5369288d3969aa4ec773137062620ac7ffebc2380ef14056897d7cb4f412ca3246fd23ce95fb2503e9783c500656d91ae4ec0ef3048bf23529eeb09ebf07925cd9dcb3b72287337f1ca2b33af203dc99bb19cbfe82df631ae082dfe33ceebcdfab29f9635cddaeabb797a8a07e8669cdb2ec6b96bdc690ff1bd313e6e69d56d08014afb51dd4015eb5299d077173fdedf87d636e0ba50ae16fc6b3caa747da984f13c2a4239886c6215e81fd8402b7ef041dde29910535727b986cbfc7e7b596e3047c1486e4e3653da5ed7e68fd5a8d7ce3bb6cfeb8c689d5e777b75f813d0ff5ce718ac7aba6df8b393ff5ba5db5ecf5b06688d5377b575c007cbaa41f7f5b5f8a595e5b95db2ee6b87b8d1c90b08e2b5afb95ed4ffc3ad5f941b5fc8aecb54295f8092cf9fd8fad2dad5c03e43ce65db9f316e9482ae55c28ba3617bbef2ebd28b1c1de81310ef5fa9b305651c7d67941427b69c798aef832907b941b82e66a45144a14231e72a3544a9d6f78605302f664398d22d0dc86347f5ca6ad81b4cdd098c9bdc8c64fd9f080cbba89f0f39d400b00fbb1146316de19b73dc16dbdb17be766a0d1dc3b4a8d0e7fa366fa7b88d794d74318c594758cb58d37781a1105dc381a87656adc7c11cffa80697e49a8e1326b605e9d57e1ae6dc0f5cd1bf390aba0022bbd9ece71f29ca63a750269ef0838e14b61880ddffa4e0a9e35496168cbd2057814741ea7a896c3b5ce928f2a72e9e75bfa786ead860734a118cb11c51ff529497bd454d74c3150d93a3801efb92febb9254b9c35e1a18d8fd7c58a2808d9d71ef86826e03f9a3a2b0d8fbaa26ceaa78b35110f8e2f6a28d8ed51d3dd57c707efabbf66c85fbb966753f29e54bb5f420cdebd753ecec7315edc713e15140f85dfd3bfb525537e6b4f3d9b3a8658f8a82bf69c0028b097a3aea851ae0dfa4c8dca1378972a6b5b8bca96eda0a782cfbdd44f74cf9cd7c08f80bd21917eb42fa1ec9f56adc151224fcb7d39fd9f8c1921b7b10b3ed26d9d73ef8df6457989eced38b7e29c275be377cc1d415b410e77c5f9631a146bdad44f5b2484184032e0227ab5fcaf7f195605732c0ceca577c77da88fbfce1c7e0ffde1348f5d8638209cf539e719f8ce29bd34a5b904ff2ed43f9db0d954ab7c993467bda99d29ed2fdd0b69aaefa27796d53eb0d8f5b714a3a12f878b7384bed3be790724ab979b3eca928f9a1a973ae72bcee944378239c9a1914d8d4b2d1b1bc9926fe927a67c4b4b4e74c469ed9ca17bf22f6f758c904a15f88e88cc77d2b9513125799c1f18e28a2a076735c44e53047d8c312fbc94f638a75f0c387dbf74ae641c7e8ecec58a5f783bb6144795d83696313c93f144509ba3621448fb2c9e6dfb003c00e45da57b937e6a625c09453c7a39d7dee88d5ae42bf7e3baa6347f5dfcec98eb61b58cce57d22796f5e1811da8b743dd2aa24b9e822de206187070537882ff6e3a168befa4344e733def0fca1b48f367d539a327a9fba2dac1ad0dba0fb1f7a5b31960b2e7cfb38cac685fe8ef09bebc2de02aff54ccd167ebfc11c9daced2db315fcdc3edf3f4fb8c57d85faeae702ef0aec0590cfe03d318fab6a19e4d63d8beb2d12b64f76dffd378f20319ef1cf984d3f584ceb9359f00fe1dde5b13ca3fc98a33991eb3b0de30c1819ba4e67f12fb6352df517f41b4efca6ad7e99a53c83e8a306fb6c4567389be2c877c9771bfa77333904056006fd3445c105d839cc583bed2267a160aed92aabc37db18cf912eed4dddc59497f1997224d11cd2cbb5cfc8043c740d5ba0b753ec72a7296253c041a56f15fa80c9381e5ca195b31e5b348f40e631910f342723c5f7225b3c92ad0d226bb3ff0a75fa48c79747ea625794e6d5b55c35723a1974d6442e4ccbfd5aac35a0577ecc7de2df92f6e5fb087c051bb61ae5fb624a4567418d98d48dfc792b7826f87063be58851b9039d0a735c6f2767d0cfa99f7907397f296521ea378cfd0fae5f681d66533d67c93f512da2bdffdd0976a409b3fb46664d08ddbfd9e1a82b7d8c7ac4b6dc80392c83930dd0e7a9687fa647d75ce0349dbdb429bc802a61a895086dc1553741971e28af72abc37e98f2ced6786ba8ef8f5caf6529df5459f1f722f33e8b1ef99eb3bea0b60ef68fda187560a954d98794deee27c0ba639e3689f3ea616a91a032f3d278cf6cb07610c6664f87bf5e4bf206fb63a8683a35c1827153fd32e3731b268fd9cc583559a7f4be4118c6d55cee806f9310f496c4b3e063f3d6a83fa621aa2670a989bb1f26b31d47833f3c0cada057c953dc573646951ca1dc8b88fe2dcaf7a31d5387ff4da3719e286786653bd90ef6ccab3b726f6106a0e37648dd1b356f951b1a716a8395cd2b98ef3c22e05b1bc265d53eada093abc25ccf7835e2fe99b2fe6f099a7fbd7d9a3fe127043284fe5735cb306ef21b68fd001aeccc80f94d3868b0bb82dcac55a695b54ce5fbbb375f71cdaf7713d62aabd9e25c36fc071f9e171571ce71ae6ed59213dd7c8179bb68c1776855c3627b77b71d077bd88cb15cec6bec245fc42a57ec15af93754bfbac7b733c0ea1f6aef39f49fc1bacef21b247c8daff79f9de214f07e6485d89f3ed89dc0ab489e4f39aae278cc392ba342fee1e8bb6dd55947c78efaa16cbd05719a3c7f5bc40d4bf782c7b97df1f2dd7f3e5802e6ecbee68f02e570cbb3e86e4c6247375dcf09b8836d281732dfa3cb6bfbfbcbbc84af3ada733fc95f79b75df2187b24e30f61c33df8103be45efba3a66ff562e9bcc0846193636784f7525f93d0d9017f76f85d221b8f736bd25e8dfcafa7d1e2ebfeb5942fb87e1feae0459371acb8e61e1d1bf04690615571a7fd5c8ce8b42fa500ff38aea32bfc1de29ff9f966691ec982fb9d289fa1087f39d165f2f2e3cae34a256330a21c3edf6ec7249f97bb502fcf7fc76e20f3d89525b29ebc643d71d41717f735affda958862f0aafbab47564cf7b25739cd299e8bbb8c8f699bb0bc9437d716dbef5689ffa0a765616b65ed673b73fe4233bcd69aa0727006c8bf0fb4dc69f10e1d459fa156e8cbcdba060fc34e80ec273403ca2be7636f563fcdd956f6eaef3dc37eaafe8103d3bd12fc3df1a9f1a1bfbc76cb56b7cf9dfc61fcb79e34ba3f1a9a1d8c18cfcf5e79f9f1a737fe7edd16fce3af87deedbabddf668ff087eb737feecb49badb6fe7ab5fdf2bbb35efdcb9fffeefc707f47f676b6fd7df3637df0ddd98fdf927b7ef3d7ffb42ffb1f337af1f6b7b31d60f25a7ff5af35f9bf3bdbd93ede923f57b401cc4ff9d4d8fa9759e38bd07c16844f8d60edce1a5f5a02077ffe73e7c3d3044ee0fe8b6bfd17fff4c6735ff8e697d6d36feda7a6d0e2f9e6d3ffe1842f1cd7f8d4f0b7ff74fd1f8d2fffb2f176f6a9b13d43835e6687c617fee9f3e7cf82c07f6abcc20b9a4dfef9f95343c1fe6ad9f8c27f6a0c56ebc697e7cf02c73df1ed96f0a931f5ddc69736c77f6ac8e42fd220d5258fe23e35feb0dd7f3af3f53fb9c697ffe63ec17ffff3a9f1953476bb9939e4ad13f23fbefdfc99135acfade6a786b225df74dafc33d7eeb4da7f7e6abc165e2f3c45d7c79dfcf353a35bf37ad1ffb1f318ee69b59e5a6daef959f8f35363929e0b11af9de5b6f1a5f54cfe5ed2796a719da74f0d09dbf32d8c853c5bc1ff475bb21ae1cf71f827199bfff993ac446ff603a682cc4ee3f7e976f663fbfbc96ba2d6d6fd7dbefe7dfbc3f99d61b1deacd5c6a7c620d8ac7fecfeb0775e66fd473fbfac1dfafd9bfd633edbd1bfd5f53afcebd5de395ee3cb6a8ff1a7c66467e359bc7ae05feaccdeae57f45a792df978b68daea62f8efff932dbc47fbfcdb6bbababc9575777bcaedd3d79dfff36c2d6338c0034d95f35beec7eec679fde3b9ed0a9d7b5fbae3999af7f0bd62e3c4a9bfd20df35be34f8dff81688a00d742d924f6c6d0aa7f01d92e9cf4f0dd7ded98d2f8daecfed46e38de7c8584f1d0ce4df784614fff04008093d37e8dc115ef52176e5dea91b8442bb1716ff69c981acd242e65089ddec2c43f588d26e8213841874441195b281163953a4bfb3046d3f0a0010c47775bcb564ed3c0af061d44c0add067df3385a0cf60a51668034424a92300c853375fef8dd17f7ae7eda9243243ad04c63c383c38092d55d46ab04946014640c95bdad3f7f838315da29aec282ad74707d9f25986f6f103984e52c50b82de03d3930c7f4dd21515e9808038e037564ebede5775f14672bed4c8340d6c6e252600e7d71eb1a430fbddcf6213c380184d6d54f9eb3b8bec6f9469d761d5036de52e4ea5034ddb788b2b40c8371a1320bc15220b6d516ca9b297818e9bd44d12d31b44d43dcc4c90fd70978b760ba2b7847e2d0488ac0af9c0a94705d595b3aef4580ac6000045a5cd06d1624d720c10420d448d11a1123c218c2b35305cc64bcc8775c4828bc42017e4abf374c4689127c38b2d66e8b18c09177a609fd9687fa902c9c72660c3128e25d9147abec7b2210aa912f2aa8390c93f49e9fae8dedd4be5c2081dfb964cff59707a22cb9fde1c65c691c6a0e2f2341c56ea06d474d65639d79cf0994b56da8d86caabc134c0f64ae463ad97f1604a0e99ee79783669aacddc92faecc33ac43852e3b26b706f29083eb6200e530312decff3433a7106ca16b61a26aca3413b0a46b2067bee93cc3b570bdb677fbaffb81441558671505a9c8f842a019d6529860451d777a7be9c89d0d5a45c0bdcad6ce4d7685029e9d6da8975071c74e5385e0fdc8175f4cbdbd47cd3180f1ba7122746b3ed15bf3b120ed2cfdf4621a0afeebe79cccab7619e9646ed4cbf0986face419c748d73853573d57ee5dcf7d8931255e1c595b5c1b5155851454b6bda360baa060e99d845c35402198822c0b62fcd1f52f6da78246fe5d524c5a2748c152f05a0bdc0002504e53f44ce171cf650d7654003deda2f3d891a545f175cce4317b87af5c2fb784c099b33f24c9a5dff5deb01292b0df26d7aabdf6dba08aec343cdf2219f5d0247a06d2f4db044e693c4925c2267d98d2a4602acb33608ef49eaa22adba00ff8c85dd2549a876e264877fc7e3dc87fe302530d407904de9d3b4f0f2ce44a39be724fdc924fdb867d4d48e31c83d2368da2ce830262bfcd504e559a76149316baa0d75809601c4a432d8742d1354435d58ddca7d02244635c089ea8239b30307e6149d98d9a0c69efe3b264b7822728d0930b33e8873927039a5ebf7ce3e4cae9f93ea4f3aa993da7f0969032320c047c9897ae0802c6088a3c9ed98329ee50c05182c44faf4732b8b13e2fc587ef5d4efd3b308e7665848067b28269dcf24e41e99403d2d20bc18cccda67671e5ce0e8249fda16705d6c6ac4a88fc7536d5ebc3afb329fa7ce0d9f430004f3883ca74f01870b3b8809251bfe63d089495261931105dd74c042920f4bd2738dd2b78566a7d2b9b5940f7ab3911057add748ef40e0fb6231b90ec61d0ed08a631382019fb232124bf6008f0d7251d80023ffd845dc93aa0beb6b334d27ead3f66204ab9955d112985fa93c72726c3602f82622677b37640a87d4fb19b6429706fba7030047d25cf8dc6e29b3cdd5be7162464a140f59c40fdd7f8ad574deef541055d4584e215490e31c86ecdfb04046bee2716d2f7ad8db35279533f7db70c15c0fe1ee37b81c484054a48e887aa54491075eb4f80045ce51093df73b837f5933514fe1bf499d02f40df7b8ec186aaf7410f7303d98b7cde3e1451f59503101e84a09c837ed88feed735f5674ce748c63bdb00f08703f297ac60aa2c7e262630b21c020932c629dd91fe3b6563e9b631e45c5dda0e7a31b8c123db1d8151bed1b1575f26537552bb1fdde1f48d53fff8ee478980d3f95b282b465dd1880082a198aa7733df0c40c178e9f8a267ad2049d58358d4844f8ae67c5178f5c36447721ec8da720400c6b77dab3e37631b0bae4febf089fc8bd6d623930ec717e5ad2ae9b0d6dc4640a0ef9b5b294c52c719b950b6666340e80868b0cacefe0062f33c59763f3806b153c3b9cfc8b5b236f473c7edbda09431b8eb3b6302b57c314567ea3d09a86ac1b352fbee42f4ae0868cc0daf1bc8fcc105bdb05a5e5040edaf073790ce23e1b431fd4e04f6fb781d4b2ed41befd1d147457ac8078f4facffd400b760248f8975a47bc6437fa3f7a67c0aa11de68b028ac6a2ebe151e0eca180154007864b83eb9dbe55dae41f05941dda3cf8ca2ea9d05d0bed998afbdc808735f7b30aad18c0b9f3c1730b925ecde6105bb2b67765ec2149c1e4dff9be034ac2a10750645000fa18dbe90549bab7fa73411fde07a4fd18c0487a8e3d86689d4947ad6583cb3ce73eb0882ccc57d83310433e9ed0bf1c4876077d2d8be5463a6175127b859f2901ae7f8c5d574d18f078fdab842880d147584d7a58abf8d123764925816e6d5f393b38f247c650584090d9e53feb1c8763fa5ef28faa18659d9c00fdc4d11cc24abf6a9d733f22e57de4338f2c44cbb564711fc09c3695443f8f07164c48778b7d782c44aebb90a0b6ec5d4727d002db98bfd78eda94f5896daf66c93e1e23a7a4a35d799ed696511198cb702a0d3d143092a7d78f7b33ee933a639c6e4f86c0fa6f40627c3baed5f7309319d720f7ae15ebbe21bc7b986e006776bbd2975097d4d2be378edb1d8ac81787d36e58dcdf57362870b7d604bef32c598598ffa80bbf6d6d5d096dea619bec6756325575a5ed01983406340a73bf6569610bd2ca9a889e2928d8e98fe7968e395bd6ce8397f1ce5c61ce9a7c5d4f345150ba8cc48e72e73c78e909239db4713affd6c36377616ea2f6937e4281fb4ae423dfe45bd0e12cc81b96b854fb18dfa71ecc6606106b4bc158b533c8841000311ce7784c07b204e4b80368df184009ca63b0d90fe43ae8ad398c8d9f7e2e05be77046d6742fee96bb29efacb54aea1b4b4fa9097b1650419823c687ba551604cc8a1d7f656535da77286fc99a1e268acbffba2979e0b47386d4c8131f78616ce5f5c196f51378c5f9031ec9b5caaedfb0153de5052840e6baa0e400d2b48792db9881f999bf311ba579cef33a6f9e907249f70352073dd7337f40131c4a2ef052cb30144b006b9f63d6055f54850c29c0b68579d1c1736a05c6a1702c9ea07e9301bb4fa783d83820c24e77badbeb0faa581a0106f2d59f19c40ed7d9c6ef651c4dbccbad2f59c55b6c111b4856b0cf154ee9cabc0b94613b169eba7a5294867abc7d6a63a843db1cfb7d26eab2b7fa4addbcbd6fb3d78af7cacbe2f87c0de1f0424ee90b967229aaa1defa8e7bb497c162c7ba782603ada3be1d855cc21b1a71f6c5fec239ffa54d0b8ea1cccda39e1511c8f69cdd5b535e8bac33b5367b491ef5c7b77909deda276d5d96bcc446734863976824eab12142e9c87dbbc9f8800099e754681c65986f23dbb1e687c73da1f1e66fd656cb399153544a9f70aa67ee22d6a5f5d9c882c9aeae7e08f1919444e7aed417fc8a3a00db59b001c3511394b6f7b689521adfa30ddcc143a7bb4a220716fbad49acada792c74ceef02fdecf1de4cce219feeb5458dd608efc97c874067500fec04d2221fcca6e0d317b1e38b2f53694afa702636ea2b0578db5aba245893c83ec23bdb0060b91d2550692f07325ea1a07366cd85a66b4f39a0a04ddb79e677b6deda8c7c716c1aca2502b2833372c21f617d4e888dfb750775a2a9fb4c63be237b9d7cef30e698d3fed6d7abeedbbfa9f672bc379344200b734a73076f640c9b9e5c2f17bc8c0839f509e3d31add5f0f3c332e8e307ff439c13b82767e93f185f18c67c899c9ec913bc934d96b2ba2cf7da0c92982506e87d964facddcd538cfeeb11399eb10923d94ee13a38ca97d16b2e6e1ded1efd124b52e2bec8ec7c7eba4a35d5a8bac6c51535b4e130c91b238ccb28c1881ca14b00dcaaec9f7c394f621ce952f7beeb50e5a762d913def8d25c584ee3f3327cf6601c9fea01c7bbb34c7ecd1f9ee3118f34362c448975af5f3b4796fd64de1bfc8057ad82da0330590ad06004f1107e10bb1dd91dc69c6fa8f4cf4aeaa3abf5a79363b069fea2d78a88ef731183c80e9e3bdadf33c9a887b57e77d20f511cc24071f0883b44b7a6d31acd90300da5382094cf475a2bfe710ce3e6c3c98f11c74a955fe7b896d5e17ccbac46f9c53ab13831f135d5ced69e3e9527b196baaa486f83e8ee01d5cfdb41cc81bde09315f2c621ff7456c95009032c6c2ff92bce4ff0c19c8428a1de60916e657c675c305f787b18a02e054cb5017f9b56d85e3109dd5a11fe0de5ccd58f617e57246ebbee0f7501edf03a69ade8bcb218f02759b6fbbb3ad59967dcdb2d718726f4b89c7ca759ab2b5c645f846b7df1780c8a6db325e697b4b3ee13a184cf9c42f55e39d9ca5b973c1a42b64492e6ae1e9a4416173484f6372c41b0250ad0578604da52ec969baad1eca929ee692d80e249aa31061be5172d5727906e47d71dbe398f82d40be3cc414174d3b5a80a7d85e41de42ea7b72c697e79190f67f38216b8a543f9734e086acaa425fa2a402dddc318f30ddcaf34aead586170173df536751440690aabb3879941c03c844e91a4cad7536bb3af57c200bb0ce48e0e680959190a9d09c92a003b9320cf528016a0e77a6317e1a00b1f774076d7c68ed07d821b47d0c3ea2c2b577a6047c44f7d2fa43de9a1ce76a206d1d610a392f9adefe81824e13d5a895678cd1d2bede43164ade3349da1d92b38724e914dfd4d2c7db81149fd5d1dfd8ea56e39b0c6272764ac8aef6879eadb781903d24670f9f49e509bc2b24678fc8dde39acf8712dcd7a9f72920dd2d5d835c2c4f2b6acca1cd3fabb6271dc37b1789d2322163cf91adf13b067d055b024fecbc8af307f2d722db781112cf505c9c9c73e831a4492cf9fd3fbb168535af9edade75e6f08d921be410c0e69c67403a2e6e5010e69fc931a1f096c6a0ca655258fbcf3bab21d8f8b017e4145650d13b8dd7e2b386057fa5901c507989d6ce1beddb1a09a725e45366fbe89941877753e77cc5fab826852e3d2b6bc5ac6be44898ba9ae88852fdf845fdfc8d1c1d232460075c5859daa055a45b646cc598803eacbd5fa0e6f06c19ca11f431c6184835297eb65f6cf1815f3a57380e3f47e7628d9715e1ff45b9caab906c28370780fa6ac3773d96889cd1ee8f3e657ebd2bd2f96bb2351e7221e4613b3a5f499f58d68749edc07da85b2564effda446204d26faefa66355e30ba648777e1659518608bdde193d4ddd17e5c3231913dd07ec7d27186ec89e7756cb2c41cd197e4f305382dda6342e514d62fe60fb3cf3be0becaf95b670fbda393a8b4372db4232fa0ad97ddbff6e064773830c716be944170d318256affb410ff2ae362898529cfe903c1d35ab7021526346ce3cbd35b7f5f6c595a5bd294cd344f8b13f264d8e4ffd05d1beabca8f122f641f4598dc4004b9d2d2184951bff1401e7a545674f664ed9802d135a40df2c5cb8ce8593a17e96255fde30632efa1405a119d6c202940a61e116346784f89cf48ba0ce436b6f4841472d0578e96ae6cac002faa746c74a624eba8e9eef3d6e34096f65657dc59ba14913c1e9c00e43bb93770f55360ebc739c5c2079ca28d233c52174b91e4956104a6c6af52578dafadd6595372a1dcafc5983771253b12d2cc2ed4aa94ed23f015d8657afabd631c8f47c159f0aedcba8267a6f1ef6489d607816ec13e9637ebc387bcbcf83de4dc0df91d006339de33100b95f6a8a9ae99b06be277dd494c197dee24358fdafd1ec2fc692c2f80f0dfb726e2d459014f896ceaa78b3511894da0a160b727b280b54eeffebc263a16ec637fb357a7e4bda9fe786885395b86fab9f2bd546b7dc1f3c31c853bf21f3fb826a888c494a59da38434942dd792f6e943ea8f6ae586b1da2f1f14a3ae26bc4ccd4f959efc68fd3722c22c91f90c319cb788f03d153fc391bc4ec5c862d2592498a5f58696a1c0d80ee4368ff421d11f88de1863daa1c847563327a5064e4fdc86b1201d4d5dd9b8fd25ab0f9281e38519dfe39630febd1c2537849e85fdcfc6201252d4ac6fb2afae4d633c37758573cee2d6d67798e8b436b187e4ced9d6150f751972e029a7d6d9a236429a2c3c3796e70ab0a638bb3f3cb8babb1ef9a298ca459897d7579333fed4863a5f3953bf10fa5b2562fb1cc873ccd80f74db06a7a92d880de808168fe453693e36d2f18ad82c1962f8547b23d2785b26b6d687c75d635ebfbc3deba6e75a6fcd5dc1db9825399af02920d437e3ba04381b53f5d6657ec1bad888127717be7288991afacf605d5b32708b45b18da50b04dccf85a4dd2c67a7267b447f5d10fbd30cc0eedca1a6459e7f4871d9ed2dc3c9caa8b3e839e4faf03bd467c12888fc50780f719a6e8ebf8dd8d4d2691f5ebf76fbead1b9ac0f23c1ddb8b2c79b7e7b8104ee90e52fbcc650c51787ccf7f9f9f2fd6ddeaaae93ff59fecafbed9287d823197f081bc7c087d8213f8918df11b41d9117f7c4b5a7e1bda1afe980f469fcbc946cdc0e427cf3d749eb385a7c7dac7fb816aeb95481ed709f8e3d4a08eaff4ef98c695f4ac135717cb9e877887f16e4c825365621993b6bee61bedfb132aed4afc0e061cb53cbc7d92cd12f59ce70763c03365d3fe6e0780c8ee51609d2721c485b536f2faa6b816bd78e1d5d7db8b5756538edb1d76b7d246682d3d77c24e3c544a371ad47d5de31e7bdcb1dcfea0d3d04be6b16fec8121bb152e67173d3b03c5b3f796680b7b6a1b6cbf15e630ea6fa39be256d194d92b8fd557f77e9bdcb9acf9a3fd65c9a9ff45beaddc03f1a5f9737aefd0ce7f4c9d44f475bee9dc83d291d1ade15d5d97df745e15597b68eec79afe15e7504edec92fefb22e7acb4706d89603f411d7cf4fd2a9dff16615aa9d8eae5734a0ffcf03c49f143d3efae726b7d1119a42d7d8543cd21b6a4948d487ffbff1a9f1a1bfbc76cb54b88c913d671602d67e029ffc24c4fbe3c041972f22fffdbf057ff5a93ffbbb39dede32df973455fcff88c4f0d4ac62ff0cd8ef0a911acdd59e34b4be0e0cf7fee7c7896c009dc7f71adffe29fde78ee0bdffcd27afaed89e33b9d569bfffc7f38e10bc7353e35fced3f5dff474c7bbf3d43735e6687c617fee9f3e7cf82c00357fdacf1a5d9e49f9f3f3514ecaf968d2ffca7c660b56e7c79fe2c70dc13df6e719f1a53df6d7c6973fca7864cfe220d525df228ee53e30fdbfda7335fff936b7cf96fee13fcf73f9f1a5f4963b79b9943de3a21ffe3dbcf9f39a1f5dc6a7e6a285bf24da7cd7f6e76da3cf7e7a7c66be1f5c253747ddcc93f3f35ba35af17fd1f3b8fe19e56b3cd773aedf6f39f9f1a93f45c8878ed2cb78d2fad67f2f792ce538beb3c7d6a48d89e6f612ce4d90afe3fda9295087f8ec33fc9d8fccf9f64157ab31f3015ef23f9bf59a78d4f8d41b059ffd8fd01dcfca9b51ffdfcb276e8f76ff68ff96c47ff56d7ebf0af577be7788d2fab3dc69f1a939d8d67f1ea817fa9337bbb5ed16be5b5e4e3d936ba9abe38fee7cb6c13fffd36dbeeaeae265f5dddf1ba76f7e47dffdb085bcf3002d0647fd5f8b2fbb19f7d7aef7842a75ed7eebbe664befe2d58bbf0286df6837cd7f8d2e07fe35b207e36d0b54836b1b5299cc2bba5d29f9f1aaebdb31b5f1a5d9fdb8dc61bcf9171ec5a01954cc678d657310ac5698aa65b78d587d825c7454069d107bd10765a4b51bec95a60eb6daa86cf373bcb503d6286986ff4084041fb10a703442a1b51dd57ea1909a7ad650c7696a0ed4701a477f9ae8eb7e4c81c05f8306a668eafe36831d82be45893694a716cee1a0a67eafcf1bb2fee5dfd04707ee0aa26ea69d3da818b3bc02be7dc266a9e60eb2a76fc76d65d10e04377a51c2d9d1e8756480f983ec647418696656febcfdf62fae8b86fd158edf4b7293151ac4d64de410a462fe7770e4a3f6e8ec24cdb8fd1514c54196d6b1a83a781bc13909e7a475f591073204a6da294d6b49cd20da4adad87290b519a91dc395a7a5b9cf6b0feca2b0b5bd67666ca0d51ac6e8bd97574a516ddbab15c7847e2d24bca43b36ec636b6bae2c5143c8cf45e94e6b9a1749851a967d887db921e486d41895a95a1cb4f4a1b2975bcb31a13756b8104776f1b9bd47ba54bdadd6a1a2a7672d463307b8ce1ded48f11edff364a2f308d25797648e1afedafde13c1d3ec073dfee00453f2ac005dd673bbaf724efff56974eeac6c63bcb72fde05f681a01c90cef328c0dc6cd2019a6d27c0be6ba80767f54a4c58c1d28f0747c0ab912e9d4dc1dbb8729416d3f11c7909ebc80d803e015256903e5ea4d38bead0e587ea5b764c6e429a5f5713725d02adca8570a0b4ff93cc9c02040fac0569284df97126cd05d6c08d8b249e67722da42f58646f9e5bf3295557cf512905195f70c9d3b51438416717d113a3403d2201ef23484f53386dc8736e4d718537031ed24ba89aae5dc8dfaefcbc07ba2a22e7284c27ef80fb10e8a586c8175fc85e443dc57384e95f3ee730afc6eb0ee6b0ffba2a304d725c99e2956c6734e9fa894c1d309bdb8f29cf33f5d3c6149e1f031b2fe06535fc67bdf27ab75fe536a8072b175169fd7c2a0728812883d0207d2d85d8a8a2796384d958b886c221812f8554ade1462a8580cfccf9e3a0f237c514a1ac651dd5b0b27542cda6aeedc839fe60171a13d54cbd310efb560fa2bd74ed66deff38cae2684cdfbbde81daf841b402cc50a0f5e0ded9a078eb3c930996b39e2c8e28237e7e191703b427235452054c2747f63cd1bb8be14918d77929a406e35e0598380328274be54f0d3945749e87cba8480f9968e2c4d4db2bb6f4d1fa69841f0c59fdf150d2f520ce6ec7b522ccceb207e2755e03bab94e6997299c0eaeae8e631f02ab3ec8324fb2baaf4c6dae0def8c8ff7a58e7ff5c740adf0354aa5ba10998ce4297c1753359c8ff01b92f122849200fa83b2b28fcca767f12850d2e9e39c0da176d133859d6709d3b9a92b0bcb10b981ac6d887de8f85fb92cb5c5b89a469cee8183e37f3d293e4f291abade70da37856f51fb493f2165af7d748d314d3fe9b50fe43daeec796e37691fe3fb964850f874f9c1a80ba5afd8590d437bf739a4b0488f29d073e4513d30a6bd77ce09ad86997e6e648763a44bc4265ca4d6533b05d791d09eb050d5d3324a2e828c0a4b12310a5ccea63e196a5703954938d66febb93949cd454897c138ae90a6e434d50d928f90ae14d380a4295b7c2688d654ca0faca9c7cbf67a7271e33c505e7d84ee1587e9b98c0ff7178477fe3d7f3308ef909a808d6ea4767f6dbdfd53282b32e7fb87c0f39376b91b24ab0bd3182ed50fd4cdead9aa65106cc9a78eae743d67956de8d7a3d1c8a1177990ad9da6d5aea482ad2b7f12bac20fa296f8607d7f1bc2287c10cddedf855e2ff159b0ec1d46aa9868ecaaed8c07db1728d0388045e515ecf6b54addbdeeb9574d979b99e33be0cbc50dd225461bf9ceb5576f8d44734adb5587f68c45fed03eff48d155dc4743d88bcb1e4669bad0b7abf5304941ebc7361bb99eb1f492c62935b0af9ca682ad6e021371459f7076f5f69e964c61280177656d6feaed0c44e0c7e966853408ef29b1544cc3db2043db5d956d7d1f6b634ac541e69bc6ca68094c7fe899426eea70d15a385ac6603ee6458df4c109a6f36f2f5fe15948d63c379846f6d106e918ca78463ac055419cd412da8c540ff1fb80ce236ce70ee978ff6dd29a4fd3b42770464e774e48a7426cdcd184bfba4f6a8d0c113b3ebf40cd21bea35c965dafba6fffa6dabb23f3380668c6e6f003f4e48fa22a4bd1e754c8a13aed759acafad1e7846b28d859424e0ad3fcb0a48ba7f7c83d5439519e0dfbf5f797a8a7d2bb4796c126d3afe7ae1e15476d3b9111b626f98c26993ed52a6b673f0b59e103efe937975e973f3b5ee73972f198817cbaa24c2e8bc35872190c0d0b851b57e487296b23e82948d64a6344d73a68693ca9a9acdf1b4b42ba047180f796a3d48361c10c90041f0551854be90d1e0cd379894adf1f1323e6bd59d53ecdd5bbe644e70d6cbd8d694e56ae1e76533e1f96eb56c31626e5bce0e346f2e9e0c6fa8f47f4ae2a58e65a7a0c62b0db73e84136c8cfd0836c50c0440f92acad6a5b84e8f3be3511e37c38aabfdfc27bff7ca800de9b15b77f07e3f15e38d354b94b617b6fd7672a2f155f063d559a4a4369cc4953753aa6a5e17d658d9adad6ea8affd785711ce281ac12fbf868e9e36a3a8f0afd23a242f92503c3f178a00c64a04288f2048bca4c69cebb9ebf072aa8f1760359e34ca188fe227f1ca2b33af203145c13534a15fc1ecbfe82df4b2920469384aee5aed2557927a0775061587a7be9c81d227fb4309fb6c46f55e70c63a45caf1f6b678f277d2cb53e43fce8f1e59f9576306b6ed1c5bb4c784bf935d73f7faed3259d1adddf3f3bf7b5926694c27ca5daf85eb8a1845ea84467608061ac47cbb1709820f06ad38a2f6d432981e4bf792e236449b88fb075407d6d6769ca661668fd31431cb96efc07e9da0e3587edbf4e37518e151072bb81ac6e9c72bff0ae70cc2a203ca2feff441b9185caa186ccb5b6a6dede5bfaf1d1315901056cbeb80f8d39f6ad7d09456acdf961b59de2317d6fbe38d894192ad53a1482bdf61f5a6f3ad77ade707a16c9a7a76ae2449d2aa2d6d37a8fa8b3618d513eac6df7adc51a71ce8fcd1763896b3e7e3d56e5a1b0daebe2c159a98a698847f067fe54fbf7036037234a098d313fa2768eb5ea39818b5de9239e5fe78c84b1abbae660c9d53945a389c899c67065196ae5b50f3ef7fe123a52b32932d183d53dc32c195fec1acf6584200af5f1a18e84138f74edcd363658e518f232ebae6d99c748ef9c5968e86bd50a319eeda309d5c92bae01fdbaea9a8231abd82f61ff7f16bc2e03c4529e0fa6c85ff5bdaf8cb42557e0e7aaa0706583697ba135d09d2d2a6e07d440bde9d2d101c8a722d8b65f94af45efb88bf2b598daf5871b5caf09ee76fcc6f9d803796d29828faf3afbe336e68e33db5c65a0b2eb4052f7325085b7d46909c5d2358d189e518af34b5daab4745b4dfd98a14ecba5c2f3c529d4de5018dc98a2adf29d49dbe35a8f1c985ddfd201fb21c44680bf0f99efbb22974f4d1d7e2824eb87d3baa5a97973e1c2af292faa6a2b283471ee988763bd29af97aaa75f14c17bde037f5a04294ce150237c1480d8064ab2700d266b9dcd3f9a7e3ed035023e87dcd95b09a47f582bd53ed01ab0eafab28836f9bb0ff4a07864401b1fad1f15d04fd7597b21c5b23cc403493d038e4ccff2505fc150cb25697b5b681f5ca1f578da31161f6f2e5c37bc2769772fc26302aad51727d028fe49578ca1f7a3bf2d7dbc65f1e18414af21852c5923784f296413cae85157d462ac9598e235a48895b5ad0510d98fa5c9ada14f16d10096eb81913cada062704b7ddf8fa76288f382de47c5f03da674cd91adf13bcee2c5d2dd5d2e0e4f7adec2bacc28e7c314287c3dd9fbf970ef0fa15e60c2adf8d9182b75fc7ff574170a919c432397739e017529c53682ba4a35a6254432e45657405d537872d7189e217785ee055c4e254fdb5742e5cb62c3b35015d3bec99dadd57fbde9a3a90f0fae314ecef98a5c9d6b6ac98752beb3d6fe00bd44a4239ec6b5f372ebd725e5e918218d2be43112991fe916991c8898c6f61cd2390b9d33e43fcaa08fb1e5f63250eb66fac598f7fa4be70a65c7cfd1b918f3c0f3a8aba59d35896bf043ca82dcda9688ba1adef5583a53c63cb578cd96e4ab5d51d75e53b6b806d4f8f8b34974be76964cf9e240c3c87b28a0ba558a3236859f99a22463581b7f2b1d8bc57f9d8c63d9b9f140ca832c9d6aad333a458b1ae33cc890274fed7d63e8db867a368d61fb8a36017e4fe84a873fec120cb6010315ea83edf349fa7dce19f6176f36551e3014c9591c52e41552da56c56b6efb9fc19eb475fe88640d7451338423075c475d5ad97a1b03d6468afab84276a5c7ec42efc57ba7a97a2850707afe637f4c866217fc05314d6b55df1c01702af7ae8c897e4c6c35deed8a6b3394ed51bfad89e89b54560075fd405688aee1d980b381899e15d92555b9461bb72bee4cbded598246c6e90d2859237aade6ebb5cfc873cee2ded2b514b51485b5b7756b6356d9aff233a56a953b4de4e7ac475ff450309e235df322aa28d41c2e2916e8f3dc5a695b2bc05bb2369d33e44cef6c4379a42e9685b167882b57ebaaf1b5d53a2b4ed64e855fab465d66ca8f99506f5dd11edfee23ea2bc0257afabd631c8fc7fdb4fbc5f2e71efafdbaf59b310defc7d0f0c7efba93de2abeff4e6ad4342504dbb814fa11423c5f3398ceb5fe90b726c7b91a485b87acafe660aee9ed1f2820b280117feafe7a3d3a16efa0b085dcc549d21f536fb75dd9035ca88abd54677dc1f3a3da9b8fa5c1bd07ebe61ebafee8c3c5b120c61a62e8d3e3eb856bd73cb2da2f1f95df58459b95bab64a4f7eb4fe1bd369d5a9dfb9a5398f6863cf49fc2cc69a4fc5c812daf94e509e93a65d606cbbe2ded5791fec43c18ceb76221f54ed5aab5a7971611b7a8ae7c8d2c236d4ca1cd91a145dccf9d939b4b3eff5492654aab56c9e8402e8ca37c9d9b2c40d6469e1f65fc9773fac09d169bd8dd3540f4e801780d95f89ed209e2d5d393801b5a1d294a3b9b1bcbe0b6bca95bd336a6a2bbbdb9a8f5331f741056e2012dadb19c5decbe072847d227af20509e439d2a5d017da5778a05c6a2a81ab9fb6a5b92432bfb19a436adf277c07a9f686d4b3b2879db2fac907c55d63fa5e3f67cff63373bd1ff4ddb5ad97d41ed3f92ba0e5952e199e860447b0d42f582fb710f4ab3b7c3b5f7dadd7e9bd9da9ff8cae6b153b403d1cc636fa1a86f92aa2fe64393b25750d390802b13f87607722bd2390e7033560128f695ec92822bf71fc5d504e291ccb016a5b6ec01e938f39feb621b1151d143e2bcb89a0ae5d7db03785ce6e2464f857aee95f374e53e12de3f5f07a59b6be77ab71e47e92bff27ebbe431f648c61fc2a6ff7c841df293e875fb0a4686555df3956f67d07b691df905093c8e9f97a2fc1e75453c0a9cfde0a5b77fedb68e8ff50fd7d1e5601c2baeb9474e7031cdeddfa94e37ed4b29b826ae6529fa1de29fb97e256e9ee6c3796f4d6dee3b2ae34a902f97db7fa6f387eaa14314a8782697c5f040cf08f7b7b49db2c7bed9ebd16e65d77732f613bdbdb40c2fe5a7e63d278e3fd1f6abddafbb3fc2b828bd7ebe0fcfacb2b691e7f109ee15cd49b1406755b11300dec205708f65fc36e69521d125c87aa2318c90c7ab24178b65bd33ace37d661cee582725efd8a5749d9bbc4bbb69edaef23a7f5191fe1b5191fe98e199bd9d5d71fe85df3a6707cf58c848999f12d3910a5cab0e1b69bb25b484a7a74efbf16ca4cde70f64237de63f0bdc674636d2b8938c6ca4e9eb99d948f9cef313df1284848d14a6222223fdc545fa8b8bf46fc045ca2c507eb1913a81b6b574e962e94adb144ed839b7cf967ec2a6a1e03c7651a72962939e602b27e8f0ce4bea19931c06d3e85db13751fc61ebed2544d2c3f78c9b788122ab01b204d451fe35daab6d445a8e78447ded6ceac727f016c89ae708da62a62bdb98b9a8af6c50e0f24896cedf7d31ee9719bf8f68cf1dd0a028e39172347585a25af52d0fc9781966d3456d275ae97eac89436da1bc85aca0893652e23d350d71a31555d6e43055c23b120f5482d275e515b3f4f1dc1194b5a5f35e9495482cef340365d8871b2d123231f456ac3d8e7cf1cd3286f0ec14c214d136c877dc00bc3e9d150af053fabda1e51d7a0725ce32f2d077a0eaee4cb47b18dbbe8647dd281a2eb5c9b34133eb8a3c5a65df13a1048f7c51211a0e90e707cf4f03d9e3dcbe78f9ee3f1f2c0173a9bdb94002bf73c9beeb2f0f26ad2edf982b8d68489791a06237d0b6a3a6b2b1cebce704cada36541c66711cc85c8d74caca0a4ca0b0eff9e5a099ce6ab9b298cb320f4306de2b4df7260237e4e0ba98e126b4cc2336d7cc9c0212325d0b135553a699ac8c7ebe6512cd335c0bd76b7bb7ff9a61a50da3e27b2bd0ced15ab256c3030a3d3749055ec4aca26c6d5ddbe7588e17571fee201b82661463a7a94286db081848db7bd41c43a4d135a8b7cbeab6e613bd351f0bd2ced24f2f2083fef23927f3aa5d463a991bb5162b6dca32b99efb922815b55cea56935932be98fa706be96a8f8c65aea57d6b01f76c43f1cce084ad1eadc64abc7649755638cf703e0cfae29acccb401e628ac6adac812d4b2faaa8570f83ee7019bfa79b1f7d62f77c567bae2cbd9dee53aed57b9b55aeedd3e397ca6e5d5e657cd33366221e6d999c7971c5d8c296a5bd15b25be7b51b9dbffa71db7ec238102bd51118fbdf75c7617f3691b73d39d7a3beb6e613639c78e96976eec15aace78395763485ce0ed6845f840a32c428907c246bcb817f9c0f0275e308e97f6b07d41decaff758a57cadf240846bb6ce1eccafa2fae59df87fc63bf16ec7c4954fa2d5e29aec3e89cfbf7d6e3f3f3f3fb7f9e6e37d12ad0ff5493c775a2daedc27f139ba3eee64b94f22f77a669fc4d353876b359f5ab14f824e45e493e09f7e39257e3925fee64e891b7fc495bd08f6a365789ca5b76934e7dcfef1bdff4a6cf283bb907ccb50bdd7f126b2ad5f42d6f1245b7daa622ba0d105620b5eeba6541f8fb3e6237b779146b818e92e467e1baaa0cc95b641449ff4a92f24e533115ebbadf3683186b38056de4651618d9cab3be7653d472b6d8bc05741518f5236fc65b48afe9eeeb311f5f6061d37897e7c532d466dccb1d0d9ba3a1ff9537683dee6ed8d6b8f4d435d7ff7bfeec187716e137be188843664beeb97e7f5b8db8673f48f37cecfb0019f071b63d2be42abc8c9a04cecf5187920fb1c31f5ce31cd5696bd0d206a87be89f0d9d1799e61dfb9a900c9d589b8f9042b7fbc61d173e5f9d3a0db86f11aadd2d9f20599da697d3f9e8fc82f13ce9394794e9e0e5a34decbb2f76b343be062ebed05ad88a2e391f6655d8d8d68456dcb1b07d93da3a6764cfb7df2fc59d1f312df5be8cb93aefb9fef977a93715c59e9c827de09a46dfa9d5134cd217a5353db9ac6e0293bb6653e28853757990a9cf9acc9917b04533f6dacd06f18e966a82962b494c613cdbc4c43df4c6207de8ef900c7ed887c0e57eb2de553e87a2f537f1967d7c3f58174a1193a2dba66aec78cbef765ba1cc719bf16d12d838e406c09436ecdc77a6b6e199e07951293645cb355268a877c4091176c5d6ba62a33d66e5f3d3a97f56124b81b57f678d327fbfa2613e7d68f2b0cb748181c22b68791a01ecce6ebc16c0e0e65fe4ca399e8e246339153335ddaa154864fb1bd2e667dcc57767a8e5d264e7b3885084fe5784e261a19db4be8938cf631952d0664af25552837be019057648c23bb26e3137204efe0eaa725f54b93ef20fb7b8104776f1b9bd47ba54b2a736f0b15413919b890fd690c010526f46d6d3319708116faa9b4fdd57bc8bae72de3753fe8f1c0660555cf97f55586d6786f5fbc0bf8c805e580749e4701e666934e789e61df35d483b37a3d58b22658faf1e0087835d2a5b329781b57d6166e9fac2fb26e963bf0250550b5041565481f2fd29919757c42a1fd54e9ff9d90ebba314332956be7b0ff93cc9c86cccdb0ffa4299fad72813570634fc7f39cf1293ae7d67c4aedc57354d940c6975627c15aa25911747e310ad42312f09e66b84ee7a670dae42224103916f01bb7ff1adac9da85fcedcacffb414fa131902eec6f3e46cff0c521023f218f514f813df657cf39ccabf1ba8339ecbfae0a7c0339fe18f12aee931e9b8a8ceb125448479638f0a92fd6736365ae5ffb27f43ae1da86765a7ef3b133f2e7c77f49dbd3e80dbb863cfebfdfb4e3fedb8bf8ac5f7abbef1aef58ddf5669857495ee16b2947c38ae24375fa281d9d0274805b3f1d5c1b7f6f027309fd2e95d5c945958a917cce7b763982272bca515aa7530be57af97e4f337ec47e46de81f1d73c34c9ea8dd97e4e896d509ef1c78e8a5e5d0992934565021a40c2d6eef4bf966675b22391b055a51767e2b752fe6be9e89422ef8847d350e15cfaee8bb3eb7d62745bd5fb6b32fffdbbcfadbfbd3c3f65ae5d9d1cabbb41e6847f1a4f787ba4f1e8b5cbb5937f73f45e4cf6e73df72ec9e77772afd1ddaef5cbd7dd77bdb79b2d7b3bdde7dd6f67faecdbefe97db932a0e6da61a890afa8de49a1f01521133264bb5555f598426707081de4bccbcd2cbcd593c7e97bcef1ef3e649f677fa3d97e501110c761435d326fed5554d7b256e3302007e7a0e8907bd2f19d0332c40322675ef93e61ce1c66419264b5a3d3e35c510dedb97d153b0191030c7b36e74c24fb683499afffb8ac33d7fe4b3a2dbfe19d373236e2485bef0c6d7b1cbde1e4df137a2f911577dd4b3e6fcfeb3f2e1be7dbd9bbdee73fe8b3dbb7dfd3fb98188cca652e4ba67739cb6315aa275b859eb8b3f5f630dc1bf3d75cb4d88a0cee928a97dbbd407d1f217ad775eccbb77405f68aa92b9c6d58f955ab728892f9b29e133dcf9af09cadf3b9d59d957311221bb0c570bfae22df8dadb797b6ae78d476a767b11b481b244bbead9f366e7f99e7df79baaae82940c3133db3a96edc80d86a9df3a0ef6e9c6e2b1ff935ad97fa5e789ff66cc9606b2c20d6df3f356de3eb5dfa6779b631e8823988b029397dbc41855de6204914204cfc8a01fe1531401a86993d200e731d76a9e5d6bffefa364273dbaecd72febb6bff38faab7fda81fbd46269e46f7612e9b9796212faf9efc66f8dff89633f34ac920dfdacd6bb7ff8abedcec678e6fe03ed77ffb00fb68f6d8467fff057ff407b1fbbff706cc79ba58344ff9dede86ff33579cdafa05175d0e8cfff1f0000ffff010000ffff85ef6152687f0400`))) +var _ = pkger.Apply(mem.UnmarshalEmbed([]byte(`1f8b08000000000000ffecbd6b93a248d72efc5776d4d7b7f70c07a92a3ae2f9d0d882324a8f5872c81d3bee20a16e51138bdd1ef189e7bfbf91991c956395dd333db71f2a665a11c8cc952bd7e15ad7faef87e5e6df6fdb87cffffdb058eefc3dfccd7d0b7e5f2c9dcd6e7b74be07bf3be1f2f5b47bdd6c976f1b72d9d7e5f787cf0fbffb6fc1ebefa1b3ff7df1f6fbf6bbfb3bfd75f52f3f3d8c82f0edfbee4f67e73f7c6ef5b04f0f9a13bc3e7c7eb8fcf8eb9bfbf0f9e1e1d3c38bf37df1babb7c9d70bdf81d2d37fbd3bf9cc07bec35bdda6fcec3a707fdededf23e0f9f1e26cecef51f3eff9f87df1efeefa787d9ce41af0f9f77dff7aff13ff45767fbb679f8fc00f74be4fdafd1d7ff152cb701f9d1a707e54d5ea2d72dfe79f1798b377c373a1ddb87cf9b3d429f1ebebe86e9ffbfbc6e77e9afb38f2e7e3179f3f6f87dfefba1d39c4e9ce52619c4bbd752799bbc79eff8e9ef8bb7df82378fdcc178fd8e3f7bf8fcc0fec6f61efee77ffee7d3c3bfe9985b09e3e7dfddb7cdbf978bdfddefdeefd0d9d21f6271c6fff55e77ce12918f36548ae8259f1eb6cbf3ebc36781e53e3d046fdeebc3678eed3df59e7bac20924ffeb55b92eb398663fe37d3fbdfece30bdbfbdc7bfcccf57e7b167bacc03efe7f0cf799611e3e3d2cb7fff2f01cd2e9dc467487bc1e1e3e739f1e469bb787cffca320b24fbd47f1e991657acfbd4f0f1a5a6ed60f9f59b282af0f9fd9c76751f8f4305f7a0f9f5986613e3d28d9ff5afffa57e878ccc367e6d383eee11b339f1e66d90824b4dee6fff5e6aeb7e49a2fbb65805f66f6ea3e7c6685e727a6c7b2e4f15bfcc9d323c38acf22c3fccfa78749fda5f198c9a5fdf6975afffad77eb3dfbe7a0f9fff0ff389f9c4fc5fb2c2feebf7ff582dd2e675ef7ae687eb994f0f2119c87f3ffcb95e7495a26ba5f33f9f1e3c67e724d3153adf5f37bbeceed94fc9a3dfa5d87e77c2102d5d67b77cdbfc96fdecb7e5dbbf9c30749d9d83de16dbdf222740f53ab0c37d1245d9eb3da69ab2c73f37aa489179120491bd5291ff76d0b64247f6388e63b9dea3c0323cc796e9489ee798c777e848faf2e54a927d6ca12579467cecb5d192f1b0db68c9fca53f424b5e8be885dacc4432f9fa5a1766da2cd36054c063f514af67513fe5d511bdfaae7e7eacfae9a21a524df5d05f32bbf134f45d0599c052cf8e29eebf2d25fc6ff43ad411dc6821e484f338d8f6dc48086124721353459e3238f5835d0883e9e368a0b12eaf1fa0a12297135937d090ae1881630aa1a7a0035c843b60e93e5064c67e79fb63d4977c1808074f9119fc3cf78c3ffbb21829da016ef40872a72db0463bc019fb71b063edc0587a26da02c588c6013a8c79805cf25ebdc7d1d03e8e57a3bdf6e50dff3e0226bda7a1a01db034c636d9e3b7a5b4f7ccd3b6bffcb28081bc032f6f0bdb928e362733b6793a007eb2c7ff860a5ad9968eefbb071cf2e1463f7b9c1cc19910c26378761563f56d819fe34590378e649e86d2d631359f8c73296c1c53de7b438db72d7587df357da63579c4ff3fea4bdf1d53587f5b4a923b94beda96ee4345dcc4df6d1d4b63661cda83af6f8ba9251da7c93b32a7d0e5a7749e86d2d6b3541f7ebd1a47fcbd16c2c063a12247f13baef2cf7139ede02af3c7d140f0a1699c5d455e0113df5be26cf31482785dc858fb5f169097105ccbd399619fe79cf6064cd64fbe1bf5a5a31b884760a98c631ae7ec73bc9ef2d131b2b5a2634cfea435b0b4951ba02399bbd5db4265f033d2eb1780ca107223897194f9c20b8cc8e5d00106c67a34d4568e62ecec9974004bfc3d3a8f862a72f11f67ec13d92a3e13bf93188c14793f52c4a513182bafdf5bcc392322f78ea4b3a3882c54a60b9b13f7f833af2f45c0d40e8013c2d7fc73adc9c2539e179ee2a39172f23dc5387b5fde8acfea4b21dce8c80d041fd2b965c1ecb8b04d613d5258ff7586ef1d229b9f2e3c53b8780ef0e1d0406ed45bbc9862046652080370f8b694debca17e74cf6f8731e7855e5ff8fe6d38d93be6f3c1e6c41db48cbd63e9c298a37bc93155d653c4c88dc435b000827df1ec98eeceb6d495a32006981ae3592a1a73f2d199b12bc8091c3005ba2f236107fa5a042cede059ea0a5893cdc51a32af9684be2da5b337544318b87fe4bea372be28ce09508cb3cdaba13bd4e9feed7b6387cc073a8f94c1c2e5f13b0b9b64fcc535457b10cbc27c6dbc18786d92779b51192859ef789df1b5e47a84f7f57829bd004be5b0ce8bd702cf2f72135952400439265e5f630f86d2c131056634d4dfc04c5a410521b899fe515cef2f0b973796d0448c1be167c92cd641587e61d45b4c39790f039119292a1a0d8d23de67c09cee4703b41f0d34bc17b7534e3e83d95fbee6645ddd88256be8466e719c435d20fa63a8316e80f6e098dff32cf214798df5cde5da7b4374c4ba1772eaffc3ef905f2b9797909d9c03e973a408eb1e77a38799feccafad76800108c1e5ef2af4cb9413f720401b226bc93a7242e0982ed9cb76305fc4e700027d897714638f75983b9c2cecc0d8420eeb776173f51ef15e8051223bf83c90b7907317b6a5a291a22357391d5e4d633d5e5cea8816e3a4f78fdfd5d36ceb4bc535784e74e4725ae45812139fe55f73bf5bb88111004b4530d0b05ef5d3398ca41dfe9ee83d450e6140f6daaa783e95ff7981bcf54c83cca96d4d172ee71f3cf3b426728ee74f3985c09cd239b6a4a31b49215c5ecdd5b5aeee343ff42f3edf4be4a1768ebed9268b7272b1a7ff16834b3981a67c8ced141fdb37307017e9f97b2c59dbe21ad233203e3b88ac0dd7db9132df83a847fe3d36d3f9d825f35a2a3325fb2ad19d8df3636947dbd4d0e5febcfcbbd2d5797b612685c9b99cbf677ece12d949cfb2e6f929ccf3b82fa171e0ee478a17daa6c0b8bce7bb01532d278d67d285ae0e8c9367a20898d31a9962e8f8a695efbe1b29b979a9bc2e7daf831d9033bffcbd861ab27915795fab65f86a5de4f837c45601c80d8cbdcd19f43ce58c951b184ca5cc46a94cd6ec19bcce32331a6a6f9037b6a02f2dc12cb17db1ada21f123de9983d7c6662d948d7bf5a7e6b6cc7ab3d8be7785ebbf7cb74fe0b5ebb4b594d6dc679f3fcdc784f27cffb45f7f41998d81e9c26e3abd7b3f879053faae1fa3abba238e7c4b6722c15819a7d328ef578e3de8ec7597dfec4ef95d89257763ebe4645ae65846e605cd9bcc9b3ecd8fe7831e563d9b3c6d9fc96d9338dfae3726dcb9ed12857cae90038d198af8fa5bfbf969ff4facc76d84c12bf2884c10edbd20777296d21e71d460adad9a687460a08a1325f80408cb06c3955fa07eb957ebd1dd238a6a1c6405ef50157ae3f4af469727d89bdc4fa2e3da718db44fbbcaf42f74e4e4f96c949ffcba59d19db8df3a22f5fbab7dae94bc35027d57ae05a47e2eb73b6cfd63185ef44a70fbd373cf6787d8af188c8a3feb6229e1d4b3fb89b75ddf981f5ca1672580f1aeb44373a439d718793c771245ec44dbcd0537cd65e0a2bc831870b1d7aa8394fda9dfdf17eee6043cff17d47d8ffa43122bcd6bca3a09543fdca83cb212c33427cef85c7c5718460bef02c0d55c9027d1ed91fd41e1ec8477790d9c4e95c29c61636db1635e36ed499bb916ccc5e4adf93a17bacecf98dba51621c4bdf96dbe425b2a82006eb05c74a740839f71790b3e37f17f54171eeb459325fd386f31bdf6f4a7d91e5eb4c1a12f9eb4b2fe49caa1b67c5d954634bee521febe237e3d9c5f81757df139d89f7e7d53d339df6c7d55ad1392cf7d9afd6a95c2ec633298bd966f3819f7b0466a6abcb7cfa344eb77a5b782bd98743e9cd7e1990f86212638e63bebbc4ae1b0ded936d9e8e8e3238c5b1d03389cf98d3c7d1508f3c73fec7a52e4f3e7779ddf786b13e54e495cd1947ac675e4ae3ae5f96a3789e5de5c4ba81bc4d3f23eba4d398f566f23892771e8997f2fa019feb4632aee4bbc57ffdd7c35f91e7fb7082ef22b3f7fc243e75caecb182f0287649ec3df77a3dae27f2cc538f1144fe76793dfaeae5793daed798d77b7ee67886e55ae5f5c8a0995679bddca5f7bcde3daff703f37af7845e2ea1e7464273426e430e307228005e3d78d697c72448898d6ffc2c6c80e6034e8ef98cc7489cc96c6cc95cc947373e4ca182cede20f7f9a03a699704c35c0eed016f6c6d6b44df03df6ba8ad204f0c3a12987479c9b739634d0f5779eb98ba1f1b4cf1bb8847600ad27c80cc091b27a87206973b540fae62449e82b2f7a7877f514e9a9335e419c9f5d85006d8184a8cb561b28e02766cce36e723680e12e32da449913409e397193da33e09cef8307374f7235943ee06df7b920b2e63d9c29f4db1f1b5829cb777ac30f75cf94c9d18ead410a3bdc469764c810196bab7cd631cc89e6f478abc077d69675b6b7c6f62d88c86c6fee23949e0673f1ab0073798e37b05f0fc56746cace9de39fb6722e79c768026cbc20031af339138916e80961e71a02607a0181c308fd899d88c4d39b2393ff41463e50d8d08cc44df55d6bb3831b98f8d943d34a72b3730ce9037229b33ceeab13ce952e61c3b34d1fc47bdf3f3654312d2d489f3530338091cce0a6b4a8267441664559eb3646de2779b5319b832c8d375c6d71ef1f500efbda89098256b81e71758a3449602371077f1fa2218e847c8216cc453679a3b85f83e25c100d60ed8d01b4e62a3dd38e3fff794679a84c37a8c06385957d189c33a5e4a2a5c4a5ff15e8403cd77b9f95fbee6645dadc98eace1b05362f64277b774e68699deccddab212091396aa50189926455e6d85526637c77f8251fc08e1349c4315c02f3748081779d088ee70546bd0598099bf1522a9c0def0b96fd8404646eccd829068a71848a2800735a9a08a9d6f525efcdb0bedb25d130c8fdae24d960a7e3ab0992d505d45b2410b320407530b9d51cd03522b2f5bea0795d90a236a98ad7b231709e4baa1ee23910d284d8508a20c722fc2ccf9afcea89c2348192c84f7d9287800c7cb77f4cf6f10e72d82e15c9986e36078d017df29704301a9310d486abbeae0e1c9193d72441d02578f912ffe63a983d4c1387177b35fdfc36c9c14c87fd9d93fcc9dc96edd7743f36ca668bfdfa9f96047478630966ecf9d5d21860fe9313f82d82ecf9b3b722d89ec8479d4d52a92714e25fc7a01fb76512aff09bdcb9463e2fda289cb88714509725aeb813ebf23a722be4cec3fed812db43d216f228f3112acff176892eba4f8d5e27b0c480c424d0eb705a39cef4be7f6b1ba3f29de9b9d8f0bc51bf68ff8e5f06d1e43c65ff6ee767cb7331846b6deb61fd628dba9c8d6aee7764aeed991440454e124bd806671cc588e839669cc1acf81b7c4e0285f8663e1c4e6a759b41f701e36e0c94b3ff1960f94cb2be041c9c9dbf292039038e6aa84e2e93f9b203f10015c3bf8eafc4f21beb982e89e279029619aa080446044c6105e89c559d9d443f60fd9fd876bf2218a864bf6d9b6dd43c00888ccbc736ead82cdce76667611a9fa476e6fbe6263deb8b36527ccf4cf754d88d2d6c237ccfef9ea9a2541efee3407e2d6d047a46557c8ff6d3da33f7a33644f5feea7e4e91b80cb615b05f90d80008f4d3380c9107371090a718e7b155b095eb8050956bdf680b57f806899c17c792dac5f82c8868a1018dd35cf83cf9b155c45da84e80a6b827a0992a905b23104e625dce88927852cb311af9dfe4f638b9572e6691ac55ce87f3de000576a234475132be5f3b3e659c496cb9859fe729be9f3f9beb005d7fe7f3aec57cdc364e6569c85db269dee4d73cfb8a725205ee29792e890542ae97c508496ef4b87095930f83790a1a9ebc8cceb639fa079f813f0fe84e652eb34fff93f677ed9c34fb87b5c076acc7a1497c23d68d5872868cad647d6e05f44ee62696b977c6fc1acef5abf94af457b38d8f6df9f9cee5d1d9538cdddfcd77be65ecb949878c678502b572bb35d9f3a500fa462029578553a858fb1c4e21d5e95cf659319f58b6e79b6c995172ce7d1dec27fd5e29a8bf7ecdeb7c01a6b208259beb4b9dcfd058ebbc12705a561051abd7c7b3a2ad790d444db13b5d72c98c6de9ec95fdd758f0291f5db9aaa09cfe5ddb8485df643a202930cee4407287799901212039484473b015e7dd94f37d7733ddbf9af20ef6335d92931d7a4e2ca539cd53935c35963faac703799b3e6be8859eb220ef57216f65f2bb821c7b849c80e006cbad41747c5e7653bba2df8b26b31e7e975c41b17eb0f9c99e00cc67c2d9e9c745c38a78c4f26a71da9b6da98c1b3daff07b8d4dfaefb1857c681e772040db5a6078b50f1301f3846cabb58f364baecfede7b3a7c88c674d32fb6ce023a830585f6d81299fc14c0a203f8af57e56885b31bf9539aa767ecbc977797d90fa819d7c978bdff6b373dd53d02ef63f0b78008f93cff499d316ba2a2e340858dffbfab620c5e7339671ea0aa45a9ed36e60f82e57a197e9bc5ec712e3dfe4d6b278cd32db4b5091cf5837e7d7babe20829ea150c1cf9827f987cc6f277b90e07c42b8d1b08edde27deaf2c60adb932e075898f76312b969785e82951c29f216cf0918ae17c0f24397d76b72f36d8b562a74669d4cc9f16fa24c9612b07c4e7fe4e21644ae521b4f1f18d3978108f4798d4cb5919116c571648d07f5fb739cedf77715c8e50a13da15a324d72f737b916204337d933b5b408010b61d9c2456328875e586e8ca0a9d51b90e99dec63a7b55ae973e645f58d2311de375f149aa9f3f7ee6df8b4c7ead2213d777beef3e566692bf455268f2c80b8f5d0a4d9ec5279ee19ede5f69f274bb4a13faeeef66907b163986796cc9b34946dd8e6733bbf45e6972af34f9519526f9cd7caf35b189cfa79fc74173dd48466c246ddc4064ddb8fea39e6cee2d8d7b25f6929390c2517f331ef309db96e39850eeaba3c89157557312bf7372ee615bc1334fbebb4abe230470679b13c9599b8f8993e265ec2f2b681dbf7372de619f683f3524d558692f71bd47e697d7f8f3b6258546953d565283409e91d9636b60821006c6555c87d8f131495d625b619f3f5f5b108fe13a6fc8d90bdbeca5764681242ccbf551c22c4b2538089b133730408ff9e752c2afd47761b02c5dc732d0de538c88f8ff712c624c647bba80a62ce07bc7c4652cdc149f93e27d979206799516a607cf8f23c567bca174feb67c3e000e31b97db7821cbbf3f09e1aae0f04a33154437b63603be73ce674e405c676cc6b218858df0db437c7d291cdebac1bcc0f78adc626adb721351e644fb3eb119fedd96e246174ef37130292eb125c4ee21fa536787e4d69ce8ac8c24c37b479c11fab209848d6b94032379c14ea8dc85a90f93512a28a05d8a80718e7818129ac5d450ce1669ae475b68e69ec4be29767cf54778ea59f637f0861bf7034d40f63525b22ec219f100648789f911cf9cc24c5ec3b609ebe625bfcaf5f73bcaec6796ce2b5d13bd51b41d3606c52bb36b85cfb1adf4dca8837f3318786788cdd2d375e827d6c9b0fa73e1e8d29fcb2446fb7c479afc839f4b7c64ed693de91f7af23eca0efd6253f16cfc9af9efb4e896e2af20fd77f452237f60003429482c774cb39c888402b09679be7629ed55196e58ec6799c52f17ca9888794cdc7a50c72aceff67b0bc3d292dcf21a103d3c5d3866d9b5d29b4d6a657c1f061e02fd8ab8527e7f109cd597d3643561b45f9584abcfe46a49b3f5f91069d7cfc3c1fe18fc419c7bfa056b6a7ea48e4d9ef98bead80443716c8be327f8c9b1a5092eafa3db91ec15731a95be5ab38ccc4a74737636d3da9308060603a89f96d58b57c4a64be6e01ac341f18e3139a58e484d755f0aafb1313ef6d7b0ecec0167ac5b633fbefe3deb25da623e487cff7a5d7e758c48b5bdd85d778d8079daa5f63d91a30b32e7659dacfca2b8667aa65cd46037f835a98d51acc57d1f59a3eebb81ea43e5d49e84522efc261ba76ccc5efab9fc7f8c0d48c6e829726407f21626f8f48afc6e199622c7f770b42dfd6dcceb87318fd798d94d66cc71fcf265ef29dee3a8d40f6cc446fc28ac537c4696fa72adf1eb713eb2bb0cd7e8b83a4c53192eb55ecf31d9da96901a8e7373d3250e11e79ebb7260f8795c51cbf5bcc022656b1a73aea4e7dd349fc35d4a816392f58c09d62bf47f312f9df349b27d9ee8bd3b6ea90cb7249f5be3cf6415d99656c0105c5c939b7f8ae5296034940b3c53858e2a605c62fd86f520ad1b447b7c4fa89c083f92676a2b606967b031b6797b3a99fbbcdd578593824315d9a62e8c14a3e7902617a575bc8d675a3aae9604a1f30cd7558769a167770e0394100d17f45c15416f8d5ff537c381e53123896ee7edfa38ded6b634a6cd993e2267a7bab3ade9e3887021cd77e41d3e44444bcf012f40d5fab07aed39c7bac47166f71a29020bb1cdb54ccf7c3c772573d46ce7125e30d3abc4c917f0206ddf3f95d31afc62990e4ee267035d9e0f4e7f9a7363f0313c599b1ac40b39ace22ac8d6a4ca9ea718b4ba3ab71f8cf9be3c336bcecb229eb7423f349c97054c78791ee02364c2053cf395dd53754ebcc7e6297f0f269fc7c963b9489e26cbfd96acedb0907b2f60b1bc1cee09ff3bb1efbe2d256e62ca5b57f1fdc934e14c24bc70eb6f712d7d92d3c67e876d7a28fd7c93c74c623b5143ee504760509e5b1f2d47577973fa19b14dd78e45f360df9612b4a66f094e0c81743dd2ef7e18660b3aee7a1f5ec0335e77ae47bf6883d96a778b14b3d513f94ee4c0cfbd9ef8f4dc05b3c5b29cf02c8a22f3d413588ebf213d307df9f783b684479e638456f4c074d8ade8817397de415b77d0d6c7405bed76f31db4052c7d0514d5b7b91deb0e277b3b90570e6f1c5b83b66aaeaf260736e65346efdba6f6dd4b029e45d0966c0cb4c134bef78b82d22e92197058429ea2ad93e79713071b8ccde9cbec397720d71dc8750772dd815cbf3e900bf0647e131ddab2e8d3239d5713bd9a74974d49b196121e730cdc153623052581230698824f029209c1cea6aa3395ef7b788d13e2de443f2be5c54b4dc45cf54e5f713c3f21684dce7297f31190f5103b4b9e22efcac9584abbf8a46771112c47039c7f2858e7cbdb3f6692ef619bc39298d1d0f309d1b7a9a351df2741ae2a1267d20158f14960cf0e8c154ddc19217e868bcf184edcb9ca09798ab15623e9803fd3033984f8df6581880e8591cda4d071b015ebd27262681f28710150206fe76d028a6d811c2d8824aac072190041473020dd90567088d7dd88468a188dfade574a5e2e6e47b2b4b54d0195ce65cb20476e3eb8492da8a02e9096067ccdc9524aec9f7c57b985630a5876f775c9f04e641da4831bdd877a80b6c0d0c2d7a00914524ecceb58613ee19c7bff8ae4c4c51ecd82b368ef7db52bc8114bd684da2c9b46829f4bfbba0920549e9c0db17c798a787068b72d9aa4487573f60c4a18a42197af0b60c7cf09c4089a32f30debf2cd94d39ac144899e245dd90167440d401e04032d7a8dd7ebc78ddfd8dbbc2a24c9207c1e9222e46642a19fb0fe584fa3b3a318eb827fd50cc8b9f999d038b6fe97c51ff9fbcad21b250bc0363721c6418ea5bf016bb45019ed002d690b886de62e208f3f03be639ef0bfbbc81eb1efc61659e366b2ac0e84ce3451a363db477637eac16d025e5524933cc5387bfd9c6eb1d4088f9700403879d342cf7400ca2585ea2a034c7dee9004bdeec33a207b2a6bd75d1773bf2f24384180222c33b6a533c0648f71d20bdbf8eb6e7ab34d52eb23f3505fb05fad33d2c2fd38694113f07043ed0a959fe4f44778b0975fde6c4ede63596fb34f5496344cc163d88cfb5f36f38db1a7c04c774fcf79f608158301e6947c9fda4e515d97cf77c938eb2aa7831dcbcabbf5ca4c6220277e1f29a40367e12cf52c690b3979fd773a5bda11b235111e5c3dbb9e700dafcdaa1e04dc2c87f385b1cacb5eaefb66ceeead1d7bebe20fac13e278dd0060f923f6d27b6464cea1c702f161f6fee155a7ccbf401e467d69e506066d8885c859f26e7d391aea07c86d17f6661d9faff11ce69fb124f62e0181343f27f38d1c5360b455b57c5dea80a6247a3abfa6b07237f17afdb8f117ecb9bf933ee8e66f37edd9dcef8b4d8428f0a3efe367f9b0bf7ee7f989fffcfc7da78e4200394b606ac4970426a2a4e9176749ec472ab689b6f8df5d64af156151f2d705e44e1af7d1d8ae4e6da3f7c8de246e3097b7eb2317fba10ab661b4924ebdd5fba6e5d989d738f27ea86d0e4277a331237c0629c6ce1d4e63d229d607ddf4e68fb4932b625cadd6ede502801312b22442842bacc0cc3be7f4c7ff83dc68f187a2f970590d162efe7953600a6b3c06353a2e545665612050bbeb2a4e75ccfb20e1ad653cb1837e981f3b24e0411ff4ff46674bbba20a0a9c89634ab58559ed9a51b4288cab27db1dcf246e52f1bee4bb8ab56ef37e57eb5a4afe9c81d32aec266cf7f95039e6e26be573d7f84e1dfcc50e675de0582af67b5bc712daebaa16a0d63a7060b30e42580743ee842a75cfeccb66ae187ba0109f6d3bea7b33cf14f654cf54811bbbfa751f02f397fb2d7782b05f8a20cc7dfbfe7ad973fab875d17ebb7bfd4eaf6e03386b7f9b0474d6e39fbb81ced867e151e8441476013ae36e073aa32fff01d0598f679e1fdbf5a427c36ed7933ebbf40e3abb83ce3e063a6bbfa3efc033dbf2ce29982088991cf8c9dee6c408ccda76a8d70e6e30efc61466782f6997a0759111fca253bd3567928e666ac222337152b09374844323b2cde3e3489179974baf4daa79cb59c5cac67dbc77b7bf77b7bf77b7bf77b7ff4774b7df90f92d0745b5eb606a91808f6f0768eb58ba6006e2be16e0d336814fce279dc8ac6d9e5eded1355a3258ed6b02004aba3fcc7909d94c0c46cb77becc3af35039a532d7c026365fcccefe39d7d5a71884288ee19c061dc8bb4d16b689cf1163efd1ea2dde51d0caa90bccd3bd44d72c0f6e2a56c1c74992daaac85b77f6f9514c34bf76872845dfbb6c788075e0aa6bb91dbc20cdc167742c2fd7eb4d2a0335d61d4a5b8075de46c7e71def58fadb48f10f65e76871ed8dc0b17c847534e4470b522cc0a1c0312771651a226c502e6fac1c6c834417cc6103793a9b49f8dd644fd16ae4eccb623440fb91e2211810fb2b391b062f68b220ba6296b144b9bc4e592d38c438fd2f4baca3474b69eb98bb642ed0ab22938073addc50fb3b9daf7160f4b06d0b9539b65977e3654d67b2964169a74ece5ade03db40f8fdea92c88ea523d89018e89690460d81e4aefbb9081835a83d73d3044907b0415855115f58970646b5dcf87d77a3fa555d339a18c7da8d513a789c80eac0512def93763b68c374d5f29e69a071ba31f64039d5cad7ed65b5cdd9f38e44525b26b01f27a70d8c8275d5cee5ef579fd0c9cbbe1cb9812c54ac370f79f53b7e6e0d2b404812a9f5aca79dc0c8b5baf49d6b9c4beaccc95ebeb9cec336afb16d038eb34d3da9bcf6a1dc9ed1f03d32585ceb263dd72dc1e898b5c9cd5d3a276d40f5b7d0c12dbaf2d865367e051304508433b1494af57dd5f83b74ed59ab2c0cf46d05534cab3dd34677b59197164c77b5faa75eefd477eda1055197f3c45ccfd3b43c5672f5cc7239d88d1416798abcb62dddcfb33f107b3795d1b2f5cbb1765cb2370c734c09e4594c1a272d26e96887587703f01c2cbca1ca26e3a1893079437e433e0f0b00109bb01b490c30f56fa545b9fdd1f22aae197f4658c31594c48a1726cbfc91304b005337738943f2ddcf4cbc9df7df5f6f927aabba51967c13d94ec937e1917b7a64dfdfa5a777cbdc1b7ef7f7e7de9e1f19e69169957ba3a36e957bcb5d7acfbddd736fb7cfbd556de97bf6cdb642966436e26846d2178244387815b5a67fa8cad625cfba827848d2ebc688c0fc32b3e696d140545c5b99857bf42c159564159393338481c742458ef01a937b9b97593bf74e1371a789b8d344dc6922fe413411e5de583bce4e99b34db4b54d35840a625e8df080f54d4d24a7658907c928ada9cccadbf93bfa4d4ce919f6916c5c6d262ed15defcdc691f36546e43d8fa8a87b6696b1eb27dca6c61e9fc3783fd1736a74c1414ecffcdafed6b7ee77d1256a96cf7cddecbe3fb9c74acbe8521ae9a919e77529b2fe6d4eb379949e21a634c9afb743b366475739218875aa62a4dcd28e229eeb237152846d8457c5486493e811c704a11d5118af63925e5867cfd4de468a7cbeec3d816d0e52a23430189babef1f82f534b65b81a5fab01f9740e2314612cd3e66f6032dd349328c7df5fbb7e16489ed3f27e12556d20c5b9ddc2c29ea229daf3db07c9f94b1cf8415e498fd68d9cc6bdb90b108ebe4ace53d7636b5337ff928b817b06d4b4e3bf6aa6aded33402874aa9842ed7e346d98b865e6b2dc7a8883c0c8ce8c3f749b9bb8d7aeefc4ef74ca38f7dcf14d650a93ddf6f2ea3adce9ceee56ff51cc93f454eeb7bd2d4f68c2f7fbfe652f6844ecb5223dbaaa025187a0737d861bbbe0641821860b2f56bd7c1ae68d2a1ef5c636c9722386c53e228af9308b66d9ea65de4938eb59b8eecb266f4fe6047caf1ffae28076c2b29f21298a71b9402b6d3bd6dfa2695f91015d7aee18622a02abe2f1f7f072ef604cd502a4fed7a9cb6d05937e2b1afd53b0db25b5fe246916535bd6592796aebfbdef9d6ff7e7ceb25d176f7f5fbee4319b8ab1b249937eeb9c775cabcf578916185f767de6e58f546dfbd3cf3f6dc9c787b7a6479916b9578a3836e9578cb5d7a4fbcdd136f374fbc5dede47bc2cdc68785f213cbdcf0f30675e56d1a36461a126ae49afa72b6fcb8ee656cf732b67b19dbbd8ced9f51c6b6c2df7dc099f3a1723a788ceabb8131801ceb3ba6d02671b6849cb805a65cc5f3edc3e10584afe4af0d6cbe7d13e65681d2552e11b77315718f65f8e381d314a0a1ea1f0fc2936430e4846fb709eaeaa1cbc94ba8183360c6e548056048dd5caa07c89d906d56359545c73927efff666b7c7003cf87017ab41327f46381e2d681d776814d9d811f94911641a7d27d5d796db2574b03864cd64f614db8970f3028034d5c5e8b065501b1bc7c5705c21c4bf3ede084e681b101a680dc80dab055813157d67c58deef613752c4087032b62bfc58c757049c74a6b471e03dc0d635c046cea58bf1edae9338f33bc7d43f8b63caf59d8f46d8aeee90b633147abd6e2136eef989e9c42c550cb10937ec6648defd03e0f62741607aed626c64d4ed626cd9a5f718db3dc676fb18dbd55ebe07d96887f22c60350eaa02676186a654bc08f206be5f25f2bdba9121ed6e9c200fe38366eb581a334b0371e49d9a026de43e290abfb49961f11a723071da811cea831ccacea4b566b6790a41bc168911810d24b896a733c33ecf6394766660d438c48a7c748c6c7d9a11cbf819e9f50b40e506a51ddb93833430d6a3611cf49be59a3ae491c84a8571aa88c14891f7a941d32f045d52fe8738001179a4965d3b004e085ff3cf2501c0e7b4e90a690c726d841234ab1b083e4c8267b3e3c23685f54861fdd719be370d0479a670f11c8a6a77a3dee2c514233093421880c3b7a5f4e60df5a37b7e3b8c392ff4fac2f76fc30996b783cd893b68197bc7d2051284d9608745653d458cdc485c030b20d817cf8ee9ee6c4b5d3904ada1319ea5a231271f9d194bd1f924332eeedd48d881be16014b3b7896ba0256a7a00b359c9a03aca46a23692a973859c9f88b6b4a8270b461d9da783188111abfdb8cca40c97ac7eb5c08da9d0bd509742df0fca2ac01038820c7c4eb6becc1503a38a6c0c4c1b7155410829bebe0aacb1b4b682286067e6582caa4150d0489be8781c81004eed03812127673ba27bc24030defc5ed9493cf60f697af3959573762c91a76ab4ec8ea5c2fd7be0ee59155097570ce62ddf601c76ee528784d8c6d270439e7e3330b411a20a6952a01698a94923b4f2de9e82eb3fbd3c03ca944d9db5c43433245ded826dabbfc743b52e67b10f5169319731c93334cdd82d98791a9c959a7d975cd84aef980bee67eb770032300968a4873be48f24749428704af69fdafa7c821cc07cf1b9aaf388acc5c7048f9ee50da3a26d689697203cf6be4f5abe7a13db7471352b3426fc58dfe9c2411a45c34feab9f0bfafecd8d2f9239a38d312d7cf6af53998081b8063316bd0ea5838bcf99251bcf0b9b266afe22aeacab3d93af88a39c51641df3f7cc117627679fb42a54f9d5fc41533e8efb121a07ee7ea4603b71be737974f6146357cb09d51d1997249e5a20692b6447ce6ce35c555eaa4b66bcb10496ba07968ee839929e71ad7858e8de4d1b21267b1dcbe17e241b675205a73ce3f7226741ae616bfeda85a3c867a2634d6103cce9b6f999b1ae7a199db5aff39bc9decfe553fbb2cb57bfa5ebd31cf86be05f6be00fbad6b5df6823d6e25ec9adeb0898a75d720612dd88efa19c0eafb3e302cc844daddc2b856a8dddb52ef9f019d34e5f548c3bd10945fd1aafdd8c342788405c4538538c2d4ccf04a924e19afb23f3a4a274ae4c639de98da20ff7514e353730b6c094cf9d2a7be404a95f73b60c7c041526bbffacd0aca1f96c21f66dd9f8850350e63b60f947c8aba42ae6c373f08e0abd04918bf721088c089802e100b467d239e6debc3c4fd3cf93eadedae496e2fb5e3fe7eb05737ab62a08815c051f8d0bfcc40ab9ee3aa06a3e7eb47d913cf717b52f92aacc167a923eefbb67aa686c6982cbeb08d6d8df5df606bdb6e4ac69e282bb9693596a23e4e227a9feb8a8cc2b00541acfb7740e52df26d9d3e3a564b85c6c972b3a22208ebe145e5e37527cdfa532b9075ca66f1aed89af8368729eb237b3dfdaf18b3556e08c8b7255775d54b22e8de76a434324d6e5b2aae51753ae695256d29cccd232fe7a86342b8a8009901b18a4e91069ec1fdfbbb4999112c777ebfcd75cecca507c441acbf3c6d953c45dceb6f7dd609ee37b35d6b986a3648c54ae446cf3464e43d362a018816d195b2f0752fb1bebedc4af217e4b1cebf61d9334334bce9de68a9ef8aca3f3241f5de524d49ce5bbf8bebb9401e3867e51be22fa7dbe746adb15632aa94e4fe72e3db3ec42fcbc6e7db01cc7ba7e79d7e5795d9ecc21f19f1bf479feda2b9dde6c6b50b9bcebf4ab6bda54ac2571c46a004f1a97ab00dc548ebf855f9cf335aabeafafa2bb3ab3baf33896551c97db89ad627fc3aabc54c7bddf82f7b3765f3600996a6423f5fd6f07eaa969b4de74660e55645b5a85be2bf1f102ece38afbdc1959bc6699e928a8c8672f6b4c4aec7887fafc29cf7485ad74ed17d3983d610b8a7979b7903063682ca9b0e3b5c0334fdb3486b2c4ef256d21bfceebda2ad69bad1b183e18ae17c0f24397d7cbcfd846b9cac635efd6fc7076f9bbdcfc9eaf1a23d6c5112aecbbd88620e7517efe52bb63a0cbf3c1e94f736e0cde33f65a79cf580c5eee0d11ff9960354abbf85ea05ae1d709484de8b14f9d406acfe213fbdc05a3d6e3388ee57a8f02cb091cc73edf0ea446dffddd20b5a7a7e747917f6e055223a3665a81d47297de416a7790daed416a857d7c07a8a508fecdcfa8008d9fb528adfe4caa6aaa0069c9f715559fb97bdf2b3eef159ff78acf7bc5e7dfbfe2b3040016eb3144aecf827343893847190888d214838004367d8f748897979050743e2f3c0beff96b409463f6169057d7540e9eb335ec63d9d4110ce47db1095b7696d0203a76d641483bda4b7b6012c7d67737eb3488e7596a5279751d281f801098a7b51b496fc052d14891232c7f8ea5bfe17782a6bcc7730b795520148f8a48e72690b7e3a5f427d5a504f41a38a6b105c3c9022a4680650e2af2deb9de1fbc639eb634310f42a89c724de4e423d1ed4335c4fa8dea639985c3692e00eebd399486320605602796042c7cc0119065a94e4c12bd5376b4481cac4ba7b5912af7e2fc280b4494d07716f44fce493fe4e62eb7be17d70f8d3305ae6a7e55b017bfb717a03598f51633d32ece3f05eba554a117efb7f038b485543fa4957e04a82ad70506e23db1bc0ae4603d4640e2b6e9115d43f7450c9e1e68b334e814d556bd55269121af6e6c53085f832270bd2158f267b12a35176457581f06582f8ad1eb2cbf0e17558bcbe66699f64c628029f87033cdcf5126efb11d042858fcf0ce80517d85e2f5d873f64da9eca501a85ca034d1570b9b93f7998ea9027a492a584a5b600266a4a85bdb14be278138cf522340e889b3bd9c0b42a563190dbd102ac798d65b2394de86e25705fb4adf99d0e0923d2c6f282d389de7f85dbece976960acb6b9507922a2a1b950715f5d7d7f29b7d581dcdec703b86560de58ae4b828547022acb926e71210320408aacd1ee0951fb93eaa36b8036da933da324c95c803c05ebe9411945f586d009c7414a6273f0ea2ed99bb60988aeb2791555b520f038394f0f4fe4450f10828a7e1e293e7209d0879c67aca788e4de36276fe170bd0001a281606a17af682b0361fb3a9310b6cfaec7a692e2049b00f80945720837d88713560930ad8c86bba5ae2d39afae7438eb2a78ff66f7cecd4d5a6402948bf5a2f3b0efca6a91c84a4bfdf235d399fe81ce7f8e8a3cdfe43593bd3d08c408c6764cb91e6c05eabfb4d7bad06a579dcb17e757cd7a56d874f9b9c4b2959dcfa4792d05ccc480e5b4492d0500fbd88ea6f3a2f950390904b08b6d247ca604271f06db1fdb44f67a7d553d57fc90f72f73671cbea6e4ddb3b1d53748358e448eb3fbc5cda4f1b9fb61706a9b8afe6bf04c0958fbe26c693c376bc1e5753231d450ecc3250506acbb5111b62b72e097b2e77f4c365a2438ebcfb9f82caba0dffe5873bf2f57098d76f677e137498b14528049cfbcc41e2d526796eaa406cae392672731b23889a57dcd9ed15b388a48fc257b56a4dc4fcec57c53bdc6fd6aaa31a008fb2f32b6557da27b79ac8f3330526a8fd171e7c13625b66bc5de6b0baaaab24f1af65e66a390623d7c5ecedd0d69fba3d8e6e91cef190306bb3de4bdf2f3a3a34e4c7d8f5a20fd956e244d5e73eff935d65b7b101d17537a4623d03f2e0cdaaa06afd17624a705810d8516649c03bccfe93d5b518037d2c3378168c65902b9e2790cddab15fe611b204c135b0f01020c7c440a9af19cca7a58555471bdef4ebecbeb2360ca91a79035983b4590ded6c6fb7f48eeb9f0b8f9027022438a859362cd995409aeb267d2c6b10082cbbcce28d7bd899df36d495b158d2df2ccf7f9be784e643db24de11ceb2932ae9676da048fd918aa3edc68541f223afecc17c6f3365d780ada25766d5e078d868567579ee971db27d2b224b5f92870710f791257fab173d5c08e93d8ab25209bfc5971edc395cb64f97525eb5411d3bcd359ff9a74d6de7767b9f9604fd9b27ba4ed647b4fcfdd187784de63274e6b5eec318f3df1f1a927f458e199bd613b59f2ee1f0033888f22df9271078fba1d982177e91dcc700733dc1ccc50b69bef900630547dc2ed12fc3c726b3d79e6ba8ee01a1fd168dfdc3536bdae96e8fa6a9c77b2eb3bf4e10e7db8431f7e0de843535a8076ed2925336dd7cd2d0d2bd584e93b70b9e0f96caa1deed4656ed4cfc95e8b4e6465a12b3dd7e53873abaf3b76d28e9919d754735d72f70e636d3b7b51d7377b979675de2dba96b5e8e8d6906e88bb135fa61af0b99274c1f5e3fac7f43c69ae11249c10f44cafeb8adbb8ffde33df0ce9e85ef7bd5392124cfe5ad60def21a7d79197b7df174d5c2615fb60b4bee44c42711736101258510a9bbada1b9b5a4e0ffabcb853ea88a63e936e854b3a6e7cdeccccde05b78e38f64c15d9bcbe25e78cb5a6e9e102e79cd14276e473226fb4667542a132494d615ceb0c4d796f9b1ea2697119ff2df1b96d9b1a4338793859c072687332ebd6d420267f78bed294d1455a152828c87167ec47f2691fcf9364b093c7d1c0f83ac9a7acebeab9e9ef062f6892de8374a97e795b18eb987767d6a3d70d76e6cbcb1bed309c87300da50388391ec64968e7c33aed461d9ddb746a6e9106b32fa0d397df133e8db279be9399ffe5dd0247597d61e7861f8570e44d5284573e6869aa10583eb1a7dd3c6f43129657504dda37814b0e628e97d8feaee44c687b36d014ca4c317c77a32f812933240e50cb9f50c2e5521e52af4a49f060266d20b607ccdec2a329b55aae08ec93c025b611bc10dbdd85107f0db460d4976248d214fbffbea7cc77e41d6ab9305aebb26d452aa6f69cad4873cddd40debb1cca6231795e055a4fcb90f457c64791c855936e2ea67bfab19fa688fb7c8d29e1133285035eaf3a2eb11f3ca7157bba610ee534fd4ff6851dcc17c65025dcbd7a206f5d6ebe80fc686198c27718887c83cc746d56d269af18f837b3ec3de7d8668f53cd735a8bbc4df489630a9b715f1ab8811cc2c058df2245dec2beddd1fd7a9d7a6db8fe5a862b64e22f4f4d37a51673e7c33dddf74f4bf7ed17fe6e1b389b8fa6fc4aef93a4fd585114baa5fd1e7b222f76c9fbb12c273c8ba2c83cf50496e37bb7cbfbd1977f77335b41e459516897f623a36e97f6cb2ebda7fdee69bf1f91f62bddd1f7d41f18aabe677a6fde50dbd9a6f013db6ee8916d191b67a89fa129efebda6fe8c5776c4e05e6ee5bdf8ea3fcdafebd2dc7bd2dc7bd2dc7bd2dc73fa12d07fe9e0b09cafc3de1b0b6e9beda8a952e14822dd2195de808412de5e34d11d96115dab621e44da8b440c57d7fb03b8ccf2572dfcb944ee573cbefb7cbcb74de4526329bdebbccc5ce85c02f5ddc61ce9d24cf6252bba548f34552e604b682ed056fa8b24978815269c91bf21bf279580843d9a6b60296c400f3a21f7362a7f447cb2b1b23fe2c1fe275cf6f0b9365fe48dc6f60ea668e7a8c7cf7135de17f2367b379451f7283cbee91215fd98ebd269f19be138dd78507fc784be42bfba15e938f3ccbc5ce6aa30b8c47dd12f99a5d7a7781ef2ef0cd5de0b2dd7c777f0129d81510547e22f23579e6a00ef90ab6b629ec81796a7077d3ebea91af97e3bc235fefc8d73bf2f58e7cfd67205f976e80d6a0a2534d2b1756d10f36b7bb15f235842671397e36b28a3eb7325bdf12195aba06f9efdb77ec004a050ae75df31a5f9fecd716d7e2b5f01463d7eedaee08dea23ccb911bc84203daa5d55ad23f261b6bc37bb4439dd2bff82c0ada7407e9d47564a3d774bfb9aff55fb1d6ee500dbd4066c05c401e41e16e9b90c2374753631d508fa6cee4b1ee3a2c5f75df978cf547770259434efb0eac5204ed15737dc91c57eae1fa4a8c96d51c719727608d3ed655a329bcdbf21eedba12dd08ed9a74c6324bc8c26ac3b54ce13ddf478293f864c70f7444b9dd190c0383f13831729af462b7ee4a2c5ceb619dbdd4fd9ed86616903738a1c64e4da91e26a4ae9b8a3d98c80b0783c64aa444ee483a1270e572138fbd6d97a3463d349e4991670a03a7e6fd09a2ce245512136056a31bc73332ce1fadf38ae8b64efbc247b679629c0f54a801455c395c05f15d87fbd0f7413b8292fbe9ddafe8737f7405443257ef5aab7b77a78b35235d0faf7cab7ab29af41cb822a07114c38743fdedea37efee1675efaaf38b74d5592e36cb1dbefc7d59b98b9f2709398ee9096ca78c9c2070cfbd4ea0d4c72741e045b1d7637bdcd3132bdc2e2517bf7d794eaec734b3d13c32acf8dc2e2747c7dd2a2797bbf49e93bbe7e46e9e93bbd8cbf7749c637afb94dff3872350d1060679eece22ea7496bd4b45ea2dfb7d39bab478ff1b234a4b0abab3e72548c16281751e09f8e56dca8ec2acf8105faffaa4e1ac22264d1a55c025b292337b06da4cc7cf3701295c1a29f212f2008d97920b97920497127a55e49dab9c507e8ef30d7949af8425497f708e69f0c09c62932802b30b149fe2b3f65258418e3914e540bcde0b9cba85dce8004d999863634e3fd8fce460f3a343554ad7e23373c5e2b2771d6f900fcde332433d55bbdbb62585950d864bd25c53435273dcc5c93c26bc97a96985e7c48dd73de180756893e1347d55c5bd0e397b4139d3a9395740720eb537c81b5b408b79f0670ce14ee7443cfec7fc73292a332d54648055e6d6d1be2a3090b70922754c74c974014d59c0f78ed1a52cdc149f9336bf5e4a1adebf9477fcf971a4f88c3794cedf96cf78dd999c9e5b418edd7958870dd70792b21aaaa1bd31b039791e733af202633be6b51044acef06da9b63e9c8e675d60de607bc566393a674491a91e819763de233d9ec86e4a4baa419b54dae4bb88d93d056920a2eac2945f6125998e986362fec1b2a0325ebadc6e9e31c12783829a4b4c95a90f925fcff4496621e504ae49123468939adb78e69ec4b10db67cf54778ea5e7f9fd491a7c4cd2970269e84afb44d00260d0a7840f534ede01f3f4d5b634f4d7af395e57e33c36f1dae89d52dab9c2bfcbb5af2d6a4fcfaddc73ae8b86333d34e725644757dcee24549ee9ee0b788482f6eed06048ff23e23ae9a51cf82010235a746ef0704820087b7c96e37d09cefe397f7e913e4716853774edc983e73f49b1eba6b07237f1be58efd06b698ab4a4c79321a995f7a0c5d42c3dbbd07e3430f636af0a71ff94043e835dc41a9e6ea2e7100cb4e8d59298abc6ee71436dc2ff4f11f5e58440cdbd619658f67545dcd9266adb1fa69fff4d8e2399dc6ba4104eff102ea500f2a3854d7ad9e4fa3b9079438478a462ec0afe1da9cee8272424a7ad9dd861fd04ed9f7268e367519d1188119c7d794ed3156bb4fe734991f77f6239e4751f92ca0fbc8ebdfd9f4315012ef9ffa4678d11fdb9c467b387cff7d0267bfe7dbd876c4ede3aa67668db1703db5d36f79c236e995cf7e42aceab0f15b482111b01f344fb4f50e4716873d7fdaa9a6c87dcd8568ea9d78535aff7048306f35cef03fa6f16ebca23e404d28b206b2e8da6de6abac0769a1b9cf03a2621651ef2eaf7dae2f381768084bb1e8f15db648bc59c3796786f8c14154145e4ab7fdf329da8e8a1cb915e6c5dfa5e0c1c4b8bfba8a4f6e41958535a75444802c8be5ea7d70d92f5c3d7e9acdb6fee5d6107e2012a46656f2f68e96c97757b317423b78777b6e587d0223d25c2d7604e89841479e57044df9c696f269123a464b17cd7a7f77b0b7b8398eafdde8150205ee72ee3cb64231da33aefff1cb98cf7846f072207661feb4bd2221542f66c556a3891b98aef77deb094546a97a6c14ac3fe8de44469387a362f7fef9a1e180562374a249535fe2feb9f4488458279d2eb08db79efd2db404167db54b7605e38bb254f5691cbb71d47a2430c3939c709f990a5cf088159dcbf2c7d16d615a616617d01f23645553adda23043af9f34e6d79047ed0642b2506b0f28ea0172276497a4ef6a535a253a2f861cfc1dceacb56d1abbdab44ec9fbc7bf29bcff757f31f5e059b11f3288a179cbf47975a9dec8330542ae42e218b2fe9592c1558c93fea643ca500bc1b0064e51a1132fcf6ab031489fb38c248eac09ddf7fdc496257dcc062f8c36d60df5df2fac34b718559dd79c595d747b075861a59e6ba793e85f0a436035e40d8d1aa858c99979f1dbacdf611a3749f78563b23ee0e6a96ea2bd0ac97ea8939bf4cc1929c6de0b5004396117f7e121cfbc8dfcb44b3997f884e477b71ff7c5da601f6803423710f710fbfefd663be907c9dc0da0ac6d6042ba0f4cb642e7335732fb3ed883c1d85cdb338c5cdb41b793eb776e606ce39e6724ddea981aaae8dfda166651ed9f56ecd112ff740d39d627fd935332d1787c894ffa411b8dc4e379b59b7daa889197b3735cfaefd4ce0196becacfe318eb63dea0fdf2be8eceda79dd6c5737c1928652044c10bed6ec816b22b4f837fd42bf3b0402d48b7bf7ac01b5477c62e7d0717c0716f6dd690ea6ac97656eae96af338990b0baf81caa3f336f04d38b631715fb8fac4d054c2f19fb3bf7640fdbb3a531fb2af9b67c0698425c9294fa9bf4ac26f34fef09faa4ac284c7327cba477b6d1f386aa5fe5ff5fc6a972ba7e4dfb88a7bd2f39c72444cb24ee665bfaa19cd4afe55e0fd0b61642786dc3298e79422e8d4b9212aa5caf62dfdda8d88fc3fb2988af4b88a0737d965504031db9413da12f650191d7640eb232abc031c9b30899703e4e5923af2da0e1ddc8c8491c1adb0a2d88c84b7b1e6e74542021cf4a9e48f94e4212385206748d66548e1a099069ee90cc876d1e17807bde91b19338dc7ce7f2ba00159a73802407c952b68f66f2f5d6d0702a37d52c176df6db4b1663cf918d82102ac6f915fb9f6681802f4f584d8844dbcc139dd706dbe61d650b743fb331216c7ddfdb86bdf6b5709f25d6eda783c7933c12d95f54f7e03d25f92eafd19eda6dc8eae97bfaa4dc8ee47ee79cd667110cb403d539da01d292bb33c909c6e7702b22fc0ef1b3e2f8451e0675f0cea67d457f9fefa3ee7102d195e9f9de72cdc95f079875711c312ea1f53a94aefdd00d44d62d90ed93b2e385c7f9a1cd2d1690f7f6e9775dc645d7be63f385e25f13e34bcb3116624e3a8306b97ea71b3afe2e632aca5e9bb2a59279a1849b1de7a3dc6f958b64bf1731b5783d5be9aaa25cbea37429fd6d2b9872c95f7de38392bf0416da45263b34afb858734bab2ddf6cb35e06be472e4ee3d17f27f60bd625e7cc063995c7fc2ae7fd9dba84be6b73a38e92bf9238c220a71b8dd93c178b1f1ae7aabe9f3f4c16fb29f6eb0663bb6c6841fffd978eef9fb8d7de31a671a2cbeb7acc17afc77e5575ccf1c3e3908eb6a5bfbddbce9025df531639db9dfe3bb341b19d3a6f296b1dedeaf8fd81a5ee1c4b3b17b09a4d7fd7e7efb4709f1cd6046e8c1db0d4d08e2e9e1549be3b94b68ed9a2194bb6870eefd19bc9394e702fa657d1cca3302f1d4a6e1342f09c7dddfc5ebbc4466d1e3bb3701599719a657e371a4ac80dd8d0e5b51262f2d2f96c1573a7d7b6ddaf4ce6d3d6be7339f1f947f66553af713a0ec2e058d7f0e23a6643631b147767f60a7e71fc2c9a6fe7d119fbc8a02f110a8dcb98456d8c229817b053f798058d595cce691b5de17188c176562e9eb48111cb00933d12fce98c3d7b43120b8980256d6d5343244f31acc13a5cee9996e77835c6afe4ef5aaf6a29b63e67ffd3589b26b8bc8e60be342bef137088ab2bf3ccad7d4b5dfa0e3f8fe4fad56d8bc674d57bcf1408fe81c423023db4399989318a7e429f43309dfd1ca370d0de7e01d9fd97af3382a3f63df3d4ae51dfbbe3136d9aad55cf49933f18cfc7012e4be4a5b12958fa5c82bd8ef37f215c4a71bc8c5d79ca7141d8704d790fdaec197abfcef64987c686b4543559cb3667654b3bb7134d46cbf78d1b8830a5944fc5ebcaca2eafff5a9fe3e91ad0f87a55f314ecaf6e7e482c9fd8e3a5b1fcf8acab65ec4d59c04148ea04e2067d59bd4faf5a161b188ae93c76f1addbc677deb17f69bc808111c90df9402139d9a486a28d4ea7f6c11084f8dcc87248cde741b7989774f44c75eb98da18584dd408e57e43eef7793f88b58313f619be83d8b6caf9de0936a1cd3c5cce5dd21c8d73cc413bb9b9dc63ed682d5adbca64ed6b7532b37087c6122a6835e38c5aaaa0d6baaa05fd5073ee13ed01af22972fdf272531a3e4fa0eb884f4371936a142b735e1d35bd2b77d0c3f7c8d0d4cea2d36c4378ced5b3710b75021f9055a2357b7feb2fe7534f4de80d98bb1c81fc41ab7a27c88dfff7d8d2d439761fd1adaa12b7d38b3342d69f40a1483217102da8d224c7462de37caeddb0b8a4ddd77aa6c5e257ea7254bea671c1360fd72952f7f2ffed2c9d74896ca57c9b88b7595594ebee4bd621c1fc164147f97e1312b300137c1f2d8961476aa2b208daffd0354f433adcd122368266391979037920e0ff8b7441e89ac176b66ea7c56693ea8c3d074a1176cc22955e9b4b46626f3cd52fc529a7fc2ef99d2b235f9155dce5f9733569ea5228245eade80fb05981aeb062976e90acb04b39c05ad0dc16b1aeb384233ac18357187e2789a636fad317d091eac96ea888ecd98425e6d710ed6dbcd36773a78a63e4df7674d7ea80c170f79633dcf3575ced93969edd268681cb13e4b72b249ed648c91afa50975a30caf3c5e4a6abc96473bceb9637b89ae5d5cc7b94cf2f5606b9bee87eb3beae9394b7cfa81f04275c3b41eb3ada0fdd8ccea04c8ef52cc794d5cbcc3de77ac2f9d71d833e34bb6860334cdedf5102ed9ac41f640ff368f7218c0a5642418c016f626a9adcdc5c8481eca4e9f2b4f67b39816c71a91778ae35e89cf4fe3939cb8731571dfe46bd267aac8554e84be3ba98519af063598e58e3aab3db555354563cb3d7b6bec690e079db73517eec6d8431abb4cea19ebf66a2a1b7959c8aff52848e57d0f1571659bc7e5c7ebe2d0711ec8fb2a6a637acd35a6622eab3e0c4873fb643e22db1436b1afaace8793e2bc28e23aa3abdbe1f7f9b06e217695794275e7dbb5ce2536c41658d385a3885b306ca80d51b2ebd3f5acf3ef146cc3dcb21e24b6239a7007a5753c543eb37c756a93a4f1840c97ffd3f1f78d67753b9f553a38a67e55f35eb7975f18349846d21be462df80b4652038d7b070ce72680b29857a9a8f4cf32d757e99221f1d2b3d4fff9ccdf5aff43cf56e55234479130668d0d92e950b9dd316b3f994d6e9d33dfca7ab187bfcd99413f790726a24d76e470acb96b51eb8fc23f92a8ed46706a3013abbbc815c64cc5ea8ed7106d6b421a6d2251e2c2118909abc46ac40492d449283c03a60ed981ae92088e7c24e6bc344551f90fa7c8674bee3b3d60dcd312d12bb3cbaca2924b616e723b8aca9e52b91fd56b983180be832dad636d1ee1db53f411e0b3eee5fc51efd94eeb64c461a63ea5886e410cee2b320ae497b35c9d948e2bee918a2dec288ed5b3c96b40321e107307ad83faff6670bfa8a6256f3dd0c15311a0dc29717a647ea312147e27ff918742c6f75fbb4b83e6d7c318ac193cef3b89ee006eb43eb2fe2fb267e17d977f133a8bc25365f4947c6abf94a3a3d62fd86753820fa81c6e04ea14df857a8dd0779fd0ddb95b665308e42da39ac12dd89e783c4e23854115328ac51fbb8a992ea910876f767e7589e0d439de4ecf1548e1d4b3b7ba6118db15f1b9c84d1c09f1bb2f4927419ad8fc112f9cee72a525a49ec6f61990216d69d88c9af536c1b3130227c4c21d8acf3faa651c7ce90f6e7cb52b280395a188af81d98bdc51f83d032fa35718feeba95ec4da207e6efd42d7271ae6deee43b2643f335845b444eecc7580f90dcdb7e34100e5e8b7c469ceba5fac59aa4b2893f4f739c8a11d896b1f5fa5fde545e63eda51b527d425aa46c3c53c6b62b03dae08d522cbcb1772c99c5b601e15d32d99d67e924d67b4bdd41f23d01e1739bba811138d6a2bb4f6ada595cddc4b22863bb265b5b6c1f66b6ce913ec7c7f2d9ae1e24f65162aea93dd157746ed3b825e81f736399c772c09e478a887508b13f6cb3b7503903fb59db4baea49271faee85beb3933d94e88aa564ccd7479a13b2c0c131a9fcb99c8fe839f3bc70b95de8627dbaa9a6b54efe926791584a6e6c09af1a6d23f465339ed5f8361df760db1608499ba0d9bcda3e1bcf325ba9ee5ec9b932a57bb5ee7e147339d412d9acadb775798d05966ab8c1255d71e1ba2b9d53f7ae25fbe347d393fbae522a2b3b6cb35cc4f3aa6a12f7e52d3898343651f1ecd08dfdee8aefbf7ba68aa062948e6d3ca3bed2fbe8bab378645b1e890bdec17c5d61123bcee372f2799cd2f137ea4dcafd84f794d0f21d67c0f4427cbfd759ab1c4b12c7277c1af9e755f8a6799e8515e5a223354f071890da775a83feb1bc64637ce09db98928373709de201b4f3d568285ca89f00f525e4ca9c0cd4379043e5afb9b3e67ea0622cda1323ab24d7deb98425dfb8feb7aeda181cfbe637a9f485a03535e43ecefcdaedac55db589b367d23acd51d7ce4b6a3b90d8bb4db91af3cfa2fe117e1f258e1bd6c8477ccf9bd0da37e89da3679eb658afd19cbb3648dff97d79e0b3cb3db7c306c8dacb4b87fce79cd5fe1c5b5807925af4dbe4fe13cc0953c52758f5eeb9dfcdf235f514b33152c8e7692c0ebf7bbb1cc66dd6bc093b527f26d4c5f9987a4ec6eb160705cec2ab960509bfd0f1ea77792eaaab7768e07c2ab9beb49dc52ee694b8be3e57af7ffd9b149f72dd9a21c3345c7f97cfdf5f8f37db07d79dd6337d7d3dbf78bfb56cf3405b27d896ce5eed87923c408a1f43f16fe2b86a2aebf1994e3967f17c603fec222ed0949323ed2be517caa545bba8b7b5416c4bf7e731b766c2598ded44807504e5bb4df0f3295717c5b0cb619cbba9cedbe438060a5ca68ab8b7b946ceb256f1dea6dab5ee356a1ac2efe5f52ff0f4e9992facf1dcd4e264dbd516b4cc3fe5b8ca3b8f33fedd255e326ead95b365cad7b616a777311ffd7658c9969c32194fbad1a2754d99dd7afdfb5cdef9825b36dfbab6ae7d4dfabcab79db8f6423c50b101c96a9d1f8fec5fc3a8a7c1e29da1bc9059258c37c0feae380a7c96ac2683f9e4b916072ebbea3eda9ab3813338e6ce3032d80467d29b04db4f52c15bd60f9e5aadab896d51ac9211c1a1198e377d5081757ccf7bd859cb001d66801937bceb29a88e2fe96cf95fc76a93e237a8fbc275ef33ff03a2b8819297a082ae28b8d6ba400df314fac1b18b3f81d5a6243af7e97729c3b148b94729d67399c546f63b9f05d8ef60648c7568555c1f3ab18eb51df0fc1520abdbeb476cc69f84e1e663cd7ebb6fcd3f3c0f0c1709d8fc3913c518aef24ba5b4520c0feb1b08a6ddbf85c4bf08d55757df538495a4f76c13714fbac78fee2f924b8f10a9c60a2eb979013b7c094af656408f0dc07f1fab4e644c27b8de03139b9d07702eb1927c7a9553536a2af4ce18cf75bf5dcc80c956fdf77f13809b7bc81e0525a398abc0714f342d6012aa24fb94be4c496d8415e4fea71733148f500791dcba65f55939cc7988f640d157b53680737300e6e447b53e4ae3d603bd58dc4a415fce11a27cd7213f41c8d039f8157adc1beb4c7759aa70de4d5d053fc9ab87fc99a91f1cb5bc0899163e96fb028536fb6a5bdc57834cdb33486fac4da9bfd323f4d96cd3c8a90bf017604cb4f276eb4386f1ed7e6e4cec800fbc6d5b6a04fe2cda486acbe4e87de9f57b16d70841cd665c2a6388f3ffc8cf4a1e21d5cfcee4a69dc7747c75316636da8c5adf147c733d2c321b5d35f4aea1ec6b39273b3e69a79acf7affcb2a18a6c53bff4777757fae9e21d2b7de1f271edf2dc54d9b3189afb4e65b26cceb2fe2cdf96123731e5adabf8fe048f356bdd17ef5926ed6b546c9f477c38823f015fdf686d403c57b4451db139e2cfc3b3a7c88c17fb5db6a9ad802531c0a47ed6554fa3fe28ee5993eb53147f46f4908292de4e0b93c532249d3d458c80a99bb9967ee4bb9fd9126fb3f8febaddd24bdfdb17afe41e49733c9e15c44ebdf158517814f82ebdf158f189e1b9de33ff243c338fcf37ec8d475fbebc35de736367bc675ee0b9a7e7569df1e8a85b75c6cb5d7aef8c77ef8c77fbce7825bbf9de1e2f2d47e31258e4645fd5daacbfc93a88c734638ff85dcb5beabda5a19ee49874d23678f13399f899f1f148ca4806692bbd389caa25ed76aa5ae625d7256982d82592ce786c9e79f2dd55c938f13387da0af2e438fe96850368aadc0be4ad43a81a72ae8b221e812948f30132272c850ad93977af3ab52015e5aaa95d53df23cf48aebf6ac7949905849ed9e67c04cd94ae32748b29ab8a341585f9c1cc1429b4f62a96d2e1cf48ab8215e4b05b12e69e4be03c4948357151ae4be2689b29528610c346b623ec6af5a59d6d91565171bb31637ff11c0ab3b026fbd180c5b246e1dbe7b78533d4197738791c47e2c6b1a67be7ec9fc9bec06b6cb28422e47526c6659668e959fac1dd4c0e403138601e0f2e873663538e6cce0f3dc55879432302a40de07a47c2860181ba1de066b287e6749585d58c4eadbd62b96f08ad7fd9903691fdabf4630c33b94e431259905579ce4e8b213f2c03d7e189649d0bade1dca8b748d2366e44d702cf6f0ca9c2ef12b881b88bd717bb3c47c8a17d42b791c050aedd7f8db50336f48693d80d31cef8ff3de5794f5ae604042e44c30f24dc4fe17390b45062111c68becbcdfff23527eb6a4d76640d87930b37ab2ee42d5de8fa1297b53c1593ead8516bf75dda90f94ddbae94b79368072f4035b0eadb86f85b86ced392a98fbd571bea70540a936a172e4ed3b8dd5d65129e106fb57ef973332d2faf99bb2e6508f4ec6458df6d82e47682fab69397cef7cdd6a40942f903e0793444f762cad5e56b893b1fa7afeaae4b610d3fbc7d45b9fcbc1f42a61f6c4edc92b2e46179f9a563e90856b7046a299f5208038f504b379740a77315c28d8e401d2da4725adef47eb939a9a79f69d94ead591ef36b5a5702bd4bc75a11be8ee1080cc4676dc5356d20974dd47c69ca72adb230d0b715e9b25672e155b5512e799f0f8652d330deada1358027ed70bf26d0976be8897fa8fdfe7a1f5e3de36acea7f770e83f281cba3e042eda6f77afdf3f1411adb84d1214edb1cc53a7a028f7fcc40bc2fb83a24ffced82a2f4e5cb83a2ec638ba828cfb34f4caba8281d76aba868eed27b54f41e15bd7954b46247df03a30e0f76690feae027064759a04dd3ded77501d29df9324ffbac360449771c4cb953d4fa4069d9b8efc1d27bb0f41e2cbd074bff49c1d25287be2dff1dc128fa7680b68ea50b6620ee6bb9a5daf67054f4bdcb86071874e39c7c419a83f55b8cb7a2e3cbf10b51ce1e8d7587d236eecd96d6fa52e7b1b687635a1f8ce53bcfe7e0989322ff116fac1cdaffabd0f331e6a7c2ef267b8ab6aeefc18ef623c54330206757b2af062f68b220f33ccb6a085d5ef7b1aea5bc075f9658be474b69eb98bb642ed0ab22ef5ca5bc677afa476d978c8f29307a36e1879fe3f37e375ed6f478698b3fab0b18b6bc073e3ff0fbd5f1f7d707d39acede3279d38ede9c60135bf0bc770884d1eb5bf520eac843bc03267b7037e8059f893ad3d45bbb3b8f7f1a4430b4f0353086d3163da23a7139b6e70e0f6beb366ecc05de549bd232a143fbe77d302047f1d627645b397cfec7ef99069fa61b630f9453edfeb8fd5e6bd90ba0a3bcb60982fe6039adacc5c85d531b40bd7cbf5bf05a8ffa12e9cf8e9f5b9758b879cf145e62a7d88f6cd3b3adaded90ca505d02377ddf8e7d57b1ad636cdbf484b24d7d4d71eb820fe5eefde93af759ecd2b788f660d9415e15e61c7a0473af7ff3b91a6a0ce4551f70c68f397f3af0c937f47bdba5eb5a5f1777bb33a4555dba7026765ee9195435a6e6e4e73da97431cf24a9745de37c4f04fda313419b37eff54329a0ab1b24c91f5610984ec91fe1997b7ae43a257f7acc13ffd47b7eeeb182c88bcced923ff4e5df8f887fe4b927be55ee878eba55ee2777e93df773cffddc3cf773b595ef591fd211c8fc79d99e17fcbc795d9687304b376477c835b5599dc2b8eed99c7b36e79ecdb967737e8d6c4e8d6727152cf636bf29f7b8cabb0f131625c5c8d813cbde7d5838734eb6793a3af80c5ce6bcc4b87b621205bbf266d28e65c6fa5bcc169ee870ec31d8a687d2cf3779a626acb335e40e750406e5e7cb6819478b86d2d6b3541fa69f91caf6245273feb694a0453c2b12bd4040ce7958f4bbfffa895eca76f7f6dd597ccc5129bb47eaab3cf37c275fe5917b7a669f3bf92a2c273c8ba2c83cf50496e36fe9ab90977fb7afd21378967d6ce5abd051b7f2557297de7d95bbaf72735fa56c37dfdd953488f5135d9679f2cc3ab7454e83e0f5ae4b162caf755faec6797761ee2eccdd85b9bb30bf860bd30448cbccfc52e2b93649544aa85493c4f681a2d3732c9009b1733b5042fbe4e78dc8f62f12456def5f9fec4acf8f7b32eb974d66bd9e9c2044977661f01ab88eebbf7aed7dc52e374a1d4691e9e630f28228b08f5d1c468e13d827517c667b9cc83f3f3eddd061242fff6e87f1f189edb5a47ba2a36ee530e62ebd3b8c7787f1630e63972d7df71aa169ec6c4ec61ed03ae129702321854a8f032fb4b175c97bbe1b307bc77cfe839c7034e8485b007d7d5b00cbf7a1256d4bbdcde479a9c5227d774c61fd6d2969c06457b6a9bd01538fbdc3d8aa504ea1cbebe3eaebaa12602c82a6e6638f06a4ed3d27c98919c2c063a12247df96041a9cdc73953d1b7b4322b1045e727c0c8006787da8a075dcee2e190bb69ef65343528d95f6127b7099455363b1d9961456c2554bbc0af28ce4faa5b4be68b1935a15941e188f8bf513aa52875281a7de423c862b0b0e7b9eb6d94bada0f1527aa1ada4d5f368a8bd41ded8021a30c69f31845293133730408ff9e7ba11691b4369d915990156891548618c11b642931684a4bd61305d405316f0bd1dda8694859be273a8e7699cc74b49a3ad75d01e04cf8f23c567bca174feb67c3e000e31b9fdba821cbbf3f05e1cae096d2eb662ed8dc1405e3d8f391d7981b11df35a0822d67703edcdb17464f33aeb06f3035eabb1493d68e2b5115dc0ae477cb6d7ddc82df70ecaa07cb1b57561b95ed1e9aa0cb92ea5bd4ee8ae63cfbbb0a639aaef996e68f33c6d792c0325ebadc6deba8a5c72bdb1f78693420481ac05995fdaaa0dbf0bd8a807388bdb0799c2da55c4106ea6697b7ad2a2b6a4f58b67aa3bc7d2cfb1558d5cd25a523f8c89b728c4f4cbf3856711eb1f817e6f31337b8b2927ef8079fa6a5ba45dfa5fbce6785d8df3d8c46ba3778a20e4924b9d925bae625cb5396e829327f0d696ed32d03870f7a3af93c54bfc3b4ab7ed1fbc48da79a6f6369255e985b683625d6e4e5b072b880166ceabaaa229a6ad0016daa0948fa9d1b3c4720e49abd172aff79ab299b4ac0f6d4e3ee7da94ef3d935d12aa7cce5e38a6803da3bdcd1967a22707d9d9514bfb5e05bfaea7398e4b512e394e98fcd85a4617ca3d5cf28cc4be98e63c551a89f8a3ced3cdc1582f3ccdec5c89656c9794265c2639137e2eecd18f867ae499f3e4dc8d23bbf3f47397d77d6f184740726d535f4aed842fcb513c9fae7262dd40dea69f91333e8e666c268f2379e7e1df527934d6462ef14abe5bfcd70f4b5e2e37fffeee6c77dff7ee6e7f95b4708edbb8b8be8d5fdaed568967fafcfcd8017629fcf6f4fccc30e25317cff4b9d7eb713d91679e7a8c203edece31a5ef5eee9872bd66cff4596459ae0e76292497c6a3aef14c4b2fbd7ba677cff4639e69b74dfd41df741a263ed657cfd218c8b159dba039cd42c52d25feb8b449a81d16679b36a92e5ee539e0c6a687e052202d47ed8d11426c4f2ce9b30bd1cd7e2f1aaf48d43369277280480fa169e0b377877d47b831b684432c3957149977b994a2e23cc6b6f346f5b13de5991ae3596a6bbfd43185c00d646c57b0b15dd729c33935bc979482635106ca94ad3993be6b854f5a1c4f5956d3b6bcb39d7f4e6d46b3059828392f637f2cb3471afcd5d2363cf9318e72edc5aed725df2af6b2658d63f6b05d8fd702d997ad85079a341fac17e95c2fa5aff34db16d63adbdabc847a7ae9dd65fe44fffecec2ce13edce8b42d7292719d1de3363facff4ada40d1eca1670a1130b503e084f03530d6890fee46bdc58b495ab7863000876fcb7c6b1a2ff4fac2f76fc309de73d8a7da41cbc0ba442099bb0df67954d653c4c88dc435b000827df1ec98eeceb6d49543fc85780f73f2d199b1349640fc5771ef46c20ef4b5ac459a7599a96b2e912bcdd29667e7497c296d0d18fb6bc93c147ce25c5ba9f9da7831f26ddc881f8c4adb2ffd5cfffa3f255bdb2c03d57e76731963768e34c84f51f7bf601f3de76b129f7d3494082d05f195e9e792c16a293f633e4673ed73b6284154ea7982cb624a391d5b6cad9bbe13f617b51004d827a5adb48082e7136dcb5b80b5cd4c97e8e15a8ee192b6e2f9b12c138485712671f28d1ae2bd0287ebcbb5c2fbc6f7b296e30d25ce46cf554ebe93b65e935877231d5c2ed74a339b77d266cc191a3bdb146ada5a7729ed95d699dd55fe57d2d6fbdb3c6bbf4a2852ae5b836159d07dc73c35bc6797526d690d3916cfd55f56da5cd7be3af96b4d15a0882150bacebda8ea83c9c251c42d1896ce3ba1ca79e12504d768301a68071808e40cfe83fe366c9863dfb3f4377a46c62daa6ada9076a620e0b0acb36d285dae7549de3e46446fa4baed85418329a36d6d13ed685bf5d8bea2636ea40f203e872287b0ae05fabb64365e47827c945a8cbb2843ade908f06f2c8dda626da83ce898bb510c7491ed744e11821b5dd56f4fb713babcc6024b35e6ebe38df5413bea81761cd8c573a5e6ba7d151d422b84d3503d78015a77399be7d96f527d92bbcf2e4fb7f51efdde9682c6e65504146293f9508edb46d7f39e5feb86b27bc4b90cc704618a82554e87acc5e755fbe1068a8dc4dfccecf3a9a17ea3f17cd99a47923a9d330b6ce3c08d1e7ac33539aff1be1c0dbdd05316093a32a3fcbaddd9b8af6c57de3077240e7ed9da7a966b799a9393c25a657e49790ee323baa64b6f860e6dbb0b6defa3427f8dc46ea3764d03b551ac27b0ec64762d6d63bba667a7bcbded9c34f650c8e9127206b4b8269e9ffa76a16d69587676ad6f50b54eac1ffb07893d99dc87160fd356a881637aac1b24fb5647a4b5fab0feacee46812573d8e7b04d35840a625e8d063ac4f477577e83e491f6cef2d2314fa13744314562eaab49063bb9a2721c0dc9f3dad8290c8ca423a4724df76b4ccf470bb2b11fdd6b61c374a3f2cae52fe74466dfa1676617f7c8f97ec84df5a9f7321a185f2784ca4f636c5320e3c4d7b7b281127d4b6918cbe6e7b673d3c17728a5efacdb7b8476a83867b7a128930ea0a2274ae53e95a503e84b586f12eab2b4270f6f44b1df7ec3bda88560a8f6a122ae9c16d45fd7efaab1762090f3dfb14234ee4be87548ceaa33b603ecd416d00e5ed262593921dbd45bd9c0a3fe97d3485149dc2bf3dbd36762fdf5bd10bbe58d250c0ce6af3b0f72f3791bcaad08985e79ecbb765d5404b8349692edf761fa79521d92c48cc218dbb5043329f24c61dfc62f68f057dbcd718b7d3d9e15cffba4ad74b58d1f9f75d5f74be6b5e29d9ad6a75e26f0fb56f46aa1d890cccebba631abaf82a828882f3f1ff331c9798ccd1829fe012afa19eb5c52681ed17c801bb089bfe1db81c8e62a886219296f3b0f798925584073ba809c909e9517b215c2652e57b82454c1f1bf8d12bae0bf26463ab6b218696e7e32ff8bf4a0d2b65e83fe2a54544414fb98cbef55e8efd67db08a85fddd62ad7fc260be2014cf9cc1014bc5be45e17e5897dad674615b2ad6dbacbb51b18fb57d9d49be3b94b68ea9f976d040b7dccf70a2991cd4ea8a16149ca5e3f90a39760739e14acea7b935c862bf42621bae3c4b8d4a2be3aee52cc3222dff7ff6deac496da44d1bfe2b6f70fa7aba2501e5c211df814521214cc98d28b44d4c7468a19120058c11ebc4f3dfbfc83bb582961445b97bdec70784cba025d73beff5babccbb78cbd46d7b73bfc58d9775240ba16aff54cff936ac5e3c29c7616e6b9b39056713e79772df9c7e4ffa636f1c735109bc907a947b33df24c515d4934feb686bab0d4e777d846518723cf5ecbdb34cf80ceef767b2ec2bd894e92ce2b7f3038b2d6cd7ecd5c927605767b141afae4498278db2c74451456eb98f78d012d046fa47fa47daa998ff1b4746c6bd6720338562a885e0a48dbdb7d3f8a7c2381a5617b23f12f51fa7ba86336d77992d4fb6f16a83b53132ed99c03e74626f2acc3a92b69281f24d1f47eb68ccce449c43ac0451aba1b4b933790df7266c1963074e550a64b158d9534743de7dcc376c0119f299636da9953122f69e4976b6acf401e8f707105e56c68dd4b74a6cd2c2a7f5de1d8c1bdd76b4b12858bd35643a8590059e26edd40dd67c082ea6d5f2c9f82ded9d604e6bb4ff2e2c73ac5fe2363dd3c9ed00022bc683dabd0cfab35e167e77c849c367fc0b204eb07915f606368dd952dd2c8faa89df9382cd538368c67d0da73a452b7643dd5cae2742dfc64794ad3bf0ae8689af664f2c1caf655815f23934396fc7dc93eab56ff7e67fcc30e54c6e57ae76a5f4791df3ebaef9cb31b121f4daeddb7fe9a34cfa2d227d02806b1b434a582f3b9bc2f5395e7648216007e1a491ced6c4efe01f916da6461ac57919f45417620ecb33433547aa188f6d2401e2902f895191a9f556eddd1521eacf9e57456ab1315c9746d86db17e5be1a1a4acee5e96c92e682dcdd7f521383db377e1b9c5f2f13565e3a9def6fd8ae9657a6661cff5eff5415bd000dc734b5cf26d91f2572aa1ed2bdc21752a617df80fa953ee7575d4b65defa661dfed8a02db2d6f38714b7dc3e2fae70e198e76ea30a971ec730bdfb0b5c9e1f57e0429a7e37f242afc3762ba1fad2a215e8334355df92b9f4577dcbaffa960fae6fb9ddd7fff6452e31d0c3d11685bda9bfeee90a56b66941b0e89eedb67afc4e0cf3b3a1cb8cb38e13ac1b8131902040d4ff9978f292e0771e8ca1e03ab5aaf0e5ba8f45600c9edb9693b1779277578231504025c588b7b7107f3624630a93a96a5c66374532154192fcf8bca718e6ba00261ea7098cd3f45701ccaf02985f0530bf0a60fe390530f5ce13de2b4ab42a75b4c05ea84a3ca74d0ca87776d1264bd53a08ab0ddab038694d2dd81b148944b5f3943136f3e376eb941df4066fb750a2f581e4611665be62ec4b9d3195c026650e891bd08ad2e7fc1bc320d629dc81e578fe7aeeceb768730ee6ebf011d679d9436313bdf3f4f4b99989ce30cc73e71d78faddc719e9a4f1c5463afb44818fc8b2cce72e9d950edda6b3d2d34b7f59e9bfacf48fb5d2cbf6f7bfbba9ce7a5875b3037565eafcce6ea390a06e77e9ccee42c47d3a5c8bb88ee4e68882fae3a45d836cbba231da61b37c9ac1b278d3046c82ecf1983be2e930c72aef5aa930df4bfa7d8cf125d0de6cab3b43972aaf07df35271f4055c8d68168135a8ca973ec8bbfc1aca841f32fab5b2c1e8bc9bd26fd95398ef6d2503de27b4d4d08637c8bb2774ed8513e665919e3ab662128c6111426d3d43d804dc1c0d2ba498e7f12f30733381ac3247f0d5df2a6a0505a37f753f123ff0dd8086a4da0421cc9bf839500f6a11fe175669f75c9ad01e282c1321339f1da12cdb3cd31d19e53f7e6903fe0794d7269a05eb5d0d5f36f812759bf065224fa0259501d3b2d6429a0cb31805a30953fd85c59ad2f759ef2b5bc7a080b811dcbdaca5ac566b5f2a6d85b5a9c7a5683deced5587407753cb8274dae28df3f773de832b6a8321ffd2edabcd1f1945fd99cfcc3d4479acd9d585b4b68ed6b720900bb7a67ea4a83fb28f30b08c695077963d5b93a8de6d9d684ce07cc69d80827a30c6734ffcc06391dac37afcc4b6116f6437034e8f2caaedcd1a5d725fbb824677a3cc53aa1b02bcfe7a3594b997cad32f9438d7153ec02acce5bae7385e6c79f267f31bed6d0476743bfc69d4d3f1937e400db01914e535b4bd6ac7eb0b75744c0c8594d02e162ce640febff96ae14e313e7e766656aa6e76a27e6bbfff5589fc7c56eed0085aec63c492f5fa9312e4097d4dcd25ab0f86373dd01d651ed409998d87ed5ba8ca1b968a28d0e6ea0f6b14e31e184a3a1c9584fa0ca3b330381b5879327e965707cadcd1dc3baadb7b57535fcee7f3dbd52f411ef6b0bebae6f9b05c5f33feafc38d82b05d99ab0370723cfe1d41743e73d8343ccbca6e6b6e1983fe45c813c4eae3c6f556a2213c8bbd3fa6995c8f887e73ae271d04e5b8b5347f977d59f79f97dc6078676bad4d7a924e3e9db5c6f676a4275cd31fd5ab91eabeab36da85ecc193e0342745dd35e9d4bfb485c19dad04fdc66f7e00461a9bca93d6b6b435140063fc1f3f2d36a4b29f603052e0eaddd0039a375f816cdce29b477da8a67073252490896427ed39dddf7ece7ccfef29cf5c8ab969310ba3db883b40f3475308dcebf06d80ad7e1cd6afc16e6b6ed3f6bdf7ef43eccf80c1b85784b9f7bcd3257fe9c7f6732f1ca48c7e2f9b179cbc5cf4b82a2bd1ed70c999f6558b651e232dbfbccb4b9ce73fb73f79979ea741e181485c6df1f146db36df63325343f749b0e9a3fbdf45750f45750f40383a2c55bfbdf391eea74fe61a9cbc3ef43aad4e582ebca52970bfb5894babcfe3efcc7a72e178dcf4d0c7042e21907bbcfc729c8df6d4e41cef9eb669ac7e893233cb8ab1466b03762dc0b4f1a9058b62490399484a44eeea5b0a6fb57ccf357cc336ff3fc8a79deda83bf629efdbf2fe6797bc6a9535333a871a5a6c5f7c7fc8e69dc04f0dc4ce404ea9eacbfe7321ce052fbfef65d65388bd4fe961a195cb51779c87f71d3729314cb365003531fe1f54e157baa8d7d88e6d6d44eab1996d90d318b470c0ae2bc9e48566099ec49437e6b6a3222b884c23eb3efc14f696ac20aff56e3fff56c9f877d80656f725ef4e3f326914f314f01a41a03ae2a3e4f23fe5969b07d7b633a07857baef165917188ea902fce99f8ed4c9273b48352096e01d88bf8dc867527801f008d03d6b30314e033681c801ee4c1d9b996ed57c4d4d4e8f3a2dd96329cc0c785a5c5bc0919799959df24e7ea19ef81a4d61eb8153884c7a6ee7d1ee067f68f31664c3b3a7319430bf13bf792384838536d11fdc0eb48223979fb648cf19cb743c8b5fb6b5a19d35e487daf6d89f88cfbea136c66295ec7d9322578560e7328db37826d8ce77c6d72eaf92687ecfa439e81e02cedaf009b0d8fab1d3c2fb27d88f4f405c1b98ce584ba92fa23d0bd0be6d3aff1716e72cf8f70b3b14e6dea8b05e0c2263a139e87d55e12629c4d84efeb901223ac0bc9a80e6fcae6babb39e119dd18ba89a421d641660b975377769f8dcbd456d2d0c5e72a962399b504fbc78b79576ccea8c318ceece50e2993b86ce27584e5c3d6e43a309676d063f09e02be62a26fc56779b4cf8a4ba0aeceee4837530e783c0cadbb8632b348169a6b95e481fa95380ed4393065a560d53290700ea7f816499e23f3cfd71b72fb8516bbab1ea7bd40b77cbbc664cf9c6315fa35d8e44ed0452eee07e8d8cac168bfc218015ec4f0f56003b7bbb93575e740e290785db36d4b5736632d5aaff83a620f1f248ef8691f391e11067b333cd9befb3d8bdfde740de5b1e0611dad6c4ebe801d12804ffa32e6c087c1599ada1eb7c1778ff7400867459f8d743e7c5d26cf587f3d3c686cd2b2c7aa72dbea317a8b39108c73e1f3086636e76df1f91cc9a2ec795917c3029bc314b15d88405f994ffff69256fc5d8ca5b99c936bc01f31d6b02c85ff5f2c1deb52f8f7c7c83f576b8a17f875adced020736627e38ecf87f231841cb7b31da80cf1853d1f4cb1b774400e76a1d4cc39f70e58ff750384dc730f6297588f1deb709e86b13ee89c7b64ff9d9f97b8fd37bcf2f78c05155657ca994d8fd555cdb39de1b6ce706725fc027b9b534a792aeae392b5d8cab77e457584ccc2185dda8f8f2cc3542ede25f1b309fcced0ba28c55b267edf9417a5e7c7f1bba80c93e89203a7e330d77001b7f97314e5ba676cb7ccd57be65d39b822d683baac8dcf3362cf05ae76c2ba5b820b1ee949e43dd3d4472d0d49dfcb6db8a48ea414cb2d8389b8b5d793cbebddebe8deb55f38067b9beb84aea89e6d0ded89ff850f0d4ddec4be47431fad4df2bd3faf289d27e310cff37111f99617dff01ed3d059124f9e11a83bc2cfa12cad0887dbe1d41d9623765bda7efcd8fd2aeffda8f8f5f6c7e6e0bbf31f85483a7ff90b9a9835e533127cada7cf9d67fa4075e7b7de678eebb0efa9de651f08b1455a5f1ca9ee5244aa3bbd36cb701591eae4d2a8df1591eac24b7f45aa7f45aadf17a9a6dcd0ef8c4e6b23e48a83533f882b4d65164b5c5b4dd96a15124d8b10c4b7a1a92b9e290a0c8954f20468258a9aa5d237d15a76c0d8caa9fb71009ab3ef6a6807c8aed8226ea7969534348ee3a5b49721021d23d1f7f6aa884253971943638fdf7dac719e764984f82d6654270c79ceb99b6104a3accecda2cd36aeca8d905d232bb280319efcce9cb609885126932ad7f6d24adbcc3b2ad9e2859da545d9027165434dc56cb9e6581d0128b074e11d09f2f3b5869b46c233404f83d85220566f1a55f38ad1ea7f2ec0d4ffebd1d7aa284ba137f1a7475d9379ce019039e7ce6246aca533d1885730be91a71db72570825e187bd1ed4039da1cda67d86bb6852c1fff168052555e04fe4ab6535ac68551d6ba4823efb9edf2acf1da2c6e51385a15d59e250cee448eb280cccdab2ca9d43745585bcbc882bb5884f50eb72f8428712030c052b01cd455c7247bad1ccdb94175a2a8ee8c3a64fe72f0c2c0d288f711989b557ea4cc4e7db81eb252083b133e6bf0fec3e7d058837679d8faa9af56314eaf3e9f05afab8bdc35aaca94fafcd6144f08ce7eadc7ba828ce09cac61cea3b7666fe6ae01a30a5ad9a20a88ff765b65669c0a99d075aca54dd89b2db177c1f205580aebab8da8bda474fd6416a676aa881432d7ed2bf7cad255913603932bd43f4685cc9fce39c3acbb5643238898610863f0d57b2babc99ea2e745ec2c587f90b1dcf0cce85c7145750f59702953c59a44a8a1728554d1ebaf0b4393cf765bae66e617948d096c5bc219eb2896c66e131dfbcc0323db55db17733c1753fe62ea0a303839677ee56a24a3c408d0ded047e56c3bfdaf8ba98ad787b037b9d9c269f33b2b7a4ea4f36499762fb9a80661cd5b185095472aa2f01eafee9fbb31b50e78a7b295381039e67a1778ef4b1953ab7a19276779c28c4d322ecbde3740136938f2ecc00536685b3c42e614e9e704e4847dfecac4d7240c6da2c7c2780724c285af7539b4b3fbfcdeaea82894889e00ac6824023c42d25065f05ccd03d01bde5c60d4396d6d0d45a0aadd8b247a9e1bc47346fae7706865d6f56f188da7a85e2ccd251ed9c8439fb0860e958323f67636e776a339cdb0fb920c1853eb7af67a92b21155cde1c0e3a5a1b935a6c5acbb584fd3c50e618919cac8c6ba4bc4260863abcb9e998d1c8a02d66d3cbbaa9fd79577d3645fc64c4228b61d0913cfcd9e24d912789d8bbd90e8eb950c4b58bf5b1ac0229edd935f998ab6247bc5eca7117f5797a36caf0a96c9481e466b0f41b5a32e259e5ee7fcf55cfede637e1cc5533761f0b8da475572604e643a61574d2293b7e348a2d5a783a111242567a83204c9e039de23783d81acac7a9f0119ca2888a3c6b8fd4ed0bb3845eb31cb18b97e4db24f00485604f9b7adcc3a117b6782e884e5776cf7cf163689f6499329bf72753843891dce9d50d9784b228c29eb54442e22d9b39744b00d16c634273bcb647800cc30e763948922c463991f8b75f9b92bf5f9b6a59d76207744018fed129fd792a860bb2cc93e8ecf5183449eb27b14afe1a5a9cb97b15f9e2145ab6719faa60245e1c6aef4213b07ce16f640e4215ed779dd75a26e166680902d4e162680182b0769505c995b7d169df6d198e523e5a2c71a7e776973cc215fddd0cbfb95387471da2a72cecf8cfcf6b55dce7a48a9a781fc52c06636b4d39ba9c96753afd0d71a54a6473e333af6299acad52c93fdc39e4b8774328eb2eeaaf4543b5391513e7e7415a6a6ae2cabda4369730aae28af1e6187617b14a299919fd639979f29f495d13cb2c5ea2aeb3294bd49a48bcdda3c3218dc7795313845781b48b436767d0573833e37dd1b643d97d87614d5d577a00435629db3346567aa50b175707505cb85831d28759988d4281858fed96d993135a5d6fefaa0fd8cd75ed5eff9f695bf8faecfa277c0e7a829d4a1f6dcae776995bf173262884d19b57192e85151e65eca560fefad9c872cabe4d2e07a2cc93404f6446460bb01ec20722e3af85fa26f619bc39156f2abaaca33451dfd359d117fa3deaf4496fa3e83b3563e38c16461b44728daa789ee0af67e59bbb0ad9ad872aa0799e6f1332a6db2ee5b5421752636b48a75b08cde3288f5a184159ca06d825db306ff2ca9603fb824db9037d735364bcc64cdf54207eb8b50899365188cda337c5db890f50c36c501eb6ed17c3e49c289194f79cf1157fb09735267ac22cc506fa4449975f3f6ae6adfec413e9ebbbccabeeea7793fca7ea2f2a3f18a6475ffa5330b7d38092511cbd149d9bb166344b2dbb10c1e5fadcbf18adc0b19ac55881243b617f56b6b072eb0008e0bd6d1781d7e96fa5df02b8e5778bd77a5dc9e3c7747e9fdd08faa75d7fb6bca3b6e9f597cf3bb2f6f82faa60ed4a9cea04114a3fc3c3f578fd754ebaeb1feed9cbbdfab7581af783ccb7d5a0dce0943e7b775fecbc60cb5347a595eb6d1b1bc52a378d0e8530d642bb916615de7d758518d55b2ef7e8d17051224a51f1befd54a3f37d6e9cbcfa81032d7db23e4b4dfede3a6985f5abd3a69d303f46a9e7b7d93fed1b1ab44c633eaebc4c76304ba0ad107a0425fbe65a1a66026a7eff77dfbae4c5f6f841e45850cda782f96c5d6e8f47d1a566a6add3abf876a2b3ee9fa19c2faabfc3ddfbef7fa066c4d00bdb86a5d58ba82ec1adda21982997230b81039c83cd843353455793b0fd4e18482cdbd697cd4d258cfe4d491526ba736665eff58a4c40628666588cfb5e8859ab0366768f03894c306c89534c8afc311326b58fee9e68ce71cb162fd36d1a139b42a45dfbd6b9e7964eaa351ad1fa5d933cf966ee273e6cdd5a052ed858661bdc9fa7786aa6f8b68396babbe1da8cce4e1e332c2670f5245c1b745359f215ff6a146396caa2fd693b749f47bb696b97c3ce58fa6a69ea715d5d6f81a27401cd69f727350f5de21cf1ac1696bb0326b045de40e6adb71b6db2a63aa0ac4832386f0f7ea93515ec1a84a9fdcbaa21ad6f87bffa9a8f8895c7df83abc46fea4b08d1aede90f47d947a1a1b9683aab4411086ffa59e9ffa1d5ed28504a6bf76fb95d369e96e40215ca38fc9cc2b90b4b626825d7828face4b77a3d31eb332bf93d24285aa3b2dfab72024269681e8d92fec7c8d585e3533ba7a93fb7981092e63ce7978676da1adcf3cfd70be85813427758a7533644418fce899f6fd3d49e33b8af55bf5f881e53af4fd69c3dcb08c9b09c41a159cc71fb38bd8d3ad6b42df7fbd0c68f22fbeb3163b0323435ac4318b8238f7649a3b3361be3a86f8d7266abd76eeefdf56710ed1cc763fadef55ee3c76ee2171376ee15d2725ddb68740e53ec858686aa91ba9aea3162efecd2ee4b3a597c740235b0f4c54fcf6736b41353a777137d8cf56e08fbf3d71cedf6a822771bd0f69119a0ce7b7d4a56559f28f76a0e65a542fe3490539e23d6319d349751b11e3255f92920257d44bca2c13e6932c699f65c4c4d669d409de035f20ff0f3de8e6b0dab00cd1e48d639a72e5d7d8466584ed430cd34a97d30b8d3c1d594492d4bd33df3242afbfabc96c6394347aab92ec8739c681dc8bb8f502121efdd1667f09da1292b12db3ec26fb68896110a953f07d4a4ba398a3e0393b50339ae1dc822b8790617420e768ca22089ea16724afcafcc581b755d71b6f83640137739a988a3e5f6c0c1f1bf9e649f85364a7d6f341b1adcb7b8fdb89f900bd33dbafa640fb99783eec185fa0940c94bda47f93e6c4363db3941ee1dc78883eb515473f80ca8bdf931e53dc8f1f779dc3e4612859539ac8ef3e5e7b277064439181b23fbdcb81612d88f5c112d33eba99b411bf24c51217912b52c4de4437281b7acd38e72c3c513b20397b1fa293299b1468c198ff5db66614c337331947756551e647e5c9778cc9cb692d44a9031e439b99f697b456e70e65981dd1e85863e79924458537f772c7aeb3c505e7d84ee652531cf5c1dfda3cfddc8ff54f75cf2691aff24fb84f8aaa8e4e33df34eee699047099fc487d6a49690662d903e2b075b13b6d5eca6f7f7d7d2ba1faf67104699f47ca71ad7a63e5ea85bdadaa2b234f4d14af940ddac99ad1ad9f5f572845a57ba9eb3da360c6564b4d5b3a9f207a7101d3cff7c97433b53943d275006546d6a14cb8f595debc6aeb1fcf1eca1421793ba73af7cb0bebf33b411b21bd624d3c5c5410fc573ff0fa8774e7d16347b07645ffdde89c7aedece78b07d61072a037e735646ee50add5dd9b9e7b718c8c6ecd35b435c8ba23b1312a1bf9ceb5d76c8dc4734ada55cb24d950fe903e039aee6c383acc6998560beb71e2dac5d1388bccfb76b51e800145c5f3e275139b0d5f5f2b0fa2b106ac1815ec2ba70d359f49bd1df863a62c96939d3c7a2222c8e5b7759635b80af7ad51f888f2c10eba8c13084b8b61bdb9c02367251f9c8022072779c64d0e9f1c33d65ea1257e9fa804e5de0ea21ac3354182778723cfe02a73e6afd7c2d1d4a5c584e555dc0727982dbebd7c8567d9a2eaa5f582a4b65a1285cb584397a8e6796b725d7c4f93f72d6daebb8fda19da1ada7f9b76163351b82458007046ce4287ac4fb071c704f936739fd019eb3c727c7669b747a568a805ef6fae57ddb77f33ed0df13c4e4c7df482dbfa783db959ed532c53ebcf1fd05526b0bf6ae45093f63a6d79f3e873c2d565e4ac00178c6a7e68f207b37ba4992e96dc578f907efd69ac37a56d74b5d1ced2e4b1a9d3c9f4ebb96b729edd6127a635a434675a141fc8f489ee1d8dcfc206b9548dfbcd64d7e5cf8ed7798e583e66209fc41e6b0a152cab997e9862b7425f6512dba012e7a6d80f53d546d0536c51ad8c115deba095f1a4b6bcf9df999f5c83c84ed646039b8e7a1d03465365ed34adeca7da67fcc5e0841d5e2b8f8911b3debc6e9f16ea5d8b2cf35d58a287dde011996db510fff0fa93c1e0001fb72d9e0e6ea2ff006e4d1d0658233dc6a6b0db6f757c766bfb7ccc1c739144766b07287435268fff14334147c8f4047f325a5bf5b608d6e77d137247092621d1df5dd6d4e506ba7b83f1a0ce1162bd79653d135b619b53e6bd0c29d8306ed767061b145da48122cc849130618499329b2c0cc089491814ffdb85711c214954b07d7c34b50ac6304afd23c995fb2503c9783c5006d6d91af8ec8ef204cbf23509eeb056bc07d25cd9c2b3b72687b3781ce2b33af603dc99bb99c8fe92df1316de92df933ceea2dfeb19e9135cddbeab75577649fd0cd59aa5d9d7347b8d22ff3761072ccc3bad61e1285f6b21d4015eb5299b077173fdedf87da36ecb30cba49fbda7c6a787db58ccd241a52318bacad8ac0cfbc90edca113f458a7421634c8eda1b2fd1e9fd75a8d13f05118928f97f58435fba1f56b0df28defb2f9931a275a9fdfdd7e05fa3cd43bc72919af867e2feafcd4eb7635b2d7a39a215adfec5d7101f0e9e27efc637d2946756d5561bba8e3ee0d7240a23aae78edd7b63ff5ebd4e70735f22bd2d70ad5e227d0e4f73fb6b6b4760de0f39875c5de5bac23298473a1ecda42ecbebbf4a2d4067b07c638d4eb6fa35845135be7c5e6ba2b2bc1744517491c106e0892ab153318118c78c88d520873bdee814d09d893d52c86c0321bb1ec31b9b606c22ec722260e621b3f63c3032eeb36c6cf77023500ecc74a8c597867d2f614b7f5c6ee5d18814a72ef083339fc6db7b3df43bca6ba1e422f678ca3ac6dbcc1d38819d826f138ac32e3e6f3683e044cf34bcacc965b038bfabc0a776301ae6fd198475c053558e9cd748e93e7b4959913087b8743295f0a456cf8d67752f2ac6906435b142ec0a3a0b128c3741cad759a7c549ec93edfd4260b733d3ad85382b11c33ec119f92b0b7dbca862a062a9a0727603df765b330458131a72cb4f1f1ba58190320fdda031fcd14fc473367ada2719f170ded7431a7fcc1f179d50ec2bddd76f7f5f1c1fbeaaf29f2d7aee5d90cbf27d3ee970883776f9e8f8b498217775ccc38d9b3a3efc9dfea8a2abf75a09c0d0d412c7cdce7074e000cd4ab719f5709d70679a64ae409bc4b11d59d4964cb4e1a28e073aff413dd33e70df023606f08b81fdd4b24fb67756b709ccad36a5fcef0276346885de4828f74d7e4dc7b237d915f627b3bc9ad3817c9d6e41d0b8753d790c35d73fe183ac19a36b4d3cee6220c20117011bd46fed7bf0dab823a1606f6d2bbe33ec4c7df640ebf47fe7092c72e421c10cefa82f30c7ce784dd99b04c827f17ea9f4ec8682b75be4c92b3de56cf847597ec852cd376d93bab6a1f68ecfa5b86cfc897c3243942df49dfbc832d2a979b3e8a826fb7552673ced79cd3a96e047352c0e29a19974636b62d0abea99da8f22d4d31d511678d7386eec9bfbcd531222653e03bc232dfc9e646258ce0497e60842b2a1f9cf508396d1ef431cabcf04ad6e1827e51e0f4fdd2b9d271f8393a172d7ee1edd8121cd588adff8cc7d386da1c05d981b0cfe3d9760fc003004cfff563da10e38a2be3d12bb8f6466f54635fb99fd43565f9eb9267275c0feb557cbee23ed1ac0f0fec40ad1be956315bf10c6c11374080839bc113fcdfa663d1f84e2ae334d7f3fea0bc812c7f5693337a9ab92fae1ddc59a0fb607b5f381b01c27bfe3ccfc98aee85fc9ee2cb5b1caaf34f251c7d96c61e6d510d4dad9bf0d53cdc3ecfbe4f7f85fde56a32e302ef0a9cc5e03f30f4916fe9cad9d047dd2b1bbd4676dff63f8b272f892874c413cad6133ae7ce620af877686f4e09ff242dce6476cca27ac314076e9a99ff69e28fc97c47fc05f1beabaa5d276b4ec6fb28c6bcd9615bcdc5fab218f15d26fd9e2d8c40005901bc4d537e89750d7c164b43b98bf52c3bb24beaf2de2c7db2b035616f682e22bc8ccf842389e4905eae7d4606e0a1abc804bd9d60973b6d1e191c0a6a7dabd00784c7f1e0729d82f5d8217904228bb07c20391919be17d1646dd1dcda786d0e5fa14edfd6d0e591bad815a3787d2d57839c4e0a9d35950bb36abf166d0de8951f739ffab7847df53e025fc196ae46f9be9852d959d0202675237fde4a9e093edc842f5666243c07daacc158deae0f69987b0f3e77096f29e1314af60ca95fee1e485d3665cd779ef99ff8527568f387d68c487d3ec7ce4ff5ae523fc22b962d5dc80312f03930db4903d3b387787df5ce92a0ee2dae8b6501558d442443ee8a29ba943871e57b15de9bf64714f6735dd9c4fc7a557ba9c9fa22cf8fb89729f4d8f7ccf51df505b077d4e1c8b3d732914d887a4d8649be05d59c31a44f1f538b548f81979d134afbe58330067332fcbd7af2df90375b1fc341712e8c93899fa9979b1859bc7ecefcc1acccbfc5f208c6b62e67746bfb090f49624b3e063f3d6e83f262e8bc67708899d3f26b51d47853f3c08aea057c9503d973446159c91d48b98f92dcaf6631d5247ff4da3719e18678465bb9e0ef2cc2b3b7c1f690dd1e6df11a2367adfca3664f2dedf66845e63ac90bbb94c4f2da644d291b27e8b126b7d84b8341da379f2fe033cff6afb7b7872bc00d213c95cf49cd1abc07db3e5c0fb832633f50411b2e2ee0b6c81773adeeec6afedad0d2dc7364df27f58899f67aa608bf01c7e587c75d51926b58b467b9ec5cdb3edfb644b4b46ae4b231bddd8bd2d0f5622e57381b873213f30b55fa051be5df10fdea1edf8e84943f94c173e43f83759de73748f91a5fef3f3bf919e0fd8832b63f7db03b8157113f9f705425f198735e4645fcc3f177bbbab38e8c1df143595a07e23445feb6981b96ec058f7187fce5bbff7c3039c45843d51f07f2e19667d1dd1ad88e6ebb9e1330074b972f78bec797d7eef79745055f75bce77e92bff26ebbe431f648ce1f42877bf02176c8bdf64743dfeac5d4588e0ac3a6c0ce88ee25be26ae17027f76f45d2a1b8f0b73da5d8ffdafa7f1f2ebfeb5922fb8791f9ae045e371acb9e61e1d1bf0466cddace34efbb918d1595f4a09fe71524757fa3bc43f8bf3cdb23c9225f73b713e4319fe72aacb14e5c755c7952ac6604c387cbedd8e49312f77a95e5efc8e501259e48a025e4f5eba9e18e28b4bfa5ad4fe4c2cc3e7b9574dd839a2e7bde239cee84ce45d4c6cfb2cdca5e0d9437e63bc0d489f863272d626325f360b773862633bcd692b0727006c8be8fb6dce9f10e3d499da156e8c186eed60f224f5a5e81ce08ff6503d1bda31f9eeca37b7d058e61bf157f4b09e9dea97d16fad4fadadf563be0e5b5ffea7f5c76ad1fad26a7d6ac95630c77ffdeb5f9f5a0b3ff4f6f66fce26f87de15beb7077b47e04bf5b5b7f7e0ae7eb9dbf59efbefcee6cd67ff98bdf9d1feeefb6b59bef7edffed81c7c77fee3b7f49edffccd9fd665ff634e2edefd76b602845febafffdae07fdd7968f96887ff5c9306503fe5536be75fe6ad2f5cfb99e33eb5828d3b6f7de9b49fe1cf3f431f9ec6311cf31f4ce73fd8a737b6f3a5f3f485ebfcd663baddeef3f3ff65b82f0cd3fad4f2777fbafe8fd697bf2cb49b7f6aedced09c97f9a1f585fbd492d69bd617b6c37c6e7fee3c3f77d86eafdde33eb564e4af57ad2feca7d62bbcb8dde698a74fad99efb6beb00cc37c6a89e99ffa9f7f6e2d97697d613eb514173f98f9d49a665bcfa315e94d9785ff6d9cd5aef5a5f3fca9f535f403dc9ee9dc697d61bbcf9f990ecb3e773eb5e41dfee6b9dd6bb3ed2786f9d7a7d66bf5a551bfe1d23efda5fa9f7feed7fbdddc6d7df94fe613f389f9af7fe135e2cd7fc030e1916bfdee6d82f9ef5b6bfffb62f3fbee87f33b5941a5abe766f1b43eb5a460bbf911fe61855e6e41c63fbf6c1cf2fd9bf563310fc9dfca6613fdf56a858ed7fab2de23f4a9350d2d344f2614fea7ccaddd664dae1537828fe6bbf86af2e2e4bf2ff36df2f7db7c175e5d8dbfbabae375e3eef1fbfea715b59e62ff4093fd75eb4bf8633fff74e730425f5e37ee3d33b0d8fc166c5c78823aff81bf6b7d69b1bfb11d90005be8482c1ee8fa134dd83b04c3bf3eb55c2bb45a5f5a7d9f09c793ade78848cbc865fc7f34c77a77248f233ecdad7dee71afda08b9e2e0d40f229939886aefd4f43c54481d71a4436e4353573cac331be083c0f614d603857c9c43ccd5c88726a7eec701e071f8ae8676a6a89ec7013a8cdb699d9934348ee3a5b497b12e019c0d429a03a1cb8ca1b1c7ef3ebf77b5d30ecbf0f83c31f42d0bf63ae18abb8cd72926c038c8d9097b4b7bfe06e71ab4935f47f552d9d8f63ecfefdedddaf80c14f338dd1687f6f8bc9a9077473c75511e0ad8edcad8d2baabef3ecfcfd7ea99c460ccadc964b01486fcced5479efd72db87e8dc020c58573b79cef2fa1ae71bf199f5e0ac7fcb709b43cdf2d0c4baca2a8a8545ba24c42a8157565dca6f06e7215b1ba47a66859d6be8fc36c93db8ce7fbbc5b25dc33b527f425a837d65d313be7379636aac17e3a182fe1da8493db55192db627306e090c67ace18ebf0fa089e9da91fc6e385bf63223edfb51da0a7ec7ba35c9038bf86c16bedb68600fc6867924f6f7af610727533be8411023db8cfb3f63aff9e18036aecf3b2dd1e453972cf4fd7b66e665f2e6d8e0d5dbce786ab03d655dce1686bac55c66e8f2e634e416ea0eec66d796b9e59cf09e48da52bc8682bac13cc0e78aec61ade7f26c47fc99e6757523bcb95ee14d73616d9b5913e951f935bfb74c4c075097e71941716f57f969b53887590b530555479968b1792355030df649ee15ab85eddbbc3d7bd2410fdd159c731223cbe10e785b514e53711bf99d65d39626f6baf63dc5c796715e69a42fd4c68e9ca25d29b91d35620763ef6f91743ebeeedf604b070dd240fb9b3986a9dc5841342533bbd18ba8cfefe39c7f3aa5ec61a9e1be5323a16db0a45b6a9ada98ca1299e2b0eaee7bec296e12f8ea82eaf6d98ba3a0622dbde51af5c522ff44e3eac06980c54318e25b6bdc8fa1776334ec5ffafa8e56c1223a0a9376d842d00f11fa7cd7b06f7b8e7d2c61a6a7096c2f83c764461597e1d3577cbde619bf3fee7cffe88a3967c37784372c4817e9bdbaa0cba6f521dd76874bec532eaa139ec149ce5b7f993c2649ac9434dfb302339b94496e7b014c93d7535524df1f529ebaa2b7240add4c70dff4fc67908fda1ca1f688edf9ad1a749dde39d793e37cf49fb93cbb971cf765b3d2618f3949865f3a047992bf077f383e77d7615b5a4993634c139060c91da58cfb54c50746569f66bf709700835c0066a8aa54c8fdb5750f361e4630a7bf2ff84abe009cb352abccae618ca69bee38cacdf3bfb30bd7e4ea63fd99c4a62ffa59c0994f5f81f25279a61f3d160118ea7b7634a799653d43fd0f0d893cfad2c4e79eb13f93550becfce3c9c9b511d17eca184f33d970f7ba4c2d434816f425a186df5e28abd106239c3916706e6d6a8cb47fc753635ebc3afb329fe7ce0d9f430fc4c3883aa74f004efb2bc7e9152bf663d885355e6f850f04c37ccc328e1d3bd27363c287956667dcbdb7940f6ab31e53972dd6c616b3d166c473a1cd783d4ef71862e1d6c11f9632ee29ea088af37e6f06fabbea99d902b98077ba886a68adbaf0e27143c25b7b22be684507ef2f8245c14f43548d4dc6a66087cd6f7d49a09a60cf766ebf622cc55fcdc782cbe89b3bd79ee403e941d289e13287f4dde06f5dc5a1f544f55c6e75d93639060dc36bc8fb361cdfdc43af6a1b975d60a6b68a7efa6ae00d6de637c2f9017b0b4530ef89122d4f233ddfa1320ff553e24dcf30c1accfc740d45ff077d26f20b90f79e13ac9ffa7d30408c247ab1cfdb871aa6a17c00be810813531a46fde87fdd107fc66c618b28b474c05e38d8fe8a16cb94c6cf44850556c0df80c738a33b92ff676c2ccdd2478cab093b6990600b3cb2dd3116e41b197be5653a53a68dfbd11fcdde18e58fef7e9c87375bbc45b262dce7f5189f176a990637f34d81d38b568ecf7be61a72443d88454dd9b466cde7b9573fca35c4e781a8aec6801f7cdbb7fa7333b1b1e0faac0e9fcabf786d3d32e76f7291dfea72fe1acd6d8cc3f9beb915a21c7194930b556b36c1638e71feeaecec0fe0152f9265f76353603b359afb9c5cab6ac3b070dcde8b099960abbe3326d0c8175376a6de93ffa9943c2bb3ef2e58ef8a71bedce83a49640f2ee885f5f282e0597f3db881701e73a7ade1f762acddc7eb5862a9de788f8e3e2ed3433e787c12fda701b60425774ba223dd331eda1bb937e35388ec309fe7ec782cfa1e1a07ce1eea47a1e67fb4d299c1e95bad4dfe5138d591cd83aeec921addb5d49ea9b9cf0d5858733fabce89021bbb18bbb624e7d4688f9029aa7b57449e2dc808ffbfd877403830b40072fc4b3017133bbd2447f6567f2ee9c3fb70ac1f83d748ceb1c7f09c53e9a88d6c709165dc07d67045f90a7b0a5ec6c7f3e957e3b886d0d7aa586eac13d6e790d7f89952dcf8c7d875f578fd8fd7bf2a70fa297d84f59c838d6a0f3d6c97d4f2d736f695d363137f640c850683985efed3ce7134a6efe5dea88b5136c909d04e0cc921acf5ab3639f7634edc473ef348c373dc48160f014b695bcbb3f3785cbf94f3b6dc8747c3a31a46fcb055ef3a3a811a58fae2bd76d4b6aa4f747b35cfb5f11839251caddaf3b4b18c8ab154463361e4d901257779f3b837e53e6932c6d9f6e4f8a3ff011cc2b7e35a7f0f359770036eed46b1ee1bbeb94772fc63ddfcd19c92d6bd71dcfe88b77d7e34eb47b5f543796b07eece9cc2779e292a10f31ff7e1b79da5c9914d3deae2fd4ccb65aaacd53de08226784251eeb7282c2d4e589b53de33381939c3c9c2d4106389ea597a9984c61a31e6f4eb66aaf29cdca7e455147b67e965c08d35dcc6d9e2db004ddca5b18ddb8ffb09f5e56b9e8d7d936f418f31216f586032eda37c9f7230da393caa1dc14255cf201322fcc1689c9331954401b8692568df043001aa63b0f90fe43a689d058c8d9f7d2ec19d7738353420fff4355d4fc35526d750589943c8cbd85162fc401eb4b556092e25e4d0ab7bb3ad6c323943fe5c57503cd6df7ddecbce85c39db60647997b43ead62fae8876763f8a5fe0311c1a4ca6ed7b892a6f28ad018735d5041f861623bc915c448fcccdf908dd2bc9f79990fcf4832d9e503d1e72d37337f20151c4a2efc50bb300c3af01b7f53d5851cd3848a29c0b6857931c173a9c5a621702c7e907e9305b7bfdf17a06a9f14fcff7467da1f54b033f20da99a2ec398132f838ddeca378afa975a5eb39ab6d83c3a94b571fa199d83bd761638da77cdbd24e2b8313cee680ae4d4df872129f6fadddd654fe083b7790aff77bf05ef9587d5f8c70b53f08c7dbc1734fc5f3d438ded1cc7793fa2c68f64e0dbf73bc77a2b1ab99436c4f3fd8bed8c73ef519a732f539988d73c2e3381ed59a6b6a6b9075874243a3b491ef5c7b77708d8571bb9aec356a9e3112c39c3841af538bc916cdc36dde4fcc3f04cf3adb81ca98bafc3dbf1e487c73361c1de6c35562b31935354499f7728676624d625f5d9c98ab99e8e7e08f19eb584e7a5d693862eda00bb59b80db34e51953eb7af63ac719f561ba99c1f5f6f69a60b4bd69426726aae709d73bbf0b7373c07a73b180fb79d0e5555223bcc7f31de18c413db01308cb622c9992cf90478ecfbfcc8419eec319dba8af045f6d676a02674e63fb0885960eb86e21e12fe9ae2411adeda077a6cd85266b4f3ed84197b4f3cc8696d6d98e7d7e62e8f225c691833372ca1e617d4eb18dfb35843ad1cc7d86be08f15ec7df3b9439e6a4bfcdf5aafbf66fa6bd0cebcd051eb8ba9ccadcc11b1943a72737cb05afe221ce7ca2f8b44af6d703cf8c8bc32d1e7d4eb00ea79edf4474a13ce3297266727be44e2e4bfada8af8731f6671869f9309119d4cbf99bb06e7d93d7622751d42ba87b27da294318dcf42da3cdc3bfa3d9e66d6658dddf1f8789d70b42a6b91e59ddd5657b31443a42a0eb3aae2252032056c83aa6b8afd30957d4872e5ab9e7bad83565d8b65cf7b6349099ffacfccc9b36830aa3f28c7deaacc317b74be7b8285fc9018b1ad099de679daac37ef67f05fc4123dec164f99e0b7d6e36f67787bd005dbeeb6d86b27fa8f88f5aeba3abf46793621854ff516bb5343fb048b1db0ecd1ded258d69ef27b57637de0d4e18c34071ff87ad44b766d51acd903e0c9137e0784f575acbf17f0bd3e6c3ca8f11c34a153fd7b856dde144bbac26f5c50ab93600f635d5c19a893d94a7d99a88aa044f83e0ee71d5cedb492c42deb44982f26b68f873c322bf03f2963e17f4b5ef2bf870ca4e1a48ef2044bf32b93bae192fba35845096ea9a92bcbe2dab6d27188cfeac80f706fae6622fbcb7239e3755ff27b248fefc132cdeec5d588b50365576cbbd3ad599a7d4db3d728726f2b79bfaa759aaab5c6c4f846b7df9760b866db3259ab7b533ca126184cc5bc2b75e39d9ea5857341a52be439261ae1e96431590b3847136ec21bfe4db50378606db929c768b6ad9e9de71c2de490950492a31063be116ed36a7906dc7949db9398f82d3ebd384204174d3d9a80a7d85d43de42e67b7cc657e791e0f67f381f6a86d3be10b3ff862baa465f2298fefdc2318f31ddaaf34a9ad58697e162df53675186c59fa9bb3879849b02b83cc91accac753abb3af37cc0ea37cf36c72c002b23e532213925410f726528ea5102bb3d0a0d7df22401aff62c84363eb4f603ec10d23e0a1f51e9da3b13fe3bac7ba9c3116b4e8f0b2510760e37839c1755ebfeb0835edb6e502b4f19a3257dbd87ab13bf679ab63be2468f38ca09bea9a94d7692909cd5f1dfc8ecd7e39b4809373ae143578623cfd2bac0871e71a347cf24f204de1571a3c7dcea49cde743f9e59bd4fb9470de56ae412691a73535e6d0e69f55db938de1bd8bc3689572a117c8d6e41dd2504626c7623bafe6fc81fcb5d8365e46bc2f0417a7e01c7a0c67114d7effcfae45a1cdab27b67793397c23dc0205fcab05e719707ef35b3b88f2cfc484cf77476250d53229aafd679df5086c7cd80b62062ba8ec9dfa6bf9594383bf42c5f10f7ddbd8dc6905f994f93e7a46d063ddcc395fb33eae39992bcfca4631eb06391286a6a43aa2d03c7ed13c7fa340c788f8cf01175614b6f63ad62d72b662c2ff1ed5de2fedf6e86ceaf211f431ca18483d277dbe5f74f1815f3a57340e3f47e7a28d9795e1ffc5b9caeb88eba7300780f86aa3773d96079cd2ee8f3f557ebd2bcef76bae33167221c451373e5f719f68d68741ecc07da45ba55cebc3b44620cbe5f9bf4dc7aac717cc70defc2caea01c0f79b3337a96b92fce87b74584751fb0f79d60b4c57bde59aff2fc3067f83dc54c09c26d655ca29e43fcc1f679ee7d17d85f6b75e90ed5737c1647dcb2a55cf035b2fbb6fffd1c8ee6d6d6f99da9615d34c2085abfeea501e45d6ded604670fa23ee72bb5d870b9119337ce6699d85a5752fae28ec0d6e96e5a14ffc31596e7ae22f88f75d5d7e147fc1fb28c6e4061ec6b59ac5488afb8d2471e41159d1dbe3b5637058d710b6b6cf5fe658cfd2985817abeb1f2389ac6707c21aeb649220039779cc4b19e33da53e23e122895d646a2927a334948fa6266fcd002deb746cfb4c38ceedb6bb2f5a8f9228eccd3e1f9a9a10732c1e9c00e43bbe3770b5536069c705c1c2079ca2adc33d5217cb71f6539c5914ba6a726dbdce9a910bd57e2dcabc892bd9917256f6a156a56a1f81afc0aad2d3ef1de3643c4ace8277e5d6953c338b7f270aa43e08740bfab1bc591f3ee4e525efc1e76ec4ef0018cbc99e8158a8b0b7dbca860abb2679d79dbc90f1e74e4ef1b8ddefe1ab9f25f202f8f67d73cacf9c35f094888676ba98531edb04aa1d847b2c0b68ebf4eecf6b2263413ff6377b7586df9be98f67af116389503f57bd971aad2f787e94a37047fee307d704957188d2b4739c7276d2e55a923e7d48fd51a3dc305afbe58362d4f57c9399f9a9d3931fadffc63c9415329f2286f316f3ad67e2672896d7991859c2f96a734665bda1a9cb30b692d8656d6d84f507ac3726987676ec236b9893d200a72769c384138e86266fdde18ad60749c1f1428def71cbd7fe5e8e921b3ecdd2fee76310292769de37395436863e59189acc38677e676921c23aad85ed21b177b634d9b3fb1439f08453eb6c121b21cbd55d18cb733958538c351c1d5ccddd8c7d9ecfe4222caaebabf1197fea429daf98ab5f88fcad02b67d0ef83946e207ba6d83d35697d806743893b5c553653eb6ada135b65972bcec99f6c69ced96886dad0f8fbb26bc7e457bd6cdceb5d659b89cb7352a7234e153c2676f247509703666eaadabfc824db11105e62e7ce5083335f29fc1ba3645e0168b631b2b17f8af9f4b39b369ce4e55f4b0febac4f6a71180dd19da6d133fff90e1b2db9bba93975167de73f0f5d177d55cfcc9d8457e28b487384dbfc0df866d6ae1b48faedfb843e5e85c368731e76e5dd1630dbfbbb439e690e72fbcc650451707cff7f9f9f2fd6dd1a9af93ff59fecafbed9287d823397f081dc7c087d8213f8997dee1d410cb8b7be2dab3e8dec8d774b0b559f2bc8c6cdc4911bef9ebb4731c2fbf3ed63fdc08d75ca8c176b84fc71ea7fcf0ffa47cc6ac2fa5e49a24be5cf63bc43f4b72e4521bab944b9d36f7b0d8ef581b571ad660f0d0e5a915e36c56e8973467383d9e019dae9f70703c06c7726773c26a12083b43eb2eeb6b811bd78e1d5d6db4b33479341bd0d76b7d24668233547d5b44cba94ae25a8faabda3ce7b177b9e39187936f8ae69f8232b6cc45a99c72c0cddf42cede41901da59bad2adc67b4d38989ae7f856b4653c4de3f657fd0db37b97369fb578ac992c3fe9b7ccbb817f34b9ae685c8739cee993a19d8e963838e17b323a34bc2baeb3fbeef3dcab26ec1cd1f35ea3bdea70ead9c5fdf779c659abd1dae2c17e823af8f8fb7536ff2dc6b452903928e69496fce83cc9f04393efae726b7dded6715b863263b747c814323622f9edff6b7d6a6dad1ff375981293a7ace3c05a4ec153fe859a9e7c750872e4e45ffea7e5afffdae07fdd7968f96887ff5c93d7533ee3538bb0fc736cbbc77d6a051b77defad2693fc39f7f863e3c8b6338e63f98ce7fb04f6f6ce74be7e90bd7f9adf7cc7598ded3ff65b82f0cd3fad4f2777fbafe8f84e27e7786c6bccc0fad2fdca796b4deb4be74db9d6786eb74bbcf4caff3f973fb534b46fe7ad5fac20263fdbcf5a5dde698a74fad99efb6beb00cc37c6a89e99ffa9f7f6e2d97697d613eb514173f98f9d49a665bcfa315e94d9785ff6d9cd5aef5a5f3fca9f535f403dc9ee9dc697d61bbcf9f990ecb3e773eb5e41dfee6f3e7ee53afdb66987f7d6abd565f1af51b2eedd35faafff9e77ebddfcdddd697ff643e319f98fffa175e1fdefc070cd35d64fb370ba7f5a92505dbcd8f3062fd4f1763fcf3cbc621dfbf593f16f390fcad6c36d15faf56e878ad2feb3d429f5ad3d042f36442e17fcadcda012d3fb0f40b3e9aefe2abc98b93ffbeccb7c9df6ff35d787535feeaea8ed78dbbc7effb9f56d47a3a8eff57cb5fb7be843ff6f34f770e23f4e575e3de33038bcd6fc1c68527a8f31ff8bbd69716fb1bdb81ddbf858ec4a281ae3fd184dd2d14fef5a9e55aa1d5fad2eafb4c389e6c3d4744896703342211a1f950417624cd322cd9dcab36422e96d6016125970611eab39a615c13d5c0d2ba440b5e6c4353573c6c05186f4402db41f79044e3638d096bce6be56c73a79da94ba1c9a9fb7100d955beaba11d3eb1c6013a8cdbb9d3e3385e4a7b199f2a22c9e84dac4d5d660c8d3d7ef7f9bdab9d004d0f3cc5583b6c9b21789803b476ce5dac657196a620c7efe6adf5001dfa6bf9686ae434322376beec293a0e72ac287b4b7bfe96b037277d8bc72ad4de66d84230b7b1750519108382df19a8bcb83989726d3fc62721d624d49da14b4f921872b69679c7505e626d3cce2c228cd2a49ad10d849da545190371968fd83b9a5a979f0d90f6caca4b4b544323e30528d776f9fc3abad24a6ebd482ebc23f5a8a5d599792f5f17997dfe62701eb2b5419c65b9256c9471a565d487db8a1ac82cb153ad26c7569f561612e676673dc1daced2e6dcbda56f33ef152e596fa7a12bc829d04ec1ead0477b433bc6acfbbb38ba6fe82bfcec88415fdd5fbd274687d94b03f6e00433fcacc0be6c16d650619ce1ebd3f8dc5b5bfa646f5dbc0bec030e5bfe2c6b0788994f7bc072ed04c87775e5e0ac5fb105c999daf1e070683dd684b3c1795b578cb3527a9e23ae601db901b01740c688ad4d96d9ec9e266cf591f6941f939b88e2d7f5145f97229b32111a27e9ff3437a78080036b411809337692cb32813570e3a148e6195f0bd90326de9be7ce6246b4c5735cc980c7173ce2642d054ed00b6376603b508e3687f631a2a6c19db6f839b796b0cc1a010bd91d444b562ff86f577cde035b14967304259375c07b07ec4e23dbe75ff05eb407b2e770b3bf7dce615ef5d710e670f8ba2eb10c0a3c89fc956ca7b4a886a94c95a8adddc754c719da696b70cf8f416de7d0aa1e7db35975bb3ba466fba742758b99ac7e3e93025420542158e0be56225cd4b1ac51a25c2c5d5d666c8ead44346de0c5a94460cfcdf9e390eab7e50c9db45515f5a8ae4d22bd86a686f81c7fb0078b8ae9a5d918477d6b86905eb97673ef7f1c63703ca6ef5defc02cfc20547f6a24ce6668eb7448b84d9e49858ad94c16c78c0d3fbf8a8a02599312a9a8062593c17b1eebdde5e82094ebbc12d18272af024a9b0e8c8f95f2a7819cc23acfc36554ac874c557e6a68dd355df666f32cbe0f468cfe7824e7660863b7e35a13e5a6d903c93a6f809cdca4b2cae04e07575326890f81561fa4992751d9d7661637465746c7fb32b7bffa136036f81a67325db04cb6c5197c9730259c8ff09b2da26584e400ec03555517b9cfc064ed40ce666f331644ba79cfe042cfe4660b439397a6ce3392a86eb17de8f85f993cb3c4a49ec59bec8183e37f3dc93e4b1812fade683634b86f71fb713f2163ae7b74f509c9fe18740ff83daee8796e3f6d1fe5fb563627b3d9ecff711f2a4f91b31e45f6ee73c420911d5360c728625aa0cc3aef9d53560b23fbdcd80e47b626609b7099594fdd0c5a46ca3a42c3144faa189918b129aa084476e03216f1c910bb1a9844a2b17edb2c8c69662e22b60aca71852c21a7ad6c6df108d942090b479631c5a74248cd64dcc09a7abc6c6f2617b7ce03e5d547e85e49949cc9f9707f216817dff30f43d08e9801e8d83e1af7d7d2ba3f85312277be7f083a3e6e97bbb5456569e8a395f281ba59335bb50a012dfd34d195aee7acb60dc3662c1605ec1e0fb2b5b3acd6b54cac4de54fca16f841cc0e1facefef2214830f62b9fba7b0dba53e0b9abd43c9d4128f5dbd9df160fbc20e540650495919b943b556776f7aeed5b3d5e6e6f80ef4707e6b6b02a58d7ce7da6bb646e23925ed6ac23a46237f489f7f64d822ee63011c245507e32c5be7dbd57a986690ed139b0d5f4f59f948e2942ad8574e5b46663f4569b8622f38bb5a774f2a96105460bba2ba37b46e0ea1efe374b3521682f75438ca86ee6d6d5d0dafaaa6be4fd40961c2c0f34d6265a4026538f20cae3073b76c2d1c4d5d5a4c585ec57d7082d9e2dbcb5778962daa9e1bcc62fb686b6b08aa68c61aa045419cd4e4ba944c0bc9fb804d236a67686b68ff6dda59ccb2ac237046ce42276233c136ee78ca5edd2774c63a8f1c9f5ddaed11baa35a955eafba6fff66da1be2799c0032627bf4017af247318565d86b6ae45093f63a6d79f3e873c2d565e4ac2027856a7e68b2b5b37be41ea69a38cf86fefafb2bc433d9d56353a793e9d773d78c09a3b19d48891a937ec6d35c9f1a5595d39f85b4e87df7f49bc9aecb9f1daff31cb17ccc403e5d311657c5614cb10a058686418d29f3c354b511f4145b542b6344d73a68653ca92d6fde1b4bb23501e200efad06698682822810013e0a210a55b20b3c1825f312579e3f2646cc7af3ba7d5aa8772db0ce1b585a17919cac423deca67a3daa96ad470d4cab69c1c76d8ba7839be83f1ed6bbea50911be9313685dd5ec0ceb1b5fd1c3bc7d60ea8d839d2b5556f8b607dde37a77c920f47f4f75b74ed9f5fa9cf7af3f2f687301eef4513cd549b94b6f7767d66f252d1451a28c24c180913469829b309a9cc1eca1bbbadeecc3effdf2e8ce30849a282ede3a3a94dead9346af48f9889e4970c8cc6e3813290828920ce132cabf22439ef5af11ea861a60b2551650cae8c7da2781ce2b33af603945c93303a95fc9ec8fe92df2b1918c6d3942de5aeca5131e4ec773051985a77e5883d2c7fd4289fb6c26fd5e40ca3643c6f1e6ba78f277d2cb33d45fce8f1d597b576306d6ed1c5bb4c5953fe35d73f7faeb315952ad9df3f3bf7b596e593a06c65daf85eb49f94dda74267a040416cc68ab174a810e81ab37aaf2c5dae40c4bf792e256248b48f9079b0876a68aaf2761ea8c309451cb969fcc7d6d4d06e8fba7f9f6e221f6b10dc424954b64eb55f382c1db31a048db8ff3fd146a46152682073cd9da175f7a6767c744c96b3033a5fdc87c61c87e6be82a1b4e1fcd0da4ec998be375f1c6cca1c93691306bf41f70f75305ba8036f343bf3f83350547eaacc645e1da88347d4d9d0c6281fd6b6fbd6628338e7c7e68bd1c4351fbf1eebf25068ed75fee0ac15d9d0f923f8337faafdfb01a89731a3834a991fd138c75af19cc045aef011cf6f7246c2d8d55d7330c5fa9ca2f194670c7db43675a5f6da079f7b7f0b1ba8d1e6a9d8b99a9e61a6882e5683e752220045faf848b3b9136b6bea9ba56f91c250e465365ddb228b6cad77a661816f542b4479b68fa74427afb906f4ebba6b4ac6ac66bf44fdff59e8b6140847453e98327fd5f7a13c56574c899fab8641950e25ed85d440f77676793ba006ea4d138e0e202e95a1a6fd625c2d7bc75d8cabe5ccaa3fdce07a4d30b7e33729c61e286a4b197a7bddd99fb4b1709ce9e62a8754dd04117a90430abc652e4b198eae59bcd09c308c5f9a329565db6a68c71c735921139dcfcfa0f686a0d0260c69b5ef4cdb9ed47a14a0dcfaa606d80f113602fc7dc87ddfe7996266e8e84310513f9c552dcb8c5b88d67dcd3851575b4190810bc73c1aeb6d75bd5433fda20c5df31ef4d132445f82461ae3a300c2353082456b305deb74fed1ecf3812d11f039c4dede4c11f5a35aa9ee81d480d5d797c5acc5df7d60e744631ddaf868fda884fdb9c9da8b188ec5119204e50c383203d3b38732825a2e41dd5b5cf7e0729dc7b37ed1f8780bd1b2e13d69bb07311e13309dbe38814af04ffa7c827c1fff6d6a931d8d0f2762588d185cf11a417bc2e09a32368ffbbc9a60ad240cab1143aba8ee4c40a87e2c4b6d037db28c85af5a0f8ce5690d13825be9fb7e3c13429217f43e2684ef09a36a816c4dde71e62fa6e68685383cd9798bea32e39c0f8323e8f178ef17a3ad3f84f9800ab7e26763ac34f1ff35d35d084271018b5bc17906cca104db08ea2a958415d01621b7ba06699aa083bbfae80cb92b642fa06a2677d2be0a265d1a1b9e862998f44decedcce1eb4d1f0d6d7470f5497aced7e4ea5c333b3e94719db6f607d81d621df134699c97dbbc2ea948c7885854218f11cbfc58b7c8e540242cb2e7884d99eb9d21ff51047d8c2eb79782d936d72fcabcd75f3a57243b7e8ece4599075ec41c2d84e634a9c18f18030a6b5b62e66878d763d94429f3d492355b91af76c51c7bcd98e2ea50e3e3cfa7f1f9da5b51e58b030b22ebd901d1ad328cad19fccc0c2318c5daf847e95834feeb741cabce8d07320ee4d94c1b9dd11956d204e741843c7962efeb23dfd295b3a18fba57ac05f07bca163afa615560b049144ca40fb6cfa7d9f73967d85facd15658c050c46771c45057ca285b17afb9ed7f0e7bd2d2d8a32daaa08b1a111a38e03a6ac2dad2ba08b03632ccc335b22b3b6617722fda3b6dc5b3031965e73ff1c7e4186ec15f90b0a4d6f5cde100a772ef8a08ebc7d85663dd3ebf3122d91ef7db9cf2be41640530c74ba28c750dcf029c0d84f5acd82ea9cb35daba7d3e34b4ae67722a1ea73760448dd9addaafd73e23cf39f37b535333cc4e0455ded2ccad5167bf8acf842955ecb56dbf603dfabc67079385ada95eccd464b7472b8205fabc30d7eace0cd00eaf4de70c39d3a1a5cb8fd4c5f228f21471e57a5d35b9b65e6745e9daa9f16b35a8cbccf83153e6ab2bd6e1db7d447c05a8424fbf778c93f1b89ff5be5cfedcc37edfb47e3361c1fd1816fce45d77b24b25f7dfc94c9a6564a01b97523f4284e76b04b3853a1cb1e6f4b8500261e7e0f5d59616aad6fd6107581650e24fdd5faf47c6e21d0cb290bb384dfb6368ddae2b7a800b55b3979aac2f787e5c7bf3b12cb4f760dddcc3961f7f9824164459430c7d7a7cbd70e39a475afbe5a3f21beb58ab32d7d6e9c98fd67f1336ab26f53bb72ce3316beb398d9f2558f3991859cafade0baa73d2d40b8c6d9fdfbb1aeb837dc81949dd4eec836a5c6bd5282f2e6ac340f61c51585aba529b23db80218b3a3fbb80f5f5bd3ec994c9b491cd9332f05cf926194b1418491496c0c42fa21fe614ebb4ded6692b0727404bc0ecafc576e0cfa6261f9c80d85059c6cfc258ded08535e58aded96eab6babdf594c323177a90637d0e6babb39c1decbe172447dc27af2c5e6f073844ba92f7428b3c078d49603573bed2a734944766bb647c4be4ff90e32ed8d985f450f3955f5930f8abb26ecb97ec19e1de6e67a2f0ddd8da555d41e93f92b61c5152e399e861447b0d22fd82cb710f4ab3b7c3b5f7d75d01bbc9d89ff8cac6b0539c0fc1bc536862a82f92a63dea4393b05650339081cb63f476077da5a8fc3cf0766be341ed3be9251587ea3e4bba09ad1379103c4b6dc823d261e0bfc6d236c2b3a76f4ac3c2782b27135696f70bd70cce5f857aed957b74e5b664dfdf5f07a5975bef7eb71e47e92bff27ebbe431f648ce1f42a7ff7c841df293d86d8732b275b3bee6abd8ce20f7923af28bcdb128795e86717bdce7d13870f6d2cb60ffdaef1c1feb1f6ea2cbc138d65c738f9c601296d97f529d6ed69752724d52cb52f63bc43f0bfd4acc22cb87f3de9adac277d4c695205faeb0ff54e70fd1434776a0a0b95815c3033d23dadfc26e461ffba6af47bb955ddff1d84fb5eecad4bd8c9f9af59c24fe44daaff4bf867f44715172fd621f9d59556dc3cf6353dc2b92936282ceaa202700bc850be01e8be86dc2ca23ac4be0f5446218118f57452e16cd7aa758c7fbdc38dcb14e2ade1166749d9bbc4bab6d8657799dbf9840ff173181fe98a3b9b59b5f71fe45df3a6707cd69b840a99f92b081724ca71119e853fbf3e7e7cf4dc8405996eb3ef77a3de673a7cb725cef8164a0d0f8622ed07a2ad0e74ebbcdb13d2a2a50d26b2a2ad0cca5bfa8407f5181be8f0a947a3fff2203750275676ac2c5d4e4aec19d9073ee9e4ded840c5d4645e49e4e9b47063940d64ed0639d97cc33a60504a2f1bb12671effc3d2ba2b086447ef99b4d1d28e957608d22be3e26bd4574b8f950cfe680fd5b3a11d9fc0581755cfe1d4e55c93770971d050deda81cbdaa270feeef349bf8ce47d5879ed8102430887e4a3a1c904546a687ab6885651325bdc76ac14ee272a3f5297f25b44ca992a0315ce4b43e7b76a59614b015124bc237500a52059574e29539b2c1c4ede981aebc54981d8f0cd1240467db851e2201142eb24cadbd8e7df4c7d04cfce003ce1c31e7fc748e074e9aded003d65df1b19be91734e604cbd08fc068adece58b986b11daa68dc8f83d142173f1b14a33ecfdaebfc7b6290deb1cfcb58c100eaf8e0f949123dc61df297effef3c1e41093d99b4b9b634317efbbe1ea6090e2eeadb156b1827219730a720375376ecb5bf3cc7a4e206f2c5d415112c501cfd55823a4a840c409fb9e5d49ed6c52c995c15a95f81711e05e299a3701b01103d725043391611c93a9e6e6148088c95a982aaa3ccb25450c8b0d83789ee15ab85eddbbc3d71c296c1494de9b817a8ed792b91e1decc8719216c0c5c426f2ced2d47d81e17671b55108c90824a117396d0512ccc64000dadddbed0904fa5c9d389bcc7e6731d53a8b092784a6767a0119f4b7cf399e57f532d6f0dc288d48613386c1f5dc57048988e1d0b498cb14d1c5d0463b535306782c0b0ddd5b037460e9b2670427640e483154ea344b8ba3a27986f3411af21b3c2f923842040c5bde0059955656d0ae1ca4fe6895bca75f1cfca1773cd63b8e4cad9bed53a1d1799bd4adeeb3e397492e5d5d255c933366ca1f2d119f7949c1d6d21285bd19914b17b5db3e7ff593b6fd8471c046a2c351f6bfef4ea2fe6c6367777aaec77ded2ca6fa24759293e4d883b9dc2ca4b57a34b85e086bc22f03e518213b107c5b5457927f5c4881b275b8ecffd583dd97f6d77bac56bed63900a235db640f161731fd720efc3fe31c78b75fe0ca25d0e9306d7a9740f7b7e7f667eee9b9d3c825d0fbccb4b9ce73fb73f799796a3f3dce25401a5fec12609f6a7d029f9fd9a75e9babf0097413f701e976854fa0f0d25f3e815f3e810ff409dcb803aecc3530df4cdd634cad4b6219e7ee8fefc3576c121fdca5e063b3fe75b28d4ddb9788733bcdd59e29c80c886f1d9b62d7aa215187939cf1d8dc5c66f11dc69a8b6cbf0b3540c65addda589df3892b22e3b2e05efb9df3783901514cea4ee398a88a8fb5109becf65addd9e02a20983f1913fa325ec77fcff6f97872776b1fb7a97a7a532b454cbc09d7dbb91a1bbb334269b07d7b63ba13435736dffdaf7b70219cbb585d3fda5c17f2beb5cbf366d2efc231f6c71be3e7b870cfd2569f76afb01a0af207537339a9bbcf3f87cfbc73427275456f0b78d2916b207a767c9ce6b8676eea1f0a5512663145f21f6f88f75c71f124f5bb305ee3753657bc244f39ab6e27f311bb45a2791272cf295201cbc67b55f57e95c4c62f96d65d927a20321e5957d2d5d8f066dcb6a27110ddb3dd568f59b74b913b297e5eeafa8a5c69c275ff8bdd426f224aea0a1df1c43a81b0cbbe338e2539586d69ab3b43979ef2635be5029259639dab3f59ccdb0cbe8733b4d3d68cdc76b16a64b77964af84c954352eb3c835929a61b7632ea1a41db1c97fb5de32267ddf7b99f9ab24b71cae0f840bc94fe99035733d66e4bd2fb3d524c97735b16a17f438accaeb626731d13a0b53f73ca81398a6e39aafb1903ddb070c75ced2d476a62e61e30e95a373d91cc69cbb75458f357cbcaf6ff2506edda8dc686773d221e63a1873cac168bf1e8cb674a87227eaed5415d6dba99c9a6b426867f25bcacd653eefe2bd32930bcc227e3640193c7422c70bf2b0f0d85e229760bc8f896cd121772badc1b831cd415ee1318ecd8a9c4bc6e1bc83ab9d56c42d8cbf83dce7a5cdb97b4bdf66de2b5c32796b3ba88729c83f85dc477d041828916b6997cbff0ad4c84da4eeafde83d73d6beaaf7b69c0029713d4fc5e3657f94993bd75f12ee0a2e6e483adb1ac1d20663eed45e719f25d5d3938ebd78329aa9ca91d0f0e87d6634d381b9cb7754575e90ef1fac2eb6615822b27809a1da8a7b2b5c9329b97d0c42513992fb5eed729beae9ff00313b9768efa3fcdcd69c45b0cfb4f98b1f91a0f580337e66c32cf39979e73ee2c66c45c3bc779fd787c496d0eac25921340e617d98172b439b427f99db385c19db685f800588e05ecd61dbe4666aa7ac17fbbe2f35e1ac82404d187fdcd26d8113e3fb2c14dc7227b20c31efbbbe71ce6557f0d610e87afeb12d3bcc01dc25f855db26353936f5c8189e88802032eede566a1af8dcdebf064bf4e99aeae9e56df7ce48cfdc5f12f61771abf21571727fffd4d3deebfbdf0cfda65107e5759c7ec6fb6a3a23aea1a57473516541c9e69d247e1e894d4c6dfbac9e0dae47b03783bc877999c4626aed38be573d1b3abf12b69317eb23a9d522ad7abf77b96ef2271f3b10e8cbfead9d3bcde98efe70cdb06d5f96ef498e0f5751005394406d4c2a75ce5cef06b654e233d0e075d4d76791e7a27e33e168e4e25ee0c7f347405cea5ef3e3fbfde277abf53bfbfa68bdfbffbcce6dbcbf353eedaf5c931fb5bdb98b24f93296b8d55d67eed33ddf4ff0cb917e1fd79cfbd2bfcf91ddfabf7771bedf235fcae0dc2f96a106a3eeb7e3b9367df7e4fee2b94010dd70e457d784ded4a0683ae0c978f22d7abaea6c5e07a21e053e0f3ae30afee564f9e64ef3927bffb907b9dff8de4ba413e7c12068d74c9a2b557535b4a5b8b42819b5b802183efc986570eb6ce1f6c7ce655ef13eabc591a1c455a3b3a3bce35b5c09e3b549013603940b1670bce44bc8fc6d3c5e68fcb2677ed5fc269f50d85de58dff2637513eaeaee387e43e9ffa7e45e2c2beeba177fde9e377f5cb6ceb7b377bdcf7f9067776fbf27f751f1f754cb5c9a3ce76a8ec33a4c4bbafa343eb4b4ee28da1b8bd742acd49afce58a7a8fdbbd407c1f1176d575e8c9373519f68aa1c98ca59bc5359b628411f9b259603dcf9cb28ca5b185b58db57311d5f5d38550bfae63df8da5755796267bc4762767b11b085b5b147c4b3b6ddde1aac8bff37455cf528205c77b465bd9ba01b6d57a6769e86e9d7ea718f734ab97fa5e749ffa6c8a606b2c21d43e3cb52dfdeb5dfa6775ae2de8820578a819397dbcc1445d15e02894e02bfc0ac1fd1d2138126b99df1f6cb98ead34f2e65f7f7d1b86c93567bb5afc8efcf5fef4a715b84f9dbaa6fd66a5419cec73d280ce7fb67e6bfd5712d121c1927c40c7defbc8fd3fd2cbff09fc5d003765223cff99efc06f8b0d7edaaf88cf75c4e75fff3f000000ffff010000ffff86aad995d8720400`))) From 41ae82fa70222566b897bf6951b057606df0a862 Mon Sep 17 00:00:00 2001 From: Pau Rosello Date: Thu, 16 Apr 2020 14:49:25 +0200 Subject: [PATCH 2/5] Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1912e5aa4..2f23e3a66 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Add pod field to AWSCluster - Replace custom `time.Time` wrapper `DeepCopyTime` with Kubernetes built-in `metav1.Time`. From 6855c2f81dc5d8b6199f5376d997f9d927660e8f Mon Sep 17 00:00:00 2001 From: Pau Rosello Date: Thu, 16 Apr 2020 15:27:07 +0200 Subject: [PATCH 3/5] remove github folder --- .../v1alpha1/zz_generated.deepcopy.go | 595 ---- .../backup/v1alpha1/zz_generated.deepcopy.go | 163 -- .../core/v1alpha1/zz_generated.deepcopy.go | 2500 ----------------- .../example/v1alpha1/zz_generated.deepcopy.go | 101 - .../v1alpha2/zz_generated.deepcopy.go | 784 ------ .../v1alpha1/zz_generated.deepcopy.go | 1580 ----------- .../release/v1alpha1/zz_generated.deepcopy.go | 259 -- 7 files changed, 5982 deletions(-) delete mode 100644 github/giantswarm/apiextensions/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go delete mode 100644 github/giantswarm/apiextensions/pkg/apis/backup/v1alpha1/zz_generated.deepcopy.go delete mode 100644 github/giantswarm/apiextensions/pkg/apis/core/v1alpha1/zz_generated.deepcopy.go delete mode 100644 github/giantswarm/apiextensions/pkg/apis/example/v1alpha1/zz_generated.deepcopy.go delete mode 100644 github/giantswarm/apiextensions/pkg/apis/infrastructure/v1alpha2/zz_generated.deepcopy.go delete mode 100644 github/giantswarm/apiextensions/pkg/apis/provider/v1alpha1/zz_generated.deepcopy.go delete mode 100644 github/giantswarm/apiextensions/pkg/apis/release/v1alpha1/zz_generated.deepcopy.go diff --git a/github/giantswarm/apiextensions/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go b/github/giantswarm/apiextensions/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go deleted file mode 100644 index 8fb898661..000000000 --- a/github/giantswarm/apiextensions/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go +++ /dev/null @@ -1,595 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2020 Giant Swarm GmbH. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *App) DeepCopyInto(out *App) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - out.Spec = in.Spec - in.Status.DeepCopyInto(&out.Status) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new App. -func (in *App) DeepCopy() *App { - if in == nil { - return nil - } - out := new(App) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *App) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AppCatalog) DeepCopyInto(out *AppCatalog) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - out.Spec = in.Spec - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalog. -func (in *AppCatalog) DeepCopy() *AppCatalog { - if in == nil { - return nil - } - out := new(AppCatalog) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *AppCatalog) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AppCatalogList) DeepCopyInto(out *AppCatalogList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]AppCatalog, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogList. -func (in *AppCatalogList) DeepCopy() *AppCatalogList { - if in == nil { - return nil - } - out := new(AppCatalogList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *AppCatalogList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AppCatalogSpec) DeepCopyInto(out *AppCatalogSpec) { - *out = *in - out.Config = in.Config - out.Storage = in.Storage - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogSpec. -func (in *AppCatalogSpec) DeepCopy() *AppCatalogSpec { - if in == nil { - return nil - } - out := new(AppCatalogSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AppCatalogSpecConfig) DeepCopyInto(out *AppCatalogSpecConfig) { - *out = *in - out.ConfigMap = in.ConfigMap - out.Secret = in.Secret - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogSpecConfig. -func (in *AppCatalogSpecConfig) DeepCopy() *AppCatalogSpecConfig { - if in == nil { - return nil - } - out := new(AppCatalogSpecConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AppCatalogSpecConfigConfigMap) DeepCopyInto(out *AppCatalogSpecConfigConfigMap) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogSpecConfigConfigMap. -func (in *AppCatalogSpecConfigConfigMap) DeepCopy() *AppCatalogSpecConfigConfigMap { - if in == nil { - return nil - } - out := new(AppCatalogSpecConfigConfigMap) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AppCatalogSpecConfigSecret) DeepCopyInto(out *AppCatalogSpecConfigSecret) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogSpecConfigSecret. -func (in *AppCatalogSpecConfigSecret) DeepCopy() *AppCatalogSpecConfigSecret { - if in == nil { - return nil - } - out := new(AppCatalogSpecConfigSecret) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AppCatalogSpecStorage) DeepCopyInto(out *AppCatalogSpecStorage) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppCatalogSpecStorage. -func (in *AppCatalogSpecStorage) DeepCopy() *AppCatalogSpecStorage { - if in == nil { - return nil - } - out := new(AppCatalogSpecStorage) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AppList) DeepCopyInto(out *AppList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]App, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppList. -func (in *AppList) DeepCopy() *AppList { - if in == nil { - return nil - } - out := new(AppList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *AppList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AppSpec) DeepCopyInto(out *AppSpec) { - *out = *in - out.Config = in.Config - out.KubeConfig = in.KubeConfig - out.UserConfig = in.UserConfig - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpec. -func (in *AppSpec) DeepCopy() *AppSpec { - if in == nil { - return nil - } - out := new(AppSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AppSpecConfig) DeepCopyInto(out *AppSpecConfig) { - *out = *in - out.ConfigMap = in.ConfigMap - out.Secret = in.Secret - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecConfig. -func (in *AppSpecConfig) DeepCopy() *AppSpecConfig { - if in == nil { - return nil - } - out := new(AppSpecConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AppSpecConfigConfigMap) DeepCopyInto(out *AppSpecConfigConfigMap) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecConfigConfigMap. -func (in *AppSpecConfigConfigMap) DeepCopy() *AppSpecConfigConfigMap { - if in == nil { - return nil - } - out := new(AppSpecConfigConfigMap) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AppSpecConfigSecret) DeepCopyInto(out *AppSpecConfigSecret) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecConfigSecret. -func (in *AppSpecConfigSecret) DeepCopy() *AppSpecConfigSecret { - if in == nil { - return nil - } - out := new(AppSpecConfigSecret) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AppSpecKubeConfig) DeepCopyInto(out *AppSpecKubeConfig) { - *out = *in - out.Context = in.Context - out.Secret = in.Secret - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecKubeConfig. -func (in *AppSpecKubeConfig) DeepCopy() *AppSpecKubeConfig { - if in == nil { - return nil - } - out := new(AppSpecKubeConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AppSpecKubeConfigContext) DeepCopyInto(out *AppSpecKubeConfigContext) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecKubeConfigContext. -func (in *AppSpecKubeConfigContext) DeepCopy() *AppSpecKubeConfigContext { - if in == nil { - return nil - } - out := new(AppSpecKubeConfigContext) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AppSpecKubeConfigSecret) DeepCopyInto(out *AppSpecKubeConfigSecret) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecKubeConfigSecret. -func (in *AppSpecKubeConfigSecret) DeepCopy() *AppSpecKubeConfigSecret { - if in == nil { - return nil - } - out := new(AppSpecKubeConfigSecret) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AppSpecUserConfig) DeepCopyInto(out *AppSpecUserConfig) { - *out = *in - out.ConfigMap = in.ConfigMap - out.Secret = in.Secret - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecUserConfig. -func (in *AppSpecUserConfig) DeepCopy() *AppSpecUserConfig { - if in == nil { - return nil - } - out := new(AppSpecUserConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AppSpecUserConfigConfigMap) DeepCopyInto(out *AppSpecUserConfigConfigMap) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecUserConfigConfigMap. -func (in *AppSpecUserConfigConfigMap) DeepCopy() *AppSpecUserConfigConfigMap { - if in == nil { - return nil - } - out := new(AppSpecUserConfigConfigMap) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AppSpecUserConfigSecret) DeepCopyInto(out *AppSpecUserConfigSecret) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppSpecUserConfigSecret. -func (in *AppSpecUserConfigSecret) DeepCopy() *AppSpecUserConfigSecret { - if in == nil { - return nil - } - out := new(AppSpecUserConfigSecret) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AppStatus) DeepCopyInto(out *AppStatus) { - *out = *in - in.Release.DeepCopyInto(&out.Release) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppStatus. -func (in *AppStatus) DeepCopy() *AppStatus { - if in == nil { - return nil - } - out := new(AppStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AppStatusRelease) DeepCopyInto(out *AppStatusRelease) { - *out = *in - in.LastDeployed.DeepCopyInto(&out.LastDeployed) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AppStatusRelease. -func (in *AppStatusRelease) DeepCopy() *AppStatusRelease { - if in == nil { - return nil - } - out := new(AppStatusRelease) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Chart) DeepCopyInto(out *Chart) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - out.Spec = in.Spec - in.Status.DeepCopyInto(&out.Status) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Chart. -func (in *Chart) DeepCopy() *Chart { - if in == nil { - return nil - } - out := new(Chart) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *Chart) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartList) DeepCopyInto(out *ChartList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]Chart, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartList. -func (in *ChartList) DeepCopy() *ChartList { - if in == nil { - return nil - } - out := new(ChartList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ChartList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartSpec) DeepCopyInto(out *ChartSpec) { - *out = *in - out.Config = in.Config - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartSpec. -func (in *ChartSpec) DeepCopy() *ChartSpec { - if in == nil { - return nil - } - out := new(ChartSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartSpecConfig) DeepCopyInto(out *ChartSpecConfig) { - *out = *in - out.ConfigMap = in.ConfigMap - out.Secret = in.Secret - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartSpecConfig. -func (in *ChartSpecConfig) DeepCopy() *ChartSpecConfig { - if in == nil { - return nil - } - out := new(ChartSpecConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartSpecConfigConfigMap) DeepCopyInto(out *ChartSpecConfigConfigMap) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartSpecConfigConfigMap. -func (in *ChartSpecConfigConfigMap) DeepCopy() *ChartSpecConfigConfigMap { - if in == nil { - return nil - } - out := new(ChartSpecConfigConfigMap) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartSpecConfigSecret) DeepCopyInto(out *ChartSpecConfigSecret) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartSpecConfigSecret. -func (in *ChartSpecConfigSecret) DeepCopy() *ChartSpecConfigSecret { - if in == nil { - return nil - } - out := new(ChartSpecConfigSecret) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartStatus) DeepCopyInto(out *ChartStatus) { - *out = *in - in.Release.DeepCopyInto(&out.Release) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartStatus. -func (in *ChartStatus) DeepCopy() *ChartStatus { - if in == nil { - return nil - } - out := new(ChartStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartStatusRelease) DeepCopyInto(out *ChartStatusRelease) { - *out = *in - in.LastDeployed.DeepCopyInto(&out.LastDeployed) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartStatusRelease. -func (in *ChartStatusRelease) DeepCopy() *ChartStatusRelease { - if in == nil { - return nil - } - out := new(ChartStatusRelease) - in.DeepCopyInto(out) - return out -} diff --git a/github/giantswarm/apiextensions/pkg/apis/backup/v1alpha1/zz_generated.deepcopy.go b/github/giantswarm/apiextensions/pkg/apis/backup/v1alpha1/zz_generated.deepcopy.go deleted file mode 100644 index 6b2a1e60d..000000000 --- a/github/giantswarm/apiextensions/pkg/apis/backup/v1alpha1/zz_generated.deepcopy.go +++ /dev/null @@ -1,163 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2020 Giant Swarm GmbH. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ETCDBackup) DeepCopyInto(out *ETCDBackup) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - out.Spec = in.Spec - in.Status.DeepCopyInto(&out.Status) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ETCDBackup. -func (in *ETCDBackup) DeepCopy() *ETCDBackup { - if in == nil { - return nil - } - out := new(ETCDBackup) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ETCDBackup) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ETCDBackupList) DeepCopyInto(out *ETCDBackupList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]ETCDBackup, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ETCDBackupList. -func (in *ETCDBackupList) DeepCopy() *ETCDBackupList { - if in == nil { - return nil - } - out := new(ETCDBackupList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ETCDBackupList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ETCDBackupSpec) DeepCopyInto(out *ETCDBackupSpec) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ETCDBackupSpec. -func (in *ETCDBackupSpec) DeepCopy() *ETCDBackupSpec { - if in == nil { - return nil - } - out := new(ETCDBackupSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ETCDBackupStatus) DeepCopyInto(out *ETCDBackupStatus) { - *out = *in - if in.Instances != nil { - in, out := &in.Instances, &out.Instances - *out = make(map[string]ETCDInstanceBackupStatusIndex, len(*in)) - for key, val := range *in { - (*out)[key] = *val.DeepCopy() - } - } - in.StartedTimestamp.DeepCopyInto(&out.StartedTimestamp) - in.FinishedTimestamp.DeepCopyInto(&out.FinishedTimestamp) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ETCDBackupStatus. -func (in *ETCDBackupStatus) DeepCopy() *ETCDBackupStatus { - if in == nil { - return nil - } - out := new(ETCDBackupStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ETCDInstanceBackupStatus) DeepCopyInto(out *ETCDInstanceBackupStatus) { - *out = *in - in.StartedTimestamp.DeepCopyInto(&out.StartedTimestamp) - in.FinishedTimestamp.DeepCopyInto(&out.FinishedTimestamp) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ETCDInstanceBackupStatus. -func (in *ETCDInstanceBackupStatus) DeepCopy() *ETCDInstanceBackupStatus { - if in == nil { - return nil - } - out := new(ETCDInstanceBackupStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ETCDInstanceBackupStatusIndex) DeepCopyInto(out *ETCDInstanceBackupStatusIndex) { - *out = *in - in.V2.DeepCopyInto(&out.V2) - in.V3.DeepCopyInto(&out.V3) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ETCDInstanceBackupStatusIndex. -func (in *ETCDInstanceBackupStatusIndex) DeepCopy() *ETCDInstanceBackupStatusIndex { - if in == nil { - return nil - } - out := new(ETCDInstanceBackupStatusIndex) - in.DeepCopyInto(out) - return out -} diff --git a/github/giantswarm/apiextensions/pkg/apis/core/v1alpha1/zz_generated.deepcopy.go b/github/giantswarm/apiextensions/pkg/apis/core/v1alpha1/zz_generated.deepcopy.go deleted file mode 100644 index c5a2e70aa..000000000 --- a/github/giantswarm/apiextensions/pkg/apis/core/v1alpha1/zz_generated.deepcopy.go +++ /dev/null @@ -1,2500 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2020 Giant Swarm GmbH. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterConfig) DeepCopyInto(out *AWSClusterConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterConfig. -func (in *AWSClusterConfig) DeepCopy() *AWSClusterConfig { - if in == nil { - return nil - } - out := new(AWSClusterConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *AWSClusterConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterConfigList) DeepCopyInto(out *AWSClusterConfigList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]AWSClusterConfig, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterConfigList. -func (in *AWSClusterConfigList) DeepCopy() *AWSClusterConfigList { - if in == nil { - return nil - } - out := new(AWSClusterConfigList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *AWSClusterConfigList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterConfigSpec) DeepCopyInto(out *AWSClusterConfigSpec) { - *out = *in - in.Guest.DeepCopyInto(&out.Guest) - out.VersionBundle = in.VersionBundle - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterConfigSpec. -func (in *AWSClusterConfigSpec) DeepCopy() *AWSClusterConfigSpec { - if in == nil { - return nil - } - out := new(AWSClusterConfigSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterConfigSpecGuest) DeepCopyInto(out *AWSClusterConfigSpecGuest) { - *out = *in - in.ClusterGuestConfig.DeepCopyInto(&out.ClusterGuestConfig) - out.CredentialSecret = in.CredentialSecret - if in.Masters != nil { - in, out := &in.Masters, &out.Masters - *out = make([]AWSClusterConfigSpecGuestMaster, len(*in)) - copy(*out, *in) - } - if in.Workers != nil { - in, out := &in.Workers, &out.Workers - *out = make([]AWSClusterConfigSpecGuestWorker, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterConfigSpecGuest. -func (in *AWSClusterConfigSpecGuest) DeepCopy() *AWSClusterConfigSpecGuest { - if in == nil { - return nil - } - out := new(AWSClusterConfigSpecGuest) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterConfigSpecGuestCredentialSecret) DeepCopyInto(out *AWSClusterConfigSpecGuestCredentialSecret) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterConfigSpecGuestCredentialSecret. -func (in *AWSClusterConfigSpecGuestCredentialSecret) DeepCopy() *AWSClusterConfigSpecGuestCredentialSecret { - if in == nil { - return nil - } - out := new(AWSClusterConfigSpecGuestCredentialSecret) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterConfigSpecGuestMaster) DeepCopyInto(out *AWSClusterConfigSpecGuestMaster) { - *out = *in - out.AWSClusterConfigSpecGuestNode = in.AWSClusterConfigSpecGuestNode - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterConfigSpecGuestMaster. -func (in *AWSClusterConfigSpecGuestMaster) DeepCopy() *AWSClusterConfigSpecGuestMaster { - if in == nil { - return nil - } - out := new(AWSClusterConfigSpecGuestMaster) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterConfigSpecGuestNode) DeepCopyInto(out *AWSClusterConfigSpecGuestNode) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterConfigSpecGuestNode. -func (in *AWSClusterConfigSpecGuestNode) DeepCopy() *AWSClusterConfigSpecGuestNode { - if in == nil { - return nil - } - out := new(AWSClusterConfigSpecGuestNode) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterConfigSpecGuestWorker) DeepCopyInto(out *AWSClusterConfigSpecGuestWorker) { - *out = *in - out.AWSClusterConfigSpecGuestNode = in.AWSClusterConfigSpecGuestNode - if in.Labels != nil { - in, out := &in.Labels, &out.Labels - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterConfigSpecGuestWorker. -func (in *AWSClusterConfigSpecGuestWorker) DeepCopy() *AWSClusterConfigSpecGuestWorker { - if in == nil { - return nil - } - out := new(AWSClusterConfigSpecGuestWorker) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterConfigSpecVersionBundle) DeepCopyInto(out *AWSClusterConfigSpecVersionBundle) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterConfigSpecVersionBundle. -func (in *AWSClusterConfigSpecVersionBundle) DeepCopy() *AWSClusterConfigSpecVersionBundle { - if in == nil { - return nil - } - out := new(AWSClusterConfigSpecVersionBundle) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureClusterConfig) DeepCopyInto(out *AzureClusterConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureClusterConfig. -func (in *AzureClusterConfig) DeepCopy() *AzureClusterConfig { - if in == nil { - return nil - } - out := new(AzureClusterConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *AzureClusterConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureClusterConfigList) DeepCopyInto(out *AzureClusterConfigList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]AzureClusterConfig, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureClusterConfigList. -func (in *AzureClusterConfigList) DeepCopy() *AzureClusterConfigList { - if in == nil { - return nil - } - out := new(AzureClusterConfigList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *AzureClusterConfigList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureClusterConfigSpec) DeepCopyInto(out *AzureClusterConfigSpec) { - *out = *in - in.Guest.DeepCopyInto(&out.Guest) - out.VersionBundle = in.VersionBundle - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureClusterConfigSpec. -func (in *AzureClusterConfigSpec) DeepCopy() *AzureClusterConfigSpec { - if in == nil { - return nil - } - out := new(AzureClusterConfigSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureClusterConfigSpecGuest) DeepCopyInto(out *AzureClusterConfigSpecGuest) { - *out = *in - in.ClusterGuestConfig.DeepCopyInto(&out.ClusterGuestConfig) - out.CredentialSecret = in.CredentialSecret - if in.Masters != nil { - in, out := &in.Masters, &out.Masters - *out = make([]AzureClusterConfigSpecGuestMaster, len(*in)) - copy(*out, *in) - } - if in.Workers != nil { - in, out := &in.Workers, &out.Workers - *out = make([]AzureClusterConfigSpecGuestWorker, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureClusterConfigSpecGuest. -func (in *AzureClusterConfigSpecGuest) DeepCopy() *AzureClusterConfigSpecGuest { - if in == nil { - return nil - } - out := new(AzureClusterConfigSpecGuest) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureClusterConfigSpecGuestCredentialSecret) DeepCopyInto(out *AzureClusterConfigSpecGuestCredentialSecret) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureClusterConfigSpecGuestCredentialSecret. -func (in *AzureClusterConfigSpecGuestCredentialSecret) DeepCopy() *AzureClusterConfigSpecGuestCredentialSecret { - if in == nil { - return nil - } - out := new(AzureClusterConfigSpecGuestCredentialSecret) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureClusterConfigSpecGuestMaster) DeepCopyInto(out *AzureClusterConfigSpecGuestMaster) { - *out = *in - out.AzureClusterConfigSpecGuestNode = in.AzureClusterConfigSpecGuestNode - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureClusterConfigSpecGuestMaster. -func (in *AzureClusterConfigSpecGuestMaster) DeepCopy() *AzureClusterConfigSpecGuestMaster { - if in == nil { - return nil - } - out := new(AzureClusterConfigSpecGuestMaster) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureClusterConfigSpecGuestNode) DeepCopyInto(out *AzureClusterConfigSpecGuestNode) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureClusterConfigSpecGuestNode. -func (in *AzureClusterConfigSpecGuestNode) DeepCopy() *AzureClusterConfigSpecGuestNode { - if in == nil { - return nil - } - out := new(AzureClusterConfigSpecGuestNode) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureClusterConfigSpecGuestWorker) DeepCopyInto(out *AzureClusterConfigSpecGuestWorker) { - *out = *in - out.AzureClusterConfigSpecGuestNode = in.AzureClusterConfigSpecGuestNode - if in.Labels != nil { - in, out := &in.Labels, &out.Labels - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureClusterConfigSpecGuestWorker. -func (in *AzureClusterConfigSpecGuestWorker) DeepCopy() *AzureClusterConfigSpecGuestWorker { - if in == nil { - return nil - } - out := new(AzureClusterConfigSpecGuestWorker) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureClusterConfigSpecVersionBundle) DeepCopyInto(out *AzureClusterConfigSpecVersionBundle) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureClusterConfigSpecVersionBundle. -func (in *AzureClusterConfigSpecVersionBundle) DeepCopy() *AzureClusterConfigSpecVersionBundle { - if in == nil { - return nil - } - out := new(AzureClusterConfigSpecVersionBundle) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CertConfig) DeepCopyInto(out *CertConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertConfig. -func (in *CertConfig) DeepCopy() *CertConfig { - if in == nil { - return nil - } - out := new(CertConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *CertConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CertConfigList) DeepCopyInto(out *CertConfigList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]CertConfig, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertConfigList. -func (in *CertConfigList) DeepCopy() *CertConfigList { - if in == nil { - return nil - } - out := new(CertConfigList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *CertConfigList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CertConfigSpec) DeepCopyInto(out *CertConfigSpec) { - *out = *in - in.Cert.DeepCopyInto(&out.Cert) - out.VersionBundle = in.VersionBundle - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertConfigSpec. -func (in *CertConfigSpec) DeepCopy() *CertConfigSpec { - if in == nil { - return nil - } - out := new(CertConfigSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CertConfigSpecCert) DeepCopyInto(out *CertConfigSpecCert) { - *out = *in - if in.AltNames != nil { - in, out := &in.AltNames, &out.AltNames - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.IPSANs != nil { - in, out := &in.IPSANs, &out.IPSANs - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.Organizations != nil { - in, out := &in.Organizations, &out.Organizations - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertConfigSpecCert. -func (in *CertConfigSpecCert) DeepCopy() *CertConfigSpecCert { - if in == nil { - return nil - } - out := new(CertConfigSpecCert) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CertConfigSpecVersionBundle) DeepCopyInto(out *CertConfigSpecVersionBundle) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertConfigSpecVersionBundle. -func (in *CertConfigSpecVersionBundle) DeepCopy() *CertConfigSpecVersionBundle { - if in == nil { - return nil - } - out := new(CertConfigSpecVersionBundle) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartConfig) DeepCopyInto(out *ChartConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - out.Spec = in.Spec - out.Status = in.Status - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartConfig. -func (in *ChartConfig) DeepCopy() *ChartConfig { - if in == nil { - return nil - } - out := new(ChartConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ChartConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartConfigList) DeepCopyInto(out *ChartConfigList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]ChartConfig, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartConfigList. -func (in *ChartConfigList) DeepCopy() *ChartConfigList { - if in == nil { - return nil - } - out := new(ChartConfigList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ChartConfigList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartConfigSpec) DeepCopyInto(out *ChartConfigSpec) { - *out = *in - out.Chart = in.Chart - out.VersionBundle = in.VersionBundle - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartConfigSpec. -func (in *ChartConfigSpec) DeepCopy() *ChartConfigSpec { - if in == nil { - return nil - } - out := new(ChartConfigSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartConfigSpecChart) DeepCopyInto(out *ChartConfigSpecChart) { - *out = *in - out.ConfigMap = in.ConfigMap - out.UserConfigMap = in.UserConfigMap - out.Secret = in.Secret - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartConfigSpecChart. -func (in *ChartConfigSpecChart) DeepCopy() *ChartConfigSpecChart { - if in == nil { - return nil - } - out := new(ChartConfigSpecChart) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartConfigSpecConfigMap) DeepCopyInto(out *ChartConfigSpecConfigMap) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartConfigSpecConfigMap. -func (in *ChartConfigSpecConfigMap) DeepCopy() *ChartConfigSpecConfigMap { - if in == nil { - return nil - } - out := new(ChartConfigSpecConfigMap) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartConfigSpecSecret) DeepCopyInto(out *ChartConfigSpecSecret) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartConfigSpecSecret. -func (in *ChartConfigSpecSecret) DeepCopy() *ChartConfigSpecSecret { - if in == nil { - return nil - } - out := new(ChartConfigSpecSecret) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartConfigSpecVersionBundle) DeepCopyInto(out *ChartConfigSpecVersionBundle) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartConfigSpecVersionBundle. -func (in *ChartConfigSpecVersionBundle) DeepCopy() *ChartConfigSpecVersionBundle { - if in == nil { - return nil - } - out := new(ChartConfigSpecVersionBundle) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ChartConfigStatus) DeepCopyInto(out *ChartConfigStatus) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartConfigStatus. -func (in *ChartConfigStatus) DeepCopy() *ChartConfigStatus { - if in == nil { - return nil - } - out := new(ChartConfigStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Cluster) DeepCopyInto(out *Cluster) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - out.Spec = in.Spec - in.Status.DeepCopyInto(&out.Status) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Cluster. -func (in *Cluster) DeepCopy() *Cluster { - if in == nil { - return nil - } - out := new(Cluster) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *Cluster) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterGuestConfig) DeepCopyInto(out *ClusterGuestConfig) { - *out = *in - if in.VersionBundles != nil { - in, out := &in.VersionBundles, &out.VersionBundles - *out = make([]ClusterGuestConfigVersionBundle, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterGuestConfig. -func (in *ClusterGuestConfig) DeepCopy() *ClusterGuestConfig { - if in == nil { - return nil - } - out := new(ClusterGuestConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterGuestConfigVersionBundle) DeepCopyInto(out *ClusterGuestConfigVersionBundle) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterGuestConfigVersionBundle. -func (in *ClusterGuestConfigVersionBundle) DeepCopy() *ClusterGuestConfigVersionBundle { - if in == nil { - return nil - } - out := new(ClusterGuestConfigVersionBundle) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterList) DeepCopyInto(out *ClusterList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]Cluster, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterList. -func (in *ClusterList) DeepCopy() *ClusterList { - if in == nil { - return nil - } - out := new(ClusterList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ClusterList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterSpec) DeepCopyInto(out *ClusterSpec) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterSpec. -func (in *ClusterSpec) DeepCopy() *ClusterSpec { - if in == nil { - return nil - } - out := new(ClusterSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterStatus) DeepCopyInto(out *ClusterStatus) { - *out = *in - in.LastHeartbeatTime.DeepCopyInto(&out.LastHeartbeatTime) - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) - out.Cluster = in.Cluster - if in.Conditions != nil { - in, out := &in.Conditions, &out.Conditions - *out = make([]ClusterStatusCondition, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterStatus. -func (in *ClusterStatus) DeepCopy() *ClusterStatus { - if in == nil { - return nil - } - out := new(ClusterStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterStatusCluster) DeepCopyInto(out *ClusterStatusCluster) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterStatusCluster. -func (in *ClusterStatusCluster) DeepCopy() *ClusterStatusCluster { - if in == nil { - return nil - } - out := new(ClusterStatusCluster) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterStatusCondition) DeepCopyInto(out *ClusterStatusCondition) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterStatusCondition. -func (in *ClusterStatusCondition) DeepCopy() *ClusterStatusCondition { - if in == nil { - return nil - } - out := new(ClusterStatusCondition) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DrainerConfig) DeepCopyInto(out *DrainerConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - out.Spec = in.Spec - in.Status.DeepCopyInto(&out.Status) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrainerConfig. -func (in *DrainerConfig) DeepCopy() *DrainerConfig { - if in == nil { - return nil - } - out := new(DrainerConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *DrainerConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DrainerConfigList) DeepCopyInto(out *DrainerConfigList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]DrainerConfig, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrainerConfigList. -func (in *DrainerConfigList) DeepCopy() *DrainerConfigList { - if in == nil { - return nil - } - out := new(DrainerConfigList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *DrainerConfigList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DrainerConfigSpec) DeepCopyInto(out *DrainerConfigSpec) { - *out = *in - out.Guest = in.Guest - out.VersionBundle = in.VersionBundle - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrainerConfigSpec. -func (in *DrainerConfigSpec) DeepCopy() *DrainerConfigSpec { - if in == nil { - return nil - } - out := new(DrainerConfigSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DrainerConfigSpecGuest) DeepCopyInto(out *DrainerConfigSpecGuest) { - *out = *in - out.Cluster = in.Cluster - out.Node = in.Node - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrainerConfigSpecGuest. -func (in *DrainerConfigSpecGuest) DeepCopy() *DrainerConfigSpecGuest { - if in == nil { - return nil - } - out := new(DrainerConfigSpecGuest) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DrainerConfigSpecGuestCluster) DeepCopyInto(out *DrainerConfigSpecGuestCluster) { - *out = *in - out.API = in.API - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrainerConfigSpecGuestCluster. -func (in *DrainerConfigSpecGuestCluster) DeepCopy() *DrainerConfigSpecGuestCluster { - if in == nil { - return nil - } - out := new(DrainerConfigSpecGuestCluster) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DrainerConfigSpecGuestClusterAPI) DeepCopyInto(out *DrainerConfigSpecGuestClusterAPI) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrainerConfigSpecGuestClusterAPI. -func (in *DrainerConfigSpecGuestClusterAPI) DeepCopy() *DrainerConfigSpecGuestClusterAPI { - if in == nil { - return nil - } - out := new(DrainerConfigSpecGuestClusterAPI) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DrainerConfigSpecGuestNode) DeepCopyInto(out *DrainerConfigSpecGuestNode) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrainerConfigSpecGuestNode. -func (in *DrainerConfigSpecGuestNode) DeepCopy() *DrainerConfigSpecGuestNode { - if in == nil { - return nil - } - out := new(DrainerConfigSpecGuestNode) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DrainerConfigSpecVersionBundle) DeepCopyInto(out *DrainerConfigSpecVersionBundle) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrainerConfigSpecVersionBundle. -func (in *DrainerConfigSpecVersionBundle) DeepCopy() *DrainerConfigSpecVersionBundle { - if in == nil { - return nil - } - out := new(DrainerConfigSpecVersionBundle) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DrainerConfigStatus) DeepCopyInto(out *DrainerConfigStatus) { - *out = *in - if in.Conditions != nil { - in, out := &in.Conditions, &out.Conditions - *out = make([]DrainerConfigStatusCondition, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrainerConfigStatus. -func (in *DrainerConfigStatus) DeepCopy() *DrainerConfigStatus { - if in == nil { - return nil - } - out := new(DrainerConfigStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DrainerConfigStatusCondition) DeepCopyInto(out *DrainerConfigStatusCondition) { - *out = *in - in.LastHeartbeatTime.DeepCopyInto(&out.LastHeartbeatTime) - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DrainerConfigStatusCondition. -func (in *DrainerConfigStatusCondition) DeepCopy() *DrainerConfigStatusCondition { - if in == nil { - return nil - } - out := new(DrainerConfigStatusCondition) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DraughtsmanConfig) DeepCopyInto(out *DraughtsmanConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DraughtsmanConfig. -func (in *DraughtsmanConfig) DeepCopy() *DraughtsmanConfig { - if in == nil { - return nil - } - out := new(DraughtsmanConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *DraughtsmanConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DraughtsmanConfigList) DeepCopyInto(out *DraughtsmanConfigList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]DraughtsmanConfig, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DraughtsmanConfigList. -func (in *DraughtsmanConfigList) DeepCopy() *DraughtsmanConfigList { - if in == nil { - return nil - } - out := new(DraughtsmanConfigList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *DraughtsmanConfigList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DraughtsmanConfigSpec) DeepCopyInto(out *DraughtsmanConfigSpec) { - *out = *in - if in.Projects != nil { - in, out := &in.Projects, &out.Projects - *out = make([]DraughtsmanConfigSpecProject, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DraughtsmanConfigSpec. -func (in *DraughtsmanConfigSpec) DeepCopy() *DraughtsmanConfigSpec { - if in == nil { - return nil - } - out := new(DraughtsmanConfigSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DraughtsmanConfigSpecProject) DeepCopyInto(out *DraughtsmanConfigSpecProject) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DraughtsmanConfigSpecProject. -func (in *DraughtsmanConfigSpecProject) DeepCopy() *DraughtsmanConfigSpecProject { - if in == nil { - return nil - } - out := new(DraughtsmanConfigSpecProject) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlannelConfig) DeepCopyInto(out *FlannelConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfig. -func (in *FlannelConfig) DeepCopy() *FlannelConfig { - if in == nil { - return nil - } - out := new(FlannelConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *FlannelConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlannelConfigList) DeepCopyInto(out *FlannelConfigList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]FlannelConfig, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigList. -func (in *FlannelConfigList) DeepCopy() *FlannelConfigList { - if in == nil { - return nil - } - out := new(FlannelConfigList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *FlannelConfigList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlannelConfigSpec) DeepCopyInto(out *FlannelConfigSpec) { - *out = *in - in.Bridge.DeepCopyInto(&out.Bridge) - out.Cluster = in.Cluster - out.Flannel = in.Flannel - out.Health = in.Health - out.VersionBundle = in.VersionBundle - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpec. -func (in *FlannelConfigSpec) DeepCopy() *FlannelConfigSpec { - if in == nil { - return nil - } - out := new(FlannelConfigSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlannelConfigSpecBridge) DeepCopyInto(out *FlannelConfigSpecBridge) { - *out = *in - out.Docker = in.Docker - in.Spec.DeepCopyInto(&out.Spec) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecBridge. -func (in *FlannelConfigSpecBridge) DeepCopy() *FlannelConfigSpecBridge { - if in == nil { - return nil - } - out := new(FlannelConfigSpecBridge) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlannelConfigSpecBridgeDocker) DeepCopyInto(out *FlannelConfigSpecBridgeDocker) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecBridgeDocker. -func (in *FlannelConfigSpecBridgeDocker) DeepCopy() *FlannelConfigSpecBridgeDocker { - if in == nil { - return nil - } - out := new(FlannelConfigSpecBridgeDocker) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlannelConfigSpecBridgeSpec) DeepCopyInto(out *FlannelConfigSpecBridgeSpec) { - *out = *in - in.DNS.DeepCopyInto(&out.DNS) - in.NTP.DeepCopyInto(&out.NTP) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecBridgeSpec. -func (in *FlannelConfigSpecBridgeSpec) DeepCopy() *FlannelConfigSpecBridgeSpec { - if in == nil { - return nil - } - out := new(FlannelConfigSpecBridgeSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlannelConfigSpecBridgeSpecDNS) DeepCopyInto(out *FlannelConfigSpecBridgeSpecDNS) { - *out = *in - if in.Servers != nil { - in, out := &in.Servers, &out.Servers - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecBridgeSpecDNS. -func (in *FlannelConfigSpecBridgeSpecDNS) DeepCopy() *FlannelConfigSpecBridgeSpecDNS { - if in == nil { - return nil - } - out := new(FlannelConfigSpecBridgeSpecDNS) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlannelConfigSpecBridgeSpecNTP) DeepCopyInto(out *FlannelConfigSpecBridgeSpecNTP) { - *out = *in - if in.Servers != nil { - in, out := &in.Servers, &out.Servers - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecBridgeSpecNTP. -func (in *FlannelConfigSpecBridgeSpecNTP) DeepCopy() *FlannelConfigSpecBridgeSpecNTP { - if in == nil { - return nil - } - out := new(FlannelConfigSpecBridgeSpecNTP) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlannelConfigSpecCluster) DeepCopyInto(out *FlannelConfigSpecCluster) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecCluster. -func (in *FlannelConfigSpecCluster) DeepCopy() *FlannelConfigSpecCluster { - if in == nil { - return nil - } - out := new(FlannelConfigSpecCluster) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlannelConfigSpecFlannel) DeepCopyInto(out *FlannelConfigSpecFlannel) { - *out = *in - out.Spec = in.Spec - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecFlannel. -func (in *FlannelConfigSpecFlannel) DeepCopy() *FlannelConfigSpecFlannel { - if in == nil { - return nil - } - out := new(FlannelConfigSpecFlannel) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlannelConfigSpecFlannelSpec) DeepCopyInto(out *FlannelConfigSpecFlannelSpec) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecFlannelSpec. -func (in *FlannelConfigSpecFlannelSpec) DeepCopy() *FlannelConfigSpecFlannelSpec { - if in == nil { - return nil - } - out := new(FlannelConfigSpecFlannelSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlannelConfigSpecHealth) DeepCopyInto(out *FlannelConfigSpecHealth) { - *out = *in - out.Docker = in.Docker - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecHealth. -func (in *FlannelConfigSpecHealth) DeepCopy() *FlannelConfigSpecHealth { - if in == nil { - return nil - } - out := new(FlannelConfigSpecHealth) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlannelConfigSpecHealthDocker) DeepCopyInto(out *FlannelConfigSpecHealthDocker) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecHealthDocker. -func (in *FlannelConfigSpecHealthDocker) DeepCopy() *FlannelConfigSpecHealthDocker { - if in == nil { - return nil - } - out := new(FlannelConfigSpecHealthDocker) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlannelConfigSpecVersionBundle) DeepCopyInto(out *FlannelConfigSpecVersionBundle) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlannelConfigSpecVersionBundle. -func (in *FlannelConfigSpecVersionBundle) DeepCopy() *FlannelConfigSpecVersionBundle { - if in == nil { - return nil - } - out := new(FlannelConfigSpecVersionBundle) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Ignition) DeepCopyInto(out *Ignition) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - out.Status = in.Status - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ignition. -func (in *Ignition) DeepCopy() *Ignition { - if in == nil { - return nil - } - out := new(Ignition) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *Ignition) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionList) DeepCopyInto(out *IgnitionList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]Ignition, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionList. -func (in *IgnitionList) DeepCopy() *IgnitionList { - if in == nil { - return nil - } - out := new(IgnitionList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *IgnitionList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpec) DeepCopyInto(out *IgnitionSpec) { - *out = *in - out.Calico = in.Calico - out.Docker = in.Docker - out.Etcd = in.Etcd - in.Extension.DeepCopyInto(&out.Extension) - out.Ingress = in.Ingress - out.Kubernetes = in.Kubernetes - out.Registry = in.Registry - out.SSO = in.SSO - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpec. -func (in *IgnitionSpec) DeepCopy() *IgnitionSpec { - if in == nil { - return nil - } - out := new(IgnitionSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecCalico) DeepCopyInto(out *IgnitionSpecCalico) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecCalico. -func (in *IgnitionSpecCalico) DeepCopy() *IgnitionSpecCalico { - if in == nil { - return nil - } - out := new(IgnitionSpecCalico) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecDocker) DeepCopyInto(out *IgnitionSpecDocker) { - *out = *in - out.Daemon = in.Daemon - out.NetworkSetup = in.NetworkSetup - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecDocker. -func (in *IgnitionSpecDocker) DeepCopy() *IgnitionSpecDocker { - if in == nil { - return nil - } - out := new(IgnitionSpecDocker) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecDockerDaemon) DeepCopyInto(out *IgnitionSpecDockerDaemon) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecDockerDaemon. -func (in *IgnitionSpecDockerDaemon) DeepCopy() *IgnitionSpecDockerDaemon { - if in == nil { - return nil - } - out := new(IgnitionSpecDockerDaemon) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecDockerNetworkSetup) DeepCopyInto(out *IgnitionSpecDockerNetworkSetup) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecDockerNetworkSetup. -func (in *IgnitionSpecDockerNetworkSetup) DeepCopy() *IgnitionSpecDockerNetworkSetup { - if in == nil { - return nil - } - out := new(IgnitionSpecDockerNetworkSetup) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecEtcd) DeepCopyInto(out *IgnitionSpecEtcd) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecEtcd. -func (in *IgnitionSpecEtcd) DeepCopy() *IgnitionSpecEtcd { - if in == nil { - return nil - } - out := new(IgnitionSpecEtcd) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecExtension) DeepCopyInto(out *IgnitionSpecExtension) { - *out = *in - if in.Files != nil { - in, out := &in.Files, &out.Files - *out = make([]IgnitionSpecExtensionFile, len(*in)) - copy(*out, *in) - } - if in.Units != nil { - in, out := &in.Units, &out.Units - *out = make([]IgnitionSpecExtensionUnit, len(*in)) - copy(*out, *in) - } - if in.Users != nil { - in, out := &in.Users, &out.Users - *out = make([]IgnitionSpecExtensionUser, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecExtension. -func (in *IgnitionSpecExtension) DeepCopy() *IgnitionSpecExtension { - if in == nil { - return nil - } - out := new(IgnitionSpecExtension) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecExtensionFile) DeepCopyInto(out *IgnitionSpecExtensionFile) { - *out = *in - out.Metadata = in.Metadata - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecExtensionFile. -func (in *IgnitionSpecExtensionFile) DeepCopy() *IgnitionSpecExtensionFile { - if in == nil { - return nil - } - out := new(IgnitionSpecExtensionFile) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecExtensionFileMetadata) DeepCopyInto(out *IgnitionSpecExtensionFileMetadata) { - *out = *in - out.Owner = in.Owner - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecExtensionFileMetadata. -func (in *IgnitionSpecExtensionFileMetadata) DeepCopy() *IgnitionSpecExtensionFileMetadata { - if in == nil { - return nil - } - out := new(IgnitionSpecExtensionFileMetadata) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecExtensionFileMetadataOwner) DeepCopyInto(out *IgnitionSpecExtensionFileMetadataOwner) { - *out = *in - out.Group = in.Group - out.User = in.User - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecExtensionFileMetadataOwner. -func (in *IgnitionSpecExtensionFileMetadataOwner) DeepCopy() *IgnitionSpecExtensionFileMetadataOwner { - if in == nil { - return nil - } - out := new(IgnitionSpecExtensionFileMetadataOwner) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecExtensionFileMetadataOwnerGroup) DeepCopyInto(out *IgnitionSpecExtensionFileMetadataOwnerGroup) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecExtensionFileMetadataOwnerGroup. -func (in *IgnitionSpecExtensionFileMetadataOwnerGroup) DeepCopy() *IgnitionSpecExtensionFileMetadataOwnerGroup { - if in == nil { - return nil - } - out := new(IgnitionSpecExtensionFileMetadataOwnerGroup) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecExtensionFileMetadataOwnerUser) DeepCopyInto(out *IgnitionSpecExtensionFileMetadataOwnerUser) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecExtensionFileMetadataOwnerUser. -func (in *IgnitionSpecExtensionFileMetadataOwnerUser) DeepCopy() *IgnitionSpecExtensionFileMetadataOwnerUser { - if in == nil { - return nil - } - out := new(IgnitionSpecExtensionFileMetadataOwnerUser) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecExtensionUnit) DeepCopyInto(out *IgnitionSpecExtensionUnit) { - *out = *in - out.Metadata = in.Metadata - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecExtensionUnit. -func (in *IgnitionSpecExtensionUnit) DeepCopy() *IgnitionSpecExtensionUnit { - if in == nil { - return nil - } - out := new(IgnitionSpecExtensionUnit) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecExtensionUnitMetadata) DeepCopyInto(out *IgnitionSpecExtensionUnitMetadata) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecExtensionUnitMetadata. -func (in *IgnitionSpecExtensionUnitMetadata) DeepCopy() *IgnitionSpecExtensionUnitMetadata { - if in == nil { - return nil - } - out := new(IgnitionSpecExtensionUnitMetadata) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecExtensionUser) DeepCopyInto(out *IgnitionSpecExtensionUser) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecExtensionUser. -func (in *IgnitionSpecExtensionUser) DeepCopy() *IgnitionSpecExtensionUser { - if in == nil { - return nil - } - out := new(IgnitionSpecExtensionUser) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecIngress) DeepCopyInto(out *IgnitionSpecIngress) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecIngress. -func (in *IgnitionSpecIngress) DeepCopy() *IgnitionSpecIngress { - if in == nil { - return nil - } - out := new(IgnitionSpecIngress) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecKubernetes) DeepCopyInto(out *IgnitionSpecKubernetes) { - *out = *in - out.API = in.API - out.DNS = in.DNS - out.Kubelet = in.Kubelet - out.OIDC = in.OIDC - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecKubernetes. -func (in *IgnitionSpecKubernetes) DeepCopy() *IgnitionSpecKubernetes { - if in == nil { - return nil - } - out := new(IgnitionSpecKubernetes) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecKubernetesAPI) DeepCopyInto(out *IgnitionSpecKubernetesAPI) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecKubernetesAPI. -func (in *IgnitionSpecKubernetesAPI) DeepCopy() *IgnitionSpecKubernetesAPI { - if in == nil { - return nil - } - out := new(IgnitionSpecKubernetesAPI) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecKubernetesDNS) DeepCopyInto(out *IgnitionSpecKubernetesDNS) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecKubernetesDNS. -func (in *IgnitionSpecKubernetesDNS) DeepCopy() *IgnitionSpecKubernetesDNS { - if in == nil { - return nil - } - out := new(IgnitionSpecKubernetesDNS) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecKubernetesKubelet) DeepCopyInto(out *IgnitionSpecKubernetesKubelet) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecKubernetesKubelet. -func (in *IgnitionSpecKubernetesKubelet) DeepCopy() *IgnitionSpecKubernetesKubelet { - if in == nil { - return nil - } - out := new(IgnitionSpecKubernetesKubelet) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecOIDC) DeepCopyInto(out *IgnitionSpecOIDC) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecOIDC. -func (in *IgnitionSpecOIDC) DeepCopy() *IgnitionSpecOIDC { - if in == nil { - return nil - } - out := new(IgnitionSpecOIDC) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecRegistry) DeepCopyInto(out *IgnitionSpecRegistry) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecRegistry. -func (in *IgnitionSpecRegistry) DeepCopy() *IgnitionSpecRegistry { - if in == nil { - return nil - } - out := new(IgnitionSpecRegistry) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionSpecSSO) DeepCopyInto(out *IgnitionSpecSSO) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionSpecSSO. -func (in *IgnitionSpecSSO) DeepCopy() *IgnitionSpecSSO { - if in == nil { - return nil - } - out := new(IgnitionSpecSSO) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionStatus) DeepCopyInto(out *IgnitionStatus) { - *out = *in - out.DataSecret = in.DataSecret - out.Verification = in.Verification - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionStatus. -func (in *IgnitionStatus) DeepCopy() *IgnitionStatus { - if in == nil { - return nil - } - out := new(IgnitionStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionStatusSecret) DeepCopyInto(out *IgnitionStatusSecret) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionStatusSecret. -func (in *IgnitionStatusSecret) DeepCopy() *IgnitionStatusSecret { - if in == nil { - return nil - } - out := new(IgnitionStatusSecret) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IgnitionStatusVerification) DeepCopyInto(out *IgnitionStatusVerification) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IgnitionStatusVerification. -func (in *IgnitionStatusVerification) DeepCopy() *IgnitionStatusVerification { - if in == nil { - return nil - } - out := new(IgnitionStatusVerification) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IngressConfig) DeepCopyInto(out *IngressConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressConfig. -func (in *IngressConfig) DeepCopy() *IngressConfig { - if in == nil { - return nil - } - out := new(IngressConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *IngressConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IngressConfigList) DeepCopyInto(out *IngressConfigList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]IngressConfig, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressConfigList. -func (in *IngressConfigList) DeepCopy() *IngressConfigList { - if in == nil { - return nil - } - out := new(IngressConfigList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *IngressConfigList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IngressConfigSpec) DeepCopyInto(out *IngressConfigSpec) { - *out = *in - out.GuestCluster = in.GuestCluster - out.HostCluster = in.HostCluster - if in.ProtocolPorts != nil { - in, out := &in.ProtocolPorts, &out.ProtocolPorts - *out = make([]IngressConfigSpecProtocolPort, len(*in)) - copy(*out, *in) - } - out.VersionBundle = in.VersionBundle - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressConfigSpec. -func (in *IngressConfigSpec) DeepCopy() *IngressConfigSpec { - if in == nil { - return nil - } - out := new(IngressConfigSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IngressConfigSpecGuestCluster) DeepCopyInto(out *IngressConfigSpecGuestCluster) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressConfigSpecGuestCluster. -func (in *IngressConfigSpecGuestCluster) DeepCopy() *IngressConfigSpecGuestCluster { - if in == nil { - return nil - } - out := new(IngressConfigSpecGuestCluster) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IngressConfigSpecHostCluster) DeepCopyInto(out *IngressConfigSpecHostCluster) { - *out = *in - out.IngressController = in.IngressController - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressConfigSpecHostCluster. -func (in *IngressConfigSpecHostCluster) DeepCopy() *IngressConfigSpecHostCluster { - if in == nil { - return nil - } - out := new(IngressConfigSpecHostCluster) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IngressConfigSpecHostClusterIngressController) DeepCopyInto(out *IngressConfigSpecHostClusterIngressController) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressConfigSpecHostClusterIngressController. -func (in *IngressConfigSpecHostClusterIngressController) DeepCopy() *IngressConfigSpecHostClusterIngressController { - if in == nil { - return nil - } - out := new(IngressConfigSpecHostClusterIngressController) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IngressConfigSpecProtocolPort) DeepCopyInto(out *IngressConfigSpecProtocolPort) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressConfigSpecProtocolPort. -func (in *IngressConfigSpecProtocolPort) DeepCopy() *IngressConfigSpecProtocolPort { - if in == nil { - return nil - } - out := new(IngressConfigSpecProtocolPort) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IngressConfigSpecVersionBundle) DeepCopyInto(out *IngressConfigSpecVersionBundle) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressConfigSpecVersionBundle. -func (in *IngressConfigSpecVersionBundle) DeepCopy() *IngressConfigSpecVersionBundle { - if in == nil { - return nil - } - out := new(IngressConfigSpecVersionBundle) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMClusterConfig) DeepCopyInto(out *KVMClusterConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMClusterConfig. -func (in *KVMClusterConfig) DeepCopy() *KVMClusterConfig { - if in == nil { - return nil - } - out := new(KVMClusterConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *KVMClusterConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMClusterConfigList) DeepCopyInto(out *KVMClusterConfigList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]KVMClusterConfig, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMClusterConfigList. -func (in *KVMClusterConfigList) DeepCopy() *KVMClusterConfigList { - if in == nil { - return nil - } - out := new(KVMClusterConfigList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *KVMClusterConfigList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMClusterConfigSpec) DeepCopyInto(out *KVMClusterConfigSpec) { - *out = *in - in.Guest.DeepCopyInto(&out.Guest) - out.VersionBundle = in.VersionBundle - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMClusterConfigSpec. -func (in *KVMClusterConfigSpec) DeepCopy() *KVMClusterConfigSpec { - if in == nil { - return nil - } - out := new(KVMClusterConfigSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMClusterConfigSpecGuest) DeepCopyInto(out *KVMClusterConfigSpecGuest) { - *out = *in - in.ClusterGuestConfig.DeepCopyInto(&out.ClusterGuestConfig) - if in.Masters != nil { - in, out := &in.Masters, &out.Masters - *out = make([]KVMClusterConfigSpecGuestMaster, len(*in)) - copy(*out, *in) - } - if in.Workers != nil { - in, out := &in.Workers, &out.Workers - *out = make([]KVMClusterConfigSpecGuestWorker, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMClusterConfigSpecGuest. -func (in *KVMClusterConfigSpecGuest) DeepCopy() *KVMClusterConfigSpecGuest { - if in == nil { - return nil - } - out := new(KVMClusterConfigSpecGuest) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMClusterConfigSpecGuestMaster) DeepCopyInto(out *KVMClusterConfigSpecGuestMaster) { - *out = *in - out.KVMClusterConfigSpecGuestNode = in.KVMClusterConfigSpecGuestNode - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMClusterConfigSpecGuestMaster. -func (in *KVMClusterConfigSpecGuestMaster) DeepCopy() *KVMClusterConfigSpecGuestMaster { - if in == nil { - return nil - } - out := new(KVMClusterConfigSpecGuestMaster) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMClusterConfigSpecGuestNode) DeepCopyInto(out *KVMClusterConfigSpecGuestNode) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMClusterConfigSpecGuestNode. -func (in *KVMClusterConfigSpecGuestNode) DeepCopy() *KVMClusterConfigSpecGuestNode { - if in == nil { - return nil - } - out := new(KVMClusterConfigSpecGuestNode) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMClusterConfigSpecGuestWorker) DeepCopyInto(out *KVMClusterConfigSpecGuestWorker) { - *out = *in - out.KVMClusterConfigSpecGuestNode = in.KVMClusterConfigSpecGuestNode - if in.Labels != nil { - in, out := &in.Labels, &out.Labels - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMClusterConfigSpecGuestWorker. -func (in *KVMClusterConfigSpecGuestWorker) DeepCopy() *KVMClusterConfigSpecGuestWorker { - if in == nil { - return nil - } - out := new(KVMClusterConfigSpecGuestWorker) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMClusterConfigSpecVersionBundle) DeepCopyInto(out *KVMClusterConfigSpecVersionBundle) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMClusterConfigSpecVersionBundle. -func (in *KVMClusterConfigSpecVersionBundle) DeepCopy() *KVMClusterConfigSpecVersionBundle { - if in == nil { - return nil - } - out := new(KVMClusterConfigSpecVersionBundle) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeConfig) DeepCopyInto(out *NodeConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - out.Spec = in.Spec - out.Status = in.Status - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeConfig. -func (in *NodeConfig) DeepCopy() *NodeConfig { - if in == nil { - return nil - } - out := new(NodeConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NodeConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeConfigList) DeepCopyInto(out *NodeConfigList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]NodeConfig, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeConfigList. -func (in *NodeConfigList) DeepCopy() *NodeConfigList { - if in == nil { - return nil - } - out := new(NodeConfigList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NodeConfigList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeConfigSpec) DeepCopyInto(out *NodeConfigSpec) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeConfigSpec. -func (in *NodeConfigSpec) DeepCopy() *NodeConfigSpec { - if in == nil { - return nil - } - out := new(NodeConfigSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeConfigStatus) DeepCopyInto(out *NodeConfigStatus) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeConfigStatus. -func (in *NodeConfigStatus) DeepCopy() *NodeConfigStatus { - if in == nil { - return nil - } - out := new(NodeConfigStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *StorageConfig) DeepCopyInto(out *StorageConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StorageConfig. -func (in *StorageConfig) DeepCopy() *StorageConfig { - if in == nil { - return nil - } - out := new(StorageConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *StorageConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *StorageConfigList) DeepCopyInto(out *StorageConfigList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]StorageConfig, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StorageConfigList. -func (in *StorageConfigList) DeepCopy() *StorageConfigList { - if in == nil { - return nil - } - out := new(StorageConfigList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *StorageConfigList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *StorageConfigSpec) DeepCopyInto(out *StorageConfigSpec) { - *out = *in - in.Storage.DeepCopyInto(&out.Storage) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StorageConfigSpec. -func (in *StorageConfigSpec) DeepCopy() *StorageConfigSpec { - if in == nil { - return nil - } - out := new(StorageConfigSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *StorageConfigSpecStorage) DeepCopyInto(out *StorageConfigSpecStorage) { - *out = *in - if in.Data != nil { - in, out := &in.Data, &out.Data - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StorageConfigSpecStorage. -func (in *StorageConfigSpecStorage) DeepCopy() *StorageConfigSpecStorage { - if in == nil { - return nil - } - out := new(StorageConfigSpecStorage) - in.DeepCopyInto(out) - return out -} diff --git a/github/giantswarm/apiextensions/pkg/apis/example/v1alpha1/zz_generated.deepcopy.go b/github/giantswarm/apiextensions/pkg/apis/example/v1alpha1/zz_generated.deepcopy.go deleted file mode 100644 index e16068624..000000000 --- a/github/giantswarm/apiextensions/pkg/apis/example/v1alpha1/zz_generated.deepcopy.go +++ /dev/null @@ -1,101 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2020 Giant Swarm GmbH. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MemcachedConfig) DeepCopyInto(out *MemcachedConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - out.Spec = in.Spec - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MemcachedConfig. -func (in *MemcachedConfig) DeepCopy() *MemcachedConfig { - if in == nil { - return nil - } - out := new(MemcachedConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *MemcachedConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MemcachedConfigList) DeepCopyInto(out *MemcachedConfigList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]MemcachedConfig, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MemcachedConfigList. -func (in *MemcachedConfigList) DeepCopy() *MemcachedConfigList { - if in == nil { - return nil - } - out := new(MemcachedConfigList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *MemcachedConfigList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *MemcachedConfigSpec) DeepCopyInto(out *MemcachedConfigSpec) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MemcachedConfigSpec. -func (in *MemcachedConfigSpec) DeepCopy() *MemcachedConfigSpec { - if in == nil { - return nil - } - out := new(MemcachedConfigSpec) - in.DeepCopyInto(out) - return out -} diff --git a/github/giantswarm/apiextensions/pkg/apis/infrastructure/v1alpha2/zz_generated.deepcopy.go b/github/giantswarm/apiextensions/pkg/apis/infrastructure/v1alpha2/zz_generated.deepcopy.go deleted file mode 100644 index 5e121752c..000000000 --- a/github/giantswarm/apiextensions/pkg/apis/infrastructure/v1alpha2/zz_generated.deepcopy.go +++ /dev/null @@ -1,784 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2020 Giant Swarm GmbH. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1alpha2 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSCluster) DeepCopyInto(out *AWSCluster) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - out.Spec = in.Spec - in.Status.DeepCopyInto(&out.Status) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSCluster. -func (in *AWSCluster) DeepCopy() *AWSCluster { - if in == nil { - return nil - } - out := new(AWSCluster) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *AWSCluster) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterList) DeepCopyInto(out *AWSClusterList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]AWSCluster, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterList. -func (in *AWSClusterList) DeepCopy() *AWSClusterList { - if in == nil { - return nil - } - out := new(AWSClusterList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *AWSClusterList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterSpec) DeepCopyInto(out *AWSClusterSpec) { - *out = *in - out.Cluster = in.Cluster - out.Provider = in.Provider - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterSpec. -func (in *AWSClusterSpec) DeepCopy() *AWSClusterSpec { - if in == nil { - return nil - } - out := new(AWSClusterSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterSpecCluster) DeepCopyInto(out *AWSClusterSpecCluster) { - *out = *in - out.DNS = in.DNS - out.OIDC = in.OIDC - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterSpecCluster. -func (in *AWSClusterSpecCluster) DeepCopy() *AWSClusterSpecCluster { - if in == nil { - return nil - } - out := new(AWSClusterSpecCluster) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterSpecClusterDNS) DeepCopyInto(out *AWSClusterSpecClusterDNS) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterSpecClusterDNS. -func (in *AWSClusterSpecClusterDNS) DeepCopy() *AWSClusterSpecClusterDNS { - if in == nil { - return nil - } - out := new(AWSClusterSpecClusterDNS) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterSpecClusterOIDC) DeepCopyInto(out *AWSClusterSpecClusterOIDC) { - *out = *in - out.Claims = in.Claims - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterSpecClusterOIDC. -func (in *AWSClusterSpecClusterOIDC) DeepCopy() *AWSClusterSpecClusterOIDC { - if in == nil { - return nil - } - out := new(AWSClusterSpecClusterOIDC) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterSpecClusterOIDCClaims) DeepCopyInto(out *AWSClusterSpecClusterOIDCClaims) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterSpecClusterOIDCClaims. -func (in *AWSClusterSpecClusterOIDCClaims) DeepCopy() *AWSClusterSpecClusterOIDCClaims { - if in == nil { - return nil - } - out := new(AWSClusterSpecClusterOIDCClaims) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterSpecProvider) DeepCopyInto(out *AWSClusterSpecProvider) { - *out = *in - out.CredentialSecret = in.CredentialSecret - out.Master = in.Master - out.Pods = in.Pods - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterSpecProvider. -func (in *AWSClusterSpecProvider) DeepCopy() *AWSClusterSpecProvider { - if in == nil { - return nil - } - out := new(AWSClusterSpecProvider) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterSpecProviderCredentialSecret) DeepCopyInto(out *AWSClusterSpecProviderCredentialSecret) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterSpecProviderCredentialSecret. -func (in *AWSClusterSpecProviderCredentialSecret) DeepCopy() *AWSClusterSpecProviderCredentialSecret { - if in == nil { - return nil - } - out := new(AWSClusterSpecProviderCredentialSecret) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterSpecProviderMaster) DeepCopyInto(out *AWSClusterSpecProviderMaster) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterSpecProviderMaster. -func (in *AWSClusterSpecProviderMaster) DeepCopy() *AWSClusterSpecProviderMaster { - if in == nil { - return nil - } - out := new(AWSClusterSpecProviderMaster) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterStatus) DeepCopyInto(out *AWSClusterStatus) { - *out = *in - in.Cluster.DeepCopyInto(&out.Cluster) - out.Provider = in.Provider - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterStatus. -func (in *AWSClusterStatus) DeepCopy() *AWSClusterStatus { - if in == nil { - return nil - } - out := new(AWSClusterStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterStatusProvider) DeepCopyInto(out *AWSClusterStatusProvider) { - *out = *in - out.Network = in.Network - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterStatusProvider. -func (in *AWSClusterStatusProvider) DeepCopy() *AWSClusterStatusProvider { - if in == nil { - return nil - } - out := new(AWSClusterStatusProvider) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSClusterStatusProviderNetwork) DeepCopyInto(out *AWSClusterStatusProviderNetwork) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSClusterStatusProviderNetwork. -func (in *AWSClusterStatusProviderNetwork) DeepCopy() *AWSClusterStatusProviderNetwork { - if in == nil { - return nil - } - out := new(AWSClusterStatusProviderNetwork) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSControlPlane) DeepCopyInto(out *AWSControlPlane) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - out.Status = in.Status - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSControlPlane. -func (in *AWSControlPlane) DeepCopy() *AWSControlPlane { - if in == nil { - return nil - } - out := new(AWSControlPlane) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *AWSControlPlane) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSControlPlaneList) DeepCopyInto(out *AWSControlPlaneList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]AWSControlPlane, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSControlPlaneList. -func (in *AWSControlPlaneList) DeepCopy() *AWSControlPlaneList { - if in == nil { - return nil - } - out := new(AWSControlPlaneList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *AWSControlPlaneList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSControlPlaneSpec) DeepCopyInto(out *AWSControlPlaneSpec) { - *out = *in - if in.AvailabilityZones != nil { - in, out := &in.AvailabilityZones, &out.AvailabilityZones - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSControlPlaneSpec. -func (in *AWSControlPlaneSpec) DeepCopy() *AWSControlPlaneSpec { - if in == nil { - return nil - } - out := new(AWSControlPlaneSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSControlPlaneStatus) DeepCopyInto(out *AWSControlPlaneStatus) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSControlPlaneStatus. -func (in *AWSControlPlaneStatus) DeepCopy() *AWSControlPlaneStatus { - if in == nil { - return nil - } - out := new(AWSControlPlaneStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSMachineDeployment) DeepCopyInto(out *AWSMachineDeployment) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeployment. -func (in *AWSMachineDeployment) DeepCopy() *AWSMachineDeployment { - if in == nil { - return nil - } - out := new(AWSMachineDeployment) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *AWSMachineDeployment) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSMachineDeploymentList) DeepCopyInto(out *AWSMachineDeploymentList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]AWSMachineDeployment, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentList. -func (in *AWSMachineDeploymentList) DeepCopy() *AWSMachineDeploymentList { - if in == nil { - return nil - } - out := new(AWSMachineDeploymentList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *AWSMachineDeploymentList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSMachineDeploymentSpec) DeepCopyInto(out *AWSMachineDeploymentSpec) { - *out = *in - out.NodePool = in.NodePool - in.Provider.DeepCopyInto(&out.Provider) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentSpec. -func (in *AWSMachineDeploymentSpec) DeepCopy() *AWSMachineDeploymentSpec { - if in == nil { - return nil - } - out := new(AWSMachineDeploymentSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSMachineDeploymentSpecInstanceDistribution) DeepCopyInto(out *AWSMachineDeploymentSpecInstanceDistribution) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentSpecInstanceDistribution. -func (in *AWSMachineDeploymentSpecInstanceDistribution) DeepCopy() *AWSMachineDeploymentSpecInstanceDistribution { - if in == nil { - return nil - } - out := new(AWSMachineDeploymentSpecInstanceDistribution) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSMachineDeploymentSpecNodePool) DeepCopyInto(out *AWSMachineDeploymentSpecNodePool) { - *out = *in - out.Machine = in.Machine - out.Scaling = in.Scaling - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentSpecNodePool. -func (in *AWSMachineDeploymentSpecNodePool) DeepCopy() *AWSMachineDeploymentSpecNodePool { - if in == nil { - return nil - } - out := new(AWSMachineDeploymentSpecNodePool) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSMachineDeploymentSpecNodePoolMachine) DeepCopyInto(out *AWSMachineDeploymentSpecNodePoolMachine) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentSpecNodePoolMachine. -func (in *AWSMachineDeploymentSpecNodePoolMachine) DeepCopy() *AWSMachineDeploymentSpecNodePoolMachine { - if in == nil { - return nil - } - out := new(AWSMachineDeploymentSpecNodePoolMachine) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSMachineDeploymentSpecNodePoolScaling) DeepCopyInto(out *AWSMachineDeploymentSpecNodePoolScaling) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentSpecNodePoolScaling. -func (in *AWSMachineDeploymentSpecNodePoolScaling) DeepCopy() *AWSMachineDeploymentSpecNodePoolScaling { - if in == nil { - return nil - } - out := new(AWSMachineDeploymentSpecNodePoolScaling) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSMachineDeploymentSpecProvider) DeepCopyInto(out *AWSMachineDeploymentSpecProvider) { - *out = *in - if in.AvailabilityZones != nil { - in, out := &in.AvailabilityZones, &out.AvailabilityZones - *out = make([]string, len(*in)) - copy(*out, *in) - } - out.InstanceDistribution = in.InstanceDistribution - out.Worker = in.Worker - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentSpecProvider. -func (in *AWSMachineDeploymentSpecProvider) DeepCopy() *AWSMachineDeploymentSpecProvider { - if in == nil { - return nil - } - out := new(AWSMachineDeploymentSpecProvider) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSMachineDeploymentSpecProviderWorker) DeepCopyInto(out *AWSMachineDeploymentSpecProviderWorker) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentSpecProviderWorker. -func (in *AWSMachineDeploymentSpecProviderWorker) DeepCopy() *AWSMachineDeploymentSpecProviderWorker { - if in == nil { - return nil - } - out := new(AWSMachineDeploymentSpecProviderWorker) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSMachineDeploymentStatus) DeepCopyInto(out *AWSMachineDeploymentStatus) { - *out = *in - in.Provider.DeepCopyInto(&out.Provider) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentStatus. -func (in *AWSMachineDeploymentStatus) DeepCopy() *AWSMachineDeploymentStatus { - if in == nil { - return nil - } - out := new(AWSMachineDeploymentStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSMachineDeploymentStatusProvider) DeepCopyInto(out *AWSMachineDeploymentStatusProvider) { - *out = *in - in.Worker.DeepCopyInto(&out.Worker) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentStatusProvider. -func (in *AWSMachineDeploymentStatusProvider) DeepCopy() *AWSMachineDeploymentStatusProvider { - if in == nil { - return nil - } - out := new(AWSMachineDeploymentStatusProvider) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSMachineDeploymentStatusProviderWorker) DeepCopyInto(out *AWSMachineDeploymentStatusProviderWorker) { - *out = *in - if in.InstanceTypes != nil { - in, out := &in.InstanceTypes, &out.InstanceTypes - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSMachineDeploymentStatusProviderWorker. -func (in *AWSMachineDeploymentStatusProviderWorker) DeepCopy() *AWSMachineDeploymentStatusProviderWorker { - if in == nil { - return nil - } - out := new(AWSMachineDeploymentStatusProviderWorker) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CommonClusterStatus) DeepCopyInto(out *CommonClusterStatus) { - *out = *in - if in.Conditions != nil { - in, out := &in.Conditions, &out.Conditions - *out = make([]CommonClusterStatusCondition, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Versions != nil { - in, out := &in.Versions, &out.Versions - *out = make([]CommonClusterStatusVersion, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CommonClusterStatus. -func (in *CommonClusterStatus) DeepCopy() *CommonClusterStatus { - if in == nil { - return nil - } - out := new(CommonClusterStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CommonClusterStatusCondition) DeepCopyInto(out *CommonClusterStatusCondition) { - *out = *in - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CommonClusterStatusCondition. -func (in *CommonClusterStatusCondition) DeepCopy() *CommonClusterStatusCondition { - if in == nil { - return nil - } - out := new(CommonClusterStatusCondition) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CommonClusterStatusVersion) DeepCopyInto(out *CommonClusterStatusVersion) { - *out = *in - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CommonClusterStatusVersion. -func (in *CommonClusterStatusVersion) DeepCopy() *CommonClusterStatusVersion { - if in == nil { - return nil - } - out := new(CommonClusterStatusVersion) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *G8sControlPlane) DeepCopyInto(out *G8sControlPlane) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - out.Spec = in.Spec - out.Status = in.Status - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new G8sControlPlane. -func (in *G8sControlPlane) DeepCopy() *G8sControlPlane { - if in == nil { - return nil - } - out := new(G8sControlPlane) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *G8sControlPlane) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *G8sControlPlaneList) DeepCopyInto(out *G8sControlPlaneList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]G8sControlPlane, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new G8sControlPlaneList. -func (in *G8sControlPlaneList) DeepCopy() *G8sControlPlaneList { - if in == nil { - return nil - } - out := new(G8sControlPlaneList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *G8sControlPlaneList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *G8sControlPlaneSpec) DeepCopyInto(out *G8sControlPlaneSpec) { - *out = *in - out.InfrastructureRef = in.InfrastructureRef - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new G8sControlPlaneSpec. -func (in *G8sControlPlaneSpec) DeepCopy() *G8sControlPlaneSpec { - if in == nil { - return nil - } - out := new(G8sControlPlaneSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *G8sControlPlaneStatus) DeepCopyInto(out *G8sControlPlaneStatus) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new G8sControlPlaneStatus. -func (in *G8sControlPlaneStatus) DeepCopy() *G8sControlPlaneStatus { - if in == nil { - return nil - } - out := new(G8sControlPlaneStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodNetworkRange) DeepCopyInto(out *PodNetworkRange) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodNetworkRange. -func (in *PodNetworkRange) DeepCopy() *PodNetworkRange { - if in == nil { - return nil - } - out := new(PodNetworkRange) - in.DeepCopyInto(out) - return out -} diff --git a/github/giantswarm/apiextensions/pkg/apis/provider/v1alpha1/zz_generated.deepcopy.go b/github/giantswarm/apiextensions/pkg/apis/provider/v1alpha1/zz_generated.deepcopy.go deleted file mode 100644 index 7fce2c74e..000000000 --- a/github/giantswarm/apiextensions/pkg/apis/provider/v1alpha1/zz_generated.deepcopy.go +++ /dev/null @@ -1,1580 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2020 Giant Swarm GmbH. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - net "net" - - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfig) DeepCopyInto(out *AWSConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfig. -func (in *AWSConfig) DeepCopy() *AWSConfig { - if in == nil { - return nil - } - out := new(AWSConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *AWSConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigList) DeepCopyInto(out *AWSConfigList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]AWSConfig, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigList. -func (in *AWSConfigList) DeepCopy() *AWSConfigList { - if in == nil { - return nil - } - out := new(AWSConfigList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *AWSConfigList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigSpec) DeepCopyInto(out *AWSConfigSpec) { - *out = *in - in.Cluster.DeepCopyInto(&out.Cluster) - in.AWS.DeepCopyInto(&out.AWS) - out.VersionBundle = in.VersionBundle - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpec. -func (in *AWSConfigSpec) DeepCopy() *AWSConfigSpec { - if in == nil { - return nil - } - out := new(AWSConfigSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigSpecAWS) DeepCopyInto(out *AWSConfigSpecAWS) { - *out = *in - out.API = in.API - out.CredentialSecret = in.CredentialSecret - out.Etcd = in.Etcd - out.HostedZones = in.HostedZones - out.Ingress = in.Ingress - if in.Masters != nil { - in, out := &in.Masters, &out.Masters - *out = make([]AWSConfigSpecAWSNode, len(*in)) - copy(*out, *in) - } - in.VPC.DeepCopyInto(&out.VPC) - if in.Workers != nil { - in, out := &in.Workers, &out.Workers - *out = make([]AWSConfigSpecAWSNode, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWS. -func (in *AWSConfigSpecAWS) DeepCopy() *AWSConfigSpecAWS { - if in == nil { - return nil - } - out := new(AWSConfigSpecAWS) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigSpecAWSAPI) DeepCopyInto(out *AWSConfigSpecAWSAPI) { - *out = *in - out.ELB = in.ELB - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWSAPI. -func (in *AWSConfigSpecAWSAPI) DeepCopy() *AWSConfigSpecAWSAPI { - if in == nil { - return nil - } - out := new(AWSConfigSpecAWSAPI) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigSpecAWSAPIELB) DeepCopyInto(out *AWSConfigSpecAWSAPIELB) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWSAPIELB. -func (in *AWSConfigSpecAWSAPIELB) DeepCopy() *AWSConfigSpecAWSAPIELB { - if in == nil { - return nil - } - out := new(AWSConfigSpecAWSAPIELB) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigSpecAWSEtcd) DeepCopyInto(out *AWSConfigSpecAWSEtcd) { - *out = *in - out.ELB = in.ELB - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWSEtcd. -func (in *AWSConfigSpecAWSEtcd) DeepCopy() *AWSConfigSpecAWSEtcd { - if in == nil { - return nil - } - out := new(AWSConfigSpecAWSEtcd) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigSpecAWSEtcdELB) DeepCopyInto(out *AWSConfigSpecAWSEtcdELB) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWSEtcdELB. -func (in *AWSConfigSpecAWSEtcdELB) DeepCopy() *AWSConfigSpecAWSEtcdELB { - if in == nil { - return nil - } - out := new(AWSConfigSpecAWSEtcdELB) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigSpecAWSHostedZones) DeepCopyInto(out *AWSConfigSpecAWSHostedZones) { - *out = *in - out.API = in.API - out.Etcd = in.Etcd - out.Ingress = in.Ingress - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWSHostedZones. -func (in *AWSConfigSpecAWSHostedZones) DeepCopy() *AWSConfigSpecAWSHostedZones { - if in == nil { - return nil - } - out := new(AWSConfigSpecAWSHostedZones) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigSpecAWSHostedZonesZone) DeepCopyInto(out *AWSConfigSpecAWSHostedZonesZone) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWSHostedZonesZone. -func (in *AWSConfigSpecAWSHostedZonesZone) DeepCopy() *AWSConfigSpecAWSHostedZonesZone { - if in == nil { - return nil - } - out := new(AWSConfigSpecAWSHostedZonesZone) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigSpecAWSIngress) DeepCopyInto(out *AWSConfigSpecAWSIngress) { - *out = *in - out.ELB = in.ELB - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWSIngress. -func (in *AWSConfigSpecAWSIngress) DeepCopy() *AWSConfigSpecAWSIngress { - if in == nil { - return nil - } - out := new(AWSConfigSpecAWSIngress) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigSpecAWSIngressELB) DeepCopyInto(out *AWSConfigSpecAWSIngressELB) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWSIngressELB. -func (in *AWSConfigSpecAWSIngressELB) DeepCopy() *AWSConfigSpecAWSIngressELB { - if in == nil { - return nil - } - out := new(AWSConfigSpecAWSIngressELB) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigSpecAWSNode) DeepCopyInto(out *AWSConfigSpecAWSNode) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWSNode. -func (in *AWSConfigSpecAWSNode) DeepCopy() *AWSConfigSpecAWSNode { - if in == nil { - return nil - } - out := new(AWSConfigSpecAWSNode) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigSpecAWSVPC) DeepCopyInto(out *AWSConfigSpecAWSVPC) { - *out = *in - if in.RouteTableNames != nil { - in, out := &in.RouteTableNames, &out.RouteTableNames - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecAWSVPC. -func (in *AWSConfigSpecAWSVPC) DeepCopy() *AWSConfigSpecAWSVPC { - if in == nil { - return nil - } - out := new(AWSConfigSpecAWSVPC) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigSpecVersionBundle) DeepCopyInto(out *AWSConfigSpecVersionBundle) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigSpecVersionBundle. -func (in *AWSConfigSpecVersionBundle) DeepCopy() *AWSConfigSpecVersionBundle { - if in == nil { - return nil - } - out := new(AWSConfigSpecVersionBundle) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigStatus) DeepCopyInto(out *AWSConfigStatus) { - *out = *in - in.AWS.DeepCopyInto(&out.AWS) - in.Cluster.DeepCopyInto(&out.Cluster) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigStatus. -func (in *AWSConfigStatus) DeepCopy() *AWSConfigStatus { - if in == nil { - return nil - } - out := new(AWSConfigStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigStatusAWS) DeepCopyInto(out *AWSConfigStatusAWS) { - *out = *in - if in.AvailabilityZones != nil { - in, out := &in.AvailabilityZones, &out.AvailabilityZones - *out = make([]AWSConfigStatusAWSAvailabilityZone, len(*in)) - copy(*out, *in) - } - out.AutoScalingGroup = in.AutoScalingGroup - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigStatusAWS. -func (in *AWSConfigStatusAWS) DeepCopy() *AWSConfigStatusAWS { - if in == nil { - return nil - } - out := new(AWSConfigStatusAWS) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigStatusAWSAutoScalingGroup) DeepCopyInto(out *AWSConfigStatusAWSAutoScalingGroup) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigStatusAWSAutoScalingGroup. -func (in *AWSConfigStatusAWSAutoScalingGroup) DeepCopy() *AWSConfigStatusAWSAutoScalingGroup { - if in == nil { - return nil - } - out := new(AWSConfigStatusAWSAutoScalingGroup) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigStatusAWSAvailabilityZone) DeepCopyInto(out *AWSConfigStatusAWSAvailabilityZone) { - *out = *in - out.Subnet = in.Subnet - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigStatusAWSAvailabilityZone. -func (in *AWSConfigStatusAWSAvailabilityZone) DeepCopy() *AWSConfigStatusAWSAvailabilityZone { - if in == nil { - return nil - } - out := new(AWSConfigStatusAWSAvailabilityZone) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigStatusAWSAvailabilityZoneSubnet) DeepCopyInto(out *AWSConfigStatusAWSAvailabilityZoneSubnet) { - *out = *in - out.Private = in.Private - out.Public = in.Public - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigStatusAWSAvailabilityZoneSubnet. -func (in *AWSConfigStatusAWSAvailabilityZoneSubnet) DeepCopy() *AWSConfigStatusAWSAvailabilityZoneSubnet { - if in == nil { - return nil - } - out := new(AWSConfigStatusAWSAvailabilityZoneSubnet) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigStatusAWSAvailabilityZoneSubnetPrivate) DeepCopyInto(out *AWSConfigStatusAWSAvailabilityZoneSubnetPrivate) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigStatusAWSAvailabilityZoneSubnetPrivate. -func (in *AWSConfigStatusAWSAvailabilityZoneSubnetPrivate) DeepCopy() *AWSConfigStatusAWSAvailabilityZoneSubnetPrivate { - if in == nil { - return nil - } - out := new(AWSConfigStatusAWSAvailabilityZoneSubnetPrivate) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSConfigStatusAWSAvailabilityZoneSubnetPublic) DeepCopyInto(out *AWSConfigStatusAWSAvailabilityZoneSubnetPublic) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSConfigStatusAWSAvailabilityZoneSubnetPublic. -func (in *AWSConfigStatusAWSAvailabilityZoneSubnetPublic) DeepCopy() *AWSConfigStatusAWSAvailabilityZoneSubnetPublic { - if in == nil { - return nil - } - out := new(AWSConfigStatusAWSAvailabilityZoneSubnetPublic) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureConfig) DeepCopyInto(out *AzureConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfig. -func (in *AzureConfig) DeepCopy() *AzureConfig { - if in == nil { - return nil - } - out := new(AzureConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *AzureConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureConfigList) DeepCopyInto(out *AzureConfigList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]AzureConfig, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigList. -func (in *AzureConfigList) DeepCopy() *AzureConfigList { - if in == nil { - return nil - } - out := new(AzureConfigList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *AzureConfigList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureConfigSpec) DeepCopyInto(out *AzureConfigSpec) { - *out = *in - in.Cluster.DeepCopyInto(&out.Cluster) - in.Azure.DeepCopyInto(&out.Azure) - out.VersionBundle = in.VersionBundle - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigSpec. -func (in *AzureConfigSpec) DeepCopy() *AzureConfigSpec { - if in == nil { - return nil - } - out := new(AzureConfigSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureConfigSpecAzure) DeepCopyInto(out *AzureConfigSpecAzure) { - *out = *in - if in.AvailabilityZones != nil { - in, out := &in.AvailabilityZones, &out.AvailabilityZones - *out = make([]int, len(*in)) - copy(*out, *in) - } - out.CredentialSecret = in.CredentialSecret - out.DNSZones = in.DNSZones - if in.Masters != nil { - in, out := &in.Masters, &out.Masters - *out = make([]AzureConfigSpecAzureNode, len(*in)) - copy(*out, *in) - } - out.VirtualNetwork = in.VirtualNetwork - if in.Workers != nil { - in, out := &in.Workers, &out.Workers - *out = make([]AzureConfigSpecAzureNode, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigSpecAzure. -func (in *AzureConfigSpecAzure) DeepCopy() *AzureConfigSpecAzure { - if in == nil { - return nil - } - out := new(AzureConfigSpecAzure) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureConfigSpecAzureDNSZones) DeepCopyInto(out *AzureConfigSpecAzureDNSZones) { - *out = *in - out.API = in.API - out.Etcd = in.Etcd - out.Ingress = in.Ingress - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigSpecAzureDNSZones. -func (in *AzureConfigSpecAzureDNSZones) DeepCopy() *AzureConfigSpecAzureDNSZones { - if in == nil { - return nil - } - out := new(AzureConfigSpecAzureDNSZones) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureConfigSpecAzureDNSZonesDNSZone) DeepCopyInto(out *AzureConfigSpecAzureDNSZonesDNSZone) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigSpecAzureDNSZonesDNSZone. -func (in *AzureConfigSpecAzureDNSZonesDNSZone) DeepCopy() *AzureConfigSpecAzureDNSZonesDNSZone { - if in == nil { - return nil - } - out := new(AzureConfigSpecAzureDNSZonesDNSZone) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureConfigSpecAzureNode) DeepCopyInto(out *AzureConfigSpecAzureNode) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigSpecAzureNode. -func (in *AzureConfigSpecAzureNode) DeepCopy() *AzureConfigSpecAzureNode { - if in == nil { - return nil - } - out := new(AzureConfigSpecAzureNode) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureConfigSpecAzureVirtualNetwork) DeepCopyInto(out *AzureConfigSpecAzureVirtualNetwork) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigSpecAzureVirtualNetwork. -func (in *AzureConfigSpecAzureVirtualNetwork) DeepCopy() *AzureConfigSpecAzureVirtualNetwork { - if in == nil { - return nil - } - out := new(AzureConfigSpecAzureVirtualNetwork) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureConfigSpecVersionBundle) DeepCopyInto(out *AzureConfigSpecVersionBundle) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigSpecVersionBundle. -func (in *AzureConfigSpecVersionBundle) DeepCopy() *AzureConfigSpecVersionBundle { - if in == nil { - return nil - } - out := new(AzureConfigSpecVersionBundle) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureConfigStatus) DeepCopyInto(out *AzureConfigStatus) { - *out = *in - in.Cluster.DeepCopyInto(&out.Cluster) - in.Provider.DeepCopyInto(&out.Provider) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigStatus. -func (in *AzureConfigStatus) DeepCopy() *AzureConfigStatus { - if in == nil { - return nil - } - out := new(AzureConfigStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureConfigStatusProvider) DeepCopyInto(out *AzureConfigStatusProvider) { - *out = *in - if in.AvailabilityZones != nil { - in, out := &in.AvailabilityZones, &out.AvailabilityZones - *out = make([]int, len(*in)) - copy(*out, *in) - } - out.Ingress = in.Ingress - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigStatusProvider. -func (in *AzureConfigStatusProvider) DeepCopy() *AzureConfigStatusProvider { - if in == nil { - return nil - } - out := new(AzureConfigStatusProvider) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureConfigStatusProviderIngress) DeepCopyInto(out *AzureConfigStatusProviderIngress) { - *out = *in - out.LoadBalancer = in.LoadBalancer - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigStatusProviderIngress. -func (in *AzureConfigStatusProviderIngress) DeepCopy() *AzureConfigStatusProviderIngress { - if in == nil { - return nil - } - out := new(AzureConfigStatusProviderIngress) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureConfigStatusProviderIngressLoadBalancer) DeepCopyInto(out *AzureConfigStatusProviderIngressLoadBalancer) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureConfigStatusProviderIngressLoadBalancer. -func (in *AzureConfigStatusProviderIngressLoadBalancer) DeepCopy() *AzureConfigStatusProviderIngressLoadBalancer { - if in == nil { - return nil - } - out := new(AzureConfigStatusProviderIngressLoadBalancer) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Cluster) DeepCopyInto(out *Cluster) { - *out = *in - out.Calico = in.Calico - out.Customer = in.Customer - out.Docker = in.Docker - out.Etcd = in.Etcd - in.Kubernetes.DeepCopyInto(&out.Kubernetes) - if in.Masters != nil { - in, out := &in.Masters, &out.Masters - *out = make([]ClusterNode, len(*in)) - copy(*out, *in) - } - out.Scaling = in.Scaling - if in.Workers != nil { - in, out := &in.Workers, &out.Workers - *out = make([]ClusterNode, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Cluster. -func (in *Cluster) DeepCopy() *Cluster { - if in == nil { - return nil - } - out := new(Cluster) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterCalico) DeepCopyInto(out *ClusterCalico) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterCalico. -func (in *ClusterCalico) DeepCopy() *ClusterCalico { - if in == nil { - return nil - } - out := new(ClusterCalico) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterCustomer) DeepCopyInto(out *ClusterCustomer) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterCustomer. -func (in *ClusterCustomer) DeepCopy() *ClusterCustomer { - if in == nil { - return nil - } - out := new(ClusterCustomer) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterDocker) DeepCopyInto(out *ClusterDocker) { - *out = *in - out.Daemon = in.Daemon - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterDocker. -func (in *ClusterDocker) DeepCopy() *ClusterDocker { - if in == nil { - return nil - } - out := new(ClusterDocker) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterDockerDaemon) DeepCopyInto(out *ClusterDockerDaemon) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterDockerDaemon. -func (in *ClusterDockerDaemon) DeepCopy() *ClusterDockerDaemon { - if in == nil { - return nil - } - out := new(ClusterDockerDaemon) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterEtcd) DeepCopyInto(out *ClusterEtcd) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterEtcd. -func (in *ClusterEtcd) DeepCopy() *ClusterEtcd { - if in == nil { - return nil - } - out := new(ClusterEtcd) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterKubernetes) DeepCopyInto(out *ClusterKubernetes) { - *out = *in - out.API = in.API - in.DNS.DeepCopyInto(&out.DNS) - out.IngressController = in.IngressController - out.Kubelet = in.Kubelet - out.NetworkSetup = in.NetworkSetup - in.SSH.DeepCopyInto(&out.SSH) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetes. -func (in *ClusterKubernetes) DeepCopy() *ClusterKubernetes { - if in == nil { - return nil - } - out := new(ClusterKubernetes) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterKubernetesAPI) DeepCopyInto(out *ClusterKubernetesAPI) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetesAPI. -func (in *ClusterKubernetesAPI) DeepCopy() *ClusterKubernetesAPI { - if in == nil { - return nil - } - out := new(ClusterKubernetesAPI) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterKubernetesDNS) DeepCopyInto(out *ClusterKubernetesDNS) { - *out = *in - if in.IP != nil { - in, out := &in.IP, &out.IP - *out = make(net.IP, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetesDNS. -func (in *ClusterKubernetesDNS) DeepCopy() *ClusterKubernetesDNS { - if in == nil { - return nil - } - out := new(ClusterKubernetesDNS) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterKubernetesIngressController) DeepCopyInto(out *ClusterKubernetesIngressController) { - *out = *in - out.Docker = in.Docker - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetesIngressController. -func (in *ClusterKubernetesIngressController) DeepCopy() *ClusterKubernetesIngressController { - if in == nil { - return nil - } - out := new(ClusterKubernetesIngressController) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterKubernetesIngressControllerDocker) DeepCopyInto(out *ClusterKubernetesIngressControllerDocker) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetesIngressControllerDocker. -func (in *ClusterKubernetesIngressControllerDocker) DeepCopy() *ClusterKubernetesIngressControllerDocker { - if in == nil { - return nil - } - out := new(ClusterKubernetesIngressControllerDocker) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterKubernetesKubelet) DeepCopyInto(out *ClusterKubernetesKubelet) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetesKubelet. -func (in *ClusterKubernetesKubelet) DeepCopy() *ClusterKubernetesKubelet { - if in == nil { - return nil - } - out := new(ClusterKubernetesKubelet) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterKubernetesNetworkSetup) DeepCopyInto(out *ClusterKubernetesNetworkSetup) { - *out = *in - out.Docker = in.Docker - out.KubeProxy = in.KubeProxy - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetesNetworkSetup. -func (in *ClusterKubernetesNetworkSetup) DeepCopy() *ClusterKubernetesNetworkSetup { - if in == nil { - return nil - } - out := new(ClusterKubernetesNetworkSetup) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterKubernetesNetworkSetupDocker) DeepCopyInto(out *ClusterKubernetesNetworkSetupDocker) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetesNetworkSetupDocker. -func (in *ClusterKubernetesNetworkSetupDocker) DeepCopy() *ClusterKubernetesNetworkSetupDocker { - if in == nil { - return nil - } - out := new(ClusterKubernetesNetworkSetupDocker) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterKubernetesNetworkSetupKubeProxy) DeepCopyInto(out *ClusterKubernetesNetworkSetupKubeProxy) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetesNetworkSetupKubeProxy. -func (in *ClusterKubernetesNetworkSetupKubeProxy) DeepCopy() *ClusterKubernetesNetworkSetupKubeProxy { - if in == nil { - return nil - } - out := new(ClusterKubernetesNetworkSetupKubeProxy) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterKubernetesSSH) DeepCopyInto(out *ClusterKubernetesSSH) { - *out = *in - if in.UserList != nil { - in, out := &in.UserList, &out.UserList - *out = make([]ClusterKubernetesSSHUser, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetesSSH. -func (in *ClusterKubernetesSSH) DeepCopy() *ClusterKubernetesSSH { - if in == nil { - return nil - } - out := new(ClusterKubernetesSSH) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterKubernetesSSHUser) DeepCopyInto(out *ClusterKubernetesSSHUser) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterKubernetesSSHUser. -func (in *ClusterKubernetesSSHUser) DeepCopy() *ClusterKubernetesSSHUser { - if in == nil { - return nil - } - out := new(ClusterKubernetesSSHUser) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterNode) DeepCopyInto(out *ClusterNode) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterNode. -func (in *ClusterNode) DeepCopy() *ClusterNode { - if in == nil { - return nil - } - out := new(ClusterNode) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterScaling) DeepCopyInto(out *ClusterScaling) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterScaling. -func (in *ClusterScaling) DeepCopy() *ClusterScaling { - if in == nil { - return nil - } - out := new(ClusterScaling) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CredentialSecret) DeepCopyInto(out *CredentialSecret) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CredentialSecret. -func (in *CredentialSecret) DeepCopy() *CredentialSecret { - if in == nil { - return nil - } - out := new(CredentialSecret) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMConfig) DeepCopyInto(out *KVMConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfig. -func (in *KVMConfig) DeepCopy() *KVMConfig { - if in == nil { - return nil - } - out := new(KVMConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *KVMConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMConfigList) DeepCopyInto(out *KVMConfigList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]KVMConfig, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigList. -func (in *KVMConfigList) DeepCopy() *KVMConfigList { - if in == nil { - return nil - } - out := new(KVMConfigList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *KVMConfigList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMConfigSpec) DeepCopyInto(out *KVMConfigSpec) { - *out = *in - in.Cluster.DeepCopyInto(&out.Cluster) - in.KVM.DeepCopyInto(&out.KVM) - out.VersionBundle = in.VersionBundle - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpec. -func (in *KVMConfigSpec) DeepCopy() *KVMConfigSpec { - if in == nil { - return nil - } - out := new(KVMConfigSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMConfigSpecKVM) DeepCopyInto(out *KVMConfigSpecKVM) { - *out = *in - out.EndpointUpdater = in.EndpointUpdater - out.K8sKVM = in.K8sKVM - if in.Masters != nil { - in, out := &in.Masters, &out.Masters - *out = make([]KVMConfigSpecKVMNode, len(*in)) - copy(*out, *in) - } - out.Network = in.Network - out.NodeController = in.NodeController - if in.PortMappings != nil { - in, out := &in.PortMappings, &out.PortMappings - *out = make([]KVMConfigSpecKVMPortMappings, len(*in)) - copy(*out, *in) - } - if in.Workers != nil { - in, out := &in.Workers, &out.Workers - *out = make([]KVMConfigSpecKVMNode, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVM. -func (in *KVMConfigSpecKVM) DeepCopy() *KVMConfigSpecKVM { - if in == nil { - return nil - } - out := new(KVMConfigSpecKVM) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMConfigSpecKVMEndpointUpdater) DeepCopyInto(out *KVMConfigSpecKVMEndpointUpdater) { - *out = *in - out.Docker = in.Docker - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVMEndpointUpdater. -func (in *KVMConfigSpecKVMEndpointUpdater) DeepCopy() *KVMConfigSpecKVMEndpointUpdater { - if in == nil { - return nil - } - out := new(KVMConfigSpecKVMEndpointUpdater) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMConfigSpecKVMEndpointUpdaterDocker) DeepCopyInto(out *KVMConfigSpecKVMEndpointUpdaterDocker) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVMEndpointUpdaterDocker. -func (in *KVMConfigSpecKVMEndpointUpdaterDocker) DeepCopy() *KVMConfigSpecKVMEndpointUpdaterDocker { - if in == nil { - return nil - } - out := new(KVMConfigSpecKVMEndpointUpdaterDocker) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMConfigSpecKVMK8sKVM) DeepCopyInto(out *KVMConfigSpecKVMK8sKVM) { - *out = *in - out.Docker = in.Docker - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVMK8sKVM. -func (in *KVMConfigSpecKVMK8sKVM) DeepCopy() *KVMConfigSpecKVMK8sKVM { - if in == nil { - return nil - } - out := new(KVMConfigSpecKVMK8sKVM) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMConfigSpecKVMK8sKVMDocker) DeepCopyInto(out *KVMConfigSpecKVMK8sKVMDocker) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVMK8sKVMDocker. -func (in *KVMConfigSpecKVMK8sKVMDocker) DeepCopy() *KVMConfigSpecKVMK8sKVMDocker { - if in == nil { - return nil - } - out := new(KVMConfigSpecKVMK8sKVMDocker) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMConfigSpecKVMNetwork) DeepCopyInto(out *KVMConfigSpecKVMNetwork) { - *out = *in - out.Flannel = in.Flannel - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVMNetwork. -func (in *KVMConfigSpecKVMNetwork) DeepCopy() *KVMConfigSpecKVMNetwork { - if in == nil { - return nil - } - out := new(KVMConfigSpecKVMNetwork) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMConfigSpecKVMNetworkFlannel) DeepCopyInto(out *KVMConfigSpecKVMNetworkFlannel) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVMNetworkFlannel. -func (in *KVMConfigSpecKVMNetworkFlannel) DeepCopy() *KVMConfigSpecKVMNetworkFlannel { - if in == nil { - return nil - } - out := new(KVMConfigSpecKVMNetworkFlannel) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMConfigSpecKVMNode) DeepCopyInto(out *KVMConfigSpecKVMNode) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVMNode. -func (in *KVMConfigSpecKVMNode) DeepCopy() *KVMConfigSpecKVMNode { - if in == nil { - return nil - } - out := new(KVMConfigSpecKVMNode) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMConfigSpecKVMNodeController) DeepCopyInto(out *KVMConfigSpecKVMNodeController) { - *out = *in - out.Docker = in.Docker - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVMNodeController. -func (in *KVMConfigSpecKVMNodeController) DeepCopy() *KVMConfigSpecKVMNodeController { - if in == nil { - return nil - } - out := new(KVMConfigSpecKVMNodeController) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMConfigSpecKVMNodeControllerDocker) DeepCopyInto(out *KVMConfigSpecKVMNodeControllerDocker) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVMNodeControllerDocker. -func (in *KVMConfigSpecKVMNodeControllerDocker) DeepCopy() *KVMConfigSpecKVMNodeControllerDocker { - if in == nil { - return nil - } - out := new(KVMConfigSpecKVMNodeControllerDocker) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMConfigSpecKVMPortMappings) DeepCopyInto(out *KVMConfigSpecKVMPortMappings) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecKVMPortMappings. -func (in *KVMConfigSpecKVMPortMappings) DeepCopy() *KVMConfigSpecKVMPortMappings { - if in == nil { - return nil - } - out := new(KVMConfigSpecKVMPortMappings) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMConfigSpecVersionBundle) DeepCopyInto(out *KVMConfigSpecVersionBundle) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigSpecVersionBundle. -func (in *KVMConfigSpecVersionBundle) DeepCopy() *KVMConfigSpecVersionBundle { - if in == nil { - return nil - } - out := new(KVMConfigSpecVersionBundle) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMConfigStatus) DeepCopyInto(out *KVMConfigStatus) { - *out = *in - in.Cluster.DeepCopyInto(&out.Cluster) - in.KVM.DeepCopyInto(&out.KVM) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigStatus. -func (in *KVMConfigStatus) DeepCopy() *KVMConfigStatus { - if in == nil { - return nil - } - out := new(KVMConfigStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KVMConfigStatusKVM) DeepCopyInto(out *KVMConfigStatusKVM) { - *out = *in - if in.NodeIndexes != nil { - in, out := &in.NodeIndexes, &out.NodeIndexes - *out = make(map[string]int, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KVMConfigStatusKVM. -func (in *KVMConfigStatusKVM) DeepCopy() *KVMConfigStatusKVM { - if in == nil { - return nil - } - out := new(KVMConfigStatusKVM) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *StatusCluster) DeepCopyInto(out *StatusCluster) { - *out = *in - if in.Conditions != nil { - in, out := &in.Conditions, &out.Conditions - *out = make([]StatusClusterCondition, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - out.Network = in.Network - if in.Nodes != nil { - in, out := &in.Nodes, &out.Nodes - *out = make([]StatusClusterNode, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Resources != nil { - in, out := &in.Resources, &out.Resources - *out = make([]StatusClusterResource, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - out.Scaling = in.Scaling - if in.Versions != nil { - in, out := &in.Versions, &out.Versions - *out = make([]StatusClusterVersion, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatusCluster. -func (in *StatusCluster) DeepCopy() *StatusCluster { - if in == nil { - return nil - } - out := new(StatusCluster) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *StatusClusterCondition) DeepCopyInto(out *StatusClusterCondition) { - *out = *in - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatusClusterCondition. -func (in *StatusClusterCondition) DeepCopy() *StatusClusterCondition { - if in == nil { - return nil - } - out := new(StatusClusterCondition) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *StatusClusterNetwork) DeepCopyInto(out *StatusClusterNetwork) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatusClusterNetwork. -func (in *StatusClusterNetwork) DeepCopy() *StatusClusterNetwork { - if in == nil { - return nil - } - out := new(StatusClusterNetwork) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *StatusClusterNode) DeepCopyInto(out *StatusClusterNode) { - *out = *in - if in.Labels != nil { - in, out := &in.Labels, &out.Labels - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatusClusterNode. -func (in *StatusClusterNode) DeepCopy() *StatusClusterNode { - if in == nil { - return nil - } - out := new(StatusClusterNode) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *StatusClusterResource) DeepCopyInto(out *StatusClusterResource) { - *out = *in - if in.Conditions != nil { - in, out := &in.Conditions, &out.Conditions - *out = make([]StatusClusterResourceCondition, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatusClusterResource. -func (in *StatusClusterResource) DeepCopy() *StatusClusterResource { - if in == nil { - return nil - } - out := new(StatusClusterResource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *StatusClusterResourceCondition) DeepCopyInto(out *StatusClusterResourceCondition) { - *out = *in - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatusClusterResourceCondition. -func (in *StatusClusterResourceCondition) DeepCopy() *StatusClusterResourceCondition { - if in == nil { - return nil - } - out := new(StatusClusterResourceCondition) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *StatusClusterScaling) DeepCopyInto(out *StatusClusterScaling) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatusClusterScaling. -func (in *StatusClusterScaling) DeepCopy() *StatusClusterScaling { - if in == nil { - return nil - } - out := new(StatusClusterScaling) - in.DeepCopyInto(out) - return out -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StatusClusterVersion. -func (in *StatusClusterVersion) DeepCopy() *StatusClusterVersion { - if in == nil { - return nil - } - out := new(StatusClusterVersion) - in.DeepCopyInto(out) - return out -} diff --git a/github/giantswarm/apiextensions/pkg/apis/release/v1alpha1/zz_generated.deepcopy.go b/github/giantswarm/apiextensions/pkg/apis/release/v1alpha1/zz_generated.deepcopy.go deleted file mode 100644 index 858091fee..000000000 --- a/github/giantswarm/apiextensions/pkg/apis/release/v1alpha1/zz_generated.deepcopy.go +++ /dev/null @@ -1,259 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2020 Giant Swarm GmbH. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1alpha1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DeepCopyDate) DeepCopyInto(out *DeepCopyDate) { - *out = *in - in.Time.DeepCopyInto(&out.Time) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeepCopyDate. -func (in *DeepCopyDate) DeepCopy() *DeepCopyDate { - if in == nil { - return nil - } - out := new(DeepCopyDate) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Release) DeepCopyInto(out *Release) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Release. -func (in *Release) DeepCopy() *Release { - if in == nil { - return nil - } - out := new(Release) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *Release) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ReleaseCycle) DeepCopyInto(out *ReleaseCycle) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - out.Status = in.Status - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseCycle. -func (in *ReleaseCycle) DeepCopy() *ReleaseCycle { - if in == nil { - return nil - } - out := new(ReleaseCycle) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ReleaseCycle) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ReleaseCycleList) DeepCopyInto(out *ReleaseCycleList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]ReleaseCycle, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseCycleList. -func (in *ReleaseCycleList) DeepCopy() *ReleaseCycleList { - if in == nil { - return nil - } - out := new(ReleaseCycleList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ReleaseCycleList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ReleaseCycleSpec) DeepCopyInto(out *ReleaseCycleSpec) { - *out = *in - in.DisabledDate.DeepCopyInto(&out.DisabledDate) - in.EnabledDate.DeepCopyInto(&out.EnabledDate) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseCycleSpec. -func (in *ReleaseCycleSpec) DeepCopy() *ReleaseCycleSpec { - if in == nil { - return nil - } - out := new(ReleaseCycleSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ReleaseCycleStatus) DeepCopyInto(out *ReleaseCycleStatus) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseCycleStatus. -func (in *ReleaseCycleStatus) DeepCopy() *ReleaseCycleStatus { - if in == nil { - return nil - } - out := new(ReleaseCycleStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ReleaseList) DeepCopyInto(out *ReleaseList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]Release, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseList. -func (in *ReleaseList) DeepCopy() *ReleaseList { - if in == nil { - return nil - } - out := new(ReleaseList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ReleaseList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ReleaseSpec) DeepCopyInto(out *ReleaseSpec) { - *out = *in - if in.Apps != nil { - in, out := &in.Apps, &out.Apps - *out = make([]ReleaseSpecApp, len(*in)) - copy(*out, *in) - } - if in.Components != nil { - in, out := &in.Components, &out.Components - *out = make([]ReleaseSpecComponent, len(*in)) - copy(*out, *in) - } - if in.Date != nil { - in, out := &in.Date, &out.Date - *out = (*in).DeepCopy() - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseSpec. -func (in *ReleaseSpec) DeepCopy() *ReleaseSpec { - if in == nil { - return nil - } - out := new(ReleaseSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ReleaseSpecApp) DeepCopyInto(out *ReleaseSpecApp) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseSpecApp. -func (in *ReleaseSpecApp) DeepCopy() *ReleaseSpecApp { - if in == nil { - return nil - } - out := new(ReleaseSpecApp) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ReleaseSpecComponent) DeepCopyInto(out *ReleaseSpecComponent) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseSpecComponent. -func (in *ReleaseSpecComponent) DeepCopy() *ReleaseSpecComponent { - if in == nil { - return nil - } - out := new(ReleaseSpecComponent) - in.DeepCopyInto(out) - return out -} From 0e513eeb729fa7f2e03adccceece908c384cbf73 Mon Sep 17 00:00:00 2001 From: Tim Schindler Date: Thu, 16 Apr 2020 15:57:03 +0200 Subject: [PATCH 4/5] make work all the things --- .../application.giantswarm.io_charts.yaml | 53 +++---- ...ucture.giantswarm.io_g8scontrolplanes.yaml | 17 ++- ...ure.giantswarm.io_v1alpha2_awscluster.yaml | 2 + docs/crd/application.giantswarm.io_chart.yaml | 130 +++++++++++++----- ...ructure.giantswarm.io_g8scontrolplane.yaml | 81 ++++++++--- go.mod | 1 - .../v1alpha2/aws_cluster_types.go | 6 +- .../v1alpha2/aws_cluster_types_test.go | 3 + .../v1alpha2/g8s_control_plane_types.go | 1 + pkg/apis/release/v1alpha1/release_types.go | 1 - pkg/crd/pkged.go | 2 +- scripts/gen.sh | 3 + 12 files changed, 202 insertions(+), 98 deletions(-) diff --git a/config/crd/bases/application.giantswarm.io_charts.yaml b/config/crd/bases/application.giantswarm.io_charts.yaml index 6dba2728c..5f73b2117 100644 --- a/config/crd/bases/application.giantswarm.io_charts.yaml +++ b/config/crd/bases/application.giantswarm.io_charts.yaml @@ -17,9 +17,6 @@ spec: scope: Namespaced validation: openAPIV3Schema: - description: | - Defines a Chart resource, which represents an application version running on the cluster. - This resource is created and managed by chart-operator running in each tenant cluster. properties: apiVersion: description: 'APIVersion defines the versioned schema of this representation @@ -36,25 +33,19 @@ spec: spec: properties: config: - description: | - Defines the aggregated configuration values for the application chart. It is - created by app-operator in the tenant cluster to be used as values file by - chart operator during the helm installation process. - proccess. + description: Config is the config to be applied when the chart is deployed. properties: configMap: - description: | - Defines a reference to a ConfigMap where is the aggregated configuration values - from App Catalog, Cluster and User that will be used as values file in the helm - installation or upgrade process. + description: ConfigMap references a config map containing values + that should be applied to the chart. properties: name: - description: | - Name of the ConfigMap resource. + description: Name is the name of the config map containing chart + values to apply, e.g. prometheus-chart-values. type: string namespace: - description: | - Namespace holding the ConfigMap resource. + description: Namespace is the namespace of the values config + map, e.g. monitoring. type: string resourceVersion: description: ResourceVersion is the Kubernetes resource version @@ -67,17 +58,16 @@ spec: - resourceVersion type: object secret: - description: | - Defines a reference to a Secret where is the aggregated configuration values from App Catalog, Cluster and User that will be used as values file in the helm - installation or upgrade process. + description: Secret references a secret containing secret values + that should be applied to the chart. properties: name: - description: | - Name of the Secret resource. + description: Name is the name of the secret containing chart + values to apply, e.g. prometheus-chart-secret. type: string namespace: - description: | - Namespace holding the Secret resource. + description: Namespace is the namespace of the secret, e.g. + kube-system. type: string resourceVersion: description: ResourceVersion is the Kubernetes resource version @@ -94,21 +84,20 @@ spec: - secret type: object name: - description: Name of this application Chart. + description: Name is the name of the Helm chart to be deployed. e.g. + kubernetes-prometheus type: string namespace: - description: | - Kubernetes namespace in which to install the workloads defined by this App Chart in - the current cluster. + description: Namespace is the namespace where the chart should be deployed. + e.g. monitoring type: string tarballURL: - description: | - URL of the application Chart to be deployed. The chart package must exist in the - App Catalog storage. + description: TarballURL is the URL for the Helm chart tarball to be + deployed. e.g. https://path/to/prom-1-0-0.tgz" type: string version: - description: | - Version of the application Chart to be deployed. + description: Version is the version of the chart that should be deployed. + e.g. 1.0.0 type: string required: - config diff --git a/config/crd/bases/infrastructure.giantswarm.io_g8scontrolplanes.yaml b/config/crd/bases/infrastructure.giantswarm.io_g8scontrolplanes.yaml index 8986635b3..6133224a1 100644 --- a/config/crd/bases/infrastructure.giantswarm.io_g8scontrolplanes.yaml +++ b/config/crd/bases/infrastructure.giantswarm.io_g8scontrolplanes.yaml @@ -19,10 +19,8 @@ spec: - name: v1alpha2 schema: openAPIV3Schema: - description: | - This resource represents an abstract control plane (Kubernetes master node and Etcd server) - of a tenant cluster in a Giant Swarm installation. It is reconciled by cluster-operator. - For implementation details it references a provider specific resource. + description: G8sControlPlane defines the Control Plane Nodes (Kubernetes Master + Nodes) of a Giant Swarm Tenant Cluster. properties: apiVersion: description: 'APIVersion defines the versioned schema of this representation @@ -39,9 +37,8 @@ spec: spec: properties: infrastructureRef: - description: | - Reference to an [AWSControlPlane](https://docs.giantswarm.io/reference/cp-k8s-api/awscontrolplanes.infrastructure.giantswarm.io/) - resource defining provider specific details for the c + description: InfrastructureRef is a required reference to provider-specific + Infrastructure. properties: apiVersion: description: API version of the referent. @@ -77,8 +74,7 @@ spec: type: string type: object replicas: - description: | - Number of master nodes and Etcd instances to set up. + description: Replicas is the number replicas of the master node. type: integer required: - infrastructureRef @@ -95,6 +91,9 @@ spec: replicas: description: Total number of non-terminated machines targeted by this control plane (their labels match the selector). + enum: + - 1 + - 3 format: int32 type: integer type: object diff --git a/docs/cr/infrastructure.giantswarm.io_v1alpha2_awscluster.yaml b/docs/cr/infrastructure.giantswarm.io_v1alpha2_awscluster.yaml index 469879aa5..6fd2479b1 100644 --- a/docs/cr/infrastructure.giantswarm.io_v1alpha2_awscluster.yaml +++ b/docs/cr/infrastructure.giantswarm.io_v1alpha2_awscluster.yaml @@ -23,4 +23,6 @@ spec: master: availabilityZone: eu-central-1b instanceType: m5.2xlarge + pods: + cidrBlock: 10.2.0.0/16 region: eu-central-1 diff --git a/docs/crd/application.giantswarm.io_chart.yaml b/docs/crd/application.giantswarm.io_chart.yaml index d170a2a44..8a056abe6 100644 --- a/docs/crd/application.giantswarm.io_chart.yaml +++ b/docs/crd/application.giantswarm.io_chart.yaml @@ -1,94 +1,156 @@ apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 creationTimestamp: null name: charts.application.giantswarm.io spec: group: application.giantswarm.io names: kind: Chart + listKind: ChartList plural: charts singular: chart scope: Namespaced - subresources: - status: {} validation: openAPIV3Schema: - description: | - Defines a Chart resource, which represents an application version running on the cluster. - This resource is created and managed by chart-operator running in each tenant cluster. properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object spec: properties: config: - description: "Defines the aggregated configuration values for the application - chart. It is \ncreated by app-operator in the tenant cluster to be - used as values file by \nchart operator during the helm installation - process.\nproccess. \n" + description: Config is the config to be applied when the chart is deployed. properties: configMap: - description: "Defines a reference to a ConfigMap where is the aggregated - configuration values \nfrom App Catalog, Cluster and User that - will be used as values file in the helm\ninstallation or upgrade - process.\n" + description: ConfigMap references a config map containing values + that should be applied to the chart. properties: name: - description: | - Name of the ConfigMap resource. + description: Name is the name of the config map containing chart + values to apply, e.g. prometheus-chart-values. type: string namespace: - description: | - Namespace holding the ConfigMap resource. + description: Namespace is the namespace of the values config + map, e.g. monitoring. type: string resourceVersion: + description: ResourceVersion is the Kubernetes resource version + of the configmap. Used to detect if the configmap has changed, + e.g. 12345. type: string required: - name - namespace + - resourceVersion type: object secret: - description: | - Defines a reference to a Secret where is the aggregated configuration values from App Catalog, Cluster and User that will be used as values file in the helm - installation or upgrade process. + description: Secret references a secret containing secret values + that should be applied to the chart. properties: name: - description: | - Name of the Secret resource. + description: Name is the name of the secret containing chart + values to apply, e.g. prometheus-chart-secret. type: string namespace: - description: | - Namespace holding the Secret resource. + description: Namespace is the namespace of the secret, e.g. + kube-system. type: string resourceVersion: + description: ResourceVersion is the Kubernetes resource version + of the secret. Used to detect if the secret has changed, e.g. + 12345. type: string required: - name - namespace + - resourceVersion type: object + required: + - configMap + - secret type: object name: - description: | - Name of this application Chart. + description: Name is the name of the Helm chart to be deployed. e.g. + kubernetes-prometheus type: string namespace: - description: | - Kubernetes namespace in which to install the workloads defined by this App Chart in - the current cluster. + description: Namespace is the namespace where the chart should be deployed. + e.g. monitoring type: string tarballURL: - description: "URL of the application Chart to be deployed. The chart - package must exist in the \nApp Catalog storage.\n" - format: uri + description: TarballURL is the URL for the Helm chart tarball to be + deployed. e.g. https://path/to/prom-1-0-0.tgz" type: string version: - description: | - Version of the application Chart to be deployed. + description: Version is the version of the chart that should be deployed. + e.g. 1.0.0 type: string required: + - config - name - namespace - tarballURL - version type: object + status: + properties: + appVersion: + description: AppVersion is the value of the AppVersion field in the + Chart.yaml of the deployed chart. This is an optional field with the + version of the component being deployed. e.g. 0.21.0. https://docs.helm.sh/developing_charts/#the-chart-yaml-file + type: string + reason: + description: Reason is the description of the last status of helm release + when the chart is not installed successfully, e.g. deploy resource + already exists. + type: string + release: + description: Release is the status of the Helm release for the deployed + chart. + properties: + lastDeployed: + description: LastDeployed is the time when the deployed chart was + last deployed. + format: date-time + type: string + revision: + description: Revision is the revision number for this deployed chart. + type: integer + status: + description: Status is the status of the deployed chart, e.g. DEPLOYED. + type: string + required: + - lastDeployed + - revision + - status + type: object + version: + description: Version is the value of the Version field in the Chart.yaml + of the deployed chart. e.g. 1.0.0. + type: string + required: + - appVersion + - release + - version + type: object + required: + - metadata + - spec type: object version: v1alpha1 + versions: + - name: v1alpha1 + served: true + storage: true diff --git a/docs/crd/infrastructure.giantswarm.io_g8scontrolplane.yaml b/docs/crd/infrastructure.giantswarm.io_g8scontrolplane.yaml index 132f51ff0..3a94430ec 100644 --- a/docs/crd/infrastructure.giantswarm.io_g8scontrolplane.yaml +++ b/docs/crd/infrastructure.giantswarm.io_g8scontrolplane.yaml @@ -1,55 +1,102 @@ -apiVersion: apiextensions.k8s.io/v1beta1 +apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.2.4 creationTimestamp: null name: g8scontrolplanes.infrastructure.giantswarm.io spec: - conversion: - strategy: None group: infrastructure.giantswarm.io names: kind: G8sControlPlane + listKind: G8sControlPlaneList plural: g8scontrolplanes singular: g8scontrolplane scope: Namespaced - subresources: - status: {} versions: - - name: v1alpha1 - served: false - storage: false - name: v1alpha2 schema: openAPIV3Schema: - description: | - This resource represents an abstract control plane (Kubernetes master node and Etcd server) - of a tenant cluster in a Giant Swarm installation. It is reconciled by cluster-operator. - For implementation details it references a provider specific resource. + description: G8sControlPlane defines the Control Plane Nodes (Kubernetes Master + Nodes) of a Giant Swarm Tenant Cluster. properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object spec: properties: infrastructureRef: - description: | - Reference to an [AWSControlPlane](https://docs.giantswarm.io/reference/cp-k8s-api/awscontrolplanes.infrastructure.giantswarm.io/) - resource defining provider specific details for the c + description: InfrastructureRef is a required reference to provider-specific + Infrastructure. properties: apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of + an entire object, this string should contain a valid JSON/Go + field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within + a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" + (container with index 2 in this pod). This syntax is chosen + only to have some well-defined way of referencing a part of + an object. TODO: this design is not final and this field is + subject to change in the future.' type: string kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' type: string namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference + is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' type: string type: object replicas: - description: | - Number of master nodes and Etcd instances to set up. + description: Replicas is the number replicas of the master node. + type: integer + required: + - infrastructureRef + - replicas + type: object + status: + description: G8sControlPlaneStatus defines the observed state of G8sControlPlane. + properties: + readyReplicas: + description: Total number of fully running and ready control plane + machines. + format: int32 + type: integer + replicas: + description: Total number of non-terminated machines targeted by this + control plane (their labels match the selector). enum: - 1 - 3 + format: int32 type: integer type: object + required: + - spec type: object served: true storage: true diff --git a/go.mod b/go.mod index ec721194f..0d75a4b47 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,6 @@ require ( github.com/go-openapi/errors v0.19.4 github.com/google/go-cmp v0.4.0 github.com/markbates/pkger v0.15.1 - golang.org/x/tools v0.0.0-20200415034506-5d8e1897c761 // indirect golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 // indirect golang.org/x/net v0.0.0-20200226121028-0de0cce0169b // indirect k8s.io/api v0.16.6 diff --git a/pkg/apis/infrastructure/v1alpha2/aws_cluster_types.go b/pkg/apis/infrastructure/v1alpha2/aws_cluster_types.go index 6372c7aeb..c26b2b2ab 100644 --- a/pkg/apis/infrastructure/v1alpha2/aws_cluster_types.go +++ b/pkg/apis/infrastructure/v1alpha2/aws_cluster_types.go @@ -95,7 +95,7 @@ type AWSClusterSpecProvider struct { Master AWSClusterSpecProviderMaster `json:"master" yaml:"master"` // Pod network configuration. // +kubebuilder:validation:Optional - Pods PodNetworkRange `json:"pods" yaml:"pods"` + Pods AWSClusterSpecProviderPods `json:"pods" yaml:"pods"` // Region is the AWS region the cluster is to be running in. Region string `json:"region" yaml:"region"` } @@ -117,8 +117,8 @@ type AWSClusterSpecProviderMaster struct { InstanceType string `json:"instanceType" yaml:"instanceType"` } -// AWSClusterSpecProviderMaster Pod network configuration. -type PodNetworkRange struct { +// AWSClusterSpecProviderPods Pod network configuration. +type AWSClusterSpecProviderPods struct { // Subnet size, expresses as the count of leading 1 bits in the subnet mask of this subnet. CIDRBlock string `json:"cidrBlock" yaml:"cidrBlock"` } diff --git a/pkg/apis/infrastructure/v1alpha2/aws_cluster_types_test.go b/pkg/apis/infrastructure/v1alpha2/aws_cluster_types_test.go index ea7fe7cc4..42fca1b7c 100644 --- a/pkg/apis/infrastructure/v1alpha2/aws_cluster_types_test.go +++ b/pkg/apis/infrastructure/v1alpha2/aws_cluster_types_test.go @@ -97,6 +97,9 @@ func newAWSClusterExampleCR() *AWSCluster { Name: "example-credential", Namespace: "example-namespace", }, + Pods: AWSClusterSpecProviderPods{ + CIDRBlock: "10.2.0.0/16", + }, Master: AWSClusterSpecProviderMaster{ AvailabilityZone: "eu-central-1b", InstanceType: "m5.2xlarge", diff --git a/pkg/apis/infrastructure/v1alpha2/g8s_control_plane_types.go b/pkg/apis/infrastructure/v1alpha2/g8s_control_plane_types.go index ec7c9f4d8..2b7984508 100644 --- a/pkg/apis/infrastructure/v1alpha2/g8s_control_plane_types.go +++ b/pkg/apis/infrastructure/v1alpha2/g8s_control_plane_types.go @@ -59,6 +59,7 @@ type G8sControlPlaneSpec struct { // G8sControlPlaneStatus defines the observed state of G8sControlPlane. type G8sControlPlaneStatus struct { + // +kubebuilder:validation:Enum=1;3 // Total number of non-terminated machines targeted by this control plane // (their labels match the selector). // +optional diff --git a/pkg/apis/release/v1alpha1/release_types.go b/pkg/apis/release/v1alpha1/release_types.go index 9f9b05641..898ac26cf 100644 --- a/pkg/apis/release/v1alpha1/release_types.go +++ b/pkg/apis/release/v1alpha1/release_types.go @@ -19,7 +19,6 @@ var ( stateActive ReleaseState = "active" // nolint stateDeprecated ReleaseState = "deprecated" // nolint stateWIP ReleaseState = "wip" // nolint - releaseCRD *apiextensionsv1beta1.CustomResourceDefinition ) func (r ReleaseState) String() string { diff --git a/pkg/crd/pkged.go b/pkg/crd/pkged.go index f5fde9f38..470a9e869 100644 --- a/pkg/crd/pkged.go +++ b/pkg/crd/pkged.go @@ -9,4 +9,4 @@ import ( "github.com/markbates/pkger/pkging/mem" ) -var _ = pkger.Apply(mem.UnmarshalEmbed([]byte(`1f8b08000000000000ffecbd6b93a248d72efc5776d4d7b7f70c07a92a3ae2f9d0d882324a8f5872c81d3bee20a16e51138bdd1ef189e7bfbf91991c956395dd333db71f2a665a11c8cc952bd7e15ad7faef87e5e6df6fdb87cffffdb058eefc3dfccd7d0b7e5f2c9dcd6e7b74be07bf3be1f2f5b47bdd6c976f1b72d9d7e5f787cf0fbffb6fc1ebefa1b3ff7df1f6fbf6bbfb3bfd75f52f3f3d8c82f0edfbee4f67e73f7c6ef5b04f0f9a13bc3e7c7eb8fcf8eb9bfbf0f9e1e1d3c38bf37df1babb7c9d70bdf81d2d37fbd3bf9cc07bec35bdda6fcec3a707fdededf23e0f9f1e26cecef51f3eff9f87df1efeefa787d9ce41af0f9f77dff7aff13ff45767fbb679f8fc00f74be4fdafd1d7ff152cb701f9d1a707e54d5ea2d72dfe79f1798b377c373a1ddb87cf9b3d429f1ebebe86e9ffbfbc6e77e9afb38f2e7e3179f3f6f87dfefba1d39c4e9ce52619c4bbd752799bbc79eff8e9ef8bb7df82378fdcc178fd8e3f7bf8fcc0fec6f61efee77ffee7d3c3bfe9985b09e3e7dfddb7cdbf978bdfddefdeefd0d9d21f6271c6fff55e77ce12918f36548ae8259f1eb6cbf3ebc36781e53e3d046fdeebc3678eed3df59e7bac20924ffeb55b92eb398663fe37d3fbdfece30bdbfbdc7bfcccf57e7b167bacc03efe7f0cf799611e3e3d2cb7fff2f01cd2e9dc467487bc1e1e3e739f1e469bb787cffca320b24fbd47f1e991657acfbd4f0f1a5a6ed60f9f59b282af0f9fd9c76751f8f4305f7a0f9f5986613e3d28d9ff5afffa57e878ccc367e6d383eee11b339f1e66d90824b4dee6fff5e6aeb7e49a2fbb65805f66f6ea3e7c6685e727a6c7b2e4f15bfcc9d323c38acf22c3fccfa78749fda5f198c9a5fdf6975afffad77eb3dfbe7a0f9fff0ff389f9c4fc5fb2c2feebf7ff582dd2e675ef7ae687eb994f0f2119c87f3ffcb95e7495a26ba5f33f9f1e3c67e724d3153adf5f37bbeceed94fc9a3dfa5d87e77c2102d5d67b77cdbfc96fdecb7e5dbbf9c30749d9d83de16dbdf222740f53ab0c37d1245d9eb3da69ab2c73f37aa489179120491bd5291ff76d0b64247f6388e63b9dea3c0323cc796e9489ee798c777e848faf2e54a927d6ca12579467cecb5d192f1b0db68c9fca53f424b5e8be885dacc4432f9fa5a1766da2cd36054c063f514af67513fe5d511bdfaae7e7eacfae9a21a524df5d05f32bbf134f45d0599c052cf8e29eebf2d25fc6ff43ad411dc6821e484f338d8f6dc48086124721353459e3238f5835d0883e9e368a0b12eaf1fa0a12297135937d090ae1881630aa1a7a0035c843b60e93e5064c67e79fb63d4977c1808074f9119fc3cf78c3ffbb21829da016ef40872a72db0463bc019fb71b063edc0587a26da02c588c6013a8c79805cf25ebdc7d1d03e8e57a3bdf6e50dff3e0226bda7a1a01db034c636d9e3b7a5b4f7ccd3b6bffcb28081bc032f6f0bdb928e362733b6793a007eb2c7ff860a5ad9968eefbb071cf2e1463f7b9c1cc19910c26378761563f56d819fe34590378e649e86d2d631359f8c73296c1c53de7b438db72d7587df357da63579c4ff3fea4bdf1d53587f5b4a923b94beda96ee4345dcc4df6d1d4b63661cda83af6f8ba9251da7c93b32a7d0e5a7749e86d2d6b3541f7ebd1a47fcbd16c2c063a12247f13baef2cf7139ede02af3c7d140f0a1699c5d455e0113df5be26cf31482785dc858fb5f169097105ccbd399619fe79cf6064cd64fbe1bf5a5a31b884760a98c631ae7ec73bc9ef2d131b2b5a2634cfea435b0b4951ba02399bbd5db4265f033d2eb1780ca107223897194f9c20b8cc8e5d00106c67a34d4568e62ecec9974004bfc3d3a8f862a72f11f67ec13d92a3e13bf93188c14793f52c4a513182bafdf5bcc392322f78ea4b3a3882c54a60b9b13f7f833af2f45c0d40e8013c2d7fc73adc9c2539e179ee2a39172f23dc5387b5fde8acfea4b21dce8c80d041fd2b965c1ecb8b04d613d5258ff7586ef1d229b9f2e3c53b8780ef0e1d0406ed45bbc9862046652080370f8b694debca17e74cf6f8731e7855e5ff8fe6d38d93be6f3c1e6c41db48cbd63e9c298a37bc93155d653c4c88dc435b000827df1ec98eeceb6d495a32006981ae3592a1a73f2d199b12bc8091c3005ba2f236107fa5a042cede059ea0a5893cdc51a32af9684be2da5b337544318b87fe4bea372be28ce09508cb3cdaba13bd4e9feed7b6387cc073a8f94c1c2e5f13b0b9b64fcc535457b10cbc27c6dbc18786d92779b51192859ef789df1b5e47a84f7f57829bd004be5b0ce8bd702cf2f72135952400439265e5f630f86d2c131056634d4dfc04c5a410521b899fe515cef2f0b973796d0448c1be167c92cd641587e61d45b4c39790f039119292a1a0d8d23de67c09cee4703b41f0d34bc17b7534e3e83d95fbee6645ddd88256be8466e719c435d20fa63a8316e80f6e098dff32cf214798df5cde5da7b4374c4ba1772eaffc3ef905f2b9797909d9c03e973a408eb1e77a38799feccafad76800108c1e5ef2af4cb9413f720401b226bc93a7242e0982ed9cb76305fc4e700027d897714638f75983b9c2cecc0d8420eeb776173f51ef15e8051223bf83c90b7907317b6a5a291a22357391d5e4d633d5e5cea8816e3a4f78fdfd5d36ceb4bc535784e74e4725ae45812139fe55f73bf5bb88111004b4530d0b05ef5d3398ca41dfe9ee83d450e6140f6daaa783e95ff7981bcf54c83cca96d4d172ee71f3cf3b426728ee74f3985c09cd239b6a4a31b49215c5ecdd5b5aeee343ff42f3edf4be4a1768ebed9268b7272b1a7ff16834b3981a67c8ced141fdb37307017e9f97b2c59dbe21ad233203e3b88ac0dd7db9132df83a847fe3d36d3f9d825f35a2a3325fb2ad19d8df3636947dbd4d0e5febcfcbbd2d5797b612685c9b99cbf677ece12d949cfb2e6f929ccf3b82fa171e0ee478a17daa6c0b8bce7bb01532d278d67d285ae0e8c9367a20898d31a9962e8f8a695efbe1b29b979a9bc2e7daf831d9033bffcbd861ab27915795fab65f86a5de4f837c45601c80d8cbdcd19f43ce58c951b184ca5cc46a94cd6ec19bcce32331a6a6f9037b6a02f2dc12cb17db1ada21f123de9983d7c6662d948d7bf5a7e6b6cc7ab3d8be7785ebbf7cb74fe0b5ebb4b594d6dc679f3fcdc784f27cffb45f7f41998d81e9c26e3abd7b3f879053faae1fa3abba238e7c4b6722c15819a7d328ef578e3de8ec7597dfec4ef95d89257763ebe4645ae65846e605cd9bcc9b3ecd8fe7831e563d9b3c6d9fc96d9338dfae3726dcb9ed12857cae90038d198af8fa5bfbf969ff4facc76d84c12bf2884c10edbd20777296d21e71d460adad9a687460a08a1325f80408cb06c3955fa07eb957ebd1dd238a6a1c6405ef50157ae3f4af469727d89bdc4fa2e3da718db44fbbcaf42f74e4e4f96c949ffcba59d19db8df3a22f5fbab7dae94bc35027d57ae05a47e2eb73b6cfd63185ef44a70fbd373cf6787d8af188c8a3feb6229e1d4b3fb89b75ddf981f5ca1672580f1aeb44373a439d718793c771245ec44dbcd0537cd65e0a2bc831870b1d7aa8394fda9dfdf17eee6043cff17d47d8ffa43122bcd6bca3a09543fdca83cb212c33427cef85c7c5718460bef02c0d55c9027d1ed91fd41e1ec8477790d9c4e95c29c61636db1635e36ed499bb916ccc5e4adf93a17bacecf98dba51621c4bdf96dbe425b2a82006eb05c74a740839f71790b3e37f17f54171eeb459325fd386f31bdf6f4a7d91e5eb4c1a12f9eb4b2fe49caa1b67c5d954634bee521febe237e3d9c5f81757df139d89f7e7d53d339df6c7d55ad1392cf7d9afd6a95c2ec633298bd966f3819f7b0466a6abcb7cfa344eb77a5b782bd98743e9cd7e1990f86212638e63bebbc4ae1b0ded936d9e8e8e3238c5b1d03389cf98d3c7d1508f3c73fec7a52e4f3e7779ddf786b13e54e495cd1947ac675e4ae3ae5f96a3789e5de5c4ba81bc4d3f23eba4d398f566f23892771e8997f2fa019feb4632aee4bbc57ffdd7c35f91e7fb7082ef22b3f7fc243e75caecb182f0287649ec3df77a3dae27f2cc538f1144fe76793dfaeae5793daed798d77b7ee67886e55ae5f5c8a0995679bddca5f7bcde3daff703f37af7845e2ea1e7464273426e430e307228005e3d78d697c72448898d6ffc2c6c80e6034e8ef98cc7489cc96c6cc95cc947373e4ca182cede20f7f9a03a699704c35c0eed016f6c6d6b44df03df6ba8ad204f0c3a12987479c9b739634d0f5779eb98ba1f1b4cf1bb8847600ad27c80cc091b27a87206973b540fae62449e82b2f7a7877f514e9a9335e419c9f5d85006d8184a8cb561b28e02766cce36e723680e12e32da449913409e397193da33e09cef8307374f7235943ee06df7b920b2e63d9c29f4db1f1b5829cb777ac30f75cf94c9d18ead410a3bdc469764c810196bab7cd631cc89e6f478abc077d69675b6b7c6f62d88c86c6fee23949e0673f1ab0073798e37b05f0fc56746cace9de39fb6722e79c768026cbc20031af339138916e80961e71a02607a0181c308fd899d88c4d39b2393ff41463e50d8d08cc44df55d6bb3831b98f8d943d34a72b3730ce9037229b33ceeab13ce952e61c3b34d1fc47bdf3f3654312d2d489f3530338091cce0a6b4a8267441664559eb3646de2779b5319b832c8d375c6d71ef1f500efbda89098256b81e71758a3449602371077f1fa2218e847c8216cc453679a3b85f83e25c100d60ed8d01b4e62a3dd38e3fff794679a84c37a8c06385957d189c33a5e4a2a5c4a5ff15e8403cd77b9f95fbee6645dadc98eace1b05362f64277b774e68699deccddab212091396aa50189926455e6d85526637c77f8251fc08e1349c4315c02f3748081779d088ee70546bd0598099bf1522a9c0def0b96fd8404646eccd829068a71848a2800735a9a08a9d6f525efcdb0bedb25d130c8fdae24d960a7e3ab0992d505d45b2410b320407530b9d51cd03522b2f5bea0795d90a236a98ad7b231709e4baa1ee23910d284d8508a20c722fc2ccf9afcea89c2348192c84f7d9287800c7cb77f4cf6f10e72d82e15c9986e36078d017df29704301a9310d486abbeae0e1c9193d72441d02578f912ffe63a983d4c1387177b35fdfc36c9c14c87fd9d93fcc9dc96edd7743f36ca668bfdfa9f96047478630966ecf9d5d21860fe9313f82d82ecf9b3b722d89ec8479d4d52a92714e25fc7a01fb76512aff09bdcb9463e2fda289cb88714509725aeb813ebf23a722be4cec3fed812db43d216f228f3112acff176892eba4f8d5e27b0c480c424d0eb705a39cef4be7f6b1ba3f29de9b9d8f0bc51bf68ff8e5f06d1e43c65ff6ee767cb7331846b6deb61fd628dba9c8d6aee7764aeed991440454e124bd806671cc588e839669cc1acf81b7c4e0285f8663e1c4e6a759b41f701e36e0c94b3ff1960f94cb2be041c9c9dbf292039038e6aa84e2e93f9b203f10015c3bf8eafc4f21beb982e89e279029619aa080446044c6105e89c559d9d443f60fd9fd876bf2218a864bf6d9b6dd43c00888ccbc736ead82cdce76667611a9fa476e6fbe6263deb8b36527ccf4cf754d88d2d6c237ccfef9ea9a2541efee3407e2d6d047a46557c8ff6d3da33f7a33644f5feea7e4e91b80cb615b05f90d80008f4d3380c9107371090a718e7b155b095eb8050956bdf680b57f806899c17c792dac5f82c8868a1018dd35cf83cf9b155c45da84e80a6b827a0992a905b23104e625dce88927852cb311af9dfe4f638b9572e6691ac55ce87f3de000576a234475132be5f3b3e659c496cb9859fe729be9f3f9beb005d7fe7f3aec57cdc364e6569c85db269dee4d73cfb8a725205ee29792e890542ae97c508496ef4b87095930f83790a1a9ebc8cceb639fa079f813f0fe84e652eb34fff93f677ed9c34fb87b5c076acc7a1497c23d68d5872868cad647d6e05f44ee62696b977c6fc1acef5abf94af457b38d8f6df9f9cee5d1d9538cdddfcd77be65ecb949878c678502b572bb35d9f3a500fa462029578553a858fb1c4e21d5e95cf659319f58b6e79b6c995172ce7d1dec27fd5e29a8bf7ecdeb7c01a6b208259beb4b9dcfd058ebbc12705a561051abd7c7b3a2ad790d444db13b5d72c98c6de9ec95fdd758f0291f5db9aaa09cfe5ddb8485df643a202930cee4407287799901212039484473b015e7dd94f37d7733ddbf9af20ef6335d92931d7a4e2ca539cd53935c35963faac703799b3e6be8859eb220ef57216f65f2bb821c7b849c80e006cbad41747c5e7653bba2df8b26b31e7e975c41b17eb0f9c99e00cc67c2d9e9c745c38a78c4f26a71da9b6da98c1b3daff07b8d4dfaefb1857c681e772040db5a6078b50f1301f3846cabb58f364baecfede7b3a7c88c674d32fb6ce023a830585f6d81299fc14c0a203f8af57e56885b31bf9539aa767ecbc977797d90fa819d7c978bdff6b373dd53d02ef63f0b78008f93cff499d316ba2a2e340858dffbfab620c5e7339671ea0aa45a9ed36e60f82e57a197e9bc5ec712e3dfe4d6b278cd32db4b5091cf5837e7d7babe20829ea150c1cf9827f987cc6f277b90e07c42b8d1b08edde27deaf2c60adb932e075898f76312b969785e82951c29f216cf0918ae17c0f24397d76b72f36d8b562a74669d4cc9f16fa24c9612b07c4e7fe4e21644ae521b4f1f18d3978108f4798d4cb5919116c571648d07f5fb739cedf77715c8e50a13da15a324d72f737b916204337d933b5b408010b61d9c2456328875e586e8ca0a9d51b90e99dec63a7b55ae973e645f58d2311de375f149aa9f3f7ee6df8b4c7ead2213d777beef3e566692bf455268f2c80b8f5d0a4d9ec5279ee19ede5f69f274bb4a13faeeef66907b163986796cc9b34946dd8e6733bbf45e6972af34f9519526f9cd7caf35b189cfa79fc74173dd48466c246ddc4064ddb8fea39e6cee2d8d7b25f6929390c2517f331ef309db96e39850eeaba3c89157557312bf7372ee615bc1334fbebb4abe230470679b13c9599b8f8993e265ec2f2b681dbf7372de619f683f3524d558692f71bd47e697d7f8f3b6258546953d565283409e91d9636b60821006c6555c87d8f131495d625b619f3f5f5b108fe13a6fc8d90bdbeca5764681242ccbf551c22c4b2538089b133730408ff9e752c2afd47761b02c5dc732d0de538c88f8ff712c624c647bba80a62ce07bc7c4652cdc149f93e27d979206799516a607cf8f23c567bca174feb67c3e000e31b97db7821cbbf3f09e1aae0f04a33154437b63603be73ce674e405c676cc6b218858df0db437c7d291cdebac1bcc0f78adc626adb721351e644fb3eb119fedd96e246174ef37130292eb125c4ee21fa536787e4d69ce8ac8c24c37b479c11fab209848d6b94032379c14ea8dc85a90f93512a28a05d8a80718e7818129ac5d450ce1669ae475b68e69ec4be29767cf54778ea59f637f0861bf7034d40f63525b22ec219f100648789f911cf9cc24c5ec3b609ebe625bfcaf5f73bcaec6796ce2b5d13bd51b41d3606c52bb36b85cfb1adf4dca8837f3318786788cdd2d375e827d6c9b0fa73e1e8d29fcb2446fb7c479afc839f4b7c64ed693de91f7af23eca0efd6253f16cfc9af9efb4e896e2af20fd77f452237f60003429482c774cb39c888402b09679be7629ed55196e58ec6799c52f17ca9888794cdc7a50c72aceff67b0bc3d292dcf21a103d3c5d3866d9b5d29b4d6a657c1f061e02fd8ab8527e7f109cd597d3643561b45f9584abcfe46a49b3f5f91069d7cfc3c1fe18fc419c7bfa056b6a7ea48e4d9ef98bead80443716c8be327f8c9b1a5092eafa3db91ec15731a95be5ab38ccc4a74737636d3da9308060603a89f96d58b57c4a64be6e01ac341f18e3139a58e484d755f0aafb1313ef6d7b0ecec0167ac5b633fbefe3deb25da623e487cff7a5d7e758c48b5bdd85d778d8079daa5f63d91a30b32e7659dacfca2b8667aa65cd46037f835a98d51acc57d1f59a3eebb81ea43e5d49e84522efc261ba76ccc5efab9fc7f8c0d48c6e829726407f21626f8f48afc6e199622c7f770b42dfd6dcceb87318fd798d94d66cc71fcf265ef29dee3a8d40f6cc446fc28ac537c4696fa72adf1eb713eb2bb0cd7e8b83a4c53192eb55ecf31d9da96901a8e7373d3250e11e79ebb7260f8795c51cbf5bcc022656b1a73aea4e7dd349fc35d4a816392f58c09d62bf47f312f9df349b27d9ee8bd3b6ea90cb7249f5be3cf6415d99656c0105c5c939b7f8ae5296034940b3c53858e2a605c62fd86f520ad1b447b7c4fa89c083f92676a2b606967b031b6797b3a99fbbcdd578593824315d9a62e8c14a3e7902617a575bc8d675a3aae9604a1f30cd7558769a167770e0394100d17f45c15416f8d5ff537c381e53123896ee7edfa38ded6b634a6cd993e2267a7bab3ade9e3887021cd77e41d3e44444bcf012f40d5fab07aed39c7bac47166f71a29020bb1cdb54ccf7c3c772573d46ce7125e30d3abc4c917f0206ddf3f95d31afc62990e4ee267035d9e0f4e7f9a7363f0313c599b1ac40b39ace22ac8d6a4ca9ea718b4ba3ab71f8cf9be3c336bcecb229eb7423f349c97054c78791ee02364c2053cf395dd53754ebcc7e6297f0f269fc7c963b9489e26cbfd96acedb0907b2f60b1bc1cee09ff3bb1efbe2d256e62ca5b57f1fdc934e14c24bc70eb6f712d7d92d3c67e876d7a28fd7c93c74c623b5143ee504760509e5b1f2d47577973fa19b14dd78e45f360df9612b4a66f094e0c81743dd2ef7e18660b3aee7a1f5ec0335e77ae47bf6883d96a778b14b3d513f94ee4c0cfbd9ef8f4dc05b3c5b29cf02c8a22f3d413588ebf213d307df9f783b684479e638456f4c074d8ade8817397de415b77d0d6c7405bed76f31db4052c7d0514d5b7b91deb0e277b3b90570e6f1c5b83b66aaeaf260736e65346efdba6f6dd4b029e45d0966c0cb4c134bef78b82d22e92197058429ea2ad93e79713071b8ccde9cbec397720d71dc8750772dd815cbf3e900bf0647e131ddab2e8d3239d5713bd9a74974d49b196121e730cdc153623052581230698824f029209c1cea6aa3395ef7b788d13e2de443f2be5c54b4dc45cf54e5f713c3f21684dce7297f31190f5103b4b9e22efcac9584abbf8a46771112c47039c7f2858e7cbdb3f6692ef619bc39298d1d0f309d1b7a9a351df2741ae2a1267d20158f14960cf0e8c154ddc19217e868bcf184edcb9ca09798ab15623e9803fd3033984f8df6581880e8591cda4d071b015ebd27262681f28710150206fe76d028a6d811c2d8824aac072190041473020dd90567088d7dd88468a188dfade574a5e2e6e47b2b4b54d0195ce65cb20476e3eb8492da8a02e9096067ccdc9524aec9f7c57b985630a5876f775c9f04e641da4831bdd877a80b6c0d0c2d7a00914524ecceb58613ee19c7bff8ae4c4c51ecd82b368ef7db52bc8114bd684da2c9b46829f4bfbba0920549e9c0db17c798a787068b72d9aa4487573f60c4a18a42197af0b60c7cf09c4089a32f30debf2cd94d39ac144899e245dd90167440d401e04032d7a8dd7ebc78ddfd8dbbc2a24c9207c1e9222e46642a19fb0fe584fa3b3a318eb827fd50cc8b9f999d038b6fe97c51ff9fbcad21b250bc0363721c6418ea5bf016bb45019ed002d690b886de62e208f3f03be639ef0bfbbc81eb1efc61659e366b2ac0e84ce3451a363db477637eac16d025e5524933cc5387bfd9c6eb1d4088f9700403879d342cf7400ca2585ea2a034c7dee9004bdeec33a207b2a6bd75d1773bf2f24384180222c33b6a533c0648f71d20bdbf8eb6e7ab34d52eb23f3505fb05fad33d2c2fd38694113f07043ed0a959fe4f44778b0975fde6c4ede63596fb34f5496344cc163d88cfb5f36f38db1a7c04c774fcf79f608158301e6947c9fda4e515d97cf77c938eb2aa7831dcbcabbf5ca4c6220277e1f29a40367e12cf52c690b3979fd773a5bda11b235111e5c3dbb9e700dafcdaa1e04dc2c87f385b1cacb5eaefb66ceeead1d7bebe20fac13e278dd0060f923f6d27b6464cea1c702f161f6fee155a7ccbf401e467d69e506066d8885c859f26e7d391aea07c86d17f6661d9faff11ce69fb124f62e0181343f27f38d1c5360b455b57c5dea80a6247a3abfa6b07237f17afdb8f117ecb9bf933ee8e66f37edd9dcef8b4d8428f0a3efe367f9b0bf7ee7f989fffcfc7da78e4200394b606ac4970426a2a4e9176749ec472ab689b6f8df5d64af156151f2d705e44e1af7d1d8ae4e6da3f7c8de246e3097b7eb2317fba10ab661b4924ebdd5fba6e5d989d738f27ea86d0e4277a331237c0629c6ce1d4e63d229d607ddf4e68fb4932b625cadd6ede502801312b22442842bacc0cc3be7f4c7ff83dc68f187a2f970590d162efe7953600a6b3c06353a2e545665612050bbeb2a4e75ccfb20e1ad653cb1837e981f3b24e0411ff4ff46674bbba20a0a9c89634ab58559ed9a51b4288cab27db1dcf246e52f1bee4bb8ab56ef37e57eb5a4afe9c81d32aec266cf7f95039e6e26be573d7f84e1dfcc50e675de0582af67b5bc712daebaa16a0d63a7060b30e42580743ee842a75cfeccb66ae187ba0109f6d3bea7b33cf14f654cf54811bbbfa751f02f397fb2d7782b05f8a20cc7dfbfe7ad973fab875d17ebb7bfd4eaf6e03386b7f9b0474d6e39fbb81ced867e151e8441476013ae36e073aa32fff01d0598f679e1fdbf5a427c36ed7933ebbf40e3abb83ce3e063a6bbfa3efc033dbf2ce29982088991cf8c9dee6c408ccda76a8d70e6e30efc61466782f6997a0759111fca253bd3567928e666ac222337152b09374844323b2cde3e3489179974baf4daa79cb59c5cac67dbc77b7bf77b7bf77b7bf77b7ff4774b7df90f92d0745b5eb606a91808f6f0768eb58ba6006e2be16e0d336814fce279dc8ac6d9e5eded1355a3258ed6b02004aba3fcc7909d94c0c46cb77becc3af35039a532d7c026365fcccefe39d7d5a71884288ee19c061dc8bb4d16b689cf1163efd1ea2dde51d0caa90bccd3bd44d72c0f6e2a56c1c74992daaac85b77f6f9514c34bf76872845dfbb6c788075e0aa6bb91dbc20cdc167742c2fd7eb4d2a0335d61d4a5b8075de46c7e71def58fadb48f10f65e76871ed8dc0b17c847534e4470b522cc0a1c0312771651a226c502e6fac1c6c834417cc6103793a9b49f8dd644fd16ae4eccb623440fb91e2211810fb2b391b062f68b220ba6296b144b9bc4e592d38c438fd2f4baca3474b69eb98bb642ed0ab22938073addc50fb3b9daf7160f4b06d0b9539b65977e3654d67b2964169a74ece5ade03db40f8fdea92c88ea523d89018e89690460d81e4aefbb9081835a83d73d3044907b0415855115f58970646b5dcf87d77a3fa555d339a18c7da8d513a789c80eac0512def93763b68c374d5f29e69a071ba31f64039d5cad7ed65b5cdd9f38e44525b26b01f27a70d8c8275d5cee5ef579fd0c9cbbe1cb9812c54ac370f79f53b7e6e0d2b404812a9f5aca79dc0c8b5baf49d6b9c4beaccc95ebeb9cec336afb16d038eb34d3da9bcf6a1dc9ed1f03d32585ceb263dd72dc1e898b5c9cd5d3a276d40f5b7d0c12dbaf2d865367e051304508433b1494af57dd5f83b74ed59ab2c0cf46d05534cab3dd34677b59197164c77b5faa75eefd477eda1055197f3c45ccfd3b43c5672f5cc7239d88d1416798abcb62dddcfb33f107b3795d1b2f5cbb1765cb2370c734c09e4594c1a272d26e96887587703f01c2cbca1ca26e3a1893079437e433e0f0b00109bb01b490c30f56fa545b9fdd1f22aae197f4658c31594c48a1726cbfc91304b005337738943f2ddcf4cbc9df7df5f6f927aabba51967c13d94ec937e1917b7a64dfdfa5a777cbdc1b7ef7f7e7de9e1f19e69169957ba3a36e957bcb5d7acfbddd736fb7cfbd556de97bf6cdb642966436e26846d2178244387815b5a67fa8cad625cfba827848d2ebc688c0fc32b3e696d140545c5b99857bf42c159564159393338481c742458ef01a937b9b97593bf74e1371a789b8d344dc6922fe413411e5de583bce4e99b34db4b54d35840a625e8df080f54d4d24a7658907c928ada9cccadbf93bfa4d4ce919f6916c5c6d262ed15defcdc691f36546e43d8fa8a87b6696b1eb27dca6c61e9fc3783fd1736a74c1414ecffcdafed6b7ee77d1256a96cf7cddecbe3fb9c74acbe8521ae9a919e77529b2fe6d4eb379949e21a634c9afb743b366475739218875aa62a4dcd28e229eeb237152846d8457c5486493e811c704a11d5118af63925e5867cfd4de468a7cbeec3d816d0e52a23430189babef1f82f534b65b81a5fab01f9740e2314612cd3e66f6032dd349328c7df5fbb7e16489ed3f27e12556d20c5b9ddc2c29ea229daf3db07c9f94b1cf8415e498fd68d9cc6bdb90b108ebe4ace53d7636b5337ff928b817b06d4b4e3bf6aa6aded33402874aa9842ed7e346d98b865e6b2dc7a8883c0c8ce8c3f749b9bb8d7aeefc4ef74ca38f7dcf14d650a93ddf6f2ea3adce9ceee56ff51cc93f454eeb7bd2d4f68c2f7fbfe652f6844ecb5223dbaaa025187a0737d861bbbe0641821860b2f56bd7c1ae68d2a1ef5c636c9722386c53e228af9308b66d9ea65de4938eb59b8eecb266f4fe6047caf1ffae28076c2b29f21298a71b9402b6d3bd6dfa2695f91015d7aee18622a02abe2f1f7f072ef604cd502a4fed7a9cb6d05937e2b1afd53b0db25b5fe246916535bd6592796aebfbdef9d6ff7e7ceb25d176f7f5fbee4319b8ab1b249937eeb9c775cabcf578916185f767de6e58f546dfbd3cf3f6dc9c787b7a6479916b9578a3836e9578cb5d7a4fbcdd136f374fbc5dede47bc2cdc68785f213cbdcf0f30675e56d1a36461a126ae49afa72b6fcb8ee656cf732b67b19dbbd8ced9f51c6b6c2df7dc099f3a1723a788ceabb8131801ceb3ba6d02671b6849cb805a65cc5f3edc3e10584afe4af0d6cbe7d13e65681d2552e11b77315718f65f8e381d314a0a1ea1f0fc2936430e4846fb709eaeaa1cbc94ba8183360c6e548056048dd5caa07c89d906d56359545c73927efff666b7c7003cf87017ab41327f46381e2d681d776814d9d811f94911641a7d27d5d796db2574b03864cd64f614db8970f3028034d5c5e8b065501b1bc7c5705c21c4bf3ede084e681b101a680dc80dab055813157d67c58deef613752c4087032b62bfc58c757049c74a6b471e03dc0d635c046cea58bf1edae9338f33bc7d43f8b63caf59d8f46d8aeee90b633147abd6e2136eef989e9c42c550cb10937ec6648defd03e0f62741607aed626c64d4ed626cd9a5f718db3dc676fb18dbd55ebe07d96887f22c60350eaa02676186a654bc08f206be5f25f2bdba9121ed6e9c200fe38366eb581a334b0371e49d9a026de43e290abfb49961f11a723071da811cea831ccacea4b566b6790a41bc168911810d24b896a733c33ecf6394766660d438c48a7c748c6c7d9a11cbf819e9f50b40e506a51ddb93833430d6a3611cf49be59a3ae491c84a8571aa88c14891f7a941d32f045d52fe8738001179a4965d3b004e085ff3cf2501c0e7b4e90a690c726d841234ab1b083e4c8267b3e3c23685f54861fdd719be370d0479a670f11c8a6a77a3dee2c514233093421880c3b7a5f4e60df5a37b7e3b8c392ff4fac2f76fc30996b783cd893b68197bc7d2051284d9608745653d458cdc485c030b20d817cf8ee9ee6c4b5d3904ada1319ea5a231271f9d194bd1f924332eeedd48d881be16014b3b7896ba0256a7a00b359c9a03aca46a23692a973859c9f88b6b4a8270b461d9da783188111abfdb8cca40c97ac7eb5c08da9d0bd509742df0fca2ac01038820c7c4eb6becc1503a38a6c0c4c1b7155410829bebe0aacb1b4b682286067e6582caa4150d0489be8781c81004eed03812127673ba27bc24030defc5ed9493cf60f697af3959573762c91a76ab4ec8ea5c2fd7be0ee59155097570ce62ddf601c76ee528784d8c6d270439e7e3330b411a20a6952a01698a94923b4f2de9e82eb3fbd3c03ca944d9db5c43433245ded826dabbfc743b52e67b10f5169319731c93334cdd82d98791a9c959a7d975cd84aef980bee67eb770032300968a4873be48f24749428704af69fdafa7c821cc07cf1b9aaf388acc5c7048f9ee50da3a26d689697203cf6be4f5abe7a13db7471352b3426fc58dfe9c2411a45c34feab9f0bfafecd8d2f9239a38d312d7cf6af53998081b8063316bd0ea5838bcf99251bcf0b9b266afe22aeacab3d93af88a39c51641df3f7cc117627679fb42a54f9d5fc41533e8efb121a07ee7ea4603b71be737974f6146357cb09d51d1997249e5a20692b6447ce6ce35c555eaa4b66bcb10496ba07968ee839929e71ad7858e8de4d1b21267b1dcbe17e241b675205a73ce3f7226741ae616bfeda85a3c867a2634d6103cce9b6f999b1ae7a199db5aff39bc9decfe553fbb2cb57bfa5ebd31cf86be05f6be00fbad6b5df6823d6e25ec9adeb0898a75d720612dd88efa19c0eafb3e302cc844daddc2b856a8dddb52ef9f019d34e5f548c3bd10945fd1aafdd8c342788405c4538538c2d4ccf04a924e19afb23f3a4a274ae4c639de98da20ff7514e353730b6c094cf9d2a7be404a95f73b60c7c041526bbffacd0aca1f96c21f66dd9f8850350e63b60f947c8aba42ae6c373f08e0abd04918bf721088c089802e100b467d239e6debc3c4fd3cf93eadedae496e2fb5e3fe7eb05737ab62a08815c051f8d0bfcc40ab9ee3aa06a3e7eb47d913cf717b52f92aacc167a923eefbb67aa686c6982cbeb08d6d8df5df606bdb6e4ac69e282bb9693596a23e4e227a9feb8a8cc2b00541acfb7740e52df26d9d3e3a564b85c6c972b3a22208ebe145e5e37527cdfa532b9075ca66f1aed89af8368729eb237b3dfdaf18b3556e08c8b7255775d54b22e8de76a434324d6e5b2aae51753ae695256d29cccd232fe7a86342b8a8009901b18a4e91069ec1fdfbbb4999112c777ebfcd75cecca507c441acbf3c6d953c45dceb6f7dd609ee37b35d6b986a3648c54ae446cf3464e43d362a018816d195b2f0752fb1bebedc4af217e4b1cebf61d9334334bce9de68a9ef8aca3f3241f5de524d49ce5bbf8bebb9401e3867e51be22fa7dbe746adb15632aa94e4fe72e3db3ec42fcbc6e7db01cc7ba7e79d7e5795d9ecc21f19f1bf479feda2b9dde6c6b50b9bcebf4ab6bda54ac2571c46a004f1a97ab00dc548ebf855f9cf335aabeafafa2bb3ab3baf33896551c97db89ad627fc3aabc54c7bddf82f7b3765f3600996a6423f5fd6f07eaa969b4de74660e55645b5a85be2bf1f102ece38afbdc1959bc6699e928a8c8672f6b4c4aec7887fafc29cf7485ad74ed17d3983d610b8a7979b7903063682ca9b0e3b5c0334fdb3486b2c4ef256d21bfceebda2ad69bad1b183e18ae17c0f24397d7cbcfd846b9cac635efd6fc7076f9bbdcfc9eaf1a23d6c5112aecbbd88620e7517efe52bb63a0cbf3c1e94f736e0cde33f65a79cf580c5eee0d11ff9960354abbf85ea05ae1d709484de8b14f9d406acfe213fbdc05a3d6e3388ee57a8f02cb091cc73edf0ea446dffddd20b5a7a7e747917f6e055223a3665a81d47297de416a7790daed416a857d7c07a8a508fecdcfa8008d9fb528adfe4caa6aaa0069c9f715559fb97bdf2b3eef159ff78acf7bc5e7dfbfe2b3040016eb3144aecf827343893847190888d214838004367d8f748897979050743e2f3c0beff96b409463f6169057d7540e9eb335ec63d9d4110ce47db1095b7696d0203a76d641483bda4b7b6012c7d67737eb3488e7596a5279751d281f801098a7b51b496fc052d14891232c7f8ea5bfe17782a6bcc7730b795520148f8a48e72690b7e3a5f427d5a504f41a38a6b105c3c9022a4680650e2af2deb9de1fbc639eb634310f42a89c724de4e423d1ed4335c4fa8dea639985c3692e00eebd399486320605602796042c7cc0119065a94e4c12bd5376b4481cac4ba7b5912af7e2fc280b4494d07716f44fce493fe4e62eb7be17d70f8d3305ae6a7e55b017bfb717a03598f51633d32ece3f05eba554a117efb7f038b485543fa4957e04a82ad70506e23db1bc0ae4603d4640e2b6e9115d43f7450c9e1e68b334e814d556bd55269121af6e6c53085f832270bd2158f267b12a35176457581f06582f8ad1eb2cbf0e17558bcbe66699f64c628029f87033cdcf5126efb11d042858fcf0ce80517d85e2f5d873f64da9eca501a85ca034d1570b9b93f7998ea9027a492a584a5b600266a4a85bdb14be278138cf522340e889b3bd9c0b42a563190dbd102ac798d65b2394de86e25705fb4adf99d0e0923d2c6f282d389de7f85dbece976960acb6b9507922a2a1b950715f5d7d7f29b7d581dcdec703b86560de58ae4b828547022acb926e71210320408aacd1ee0951fb93eaa36b8036da933da324c95c803c05ebe9411945f586d009c7414a6273f0ea2ed99bb60988aeb2791555b520f038394f0f4fe4450f10828a7e1e293e7209d0879c67aca788e4de36276fe170bd0001a281606a17af682b0361fb3a9310b6cfaec7a692e2049b00f80945720837d88713560930ad8c86bba5ae2d39afae7438eb2a78ff66f7cecd4d5a6402948bf5a2f3b0efca6a91c84a4bfdf235d399fe81ce7f8e8a3cdfe43593bd3d08c408c6764cb91e6c05eabfb4d7bad06a579dcb17e757cd7a56d874f9b9c4b2959dcfa4792d05ccc480e5b4492d0500fbd88ea6f3a2f950390904b08b6d247ca604271f06db1fdb44f67a7d553d57fc90f72f73671cbea6e4ddb3b1d53748358e448eb3fbc5cda4f1b9fb61706a9b8afe6bf04c0958fbe26c693c376bc1e5753231d450ecc3250506acbb5111b62b72e097b2e77f4c365a2438ebcfb9f82caba0dffe5873bf2f57098d76f677e137498b14528049cfbcc41e2d526796eaa406cae392672731b23889a57dcd9ed15b388a48fc257b56a4dc4fcec57c53bdc6fd6aaa31a008fb2f32b6557da27b79ac8f3330526a8fd171e7c13625b66bc5de6b0baaaab24f1af65e66a390623d7c5ecedd0d69fba3d8e6e91cef190306bb3de4bdf2f3a3a34e4c7d8f5a20fd956e244d5e73eff935d65b7b101d17537a4623d03f2e0cdaaa06afd17624a705810d8516649c03bccfe93d5b518037d2c3378168c65902b9e2790cddab15fe611b204c135b0f01020c7c440a9af19cca7a58555471bdef4ebecbeb2360ca91a79035983b4590ded6c6fb7f48eeb9f0b8f9027022438a859362cd995409aeb267d2c6b10082cbbcce28d7bd899df36d495b158d2df2ccf7f9be784e643db24de11ceb2932ae9676da048fd918aa3edc68541f223afecc17c6f3365d780ada25766d5e078d868567579ee971db27d2b224b5f92870710f791257fab173d5c08e93d8ab25209bfc5971edc395cb64f97525eb5411d3bcd359ff9a74d6de7767b9f9604fd9b27ba4ed647b4fcfdd187784de63274e6b5eec318f3df1f1a927f458e199bd613b59f2ee1f0033888f22df9271078fba1d982177e91dcc700733dc1ccc50b69bef900630547dc2ed12fc3c726b3d79e6ba8ee01a1fd168dfdc3536bdae96e8fa6a9c77b2eb3bf4e10e7db8431f7e0de843535a8076ed2925336dd7cd2d0d2bd584e93b70b9e0f96caa1deed4656ed4cfc95e8b4e6465a12b3dd7e53873abaf3b76d28e9919d754735d72f70e636d3b7b51d7377b979675de2dba96b5e8e8d6906e88bb135fa61af0b99274c1f5e3fac7f43c69ae11249c10f44cafeb8adbb8ffde33df0ce9e85ef7bd5392124cfe5ad60def21a7d79197b7df174d5c2615fb60b4bee44c42711736101258510a9bbada1b9b5a4e0ffabcb853ea88a63e936e854b3a6e7cdeccccde05b78e38f64c15d9bcbe25e78cb5a6e9e102e79cd14276e473226fb4667542a132494d615ceb0c4d796f9b1ea2697119ff2df1b96d9b1a4338793859c072687332ebd6d420267f78bed294d1455a152828c87167ec47f2691fcf9364b093c7d1c0f83ac9a7acebeab9e9ef062f6892de8374a97e795b18eb987767d6a3d70d76e6cbcb1bed309c87300da50388391ec64968e7c33aed461d9ddb746a6e9106b32fa0d397df133e8db279be9399ffe5dd0247597d61e7861f8570e44d5284573e6869aa10583eb1a7dd3c6f43129657504dda37814b0e628e97d8feaee44c687b36d014ca4c317c77a32f812933240e50cb9f50c2e5521e52af4a49f060266d20b607ccdec2a329b55aae08ec93c025b611bc10dbdd85107f0db460d4976248d214fbffbea7cc77e41d6ab9305aebb26d452aa6f69cad4873cddd40debb1cca6231795e055a4fcb90f457c64791c855936e2ea67bfab19fa688fb7c8d29e1133285035eaf3a2eb11f3ca7157bba610ee534fd4ff6851dcc17c65025dcbd7a206f5d6ebe80fc686198c27718887c83cc746d56d269af18f837b3ec3de7d8668f53cd735a8bbc4df489630a9b715f1ab8811cc2c058df2245dec2beddd1fd7a9d7a6db8fe5a862b64e22f4f4d37a51673e7c33dddf74f4bf7ed17fe6e1b389b8fa6fc4aef93a4fd585114baa5fd1e7b222f76c9fbb12c273c8ba2c83cf50496e37bb7cbfbd1977f77335b41e459516897f623a36e97f6cb2ebda7fdee69bf1f91f62bddd1f7d41f18aabe677a6fde50dbd9a6f013db6ee8916d191b67a89fa129efebda6fe8c5776c4e05e6ee5bdf8ea3fcdafebd2dc7bd2dc7bd2dc7bd2dc73fa12d07fe9e0b09cafc3de1b0b6e9beda8a952e14822dd2195de808412de5e34d11d96115dab621e44da8b440c57d7fb03b8ccf2572dfcb944ee573cbefb7cbcb74de4526329bdebbccc5ce85c02f5ddc61ce9d24cf6252bba548f34552e604b682ed056fa8b24978815269c91bf21bf279580843d9a6b60296c400f3a21f7362a7f447cb2b1b23fe2c1fe275cf6f0b9365fe48dc6f60ea668e7a8c7cf7135de17f2367b379451f7283cbee91215fd98ebd269f19be138dd78507fc784be42bfba15e938f3ccbc5ce6aa30b8c47dd12f99a5d7a7781ef2ef0cd5de0b2dd7c777f0129d81510547e22f23579e6a00ef90ab6b629ec81796a7077d3ebea91af97e3bc235fefc8d73bf2f58e7cfd67205f976e80d6a0a2534d2b1756d10f36b7bb15f235842671397e36b28a3eb7325bdf12195aba06f9efdb77ec004a050ae75df31a5f9fecd716d7e2b5f01463d7eedaee08dea23ccb911bc84203daa5d55ad23f261b6bc37bb4439dd2bff82c0ada7407e9d47564a3d774bfb9aff55fb1d6ee500dbd4066c05c401e41e16e9b90c2374753631d508fa6cee4b1ee3a2c5f75df978cf547770259434efb0eac5204ed15737dc91c57eae1fa4a8c96d51c719727608d3ed655a329bcdbf21eedba12dd08ed9a74c6324bc8c26ac3b54ce13ddf478293f864c70f7444b9dd190c0383f13831729af462b7ee4a2c5ceb619dbdd4fd9ed86616903738a1c64e4da91e26a4ae9b8a3d98c80b0783c64aa444ee483a1270e572138fbd6d97a3463d349e4991670a03a7e6fd09a2ce245512136056a31bc73332ce1fadf38ae8b64efbc247b679629c0f54a801455c395c05f15d87fbd0f7413b8292fbe9ddafe8737f7405443257ef5aab7b77a78b35235d0faf7cab7ab29af41cb822a07114c38743fdedea37efee1675efaaf38b74d5592e36cb1dbefc7d59b98b9f2709398ee9096ca78c9c2070cfbd4ea0d4c72741e045b1d7637bdcd3132bdc2e2517bf7d794eaec734b3d13c32acf8dc2e2747c7dd2a2797bbf49e93bbe7e46e9e93bbd8cbf7749c637afb94dff3872350d1060679eece22ea7496bd4b45ea2dfb7d39bab478ff1b234a4b0abab3e72548c16281751e09f8e56dca8ec2acf8105faffaa4e1ac22264d1a55c025b292337b06da4cc7cf3701295c1a29f212f2008d97920b97920497127a55e49dab9c507e8ef30d7949af8425497f708e69f0c09c62932802b30b149fe2b3f65258418e3914e540bcde0b9cba85dce8004d999863634e3fd8fce460f3a343554ad7e23373c5e2b2771d6f900fcde332433d55bbdbb62585950d864bd25c53435273dcc5c93c26bc97a96985e7c48dd73de180756893e1347d55c5bd0e397b4139d3a9395740720eb537c81b5b408b79f0670ce14ee7443cfec7fc73292a332d54648055e6d6d1be2a3090b70922754c74c974014d59c0f78ed1a52cdc149f9336bf5e4a1adebf9477fcf971a4f88c3794cedf96cf78dd999c9e5b418edd7958870dd70792b21aaaa1bd31b039791e733af202633be6b51044acef06da9b63e9c8e675d60de607bc566393a674491a91e819763de233d9ec86e4a4baa419b54dae4bb88d93d056920a2eac2945f6125998e986362fec1b2a0325ebadc6e9e31c12783829a4b4c95a90f925fcff4496621e504ae49123468939adb78e69ec4b10db67cf54778ea5e7f9fd491a7c4cd2970269e84afb44d00260d0a7840f534ede01f3f4d5b634f4d7af395e57e33c36f1dae89d52dab9c2bfcbb5af2d6a4fcfaddc73ae8b86333d34e725644757dcee24549ee9ee0b788482f6eed06048ff23e23ae9a51cf82010235a746ef0704820087b7c96e37d09cefe397f7e913e4716853774edc983e73f49b1eba6b07237f1be58efd06b698ab4a4c79321a995f7a0c5d42c3dbbd07e3430f636af0a71ff94043e835dc41a9e6ea2e7100cb4e8d59298abc6ee71436dc2ff4f11f5e58440cdbd619658f67545dcd9266adb1fa69fff4d8e2399dc6ba4104eff102ea500f2a3854d7ad9e4fa3b9079438478a462ec0afe1da9cee8272424a7ad9dd861fd04ed9f7268e367519d1188119c7d794ed3156bb4fe734991f77f6239e4751f92ca0fbc8ebdfd9f4315012ef9ffa4678d11fdb9c467b387cff7d0267bfe7dbd876c4ede3aa67668db1703db5d36f79c236e995cf7e42aceab0f15b482111b01f344fb4f50e4716873d7fdaa9a6c87dcd8568ea9d78535aff7048306f35cef03fa6f16ebca23e404d28b206b2e8da6de6abac0769a1b9cf03a2621651ef2eaf7dae2f381768084bb1e8f15db648bc59c3796786f8c14154145e4ab7fdf329da8e8a1cb915e6c5dfa5e0c1c4b8bfba8a4f6e41958535a75444802c8be5ea7d70d92f5c3d7e9acdb6fee5d6107e2012a46656f2f68e96c97757b317423b78777b6e587d0223d25c2d7604e89841479e57044df9c696f269123a464b17cd7a7f77b0b7b8398eafdde8150205ee72ee3cb64231da33aefff1cb98cf7846f072207661feb4bd2221542f66c556a3891b98aef77deb094546a97a6c14ac3fe8de44469387a362f7fef9a1e180562374a249535fe2feb9f4488458279d2eb08db79efd2db404167db54b7605e38bb254f5691cbb71d47a2430c3939c709f990a5cf088159dcbf2c7d16d615a616617d01f23645553adda23043af9f34e6d79047ed0642b2506b0f28ea0172276497a4ef6a535a253a2f861cfc1dceacb56d1abbdab44ec9fbc7bf29bcff757f31f5e059b11f3288a179cbf47975a9dec8330542ae42e218b2fe9592c1558c93fea643ca500bc1b0064e51a1132fcf6ab031489fb38c248eac09ddf7fdc496257dcc062f8c36d60df5df2fac34b718559dd79c595d747b075861a59e6ba793e85f0a436035e40d8d1aa858c99979f1dbacdf611a3749f78563b23ee0e6a96ea2bd0ac97ea8939bf4cc1929c6de0b5004396117f7e121cfbc8dfcb44b3997f884e477b71ff7c5da601f6803423710f710fbfefd663be907c9dc0da0ac6d6042ba0f4cb642e7335732fb3ed883c1d85cdb338c5cdb41b793eb776e606ce39e6724ddea981aaae8dfda166651ed9f56ecd112ff740d39d627fd935332d1787c894ffa411b8dc4e379b59b7daa889197b3735cfaefd4ce0196becacfe318eb63dea0fdf2be8eceda79dd6c5737c1928652044c10bed6ec816b22b4f837fd42bf3b0402d48b7bf7ac01b5477c62e7d0717c0716f6dd690ea6ac97656eae96af338990b0baf81caa3f336f04d38b631715fb8fac4d054c2f19fb3bf7640fdbb3a531fb2af9b67c0698425c9294fa9bf4ac26f34fef09faa4ac284c7327cba477b6d1f386aa5fe5ff5fc6a972ba7e4dfb88a7bd2f39c72444cb24ee665bfaa19cd4afe55e0fd0b61642786dc3298e79422e8d4b9212aa5caf62dfdda8d88fc3fb2988af4b88a0737d965504031db9413da12f650191d7640eb232abc031c9b30899703e4e5923af2da0e1ddc8c8491c1adb0a2d88c84b7b1e6e74542021cf4a9e48f94e4212385206748d66548e1a099069ee90cc876d1e17807bde91b19338dc7ce7f2ba00159a73802407c952b68f66f2f5d6d0702a37d52c176df6db4b1663cf918d82102ac6f915fb9f6681802f4f584d8844dbcc139dd706dbe61d650b743fb331216c7ddfdb86bdf6b5709f25d6eda783c7933c12d95f54f7e03d25f92eafd19eda6dc8eae97bfaa4dc8ee47ee79cd667110cb403d539da01d292bb33c909c6e7702b22fc0ef1b3e2f8451e0675f0cea67d457f9fefa3ee7102d195e9f9de72cdc95f079875711c312ea1f53a94aefdd00d44d62d90ed93b2e385c7f9a1cd2d1690f7f6e9775dc645d7be63f385e25f13e34bcb3116624e3a8306b97ea71b3afe2e632aca5e9bb2a59279a1849b1de7a3dc6f958b64bf1731b5783d5be9aaa25cbea37429fd6d2b9872c95f7de38392bf0416da45263b34afb858734bab2ddf6cb35e06be472e4ee3d17f27f60bd625e7cc063995c7fc2ae7fd9dba84be6b73a38e92bf9238c220a71b8dd93c178b1f1ae7aabe9f3f4c16fb29f6eb0663bb6c6841fffd978eef9fb8d7de31a671a2cbeb7acc17afc77e5575ccf1c3e3908eb6a5bfbddbce9025df531639db9dfe3bb341b19d3a6f296b1dedeaf8fd81a5ee1c4b3b17b09a4d7fd7e7efb4709f1cd6046e8c1db0d4d08e2e9e1549be3b94b68ed9a2194bb6870eefd19bc9394e702fa657d1cca3302f1d4a6e1342f09c7dddfc5ebbc4466d1e3bb3701599719a657e371a4ac80dd8d0e5b51262f2d2f96c1573a7d7b6ddaf4ce6d3d6be7339f1f947f66553af713a0ec2e058d7f0e23a6643631b147767f60a7e71fc2c9a6fe7d119fbc8a02f110a8dcb98456d8c229817b053f798058d595cce691b5de17188c176562e9eb48111cb00933d12fce98c3d7b43120b8980256d6d5343244f31acc13a5cee9996e77835c6afe4ef5aaf6a29b63e67ffd3589b26b8bc8e60be342bef137088ab2bf3ccad7d4b5dfa0e3f8fe4fad56d8bc674d57bcf1408fe81c423023db4399989318a7e429f43309dfd1ca370d0de7e01d9fd97af3382a3f63df3d4ae51dfbbe3136d9aad55cf49933f18cfc7012e4be4a5b12958fa5c82bd8ef37f215c4a71bc8c5d79ca7141d8704d790fdaec197abfcef64987c686b4543559cb3667654b3bb7134d46cbf78d1b8830a5944fc5ebcaca2eafff5a9fe3e91ad0f87a55f314ecaf6e7e482c9fd8e3a5b1fcf8acab65ec4d59c04148ea04e2067d59bd4faf5a161b188ae93c76f1addbc677deb17f69bc808111c90df9402139d9a486a28d4ea7f6c11084f8dcc87248cde741b7989774f44c75eb98da18584dd408e57e43eef7793f88b58313f619be83d8b6caf9de0936a1cd3c5cce5dd21c8d73cc413bb9b9dc63ed682d5adbca64ed6b7532b37087c6122a6835e38c5aaaa0d6baaa05fd5073ee13ed01af22972fdf272531a3e4fa0eb884f4371936a142b735e1d35bd2b77d0c3f7c8d0d4cea2d36c4378ced5b3710b75021f9055a2357b7feb2fe7534f4de80d98bb1c81fc41ab7a27c88dfff7d8d2d439761fd1adaa12b7d38b3342d69f40a1483217102da8d224c7462de37caeddb0b8a4ddd77aa6c5e257ea7254bea671c1360fd72952f7f2ffed2c9d74896ca57c9b88b7595594ebee4bd621c1fc164147f97e1312b300137c1f2d8961476aa2b208daffd0354f433adcd122368266391979037920e0ff8b7441e89ac176b66ea7c56693ea8c3d074a1176cc22955e9b4b46626f3cd52fc529a7fc2ef99d2b235f9155dce5f9733569ea5228245eade80fb05981aeb062976e90acb04b39c05ad0dc16b1aeb384233ac18357187e2789a636fad317d091eac96ea888ecd98425e6d710ed6dbcd36773a78a63e4df7674d7ea80c170f79633dcf3575ced93969edd268681cb13e4b72b249ed648c91afa50975a30caf3c5e4a6abc96473bceb9637b89ae5d5cc7b94cf2f5606b9bee87eb3beae9394b7cfa81f04275c3b41eb3ada0fdd8ccea04c8ef52cc794d5cbcc3de77ac2f9d71d833e34bb6860334cdedf5102ed9ac41f640ff368f7218c0a5642418c016f626a9adcdc5c8481eca4e9f2b4f67b39816c71a91778ae35e89cf4fe3939cb8731571dfe46bd267aac8554e84be3ba98519af063598e58e3aab3db555354563cb3d7b6bec690e079db73517eec6d8431abb4cea19ebf66a2a1b7959c8aff52848e57d0f1571659bc7e5c7ebe2d0711ec8fb2a6a637acd35a6622eab3e0c4873fb643e22db1436b1afaace8793e2bc28e23aa3abdbe1f7f9b06e217695794275e7dbb5ce2536c41658d385a3885b306ca80d51b2ebd3f5acf3ef146cc3dcb21e24b6239a7007a5753c543eb37c756a93a4f1840c97ffd3f1f78d67753b9f553a38a67e55f35eb7975f18349846d21be462df80b4652038d7b070ce72680b29857a9a8f4cf32d757e99221f1d2b3d4fff9ccdf5aff43cf56e55234479130668d0d92e950b9dd316b3f994d6e9d33dfca7ab187bfcd99413f790726a24d76e470acb96b51eb8fc23f92a8ed46706a3013abbbc815c64cc5ea8ed7106d6b421a6d2251e2c2118909abc46ac40492d449283c03a60ed981ae92088e7c24e6bc344551f90fa7c8674bee3b3d60dcd312d12bb3cbaca2924b616e723b8aca9e52b91fd56b983180be832dad636d1ee1db53f411e0b3eee5fc51efd94eeb64c461a63ea5886e410cee2b320ae497b35c9d948e2bee918a2dec288ed5b3c96b40321e107307ad83faff6670bfa8a6256f3dd0c15311a0dc29717a647ea312147e27ff918742c6f75fbb4b83e6d7c318ac193cef3b89ee006eb43eb2fe2fb267e17d977f133a8bc25365f4947c6abf94a3a3d62fd86753820fa81c6e04ea14df857a8dd0779fd0ddb95b665308e42da39ac12dd89e783c4e23854115328ac51fbb8a992ea910876f767e7589e0d439de4ecf1548e1d4b3b7ba6118db15f1b9c84d1c09f1bb2f4927419ad8fc112f9cee72a525a49ec6f61990216d69d88c9af536c1b3130227c4c21d8acf3faa651c7ce90f6e7cb52b280395a188af81d98bdc51f83d032fa35718feeba95ec4da207e6efd42d7271ae6deee43b2643f335845b444eecc7580f90dcdb7e34100e5e8b7c469ceba5fac59aa4b2893f4f739c8a11d896b1f5fa5fde545e63eda51b527d425aa46c3c53c6b62b03dae08d522cbcb1772c99c5b601e15d32d99d67e924d67b4bdd41f23d01e1739bba811138d6a2bb4f6ada595cddc4b22863bb265b5b6c1f66b6ce913ec7c7f2d9ae1e24f65162aea93dd157746ed3b825e81f736399c772c09e478a887508b13f6cb3b7503903fb59db4baea49271faee85beb3933d94e88aa564ccd7479a13b2c0c131a9fcb99c8fe839f3bc70b95de8627dbaa9a6b54efe926791584a6e6c09af1a6d23f465339ed5f8361df760db1608499ba0d9bcda3e1bcf325ba9ee5ec9b932a57bb5ee7e147339d412d9acadb775798d05966ab8c1255d71e1ba2b9d53f7ae25fbe347d393fbae522a2b3b6cb35cc4f3aa6a12f7e52d3898343651f1ecd08dfdee8aefbf7ba68aa062948e6d3ca3bed2fbe8bab378645b1e890bdec17c5d61123bcee372f2799cd2f137ea4dcafd84f794d0f21d67c0f4427cbfd759ab1c4b12c7277c1af9e755f8a6799e8515e5a223354f071890da775a83feb1bc64637ce09db98928373709de201b4f3d568285ca89f00f525e4ca9c0cd4379043e5afb9b3e67ea0622cda1323ab24d7deb98425dfb8feb7aeda181cfbe637a9f485a03535e43ecefcdaedac55db589b367d23acd51d7ce4b6a3b90d8bb4db91af3cfa2fe117e1f258e1bd6c8477ccf9bd0da37e89da3679eb658afd19cbb3648dff97d79e0b3cb3db7c306c8dacb4b87fce79cd5fe1c5b5807925af4dbe4fe13cc0953c52758f5eeb9dfcdf235f514b33152c8e7692c0ebf7bbb1cc66dd6bc093b527f26d4c5f9987a4ec6eb160705cec2ab960509bfd0f1ea77792eaaab7768e07c2ab9beb49dc52ee694b8be3e57af7ffd9b149f72dd9a21c3345c7f97cfdf5f8f37db07d79dd6337d7d3dbf78bfb56cf3405b27d896ce5eed87923c408a1f43f16fe2b86a2aebf1994e3967f17c603fec222ed0949323ed2be517caa545bba8b7b5416c4bf7e731b766c2598ded44807504e5bb4df0f3295717c5b0cb619cbba9cedbe438060a5ca68ab8b7b946ceb256f1dea6dab5ee356a1ac2efe5f52ff0f4e9992facf1dcd4e264dbd516b4cc3fe5b8ca3b8f33fedd255e326ead95b365cad7b616a777311ffd7658c9969c32194fbad1a2754d99dd7afdfb5cdef9825b36dfbab6ae7d4dfabcab79db8f6423c50b101c96a9d1f8fec5fc3a8a7c1e29da1bc9059258c37c0feae380a7c96ac2683f9e4b916072ebbea3eda9ab3813338e6ce3032d80467d29b04db4f52c15bd60f9e5aadab896d51ac9211c1a1198e377d5081757ccf7bd859cb001d66801937bceb29a88e2fe96cf95fc76a93e237a8fbc275ef33ff03a2b8819297a082ae28b8d6ba400df314fac1b18b3f81d5a6243af7e97729c3b148b94729d67399c546f63b9f05d8ef60648c7568555c1f3ab18eb51df0fc1520abdbeb476cc69f84e1e663cd7ebb6fcd3f3c0f0c1709d8fc3913c518aef24ba5b4520c0feb1b08a6ddbf85c4bf08d55757df538495a4f76c13714fbac78fee2f924b8f10a9c60a2eb979013b7c094af656408f0dc07f1fab4e644c27b8de03139b9d07702eb1927c7a9553536a2af4ce18cf75bf5dcc80c956fdf77f13809b7bc81e0525a398abc0714f342d6012aa24fb94be4c496d8415e4fea71733148f500791dcba65f55939cc7988f640d157b53680737300e6e447b53e4ae3d603bd58dc4a415fce11a27cd7213f41c8d039f8157adc1beb4c7759aa70de4d5d053fc9ab87fc99a91f1cb5bc0899163e96fb028536fb6a5bdc57834cdb33486fac4da9bfd323f4d96cd3c8a90bf017604cb4f276eb4386f1ed7e6e4cec800fbc6d5b6a04fe2cda486acbe4e87de9f57b16d70841cd665c2a6388f3ffc8cf4a1e21d5cfcee4a69dc7747c75316636da8c5adf147c733d2c321b5d35f4aea1ec6b39273b3e69a79acf7affcb2a18a6c53bff4777757fae9e21d2b7de1f271edf2dc54d9b3189afb4e65b26cceb2fe2cdf96123731e5adabf8fe048f356bdd17ef5926ed6b546c9f477c38823f015fdf686d403c57b4451db139e2cfc3b3a7c88c17fb5db6a9ad802531c0a47ed6554fa3fe28ee5993eb53147f46f4908292de4e0b93c532249d3d458c80a99bb9967ee4bb9fd9126fb3f8febaddd24bdfdb17afe41e49733c9e15c44ebdf158517814f82ebdf158f189e1b9de33ff243c338fcf37ec8d475fbebc35de736367bc675ee0b9a7e7569df1e8a85b75c6cb5d7aef8c77ef8c77fbce7825bbf9de1e2f2d47e31258e4645fd5daacbfc93a88c734638ff85dcb5beabda5a19ee49874d23678f13399f899f1f148ca4806692bbd389caa25ed76aa5ae625d7256982d82592ce786c9e79f2dd55c938f13387da0af2e438fe96850368aadc0be4ad43a81a72ae8b221e812948f30132272c850ad93977af3ab52015e5aaa95d53df23cf48aebf6ac7949905849ed9e67c04cd94ae32748b29ab8a341585f9c1cc1429b4f62a96d2e1cf48ab8215e4b05b12e69e4be03c4948357151ae4be2689b29528610c346b623ec6af5a59d6d91565171bb31637ff11c0ab3b026fbd180c5b246e1dbe7b78533d4197738791c47e2c6b1a67be7ec9fc9bec06b6cb28422e47526c6659668e959fac1dd4c0e403138601e0f2e873663538e6cce0f3dc55879432302a40de07a47c2860181ba1de066b287e6749585d58c4eadbd62b96f08ad7fd9903691fdabf4630c33b94e431259905579ce4e8b213f2c03d7e189649d0bade1dca8b748d2366e44d702cf6f0ca9c2ef12b881b88bd717bb3c47c8a17d42b791c050aedd7f8db50336f48693d80d31cef8ff3de5794f5ae604042e44c30f24dc4fe17390b45062111c68becbcdfff23527eb6a4d76640d87930b37ab2ee42d5de8fa1297b53c1593ead8516bf75dda90f94ddbae94b79368072f4035b0eadb86f85b86ced392a98fbd571bea70540a936a172e4ed3b8dd5d65129e106fb57ef973332d2faf99bb2e6508f4ec6458df6d82e47682fab69397cef7cdd6a40942f903e0793444f762cad5e56b893b1fa7afeaae4b610d3fbc7d45b9fcbc1f42a61f6c4edc92b2e46179f9a563e90856b7046a299f5208038f504b379740a77315c28d8e401d2da4725adef47eb939a9a79f69d94ead591ef36b5a5702bd4bc75a11be8ee1080cc4676dc5356d20974dd47c69ca72adb230d0b715e9b25672e155b5512e799f0f8652d330deada1358027ed70bf26d0976be8897fa8fdfe7a1f5e3de36acea7f770e83f281cba3e042eda6f77afdf3f1411adb84d1214edb1cc53a7a028f7fcc40bc2fb83a24ffced82a2f4e5cb83a2ec638ba828cfb34f4caba8281d76aba868eed27b54f41e15bd7954b46247df03a30e0f76690feae027064759a04dd3ded77501d29df9324ffbac360449771c4cb953d4fa4069d9b8efc1d27bb0f41e2cbd074bff49c1d25287be2dff1dc128fa7680b68ea50b6620ee6bb9a5daf67054f4bdcb86071874e39c7c419a83f55b8cb7a2e3cbf10b51ce1e8d7587d236eecd96d6fa52e7b1b687635a1f8ce53bcfe7e0989322ff116fac1cdaffabd0f331e6a7c2ef267b8ab6aeefc18ef623c54330206757b2af062f68b220f33ccb6a085d5ef7b1aea5bc075f9658be474b69eb98bb642ed0ab22ef5ca5bc677afa476d978c8f29307a36e1879fe3f37e375ed6f478698b3fab0b18b6bc073e3ff0fbd5f1f7d707d39acede3279d38ede9c60135bf0bc770884d1eb5bf520eac843bc03267b7037e8059f893ad3d45bbb3b8f7f1a4430b4f0353086d3163da23a7139b6e70e0f6beb366ecc05de549bd232a143fbe77d302047f1d627645b397cfec7ef99069fa61b630f9453edfeb8fd5e6bd90ba0a3bcb60982fe6039adacc5c85d531b40bd7cbf5bf05a8ffa12e9cf8e9f5b9758b879cf145e62a7d88f6cd3b3adaded90ca505d02377ddf8e7d57b1ad636cdbf484b24d7d4d71eb820fe5eefde93af759ecd2b788f660d9415e15e61c7a0473af7ff3b91a6a0ce4551f70c68f397f3af0c937f47bdba5eb5a5f1777bb33a4555dba7026765ee9195435a6e6e4e73da97431cf24a9745de37c4f04fda313419b37eff54329a0ab1b24c91f5610984ec91fe1997b7ae43a257f7acc13ffd47b7eeeb182c88bcced923ff4e5df8f887fe4b927be55ee878eba55ee2777e93df773cffddc3cf773b595ef591fd211c8fc79d99e17fcbc795d9687304b376477c835b5599dc2b8eed99c7b36e79ecdb967737e8d6c4e8d6727152cf636bf29f7b8cabb0f131625c5c8d813cbde7d5838734eb6793a3af80c5ce6bcc4b87b621205bbf266d28e65c6fa5bcc169ee870ec31d8a687d2cf3779a626acb335e40e750406e5e7cb6819478b86d2d6b3541fa69f91caf6245273feb694a0453c2b12bd4040ce7958f4bbfffa895eca76f7f6dd597ccc5129bb47eaab3cf37c275fe5917b7a669f3bf92a2c273c8ba2c83cf50496e36fe9ab90977fb7afd21378967d6ce5abd051b7f2557297de7d95bbaf72735fa56c37dfdd953488f5135d9679f2cc3ab7454e83e0f5ae4b162caf755faec6797761ee2eccdd85b9bb30bf860bd30448cbccfc52e2b93649544aa85493c4f681a2d3732c9009b1733b5042fbe4e78dc8f62f12456def5f9fec4acf8f7b32eb974d66bd9e9c2044977661f01ab88eebbf7aed7dc52e374a1d4691e9e630f28228b08f5d1c468e13d827517c667b9cc83f3f3eddd061242fff6e87f1f189edb5a47ba2a36ee530e62ebd3b8c7787f1630e63972d7df71aa169ec6c4ec61ed03ae129702321854a8f032fb4b175c97bbe1b307bc77cfe839c7034e8485b007d7d5b00cbf7a1256d4bbdcde479a9c5227d774c61fd6d2969c06457b6a9bd01538fbdc3d8aa504ea1cbebe3eaebaa12602c82a6e6638f06a4ed3d27c98919c2c063a12247df96041a9cdc73953d1b7b4322b1045e727c0c8006787da8a075dcee2e190bb69ef65343528d95f6127b7099455363b1d9961456c2554bbc0af28ce4faa5b4be68b1935a15941e188f8bf513aa52875281a7de423c862b0b0e7b9eb6d94bada0f1527aa1ada4d5f368a8bd41ded8021a30c69f31845293133730408ff9e7ba11691b4369d915990156891548618c11b642931684a4bd61305d405316f0bd1dda8694859be273a8e7699cc74b49a3ad75d01e04cf8f23c567bca174feb67c3e000e31b9fdba821cbbf3f05e1cae096d2eb662ed8dc1405e3d8f391d7981b11df35a0822d67703edcdb17464f33aeb06f3035eabb1493d68e2b5115dc0ae477cb6d7ddc82df70ecaa07cb1b57561b95ed1e9aa0cb92ea5bd4ee8ae63cfbbb0a639aaef996e68f33c6d792c0325ebadc6deba8a5c72bdb1f78693420481ac05995fdaaa0dbf0bd8a807388bdb0799c2da55c4106ea6697b7ad2a2b6a4f58b67aa3bc7d2cfb1558d5cd25a523f8c89b728c4f4cbf3856711eb1f817e6f31337b8b2927ef8079fa6a5ba45dfa5fbce6785d8df3d8c46ba3778a20e4924b9d925bae625cb5396e829327f0d696ed32d03870f7a3af93c54bfc3b4ab7ed1fbc48da79a6f6369255e985b683625d6e4e5b072b880166ceabaaa229a6ad0016daa0948fa9d1b3c4720e49abd172aff79ab299b4ac0f6d4e3ee7da94ef3d935d12aa7cce5e38a6803da3bdcd1967a22707d9d9514bfb5e05bfaea7398e4b512e394e98fcd85a4617ca3d5cf28cc4be98e63c551a89f8a3ced3cdc1582f3ccdec5c89656c9794265c2639137e2eecd18f867ae499f3e4dc8d23bbf3f47397d77d6f184740726d535f4aed842fcb513c9fae7262dd40dea69f91333e8e666c268f2379e7e1df527934d6462ef14abe5bfcd70f4b5e2e37fffeee6c77dff7ee6e7f95b4708edbb8b8be8d5fdaed568967fafcfcd8017629fcf6f4fccc30e25317cff4b9d7eb713d91679e7a8c203edece31a5ef5eee9872bd66cff4596459ae0e76292497c6a3aef14c4b2fbd7ba677cff4639e69b74dfd41df741a263ed657cfd218c8b159dba039cd42c52d25feb8b449a81d16679b36a92e5ee539e0c6a687e052202d47ed8d11426c4f2ce9b30bd1cd7e2f1aaf48d43369277280480fa169e0b377877d47b831b684432c3957149977b994a2e23cc6b6f346f5b13de5991ae3596a6bbfd43185c00d646c57b0b15dd729c33935bc979482635106ca94ad3993be6b854f5a1c4f5956d3b6bcb39d7f4e6d46b3059828392f637f2cb3471afcd5d2363cf9318e72edc5aed725df2af6b2658d63f6b05d8fd702d997ad85079a341fac17e95c2fa5aff34db16d63adbdabc847a7ae9dd65fe44fffecec2ce13edce8b42d7292719d1de3363facff4ada40d1eca1670a1130b503e084f03530d6890fee46bdc58b495ab7863000876fcb7c6b1a2ff4fac2f76fc309de73d8a7da41cbc0ba442099bb0df67954d653c4c88dc435b000827df1ec98eeceb6d49543fc85780f73f2d199b1349640fc5771ef46c20ef4b5ac459a7599a96b2e912bcdd29667e7497c296d0d18fb6bc93c147ce25c5ba9f9da7831f26ddc881f8c4adb2ffd5cfffa3f255bdb2c03d57e76731963768e34c84f51f7bf601f3de76b129f7d3494082d05f195e9e792c16a293f633e4673ed73b6284154ea7982cb624a391d5b6cad9bbe13f617b51004d827a5adb48082e7136dcb5b80b5cd4c97e8e15a8ee192b6e2f9b12c138485712671f28d1ae2bd0287ebcbb5c2fbc6f7b296e30d25ce46cf554ebe93b65e935877231d5c2ed74a339b77d266cc191a3bdb146ada5a7729ed95d699dd55fe57d2d6fbdb3c6bbf4a2852ae5b836159d07dc73c35bc6797526d690d3916cfd55f56da5cd7be3af96b4d15a0882150bacebda8ea83c9c251c42d1896ce3ba1ca79e12504d768301a68071808e40cfe83fe366c9863dfb3f4377a46c62daa6ada9076a620e0b0acb36d285dae7549de3e46446fa4baed85418329a36d6d13ed685bf5d8bea2636ea40f203e872287b0ae05fabb64365e47827c945a8cbb2843ade908f06f2c8dda626da83ce898bb510c7491ed744e11821b5dd56f4fb713babcc6024b35e6ebe38df5413bea81761cd8c573a5e6ba7d151d422b84d3503d78015a77399be7d96f527d92bbcf2e4fb7f51efdde9682c6e65504146293f9508edb46d7f39e5feb86b27bc4b90cc704618a82554e87acc5e755fbe1068a8dc4dfccecf3a9a17ea3f17cd99a47923a9d330b6ce3c08d1e7ac33539aff1be1c0dbdd05316093a32a3fcbaddd9b8af6c57de3077240e7ed9da7a966b799a9393c25a657e49790ee323baa64b6f860e6dbb0b6defa3427f8dc46ea3764d03b551ac27b0ec64762d6d63bba667a7bcbded9c34f650c8e9127206b4b8269e9ffa76a16d69587676ad6f50b54eac1ffb07893d99dc87160fd356a881637aac1b24fb5647a4b5fab0feacee46812573d8e7b04d35840a625e8d063ac4f477577e83e491f6cef2d2314fa13744314562eaab49063bb9a2721c0dc9f3dad8290c8ca423a4724df76b4ccf470bb2b11fdd6b61c374a3f2cae52fe74466dfa1676617f7c8f97ec84df5a9f7321a185f2784ca4f636c5320e3c4d7b7b281127d4b6918cbe6e7b673d3c17728a5efacdb7b8476a83867b7a128930ea0a2274ae53e95a503e84b586f12eab2b4270f6f44b1df7ec3bda88560a8f6a122ae9c16d45fd7efaab1762090f3dfb14234ee4be87548ceaa33b603ecd416d00e5ed262593921dbd45bd9c0a3fe97d3485149dc2bf3dbd36762fdf5bd10bbe58d250c0ce6af3b0f72f3791bcaad08985e79ecbb765d5404b8349692edf761fa79521d92c48cc218dbb5043329f24c61dfc62f68f057dbcd718b7d3d9e15cffba4ad74b58d1f9f75d5f74be6b5e29d9ad6a75e26f0fb56f46aa1d890cccebba631abaf82a828882f3f1ff331c9798ccd1829fe012afa19eb5c52681ed17c801bb089bfe1db81c8e62a886219296f3b0f798925584073ba809c909e9517b215c2652e57b82454c1f1bf8d12bae0bf26463ab6b218696e7e32ff8bf4a0d2b65e83fe2a54544414fb98cbef55e8efd67db08a85fddd62ad7fc260be2014cf9cc1014bc5be45e17e5897dad674615b2ad6dbacbb51b18fb57d9d49be3b94b68ea9f976d040b7dccf70a2991cd4ea8a16149ca5e3f90a39760739e14acea7b935c862bf42621bae3c4b8d4a2be3aee52cc3222dff7ff6deac496da44d1bfe2b6f70fa7aba2501e5c211df814521214cc98d28b44d4c7468a19120058c11ebc4f3dfbfc83bb582961445b97bdec70784cba025d73beff5babccbb78cbd46d7b73bfc58d9775240ba16aff54cff936ac5e3c29c7616e6b9b39056713e79772df9c7e4ffa636f1c735109bc907a947b33df24c515d4934feb686bab0d4e777d846518723cf5ecbdb34cf80ceef767b2ec2bd894e92ce2b7f3038b2d6cd7ecd5c927605767b141afae4498278db2c74451456eb98f78d012d046fa47fa47daa998ff1b4746c6bd6720338562a885e0a48dbdb7d3f8a7c2381a5617b23f12f51fa7ba86336d77992d4fb6f16a83b53132ed99c03e74626f2acc3a92b69281f24d1f47eb68ccce449c43ac0451aba1b4b933790df7266c1963074e550a64b158d9534743de7dcc376c0119f299636da9953122f69e4976b6acf401e8f707105e56c68dd4b74a6cd2c2a7f5de1d8c1bdd76b4b12858bd35643a8590059e26edd40dd67c082ea6d5f2c9f82ded9d604e6bb4ff2e2c73ac5fe2363dd3c9ed00022bc683dabd0cfab35e167e77c849c367fc0b204eb07915f606368dd952dd2c8faa89df9382cd538368c67d0da73a452b7643dd5cae2742dfc64794ad3bf0ae8689af664f2c1caf655815f23934396fc7dc93eab56ff7e67fcc30e54c6e57ae76a5f4791df3ebaef9cb31b121f4daeddb7fe9a34cfa2d227d02806b1b434a582f3b9bc2f5395e7648216007e1a491ced6c4efe01f916da6461ac57919f45417620ecb33433547aa188f6d2401e2902f895191a9f556eddd1521eacf9e57456ab1315c9746d86db17e5be1a1a4acee5e96c92e682dcdd7f521383db377e1b9c5f2f13565e3a9def6fd8ae9657a6661cff5eff5415bd000dc734b5cf26d91f2572aa1ed2bdc21752a617df80fa953ee7575d4b65defa661dfed8a02db2d6f38714b7dc3e2fae70e198e76ea30a971ec730bdfb0b5c9e1f57e0429a7e37f242afc3762ba1fad2a215e8334355df92b9f4577dcbaffa960fae6fb9ddd7fff6452e31d0c3d11685bda9bfeee90a56b66941b0e89eedb67afc4e0cf3b3a1cb8cb38e13ac1b8131902040d4ff9978f292e0771e8ca1e03ab5aaf0e5ba8f45600c9edb9693b1779277578231504025c588b7b7107f3624630a93a96a5c66374532154192fcf8bca718e6ba00261ea7098cd3f45701ccaf02985f0530bf0a60fe390530f5ce13de2b4ab42a75b4c05ea84a3ca74d0ca87776d1264bd53a08ab0ddab038694d2dd81b148944b5f3943136f3e376eb941df4066fb750a2f581e4611665be62ec4b9d3195c026650e891bd08ad2e7fc1bc320d629dc81e578fe7aeeceb768730ee6ebf011d679d9436313bdf3f4f4b99989ce30cc73e71d78faddc719e9a4f1c5463afb44818fc8b2cce72e9d950edda6b3d2d34b7f59e9bfacf48fb5d2cbf6f7bfbba9ce7a5875b3037565eafcce6ea390a06e77e9ccee42c47d3a5c8bb88ee4e68882fae3a45d836cbba231da61b37c9ac1b278d3046c82ecf1983be2e930c72aef5aa930df4bfa7d8cf125d0de6cab3b43972aaf07df35271f4055c8d68168135a8ca973ec8bbfc1aca841f32fab5b2c1e8bc9bd26fd95398ef6d2503de27b4d4d08637c8bb2774ed8513e665919e3ab662128c6111426d3d43d804dc1c0d2ba498e7f12f30733381ac3247f0d5df2a6a0505a37f753f123ff0dd8086a4da0421cc9bf839500f6a11fe175669f75c9ad01e282c1321339f1da12cdb3cd31d19e53f7e6903fe0794d7269a05eb5d0d5f36f812759bf065224fa0259501d3b2d6429a0cb31805a30953fd85c59ad2f759ef2b5bc7a080b811dcbdaca5ac566b5f2a6d85b5a9c7a5683deced5587407753cb8274dae28df3f773de832b6a8321ffd2edabcd1f1945fd99cfcc3d4479acd9d585b4b68ed6b720900bb7a67ea4a83fb28f30b08c695077963d5b93a8de6d9d684ce07cc69d80827a30c6734ffcc06391dac37afcc4b6116f6437034e8f2caaedcd1a5d725fbb824677a3cc53aa1b02bcfe7a3594b997cad32f9438d7153ec02acce5bae7385e6c79f267f31bed6d0476743bfc69d4d3f1937e400db01914e535b4bd6ac7eb0b75744c0c8594d02e162ce640febff96ae14e313e7e766656aa6e76a27e6bbfff5589fc7c56eed0085aec63c492f5fa9312e4097d4dcd25ab0f86373dd01d651ed409998d87ed5ba8ca1b968a28d0e6ea0f6b14e31e184a3a1c9584fa0ca3b330381b5879327e965707cadcd1dc3baadb7b57535fcee7f3dbd52f411ef6b0bebae6f9b05c5f33feafc38d82b05d99ab0370723cfe1d41743e73d8343ccbca6e6b6e1983fe45c813c4eae3c6f556a2213c8bbd3fa6995c8f887e73ae271d04e5b8b5347f977d59f79f97dc6078676bad4d7a924e3e9db5c6f676a4275cd31fd5ab91eabeab36da85ecc193e0342745dd35e9d4bfb485c19dad04fdc66f7e00461a9bca93d6b6b435140063fc1f3f2d36a4b29f603052e0eaddd0039a375f816cdce29b477da8a67073252490896427ed39dddf7ece7ccfef29cf5c8ab969310ba3db883b40f3475308dcebf06d80ad7e1cd6afc16e6b6ed3f6bdf7ef43eccf80c1b85784b9f7bcd3257fe9c7f6732f1ca48c7e2f9b179cbc5cf4b82a2bd1ed70c999f6558b651e232dbfbccb4b9ce73fb73f79979ea741e181485c6df1f146db36df63325343f749b0e9a3fbdf45750f45750f40383a2c55bfbdf391eea74fe61a9cbc3ef43aad4e582ebca52970bfb5894babcfe3efcc7a72e178dcf4d0c7042e21907bbcfc729c8df6d4e41cef9eb669ac7e893233cb8ab1466b03762dc0b4f1a9058b62490399484a44eeea5b0a6fb57ccf357cc336ff3fc8a79deda83bf629efdbf2fe6797bc6a9535333a871a5a6c5f7c7fc8e69dc04f0dc4ce404ea9eacbfe7321ce052fbfef65d65388bd4fe961a195cb51779c87f71d3729314cb365003531fe1f54e157baa8d7d88e6d6d44eab1996d90d318b470c0ae2bc9e48566099ec49437e6b6a3222b884c23eb3efc14f696ac20aff56e3fff56c9f877d80656f725ef4e3f326914f314f01a41a03ae2a3e4f23fe5969b07d7b633a07857baef165917188ea902fce99f8ed4c9273b48352096e01d88bf8dc867527801f008d03d6b30314e033681c801ee4c1d9b996ed57c4d4d4e8f3a2dd96329cc0c785a5c5bc0919799959df24e7ea19ef81a4d61eb8153884c7a6ee7d1ee067f68f31664c3b3a7319430bf13bf792384838536d11fdc0eb48223979fb648cf19cb743c8b5fb6b5a19d35e487daf6d89f88cfbea136c66295ec7d9322578560e7328db37826d8ce77c6d72eaf92687ecfa439e81e02cedaf009b0d8fab1d3c2fb27d88f4f405c1b98ce584ba92fa23d0bd0be6d3aff1716e72cf8f70b3b14e6dea8b05e0c2263a139e87d55e12629c4d84efeb901223ac0bc9a80e6fcae6babb39e119dd18ba89a421d641660b975377769f8dcbd456d2d0c5e72a962399b504fbc78b79576ccea8c318ceece50e2993b86ce27584e5c3d6e43a309676d063f09e02be62a26fc56779b4cf8a4ba0aeceee4837530e783c0cadbb8632b348169a6b95e481fa95380ed4393065a560d53290700ea7f816499e23f3cfd71b72fb8516bbab1ea7bd40b77cbbc664cf9c6315fa35d8e44ed0452eee07e8d8cac168bfc218015ec4f0f56003b7bbb93575e740e290785db36d4b5736632d5aaff83a620f1f248ef8691f391e11067b333cd9befb3d8bdfde740de5b1e0611dad6c4ebe801d12804ffa32e6c087c1599ada1eb7c1778ff7400867459f8d743e7c5d26cf587f3d3c686cd2b2c7aa72dbea317a8b39108c73e1f3086636e76df1f91cc9a2ec795917c3029bc314b15d88405f994ffff69256fc5d8ca5b99c936bc01f31d6b02c85ff5f2c1deb52f8f7c7c83f576b8a17f875adced020736627e38ecf87f231841cb7b31da80cf1853d1f4cb1b774400e76a1d4cc39f70e58ff750384dc730f6297588f1deb709e86b13ee89c7b64ff9d9f97b8fd37bcf2f78c05155657ca994d8fd555cdb39de1b6ce706725fc027b9b534a792aeae392b5d8cab77e457584ccc2185dda8f8f2cc3542ede25f1b309fcced0ba28c55b267edf9417a5e7c7f1bba80c93e89203a7e330d77001b7f97314e5ba676cb7ccd57be65d39b822d683baac8dcf3362cf05ae76c2ba5b820b1ee949e43dd3d4472d0d49dfcb6db8a48ea414cb2d8389b8b5d793cbebddebe8deb55f38067b9beb84aea89e6d0ded89ff850f0d4ddec4be47431fad4df2bd3faf289d27e310cff37111f99617dff01ed3d059124f9e11a83bc2cfa12cad0887dbe1d41d9623765bda7efcd8fd2aeffda8f8f5f6c7e6e0bbf31f85483a7ff90b9a9835e533127cada7cf9d67fa4075e7b7de678eebb0efa9de651f08b1455a5f1ca9ee5244aa3bbd36cb701591eae4d2a8df1591eac24b7f45aa7f45aadf17a9a6dcd0ef8c4e6b23e48a83533f882b4d65164b5c5b4dd96a15124d8b10c4b7a1a92b9e290a0c8954f20468258a9aa5d237d15a76c0d8caa9fb71009ab3ef6a6807c8aed8226ea7969534348ee3a5b49721021d23d1f7f6aa884253971943638fdf7dac719e764984f82d6654270c79ceb99b6104a3accecda2cd36aeca8d905d232bb280319efcce9cb609885126932ad7f6d24adbcc3b2ad9e2859da545d9027165434dc56cb9e6581d0128b074e11d09f2f3b5869b46c233404f83d85220566f1a55f38ad1ea7f2ec0d4ffebd1d7aa284ba137f1a7475d9379ce019039e7ce6246aca533d1885730be91a71db72570825e187bd1ed4039da1cda67d86bb6852c1fff168052555e04fe4ab6535ac68551d6ba4823efb9edf2acf1da2c6e51385a15d59e250cee448eb280cccdab2ca9d43745585bcbc882bb5884f50eb72f8428712030c052b01cd455c7247bad1ccdb94175a2a8ee8c3a64fe72f0c2c0d288f711989b557ea4cc4e7db81eb252083b133e6bf0fec3e7d058837679d8faa9af56314eaf3e9f05afab8bdc35aaca94fafcd6144f08ce7eadc7ba828ce09cac61cea3b7666fe6ae01a30a5ad9a20a88ff765b65669c0a99d075aca54dd89b2db177c1f205580aebab8da8bda474fd6416a676aa881432d7ed2bf7cad255913603932bd43f4685cc9fce39c3acbb5643238898610863f0d57b2babc99ea2e745ec2c587f90b1dcf0cce85c7145750f59702953c59a44a8a1728554d1ebaf0b4393cf765bae66e617948d096c5bc219eb2896c66e131dfbcc0323db55db17733c1753fe62ea0a303839677ee56a24a3c408d0ded047e56c3bfdaf8ba98ad787b037b9d9c269f33b2b7a4ea4f36499762fb9a80661cd5b185095472aa2f01eafee9fbb31b50e78a7b295381039e67a1778ef4b1953ab7a19276779c28c4d322ecbde3740136938f2ecc00536685b3c42e614e9e704e4847dfecac4d7240c6da2c7c2780724c285af7539b4b3fbfcdeaea82894889e00ac6824023c42d25065f05ccd03d01bde5c60d4396d6d0d45a0aadd8b247a9e1bc47346fae7706865d6f56f188da7a85e2ccd251ed9c8439fb0860e958323f67636e776a339cdb0fb920c1853eb7af67a92b21155cde1c0e3a5a1b935a6c5acbb584fd3c50e618919cac8c6ba4bc4260863abcb9e998d1c8a02d66d3cbbaa9fd79577d3645fc64c4228b61d0913cfcd9e24d912789d8bbd90e8eb950c4b58bf5b1ac0229edd935f998ab6247bc5eca7117f5797a36caf0a96c9481e466b0f41b5a32e259e5ee7fcf55cfede637e1cc5533761f0b8da475572604e643a61574d2293b7e348a2d5a783a111242567a83204c9e039de23783d81acac7a9f0119ca2888a3c6b8fd4ed0bb3845eb31cb18b97e4db24f00485604f9b7adcc3a117b6782e884e5776cf7cf163689f6499329bf72753843891dce9d50d9784b228c29eb54442e22d9b39744b00d16c634273bcb647800cc30e763948922c463991f8b75f9b92bf5f9b6a59d76207744018fed129fd792a860bb2cc93e8ecf5183449eb27b14afe1a5a9cb97b15f9e2145ab6719faa60245e1c6aef4213b07ce16f640e4215ed779dd75a26e166680902d4e162680182b0769505c995b7d169df6d198e523e5a2c71a7e776973cc215fddd0cbfb95387471da2a72cecf8cfcf6b55dce7a48a9a781fc52c06636b4d39ba9c96753afd0d71a54a6473e333af6299acad52c93fdc39e4b8774328eb2eeaaf4543b5391513e7e7415a6a6ae2cabda4369730aae28af1e6187617b14a299919fd639979f29f495d13cb2c5ea2aeb3294bd49a48bcdda3c3218dc7795313845781b48b436767d0573833e37dd1b643d97d87614d5d577a00435629db3346567aa50b175707505cb85831d28759988d4281858fed96d993135a5d6fefaa0fd8cd75ed5eff9f695bf8faecfa277c0e7a829d4a1f6dcae776995bf173262884d19b57192e85151e65eca560fefad9c872cabe4d2e07a2cc93404f6446460bb01ec20722e3af85fa26f619bc39156f2abaaca33451dfd359d117fa3deaf4496fa3e83b3563e38c16461b44728daa789ee0af67e59bbb0ad9ad872aa0799e6f1332a6db2ee5b5421752636b48a75b08cde3288f5a184159ca06d825db306ff2ca9603fb824db9037d735364bcc64cdf54207eb8b50899365188cda337c5db890f50c36c501eb6ed17c3e49c289194f79cf1157fb09735267ac22cc506fa4449975f3f6ae6adfec413e9ebbbccabeeea7793fca7ea2f2a3f18a6475ffa5330b7d38092511cbd149d9bb166344b2dbb10c1e5fadcbf18adc0b19ac55881243b617f56b6b072eb0008e0bd6d1781d7e96fa5df02b8e5778bd77a5dc9e3c7747e9fdd08faa75d7fb6bca3b6e9f597cf3bb2f6f82faa60ed4a9cea04114a3fc3c3f578fd754ebaeb1feed9cbbdfab7581af783ccb7d5a0dce0943e7b775fecbc60cb5347a595eb6d1b1bc52a378d0e8530d642bb916615de7d758518d55b2ef7e8d17051224a51f1befd54a3f37d6e9cbcfa81032d7db23e4b4dfede3a6985f5abd3a69d303f46a9e7b7d93fed1b1ab44c633eaebc4c76304ba0ad107a0425fbe65a1a66026a7eff77dfbae4c5f6f841e45850cda782f96c5d6e8f47d1a566a6add3abf876a2b3ee9fa19c2faabfc3ddfbef7fa066c4d00bdb86a5d58ba82ec1adda21982997230b81039c83cd843353455793b0fd4e18482cdbd697cd4d258cfe4d491526ba736665eff58a4c40628666588cfb5e8859ab0366768f03894c306c89534c8afc311326b58fee9e68ce71cb162fd36d1a139b42a45dfbd6b9e7964eaa351ad1fa5d933cf966ee273e6cdd5a052ed858661bdc9fa7786aa6f8b68396babbe1da8cce4e1e332c2670f5245c1b745359f215ff6a146396caa2fd693b749f47bb696b97c3ce58fa6a69ea715d5d6f81a27401cd69f727350f5de21cf1ac1696bb0326b045de40e6adb71b6db2a63aa0ac4832386f0f7ea93515ec1a84a9fdcbaa21ad6f87bffa9a8f8895c7df83abc46fea4b08d1aede90f47d947a1a1b9683aab4411086ffa59e9ffa1d5ed28504a6bf76fb95d369e96e40215ca38fc9cc2b90b4b626825d7828face4b77a3d31eb332bf93d24285aa3b2dfab72024269681e8d92fec7c8d585e3533ba7a93fb7981092e63ce7978676da1adcf3cfd70be85813427758a7533644418fce899f6fd3d49e33b8af55bf5f881e53af4fd69c3dcb08c9b09c41a159cc71fb38bd8d3ad6b42df7fbd0c68f22fbeb3163b0323435ac4318b8238f7649a3b3361be3a86f8d7266abd76eeefdf56710ed1cc763fadef55ee3c76ee2171376ee15d2725ddb68740e53ec858686aa91ba9aea3162efecd2ee4b3a597c740235b0f4c54fcf6736b41353a777137d8cf56e08fbf3d71cedf6a822771bd0f69119a0ce7b7d4a56559f28f76a0e65a542fe3490539e23d6319d349751b11e3255f92920257d44bca2c13e6932c699f65c4c4d669d409de035f20ff0f3de8e6b0dab00cd1e48d639a72e5d7d8466584ed430cd34a97d30b8d3c1d594492d4bd33df3242afbfabc96c6394347aab92ec8739c681dc8bb8f502121efdd1667f09da1292b12db3ec26fb68896110a953f07d4a4ba398a3e0393b50339ae1dc822b8790617420e768ca22089ea16724afcafcc581b755d71b6f83640137739a988a3e5f6c0c1f1bf9e649f85364a7d6f341b1adcb7b8fdb89f900bd33dbafa640fb99783eec185fa0940c94bda47f93e6c4363db3941ee1dc78883eb515473f80ca8bdf931e53dc8f1f779dc3e4612859539ac8ef3e5e7b277064439181b23fbdcb81612d88f5c112d33eba99b411bf24c51217912b52c4de4437281b7acd38e72c3c513b20397b1fa293299b1468c198ff5db66614c337331947756551e647e5c9778cc9cb692d44a9031e439b99f697b456e70e65981dd1e85863e79924458537f772c7aeb3c505e7d84ee652531cf5c1dfda3cfddc8ff54f75cf2691aff24fb84f8aaa8e4e33df34eee699047099fc487d6a49690662d903e2b075b13b6d5eca6f7f7d7d2ba1faf67104699f47ca71ad7a63e5ea85bdadaa2b234f4d14af940ddac99ad1ad9f5f572845a57ba9eb3da360c6564b4d5b3a9f207a7101d3cff7c97433b53943d275006546d6a14cb8f595debc6aeb1fcf1eca1421793ba73af7cb0bebf33b411b21bd624d3c5c5410fc573ff0fa8774e7d16347b07645ffdde89c7aedece78b07d61072a037e735646ee50add5dd9b9e7b718c8c6ecd35b435c8ba23b1312a1bf9ceb5d76c8dc4734ada55cb24d950fe903e039aee6c383acc6998560beb71e2dac5d1388bccfb76b51e800145c5f3e275139b0d5f5f2b0fa2b106ac1815ec2ba70d359f49bd1df863a62c96939d3c7a2222c8e5b7759635b80af7ad51f888f2c10eba8c13084b8b61bdb9c02367251f9c8022072779c64d0e9f1c33d65ea1257e9fa804e5de0ea21ac3354182778723cfe02a73e6afd7c2d1d4a5c584e555dc0727982dbebd7c8567d9a2eaa5f582a4b65a1285cb584397a8e6796b725d7c4f93f72d6daebb8fda19da1ada7f9b76163351b82458007046ce4287ac4fb071c704f936739fd019eb3c727c7669b747a568a805ef6fae57ddb77f33ed0df13c4e4c7df482dbfa783db959ed532c53ebcf1fd05526b0bf6ae45093f63a6d79f3e873c2d565e4ac00178c6a7e68f207b37ba4992e96dc578f907efd69ac37a56d74b5d1ced2e4b1a9d3c9f4ebb96b729edd6127a635a434675a141fc8f489ee1d8dcfc206b9548dfbcd64d7e5cf8ed7798e583e66209fc41e6b0a152cab997e9862b7425f6512dba012e7a6d80f53d546d0536c51ad8c115deba095f1a4b6bcf9df999f5c83c84ed646039b8e7a1d03465365ed34adeca7da67fcc5e0841d5e2b8f8911b3debc6e9f16ea5d8b2cf35d58a287dde011996db510fff0fa93c1e0001fb72d9e0e6ea2ff006e4d1d0658233dc6a6b0db6f757c766bfb7ccc1c739144766b07287435268fff14334147c8f4047f325a5bf5b608d6e77d137247092621d1df5dd6d4e506ba7b83f1a0ce1162bd79653d135b619b53e6bd0c29d8306ed767061b145da48122cc849130618499329b2c0cc089491814ffdb85711c214954b07d7c34b50ac6304afd23c995fb2503c9783c5006d6d91af8ec8ef204cbf23509eeb056bc07d25cd9c2b3b72687b3781ce2b33af603dc99bb99c8fe92df1316de92df933ceea2dfeb19e9135cddbeab75577649fd0cd59aa5d9d7347b8d22ff3761072ccc3bad61e1285f6b21d4015eb5299b077173fdedf87da36ecb30cba49fbda7c6a787db58ccd241a52318bacad8ac0cfbc90edca113f458a7421634c8eda1b2fd1e9fd75a8d13f05118928f97f58435fba1f56b0df28defb2f9931a275a9fdfdd7e05fa3cd43bc72919af867e2feafcd4eb7635b2d7a39a215adfec5d7101f0e9e27efc637d2946756d5561bba8e3ee0d7240a23aae78edd7b63ff5ebd4e70735f22bd2d70ad5e227d0e4f73fb6b6b4760de0f39875c5de5bac23298473a1ecda42ecbebbf4a2d4067b07c638d4eb6fa35845135be7c5e6ba2b2bc1744517491c106e0892ab153318118c78c88d520873bdee814d09d893d52c86c0321bb1ec31b9b606c22ec722260e621b3f63c3032eeb36c6cf77023500ecc74a8c597867d2f614b7f5c6ee5d18814a72ef083339fc6db7b3df43bca6ba1e422f678ca3ac6dbcc1d38819d826f138ac32e3e6f3683e044cf34bcacc965b038bfabc0a776301ae6fd198475c053558e9cd748e93e7b4959913087b8743295f0a456cf8d67752f2ac6906435b142ec0a3a0b128c3741cad759a7c549ec93edfd4260b733d3ad85382b11c33ec119f92b0b7dbca862a062a9a0727603df765b330458131a72cb4f1f1ba58190320fdda031fcd14fc473367ada2719f170ded7431a7fcc1f179d50ec2bddd76f7f5f1c1fbeaaf29f2d7aee5d90cbf27d3ee970883776f9e8f8b498217775ccc38d9b3a3efc9dfea8a2abf75a09c0d0d412c7cdce7074e000cd4ab719f5709d70679a64ae409bc4b11d59d4964cb4e1a28e073aff413dd33e70df023606f08b81fdd4b24fb67756b709ccad36a5fcef0276346885de4828f74d7e4dc7b237d915f627b3bc9ad3817c9d6e41d0b8753d790c35d73fe183ac19a36b4d3cee6220c20117011bd46fed7bf0dab823a1606f6d2bbe33ec4c7df640ebf47fe7092c72e421c10cefa82f30c7ce784dd99b04c827f17ea9f4ec8682b75be4c92b3de56cf847597ec852cd376d93bab6a1f68ecfa5b86cfc897c3243942df49dfbc832d2a979b3e8a826fb7552673ced79cd3a96e047352c0e29a19974636b62d0abea99da8f22d4d31d511678d7386eec9bfbcd531222653e03bc232dfc9e646258ce0497e60842b2a1f9cf508396d1ef431cabcf04ad6e1827e51e0f4fdd2b9d271f8393a172d7ee1edd8121cd588adff8cc7d386da1c05d981b0cfe3d9760fc003004cfff563da10e38a2be3d12bb8f6466f54635fb99fd43565f9eb9267275c0feb557cbee23ed1ac0f0fec40ad1be956315bf10c6c11374080839bc113fcdfa663d1f84e2ae334d7f3fea0bc812c7f5693337a9ab92fae1ddc59a0fb607b5f381b01c27bfe3ccfc98aee85fc9ee2cb5b1caaf34f251c7d96c61e6d510d4dad9bf0d53cdc3ecfbe4f7f85fde56a32e302ef0a9cc5e03f30f4916fe9cad9d047dd2b1bbd4676dff63f8b272f892874c413cad6133ae7ce620af877686f4e09ff242dce6476cca27ac314076e9a99ff69e28fc97c47fc05f1beabaa5d276b4ec6fb28c6bcd9615bcdc5fab218f15d26fd9e2d8c40005901bc4d537e89750d7c164b43b98bf52c3bb24beaf2de2c7db2b035616f682e22bc8ccf842389e4905eae7d4606e0a1abc804bd9d60973b6d1e191c0a6a7dabd00784c7f1e0729d82f5d8217904228bb07c20391919be17d1646dd1dcda786d0e5fa14edfd6d0e591bad815a3787d2d57839c4e0a9d35950bb36abf166d0de8951f739ffab7847df53e025fc196ae46f9be9852d959d0202675237fde4a9e093edc842f5666243c07daacc158deae0f69987b0f3e77096f29e1314af60ca95fee1e485d3665cd779ef99ff8527568f387d68c487d3ec7ce4ff5ae523fc22b962d5dc80312f03930db4903d3b387787df5ce92a0ee2dae8b6501558d442443ee8a29ba943871e57b15de9bf64714f6735dd9c4fc7a557ba9c9fa22cf8fb89729f4d8f7ccf51df505b077d4e1c8b3d732914d887a4d8649be05d59c31a44f1f538b548f81979d134afbe58330067332fcbd7af2df90375b1fc341712e8c93899fa9979b1859bc7ecefcc1acccbfc5f208c6b62e67746bfb090f49624b3e063f3d6e83f262e8bc67708899d3f26b51d47853f3c08aea057c9503d973446159c91d48b98f92dcaf6631d5247ff4da3719e18678465bb9e0ef2cc2b3b7c1f690dd1e6df11a2367adfca3664f2dedf66845e63ac90bbb94c4f2da644d291b27e8b126b7d84b8341da379f2fe033cff6afb7b7872bc00d213c95cf49cd1abc07db3e5c0fb832633f50411b2e2ee0b6c81773adeeec6afedad0d2dc7364df27f58899f67aa608bf01c7e587c75d51926b58b467b9ec5cdb3edfb644b4b46ae4b231bddd8bd2d0f5622e57381b873213f30b55fa051be5df10fdea1edf8e84943f94c173e43f83759de73748f91a5fef3f3bf919e0fd8832b63f7db03b8157113f9f705425f198735e4645fcc3f177bbbab38e8c1df143595a07e23445feb6981b96ec058f7187fce5bbff7c3039c45843d51f07f2e19667d1dd1ad88e6ebb9e1330074b972f78bec797d7eef79745055f75bce77e92bff26ebbe431f648ce1f42877bf02176c8bdf64743dfeac5d4588e0ac3a6c0ce88ee25be26ae17027f76f45d2a1b8f0b73da5d8ffdafa7f1f2ebfeb5922fb8791f9ae045e371acb9e61e1d1bf0466cddace34efbb918d1595f4a09fe71524757fa3bc43f8bf3cdb23c9225f73b713e4319fe72aacb14e5c755c7952ac6604c387cbedd8e49312f77a95e5efc8e501259e48a025e4f5eba9e18e28b4bfa5ad4fe4c2cc3e7b9574dd839a2e7bde239cee84ce45d4c6cfb2cdca5e0d9437e63bc0d489f863272d626325f360b773862633bcd692b0727006c8be8fb6dce9f10e3d499da156e8c186eed60f224f5a5e81ce08ff6503d1bda31f9eeca37b7d058e61bf157f4b09e9dea97d16fad4fadadf563be0e5b5ffea7f5c76ad1fad26a7d6ac95630c77ffdeb5f9f5a0b3ff4f6f66fce26f87de15beb7077b47e04bf5b5b7f7e0ae7eb9dbf59efbefcee6cd67ff98bdf9d1feeefb6b59bef7edffed81c7c77fee3b7f49edffccd9fd665ff634e2edefd76b602845febafffdae07fdd7968f96887ff5c9306503fe5536be75fe6ad2f5cfb99e33eb5828d3b6f7de9b49fe1cf3f431f9ec6311cf31f4ce73fd8a737b6f3a5f3f485ebfcd663baddeef3f3ff65b82f0cd3fad4f2777fbafe8fd697bf2cb49b7f6aedced09c97f9a1f585fbd492d69bd617b6c37c6e7fee3c3f77d86eafdde33eb564e4af57ad2feca7d62bbcb8dde698a74fad99efb6beb00cc37c6a89e99ffa9f7f6e2d97697d613eb514173f98f9d49a665bcfa315e94d9785ff6d9cd5aef5a5f3fca9f535f403dc9ee9dc697d61bbcf9f990ecb3e773eb5e41dfee6b9dd6bb3ed2786f9d7a7d66bf5a551bfe1d23efda5fa9f7feed7fbdddc6d7df94fe613f389f9af7fe135e2cd7fc030e1916bfdee6d82f9ef5b6bfffb62f3fbee87f33b5941a5abe766f1b43eb5a460bbf911fe61855e6e41c63fbf6c1cf2fd9bf563310fc9dfca6613fdf56a858ed7fab2de23f4a9350d2d344f2614fea7ccaddd664dae1537828fe6bbf86af2e2e4bf2ff36df2f7db7c175e5d8dbfbabae375e3eef1fbfea715b59e62ff4093fd75eb4bf8633fff74e730425f5e37ee3d33b0d8fc166c5c78823aff81bf6b7d69b1bfb11d90005be8482c1ee8fa134dd83b04c3bf3eb55c2bb45a5f5a7d9f09c793ade78848cbc865fc7f34c77a77248f233ecdad7dee71afda08b9e2e0d40f229939886aefd4f43c54481d71a4436e4353573cac331be083c0f614d603857c9c43ccd5c88726a7eec701e071f8ae8676a6a89ec7013a8cdb699d9934348ee3a5b497b12e019c0d429a03a1cb8ca1b1c7ef3ebf77b5d30ecbf0f83c31f42d0bf63ae18abb8cd72926c038c8d9097b4b7bfe06e71ab4935f47f552d9d8f63ecfefdedddaf80c14f338dd1687f6f8bc9a9077473c75511e0ad8edcad8d2baabef3ecfcfd7ea99c460ccadc964b01486fcced5479efd72db87e8dc020c58573b79cef2fa1ae71bf199f5e0ac7fcb709b43cdf2d0c4baca2a8a8545ba24c42a8157565dca6f06e7215b1ba47a66859d6be8fc36c93db8ce7fbbc5b25dc33b527f425a837d65d313be7379636aac17e3a182fe1da8493db55192db627306e090c67ace18ebf0fa089e9da91fc6e385bf63223edfb51da0a7ec7ba35c9038bf86c16bedb68600fc6867924f6f7af610727533be8411023db8cfb3f63aff9e18036aecf3b2dd1e453972cf4fd7b66e665f2e6d8e0d5dbce786ab03d655dce1686bac55c66e8f2e634e416ea0eec66d796b9e59cf09e48da52bc8682bac13cc0e78aec61ade7f26c47fc99e6757523bcb95ee14d73616d9b5913e951f935bfb74c4c075097e71941716f57f969b53887590b530555479968b1792355030df649ee15ab85eddbbc3d7bd2410fdd159c731223cbe10e785b514e53711bf99d65d39626f6baf63dc5c796715e69a42fd4c68e9ca25d29b91d35620763ef6f91743ebeeedf604b070dd240fb9b3986a9dc5841342533bbd18ba8cfefe39c7f3aa5ec61a9e1be5323a16db0a45b6a9ada98ca1299e2b0eaee7bec296e12f8ea82eaf6d98ba3a0622dbde51af5c522ff44e3eac06980c54318e25b6bdc8fa1776334ec5ffafa8e56c1223a0a9376d842d00f11fa7cd7b06f7b8e7d2c61a6a7096c2f83c764461597e1d3577cbde619bf3fee7cffe88a3967c37784372c4817e9bdbaa0cba6f521dd76874bec532eaa139ec149ce5b7f993c2649ac9434dfb302339b94496e7b014c93d7535524df1f529ebaa2b7240add4c70dff4fc67908fda1ca1f688edf9ad1a749dde39d793e37cf49fb93cbb971cf765b3d2618f3949865f3a047992bf077f383e77d7615b5a4993634c139060c91da58cfb54c50746569f66bf709700835c0066a8aa54c8fdb5750f361e4630a7bf2ff84abe009cb352abccae618ca69bee38cacdf3bfb30bd7e4ea63fd99c4a62ffa59c0994f5f81f25279a61f3d160118ea7b7634a799653d43fd0f0d893cfad2c4e79eb13f93550becfce3c9c9b511d17eca184f33d970f7ba4c2d434816f425a186df5e28abd106239c3916706e6d6a8cb47fc753635ebc3afb329fe7ce0d9f430fc4c3883aa74f004efb2bc7e9152bf663d885355e6f850f04c37ccc328e1d3bd27363c287956667dcbdb7940f6ab31e53972dd6c616b3d166c473a1cd783d4ef71862e1d6c11f9632ee29ea088af37e6f06fabbea99d902b98077ba886a68adbaf0e27143c25b7b22be684507ef2f8245c14f43548d4dc6a66087cd6f7d49a09a60cf766ebf622cc55fcdc782cbe89b3bd79ee403e941d289e13287f4dde06f5dc5a1f544f55c6e75d93639060dc36bc8fb361cdfdc43af6a1b975d60a6b68a7efa6ae00d6de637c2f9017b0b4530ef89122d4f233ddfa1320ff553e24dcf30c1accfc740d45ff077d26f20b90f79e13ac9ffa7d30408c247ab1cfdb871aa6a17c00be810813531a46fde87fdd107fc66c618b28b474c05e38d8fe8a16cb94c6cf44850556c0df80c738a33b92ff676c2ccdd2478cab093b6990600b3cb2dd3116e41b197be5653a53a68dfbd11fcdde18e58fef7e9c87375bbc45b262dce7f5189f176a990637f34d81d38b568ecf7be61a72443d88454dd9b466cde7b9573fca35c4e781a8aec6801f7cdbb7fa7333b1b1e0faac0e9fcabf786d3d32e76f7291dfea72fe1acd6d8cc3f9beb915a21c7194930b556b36c1638e71feeaecec0fe0152f9265f76353603b359afb9c5cab6ac3b070dcde8b099960abbe3326d0c8175376a6de93ffa9943c2bb3ef2e58ef8a71bedce83a49640f2ee885f5f282e0597f3db881701e73a7ade1f762acddc7eb5862a9de788f8e3e2ed3433e787c12fda701b60425774ba223dd331eda1bb937e35388ec309fe7ec782cfa1e1a07ce1eea47a1e67fb4d299c1e95bad4dfe5138d591cd83aeec921addb5d49ea9b9cf0d5858733fabce89021bbb18bbb624e7d4688f9029aa7b57449e2dc808ffbfd877403830b40072fc4b3017133bbd2447f6567f2ee9c3fb70ac1f83d748ceb1c7f09c53e9a88d6c709165dc07d67045f90a7b0a5ec6c7f3e957e3b886d0d7aa586eac13d6e790d7f89952dcf8c7d875f578fd8fd7bf2a70fa297d84f59c838d6a0f3d6c97d4f2d736f695d363137f640c850683985efed3ce7134a6efe5dea88b5136c909d04e0cc921acf5ab3639f7634edc473ef348c373dc48160f014b695bcbb3f3785cbf94f3b6dc8747c3a31a46fcb055ef3a3a811a58fae2bd76d4b6aa4f747b35cfb5f11839251caddaf3b4b18c8ab154463361e4d901257779f3b837e53e6932c6d9f6e4f8a3ff011cc2b7e35a7f0f359770036eed46b1ee1bbeb94772fc63ddfcd19c92d6bd71dcfe88b77d7e34eb47b5f543796b07eece9cc2779e292a10f31ff7e1b79da5c9914d3deae2fd4ccb65aaacd53de08226784251eeb7282c2d4e589b53de33381939c3c9c2d4106389ea597a9984c61a31e6f4eb66aaf29cdca7e455147b67e965c08d35dcc6d9e2db004ddca5b18ddb8ffb09f5e56b9e8d7d936f418f31216f586032eda37c9f7230da393caa1dc14255cf201322fcc1689c9331954401b8692568df043001aa63b0f90fe43a689d058c8d9f7d2ec19d7738353420fff4355d4fc35526d750589943c8cbd85162fc401eb4b556092e25e4d0ab7bb3ad6c323943fe5c57503cd6df7ddecbce85c39db60647997b43ead62fae8876763f8a5fe0311c1a4ca6ed7b892a6f28ad018735d5041f861623bc915c448fcccdf908dd2bc9f79990fcf4832d9e503d1e72d37337f20151c4a2efc50bb300c3af01b7f53d5851cd3848a29c0b6857931c173a9c5a621702c7e907e9305b7bfdf17a06a9f14fcff7467da1f54b033f20da99a2ec398132f838ddeca378afa975a5eb39ab6d83c3a94b571fa199d83bd761638da77cdbd24e2b8313cee680ae4d4df872129f6fadddd654fe083b7790aff77bf05ef9587d5f8c70b53f08c7dbc1734fc5f3d438ded1cc7793fa2c68f64e0dbf73bc77a2b1ab99436c4f3fd8bed8c73ef519a732f539988d73c2e3381ed59a6b6a6b9075874243a3b491ef5c7b77708d8571bb9aec356a9e3112c39c3841af538bc916cdc36dde4fcc3f04cf3adb81ca98bafc3dbf1e487c73361c1de6c35562b31935354499f7728676624d625f5d9c98ab99e8e7e08f19eb584e7a5d693862eda00bb59b80db34e51953eb7af63ac719f561ba99c1f5f6f69a60b4bd69426726aae709d73bbf0b7373c07a73b180fb79d0e5555223bcc7f31de18c413db01308cb622c9992cf90478ecfbfcc8419eec319dba8af045f6d676a02674e63fb0885960eb86e21e12fe9ae2411adeda077a6cd85266b4f3ed84197b4f3cc8696d6d98e7d7e62e8f225c691833372ca1e617d4eb18dfb35843ad1cc7d86be08f15ec7df3b9439e6a4bfcdf5aafbf66fa6bd0cebcd051eb8ba9ccadcc11b1943a72737cb05afe221ce7ca2f8b44af6d703cf8c8bc32d1e7d4eb00ea79edf4474a13ce3297266727be44e2e4bfada8af8731f6671869f9309119d4cbf99bb06e7d93d7622751d42ba87b27da294318dcf42da3cdc3bfa3d9e66d6658dddf1f8789d70b42a6b91e59ddd5657b31443a42a0eb3aae2252032056c83aa6b8afd30957d4872e5ab9e7bad83565d8b65cf7b6349099ffacfccc9b36830aa3f28c7deaacc317b74be7b8285fc9018b1ad099de679daac37ef67f05fc4123dec164f99e0b7d6e36f67787bd005dbeeb6d86b27fa8f88f5aeba3abf46793621854ff516bb5343fb048b1db0ecd1ded258d69ef27b57637de0d4e18c34071ff87ad44b766d51acd903e0c9137e0784f575acbf17f0bd3e6c3ca8f11c34a153fd7b856dde144bbac26f5c50ab93600f635d5c19a893d94a7d99a88aa044f83e0ee71d5cedb492c42deb44982f26b68f873c322bf03f2963e17f4b5ef2bf870ca4e1a48ef2044bf32b93bae192fba35845096ea9a92bcbe2dab6d27188cfeac80f706fae6622fbcb7239e3755ff27b248fefc132cdeec5d588b50365576cbbd3ad599a7d4db3d728726f2b79bfaa759aaab5c6c4f846b7df9760b866db3259ab7b533ca126184cc5bc2b75e39d9ea5857341a52be439261ae1e96431590b3847136ec21bfe4db50378606db929c768b6ad9e9de71c2de490950492a31063be116ed36a7906dc7949db9398f82d3ebd384204174d3d9a80a7d85d43de42e67b7cc657e791e0f67f381f6a86d3be10b3ff862baa465f2298fefdc2318f31ddaaf34a9ad58697e162df53675186c59fa9bb3879849b02b83cc91accac753abb3af37cc0ea37cf36c72c002b23e532213925410f726528ea5102bb3d0a0d7df22401aff62c84363eb4f603ec10d23e0a1f51e9da3b13fe3bac7ba9c3116b4e8f0b2510760e37839c1755ebfeb0835edb6e502b4f19a3257dbd87ab13bf679ab63be2468f38ca09bea9a94d7692909cd5f1dfc8ecd7e39b4809373ae143578623cfd2bac0871e71a347cf24f204de1571a3c7dcea49cde743f9e59bd4fb9470de56ae412691a73535e6d0e69f55db938de1bd8bc3689572a117c8d6e41dd2504626c7623bafe6fc81fcb5d8365e46bc2f0417a7e01c7a0c67114d7effcfae45a1cdab27b67793397c23dc0205fcab05e719707ef35b3b88f2cfc484cf77476250d53229aafd679df5086c7cd80b62062ba8ec9dfa6bf9594383bf42c5f10f7ddbd8dc6905f994f93e7a46d063ddcc395fb33eae39992bcfca4631eb06391286a6a43aa2d03c7ed13c7fa340c788f8cf01175614b6f63ad62d72b662c2ff1ed5de2fedf6e86ceaf211f431ca18483d277dbe5f74f1815f3a57340e3f47e7a28d9795e1ffc5b9caeb88eba7300780f86aa3773d96079cd2ee8f3f557ebd2bcef76bae33167221c451373e5f719f68d68741ecc07da45ba55cebc3b44620cbe5f9bf4dc7aac717cc70defc2caea01c0f79b3337a96b92fce87b74584751fb0f79d60b4c57bde59aff2fc3067f83dc54c09c26d655ca29e43fcc1f679ee7d17d85f6b75e90ed5737c1647dcb2a55cf035b2fbb6fffd1c8ee6d6d6f99da9615d34c2085abfeea501e45d6ded604670fa23ee72bb5d870b9119337ce6699d85a5752fae28ec0d6e96e5a14ffc31596e7ae22f88f75d5d7e147fc1fb28c6e4061ec6b59ac5488afb8d2471e41159d1dbe3b5637058d710b6b6cf5fe658cfd2985817abeb1f2389ac6707c21aeb649220039779cc4b19e33da53e23e122895d646a2927a334948fa6266fcd002deb746cfb4c38ceedb6bb2f5a8f9228eccd3e1f9a9a10732c1e9c00e43bbe3770b5536069c705c1c2079ca2adc33d5217cb71f6539c5914ba6a726dbdce9a910bd57e2dcabc892bd9917256f6a156a56a1f81afc0aad2d3ef1de3643c4ace8277e5d6953c338b7f270aa43e08740bfab1bc591f3ee4e525efc1e76ec4ef0018cbc99e8158a8b0b7dbca860abb2679d79dbc90f1e74e4ef1b8ddefe1ab9f25f202f8f67d73cacf9c35f094888676ba98531edb04aa1d847b2c0b68ebf4eecf6b2263413ff6377b7586df9be98f67af116389503f57bd971aad2f787e94a37047fee307d704957188d2b4739c7276d2e55a923e7d48fd51a3dc305afbe58362d4f57c9399f9a9d3931fadffc63c9415329f2286f316f3ad67e2672896d7991859c2f96a734665bda1a9cb30b692d8656d6d84f507ac3726987676ec236b9893d200a72769c384138e86266fdde18ad60749c1f1428def71cbd7fe5e8e921b3ecdd2fee76310292769de37395436863e59189acc38677e676921c23aad85ed21b177b634d9b3fb1439f08453eb6c121b21cbd55d18cb733958538c351c1d5ccddd8c7d9ecfe4222caaebabf1197fea429daf98ab5f88fcad02b67d0ef83946e207ba6d83d35697d806743893b5c553653eb6ada135b65972bcec99f6c69ced96886dad0f8fbb26bc7e457bd6cdceb5d659b89cb7352a7234e153c2676f247509703666eaadabfc824db11105e62e7ce5083335f29fc1ba3645e0168b631b2b17f8af9f4b39b369ce4e55f4b0febac4f6a71180dd19da6d133fff90e1b2db9bba93975167de73f0f5d177d55cfcc9d8457e28b487384dbfc0df866d6ae1b48faedfb843e5e85c368731e76e5dd1630dbfbbb439e690e72fbcc650451707cff7f9f9f2fd6dd1a9af93ff59fecafbed9287d823397f081dc7c087d8213f8997dee1d410cb8b7be2dab3e8dec8d774b0b559f2bc8c6cdc4911bef9ebb4731c2fbf3ed63fdc08d75ca8c176b84fc71ea7fcf0ffa47cc6ac2fa5e49a24be5cf63bc43f4b72e4521bab944b9d36f7b0d8ef581b571ad660f0d0e5a915e36c56e8973467383d9e019dae9f70703c06c7726773c26a12083b43eb2eeb6b811bd78e1d5d6db4b33479341bd0d76b7d24668233547d5b44cba94ae25a8faabda3ce7b177b9e39187936f8ae69f8232b6cc45a99c72c0cddf42cede41901da59bad2adc67b4d38989ae7f856b4653c4de3f657fd0db37b97369fb578ac992c3fe9b7ccbb817f34b9ae685c8739cee993a19d8e963838e17b323a34bc2baeb3fbeef3dcab26ec1cd1f35ea3bdea70ead9c5fdf779c659abd1dae2c17e823af8f8fb7536ff2dc6b452903928e69496fce83cc9f04393efae726b7dded6715b863263b747c814323622f9edff6b7d6a6dad1ff375981293a7ace3c05a4ec153fe859a9e7c750872e4e45ffea7e5afffdae07fdd7968f96887ff5c93d7533ee3538bb0fc736cbbc77d6a051b77defad2693fc39f7f863e3c8b6338e63f98ce7fb04f6f6ce74be7e90bd7f9adf7cc7598ded3ff65b82f0cd3fad4f2777fbafe8f84e27e7786c6bccc0fad2fdca796b4deb4be74db9d6786eb74bbcf4caff3f973fb534b46fe7ad5fac20263fdbcf5a5dde698a74fad99efb6beb00cc37c6a89e99ffa9f7f6e2d97697d613eb514173f98f9d49a665bcfa315e94d9785ff6d9cd5aef5a5f3fca9f535f403dc9ee9dc697d61bbcf9f990ecb3e773eb5e41dfee6f3e7ee53afdb66987f7d6abd565f1af51b2eedd35faafff9e77ebddfcdddd697ff643e319f98fffa175e1fdefc070cd35d64fb370ba7f5a92505dbcd8f3062fd4f1763fcf3cbc621dfbf593f16f390fcad6c36d15faf56e878ad2feb3d429f5ad3d042f36442e17fcadcda012d3fb0f40b3e9aefe2abc98b93ffbeccb7c9df6ff35d787535feeaea8ed78dbbc7effb9f56d47a3a8eff57cb5fb7be843ff6f34f770e23f4e575e3de33038bcd6fc1c68527a8f31ff8bbd69716fb1bdb81ddbf858ec4a281ae3fd184dd2d14fef5a9e55aa1d5fad2eafb4c389e6c3d4744896703342211a1f950417624cd322cd9dcab36422e96d6016125970611eab39a615c13d5c0d2ba440b5e6c4353573c6c05186f4402db41f79044e3638d096bce6be56c73a79da94ba1c9a9fb7100d955beaba11d3eb1c6013a8cdbb9d3e3385e4a7b199f2a22c9e84dac4d5d660c8d3d7ef7f9bdab9d004d0f3cc5583b6c9b21789803b476ce5dac657196a620c7efe6adf5001dfa6bf9686ae434322376beec293a0e72ac287b4b7bfe96b037277d8bc72ad4de66d84230b7b1750519108382df19a8bcb83989726d3fc62721d624d49da14b4f921872b69679c7505e626d3cce2c228cd2a49ad10d849da545190371968fd83b9a5a979f0d90f6caca4b4b544323e30528d776f9fc3abad24a6ebd482ebc23f5a8a5d599792f5f17997dfe62701eb2b5419c65b9256c9471a565d487db8a1ac82cb153ad26c7569f561612e676673dc1daced2e6dcbda56f33ef152e596fa7a12bc829d04ec1ead0477b433bc6acfbbb38ba6fe82bfcec88415fdd5fbd274687d94b03f6e00433fcacc0be6c16d650619ce1ebd3f8dc5b5bfa646f5dbc0bec030e5bfe2c6b0788994f7bc072ed04c87775e5e0ac5fb105c999daf1e070683dd684b3c1795b578cb3527a9e23ae601db901b01740c688ad4d96d9ec9e266cf591f6941f939b88e2d7f5145f97229b32111a27e9ff3437a78080036b411809337692cb32813570e3a148e6195f0bd90326de9be7ce6246b4c5735cc980c7173ce2642d054ed00b6376603b508e3687f631a2a6c19db6f839b796b0cc1a010bd91d444b562ff86f577cde035b14967304259375c07b07ec4e23dbe75ff05eb407b2e770b3bf7dce615ef5d710e670f8ba2eb10c0a3c89fc956ca7b4a886a94c95a8adddc754c719da696b70cf8f416de7d0aa1e7db35975bb3ba466fba742758b99ac7e3e93025420542158e0be56225cd4b1ac51a25c2c5d5d666c8ead44346de0c5a94460cfcdf9e390eab7e50c9db45515f5a8ae4d22bd86a686f81c7fb0078b8ae9a5d918477d6b86905eb97673ef7f1c63703ca6ef5defc02cfc20547f6a24ce6668eb7448b84d9e49858ad94c16c78c0d3fbf8a8a02599312a9a8062593c17b1eebdde5e82094ebbc12d18272af024a9b0e8c8f95f2a7819cc23acfc36554ac874c557e6a68dd355df666f32cbe0f468cfe7824e7660863b7e35a13e5a6d903c93a6f809cdca4b2cae04e07575326890f81561fa4992751d9d7661637465746c7fb32b7bffa136036f81a67325db04cb6c5197c9730259c8ff09b2da26584e400ec03555517b9cfc064ed40ce666f331644ba79cfe042cfe4660b439397a6ce3392a86eb17de8f85f993cb3c4a49ec59bec8183e37f3dc93e4b1812fade683634b86f71fb713f2163ae7b74f509c9fe18740ff83daee8796e3f6d1fe5fb563627b3d9ecff711f2a4f91b31e45f6ee73c420911d5360c728625aa0cc3aef9d53560b23fbdcd80e47b626609b7099594fdd0c5a46ca3a42c3144faa189918b129aa084476e03216f1c910bb1a9844a2b17edb2c8c69662e22b60aca71852c21a7ad6c6df108d942090b479631c5a74248cd64dcc09a7abc6c6f2617b7ce03e5d547e85e49949cc9f9707f216817dff30f43d08e9801e8d83e1af7d7d2ba3f85312277be7f083a3e6e97bbb5456569e8a395f281ba59335bb50a012dfd34d195aee7acb60dc3662c1605ec1e0fb2b5b3acd6b54cac4de54fca16f841cc0e1facefef2214830f62b9fba7b0dba53e0b9abd43c9d4128f5dbd9df160fbc20e540650495919b943b556776f7aeed5b3d5e6e6f80ef4707e6b6b02a58d7ce7da6bb646e23925ed6ac23a46237f489f7f64d822ee63011c245507e32c5be7dbd57a986690ed139b0d5f4f59f948e2942ad8574e5b46663f4569b8622f38bb5a774f2a96105460bba2ba37b46e0ea1efe374b3521682f75438ca86ee6d6d5d0dafaaa6be4fd40961c2c0f34d6265a4026538f20cae3073b76c2d1c4d5d5a4c585ec57d7082d9e2dbcb5778962daa9e1bcc62fb686b6b08aa68c61aa045419cd4e4ba944c0bc9fb804d236a67686b68ff6dda59ccb2ac237046ce42276233c136ee78ca5edd2774c63a8f1c9f5ddaed11baa35a955eafba6fff66da1be2799c0032627bf4017af247318565d86b6ae45093f63a6d79f3e873c2d565e4ac2027856a7e68b2b5b37be41ea69a38cf86fefafb2bc433d9d56353a793e9d773d78c09a3b19d48891a937ec6d35c9f1a5595d39f85b4e87df7f49bc9aecb9f1daff31cb17ccc403e5d311657c5614cb10a058686418d29f3c354b511f4145b542b6344d73a68653ca92d6fde1b4bb23501e200efad06698682822810013e0a210a55b20b3c1825f312579e3f2646cc7af3ba7d5aa8772db0ce1b585a17919cac423deca67a3daa96ad470d4cab69c1c76d8ba7839be83f1ed6bbea50911be9313685dd5ec0ceb1b5fd1c3bc7d60ea8d839d2b5556f8b607dde37a77c920f47f4f75b74ed9f5fa9cf7af3f2f687301eef4513cd549b94b6f7767d66f252d1451a28c24c180913469829b309a9cc1eca1bbbadeecc3effdf2e8ce30849a282ede3a3a94dead9346af48f9889e4970c8cc6e3813290828920ce132cabf22439ef5af11ea861a60b2551650cae8c7da2781ce2b33af603945c93303a95fc9ec8fe92df2b1918c6d3942de5aeca5131e4ec773051985a77e5883d2c7fd4289fb6c26fd5e40ca3643c6f1e6ba78f277d2cb33d45fce8f1d597b576306d6ed1c5bb4c5953fe35d73f7faeb315952ad9df3f3bf7b596e593a06c65daf85eb49f94dda74267a040416cc68ab174a810e81ab37aaf2c5dae40c4bf792e256248b48f9079b0876a68aaf2761ea8c309451cb969fcc7d6d4d06e8fba7f9f6e221f6b10dc424954b64eb55f382c1db31a048db8ff3fd146a46152682073cd9da175f7a6767c744c96b3033a5fdc87c61c87e6be82a1b4e1fcd0da4ec998be375f1c6cca1c93691306bf41f70f75305ba8036f343bf3f83350547eaacc645e1da88347d4d9d0c6281fd6b6fbd6628338e7c7e68bd1c4351fbf1eebf25068ed75fee0ac15d9d0f923f8337faafdfb01a89731a3834a991fd138c75af19cc045aef011cf6f7246c2d8d55d7330c5fa9ca2f194670c7db43675a5f6da079f7b7f0b1ba8d1e6a9d8b99a9e61a6882e5683e752220045faf848b3b9136b6bea9ba56f91c250e465365ddb228b6cad77a661816f542b4479b68fa74427afb906f4ebba6b4ac6ac66bf44fdff59e8b6140847453e98327fd5f7a13c56574c899fab8641950e25ed85d440f77676793ba006ea4d138e0e202e95a1a6fd625c2d7bc75d8cabe5ccaa3fdce07a4d30b7e33729c61e286a4b197a7bddd99fb4b1709ce9e62a8754dd04117a90430abc652e4b198eae59bcd09c308c5f9a329565db6a68c71c735921139dcfcfa0f686a0d0260c69b5ef4cdb9ed47a14a0dcfaa606d80f113602fc7dc87ddfe7996266e8e84310513f9c552dcb8c5b88d67dcd3851575b4190810bc73c1aeb6d75bd5433fda20c5df31ef4d132445f82461ae3a300c2353082456b305deb74fed1ecf3812d11f039c4dede4c11f5a35aa9ee81d480d5d797c5acc5df7d60e744631ddaf868fda884fdb9c9da8b188ec5119204e50c383203d3b38732825a2e41dd5b5cf7e0729dc7b37ed1f8780bd1b2e13d69bb07311e13309dbe38814af04ffa7c827c1fff6d6a931d8d0f2762588d185cf11a417bc2e09a32368ffbbc9a60ad240cab1143aba8ee4c40a87e2c4b6d037db28c85af5a0f8ce5690d13825be9fb7e3c13429217f43e2684ef09a36a816c4dde71e62fa6e68685383cd9798bea32e39c0f8323e8f178ef17a3ad3f84f9800ab7e26763ac34f1ff35d35d084271018b5bc17906cca104db08ea2a958415d01621b7ba06699aa083bbfae80cb92b642fa06a2677d2be0a265d1a1b9e862998f44decedcce1eb4d1f0d6d7470f5497aced7e4ea5c333b3e94719db6f607d81d621df134699c97dbbc2ea948c7885854218f11cbfc58b7c8e540242cb2e7884d99eb9d21ff51047d8c2eb79782d936d72fcabcd75f3a57243b7e8ece4599075ec41c2d84e634a9c18f18030a6b5b62e66878d763d94429f3d492355b91af76c51c7bcd98e2ea50e3e3cfa7f1f9da5b51e58b030b22ebd901d1ad328cad19fccc0c2318c5daf847e95834feeb741cabce8d07320ee4d94c1b9dd11956d204e741843c7962efeb23dfd295b3a18fba57ac05f07bca163afa615560b049144ca40fb6cfa7d9f73967d85facd15658c050c46771c45057ca285b17afb9ed7f0e7bd2d2d8a32daaa08b1a111a38e03a6ac2dad2ba08b03632ccc335b22b3b6617722fda3b6dc5b3031965e73ff1c7e4186ec15f90b0a4d6f5cde100a772ef8a08ebc7d85663dd3ebf3122d91ef7db9cf2be41640530c74ba28c750dcf029c0d84f5acd82ea9cb35daba7d3e34b4ae67722a1ea73760448dd9addaafd73e23cf39f37b535333cc4e0455ded2ccad5167bf8acf842955ecb56dbf603dfabc67079385ada95eccd464b7472b8205fabc30d7eace0cd00eaf4de70c39d3a1a5cb8fd4c5f228f21471e57a5d35b9b65e6745e9daa9f16b35a8cbccf83153e6ab2bd6e1db7d447c05a8424fbf778c93f1b89ff5be5cfedcc37edfb47e3361c1fd1816fce45d77b24b25f7dfc94c9a6564a01b97523f4284e76b04b3853a1cb1e6f4b8500261e7e0f5d59616aad6fd6107581650e24fdd5faf47c6e21d0cb290bb384dfb6368ddae2b7a800b55b3979aac2f787e5c7bf3b12cb4f760dddcc3961f7f9824164459430c7d7a7cbd70e39a475afbe5a3f21beb58ab32d7d6e9c98fd67f1336ab26f53bb72ce3316beb398d9f2558f3991859cafade0baa73d2d40b8c6d9fdfbb1aeb837dc81949dd4eec836a5c6bd5282f2e6ac340f61c51585aba529b23db80218b3a3fbb80f5f5bd3ec994c9b491cd9332f05cf926194b1418491496c0c42fa21fe614ebb4ded6692b0727404bc0ecafc576e0cfa6261f9c80d85059c6cfc258ded08535e58aded96eab6babdf594c323177a90637d0e6babb39c1decbe172447dc27af2c5e6f073844ba92f7428b3c078d49603573bed2a734944766bb647c4be4ff90e32ed8d985f450f3955f5930f8abb26ecb97ec19e1de6e67a2f0ddd8da555d41e93f92b61c5152e399e861447b0d22fd82cb710f4ab3b7c3b5f7d75d01bbc9d89ff8cac6b0539c0fc1bc536862a82f92a63dea4393b05650339081cb63f476077da5a8fc3cf0766be341ed3be9251587ea3e4bba09ad1379103c4b6dc823d261e0bfc6d236c2b3a76f4ac3c2782b27135696f70bd70cce5f857aed957b74e5b664dfdf5f07a5975bef7eb71e47e92bff27ebbe431f648ce1f42a7ff7c841df293d86d8732b275b3bee6abd8ce20f7923af28bcdb128795e86717bdce7d13870f6d2cb60ffdaef1c1feb1f6ea2cbc138d65c738f9c601296d97f529d6ed69752724d52cb52f63bc43f0bfd4acc22cb87f3de9adac277d4c695205faeb0ff54e70fd1434776a0a0b95815c3033d23dadfc26e461ffba6af47bb955ddff1d84fb5eecad4bd8c9f9af59c24fe44daaff4bf867f44715172fd621f9d59556dc3cf6353dc2b92936282ceaa202700bc850be01e8be86dc2ca23ac4be0f5446218118f57452e16cd7aa758c7fbdc38dcb14e2ade1166749d9bbc4bab6d8657799dbf9840ff173181fe98a3b9b59b5f71fe45df3a6707cd69b840a99f92b081724ca71119e853fbf3e7e7cf4dc8405996eb3ef77a3de673a7cb725cef8164a0d0f8622ed07a2ad0e74ebbcdb13d2a2a50d26b2a2ad0cca5bfa8407f5181be8f0a947a3fff2203750275676ac2c5d4e4aec19d9073ee9e4ded840c5d4645e49e4e9b47063940d64ed0639d97cc33a60504a2f1bb12671effc3d2ba2b086447ef99b4d1d28e957608d22be3e26bd4574b8f950cfe680fd5b3a11d9fc0581755cfe1d4e55c93770971d050deda81cbdaa270feeef349bf8ce47d5879ed8102430887e4a3a1c904546a687ab6885651325bdc76ac14ee272a3f5297f25b44ca992a0315ce4b43e7b76a59614b015124bc237500a52059574e29539b2c1c4ede981aebc54981d8f0cd1240467db851e2201142eb24cadbd8e7df4c7d04cfce003ce1c31e7fc748e074e9aded003d65df1b19be91734e604cbd08fc068adece58b986b11daa68dc8f83d142173f1b14a33ecfdaebfc7b6290deb1cfcb58c100eaf8e0f949123dc61df297effef3c1e41093d99b4b9b634317efbbe1ea6090e2eeadb156b1827219730a720375376ecb5bf3cc7a4e206f2c5d415112c501cfd55823a4a840c409fb9e5d49ed6c52c995c15a95f81711e05e299a3701b01103d725043391611c93a9e6e6148088c95a982aaa3ccb25450c8b0d83789ee15ab85eddbbc3d71c296c1494de9b817a8ed792b91e1decc8719216c0c5c426f2ced2d47d81e17671b55108c90824a117396d0512ccc64000dadddbed0904fa5c9d389bcc7e6731d53a8b092784a6767a0119f4b7cf399e57f532d6f0dc288d48613386c1f5dc57048988e1d0b498cb14d1c5d0463b535306782c0b0ddd5b037460e9b2670427640e483154ea344b8ba3a27986f3411af21b3c2f923842040c5bde0059955656d0ae1ca4fe6895bca75f1cfca1773cd63b8e4cad9bed53a1d1799bd4adeeb3e397492e5d5d255c933366ca1f2d119f7949c1d6d21285bd19914b17b5db3e7ff593b6fd8471c046a2c351f6bfef4ea2fe6c6367777aaec77ded2ca6fa24759293e4d883b9dc2ca4b57a34b85e086bc22f03e518213b107c5b5457927f5c4881b275b8ecffd583dd97f6d77bac56bed63900a235db640f161731fd720efc3fe31c78b75fe0ca25d0e9306d7a9740f7b7e7f667eee9b9d3c825d0fbccb4b9ce73fb73f799796a3f3dce25401a5fec12609f6a7d029f9fd9a75e9babf0097413f701e976854fa0f0d25f3e815f3e810ff409dcb803aecc3530df4cdd634cad4b6219e7ee8fefc3576c121fdca5e063b3fe75b28d4ddb9788733bcdd59e29c80c886f1d9b62d7aa215187939cf1d8dc5c66f11dc69a8b6cbf0b3540c65addda589df3892b22e3b2e05efb9df3783901514cea4ee398a88a8fb5109becf65addd9e02a20983f1913fa325ec77fcff6f97872776b1fb7a97a7a532b454cbc09d7dbb91a1bbb334269b07d7b63ba13435736dffdaf7b70219cbb585d3fda5c17f2beb5cbf366d2efc231f6c71be3e7b870cfd2569f76afb01a0af207537339a9bbcf3f87cfbc73427275456f0b78d2916b207a767c9ce6b8676eea1f0a5512663145f21f6f88f75c71f124f5bb305ee3753657bc244f39ab6e27f311bb45a2791272cf295201cbc67b55f57e95c4c62f96d65d927a20321e5957d2d5d8f066dcb6a27110ddb3dd568f59b74b913b297e5eeafa8a5c69c275ff8bdd426f224aea0a1df1c43a81b0cbbe338e2539586d69ab3b43979ef2635be5029259639dab3f59ccdb0cbe8733b4d3d68cdc76b16a64b77964af84c954352eb3c835929a61b7632ea1a41db1c97fb5de32267ddf7b99f9ab24b71cae0f840bc94fe99035733d66e4bd2fb3d524c97735b16a17f438accaeb626731d13a0b53f73ca81398a6e39aafb1903ddb070c75ced2d476a62e61e30e95a373d91cc69cbb75458f357cbcaf6ff2506edda8dc686773d221e63a1873cac168bf1e8cb674a87227eaed5415d6dba99c9a6b426867f25bcacd653eefe2bd32930bcc227e3640193c7422c70bf2b0f0d85e229760bc8f896cd121772badc1b831cd415ee1318ecd8a9c4bc6e1bc83ab9d56c42d8cbf83dce7a5cdb97b4bdf66de2b5c32796b3ba88729c83f85dc477d041828916b6997cbff0ad4c84da4eeafde83d73d6beaaf7b69c0029713d4fc5e3657f94993bd75f12ee0a2e6e483adb1ac1d20663eed45e719f25d5d3938ebd78329aa9ca91d0f0e87d6634d381b9cb7754575e90ef1fac2eb6615822b27809a1da8a7b2b5c9329b97d0c42513992fb5eed729beae9ff00313b9768efa3fcdcd69c45b0cfb4f98b1f91a0f580337e66c32cf39979e73ee2c66c45c3bc779fd787c496d0eac25921340e617d98172b439b427f99db385c19db685f800588e05ecd61dbe4666aa7ac17fbbe2f35e1ac82404d187fdcd26d8113e3fb2c14dc7227b20c31efbbbe71ce6557f0d610e87afeb12d3bcc01dc25f855db26353936f5c8189e88802032eede566a1af8dcdebf064bf4e99aeae9e56df7ce48cfdc5f12f61771abf21571727fffd4d3deebfbdf0cfda65107e5759c7ec6fb6a3a23aea1a57473516541c9e69d247e1e894d4c6dfbac9e0dae47b03783bc877999c4626aed38be573d1b3abf12b69317eb23a9d522ad7abf77b96ef2271f3b10e8cbfead9d3bcde98efe70cdb06d5f96ef498e0f5751005394406d4c2a75ce5cef06b654e233d0e075d4d76791e7a27e33e168e4e25ee0c7f347405cea5ef3e3fbfde277abf53bfbfa68bdfbffbcce6dbcbf353eedaf5c931fb5bdb98b24f93296b8d55d67eed33ddf4ff0cb917e1fd79cfbd2bfcf91ddfabf7771bedf235fcae0dc2f96a106a3eeb7e3b9367df7e4fee2b94010dd70e457d784ded4a0683ae0c978f22d7abaea6c5e07a21e053e0f3ae30afee564f9e64ef3927bffb907b9dff8de4ba413e7c12068d74c9a2b557535b4a5b8b42819b5b802183efc986570eb6ce1f6c7ce655ef13eabc591a1c455a3b3a3bce35b5c09e3b549013603940b1670bce44bc8fc6d3c5e68fcb2677ed5fc269f50d85de58dff2637513eaeaee387e43e9ffa7e45e2c2beeba177fde9e377f5cb6ceb7b377bdcf7f9067776fbf27f751f1f754cb5c9a3ce76a8ec33a4c4bbafa343eb4b4ee28da1b8bd742acd49afce58a7a8fdbbd407c1f1176d575e8c9373519f68aa1c98ca59bc5359b628411f9b259603dcf9cb28ca5b185b58db57311d5f5d38550bfae63df8da5755796267bc4762767b11b085b5b147c4b3b6ddde1aac8bff37455cf528205c77b465bd9ba01b6d57a6769e86e9d7ea718f734ab97fa5e749ffa6c8a606b2c21d43e3cb52dfdeb5dfa6775ae2de8820578a819397dbcc1445d15e02894e02bfc0ac1fd1d2138126b99df1f6cb98ead34f2e65f7f7d1b86c93567bb5afc8efcf5fef4a715b84f9dbaa6fd66a5419cec73d280ce7fb67e6bfd5712d121c1927c40c7defbc8fd3fd2cbff09fc5d003765223cff99efc06f8b0d7edaaf88cf75c4e75fff3f000000ffff010000ffff86aad995d8720400`))) +var _ = pkger.Apply(mem.UnmarshalEmbed([]byte(`1f8b08000000000000ffecbd6993e238b637fe5526f2edbf9e692f3833e988fba24c61831b5c8d49bce8891b13969d830199f493ecdc98effe0f499617f09a4b75555f622263bac0d89674747496dff99dffb95bacfffdb2b9fbfd7feee68b6db083fff45ec2dfe60b77bddd1cdcd7f037375a3c1fb7cfebcde2654d2efbb678bdfbfdeeb7d9e6f975f3db31106167e3ff367ff96df3eafdd6e4165fee8661f4f2bafdd3dd0677bf377aea973bdd0d9fef7ebfbbfcf8db8b77f7fbdddd97bb27f775febc2d7caf6835ffcd775f0f8bf5bfdcd0bfef3479c97fba775fee8c9797c23bde7db91bbb5b2fb8fbfdffdefdf3eebfbfdc4db72e7abefb7dfbba7b8eff613cbb9b97f5ddef77eb97ed3f16ebcdd645e8d9ff07dc6dffe1eedd0572217afec762fd0fb85b20ff1f9eeb05cf775feed41765819e37f8bef9b799bfe0c7d069dbdcfdbede21f4e5eedb7394fcf7d3f3669bfc3afde8e217e3177f875ff47fee5acdfdd85dacd9e8debff8eacbf8c57fcf3d7e9bbffc337cf1c9adcce757fcd9ddef77fc3ff9cedd7ffef39f2f77ffa6b3d0489e7fffcd7b59ff7b31ffcd7bf57f83ee86fe10ef08fcfffef3d65d20f2d19aca1fbde4cbdd66717ebefbbd2b3c7eb90b5ffce7bbdf05bef3d079ecf01d9e7cf2afed825c2f7002f77fb8ceffe1ef9f78e97749fa5d90fed9e11e4551eaf20fff1f27fcce71775fee169b7ff9785ee9146f4e749b3defef7ee7ef1f1e1e0481276bf78cfffdf8f0f0e54e478bf5eaee77a1fbe56eb87eb9fbfdf141e0b8ee7da72b7db99b2dfcbbdf258eff72a7e2ff12b82f77868fefc57db9fbd3f5ffe5cd5ffec5ddfdfe7fb92fe47ffffde5ee2b7ed94df4ece1c74ef1fff1d2e303d79144013f6b833f113a1d9eefde3f76fef3e56e5c7ebdc4ae4f06f99f2f77bd96d7cb8bd76dd0e037c2bdf4702fdd0bf837d3744164f4e2ad3664bc325ad195ea70ddfb2f770a72e7f40bf5794dfe7fb489dcd767f29f93f83ff1c4fc3711a4e0f9f5a6ef2ef45d93b7bf69c49f49237eb98bc8d0fee7eecfd5bcadfc5dabc7ff7cb9f3ddadcb2610ef99f536bd7bfa53f2e837a9e0dfdc28420bcfdd2e5ed6ff4c7ff6cfc5cbbfdc28f2dcad8b5ee69b7f9edc10556beb16f7612abdd3b917984eef60dd59a7ccbb4247ec0af78f57cafcdf2edad4687351e41f1f136dcee795b9c4f31fabcc3b1da638a587cea3c0895c535dcec6d8549767ae6faacb45eefe9e7f7ce4b84497d39560ca9cbfff39b4f9f586b850efe906605f5febec54d7a6aa956ea7586fc6b293579c597548afbea9bf1fadfedaa8a64453def516dc763489024f4516b0b5b36b7577df1732fe377a1e1808aef5080ad279146e3ade498ae0a92b8c2d0df96affd80bb7110c27f7c3bece7ba2b187a6863ca1cb7ba18e0cd50c5d4b8a7c15ede13cda02db0880aa70ced3cb1fc39e1cc050dafbaac2e1e77967fcd9d7f950d5f7706d9ca070dc007bb80582b91b855bde09cd856fa10d50cdd32844fb91089047deab733f1c3887d172b8d3bfbee0df9f8045ef69aa680b6c9d732cfef07d21ef7cebb8e92dbece61a86cc1d3cbdcb1e58323289c631df7401ceff0bfa18a968e6de0fbee808002b836cebea09ce0548ae0213a7baab9fc3ec7cff14f50340f649e06f2c6b5f4808c7321ad5d4bd9f9035d746c6d8bdf3579a63dbec7ff3decc9afae25adbe2f64d91bc8df1cdb08a0da5dc7df6d5c5be7a602da816f2ff3892d1f26ec1db963e489133a4f0379e3db5a00bf5d8d23fe5e8f60e8f350554ef13b2eb3cff1047defa9b3fb615f0aa0659e3d5559020bdf5b161ceb1881785dc8587b5fe75094115c2993a9e99c6782fe022c3e60df0d7bf2c10bbb07606b9c6b99e7f473bc9ecac135d3b5a263647ff20ad8fad20bd181ccddf265ae71f819c9f57340650879279973d5d9dc0fcd9327a03d0ccdd570a02f5dd5dc3a53790f16f87b741e0e34e4e13fc1dc31d9ca3f13bf53371caaca6ea876176e682efd5e673e13cc13b9f7493ebb6a9787ea64ee08dd1dfeccefc92760e97b2048d173f6b9f678eeab8f735f0dd0503d06be6a9efdaf2ff967f5e408ae0de4855200e9dcf2607a983b96b41aaa7cf03cc5f78e90234ee6be255d3c0704706022efd4993f59dd1398ca110cc1fefb427ef107c6c13bbfec47821ff93de9f5fb60bc73adc7bd2374b7d03677ae6d482381ee25d7d2785fed9ebc5377056c8060af7b762d6febd8dad25511072c9df36d0d8d04e5e04ef9251424015812dd9727690b7afa09d8fadeb7b525b0c7eb8b35e49e6d197d5fc8677fa04530f4fec87c47e57c9e9f13a09a6747d4226f60d0fddbf3472e990f741eaafdb927e27796d66cfcf935453b10cbc26c653e99786dd8bb4da90c14ac77bccef85a723dc2fb7ab4909f80ad0958e7c56b81e717794c965470820217afafb9030379ef5a12371c182f602a2fa18a105c4ffec8aff7d7b9279a0b6821ce3be167293cd641587ee1a9339f08ca0e865d6ea86a6838300f789f016bb21bf6d16ed8d7f15edc4c04e50ca67ff99a9375f54e3c5943efe4e5c7393024a23f063ae78568070ed93dcf235f555658df5caebd3f4007ac7ba1a0fd3ffc0ed9b5f2441939ec1c489e239fb0eef1d64694eacfecdaea7b1882085cfeae44bf4c84ee0e84684d648dada32085aee591bdec84b3797c0e20d0934557357758877983f1dc09cd0d14b07e97d657ef11ef057862b283cf036503056feed81a1aaa06f2d4e3fed93257a3f9a58e68304e7afff85d7dddb1bf965c83e7c4409ea09f5c5be6e2b3fc5be677732f3443606b08863ad6ab41328727798bbf277a4f55221892bdb6cc9f4fc57f7ea86c7ccb2473ead893b927047bdf3aae889ce3f9538f11b026748e6df9e09de4082eaee6ea5a57b79a1ffa179fef05f2503947df1d8b4719b9d8d17f77c34b3981967288ed9400db3730f4e6c9f97b2858dbfc1ad233203e3b88ac0d569ba13adb815387fc7b6425f3b165f35a283305fb8ae9cedaf9b1f58363e9e8727f5efe5de9eaacbd309523762e67ef999d33263bc959563f3fb9791ef564340abddd50f523c792384ff4032fe4cae5a4f64cbad0d5a179f42d7402d6a442a6383abe49e9bb6f876a665e4aaf4bde6bef84e4cc2f7eaf818e1c5143feb77219be5a1725fe0db15500f24273e708263d4f0573e98526572ab3a744262bf60c5e67851b0ef417289a1bd0931760ca6c5f6cab187ba6275dab83cf4c2c1bc9fa97cb6f85ed78b567f11ccf2af77e91ce7fc26b7729ab89cd38ab9f9f0fded3ec79bfe89e3e030bdb831336be6a3d8b9f97f3a36aaeafb22bf2734e6c2bd7d610a8d827a3588fd7eeed789ce5e74ffc5ecc96bcb2f3f1351af26c33f242f3cae665cf7262fbe3c9520e45cf1aa5f35b64cfd4ea8fcbb52d7a46ad5ca9c73d10bae66c7528fcfdb5fc24d7a7b6c37accfca208865b6c4befbd85bc8182bf1faa68eb583e1aaa2082ea6c0ec2ee09cb965ba67fb05ee955db21b5631ae81c14b50008c5faa3409fb2eb0bec253ef0e839c53916da657d15ba77327ab2484e7a5f2fedccd86e9ce57df9c2bdd54c5f9aa6362ed703d73a125f9fb17d36ae25bd129d3ef05ff0d8e3f5c9c7234e3ef5b7d5eed9b58dbdb75e559d1f58af6ca080f5a0b962bad11d189c3718df8f4edd8bb8891ff96ac03b0b6909056e7fa143f715e749b3b33fdecf2d6ce819beef10fb9f344684d75a7455b474a95fb9f7048465468aef3df785388e10cee6beada33259a0cf23fb83dac37de5e0f5539b38992bd5dcc07adba262dcb53a733b54cce953e17b72748f153dbf5637ca9c6b1b9b629bbc401655c461bde0da4c8790737f0e0527fe775e1fe4e74e9fb2f99ad49cdff87e13ea8b2c9ea7f280c85f4f7e22e754d5384bcea60a5b729bf85817bf194d2fc63fbffa9ee84cbc3fafee99eab43faed68ace61b1cf7eb54ec572319aca69cc369d0ffcdc03b0525d5de4d32771bae5cbdc5f2a011cc82fce539fc417598c398ef96e995d371c3847c73a1e5cb57f8c63a167129fb126f7c38171f2add91f97ba9c7dee8946e00f627da82a4b47300f58cf3c15c65dbf2e86f13c7bea91f74265937c46d6c9a031ebf5f87ea86c7d122f158d3d3ed74d362ef6ddfcbffeebeeafc833be3bc17891597c7ce83eb4ca2c3e3c743989ebde7f4266f1f1b3328b0fdd074e1045a96966918db1696631737de3cca220763a5de93ecd2cd295609945a173cb2cde328b3f7966f19652cca414bd93549f125c9323941c4b40d4f6befdf59e8549b1f98f9f854de06cc8cbb51ef118893b9b8e8dcd9572f0e2e31caae8ecf7339ff7cbd3862c1ce70968074473e3d843fa1ef85e037d0945625292d0a827ca8123982b7abc2b1bd73282d8648bdfa57b009624cffac81af3718a2c63f279036defa9e6c95751fafed4fcc8cb497dba883c835d8f4d7580cd31662e0ed83a4ad8b53a3b4280a0d567e66344d332491a282832bb863d121e0a60ea6aef868a8ebc35bef73813dec6b2853f9b60f36f09057fe7da51e6b9ca99ba51d4ad226e4381dbee5a12076c6de7588738943edb0c5565077af2d6b157f8dec4b41a0eccddc57358e86937ecf37b2f9ce17b85f0fc9277adecc9ce3d076722e782be8716cfc31071cfd32e7163bd102d7ce2c28df7403505601db03bb31e59cac91182c857cda53f304f60da0d3c75b58d53a3bbd84cda416bb2f442f30c45f3e408e6593b14a77d8adc7397a6baffa876bfbeae494a9cba91416282b3d0e534b7a6247c476441d194194fd6267eb71995812b972059677ced015f0ff0de3be552c3642df0fc027bc86429f4c2ee365e5f0443e3000584dd08eace0bc708dfa7201cc13b211ff98371ec369867fcdfbefa48d380588fd1102befa9067199470b59830bf91bde8bb0af079e30fbcbd79cacab3dde92351cb44a0d5fe8ee86eee420d59b997bd584445257b1302452902e4b5dcbd27450e00dbe6643e8712a8bb8a60b601df730f4af53d1f1bcc053670ea6d27ab4907367c3dbc2753f20059a193376cb816a1ea0da958035294cc594ebfa82f7e6f8c06b93eae8677e5790ee7092f15584e9aa42fa0d52986918a23c9cdd680ee81a11d97a5bd8be2a4c5299d6c56b591bbacfa475f7f11c48494a6e209fa0c023fc2cdf1effeaa9ca2485c3e4a73acd44600e81d73bb07dbc8502b64bbb644c1f3607b52905f2c74228b569106ac3955f5705cfc8c82b4b51b4099f3ec5bfb90ea70f92d4e5c55e4d3eff98f464aac37e6698019bdba2fd9aecc75ad96cb05fffb7a5215dd15c80297f7eb6750e587f67084183307ff6ec2d09f733f9a8b2494af5844afceb1876e4354c23e67e9339d7c8e7791b45e8ee2085f4a5a933e1c87ba281bc12b9f3b13fb6c0f690bc81224a7d84d273bc59aa8dee53b3d30aaed1273109f43c98948e33b9ef4f6d6394be333d176b9e37ece5eddfd153ff343e4ff89fedfc6c782e4670a56f7cac5fec619bb351cbfc8eccb5339543a82a2cb5856d70ce55cd133dc7cc3398e67f83cf49a012df2c808371a56e33e93ee0bcb58932f63f07ec8063eb4be0c9e9f99b40a253e8aa8eaae492cd971376f7503583ebf84a2cbfb18e6993aa9e31b8ce404320344fc0929680ce59d9d949f403d6ffccb6fb15e14805fb6d536fa3662148645c01b6514756ee3e1f761626f1496a67be6d6e92b33e6f23c5f74c754f89ddd8c036c2f77cf52d0d25f2f0bf0e66d8d046a06754c9f76837a93c73df6b4394efaff6e71489cb605b01fb05cc0640a097c461883c78a1847cd53c8fec9cad5c05c52a5dfb5a5bb8c43760729e1f4b6217e3b3e0444b1d689ce6c2e7c98ead24ee427502b4ba3b02db2983d9d542f164de13cc138b27351ca399fd4d668f937b6562166cad323e9cff0228b41425398a82f1fddaf129f34c62cb0dfc3c5f0d82ecd95c0529fb99cfbb06f3f1b1712a5b47de824ff226bfe6d9979793327851c173492c100a9d34464872a387b9a71e0318ce12d8f2f8697876ace1dff80cfc71507b2a73a97dfabf697f57ce49bd7f5809adc77a1c5ac437e2bd134fce9091cdd6e7a3a0e66c6e62997b63ccafe65cbf9a2fa6bfea6d7c6ccbcfb69e88cebe6a6e7f36dff92363cf753a6434cd95c815dbad6ccf1742f86ba1ac42194ea164ed33388544a70be967f97c62d19eafb36586ec9cfbd6df8d7b9dc2b282ea35aff205b8d2329874ae2f753e4763adb352c86b514946a55e1f4df3b6e6351436c1eeb4c925738e6df057f65f6dc9a972f094b29276fa776d13e67e93ea0056e29cca81ec0db232032240729088e6604bcebb891004de7ab27bb6942deca5ba24233bf49c58c8339aa726b96a2c7f548f87ca2679d6c08f7c754edeaf44de8ae4770905fe000509c135965b93e8f8acec267645af731a4f3bf85d3225cdc6de11c73b02719f4a67b717972dabdd0396575bd05f1c5be3bcd3e312bfd7c8a2ff1ed92880d6610b42b4a984a697fb3027601d916337f6d1a6ecfacc7e3efbaac2f9f638b5cffa01822a87f5d50658ca194ce5108ac358efa7a5c025f35b9aa36ae6b71c034f34fa891fd8ca77b9f86d2f3dd77d156d63ff338707f005e54c9f3969a0abe25287900ffc6f2f7352fe3ee539b7aa44abe139ed8566e009257a99ceeb752c31fe4d662df3d72cd2bd0455e58c757376adab4b32e8190a55fc8c19cb3fa47e3bd98304e713c1b58e75ec06ef534f3497d89ef404c0c3ac1fc3e4a6e6790c2b3954950d9e133058cd811d449e6854e4e69b96cd94e8cc2a9952e2df9c52596270fd8cfec8c42d885c25369ed137274ffd2e30661532d544461a94e79135ee57efcf51badfdf54a297298d68560ec3ae5f64f622c508a6fa2673b68010216c3bb82c56d28f75e59ae8ca129d51ba0ea9dec63a7b59ac97de655fd8f22119e375f94ba29fdf7fe6dfca5c7ead32172f705fb7ef2b74c9de8295badc8bd27dab52179ebf173adce3c797ba74baf79f57ea722f3c7439be69a90b1b63d35297ccf52d08511f254e2224add3cc4adc48f46ea52ebf46a94b569bdc8a5d1ce2741ae751585fb892723bc96b2fecf25e5c8052cdb7f79204de98c1e6325e3ceaf0c6633e62e3761473ea7d7355e5e49715bdc4efcc0e5e6cacf8d631f096ec3bc2817776842e39ecb3417952bf8d1d7615ade27766072e76ca761353d6cca5fe14179ca481818a808263cb915966101614419067a406e10a582082a1791558228e44ccd3c78c3bd71ee78a1be2315c272e0567ee589dc4d0c9f1a4a5c946ca19666b0488e108dd350cd17df6b994f32c719e382c4bd7c114b4f355f344021071306444647b32879622e17bc7dc6d3c5ce79f93008e17b20e458dd6e6878ff74335e0fc817cfebe78dc030171997db78402bff5f19e1aacf6042432d022676d6243eb3c120ce487e66624ea1138f18117ea2fae6d204734782f9cedf15a8d2c5af0438a4cc89ee6574331ddb3ed78d2e8deafe74424d731601073d0122720bba634694664616a98fa2ce71096706cb075cef1ec0dc6b98227b216647e4dc6d531076b6d0fe34434b0a495a77623b89eb0c4d2c6b5cc5d4100f5ec5bdad6b58d73ec9021ec980e07c67e448a5ba41d141967828cf71949d24f2d52cfbf05d6f11b7606fefa35c7eb6a9e47165e1ba355c113b44cce21c573fdcbb5af701ee5947b341bf4a8090839ed92f305e0cba60979ea64d2a0c62fcb75f79140f32539877e6af06635ef1f79ff2ace12fa6e6d1274f19cfceac9f784eba7240172fd97e7b2e3f730245c31784c1f390729176a29e76efd5cccd242cea2e4d5280b94ca9f2f250199a2f9b89441810fbc5e676eda3a4b6eaf00d1c393b96b155d2bbf38a458270860e823d02b096c65f707017a7d3d8e97634eff5579c87a5ca698355d9f77f196fd3820eee70020e2e4d72f58d4f3993a963df317d5b10cc471685a4840009c235b973cd1401fc733984faa94fa6af532322dd0cde9d94c8b5f4e30343940fdb4b460bd24385e3007d720120ab88cf9390d448aba7b72740dce09b0bf866567070473d5187cf2ede72cd8680a3a210986eb75f9d5412ae5f6627bdd3504d6719bd8f7448e2ef8ac1755b2f28b02abe9997251045ee3d7243646be18f86d7c9546e0855a00d563731e4e25f79b749c8a397dea6500083138818dd1579593132a1bc800f22509e62230478670e2e0d8c6cb4834f62311af31b71d4fb9c3e8e9ebce57fdfb61a11f580bcef82cb0557c4616fa728d01f47142b4bd0c57e8b82a50551130b65acf71e9da16f03a8e3273d3260e1127bfdb927004596053c3f5bc0043a56b1a93be24e7dd249b445ec8a16b91f58c39e64bf47f3e319ef149d27dcef4de0d3855049c52ce8d01708a861c5bcf81182eaec9cc3f0513e54022ea05a0aa4447e54036b17ec37a90162ea21dbe27548f84a0c9b7f425b0f533589b9bac3dcde63e6bf79501b5e040438e654843d5ecb8a4cf47612171ed99968cab2147ea2c059655816ae8d99d012131aee59c9e2be328aef0ab7e32205a16b4c274bbe854c7f1368ead734dcef421393bb5ad634fee87848c69b625eff02e2e5e7a0ef8212ad787e56b2fb8f6259034bdd7509578886dae4572e6e3b92b98a37a3b971093597e29503f074869fafe899c5600288b74308b9ff50d65d63ffe69cdccfefb006d4d8a202fe4b08c2c215d93327b9e82e0aa0aed3e19747e7966569c97794071897ea8392f73a0f4e23cc07bf8947380ea2bbba7ec9c788bcd53fc1e5c368f930593913c4d9afb2d58db412ef79e0383f919e015fe37b3efbe2f64616c291b4f0d82f18491361262bad5f7b8989fe5b4b1dfe1583e4a3e5f67419bd84ed491373010e817e7d6878be155de9c7e466cd3956bd33cd8f7850cedc90b03aa2190ac47f2dda781c6a0ebad76d1053ce379ebf9f48b26a0b166b74840639daed80a342674b98ec04bc2c7f323739fc88f7c2f71a2d8b88b361b6353d058e6fac6a0b1eec3c3bd203d8a29688cacc40d3476038dfd4ca0b166dae4061a03b6b104aa1638c296f706e39d132a4b57340f8d416315d797b3239bb30967f41c4b7ff559c0350f1a53ccbede9fc4f77e5251d2c833454ecbc857f5157b7e3173b2c93982b1489f730392dd80643720d90d48f6eb03c98048e697e9d08655af3e697ecbf42a6bf09bb0822d643ce618382cad872a62812b0e58524002a28c61685dd61c2c087cbcc68cb998e967b5b87aab8e99acdae9cc8fe70704cdc959ee0901028a116167cd57956d311b4d6123a5e42cce83f56880f50f15eb7c65f3c7540e7c6c73d832371cf801613ab70c34ec0524c856c6624d9a30ab01092c3aa1b9a4894333c2cff0f0192374b79e7a44be6aaeb493bcc79f19a11241fcefa240488bcad07a56ec38d88b756931337600d4b8022a5436b32601cda64092064c1a6560bd14006120189286544b38c0eb6e9e866af734ecf9df287b7b773354e48d6349a8702e1b065932f3218c2b410d5581bc24e06c8d1732b37fb28dfde6ae2561d9dd5525e35bb19590267a741f1a21da00538f9ec33a504a3133b16b47d98477e6fd4b9223177b340d0ea39dffcd2961872c58136ab3ac6b198e2eedeb3a8052717238c2f2e5abddbd4b1b9ed12449a29bd36750c6241d796255003d7e4ed83d414be1be635dbe9e087a3d9889e949d2181f08e6a906488460a89f9ee3f5fabcf19b3b47d424968cc2e721a9c2ae6754fa01eb8ff5343abbaab9caf957f580a00f3f136ac7d6fb3aff237b5f457ea16c09d8e626cc40c8b58d17600fe71aa7efa12d6f00b1cdbc3914f1672070ad23fe771bd923f6ddc8266b5ccf16d682d19a268a0c6cfb28de5adb7b75c0af926496af9a67bf97d12db676c2e3250014415937d0332d807aac525fe38065cc5c021030025805a44f64edbaf165e6f7b9042b08d109cb8c631b1cb0f8439c74c336feaa9dde6c92547bcf3c54331694eb8c84b9204e9a5000005c53bb4213c719fd11ed9dc5d71747507658d69bec138d271d63f018d6a3ded7f56c6dee2830d4dbd1739e3f40d5e4803521df27b6d3a9aad1ea9b649cf7d4e3de8965e5cd7a652a7350e8be0e55d204357796fab6bc8182b2fa99ce96668c74758c0f57cfae669cc36bb3ac0621d7cbe16c6e2eb3b29769809ab17b2bc7deb8f804eb84385ed70758fe88bdf416199909e83ec7fc98be7f74d5acf42f9087614f5e7aa1493b82217296bc595f0e07c61e0a9bb9b35ec5e76b3c87d9672c88bd4b4028f5cf497d23d792387d592e5f973aa02e899fccaf252dbd75bc5e9f37fe9c3df733e98376fe76dd9ecdfc3edf4589024f7a017e56007bab379e9ff82fc8de77e2aa0410b400964e7c496021ca1a7f7196c47ea4ea586883ffdd46f61a3136b1bf36207bd2b990c6760d6a1bbd45f6c67187bdac5d7ff2b01faa621b462f68965cbe6f1a9e9d788d4ffea7dae620f2d63a37c467906a6ebdc12466dde203d04e6f7ea69d5c12e36ab46e4f1700a088b0451126606909a6fe39a33ffe1f1486f33f543d808b72b072fecf9f004b5ae13168a7c35ce3351e8612b5bbaee25487ac0f127db48c333be8d3fcd801012f06a0f7139d2dcd8a3a2870278e2955168635ebc6d1a030af9a6d7834958571c9fb92ef4ad6bac9fb5dad6b21fb750a8e2bb19bb0dd1740f59089af15cf5ded3bb5f0175b9c75a16b6bd8ef6d1c4b68aeab1a806aabc089f53a08611d0c85232ad53dd3afeb996aee804a7cb6cdb0e74f7d4bda513d5306ae6cebd7bdab98a0d86fb931a4fd520c69decbebf365d3edc3c643bbcdf6f9955edd04f0d6fc360cf4d6111fdb81deee054ebc17c5878f07bdf1dc2782debaf7fc7d63a63436c6a6a0b7ccf54d416f222789bcc475a404f44657e2067abb81de7e26d05b738d7203be39b67f4ec00c61cc64218e778ed03d81a9946f8317a27d6f9db6ba06a2b6f7edaff7f87dbd70d68e29cdf49f92364dab3c253b54d1d9efb33955ec19c75aca698c4567ec26602bf90007e6c9b10ef74355113d21b996553317b3aa158dfb4050e34b2812c326539d4b411b7ea86c5c2b6ecdcf122e6af7002c89b4fe1ff3fad255cd6db67578794053cecbda85917465ccf67cf28cb482c240003b7629653b43b967dafcf7b38e6bb6153d1dc335b0031bf3d88864c1e21c482aad3aa6802152899c6ffb1f3f5739671887e244d5b5f3469c345bdb39d68181bd364355d9811e6d69ef85660cdc327717cf49987afeea56f319d6935620a9781fd40222a7f83a5a651624cefc29a99ac9ae69da8e4fd194193fc9b3356019b8ae9664eb9c03d979a7ce7c46ab384ec429b257647e496b1f2a4ba11776b7f1fa22181a0728a09ddf4b5a9e46f83e05ce1cef847ce40fc67192c33ce3fff6d5c7ddb0af535d48ab9d798f24df4815bf0609708e47b0af079e30fbcbd79cacab3dde92351c8c2f69a52b1c23f942ff37717ec8bc253a3773af3a90d69acc6f3128ab590b599b049c0227441bd736242becee2a01464d0104e47c3288cc3ad6f1e90d6dbb6593d7bf3100126bbf311365e47031182edb7a346d8d44e594ca5c0d9bda6c3e3d07e74c5ba57c10243f867312f420ef369e3b163e47cc9d4fabd74457454bb72a3140f7125db32cb82acf021027692aab423fbab5d26731f1fcda2dba5463e7f1d11e5681bbaee5b6ff8474179fd1b1bc5caf37a98cd4796f206f00d6796b039f77a26b1b2f4335d8179da3f9b53743d70e10d6d1501cce49b1828042d71ac7957988b06179a2b974b10d72ba604eeb2b93e954c6efa6f8aa5e21675fe7c33eda0d551fc190d85fec6ce83fa1f19ce88a69ca92e5890665f51010e7f6be2eb08e1e2ee48d6b6dd95ca067552101ef4ab9a1f677325fa3d0ec60db16aa336cb36e478b8ad6700d83e26e959c35bc07b681f0fb5525b15ddb40b02631d12e218e6a02d96df7731eb06a527be64313342dc00e511923406e5d6a18e532e30fbcb51694b52da9635c6b364679ef0b12aa026735bc4fd26ea209d357c37b2681cec9dadc01f558295f1f2fab4dce9e3724b29a32a17d9e9cd6302a56557b17bf5f7542292bfbcac90b15a964bd45286aaff8b915ac081149e456b3beb6024357ead237ae7126a934237bf9c3751eb679cd4d13709e6319acf23c804a7346c7b7c8607eadebf45cbb04a76b552657b7c99c3401f57f840e6ed016c929b2f14b9830802a9d894d52a8efcbc6dfa26dd24ae361686c4a98721aed9926baab89bc3460faabd43fd57aa7ba6d122dc8ba9c27ee7a9e26c5b192ab6716cbc176a8f2c8579595631b4196fd82d8bb898c16ad5f86b5e492bd6290618a20cfe29238693e49485bf47a6b80e760ee0f349e8d8726e29435f90df93cca01501cc2ee2473c032be171605f7868babb866fc19614d57118b15cf2d9efb83316b00cbb032894bf2dd8f4cfc9d77afcf1f92fa2bbb519afcebf2ad927f0f92d8e13a1f9ffbeb741f3eb34b12ff78df6d9afb8b87c835cdfd65ae6fde25e9517a10c5073e93fbc30b71cbfddd727f3f7beeaf4ca5dcb27f8e1df124b3124753585f0e12611135d498fea22c5bc89e75057191e5e7b57902b3cbcc9e57448351726d6916f0deb7355490d564277704439f87aa72c26b4cee6d5d660dbd1b4dc68d26e3469371a3c9f81bd164147b83cd385315c1b1d0c6b1b408aa887b36a33dd6371591a486252e24a3b5a232ab6c666fe8f731a167d87bb281959940a6bbde9a0d24e7cb94c87b16d151f5cc3463d863dcb2e60e9fc3783fd1736a78c1014fcffcca06e71fdd6fa44dd42e9b79fbb0fbfee01e370da35b49a4a9629cd7a5d8c6f719cd26527a8a98d225bbde2ecdda1d3cf58820d6a9aa99707bbb6af75c1d09944fd84678564d269b448fb816889c138531bb16e94576f62dfd65a82ae7cbde1fd8e620255a7d937384eafe2d584f63bb15d85a007b7109281ee349a6d9cfd47ea0654a2cc3d9d35ebf0fc60b6cffb98c175a4d327c5572b3a0a88f64be76c00e0252c63f959650e076c3453daf704dc624aa92b386f7d83ad4cefce5a3f07ec8372db96dd92bac7e4fd308202aa452ba5c8f0fca9ed4f4ba6b3846b52bc2d03cbdfb3e0977ba59ddbba0d53d93e867cfb7a415542bcff70f97d146674efbf2bf6a8eea1f22a7d53d8168c94a931e752d4af9199d98ad9d1cbb849661e0efbd708bedfa0a040be280c557af5d0bbba24e87be718db15d8ae0a04989a7b2621174c73a4edac8271d6b3b1dd966cde8fdc196d011fcac280b6c2ba9ca0258c70f28856ca67b9bf4ad2af2214aae5dc1354560957c5f3cfe165cf80c4d51284fcd7acc36d0591fd447a052efd4c86e75891f45b655f4f661f3d4d4f7bdf1ddff7c7cf705d176eff975fbae0ce0d50d58e64f78ec08ad327f222f725cb7cb7f02d7bdf479a9bf870edf6d9efa63636c9afacb5cdf9cebbe23895d911792d41f5d0996fa7bbc65fe6e99bf9f32f377a54a6e193f079f56ea0facf3c3cfeb57d5f7e9d81aaac9e8916baaebf9b2e3bad5f1ddeaf86e757cb73abebf471ddf127ff70e6f3280ea71ef735ae085661f0a7ce05a5293ccdd020add0db09432a2f5000e2e308c057f4dea069a77e16e14a95d6632815b4fedeeb00cbf3f729b204434e3fd5900928d8682f4fd63a2ca46e409ca02aae61458713d560e99523597da1e0a47e458655d85d1612628bb9f6c8df75ee8073044f70ef382df17a96e1cf96d16593538f84e196910f52adcd7a5d7b2bd5a18b1e4d286162b427ebd8761116ae3f25ad42f8bc865e5bb2c12e7da7ae08447340bcd35b024e485d4862d8bcc798a1ec0e2861bdba1da3d0141c1764510ebf8928897c115768ebc45f8da46f8c8b97431beed7516697623f9fa7b917c7981fbde10dfd51d927e9652a7d32ac6c78b02c771f79d4fa0f6123eb39fe53d27348ef1b131368df165ae6f4eedf5283d3e080f8f693f4bb2123778ff2dc8f7b307f9ae94c92dca477be4a711b3515816b98b523ca9ea9fa068e2fb9562ffcb5b59d2feda0c7b199f741bd7d6b969120924ef5417e923f749ea100adb59e6af2127a3a0ef8955d1cfe00c2d5aede758c708c46bc1ac186ca1c19532999ace7916e3d4530ba7c2235795836ba6eb538fd9c6cf48ae9f032a37c88b31a58985129aabe1208e3a4e336d3db2586cb5c43a56bbe15055768945d5cb457d12068e380272f2099b80be0782143d679f4b22908f49db1dd21ae6da0a26785e2f9402c8a277d3c3dcb1a4d550e583e729be378d44f99674f11c8aebf74e9df993d53d81a91cc110ecbf2fe4177f601cbcf3cb7e24f891df935ebf0fc658def68ed0dd42dbdcb9b6219128d01a7b4c1aefabdd9377eaae800d10ec75cfaee56d1d5b5bba04afa273beada191a01cdc294feb130836a0bbf34ed216f4f413b0f5bd6f6b4b60b78afa50cbad3ec24bea56585b41e6e5b1f1e7d794440169cbba95f964122b387eb729958182f58ed73917353ce7ea33e85ae0f945690b0e70820217afafb9030379ef5a121747ff96504508aeafa3bb9e682ea085381a7956082e95d674102cfe0e865d8e609007e681d0f05b931d6186e9eb782f6e26827206d3bf7ccdc9ba7a279eac61bbfa8cb4d2f872edab702e699d540bef30d66deff02c97ae8ad7c4dcb4c2d00b013eb310a4116a5aab1392b65809bdf7c4960fde22bd3fcd0c905a9c9d23d4b4a45395b563a19d274e364375b603a7ce7c3ce50e237286691b307d3736979d75ba53d54eea9a91e95be677732f3443606b88b4673cc9c190659448f49c5660fbaa12c16cf4bea6fd8eab2adc058b57e00de48d6b619d986457f0bc9efc5ef93c346757a9c3aa96e8adb8d5a3cb3251ea45ebc7eab9a0ef5fdffa84cd196d8d6ae3b37f95c8040cbb2b30e5d1f340de7bf89c59f0f1bcf049a6e82f622bbbda33d99a40cada45d6317bcf0c653b3bfbe465aeceb1e20f5aca61d493d128f4764315db89b3ad27a2b3af9adb4a56aef6d84096f96a80252e911d25b58d337589892e998ae602d8da0ed806a2e74872c63562c2a17b376985c9f63a96c3dd5031cfa40e507dc4ef45ce824ccbdeecb5735755ce44c75ad21a58934dfd33635df5343cebdf661f267b3f96d1eeeb365bff97ac4f7de4b18601af86c1e95ad77ea7ad78f37b25b3ae43601db7ec0c24ba11df433dee9fa78739984aeb4ab95773f52adb6b5df2ee33a699be281937d30979fd1aafdd94b4a73881b88e72aa9a1b989c097241c637f347e64943c95c59e62ad51b791feebdac765e686e80a59c5bd53629ac56a1e26ce90708aa5c7aff69ae5d47fdd942ecdba2f14b7ba0ceb6c00e0e50d4485dd0bbe7e00d358a0c938cf72108cd13b024c2c2e84ce573cc7e7a799e269fb3fae6caec9a1a047e2fe3eb85337ab6aa08814c0d238d0bfcc01ac1f63aa06c3e3edbbe60cffd45ed0b5697da404fd2e7bdfa968646b62e79a2816085fddd666fd06b0bce9a3a36be6b3999263642267e92e88f8bdac41c42a6f67c4be620f16dd89e1e2d64d31362bb5c35104191f4e4e8f2baa11a041e95c91d10527d536b4f7ceb9fc6e709ff61f65b3386b7da1aa4515eaeaaae3b15ac4bedb95ad3128bf784b46efbc9522adad415b4a7b3f5b4830047da559d800590179aa4edd450edcf59acb0b09d951ac777abfcd74cecca540384cf324734cfbedadd666cfbc00b6719c65d739569394bc648e5aa8b6dde935bd3b61aa866e8d8e6c6cfa0e47e62bdcdfc1ae2b7c4b1eec0b5483b3b76eed4d734c5671d9d27e5e0a947a9e22cdfc6f7dd261c201fe817656bc2dfe64b27b65d3ea692e8f464ee9233cbc9c5cfabd607cb71aceb17375d9ed5e56c0e89ff5ca3cfb3d75ee9f47a5b83cae54da75f5dd3a4668fc511cb1144495cae04f1533afe067e71c6d728fbbeba8ef0eacc6acfa45954735d6c27368afd0dcaf2522df77e03e6d5ca7d5983a4aa908dc4f7ff38545145abfdba3373a021c7d64bf45d818f17621fb7bbcb9c91f96b16a98e82aa72f6d3d6b4c48e77a9cf9f307d97d84ad77e318dd913bea498197903093788ce931a43510f7debb84962280bfc5ef2068aabacae2de3fdd978a11980c16a0eec20f244a3f88cad95ab745cb376ed2fa797bfcbcceff9aa3566551ca1c4be8b6d08721e65e72fb13bfa8632eb1fffb46666ff2d63af94f794c7e1e9d612f3ef8996a3c4936f45cae57ecd507252877f68859293c4479e17c54f2884153fb11096ef8a0f6253905c3cc4c61cb899eb9b17c2f2ddae2866fa5fd285b881e46e20b99f1d2497d32337805c52c2b0fe1125b0f1b3e685e5afacaca80c10c7be2f297bcddcfb56f27a2b79bd95bcde4a5e7ffe92d702005aacc710b93e0d0e0e64e29ca520244a140d4212580dfc5089a0aa2c2021497d9cfb36def3d7802cd7eacca1a8ada81c3ca66bd8c3b26920182abb7c1bbef42ca1417cf9044510010ad8dc018b38d681b75e254144dfd658e9d975a0be0f22601d57de497e01b68686aa72c2f2e7dac60b7e2768293b3cb750d42442b2a976e9dc84ca66b490ffa4ba94806e43d7323760309e43d50cb1cc4155d9b9d7fb4374ade38602034004d563a68da07220ba7da04558bf517dacf07030c904e0fd17971281c6a004ec44938049000402f22cd4892cd13ce18773e6e05d3acdb564c517e7475120a4804035a77f3241827d66ee32eb7b71fdc03c53e0ac1e94059bf17bfb215a8169673eb59cfcfc53b06042d67af17e735f401b48f54352ea4880b24a556022de138bab4012d66304a4ee583ed135745fc4e0edbe3e4d825ea7cab2bfd2243614b5b56349d1739807ced7046bfecc97e56682fc2a1fc010ebc5eee9799a5d878bb2cd457dbb54672a73c09202b89e64e72895f7d80e0214acbe7f63c0aaba44f37aec19fba650f69200582650cbf4d5dc11945daa63ca8066b20616f20658801baadac6b1a4571608f46ded04084174ba973341b0642cc3811f41f51013abeb8454dd5483b26063e13b132262b28795352566a7f31cbfcbb7d92209cc55b6972a4e84d4b497caefababef2fe5b63c90dc797f00b9084c1ccb7541b0f240406d69d22f2ea40004c891b65a3e226a7f527d740d10473bb26754964c06c857b19eee179184af09a1731c24253687a86dd9de742c407495236aa8ac09842f2859827e222f468810548df3500d90478046e43ce37db54beeed08ca060e567310221a88a676f19236939036cf531961fbec7a6c1a298e7048010121a98ee01afb70d29201e38a88d01beada82f3ea4a87f39e8af76f7aefccdc24452e40bd582f3a0fbbb6b41e4c561aea976fa9ce0cf674fe3364f0d936bfa9eced40d83dc1d88e29d6838d8a0a2eedb536c4e665e7f2c5f955b19e25365d762eb16ca5e733695f4c013b31603a69534c01c801b6a3e9bce801548f12010c631b099f29e13180e1e673db085fafaf66648a2fb2fe65e68cc3d714bc7b3ab6ea16b9e681c8717abfb89d383e77df0d8e6d4269700dde29008b5f9c2db5e76625b8bd4a26063a8a7d3856e0c07b6b0d61bb2203be297afefb64a34182b5fa9c8bcfb21202f4f7b577fc7a955069667fe77ec39ad49002507ae6317b344f5e5aa8936a48a70b9ecd626471124dff963ea33377d52ef1979c69bee9013b17b36d156bf7aba5c58026ecbf28d8560d88ee15b13e4ec150893d46c79d05fb14d8ae257baf29a8abcc3ea9d97ba98d428a05f17939f3d6a4f192ea58c773bc674c186e7750f48bcf8f963a31f13d2a81fc57ba91b4f9cdbce7b7586fedc0e9309fd0331a81de616ed26641788d3643252948ac29f420e3ece37d4eefd98884bd96a0bf0ec4334a13d825cfe3e85e2df10f9b0071eae88a0810a11f2052508de75431a2b2a28eeb7d770c3cd118024b39f92a5983999b07096e1cbcff07e49e735f98cd81d0e548b1322b169dcaa5e02e672aaf5d1b20b8c8ea8c62ddcbec9cef0bda2c6a649367becdf7c573a21827c792ceb19e22e36a68a78df198cd8116c0b54ef521a2e34f7d613c6f93b9afa22db36bb33a6838c83dbbf44c8f1b6f91a63189cd4781933b2892b8d2e7ce550d3d10b3570b403ed9b3e2da872b96c9e2eb0ad6a924a6792314ff3509c5fd5777b17e6757e1a27b240d853b0f8fedc01452a77bff28099f80a6e03e9172a8cb51e4423334453cc6c6688af4fac6688ac7c7fbc72e273ca41d85c94adcd0143734c54f8ea6285227374c0518680121b7097f1cbdb8c19eb9aaa218c73602dad5370e4eaeaba41abf1ae78d6efc86bdb8612f6ed88b5f037b519797a08d9b0ae9649b35f44be25a157982166436783eeb8aa75b351a1cf632b2d7a0195d51ecccc834ba4efdfaeba6adb4696a4ab6555f98ddbec95cd3e66ed4f74edfa561a17b83c6750d9afad5e43be206d597b90e7caeb046c8415c009a9c27f545928414839ee9558d916bf7df5be69b234dfdabbe770b7292ecaf61e1f40e0a46157d7cf37d5147e652b20f86ab4bd2281437e20311c13525b8adabbdb1ae2435a1cf8b9be50e69ee9535ac5cd071e3f3666a752ec885ba23dfd290231a1b72ced82b9a9fce91ee990d6447393379a345bb638ad561459571b137b4949d63f988e6e515fcb7c0e7b663e91c2125121409cba12328bc575184c9fef07c2539ab8bbc2e505198210fd90d95e32e9e27d9e4c7f7c3bef96d9ccd995715b4d3dff59fd038b9076954fef432375731f1d0b443afeb6fada7a717da643a8ba11ac87b10935c8c586ce9dd3aed839a7a3769d6dd200fe75c60b72fbf27842245f37ca393ffcb1b460ed302cbd62d5772f1d00fc9515ef9a085b94a6007c49ef6b2c4152c2fa0a28abc33c36bf663929bd8fe2e258d687a36d01cce5435036f6d2c80a570240e504920514066531cd32fcb8988602aaf21b607accedca739bd4ab20cec93c005b611fc08dbddb91c4305b661d893634cd404fbff81afceb6e41d2ac9401aebb24d492ea8f29c2dc9b3cdbc50d979024a63315962095a50cc91fc5b4ac8c1e4aa4e37e7f34dbdd84f53bbbb6c912d2154b2a43d5eaf2a32b54f9ed3923d5d33874a823f20fbc209677373a011f2622354369e309b437138372de915865db14666dab68b69b5574cfc9b69fa9e336cb3c7b9ee192dc6de307de25ad27ad493fb5ea8443034571f91a36f60df6ee97ebdcefdd65c7f2dc32532f197e7c6eb729b99f3e1966ffcbbe51b77f360bb09ddf57b738e85f7617947bedb955ae51d1f3b82280a8fd227e41d3b9f58c52d481c692bd228efc8c6d834ef98b9be7915b72876b9fb4edaea84aec4ad9df12dedf8d3a71d0b35ca2df508065ae05bfe8b3fd0b78e25fdc0be27c6c9b1cdb53b30ced0527655fd4f8cfc3bd6a72233f7adee87527c6defd617e5d617e5d617e5d617e5efd017057f2f440466ff96705cd3746365c94e1b0ec706e994367c90a09273f34321e95119dcb826e44eb8cc40c97d3fd91dc7e712b9ef654aa9f4b9c5f7db66653aeba213994dee5de4e26742f0972ef620e3ce92677189dd92e75923297b029bc1f6823fd07816dea05c66ca9afc867c1ee5c2608ea52f812d73c0bae8c8cdec94de70716563c49f6543ccdef9656ef1dc1fccfd07966165b8dfc8773fd015ff3772d7eb67f42e37bce81e29f4976fd76d54ea76795e941e3fdc05ef741f3f11fadbe9dcf3cd89d4e2313686fea6d73776c11f38aefbd025e46bd3cc4adca0bf371ffc27f7c18bd4c9cdff06a4645a4250fd81d05ff6cc7e15f4176c1c4bda01eb58e36f27d755437f2fc77983fedea0bf37e8ef0dfafbf780fe2ebc10ad4049afa2463eb46aec1d61fb51d0df085ac4e7f9d1d032fadc52b84243686ce11a64bf6fdeb305a82530a437cd6b7c3ddbaf0daec56be1abe6b6d9b5ed21cc7979564e5ea84835709f466b49ffb874ac35efd10c764bffe2b3286cd21fa655df99b551d1ffe8b6d67fc55a7b032df24385033309f90486bca9834a7f389c1ceb806a38792a8f55d761f9aafabe60ac9fdd0b660505fd15d88510e2abde0505735caa87ab4b511a96b3c47dbe803d7c5f5f95baf872c37b34eb4bf541705fd61bcd2aa06bab8c1773b9f77c1b0d11f3c90eefe889f37167300c4dce17ba27b74e2fb6ebafc5c3951155d94bedef896d6609f9fd23aaedd595e86142abbb2ed9834c5e0418d6966231b923f9502014cb4d3cf6a67dae6af5d0682a9f7c4beabb15ef4f20851629131903ab1cde399a92717eb6cecbc3fb5aed8b0039d69173df51a207d4eed2154aa8075bdc87be0fda1298e00fef7f469ffbd925206caedeb456b7fe5e176b46fa5e5ef956d57441c939704501e4aa660007c6cbd56fdedc2fecd657e917e9abb498af175b7cf9dbd282173f67194181eb487cab94e0fde3bdf428f01f9f1294844f64037a10ef3b1dbe694a908db1694a30737dd394a0287292f8702fa4a8dc7829584eb0c3dd7282b79ce04f9913bcd025b774a06bf9bb84e1f5d321b8680dc32c7b6b1e763b4ddfa524f597febe185e9bbfff07436a0b2aead3e731a864bec23d0b85fcfa32e187515afd89afd702d2f258edb236a11a1098ac64ccaebe3e35f0f32d402ac786aab2802240a385ecc1852cc3858c9e5565eba947949de36c4b68d22d6341d22f826b9922b026d8243b81e9058c510d7867212da1c0edf372d0bdde0b82b681c2700f2d85988323c1d83be278ef88c37d594ad9165373c916d2771dad5100adc322857d95bbfb8e2d47a52dae0bd26c1353d632ecd56c1e19f36962dae139f1e275672cc02e6d739da4cfcad8f7a1e0cc296b3e35277350d681fe02457303683515fe8c23ecf942178fff3efb5c0a4b4d2a45396017b995b4b30e0c950d83e48e882e99cca1a548f8de31bc9687ebfc7392f6eb0b59c7fb9732cf3fde0fd580f307f2f9fbe211af3b97d1734b28f05b1febb0c16a4f5266032d72d6263667cf23c1407e686e46a21e81131f78a1fee2da06724483f7c2d91eafd5c8a2296592c6247a865f0dc55436db4159a92ea987ad93eb18bb350badb154746e4d29b499c8c2d430f5596edf501928586f2d4e5f67a0d083712ea54ed682cc2fe9004164296682a54c2a19669a98d57ce35ae6ae00b27ef62d6debda46b6c30349c38f48fa54222d8569a7105a810d7a94716322285b601dbf39b68efefa35c7eb6a9e47165e1ba3554a3d537979b9f695ac02c9b99579ce75d576aa8766a28c9cd315bb3f09d5a7bafb029ea1a29d373039d2018bb86e4661170410764fb4eadf14e180402076f82cc7fb129c8373f6fc229dae6c0aaf68db9509cf3f4bf11b96b4f4d6f1be586dd173618ab6a0cb97296ba5f7a0d5ec3c3dbbd06ed837778ea84971071d06dfc12e6a05533bd1730886fae9d996b9619fd83727189a1c9e57d6d29d7480a02505c58c4cf5dd811658f60db5bb752cd4b443502ffb9b0c4b36b9d750255d1d22b89043280ee70ee96694e9f041e60d11e69792b1abf877a43ca5c758608e1b87d9613d56ee90b0a8e367519d11764f70faf5314997acd0eacf052d3df813cba168049094bee075ececfe1c680808ecbf59d722f3f4e7029fcd3e3edf2387ecf9b7759f720465e35afabe6967146c7739c2638639677cdd952d3faf0154d1129ef813b08eb40309855e478e70ddb1acce76c88c6de95a465558f57a4f70a83fcb74bfa0ffe6b1ae3c404122dd28d2f6e668e22f27736ca779e111af230b698b50d45e2babfffbfa1e92ee0578acd8269bcf67a2b9c07b63a86a08aa5db1fcf70dd399aa117902e9c6d7a6f349dfb5f5b8934e624f9e813da1655784a581eceb55725d9fad1fbecee0bd5e7df71227eceea16a96767783b6c1b759b727d330337b78ebd841046dd255247a0e6794c9495596ae40f4cd9976e7ea0a84152e96ef6a784167eeac1157bedf5b303ac4ebdc667ca96c2463d466bd1f2397f19e089cb02b80e9fb3ad33448c5903d5b969a663257f2fdd61f14b27a6d93345c61daa1961d2a09874f67c5ef5dd10525c7ac4799bc58e96471072dc2ec12ce58b72b6ce7bd496f03159d1d4bdb8059eeec967d45439ed8741c4c87980a3bc709fb936d4c09835cdcc12e7916d615967ec2fa02646d8ab274be4d618e7e4f1669574b1df9d46e202c1795f680aaeda170444e41fab032a556a0f362c8c3cf7066ad1ccbdc56a6950ade3ffe4deefdaf3bcc697bdf8efd907e0c0d5c24cfab4a359f7c4b22ec36248ea118df281b5fc938e96f5aa42cf5080c2ae01c253af1f2ac066b9374ba4b59fac89ad07ddf63b62ce964d77fe2f491616aff7ee2e599cd69daace2cc6aa3db5bc01a4bf55c339d44ff121804af237f605640d50acecc8bdfa61d2f93b849b22f5c8b0f80304b7413ed5649f64395dc2467ce5035777e884e5090b6712726f2cc8f919f6629ef029f90fceee3c77db136d8075a83c80bbb3b887dff5ebd9df44932f70150da2630252300165fa2f3b92b997d1becc2e41ca1e91946ae6da1dbc9f55b2f343771d73b92ee752d1d9574f06d0af328f74f4bf668817fba82021f900eda099b6b3c3ee693bed34623f178516b679faadd939fb1733cfaefc4ce01b6b1cccee308eb63d1a41d13bf0dcffa79556f57d7c1a206f20958207aaed803d74c74f16f7ab98e870884a813776f5a016a8f04c4cea1e3780536f6dd690ea6a89b6966ae16cf5399b0e07af81caa3e333f082618c72e4af61f599b1298201bfb1bf76407dbb38531fb32f9b6030e58525c1295f89bf4ac26f34fef097aa4ac294a72270bd63dddecf8032d28f3ff2fe354195dbfa29de493eea7826b11a66b1277736c635fccaad870af8768530961bcb6e154d73a228fc625490957a65b75e0ad35ecc7e1fd14c6d73126ee4ca76d0dc1d0405e58cda84c695094159983b4cc2b742df22cc2e69c8d5356c86b03687a3b36781287c6b6420326f8c2ae976b03e558e0d3922b523ec4581a876a9faed194ca512d0335cd1d92f970acc31c088f5b327612879b6d3dd190a04a730e90e420794a7752cf7edf189a4ee5a69ce6a3c97e7b4a63ec19b6571041d53c3f63ffd3ca31206619c309936b9379a2f35a63dbbca16c82ee673e66e4adee7c5cb3d7bee5eeb3c0bafdb8f745924722fb8bea1ebca7e4c01375da55bd49b700fa9e0129f723b9df99a0f77804437d4f758ebe87b4e4ef4c7282f139dca813418bf8597efc5d118655f0d2ba7d457f9feda4ef0b12d195c9f9de70cdc95f0b98777e1c312ea1f13a14aefdc00bbbbc97eb7640ca9ee7be10448e309f43d1df25dfb519175dfb96dd2ff27f7594370dc7988b39191cea673adeaee9f8db8c292f7b4dcaa60ae685329eb69c8f62bf55c9b32d5fc4d4e2f56ca4abf272f986d2a9e4b78d60d2057fd59d270afe182cb58d4cb6e81e72b1e6b65e593eda64bd4c7c8f4c9cc6a7ff66f60bd625e7d4063916c7fc4ae7fd8dba84be6b7da79482bf8238423fa31bcde92c138b1f98e7b2ceaf9f268bbd04fbf50163bbec2842fffd978eefefb8d7de30a611d3e525b1c182ebb15f551e737cf738e483631b2f6fb6331439f0d579c676a7ff4e6d506ca7ce1aca5a4bbb3a7e7f606b5bd7d6cf39ac66dddff5f93bc9dd278335816b730b6c2d724e17cf3ac981379037aed5a01b4eba87f66fd19bec1c27b817cb2fe9a6929b971625bf8c913d635fd7bfd796d9a8f563e7e69eaa706ebdcc6f87031979211f79a25ec00c5f389f8d62eef4daa6fb954b7ddaca772e669e7fcfbeaceb364fc741282cab3a8e5cc76c686c83e2eeac4ece2f8e9f45f3ed223a631f19f46442e17119b3a88c5184b31c76ea16b3a0318bcb396da22b7c0171d8cecac493d6f0c473c0e20f047f3ae5cffe80c4424ec096378ea52392a71854601d2ef74cc373bc1ce357f077ad57f5045b9fb1ff69ac4d973cd140305b1a96f509042454959966d6bea12e7d839f4772fddaa64167c0f2bd674904ff40e211a1113982c2c518c580d1f7104c672f43a91c36b75f407affc5f394e0a803df3a36eb94f8e6f844936e77e57352e70fc6f3b1878b0279a9edca963c9760afe3fc5f0417721c2fe397be7a98133a604bd981267b86deafb57dd2a2b3242d95656bd9e4ac6c68e7b6a2e968f8be710717ae90722a7f5d51d9e7f55fe3733c59031a5f2feb5e83fdd5f5a7c4f2893d5e18cb8fcfba4acae284061d44a44e20ee9098d6fb74ca65b186a299ce631bdfba697ce70dfb97c60b387822b9a100a82427cb6a289ae8746a1f0c4084cf8d3487547f1eb48b79c907dfd236aea58f805d47cd50ec37647e9ff58378273c629fe115c4b655c6f766d88426f3703977ac3b9de05afd667273b9c79ad16a34b695c9da57ea646eee0dcc0554d1722a989554458d755503faa3fadc27da0151439e58bc4f0a6246ecfa16b884e4372936a144b7d5e1d31bd2c7bd0f3f7c8d0d64f5166be21bc6f6ad1776375025f9055a2357b5fe8af16d38f05f80d589b1c8efc41a37a29c88dfff6d9d45238fe3830adaa32b7d38b5759d75da05aac99138016dc711319d98f58d32fbf682e2d308dc329b578ddf69c193fa19d70258bf5ce5cbdf8abf74b3359285f25530ee7c5d659a932f78af18c7473019f9dfa578cc124cc08760791c5b8e5ad51590cee3c11eaac699d666754fd0626351165034598b0bfc5b228f44d6f33533553eab3ceb576168dad01bd6e194ca745a523393fa66097e29c93fe1f74c68e1eafc8a36e7af27984bdfd610c122b5ef80fe042c9df7c204bb7485658269ce82d686e0358d751ca13956cd8ab8437e3cf5b1b7c6983e8607aba45aa263332750d41a9c83d576b3231cf7be654c92fd59911f2ac2c543d15ccd325db533764e52bb341c9807accf584e96d54ec618f94a9a52ef94e295470b598bd7f2e0c439776c2fd1b58beb38172c5f0f368ee5bdbbbea39a1eb4c0a7ef4b4f54374caa31db2ada8dacb44e80fc2ec19c57c4c55bec7dd7feda1a873d35bfa66bd84793cc5e8fe0824f3b94f78defb3530603b8904d86016c606f92dada4c8c8ce4a19ce4b9ca643a8d6979ec2179a738eec57c7e1a9f14ba5b4fedeeea7c4dfa4c0d79ea91d087b35a98d1b25f81596ea9b39a536b95534436dcb31f8d3dcde0a0b3b6e6dc5b9b3b486397ac9eb16aaf26b2919585ec5a0fc344de7750ed2e1debb0787f5d1c3acc42655746ad4cafb9c654cc142d80a18f32f371722c691dfbaada6c30cecf8bda5da574795bfc3eefd62dc4aeb28ea8ea7cbbd6b9c486d8007b3277d5ee060c6a6a43d4f4fa643dabfc3b15db301f590f12db1175b883c23a1e2a9f69be3ab1499278428acbffe1f8fbdab3ba99cf2aef5dcbb8aa79afdacb4f1cea4f4ef20b1462df80b4852038d72877ce0a680329857b928f4cf22d557e99aa1c5c3b394fff9cce8c6ff43cf53faa4688f226f451bfb55daae45ac7cda7b309add3a77bf84f4f3577f8b389d0dd41caa9c1aedd0c559e2f6a7d70f947f25502a9cf0c877d74f6441379c89c3e51dbe30cec494d4ca54d3c584630243579b55881825a089683c03a60e55a3a69a188e7c2496ac3ba9ad127f5f91c69fd27a6ad23ea635a247679f0d463446c2d2140705151cb5720fb8d72073116d0e3f48d63a1ed1b6a7fc22c167cd4bb8a3d0609dd6e918cd4c6d4b10c29119cc667415c93f66c91b391c47d93319c3a7333b66ff15892168c841fc0ec60ffbcdc9fcde92b8a59cdb67354bba7613f7a7ae23aa41e130a24fe978d41c7f256b54ff3ebd3c417a3183cf93c8beb093e607d68fd457c5fe677917d173f83ca1bb3f90a5a525ecd176b7589f51bd6e180e8071a833b460ee15fa1761f148d176c573ab6c9b92a6927b164ba13cf0789c509a824a6905ba3e6715335d12327d8de9f9d6179364d6d9cb1c71339766dfdec5be66984fddaf0280dfbc1cc54e427d666b53a064be43b9bab48682db1bf85650ad85877222ebb4eb16dc4c113e1638ac07a95d537b53a768af43f9f16b20dace1dc54bbafc0eaccffe847b6d9ab887bb4d7ad646f123d307ba36e51f273ed08c7c0b5389aaf21dc220ab31f633d40726fbb615fdafb0df21971ae97ea177b9cc826fe3cc971aa66e8d8e6c6ef7d7dd1449d77165e44f50969d1b2f62d05dbae1c6882374ab0f0e6ceb5151edb068477c9e2b7be6d9058ef47ea0e92ef09099fdbc40bcdd0b5e7ed7d52cb49e3ea16964505db35e9da62fb30b5750ef4390196cf66f520b18f12734ded88bea2739bc42d41ef9019cb2c9603fe3c54bb588710fbc3b13a734d30b19fb5b9e44a2a1867e05de83b87ed21a62b16b2395b1d684ec8067bd7a2f2e70901a2e7cce3dc13b69187f5e9ba9c569bfdb16791584a666c8c578db631faba1e4d2b7c9b967bb0690b06d6a6683a2bb7cf46d3d456aaba173b572674af56dd8f622e073a93cdca7a5b4fd479606ba6175ed225e7aebbd23955ef5ab03f3e9b1e3df0d44259d9629be5229e575693b82b6e01c225b1899267475eec77977cffea5b1a82aa5938b6d194fa4a6fa30b4fe3914d79242e7807b375852c769cc5e564f33885e3afd59b94fb09ef29a9e13b4e81e547f87ecfd346391616c7277c1ad9e795f8a6599e8525e5a223354f7b1892da775a83febebc646d7ce08db98953666e18de201d4f35568287ea91f00f525e4c39c7cd437904de5bfb9b3c67e2855d9a43e50ce458c6c6b5a4aaf623d7f5da03139f7d87e43e2779052c6505b1bf37bd6a5777d5a6ce99caab24475d392f89ed4062ef0ee56acc3e8bfa47f87dd4386e58211ff13d3f8456bf46ef1c7cebb8c17a8de6dcf57ef2ce6fcb039f3de1b1193640d19f9e5ae43f67bcfee7c8c63a90d4a27f4cee9f614eb8323ec1b277cffc6e9aada9a7988da14a3e4f6271f8dd9be5303e66cdebb023d56742559c8fabe664bc6eb190e32cbc6a99c0f8850e57bfcb72515dbd430de753c1f585ed34b631a7c4f5f5997afdebdf24f894ebd61029a6e1fabb6cfefe7abce93eb86e359feaebebf9c5fbad619b09dabac1b10dfe6a3f14e40112fc188a7f13c75513598fcf74ca398be703fb61177181ba9c1c699fa93c512e2dda46bea90de2d846308bb935196735b61301d61194ef96e1e713ae2e8a6157a23877539eb7c9700ce4b84cd5eece116a39cb1ac57beb6ad7dad7a8e908bf97dfbbc0d32767beb4c2735389936d565bd030ff94e12a6f3dcef8779778c9b8b557c696295edb4a9cdec57cf49a61251b72caa43ce96683d6394576ebf5ef3379e70b6ed96cebdcaaf639c9f3aee66d3754cc042f407058964ee3fb17f3ebaaca79a8ea2f241748620db31da88e031ec7cb31a77f3e9722c1e4567d47db63977126a61cd9e63b5a100d7b72e85868e3db1a7ac2f22b94b5912daa35522238304f6086df55275c5c31dff7060ad21ad8c33964f79ca63511f9fdad9c4bf9ed127d46f41e794fbce67fe075561137548d0894c4176bd74805816b1d792f34a7f13b34c4865efd2ee13877291629e13a4f733889dec672117802ed0d908cad0cab82e7573557c35e1081851cf93d79e55a93e88d3ccc78ae574df9a767a11980c12a1b872379a204df4974b7864088fd636919dbb6f1b9c6f08d65757dd538495a4f76c13714fbac78fee2f924b8f1129c20d3f50b287437c052ae656400f0dc87f1fa34e644c27b8de0310525d77702eb1937c3a9553636a2af2ce98cf75bf9dc281c95ef20f0f03809b7bc89e0425ebaaab20314f342d601aadd80729728cc96d842d160f5b89918a4b687a281653328ab49ce62cc878a8ef2bd29f4bd179a7bef447b5364aedd633bd53b75592bfafd354e9a17c6e8f1340a030e5eb526fbda1cd7691dd750d4225f0d2ae2fe056b46c6af6c80d03db9b6f102f332f5e2d8fa4b8c47d37d5be7a84facbf384fb3e37851cfa308c50fc08e60f969c58d16e7cde3da9ccc191962dfb8dc160c48bc99d49055d7e9d0fb8b1ab60d0e50c0ba4c5ae7e7f1d3cfc800aafedec3efae16c67db7743c4531d69a5adc0a7f7434253d1c123bfda9a0ee61342d38372bae99c57affca2f1b68c8b18c4b7f777ba59f2edeb1d4172e1ed736cb4d953e8ba3b9ef44268be62cedcff27d210b634bd9786a108cf158d3d681f19ee592be46f9f67dc48723f813f0ed85d606c473455be4119b23fe3c3afbaac2f9b1dfe558fa12d832072cea675df534ea0de39e35993e45f167440fa988f5769a5b3c9621f9ecabdd13b00c2bd352907cf7235bf2ade7afcf9b0dbdf4ad7df90aeec19af389bcd46dd59b4fe21f39eef141faf8de7cbcf899bdf9b887876ed3de7c6c8c4d7bf365ae6fdc9b8fe784fb07a9d34d7af3d19560adf91e6f9df96e9df97ecece7c05dae4d69e2f298713182c73bc2b6badd65ba71dd4639ab37bfcaec52dfd5e9250133ba6dda40d5ffc4c2e7e667c3c9332967ed2ca2f0ee7eaacdd4f59cb3e761d4b53c42e997cc663f3ad63e02d0bc6899f39d0975024e6c0f7341c4153f57ea86c5c421591719dd4ee0158923ceb236bcc53a892937137cb531b725eaeeada45f57cf20c76fd553ba8d42c21f4d08e10206825749991974f9995a4c928cc10a6a650aeb558be940f7f465a252ca180dda228f35c022762215de6225d97e4d13657a40c2286ad6c86d8d5ebc95bc726adaae27667e6eee23914e6618f77c33e8f658dc2c7cf2f73776070de607c3f3a75d7ae3dd9b9e7e04cf6055e638b271425cfd36e5ce68916be6decbdf5780f545300d661ef09683db29493230491af9a4b7f609e006943b8da92b06548a0767bb81eefa03559a6613db3556bb158ee6b42fb5fd7a44d65ef2afd19c35caed3a04416144d99f1937cc811cbc0757884ad73ae359d77eacc59dac83bd1b5c0f31b43baf0bb845ed8ddc6eb8b5dae0314d08ed17d3018cc75f841e79d908ffcc1387683cc33fe6f5f7ddc91963d21812bd1f007493750f81e242d9c7804fb7ae009b3bf7ccdc9badae32d59c3c1f8c2cdab0ab9cb17babec0652e4e05253a76d8387c20afc9fc266d5f8adb59348337a00a58f7c7a6181a86ee9392adf7bd5713ea725408d36a16ae4ed2c8ed5d75121ee97ed4fa65cfcda4bcbd62eeda9441d0b393e303af0e12dc0a6adc4c5e5adf375d933a08e727c0036988f0c952cacbe75838214e9f555d97c02a3ebd7d46b1fcbc1dc266ec1da1bb2165d183e2f24fd736102c6f49d4503ee508863ea1b6ae2fc14ee62a826b03812a5a4af5b8f8d0fb65e6a49afea6613bb77a79ccae695509f636196b49f83c864370109fb525d734817cd651032629d395c6c3d0d894a4eb1ac9855fd6c6b9e07dde19ca4dc2881f0ded012269c7fb8d416faea12fc1bef2fbeb7d78f58cab399fdcc2b17fa370ec6a1f7a68b7d93ebfbe2b225b721b1694edf0dc43bba0ecc323273d3c081f1f94e5ee3f2f287b2f3e3ede3f340ecac6636c1c944daf6f1a9415bad2c3a3d079e493a02c5d091694e5ef6f51d95b54f6a78cca9668945b60d615c136e9c11dfec0e02c0ff449d2fbbb2a40bbb59e66499fd99a20ed568009778c561da82d1af72d587b0bd6de82b5b760eddf29585b185068caff47309a8113a28d6b1b9215767795dc5a4d7b58aac6cee3a33d0cdb716e3e21ddc5fa2dc69bd1f165f895286791ce7b037913f7a64b6a9da9f35ad9c332a98fc6f29de5b370ad719eff4934972eed7f96eb7919f373e177537c555f55f7a047bba1ea231892b38bedabfe131acfc93c4fd31a4a4f3402ac6b29efc3d70596efe142deb8d696cd057a5695ada716f78c4ffea8ed92f2518566c721fcf8337cde6f478b8a1e374df1775501cb86f7c0e7077ebfaafe05d5c1bcbab3b748def4833f23d8cc063cf72d0271f4fa463d985af2306f81c5efbd357ac267a2c1d5f516cfee4f8987586e6bc69904314c3d7a0ecdc1a4418fac2480b336b74e4daf9316dce95165ddca0773a1d7d5e6344c28d1fe81ef0c0852bcf9113976a63ee1fdf74c825f93b5b903eab1727f7cfc5e6bd80ba165df8d2641d8b7ecb516725a5a8b92b9a632807bb58f3e80d77bd893497f7afcdcaac4c687f78c11657e82fdc8263deb9ada0e890c55259093f76dd97716db3ae6a6494f2cc7325614b72f055069df9faf759fc9367d9b680f9a2d14356926a07b30f37b2de66ae75bfca276fe073a07452d0082f939e74f0b3efd9a7e77db645dabeb023fee0c6954972f9d899d577806958da93ef97a4b6a5dcc33496a5dd778df12517feb44d4fac57f7e570aeaea062cf9c44b12d72af9f4d8e51f795e7af8848a80ee27269f1e3b222f354d3eb131364d3e65ae6f5c1120489dc76e47e092e4135d895b45c02df7f473e79eae54c92deb443a32593f2edbf4849f37abca321166ef9aec12b9a632ab941bd72d9b74cb26ddb249b76cd2af914daaf02ce59cc7d0e437c51e5f71f767c262a59a297b65d1bb0f7267ced1b18e07179f818b8c971a77af6451b82b6f2ae91867aebec76ced4c87638fc5b17c947cbece3265619dad236f6020d02f3e5f868b385a329037bead0530f98c300bb048d1f9fb428636f1ec48f4040125e3e1d1effeeb077a499bedcbab3b7f9fa354748fc4577a14c576be92f4d8e93e089fe02b710f9f583dcd8bf75c63a01e1b63635f29bdbe3950effee181bfe784d457222b71f3956ebed2cfed2b1569939bbb9404f17ea0cb3463cfac729b94240950ed3aa5c9824af7e96a9c3717eae642dd5ca89b0bf56bb8507580bcd4cd28241e6c9244a6845a1549fc00a8063dc74285107b370365344f947f50b3858b4459d3fb5727fb92f3e396ccfb659379cf47378cd0a55d183e879eeb05cf7e735fb5cd8d1287b5cbb57358c57b9ebf97c44f705805e1332bcb4491eb347558d9189b3aac99eb9b3aac1dee51e439917b4c1d56b2123787f5e6b0fe440e6b1b9572f35aa1656e1d41c11ed88af15478272981aa8f423f72b0752bfa8117723bd77afc839cb034e84a5b507d7b99033b08a02d6f0abd5df6bcc462925f5d4b5a7d5fc83ab0f8a563e92fc03262ef34b66ad463e489c6a8fcbab204208fa0a507d8a302497bd9313bb12318fa3c5495d3f7058166b37b2ed367636fac4b2c91a70c1f07a001ee00aa6815b75b6463c1d6db6e62ca9ab9d49f620f32b5a82a2c46c796a352b8708157439ec1ae5fc8ab8b164f895543e9a9f1b8f88051e5ba948a3ef156e2315c5990d8f375ac4e62858d16f2136d65ae9d8703fd058ae606d08039fe8c2394ae42770d43749f7dae77226d8b685b0055e1805d60855218e9095bc1ac052669af194ee6d052247c6f97b6c1e5e13aff1ceaf99ae7d142d6696b27b403e1e3fd500d387f209fbf2f1ef740405c66bf2ea1c06f7dbc17072b42db8cad68676d7250d4ce23c1407e686e46a21e81131f78a1fee2da06724483f7c2d91eafd5c8a21e3cf11a892ee0574331ddebdec92bf64e8aa0d1b1b57761395fd1396b1cb92ea15d6774ebb1e79f5bd30cd5fcd430f55996363f968182f5d6e26881863c72bdb9f307e35c0483ac05995fda2a10bf0b586b7b388ddb5759d2ca53bb115cb3b6dd718be482d643bea56d5ddb38c7563df2486b53633f22deaa14d37fcfe6be4dbc0f047a9df9d4eacc2782b205d6f19b639376fd7ff19ae37535cf230baf8dd12a829149aeb54aee79aa79d566bb0ececfe0c50ddbb5a051e8ed86dfc6f3a7f87794ee3dd8fb2779eb5bfacb50d1e427da8e8cf784196d5dad220e5819afae8c269bb6a298ebfd423eae5acf16cb3924ad6e8bbdee6bca700d79ea317204e59c6993cf60d344cfb996843db39d239867a227fbe9d951d976a00cfe5e4db31d97025d72dc70d9b1358c6e147bd8e419ccbe98643c651a09f9a3cad3cec0882f3cddf45c89656ccb4a432e93bc8c9f0d5893fbe1c038f9d68c9dbb716479967cee8946e00fe2084ca66def53a19df075318ce7d3538fbc172a9be43372c6c7d194f5f87ea86c7dfc5b2a8fe6cacc249ec977f3fffab4e4ed62fdef5777b37ddd79dbdd55d2c43d6c627283267e71bb5b31cff8f1f1be05ecf5fe9f82c0899c28729f4184fd999c2bfc3df75843847d9fa459d918ab3de3c2eb9b1361771f39febe23269e315d09e6190b9d9b6b7c738dff7ad7b89d5679a7733c899893f7cdb7750e0a7cda376b46d370714f953f2e8d226a08c6e9b67572182cb3248423cb477021919ebbceda8c20366816f4d9b9f06eaf731a2d49d897f5d3d9436444d032f1e1bfc5ce2b5c9b1b4262c70e3655113d21e128398fb0f1bed6026cd0f996cef9b6d6d831762d29f442051b367c6c58b64af14e4cff29e1609917a162157bc625ef5ae214e7c75394d6756cffec649f5399d26d80e6620776ec10a606518dc35cd8872a3bc661a6bfdef5ba647b255ff66c72ad0e762cf05a20e7b2b7765f9767fdd53c99eb85fc6db6cef72dad34b855e5e056f593fb8b1cfa1f9d9e26e49b6b83f6056729e7e921ee73c507cfa40f1a4d9ffa96740296be0782143d87e68a0501bc5367fe6491dec5110cc1fefb22db9bc98ffc9ef4fa7d30c67b0e3b755b689b5897482475b9c64e97c6fb6af7e49dba2b6003047bddb36b795bc7d6962e7158e23d2c280777cad3600671a0bb3bef246d414f4f7b04da97a9cafa9ae7c23475313c8104b892de98b1c3c8e621e79467faaacd56e69399ed63481c7154d87fecc73af8ff5bd2d5f53250eee8d7d7b1a6e7488dfce475ff93a79acb8cb34b8206c3814c784988b34e3f974d5e4f0842b341a26ba7b7410daa5a4d545d14d4cae8d87c6fe9e49db0c3aa4720c44e31ed2507543c9f6853dc03af696abe400f57925c17f4d5cf8e65c12026e69904ead75a84f70a1cac2ed70aef9bc04f7beed7d4b89b1d4f3d066ed27b50e6bdb5bcf7844c2fd974de499f3d77606e1d4baae8ebde86ab415ea57657f15f415ffbefb3b4ff30e1c8b9ee8d8765c1085ceb58f39e6d6af5e51514783c571fcb55d1a2b6bdaa7f3bfb6bcc15a17623a0b69dfbae66f4c77357ed6ec0a070de0957d2932823b842fd615fdfc3502267f01ff4b751cd1c07be6dbcd03332eed156d187b735078580659d6fc2e973ad4bb2f631227a23d16d4f1cea4f387de35868eb9d32f6151d732d7f04f13954258225fdebdf2eb3f13a12e8a7dc60dc79196acc47817f63ebd4166bc2e542c7dc8e8fa38d6c27738a105c1b9af1f17c4b9127ea3cb03573b63a7cb03e68c63dd18c843d7fae545cb72be3c36804f11a687b3f44ab3667f32cfd4da24f32f7d966f9d6dea2df9b721039a286804a6cb2002a71dff46ae2fd6bdd50748f3899e25a204a60c0ea719ff6b8bdeabf5dc3b1c2fccdd43e9f98da779a5050ecd949d626336e8e6d1cb836227fb022e735de97c3811ff9ea9cc14353ceb78f3b1b77a5fdfa6be68e04e22f7bbb4f333d7f3372925babd42f294ea2bc47d7b4690ed2a26fbd2b9a0b606b3b60133b34dbe085d96dd4aea9e1b68af504969dd4aea57d9c57f4ec54361f3b27b54d3c32ba849c010dae89e7a7ba5f6e531e9ead53e91b94ad131fc4fe01b327d97d68f536ed051cba96cf7b21dbb706faffd97bd326b591365df8af4cf0f578ba2501e5c211ef078b42024cc98d28b44d4c3ca19468244801c7ec4cf47f7f23efd40a5a5214e5ee398fc341980221e57ae7bd5e974bceea7ef9595d0f034d1288cd61eac30d923137d32af030e3dfddd80da20bfce6926feba78ddbc72146666cab891aff7a83e539e8c3f358f4140e9dc523a2eb9aeed7109f9156c4133bbac5a0c3d4c3724b0550a7b066ef903393ab7ba46c3fecc4f2d47d1bf4b49757c0725438536f433fc9f54c3a50246f290e67def83c766c6ad80eb9f8ad657b0f70a7b263f6188c3af1601590f214ee53493c585d91c84dc0ae8b49a19ada39b4db1fb817958dd51f7691dc59d80cd86fb76d55783368c3f96f1b1b3cea8a78d687b3ea42f40033d60594831b718ccb276cea2a930e3ce87e3d0de421f8bd12bb3d7e26915f3f32bedba6e6a340e3febef320359e8fc15c3b5bba9beffb2e9d9721b684d89792ecf77efc79541e13f98c366172996f4dc4b3abb7f72c764185bdca36c60cfb7a34c99ef711af7ab18e1f9e75c5f78bc6b5a04d55f353be26487b0bc88268724aa2e7dde2d8959781142012e49f8f699fe4344c0e19c8de01c9ea85c85ca8f43fd3788013f091bde19941874f9550856be4988ba7879a220fc988fa788e84767c565eadad0df253b1421fb0a2c3bfb51cbce8bfc7473a32121f696a7c12fb0b48d094ad5b21bf322525679a7c998aef15c86f6622b62cb2423d5feb1f2898ce01e35bd004cb1812db22733f224b4d633c378d2191dbbcb31a121b6b3b9b889ed317b7b6ae78665081b7dd4d12559375502a2b18305873fbf382047e8784f6cd3a1fa7e620f1fdb623dd70e11ac3736e69e0ed3a4b92a17ceff22d65afb1f5ed0e3f56fa990c98bef96b3dd5ffb85cf338b726adb9756ecd07cb28a1bdbd1af8c7f86f4b1ffba30a8cd5f885b5a3d51c7a96ac2d072cfeb69abaf0a02b6e898da2f5871e5a299b24cf80cdef767b2ec26f639d249957f1600a74ad5bdd8ab9a4ed0a5073b8338df1d300e26dd39d2be35db98e79df18b0623087fa47d2a78af9184d0ac7b6622dd7c0e365c26866c034beddf7c3d03712d83ab13762ff12a3bf873966739da8c9bcffa681b6b574e992ce39706e64a2c83b82b61cf495c340b6bc9f2d23537912910e7019f4ddb5ad2b6bc86f39f3604b98867aa8c2cc4f8fd5a0ef7aceb943ec802339536c7db8b526345e52cb2f57d79e813c1ee9e24aead9d4db97f04c9bda4cfebadcb183df5eafad812c5d9ca6b683a2099025eec60db47d0aada9daf625f229e89c912e71df7d9a983f3218f61f1debfaf1841a18f179eb59837e5ead093f3de743ec34c5039125443f08fd026b536f2f91cc22ebc37666e3b04ce358339ec16acfd152e582f554298b93b5f093e5294bff4ab0c359da93ca072bda57397e8d540e59fcfe92be57a5fefdcef8070a34ce153ae7725f479edf3efcdd396337c43e9a4cbb6ffd35499e45a94fa0560c6261eb6a09e978715f269a2828142e01fc340379b84582f203f22df4f1dc5c2d433f8b8a5120edd33c434c7aa18cf7839e325425f02b732c3eabccba63e5bc58898bc9b45227ca93e9fa94b42fcc7d35751c9fcb93e938c905b9bbffb42887b46ff4d63bbf5ec6bcb2705adfdf885dad2c2ddd3cfebdfea9327e03169273669f4dbc3f0ae45435a67f892fa4482fbe41552cbccfafc29ad2bcf5f56af7638d37d85ecd1e525d737bbfa8c446e09edbf54a6cf8a766eb89e73f002d91ffc0129bcfcd6615ad71aa6426ec2373894d723d335ae273a7d3fefc19101c27a999f8053ef1abc2e67f5385cdad64f9b72fb389b02e8e4896f696f1ba672b99d92435d1b27b464dedf89dba06cea6a170ce2a4af1ae854741c31061ffa7f2c98bc3ef593c8a9cebb4b2d29beb3ee6e151786e5389c7de899f5d8a47c1805615811edfa22c22480795c613cdbc4c6fca744ac234d9f1794f39ce75094e344e6318a7c9af129c5f2538bf4a707e95e0fc734a70aadd37a29797ea55e8ea81bd5096face9a9a50ed6e634dd7aa7451969bd4bbfcb4392d676f30a43255ce53cadccd8edbad5bb8d7e9bddda2b95687b2fb69a28192b12f74079562bb14b9446e703b0aeff36f8c4459a57007b6e3f9ab993bdbe0f53998ad768ff00f14dd347212b49e9e3ed77212f09fb9e7d6e766eb0370385a1f89c3c1716d8ed54910f591d54990ba9e1d874368f1fcd37342a94067227212f04fbfbc04bfbc04ff7c2f41917cf9777715f01e511d51a02d2d43dca226de51e0f5369bd99f4bbac086ec1155d2dc1c9150811db7ab976e5738465bdb50b8490acde34d978809b42763eec8a7c38ca8dc2bb5c47d50d0ef6384b081f75653db9ac6a0f47af0de0bca01549574258c3e6685f93a47d1881bd48e0a4287a2cacdfcb118dfeb52b87207e0fda0af1dc96f2d5dda45081f45cf1cf3c36cd4b634ca594e44910fe5288d27897b8298a281adb7e32a8738eb01ccf0700ce30c3e7cc99aa25261e5e04f85f0fc3720a4a834c172a13cff0e620ad8877e08999abed725b306a80b88c84cec446b4bb6ce48e0c23da7edadbe7820f31a671341c56eaeabe9df02d2b37a0d24640439b2a03c7a9c4b54c1966501d5709a78404251b53373a6f6b5bc7a0811058a646d69b5663db4004bee2c6c413b6b4167ebea3c9e0af8c99aba5d860c93a8dde01eb584bc8a87ccf5a0cb2059e33efa59ac99b3a389b84482f2c332863a124e3cd2b537224b55ae2c53829ce5001fbeb50cb5c6ef18332c28ca97079973e5d94ab5e619e952eb03e674570b29a408ea357bcf1a592dbc372bcdcce1e6e82148226c997557eef0c2ebe27d5c90353e9a109d50da166734b2aca554c65a91fc6146f9c9774196676e57b962b3e3cf92c1195d6b1ac3b3695c43ff26af941bb447ec8050a7a9aca6ab5741d9d9ab32a0042dc78174b1a68a47f47fdb50f321a2b373b3b474cb73f513f7ddff7aacce64e33728c03b57e79e062f5f99513e4097d4ddc26ab8e88584768fe8a82850c716b15ff53667ea2e1eebc3831b685da2538c05e968ea0ad1139832efac40e2517ffc3478e91d5f2bb3e7886eeb6d90a1edbefb5f4faf0c7d24fbda26baebdb7ace70ff8f3a3f0e68a962a44b7bab37f41c417b310dd13305cccd2aaa8e6b8ef943ce15c864158a3377077564027d765241ae5119fff06c4f320efa69630bda30fbacea332fbbcfc4c0d44f97ea4a9d783c7d2474b6962e95575db3af95ebb12a3fdbfadac59a92336087afabfacbb3891f89acc31a7a8adaec1e9c6057286f2acfdaca50589bd8a463322f3fadba96613f302003b1da0d90355b85f051ef9cc27ba7a97a2850b04643c00cf29bedecbe673fa7f697e7ac865eb99c84d0f1c1ed257d60a904aa75fed54097b80eaf9623d870b76dff59fbf6a3f761ca67582bc45c78df6ba2c1e2fbfc3bf3d997463ae6cf8fcddccebf5f14946d73ed56bdcceda7e6f3e7cf4fc207d0067e60e6f667ee99ffdc66cedc0efbc89cb99d5ccf4e1bf8996f3db79a4f715096cec4afa0ecafa0ecff9aa06cbe68f9778ec73aad7f58ea76ff7b9f29753be7baa2d4eddc3ee6a56eafbef7fff1a9db79e37313831cd378ca0175c52805fb3b1254ec9cbfae275994442544e4bb4ae1067b27421ef1063d1a4b1f48740e07525ca9f8925b55ff2be6fa2be69ab5b97ec55c6fedd15f31d7eedf1773bd3de3b489a59bccc85e93fcdf47149f49dc0610f52cec04da9eaebfe72224e642ffc2edb38a902e99fd3d1532b86c2f8a907fe326e536099a70a005963124eb9d29f655197b91ad8da59f965322b36ba2460f391c447945a1ac2032d91bf4c58da52b9822434afbd4be073fa9a54b4bf25d85ffd943be08fb80c8def8bce846e74d2c9f22a60848b506645b729e8614c483dee6ed8d6b1d54e1b9c29746c721ac04bf3867ea37b468ced3164a458439a05f92731bd69d047e083c0a780f05382067d028003dc883b373a5a057cc55a02488326a0e52b4d0c7b9ad47cc152979995adf34e7eb99ec8118ed00d82d044cc6a6ea791e2098768f116a4f333c733953df9167ee07722fa6cd4532fe41d6d180e604eee3312673dedc41aedf9f93d298fa7cd0f59ab64cceb8af3e45c71e44eb385da605f7caa03ea5fb46d1a5c99caf2c413bdfe4b05dbfe83d309ca5dd25a0e3917145c1f33cdd87504f9f53a4d1484e68cb417708ba77ce7cfa153ed675e6fe217239d1a92d633e0764de586722f3b0dc0fa408e91493dfb5688915d185145c85f88584f67646a966d7a661e1419fe820d3b92b685bd4e5a332bde5a0ef927395c891d45a82fde345cc374830ab509e537bb945cb442eeb681d11f9b0b184168c250a3a1cd95340594df5ade82c0ff7597e09d8d5d91dea66ea818c87a9b757506617ca426ba5d13c54bf1449833907a7a814ae5c0652dae9046124ceb3e4fef97a4366bfb0a2a75523e5e7e8966fd7a8f8a973ac44bf069bdc09dad825fd001d5b3d98cd57182340ece8bf1e10d0fb5b1bcb700e340e4ad635dfb40d753dd2c3f54aaea3f6f06120503ff123c72344c1af87e8db75bfa711f4ebaea12c1a3faca32512940bd82101f8c42f23017c1882ad6bcd51136207640fece0ace8f2a1ce47ae4be5391baf87078d4d52f659566e5c3e466f110b8579cebd1f452d17bc0d399f4359943e2fab626860735832b10b31e82bb3c9df5ed24b3e8bd04c17337a0df823463a91a5f0f7c536882e45be7f8cfc73f5ba888d5f57da14f75267763ceee47c281e43c8b13ba340e3a82fecf960c99d850372b00da576ceb97320faaf1b60ec9e3b103b257aecc880f37417e983ceb943f7dff97941daef9c1f30164c6869096d3a3b5a5a39d57a8ade3cc55e16333cec91a016328554c7452bd1ad6ffd8ada105bb931c2a41f1f5986aa5ebc4bec6793c4ada9b77182784dfdbe09334dc78fe28761192ad5257b4ecbe1aee1126ef3f718ca95cfc46e9969f7ccbb7a7065a207b57944ce336acf05ae7e22ba5b8ccc1eea49f43993c4473de8d3be17db70711d4b219a5e0a95728356e3cbebddebe8deb59f3b067b24b476aeac9d918ef7d4ff22ee4c5d5947be47d318ae2cfab93f2b810ea0e310cdf3711efa96e7dfc81ed3f179209f3c33d0b69421455dd82112ba23685b22475073b0291c3bbdcda3c2bc6c6efe5a98ebf9b5a0ad69a461bc775f5e0b72d61872db7ec5e43f2c26bff9b13ef8eeec472e3ad19ffe9c250ecf788f1835ede973eb993df8defead25709f3b4f4fcda78707df5b9dce0706dfdb9f5b9d8a8ae824301ef5b13cf89e7b3d3b6c5a93ffdc7a169a096c1a9d8a28fadefe157dff157dff0744df1905ca3b23eefa10bb72efd40da2ea5d85779aea01690907b24a2384212efd666719aa67c91247a3af2205cf092381493570ac896d810758d0f6a300ac01dfd5f116f0828995df4cacc541df3c8e1683bd0251f588dfa0b3d764bcb30c853375fef8dd275af4691b47bddf229e7ecabbe89cdb299e39c68ae7348671ed4ae7102f383c61918c2f6e2fe77beeb48981a9522761a6ed85d5cba967f495056a82a690f228684bd21f3790b6b61e664044d5221555c8c5da70795423c77a8767c478e2d75a7b12dd4f8177f522eb875af249a4d0cbe740f8b9a061ffaf4794cb2247b91ed29f1e498ee739032ae79c5bf329d556cf54cb5fc2f886d103d296c0093abb28328002f58804bc4f71226d72b963fe2d40c2ca3c23e2956c67b53ef222c755d153d1739bc599f89599f1b274b44b2a686ff93353b29807bc7751e329fa8125c3da5a8456e9c5a65c8aa47d3b887c071207dc178b5e55c551bcd78a31c26b547ccadad6ace27b2806a40c6c9d7a54810f5c1387eaf4d485eb21d386727e91b386ec3f720e8d746897472cbeea0a20f3f4ea8b6940c2aa6864ad4ad74157dc58f209c3d9af77785752309c93157c8cd7b28db57aae1e4f0f5e2259031e09d4d4b8a9a081255bc5855b8713dc963b17225f80fbb2ba828bd9f3cbd64f6e6ee9a792e82777ddbe624f335b656e3d80c05cfd6398cb27eb9c537ccd2b6d670621df10e5a1be7a6e6985de5378bf90f387e80f0a911b9e159e2baeaced21b32fe13f59d1a83b5403516402e3756eeaca1935951219f1753e90d4b5051c6ed299e828b6ce6f621dfb2c02cfdf55dbe733321713f162192af082396771e9ea344bc60cf0de3486c51c4eddaff38946d687b4b784e9dc698a5b3bbc4fa8f3a4f99b2f99480de5629c9b50e948abccc81e2fef9fbbb6f416782bd3d54d100d173a1778ee4b11ffaf7619c56779ccb74eb3488b9ed7c3e3417fe8a1c0058e71241f211b8cf6730c72029dbf72d13531ef9fecf130de018dda916b5d016f5157dca3922acd01d513806b8f46b58778d0d7383257b300f4863717789a4e1ba4e31028b77d19c89ee706d19cd1fe39025e5a55fdeb87e3296b175b77a997398c3ac45cb47df5e0c89d2d12dc7638a729ce689ad563e96d0fadc609c755d91cf63c71d0b736e6249fcb99e86986dca2dc437d0523a2bb841c9530b686e259e968a82c11ddc64365fdbcae669cc4fb32e2a7c291ed48f99d6ef624cd0021eb5ceeeca8be5ecadb45f4bb8509dcf4e93df9952b694bbc57ac6e92c5e01a4a98c156c25d1acac370ed61a8203506b1f7da397f3d173ff7981d47f9d48e7961aef651991c9851994e397be368ebed38d208fce960ea149dcae96b1c4587788ef608594f202bcb9e6742d6350ea2483869bf13742e4ede7a4cf390ae5ee38c1a00079641fe6d4a3369e4ce99a26411f91dd9fdd339a211ccc178222e5d03ce506a870b275c34de0319c694774aa231a1ecd90f64b00de6e624233b8b6478007c43e763985d234563991d8b55f1b93be88a4d5b3f6d41eec81219db0539af07b24aecb238a33a3a474d1a4d4bef51b2861796a15c467e71d617ab9e651aeb12648a1bbbd2878c23385bf8039587645d6775d7b1b69e5b01c6481ecf2d00a6560f835e7eb573f95974da8763968dfecb1e6ffaed0512b843b662a393f52b09f8e23435ec9c9f39e5ed6bb3984b93514f03f9a582cd6ceaa7374b57ce9651a2afd5a8f60f7d666c9c662cd5c0722a9be461f765438f19859984657a2a4a5599148f1f5bd5ae65a88bb2f630da9c922b2bcb47d861c41e85c85fe8a775cec5670a7bb5b988915c5eb95e845c380e75b16953c42647faae71a6a04a6fbd01ab8d5d5d155ea3cf75f7065dcf05b61d43c5fa1dc84bb5b80c6d5ddd5a1a54a11d5c432572e18002b52abb92195984c83fd454384b572bedaf0fdacf64ed957d9f6d5ff1f3d8fa2c7b07728e5a521512d2ed7a1f2cb3bf852c1f6a53866d1cc77a54988d48f52938c7c86f4be721cd55ba30850e4fb3278193139bc46e003b889e8b0ef99fea5bc4e670064be555d394a9aa0dff9c4ca9bfd1e896a2757d9fc259ab1c9c603c379b431ceed35877057bbfa85dc4568d6d39cd83ecf9e81ea53659fb2dacfa3a531b5a233a584a6fe945fa50cc354f114cc1ae59817f9666201c5c9a41295aab0a9b25e247173a3b87e88b505d94e6ad0cdbd37f9dbb90c90d36c581e86ee17c3e0da413379a889e232ff763eea44d79559ae2ce500db30567cd6dd9bed9837c3cb7458d7fdd4fb27e94fd581387a325cd54ffd3e0e6467fbc1bc8448e8e8b9e351f619ab14f64f0e86a5d8e96f4b790955b86d2d1e73b61bf362870815b7294b38e46abdde741b70d7ec5d192acf7f620b327cfed61f27be847d9baebfc39111db7cbcdbff9ed9737497bd37adac4e0702f8c517e9e9dcbc76ba2b75744ff76ceedefe5bac057329ec53ead1ae78469889b2aff656dde6316bd2c2bdbd8b88399915158f4a91ab2955e8b89aef36bac98c62ade77bfc68b015d93d18f4df66aa99f9be8f4c567d40eb2f19b43ec34dfede366985f56bd3a6ed303f46a51787d1bfca36357b18ce7b4d7b14fc6087415aa0f00ea8072cb6dcec077cfdeeffbf65d91be5e0b918b096db5f65e2c8aadb1e9fb2c5ce7ccba75760f5556b1b2f57307ebaff4fb6cfbdeeb1b40ba047a71d9bab00d15a30adda21e2a9c7a30851d76b075407d6d6769ca661668fd71d5bebb233e6aebbc6709da50adb4536bf3f97f2cfa640d64b82214ed4a44485d5a5953dc7b1c72640d34501634ddfe105b42398239db9c89822397acdf3a3ab480978588c677cdb3882d6338acf4a3d4bbe7d9362c72cebcb93a54dfbdb0f0f6d759ff4e5ff3918c17d3a6e6a340e3c60f1f9721397bb0264b3e92b52ca959d18b1939b2aebe584dc83760dfb3957cf8a38978b474ed3c29a92027d738011688fe949983b2e7f645de0c4e1b935778336863b757d98e336a6a9ca5a9100f0e79e7dfab4f867905c3327d72e3cadaaec2dffb4f651a88e5eac3d7e1359a2a836d546b4f7f387301de99ba8b27d3526484dd4d3f4bfd3facba1d03f26be5fe2db6cb4693825ca05c1947ee933b77bb82185ac1b5e0232bf8ae5a4f4cfbcc0abedf5164b061d1f7653901bb41df3a9a05fd8fd0c073c7a7724e137f6e3ec927cb792e2e4cfdb43185e79faf17b03151ecdc7e954e5913593e3c277ebe4d5379ce90be967d7fa17a4cb53e5971f62c4274c662568a7a31c7cde3f436e658d3a6d8efc31a3f0aedafc78cc1d2d4b55d156ac21d79b40b169db5de18877dab95335bbe7633cfaf3e8358e7381ad3f7aef70a3f761dbf98b475af2a65abdac6a27358726767eab81c7dacae1e2377ce2eebbe6493c54727d002db98fff47c66533f71557a37d5c778cfd68bd70bb11750735892bb0d0c06d80a70ebbd3e25bbac4f8c7b35831c53227f6ac829cf91abd863eacba8480f9968e204d09f3e225e51639fd419e3547b2e96aef04ea08dc91af907f8796fc7b582a981650fc4eb5cd016ae31c45322272ad87bead43e98c2e9e0eaeab892f9ea9e7992d57d755e4bed9ca123d35ce7e4398ef516e4dd87489790f78ee4297c66eaea92c6b68ff01d92f12244d6f2678004553547e1ab67f12850a2da81342a9d670a3bc8c18e88ef07b2b6819c12ff2b37d2876d579ecebff5f0d85d8c4be268993d7070fcaf27c5e7a18d83ae379cf64de15bd47ed24fc885691f5d63bc87dccb5efbe042fd0420ffc5ed637c1eb1a189ed1ca3118f2214c5d530ac397c0624e2ec988a1ee4f8fb22691f3790a5a5d52f8ff365e7b27306943c181b337ddfa8161218a55c192f52eba99d4250f22c59a5791295cc57f445738137bcd30c73c3e5134681cbd9dd046dcd5c61ce8ac6fa6d3d3727a9b9e82b5bbb2c0f323bae0b32664e538d6b25e8188a82d24db5bd24373875af140a0aaca9bf3b16bd711e28af3e42f7b2e39867a68efed1e76ee87faaba2f7dd58d7fd27d427d554cf2f19e79a7bfa9914709afd88756a79690652dd03eab07a44b9b72c6d8fbfb6bebed8fd73328225072be338d6b5d1f2fd42d6d90ac2e4c63b8543f5037ab67ab86767db51c61d695aee7acb20d7d059b4ded6c69e2c1c9453ccfdedf15f0d69215cf09d41e539b6ac5f223a6dcaab1ab2d7f3cd457d9625277ee950fd6f7b7a63ec4a8664d325b5c1cf45032f7ff807ae7c467c1b27740f655ef9d68ecaaed8c07db1728d038f09bf30a76fb5aa5ee5ef7dc8b62646c6baea6ad41d71d8d8d31d9c877aebd7a6b249a53daae4a76ce9af287f6191082a7fde161c6c25e9b5b8f13d52e0e4769b4e1b7abf500ac2e1a9917af1ddb6ce4fa4a79108e3560c568605f394da8f98cebedc01f33e1899c6c651121314563bfadb3acc055b86f8dc24b560e2868734e202d6c8ef76692889da5727002861c9cf81e37397c4ac4027c8500f97dac51e47e148435862b8a6eeff6879e2994e6cc5faf85a3650ce6635ed4481f9c603afff6f215ee8564cd4bea05696df540962e231d5fc29ae78d25b4c96fea3c6f8184f63e6ce70ee978ff6dd29a4f65e9126301c01939dd39747d828d3ba268bea9df49ad912162c7e717a8392c4478cd797e7dbdeabefd9b6aef8ecce3d832862fa4ad8fd793ebd53e4532b5fafc015d650cfbab420ed569afd354d68f3e275c43c1ce1270c198e687257f30bd47eae962f1efaa51dfaf5fb5f5a6a48dae3edcdaba32b20c36997e3d7775ceb33becc4a48694e54c0be303a93eb13da3f659582397aa76bfb9f4bafcd9f13acf918bc70ce493dce12da984b936d50f4b6e97e8ab5c6c1b94e2dce4fb61cada087a0a92b5d218d1b50e5a1a4f6a2aebff9df9c91528f3746dd4b0e998d731603495d64eb3ca7ea67d265e4c41da92b5f2981831efcdaaf669aede354fb3f9ed0af4b01b3c22aba9e5e21f5ebf52181ce0e346f2e9e0c6fa0fe0d6546180d5d2631083dd7eabe3f31be48b111bce6520f31b14e09dab7359fca7885d3b44dba7f893e1daaab645883eef5b903b4a3109a9feeef296a1d4d0dd6b8c07738e10efcd4aeb99f812db9c31efa5cfc0f071bb3e53d8a0f832e8a9d2541a4a634e9aaad3f1dc049c989815f2ffba308e433c9055621f1f2dbd84058d51ff8873e57ec9403a1e0f948155b60639bbc33cc1a27c4d8a3bace7ef81245736f7ecadc8e1cc1f87e8ac8efc0077e66ec6b2bfe0fb9859b8e0fb388f3beffb6a96ff1857b7ebeaed252aa89f615ab32cfb9a65af31e4ffc68c87b979a715cc22c56b6d077580576d4ae741dc5c7f3b7edf98dbd24f3321a47f53e1d3236dcc671e61d2114c43e310afc07e4281db77820eef94c8821ab93d4cb6dfe3f35acb71023e0a43f2f1b29e32813fb47ead46bef15d367f5ce3c4eaf3bbdbafc09e877ae738c5e355d3efc59c9f7addae5af67a5833c4ea9bbd2b2e003e5dd28f7fac2fc52cafadca6d1773dcbd460e4858c715adfdcaf6277e9deafca05a7e45f65aa14afc0496fcfec7d69656ae01721ef3aedc798b742495722e145d9b8bdd77975e94d860efc018877afd4d18aba863ebbca4998d28f3608f7243d05c2d601c76691e5c981ba552367ec3039b12b027cb9919813937640ee4326d0da46d86194dee45367eca86075cd64d849fef045a00d88fa518b3f0ccb8ed096eeb8ddd3b37038de6de51b675788f9ae9cf215e535e0f6114b3e031d636dee06944ac72e3681c96a971f3453ceb03a6f925619bcbac8179755e85bbb601d7376fcc43ae820aacf47a3ac7c9739aead409a4bd23e0842f8521367ceb3b29b8d72485a12d4b17e051d0799c626f0ed73a4b3eaac8a5ef6fe9e3b9b51a1ed084622c47ac81d4a724ed51535d33c54065ebe004bce7beace7962c71d68487363e5e172b6235645f7be0a39980ff68eaac343cea8ab2a99f2ed6443c38bea8a160b7474d775f1d1fbcaffe9a217fed5a9e4dc97352ed7e093178f7d6f9381fc77871c7f954503c147e4edf6b4ba6fcd69e7a36750cb1f05157ec3901b06a2f475d51a35c1bf49e1a9527f02c55d6b616952ddb414f059f7ba99fe89e39af811f017b4322fd685f42d93fad5a83a3449e96fb72fa3f1933426e63177ca4db3ae7de1bed8bf212d9db716ec5394fb6c6cf983b82b6821cee8af3c73428d6b4a99fb64808318064c045f46af95fff36ac0ae65818d84bef8efb501f7f9d39fc1efac3691ebb0c714038eb73ce33f09d53c66aca3a0afe5da87f3a61b3a956f93269ce7a533b532661ba17d2ece145cf2cab7d60b1eb6f594b435f0e17e7087da77df30e48562f377d94251f35352e75ce579cd3896e047392c34c9b1a975a36369225dfd24f4cf996969ce888d3da3943f7e45fdeea18213b2bf01d1199efa473a36296f3383f30c415550ece6a889da608fa18635e782993724ebf1870fa7ee95cc938fc1c9d8b15bff0766c298e2ab16d2c637826e389a03647c52890f6593cdbf6017800c8b34af7267dd5c4b8128a78f472aebdd11bb5c857eec7754d69febaf8de31d7c36a199dafa44f2cebc3033b506f87ba55c4c03c055bc40d30e0e0a6f004ffb7e9582cbe93d238cdf5bc3f286f20cd9f55e78c9ea47e17d50e6e6dd07d88bd2f9dcd00933d7f9e4db22ccbf4fb045fde1670957f2ae6e8b375fe88646d67e9ed98afe6e1f679fa79c62bec2f575738177857e02c06ff81690c7ddb50cfa6316c5fd9e815b2fbb6ff693cf9818c778e7cc2e97a42e7dc9a4f00ff0eefad09e59f64c5994c8f59586f98e0c04d52f33f89fd31a9cfa8bf20da7765b5eb74cd29641f4598375b62abb9445f9643becbb8dfd3b91948202b80b769222e88ae41cee2415f69133d0b85764955de9b6d8ce74897f6a6ee62cacbf84c3992680ee9e5da6764021eba862dd0db29763930940b38a8f4ad421f3019c7832bb472d6638be611c83c26f281e664a4f85e648b47b2b541646df65fa14e1fe9f8f2485d0c7034659ce5c22d1d3ff69c4e069d35910bd372bf166b0de8951f739ff8b7a47df93e025fc186ad46f9be9852d15950232675237fde0aee093edc982f56e106640ef4698db1bc5d1f837ee639e4dca5bca594c728de33b47eb97da075d98c35df64bd84f6ca773ff4a51ad0e60fad191974e376bfa786e02df631eb521bf28024720e4cb7839ee5a13e595f9df340d2f6b6d026b280a94622942177c5145d469cb8e2bd0acf4dfa234bfb99a1ae237ebdb2bd54677dd1fb87dccb0c7aec7be6fa8efa02d83b5a7fe8a195426513665e93bb38df8269ce38daa78fa945aac6c04bcf09a3fdf24118831919fe5e3df96fc89bad8ee1e02817c649c5cfb4cb4d8c2c5a3f67f16095e6df127904635b9533ba417ecc4312db928fc14f8fdaa0be9886e89902e666acfc5a0c35decc3cb0b276015f654ff11c595a94720732eea338f7ab5e4c35ce1fbdf64d86b8219ed9542fe4339bf2ecad893d849ac30d5963f4ac557e54eca9056a0e9774aee3bcb04b412caf49d794ba76820e6f09f3fda0d74bfae68b397ce6e9fe75f6a8bf04dc10ca53f91cd7acc17388ed2374802b33f203e5b4e1e2026e8b72b156da1695f3d7ee6cdd3d87f67d5c8f986aaf67c9f01d705c7e78dc15c7b986797b5648cf35f2c5a62de3855d2197cdc9ed5e1cf45d2fe27285b3b1af7011bf50a95fb056fe0dd5afeef1ed0cb0fa87da7b0efd67b0aeb3fc06095fe3ebfd67a73805bc1f5921f6a70f7627f02a92fb538eaa381e73cecaa8907f38fa6c5b75d6d1b1a37e285b6f419c26cfdf1671c3d2bde0716e5fbc7cf79f0f968039bbaff9a34039dcf22cba1b93d8d14dd77302ee601bca85ccf7e8f2dafefe322fe1ab8ef6dc4ff257de6d973cc61ec9f843d8700f3ec40eb9d7fea8e95bbd583a2f3061d8e4d819e16fa9af49e8ec803f3bfc2c918dc7b93569af46fed7d368f175ff5aca175cbf0f75f0a2c938565c738f8e0d7823c8b0aab8d37e2e4674da9752807f1cd7d1157e0ff1cffc7cb3348f64c1ef9d289fa1087f39d165f2f2e3cae34a256330a21c3edf6ec7249f97bb502fcf7fc66e20f3d89525b29ebc643d71d41717f735affda958862f0aafbab47564cf7b25739cd299e8b3b8c8f699bb0bc9437d716dbef5689ffa0a765616b65ed673b73fe4233bcd69aa0727006c8bf0f34dc69f10e1d459fa156e8cbcdba060fc34e80ec273403ca2be7636f563fcd9956f6eaef3dc37eaafe8103d3bd12fc3ef1a9f1a1bfbc76cb56b7cf99fc61fcb79e34ba3f1a9a1d8c18cbcfbebaf4f8db9bff3f6e837671dfc3ef7edd56e7bb47f04bfdb1b7f76dacd565b7fbdda7ef9dd59affef4e7bf3b3fdcdf91bd9d6d7fdffc581f7c77f6e3b7e437bff9eb7fd997fd8f19bd78fbdbd90e3079acbffa734dfe77673bdbc75bf276451bc07c974f8dad7f9935be08cd6741f8d408d6eeacf1a52570f0f65f3b1fee267002f79f5ceb3ff9a737befda5ddfe22b47f6bb55acf42f3896ffe1f4ef8c2718d4f0d7ffb2fd7ffd1f8f2a78db7b34f8ded191af4323b34bef04f9f3f7f1604fe53e3151ed06cf2cfcf9f1a0af657cbc617fe5363b05a37be3c7f1638aef3d4e6db9f1a53df6d7c6973fca7864cde9106a92eb915f7a9f187edfecb99afffc535befc17f709fefdf7a7c657d2d8ed66e690a74ec87f7cfbf933d76a375bad4f0d654b3ef9dc797afafcb9c5fff5a9f15a78b9d08e2e8ffbf8d7a746b7e6f5a2ff63e731fca6c9b7db4de1997bfeeb5363929e0a11af9de5b6f1a5f54cde2fe934b5b8ced3a78684edf91686429eade0ffd1962c46783b0edf92a1f9efbfc842f4663f6026c8e4347e9f6e673fb6bf9fbc266a6ddddfe7ebdfb73f9cdf19d6eacd526d7c6a0c82cdfac7ee0f7be765967ff4f5cbdaa19fbfd93fe6b31d7dafaed7e1bb577be7788d2fab3dc69f1a939d8d67f1e281bfd499bd5dafe8b5f25af2f16c1b5d4d1f1cfff932dbc4efdf66dbddd5d5e4a3ab5fbcaedd3d79deff34c2d6338c0034d95f35beec7eec679fde3b9ed0a9d7b5fbae3999af7f0bd62edc4a9bfd209f35be34f8dff81648a00d742d124f6c6d0aa7f01d82e9af4f0dd7ded98d2f8daecfed46e38de7c8584f9d0be46f3c237a7f781e847c9e1b74ee08affa10bb72efd40d4299dd0b6bffb4e43c56691d73a8c36e7696a17a446737c10742ec39a2874ad9388b9ca9d1df5982b61f058007e2bb3ade5ab2761e05f8306a26756e83be791c2d067b85e832c0192125391886c2993a7ffcee8b7b573f6dc919129d67a6b1e1c15f40b9ea2ea3558249300a3276caded69fbfc1b90aed145761bd563ab6becff2cbb737889cc1721627dc16f09e9c9763faec90272fcc8301bf813ab2f5f6f2bb2f8ab39576a631206b6371292c87beb8758da1875e6efb109e9b8041ebea27cf595c5fe37ca33ebb0ee81a6f296e75a899ee5b44575a86b1b85097855829f0da6a0be5cd143c8cf45ea2e796d8d9a6216ee2dc87ebfcbb5b2cdd153c23f1672435e0573e05cab7aeac2d9df7223c56d0ff032daee7360b726b9060020e6aa4678d880d610ce1dea9fa65325ee4332ee4135ea1003fa59f1be6a244f93d1c596bb7350ce0c73bd37c7ecb437dc8154ef9328618f4f0aec8a355f6391106d5c81715d41c86397acf4fd7b6766a5f2e90c0ef5cb2e7facb03d195dcfe7063ae340e35879791a06237d0b6a3a6b2b1cebce704cada36546c3655de09a6073257239dec3f0be2cf74cff3cb4133cdd5eee4d756e6d9d5a13e971d935bfb78c8c175317e72989716f67f9a995388b5d0b5305135659a8957d2359033df749ee15ab85edbbbfdd7fd40a2faabb38a6254647c21ce0c6b29ccafa27e3bbdbd74e4ce06ad22dc5e656be7e6ba42fdcece36d44ba8b763a7a942ec7ee48b2fa6dedea3e618b078dd380fba359fe8adf9589076967e7a310d05fffd734ee655bb8c743237ea6578ccb755f26c63a46b9ca9ab9e2bf7aee7bec496122f8eac2dae6da8aa3a0a2adbde512f5d50aff44e3eae1a98104c319605b1fde8fa97b65341237f97d492d68951b0d4bbd6c23680f893d3143d5378dc7d59631d15384fbbe83c766469517c1d3377ccdee12bd7cb2d1f70e6ec0f3972e967bd37ac841cecb7b9b56aaffd36a8e23a0dcfb748463d34879e8133fd367f531a4f5279b0491fa6342798caf20c9623fd4d558d565d7c7fc6baee921c543bf1b1c3dff138f7a13f4cf90bf5f16353fa34adbbbc33cfe8e63e497f32393fee1935b5638c71cf8899360b3a8cb90a7f373f79d6675852cb9a6a431d9c65c030a98c355dcb04d5501756b7729f0087510d6ca2ba58ceecb8813935276636a6b1a77fc75c094f44ae31e165d6c7704ef22da774fdded987c9f57d52fd49e77452fb2fe16c60c403f82839510f1b90050b7134b91d53c6b39ca1fe8285479fbe6e6571c29b1fcbaf9efa7d7a16e1dc0cebc8600fc59cf3997cdc2313a6a7057c1783b9d9d42eaedcd9412ca93ff4acc0da9855f990bfcea67a7df8753645af0f3c9b1e86df096750990e1ee36d16d74f32ead7bc0771b2d21c23069eeb9a7920057cbef7c4a67b05f74aad6f65330be87e3527a240af9bce91dee1c17664c3913d0cba1dc134060724637f2484dc170cf1fdba9c0350dfa79fb02b5907d4d7769646daaff5c70c3c29b7b22be2a4507ff2f8c45c18ec3550ccdc6ed60ef8b4efa975932c057e9bae1b0c315fc97da3b1f8264ff7d6b905f95828503d2750ff1cbff5aab9bd3ea89eab884fbc22c721c6d8adf93b01c19afb8975f47d6be3ac54ded44fdf2d4305acbfc7f85e202f6181120efaa12a55f243ddfa1320ff5639c4dcf71cee4dfd640d857f833e13fa05e873cf31d650f53ee8616e207b91cfdb871aaabe7200be83109373d00ffbd1fdbaa6fe8ce91cc978671b80fd7040fe92154b95c5cfc4844596c31f41c638a53bd2bf5336966e1b43ced5a5eda017631b3cb2dd1116e51b1d7bf565325527b5fbd11d4edf38f58fef7e9407389dbf85b262d4158d081f186aa97a37f3cd80138c978e2f7ad60a72543d88454df8a466ce1785573fcc7524e781ac2d47805f7cdbb7ea7333b6b1e0fab40e9fc8bf686d3d32e7707c51deaa720e6bcd6d8403fabeb995c21c759c910b656b36c6838e7006abecec0fe035cf9365f76363103b359cfb8c5c2b6b433f77dcde8b491963bbbe332650cb175374a6de937faa16dc2bb5ef2e44ef8a70c6dcf0ba81cc1f5cd00babe505c5d3fe7a7003e93c124e1bd3ef4458bf8fd7b1e442bdf11e1d7d54a4877cf0f8c4fa4f0d6c0b46ee985847ba673cf437fadb944f21b4c37c5140d158743d3c0a9c3dd4af02e6c0706970bdd3b74a9bfca370b2439b075fd92515ba6ba13d53f13b37e061cdfdac3a2b066cee7cecdc829c57b339c496aced5d197b485230f93bdf77403938f4006a0c0a301f633bbd2047f7567f2ee8c3fb70b41f831749cfb1c7f0ac33e9a8b56c7099e7dc07d69085f90a7b065ec8c7f3f997e3c8eea0af65b1dc4827acce61aff03325b8f58fb1ebaaf9021eaf7f95f00430fa08ab390f6bd53e7ac42ea9e4cfaded2b67c746fec8180a0b0632bbfc679de3704cdfcbfd5115a3ac9313a09f389a4358e957ad73ee479cbc8fbce7918567b9962cee0396d3a692e7e7f1b88209e76eb10f8f85c77517f2d3963debe8045a601bf3f7da519bb23eb1edd52cd7c763e49474b42bcfd3da322ac272194ea5a1870246eef4fa716fc67d52678cd3edc9f057ff03388c6fc7b5fa37cc5cc635b8bd6bc5ba6ff8ee1ea61bc099ddaef425d4e5b4b4ef8de3768722f2c5e1b41bd6f6f7950d0adcad3581cf3c4b5621e63feac2775b5b57429b7ad826fb99954b555d697bc0258df18cc2dc6f595ad882b4b226a2670a0a76fae3b9a563ce96b5f3e065bc335798b3265fd7134d14942e23afa3dc390f5e7ac248276d9ccebff5f0d85d989ba8fda49f50dfbe12f9c837f91674380bf286252ed53ec6e7a907b399c1c3da522c56ed0c3221c43f0cc7391ed3812c0137ee00da37064c82f2186cf605b90e7a6b0e63e3a7ef4b71ef1d41db99907ffa9aaca7fe32956b282dad3ee4656c193186200fda5e6914171372e8b5bdd554d7a99c217f66a8381aebefbee8a5e7c2114e1b5360ccbda175f31757c65bd40de317640cfb26976afb7ec0943794d4a0c39aaa834fc38a515e4b2ee247e6e67c84ee15e7fb8c697efa01c9275c8dc75cf7dc0d7d400cb1e87bf1ca6cc010acc1ad7d0f56553d0e9430e702da5527c7850d2797da85c0b1fa413acc06ad3e5ecfa01803c9f95eab2fac7e69e027c45b4b563c27507b1fa79b7d14ef36b3ae743d67956d70046de11a433c953be72a6caed1446cdafa69690ad2d9eab1b5a90e5f4fecf3adb4dbeaca1f69ebf6b2f57e0fde2b1fabefcb21aef707e1883b64ee9978a66ac73beaf96e129f05cbdea9e0978ef64e3876157348ece907db17fbc8a73e1534ae3a07b3764e7814c7635a73756d0dbaeef0ced4196de43bd7de1d5c67bba85d75f61a33cf198d618e9da0d3aac4840be7e136ef27e23f827b9d51a07196a17ccfae071adf9cf68787597f19db6c66450d51eab982a99f788bda571727e28aa6fa39f863460691935e7bd01ff2286843ed26e0464d44ced2db1e5a6538ab3e4c373385ce1ead2846dc9b2eb5a6b2761e0b9df3bb303f7bbc379373b8a77b6d51a335c27b32df21ce19d4033b81b4c8c7b22978f545ecf8e2cb549a923e9c898dfa4af1ddb6962e09d624b28ff0ce3600576e47f953dacb818c5728e89c5973a1e9da530e2868d3769ef99dadb736235f1c9b86728970ece08c9cf047589f1362e37edd419d68ea77a631df91bd4e3e771873cc697febeb55f7eddf547b39de9b4922708539a5b9833732864d4fae970b5ec6839c7a85f1698deeaf079e191747983ffa9ce01d413bbfc9f8c278c633e4cc64f6c89d5c9aecb515d1eb3ecce4143f28b7c36c32fd66ee6a9c67f7d889cc7508c91e4af78951c6d43e0b59f370efe8f768925a971576c7e3e375d2d12ead4556b6a8a92da7098648591c6659c68b40650ad80665d7e4fb614afb10e7ca97ddf75a072dbb96c89ef7c692623ef79f999367b360647f508ebd5d9a63f6e87cf7188bf9213162a44badfa79dabc37eba6f05fe4023dec16cf99e2c756e37fa77883f085d8ee48ee3463fd47267a57559d5fad3c9b1d834ff5163b54c7fb180b1eb0f4f1ded6791e4dc4bdabf33e70fa086692830f7c41da25bdb618d6ec01f0ec29bf0426fa3ad1df73f8661f361ecc780ebad42affbec436af8b655de237cea9d589b18f892eaef6b4f174a9bd8c355552437c1f47f00eae7e5a0ee40def84982f16b18ffb22b64af0471963e17f4b5ef2bf870c64e1c40ef3040bf32be3bae182df87b18a02dc54cb5017f9b56d85e3109dd5a11fe0de5ccd58f617e57246ebbee0fb501edf83a59ade8bcb218f02759b6fbbb3ad59967dcdb2d718726f4b79c7ca759ab2b5c645f846b79f1760c8a6db325e697b4b3ee13a184cf9bc2f55e39d9ca5b973c1a42b64392e6ae1e9a4316173384f636ec41bfe4fad0578604da52ec769baad1eca729ee672d80e249aa31061be516ed5727906dc7d71dbe398f82d3ebe3cc414174d3b5a80a7d85e41de42ea7372c697e79190f67f381f6b8a533f9733e086abaa425fa29c02dddc318f30ddcaf34aead58617e172df536751c40590aabb3879941b03b844e91a4cad7536bb3a757fe00ab0ce48e0e680959170a9d09c92a003b9320cf528016a0e77a6317e1a00aff774076d7c68ed07d821b47d0c3ea2c2b577a6fc7b44f7d2fa43de9a1ce76a206d1d610a392f9adefe81824e13d5a895678cd1d2bedec3154a9e3349da1d72b3871ce914dfd4d2c7db81149fd5d17b6c75abf14d0631373be56357fb43cfd6dbc0c71e72b387f7a4f2049e1572b347dcee71cde743f9edebd4fb1470ee96ae412e96a71535e6d0e69f55db938ee1bd8b43699970b1e7c8d6f81983be822d8127765ec5f903f96b916dbc087967282e4ece39f418ce2496fcfe9f5d8bc29a574f6def3a73f846b90d72f85f73ce33e01c17372808f3cfe4984f784b6350e53229acfde79dd5106c7cd80b720a2ba8e899c66bf159c382bf52c80da8bc446be78df66d8d84d312f229b37df4cca0c3bba973be627d5c7342979e95b562d63572244c5d4d7444a97efca27efe468e8e11f2af032eac2c6dd02ad22d32b662cc3f1fd6de2f507378b60ce508fa18630ca49a133fdb2fb6f8c02f9d2b1c879fa373b1c6cb8af0ffa25ce555c835949b03407db5e1b31ecb43ce68f747af32bfde15e7fc35d71a0fb910f2b01d9dafa44f2cebc3a476e03ed4ad12aef77e522390e612fddfa66355e30ba638777e1657518607bdde193d4dfd2eca87473226ba0fd8fb4e30dc903defac96597e9a337c9f60a604bb4d695ca29ac3fcc1f679e67917d85f2b6de1f6b573741687dcb6855cf415b2fbb6ffdd0c8ee60619e2d6d2892e1a6204ad5ef7831ee45d6d5030a538fd21773a6a56e142a4c68c9c797a6b6eebed8b2b4b7b5398a679f0637f4c9a1b9ffa0ba27d57951f255ec83e8a30b9810772a5a53192a27ee3813cf4a8ace8ecc9da3105a26b481be48b9719d1b3742ed2c5aafac70d64de4381b4223ad94052804b3de2c58cf09e129f917419c86d6ce90927e4a0af1c2d5dd958015e54e9d8e84c39d651d3dde7adc7812cedadaeb8b37429e2783c3801c877f2dbc0d54f81ad1fe7140b1f708a368ef0485d2cc591578611981abf4a5d35beb65a674dc98572bf1663dec495ec483833bb50ab52b68fc0576097e9e9f78e713c1e0567c1bb72eb0aee99c6bf93255a1f04ba05fb58deac0f1ff2f2e2e7907337e477008ce578cf402c54daa3a6ba66c2ae899f75272f65f4ba93d33c6af77bf8f2a7b1bc00be7fdf9a885367053c25b2a99f2ed6442436818682dd9ec802d63abdfbf39ae858b08ffdcd5e9d92e7a6fae3a115e66c19eae7caf752adf505f70f7314eec87ffce09aa0220e5396768e12ce50b65c4bdaa70fa93faa951bc66abf7c508cba9aef32353f557af2a3f5df8807b344e633c470de22bef754fc0c47f23a15238b3967916096d61b5a8602633b90db3cd287447f207a638c6987221f59cd9c941a383d711bc68274347565e3f697ac3e48068e17667c8f5bbef8f77294dcf07916f63f1b83483851b3bec9beba368df1dcd415ce398b5b5bdf61a2d3dac41e923b675b573cd465c881a79c5a678bda0869aef0dc589e2bc09ae2ecfef0e0eaee7ae48b622a17615e5e5f4dcef8531bea7ce54cfd42e86f9588ed7320f731633fd06d1b9ca6b62036a023583c924fa5f9d848c72b62b36478e153ed8d38e36d99d85a1f1e778d79fdf2f6ac9b9e6bbd3577056f6396e468c2ab804fdf8ceb12e06c4cd55b97f905eb62234adc5df8ca21666ae83f83756dc9c02d16c536962ef06f3f177276b39c9d9aec11fd7541ec4f3300bb73879a16b9ff21c565b7b70c272ba3cea2e790ebc3cf509f05a320f243e13dc469ba39fe3662534ba77d78fddaedab47e7b23e8c0477e3ca1e6ffaed0512b84396bff01a43155f1c32dfe7e7cbf7b779abba4efe67f92befb74b1e628f64fc216c1c031f6287fc245e7c47d076445edc13d79e86bf0d7d4d07a44fe3fba564e37610e29bbf4e5ac7d1e2eb63fdc3b570cda50a6c87fb74ec51c24fff4fca674cfb520aae89e3cb45df43fcb320472eb1b10ab9dc59730ff3fd8e9571a57e05060f5b9e5a3ece66897ec97286b3e319b0e9fa3107c763702cb7489096e340da9a7a7b515d0b5cbb76ece8eac3adad2bc3698fbd5eeb2331139cbee623192f261a8d6b3daaf68e39ef5dee78566fe821f05db3f04796d88895328f9b9b86e5d9fac93303bcb50db55d8ef71a7330d5cff12d69cb6892c4edaffabb4bef5dd67cd6fcb1e6d2fca4df52cf06fed1f8babc71ed6738a74fa67e3ada72ef447e93d2a1e159519ddd775f145e7569ebc89ef71aee5547d0ce2ee9bf2f72ce4a0bd79608f613d4c1479fafd2f96f11a6958aad5e3ea7f4c00fcf93143f34fdec2ab7d6179141dad25738d41c624b4ad988f4bbffaff1a9b1b17fcc56bb84983c611d07d672069ef22fccf4e4cb43902127fff23f0d7ff5e79afcefce76b68fb7e4ed8a3e9ef11e9f1a948c5fe09b1de1532358bbb3c69796c0c1db7fed7cb897c009dc7f72adffe49fdef8f69776fb8bd0fead253cb5b9e7cf02ff7f38e10bc7353e35fcedbf5cff474c7bbf3d43735e6687c617fee9f3e7cf82c00357fdacf1a5d9e49f9f3f3514ecaf968d2ffca7c660b56e7c79fe2c705ce7a9cd753e35a6bedbf8d2e6f84f0d99bc230d525d722bee53e30fdbfd97335fff8b6b7cf92fee13fcfbef4f8dafa4b1dbcdcc214f9d90fff8f6f367aed56eb65a9f1aca967cf2b9f3c4092de1e9af4f8dd7c2cb85767479dcc7bf3e35ba35af17fd1f3b8fe1374d8efbdcea3c75b8bf3e3526e9a910f1da596e1b5f5acfe4fd924e538beb3c7d6a48d89e6f6128e4d90afe1f6dc94284b7e3f02d199afffe8b2c426ff60366e27d1cff37cbb4f1a9310836eb1fbb3f809a3fb5f4a3af5fd60efdfccdfe319fede87b75bd0edfbdda3bc76b7c59ed31fed498ec6c3c8b170ffca5ceeced7a45af95d7928f67dbe86afae0f8cf97d9267eff36dbeeaeae261f5dfde275edeec9f3fea711b69e6104a0c9feaaf165f7633ffbf4def1844ebdaedd77cdc97cfd5bb076e156daec07f9acf1a5c1ffc6b740fa6ca06b9168626b533885770ba5bf3e355c7b6737be34ba3eb71b8d379e23e3d8b3021a998cf1acaf62144ad3144bb7f0aa0fb14b4e8b80b2a20f7a21eab496627c93b5c0d6db540b9f6f7696a17ac40a31dfe8098082f621ce06883436a2b9afd433124e5bcb18ec2c41db8f02c8eef25d1d6fc989390af061d4cc9c5ec7d162b057c8a926d38ce2d8da3514ced4f9e3775fdcbbfa09d0fcc0534db4d3a6b5030f778057ceb94db43cc1d655ecf8edacb720c087ee4a395a3a3d0dad901d307d8a8f820c2bcbded69fbfc5ecd171dfa2b1dae96f5362a1589bc8ba830c8c5ecef71c547edc9c8499b61fa393986832dad634064f037927203df58cbeb220d64094d94419ad6935a51b485b5b0f3316a22c23b973b4f4b638ed61fd955716b6acedcc9417a258db16b3ebe84a2bbaf562b9f08cc4a397548766bd8c6d6c75c58b297818e9bd28cb7343d930a34acfb00fb7153d90d98212ad2ac3969f543652e678673526dad60209eede3636a9e74a97b4b7d53454ece468c760f518c3bda91f23d6ff6d945d601a4b72ef90c15fdb5f3d2742a7d90f7afcc109a6e45e01baace7765fe59cfeebd3e8dc59d9c6786f5fbc0bec034139209de75180b9d9a4032cdb4e807dd7500fceea9558b082a51f0f8e8057235d3a9b82b771e5282ba6e339f212d6911b007b0264ac207dbc486717d561cb0fb5b7ec98dc4434bfae26e4ba0459950bd14069ff27993905041e580bd2509af2e34c960bac811b0f493ccfe45ac85eb0c8de3cb7e653aaad9ea34a0a32bee091a76b297082ce2e622746817a4402de47889ea670da90fbdc5ae20a6f063c6497502d5dbb90f7aefcbc07b62a22e7284a27ef80f710d8a586c8175fc85e443dc57384e9df3ee730afc6eb0ee6b0ffba2ab04c723c99e2956c67b4e8fa894c1d305bdb8fa9ce33f5d3c6149e1f831a2fe06535fa67bdea7ab75fe535a8872a173169fd7c2607a8802843d0207d2d45d8a862796344d958b886c221812f4554ade1452a4580cfccf9e390f237c50ca1ac551dd5a8b27522cda6aeedc839fe600f1a13d34cbd310efb560fa1bd74ed669eff38c6e2684cdfbbde81d9f841ac02cc48a0f5d0ded99078ebdc930995b39e2c8e18237e7e151703b227235252054a2747f63cd1bb8bd14918d77929a206e35e0594380318274be54f0d3945749e87cba8480f9968e2c4d4db2bb6ecd1fa59841f8c58fdf148d2f510ce6ec7b522caceb207e2755e03b9b94e6597299c0eaeae8e631f02ab3ec8324fb2baafcc6cae8dee8c8ff7658e7ff5c7c0acf035caa4ba10998ce4297c1633359c8ff01d92f122449200f683b2aa8fccab67f12850d2d9e39c0d9176d133859d6709d3b9a92b0bcb10b981ac6d887de8f85fb92cb3c5b89a459cee8183e37f3d293e4f191abade70da37856f51fb493f2163af7d748d31cd3ee9b50fe439aeec796e37691fe3f3964850f874f5c1a80b95afd8590d437bf73964b0488f29b073e4313d3066bd77ce09ab8699be6f648763a44bc4265ca4d6533b85d691b09eb030d5d32a4a2e428c0a2b12310a5ccea63e196a5703934938d66febb93949cd45c896c138ae90a5e434d50d928f90ad14b380a4195b7c2684d654c60faca9c7cbf67a7271e33c505e7d84ee1547e9b98c0ff7178277fe6ffe6108de2133011bdb48edfeda7afba7305664cef70f41e727ed7237485617a6315caa1fa89bd5b355cb10d892571d5de97ace2adbd0afc7a291c32ef2205b3bcdaa5dc9045b57fe246c851fc42cf1c1fafe364451f82096bd7f0abb5ee2b360d93b8c4c31d1d855db190fb62f50a071808aca2bd8ed6b95ba7bdd73af9a2d3733c777a0978b1ba44b8c36f29d6bafde1a89e694b6ab0eeb198bfca17dfe9162abb88f85b017573d8cd26ca16f57eb619242d68f6d36723d63e5258d536a605f394d055bdd0425e28a3de1eceaed3dad98c25001eecadaded4db1984c08fd3cd0a5910de5361a99886b74186b6bbaadafa3ed6c6948983cc378d95d10a98fed03385dccce1a2b570b48cc17ccc8b1ae983134ce7df5ebec2bd90ac796e308deca30dd23154f18c7440ab8238a925b419991ee2e7019b47d8ce1dd2f1fedba4359fa6594fe08c9cee9c904d85d8b8a3097ff53ba9353244ecf8fc023587f88e6a5976bdeabefd9b6aef8ecce31890199bc30fd0933f8aa92cc59e532187eab4d7692aeb479f13aea160670939294cf3c3922d9ede23f730e5447936ecd7df5fa19ecaee1e59069b4cbf9ebb7a4c1cb5ed4446d49ae4359a64fa54abaa9dfd2c64450fbca7df5c7a5dfeec789de7c8c56306f2e98a31b92c0e63c96528342c0c6e5c911fa6ac8da0a720592b8d115deba0a5f1a4a6b27e6f2c09e912c401de5b8d520f85053320127c1442152e653778304ae725aa7c7f4c8c98f76655fb3457ef9a139d37b0f536a63959b97ad84df57c58ad5b8d5a9854f3828f1bc9a7831beb3f1ed1bbaa50996be93188c16ecf6107d9203fc30eb24101133b48b2b6aa6d11a2cffbd6448cf3e1a8fe7e8beefdf39102786f56dcfe1d8cc77bd14c53d52e85edbd5d9fa9bc547c19f454692a0da531274dd5e9985686f795356a6a5bab2bfe5f17c6718807b24aece3a3a58fabd93c2af48f8809e5970c0cc7e3813290810921ca132caa32a539ef7afe1ea860c6db0d648d338522f68bfc7188ceeac80f50704dcc2855f07d2cfb0bbe2f6580184d12b696bb2a57e59d80dec18461e9eda5237788fcd1c27cda12bf559d338c9171bd7eac9d3d9ef4b1ccfa0cf1a3c7577f56dac1acb94517ef32e12de5d75cfffcb94e57746a747fffecdcd74a96518af2956ae37bd1861276a1129d810185b11e2bc7c26142c0abcd2abeb40da50491ffe6be11235b954e4ff711b60ea8afed2c4dd9cc02ad3f668823d78dff205ddba1e6b0fdf7e926cab102416e3790d58d53ee17de158e59058247d4ff9f6823b23039d490b9d6d6d4db7b4b3f3e3a262ba080cd17f7a131c7beb52f6148ad393facb6533ca6efcd17079b32c3a45a8741b0d7fe43eb4de75acf1b4ecf2279f5544d9ca85345d47a5aef117536ac31ca87b5edbeb55823cef9b1f9622c71cdc7afc7aa3c14567b5d3c382b55310df108fecc9f6aff7e00ea66c428a131e647d4ceb1563d2770b12b7dc4fdeb9c91307655d71c2cb93aa768341139d318ae2c43adbcf6c1e7dedfc2466a36452676b0ba679825e38b5de3be91cfb14a9fa4faf85047c28947baf6661b1bac720c799975d7b6cc63a477ce2c2cf4b56a8518cff6d184eae415d7807e5d754dc19855ec97b0ff3f0b5d97016129cf0753e4affade5746da922bf0735530b8b2a1b4bdd01ae8ce1615b7036aa0de74e9e800e253116adb2fc6d7a267dcc5f85accecfac30daed704773b7ee37cec81bcb614a1c7579dfd711b73c7996dae3248d97510a97b19a4c25be6b48461e99a450ccf28c3f9a52e535abaada67ecc30a7e532e1f9e2146a6f280a6eccd056f9cca4ed71ad470ecaae6fe980fd106223c0fb43e6f3aec8e53353872f8ac8fae1ac6e6966de5cb4f06bc68baada0a8a4c9c3be6e1586fcaeba5eae91745e89ef7a09f16210a5334d4081f0510b681912c5c83c95a67f38fa6ef0f6c8d80cf2177f65682e81fd64ab50fb406acbabe2c624dfeee033b281e19d0c687ea16c5ecd375d65ec8b02c0ff14052cf8023d3b33cd45730d47249dade16da0757683d9e758cc5c79b8bd60dcf49dadd8bf0988069f5c509348a7fd21563e4fde8bda58fb72c3e9c90e1356490256b04ef29836cc2183dea8a5a8cb51233bc860cb1b2b6b50021fbb12cb935f4c92216c0723d3092a7154c0c6ea9effbf14c0c715ed0fb9818bec78cae39b2357ec659bc58babbcbc5e149cf5b589719e57c980245af277b3f1fedfd21cc0b4cb8153f1b63a58effaf9eee4211927358e472ce33602ea5d8465057a9c6ac844886dcea0aa46b8a4eee1ac333e4aed0bd80cb99e469fb4a987c596c7816a662da37b9b3b5faaf377d34f5e1c135c6c9395f91ab73cd2cf950c677d6da1f60978874c4d3b8765e6efdbaa43c1d236471853c4622f323dd22930311b3d89e433667a17386fc4719f431b6dc5e0666dd4cbf18f35e7fe95ca1ecf8393a17631e781e73b5b4b326710d7ec858905bdb123157c3b31ecb66ca98a716afd9927cb52be6da6bc616d7801a1f7f3689ced7ce92295f1c5818790f0554b74a31c6a6f033538c640c6be31fa563b1f8af93712c3b371ec878906553ad7546a75851639c0719f2e4a9bd6f0c7ddb50cfa6316c5fb126c0f7095be9f0875d82c1366060427db07d3e493fcf39c3fee2cda6ca038622398b4386bc4246dbaa78cd6dff33d893b6ce1f91ac812e6a8668e480eba84b2b5b6f63c0da48311f57c8aef4985de86ff1de69aa1e0a149c9effd81f9361d8057f41ccd25ad53747009ccabd2b63a21f135b8d77bbe2da0c657bd46f6b22fa269515c05c3f9015a26b7836e06c60a26745764955aed1c6ed8a3b536f7b96a091717a0346d6885dabf97aed33f29cb3b8b7742dc52c4551ed6dddda9855f6abfc4c995ae54e13f939ebd1173d148ce748d7bc88290a35874b8a05fa3cb756dad60af096ac4de70c39d33bdb501ea98b6551ec19e2cad5ba6a7c6db5ce8a93b553e1d7aa519799f26326cc5b57acc7b7fb88fa0a70899e7eef18c7e3713feb7eb1fcb9877dbf6efd66ccc2fb312cfcf1b3ee64b78a7f7f27336a9a11826d5c0afd08219eaf194ce75a7fc85b93e35c0da4ad43d6577330d7f4f60f141059c0883f757fbd1e1d8b7730d842eee224e98fa9b7dbaeec012e54c55eaab3bee0fe51edcdc7b2e0de8375730f5b7ff4e2e25810630d31f4e9f1f5c2b56b1e59ed978fca6fac62cd4a5d5ba5273f5aff8dd9b4ead4efdcb29c47acb1e7247e1663cda7626409eb7c2728cf49d32e30b6dd385f9662d387753b910faa76ad55adbcb8b00d3dc5736469611b6a658e6c0d862ee6fcec1cd6d9f7fa241326d55a364fc20074e59be46c59e206b2b470fbafe4b31fd684e8b4dec669aa0727c00bc0ecafc47610cf96ae1c9c80da5069c6d1dc585edf8535e5cade1935b595dd6dcdc7a998fba002371009eded8c62ef657039c23e113df98204721fe952e80bed2b3c302e3595c0d54fdbd25c1299df58cd21b5ef13be83547b43e659d9c34e59fde483e2ae317baf9fb367fb99b9de0ffaeedad64b6a8fe9fc15b0f24a970c4f43822358ea17ac975b08fad51dbe9dafbed6ebf4deced47f46d7b58a1d601e0e631b7d0dc37c15317fb29c9d92ba861c0481d89f43b03b91de11c8fd81193089c734af641491df38fe2c2867148ee500b52d37608fc9c71c7fdb90d88a0e0aef95e54450d7ae3ed89b4267371232fc2bd7ecaf1ba7a9f096f17a78bd2c5bdfbbd538723fc95f79bf5df2187b24e30f61d37f3ec20ef949ecba7d0523c3aaaef9cab733e86f691df905093c8eef9762fc1e75453c0a9cfde0a5b77fedb68e8ff50fd7d1e5601c2baeb9474e7031cbed3fa94e37ed4b29b826ae6529fa1ee29fb97e256e9ee6c3796f4d6dee332ae34a902f97db7fa6f387eaa14314a8782697c5f040cf08f7b7b49db2c7bed9ebd16e65d77732f613bdbdb40c2fe5a7e63d278e3fd1f6abddafbb3fc2b828bd7ebe0fcfacb2b691fbf109ee15cd49b1406755b11300dec205708f65fc36e69521d125c87aa2318c90c7ab24178b65bd33ace37d661cee582725cfd8a5749d9bbc4bbb69edaef23a7f3191fe2f6222fd31c3337b3bbbe2fc0b3f75ce0e9eb1709132df25662315b8563d3252be23b49bcfad0f2023153e908cf4f3f333c74e461af691998c34b99e958c54e870cf9cc0439b26a99988b8487f5191fea222fd07509132cb935f64a44ea06d2d5dba58bad236851376ceedb3a59fb06928388f5cd4698ad8a407d8ca093abcf392bac72487c0347a56ec4c147fd87a7b0981f4f039e3265ea0c86880240175947f8df66a1b9192231e515f3b9bfaf1099c05b2e63982b698e9ca36262eea2b1b14b83c92a5f3775f8cfb65c6cf23ca730714284a78a41c4d5da1a0567dcb43325e86c97451db8952ba1f6be2505b286f212968a28c94384f4d43dc68458535394495f08cc4019580745d39c52c7d3c7704656de9bc17252512c33b4d4019f6e1468984440cbd152b8f235f7cb38c21dc3b053045940df2193700a74f678502fc947e6e687887ce4189b38c3cf01d28ba3b13e51ec6b6afe151370a864b6d726f50ccba228f56d9e74420c1235f54888203d4f9c1f3d340f638b72f5ebefbcf074bc05c6a6f2e90c0ef5cb2effacb83498bcb37e64a230ad26524a8d80db4eda8a96cac33ef3981b2b60d1587491c073257239d92b2021128ec7b7e3968a6935aae0ce6b2c4c39080f74ad1bd09c00d39b82e26b8090df388cc3533a700844cd7c244d594692629a39f6f9844f30cd7c2f5dadeedbf664869c3a0f8de0ab473b496acd5f08042c74d52801711ab285b5bd7f63986e3c5d5873b4886a009c5d869aa90e0360202d2f61e35c71068740deaecb2baadf9446fcdc782b4b3f4d30bc8a0bf7dcec9bc6a97914ee646ad454a9b324caee7be2448450d97bac564968c2fa63edc5abada2363996b68df1ac03ddb503c333861ab478bb112a75d529c15ce339c0f83beb826f33290879882712b6b20cbd28b0aead5c3a03b5cc6cfe9e6079fd81d9fd58e2b4b6fa7fb946bf4de26956bfbf4f8a5925b975709dff48c9988475b26675e5c30b6b065696f85e4d679ed46e7af7edcb69f300ec4487504c6fe77dd71d89f4de46c4fcef5a8afadf9c418274e7a9a9c7bb016ebf960a51d4da1b38335e11781820c310a241fc9da72e01fe78340dd3842fa6fed80ba83fdf51eab94af550e8870cdd6d983f94554bf9c13ffcf3827deed97b87249b45a5c93dd25f1f4dbe74eb3dde139eef9f12e09fef3c7b9243e3f353fb7b97297c4537279d8c7729744eef5ac2e89a6c03f759e840e17bb24e84c442e09fee9974fe2974fe21fee93b871475c998b603e5a86c7597a9bc672ceed1fdffbafc4243fb80bc9b70cd57b1d6f22d3fa25e41c4f72d5a72ab6021a5b20a6e0b56a4ad5f138673e327717697c8b91ee62e4b7a106ca5c691b44d4499fba42522e13e1b5db3a8f1663380a68dd6d1413d6c8b1ba735e00eb658bc05541318f5226fc65b48ade4ff7d9787a7b838e9b443dbea915a326e658e86c5d9d8fdc29bb416ff3f6c6b5c7a6a1aebffb5ff7e0c238b789b97044421bf2def5cbf37adc6dc331fac71be767b880cf838d31695f6155e4e44f26e67a8c3b90bd8f987ae698e62acbde06f0b443d74478efe838cf70efdcd47fe4aa44dc7c82953fdeb0e8b9f2fc69d06dc3788d56e95cf9823cedb4ba1fcf47e49609e749cadc274f052d1aef65d9f3359a1b70b1f5f682d643d1f148bbb2aec646b4a2b6e58d83ec9e51533ba6dd3e79eeace87e89eb2d74e549d7fdcf774bbdc938aeab74e413ef04d236fdcc2896e610b5a9a96d4d63f0941ddb321794c29bab4cfdcd7cd6e4c86f04533f6dacd06d18a966a82962b494c613cdbc4c43d74c6206de8ef900c7ed885c0e57eb2de552e87a2f537f19e7d6c3f58174a1f9392dba66aec78c3ef765ba1cc7f9be16512d838e404c09436ecdc77a6b6e199e07751293645cb335268a877cc090176c5d6ba6ea32d66e5f3d3a97f56124b81b57f678d327fbfa260fe7d68d2b0cb748181c22ae8791a01ecce6ebc16c0e0e65ee4ca399a8e246339153335ddaa1547e4fb1b92e665dcc57667a8e59264e7b3885074fe5784e1e1a19db4be8928cf631952d06e4ae25352837ae019057648c23b326e3127204efe0eaa725754b93cf20f77b8104776f1b9bd473a54b2a6f6f0bf54039f9b790fb690c010326746d6d33f96f8116baa9b4fdd573c8bae72de3753fe8f1c0650535cf97f5557ed6786f5fbc0bb8c805e580749e4701e666934e789e61df35d483b37a3d58b22658faf1e0087835d2a5b329781b57d6166e9fac2fb26e963b70250550b304f564481f2fd27919755c42a1f954e9fe9d90ebba313f32956be7b0ff93cc9c86bccdb0ffa4299fad71813570634ec7f39c71293ae7d67c4acdc57354d740c697d626c15aa23911747e310ad42312f09ee6b74ee7a670dae4e223103916f01bb7ff1a9ac9da85bc77e5e7fda0a7d0104817f6371f6367f8e210819b90c7a8a7c01efbbbe71ce6d578ddc11cf65f5705ae811c778c7815f6498f4d45be750926a4234b1cb8d417ebb9b132d7affd137a9d706d433b2dbff9d819f9f3e39fd2f6347ac3ae218fffef37edb8fff6223eeb97deeebbc63b5677bd19e6d59157b85acab1b0a2f0509d3e4a47a7001be0d64d07d7c69f9bc05b423f4be57472519d62249ff3ee5d8edfc98a7194d6e9d442b95ebedfd37c1fb19b917760fc350f4db27a63b69f53621b94e7fbb163a257d781e4e4509980059070b53bfdafa5399dec38246c35e9c579f8ad94fb5a3a3aa5b83be2d134543897befbe2ec7a9f18dd56f5fe9acc7fffee73eb6f2fcf4f996b5727c7ea6e9039e19fc613de1e693c7aed72ede46f8efe1693fd79cf6f97e4f53bf9add1ddaef5cbd7dd77bdb79b2d7b3bdde7dd6f677aefdbcfe9ef726540cdb5c3501f5f51bb93c2e02bc22564c875abaae93185ce0ef039c879979b5778ab278fd3bf39c7dffb907b9efd8ee6fa413d401c860d75c9bcb557515bcb5a8bc3801b9c83a1437e930eef1c90211e1039f3caf70973de300b8e24ab1d9d1ee78a5a68cfedabd809881c60d8b3396722d947a3c97cfdc7659db9f64fe9b4fc8677dec8d888236dbd33b4ed71f48693bf27f4b74456dcf55bf27a7b5eff71d938dfcedef53eff41efddbefd9cfe8e89bfa85ce6b2e47997733c56617ab2d5e7893b5b6f0fc3bd317fcdc58aadc8df2ea977b9dd0bd4f71162775d87be7c4b5760af98bac2d986955fb32a8718992feb39d1f3ac09cfd93a9f5bdb59391721ae015b08f7eb2af2ddd87a7b69eb8a476d777a16bb81b441b2e4dbfa69e3f69779fe9da7ab7a9e022c3cd1339beac60d88add6390ffaeec6e9b6f2715fd37aa9ef85bfd39e2d196c8d0584fafba7a66d7cbd4bff2ccf35065d30070f3625a78f3798b0cb1c1c89027c895f21c0bf230448c330b307c461aec32eb5dcfad71fdf46686edbb559ce7f77ed1f477ff52f3b709f5a2c8dfccd4e223d37774c423fffd5f8adf1df71ec878655b2a19fd57af71ffe6abbb3319eb9ff81f6bbffb00fb68f6d8467ffe1affe03ed7decfe87633bde2c1d24faaf6c477f9bafc9637e058daa83467ffdff000000ffff010000fffffbb62431e6810400`))) diff --git a/scripts/gen.sh b/scripts/gen.sh index 12f6b65ab..20191895b 100755 --- a/scripts/gen.sh +++ b/scripts/gen.sh @@ -100,3 +100,6 @@ echo "Using pkger to package CRDs into go source virtual file system" echo "Applying linter patch to generated files" git apply "$dir/generated.patch" + +echo "Cleaning up generated github.com/ directory." +rm -rf "$dir/../github.com/" From fbfb02004a72a829b4e95617228b6aae0b8b7cc8 Mon Sep 17 00:00:00 2001 From: Tim Schindler Date: Thu, 16 Apr 2020 15:58:17 +0200 Subject: [PATCH 5/5] add changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fdcac0afd..3f6650a16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- Add pod field to AWSCluster +- Add pod field to AWSCluster. - Replace custom `time.Time` wrapper `DeepCopyTime` with Kubernetes built-in `metav1.Time`. - Update `architect-orb` to `v0.8.8`.