From faa7331f9d700649d640ee656b3dc8670c4d363e Mon Sep 17 00:00:00 2001 From: schakrad <58915923+schakrad@users.noreply.github.com> Date: Tue, 21 Mar 2023 14:39:10 -0400 Subject: [PATCH] feat: UI write support CMP (#11754) (#12137) * #11602 fix : Object options menu truncated when selected in ApplicationListView. Signed-off-by: schakradari * CMP parameter changes Signed-off-by: schakradari * fix: pointers to param values Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> better? Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> fix silliness Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> terrible hacks Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> maybe better codegen Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> fix tests Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * same prefix issue fixed Signed-off-by: schakradari * fix for delete param name Signed-off-by: schakradari * lint changes Signed-off-by: schakradari * lint fix Signed-off-by: schakradari * lint fix Signed-off-by: schakradari * finalChanges Signed-off-by: schakradari * Delete application-resource-list.tsx Not needed for this PR. Signed-off-by: schakrad <58915923+schakrad@users.noreply.github.com> * added file which was deleted as it was not the change needed for this feature. Signed-off-by: schakradari * refactored MapValuField and added fix for some edge cases Signed-off-by: schakradari * Update application-resource-list.tsx Reverting the change as this is not related to this PR. Signed-off-by: schakrad <58915923+schakrad@users.noreply.github.com> * Reverting the change in application-resource-list Signed-off-by: schakradari * Showing application parameter values irrespective of parameter present or not in plugin.yaml Signed-off-by: schakradari * fix for lint errors Signed-off-by: schakradari * fix false source mismatch Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * fix equals Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * fix swagger doc Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * Tooltip description change. Signed-off-by: schakrad * fixed lint Signed-off-by: schakrad * CMP fix for empty array. Signed-off-by: schakrad --------- Signed-off-by: schakradari Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Signed-off-by: schakrad <58915923+schakrad@users.noreply.github.com> Signed-off-by: schakrad Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --- controller/appcontroller.go | 2 +- hack/generate-proto.sh | 9 +- pkg/apis/api-rules/violation_exceptions.list | 2 +- pkg/apis/application/v1alpha1/generated.pb.go | 1985 ++++++++++------- pkg/apis/application/v1alpha1/generated.proto | 16 +- .../application/v1alpha1/openapi_generated.go | 88 +- pkg/apis/application/v1alpha1/types.go | 190 +- pkg/apis/application/v1alpha1/types_test.go | 119 +- .../v1alpha1/zz_generated.deepcopy.go | 62 +- server/repository/repository.go | 8 +- test/cmp/plugin.yaml | 2 + .../application-parameters.tsx | 225 +- .../components/array-input/array-input.tsx | 245 +- .../editable-panel/editable-panel.tsx | 6 +- util/app/discovery/discovery.go | 9 +- 15 files changed, 2021 insertions(+), 947 deletions(-) diff --git a/controller/appcontroller.go b/controller/appcontroller.go index 80b901d31091a..d48dfe29d8adf 100644 --- a/controller/appcontroller.go +++ b/controller/appcontroller.go @@ -1479,7 +1479,7 @@ func currentSourceEqualsSyncedSource(app *appv1.Application) bool { if app.Spec.HasMultipleSources() { return app.Spec.Sources.Equals(app.Status.Sync.ComparedTo.Sources) } - return app.Spec.Source.Equals(app.Status.Sync.ComparedTo.Source) + return app.Spec.Source.Equals(&app.Status.Sync.ComparedTo.Source) } // needRefreshAppStatus answers if application status needs to be refreshed. diff --git a/hack/generate-proto.sh b/hack/generate-proto.sh index ae746424b7f63..fcfe4e4f0e4d0 100755 --- a/hack/generate-proto.sh +++ b/hack/generate-proto.sh @@ -112,7 +112,13 @@ EOF rm -f "${SWAGGER_OUT}" find "${SWAGGER_ROOT}" -name '*.swagger.json' -exec swagger mixin --ignore-conflicts "${PRIMARY_SWAGGER}" '{}' \+ > "${COMBINED_SWAGGER}" - jq -r 'del(.definitions[].properties[]? | select(."$ref"!=null and .description!=null).description) | del(.definitions[].properties[]? | select(."$ref"!=null and .title!=null).title)' "${COMBINED_SWAGGER}" > "${SWAGGER_OUT}" + jq -r 'del(.definitions[].properties[]? | select(."$ref"!=null and .description!=null).description) | del(.definitions[].properties[]? | select(."$ref"!=null and .title!=null).title) | + # The "array" and "map" fields have custom unmarshaling. Modify the swagger to reflect this. + .definitions.v1alpha1ApplicationSourcePluginParameter.properties.array = {"description":"Array is the value of an array type parameter.","type":"array","items":{"type":"string"}} | + del(.definitions.v1alpha1OptionalArray) | + .definitions.v1alpha1ApplicationSourcePluginParameter.properties.map = {"description":"Map is the value of a map type parameter.","type":"object","additionalProperties":{"type":"string"}} | + del(.definitions.v1alpha1OptionalMap) + ' "${COMBINED_SWAGGER}" > "${SWAGGER_OUT}" /bin/rm "${PRIMARY_SWAGGER}" "${COMBINED_SWAGGER}" } @@ -128,3 +134,4 @@ clean_swagger server clean_swagger reposerver clean_swagger controller clean_swagger cmpserver + diff --git a/pkg/apis/api-rules/violation_exceptions.list b/pkg/apis/api-rules/violation_exceptions.list index 59844ecad0295..43dd3de01b1d7 100644 --- a/pkg/apis/api-rules/violation_exceptions.list +++ b/pkg/apis/api-rules/violation_exceptions.list @@ -21,7 +21,6 @@ API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/ap API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSourceJsonnet,ExtVars API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSourceJsonnet,Libs API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSourceJsonnet,TLAs -API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSourcePluginParameter,Array API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSpec,IgnoreDifferences API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationSpec,Info API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,ApplicationStatus,Conditions @@ -48,6 +47,7 @@ API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/ap API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,MergeGenerator,MergeKeys API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,NestedMergeGenerator,MergeKeys API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,Operation,Info +API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,OptionalArray,Array API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,OrphanedResourcesMonitorSettings,Ignore API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,OverrideIgnoreDiff,JQPathExpressions API rule violation: list_type_missing,github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1,OverrideIgnoreDiff,JSONPointers diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index 3d68e6b1f541a..f08f917130575 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -2306,10 +2306,66 @@ func (m *OperationState) XXX_DiscardUnknown() { var xxx_messageInfo_OperationState proto.InternalMessageInfo +func (m *OptionalArray) Reset() { *m = OptionalArray{} } +func (*OptionalArray) ProtoMessage() {} +func (*OptionalArray) Descriptor() ([]byte, []int) { + return fileDescriptor_030104ce3b95bcac, []int{81} +} +func (m *OptionalArray) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OptionalArray) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *OptionalArray) XXX_Merge(src proto.Message) { + xxx_messageInfo_OptionalArray.Merge(m, src) +} +func (m *OptionalArray) XXX_Size() int { + return m.Size() +} +func (m *OptionalArray) XXX_DiscardUnknown() { + xxx_messageInfo_OptionalArray.DiscardUnknown(m) +} + +var xxx_messageInfo_OptionalArray proto.InternalMessageInfo + +func (m *OptionalMap) Reset() { *m = OptionalMap{} } +func (*OptionalMap) ProtoMessage() {} +func (*OptionalMap) Descriptor() ([]byte, []int) { + return fileDescriptor_030104ce3b95bcac, []int{82} +} +func (m *OptionalMap) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OptionalMap) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *OptionalMap) XXX_Merge(src proto.Message) { + xxx_messageInfo_OptionalMap.Merge(m, src) +} +func (m *OptionalMap) XXX_Size() int { + return m.Size() +} +func (m *OptionalMap) XXX_DiscardUnknown() { + xxx_messageInfo_OptionalMap.DiscardUnknown(m) +} + +var xxx_messageInfo_OptionalMap proto.InternalMessageInfo + func (m *OrphanedResourceKey) Reset() { *m = OrphanedResourceKey{} } func (*OrphanedResourceKey) ProtoMessage() {} func (*OrphanedResourceKey) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{81} + return fileDescriptor_030104ce3b95bcac, []int{83} } func (m *OrphanedResourceKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2337,7 +2393,7 @@ var xxx_messageInfo_OrphanedResourceKey proto.InternalMessageInfo func (m *OrphanedResourcesMonitorSettings) Reset() { *m = OrphanedResourcesMonitorSettings{} } func (*OrphanedResourcesMonitorSettings) ProtoMessage() {} func (*OrphanedResourcesMonitorSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{82} + return fileDescriptor_030104ce3b95bcac, []int{84} } func (m *OrphanedResourcesMonitorSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2365,7 +2421,7 @@ var xxx_messageInfo_OrphanedResourcesMonitorSettings proto.InternalMessageInfo func (m *OverrideIgnoreDiff) Reset() { *m = OverrideIgnoreDiff{} } func (*OverrideIgnoreDiff) ProtoMessage() {} func (*OverrideIgnoreDiff) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{83} + return fileDescriptor_030104ce3b95bcac, []int{85} } func (m *OverrideIgnoreDiff) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2393,7 +2449,7 @@ var xxx_messageInfo_OverrideIgnoreDiff proto.InternalMessageInfo func (m *ProjectRole) Reset() { *m = ProjectRole{} } func (*ProjectRole) ProtoMessage() {} func (*ProjectRole) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{84} + return fileDescriptor_030104ce3b95bcac, []int{86} } func (m *ProjectRole) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2421,7 +2477,7 @@ var xxx_messageInfo_ProjectRole proto.InternalMessageInfo func (m *PullRequestGenerator) Reset() { *m = PullRequestGenerator{} } func (*PullRequestGenerator) ProtoMessage() {} func (*PullRequestGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{85} + return fileDescriptor_030104ce3b95bcac, []int{87} } func (m *PullRequestGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2449,7 +2505,7 @@ var xxx_messageInfo_PullRequestGenerator proto.InternalMessageInfo func (m *PullRequestGeneratorBitbucketServer) Reset() { *m = PullRequestGeneratorBitbucketServer{} } func (*PullRequestGeneratorBitbucketServer) ProtoMessage() {} func (*PullRequestGeneratorBitbucketServer) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{86} + return fileDescriptor_030104ce3b95bcac, []int{88} } func (m *PullRequestGeneratorBitbucketServer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2477,7 +2533,7 @@ var xxx_messageInfo_PullRequestGeneratorBitbucketServer proto.InternalMessageInf func (m *PullRequestGeneratorFilter) Reset() { *m = PullRequestGeneratorFilter{} } func (*PullRequestGeneratorFilter) ProtoMessage() {} func (*PullRequestGeneratorFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{87} + return fileDescriptor_030104ce3b95bcac, []int{89} } func (m *PullRequestGeneratorFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2505,7 +2561,7 @@ var xxx_messageInfo_PullRequestGeneratorFilter proto.InternalMessageInfo func (m *PullRequestGeneratorGitLab) Reset() { *m = PullRequestGeneratorGitLab{} } func (*PullRequestGeneratorGitLab) ProtoMessage() {} func (*PullRequestGeneratorGitLab) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{88} + return fileDescriptor_030104ce3b95bcac, []int{90} } func (m *PullRequestGeneratorGitLab) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2533,7 +2589,7 @@ var xxx_messageInfo_PullRequestGeneratorGitLab proto.InternalMessageInfo func (m *PullRequestGeneratorGitea) Reset() { *m = PullRequestGeneratorGitea{} } func (*PullRequestGeneratorGitea) ProtoMessage() {} func (*PullRequestGeneratorGitea) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{89} + return fileDescriptor_030104ce3b95bcac, []int{91} } func (m *PullRequestGeneratorGitea) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2561,7 +2617,7 @@ var xxx_messageInfo_PullRequestGeneratorGitea proto.InternalMessageInfo func (m *PullRequestGeneratorGithub) Reset() { *m = PullRequestGeneratorGithub{} } func (*PullRequestGeneratorGithub) ProtoMessage() {} func (*PullRequestGeneratorGithub) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{90} + return fileDescriptor_030104ce3b95bcac, []int{92} } func (m *PullRequestGeneratorGithub) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2589,7 +2645,7 @@ var xxx_messageInfo_PullRequestGeneratorGithub proto.InternalMessageInfo func (m *RefTarget) Reset() { *m = RefTarget{} } func (*RefTarget) ProtoMessage() {} func (*RefTarget) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{91} + return fileDescriptor_030104ce3b95bcac, []int{93} } func (m *RefTarget) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2617,7 +2673,7 @@ var xxx_messageInfo_RefTarget proto.InternalMessageInfo func (m *RepoCreds) Reset() { *m = RepoCreds{} } func (*RepoCreds) ProtoMessage() {} func (*RepoCreds) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{92} + return fileDescriptor_030104ce3b95bcac, []int{94} } func (m *RepoCreds) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2645,7 +2701,7 @@ var xxx_messageInfo_RepoCreds proto.InternalMessageInfo func (m *RepoCredsList) Reset() { *m = RepoCredsList{} } func (*RepoCredsList) ProtoMessage() {} func (*RepoCredsList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{93} + return fileDescriptor_030104ce3b95bcac, []int{95} } func (m *RepoCredsList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2673,7 +2729,7 @@ var xxx_messageInfo_RepoCredsList proto.InternalMessageInfo func (m *Repository) Reset() { *m = Repository{} } func (*Repository) ProtoMessage() {} func (*Repository) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{94} + return fileDescriptor_030104ce3b95bcac, []int{96} } func (m *Repository) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2701,7 +2757,7 @@ var xxx_messageInfo_Repository proto.InternalMessageInfo func (m *RepositoryCertificate) Reset() { *m = RepositoryCertificate{} } func (*RepositoryCertificate) ProtoMessage() {} func (*RepositoryCertificate) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{95} + return fileDescriptor_030104ce3b95bcac, []int{97} } func (m *RepositoryCertificate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2729,7 +2785,7 @@ var xxx_messageInfo_RepositoryCertificate proto.InternalMessageInfo func (m *RepositoryCertificateList) Reset() { *m = RepositoryCertificateList{} } func (*RepositoryCertificateList) ProtoMessage() {} func (*RepositoryCertificateList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{96} + return fileDescriptor_030104ce3b95bcac, []int{98} } func (m *RepositoryCertificateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2757,7 +2813,7 @@ var xxx_messageInfo_RepositoryCertificateList proto.InternalMessageInfo func (m *RepositoryList) Reset() { *m = RepositoryList{} } func (*RepositoryList) ProtoMessage() {} func (*RepositoryList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{97} + return fileDescriptor_030104ce3b95bcac, []int{99} } func (m *RepositoryList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2785,7 +2841,7 @@ var xxx_messageInfo_RepositoryList proto.InternalMessageInfo func (m *ResourceAction) Reset() { *m = ResourceAction{} } func (*ResourceAction) ProtoMessage() {} func (*ResourceAction) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{98} + return fileDescriptor_030104ce3b95bcac, []int{100} } func (m *ResourceAction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2813,7 +2869,7 @@ var xxx_messageInfo_ResourceAction proto.InternalMessageInfo func (m *ResourceActionDefinition) Reset() { *m = ResourceActionDefinition{} } func (*ResourceActionDefinition) ProtoMessage() {} func (*ResourceActionDefinition) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{99} + return fileDescriptor_030104ce3b95bcac, []int{101} } func (m *ResourceActionDefinition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2841,7 +2897,7 @@ var xxx_messageInfo_ResourceActionDefinition proto.InternalMessageInfo func (m *ResourceActionParam) Reset() { *m = ResourceActionParam{} } func (*ResourceActionParam) ProtoMessage() {} func (*ResourceActionParam) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{100} + return fileDescriptor_030104ce3b95bcac, []int{102} } func (m *ResourceActionParam) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2869,7 +2925,7 @@ var xxx_messageInfo_ResourceActionParam proto.InternalMessageInfo func (m *ResourceActions) Reset() { *m = ResourceActions{} } func (*ResourceActions) ProtoMessage() {} func (*ResourceActions) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{101} + return fileDescriptor_030104ce3b95bcac, []int{103} } func (m *ResourceActions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2897,7 +2953,7 @@ var xxx_messageInfo_ResourceActions proto.InternalMessageInfo func (m *ResourceDiff) Reset() { *m = ResourceDiff{} } func (*ResourceDiff) ProtoMessage() {} func (*ResourceDiff) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{102} + return fileDescriptor_030104ce3b95bcac, []int{104} } func (m *ResourceDiff) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2925,7 +2981,7 @@ var xxx_messageInfo_ResourceDiff proto.InternalMessageInfo func (m *ResourceIgnoreDifferences) Reset() { *m = ResourceIgnoreDifferences{} } func (*ResourceIgnoreDifferences) ProtoMessage() {} func (*ResourceIgnoreDifferences) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{103} + return fileDescriptor_030104ce3b95bcac, []int{105} } func (m *ResourceIgnoreDifferences) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2953,7 +3009,7 @@ var xxx_messageInfo_ResourceIgnoreDifferences proto.InternalMessageInfo func (m *ResourceNetworkingInfo) Reset() { *m = ResourceNetworkingInfo{} } func (*ResourceNetworkingInfo) ProtoMessage() {} func (*ResourceNetworkingInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{104} + return fileDescriptor_030104ce3b95bcac, []int{106} } func (m *ResourceNetworkingInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2981,7 +3037,7 @@ var xxx_messageInfo_ResourceNetworkingInfo proto.InternalMessageInfo func (m *ResourceNode) Reset() { *m = ResourceNode{} } func (*ResourceNode) ProtoMessage() {} func (*ResourceNode) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{105} + return fileDescriptor_030104ce3b95bcac, []int{107} } func (m *ResourceNode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3009,7 +3065,7 @@ var xxx_messageInfo_ResourceNode proto.InternalMessageInfo func (m *ResourceOverride) Reset() { *m = ResourceOverride{} } func (*ResourceOverride) ProtoMessage() {} func (*ResourceOverride) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{106} + return fileDescriptor_030104ce3b95bcac, []int{108} } func (m *ResourceOverride) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3037,7 +3093,7 @@ var xxx_messageInfo_ResourceOverride proto.InternalMessageInfo func (m *ResourceRef) Reset() { *m = ResourceRef{} } func (*ResourceRef) ProtoMessage() {} func (*ResourceRef) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{107} + return fileDescriptor_030104ce3b95bcac, []int{109} } func (m *ResourceRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3065,7 +3121,7 @@ var xxx_messageInfo_ResourceRef proto.InternalMessageInfo func (m *ResourceResult) Reset() { *m = ResourceResult{} } func (*ResourceResult) ProtoMessage() {} func (*ResourceResult) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{108} + return fileDescriptor_030104ce3b95bcac, []int{110} } func (m *ResourceResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3093,7 +3149,7 @@ var xxx_messageInfo_ResourceResult proto.InternalMessageInfo func (m *ResourceStatus) Reset() { *m = ResourceStatus{} } func (*ResourceStatus) ProtoMessage() {} func (*ResourceStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{109} + return fileDescriptor_030104ce3b95bcac, []int{111} } func (m *ResourceStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3121,7 +3177,7 @@ var xxx_messageInfo_ResourceStatus proto.InternalMessageInfo func (m *RetryStrategy) Reset() { *m = RetryStrategy{} } func (*RetryStrategy) ProtoMessage() {} func (*RetryStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{110} + return fileDescriptor_030104ce3b95bcac, []int{112} } func (m *RetryStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3149,7 +3205,7 @@ var xxx_messageInfo_RetryStrategy proto.InternalMessageInfo func (m *RevisionHistory) Reset() { *m = RevisionHistory{} } func (*RevisionHistory) ProtoMessage() {} func (*RevisionHistory) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{111} + return fileDescriptor_030104ce3b95bcac, []int{113} } func (m *RevisionHistory) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3177,7 +3233,7 @@ var xxx_messageInfo_RevisionHistory proto.InternalMessageInfo func (m *RevisionMetadata) Reset() { *m = RevisionMetadata{} } func (*RevisionMetadata) ProtoMessage() {} func (*RevisionMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{112} + return fileDescriptor_030104ce3b95bcac, []int{114} } func (m *RevisionMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3205,7 +3261,7 @@ var xxx_messageInfo_RevisionMetadata proto.InternalMessageInfo func (m *SCMProviderGenerator) Reset() { *m = SCMProviderGenerator{} } func (*SCMProviderGenerator) ProtoMessage() {} func (*SCMProviderGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{113} + return fileDescriptor_030104ce3b95bcac, []int{115} } func (m *SCMProviderGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3233,7 +3289,7 @@ var xxx_messageInfo_SCMProviderGenerator proto.InternalMessageInfo func (m *SCMProviderGeneratorAzureDevOps) Reset() { *m = SCMProviderGeneratorAzureDevOps{} } func (*SCMProviderGeneratorAzureDevOps) ProtoMessage() {} func (*SCMProviderGeneratorAzureDevOps) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{114} + return fileDescriptor_030104ce3b95bcac, []int{116} } func (m *SCMProviderGeneratorAzureDevOps) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3261,7 +3317,7 @@ var xxx_messageInfo_SCMProviderGeneratorAzureDevOps proto.InternalMessageInfo func (m *SCMProviderGeneratorBitbucket) Reset() { *m = SCMProviderGeneratorBitbucket{} } func (*SCMProviderGeneratorBitbucket) ProtoMessage() {} func (*SCMProviderGeneratorBitbucket) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{115} + return fileDescriptor_030104ce3b95bcac, []int{117} } func (m *SCMProviderGeneratorBitbucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3289,7 +3345,7 @@ var xxx_messageInfo_SCMProviderGeneratorBitbucket proto.InternalMessageInfo func (m *SCMProviderGeneratorBitbucketServer) Reset() { *m = SCMProviderGeneratorBitbucketServer{} } func (*SCMProviderGeneratorBitbucketServer) ProtoMessage() {} func (*SCMProviderGeneratorBitbucketServer) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{116} + return fileDescriptor_030104ce3b95bcac, []int{118} } func (m *SCMProviderGeneratorBitbucketServer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3317,7 +3373,7 @@ var xxx_messageInfo_SCMProviderGeneratorBitbucketServer proto.InternalMessageInf func (m *SCMProviderGeneratorFilter) Reset() { *m = SCMProviderGeneratorFilter{} } func (*SCMProviderGeneratorFilter) ProtoMessage() {} func (*SCMProviderGeneratorFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{117} + return fileDescriptor_030104ce3b95bcac, []int{119} } func (m *SCMProviderGeneratorFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3345,7 +3401,7 @@ var xxx_messageInfo_SCMProviderGeneratorFilter proto.InternalMessageInfo func (m *SCMProviderGeneratorGitea) Reset() { *m = SCMProviderGeneratorGitea{} } func (*SCMProviderGeneratorGitea) ProtoMessage() {} func (*SCMProviderGeneratorGitea) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{118} + return fileDescriptor_030104ce3b95bcac, []int{120} } func (m *SCMProviderGeneratorGitea) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3373,7 +3429,7 @@ var xxx_messageInfo_SCMProviderGeneratorGitea proto.InternalMessageInfo func (m *SCMProviderGeneratorGithub) Reset() { *m = SCMProviderGeneratorGithub{} } func (*SCMProviderGeneratorGithub) ProtoMessage() {} func (*SCMProviderGeneratorGithub) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{119} + return fileDescriptor_030104ce3b95bcac, []int{121} } func (m *SCMProviderGeneratorGithub) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3401,7 +3457,7 @@ var xxx_messageInfo_SCMProviderGeneratorGithub proto.InternalMessageInfo func (m *SCMProviderGeneratorGitlab) Reset() { *m = SCMProviderGeneratorGitlab{} } func (*SCMProviderGeneratorGitlab) ProtoMessage() {} func (*SCMProviderGeneratorGitlab) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{120} + return fileDescriptor_030104ce3b95bcac, []int{122} } func (m *SCMProviderGeneratorGitlab) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3429,7 +3485,7 @@ var xxx_messageInfo_SCMProviderGeneratorGitlab proto.InternalMessageInfo func (m *SecretRef) Reset() { *m = SecretRef{} } func (*SecretRef) ProtoMessage() {} func (*SecretRef) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{121} + return fileDescriptor_030104ce3b95bcac, []int{123} } func (m *SecretRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3457,7 +3513,7 @@ var xxx_messageInfo_SecretRef proto.InternalMessageInfo func (m *SignatureKey) Reset() { *m = SignatureKey{} } func (*SignatureKey) ProtoMessage() {} func (*SignatureKey) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{122} + return fileDescriptor_030104ce3b95bcac, []int{124} } func (m *SignatureKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3485,7 +3541,7 @@ var xxx_messageInfo_SignatureKey proto.InternalMessageInfo func (m *SyncOperation) Reset() { *m = SyncOperation{} } func (*SyncOperation) ProtoMessage() {} func (*SyncOperation) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{123} + return fileDescriptor_030104ce3b95bcac, []int{125} } func (m *SyncOperation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3513,7 +3569,7 @@ var xxx_messageInfo_SyncOperation proto.InternalMessageInfo func (m *SyncOperationResource) Reset() { *m = SyncOperationResource{} } func (*SyncOperationResource) ProtoMessage() {} func (*SyncOperationResource) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{124} + return fileDescriptor_030104ce3b95bcac, []int{126} } func (m *SyncOperationResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3541,7 +3597,7 @@ var xxx_messageInfo_SyncOperationResource proto.InternalMessageInfo func (m *SyncOperationResult) Reset() { *m = SyncOperationResult{} } func (*SyncOperationResult) ProtoMessage() {} func (*SyncOperationResult) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{125} + return fileDescriptor_030104ce3b95bcac, []int{127} } func (m *SyncOperationResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3569,7 +3625,7 @@ var xxx_messageInfo_SyncOperationResult proto.InternalMessageInfo func (m *SyncPolicy) Reset() { *m = SyncPolicy{} } func (*SyncPolicy) ProtoMessage() {} func (*SyncPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{126} + return fileDescriptor_030104ce3b95bcac, []int{128} } func (m *SyncPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3597,7 +3653,7 @@ var xxx_messageInfo_SyncPolicy proto.InternalMessageInfo func (m *SyncPolicyAutomated) Reset() { *m = SyncPolicyAutomated{} } func (*SyncPolicyAutomated) ProtoMessage() {} func (*SyncPolicyAutomated) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{127} + return fileDescriptor_030104ce3b95bcac, []int{129} } func (m *SyncPolicyAutomated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3625,7 +3681,7 @@ var xxx_messageInfo_SyncPolicyAutomated proto.InternalMessageInfo func (m *SyncStatus) Reset() { *m = SyncStatus{} } func (*SyncStatus) ProtoMessage() {} func (*SyncStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{128} + return fileDescriptor_030104ce3b95bcac, []int{130} } func (m *SyncStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3653,7 +3709,7 @@ var xxx_messageInfo_SyncStatus proto.InternalMessageInfo func (m *SyncStrategy) Reset() { *m = SyncStrategy{} } func (*SyncStrategy) ProtoMessage() {} func (*SyncStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{129} + return fileDescriptor_030104ce3b95bcac, []int{131} } func (m *SyncStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3681,7 +3737,7 @@ var xxx_messageInfo_SyncStrategy proto.InternalMessageInfo func (m *SyncStrategyApply) Reset() { *m = SyncStrategyApply{} } func (*SyncStrategyApply) ProtoMessage() {} func (*SyncStrategyApply) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{130} + return fileDescriptor_030104ce3b95bcac, []int{132} } func (m *SyncStrategyApply) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3709,7 +3765,7 @@ var xxx_messageInfo_SyncStrategyApply proto.InternalMessageInfo func (m *SyncStrategyHook) Reset() { *m = SyncStrategyHook{} } func (*SyncStrategyHook) ProtoMessage() {} func (*SyncStrategyHook) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{131} + return fileDescriptor_030104ce3b95bcac, []int{133} } func (m *SyncStrategyHook) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3737,7 +3793,7 @@ var xxx_messageInfo_SyncStrategyHook proto.InternalMessageInfo func (m *SyncWindow) Reset() { *m = SyncWindow{} } func (*SyncWindow) ProtoMessage() {} func (*SyncWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{132} + return fileDescriptor_030104ce3b95bcac, []int{134} } func (m *SyncWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3765,7 +3821,7 @@ var xxx_messageInfo_SyncWindow proto.InternalMessageInfo func (m *TLSClientConfig) Reset() { *m = TLSClientConfig{} } func (*TLSClientConfig) ProtoMessage() {} func (*TLSClientConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{133} + return fileDescriptor_030104ce3b95bcac, []int{135} } func (m *TLSClientConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3829,7 +3885,6 @@ func init() { proto.RegisterMapType((map[string]string)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSourceKustomize.CommonLabelsEntry") proto.RegisterType((*ApplicationSourcePlugin)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSourcePlugin") proto.RegisterType((*ApplicationSourcePluginParameter)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSourcePluginParameter") - proto.RegisterMapType((map[string]string)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSourcePluginParameter.MapEntry") proto.RegisterType((*ApplicationSpec)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSpec") proto.RegisterType((*ApplicationStatus)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationStatus") proto.RegisterType((*ApplicationSummary)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ApplicationSummary") @@ -3885,6 +3940,9 @@ func init() { proto.RegisterType((*Operation)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.Operation") proto.RegisterType((*OperationInitiator)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.OperationInitiator") proto.RegisterType((*OperationState)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.OperationState") + proto.RegisterType((*OptionalArray)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.OptionalArray") + proto.RegisterType((*OptionalMap)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.OptionalMap") + proto.RegisterMapType((map[string]string)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.OptionalMap.MapEntry") proto.RegisterType((*OrphanedResourceKey)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.OrphanedResourceKey") proto.RegisterType((*OrphanedResourcesMonitorSettings)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.OrphanedResourcesMonitorSettings") proto.RegisterType((*OverrideIgnoreDiff)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.OverrideIgnoreDiff") @@ -3947,614 +4005,617 @@ func init() { } var fileDescriptor_030104ce3b95bcac = []byte{ - // 9707 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x24, 0xc7, - 0x75, 0x18, 0x67, 0x17, 0x0b, 0xec, 0x3e, 0x7c, 0xdc, 0xa1, 0xef, 0x8e, 0x04, 0x8f, 0xe4, 0xe1, - 0x6a, 0x58, 0xa6, 0xa8, 0x88, 0x04, 0xc2, 0x13, 0xa5, 0x30, 0xa6, 0x4d, 0x19, 0x0b, 0xdc, 0xe1, - 0x70, 0x07, 0x1c, 0xc0, 0x06, 0xee, 0x4e, 0x22, 0x4d, 0x49, 0x83, 0xd9, 0xde, 0xc5, 0x1c, 0x76, - 0x67, 0x86, 0x33, 0xb3, 0x38, 0x2c, 0x2d, 0xcb, 0x92, 0x2c, 0xd9, 0x4a, 0xf4, 0x41, 0x85, 0xfe, - 0x61, 0xb9, 0x92, 0x38, 0x8c, 0xed, 0x72, 0xc5, 0x95, 0xb0, 0xe2, 0x54, 0x7e, 0xe4, 0xab, 0x52, - 0x15, 0xdb, 0xf9, 0xc1, 0x94, 0x52, 0x15, 0x55, 0xc5, 0x65, 0x39, 0xb1, 0x03, 0x53, 0x97, 0x4a, - 0x25, 0x95, 0xaa, 0xb8, 0x2a, 0x1f, 0x7f, 0x72, 0xe5, 0x1f, 0xae, 0xfe, 0xee, 0x99, 0xdd, 0x3d, - 0x2c, 0x80, 0xc1, 0xdd, 0x49, 0xc5, 0x7f, 0xbb, 0xfd, 0xde, 0xbc, 0xd7, 0xd3, 0xd3, 0xfd, 0xfa, - 0xbd, 0x7e, 0x1f, 0x0d, 0xcb, 0x0d, 0x2f, 0xd9, 0x6a, 0x6f, 0xce, 0xb8, 0x41, 0x6b, 0xd6, 0x89, - 0x1a, 0x41, 0x18, 0x05, 0xb7, 0xd8, 0x8f, 0xe7, 0xdd, 0xda, 0xec, 0xce, 0x85, 0xd9, 0x70, 0xbb, - 0x31, 0xeb, 0x84, 0x5e, 0x3c, 0xeb, 0x84, 0x61, 0xd3, 0x73, 0x9d, 0xc4, 0x0b, 0xfc, 0xd9, 0x9d, - 0x17, 0x9c, 0x66, 0xb8, 0xe5, 0xbc, 0x30, 0xdb, 0x20, 0x3e, 0x89, 0x9c, 0x84, 0xd4, 0x66, 0xc2, - 0x28, 0x48, 0x02, 0xf4, 0x53, 0x9a, 0xda, 0x8c, 0xa4, 0xc6, 0x7e, 0x7c, 0xce, 0xad, 0xcd, 0xec, - 0x5c, 0x98, 0x09, 0xb7, 0x1b, 0x33, 0x94, 0xda, 0x8c, 0x41, 0x6d, 0x46, 0x52, 0x3b, 0xfb, 0xbc, - 0xd1, 0x97, 0x46, 0xd0, 0x08, 0x66, 0x19, 0xd1, 0xcd, 0x76, 0x9d, 0xfd, 0x63, 0x7f, 0xd8, 0x2f, - 0xce, 0xec, 0xac, 0xbd, 0xfd, 0x52, 0x3c, 0xe3, 0x05, 0xb4, 0x7b, 0xb3, 0x6e, 0x10, 0x91, 0xd9, - 0x9d, 0xae, 0x0e, 0x9d, 0xbd, 0xac, 0x71, 0xc8, 0x6e, 0x42, 0xfc, 0xd8, 0x0b, 0xfc, 0xf8, 0x79, - 0xda, 0x05, 0x12, 0xed, 0x90, 0xc8, 0x7c, 0x3d, 0x03, 0xa1, 0x17, 0xa5, 0x17, 0x35, 0xa5, 0x96, - 0xe3, 0x6e, 0x79, 0x3e, 0x89, 0x3a, 0xfa, 0xf1, 0x16, 0x49, 0x9c, 0x5e, 0x4f, 0xcd, 0xf6, 0x7b, - 0x2a, 0x6a, 0xfb, 0x89, 0xd7, 0x22, 0x5d, 0x0f, 0x7c, 0x72, 0xbf, 0x07, 0x62, 0x77, 0x8b, 0xb4, - 0x9c, 0xae, 0xe7, 0x3e, 0xde, 0xef, 0xb9, 0x76, 0xe2, 0x35, 0x67, 0x3d, 0x3f, 0x89, 0x93, 0x28, - 0xfb, 0x90, 0xfd, 0x26, 0x8c, 0xcf, 0xdd, 0x5c, 0x9f, 0x6b, 0x27, 0x5b, 0xf3, 0x81, 0x5f, 0xf7, - 0x1a, 0xe8, 0x13, 0x30, 0xea, 0x36, 0xdb, 0x71, 0x42, 0xa2, 0x6b, 0x4e, 0x8b, 0x4c, 0x59, 0xe7, - 0xad, 0x67, 0x2b, 0xd5, 0x53, 0xef, 0xef, 0x4d, 0x3f, 0x72, 0x67, 0x6f, 0x7a, 0x74, 0x5e, 0x83, - 0xb0, 0x89, 0x87, 0x3e, 0x0a, 0x23, 0x51, 0xd0, 0x24, 0x73, 0xf8, 0xda, 0x54, 0x81, 0x3d, 0x72, - 0x42, 0x3c, 0x32, 0x82, 0x79, 0x33, 0x96, 0x70, 0xfb, 0x8f, 0x0a, 0x00, 0x73, 0x61, 0xb8, 0x16, - 0x05, 0xb7, 0x88, 0x9b, 0xa0, 0xcf, 0x43, 0x99, 0x0e, 0x5d, 0xcd, 0x49, 0x1c, 0xc6, 0x6d, 0xf4, - 0xc2, 0x5f, 0x9d, 0xe1, 0x6f, 0x32, 0x63, 0xbe, 0x89, 0x9e, 0x38, 0x14, 0x7b, 0x66, 0xe7, 0x85, - 0x99, 0xd5, 0x4d, 0xfa, 0xfc, 0x0a, 0x49, 0x9c, 0x2a, 0x12, 0xcc, 0x40, 0xb7, 0x61, 0x45, 0x15, - 0xf9, 0x30, 0x14, 0x87, 0xc4, 0x65, 0x1d, 0x1b, 0xbd, 0xb0, 0x3c, 0x73, 0x94, 0x19, 0x3a, 0xa3, - 0x7b, 0xbe, 0x1e, 0x12, 0xb7, 0x3a, 0x26, 0x38, 0x0f, 0xd1, 0x7f, 0x98, 0xf1, 0x41, 0x3b, 0x30, - 0x1c, 0x27, 0x4e, 0xd2, 0x8e, 0xa7, 0x8a, 0x8c, 0xe3, 0xb5, 0xdc, 0x38, 0x32, 0xaa, 0xd5, 0x09, - 0xc1, 0x73, 0x98, 0xff, 0xc7, 0x82, 0x9b, 0xfd, 0x5f, 0x2c, 0x98, 0xd0, 0xc8, 0xcb, 0x5e, 0x9c, - 0xa0, 0x9f, 0xed, 0x1a, 0xdc, 0x99, 0xc1, 0x06, 0x97, 0x3e, 0xcd, 0x86, 0xf6, 0xa4, 0x60, 0x56, - 0x96, 0x2d, 0xc6, 0xc0, 0xb6, 0xa0, 0xe4, 0x25, 0xa4, 0x15, 0x4f, 0x15, 0xce, 0x17, 0x9f, 0x1d, - 0xbd, 0x70, 0x39, 0xaf, 0xf7, 0xac, 0x8e, 0x0b, 0xa6, 0xa5, 0x25, 0x4a, 0x1e, 0x73, 0x2e, 0xf6, - 0xef, 0x8c, 0x99, 0xef, 0x47, 0x07, 0x1c, 0xbd, 0x00, 0xa3, 0x71, 0xd0, 0x8e, 0x5c, 0x82, 0x49, - 0x18, 0xc4, 0x53, 0xd6, 0xf9, 0x22, 0x9d, 0x7a, 0x74, 0xa6, 0xae, 0xeb, 0x66, 0x6c, 0xe2, 0xa0, - 0x6f, 0x5b, 0x30, 0x56, 0x23, 0x71, 0xe2, 0xf9, 0x8c, 0xbf, 0xec, 0xfc, 0xc6, 0x91, 0x3b, 0x2f, - 0x1b, 0x17, 0x34, 0xf1, 0xea, 0x69, 0xf1, 0x22, 0x63, 0x46, 0x63, 0x8c, 0x53, 0xfc, 0xe9, 0x8a, - 0xab, 0x91, 0xd8, 0x8d, 0xbc, 0x90, 0xfe, 0x67, 0x73, 0xc6, 0x58, 0x71, 0x0b, 0x1a, 0x84, 0x4d, - 0x3c, 0xe4, 0x43, 0x89, 0xae, 0xa8, 0x78, 0x6a, 0x88, 0xf5, 0x7f, 0xe9, 0x68, 0xfd, 0x17, 0x83, - 0x4a, 0x17, 0xab, 0x1e, 0x7d, 0xfa, 0x2f, 0xc6, 0x9c, 0x0d, 0xfa, 0x96, 0x05, 0x53, 0x62, 0xc5, - 0x63, 0xc2, 0x07, 0xf4, 0xe6, 0x96, 0x97, 0x90, 0xa6, 0x17, 0x27, 0x53, 0x25, 0xd6, 0x87, 0xd9, - 0xc1, 0xe6, 0xd6, 0x62, 0x14, 0xb4, 0xc3, 0xab, 0x9e, 0x5f, 0xab, 0x9e, 0x17, 0x9c, 0xa6, 0xe6, - 0xfb, 0x10, 0xc6, 0x7d, 0x59, 0xa2, 0x5f, 0xb1, 0xe0, 0xac, 0xef, 0xb4, 0x48, 0x1c, 0x3a, 0xf4, - 0xd3, 0x72, 0x70, 0xb5, 0xe9, 0xb8, 0xdb, 0xac, 0x47, 0xc3, 0x87, 0xeb, 0x91, 0x2d, 0x7a, 0x74, - 0xf6, 0x5a, 0x5f, 0xd2, 0xf8, 0x1e, 0x6c, 0xd1, 0x6f, 0x5a, 0x30, 0x19, 0x44, 0xe1, 0x96, 0xe3, - 0x93, 0x9a, 0x84, 0xc6, 0x53, 0x23, 0x6c, 0xe9, 0x7d, 0xf6, 0x68, 0x9f, 0x68, 0x35, 0x4b, 0x76, - 0x25, 0xf0, 0xbd, 0x24, 0x88, 0xd6, 0x49, 0x92, 0x78, 0x7e, 0x23, 0xae, 0x9e, 0xb9, 0xb3, 0x37, - 0x3d, 0xd9, 0x85, 0x85, 0xbb, 0xfb, 0x83, 0x7e, 0x0e, 0x46, 0xe3, 0x8e, 0xef, 0xde, 0xf4, 0xfc, - 0x5a, 0x70, 0x3b, 0x9e, 0x2a, 0xe7, 0xb1, 0x7c, 0xd7, 0x15, 0x41, 0xb1, 0x00, 0x35, 0x03, 0x6c, - 0x72, 0xeb, 0xfd, 0xe1, 0xf4, 0x54, 0xaa, 0xe4, 0xfd, 0xe1, 0xf4, 0x64, 0xba, 0x07, 0x5b, 0xf4, - 0xcb, 0x16, 0x8c, 0xc7, 0x5e, 0xc3, 0x77, 0x92, 0x76, 0x44, 0xae, 0x92, 0x4e, 0x3c, 0x05, 0xac, - 0x23, 0x57, 0x8e, 0x38, 0x2a, 0x06, 0xc9, 0xea, 0x19, 0xd1, 0xc7, 0x71, 0xb3, 0x35, 0xc6, 0x69, - 0xbe, 0xbd, 0x16, 0x9a, 0x9e, 0xd6, 0xa3, 0xf9, 0x2e, 0x34, 0x3d, 0xa9, 0xfb, 0xb2, 0x44, 0x3f, - 0x03, 0x27, 0x79, 0x93, 0x1a, 0xd9, 0x78, 0x6a, 0x8c, 0x09, 0xda, 0xd3, 0x77, 0xf6, 0xa6, 0x4f, - 0xae, 0x67, 0x60, 0xb8, 0x0b, 0x1b, 0xbd, 0x09, 0xd3, 0x21, 0x89, 0x5a, 0x5e, 0xb2, 0xea, 0x37, - 0x3b, 0x52, 0x7c, 0xbb, 0x41, 0x48, 0x6a, 0xa2, 0x3b, 0xf1, 0xd4, 0xf8, 0x79, 0xeb, 0xd9, 0x72, - 0xf5, 0x23, 0xa2, 0x9b, 0xd3, 0x6b, 0xf7, 0x46, 0xc7, 0xfb, 0xd1, 0xb3, 0xff, 0x5d, 0x01, 0x4e, - 0x66, 0x37, 0x4e, 0xf4, 0xdb, 0x16, 0x9c, 0xb8, 0x75, 0x3b, 0xd9, 0x08, 0xb6, 0x89, 0x1f, 0x57, - 0x3b, 0x54, 0xbc, 0xb1, 0x2d, 0x63, 0xf4, 0x82, 0x9b, 0xef, 0x16, 0x3d, 0x73, 0x25, 0xcd, 0xe5, - 0xa2, 0x9f, 0x44, 0x9d, 0xea, 0x63, 0xe2, 0xed, 0x4e, 0x5c, 0xb9, 0xb9, 0x61, 0x42, 0x71, 0xb6, - 0x53, 0x67, 0xbf, 0x61, 0xc1, 0xe9, 0x5e, 0x24, 0xd0, 0x49, 0x28, 0x6e, 0x93, 0x0e, 0xd7, 0xca, - 0x30, 0xfd, 0x89, 0xde, 0x80, 0xd2, 0x8e, 0xd3, 0x6c, 0x13, 0xa1, 0xdd, 0x2c, 0x1e, 0xed, 0x45, - 0x54, 0xcf, 0x30, 0xa7, 0xfa, 0x93, 0x85, 0x97, 0x2c, 0xfb, 0x3f, 0x14, 0x61, 0xd4, 0xd8, 0xdf, - 0xee, 0x83, 0xc6, 0x16, 0xa4, 0x34, 0xb6, 0x95, 0xdc, 0xb6, 0xe6, 0xbe, 0x2a, 0xdb, 0xed, 0x8c, - 0xca, 0xb6, 0x9a, 0x1f, 0xcb, 0x7b, 0xea, 0x6c, 0x28, 0x81, 0x4a, 0x10, 0x52, 0x8d, 0x9c, 0x6e, - 0xfd, 0x43, 0x79, 0x7c, 0xc2, 0x55, 0x49, 0xae, 0x3a, 0x7e, 0x67, 0x6f, 0xba, 0xa2, 0xfe, 0x62, - 0xcd, 0xc8, 0xfe, 0x81, 0x05, 0xa7, 0x8d, 0x3e, 0xce, 0x07, 0x7e, 0xcd, 0x63, 0x9f, 0xf6, 0x3c, - 0x0c, 0x25, 0x9d, 0x50, 0xaa, 0xfd, 0x6a, 0xa4, 0x36, 0x3a, 0x21, 0xc1, 0x0c, 0x42, 0x15, 0xfd, - 0x16, 0x89, 0x63, 0xa7, 0x41, 0xb2, 0x8a, 0xfe, 0x0a, 0x6f, 0xc6, 0x12, 0x8e, 0x22, 0x40, 0x4d, - 0x27, 0x4e, 0x36, 0x22, 0xc7, 0x8f, 0x19, 0xf9, 0x0d, 0xaf, 0x45, 0xc4, 0x00, 0xff, 0x95, 0xc1, - 0x66, 0x0c, 0x7d, 0xa2, 0xfa, 0xe8, 0x9d, 0xbd, 0x69, 0xb4, 0xdc, 0x45, 0x09, 0xf7, 0xa0, 0x6e, - 0xff, 0x8a, 0x05, 0x8f, 0xf6, 0xd6, 0xc5, 0xd0, 0x33, 0x30, 0xcc, 0x4d, 0x3e, 0xf1, 0x76, 0xfa, - 0x93, 0xb0, 0x56, 0x2c, 0xa0, 0x68, 0x16, 0x2a, 0x6a, 0x9f, 0x10, 0xef, 0x38, 0x29, 0x50, 0x2b, - 0x7a, 0x73, 0xd1, 0x38, 0x74, 0xd0, 0xe8, 0x1f, 0xa1, 0xb9, 0xa9, 0x41, 0x63, 0x46, 0x12, 0x83, - 0xd8, 0x7f, 0x66, 0xc1, 0x09, 0xa3, 0x57, 0xf7, 0x41, 0x35, 0xf7, 0xd3, 0xaa, 0xf9, 0x52, 0x6e, - 0xf3, 0xb9, 0x8f, 0x6e, 0xfe, 0x2d, 0x0b, 0xce, 0x1a, 0x58, 0x2b, 0x4e, 0xe2, 0x6e, 0x5d, 0xdc, - 0x0d, 0x23, 0x12, 0x53, 0x73, 0x1a, 0x3d, 0x65, 0xc8, 0xad, 0xea, 0xa8, 0xa0, 0x50, 0xbc, 0x4a, - 0x3a, 0x5c, 0x88, 0x3d, 0x07, 0x65, 0x3e, 0x39, 0x83, 0x48, 0x8c, 0xb8, 0x7a, 0xb7, 0x55, 0xd1, - 0x8e, 0x15, 0x06, 0xb2, 0x61, 0x98, 0x09, 0x27, 0xba, 0x58, 0xe9, 0x36, 0x04, 0xf4, 0x23, 0xde, - 0x60, 0x2d, 0x58, 0x40, 0xec, 0xd5, 0x54, 0x77, 0xd6, 0x22, 0xc2, 0x3e, 0x6e, 0xed, 0x92, 0x47, - 0x9a, 0xb5, 0x98, 0x9a, 0x0d, 0x8e, 0xef, 0x07, 0x89, 0xb0, 0x00, 0x0c, 0xb3, 0x61, 0x4e, 0x37, - 0x63, 0x13, 0xc7, 0xbe, 0x53, 0x60, 0xc6, 0x87, 0x5a, 0xd6, 0xe4, 0x7e, 0x58, 0xae, 0x51, 0x4a, - 0x0e, 0xae, 0xe5, 0x27, 0x94, 0x48, 0x7f, 0xeb, 0xf5, 0xad, 0x8c, 0x28, 0xc4, 0xb9, 0x72, 0xbd, - 0xb7, 0x05, 0xfb, 0x7b, 0x05, 0x98, 0x4e, 0x3f, 0xd0, 0x25, 0x49, 0xa9, 0xb9, 0x64, 0x30, 0xca, - 0x1e, 0x50, 0x18, 0xf8, 0xd8, 0xc4, 0xeb, 0x23, 0x8c, 0x0a, 0xc7, 0x29, 0x8c, 0x4c, 0x59, 0x59, - 0xdc, 0x47, 0x56, 0x3e, 0xa3, 0x46, 0x7d, 0x28, 0x23, 0x9c, 0xd2, 0xfb, 0xc5, 0x79, 0x18, 0x8a, - 0x13, 0x12, 0x4e, 0x95, 0xd2, 0xb2, 0x66, 0x3d, 0x21, 0x21, 0x66, 0x10, 0xfb, 0x7f, 0x16, 0xe0, - 0xb1, 0xf4, 0x18, 0x6a, 0xf1, 0xfe, 0xa9, 0x94, 0x78, 0xff, 0x98, 0x29, 0xde, 0xef, 0xee, 0x4d, - 0x3f, 0xd1, 0xe7, 0xb1, 0x1f, 0x19, 0xe9, 0x8f, 0x16, 0x33, 0xa3, 0x38, 0x9b, 0x1e, 0xc5, 0xbb, - 0x7b, 0xd3, 0x4f, 0xf5, 0x79, 0xc7, 0xcc, 0x30, 0x3f, 0x03, 0xc3, 0x11, 0x71, 0xe2, 0xc0, 0x17, - 0x03, 0xad, 0x3e, 0x07, 0x66, 0xad, 0x58, 0x40, 0xed, 0x3f, 0x2b, 0x67, 0x07, 0x7b, 0x91, 0x1f, - 0xb0, 0x05, 0x11, 0xf2, 0x60, 0x88, 0xa9, 0xec, 0x5c, 0x34, 0x5c, 0x3d, 0xda, 0x32, 0xa2, 0x22, - 0x5e, 0x91, 0xae, 0x96, 0xe9, 0x57, 0xa3, 0x4d, 0x98, 0xb1, 0x40, 0xbb, 0x50, 0x76, 0xa5, 0x26, - 0x5d, 0xc8, 0xe3, 0xcc, 0x49, 0xe8, 0xd1, 0x9a, 0xe3, 0x18, 0x95, 0xc5, 0x4a, 0xfd, 0x56, 0xdc, - 0x10, 0x81, 0x62, 0xc3, 0x4b, 0xc4, 0x67, 0x3d, 0xa2, 0xad, 0xb4, 0xe8, 0x19, 0xaf, 0x38, 0x42, - 0x37, 0x88, 0x45, 0x2f, 0xc1, 0x94, 0x3e, 0xfa, 0x9a, 0x05, 0xa3, 0xb1, 0xdb, 0x5a, 0x8b, 0x82, - 0x1d, 0xaf, 0x46, 0x22, 0xa1, 0x29, 0x1d, 0x51, 0x34, 0xad, 0xcf, 0xaf, 0x48, 0x82, 0x9a, 0x2f, - 0xb7, 0x5d, 0x35, 0x04, 0x9b, 0x7c, 0xa9, 0x05, 0xf1, 0x98, 0x78, 0xf7, 0x05, 0xe2, 0x7a, 0x74, - 0x6f, 0x93, 0x06, 0x13, 0x9b, 0x29, 0x47, 0xd6, 0x1c, 0x17, 0xda, 0xee, 0x36, 0x5d, 0x6f, 0xba, - 0x43, 0x4f, 0xdc, 0xd9, 0x9b, 0x7e, 0x6c, 0xbe, 0x37, 0x4f, 0xdc, 0xaf, 0x33, 0x6c, 0xc0, 0xc2, - 0x76, 0xb3, 0x89, 0xc9, 0x9b, 0x6d, 0xc2, 0x8e, 0x43, 0x72, 0x18, 0xb0, 0x35, 0x4d, 0x30, 0x33, - 0x60, 0x06, 0x04, 0x9b, 0x7c, 0xd1, 0x9b, 0x30, 0xdc, 0x72, 0x92, 0xc8, 0xdb, 0x15, 0x67, 0x20, - 0x47, 0xd4, 0xe5, 0x57, 0x18, 0x2d, 0xcd, 0x9c, 0x6d, 0xfd, 0xbc, 0x11, 0x0b, 0x46, 0xa8, 0x05, - 0xa5, 0x16, 0x89, 0x1a, 0x64, 0xaa, 0x9c, 0xc7, 0x79, 0xef, 0x0a, 0x25, 0xa5, 0x19, 0x56, 0xa8, - 0xe6, 0xc3, 0xda, 0x30, 0xe7, 0x82, 0xde, 0x80, 0x72, 0x4c, 0x9a, 0xc4, 0xa5, 0xba, 0x4b, 0x85, - 0x71, 0xfc, 0xf8, 0x80, 0x7a, 0x9c, 0xb3, 0x49, 0x9a, 0xeb, 0xe2, 0x51, 0xbe, 0xc0, 0xe4, 0x3f, - 0xac, 0x48, 0xda, 0xff, 0xcd, 0x02, 0x94, 0x96, 0x30, 0xf7, 0x41, 0x7b, 0x7c, 0x33, 0xad, 0x3d, - 0x2e, 0xe7, 0xa9, 0x02, 0xf4, 0x51, 0x20, 0xdf, 0x2f, 0x43, 0x46, 0x36, 0x5f, 0x23, 0x71, 0x42, - 0x6a, 0x1f, 0xca, 0xd3, 0x0f, 0xe5, 0xe9, 0x87, 0xf2, 0x54, 0xc9, 0xd3, 0xcd, 0x8c, 0x3c, 0x7d, - 0xc5, 0x58, 0xf5, 0xda, 0x7b, 0xf9, 0x39, 0xe5, 0xde, 0x34, 0x7b, 0x60, 0x20, 0x50, 0x49, 0x70, - 0x65, 0x7d, 0xf5, 0x5a, 0x4f, 0x01, 0xfa, 0xb9, 0xb4, 0x00, 0x3d, 0x2a, 0x8b, 0xfb, 0x2e, 0x32, - 0xff, 0x76, 0x01, 0x1e, 0x4f, 0x8b, 0x12, 0x1c, 0x34, 0x9b, 0x41, 0x3b, 0xa1, 0x5a, 0x32, 0xfa, - 0x75, 0x0b, 0x4e, 0xb6, 0xd2, 0xe6, 0x69, 0x2c, 0x4e, 0x01, 0x3f, 0x9d, 0x9b, 0x9c, 0xcb, 0xd8, - 0xbf, 0xd5, 0x29, 0x21, 0xf3, 0x4e, 0x66, 0x00, 0x31, 0xee, 0xea, 0x0b, 0x7a, 0x03, 0x2a, 0x2d, - 0x67, 0xf7, 0x7a, 0x58, 0x73, 0x12, 0x69, 0xa0, 0xf4, 0xb7, 0x2b, 0xdb, 0x89, 0xd7, 0x9c, 0xe1, - 0xbe, 0xdd, 0x99, 0x25, 0x3f, 0x59, 0x8d, 0xd6, 0x93, 0xc8, 0xf3, 0x1b, 0xfc, 0xec, 0x67, 0x45, - 0x92, 0xc1, 0x9a, 0xa2, 0xfd, 0x77, 0xad, 0xac, 0xa0, 0x55, 0xa3, 0x13, 0x39, 0x09, 0x69, 0x74, - 0xd0, 0x17, 0xa0, 0x44, 0x2d, 0x09, 0x39, 0x2a, 0x37, 0xf3, 0x94, 0xfe, 0xc6, 0x97, 0xd0, 0x1b, - 0x01, 0xfd, 0x17, 0x63, 0xce, 0xd4, 0xfe, 0x8b, 0x52, 0x76, 0xc3, 0x63, 0x9e, 0xbe, 0x0b, 0x00, - 0x8d, 0x60, 0x83, 0xb4, 0xc2, 0x26, 0x1d, 0x16, 0x8b, 0x1d, 0x17, 0x2b, 0xe3, 0x79, 0x51, 0x41, - 0xb0, 0x81, 0x85, 0xfe, 0x86, 0x05, 0xd0, 0x90, 0x0b, 0x4b, 0x6e, 0x66, 0xd7, 0xf3, 0x7c, 0x1d, - 0xbd, 0x6c, 0x75, 0x5f, 0x14, 0x43, 0x6c, 0x30, 0x47, 0x5f, 0xb1, 0xa0, 0x9c, 0xc8, 0xee, 0x73, - 0xf1, 0xbe, 0x91, 0x67, 0x4f, 0xe4, 0x4b, 0xeb, 0x7d, 0x5d, 0x0d, 0x89, 0xe2, 0x8b, 0x7e, 0xc9, - 0x02, 0x88, 0x3b, 0xbe, 0xbb, 0x16, 0x34, 0x3d, 0xb7, 0x23, 0xa4, 0xfe, 0x8d, 0x5c, 0x0d, 0x7c, - 0x45, 0xbd, 0x3a, 0x41, 0x47, 0x43, 0xff, 0xc7, 0x06, 0x67, 0xf4, 0x45, 0x28, 0xc7, 0x62, 0xba, - 0x09, 0x39, 0xbf, 0x91, 0xef, 0x31, 0x03, 0xa7, 0x2d, 0x44, 0x84, 0xf8, 0x87, 0x15, 0x4f, 0xf4, - 0xab, 0x16, 0x9c, 0x08, 0xd3, 0x87, 0x42, 0x42, 0xa4, 0xe7, 0x27, 0x03, 0x32, 0x87, 0x4e, 0xd5, - 0x53, 0x77, 0xf6, 0xa6, 0x4f, 0x64, 0x1a, 0x71, 0xb6, 0x17, 0xf6, 0xf7, 0x0a, 0xa9, 0xa3, 0x59, - 0x75, 0x66, 0xc2, 0x26, 0xb3, 0x2b, 0xcd, 0x55, 0xb9, 0x36, 0x73, 0x9d, 0xcc, 0xca, 0x18, 0xd6, - 0x93, 0x59, 0x35, 0xc5, 0xd8, 0x60, 0x4e, 0xb7, 0xed, 0x49, 0x27, 0x7b, 0x32, 0x23, 0xd6, 0xd7, - 0x1b, 0x79, 0x76, 0xa9, 0xfb, 0x20, 0xfd, 0x71, 0xd1, 0xb5, 0xc9, 0x2e, 0x10, 0xee, 0xee, 0x92, - 0xfd, 0xbd, 0xf4, 0x71, 0xb0, 0x31, 0x35, 0x06, 0x38, 0xea, 0xfe, 0xb6, 0x05, 0xa3, 0x51, 0xd0, - 0x6c, 0x7a, 0x7e, 0x83, 0x4e, 0x63, 0x21, 0x8b, 0x5f, 0x3f, 0x16, 0x71, 0x28, 0xe6, 0x2b, 0xdb, - 0xfc, 0xb1, 0xe6, 0x89, 0xcd, 0x0e, 0xd8, 0x5f, 0xb6, 0x60, 0xaa, 0xdf, 0x72, 0x43, 0x04, 0x9e, - 0x90, 0x73, 0x49, 0x39, 0x7a, 0x57, 0xfd, 0x05, 0xd2, 0x24, 0xea, 0x9c, 0xac, 0x5c, 0x7d, 0x5a, - 0xbc, 0xe6, 0x13, 0x6b, 0xfd, 0x51, 0xf1, 0xbd, 0xe8, 0xd8, 0xbf, 0x55, 0xc8, 0x8e, 0xa8, 0x12, - 0xb7, 0xdf, 0xb5, 0xba, 0x8c, 0x92, 0x4f, 0x1f, 0x87, 0x88, 0x63, 0xe6, 0x8b, 0xf2, 0xf7, 0xf6, - 0xc7, 0x79, 0x80, 0x0e, 0x25, 0xfb, 0xdf, 0x0f, 0xc1, 0x3d, 0x7a, 0xa6, 0x5c, 0x06, 0x56, 0x3f, - 0x97, 0xc1, 0xc1, 0xbd, 0x10, 0xdf, 0xb4, 0x60, 0xb8, 0x49, 0xf5, 0x23, 0x7e, 0x2c, 0x3e, 0x7a, - 0xa1, 0x76, 0x5c, 0x63, 0xcf, 0xd5, 0xb0, 0x98, 0x3b, 0x35, 0xd5, 0xc9, 0x18, 0x6f, 0xc4, 0xa2, - 0x0f, 0xe8, 0x5d, 0x2b, 0x7d, 0xc6, 0xce, 0xa3, 0x54, 0xbc, 0x63, 0xeb, 0x93, 0x71, 0x70, 0xcf, - 0x3b, 0xa6, 0x8f, 0x84, 0xfb, 0x1c, 0xe9, 0xa3, 0x19, 0x80, 0xba, 0xe7, 0x3b, 0x4d, 0xef, 0x2d, - 0x6a, 0xe7, 0x95, 0x98, 0x13, 0x80, 0x6d, 0x5a, 0x97, 0x54, 0x2b, 0x36, 0x30, 0xce, 0xfe, 0x75, - 0x18, 0x35, 0xde, 0xbc, 0x87, 0x2f, 0xf6, 0xb4, 0xe9, 0x8b, 0xad, 0x18, 0x2e, 0xd4, 0xb3, 0xaf, - 0xc0, 0xc9, 0x6c, 0x07, 0x0f, 0xf2, 0xbc, 0xfd, 0xdb, 0xc3, 0xd9, 0x83, 0xf1, 0x0d, 0x12, 0xb5, - 0x68, 0xd7, 0x3e, 0xb4, 0x8f, 0x3f, 0xb4, 0x8f, 0x3f, 0xb4, 0x8f, 0xe5, 0x1f, 0xfb, 0x4e, 0x09, - 0x52, 0x9a, 0x01, 0xef, 0xdd, 0x47, 0x61, 0x24, 0x22, 0x61, 0x70, 0x1d, 0x2f, 0x0b, 0x89, 0xab, - 0xa3, 0x53, 0x79, 0x33, 0x96, 0x70, 0x2a, 0x99, 0x43, 0x27, 0xd9, 0x12, 0x22, 0x57, 0x49, 0xe6, - 0x35, 0x27, 0xd9, 0xc2, 0x0c, 0x82, 0x5e, 0x81, 0x89, 0xc4, 0x89, 0x1a, 0x24, 0xc1, 0x64, 0x87, - 0x0d, 0x82, 0x70, 0x36, 0x3c, 0x2a, 0x70, 0x27, 0x36, 0x52, 0x50, 0x9c, 0xc1, 0x46, 0x6f, 0xc2, - 0xd0, 0x16, 0x69, 0xb6, 0x84, 0x01, 0xbf, 0x9e, 0x9f, 0x44, 0x64, 0xef, 0x7a, 0x99, 0x34, 0x5b, - 0x7c, 0xbd, 0xd2, 0x5f, 0x98, 0xb1, 0xa2, 0x5f, 0xa7, 0xb2, 0xdd, 0x8e, 0x93, 0xa0, 0xe5, 0xbd, - 0x25, 0xcd, 0xfa, 0x4f, 0xe7, 0xcc, 0xf8, 0xaa, 0xa4, 0xcf, 0x6d, 0x4f, 0xf5, 0x17, 0x6b, 0xce, - 0xac, 0x1f, 0x35, 0x2f, 0x62, 0x66, 0x7a, 0x67, 0x0a, 0x8e, 0xa5, 0x1f, 0x0b, 0x92, 0x3e, 0xef, - 0x87, 0xfa, 0x8b, 0x35, 0x67, 0xd4, 0x81, 0xe1, 0xb0, 0xd9, 0x6e, 0x78, 0xfe, 0xd4, 0x28, 0xeb, - 0xc3, 0xf5, 0x9c, 0xfb, 0xb0, 0xc6, 0x88, 0xf3, 0xc3, 0x15, 0xfe, 0x1b, 0x0b, 0x86, 0xe8, 0x69, - 0x28, 0xb9, 0x5b, 0x4e, 0x94, 0x4c, 0x8d, 0xb1, 0x49, 0xa3, 0x6c, 0xe0, 0x79, 0xda, 0x88, 0x39, - 0x0c, 0x3d, 0x05, 0xc5, 0x88, 0xd4, 0x59, 0x50, 0x94, 0xe1, 0x2e, 0xc7, 0xa4, 0x8e, 0x69, 0xbb, - 0xfd, 0xf7, 0x0b, 0x69, 0xe5, 0x22, 0xfd, 0xde, 0x7c, 0xb6, 0xbb, 0xed, 0x28, 0x96, 0x76, 0xb2, - 0x31, 0xdb, 0x59, 0x33, 0x96, 0x70, 0xf4, 0x65, 0x0b, 0x46, 0x6e, 0xc5, 0x81, 0xef, 0x93, 0x44, - 0x08, 0xf2, 0x1b, 0x39, 0x0f, 0xc5, 0x15, 0x4e, 0x5d, 0xf7, 0x41, 0x34, 0x60, 0xc9, 0x97, 0x76, - 0x97, 0xec, 0xba, 0xcd, 0x76, 0xad, 0xcb, 0x4b, 0x7a, 0x91, 0x37, 0x63, 0x09, 0xa7, 0xa8, 0x9e, - 0xcf, 0x51, 0x87, 0xd2, 0xa8, 0x4b, 0xbe, 0x40, 0x15, 0x70, 0xfb, 0x77, 0x4b, 0x70, 0xa6, 0xe7, - 0xe2, 0xa0, 0xdb, 0x3e, 0xdb, 0x58, 0x2f, 0x79, 0x4d, 0x22, 0x7d, 0xff, 0x6c, 0xdb, 0xbf, 0xa1, - 0x5a, 0xb1, 0x81, 0x81, 0x7e, 0x01, 0x20, 0x74, 0x22, 0xa7, 0x45, 0xc4, 0x76, 0x57, 0x3c, 0xfa, - 0xee, 0x4a, 0xfb, 0xb1, 0x26, 0x69, 0x6a, 0x6b, 0x4b, 0x35, 0xc5, 0xd8, 0x60, 0x89, 0x3e, 0x01, - 0xa3, 0x11, 0x69, 0x12, 0x27, 0x66, 0x31, 0x75, 0xd9, 0x00, 0x61, 0xac, 0x41, 0xd8, 0xc4, 0x43, - 0xcf, 0xa8, 0x30, 0x89, 0x8c, 0x4b, 0x39, 0x1d, 0x2a, 0x81, 0xde, 0xb6, 0x60, 0xa2, 0xee, 0x35, - 0x89, 0xe6, 0x2e, 0xc2, 0x79, 0x57, 0x8f, 0xfe, 0x92, 0x97, 0x4c, 0xba, 0x5a, 0x42, 0xa6, 0x9a, - 0x63, 0x9c, 0x61, 0x4f, 0x3f, 0xf3, 0x0e, 0x89, 0x98, 0x68, 0x1d, 0x4e, 0x7f, 0xe6, 0x1b, 0xbc, - 0x19, 0x4b, 0x38, 0x9a, 0x83, 0x13, 0xa1, 0x13, 0xc7, 0xf3, 0x11, 0xa9, 0x11, 0x3f, 0xf1, 0x9c, - 0x26, 0x0f, 0xb6, 0x2d, 0xeb, 0x60, 0xbb, 0xb5, 0x34, 0x18, 0x67, 0xf1, 0xd1, 0x67, 0xe0, 0x31, - 0xaf, 0xe1, 0x07, 0x11, 0x59, 0xf1, 0xe2, 0xd8, 0xf3, 0x1b, 0x7a, 0x1a, 0x30, 0x49, 0x59, 0xae, - 0x4e, 0x0b, 0x52, 0x8f, 0x2d, 0xf5, 0x46, 0xc3, 0xfd, 0x9e, 0x47, 0xcf, 0x41, 0x39, 0xde, 0xf6, - 0xc2, 0xf9, 0xa8, 0x16, 0xb3, 0x83, 0xce, 0xb2, 0x3e, 0x9d, 0x59, 0x17, 0xed, 0x58, 0x61, 0xd8, - 0xbf, 0x56, 0x48, 0x9b, 0x77, 0xe6, 0xfa, 0x41, 0x31, 0x5d, 0x25, 0xc9, 0x0d, 0x27, 0x92, 0xa6, - 0xff, 0x11, 0xc3, 0x75, 0x05, 0xdd, 0x1b, 0x4e, 0x64, 0xae, 0x37, 0xc6, 0x00, 0x4b, 0x4e, 0xe8, - 0x16, 0x0c, 0x25, 0x4d, 0x27, 0xa7, 0xf8, 0x7e, 0x83, 0xa3, 0xb6, 0xb6, 0x97, 0xe7, 0x62, 0xcc, - 0x78, 0xa0, 0x27, 0xa9, 0xfa, 0xba, 0x29, 0x63, 0x7a, 0x84, 0xc6, 0xb9, 0x19, 0x63, 0xd6, 0x6a, - 0xbf, 0x3b, 0xd2, 0x43, 0xe4, 0xa9, 0x3d, 0x06, 0x5d, 0x00, 0xa0, 0x96, 0xd0, 0x5a, 0x44, 0xea, - 0xde, 0xae, 0xd8, 0xe3, 0xd5, 0xb2, 0xba, 0xa6, 0x20, 0xd8, 0xc0, 0x92, 0xcf, 0xac, 0xb7, 0xeb, - 0xf4, 0x99, 0x42, 0xf7, 0x33, 0x1c, 0x82, 0x0d, 0x2c, 0xf4, 0x22, 0x0c, 0x7b, 0x2d, 0xa7, 0xa1, - 0x42, 0x8f, 0x9e, 0xa4, 0xeb, 0x69, 0x89, 0xb5, 0xdc, 0xdd, 0x9b, 0x9e, 0x50, 0x1d, 0x62, 0x4d, - 0x58, 0xe0, 0xa2, 0xdf, 0xb2, 0x60, 0xcc, 0x0d, 0x5a, 0xad, 0xc0, 0xe7, 0xf6, 0x83, 0x30, 0x86, - 0x6e, 0x1d, 0xd7, 0x0e, 0x3c, 0x33, 0x6f, 0x30, 0xe3, 0xd6, 0x90, 0x4a, 0x44, 0x30, 0x41, 0x38, - 0xd5, 0x2b, 0x73, 0xd9, 0x95, 0xf6, 0x59, 0x76, 0xff, 0xdc, 0x82, 0x49, 0xfe, 0xac, 0x61, 0xd6, - 0x88, 0x98, 0xfb, 0xe0, 0x98, 0x5f, 0xab, 0xcb, 0xd2, 0x53, 0x47, 0x42, 0x5d, 0x70, 0xdc, 0xdd, - 0x49, 0xb4, 0x08, 0x93, 0xf5, 0x20, 0x72, 0x89, 0x39, 0x10, 0x42, 0x66, 0x28, 0x42, 0x97, 0xb2, - 0x08, 0xb8, 0xfb, 0x19, 0x74, 0x03, 0x1e, 0x35, 0x1a, 0xcd, 0x71, 0xe0, 0x62, 0xe3, 0x9c, 0xa0, - 0xf6, 0xe8, 0xa5, 0x9e, 0x58, 0xb8, 0xcf, 0xd3, 0x69, 0xcb, 0xbf, 0xb2, 0xbf, 0xe5, 0x7f, 0xf6, - 0x53, 0x30, 0xd9, 0xf5, 0xc1, 0x0f, 0x64, 0x9d, 0x2e, 0xc0, 0xa3, 0xbd, 0x87, 0xf6, 0x40, 0x36, - 0xea, 0x3f, 0xcd, 0x04, 0x1e, 0x19, 0x9a, 0xd0, 0x00, 0xe7, 0x1d, 0x0e, 0x14, 0x89, 0xbf, 0x23, - 0x24, 0xcd, 0xa5, 0xa3, 0x4d, 0xa1, 0x8b, 0xfe, 0x0e, 0x9f, 0x19, 0xcc, 0xa8, 0xbb, 0xe8, 0xef, - 0x60, 0x4a, 0x1b, 0xbd, 0x63, 0xa5, 0x76, 0x72, 0x7e, 0x4a, 0xf2, 0xd9, 0x63, 0x51, 0xfd, 0x06, - 0xde, 0xdc, 0xed, 0xef, 0x15, 0xe0, 0xfc, 0x7e, 0x44, 0x06, 0x18, 0xbe, 0xa7, 0x61, 0x38, 0x66, - 0x9e, 0x1f, 0xb1, 0x74, 0x47, 0xe9, 0xb2, 0xe5, 0xbe, 0xa0, 0xcf, 0x61, 0x01, 0x42, 0xbf, 0x64, - 0x41, 0xb1, 0xe5, 0x84, 0xe2, 0xcd, 0x1b, 0xc7, 0xfb, 0xe6, 0x33, 0x2b, 0x4e, 0xc8, 0xbf, 0x82, - 0x52, 0x60, 0x57, 0x9c, 0x10, 0xd3, 0x0e, 0xa0, 0x69, 0x28, 0x39, 0x51, 0xe4, 0x74, 0x98, 0x20, - 0xac, 0x70, 0x0f, 0xe1, 0x1c, 0x6d, 0xc0, 0xbc, 0xfd, 0xec, 0x27, 0xa1, 0x2c, 0x1f, 0x3f, 0xd0, - 0x1c, 0xfc, 0xe6, 0x48, 0x2a, 0xd0, 0x96, 0x79, 0x8e, 0x62, 0x18, 0x16, 0x16, 0xb3, 0x95, 0x77, - 0x6c, 0x37, 0xcf, 0x94, 0x60, 0x6a, 0xbe, 0xc8, 0x37, 0x13, 0xac, 0xd0, 0x37, 0x2c, 0x96, 0xd5, - 0x25, 0x83, 0x8f, 0x85, 0x72, 0x7d, 0x3c, 0x49, 0x66, 0x66, 0xae, 0x98, 0x6c, 0xc4, 0x26, 0x77, - 0x2a, 0xd9, 0x43, 0x9e, 0x9f, 0x90, 0x55, 0xb1, 0x65, 0xde, 0x97, 0x84, 0xa3, 0xdd, 0x1e, 0x1e, - 0xa2, 0x1c, 0x32, 0x83, 0x06, 0xf0, 0x09, 0xbd, 0x6b, 0xc1, 0x24, 0x57, 0xa4, 0x16, 0xbc, 0x7a, - 0x9d, 0x44, 0xc4, 0x77, 0x89, 0x54, 0x45, 0x8f, 0xe8, 0x83, 0x94, 0xc7, 0x14, 0x4b, 0x59, 0xf2, - 0x5a, 0xe4, 0x77, 0x81, 0x70, 0x77, 0x67, 0x50, 0x0d, 0x86, 0x3c, 0xbf, 0x1e, 0x88, 0x8d, 0xae, - 0x7a, 0xb4, 0x4e, 0x2d, 0xf9, 0xf5, 0x40, 0xaf, 0x65, 0xfa, 0x0f, 0x33, 0xea, 0x68, 0x19, 0x4e, - 0x47, 0xe2, 0xb0, 0xe0, 0xb2, 0x17, 0x53, 0x93, 0x6e, 0xd9, 0x6b, 0x79, 0x09, 0xdb, 0xa4, 0x8a, - 0xd5, 0xa9, 0x3b, 0x7b, 0xd3, 0xa7, 0x71, 0x0f, 0x38, 0xee, 0xf9, 0x14, 0x7a, 0x0b, 0x46, 0x64, - 0x1a, 0x5a, 0x39, 0x0f, 0xb5, 0xbe, 0x7b, 0xfe, 0xab, 0xc9, 0xb4, 0x2e, 0x32, 0xce, 0x24, 0x43, - 0xfb, 0xdf, 0x00, 0x74, 0xfb, 0x69, 0xd0, 0xcf, 0x43, 0x25, 0x52, 0xa9, 0x71, 0x56, 0x1e, 0x11, - 0x46, 0xf2, 0xfb, 0x0a, 0x1f, 0x91, 0xda, 0x2e, 0x75, 0x12, 0x9c, 0xe6, 0x48, 0x95, 0xda, 0x58, - 0xbb, 0x73, 0x72, 0x98, 0xdb, 0x82, 0xab, 0x76, 0x03, 0x74, 0x7c, 0x17, 0x33, 0x1e, 0x28, 0x82, - 0xe1, 0x2d, 0xe2, 0x34, 0x93, 0xad, 0x7c, 0x4e, 0x2c, 0x2f, 0x33, 0x5a, 0xd9, 0x20, 0x6a, 0xde, - 0x8a, 0x05, 0x27, 0xb4, 0x0b, 0x23, 0x5b, 0x7c, 0x02, 0x08, 0x3d, 0x73, 0xe5, 0xa8, 0x83, 0x9b, - 0x9a, 0x55, 0xfa, 0x73, 0x8b, 0x06, 0x2c, 0xd9, 0x31, 0xf7, 0xb2, 0xe1, 0xa2, 0xe4, 0x4b, 0x37, - 0xbf, 0xf8, 0xf1, 0xc1, 0xfd, 0x93, 0x9f, 0x87, 0xb1, 0x88, 0xb8, 0x81, 0xef, 0x7a, 0x4d, 0x52, - 0x9b, 0x93, 0xa7, 0x91, 0x07, 0x89, 0x3a, 0x3e, 0x49, 0x75, 0x65, 0x6c, 0xd0, 0xc0, 0x29, 0x8a, - 0xe8, 0xeb, 0x16, 0x4c, 0xa8, 0x7c, 0x1a, 0xfa, 0x41, 0x88, 0x38, 0xcf, 0x5b, 0xce, 0x29, 0x7b, - 0x87, 0xd1, 0xac, 0x22, 0x6a, 0x2d, 0xa7, 0xdb, 0x70, 0x86, 0x2f, 0x7a, 0x0d, 0x20, 0xd8, 0xe4, - 0x3e, 0xe4, 0xb9, 0x44, 0x1c, 0xee, 0x1d, 0xe4, 0x55, 0x27, 0x78, 0xfa, 0x81, 0xa4, 0x80, 0x0d, - 0x6a, 0xe8, 0x2a, 0x00, 0x5f, 0x36, 0x1b, 0x9d, 0x50, 0x2a, 0xa3, 0x32, 0x6c, 0x1c, 0xd6, 0x15, - 0xe4, 0xee, 0xde, 0x74, 0xf7, 0x61, 0x0b, 0xf3, 0xa4, 0x1a, 0x8f, 0xa3, 0x9f, 0x83, 0x91, 0xb8, - 0xdd, 0x6a, 0x39, 0xea, 0xe8, 0x2f, 0xc7, 0x84, 0x06, 0x4e, 0xd7, 0x10, 0x45, 0xbc, 0x01, 0x4b, - 0x8e, 0xe8, 0x16, 0x15, 0xaa, 0xb1, 0x38, 0x05, 0x62, 0xab, 0x88, 0xeb, 0x04, 0xa3, 0xec, 0x9d, - 0x3e, 0x29, 0x9e, 0x3b, 0x8d, 0x7b, 0xe0, 0xdc, 0xdd, 0x9b, 0x7e, 0x34, 0xdd, 0xbe, 0x1c, 0x88, - 0x14, 0x83, 0x9e, 0x34, 0xd1, 0x15, 0x99, 0x95, 0x4e, 0x5f, 0x5b, 0x26, 0x4b, 0x3e, 0xab, 0xb3, - 0xd2, 0x59, 0x73, 0xff, 0x31, 0x33, 0x1f, 0xb6, 0xfd, 0x74, 0x34, 0x8c, 0x78, 0x9b, 0x17, 0x61, - 0x8c, 0xec, 0x26, 0x24, 0xf2, 0x9d, 0xe6, 0x75, 0xbc, 0x2c, 0x4f, 0xb1, 0xd8, 0xa4, 0xbd, 0x68, - 0xb4, 0xe3, 0x14, 0x16, 0xb2, 0x95, 0xf5, 0x5a, 0xd0, 0x89, 0x33, 0xdc, 0x7a, 0x95, 0xb6, 0xaa, - 0xfd, 0xff, 0x0b, 0x29, 0x0d, 0x6a, 0x23, 0x22, 0x04, 0x05, 0x50, 0xf2, 0x83, 0x9a, 0x12, 0xd6, - 0x57, 0xf2, 0x11, 0xd6, 0xd7, 0x82, 0x9a, 0x91, 0x6b, 0x4e, 0xff, 0xc5, 0x98, 0xf3, 0x61, 0xc9, - 0xb8, 0x32, 0x6b, 0x99, 0x01, 0x84, 0x5d, 0x90, 0x27, 0x67, 0x95, 0x8c, 0xbb, 0x6a, 0x32, 0xc2, - 0x69, 0xbe, 0x68, 0x1b, 0x4a, 0x5b, 0x41, 0x9c, 0x48, 0x6b, 0xe1, 0x88, 0x86, 0xc9, 0xe5, 0x20, - 0x4e, 0xd8, 0xb6, 0xaf, 0x5e, 0x9b, 0xb6, 0xc4, 0x98, 0xf3, 0xb0, 0xff, 0xbb, 0x95, 0x3a, 0xb3, - 0xbc, 0xc9, 0x22, 0xc3, 0x76, 0x88, 0x4f, 0xd7, 0xa1, 0x19, 0xac, 0xf0, 0xd7, 0x32, 0x89, 0x1b, - 0x1f, 0xe9, 0x57, 0xf9, 0xe3, 0x36, 0xa5, 0x30, 0xc3, 0x48, 0x18, 0x71, 0x0d, 0x5f, 0xb2, 0xd2, - 0x29, 0x34, 0x7c, 0x23, 0xcc, 0x31, 0x45, 0x6c, 0xdf, 0x6c, 0x1c, 0xfb, 0x1d, 0x0b, 0x46, 0xaa, - 0x8e, 0xbb, 0x1d, 0xd4, 0xeb, 0xe8, 0x39, 0x28, 0xd7, 0xda, 0x91, 0x99, 0xcd, 0xa3, 0x0e, 0xc9, - 0x16, 0x44, 0x3b, 0x56, 0x18, 0x74, 0x0e, 0xd7, 0x1d, 0x57, 0x26, 0x8a, 0x15, 0xf9, 0x1c, 0xbe, - 0xc4, 0x5a, 0xb0, 0x80, 0xa0, 0x4f, 0xc0, 0x68, 0xcb, 0xd9, 0x95, 0x0f, 0x67, 0x0f, 0x4c, 0x57, - 0x34, 0x08, 0x9b, 0x78, 0xf6, 0xbf, 0xb5, 0x60, 0xaa, 0xea, 0xc4, 0x9e, 0x3b, 0xd7, 0x4e, 0xb6, - 0xaa, 0x5e, 0xb2, 0xd9, 0x76, 0xb7, 0x49, 0xc2, 0xb3, 0x03, 0x69, 0x2f, 0xdb, 0x31, 0x5d, 0x4a, - 0xca, 0x0c, 0x53, 0xbd, 0xbc, 0x2e, 0xda, 0xb1, 0xc2, 0x40, 0x6f, 0xc1, 0x68, 0xe8, 0xc4, 0xf1, - 0xed, 0x20, 0xaa, 0x61, 0x52, 0xcf, 0x27, 0x37, 0x77, 0x9d, 0xb8, 0x11, 0x49, 0x30, 0xa9, 0x0b, - 0x17, 0x98, 0xa6, 0x8f, 0x4d, 0x66, 0xf6, 0xef, 0x55, 0x60, 0x44, 0xf8, 0xef, 0x06, 0xce, 0x79, - 0x94, 0x06, 0x66, 0xa1, 0xaf, 0x81, 0x19, 0xc3, 0xb0, 0xcb, 0x2a, 0xc4, 0x08, 0x4d, 0xe6, 0x6a, - 0x2e, 0x0e, 0x5f, 0x5e, 0x74, 0x46, 0x77, 0x8b, 0xff, 0xc7, 0x82, 0x15, 0xfa, 0x8e, 0x05, 0x27, - 0xdc, 0xc0, 0xf7, 0x89, 0xab, 0xb7, 0xd9, 0xa1, 0x3c, 0x42, 0x38, 0xe6, 0xd3, 0x44, 0xf5, 0x69, - 0x71, 0x06, 0x80, 0xb3, 0xec, 0xd1, 0xcb, 0x30, 0xce, 0xc7, 0xec, 0x46, 0xea, 0xa8, 0x4c, 0xa7, - 0xf6, 0x9b, 0x40, 0x9c, 0xc6, 0x45, 0x33, 0xfc, 0xc8, 0x51, 0x24, 0xd1, 0x0f, 0x6b, 0xd7, 0x83, - 0x91, 0x3e, 0x6f, 0x60, 0xa0, 0x08, 0x50, 0x44, 0xea, 0x11, 0x89, 0xb7, 0x84, 0x7f, 0x93, 0x6d, - 0xf1, 0x23, 0x87, 0xcb, 0xa1, 0xc2, 0x5d, 0x94, 0x70, 0x0f, 0xea, 0x68, 0x5b, 0xd8, 0x38, 0xe5, - 0x3c, 0xa4, 0x82, 0xf8, 0xcc, 0x7d, 0x4d, 0x9d, 0x69, 0x28, 0xc5, 0x5b, 0x4e, 0x54, 0x63, 0xaa, - 0x45, 0x91, 0x1f, 0x04, 0xac, 0xd3, 0x06, 0xcc, 0xdb, 0xd1, 0x02, 0x9c, 0xcc, 0x14, 0x26, 0x88, - 0x99, 0xf2, 0x50, 0xd6, 0x21, 0xb5, 0x99, 0x92, 0x06, 0x31, 0xee, 0x7a, 0xc2, 0xb4, 0x7f, 0x47, - 0xf7, 0xb1, 0x7f, 0x3b, 0x2a, 0x8a, 0x66, 0x8c, 0x49, 0xfc, 0x57, 0x73, 0x19, 0x80, 0x81, 0x42, - 0x66, 0xbe, 0x95, 0x09, 0x99, 0x19, 0x67, 0x1d, 0xb8, 0x91, 0x4f, 0x07, 0x0e, 0x1e, 0x1f, 0xf3, - 0x20, 0xe3, 0x5d, 0xfe, 0x9f, 0x05, 0xf2, 0xbb, 0xce, 0x3b, 0xee, 0x16, 0xa1, 0x53, 0x06, 0xbd, - 0x02, 0x13, 0xca, 0x8a, 0x9b, 0x0f, 0xda, 0x3e, 0x0f, 0x75, 0x29, 0x6a, 0xb7, 0x12, 0x4e, 0x41, - 0x71, 0x06, 0x1b, 0xcd, 0x42, 0x85, 0x8e, 0x13, 0x7f, 0x94, 0xef, 0x1e, 0xca, 0x52, 0x9c, 0x5b, - 0x5b, 0x12, 0x4f, 0x69, 0x1c, 0x14, 0xc0, 0x64, 0xd3, 0x89, 0x13, 0xd6, 0x03, 0x6a, 0xd4, 0x1d, - 0x32, 0x83, 0x91, 0xd5, 0x65, 0x59, 0xce, 0x12, 0xc2, 0xdd, 0xb4, 0xed, 0x1f, 0x0c, 0xc1, 0x78, - 0x4a, 0x32, 0x1e, 0x70, 0xdb, 0x79, 0x0e, 0xca, 0x72, 0x27, 0xc8, 0xe6, 0x51, 0xab, 0xed, 0x42, - 0x61, 0xd0, 0x6d, 0x72, 0x93, 0x38, 0x11, 0x89, 0x58, 0xc9, 0x87, 0xec, 0x36, 0x59, 0xd5, 0x20, - 0x6c, 0xe2, 0x31, 0xa1, 0x9c, 0x34, 0xe3, 0xf9, 0xa6, 0x47, 0xfc, 0x84, 0x77, 0x33, 0x1f, 0xa1, - 0xbc, 0xb1, 0xbc, 0x6e, 0x12, 0xd5, 0x42, 0x39, 0x03, 0xc0, 0x59, 0xf6, 0xe8, 0xab, 0x16, 0x8c, - 0x3b, 0xb7, 0x63, 0x5d, 0xc6, 0x4c, 0x04, 0xc7, 0x1c, 0x71, 0x93, 0x4a, 0x55, 0x46, 0xab, 0x4e, - 0x52, 0xf1, 0x9e, 0x6a, 0xc2, 0x69, 0xa6, 0xe8, 0xbb, 0x16, 0x20, 0xb2, 0x4b, 0x5c, 0x19, 0xbe, - 0x23, 0xfa, 0x32, 0x9c, 0x87, 0xb1, 0x73, 0xb1, 0x8b, 0x2e, 0x97, 0xea, 0xdd, 0xed, 0xb8, 0x47, - 0x1f, 0xec, 0x7f, 0x59, 0x54, 0x0b, 0x4a, 0x47, 0x8c, 0x39, 0x46, 0x1e, 0x86, 0x75, 0xf8, 0x3c, - 0x0c, 0xed, 0xd3, 0xec, 0xca, 0xc5, 0x48, 0x87, 0xbd, 0x17, 0x1e, 0x50, 0xd8, 0xfb, 0x57, 0xac, - 0x54, 0xc5, 0x80, 0xd1, 0x0b, 0xaf, 0xe5, 0x1b, 0xad, 0x36, 0xc3, 0x3d, 0xea, 0x19, 0xe9, 0x9e, - 0x76, 0xb3, 0x53, 0x69, 0x6a, 0xa0, 0x1d, 0x48, 0x1a, 0xfe, 0xe7, 0x22, 0x8c, 0x1a, 0x3b, 0x69, - 0x4f, 0xb5, 0xc8, 0x7a, 0xc8, 0xd4, 0xa2, 0xc2, 0x01, 0xd4, 0xa2, 0x5f, 0x80, 0x8a, 0x2b, 0xa5, - 0x7c, 0x3e, 0x35, 0xf3, 0xb2, 0x7b, 0x87, 0x16, 0xf4, 0xaa, 0x09, 0x6b, 0x9e, 0x68, 0x31, 0x15, - 0xce, 0x2e, 0x76, 0x88, 0x21, 0xb6, 0x43, 0xf4, 0x8a, 0x37, 0x17, 0x3b, 0x45, 0xf7, 0x33, 0xac, - 0xb0, 0x44, 0xe8, 0x89, 0xf7, 0x92, 0x31, 0xa5, 0xbc, 0xb0, 0xc4, 0xda, 0x92, 0x6c, 0xc6, 0x26, - 0x8e, 0xfd, 0x03, 0x4b, 0x7d, 0xdc, 0xfb, 0x90, 0xd9, 0x79, 0x2b, 0x9d, 0xd9, 0x79, 0x31, 0x97, - 0x61, 0xee, 0x93, 0xd2, 0x79, 0x0d, 0x46, 0xe6, 0x83, 0x56, 0xcb, 0xf1, 0x6b, 0xe8, 0x27, 0x60, - 0xc4, 0xe5, 0x3f, 0xc5, 0x51, 0x05, 0xf3, 0x4f, 0x09, 0x28, 0x96, 0x30, 0xf4, 0x24, 0x0c, 0x39, - 0x51, 0x43, 0x1e, 0x4f, 0xb0, 0x18, 0x80, 0xb9, 0xa8, 0x11, 0x63, 0xd6, 0x6a, 0xbf, 0x5d, 0x04, - 0x98, 0x0f, 0x5a, 0xa1, 0x13, 0x91, 0xda, 0x46, 0xc0, 0x6a, 0xf6, 0x1c, 0xab, 0x5f, 0x47, 0x1b, - 0x4b, 0x0f, 0xb3, 0x6f, 0xc7, 0x38, 0xdf, 0x2f, 0xde, 0xef, 0xf3, 0xfd, 0x6f, 0x5a, 0x80, 0xe8, - 0x17, 0x09, 0x7c, 0xe2, 0x27, 0xda, 0x5d, 0x39, 0x0b, 0x15, 0x57, 0xb6, 0x0a, 0xad, 0x45, 0xaf, - 0x3f, 0x09, 0xc0, 0x1a, 0x67, 0x00, 0xf3, 0xf3, 0x69, 0x29, 0x1c, 0x8b, 0xe9, 0xb0, 0x39, 0x26, - 0x52, 0x85, 0xac, 0xb4, 0x7f, 0xbf, 0x00, 0x8f, 0xf2, 0xfd, 0x6e, 0xc5, 0xf1, 0x9d, 0x06, 0x69, - 0xd1, 0x5e, 0x0d, 0xea, 0x80, 0x76, 0xa9, 0xdd, 0xe3, 0xc9, 0x30, 0xb8, 0xa3, 0x2e, 0x0c, 0x3e, - 0xa1, 0xf9, 0x14, 0x5e, 0xf2, 0xbd, 0x04, 0x33, 0xe2, 0x28, 0x86, 0xb2, 0xac, 0xc0, 0x2a, 0x04, - 0x5d, 0x4e, 0x8c, 0xd4, 0x9a, 0x17, 0x9b, 0x12, 0xc1, 0x8a, 0x11, 0xd5, 0x0a, 0x9b, 0x81, 0xbb, - 0x8d, 0x49, 0x18, 0x30, 0xa1, 0x66, 0x44, 0x21, 0x2d, 0x8b, 0x76, 0xac, 0x30, 0xec, 0xdf, 0xb7, - 0x20, 0x2b, 0xee, 0x8d, 0xea, 0x24, 0xd6, 0x3d, 0xab, 0x93, 0x1c, 0xa0, 0x3c, 0xc8, 0xcf, 0xc2, - 0xa8, 0x93, 0xd0, 0x1d, 0x9a, 0xdb, 0xb4, 0xc5, 0xc3, 0x1d, 0x5b, 0xaf, 0x04, 0x35, 0xaf, 0xee, - 0x31, 0x5b, 0xd6, 0x24, 0x67, 0xff, 0x9f, 0x21, 0x98, 0xec, 0x0a, 0x6d, 0x46, 0x2f, 0xc1, 0x98, - 0x2b, 0xa6, 0x47, 0x88, 0x49, 0x5d, 0xbc, 0x8c, 0x11, 0x1a, 0xa3, 0x61, 0x38, 0x85, 0x39, 0xc0, - 0x04, 0x5d, 0x82, 0x53, 0x11, 0xb5, 0xa2, 0xdb, 0x64, 0xae, 0x9e, 0x90, 0x68, 0x9d, 0xb8, 0x81, - 0x5f, 0xe3, 0x35, 0x74, 0x8a, 0xd5, 0xc7, 0xee, 0xec, 0x4d, 0x9f, 0xc2, 0xdd, 0x60, 0xdc, 0xeb, - 0x19, 0x14, 0xc2, 0x78, 0xd3, 0x54, 0xb0, 0x84, 0x76, 0x7d, 0x28, 0xdd, 0x4c, 0x6d, 0xc0, 0xa9, - 0x66, 0x9c, 0x66, 0x90, 0xd6, 0xd2, 0x4a, 0x0f, 0x48, 0x4b, 0xfb, 0x45, 0xad, 0xa5, 0x71, 0xff, - 0xea, 0xeb, 0x39, 0x87, 0xb6, 0x1f, 0xb7, 0x9a, 0xf6, 0x2a, 0x94, 0x65, 0xe4, 0xc9, 0x40, 0x11, - 0x1b, 0x26, 0x9d, 0x3e, 0x12, 0xed, 0x6e, 0x01, 0x7a, 0x68, 0xf8, 0x74, 0x9d, 0xe9, 0xed, 0x34, - 0xb5, 0xce, 0x0e, 0xb6, 0xa5, 0xa2, 0x5d, 0x1e, 0x75, 0xc3, 0x37, 0x8e, 0xcf, 0xe4, 0x6d, 0xa1, - 0xe8, 0x40, 0x1c, 0x15, 0x02, 0xa2, 0x82, 0x71, 0x2e, 0x00, 0x68, 0x2d, 0x48, 0x44, 0xa8, 0x2a, - 0xb7, 0x9e, 0x56, 0x96, 0xb0, 0x81, 0x45, 0x0d, 0x56, 0xcf, 0x8f, 0x13, 0xa7, 0xd9, 0xbc, 0xec, - 0xf9, 0x89, 0x38, 0x79, 0x53, 0x3b, 0xe4, 0x92, 0x06, 0x61, 0x13, 0xef, 0xec, 0x27, 0x8d, 0xef, - 0x72, 0x90, 0xef, 0xb9, 0x05, 0x8f, 0x2f, 0x7a, 0x89, 0x8a, 0xab, 0x56, 0xf3, 0x88, 0x2a, 0x39, - 0x2a, 0x4f, 0xc0, 0xea, 0x9b, 0x27, 0x60, 0xc4, 0x35, 0x17, 0xd2, 0x61, 0xd8, 0xd9, 0xb8, 0x66, - 0xfb, 0x25, 0x38, 0xbd, 0xe8, 0x25, 0x97, 0xbc, 0x26, 0x39, 0x20, 0x13, 0xfb, 0xab, 0x25, 0x18, - 0x33, 0xf3, 0x58, 0x0e, 0x92, 0xea, 0xf0, 0x6d, 0xaa, 0xc7, 0x88, 0xb7, 0xf3, 0x94, 0x8f, 0xe5, - 0xe6, 0x91, 0x93, 0x6a, 0x7a, 0x8f, 0x98, 0xa1, 0xca, 0x68, 0x9e, 0xd8, 0xec, 0x00, 0xba, 0x0d, - 0xa5, 0x3a, 0x8b, 0xbb, 0x2d, 0xe6, 0xe1, 0x39, 0xee, 0x35, 0xa2, 0x7a, 0x99, 0xf1, 0xc8, 0x5d, - 0xce, 0x8f, 0xee, 0x90, 0x51, 0x3a, 0x99, 0x43, 0x09, 0x2a, 0x95, 0xc6, 0xa1, 0x30, 0xfa, 0x89, - 0xfa, 0xd2, 0x21, 0x44, 0x7d, 0x4a, 0xf0, 0x0e, 0x3f, 0x20, 0xc1, 0xcb, 0x62, 0xa8, 0x93, 0x2d, - 0xa6, 0xbf, 0x89, 0x08, 0xda, 0x11, 0x36, 0x08, 0x46, 0x0c, 0x75, 0x0a, 0x8c, 0xb3, 0xf8, 0xf6, - 0x37, 0x0b, 0x30, 0xb1, 0xe8, 0xb7, 0xd7, 0x16, 0xd7, 0xda, 0x9b, 0x4d, 0xcf, 0xbd, 0x4a, 0x3a, - 0x54, 0xbe, 0x6d, 0x93, 0xce, 0xd2, 0x82, 0x98, 0x86, 0x6a, 0xe0, 0xaf, 0xd2, 0x46, 0xcc, 0x61, - 0x74, 0x45, 0xd7, 0x3d, 0xbf, 0x41, 0xa2, 0x30, 0xf2, 0xc4, 0xa1, 0x9c, 0xb1, 0xa2, 0x2f, 0x69, - 0x10, 0x36, 0xf1, 0x28, 0xed, 0xe0, 0xb6, 0x4f, 0xa2, 0xac, 0x36, 0xb8, 0x4a, 0x1b, 0x31, 0x87, - 0x51, 0xa4, 0x24, 0x6a, 0xc7, 0x89, 0xf8, 0xa2, 0x0a, 0x69, 0x83, 0x36, 0x62, 0x0e, 0xa3, 0xcb, - 0x25, 0x6e, 0x6f, 0x32, 0xef, 0x76, 0x26, 0xe6, 0x75, 0x9d, 0x37, 0x63, 0x09, 0xa7, 0xa8, 0xdb, - 0xa4, 0xb3, 0x40, 0xed, 0xb2, 0x4c, 0x54, 0xfa, 0x55, 0xde, 0x8c, 0x25, 0x9c, 0x15, 0xed, 0x49, - 0x0f, 0xc7, 0x8f, 0x5c, 0xd1, 0x9e, 0x74, 0xf7, 0xfb, 0x58, 0x78, 0xbf, 0x61, 0xc1, 0x98, 0x19, - 0x93, 0x82, 0x1a, 0x19, 0x45, 0x71, 0xb5, 0xab, 0x00, 0xdb, 0x4f, 0xf7, 0xba, 0x6d, 0xa2, 0xe1, - 0x25, 0x41, 0x18, 0x3f, 0x4f, 0xfc, 0x86, 0xe7, 0x13, 0xe6, 0xb9, 0xe4, 0xb1, 0x2c, 0xa9, 0x80, - 0x97, 0xf9, 0xa0, 0x46, 0x0e, 0xa1, 0x69, 0xda, 0x37, 0x61, 0xb2, 0x2b, 0x15, 0x61, 0x80, 0xfd, - 0x79, 0xdf, 0x44, 0x30, 0x1b, 0xc3, 0x28, 0x25, 0xbc, 0x1a, 0xf2, 0xa0, 0x93, 0x79, 0x98, 0xe4, - 0x3a, 0x04, 0xe5, 0xb4, 0xee, 0x6e, 0x91, 0x96, 0x4a, 0x2f, 0x61, 0x27, 0xc0, 0x37, 0xb2, 0x40, - 0xdc, 0x8d, 0x6f, 0x7f, 0xcb, 0x82, 0xf1, 0x54, 0x76, 0x48, 0x4e, 0x9a, 0x04, 0x5b, 0x69, 0x01, - 0x0b, 0x91, 0x62, 0x51, 0xa2, 0x45, 0xb6, 0x23, 0xe9, 0x95, 0xa6, 0x41, 0xd8, 0xc4, 0xb3, 0xdf, - 0x29, 0x40, 0x59, 0x7a, 0xad, 0x07, 0xe8, 0xca, 0x37, 0x2c, 0x18, 0x57, 0xa7, 0xee, 0xec, 0x38, - 0x87, 0x4f, 0xc6, 0x6b, 0x47, 0xf7, 0x9b, 0xab, 0x18, 0x3e, 0xbf, 0x1e, 0x68, 0xb5, 0x16, 0x9b, - 0xcc, 0x70, 0x9a, 0x37, 0xba, 0x01, 0x10, 0x77, 0xe2, 0x84, 0xb4, 0x8c, 0x83, 0x25, 0xdb, 0x58, - 0x71, 0x33, 0x6e, 0x10, 0x11, 0xba, 0xbe, 0xae, 0x05, 0x35, 0xb2, 0xae, 0x30, 0xb5, 0x1e, 0xa2, - 0xdb, 0xb0, 0x41, 0xc9, 0xfe, 0xc7, 0x05, 0x38, 0x99, 0xed, 0x12, 0x7a, 0x1d, 0xc6, 0x24, 0x77, - 0xe3, 0xe6, 0x0c, 0xe9, 0xaa, 0x1f, 0xc3, 0x06, 0xec, 0xee, 0xde, 0xf4, 0x74, 0xf7, 0xcd, 0x25, - 0x33, 0x26, 0x0a, 0x4e, 0x11, 0xe3, 0xae, 0x0f, 0xe1, 0xa3, 0xab, 0x76, 0xe6, 0xc2, 0x50, 0xf8, - 0x2f, 0x0c, 0xd7, 0x87, 0x09, 0xc5, 0x19, 0x6c, 0xb4, 0x06, 0xa7, 0x8d, 0x96, 0x6b, 0xc4, 0x6b, - 0x6c, 0x6d, 0x06, 0x91, 0x34, 0x4f, 0x9e, 0xd4, 0xd1, 0x2f, 0xdd, 0x38, 0xb8, 0xe7, 0x93, 0x74, - 0xcb, 0x74, 0x9d, 0xd0, 0x71, 0xbd, 0xa4, 0x23, 0x4e, 0xca, 0x94, 0x6c, 0x9a, 0x17, 0xed, 0x58, - 0x61, 0xd8, 0x2b, 0x30, 0x34, 0xe0, 0x0c, 0x1a, 0x48, 0x2d, 0x7e, 0x15, 0xca, 0x94, 0x9c, 0xd4, - 0x91, 0xf2, 0x20, 0x19, 0x40, 0x59, 0x16, 0xbf, 0x46, 0x36, 0x14, 0x3d, 0x47, 0x7a, 0x97, 0xd4, - 0x6b, 0x2d, 0xc5, 0x71, 0x9b, 0x59, 0x9a, 0x14, 0x88, 0x9e, 0x86, 0x22, 0xd9, 0x0d, 0xb3, 0x6e, - 0xa4, 0x8b, 0xbb, 0xa1, 0x17, 0x91, 0x98, 0x22, 0x91, 0xdd, 0x10, 0x9d, 0x85, 0x82, 0x57, 0x13, - 0x9b, 0x14, 0x08, 0x9c, 0xc2, 0xd2, 0x02, 0x2e, 0x78, 0x35, 0x7b, 0x17, 0x2a, 0xaa, 0xda, 0x36, - 0xda, 0x96, 0xb2, 0xdb, 0xca, 0x23, 0xcc, 0x44, 0xd2, 0xed, 0x23, 0xb5, 0xdb, 0x00, 0x3a, 0x17, - 0x27, 0x2f, 0xf9, 0x72, 0x1e, 0x86, 0xdc, 0x40, 0xa4, 0xf0, 0x95, 0x35, 0x19, 0x26, 0xb4, 0x19, - 0xc4, 0xbe, 0x09, 0x13, 0x57, 0xfd, 0xe0, 0x36, 0x2b, 0x27, 0xca, 0x8a, 0x9d, 0x50, 0xc2, 0x75, - 0xfa, 0x23, 0xab, 0x22, 0x30, 0x28, 0xe6, 0x30, 0x55, 0xa7, 0xa3, 0xd0, 0xaf, 0x4e, 0x87, 0xfd, - 0x25, 0x0b, 0x4e, 0xaa, 0x24, 0x11, 0x29, 0x8d, 0x5f, 0x82, 0xb1, 0xcd, 0xb6, 0xd7, 0xac, 0x89, - 0xff, 0x59, 0x5b, 0xbf, 0x6a, 0xc0, 0x70, 0x0a, 0x93, 0x5a, 0x26, 0x9b, 0x9e, 0xef, 0x44, 0x9d, - 0x35, 0x2d, 0xfe, 0x95, 0x44, 0xa8, 0x2a, 0x08, 0x36, 0xb0, 0xec, 0xaf, 0x14, 0x60, 0x3c, 0x95, - 0x32, 0x8f, 0x9a, 0x50, 0x26, 0x4d, 0x76, 0x02, 0x25, 0x3f, 0xea, 0x51, 0xeb, 0x68, 0xa9, 0x89, - 0x78, 0x51, 0xd0, 0xc5, 0x8a, 0xc3, 0x43, 0xe1, 0x66, 0xb1, 0xff, 0xa0, 0x08, 0x53, 0xfc, 0xe0, - 0xad, 0xa6, 0xe2, 0x19, 0x56, 0xa4, 0x76, 0xf2, 0x37, 0x75, 0x79, 0x0a, 0x3e, 0x1c, 0x9b, 0x47, - 0xad, 0x04, 0xd9, 0x9b, 0xd1, 0x40, 0x9e, 0xf6, 0x5f, 0xcf, 0x78, 0xda, 0x0b, 0x79, 0x24, 0x44, - 0xf4, 0xed, 0xd1, 0x8f, 0x96, 0xeb, 0xfd, 0x1f, 0x14, 0xe0, 0x44, 0xa6, 0xcc, 0x26, 0x7a, 0x3b, - 0x5d, 0x48, 0xcb, 0xca, 0xe3, 0x78, 0xe6, 0x9e, 0xc5, 0x1e, 0x0f, 0x56, 0x4e, 0xeb, 0x41, 0x4d, - 0xf8, 0x3f, 0x2c, 0xc0, 0x44, 0xba, 0x3e, 0xe8, 0x43, 0x38, 0x52, 0x1f, 0x83, 0x0a, 0xab, 0xba, - 0xc7, 0xee, 0x34, 0xe1, 0xa7, 0x40, 0xbc, 0x38, 0x9c, 0x6c, 0xc4, 0x1a, 0xfe, 0x50, 0x54, 0x29, - 0xb3, 0xff, 0xa1, 0x05, 0x67, 0xf8, 0x5b, 0x66, 0xe7, 0xe1, 0xdf, 0xea, 0x35, 0xba, 0x6f, 0xe4, - 0xdb, 0xc1, 0x4c, 0x59, 0x95, 0xfd, 0xc6, 0x97, 0xdd, 0xa5, 0x20, 0x7a, 0x9b, 0x9e, 0x0a, 0x0f, - 0x61, 0x67, 0x0f, 0x34, 0x19, 0xec, 0x3f, 0x2c, 0x82, 0xbe, 0x3e, 0x02, 0x79, 0x22, 0x6d, 0x22, - 0x97, 0xf2, 0x32, 0xeb, 0x1d, 0xdf, 0xd5, 0x17, 0x55, 0x94, 0x33, 0x59, 0x13, 0xbf, 0x6c, 0xc1, - 0xa8, 0xe7, 0x7b, 0x89, 0xe7, 0x30, 0xa5, 0x33, 0x9f, 0xf2, 0xf7, 0x8a, 0xdd, 0x12, 0xa7, 0x1c, - 0x44, 0xe6, 0xd1, 0xa1, 0x62, 0x86, 0x4d, 0xce, 0xe8, 0xf3, 0x22, 0x18, 0xae, 0x98, 0x5b, 0xc2, - 0x4f, 0x39, 0x13, 0x01, 0x17, 0x42, 0x29, 0x22, 0x49, 0x24, 0x53, 0xad, 0xae, 0x1e, 0x35, 0xc2, - 0x39, 0x89, 0x3a, 0xaa, 0x9a, 0x98, 0xbe, 0xc8, 0x8b, 0x36, 0x63, 0xce, 0xc8, 0x8e, 0x01, 0x75, - 0x8f, 0xc5, 0x01, 0x03, 0x8d, 0x66, 0xa1, 0xe2, 0xb4, 0x93, 0xa0, 0x45, 0x87, 0x49, 0x9c, 0x6e, - 0xea, 0x50, 0x2a, 0x09, 0xc0, 0x1a, 0xc7, 0x7e, 0xbb, 0x04, 0x99, 0x3c, 0x06, 0xb4, 0x6b, 0x5e, - 0x7d, 0x62, 0xe5, 0x7b, 0xf5, 0x89, 0xea, 0x4c, 0xaf, 0xeb, 0x4f, 0x50, 0x03, 0x4a, 0xe1, 0x96, - 0x13, 0x4b, 0x9d, 0xf2, 0x55, 0x39, 0x4c, 0x6b, 0xb4, 0xf1, 0xee, 0xde, 0xf4, 0xcf, 0x0c, 0x76, - 0x46, 0x41, 0xe7, 0xea, 0x2c, 0x4f, 0x30, 0xd6, 0xac, 0x19, 0x0d, 0xcc, 0xe9, 0x1f, 0xe4, 0x02, - 0x80, 0x2f, 0x8b, 0xd2, 0x8c, 0x98, 0xc4, 0xed, 0x66, 0x22, 0x66, 0xc3, 0xab, 0x39, 0xae, 0x32, - 0x4e, 0x58, 0x67, 0xe0, 0xf1, 0xff, 0xd8, 0x60, 0x8a, 0x5e, 0x87, 0x4a, 0x9c, 0x38, 0x51, 0x72, - 0xc8, 0x9c, 0x19, 0x35, 0xe8, 0xeb, 0x92, 0x08, 0xd6, 0xf4, 0xd0, 0x6b, 0xac, 0xda, 0x96, 0x17, - 0x6f, 0x1d, 0x32, 0x86, 0x55, 0x56, 0xe6, 0x12, 0x14, 0xb0, 0x41, 0x8d, 0xaa, 0xec, 0x6c, 0x6e, - 0xf3, 0xc0, 0x8d, 0x32, 0xb3, 0xc9, 0x94, 0x28, 0xc4, 0x0a, 0x82, 0x0d, 0x2c, 0xfb, 0x8b, 0x70, - 0x2a, 0x7b, 0x57, 0x9a, 0x38, 0xb6, 0x6c, 0x44, 0x41, 0x3b, 0xcc, 0xda, 0x24, 0xec, 0x2e, 0x2d, - 0xcc, 0x61, 0xd4, 0x26, 0xd9, 0xf6, 0xfc, 0x5a, 0xd6, 0x26, 0xb9, 0xea, 0xf9, 0x35, 0xcc, 0x20, - 0x03, 0xdc, 0x09, 0xf3, 0xaf, 0x2c, 0x38, 0xbf, 0xdf, 0x95, 0x6e, 0xe8, 0x49, 0x18, 0xba, 0xed, - 0x44, 0xb2, 0x7a, 0x1f, 0x93, 0x1d, 0x37, 0x9d, 0xc8, 0xc7, 0xac, 0x15, 0x75, 0x60, 0x98, 0xe7, - 0x28, 0x0a, 0x05, 0xf6, 0xd5, 0x7c, 0x2f, 0x98, 0xbb, 0x4a, 0x0c, 0x0d, 0x9a, 0xe7, 0x47, 0x62, - 0xc1, 0xd0, 0xfe, 0xc0, 0x02, 0xb4, 0xba, 0x43, 0xa2, 0xc8, 0xab, 0x19, 0x59, 0x95, 0xe8, 0x45, - 0x18, 0xbb, 0xb5, 0xbe, 0x7a, 0x6d, 0x2d, 0xf0, 0x7c, 0x96, 0x63, 0x6d, 0xe4, 0xa5, 0x5c, 0x31, - 0xda, 0x71, 0x0a, 0x0b, 0xcd, 0xc3, 0xe4, 0xad, 0x37, 0xa9, 0x1d, 0x65, 0x96, 0xe4, 0x2d, 0xe8, - 0x93, 0xb3, 0x2b, 0xaf, 0x66, 0x80, 0xb8, 0x1b, 0x1f, 0xad, 0xc2, 0x99, 0x16, 0xd7, 0xc0, 0x79, - 0x25, 0x4d, 0xae, 0x8e, 0x47, 0xb2, 0x52, 0xc3, 0xe3, 0x77, 0xf6, 0xa6, 0xcf, 0xac, 0xf4, 0x42, - 0xc0, 0xbd, 0x9f, 0xb3, 0xdf, 0x2b, 0xc0, 0xa8, 0x71, 0x2d, 0xe2, 0x00, 0x86, 0x72, 0xe6, 0x26, - 0xc7, 0xc2, 0x80, 0x37, 0x39, 0x3e, 0x0b, 0xe5, 0x30, 0x68, 0x7a, 0xae, 0xa7, 0xca, 0x4a, 0xb0, - 0xea, 0x67, 0x6b, 0xa2, 0x0d, 0x2b, 0x28, 0xba, 0x0d, 0x15, 0x75, 0x55, 0x98, 0x48, 0xee, 0xcb, - 0xeb, 0xa8, 0x40, 0x2d, 0x5e, 0x7d, 0x05, 0x98, 0xe6, 0x85, 0x6c, 0x18, 0x66, 0x33, 0x5f, 0x86, - 0x34, 0xb1, 0xac, 0x0b, 0xb6, 0x24, 0x62, 0x2c, 0x20, 0xf6, 0xd7, 0x46, 0xe0, 0x74, 0xaf, 0x8a, - 0x5d, 0xe8, 0x0b, 0x30, 0xcc, 0xfb, 0x98, 0x4f, 0x51, 0xc8, 0x5e, 0x3c, 0x16, 0x19, 0x41, 0xd1, - 0x2d, 0xf6, 0x1b, 0x0b, 0x9e, 0x82, 0x7b, 0xd3, 0xd9, 0x14, 0x6a, 0xc4, 0xf1, 0x70, 0x5f, 0x76, - 0x34, 0xf7, 0x65, 0x87, 0x73, 0x6f, 0x3a, 0x9b, 0x68, 0x17, 0x4a, 0x0d, 0x2f, 0x21, 0x8e, 0x50, - 0xa6, 0x6f, 0x1e, 0x0b, 0x73, 0xe2, 0xf0, 0xc8, 0x79, 0xf6, 0x13, 0x73, 0x86, 0xe8, 0x5d, 0x0b, - 0x4e, 0x6c, 0xa6, 0x93, 0x58, 0xc4, 0xae, 0xe2, 0x1c, 0x43, 0x55, 0xb6, 0x34, 0x23, 0x5e, 0xeb, - 0x36, 0xd3, 0x88, 0xb3, 0xdd, 0x41, 0xbf, 0x68, 0xc1, 0x48, 0xdd, 0x6b, 0x1a, 0x25, 0x87, 0x8e, - 0xe1, 0xe3, 0x5c, 0x62, 0x0c, 0xf4, 0xce, 0xcb, 0xff, 0xc7, 0x58, 0x72, 0xee, 0xe7, 0xce, 0x1b, - 0x3e, 0xaa, 0x3b, 0x6f, 0xe4, 0x01, 0x99, 0x4f, 0xbf, 0x5a, 0x80, 0xa7, 0x07, 0xf8, 0x46, 0x66, - 0x52, 0x84, 0xb5, 0x4f, 0x52, 0xc4, 0x79, 0x18, 0x8a, 0x48, 0x18, 0x64, 0xf7, 0x3b, 0x16, 0x39, - 0xc4, 0x20, 0xe8, 0x29, 0x28, 0x3a, 0xa1, 0x27, 0xb6, 0x3b, 0xe5, 0xed, 0x9f, 0x5b, 0x5b, 0xc2, - 0xb4, 0x9d, 0x7e, 0xe9, 0xca, 0xa6, 0x4c, 0xad, 0xca, 0xa7, 0xee, 0x74, 0xbf, 0x4c, 0x2d, 0x6e, - 0xd0, 0x28, 0x28, 0xd6, 0x7c, 0xed, 0x55, 0x38, 0xdb, 0x7f, 0x86, 0xa0, 0x17, 0x60, 0x74, 0x33, - 0x72, 0x7c, 0x77, 0x8b, 0xd5, 0x68, 0x97, 0x63, 0xc2, 0x42, 0xe1, 0x75, 0x33, 0x36, 0x71, 0xec, - 0x3f, 0x28, 0xf4, 0xa6, 0xc8, 0x85, 0xc0, 0x41, 0x46, 0x58, 0x8c, 0x5f, 0xa1, 0xcf, 0xf8, 0xbd, - 0x09, 0xe5, 0x84, 0x45, 0xe2, 0x93, 0xba, 0x90, 0x24, 0xb9, 0x25, 0x93, 0xb1, 0xbd, 0x66, 0x43, - 0x10, 0xc7, 0x8a, 0x0d, 0x15, 0xf9, 0x4d, 0x5d, 0xad, 0x48, 0x88, 0xfc, 0xcc, 0x39, 0xda, 0x02, - 0x9c, 0x34, 0x8a, 0x2f, 0xf2, 0x40, 0x64, 0xee, 0x46, 0x55, 0xd9, 0x39, 0x6b, 0x19, 0x38, 0xee, - 0x7a, 0xc2, 0xfe, 0x8d, 0x02, 0x3c, 0xde, 0x57, 0xb2, 0x69, 0x5f, 0xaf, 0x75, 0x0f, 0x5f, 0xef, - 0x91, 0x27, 0xa8, 0x39, 0xc0, 0x43, 0xf7, 0x67, 0x80, 0x9f, 0x83, 0xb2, 0xe7, 0xc7, 0xc4, 0x6d, - 0x47, 0x7c, 0xd0, 0x8c, 0xb0, 0xbc, 0x25, 0xd1, 0x8e, 0x15, 0x86, 0xfd, 0x47, 0xfd, 0xa7, 0x1a, - 0xdd, 0xe5, 0x7e, 0x6c, 0x47, 0xe9, 0x65, 0x18, 0x77, 0xc2, 0x90, 0xe3, 0x31, 0xbf, 0x5a, 0x26, - 0xdf, 0x6e, 0xce, 0x04, 0xe2, 0x34, 0xae, 0x31, 0x87, 0x87, 0xfb, 0xcd, 0x61, 0xfb, 0x4f, 0x2d, - 0xa8, 0x60, 0x52, 0xe7, 0x45, 0x3b, 0xd1, 0x2d, 0x31, 0x44, 0x56, 0x1e, 0xc5, 0x21, 0xd8, 0x85, - 0xe3, 0x1e, 0x2b, 0x9a, 0xd0, 0x6b, 0xb0, 0xbb, 0x0b, 0x89, 0x16, 0x0e, 0x54, 0x48, 0x54, 0x95, - 0x92, 0x2c, 0xf6, 0x2f, 0x25, 0x69, 0xbf, 0x37, 0x42, 0x5f, 0x2f, 0x0c, 0xe6, 0x23, 0x52, 0x8b, - 0xe9, 0xf7, 0x6d, 0x47, 0xcd, 0xec, 0x3d, 0x8c, 0xd7, 0xf1, 0x32, 0xa6, 0xed, 0xa9, 0x43, 0x80, - 0xc2, 0x81, 0xb2, 0x8d, 0x8a, 0xfb, 0x66, 0x1b, 0xbd, 0x0c, 0xe3, 0x71, 0xbc, 0xb5, 0x16, 0x79, - 0x3b, 0x4e, 0x42, 0x4d, 0x0b, 0x11, 0x96, 0xa1, 0x33, 0x04, 0xd6, 0x2f, 0x6b, 0x20, 0x4e, 0xe3, - 0xa2, 0x45, 0x98, 0xd4, 0x39, 0x3f, 0x24, 0x4a, 0x58, 0x14, 0x06, 0x9f, 0x09, 0x2a, 0x40, 0x5f, - 0x67, 0x09, 0x09, 0x04, 0xdc, 0xfd, 0x0c, 0x95, 0x58, 0xa9, 0x46, 0xda, 0x91, 0xe1, 0xb4, 0xc4, - 0x4a, 0xd1, 0xa1, 0x7d, 0xe9, 0x7a, 0x02, 0xad, 0xc0, 0x29, 0x3e, 0x31, 0xd8, 0xc5, 0xbf, 0xea, - 0x8d, 0x78, 0xd4, 0xcc, 0x13, 0x82, 0xd0, 0xa9, 0xc5, 0x6e, 0x14, 0xdc, 0xeb, 0x39, 0x6a, 0x37, - 0xa8, 0xe6, 0xa5, 0x05, 0x61, 0xbf, 0x2a, 0xbb, 0x41, 0x91, 0x59, 0xaa, 0x61, 0x13, 0x0f, 0x7d, - 0x06, 0x1e, 0xd3, 0x7f, 0x79, 0xbc, 0x1b, 0x3f, 0xd4, 0x59, 0x10, 0xe9, 0x94, 0xaa, 0x70, 0xe1, - 0x62, 0x4f, 0xb4, 0x1a, 0xee, 0xf7, 0x3c, 0xda, 0x84, 0xb3, 0x0a, 0x74, 0x91, 0x1a, 0x69, 0x61, - 0xe4, 0xc5, 0xa4, 0xea, 0xc4, 0xe4, 0x7a, 0xd4, 0x64, 0x09, 0x98, 0x15, 0x5d, 0x81, 0x7d, 0xd1, - 0x4b, 0x2e, 0xf7, 0xc2, 0xc4, 0xcb, 0xf8, 0x1e, 0x54, 0xd0, 0x2c, 0x54, 0x88, 0xef, 0x6c, 0x36, - 0xc9, 0xea, 0xfc, 0x12, 0x4b, 0xcb, 0x34, 0xce, 0x90, 0x2e, 0x4a, 0x00, 0xd6, 0x38, 0xca, 0x13, - 0x38, 0xd6, 0xb7, 0x62, 0xff, 0x1a, 0x9c, 0x6e, 0xb8, 0x21, 0xd5, 0x03, 0x3c, 0x97, 0xcc, 0xb9, - 0x2e, 0x35, 0xf4, 0xe9, 0x87, 0xe1, 0x85, 0x54, 0x95, 0x9b, 0x7b, 0x71, 0x7e, 0xad, 0x0b, 0x07, - 0xf7, 0x7c, 0x92, 0xae, 0xb1, 0x30, 0x0a, 0x76, 0x3b, 0x53, 0xa7, 0xd2, 0x6b, 0x6c, 0x8d, 0x36, - 0x62, 0x0e, 0x43, 0x57, 0x00, 0xb1, 0x98, 0x89, 0xcb, 0x49, 0x12, 0x2a, 0xc5, 0x63, 0xea, 0x34, - 0x7b, 0xa5, 0xb3, 0xe2, 0x09, 0x74, 0xa9, 0x0b, 0x03, 0xf7, 0x78, 0xca, 0xfe, 0x13, 0x0b, 0xc6, - 0xd5, 0x7a, 0xbd, 0x0f, 0x51, 0x43, 0xcd, 0x74, 0xd4, 0xd0, 0xe2, 0xd1, 0x25, 0x1e, 0xeb, 0x79, - 0x1f, 0xd7, 0xf3, 0xd7, 0x46, 0x01, 0xb4, 0x54, 0x54, 0x1b, 0x92, 0xd5, 0x77, 0x43, 0x7a, 0x68, - 0x25, 0x52, 0xaf, 0x1c, 0xac, 0xd2, 0x83, 0xcd, 0xc1, 0x5a, 0x87, 0x33, 0x52, 0x5d, 0xe0, 0x47, - 0x32, 0x97, 0x83, 0x58, 0x09, 0xb8, 0x72, 0xf5, 0x29, 0x41, 0xe8, 0xcc, 0x52, 0x2f, 0x24, 0xdc, - 0xfb, 0xd9, 0x94, 0x96, 0x32, 0xb2, 0x9f, 0x96, 0xa2, 0xd7, 0xf4, 0x72, 0x5d, 0x96, 0x41, 0xcc, - 0xac, 0xe9, 0xe5, 0x4b, 0xeb, 0x58, 0xe3, 0xf4, 0x16, 0xec, 0x95, 0x9c, 0x04, 0x3b, 0x1c, 0x58, - 0xb0, 0x4b, 0x11, 0x33, 0xda, 0x57, 0xc4, 0xc8, 0x53, 0xa0, 0xb1, 0xbe, 0xa7, 0x40, 0xaf, 0xc0, - 0x84, 0xe7, 0x6f, 0x91, 0xc8, 0x4b, 0x48, 0x8d, 0xad, 0x05, 0x71, 0xb9, 0xbd, 0xda, 0xd6, 0x97, - 0x52, 0x50, 0x9c, 0xc1, 0x4e, 0xcb, 0xc5, 0x89, 0x01, 0xe4, 0x62, 0x9f, 0xdd, 0xe8, 0x44, 0x3e, - 0xbb, 0xd1, 0xc9, 0xa3, 0xef, 0x46, 0x93, 0xc7, 0xba, 0x1b, 0xa1, 0x5c, 0x76, 0xa3, 0x81, 0x04, - 0xbd, 0x61, 0xd0, 0x9d, 0xde, 0xc7, 0xa0, 0xeb, 0xb7, 0x15, 0x9d, 0x39, 0xf4, 0x56, 0xd4, 0x7b, - 0x97, 0x79, 0xf4, 0x50, 0xbb, 0xcc, 0xd7, 0x0b, 0x70, 0x46, 0xcb, 0x61, 0x3a, 0xfb, 0xbd, 0x3a, - 0x95, 0x44, 0xac, 0x92, 0x2e, 0x0f, 0x47, 0x31, 0x82, 0xd8, 0x74, 0x3c, 0x9c, 0x82, 0x60, 0x03, - 0x8b, 0xc5, 0x82, 0x91, 0x88, 0x95, 0x98, 0xc9, 0x0a, 0xe9, 0x79, 0xd1, 0x8e, 0x15, 0x06, 0x9d, - 0x5f, 0xf4, 0xb7, 0x88, 0xaf, 0xcd, 0xa6, 0x9d, 0xcf, 0x6b, 0x10, 0x36, 0xf1, 0xd0, 0xb3, 0x9c, - 0x09, 0x13, 0x10, 0x54, 0x50, 0x8f, 0x89, 0x3b, 0x22, 0xa4, 0x4c, 0x50, 0x50, 0xd9, 0x1d, 0x16, - 0xf4, 0x57, 0xea, 0xee, 0x0e, 0x73, 0xbe, 0x29, 0x0c, 0xfb, 0xff, 0x5a, 0xf0, 0x78, 0xcf, 0xa1, - 0xb8, 0x0f, 0x9b, 0xef, 0x6e, 0x7a, 0xf3, 0x5d, 0xcf, 0xcb, 0xdc, 0x30, 0xde, 0xa2, 0xcf, 0x46, - 0xfc, 0x9f, 0x2c, 0x98, 0xd0, 0xf8, 0xf7, 0xe1, 0x55, 0xbd, 0xf4, 0xab, 0xe6, 0x67, 0x59, 0x55, - 0xba, 0xde, 0xed, 0x4f, 0xd8, 0xbb, 0x71, 0x1f, 0xc6, 0x1c, 0xdb, 0x1f, 0x07, 0x38, 0xbb, 0xef, - 0xc0, 0x30, 0xab, 0xca, 0x1a, 0xe7, 0xe3, 0x4b, 0x49, 0xf3, 0x67, 0xd1, 0xbc, 0xda, 0x97, 0xc2, - 0xfe, 0xc6, 0x58, 0x30, 0x64, 0x05, 0x90, 0xbc, 0x98, 0x4a, 0xf3, 0x9a, 0x08, 0x9f, 0xd3, 0x05, - 0x90, 0x44, 0x3b, 0x56, 0x18, 0x76, 0x0b, 0xa6, 0xd2, 0xc4, 0x17, 0x48, 0x9d, 0xb9, 0xac, 0x07, - 0x7a, 0xcd, 0x59, 0xa8, 0x38, 0xec, 0xa9, 0xe5, 0xb6, 0x93, 0xbd, 0x56, 0x68, 0x4e, 0x02, 0xb0, - 0xc6, 0xb1, 0x7f, 0xc7, 0x82, 0x53, 0x3d, 0x5e, 0x26, 0xc7, 0xb0, 0xc1, 0x44, 0x4b, 0x81, 0x5e, - 0x1b, 0xee, 0x47, 0x61, 0xa4, 0x46, 0xea, 0x8e, 0x74, 0x8a, 0x1a, 0x32, 0x77, 0x81, 0x37, 0x63, - 0x09, 0xb7, 0xff, 0x97, 0x05, 0x27, 0xd2, 0x7d, 0x8d, 0xa9, 0xd4, 0xe4, 0x2f, 0xb3, 0xe0, 0xc5, - 0x6e, 0xb0, 0x43, 0xa2, 0x0e, 0x7d, 0x73, 0xde, 0x6b, 0x25, 0x35, 0xe7, 0xba, 0x30, 0x70, 0x8f, - 0xa7, 0x58, 0x81, 0x96, 0x9a, 0x1a, 0x6d, 0x39, 0x53, 0x6e, 0xe4, 0x39, 0x53, 0xf4, 0xc7, 0x34, - 0x1d, 0x47, 0x8a, 0x25, 0x36, 0xf9, 0xdb, 0x1f, 0x0c, 0x81, 0x8a, 0x2b, 0x66, 0xee, 0xb7, 0x9c, - 0x9c, 0x97, 0xa9, 0x0a, 0xd4, 0xc5, 0x01, 0xee, 0x9e, 0x92, 0x93, 0x61, 0xe8, 0x5e, 0xae, 0x31, - 0x7e, 0x7a, 0x61, 0x1e, 0x12, 0xaa, 0x37, 0xdc, 0xd0, 0x20, 0x6c, 0xe2, 0xd1, 0x9e, 0x34, 0xbd, - 0x1d, 0xc2, 0x1f, 0x1a, 0x4e, 0xf7, 0x64, 0x59, 0x02, 0xb0, 0xc6, 0xa1, 0x3d, 0xa9, 0x79, 0xf5, - 0xba, 0x30, 0xc5, 0x55, 0x4f, 0xe8, 0xe8, 0x60, 0x06, 0xa1, 0x18, 0x5b, 0x41, 0xb0, 0x2d, 0xb4, - 0x53, 0x85, 0x71, 0x39, 0x08, 0xb6, 0x31, 0x83, 0x50, 0x7d, 0xca, 0x0f, 0xa2, 0x16, 0xbb, 0xf6, - 0xa9, 0xa6, 0xb8, 0x08, 0xad, 0x54, 0xe9, 0x53, 0xd7, 0xba, 0x51, 0x70, 0xaf, 0xe7, 0xe8, 0x0c, - 0x0c, 0x23, 0x52, 0xf3, 0xdc, 0xc4, 0xa4, 0x06, 0xe9, 0x19, 0xb8, 0xd6, 0x85, 0x81, 0x7b, 0x3c, - 0x85, 0xe6, 0xe0, 0x84, 0x8c, 0x0b, 0x97, 0xa9, 0x73, 0xa3, 0xe9, 0x54, 0x1d, 0x9c, 0x06, 0xe3, - 0x2c, 0x3e, 0x95, 0x36, 0x2d, 0x91, 0x35, 0xcb, 0x94, 0x58, 0x43, 0xda, 0xc8, 0x6c, 0x5a, 0xac, - 0x30, 0xec, 0x2f, 0x17, 0xe9, 0xee, 0xd8, 0xa7, 0x7a, 0xee, 0x7d, 0x73, 0x96, 0xa7, 0x67, 0xe4, - 0xd0, 0x00, 0x33, 0xf2, 0x45, 0x18, 0xbb, 0x15, 0x07, 0xbe, 0x72, 0x44, 0x97, 0xfa, 0x3a, 0xa2, - 0x0d, 0xac, 0xde, 0x8e, 0xe8, 0xe1, 0xbc, 0x1c, 0xd1, 0x23, 0x87, 0x74, 0x44, 0x7f, 0xaf, 0x04, - 0xaa, 0xfe, 0xe4, 0x35, 0x92, 0xdc, 0x0e, 0xa2, 0x6d, 0xcf, 0x6f, 0xb0, 0x78, 0xfa, 0x77, 0x2d, - 0x18, 0xe3, 0xeb, 0x65, 0xd9, 0x8c, 0xad, 0xad, 0xe7, 0x54, 0x27, 0x31, 0xc5, 0x6c, 0x66, 0xc3, - 0x60, 0x94, 0xb9, 0x55, 0xc0, 0x04, 0xe1, 0x54, 0x8f, 0xd0, 0xcf, 0x03, 0xc8, 0x73, 0xcb, 0xba, - 0x14, 0x99, 0x4b, 0xf9, 0xf4, 0x0f, 0x93, 0xba, 0xd6, 0x4d, 0x37, 0x14, 0x13, 0x6c, 0x30, 0x44, - 0x5f, 0xcf, 0x5e, 0x8b, 0xf7, 0xf9, 0x63, 0x19, 0x9b, 0x41, 0xa2, 0x8e, 0x31, 0x8c, 0x78, 0x7e, - 0x83, 0xce, 0x13, 0xe1, 0xbb, 0xff, 0x48, 0xaf, 0x5c, 0x94, 0xe5, 0xc0, 0xa9, 0x55, 0x9d, 0xa6, - 0xe3, 0xbb, 0x24, 0x5a, 0xe2, 0xe8, 0xe6, 0x35, 0x37, 0xac, 0x01, 0x4b, 0x42, 0x5d, 0x85, 0x40, - 0x4b, 0x83, 0x14, 0x02, 0x3d, 0xfb, 0x29, 0x98, 0xec, 0xfa, 0x98, 0x07, 0x0a, 0x32, 0x3e, 0x7c, - 0x7c, 0xb2, 0xfd, 0xaf, 0x87, 0xf5, 0xa6, 0x75, 0x2d, 0xa8, 0xf1, 0x72, 0x94, 0x91, 0xfe, 0xa2, - 0x42, 0xf7, 0xcc, 0x71, 0x8a, 0x18, 0x57, 0xe5, 0xa8, 0x46, 0x6c, 0xb2, 0xa4, 0x73, 0x34, 0x74, - 0x22, 0xe2, 0x1f, 0xf7, 0x1c, 0x5d, 0x53, 0x4c, 0xb0, 0xc1, 0x10, 0x6d, 0xa5, 0xa2, 0x0c, 0x2f, - 0x1d, 0x3d, 0xca, 0x90, 0xa5, 0xba, 0xf6, 0xaa, 0xb7, 0xf7, 0x1d, 0x0b, 0x26, 0xfc, 0xd4, 0xcc, - 0x15, 0x7e, 0x9c, 0x8d, 0xe3, 0x58, 0x15, 0xbc, 0x7c, 0x71, 0xba, 0x0d, 0x67, 0xf8, 0xf7, 0xda, - 0xd2, 0x4a, 0x07, 0xdc, 0xd2, 0x74, 0x5d, 0xdb, 0xe1, 0x7e, 0x75, 0x6d, 0x91, 0xaf, 0x2a, 0x71, - 0x8f, 0xe4, 0x5e, 0x89, 0x1b, 0x7a, 0x54, 0xe1, 0xbe, 0x09, 0x15, 0x37, 0x22, 0x4e, 0x72, 0xc8, - 0xa2, 0xcc, 0xcc, 0x89, 0x3d, 0x2f, 0x09, 0x60, 0x4d, 0xcb, 0xfe, 0x8f, 0x45, 0x38, 0x29, 0x47, - 0x44, 0x46, 0x60, 0xd1, 0xfd, 0x91, 0xf3, 0xd5, 0xca, 0xad, 0xda, 0x1f, 0x2f, 0x4b, 0x00, 0xd6, - 0x38, 0x54, 0x1f, 0x6b, 0xc7, 0x64, 0x35, 0x24, 0xfe, 0xb2, 0xb7, 0x19, 0x0b, 0xff, 0xa3, 0x5a, - 0x28, 0xd7, 0x35, 0x08, 0x9b, 0x78, 0x54, 0x19, 0xe7, 0x7a, 0x71, 0x9c, 0x0d, 0x68, 0x14, 0xfa, - 0x36, 0x96, 0x70, 0xf4, 0x6b, 0x3d, 0xcb, 0xf9, 0xe7, 0x13, 0xca, 0xdb, 0x15, 0x78, 0x76, 0xc0, - 0x3a, 0xfe, 0x6f, 0x5b, 0x70, 0x62, 0x3b, 0x95, 0x8b, 0x24, 0x45, 0xf2, 0x11, 0xb3, 0x66, 0xd3, - 0x09, 0x4e, 0x7a, 0x0a, 0xa7, 0xdb, 0x63, 0x9c, 0xe5, 0x6e, 0xff, 0x6f, 0x0b, 0x4c, 0xf1, 0x34, - 0x98, 0x66, 0x65, 0x5c, 0xd8, 0x53, 0xd8, 0xe7, 0xc2, 0x1e, 0xa9, 0x84, 0x15, 0x07, 0x53, 0xfa, - 0x87, 0x0e, 0xa0, 0xf4, 0x97, 0xfa, 0x6a, 0x6d, 0x4f, 0x41, 0xb1, 0xed, 0xd5, 0x84, 0xde, 0xae, - 0xbd, 0x8d, 0x4b, 0x0b, 0x98, 0xb6, 0xdb, 0xff, 0xa2, 0xa4, 0xed, 0x74, 0x11, 0x81, 0xfa, 0x63, - 0xf1, 0xda, 0x75, 0x95, 0x04, 0xcd, 0xdf, 0xfc, 0x5a, 0x57, 0x12, 0xf4, 0x4f, 0x1d, 0x3c, 0xc0, - 0x98, 0x0f, 0x50, 0xbf, 0x1c, 0xe8, 0x91, 0x7d, 0xa2, 0x8b, 0x6f, 0x41, 0x99, 0x9a, 0x36, 0xec, - 0xc0, 0xad, 0x9c, 0xea, 0x54, 0xf9, 0xb2, 0x68, 0xbf, 0xbb, 0x37, 0xfd, 0x93, 0x07, 0xef, 0x96, - 0x7c, 0x1a, 0x2b, 0xfa, 0x28, 0x86, 0x0a, 0xfd, 0xcd, 0x02, 0xa1, 0x85, 0xd1, 0x74, 0x5d, 0xc9, - 0x22, 0x09, 0xc8, 0x25, 0xca, 0x5a, 0xf3, 0x41, 0x3e, 0x54, 0xd8, 0x55, 0x22, 0x8c, 0x29, 0xb7, - 0xad, 0xd6, 0x54, 0x38, 0xb2, 0x04, 0xdc, 0xdd, 0x9b, 0x7e, 0xf9, 0xe0, 0x4c, 0xd5, 0xe3, 0x58, - 0xb3, 0xb0, 0xdf, 0x19, 0xd2, 0x73, 0x57, 0xe4, 0xbe, 0xff, 0x58, 0xcc, 0xdd, 0x97, 0x32, 0x73, - 0xf7, 0x7c, 0xd7, 0xdc, 0x9d, 0xd0, 0x57, 0x5e, 0xa4, 0x66, 0xe3, 0xfd, 0xde, 0x60, 0xf7, 0xb7, - 0xe3, 0x99, 0x66, 0xf1, 0x66, 0xdb, 0x8b, 0x48, 0xbc, 0x16, 0xb5, 0x7d, 0xcf, 0x6f, 0x88, 0x4b, - 0xf8, 0x0c, 0xcd, 0x22, 0x05, 0xc6, 0x59, 0x7c, 0x76, 0x81, 0x5f, 0xc7, 0x77, 0x6f, 0x3a, 0x3b, - 0x7c, 0x56, 0x19, 0xe9, 0xc0, 0xeb, 0xa2, 0x1d, 0x2b, 0x0c, 0xfb, 0x3d, 0xe6, 0xbb, 0x35, 0x32, - 0x30, 0xe8, 0x9c, 0x68, 0xb2, 0xbb, 0x5b, 0x78, 0x2e, 0xb1, 0x9a, 0x13, 0xfc, 0xc2, 0x16, 0x0e, - 0x43, 0xb7, 0x61, 0x64, 0x93, 0xd7, 0x42, 0xcf, 0xa7, 0xf8, 0x98, 0x28, 0xac, 0xce, 0xea, 0x83, - 0xca, 0x2a, 0xeb, 0x77, 0xf5, 0x4f, 0x2c, 0xb9, 0xd9, 0xef, 0x0f, 0xc1, 0x89, 0xcc, 0xed, 0x1e, - 0xa9, 0x52, 0x28, 0x85, 0x7d, 0x4b, 0xa1, 0x7c, 0x16, 0xa0, 0x46, 0xc2, 0x66, 0xd0, 0x61, 0x6a, - 0xce, 0xd0, 0x81, 0xd5, 0x1c, 0xa5, 0x19, 0x2f, 0x28, 0x2a, 0xd8, 0xa0, 0x28, 0x12, 0xa8, 0x79, - 0x65, 0x95, 0x4c, 0x02, 0xb5, 0x51, 0xff, 0x6f, 0xf8, 0xfe, 0xd6, 0xff, 0xf3, 0xe0, 0x04, 0xef, - 0xa2, 0xca, 0x73, 0x38, 0x44, 0x3a, 0x03, 0x8b, 0x90, 0x5d, 0x48, 0x93, 0xc1, 0x59, 0xba, 0x0f, - 0xf2, 0xf2, 0x1e, 0xf4, 0x31, 0xa8, 0xc8, 0xef, 0x1c, 0x4f, 0x55, 0x74, 0xae, 0x98, 0x9c, 0x06, - 0xec, 0x52, 0x1d, 0xf1, 0xd3, 0xfe, 0x76, 0x81, 0x6a, 0xa5, 0xfc, 0x9f, 0xca, 0xf9, 0x7d, 0x06, - 0x86, 0x9d, 0x76, 0xb2, 0x15, 0x74, 0x55, 0x9f, 0x9f, 0x63, 0xad, 0x58, 0x40, 0xd1, 0x32, 0x0c, - 0xd5, 0x74, 0x1e, 0xe7, 0x41, 0x46, 0x51, 0x1f, 0xf0, 0x39, 0x09, 0xc1, 0x8c, 0x0a, 0x7a, 0x12, - 0x86, 0x12, 0xa7, 0x91, 0xba, 0x48, 0x72, 0xc3, 0x69, 0xc4, 0x98, 0xb5, 0x9a, 0x9b, 0xe6, 0xd0, - 0x3e, 0x9b, 0xe6, 0xcb, 0x30, 0x1e, 0x7b, 0x0d, 0xdf, 0x49, 0xda, 0x11, 0x31, 0x9c, 0x49, 0x3a, - 0x3e, 0xc0, 0x04, 0xe2, 0x34, 0xae, 0xfd, 0x41, 0x05, 0x4e, 0xf7, 0xba, 0xf0, 0x3b, 0xef, 0x68, - 0xf8, 0x5e, 0x3c, 0xee, 0x5f, 0x34, 0x7c, 0x1f, 0xee, 0x4d, 0x23, 0x1a, 0xbe, 0x69, 0x44, 0xc3, - 0x7f, 0xdd, 0x82, 0x8a, 0x0a, 0x02, 0x17, 0x81, 0xac, 0xaf, 0x1f, 0xc3, 0xa5, 0xea, 0x92, 0x85, - 0x88, 0x05, 0x96, 0x7f, 0xb1, 0x66, 0x7e, 0x7c, 0xe1, 0xf1, 0xf7, 0xec, 0xd0, 0x81, 0xc2, 0xe3, - 0x55, 0xee, 0x40, 0x29, 0x8f, 0xdc, 0x81, 0x3e, 0x9f, 0xaa, 0x67, 0xee, 0xc0, 0x77, 0x2c, 0x18, - 0x75, 0xde, 0x6a, 0x47, 0x64, 0x81, 0xec, 0xac, 0x86, 0xb1, 0x10, 0xb0, 0x6f, 0xe4, 0xdf, 0x81, - 0x39, 0xcd, 0x44, 0x94, 0xc9, 0xd5, 0x0d, 0xd8, 0xec, 0x42, 0x2a, 0x57, 0x60, 0x24, 0x8f, 0x5c, - 0x81, 0x5e, 0xdd, 0xd9, 0x37, 0x57, 0xe0, 0x65, 0x18, 0x77, 0x9b, 0x81, 0x4f, 0xd6, 0xa2, 0x20, - 0x09, 0xdc, 0xa0, 0x29, 0x94, 0x69, 0x25, 0x12, 0xe6, 0x4d, 0x20, 0x4e, 0xe3, 0xf6, 0x4b, 0x34, - 0xa8, 0x1c, 0x35, 0xd1, 0x00, 0x1e, 0x50, 0xa2, 0xc1, 0x9f, 0x17, 0x60, 0x7a, 0x9f, 0x8f, 0x8a, - 0x5e, 0x82, 0xb1, 0x20, 0x6a, 0x38, 0xbe, 0xf7, 0x16, 0xcf, 0xf3, 0x2c, 0xa5, 0xcb, 0x70, 0xac, - 0x1a, 0x30, 0x9c, 0xc2, 0x94, 0xa1, 0xc8, 0xc3, 0x7d, 0x42, 0x91, 0x3f, 0x01, 0xa3, 0x09, 0x71, - 0x5a, 0x22, 0xee, 0x42, 0x18, 0x40, 0xda, 0xa1, 0xa4, 0x41, 0xd8, 0xc4, 0xa3, 0xd3, 0x68, 0xc2, - 0x71, 0x5d, 0x12, 0xc7, 0x32, 0xd6, 0x58, 0x1c, 0xce, 0xe4, 0x16, 0xc8, 0xcc, 0xce, 0xbc, 0xe6, - 0x52, 0x2c, 0x70, 0x86, 0x25, 0xed, 0xbc, 0xd3, 0x6c, 0xf2, 0xb4, 0x02, 0x22, 0xaf, 0x86, 0xd6, - 0x55, 0x21, 0x34, 0x08, 0x9b, 0x78, 0xf6, 0x6f, 0x16, 0xe0, 0xa9, 0x7b, 0x8a, 0x97, 0x81, 0xc3, - 0xc0, 0xdb, 0x31, 0x89, 0xb2, 0x0e, 0x99, 0xeb, 0x31, 0x89, 0x30, 0x83, 0xf0, 0x51, 0x0a, 0x43, - 0xe3, 0x8a, 0x99, 0xbc, 0xb3, 0x0e, 0xf8, 0x28, 0xa5, 0x58, 0xe0, 0x0c, 0xcb, 0xec, 0x28, 0x0d, - 0x0d, 0x38, 0x4a, 0xff, 0xa8, 0x00, 0x4f, 0x0f, 0x20, 0x84, 0x73, 0xcc, 0xce, 0x48, 0x67, 0xb7, - 0x14, 0x1f, 0x4c, 0x76, 0xcb, 0x61, 0x87, 0xeb, 0xbd, 0x02, 0x9c, 0xed, 0x2f, 0x0b, 0xd1, 0x4f, - 0x53, 0x23, 0x4a, 0x06, 0x5b, 0x98, 0x99, 0x31, 0xa7, 0xb8, 0x01, 0x95, 0x02, 0xe1, 0x2c, 0x2e, - 0x9a, 0x01, 0x08, 0x9d, 0x64, 0x2b, 0xbe, 0xb8, 0xeb, 0xc5, 0x89, 0xc8, 0xe9, 0x9c, 0xe0, 0x47, - 0xe1, 0xb2, 0x15, 0x1b, 0x18, 0x94, 0x1d, 0xfb, 0xb7, 0x10, 0x5c, 0x0b, 0x12, 0xfe, 0x10, 0xd7, - 0xe3, 0x4e, 0xc9, 0x3a, 0x84, 0x06, 0x08, 0x67, 0x71, 0x29, 0x3b, 0xe6, 0x6c, 0xe1, 0x1d, 0x15, - 0xf7, 0xde, 0x53, 0x76, 0xcb, 0xaa, 0x15, 0x1b, 0x18, 0xd9, 0x9c, 0x9f, 0xd2, 0x00, 0x39, 0x3f, - 0xff, 0xac, 0x00, 0x8f, 0xf7, 0xdd, 0x4b, 0x07, 0x5b, 0x80, 0x0f, 0x5f, 0xb2, 0xcf, 0xe1, 0xe6, - 0xce, 0x01, 0x53, 0x58, 0xfe, 0xb4, 0xcf, 0x4c, 0x13, 0x29, 0x2c, 0xd9, 0xad, 0xc2, 0x3a, 0xe8, - 0x56, 0xf1, 0x10, 0x8d, 0x67, 0x57, 0xd6, 0xca, 0xd0, 0x01, 0xb2, 0x56, 0x32, 0x1f, 0xa3, 0x34, - 0xe0, 0x42, 0xfe, 0x7e, 0xff, 0xe1, 0xa5, 0xba, 0xf7, 0x40, 0xc7, 0x53, 0x0b, 0x70, 0xd2, 0xf3, - 0x59, 0x4d, 0xda, 0xf5, 0xf6, 0xa6, 0xc8, 0xf8, 0x2d, 0xa4, 0xaf, 0x5b, 0x5a, 0xca, 0xc0, 0x71, - 0xd7, 0x13, 0x0f, 0x61, 0x16, 0xd1, 0x21, 0x87, 0xf4, 0xb3, 0x50, 0x51, 0xb4, 0x79, 0x64, 0xa4, - 0xfa, 0xa0, 0x5d, 0x91, 0x91, 0xea, 0x6b, 0x1a, 0x58, 0x74, 0x24, 0xb6, 0x49, 0x27, 0x3b, 0x33, - 0xaf, 0x92, 0x0e, 0xf3, 0x92, 0xda, 0x1f, 0x87, 0x31, 0x65, 0x44, 0x0e, 0x5a, 0x33, 0xd5, 0x7e, - 0x67, 0x18, 0xc6, 0x53, 0x95, 0x1d, 0x52, 0x67, 0x36, 0xd6, 0xbe, 0x67, 0x36, 0x2c, 0xd2, 0xb5, - 0xed, 0xcb, 0xaa, 0xc4, 0x46, 0xa4, 0x6b, 0xdb, 0x27, 0x98, 0xc3, 0xa8, 0xe9, 0x5e, 0x8b, 0x3a, - 0xb8, 0xed, 0x8b, 0x88, 0x34, 0x65, 0xba, 0x2f, 0xb0, 0x56, 0x2c, 0xa0, 0xe8, 0x4b, 0x16, 0x8c, - 0xc5, 0xec, 0x40, 0x90, 0x9f, 0x78, 0x89, 0x0f, 0x7a, 0x25, 0x8f, 0x5b, 0x75, 0x45, 0x15, 0x13, - 0xe6, 0xcc, 0x36, 0x5b, 0x70, 0x8a, 0x23, 0xfa, 0xaa, 0x65, 0xde, 0x27, 0x3c, 0x9c, 0x47, 0x24, - 0x65, 0xb6, 0x70, 0x06, 0x3f, 0x2a, 0xb9, 0xf7, 0xb5, 0xc2, 0xfa, 0x9a, 0xf1, 0x91, 0xfb, 0x77, - 0xcd, 0xf8, 0xc7, 0xa0, 0xd2, 0x72, 0x7c, 0xaf, 0x4e, 0xe2, 0x84, 0x9f, 0x10, 0xc9, 0x7a, 0x3e, - 0xb2, 0x11, 0x6b, 0x38, 0xdd, 0xec, 0x62, 0xf6, 0x62, 0x89, 0x71, 0xa4, 0xc3, 0x36, 0xbb, 0x75, - 0xdd, 0x8c, 0x4d, 0x1c, 0xf3, 0xfc, 0x09, 0x1e, 0xe8, 0xf9, 0xd3, 0xe8, 0x3e, 0xe7, 0x4f, 0xff, - 0xc4, 0x82, 0x33, 0x3d, 0xbf, 0xda, 0xc3, 0x1b, 0xa3, 0x64, 0x7f, 0x50, 0x84, 0x53, 0x3d, 0x4a, - 0xb4, 0xa0, 0xce, 0xb1, 0xdd, 0x8f, 0x2d, 0x6a, 0xc0, 0x8c, 0xf7, 0x9d, 0xc4, 0x07, 0x3b, 0xfd, - 0xd5, 0x27, 0xb0, 0xc5, 0xfb, 0x7b, 0x02, 0x6b, 0x4c, 0xcb, 0xa1, 0x07, 0x3a, 0x2d, 0x4b, 0xfb, - 0x4c, 0xcb, 0x0f, 0x8a, 0x60, 0x5c, 0x77, 0x8f, 0xbe, 0x68, 0x96, 0x4d, 0xb2, 0xf2, 0x2a, 0xf1, - 0xc3, 0x89, 0xab, 0xb2, 0x4b, 0xbc, 0x3b, 0xbd, 0xaa, 0x30, 0x65, 0x25, 0x40, 0x61, 0x00, 0x09, - 0xd0, 0x94, 0xf5, 0xa9, 0x8a, 0xf9, 0xd7, 0xa7, 0xaa, 0x64, 0x6b, 0x53, 0xa1, 0xdf, 0xb5, 0x60, - 0xaa, 0xd5, 0xa7, 0x8e, 0x62, 0x3e, 0x65, 0x03, 0xfa, 0x55, 0x69, 0xac, 0x3e, 0x79, 0x67, 0x6f, - 0xba, 0x6f, 0xf9, 0x4a, 0xdc, 0xb7, 0x57, 0xf6, 0xdf, 0xb1, 0xf8, 0x2a, 0xce, 0x7c, 0x05, 0xbd, - 0xcd, 0x5a, 0xf7, 0xd8, 0x66, 0x9f, 0x63, 0x37, 0xb0, 0xd5, 0x2f, 0x13, 0xa7, 0x29, 0xb6, 0x63, - 0xf3, 0x32, 0x35, 0xd6, 0x8e, 0x15, 0x06, 0xbb, 0x33, 0xa1, 0xd9, 0x0c, 0x6e, 0x5f, 0x6c, 0x85, - 0x49, 0x47, 0x6c, 0xcc, 0xfa, 0xce, 0x04, 0x05, 0xc1, 0x06, 0x96, 0xfd, 0xf7, 0x0a, 0x7c, 0x06, - 0x0a, 0x27, 0xe5, 0x4b, 0x99, 0x02, 0xdd, 0x83, 0xfb, 0xf7, 0xbe, 0x00, 0xe0, 0xaa, 0xcb, 0x97, - 0xf2, 0xb9, 0x3c, 0x5f, 0x5f, 0xe6, 0x64, 0xde, 0xe8, 0x2e, 0xdb, 0xb0, 0xc1, 0x2f, 0x25, 0x98, - 0x8a, 0xfb, 0x0a, 0xa6, 0xd4, 0x1a, 0x1d, 0xda, 0x67, 0x8d, 0xfe, 0xb9, 0x05, 0x29, 0xf5, 0x02, - 0x85, 0x50, 0xa2, 0xdd, 0xed, 0xe4, 0x73, 0xaf, 0x94, 0x49, 0x9a, 0xca, 0x19, 0x31, 0xed, 0xd9, - 0x4f, 0xcc, 0x19, 0xa1, 0xa6, 0xf0, 0x65, 0x16, 0xf2, 0xb8, 0xfb, 0xcc, 0x64, 0x78, 0x39, 0x08, - 0xb6, 0xb9, 0x0b, 0x44, 0xfb, 0x45, 0xed, 0x97, 0x60, 0xb2, 0xab, 0x53, 0xac, 0x16, 0x6f, 0x20, - 0x2f, 0xd3, 0x32, 0xa6, 0x2b, 0x4b, 0x28, 0xc2, 0x1c, 0x66, 0xbf, 0x67, 0xc1, 0xc9, 0x2c, 0x79, - 0xf4, 0x5d, 0x0b, 0x26, 0xe3, 0x2c, 0xbd, 0xe3, 0x1a, 0x3b, 0x15, 0xe7, 0xd3, 0x05, 0xc2, 0xdd, - 0x9d, 0xb0, 0xff, 0x42, 0x4c, 0xfe, 0x9b, 0x9e, 0x5f, 0x0b, 0x6e, 0xab, 0x5d, 0xde, 0xea, 0xbb, - 0xcb, 0xd3, 0xf5, 0xe8, 0x6e, 0x91, 0x5a, 0xbb, 0xd9, 0x95, 0xc9, 0xb4, 0x2e, 0xda, 0xb1, 0xc2, - 0x48, 0xdd, 0x5c, 0x5d, 0xdc, 0xf7, 0xe6, 0xea, 0x17, 0x61, 0xcc, 0xbc, 0x30, 0x4e, 0xcc, 0x4b, - 0xa6, 0xdd, 0x9a, 0x77, 0xcb, 0xe1, 0x14, 0x56, 0xe6, 0xca, 0xe0, 0xd2, 0xbe, 0x57, 0x06, 0x3f, - 0x0b, 0x65, 0x71, 0xfd, 0xad, 0x8c, 0x86, 0xe3, 0x69, 0x52, 0xa2, 0x0d, 0x2b, 0x28, 0x95, 0x26, - 0x2d, 0xc7, 0x6f, 0x3b, 0x4d, 0x3a, 0x42, 0x22, 0xb7, 0x53, 0x2d, 0xc3, 0x15, 0x05, 0xc1, 0x06, - 0x16, 0x7d, 0xe3, 0xc4, 0x6b, 0x91, 0xd7, 0x02, 0x5f, 0xc6, 0x91, 0xe8, 0x03, 0x62, 0xd1, 0x8e, - 0x15, 0x86, 0xfd, 0x3f, 0x2c, 0xc8, 0xde, 0xdd, 0x99, 0x3a, 0x32, 0xb0, 0xf6, 0xcd, 0x27, 0x4d, - 0x67, 0xa3, 0x15, 0x06, 0xca, 0x46, 0x33, 0x13, 0xc5, 0x8a, 0xf7, 0x4c, 0x14, 0xfb, 0x09, 0x7d, - 0xa3, 0x03, 0xcf, 0x28, 0x1b, 0xed, 0x75, 0x9b, 0x03, 0xb2, 0x61, 0xd8, 0x75, 0x54, 0xc5, 0x81, - 0x31, 0xae, 0x88, 0xcf, 0xcf, 0x31, 0x24, 0x01, 0xa9, 0x6e, 0xbe, 0xff, 0xc3, 0x73, 0x8f, 0x7c, - 0xff, 0x87, 0xe7, 0x1e, 0xf9, 0xe3, 0x1f, 0x9e, 0x7b, 0xe4, 0x4b, 0x77, 0xce, 0x59, 0xef, 0xdf, - 0x39, 0x67, 0x7d, 0xff, 0xce, 0x39, 0xeb, 0x8f, 0xef, 0x9c, 0xb3, 0x3e, 0xb8, 0x73, 0xce, 0xfa, - 0xce, 0x7f, 0x3d, 0xf7, 0xc8, 0x6b, 0x3d, 0xe3, 0x7e, 0xe8, 0x8f, 0xe7, 0xdd, 0xda, 0xec, 0xce, - 0x05, 0x16, 0x7a, 0x42, 0x57, 0xc3, 0xac, 0x31, 0x05, 0x66, 0xe5, 0x6a, 0xf8, 0xcb, 0x00, 0x00, - 0x00, 0xff, 0xff, 0x4c, 0x1e, 0x1a, 0xeb, 0xa9, 0xc3, 0x00, 0x00, + // 9755 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6f, 0x70, 0x1c, 0xc9, + 0x75, 0x18, 0xae, 0xd9, 0xc5, 0x02, 0xbb, 0x0f, 0x7f, 0x48, 0x34, 0xc9, 0x3b, 0x1c, 0x75, 0x47, + 0xb0, 0xe6, 0xca, 0xd2, 0xe9, 0xa7, 0x13, 0x60, 0x51, 0x27, 0xfd, 0x2e, 0x3e, 0x5b, 0x32, 0x16, + 0x20, 0x41, 0x90, 0x00, 0x81, 0x6b, 0x80, 0xa4, 0x74, 0xe7, 0x93, 0x34, 0x98, 0xed, 0x5d, 0x0c, + 0x31, 0x3b, 0x33, 0x9c, 0x99, 0x05, 0x81, 0xb3, 0x2c, 0x4b, 0xb2, 0x14, 0x2b, 0xd1, 0x9f, 0x53, + 0xce, 0x1f, 0x2c, 0x57, 0x12, 0xe7, 0x62, 0xbb, 0x5c, 0x71, 0x25, 0x57, 0x71, 0x2a, 0x1f, 0xe2, + 0x24, 0x95, 0xaa, 0xd8, 0xce, 0x87, 0x4b, 0x29, 0xa9, 0xa8, 0x2a, 0x2e, 0xcb, 0x89, 0x1d, 0xf8, + 0xc4, 0x54, 0x2a, 0xa9, 0x54, 0xc5, 0x55, 0xf9, 0xf3, 0x25, 0x2c, 0x7f, 0x48, 0xf5, 0xff, 0x9e, + 0xd9, 0x5d, 0x62, 0x41, 0x0c, 0x48, 0x4a, 0x75, 0xdf, 0x76, 0xfb, 0xbd, 0x79, 0xaf, 0xa7, 0xa7, + 0xfb, 0xf5, 0x7b, 0xfd, 0xfe, 0x34, 0x2c, 0xb7, 0xbc, 0x74, 0xab, 0xb3, 0x39, 0xe3, 0x86, 0xed, + 0x59, 0x27, 0x6e, 0x85, 0x51, 0x1c, 0xde, 0x62, 0x3f, 0x3e, 0xe2, 0x36, 0x66, 0x77, 0x2e, 0xcc, + 0x46, 0xdb, 0xad, 0x59, 0x27, 0xf2, 0x92, 0x59, 0x27, 0x8a, 0x7c, 0xcf, 0x75, 0x52, 0x2f, 0x0c, + 0x66, 0x77, 0x3e, 0xea, 0xf8, 0xd1, 0x96, 0xf3, 0xd1, 0xd9, 0x16, 0x09, 0x48, 0xec, 0xa4, 0xa4, + 0x31, 0x13, 0xc5, 0x61, 0x1a, 0xa2, 0x9f, 0xd6, 0xd4, 0x66, 0x24, 0x35, 0xf6, 0xe3, 0x73, 0x6e, + 0x63, 0x66, 0xe7, 0xc2, 0x4c, 0xb4, 0xdd, 0x9a, 0xa1, 0xd4, 0x66, 0x0c, 0x6a, 0x33, 0x92, 0xda, + 0xd9, 0x8f, 0x18, 0x7d, 0x69, 0x85, 0xad, 0x70, 0x96, 0x11, 0xdd, 0xec, 0x34, 0xd9, 0x3f, 0xf6, + 0x87, 0xfd, 0xe2, 0xcc, 0xce, 0xda, 0xdb, 0x2f, 0x26, 0x33, 0x5e, 0x48, 0xbb, 0x37, 0xeb, 0x86, + 0x31, 0x99, 0xdd, 0xe9, 0xea, 0xd0, 0xd9, 0xcb, 0x1a, 0x87, 0xec, 0xa6, 0x24, 0x48, 0xbc, 0x30, + 0x48, 0x3e, 0x42, 0xbb, 0x40, 0xe2, 0x1d, 0x12, 0x9b, 0xaf, 0x67, 0x20, 0xf4, 0xa2, 0xf4, 0x82, + 0xa6, 0xd4, 0x76, 0xdc, 0x2d, 0x2f, 0x20, 0xf1, 0x9e, 0x7e, 0xbc, 0x4d, 0x52, 0xa7, 0xd7, 0x53, + 0xb3, 0xfd, 0x9e, 0x8a, 0x3b, 0x41, 0xea, 0xb5, 0x49, 0xd7, 0x03, 0x9f, 0x38, 0xe8, 0x81, 0xc4, + 0xdd, 0x22, 0x6d, 0xa7, 0xeb, 0xb9, 0x8f, 0xf5, 0x7b, 0xae, 0x93, 0x7a, 0xfe, 0xac, 0x17, 0xa4, + 0x49, 0x1a, 0xe7, 0x1f, 0xb2, 0x6f, 0xc3, 0xf8, 0xdc, 0xcd, 0xf5, 0xb9, 0x4e, 0xba, 0x35, 0x1f, + 0x06, 0x4d, 0xaf, 0x85, 0x3e, 0x0e, 0xa3, 0xae, 0xdf, 0x49, 0x52, 0x12, 0x5f, 0x73, 0xda, 0x64, + 0xca, 0x3a, 0x6f, 0x3d, 0x57, 0xab, 0x9f, 0x7a, 0x67, 0x7f, 0xfa, 0x7d, 0x77, 0xf7, 0xa7, 0x47, + 0xe7, 0x35, 0x08, 0x9b, 0x78, 0xe8, 0x43, 0x30, 0x12, 0x87, 0x3e, 0x99, 0xc3, 0xd7, 0xa6, 0x4a, + 0xec, 0x91, 0x13, 0xe2, 0x91, 0x11, 0xcc, 0x9b, 0xb1, 0x84, 0xdb, 0x7f, 0x5c, 0x02, 0x98, 0x8b, + 0xa2, 0xb5, 0x38, 0xbc, 0x45, 0xdc, 0x14, 0x7d, 0x1e, 0xaa, 0x74, 0xe8, 0x1a, 0x4e, 0xea, 0x30, + 0x6e, 0xa3, 0x17, 0x7e, 0x72, 0x86, 0xbf, 0xc9, 0x8c, 0xf9, 0x26, 0x7a, 0xe2, 0x50, 0xec, 0x99, + 0x9d, 0x8f, 0xce, 0xac, 0x6e, 0xd2, 0xe7, 0x57, 0x48, 0xea, 0xd4, 0x91, 0x60, 0x06, 0xba, 0x0d, + 0x2b, 0xaa, 0x28, 0x80, 0xa1, 0x24, 0x22, 0x2e, 0xeb, 0xd8, 0xe8, 0x85, 0xe5, 0x99, 0xa3, 0xcc, + 0xd0, 0x19, 0xdd, 0xf3, 0xf5, 0x88, 0xb8, 0xf5, 0x31, 0xc1, 0x79, 0x88, 0xfe, 0xc3, 0x8c, 0x0f, + 0xda, 0x81, 0xe1, 0x24, 0x75, 0xd2, 0x4e, 0x32, 0x55, 0x66, 0x1c, 0xaf, 0x15, 0xc6, 0x91, 0x51, + 0xad, 0x4f, 0x08, 0x9e, 0xc3, 0xfc, 0x3f, 0x16, 0xdc, 0xec, 0xff, 0x64, 0xc1, 0x84, 0x46, 0x5e, + 0xf6, 0x92, 0x14, 0xfd, 0x5c, 0xd7, 0xe0, 0xce, 0x0c, 0x36, 0xb8, 0xf4, 0x69, 0x36, 0xb4, 0x27, + 0x05, 0xb3, 0xaa, 0x6c, 0x31, 0x06, 0xb6, 0x0d, 0x15, 0x2f, 0x25, 0xed, 0x64, 0xaa, 0x74, 0xbe, + 0xfc, 0xdc, 0xe8, 0x85, 0xcb, 0x45, 0xbd, 0x67, 0x7d, 0x5c, 0x30, 0xad, 0x2c, 0x51, 0xf2, 0x98, + 0x73, 0xb1, 0x7f, 0x67, 0xcc, 0x7c, 0x3f, 0x3a, 0xe0, 0xe8, 0xa3, 0x30, 0x9a, 0x84, 0x9d, 0xd8, + 0x25, 0x98, 0x44, 0x61, 0x32, 0x65, 0x9d, 0x2f, 0xd3, 0xa9, 0x47, 0x67, 0xea, 0xba, 0x6e, 0xc6, + 0x26, 0x0e, 0xfa, 0xb6, 0x05, 0x63, 0x0d, 0x92, 0xa4, 0x5e, 0xc0, 0xf8, 0xcb, 0xce, 0x6f, 0x1c, + 0xb9, 0xf3, 0xb2, 0x71, 0x41, 0x13, 0xaf, 0x9f, 0x16, 0x2f, 0x32, 0x66, 0x34, 0x26, 0x38, 0xc3, + 0x9f, 0xae, 0xb8, 0x06, 0x49, 0xdc, 0xd8, 0x8b, 0xe8, 0x7f, 0x36, 0x67, 0x8c, 0x15, 0xb7, 0xa0, + 0x41, 0xd8, 0xc4, 0x43, 0x01, 0x54, 0xe8, 0x8a, 0x4a, 0xa6, 0x86, 0x58, 0xff, 0x97, 0x8e, 0xd6, + 0x7f, 0x31, 0xa8, 0x74, 0xb1, 0xea, 0xd1, 0xa7, 0xff, 0x12, 0xcc, 0xd9, 0xa0, 0x6f, 0x59, 0x30, + 0x25, 0x56, 0x3c, 0x26, 0x7c, 0x40, 0x6f, 0x6e, 0x79, 0x29, 0xf1, 0xbd, 0x24, 0x9d, 0xaa, 0xb0, + 0x3e, 0xcc, 0x0e, 0x36, 0xb7, 0x16, 0xe3, 0xb0, 0x13, 0x5d, 0xf5, 0x82, 0x46, 0xfd, 0xbc, 0xe0, + 0x34, 0x35, 0xdf, 0x87, 0x30, 0xee, 0xcb, 0x12, 0xfd, 0x8a, 0x05, 0x67, 0x03, 0xa7, 0x4d, 0x92, + 0xc8, 0xa1, 0x9f, 0x96, 0x83, 0xeb, 0xbe, 0xe3, 0x6e, 0xb3, 0x1e, 0x0d, 0x3f, 0x58, 0x8f, 0x6c, + 0xd1, 0xa3, 0xb3, 0xd7, 0xfa, 0x92, 0xc6, 0xf7, 0x61, 0x8b, 0x7e, 0xd3, 0x82, 0xc9, 0x30, 0x8e, + 0xb6, 0x9c, 0x80, 0x34, 0x24, 0x34, 0x99, 0x1a, 0x61, 0x4b, 0xef, 0xb3, 0x47, 0xfb, 0x44, 0xab, + 0x79, 0xb2, 0x2b, 0x61, 0xe0, 0xa5, 0x61, 0xbc, 0x4e, 0xd2, 0xd4, 0x0b, 0x5a, 0x49, 0xfd, 0xcc, + 0xdd, 0xfd, 0xe9, 0xc9, 0x2e, 0x2c, 0xdc, 0xdd, 0x1f, 0xf4, 0xf3, 0x30, 0x9a, 0xec, 0x05, 0xee, + 0x4d, 0x2f, 0x68, 0x84, 0x77, 0x92, 0xa9, 0x6a, 0x11, 0xcb, 0x77, 0x5d, 0x11, 0x14, 0x0b, 0x50, + 0x33, 0xc0, 0x26, 0xb7, 0xde, 0x1f, 0x4e, 0x4f, 0xa5, 0x5a, 0xd1, 0x1f, 0x4e, 0x4f, 0xa6, 0xfb, + 0xb0, 0x45, 0xbf, 0x6c, 0xc1, 0x78, 0xe2, 0xb5, 0x02, 0x27, 0xed, 0xc4, 0xe4, 0x2a, 0xd9, 0x4b, + 0xa6, 0x80, 0x75, 0xe4, 0xca, 0x11, 0x47, 0xc5, 0x20, 0x59, 0x3f, 0x23, 0xfa, 0x38, 0x6e, 0xb6, + 0x26, 0x38, 0xcb, 0xb7, 0xd7, 0x42, 0xd3, 0xd3, 0x7a, 0xb4, 0xd8, 0x85, 0xa6, 0x27, 0x75, 0x5f, + 0x96, 0xe8, 0x67, 0xe1, 0x24, 0x6f, 0x52, 0x23, 0x9b, 0x4c, 0x8d, 0x31, 0x41, 0x7b, 0xfa, 0xee, + 0xfe, 0xf4, 0xc9, 0xf5, 0x1c, 0x0c, 0x77, 0x61, 0xa3, 0xdb, 0x30, 0x1d, 0x91, 0xb8, 0xed, 0xa5, + 0xab, 0x81, 0xbf, 0x27, 0xc5, 0xb7, 0x1b, 0x46, 0xa4, 0x21, 0xba, 0x93, 0x4c, 0x8d, 0x9f, 0xb7, + 0x9e, 0xab, 0xd6, 0x3f, 0x28, 0xba, 0x39, 0xbd, 0x76, 0x7f, 0x74, 0x7c, 0x10, 0x3d, 0xfb, 0x5f, + 0x97, 0xe0, 0x64, 0x7e, 0xe3, 0x44, 0xbf, 0x6d, 0xc1, 0x89, 0x5b, 0x77, 0xd2, 0x8d, 0x70, 0x9b, + 0x04, 0x49, 0x7d, 0x8f, 0x8a, 0x37, 0xb6, 0x65, 0x8c, 0x5e, 0x70, 0x8b, 0xdd, 0xa2, 0x67, 0xae, + 0x64, 0xb9, 0x5c, 0x0c, 0xd2, 0x78, 0xaf, 0xfe, 0xa4, 0x78, 0xbb, 0x13, 0x57, 0x6e, 0x6e, 0x98, + 0x50, 0x9c, 0xef, 0xd4, 0xd9, 0x6f, 0x58, 0x70, 0xba, 0x17, 0x09, 0x74, 0x12, 0xca, 0xdb, 0x64, + 0x8f, 0x6b, 0x65, 0x98, 0xfe, 0x44, 0xaf, 0x41, 0x65, 0xc7, 0xf1, 0x3b, 0x44, 0x68, 0x37, 0x8b, + 0x47, 0x7b, 0x11, 0xd5, 0x33, 0xcc, 0xa9, 0xfe, 0x54, 0xe9, 0x45, 0xcb, 0xfe, 0x77, 0x65, 0x18, + 0x35, 0xf6, 0xb7, 0x87, 0xa0, 0xb1, 0x85, 0x19, 0x8d, 0x6d, 0xa5, 0xb0, 0xad, 0xb9, 0xaf, 0xca, + 0x76, 0x27, 0xa7, 0xb2, 0xad, 0x16, 0xc7, 0xf2, 0xbe, 0x3a, 0x1b, 0x4a, 0xa1, 0x16, 0x46, 0x54, + 0x23, 0xa7, 0x5b, 0xff, 0x50, 0x11, 0x9f, 0x70, 0x55, 0x92, 0xab, 0x8f, 0xdf, 0xdd, 0x9f, 0xae, + 0xa9, 0xbf, 0x58, 0x33, 0xb2, 0x7f, 0x60, 0xc1, 0x69, 0xa3, 0x8f, 0xf3, 0x61, 0xd0, 0xf0, 0xd8, + 0xa7, 0x3d, 0x0f, 0x43, 0xe9, 0x5e, 0x24, 0xd5, 0x7e, 0x35, 0x52, 0x1b, 0x7b, 0x11, 0xc1, 0x0c, + 0x42, 0x15, 0xfd, 0x36, 0x49, 0x12, 0xa7, 0x45, 0xf2, 0x8a, 0xfe, 0x0a, 0x6f, 0xc6, 0x12, 0x8e, + 0x62, 0x40, 0xbe, 0x93, 0xa4, 0x1b, 0xb1, 0x13, 0x24, 0x8c, 0xfc, 0x86, 0xd7, 0x26, 0x62, 0x80, + 0xff, 0xbf, 0xc1, 0x66, 0x0c, 0x7d, 0xa2, 0xfe, 0xc4, 0xdd, 0xfd, 0x69, 0xb4, 0xdc, 0x45, 0x09, + 0xf7, 0xa0, 0x6e, 0xff, 0x8a, 0x05, 0x4f, 0xf4, 0xd6, 0xc5, 0xd0, 0x07, 0x60, 0x98, 0x9b, 0x7c, + 0xe2, 0xed, 0xf4, 0x27, 0x61, 0xad, 0x58, 0x40, 0xd1, 0x2c, 0xd4, 0xd4, 0x3e, 0x21, 0xde, 0x71, + 0x52, 0xa0, 0xd6, 0xf4, 0xe6, 0xa2, 0x71, 0xe8, 0xa0, 0xd1, 0x3f, 0x42, 0x73, 0x53, 0x83, 0xc6, + 0x8c, 0x24, 0x06, 0xb1, 0xff, 0xdc, 0x82, 0x13, 0x46, 0xaf, 0x1e, 0x82, 0x6a, 0x1e, 0x64, 0x55, + 0xf3, 0xa5, 0xc2, 0xe6, 0x73, 0x1f, 0xdd, 0xfc, 0x5b, 0x16, 0x9c, 0x35, 0xb0, 0x56, 0x9c, 0xd4, + 0xdd, 0xba, 0xb8, 0x1b, 0xc5, 0x24, 0xa1, 0xe6, 0x34, 0x7a, 0xc6, 0x90, 0x5b, 0xf5, 0x51, 0x41, + 0xa1, 0x7c, 0x95, 0xec, 0x71, 0x21, 0xf6, 0x3c, 0x54, 0xf9, 0xe4, 0x0c, 0x63, 0x31, 0xe2, 0xea, + 0xdd, 0x56, 0x45, 0x3b, 0x56, 0x18, 0xc8, 0x86, 0x61, 0x26, 0x9c, 0xe8, 0x62, 0xa5, 0xdb, 0x10, + 0xd0, 0x8f, 0x78, 0x83, 0xb5, 0x60, 0x01, 0xb1, 0x57, 0x33, 0xdd, 0x59, 0x8b, 0x09, 0xfb, 0xb8, + 0x8d, 0x4b, 0x1e, 0xf1, 0x1b, 0x09, 0x35, 0x1b, 0x9c, 0x20, 0x08, 0x53, 0x61, 0x01, 0x18, 0x66, + 0xc3, 0x9c, 0x6e, 0xc6, 0x26, 0x8e, 0x7d, 0xb7, 0xc4, 0x8c, 0x0f, 0xb5, 0xac, 0xc9, 0xc3, 0xb0, + 0x5c, 0xe3, 0x8c, 0x1c, 0x5c, 0x2b, 0x4e, 0x28, 0x91, 0xfe, 0xd6, 0xeb, 0xeb, 0x39, 0x51, 0x88, + 0x0b, 0xe5, 0x7a, 0x7f, 0x0b, 0xf6, 0xf7, 0x4b, 0x30, 0x9d, 0x7d, 0xa0, 0x4b, 0x92, 0x52, 0x73, + 0xc9, 0x60, 0x94, 0x3f, 0xa0, 0x30, 0xf0, 0xb1, 0x89, 0xd7, 0x47, 0x18, 0x95, 0x8e, 0x53, 0x18, + 0x99, 0xb2, 0xb2, 0x7c, 0x80, 0xac, 0xfc, 0x80, 0x1a, 0xf5, 0xa1, 0x9c, 0x70, 0xca, 0xee, 0x17, + 0xe7, 0x61, 0x28, 0x49, 0x49, 0x34, 0x55, 0xc9, 0xca, 0x9a, 0xf5, 0x94, 0x44, 0x98, 0x41, 0xec, + 0xff, 0x5e, 0x82, 0x27, 0xb3, 0x63, 0xa8, 0xc5, 0xfb, 0xa7, 0x32, 0xe2, 0xfd, 0xc3, 0xa6, 0x78, + 0xbf, 0xb7, 0x3f, 0xfd, 0xfe, 0x3e, 0x8f, 0xfd, 0xc8, 0x48, 0x7f, 0xb4, 0x98, 0x1b, 0xc5, 0xd9, + 0xec, 0x28, 0xde, 0xdb, 0x9f, 0x7e, 0xa6, 0xcf, 0x3b, 0xe6, 0x86, 0xf9, 0x03, 0x30, 0x1c, 0x13, + 0x27, 0x09, 0x03, 0x31, 0xd0, 0xea, 0x73, 0x60, 0xd6, 0x8a, 0x05, 0xd4, 0xfe, 0xf3, 0x6a, 0x7e, + 0xb0, 0x17, 0xf9, 0x01, 0x5b, 0x18, 0x23, 0x0f, 0x86, 0x98, 0xca, 0xce, 0x45, 0xc3, 0xd5, 0xa3, + 0x2d, 0x23, 0x2a, 0xe2, 0x15, 0xe9, 0x7a, 0x95, 0x7e, 0x35, 0xda, 0x84, 0x19, 0x0b, 0xb4, 0x0b, + 0x55, 0x57, 0x6a, 0xd2, 0xa5, 0x22, 0xce, 0x9c, 0x84, 0x1e, 0xad, 0x39, 0x8e, 0x51, 0x59, 0xac, + 0xd4, 0x6f, 0xc5, 0x0d, 0x11, 0x28, 0xb7, 0xbc, 0x54, 0x7c, 0xd6, 0x23, 0xda, 0x4a, 0x8b, 0x9e, + 0xf1, 0x8a, 0x23, 0x74, 0x83, 0x58, 0xf4, 0x52, 0x4c, 0xe9, 0xa3, 0xaf, 0x59, 0x30, 0x9a, 0xb8, + 0xed, 0xb5, 0x38, 0xdc, 0xf1, 0x1a, 0x24, 0x16, 0x9a, 0xd2, 0x11, 0x45, 0xd3, 0xfa, 0xfc, 0x8a, + 0x24, 0xa8, 0xf9, 0x72, 0xdb, 0x55, 0x43, 0xb0, 0xc9, 0x97, 0x5a, 0x10, 0x4f, 0x8a, 0x77, 0x5f, + 0x20, 0xae, 0x47, 0xf7, 0x36, 0x69, 0x30, 0xb1, 0x99, 0x72, 0x64, 0xcd, 0x71, 0xa1, 0xe3, 0x6e, + 0xd3, 0xf5, 0xa6, 0x3b, 0xf4, 0xfe, 0xbb, 0xfb, 0xd3, 0x4f, 0xce, 0xf7, 0xe6, 0x89, 0xfb, 0x75, + 0x86, 0x0d, 0x58, 0xd4, 0xf1, 0x7d, 0x4c, 0x6e, 0x77, 0x08, 0x3b, 0x0e, 0x29, 0x60, 0xc0, 0xd6, + 0x34, 0xc1, 0xdc, 0x80, 0x19, 0x10, 0x6c, 0xf2, 0x45, 0xb7, 0x61, 0xb8, 0xed, 0xa4, 0xb1, 0xb7, + 0x2b, 0xce, 0x40, 0x8e, 0xa8, 0xcb, 0xaf, 0x30, 0x5a, 0x9a, 0x39, 0xdb, 0xfa, 0x79, 0x23, 0x16, + 0x8c, 0x50, 0x1b, 0x2a, 0x6d, 0x12, 0xb7, 0xc8, 0x54, 0xb5, 0x88, 0xf3, 0xde, 0x15, 0x4a, 0x4a, + 0x33, 0xac, 0x51, 0xcd, 0x87, 0xb5, 0x61, 0xce, 0x05, 0xbd, 0x06, 0xd5, 0x84, 0xf8, 0xc4, 0xa5, + 0xba, 0x4b, 0x8d, 0x71, 0xfc, 0xd8, 0x80, 0x7a, 0x9c, 0xb3, 0x49, 0xfc, 0x75, 0xf1, 0x28, 0x5f, + 0x60, 0xf2, 0x1f, 0x56, 0x24, 0xed, 0xff, 0x62, 0x01, 0xca, 0x4a, 0x98, 0x87, 0xa0, 0x3d, 0xde, + 0xce, 0x6a, 0x8f, 0xcb, 0x45, 0xaa, 0x00, 0x7d, 0x14, 0xc8, 0x77, 0xaa, 0x90, 0x93, 0xcd, 0xd7, + 0x48, 0x92, 0x92, 0xc6, 0x7b, 0xf2, 0xf4, 0x3d, 0x79, 0xfa, 0x9e, 0x3c, 0x55, 0xf2, 0x74, 0x33, + 0x27, 0x4f, 0x3f, 0x69, 0xac, 0x7a, 0xed, 0xbd, 0xfc, 0x9c, 0x72, 0x6f, 0x9a, 0x3d, 0x30, 0x10, + 0xa8, 0x24, 0xb8, 0xb2, 0xbe, 0x7a, 0xad, 0xa7, 0x00, 0xfd, 0x5c, 0x56, 0x80, 0x1e, 0x95, 0xc5, + 0x43, 0x17, 0x99, 0x7f, 0xb3, 0x04, 0x4f, 0x65, 0x45, 0x09, 0x0e, 0x7d, 0x3f, 0xec, 0xa4, 0x54, + 0x4b, 0x46, 0xbf, 0x6e, 0xc1, 0xc9, 0x76, 0xd6, 0x3c, 0x4d, 0xc4, 0x29, 0xe0, 0xa7, 0x0b, 0x93, + 0x73, 0x39, 0xfb, 0xb7, 0x3e, 0x25, 0x64, 0xde, 0xc9, 0x1c, 0x20, 0xc1, 0x5d, 0x7d, 0x41, 0xaf, + 0x41, 0xad, 0xed, 0xec, 0x5e, 0x8f, 0x1a, 0x4e, 0x2a, 0x0d, 0x94, 0xfe, 0x76, 0x65, 0x27, 0xf5, + 0xfc, 0x19, 0xee, 0xdb, 0x9d, 0x59, 0x0a, 0xd2, 0xd5, 0x78, 0x3d, 0x8d, 0xbd, 0xa0, 0xc5, 0xcf, + 0x7e, 0x56, 0x24, 0x19, 0xac, 0x29, 0xda, 0x7f, 0xdb, 0xca, 0x0b, 0x5a, 0x35, 0x3a, 0xb1, 0x93, + 0x92, 0xd6, 0x1e, 0xfa, 0x02, 0x54, 0xa8, 0x25, 0x21, 0x47, 0xe5, 0x66, 0x91, 0xd2, 0xdf, 0xf8, + 0x12, 0x7a, 0x23, 0xa0, 0xff, 0x12, 0xcc, 0x99, 0xda, 0x7f, 0x59, 0xc9, 0x6f, 0x78, 0xcc, 0xd3, + 0x77, 0x01, 0xa0, 0x15, 0x6e, 0x90, 0x76, 0xe4, 0xd3, 0x61, 0xb1, 0xd8, 0x71, 0xb1, 0x32, 0x9e, + 0x17, 0x15, 0x04, 0x1b, 0x58, 0xe8, 0xaf, 0x59, 0x00, 0x2d, 0xb9, 0xb0, 0xe4, 0x66, 0x76, 0xbd, + 0xc8, 0xd7, 0xd1, 0xcb, 0x56, 0xf7, 0x45, 0x31, 0xc4, 0x06, 0x73, 0xf4, 0x15, 0x0b, 0xaa, 0xa9, + 0xec, 0x3e, 0x17, 0xef, 0x1b, 0x45, 0xf6, 0x44, 0xbe, 0xb4, 0xde, 0xd7, 0xd5, 0x90, 0x28, 0xbe, + 0xe8, 0xaf, 0x5a, 0x00, 0xc9, 0x5e, 0xe0, 0xae, 0x85, 0xbe, 0xe7, 0xee, 0x09, 0xa9, 0x7f, 0xa3, + 0x50, 0x03, 0x5f, 0x51, 0xaf, 0x4f, 0xd0, 0xd1, 0xd0, 0xff, 0xb1, 0xc1, 0x19, 0x7d, 0x11, 0xaa, + 0x89, 0x98, 0x6e, 0x42, 0xce, 0x6f, 0x14, 0x7b, 0xcc, 0xc0, 0x69, 0x0b, 0x11, 0x21, 0xfe, 0x61, + 0xc5, 0x13, 0xfd, 0xaa, 0x05, 0x27, 0xa2, 0xec, 0xa1, 0x90, 0x10, 0xe9, 0xc5, 0xc9, 0x80, 0xdc, + 0xa1, 0x53, 0xfd, 0xd4, 0xdd, 0xfd, 0xe9, 0x13, 0xb9, 0x46, 0x9c, 0xef, 0x85, 0xfd, 0xbd, 0x52, + 0xe6, 0x68, 0x56, 0x9d, 0x99, 0xb0, 0xc9, 0xec, 0x4a, 0x73, 0x55, 0xae, 0xcd, 0x42, 0x27, 0xb3, + 0x32, 0x86, 0xf5, 0x64, 0x56, 0x4d, 0x09, 0x36, 0x98, 0xd3, 0x6d, 0x7b, 0xd2, 0xc9, 0x9f, 0xcc, + 0x88, 0xf5, 0xf5, 0x5a, 0x91, 0x5d, 0xea, 0x3e, 0x48, 0x7f, 0x4a, 0x74, 0x6d, 0xb2, 0x0b, 0x84, + 0xbb, 0xbb, 0x64, 0x7f, 0x2f, 0x7b, 0x1c, 0x6c, 0x4c, 0x8d, 0x01, 0x8e, 0xba, 0xbf, 0x6d, 0xc1, + 0x68, 0x1c, 0xfa, 0xbe, 0x17, 0xb4, 0xe8, 0x34, 0x16, 0xb2, 0xf8, 0xd5, 0x63, 0x11, 0x87, 0x62, + 0xbe, 0xb2, 0xcd, 0x1f, 0x6b, 0x9e, 0xd8, 0xec, 0x80, 0xfd, 0x65, 0x0b, 0xa6, 0xfa, 0x2d, 0x37, + 0x44, 0xe0, 0xfd, 0x72, 0x2e, 0x29, 0x47, 0xef, 0x6a, 0xb0, 0x40, 0x7c, 0xa2, 0xce, 0xc9, 0xaa, + 0xf5, 0x67, 0xc5, 0x6b, 0xbe, 0x7f, 0xad, 0x3f, 0x2a, 0xbe, 0x1f, 0x1d, 0xfb, 0xb7, 0x4a, 0xf9, + 0x11, 0x55, 0xe2, 0xf6, 0xbb, 0x56, 0x97, 0x51, 0xf2, 0xe9, 0xe3, 0x10, 0x71, 0xcc, 0x7c, 0x51, + 0xfe, 0xde, 0xfe, 0x38, 0x8f, 0xd0, 0xa1, 0x64, 0xff, 0x9b, 0x21, 0xb8, 0x4f, 0xcf, 0x94, 0xcb, + 0xc0, 0xea, 0xe7, 0x32, 0x38, 0xbc, 0x17, 0xe2, 0x9b, 0x16, 0x0c, 0xfb, 0x54, 0x3f, 0xe2, 0xc7, + 0xe2, 0xa3, 0x17, 0x1a, 0xc7, 0x35, 0xf6, 0x5c, 0x0d, 0x4b, 0xb8, 0x53, 0x53, 0x9d, 0x8c, 0xf1, + 0x46, 0x2c, 0xfa, 0x80, 0xde, 0xb2, 0xb2, 0x67, 0xec, 0x3c, 0x4a, 0xc5, 0x3b, 0xb6, 0x3e, 0x19, + 0x07, 0xf7, 0xbc, 0x63, 0xfa, 0x48, 0xb8, 0xcf, 0x91, 0x3e, 0x9a, 0x01, 0x68, 0x7a, 0x81, 0xe3, + 0x7b, 0xaf, 0x53, 0x3b, 0xaf, 0xc2, 0x9c, 0x00, 0x6c, 0xd3, 0xba, 0xa4, 0x5a, 0xb1, 0x81, 0x71, + 0xf6, 0xaf, 0xc0, 0xa8, 0xf1, 0xe6, 0x3d, 0x7c, 0xb1, 0xa7, 0x4d, 0x5f, 0x6c, 0xcd, 0x70, 0xa1, + 0x9e, 0xfd, 0x24, 0x9c, 0xcc, 0x77, 0xf0, 0x30, 0xcf, 0xdb, 0xbf, 0x3d, 0x9c, 0x3f, 0x18, 0xdf, + 0x20, 0x71, 0x9b, 0x76, 0xed, 0x3d, 0xfb, 0xf8, 0x3d, 0xfb, 0xf8, 0x3d, 0xfb, 0x58, 0xfe, 0xb1, + 0xef, 0x56, 0x20, 0xa3, 0x19, 0xf0, 0xde, 0x7d, 0x08, 0x46, 0x62, 0x12, 0x85, 0xd7, 0xf1, 0xb2, + 0x90, 0xb8, 0x3a, 0x3a, 0x95, 0x37, 0x63, 0x09, 0xa7, 0x92, 0x39, 0x72, 0xd2, 0x2d, 0x21, 0x72, + 0x95, 0x64, 0x5e, 0x73, 0xd2, 0x2d, 0xcc, 0x20, 0xe8, 0x93, 0x30, 0x91, 0x3a, 0x71, 0x8b, 0xa4, + 0x98, 0xec, 0xb0, 0x41, 0x10, 0xce, 0x86, 0x27, 0x04, 0xee, 0xc4, 0x46, 0x06, 0x8a, 0x73, 0xd8, + 0xe8, 0x36, 0x0c, 0x6d, 0x11, 0xbf, 0x2d, 0x0c, 0xf8, 0xf5, 0xe2, 0x24, 0x22, 0x7b, 0xd7, 0xcb, + 0xc4, 0x6f, 0xf3, 0xf5, 0x4a, 0x7f, 0x61, 0xc6, 0x8a, 0x7e, 0x9d, 0xda, 0x76, 0x27, 0x49, 0xc3, + 0xb6, 0xf7, 0xba, 0x34, 0xeb, 0x3f, 0x5d, 0x30, 0xe3, 0xab, 0x92, 0x3e, 0xb7, 0x3d, 0xd5, 0x5f, + 0xac, 0x39, 0xb3, 0x7e, 0x34, 0xbc, 0x98, 0x99, 0xe9, 0x7b, 0x53, 0x70, 0x2c, 0xfd, 0x58, 0x90, + 0xf4, 0x79, 0x3f, 0xd4, 0x5f, 0xac, 0x39, 0xa3, 0x3d, 0x18, 0x8e, 0xfc, 0x4e, 0xcb, 0x0b, 0xa6, + 0x46, 0x59, 0x1f, 0xae, 0x17, 0xdc, 0x87, 0x35, 0x46, 0x9c, 0x1f, 0xae, 0xf0, 0xdf, 0x58, 0x30, + 0x44, 0xcf, 0x42, 0xc5, 0xdd, 0x72, 0xe2, 0x74, 0x6a, 0x8c, 0x4d, 0x1a, 0x65, 0x03, 0xcf, 0xd3, + 0x46, 0xcc, 0x61, 0xe8, 0x19, 0x28, 0xc7, 0xa4, 0xc9, 0x82, 0xa2, 0x0c, 0x77, 0x39, 0x26, 0x4d, + 0x4c, 0xdb, 0xed, 0xbf, 0x5b, 0xca, 0x2a, 0x17, 0xd9, 0xf7, 0xe6, 0xb3, 0xdd, 0xed, 0xc4, 0x89, + 0xb4, 0x93, 0x8d, 0xd9, 0xce, 0x9a, 0xb1, 0x84, 0xa3, 0x2f, 0x5b, 0x30, 0x72, 0x2b, 0x09, 0x83, + 0x80, 0xa4, 0x42, 0x90, 0xdf, 0x28, 0x78, 0x28, 0xae, 0x70, 0xea, 0xba, 0x0f, 0xa2, 0x01, 0x4b, + 0xbe, 0xb4, 0xbb, 0x64, 0xd7, 0xf5, 0x3b, 0x8d, 0x2e, 0x2f, 0xe9, 0x45, 0xde, 0x8c, 0x25, 0x9c, + 0xa2, 0x7a, 0x01, 0x47, 0x1d, 0xca, 0xa2, 0x2e, 0x05, 0x02, 0x55, 0xc0, 0xed, 0xdf, 0xad, 0xc0, + 0x99, 0x9e, 0x8b, 0x83, 0x6e, 0xfb, 0x6c, 0x63, 0xbd, 0xe4, 0xf9, 0x44, 0xfa, 0xfe, 0xd9, 0xb6, + 0x7f, 0x43, 0xb5, 0x62, 0x03, 0x03, 0xfd, 0x22, 0x40, 0xe4, 0xc4, 0x4e, 0x9b, 0x88, 0xed, 0xae, + 0x7c, 0xf4, 0xdd, 0x95, 0xf6, 0x63, 0x4d, 0xd2, 0xd4, 0xd6, 0x96, 0x6a, 0x4a, 0xb0, 0xc1, 0x12, + 0x7d, 0x1c, 0x46, 0x63, 0xe2, 0x13, 0x27, 0x61, 0x31, 0x75, 0xf9, 0x00, 0x61, 0xac, 0x41, 0xd8, + 0xc4, 0x43, 0x1f, 0x50, 0x61, 0x12, 0x39, 0x97, 0x72, 0x36, 0x54, 0x02, 0xbd, 0x61, 0xc1, 0x44, + 0xd3, 0xf3, 0x89, 0xe6, 0x2e, 0xc2, 0x79, 0x57, 0x8f, 0xfe, 0x92, 0x97, 0x4c, 0xba, 0x5a, 0x42, + 0x66, 0x9a, 0x13, 0x9c, 0x63, 0x4f, 0x3f, 0xf3, 0x0e, 0x89, 0x99, 0x68, 0x1d, 0xce, 0x7e, 0xe6, + 0x1b, 0xbc, 0x19, 0x4b, 0x38, 0x9a, 0x83, 0x13, 0x91, 0x93, 0x24, 0xf3, 0x31, 0x69, 0x90, 0x20, + 0xf5, 0x1c, 0x9f, 0x07, 0xdb, 0x56, 0x75, 0xb0, 0xdd, 0x5a, 0x16, 0x8c, 0xf3, 0xf8, 0xe8, 0x33, + 0xf0, 0xa4, 0xd7, 0x0a, 0xc2, 0x98, 0xac, 0x78, 0x49, 0xe2, 0x05, 0x2d, 0x3d, 0x0d, 0x98, 0xa4, + 0xac, 0xd6, 0xa7, 0x05, 0xa9, 0x27, 0x97, 0x7a, 0xa3, 0xe1, 0x7e, 0xcf, 0xa3, 0xe7, 0xa1, 0x9a, + 0x6c, 0x7b, 0xd1, 0x7c, 0xdc, 0x48, 0xd8, 0x41, 0x67, 0x55, 0x9f, 0xce, 0xac, 0x8b, 0x76, 0xac, + 0x30, 0xec, 0x5f, 0x2b, 0x65, 0xcd, 0x3b, 0x73, 0xfd, 0xa0, 0x84, 0xae, 0x92, 0xf4, 0x86, 0x13, + 0x4b, 0xd3, 0xff, 0x88, 0xe1, 0xba, 0x82, 0xee, 0x0d, 0x27, 0x36, 0xd7, 0x1b, 0x63, 0x80, 0x25, + 0x27, 0x74, 0x0b, 0x86, 0x52, 0xdf, 0x29, 0x28, 0xbe, 0xdf, 0xe0, 0xa8, 0xad, 0xed, 0xe5, 0xb9, + 0x04, 0x33, 0x1e, 0xe8, 0x69, 0xaa, 0xbe, 0x6e, 0xca, 0x98, 0x1e, 0xa1, 0x71, 0x6e, 0x26, 0x98, + 0xb5, 0xda, 0x6f, 0x8d, 0xf4, 0x10, 0x79, 0x6a, 0x8f, 0x41, 0x17, 0x00, 0xa8, 0x25, 0xb4, 0x16, + 0x93, 0xa6, 0xb7, 0x2b, 0xf6, 0x78, 0xb5, 0xac, 0xae, 0x29, 0x08, 0x36, 0xb0, 0xe4, 0x33, 0xeb, + 0x9d, 0x26, 0x7d, 0xa6, 0xd4, 0xfd, 0x0c, 0x87, 0x60, 0x03, 0x0b, 0xbd, 0x00, 0xc3, 0x5e, 0xdb, + 0x69, 0xa9, 0xd0, 0xa3, 0xa7, 0xe9, 0x7a, 0x5a, 0x62, 0x2d, 0xf7, 0xf6, 0xa7, 0x27, 0x54, 0x87, + 0x58, 0x13, 0x16, 0xb8, 0xe8, 0xb7, 0x2c, 0x18, 0x73, 0xc3, 0x76, 0x3b, 0x0c, 0xb8, 0xfd, 0x20, + 0x8c, 0xa1, 0x5b, 0xc7, 0xb5, 0x03, 0xcf, 0xcc, 0x1b, 0xcc, 0xb8, 0x35, 0xa4, 0x12, 0x11, 0x4c, + 0x10, 0xce, 0xf4, 0xca, 0x5c, 0x76, 0x95, 0x03, 0x96, 0xdd, 0xef, 0x59, 0x30, 0xc9, 0x9f, 0x35, + 0xcc, 0x1a, 0x11, 0x73, 0x1f, 0x1e, 0xf3, 0x6b, 0x75, 0x59, 0x7a, 0xea, 0x48, 0xa8, 0x0b, 0x8e, + 0xbb, 0x3b, 0x89, 0x16, 0x61, 0xb2, 0x19, 0xc6, 0x2e, 0x31, 0x07, 0x42, 0xc8, 0x0c, 0x45, 0xe8, + 0x52, 0x1e, 0x01, 0x77, 0x3f, 0x83, 0x6e, 0xc0, 0x13, 0x46, 0xa3, 0x39, 0x0e, 0x5c, 0x6c, 0x9c, + 0x13, 0xd4, 0x9e, 0xb8, 0xd4, 0x13, 0x0b, 0xf7, 0x79, 0x3a, 0x6b, 0xf9, 0xd7, 0x0e, 0xb6, 0xfc, + 0xcf, 0x7e, 0x0a, 0x26, 0xbb, 0x3e, 0xf8, 0xa1, 0xac, 0xd3, 0x05, 0x78, 0xa2, 0xf7, 0xd0, 0x1e, + 0xca, 0x46, 0xfd, 0xc7, 0xb9, 0xc0, 0x23, 0x43, 0x13, 0x1a, 0xe0, 0xbc, 0xc3, 0x81, 0x32, 0x09, + 0x76, 0x84, 0xa4, 0xb9, 0x74, 0xb4, 0x29, 0x74, 0x31, 0xd8, 0xe1, 0x33, 0x83, 0x19, 0x75, 0x17, + 0x83, 0x1d, 0x4c, 0x69, 0xa3, 0x37, 0xad, 0xcc, 0x4e, 0xce, 0x4f, 0x49, 0x3e, 0x7b, 0x2c, 0xaa, + 0xdf, 0xc0, 0x9b, 0xbb, 0xfd, 0x6f, 0x4b, 0x70, 0xfe, 0x20, 0x22, 0x03, 0x0c, 0xdf, 0xb3, 0x30, + 0x9c, 0x30, 0xcf, 0x8f, 0x58, 0xba, 0xa3, 0x74, 0xd9, 0x72, 0x5f, 0xd0, 0xe7, 0xb0, 0x00, 0x21, + 0x1f, 0xca, 0x6d, 0x27, 0x12, 0xc6, 0xf3, 0xd2, 0x51, 0xc3, 0x8c, 0xe9, 0x7f, 0xc7, 0x5f, 0x71, + 0x22, 0x6e, 0x92, 0x19, 0x0d, 0x98, 0xb2, 0x41, 0x29, 0x54, 0x9c, 0x38, 0x76, 0xa4, 0x9b, 0xe1, + 0x6a, 0x31, 0xfc, 0xe6, 0x28, 0xc9, 0xfa, 0xe4, 0xdd, 0xfd, 0xe9, 0xf1, 0x4c, 0x13, 0xe6, 0xcc, + 0xec, 0x6f, 0x8e, 0x64, 0x42, 0x6d, 0x99, 0xef, 0x28, 0x81, 0x61, 0x61, 0x33, 0x5b, 0x45, 0x47, + 0x77, 0xf3, 0x5c, 0x09, 0xa6, 0xe8, 0x8b, 0x8c, 0x33, 0xc1, 0x0a, 0x7d, 0xc3, 0x62, 0x79, 0x5d, + 0x32, 0xfc, 0x58, 0xa8, 0xd7, 0xc7, 0x93, 0x66, 0x66, 0x66, 0x8b, 0xc9, 0x46, 0x6c, 0x72, 0xa7, + 0xb2, 0x3d, 0xe2, 0x19, 0x0a, 0x79, 0x25, 0x5b, 0x66, 0x7e, 0x49, 0x38, 0xda, 0xed, 0xe1, 0x23, + 0x2a, 0x20, 0x37, 0x68, 0x00, 0xaf, 0xd0, 0x5b, 0x16, 0x4c, 0x72, 0x55, 0x6a, 0xc1, 0x6b, 0x36, + 0x49, 0x4c, 0x02, 0x97, 0x48, 0x65, 0xf4, 0x88, 0x5e, 0x48, 0x79, 0x50, 0xb1, 0x94, 0x27, 0xaf, + 0x85, 0x7e, 0x17, 0x08, 0x77, 0x77, 0x06, 0x35, 0x60, 0xc8, 0x0b, 0x9a, 0xa1, 0xd8, 0xea, 0xea, + 0x47, 0xeb, 0xd4, 0x52, 0xd0, 0x0c, 0xf5, 0x6a, 0xa6, 0xff, 0x30, 0xa3, 0x8e, 0x96, 0xe1, 0x74, + 0x2c, 0x8e, 0x0b, 0x2e, 0x7b, 0x09, 0x35, 0xea, 0x96, 0xbd, 0xb6, 0x97, 0xb2, 0x6d, 0xaa, 0x5c, + 0x9f, 0xba, 0xbb, 0x3f, 0x7d, 0x1a, 0xf7, 0x80, 0xe3, 0x9e, 0x4f, 0xa1, 0xd7, 0x61, 0x44, 0x26, + 0xa2, 0x55, 0x8b, 0x50, 0xec, 0xbb, 0xe7, 0xbf, 0x9a, 0x4c, 0xeb, 0x22, 0xe7, 0x4c, 0x32, 0xb4, + 0xff, 0x25, 0x40, 0xb7, 0xa7, 0x06, 0xfd, 0x02, 0xd4, 0x62, 0x95, 0x1c, 0x67, 0x15, 0x11, 0x63, + 0x24, 0xbf, 0xaf, 0xf0, 0x12, 0xa9, 0x0d, 0x53, 0xa7, 0xc1, 0x69, 0x8e, 0x54, 0xad, 0x4d, 0xb4, + 0x43, 0xa7, 0x80, 0xb9, 0x2d, 0xb8, 0x6a, 0x47, 0xc0, 0x5e, 0xe0, 0x62, 0xc6, 0x03, 0xc5, 0x30, + 0xbc, 0x45, 0x1c, 0x3f, 0xdd, 0x2a, 0xe6, 0xcc, 0xf2, 0x32, 0xa3, 0x95, 0x0f, 0xa3, 0xe6, 0xad, + 0x58, 0x70, 0x42, 0xbb, 0x30, 0xb2, 0xc5, 0x27, 0x80, 0xd0, 0x34, 0x57, 0x8e, 0x3a, 0xb8, 0x99, + 0x59, 0xa5, 0x3f, 0xb7, 0x68, 0xc0, 0x92, 0x1d, 0x73, 0x30, 0x1b, 0x4e, 0x4a, 0xbe, 0x74, 0x8b, + 0x8b, 0x20, 0x1f, 0xdc, 0x43, 0xf9, 0x79, 0x18, 0x8b, 0x89, 0x1b, 0x06, 0xae, 0xe7, 0x93, 0xc6, + 0x9c, 0x3c, 0x8f, 0x3c, 0x4c, 0xdc, 0xf1, 0x49, 0xaa, 0x2d, 0x63, 0x83, 0x06, 0xce, 0x50, 0x44, + 0x5f, 0xb7, 0x60, 0x42, 0x65, 0xd4, 0xd0, 0x0f, 0x42, 0xc4, 0x89, 0xde, 0x72, 0x41, 0xf9, 0x3b, + 0x8c, 0x66, 0x1d, 0x51, 0x7b, 0x39, 0xdb, 0x86, 0x73, 0x7c, 0xd1, 0x2b, 0x00, 0xe1, 0x26, 0xf7, + 0x22, 0xcf, 0xa5, 0xe2, 0x78, 0xef, 0x30, 0xaf, 0x3a, 0xc1, 0x13, 0x10, 0x24, 0x05, 0x6c, 0x50, + 0x43, 0x57, 0x01, 0xf8, 0xb2, 0xd9, 0xd8, 0x8b, 0xa4, 0x3a, 0x2a, 0x03, 0xc7, 0x61, 0x5d, 0x41, + 0xee, 0xed, 0x4f, 0x77, 0x1f, 0xb7, 0x30, 0x5f, 0xaa, 0xf1, 0x38, 0xfa, 0x79, 0x18, 0x49, 0x3a, + 0xed, 0xb6, 0xa3, 0x0e, 0xff, 0x0a, 0x4c, 0x69, 0xe0, 0x74, 0x0d, 0x51, 0xc4, 0x1b, 0xb0, 0xe4, + 0x88, 0x6e, 0x51, 0xa1, 0x9a, 0x88, 0x73, 0x20, 0xb6, 0x8a, 0xb8, 0x4e, 0x30, 0xca, 0xde, 0xe9, + 0x13, 0xe2, 0xb9, 0xd3, 0xb8, 0x07, 0xce, 0xbd, 0xfd, 0xe9, 0x27, 0xb2, 0xed, 0xcb, 0xa1, 0x48, + 0x32, 0xe8, 0x49, 0x13, 0x5d, 0x91, 0x79, 0xe9, 0xf4, 0xb5, 0x65, 0xba, 0xe4, 0x73, 0x3a, 0x2f, + 0x9d, 0x35, 0xf7, 0x1f, 0x33, 0xf3, 0x61, 0x3b, 0xc8, 0xc6, 0xc3, 0x88, 0xb7, 0x79, 0x01, 0xc6, + 0xc8, 0x6e, 0x4a, 0xe2, 0xc0, 0xf1, 0xaf, 0xe3, 0x65, 0x79, 0x8e, 0xc5, 0x26, 0xed, 0x45, 0xa3, + 0x1d, 0x67, 0xb0, 0x90, 0xad, 0xec, 0xd7, 0x92, 0x4e, 0x9d, 0xe1, 0xf6, 0xab, 0xb4, 0x56, 0xed, + 0xff, 0x5b, 0xca, 0x68, 0x50, 0x1b, 0x31, 0x21, 0x28, 0x84, 0x4a, 0x10, 0x36, 0x94, 0xb0, 0xbe, + 0x52, 0x8c, 0xb0, 0xbe, 0x16, 0x36, 0x8c, 0x6c, 0x73, 0xfa, 0x2f, 0xc1, 0x9c, 0x0f, 0x4b, 0xc7, + 0x95, 0x79, 0xcb, 0x0c, 0x20, 0x2c, 0x83, 0x22, 0x39, 0xab, 0x74, 0xdc, 0x55, 0x93, 0x11, 0xce, + 0xf2, 0x45, 0xdb, 0x50, 0xd9, 0x0a, 0x93, 0x54, 0xda, 0x0b, 0x47, 0x34, 0x4d, 0x2e, 0x87, 0x49, + 0xca, 0xb6, 0x7d, 0xf5, 0xda, 0xb4, 0x25, 0xc1, 0x9c, 0x87, 0xfd, 0x5f, 0xad, 0xcc, 0xa9, 0xe5, + 0x4d, 0x16, 0x1b, 0xb6, 0x43, 0x02, 0xba, 0x0e, 0xcd, 0x70, 0x85, 0xff, 0x3f, 0x97, 0xba, 0xf1, + 0xc1, 0x7e, 0xb5, 0x3f, 0xee, 0x50, 0x0a, 0x33, 0x8c, 0x84, 0x11, 0xd9, 0xf0, 0x25, 0x2b, 0x9b, + 0x44, 0x53, 0x2a, 0xc2, 0x22, 0x30, 0x93, 0xc4, 0x0e, 0xcc, 0xc7, 0xb1, 0xdf, 0xb4, 0x60, 0xa4, + 0xee, 0xb8, 0xdb, 0x61, 0xb3, 0x89, 0x9e, 0x87, 0x6a, 0xa3, 0x13, 0x9b, 0xf9, 0x3c, 0xea, 0x98, + 0x6c, 0x41, 0xb4, 0x63, 0x85, 0x41, 0xe7, 0x70, 0xd3, 0x71, 0x65, 0xaa, 0x58, 0x99, 0xcf, 0xe1, + 0x4b, 0xac, 0x05, 0x0b, 0x08, 0xfa, 0x38, 0x8c, 0xb6, 0x9d, 0x5d, 0xf9, 0x70, 0xfe, 0xc8, 0x74, + 0x45, 0x83, 0xb0, 0x89, 0x67, 0xff, 0x2b, 0x0b, 0xa6, 0xea, 0x4e, 0xe2, 0xb9, 0x73, 0x9d, 0x74, + 0xab, 0xee, 0xa5, 0x9b, 0x1d, 0x77, 0x9b, 0xa4, 0x3c, 0x3f, 0x90, 0xf6, 0xb2, 0x93, 0xd0, 0xa5, + 0xa4, 0x0c, 0x31, 0xd5, 0xcb, 0xeb, 0xa2, 0x1d, 0x2b, 0x0c, 0xf4, 0x3a, 0x8c, 0x46, 0x4e, 0x92, + 0xdc, 0x09, 0xe3, 0x06, 0x26, 0xcd, 0x62, 0xb2, 0x73, 0xd7, 0x89, 0x1b, 0x93, 0x14, 0x93, 0xa6, + 0x70, 0x82, 0x69, 0xfa, 0xd8, 0x64, 0x66, 0xff, 0x7e, 0x0d, 0x46, 0x84, 0x07, 0x6f, 0xe0, 0xac, + 0x47, 0x69, 0x62, 0x96, 0xfa, 0x9a, 0x98, 0x09, 0x0c, 0xbb, 0xac, 0x46, 0x8c, 0xd0, 0x64, 0xae, + 0x16, 0xe2, 0xf2, 0xe5, 0x65, 0x67, 0x74, 0xb7, 0xf8, 0x7f, 0x2c, 0x58, 0xa1, 0xef, 0x58, 0x70, + 0xc2, 0x0d, 0x83, 0x80, 0xb8, 0x7a, 0x9b, 0x1d, 0x2a, 0x22, 0x88, 0x63, 0x3e, 0x4b, 0x54, 0x9f, + 0x17, 0xe7, 0x00, 0x38, 0xcf, 0x1e, 0xbd, 0x04, 0xe3, 0x7c, 0xcc, 0x6e, 0x64, 0x0e, 0xcb, 0x74, + 0x72, 0xbf, 0x09, 0xc4, 0x59, 0x5c, 0x34, 0xc3, 0x0f, 0x1d, 0x45, 0x1a, 0xfd, 0xb0, 0x76, 0x3e, + 0x18, 0x09, 0xf4, 0x06, 0x06, 0x8a, 0x01, 0xc5, 0xa4, 0x19, 0x93, 0x64, 0x4b, 0x78, 0x38, 0xd9, + 0x16, 0x3f, 0xf2, 0x60, 0x59, 0x54, 0xb8, 0x8b, 0x12, 0xee, 0x41, 0x1d, 0x6d, 0x0b, 0x1b, 0xa7, + 0x5a, 0x84, 0x54, 0x10, 0x9f, 0xb9, 0xaf, 0xa9, 0x33, 0x0d, 0x95, 0x64, 0xcb, 0x89, 0x1b, 0x4c, + 0xb5, 0x28, 0xf3, 0x60, 0xe1, 0x75, 0xda, 0x80, 0x79, 0x3b, 0x5a, 0x80, 0x93, 0xb9, 0xd2, 0x04, + 0x09, 0x53, 0x1e, 0xaa, 0x3a, 0xa8, 0x36, 0x57, 0xd4, 0x20, 0xc1, 0x5d, 0x4f, 0x98, 0xf6, 0xef, + 0xe8, 0x01, 0xf6, 0xef, 0x9e, 0x8a, 0xa3, 0x19, 0x63, 0x12, 0xff, 0xe5, 0x42, 0x06, 0x60, 0xa0, + 0xa0, 0x99, 0x6f, 0xe5, 0x82, 0x66, 0xc6, 0x59, 0x07, 0x6e, 0x14, 0xd3, 0x81, 0xc3, 0x47, 0xc8, + 0x3c, 0xca, 0x88, 0x97, 0xff, 0x63, 0x81, 0xfc, 0xae, 0xf3, 0x8e, 0xbb, 0x45, 0xe8, 0x94, 0x41, + 0x9f, 0x84, 0x09, 0x65, 0xc5, 0xcd, 0x87, 0x9d, 0x80, 0x07, 0xbb, 0x94, 0xb5, 0x63, 0x09, 0x67, + 0xa0, 0x38, 0x87, 0x8d, 0x66, 0xa1, 0x46, 0xc7, 0x89, 0x3f, 0xca, 0x77, 0x0f, 0x65, 0x29, 0xce, + 0xad, 0x2d, 0x89, 0xa7, 0x34, 0x0e, 0x0a, 0x61, 0xd2, 0x77, 0x92, 0x94, 0xf5, 0x80, 0x1a, 0x75, + 0x0f, 0x98, 0xc3, 0xc8, 0x2a, 0xb3, 0x2c, 0xe7, 0x09, 0xe1, 0x6e, 0xda, 0xf6, 0x0f, 0x86, 0x60, + 0x3c, 0x23, 0x19, 0x0f, 0xb9, 0xed, 0x3c, 0x0f, 0x55, 0xb9, 0x13, 0xe4, 0x33, 0xa9, 0xd5, 0x76, + 0xa1, 0x30, 0xe8, 0x36, 0xb9, 0x49, 0x9c, 0x98, 0xc4, 0xac, 0xe8, 0x43, 0x7e, 0x9b, 0xac, 0x6b, + 0x10, 0x36, 0xf1, 0x98, 0x50, 0x4e, 0xfd, 0x64, 0xde, 0xf7, 0x48, 0x90, 0xf2, 0x6e, 0x16, 0x23, + 0x94, 0x37, 0x96, 0xd7, 0x4d, 0xa2, 0x5a, 0x28, 0xe7, 0x00, 0x38, 0xcf, 0x1e, 0x7d, 0xd5, 0x82, + 0x71, 0xe7, 0x4e, 0xa2, 0x0b, 0x99, 0x89, 0xf0, 0x98, 0x23, 0x6e, 0x52, 0x99, 0xda, 0x68, 0xfc, + 0xd4, 0x31, 0xd3, 0x84, 0xb3, 0x4c, 0xd1, 0x77, 0x2d, 0x40, 0x64, 0x97, 0xb8, 0x32, 0x80, 0x47, + 0xf4, 0x65, 0xb8, 0x08, 0x63, 0xe7, 0x62, 0x17, 0x5d, 0x2e, 0xd5, 0xbb, 0xdb, 0x71, 0x8f, 0x3e, + 0xd8, 0xff, 0xac, 0xac, 0x16, 0x94, 0x8e, 0x19, 0x73, 0x8c, 0x4c, 0x0c, 0xeb, 0xc1, 0x33, 0x31, + 0xb4, 0x57, 0xb3, 0x2b, 0x1b, 0x23, 0x1b, 0xf8, 0x5e, 0x7a, 0x44, 0x81, 0xef, 0x5f, 0xb1, 0x32, + 0x35, 0x03, 0x46, 0x2f, 0xbc, 0x52, 0x6c, 0xbc, 0xda, 0x0c, 0xf7, 0xa9, 0xe7, 0xa4, 0x7b, 0xd6, + 0xd1, 0x4e, 0xa5, 0xa9, 0x81, 0x76, 0x28, 0x69, 0xf8, 0x1f, 0xcb, 0x30, 0x6a, 0xec, 0xa4, 0x3d, + 0xd5, 0x22, 0xeb, 0x31, 0x53, 0x8b, 0x4a, 0x87, 0x50, 0x8b, 0x7e, 0x11, 0x6a, 0xae, 0x94, 0xf2, + 0xc5, 0x54, 0xcd, 0xcb, 0xef, 0x1d, 0x5a, 0xd0, 0xab, 0x26, 0xac, 0x79, 0xa2, 0xc5, 0x4c, 0x40, + 0xbb, 0xd8, 0x21, 0x86, 0xd8, 0x0e, 0xd1, 0x2b, 0xe2, 0x5c, 0xec, 0x14, 0xdd, 0xcf, 0xb0, 0xd2, + 0x12, 0x91, 0x27, 0xde, 0x4b, 0x46, 0x95, 0xf2, 0xd2, 0x12, 0x6b, 0x4b, 0xb2, 0x19, 0x9b, 0x38, + 0xf6, 0x0f, 0x2c, 0xf5, 0x71, 0x1f, 0x42, 0x6e, 0xe7, 0xad, 0x6c, 0x6e, 0xe7, 0xc5, 0x42, 0x86, + 0xb9, 0x4f, 0x52, 0xe7, 0x35, 0x18, 0x99, 0x0f, 0xdb, 0x6d, 0x27, 0x68, 0xa0, 0x9f, 0x80, 0x11, + 0x97, 0xff, 0x14, 0x47, 0x15, 0xcc, 0x43, 0x25, 0xa0, 0x58, 0xc2, 0xd0, 0xd3, 0x30, 0xe4, 0xc4, + 0x2d, 0x79, 0x3c, 0xc1, 0xa2, 0x00, 0xe6, 0xe2, 0x56, 0x82, 0x59, 0xab, 0xfd, 0x46, 0x19, 0x60, + 0x3e, 0x6c, 0x47, 0x4e, 0x4c, 0x1a, 0x1b, 0x21, 0xab, 0xda, 0x73, 0xac, 0x7e, 0x1d, 0x6d, 0x2c, + 0x3d, 0xce, 0xbe, 0x1d, 0xe3, 0x7c, 0xbf, 0xfc, 0xb0, 0xcf, 0xf7, 0xbf, 0x69, 0x01, 0xa2, 0x5f, + 0x24, 0x0c, 0x48, 0x90, 0x6a, 0x87, 0xe5, 0x2c, 0xd4, 0x5c, 0xd9, 0x2a, 0xb4, 0x16, 0xbd, 0xfe, + 0x24, 0x00, 0x6b, 0x9c, 0x01, 0xcc, 0xcf, 0x67, 0xa5, 0x70, 0x2c, 0x67, 0x03, 0xe7, 0x98, 0x48, + 0x15, 0xb2, 0xd2, 0xfe, 0x83, 0x12, 0x3c, 0xc1, 0xf7, 0xbb, 0x15, 0x27, 0x70, 0x5a, 0xa4, 0x4d, + 0x7b, 0x35, 0xa8, 0x0b, 0xda, 0xa5, 0x76, 0x8f, 0x27, 0x03, 0xe1, 0x8e, 0xba, 0x30, 0xf8, 0x84, + 0xe6, 0x53, 0x78, 0x29, 0xf0, 0x52, 0xcc, 0x88, 0xa3, 0x04, 0xaa, 0xb2, 0x06, 0xab, 0x10, 0x74, + 0x05, 0x31, 0x52, 0x6b, 0x5e, 0x6c, 0x4a, 0x04, 0x2b, 0x46, 0x54, 0x2b, 0xf4, 0x43, 0x77, 0x1b, + 0x93, 0x28, 0x64, 0x42, 0xcd, 0x88, 0x43, 0x5a, 0x16, 0xed, 0x58, 0x61, 0xd8, 0x7f, 0x60, 0x41, + 0x5e, 0xdc, 0x1b, 0xf5, 0x49, 0xac, 0xfb, 0xd6, 0x27, 0x39, 0x44, 0x81, 0x90, 0x9f, 0x83, 0x51, + 0x27, 0xa5, 0x3b, 0x34, 0xb7, 0x69, 0xcb, 0x0f, 0x76, 0x6c, 0xbd, 0x12, 0x36, 0xbc, 0xa6, 0xc7, + 0x6c, 0x59, 0x93, 0x9c, 0xfd, 0xbf, 0x86, 0x60, 0xb2, 0x2b, 0xb8, 0x19, 0xbd, 0x08, 0x63, 0xae, + 0x98, 0x1e, 0x11, 0x26, 0x4d, 0xf1, 0x32, 0x46, 0x70, 0x8c, 0x86, 0xe1, 0x0c, 0xe6, 0x00, 0x13, + 0x74, 0x09, 0x4e, 0xc5, 0xd4, 0x8a, 0xee, 0x90, 0xb9, 0x66, 0x4a, 0xe2, 0x75, 0xe2, 0x86, 0x41, + 0x83, 0x57, 0xd1, 0x29, 0xd7, 0x9f, 0xbc, 0xbb, 0x3f, 0x7d, 0x0a, 0x77, 0x83, 0x71, 0xaf, 0x67, + 0x50, 0x04, 0xe3, 0xbe, 0xa9, 0x60, 0x09, 0xed, 0xfa, 0x81, 0x74, 0x33, 0xb5, 0x01, 0x67, 0x9a, + 0x71, 0x96, 0x41, 0x56, 0x4b, 0xab, 0x3c, 0x22, 0x2d, 0xed, 0x97, 0xb4, 0x96, 0xc6, 0xfd, 0xab, + 0xaf, 0x16, 0x1c, 0xdc, 0x7e, 0xdc, 0x6a, 0xda, 0xcb, 0x50, 0x95, 0xb1, 0x27, 0x03, 0xc5, 0x6c, + 0x98, 0x74, 0xfa, 0x48, 0xb4, 0x7b, 0x25, 0xe8, 0xa1, 0xe1, 0xd3, 0x75, 0xa6, 0xb7, 0xd3, 0xcc, + 0x3a, 0x3b, 0xdc, 0x96, 0x8a, 0x76, 0x79, 0xdc, 0x0d, 0xdf, 0x38, 0x3e, 0x53, 0xb4, 0x85, 0xa2, + 0x43, 0x71, 0x54, 0x14, 0xb3, 0x0a, 0xc7, 0xb9, 0x00, 0xa0, 0xb5, 0x20, 0x11, 0xa3, 0xaa, 0xdc, + 0x7a, 0x5a, 0x59, 0xc2, 0x06, 0x16, 0x35, 0x58, 0xbd, 0x20, 0x49, 0x1d, 0xdf, 0xbf, 0xec, 0x05, + 0xa9, 0x38, 0x79, 0x53, 0x3b, 0xe4, 0x92, 0x06, 0x61, 0x13, 0xef, 0xec, 0x27, 0x8c, 0xef, 0x72, + 0x98, 0xef, 0xb9, 0x05, 0x4f, 0x2d, 0x7a, 0xa9, 0x8a, 0xac, 0x56, 0xf3, 0x88, 0x2a, 0x39, 0x2a, + 0x53, 0xc0, 0xea, 0x9b, 0x29, 0x60, 0x44, 0x36, 0x97, 0xb2, 0x81, 0xd8, 0xf9, 0xc8, 0x66, 0xfb, + 0x45, 0x38, 0xbd, 0xe8, 0xa5, 0x97, 0x3c, 0x9f, 0x1c, 0x92, 0x89, 0xfd, 0xd5, 0x0a, 0x8c, 0x99, + 0x99, 0x2c, 0x87, 0x49, 0x76, 0xf8, 0x36, 0xd5, 0x63, 0xc4, 0xdb, 0x79, 0xca, 0xc7, 0x72, 0xf3, + 0xc8, 0x69, 0x35, 0xbd, 0x47, 0xcc, 0x50, 0x65, 0x34, 0x4f, 0x6c, 0x76, 0x00, 0xdd, 0x81, 0x4a, + 0x93, 0x45, 0xde, 0x96, 0x8b, 0xf0, 0x1c, 0xf7, 0x1a, 0x51, 0xbd, 0xcc, 0x78, 0xec, 0x2e, 0xe7, + 0x47, 0x77, 0xc8, 0x38, 0x9b, 0xce, 0xa1, 0x04, 0x95, 0x4a, 0xe4, 0x50, 0x18, 0xfd, 0x44, 0x7d, + 0xe5, 0x01, 0x44, 0x7d, 0x46, 0xf0, 0x0e, 0x3f, 0x22, 0xc1, 0xcb, 0xa2, 0xa8, 0xd3, 0x2d, 0xa6, + 0xbf, 0x89, 0x18, 0xda, 0x11, 0x36, 0x08, 0x46, 0x14, 0x75, 0x06, 0x8c, 0xf3, 0xf8, 0xf6, 0x37, + 0x4b, 0x30, 0xb1, 0x18, 0x74, 0xd6, 0x16, 0xd7, 0x3a, 0x9b, 0xbe, 0xe7, 0x5e, 0x25, 0x7b, 0x54, + 0xbe, 0x6d, 0x93, 0xbd, 0xa5, 0x05, 0x31, 0x0d, 0xd5, 0xc0, 0x5f, 0xa5, 0x8d, 0x98, 0xc3, 0xe8, + 0x8a, 0x6e, 0x7a, 0x41, 0x8b, 0xc4, 0x51, 0xec, 0x89, 0x43, 0x39, 0x63, 0x45, 0x5f, 0xd2, 0x20, + 0x6c, 0xe2, 0x51, 0xda, 0xe1, 0x9d, 0x80, 0xc4, 0x79, 0x6d, 0x70, 0x95, 0x36, 0x62, 0x0e, 0xa3, + 0x48, 0x69, 0xdc, 0x49, 0x52, 0xf1, 0x45, 0x15, 0xd2, 0x06, 0x6d, 0xc4, 0x1c, 0x46, 0x97, 0x4b, + 0xd2, 0xd9, 0x64, 0xde, 0xed, 0x5c, 0xd4, 0xeb, 0x3a, 0x6f, 0xc6, 0x12, 0x4e, 0x51, 0xb7, 0xc9, + 0xde, 0x02, 0xb5, 0xcb, 0x72, 0x71, 0xe9, 0x57, 0x79, 0x33, 0x96, 0x70, 0x56, 0xb6, 0x27, 0x3b, + 0x1c, 0x3f, 0x72, 0x65, 0x7b, 0xb2, 0xdd, 0xef, 0x63, 0xe1, 0xfd, 0x86, 0x05, 0x63, 0x66, 0x4c, + 0x0a, 0x6a, 0xe5, 0x14, 0xc5, 0xd5, 0xae, 0x12, 0x6c, 0x3f, 0xd3, 0xeb, 0xbe, 0x89, 0x96, 0x97, + 0x86, 0x51, 0xf2, 0x11, 0x12, 0xb4, 0xbc, 0x80, 0x30, 0xcf, 0x25, 0x8f, 0x65, 0xc9, 0x04, 0xbc, + 0xcc, 0x87, 0x0d, 0xf2, 0x00, 0x9a, 0xa6, 0x7d, 0x13, 0x26, 0xbb, 0x92, 0x11, 0x06, 0xd8, 0x9f, + 0x0f, 0x4c, 0x05, 0xb3, 0x31, 0x8c, 0x52, 0xc2, 0x3c, 0x10, 0x31, 0x41, 0xf3, 0x30, 0xc9, 0x75, + 0x08, 0xca, 0x69, 0xdd, 0xdd, 0x22, 0x6d, 0x95, 0x60, 0xc2, 0x4e, 0x80, 0x6f, 0xe4, 0x81, 0xb8, + 0x1b, 0xdf, 0xfe, 0x96, 0x05, 0xe3, 0x99, 0xfc, 0x90, 0x82, 0x34, 0x09, 0xb6, 0xd2, 0x42, 0x16, + 0x22, 0xc5, 0xe2, 0x44, 0xcb, 0x6c, 0x47, 0xd2, 0x2b, 0x4d, 0x83, 0xb0, 0x89, 0x67, 0xbf, 0x59, + 0x82, 0xaa, 0xf4, 0x5a, 0x0f, 0xd0, 0x95, 0x6f, 0x58, 0x30, 0xae, 0x4e, 0xdd, 0xd9, 0x71, 0x0e, + 0x9f, 0x8c, 0xd7, 0x8e, 0xee, 0x37, 0x57, 0x31, 0x7c, 0x41, 0x33, 0xd4, 0x6a, 0x2d, 0x36, 0x99, + 0xe1, 0x2c, 0x6f, 0x74, 0x03, 0x20, 0xd9, 0x4b, 0x52, 0xd2, 0x36, 0x0e, 0x96, 0x6c, 0x63, 0xc5, + 0xcd, 0xb8, 0x61, 0x4c, 0xe8, 0xfa, 0xba, 0x16, 0x36, 0xc8, 0xba, 0xc2, 0xd4, 0x7a, 0x88, 0x6e, + 0xc3, 0x06, 0x25, 0xfb, 0x1f, 0x96, 0xe0, 0x64, 0xbe, 0x4b, 0xe8, 0x55, 0x18, 0x93, 0xdc, 0x8d, + 0xbb, 0x33, 0xa4, 0xab, 0x7e, 0x0c, 0x1b, 0xb0, 0x7b, 0xfb, 0xd3, 0xd3, 0xdd, 0x77, 0x97, 0xcc, + 0x98, 0x28, 0x38, 0x43, 0x8c, 0xbb, 0x3e, 0x84, 0x8f, 0xae, 0xbe, 0x37, 0x17, 0x45, 0xc2, 0x7f, + 0x61, 0xb8, 0x3e, 0x4c, 0x28, 0xce, 0x61, 0xa3, 0x35, 0x38, 0x6d, 0xb4, 0x5c, 0x23, 0x5e, 0x6b, + 0x6b, 0x33, 0x8c, 0xa5, 0x79, 0xf2, 0xb4, 0x8e, 0x7e, 0xe9, 0xc6, 0xc1, 0x3d, 0x9f, 0xa4, 0x5b, + 0xa6, 0xeb, 0x44, 0x8e, 0xeb, 0xa5, 0x7b, 0xe2, 0xa4, 0x4c, 0xc9, 0xa6, 0x79, 0xd1, 0x8e, 0x15, + 0x86, 0xbd, 0x02, 0x43, 0x03, 0xce, 0xa0, 0x81, 0xd4, 0xe2, 0x97, 0xa1, 0x4a, 0xc9, 0x49, 0x1d, + 0xa9, 0x08, 0x92, 0x21, 0x54, 0x65, 0xf9, 0x6b, 0x64, 0x43, 0xd9, 0x73, 0xa4, 0x77, 0x49, 0xbd, + 0xd6, 0x52, 0x92, 0x74, 0x98, 0xa5, 0x49, 0x81, 0xe8, 0x59, 0x28, 0x93, 0xdd, 0x28, 0xef, 0x46, + 0xba, 0xb8, 0x1b, 0x79, 0x31, 0x49, 0x28, 0x12, 0xd9, 0x8d, 0xd0, 0x59, 0x28, 0x79, 0x0d, 0xb1, + 0x49, 0x81, 0xc0, 0x29, 0x2d, 0x2d, 0xe0, 0x92, 0xd7, 0xb0, 0x77, 0xa1, 0xa6, 0xea, 0x6d, 0xa3, + 0x6d, 0x29, 0xbb, 0xad, 0x22, 0xc2, 0x4c, 0x24, 0xdd, 0x3e, 0x52, 0xbb, 0x03, 0xa0, 0xb3, 0x71, + 0x8a, 0x92, 0x2f, 0xe7, 0x61, 0xc8, 0x0d, 0x45, 0x12, 0x5f, 0x55, 0x93, 0x61, 0x42, 0x9b, 0x41, + 0xec, 0x9b, 0x30, 0x71, 0x35, 0x08, 0xef, 0xb0, 0x82, 0xa2, 0xac, 0xdc, 0x09, 0x25, 0xdc, 0xa4, + 0x3f, 0xf2, 0x2a, 0x02, 0x83, 0x62, 0x0e, 0x53, 0x95, 0x3a, 0x4a, 0xfd, 0x2a, 0x75, 0xd8, 0x5f, + 0xb2, 0xe0, 0xa4, 0x4a, 0x13, 0x91, 0xd2, 0xf8, 0x45, 0x18, 0xdb, 0xec, 0x78, 0x7e, 0x43, 0xfc, + 0xcf, 0xdb, 0xfa, 0x75, 0x03, 0x86, 0x33, 0x98, 0xd4, 0x32, 0xd9, 0xf4, 0x02, 0x27, 0xde, 0x5b, + 0xd3, 0xe2, 0x5f, 0x49, 0x84, 0xba, 0x82, 0x60, 0x03, 0xcb, 0xfe, 0x4a, 0x09, 0xc6, 0x33, 0x49, + 0xf3, 0xc8, 0x87, 0x2a, 0xf1, 0xd9, 0x09, 0x94, 0xfc, 0xa8, 0x47, 0xad, 0xa4, 0xa5, 0x26, 0xe2, + 0x45, 0x41, 0x17, 0x2b, 0x0e, 0x8f, 0x85, 0x9b, 0xc5, 0xfe, 0xc3, 0x32, 0x4c, 0xf1, 0x83, 0xb7, + 0x86, 0x8a, 0x67, 0x58, 0x91, 0xda, 0xc9, 0x5f, 0xd7, 0x05, 0x2a, 0xf8, 0x70, 0x6c, 0x1e, 0xb5, + 0x16, 0x64, 0x6f, 0x46, 0x03, 0x79, 0xda, 0x7f, 0x3d, 0xe7, 0x69, 0xe7, 0x9b, 0x54, 0xeb, 0x98, + 0x7a, 0xf4, 0xa3, 0xe5, 0x7a, 0xff, 0x7b, 0x25, 0x38, 0x91, 0x2b, 0xb4, 0x89, 0xde, 0xc8, 0x96, + 0xd2, 0xb2, 0x8a, 0x38, 0x9e, 0xb9, 0x6f, 0xb9, 0xc7, 0xc3, 0x15, 0xd4, 0x7a, 0x54, 0x13, 0xfe, + 0x8f, 0x4a, 0x30, 0x91, 0xad, 0x10, 0xfa, 0x18, 0x8e, 0xd4, 0x87, 0xa1, 0xc6, 0xea, 0xee, 0xb1, + 0x5b, 0x4d, 0xf8, 0x29, 0x10, 0x2f, 0x0f, 0x27, 0x1b, 0xb1, 0x86, 0x3f, 0x16, 0x75, 0xca, 0xec, + 0xbf, 0x6f, 0xc1, 0x19, 0xfe, 0x96, 0xf9, 0x79, 0xf8, 0x37, 0x7a, 0x8d, 0xee, 0x6b, 0xc5, 0x76, + 0x30, 0x57, 0x58, 0xe5, 0xa0, 0xf1, 0x65, 0xb7, 0x29, 0x88, 0xde, 0x66, 0xa7, 0xc2, 0x63, 0xd8, + 0xd9, 0x43, 0x4d, 0x06, 0xfb, 0x8f, 0xca, 0xa0, 0x2f, 0x90, 0x40, 0x9e, 0x48, 0x9b, 0x28, 0xa4, + 0xc0, 0xcc, 0xfa, 0x5e, 0xe0, 0xea, 0xab, 0x2a, 0xaa, 0xb9, 0xac, 0x89, 0x5f, 0xb6, 0x60, 0xd4, + 0x0b, 0xbc, 0xd4, 0x73, 0x98, 0xd2, 0x59, 0x4c, 0x01, 0x7c, 0xc5, 0x6e, 0x89, 0x53, 0x0e, 0x63, + 0xf3, 0xe8, 0x50, 0x31, 0xc3, 0x26, 0x67, 0xf4, 0x79, 0x11, 0x0c, 0x57, 0x2e, 0x2c, 0xe1, 0xa7, + 0x9a, 0x8b, 0x80, 0x8b, 0xa0, 0x12, 0x93, 0x34, 0x2e, 0x28, 0x4f, 0x0e, 0x53, 0x52, 0xaa, 0x9e, + 0x98, 0xbe, 0xca, 0x8b, 0x36, 0x63, 0xce, 0xc8, 0x4e, 0x00, 0x75, 0x8f, 0xc5, 0x21, 0x03, 0x8d, + 0x66, 0xa1, 0xe6, 0x74, 0xd2, 0xb0, 0x4d, 0x87, 0x49, 0x9c, 0x6e, 0xea, 0x50, 0x2a, 0x09, 0xc0, + 0x1a, 0xc7, 0x7e, 0xa3, 0x02, 0xb9, 0x3c, 0x06, 0xb4, 0x6b, 0x5e, 0x7e, 0x62, 0x15, 0x7b, 0xf9, + 0x89, 0xea, 0x4c, 0xaf, 0x0b, 0x50, 0x50, 0x0b, 0x2a, 0xd1, 0x96, 0x93, 0x48, 0x9d, 0xf2, 0x65, + 0x39, 0x4c, 0x6b, 0xb4, 0xf1, 0xde, 0xfe, 0xf4, 0xcf, 0x0e, 0x76, 0x46, 0x41, 0xe7, 0xea, 0x2c, + 0x4f, 0x31, 0xd6, 0xac, 0x19, 0x0d, 0xcc, 0xe9, 0x1f, 0xe6, 0x0a, 0x80, 0x2f, 0x8b, 0xe2, 0x8c, + 0x98, 0x24, 0x1d, 0x3f, 0x15, 0xb3, 0xe1, 0xe5, 0x02, 0x57, 0x19, 0x27, 0xac, 0x33, 0xf0, 0xf8, + 0x7f, 0x6c, 0x30, 0x45, 0xaf, 0x42, 0x2d, 0x49, 0x9d, 0x38, 0x7d, 0xc0, 0x9c, 0x19, 0x35, 0xe8, + 0xeb, 0x92, 0x08, 0xd6, 0xf4, 0xd0, 0x2b, 0xac, 0xde, 0x96, 0x97, 0x6c, 0x3d, 0x60, 0x0c, 0xab, + 0xac, 0xcd, 0x25, 0x28, 0x60, 0x83, 0x1a, 0x55, 0xd9, 0xd9, 0xdc, 0xe6, 0x81, 0x1b, 0x55, 0x66, + 0x93, 0x29, 0x51, 0x88, 0x15, 0x04, 0x1b, 0x58, 0xf6, 0x4f, 0x42, 0x36, 0x85, 0x14, 0x4d, 0xcb, + 0x8c, 0x55, 0x7e, 0x66, 0xc3, 0x62, 0x51, 0x33, 0xc9, 0xa5, 0xbf, 0x67, 0x81, 0x99, 0xe7, 0x8a, + 0x6e, 0xf3, 0x84, 0x5a, 0xab, 0x88, 0xc3, 0x6a, 0x83, 0xee, 0xcc, 0x8a, 0x13, 0xe5, 0xbc, 0x26, + 0x32, 0xab, 0xf6, 0xec, 0x27, 0xa0, 0x2a, 0xa1, 0x87, 0x52, 0xea, 0xbe, 0x08, 0xa7, 0xf2, 0x57, + 0xc3, 0x89, 0x33, 0xda, 0x56, 0x1c, 0x76, 0xa2, 0xbc, 0x01, 0xc6, 0xae, 0x0e, 0xc3, 0x1c, 0x46, + 0x0d, 0xb0, 0x6d, 0x2f, 0x68, 0xe4, 0x0d, 0xb0, 0xab, 0x5e, 0xd0, 0xc0, 0x0c, 0x32, 0xc0, 0x15, + 0x38, 0xff, 0xdc, 0x82, 0xf3, 0x07, 0xdd, 0x60, 0x87, 0x9e, 0x86, 0xa1, 0x3b, 0x4e, 0x2c, 0x8b, + 0x15, 0x32, 0x41, 0x79, 0xd3, 0x89, 0x03, 0xcc, 0x5a, 0xd1, 0x1e, 0x0c, 0xf3, 0x84, 0x4c, 0xa1, + 0xad, 0xbf, 0x5c, 0xec, 0x7d, 0x7a, 0x57, 0x89, 0x61, 0x2e, 0xf0, 0x64, 0x50, 0x2c, 0x18, 0xda, + 0xef, 0x5a, 0x80, 0x56, 0x77, 0x48, 0x1c, 0x7b, 0x0d, 0x23, 0x85, 0x14, 0xbd, 0x00, 0x63, 0xb7, + 0xd6, 0x57, 0xaf, 0xad, 0x85, 0x5e, 0xc0, 0x52, 0xca, 0x8d, 0x24, 0x9c, 0x2b, 0x46, 0x3b, 0xce, + 0x60, 0xa1, 0x79, 0x98, 0xbc, 0x75, 0x9b, 0x1a, 0x8d, 0x66, 0x05, 0xe2, 0x92, 0x3e, 0x26, 0xbc, + 0xf2, 0x72, 0x0e, 0x88, 0xbb, 0xf1, 0xd1, 0x2a, 0x9c, 0x69, 0x73, 0x73, 0x83, 0x17, 0x0e, 0xe5, + 0xb6, 0x47, 0x2c, 0x0b, 0x53, 0x3c, 0x75, 0x77, 0x7f, 0xfa, 0xcc, 0x4a, 0x2f, 0x04, 0xdc, 0xfb, + 0x39, 0xfb, 0xed, 0x12, 0x8c, 0x1a, 0xb7, 0x40, 0x0e, 0x70, 0x2a, 0x90, 0xbb, 0xb8, 0xb2, 0x34, + 0xe0, 0xc5, 0x95, 0xcf, 0x41, 0x35, 0x0a, 0x7d, 0xcf, 0xf5, 0x54, 0x15, 0x0d, 0x56, 0xec, 0x6d, + 0x4d, 0xb4, 0x61, 0x05, 0x45, 0x77, 0xa0, 0xa6, 0x6e, 0x46, 0x13, 0x99, 0x8c, 0x45, 0x9d, 0x8b, + 0x28, 0x49, 0xa5, 0x6f, 0x3c, 0xd3, 0xbc, 0x90, 0x0d, 0xc3, 0x6c, 0xe6, 0xcb, 0xf8, 0x2d, 0x96, + 0x62, 0xc2, 0x96, 0x44, 0x82, 0x05, 0xc4, 0xfe, 0xda, 0x08, 0x9c, 0xee, 0x55, 0xa0, 0x0c, 0x7d, + 0x01, 0x86, 0x79, 0x1f, 0x8b, 0xa9, 0x81, 0xd9, 0x8b, 0xc7, 0x22, 0x23, 0x28, 0xba, 0xc5, 0x7e, + 0x63, 0xc1, 0x53, 0x70, 0xf7, 0x9d, 0x4d, 0xa1, 0x33, 0x1d, 0x0f, 0xf7, 0x65, 0x47, 0x73, 0x5f, + 0x76, 0x38, 0x77, 0xdf, 0xd9, 0x44, 0xbb, 0x50, 0x69, 0x79, 0x29, 0x71, 0x84, 0xe5, 0x70, 0xf3, + 0x58, 0x98, 0x13, 0x87, 0x8b, 0x66, 0xf6, 0x13, 0x73, 0x86, 0xe8, 0x2d, 0x0b, 0x4e, 0x6c, 0x66, + 0x33, 0x76, 0xc4, 0x16, 0xea, 0x1c, 0x43, 0x11, 0xba, 0x2c, 0x23, 0x5e, 0xda, 0x37, 0xd7, 0x88, + 0xf3, 0xdd, 0x41, 0xbf, 0x64, 0xc1, 0x48, 0xd3, 0xf3, 0x8d, 0x0a, 0x4b, 0xc7, 0xf0, 0x71, 0x2e, + 0x31, 0x06, 0x5a, 0xcd, 0xe0, 0xff, 0x13, 0x2c, 0x39, 0xf7, 0xf3, 0x5d, 0x0e, 0x1f, 0xd5, 0x77, + 0x39, 0xf2, 0x88, 0x6c, 0xc5, 0x5f, 0x2d, 0xc1, 0xb3, 0x03, 0x7c, 0x23, 0x33, 0x03, 0xc4, 0x3a, + 0x20, 0x03, 0xe4, 0x3c, 0x0c, 0xc5, 0x24, 0x0a, 0xf3, 0xfb, 0x1d, 0x0b, 0x93, 0x62, 0x10, 0xf4, + 0x0c, 0x94, 0x9d, 0xc8, 0x13, 0xdb, 0x9d, 0xda, 0xa4, 0xe7, 0xd6, 0x96, 0x30, 0x6d, 0xa7, 0x5f, + 0xba, 0xb6, 0x29, 0xf3, 0xc8, 0x8a, 0x29, 0xb3, 0xdd, 0x2f, 0x2d, 0x8d, 0x5b, 0x6f, 0x0a, 0x8a, + 0x35, 0x5f, 0x7b, 0x15, 0xce, 0xf6, 0x9f, 0x21, 0xe8, 0xa3, 0x30, 0xba, 0x19, 0x3b, 0x81, 0xbb, + 0xc5, 0x4a, 0xd2, 0xcb, 0x31, 0x61, 0x71, 0xff, 0xba, 0x19, 0x9b, 0x38, 0xf6, 0x1f, 0x96, 0x7a, + 0x53, 0xe4, 0x42, 0xe0, 0x30, 0x23, 0x2c, 0xc6, 0xaf, 0xd4, 0x67, 0xfc, 0x6e, 0x43, 0x35, 0x65, + 0x69, 0x07, 0xa4, 0x29, 0x24, 0x49, 0x61, 0x99, 0x73, 0x6c, 0xaf, 0xd9, 0x10, 0xc4, 0xb1, 0x62, + 0x43, 0x45, 0xbe, 0xaf, 0x8b, 0x33, 0x09, 0x91, 0x9f, 0x3b, 0x34, 0x5c, 0x80, 0x93, 0x46, 0xad, + 0x49, 0x1e, 0x75, 0xcd, 0x7d, 0xc6, 0x2a, 0x15, 0x69, 0x2d, 0x07, 0xc7, 0x5d, 0x4f, 0xd8, 0xbf, + 0x51, 0x82, 0xa7, 0xfa, 0x4a, 0x36, 0xed, 0xd8, 0xb6, 0xee, 0xe3, 0xd8, 0x3e, 0xf2, 0x04, 0x35, + 0x07, 0x78, 0xe8, 0xe1, 0x0c, 0xf0, 0xf3, 0x50, 0xf5, 0x82, 0x84, 0xb8, 0x9d, 0x98, 0x0f, 0x9a, + 0x11, 0x83, 0xb8, 0x24, 0xda, 0xb1, 0xc2, 0xb0, 0xff, 0xb8, 0xff, 0x54, 0xa3, 0xbb, 0xdc, 0x8f, + 0xed, 0x28, 0xbd, 0x04, 0xe3, 0x4e, 0x14, 0x71, 0x3c, 0xe6, 0x44, 0xcc, 0x25, 0x17, 0xce, 0x99, + 0x40, 0x9c, 0xc5, 0x35, 0xe6, 0xf0, 0x70, 0xbf, 0x39, 0x6c, 0xff, 0x99, 0x05, 0x35, 0x4c, 0x9a, + 0xbc, 0x46, 0x29, 0xba, 0x25, 0x86, 0xc8, 0x2a, 0xa2, 0x12, 0x06, 0xbb, 0x5f, 0xdd, 0x63, 0x15, + 0x22, 0x7a, 0x0d, 0x76, 0x77, 0xdd, 0xd4, 0xd2, 0xa1, 0xea, 0xa6, 0xaa, 0xca, 0x99, 0xe5, 0xfe, + 0x95, 0x33, 0xed, 0xb7, 0x47, 0xe8, 0xeb, 0x45, 0xe1, 0x7c, 0x4c, 0x1a, 0x09, 0xfd, 0xbe, 0x9d, + 0xd8, 0xcf, 0x5f, 0x3b, 0x79, 0x1d, 0x2f, 0x63, 0xda, 0x9e, 0x39, 0xf1, 0x28, 0x1d, 0x2a, 0xb5, + 0xaa, 0x7c, 0x60, 0x6a, 0xd5, 0x4b, 0x30, 0x9e, 0x24, 0x5b, 0x6b, 0xb1, 0xb7, 0xe3, 0xa4, 0xd4, + 0xb4, 0x10, 0x31, 0x28, 0x3a, 0x1d, 0x62, 0xfd, 0xb2, 0x06, 0xe2, 0x2c, 0x2e, 0x5a, 0x84, 0x49, + 0x9d, 0xe0, 0x44, 0xe2, 0x94, 0x85, 0x9c, 0xf0, 0x99, 0xa0, 0xb2, 0x11, 0x74, 0x4a, 0x94, 0x40, + 0xc0, 0xdd, 0xcf, 0x50, 0x89, 0x95, 0x69, 0xa4, 0x1d, 0x19, 0xce, 0x4a, 0xac, 0x0c, 0x1d, 0xda, + 0x97, 0xae, 0x27, 0xd0, 0x0a, 0x9c, 0xe2, 0x13, 0x83, 0xdd, 0x73, 0xac, 0xde, 0x88, 0x87, 0x08, + 0xbd, 0x5f, 0x10, 0x3a, 0xb5, 0xd8, 0x8d, 0x82, 0x7b, 0x3d, 0x47, 0xed, 0x06, 0xd5, 0xbc, 0xb4, + 0x20, 0x8c, 0x75, 0x65, 0x37, 0x28, 0x32, 0x4b, 0x0d, 0x6c, 0xe2, 0xa1, 0xcf, 0xc0, 0x93, 0xfa, + 0x2f, 0x0f, 0xee, 0xe3, 0x27, 0x58, 0x0b, 0x22, 0x77, 0x54, 0xd5, 0x69, 0x5c, 0xec, 0x89, 0xd6, + 0xc0, 0xfd, 0x9e, 0x47, 0x9b, 0x70, 0x56, 0x81, 0x2e, 0x52, 0x23, 0x2d, 0x8a, 0xbd, 0x84, 0xd4, + 0x9d, 0x84, 0x5c, 0x8f, 0x7d, 0x96, 0x6d, 0x5a, 0xd3, 0x05, 0xe7, 0x17, 0xbd, 0xf4, 0x72, 0x2f, + 0x4c, 0xbc, 0x8c, 0xef, 0x43, 0x05, 0xcd, 0x42, 0x8d, 0x04, 0xce, 0xa6, 0x4f, 0x56, 0xe7, 0x97, + 0x58, 0x0e, 0xaa, 0x71, 0x60, 0x76, 0x51, 0x02, 0xb0, 0xc6, 0x51, 0x6e, 0xcf, 0xb1, 0xbe, 0x17, + 0x14, 0xac, 0xc1, 0xe9, 0x96, 0x1b, 0x51, 0x3d, 0xc0, 0x73, 0xc9, 0x9c, 0xeb, 0x86, 0x9d, 0x80, + 0x7d, 0x61, 0x5e, 0x37, 0x56, 0xf9, 0xf4, 0x17, 0xe7, 0xd7, 0xba, 0x70, 0x70, 0xcf, 0x27, 0xe9, + 0x1a, 0x8b, 0xe2, 0x70, 0x77, 0x6f, 0xea, 0x54, 0x76, 0x8d, 0xad, 0xd1, 0x46, 0xcc, 0x61, 0xe8, + 0x0a, 0x20, 0x16, 0x20, 0x72, 0x39, 0x4d, 0x23, 0xa5, 0x78, 0x4c, 0x9d, 0x66, 0xaf, 0x74, 0x56, + 0x3c, 0x81, 0x2e, 0x75, 0x61, 0xe0, 0x1e, 0x4f, 0xd9, 0x7f, 0x6a, 0xc1, 0xb8, 0x5a, 0xaf, 0x0f, + 0x21, 0x44, 0xca, 0xcf, 0x86, 0x48, 0x2d, 0x1e, 0x5d, 0xe2, 0xb1, 0x9e, 0xf7, 0xf1, 0xb3, 0x7f, + 0x6d, 0x14, 0x40, 0x4b, 0x45, 0xb5, 0x21, 0x59, 0x7d, 0x37, 0xa4, 0xc7, 0x56, 0x22, 0xf5, 0x4a, + 0x38, 0xab, 0x3c, 0xda, 0x84, 0xb3, 0x75, 0x38, 0x23, 0xd5, 0x05, 0x7e, 0x24, 0x73, 0x39, 0x4c, + 0x94, 0x80, 0xab, 0xd6, 0x9f, 0x11, 0x84, 0xce, 0x2c, 0xf5, 0x42, 0xc2, 0xbd, 0x9f, 0xcd, 0x68, + 0x29, 0x23, 0x07, 0x69, 0x29, 0x7a, 0x4d, 0x2f, 0x37, 0x65, 0xd5, 0xc7, 0xdc, 0x9a, 0x5e, 0xbe, + 0xb4, 0x8e, 0x35, 0x4e, 0x6f, 0xc1, 0x5e, 0x2b, 0x48, 0xb0, 0xc3, 0xa1, 0x05, 0xbb, 0x14, 0x31, + 0xa3, 0x7d, 0x45, 0x8c, 0x3c, 0x05, 0x1a, 0xeb, 0x7b, 0x0a, 0xf4, 0x49, 0x98, 0xf0, 0x82, 0x2d, + 0x12, 0x7b, 0x29, 0x69, 0xb0, 0xb5, 0x20, 0xee, 0xf2, 0x57, 0xdb, 0xfa, 0x52, 0x06, 0x8a, 0x73, + 0xd8, 0x59, 0xb9, 0x38, 0x31, 0x80, 0x5c, 0xec, 0xb3, 0x1b, 0x9d, 0x28, 0x66, 0x37, 0x3a, 0x79, + 0xf4, 0xdd, 0x68, 0xf2, 0x58, 0x77, 0x23, 0x54, 0xc8, 0x6e, 0x34, 0x90, 0xa0, 0x37, 0x0c, 0xba, + 0xd3, 0x07, 0x18, 0x74, 0xfd, 0xb6, 0xa2, 0x33, 0x0f, 0xbc, 0x15, 0xf5, 0xde, 0x65, 0x9e, 0x78, + 0xa0, 0x5d, 0xe6, 0xeb, 0x25, 0x38, 0xa3, 0xe5, 0x30, 0x9d, 0xfd, 0x5e, 0x93, 0x4a, 0x22, 0x56, + 0x38, 0x98, 0xc7, 0xde, 0x18, 0x11, 0x7b, 0x3a, 0xf8, 0x4f, 0x41, 0xb0, 0x81, 0xc5, 0x02, 0xdf, + 0x48, 0xcc, 0xea, 0xe9, 0xe4, 0x85, 0xf4, 0xbc, 0x68, 0xc7, 0x0a, 0x83, 0xce, 0x2f, 0xfa, 0x5b, + 0x04, 0x13, 0xe7, 0x73, 0xec, 0xe7, 0x35, 0x08, 0x9b, 0x78, 0xe8, 0x39, 0xce, 0x84, 0x09, 0x08, + 0x2a, 0xa8, 0xc7, 0xc4, 0x95, 0x18, 0x52, 0x26, 0x28, 0xa8, 0xec, 0x0e, 0x8b, 0x70, 0xac, 0x74, + 0x77, 0x87, 0x79, 0x1a, 0x15, 0x86, 0xfd, 0xbf, 0x2d, 0x78, 0xaa, 0xe7, 0x50, 0x3c, 0x84, 0xcd, + 0x77, 0x37, 0xbb, 0xf9, 0xae, 0x17, 0x65, 0x6e, 0x18, 0x6f, 0xd1, 0x67, 0x23, 0xfe, 0x0f, 0x16, + 0x4c, 0x68, 0xfc, 0x87, 0xf0, 0xaa, 0x5e, 0xf6, 0x55, 0x8b, 0xb3, 0xac, 0x6a, 0x5d, 0xef, 0xf6, + 0xa7, 0xec, 0xdd, 0xb8, 0x0f, 0x63, 0x8e, 0xed, 0x8f, 0x03, 0x9c, 0xdd, 0xef, 0xc1, 0x30, 0x2b, + 0x42, 0x9b, 0x14, 0xe3, 0x4b, 0xc9, 0xf2, 0x67, 0xa1, 0xcb, 0xda, 0x97, 0xc2, 0xfe, 0x26, 0x58, + 0x30, 0x64, 0xd5, 0x9e, 0xbc, 0x84, 0x4a, 0xf3, 0x86, 0x88, 0x15, 0xd4, 0xd5, 0x9e, 0x44, 0x3b, + 0x56, 0x18, 0x76, 0x1b, 0xa6, 0xb2, 0xc4, 0x17, 0x48, 0x93, 0xf9, 0xe7, 0x07, 0x7a, 0xcd, 0x59, + 0xa8, 0x39, 0xec, 0xa9, 0xe5, 0x8e, 0x93, 0xbf, 0x45, 0x69, 0x4e, 0x02, 0xb0, 0xc6, 0xb1, 0x7f, + 0xc7, 0x82, 0x53, 0x3d, 0x5e, 0xa6, 0xc0, 0x18, 0xc9, 0x54, 0x4b, 0x81, 0x5e, 0x1b, 0xee, 0x87, + 0x60, 0xa4, 0x41, 0x9a, 0x8e, 0xf4, 0x00, 0x1b, 0x32, 0x77, 0x81, 0x37, 0x63, 0x09, 0xb7, 0xff, + 0x87, 0x05, 0x27, 0xb2, 0x7d, 0x4d, 0xa8, 0xd4, 0xe4, 0x2f, 0xb3, 0xe0, 0x25, 0x6e, 0xb8, 0x43, + 0xe2, 0x3d, 0xfa, 0xe6, 0xbc, 0xd7, 0x4a, 0x6a, 0xce, 0x75, 0x61, 0xe0, 0x1e, 0x4f, 0xb1, 0x6a, + 0x34, 0x0d, 0x35, 0xda, 0x72, 0xa6, 0xdc, 0x28, 0x72, 0xa6, 0xe8, 0x8f, 0x69, 0x3a, 0x8e, 0x14, + 0x4b, 0x6c, 0xf2, 0xb7, 0xdf, 0x1d, 0x02, 0x15, 0x44, 0xcd, 0xdc, 0x6f, 0x05, 0x39, 0x2f, 0x33, + 0x05, 0xb7, 0xcb, 0x03, 0x5c, 0xb5, 0x25, 0x27, 0xc3, 0xd0, 0xfd, 0x5c, 0x63, 0xfc, 0xf4, 0xc2, + 0x3c, 0x24, 0x54, 0x6f, 0xb8, 0xa1, 0x41, 0xd8, 0xc4, 0xa3, 0x3d, 0xf1, 0xbd, 0x1d, 0xc2, 0x1f, + 0x1a, 0xce, 0xf6, 0x64, 0x59, 0x02, 0xb0, 0xc6, 0xa1, 0x3d, 0x69, 0x78, 0xcd, 0xa6, 0x30, 0xc5, + 0x55, 0x4f, 0xe8, 0xe8, 0x60, 0x06, 0xa1, 0x18, 0x5b, 0x61, 0xb8, 0x2d, 0xb4, 0x53, 0x85, 0x71, + 0x39, 0x0c, 0xb7, 0x31, 0x83, 0x50, 0x7d, 0x2a, 0x08, 0xe3, 0x36, 0xbb, 0xe5, 0xaa, 0xa1, 0xb8, + 0x08, 0xad, 0x54, 0xe9, 0x53, 0xd7, 0xba, 0x51, 0x70, 0xaf, 0xe7, 0xe8, 0x0c, 0x8c, 0x62, 0xd2, + 0xf0, 0xdc, 0xd4, 0xa4, 0x06, 0xd9, 0x19, 0xb8, 0xd6, 0x85, 0x81, 0x7b, 0x3c, 0x85, 0xe6, 0xe0, + 0x84, 0x0c, 0x82, 0x97, 0x79, 0x82, 0xa3, 0xd9, 0xbc, 0x24, 0x9c, 0x05, 0xe3, 0x3c, 0x3e, 0x95, + 0x36, 0x6d, 0x91, 0x22, 0xcc, 0x94, 0x58, 0x43, 0xda, 0xc8, 0xd4, 0x61, 0xac, 0x30, 0xec, 0x2f, + 0x97, 0xe9, 0xee, 0xd8, 0xa7, 0x54, 0xf0, 0x43, 0x73, 0x96, 0x67, 0x67, 0xe4, 0xd0, 0x00, 0x33, + 0xf2, 0x05, 0x18, 0xbb, 0x95, 0x84, 0x81, 0x72, 0x44, 0x57, 0xfa, 0x3a, 0xa2, 0x0d, 0xac, 0xde, + 0x8e, 0xe8, 0xe1, 0xa2, 0x1c, 0xd1, 0x23, 0x0f, 0xe8, 0x88, 0xfe, 0x5e, 0x05, 0x54, 0xb1, 0xcd, + 0x6b, 0x24, 0xbd, 0x13, 0xc6, 0xdb, 0x5e, 0xd0, 0x62, 0xc9, 0x03, 0x6f, 0x59, 0x30, 0xc6, 0xd7, + 0xcb, 0xb2, 0x19, 0x48, 0xdc, 0x2c, 0xa8, 0x28, 0x64, 0x86, 0xd9, 0xcc, 0x86, 0xc1, 0x28, 0x77, + 0x89, 0x82, 0x09, 0xc2, 0x99, 0x1e, 0xa1, 0x5f, 0x00, 0x90, 0xe7, 0x96, 0x4d, 0x29, 0x32, 0x97, + 0x8a, 0xe9, 0x1f, 0x26, 0x4d, 0xad, 0x9b, 0x6e, 0x28, 0x26, 0xd8, 0x60, 0x88, 0xbe, 0x9e, 0xbf, + 0x05, 0xf0, 0xf3, 0xc7, 0x32, 0x36, 0x83, 0x84, 0x58, 0x63, 0x18, 0xf1, 0x82, 0x16, 0x9d, 0x27, + 0xc2, 0x77, 0xff, 0xc1, 0x5e, 0x89, 0x37, 0xcb, 0xa1, 0xd3, 0xa8, 0x3b, 0xbe, 0x13, 0xb8, 0x24, + 0x5e, 0xe2, 0xe8, 0xe6, 0xad, 0x3e, 0xac, 0x01, 0x4b, 0x42, 0x5d, 0x55, 0x4f, 0x2b, 0x83, 0x54, + 0x3d, 0x3d, 0xfb, 0x29, 0x98, 0xec, 0xfa, 0x98, 0x87, 0x8a, 0xa8, 0x7e, 0xf0, 0x60, 0x6c, 0xfb, + 0x5f, 0x0c, 0xeb, 0x4d, 0xeb, 0x5a, 0xd8, 0xe0, 0xb5, 0x37, 0x63, 0xfd, 0x45, 0x85, 0xee, 0x59, + 0xe0, 0x14, 0x31, 0x6e, 0x06, 0x52, 0x8d, 0xd8, 0x64, 0x49, 0xe7, 0x68, 0xe4, 0xc4, 0x24, 0x38, + 0xee, 0x39, 0xba, 0xa6, 0x98, 0x60, 0x83, 0x21, 0xda, 0xca, 0x84, 0x54, 0x5e, 0x3a, 0x7a, 0x48, + 0x25, 0xcb, 0xeb, 0xed, 0x55, 0x5c, 0xf0, 0x3b, 0x16, 0x4c, 0x04, 0x99, 0x99, 0x2b, 0xfc, 0x38, + 0x1b, 0xc7, 0xb1, 0x2a, 0x78, 0xad, 0xe6, 0x6c, 0x1b, 0xce, 0xf1, 0xef, 0xb5, 0xa5, 0x55, 0x0e, + 0xb9, 0xa5, 0xe9, 0x22, 0xbe, 0xc3, 0xfd, 0x8a, 0xf8, 0xa2, 0x40, 0x95, 0x1d, 0x1f, 0x29, 0xbc, + 0xec, 0x38, 0xf4, 0x28, 0x39, 0x7e, 0x13, 0x6a, 0x6e, 0x4c, 0x9c, 0xf4, 0x01, 0x2b, 0x50, 0x33, + 0x27, 0xf6, 0xbc, 0x24, 0x80, 0x35, 0x2d, 0xfb, 0xdf, 0x97, 0xe1, 0xa4, 0x1c, 0x11, 0x19, 0x81, + 0x45, 0xf7, 0x47, 0xce, 0x57, 0x2b, 0xb7, 0x6a, 0x7f, 0xbc, 0x2c, 0x01, 0x58, 0xe3, 0x50, 0x7d, + 0xac, 0x93, 0x90, 0xd5, 0x88, 0x04, 0xcb, 0xde, 0x66, 0x22, 0xfc, 0x8f, 0x6a, 0xa1, 0x5c, 0xd7, + 0x20, 0x6c, 0xe2, 0x51, 0x65, 0x9c, 0xeb, 0xc5, 0x49, 0x3e, 0x7a, 0x53, 0xe8, 0xdb, 0x58, 0xc2, + 0xd1, 0xaf, 0xf5, 0xbc, 0xbb, 0xa0, 0x98, 0xb8, 0xe5, 0xae, 0xc0, 0xb3, 0x43, 0x5e, 0x5a, 0xf0, + 0x86, 0x05, 0x27, 0xb6, 0x33, 0x89, 0x57, 0x52, 0x24, 0x1f, 0x31, 0x45, 0x38, 0x9b, 0xcd, 0xa5, + 0xa7, 0x70, 0xb6, 0x3d, 0xc1, 0x79, 0xee, 0xf6, 0xff, 0xb4, 0xc0, 0x14, 0x4f, 0x83, 0x69, 0x56, + 0xc6, 0xfd, 0x44, 0xa5, 0x03, 0xee, 0x27, 0x92, 0x4a, 0x58, 0x79, 0x30, 0xa5, 0x7f, 0xe8, 0x10, + 0x4a, 0x7f, 0xa5, 0xaf, 0xd6, 0xf6, 0x0c, 0x94, 0x3b, 0x5e, 0x43, 0xe8, 0xed, 0xda, 0xdb, 0xb8, + 0xb4, 0x80, 0x69, 0xbb, 0xfd, 0x4f, 0x2b, 0xda, 0x4e, 0x17, 0xe1, 0xb6, 0x3f, 0x16, 0xaf, 0xdd, + 0x54, 0x19, 0xdf, 0xfc, 0xcd, 0xaf, 0x75, 0x65, 0x7c, 0xff, 0xf4, 0xe1, 0xa3, 0xa9, 0xf9, 0x00, + 0xf5, 0x4b, 0xf8, 0x1e, 0x39, 0x20, 0x94, 0xfa, 0x16, 0x54, 0xa9, 0x69, 0xc3, 0x0e, 0xdc, 0xaa, + 0x99, 0x4e, 0x55, 0x2f, 0x8b, 0xf6, 0x7b, 0xfb, 0xd3, 0x3f, 0x75, 0xf8, 0x6e, 0xc9, 0xa7, 0xb1, + 0xa2, 0x8f, 0x12, 0xa8, 0xd1, 0xdf, 0x2c, 0xea, 0x5b, 0x18, 0x4d, 0xd7, 0x95, 0x2c, 0x92, 0x80, + 0x42, 0x42, 0xca, 0x35, 0x1f, 0x14, 0x40, 0x8d, 0xdd, 0x9b, 0xc2, 0x98, 0x72, 0xdb, 0x6a, 0x4d, + 0xc5, 0x5e, 0x4b, 0xc0, 0xbd, 0xfd, 0xe9, 0x97, 0x0e, 0xcf, 0x54, 0x3d, 0x8e, 0x35, 0x0b, 0xfb, + 0xcd, 0x21, 0x3d, 0x77, 0x45, 0xa2, 0xff, 0x8f, 0xc5, 0xdc, 0x7d, 0x31, 0x37, 0x77, 0xcf, 0x77, + 0xcd, 0xdd, 0x09, 0x7d, 0xbf, 0x47, 0x66, 0x36, 0x3e, 0xec, 0x0d, 0xf6, 0x60, 0x3b, 0x9e, 0x69, + 0x16, 0xb7, 0x3b, 0x5e, 0x4c, 0x92, 0xb5, 0xb8, 0x13, 0x78, 0x41, 0x4b, 0xdc, 0x39, 0x68, 0x68, + 0x16, 0x19, 0x30, 0xce, 0xe3, 0xb3, 0xfb, 0x0a, 0xf7, 0x02, 0xf7, 0xa6, 0xb3, 0xc3, 0x67, 0x95, + 0x91, 0xfb, 0xbc, 0x2e, 0xda, 0xb1, 0xc2, 0xb0, 0xdf, 0x66, 0xbe, 0x5b, 0x23, 0xdd, 0x84, 0xce, + 0x09, 0x9f, 0x5d, 0x54, 0xc3, 0x13, 0xa7, 0xd5, 0x9c, 0xe0, 0xb7, 0xd3, 0x70, 0x18, 0xba, 0x03, + 0x23, 0x9b, 0xbc, 0xf0, 0x7b, 0x31, 0x95, 0xd6, 0x44, 0x15, 0x79, 0x56, 0x0c, 0x55, 0x96, 0x94, + 0xbf, 0xa7, 0x7f, 0x62, 0xc9, 0xcd, 0x7e, 0x67, 0x08, 0x4e, 0xe4, 0xae, 0x32, 0xc9, 0xd4, 0x7d, + 0x29, 0x1d, 0x58, 0xf7, 0xe5, 0xb3, 0x00, 0x0d, 0x12, 0xf9, 0xe1, 0x1e, 0x53, 0x73, 0x86, 0x0e, + 0xad, 0xe6, 0x28, 0xcd, 0x78, 0x41, 0x51, 0xc1, 0x06, 0x45, 0x91, 0x2d, 0xce, 0xcb, 0xc8, 0xe4, + 0xb2, 0xc5, 0x8d, 0x62, 0x87, 0xc3, 0x0f, 0xb7, 0xd8, 0xa1, 0x07, 0x27, 0x78, 0x17, 0x55, 0x52, + 0xc7, 0x03, 0xe4, 0x6e, 0xb0, 0x08, 0xd9, 0x85, 0x2c, 0x19, 0x9c, 0xa7, 0xfb, 0x28, 0x6f, 0x2a, + 0x42, 0x1f, 0x86, 0x9a, 0xfc, 0xce, 0xc9, 0x54, 0x4d, 0x27, 0xc6, 0xc9, 0x69, 0xc0, 0x6e, 0x10, + 0x12, 0x3f, 0xed, 0x6f, 0x97, 0xa8, 0x56, 0xca, 0xff, 0xa9, 0x04, 0xe7, 0x0f, 0xc0, 0xb0, 0xd3, + 0x49, 0xb7, 0xc2, 0xae, 0x52, 0xfb, 0x73, 0xac, 0x15, 0x0b, 0x28, 0x5a, 0x86, 0xa1, 0x86, 0x4e, + 0x5a, 0x3d, 0xcc, 0x28, 0xea, 0x03, 0x3e, 0x27, 0x25, 0x98, 0x51, 0x41, 0x4f, 0xc3, 0x50, 0xea, + 0xb4, 0x32, 0xf7, 0x66, 0x6e, 0x38, 0xad, 0x04, 0xb3, 0x56, 0x73, 0xd3, 0x1c, 0x3a, 0x60, 0xd3, + 0x7c, 0x09, 0xc6, 0x13, 0xaf, 0x15, 0x38, 0x69, 0x27, 0x26, 0x86, 0x33, 0x49, 0xc7, 0x07, 0x98, + 0x40, 0x9c, 0xc5, 0xb5, 0xdf, 0xad, 0xc1, 0xe9, 0x5e, 0xf7, 0x9b, 0x17, 0x1d, 0x0d, 0xdf, 0x8b, + 0xc7, 0xc3, 0x8b, 0x86, 0xef, 0xc3, 0xdd, 0x37, 0xa2, 0xe1, 0x7d, 0x23, 0x1a, 0xfe, 0xeb, 0x16, + 0xd4, 0x54, 0x10, 0xb8, 0x08, 0x64, 0x7d, 0xf5, 0x18, 0xee, 0x90, 0x97, 0x2c, 0x44, 0x2c, 0xb0, + 0xfc, 0x8b, 0x35, 0xf3, 0xe3, 0x0b, 0x8f, 0xbf, 0x6f, 0x87, 0x0e, 0x15, 0x1e, 0xaf, 0x72, 0x07, + 0x2a, 0x45, 0xe4, 0x0e, 0xf4, 0xf9, 0x54, 0x3d, 0x73, 0x07, 0xbe, 0x63, 0xc1, 0xa8, 0xf3, 0x7a, + 0x27, 0x26, 0x0b, 0x64, 0x67, 0x35, 0x4a, 0x84, 0x80, 0x7d, 0xad, 0xf8, 0x0e, 0xcc, 0x69, 0x26, + 0xa2, 0x26, 0xb0, 0x6e, 0xc0, 0x66, 0x17, 0x32, 0xb9, 0x02, 0x23, 0x45, 0xe4, 0x0a, 0xf4, 0xea, + 0xce, 0x81, 0xb9, 0x02, 0x2f, 0xc1, 0xb8, 0xeb, 0x87, 0x01, 0x59, 0x8b, 0xc3, 0x34, 0x74, 0x43, + 0x5f, 0x28, 0xd3, 0x4a, 0x24, 0xcc, 0x9b, 0x40, 0x9c, 0xc5, 0xed, 0x97, 0x68, 0x50, 0x3b, 0x6a, + 0xa2, 0x01, 0x3c, 0xa2, 0x44, 0x83, 0xbf, 0x28, 0xc1, 0xf4, 0x01, 0x1f, 0x15, 0xbd, 0x08, 0x63, + 0x61, 0xdc, 0x72, 0x02, 0xef, 0x75, 0x9e, 0xd4, 0x5a, 0xc9, 0xd6, 0x1c, 0x59, 0x35, 0x60, 0x38, + 0x83, 0x29, 0x43, 0x91, 0x87, 0xfb, 0x84, 0x22, 0x7f, 0x1c, 0x46, 0x53, 0xe2, 0xb4, 0x45, 0xdc, + 0x85, 0x30, 0x80, 0xb4, 0x43, 0x49, 0x83, 0xb0, 0x89, 0x47, 0xa7, 0xd1, 0x84, 0xe3, 0xba, 0x24, + 0x49, 0x64, 0xac, 0xb1, 0x38, 0x9c, 0x29, 0x2c, 0x90, 0x99, 0x9d, 0x79, 0xcd, 0x65, 0x58, 0xe0, + 0x1c, 0x4b, 0xda, 0x79, 0xc7, 0xf7, 0x79, 0x5a, 0x01, 0x91, 0x37, 0x61, 0xeb, 0x12, 0x18, 0x1a, + 0x84, 0x4d, 0x3c, 0xfb, 0x37, 0x4b, 0xf0, 0xcc, 0x7d, 0xc5, 0xcb, 0xc0, 0x61, 0xe0, 0x9d, 0x84, + 0xc4, 0x79, 0x87, 0xcc, 0xf5, 0x84, 0xc4, 0x98, 0x41, 0xf8, 0x28, 0x45, 0x91, 0x71, 0x9f, 0x4e, + 0xd1, 0x59, 0x07, 0x7c, 0x94, 0x32, 0x2c, 0x70, 0x8e, 0x65, 0x7e, 0x94, 0x86, 0x06, 0x1c, 0xa5, + 0x7f, 0x50, 0x82, 0x67, 0x07, 0x10, 0xc2, 0x05, 0x66, 0x67, 0x64, 0xb3, 0x5b, 0xca, 0x8f, 0x26, + 0xbb, 0xe5, 0x41, 0x87, 0xeb, 0xed, 0x12, 0x9c, 0xed, 0x2f, 0x0b, 0xd1, 0xcf, 0x50, 0x23, 0x4a, + 0x06, 0x5b, 0x98, 0x99, 0x31, 0xa7, 0xb8, 0x01, 0x95, 0x01, 0xe1, 0x3c, 0x2e, 0x9a, 0x01, 0x88, + 0x9c, 0x74, 0x2b, 0xb9, 0xb8, 0xeb, 0x25, 0xa9, 0xc8, 0xe9, 0x9c, 0xe0, 0x47, 0xe1, 0xb2, 0x15, + 0x1b, 0x18, 0x94, 0x1d, 0xfb, 0xb7, 0x10, 0x5e, 0x0b, 0x53, 0xfe, 0x10, 0xd7, 0xe3, 0x4e, 0xc9, + 0xa2, 0x8b, 0x06, 0x08, 0xe7, 0x71, 0x29, 0x3b, 0xe6, 0x6c, 0xe1, 0x1d, 0x15, 0xd7, 0xfc, 0x53, + 0x76, 0xcb, 0xaa, 0x15, 0x1b, 0x18, 0xf9, 0x9c, 0x9f, 0xca, 0x00, 0x39, 0x3f, 0xff, 0xa4, 0x04, + 0x4f, 0xf5, 0xdd, 0x4b, 0x07, 0x5b, 0x80, 0x8f, 0x5f, 0xb2, 0xcf, 0x83, 0xcd, 0x9d, 0x43, 0xa6, + 0xb0, 0xfc, 0x59, 0x9f, 0x99, 0x26, 0x52, 0x58, 0xf2, 0x5b, 0x85, 0x75, 0xd8, 0xad, 0xe2, 0x31, + 0x1a, 0xcf, 0xae, 0xac, 0x95, 0xa1, 0x43, 0x64, 0xad, 0xe4, 0x3e, 0x46, 0x65, 0xc0, 0x85, 0xfc, + 0xfd, 0xfe, 0xc3, 0x4b, 0x75, 0xef, 0x81, 0x8e, 0xa7, 0x16, 0xe0, 0xa4, 0x17, 0xb0, 0x02, 0xbc, + 0xeb, 0x9d, 0x4d, 0x91, 0xf1, 0x5b, 0xca, 0xde, 0x2d, 0xb5, 0x94, 0x83, 0xe3, 0xae, 0x27, 0x1e, + 0xc3, 0x2c, 0xa2, 0x07, 0x1c, 0xd2, 0xcf, 0x42, 0x4d, 0xd1, 0xe6, 0x91, 0x91, 0xea, 0x83, 0x76, + 0x45, 0x46, 0xaa, 0xaf, 0x69, 0x60, 0xd1, 0x91, 0xd8, 0x26, 0x7b, 0xf9, 0x99, 0x79, 0x95, 0xec, + 0x31, 0x2f, 0xa9, 0xfd, 0x31, 0x18, 0x53, 0x46, 0xe4, 0xa0, 0x05, 0x62, 0xed, 0x37, 0x87, 0x61, + 0x3c, 0x53, 0xc6, 0x22, 0x73, 0x66, 0x63, 0x1d, 0x78, 0x66, 0xc3, 0x22, 0x5d, 0x3b, 0x81, 0x2c, + 0xc1, 0x6c, 0x44, 0xba, 0x76, 0x02, 0x82, 0x39, 0x8c, 0x9a, 0xee, 0x8d, 0x78, 0x0f, 0x77, 0x02, + 0x11, 0x91, 0xa6, 0x4c, 0xf7, 0x05, 0xd6, 0x8a, 0x05, 0x14, 0x7d, 0xc9, 0x82, 0xb1, 0x84, 0x1d, + 0x08, 0xf2, 0x13, 0x2f, 0xf1, 0x41, 0xaf, 0x14, 0x71, 0x85, 0xb0, 0x28, 0xd9, 0xc2, 0x9c, 0xd9, + 0x66, 0x0b, 0xce, 0x70, 0x44, 0x5f, 0xb5, 0xcc, 0xcb, 0x93, 0x87, 0x8b, 0x88, 0xa4, 0xcc, 0x57, + 0x09, 0xe1, 0x47, 0x25, 0xf7, 0xbf, 0x43, 0x59, 0xdf, 0xa9, 0x3e, 0xf2, 0xf0, 0xee, 0x54, 0xff, + 0x30, 0xd4, 0xda, 0x4e, 0xe0, 0x35, 0x49, 0x92, 0xf2, 0x13, 0x22, 0x59, 0xbc, 0x48, 0x36, 0x62, + 0x0d, 0xa7, 0x9b, 0x5d, 0xc2, 0x5e, 0x2c, 0x35, 0x8e, 0x74, 0xd8, 0x66, 0xb7, 0xae, 0x9b, 0xb1, + 0x89, 0x63, 0x9e, 0x3f, 0xc1, 0x23, 0x3d, 0x7f, 0x1a, 0x3d, 0xe0, 0xfc, 0xe9, 0x1f, 0x59, 0x70, + 0xa6, 0xe7, 0x57, 0x7b, 0x7c, 0x63, 0x94, 0xec, 0x77, 0xcb, 0x70, 0xaa, 0x47, 0x3d, 0x1a, 0xb4, + 0x77, 0x6c, 0x97, 0x81, 0x8b, 0x82, 0x37, 0xe3, 0x7d, 0x27, 0xf1, 0xe1, 0x4e, 0x7f, 0xf5, 0x09, + 0x6c, 0xf9, 0xe1, 0x9e, 0xc0, 0x1a, 0xd3, 0x72, 0xe8, 0x91, 0x4e, 0xcb, 0xca, 0x01, 0xd3, 0xf2, + 0xdd, 0x32, 0x18, 0x77, 0xfb, 0xa3, 0x2f, 0x9a, 0x35, 0xa2, 0xac, 0xa2, 0xea, 0x19, 0x71, 0xe2, + 0xaa, 0xc6, 0x14, 0xef, 0x4e, 0xaf, 0x92, 0x53, 0x79, 0x09, 0x50, 0x1a, 0x40, 0x02, 0xf8, 0xb2, + 0x18, 0x57, 0xb9, 0xf8, 0x62, 0x5c, 0xb5, 0x7c, 0x21, 0x2e, 0xf4, 0xbb, 0x16, 0x4c, 0xb5, 0xfb, + 0x14, 0x8d, 0x2c, 0xa6, 0x6c, 0x40, 0xbf, 0x92, 0x94, 0xf5, 0xa7, 0xef, 0xee, 0x4f, 0xf7, 0xad, + 0xd5, 0x89, 0xfb, 0xf6, 0xca, 0xfe, 0x5b, 0x16, 0x5f, 0xc5, 0xb9, 0xaf, 0xa0, 0xb7, 0x59, 0xeb, + 0x3e, 0xdb, 0xec, 0xf3, 0xec, 0xba, 0xb9, 0xe6, 0x65, 0xe2, 0xf8, 0x62, 0x3b, 0x36, 0x6f, 0x8e, + 0x63, 0xed, 0x58, 0x61, 0xb0, 0x0b, 0x22, 0x7c, 0x3f, 0xbc, 0x73, 0xb1, 0x1d, 0xa5, 0x7b, 0x62, + 0x63, 0xd6, 0x17, 0x44, 0x28, 0x08, 0x36, 0xb0, 0xec, 0xbf, 0x53, 0xe2, 0x33, 0x50, 0x38, 0x29, + 0x5f, 0xcc, 0x55, 0x23, 0x1f, 0xdc, 0xbf, 0xf7, 0x05, 0x00, 0x57, 0xdd, 0x34, 0x25, 0x4e, 0x8f, + 0x2f, 0x1f, 0xf9, 0xa6, 0x1e, 0x41, 0xcf, 0xbc, 0xbe, 0x5e, 0xb6, 0x61, 0x83, 0x5f, 0x46, 0x30, + 0x95, 0x0f, 0x14, 0x4c, 0x99, 0x35, 0x3a, 0x74, 0xc0, 0x1a, 0xfd, 0x0b, 0x0b, 0x32, 0xea, 0x05, + 0x8a, 0xa0, 0x42, 0xbb, 0xbb, 0x57, 0xcc, 0x25, 0x5a, 0x26, 0x69, 0x2a, 0x67, 0xc4, 0xb4, 0x67, + 0x3f, 0x31, 0x67, 0x84, 0x7c, 0xe1, 0xcb, 0x2c, 0x15, 0x71, 0xd1, 0x9b, 0xc9, 0xf0, 0x72, 0x18, + 0x6e, 0x73, 0x17, 0x88, 0xf6, 0x8b, 0xda, 0x2f, 0xc2, 0x64, 0x57, 0xa7, 0x58, 0xe1, 0xe1, 0x50, + 0xde, 0x1c, 0x66, 0x4c, 0x57, 0x96, 0x50, 0x84, 0x39, 0xcc, 0x7e, 0xdb, 0x82, 0x93, 0x79, 0xf2, + 0xe8, 0xbb, 0x16, 0x4c, 0x26, 0x79, 0x7a, 0xc7, 0x35, 0x76, 0x2a, 0xce, 0xa7, 0x0b, 0x84, 0xbb, + 0x3b, 0x61, 0xff, 0xa5, 0x98, 0xfc, 0x37, 0xbd, 0xa0, 0x11, 0xde, 0x51, 0xbb, 0xbc, 0xd5, 0x77, + 0x97, 0xa7, 0xeb, 0xd1, 0xdd, 0x22, 0x8d, 0x8e, 0xdf, 0x95, 0xc9, 0xb4, 0x2e, 0xda, 0xb1, 0xc2, + 0xc8, 0x5c, 0xd3, 0x5d, 0x3e, 0xf0, 0x9a, 0xee, 0x17, 0x60, 0xcc, 0xbc, 0x1d, 0x4f, 0xcc, 0x4b, + 0xa6, 0xdd, 0x9a, 0x17, 0xe9, 0xe1, 0x0c, 0x56, 0xee, 0x7e, 0xe4, 0xca, 0x81, 0xf7, 0x23, 0x3f, + 0x07, 0x55, 0x71, 0xd7, 0xaf, 0x8c, 0x86, 0xe3, 0x69, 0x52, 0xa2, 0x0d, 0x2b, 0x28, 0x95, 0x26, + 0x6d, 0x27, 0xe8, 0x38, 0x3e, 0x1d, 0x21, 0x91, 0xdb, 0xa9, 0x96, 0xe1, 0x8a, 0x82, 0x60, 0x03, + 0x8b, 0xbe, 0x71, 0xea, 0xb5, 0xc9, 0x2b, 0x61, 0x20, 0xe3, 0x48, 0xf4, 0x01, 0xb1, 0x68, 0xc7, + 0x0a, 0xc3, 0xfe, 0x6f, 0x16, 0xe4, 0x2f, 0x2a, 0xcd, 0x1c, 0x19, 0x58, 0x07, 0xe6, 0x93, 0x66, + 0xb3, 0xd1, 0x4a, 0x03, 0x65, 0xa3, 0x99, 0x89, 0x62, 0xe5, 0xfb, 0x26, 0x8a, 0xfd, 0x84, 0xbe, + 0xbe, 0x82, 0x67, 0x94, 0x8d, 0xf6, 0xba, 0xba, 0x02, 0xd9, 0x30, 0xec, 0x3a, 0xaa, 0xe2, 0xc0, + 0x18, 0x57, 0xc4, 0xe7, 0xe7, 0x18, 0x92, 0x80, 0xd4, 0x37, 0xdf, 0xf9, 0xe1, 0xb9, 0xf7, 0x7d, + 0xff, 0x87, 0xe7, 0xde, 0xf7, 0x27, 0x3f, 0x3c, 0xf7, 0xbe, 0x2f, 0xdd, 0x3d, 0x67, 0xbd, 0x73, + 0xf7, 0x9c, 0xf5, 0xfd, 0xbb, 0xe7, 0xac, 0x3f, 0xb9, 0x7b, 0xce, 0x7a, 0xf7, 0xee, 0x39, 0xeb, + 0x3b, 0xff, 0xf9, 0xdc, 0xfb, 0x5e, 0xe9, 0x19, 0xf7, 0x43, 0x7f, 0x7c, 0xc4, 0x6d, 0xcc, 0xee, + 0x5c, 0x60, 0xa1, 0x27, 0x74, 0x35, 0xcc, 0x1a, 0x53, 0x60, 0x56, 0xae, 0x86, 0xff, 0x17, 0x00, + 0x00, 0xff, 0xff, 0x49, 0x9d, 0xa6, 0xd4, 0x98, 0xc4, 0x00, 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { @@ -6693,38 +6754,29 @@ func (m *ApplicationSourcePluginParameter) MarshalToSizedBuffer(dAtA []byte) (in i-- dAtA[i] = 0x2a } - if len(m.Array) > 0 { - for iNdEx := len(m.Array) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Array[iNdEx]) - copy(dAtA[i:], m.Array[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Array[iNdEx]))) - i-- - dAtA[i] = 0x22 + if m.OptionalArray != nil { + { + size, err := m.OptionalArray.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x22 } - if len(m.Map) > 0 { - keysForMap := make([]string, 0, len(m.Map)) - for k := range m.Map { - keysForMap = append(keysForMap, string(k)) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForMap) - for iNdEx := len(keysForMap) - 1; iNdEx >= 0; iNdEx-- { - v := m.Map[string(keysForMap[iNdEx])] - baseI := i - i -= len(v) - copy(dAtA[i:], v) - i = encodeVarintGenerated(dAtA, i, uint64(len(v))) - i-- - dAtA[i] = 0x12 - i -= len(keysForMap[iNdEx]) - copy(dAtA[i:], keysForMap[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(keysForMap[iNdEx]))) - i-- - dAtA[i] = 0xa - i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) - i-- - dAtA[i] = 0x1a + if m.OptionalMap != nil { + { + size, err := m.OptionalMap.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x1a } i -= len(m.Name) copy(dAtA[i:], m.Name) @@ -9288,6 +9340,85 @@ func (m *OperationState) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *OptionalArray) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *OptionalArray) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OptionalArray) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Array) > 0 { + for iNdEx := len(m.Array) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Array[iNdEx]) + copy(dAtA[i:], m.Array[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Array[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *OptionalMap) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *OptionalMap) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OptionalMap) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Map) > 0 { + keysForMap := make([]string, 0, len(m.Map)) + for k := range m.Map { + keysForMap = append(keysForMap, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMap) + for iNdEx := len(keysForMap) - 1; iNdEx >= 0; iNdEx-- { + v := m.Map[string(keysForMap[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForMap[iNdEx]) + copy(dAtA[i:], keysForMap[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForMap[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + func (m *OrphanedResourceKey) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -13398,19 +13529,13 @@ func (m *ApplicationSourcePluginParameter) Size() (n int) { _ = l l = len(m.Name) n += 1 + l + sovGenerated(uint64(l)) - if len(m.Map) > 0 { - for k, v := range m.Map { - _ = k - _ = v - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) - } + if m.OptionalMap != nil { + l = m.OptionalMap.Size() + n += 1 + l + sovGenerated(uint64(l)) } - if len(m.Array) > 0 { - for _, s := range m.Array { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } + if m.OptionalArray != nil { + l = m.OptionalArray.Size() + n += 1 + l + sovGenerated(uint64(l)) } if m.String_ != nil { l = len(*m.String_) @@ -14375,6 +14500,38 @@ func (m *OperationState) Size() (n int) { return n } +func (m *OptionalArray) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Array) > 0 { + for _, s := range m.Array { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *OptionalMap) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Map) > 0 { + for k, v := range m.Map { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + func (m *OrphanedResourceKey) Size() (n int) { if m == nil { return 0 @@ -16225,20 +16382,10 @@ func (this *ApplicationSourcePluginParameter) String() string { if this == nil { return "nil" } - keysForMap := make([]string, 0, len(this.Map)) - for k := range this.Map { - keysForMap = append(keysForMap, k) - } - github_com_gogo_protobuf_sortkeys.Strings(keysForMap) - mapStringForMap := "map[string]string{" - for _, k := range keysForMap { - mapStringForMap += fmt.Sprintf("%v: %v,", k, this.Map[k]) - } - mapStringForMap += "}" s := strings.Join([]string{`&ApplicationSourcePluginParameter{`, `Name:` + fmt.Sprintf("%v", this.Name) + `,`, - `Map:` + mapStringForMap + `,`, - `Array:` + fmt.Sprintf("%v", this.Array) + `,`, + `OptionalMap:` + strings.Replace(this.OptionalMap.String(), "OptionalMap", "OptionalMap", 1) + `,`, + `OptionalArray:` + strings.Replace(this.OptionalArray.String(), "OptionalArray", "OptionalArray", 1) + `,`, `String_:` + valueToStringGenerated(this.String_) + `,`, `}`, }, "") @@ -17021,6 +17168,36 @@ func (this *OperationState) String() string { }, "") return s } +func (this *OptionalArray) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&OptionalArray{`, + `Array:` + fmt.Sprintf("%v", this.Array) + `,`, + `}`, + }, "") + return s +} +func (this *OptionalMap) String() string { + if this == nil { + return "nil" + } + keysForMap := make([]string, 0, len(this.Map)) + for k := range this.Map { + keysForMap = append(keysForMap, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMap) + mapStringForMap := "map[string]string{" + for _, k := range keysForMap { + mapStringForMap += fmt.Sprintf("%v: %v,", k, this.Map[k]) + } + mapStringForMap += "}" + s := strings.Join([]string{`&OptionalMap{`, + `Map:` + mapStringForMap + `,`, + `}`, + }, "") + return s +} func (this *OrphanedResourceKey) String() string { if this == nil { return "nil" @@ -24426,7 +24603,7 @@ func (m *ApplicationSourcePluginParameter) Unmarshal(dAtA []byte) error { iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Map", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field OptionalMap", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -24453,109 +24630,18 @@ func (m *ApplicationSourcePluginParameter) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Map == nil { - m.Map = make(map[string]string) + if m.OptionalMap == nil { + m.OptionalMap = &OptionalMap{} } - var mapkey string - var mapvalue string - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthGenerated - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var stringLenmapvalue uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapvalue |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapvalue := int(stringLenmapvalue) - if intStringLenmapvalue < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapvalue := iNdEx + intStringLenmapvalue - if postStringIndexmapvalue < 0 { - return ErrInvalidLengthGenerated - } - if postStringIndexmapvalue > l { - return io.ErrUnexpectedEOF - } - mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) - iNdEx = postStringIndexmapvalue - } else { - iNdEx = entryPreIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } + if err := m.OptionalMap.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - m.Map[mapkey] = mapvalue iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Array", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field OptionalArray", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -24565,23 +24651,27 @@ func (m *ApplicationSourcePluginParameter) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Array = append(m.Array, string(dAtA[iNdEx:postIndex])) + if m.OptionalArray == nil { + m.OptionalArray = &OptionalArray{} + } + if err := m.OptionalArray.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 5: if wireType != 2 { @@ -32866,6 +32956,265 @@ func (m *OperationState) Unmarshal(dAtA []byte) error { } return nil } +func (m *OptionalArray) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OptionalArray: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OptionalArray: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Array", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Array = append(m.Array, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OptionalMap) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OptionalMap: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OptionalMap: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Map", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Map == nil { + m.Map = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Map[mapkey] = mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *OrphanedResourceKey) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto index c5dadd0e5c444..6369be664597d 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -490,10 +490,10 @@ message ApplicationSourcePluginParameter { optional string string = 5; // Map is the value of a map type parameter. - map map = 3; + optional OptionalMap map = 3; // Array is the value of an array type parameter. - repeated string array = 4; + optional OptionalArray array = 4; } // ApplicationSpec represents desired application state. Contains link to repository with application definition and additional parameters link definition revision. @@ -1117,6 +1117,18 @@ message OperationState { optional int64 retryCount = 8; } +message OptionalArray { + // Array is the value of an array type parameter. + // +optional + repeated string array = 1; +} + +message OptionalMap { + // Map is the value of a map type parameter. + // +optional + map map = 1; +} + // OrphanedResourceKey is a reference to a resource to be ignored from message OrphanedResourceKey { optional string group = 1; diff --git a/pkg/apis/application/v1alpha1/openapi_generated.go b/pkg/apis/application/v1alpha1/openapi_generated.go index a1089b73dfcf7..8b4093a36a6ef 100644 --- a/pkg/apis/application/v1alpha1/openapi_generated.go +++ b/pkg/apis/application/v1alpha1/openapi_generated.go @@ -95,6 +95,8 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.Operation": schema_pkg_apis_application_v1alpha1_Operation(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.OperationInitiator": schema_pkg_apis_application_v1alpha1_OperationInitiator(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.OperationState": schema_pkg_apis_application_v1alpha1_OperationState(ref), + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.OptionalArray": schema_pkg_apis_application_v1alpha1_OptionalArray(ref), + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.OptionalMap": schema_pkg_apis_application_v1alpha1_OptionalMap(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.OrphanedResourceKey": schema_pkg_apis_application_v1alpha1_OrphanedResourceKey(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.OrphanedResourcesMonitorSettings": schema_pkg_apis_application_v1alpha1_OrphanedResourcesMonitorSettings(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.OverrideIgnoreDiff": schema_pkg_apis_application_v1alpha1_OverrideIgnoreDiff(ref), @@ -1840,37 +1842,6 @@ func schema_pkg_apis_application_v1alpha1_ApplicationSourcePluginParameter(ref c Format: "", }, }, - "map": { - SchemaProps: spec.SchemaProps{ - Description: "Map is the value of a map type parameter.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Default: "", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "array": { - SchemaProps: spec.SchemaProps{ - Description: "Array is the value of an array type parameter.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Default: "", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, }, }, }, @@ -3986,6 +3957,61 @@ func schema_pkg_apis_application_v1alpha1_OperationState(ref common.ReferenceCal } } +func schema_pkg_apis_application_v1alpha1_OptionalArray(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "array": { + SchemaProps: spec.SchemaProps{ + Description: "Array is the value of an array type parameter.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_application_v1alpha1_OptionalMap(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "map": { + SchemaProps: spec.SchemaProps{ + Description: "Map is the value of a map type parameter.", + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + func schema_pkg_apis_application_v1alpha1_OrphanedResourceKey(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go index 88b0e92c70e8b..657e4e51e978d 100644 --- a/pkg/apis/application/v1alpha1/types.go +++ b/pkg/apis/application/v1alpha1/types.go @@ -188,7 +188,7 @@ func (s ApplicationSources) Equals(other ApplicationSources) bool { return false } for i := range s { - if !s[i].Equals(other[i]) { + if !s[i].Equals(&other[i]) { return false } } @@ -529,19 +529,155 @@ func (d *ApplicationSourceDirectory) IsZero() bool { return d == nil || !d.Recurse && d.Jsonnet.IsZero() } +type OptionalMap struct { + // Map is the value of a map type parameter. + // +optional + Map map[string]string `json:"map" protobuf:"bytes,1,rep,name=map"` + // We need the explicit +optional so that kube-builder generates the CRD without marking this as required. +} + +// Equals returns true if the two OptionalMap objects are equal. We can't use reflect.DeepEqual because it will return +// false if one of the maps is nil and the other is an empty map. This is because the JSON unmarshaller will set the +// map to nil if it is empty, but the protobuf unmarshaller will set it to an empty map. +func (o *OptionalMap) Equals(other *OptionalMap) bool { + if o == nil && other == nil { + return true + } + if o == nil || other == nil { + return false + } + if len(o.Map) != len(other.Map) { + return false + } + if o.Map == nil && other.Map == nil { + return true + } + // The next two blocks are critical. Depending on whether the struct was populated from JSON or protobufs, the map + // field will be either nil or an empty map. They mean the same thing: the map is empty. + if o.Map == nil && len(other.Map) == 0 { + return true + } + if other.Map == nil && len(o.Map) == 0 { + return true + } + return reflect.DeepEqual(o.Map, other.Map) +} + +type OptionalArray struct { + // Array is the value of an array type parameter. + // +optional + Array []string `json:"array" protobuf:"bytes,1,rep,name=array"` + // We need the explicit +optional so that kube-builder generates the CRD without marking this as required. +} + +// Equals returns true if the two OptionalArray objects are equal. We can't use reflect.DeepEqual because it will return +// false if one of the arrays is nil and the other is an empty array. This is because the JSON unmarshaller will set the +// array to nil if it is empty, but the protobuf unmarshaller will set it to an empty array. +func (o *OptionalArray) Equals(other *OptionalArray) bool { + if o == nil && other == nil { + return true + } + if o == nil || other == nil { + return false + } + if len(o.Array) != len(other.Array) { + return false + } + if o.Array == nil && other.Array == nil { + return true + } + // The next two blocks are critical. Depending on whether the struct was populated from JSON or protobufs, the array + // field will be either nil or an empty array. They mean the same thing: the array is empty. + if o.Array == nil && len(other.Array) == 0 { + return true + } + if other.Array == nil && len(o.Array) == 0 { + return true + } + return reflect.DeepEqual(o.Array, other.Array) +} + type ApplicationSourcePluginParameter struct { + // We use pointers to structs because go-to-protobuf represents pointers to arrays/maps as repeated fields. + // These repeated fields have no way to represent "present but empty." So we would have no way to distinguish + // {name: parameters, array: []} from {name: parameter} + // By wrapping the array/map in a struct, we can use a pointer to the struct to represent "present but empty." + // Name is the name identifying a parameter. Name string `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"` // String_ is the value of a string type parameter. String_ *string `json:"string,omitempty" protobuf:"bytes,5,opt,name=string"` // Map is the value of a map type parameter. - Map map[string]string `json:"map,omitempty" protobuf:"bytes,3,rep,name=map"` + *OptionalMap `json:",omitempty" protobuf:"bytes,3,rep,name=map"` // Array is the value of an array type parameter. - Array []string `json:"array,omitempty" protobuf:"bytes,4,rep,name=array"` + *OptionalArray `json:",omitempty" protobuf:"bytes,4,rep,name=array"` +} + +func (p ApplicationSourcePluginParameter) Equals(other ApplicationSourcePluginParameter) bool { + if p.Name != other.Name { + return false + } + if !reflect.DeepEqual(p.String_, other.String_) { + return false + } + return p.OptionalMap.Equals(other.OptionalMap) && p.OptionalArray.Equals(other.OptionalArray) +} + +// MarshalJSON is a custom JSON marshaller for ApplicationSourcePluginParameter. We need this custom marshaler because, +// when ApplicationSourcePluginParameter is unmarshaled, either from JSON or protobufs, the fields inside OptionalMap and +// OptionalArray are not set. The default JSON marshaler marshals these as "null." But really what we want to represent +// is an empty map or array. +// +// There are efforts to change things upstream, but nothing has been merged yet. See https://github.com/golang/go/issues/37711 +func (p ApplicationSourcePluginParameter) MarshalJSON() ([]byte, error) { + out := map[string]interface{}{} + out["name"] = p.Name + if p.String_ != nil { + out["string"] = p.String_ + } + if p.OptionalMap != nil { + if p.OptionalMap.Map == nil { + // Nil is not the same as a nil map. Nil means the field was not set, while a nil map means the field was set to an empty map. + // Either way, we want to marshal it as "{}". + out["map"] = map[string]string{} + } else { + out["map"] = p.OptionalMap.Map + } + } + if p.OptionalArray != nil { + if p.OptionalArray.Array == nil { + // Nil is not the same as a nil array. Nil means the field was not set, while a nil array means the field was set to an empty array. + // Either way, we want to marshal it as "[]". + out["array"] = []string{} + } else { + out["array"] = p.OptionalArray.Array + } + } + bytes, err := json.Marshal(out) + if err != nil { + return nil, err + } + return bytes, nil } type ApplicationSourcePluginParameters []ApplicationSourcePluginParameter +func (p ApplicationSourcePluginParameters) Equals(other ApplicationSourcePluginParameters) bool { + if len(p) != len(other) { + return false + } + for i := range p { + if !p[i].Equals(other[i]) { + return false + } + } + return true +} + +func (p ApplicationSourcePluginParameters) IsZero() bool { + return len(p) == 0 +} + // Environ builds a list of environment variables to represent parameters sent to a plugin from the Application // manifest. Parameters are represented as one large stringified JSON array (under `ARGOCD_APP_PARAMETERS`). They're // also represented as individual environment variables, each variable's key being an escaped version of the parameter's @@ -560,13 +696,13 @@ func (p ApplicationSourcePluginParameters) Environ() ([]string, error) { if param.String_ != nil { env = append(env, fmt.Sprintf("%s=%s", envBaseName, *param.String_)) } - if param.Map != nil { - for key, value := range param.Map { + if param.OptionalMap != nil { + for key, value := range param.OptionalMap.Map { env = append(env, fmt.Sprintf("%s_%s=%s", envBaseName, escaped(key), value)) } } - if param.Array != nil { - for i, value := range param.Array { + if param.OptionalArray != nil { + for i, value := range param.OptionalArray.Array { env = append(env, fmt.Sprintf("%s_%d=%s", envBaseName, i, value)) } } @@ -588,9 +724,28 @@ type ApplicationSourcePlugin struct { Parameters ApplicationSourcePluginParameters `json:"parameters,omitempty" protobuf:"bytes,3,opt,name=parameters"` } +func (c *ApplicationSourcePlugin) Equals(other *ApplicationSourcePlugin) bool { + if c == nil && other == nil { + return true + } + if c == nil || other == nil { + return false + } + if !c.Parameters.Equals(other.Parameters) { + return false + } + // DeepEqual works fine for fields besides Parameters. Since we already know that Parameters are equal, we can + // set them to nil and then do a DeepEqual. + leftCopy := c.DeepCopy() + rightCopy := other.DeepCopy() + leftCopy.Parameters = nil + rightCopy.Parameters = nil + return reflect.DeepEqual(leftCopy, rightCopy) +} + // IsZero returns true if the ApplicationSourcePlugin is considered empty func (c *ApplicationSourcePlugin) IsZero() bool { - return c == nil || c.Name == "" && c.Env.IsZero() + return c == nil || c.Name == "" && c.Env.IsZero() && c.Parameters.IsZero() } // AddEnvEntry merges an EnvEntry into a list of entries. If an entry with the same name already exists, @@ -2417,8 +2572,23 @@ func (condition *ApplicationCondition) IsError() bool { } // Equals compares two instances of ApplicationSource and return true if instances are equal. -func (source *ApplicationSource) Equals(other ApplicationSource) bool { - return reflect.DeepEqual(*source, other) +func (source *ApplicationSource) Equals(other *ApplicationSource) bool { + if source == nil && other == nil { + return true + } + if source == nil || other == nil { + return false + } + if !source.Plugin.Equals(other.Plugin) { + return false + } + // reflect.DeepEqual works fine for the other fields. Since the plugin fields are equal, set them to null so they're + // not considered in the DeepEqual comparison. + sourceCopy := source.DeepCopy() + otherCopy := other.DeepCopy() + sourceCopy.Plugin = nil + otherCopy.Plugin = nil + return reflect.DeepEqual(sourceCopy, otherCopy) } // ExplicitType returns the type (e.g. Helm, Kustomize, etc) of the application. If either none or multiple types are defined, returns an error. diff --git a/pkg/apis/application/v1alpha1/types_test.go b/pkg/apis/application/v1alpha1/types_test.go index 17f6982581db3..02c13d65d810e 100644 --- a/pkg/apis/application/v1alpha1/types_test.go +++ b/pkg/apis/application/v1alpha1/types_test.go @@ -3,7 +3,7 @@ package v1alpha1 import ( "encoding/json" "errors" - fmt "fmt" + "fmt" "os" "path" "reflect" @@ -11,10 +11,11 @@ import ( "testing" "time" - argocdcommon "github.com/argoproj/argo-cd/v2/common" "github.com/stretchr/testify/require" "k8s.io/utils/pointer" + argocdcommon "github.com/argoproj/argo-cd/v2/common" + "github.com/argoproj/gitops-engine/pkg/sync/common" "github.com/stretchr/testify/assert" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -863,9 +864,9 @@ func TestAppSourceEquality(t *testing.T) { }, } right := left.DeepCopy() - assert.True(t, left.Equals(*right)) + assert.True(t, left.Equals(right)) right.Directory.Recurse = false - assert.False(t, left.Equals(*right)) + assert.False(t, left.Equals(right)) } func TestAppDestinationEquality(t *testing.T) { @@ -3261,8 +3262,8 @@ func TestApplicationSourcePluginParameters_Environ_string(t *testing.T) { func TestApplicationSourcePluginParameters_Environ_array(t *testing.T) { params := ApplicationSourcePluginParameters{ { - Name: "dependencies", - Array: []string{"redis", "minio"}, + Name: "dependencies", + OptionalArray: &OptionalArray{Array: []string{"redis", "minio"}}, }, } environ, err := params.Environ() @@ -3279,9 +3280,11 @@ func TestApplicationSourcePluginParameters_Environ_map(t *testing.T) { params := ApplicationSourcePluginParameters{ { Name: "helm-parameters", - Map: map[string]string{ - "image.repo": "quay.io/argoproj/argo-cd", - "image.tag": "v2.4.0", + OptionalMap: &OptionalMap{ + Map: map[string]string{ + "image.repo": "quay.io/argoproj/argo-cd", + "image.tag": "v2.4.0", + }, }, }, } @@ -3302,10 +3305,14 @@ func TestApplicationSourcePluginParameters_Environ_all(t *testing.T) { { Name: "some-name", String_: pointer.String("1.2.3"), - Array: []string{"redis", "minio"}, - Map: map[string]string{ - "image.repo": "quay.io/argoproj/argo-cd", - "image.tag": "v2.4.0", + OptionalArray: &OptionalArray{ + Array: []string{"redis", "minio"}, + }, + OptionalMap: &OptionalMap{ + Map: map[string]string{ + "image.repo": "quay.io/argoproj/argo-cd", + "image.tag": "v2.4.0", + }, }, }, } @@ -3401,3 +3408,89 @@ func TestGetSources(t *testing.T) { }) } } + +func TestOptionalArrayEquality(t *testing.T) { + // Demonstrate that the JSON unmarshalling of an empty array parameter is an OptionalArray with the array field set + // to an empty array. + presentButEmpty := `{"array":[]}` + param := ApplicationSourcePluginParameter{} + err := json.Unmarshal([]byte(presentButEmpty), ¶m) + require.NoError(t, err) + jsonPresentButEmpty := param.OptionalArray + require.Equal(t, &OptionalArray{Array: []string{}}, jsonPresentButEmpty) + + // We won't simulate the protobuf unmarshalling of an empty array parameter. By experimentation, this is how it's + // unmarshalled. + protobufPresentButEmpty := &OptionalArray{Array: nil} + + tests := []struct { + name string + a *OptionalArray + b *OptionalArray + expected bool + }{ + {"nil and nil", nil, nil, true}, + {"nil and empty", nil, jsonPresentButEmpty, false}, + {"nil and empty-containing-nil", nil, protobufPresentButEmpty, false}, + {"empty-containing-empty and nil", jsonPresentButEmpty, nil, false}, + {"empty-containing-nil and nil", protobufPresentButEmpty, nil, false}, + {"empty-containing-empty and empty-containing-empty", jsonPresentButEmpty, jsonPresentButEmpty, true}, + {"empty-containing-empty and empty-containing-nil", jsonPresentButEmpty, protobufPresentButEmpty, true}, + {"empty-containing-nil and empty-containing-empty", protobufPresentButEmpty, jsonPresentButEmpty, true}, + {"empty-containing-nil and empty-containing-nil", protobufPresentButEmpty, protobufPresentButEmpty, true}, + {"empty-containing-empty and non-empty", jsonPresentButEmpty, &OptionalArray{Array: []string{"a"}}, false}, + {"non-empty and empty-containing-nil", &OptionalArray{Array: []string{"a"}}, jsonPresentButEmpty, false}, + {"non-empty and non-empty", &OptionalArray{Array: []string{"a"}}, &OptionalArray{Array: []string{"a"}}, true}, + {"non-empty and non-empty different", &OptionalArray{Array: []string{"a"}}, &OptionalArray{Array: []string{"b"}}, false}, + } + for _, testCase := range tests { + testCopy := testCase + t.Run(testCopy.name, func(t *testing.T) { + t.Parallel() + assert.Equal(t, testCopy.expected, testCopy.a.Equals(testCopy.b)) + }) + } +} + +func TestOptionalMapEquality(t *testing.T) { + // Demonstrate that the JSON unmarshalling of an empty map parameter is an OptionalMap with the map field set + // to an empty map. + presentButEmpty := `{"map":{}}` + param := ApplicationSourcePluginParameter{} + err := json.Unmarshal([]byte(presentButEmpty), ¶m) + require.NoError(t, err) + jsonPresentButEmpty := param.OptionalMap + require.Equal(t, &OptionalMap{Map: map[string]string{}}, jsonPresentButEmpty) + + // We won't simulate the protobuf unmarshalling of an empty map parameter. By experimentation, this is how it's + // unmarshalled. + protobufPresentButEmpty := &OptionalMap{Map: nil} + + tests := []struct { + name string + a *OptionalMap + b *OptionalMap + expected bool + }{ + {"nil and nil", nil, nil, true}, + {"nil and empty-containing-empty", nil, jsonPresentButEmpty, false}, + {"nil and empty-containing-nil", nil, protobufPresentButEmpty, false}, + {"empty-containing-empty and nil", jsonPresentButEmpty, nil, false}, + {"empty-containing-nil and nil", protobufPresentButEmpty, nil, false}, + {"empty-containing-empty and empty-containing-empty", jsonPresentButEmpty, jsonPresentButEmpty, true}, + {"empty-containing-empty and empty-containing-nil", jsonPresentButEmpty, protobufPresentButEmpty, true}, + {"empty-containing-empty and non-empty", jsonPresentButEmpty, &OptionalMap{Map: map[string]string{"a": "b"}}, false}, + {"empty-containing-nil and empty-containing-empty", protobufPresentButEmpty, jsonPresentButEmpty, true}, + {"empty-containing-nil and empty-containing-nil", protobufPresentButEmpty, protobufPresentButEmpty, true}, + {"non-empty and empty-containing-empty", &OptionalMap{Map: map[string]string{"a": "b"}}, jsonPresentButEmpty, false}, + {"non-empty and non-empty", &OptionalMap{Map: map[string]string{"a": "b"}}, &OptionalMap{Map: map[string]string{"a": "b"}}, true}, + {"non-empty and non-empty different", &OptionalMap{Map: map[string]string{"a": "b"}}, &OptionalMap{Map: map[string]string{"a": "c"}}, false}, + } + for _, testCase := range tests { + testCopy := testCase + t.Run(testCopy.name, func(t *testing.T) { + t.Parallel() + assert.Equal(t, testCopy.expected, testCopy.a.Equals(testCopy.b)) + }) + } +} diff --git a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go index d681700a095d2..8b6d7473d710a 100644 --- a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go @@ -1051,17 +1051,15 @@ func (in *ApplicationSourcePluginParameter) DeepCopyInto(out *ApplicationSourceP *out = new(string) **out = **in } - if in.Map != nil { - in, out := &in.Map, &out.Map - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } + if in.OptionalMap != nil { + in, out := &in.OptionalMap, &out.OptionalMap + *out = new(OptionalMap) + (*in).DeepCopyInto(*out) } - if in.Array != nil { - in, out := &in.Array, &out.Array - *out = make([]string, len(*in)) - copy(*out, *in) + if in.OptionalArray != nil { + in, out := &in.OptionalArray, &out.OptionalArray + *out = new(OptionalArray) + (*in).DeepCopyInto(*out) } return } @@ -2307,6 +2305,50 @@ func (in *OperationState) DeepCopy() *OperationState { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OptionalArray) DeepCopyInto(out *OptionalArray) { + *out = *in + if in.Array != nil { + in, out := &in.Array, &out.Array + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OptionalArray. +func (in *OptionalArray) DeepCopy() *OptionalArray { + if in == nil { + return nil + } + out := new(OptionalArray) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OptionalMap) DeepCopyInto(out *OptionalMap) { + *out = *in + if in.Map != nil { + in, out := &in.Map, &out.Map + *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 OptionalMap. +func (in *OptionalMap) DeepCopy() *OptionalMap { + if in == nil { + return nil + } + out := new(OptionalMap) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OrphanedResourceKey) DeepCopyInto(out *OrphanedResourceKey) { *out = *in diff --git a/server/repository/repository.go b/server/repository/repository.go index 9f9e3ff435bd3..7c87db6f5d47f 100644 --- a/server/repository/repository.go +++ b/server/repository/repository.go @@ -1,11 +1,10 @@ package repository import ( + "context" "fmt" "reflect" - "context" - "github.com/argoproj/gitops-engine/pkg/utils/kube" "github.com/argoproj/gitops-engine/pkg/utils/text" log "github.com/sirupsen/logrus" @@ -559,7 +558,8 @@ func (s *Server) isRepoPermittedInProject(ctx context.Context, repo string, proj // isSourceInHistory checks if the supplied application source is either our current application // source, or was something which we synced to previously. func isSourceInHistory(app *v1alpha1.Application, source v1alpha1.ApplicationSource) bool { - if source.Equals(app.Spec.GetSource()) { + appSource := app.Spec.GetSource() + if source.Equals(&appSource) { return true } // Iterate history. When comparing items in our history, use the actual synced revision to @@ -568,7 +568,7 @@ func isSourceInHistory(app *v1alpha1.Application, source v1alpha1.ApplicationSou // history[].revision will contain the explicit SHA for _, h := range app.Status.History { h.Source.TargetRevision = h.Revision - if source.Equals(h.Source) { + if source.Equals(&h.Source) { return true } } diff --git a/test/cmp/plugin.yaml b/test/cmp/plugin.yaml index e68fc3dee74af..bc4a3ac8ad57d 100644 --- a/test/cmp/plugin.yaml +++ b/test/cmp/plugin.yaml @@ -4,6 +4,8 @@ metadata: name: cmp-plugin spec: version: v1.0 + init: + command: [env] generate: command: [sh, -c, 'kustomize build'] discover: diff --git a/ui/src/app/applications/components/application-parameters/application-parameters.tsx b/ui/src/app/applications/components/application-parameters/application-parameters.tsx index 301f31e183ca2..16c2ea5c5c909 100644 --- a/ui/src/app/applications/components/application-parameters/application-parameters.tsx +++ b/ui/src/app/applications/components/application-parameters/application-parameters.tsx @@ -1,8 +1,21 @@ import {AutocompleteField, DataLoader, FormField, FormSelect, getNestedField} from 'argo-ui'; import * as React from 'react'; import {FieldApi, FormApi, FormField as ReactFormField, Text, TextArea} from 'react-form'; - -import {ArrayInputField, CheckboxField, EditablePanel, EditablePanelItem, Expandable, TagsInputField} from '../../../shared/components'; +import {cloneDeep} from 'lodash-es'; +import { + ArrayInputField, + ArrayValueField, + CheckboxField, + EditablePanel, + EditablePanelItem, + Expandable, + MapValueField, + NameValueEditor, + StringValueField, + NameValue, + TagsInputField, + ValueEditor +} from '../../../shared/components'; import * as models from '../../../shared/models'; import {ApplicationSourceDirectory, Plugin} from '../../../shared/models'; import {services} from '../../../shared/services'; @@ -117,6 +130,7 @@ export const ApplicationParameters = (props: { const [removedOverrides, setRemovedOverrides] = React.useState(new Array()); let attributes: EditablePanelItem[] = []; + const [appParamsDeletedState, setAppParamsDeletedState] = React.useState([]); if (props.details.type === 'Kustomize' && props.details.kustomize) { attributes.push({ @@ -262,7 +276,7 @@ export const ApplicationParameters = (props: { } else if (props.details.type === 'Plugin') { attributes.push({ title: 'NAME', - view: source.plugin && source.plugin.name, + view:
{ValueEditor(app.spec.source.plugin && app.spec.source.plugin.name, null)}
, edit: (formApi: FormApi) => ( services.authService.plugins()}> {(plugins: Plugin[]) => ( @@ -273,39 +287,160 @@ export const ApplicationParameters = (props: { }); attributes.push({ title: 'ENV', - view: source.plugin && (source.plugin.env || []).map(i => `${i.name}='${i.value}'`).join(' '), + view: ( +
+ {app.spec.source.plugin && + (app.spec.source.plugin.env || []).map(val => ( + + {NameValueEditor(val, null)} + + ))} +
+ ), edit: (formApi: FormApi) => }); - if (props.details.plugin.parametersAnnouncement) { + const parametersSet = new Set(); + if (props.details?.plugin?.parametersAnnouncement) { for (const announcement of props.details.plugin.parametersAnnouncement) { - const liveParam = app.spec.source.plugin.parameters?.find(param => param.name === announcement.name); - if (announcement.collectionType === undefined || announcement.collectionType === '' || announcement.collectionType === 'string') { - attributes.push({ - title: announcement.title ?? announcement.name, - view: liveParam?.string || announcement.string, - edit: () => liveParam?.string || announcement.string - }); - } else if (announcement.collectionType === 'array') { - attributes.push({ - title: announcement.title ?? announcement.name, - view: (liveParam?.array || announcement.array || []).join(' '), - edit: () => (liveParam?.array || announcement.array || []).join(' ') - }); - } else if (announcement.collectionType === 'map') { - const entries = concatMaps(announcement.map, liveParam?.map).entries(); - attributes.push({ - title: announcement.title ?? announcement.name, - view: Array.from(entries) - .map(([key, value]) => `${key}='${value}'`) - .join(' '), - edit: () => - Array.from(entries) - .map(([key, value]) => `${key}='${value}'`) - .join(' ') - }); - } + parametersSet.add(announcement.name); } } + if (app.spec.source.plugin?.parameters) { + for (const appParameter of app.spec.source.plugin.parameters) { + parametersSet.add(appParameter.name); + } + } + + for (const key of appParamsDeletedState) { + parametersSet.delete(key); + } + parametersSet.forEach(name => { + const announcement = props.details.plugin.parametersAnnouncement?.find(param => param.name === name); + const liveParam = app.spec.source.plugin?.parameters?.find(param => param.name === name); + const pluginIcon = + announcement && liveParam ? 'This parameter has been provided by plugin, but is overridden in application manifest.' : 'This parameter is provided by the plugin.'; + const isPluginPar = announcement ? true : false; + if ((announcement?.collectionType === undefined && liveParam?.map) || announcement?.collectionType === 'map') { + let liveParamMap; + if (liveParam) { + liveParamMap = liveParam.map ?? new Map(); + } + const map = concatMaps(liveParamMap ?? announcement?.map, new Map()); + const entries = map.entries(); + const items = new Array(); + Array.from(entries).forEach(([key, value]) => items.push({name: key, value: `${value}`})); + attributes.push({ + title: announcement?.title ?? announcement?.name ?? name, + customTitle: ( + + {isPluginPar && } + {announcement?.title ?? announcement?.name ?? name} + + ), + view: ( +
+ {items.length === 0 && -- NO ITEMS --} + {items.map(val => ( + + {NameValueEditor(val)} + + ))} +
+ ), + edit: (formApi: FormApi) => ( + + ) + }); + } else if ((announcement?.collectionType === undefined && liveParam?.array) || announcement?.collectionType === 'array') { + let liveParamArray; + if (liveParam) { + liveParamArray = liveParam?.array ?? []; + } + attributes.push({ + title: announcement?.title ?? announcement?.name ?? name, + customTitle: ( + + {isPluginPar && } + {announcement?.title ?? announcement?.name ?? name} + + ), + view: ( +
+ {(liveParamArray ?? announcement?.array ?? []).length === 0 && -- NO ITEMS --} + {(liveParamArray ?? announcement?.array ?? []).map((val, index) => ( + + {ValueEditor(val, null)} + + ))} +
+ ), + edit: (formApi: FormApi) => ( + + ) + }); + } else if ( + (announcement?.collectionType === undefined && liveParam?.string) || + announcement?.collectionType === '' || + announcement?.collectionType === 'string' || + announcement?.collectionType === undefined + ) { + let liveParamString; + if (liveParam) { + liveParamString = liveParam?.string ?? ''; + } + attributes.push({ + title: announcement?.title ?? announcement?.name ?? name, + customTitle: ( + + {isPluginPar && } + {announcement?.title ?? announcement?.name ?? name} + + ), + view: ( +
+ {ValueEditor(liveParamString ?? announcement?.string, null)} +
+ ), + edit: (formApi: FormApi) => ( + + ) + }); + } + }); } else if (props.details.type === 'Directory') { const directory = source.directory || ({} as ApplicationSourceDirectory); attributes.push({ @@ -351,6 +486,7 @@ export const ApplicationParameters = (props: { props.save && (async (input: models.Application) => { const src = getAppDefaultSource(input); + function isDefined(item: any) { return item !== null && item !== undefined; } @@ -364,11 +500,30 @@ export const ApplicationParameters = (props: { if (src.kustomize && src.kustomize.images) { src.kustomize.images = src.kustomize.images.filter(isDefinedWithVersion); } + + let params = input.spec?.source?.plugin?.parameters; + if (params) { + for (const param of params) { + if (param.map && param.array) { + // @ts-ignore + param.map = param.array.reduce((acc, {name, value}) => { + // @ts-ignore + acc[name] = value; + return acc; + }, {}); + delete param.array; + } + } + + params = params.filter(param => !appParamsDeletedState.includes(param.name)); + input.spec.source.plugin.parameters = params; + } + await props.save(input, {}); setRemovedOverrides(new Array()); }) } - values={app} + values={((props.details.plugin || app?.spec?.source?.plugin) && cloneDeep(app)) || app} validate={updatedApp => { const errors = {} as any; @@ -379,6 +534,12 @@ export const ApplicationParameters = (props: { return errors; }} + onModeSwitch={ + props.details.plugin && + (() => { + setAppParamsDeletedState([]); + }) + } title={props.details.type.toLocaleUpperCase()} items={attributes} noReadonlyMode={props.noReadonlyMode} diff --git a/ui/src/app/shared/components/array-input/array-input.tsx b/ui/src/app/shared/components/array-input/array-input.tsx index 4ba213cee88ac..b2acc9843b937 100644 --- a/ui/src/app/shared/components/array-input/array-input.tsx +++ b/ui/src/app/shared/components/array-input/array-input.tsx @@ -1,5 +1,6 @@ import * as React from 'react'; import * as ReactForm from 'react-form'; +import {FormValue} from 'react-form'; /* This provide a way to may a form field to an array of items. It allows you to @@ -26,32 +27,53 @@ export interface NameValue { value: string; } -export const NameValueEditor = (item: NameValue, onChange: (item: NameValue) => any) => ( - - onChange({...item, name: e.target.value})} - title='Name' - /> -   =   +export const NameValueEditor = (item: NameValue, onChange?: (item: NameValue) => any) => { + return ( + + onChange({...item, name: e.target.value})} + // onBlur={e=>onChange({...item, name: e.target.value})} + title='Name' + readOnly={!onChange} + /> +   =   + onChange({...item, value: e.target.value})} + title='Value' + readOnly={!onChange} + /> +   + + ); +}; + +export const ValueEditor = (item: string, onChange: (item: string) => any) => { + return ( onChange({...item, value: e.target.value})} + value={item || ''} + onChange={e => onChange(e.target.value)} title='Value' + readOnly={!onChange} /> -   - -); + ); +}; interface Props { items: T[]; @@ -97,6 +119,50 @@ export function ArrayInput(props: Props) { ); } +export const ResetOrDeleteButton = (props: { + isPluginPar: boolean; + getValue: () => FormValue; + name: string; + index: number; + setValue: (value: FormValue) => void; + setAppParamsDeletedState: any; +}) => { + const handleDeleteChange = () => { + if (props.index >= 0) { + props.setAppParamsDeletedState((val: string[]) => val.concat(props.name)); + } + }; + + const handleResetChange = () => { + if (props.index >= 0) { + const items = [...props.getValue()]; + items.splice(props.index, 1); + props.setValue(items); + } + }; + + const disabled = props.index === -1; + + const content = props.isPluginPar ? 'Reset' : 'Delete'; + let tooltip = ''; + if (content === 'Reset' && !disabled) { + tooltip = 'Resets the parameter to the value provided by the plugin. This removes the parameter override from the application manifest'; + } else if (content === 'Delete' && !disabled) { + tooltip = 'Deletes this parameter values from the application manifest.'; + } + + return ( + + ); +}; + export const ArrayInputField = ReactForm.FormField((props: {fieldApi: ReactForm.FieldApi}) => { const { fieldApi: {getValue, setValue} @@ -104,6 +170,95 @@ export const ArrayInputField = ReactForm.FormField((props: {fieldApi: ReactForm. return ; }); +export const ArrayValueField = ReactForm.FormField( + (props: {fieldApi: ReactForm.FieldApi; name: string; defaultVal: string[]; isPluginPar: boolean; setAppParamsDeletedState: any}) => { + const { + fieldApi: {getValue, setValue} + } = props; + + let liveParamArray; + const liveParam = getValue()?.find((val: {name: string; array: object}) => val.name === props.name); + if (liveParam) { + liveParamArray = liveParam?.array ?? []; + } + const index = getValue()?.findIndex((val: {name: string; array: object}) => val.name === props.name) ?? -1; + const values = liveParamArray ?? props.defaultVal ?? []; + + return ( + + + { + const update = change.map((val: string | object) => (typeof val !== 'string' ? '' : val)); + if (index >= 0) { + getValue()[index].array = update; + setValue([...getValue()]); + } else { + setValue([...(getValue() || []), {name: props.name, array: update}]); + } + }} + /> + + ); + } +); + +export const StringValueField = ReactForm.FormField( + (props: {fieldApi: ReactForm.FieldApi; name: string; defaultVal: string; isPluginPar: boolean; setAppParamsDeletedState: any}) => { + const { + fieldApi: {getValue, setValue} + } = props; + let liveParamString; + const liveParam = getValue()?.find((val: {name: string; string: string}) => val.name === props.name); + if (liveParam) { + liveParamString = liveParam?.string ? liveParam?.string : ''; + } + const values = liveParamString ?? props.defaultVal ?? ''; + const index = getValue()?.findIndex((val: {name: string; string: string}) => val.name === props.name) ?? -1; + + return ( + + +
+ { + if (index >= 0) { + getValue()[index].string = e.target.value; + setValue([...getValue()]); + } else { + setValue([...(getValue() || []), {name: props.name, string: e.target.value}]); + } + }} + title='Value' + /> +
+
+ ); + } +); + export const MapInputField = ReactForm.FormField((props: {fieldApi: ReactForm.FieldApi}) => { const { fieldApi: {getValue, setValue} @@ -123,3 +278,55 @@ export const MapInputField = ReactForm.FormField((props: {fieldApi: ReactForm.Fi /> ); }); + +export const MapValueField = ReactForm.FormField( + (props: {fieldApi: ReactForm.FieldApi; name: string; defaultVal: Map; isPluginPar: boolean; setAppParamsDeletedState: any}) => { + const { + fieldApi: {getValue, setValue} + } = props; + const items = new Array(); + const liveParam = getValue()?.find((val: {name: string; map: object}) => val.name === props.name); + const index = getValue()?.findIndex((val: {name: string; map: object}) => val.name === props.name) ?? -1; + if (liveParam) { + liveParam.map = liveParam.map ? liveParam.map : new Map(); + } + if (liveParam?.array) { + items.push(...liveParam.array); + } else { + const map = liveParam?.map ?? props.defaultVal ?? new Map(); + Object.keys(map).forEach(item => items.push({name: item || '', value: map[item] || ''})); + if (liveParam?.map) { + getValue()[index].array = items; + } + } + + return ( + + + + { + if (index === -1) { + getValue().push({ + name: props.name, + array: change + }); + } else { + getValue()[index].array = change; + } + setValue([...getValue()]); + }} + /> + + ); + } +); diff --git a/ui/src/app/shared/components/editable-panel/editable-panel.tsx b/ui/src/app/shared/components/editable-panel/editable-panel.tsx index 7ebc64e0fc468..9e62711e0da7d 100644 --- a/ui/src/app/shared/components/editable-panel/editable-panel.tsx +++ b/ui/src/app/shared/components/editable-panel/editable-panel.tsx @@ -3,12 +3,12 @@ import * as classNames from 'classnames'; import * as React from 'react'; import {Form, FormApi} from 'react-form'; import {helpTip} from '../../../applications/components/utils'; - import {Consumer} from '../../context'; import {Spinner} from '../spinner'; export interface EditablePanelItem { title: string; + customTitle?: string | React.ReactNode; key?: string; before?: React.ReactNode; view: string | React.ReactNode; @@ -104,7 +104,7 @@ export class EditablePanel extends React.Component {item.before}
-
{item.title}
+
{item.customTitle || item.title}
{item.view}
@@ -142,7 +142,7 @@ export class EditablePanel extends React.Component {item.before}
-
{(item.titleEdit && item.titleEdit(api)) || item.title}
+
{(item.titleEdit && item.titleEdit(api)) || item.customTitle || item.title}
{(item.edit && item.edit(api)) || item.view}
diff --git a/util/app/discovery/discovery.go b/util/app/discovery/discovery.go index 2a9f49798fed9..3c04194a1db99 100644 --- a/util/app/discovery/discovery.go +++ b/util/app/discovery/discovery.go @@ -143,8 +143,13 @@ func matchRepositoryCMP(ctx context.Context, repoPath string, client pluginclien } func cmpSupports(ctx context.Context, pluginSockFilePath, repoPath, fileName string, env []string, tarExcludedGlobs []string, namedPlugin bool) (io.Closer, pluginclient.ConfigManagementPluginServiceClient, bool) { - address := filepath.Join(pluginSockFilePath, fileName) - if !files.Inbound(address, pluginSockFilePath) { + absPluginSockFilePath, err := filepath.Abs(pluginSockFilePath) + if err != nil { + log.Errorf("error getting absolute path for plugin socket dir %v, %v", pluginSockFilePath, err) + return nil, nil, false + } + address := filepath.Join(absPluginSockFilePath, fileName) + if !files.Inbound(address, absPluginSockFilePath) { log.Errorf("invalid socket file path, %v is outside plugin socket dir %v", fileName, pluginSockFilePath) return nil, nil, false }