From 996d11d4e877a54306ddeabffe2a64a0d5835aad Mon Sep 17 00:00:00 2001 From: Gaurav Ghildiyal Date: Fri, 23 Feb 2024 12:15:40 -0800 Subject: [PATCH 1/7] Add new field trafficDistribution to Service spec --- pkg/apis/core/types.go | 21 +++++++++++++++++++++ pkg/apis/core/validation/validation.go | 19 +++++++++++++++++++ pkg/apis/core/validation/validation_test.go | 12 ++++++++++++ pkg/features/kube_features.go | 9 +++++++++ pkg/registry/core/service/strategy.go | 6 +++++- staging/src/k8s.io/api/core/v1/types.go | 21 +++++++++++++++++++++ 6 files changed, 87 insertions(+), 1 deletion(-) diff --git a/pkg/apis/core/types.go b/pkg/apis/core/types.go index 191b9ff1e02..e10c0b9ecb5 100644 --- a/pkg/apis/core/types.go +++ b/pkg/apis/core/types.go @@ -4163,6 +4163,18 @@ const ( ServiceExternalTrafficPolicyLocal ServiceExternalTrafficPolicy = "Local" ) +// These are valid values for the TrafficDistribution field of a Service. +const ( + // Indicates a preference for routing traffic to endpoints that are + // topologically proximate to the client. The interpretation of "topologically + // proximate" may vary across implementations and could encompass endpoints + // within the same node, rack, zone, or even region. Setting this value gives + // implementations permission to make different tradeoffs, e.g. optimizing for + // proximity rather than equal distribution of load. Users should not set this + // value if such tradeoffs are not acceptable. + ServiceTrafficDistributionPreferClose = "PreferClose" +) + // These are the valid conditions of a service. const ( // LoadBalancerPortsError represents the condition of the requested ports @@ -4426,6 +4438,15 @@ type ServiceSpec struct { // (possibly modified by topology and other features). // +optional InternalTrafficPolicy *ServiceInternalTrafficPolicy + + // TrafficDistribution offers a way to express preferences for how traffic is + // distributed to Service endpoints. Implementations can use this field as a + // hint, but are not required to guarantee strict adherence. If the field is + // not set, the implementation will apply its default routing strategy. If set + // to "PreferClose", implementations should prioritize endpoints that are + // topologically close (e.g., same zone). + // +optional + TrafficDistribution *string } // ServicePort represents the port on which the service is exposed diff --git a/pkg/apis/core/validation/validation.go b/pkg/apis/core/validation/validation.go index 335ea269e2c..0861e2f64fc 100644 --- a/pkg/apis/core/validation/validation.go +++ b/pkg/apis/core/validation/validation.go @@ -5494,6 +5494,9 @@ func ValidateService(service *core.Service) field.ErrorList { // internal traffic policy field allErrs = append(allErrs, validateServiceInternalTrafficFieldsValue(service)...) + // traffic distribution field + allErrs = append(allErrs, validateServiceTrafficDistribution(service)...) + return allErrs } @@ -5611,6 +5614,22 @@ func validateServiceInternalTrafficFieldsValue(service *core.Service) field.Erro return allErrs } +// validateServiceTrafficDistribution validates the values for the +// trafficDistribution field. +func validateServiceTrafficDistribution(service *core.Service) field.ErrorList { + allErrs := field.ErrorList{} + + if service.Spec.TrafficDistribution == nil { + return allErrs + } + + if *service.Spec.TrafficDistribution != v1.ServiceTrafficDistributionPreferClose { + allErrs = append(allErrs, field.NotSupported(field.NewPath("spec").Child("trafficDistribution"), *service.Spec.TrafficDistribution, []string{v1.ServiceTrafficDistributionPreferClose})) + } + + return allErrs +} + // ValidateServiceCreate validates Services as they are created. func ValidateServiceCreate(service *core.Service) field.ErrorList { return ValidateService(service) diff --git a/pkg/apis/core/validation/validation_test.go b/pkg/apis/core/validation/validation_test.go index ef21af8154f..55f1e5b74d8 100644 --- a/pkg/apis/core/validation/validation_test.go +++ b/pkg/apis/core/validation/validation_test.go @@ -16740,6 +16740,18 @@ func TestValidateServiceCreate(t *testing.T) { s.Annotations[core.AnnotationTopologyMode] = "different" }, numErrs: 1, + }, { + name: "valid: trafficDistribution field set to PreferClose", + tweakSvc: func(s *core.Service) { + s.Spec.TrafficDistribution = utilpointer.String("PreferClose") + }, + numErrs: 0, + }, { + name: "invalid: trafficDistribution field set to Random", + tweakSvc: func(s *core.Service) { + s.Spec.TrafficDistribution = utilpointer.String("Random") + }, + numErrs: 1, }, } diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index 94ea3460aa9..109cb6bbd1d 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -730,6 +730,13 @@ const ( // Subdivide the NodePort range for dynamic and static port allocation. ServiceNodePortStaticSubrange featuregate.Feature = "ServiceNodePortStaticSubrange" + // owner: @gauravkghildiyal @robscott + // kep: https://kep.k8s.io/4444 + // alpha: v1.30 + // + // Enables trafficDistribution field on Services. + ServiceTrafficDistribution featuregate.Feature = "ServiceTrafficDistribution" + // owner: @gjkim42 @SergeyKanzhelev @matthyx @tzneal // kep: http://kep.k8s.io/753 // alpha: v1.28 @@ -1128,6 +1135,8 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS ServiceNodePortStaticSubrange: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // GA in 1.29; remove in 1.31 + ServiceTrafficDistribution: {Default: false, PreRelease: featuregate.Alpha}, + SidecarContainers: {Default: true, PreRelease: featuregate.Beta}, SizeMemoryBackedVolumes: {Default: true, PreRelease: featuregate.Beta}, diff --git a/pkg/registry/core/service/strategy.go b/pkg/registry/core/service/strategy.go index 4a91778a37f..6d35e6625ea 100644 --- a/pkg/registry/core/service/strategy.go +++ b/pkg/registry/core/service/strategy.go @@ -120,7 +120,11 @@ func (svcStrategy) AllowUnconditionalUpdate() bool { // newSvc.Spec.MyFeature = nil // } func dropServiceDisabledFields(newSvc *api.Service, oldSvc *api.Service) { - + // Drop condition for TrafficDistribution field. + isTrafficDistributionInUse := (oldSvc != nil && oldSvc.Spec.TrafficDistribution != nil) + if !utilfeature.DefaultFeatureGate.Enabled(features.ServiceTrafficDistribution) && !isTrafficDistributionInUse { + newSvc.Spec.TrafficDistribution = nil + } } type serviceStatusStrategy struct { diff --git a/staging/src/k8s.io/api/core/v1/types.go b/staging/src/k8s.io/api/core/v1/types.go index 976c79979b7..13bcd09bc55 100644 --- a/staging/src/k8s.io/api/core/v1/types.go +++ b/staging/src/k8s.io/api/core/v1/types.go @@ -4908,6 +4908,18 @@ const ( ServiceExternalTrafficPolicyTypeCluster = ServiceExternalTrafficPolicyCluster ) +// These are valid values for the TrafficDistribution field of a Service. +const ( + // Indicates a preference for routing traffic to endpoints that are + // topologically proximate to the client. The interpretation of "topologically + // proximate" may vary across implementations and could encompass endpoints + // within the same node, rack, zone, or even region. Setting this value gives + // implementations permission to make different tradeoffs, e.g. optimizing for + // proximity rather than equal distribution of load. Users should not set this + // value if such tradeoffs are not acceptable. + ServiceTrafficDistributionPreferClose = "PreferClose" +) + // These are the valid conditions of a service. const ( // LoadBalancerPortsError represents the condition of the requested ports @@ -5252,6 +5264,15 @@ type ServiceSpec struct { // (possibly modified by topology and other features). // +optional InternalTrafficPolicy *ServiceInternalTrafficPolicy `json:"internalTrafficPolicy,omitempty" protobuf:"bytes,22,opt,name=internalTrafficPolicy"` + + // TrafficDistribution offers a way to express preferences for how traffic is + // distributed to Service endpoints. Implementations can use this field as a + // hint, but are not required to guarantee strict adherence. If the field is + // not set, the implementation will apply its default routing strategy. If set + // to "PreferClose", implementations should prioritize endpoints that are + // topologically close (e.g., same zone). + // +optional + TrafficDistribution *string `json:"trafficDistribution,omitempty" protobuf:"bytes,23,opt,name=trafficDistribution"` } // ServicePort contains information on service's port. From 646fd200b8532b0df95df300a8351379315f3ac9 Mon Sep 17 00:00:00 2001 From: Gaurav Ghildiyal Date: Fri, 23 Feb 2024 12:23:32 -0800 Subject: [PATCH 2/7] Run 'make update' --- api/openapi-spec/swagger.json | 4 + api/openapi-spec/v3/api__v1_openapi.json | 4 + pkg/apis/core/v1/zz_generated.conversion.go | 2 + pkg/apis/core/zz_generated.deepcopy.go | 5 + pkg/generated/openapi/zz_generated.openapi.go | 7 + .../src/k8s.io/api/core/v1/generated.pb.go | 1971 +++++++++-------- .../src/k8s.io/api/core/v1/generated.proto | 9 + .../core/v1/types_swagger_doc_generated.go | 1 + .../api/core/v1/zz_generated.deepcopy.go | 5 + .../api/testdata/HEAD/core.v1.Service.json | 3 +- .../api/testdata/HEAD/core.v1.Service.pb | Bin 918 -> 945 bytes .../api/testdata/HEAD/core.v1.Service.yaml | 1 + .../core/v1/servicespec.go | 9 + .../applyconfigurations/internal/internal.go | 3 + 14 files changed, 1062 insertions(+), 962 deletions(-) diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index f68fd5e2e54..fc2a7574afd 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -10673,6 +10673,10 @@ "$ref": "#/definitions/io.k8s.api.core.v1.SessionAffinityConfig", "description": "sessionAffinityConfig contains the configurations of session affinity." }, + "trafficDistribution": { + "description": "TrafficDistribution offers a way to express preferences for how traffic is distributed to Service endpoints. Implementations can use this field as a hint, but are not required to guarantee strict adherence. If the field is not set, the implementation will apply its default routing strategy. If set to \"PreferClose\", implementations should prioritize endpoints that are topologically close (e.g., same zone).", + "type": "string" + }, "type": { "description": "type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. \"ClusterIP\" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object or EndpointSlice objects. If clusterIP is \"None\", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a virtual IP. \"NodePort\" builds on ClusterIP and allocates a port on every node which routes to the same endpoints as the clusterIP. \"LoadBalancer\" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the same endpoints as the clusterIP. \"ExternalName\" aliases this service to the specified externalName. Several other fields do not apply to ExternalName services. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types", "type": "string" diff --git a/api/openapi-spec/v3/api__v1_openapi.json b/api/openapi-spec/v3/api__v1_openapi.json index 8a12b6bf318..4d9196c0a35 100644 --- a/api/openapi-spec/v3/api__v1_openapi.json +++ b/api/openapi-spec/v3/api__v1_openapi.json @@ -7447,6 +7447,10 @@ ], "description": "sessionAffinityConfig contains the configurations of session affinity." }, + "trafficDistribution": { + "description": "TrafficDistribution offers a way to express preferences for how traffic is distributed to Service endpoints. Implementations can use this field as a hint, but are not required to guarantee strict adherence. If the field is not set, the implementation will apply its default routing strategy. If set to \"PreferClose\", implementations should prioritize endpoints that are topologically close (e.g., same zone).", + "type": "string" + }, "type": { "description": "type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. \"ClusterIP\" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object or EndpointSlice objects. If clusterIP is \"None\", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a virtual IP. \"NodePort\" builds on ClusterIP and allocates a port on every node which routes to the same endpoints as the clusterIP. \"LoadBalancer\" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the same endpoints as the clusterIP. \"ExternalName\" aliases this service to the specified externalName. Several other fields do not apply to ExternalName services. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types", "type": "string" diff --git a/pkg/apis/core/v1/zz_generated.conversion.go b/pkg/apis/core/v1/zz_generated.conversion.go index 6c30c4faca8..6040bde9826 100644 --- a/pkg/apis/core/v1/zz_generated.conversion.go +++ b/pkg/apis/core/v1/zz_generated.conversion.go @@ -8049,6 +8049,7 @@ func autoConvert_v1_ServiceSpec_To_core_ServiceSpec(in *v1.ServiceSpec, out *cor out.AllocateLoadBalancerNodePorts = (*bool)(unsafe.Pointer(in.AllocateLoadBalancerNodePorts)) out.LoadBalancerClass = (*string)(unsafe.Pointer(in.LoadBalancerClass)) out.InternalTrafficPolicy = (*core.ServiceInternalTrafficPolicy)(unsafe.Pointer(in.InternalTrafficPolicy)) + out.TrafficDistribution = (*string)(unsafe.Pointer(in.TrafficDistribution)) return nil } @@ -8077,6 +8078,7 @@ func autoConvert_core_ServiceSpec_To_v1_ServiceSpec(in *core.ServiceSpec, out *v out.AllocateLoadBalancerNodePorts = (*bool)(unsafe.Pointer(in.AllocateLoadBalancerNodePorts)) out.LoadBalancerClass = (*string)(unsafe.Pointer(in.LoadBalancerClass)) out.InternalTrafficPolicy = (*v1.ServiceInternalTrafficPolicy)(unsafe.Pointer(in.InternalTrafficPolicy)) + out.TrafficDistribution = (*string)(unsafe.Pointer(in.TrafficDistribution)) return nil } diff --git a/pkg/apis/core/zz_generated.deepcopy.go b/pkg/apis/core/zz_generated.deepcopy.go index ab3af1b7288..11d9d0e2f52 100644 --- a/pkg/apis/core/zz_generated.deepcopy.go +++ b/pkg/apis/core/zz_generated.deepcopy.go @@ -5677,6 +5677,11 @@ func (in *ServiceSpec) DeepCopyInto(out *ServiceSpec) { *out = new(ServiceInternalTrafficPolicy) **out = **in } + if in.TrafficDistribution != nil { + in, out := &in.TrafficDistribution, &out.TrafficDistribution + *out = new(string) + **out = **in + } return } diff --git a/pkg/generated/openapi/zz_generated.openapi.go b/pkg/generated/openapi/zz_generated.openapi.go index ce4c8f466c7..0e2f07b25fe 100644 --- a/pkg/generated/openapi/zz_generated.openapi.go +++ b/pkg/generated/openapi/zz_generated.openapi.go @@ -29512,6 +29512,13 @@ func schema_k8sio_api_core_v1_ServiceSpec(ref common.ReferenceCallback) common.O Enum: []interface{}{"Cluster", "Local"}, }, }, + "trafficDistribution": { + SchemaProps: spec.SchemaProps{ + Description: "TrafficDistribution offers a way to express preferences for how traffic is distributed to Service endpoints. Implementations can use this field as a hint, but are not required to guarantee strict adherence. If the field is not set, the implementation will apply its default routing strategy. If set to \"PreferClose\", implementations should prioritize endpoints that are topologically close (e.g., same zone).", + Type: []string{"string"}, + Format: "", + }, + }, }, }, }, diff --git a/staging/src/k8s.io/api/core/v1/generated.pb.go b/staging/src/k8s.io/api/core/v1/generated.pb.go index f3c828ad15f..f886c37262a 100644 --- a/staging/src/k8s.io/api/core/v1/generated.pb.go +++ b/staging/src/k8s.io/api/core/v1/generated.pb.go @@ -6497,971 +6497,973 @@ func init() { } var fileDescriptor_6c07b07c062484ab = []byte{ - // 15419 bytes of a gzipped FileDescriptorProto + // 15453 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x69, 0x90, 0x1c, 0xc9, 0x75, 0x18, 0xcc, 0xea, 0x9e, 0xab, 0xdf, 0xdc, 0x39, 0x00, 0x76, 0x30, 0x0b, 0xa0, 0xb1, 0xb5, - 0xbb, 0x58, 0xec, 0x35, 0x20, 0xf6, 0x20, 0x97, 0xbb, 0xcb, 0x15, 0xe7, 0x04, 0x66, 0x31, 0x33, - 0xe8, 0xcd, 0x1e, 0x00, 0xe4, 0x72, 0xc9, 0x8f, 0x85, 0xee, 0x9c, 0x99, 0xe2, 0x74, 0x57, 0xf5, - 0x56, 0x55, 0x0f, 0x30, 0xf8, 0xa8, 0x90, 0x44, 0x7d, 0xa2, 0x44, 0x4a, 0x5f, 0x04, 0xc3, 0x21, - 0x1f, 0x41, 0x29, 0x14, 0x0e, 0x49, 0xd6, 0x61, 0x5a, 0xb2, 0x69, 0xca, 0x92, 0x2c, 0xea, 0xf2, - 0x15, 0x96, 0x14, 0x0e, 0x59, 0x56, 0x84, 0x45, 0x85, 0x15, 0x1e, 0x99, 0x90, 0x23, 0x14, 0xfa, - 0x61, 0x49, 0x3e, 0x7e, 0xd8, 0x13, 0xb2, 0xe5, 0xc8, 0xb3, 0x32, 0xeb, 0xe8, 0xee, 0xc1, 0x02, - 0xc3, 0x25, 0x63, 0xff, 0x75, 0xbf, 0xf7, 0xf2, 0x65, 0x56, 0x9e, 0x2f, 0xdf, 0x7b, 0xf9, 0x1e, - 0xd8, 0x3b, 0x2f, 0x85, 0xb3, 0xae, 0x7f, 0xc1, 0x69, 0xb9, 0x17, 0x6a, 0x7e, 0x40, 0x2e, 0xec, - 0x5e, 0xbc, 0xb0, 0x45, 0x3c, 0x12, 0x38, 0x11, 0xa9, 0xcf, 0xb6, 0x02, 0x3f, 0xf2, 0x11, 0xe2, - 0x34, 0xb3, 0x4e, 0xcb, 0x9d, 0xa5, 0x34, 0xb3, 0xbb, 0x17, 0x67, 0x9e, 0xdd, 0x72, 0xa3, 0xed, - 0xf6, 0xcd, 0xd9, 0x9a, 0xdf, 0xbc, 0xb0, 0xe5, 0x6f, 0xf9, 0x17, 0x18, 0xe9, 0xcd, 0xf6, 0x26, - 0xfb, 0xc7, 0xfe, 0xb0, 0x5f, 0x9c, 0xc5, 0xcc, 0x0b, 0x71, 0x35, 0x4d, 0xa7, 0xb6, 0xed, 0x7a, - 0x24, 0xd8, 0xbb, 0xd0, 0xda, 0xd9, 0x62, 0xf5, 0x06, 0x24, 0xf4, 0xdb, 0x41, 0x8d, 0x24, 0x2b, - 0xee, 0x58, 0x2a, 0xbc, 0xd0, 0x24, 0x91, 0x93, 0xd1, 0xdc, 0x99, 0x0b, 0x79, 0xa5, 0x82, 0xb6, - 0x17, 0xb9, 0xcd, 0x74, 0x35, 0x1f, 0xe8, 0x56, 0x20, 0xac, 0x6d, 0x93, 0xa6, 0x93, 0x2a, 0xf7, - 0x7c, 0x5e, 0xb9, 0x76, 0xe4, 0x36, 0x2e, 0xb8, 0x5e, 0x14, 0x46, 0x41, 0xb2, 0x90, 0xfd, 0x75, - 0x0b, 0xce, 0xce, 0xdd, 0xa8, 0x2e, 0x35, 0x9c, 0x30, 0x72, 0x6b, 0xf3, 0x0d, 0xbf, 0xb6, 0x53, - 0x8d, 0xfc, 0x80, 0x5c, 0xf7, 0x1b, 0xed, 0x26, 0xa9, 0xb2, 0x8e, 0x40, 0xcf, 0xc0, 0xd0, 0x2e, - 0xfb, 0xbf, 0xb2, 0x38, 0x6d, 0x9d, 0xb5, 0xce, 0x97, 0xe6, 0x27, 0x7e, 0x6b, 0xbf, 0xfc, 0xbe, - 0xbb, 0xfb, 0xe5, 0xa1, 0xeb, 0x02, 0x8e, 0x15, 0x05, 0x3a, 0x07, 0x03, 0x9b, 0xe1, 0xc6, 0x5e, - 0x8b, 0x4c, 0x17, 0x18, 0xed, 0x98, 0xa0, 0x1d, 0x58, 0xae, 0x52, 0x28, 0x16, 0x58, 0x74, 0x01, - 0x4a, 0x2d, 0x27, 0x88, 0xdc, 0xc8, 0xf5, 0xbd, 0xe9, 0xe2, 0x59, 0xeb, 0x7c, 0xff, 0xfc, 0xa4, - 0x20, 0x2d, 0x55, 0x24, 0x02, 0xc7, 0x34, 0xb4, 0x19, 0x01, 0x71, 0xea, 0x57, 0xbd, 0xc6, 0xde, - 0x74, 0xdf, 0x59, 0xeb, 0xfc, 0x50, 0xdc, 0x0c, 0x2c, 0xe0, 0x58, 0x51, 0xd8, 0x5f, 0x2a, 0xc0, - 0xd0, 0xdc, 0xe6, 0xa6, 0xeb, 0xb9, 0xd1, 0x1e, 0xba, 0x0e, 0x23, 0x9e, 0x5f, 0x27, 0xf2, 0x3f, - 0xfb, 0x8a, 0xe1, 0xe7, 0xce, 0xce, 0xa6, 0xa7, 0xd2, 0xec, 0xba, 0x46, 0x37, 0x3f, 0x71, 0x77, - 0xbf, 0x3c, 0xa2, 0x43, 0xb0, 0xc1, 0x07, 0x61, 0x18, 0x6e, 0xf9, 0x75, 0xc5, 0xb6, 0xc0, 0xd8, - 0x96, 0xb3, 0xd8, 0x56, 0x62, 0xb2, 0xf9, 0xf1, 0xbb, 0xfb, 0xe5, 0x61, 0x0d, 0x80, 0x75, 0x26, - 0xe8, 0x26, 0x8c, 0xd3, 0xbf, 0x5e, 0xe4, 0x2a, 0xbe, 0x45, 0xc6, 0xf7, 0xd1, 0x3c, 0xbe, 0x1a, - 0xe9, 0xfc, 0xd4, 0xdd, 0xfd, 0xf2, 0x78, 0x02, 0x88, 0x93, 0x0c, 0xed, 0x3b, 0x30, 0x36, 0x17, - 0x45, 0x4e, 0x6d, 0x9b, 0xd4, 0xf9, 0x08, 0xa2, 0x17, 0xa0, 0xcf, 0x73, 0x9a, 0x44, 0x8c, 0xef, - 0x59, 0xd1, 0xb1, 0x7d, 0xeb, 0x4e, 0x93, 0x1c, 0xec, 0x97, 0x27, 0xae, 0x79, 0xee, 0xdb, 0x6d, - 0x31, 0x2b, 0x28, 0x0c, 0x33, 0x6a, 0xf4, 0x1c, 0x40, 0x9d, 0xec, 0xba, 0x35, 0x52, 0x71, 0xa2, - 0x6d, 0x31, 0xde, 0x48, 0x94, 0x85, 0x45, 0x85, 0xc1, 0x1a, 0x95, 0x7d, 0x1b, 0x4a, 0x73, 0xbb, - 0xbe, 0x5b, 0xaf, 0xf8, 0xf5, 0x10, 0xed, 0xc0, 0x78, 0x2b, 0x20, 0x9b, 0x24, 0x50, 0xa0, 0x69, - 0xeb, 0x6c, 0xf1, 0xfc, 0xf0, 0x73, 0xe7, 0x33, 0x3f, 0xd6, 0x24, 0x5d, 0xf2, 0xa2, 0x60, 0x6f, - 0xfe, 0x21, 0x51, 0xdf, 0x78, 0x02, 0x8b, 0x93, 0x9c, 0xed, 0x7f, 0x59, 0x80, 0xe3, 0x73, 0x77, - 0xda, 0x01, 0x59, 0x74, 0xc3, 0x9d, 0xe4, 0x0c, 0xaf, 0xbb, 0xe1, 0xce, 0x7a, 0xdc, 0x03, 0x6a, - 0x6a, 0x2d, 0x0a, 0x38, 0x56, 0x14, 0xe8, 0x59, 0x18, 0xa4, 0xbf, 0xaf, 0xe1, 0x15, 0xf1, 0xc9, - 0x53, 0x82, 0x78, 0x78, 0xd1, 0x89, 0x9c, 0x45, 0x8e, 0xc2, 0x92, 0x06, 0xad, 0xc1, 0x70, 0x8d, - 0x2d, 0xc8, 0xad, 0x35, 0xbf, 0x4e, 0xd8, 0x60, 0x96, 0xe6, 0x9f, 0xa6, 0xe4, 0x0b, 0x31, 0xf8, + 0xbb, 0x58, 0xec, 0x35, 0x20, 0xf6, 0x20, 0x97, 0xbb, 0xcb, 0x15, 0xe7, 0x04, 0x7a, 0x31, 0x33, + 0xe8, 0xcd, 0x1e, 0x00, 0xe4, 0x72, 0xc9, 0x8f, 0x85, 0xee, 0x9c, 0x99, 0xe2, 0xf4, 0x54, 0xf5, + 0x56, 0x55, 0x0f, 0x30, 0xf8, 0xa8, 0x90, 0x44, 0x59, 0x94, 0x48, 0xc9, 0x11, 0x0c, 0x87, 0x7c, + 0x04, 0xa5, 0x50, 0x38, 0x64, 0x59, 0x87, 0x69, 0xc9, 0xa6, 0x29, 0x4b, 0xb2, 0xa8, 0xcb, 0x57, + 0x58, 0x52, 0x38, 0x64, 0x59, 0x11, 0x16, 0x15, 0x56, 0x78, 0x64, 0x42, 0x8e, 0x50, 0xe8, 0x87, + 0x25, 0xf9, 0xf8, 0x61, 0x4f, 0xc8, 0x96, 0x23, 0xcf, 0xca, 0xac, 0xa3, 0xbb, 0x07, 0x0b, 0x0c, + 0x97, 0x8c, 0xfd, 0xd7, 0xfd, 0xde, 0xcb, 0x97, 0x59, 0x79, 0xbe, 0x7c, 0xef, 0xe5, 0x7b, 0x60, + 0x6f, 0xbf, 0x14, 0xce, 0xba, 0xfe, 0x05, 0xa7, 0xe5, 0x5e, 0xa8, 0xfb, 0x01, 0xb9, 0xb0, 0x7b, + 0xf1, 0xc2, 0x26, 0xf1, 0x48, 0xe0, 0x44, 0xa4, 0x31, 0xdb, 0x0a, 0xfc, 0xc8, 0x47, 0x88, 0xd3, + 0xcc, 0x3a, 0x2d, 0x77, 0x96, 0xd2, 0xcc, 0xee, 0x5e, 0x9c, 0x79, 0x76, 0xd3, 0x8d, 0xb6, 0xda, + 0x37, 0x67, 0xeb, 0xfe, 0xce, 0x85, 0x4d, 0x7f, 0xd3, 0xbf, 0xc0, 0x48, 0x6f, 0xb6, 0x37, 0xd8, + 0x3f, 0xf6, 0x87, 0xfd, 0xe2, 0x2c, 0x66, 0x5e, 0x88, 0xab, 0xd9, 0x71, 0xea, 0x5b, 0xae, 0x47, + 0x82, 0xbd, 0x0b, 0xad, 0xed, 0x4d, 0x56, 0x6f, 0x40, 0x42, 0xbf, 0x1d, 0xd4, 0x49, 0xb2, 0xe2, + 0x8e, 0xa5, 0xc2, 0x0b, 0x3b, 0x24, 0x72, 0x32, 0x9a, 0x3b, 0x73, 0x21, 0xaf, 0x54, 0xd0, 0xf6, + 0x22, 0x77, 0x27, 0x5d, 0xcd, 0x07, 0xba, 0x15, 0x08, 0xeb, 0x5b, 0x64, 0xc7, 0x49, 0x95, 0x7b, + 0x3e, 0xaf, 0x5c, 0x3b, 0x72, 0x9b, 0x17, 0x5c, 0x2f, 0x0a, 0xa3, 0x20, 0x59, 0xc8, 0xfe, 0xba, + 0x05, 0x67, 0xe7, 0x6e, 0xd4, 0x96, 0x9a, 0x4e, 0x18, 0xb9, 0xf5, 0xf9, 0xa6, 0x5f, 0xdf, 0xae, + 0x45, 0x7e, 0x40, 0xae, 0xfb, 0xcd, 0xf6, 0x0e, 0xa9, 0xb1, 0x8e, 0x40, 0xcf, 0xc0, 0xd0, 0x2e, + 0xfb, 0x5f, 0x59, 0x9c, 0xb6, 0xce, 0x5a, 0xe7, 0x4b, 0xf3, 0x13, 0xbf, 0xb9, 0x5f, 0x7e, 0xdf, + 0xdd, 0xfd, 0xf2, 0xd0, 0x75, 0x01, 0xc7, 0x8a, 0x02, 0x9d, 0x83, 0x81, 0x8d, 0x70, 0x7d, 0xaf, + 0x45, 0xa6, 0x0b, 0x8c, 0x76, 0x4c, 0xd0, 0x0e, 0x2c, 0xd7, 0x28, 0x14, 0x0b, 0x2c, 0xba, 0x00, + 0xa5, 0x96, 0x13, 0x44, 0x6e, 0xe4, 0xfa, 0xde, 0x74, 0xf1, 0xac, 0x75, 0xbe, 0x7f, 0x7e, 0x52, + 0x90, 0x96, 0xaa, 0x12, 0x81, 0x63, 0x1a, 0xda, 0x8c, 0x80, 0x38, 0x8d, 0xab, 0x5e, 0x73, 0x6f, + 0xba, 0xef, 0xac, 0x75, 0x7e, 0x28, 0x6e, 0x06, 0x16, 0x70, 0xac, 0x28, 0xec, 0x2f, 0x15, 0x60, + 0x68, 0x6e, 0x63, 0xc3, 0xf5, 0xdc, 0x68, 0x0f, 0x5d, 0x87, 0x11, 0xcf, 0x6f, 0x10, 0xf9, 0x9f, + 0x7d, 0xc5, 0xf0, 0x73, 0x67, 0x67, 0xd3, 0x53, 0x69, 0x76, 0x4d, 0xa3, 0x9b, 0x9f, 0xb8, 0xbb, + 0x5f, 0x1e, 0xd1, 0x21, 0xd8, 0xe0, 0x83, 0x30, 0x0c, 0xb7, 0xfc, 0x86, 0x62, 0x5b, 0x60, 0x6c, + 0xcb, 0x59, 0x6c, 0xab, 0x31, 0xd9, 0xfc, 0xf8, 0xdd, 0xfd, 0xf2, 0xb0, 0x06, 0xc0, 0x3a, 0x13, + 0x74, 0x13, 0xc6, 0xe9, 0x5f, 0x2f, 0x72, 0x15, 0xdf, 0x22, 0xe3, 0xfb, 0x68, 0x1e, 0x5f, 0x8d, + 0x74, 0x7e, 0xea, 0xee, 0x7e, 0x79, 0x3c, 0x01, 0xc4, 0x49, 0x86, 0xf6, 0x1d, 0x18, 0x9b, 0x8b, + 0x22, 0xa7, 0xbe, 0x45, 0x1a, 0x7c, 0x04, 0xd1, 0x0b, 0xd0, 0xe7, 0x39, 0x3b, 0x44, 0x8c, 0xef, + 0x59, 0xd1, 0xb1, 0x7d, 0x6b, 0xce, 0x0e, 0x39, 0xd8, 0x2f, 0x4f, 0x5c, 0xf3, 0xdc, 0xb7, 0xdb, + 0x62, 0x56, 0x50, 0x18, 0x66, 0xd4, 0xe8, 0x39, 0x80, 0x06, 0xd9, 0x75, 0xeb, 0xa4, 0xea, 0x44, + 0x5b, 0x62, 0xbc, 0x91, 0x28, 0x0b, 0x8b, 0x0a, 0x83, 0x35, 0x2a, 0xfb, 0x36, 0x94, 0xe6, 0x76, + 0x7d, 0xb7, 0x51, 0xf5, 0x1b, 0x21, 0xda, 0x86, 0xf1, 0x56, 0x40, 0x36, 0x48, 0xa0, 0x40, 0xd3, + 0xd6, 0xd9, 0xe2, 0xf9, 0xe1, 0xe7, 0xce, 0x67, 0x7e, 0xac, 0x49, 0xba, 0xe4, 0x45, 0xc1, 0xde, + 0xfc, 0x43, 0xa2, 0xbe, 0xf1, 0x04, 0x16, 0x27, 0x39, 0xdb, 0xff, 0xaa, 0x00, 0xc7, 0xe7, 0xee, + 0xb4, 0x03, 0xb2, 0xe8, 0x86, 0xdb, 0xc9, 0x19, 0xde, 0x70, 0xc3, 0xed, 0xb5, 0xb8, 0x07, 0xd4, + 0xd4, 0x5a, 0x14, 0x70, 0xac, 0x28, 0xd0, 0xb3, 0x30, 0x48, 0x7f, 0x5f, 0xc3, 0x15, 0xf1, 0xc9, + 0x53, 0x82, 0x78, 0x78, 0xd1, 0x89, 0x9c, 0x45, 0x8e, 0xc2, 0x92, 0x06, 0xad, 0xc2, 0x70, 0x9d, + 0x2d, 0xc8, 0xcd, 0x55, 0xbf, 0x41, 0xd8, 0x60, 0x96, 0xe6, 0x9f, 0xa6, 0xe4, 0x0b, 0x31, 0xf8, 0x60, 0xbf, 0x3c, 0xcd, 0xdb, 0x26, 0x58, 0x68, 0x38, 0xac, 0x97, 0x47, 0xb6, 0x5a, 0x5f, 0x7d, 0x8c, 0x13, 0x64, 0xac, 0xad, 0xf3, 0xda, 0x52, 0xe9, 0x67, 0x4b, 0x65, 0x24, 0x7b, 0x99, 0xa0, - 0x8b, 0xd0, 0xb7, 0xe3, 0x7a, 0xf5, 0xe9, 0x01, 0xc6, 0xeb, 0x34, 0x1d, 0xf3, 0x2b, 0xae, 0x57, - 0x3f, 0xd8, 0x2f, 0x4f, 0x1a, 0xcd, 0xa1, 0x40, 0xcc, 0x48, 0xed, 0xff, 0x6e, 0x41, 0x99, 0xe1, - 0x96, 0xdd, 0x06, 0xa9, 0x90, 0x20, 0x74, 0xc3, 0x88, 0x78, 0x91, 0xd1, 0xa1, 0xcf, 0x01, 0x84, - 0xa4, 0x16, 0x90, 0x48, 0xeb, 0x52, 0x35, 0x31, 0xaa, 0x0a, 0x83, 0x35, 0x2a, 0xba, 0x21, 0x84, - 0xdb, 0x4e, 0xc0, 0xe6, 0x97, 0xe8, 0x58, 0xb5, 0x21, 0x54, 0x25, 0x02, 0xc7, 0x34, 0xc6, 0x86, - 0x50, 0xec, 0xb6, 0x21, 0xa0, 0x0f, 0xc3, 0x78, 0x5c, 0x59, 0xd8, 0x72, 0x6a, 0xb2, 0x03, 0xd9, - 0x92, 0xa9, 0x9a, 0x28, 0x9c, 0xa4, 0xb5, 0xff, 0xbe, 0x25, 0x26, 0x0f, 0xfd, 0xea, 0x77, 0xf9, - 0xb7, 0xda, 0xbf, 0x6c, 0xc1, 0xe0, 0xbc, 0xeb, 0xd5, 0x5d, 0x6f, 0x0b, 0x7d, 0x0a, 0x86, 0xe8, - 0xd9, 0x54, 0x77, 0x22, 0x47, 0xec, 0x7b, 0xef, 0xd7, 0xd6, 0x96, 0x3a, 0x2a, 0x66, 0x5b, 0x3b, - 0x5b, 0x14, 0x10, 0xce, 0x52, 0x6a, 0xba, 0xda, 0xae, 0xde, 0xfc, 0x34, 0xa9, 0x45, 0x6b, 0x24, - 0x72, 0xe2, 0xcf, 0x89, 0x61, 0x58, 0x71, 0x45, 0x57, 0x60, 0x20, 0x72, 0x82, 0x2d, 0x12, 0x89, - 0x0d, 0x30, 0x73, 0xa3, 0xe2, 0x25, 0x31, 0x5d, 0x91, 0xc4, 0xab, 0x91, 0xf8, 0x58, 0xd8, 0x60, - 0x45, 0xb1, 0x60, 0x61, 0xff, 0xef, 0x41, 0x38, 0xb9, 0x50, 0x5d, 0xc9, 0x99, 0x57, 0xe7, 0x60, - 0xa0, 0x1e, 0xb8, 0xbb, 0x24, 0x10, 0xfd, 0xac, 0xb8, 0x2c, 0x32, 0x28, 0x16, 0x58, 0xf4, 0x12, - 0x8c, 0xf0, 0x03, 0xe9, 0xb2, 0xe3, 0xd5, 0x1b, 0xb2, 0x8b, 0x8f, 0x09, 0xea, 0x91, 0xeb, 0x1a, - 0x0e, 0x1b, 0x94, 0x87, 0x9c, 0x54, 0xe7, 0x12, 0x8b, 0x31, 0xef, 0xb0, 0xfb, 0xbc, 0x05, 0x13, - 0xbc, 0x9a, 0xb9, 0x28, 0x0a, 0xdc, 0x9b, 0xed, 0x88, 0x84, 0xd3, 0xfd, 0x6c, 0xa7, 0x5b, 0xc8, - 0xea, 0xad, 0xdc, 0x1e, 0x98, 0xbd, 0x9e, 0xe0, 0xc2, 0x37, 0xc1, 0x69, 0x51, 0xef, 0x44, 0x12, - 0x8d, 0x53, 0xd5, 0xa2, 0xef, 0xb5, 0x60, 0xa6, 0xe6, 0x7b, 0x51, 0xe0, 0x37, 0x1a, 0x24, 0xa8, - 0xb4, 0x6f, 0x36, 0xdc, 0x70, 0x9b, 0xcf, 0x53, 0x4c, 0x36, 0xd9, 0x4e, 0x90, 0x33, 0x86, 0x8a, - 0x48, 0x8c, 0xe1, 0x99, 0xbb, 0xfb, 0xe5, 0x99, 0x85, 0x5c, 0x56, 0xb8, 0x43, 0x35, 0x68, 0x07, - 0x10, 0x3d, 0x4a, 0xab, 0x91, 0xb3, 0x45, 0xe2, 0xca, 0x07, 0x7b, 0xaf, 0xfc, 0xc4, 0xdd, 0xfd, - 0x32, 0x5a, 0x4f, 0xb1, 0xc0, 0x19, 0x6c, 0xd1, 0xdb, 0x70, 0x8c, 0x42, 0x53, 0xdf, 0x3a, 0xd4, - 0x7b, 0x75, 0xd3, 0x77, 0xf7, 0xcb, 0xc7, 0xd6, 0x33, 0x98, 0xe0, 0x4c, 0xd6, 0xe8, 0xbb, 0x2d, - 0x38, 0x19, 0x7f, 0xfe, 0xd2, 0xed, 0x96, 0xe3, 0xd5, 0xe3, 0x8a, 0x4b, 0xbd, 0x57, 0x4c, 0xf7, - 0xe4, 0x93, 0x0b, 0x79, 0x9c, 0x70, 0x7e, 0x25, 0xc8, 0x83, 0x29, 0xda, 0xb4, 0x64, 0xdd, 0xd0, - 0x7b, 0xdd, 0x0f, 0xdd, 0xdd, 0x2f, 0x4f, 0xad, 0xa7, 0x79, 0xe0, 0x2c, 0xc6, 0x33, 0x0b, 0x70, - 0x3c, 0x73, 0x76, 0xa2, 0x09, 0x28, 0xee, 0x10, 0x2e, 0x75, 0x95, 0x30, 0xfd, 0x89, 0x8e, 0x41, - 0xff, 0xae, 0xd3, 0x68, 0x8b, 0x85, 0x89, 0xf9, 0x9f, 0x97, 0x0b, 0x2f, 0x59, 0xf6, 0xbf, 0x2a, - 0xc2, 0xf8, 0x42, 0x75, 0xe5, 0x9e, 0x56, 0xbd, 0x7e, 0xec, 0x15, 0x3a, 0x1e, 0x7b, 0xf1, 0x21, - 0x5a, 0xcc, 0x3d, 0x44, 0xbf, 0x2b, 0x63, 0xc9, 0xf6, 0xb1, 0x25, 0xfb, 0xa1, 0x9c, 0x25, 0x7b, - 0x9f, 0x17, 0xea, 0x6e, 0xce, 0xac, 0xed, 0x67, 0x03, 0x98, 0x29, 0x21, 0xad, 0xfa, 0x35, 0xa7, - 0x91, 0xdc, 0x6a, 0x0f, 0x39, 0x75, 0xef, 0xcf, 0x38, 0xd6, 0x60, 0x64, 0xc1, 0x69, 0x39, 0x37, - 0xdd, 0x86, 0x1b, 0xb9, 0x24, 0x44, 0x4f, 0x40, 0xd1, 0xa9, 0xd7, 0x99, 0x74, 0x57, 0x9a, 0x3f, - 0x7e, 0x77, 0xbf, 0x5c, 0x9c, 0xab, 0x53, 0x31, 0x03, 0x14, 0xd5, 0x1e, 0xa6, 0x14, 0xe8, 0x29, - 0xe8, 0xab, 0x07, 0x7e, 0x6b, 0xba, 0xc0, 0x28, 0xe9, 0x2a, 0xef, 0x5b, 0x0c, 0xfc, 0x56, 0x82, - 0x94, 0xd1, 0xd8, 0xbf, 0x59, 0x80, 0x53, 0x0b, 0xa4, 0xb5, 0xbd, 0x5c, 0xcd, 0x39, 0x2f, 0xce, - 0xc3, 0x50, 0xd3, 0xf7, 0xdc, 0xc8, 0x0f, 0x42, 0x51, 0x35, 0x9b, 0x11, 0x6b, 0x02, 0x86, 0x15, - 0x16, 0x9d, 0x85, 0xbe, 0x56, 0x2c, 0xc4, 0x8e, 0x48, 0x01, 0x98, 0x89, 0xaf, 0x0c, 0x43, 0x29, - 0xda, 0x21, 0x09, 0xc4, 0x8c, 0x51, 0x14, 0xd7, 0x42, 0x12, 0x60, 0x86, 0x89, 0x25, 0x01, 0x2a, - 0x23, 0x88, 0x13, 0x21, 0x21, 0x09, 0x50, 0x0c, 0xd6, 0xa8, 0x50, 0x05, 0x4a, 0x61, 0x62, 0x64, - 0x7b, 0x5a, 0x9a, 0xa3, 0x4c, 0x54, 0x50, 0x23, 0x19, 0x33, 0x31, 0x4e, 0xb0, 0x81, 0xae, 0xa2, - 0xc2, 0xd7, 0x0a, 0x80, 0x78, 0x17, 0x7e, 0x8b, 0x75, 0xdc, 0xb5, 0x74, 0xc7, 0xf5, 0xbe, 0x24, - 0xee, 0x57, 0xef, 0xfd, 0x0f, 0x0b, 0x4e, 0x2d, 0xb8, 0x5e, 0x9d, 0x04, 0x39, 0x13, 0xf0, 0xc1, - 0xdc, 0x9d, 0x0f, 0x27, 0xa4, 0x18, 0x53, 0xac, 0xef, 0x3e, 0x4c, 0x31, 0xfb, 0x2f, 0x2c, 0x40, - 0xfc, 0xb3, 0xdf, 0x75, 0x1f, 0x7b, 0x2d, 0xfd, 0xb1, 0xf7, 0x61, 0x5a, 0xd8, 0xff, 0xd0, 0x82, - 0xe1, 0x85, 0x86, 0xe3, 0x36, 0xc5, 0xa7, 0x2e, 0xc0, 0xa4, 0x54, 0x14, 0x31, 0xb0, 0x26, 0xfb, - 0xd3, 0xcd, 0x6d, 0x12, 0x27, 0x91, 0x38, 0x4d, 0x8f, 0x3e, 0x0e, 0x27, 0x0d, 0xe0, 0x06, 0x69, - 0xb6, 0x1a, 0x4e, 0xa4, 0xdf, 0x0a, 0xd8, 0xe9, 0x8f, 0xf3, 0x88, 0x70, 0x7e, 0x79, 0x7b, 0x15, - 0xc6, 0x16, 0x1a, 0x2e, 0xf1, 0xa2, 0x95, 0xca, 0x82, 0xef, 0x6d, 0xba, 0x5b, 0xe8, 0x65, 0x18, - 0x8b, 0xdc, 0x26, 0xf1, 0xdb, 0x51, 0x95, 0xd4, 0x7c, 0x8f, 0xdd, 0xb5, 0xad, 0xf3, 0xfd, 0xf3, - 0xe8, 0xee, 0x7e, 0x79, 0x6c, 0xc3, 0xc0, 0xe0, 0x04, 0xa5, 0xfd, 0x53, 0x74, 0xa7, 0x6d, 0xb4, - 0xc3, 0x88, 0x04, 0x1b, 0x41, 0x3b, 0x8c, 0xe6, 0xdb, 0x54, 0x5a, 0xae, 0x04, 0x3e, 0xed, 0x40, - 0xd7, 0xf7, 0xd0, 0x29, 0x43, 0x81, 0x30, 0x24, 0x95, 0x07, 0x42, 0x51, 0x30, 0x0b, 0x10, 0xba, - 0x5b, 0x1e, 0x09, 0xb4, 0x4f, 0x1b, 0x63, 0x8b, 0x5b, 0x41, 0xb1, 0x46, 0x81, 0x1a, 0x30, 0xda, - 0x70, 0x6e, 0x92, 0x46, 0x95, 0x34, 0x48, 0x2d, 0xf2, 0x03, 0xa1, 0x02, 0x79, 0xbe, 0xb7, 0x9b, - 0xcb, 0xaa, 0x5e, 0x74, 0x7e, 0xf2, 0xee, 0x7e, 0x79, 0xd4, 0x00, 0x61, 0x93, 0x39, 0xdd, 0xec, - 0xfc, 0x16, 0xfd, 0x0a, 0xa7, 0xa1, 0x5f, 0x97, 0xaf, 0x0a, 0x18, 0x56, 0x58, 0xb5, 0xd9, 0xf5, - 0xe5, 0x6d, 0x76, 0xf6, 0x1f, 0xd1, 0xa5, 0xe1, 0x37, 0x5b, 0xbe, 0x47, 0xbc, 0x68, 0xc1, 0xf7, - 0xea, 0x5c, 0x79, 0xf5, 0x32, 0xf4, 0x45, 0x74, 0xaa, 0xf3, 0xee, 0x39, 0x27, 0x0b, 0xd2, 0x09, - 0x7e, 0xb0, 0x5f, 0x3e, 0x91, 0x2e, 0xc1, 0x96, 0x00, 0x2b, 0x83, 0x3e, 0x04, 0x03, 0x61, 0xe4, - 0x44, 0xed, 0x50, 0x74, 0xdc, 0x23, 0x72, 0xa1, 0x54, 0x19, 0xf4, 0x60, 0xbf, 0x3c, 0xae, 0x8a, - 0x71, 0x10, 0x16, 0x05, 0xd0, 0x93, 0x30, 0xd8, 0x24, 0x61, 0xe8, 0x6c, 0x49, 0x41, 0x67, 0x5c, - 0x94, 0x1d, 0x5c, 0xe3, 0x60, 0x2c, 0xf1, 0xe8, 0x51, 0xe8, 0x27, 0x41, 0xe0, 0x07, 0xe2, 0xdb, - 0x46, 0x05, 0x61, 0xff, 0x12, 0x05, 0x62, 0x8e, 0xb3, 0xff, 0xad, 0x05, 0xe3, 0xaa, 0xad, 0xbc, - 0xae, 0x23, 0xb8, 0x60, 0xbe, 0x09, 0x50, 0x93, 0x1f, 0x18, 0x32, 0xc1, 0x60, 0xf8, 0xb9, 0x73, - 0x99, 0x32, 0x58, 0xaa, 0x1b, 0x63, 0xce, 0x0a, 0x14, 0x62, 0x8d, 0x9b, 0xfd, 0x6b, 0x16, 0x4c, - 0x25, 0xbe, 0x68, 0xd5, 0x0d, 0x23, 0xf4, 0x56, 0xea, 0xab, 0x66, 0x7b, 0x9c, 0x7c, 0x6e, 0xc8, - 0xbf, 0x49, 0xed, 0x52, 0x12, 0xa2, 0x7d, 0xd1, 0x65, 0xe8, 0x77, 0x23, 0xd2, 0x94, 0x1f, 0xf3, - 0x68, 0xc7, 0x8f, 0xe1, 0xad, 0x8a, 0x47, 0x64, 0x85, 0x96, 0xc4, 0x9c, 0x81, 0xfd, 0x9b, 0x45, - 0x28, 0xf1, 0xf5, 0xbd, 0xe6, 0xb4, 0x8e, 0x60, 0x2c, 0x9e, 0x86, 0x92, 0xdb, 0x6c, 0xb6, 0x23, - 0xe7, 0xa6, 0x38, 0xa9, 0x87, 0xf8, 0xae, 0xb9, 0x22, 0x81, 0x38, 0xc6, 0xa3, 0x15, 0xe8, 0x63, - 0x4d, 0xe1, 0x5f, 0xf9, 0x44, 0xf6, 0x57, 0x8a, 0xb6, 0xcf, 0x2e, 0x3a, 0x91, 0xc3, 0x85, 0x64, - 0xb5, 0xae, 0x28, 0x08, 0x33, 0x16, 0xc8, 0x01, 0xb8, 0xe9, 0x7a, 0x4e, 0xb0, 0x47, 0x61, 0xd3, - 0x45, 0xc6, 0xf0, 0xd9, 0xce, 0x0c, 0xe7, 0x15, 0x3d, 0x67, 0xab, 0x3e, 0x2c, 0x46, 0x60, 0x8d, - 0xe9, 0xcc, 0x07, 0xa1, 0xa4, 0x88, 0x0f, 0x23, 0xeb, 0xce, 0x7c, 0x18, 0xc6, 0x13, 0x75, 0x75, - 0x2b, 0x3e, 0xa2, 0x8b, 0xca, 0xbf, 0xc2, 0xb6, 0x0c, 0xd1, 0xea, 0x25, 0x6f, 0x57, 0x1c, 0x31, - 0x77, 0xe0, 0x58, 0x23, 0xe3, 0x90, 0x12, 0xe3, 0xda, 0xfb, 0xa1, 0x76, 0x4a, 0x7c, 0xf6, 0xb1, - 0x2c, 0x2c, 0xce, 0xac, 0xc3, 0xd8, 0x11, 0x0b, 0x9d, 0x76, 0x44, 0xba, 0xdf, 0x1d, 0x53, 0x8d, - 0xbf, 0x42, 0xf6, 0xd4, 0xa6, 0xfa, 0xcd, 0x6c, 0xfe, 0x69, 0xde, 0xfb, 0x7c, 0xbb, 0x1c, 0x16, - 0x0c, 0x8a, 0x57, 0xc8, 0x1e, 0x1f, 0x0a, 0xfd, 0xeb, 0x8a, 0x1d, 0xbf, 0xee, 0x2b, 0x16, 0x8c, - 0xaa, 0xaf, 0x3b, 0x82, 0x7d, 0x61, 0xde, 0xdc, 0x17, 0x4e, 0x77, 0x9c, 0xe0, 0x39, 0x3b, 0xc2, - 0xd7, 0x0a, 0x70, 0x52, 0xd1, 0xd0, 0x6b, 0x1f, 0xff, 0x23, 0x66, 0xd5, 0x05, 0x28, 0x79, 0x4a, - 0x01, 0x6a, 0x99, 0x9a, 0xc7, 0x58, 0xfd, 0x19, 0xd3, 0xd0, 0x23, 0xcf, 0x8b, 0x0f, 0xed, 0x11, - 0xdd, 0x32, 0x20, 0x0e, 0xf7, 0x79, 0x28, 0xb6, 0xdd, 0xba, 0x38, 0x60, 0xde, 0x2f, 0x7b, 0xfb, - 0xda, 0xca, 0xe2, 0xc1, 0x7e, 0xf9, 0x91, 0x3c, 0xab, 0x14, 0x3d, 0xd9, 0xc2, 0xd9, 0x6b, 0x2b, - 0x8b, 0x98, 0x16, 0x46, 0x73, 0x30, 0x2e, 0x45, 0x99, 0xeb, 0x54, 0x92, 0xf6, 0x3d, 0x71, 0x0e, - 0x29, 0xf5, 0x3e, 0x36, 0xd1, 0x38, 0x49, 0x8f, 0x16, 0x61, 0x62, 0xa7, 0x7d, 0x93, 0x34, 0x48, - 0xc4, 0x3f, 0xf8, 0x0a, 0xe1, 0xca, 0xef, 0x52, 0x7c, 0xe9, 0xbe, 0x92, 0xc0, 0xe3, 0x54, 0x09, - 0xfb, 0xaf, 0xd9, 0x79, 0x20, 0x7a, 0x4f, 0x93, 0x6f, 0xbe, 0x99, 0xd3, 0xb9, 0x97, 0x59, 0x71, - 0x85, 0xec, 0x6d, 0xf8, 0x54, 0x0e, 0xc9, 0x9e, 0x15, 0xc6, 0x9c, 0xef, 0xeb, 0x38, 0xe7, 0x7f, - 0xa1, 0x00, 0xc7, 0x55, 0x0f, 0x18, 0xf2, 0xfd, 0xb7, 0x7a, 0x1f, 0x5c, 0x84, 0xe1, 0x3a, 0xd9, - 0x74, 0xda, 0x8d, 0x48, 0x59, 0x62, 0xfa, 0xb9, 0x35, 0x6e, 0x31, 0x06, 0x63, 0x9d, 0xe6, 0x10, - 0xdd, 0xf6, 0x73, 0xa3, 0xec, 0x20, 0x8e, 0x1c, 0x3a, 0xc7, 0xd5, 0xaa, 0xb1, 0x72, 0x57, 0xcd, - 0xa3, 0xd0, 0xef, 0x36, 0xa9, 0x60, 0x56, 0x30, 0xe5, 0xad, 0x15, 0x0a, 0xc4, 0x1c, 0x87, 0x1e, - 0x87, 0xc1, 0x9a, 0xdf, 0x6c, 0x3a, 0x5e, 0x9d, 0x1d, 0x79, 0xa5, 0xf9, 0x61, 0x2a, 0xbb, 0x2d, - 0x70, 0x10, 0x96, 0x38, 0x2a, 0x7c, 0x3b, 0xc1, 0x16, 0x57, 0x4f, 0x09, 0xe1, 0x7b, 0x2e, 0xd8, - 0x0a, 0x31, 0x83, 0xd2, 0xdb, 0xf5, 0x2d, 0x3f, 0xd8, 0x71, 0xbd, 0xad, 0x45, 0x37, 0x10, 0x4b, - 0x42, 0x9d, 0x85, 0x37, 0x14, 0x06, 0x6b, 0x54, 0x68, 0x19, 0xfa, 0x5b, 0x7e, 0x10, 0x85, 0xd3, - 0x03, 0xac, 0xbb, 0x1f, 0xc9, 0xd9, 0x88, 0xf8, 0xd7, 0x56, 0xfc, 0x20, 0x8a, 0x3f, 0x80, 0xfe, - 0x0b, 0x31, 0x2f, 0x8e, 0x56, 0x61, 0x90, 0x78, 0xbb, 0xcb, 0x81, 0xdf, 0x9c, 0x9e, 0xca, 0xe7, - 0xb4, 0xc4, 0x49, 0xf8, 0x34, 0x8b, 0x65, 0x54, 0x01, 0xc6, 0x92, 0x05, 0xfa, 0x10, 0x14, 0x89, - 0xb7, 0x3b, 0x3d, 0xc8, 0x38, 0xcd, 0xe4, 0x70, 0xba, 0xee, 0x04, 0xf1, 0x9e, 0xbf, 0xe4, 0xed, - 0x62, 0x5a, 0x06, 0x7d, 0x0c, 0x4a, 0x72, 0xc3, 0x08, 0x85, 0xde, 0x37, 0x73, 0xc2, 0xca, 0x6d, - 0x06, 0x93, 0xb7, 0xdb, 0x6e, 0x40, 0x9a, 0xc4, 0x8b, 0xc2, 0x78, 0x87, 0x94, 0xd8, 0x10, 0xc7, - 0xdc, 0x50, 0x0d, 0x46, 0x02, 0x12, 0xba, 0x77, 0x48, 0xc5, 0x6f, 0xb8, 0xb5, 0xbd, 0xe9, 0x87, - 0x58, 0xf3, 0x9e, 0xec, 0xd8, 0x65, 0x58, 0x2b, 0x10, 0xdb, 0x25, 0x74, 0x28, 0x36, 0x98, 0xa2, - 0x37, 0x60, 0x34, 0x20, 0x61, 0xe4, 0x04, 0x91, 0xa8, 0x65, 0x5a, 0xd9, 0x11, 0x47, 0xb1, 0x8e, - 0xe0, 0xd7, 0x89, 0xb8, 0x9a, 0x18, 0x83, 0x4d, 0x0e, 0xe8, 0x63, 0xd2, 0x48, 0xb2, 0xe6, 0xb7, - 0xbd, 0x28, 0x9c, 0x2e, 0xb1, 0x76, 0x67, 0x9a, 0xaf, 0xaf, 0xc7, 0x74, 0x49, 0x2b, 0x0a, 0x2f, - 0x8c, 0x0d, 0x56, 0xe8, 0x13, 0x30, 0xca, 0xff, 0x73, 0x23, 0x70, 0x38, 0x7d, 0x9c, 0xf1, 0x3e, - 0x9b, 0xcf, 0x9b, 0x13, 0xce, 0x1f, 0x17, 0xcc, 0x47, 0x75, 0x68, 0x88, 0x4d, 0x6e, 0x08, 0xc3, - 0x68, 0xc3, 0xdd, 0x25, 0x1e, 0x09, 0xc3, 0x4a, 0xe0, 0xdf, 0x24, 0x42, 0xa7, 0x7d, 0x32, 0xdb, - 0x68, 0xec, 0xdf, 0x24, 0xe2, 0x12, 0xa8, 0x97, 0xc1, 0x26, 0x0b, 0x74, 0x0d, 0xc6, 0x02, 0xe2, - 0xd4, 0xdd, 0x98, 0xe9, 0x70, 0x37, 0xa6, 0xec, 0xe2, 0x8c, 0x8d, 0x42, 0x38, 0xc1, 0x04, 0x5d, - 0x85, 0x11, 0xd6, 0xe7, 0xed, 0x16, 0x67, 0x7a, 0xa2, 0x1b, 0x53, 0xe6, 0x73, 0x50, 0xd5, 0x8a, - 0x60, 0x83, 0x01, 0x7a, 0x1d, 0x4a, 0x0d, 0x77, 0x93, 0xd4, 0xf6, 0x6a, 0x0d, 0x32, 0x3d, 0xc2, - 0xb8, 0x65, 0x6e, 0x86, 0xab, 0x92, 0x88, 0xcb, 0xe7, 0xea, 0x2f, 0x8e, 0x8b, 0xa3, 0xeb, 0x70, - 0x22, 0x22, 0x41, 0xd3, 0xf5, 0x1c, 0xba, 0x89, 0x89, 0x2b, 0x21, 0xb3, 0xe5, 0x8f, 0xb2, 0xd9, - 0x75, 0x46, 0x8c, 0xc6, 0x89, 0x8d, 0x4c, 0x2a, 0x9c, 0x53, 0x1a, 0xdd, 0x86, 0xe9, 0x0c, 0x0c, - 0x9f, 0xb7, 0xc7, 0x18, 0xe7, 0x57, 0x05, 0xe7, 0xe9, 0x8d, 0x1c, 0xba, 0x83, 0x0e, 0x38, 0x9c, - 0xcb, 0x1d, 0x5d, 0x85, 0x71, 0xb6, 0x73, 0x56, 0xda, 0x8d, 0x86, 0xa8, 0x70, 0x8c, 0x55, 0xf8, - 0xb8, 0x94, 0x23, 0x56, 0x4c, 0xf4, 0xc1, 0x7e, 0x19, 0xe2, 0x7f, 0x38, 0x59, 0x1a, 0xdd, 0x64, - 0x66, 0xe3, 0x76, 0xe0, 0x46, 0x7b, 0x74, 0x55, 0x91, 0xdb, 0xd1, 0xf4, 0x78, 0x47, 0x15, 0x9a, - 0x4e, 0xaa, 0x6c, 0xcb, 0x3a, 0x10, 0x27, 0x19, 0xd2, 0xa3, 0x20, 0x8c, 0xea, 0xae, 0x37, 0x3d, - 0xc1, 0xef, 0x53, 0x72, 0x27, 0xad, 0x52, 0x20, 0xe6, 0x38, 0x66, 0x32, 0xa6, 0x3f, 0xae, 0xd2, - 0x13, 0x77, 0x92, 0x11, 0xc6, 0x26, 0x63, 0x89, 0xc0, 0x31, 0x0d, 0x15, 0x82, 0xa3, 0x68, 0x6f, - 0x1a, 0x31, 0x52, 0xb5, 0x21, 0x6e, 0x6c, 0x7c, 0x0c, 0x53, 0xb8, 0x7d, 0x13, 0xc6, 0xd4, 0x36, - 0xc1, 0xfa, 0x04, 0x95, 0xa1, 0x9f, 0x89, 0x7d, 0x42, 0xe1, 0x5b, 0xa2, 0x4d, 0x60, 0x22, 0x21, - 0xe6, 0x70, 0xd6, 0x04, 0xf7, 0x0e, 0x99, 0xdf, 0x8b, 0x08, 0xd7, 0x45, 0x14, 0xb5, 0x26, 0x48, - 0x04, 0x8e, 0x69, 0xec, 0xff, 0xc3, 0xc5, 0xe7, 0xf8, 0x94, 0xe8, 0xe1, 0x5c, 0x7c, 0x06, 0x86, - 0xb6, 0xfd, 0x30, 0xa2, 0xd4, 0xac, 0x8e, 0xfe, 0x58, 0x60, 0xbe, 0x2c, 0xe0, 0x58, 0x51, 0xa0, - 0x57, 0x60, 0xb4, 0xa6, 0x57, 0x20, 0x0e, 0x75, 0xb5, 0x8d, 0x18, 0xb5, 0x63, 0x93, 0x16, 0xbd, - 0x04, 0x43, 0xcc, 0x0d, 0xaa, 0xe6, 0x37, 0x84, 0xb4, 0x29, 0x25, 0x93, 0xa1, 0x8a, 0x80, 0x1f, - 0x68, 0xbf, 0xb1, 0xa2, 0x46, 0xe7, 0x60, 0x80, 0x36, 0x61, 0xa5, 0x22, 0x8e, 0x53, 0xa5, 0xbb, - 0xbc, 0xcc, 0xa0, 0x58, 0x60, 0xed, 0x5f, 0xb3, 0x98, 0x2c, 0x95, 0xde, 0xf3, 0xd1, 0x65, 0x76, - 0x68, 0xb0, 0x13, 0x44, 0xd3, 0x1d, 0x3e, 0xa6, 0x9d, 0x04, 0x0a, 0x77, 0x90, 0xf8, 0x8f, 0x8d, - 0x92, 0xe8, 0xcd, 0xe4, 0xc9, 0xc0, 0x05, 0x8a, 0x17, 0x64, 0x17, 0x24, 0x4f, 0x87, 0x87, 0xe3, - 0x23, 0x8e, 0xb6, 0xa7, 0xd3, 0x11, 0x61, 0xff, 0x8d, 0x82, 0x36, 0x4b, 0xaa, 0x91, 0x13, 0x11, - 0x54, 0x81, 0xc1, 0x5b, 0x8e, 0x1b, 0xb9, 0xde, 0x96, 0x90, 0xfb, 0x3a, 0x1f, 0x74, 0xac, 0xd0, - 0x0d, 0x5e, 0x80, 0x4b, 0x2f, 0xe2, 0x0f, 0x96, 0x6c, 0x28, 0xc7, 0xa0, 0xed, 0x79, 0x94, 0x63, - 0xa1, 0x57, 0x8e, 0x98, 0x17, 0xe0, 0x1c, 0xc5, 0x1f, 0x2c, 0xd9, 0xa0, 0xb7, 0x00, 0xe4, 0x0e, - 0x41, 0xea, 0x42, 0x77, 0xf8, 0x4c, 0x77, 0xa6, 0x1b, 0xaa, 0x0c, 0x57, 0x4e, 0xc6, 0xff, 0xb1, - 0xc6, 0xcf, 0x8e, 0xb4, 0x31, 0xd5, 0x1b, 0x83, 0x3e, 0x4e, 0x97, 0xa8, 0x13, 0x44, 0xa4, 0x3e, - 0x17, 0x89, 0xce, 0x79, 0xaa, 0xb7, 0xcb, 0xe1, 0x86, 0xdb, 0x24, 0xfa, 0x72, 0x16, 0x4c, 0x70, - 0xcc, 0xcf, 0xfe, 0xa5, 0x22, 0x4c, 0xe7, 0x35, 0x97, 0x2e, 0x1a, 0x72, 0xdb, 0x8d, 0x16, 0xa8, - 0x58, 0x6b, 0x99, 0x8b, 0x66, 0x49, 0xc0, 0xb1, 0xa2, 0xa0, 0xb3, 0x37, 0x74, 0xb7, 0xe4, 0xdd, - 0xbe, 0x3f, 0x9e, 0xbd, 0x55, 0x06, 0xc5, 0x02, 0x4b, 0xe9, 0x02, 0xe2, 0x84, 0xc2, 0x3f, 0x4f, - 0x9b, 0xe5, 0x98, 0x41, 0xb1, 0xc0, 0xea, 0x5a, 0xc6, 0xbe, 0x2e, 0x5a, 0x46, 0xa3, 0x8b, 0xfa, - 0xef, 0x6f, 0x17, 0xa1, 0x4f, 0x02, 0x6c, 0xba, 0x9e, 0x1b, 0x6e, 0x33, 0xee, 0x03, 0x87, 0xe6, - 0xae, 0x84, 0xe2, 0x65, 0xc5, 0x05, 0x6b, 0x1c, 0xd1, 0x8b, 0x30, 0xac, 0x36, 0x90, 0x95, 0x45, - 0xe6, 0xac, 0xa0, 0x39, 0x7f, 0xc5, 0xbb, 0xe9, 0x22, 0xd6, 0xe9, 0xec, 0x4f, 0x27, 0xe7, 0x8b, - 0x58, 0x01, 0x5a, 0xff, 0x5a, 0xbd, 0xf6, 0x6f, 0xa1, 0x73, 0xff, 0xda, 0xdf, 0x18, 0x80, 0x71, - 0xa3, 0xb2, 0x76, 0xd8, 0xc3, 0x9e, 0x7b, 0x89, 0x1e, 0x40, 0x4e, 0x44, 0xc4, 0xfa, 0xb3, 0xbb, - 0x2f, 0x15, 0xfd, 0x90, 0xa2, 0x2b, 0x80, 0x97, 0x47, 0x9f, 0x84, 0x52, 0xc3, 0x09, 0x99, 0xc6, - 0x92, 0x88, 0x75, 0xd7, 0x0b, 0xb3, 0xf8, 0x42, 0xe8, 0x84, 0x91, 0x76, 0xea, 0x73, 0xde, 0x31, - 0x4b, 0x7a, 0x52, 0x52, 0xf9, 0x4a, 0x3a, 0x80, 0xaa, 0x46, 0x50, 0x21, 0x6c, 0x0f, 0x73, 0x1c, - 0x7a, 0x89, 0x6d, 0xad, 0x74, 0x56, 0x2c, 0x50, 0x69, 0x94, 0x4d, 0xb3, 0x7e, 0x43, 0xc8, 0x56, - 0x38, 0x6c, 0x50, 0xc6, 0x77, 0xb2, 0x81, 0x0e, 0x77, 0xb2, 0x27, 0x61, 0x90, 0xfd, 0x50, 0x33, - 0x40, 0x8d, 0xc6, 0x0a, 0x07, 0x63, 0x89, 0x4f, 0x4e, 0x98, 0xa1, 0xde, 0x26, 0x0c, 0xbd, 0xf5, - 0x89, 0x49, 0xcd, 0x1c, 0x45, 0x86, 0xf8, 0x2e, 0x27, 0xa6, 0x3c, 0x96, 0x38, 0xf4, 0xd3, 0x16, - 0x20, 0xa7, 0x41, 0x6f, 0xcb, 0x14, 0xac, 0x2e, 0x37, 0xc0, 0x44, 0xed, 0x57, 0xba, 0x76, 0x7b, - 0x3b, 0x9c, 0x9d, 0x4b, 0x95, 0xe6, 0x9a, 0xd2, 0x97, 0x45, 0x13, 0x51, 0x9a, 0x40, 0x3f, 0x8c, - 0x56, 0xdd, 0x30, 0xfa, 0xec, 0x1f, 0x27, 0x0e, 0xa7, 0x8c, 0x26, 0xa1, 0x6b, 0xfa, 0xe5, 0x6b, - 0xf8, 0x90, 0x97, 0xaf, 0xd1, 0xbc, 0x8b, 0xd7, 0x4c, 0x1b, 0x1e, 0xca, 0xf9, 0x82, 0x0c, 0xfd, - 0xeb, 0xa2, 0xae, 0x7f, 0xed, 0xa2, 0xb5, 0x9b, 0x95, 0x75, 0xcc, 0xbe, 0xd1, 0x76, 0xbc, 0xc8, - 0x8d, 0xf6, 0x74, 0x7d, 0xed, 0x53, 0x30, 0xb6, 0xe8, 0x90, 0xa6, 0xef, 0x2d, 0x79, 0xf5, 0x96, - 0xef, 0x7a, 0x11, 0x9a, 0x86, 0x3e, 0x26, 0x7c, 0xf0, 0xad, 0xb7, 0x8f, 0xf6, 0x1e, 0x66, 0x10, - 0x7b, 0x0b, 0x8e, 0x2f, 0xfa, 0xb7, 0xbc, 0x5b, 0x4e, 0x50, 0x9f, 0xab, 0xac, 0x68, 0xfa, 0xa4, - 0x75, 0xa9, 0xcf, 0xb0, 0xf2, 0x6f, 0x8b, 0x5a, 0x49, 0x7e, 0x1d, 0x5a, 0x76, 0x1b, 0x24, 0x47, - 0xeb, 0xf7, 0xb7, 0x0b, 0x46, 0x4d, 0x31, 0xbd, 0xb2, 0x59, 0x59, 0xb9, 0x06, 0xfa, 0x37, 0x60, - 0x68, 0xd3, 0x25, 0x8d, 0x3a, 0x26, 0x9b, 0xa2, 0x77, 0x9e, 0xc8, 0x77, 0xe1, 0x5b, 0xa6, 0x94, - 0xca, 0xb8, 0xc6, 0xb4, 0x21, 0xcb, 0xa2, 0x30, 0x56, 0x6c, 0xd0, 0x0e, 0x4c, 0xc8, 0x3e, 0x94, - 0x58, 0xb1, 0x1f, 0x3c, 0xd9, 0x69, 0xe0, 0x4d, 0xe6, 0xc7, 0xee, 0xee, 0x97, 0x27, 0x70, 0x82, - 0x0d, 0x4e, 0x31, 0x46, 0xa7, 0xa0, 0xaf, 0x49, 0x4f, 0xbe, 0x3e, 0xd6, 0xfd, 0x4c, 0xfd, 0xc1, - 0x34, 0x39, 0x0c, 0x6a, 0xff, 0xa8, 0x05, 0x0f, 0xa5, 0x7a, 0x46, 0x68, 0xb4, 0xee, 0xf3, 0x28, - 0x24, 0x35, 0x4c, 0x85, 0xee, 0x1a, 0x26, 0xfb, 0x1f, 0x58, 0x70, 0x6c, 0xa9, 0xd9, 0x8a, 0xf6, - 0x16, 0x5d, 0xd3, 0x9a, 0xfe, 0x41, 0x18, 0x68, 0x92, 0xba, 0xdb, 0x6e, 0x8a, 0x91, 0x2b, 0xcb, - 0xd3, 0x61, 0x8d, 0x41, 0x0f, 0xf6, 0xcb, 0xa3, 0xd5, 0xc8, 0x0f, 0x9c, 0x2d, 0xc2, 0x01, 0x58, - 0x90, 0xb3, 0x33, 0xd6, 0xbd, 0x43, 0x56, 0xdd, 0xa6, 0x1b, 0xdd, 0xdb, 0x6c, 0x17, 0x86, 0x70, - 0xc9, 0x04, 0xc7, 0xfc, 0xec, 0xaf, 0x5b, 0x30, 0x2e, 0xe7, 0xfd, 0x5c, 0xbd, 0x1e, 0x90, 0x30, - 0x44, 0x33, 0x50, 0x70, 0x5b, 0xa2, 0x95, 0x20, 0x5a, 0x59, 0x58, 0xa9, 0xe0, 0x82, 0xdb, 0x92, - 0xe2, 0x3c, 0x3b, 0x80, 0x8a, 0xa6, 0x4f, 0xc0, 0x65, 0x01, 0xc7, 0x8a, 0x02, 0x9d, 0x87, 0x21, - 0xcf, 0xaf, 0x73, 0x89, 0x58, 0xd8, 0x58, 0x29, 0xe5, 0xba, 0x80, 0x61, 0x85, 0x45, 0x15, 0x28, - 0x71, 0x8f, 0xd1, 0x78, 0xd2, 0xf6, 0xe4, 0x77, 0xca, 0xbe, 0x6c, 0x43, 0x96, 0xc4, 0x31, 0x13, - 0xfb, 0x37, 0x2c, 0x18, 0x91, 0x5f, 0xd6, 0xe3, 0x5d, 0x85, 0x2e, 0xad, 0xf8, 0x9e, 0x12, 0x2f, - 0x2d, 0x7a, 0xd7, 0x60, 0x18, 0xe3, 0x8a, 0x51, 0x3c, 0xd4, 0x15, 0xe3, 0x22, 0x0c, 0x3b, 0xad, - 0x56, 0xc5, 0xbc, 0x9f, 0xb0, 0xa9, 0x34, 0x17, 0x83, 0xb1, 0x4e, 0x63, 0xff, 0x48, 0x01, 0xc6, - 0xe4, 0x17, 0x54, 0xdb, 0x37, 0x43, 0x12, 0xa1, 0x0d, 0x28, 0x39, 0x7c, 0x94, 0x88, 0x9c, 0xe4, - 0x8f, 0x66, 0xeb, 0xcd, 0x8c, 0x21, 0x8d, 0x05, 0xad, 0x39, 0x59, 0x1a, 0xc7, 0x8c, 0x50, 0x03, - 0x26, 0x3d, 0x3f, 0x62, 0x87, 0xae, 0xc2, 0x77, 0x32, 0x65, 0x26, 0xb9, 0x9f, 0x14, 0xdc, 0x27, - 0xd7, 0x93, 0x5c, 0x70, 0x9a, 0x31, 0x5a, 0x92, 0xba, 0xc8, 0x62, 0xbe, 0x12, 0x49, 0x1f, 0xb8, - 0x6c, 0x55, 0xa4, 0xfd, 0xab, 0x16, 0x94, 0x24, 0xd9, 0x51, 0x58, 0xad, 0xd7, 0x60, 0x30, 0x64, - 0x83, 0x20, 0xbb, 0xc6, 0xee, 0xd4, 0x70, 0x3e, 0x5e, 0xb1, 0x2c, 0xc1, 0xff, 0x87, 0x58, 0xf2, - 0x60, 0xa6, 0x28, 0xd5, 0xfc, 0x77, 0x89, 0x29, 0x4a, 0xb5, 0x27, 0xe7, 0x50, 0xfa, 0x53, 0xd6, - 0x66, 0x4d, 0xb7, 0x4b, 0x45, 0xde, 0x56, 0x40, 0x36, 0xdd, 0xdb, 0x49, 0x91, 0xb7, 0xc2, 0xa0, - 0x58, 0x60, 0xd1, 0x5b, 0x30, 0x52, 0x93, 0x36, 0x88, 0x78, 0x85, 0x9f, 0xeb, 0x68, 0x0f, 0x53, - 0xa6, 0x53, 0xae, 0x43, 0x5b, 0xd0, 0xca, 0x63, 0x83, 0x9b, 0xe9, 0x11, 0x55, 0xec, 0xe6, 0x11, - 0x15, 0xf3, 0xcd, 0xf7, 0x0f, 0xfa, 0x31, 0x0b, 0x06, 0xb8, 0xee, 0xb9, 0x37, 0xd5, 0xbf, 0x66, - 0x49, 0x8e, 0xfb, 0xee, 0x3a, 0x05, 0x0a, 0x49, 0x03, 0xad, 0x41, 0x89, 0xfd, 0x60, 0xba, 0xf3, - 0x62, 0xfe, 0x83, 0x25, 0x5e, 0xab, 0xde, 0xc0, 0xeb, 0xb2, 0x18, 0x8e, 0x39, 0xd8, 0x3f, 0x5c, - 0xa4, 0xbb, 0x5b, 0x4c, 0x6a, 0x1c, 0xfa, 0xd6, 0x83, 0x3b, 0xf4, 0x0b, 0x0f, 0xea, 0xd0, 0xdf, - 0x82, 0xf1, 0x9a, 0x66, 0x77, 0x8e, 0x47, 0xf2, 0x7c, 0xc7, 0x49, 0xa2, 0x99, 0xa8, 0xb9, 0x76, - 0x6e, 0xc1, 0x64, 0x82, 0x93, 0x5c, 0xd1, 0xc7, 0x61, 0x84, 0x8f, 0xb3, 0xa8, 0x85, 0x3b, 0x95, - 0x3d, 0x9e, 0x3f, 0x5f, 0xf4, 0x2a, 0xb8, 0x36, 0x57, 0x2b, 0x8e, 0x0d, 0x66, 0xf6, 0x5f, 0x5a, - 0x80, 0x96, 0x5a, 0xdb, 0xa4, 0x49, 0x02, 0xa7, 0x11, 0x9b, 0x8f, 0xbe, 0x60, 0xc1, 0x34, 0x49, - 0x81, 0x17, 0xfc, 0x66, 0x53, 0x5c, 0x16, 0x73, 0xf4, 0x19, 0x4b, 0x39, 0x65, 0xd4, 0x8b, 0xae, - 0xe9, 0x3c, 0x0a, 0x9c, 0x5b, 0x1f, 0x5a, 0x83, 0x29, 0x7e, 0x4a, 0x2a, 0x84, 0xe6, 0xc5, 0xf5, - 0xb0, 0x60, 0x3c, 0xb5, 0x91, 0x26, 0xc1, 0x59, 0xe5, 0xec, 0x5f, 0x1d, 0x85, 0xdc, 0x56, 0xbc, - 0x67, 0x37, 0x7b, 0xcf, 0x6e, 0xf6, 0x9e, 0xdd, 0xec, 0x3d, 0xbb, 0xd9, 0x7b, 0x76, 0xb3, 0xf7, - 0xec, 0x66, 0xef, 0x52, 0xbb, 0xd9, 0xdf, 0xb4, 0xe0, 0xb8, 0x3a, 0xbe, 0x8c, 0x0b, 0xfb, 0x67, - 0x60, 0x8a, 0x2f, 0x37, 0xc3, 0x19, 0x5b, 0x1c, 0xd7, 0x17, 0x33, 0x67, 0x6e, 0xe2, 0xd1, 0x80, - 0x51, 0x90, 0xbf, 0xbe, 0xca, 0x40, 0xe0, 0xac, 0x6a, 0xec, 0x5f, 0x1a, 0x82, 0xfe, 0xa5, 0x5d, - 0xe2, 0x45, 0x47, 0x70, 0xb5, 0xa9, 0xc1, 0x98, 0xeb, 0xed, 0xfa, 0x8d, 0x5d, 0x52, 0xe7, 0xf8, - 0xc3, 0xdc, 0xc0, 0x4f, 0x08, 0xd6, 0x63, 0x2b, 0x06, 0x0b, 0x9c, 0x60, 0xf9, 0x20, 0xac, 0x0f, - 0x97, 0x60, 0x80, 0x1f, 0x3e, 0xc2, 0xf4, 0x90, 0xb9, 0x67, 0xb3, 0x4e, 0x14, 0x47, 0x6a, 0x6c, - 0x19, 0xe1, 0x87, 0x9b, 0x28, 0x8e, 0x3e, 0x0d, 0x63, 0x9b, 0x6e, 0x10, 0x46, 0x1b, 0x6e, 0x93, - 0x1e, 0x0d, 0xcd, 0xd6, 0x3d, 0x58, 0x1b, 0x54, 0x3f, 0x2c, 0x1b, 0x9c, 0x70, 0x82, 0x33, 0xda, - 0x82, 0xd1, 0x86, 0xa3, 0x57, 0x35, 0x78, 0xe8, 0xaa, 0xd4, 0xe9, 0xb0, 0xaa, 0x33, 0xc2, 0x26, - 0x5f, 0xba, 0x9c, 0x6a, 0x4c, 0x61, 0x3e, 0xc4, 0xd4, 0x19, 0x6a, 0x39, 0x71, 0x4d, 0x39, 0xc7, - 0x51, 0x01, 0x8d, 0x39, 0xb2, 0x97, 0x4c, 0x01, 0x4d, 0x73, 0x57, 0xff, 0x14, 0x94, 0x08, 0xed, - 0x42, 0xca, 0x58, 0x1c, 0x30, 0x17, 0x7a, 0x6b, 0xeb, 0x9a, 0x5b, 0x0b, 0x7c, 0xd3, 0xce, 0xb3, - 0x24, 0x39, 0xe1, 0x98, 0x29, 0x5a, 0x80, 0x81, 0x90, 0x04, 0xae, 0xd2, 0x25, 0x77, 0x18, 0x46, - 0x46, 0xc6, 0x9f, 0xf7, 0xf1, 0xdf, 0x58, 0x14, 0xa5, 0xd3, 0xcb, 0x61, 0xaa, 0x58, 0x76, 0x18, - 0x68, 0xd3, 0x6b, 0x8e, 0x41, 0xb1, 0xc0, 0xa2, 0xd7, 0x61, 0x30, 0x20, 0x0d, 0x66, 0x48, 0x1c, - 0xed, 0x7d, 0x92, 0x73, 0xbb, 0x24, 0x2f, 0x87, 0x25, 0x03, 0x74, 0x05, 0x50, 0x40, 0xa8, 0x80, - 0xe7, 0x7a, 0x5b, 0xca, 0xbd, 0x5b, 0x6c, 0xb4, 0x4a, 0x90, 0xc6, 0x31, 0x85, 0x7c, 0xd9, 0x89, - 0x33, 0x8a, 0xa1, 0x4b, 0x30, 0xa9, 0xa0, 0x2b, 0x5e, 0x18, 0x39, 0x74, 0x83, 0x1b, 0x67, 0xbc, - 0x94, 0x7e, 0x05, 0x27, 0x09, 0x70, 0xba, 0x8c, 0xfd, 0xb3, 0x16, 0xf0, 0x7e, 0x3e, 0x02, 0xad, - 0xc2, 0x6b, 0xa6, 0x56, 0xe1, 0x64, 0xee, 0xc8, 0xe5, 0x68, 0x14, 0x7e, 0xd6, 0x82, 0x61, 0x6d, - 0x64, 0xe3, 0x39, 0x6b, 0x75, 0x98, 0xb3, 0x6d, 0x98, 0xa0, 0x33, 0xfd, 0xea, 0xcd, 0x90, 0x04, - 0xbb, 0xa4, 0xce, 0x26, 0x66, 0xe1, 0xde, 0x26, 0xa6, 0x72, 0x25, 0x5d, 0x4d, 0x30, 0xc4, 0xa9, - 0x2a, 0xec, 0x4f, 0xc9, 0xa6, 0x2a, 0xcf, 0xdb, 0x9a, 0x1a, 0xf3, 0x84, 0xe7, 0xad, 0x1a, 0x55, - 0x1c, 0xd3, 0xd0, 0xa5, 0xb6, 0xed, 0x87, 0x51, 0xd2, 0xf3, 0xf6, 0xb2, 0x1f, 0x46, 0x98, 0x61, - 0xec, 0xe7, 0x01, 0x96, 0x6e, 0x93, 0x1a, 0x9f, 0xb1, 0xfa, 0xa5, 0xc7, 0xca, 0xbf, 0xf4, 0xd8, - 0xbf, 0x6f, 0xc1, 0xd8, 0xf2, 0x82, 0x71, 0x72, 0xcd, 0x02, 0xf0, 0x9b, 0xda, 0x8d, 0x1b, 0xeb, - 0xd2, 0xfd, 0x83, 0x5b, 0xc0, 0x15, 0x14, 0x6b, 0x14, 0xe8, 0x24, 0x14, 0x1b, 0x6d, 0x4f, 0xa8, - 0x3d, 0x07, 0xe9, 0xf1, 0xb8, 0xda, 0xf6, 0x30, 0x85, 0x69, 0xaf, 0xba, 0x8a, 0x3d, 0xbf, 0xea, - 0xea, 0x1a, 0xcd, 0x05, 0x95, 0xa1, 0xff, 0xd6, 0x2d, 0xb7, 0xce, 0xdf, 0xcc, 0x0b, 0xd7, 0x94, - 0x1b, 0x37, 0x56, 0x16, 0x43, 0xcc, 0xe1, 0xf6, 0x17, 0x8b, 0x30, 0xb3, 0xdc, 0x20, 0xb7, 0xdf, - 0x61, 0xdc, 0x80, 0x5e, 0xdf, 0xa4, 0x1d, 0x4e, 0x81, 0x74, 0xd8, 0x77, 0x87, 0xdd, 0xfb, 0x63, - 0x13, 0x06, 0xb9, 0xe3, 0xa9, 0x8c, 0x22, 0x90, 0x69, 0xee, 0xcb, 0xef, 0x90, 0x59, 0xee, 0xc0, - 0x2a, 0xcc, 0x7d, 0xea, 0xc0, 0x14, 0x50, 0x2c, 0x99, 0xcf, 0xbc, 0x0c, 0x23, 0x3a, 0xe5, 0xa1, - 0x5e, 0x00, 0x7f, 0x4f, 0x11, 0x26, 0x68, 0x0b, 0x1e, 0xe8, 0x40, 0x5c, 0x4b, 0x0f, 0xc4, 0xfd, - 0x7e, 0x05, 0xda, 0x7d, 0x34, 0xde, 0x4a, 0x8e, 0xc6, 0xc5, 0xbc, 0xd1, 0x38, 0xea, 0x31, 0xf8, - 0x5e, 0x0b, 0xa6, 0x96, 0x1b, 0x7e, 0x6d, 0x27, 0xf1, 0x52, 0xf3, 0x45, 0x18, 0xa6, 0xdb, 0x71, - 0x68, 0x04, 0x2d, 0x31, 0xc2, 0xd8, 0x08, 0x14, 0xd6, 0xe9, 0xb4, 0x62, 0xd7, 0xae, 0xad, 0x2c, - 0x66, 0x45, 0xbf, 0x11, 0x28, 0xac, 0xd3, 0xd9, 0xbf, 0x6b, 0xc1, 0xe9, 0x4b, 0x0b, 0x4b, 0xf1, - 0x54, 0x4c, 0x05, 0xe0, 0x39, 0x07, 0x03, 0xad, 0xba, 0xd6, 0x94, 0x58, 0x2d, 0xbc, 0xc8, 0x5a, - 0x21, 0xb0, 0xef, 0x96, 0xe0, 0x52, 0xd7, 0x00, 0x2e, 0xe1, 0xca, 0x82, 0xd8, 0x77, 0xa5, 0x15, - 0xc8, 0xca, 0xb5, 0x02, 0x3d, 0x0e, 0x83, 0xf4, 0x5c, 0x70, 0x6b, 0xb2, 0xdd, 0xdc, 0xa0, 0xcf, - 0x41, 0x58, 0xe2, 0xec, 0x9f, 0xb1, 0x60, 0xea, 0x92, 0x1b, 0xd1, 0x43, 0x3b, 0x19, 0x61, 0x86, - 0x9e, 0xda, 0xa1, 0x1b, 0xf9, 0xc1, 0x5e, 0x32, 0xc2, 0x0c, 0x56, 0x18, 0xac, 0x51, 0xf1, 0x0f, - 0xda, 0x75, 0xd9, 0x4b, 0x8a, 0x82, 0x69, 0x77, 0xc3, 0x02, 0x8e, 0x15, 0x05, 0xed, 0xaf, 0xba, - 0x1b, 0x30, 0x95, 0xe5, 0x9e, 0xd8, 0xb8, 0x55, 0x7f, 0x2d, 0x4a, 0x04, 0x8e, 0x69, 0xec, 0x3f, - 0xb7, 0xa0, 0x7c, 0x89, 0xbf, 0x07, 0xdd, 0x0c, 0x73, 0x36, 0xdd, 0xe7, 0xa1, 0x44, 0xa4, 0x81, - 0x40, 0xbe, 0x8d, 0x95, 0x82, 0xa8, 0xb2, 0x1c, 0xf0, 0x40, 0x37, 0x8a, 0xae, 0x87, 0xe7, 0xe4, - 0x87, 0x7b, 0x0f, 0xbc, 0x0c, 0x88, 0xe8, 0x75, 0xe9, 0x91, 0x7f, 0x58, 0x08, 0x91, 0xa5, 0x14, - 0x16, 0x67, 0x94, 0xb0, 0x7f, 0xd4, 0x82, 0xe3, 0xea, 0x83, 0xdf, 0x75, 0x9f, 0x69, 0x7f, 0xb5, - 0x00, 0xa3, 0x97, 0x37, 0x36, 0x2a, 0x97, 0x48, 0xa4, 0xcd, 0xca, 0xce, 0x66, 0x7f, 0xac, 0x59, - 0x2f, 0x3b, 0xdd, 0x11, 0xdb, 0x91, 0xdb, 0x98, 0xe5, 0x01, 0xe4, 0x66, 0x57, 0xbc, 0xe8, 0x6a, - 0x50, 0x8d, 0x02, 0xd7, 0xdb, 0xca, 0x9c, 0xe9, 0x52, 0x66, 0x29, 0xe6, 0xc9, 0x2c, 0xe8, 0x79, - 0x18, 0x60, 0x11, 0xec, 0xe4, 0x20, 0x3c, 0xac, 0xae, 0x58, 0x0c, 0x7a, 0xb0, 0x5f, 0x2e, 0x5d, - 0xc3, 0x2b, 0xfc, 0x0f, 0x16, 0xa4, 0xe8, 0x1a, 0x0c, 0x6f, 0x47, 0x51, 0xeb, 0x32, 0x71, 0xea, - 0x24, 0x90, 0xbb, 0xec, 0x99, 0xac, 0x5d, 0x96, 0x76, 0x02, 0x27, 0x8b, 0x37, 0xa6, 0x18, 0x16, - 0x62, 0x9d, 0x8f, 0x5d, 0x05, 0x88, 0x71, 0xf7, 0xc9, 0x70, 0x63, 0x6f, 0x40, 0x89, 0x7e, 0xee, - 0x5c, 0xc3, 0x75, 0x3a, 0x9b, 0xc6, 0x9f, 0x86, 0x92, 0x34, 0x7c, 0x87, 0x22, 0xdc, 0x05, 0x3b, - 0x91, 0xa4, 0x5d, 0x3c, 0xc4, 0x31, 0xde, 0x7e, 0x0c, 0x84, 0x6f, 0x69, 0x27, 0x96, 0xf6, 0x26, - 0x1c, 0x63, 0x4e, 0xb2, 0x4e, 0xb4, 0x6d, 0xcc, 0xd1, 0xee, 0x93, 0xe1, 0x19, 0x71, 0xaf, 0xe3, - 0x5f, 0x36, 0xad, 0x3d, 0x4e, 0x1e, 0x91, 0x1c, 0xe3, 0x3b, 0x9e, 0xfd, 0x67, 0x7d, 0xf0, 0xf0, - 0x4a, 0x35, 0x3f, 0x4e, 0xd3, 0x4b, 0x30, 0xc2, 0xc5, 0x45, 0x3a, 0x35, 0x9c, 0x86, 0xa8, 0x57, - 0x69, 0x40, 0x37, 0x34, 0x1c, 0x36, 0x28, 0xd1, 0x69, 0x28, 0xba, 0x6f, 0x7b, 0xc9, 0xa7, 0x7b, - 0x2b, 0x6f, 0xac, 0x63, 0x0a, 0xa7, 0x68, 0x2a, 0x79, 0xf2, 0x2d, 0x5d, 0xa1, 0x95, 0xf4, 0xf9, - 0x1a, 0x8c, 0xb9, 0x61, 0x2d, 0x74, 0x57, 0x3c, 0xba, 0x4e, 0xb5, 0x95, 0xae, 0x74, 0x0e, 0xb4, - 0xd1, 0x0a, 0x8b, 0x13, 0xd4, 0xda, 0xf9, 0xd2, 0xdf, 0xb3, 0xf4, 0xda, 0x35, 0x4a, 0x04, 0xdd, - 0xfe, 0x5b, 0xec, 0xeb, 0x42, 0xa6, 0x82, 0x17, 0xdb, 0x3f, 0xff, 0xe0, 0x10, 0x4b, 0x1c, 0xbd, - 0xd0, 0xd5, 0xb6, 0x9d, 0xd6, 0x5c, 0x3b, 0xda, 0x5e, 0x74, 0xc3, 0x9a, 0xbf, 0x4b, 0x82, 0x3d, - 0x76, 0x17, 0x1f, 0x8a, 0x2f, 0x74, 0x0a, 0xb1, 0x70, 0x79, 0xae, 0x42, 0x29, 0x71, 0xba, 0x0c, - 0x9a, 0x83, 0x71, 0x09, 0xac, 0x92, 0x90, 0x1d, 0x01, 0xc3, 0x8c, 0x8d, 0x7a, 0x4c, 0x27, 0xc0, - 0x8a, 0x49, 0x92, 0xde, 0x14, 0x70, 0xe1, 0x7e, 0x08, 0xb8, 0x1f, 0x84, 0x51, 0xd7, 0x73, 0x23, - 0xd7, 0x89, 0x7c, 0x6e, 0x3f, 0xe2, 0xd7, 0x6e, 0xa6, 0x60, 0x5e, 0xd1, 0x11, 0xd8, 0xa4, 0xb3, - 0xff, 0x73, 0x1f, 0x4c, 0xb2, 0x61, 0x7b, 0x6f, 0x86, 0x7d, 0x3b, 0xcd, 0xb0, 0x6b, 0xe9, 0x19, - 0x76, 0x3f, 0x24, 0xf7, 0x7b, 0x9e, 0x66, 0x9f, 0x86, 0x92, 0x7a, 0x3f, 0x28, 0x1f, 0x10, 0x5b, - 0x39, 0x0f, 0x88, 0xbb, 0x9f, 0xde, 0xd2, 0x25, 0xad, 0x98, 0xe9, 0x92, 0xf6, 0x65, 0x0b, 0x62, - 0xc3, 0x02, 0x7a, 0x03, 0x4a, 0x2d, 0x9f, 0x79, 0xb8, 0x06, 0xd2, 0x6d, 0xfc, 0xb1, 0x8e, 0x96, - 0x09, 0x1e, 0xaa, 0x2e, 0xe0, 0xbd, 0x50, 0x91, 0x45, 0x71, 0xcc, 0x05, 0x5d, 0x81, 0xc1, 0x56, - 0x40, 0xaa, 0x11, 0x8b, 0xa3, 0xd4, 0x3b, 0x43, 0x3e, 0x6b, 0x78, 0x41, 0x2c, 0x39, 0xd8, 0x3f, - 0x5f, 0x80, 0x89, 0x24, 0x29, 0x7a, 0x15, 0xfa, 0xc8, 0x6d, 0x52, 0x13, 0xed, 0xcd, 0x3c, 0x8a, - 0x63, 0xd5, 0x04, 0xef, 0x00, 0xfa, 0x1f, 0xb3, 0x52, 0xe8, 0x32, 0x0c, 0xd2, 0x73, 0xf8, 0x92, - 0x8a, 0x19, 0xf8, 0x48, 0xde, 0x59, 0xae, 0x04, 0x1a, 0xde, 0x38, 0x01, 0xc2, 0xb2, 0x38, 0xf3, - 0x03, 0xab, 0xb5, 0xaa, 0xf4, 0x8a, 0x13, 0x75, 0xba, 0x89, 0x6f, 0x2c, 0x54, 0x38, 0x91, 0xe0, - 0xc6, 0xfd, 0xc0, 0x24, 0x10, 0xc7, 0x4c, 0xd0, 0x47, 0xa0, 0x3f, 0x6c, 0x10, 0xd2, 0x12, 0x86, - 0xfe, 0x4c, 0xe5, 0x62, 0x95, 0x12, 0x08, 0x4e, 0x4c, 0x19, 0xc1, 0x00, 0x98, 0x17, 0xb4, 0x7f, - 0xc1, 0x02, 0xe0, 0x8e, 0x73, 0x8e, 0xb7, 0x45, 0x8e, 0x40, 0x1f, 0xbf, 0x08, 0x7d, 0x61, 0x8b, - 0xd4, 0x3a, 0xb9, 0x6f, 0xc7, 0xed, 0xa9, 0xb6, 0x48, 0x2d, 0x9e, 0xb3, 0xf4, 0x1f, 0x66, 0xa5, - 0xed, 0xef, 0x03, 0x18, 0x8b, 0xc9, 0x56, 0x22, 0xd2, 0x44, 0xcf, 0x1a, 0x61, 0x4b, 0x4e, 0x26, - 0xc2, 0x96, 0x94, 0x18, 0xb5, 0xa6, 0xfa, 0xfd, 0x34, 0x14, 0x9b, 0xce, 0x6d, 0xa1, 0xdb, 0x7b, - 0xba, 0x73, 0x33, 0x28, 0xff, 0xd9, 0x35, 0xe7, 0x36, 0xbf, 0xfe, 0x3e, 0x2d, 0xd7, 0xd8, 0x9a, - 0x73, 0xbb, 0xab, 0x8b, 0x31, 0xad, 0x84, 0xd5, 0xe5, 0x7a, 0xc2, 0x27, 0xac, 0xa7, 0xba, 0x5c, - 0x2f, 0x59, 0x97, 0xeb, 0xf5, 0x50, 0x97, 0xeb, 0xa1, 0x3b, 0x30, 0x28, 0x5c, 0x36, 0x45, 0x04, - 0xb8, 0x0b, 0x3d, 0xd4, 0x27, 0x3c, 0x3e, 0x79, 0x9d, 0x17, 0xe4, 0xf5, 0x5e, 0x40, 0xbb, 0xd6, - 0x2b, 0x2b, 0x44, 0x7f, 0xcb, 0x82, 0x31, 0xf1, 0x1b, 0x93, 0xb7, 0xdb, 0x24, 0x8c, 0x84, 0xf8, - 0xfb, 0x81, 0xde, 0xdb, 0x20, 0x0a, 0xf2, 0xa6, 0x7c, 0x40, 0x9e, 0x54, 0x26, 0xb2, 0x6b, 0x8b, - 0x12, 0xad, 0x40, 0x3f, 0x6f, 0xc1, 0xb1, 0xa6, 0x73, 0x9b, 0xd7, 0xc8, 0x61, 0xd8, 0x89, 0x5c, - 0x5f, 0xb8, 0x3e, 0xbc, 0xda, 0xdb, 0xf0, 0xa7, 0x8a, 0xf3, 0x46, 0x4a, 0x3b, 0xe7, 0xb1, 0x2c, - 0x92, 0xae, 0x4d, 0xcd, 0x6c, 0xd7, 0xcc, 0x26, 0x0c, 0xc9, 0xf9, 0xf6, 0x20, 0xfd, 0xc3, 0x59, - 0x3d, 0x62, 0xae, 0x3d, 0xd0, 0x7a, 0x3e, 0x0d, 0x23, 0xfa, 0x1c, 0x7b, 0xa0, 0x75, 0xbd, 0x0d, - 0x53, 0x19, 0x73, 0xe9, 0x81, 0x56, 0x79, 0x0b, 0x4e, 0xe6, 0xce, 0x8f, 0x07, 0xea, 0xdf, 0xff, - 0x55, 0x4b, 0xdf, 0x07, 0x8f, 0xc0, 0x28, 0xb2, 0x60, 0x1a, 0x45, 0xce, 0x74, 0x5e, 0x39, 0x39, - 0x96, 0x91, 0xb7, 0xf4, 0x46, 0xd3, 0x5d, 0x1d, 0xbd, 0x0e, 0x03, 0x0d, 0x0a, 0x91, 0x8e, 0xbf, - 0x76, 0xf7, 0x15, 0x19, 0x8b, 0xa3, 0x0c, 0x1e, 0x62, 0xc1, 0xc1, 0xfe, 0x65, 0x0b, 0xfa, 0x8e, - 0xa0, 0x27, 0xb0, 0xd9, 0x13, 0xcf, 0xe6, 0xb2, 0x16, 0xc1, 0xf0, 0x67, 0xb1, 0x73, 0x6b, 0xe9, - 0x76, 0x44, 0xbc, 0x90, 0x9d, 0xe9, 0x99, 0x1d, 0xb3, 0x6f, 0xc1, 0xd4, 0xaa, 0xef, 0xd4, 0xe7, - 0x9d, 0x86, 0xe3, 0xd5, 0x48, 0xb0, 0xe2, 0x6d, 0x1d, 0xca, 0x6b, 0xbd, 0xd0, 0xd5, 0x6b, 0xfd, - 0x25, 0x18, 0x70, 0x5b, 0x5a, 0x70, 0xef, 0xb3, 0xb4, 0x03, 0x57, 0x2a, 0x22, 0xae, 0x37, 0x32, - 0x2a, 0x67, 0x50, 0x2c, 0xe8, 0xe9, 0xc8, 0x73, 0x77, 0xb1, 0xbe, 0xfc, 0x91, 0xa7, 0x52, 0x7c, - 0x32, 0x04, 0x94, 0xe1, 0xd8, 0xbc, 0x0d, 0x46, 0x15, 0xe2, 0xd5, 0x17, 0x86, 0x41, 0x97, 0x7f, - 0xa9, 0x18, 0xfe, 0x27, 0xb2, 0xa5, 0xeb, 0x54, 0xc7, 0x68, 0xef, 0x99, 0x38, 0x00, 0x4b, 0x46, - 0xf6, 0x4b, 0x90, 0x19, 0xb2, 0xa3, 0xbb, 0xe6, 0xc4, 0xfe, 0x18, 0x4c, 0xb2, 0x92, 0x87, 0xd4, - 0x4a, 0xd8, 0x09, 0x7d, 0x6f, 0x46, 0x9c, 0x56, 0xfb, 0x3f, 0x58, 0x80, 0xd6, 0xfc, 0xba, 0xbb, - 0xb9, 0x27, 0x98, 0xf3, 0xef, 0x7f, 0x1b, 0xca, 0xfc, 0xda, 0x97, 0x8c, 0x65, 0xba, 0xd0, 0x70, - 0xc2, 0x50, 0xd3, 0x35, 0x3f, 0x21, 0xea, 0x2d, 0x6f, 0x74, 0x26, 0xc7, 0xdd, 0xf8, 0xa1, 0x37, - 0x12, 0x81, 0xda, 0x3e, 0x94, 0x0a, 0xd4, 0xf6, 0x44, 0xa6, 0xc7, 0x47, 0xba, 0xf5, 0x32, 0x80, - 0x9b, 0xfd, 0x79, 0x0b, 0xc6, 0xd7, 0x13, 0xb1, 0x39, 0xcf, 0x31, 0xf3, 0x77, 0x86, 0x0d, 0xa5, - 0xca, 0xa0, 0x58, 0x60, 0xef, 0xbb, 0x8e, 0xf1, 0xaf, 0x2d, 0x88, 0x43, 0x04, 0x1d, 0x81, 0x54, - 0xbb, 0x60, 0x48, 0xb5, 0x99, 0x37, 0x04, 0xd5, 0x9c, 0x3c, 0xa1, 0x16, 0x5d, 0x51, 0x63, 0xd2, - 0xe1, 0x72, 0x10, 0xb3, 0xe1, 0xeb, 0x6c, 0xcc, 0x1c, 0x38, 0x35, 0x1a, 0x7f, 0x50, 0x00, 0xa4, - 0x68, 0x7b, 0x0e, 0xee, 0x97, 0x2e, 0x71, 0x7f, 0x82, 0xfb, 0xed, 0x02, 0x62, 0x0e, 0x1c, 0x81, - 0xe3, 0x85, 0x9c, 0xad, 0x2b, 0xb4, 0xaa, 0x87, 0xf3, 0x0e, 0x99, 0x91, 0xaf, 0xfd, 0x56, 0x53, - 0xdc, 0x70, 0x46, 0x0d, 0x9a, 0x63, 0x4e, 0x7f, 0xaf, 0x8e, 0x39, 0x03, 0x5d, 0x9e, 0xad, 0x7e, - 0xc5, 0x82, 0x51, 0xd5, 0x4d, 0xef, 0x92, 0xc7, 0x0d, 0xaa, 0x3d, 0x39, 0xe7, 0x4a, 0x45, 0x6b, - 0x32, 0x3b, 0x6f, 0xbf, 0x83, 0x3d, 0x3f, 0x76, 0x1a, 0xee, 0x1d, 0xa2, 0xa2, 0xe6, 0x96, 0xc5, - 0x73, 0x62, 0x01, 0x3d, 0xd8, 0x2f, 0x8f, 0xaa, 0x7f, 0x3c, 0xea, 0x65, 0x5c, 0xc4, 0xfe, 0x49, - 0xba, 0xd8, 0xcd, 0xa9, 0x88, 0x5e, 0x84, 0xfe, 0xd6, 0xb6, 0x13, 0x92, 0xc4, 0x23, 0xb0, 0xfe, - 0x0a, 0x05, 0x1e, 0xec, 0x97, 0xc7, 0x54, 0x01, 0x06, 0xc1, 0x9c, 0xba, 0xf7, 0x90, 0x89, 0xe9, - 0xc9, 0xd9, 0x35, 0x64, 0xe2, 0x5f, 0x5a, 0xd0, 0xb7, 0x4e, 0x4f, 0xaf, 0x07, 0xbf, 0x05, 0xbc, - 0x66, 0x6c, 0x01, 0xa7, 0xf2, 0x12, 0xb6, 0xe4, 0xae, 0xfe, 0xe5, 0xc4, 0xea, 0x3f, 0x93, 0xcb, - 0xa1, 0xf3, 0xc2, 0x6f, 0xc2, 0x30, 0x4b, 0x03, 0x23, 0x1e, 0xbc, 0x3d, 0x6f, 0x2c, 0xf8, 0x72, - 0x62, 0xc1, 0x8f, 0x6b, 0xa4, 0xda, 0x4a, 0x7f, 0x12, 0x06, 0xc5, 0x0b, 0xaa, 0xe4, 0x2b, 0x6e, - 0x41, 0x8b, 0x25, 0xde, 0xfe, 0xb1, 0x22, 0x18, 0x69, 0x67, 0xd0, 0xaf, 0x5a, 0x30, 0x1b, 0x70, - 0xcf, 0xea, 0xfa, 0x62, 0x3b, 0x70, 0xbd, 0xad, 0x6a, 0x6d, 0x9b, 0xd4, 0xdb, 0x0d, 0xd7, 0xdb, - 0x5a, 0xd9, 0xf2, 0x7c, 0x05, 0x5e, 0xba, 0x4d, 0x6a, 0x6d, 0x66, 0xf5, 0xec, 0x92, 0xe3, 0x46, - 0xbd, 0x50, 0x78, 0xee, 0xee, 0x7e, 0x79, 0x16, 0x1f, 0x8a, 0x37, 0x3e, 0x64, 0x5b, 0xd0, 0xef, - 0x5a, 0x70, 0x81, 0x67, 0x63, 0xe9, 0xbd, 0xfd, 0x1d, 0x94, 0x08, 0x15, 0xc9, 0x2a, 0x66, 0xb2, - 0x41, 0x82, 0xe6, 0xfc, 0x07, 0x45, 0x87, 0x5e, 0xa8, 0x1c, 0xae, 0x2e, 0x7c, 0xd8, 0xc6, 0xd9, - 0xff, 0xac, 0x08, 0xa3, 0x22, 0xb4, 0x9e, 0x38, 0x03, 0x5e, 0x34, 0xa6, 0xc4, 0x23, 0x89, 0x29, - 0x31, 0x69, 0x10, 0xdf, 0x9f, 0xed, 0x3f, 0x84, 0x49, 0xba, 0x39, 0x5f, 0x26, 0x4e, 0x10, 0xdd, - 0x24, 0x0e, 0xf7, 0xb7, 0x2b, 0x1e, 0x7a, 0xf7, 0x57, 0x8a, 0xdf, 0xd5, 0x24, 0x33, 0x9c, 0xe6, - 0xff, 0xed, 0x74, 0xe6, 0x78, 0x30, 0x91, 0x8a, 0x8e, 0xf8, 0x26, 0x94, 0xd4, 0xf3, 0x1f, 0xb1, - 0xe9, 0x74, 0x0e, 0x32, 0x9a, 0xe4, 0xc0, 0xf5, 0x8a, 0xf1, 0xd3, 0xb3, 0x98, 0x9d, 0xfd, 0x8f, - 0x0a, 0x46, 0x85, 0x7c, 0x10, 0xd7, 0x61, 0xc8, 0x09, 0x59, 0xe0, 0xe3, 0x7a, 0x27, 0xd5, 0x6f, - 0xaa, 0x1a, 0xf6, 0x04, 0x6b, 0x4e, 0x94, 0xc4, 0x8a, 0x07, 0xba, 0xcc, 0xbd, 0x1a, 0x77, 0x49, - 0x27, 0xbd, 0x6f, 0x8a, 0x1b, 0x48, 0xbf, 0xc7, 0x5d, 0x82, 0x45, 0x79, 0xf4, 0x09, 0xee, 0x76, - 0x7a, 0xc5, 0xf3, 0x6f, 0x79, 0x97, 0x7c, 0x5f, 0x86, 0x51, 0xe9, 0x8d, 0xe1, 0xa4, 0x74, 0x36, - 0x55, 0xc5, 0xb1, 0xc9, 0xad, 0xb7, 0x70, 0xc3, 0x9f, 0x01, 0x96, 0x7d, 0xc2, 0x7c, 0x6d, 0x1f, - 0x22, 0x02, 0xe3, 0x22, 0x6e, 0xa3, 0x84, 0x89, 0xbe, 0xcb, 0xbc, 0xe1, 0x9a, 0xa5, 0x63, 0x0b, - 0xc5, 0x15, 0x93, 0x05, 0x4e, 0xf2, 0xb4, 0x7f, 0xda, 0x02, 0xf6, 0xf2, 0xf8, 0x08, 0xe4, 0x91, - 0x0f, 0x9b, 0xf2, 0xc8, 0x74, 0x5e, 0x27, 0xe7, 0x88, 0x22, 0x2f, 0xf0, 0x99, 0x55, 0x09, 0xfc, - 0xdb, 0x7b, 0xc2, 0x57, 0xa8, 0xfb, 0xe5, 0xca, 0xfe, 0x4e, 0x7e, 0xc8, 0xa8, 0x88, 0xad, 0x4d, - 0x98, 0xf4, 0xb4, 0xff, 0x74, 0x4b, 0x95, 0x77, 0xc7, 0xc7, 0xba, 0x1d, 0x23, 0x6c, 0xff, 0xd5, - 0x9e, 0xf5, 0x26, 0xd8, 0xe0, 0x34, 0x67, 0xfb, 0xc7, 0x2d, 0x78, 0x48, 0x27, 0xd4, 0x5e, 0x0e, - 0x75, 0xb3, 0xbf, 0x2c, 0xc2, 0x90, 0xdf, 0x22, 0x81, 0x13, 0xf9, 0x81, 0xd8, 0x37, 0xcf, 0xcb, - 0xce, 0xbd, 0x2a, 0xe0, 0x07, 0x22, 0xe7, 0x85, 0xe4, 0x2e, 0xe1, 0x58, 0x95, 0xa4, 0x97, 0x4b, - 0xa6, 0xf4, 0x09, 0xc5, 0x1b, 0x31, 0xb6, 0x0a, 0x98, 0x29, 0x3f, 0xc4, 0x02, 0x63, 0xff, 0x99, - 0xc5, 0xbb, 0x56, 0x6f, 0x3a, 0x7a, 0x1b, 0x26, 0x9a, 0x4e, 0x54, 0xdb, 0x5e, 0xba, 0xdd, 0x0a, - 0xb8, 0x35, 0x4b, 0xf6, 0xd3, 0xd3, 0xdd, 0xfa, 0x49, 0xfb, 0xc8, 0xd8, 0x97, 0x74, 0x2d, 0xc1, - 0x0c, 0xa7, 0xd8, 0xa3, 0x9b, 0x30, 0xcc, 0x60, 0xec, 0xf9, 0x63, 0xd8, 0xe9, 0x70, 0xcc, 0xab, - 0x4d, 0x79, 0x43, 0xac, 0xc5, 0x7c, 0xb0, 0xce, 0xd4, 0xfe, 0x72, 0x91, 0xcf, 0x77, 0x26, 0xcc, - 0x3e, 0x09, 0x83, 0x2d, 0xbf, 0xbe, 0xb0, 0xb2, 0x88, 0xc5, 0x28, 0xa8, 0x8d, 0xb4, 0xc2, 0xc1, - 0x58, 0xe2, 0xd1, 0x79, 0x18, 0x12, 0x3f, 0xa5, 0xf5, 0x91, 0xed, 0x4e, 0x82, 0x2e, 0xc4, 0x0a, - 0x8b, 0x9e, 0x03, 0x68, 0x05, 0xfe, 0xae, 0x5b, 0x67, 0xe1, 0x50, 0x8a, 0xa6, 0x23, 0x53, 0x45, - 0x61, 0xb0, 0x46, 0x85, 0x5e, 0x81, 0xd1, 0xb6, 0x17, 0xf2, 0x03, 0x59, 0x0b, 0x3a, 0xad, 0x5c, - 0x6c, 0xae, 0xe9, 0x48, 0x6c, 0xd2, 0xa2, 0x39, 0x18, 0x88, 0x1c, 0xe6, 0x98, 0xd3, 0x9f, 0xef, - 0x6f, 0xbc, 0x41, 0x29, 0xf4, 0x84, 0x54, 0xb4, 0x00, 0x16, 0x05, 0xd1, 0x9b, 0xf2, 0x25, 0x32, - 0xdf, 0xda, 0x84, 0xa3, 0x7f, 0x6f, 0xdb, 0xa0, 0xf6, 0x0e, 0x59, 0x3c, 0x20, 0x30, 0x78, 0xa1, - 0x97, 0x01, 0xc8, 0xed, 0x88, 0x04, 0x9e, 0xd3, 0x50, 0xee, 0x74, 0xea, 0x64, 0x5c, 0xf4, 0xd7, - 0xfd, 0xe8, 0x5a, 0x48, 0x96, 0x14, 0x05, 0xd6, 0xa8, 0xed, 0xdf, 0x2d, 0x01, 0xc4, 0x92, 0x2b, - 0xba, 0x03, 0x43, 0x35, 0xa7, 0xe5, 0xd4, 0x78, 0x7a, 0xc3, 0x62, 0xde, 0x03, 0xd1, 0xb8, 0xc4, - 0xec, 0x82, 0x20, 0xe7, 0x0a, 0x77, 0x19, 0xb7, 0x77, 0x48, 0x82, 0xbb, 0x2a, 0xd9, 0x55, 0x7d, - 0xe8, 0x73, 0x16, 0x0c, 0x8b, 0xa8, 0x2f, 0x6c, 0x84, 0x0a, 0xf9, 0x36, 0x12, 0xad, 0xfe, 0xb9, - 0xb8, 0x04, 0x6f, 0xc2, 0xf3, 0x72, 0x86, 0x6a, 0x98, 0xae, 0xad, 0xd0, 0x2b, 0x46, 0xef, 0x97, - 0x97, 0xa5, 0xa2, 0xd1, 0x95, 0xea, 0xb2, 0x54, 0x62, 0xbb, 0xa4, 0x7e, 0x4f, 0xba, 0x66, 0xdc, - 0x93, 0xfa, 0xf2, 0x9f, 0x5a, 0x1a, 0x02, 0x5c, 0xb7, 0x2b, 0x12, 0xaa, 0xe8, 0x61, 0x17, 0xfa, - 0xf3, 0xdf, 0x07, 0x6a, 0x37, 0x85, 0x2e, 0x21, 0x17, 0x3e, 0x0d, 0xe3, 0x75, 0xf3, 0x18, 0x14, - 0x33, 0xf1, 0x89, 0x3c, 0xbe, 0x89, 0x53, 0x33, 0x3e, 0xf8, 0x12, 0x08, 0x9c, 0x64, 0x8c, 0x2a, - 0x3c, 0x0a, 0xc7, 0x8a, 0xb7, 0xe9, 0x8b, 0xc7, 0x26, 0x76, 0xee, 0x58, 0xee, 0x85, 0x11, 0x69, - 0x52, 0xca, 0xf8, 0x7c, 0x5b, 0x17, 0x65, 0xb1, 0xe2, 0x82, 0x5e, 0x87, 0x01, 0xf6, 0x40, 0x2c, - 0x9c, 0x1e, 0xca, 0x57, 0x45, 0x9b, 0xe1, 0x08, 0xe3, 0x05, 0xc9, 0xfe, 0x86, 0x58, 0x70, 0x40, - 0x97, 0xe5, 0xf3, 0xcb, 0x70, 0xc5, 0xbb, 0x16, 0x12, 0xf6, 0xfc, 0xb2, 0x34, 0xff, 0x58, 0xfc, - 0xb2, 0x92, 0xc3, 0x33, 0xd3, 0x56, 0x1a, 0x25, 0xa9, 0x1c, 0x21, 0xfe, 0xcb, 0x6c, 0x98, 0x22, - 0x78, 0x52, 0x66, 0xf3, 0xcc, 0x8c, 0x99, 0x71, 0x77, 0x5e, 0x37, 0x59, 0xe0, 0x24, 0x4f, 0x2a, - 0x93, 0xf1, 0x55, 0x2f, 0x9e, 0xab, 0x74, 0xdb, 0x3b, 0xf8, 0x55, 0x94, 0x9d, 0x46, 0x1c, 0x82, - 0x45, 0xf9, 0x99, 0x1d, 0x18, 0x35, 0x56, 0xed, 0x03, 0xb5, 0xbf, 0x78, 0x30, 0x91, 0x5c, 0xa2, - 0x0f, 0xd4, 0xec, 0xf2, 0x27, 0x7d, 0x30, 0x66, 0x4e, 0x29, 0x74, 0x01, 0x4a, 0x82, 0x89, 0xca, - 0x28, 0xa3, 0x56, 0xc9, 0x9a, 0x44, 0xe0, 0x98, 0x86, 0x25, 0x12, 0x62, 0xc5, 0x35, 0xff, 0xe4, - 0x38, 0x91, 0x90, 0xc2, 0x60, 0x8d, 0x8a, 0x5e, 0x2d, 0x6e, 0xfa, 0x7e, 0xa4, 0x0e, 0x24, 0x35, - 0xef, 0xe6, 0x19, 0x14, 0x0b, 0x2c, 0x3d, 0x88, 0x76, 0x48, 0xe0, 0x91, 0x86, 0x19, 0xa0, 0x5c, - 0x1d, 0x44, 0x57, 0x74, 0x24, 0x36, 0x69, 0xe9, 0x71, 0xea, 0x87, 0x6c, 0x22, 0x8b, 0x0b, 0x4c, - 0xec, 0xef, 0x5d, 0xe5, 0x2f, 0xd7, 0x25, 0x1e, 0x7d, 0x0c, 0x1e, 0x52, 0xc1, 0xc0, 0x30, 0x37, - 0x73, 0xc8, 0x1a, 0x07, 0x0c, 0x7d, 0xc3, 0x43, 0x0b, 0xd9, 0x64, 0x38, 0xaf, 0x3c, 0x7a, 0x0d, - 0xc6, 0x84, 0x90, 0x2b, 0x39, 0x0e, 0x9a, 0xce, 0x4b, 0x57, 0x0c, 0x2c, 0x4e, 0x50, 0xcb, 0x10, - 0xeb, 0x4c, 0xce, 0x94, 0x1c, 0x86, 0xd2, 0x21, 0xd6, 0x75, 0x3c, 0x4e, 0x95, 0x40, 0x73, 0x30, - 0xce, 0x65, 0x30, 0x7a, 0xd3, 0x66, 0xe3, 0x20, 0x5e, 0x93, 0xa9, 0x25, 0x75, 0xd5, 0x44, 0xe3, - 0x24, 0x3d, 0x7a, 0x09, 0x46, 0x9c, 0xa0, 0xb6, 0xed, 0x46, 0xa4, 0x16, 0xb5, 0x03, 0xfe, 0xcc, - 0x4c, 0xf3, 0xfe, 0x9a, 0xd3, 0x70, 0xd8, 0xa0, 0xb4, 0xef, 0xc0, 0x54, 0x46, 0x48, 0x0b, 0x3a, - 0x71, 0x9c, 0x96, 0x2b, 0xbf, 0x29, 0xe1, 0x62, 0x3d, 0x57, 0x59, 0x91, 0x5f, 0xa3, 0x51, 0xd1, - 0xd9, 0xc9, 0x42, 0x5f, 0x68, 0xc9, 0x6f, 0xd5, 0xec, 0x5c, 0x96, 0x08, 0x1c, 0xd3, 0xd8, 0xff, - 0xad, 0x00, 0xe3, 0x19, 0xa6, 0x13, 0x96, 0x80, 0x35, 0x21, 0xa6, 0xc7, 0xf9, 0x56, 0xcd, 0x88, - 0xfd, 0x85, 0x43, 0x44, 0xec, 0x2f, 0x76, 0x8b, 0xd8, 0xdf, 0xf7, 0x4e, 0x22, 0xf6, 0x9b, 0x3d, - 0xd6, 0xdf, 0x53, 0x8f, 0x65, 0x44, 0xf9, 0x1f, 0x38, 0x64, 0x94, 0x7f, 0xa3, 0xd3, 0x07, 0x7b, - 0xe8, 0xf4, 0x1f, 0x2e, 0xc0, 0x44, 0xd2, 0xea, 0x72, 0x04, 0x9a, 0xcb, 0xd7, 0x0d, 0xcd, 0xe5, - 0xf9, 0x5e, 0x5e, 0xff, 0xe6, 0x6a, 0x31, 0x71, 0x42, 0x8b, 0xf9, 0x54, 0x4f, 0xdc, 0x3a, 0x6b, - 0x34, 0x7f, 0xa2, 0x00, 0xc7, 0x33, 0x8d, 0x51, 0x47, 0xd0, 0x37, 0x57, 0x8d, 0xbe, 0x79, 0xb6, - 0xe7, 0x97, 0xd1, 0xb9, 0x1d, 0x74, 0x23, 0xd1, 0x41, 0x17, 0x7a, 0x67, 0xd9, 0xb9, 0x97, 0xbe, - 0x5e, 0x84, 0x33, 0x99, 0xe5, 0x62, 0xc5, 0xdf, 0xb2, 0xa1, 0xf8, 0x7b, 0x2e, 0xa1, 0xf8, 0xb3, - 0x3b, 0x97, 0xbe, 0x3f, 0x9a, 0x40, 0xf1, 0x42, 0x98, 0xc5, 0x39, 0xb8, 0x47, 0x2d, 0xa0, 0xf1, - 0x42, 0x58, 0x31, 0xc2, 0x26, 0xdf, 0x6f, 0x27, 0xed, 0xdf, 0x6f, 0x5b, 0x70, 0x32, 0x73, 0x6c, - 0x8e, 0x40, 0xdb, 0xb3, 0x6e, 0x6a, 0x7b, 0x9e, 0xec, 0x79, 0xb6, 0xe6, 0xa8, 0x7f, 0x3e, 0x3f, - 0x90, 0xf3, 0x2d, 0xec, 0x26, 0x7f, 0x15, 0x86, 0x9d, 0x5a, 0x8d, 0x84, 0xe1, 0x9a, 0x5f, 0x57, - 0xc1, 0xbd, 0x9f, 0x65, 0xf7, 0xac, 0x18, 0x7c, 0xb0, 0x5f, 0x9e, 0x49, 0xb2, 0x88, 0xd1, 0x58, - 0xe7, 0x80, 0x3e, 0x01, 0x43, 0xa1, 0xcc, 0xcb, 0xd6, 0x77, 0xef, 0x79, 0xd9, 0x98, 0x92, 0x40, - 0x69, 0x2a, 0x14, 0x4b, 0xf4, 0xff, 0xe8, 0x11, 0x67, 0xd2, 0x52, 0x65, 0x22, 0xfe, 0xc9, 0x3d, - 0xc4, 0x9d, 0x79, 0x0e, 0x60, 0x57, 0x5d, 0x09, 0x92, 0x5a, 0x08, 0xed, 0xb2, 0xa0, 0x51, 0xa1, - 0x8f, 0xc0, 0x44, 0xc8, 0x83, 0x2d, 0xc6, 0xee, 0x03, 0x7c, 0x2e, 0xb2, 0x78, 0x55, 0xd5, 0x04, - 0x0e, 0xa7, 0xa8, 0xd1, 0xb2, 0xac, 0x95, 0x39, 0x8a, 0xf0, 0xe9, 0x79, 0x2e, 0xae, 0x51, 0x38, - 0x8b, 0x1c, 0x4b, 0x0e, 0x02, 0xeb, 0x7e, 0xad, 0x24, 0xfa, 0x04, 0x00, 0x9d, 0x44, 0x42, 0x1b, - 0x31, 0x98, 0xbf, 0x85, 0xd2, 0xbd, 0xa5, 0x9e, 0xe9, 0x3d, 0xcd, 0x9e, 0xf6, 0x2e, 0x2a, 0x26, - 0x58, 0x63, 0x88, 0x1c, 0x18, 0x8d, 0xff, 0xc5, 0x39, 0x92, 0xcf, 0xe7, 0xd6, 0x90, 0x64, 0xce, - 0x54, 0xbf, 0x8b, 0x3a, 0x0b, 0x6c, 0x72, 0x44, 0x1f, 0x87, 0x93, 0xbb, 0xb9, 0x3e, 0x19, 0xa5, - 0x38, 0xed, 0x61, 0xbe, 0x27, 0x46, 0x7e, 0x79, 0xfb, 0x77, 0x00, 0x1e, 0xee, 0xb0, 0xd3, 0xa3, - 0x39, 0xd3, 0x9e, 0xfa, 0x74, 0x52, 0x45, 0x30, 0x93, 0x59, 0xd8, 0xd0, 0x19, 0x24, 0x16, 0x54, - 0xe1, 0x1d, 0x2f, 0xa8, 0x1f, 0xb4, 0x34, 0xe5, 0x0d, 0x77, 0x68, 0xfd, 0xf0, 0x21, 0x4f, 0xb0, - 0xfb, 0xa8, 0xcd, 0xd9, 0xcc, 0x50, 0x89, 0x3c, 0xd7, 0x73, 0x73, 0x7a, 0xd7, 0x91, 0x7c, 0x35, - 0x3b, 0x7c, 0x31, 0xd7, 0x96, 0x5c, 0x3a, 0xec, 0xf7, 0x1f, 0x55, 0x28, 0xe3, 0x3f, 0xb0, 0xe0, - 0x64, 0x0a, 0xcc, 0xdb, 0x40, 0x42, 0x11, 0x61, 0x6b, 0xfd, 0x1d, 0x37, 0x5e, 0x32, 0xe4, 0xdf, - 0x70, 0x59, 0x7c, 0xc3, 0xc9, 0x5c, 0xba, 0x64, 0xd3, 0xbf, 0xf0, 0xc7, 0xe5, 0x29, 0x56, 0x81, - 0x49, 0x88, 0xf3, 0x9b, 0x8e, 0x5a, 0x70, 0xb6, 0xd6, 0x0e, 0x82, 0x78, 0xb2, 0x66, 0x2c, 0x4e, - 0x7e, 0xd7, 0x7b, 0xec, 0xee, 0x7e, 0xf9, 0xec, 0x42, 0x17, 0x5a, 0xdc, 0x95, 0x1b, 0xf2, 0x00, - 0x35, 0x53, 0x9e, 0x4f, 0x22, 0x35, 0x7a, 0xa6, 0xaf, 0x42, 0xda, 0x4f, 0x8a, 0x3f, 0xe1, 0xcc, - 0xf0, 0x9f, 0xca, 0xe0, 0x7c, 0xb4, 0xda, 0x93, 0x6f, 0x4e, 0x6c, 0xea, 0x99, 0x55, 0x38, 0xd3, - 0x79, 0x32, 0x1d, 0xea, 0xf9, 0xf8, 0xef, 0x5b, 0x70, 0xba, 0x63, 0x8c, 0xa2, 0x6f, 0xc1, 0xcb, - 0x82, 0xfd, 0x59, 0x0b, 0x1e, 0xc9, 0x2c, 0x61, 0x38, 0xd9, 0x5d, 0x80, 0x52, 0x2d, 0x91, 0xd8, - 0x37, 0x8e, 0xd6, 0xa1, 0x92, 0xfa, 0xc6, 0x34, 0x86, 0x2f, 0x5d, 0xa1, 0xab, 0x2f, 0xdd, 0x6f, - 0x58, 0x90, 0x3a, 0xea, 0x8f, 0x40, 0xf2, 0x5c, 0x31, 0x25, 0xcf, 0xc7, 0x7a, 0xe9, 0xcd, 0x1c, - 0xa1, 0xf3, 0x2f, 0xc6, 0xe1, 0x44, 0xce, 0xeb, 0xcf, 0x5d, 0x98, 0xdc, 0xaa, 0x11, 0xf3, 0xb9, - 0x7f, 0xa7, 0x30, 0x58, 0x1d, 0x63, 0x03, 0xf0, 0x7c, 0xca, 0x29, 0x12, 0x9c, 0xae, 0x02, 0x7d, - 0xd6, 0x82, 0x63, 0xce, 0xad, 0x70, 0x89, 0xde, 0x20, 0xdc, 0xda, 0x7c, 0xc3, 0xaf, 0xed, 0x50, - 0xc1, 0x4c, 0x2e, 0xab, 0x17, 0x32, 0xb5, 0xba, 0x37, 0xaa, 0x29, 0x7a, 0xa3, 0x7a, 0x96, 0x3d, - 0x3f, 0x8b, 0x0a, 0x67, 0xd6, 0x85, 0xb0, 0xc8, 0x5f, 0xe3, 0x44, 0xdb, 0x9d, 0x02, 0x52, 0x64, - 0x3d, 0xd3, 0xe5, 0x22, 0xb1, 0xc4, 0x60, 0xc5, 0x07, 0x7d, 0x0a, 0x4a, 0x5b, 0xf2, 0xed, 0x79, - 0x86, 0xc8, 0x1d, 0x77, 0x64, 0xe7, 0x17, 0xf9, 0xdc, 0x39, 0x41, 0x11, 0xe1, 0x98, 0x29, 0x7a, - 0x0d, 0x8a, 0xde, 0x66, 0xd8, 0x29, 0x01, 0x7d, 0xc2, 0x0b, 0x95, 0x87, 0x7d, 0x59, 0x5f, 0xae, - 0x62, 0x5a, 0x10, 0x5d, 0x86, 0x62, 0x70, 0xb3, 0x2e, 0x4c, 0x12, 0x99, 0x8b, 0x14, 0xcf, 0x2f, - 0xe6, 0xb4, 0x8a, 0x71, 0xc2, 0xf3, 0x8b, 0x98, 0xb2, 0x40, 0x15, 0xe8, 0x67, 0x4f, 0x26, 0x85, - 0x68, 0x9b, 0x79, 0x95, 0xef, 0xf0, 0xf4, 0x98, 0x3f, 0xc7, 0x62, 0x04, 0x98, 0x33, 0x42, 0x1b, - 0x30, 0x50, 0x63, 0xc9, 0xca, 0x85, 0x2c, 0xfb, 0xfe, 0x4c, 0xe3, 0x43, 0x87, 0x2c, 0xee, 0x42, - 0x17, 0xcf, 0x28, 0xb0, 0xe0, 0xc5, 0xb8, 0x92, 0xd6, 0xf6, 0xa6, 0x3c, 0xb1, 0xb2, 0xb9, 0xb2, - 0xcc, 0xfa, 0x1d, 0xb9, 0x32, 0x0a, 0x2c, 0x78, 0xa1, 0x97, 0xa1, 0xb0, 0x59, 0x13, 0xcf, 0x21, - 0x33, 0xad, 0x10, 0x66, 0xe4, 0x9e, 0xf9, 0x81, 0xbb, 0xfb, 0xe5, 0xc2, 0xf2, 0x02, 0x2e, 0x6c, - 0xd6, 0xd0, 0x3a, 0x0c, 0x6e, 0xf2, 0x58, 0x1f, 0xc2, 0xd0, 0xf0, 0x44, 0x76, 0x18, 0x92, 0x54, - 0x38, 0x10, 0xfe, 0xb4, 0x4e, 0x20, 0xb0, 0x64, 0xc2, 0xd2, 0xa9, 0xa8, 0x98, 0x25, 0x22, 0x64, - 0xe2, 0xec, 0xe1, 0xe2, 0xcc, 0xf0, 0xab, 0x46, 0x1c, 0xf9, 0x04, 0x6b, 0x1c, 0xe9, 0xac, 0x76, - 0xee, 0xb4, 0x03, 0x16, 0x4f, 0x5f, 0xc4, 0xd6, 0xca, 0x9c, 0xd5, 0x73, 0x92, 0xa8, 0xd3, 0xac, - 0x56, 0x44, 0x38, 0x66, 0x8a, 0x76, 0x60, 0x74, 0x37, 0x6c, 0x6d, 0x13, 0xb9, 0xa4, 0x59, 0xa8, - 0xad, 0x1c, 0x69, 0xf6, 0xba, 0x20, 0x74, 0x83, 0xa8, 0xed, 0x34, 0x52, 0xbb, 0x10, 0xbb, 0xd6, - 0x5c, 0xd7, 0x99, 0x61, 0x93, 0x37, 0xed, 0xfe, 0xb7, 0xdb, 0xfe, 0xcd, 0xbd, 0x88, 0x88, 0x48, - 0x87, 0x99, 0xdd, 0xff, 0x06, 0x27, 0x49, 0x77, 0xbf, 0x40, 0x60, 0xc9, 0x04, 0x5d, 0x17, 0xdd, - 0xc3, 0x76, 0xcf, 0x89, 0xfc, 0x30, 0xca, 0x73, 0x92, 0x28, 0xa7, 0x53, 0xd8, 0x6e, 0x19, 0xb3, - 0x62, 0xbb, 0x64, 0x6b, 0xdb, 0x8f, 0x7c, 0x2f, 0xb1, 0x43, 0x4f, 0xe6, 0xef, 0x92, 0x95, 0x0c, - 0xfa, 0xf4, 0x2e, 0x99, 0x45, 0x85, 0x33, 0xeb, 0x42, 0x75, 0x18, 0x6b, 0xf9, 0x41, 0x74, 0xcb, - 0x0f, 0xe4, 0xfc, 0x42, 0x1d, 0x14, 0xa5, 0x06, 0xa5, 0xa8, 0x91, 0x05, 0x11, 0x35, 0x31, 0x38, - 0xc1, 0x13, 0x7d, 0x14, 0x06, 0xc3, 0x9a, 0xd3, 0x20, 0x2b, 0x57, 0xa7, 0xa7, 0xf2, 0x8f, 0x9f, - 0x2a, 0x27, 0xc9, 0x99, 0x5d, 0x3c, 0x54, 0x0b, 0x27, 0xc1, 0x92, 0x1d, 0x5a, 0x86, 0x7e, 0x96, - 0xa6, 0x94, 0x85, 0xe5, 0xcc, 0x89, 0x06, 0x9d, 0x7a, 0xf0, 0xc0, 0xf7, 0x26, 0x06, 0xc6, 0xbc, - 0x38, 0x5d, 0x03, 0x42, 0x53, 0xe0, 0x87, 0xd3, 0xc7, 0xf3, 0xd7, 0x80, 0x50, 0x30, 0x5c, 0xad, - 0x76, 0x5a, 0x03, 0x8a, 0x08, 0xc7, 0x4c, 0xe9, 0xce, 0x4c, 0x77, 0xd3, 0x13, 0x1d, 0x9c, 0xd9, - 0x72, 0xf7, 0x52, 0xb6, 0x33, 0xd3, 0x9d, 0x94, 0xb2, 0xb0, 0x7f, 0x6d, 0x28, 0x2d, 0xb3, 0x30, - 0x0d, 0xd3, 0xff, 0x67, 0xa5, 0x9c, 0x0f, 0x3e, 0xd0, 0xab, 0xc2, 0xfb, 0x3e, 0x5e, 0x5c, 0x3f, - 0x6b, 0xc1, 0x89, 0x56, 0xe6, 0x87, 0x08, 0x01, 0xa0, 0x37, 0xbd, 0x39, 0xff, 0x74, 0x15, 0xc2, - 0x35, 0x1b, 0x8f, 0x73, 0x6a, 0x4a, 0x2a, 0x07, 0x8a, 0xef, 0x58, 0x39, 0xb0, 0x06, 0x43, 0x35, - 0x7e, 0x93, 0x93, 0xa1, 0xc7, 0x7b, 0x0a, 0x40, 0xc8, 0x44, 0x09, 0x71, 0x05, 0xdc, 0xc4, 0x8a, - 0x05, 0xfa, 0x21, 0x0b, 0x4e, 0x27, 0x9b, 0x8e, 0x09, 0x43, 0x8b, 0xb8, 0xaf, 0x5c, 0xad, 0xb5, - 0x2c, 0xbe, 0x3f, 0x25, 0xff, 0x1b, 0xc4, 0x07, 0xdd, 0x08, 0x70, 0xe7, 0xca, 0xd0, 0x62, 0x86, - 0x5e, 0x6d, 0xc0, 0xb4, 0x28, 0xf6, 0xa0, 0x5b, 0x7b, 0x01, 0x46, 0x9a, 0x7e, 0xdb, 0x8b, 0x84, - 0xef, 0x9b, 0xf0, 0x42, 0x62, 0xde, 0x37, 0x6b, 0x1a, 0x1c, 0x1b, 0x54, 0x09, 0x8d, 0xdc, 0xd0, - 0x3d, 0x6b, 0xe4, 0xde, 0x82, 0x11, 0x4f, 0x73, 0xd6, 0xee, 0x74, 0x83, 0x15, 0xda, 0x45, 0x8d, - 0x9a, 0xb7, 0x52, 0x87, 0x60, 0x83, 0x5b, 0x67, 0x6d, 0x19, 0xbc, 0x33, 0x6d, 0xd9, 0x91, 0x5e, - 0x89, 0xed, 0x9f, 0x2b, 0x64, 0xdc, 0x18, 0xb8, 0x56, 0xee, 0x55, 0x53, 0x2b, 0x77, 0x2e, 0xa9, - 0x95, 0x4b, 0x99, 0xaa, 0x0c, 0x85, 0x5c, 0xef, 0xf9, 0xd1, 0x7a, 0x0e, 0x2a, 0xfb, 0x3d, 0x16, - 0x3c, 0xc4, 0x6c, 0x1f, 0xb4, 0x82, 0x77, 0x6c, 0xef, 0x78, 0xf8, 0xee, 0x7e, 0xf9, 0xa1, 0xd5, - 0x6c, 0x76, 0x38, 0xaf, 0x1e, 0xbb, 0x01, 0x67, 0xbb, 0x9d, 0xbb, 0xcc, 0xcb, 0xb3, 0xae, 0x9c, - 0x23, 0x62, 0x2f, 0xcf, 0xfa, 0xca, 0x22, 0x66, 0x98, 0x5e, 0x43, 0xa6, 0xd9, 0xff, 0xc5, 0x82, - 0x62, 0xc5, 0xaf, 0x1f, 0xc1, 0x8d, 0xfe, 0xc3, 0xc6, 0x8d, 0xfe, 0xe1, 0xec, 0x13, 0xbf, 0x9e, - 0x6b, 0xec, 0x5b, 0x4a, 0x18, 0xfb, 0x4e, 0xe7, 0x31, 0xe8, 0x6c, 0xda, 0xfb, 0xc9, 0x22, 0x0c, - 0x57, 0xfc, 0xba, 0x5a, 0x67, 0xff, 0xe2, 0x5e, 0x9e, 0x58, 0xe4, 0x66, 0xbc, 0xd1, 0x38, 0x33, - 0xd7, 0x58, 0xf9, 0xe8, 0xfe, 0x5b, 0xec, 0xa5, 0xc5, 0x0d, 0xe2, 0x6e, 0x6d, 0x47, 0xa4, 0x9e, - 0xfc, 0x9c, 0xa3, 0x7b, 0x69, 0xf1, 0x8d, 0x22, 0x8c, 0x27, 0x6a, 0x47, 0x0d, 0x18, 0x6d, 0xe8, - 0xa6, 0x24, 0x31, 0x4f, 0xef, 0xc9, 0x0a, 0x25, 0x3c, 0xd5, 0x35, 0x10, 0x36, 0x99, 0xa3, 0x59, - 0x00, 0xe5, 0x5b, 0x21, 0xb5, 0xfd, 0xec, 0x5a, 0xa3, 0x9c, 0x2f, 0x42, 0xac, 0x51, 0xa0, 0x17, - 0x61, 0x38, 0xf2, 0x5b, 0x7e, 0xc3, 0xdf, 0xda, 0xbb, 0x42, 0x64, 0x34, 0x3d, 0xe5, 0x7d, 0xbb, - 0x11, 0xa3, 0xb0, 0x4e, 0x87, 0x6e, 0xc3, 0xa4, 0x62, 0x52, 0xbd, 0x0f, 0xe6, 0x35, 0xa6, 0x36, - 0x59, 0x4f, 0x72, 0xc4, 0xe9, 0x4a, 0xd0, 0xcb, 0x30, 0xc6, 0xdc, 0x80, 0x59, 0xf9, 0x2b, 0x64, - 0x4f, 0x46, 0x59, 0x65, 0x12, 0xf6, 0x9a, 0x81, 0xc1, 0x09, 0x4a, 0xb4, 0x00, 0x93, 0x4d, 0x37, - 0x4c, 0x14, 0x1f, 0x60, 0xc5, 0x59, 0x03, 0xd6, 0x92, 0x48, 0x9c, 0xa6, 0xb7, 0x7f, 0x46, 0x8c, - 0xb1, 0x17, 0xb9, 0xef, 0x2d, 0xc7, 0x77, 0xf7, 0x72, 0xfc, 0xba, 0x05, 0x13, 0xb4, 0x76, 0xe6, - 0xdb, 0x28, 0x05, 0x29, 0x15, 0x87, 0xdf, 0xea, 0x10, 0x87, 0xff, 0x1c, 0xdd, 0xb6, 0xeb, 0x7e, - 0x3b, 0x12, 0xda, 0x51, 0x6d, 0x5f, 0xa6, 0x50, 0x2c, 0xb0, 0x82, 0x8e, 0x04, 0x81, 0x78, 0x91, - 0xac, 0xd3, 0x91, 0x20, 0xc0, 0x02, 0x2b, 0xc3, 0xf4, 0xf7, 0x65, 0x87, 0xe9, 0xe7, 0xd1, 0x96, - 0x85, 0x17, 0x9c, 0x10, 0x69, 0xb5, 0x68, 0xcb, 0xd2, 0x3d, 0x2e, 0xa6, 0xb1, 0xbf, 0x5a, 0x84, - 0x91, 0x8a, 0x5f, 0x8f, 0x1d, 0x3b, 0x5e, 0x30, 0x1c, 0x3b, 0xce, 0x26, 0x1c, 0x3b, 0x26, 0x74, - 0xda, 0xf7, 0xdc, 0x38, 0xbe, 0x59, 0x6e, 0x1c, 0xbf, 0x6e, 0xb1, 0x51, 0x5b, 0x5c, 0xaf, 0x72, - 0x57, 0x59, 0x74, 0x11, 0x86, 0xd9, 0x0e, 0xc7, 0x9e, 0xc0, 0x4b, 0x6f, 0x07, 0x96, 0x36, 0x6f, - 0x3d, 0x06, 0x63, 0x9d, 0x06, 0x9d, 0x87, 0xa1, 0x90, 0x38, 0x41, 0x6d, 0x5b, 0x6d, 0xef, 0xc2, - 0x35, 0x81, 0xc3, 0xb0, 0xc2, 0xa2, 0x37, 0xe2, 0x40, 0xbf, 0xc5, 0xfc, 0x27, 0xb5, 0x7a, 0x7b, - 0xf8, 0x12, 0xc9, 0x8f, 0xee, 0x6b, 0xdf, 0x00, 0x94, 0xa6, 0xef, 0x21, 0x14, 0x65, 0xd9, 0x0c, - 0x45, 0x59, 0x4a, 0x85, 0xa1, 0xfc, 0x2b, 0x0b, 0xc6, 0x2a, 0x7e, 0x9d, 0x2e, 0xdd, 0x6f, 0xa7, - 0x75, 0xaa, 0x47, 0x39, 0x1f, 0xe8, 0x10, 0xe5, 0xfc, 0x51, 0xe8, 0xaf, 0xf8, 0xf5, 0x2e, 0xe1, - 0x32, 0xff, 0x9e, 0x05, 0x83, 0x15, 0xbf, 0x7e, 0x04, 0x86, 0x97, 0x57, 0x4d, 0xc3, 0xcb, 0x43, - 0x39, 0xf3, 0x26, 0xc7, 0xd6, 0xf2, 0x77, 0xfb, 0x60, 0x94, 0xb6, 0xd3, 0xdf, 0x92, 0x43, 0x69, - 0x74, 0x9b, 0xd5, 0x43, 0xb7, 0xd1, 0x6b, 0x80, 0xdf, 0x68, 0xf8, 0xb7, 0x92, 0xc3, 0xba, 0xcc, - 0xa0, 0x58, 0x60, 0xd1, 0x33, 0x30, 0xd4, 0x0a, 0xc8, 0xae, 0xeb, 0x0b, 0xf9, 0x5a, 0x33, 0x63, - 0x55, 0x04, 0x1c, 0x2b, 0x0a, 0x7a, 0xf1, 0x0e, 0x5d, 0x8f, 0xca, 0x12, 0x35, 0xdf, 0xab, 0x73, - 0xdb, 0x44, 0x51, 0xa4, 0xe2, 0xd1, 0xe0, 0xd8, 0xa0, 0x42, 0x37, 0xa0, 0xc4, 0xfe, 0xb3, 0x6d, - 0xe7, 0xf0, 0x49, 0xc0, 0x45, 0x72, 0x52, 0xc1, 0x00, 0xc7, 0xbc, 0xd0, 0x73, 0x00, 0x91, 0x4c, - 0x67, 0x11, 0x8a, 0xb0, 0x89, 0xea, 0x2e, 0xa2, 0x12, 0x5d, 0x84, 0x58, 0xa3, 0x42, 0x4f, 0x43, - 0x29, 0x72, 0xdc, 0xc6, 0xaa, 0xeb, 0x31, 0xfb, 0x3d, 0x6d, 0xbf, 0xc8, 0x11, 0x2a, 0x80, 0x38, - 0xc6, 0x53, 0x59, 0x90, 0x05, 0xc4, 0x99, 0xdf, 0x8b, 0x44, 0x3a, 0xac, 0x22, 0x97, 0x05, 0x57, - 0x15, 0x14, 0x6b, 0x14, 0x68, 0x1b, 0x4e, 0xb9, 0x1e, 0x4b, 0x5b, 0x43, 0xaa, 0x3b, 0x6e, 0x6b, - 0x63, 0xb5, 0x7a, 0x9d, 0x04, 0xee, 0xe6, 0xde, 0xbc, 0x53, 0xdb, 0x21, 0x9e, 0x4c, 0xef, 0x2c, - 0xb3, 0xfe, 0x9f, 0x5a, 0xe9, 0x40, 0x8b, 0x3b, 0x72, 0xb2, 0x9f, 0x67, 0xf3, 0xfd, 0x6a, 0x15, - 0x3d, 0x65, 0x6c, 0x1d, 0x27, 0xf4, 0xad, 0xe3, 0x60, 0xbf, 0x3c, 0x70, 0xb5, 0xaa, 0x45, 0x65, - 0x79, 0x09, 0x8e, 0x57, 0xfc, 0x7a, 0xc5, 0x0f, 0xa2, 0x65, 0x3f, 0xb8, 0xe5, 0x04, 0x75, 0x39, - 0xbd, 0xca, 0x32, 0x2e, 0x0d, 0xdd, 0x3f, 0xfb, 0xf9, 0xee, 0x62, 0xc4, 0x9c, 0x79, 0x9e, 0x49, - 0x6c, 0x87, 0x7c, 0x70, 0x58, 0x63, 0xb2, 0x83, 0x4a, 0xfc, 0x74, 0xc9, 0x89, 0x08, 0xba, 0x0a, - 0xa3, 0x35, 0xfd, 0x18, 0x15, 0xc5, 0x9f, 0x94, 0x07, 0x99, 0x71, 0xc6, 0x66, 0x9e, 0xbb, 0x66, - 0x79, 0xfb, 0x3b, 0x45, 0x25, 0x5c, 0x11, 0xc1, 0x5d, 0x5a, 0x7b, 0xc9, 0x80, 0x2e, 0x33, 0xc3, - 0x14, 0xf2, 0xa3, 0xfe, 0x71, 0xbb, 0x72, 0xc7, 0xcc, 0x30, 0xf6, 0x77, 0xc1, 0x89, 0x64, 0xf5, - 0x3d, 0xa7, 0x61, 0x5f, 0x80, 0xc9, 0x40, 0x2f, 0xa8, 0xa5, 0xd9, 0x3b, 0xce, 0xb3, 0x79, 0x24, - 0x90, 0x38, 0x4d, 0x6f, 0xbf, 0x08, 0x93, 0xf4, 0xf2, 0xab, 0x04, 0x39, 0xd6, 0xcb, 0xdd, 0x03, - 0xf4, 0xfc, 0xd7, 0x7e, 0x76, 0x10, 0x25, 0x72, 0x2e, 0xa1, 0x4f, 0xc2, 0x58, 0x48, 0x56, 0x5d, - 0xaf, 0x7d, 0x5b, 0xea, 0xd6, 0x3a, 0xbc, 0xb4, 0xad, 0x2e, 0xe9, 0x94, 0xfc, 0xfe, 0x60, 0xc2, - 0x70, 0x82, 0x1b, 0x6a, 0xc2, 0xd8, 0x2d, 0xd7, 0xab, 0xfb, 0xb7, 0x42, 0xc9, 0x7f, 0x28, 0x5f, - 0x51, 0x7f, 0x83, 0x53, 0x26, 0xda, 0x68, 0x54, 0x77, 0xc3, 0x60, 0x86, 0x13, 0xcc, 0xe9, 0x62, - 0x0f, 0xda, 0xde, 0x5c, 0x78, 0x2d, 0x24, 0xfc, 0xe5, 0xa8, 0x58, 0xec, 0x58, 0x02, 0x71, 0x8c, - 0xa7, 0x8b, 0x9d, 0xfd, 0xb9, 0x14, 0xf8, 0x6d, 0x9e, 0xe0, 0x47, 0x2c, 0x76, 0xac, 0xa0, 0x58, - 0xa3, 0xa0, 0x9b, 0x21, 0xfb, 0xb7, 0xee, 0x7b, 0xd8, 0xf7, 0x23, 0xb9, 0x7d, 0xb2, 0x04, 0x75, - 0x1a, 0x1c, 0x1b, 0x54, 0x68, 0x19, 0x50, 0xd8, 0x6e, 0xb5, 0x1a, 0xcc, 0x75, 0xd1, 0x69, 0x30, - 0x56, 0xdc, 0xed, 0xaa, 0xc8, 0xbd, 0x5b, 0xaa, 0x29, 0x2c, 0xce, 0x28, 0x41, 0xcf, 0xc5, 0x4d, - 0xd1, 0xd4, 0x7e, 0xd6, 0x54, 0x6e, 0xd4, 0xab, 0xf2, 0x76, 0x4a, 0x1c, 0x5a, 0x82, 0xc1, 0x70, - 0x2f, 0xac, 0x45, 0x8d, 0xb0, 0x53, 0x3a, 0xc0, 0x2a, 0x23, 0xd1, 0xb2, 0xd1, 0xf2, 0x22, 0x58, - 0x96, 0x45, 0x35, 0x98, 0x12, 0x1c, 0x17, 0xb6, 0x1d, 0x4f, 0x25, 0x29, 0xe3, 0xde, 0x7b, 0x17, - 0xef, 0xee, 0x97, 0xa7, 0x44, 0xcd, 0x3a, 0xfa, 0x60, 0xbf, 0x4c, 0x17, 0x47, 0x06, 0x06, 0x67, - 0x71, 0xe3, 0x93, 0xaf, 0x56, 0xf3, 0x9b, 0xad, 0x4a, 0xe0, 0x6f, 0xba, 0x0d, 0xd2, 0xc9, 0x30, - 0x5a, 0x35, 0x28, 0xc5, 0xe4, 0x33, 0x60, 0x38, 0xc1, 0xcd, 0xfe, 0x4e, 0x26, 0x3b, 0x56, 0xdd, - 0x2d, 0xcf, 0x89, 0xda, 0x01, 0x41, 0x4d, 0x18, 0x6d, 0xb1, 0xdd, 0x45, 0xa4, 0xdd, 0x11, 0x73, - 0xfd, 0x85, 0x1e, 0xf5, 0x5f, 0xb7, 0x58, 0xe2, 0x40, 0xc3, 0x0f, 0xb2, 0xa2, 0xb3, 0xc3, 0x26, - 0x77, 0xfb, 0xdf, 0x9c, 0x64, 0xd2, 0x47, 0x95, 0x2b, 0xb5, 0x06, 0xc5, 0xb3, 0x31, 0x71, 0x8d, - 0x9d, 0xc9, 0x57, 0x1f, 0xc7, 0xc3, 0x22, 0x9e, 0x9e, 0x61, 0x59, 0x16, 0x7d, 0x02, 0xc6, 0xe8, - 0xad, 0x50, 0x49, 0x00, 0xe1, 0xf4, 0xb1, 0xfc, 0x00, 0x37, 0x8a, 0x4a, 0x4f, 0xc9, 0xa5, 0x17, - 0xc6, 0x09, 0x66, 0xe8, 0x0d, 0xe6, 0x1a, 0x28, 0x59, 0x17, 0x7a, 0x61, 0xad, 0x7b, 0x01, 0x4a, - 0xb6, 0x1a, 0x13, 0xd4, 0x86, 0xa9, 0x74, 0xe2, 0xd1, 0x70, 0xda, 0xce, 0x17, 0xaf, 0xd3, 0xb9, - 0x43, 0xe3, 0xdc, 0x49, 0x69, 0x5c, 0x88, 0xb3, 0xf8, 0xa3, 0xd5, 0x64, 0x5a, 0xc8, 0xa2, 0xa1, - 0x78, 0x4e, 0xa5, 0x86, 0x1c, 0xed, 0x98, 0x11, 0x72, 0x0b, 0x4e, 0x6b, 0x99, 0xf5, 0x2e, 0x05, - 0x0e, 0x73, 0x4d, 0x71, 0xd9, 0x76, 0xaa, 0xc9, 0x45, 0x8f, 0xdc, 0xdd, 0x2f, 0x9f, 0xde, 0xe8, - 0x44, 0x88, 0x3b, 0xf3, 0x41, 0x57, 0xe1, 0x38, 0x0f, 0xcf, 0xb0, 0x48, 0x9c, 0x7a, 0xc3, 0xf5, - 0x94, 0xe0, 0xc5, 0x97, 0xfc, 0xc9, 0xbb, 0xfb, 0xe5, 0xe3, 0x73, 0x59, 0x04, 0x38, 0xbb, 0x1c, - 0x7a, 0x15, 0x4a, 0x75, 0x2f, 0x14, 0x7d, 0x30, 0x60, 0x24, 0x2f, 0x2c, 0x2d, 0xae, 0x57, 0xd5, - 0xf7, 0xc7, 0x7f, 0x70, 0x5c, 0x00, 0x6d, 0x71, 0xcb, 0x87, 0x52, 0x57, 0x0d, 0xa6, 0xa2, 0xf6, - 0x25, 0x35, 0xba, 0xc6, 0xf3, 0x74, 0x6e, 0xf2, 0x53, 0xaf, 0xb6, 0x8c, 0x97, 0xeb, 0x06, 0x63, - 0xf4, 0x3a, 0x20, 0x91, 0x24, 0x63, 0xae, 0xc6, 0x72, 0x3a, 0x69, 0xee, 0x88, 0xea, 0x16, 0x5a, - 0x4d, 0x51, 0xe0, 0x8c, 0x52, 0xe8, 0x32, 0xdd, 0x55, 0x74, 0xa8, 0xd8, 0xb5, 0x54, 0x8a, 0xdc, - 0x45, 0xd2, 0x0a, 0x08, 0xf3, 0xa0, 0x33, 0x39, 0xe2, 0x44, 0x39, 0x54, 0x87, 0x53, 0x4e, 0x3b, - 0xf2, 0x99, 0x51, 0xc9, 0x24, 0xdd, 0xf0, 0x77, 0x88, 0xc7, 0xec, 0xb9, 0x43, 0x2c, 0x1a, 0xe0, - 0xa9, 0xb9, 0x0e, 0x74, 0xb8, 0x23, 0x17, 0x2a, 0x91, 0xab, 0x9c, 0xf8, 0x60, 0xc6, 0x22, 0xcc, - 0xc8, 0x8b, 0xff, 0x22, 0x0c, 0x6f, 0xfb, 0x61, 0xb4, 0x4e, 0xa2, 0x5b, 0x7e, 0xb0, 0x23, 0xa2, - 0x72, 0xc7, 0x99, 0x10, 0x62, 0x14, 0xd6, 0xe9, 0xe8, 0x95, 0x9b, 0x79, 0x1b, 0xad, 0x2c, 0x32, - 0x47, 0x8f, 0xa1, 0x78, 0x8f, 0xb9, 0xcc, 0xc1, 0x58, 0xe2, 0x25, 0xe9, 0x4a, 0x65, 0x81, 0x39, - 0x6d, 0x24, 0x48, 0x57, 0x2a, 0x0b, 0x58, 0xe2, 0xe9, 0x74, 0x0d, 0xb7, 0x9d, 0x80, 0x54, 0x02, - 0xbf, 0x46, 0x42, 0x2d, 0xff, 0xc6, 0xc3, 0x3c, 0xe6, 0x38, 0x9d, 0xae, 0xd5, 0x2c, 0x02, 0x9c, - 0x5d, 0x0e, 0x91, 0x74, 0x56, 0xc9, 0xb1, 0x7c, 0x6b, 0x5b, 0x5a, 0x9e, 0xe9, 0x31, 0xb1, 0xa4, - 0x07, 0x13, 0x2a, 0x9f, 0x25, 0x8f, 0x32, 0x1e, 0x4e, 0x8f, 0xb3, 0xb9, 0xdd, 0x7b, 0x88, 0x72, - 0x65, 0xbf, 0x5c, 0x49, 0x70, 0xc2, 0x29, 0xde, 0x46, 0xb8, 0xc9, 0x89, 0xae, 0xe1, 0x26, 0x2f, - 0x40, 0x29, 0x6c, 0xdf, 0xac, 0xfb, 0x4d, 0xc7, 0xf5, 0x98, 0xd3, 0x86, 0x76, 0xf7, 0xab, 0x4a, - 0x04, 0x8e, 0x69, 0xd0, 0x32, 0x0c, 0x39, 0xd2, 0x38, 0x89, 0xf2, 0x23, 0x69, 0x29, 0x93, 0x24, - 0x0f, 0x2e, 0x23, 0xcd, 0x91, 0xaa, 0x2c, 0x7a, 0x05, 0x46, 0x45, 0x70, 0x05, 0x91, 0x02, 0x7a, - 0xca, 0x7c, 0x01, 0x5b, 0xd5, 0x91, 0xd8, 0xa4, 0x45, 0xd7, 0x60, 0x38, 0xf2, 0x1b, 0xec, 0x19, - 0x27, 0x15, 0xf3, 0x4e, 0xe4, 0x07, 0xbc, 0xdc, 0x50, 0x64, 0xba, 0xda, 0x5c, 0x15, 0xc5, 0x3a, - 0x1f, 0xb4, 0xc1, 0xe7, 0x3b, 0xcb, 0xb6, 0x41, 0x42, 0x91, 0x43, 0xf8, 0x74, 0x9e, 0xc7, 0x1d, - 0x23, 0x33, 0x97, 0x83, 0x28, 0x89, 0x75, 0x36, 0xe8, 0x12, 0x4c, 0xb6, 0x02, 0xd7, 0x67, 0x73, - 0x42, 0x19, 0x5b, 0xa7, 0xcd, 0xdc, 0x7a, 0x95, 0x24, 0x01, 0x4e, 0x97, 0x61, 0xb1, 0x31, 0x04, - 0x70, 0xfa, 0x24, 0xcf, 0x0f, 0xc4, 0xaf, 0xd2, 0x1c, 0x86, 0x15, 0x16, 0xad, 0xb1, 0x9d, 0x98, - 0x6b, 0x81, 0xa6, 0x67, 0xf2, 0x83, 0x77, 0xe9, 0xda, 0x22, 0x2e, 0xbc, 0xaa, 0xbf, 0x38, 0xe6, - 0x80, 0xea, 0x5a, 0x5a, 0x5e, 0x7a, 0x05, 0x08, 0xa7, 0x4f, 0x75, 0x70, 0xf9, 0x4c, 0xdc, 0xca, - 0x62, 0x81, 0xc0, 0x00, 0x87, 0x38, 0xc1, 0x13, 0x7d, 0x04, 0x26, 0x44, 0x24, 0xd6, 0xb8, 0x9b, - 0x4e, 0xc7, 0xcf, 0x62, 0x70, 0x02, 0x87, 0x53, 0xd4, 0x3c, 0x3f, 0x8f, 0x73, 0xb3, 0x41, 0xc4, - 0xd6, 0xb7, 0xea, 0x7a, 0x3b, 0xe1, 0xf4, 0x19, 0xb6, 0x3f, 0x88, 0xfc, 0x3c, 0x49, 0x2c, 0xce, - 0x28, 0x81, 0x36, 0x60, 0xa2, 0x15, 0x10, 0xd2, 0x64, 0x82, 0xbe, 0x38, 0xcf, 0xca, 0x3c, 0x34, - 0x0c, 0x6d, 0x49, 0x25, 0x81, 0x3b, 0xc8, 0x80, 0xe1, 0x14, 0x07, 0x74, 0x0b, 0x86, 0xfc, 0x5d, - 0x12, 0x6c, 0x13, 0xa7, 0x3e, 0x7d, 0xb6, 0xc3, 0x63, 0x2d, 0x71, 0xb8, 0x5d, 0x15, 0xb4, 0x09, - 0x5f, 0x16, 0x09, 0xee, 0xee, 0xcb, 0x22, 0x2b, 0x43, 0xff, 0xbf, 0x05, 0x27, 0xa5, 0x75, 0xa8, - 0xda, 0xa2, 0xbd, 0xbe, 0xe0, 0x7b, 0x61, 0x14, 0xf0, 0x60, 0x26, 0x8f, 0xe4, 0x07, 0xf8, 0xd8, - 0xc8, 0x29, 0xa4, 0x14, 0xd1, 0x27, 0xf3, 0x28, 0x42, 0x9c, 0x5f, 0x23, 0xbd, 0x9a, 0x86, 0x24, - 0x92, 0x9b, 0xd1, 0x5c, 0xb8, 0xfc, 0xc6, 0xe2, 0xfa, 0xf4, 0xa3, 0x3c, 0x12, 0x0b, 0x5d, 0x0c, - 0xd5, 0x24, 0x12, 0xa7, 0xe9, 0xd1, 0x45, 0x28, 0xf8, 0xe1, 0xf4, 0x63, 0x1d, 0x32, 0x39, 0xfb, - 0xf5, 0xab, 0x55, 0xee, 0xd3, 0x78, 0xb5, 0x8a, 0x0b, 0x7e, 0x28, 0x73, 0xe4, 0xd0, 0xfb, 0x58, - 0x38, 0xfd, 0x38, 0x57, 0x5b, 0xca, 0x1c, 0x39, 0x0c, 0x88, 0x63, 0x3c, 0xda, 0x86, 0xf1, 0xd0, - 0xb8, 0xf7, 0x86, 0xd3, 0xe7, 0x58, 0x4f, 0x3d, 0x9e, 0x37, 0x68, 0x06, 0xb5, 0x96, 0xbc, 0xc2, - 0xe4, 0x82, 0x93, 0x6c, 0xf9, 0xea, 0xd2, 0x6e, 0xde, 0xe1, 0xf4, 0x13, 0x5d, 0x56, 0x97, 0x46, - 0xac, 0xaf, 0x2e, 0x9d, 0x07, 0x4e, 0xf0, 0x9c, 0xf9, 0x0e, 0x98, 0x4c, 0x89, 0x4b, 0x87, 0xf1, - 0xdf, 0x9f, 0xd9, 0x81, 0x51, 0x63, 0x4a, 0x3e, 0x50, 0xf7, 0x8e, 0xdf, 0x2e, 0x41, 0x49, 0x99, - 0xdd, 0xd1, 0x05, 0xd3, 0xa3, 0xe3, 0x64, 0xd2, 0xa3, 0x63, 0xa8, 0xe2, 0xd7, 0x0d, 0x27, 0x8e, - 0x8d, 0x8c, 0x88, 0x95, 0x79, 0x1b, 0x60, 0xef, 0x8f, 0x8c, 0x34, 0x53, 0x42, 0xb1, 0x67, 0xd7, - 0x90, 0xbe, 0x8e, 0xd6, 0x89, 0x4b, 0x30, 0xe9, 0xf9, 0x4c, 0x46, 0x27, 0x75, 0x29, 0x80, 0x31, - 0x39, 0xab, 0xa4, 0x07, 0xc0, 0x4a, 0x10, 0xe0, 0x74, 0x19, 0x5a, 0x21, 0x17, 0x94, 0x92, 0xe6, - 0x10, 0x2e, 0x47, 0x61, 0x81, 0xa5, 0x77, 0x43, 0xfe, 0x2b, 0x9c, 0x9e, 0xc8, 0xbf, 0x1b, 0xf2, - 0x42, 0x49, 0x61, 0x2c, 0x94, 0xc2, 0x18, 0xd3, 0xfe, 0xb7, 0xfc, 0xfa, 0x4a, 0x45, 0x88, 0xf9, - 0x5a, 0x2c, 0xe9, 0xfa, 0x4a, 0x05, 0x73, 0x1c, 0x9a, 0x83, 0x01, 0xf6, 0x23, 0x9c, 0x1e, 0xc9, - 0x0f, 0x98, 0xc4, 0x4a, 0x68, 0x39, 0xfa, 0x58, 0x01, 0x2c, 0x0a, 0x32, 0xed, 0x2e, 0xbd, 0x1b, - 0x31, 0xed, 0xee, 0xe0, 0x3d, 0x6a, 0x77, 0x25, 0x03, 0x1c, 0xf3, 0x42, 0xb7, 0xe1, 0xb8, 0x71, - 0x1f, 0x55, 0xaf, 0xae, 0x20, 0xdf, 0xf0, 0x9b, 0x20, 0x9e, 0x3f, 0x2d, 0x1a, 0x7d, 0x7c, 0x25, - 0x8b, 0x13, 0xce, 0xae, 0x00, 0x35, 0x60, 0xb2, 0x96, 0xaa, 0x75, 0xa8, 0xf7, 0x5a, 0xd5, 0xbc, - 0x48, 0xd7, 0x98, 0x66, 0x8c, 0x5e, 0x81, 0xa1, 0xb7, 0x7d, 0xee, 0xa4, 0x25, 0xae, 0x26, 0x32, - 0xe2, 0xc7, 0xd0, 0x1b, 0x57, 0xab, 0x0c, 0x7e, 0xb0, 0x5f, 0x1e, 0xae, 0xf8, 0x75, 0xf9, 0x17, - 0xab, 0x02, 0xe8, 0xfb, 0x2d, 0x98, 0x49, 0x5f, 0x78, 0x55, 0xa3, 0x47, 0x7b, 0x6f, 0xb4, 0x2d, - 0x2a, 0x9d, 0x59, 0xca, 0x65, 0x87, 0x3b, 0x54, 0x85, 0x3e, 0x44, 0xd7, 0x53, 0xe8, 0xde, 0x21, - 0x22, 0xc1, 0xf1, 0x23, 0xf1, 0x7a, 0xa2, 0xd0, 0x83, 0xfd, 0xf2, 0x38, 0xdf, 0x19, 0xdd, 0x3b, - 0x2a, 0xea, 0x35, 0x2f, 0x80, 0xbe, 0x0b, 0x8e, 0x07, 0x69, 0x0d, 0x2a, 0x91, 0x42, 0xf8, 0x53, - 0xbd, 0xec, 0xb2, 0xc9, 0x01, 0xc7, 0x59, 0x0c, 0x71, 0x76, 0x3d, 0xf6, 0xaf, 0x58, 0x4c, 0xbf, - 0x2d, 0x9a, 0x45, 0xc2, 0x76, 0xe3, 0x28, 0xd2, 0xaa, 0x2f, 0x19, 0xb6, 0xe3, 0x7b, 0xf6, 0x6c, - 0xfa, 0xe7, 0x16, 0xf3, 0x6c, 0x3a, 0xc2, 0x37, 0x5a, 0x6f, 0xc0, 0x50, 0x24, 0xd3, 0xdd, 0x77, - 0xc8, 0x04, 0xaf, 0x35, 0x8a, 0x79, 0x77, 0xa9, 0x4b, 0x8e, 0xca, 0x6c, 0xaf, 0xd8, 0xd8, 0xff, - 0x84, 0x8f, 0x80, 0xc4, 0x1c, 0x81, 0x89, 0x6e, 0xd1, 0x34, 0xd1, 0x95, 0xbb, 0x7c, 0x41, 0x8e, - 0xa9, 0xee, 0x1f, 0x9b, 0xed, 0x66, 0xca, 0xbd, 0x77, 0xbb, 0x4b, 0x9d, 0xfd, 0x79, 0x0b, 0x20, - 0x4e, 0x33, 0xd0, 0x43, 0x42, 0xd3, 0x97, 0xe8, 0xb5, 0xc6, 0x8f, 0xfc, 0x9a, 0xdf, 0x10, 0x06, - 0x8a, 0x53, 0xb1, 0x95, 0x90, 0xc3, 0x0f, 0xb4, 0xdf, 0x58, 0x51, 0xa3, 0xb2, 0x8c, 0xfb, 0x59, - 0x8c, 0xed, 0xd6, 0x46, 0xcc, 0xcf, 0x2f, 0x59, 0x70, 0x2c, 0xcb, 0xe1, 0x9f, 0x5e, 0x92, 0xb9, - 0x9a, 0x53, 0xb9, 0x3b, 0xaa, 0xd1, 0xbc, 0x2e, 0xe0, 0x58, 0x51, 0xf4, 0x9c, 0x29, 0xf6, 0x70, - 0x21, 0xf0, 0xaf, 0xc2, 0x68, 0x25, 0x20, 0x9a, 0x7c, 0xf1, 0x1a, 0x8f, 0xa4, 0xc3, 0xdb, 0xf3, - 0xcc, 0xa1, 0xa3, 0xe8, 0xd8, 0x5f, 0x2e, 0xc0, 0x31, 0xee, 0xb4, 0x33, 0xb7, 0xeb, 0xbb, 0xf5, - 0x8a, 0x5f, 0x17, 0xcf, 0x34, 0xdf, 0x84, 0x91, 0x96, 0xa6, 0x9b, 0xee, 0x14, 0xce, 0x59, 0xd7, - 0x61, 0xc7, 0xda, 0x34, 0x1d, 0x8a, 0x0d, 0x5e, 0xa8, 0x0e, 0x23, 0x64, 0xd7, 0xad, 0x29, 0xcf, - 0x8f, 0xc2, 0xa1, 0x0f, 0x69, 0x55, 0xcb, 0x92, 0xc6, 0x07, 0x1b, 0x5c, 0x7b, 0x76, 0xb5, 0xd5, - 0x44, 0xb4, 0xbe, 0x2e, 0xde, 0x1e, 0x3f, 0x62, 0xc1, 0x43, 0x39, 0xc1, 0x9f, 0x69, 0x75, 0xb7, - 0x98, 0x7b, 0x94, 0x98, 0xb6, 0xaa, 0x3a, 0xee, 0x34, 0x85, 0x05, 0x16, 0x7d, 0x14, 0x80, 0x3b, - 0x3d, 0x11, 0xaf, 0xd6, 0x35, 0x4a, 0xae, 0x11, 0xde, 0x54, 0x8b, 0x54, 0x29, 0xcb, 0x63, 0x8d, - 0x97, 0xfd, 0xa5, 0x3e, 0xe8, 0x67, 0x4e, 0x36, 0xa8, 0x02, 0x83, 0xdb, 0x3c, 0x4f, 0x5a, 0xc7, - 0x71, 0xa3, 0xb4, 0x32, 0xf5, 0x5a, 0x3c, 0x6e, 0x1a, 0x14, 0x4b, 0x36, 0x68, 0x0d, 0xa6, 0x78, - 0xba, 0xba, 0xc6, 0x22, 0x69, 0x38, 0x7b, 0x52, 0xed, 0xcb, 0x33, 0xb0, 0x2b, 0xf5, 0xf7, 0x4a, - 0x9a, 0x04, 0x67, 0x95, 0x43, 0xaf, 0xc1, 0x18, 0xbd, 0x86, 0xfb, 0xed, 0x48, 0x72, 0xe2, 0x89, - 0xea, 0xd4, 0xcd, 0x64, 0xc3, 0xc0, 0xe2, 0x04, 0x35, 0x7a, 0x05, 0x46, 0x5b, 0x29, 0x05, 0x77, - 0x7f, 0xac, 0x09, 0x32, 0x95, 0xda, 0x26, 0x2d, 0xf3, 0xf9, 0x6f, 0xb3, 0x17, 0x0e, 0x1b, 0xdb, - 0x01, 0x09, 0xb7, 0xfd, 0x46, 0x9d, 0x49, 0xc0, 0xfd, 0x9a, 0xcf, 0x7f, 0x02, 0x8f, 0x53, 0x25, - 0x28, 0x97, 0x4d, 0xc7, 0x6d, 0xb4, 0x03, 0x12, 0x73, 0x19, 0x30, 0xb9, 0x2c, 0x27, 0xf0, 0x38, - 0x55, 0xa2, 0xbb, 0xe6, 0x7e, 0xf0, 0xfe, 0x68, 0xee, 0xed, 0x9f, 0x2a, 0x80, 0x31, 0xb4, 0xdf, - 0xc6, 0x09, 0xf4, 0x5e, 0x85, 0xbe, 0xad, 0xa0, 0x55, 0x13, 0x0e, 0x65, 0x99, 0x5f, 0x16, 0x67, - 0xcf, 0xe6, 0x5f, 0x46, 0xff, 0x63, 0x56, 0x8a, 0xae, 0xf1, 0xe3, 0x95, 0xc0, 0xa7, 0x87, 0x9c, - 0x8c, 0xb5, 0xa8, 0x9e, 0xd6, 0x0c, 0xca, 0x20, 0x11, 0x1d, 0xa2, 0x12, 0x8b, 0xf7, 0x01, 0x9c, - 0x83, 0xe1, 0x7b, 0x55, 0x15, 0xa1, 0x60, 0x24, 0x17, 0x74, 0x11, 0x86, 0x45, 0x4e, 0x33, 0xf6, - 0x02, 0x84, 0x2f, 0x26, 0xe6, 0x2b, 0xb6, 0x18, 0x83, 0xb1, 0x4e, 0x63, 0xff, 0x40, 0x01, 0xa6, - 0x32, 0x9e, 0xf0, 0xf1, 0x63, 0x64, 0xcb, 0x0d, 0x23, 0x95, 0xa0, 0x5b, 0x3b, 0x46, 0x38, 0x1c, - 0x2b, 0x0a, 0xba, 0x57, 0xf1, 0x83, 0x2a, 0x79, 0x38, 0x89, 0x27, 0x32, 0x02, 0x7b, 0xc8, 0x54, - 0xd7, 0x67, 0xa1, 0xaf, 0x1d, 0x12, 0x19, 0x51, 0x5b, 0x1d, 0xdb, 0xcc, 0xac, 0xcd, 0x30, 0xf4, - 0x0a, 0xb8, 0xa5, 0x2c, 0xc4, 0xda, 0x15, 0x90, 0xdb, 0x88, 0x39, 0x8e, 0x36, 0x2e, 0x22, 0x9e, - 0xe3, 0x45, 0xe2, 0xa2, 0x18, 0x07, 0xc6, 0x65, 0x50, 0x2c, 0xb0, 0xf6, 0x17, 0x8b, 0x70, 0x32, - 0xf7, 0x51, 0x2f, 0x6d, 0x7a, 0xd3, 0xf7, 0xdc, 0xc8, 0x57, 0x4e, 0x78, 0x3c, 0x18, 0x2e, 0x69, - 0x6d, 0xaf, 0x09, 0x38, 0x56, 0x14, 0xe8, 0x1c, 0xf4, 0x33, 0xa5, 0x78, 0x2a, 0x55, 0xf9, 0xfc, - 0x22, 0x8f, 0x8e, 0xc8, 0xd1, 0xda, 0xa9, 0x5e, 0xec, 0x78, 0xaa, 0x3f, 0x4a, 0x25, 0x18, 0xbf, - 0x91, 0x3c, 0x50, 0x68, 0x73, 0x7d, 0xbf, 0x81, 0x19, 0x12, 0x3d, 0x2e, 0xfa, 0x2b, 0xe1, 0x75, - 0x86, 0x9d, 0xba, 0x1f, 0x6a, 0x9d, 0xf6, 0x24, 0x0c, 0xee, 0x90, 0xbd, 0xc0, 0xf5, 0xb6, 0x92, - 0xde, 0x88, 0x57, 0x38, 0x18, 0x4b, 0xbc, 0x99, 0x35, 0x77, 0xf0, 0x7e, 0x64, 0xcd, 0xd5, 0x67, - 0xc0, 0x50, 0x57, 0xf1, 0xe4, 0x07, 0x8b, 0x30, 0x8e, 0xe7, 0x17, 0xdf, 0x1b, 0x88, 0x6b, 0xe9, - 0x81, 0xb8, 0x1f, 0xc9, 0x65, 0x0f, 0x37, 0x1a, 0xbf, 0x68, 0xc1, 0x38, 0xcb, 0xac, 0x26, 0x22, - 0x72, 0xb8, 0xbe, 0x77, 0x04, 0x57, 0x81, 0x47, 0xa1, 0x3f, 0xa0, 0x95, 0x26, 0x73, 0x94, 0xb3, - 0x96, 0x60, 0x8e, 0x43, 0xa7, 0xa0, 0x8f, 0x35, 0x81, 0x0e, 0xde, 0x08, 0xdf, 0x82, 0x17, 0x9d, - 0xc8, 0xc1, 0x0c, 0xca, 0x62, 0x03, 0x62, 0xd2, 0x6a, 0xb8, 0xbc, 0xd1, 0xb1, 0xcb, 0xc2, 0xbb, - 0x23, 0xdc, 0x47, 0x66, 0xd3, 0xde, 0x59, 0x6c, 0xc0, 0x6c, 0x96, 0x9d, 0xaf, 0xd9, 0x7f, 0x5e, - 0x80, 0x33, 0x99, 0xe5, 0x7a, 0x8e, 0x0d, 0xd8, 0xb9, 0xf4, 0x83, 0x4c, 0x12, 0x55, 0x3c, 0x42, - 0x5f, 0xef, 0xbe, 0x5e, 0xa5, 0xff, 0xfe, 0x1e, 0x42, 0xf6, 0x65, 0x76, 0xd9, 0xbb, 0x24, 0x64, - 0x5f, 0x66, 0xdb, 0x72, 0xd4, 0x04, 0x7f, 0x5d, 0xc8, 0xf9, 0x16, 0xa6, 0x30, 0x38, 0x4f, 0xf7, - 0x19, 0x86, 0x0c, 0xe5, 0x25, 0x9c, 0xef, 0x31, 0x1c, 0x86, 0x15, 0x16, 0xcd, 0xc1, 0x78, 0xd3, - 0xf5, 0xe8, 0xe6, 0xb3, 0x67, 0x8a, 0xe2, 0xca, 0x96, 0xb1, 0x66, 0xa2, 0x71, 0x92, 0x1e, 0xb9, - 0x5a, 0x38, 0x3f, 0xfe, 0x75, 0xaf, 0x1c, 0x6a, 0xd5, 0xcd, 0x9a, 0xee, 0x1c, 0xaa, 0x17, 0x33, - 0x42, 0xfb, 0xad, 0x69, 0x7a, 0xa2, 0x62, 0xef, 0x7a, 0xa2, 0x91, 0x6c, 0x1d, 0xd1, 0xcc, 0x2b, - 0x30, 0x7a, 0xcf, 0xb6, 0x11, 0xfb, 0xeb, 0x45, 0x78, 0xb8, 0xc3, 0xb2, 0xe7, 0x7b, 0xbd, 0x31, - 0x06, 0xda, 0x5e, 0x9f, 0x1a, 0x87, 0x0a, 0x1c, 0xdb, 0x6c, 0x37, 0x1a, 0x7b, 0xec, 0x51, 0x13, - 0xa9, 0x4b, 0x0a, 0x21, 0x53, 0x4a, 0xe5, 0xc8, 0xb1, 0xe5, 0x0c, 0x1a, 0x9c, 0x59, 0x92, 0x5e, - 0xb1, 0xe8, 0x49, 0xb2, 0xa7, 0x58, 0x25, 0xae, 0x58, 0x58, 0x47, 0x62, 0x93, 0x16, 0x5d, 0x82, - 0x49, 0x67, 0xd7, 0x71, 0x79, 0x4e, 0x04, 0xc9, 0x80, 0xdf, 0xb1, 0x94, 0x2e, 0x7a, 0x2e, 0x49, - 0x80, 0xd3, 0x65, 0xd0, 0xeb, 0x80, 0xfc, 0x9b, 0xec, 0xa1, 0x44, 0xfd, 0x12, 0xf1, 0x84, 0xd5, - 0x9d, 0x8d, 0x5d, 0x31, 0xde, 0x12, 0xae, 0xa6, 0x28, 0x70, 0x46, 0xa9, 0x44, 0x60, 0xb9, 0x81, - 0xfc, 0xc0, 0x72, 0x9d, 0xf7, 0xc5, 0xae, 0xf9, 0xc9, 0x2e, 0xc2, 0xe8, 0x21, 0xdd, 0x7f, 0xed, - 0xff, 0x68, 0x81, 0x52, 0x10, 0x9b, 0x81, 0xa1, 0x5f, 0x61, 0xfe, 0xc9, 0x5c, 0xb5, 0xad, 0xc5, - 0x82, 0x3a, 0xae, 0xf9, 0x27, 0xc7, 0x48, 0x6c, 0xd2, 0xf2, 0x39, 0xa4, 0xf9, 0x15, 0x1b, 0xb7, - 0x02, 0x11, 0xb7, 0x52, 0x51, 0xa0, 0x8f, 0xc1, 0x60, 0xdd, 0xdd, 0x75, 0x43, 0xa1, 0x1c, 0x3b, - 0xb4, 0x31, 0x2e, 0xde, 0x3a, 0x17, 0x39, 0x1b, 0x2c, 0xf9, 0xd9, 0x3f, 0x58, 0x88, 0xfb, 0xe4, - 0x8d, 0xb6, 0x1f, 0x39, 0x47, 0x70, 0x92, 0x5f, 0x32, 0x4e, 0xf2, 0xc7, 0xb3, 0x07, 0x5a, 0x6b, - 0x52, 0xee, 0x09, 0x7e, 0x35, 0x71, 0x82, 0x3f, 0xd1, 0x9d, 0x55, 0xe7, 0x93, 0xfb, 0x9f, 0x5a, - 0x30, 0x69, 0xd0, 0x1f, 0xc1, 0x01, 0xb2, 0x6c, 0x1e, 0x20, 0x8f, 0x74, 0xfd, 0x86, 0x9c, 0x83, - 0xe3, 0xfb, 0x8a, 0x89, 0xb6, 0xb3, 0x03, 0xe3, 0x6d, 0xe8, 0xdb, 0x76, 0x82, 0xba, 0xb8, 0x17, - 0x5f, 0xe8, 0xa9, 0xaf, 0x67, 0x2f, 0x3b, 0x81, 0xf0, 0x54, 0x78, 0x46, 0xf6, 0x3a, 0x05, 0x75, - 0xf5, 0x52, 0x60, 0x55, 0xa1, 0x97, 0x60, 0x20, 0xac, 0xf9, 0x2d, 0xf5, 0x66, 0x8a, 0x25, 0xbd, - 0xad, 0x32, 0xc8, 0xc1, 0x7e, 0x19, 0x99, 0xd5, 0x51, 0x30, 0x16, 0xf4, 0xe8, 0x4d, 0x18, 0x65, - 0xbf, 0x94, 0xdb, 0x60, 0x31, 0x5f, 0x83, 0x51, 0xd5, 0x09, 0xb9, 0x4f, 0xad, 0x01, 0xc2, 0x26, - 0xab, 0x99, 0x2d, 0x28, 0xa9, 0xcf, 0x7a, 0xa0, 0xd6, 0xee, 0x7f, 0x57, 0x84, 0xa9, 0x8c, 0x39, - 0x87, 0x42, 0x63, 0x24, 0x2e, 0xf6, 0x38, 0x55, 0xdf, 0xe1, 0x58, 0x84, 0xec, 0x02, 0x55, 0x17, - 0x73, 0xab, 0xe7, 0x4a, 0xaf, 0x85, 0x24, 0x59, 0x29, 0x05, 0x75, 0xaf, 0x94, 0x56, 0x76, 0x64, - 0x5d, 0x4d, 0x2b, 0x52, 0x2d, 0x7d, 0xa0, 0x63, 0xfa, 0xeb, 0x7d, 0x70, 0x2c, 0x2b, 0x9e, 0x30, - 0xfa, 0x4c, 0x22, 0x93, 0xf6, 0x0b, 0x9d, 0x7a, 0x58, 0x2f, 0xc9, 0xd3, 0x6b, 0x8b, 0x30, 0x9e, - 0xb3, 0x66, 0x6e, 0xed, 0xae, 0xdd, 0x2c, 0xea, 0x64, 0xe1, 0x75, 0x02, 0x9e, 0x01, 0x5d, 0x6e, - 0x1f, 0x1f, 0xe8, 0xb9, 0x01, 0x22, 0x75, 0x7a, 0x98, 0x70, 0x49, 0x92, 0xe0, 0xee, 0x2e, 0x49, - 0xb2, 0x66, 0xb4, 0x02, 0x03, 0x35, 0xee, 0xeb, 0x52, 0xec, 0xbe, 0x85, 0x71, 0x47, 0x17, 0xb5, - 0x01, 0x0b, 0x07, 0x17, 0xc1, 0x60, 0xc6, 0x85, 0x61, 0xad, 0x63, 0x1e, 0xe8, 0xe4, 0xd9, 0xa1, - 0x07, 0x9f, 0xd6, 0x05, 0x0f, 0x74, 0x02, 0xfd, 0x88, 0x05, 0x89, 0x07, 0x2f, 0x4a, 0x29, 0x67, - 0xe5, 0x2a, 0xe5, 0xce, 0x42, 0x5f, 0xe0, 0x37, 0x48, 0x32, 0x4d, 0x33, 0xf6, 0x1b, 0x04, 0x33, - 0x0c, 0xa5, 0x88, 0x62, 0x55, 0xcb, 0x88, 0x7e, 0x8d, 0x14, 0x17, 0xc4, 0x47, 0xa1, 0xbf, 0x41, - 0x76, 0x49, 0x23, 0x99, 0x4d, 0x6f, 0x95, 0x02, 0x31, 0xc7, 0xd9, 0xbf, 0xd8, 0x07, 0xa7, 0x3b, - 0xc6, 0xba, 0xa2, 0x97, 0xb1, 0x2d, 0x27, 0x22, 0xb7, 0x9c, 0xbd, 0x64, 0xd2, 0xaf, 0x4b, 0x1c, - 0x8c, 0x25, 0x9e, 0x3d, 0xff, 0xe4, 0xb9, 0x3b, 0x12, 0x2a, 0x4c, 0x91, 0xb2, 0x43, 0x60, 0x4d, - 0x95, 0x58, 0xf1, 0x7e, 0xa8, 0xc4, 0x9e, 0x03, 0x08, 0xc3, 0x06, 0x77, 0x0b, 0xac, 0x8b, 0x77, - 0xa5, 0x71, 0x8e, 0x97, 0xea, 0xaa, 0xc0, 0x60, 0x8d, 0x0a, 0x2d, 0xc2, 0x44, 0x2b, 0xf0, 0x23, - 0xae, 0x11, 0x5e, 0xe4, 0x9e, 0xb3, 0xfd, 0x66, 0x98, 0xa1, 0x4a, 0x02, 0x8f, 0x53, 0x25, 0xd0, - 0x8b, 0x30, 0x2c, 0x42, 0x0f, 0x55, 0x7c, 0xbf, 0x21, 0x94, 0x50, 0xca, 0x99, 0xb4, 0x1a, 0xa3, - 0xb0, 0x4e, 0xa7, 0x15, 0x63, 0x6a, 0xe6, 0xc1, 0xcc, 0x62, 0x5c, 0xd5, 0xac, 0xd1, 0x25, 0xc2, - 0x94, 0x0f, 0xf5, 0x14, 0xa6, 0x3c, 0x56, 0xcb, 0x95, 0x7a, 0xb6, 0x7a, 0x42, 0x57, 0x45, 0xd6, - 0x57, 0xfa, 0x60, 0x4a, 0x4c, 0x9c, 0x07, 0x3d, 0x5d, 0xae, 0xa5, 0xa7, 0xcb, 0xfd, 0x50, 0xdc, - 0xbd, 0x37, 0x67, 0x8e, 0x7a, 0xce, 0xfc, 0x90, 0x05, 0xa6, 0xa4, 0x86, 0xfe, 0xdf, 0xdc, 0xac, - 0x89, 0x2f, 0xe6, 0x4a, 0x7e, 0x71, 0x0c, 0xe3, 0x77, 0x96, 0x3f, 0xd1, 0xfe, 0xf7, 0x16, 0x3c, - 0xd2, 0x95, 0x23, 0x5a, 0x82, 0x12, 0x13, 0x27, 0xb5, 0x8b, 0xde, 0x13, 0xca, 0xb3, 0x5e, 0x22, - 0x72, 0xa4, 0xdb, 0xb8, 0x24, 0x5a, 0x4a, 0xa5, 0xa7, 0x7c, 0x32, 0x23, 0x3d, 0xe5, 0x71, 0xa3, - 0x7b, 0xee, 0x31, 0x3f, 0xe5, 0x17, 0xe8, 0x89, 0x63, 0xbc, 0x6a, 0x43, 0x1f, 0x30, 0x94, 0x8e, - 0x76, 0x42, 0xe9, 0x88, 0x4c, 0x6a, 0xed, 0x0c, 0xf9, 0x08, 0x4c, 0xb0, 0x98, 0x84, 0xec, 0x9d, - 0x87, 0x78, 0x6f, 0x57, 0x88, 0x7d, 0xb9, 0x57, 0x13, 0x38, 0x9c, 0xa2, 0xb6, 0xff, 0xb4, 0x08, - 0x03, 0x7c, 0xf9, 0x1d, 0xc1, 0xf5, 0xf2, 0x69, 0x28, 0xb9, 0xcd, 0x66, 0x9b, 0x67, 0x1c, 0xec, - 0x8f, 0x3d, 0x83, 0x57, 0x24, 0x10, 0xc7, 0x78, 0xb4, 0x2c, 0xf4, 0xdd, 0x1d, 0xc2, 0x1e, 0xf3, - 0x86, 0xcf, 0x2e, 0x3a, 0x91, 0xc3, 0x65, 0x25, 0x75, 0xce, 0xc6, 0x9a, 0x71, 0xf4, 0x49, 0x80, - 0x30, 0x0a, 0x5c, 0x6f, 0x8b, 0xc2, 0x44, 0x6c, 0xfc, 0xa7, 0x3a, 0x70, 0xab, 0x2a, 0x62, 0xce, - 0x33, 0xde, 0x73, 0x14, 0x02, 0x6b, 0x1c, 0xd1, 0xac, 0x71, 0xd2, 0xcf, 0x24, 0xc6, 0x0e, 0x38, - 0xd7, 0x78, 0xcc, 0x66, 0x3e, 0x08, 0x25, 0xc5, 0xbc, 0x9b, 0xf6, 0x6b, 0x44, 0x17, 0x8b, 0x3e, - 0x0c, 0xe3, 0x89, 0xb6, 0x1d, 0x4a, 0x79, 0xf6, 0x4b, 0x16, 0x8c, 0xf3, 0xc6, 0x2c, 0x79, 0xbb, - 0xe2, 0x34, 0xb8, 0x03, 0xc7, 0x1a, 0x19, 0xbb, 0xb2, 0x18, 0xfe, 0xde, 0x77, 0x71, 0xa5, 0x2c, - 0xcb, 0xc2, 0xe2, 0xcc, 0x3a, 0xd0, 0x79, 0xba, 0xe2, 0xe8, 0xae, 0xeb, 0x34, 0x44, 0x7c, 0x83, - 0x11, 0xbe, 0xda, 0x38, 0x0c, 0x2b, 0xac, 0xfd, 0x87, 0x16, 0x4c, 0xf2, 0x96, 0x5f, 0x21, 0x7b, - 0x6a, 0x6f, 0xfa, 0x66, 0xb6, 0x5d, 0xe4, 0xba, 0x2d, 0xe4, 0xe4, 0xba, 0xd5, 0x3f, 0xad, 0xd8, - 0xf1, 0xd3, 0xbe, 0x6c, 0x81, 0x98, 0x21, 0x47, 0xa0, 0xcf, 0xf8, 0x0e, 0x53, 0x9f, 0x31, 0x93, - 0xbf, 0x08, 0x72, 0x14, 0x19, 0x7f, 0x65, 0xc1, 0x04, 0x27, 0x88, 0x6d, 0xf5, 0xdf, 0xd4, 0x71, - 0x98, 0x37, 0xbf, 0x28, 0xd3, 0xf9, 0xf2, 0x0a, 0xd9, 0xdb, 0xf0, 0x2b, 0x4e, 0xb4, 0x9d, 0xfd, - 0x51, 0xc6, 0x60, 0xf5, 0x75, 0x1c, 0xac, 0xba, 0x5c, 0x40, 0x46, 0x2a, 0xb8, 0x2e, 0x01, 0x02, - 0x0e, 0x9b, 0x0a, 0xce, 0xfe, 0x33, 0x0b, 0x10, 0xaf, 0xc6, 0x10, 0xdc, 0xa8, 0x38, 0xc4, 0xa0, - 0xda, 0x41, 0x17, 0x6f, 0x4d, 0x0a, 0x83, 0x35, 0xaa, 0xfb, 0xd2, 0x3d, 0x09, 0x87, 0x8b, 0x62, - 0x77, 0x87, 0x8b, 0x43, 0xf4, 0xe8, 0xbf, 0x1e, 0x80, 0xe4, 0xcb, 0x3e, 0x74, 0x1d, 0x46, 0x6a, - 0x4e, 0xcb, 0xb9, 0xe9, 0x36, 0xdc, 0xc8, 0x25, 0x61, 0x27, 0x6f, 0xac, 0x05, 0x8d, 0x4e, 0x98, - 0xc8, 0x35, 0x08, 0x36, 0xf8, 0xa0, 0x59, 0x80, 0x56, 0xe0, 0xee, 0xba, 0x0d, 0xb2, 0xc5, 0xd4, - 0x2e, 0x2c, 0xa2, 0x0a, 0x77, 0x0d, 0x93, 0x50, 0xac, 0x51, 0x64, 0x84, 0x51, 0x28, 0x3e, 0xe0, - 0x30, 0x0a, 0x70, 0x64, 0x61, 0x14, 0xfa, 0x0e, 0x15, 0x46, 0x61, 0xe8, 0xd0, 0x61, 0x14, 0xfa, - 0x7b, 0x0a, 0xa3, 0x80, 0xe1, 0x84, 0x94, 0x3d, 0xe9, 0xff, 0x65, 0xb7, 0x41, 0xc4, 0x85, 0x83, - 0x87, 0x81, 0x99, 0xb9, 0xbb, 0x5f, 0x3e, 0x81, 0x33, 0x29, 0x70, 0x4e, 0x49, 0xf4, 0x51, 0x98, - 0x76, 0x1a, 0x0d, 0xff, 0x96, 0x1a, 0xd4, 0xa5, 0xb0, 0xe6, 0x34, 0xb8, 0x09, 0x64, 0x90, 0x71, - 0x3d, 0x75, 0x77, 0xbf, 0x3c, 0x3d, 0x97, 0x43, 0x83, 0x73, 0x4b, 0xa3, 0x57, 0xa1, 0xd4, 0x0a, - 0xfc, 0xda, 0x9a, 0xf6, 0xfc, 0xf8, 0x0c, 0xed, 0xc0, 0x8a, 0x04, 0x1e, 0xec, 0x97, 0x47, 0xd5, - 0x1f, 0x76, 0xe0, 0xc7, 0x05, 0x32, 0xe2, 0x22, 0x0c, 0xdf, 0xd7, 0xb8, 0x08, 0x3b, 0x30, 0x55, - 0x25, 0x81, 0xeb, 0x34, 0xdc, 0x3b, 0x54, 0x5e, 0x96, 0xfb, 0xd3, 0x06, 0x94, 0x82, 0xc4, 0x8e, - 0xdc, 0x53, 0x28, 0x62, 0x2d, 0x1b, 0x97, 0xdc, 0x81, 0x63, 0x46, 0xf6, 0xff, 0xb2, 0x60, 0x50, - 0xbc, 0xe4, 0x3b, 0x02, 0xa9, 0x71, 0xce, 0x30, 0x4a, 0x94, 0xb3, 0x3b, 0x8c, 0x35, 0x26, 0xd7, - 0x1c, 0xb1, 0x92, 0x30, 0x47, 0x3c, 0xd2, 0x89, 0x49, 0x67, 0x43, 0xc4, 0xdf, 0x29, 0x52, 0xe9, - 0xdd, 0x78, 0x53, 0xfe, 0xe0, 0xbb, 0x60, 0x1d, 0x06, 0x43, 0xf1, 0xa6, 0xb9, 0x90, 0xff, 0x1a, - 0x24, 0x39, 0x88, 0xb1, 0x17, 0x9d, 0x78, 0xc5, 0x2c, 0x99, 0x64, 0x3e, 0x96, 0x2e, 0x3e, 0xc0, - 0xc7, 0xd2, 0xdd, 0x5e, 0xdd, 0xf7, 0xdd, 0x8f, 0x57, 0xf7, 0xf6, 0xd7, 0xd8, 0xc9, 0xa9, 0xc3, - 0x8f, 0x40, 0xa8, 0xba, 0x64, 0x9e, 0xb1, 0x76, 0x87, 0x99, 0x25, 0x1a, 0x95, 0x23, 0x5c, 0xfd, - 0x82, 0x05, 0xa7, 0x33, 0xbe, 0x4a, 0x93, 0xb4, 0x9e, 0x81, 0x21, 0xa7, 0x5d, 0x77, 0xd5, 0x5a, - 0xd6, 0x4c, 0x93, 0x73, 0x02, 0x8e, 0x15, 0x05, 0x5a, 0x80, 0x49, 0x72, 0xbb, 0xe5, 0x72, 0x43, - 0xae, 0xee, 0x7c, 0x5c, 0xe4, 0xcf, 0x3f, 0x97, 0x92, 0x48, 0x9c, 0xa6, 0x57, 0x01, 0xa2, 0x8a, - 0xb9, 0x01, 0xa2, 0x7e, 0xce, 0x82, 0x61, 0xf5, 0xaa, 0xf7, 0x81, 0xf7, 0xf6, 0x47, 0xcc, 0xde, - 0x7e, 0xb8, 0x43, 0x6f, 0xe7, 0x74, 0xf3, 0xef, 0x17, 0x54, 0x7b, 0x2b, 0x7e, 0x10, 0xf5, 0x20, - 0xc1, 0xdd, 0xfb, 0xc3, 0x89, 0x8b, 0x30, 0xec, 0xb4, 0x5a, 0x12, 0x21, 0x3d, 0xe0, 0x58, 0x60, - 0xf9, 0x18, 0x8c, 0x75, 0x1a, 0xf5, 0x8e, 0xa3, 0x98, 0xfb, 0x8e, 0xa3, 0x0e, 0x10, 0x39, 0xc1, - 0x16, 0x89, 0x28, 0x4c, 0x38, 0xec, 0xe6, 0xef, 0x37, 0xed, 0xc8, 0x6d, 0xcc, 0xba, 0x5e, 0x14, - 0x46, 0xc1, 0xec, 0x8a, 0x17, 0x5d, 0x0d, 0xf8, 0x15, 0x52, 0x0b, 0xb1, 0xa6, 0x78, 0x61, 0x8d, - 0xaf, 0x8c, 0x60, 0xc1, 0xea, 0xe8, 0x37, 0x5d, 0x29, 0xd6, 0x05, 0x1c, 0x2b, 0x0a, 0xfb, 0x83, - 0xec, 0xf4, 0x61, 0x7d, 0x7a, 0xb8, 0xf0, 0x62, 0x3f, 0x31, 0xa2, 0x46, 0x83, 0x19, 0x45, 0x17, - 0xf5, 0x20, 0x66, 0x9d, 0x37, 0x7b, 0x5a, 0xb1, 0xfe, 0x22, 0x32, 0x8e, 0x74, 0x86, 0x3e, 0x9e, - 0x72, 0x8f, 0x79, 0xb6, 0xcb, 0xa9, 0x71, 0x08, 0x87, 0x18, 0x96, 0x65, 0x8a, 0xe5, 0xe0, 0x59, - 0xa9, 0x88, 0x75, 0xa1, 0x65, 0x99, 0x12, 0x08, 0x1c, 0xd3, 0x50, 0x61, 0x4a, 0xfd, 0x09, 0xa7, - 0x51, 0x1c, 0x8c, 0x58, 0x51, 0x87, 0x58, 0xa3, 0x40, 0x17, 0x84, 0x42, 0x81, 0xdb, 0x05, 0x1e, - 0x4e, 0x28, 0x14, 0x64, 0x77, 0x69, 0x5a, 0xa0, 0x8b, 0x30, 0x4c, 0x6e, 0x47, 0x24, 0xf0, 0x9c, - 0x06, 0xad, 0xa1, 0x3f, 0x8e, 0x9f, 0xb9, 0x14, 0x83, 0xb1, 0x4e, 0x83, 0x36, 0x60, 0x3c, 0xe4, - 0x7a, 0x36, 0x15, 0x02, 0x9f, 0xeb, 0x2b, 0x9f, 0x52, 0xef, 0xa9, 0x4d, 0xf4, 0x01, 0x03, 0xf1, - 0xdd, 0x49, 0x46, 0x99, 0x48, 0xb2, 0x40, 0xaf, 0xc1, 0x58, 0xc3, 0x77, 0xea, 0xf3, 0x4e, 0xc3, - 0xf1, 0x6a, 0xac, 0x7f, 0x86, 0xcc, 0x5c, 0xe5, 0xab, 0x06, 0x16, 0x27, 0xa8, 0xa9, 0xf0, 0xa6, - 0x43, 0x44, 0x98, 0x36, 0xc7, 0xdb, 0x22, 0xe1, 0x74, 0x89, 0x7d, 0x15, 0x13, 0xde, 0x56, 0x73, - 0x68, 0x70, 0x6e, 0x69, 0xf4, 0x12, 0x8c, 0xc8, 0xcf, 0xd7, 0x82, 0xb2, 0xc4, 0x4f, 0x62, 0x34, - 0x1c, 0x36, 0x28, 0x51, 0x08, 0xc7, 0xe5, 0xff, 0x8d, 0xc0, 0xd9, 0xdc, 0x74, 0x6b, 0x22, 0x52, - 0x01, 0x7f, 0x3e, 0xfc, 0x61, 0xf9, 0x56, 0x71, 0x29, 0x8b, 0xe8, 0x60, 0xbf, 0x7c, 0x4a, 0xf4, - 0x5a, 0x26, 0x1e, 0x67, 0xf3, 0x46, 0x6b, 0x30, 0xb5, 0x4d, 0x9c, 0x46, 0xb4, 0xbd, 0xb0, 0x4d, - 0x6a, 0x3b, 0x72, 0xc1, 0xb1, 0x30, 0x2f, 0xda, 0xd3, 0x91, 0xcb, 0x69, 0x12, 0x9c, 0x55, 0x0e, - 0xbd, 0x05, 0xd3, 0xad, 0xf6, 0xcd, 0x86, 0x1b, 0x6e, 0xaf, 0xfb, 0x11, 0x73, 0x42, 0x9a, 0xab, - 0xd7, 0x03, 0x12, 0xf2, 0xd7, 0xa5, 0xec, 0xe8, 0x95, 0x81, 0x74, 0x2a, 0x39, 0x74, 0x38, 0x97, - 0x03, 0xba, 0x03, 0xc7, 0x13, 0x13, 0x41, 0x44, 0xc4, 0x18, 0xcb, 0x4f, 0x80, 0x53, 0xcd, 0x2a, - 0x20, 0x82, 0xcb, 0x64, 0xa1, 0x70, 0x76, 0x15, 0xe8, 0x65, 0x00, 0xb7, 0xb5, 0xec, 0x34, 0xdd, - 0x06, 0xbd, 0x2a, 0x4e, 0xb1, 0x39, 0x42, 0xaf, 0x0d, 0xb0, 0x52, 0x91, 0x50, 0xba, 0x37, 0x8b, - 0x7f, 0x7b, 0x58, 0xa3, 0x46, 0xab, 0x30, 0x26, 0xfe, 0xed, 0x89, 0x21, 0x9d, 0x54, 0xb9, 0x12, - 0xc7, 0x64, 0x09, 0x35, 0x8e, 0x09, 0x08, 0x4e, 0x94, 0x45, 0x5b, 0x70, 0x5a, 0x26, 0x6a, 0xd4, - 0xe7, 0xa7, 0x1c, 0x83, 0x90, 0x65, 0x9d, 0x19, 0xe2, 0xaf, 0x52, 0xe6, 0x3a, 0x11, 0xe2, 0xce, - 0x7c, 0xe8, 0xb9, 0xae, 0x4f, 0x73, 0xfe, 0xe6, 0xf8, 0x78, 0x1c, 0x71, 0x70, 0x35, 0x89, 0xc4, - 0x69, 0x7a, 0xe4, 0xc3, 0x71, 0xd7, 0xcb, 0x9a, 0xd5, 0x27, 0x18, 0xa3, 0x0f, 0xf1, 0xe7, 0xd6, - 0x9d, 0x67, 0x74, 0x26, 0x1e, 0x67, 0xf3, 0x7d, 0x67, 0x7e, 0x7f, 0x7f, 0x60, 0xd1, 0xd2, 0x9a, - 0x74, 0x8e, 0x3e, 0x05, 0x23, 0xfa, 0x47, 0x09, 0x49, 0xe3, 0x5c, 0xb6, 0xf0, 0xaa, 0xed, 0x09, - 0x5c, 0xb6, 0x57, 0xeb, 0x5e, 0xc7, 0x61, 0x83, 0x23, 0xaa, 0x65, 0xc4, 0x36, 0xb8, 0xd0, 0x9b, - 0x24, 0xd3, 0xbb, 0xdb, 0x1b, 0x81, 0xec, 0xe9, 0x8e, 0x56, 0x61, 0xa8, 0xd6, 0x70, 0x89, 0x17, - 0xad, 0x54, 0x3a, 0x45, 0x6f, 0x5c, 0x10, 0x34, 0x62, 0xfd, 0x88, 0x04, 0x32, 0x1c, 0x86, 0x15, - 0x07, 0xfb, 0x25, 0x18, 0xae, 0x36, 0x08, 0x69, 0xf1, 0xe7, 0x3b, 0xe8, 0x49, 0x76, 0x9b, 0x60, - 0xf2, 0xa0, 0xc5, 0xe4, 0x41, 0xfd, 0xa2, 0xc0, 0x24, 0x41, 0x89, 0xb7, 0x7f, 0xb3, 0x00, 0xe5, - 0x2e, 0x79, 0x8c, 0x12, 0x06, 0x2c, 0xab, 0x27, 0x03, 0xd6, 0x1c, 0x8c, 0xc7, 0xff, 0x74, 0xdd, - 0x98, 0xf2, 0x81, 0xbd, 0x6e, 0xa2, 0x71, 0x92, 0xbe, 0xe7, 0xe7, 0x0c, 0xba, 0x0d, 0xac, 0xaf, - 0xeb, 0x83, 0x1c, 0xc3, 0xf6, 0xdd, 0xdf, 0xfb, 0x85, 0x39, 0xd7, 0x8e, 0x69, 0x7f, 0xad, 0x00, - 0xc7, 0x55, 0x17, 0x7e, 0xfb, 0x76, 0xdc, 0xb5, 0x74, 0xc7, 0xdd, 0x07, 0x2b, 0xb0, 0x7d, 0x15, - 0x06, 0x78, 0x20, 0xcb, 0x1e, 0x04, 0xf5, 0x47, 0xcd, 0xf8, 0xda, 0x4a, 0x36, 0x34, 0x62, 0x6c, - 0x7f, 0xbf, 0x05, 0xe3, 0x89, 0x77, 0x71, 0x08, 0x6b, 0x8f, 0xa7, 0xef, 0x45, 0x98, 0xce, 0x12, - 0xd3, 0xcf, 0x42, 0xdf, 0xb6, 0x1f, 0x46, 0x49, 0x17, 0x91, 0xcb, 0x7e, 0x18, 0x61, 0x86, 0xb1, - 0xff, 0xc8, 0x82, 0xfe, 0x0d, 0xc7, 0xf5, 0x22, 0x69, 0x4e, 0xb0, 0x72, 0xcc, 0x09, 0xbd, 0x7c, - 0x17, 0x7a, 0x11, 0x06, 0xc8, 0xe6, 0x26, 0xa9, 0x45, 0x62, 0x54, 0x65, 0x10, 0x85, 0x81, 0x25, - 0x06, 0xa5, 0x92, 0x23, 0xab, 0x8c, 0xff, 0xc5, 0x82, 0x18, 0xdd, 0x80, 0x52, 0xe4, 0x36, 0xc9, - 0x5c, 0xbd, 0x2e, 0x8c, 0xec, 0xf7, 0x10, 0xf9, 0x63, 0x43, 0x32, 0xc0, 0x31, 0x2f, 0xfb, 0x8b, - 0x05, 0x80, 0x38, 0x02, 0x58, 0xb7, 0x4f, 0x9c, 0x4f, 0x99, 0x5f, 0xcf, 0x65, 0x98, 0x5f, 0x51, - 0xcc, 0x30, 0xc3, 0xf6, 0xaa, 0xba, 0xa9, 0xd8, 0x53, 0x37, 0xf5, 0x1d, 0xa6, 0x9b, 0x16, 0x60, - 0x32, 0x8e, 0x60, 0x66, 0x06, 0x70, 0x64, 0x87, 0xee, 0x46, 0x12, 0x89, 0xd3, 0xf4, 0x36, 0x81, - 0xb3, 0x2a, 0x90, 0x93, 0x38, 0x0b, 0x99, 0x07, 0xb9, 0x6e, 0xce, 0xee, 0xd2, 0x4f, 0xb1, 0x7d, - 0xb9, 0x90, 0x6b, 0x5f, 0xfe, 0x71, 0x0b, 0x8e, 0x25, 0xeb, 0x61, 0xcf, 0xad, 0x3f, 0x6f, 0xc1, - 0xf1, 0x38, 0x8d, 0x47, 0xda, 0xa6, 0xff, 0x42, 0xc7, 0xe0, 0x54, 0x39, 0x2d, 0x8e, 0xa3, 0x75, - 0xac, 0x65, 0xb1, 0xc6, 0xd9, 0x35, 0xda, 0xff, 0xb3, 0x0f, 0xa6, 0xf3, 0xa2, 0x5a, 0xb1, 0x07, - 0x26, 0xce, 0xed, 0xea, 0x0e, 0xb9, 0x25, 0xdc, 0xf8, 0xe3, 0x07, 0x26, 0x1c, 0x8c, 0x25, 0x3e, - 0x99, 0xb9, 0xa5, 0xd0, 0x63, 0xe6, 0x96, 0x6d, 0x98, 0xbc, 0xb5, 0x4d, 0xbc, 0x6b, 0x5e, 0xe8, - 0x44, 0x6e, 0xb8, 0xe9, 0x32, 0x8b, 0x34, 0x9f, 0x37, 0x32, 0xfb, 0xf8, 0xe4, 0x8d, 0x24, 0xc1, - 0xc1, 0x7e, 0xf9, 0xb4, 0x01, 0x88, 0x9b, 0xcc, 0x37, 0x12, 0x9c, 0x66, 0x9a, 0x4e, 0x7c, 0xd3, - 0xf7, 0x80, 0x13, 0xdf, 0x34, 0x5d, 0xe1, 0xc7, 0x22, 0x5f, 0x0f, 0xb0, 0xbb, 0xe6, 0x9a, 0x82, - 0x62, 0x8d, 0x02, 0x7d, 0x02, 0x90, 0x9e, 0xb9, 0xcc, 0x08, 0x2a, 0xfa, 0xec, 0xdd, 0xfd, 0x32, - 0x5a, 0x4f, 0x61, 0x0f, 0xf6, 0xcb, 0x53, 0x14, 0xba, 0xe2, 0xd1, 0x3b, 0x6b, 0x1c, 0x89, 0x2d, - 0x83, 0x11, 0xba, 0x01, 0x13, 0x14, 0xca, 0x56, 0x94, 0x8c, 0x58, 0xca, 0xef, 0x99, 0x4f, 0xdf, - 0xdd, 0x2f, 0x4f, 0xac, 0x27, 0x70, 0x79, 0xac, 0x53, 0x4c, 0x32, 0xf2, 0xdf, 0x0c, 0xf5, 0x9a, - 0xff, 0xc6, 0xfe, 0xbc, 0x05, 0x27, 0xe9, 0x01, 0x57, 0x5f, 0xcd, 0x31, 0x4b, 0x3b, 0x2d, 0x97, - 0x1b, 0x3e, 0xc4, 0x51, 0xc3, 0x14, 0x6c, 0x95, 0x15, 0x6e, 0xf6, 0x50, 0x58, 0xba, 0xc3, 0xef, - 0xb8, 0x5e, 0x3d, 0xb9, 0xc3, 0x5f, 0x71, 0xbd, 0x3a, 0x66, 0x18, 0x75, 0x64, 0x15, 0x73, 0x1f, - 0x31, 0x7c, 0x85, 0xae, 0x55, 0xda, 0x96, 0x6f, 0x6a, 0x33, 0xd0, 0xd3, 0xba, 0x91, 0x52, 0xf8, - 0x23, 0xe6, 0x1a, 0x28, 0x3f, 0x67, 0x81, 0x78, 0xf4, 0xdc, 0xc3, 0x99, 0xfc, 0x26, 0x8c, 0xec, - 0xa6, 0xb3, 0x3a, 0x9e, 0xcd, 0x7f, 0x05, 0x2e, 0x62, 0xb5, 0x2b, 0x11, 0xdd, 0xc8, 0xe0, 0x68, - 0xf0, 0xb2, 0xeb, 0x20, 0xb0, 0x8b, 0x84, 0x99, 0x22, 0xba, 0xb7, 0xe6, 0x39, 0x80, 0x3a, 0xa3, - 0x65, 0xa9, 0x9e, 0x0b, 0xa6, 0xc4, 0xb5, 0xa8, 0x30, 0x58, 0xa3, 0xb2, 0x7f, 0xa7, 0x00, 0xc3, - 0x32, 0x8b, 0x60, 0xdb, 0xeb, 0x45, 0x61, 0x78, 0xa8, 0xb4, 0xe2, 0xe8, 0x02, 0x94, 0x98, 0x46, - 0xbb, 0x12, 0xeb, 0x59, 0x95, 0x3e, 0x69, 0x4d, 0x22, 0x70, 0x4c, 0xc3, 0xc4, 0xf7, 0xf6, 0x4d, - 0x46, 0x9e, 0x78, 0xa2, 0x5b, 0xe5, 0x60, 0x2c, 0xf1, 0xe8, 0xa3, 0x30, 0xc1, 0xcb, 0x05, 0x7e, - 0xcb, 0xd9, 0xe2, 0x56, 0xb0, 0x7e, 0x15, 0xf7, 0x64, 0x62, 0x2d, 0x81, 0x3b, 0xd8, 0x2f, 0x1f, - 0x4b, 0xc2, 0x98, 0x79, 0x37, 0xc5, 0x85, 0x39, 0xbb, 0xf1, 0x4a, 0xe8, 0xae, 0x9e, 0xf2, 0x91, - 0x8b, 0x51, 0x58, 0xa7, 0xb3, 0x3f, 0x05, 0x28, 0x9d, 0x4f, 0x11, 0xbd, 0xce, 0x9d, 0xa5, 0xdd, - 0x80, 0xd4, 0x3b, 0x99, 0x7b, 0xf5, 0xe8, 0x1e, 0xf2, 0x75, 0x1d, 0x2f, 0x85, 0x55, 0x79, 0xfb, - 0x07, 0xfa, 0x60, 0x22, 0x19, 0x4f, 0x00, 0x5d, 0x86, 0x01, 0x2e, 0x52, 0x0a, 0xf6, 0x1d, 0xbc, - 0x89, 0xb4, 0x28, 0x04, 0xec, 0x70, 0x15, 0x52, 0xa9, 0x28, 0x8f, 0xde, 0x82, 0xe1, 0xba, 0x7f, - 0xcb, 0xbb, 0xe5, 0x04, 0xf5, 0xb9, 0xca, 0x8a, 0x98, 0xce, 0x99, 0x2a, 0x8e, 0xc5, 0x98, 0x4c, - 0x8f, 0x6c, 0xc0, 0x2c, 0xe7, 0x31, 0x0a, 0xeb, 0xec, 0xd0, 0x06, 0x4b, 0x11, 0xb2, 0xe9, 0x6e, - 0xad, 0x39, 0xad, 0x4e, 0x2f, 0x67, 0x16, 0x24, 0x91, 0xc6, 0x79, 0x54, 0xe4, 0x11, 0xe1, 0x08, - 0x1c, 0x33, 0x42, 0x9f, 0x81, 0xa9, 0x30, 0xc7, 0xe8, 0x92, 0x97, 0x5e, 0xb7, 0x93, 0x1d, 0x62, - 0xfe, 0xa1, 0xbb, 0xfb, 0xe5, 0xa9, 0x2c, 0xf3, 0x4c, 0x56, 0x35, 0xe8, 0x36, 0x20, 0xa1, 0xdc, - 0xdc, 0x08, 0xda, 0x61, 0x34, 0xdf, 0xf6, 0xea, 0x0d, 0x99, 0x42, 0x24, 0x3b, 0x01, 0x77, 0x8a, - 0x5a, 0xab, 0x9b, 0xc5, 0x17, 0x4d, 0x53, 0xe0, 0x8c, 0x3a, 0xec, 0xcf, 0xf5, 0xc1, 0x8c, 0x4c, - 0x60, 0x9a, 0xf1, 0x42, 0xe0, 0xb3, 0x56, 0xe2, 0x89, 0xc0, 0xcb, 0xf9, 0xbb, 0xd2, 0x03, 0x7b, - 0x28, 0xf0, 0x85, 0xf4, 0x43, 0x81, 0x57, 0x0f, 0xd9, 0x8c, 0xfb, 0xf6, 0x5c, 0xe0, 0xdb, 0xd6, - 0xc7, 0xff, 0x4b, 0xc7, 0xc0, 0x38, 0x47, 0x8c, 0x84, 0xff, 0xd6, 0x7d, 0x4a, 0xf8, 0x8f, 0x61, - 0x88, 0x34, 0x5b, 0xd1, 0xde, 0xa2, 0x1b, 0x88, 0x16, 0x67, 0xf2, 0x5c, 0x12, 0x34, 0x69, 0x9e, - 0x12, 0x83, 0x15, 0x1f, 0xb4, 0x0b, 0x93, 0x5b, 0x35, 0x92, 0xc8, 0xf9, 0x5d, 0xcc, 0x5f, 0xb7, - 0x97, 0x16, 0x96, 0x3a, 0x24, 0xfc, 0x66, 0x37, 0x95, 0x14, 0x09, 0x4e, 0x57, 0xc1, 0xf2, 0x8d, - 0x3b, 0xb7, 0xc2, 0xa5, 0x86, 0x13, 0x46, 0x6e, 0x6d, 0xbe, 0xe1, 0xd7, 0x76, 0xaa, 0x91, 0x1f, - 0xc8, 0x84, 0x63, 0x99, 0x17, 0x85, 0xb9, 0x1b, 0xd5, 0x14, 0x7d, 0x3a, 0xdf, 0x78, 0x16, 0x15, - 0xce, 0xac, 0x0b, 0xad, 0xc3, 0xe0, 0x96, 0x1b, 0x61, 0xd2, 0xf2, 0xc5, 0x6e, 0x91, 0xb9, 0x15, - 0x5e, 0xe2, 0x24, 0xe9, 0xfc, 0xdf, 0x02, 0x81, 0x25, 0x13, 0xf4, 0xba, 0x3a, 0x04, 0x06, 0xf2, - 0xb5, 0x85, 0x69, 0xcf, 0xab, 0xcc, 0x63, 0xe0, 0x35, 0x28, 0x7a, 0x9b, 0x61, 0xa7, 0x78, 0x21, - 0xeb, 0xcb, 0xd5, 0x74, 0x5e, 0xee, 0xf5, 0xe5, 0x2a, 0xa6, 0x05, 0xd9, 0xd3, 0xc2, 0xb0, 0x16, - 0xba, 0x22, 0x75, 0x4a, 0xe6, 0x4b, 0xcb, 0x95, 0xea, 0x42, 0x75, 0x25, 0x9d, 0x8b, 0x9c, 0x81, - 0x31, 0x2f, 0x8e, 0xae, 0x43, 0x69, 0x8b, 0x6f, 0x7c, 0x9b, 0xa1, 0x48, 0x62, 0x9c, 0x79, 0x18, - 0x5d, 0x92, 0x44, 0xe9, 0x0c, 0xe4, 0x0a, 0x85, 0x63, 0x56, 0xe8, 0x73, 0x16, 0x1c, 0x4f, 0x66, - 0x81, 0x66, 0x0f, 0x82, 0x84, 0x93, 0xd2, 0x8b, 0xbd, 0xa4, 0xe5, 0x66, 0x05, 0x8c, 0x0a, 0x99, - 0x82, 0x3f, 0x93, 0x0c, 0x67, 0x57, 0x47, 0x3b, 0x3a, 0xb8, 0x59, 0x17, 0xce, 0x32, 0x99, 0x1d, - 0x9d, 0x08, 0x9e, 0xc2, 0x3b, 0x1a, 0xcf, 0x2f, 0x62, 0x5a, 0x10, 0x6d, 0x00, 0x6c, 0x36, 0x88, - 0x4c, 0x58, 0x3f, 0x92, 0x7f, 0xfa, 0x2f, 0x2b, 0x2a, 0x99, 0x2d, 0x88, 0xca, 0x84, 0x31, 0x14, - 0x6b, 0x7c, 0xe8, 0x54, 0xaa, 0xb9, 0x5e, 0x9d, 0x04, 0xcc, 0x7c, 0x92, 0x33, 0x95, 0x16, 0x18, - 0x45, 0x7a, 0x2a, 0x71, 0x38, 0x16, 0x1c, 0x18, 0x2f, 0xd2, 0xda, 0xde, 0x0c, 0x3b, 0x85, 0xc5, - 0x5f, 0x20, 0xad, 0xed, 0xc4, 0x84, 0xe2, 0xbc, 0x18, 0x1c, 0x0b, 0x0e, 0x74, 0xc9, 0x6c, 0xd2, - 0x05, 0x44, 0x82, 0xe9, 0xf1, 0xfc, 0x25, 0xb3, 0xcc, 0x49, 0xd2, 0x4b, 0x46, 0x20, 0xb0, 0x64, - 0x82, 0x3e, 0x69, 0x4a, 0x3b, 0x13, 0x8c, 0xe7, 0xd3, 0x5d, 0xa4, 0x1d, 0x83, 0x6f, 0x67, 0x79, - 0xe7, 0x65, 0x28, 0x6c, 0xd6, 0x98, 0xd9, 0x25, 0x47, 0xc1, 0xbd, 0xbc, 0x60, 0x70, 0x63, 0x61, - 0xa6, 0x97, 0x17, 0x70, 0x61, 0xb3, 0x46, 0xa7, 0xbe, 0x73, 0xa7, 0x1d, 0x90, 0x65, 0xb7, 0x41, - 0x44, 0x88, 0xfc, 0xcc, 0xa9, 0x3f, 0x27, 0x89, 0xd2, 0x53, 0x5f, 0xa1, 0x70, 0xcc, 0x8a, 0xf2, - 0x8d, 0x65, 0xb0, 0xa9, 0x7c, 0xbe, 0x4a, 0xd4, 0x4a, 0xf3, 0xcd, 0x94, 0xc2, 0x76, 0x60, 0x74, - 0x37, 0x6c, 0x6d, 0x13, 0xb9, 0x2b, 0x32, 0x83, 0x50, 0xce, 0x6b, 0xfa, 0xeb, 0x82, 0xd0, 0x0d, - 0xa2, 0xb6, 0xd3, 0x48, 0x6d, 0xe4, 0x4c, 0x0f, 0x70, 0x5d, 0x67, 0x86, 0x4d, 0xde, 0x74, 0x22, - 0xbc, 0xcd, 0x43, 0x5e, 0x31, 0xd3, 0x50, 0xce, 0x44, 0xc8, 0x88, 0x8a, 0xc5, 0x27, 0x82, 0x40, - 0x60, 0xc9, 0x44, 0x75, 0x36, 0x3b, 0x80, 0x4e, 0x74, 0xe9, 0xec, 0x54, 0x7b, 0xe3, 0xce, 0x66, - 0x07, 0x4e, 0xcc, 0x8a, 0x1d, 0x34, 0xad, 0x8c, 0x84, 0xd9, 0xd3, 0x0f, 0xe5, 0x1f, 0x34, 0xdd, - 0x12, 0x6c, 0xf3, 0x83, 0x26, 0x8b, 0x0a, 0x67, 0xd6, 0x45, 0x3f, 0xae, 0x25, 0xa3, 0x97, 0x89, - 0x30, 0xfe, 0x4f, 0xe6, 0x04, 0xff, 0x4b, 0x87, 0x38, 0xe3, 0x1f, 0xa7, 0x50, 0x38, 0x66, 0x85, - 0xea, 0x30, 0xd6, 0x32, 0xa2, 0x62, 0xb2, 0x74, 0x04, 0x39, 0x72, 0x41, 0x56, 0xfc, 0x4c, 0xae, - 0xce, 0x30, 0x31, 0x38, 0xc1, 0x93, 0xf9, 0x86, 0xf1, 0x87, 0x5e, 0x2c, 0x5b, 0x41, 0xce, 0x50, - 0x67, 0xbc, 0x05, 0xe3, 0x43, 0x2d, 0x10, 0x58, 0x32, 0xa1, 0xbd, 0x21, 0x9e, 0x27, 0xf9, 0x21, - 0x4b, 0xfa, 0x91, 0x67, 0xc2, 0xcd, 0xb2, 0x69, 0xc8, 0x50, 0xd0, 0x02, 0x85, 0x63, 0x56, 0x74, - 0x27, 0xa7, 0x07, 0xde, 0xa9, 0xfc, 0x9d, 0x3c, 0x79, 0xdc, 0xb1, 0x9d, 0x9c, 0x1e, 0x76, 0x45, - 0x71, 0xd4, 0xa9, 0xc8, 0xc5, 0x2c, 0x61, 0x41, 0x4e, 0xbb, 0x54, 0xe8, 0xe3, 0x74, 0xbb, 0x14, - 0x0a, 0xc7, 0xac, 0xec, 0x1f, 0x28, 0xc0, 0x99, 0xce, 0xeb, 0x2d, 0x36, 0xd4, 0x54, 0x62, 0x6f, - 0x96, 0x84, 0xa1, 0x86, 0xab, 0x0d, 0x62, 0xaa, 0x9e, 0x83, 0x99, 0x5e, 0x82, 0x49, 0xf5, 0x88, - 0xac, 0xe1, 0xd6, 0xf6, 0xd6, 0x63, 0x4d, 0x8d, 0x0a, 0xfb, 0x51, 0x4d, 0x12, 0xe0, 0x74, 0x19, - 0x34, 0x07, 0xe3, 0x06, 0x70, 0x65, 0x51, 0xa8, 0x07, 0xe2, 0x10, 0xf9, 0x26, 0x1a, 0x27, 0xe9, - 0xed, 0x9f, 0xb5, 0xe0, 0xa1, 0x9c, 0x7c, 0xc5, 0x3d, 0xc7, 0xea, 0xdc, 0x84, 0xf1, 0x96, 0x59, - 0xb4, 0x4b, 0x78, 0x61, 0x23, 0x2b, 0xb2, 0x6a, 0x6b, 0x02, 0x81, 0x93, 0x4c, 0xed, 0x9f, 0x2e, - 0xc0, 0xe9, 0x8e, 0x5e, 0xd1, 0x08, 0xc3, 0x89, 0xad, 0x66, 0xe8, 0x2c, 0x04, 0xa4, 0x4e, 0xbc, - 0xc8, 0x75, 0x1a, 0xd5, 0x16, 0xa9, 0x69, 0xa6, 0x36, 0xe6, 0x5e, 0x7c, 0x69, 0xad, 0x3a, 0x97, - 0xa6, 0xc0, 0x39, 0x25, 0xd1, 0x32, 0xa0, 0x34, 0x46, 0x8c, 0x30, 0xbb, 0x9a, 0xa6, 0xf9, 0xe1, - 0x8c, 0x12, 0xe8, 0x83, 0x30, 0xaa, 0xbc, 0xad, 0xb5, 0x11, 0x67, 0x1b, 0x3b, 0xd6, 0x11, 0xd8, - 0xa4, 0x43, 0x17, 0x79, 0xee, 0x14, 0x91, 0x65, 0x47, 0xd8, 0xe5, 0xc6, 0x65, 0x62, 0x14, 0x01, - 0xc6, 0x3a, 0xcd, 0xfc, 0x4b, 0xbf, 0xf5, 0x8d, 0x33, 0xef, 0xfb, 0xbd, 0x6f, 0x9c, 0x79, 0xdf, - 0x1f, 0x7e, 0xe3, 0xcc, 0xfb, 0xbe, 0xfb, 0xee, 0x19, 0xeb, 0xb7, 0xee, 0x9e, 0xb1, 0x7e, 0xef, - 0xee, 0x19, 0xeb, 0x0f, 0xef, 0x9e, 0xb1, 0xfe, 0xd3, 0xdd, 0x33, 0xd6, 0x17, 0xff, 0xe4, 0xcc, - 0xfb, 0xde, 0x44, 0x71, 0xf4, 0xdb, 0x0b, 0x74, 0x74, 0x2e, 0xec, 0x5e, 0xfc, 0xbf, 0x01, 0x00, - 0x00, 0xff, 0xff, 0x91, 0xe1, 0xcb, 0x3a, 0xdc, 0x19, 0x01, 0x00, + 0x8b, 0xd0, 0xb7, 0xed, 0x7a, 0x8d, 0xe9, 0x01, 0xc6, 0xeb, 0x34, 0x1d, 0xf3, 0x2b, 0xae, 0xd7, + 0x38, 0xd8, 0x2f, 0x4f, 0x1a, 0xcd, 0xa1, 0x40, 0xcc, 0x48, 0xed, 0xff, 0x61, 0x41, 0x99, 0xe1, + 0x96, 0xdd, 0x26, 0xa9, 0x92, 0x20, 0x74, 0xc3, 0x88, 0x78, 0x91, 0xd1, 0xa1, 0xcf, 0x01, 0x84, + 0xa4, 0x1e, 0x90, 0x48, 0xeb, 0x52, 0x35, 0x31, 0x6a, 0x0a, 0x83, 0x35, 0x2a, 0xba, 0x21, 0x84, + 0x5b, 0x4e, 0xc0, 0xe6, 0x97, 0xe8, 0x58, 0xb5, 0x21, 0xd4, 0x24, 0x02, 0xc7, 0x34, 0xc6, 0x86, + 0x50, 0xec, 0xb6, 0x21, 0xa0, 0x0f, 0xc3, 0x78, 0x5c, 0x59, 0xd8, 0x72, 0xea, 0xb2, 0x03, 0xd9, + 0x92, 0xa9, 0x99, 0x28, 0x9c, 0xa4, 0xb5, 0xff, 0x81, 0x25, 0x26, 0x0f, 0xfd, 0xea, 0x77, 0xf9, + 0xb7, 0xda, 0xbf, 0x64, 0xc1, 0xe0, 0xbc, 0xeb, 0x35, 0x5c, 0x6f, 0x13, 0x7d, 0x0a, 0x86, 0xe8, + 0xd9, 0xd4, 0x70, 0x22, 0x47, 0xec, 0x7b, 0xef, 0xd7, 0xd6, 0x96, 0x3a, 0x2a, 0x66, 0x5b, 0xdb, + 0x9b, 0x14, 0x10, 0xce, 0x52, 0x6a, 0xba, 0xda, 0xae, 0xde, 0xfc, 0x34, 0xa9, 0x47, 0xab, 0x24, + 0x72, 0xe2, 0xcf, 0x89, 0x61, 0x58, 0x71, 0x45, 0x57, 0x60, 0x20, 0x72, 0x82, 0x4d, 0x12, 0x89, + 0x0d, 0x30, 0x73, 0xa3, 0xe2, 0x25, 0x31, 0x5d, 0x91, 0xc4, 0xab, 0x93, 0xf8, 0x58, 0x58, 0x67, + 0x45, 0xb1, 0x60, 0x61, 0xff, 0x9f, 0x41, 0x38, 0xb9, 0x50, 0xab, 0xe4, 0xcc, 0xab, 0x73, 0x30, + 0xd0, 0x08, 0xdc, 0x5d, 0x12, 0x88, 0x7e, 0x56, 0x5c, 0x16, 0x19, 0x14, 0x0b, 0x2c, 0x7a, 0x09, + 0x46, 0xf8, 0x81, 0x74, 0xd9, 0xf1, 0x1a, 0x4d, 0xd9, 0xc5, 0xc7, 0x04, 0xf5, 0xc8, 0x75, 0x0d, + 0x87, 0x0d, 0xca, 0x43, 0x4e, 0xaa, 0x73, 0x89, 0xc5, 0x98, 0x77, 0xd8, 0x7d, 0xde, 0x82, 0x09, + 0x5e, 0xcd, 0x5c, 0x14, 0x05, 0xee, 0xcd, 0x76, 0x44, 0xc2, 0xe9, 0x7e, 0xb6, 0xd3, 0x2d, 0x64, + 0xf5, 0x56, 0x6e, 0x0f, 0xcc, 0x5e, 0x4f, 0x70, 0xe1, 0x9b, 0xe0, 0xb4, 0xa8, 0x77, 0x22, 0x89, + 0xc6, 0xa9, 0x6a, 0xd1, 0xf7, 0x5a, 0x30, 0x53, 0xf7, 0xbd, 0x28, 0xf0, 0x9b, 0x4d, 0x12, 0x54, + 0xdb, 0x37, 0x9b, 0x6e, 0xb8, 0xc5, 0xe7, 0x29, 0x26, 0x1b, 0x6c, 0x27, 0xc8, 0x19, 0x43, 0x45, + 0x24, 0xc6, 0xf0, 0xcc, 0xdd, 0xfd, 0xf2, 0xcc, 0x42, 0x2e, 0x2b, 0xdc, 0xa1, 0x1a, 0xb4, 0x0d, + 0x88, 0x1e, 0xa5, 0xb5, 0xc8, 0xd9, 0x24, 0x71, 0xe5, 0x83, 0xbd, 0x57, 0x7e, 0xe2, 0xee, 0x7e, + 0x19, 0xad, 0xa5, 0x58, 0xe0, 0x0c, 0xb6, 0xe8, 0x6d, 0x38, 0x46, 0xa1, 0xa9, 0x6f, 0x1d, 0xea, + 0xbd, 0xba, 0xe9, 0xbb, 0xfb, 0xe5, 0x63, 0x6b, 0x19, 0x4c, 0x70, 0x26, 0x6b, 0xf4, 0xdd, 0x16, + 0x9c, 0x8c, 0x3f, 0x7f, 0xe9, 0x76, 0xcb, 0xf1, 0x1a, 0x71, 0xc5, 0xa5, 0xde, 0x2b, 0xa6, 0x7b, + 0xf2, 0xc9, 0x85, 0x3c, 0x4e, 0x38, 0xbf, 0x12, 0xe4, 0xc1, 0x14, 0x6d, 0x5a, 0xb2, 0x6e, 0xe8, + 0xbd, 0xee, 0x87, 0xee, 0xee, 0x97, 0xa7, 0xd6, 0xd2, 0x3c, 0x70, 0x16, 0xe3, 0x99, 0x05, 0x38, + 0x9e, 0x39, 0x3b, 0xd1, 0x04, 0x14, 0xb7, 0x09, 0x97, 0xba, 0x4a, 0x98, 0xfe, 0x44, 0xc7, 0xa0, + 0x7f, 0xd7, 0x69, 0xb6, 0xc5, 0xc2, 0xc4, 0xfc, 0xcf, 0xcb, 0x85, 0x97, 0x2c, 0xfb, 0x5f, 0x17, + 0x61, 0x7c, 0xa1, 0x56, 0xb9, 0xa7, 0x55, 0xaf, 0x1f, 0x7b, 0x85, 0x8e, 0xc7, 0x5e, 0x7c, 0x88, + 0x16, 0x73, 0x0f, 0xd1, 0xef, 0xca, 0x58, 0xb2, 0x7d, 0x6c, 0xc9, 0x7e, 0x28, 0x67, 0xc9, 0xde, + 0xe7, 0x85, 0xba, 0x9b, 0x33, 0x6b, 0xfb, 0xd9, 0x00, 0x66, 0x4a, 0x48, 0x2b, 0x7e, 0xdd, 0x69, + 0x26, 0xb7, 0xda, 0x43, 0x4e, 0xdd, 0xfb, 0x33, 0x8e, 0x75, 0x18, 0x59, 0x70, 0x5a, 0xce, 0x4d, + 0xb7, 0xe9, 0x46, 0x2e, 0x09, 0xd1, 0x13, 0x50, 0x74, 0x1a, 0x0d, 0x26, 0xdd, 0x95, 0xe6, 0x8f, + 0xdf, 0xdd, 0x2f, 0x17, 0xe7, 0x1a, 0x54, 0xcc, 0x00, 0x45, 0xb5, 0x87, 0x29, 0x05, 0x7a, 0x0a, + 0xfa, 0x1a, 0x81, 0xdf, 0x9a, 0x2e, 0x30, 0x4a, 0xba, 0xca, 0xfb, 0x16, 0x03, 0xbf, 0x95, 0x20, + 0x65, 0x34, 0xf6, 0x6f, 0x14, 0xe0, 0xd4, 0x02, 0x69, 0x6d, 0x2d, 0xd7, 0x72, 0xce, 0x8b, 0xf3, + 0x30, 0xb4, 0xe3, 0x7b, 0x6e, 0xe4, 0x07, 0xa1, 0xa8, 0x9a, 0xcd, 0x88, 0x55, 0x01, 0xc3, 0x0a, + 0x8b, 0xce, 0x42, 0x5f, 0x2b, 0x16, 0x62, 0x47, 0xa4, 0x00, 0xcc, 0xc4, 0x57, 0x86, 0xa1, 0x14, + 0xed, 0x90, 0x04, 0x62, 0xc6, 0x28, 0x8a, 0x6b, 0x21, 0x09, 0x30, 0xc3, 0xc4, 0x92, 0x00, 0x95, + 0x11, 0xc4, 0x89, 0x90, 0x90, 0x04, 0x28, 0x06, 0x6b, 0x54, 0xa8, 0x0a, 0xa5, 0x30, 0x31, 0xb2, + 0x3d, 0x2d, 0xcd, 0x51, 0x26, 0x2a, 0xa8, 0x91, 0x8c, 0x99, 0x18, 0x27, 0xd8, 0x40, 0x57, 0x51, + 0xe1, 0x6b, 0x05, 0x40, 0xbc, 0x0b, 0xbf, 0xc5, 0x3a, 0xee, 0x5a, 0xba, 0xe3, 0x7a, 0x5f, 0x12, + 0xf7, 0xab, 0xf7, 0xfe, 0xa7, 0x05, 0xa7, 0x16, 0x5c, 0xaf, 0x41, 0x82, 0x9c, 0x09, 0xf8, 0x60, + 0xee, 0xce, 0x87, 0x13, 0x52, 0x8c, 0x29, 0xd6, 0x77, 0x1f, 0xa6, 0x98, 0xfd, 0xe7, 0x16, 0x20, + 0xfe, 0xd9, 0xef, 0xba, 0x8f, 0xbd, 0x96, 0xfe, 0xd8, 0xfb, 0x30, 0x2d, 0xec, 0x7f, 0x64, 0xc1, + 0xf0, 0x42, 0xd3, 0x71, 0x77, 0xc4, 0xa7, 0x2e, 0xc0, 0xa4, 0x54, 0x14, 0x31, 0xb0, 0x26, 0xfb, + 0xd3, 0xcd, 0x6d, 0x12, 0x27, 0x91, 0x38, 0x4d, 0x8f, 0x3e, 0x0e, 0x27, 0x0d, 0xe0, 0x3a, 0xd9, + 0x69, 0x35, 0x9d, 0x48, 0xbf, 0x15, 0xb0, 0xd3, 0x1f, 0xe7, 0x11, 0xe1, 0xfc, 0xf2, 0xf6, 0x0a, + 0x8c, 0x2d, 0x34, 0x5d, 0xe2, 0x45, 0x95, 0xea, 0x82, 0xef, 0x6d, 0xb8, 0x9b, 0xe8, 0x65, 0x18, + 0x8b, 0xdc, 0x1d, 0xe2, 0xb7, 0xa3, 0x1a, 0xa9, 0xfb, 0x1e, 0xbb, 0x6b, 0x5b, 0xe7, 0xfb, 0xe7, + 0xd1, 0xdd, 0xfd, 0xf2, 0xd8, 0xba, 0x81, 0xc1, 0x09, 0x4a, 0xfb, 0x27, 0xe9, 0x4e, 0xdb, 0x6c, + 0x87, 0x11, 0x09, 0xd6, 0x83, 0x76, 0x18, 0xcd, 0xb7, 0xa9, 0xb4, 0x5c, 0x0d, 0x7c, 0xda, 0x81, + 0xae, 0xef, 0xa1, 0x53, 0x86, 0x02, 0x61, 0x48, 0x2a, 0x0f, 0x84, 0xa2, 0x60, 0x16, 0x20, 0x74, + 0x37, 0x3d, 0x12, 0x68, 0x9f, 0x36, 0xc6, 0x16, 0xb7, 0x82, 0x62, 0x8d, 0x02, 0x35, 0x61, 0xb4, + 0xe9, 0xdc, 0x24, 0xcd, 0x1a, 0x69, 0x92, 0x7a, 0xe4, 0x07, 0x42, 0x05, 0xf2, 0x7c, 0x6f, 0x37, + 0x97, 0x15, 0xbd, 0xe8, 0xfc, 0xe4, 0xdd, 0xfd, 0xf2, 0xa8, 0x01, 0xc2, 0x26, 0x73, 0xba, 0xd9, + 0xf9, 0x2d, 0xfa, 0x15, 0x4e, 0x53, 0xbf, 0x2e, 0x5f, 0x15, 0x30, 0xac, 0xb0, 0x6a, 0xb3, 0xeb, + 0xcb, 0xdb, 0xec, 0xec, 0x3f, 0xa4, 0x4b, 0xc3, 0xdf, 0x69, 0xf9, 0x1e, 0xf1, 0xa2, 0x05, 0xdf, + 0x6b, 0x70, 0xe5, 0xd5, 0xcb, 0xd0, 0x17, 0xd1, 0xa9, 0xce, 0xbb, 0xe7, 0x9c, 0x2c, 0x48, 0x27, + 0xf8, 0xc1, 0x7e, 0xf9, 0x44, 0xba, 0x04, 0x5b, 0x02, 0xac, 0x0c, 0xfa, 0x10, 0x0c, 0x84, 0x91, + 0x13, 0xb5, 0x43, 0xd1, 0x71, 0x8f, 0xc8, 0x85, 0x52, 0x63, 0xd0, 0x83, 0xfd, 0xf2, 0xb8, 0x2a, + 0xc6, 0x41, 0x58, 0x14, 0x40, 0x4f, 0xc2, 0xe0, 0x0e, 0x09, 0x43, 0x67, 0x53, 0x0a, 0x3a, 0xe3, + 0xa2, 0xec, 0xe0, 0x2a, 0x07, 0x63, 0x89, 0x47, 0x8f, 0x42, 0x3f, 0x09, 0x02, 0x3f, 0x10, 0xdf, + 0x36, 0x2a, 0x08, 0xfb, 0x97, 0x28, 0x10, 0x73, 0x9c, 0xfd, 0xef, 0x2c, 0x18, 0x57, 0x6d, 0xe5, + 0x75, 0x1d, 0xc1, 0x05, 0xf3, 0x4d, 0x80, 0xba, 0xfc, 0xc0, 0x90, 0x09, 0x06, 0xc3, 0xcf, 0x9d, + 0xcb, 0x94, 0xc1, 0x52, 0xdd, 0x18, 0x73, 0x56, 0xa0, 0x10, 0x6b, 0xdc, 0xec, 0x5f, 0xb5, 0x60, + 0x2a, 0xf1, 0x45, 0x2b, 0x6e, 0x18, 0xa1, 0xb7, 0x52, 0x5f, 0x35, 0xdb, 0xe3, 0xe4, 0x73, 0x43, + 0xfe, 0x4d, 0x6a, 0x97, 0x92, 0x10, 0xed, 0x8b, 0x2e, 0x43, 0xbf, 0x1b, 0x91, 0x1d, 0xf9, 0x31, + 0x8f, 0x76, 0xfc, 0x18, 0xde, 0xaa, 0x78, 0x44, 0x2a, 0xb4, 0x24, 0xe6, 0x0c, 0xec, 0xdf, 0x28, + 0x42, 0x89, 0xaf, 0xef, 0x55, 0xa7, 0x75, 0x04, 0x63, 0xf1, 0x34, 0x94, 0xdc, 0x9d, 0x9d, 0x76, + 0xe4, 0xdc, 0x14, 0x27, 0xf5, 0x10, 0xdf, 0x35, 0x2b, 0x12, 0x88, 0x63, 0x3c, 0xaa, 0x40, 0x1f, + 0x6b, 0x0a, 0xff, 0xca, 0x27, 0xb2, 0xbf, 0x52, 0xb4, 0x7d, 0x76, 0xd1, 0x89, 0x1c, 0x2e, 0x24, + 0xab, 0x75, 0x45, 0x41, 0x98, 0xb1, 0x40, 0x0e, 0xc0, 0x4d, 0xd7, 0x73, 0x82, 0x3d, 0x0a, 0x9b, + 0x2e, 0x32, 0x86, 0xcf, 0x76, 0x66, 0x38, 0xaf, 0xe8, 0x39, 0x5b, 0xf5, 0x61, 0x31, 0x02, 0x6b, + 0x4c, 0x67, 0x3e, 0x08, 0x25, 0x45, 0x7c, 0x18, 0x59, 0x77, 0xe6, 0xc3, 0x30, 0x9e, 0xa8, 0xab, + 0x5b, 0xf1, 0x11, 0x5d, 0x54, 0xfe, 0x65, 0xb6, 0x65, 0x88, 0x56, 0x2f, 0x79, 0xbb, 0xe2, 0x88, + 0xb9, 0x03, 0xc7, 0x9a, 0x19, 0x87, 0x94, 0x18, 0xd7, 0xde, 0x0f, 0xb5, 0x53, 0xe2, 0xb3, 0x8f, + 0x65, 0x61, 0x71, 0x66, 0x1d, 0xc6, 0x8e, 0x58, 0xe8, 0xb4, 0x23, 0xd2, 0xfd, 0xee, 0x98, 0x6a, + 0xfc, 0x15, 0xb2, 0xa7, 0x36, 0xd5, 0x6f, 0x66, 0xf3, 0x4f, 0xf3, 0xde, 0xe7, 0xdb, 0xe5, 0xb0, + 0x60, 0x50, 0xbc, 0x42, 0xf6, 0xf8, 0x50, 0xe8, 0x5f, 0x57, 0xec, 0xf8, 0x75, 0x5f, 0xb1, 0x60, + 0x54, 0x7d, 0xdd, 0x11, 0xec, 0x0b, 0xf3, 0xe6, 0xbe, 0x70, 0xba, 0xe3, 0x04, 0xcf, 0xd9, 0x11, + 0xbe, 0x56, 0x80, 0x93, 0x8a, 0x86, 0x5e, 0xfb, 0xf8, 0x1f, 0x31, 0xab, 0x2e, 0x40, 0xc9, 0x53, + 0x0a, 0x50, 0xcb, 0xd4, 0x3c, 0xc6, 0xea, 0xcf, 0x98, 0x86, 0x1e, 0x79, 0x5e, 0x7c, 0x68, 0x8f, + 0xe8, 0x96, 0x01, 0x71, 0xb8, 0xcf, 0x43, 0xb1, 0xed, 0x36, 0xc4, 0x01, 0xf3, 0x7e, 0xd9, 0xdb, + 0xd7, 0x2a, 0x8b, 0x07, 0xfb, 0xe5, 0x47, 0xf2, 0xac, 0x52, 0xf4, 0x64, 0x0b, 0x67, 0xaf, 0x55, + 0x16, 0x31, 0x2d, 0x8c, 0xe6, 0x60, 0x5c, 0x8a, 0x32, 0xd7, 0xa9, 0x24, 0xed, 0x7b, 0xe2, 0x1c, + 0x52, 0xea, 0x7d, 0x6c, 0xa2, 0x71, 0x92, 0x1e, 0x2d, 0xc2, 0xc4, 0x76, 0xfb, 0x26, 0x69, 0x92, + 0x88, 0x7f, 0xf0, 0x15, 0xc2, 0x95, 0xdf, 0xa5, 0xf8, 0xd2, 0x7d, 0x25, 0x81, 0xc7, 0xa9, 0x12, + 0xf6, 0x5f, 0xb1, 0xf3, 0x40, 0xf4, 0x9e, 0x26, 0xdf, 0x7c, 0x33, 0xa7, 0x73, 0x2f, 0xb3, 0xe2, + 0x0a, 0xd9, 0x5b, 0xf7, 0xa9, 0x1c, 0x92, 0x3d, 0x2b, 0x8c, 0x39, 0xdf, 0xd7, 0x71, 0xce, 0xff, + 0x7c, 0x01, 0x8e, 0xab, 0x1e, 0x30, 0xe4, 0xfb, 0x6f, 0xf5, 0x3e, 0xb8, 0x08, 0xc3, 0x0d, 0xb2, + 0xe1, 0xb4, 0x9b, 0x91, 0xb2, 0xc4, 0xf4, 0x73, 0x6b, 0xdc, 0x62, 0x0c, 0xc6, 0x3a, 0xcd, 0x21, + 0xba, 0xed, 0x67, 0x47, 0xd9, 0x41, 0x1c, 0x39, 0x74, 0x8e, 0xab, 0x55, 0x63, 0xe5, 0xae, 0x9a, + 0x47, 0xa1, 0xdf, 0xdd, 0xa1, 0x82, 0x59, 0xc1, 0x94, 0xb7, 0x2a, 0x14, 0x88, 0x39, 0x0e, 0x3d, + 0x0e, 0x83, 0x75, 0x7f, 0x67, 0xc7, 0xf1, 0x1a, 0xec, 0xc8, 0x2b, 0xcd, 0x0f, 0x53, 0xd9, 0x6d, + 0x81, 0x83, 0xb0, 0xc4, 0x51, 0xe1, 0xdb, 0x09, 0x36, 0xb9, 0x7a, 0x4a, 0x08, 0xdf, 0x73, 0xc1, + 0x66, 0x88, 0x19, 0x94, 0xde, 0xae, 0x6f, 0xf9, 0xc1, 0xb6, 0xeb, 0x6d, 0x2e, 0xba, 0x81, 0x58, + 0x12, 0xea, 0x2c, 0xbc, 0xa1, 0x30, 0x58, 0xa3, 0x42, 0xcb, 0xd0, 0xdf, 0xf2, 0x83, 0x28, 0x9c, + 0x1e, 0x60, 0xdd, 0xfd, 0x48, 0xce, 0x46, 0xc4, 0xbf, 0xb6, 0xea, 0x07, 0x51, 0xfc, 0x01, 0xf4, + 0x5f, 0x88, 0x79, 0x71, 0xb4, 0x02, 0x83, 0xc4, 0xdb, 0x5d, 0x0e, 0xfc, 0x9d, 0xe9, 0xa9, 0x7c, + 0x4e, 0x4b, 0x9c, 0x84, 0x4f, 0xb3, 0x58, 0x46, 0x15, 0x60, 0x2c, 0x59, 0xa0, 0x0f, 0x41, 0x91, + 0x78, 0xbb, 0xd3, 0x83, 0x8c, 0xd3, 0x4c, 0x0e, 0xa7, 0xeb, 0x4e, 0x10, 0xef, 0xf9, 0x4b, 0xde, + 0x2e, 0xa6, 0x65, 0xd0, 0xc7, 0xa0, 0x24, 0x37, 0x8c, 0x50, 0xe8, 0x7d, 0x33, 0x27, 0xac, 0xdc, + 0x66, 0x30, 0x79, 0xbb, 0xed, 0x06, 0x64, 0x87, 0x78, 0x51, 0x18, 0xef, 0x90, 0x12, 0x1b, 0xe2, + 0x98, 0x1b, 0xaa, 0xc3, 0x48, 0x40, 0x42, 0xf7, 0x0e, 0xa9, 0xfa, 0x4d, 0xb7, 0xbe, 0x37, 0xfd, + 0x10, 0x6b, 0xde, 0x93, 0x1d, 0xbb, 0x0c, 0x6b, 0x05, 0x62, 0xbb, 0x84, 0x0e, 0xc5, 0x06, 0x53, + 0xf4, 0x06, 0x8c, 0x06, 0x24, 0x8c, 0x9c, 0x20, 0x12, 0xb5, 0x4c, 0x2b, 0x3b, 0xe2, 0x28, 0xd6, + 0x11, 0xfc, 0x3a, 0x11, 0x57, 0x13, 0x63, 0xb0, 0xc9, 0x01, 0x7d, 0x4c, 0x1a, 0x49, 0x56, 0xfd, + 0xb6, 0x17, 0x85, 0xd3, 0x25, 0xd6, 0xee, 0x4c, 0xf3, 0xf5, 0xf5, 0x98, 0x2e, 0x69, 0x45, 0xe1, + 0x85, 0xb1, 0xc1, 0x0a, 0x7d, 0x02, 0x46, 0xf9, 0x7f, 0x6e, 0x04, 0x0e, 0xa7, 0x8f, 0x33, 0xde, + 0x67, 0xf3, 0x79, 0x73, 0xc2, 0xf9, 0xe3, 0x82, 0xf9, 0xa8, 0x0e, 0x0d, 0xb1, 0xc9, 0x0d, 0x61, + 0x18, 0x6d, 0xba, 0xbb, 0xc4, 0x23, 0x61, 0x58, 0x0d, 0xfc, 0x9b, 0x44, 0xe8, 0xb4, 0x4f, 0x66, + 0x1b, 0x8d, 0xfd, 0x9b, 0x44, 0x5c, 0x02, 0xf5, 0x32, 0xd8, 0x64, 0x81, 0xae, 0xc1, 0x58, 0x40, + 0x9c, 0x86, 0x1b, 0x33, 0x1d, 0xee, 0xc6, 0x94, 0x5d, 0x9c, 0xb1, 0x51, 0x08, 0x27, 0x98, 0xa0, + 0xab, 0x30, 0xc2, 0xfa, 0xbc, 0xdd, 0xe2, 0x4c, 0x4f, 0x74, 0x63, 0xca, 0x7c, 0x0e, 0x6a, 0x5a, + 0x11, 0x6c, 0x30, 0x40, 0xaf, 0x43, 0xa9, 0xe9, 0x6e, 0x90, 0xfa, 0x5e, 0xbd, 0x49, 0xa6, 0x47, + 0x18, 0xb7, 0xcc, 0xcd, 0x70, 0x45, 0x12, 0x71, 0xf9, 0x5c, 0xfd, 0xc5, 0x71, 0x71, 0x74, 0x1d, + 0x4e, 0x44, 0x24, 0xd8, 0x71, 0x3d, 0x87, 0x6e, 0x62, 0xe2, 0x4a, 0xc8, 0x6c, 0xf9, 0xa3, 0x6c, + 0x76, 0x9d, 0x11, 0xa3, 0x71, 0x62, 0x3d, 0x93, 0x0a, 0xe7, 0x94, 0x46, 0xb7, 0x61, 0x3a, 0x03, + 0xc3, 0xe7, 0xed, 0x31, 0xc6, 0xf9, 0x55, 0xc1, 0x79, 0x7a, 0x3d, 0x87, 0xee, 0xa0, 0x03, 0x0e, + 0xe7, 0x72, 0x47, 0x57, 0x61, 0x9c, 0xed, 0x9c, 0xd5, 0x76, 0xb3, 0x29, 0x2a, 0x1c, 0x63, 0x15, + 0x3e, 0x2e, 0xe5, 0x88, 0x8a, 0x89, 0x3e, 0xd8, 0x2f, 0x43, 0xfc, 0x0f, 0x27, 0x4b, 0xa3, 0x9b, + 0xcc, 0x6c, 0xdc, 0x0e, 0xdc, 0x68, 0x8f, 0xae, 0x2a, 0x72, 0x3b, 0x9a, 0x1e, 0xef, 0xa8, 0x42, + 0xd3, 0x49, 0x95, 0x6d, 0x59, 0x07, 0xe2, 0x24, 0x43, 0x7a, 0x14, 0x84, 0x51, 0xc3, 0xf5, 0xa6, + 0x27, 0xf8, 0x7d, 0x4a, 0xee, 0xa4, 0x35, 0x0a, 0xc4, 0x1c, 0xc7, 0x4c, 0xc6, 0xf4, 0xc7, 0x55, + 0x7a, 0xe2, 0x4e, 0x32, 0xc2, 0xd8, 0x64, 0x2c, 0x11, 0x38, 0xa6, 0xa1, 0x42, 0x70, 0x14, 0xed, + 0x4d, 0x23, 0x46, 0xaa, 0x36, 0xc4, 0xf5, 0xf5, 0x8f, 0x61, 0x0a, 0xb7, 0x6f, 0xc2, 0x98, 0xda, + 0x26, 0x58, 0x9f, 0xa0, 0x32, 0xf4, 0x33, 0xb1, 0x4f, 0x28, 0x7c, 0x4b, 0xb4, 0x09, 0x4c, 0x24, + 0xc4, 0x1c, 0xce, 0x9a, 0xe0, 0xde, 0x21, 0xf3, 0x7b, 0x11, 0xe1, 0xba, 0x88, 0xa2, 0xd6, 0x04, + 0x89, 0xc0, 0x31, 0x8d, 0xfd, 0x7f, 0xb9, 0xf8, 0x1c, 0x9f, 0x12, 0x3d, 0x9c, 0x8b, 0xcf, 0xc0, + 0xd0, 0x96, 0x1f, 0x46, 0x94, 0x9a, 0xd5, 0xd1, 0x1f, 0x0b, 0xcc, 0x97, 0x05, 0x1c, 0x2b, 0x0a, + 0xf4, 0x0a, 0x8c, 0xd6, 0xf5, 0x0a, 0xc4, 0xa1, 0xae, 0xb6, 0x11, 0xa3, 0x76, 0x6c, 0xd2, 0xa2, + 0x97, 0x60, 0x88, 0xb9, 0x41, 0xd5, 0xfd, 0xa6, 0x90, 0x36, 0xa5, 0x64, 0x32, 0x54, 0x15, 0xf0, + 0x03, 0xed, 0x37, 0x56, 0xd4, 0xe8, 0x1c, 0x0c, 0xd0, 0x26, 0x54, 0xaa, 0xe2, 0x38, 0x55, 0xba, + 0xcb, 0xcb, 0x0c, 0x8a, 0x05, 0xd6, 0xfe, 0x55, 0x8b, 0xc9, 0x52, 0xe9, 0x3d, 0x1f, 0x5d, 0x66, + 0x87, 0x06, 0x3b, 0x41, 0x34, 0xdd, 0xe1, 0x63, 0xda, 0x49, 0xa0, 0x70, 0x07, 0x89, 0xff, 0xd8, + 0x28, 0x89, 0xde, 0x4c, 0x9e, 0x0c, 0x5c, 0xa0, 0x78, 0x41, 0x76, 0x41, 0xf2, 0x74, 0x78, 0x38, + 0x3e, 0xe2, 0x68, 0x7b, 0x3a, 0x1d, 0x11, 0xf6, 0xdf, 0x28, 0x68, 0xb3, 0xa4, 0x16, 0x39, 0x11, + 0x41, 0x55, 0x18, 0xbc, 0xe5, 0xb8, 0x91, 0xeb, 0x6d, 0x0a, 0xb9, 0xaf, 0xf3, 0x41, 0xc7, 0x0a, + 0xdd, 0xe0, 0x05, 0xb8, 0xf4, 0x22, 0xfe, 0x60, 0xc9, 0x86, 0x72, 0x0c, 0xda, 0x9e, 0x47, 0x39, + 0x16, 0x7a, 0xe5, 0x88, 0x79, 0x01, 0xce, 0x51, 0xfc, 0xc1, 0x92, 0x0d, 0x7a, 0x0b, 0x40, 0xee, + 0x10, 0xa4, 0x21, 0x74, 0x87, 0xcf, 0x74, 0x67, 0xba, 0xae, 0xca, 0x70, 0xe5, 0x64, 0xfc, 0x1f, + 0x6b, 0xfc, 0xec, 0x48, 0x1b, 0x53, 0xbd, 0x31, 0xe8, 0xe3, 0x74, 0x89, 0x3a, 0x41, 0x44, 0x1a, + 0x73, 0x91, 0xe8, 0x9c, 0xa7, 0x7a, 0xbb, 0x1c, 0xae, 0xbb, 0x3b, 0x44, 0x5f, 0xce, 0x82, 0x09, + 0x8e, 0xf9, 0xd9, 0xbf, 0x58, 0x84, 0xe9, 0xbc, 0xe6, 0xd2, 0x45, 0x43, 0x6e, 0xbb, 0xd1, 0x02, + 0x15, 0x6b, 0x2d, 0x73, 0xd1, 0x2c, 0x09, 0x38, 0x56, 0x14, 0x74, 0xf6, 0x86, 0xee, 0xa6, 0xbc, + 0xdb, 0xf7, 0xc7, 0xb3, 0xb7, 0xc6, 0xa0, 0x58, 0x60, 0x29, 0x5d, 0x40, 0x9c, 0x50, 0xf8, 0xe7, + 0x69, 0xb3, 0x1c, 0x33, 0x28, 0x16, 0x58, 0x5d, 0xcb, 0xd8, 0xd7, 0x45, 0xcb, 0x68, 0x74, 0x51, + 0xff, 0xfd, 0xed, 0x22, 0xf4, 0x49, 0x80, 0x0d, 0xd7, 0x73, 0xc3, 0x2d, 0xc6, 0x7d, 0xe0, 0xd0, + 0xdc, 0x95, 0x50, 0xbc, 0xac, 0xb8, 0x60, 0x8d, 0x23, 0x7a, 0x11, 0x86, 0xd5, 0x06, 0x52, 0x59, + 0x64, 0xce, 0x0a, 0x9a, 0xf3, 0x57, 0xbc, 0x9b, 0x2e, 0x62, 0x9d, 0xce, 0xfe, 0x74, 0x72, 0xbe, + 0x88, 0x15, 0xa0, 0xf5, 0xaf, 0xd5, 0x6b, 0xff, 0x16, 0x3a, 0xf7, 0xaf, 0xfd, 0x8d, 0x01, 0x18, + 0x37, 0x2a, 0x6b, 0x87, 0x3d, 0xec, 0xb9, 0x97, 0xe8, 0x01, 0xe4, 0x44, 0x44, 0xac, 0x3f, 0xbb, + 0xfb, 0x52, 0xd1, 0x0f, 0x29, 0xba, 0x02, 0x78, 0x79, 0xf4, 0x49, 0x28, 0x35, 0x9d, 0x90, 0x69, + 0x2c, 0x89, 0x58, 0x77, 0xbd, 0x30, 0x8b, 0x2f, 0x84, 0x4e, 0x18, 0x69, 0xa7, 0x3e, 0xe7, 0x1d, + 0xb3, 0xa4, 0x27, 0x25, 0x95, 0xaf, 0xa4, 0x03, 0xa8, 0x6a, 0x04, 0x15, 0xc2, 0xf6, 0x30, 0xc7, + 0xa1, 0x97, 0xd8, 0xd6, 0x4a, 0x67, 0xc5, 0x02, 0x95, 0x46, 0xd9, 0x34, 0xeb, 0x37, 0x84, 0x6c, + 0x85, 0xc3, 0x06, 0x65, 0x7c, 0x27, 0x1b, 0xe8, 0x70, 0x27, 0x7b, 0x12, 0x06, 0xd9, 0x0f, 0x35, + 0x03, 0xd4, 0x68, 0x54, 0x38, 0x18, 0x4b, 0x7c, 0x72, 0xc2, 0x0c, 0xf5, 0x36, 0x61, 0xe8, 0xad, + 0x4f, 0x4c, 0x6a, 0xe6, 0x28, 0x32, 0xc4, 0x77, 0x39, 0x31, 0xe5, 0xb1, 0xc4, 0xa1, 0x9f, 0xb2, + 0x00, 0x39, 0x4d, 0x7a, 0x5b, 0xa6, 0x60, 0x75, 0xb9, 0x01, 0x26, 0x6a, 0xbf, 0xd2, 0xb5, 0xdb, + 0xdb, 0xe1, 0xec, 0x5c, 0xaa, 0x34, 0xd7, 0x94, 0xbe, 0x2c, 0x9a, 0x88, 0xd2, 0x04, 0xfa, 0x61, + 0xb4, 0xe2, 0x86, 0xd1, 0x67, 0xff, 0x28, 0x71, 0x38, 0x65, 0x34, 0x09, 0x5d, 0xd3, 0x2f, 0x5f, + 0xc3, 0x87, 0xbc, 0x7c, 0x8d, 0xe6, 0x5d, 0xbc, 0x66, 0xda, 0xf0, 0x50, 0xce, 0x17, 0x64, 0xe8, + 0x5f, 0x17, 0x75, 0xfd, 0x6b, 0x17, 0xad, 0xdd, 0xac, 0xac, 0x63, 0xf6, 0x8d, 0xb6, 0xe3, 0x45, + 0x6e, 0xb4, 0xa7, 0xeb, 0x6b, 0x9f, 0x82, 0xb1, 0x45, 0x87, 0xec, 0xf8, 0xde, 0x92, 0xd7, 0x68, + 0xf9, 0xae, 0x17, 0xa1, 0x69, 0xe8, 0x63, 0xc2, 0x07, 0xdf, 0x7a, 0xfb, 0x68, 0xef, 0x61, 0x06, + 0xb1, 0x37, 0xe1, 0xf8, 0xa2, 0x7f, 0xcb, 0xbb, 0xe5, 0x04, 0x8d, 0xb9, 0x6a, 0x45, 0xd3, 0x27, + 0xad, 0x49, 0x7d, 0x86, 0x95, 0x7f, 0x5b, 0xd4, 0x4a, 0xf2, 0xeb, 0xd0, 0xb2, 0xdb, 0x24, 0x39, + 0x5a, 0xbf, 0xbf, 0x5d, 0x30, 0x6a, 0x8a, 0xe9, 0x95, 0xcd, 0xca, 0xca, 0x35, 0xd0, 0xbf, 0x01, + 0x43, 0x1b, 0x2e, 0x69, 0x36, 0x30, 0xd9, 0x10, 0xbd, 0xf3, 0x44, 0xbe, 0x0b, 0xdf, 0x32, 0xa5, + 0x54, 0xc6, 0x35, 0xa6, 0x0d, 0x59, 0x16, 0x85, 0xb1, 0x62, 0x83, 0xb6, 0x61, 0x42, 0xf6, 0xa1, + 0xc4, 0x8a, 0xfd, 0xe0, 0xc9, 0x4e, 0x03, 0x6f, 0x32, 0x3f, 0x76, 0x77, 0xbf, 0x3c, 0x81, 0x13, + 0x6c, 0x70, 0x8a, 0x31, 0x3a, 0x05, 0x7d, 0x3b, 0xf4, 0xe4, 0xeb, 0x63, 0xdd, 0xcf, 0xd4, 0x1f, + 0x4c, 0x93, 0xc3, 0xa0, 0xf6, 0x8f, 0x5a, 0xf0, 0x50, 0xaa, 0x67, 0x84, 0x46, 0xeb, 0x3e, 0x8f, + 0x42, 0x52, 0xc3, 0x54, 0xe8, 0xae, 0x61, 0xb2, 0xff, 0xa1, 0x05, 0xc7, 0x96, 0x76, 0x5a, 0xd1, + 0xde, 0xa2, 0x6b, 0x5a, 0xd3, 0x3f, 0x08, 0x03, 0x3b, 0xa4, 0xe1, 0xb6, 0x77, 0xc4, 0xc8, 0x95, + 0xe5, 0xe9, 0xb0, 0xca, 0xa0, 0x07, 0xfb, 0xe5, 0xd1, 0x5a, 0xe4, 0x07, 0xce, 0x26, 0xe1, 0x00, + 0x2c, 0xc8, 0xd9, 0x19, 0xeb, 0xde, 0x21, 0x2b, 0xee, 0x8e, 0x1b, 0xdd, 0xdb, 0x6c, 0x17, 0x86, + 0x70, 0xc9, 0x04, 0xc7, 0xfc, 0xec, 0xaf, 0x5b, 0x30, 0x2e, 0xe7, 0xfd, 0x5c, 0xa3, 0x11, 0x90, + 0x30, 0x44, 0x33, 0x50, 0x70, 0x5b, 0xa2, 0x95, 0x20, 0x5a, 0x59, 0xa8, 0x54, 0x71, 0xc1, 0x6d, + 0x49, 0x71, 0x9e, 0x1d, 0x40, 0x45, 0xd3, 0x27, 0xe0, 0xb2, 0x80, 0x63, 0x45, 0x81, 0xce, 0xc3, + 0x90, 0xe7, 0x37, 0xb8, 0x44, 0x2c, 0x6c, 0xac, 0x94, 0x72, 0x4d, 0xc0, 0xb0, 0xc2, 0xa2, 0x2a, + 0x94, 0xb8, 0xc7, 0x68, 0x3c, 0x69, 0x7b, 0xf2, 0x3b, 0x65, 0x5f, 0xb6, 0x2e, 0x4b, 0xe2, 0x98, + 0x89, 0xfd, 0xeb, 0x16, 0x8c, 0xc8, 0x2f, 0xeb, 0xf1, 0xae, 0x42, 0x97, 0x56, 0x7c, 0x4f, 0x89, + 0x97, 0x16, 0xbd, 0x6b, 0x30, 0x8c, 0x71, 0xc5, 0x28, 0x1e, 0xea, 0x8a, 0x71, 0x11, 0x86, 0x9d, + 0x56, 0xab, 0x6a, 0xde, 0x4f, 0xd8, 0x54, 0x9a, 0x8b, 0xc1, 0x58, 0xa7, 0xb1, 0x7f, 0xa4, 0x00, + 0x63, 0xf2, 0x0b, 0x6a, 0xed, 0x9b, 0x21, 0x89, 0xd0, 0x3a, 0x94, 0x1c, 0x3e, 0x4a, 0x44, 0x4e, + 0xf2, 0x47, 0xb3, 0xf5, 0x66, 0xc6, 0x90, 0xc6, 0x82, 0xd6, 0x9c, 0x2c, 0x8d, 0x63, 0x46, 0xa8, + 0x09, 0x93, 0x9e, 0x1f, 0xb1, 0x43, 0x57, 0xe1, 0x3b, 0x99, 0x32, 0x93, 0xdc, 0x4f, 0x0a, 0xee, + 0x93, 0x6b, 0x49, 0x2e, 0x38, 0xcd, 0x18, 0x2d, 0x49, 0x5d, 0x64, 0x31, 0x5f, 0x89, 0xa4, 0x0f, + 0x5c, 0xb6, 0x2a, 0xd2, 0xfe, 0x15, 0x0b, 0x4a, 0x92, 0xec, 0x28, 0xac, 0xd6, 0xab, 0x30, 0x18, + 0xb2, 0x41, 0x90, 0x5d, 0x63, 0x77, 0x6a, 0x38, 0x1f, 0xaf, 0x58, 0x96, 0xe0, 0xff, 0x43, 0x2c, + 0x79, 0x30, 0x53, 0x94, 0x6a, 0xfe, 0xbb, 0xc4, 0x14, 0xa5, 0xda, 0x93, 0x73, 0x28, 0xfd, 0x09, + 0x6b, 0xb3, 0xa6, 0xdb, 0xa5, 0x22, 0x6f, 0x2b, 0x20, 0x1b, 0xee, 0xed, 0xa4, 0xc8, 0x5b, 0x65, + 0x50, 0x2c, 0xb0, 0xe8, 0x2d, 0x18, 0xa9, 0x4b, 0x1b, 0x44, 0xbc, 0xc2, 0xcf, 0x75, 0xb4, 0x87, + 0x29, 0xd3, 0x29, 0xd7, 0xa1, 0x2d, 0x68, 0xe5, 0xb1, 0xc1, 0xcd, 0xf4, 0x88, 0x2a, 0x76, 0xf3, + 0x88, 0x8a, 0xf9, 0xe6, 0xfb, 0x07, 0xfd, 0x98, 0x05, 0x03, 0x5c, 0xf7, 0xdc, 0x9b, 0xea, 0x5f, + 0xb3, 0x24, 0xc7, 0x7d, 0x77, 0x9d, 0x02, 0x85, 0xa4, 0x81, 0x56, 0xa1, 0xc4, 0x7e, 0x30, 0xdd, + 0x79, 0x31, 0xff, 0xc1, 0x12, 0xaf, 0x55, 0x6f, 0xe0, 0x75, 0x59, 0x0c, 0xc7, 0x1c, 0xec, 0x1f, + 0x2e, 0xd2, 0xdd, 0x2d, 0x26, 0x35, 0x0e, 0x7d, 0xeb, 0xc1, 0x1d, 0xfa, 0x85, 0x07, 0x75, 0xe8, + 0x6f, 0xc2, 0x78, 0x5d, 0xb3, 0x3b, 0xc7, 0x23, 0x79, 0xbe, 0xe3, 0x24, 0xd1, 0x4c, 0xd4, 0x5c, + 0x3b, 0xb7, 0x60, 0x32, 0xc1, 0x49, 0xae, 0xe8, 0xe3, 0x30, 0xc2, 0xc7, 0x59, 0xd4, 0xc2, 0x9d, + 0xca, 0x1e, 0xcf, 0x9f, 0x2f, 0x7a, 0x15, 0x5c, 0x9b, 0xab, 0x15, 0xc7, 0x06, 0x33, 0xfb, 0x2f, + 0x2c, 0x40, 0x4b, 0xad, 0x2d, 0xb2, 0x43, 0x02, 0xa7, 0x19, 0x9b, 0x8f, 0xbe, 0x60, 0xc1, 0x34, + 0x49, 0x81, 0x17, 0xfc, 0x9d, 0x1d, 0x71, 0x59, 0xcc, 0xd1, 0x67, 0x2c, 0xe5, 0x94, 0x51, 0x2f, + 0xba, 0xa6, 0xf3, 0x28, 0x70, 0x6e, 0x7d, 0x68, 0x15, 0xa6, 0xf8, 0x29, 0xa9, 0x10, 0x9a, 0x17, + 0xd7, 0xc3, 0x82, 0xf1, 0xd4, 0x7a, 0x9a, 0x04, 0x67, 0x95, 0xb3, 0x7f, 0x65, 0x14, 0x72, 0x5b, + 0xf1, 0x9e, 0xdd, 0xec, 0x3d, 0xbb, 0xd9, 0x7b, 0x76, 0xb3, 0xf7, 0xec, 0x66, 0xef, 0xd9, 0xcd, + 0xde, 0xb3, 0x9b, 0xbd, 0x4b, 0xed, 0x66, 0x7f, 0xd3, 0x82, 0xe3, 0xea, 0xf8, 0x32, 0x2e, 0xec, + 0x9f, 0x81, 0x29, 0xbe, 0xdc, 0x0c, 0x67, 0x6c, 0x71, 0x5c, 0x5f, 0xcc, 0x9c, 0xb9, 0x89, 0x47, + 0x03, 0x46, 0x41, 0xfe, 0xfa, 0x2a, 0x03, 0x81, 0xb3, 0xaa, 0xb1, 0x7f, 0x71, 0x08, 0xfa, 0x97, + 0x76, 0x89, 0x17, 0x1d, 0xc1, 0xd5, 0xa6, 0x0e, 0x63, 0xae, 0xb7, 0xeb, 0x37, 0x77, 0x49, 0x83, + 0xe3, 0x0f, 0x73, 0x03, 0x3f, 0x21, 0x58, 0x8f, 0x55, 0x0c, 0x16, 0x38, 0xc1, 0xf2, 0x41, 0x58, + 0x1f, 0x2e, 0xc1, 0x00, 0x3f, 0x7c, 0x84, 0xe9, 0x21, 0x73, 0xcf, 0x66, 0x9d, 0x28, 0x8e, 0xd4, + 0xd8, 0x32, 0xc2, 0x0f, 0x37, 0x51, 0x1c, 0x7d, 0x1a, 0xc6, 0x36, 0xdc, 0x20, 0x8c, 0xd6, 0xdd, + 0x1d, 0x7a, 0x34, 0xec, 0xb4, 0xee, 0xc1, 0xda, 0xa0, 0xfa, 0x61, 0xd9, 0xe0, 0x84, 0x13, 0x9c, + 0xd1, 0x26, 0x8c, 0x36, 0x1d, 0xbd, 0xaa, 0xc1, 0x43, 0x57, 0xa5, 0x4e, 0x87, 0x15, 0x9d, 0x11, + 0x36, 0xf9, 0xd2, 0xe5, 0x54, 0x67, 0x0a, 0xf3, 0x21, 0xa6, 0xce, 0x50, 0xcb, 0x89, 0x6b, 0xca, + 0x39, 0x8e, 0x0a, 0x68, 0xcc, 0x91, 0xbd, 0x64, 0x0a, 0x68, 0x9a, 0xbb, 0xfa, 0xa7, 0xa0, 0x44, + 0x68, 0x17, 0x52, 0xc6, 0xe2, 0x80, 0xb9, 0xd0, 0x5b, 0x5b, 0x57, 0xdd, 0x7a, 0xe0, 0x9b, 0x76, + 0x9e, 0x25, 0xc9, 0x09, 0xc7, 0x4c, 0xd1, 0x02, 0x0c, 0x84, 0x24, 0x70, 0x95, 0x2e, 0xb9, 0xc3, + 0x30, 0x32, 0x32, 0xfe, 0xbc, 0x8f, 0xff, 0xc6, 0xa2, 0x28, 0x9d, 0x5e, 0x0e, 0x53, 0xc5, 0xb2, + 0xc3, 0x40, 0x9b, 0x5e, 0x73, 0x0c, 0x8a, 0x05, 0x16, 0xbd, 0x0e, 0x83, 0x01, 0x69, 0x32, 0x43, + 0xe2, 0x68, 0xef, 0x93, 0x9c, 0xdb, 0x25, 0x79, 0x39, 0x2c, 0x19, 0xa0, 0x2b, 0x80, 0x02, 0x42, + 0x05, 0x3c, 0xd7, 0xdb, 0x54, 0xee, 0xdd, 0x62, 0xa3, 0x55, 0x82, 0x34, 0x8e, 0x29, 0xe4, 0xcb, + 0x4e, 0x9c, 0x51, 0x0c, 0x5d, 0x82, 0x49, 0x05, 0xad, 0x78, 0x61, 0xe4, 0xd0, 0x0d, 0x6e, 0x9c, + 0xf1, 0x52, 0xfa, 0x15, 0x9c, 0x24, 0xc0, 0xe9, 0x32, 0xf6, 0xcf, 0x58, 0xc0, 0xfb, 0xf9, 0x08, + 0xb4, 0x0a, 0xaf, 0x99, 0x5a, 0x85, 0x93, 0xb9, 0x23, 0x97, 0xa3, 0x51, 0xf8, 0x19, 0x0b, 0x86, + 0xb5, 0x91, 0x8d, 0xe7, 0xac, 0xd5, 0x61, 0xce, 0xb6, 0x61, 0x82, 0xce, 0xf4, 0xab, 0x37, 0x43, + 0x12, 0xec, 0x92, 0x06, 0x9b, 0x98, 0x85, 0x7b, 0x9b, 0x98, 0xca, 0x95, 0x74, 0x25, 0xc1, 0x10, + 0xa7, 0xaa, 0xb0, 0x3f, 0x25, 0x9b, 0xaa, 0x3c, 0x6f, 0xeb, 0x6a, 0xcc, 0x13, 0x9e, 0xb7, 0x6a, + 0x54, 0x71, 0x4c, 0x43, 0x97, 0xda, 0x96, 0x1f, 0x46, 0x49, 0xcf, 0xdb, 0xcb, 0x7e, 0x18, 0x61, + 0x86, 0xb1, 0x9f, 0x07, 0x58, 0xba, 0x4d, 0xea, 0x7c, 0xc6, 0xea, 0x97, 0x1e, 0x2b, 0xff, 0xd2, + 0x63, 0xff, 0x9e, 0x05, 0x63, 0xcb, 0x0b, 0xc6, 0xc9, 0x35, 0x0b, 0xc0, 0x6f, 0x6a, 0x37, 0x6e, + 0xac, 0x49, 0xf7, 0x0f, 0x6e, 0x01, 0x57, 0x50, 0xac, 0x51, 0xa0, 0x93, 0x50, 0x6c, 0xb6, 0x3d, + 0xa1, 0xf6, 0x1c, 0xa4, 0xc7, 0xe3, 0x4a, 0xdb, 0xc3, 0x14, 0xa6, 0xbd, 0xea, 0x2a, 0xf6, 0xfc, + 0xaa, 0xab, 0x6b, 0x34, 0x17, 0x54, 0x86, 0xfe, 0x5b, 0xb7, 0xdc, 0x06, 0x7f, 0x33, 0x2f, 0x5c, + 0x53, 0x6e, 0xdc, 0xa8, 0x2c, 0x86, 0x98, 0xc3, 0xed, 0x2f, 0x16, 0x61, 0x66, 0xb9, 0x49, 0x6e, + 0xbf, 0xc3, 0xb8, 0x01, 0xbd, 0xbe, 0x49, 0x3b, 0x9c, 0x02, 0xe9, 0xb0, 0xef, 0x0e, 0xbb, 0xf7, + 0xc7, 0x06, 0x0c, 0x72, 0xc7, 0x53, 0x19, 0x45, 0x20, 0xd3, 0xdc, 0x97, 0xdf, 0x21, 0xb3, 0xdc, + 0x81, 0x55, 0x98, 0xfb, 0xd4, 0x81, 0x29, 0xa0, 0x58, 0x32, 0x9f, 0x79, 0x19, 0x46, 0x74, 0xca, + 0x43, 0xbd, 0x00, 0xfe, 0x9e, 0x22, 0x4c, 0xd0, 0x16, 0x3c, 0xd0, 0x81, 0xb8, 0x96, 0x1e, 0x88, + 0xfb, 0xfd, 0x0a, 0xb4, 0xfb, 0x68, 0xbc, 0x95, 0x1c, 0x8d, 0x8b, 0x79, 0xa3, 0x71, 0xd4, 0x63, + 0xf0, 0xbd, 0x16, 0x4c, 0x2d, 0x37, 0xfd, 0xfa, 0x76, 0xe2, 0xa5, 0xe6, 0x8b, 0x30, 0x4c, 0xb7, + 0xe3, 0xd0, 0x08, 0x5a, 0x62, 0x84, 0xb1, 0x11, 0x28, 0xac, 0xd3, 0x69, 0xc5, 0xae, 0x5d, 0xab, + 0x2c, 0x66, 0x45, 0xbf, 0x11, 0x28, 0xac, 0xd3, 0xd9, 0xbf, 0x63, 0xc1, 0xe9, 0x4b, 0x0b, 0x4b, + 0xf1, 0x54, 0x4c, 0x05, 0xe0, 0x39, 0x07, 0x03, 0xad, 0x86, 0xd6, 0x94, 0x58, 0x2d, 0xbc, 0xc8, + 0x5a, 0x21, 0xb0, 0xef, 0x96, 0xe0, 0x52, 0xd7, 0x00, 0x2e, 0xe1, 0xea, 0x82, 0xd8, 0x77, 0xa5, + 0x15, 0xc8, 0xca, 0xb5, 0x02, 0x3d, 0x0e, 0x83, 0xf4, 0x5c, 0x70, 0xeb, 0xb2, 0xdd, 0xdc, 0xa0, + 0xcf, 0x41, 0x58, 0xe2, 0xec, 0x9f, 0xb6, 0x60, 0xea, 0x92, 0x1b, 0xd1, 0x43, 0x3b, 0x19, 0x61, + 0x86, 0x9e, 0xda, 0xa1, 0x1b, 0xf9, 0xc1, 0x5e, 0x32, 0xc2, 0x0c, 0x56, 0x18, 0xac, 0x51, 0xf1, + 0x0f, 0xda, 0x75, 0xd9, 0x4b, 0x8a, 0x82, 0x69, 0x77, 0xc3, 0x02, 0x8e, 0x15, 0x05, 0xed, 0xaf, + 0x86, 0x1b, 0x30, 0x95, 0xe5, 0x9e, 0xd8, 0xb8, 0x55, 0x7f, 0x2d, 0x4a, 0x04, 0x8e, 0x69, 0xec, + 0x3f, 0xb3, 0xa0, 0x7c, 0x89, 0xbf, 0x07, 0xdd, 0x08, 0x73, 0x36, 0xdd, 0xe7, 0xa1, 0x44, 0xa4, + 0x81, 0x40, 0xbe, 0x8d, 0x95, 0x82, 0xa8, 0xb2, 0x1c, 0xf0, 0x40, 0x37, 0x8a, 0xae, 0x87, 0xe7, + 0xe4, 0x87, 0x7b, 0x0f, 0xbc, 0x0c, 0x88, 0xe8, 0x75, 0xe9, 0x91, 0x7f, 0x58, 0x08, 0x91, 0xa5, + 0x14, 0x16, 0x67, 0x94, 0xb0, 0x7f, 0xd4, 0x82, 0xe3, 0xea, 0x83, 0xdf, 0x75, 0x9f, 0x69, 0x7f, + 0xb5, 0x00, 0xa3, 0x97, 0xd7, 0xd7, 0xab, 0x97, 0x48, 0xa4, 0xcd, 0xca, 0xce, 0x66, 0x7f, 0xac, + 0x59, 0x2f, 0x3b, 0xdd, 0x11, 0xdb, 0x91, 0xdb, 0x9c, 0xe5, 0x01, 0xe4, 0x66, 0x2b, 0x5e, 0x74, + 0x35, 0xa8, 0x45, 0x81, 0xeb, 0x6d, 0x66, 0xce, 0x74, 0x29, 0xb3, 0x14, 0xf3, 0x64, 0x16, 0xf4, + 0x3c, 0x0c, 0xb0, 0x08, 0x76, 0x72, 0x10, 0x1e, 0x56, 0x57, 0x2c, 0x06, 0x3d, 0xd8, 0x2f, 0x97, + 0xae, 0xe1, 0x0a, 0xff, 0x83, 0x05, 0x29, 0xba, 0x06, 0xc3, 0x5b, 0x51, 0xd4, 0xba, 0x4c, 0x9c, + 0x06, 0x09, 0xe4, 0x2e, 0x7b, 0x26, 0x6b, 0x97, 0xa5, 0x9d, 0xc0, 0xc9, 0xe2, 0x8d, 0x29, 0x86, + 0x85, 0x58, 0xe7, 0x63, 0xd7, 0x00, 0x62, 0xdc, 0x7d, 0x32, 0xdc, 0xd8, 0xeb, 0x50, 0xa2, 0x9f, + 0x3b, 0xd7, 0x74, 0x9d, 0xce, 0xa6, 0xf1, 0xa7, 0xa1, 0x24, 0x0d, 0xdf, 0xa1, 0x08, 0x77, 0xc1, + 0x4e, 0x24, 0x69, 0x17, 0x0f, 0x71, 0x8c, 0xb7, 0x1f, 0x03, 0xe1, 0x5b, 0xda, 0x89, 0xa5, 0xbd, + 0x01, 0xc7, 0x98, 0x93, 0xac, 0x13, 0x6d, 0x19, 0x73, 0xb4, 0xfb, 0x64, 0x78, 0x46, 0xdc, 0xeb, + 0xf8, 0x97, 0x4d, 0x6b, 0x8f, 0x93, 0x47, 0x24, 0xc7, 0xf8, 0x8e, 0x67, 0xff, 0x69, 0x1f, 0x3c, + 0x5c, 0xa9, 0xe5, 0xc7, 0x69, 0x7a, 0x09, 0x46, 0xb8, 0xb8, 0x48, 0xa7, 0x86, 0xd3, 0x14, 0xf5, + 0x2a, 0x0d, 0xe8, 0xba, 0x86, 0xc3, 0x06, 0x25, 0x3a, 0x0d, 0x45, 0xf7, 0x6d, 0x2f, 0xf9, 0x74, + 0xaf, 0xf2, 0xc6, 0x1a, 0xa6, 0x70, 0x8a, 0xa6, 0x92, 0x27, 0xdf, 0xd2, 0x15, 0x5a, 0x49, 0x9f, + 0xaf, 0xc1, 0x98, 0x1b, 0xd6, 0x43, 0xb7, 0xe2, 0xd1, 0x75, 0xaa, 0xad, 0x74, 0xa5, 0x73, 0xa0, + 0x8d, 0x56, 0x58, 0x9c, 0xa0, 0xd6, 0xce, 0x97, 0xfe, 0x9e, 0xa5, 0xd7, 0xae, 0x51, 0x22, 0xe8, + 0xf6, 0xdf, 0x62, 0x5f, 0x17, 0x32, 0x15, 0xbc, 0xd8, 0xfe, 0xf9, 0x07, 0x87, 0x58, 0xe2, 0xe8, + 0x85, 0xae, 0xbe, 0xe5, 0xb4, 0xe6, 0xda, 0xd1, 0xd6, 0xa2, 0x1b, 0xd6, 0xfd, 0x5d, 0x12, 0xec, + 0xb1, 0xbb, 0xf8, 0x50, 0x7c, 0xa1, 0x53, 0x88, 0x85, 0xcb, 0x73, 0x55, 0x4a, 0x89, 0xd3, 0x65, + 0xd0, 0x1c, 0x8c, 0x4b, 0x60, 0x8d, 0x84, 0xec, 0x08, 0x18, 0x66, 0x6c, 0xd4, 0x63, 0x3a, 0x01, + 0x56, 0x4c, 0x92, 0xf4, 0xa6, 0x80, 0x0b, 0xf7, 0x43, 0xc0, 0xfd, 0x20, 0x8c, 0xba, 0x9e, 0x1b, + 0xb9, 0x4e, 0xe4, 0x73, 0xfb, 0x11, 0xbf, 0x76, 0x33, 0x05, 0x73, 0x45, 0x47, 0x60, 0x93, 0xce, + 0xfe, 0x2f, 0x7d, 0x30, 0xc9, 0x86, 0xed, 0xbd, 0x19, 0xf6, 0xed, 0x34, 0xc3, 0xae, 0xa5, 0x67, + 0xd8, 0xfd, 0x90, 0xdc, 0xef, 0x79, 0x9a, 0x7d, 0x1a, 0x4a, 0xea, 0xfd, 0xa0, 0x7c, 0x40, 0x6c, + 0xe5, 0x3c, 0x20, 0xee, 0x7e, 0x7a, 0x4b, 0x97, 0xb4, 0x62, 0xa6, 0x4b, 0xda, 0x97, 0x2d, 0x88, + 0x0d, 0x0b, 0xe8, 0x0d, 0x28, 0xb5, 0x7c, 0xe6, 0xe1, 0x1a, 0x48, 0xb7, 0xf1, 0xc7, 0x3a, 0x5a, + 0x26, 0x78, 0xa8, 0xba, 0x80, 0xf7, 0x42, 0x55, 0x16, 0xc5, 0x31, 0x17, 0x74, 0x05, 0x06, 0x5b, + 0x01, 0xa9, 0x45, 0x2c, 0x8e, 0x52, 0xef, 0x0c, 0xf9, 0xac, 0xe1, 0x05, 0xb1, 0xe4, 0x60, 0xff, + 0x5c, 0x01, 0x26, 0x92, 0xa4, 0xe8, 0x55, 0xe8, 0x23, 0xb7, 0x49, 0x5d, 0xb4, 0x37, 0xf3, 0x28, + 0x8e, 0x55, 0x13, 0xbc, 0x03, 0xe8, 0x7f, 0xcc, 0x4a, 0xa1, 0xcb, 0x30, 0x48, 0xcf, 0xe1, 0x4b, + 0x2a, 0x66, 0xe0, 0x23, 0x79, 0x67, 0xb9, 0x12, 0x68, 0x78, 0xe3, 0x04, 0x08, 0xcb, 0xe2, 0xcc, + 0x0f, 0xac, 0xde, 0xaa, 0xd1, 0x2b, 0x4e, 0xd4, 0xe9, 0x26, 0xbe, 0xbe, 0x50, 0xe5, 0x44, 0x82, + 0x1b, 0xf7, 0x03, 0x93, 0x40, 0x1c, 0x33, 0x41, 0x1f, 0x81, 0xfe, 0xb0, 0x49, 0x48, 0x4b, 0x18, + 0xfa, 0x33, 0x95, 0x8b, 0x35, 0x4a, 0x20, 0x38, 0x31, 0x65, 0x04, 0x03, 0x60, 0x5e, 0xd0, 0xfe, + 0x79, 0x0b, 0x80, 0x3b, 0xce, 0x39, 0xde, 0x26, 0x39, 0x02, 0x7d, 0xfc, 0x22, 0xf4, 0x85, 0x2d, + 0x52, 0xef, 0xe4, 0xbe, 0x1d, 0xb7, 0xa7, 0xd6, 0x22, 0xf5, 0x78, 0xce, 0xd2, 0x7f, 0x98, 0x95, + 0xb6, 0xbf, 0x0f, 0x60, 0x2c, 0x26, 0xab, 0x44, 0x64, 0x07, 0x3d, 0x6b, 0x84, 0x2d, 0x39, 0x99, + 0x08, 0x5b, 0x52, 0x62, 0xd4, 0x9a, 0xea, 0xf7, 0xd3, 0x50, 0xdc, 0x71, 0x6e, 0x0b, 0xdd, 0xde, + 0xd3, 0x9d, 0x9b, 0x41, 0xf9, 0xcf, 0xae, 0x3a, 0xb7, 0xf9, 0xf5, 0xf7, 0x69, 0xb9, 0xc6, 0x56, + 0x9d, 0xdb, 0x5d, 0x5d, 0x8c, 0x69, 0x25, 0xac, 0x2e, 0xd7, 0x13, 0x3e, 0x61, 0x3d, 0xd5, 0xe5, + 0x7a, 0xc9, 0xba, 0x5c, 0xaf, 0x87, 0xba, 0x5c, 0x0f, 0xdd, 0x81, 0x41, 0xe1, 0xb2, 0x29, 0x22, + 0xc0, 0x5d, 0xe8, 0xa1, 0x3e, 0xe1, 0xf1, 0xc9, 0xeb, 0xbc, 0x20, 0xaf, 0xf7, 0x02, 0xda, 0xb5, + 0x5e, 0x59, 0x21, 0xfa, 0x5b, 0x16, 0x8c, 0x89, 0xdf, 0x98, 0xbc, 0xdd, 0x26, 0x61, 0x24, 0xc4, + 0xdf, 0x0f, 0xf4, 0xde, 0x06, 0x51, 0x90, 0x37, 0xe5, 0x03, 0xf2, 0xa4, 0x32, 0x91, 0x5d, 0x5b, + 0x94, 0x68, 0x05, 0xfa, 0x39, 0x0b, 0x8e, 0xed, 0x38, 0xb7, 0x79, 0x8d, 0x1c, 0x86, 0x9d, 0xc8, + 0xf5, 0x85, 0xeb, 0xc3, 0xab, 0xbd, 0x0d, 0x7f, 0xaa, 0x38, 0x6f, 0xa4, 0xb4, 0x73, 0x1e, 0xcb, + 0x22, 0xe9, 0xda, 0xd4, 0xcc, 0x76, 0xcd, 0x6c, 0xc0, 0x90, 0x9c, 0x6f, 0x0f, 0xd2, 0x3f, 0x9c, + 0xd5, 0x23, 0xe6, 0xda, 0x03, 0xad, 0xe7, 0xd3, 0x30, 0xa2, 0xcf, 0xb1, 0x07, 0x5a, 0xd7, 0xdb, + 0x30, 0x95, 0x31, 0x97, 0x1e, 0x68, 0x95, 0xb7, 0xe0, 0x64, 0xee, 0xfc, 0x78, 0xa0, 0xfe, 0xfd, + 0x5f, 0xb5, 0xf4, 0x7d, 0xf0, 0x08, 0x8c, 0x22, 0x0b, 0xa6, 0x51, 0xe4, 0x4c, 0xe7, 0x95, 0x93, + 0x63, 0x19, 0x79, 0x4b, 0x6f, 0x34, 0xdd, 0xd5, 0xd1, 0xeb, 0x30, 0xd0, 0xa4, 0x10, 0xe9, 0xf8, + 0x6b, 0x77, 0x5f, 0x91, 0xb1, 0x38, 0xca, 0xe0, 0x21, 0x16, 0x1c, 0xec, 0x5f, 0xb2, 0xa0, 0xef, + 0x08, 0x7a, 0x02, 0x9b, 0x3d, 0xf1, 0x6c, 0x2e, 0x6b, 0x11, 0x0c, 0x7f, 0x16, 0x3b, 0xb7, 0x96, + 0x6e, 0x47, 0xc4, 0x0b, 0xd9, 0x99, 0x9e, 0xd9, 0x31, 0xfb, 0x16, 0x4c, 0xad, 0xf8, 0x4e, 0x63, + 0xde, 0x69, 0x3a, 0x5e, 0x9d, 0x04, 0x15, 0x6f, 0xf3, 0x50, 0x5e, 0xeb, 0x85, 0xae, 0x5e, 0xeb, + 0x2f, 0xc1, 0x80, 0xdb, 0xd2, 0x82, 0x7b, 0x9f, 0xa5, 0x1d, 0x58, 0xa9, 0x8a, 0xb8, 0xde, 0xc8, + 0xa8, 0x9c, 0x41, 0xb1, 0xa0, 0xa7, 0x23, 0xcf, 0xdd, 0xc5, 0xfa, 0xf2, 0x47, 0x9e, 0x4a, 0xf1, + 0xc9, 0x10, 0x50, 0x86, 0x63, 0xf3, 0x16, 0x18, 0x55, 0x88, 0x57, 0x5f, 0x18, 0x06, 0x5d, 0xfe, + 0xa5, 0x62, 0xf8, 0x9f, 0xc8, 0x96, 0xae, 0x53, 0x1d, 0xa3, 0xbd, 0x67, 0xe2, 0x00, 0x2c, 0x19, + 0xd9, 0x2f, 0x41, 0x66, 0xc8, 0x8e, 0xee, 0x9a, 0x13, 0xfb, 0x63, 0x30, 0xc9, 0x4a, 0x1e, 0x52, + 0x2b, 0x61, 0x27, 0xf4, 0xbd, 0x19, 0x71, 0x5a, 0xed, 0xff, 0x68, 0x01, 0x5a, 0xf5, 0x1b, 0xee, + 0xc6, 0x9e, 0x60, 0xce, 0xbf, 0xff, 0x6d, 0x28, 0xf3, 0x6b, 0x5f, 0x32, 0x96, 0xe9, 0x42, 0xd3, + 0x09, 0x43, 0x4d, 0xd7, 0xfc, 0x84, 0xa8, 0xb7, 0xbc, 0xde, 0x99, 0x1c, 0x77, 0xe3, 0x87, 0xde, + 0x48, 0x04, 0x6a, 0xfb, 0x50, 0x2a, 0x50, 0xdb, 0x13, 0x99, 0x1e, 0x1f, 0xe9, 0xd6, 0xcb, 0x00, + 0x6e, 0xf6, 0xe7, 0x2d, 0x18, 0x5f, 0x4b, 0xc4, 0xe6, 0x3c, 0xc7, 0xcc, 0xdf, 0x19, 0x36, 0x94, + 0x1a, 0x83, 0x62, 0x81, 0xbd, 0xef, 0x3a, 0xc6, 0xbf, 0xb2, 0x20, 0x0e, 0x11, 0x74, 0x04, 0x52, + 0xed, 0x82, 0x21, 0xd5, 0x66, 0xde, 0x10, 0x54, 0x73, 0xf2, 0x84, 0x5a, 0x74, 0x45, 0x8d, 0x49, + 0x87, 0xcb, 0x41, 0xcc, 0x86, 0xaf, 0xb3, 0x31, 0x73, 0xe0, 0xd4, 0x68, 0xfc, 0x7e, 0x01, 0x90, + 0xa2, 0xed, 0x39, 0xb8, 0x5f, 0xba, 0xc4, 0xfd, 0x09, 0xee, 0xb7, 0x0b, 0x88, 0x39, 0x70, 0x04, + 0x8e, 0x17, 0x72, 0xb6, 0xae, 0xd0, 0xaa, 0x1e, 0xce, 0x3b, 0x64, 0x46, 0xbe, 0xf6, 0x5b, 0x49, + 0x71, 0xc3, 0x19, 0x35, 0x68, 0x8e, 0x39, 0xfd, 0xbd, 0x3a, 0xe6, 0x0c, 0x74, 0x79, 0xb6, 0xfa, + 0x15, 0x0b, 0x46, 0x55, 0x37, 0xbd, 0x4b, 0x1e, 0x37, 0xa8, 0xf6, 0xe4, 0x9c, 0x2b, 0x55, 0xad, + 0xc9, 0xec, 0xbc, 0xfd, 0x0e, 0xf6, 0xfc, 0xd8, 0x69, 0xba, 0x77, 0x88, 0x8a, 0x9a, 0x5b, 0x16, + 0xcf, 0x89, 0x05, 0xf4, 0x60, 0xbf, 0x3c, 0xaa, 0xfe, 0xf1, 0xa8, 0x97, 0x71, 0x11, 0xfb, 0x27, + 0xe8, 0x62, 0x37, 0xa7, 0x22, 0x7a, 0x11, 0xfa, 0x5b, 0x5b, 0x4e, 0x48, 0x12, 0x8f, 0xc0, 0xfa, + 0xab, 0x14, 0x78, 0xb0, 0x5f, 0x1e, 0x53, 0x05, 0x18, 0x04, 0x73, 0xea, 0xde, 0x43, 0x26, 0xa6, + 0x27, 0x67, 0xd7, 0x90, 0x89, 0x7f, 0x61, 0x41, 0xdf, 0x1a, 0x3d, 0xbd, 0x1e, 0xfc, 0x16, 0xf0, + 0x9a, 0xb1, 0x05, 0x9c, 0xca, 0x4b, 0xd8, 0x92, 0xbb, 0xfa, 0x97, 0x13, 0xab, 0xff, 0x4c, 0x2e, + 0x87, 0xce, 0x0b, 0x7f, 0x07, 0x86, 0x59, 0x1a, 0x18, 0xf1, 0xe0, 0xed, 0x79, 0x63, 0xc1, 0x97, + 0x13, 0x0b, 0x7e, 0x5c, 0x23, 0xd5, 0x56, 0xfa, 0x93, 0x30, 0x28, 0x5e, 0x50, 0x25, 0x5f, 0x71, + 0x0b, 0x5a, 0x2c, 0xf1, 0xf6, 0x8f, 0x15, 0xc1, 0x48, 0x3b, 0x83, 0x7e, 0xc5, 0x82, 0xd9, 0x80, + 0x7b, 0x56, 0x37, 0x16, 0xdb, 0x81, 0xeb, 0x6d, 0xd6, 0xea, 0x5b, 0xa4, 0xd1, 0x6e, 0xba, 0xde, + 0x66, 0x65, 0xd3, 0xf3, 0x15, 0x78, 0xe9, 0x36, 0xa9, 0xb7, 0x99, 0xd5, 0xb3, 0x4b, 0x8e, 0x1b, + 0xf5, 0x42, 0xe1, 0xb9, 0xbb, 0xfb, 0xe5, 0x59, 0x7c, 0x28, 0xde, 0xf8, 0x90, 0x6d, 0x41, 0xbf, + 0x63, 0xc1, 0x05, 0x9e, 0x8d, 0xa5, 0xf7, 0xf6, 0x77, 0x50, 0x22, 0x54, 0x25, 0xab, 0x98, 0xc9, + 0x3a, 0x09, 0x76, 0xe6, 0x3f, 0x28, 0x3a, 0xf4, 0x42, 0xf5, 0x70, 0x75, 0xe1, 0xc3, 0x36, 0xce, + 0xfe, 0xe7, 0x45, 0x18, 0x15, 0xa1, 0xf5, 0xc4, 0x19, 0xf0, 0xa2, 0x31, 0x25, 0x1e, 0x49, 0x4c, + 0x89, 0x49, 0x83, 0xf8, 0xfe, 0x6c, 0xff, 0x21, 0x4c, 0xd2, 0xcd, 0xf9, 0x32, 0x71, 0x82, 0xe8, + 0x26, 0x71, 0xb8, 0xbf, 0x5d, 0xf1, 0xd0, 0xbb, 0xbf, 0x52, 0xfc, 0xae, 0x24, 0x99, 0xe1, 0x34, + 0xff, 0x6f, 0xa7, 0x33, 0xc7, 0x83, 0x89, 0x54, 0x74, 0xc4, 0x37, 0xa1, 0xa4, 0x9e, 0xff, 0x88, + 0x4d, 0xa7, 0x73, 0x90, 0xd1, 0x24, 0x07, 0xae, 0x57, 0x8c, 0x9f, 0x9e, 0xc5, 0xec, 0xec, 0x7f, + 0x5c, 0x30, 0x2a, 0xe4, 0x83, 0xb8, 0x06, 0x43, 0x4e, 0xc8, 0x02, 0x1f, 0x37, 0x3a, 0xa9, 0x7e, + 0x53, 0xd5, 0xb0, 0x27, 0x58, 0x73, 0xa2, 0x24, 0x56, 0x3c, 0xd0, 0x65, 0xee, 0xd5, 0xb8, 0x4b, + 0x3a, 0xe9, 0x7d, 0x53, 0xdc, 0x40, 0xfa, 0x3d, 0xee, 0x12, 0x2c, 0xca, 0xa3, 0x4f, 0x70, 0xb7, + 0xd3, 0x2b, 0x9e, 0x7f, 0xcb, 0xbb, 0xe4, 0xfb, 0x32, 0x8c, 0x4a, 0x6f, 0x0c, 0x27, 0xa5, 0xb3, + 0xa9, 0x2a, 0x8e, 0x4d, 0x6e, 0xbd, 0x85, 0x1b, 0xfe, 0x0c, 0xb0, 0xec, 0x13, 0xe6, 0x6b, 0xfb, + 0x10, 0x11, 0x18, 0x17, 0x71, 0x1b, 0x25, 0x4c, 0xf4, 0x5d, 0xe6, 0x0d, 0xd7, 0x2c, 0x1d, 0x5b, + 0x28, 0xae, 0x98, 0x2c, 0x70, 0x92, 0xa7, 0xfd, 0x53, 0x16, 0xb0, 0x97, 0xc7, 0x47, 0x20, 0x8f, + 0x7c, 0xd8, 0x94, 0x47, 0xa6, 0xf3, 0x3a, 0x39, 0x47, 0x14, 0x79, 0x81, 0xcf, 0xac, 0x6a, 0xe0, + 0xdf, 0xde, 0x13, 0xbe, 0x42, 0xdd, 0x2f, 0x57, 0xf6, 0x77, 0xf2, 0x43, 0x46, 0x45, 0x6c, 0xdd, + 0x81, 0x49, 0x4f, 0xfb, 0x4f, 0xb7, 0x54, 0x79, 0x77, 0x7c, 0xac, 0xdb, 0x31, 0xc2, 0xf6, 0x5f, + 0xed, 0x59, 0x6f, 0x82, 0x0d, 0x4e, 0x73, 0xb6, 0x7f, 0xdc, 0x82, 0x87, 0x74, 0x42, 0xed, 0xe5, + 0x50, 0x37, 0xfb, 0xcb, 0x22, 0x0c, 0xf9, 0x2d, 0x12, 0x38, 0x91, 0x1f, 0x88, 0x7d, 0xf3, 0xbc, + 0xec, 0xdc, 0xab, 0x02, 0x7e, 0x20, 0x72, 0x5e, 0x48, 0xee, 0x12, 0x8e, 0x55, 0x49, 0x7a, 0xb9, + 0x64, 0x4a, 0x9f, 0x50, 0xbc, 0x11, 0x63, 0xab, 0x80, 0x99, 0xf2, 0x43, 0x2c, 0x30, 0xf6, 0x9f, + 0x5a, 0xbc, 0x6b, 0xf5, 0xa6, 0xa3, 0xb7, 0x61, 0x62, 0xc7, 0x89, 0xea, 0x5b, 0x4b, 0xb7, 0x5b, + 0x01, 0xb7, 0x66, 0xc9, 0x7e, 0x7a, 0xba, 0x5b, 0x3f, 0x69, 0x1f, 0x19, 0xfb, 0x92, 0xae, 0x26, + 0x98, 0xe1, 0x14, 0x7b, 0x74, 0x13, 0x86, 0x19, 0x8c, 0x3d, 0x7f, 0x0c, 0x3b, 0x1d, 0x8e, 0x79, + 0xb5, 0x29, 0x6f, 0x88, 0xd5, 0x98, 0x0f, 0xd6, 0x99, 0xda, 0x5f, 0x2e, 0xf2, 0xf9, 0xce, 0x84, + 0xd9, 0x27, 0x61, 0xb0, 0xe5, 0x37, 0x16, 0x2a, 0x8b, 0x58, 0x8c, 0x82, 0xda, 0x48, 0xab, 0x1c, + 0x8c, 0x25, 0x1e, 0x9d, 0x87, 0x21, 0xf1, 0x53, 0x5a, 0x1f, 0xd9, 0xee, 0x24, 0xe8, 0x42, 0xac, + 0xb0, 0xe8, 0x39, 0x80, 0x56, 0xe0, 0xef, 0xba, 0x0d, 0x16, 0x0e, 0xa5, 0x68, 0x3a, 0x32, 0x55, + 0x15, 0x06, 0x6b, 0x54, 0xe8, 0x15, 0x18, 0x6d, 0x7b, 0x21, 0x3f, 0x90, 0xb5, 0xa0, 0xd3, 0xca, + 0xc5, 0xe6, 0x9a, 0x8e, 0xc4, 0x26, 0x2d, 0x9a, 0x83, 0x81, 0xc8, 0x61, 0x8e, 0x39, 0xfd, 0xf9, + 0xfe, 0xc6, 0xeb, 0x94, 0x42, 0x4f, 0x48, 0x45, 0x0b, 0x60, 0x51, 0x10, 0xbd, 0x29, 0x5f, 0x22, + 0xf3, 0xad, 0x4d, 0x38, 0xfa, 0xf7, 0xb6, 0x0d, 0x6a, 0xef, 0x90, 0xc5, 0x03, 0x02, 0x83, 0x17, + 0x7a, 0x19, 0x80, 0xdc, 0x8e, 0x48, 0xe0, 0x39, 0x4d, 0xe5, 0x4e, 0xa7, 0x4e, 0xc6, 0x45, 0x7f, + 0xcd, 0x8f, 0xae, 0x85, 0x64, 0x49, 0x51, 0x60, 0x8d, 0xda, 0xfe, 0x9d, 0x12, 0x40, 0x2c, 0xb9, + 0xa2, 0x3b, 0x30, 0x54, 0x77, 0x5a, 0x4e, 0x9d, 0xa7, 0x37, 0x2c, 0xe6, 0x3d, 0x10, 0x8d, 0x4b, + 0xcc, 0x2e, 0x08, 0x72, 0xae, 0x70, 0x97, 0x71, 0x7b, 0x87, 0x24, 0xb8, 0xab, 0x92, 0x5d, 0xd5, + 0x87, 0x3e, 0x67, 0xc1, 0xb0, 0x88, 0xfa, 0xc2, 0x46, 0xa8, 0x90, 0x6f, 0x23, 0xd1, 0xea, 0x9f, + 0x8b, 0x4b, 0xf0, 0x26, 0x3c, 0x2f, 0x67, 0xa8, 0x86, 0xe9, 0xda, 0x0a, 0xbd, 0x62, 0xf4, 0x7e, + 0x79, 0x59, 0x2a, 0x1a, 0x5d, 0xa9, 0x2e, 0x4b, 0x25, 0xb6, 0x4b, 0xea, 0xf7, 0xa4, 0x6b, 0xc6, + 0x3d, 0xa9, 0x2f, 0xff, 0xa9, 0xa5, 0x21, 0xc0, 0x75, 0xbb, 0x22, 0xa1, 0xaa, 0x1e, 0x76, 0xa1, + 0x3f, 0xff, 0x7d, 0xa0, 0x76, 0x53, 0xe8, 0x12, 0x72, 0xe1, 0xd3, 0x30, 0xde, 0x30, 0x8f, 0x41, + 0x31, 0x13, 0x9f, 0xc8, 0xe3, 0x9b, 0x38, 0x35, 0xe3, 0x83, 0x2f, 0x81, 0xc0, 0x49, 0xc6, 0xa8, + 0xca, 0xa3, 0x70, 0x54, 0xbc, 0x0d, 0x5f, 0x3c, 0x36, 0xb1, 0x73, 0xc7, 0x72, 0x2f, 0x8c, 0xc8, + 0x0e, 0xa5, 0x8c, 0xcf, 0xb7, 0x35, 0x51, 0x16, 0x2b, 0x2e, 0xe8, 0x75, 0x18, 0x60, 0x0f, 0xc4, + 0xc2, 0xe9, 0xa1, 0x7c, 0x55, 0xb4, 0x19, 0x8e, 0x30, 0x5e, 0x90, 0xec, 0x6f, 0x88, 0x05, 0x07, + 0x74, 0x59, 0x3e, 0xbf, 0x0c, 0x2b, 0xde, 0xb5, 0x90, 0xb0, 0xe7, 0x97, 0xa5, 0xf9, 0xc7, 0xe2, + 0x97, 0x95, 0x1c, 0x9e, 0x99, 0xb6, 0xd2, 0x28, 0x49, 0xe5, 0x08, 0xf1, 0x5f, 0x66, 0xc3, 0x14, + 0xc1, 0x93, 0x32, 0x9b, 0x67, 0x66, 0xcc, 0x8c, 0xbb, 0xf3, 0xba, 0xc9, 0x02, 0x27, 0x79, 0x52, + 0x99, 0x8c, 0xaf, 0x7a, 0xf1, 0x5c, 0xa5, 0xdb, 0xde, 0xc1, 0xaf, 0xa2, 0xec, 0x34, 0xe2, 0x10, + 0x2c, 0xca, 0xcf, 0x6c, 0xc3, 0xa8, 0xb1, 0x6a, 0x1f, 0xa8, 0xfd, 0xc5, 0x83, 0x89, 0xe4, 0x12, + 0x7d, 0xa0, 0x66, 0x97, 0x3f, 0xee, 0x83, 0x31, 0x73, 0x4a, 0xa1, 0x0b, 0x50, 0x12, 0x4c, 0x54, + 0x46, 0x19, 0xb5, 0x4a, 0x56, 0x25, 0x02, 0xc7, 0x34, 0x2c, 0x91, 0x10, 0x2b, 0xae, 0xf9, 0x27, + 0xc7, 0x89, 0x84, 0x14, 0x06, 0x6b, 0x54, 0xf4, 0x6a, 0x71, 0xd3, 0xf7, 0x23, 0x75, 0x20, 0xa9, + 0x79, 0x37, 0xcf, 0xa0, 0x58, 0x60, 0xe9, 0x41, 0xb4, 0x4d, 0x02, 0x8f, 0x34, 0xcd, 0x00, 0xe5, + 0xea, 0x20, 0xba, 0xa2, 0x23, 0xb1, 0x49, 0x4b, 0x8f, 0x53, 0x3f, 0x64, 0x13, 0x59, 0x5c, 0x60, + 0x62, 0x7f, 0xef, 0x1a, 0x7f, 0xb9, 0x2e, 0xf1, 0xe8, 0x63, 0xf0, 0x90, 0x0a, 0x06, 0x86, 0xb9, + 0x99, 0x43, 0xd6, 0x38, 0x60, 0xe8, 0x1b, 0x1e, 0x5a, 0xc8, 0x26, 0xc3, 0x79, 0xe5, 0xd1, 0x6b, + 0x30, 0x26, 0x84, 0x5c, 0xc9, 0x71, 0xd0, 0x74, 0x5e, 0xba, 0x62, 0x60, 0x71, 0x82, 0x5a, 0x86, + 0x58, 0x67, 0x72, 0xa6, 0xe4, 0x30, 0x94, 0x0e, 0xb1, 0xae, 0xe3, 0x71, 0xaa, 0x04, 0x9a, 0x83, + 0x71, 0x2e, 0x83, 0xd1, 0x9b, 0x36, 0x1b, 0x07, 0xf1, 0x9a, 0x4c, 0x2d, 0xa9, 0xab, 0x26, 0x1a, + 0x27, 0xe9, 0xd1, 0x4b, 0x30, 0xe2, 0x04, 0xf5, 0x2d, 0x37, 0x22, 0xf5, 0xa8, 0x1d, 0xf0, 0x67, + 0x66, 0x9a, 0xf7, 0xd7, 0x9c, 0x86, 0xc3, 0x06, 0xa5, 0x7d, 0x07, 0xa6, 0x32, 0x42, 0x5a, 0xd0, + 0x89, 0xe3, 0xb4, 0x5c, 0xf9, 0x4d, 0x09, 0x17, 0xeb, 0xb9, 0x6a, 0x45, 0x7e, 0x8d, 0x46, 0x45, + 0x67, 0x27, 0x0b, 0x7d, 0xa1, 0x25, 0xbf, 0x55, 0xb3, 0x73, 0x59, 0x22, 0x70, 0x4c, 0x63, 0xff, + 0xf7, 0x02, 0x8c, 0x67, 0x98, 0x4e, 0x58, 0x02, 0xd6, 0x84, 0x98, 0x1e, 0xe7, 0x5b, 0x35, 0x23, + 0xf6, 0x17, 0x0e, 0x11, 0xb1, 0xbf, 0xd8, 0x2d, 0x62, 0x7f, 0xdf, 0x3b, 0x89, 0xd8, 0x6f, 0xf6, + 0x58, 0x7f, 0x4f, 0x3d, 0x96, 0x11, 0xe5, 0x7f, 0xe0, 0x90, 0x51, 0xfe, 0x8d, 0x4e, 0x1f, 0xec, + 0xa1, 0xd3, 0x7f, 0xb8, 0x00, 0x13, 0x49, 0xab, 0xcb, 0x11, 0x68, 0x2e, 0x5f, 0x37, 0x34, 0x97, + 0xe7, 0x7b, 0x79, 0xfd, 0x9b, 0xab, 0xc5, 0xc4, 0x09, 0x2d, 0xe6, 0x53, 0x3d, 0x71, 0xeb, 0xac, + 0xd1, 0xfc, 0x7b, 0x05, 0x38, 0x9e, 0x69, 0x8c, 0x3a, 0x82, 0xbe, 0xb9, 0x6a, 0xf4, 0xcd, 0xb3, + 0x3d, 0xbf, 0x8c, 0xce, 0xed, 0xa0, 0x1b, 0x89, 0x0e, 0xba, 0xd0, 0x3b, 0xcb, 0xce, 0xbd, 0xf4, + 0xf5, 0x22, 0x9c, 0xc9, 0x2c, 0x17, 0x2b, 0xfe, 0x96, 0x0d, 0xc5, 0xdf, 0x73, 0x09, 0xc5, 0x9f, + 0xdd, 0xb9, 0xf4, 0xfd, 0xd1, 0x04, 0x8a, 0x17, 0xc2, 0x2c, 0xce, 0xc1, 0x3d, 0x6a, 0x01, 0x8d, + 0x17, 0xc2, 0x8a, 0x11, 0x36, 0xf9, 0x7e, 0x3b, 0x69, 0xff, 0x7e, 0xcb, 0x82, 0x93, 0x99, 0x63, + 0x73, 0x04, 0xda, 0x9e, 0x35, 0x53, 0xdb, 0xf3, 0x64, 0xcf, 0xb3, 0x35, 0x47, 0xfd, 0xf3, 0xf9, + 0x81, 0x9c, 0x6f, 0x61, 0x37, 0xf9, 0xab, 0x30, 0xec, 0xd4, 0xeb, 0x24, 0x0c, 0x57, 0xfd, 0x86, + 0x0a, 0xee, 0xfd, 0x2c, 0xbb, 0x67, 0xc5, 0xe0, 0x83, 0xfd, 0xf2, 0x4c, 0x92, 0x45, 0x8c, 0xc6, + 0x3a, 0x07, 0xf4, 0x09, 0x18, 0x0a, 0x65, 0x5e, 0xb6, 0xbe, 0x7b, 0xcf, 0xcb, 0xc6, 0x94, 0x04, + 0x4a, 0x53, 0xa1, 0x58, 0xa2, 0xff, 0x4f, 0x8f, 0x38, 0x93, 0x96, 0x2a, 0x13, 0xf1, 0x4f, 0xee, + 0x21, 0xee, 0xcc, 0x73, 0x00, 0xbb, 0xea, 0x4a, 0x90, 0xd4, 0x42, 0x68, 0x97, 0x05, 0x8d, 0x0a, + 0x7d, 0x04, 0x26, 0x42, 0x1e, 0x6c, 0x31, 0x76, 0x1f, 0xe0, 0x73, 0x91, 0xc5, 0xab, 0xaa, 0x25, + 0x70, 0x38, 0x45, 0x8d, 0x96, 0x65, 0xad, 0xcc, 0x51, 0x84, 0x4f, 0xcf, 0x73, 0x71, 0x8d, 0xc2, + 0x59, 0xe4, 0x58, 0x72, 0x10, 0x58, 0xf7, 0x6b, 0x25, 0xd1, 0x27, 0x00, 0xe8, 0x24, 0x12, 0xda, + 0x88, 0xc1, 0xfc, 0x2d, 0x94, 0xee, 0x2d, 0x8d, 0x4c, 0xef, 0x69, 0xf6, 0xb4, 0x77, 0x51, 0x31, + 0xc1, 0x1a, 0x43, 0xe4, 0xc0, 0x68, 0xfc, 0x2f, 0xce, 0x91, 0x7c, 0x3e, 0xb7, 0x86, 0x24, 0x73, + 0xa6, 0xfa, 0x5d, 0xd4, 0x59, 0x60, 0x93, 0x23, 0xfa, 0x38, 0x9c, 0xdc, 0xcd, 0xf5, 0xc9, 0x28, + 0xc5, 0x69, 0x0f, 0xf3, 0x3d, 0x31, 0xf2, 0xcb, 0xdb, 0xbf, 0x0d, 0xf0, 0x70, 0x87, 0x9d, 0x1e, + 0xcd, 0x99, 0xf6, 0xd4, 0xa7, 0x93, 0x2a, 0x82, 0x99, 0xcc, 0xc2, 0x86, 0xce, 0x20, 0xb1, 0xa0, + 0x0a, 0xef, 0x78, 0x41, 0xfd, 0xa0, 0xa5, 0x29, 0x6f, 0xb8, 0x43, 0xeb, 0x87, 0x0f, 0x79, 0x82, + 0xdd, 0x47, 0x6d, 0xce, 0x46, 0x86, 0x4a, 0xe4, 0xb9, 0x9e, 0x9b, 0xd3, 0xbb, 0x8e, 0xe4, 0xab, + 0xd9, 0xe1, 0x8b, 0xb9, 0xb6, 0xe4, 0xd2, 0x61, 0xbf, 0xff, 0xa8, 0x42, 0x19, 0xff, 0xbe, 0x05, + 0x27, 0x53, 0x60, 0xde, 0x06, 0x12, 0x8a, 0x08, 0x5b, 0x6b, 0xef, 0xb8, 0xf1, 0x92, 0x21, 0xff, + 0x86, 0xcb, 0xe2, 0x1b, 0x4e, 0xe6, 0xd2, 0x25, 0x9b, 0xfe, 0x85, 0x3f, 0x2a, 0x4f, 0xb1, 0x0a, + 0x4c, 0x42, 0x9c, 0xdf, 0x74, 0xd4, 0x82, 0xb3, 0xf5, 0x76, 0x10, 0xc4, 0x93, 0x35, 0x63, 0x71, + 0xf2, 0xbb, 0xde, 0x63, 0x77, 0xf7, 0xcb, 0x67, 0x17, 0xba, 0xd0, 0xe2, 0xae, 0xdc, 0x90, 0x07, + 0x68, 0x27, 0xe5, 0xf9, 0x24, 0x52, 0xa3, 0x67, 0xfa, 0x2a, 0xa4, 0xfd, 0xa4, 0xf8, 0x13, 0xce, + 0x0c, 0xff, 0xa9, 0x0c, 0xce, 0x47, 0xab, 0x3d, 0xf9, 0xe6, 0xc4, 0xa6, 0x9e, 0x59, 0x81, 0x33, + 0x9d, 0x27, 0xd3, 0xa1, 0x9e, 0x8f, 0xff, 0x9e, 0x05, 0xa7, 0x3b, 0xc6, 0x28, 0xfa, 0x16, 0xbc, + 0x2c, 0xd8, 0x9f, 0xb5, 0xe0, 0x91, 0xcc, 0x12, 0x86, 0x93, 0xdd, 0x05, 0x28, 0xd5, 0x13, 0x89, + 0x7d, 0xe3, 0x68, 0x1d, 0x2a, 0xa9, 0x6f, 0x4c, 0x63, 0xf8, 0xd2, 0x15, 0xba, 0xfa, 0xd2, 0xfd, + 0xba, 0x05, 0xa9, 0xa3, 0xfe, 0x08, 0x24, 0xcf, 0x8a, 0x29, 0x79, 0x3e, 0xd6, 0x4b, 0x6f, 0xe6, + 0x08, 0x9d, 0x7f, 0x3e, 0x0e, 0x27, 0x72, 0x5e, 0x7f, 0xee, 0xc2, 0xe4, 0x66, 0x9d, 0x98, 0xcf, + 0xfd, 0x3b, 0x85, 0xc1, 0xea, 0x18, 0x1b, 0x80, 0xe7, 0x53, 0x4e, 0x91, 0xe0, 0x74, 0x15, 0xe8, + 0xb3, 0x16, 0x1c, 0x73, 0x6e, 0x85, 0x4b, 0xf4, 0x06, 0xe1, 0xd6, 0xe7, 0x9b, 0x7e, 0x7d, 0x9b, + 0x0a, 0x66, 0x72, 0x59, 0xbd, 0x90, 0xa9, 0xd5, 0xbd, 0x51, 0x4b, 0xd1, 0x1b, 0xd5, 0xb3, 0xec, + 0xf9, 0x59, 0x54, 0x38, 0xb3, 0x2e, 0x84, 0x45, 0xfe, 0x1a, 0x27, 0xda, 0xea, 0x14, 0x90, 0x22, + 0xeb, 0x99, 0x2e, 0x17, 0x89, 0x25, 0x06, 0x2b, 0x3e, 0xe8, 0x53, 0x50, 0xda, 0x94, 0x6f, 0xcf, + 0x33, 0x44, 0xee, 0xb8, 0x23, 0x3b, 0xbf, 0xc8, 0xe7, 0xce, 0x09, 0x8a, 0x08, 0xc7, 0x4c, 0xd1, + 0x6b, 0x50, 0xf4, 0x36, 0xc2, 0x4e, 0x09, 0xe8, 0x13, 0x5e, 0xa8, 0x3c, 0xec, 0xcb, 0xda, 0x72, + 0x0d, 0xd3, 0x82, 0xe8, 0x32, 0x14, 0x83, 0x9b, 0x0d, 0x61, 0x92, 0xc8, 0x5c, 0xa4, 0x78, 0x7e, + 0x31, 0xa7, 0x55, 0x8c, 0x13, 0x9e, 0x5f, 0xc4, 0x94, 0x05, 0xaa, 0x42, 0x3f, 0x7b, 0x32, 0x29, + 0x44, 0xdb, 0xcc, 0xab, 0x7c, 0x87, 0xa7, 0xc7, 0xfc, 0x39, 0x16, 0x23, 0xc0, 0x9c, 0x11, 0x5a, + 0x87, 0x81, 0x3a, 0x4b, 0x56, 0x2e, 0x64, 0xd9, 0xf7, 0x67, 0x1a, 0x1f, 0x3a, 0x64, 0x71, 0x17, + 0xba, 0x78, 0x46, 0x81, 0x05, 0x2f, 0xc6, 0x95, 0xb4, 0xb6, 0x36, 0xe4, 0x89, 0x95, 0xcd, 0x95, + 0x65, 0xd6, 0xef, 0xc8, 0x95, 0x51, 0x60, 0xc1, 0x0b, 0xbd, 0x0c, 0x85, 0x8d, 0xba, 0x78, 0x0e, + 0x99, 0x69, 0x85, 0x30, 0x23, 0xf7, 0xcc, 0x0f, 0xdc, 0xdd, 0x2f, 0x17, 0x96, 0x17, 0x70, 0x61, + 0xa3, 0x8e, 0xd6, 0x60, 0x70, 0x83, 0xc7, 0xfa, 0x10, 0x86, 0x86, 0x27, 0xb2, 0xc3, 0x90, 0xa4, + 0xc2, 0x81, 0xf0, 0xa7, 0x75, 0x02, 0x81, 0x25, 0x13, 0x96, 0x4e, 0x45, 0xc5, 0x2c, 0x11, 0x21, + 0x13, 0x67, 0x0f, 0x17, 0x67, 0x86, 0x5f, 0x35, 0xe2, 0xc8, 0x27, 0x58, 0xe3, 0x48, 0x67, 0xb5, + 0x73, 0xa7, 0x1d, 0xb0, 0x78, 0xfa, 0x22, 0xb6, 0x56, 0xe6, 0xac, 0x9e, 0x93, 0x44, 0x9d, 0x66, + 0xb5, 0x22, 0xc2, 0x31, 0x53, 0xb4, 0x0d, 0xa3, 0xbb, 0x61, 0x6b, 0x8b, 0xc8, 0x25, 0xcd, 0x42, + 0x6d, 0xe5, 0x48, 0xb3, 0xd7, 0x05, 0xa1, 0x1b, 0x44, 0x6d, 0xa7, 0x99, 0xda, 0x85, 0xd8, 0xb5, + 0xe6, 0xba, 0xce, 0x0c, 0x9b, 0xbc, 0x69, 0xf7, 0xbf, 0xdd, 0xf6, 0x6f, 0xee, 0x45, 0x44, 0x44, + 0x3a, 0xcc, 0xec, 0xfe, 0x37, 0x38, 0x49, 0xba, 0xfb, 0x05, 0x02, 0x4b, 0x26, 0xe8, 0xba, 0xe8, + 0x1e, 0xb6, 0x7b, 0x4e, 0xe4, 0x87, 0x51, 0x9e, 0x93, 0x44, 0x39, 0x9d, 0xc2, 0x76, 0xcb, 0x98, + 0x15, 0xdb, 0x25, 0x5b, 0x5b, 0x7e, 0xe4, 0x7b, 0x89, 0x1d, 0x7a, 0x32, 0x7f, 0x97, 0xac, 0x66, + 0xd0, 0xa7, 0x77, 0xc9, 0x2c, 0x2a, 0x9c, 0x59, 0x17, 0x6a, 0xc0, 0x58, 0xcb, 0x0f, 0xa2, 0x5b, + 0x7e, 0x20, 0xe7, 0x17, 0xea, 0xa0, 0x28, 0x35, 0x28, 0x45, 0x8d, 0x2c, 0x88, 0xa8, 0x89, 0xc1, + 0x09, 0x9e, 0xe8, 0xa3, 0x30, 0x18, 0xd6, 0x9d, 0x26, 0xa9, 0x5c, 0x9d, 0x9e, 0xca, 0x3f, 0x7e, + 0x6a, 0x9c, 0x24, 0x67, 0x76, 0xf1, 0x50, 0x2d, 0x9c, 0x04, 0x4b, 0x76, 0x68, 0x19, 0xfa, 0x59, + 0x9a, 0x52, 0x16, 0x96, 0x33, 0x27, 0x1a, 0x74, 0xea, 0xc1, 0x03, 0xdf, 0x9b, 0x18, 0x18, 0xf3, + 0xe2, 0x74, 0x0d, 0x08, 0x4d, 0x81, 0x1f, 0x4e, 0x1f, 0xcf, 0x5f, 0x03, 0x42, 0xc1, 0x70, 0xb5, + 0xd6, 0x69, 0x0d, 0x28, 0x22, 0x1c, 0x33, 0xa5, 0x3b, 0x33, 0xdd, 0x4d, 0x4f, 0x74, 0x70, 0x66, + 0xcb, 0xdd, 0x4b, 0xd9, 0xce, 0x4c, 0x77, 0x52, 0xca, 0xc2, 0xfe, 0xd5, 0xa1, 0xb4, 0xcc, 0xc2, + 0x34, 0x4c, 0x7f, 0xcd, 0x4a, 0x39, 0x1f, 0x7c, 0xa0, 0x57, 0x85, 0xf7, 0x7d, 0xbc, 0xb8, 0x7e, + 0xd6, 0x82, 0x13, 0xad, 0xcc, 0x0f, 0x11, 0x02, 0x40, 0x6f, 0x7a, 0x73, 0xfe, 0xe9, 0x2a, 0x84, + 0x6b, 0x36, 0x1e, 0xe7, 0xd4, 0x94, 0x54, 0x0e, 0x14, 0xdf, 0xb1, 0x72, 0x60, 0x15, 0x86, 0xea, + 0xfc, 0x26, 0x27, 0x43, 0x8f, 0xf7, 0x14, 0x80, 0x90, 0x89, 0x12, 0xe2, 0x0a, 0xb8, 0x81, 0x15, + 0x0b, 0xf4, 0x43, 0x16, 0x9c, 0x4e, 0x36, 0x1d, 0x13, 0x86, 0x16, 0x71, 0x5f, 0xb9, 0x5a, 0x6b, + 0x59, 0x7c, 0x7f, 0x4a, 0xfe, 0x37, 0x88, 0x0f, 0xba, 0x11, 0xe0, 0xce, 0x95, 0xa1, 0xc5, 0x0c, + 0xbd, 0xda, 0x80, 0x69, 0x51, 0xec, 0x41, 0xb7, 0xf6, 0x02, 0x8c, 0xec, 0xf8, 0x6d, 0x2f, 0x12, + 0xbe, 0x6f, 0xc2, 0x0b, 0x89, 0x79, 0xdf, 0xac, 0x6a, 0x70, 0x6c, 0x50, 0x25, 0x34, 0x72, 0x43, + 0xf7, 0xac, 0x91, 0x7b, 0x0b, 0x46, 0x3c, 0xcd, 0x59, 0xbb, 0xd3, 0x0d, 0x56, 0x68, 0x17, 0x35, + 0x6a, 0xde, 0x4a, 0x1d, 0x82, 0x0d, 0x6e, 0x9d, 0xb5, 0x65, 0xf0, 0xce, 0xb4, 0x65, 0x47, 0x7a, + 0x25, 0xb6, 0x7f, 0xb6, 0x90, 0x71, 0x63, 0xe0, 0x5a, 0xb9, 0x57, 0x4d, 0xad, 0xdc, 0xb9, 0xa4, + 0x56, 0x2e, 0x65, 0xaa, 0x32, 0x14, 0x72, 0xbd, 0xe7, 0x47, 0xeb, 0x39, 0xa8, 0xec, 0xf7, 0x58, + 0xf0, 0x10, 0xb3, 0x7d, 0xd0, 0x0a, 0xde, 0xb1, 0xbd, 0xe3, 0xe1, 0xbb, 0xfb, 0xe5, 0x87, 0x56, + 0xb2, 0xd9, 0xe1, 0xbc, 0x7a, 0xec, 0x26, 0x9c, 0xed, 0x76, 0xee, 0x32, 0x2f, 0xcf, 0x86, 0x72, + 0x8e, 0x88, 0xbd, 0x3c, 0x1b, 0x95, 0x45, 0xcc, 0x30, 0xbd, 0x86, 0x4c, 0xb3, 0xff, 0xab, 0x05, + 0xc5, 0xaa, 0xdf, 0x38, 0x82, 0x1b, 0xfd, 0x87, 0x8d, 0x1b, 0xfd, 0xc3, 0xd9, 0x27, 0x7e, 0x23, + 0xd7, 0xd8, 0xb7, 0x94, 0x30, 0xf6, 0x9d, 0xce, 0x63, 0xd0, 0xd9, 0xb4, 0xf7, 0x13, 0x45, 0x18, + 0xae, 0xfa, 0x0d, 0xb5, 0xce, 0xfe, 0xe5, 0xbd, 0x3c, 0xb1, 0xc8, 0xcd, 0x78, 0xa3, 0x71, 0x66, + 0xae, 0xb1, 0xf2, 0xd1, 0xfd, 0xb7, 0xd8, 0x4b, 0x8b, 0x1b, 0xc4, 0xdd, 0xdc, 0x8a, 0x48, 0x23, + 0xf9, 0x39, 0x47, 0xf7, 0xd2, 0xe2, 0x1b, 0x45, 0x18, 0x4f, 0xd4, 0x8e, 0x9a, 0x30, 0xda, 0xd4, + 0x4d, 0x49, 0x62, 0x9e, 0xde, 0x93, 0x15, 0x4a, 0x78, 0xaa, 0x6b, 0x20, 0x6c, 0x32, 0x47, 0xb3, + 0x00, 0xca, 0xb7, 0x42, 0x6a, 0xfb, 0xd9, 0xb5, 0x46, 0x39, 0x5f, 0x84, 0x58, 0xa3, 0x40, 0x2f, + 0xc2, 0x70, 0xe4, 0xb7, 0xfc, 0xa6, 0xbf, 0xb9, 0x77, 0x85, 0xc8, 0x68, 0x7a, 0xca, 0xfb, 0x76, + 0x3d, 0x46, 0x61, 0x9d, 0x0e, 0xdd, 0x86, 0x49, 0xc5, 0xa4, 0x76, 0x1f, 0xcc, 0x6b, 0x4c, 0x6d, + 0xb2, 0x96, 0xe4, 0x88, 0xd3, 0x95, 0xa0, 0x97, 0x61, 0x8c, 0xb9, 0x01, 0xb3, 0xf2, 0x57, 0xc8, + 0x9e, 0x8c, 0xb2, 0xca, 0x24, 0xec, 0x55, 0x03, 0x83, 0x13, 0x94, 0x68, 0x01, 0x26, 0x77, 0xdc, + 0x30, 0x51, 0x7c, 0x80, 0x15, 0x67, 0x0d, 0x58, 0x4d, 0x22, 0x71, 0x9a, 0xde, 0xfe, 0x69, 0x31, + 0xc6, 0x5e, 0xe4, 0xbe, 0xb7, 0x1c, 0xdf, 0xdd, 0xcb, 0xf1, 0xeb, 0x16, 0x4c, 0xd0, 0xda, 0x99, + 0x6f, 0xa3, 0x14, 0xa4, 0x54, 0x1c, 0x7e, 0xab, 0x43, 0x1c, 0xfe, 0x73, 0x74, 0xdb, 0x6e, 0xf8, + 0xed, 0x48, 0x68, 0x47, 0xb5, 0x7d, 0x99, 0x42, 0xb1, 0xc0, 0x0a, 0x3a, 0x12, 0x04, 0xe2, 0x45, + 0xb2, 0x4e, 0x47, 0x82, 0x00, 0x0b, 0xac, 0x0c, 0xd3, 0xdf, 0x97, 0x1d, 0xa6, 0x9f, 0x47, 0x5b, + 0x16, 0x5e, 0x70, 0x42, 0xa4, 0xd5, 0xa2, 0x2d, 0x4b, 0xf7, 0xb8, 0x98, 0xc6, 0xfe, 0x6a, 0x11, + 0x46, 0xaa, 0x7e, 0x23, 0x76, 0xec, 0x78, 0xc1, 0x70, 0xec, 0x38, 0x9b, 0x70, 0xec, 0x98, 0xd0, + 0x69, 0xdf, 0x73, 0xe3, 0xf8, 0x66, 0xb9, 0x71, 0xfc, 0x9a, 0xc5, 0x46, 0x6d, 0x71, 0xad, 0xc6, + 0x5d, 0x65, 0xd1, 0x45, 0x18, 0x66, 0x3b, 0x1c, 0x7b, 0x02, 0x2f, 0xbd, 0x1d, 0x58, 0xda, 0xbc, + 0xb5, 0x18, 0x8c, 0x75, 0x1a, 0x74, 0x1e, 0x86, 0x42, 0xe2, 0x04, 0xf5, 0x2d, 0xb5, 0xbd, 0x0b, + 0xd7, 0x04, 0x0e, 0xc3, 0x0a, 0x8b, 0xde, 0x88, 0x03, 0xfd, 0x16, 0xf3, 0x9f, 0xd4, 0xea, 0xed, + 0xe1, 0x4b, 0x24, 0x3f, 0xba, 0xaf, 0x7d, 0x03, 0x50, 0x9a, 0xbe, 0x87, 0x50, 0x94, 0x65, 0x33, + 0x14, 0x65, 0x29, 0x15, 0x86, 0xf2, 0x2f, 0x2d, 0x18, 0xab, 0xfa, 0x0d, 0xba, 0x74, 0xbf, 0x9d, + 0xd6, 0xa9, 0x1e, 0xe5, 0x7c, 0xa0, 0x43, 0x94, 0xf3, 0x47, 0xa1, 0xbf, 0xea, 0x37, 0xba, 0x84, + 0xcb, 0xfc, 0xfb, 0x16, 0x0c, 0x56, 0xfd, 0xc6, 0x11, 0x18, 0x5e, 0x5e, 0x35, 0x0d, 0x2f, 0x0f, + 0xe5, 0xcc, 0x9b, 0x1c, 0x5b, 0xcb, 0xdf, 0xed, 0x83, 0x51, 0xda, 0x4e, 0x7f, 0x53, 0x0e, 0xa5, + 0xd1, 0x6d, 0x56, 0x0f, 0xdd, 0x46, 0xaf, 0x01, 0x7e, 0xb3, 0xe9, 0xdf, 0x4a, 0x0e, 0xeb, 0x32, + 0x83, 0x62, 0x81, 0x45, 0xcf, 0xc0, 0x50, 0x2b, 0x20, 0xbb, 0xae, 0x2f, 0xe4, 0x6b, 0xcd, 0x8c, + 0x55, 0x15, 0x70, 0xac, 0x28, 0xe8, 0xc5, 0x3b, 0x74, 0x3d, 0x2a, 0x4b, 0xd4, 0x7d, 0xaf, 0xc1, + 0x6d, 0x13, 0x45, 0x91, 0x8a, 0x47, 0x83, 0x63, 0x83, 0x0a, 0xdd, 0x80, 0x12, 0xfb, 0xcf, 0xb6, + 0x9d, 0xc3, 0x27, 0x01, 0x17, 0xc9, 0x49, 0x05, 0x03, 0x1c, 0xf3, 0x42, 0xcf, 0x01, 0x44, 0x32, + 0x9d, 0x45, 0x28, 0xc2, 0x26, 0xaa, 0xbb, 0x88, 0x4a, 0x74, 0x11, 0x62, 0x8d, 0x0a, 0x3d, 0x0d, + 0xa5, 0xc8, 0x71, 0x9b, 0x2b, 0xae, 0xc7, 0xec, 0xf7, 0xb4, 0xfd, 0x22, 0x47, 0xa8, 0x00, 0xe2, + 0x18, 0x4f, 0x65, 0x41, 0x16, 0x10, 0x67, 0x7e, 0x2f, 0x12, 0xe9, 0xb0, 0x8a, 0x5c, 0x16, 0x5c, + 0x51, 0x50, 0xac, 0x51, 0xa0, 0x2d, 0x38, 0xe5, 0x7a, 0x2c, 0x6d, 0x0d, 0xa9, 0x6d, 0xbb, 0xad, + 0xf5, 0x95, 0xda, 0x75, 0x12, 0xb8, 0x1b, 0x7b, 0xf3, 0x4e, 0x7d, 0x9b, 0x78, 0x32, 0xbd, 0xb3, + 0xcc, 0xfa, 0x7f, 0xaa, 0xd2, 0x81, 0x16, 0x77, 0xe4, 0x64, 0x3f, 0xcf, 0xe6, 0xfb, 0xd5, 0x1a, + 0x7a, 0xca, 0xd8, 0x3a, 0x4e, 0xe8, 0x5b, 0xc7, 0xc1, 0x7e, 0x79, 0xe0, 0x6a, 0x4d, 0x8b, 0xca, + 0xf2, 0x12, 0x1c, 0xaf, 0xfa, 0x8d, 0xaa, 0x1f, 0x44, 0xcb, 0x7e, 0x70, 0xcb, 0x09, 0x1a, 0x72, + 0x7a, 0x95, 0x65, 0x5c, 0x1a, 0xba, 0x7f, 0xf6, 0xf3, 0xdd, 0xc5, 0x88, 0x39, 0xf3, 0x3c, 0x93, + 0xd8, 0x0e, 0xf9, 0xe0, 0xb0, 0xce, 0x64, 0x07, 0x95, 0xf8, 0xe9, 0x92, 0x13, 0x11, 0x74, 0x15, + 0x46, 0xeb, 0xfa, 0x31, 0x2a, 0x8a, 0x3f, 0x29, 0x0f, 0x32, 0xe3, 0x8c, 0xcd, 0x3c, 0x77, 0xcd, + 0xf2, 0xf6, 0x77, 0x8a, 0x4a, 0xb8, 0x22, 0x82, 0xbb, 0xb4, 0xf6, 0x92, 0x01, 0x5d, 0x66, 0x86, + 0x29, 0xe4, 0x47, 0xfd, 0xe3, 0x76, 0xe5, 0x8e, 0x99, 0x61, 0xec, 0xef, 0x82, 0x13, 0xc9, 0xea, + 0x7b, 0x4e, 0xc3, 0xbe, 0x00, 0x93, 0x81, 0x5e, 0x50, 0x4b, 0xb3, 0x77, 0x9c, 0x67, 0xf3, 0x48, + 0x20, 0x71, 0x9a, 0xde, 0x7e, 0x11, 0x26, 0xe9, 0xe5, 0x57, 0x09, 0x72, 0xac, 0x97, 0xbb, 0x07, + 0xe8, 0xf9, 0x6f, 0xfd, 0xec, 0x20, 0x4a, 0xe4, 0x5c, 0x42, 0x9f, 0x84, 0xb1, 0x90, 0xac, 0xb8, + 0x5e, 0xfb, 0xb6, 0xd4, 0xad, 0x75, 0x78, 0x69, 0x5b, 0x5b, 0xd2, 0x29, 0xf9, 0xfd, 0xc1, 0x84, + 0xe1, 0x04, 0x37, 0xb4, 0x03, 0x63, 0xb7, 0x5c, 0xaf, 0xe1, 0xdf, 0x0a, 0x25, 0xff, 0xa1, 0x7c, + 0x45, 0xfd, 0x0d, 0x4e, 0x99, 0x68, 0xa3, 0x51, 0xdd, 0x0d, 0x83, 0x19, 0x4e, 0x30, 0xa7, 0x8b, + 0x3d, 0x68, 0x7b, 0x73, 0xe1, 0xb5, 0x90, 0xf0, 0x97, 0xa3, 0x62, 0xb1, 0x63, 0x09, 0xc4, 0x31, + 0x9e, 0x2e, 0x76, 0xf6, 0xe7, 0x52, 0xe0, 0xb7, 0x79, 0x82, 0x1f, 0xb1, 0xd8, 0xb1, 0x82, 0x62, + 0x8d, 0x82, 0x6e, 0x86, 0xec, 0xdf, 0x9a, 0xef, 0x61, 0xdf, 0x8f, 0xe4, 0xf6, 0xc9, 0x12, 0xd4, + 0x69, 0x70, 0x6c, 0x50, 0xa1, 0x65, 0x40, 0x61, 0xbb, 0xd5, 0x6a, 0x32, 0xd7, 0x45, 0xa7, 0xc9, + 0x58, 0x71, 0xb7, 0xab, 0x22, 0xf7, 0x6e, 0xa9, 0xa5, 0xb0, 0x38, 0xa3, 0x04, 0x3d, 0x17, 0x37, + 0x44, 0x53, 0xfb, 0x59, 0x53, 0xb9, 0x51, 0xaf, 0xc6, 0xdb, 0x29, 0x71, 0x68, 0x09, 0x06, 0xc3, + 0xbd, 0xb0, 0x1e, 0x35, 0xc3, 0x4e, 0xe9, 0x00, 0x6b, 0x8c, 0x44, 0xcb, 0x46, 0xcb, 0x8b, 0x60, + 0x59, 0x16, 0xd5, 0x61, 0x4a, 0x70, 0x5c, 0xd8, 0x72, 0x3c, 0x95, 0xa4, 0x8c, 0x7b, 0xef, 0x5d, + 0xbc, 0xbb, 0x5f, 0x9e, 0x12, 0x35, 0xeb, 0xe8, 0x83, 0xfd, 0x32, 0x5d, 0x1c, 0x19, 0x18, 0x9c, + 0xc5, 0x8d, 0x4f, 0xbe, 0x7a, 0xdd, 0xdf, 0x69, 0x55, 0x03, 0x7f, 0xc3, 0x6d, 0x92, 0x4e, 0x86, + 0xd1, 0x9a, 0x41, 0x29, 0x26, 0x9f, 0x01, 0xc3, 0x09, 0x6e, 0xf6, 0x77, 0x32, 0xd9, 0xb1, 0xe6, + 0x6e, 0x7a, 0x4e, 0xd4, 0x0e, 0x08, 0xda, 0x81, 0xd1, 0x16, 0xdb, 0x5d, 0x44, 0xda, 0x1d, 0x31, + 0xd7, 0x5f, 0xe8, 0x51, 0xff, 0x75, 0x8b, 0x25, 0x0e, 0x34, 0xfc, 0x20, 0xab, 0x3a, 0x3b, 0x6c, + 0x72, 0xb7, 0xff, 0xed, 0x49, 0x26, 0x7d, 0xd4, 0xb8, 0x52, 0x6b, 0x50, 0x3c, 0x1b, 0x13, 0xd7, + 0xd8, 0x99, 0x7c, 0xf5, 0x71, 0x3c, 0x2c, 0xe2, 0xe9, 0x19, 0x96, 0x65, 0xd1, 0x27, 0x60, 0x8c, + 0xde, 0x0a, 0x95, 0x04, 0x10, 0x4e, 0x1f, 0xcb, 0x0f, 0x70, 0xa3, 0xa8, 0xf4, 0x94, 0x5c, 0x7a, + 0x61, 0x9c, 0x60, 0x86, 0xde, 0x60, 0xae, 0x81, 0x92, 0x75, 0xa1, 0x17, 0xd6, 0xba, 0x17, 0xa0, + 0x64, 0xab, 0x31, 0x41, 0x6d, 0x98, 0x4a, 0x27, 0x1e, 0x0d, 0xa7, 0xed, 0x7c, 0xf1, 0x3a, 0x9d, + 0x3b, 0x34, 0xce, 0x9d, 0x94, 0xc6, 0x85, 0x38, 0x8b, 0x3f, 0x5a, 0x49, 0xa6, 0x85, 0x2c, 0x1a, + 0x8a, 0xe7, 0x54, 0x6a, 0xc8, 0xd1, 0x8e, 0x19, 0x21, 0x37, 0xe1, 0xb4, 0x96, 0x59, 0xef, 0x52, + 0xe0, 0x30, 0xd7, 0x14, 0x97, 0x6d, 0xa7, 0x9a, 0x5c, 0xf4, 0xc8, 0xdd, 0xfd, 0xf2, 0xe9, 0xf5, + 0x4e, 0x84, 0xb8, 0x33, 0x1f, 0x74, 0x15, 0x8e, 0xf3, 0xf0, 0x0c, 0x8b, 0xc4, 0x69, 0x34, 0x5d, + 0x4f, 0x09, 0x5e, 0x7c, 0xc9, 0x9f, 0xbc, 0xbb, 0x5f, 0x3e, 0x3e, 0x97, 0x45, 0x80, 0xb3, 0xcb, + 0xa1, 0x57, 0xa1, 0xd4, 0xf0, 0x42, 0xd1, 0x07, 0x03, 0x46, 0xf2, 0xc2, 0xd2, 0xe2, 0x5a, 0x4d, + 0x7d, 0x7f, 0xfc, 0x07, 0xc7, 0x05, 0xd0, 0x26, 0xb7, 0x7c, 0x28, 0x75, 0xd5, 0x60, 0x2a, 0x6a, + 0x5f, 0x52, 0xa3, 0x6b, 0x3c, 0x4f, 0xe7, 0x26, 0x3f, 0xf5, 0x6a, 0xcb, 0x78, 0xb9, 0x6e, 0x30, + 0x46, 0xaf, 0x03, 0x12, 0x49, 0x32, 0xe6, 0xea, 0x2c, 0xa7, 0x93, 0xe6, 0x8e, 0xa8, 0x6e, 0xa1, + 0xb5, 0x14, 0x05, 0xce, 0x28, 0x85, 0x2e, 0xd3, 0x5d, 0x45, 0x87, 0x8a, 0x5d, 0x4b, 0xa5, 0xc8, + 0x5d, 0x24, 0xad, 0x80, 0x30, 0x0f, 0x3a, 0x93, 0x23, 0x4e, 0x94, 0x43, 0x0d, 0x38, 0xe5, 0xb4, + 0x23, 0x9f, 0x19, 0x95, 0x4c, 0xd2, 0x75, 0x7f, 0x9b, 0x78, 0xcc, 0x9e, 0x3b, 0xc4, 0xa2, 0x01, + 0x9e, 0x9a, 0xeb, 0x40, 0x87, 0x3b, 0x72, 0xa1, 0x12, 0xb9, 0xca, 0x89, 0x0f, 0x66, 0x2c, 0xc2, + 0x8c, 0xbc, 0xf8, 0x2f, 0xc2, 0xf0, 0x96, 0x1f, 0x46, 0x6b, 0x24, 0xba, 0xe5, 0x07, 0xdb, 0x22, + 0x2a, 0x77, 0x9c, 0x09, 0x21, 0x46, 0x61, 0x9d, 0x8e, 0x5e, 0xb9, 0x99, 0xb7, 0x51, 0x65, 0x91, + 0x39, 0x7a, 0x0c, 0xc5, 0x7b, 0xcc, 0x65, 0x0e, 0xc6, 0x12, 0x2f, 0x49, 0x2b, 0xd5, 0x05, 0xe6, + 0xb4, 0x91, 0x20, 0xad, 0x54, 0x17, 0xb0, 0xc4, 0xd3, 0xe9, 0x1a, 0x6e, 0x39, 0x01, 0xa9, 0x06, + 0x7e, 0x9d, 0x84, 0x5a, 0xfe, 0x8d, 0x87, 0x79, 0xcc, 0x71, 0x3a, 0x5d, 0x6b, 0x59, 0x04, 0x38, + 0xbb, 0x1c, 0x22, 0xe9, 0xac, 0x92, 0x63, 0xf9, 0xd6, 0xb6, 0xb4, 0x3c, 0xd3, 0x63, 0x62, 0x49, + 0x0f, 0x26, 0x54, 0x3e, 0x4b, 0x1e, 0x65, 0x3c, 0x9c, 0x1e, 0x67, 0x73, 0xbb, 0xf7, 0x10, 0xe5, + 0xca, 0x7e, 0x59, 0x49, 0x70, 0xc2, 0x29, 0xde, 0x46, 0xb8, 0xc9, 0x89, 0xae, 0xe1, 0x26, 0x2f, + 0x40, 0x29, 0x6c, 0xdf, 0x6c, 0xf8, 0x3b, 0x8e, 0xeb, 0x31, 0xa7, 0x0d, 0xed, 0xee, 0x57, 0x93, + 0x08, 0x1c, 0xd3, 0xa0, 0x65, 0x18, 0x72, 0xa4, 0x71, 0x12, 0xe5, 0x47, 0xd2, 0x52, 0x26, 0x49, + 0x1e, 0x5c, 0x46, 0x9a, 0x23, 0x55, 0x59, 0xf4, 0x0a, 0x8c, 0x8a, 0xe0, 0x0a, 0x22, 0x05, 0xf4, + 0x94, 0xf9, 0x02, 0xb6, 0xa6, 0x23, 0xb1, 0x49, 0x8b, 0xae, 0xc1, 0x70, 0xe4, 0x37, 0xd9, 0x33, + 0x4e, 0x2a, 0xe6, 0x9d, 0xc8, 0x0f, 0x78, 0xb9, 0xae, 0xc8, 0x74, 0xb5, 0xb9, 0x2a, 0x8a, 0x75, + 0x3e, 0x68, 0x9d, 0xcf, 0x77, 0x96, 0x6d, 0x83, 0x84, 0x22, 0x87, 0xf0, 0xe9, 0x3c, 0x8f, 0x3b, + 0x46, 0x66, 0x2e, 0x07, 0x51, 0x12, 0xeb, 0x6c, 0xd0, 0x25, 0x98, 0x6c, 0x05, 0xae, 0xcf, 0xe6, + 0x84, 0x32, 0xb6, 0x4e, 0x9b, 0xb9, 0xf5, 0xaa, 0x49, 0x02, 0x9c, 0x2e, 0xc3, 0x62, 0x63, 0x08, + 0xe0, 0xf4, 0x49, 0x9e, 0x1f, 0x88, 0x5f, 0xa5, 0x39, 0x0c, 0x2b, 0x2c, 0x5a, 0x65, 0x3b, 0x31, + 0xd7, 0x02, 0x4d, 0xcf, 0xe4, 0x07, 0xef, 0xd2, 0xb5, 0x45, 0x5c, 0x78, 0x55, 0x7f, 0x71, 0xcc, + 0x01, 0x35, 0xb4, 0xb4, 0xbc, 0xf4, 0x0a, 0x10, 0x4e, 0x9f, 0xea, 0xe0, 0xf2, 0x99, 0xb8, 0x95, + 0xc5, 0x02, 0x81, 0x01, 0x0e, 0x71, 0x82, 0x27, 0xfa, 0x08, 0x4c, 0x88, 0x48, 0xac, 0x71, 0x37, + 0x9d, 0x8e, 0x9f, 0xc5, 0xe0, 0x04, 0x0e, 0xa7, 0xa8, 0x79, 0x7e, 0x1e, 0xe7, 0x66, 0x93, 0x88, + 0xad, 0x6f, 0xc5, 0xf5, 0xb6, 0xc3, 0xe9, 0x33, 0x6c, 0x7f, 0x10, 0xf9, 0x79, 0x92, 0x58, 0x9c, + 0x51, 0x02, 0xad, 0xc3, 0x44, 0x2b, 0x20, 0x64, 0x87, 0x09, 0xfa, 0xe2, 0x3c, 0x2b, 0xf3, 0xd0, + 0x30, 0xb4, 0x25, 0xd5, 0x04, 0xee, 0x20, 0x03, 0x86, 0x53, 0x1c, 0xd0, 0x2d, 0x18, 0xf2, 0x77, + 0x49, 0xb0, 0x45, 0x9c, 0xc6, 0xf4, 0xd9, 0x0e, 0x8f, 0xb5, 0xc4, 0xe1, 0x76, 0x55, 0xd0, 0x26, + 0x7c, 0x59, 0x24, 0xb8, 0xbb, 0x2f, 0x8b, 0xac, 0x0c, 0xfd, 0x75, 0x0b, 0x4e, 0x4a, 0xeb, 0x50, + 0xad, 0x45, 0x7b, 0x7d, 0xc1, 0xf7, 0xc2, 0x28, 0xe0, 0xc1, 0x4c, 0x1e, 0xc9, 0x0f, 0xf0, 0xb1, + 0x9e, 0x53, 0x48, 0x29, 0xa2, 0x4f, 0xe6, 0x51, 0x84, 0x38, 0xbf, 0x46, 0x7a, 0x35, 0x0d, 0x49, + 0x24, 0x37, 0xa3, 0xb9, 0x70, 0xf9, 0x8d, 0xc5, 0xb5, 0xe9, 0x47, 0x79, 0x24, 0x16, 0xba, 0x18, + 0x6a, 0x49, 0x24, 0x4e, 0xd3, 0xa3, 0x8b, 0x50, 0xf0, 0xc3, 0xe9, 0xc7, 0x3a, 0x64, 0x72, 0xf6, + 0x1b, 0x57, 0x6b, 0xdc, 0xa7, 0xf1, 0x6a, 0x0d, 0x17, 0xfc, 0x50, 0xe6, 0xc8, 0xa1, 0xf7, 0xb1, + 0x70, 0xfa, 0x71, 0xae, 0xb6, 0x94, 0x39, 0x72, 0x18, 0x10, 0xc7, 0x78, 0xb4, 0x05, 0xe3, 0xa1, + 0x71, 0xef, 0x0d, 0xa7, 0xcf, 0xb1, 0x9e, 0x7a, 0x3c, 0x6f, 0xd0, 0x0c, 0x6a, 0x2d, 0x79, 0x85, + 0xc9, 0x05, 0x27, 0xd9, 0xf2, 0xd5, 0xa5, 0xdd, 0xbc, 0xc3, 0xe9, 0x27, 0xba, 0xac, 0x2e, 0x8d, + 0x58, 0x5f, 0x5d, 0x3a, 0x0f, 0x9c, 0xe0, 0x39, 0xf3, 0x1d, 0x30, 0x99, 0x12, 0x97, 0x0e, 0xe3, + 0xbf, 0x3f, 0xb3, 0x0d, 0xa3, 0xc6, 0x94, 0x7c, 0xa0, 0xee, 0x1d, 0xbf, 0x55, 0x82, 0x92, 0x32, + 0xbb, 0xa3, 0x0b, 0xa6, 0x47, 0xc7, 0xc9, 0xa4, 0x47, 0xc7, 0x50, 0xd5, 0x6f, 0x18, 0x4e, 0x1c, + 0xeb, 0x19, 0x11, 0x2b, 0xf3, 0x36, 0xc0, 0xde, 0x1f, 0x19, 0x69, 0xa6, 0x84, 0x62, 0xcf, 0xae, + 0x21, 0x7d, 0x1d, 0xad, 0x13, 0x97, 0x60, 0xd2, 0xf3, 0x99, 0x8c, 0x4e, 0x1a, 0x52, 0x00, 0x63, + 0x72, 0x56, 0x49, 0x0f, 0x80, 0x95, 0x20, 0xc0, 0xe9, 0x32, 0xb4, 0x42, 0x2e, 0x28, 0x25, 0xcd, + 0x21, 0x5c, 0x8e, 0xc2, 0x02, 0x4b, 0xef, 0x86, 0xfc, 0x57, 0x38, 0x3d, 0x91, 0x7f, 0x37, 0xe4, + 0x85, 0x92, 0xc2, 0x58, 0x28, 0x85, 0x31, 0xa6, 0xfd, 0x6f, 0xf9, 0x8d, 0x4a, 0x55, 0x88, 0xf9, + 0x5a, 0x2c, 0xe9, 0x46, 0xa5, 0x8a, 0x39, 0x0e, 0xcd, 0xc1, 0x00, 0xfb, 0x11, 0x4e, 0x8f, 0xe4, + 0x07, 0x4c, 0x62, 0x25, 0xb4, 0x1c, 0x7d, 0xac, 0x00, 0x16, 0x05, 0x99, 0x76, 0x97, 0xde, 0x8d, + 0x98, 0x76, 0x77, 0xf0, 0x1e, 0xb5, 0xbb, 0x92, 0x01, 0x8e, 0x79, 0xa1, 0xdb, 0x70, 0xdc, 0xb8, + 0x8f, 0xaa, 0x57, 0x57, 0x90, 0x6f, 0xf8, 0x4d, 0x10, 0xcf, 0x9f, 0x16, 0x8d, 0x3e, 0x5e, 0xc9, + 0xe2, 0x84, 0xb3, 0x2b, 0x40, 0x4d, 0x98, 0xac, 0xa7, 0x6a, 0x1d, 0xea, 0xbd, 0x56, 0x35, 0x2f, + 0xd2, 0x35, 0xa6, 0x19, 0xa3, 0x57, 0x60, 0xe8, 0x6d, 0x9f, 0x3b, 0x69, 0x89, 0xab, 0x89, 0x8c, + 0xf8, 0x31, 0xf4, 0xc6, 0xd5, 0x1a, 0x83, 0x1f, 0xec, 0x97, 0x87, 0xab, 0x7e, 0x43, 0xfe, 0xc5, + 0xaa, 0x00, 0xfa, 0x7e, 0x0b, 0x66, 0xd2, 0x17, 0x5e, 0xd5, 0xe8, 0xd1, 0xde, 0x1b, 0x6d, 0x8b, + 0x4a, 0x67, 0x96, 0x72, 0xd9, 0xe1, 0x0e, 0x55, 0xa1, 0x0f, 0xd1, 0xf5, 0x14, 0xba, 0x77, 0x88, + 0x48, 0x70, 0xfc, 0x48, 0xbc, 0x9e, 0x28, 0xf4, 0x60, 0xbf, 0x3c, 0xce, 0x77, 0x46, 0xf7, 0x8e, + 0x8a, 0x7a, 0xcd, 0x0b, 0xa0, 0xef, 0x82, 0xe3, 0x41, 0x5a, 0x83, 0x4a, 0xa4, 0x10, 0xfe, 0x54, + 0x2f, 0xbb, 0x6c, 0x72, 0xc0, 0x71, 0x16, 0x43, 0x9c, 0x5d, 0x8f, 0xfd, 0xcb, 0x16, 0xd3, 0x6f, + 0x8b, 0x66, 0x91, 0xb0, 0xdd, 0x3c, 0x8a, 0xb4, 0xea, 0x4b, 0x86, 0xed, 0xf8, 0x9e, 0x3d, 0x9b, + 0xfe, 0x85, 0xc5, 0x3c, 0x9b, 0x8e, 0xf0, 0x8d, 0xd6, 0x1b, 0x30, 0x14, 0xc9, 0x74, 0xf7, 0x1d, + 0x32, 0xc1, 0x6b, 0x8d, 0x62, 0xde, 0x5d, 0xea, 0x92, 0xa3, 0x32, 0xdb, 0x2b, 0x36, 0xf6, 0x3f, + 0xe5, 0x23, 0x20, 0x31, 0x47, 0x60, 0xa2, 0x5b, 0x34, 0x4d, 0x74, 0xe5, 0x2e, 0x5f, 0x90, 0x63, + 0xaa, 0xfb, 0x27, 0x66, 0xbb, 0x99, 0x72, 0xef, 0xdd, 0xee, 0x52, 0x67, 0x7f, 0xde, 0x02, 0x88, + 0xd3, 0x0c, 0xf4, 0x90, 0xd0, 0xf4, 0x25, 0x7a, 0xad, 0xf1, 0x23, 0xbf, 0xee, 0x37, 0x85, 0x81, + 0xe2, 0x54, 0x6c, 0x25, 0xe4, 0xf0, 0x03, 0xed, 0x37, 0x56, 0xd4, 0xa8, 0x2c, 0xe3, 0x7e, 0x16, + 0x63, 0xbb, 0xb5, 0x11, 0xf3, 0xf3, 0x4b, 0x16, 0x1c, 0xcb, 0x72, 0xf8, 0xa7, 0x97, 0x64, 0xae, + 0xe6, 0x54, 0xee, 0x8e, 0x6a, 0x34, 0xaf, 0x0b, 0x38, 0x56, 0x14, 0x3d, 0x67, 0x8a, 0x3d, 0x5c, + 0x08, 0xfc, 0xab, 0x30, 0x5a, 0x0d, 0x88, 0x26, 0x5f, 0xbc, 0xc6, 0x23, 0xe9, 0xf0, 0xf6, 0x3c, + 0x73, 0xe8, 0x28, 0x3a, 0xf6, 0x97, 0x0b, 0x70, 0x8c, 0x3b, 0xed, 0xcc, 0xed, 0xfa, 0x6e, 0xa3, + 0xea, 0x37, 0xc4, 0x33, 0xcd, 0x37, 0x61, 0xa4, 0xa5, 0xe9, 0xa6, 0x3b, 0x85, 0x73, 0xd6, 0x75, + 0xd8, 0xb1, 0x36, 0x4d, 0x87, 0x62, 0x83, 0x17, 0x6a, 0xc0, 0x08, 0xd9, 0x75, 0xeb, 0xca, 0xf3, + 0xa3, 0x70, 0xe8, 0x43, 0x5a, 0xd5, 0xb2, 0xa4, 0xf1, 0xc1, 0x06, 0xd7, 0x9e, 0x5d, 0x6d, 0x35, + 0x11, 0xad, 0xaf, 0x8b, 0xb7, 0xc7, 0x8f, 0x58, 0xf0, 0x50, 0x4e, 0xf0, 0x67, 0x5a, 0xdd, 0x2d, + 0xe6, 0x1e, 0x25, 0xa6, 0xad, 0xaa, 0x8e, 0x3b, 0x4d, 0x61, 0x81, 0x45, 0x1f, 0x05, 0xe0, 0x4e, + 0x4f, 0xc4, 0xab, 0x77, 0x8d, 0x92, 0x6b, 0x84, 0x37, 0xd5, 0x22, 0x55, 0xca, 0xf2, 0x58, 0xe3, + 0x65, 0x7f, 0xa9, 0x0f, 0xfa, 0x99, 0x93, 0x0d, 0xaa, 0xc2, 0xe0, 0x16, 0xcf, 0x93, 0xd6, 0x71, + 0xdc, 0x28, 0xad, 0x4c, 0xbd, 0x16, 0x8f, 0x9b, 0x06, 0xc5, 0x92, 0x0d, 0x5a, 0x85, 0x29, 0x9e, + 0xae, 0xae, 0xb9, 0x48, 0x9a, 0xce, 0x9e, 0x54, 0xfb, 0xf2, 0x0c, 0xec, 0x4a, 0xfd, 0x5d, 0x49, + 0x93, 0xe0, 0xac, 0x72, 0xe8, 0x35, 0x18, 0xa3, 0xd7, 0x70, 0xbf, 0x1d, 0x49, 0x4e, 0x3c, 0x51, + 0x9d, 0xba, 0x99, 0xac, 0x1b, 0x58, 0x9c, 0xa0, 0x46, 0xaf, 0xc0, 0x68, 0x2b, 0xa5, 0xe0, 0xee, + 0x8f, 0x35, 0x41, 0xa6, 0x52, 0xdb, 0xa4, 0x65, 0x3e, 0xff, 0x6d, 0xf6, 0xc2, 0x61, 0x7d, 0x2b, + 0x20, 0xe1, 0x96, 0xdf, 0x6c, 0x30, 0x09, 0xb8, 0x5f, 0xf3, 0xf9, 0x4f, 0xe0, 0x71, 0xaa, 0x04, + 0xe5, 0xb2, 0xe1, 0xb8, 0xcd, 0x76, 0x40, 0x62, 0x2e, 0x03, 0x26, 0x97, 0xe5, 0x04, 0x1e, 0xa7, + 0x4a, 0x74, 0xd7, 0xdc, 0x0f, 0xde, 0x1f, 0xcd, 0xbd, 0xfd, 0x93, 0x05, 0x30, 0x86, 0xf6, 0xdb, + 0x38, 0x81, 0xde, 0xab, 0xd0, 0xb7, 0x19, 0xb4, 0xea, 0xc2, 0xa1, 0x2c, 0xf3, 0xcb, 0xe2, 0xec, + 0xd9, 0xfc, 0xcb, 0xe8, 0x7f, 0xcc, 0x4a, 0xd1, 0x35, 0x7e, 0xbc, 0x1a, 0xf8, 0xf4, 0x90, 0x93, + 0xb1, 0x16, 0xd5, 0xd3, 0x9a, 0x41, 0x19, 0x24, 0xa2, 0x43, 0x54, 0x62, 0xf1, 0x3e, 0x80, 0x73, + 0x30, 0x7c, 0xaf, 0x6a, 0x22, 0x14, 0x8c, 0xe4, 0x82, 0x2e, 0xc2, 0xb0, 0xc8, 0x69, 0xc6, 0x5e, + 0x80, 0xf0, 0xc5, 0xc4, 0x7c, 0xc5, 0x16, 0x63, 0x30, 0xd6, 0x69, 0xec, 0x1f, 0x28, 0xc0, 0x54, + 0xc6, 0x13, 0x3e, 0x7e, 0x8c, 0x6c, 0xba, 0x61, 0xa4, 0x12, 0x74, 0x6b, 0xc7, 0x08, 0x87, 0x63, + 0x45, 0x41, 0xf7, 0x2a, 0x7e, 0x50, 0x25, 0x0f, 0x27, 0xf1, 0x44, 0x46, 0x60, 0x0f, 0x99, 0xea, + 0xfa, 0x2c, 0xf4, 0xb5, 0x43, 0x22, 0x23, 0x6a, 0xab, 0x63, 0x9b, 0x99, 0xb5, 0x19, 0x86, 0x5e, + 0x01, 0x37, 0x95, 0x85, 0x58, 0xbb, 0x02, 0x72, 0x1b, 0x31, 0xc7, 0xd1, 0xc6, 0x45, 0xc4, 0x73, + 0xbc, 0x48, 0x5c, 0x14, 0xe3, 0xc0, 0xb8, 0x0c, 0x8a, 0x05, 0xd6, 0xfe, 0x62, 0x11, 0x4e, 0xe6, + 0x3e, 0xea, 0xa5, 0x4d, 0xdf, 0xf1, 0x3d, 0x37, 0xf2, 0x95, 0x13, 0x1e, 0x0f, 0x86, 0x4b, 0x5a, + 0x5b, 0xab, 0x02, 0x8e, 0x15, 0x05, 0x3a, 0x07, 0xfd, 0x4c, 0x29, 0x9e, 0x4a, 0x55, 0x3e, 0xbf, + 0xc8, 0xa3, 0x23, 0x72, 0xb4, 0x76, 0xaa, 0x17, 0x3b, 0x9e, 0xea, 0x8f, 0x52, 0x09, 0xc6, 0x6f, + 0x26, 0x0f, 0x14, 0xda, 0x5c, 0xdf, 0x6f, 0x62, 0x86, 0x44, 0x8f, 0x8b, 0xfe, 0x4a, 0x78, 0x9d, + 0x61, 0xa7, 0xe1, 0x87, 0x5a, 0xa7, 0x3d, 0x09, 0x83, 0xdb, 0x64, 0x2f, 0x70, 0xbd, 0xcd, 0xa4, + 0x37, 0xe2, 0x15, 0x0e, 0xc6, 0x12, 0x6f, 0x66, 0xcd, 0x1d, 0xbc, 0x1f, 0x59, 0x73, 0xf5, 0x19, + 0x30, 0xd4, 0x55, 0x3c, 0xf9, 0xc1, 0x22, 0x8c, 0xe3, 0xf9, 0xc5, 0xf7, 0x06, 0xe2, 0x5a, 0x7a, + 0x20, 0xee, 0x47, 0x72, 0xd9, 0xc3, 0x8d, 0xc6, 0x2f, 0x58, 0x30, 0xce, 0x32, 0xab, 0x89, 0x88, + 0x1c, 0xae, 0xef, 0x1d, 0xc1, 0x55, 0xe0, 0x51, 0xe8, 0x0f, 0x68, 0xa5, 0xc9, 0x1c, 0xe5, 0xac, + 0x25, 0x98, 0xe3, 0xd0, 0x29, 0xe8, 0x63, 0x4d, 0xa0, 0x83, 0x37, 0xc2, 0xb7, 0xe0, 0x45, 0x27, + 0x72, 0x30, 0x83, 0xb2, 0xd8, 0x80, 0x98, 0xb4, 0x9a, 0x2e, 0x6f, 0x74, 0xec, 0xb2, 0xf0, 0xee, + 0x08, 0xf7, 0x91, 0xd9, 0xb4, 0x77, 0x16, 0x1b, 0x30, 0x9b, 0x65, 0xe7, 0x6b, 0xf6, 0x9f, 0x15, + 0xe0, 0x4c, 0x66, 0xb9, 0x9e, 0x63, 0x03, 0x76, 0x2e, 0xfd, 0x20, 0x93, 0x44, 0x15, 0x8f, 0xd0, + 0xd7, 0xbb, 0xaf, 0x57, 0xe9, 0xbf, 0xbf, 0x87, 0x90, 0x7d, 0x99, 0x5d, 0xf6, 0x2e, 0x09, 0xd9, + 0x97, 0xd9, 0xb6, 0x1c, 0x35, 0xc1, 0x5f, 0x15, 0x72, 0xbe, 0x85, 0x29, 0x0c, 0xce, 0xd3, 0x7d, + 0x86, 0x21, 0x43, 0x79, 0x09, 0xe7, 0x7b, 0x0c, 0x87, 0x61, 0x85, 0x45, 0x73, 0x30, 0xbe, 0xe3, + 0x7a, 0x74, 0xf3, 0xd9, 0x33, 0x45, 0x71, 0x65, 0xcb, 0x58, 0x35, 0xd1, 0x38, 0x49, 0x8f, 0x5c, + 0x2d, 0x9c, 0x1f, 0xff, 0xba, 0x57, 0x0e, 0xb5, 0xea, 0x66, 0x4d, 0x77, 0x0e, 0xd5, 0x8b, 0x19, + 0xa1, 0xfd, 0x56, 0x35, 0x3d, 0x51, 0xb1, 0x77, 0x3d, 0xd1, 0x48, 0xb6, 0x8e, 0x68, 0xe6, 0x15, + 0x18, 0xbd, 0x67, 0xdb, 0x88, 0xfd, 0xf5, 0x22, 0x3c, 0xdc, 0x61, 0xd9, 0xf3, 0xbd, 0xde, 0x18, + 0x03, 0x6d, 0xaf, 0x4f, 0x8d, 0x43, 0x15, 0x8e, 0x6d, 0xb4, 0x9b, 0xcd, 0x3d, 0xf6, 0xa8, 0x89, + 0x34, 0x24, 0x85, 0x90, 0x29, 0xa5, 0x72, 0xe4, 0xd8, 0x72, 0x06, 0x0d, 0xce, 0x2c, 0x49, 0xaf, + 0x58, 0xf4, 0x24, 0xd9, 0x53, 0xac, 0x12, 0x57, 0x2c, 0xac, 0x23, 0xb1, 0x49, 0x8b, 0x2e, 0xc1, + 0xa4, 0xb3, 0xeb, 0xb8, 0x3c, 0x27, 0x82, 0x64, 0xc0, 0xef, 0x58, 0x4a, 0x17, 0x3d, 0x97, 0x24, + 0xc0, 0xe9, 0x32, 0xe8, 0x75, 0x40, 0xfe, 0x4d, 0xf6, 0x50, 0xa2, 0x71, 0x89, 0x78, 0xc2, 0xea, + 0xce, 0xc6, 0xae, 0x18, 0x6f, 0x09, 0x57, 0x53, 0x14, 0x38, 0xa3, 0x54, 0x22, 0xb0, 0xdc, 0x40, + 0x7e, 0x60, 0xb9, 0xce, 0xfb, 0x62, 0xd7, 0xfc, 0x64, 0x17, 0x61, 0xf4, 0x90, 0xee, 0xbf, 0xf6, + 0x7f, 0xb2, 0x40, 0x29, 0x88, 0xcd, 0xc0, 0xd0, 0xaf, 0x30, 0xff, 0x64, 0xae, 0xda, 0xd6, 0x62, + 0x41, 0x1d, 0xd7, 0xfc, 0x93, 0x63, 0x24, 0x36, 0x69, 0xf9, 0x1c, 0xd2, 0xfc, 0x8a, 0x8d, 0x5b, + 0x81, 0x88, 0x5b, 0xa9, 0x28, 0xd0, 0xc7, 0x60, 0xb0, 0xe1, 0xee, 0xba, 0xa1, 0x50, 0x8e, 0x1d, + 0xda, 0x18, 0x17, 0x6f, 0x9d, 0x8b, 0x9c, 0x0d, 0x96, 0xfc, 0xec, 0x1f, 0x2c, 0xc4, 0x7d, 0xf2, + 0x46, 0xdb, 0x8f, 0x9c, 0x23, 0x38, 0xc9, 0x2f, 0x19, 0x27, 0xf9, 0xe3, 0xd9, 0x03, 0xad, 0x35, + 0x29, 0xf7, 0x04, 0xbf, 0x9a, 0x38, 0xc1, 0x9f, 0xe8, 0xce, 0xaa, 0xf3, 0xc9, 0xfd, 0xcf, 0x2c, + 0x98, 0x34, 0xe8, 0x8f, 0xe0, 0x00, 0x59, 0x36, 0x0f, 0x90, 0x47, 0xba, 0x7e, 0x43, 0xce, 0xc1, + 0xf1, 0x7d, 0xc5, 0x44, 0xdb, 0xd9, 0x81, 0xf1, 0x36, 0xf4, 0x6d, 0x39, 0x41, 0x43, 0xdc, 0x8b, + 0x2f, 0xf4, 0xd4, 0xd7, 0xb3, 0x97, 0x9d, 0x40, 0x78, 0x2a, 0x3c, 0x23, 0x7b, 0x9d, 0x82, 0xba, + 0x7a, 0x29, 0xb0, 0xaa, 0xd0, 0x4b, 0x30, 0x10, 0xd6, 0xfd, 0x96, 0x7a, 0x33, 0xc5, 0x92, 0xde, + 0xd6, 0x18, 0xe4, 0x60, 0xbf, 0x8c, 0xcc, 0xea, 0x28, 0x18, 0x0b, 0x7a, 0xf4, 0x26, 0x8c, 0xb2, + 0x5f, 0xca, 0x6d, 0xb0, 0x98, 0xaf, 0xc1, 0xa8, 0xe9, 0x84, 0xdc, 0xa7, 0xd6, 0x00, 0x61, 0x93, + 0xd5, 0xcc, 0x26, 0x94, 0xd4, 0x67, 0x3d, 0x50, 0x6b, 0xf7, 0xbf, 0x2f, 0xc2, 0x54, 0xc6, 0x9c, + 0x43, 0xa1, 0x31, 0x12, 0x17, 0x7b, 0x9c, 0xaa, 0xef, 0x70, 0x2c, 0x42, 0x76, 0x81, 0x6a, 0x88, + 0xb9, 0xd5, 0x73, 0xa5, 0xd7, 0x42, 0x92, 0xac, 0x94, 0x82, 0xba, 0x57, 0x4a, 0x2b, 0x3b, 0xb2, + 0xae, 0xa6, 0x15, 0xa9, 0x96, 0x3e, 0xd0, 0x31, 0xfd, 0xb5, 0x3e, 0x38, 0x96, 0x15, 0x4f, 0x18, + 0x7d, 0x26, 0x91, 0x49, 0xfb, 0x85, 0x4e, 0x3d, 0xac, 0x97, 0xe4, 0xe9, 0xb5, 0x45, 0x18, 0xcf, + 0x59, 0x33, 0xb7, 0x76, 0xd7, 0x6e, 0x16, 0x75, 0xb2, 0xf0, 0x3a, 0x01, 0xcf, 0x80, 0x2e, 0xb7, + 0x8f, 0x0f, 0xf4, 0xdc, 0x00, 0x91, 0x3a, 0x3d, 0x4c, 0xb8, 0x24, 0x49, 0x70, 0x77, 0x97, 0x24, + 0x59, 0x33, 0xaa, 0xc0, 0x40, 0x9d, 0xfb, 0xba, 0x14, 0xbb, 0x6f, 0x61, 0xdc, 0xd1, 0x45, 0x6d, + 0xc0, 0xc2, 0xc1, 0x45, 0x30, 0x98, 0x71, 0x61, 0x58, 0xeb, 0x98, 0x07, 0x3a, 0x79, 0xb6, 0xe9, + 0xc1, 0xa7, 0x75, 0xc1, 0x03, 0x9d, 0x40, 0x3f, 0x62, 0x41, 0xe2, 0xc1, 0x8b, 0x52, 0xca, 0x59, + 0xb9, 0x4a, 0xb9, 0xb3, 0xd0, 0x17, 0xf8, 0x4d, 0x92, 0x4c, 0xd3, 0x8c, 0xfd, 0x26, 0xc1, 0x0c, + 0x43, 0x29, 0xa2, 0x58, 0xd5, 0x32, 0xa2, 0x5f, 0x23, 0xc5, 0x05, 0xf1, 0x51, 0xe8, 0x6f, 0x92, + 0x5d, 0xd2, 0x4c, 0x66, 0xd3, 0x5b, 0xa1, 0x40, 0xcc, 0x71, 0xf6, 0x2f, 0xf4, 0xc1, 0xe9, 0x8e, + 0xb1, 0xae, 0xe8, 0x65, 0x6c, 0xd3, 0x89, 0xc8, 0x2d, 0x67, 0x2f, 0x99, 0xf4, 0xeb, 0x12, 0x07, + 0x63, 0x89, 0x67, 0xcf, 0x3f, 0x79, 0xee, 0x8e, 0x84, 0x0a, 0x53, 0xa4, 0xec, 0x10, 0x58, 0x53, + 0x25, 0x56, 0xbc, 0x1f, 0x2a, 0xb1, 0xe7, 0x00, 0xc2, 0xb0, 0xc9, 0xdd, 0x02, 0x1b, 0xe2, 0x5d, + 0x69, 0x9c, 0xe3, 0xa5, 0xb6, 0x22, 0x30, 0x58, 0xa3, 0x42, 0x8b, 0x30, 0xd1, 0x0a, 0xfc, 0x88, + 0x6b, 0x84, 0x17, 0xb9, 0xe7, 0x6c, 0xbf, 0x19, 0x66, 0xa8, 0x9a, 0xc0, 0xe3, 0x54, 0x09, 0xf4, + 0x22, 0x0c, 0x8b, 0xd0, 0x43, 0x55, 0xdf, 0x6f, 0x0a, 0x25, 0x94, 0x72, 0x26, 0xad, 0xc5, 0x28, + 0xac, 0xd3, 0x69, 0xc5, 0x98, 0x9a, 0x79, 0x30, 0xb3, 0x18, 0x57, 0x35, 0x6b, 0x74, 0x89, 0x30, + 0xe5, 0x43, 0x3d, 0x85, 0x29, 0x8f, 0xd5, 0x72, 0xa5, 0x9e, 0xad, 0x9e, 0xd0, 0x55, 0x91, 0xf5, + 0x95, 0x3e, 0x98, 0x12, 0x13, 0xe7, 0x41, 0x4f, 0x97, 0x6b, 0xe9, 0xe9, 0x72, 0x3f, 0x14, 0x77, + 0xef, 0xcd, 0x99, 0xa3, 0x9e, 0x33, 0x3f, 0x64, 0x81, 0x29, 0xa9, 0xa1, 0xff, 0x3f, 0x37, 0x6b, + 0xe2, 0x8b, 0xb9, 0x92, 0x5f, 0x1c, 0xc3, 0xf8, 0x9d, 0xe5, 0x4f, 0xb4, 0xff, 0x83, 0x05, 0x8f, + 0x74, 0xe5, 0x88, 0x96, 0xa0, 0xc4, 0xc4, 0x49, 0xed, 0xa2, 0xf7, 0x84, 0xf2, 0xac, 0x97, 0x88, + 0x1c, 0xe9, 0x36, 0x2e, 0x89, 0x96, 0x52, 0xe9, 0x29, 0x9f, 0xcc, 0x48, 0x4f, 0x79, 0xdc, 0xe8, + 0x9e, 0x7b, 0xcc, 0x4f, 0xf9, 0x05, 0x7a, 0xe2, 0x18, 0xaf, 0xda, 0xd0, 0x07, 0x0c, 0xa5, 0xa3, + 0x9d, 0x50, 0x3a, 0x22, 0x93, 0x5a, 0x3b, 0x43, 0x3e, 0x02, 0x13, 0x2c, 0x26, 0x21, 0x7b, 0xe7, + 0x21, 0xde, 0xdb, 0x15, 0x62, 0x5f, 0xee, 0x95, 0x04, 0x0e, 0xa7, 0xa8, 0xed, 0x3f, 0x29, 0xc2, + 0x00, 0x5f, 0x7e, 0x47, 0x70, 0xbd, 0x7c, 0x1a, 0x4a, 0xee, 0xce, 0x4e, 0x9b, 0x67, 0x1c, 0xec, + 0x8f, 0x3d, 0x83, 0x2b, 0x12, 0x88, 0x63, 0x3c, 0x5a, 0x16, 0xfa, 0xee, 0x0e, 0x61, 0x8f, 0x79, + 0xc3, 0x67, 0x17, 0x9d, 0xc8, 0xe1, 0xb2, 0x92, 0x3a, 0x67, 0x63, 0xcd, 0x38, 0xfa, 0x24, 0x40, + 0x18, 0x05, 0xae, 0xb7, 0x49, 0x61, 0x22, 0x36, 0xfe, 0x53, 0x1d, 0xb8, 0xd5, 0x14, 0x31, 0xe7, + 0x19, 0xef, 0x39, 0x0a, 0x81, 0x35, 0x8e, 0x68, 0xd6, 0x38, 0xe9, 0x67, 0x12, 0x63, 0x07, 0x9c, + 0x6b, 0x3c, 0x66, 0x33, 0x1f, 0x84, 0x92, 0x62, 0xde, 0x4d, 0xfb, 0x35, 0xa2, 0x8b, 0x45, 0x1f, + 0x86, 0xf1, 0x44, 0xdb, 0x0e, 0xa5, 0x3c, 0xfb, 0x45, 0x0b, 0xc6, 0x79, 0x63, 0x96, 0xbc, 0x5d, + 0x71, 0x1a, 0xdc, 0x81, 0x63, 0xcd, 0x8c, 0x5d, 0x59, 0x0c, 0x7f, 0xef, 0xbb, 0xb8, 0x52, 0x96, + 0x65, 0x61, 0x71, 0x66, 0x1d, 0xe8, 0x3c, 0x5d, 0x71, 0x74, 0xd7, 0x75, 0x9a, 0x22, 0xbe, 0xc1, + 0x08, 0x5f, 0x6d, 0x1c, 0x86, 0x15, 0xd6, 0xfe, 0x03, 0x0b, 0x26, 0x79, 0xcb, 0xaf, 0x90, 0x3d, + 0xb5, 0x37, 0x7d, 0x33, 0xdb, 0x2e, 0x72, 0xdd, 0x16, 0x72, 0x72, 0xdd, 0xea, 0x9f, 0x56, 0xec, + 0xf8, 0x69, 0x5f, 0xb6, 0x40, 0xcc, 0x90, 0x23, 0xd0, 0x67, 0x7c, 0x87, 0xa9, 0xcf, 0x98, 0xc9, + 0x5f, 0x04, 0x39, 0x8a, 0x8c, 0xbf, 0xb4, 0x60, 0x82, 0x13, 0xc4, 0xb6, 0xfa, 0x6f, 0xea, 0x38, + 0xcc, 0x9b, 0x5f, 0x94, 0xe9, 0x7c, 0x79, 0x85, 0xec, 0xad, 0xfb, 0x55, 0x27, 0xda, 0xca, 0xfe, + 0x28, 0x63, 0xb0, 0xfa, 0x3a, 0x0e, 0x56, 0x43, 0x2e, 0x20, 0x23, 0x15, 0x5c, 0x97, 0x00, 0x01, + 0x87, 0x4d, 0x05, 0x67, 0xff, 0xa9, 0x05, 0x88, 0x57, 0x63, 0x08, 0x6e, 0x54, 0x1c, 0x62, 0x50, + 0xed, 0xa0, 0x8b, 0xb7, 0x26, 0x85, 0xc1, 0x1a, 0xd5, 0x7d, 0xe9, 0x9e, 0x84, 0xc3, 0x45, 0xb1, + 0xbb, 0xc3, 0xc5, 0x21, 0x7a, 0xf4, 0xdf, 0x0c, 0x40, 0xf2, 0x65, 0x1f, 0xba, 0x0e, 0x23, 0x75, + 0xa7, 0xe5, 0xdc, 0x74, 0x9b, 0x6e, 0xe4, 0x92, 0xb0, 0x93, 0x37, 0xd6, 0x82, 0x46, 0x27, 0x4c, + 0xe4, 0x1a, 0x04, 0x1b, 0x7c, 0xd0, 0x2c, 0x40, 0x2b, 0x70, 0x77, 0xdd, 0x26, 0xd9, 0x64, 0x6a, + 0x17, 0x16, 0x51, 0x85, 0xbb, 0x86, 0x49, 0x28, 0xd6, 0x28, 0x32, 0xc2, 0x28, 0x14, 0x1f, 0x70, + 0x18, 0x05, 0x38, 0xb2, 0x30, 0x0a, 0x7d, 0x87, 0x0a, 0xa3, 0x30, 0x74, 0xe8, 0x30, 0x0a, 0xfd, + 0x3d, 0x85, 0x51, 0xc0, 0x70, 0x42, 0xca, 0x9e, 0xf4, 0xff, 0xb2, 0xdb, 0x24, 0xe2, 0xc2, 0xc1, + 0xc3, 0xc0, 0xcc, 0xdc, 0xdd, 0x2f, 0x9f, 0xc0, 0x99, 0x14, 0x38, 0xa7, 0x24, 0xfa, 0x28, 0x4c, + 0x3b, 0xcd, 0xa6, 0x7f, 0x4b, 0x0d, 0xea, 0x52, 0x58, 0x77, 0x9a, 0xdc, 0x04, 0x32, 0xc8, 0xb8, + 0x9e, 0xba, 0xbb, 0x5f, 0x9e, 0x9e, 0xcb, 0xa1, 0xc1, 0xb9, 0xa5, 0xd1, 0xab, 0x50, 0x6a, 0x05, + 0x7e, 0x7d, 0x55, 0x7b, 0x7e, 0x7c, 0x86, 0x76, 0x60, 0x55, 0x02, 0x0f, 0xf6, 0xcb, 0xa3, 0xea, + 0x0f, 0x3b, 0xf0, 0xe3, 0x02, 0x19, 0x71, 0x11, 0x86, 0xef, 0x6b, 0x5c, 0x84, 0x6d, 0x98, 0xaa, + 0x91, 0xc0, 0x75, 0x9a, 0xee, 0x1d, 0x2a, 0x2f, 0xcb, 0xfd, 0x69, 0x1d, 0x4a, 0x41, 0x62, 0x47, + 0xee, 0x29, 0x14, 0xb1, 0x96, 0x8d, 0x4b, 0xee, 0xc0, 0x31, 0x23, 0xfb, 0x7f, 0x5b, 0x30, 0x28, + 0x5e, 0xf2, 0x1d, 0x81, 0xd4, 0x38, 0x67, 0x18, 0x25, 0xca, 0xd9, 0x1d, 0xc6, 0x1a, 0x93, 0x6b, + 0x8e, 0xa8, 0x24, 0xcc, 0x11, 0x8f, 0x74, 0x62, 0xd2, 0xd9, 0x10, 0xf1, 0x77, 0x8a, 0x54, 0x7a, + 0x37, 0xde, 0x94, 0x3f, 0xf8, 0x2e, 0x58, 0x83, 0xc1, 0x50, 0xbc, 0x69, 0x2e, 0xe4, 0xbf, 0x06, + 0x49, 0x0e, 0x62, 0xec, 0x45, 0x27, 0x5e, 0x31, 0x4b, 0x26, 0x99, 0x8f, 0xa5, 0x8b, 0x0f, 0xf0, + 0xb1, 0x74, 0xb7, 0x57, 0xf7, 0x7d, 0xf7, 0xe3, 0xd5, 0xbd, 0xfd, 0x35, 0x76, 0x72, 0xea, 0xf0, + 0x23, 0x10, 0xaa, 0x2e, 0x99, 0x67, 0xac, 0xdd, 0x61, 0x66, 0x89, 0x46, 0xe5, 0x08, 0x57, 0x3f, + 0x6f, 0xc1, 0xe9, 0x8c, 0xaf, 0xd2, 0x24, 0xad, 0x67, 0x60, 0xc8, 0x69, 0x37, 0x5c, 0xb5, 0x96, + 0x35, 0xd3, 0xe4, 0x9c, 0x80, 0x63, 0x45, 0x81, 0x16, 0x60, 0x92, 0xdc, 0x6e, 0xb9, 0xdc, 0x90, + 0xab, 0x3b, 0x1f, 0x17, 0xf9, 0xf3, 0xcf, 0xa5, 0x24, 0x12, 0xa7, 0xe9, 0x55, 0x80, 0xa8, 0x62, + 0x6e, 0x80, 0xa8, 0x9f, 0xb5, 0x60, 0x58, 0xbd, 0xea, 0x7d, 0xe0, 0xbd, 0xfd, 0x11, 0xb3, 0xb7, + 0x1f, 0xee, 0xd0, 0xdb, 0x39, 0xdd, 0xfc, 0x7b, 0x05, 0xd5, 0xde, 0xaa, 0x1f, 0x44, 0x3d, 0x48, + 0x70, 0xf7, 0xfe, 0x70, 0xe2, 0x22, 0x0c, 0x3b, 0xad, 0x96, 0x44, 0x48, 0x0f, 0x38, 0x16, 0x58, + 0x3e, 0x06, 0x63, 0x9d, 0x46, 0xbd, 0xe3, 0x28, 0xe6, 0xbe, 0xe3, 0x68, 0x00, 0x44, 0x4e, 0xb0, + 0x49, 0x22, 0x0a, 0x13, 0x0e, 0xbb, 0xf9, 0xfb, 0x4d, 0x3b, 0x72, 0x9b, 0xb3, 0xae, 0x17, 0x85, + 0x51, 0x30, 0x5b, 0xf1, 0xa2, 0xab, 0x01, 0xbf, 0x42, 0x6a, 0x21, 0xd6, 0x14, 0x2f, 0xac, 0xf1, + 0x95, 0x11, 0x2c, 0x58, 0x1d, 0xfd, 0xa6, 0x2b, 0xc5, 0x9a, 0x80, 0x63, 0x45, 0x61, 0x7f, 0x90, + 0x9d, 0x3e, 0xac, 0x4f, 0x0f, 0x17, 0x5e, 0xec, 0xcf, 0x46, 0xd4, 0x68, 0x30, 0xa3, 0xe8, 0xa2, + 0x1e, 0xc4, 0xac, 0xf3, 0x66, 0x4f, 0x2b, 0xd6, 0x5f, 0x44, 0xc6, 0x91, 0xce, 0xd0, 0xc7, 0x53, + 0xee, 0x31, 0xcf, 0x76, 0x39, 0x35, 0x0e, 0xe1, 0x10, 0xc3, 0xb2, 0x4c, 0xb1, 0x1c, 0x3c, 0x95, + 0xaa, 0x58, 0x17, 0x5a, 0x96, 0x29, 0x81, 0xc0, 0x31, 0x0d, 0x15, 0xa6, 0xd4, 0x9f, 0x70, 0x1a, + 0xc5, 0xc1, 0x88, 0x15, 0x75, 0x88, 0x35, 0x0a, 0x74, 0x41, 0x28, 0x14, 0xb8, 0x5d, 0xe0, 0xe1, + 0x84, 0x42, 0x41, 0x76, 0x97, 0xa6, 0x05, 0xba, 0x08, 0xc3, 0xe4, 0x76, 0x44, 0x02, 0xcf, 0x69, + 0xd2, 0x1a, 0xfa, 0xe3, 0xf8, 0x99, 0x4b, 0x31, 0x18, 0xeb, 0x34, 0x68, 0x1d, 0xc6, 0x43, 0xae, + 0x67, 0x53, 0x21, 0xf0, 0xb9, 0xbe, 0xf2, 0x29, 0xf5, 0x9e, 0xda, 0x44, 0x1f, 0x30, 0x10, 0xdf, + 0x9d, 0x64, 0x94, 0x89, 0x24, 0x0b, 0xf4, 0x1a, 0x8c, 0x35, 0x7d, 0xa7, 0x31, 0xef, 0x34, 0x1d, + 0xaf, 0xce, 0xfa, 0x67, 0xc8, 0xcc, 0x55, 0xbe, 0x62, 0x60, 0x71, 0x82, 0x9a, 0x0a, 0x6f, 0x3a, + 0x44, 0x84, 0x69, 0x73, 0xbc, 0x4d, 0x12, 0x4e, 0x97, 0xd8, 0x57, 0x31, 0xe1, 0x6d, 0x25, 0x87, + 0x06, 0xe7, 0x96, 0x46, 0x2f, 0xc1, 0x88, 0xfc, 0x7c, 0x2d, 0x28, 0x4b, 0xfc, 0x24, 0x46, 0xc3, + 0x61, 0x83, 0x12, 0x85, 0x70, 0x5c, 0xfe, 0x5f, 0x0f, 0x9c, 0x8d, 0x0d, 0xb7, 0x2e, 0x22, 0x15, + 0xf0, 0xe7, 0xc3, 0x1f, 0x96, 0x6f, 0x15, 0x97, 0xb2, 0x88, 0x0e, 0xf6, 0xcb, 0xa7, 0x44, 0xaf, + 0x65, 0xe2, 0x71, 0x36, 0x6f, 0xb4, 0x0a, 0x53, 0x5b, 0xc4, 0x69, 0x46, 0x5b, 0x0b, 0x5b, 0xa4, + 0xbe, 0x2d, 0x17, 0x1c, 0x0b, 0xf3, 0xa2, 0x3d, 0x1d, 0xb9, 0x9c, 0x26, 0xc1, 0x59, 0xe5, 0xd0, + 0x5b, 0x30, 0xdd, 0x6a, 0xdf, 0x6c, 0xba, 0xe1, 0xd6, 0x9a, 0x1f, 0x31, 0x27, 0xa4, 0xb9, 0x46, + 0x23, 0x20, 0x21, 0x7f, 0x5d, 0xca, 0x8e, 0x5e, 0x19, 0x48, 0xa7, 0x9a, 0x43, 0x87, 0x73, 0x39, + 0xa0, 0x3b, 0x70, 0x3c, 0x31, 0x11, 0x44, 0x44, 0x8c, 0xb1, 0xfc, 0x04, 0x38, 0xb5, 0xac, 0x02, + 0x22, 0xb8, 0x4c, 0x16, 0x0a, 0x67, 0x57, 0x81, 0x5e, 0x06, 0x70, 0x5b, 0xcb, 0xce, 0x8e, 0xdb, + 0xa4, 0x57, 0xc5, 0x29, 0x36, 0x47, 0xe8, 0xb5, 0x01, 0x2a, 0x55, 0x09, 0xa5, 0x7b, 0xb3, 0xf8, + 0xb7, 0x87, 0x35, 0x6a, 0xb4, 0x02, 0x63, 0xe2, 0xdf, 0x9e, 0x18, 0xd2, 0x49, 0x95, 0x2b, 0x71, + 0x4c, 0x96, 0x50, 0xe3, 0x98, 0x80, 0xe0, 0x44, 0x59, 0xb4, 0x09, 0xa7, 0x65, 0xa2, 0x46, 0x7d, + 0x7e, 0xca, 0x31, 0x08, 0x59, 0xd6, 0x99, 0x21, 0xfe, 0x2a, 0x65, 0xae, 0x13, 0x21, 0xee, 0xcc, + 0x87, 0x9e, 0xeb, 0xfa, 0x34, 0xe7, 0x6f, 0x8e, 0x8f, 0xc7, 0x11, 0x07, 0x57, 0x92, 0x48, 0x9c, + 0xa6, 0x47, 0x3e, 0x1c, 0x77, 0xbd, 0xac, 0x59, 0x7d, 0x82, 0x31, 0xfa, 0x10, 0x7f, 0x6e, 0xdd, + 0x79, 0x46, 0x67, 0xe2, 0x71, 0x36, 0x5f, 0x54, 0x81, 0xa9, 0x88, 0x03, 0x16, 0xdd, 0x90, 0x27, + 0xb5, 0xa0, 0x57, 0xb2, 0x87, 0x78, 0x2a, 0x79, 0x3a, 0x9b, 0xd7, 0xd3, 0x68, 0x9c, 0x55, 0xe6, + 0x9d, 0xb9, 0x10, 0xfe, 0xbe, 0x45, 0x4b, 0x6b, 0x82, 0x3e, 0xfa, 0x14, 0x8c, 0xe8, 0xfd, 0x23, + 0x84, 0x96, 0x73, 0xd9, 0x72, 0xb0, 0xb6, 0xbd, 0xf0, 0x6b, 0x82, 0xda, 0x42, 0x74, 0x1c, 0x36, + 0x38, 0xa2, 0x7a, 0x46, 0x98, 0x84, 0x0b, 0xbd, 0x09, 0x45, 0xbd, 0x7b, 0xd0, 0x11, 0xc8, 0x5e, + 0x39, 0x68, 0x05, 0x86, 0xea, 0x4d, 0x97, 0x78, 0x51, 0xa5, 0xda, 0x29, 0x10, 0xe4, 0x82, 0xa0, + 0x11, 0x4b, 0x51, 0xe4, 0xa2, 0xe1, 0x30, 0xac, 0x38, 0xd8, 0x2f, 0xc1, 0x70, 0xad, 0x49, 0x48, + 0x8b, 0xbf, 0x04, 0x42, 0x4f, 0xb2, 0x8b, 0x09, 0x13, 0x2d, 0x2d, 0x26, 0x5a, 0xea, 0x77, 0x0e, + 0x26, 0x54, 0x4a, 0xbc, 0xfd, 0x1b, 0x05, 0x28, 0x77, 0x49, 0x89, 0x94, 0xb0, 0x85, 0x59, 0x3d, + 0xd9, 0xc2, 0xe6, 0x60, 0x3c, 0xfe, 0xa7, 0xab, 0xd9, 0x94, 0x3b, 0xed, 0x75, 0x13, 0x8d, 0x93, + 0xf4, 0x3d, 0xbf, 0x8c, 0xd0, 0xcd, 0x69, 0x7d, 0x5d, 0xdf, 0xf6, 0x18, 0x66, 0xf4, 0xfe, 0xde, + 0xef, 0xde, 0xb9, 0x26, 0x51, 0xfb, 0x6b, 0x05, 0x38, 0xae, 0xba, 0xf0, 0xdb, 0xb7, 0xe3, 0xae, + 0xa5, 0x3b, 0xee, 0x3e, 0x18, 0x94, 0xed, 0xab, 0x30, 0xc0, 0x63, 0x62, 0xf6, 0x20, 0xf3, 0x3f, + 0x6a, 0x86, 0xea, 0x56, 0x62, 0xa6, 0x11, 0xae, 0xfb, 0xfb, 0x2d, 0x18, 0x4f, 0x3c, 0xb1, 0x43, + 0x58, 0x7b, 0x87, 0x7d, 0x2f, 0x72, 0x79, 0x96, 0xc4, 0x7f, 0x16, 0xfa, 0xb6, 0xfc, 0x30, 0x4a, + 0x7a, 0x9b, 0x5c, 0xf6, 0xc3, 0x08, 0x33, 0x8c, 0xfd, 0x87, 0x16, 0xf4, 0xaf, 0x3b, 0xae, 0x17, + 0x49, 0xcb, 0x84, 0x95, 0x63, 0x99, 0xe8, 0xe5, 0xbb, 0xd0, 0x8b, 0x30, 0x40, 0x36, 0x36, 0x48, + 0x3d, 0x12, 0xa3, 0x2a, 0xe3, 0x31, 0x0c, 0x2c, 0x31, 0x28, 0x15, 0x42, 0x59, 0x65, 0xfc, 0x2f, + 0x16, 0xc4, 0xe8, 0x06, 0x94, 0x22, 0x77, 0x87, 0xcc, 0x35, 0x1a, 0xc2, 0x5e, 0x7f, 0x0f, 0x41, + 0x44, 0xd6, 0x25, 0x03, 0x1c, 0xf3, 0xb2, 0xbf, 0x58, 0x00, 0x88, 0x83, 0x89, 0x75, 0xfb, 0xc4, + 0xf9, 0x94, 0x25, 0xf7, 0x5c, 0x86, 0x25, 0x17, 0xc5, 0x0c, 0x33, 0xcc, 0xb8, 0xaa, 0x9b, 0x8a, + 0x3d, 0x75, 0x53, 0xdf, 0x61, 0xba, 0x69, 0x01, 0x26, 0xe3, 0x60, 0x68, 0x66, 0x2c, 0x48, 0x76, + 0x7e, 0xaf, 0x27, 0x91, 0x38, 0x4d, 0x6f, 0x13, 0x38, 0xab, 0x62, 0x42, 0x89, 0xb3, 0x90, 0x39, + 0xa3, 0xeb, 0x96, 0xf1, 0x2e, 0xfd, 0x14, 0x9b, 0xaa, 0x0b, 0xb9, 0xa6, 0xea, 0x1f, 0xb7, 0xe0, + 0x58, 0xb2, 0x1e, 0xf6, 0x72, 0xfb, 0xf3, 0x16, 0x1c, 0x8f, 0x33, 0x82, 0xa4, 0xdd, 0x03, 0x5e, + 0xe8, 0x18, 0xe7, 0x2a, 0xa7, 0xc5, 0x71, 0xe0, 0x8f, 0xd5, 0x2c, 0xd6, 0x38, 0xbb, 0x46, 0xfb, + 0x7f, 0xf5, 0xc1, 0x74, 0x5e, 0x80, 0x2c, 0xf6, 0x56, 0xc5, 0xb9, 0x5d, 0xdb, 0x26, 0xb7, 0xc4, + 0x8b, 0x80, 0xf8, 0xad, 0x0a, 0x07, 0x63, 0x89, 0x4f, 0x26, 0x81, 0x29, 0xf4, 0x98, 0x04, 0x66, + 0x0b, 0x26, 0x6f, 0x6d, 0x11, 0xef, 0x9a, 0x17, 0x3a, 0x91, 0x1b, 0x6e, 0xb8, 0xcc, 0xb8, 0xcd, + 0xe7, 0x8d, 0x4c, 0x64, 0x3e, 0x79, 0x23, 0x49, 0x70, 0xb0, 0x5f, 0x3e, 0x6d, 0x00, 0xe2, 0x26, + 0xf3, 0x8d, 0x04, 0xa7, 0x99, 0xa6, 0x73, 0xe8, 0xf4, 0x3d, 0xe0, 0x1c, 0x3a, 0x3b, 0xae, 0x70, + 0x89, 0x91, 0x0f, 0x11, 0xd8, 0xb5, 0x75, 0x55, 0x41, 0xb1, 0x46, 0x81, 0x3e, 0x01, 0x48, 0x4f, + 0x82, 0x66, 0xc4, 0x27, 0x7d, 0xf6, 0xee, 0x7e, 0x19, 0xad, 0xa5, 0xb0, 0x07, 0xfb, 0xe5, 0x29, + 0x0a, 0xad, 0x78, 0xf4, 0xfa, 0x1b, 0x07, 0x75, 0xcb, 0x60, 0x84, 0x6e, 0xc0, 0x04, 0x85, 0xb2, + 0x15, 0x25, 0x83, 0x9f, 0xf2, 0x2b, 0xeb, 0xd3, 0x77, 0xf7, 0xcb, 0x13, 0x6b, 0x09, 0x5c, 0x1e, + 0xeb, 0x14, 0x93, 0x8c, 0x54, 0x3a, 0x43, 0xbd, 0xa6, 0xd2, 0xb1, 0x3f, 0x6f, 0xc1, 0x49, 0x7a, + 0xc0, 0x35, 0x56, 0x72, 0x2c, 0xdc, 0x4e, 0xcb, 0xe5, 0x36, 0x14, 0x71, 0xd4, 0x30, 0x5d, 0x5d, + 0xb5, 0xc2, 0x2d, 0x28, 0x0a, 0x4b, 0x77, 0xf8, 0x6d, 0xd7, 0x6b, 0x24, 0x77, 0xf8, 0x2b, 0xae, + 0xd7, 0xc0, 0x0c, 0xa3, 0x8e, 0xac, 0x62, 0xee, 0x7b, 0x88, 0xaf, 0xd0, 0xb5, 0x4a, 0xdb, 0xf2, + 0x4d, 0x6d, 0x06, 0x7a, 0x5a, 0xb7, 0x77, 0x0a, 0xd7, 0xc6, 0x5c, 0x5b, 0xe7, 0xe7, 0x2c, 0x10, + 0xef, 0xa7, 0x7b, 0x38, 0x93, 0xdf, 0x84, 0x91, 0xdd, 0x74, 0x82, 0xc8, 0xb3, 0xf9, 0x0f, 0xca, + 0x45, 0xd8, 0x77, 0x25, 0xa2, 0x1b, 0xc9, 0x20, 0x0d, 0x5e, 0x76, 0x03, 0x04, 0x76, 0x91, 0x30, + 0xab, 0x46, 0xf7, 0xd6, 0x3c, 0x07, 0xd0, 0x60, 0xb4, 0x2c, 0x6b, 0x74, 0xc1, 0x94, 0xb8, 0x16, + 0x15, 0x06, 0x6b, 0x54, 0xf6, 0x6f, 0x17, 0x60, 0x58, 0x26, 0x24, 0x6c, 0x7b, 0xbd, 0xe8, 0x1e, + 0x0f, 0x95, 0xa1, 0x1c, 0x5d, 0x80, 0x12, 0x53, 0x8e, 0x57, 0x63, 0x95, 0xad, 0x52, 0x4d, 0xad, + 0x4a, 0x04, 0x8e, 0x69, 0x98, 0xf8, 0xde, 0xbe, 0xc9, 0xc8, 0x13, 0xaf, 0x7d, 0x6b, 0x1c, 0x8c, + 0x25, 0x1e, 0x7d, 0x14, 0x26, 0x78, 0xb9, 0xc0, 0x6f, 0x39, 0x9b, 0xdc, 0xa0, 0xd6, 0xaf, 0x42, + 0xa8, 0x4c, 0xac, 0x26, 0x70, 0x07, 0xfb, 0xe5, 0x63, 0x49, 0x18, 0xb3, 0x14, 0xa7, 0xb8, 0x30, + 0xbf, 0x39, 0x5e, 0x09, 0xdd, 0xd5, 0x53, 0xee, 0x76, 0x31, 0x0a, 0xeb, 0x74, 0xf6, 0xa7, 0x00, + 0xa5, 0x53, 0x33, 0xa2, 0xd7, 0xb9, 0xdf, 0xb5, 0x1b, 0x90, 0x46, 0x27, 0xcb, 0xb1, 0x1e, 0x28, + 0x44, 0x3e, 0xd4, 0xe3, 0xa5, 0xb0, 0x2a, 0x6f, 0xff, 0x40, 0x1f, 0x4c, 0x24, 0x43, 0x13, 0xa0, + 0xcb, 0x30, 0xc0, 0x45, 0x4a, 0xc1, 0xbe, 0x83, 0x63, 0x92, 0x16, 0xd0, 0x80, 0x1d, 0xae, 0x42, + 0x2a, 0x15, 0xe5, 0xd1, 0x5b, 0x30, 0xdc, 0xf0, 0x6f, 0x79, 0xb7, 0x9c, 0xa0, 0x31, 0x57, 0xad, + 0x88, 0xe9, 0x9c, 0xa9, 0x2d, 0x59, 0x8c, 0xc9, 0xf4, 0x20, 0x09, 0xcc, 0x08, 0x1f, 0xa3, 0xb0, + 0xce, 0x0e, 0xad, 0xb3, 0x6c, 0x23, 0x1b, 0xee, 0xe6, 0xaa, 0xd3, 0xea, 0xf4, 0x08, 0x67, 0x41, + 0x12, 0x69, 0x9c, 0x47, 0x45, 0x4a, 0x12, 0x8e, 0xc0, 0x31, 0x23, 0xf4, 0x19, 0x98, 0x0a, 0x73, + 0xec, 0x37, 0x79, 0x99, 0x7a, 0x3b, 0x99, 0x34, 0xf8, 0xcd, 0x3f, 0xcb, 0xd2, 0x93, 0x55, 0x0d, + 0xba, 0x0d, 0x48, 0xe8, 0x49, 0xd7, 0x83, 0x76, 0x18, 0xcd, 0xb7, 0xbd, 0x46, 0x53, 0x66, 0x23, + 0xc9, 0xce, 0xe5, 0x9d, 0xa2, 0xd6, 0xea, 0x66, 0xa1, 0x4a, 0xd3, 0x14, 0x38, 0xa3, 0x0e, 0xfb, + 0x73, 0x7d, 0x30, 0x23, 0x73, 0xa1, 0x66, 0x3c, 0x36, 0xf8, 0xac, 0x95, 0x78, 0x6d, 0xf0, 0x72, + 0xfe, 0xae, 0xf4, 0xc0, 0xde, 0x1c, 0x7c, 0x21, 0xfd, 0xe6, 0xe0, 0xd5, 0x43, 0x36, 0xe3, 0xbe, + 0xbd, 0x3c, 0xf8, 0xb6, 0x7d, 0x2e, 0xf0, 0xa5, 0x63, 0x60, 0x9c, 0x23, 0x08, 0x83, 0xca, 0xf9, + 0xdf, 0xc9, 0xe5, 0xe9, 0xb2, 0xa0, 0x31, 0x4e, 0xa6, 0x11, 0x19, 0x2d, 0x9a, 0x6d, 0xb5, 0x8a, + 0x0f, 0xe5, 0x49, 0x76, 0x5a, 0xd1, 0xde, 0xa2, 0x1b, 0x88, 0x16, 0x67, 0xf2, 0x5c, 0x12, 0x34, + 0x69, 0x9e, 0x12, 0x83, 0x15, 0x1f, 0xb4, 0x0b, 0x93, 0x9b, 0x75, 0x92, 0x48, 0x1f, 0x5e, 0xcc, + 0x5f, 0xb7, 0x97, 0x16, 0x96, 0x3a, 0xe4, 0x0e, 0x67, 0x37, 0x95, 0x14, 0x09, 0x4e, 0x57, 0xc1, + 0x52, 0x97, 0x3b, 0xb7, 0xc2, 0xa5, 0xa6, 0x13, 0x46, 0x6e, 0x7d, 0xbe, 0xe9, 0xd7, 0xb7, 0x6b, + 0x91, 0x1f, 0xc8, 0xdc, 0x65, 0x99, 0x17, 0x85, 0xb9, 0x1b, 0xb5, 0x14, 0x7d, 0x3a, 0x75, 0x79, + 0x16, 0x15, 0xce, 0xac, 0x0b, 0xad, 0xc1, 0xe0, 0xa6, 0x1b, 0x61, 0xd2, 0xf2, 0xc5, 0x6e, 0x91, + 0xb9, 0x15, 0x5e, 0xe2, 0x24, 0xe9, 0x54, 0xe2, 0x02, 0x81, 0x25, 0x13, 0xf4, 0xba, 0x3a, 0x04, + 0x06, 0xf2, 0xb5, 0x85, 0x69, 0x27, 0xae, 0xcc, 0x63, 0xe0, 0x35, 0x28, 0x7a, 0x1b, 0x61, 0xa7, + 0xd0, 0x23, 0x6b, 0xcb, 0xb5, 0x74, 0x8a, 0xef, 0xb5, 0xe5, 0x1a, 0xa6, 0x05, 0xd9, 0x2b, 0xc5, + 0xb0, 0x1e, 0xba, 0x22, 0x0b, 0x4b, 0xe6, 0xa3, 0xcd, 0x4a, 0x6d, 0xa1, 0x56, 0x49, 0xa7, 0x35, + 0x67, 0x60, 0xcc, 0x8b, 0xa3, 0xeb, 0x50, 0xda, 0xe4, 0x1b, 0xdf, 0x46, 0x28, 0xf2, 0x21, 0x67, + 0x1e, 0x46, 0x97, 0x24, 0x51, 0x3a, 0x99, 0xb9, 0x42, 0xe1, 0x98, 0x15, 0xfa, 0x9c, 0x05, 0xc7, + 0x93, 0x09, 0xa5, 0xd9, 0xdb, 0x22, 0xe1, 0xef, 0xf4, 0x62, 0x2f, 0x19, 0xbe, 0x59, 0x01, 0xa3, + 0x42, 0x66, 0x2b, 0xc8, 0x24, 0xc3, 0xd9, 0xd5, 0xd1, 0x8e, 0x0e, 0x6e, 0x36, 0x84, 0xdf, 0x4d, + 0x66, 0x47, 0x27, 0xe2, 0xb0, 0xf0, 0x8e, 0xc6, 0xf3, 0x8b, 0x98, 0x16, 0x44, 0xeb, 0x00, 0x1b, + 0x4d, 0x22, 0x73, 0xdf, 0x8f, 0xe4, 0x9f, 0xfe, 0xcb, 0x8a, 0x4a, 0x26, 0x1e, 0xa2, 0x32, 0x61, + 0x0c, 0xc5, 0x1a, 0x1f, 0x3a, 0x95, 0xea, 0xae, 0xd7, 0x20, 0x01, 0xb3, 0xc4, 0xe4, 0x4c, 0xa5, + 0x05, 0x46, 0x91, 0x9e, 0x4a, 0x1c, 0x8e, 0x05, 0x07, 0xc6, 0x8b, 0xb4, 0xb6, 0x36, 0xc2, 0x4e, + 0x11, 0xf6, 0x17, 0x48, 0x6b, 0x2b, 0x31, 0xa1, 0x38, 0x2f, 0x06, 0xc7, 0x82, 0x03, 0x5d, 0x32, + 0x1b, 0x74, 0x01, 0x91, 0x60, 0x7a, 0x3c, 0x7f, 0xc9, 0x2c, 0x73, 0x92, 0xf4, 0x92, 0x11, 0x08, + 0x2c, 0x99, 0xa0, 0x4f, 0x9a, 0xd2, 0xce, 0x04, 0xe3, 0xf9, 0x74, 0x17, 0x69, 0xc7, 0xe0, 0xdb, + 0x59, 0xde, 0x79, 0x19, 0x0a, 0x1b, 0x75, 0x66, 0xc1, 0xc9, 0x51, 0x70, 0x2f, 0x2f, 0x18, 0xdc, + 0x58, 0xc4, 0xea, 0xe5, 0x05, 0x5c, 0xd8, 0xa8, 0xd3, 0xa9, 0xef, 0xdc, 0x69, 0x07, 0x64, 0xd9, + 0x6d, 0x12, 0x11, 0x6d, 0x3f, 0x73, 0xea, 0xcf, 0x49, 0xa2, 0xf4, 0xd4, 0x57, 0x28, 0x1c, 0xb3, + 0xa2, 0x7c, 0x63, 0x19, 0x6c, 0x2a, 0x9f, 0xaf, 0x12, 0xb5, 0xd2, 0x7c, 0x33, 0xa5, 0xb0, 0x6d, + 0x18, 0xdd, 0x0d, 0x5b, 0x5b, 0x44, 0xee, 0x8a, 0xcc, 0xb6, 0x94, 0xf3, 0x30, 0xff, 0xba, 0x20, + 0x74, 0x83, 0xa8, 0xed, 0x34, 0x53, 0x1b, 0x39, 0xd3, 0x03, 0x5c, 0xd7, 0x99, 0x61, 0x93, 0x37, + 0x9d, 0x08, 0x6f, 0xf3, 0xe8, 0x59, 0xcc, 0xca, 0x94, 0x33, 0x11, 0x32, 0x02, 0x6c, 0xf1, 0x89, + 0x20, 0x10, 0x58, 0x32, 0x51, 0x9d, 0xcd, 0x0e, 0xa0, 0x13, 0x5d, 0x3a, 0x3b, 0xd5, 0xde, 0xb8, + 0xb3, 0xd9, 0x81, 0x13, 0xb3, 0x62, 0x07, 0x4d, 0x2b, 0x23, 0xf7, 0x36, 0xb3, 0x31, 0xe5, 0x1c, + 0x34, 0xdd, 0x72, 0x75, 0xf3, 0x83, 0x26, 0x8b, 0x0a, 0x67, 0xd6, 0x45, 0x3f, 0xae, 0x25, 0x03, + 0xa1, 0x89, 0x8c, 0x00, 0x4f, 0xe6, 0xc4, 0x11, 0x4c, 0x47, 0x4b, 0xe3, 0x1f, 0xa7, 0x50, 0x38, + 0x66, 0x85, 0x1a, 0x30, 0xd6, 0x32, 0x02, 0x6c, 0xb2, 0xcc, 0x06, 0x39, 0x72, 0x41, 0x56, 0x28, + 0x4e, 0xae, 0xce, 0x30, 0x31, 0x38, 0xc1, 0x93, 0xb9, 0x99, 0xf1, 0x37, 0x63, 0x2c, 0xf1, 0x41, + 0xce, 0x50, 0x67, 0x3c, 0x2b, 0xe3, 0x43, 0x2d, 0x10, 0x58, 0x32, 0xa1, 0xbd, 0x21, 0x5e, 0x3a, + 0xf9, 0x21, 0xcb, 0x1f, 0x92, 0x67, 0x0d, 0xce, 0xb2, 0x69, 0xc8, 0xa8, 0xd2, 0x02, 0x85, 0x63, + 0x56, 0x74, 0x27, 0xa7, 0x07, 0xde, 0xa9, 0xfc, 0x9d, 0x3c, 0x79, 0xdc, 0xb1, 0x9d, 0x9c, 0x1e, + 0x76, 0x45, 0x71, 0xd4, 0xa9, 0x20, 0xc8, 0x2c, 0xf7, 0x41, 0x4e, 0xbb, 0x54, 0x14, 0xe5, 0x74, + 0xbb, 0x14, 0x0a, 0xc7, 0xac, 0xec, 0x1f, 0x28, 0xc0, 0x99, 0xce, 0xeb, 0x2d, 0x36, 0xd4, 0x54, + 0x63, 0xc7, 0x98, 0x84, 0xa1, 0x86, 0xab, 0x0d, 0x62, 0xaa, 0x9e, 0xe3, 0xa2, 0x5e, 0x82, 0x49, + 0xf5, 0x1e, 0xad, 0xe9, 0xd6, 0xf7, 0xd6, 0x62, 0x4d, 0x8d, 0x8a, 0x20, 0x52, 0x4b, 0x12, 0xe0, + 0x74, 0x19, 0x34, 0x07, 0xe3, 0x06, 0xb0, 0xb2, 0x28, 0xd4, 0x03, 0x71, 0xb4, 0x7d, 0x13, 0x8d, + 0x93, 0xf4, 0xf6, 0xcf, 0x58, 0xf0, 0x50, 0x4e, 0xea, 0xe3, 0x9e, 0xc3, 0x7e, 0x6e, 0xc0, 0x78, + 0xcb, 0x2c, 0xda, 0x25, 0x52, 0xb1, 0x91, 0x60, 0x59, 0xb5, 0x35, 0x81, 0xc0, 0x49, 0xa6, 0xf6, + 0x4f, 0x15, 0xe0, 0x74, 0x47, 0x07, 0x6b, 0x84, 0xe1, 0xc4, 0xe6, 0x4e, 0xe8, 0x2c, 0x04, 0xa4, + 0x41, 0xbc, 0xc8, 0x75, 0x9a, 0xb5, 0x16, 0xa9, 0x6b, 0xa6, 0x36, 0xe6, 0xa9, 0x7c, 0x69, 0xb5, + 0x36, 0x97, 0xa6, 0xc0, 0x39, 0x25, 0xd1, 0x32, 0xa0, 0x34, 0x46, 0x8c, 0x30, 0xbb, 0x9a, 0xa6, + 0xf9, 0xe1, 0x8c, 0x12, 0xe8, 0x83, 0x30, 0xaa, 0x1c, 0xb7, 0xb5, 0x11, 0x67, 0x1b, 0x3b, 0xd6, + 0x11, 0xd8, 0xa4, 0x43, 0x17, 0x79, 0x1a, 0x16, 0x91, 0xb0, 0x47, 0xd8, 0xe5, 0xc6, 0x65, 0x8e, + 0x15, 0x01, 0xc6, 0x3a, 0xcd, 0xfc, 0x4b, 0xbf, 0xf9, 0x8d, 0x33, 0xef, 0xfb, 0xdd, 0x6f, 0x9c, + 0x79, 0xdf, 0x1f, 0x7c, 0xe3, 0xcc, 0xfb, 0xbe, 0xfb, 0xee, 0x19, 0xeb, 0x37, 0xef, 0x9e, 0xb1, + 0x7e, 0xf7, 0xee, 0x19, 0xeb, 0x0f, 0xee, 0x9e, 0xb1, 0xfe, 0xf3, 0xdd, 0x33, 0xd6, 0x17, 0xff, + 0xf8, 0xcc, 0xfb, 0xde, 0x44, 0x71, 0x20, 0xdd, 0x0b, 0x74, 0x74, 0x2e, 0xec, 0x5e, 0xfc, 0x7f, + 0x01, 0x00, 0x00, 0xff, 0xff, 0xf4, 0xd2, 0x6b, 0xb7, 0x27, 0x1a, 0x01, 0x00, } func (m *AWSElasticBlockStoreVolumeSource) Marshal() (dAtA []byte, err error) { @@ -19229,6 +19231,15 @@ func (m *ServiceSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.TrafficDistribution != nil { + i -= len(*m.TrafficDistribution) + copy(dAtA[i:], *m.TrafficDistribution) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.TrafficDistribution))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xba + } if m.InternalTrafficPolicy != nil { i -= len(*m.InternalTrafficPolicy) copy(dAtA[i:], *m.InternalTrafficPolicy) @@ -25283,6 +25294,10 @@ func (m *ServiceSpec) Size() (n int) { l = len(*m.InternalTrafficPolicy) n += 2 + l + sovGenerated(uint64(l)) } + if m.TrafficDistribution != nil { + l = len(*m.TrafficDistribution) + n += 2 + l + sovGenerated(uint64(l)) + } return n } @@ -29149,6 +29164,7 @@ func (this *ServiceSpec) String() string { `AllocateLoadBalancerNodePorts:` + valueToStringGenerated(this.AllocateLoadBalancerNodePorts) + `,`, `LoadBalancerClass:` + valueToStringGenerated(this.LoadBalancerClass) + `,`, `InternalTrafficPolicy:` + valueToStringGenerated(this.InternalTrafficPolicy) + `,`, + `TrafficDistribution:` + valueToStringGenerated(this.TrafficDistribution) + `,`, `}`, }, "") return s @@ -67570,6 +67586,39 @@ func (m *ServiceSpec) Unmarshal(dAtA []byte) error { s := ServiceInternalTrafficPolicy(dAtA[iNdEx:postIndex]) m.InternalTrafficPolicy = &s iNdEx = postIndex + case 23: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TrafficDistribution", 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 + } + s := string(dAtA[iNdEx:postIndex]) + m.TrafficDistribution = &s + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/staging/src/k8s.io/api/core/v1/generated.proto b/staging/src/k8s.io/api/core/v1/generated.proto index 7d1873fc75b..4d63b7cc8fd 100644 --- a/staging/src/k8s.io/api/core/v1/generated.proto +++ b/staging/src/k8s.io/api/core/v1/generated.proto @@ -5764,6 +5764,15 @@ message ServiceSpec { // (possibly modified by topology and other features). // +optional optional string internalTrafficPolicy = 22; + + // TrafficDistribution offers a way to express preferences for how traffic is + // distributed to Service endpoints. Implementations can use this field as a + // hint, but are not required to guarantee strict adherence. If the field is + // not set, the implementation will apply its default routing strategy. If set + // to "PreferClose", implementations should prioritize endpoints that are + // topologically close (e.g., same zone). + // +optional + optional string trafficDistribution = 23; } // ServiceStatus represents the current status of a service. diff --git a/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go index d3e29979706..c095d58b86a 100644 --- a/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go @@ -2387,6 +2387,7 @@ var map_ServiceSpec = map[string]string{ "allocateLoadBalancerNodePorts": "allocateLoadBalancerNodePorts defines if NodePorts will be automatically allocated for services with type LoadBalancer. Default is \"true\". It may be set to \"false\" if the cluster load-balancer does not rely on NodePorts. If the caller requests specific NodePorts (by specifying a value), those requests will be respected, regardless of this field. This field may only be set for services with type LoadBalancer and will be cleared if the type is changed to any other type.", "loadBalancerClass": "loadBalancerClass is the class of the load balancer implementation this Service belongs to. If specified, the value of this field must be a label-style identifier, with an optional prefix, e.g. \"internal-vip\" or \"example.com/internal-vip\". Unprefixed names are reserved for end-users. This field can only be set when the Service type is 'LoadBalancer'. If not set, the default load balancer implementation is used, today this is typically done through the cloud provider integration, but should apply for any default implementation. If set, it is assumed that a load balancer implementation is watching for Services with a matching class. Any default load balancer implementation (e.g. cloud providers) should ignore Services that set this field. This field can only be set when creating or updating a Service to type 'LoadBalancer'. Once set, it can not be changed. This field will be wiped when a service is updated to a non 'LoadBalancer' type.", "internalTrafficPolicy": "InternalTrafficPolicy describes how nodes distribute service traffic they receive on the ClusterIP. If set to \"Local\", the proxy will assume that pods only want to talk to endpoints of the service on the same node as the pod, dropping the traffic if there are no local endpoints. The default value, \"Cluster\", uses the standard behavior of routing to all endpoints evenly (possibly modified by topology and other features).", + "trafficDistribution": "TrafficDistribution offers a way to express preferences for how traffic is distributed to Service endpoints. Implementations can use this field as a hint, but are not required to guarantee strict adherence. If the field is not set, the implementation will apply its default routing strategy. If set to \"PreferClose\", implementations should prioritize endpoints that are topologically close (e.g., same zone).", } func (ServiceSpec) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/api/core/v1/zz_generated.deepcopy.go b/staging/src/k8s.io/api/core/v1/zz_generated.deepcopy.go index b2fd520bc1f..4796d65cf37 100644 --- a/staging/src/k8s.io/api/core/v1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/api/core/v1/zz_generated.deepcopy.go @@ -5692,6 +5692,11 @@ func (in *ServiceSpec) DeepCopyInto(out *ServiceSpec) { *out = new(ServiceInternalTrafficPolicy) **out = **in } + if in.TrafficDistribution != nil { + in, out := &in.TrafficDistribution, &out.TrafficDistribution + *out = new(string) + **out = **in + } return } diff --git a/staging/src/k8s.io/api/testdata/HEAD/core.v1.Service.json b/staging/src/k8s.io/api/testdata/HEAD/core.v1.Service.json index 7e0d97007a6..978887a307b 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/core.v1.Service.json +++ b/staging/src/k8s.io/api/testdata/HEAD/core.v1.Service.json @@ -85,7 +85,8 @@ "ipFamilyPolicy": "ipFamilyPolicyValue", "allocateLoadBalancerNodePorts": true, "loadBalancerClass": "loadBalancerClassValue", - "internalTrafficPolicy": "internalTrafficPolicyValue" + "internalTrafficPolicy": "internalTrafficPolicyValue", + "trafficDistribution": "trafficDistributionValue" }, "status": { "loadBalancer": { diff --git a/staging/src/k8s.io/api/testdata/HEAD/core.v1.Service.pb b/staging/src/k8s.io/api/testdata/HEAD/core.v1.Service.pb index 8748481391ecd05faa748d17f7171acacabe229c..e70163900c392c016fd38f74111c16b5216cd5fd 100644 GIT binary patch delta 47 zcmbQnzL9-`2-9@-jbbT`j7v9HGj=nI?P8QDDN0OB%S?93EG{X^Oe!tO%+H(5$UGGQ DZ{H9b delta 24 gcmdnUK8<~X2-6?7jbbT`j9r_n8M_%LD>6?20Arj7w*UYD diff --git a/staging/src/k8s.io/api/testdata/HEAD/core.v1.Service.yaml b/staging/src/k8s.io/api/testdata/HEAD/core.v1.Service.yaml index e1c91238c5c..cde30006265 100644 --- a/staging/src/k8s.io/api/testdata/HEAD/core.v1.Service.yaml +++ b/staging/src/k8s.io/api/testdata/HEAD/core.v1.Service.yaml @@ -64,6 +64,7 @@ spec: sessionAffinityConfig: clientIP: timeoutSeconds: 1 + trafficDistribution: trafficDistributionValue type: typeValue status: conditions: diff --git a/staging/src/k8s.io/client-go/applyconfigurations/core/v1/servicespec.go b/staging/src/k8s.io/client-go/applyconfigurations/core/v1/servicespec.go index 493af6fb3c1..5cfbcb700fe 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/core/v1/servicespec.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/core/v1/servicespec.go @@ -44,6 +44,7 @@ type ServiceSpecApplyConfiguration struct { AllocateLoadBalancerNodePorts *bool `json:"allocateLoadBalancerNodePorts,omitempty"` LoadBalancerClass *string `json:"loadBalancerClass,omitempty"` InternalTrafficPolicy *corev1.ServiceInternalTrafficPolicy `json:"internalTrafficPolicy,omitempty"` + TrafficDistribution *string `json:"trafficDistribution,omitempty"` } // ServiceSpecApplyConfiguration constructs an declarative configuration of the ServiceSpec type for use with @@ -222,3 +223,11 @@ func (b *ServiceSpecApplyConfiguration) WithInternalTrafficPolicy(value corev1.S b.InternalTrafficPolicy = &value return b } + +// WithTrafficDistribution sets the TrafficDistribution field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the TrafficDistribution field is set to the value of the last call. +func (b *ServiceSpecApplyConfiguration) WithTrafficDistribution(value string) *ServiceSpecApplyConfiguration { + b.TrafficDistribution = &value + return b +} diff --git a/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go b/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go index 2ceb262217d..37589e6b385 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go @@ -7546,6 +7546,9 @@ var schemaYAML = typed.YAMLObject(`types: - name: sessionAffinityConfig type: namedType: io.k8s.api.core.v1.SessionAffinityConfig + - name: trafficDistribution + type: + scalar: string - name: type type: scalar: string From 9513f75089fc3f708126134b97814beb3589693d Mon Sep 17 00:00:00 2001 From: Gaurav Ghildiyal Date: Fri, 23 Feb 2024 19:24:50 -0800 Subject: [PATCH 3/7] Add trafficdist package for handling reconciliation of new field --- .../endpointslice/trafficdist/trafficdist.go | 143 ++++++ .../trafficdist/trafficdist_test.go | 470 ++++++++++++++++++ 2 files changed, 613 insertions(+) create mode 100644 staging/src/k8s.io/endpointslice/trafficdist/trafficdist.go create mode 100644 staging/src/k8s.io/endpointslice/trafficdist/trafficdist_test.go diff --git a/staging/src/k8s.io/endpointslice/trafficdist/trafficdist.go b/staging/src/k8s.io/endpointslice/trafficdist/trafficdist.go new file mode 100644 index 00000000000..cf6c7b42c6a --- /dev/null +++ b/staging/src/k8s.io/endpointslice/trafficdist/trafficdist.go @@ -0,0 +1,143 @@ +/* +Copyright 2024 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// trafficdist handles reconciliation of hints for trafficDistribution field. +package trafficdist + +import ( + corev1 "k8s.io/api/core/v1" + discoveryv1 "k8s.io/api/discovery/v1" +) + +// ReconcileHints will reconcile hints for the given EndpointSlices. +// +// EndpointSlice resources within slicesUnchanged will not be modified. +func ReconcileHints(trafficDistribution *string, slicesToCreate, slicesToUpdate, slicesUnchanged []*discoveryv1.EndpointSlice) ([]*discoveryv1.EndpointSlice, []*discoveryv1.EndpointSlice, []*discoveryv1.EndpointSlice) { + var h heuristic = &defaultHeuristic{} + + if trafficDistribution != nil && *trafficDistribution == corev1.ServiceTrafficDistributionPreferClose { + h = &preferCloseHeuristic{} + } + + // Identify the Unchanged slices that need an update because of missing or + // incorrect zone hint. + // + // Uses filtering in place to remove any endpoints that are no longer + // unchanged and need to be moved to slicesToUpdate + // (https://github.com/golang/go/wiki/SliceTricks#filter-in-place) + j := 0 + for _, slice := range slicesUnchanged { + if h.needsUpdate(slice) { + // Unchanged slices are direct copies from informer cache. We need to deep + // copy an unchanged slice before making any modifications to it so that we do + // not modify the slice within the informer cache. + slicesToUpdate = append(slicesToUpdate, slice.DeepCopy()) + } else { + slicesUnchanged[j] = slice + j++ + } + } + // Truncate slicesUnchanged so it only includes slices that are still + // unchanged. + slicesUnchanged = slicesUnchanged[:j] + + // Add zone hints to all slices that need to be created or updated. + for _, slice := range slicesToCreate { + h.update(slice) + } + for _, slice := range slicesToUpdate { + h.update(slice) + } + + return slicesToCreate, slicesToUpdate, slicesUnchanged +} + +type heuristic interface { + needsUpdate(*discoveryv1.EndpointSlice) bool + update(*discoveryv1.EndpointSlice) +} + +// endpointReady returns true if an Endpoint has the Ready condition set to +// true. +func endpointReady(endpoint discoveryv1.Endpoint) bool { + return endpoint.Conditions.Ready != nil && *endpoint.Conditions.Ready +} + +// defaultHeuristic means cluster wide routing, hence it will remove any hints +// present in the EndpointSlice. +type defaultHeuristic struct { +} + +// needsUpdate returns true if any endpoint in the slice has a zone hint. +func (defaultHeuristic) needsUpdate(slice *discoveryv1.EndpointSlice) bool { + if slice == nil { + return false + } + for _, endpoint := range slice.Endpoints { + if endpoint.Hints != nil { + return true + } + } + return false +} + +// update removes zone hints from all endpoints. +func (defaultHeuristic) update(slice *discoveryv1.EndpointSlice) { + for i := range slice.Endpoints { + slice.Endpoints[i].Hints = nil + } +} + +// preferCloseHeuristic adds +type preferCloseHeuristic struct { +} + +// needsUpdate returns true if any ready endpoint in the slice has a +// missing or incorrect hint. +func (preferCloseHeuristic) needsUpdate(slice *discoveryv1.EndpointSlice) bool { + if slice == nil { + return false + } + for _, endpoint := range slice.Endpoints { + if !endpointReady(endpoint) { + continue + } + var zone string + if endpoint.Zone != nil { + zone = *endpoint.Zone + } + + if endpoint.Hints == nil || len(endpoint.Hints.ForZones) != 1 || endpoint.Hints.ForZones[0].Name != zone { + return true + } + } + return false +} + +// update adds a same zone topology hint for all ready endpoints +func (preferCloseHeuristic) update(slice *discoveryv1.EndpointSlice) { + for i, endpoint := range slice.Endpoints { + if !endpointReady(endpoint) { + continue + } + + var zone string + if endpoint.Zone != nil { + zone = *endpoint.Zone + } + slice.Endpoints[i].Hints = &discoveryv1.EndpointHints{ForZones: []discoveryv1.ForZone{{Name: zone}}} + } +} diff --git a/staging/src/k8s.io/endpointslice/trafficdist/trafficdist_test.go b/staging/src/k8s.io/endpointslice/trafficdist/trafficdist_test.go new file mode 100644 index 00000000000..9e3cd950368 --- /dev/null +++ b/staging/src/k8s.io/endpointslice/trafficdist/trafficdist_test.go @@ -0,0 +1,470 @@ +/* +Copyright 2024 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package trafficdist + +import ( + "testing" + + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" + corev1 "k8s.io/api/core/v1" + discoveryv1 "k8s.io/api/discovery/v1" + "k8s.io/utils/ptr" +) + +func TestReconcileHints_trafficDistribution_is_PreferClose(t *testing.T) { + testCases := []struct { + name string + + trafficDistribution *string + slicesToCreate []*discoveryv1.EndpointSlice + slicesToUpdate []*discoveryv1.EndpointSlice + slicesUnchanged []*discoveryv1.EndpointSlice + + wantSlicesToCreate []*discoveryv1.EndpointSlice + wantSlicesToUpdate []*discoveryv1.EndpointSlice + wantSlicesUnchanged []*discoveryv1.EndpointSlice + }{ + { + name: "should set same zone hints", + trafficDistribution: ptrTo(corev1.ServiceTrafficDistributionPreferClose), + slicesToCreate: []*discoveryv1.EndpointSlice{ + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.1"}, + Zone: ptr.To("zone-a"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + }, + { + Addresses: []string{"10.0.0.2"}, + Zone: ptr.To("zone-b"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + }, + }, + }, + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.3"}, + Zone: ptr.To("zone-a"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + }, + { + Addresses: []string{"10.0.0.4"}, + Zone: ptr.To("zone-b"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + }, + }, + }, + }, + slicesToUpdate: []*discoveryv1.EndpointSlice{ + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.5"}, + Zone: ptr.To("zone-a"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + }, + { + Addresses: []string{"10.0.0.6"}, + Zone: ptr.To("zone-a"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + }, + }, + }, + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.7"}, + Zone: ptr.To("zone-b"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + }, + { + Addresses: []string{"10.0.0.8"}, + Zone: ptr.To("zone-c"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + }, + }, + }, + }, + wantSlicesToCreate: []*discoveryv1.EndpointSlice{ + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.1"}, + Zone: ptr.To("zone-a"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + Hints: &discoveryv1.EndpointHints{ForZones: []discoveryv1.ForZone{{Name: "zone-a"}}}, + }, + { + Addresses: []string{"10.0.0.2"}, + Zone: ptr.To("zone-b"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + Hints: &discoveryv1.EndpointHints{ForZones: []discoveryv1.ForZone{{Name: "zone-b"}}}, + }, + }, + }, + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.3"}, + Zone: ptr.To("zone-a"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + Hints: &discoveryv1.EndpointHints{ForZones: []discoveryv1.ForZone{{Name: "zone-a"}}}, + }, + { + Addresses: []string{"10.0.0.4"}, + Zone: ptr.To("zone-b"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + Hints: &discoveryv1.EndpointHints{ForZones: []discoveryv1.ForZone{{Name: "zone-b"}}}, + }, + }, + }, + }, + wantSlicesToUpdate: []*discoveryv1.EndpointSlice{ + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.5"}, + Zone: ptr.To("zone-a"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + Hints: &discoveryv1.EndpointHints{ForZones: []discoveryv1.ForZone{{Name: "zone-a"}}}, + }, + { + Addresses: []string{"10.0.0.6"}, + Zone: ptr.To("zone-a"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + Hints: &discoveryv1.EndpointHints{ForZones: []discoveryv1.ForZone{{Name: "zone-a"}}}, + }, + }, + }, + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.7"}, + Zone: ptr.To("zone-b"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + Hints: &discoveryv1.EndpointHints{ForZones: []discoveryv1.ForZone{{Name: "zone-b"}}}, + }, + { + Addresses: []string{"10.0.0.8"}, + Zone: ptr.To("zone-c"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + Hints: &discoveryv1.EndpointHints{ForZones: []discoveryv1.ForZone{{Name: "zone-c"}}}, + }, + }, + }, + }, + }, + { + name: "incorrect hints should be corrected", + trafficDistribution: ptrTo(corev1.ServiceTrafficDistributionPreferClose), + slicesToUpdate: []*discoveryv1.EndpointSlice{ + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.1"}, + Zone: ptr.To("zone-a"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + Hints: &discoveryv1.EndpointHints{ForZones: []discoveryv1.ForZone{{Name: "zone-b"}}}, // incorrect hint as per new heuristic + }, + }, + }, + }, + slicesUnchanged: []*discoveryv1.EndpointSlice{ + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.2"}, + Zone: ptr.To("zone-b"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + Hints: &discoveryv1.EndpointHints{ForZones: []discoveryv1.ForZone{{Name: "zone-c"}}}, + }, + }, + }, + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.3"}, + Zone: ptr.To("zone-c"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + }, + }, + }, + }, + wantSlicesToUpdate: []*discoveryv1.EndpointSlice{ + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.1"}, + Zone: ptr.To("zone-a"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + Hints: &discoveryv1.EndpointHints{ForZones: []discoveryv1.ForZone{{Name: "zone-a"}}}, + }, + }, + }, + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.2"}, + Zone: ptr.To("zone-b"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + Hints: &discoveryv1.EndpointHints{ForZones: []discoveryv1.ForZone{{Name: "zone-b"}}}, + }, + }, + }, + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.3"}, + Zone: ptr.To("zone-c"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + Hints: &discoveryv1.EndpointHints{ForZones: []discoveryv1.ForZone{{Name: "zone-c"}}}, + }, + }, + }, + }, + }, + { + name: "unready endpoints should not trigger updates", + trafficDistribution: ptrTo(corev1.ServiceTrafficDistributionPreferClose), + slicesUnchanged: []*discoveryv1.EndpointSlice{ + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.2"}, + Zone: ptr.To("zone-b"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(false)}, // endpoint is not ready + }, + }, + }, + }, + wantSlicesUnchanged: []*discoveryv1.EndpointSlice{ // ... so there should be no updates + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.2"}, + Zone: ptr.To("zone-b"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(false)}, + }, + }, + }, + }, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + gotSlicesToCreate, gotSlicesToUpdate, gotSlicesUnchanged := ReconcileHints(tc.trafficDistribution, tc.slicesToCreate, tc.slicesToUpdate, tc.slicesUnchanged) + + if diff := cmp.Diff(tc.wantSlicesToCreate, gotSlicesToCreate, cmpopts.EquateEmpty()); diff != "" { + t.Errorf("ReconcileHints(...) returned unexpected diff in 'slicesToCreate': (-want, +got)\n%v", diff) + } + if diff := cmp.Diff(tc.wantSlicesToUpdate, gotSlicesToUpdate, cmpopts.EquateEmpty()); diff != "" { + t.Errorf("ReconcileHints(...) returned unexpected diff in 'slicesToUpdate': (-want, +got)\n%v", diff) + } + if diff := cmp.Diff(tc.wantSlicesUnchanged, gotSlicesUnchanged, cmpopts.EquateEmpty()); diff != "" { + t.Errorf("ReconcileHints(...) returned unexpected diff in 'slicesUnchanged': (-want, +got)\n%v", diff) + } + }) + } +} + +func TestReconcileHints_trafficDistribution_is_nil_or_empty(t *testing.T) { + testCases := []struct { + name string + + trafficDistribution *string + slicesToCreate []*discoveryv1.EndpointSlice + slicesToUpdate []*discoveryv1.EndpointSlice + slicesUnchanged []*discoveryv1.EndpointSlice + + wantSlicesToCreate []*discoveryv1.EndpointSlice + wantSlicesToUpdate []*discoveryv1.EndpointSlice + wantSlicesUnchanged []*discoveryv1.EndpointSlice + }{ + { + name: "trafficDistribution='' should remove zone hints", + trafficDistribution: ptrTo(""), + slicesToCreate: []*discoveryv1.EndpointSlice{ + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.1"}, + Zone: ptr.To("zone-a"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + Hints: &discoveryv1.EndpointHints{ForZones: []discoveryv1.ForZone{{Name: "zone-a"}}}, + }, + { + Addresses: []string{"10.0.0.2"}, + Zone: ptr.To("zone-b"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + Hints: &discoveryv1.EndpointHints{ForZones: []discoveryv1.ForZone{{Name: "zone-b"}}}, + }, + }, + }, + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.3"}, + Zone: ptr.To("zone-a"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + Hints: &discoveryv1.EndpointHints{ForZones: []discoveryv1.ForZone{{Name: "zone-a"}}}, + }, + }, + }, + }, + slicesToUpdate: []*discoveryv1.EndpointSlice{ + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.5"}, + Zone: ptr.To("zone-a"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + Hints: &discoveryv1.EndpointHints{ForZones: []discoveryv1.ForZone{{Name: "zone-a"}}}, + }, + }, + }, + }, + wantSlicesToCreate: []*discoveryv1.EndpointSlice{ + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.1"}, + Zone: ptr.To("zone-a"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + }, + { + Addresses: []string{"10.0.0.2"}, + Zone: ptr.To("zone-b"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + }, + }, + }, + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.3"}, + Zone: ptr.To("zone-a"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + }, + }, + }, + }, + wantSlicesToUpdate: []*discoveryv1.EndpointSlice{ + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.5"}, + Zone: ptr.To("zone-a"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + }, + }, + }, + }, + }, + { + name: "trafficDistribution=nil should remove zone hints", + trafficDistribution: nil, + slicesToUpdate: []*discoveryv1.EndpointSlice{ + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.5"}, + Zone: ptr.To("zone-a"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + Hints: &discoveryv1.EndpointHints{ForZones: []discoveryv1.ForZone{{Name: "zone-a"}}}, + }, + }, + }, + }, + slicesUnchanged: []*discoveryv1.EndpointSlice{ + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.6"}, + Zone: ptr.To("zone-b"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + Hints: &discoveryv1.EndpointHints{ForZones: []discoveryv1.ForZone{{Name: "zone-b"}}}, + }, + }, + }, + }, + wantSlicesToUpdate: []*discoveryv1.EndpointSlice{ + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.5"}, + Zone: ptr.To("zone-a"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + }, + }, + }, + { + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.6"}, + Zone: ptr.To("zone-b"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + }, + }, + }, + }, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + gotSlicesToCreate, gotSlicesToUpdate, gotSlicesUnchanged := ReconcileHints(tc.trafficDistribution, tc.slicesToCreate, tc.slicesToUpdate, tc.slicesUnchanged) + + if diff := cmp.Diff(tc.wantSlicesToCreate, gotSlicesToCreate, cmpopts.EquateEmpty()); diff != "" { + t.Errorf("ReconcileHints(...) returned unexpected diff in 'slicesToCreate': (-want, +got)\n%v", diff) + } + if diff := cmp.Diff(tc.wantSlicesToUpdate, gotSlicesToUpdate, cmpopts.EquateEmpty()); diff != "" { + t.Errorf("ReconcileHints(...) returned unexpected diff in 'slicesToUpdate': (-want, +got)\n%v", diff) + } + if diff := cmp.Diff(tc.wantSlicesUnchanged, gotSlicesUnchanged, cmpopts.EquateEmpty()); diff != "" { + t.Errorf("ReconcileHints(...) returned unexpected diff in 'slicesUnchanged': (-want, +got)\n%v", diff) + } + }) + } +} + +// Ensure that the EndpointSlice objects within `slicesUnchanged` don't get modified. +func TestReconcileHints_doesNotMutateUnchangedSlices(t *testing.T) { + originalEps := &discoveryv1.EndpointSlice{ + Endpoints: []discoveryv1.Endpoint{ + { + Addresses: []string{"10.0.0.1"}, + Zone: ptr.To("zone-a"), + Conditions: discoveryv1.EndpointConditions{Ready: ptr.To(true)}, + }, + }, + } + clonedEps := originalEps.DeepCopy() + + // originalEps should not get modified. + ReconcileHints(ptrTo(corev1.ServiceTrafficDistributionPreferClose), nil, nil, []*discoveryv1.EndpointSlice{originalEps}) + if diff := cmp.Diff(clonedEps, originalEps); diff != "" { + t.Errorf("ReconcileHints(...) modified objects within slicesUnchanged, want objects within slicesUnchanged to remain unmodified: (-want, +got)\n%v", diff) + } +} + +func ptrTo[T any](obj T) *T { + return &obj +} From 51a3fa2e6ff7b7b08eec34126479745c1d75e615 Mon Sep 17 00:00:00 2001 From: Gaurav Ghildiyal Date: Fri, 23 Feb 2024 19:26:17 -0800 Subject: [PATCH 4/7] Start reconciling on the new field --- .../endpointslice/endpointslice_controller.go | 1 + .../k8s.io/endpointslice/metrics/metrics.go | 5 +- .../src/k8s.io/endpointslice/reconciler.go | 65 ++++- .../k8s.io/endpointslice/reconciler_test.go | 260 ++++++++++++++++-- 4 files changed, 293 insertions(+), 38 deletions(-) diff --git a/pkg/controller/endpointslice/endpointslice_controller.go b/pkg/controller/endpointslice/endpointslice_controller.go index 01bcd0baa0e..687e08b9fc2 100644 --- a/pkg/controller/endpointslice/endpointslice_controller.go +++ b/pkg/controller/endpointslice/endpointslice_controller.go @@ -173,6 +173,7 @@ func NewController(ctx context.Context, podInformer coreinformers.PodInformer, c.maxEndpointsPerSlice, c.endpointSliceTracker, c.topologyCache, + utilfeature.DefaultFeatureGate.Enabled(features.ServiceTrafficDistribution), c.eventRecorder, controllerName, ) diff --git a/staging/src/k8s.io/endpointslice/metrics/metrics.go b/staging/src/k8s.io/endpointslice/metrics/metrics.go index 6a166703be0..977142fa067 100644 --- a/staging/src/k8s.io/endpointslice/metrics/metrics.go +++ b/staging/src/k8s.io/endpointslice/metrics/metrics.go @@ -102,7 +102,10 @@ var ( Name: "endpointslices_changed_per_sync", Help: "Number of EndpointSlices changed on each Service sync", }, - []string{"topology"}, // either "Auto" or "Disabled" + []string{ + "topology", // either "Auto" or "Disabled" + "traffic_distribution", // "PreferClose" or + }, ) // EndpointSliceSyncs tracks the number of sync operations the controller diff --git a/staging/src/k8s.io/endpointslice/reconciler.go b/staging/src/k8s.io/endpointslice/reconciler.go index d1f59af8ce3..417666e098f 100644 --- a/staging/src/k8s.io/endpointslice/reconciler.go +++ b/staging/src/k8s.io/endpointslice/reconciler.go @@ -35,6 +35,7 @@ import ( "k8s.io/client-go/tools/record" "k8s.io/endpointslice/metrics" "k8s.io/endpointslice/topologycache" + "k8s.io/endpointslice/trafficdist" endpointsliceutil "k8s.io/endpointslice/util" "k8s.io/klog/v2" ) @@ -50,6 +51,9 @@ type Reconciler struct { // topologyCache tracks the distribution of Nodes and endpoints across zones // to enable TopologyAwareHints. topologyCache *topologycache.TopologyCache + // trafficDistributionEnabled determines if endpointDistribution field is to + // be considered when reconciling EndpointSlice hints. + trafficDistributionEnabled bool // eventRecorder allows Reconciler to record and publish events. eventRecorder record.EventRecorder controllerName string @@ -261,9 +265,32 @@ func (r *Reconciler) reconcileByAddressType(logger klog.Logger, service *corev1. Unchanged: unchangedSlices(existingSlices, slicesToUpdate, slicesToDelete), } + canUseTrafficDistribution := r.trafficDistributionEnabled && !hintsEnabled(service.Annotations) + + // Check if we need to add/remove hints based on the topology annotation. + // + // This if/else clause can be removed once the annotation has been deprecated. + // Ref: https://github.com/kubernetes/enhancements/tree/master/keps/sig-network/4444-service-routing-preference if r.topologyCache != nil && hintsEnabled(service.Annotations) { + // Reaching this point means that we need to configure hints based on the + // topology annotation. slicesToCreate, slicesToUpdate, events = r.topologyCache.AddHints(logger, si) + } else { + // Reaching this point means that we will not be configuring hints based on + // the topology annotation. We need to do 2 things: + // 1. If hints were added previously based on the annotation, we need to + // clear up any locally cached hints from the topologyCache object. + // 2. Optionally remove the actual hints from the EndpointSlice if we know + // that the `trafficDistribution` field is also NOT being used. In other + // words, if we know that the `trafficDistribution` field has been + // correctly configured by the customer, we DO NOT remove the hints and + // wait for the trafficDist handlers to correctly configure them. Always + // unconditionally removing hints here (and letting them get readded by + // the trafficDist) adds extra overhead in the form of DeepCopy (done + // within topologyCache.RemoveHints) + + // Check 1. if r.topologyCache != nil { if r.topologyCache.HasPopulatedHints(si.ServiceKey) { logger.Info("TopologyAwareHints annotation has changed, removing hints", "serviceKey", si.ServiceKey, "addressType", si.AddressType) @@ -275,8 +302,17 @@ func (r *Reconciler) reconcileByAddressType(logger klog.Logger, service *corev1. } r.topologyCache.RemoveHints(si.ServiceKey, addressType) } - slicesToCreate, slicesToUpdate = topologycache.RemoveHintsFromSlices(si) + + // Check 2. + if !canUseTrafficDistribution { + slicesToCreate, slicesToUpdate = topologycache.RemoveHintsFromSlices(si) + } } + + if canUseTrafficDistribution { + slicesToCreate, slicesToUpdate, _ = trafficdist.ReconcileHints(service.Spec.TrafficDistribution, slicesToCreate, slicesToUpdate, unchangedSlices(existingSlices, slicesToUpdate, slicesToDelete)) + } + err := r.finalize(service, slicesToCreate, slicesToUpdate, slicesToDelete, triggerTime) if err != nil { errs = append(errs, err) @@ -288,16 +324,17 @@ func (r *Reconciler) reconcileByAddressType(logger klog.Logger, service *corev1. } -func NewReconciler(client clientset.Interface, nodeLister corelisters.NodeLister, maxEndpointsPerSlice int32, endpointSliceTracker *endpointsliceutil.EndpointSliceTracker, topologyCache *topologycache.TopologyCache, eventRecorder record.EventRecorder, controllerName string) *Reconciler { +func NewReconciler(client clientset.Interface, nodeLister corelisters.NodeLister, maxEndpointsPerSlice int32, endpointSliceTracker *endpointsliceutil.EndpointSliceTracker, topologyCache *topologycache.TopologyCache, trafficDistributionEnabled bool, eventRecorder record.EventRecorder, controllerName string) *Reconciler { return &Reconciler{ - client: client, - nodeLister: nodeLister, - maxEndpointsPerSlice: maxEndpointsPerSlice, - endpointSliceTracker: endpointSliceTracker, - metricsCache: metrics.NewCache(maxEndpointsPerSlice), - topologyCache: topologyCache, - eventRecorder: eventRecorder, - controllerName: controllerName, + client: client, + nodeLister: nodeLister, + maxEndpointsPerSlice: maxEndpointsPerSlice, + endpointSliceTracker: endpointSliceTracker, + metricsCache: metrics.NewCache(maxEndpointsPerSlice), + topologyCache: topologyCache, + trafficDistributionEnabled: trafficDistributionEnabled, + eventRecorder: eventRecorder, + controllerName: controllerName, } } @@ -401,9 +438,15 @@ func (r *Reconciler) finalize( if r.topologyCache != nil && hintsEnabled(service.Annotations) { topologyLabel = "Auto" } + var trafficDistribution string + if r.trafficDistributionEnabled && !hintsEnabled(service.Annotations) { + if service.Spec.TrafficDistribution != nil && *service.Spec.TrafficDistribution == corev1.ServiceTrafficDistributionPreferClose { + trafficDistribution = *service.Spec.TrafficDistribution + } + } numSlicesChanged := len(slicesToCreate) + len(slicesToUpdate) + len(slicesToDelete) - metrics.EndpointSlicesChangedPerSync.WithLabelValues(topologyLabel).Observe(float64(numSlicesChanged)) + metrics.EndpointSlicesChangedPerSync.WithLabelValues(topologyLabel, trafficDistribution).Observe(float64(numSlicesChanged)) return nil } diff --git a/staging/src/k8s.io/endpointslice/reconciler_test.go b/staging/src/k8s.io/endpointslice/reconciler_test.go index 03d4f92e981..cd781a42429 100644 --- a/staging/src/k8s.io/endpointslice/reconciler_test.go +++ b/staging/src/k8s.io/endpointslice/reconciler_test.go @@ -24,6 +24,7 @@ import ( "testing" "time" + "github.com/google/go-cmp/cmp" "github.com/stretchr/testify/assert" corev1 "k8s.io/api/core/v1" discovery "k8s.io/api/discovery/v1" @@ -1972,6 +1973,209 @@ func TestReconcileTopology(t *testing.T) { } } +// Test reconciliation behaviour for trafficDistribution field. +func TestReconcile_TrafficDistribution(t *testing.T) { + // Setup the following topology for the test. + // + // - node-0 IN zone-a CONTAINS {pod-0} + // - node-1 IN zone-b CONTAINS {pod-1, pod-2, pod-3} + // - node-2 IN zone-c CONTAINS {pod-4, pod-5} + ns := "ns1" + svc, _ := newServiceAndEndpointMeta("foo", ns) + nodes := []*corev1.Node{} + pods := []*corev1.Pod{} + for i := 0; i < 3; i++ { + nodes = append(nodes, &corev1.Node{ + ObjectMeta: metav1.ObjectMeta{ + Name: fmt.Sprintf("node-%v", i), + Labels: map[string]string{ + corev1.LabelTopologyZone: fmt.Sprintf("zone-%c", 'a'+i), + }, + }, + Status: corev1.NodeStatus{ + Conditions: []corev1.NodeCondition{{ + Type: corev1.NodeReady, + Status: corev1.ConditionTrue, + }}, + Allocatable: corev1.ResourceList{"cpu": resource.MustParse("100m")}, + }, + }) + } + for i := 0; i < 6; i++ { + pods = append(pods, newPod(i, ns, true, 1, false)) + } + pods[0].Spec.NodeName = nodes[0].Name + pods[1].Spec.NodeName = nodes[1].Name + pods[2].Spec.NodeName = nodes[1].Name + pods[3].Spec.NodeName = nodes[1].Name + pods[4].Spec.NodeName = nodes[2].Name + pods[5].Spec.NodeName = nodes[2].Name + + // Define test cases. + + testCases := []struct { + name string + desc string + + trafficDistributionFeatureGateEnabled bool + trafficDistribution string + topologyAnnotation string + + // Defines how many hints belong to a particular zone. + wantHintsDistributionByZone map[string]int + // Number of endpoints where the zone hints are different from the zone of + // the endpoint itself. + wantEndpointsWithCrossZoneHints int + wantMetrics expectedMetrics + }{ + { + name: "trafficDistribution=PreferClose, topologyAnnotation=Disabled", + desc: "When trafficDistribution is enabled and topologyAnnotation is disabled, hints should be distributed as per the trafficDistribution field", + trafficDistributionFeatureGateEnabled: true, + trafficDistribution: corev1.ServiceTrafficDistributionPreferClose, + topologyAnnotation: "Disabled", + wantHintsDistributionByZone: map[string]int{ + "zone-a": 1, // {pod-0} + "zone-b": 3, // {pod-1, pod-2, pod-3} + "zone-c": 2, // {pod-4, pod-5} + }, + wantMetrics: expectedMetrics{ + desiredSlices: 1, + actualSlices: 1, + desiredEndpoints: 6, + addedPerSync: 6, + removedPerSync: 0, + numCreated: 1, + numUpdated: 0, + numDeleted: 0, + slicesChangedPerSync: 0, // 0 means either topologyAnnotation or trafficDistribution was used. + slicesChangedPerSyncTopology: 0, // 0 means topologyAnnotation was not used. + slicesChangedPerSyncTrafficDist: 1, // 1 EPS configured using trafficDistribution. + }, + }, + { + name: "feature gate disabled; trafficDistribution=PreferClose, topologyAnnotation=Disabled", + desc: "When feature gate is disabled, trafficDistribution should be ignored", + trafficDistributionFeatureGateEnabled: false, + trafficDistribution: corev1.ServiceTrafficDistributionPreferClose, + topologyAnnotation: "Disabled", + wantHintsDistributionByZone: map[string]int{"": 6}, // Equivalent to no hints. + wantMetrics: expectedMetrics{ + desiredSlices: 1, + actualSlices: 1, + desiredEndpoints: 6, + addedPerSync: 6, + removedPerSync: 0, + numCreated: 1, + numUpdated: 0, + numDeleted: 0, + slicesChangedPerSync: 1, // 1 means both topologyAnnotation and trafficDistribution were not used. + slicesChangedPerSyncTopology: 0, // 0 means topologyAnnotation was not used. + slicesChangedPerSyncTrafficDist: 0, // 0 means trafficDistribution was not used. + }, + }, + { + name: "trafficDistribution=PreferClose, topologyAnnotation=Auto", + desc: "When trafficDistribution and topologyAnnotation are both enabled, precedence should be given to topologyAnnotation", + trafficDistributionFeatureGateEnabled: true, + trafficDistribution: corev1.ServiceTrafficDistributionPreferClose, + topologyAnnotation: "Auto", + wantHintsDistributionByZone: map[string]int{ + "zone-a": 2, // {pod-0, pod-3} (pod-3 is just an example, it could have also been either of the other two) + "zone-b": 2, // {pod-1, pod-2} + "zone-c": 2, // {pod-4, pod-5} + }, + wantEndpointsWithCrossZoneHints: 1, // since a pod from zone-b is likely assigned a hint for zone-a + wantMetrics: expectedMetrics{ + desiredSlices: 1, + actualSlices: 1, + desiredEndpoints: 6, + addedPerSync: 6, + removedPerSync: 0, + numCreated: 1, + numUpdated: 0, + numDeleted: 0, + slicesChangedPerSync: 0, // 0 means either topologyAnnotation or trafficDistribution was used. + slicesChangedPerSyncTopology: 1, // 1 EPS configured using topologyAnnotation. + slicesChangedPerSyncTrafficDist: 0, // 0 means trafficDistribution was not used. + }, + }, + { + name: "trafficDistribution=, topologyAnnotation=", + desc: "When trafficDistribution and topologyAnnotation are both disabled, no hints should be added", + trafficDistributionFeatureGateEnabled: true, + trafficDistribution: "", + topologyAnnotation: "", + wantHintsDistributionByZone: map[string]int{"": 6}, // Equivalent to no hints. + wantMetrics: expectedMetrics{ + desiredSlices: 1, + actualSlices: 1, + desiredEndpoints: 6, + addedPerSync: 6, + removedPerSync: 0, + numCreated: 1, + numUpdated: 0, + numDeleted: 0, + slicesChangedPerSync: 1, // 1 means both topologyAnnotation and trafficDistribution were not used. + slicesChangedPerSyncTopology: 0, // 0 means topologyAnnotation was not used. + slicesChangedPerSyncTrafficDist: 0, // 0 means trafficDistribution was not used. + }, + }, + } + + // Make assertions. + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + client := newClientset() + logger, _ := ktesting.NewTestContext(t) + setupMetrics() + + r := newReconciler(client, nodes, defaultMaxEndpointsPerSlice) + r.trafficDistributionEnabled = tc.trafficDistributionFeatureGateEnabled + r.topologyCache = topologycache.NewTopologyCache() + r.topologyCache.SetNodes(logger, nodes) + + service := svc.DeepCopy() + service.Spec.TrafficDistribution = &tc.trafficDistribution + service.Annotations = map[string]string{ + corev1.DeprecatedAnnotationTopologyAwareHints: tc.topologyAnnotation, + } + + err := r.Reconcile(logger, service, pods, nil, time.Now()) + + if err != nil { + t.Errorf("Reconcile(...): return error = %v; want no error", err) + } + + fetchedSlices := fetchEndpointSlices(t, client, ns) + gotHintsDistributionByZone := make(map[string]int) + gotEndpointsWithCrossZoneHints := 0 + for _, slice := range fetchedSlices { + for _, endpoint := range slice.Endpoints { + var zoneHint string + if endpoint.Hints != nil && len(endpoint.Hints.ForZones) == 1 { + zoneHint = endpoint.Hints.ForZones[0].Name + } + gotHintsDistributionByZone[zoneHint]++ + if zoneHint != "" && *endpoint.Zone != zoneHint { + gotEndpointsWithCrossZoneHints++ + } + } + } + + if diff := cmp.Diff(tc.wantHintsDistributionByZone, gotHintsDistributionByZone); diff != "" { + t.Errorf("Reconcile(...): Incorrect distribution of endpoints among zones; (-want, +got)\n%v", diff) + } + if gotEndpointsWithCrossZoneHints != tc.wantEndpointsWithCrossZoneHints { + t.Errorf("Reconcile(...): EndpointSlices have endpoints with incorrect number of cross-zone hints; gotEndpointsWithCrossZoneHints=%v, want=%v", gotEndpointsWithCrossZoneHints, tc.wantEndpointsWithCrossZoneHints) + } + + expectMetrics(t, tc.wantMetrics) + }) + } +} + // Test Helpers func newReconciler(client *fake.Clientset, nodes []*corev1.Node, maxEndpointsPerSlice int32) *Reconciler { @@ -1989,6 +2193,7 @@ func newReconciler(client *fake.Clientset, nodes []*corev1.Node, maxEndpointsPer maxEndpointsPerSlice, endpointsliceutil.NewEndpointSliceTracker(), nil, + false, eventRecorder, controllerName, ) @@ -2112,18 +2317,19 @@ func reconcileHelper(t *testing.T, r *Reconciler, service *corev1.Service, pods // Metrics helpers type expectedMetrics struct { - desiredSlices int - actualSlices int - desiredEndpoints int - addedPerSync int - removedPerSync int - numCreated int - numUpdated int - numDeleted int - slicesChangedPerSync int - slicesChangedPerSyncTopology int - syncSuccesses int - syncErrors int + desiredSlices int + actualSlices int + desiredEndpoints int + addedPerSync int + removedPerSync int + numCreated int + numUpdated int + numDeleted int + slicesChangedPerSync int + slicesChangedPerSyncTopology int + slicesChangedPerSyncTrafficDist int + syncSuccesses int + syncErrors int } func expectMetrics(t *testing.T, em expectedMetrics) { @@ -2177,18 +2383,24 @@ func expectMetrics(t *testing.T, em expectedMetrics) { t.Errorf("Expected endpointSliceChangesDeleted to be %d, got %v", em.numDeleted, actualDeleted) } - actualSlicesChangedPerSync, err := testutil.GetHistogramMetricValue(metrics.EndpointSlicesChangedPerSync.WithLabelValues("Disabled")) + actualSlicesChangedPerSync, err := testutil.GetHistogramMetricValue(metrics.EndpointSlicesChangedPerSync.WithLabelValues("Disabled", "")) handleErr(t, err, "slicesChangedPerSync") if actualSlicesChangedPerSync != float64(em.slicesChangedPerSync) { t.Errorf("Expected slicesChangedPerSync to be %d, got %v", em.slicesChangedPerSync, actualSlicesChangedPerSync) } - actualSlicesChangedPerSyncTopology, err := testutil.GetHistogramMetricValue(metrics.EndpointSlicesChangedPerSync.WithLabelValues("Auto")) + actualSlicesChangedPerSyncTopology, err := testutil.GetHistogramMetricValue(metrics.EndpointSlicesChangedPerSync.WithLabelValues("Auto", "")) handleErr(t, err, "slicesChangedPerSyncTopology") if actualSlicesChangedPerSyncTopology != float64(em.slicesChangedPerSyncTopology) { t.Errorf("Expected slicesChangedPerSyncTopology to be %d, got %v", em.slicesChangedPerSyncTopology, actualSlicesChangedPerSyncTopology) } + actualSlicesChangedPerSyncTrafficDist, err := testutil.GetHistogramMetricValue(metrics.EndpointSlicesChangedPerSync.WithLabelValues("Disabled", "PreferClose")) + handleErr(t, err, "slicesChangedPerSyncTrafficDist") + if actualSlicesChangedPerSyncTrafficDist != float64(em.slicesChangedPerSyncTrafficDist) { + t.Errorf("Expected slicesChangedPerSyncTrafficDist to be %d, got %v", em.slicesChangedPerSyncTrafficDist, actualSlicesChangedPerSyncTopology) + } + actualSyncSuccesses, err := testutil.GetCounterMetricValue(metrics.EndpointSliceSyncs.WithLabelValues("success")) handleErr(t, err, "syncSuccesses") if actualSyncSuccesses != float64(em.syncSuccesses) { @@ -2210,16 +2422,12 @@ func handleErr(t *testing.T, err error, metricName string) { func setupMetrics() { metrics.RegisterMetrics() - metrics.NumEndpointSlices.Delete(map[string]string{}) - metrics.DesiredEndpointSlices.Delete(map[string]string{}) - metrics.EndpointsDesired.Delete(map[string]string{}) - metrics.EndpointsAddedPerSync.Delete(map[string]string{}) - metrics.EndpointsRemovedPerSync.Delete(map[string]string{}) - metrics.EndpointSliceChanges.Delete(map[string]string{"operation": "create"}) - metrics.EndpointSliceChanges.Delete(map[string]string{"operation": "update"}) - metrics.EndpointSliceChanges.Delete(map[string]string{"operation": "delete"}) - metrics.EndpointSlicesChangedPerSync.Delete(map[string]string{"topology": "Disabled"}) - metrics.EndpointSlicesChangedPerSync.Delete(map[string]string{"topology": "Auto"}) - metrics.EndpointSliceSyncs.Delete(map[string]string{"result": "success"}) - metrics.EndpointSliceSyncs.Delete(map[string]string{"result": "error"}) + metrics.NumEndpointSlices.Reset() + metrics.DesiredEndpointSlices.Reset() + metrics.EndpointsDesired.Reset() + metrics.EndpointsAddedPerSync.Reset() + metrics.EndpointsRemovedPerSync.Reset() + metrics.EndpointSliceChanges.Reset() + metrics.EndpointSlicesChangedPerSync.Reset() + metrics.EndpointSliceSyncs.Reset() } From 51f86b9124925cd33939521e4604c56a62b5811f Mon Sep 17 00:00:00 2001 From: Gaurav Ghildiyal Date: Sat, 24 Feb 2024 01:09:07 -0800 Subject: [PATCH 5/7] Change kube-proxy behaviour to consider hints when ServiceTrafficDistribution feature gate is enabled --- pkg/proxy/topology.go | 30 +++++++++++-------- pkg/proxy/topology_test.go | 60 +++++++++++++++++++++++++++++--------- 2 files changed, 64 insertions(+), 26 deletions(-) diff --git a/pkg/proxy/topology.go b/pkg/proxy/topology.go index faa7ac2e1be..9ccd359534d 100644 --- a/pkg/proxy/topology.go +++ b/pkg/proxy/topology.go @@ -137,21 +137,27 @@ func CategorizeEndpoints(endpoints []Endpoint, svcInfo ServicePort, nodeLabels m return } -// canUseTopology returns true if topology aware routing is enabled and properly configured -// in this cluster. That is, it checks that: -// * The TopologyAwareHints feature is enabled -// * The "service.kubernetes.io/topology-aware-hints" annotation on this Service is set to "Auto" -// * The node's labels include "topology.kubernetes.io/zone" -// * All of the endpoints for this Service have a topology hint -// * At least one endpoint for this Service is hinted for this node's zone. +// canUseTopology returns true if topology aware routing is enabled and properly +// configured in this cluster. That is, it checks that: +// - The TopologyAwareHints or ServiceTrafficDistribution feature is enabled. +// - If ServiceTrafficDistribution feature gate is not enabled, then the +// hintsAnnotation should represent an enabled value. +// - The node's labels include "topology.kubernetes.io/zone". +// - All of the endpoints for this Service have a topology hint. +// - At least one endpoint for this Service is hinted for this node's zone. func canUseTopology(endpoints []Endpoint, svcInfo ServicePort, nodeLabels map[string]string) bool { - if !utilfeature.DefaultFeatureGate.Enabled(features.TopologyAwareHints) { + if !utilfeature.DefaultFeatureGate.Enabled(features.TopologyAwareHints) && !utilfeature.DefaultFeatureGate.Enabled(features.ServiceTrafficDistribution) { return false } - // Any non-empty and non-disabled values for the hints annotation are acceptable. - hintsAnnotation := svcInfo.HintsAnnotation() - if hintsAnnotation == "" || hintsAnnotation == "disabled" || hintsAnnotation == "Disabled" { - return false + + // Ignore value of hintsAnnotation if the ServiceTrafficDistribution feature + // gate is enabled. + if !utilfeature.DefaultFeatureGate.Enabled(features.ServiceTrafficDistribution) { + // If the hintsAnnotation has a disabled value, we do not consider hints for route programming. + hintsAnnotation := svcInfo.HintsAnnotation() + if hintsAnnotation == "" || hintsAnnotation == "disabled" || hintsAnnotation == "Disabled" { + return false + } } zone, ok := nodeLabels[v1.LabelTopologyZone] diff --git a/pkg/proxy/topology_test.go b/pkg/proxy/topology_test.go index e3865947ea7..a859c3892a4 100644 --- a/pkg/proxy/topology_test.go +++ b/pkg/proxy/topology_test.go @@ -47,12 +47,13 @@ func checkExpectedEndpoints(expected sets.Set[string], actual []Endpoint) error func TestCategorizeEndpoints(t *testing.T) { testCases := []struct { - name string - hintsEnabled bool - pteEnabled bool - nodeLabels map[string]string - serviceInfo ServicePort - endpoints []Endpoint + name string + hintsEnabled bool + trafficDistFeatureEnabled bool + pteEnabled bool + nodeLabels map[string]string + serviceInfo ServicePort + endpoints []Endpoint // We distinguish `nil` ("service doesn't use this kind of endpoints") from // `sets.Set[string]()` ("service uses this kind of endpoints but has no endpoints"). @@ -131,10 +132,39 @@ func TestCategorizeEndpoints(t *testing.T) { clusterEndpoints: sets.New[string]("10.1.2.3:80", "10.1.2.4:80", "10.1.2.5:80", "10.1.2.6:80"), localEndpoints: nil, }, { - name: "externalTrafficPolicy: Local, topology ignored for Local endpoints", - hintsEnabled: true, - nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"}, - serviceInfo: &BaseServicePortInfo{externalPolicyLocal: true, nodePort: 8080, hintsAnnotation: "auto"}, + name: "hints, hints annotation empty but trafficDist feature gate enabled, hints are not ignored", + hintsEnabled: true, + trafficDistFeatureEnabled: true, + nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"}, + serviceInfo: &BaseServicePortInfo{}, + endpoints: []Endpoint{ + &BaseEndpointInfo{endpoint: "10.1.2.3:80", zoneHints: sets.New[string]("zone-a"), ready: true}, + &BaseEndpointInfo{endpoint: "10.1.2.4:80", zoneHints: sets.New[string]("zone-b"), ready: true}, + &BaseEndpointInfo{endpoint: "10.1.2.5:80", zoneHints: sets.New[string]("zone-c"), ready: true}, + &BaseEndpointInfo{endpoint: "10.1.2.6:80", zoneHints: sets.New[string]("zone-a"), ready: true}, + }, + clusterEndpoints: sets.New[string]("10.1.2.3:80", "10.1.2.6:80"), + localEndpoints: nil, + }, { + name: "hints disabled, trafficDist feature gate enabled, hints are not ignored", + hintsEnabled: false, + trafficDistFeatureEnabled: true, + nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"}, + serviceInfo: &BaseServicePortInfo{}, + endpoints: []Endpoint{ + &BaseEndpointInfo{endpoint: "10.1.2.3:80", zoneHints: sets.New[string]("zone-a"), ready: true}, + &BaseEndpointInfo{endpoint: "10.1.2.4:80", zoneHints: sets.New[string]("zone-b"), ready: true}, + &BaseEndpointInfo{endpoint: "10.1.2.5:80", zoneHints: sets.New[string]("zone-c"), ready: true}, + &BaseEndpointInfo{endpoint: "10.1.2.6:80", zoneHints: sets.New[string]("zone-a"), ready: true}, + }, + clusterEndpoints: sets.New[string]("10.1.2.3:80", "10.1.2.6:80"), + localEndpoints: nil, + }, { + name: "externalTrafficPolicy: Local, topology ignored for Local endpoints", + hintsEnabled: true, + trafficDistFeatureEnabled: true, + nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"}, + serviceInfo: &BaseServicePortInfo{externalPolicyLocal: true, nodePort: 8080, hintsAnnotation: "auto"}, endpoints: []Endpoint{ &BaseEndpointInfo{endpoint: "10.1.2.3:80", zoneHints: sets.New[string]("zone-a"), ready: true, isLocal: true}, &BaseEndpointInfo{endpoint: "10.1.2.4:80", zoneHints: sets.New[string]("zone-b"), ready: true, isLocal: true}, @@ -145,10 +175,11 @@ func TestCategorizeEndpoints(t *testing.T) { localEndpoints: sets.New[string]("10.1.2.3:80", "10.1.2.4:80"), allEndpoints: sets.New[string]("10.1.2.3:80", "10.1.2.4:80", "10.1.2.6:80"), }, { - name: "internalTrafficPolicy: Local, topology ignored for Local endpoints", - hintsEnabled: true, - nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"}, - serviceInfo: &BaseServicePortInfo{internalPolicyLocal: true, hintsAnnotation: "auto", externalPolicyLocal: false, nodePort: 8080}, + name: "internalTrafficPolicy: Local, topology ignored for Local endpoints", + hintsEnabled: true, + trafficDistFeatureEnabled: true, + nodeLabels: map[string]string{v1.LabelTopologyZone: "zone-a"}, + serviceInfo: &BaseServicePortInfo{internalPolicyLocal: true, hintsAnnotation: "auto", externalPolicyLocal: false, nodePort: 8080}, endpoints: []Endpoint{ &BaseEndpointInfo{endpoint: "10.1.2.3:80", zoneHints: sets.New[string]("zone-a"), ready: true, isLocal: true}, &BaseEndpointInfo{endpoint: "10.1.2.4:80", zoneHints: sets.New[string]("zone-b"), ready: true, isLocal: true}, @@ -458,6 +489,7 @@ func TestCategorizeEndpoints(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.TopologyAwareHints, tc.hintsEnabled)() + defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ServiceTrafficDistribution, tc.trafficDistFeatureEnabled)() clusterEndpoints, localEndpoints, allEndpoints, hasAnyEndpoints := CategorizeEndpoints(tc.endpoints, tc.serviceInfo, tc.nodeLabels) From 606cae9b4790cd611f4b321f7e65fd9ce4f476f3 Mon Sep 17 00:00:00 2001 From: Gaurav Ghildiyal Date: Wed, 28 Feb 2024 22:01:48 -0800 Subject: [PATCH 6/7] Add new metric servicesCountByTrafficDistribution --- .../src/k8s.io/endpointslice/metrics/cache.go | 58 ++++++++++- .../endpointslice/metrics/cache_test.go | 96 +++++++++++++++++++ .../k8s.io/endpointslice/metrics/metrics.go | 13 +++ .../src/k8s.io/endpointslice/reconciler.go | 3 + .../k8s.io/endpointslice/reconciler_test.go | 48 +++++++--- 5 files changed, 200 insertions(+), 18 deletions(-) diff --git a/staging/src/k8s.io/endpointslice/metrics/cache.go b/staging/src/k8s.io/endpointslice/metrics/cache.go index e2681f262fe..6f102bb498e 100644 --- a/staging/src/k8s.io/endpointslice/metrics/cache.go +++ b/staging/src/k8s.io/endpointslice/metrics/cache.go @@ -20,6 +20,7 @@ import ( "math" "sync" + corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" endpointsliceutil "k8s.io/endpointslice/util" ) @@ -27,8 +28,9 @@ import ( // NewCache returns a new Cache with the specified endpointsPerSlice. func NewCache(endpointsPerSlice int32) *Cache { return &Cache{ - maxEndpointsPerSlice: endpointsPerSlice, - cache: map[types.NamespacedName]*ServicePortCache{}, + maxEndpointsPerSlice: endpointsPerSlice, + cache: map[types.NamespacedName]*ServicePortCache{}, + servicesByTrafficDistribution: make(map[string]map[types.NamespacedName]bool), } } @@ -40,7 +42,7 @@ type Cache struct { maxEndpointsPerSlice int32 // lock protects changes to numEndpoints, numSlicesActual, numSlicesDesired, - // and cache. + // cache and servicesByTrafficDistribution lock sync.Mutex // numEndpoints represents the total number of endpoints stored in // EndpointSlices. @@ -52,8 +54,18 @@ type Cache struct { // cache stores a ServicePortCache grouped by NamespacedNames representing // Services. cache map[types.NamespacedName]*ServicePortCache + // Tracks all services partitioned by their trafficDistribution field. + // + // The type should be read as map[trafficDistribution]setOfServices + servicesByTrafficDistribution map[string]map[types.NamespacedName]bool } +const ( + // Label value for cases when service.spec.trafficDistribution is set to an + // unknown value. + trafficDistributionImplementationSpecific = "ImplementationSpecific" +) + // ServicePortCache tracks values for total numbers of desired endpoints as well // as the efficiency of EndpointSlice endpoints distribution for each unique // Service Port combination. @@ -124,12 +136,46 @@ func (c *Cache) UpdateServicePortCache(serviceNN types.NamespacedName, spCache * c.updateMetrics() } +func (c *Cache) UpdateTrafficDistributionForService(serviceNN types.NamespacedName, trafficDistributionPtr *string) { + c.lock.Lock() + defer c.lock.Unlock() + + defer c.updateMetrics() + + for _, serviceSet := range c.servicesByTrafficDistribution { + delete(serviceSet, serviceNN) + } + + if trafficDistributionPtr == nil { + return + } + + trafficDistribution := *trafficDistributionPtr + // If we don't explicitly recognize a value for trafficDistribution, it should + // be treated as an implementation specific value. All such implementation + // specific values should use the label value "ImplementationSpecific" to not + // explode the metric labels cardinality. + if trafficDistribution != corev1.ServiceTrafficDistributionPreferClose { + trafficDistribution = trafficDistributionImplementationSpecific + } + serviceSet, ok := c.servicesByTrafficDistribution[trafficDistribution] + if !ok { + serviceSet = make(map[types.NamespacedName]bool) + c.servicesByTrafficDistribution[trafficDistribution] = serviceSet + } + serviceSet[serviceNN] = true +} + // DeleteService removes references of a Service from the global cache and // updates the corresponding metrics. func (c *Cache) DeleteService(serviceNN types.NamespacedName) { c.lock.Lock() defer c.lock.Unlock() + for _, serviceSet := range c.servicesByTrafficDistribution { + delete(serviceSet, serviceNN) + } + if spCache, ok := c.cache[serviceNN]; ok { actualSlices, desiredSlices, endpoints := spCache.totals(int(c.maxEndpointsPerSlice)) c.numEndpoints = c.numEndpoints - endpoints @@ -137,7 +183,6 @@ func (c *Cache) DeleteService(serviceNN types.NamespacedName) { c.numSlicesActual -= actualSlices c.updateMetrics() delete(c.cache, serviceNN) - } } @@ -147,6 +192,11 @@ func (c *Cache) updateMetrics() { NumEndpointSlices.WithLabelValues().Set(float64(c.numSlicesActual)) DesiredEndpointSlices.WithLabelValues().Set(float64(c.numSlicesDesired)) EndpointsDesired.WithLabelValues().Set(float64(c.numEndpoints)) + + ServicesCountByTrafficDistribution.Reset() + for trafficDistribution, services := range c.servicesByTrafficDistribution { + ServicesCountByTrafficDistribution.WithLabelValues(trafficDistribution).Set(float64(len(services))) + } } // numDesiredSlices calculates the number of EndpointSlices that would exist diff --git a/staging/src/k8s.io/endpointslice/metrics/cache_test.go b/staging/src/k8s.io/endpointslice/metrics/cache_test.go index bbf400852f2..adf23591d6c 100644 --- a/staging/src/k8s.io/endpointslice/metrics/cache_test.go +++ b/staging/src/k8s.io/endpointslice/metrics/cache_test.go @@ -20,6 +20,8 @@ import ( "fmt" "testing" + "github.com/google/go-cmp/cmp" + corev1 "k8s.io/api/core/v1" discovery "k8s.io/api/discovery/v1" "k8s.io/apimachinery/pkg/types" endpointsliceutil "k8s.io/endpointslice/util" @@ -89,6 +91,96 @@ func expectNumEndpointsAndSlices(t *testing.T, c *Cache, desired int, actual int } } +// Tests the mutations to servicesByTrafficDistribution field within Cache +// object. +func TestCache_ServicesByTrafficDistribution(t *testing.T) { + cache := NewCache(0) + + service1 := types.NamespacedName{Namespace: "ns1", Name: "service1"} + service2 := types.NamespacedName{Namespace: "ns1", Name: "service2"} + service3 := types.NamespacedName{Namespace: "ns2", Name: "service3"} + service4 := types.NamespacedName{Namespace: "ns3", Name: "service4"} + + // Define helper function for assertion + mustHaveServicesByTrafficDistribution := func(wantServicesByTrafficDistribution map[string]map[types.NamespacedName]bool, desc string) { + t.Helper() + gotServicesByTrafficDistribution := cache.servicesByTrafficDistribution + if diff := cmp.Diff(wantServicesByTrafficDistribution, gotServicesByTrafficDistribution); diff != "" { + t.Fatalf("UpdateTrafficDistributionForService(%v) resulted in unexpected diff for cache.servicesByTrafficDistribution; (-want, +got)\n%v", desc, diff) + } + } + + // Mutate and make assertions + + desc := "service1 starts using trafficDistribution=PreferClose" + cache.UpdateTrafficDistributionForService(service1, ptrTo(corev1.ServiceTrafficDistributionPreferClose)) + mustHaveServicesByTrafficDistribution(map[string]map[types.NamespacedName]bool{ + corev1.ServiceTrafficDistributionPreferClose: {service1: true}, + }, desc) + + desc = "service1 starts using trafficDistribution=PreferClose, retries of similar mutation should be idempotent" + cache.UpdateTrafficDistributionForService(service1, ptrTo(corev1.ServiceTrafficDistributionPreferClose)) + mustHaveServicesByTrafficDistribution(map[string]map[types.NamespacedName]bool{ // No delta + corev1.ServiceTrafficDistributionPreferClose: {service1: true}, + }, desc) + + desc = "service2 starts using trafficDistribution=PreferClose" + cache.UpdateTrafficDistributionForService(service2, ptrTo(corev1.ServiceTrafficDistributionPreferClose)) + mustHaveServicesByTrafficDistribution(map[string]map[types.NamespacedName]bool{ + corev1.ServiceTrafficDistributionPreferClose: {service1: true, service2: true}, // Delta + }, desc) + + desc = "service3 starts using trafficDistribution=InvalidValue" + cache.UpdateTrafficDistributionForService(service3, ptrTo("InvalidValue")) + mustHaveServicesByTrafficDistribution(map[string]map[types.NamespacedName]bool{ + corev1.ServiceTrafficDistributionPreferClose: {service1: true, service2: true}, + trafficDistributionImplementationSpecific: {service3: true}, // Delta + }, desc) + + desc = "service4 starts using trafficDistribution=nil" + cache.UpdateTrafficDistributionForService(service4, nil) + mustHaveServicesByTrafficDistribution(map[string]map[types.NamespacedName]bool{ // No delta + corev1.ServiceTrafficDistributionPreferClose: {service1: true, service2: true}, + trafficDistributionImplementationSpecific: {service3: true}, + }, desc) + + desc = "service2 transitions trafficDistribution: PreferClose -> InvalidValue" + cache.UpdateTrafficDistributionForService(service2, ptrTo("InvalidValue")) + mustHaveServicesByTrafficDistribution(map[string]map[types.NamespacedName]bool{ + corev1.ServiceTrafficDistributionPreferClose: {service1: true}, // Delta + trafficDistributionImplementationSpecific: {service3: true, service2: true}, // Delta + }, desc) + + desc = "service3 gets deleted" + cache.DeleteService(service3) + mustHaveServicesByTrafficDistribution(map[string]map[types.NamespacedName]bool{ + corev1.ServiceTrafficDistributionPreferClose: {service1: true}, + trafficDistributionImplementationSpecific: {service2: true}, // Delta + }, desc) + + desc = "service1 transitions trafficDistribution: PreferClose -> empty" + cache.UpdateTrafficDistributionForService(service1, ptrTo("")) + mustHaveServicesByTrafficDistribution(map[string]map[types.NamespacedName]bool{ + corev1.ServiceTrafficDistributionPreferClose: {}, // Delta + trafficDistributionImplementationSpecific: {service1: true, service2: true}, // Delta + }, desc) + + desc = "service1 transitions trafficDistribution: InvalidValue -> nil" + cache.UpdateTrafficDistributionForService(service1, nil) + mustHaveServicesByTrafficDistribution(map[string]map[types.NamespacedName]bool{ + corev1.ServiceTrafficDistributionPreferClose: {}, + trafficDistributionImplementationSpecific: {service2: true}, // Delta + }, desc) + + desc = "service2 transitions trafficDistribution: InvalidValue -> nil" + cache.UpdateTrafficDistributionForService(service2, nil) + mustHaveServicesByTrafficDistribution(map[string]map[types.NamespacedName]bool{ + corev1.ServiceTrafficDistributionPreferClose: {}, + trafficDistributionImplementationSpecific: {}, // Delta + }, desc) + +} + func benchmarkUpdateServicePortCache(b *testing.B, num int) { c := NewCache(int32(100)) ns := "benchmark" @@ -132,3 +224,7 @@ func BenchmarkUpdateServicePortCache10000(b *testing.B) { func BenchmarkUpdateServicePortCache100000(b *testing.B) { benchmarkUpdateServicePortCache(b, 100000) } + +func ptrTo[T any](obj T) *T { + return &obj +} diff --git a/staging/src/k8s.io/endpointslice/metrics/metrics.go b/staging/src/k8s.io/endpointslice/metrics/metrics.go index 977142fa067..236a83c3218 100644 --- a/staging/src/k8s.io/endpointslice/metrics/metrics.go +++ b/staging/src/k8s.io/endpointslice/metrics/metrics.go @@ -119,6 +119,18 @@ var ( }, []string{"result"}, // either "success", "stale", or "error" ) + + // ServicesCountByTrafficDistribution tracks the number of Services using some + // specific trafficDistribution + ServicesCountByTrafficDistribution = metrics.NewGaugeVec( + &metrics.GaugeOpts{ + Subsystem: EndpointSliceSubsystem, + Name: "services_count_by_traffic_distribution", + Help: "Number of Services using some specific trafficDistribution", + StabilityLevel: metrics.ALPHA, + }, + []string{"traffic_distribution"}, // One of ["PreferClose", "ImplementationSpecific"] + ) ) var registerMetrics sync.Once @@ -134,5 +146,6 @@ func RegisterMetrics() { legacyregistry.MustRegister(EndpointSliceChanges) legacyregistry.MustRegister(EndpointSlicesChangedPerSync) legacyregistry.MustRegister(EndpointSliceSyncs) + legacyregistry.MustRegister(ServicesCountByTrafficDistribution) }) } diff --git a/staging/src/k8s.io/endpointslice/reconciler.go b/staging/src/k8s.io/endpointslice/reconciler.go index 417666e098f..1ec466c503f 100644 --- a/staging/src/k8s.io/endpointslice/reconciler.go +++ b/staging/src/k8s.io/endpointslice/reconciler.go @@ -310,7 +310,10 @@ func (r *Reconciler) reconcileByAddressType(logger klog.Logger, service *corev1. } if canUseTrafficDistribution { + r.metricsCache.UpdateTrafficDistributionForService(serviceNN, service.Spec.TrafficDistribution) slicesToCreate, slicesToUpdate, _ = trafficdist.ReconcileHints(service.Spec.TrafficDistribution, slicesToCreate, slicesToUpdate, unchangedSlices(existingSlices, slicesToUpdate, slicesToDelete)) + } else { + r.metricsCache.UpdateTrafficDistributionForService(serviceNN, nil) } err := r.finalize(service, slicesToCreate, slicesToUpdate, slicesToDelete, triggerTime) diff --git a/staging/src/k8s.io/endpointslice/reconciler_test.go b/staging/src/k8s.io/endpointslice/reconciler_test.go index cd781a42429..007b3a9293e 100644 --- a/staging/src/k8s.io/endpointslice/reconciler_test.go +++ b/staging/src/k8s.io/endpointslice/reconciler_test.go @@ -2051,6 +2051,9 @@ func TestReconcile_TrafficDistribution(t *testing.T) { slicesChangedPerSync: 0, // 0 means either topologyAnnotation or trafficDistribution was used. slicesChangedPerSyncTopology: 0, // 0 means topologyAnnotation was not used. slicesChangedPerSyncTrafficDist: 1, // 1 EPS configured using trafficDistribution. + servicesCountByTrafficDistribution: map[string]int{ + "PreferClose": 1, + }, }, }, { @@ -2102,7 +2105,7 @@ func TestReconcile_TrafficDistribution(t *testing.T) { }, { name: "trafficDistribution=, topologyAnnotation=", - desc: "When trafficDistribution and topologyAnnotation are both disabled, no hints should be added", + desc: "When trafficDistribution and topologyAnnotation are both disabled, no hints should be added, but the servicesCountByTrafficDistribution metric should reflect this", trafficDistributionFeatureGateEnabled: true, trafficDistribution: "", topologyAnnotation: "", @@ -2119,6 +2122,9 @@ func TestReconcile_TrafficDistribution(t *testing.T) { slicesChangedPerSync: 1, // 1 means both topologyAnnotation and trafficDistribution were not used. slicesChangedPerSyncTopology: 0, // 0 means topologyAnnotation was not used. slicesChangedPerSyncTrafficDist: 0, // 0 means trafficDistribution was not used. + servicesCountByTrafficDistribution: map[string]int{ + "ImplementationSpecific": 1, + }, }, }, } @@ -2317,19 +2323,20 @@ func reconcileHelper(t *testing.T, r *Reconciler, service *corev1.Service, pods // Metrics helpers type expectedMetrics struct { - desiredSlices int - actualSlices int - desiredEndpoints int - addedPerSync int - removedPerSync int - numCreated int - numUpdated int - numDeleted int - slicesChangedPerSync int - slicesChangedPerSyncTopology int - slicesChangedPerSyncTrafficDist int - syncSuccesses int - syncErrors int + desiredSlices int + actualSlices int + desiredEndpoints int + addedPerSync int + removedPerSync int + numCreated int + numUpdated int + numDeleted int + slicesChangedPerSync int + slicesChangedPerSyncTopology int + slicesChangedPerSyncTrafficDist int + syncSuccesses int + syncErrors int + servicesCountByTrafficDistribution map[string]int } func expectMetrics(t *testing.T, em expectedMetrics) { @@ -2412,6 +2419,18 @@ func expectMetrics(t *testing.T, em expectedMetrics) { if actualSyncErrors != float64(em.syncErrors) { t.Errorf("Expected endpointSliceSyncErrors to be %d, got %v", em.syncErrors, actualSyncErrors) } + + for _, trafficDistribution := range []string{"PreferClose", "ImplementationSpecific"} { + gotServicesCount, err := testutil.GetGaugeMetricValue(metrics.ServicesCountByTrafficDistribution.WithLabelValues(trafficDistribution)) + var wantServicesCount int + if em.servicesCountByTrafficDistribution != nil { + wantServicesCount = em.servicesCountByTrafficDistribution[trafficDistribution] + } + handleErr(t, err, fmt.Sprintf("%v[traffic_distribution=%v]", "services_count_by_traffic_distribution", trafficDistribution)) + if int(gotServicesCount) != wantServicesCount { + t.Errorf("Expected servicesCountByTrafficDistribution for traffic_distribution=%v to be %v, got %v", trafficDistribution, wantServicesCount, gotServicesCount) + } + } } func handleErr(t *testing.T, err error, metricName string) { @@ -2430,4 +2449,5 @@ func setupMetrics() { metrics.EndpointSliceChanges.Reset() metrics.EndpointSlicesChangedPerSync.Reset() metrics.EndpointSliceSyncs.Reset() + metrics.ServicesCountByTrafficDistribution.Reset() } From ec6fd2befac30ebb7dfb55b94d8c9874489a3902 Mon Sep 17 00:00:00 2001 From: Gaurav Ghildiyal Date: Mon, 4 Mar 2024 14:07:45 -0800 Subject: [PATCH 7/7] Add options construct to EndpointSlice NewReconciler for the new trafficDistributionEnabled field --- .../endpointslice/endpointslice_controller.go | 2 +- .../src/k8s.io/endpointslice/reconciler.go | 35 +++++++++++++------ .../k8s.io/endpointslice/reconciler_test.go | 1 - 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/pkg/controller/endpointslice/endpointslice_controller.go b/pkg/controller/endpointslice/endpointslice_controller.go index 687e08b9fc2..2e137fafdda 100644 --- a/pkg/controller/endpointslice/endpointslice_controller.go +++ b/pkg/controller/endpointslice/endpointslice_controller.go @@ -173,9 +173,9 @@ func NewController(ctx context.Context, podInformer coreinformers.PodInformer, c.maxEndpointsPerSlice, c.endpointSliceTracker, c.topologyCache, - utilfeature.DefaultFeatureGate.Enabled(features.ServiceTrafficDistribution), c.eventRecorder, controllerName, + endpointslicerec.WithTrafficDistributionEnabled(utilfeature.DefaultFeatureGate.Enabled(features.ServiceTrafficDistribution)), ) return c diff --git a/staging/src/k8s.io/endpointslice/reconciler.go b/staging/src/k8s.io/endpointslice/reconciler.go index 1ec466c503f..9242a76c0bc 100644 --- a/staging/src/k8s.io/endpointslice/reconciler.go +++ b/staging/src/k8s.io/endpointslice/reconciler.go @@ -59,6 +59,16 @@ type Reconciler struct { controllerName string } +type ReconcilerOption func(*Reconciler) + +// WithTrafficDistributionEnabled controls whether the Reconciler considers the +// `trafficDistribution` field while reconciling EndpointSlices. +func WithTrafficDistributionEnabled(enabled bool) ReconcilerOption { + return func(r *Reconciler) { + r.trafficDistributionEnabled = enabled + } +} + // endpointMeta includes the attributes we group slices on, this type helps with // that logic in Reconciler type endpointMeta struct { @@ -327,18 +337,21 @@ func (r *Reconciler) reconcileByAddressType(logger klog.Logger, service *corev1. } -func NewReconciler(client clientset.Interface, nodeLister corelisters.NodeLister, maxEndpointsPerSlice int32, endpointSliceTracker *endpointsliceutil.EndpointSliceTracker, topologyCache *topologycache.TopologyCache, trafficDistributionEnabled bool, eventRecorder record.EventRecorder, controllerName string) *Reconciler { - return &Reconciler{ - client: client, - nodeLister: nodeLister, - maxEndpointsPerSlice: maxEndpointsPerSlice, - endpointSliceTracker: endpointSliceTracker, - metricsCache: metrics.NewCache(maxEndpointsPerSlice), - topologyCache: topologyCache, - trafficDistributionEnabled: trafficDistributionEnabled, - eventRecorder: eventRecorder, - controllerName: controllerName, +func NewReconciler(client clientset.Interface, nodeLister corelisters.NodeLister, maxEndpointsPerSlice int32, endpointSliceTracker *endpointsliceutil.EndpointSliceTracker, topologyCache *topologycache.TopologyCache, eventRecorder record.EventRecorder, controllerName string, options ...ReconcilerOption) *Reconciler { + r := &Reconciler{ + client: client, + nodeLister: nodeLister, + maxEndpointsPerSlice: maxEndpointsPerSlice, + endpointSliceTracker: endpointSliceTracker, + metricsCache: metrics.NewCache(maxEndpointsPerSlice), + topologyCache: topologyCache, + eventRecorder: eventRecorder, + controllerName: controllerName, } + for _, option := range options { + option(r) + } + return r } // placeholderSliceCompare is a conversion func for comparing two placeholder endpoint slices. diff --git a/staging/src/k8s.io/endpointslice/reconciler_test.go b/staging/src/k8s.io/endpointslice/reconciler_test.go index 007b3a9293e..0f931835b13 100644 --- a/staging/src/k8s.io/endpointslice/reconciler_test.go +++ b/staging/src/k8s.io/endpointslice/reconciler_test.go @@ -2199,7 +2199,6 @@ func newReconciler(client *fake.Clientset, nodes []*corev1.Node, maxEndpointsPer maxEndpointsPerSlice, endpointsliceutil.NewEndpointSliceTracker(), nil, - false, eventRecorder, controllerName, )