diff --git a/.features/pending/pod-restart.md b/.features/pending/pod-restart.md new file mode 100644 index 000000000000..04fd685086ab --- /dev/null +++ b/.features/pending/pod-restart.md @@ -0,0 +1,8 @@ +Description: Restart pods that fail before starting +Authors: [Alan Clucas](https://github.com/Joibel) +Component: General +Issues: 12572 + +Automatically restart pods that fail before starting for reasons like node eviction. +This is safe to do even for non-idempotent workloads. +You need to configure this in your workflow controller configmap for it to take effect. diff --git a/api/jsonschema/schema.json b/api/jsonschema/schema.json index 23d3983d1022..604a086569a5 100644 --- a/api/jsonschema/schema.json +++ b/api/jsonschema/schema.json @@ -6037,6 +6037,10 @@ "description": "EstimatedDuration in seconds.", "type": "integer" }, + "failedPodRestarts": { + "description": "FailedPodRestarts tracks the number of times the pod for this node was restarted due to infrastructure failures before the main container started.", + "type": "integer" + }, "finishedAt": { "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time", "description": "Time at which this node completed" @@ -6100,6 +6104,10 @@ "description": "ResourcesDuration is indicative, but not accurate, resource duration. This is populated when the nodes completes.", "type": "object" }, + "restartingPodUID": { + "description": "RestartingPodUID tracks the UID of the pod that is currently being restarted. This prevents duplicate restart attempts when the controller processes the same failed pod multiple times. Cleared when the replacement pod starts running.", + "type": "string" + }, "startedAt": { "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time", "description": "Time at which this node started" diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 4325e81b0b32..c5105d1eec4d 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -10323,6 +10323,10 @@ "description": "EstimatedDuration in seconds.", "type": "integer" }, + "failedPodRestarts": { + "description": "FailedPodRestarts tracks the number of times the pod for this node was restarted due to infrastructure failures before the main container started.", + "type": "integer" + }, "finishedAt": { "description": "Time at which this node completed", "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" @@ -10386,6 +10390,10 @@ "format": "int64" } }, + "restartingPodUID": { + "description": "RestartingPodUID tracks the UID of the pod that is currently being restarted. This prevents duplicate restart attempts when the controller processes the same failed pod multiple times. Cleared when the replacement pod starts running.", + "type": "string" + }, "startedAt": { "description": "Time at which this node started", "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" diff --git a/config/config.go b/config/config.go index c98bc9ae3326..4ac9471cf5d7 100644 --- a/config/config.go +++ b/config/config.go @@ -123,6 +123,39 @@ type Config struct { // ArtifactDrivers lists artifact driver plugins we can use ArtifactDrivers []ArtifactDriver `json:"artifactDrivers,omitempty"` + + // FailedPodRestart configures automatic restart of pods that fail before entering Running state + // (e.g., due to Eviction, DiskPressure, Preemption). This allows recovery from transient + // infrastructure issues without requiring a retryStrategy on templates. + FailedPodRestart *FailedPodRestartConfig `json:"failedPodRestart,omitempty"` +} + +// FailedPodRestartConfig configures automatic restart of pods that fail before entering Running state. +// This is useful for recovering from transient infrastructure issues like node eviction due to +// DiskPressure or MemoryPressure without requiring a retryStrategy on every template. +type FailedPodRestartConfig struct { + // Enabled enables automatic restart of pods that fail before entering Running state. + // When enabled, pods that fail due to infrastructure issues (like eviction) without ever + // running their main container will be automatically recreated. + // Default is false. + Enabled bool `json:"enabled,omitempty"` + + // MaxRestarts is the maximum number of automatic restarts per node before giving up. + // This prevents infinite restart loops. Default is 3. + MaxRestarts *int32 `json:"maxRestarts,omitempty"` +} + +// GetMaxRestarts returns the configured max restarts or the default value of 3. +func (c *FailedPodRestartConfig) GetMaxRestarts() int32 { + if c == nil || c.MaxRestarts == nil { + return 3 + } + return *c.MaxRestarts +} + +// IsEnabled returns true if the feature is enabled. +func (c *FailedPodRestartConfig) IsEnabled() bool { + return c != nil && c.Enabled } // ArtifactDriver is a plugin for an artifact driver diff --git a/docs/fields.md b/docs/fields.md index dc0bc0ddc8cd..b7edabeba935 100644 --- a/docs/fields.md +++ b/docs/fields.md @@ -1991,6 +1991,7 @@ NodeStatus contains status information about an individual node in the workflow |`daemoned`|`boolean`|Daemoned tracks whether or not this node was daemoned and need to be terminated| |`displayName`|`string`|DisplayName is a human readable representation of the node. Unique within a template boundary| |`estimatedDuration`|`integer`|EstimatedDuration in seconds.| +|`failedPodRestarts`|`integer`|FailedPodRestarts tracks the number of times the pod for this node was restarted due to infrastructure failures before the main container started.| |`finishedAt`|[`Time`](#time)|Time at which this node completed| |`hostNodeName`|`string`|HostNodeName name of the Kubernetes node on which the Pod is running, if applicable| |`id`|`string`|ID is a unique identifier of a node within the worklow It is implemented as a hash of the node name, which makes the ID deterministic| @@ -2005,6 +2006,7 @@ NodeStatus contains status information about an individual node in the workflow |`podIP`|`string`|PodIP captures the IP of the pod for daemoned steps| |`progress`|`string`|Progress to completion| |`resourcesDuration`|`Map< integer , int64 >`|ResourcesDuration is indicative, but not accurate, resource duration. This is populated when the nodes completes.| +|`restartingPodUID`|`string`|RestartingPodUID tracks the UID of the pod that is currently being restarted. This prevents duplicate restart attempts when the controller processes the same failed pod multiple times. Cleared when the replacement pod starts running.| |`startedAt`|[`Time`](#time)|Time at which this node started| |`synchronizationStatus`|[`NodeSynchronizationStatus`](#nodesynchronizationstatus)|SynchronizationStatus is the synchronization status of the node| |`taskResultSynced`|`boolean`|TaskResultSynced is used to determine if the node's output has been received| diff --git a/docs/metrics.md b/docs/metrics.md index afa7c66c1e7f..4b2f5996a9af 100644 --- a/docs/metrics.md +++ b/docs/metrics.md @@ -381,6 +381,28 @@ Total number of pods that started pending by reason. | `reason` | Summary of the kubernetes Reason for pending | | `namespace` | The namespace that the pod is in | +#### `pod_restarts_total` + +Total number of pods automatically restarted due to infrastructure failures before the main container started. +This counter tracks pods that were automatically restarted by the [failed pod restart](pod-restarts.md) feature. +These are infrastructure-level failures (like node eviction) that occur before the main container enters the Running state. + +| attribute | explanation | +|-------------|-------------------------------------------------------------------------------------------------------------| +| `reason` | The infrastructure failure reason: `Evicted`, `NodeShutdown`, `NodeAffinity`, or `UnexpectedAdmissionError` | +| `condition` | The node condition that caused the pod restart, e.g., `DiskPressure`, `MemoryPressure` | +| `namespace` | The namespace that the pod is in | + +`reason` will be one of: + +- `Evicted`: Node pressure eviction (`DiskPressure`, `MemoryPressure`, etc.) +- `NodeShutdown`: Graceful node shutdown +- `NodeAffinity`: Node affinity/selector no longer matches +- `UnexpectedAdmissionError`: Unexpected error during pod admission + +`condition` is extracted from the pod status message when available (e.g., `DiskPressure`, `MemoryPressure`). +It will be empty if the condition cannot be determined. + #### `pods_gauge` A gauge of the number of workflow created pods currently in the cluster in each phase. diff --git a/docs/pod-restarts.md b/docs/pod-restarts.md new file mode 100644 index 000000000000..e4cf53a6dbdf --- /dev/null +++ b/docs/pod-restarts.md @@ -0,0 +1,98 @@ +# Automatic Pod Restarts + +Argo Workflows can automatically restart pods that fail due to infrastructure issues before the main container starts. +This feature handles transient failures like node evictions, disk pressure, or unexpected admission errors without requiring a `retryStrategy` on your templates. + +## How It Works + +When a pod fails before its main container enters the Running state, the workflow controller checks if the failure reason indicates an infrastructure issue. +If so, the pod is automatically deleted and recreated, allowing the workflow to continue. +For safety this mechanism only works on pods we know never started, for pods that might have started `retryStrategy` is the solution. + +This is different from [retryStrategy](retries.md), which handles application-level failures after the container has run. +These are complementary mechanisms, in that both can occur. +Automatic pod restarts handle infrastructure-level failures that occur before your code even starts. + +### Restartable Failure Reasons + +The following pod failure reasons trigger automatic restarts: + +| Reason | Description | +|--------|-------------| +| `Evicted` | Node pressure eviction (`DiskPressure`, `MemoryPressure`, etc.) | +| `NodeShutdown` | Graceful node shutdown | +| `NodeAffinity` | Node affinity/selector no longer matches | +| `UnexpectedAdmissionError` | Unexpected error during pod admission | + +### Conditions for Restart + +A pod qualifies for automatic restart when ALL of the following are true: + +1. The pod phase is `Failed` +2. The main container never entered the `Running` state +3. The failure reason is one of the restartable reasons listed above +4. The restart count for this pod hasn't exceeded the configured maximum + +## Configuration + +Enable automatic pod restarts in the workflow controller ConfigMap: + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: workflow-controller-configmap +data: + failedPodRestart: | + enabled: true + maxRestarts: 3 +``` + +### Configuration Options + +| Option | Type | Default | Description | +|--------|------|---------|-------------| +| `enabled` | `bool` | `false` | Enable automatic pod restarts | +| `maxRestarts` | `int` | `3` | Maximum restart attempts per node before giving up | + +## Monitoring + +When a pod is automatically restarted, the node status is updated with: + +- `FailedPodRestarts`: Counter tracking how many times the pod was restarted +- `Message`: Updated to indicate the restart, e.g., `Pod auto-restarting due to Evicted: The node had condition: [DiskPressure]` + +You can view restart counts in the workflow status: + +```bash +kubectl get wf my-workflow -o jsonpath='{.status.nodes[*].failedPodRestarts}' +``` + +The [`pod_restarts_total`](metrics.md#pod_restarts_total) metric tracks restarts by reason, condition, and namespace. + +## Comparison with `retryStrategy` + +| Feature | Automatic Pod Restarts | retryStrategy | +|---------|----------------------|---------------| +| **Trigger** | Infrastructure failures before container starts | Application failures after container runs | +| **Configuration** | Global (controller ConfigMap) | Per-template | +| **Use case** | Node evictions, disk pressure, admission errors | Application errors, transient failures | +| **Counter** | `failedPodRestarts` in node status | `retries` in node status | + +Both features can work together. +If a pod is evicted before starting, automatic restart handles it. +If the container runs and fails, `retryStrategy` handles it. +Some pods may not be idempotent, and so a `retryStrategy` would not be suitable, but restarting the pod is safe. + +## Example + +A workflow running on a node that experiences disk pressure: + +1. Pod is scheduled and init containers start +2. Node experiences `DiskPressure`, evicting the pod before main container starts +3. Controller detects the eviction and `FailedPodRestarts` condition +4. Pod is deleted, and in workflow the node is marked as Pending to recreate the pod +5. New pod is created on a healthy node +6. Workflow continues normally + +The workflow succeeds without any template-level retry configuration needed. diff --git a/docs/retries.md b/docs/retries.md index ce1a9bcf30f6..d27943883f71 100644 --- a/docs/retries.md +++ b/docs/retries.md @@ -2,6 +2,10 @@ Argo Workflows offers a range of options for retrying failed steps. +!!! Note "restarts" + For infrastructure-level failures that occur before your container starts (like node evictions or disk pressure), see [Automatic Pod Restarts](pod-restarts.md). + This page covers application-level retries using `retryStrategy`. + ## Configuring `retryStrategy` in `WorkflowSpec` ```yaml diff --git a/docs/workflow-controller-configmap.md b/docs/workflow-controller-configmap.md index 6d5a351bdf34..46a0d4c8f6d0 100644 --- a/docs/workflow-controller-configmap.md +++ b/docs/workflow-controller-configmap.md @@ -97,6 +97,7 @@ Config contains the root of the configuration settings for the workflow controll | `SSO` | [`SSOConfig`](#ssoconfig) | SSO in settings for single-sign on | | `Synchronization` | [`SyncConfig`](#syncconfig) | Synchronization via databases config | | `ArtifactDrivers` | `Array<`[`ArtifactDriver`](#artifactdriver)`>` | ArtifactDrivers lists artifact driver plugins we can use | +| `FailedPodRestart` | [`FailedPodRestartConfig`](#failedpodrestartconfig) | FailedPodRestart configures automatic restart of pods that fail before entering Running state (e.g., due to Eviction, DiskPressure, Preemption). This allows recovery from transient infrastructure issues without requiring a retryStrategy on templates. | ## NodeEvents @@ -344,3 +345,14 @@ ArtifactDriver is a plugin for an artifact driver | `Name` | `wfv1.ArtifactPluginName` (string (name of an artifact plugin)) | Name is the name of the artifact driver plugin | | `Image` | `string` | Image is the docker image of the artifact driver | | `ConnectionTimeoutSeconds` | `int32` | ConnectionTimeoutSeconds is the timeout for the artifact driver connection, 5 seconds if not set | + +## FailedPodRestartConfig + +FailedPodRestartConfig configures automatic restart of pods that fail before entering Running state. This is useful for recovering from transient infrastructure issues like node eviction due to DiskPressure or MemoryPressure without requiring a retryStrategy on every template. + +### Fields + +| Field Name | Field Type | Description | +|---------------|------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `Enabled` | `bool` | Enabled enables automatic restart of pods that fail before entering Running state. When enabled, pods that fail due to infrastructure issues (like eviction) without ever running their main container will be automatically recreated. Default is false. | +| `MaxRestarts` | `int32` | MaxRestarts is the maximum number of automatic restarts per node before giving up. This prevents infinite restart loops. Default is 3. | diff --git a/hack/manifests/crdgen.sh b/hack/manifests/crdgen.sh index 4295acd2741d..11e6f6d5c522 100755 --- a/hack/manifests/crdgen.sh +++ b/hack/manifests/crdgen.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash set -eu -o pipefail cd "$(dirname "$0")/../.." # up to repo root diff --git a/manifests/base/crds/full/argoproj.io_workflows.yaml b/manifests/base/crds/full/argoproj.io_workflows.yaml index 30017939a171..c2c1929e8d83 100644 --- a/manifests/base/crds/full/argoproj.io_workflows.yaml +++ b/manifests/base/crds/full/argoproj.io_workflows.yaml @@ -40128,6 +40128,9 @@ spec: type: string estimatedDuration: type: integer + failedPodRestarts: + format: int32 + type: integer finishedAt: format: date-time type: string @@ -41465,6 +41468,8 @@ spec: format: int64 type: integer type: object + restartingPodUID: + type: string startedAt: format: date-time type: string diff --git a/manifests/quick-start-minimal.yaml b/manifests/quick-start-minimal.yaml index 94d9f58391fc..4804dc13a024 100644 --- a/manifests/quick-start-minimal.yaml +++ b/manifests/quick-start-minimal.yaml @@ -146217,6 +146217,9 @@ spec: type: string estimatedDuration: type: integer + failedPodRestarts: + format: int32 + type: integer finishedAt: format: date-time type: string @@ -147554,6 +147557,8 @@ spec: format: int64 type: integer type: object + restartingPodUID: + type: string startedAt: format: date-time type: string diff --git a/manifests/quick-start-mysql.yaml b/manifests/quick-start-mysql.yaml index 182cd2f3dc59..76f4127b2196 100644 --- a/manifests/quick-start-mysql.yaml +++ b/manifests/quick-start-mysql.yaml @@ -146217,6 +146217,9 @@ spec: type: string estimatedDuration: type: integer + failedPodRestarts: + format: int32 + type: integer finishedAt: format: date-time type: string @@ -147554,6 +147557,8 @@ spec: format: int64 type: integer type: object + restartingPodUID: + type: string startedAt: format: date-time type: string diff --git a/manifests/quick-start-postgres.yaml b/manifests/quick-start-postgres.yaml index 4cb6e0e7dd70..a0eb8831db2d 100644 --- a/manifests/quick-start-postgres.yaml +++ b/manifests/quick-start-postgres.yaml @@ -146217,6 +146217,9 @@ spec: type: string estimatedDuration: type: integer + failedPodRestarts: + format: int32 + type: integer finishedAt: format: date-time type: string @@ -147554,6 +147557,8 @@ spec: format: int64 type: integer type: object + restartingPodUID: + type: string startedAt: format: date-time type: string diff --git a/mkdocs.yml b/mkdocs.yml index c5be4cf716a4..dc5df96f6a19 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -133,6 +133,7 @@ nav: - template-defaults.md - enhanced-depends-logic.md - node-field-selector.md + - pod-restarts.md - Status: - resource-duration.md - estimated-duration.md diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index 0198bbf80289..2a5092d79122 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -4536,717 +4536,720 @@ func init() { } var fileDescriptor_724696e352c3df5f = []byte{ - // 11350 bytes of a gzipped FileDescriptorProto + // 11399 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x5b, 0x70, 0x64, 0xc7, 0x75, 0x18, 0xef, 0x00, 0x83, 0xc7, 0x19, 0x00, 0x8b, 0xed, 0x7d, 0x0d, 0x41, 0x72, 0x41, 0x5f, 0x8a, 0x0c, 0x69, 0x53, 0x58, 0x73, 0x29, 0x39, 0x8c, 0x95, 0x48, 0xc2, 0x63, 0x81, 0x05, 0x01, 0x2c, 0xc0, 0x1e, 0x2c, 0xd7, 0xa4, 0x68, 0x49, 0x17, 0x33, 0x8d, 0x99, 0x4b, 0xcc, 0xdc, 0x3b, 0xbc, 0xf7, 0x0e, 0x76, 0xc1, 0x97, 0x64, 0xea, 0x45, 0xc5, 0xb2, 0x15, 0xcb, 0x94, 0x2c, 0xc9, - 0x49, 0x4a, 0x51, 0xa4, 0x44, 0x25, 0xa7, 0x92, 0x92, 0xbf, 0x12, 0xfb, 0x27, 0x95, 0x0f, 0x97, - 0x52, 0x4e, 0x25, 0x72, 0x45, 0x29, 0xeb, 0x23, 0x06, 0x23, 0x38, 0xd1, 0x47, 0x52, 0xfa, 0xb0, - 0x2a, 0x4e, 0xe2, 0xcd, 0xa3, 0x52, 0xfd, 0xbc, 0xdd, 0x77, 0xee, 0x60, 0x01, 0x6c, 0x03, 0x54, - 0xd9, 0x5f, 0xc0, 0x9c, 0x3e, 0x7d, 0x4e, 0x77, 0xdf, 0xee, 0xd3, 0xa7, 0xcf, 0x39, 0x7d, 0x1a, - 0xd6, 0xea, 0x7e, 0xd2, 0xe8, 0x6c, 0x4c, 0x55, 0xc3, 0xd6, 0x25, 0x2f, 0xaa, 0x87, 0xed, 0x28, - 0x7c, 0x91, 0xfd, 0xf3, 0xee, 0x9b, 0x61, 0xb4, 0xb5, 0xd9, 0x0c, 0x6f, 0xc6, 0x97, 0xb6, 0x9f, - 0xbc, 0xd4, 0xde, 0xaa, 0x5f, 0xf2, 0xda, 0x7e, 0x7c, 0x49, 0x42, 0x2f, 0x6d, 0x3f, 0xe1, 0x35, - 0xdb, 0x0d, 0xef, 0x89, 0x4b, 0x75, 0x12, 0x90, 0xc8, 0x4b, 0x48, 0x6d, 0xaa, 0x1d, 0x85, 0x49, - 0x88, 0x3e, 0x98, 0x52, 0x9c, 0x92, 0x14, 0xd9, 0x3f, 0x1f, 0x51, 0x14, 0xa7, 0xb6, 0x9f, 0x9c, - 0x6a, 0x6f, 0xd5, 0xa7, 0x28, 0xc5, 0x29, 0x09, 0x9d, 0x92, 0x14, 0x27, 0xde, 0xad, 0xb5, 0xa9, - 0x1e, 0xd6, 0xc3, 0x4b, 0x8c, 0xf0, 0x46, 0x67, 0x93, 0xfd, 0x62, 0x3f, 0xd8, 0x7f, 0x9c, 0xe1, - 0x84, 0xbb, 0xf5, 0x54, 0x3c, 0xe5, 0x87, 0xb4, 0x7d, 0x97, 0xaa, 0x61, 0x44, 0x2e, 0x6d, 0x77, - 0x35, 0x6a, 0xe2, 0x5d, 0x1a, 0x4e, 0x3b, 0x6c, 0xfa, 0xd5, 0x9d, 0x3c, 0xac, 0xf7, 0xa4, 0x58, - 0x2d, 0xaf, 0xda, 0xf0, 0x03, 0x12, 0xed, 0xa4, 0x5d, 0x6f, 0x91, 0xc4, 0xcb, 0xab, 0x75, 0xa9, - 0x57, 0xad, 0xa8, 0x13, 0x24, 0x7e, 0x8b, 0x74, 0x55, 0xf8, 0x85, 0x3b, 0x55, 0x88, 0xab, 0x0d, - 0xd2, 0xf2, 0xba, 0xea, 0x3d, 0xd9, 0xab, 0x5e, 0x27, 0xf1, 0x9b, 0x97, 0xfc, 0x20, 0x89, 0x93, - 0x28, 0x5b, 0xc9, 0xbd, 0x02, 0x03, 0xd3, 0xad, 0xb0, 0x13, 0x24, 0xe8, 0x7d, 0x50, 0xdc, 0xf6, - 0x9a, 0x1d, 0x52, 0x76, 0x1e, 0x74, 0x1e, 0x1d, 0x9e, 0x79, 0xf8, 0xbb, 0xbb, 0x93, 0xf7, 0xec, - 0xed, 0x4e, 0x16, 0x9f, 0xa5, 0xc0, 0xdb, 0xbb, 0x93, 0x67, 0x49, 0x50, 0x0d, 0x6b, 0x7e, 0x50, - 0xbf, 0xf4, 0x62, 0x1c, 0x06, 0x53, 0xd7, 0x3a, 0xad, 0x0d, 0x12, 0x61, 0x5e, 0xc7, 0xfd, 0xf7, - 0x05, 0x38, 0x35, 0x1d, 0x55, 0x1b, 0xfe, 0x36, 0xa9, 0x24, 0x94, 0x7e, 0x7d, 0x07, 0x35, 0xa0, - 0x2f, 0xf1, 0x22, 0x46, 0xae, 0x74, 0x79, 0x65, 0xea, 0x6e, 0xbf, 0xfb, 0xd4, 0xba, 0x17, 0x49, - 0xda, 0x33, 0x83, 0x7b, 0xbb, 0x93, 0x7d, 0xeb, 0x5e, 0x84, 0x29, 0x0b, 0xd4, 0x84, 0xfe, 0x20, - 0x0c, 0x48, 0xb9, 0xc0, 0x58, 0x5d, 0xbb, 0x7b, 0x56, 0xd7, 0xc2, 0x40, 0xf5, 0x63, 0x66, 0x68, - 0x6f, 0x77, 0xb2, 0x9f, 0x42, 0x30, 0xe3, 0x42, 0xfb, 0xf5, 0xb2, 0xdf, 0x2e, 0xf7, 0xd9, 0xea, - 0xd7, 0xf3, 0x7e, 0xdb, 0xec, 0xd7, 0xf3, 0x7e, 0x1b, 0x53, 0x16, 0xee, 0x67, 0x0b, 0x30, 0x3c, - 0x1d, 0xd5, 0x3b, 0x2d, 0x12, 0x24, 0x31, 0xfa, 0x18, 0x40, 0xdb, 0x8b, 0xbc, 0x16, 0x49, 0x48, - 0x14, 0x97, 0x9d, 0x07, 0xfb, 0x1e, 0x2d, 0x5d, 0x5e, 0xba, 0x7b, 0xf6, 0x6b, 0x92, 0xe6, 0x0c, - 0x12, 0x9f, 0x1c, 0x14, 0x28, 0xc6, 0x1a, 0x4b, 0xf4, 0x0a, 0x0c, 0x7b, 0x51, 0xe2, 0x6f, 0x7a, - 0xd5, 0x24, 0x2e, 0x17, 0x18, 0xff, 0xa7, 0xef, 0x9e, 0xff, 0xb4, 0x20, 0x39, 0x73, 0x5a, 0xb0, - 0x1f, 0x96, 0x90, 0x18, 0xa7, 0xfc, 0xdc, 0xdf, 0xeb, 0x87, 0xd2, 0x74, 0x94, 0x2c, 0xcc, 0x56, - 0x12, 0x2f, 0xe9, 0xc4, 0xe8, 0x0f, 0x1d, 0x38, 0x13, 0xf3, 0x61, 0xf3, 0x49, 0xbc, 0x16, 0x85, - 0x55, 0x12, 0xc7, 0xa4, 0x26, 0xc6, 0x65, 0xd3, 0x4a, 0xbb, 0x24, 0xb3, 0xa9, 0x4a, 0x37, 0xa3, - 0x2b, 0x41, 0x12, 0xed, 0xcc, 0x3c, 0x21, 0xda, 0x7c, 0x26, 0x07, 0xe3, 0x8d, 0xb7, 0x27, 0x91, - 0xec, 0x0a, 0xa5, 0xc4, 0x3f, 0x31, 0xce, 0x6b, 0x35, 0xfa, 0x8a, 0x03, 0x23, 0xed, 0xb0, 0x16, - 0x63, 0x52, 0x0d, 0x3b, 0x6d, 0x52, 0x13, 0xc3, 0xfb, 0x11, 0xbb, 0xdd, 0x58, 0xd3, 0x38, 0xf0, - 0xf6, 0x9f, 0x15, 0xed, 0x1f, 0xd1, 0x8b, 0xb0, 0xd1, 0x14, 0xf4, 0x14, 0x8c, 0x04, 0x61, 0x52, - 0x69, 0x93, 0xaa, 0xbf, 0xe9, 0x93, 0x1a, 0x9b, 0xf8, 0x43, 0x69, 0xcd, 0x6b, 0x5a, 0x19, 0x36, - 0x30, 0x27, 0xe6, 0xa1, 0xdc, 0x6b, 0xe4, 0xd0, 0x38, 0xf4, 0x6d, 0x91, 0x1d, 0x2e, 0x6c, 0x30, - 0xfd, 0x17, 0x9d, 0x95, 0x02, 0x88, 0x2e, 0xe3, 0x21, 0x21, 0x59, 0x7e, 0xb1, 0xf0, 0x94, 0x33, - 0xf1, 0x01, 0x38, 0xdd, 0xd5, 0xf4, 0xc3, 0x10, 0x70, 0xbf, 0x37, 0x00, 0x43, 0xf2, 0x53, 0xa0, - 0x07, 0xa1, 0x3f, 0xf0, 0x5a, 0x52, 0xce, 0x8d, 0x88, 0x7e, 0xf4, 0x5f, 0xf3, 0x5a, 0x74, 0x85, - 0x7b, 0x2d, 0x42, 0x31, 0xda, 0x5e, 0xd2, 0x60, 0x74, 0x34, 0x8c, 0x35, 0x2f, 0x69, 0x60, 0x56, - 0x82, 0xee, 0x87, 0xfe, 0x56, 0x58, 0x23, 0x6c, 0x2c, 0x8a, 0x5c, 0x42, 0xac, 0x84, 0x35, 0x82, - 0x19, 0x94, 0xd6, 0xdf, 0x8c, 0xc2, 0x56, 0xb9, 0xdf, 0xac, 0x3f, 0x1f, 0x85, 0x2d, 0xcc, 0x4a, - 0xd0, 0x97, 0x1d, 0x18, 0x97, 0x73, 0x7b, 0x39, 0xac, 0x7a, 0x89, 0x1f, 0x06, 0xe5, 0x22, 0x93, - 0x28, 0xd8, 0xde, 0x92, 0x92, 0x94, 0x67, 0xca, 0xa2, 0x09, 0xe3, 0xd9, 0x12, 0xdc, 0xd5, 0x0a, - 0x74, 0x19, 0xa0, 0xde, 0x0c, 0x37, 0xbc, 0x26, 0x1d, 0x90, 0xf2, 0x00, 0xeb, 0x82, 0x92, 0x0c, - 0x0b, 0xaa, 0x04, 0x6b, 0x58, 0xe8, 0x16, 0x0c, 0x7a, 0x5c, 0xfa, 0x97, 0x07, 0x59, 0x27, 0x9e, - 0xb1, 0xd1, 0x09, 0x63, 0x3b, 0x99, 0x29, 0xed, 0xed, 0x4e, 0x0e, 0x0a, 0x20, 0x96, 0xec, 0xd0, - 0xe3, 0x30, 0x14, 0xb6, 0x69, 0xbb, 0xbd, 0x66, 0x79, 0x88, 0x4d, 0xcc, 0x71, 0xd1, 0xd6, 0xa1, - 0x55, 0x01, 0xc7, 0x0a, 0x03, 0x3d, 0x06, 0x83, 0x71, 0x67, 0x83, 0x7e, 0xc7, 0xf2, 0x30, 0xeb, - 0xd8, 0x29, 0x81, 0x3c, 0x58, 0xe1, 0x60, 0x2c, 0xcb, 0xd1, 0x7b, 0xa1, 0x14, 0x91, 0x6a, 0x27, - 0x8a, 0x09, 0xfd, 0xb0, 0x65, 0x60, 0xb4, 0xcf, 0x08, 0xf4, 0x12, 0x4e, 0x8b, 0xb0, 0x8e, 0x87, - 0xde, 0x0f, 0x63, 0xf4, 0x03, 0x5f, 0xb9, 0xd5, 0x8e, 0x48, 0x1c, 0xd3, 0xaf, 0x5a, 0x62, 0x8c, - 0xce, 0x8b, 0x9a, 0x63, 0xf3, 0x46, 0x29, 0xce, 0x60, 0xa3, 0x57, 0x01, 0x3c, 0x25, 0x33, 0xca, - 0x23, 0x6c, 0x30, 0x97, 0xed, 0xcd, 0x88, 0x85, 0xd9, 0x99, 0x31, 0xfa, 0x1d, 0xd3, 0xdf, 0x58, - 0xe3, 0x47, 0xc7, 0xa7, 0x46, 0x9a, 0x24, 0x21, 0xb5, 0xf2, 0x28, 0xeb, 0xb0, 0x1a, 0x9f, 0x39, - 0x0e, 0xc6, 0xb2, 0xdc, 0xfd, 0xed, 0x02, 0x68, 0x54, 0xd0, 0x0c, 0x0c, 0x09, 0xb9, 0x26, 0x96, - 0xe4, 0xcc, 0x23, 0xf2, 0x3b, 0xc8, 0x2f, 0x78, 0x7b, 0x37, 0x57, 0x1e, 0xaa, 0x7a, 0xe8, 0x35, - 0x28, 0xb5, 0xc3, 0xda, 0x0a, 0x49, 0xbc, 0x9a, 0x97, 0x78, 0x62, 0x37, 0xb7, 0xb0, 0xc3, 0x48, - 0x8a, 0x33, 0xa7, 0xe8, 0xa7, 0x5b, 0x4b, 0x59, 0x60, 0x9d, 0x1f, 0x7a, 0x1a, 0x50, 0x4c, 0xa2, - 0x6d, 0xbf, 0x4a, 0xa6, 0xab, 0x55, 0xaa, 0x12, 0xb1, 0x05, 0xd0, 0xc7, 0x3a, 0x33, 0x21, 0x3a, - 0x83, 0x2a, 0x5d, 0x18, 0x38, 0xa7, 0x96, 0xfb, 0xfd, 0x02, 0x8c, 0x69, 0x7d, 0x6d, 0x93, 0x2a, - 0xfa, 0x96, 0x03, 0xa7, 0xd4, 0x76, 0x36, 0xb3, 0x73, 0x8d, 0xce, 0x2a, 0xbe, 0x59, 0x11, 0x9b, - 0xdf, 0x97, 0xf2, 0x52, 0x3f, 0x05, 0x1f, 0x2e, 0xeb, 0x2f, 0x88, 0x3e, 0x9c, 0xca, 0x94, 0xe2, - 0x6c, 0xb3, 0x26, 0xbe, 0xe4, 0xc0, 0xd9, 0x3c, 0x12, 0x39, 0x32, 0xb7, 0xa1, 0xcb, 0x5c, 0xab, - 0xc2, 0x8b, 0x72, 0xa5, 0x9d, 0xd1, 0xe5, 0xf8, 0xff, 0x2b, 0xc0, 0xb8, 0x3e, 0x85, 0x98, 0x26, - 0xf0, 0xaf, 0x1c, 0x38, 0x27, 0x7b, 0x80, 0x49, 0xdc, 0x69, 0x66, 0x86, 0xb7, 0x65, 0x75, 0x78, - 0xf9, 0x4e, 0x3a, 0x9d, 0xc7, 0x8f, 0x0f, 0xf3, 0x03, 0x62, 0x98, 0xcf, 0xe5, 0xe2, 0xe0, 0xfc, - 0xa6, 0x4e, 0x7c, 0xc3, 0x81, 0x89, 0xde, 0x44, 0x73, 0x06, 0xbe, 0x6d, 0x0e, 0xfc, 0xf3, 0xf6, - 0x3a, 0xc9, 0xd9, 0xb3, 0xe1, 0x67, 0x9d, 0xd5, 0x3f, 0xc0, 0xd7, 0x87, 0xa1, 0x6b, 0x0f, 0x41, - 0x4f, 0x40, 0x49, 0x88, 0xe3, 0xe5, 0xb0, 0x1e, 0xb3, 0x46, 0x0e, 0xf1, 0xb5, 0x36, 0x9d, 0x82, - 0xb1, 0x8e, 0x83, 0x6a, 0x50, 0x88, 0x9f, 0x14, 0x4d, 0xb7, 0x20, 0xde, 0x2a, 0x4f, 0x2a, 0x2d, - 0x72, 0x60, 0x6f, 0x77, 0xb2, 0x50, 0x79, 0x12, 0x17, 0xe2, 0x27, 0xa9, 0xa6, 0x5e, 0xf7, 0x13, - 0x7b, 0x9a, 0xfa, 0x82, 0x9f, 0x28, 0x3e, 0x4c, 0x53, 0x5f, 0xf0, 0x13, 0x4c, 0x59, 0xd0, 0x13, - 0x48, 0x23, 0x49, 0xda, 0x6c, 0xc7, 0xb7, 0x72, 0x02, 0xb9, 0xba, 0xbe, 0xbe, 0xa6, 0x78, 0x31, - 0xfd, 0x82, 0x42, 0x30, 0xe3, 0x82, 0xde, 0x74, 0xe8, 0x88, 0xf3, 0xc2, 0x30, 0xda, 0x11, 0x8a, - 0xc3, 0x75, 0x7b, 0x53, 0x20, 0x8c, 0x76, 0x14, 0x73, 0xf1, 0x21, 0x55, 0x01, 0xd6, 0x59, 0xb3, - 0x8e, 0xd7, 0x36, 0x63, 0xa6, 0x27, 0xd8, 0xe9, 0xf8, 0xdc, 0x7c, 0x25, 0xd3, 0xf1, 0xb9, 0xf9, - 0x0a, 0x66, 0x5c, 0xe8, 0x07, 0x8d, 0xbc, 0x9b, 0x42, 0xc7, 0xb0, 0xf0, 0x41, 0xb1, 0x77, 0xd3, - 0xfc, 0xa0, 0xd8, 0xbb, 0x89, 0x29, 0x0b, 0xca, 0x29, 0x8c, 0x63, 0xa6, 0x52, 0x58, 0xe1, 0xb4, - 0x5a, 0xa9, 0x98, 0x9c, 0x56, 0x2b, 0x15, 0x4c, 0x59, 0xb0, 0x49, 0x5a, 0x8d, 0x99, 0x3e, 0x62, - 0x67, 0x92, 0xce, 0x66, 0x38, 0x2d, 0xcc, 0x56, 0x30, 0x65, 0x41, 0x45, 0x86, 0xf7, 0x72, 0x27, - 0xe2, 0xca, 0x4c, 0xe9, 0xf2, 0xaa, 0x85, 0xf9, 0x42, 0xc9, 0x29, 0x6e, 0xc3, 0x7b, 0xbb, 0x93, - 0x45, 0x06, 0xc2, 0x9c, 0x11, 0x4a, 0x60, 0xa0, 0xdd, 0xec, 0xd4, 0x7d, 0xae, 0x05, 0x95, 0x2e, - 0xaf, 0x59, 0x38, 0xae, 0x32, 0x7a, 0x8a, 0x27, 0xec, 0xed, 0x4e, 0x0e, 0x70, 0x18, 0x16, 0xbc, - 0xdc, 0x3f, 0xe8, 0x4b, 0x85, 0x94, 0xdc, 0x45, 0xd0, 0x6f, 0xb0, 0xed, 0x57, 0x48, 0x20, 0xa1, - 0x70, 0x3b, 0xc7, 0xa6, 0x70, 0x9f, 0xe1, 0xfb, 0xac, 0xc1, 0x0e, 0x67, 0xf9, 0xa3, 0x2f, 0x38, - 0xdd, 0x27, 0x6a, 0xcf, 0xfe, 0x0e, 0x9a, 0xaa, 0x03, 0x7c, 0x87, 0xda, 0xf7, 0xa0, 0x3d, 0xf1, - 0xa6, 0x93, 0xaa, 0x2e, 0x71, 0xaf, 0xdd, 0xe7, 0xa3, 0xe6, 0xee, 0x63, 0xd1, 0x0c, 0xa0, 0xef, - 0x36, 0x9f, 0x75, 0x60, 0x54, 0xc2, 0xa9, 0x52, 0x1e, 0xa3, 0x5b, 0x30, 0x24, 0x5b, 0x2a, 0xbe, - 0x9e, 0x4d, 0x0b, 0x84, 0x3a, 0x3a, 0xa8, 0xc6, 0x28, 0x6e, 0xee, 0xb7, 0x06, 0x01, 0xa5, 0x3b, - 0x64, 0x3b, 0x8c, 0x7d, 0x26, 0xff, 0x8e, 0xb0, 0xf7, 0x05, 0xda, 0xde, 0xf7, 0xac, 0xcd, 0xbd, - 0x2f, 0x6d, 0x96, 0xb1, 0x0b, 0x7e, 0x21, 0xb3, 0x5b, 0xf0, 0xed, 0xf0, 0x23, 0xc7, 0xb2, 0x5b, - 0x68, 0x4d, 0xd8, 0x7f, 0xdf, 0xd8, 0x16, 0xfb, 0x06, 0xdf, 0x30, 0x7f, 0xc9, 0xee, 0xbe, 0xa1, - 0xb5, 0x22, 0xbb, 0x83, 0x44, 0x5c, 0xae, 0xf3, 0x1d, 0xf3, 0x86, 0x55, 0xb9, 0xae, 0x71, 0x35, - 0x25, 0x7c, 0xc4, 0x25, 0xfc, 0x80, 0x2d, 0x9e, 0x9a, 0x84, 0xcf, 0xf2, 0x54, 0xb2, 0xfe, 0x65, - 0x29, 0xeb, 0xf9, 0x5e, 0xf9, 0x9c, 0x65, 0x59, 0xaf, 0xf1, 0xed, 0x96, 0xfa, 0xaf, 0x2b, 0xa9, - 0x3f, 0x64, 0x4b, 0x37, 0x35, 0xa5, 0xbe, 0xc6, 0x3d, 0x4f, 0xfe, 0xbf, 0x04, 0xe7, 0xba, 0x31, - 0x31, 0xd9, 0x44, 0x97, 0x60, 0xb8, 0x1a, 0x06, 0x9b, 0x7e, 0x7d, 0xc5, 0x6b, 0x8b, 0x53, 0xaa, - 0x92, 0x85, 0xb3, 0xb2, 0x00, 0xa7, 0x38, 0xe8, 0x01, 0x2e, 0xf8, 0xb8, 0x1d, 0xa8, 0x24, 0x50, - 0xfb, 0x96, 0xc8, 0x0e, 0x93, 0x82, 0xbf, 0x38, 0xf4, 0xe5, 0xaf, 0x4d, 0xde, 0xf3, 0xf1, 0xff, - 0xf8, 0xe0, 0x3d, 0xee, 0x1f, 0xf5, 0xc1, 0x7d, 0xb9, 0x3c, 0xc5, 0x19, 0xe5, 0x9f, 0x18, 0x67, - 0x14, 0xad, 0x5c, 0x48, 0xb1, 0x1b, 0x36, 0xd5, 0x77, 0x8d, 0x7c, 0xde, 0x69, 0x44, 0x2b, 0xc6, - 0xf9, 0x8d, 0xa2, 0x03, 0x15, 0x78, 0x2d, 0x12, 0xb7, 0xbd, 0x2a, 0x11, 0xbd, 0x57, 0x03, 0x75, - 0x4d, 0x16, 0xe0, 0x14, 0x87, 0x1b, 0x0e, 0x36, 0xbd, 0x4e, 0x33, 0x11, 0xe6, 0x41, 0xcd, 0x70, - 0xc0, 0xc0, 0x58, 0x96, 0xa3, 0xbf, 0xeb, 0x00, 0xea, 0xe6, 0x2a, 0x04, 0xc1, 0xfa, 0x71, 0x8c, - 0xc3, 0xcc, 0xf9, 0x3d, 0xcd, 0xf4, 0xa0, 0xf5, 0x34, 0xa7, 0x1d, 0xda, 0x37, 0x7d, 0x3d, 0xdd, - 0x07, 0xf9, 0x91, 0xe8, 0x00, 0x96, 0x43, 0x66, 0x60, 0xaa, 0x56, 0x49, 0x1c, 0x73, 0x23, 0xa4, - 0x6e, 0x60, 0x62, 0x60, 0x2c, 0xcb, 0xd1, 0x24, 0x14, 0x49, 0x14, 0x85, 0x91, 0xb0, 0x30, 0xb0, - 0x65, 0x74, 0x85, 0x02, 0x30, 0x87, 0xbb, 0x3f, 0x2a, 0x40, 0xb9, 0xd7, 0x99, 0x0c, 0xfd, 0xae, - 0x66, 0x4d, 0x10, 0xe7, 0x45, 0x71, 0xdc, 0x0d, 0x8f, 0xef, 0x24, 0x98, 0x3d, 0xf6, 0xf6, 0xb0, - 0x2b, 0x88, 0x52, 0x9c, 0x6d, 0xe0, 0xc4, 0x5b, 0x9a, 0x5d, 0x41, 0x27, 0x91, 0xa3, 0x60, 0x6c, - 0x9a, 0x0a, 0xc6, 0x9a, 0xed, 0x4e, 0xe9, 0x6a, 0xc6, 0x9f, 0x14, 0xe1, 0x8c, 0x2c, 0xad, 0x10, - 0xba, 0x55, 0x3f, 0xd3, 0x21, 0xd1, 0x0e, 0xfa, 0x63, 0x07, 0xce, 0x7a, 0x59, 0x83, 0x95, 0x4f, - 0x8e, 0x61, 0xa0, 0x35, 0xae, 0x53, 0xd3, 0x39, 0x1c, 0xf9, 0x40, 0x5f, 0x16, 0x03, 0x7d, 0x36, - 0x0f, 0xa5, 0x87, 0xb7, 0x21, 0xb7, 0x03, 0xe8, 0x29, 0x18, 0x91, 0x70, 0x66, 0xe4, 0xe2, 0x4b, - 0x5c, 0x99, 0xf4, 0xa7, 0xb5, 0x32, 0x6c, 0x60, 0xd2, 0x9a, 0x09, 0x69, 0xb5, 0x9b, 0x5e, 0x42, - 0x34, 0xf3, 0x98, 0xaa, 0xb9, 0xae, 0x95, 0x61, 0x03, 0x13, 0x3d, 0x02, 0x03, 0x41, 0x58, 0x23, - 0x8b, 0x35, 0x61, 0x16, 0x1f, 0x13, 0x75, 0x06, 0xae, 0x31, 0x28, 0x16, 0xa5, 0xe8, 0xe1, 0xd4, - 0x06, 0x59, 0x64, 0x4b, 0xa8, 0x94, 0x67, 0x7f, 0x44, 0xff, 0xc0, 0x81, 0x61, 0x5a, 0x63, 0x7d, - 0xa7, 0x4d, 0xe8, 0xde, 0x4a, 0xbf, 0x48, 0xed, 0x78, 0xbe, 0xc8, 0x35, 0xc9, 0xc6, 0x34, 0xf0, - 0x0c, 0x2b, 0xf8, 0x1b, 0x6f, 0x4f, 0x0e, 0xc9, 0x1f, 0x38, 0x6d, 0xd5, 0xc4, 0x02, 0xdc, 0xdb, - 0xf3, 0x6b, 0x1e, 0xca, 0x01, 0xf2, 0x37, 0x61, 0xcc, 0x6c, 0xc4, 0xa1, 0xbc, 0x1f, 0xff, 0x5c, - 0x5b, 0x76, 0xbc, 0x5f, 0x42, 0x9e, 0xbd, 0x63, 0xda, 0xb4, 0x9a, 0x0c, 0x73, 0x62, 0xea, 0x99, - 0x93, 0x61, 0x4e, 0x4c, 0x86, 0x39, 0xf7, 0x0f, 0x9d, 0x74, 0x69, 0x6a, 0x6a, 0x26, 0xdd, 0x98, - 0x3b, 0x51, 0x53, 0x08, 0x62, 0xb5, 0x31, 0x5f, 0xc7, 0xcb, 0x98, 0xc2, 0xd1, 0x5b, 0x9a, 0x74, - 0xa4, 0xd5, 0x3a, 0xc2, 0x99, 0x63, 0xc9, 0x31, 0x61, 0x10, 0xee, 0x96, 0x7f, 0xa2, 0x00, 0x67, - 0x9b, 0xe0, 0x7e, 0xa1, 0x00, 0x0f, 0xec, 0xab, 0x34, 0xe7, 0x36, 0xdc, 0x79, 0xc7, 0x1b, 0x4e, - 0xb7, 0xb5, 0x88, 0xb4, 0xc3, 0xeb, 0x78, 0x59, 0x7c, 0x2f, 0xb5, 0xad, 0x61, 0x0e, 0xc6, 0xb2, - 0x9c, 0xaa, 0x0e, 0x5b, 0x64, 0x67, 0x3e, 0x8c, 0x5a, 0x5e, 0x22, 0xa4, 0x83, 0x52, 0x1d, 0x96, - 0x64, 0x01, 0x4e, 0x71, 0xdc, 0x3f, 0x76, 0x20, 0xdb, 0x00, 0xe4, 0xc1, 0x58, 0x27, 0x26, 0x11, - 0xdd, 0x52, 0x2b, 0xa4, 0x1a, 0x11, 0x39, 0x3d, 0x1f, 0x9e, 0xe2, 0x31, 0x0e, 0xb4, 0x87, 0x53, - 0xd5, 0x30, 0x22, 0x53, 0xdb, 0x4f, 0x4c, 0x71, 0x8c, 0x25, 0xb2, 0x53, 0x21, 0x4d, 0x42, 0x69, - 0xcc, 0xa0, 0xbd, 0xdd, 0xc9, 0xb1, 0xeb, 0x06, 0x01, 0x9c, 0x21, 0x48, 0x59, 0xb4, 0xbd, 0x38, - 0xbe, 0x19, 0x46, 0x35, 0xc1, 0xa2, 0x70, 0x68, 0x16, 0x6b, 0x06, 0x01, 0x9c, 0x21, 0xe8, 0x7e, - 0x9f, 0x1e, 0x5f, 0x75, 0xad, 0x19, 0x7d, 0x8d, 0xea, 0x3e, 0x14, 0x32, 0xd3, 0x0c, 0x37, 0x66, - 0xc3, 0x20, 0xf1, 0xfc, 0x80, 0xc8, 0x10, 0x89, 0x75, 0x4b, 0x3a, 0xba, 0x41, 0x3b, 0xf5, 0x5c, - 0x74, 0x97, 0xe1, 0x9c, 0xb6, 0x50, 0x1d, 0x67, 0xa3, 0x19, 0x6e, 0x64, 0x7d, 0x9f, 0x14, 0x09, - 0xb3, 0x12, 0xf7, 0x27, 0x0e, 0x5c, 0xe8, 0x71, 0x18, 0x40, 0x5f, 0x72, 0x60, 0x74, 0xe3, 0xa7, - 0xa2, 0x6f, 0x66, 0x33, 0xd0, 0xfb, 0x61, 0x8c, 0x02, 0xe8, 0x4e, 0x24, 0xe6, 0x66, 0xc1, 0xf4, - 0xcb, 0xcd, 0x18, 0xa5, 0x38, 0x83, 0xed, 0xfe, 0x66, 0x01, 0x72, 0xb8, 0xa0, 0xc7, 0x61, 0x88, - 0x04, 0xb5, 0x76, 0xe8, 0x07, 0x89, 0x10, 0x46, 0x4a, 0xea, 0x5d, 0x11, 0x70, 0xac, 0x30, 0xc4, - 0xf9, 0x43, 0x0c, 0x4c, 0xa1, 0xeb, 0xfc, 0x21, 0x5a, 0x9e, 0xe2, 0xa0, 0x3a, 0x8c, 0x7b, 0xdc, - 0xab, 0xc4, 0xe6, 0x1e, 0x9b, 0xa6, 0x7d, 0x87, 0x99, 0xa6, 0x67, 0x99, 0xd3, 0x37, 0x43, 0x02, - 0x77, 0x11, 0x45, 0xef, 0x85, 0x52, 0x27, 0x26, 0x95, 0xb9, 0xa5, 0xd9, 0x88, 0xd4, 0xf8, 0xa9, - 0x5c, 0xf3, 0x76, 0x5e, 0x4f, 0x8b, 0xb0, 0x8e, 0xe7, 0xfe, 0xa9, 0x03, 0x83, 0x33, 0x5e, 0x75, - 0x2b, 0xdc, 0xdc, 0xa4, 0x43, 0x51, 0xeb, 0x44, 0xa9, 0x61, 0x4d, 0x1b, 0x8a, 0x39, 0x01, 0xc7, - 0x0a, 0x03, 0xad, 0xc3, 0x00, 0x5f, 0xf0, 0x62, 0xd9, 0xfd, 0xbc, 0xd6, 0x1f, 0x15, 0xbd, 0xc4, - 0xa6, 0x43, 0x27, 0xf1, 0x9b, 0x53, 0x3c, 0x7a, 0x69, 0x6a, 0x31, 0x48, 0x56, 0xa3, 0x4a, 0x12, - 0xf9, 0x41, 0x9d, 0x9f, 0xfc, 0xe6, 0x19, 0x0d, 0x2c, 0x68, 0xd1, 0x6e, 0xb4, 0xbc, 0x5b, 0x92, - 0x9d, 0x10, 0x3f, 0xaa, 0x1b, 0x2b, 0x69, 0x11, 0xd6, 0xf1, 0xe8, 0x6e, 0x52, 0xf5, 0xda, 0x42, - 0x2f, 0x51, 0xbb, 0xc9, 0xac, 0xd7, 0xc6, 0x14, 0xee, 0xfe, 0x91, 0x03, 0xc3, 0x33, 0x5e, 0xec, - 0x57, 0xff, 0x12, 0xc9, 0xa6, 0x0f, 0x43, 0x71, 0xd6, 0xab, 0x36, 0x08, 0xba, 0x9e, 0x3d, 0x13, - 0x97, 0x2e, 0x3f, 0x9a, 0xc7, 0x66, 0x39, 0xac, 0x7a, 0xcd, 0xd5, 0x8d, 0x17, 0x09, 0x5d, 0xef, - 0x9b, 0x24, 0x22, 0x41, 0x95, 0xcc, 0x8c, 0xf6, 0x3a, 0x39, 0xbb, 0x6f, 0x3b, 0x30, 0x36, 0xdb, - 0xf4, 0x49, 0x90, 0xcc, 0x92, 0x28, 0x61, 0x03, 0x57, 0x87, 0xf1, 0xaa, 0x82, 0x1c, 0x65, 0xe8, - 0xd8, 0x64, 0x9e, 0xcd, 0x90, 0xc0, 0x5d, 0x44, 0x51, 0x0d, 0x4e, 0x71, 0x58, 0xba, 0x68, 0x0e, - 0x35, 0x7e, 0xcc, 0x78, 0x3b, 0x6b, 0x52, 0xc0, 0x59, 0x92, 0xee, 0x8f, 0x1d, 0xb8, 0x30, 0xdb, - 0xec, 0xc4, 0x09, 0x89, 0x6e, 0x08, 0x61, 0x25, 0xb5, 0x5f, 0xf4, 0x51, 0x18, 0x6a, 0x49, 0x37, - 0xb6, 0x73, 0x87, 0xf9, 0xcd, 0xc4, 0x1d, 0xc5, 0xa6, 0x8d, 0xe1, 0x03, 0xbc, 0x42, 0x12, 0x2f, - 0x8d, 0xb9, 0x48, 0x61, 0x58, 0x51, 0x45, 0x6d, 0xe8, 0x8f, 0xdb, 0xa4, 0x6a, 0x2f, 0xe4, 0x4d, - 0xf6, 0xa1, 0xd2, 0x26, 0xd5, 0x54, 0xec, 0x33, 0x07, 0x2c, 0xe3, 0xe4, 0xfe, 0x6f, 0x07, 0xee, - 0xeb, 0xd1, 0xdf, 0x65, 0x3f, 0x4e, 0xd0, 0x0b, 0x5d, 0x7d, 0x9e, 0x3a, 0x58, 0x9f, 0x69, 0x6d, - 0xd6, 0x63, 0x25, 0x2f, 0x24, 0x44, 0xeb, 0xef, 0xeb, 0x50, 0xf4, 0x13, 0xd2, 0x92, 0x56, 0x72, - 0x0b, 0xf6, 0xac, 0x1e, 0x7d, 0x99, 0x19, 0x95, 0x81, 0x8f, 0x8b, 0x94, 0x1f, 0xe6, 0x6c, 0xdd, - 0x2d, 0x18, 0x98, 0x0d, 0x9b, 0x9d, 0x56, 0x70, 0xb0, 0xf0, 0xa1, 0x64, 0xa7, 0x4d, 0xb2, 0x5b, - 0x28, 0x3b, 0x1d, 0xb0, 0x12, 0x69, 0x57, 0xea, 0xcb, 0xb7, 0x2b, 0xb9, 0xff, 0xda, 0x01, 0xba, - 0xaa, 0x6a, 0xbe, 0x70, 0xaf, 0x72, 0x72, 0x9c, 0xe1, 0x03, 0x3a, 0xb9, 0xdb, 0xbb, 0x93, 0xa3, - 0x0a, 0x51, 0xa3, 0xff, 0x61, 0x18, 0x88, 0xd9, 0x89, 0x5d, 0xb4, 0x61, 0x5e, 0xaa, 0xd7, 0xfc, - 0x1c, 0x7f, 0x7b, 0x77, 0xf2, 0x40, 0xb1, 0xac, 0x53, 0x8a, 0xb6, 0xf0, 0x04, 0x0b, 0xaa, 0x54, - 0x1f, 0x6c, 0x91, 0x38, 0xf6, 0xea, 0xf2, 0x00, 0xa8, 0xf4, 0xc1, 0x15, 0x0e, 0xc6, 0xb2, 0xdc, - 0xfd, 0xa2, 0x03, 0xa3, 0x6a, 0x6f, 0xa3, 0xda, 0x3d, 0xba, 0xa6, 0xef, 0x82, 0x7c, 0xa6, 0x3c, - 0x90, 0xb7, 0x30, 0xd3, 0x7d, 0x7e, 0xff, 0x4d, 0xf2, 0x3d, 0x30, 0x52, 0x23, 0x6d, 0x12, 0xd4, - 0x48, 0x50, 0xa5, 0xa7, 0x73, 0x3a, 0x43, 0x86, 0x67, 0xc6, 0xe9, 0x71, 0x74, 0x4e, 0x83, 0x63, - 0x03, 0xcb, 0xfd, 0xba, 0x03, 0xf7, 0x2a, 0x72, 0x15, 0x92, 0x60, 0x92, 0x44, 0x3b, 0x2a, 0x76, - 0xf5, 0x70, 0x9b, 0xd9, 0x0d, 0xaa, 0x1e, 0x27, 0x11, 0x67, 0x7e, 0xb4, 0xdd, 0xac, 0xc4, 0x95, - 0x69, 0x46, 0x04, 0x4b, 0x6a, 0xee, 0xaf, 0xf7, 0xc1, 0x59, 0xbd, 0x91, 0x4a, 0xc0, 0x7c, 0xc2, - 0x01, 0x50, 0x23, 0x40, 0xf7, 0xeb, 0x3e, 0x3b, 0x0e, 0x3d, 0xe3, 0x4b, 0xa5, 0x22, 0x48, 0x81, - 0x63, 0xac, 0xb1, 0x45, 0xcf, 0xc1, 0xc8, 0x36, 0x5d, 0x14, 0x64, 0x85, 0x6a, 0x13, 0x71, 0xb9, - 0x8f, 0x35, 0x63, 0x32, 0xef, 0x63, 0x3e, 0x9b, 0xe2, 0xa5, 0xd6, 0x02, 0x0d, 0x18, 0x63, 0x83, - 0x14, 0x3d, 0x08, 0x8d, 0x46, 0xfa, 0x27, 0x11, 0x26, 0xfb, 0x0f, 0x59, 0xec, 0x63, 0xf6, 0xab, - 0xcf, 0x9c, 0xde, 0xdb, 0x9d, 0x1c, 0x35, 0x40, 0xd8, 0x6c, 0x84, 0xfb, 0x1c, 0xb0, 0xb1, 0xf0, - 0x83, 0x0e, 0x59, 0x0d, 0xd0, 0x43, 0xd2, 0x84, 0xc7, 0xdd, 0x3e, 0x4a, 0x72, 0xe8, 0x66, 0x3c, - 0x7a, 0xd4, 0xdd, 0xf4, 0xfc, 0x26, 0x8b, 0xe9, 0xa4, 0x58, 0xea, 0xa8, 0x3b, 0xcf, 0xa0, 0x58, - 0x94, 0xba, 0x53, 0x30, 0x38, 0x4b, 0xfb, 0x4e, 0x22, 0x4a, 0x57, 0x0f, 0xc5, 0x1e, 0x35, 0x42, - 0xb1, 0x65, 0xc8, 0xf5, 0x3a, 0x9c, 0x9b, 0x8d, 0x88, 0x97, 0x90, 0xca, 0x93, 0x33, 0x9d, 0xea, - 0x16, 0x49, 0x78, 0xbc, 0x5b, 0x8c, 0xde, 0x07, 0xa3, 0x21, 0xdb, 0x32, 0x96, 0xc3, 0xea, 0x96, - 0x1f, 0xd4, 0x85, 0x45, 0xf6, 0x9c, 0xa0, 0x32, 0xba, 0xaa, 0x17, 0x62, 0x13, 0xd7, 0xfd, 0xcf, - 0x05, 0x18, 0x99, 0x8d, 0xc2, 0x40, 0x8a, 0xc5, 0x13, 0xd8, 0xca, 0x12, 0x63, 0x2b, 0xb3, 0xe0, - 0x8d, 0xd5, 0xdb, 0xdf, 0x6b, 0x3b, 0x43, 0xaf, 0x2a, 0x11, 0xd9, 0x67, 0xeb, 0x84, 0x62, 0xf0, - 0x65, 0xb4, 0xd3, 0x8f, 0x6d, 0x0a, 0x50, 0xf7, 0xbf, 0x38, 0x30, 0xae, 0xa3, 0x9f, 0xc0, 0x0e, - 0x1a, 0x9b, 0x3b, 0xe8, 0x35, 0xbb, 0xfd, 0xed, 0xb1, 0x6d, 0x7e, 0x67, 0xd0, 0xec, 0x27, 0x73, - 0xc5, 0x7f, 0xd9, 0x81, 0x91, 0x9b, 0x1a, 0x40, 0x74, 0xd6, 0xb6, 0x12, 0xf3, 0x2e, 0x29, 0x66, - 0x74, 0xe8, 0xed, 0xcc, 0x6f, 0x6c, 0xb4, 0x04, 0xbd, 0x00, 0xa7, 0xab, 0x61, 0x50, 0xed, 0x44, - 0x54, 0xbf, 0xdd, 0x59, 0x63, 0x57, 0x41, 0xc4, 0x16, 0x37, 0x25, 0xc8, 0x9d, 0x9e, 0xcd, 0x22, - 0xdc, 0xce, 0x03, 0xe2, 0x6e, 0x42, 0xdc, 0x3b, 0x10, 0xd3, 0x4d, 0x48, 0x9c, 0xb0, 0x34, 0xef, - 0x00, 0x03, 0x63, 0x59, 0x8e, 0xae, 0xc3, 0x85, 0x38, 0xf1, 0xa2, 0xc4, 0x0f, 0xea, 0x73, 0xc4, - 0xab, 0x35, 0xfd, 0x80, 0x1e, 0x0e, 0xc2, 0xa0, 0xc6, 0x7d, 0x97, 0x7d, 0x33, 0xf7, 0xed, 0xed, - 0x4e, 0x5e, 0xa8, 0xe4, 0xa3, 0xe0, 0x5e, 0x75, 0xd1, 0x87, 0x61, 0x42, 0xf8, 0x1f, 0x36, 0x3b, - 0xcd, 0xa7, 0xc3, 0x8d, 0xf8, 0xaa, 0x1f, 0xd3, 0x83, 0xfb, 0xb2, 0xdf, 0xf2, 0x13, 0xe6, 0xa1, - 0x2c, 0xce, 0x5c, 0xdc, 0xdb, 0x9d, 0x9c, 0xa8, 0xf4, 0xc4, 0xc2, 0xfb, 0x50, 0x40, 0x18, 0xce, - 0x73, 0x71, 0xd6, 0x45, 0x7b, 0x90, 0xd1, 0x9e, 0xd8, 0xdb, 0x9d, 0x3c, 0x3f, 0x9f, 0x8b, 0x81, - 0x7b, 0xd4, 0xa4, 0x7b, 0x71, 0xe2, 0xb7, 0xc8, 0xcb, 0x61, 0x40, 0x98, 0x43, 0x51, 0xdb, 0x8b, - 0xd7, 0x05, 0x1c, 0x2b, 0x0c, 0xf4, 0x62, 0x3a, 0xb7, 0xe8, 0x02, 0x10, 0x71, 0x35, 0x87, 0x97, - 0x59, 0xec, 0xb0, 0x71, 0x43, 0xa3, 0xc4, 0x02, 0x46, 0x0d, 0xda, 0xe8, 0x93, 0x0e, 0x8c, 0xc4, - 0x49, 0xa8, 0xae, 0x6f, 0x88, 0xc0, 0x1a, 0x0b, 0x13, 0xb9, 0xa2, 0x51, 0xe5, 0xaa, 0x8c, 0x0e, - 0xc1, 0x06, 0x57, 0xf4, 0x73, 0x30, 0x1c, 0x57, 0x1b, 0xa4, 0xd6, 0x69, 0x92, 0xb8, 0x5c, 0x62, - 0xda, 0x0f, 0x3b, 0x98, 0x55, 0x24, 0x10, 0xa7, 0xe5, 0x54, 0x39, 0xbd, 0xd9, 0x20, 0x01, 0x0b, - 0x2d, 0xd6, 0x94, 0xd3, 0x1b, 0x0d, 0x12, 0x60, 0x56, 0xe2, 0xfe, 0xa8, 0x0f, 0x50, 0xb7, 0x28, - 0x43, 0x4b, 0x30, 0xe0, 0x55, 0x13, 0x7f, 0x5b, 0x86, 0x55, 0x3e, 0x94, 0xb7, 0xcd, 0x67, 0x0f, - 0x88, 0x4a, 0xfe, 0x4d, 0xb3, 0xaa, 0x58, 0x90, 0x40, 0x21, 0x9c, 0x6e, 0x7a, 0x71, 0x22, 0x5b, - 0x58, 0xa3, 0x1f, 0x52, 0x6c, 0x00, 0x3f, 0x7b, 0xb0, 0x4f, 0x45, 0x6b, 0xcc, 0x9c, 0xa3, 0xeb, - 0x71, 0x39, 0x4b, 0x08, 0x77, 0xd3, 0x46, 0x1f, 0x63, 0xfa, 0x12, 0x57, 0x66, 0xa5, 0xa2, 0xb2, - 0x64, 0x45, 0x97, 0xe0, 0x34, 0x0d, 0x5d, 0x49, 0xb0, 0xc1, 0x1a, 0x4b, 0x74, 0x09, 0x86, 0xd9, - 0xba, 0x21, 0x35, 0xc2, 0x57, 0x7f, 0x5f, 0xaa, 0xd6, 0x56, 0x64, 0x01, 0x4e, 0x71, 0x34, 0xbd, - 0x81, 0x2f, 0xf8, 0x1e, 0x7a, 0x03, 0x7a, 0x0a, 0x8a, 0xed, 0x86, 0x17, 0xcb, 0x50, 0x7d, 0x57, - 0xca, 0xe1, 0x35, 0x0a, 0x64, 0xa2, 0x49, 0xfb, 0x96, 0x0c, 0x88, 0x79, 0x05, 0xf7, 0xdf, 0x00, - 0x0c, 0xce, 0x4d, 0x2f, 0xac, 0x7b, 0xf1, 0xd6, 0x01, 0x4e, 0x35, 0x74, 0x19, 0x0a, 0xf5, 0x53, - 0x9c, 0x2a, 0xd2, 0x65, 0x28, 0xe0, 0x58, 0x61, 0xa0, 0x00, 0x06, 0xfc, 0x80, 0x4a, 0x9e, 0xf2, - 0x98, 0x2d, 0xc7, 0x82, 0x3a, 0xa1, 0x31, 0xcb, 0xcf, 0x22, 0xa3, 0x8e, 0x05, 0x17, 0xf4, 0x2a, - 0x0c, 0x7b, 0xf2, 0xa6, 0x94, 0xd8, 0xd1, 0x97, 0x6c, 0x58, 0xcc, 0x05, 0x49, 0x3d, 0x66, 0x4a, - 0x80, 0x70, 0xca, 0x10, 0x7d, 0xdc, 0x81, 0x92, 0xec, 0x3a, 0x26, 0x9b, 0xc2, 0x99, 0xbd, 0x62, - 0xaf, 0xcf, 0x98, 0x6c, 0xf2, 0x80, 0x1a, 0x0d, 0x80, 0x75, 0x96, 0x5d, 0xa7, 0xa0, 0xe2, 0x41, - 0x4e, 0x41, 0xe8, 0x26, 0x0c, 0xdf, 0xf4, 0x93, 0x06, 0xdb, 0xb3, 0x85, 0x13, 0x6d, 0xfe, 0xee, - 0x5b, 0x4d, 0xc9, 0xa5, 0x23, 0x76, 0x43, 0x32, 0xc0, 0x29, 0x2f, 0xba, 0x1c, 0xe8, 0x0f, 0x76, - 0xd3, 0x8c, 0xed, 0x0d, 0xc3, 0x66, 0x05, 0x56, 0x80, 0x53, 0x1c, 0x3a, 0xc4, 0x23, 0xf4, 0x57, - 0x85, 0xbc, 0xd4, 0xa1, 0xa2, 0x45, 0xc4, 0x96, 0x58, 0x98, 0x57, 0x92, 0x22, 0x1f, 0xac, 0x1b, - 0x1a, 0x0f, 0x6c, 0x70, 0x54, 0xa2, 0x73, 0xb8, 0x97, 0xe8, 0x44, 0xaf, 0xf2, 0x53, 0x19, 0x3f, - 0x1e, 0x88, 0xdd, 0x60, 0xd9, 0xce, 0x89, 0x85, 0xd3, 0xe4, 0xb7, 0x37, 0xd2, 0xdf, 0x58, 0xe3, - 0x47, 0x25, 0x46, 0x18, 0x5c, 0xb9, 0xe5, 0x27, 0xe2, 0xce, 0x89, 0x92, 0x18, 0xab, 0x0c, 0x8a, - 0x45, 0x29, 0x0f, 0xd6, 0xa0, 0x93, 0x20, 0x16, 0xbb, 0x80, 0x16, 0xac, 0xc1, 0xc0, 0x58, 0x96, - 0xa3, 0xbf, 0xe7, 0x40, 0xb1, 0x11, 0x86, 0x5b, 0x71, 0x79, 0x94, 0x4d, 0x0e, 0x0b, 0x5a, 0xb2, - 0x90, 0x38, 0x53, 0x57, 0x29, 0x59, 0xf3, 0x16, 0x5d, 0x91, 0xc1, 0x6e, 0xef, 0x4e, 0x8e, 0x2d, - 0xfb, 0x9b, 0xa4, 0xba, 0x53, 0x6d, 0x12, 0x06, 0x79, 0xe3, 0x6d, 0x0d, 0x72, 0x65, 0x9b, 0x04, - 0x09, 0xe6, 0xad, 0x9a, 0xf8, 0xac, 0x03, 0x90, 0x12, 0xca, 0xf1, 0x8a, 0x12, 0x33, 0x8e, 0xc0, - 0xc2, 0x11, 0xd9, 0x68, 0x9a, 0xee, 0x66, 0xfd, 0x77, 0x0e, 0x94, 0x68, 0xe7, 0xa4, 0x08, 0x7c, - 0x04, 0x06, 0x12, 0x2f, 0xaa, 0x13, 0xe9, 0x19, 0x50, 0x9f, 0x63, 0x9d, 0x41, 0xb1, 0x28, 0x45, - 0x01, 0x14, 0x13, 0x2f, 0xde, 0x92, 0x8a, 0xf9, 0xa2, 0xb5, 0x21, 0x4e, 0x75, 0x72, 0xfa, 0x2b, - 0xc6, 0x9c, 0x0d, 0x7a, 0x14, 0x86, 0xe8, 0xd6, 0x31, 0xef, 0xc5, 0x32, 0x58, 0x67, 0x84, 0x0a, - 0xf1, 0x79, 0x01, 0xc3, 0xaa, 0xd4, 0xfd, 0xcd, 0x02, 0xf4, 0xcf, 0xf1, 0x23, 0xda, 0x40, 0x1c, - 0x76, 0xa2, 0x2a, 0x11, 0xaa, 0xba, 0x85, 0x39, 0x4d, 0xe9, 0x56, 0x18, 0x4d, 0xed, 0x90, 0xc4, - 0x7e, 0x63, 0xc1, 0x0b, 0xbd, 0xe5, 0xc0, 0x58, 0x12, 0x79, 0x41, 0xbc, 0xc9, 0x7c, 0x30, 0x7e, - 0x18, 0x88, 0x21, 0xb2, 0x30, 0x0b, 0xd7, 0x0d, 0xba, 0x95, 0x84, 0xb4, 0x53, 0x57, 0x90, 0x59, - 0x86, 0x33, 0x6d, 0x70, 0x7f, 0xcb, 0x01, 0x48, 0x5b, 0x8f, 0xde, 0x74, 0x60, 0xd4, 0xd3, 0x83, - 0x54, 0xc5, 0x18, 0xad, 0xda, 0x73, 0xd8, 0x32, 0xb2, 0xdc, 0x3a, 0x61, 0x80, 0xb0, 0xc9, 0xd8, - 0x7d, 0x2f, 0x14, 0xd9, 0xea, 0xa0, 0x7b, 0x75, 0x2c, 0xac, 0xd9, 0x59, 0xf3, 0x95, 0xb4, 0x72, - 0x63, 0x85, 0xe1, 0xbe, 0x00, 0x63, 0x57, 0x6e, 0x91, 0x6a, 0x27, 0x09, 0x23, 0x6e, 0xcb, 0xef, - 0x71, 0x15, 0xca, 0x39, 0xd2, 0x55, 0xa8, 0x6f, 0x3b, 0x50, 0xd2, 0x22, 0x16, 0xe9, 0x4e, 0x5d, - 0x9f, 0xad, 0x70, 0x93, 0x85, 0x18, 0xaa, 0x25, 0x2b, 0x31, 0x91, 0x9c, 0x64, 0xba, 0x8d, 0x28, - 0x10, 0x4e, 0x19, 0xde, 0x21, 0xa2, 0xcf, 0xfd, 0x03, 0x07, 0xce, 0xe5, 0x86, 0x57, 0xbe, 0xc3, - 0xcd, 0x36, 0xbc, 0xea, 0x85, 0x03, 0x78, 0xd5, 0xbf, 0xe3, 0x40, 0x4a, 0x89, 0x8a, 0xa2, 0x8d, - 0xb4, 0xe5, 0x9a, 0x28, 0x12, 0x9c, 0x44, 0x29, 0x7a, 0x15, 0x2e, 0x98, 0x5f, 0xf0, 0x88, 0x1e, - 0x14, 0x7e, 0x38, 0xcd, 0xa7, 0x84, 0x7b, 0xb1, 0x70, 0xbf, 0xe2, 0x40, 0x71, 0xc1, 0xeb, 0xd4, - 0xc9, 0x81, 0x0c, 0x60, 0x54, 0x8e, 0x45, 0xc4, 0x6b, 0x26, 0xf2, 0xe8, 0x20, 0xe4, 0x18, 0x16, - 0x30, 0xac, 0x4a, 0xd1, 0x34, 0x0c, 0x87, 0x6d, 0x62, 0x38, 0x05, 0x1f, 0x92, 0xa3, 0xb7, 0x2a, - 0x0b, 0xe8, 0xb6, 0xc3, 0xb8, 0x2b, 0x08, 0x4e, 0x6b, 0xb9, 0x5f, 0x1d, 0x80, 0x92, 0x76, 0xfd, - 0x87, 0xea, 0x02, 0x11, 0x69, 0x87, 0x59, 0x7d, 0x99, 0x4e, 0x18, 0xcc, 0x4a, 0xe8, 0x1a, 0x8c, - 0xc8, 0xb6, 0x1f, 0x73, 0xb1, 0x65, 0xac, 0x41, 0x2c, 0xe0, 0x58, 0x61, 0xa0, 0x49, 0x28, 0xd6, - 0x48, 0x3b, 0x69, 0xb0, 0xe6, 0xf5, 0xf3, 0x68, 0xc0, 0x39, 0x0a, 0xc0, 0x1c, 0x4e, 0x11, 0x36, - 0x49, 0x52, 0x6d, 0x30, 0x5b, 0xaf, 0x08, 0x17, 0x9c, 0xa7, 0x00, 0xcc, 0xe1, 0x39, 0x7e, 0xc9, - 0xe2, 0xf1, 0xfb, 0x25, 0x07, 0x2c, 0xfb, 0x25, 0x51, 0x1b, 0xce, 0xc4, 0x71, 0x63, 0x2d, 0xf2, - 0xb7, 0xbd, 0x84, 0xa4, 0xb3, 0x6f, 0xf0, 0x30, 0x7c, 0x2e, 0xb0, 0x0b, 0xf9, 0x95, 0xab, 0x59, - 0x2a, 0x38, 0x8f, 0x34, 0xaa, 0xc0, 0x39, 0x3f, 0x88, 0x49, 0xb5, 0x13, 0x91, 0xc5, 0x7a, 0x10, - 0x46, 0xe4, 0x6a, 0x18, 0x53, 0x72, 0xe2, 0x3a, 0xb1, 0x0a, 0xa0, 0x5d, 0xcc, 0x43, 0xc2, 0xf9, - 0x75, 0xd1, 0x02, 0x9c, 0xae, 0xf9, 0xb1, 0xb7, 0xd1, 0x24, 0x95, 0xce, 0x46, 0x2b, 0xe4, 0x47, - 0xf3, 0x61, 0x46, 0xf0, 0x5e, 0x69, 0x47, 0x9a, 0xcb, 0x22, 0xe0, 0xee, 0x3a, 0xe8, 0x29, 0x18, - 0x89, 0xfd, 0xa0, 0xde, 0x24, 0x33, 0x91, 0x17, 0x54, 0x1b, 0xe2, 0x1e, 0xb2, 0xb2, 0xa0, 0x57, - 0xb4, 0x32, 0x6c, 0x60, 0xb2, 0x35, 0xcf, 0xeb, 0x64, 0xb4, 0x41, 0x81, 0x2d, 0x4a, 0xd1, 0x34, - 0x9c, 0x92, 0x7d, 0xa8, 0x6c, 0xf9, 0xed, 0xf5, 0xe5, 0x0a, 0xd3, 0x0a, 0x87, 0xd2, 0xf0, 0xa0, - 0x45, 0xb3, 0x18, 0x67, 0xf1, 0xdd, 0x1f, 0x38, 0x30, 0xa2, 0xc7, 0xdf, 0x53, 0x65, 0x1d, 0x1a, - 0x73, 0xf3, 0x15, 0xbe, 0x9d, 0xd8, 0x53, 0x1a, 0xae, 0x2a, 0x9a, 0xe9, 0x79, 0x3b, 0x85, 0x61, - 0x8d, 0xe7, 0x01, 0xee, 0xf0, 0x3f, 0x04, 0xc5, 0xcd, 0x90, 0xea, 0x34, 0x7d, 0xa6, 0xf5, 0x7e, - 0x9e, 0x02, 0x31, 0x2f, 0x73, 0xff, 0xbb, 0x03, 0xe7, 0xf3, 0xaf, 0x16, 0xfc, 0x34, 0x74, 0xf2, - 0x32, 0x00, 0xed, 0x8a, 0xb1, 0x2f, 0x68, 0x59, 0x3c, 0x64, 0x09, 0xd6, 0xb0, 0x0e, 0xd6, 0xed, - 0x7f, 0x5b, 0x00, 0x8d, 0x27, 0xfa, 0x9c, 0x03, 0xa3, 0x94, 0xed, 0x52, 0xb4, 0x61, 0xf4, 0x76, - 0xd5, 0x4e, 0x6f, 0x15, 0xd9, 0xd4, 0x49, 0x61, 0x80, 0xb1, 0xc9, 0x1c, 0xfd, 0x1c, 0x0c, 0x7b, - 0xb5, 0x5a, 0x44, 0xe2, 0x58, 0xb9, 0xfb, 0x98, 0xc1, 0x6b, 0x5a, 0x02, 0x71, 0x5a, 0x4e, 0xe5, - 0x70, 0xa3, 0xb6, 0x19, 0x53, 0xd1, 0x26, 0x64, 0xbf, 0x92, 0xc3, 0x94, 0x09, 0x85, 0x63, 0x85, - 0x81, 0x9e, 0x85, 0xf3, 0x35, 0x2f, 0xf1, 0xb8, 0x0a, 0x48, 0xa2, 0xb5, 0x28, 0x4c, 0x48, 0x95, - 0xed, 0x1b, 0x3c, 0x3a, 0xe4, 0xa2, 0xa8, 0x7b, 0x7e, 0x2e, 0x17, 0x0b, 0xf7, 0xa8, 0xed, 0xfe, - 0x5a, 0x3f, 0x98, 0x7d, 0x42, 0x35, 0x38, 0xb5, 0x15, 0x6d, 0xcc, 0xb2, 0x28, 0x8c, 0xa3, 0x44, - 0x43, 0xb0, 0x28, 0x85, 0x25, 0x93, 0x02, 0xce, 0x92, 0x14, 0x5c, 0x96, 0xc8, 0x4e, 0xe2, 0x6d, - 0x1c, 0x39, 0x16, 0x62, 0xc9, 0xa4, 0x80, 0xb3, 0x24, 0xd1, 0x7b, 0xa1, 0xb4, 0x15, 0x6d, 0xc8, - 0xdd, 0x23, 0x1b, 0x77, 0xb3, 0x94, 0x16, 0x61, 0x1d, 0x8f, 0x7e, 0x9a, 0xad, 0x68, 0x83, 0x6e, - 0xd8, 0x32, 0x57, 0x86, 0xfa, 0x34, 0x4b, 0x02, 0x8e, 0x15, 0x06, 0x6a, 0x03, 0xda, 0x92, 0xa3, - 0xa7, 0x62, 0x4e, 0xc4, 0x26, 0xf7, 0x68, 0x0f, 0x07, 0x32, 0x47, 0xd2, 0x3b, 0xc4, 0xee, 0x02, - 0x2c, 0x75, 0xd1, 0xc1, 0x39, 0xb4, 0xd1, 0x73, 0x70, 0x61, 0x2b, 0xda, 0x10, 0x7a, 0xcc, 0x5a, - 0xe4, 0x07, 0x55, 0xbf, 0x6d, 0xe4, 0xc5, 0x98, 0x14, 0xcd, 0xbd, 0xb0, 0x94, 0x8f, 0x86, 0x7b, - 0xd5, 0x77, 0x7f, 0xb7, 0x1f, 0xd8, 0x8d, 0x5e, 0x2a, 0xa6, 0x5b, 0x24, 0x69, 0x84, 0xb5, 0xac, - 0x6a, 0xb6, 0xc2, 0xa0, 0x58, 0x94, 0xca, 0x88, 0xd7, 0x42, 0x8f, 0x88, 0xd7, 0x9b, 0x30, 0xd8, - 0x20, 0x5e, 0x8d, 0x44, 0xd2, 0xb8, 0xb9, 0x6c, 0xe7, 0x0e, 0xf2, 0x55, 0x46, 0x34, 0xb5, 0x10, - 0xf0, 0xdf, 0x31, 0x96, 0xdc, 0xd0, 0x2f, 0xc2, 0x18, 0xd5, 0xb1, 0xc2, 0x4e, 0x22, 0xfd, 0x13, - 0xdc, 0xb8, 0xc9, 0x36, 0xfb, 0x75, 0xa3, 0x04, 0x67, 0x30, 0xd1, 0x1c, 0x8c, 0x0b, 0x5f, 0x82, - 0x32, 0x9a, 0x8a, 0x81, 0x55, 0x09, 0x4b, 0x2a, 0x99, 0x72, 0xdc, 0x55, 0x83, 0x45, 0x2c, 0x86, - 0x35, 0xee, 0x20, 0xd6, 0x23, 0x16, 0xc3, 0xda, 0x0e, 0x66, 0x25, 0xe8, 0x65, 0x18, 0xa2, 0x7f, - 0xe7, 0xa3, 0xb0, 0x25, 0xcc, 0x46, 0x6b, 0x76, 0x46, 0x87, 0xf2, 0x10, 0x87, 0x58, 0xa6, 0x7b, - 0xce, 0x08, 0x2e, 0x58, 0xf1, 0xa3, 0x47, 0x29, 0x7d, 0xbb, 0x7c, 0x96, 0x44, 0xfe, 0xe6, 0x0e, - 0xd3, 0x67, 0x86, 0xd2, 0xa3, 0xd4, 0x62, 0x17, 0x06, 0xce, 0xa9, 0xe5, 0x7e, 0xae, 0x00, 0x23, - 0xfa, 0xc5, 0xf0, 0x3b, 0x85, 0x41, 0xc7, 0xe9, 0xa4, 0xe0, 0x07, 0xe7, 0xab, 0x16, 0xba, 0x7d, - 0xa7, 0x09, 0xd1, 0x80, 0x7e, 0xaf, 0x23, 0x14, 0x59, 0x2b, 0xf6, 0x39, 0xd6, 0xe3, 0x4e, 0xd2, - 0xe0, 0x77, 0xf9, 0x58, 0x80, 0x32, 0xe3, 0xe0, 0x7e, 0xaa, 0x0f, 0x86, 0x64, 0x21, 0xfa, 0xa4, - 0x03, 0x90, 0x46, 0x82, 0x09, 0x51, 0xba, 0x66, 0x23, 0x4c, 0x48, 0x0f, 0x62, 0xd3, 0xcc, 0xfc, - 0x0a, 0x8e, 0x35, 0xbe, 0x28, 0x81, 0x81, 0x90, 0x36, 0xee, 0xb2, 0xbd, 0xe4, 0x06, 0xab, 0x94, - 0xf1, 0x65, 0xc6, 0x3d, 0xb5, 0xe8, 0x31, 0x18, 0x16, 0xbc, 0xe8, 0xe1, 0x74, 0x43, 0x06, 0x28, - 0xda, 0xb3, 0x7e, 0xab, 0x98, 0xc7, 0xf4, 0xac, 0xa9, 0x40, 0x38, 0x65, 0xe8, 0x3e, 0x01, 0x63, - 0xe6, 0x62, 0xa0, 0x87, 0x95, 0x8d, 0x9d, 0x84, 0x70, 0x53, 0xc8, 0x08, 0x3f, 0xac, 0xcc, 0x50, - 0x00, 0xe6, 0x70, 0xf7, 0xfb, 0x0e, 0x40, 0x2a, 0x5e, 0x0e, 0xe0, 0x7d, 0x78, 0x48, 0xb7, 0xe3, - 0xf5, 0x3a, 0x11, 0x7e, 0x0c, 0x86, 0xd9, 0x3f, 0x6c, 0xa1, 0xf7, 0xd9, 0x0a, 0x27, 0x48, 0xdb, - 0x29, 0x96, 0x3a, 0xd3, 0x35, 0x9e, 0x95, 0x8c, 0x70, 0xca, 0xd3, 0x0d, 0x61, 0x3c, 0x8b, 0x8d, - 0x3e, 0x04, 0x23, 0xb1, 0xdc, 0x56, 0xd3, 0x0b, 0x7f, 0x07, 0xdc, 0x7e, 0xb9, 0xeb, 0x4f, 0xab, - 0x8e, 0x0d, 0x62, 0xee, 0x2a, 0x0c, 0x58, 0x1d, 0x42, 0xf7, 0x9b, 0x0e, 0x0c, 0x33, 0xef, 0x6b, - 0x3d, 0xf2, 0x5a, 0x69, 0x95, 0xbe, 0x7d, 0x46, 0x3d, 0x86, 0x41, 0x6e, 0x3e, 0x90, 0x71, 0x48, - 0x16, 0xa4, 0x0c, 0xcf, 0x49, 0x98, 0x4a, 0x19, 0x6e, 0xa7, 0x88, 0xb1, 0xe4, 0xe4, 0x7e, 0xba, - 0x00, 0x03, 0x8b, 0x41, 0xbb, 0xf3, 0x57, 0x3e, 0x2f, 0xde, 0x0a, 0xf4, 0x2f, 0x26, 0xa4, 0x65, - 0xa6, 0x6f, 0x1c, 0x99, 0x79, 0x58, 0x4f, 0xdd, 0x58, 0x36, 0x53, 0x37, 0x62, 0xef, 0xa6, 0x0c, - 0xd3, 0x13, 0xe6, 0xeb, 0xf4, 0xd2, 0xe3, 0xe3, 0x30, 0xbc, 0xec, 0x6d, 0x90, 0xe6, 0x12, 0xd9, - 0x61, 0x57, 0x14, 0x79, 0xc8, 0x88, 0x93, 0xda, 0x1c, 0x8c, 0xf0, 0x8e, 0x39, 0x18, 0x63, 0xd8, - 0x6a, 0x31, 0xd0, 0x13, 0x09, 0x49, 0x73, 0x5f, 0x39, 0xe6, 0x89, 0x44, 0xcb, 0x7b, 0xa5, 0x61, - 0xb9, 0x53, 0x50, 0x4a, 0xa9, 0x1c, 0x80, 0xeb, 0x4f, 0x0a, 0x30, 0x6a, 0x58, 0xe1, 0x0d, 0xdf, - 0xa4, 0x73, 0x47, 0xdf, 0xa4, 0xe1, 0x2b, 0x2c, 0xbc, 0xd3, 0xbe, 0xc2, 0xbe, 0x93, 0xf7, 0x15, - 0x9a, 0x1f, 0xa9, 0xff, 0x40, 0x1f, 0xe9, 0x2d, 0x07, 0xfa, 0x97, 0xfd, 0x60, 0xeb, 0x60, 0x82, - 0x26, 0xae, 0x86, 0xed, 0x2e, 0x41, 0x53, 0xa1, 0x40, 0xcc, 0xcb, 0xa4, 0xea, 0xd2, 0xd7, 0x43, - 0x75, 0x49, 0x9d, 0x27, 0xfd, 0xfb, 0x39, 0x4f, 0xdc, 0x4f, 0x3a, 0x30, 0xb2, 0xe2, 0x05, 0xfe, - 0x26, 0x89, 0x13, 0x36, 0x01, 0x93, 0x63, 0xbd, 0xd3, 0x36, 0xd2, 0x23, 0x3b, 0xc4, 0x1b, 0x0e, - 0x9c, 0x5e, 0x21, 0xad, 0xd0, 0x7f, 0xd9, 0x4b, 0xc3, 0x65, 0x69, 0x1f, 0x1b, 0x7e, 0x22, 0xa2, - 0x03, 0x55, 0x1f, 0xaf, 0xfa, 0x09, 0xa6, 0xf0, 0x3b, 0xd8, 0xa2, 0xd9, 0x6d, 0x11, 0x7a, 0x92, - 0xd3, 0xee, 0x59, 0xa6, 0x81, 0xb0, 0xb2, 0x00, 0xa7, 0x38, 0xee, 0xef, 0x39, 0x30, 0xc8, 0x1b, - 0xa1, 0x22, 0x8c, 0x9d, 0x1e, 0xb4, 0x1b, 0x50, 0x64, 0xf5, 0xc4, 0xf4, 0x5f, 0xb0, 0xa0, 0x27, - 0x51, 0x72, 0x7c, 0xb1, 0xb2, 0x7f, 0x31, 0x67, 0xc0, 0xce, 0x37, 0xde, 0xad, 0x69, 0x15, 0x29, - 0x9c, 0x9e, 0x6f, 0x18, 0x14, 0x8b, 0x52, 0xf7, 0xab, 0x7d, 0x30, 0xa4, 0x52, 0xb1, 0xb1, 0x94, - 0x15, 0x41, 0x10, 0x26, 0x1e, 0x8f, 0xd7, 0xe0, 0x42, 0xfd, 0x43, 0xf6, 0x52, 0xc1, 0x4d, 0x4d, - 0xa7, 0xd4, 0xb9, 0x0f, 0x52, 0x9d, 0x56, 0xb5, 0x12, 0xac, 0x37, 0x02, 0xbd, 0x0e, 0x03, 0x4d, - 0x2a, 0xa6, 0xa4, 0x8c, 0x7f, 0xd6, 0x62, 0x73, 0x98, 0xfc, 0x13, 0x2d, 0x51, 0x23, 0xc4, 0x81, - 0x58, 0x70, 0x9d, 0x78, 0x3f, 0x8c, 0x67, 0x5b, 0x7d, 0xa7, 0x6b, 0xa0, 0xc3, 0xfa, 0x25, 0xd2, - 0xbf, 0x21, 0xc4, 0xec, 0xe1, 0xab, 0xba, 0xcf, 0x40, 0x69, 0x85, 0x24, 0x91, 0x5f, 0x65, 0x04, - 0xee, 0x34, 0xb9, 0x0e, 0xa4, 0x68, 0x7c, 0x86, 0x4d, 0x56, 0x4a, 0x33, 0x46, 0xaf, 0x02, 0xb4, - 0xa3, 0x90, 0x1e, 0x74, 0x49, 0x47, 0x7e, 0x6c, 0x0b, 0x8a, 0xf3, 0x9a, 0xa2, 0xc9, 0xdd, 0xe6, - 0xe9, 0x6f, 0xac, 0xf1, 0x73, 0xdf, 0x74, 0xa0, 0xb8, 0xd2, 0x49, 0xc8, 0xad, 0x03, 0x88, 0xb6, - 0x43, 0x27, 0x46, 0x78, 0x1c, 0x86, 0xe8, 0x07, 0xde, 0xf0, 0x62, 0x69, 0x70, 0x4b, 0x03, 0xc9, - 0x05, 0x1c, 0x2b, 0x0c, 0xf7, 0x43, 0x30, 0xc2, 0x5a, 0x72, 0x35, 0x6c, 0xd2, 0xed, 0x9a, 0x8e, - 0x64, 0x8b, 0xfe, 0xce, 0xfa, 0x41, 0x18, 0x12, 0xe6, 0x65, 0x74, 0x85, 0x35, 0xc2, 0x66, 0x4d, - 0x5d, 0x29, 0x53, 0xf3, 0xe7, 0x2a, 0x83, 0x62, 0x51, 0xea, 0x7e, 0xa2, 0x00, 0x25, 0x56, 0x51, - 0x48, 0xa7, 0x1d, 0x18, 0x6c, 0x70, 0x3e, 0x62, 0xc8, 0x2d, 0xc4, 0xad, 0xe9, 0xad, 0xd7, 0xce, - 0x88, 0x1c, 0x80, 0x25, 0x3f, 0xca, 0xfa, 0xa6, 0xe7, 0x27, 0x94, 0x75, 0xe1, 0x78, 0x59, 0xdf, - 0xe0, 0x6c, 0xb0, 0xe4, 0xe7, 0xfe, 0x32, 0xb0, 0xab, 0xda, 0xf3, 0x4d, 0xaf, 0xce, 0x47, 0x2e, - 0xdc, 0x22, 0x35, 0x21, 0xa2, 0xb5, 0x91, 0xa3, 0x50, 0x2c, 0x4a, 0xf9, 0xf5, 0xd7, 0x24, 0xf2, - 0x55, 0x0c, 0xb7, 0x76, 0xfd, 0x95, 0x81, 0x65, 0xc4, 0x7e, 0xcd, 0xfd, 0x62, 0x01, 0x80, 0xe5, - 0xf9, 0xe3, 0x37, 0xac, 0x7f, 0x5e, 0x06, 0x67, 0x99, 0xbe, 0x53, 0x15, 0x9c, 0xc5, 0xee, 0x90, - 0xeb, 0x41, 0x59, 0xfa, 0xd5, 0x8a, 0xc2, 0xfe, 0x57, 0x2b, 0x50, 0x1b, 0x06, 0xc3, 0x4e, 0x42, - 0x75, 0x60, 0xa1, 0x44, 0x58, 0x08, 0x1d, 0x58, 0xe5, 0x04, 0xf9, 0x7d, 0x04, 0xf1, 0x03, 0x4b, - 0x36, 0xe8, 0x29, 0x18, 0x6a, 0x47, 0x61, 0x9d, 0xea, 0x04, 0x62, 0x5f, 0xbe, 0x5f, 0xce, 0xe6, - 0x35, 0x01, 0xbf, 0xad, 0xfd, 0x8f, 0x15, 0xb6, 0xfb, 0xf7, 0x4f, 0xf3, 0x71, 0x11, 0x73, 0x6f, - 0x02, 0x0a, 0xbe, 0xb4, 0x78, 0x81, 0x20, 0x51, 0x58, 0x9c, 0xc3, 0x05, 0xbf, 0xa6, 0x56, 0x61, - 0xa1, 0xe7, 0x2a, 0x7c, 0x2f, 0x94, 0x6a, 0x7e, 0xdc, 0x6e, 0x7a, 0x3b, 0xd7, 0x72, 0xcc, 0x8d, - 0x73, 0x69, 0x11, 0xd6, 0xf1, 0xd0, 0xe3, 0xe2, 0x22, 0x4d, 0xbf, 0x61, 0x62, 0x92, 0x17, 0x69, - 0xd2, 0x1b, 0xfc, 0xfc, 0x0e, 0x4d, 0x36, 0xd3, 0x41, 0xf1, 0xc0, 0x99, 0x0e, 0xb2, 0x1a, 0xde, - 0xc0, 0xc9, 0x6b, 0x78, 0xef, 0x83, 0x51, 0xf9, 0x93, 0x69, 0x5d, 0xe5, 0xb3, 0xac, 0xf5, 0xca, - 0xbc, 0xbe, 0xae, 0x17, 0x62, 0x13, 0x37, 0x9d, 0xb4, 0x83, 0x07, 0x9d, 0xb4, 0x97, 0x01, 0x36, - 0xc2, 0x4e, 0x50, 0xf3, 0xa2, 0x9d, 0xc5, 0x39, 0x11, 0xa4, 0xab, 0x14, 0xca, 0x19, 0x55, 0x82, - 0x35, 0x2c, 0x7d, 0xa2, 0x0f, 0xdf, 0x61, 0xa2, 0x7f, 0x08, 0x86, 0x59, 0x40, 0x33, 0xa9, 0x4d, - 0x27, 0x22, 0xaa, 0xea, 0x30, 0x51, 0xa2, 0x69, 0x9c, 0xa5, 0x24, 0x82, 0x53, 0x7a, 0xe8, 0xc3, - 0x00, 0x9b, 0x7e, 0xe0, 0xc7, 0x0d, 0x46, 0xbd, 0x74, 0x68, 0xea, 0xaa, 0x9f, 0xf3, 0x8a, 0x0a, - 0xd6, 0x28, 0xa2, 0x17, 0xe0, 0x34, 0x89, 0x13, 0xbf, 0xe5, 0x25, 0xa4, 0xa6, 0x6e, 0xa6, 0x96, - 0x99, 0x8d, 0x54, 0x85, 0x94, 0x5f, 0xc9, 0x22, 0xdc, 0xce, 0x03, 0xe2, 0x6e, 0x42, 0xc6, 0x8a, - 0x9c, 0x38, 0xcc, 0x8a, 0x44, 0xff, 0xcb, 0x81, 0xd3, 0x11, 0xe1, 0xa1, 0x36, 0xb1, 0x6a, 0xd8, - 0x39, 0x26, 0x8e, 0xab, 0x36, 0x52, 0xe8, 0xab, 0xac, 0x31, 0x38, 0xcb, 0x85, 0xeb, 0x39, 0x44, - 0xf6, 0xbe, 0xab, 0xfc, 0x76, 0x1e, 0xf0, 0x8d, 0xb7, 0x27, 0x27, 0xbb, 0x9f, 0x72, 0x50, 0xc4, - 0xe9, 0xca, 0xfb, 0xdb, 0x6f, 0x4f, 0x8e, 0xcb, 0xdf, 0xe9, 0xa0, 0x75, 0x75, 0x92, 0x6e, 0xab, - 0xed, 0xb0, 0xb6, 0xb8, 0x26, 0xc2, 0xdf, 0xd4, 0xb6, 0xba, 0x46, 0x81, 0x98, 0x97, 0xa1, 0x47, - 0xe9, 0xce, 0x4d, 0x5a, 0x61, 0xa0, 0x92, 0x21, 0x8f, 0xf0, 0x5d, 0x9b, 0xc3, 0xb0, 0x2a, 0xa5, - 0x47, 0x8e, 0x40, 0x6c, 0x29, 0xe5, 0xfb, 0x6c, 0x1d, 0x39, 0xe4, 0x26, 0xc5, 0xb9, 0xca, 0x5f, - 0x58, 0x71, 0x42, 0x4d, 0x18, 0xf0, 0x99, 0x01, 0x44, 0x44, 0xd8, 0x5a, 0xb0, 0xba, 0x70, 0x83, - 0x8a, 0x8c, 0xaf, 0x65, 0xa2, 0x5f, 0xf0, 0xd0, 0xf7, 0x9a, 0x53, 0x27, 0xb3, 0xd7, 0x3c, 0x0a, - 0x43, 0xd5, 0x86, 0xdf, 0xac, 0x45, 0x24, 0x28, 0x8f, 0x33, 0x4b, 0x00, 0x1b, 0x89, 0x59, 0x01, - 0xc3, 0xaa, 0x14, 0xfd, 0x75, 0x18, 0x0d, 0x3b, 0x09, 0x13, 0x2d, 0x74, 0x9c, 0xe2, 0xf2, 0x69, - 0x86, 0xce, 0xe2, 0xa5, 0x56, 0xf5, 0x02, 0x6c, 0xe2, 0x51, 0x11, 0xdf, 0x08, 0x63, 0x96, 0xe0, - 0x88, 0x89, 0xf8, 0xf3, 0xa6, 0x88, 0xbf, 0xaa, 0x95, 0x61, 0x03, 0x13, 0x7d, 0xd9, 0x81, 0xd3, - 0xad, 0xec, 0x79, 0xaf, 0x7c, 0x81, 0x8d, 0x4c, 0xc5, 0xc6, 0xb9, 0x20, 0x43, 0x9a, 0x47, 0xba, - 0x77, 0x81, 0x71, 0x77, 0x23, 0x58, 0xaa, 0xb1, 0x78, 0x27, 0xa8, 0x36, 0xa2, 0x30, 0x30, 0x9b, - 0x77, 0xaf, 0xad, 0x1b, 0x74, 0x6c, 0x6d, 0xe7, 0xb1, 0x98, 0xb9, 0x77, 0x6f, 0x77, 0xf2, 0x5c, - 0x6e, 0x11, 0xce, 0x6f, 0x14, 0xfa, 0x20, 0x8c, 0x27, 0x5e, 0xbc, 0xc5, 0xf5, 0x25, 0x5a, 0x93, - 0xd4, 0xca, 0xf7, 0xf3, 0x20, 0x87, 0xbd, 0xdd, 0xc9, 0xf1, 0xf5, 0x4c, 0x19, 0xee, 0xc2, 0x9e, - 0x98, 0x83, 0xf3, 0xf9, 0x12, 0xe6, 0x4e, 0x47, 0x9c, 0x3e, 0xfd, 0x88, 0x33, 0x0f, 0xf7, 0xf6, - 0xec, 0x16, 0xdd, 0xab, 0xa4, 0xbe, 0xea, 0x98, 0x7b, 0x55, 0x97, 0x7e, 0x39, 0x06, 0x23, 0xfa, - 0xeb, 0x21, 0xee, 0xff, 0xed, 0x03, 0x48, 0x2d, 0xf8, 0xc8, 0x83, 0x31, 0xee, 0x2d, 0x58, 0x9c, - 0x3b, 0x72, 0xf6, 0x80, 0x59, 0x83, 0x00, 0xce, 0x10, 0x44, 0x2d, 0x40, 0x1c, 0xc2, 0x7f, 0x1f, - 0xc5, 0xeb, 0xcb, 0x9c, 0xa4, 0xb3, 0x5d, 0x44, 0x70, 0x0e, 0x61, 0xda, 0xa3, 0x24, 0xdc, 0x22, - 0xc1, 0x75, 0xbc, 0x7c, 0x94, 0x0c, 0x15, 0xdc, 0x4f, 0x68, 0x10, 0xc0, 0x19, 0x82, 0xc8, 0x85, - 0x01, 0x66, 0x34, 0x92, 0x51, 0xed, 0x4c, 0x40, 0x31, 0x5d, 0x25, 0xc6, 0xa2, 0x04, 0x7d, 0xd1, - 0x81, 0x31, 0x99, 0x68, 0x83, 0xd9, 0x69, 0x65, 0x3c, 0xfb, 0x75, 0x5b, 0x1e, 0x98, 0x2b, 0x3a, - 0xf5, 0x34, 0x5a, 0xd4, 0x00, 0xc7, 0x38, 0xd3, 0x08, 0xf7, 0x39, 0x38, 0x93, 0x53, 0xdd, 0xca, - 0x11, 0xfa, 0xdb, 0x0e, 0x94, 0xb4, 0xfc, 0x93, 0xe8, 0x55, 0x18, 0x0e, 0x2b, 0xd6, 0x43, 0x14, - 0x57, 0x2b, 0x5d, 0x21, 0x8a, 0x0a, 0x84, 0x53, 0x86, 0x07, 0x89, 0xac, 0xcc, 0x4d, 0x96, 0xf9, - 0x0e, 0x37, 0xfb, 0xd0, 0x91, 0x95, 0xbf, 0x56, 0x84, 0x94, 0xd2, 0x21, 0x13, 0xc0, 0xa4, 0x71, - 0x98, 0x85, 0x7d, 0xe3, 0x30, 0x6b, 0x70, 0xca, 0x63, 0x5e, 0xee, 0x23, 0xa6, 0x7d, 0xe1, 0xe9, - 0x87, 0x4d, 0x0a, 0x38, 0x4b, 0x92, 0x72, 0x89, 0xd3, 0xaa, 0x8c, 0x4b, 0xff, 0xa1, 0xb9, 0x54, - 0x4c, 0x0a, 0x38, 0x4b, 0x12, 0xbd, 0x00, 0xe5, 0x2a, 0xbb, 0xa7, 0xcc, 0xfb, 0xb8, 0xb8, 0x79, - 0x2d, 0x4c, 0xd6, 0x22, 0x12, 0x93, 0x20, 0x11, 0x09, 0xde, 0x1e, 0x14, 0xa3, 0x50, 0x9e, 0xed, - 0x81, 0x87, 0x7b, 0x52, 0xa0, 0x07, 0x1d, 0xe6, 0x26, 0xf7, 0x93, 0x1d, 0x26, 0x44, 0x44, 0xfc, - 0x80, 0x3a, 0xe8, 0x54, 0xf4, 0x42, 0x6c, 0xe2, 0xa2, 0x5f, 0x75, 0x60, 0xb4, 0x29, 0x1d, 0x09, - 0xb8, 0xd3, 0x94, 0xd9, 0x52, 0xb1, 0x95, 0xe9, 0xb7, 0xac, 0x53, 0xe6, 0xda, 0x88, 0x01, 0xc2, - 0x26, 0xef, 0x6c, 0x0e, 0x9e, 0xa1, 0x03, 0xe6, 0xe0, 0xf9, 0xbe, 0x03, 0xe3, 0x59, 0x6e, 0x68, - 0x0b, 0x1e, 0x68, 0x79, 0xd1, 0xd6, 0x62, 0xb0, 0x19, 0xb1, 0xdb, 0x2b, 0x09, 0x9f, 0x0c, 0xd3, - 0x9b, 0x09, 0x89, 0xe6, 0xbc, 0x1d, 0xee, 0x98, 0x2d, 0xaa, 0x47, 0xbe, 0x1e, 0x58, 0xd9, 0x0f, - 0x19, 0xef, 0x4f, 0x0b, 0x55, 0xe0, 0x1c, 0x45, 0x60, 0x29, 0xfa, 0xfc, 0x30, 0x48, 0x99, 0x14, - 0x18, 0x13, 0x15, 0x41, 0xb9, 0x92, 0x87, 0x84, 0xf3, 0xeb, 0xba, 0x57, 0x60, 0x80, 0x5f, 0x26, - 0xbc, 0x2b, 0xcf, 0x96, 0xfb, 0x1f, 0x0a, 0x20, 0x55, 0xcb, 0xbf, 0xda, 0x8e, 0x42, 0xba, 0x89, - 0x46, 0x4c, 0x6d, 0x12, 0xf6, 0x12, 0xb6, 0x89, 0x8a, 0x64, 0x98, 0xa2, 0x84, 0xea, 0xdc, 0xe4, - 0x96, 0x9f, 0xcc, 0x86, 0x35, 0x69, 0x25, 0x61, 0x3a, 0xf7, 0x15, 0x01, 0xc3, 0xaa, 0xd4, 0xfd, - 0xa4, 0x03, 0xa3, 0xb4, 0x97, 0xcd, 0x26, 0x69, 0x56, 0x12, 0xd2, 0x8e, 0x51, 0x0c, 0xc5, 0x98, - 0xfe, 0x63, 0xcf, 0x98, 0x98, 0x5e, 0x40, 0x25, 0x6d, 0xcd, 0x8b, 0x44, 0x99, 0x60, 0xce, 0xcb, - 0xfd, 0x56, 0x1f, 0x0c, 0xab, 0xc1, 0x3e, 0x80, 0xfd, 0xf6, 0x72, 0x9a, 0xa7, 0x96, 0x4b, 0xe0, - 0xb2, 0x96, 0xa3, 0xf6, 0x36, 0x1d, 0xba, 0x60, 0x87, 0x67, 0xe4, 0x48, 0x13, 0xd6, 0x3e, 0x6e, - 0x3a, 0xc1, 0xcf, 0xeb, 0xf3, 0x4f, 0xc3, 0x17, 0xde, 0xf0, 0x5b, 0x7a, 0x0c, 0x42, 0xbf, 0xad, - 0xdd, 0x4c, 0x39, 0x58, 0x7b, 0x07, 0x1f, 0x64, 0x1e, 0x6e, 0x2a, 0x1e, 0xe8, 0xe1, 0xa6, 0xc7, - 0xa0, 0x9f, 0x04, 0x9d, 0x16, 0x53, 0x95, 0x86, 0xd9, 0x21, 0xa3, 0xff, 0x4a, 0xd0, 0x69, 0x99, - 0x3d, 0x63, 0x28, 0xe8, 0xfd, 0x50, 0xaa, 0x91, 0xb8, 0x1a, 0xf9, 0x2c, 0xcd, 0x84, 0xb0, 0x0d, - 0xdd, 0xcf, 0x0c, 0x6e, 0x29, 0xd8, 0xac, 0xa8, 0x57, 0x70, 0x5f, 0x06, 0x91, 0xa7, 0x19, 0xb5, - 0x61, 0x80, 0x27, 0x9d, 0x10, 0xbb, 0xbd, 0x85, 0x93, 0x2b, 0x17, 0x15, 0x5a, 0x7c, 0x0c, 0xbf, - 0x87, 0x2c, 0xf8, 0xb8, 0x6f, 0x14, 0x60, 0xcc, 0x4c, 0x21, 0x8d, 0x7e, 0xc1, 0x98, 0x2b, 0xae, - 0x3e, 0x57, 0xf4, 0x87, 0x8a, 0x78, 0x2d, 0x6d, 0x06, 0xbd, 0x0f, 0x46, 0x79, 0x96, 0x2b, 0x69, - 0x31, 0x29, 0x98, 0x1b, 0xce, 0xac, 0x5e, 0x88, 0x4d, 0x5c, 0xb6, 0x17, 0x86, 0x41, 0xc0, 0x63, - 0x42, 0xcd, 0xe0, 0x38, 0xf1, 0x94, 0x58, 0xba, 0x17, 0xf6, 0xc0, 0xc3, 0x3d, 0x29, 0x48, 0x0d, - 0xac, 0xbf, 0x87, 0x06, 0xf6, 0x2f, 0x1d, 0x28, 0xf7, 0xca, 0xa3, 0x7d, 0xe4, 0xe1, 0x38, 0xac, - 0xfa, 0xd4, 0x3d, 0x7e, 0x7d, 0x07, 0x1f, 0x3f, 0xf7, 0x13, 0x05, 0x28, 0xae, 0x85, 0xb5, 0x85, - 0x59, 0xf4, 0xb7, 0xba, 0xde, 0x9b, 0xfa, 0x99, 0x9c, 0xf7, 0xa6, 0x46, 0x19, 0x72, 0xce, 0x53, - 0x53, 0x4d, 0x18, 0x65, 0x5e, 0x35, 0xa9, 0xcb, 0x88, 0xe3, 0xd1, 0x93, 0x07, 0xcc, 0xb7, 0xa1, - 0x57, 0x15, 0x3b, 0xbb, 0x0e, 0xc2, 0x26, 0x71, 0xb4, 0x02, 0x67, 0x78, 0xda, 0xda, 0x39, 0xd2, - 0xf4, 0x76, 0x32, 0xe9, 0xe9, 0xee, 0x93, 0x4f, 0x08, 0xce, 0x75, 0xa3, 0xe0, 0xbc, 0x7a, 0xee, - 0xef, 0xf7, 0x83, 0xe6, 0xcb, 0x3a, 0x80, 0xd4, 0x7b, 0x29, 0xe3, 0xb9, 0x5c, 0xb1, 0xe2, 0xb9, - 0x94, 0xee, 0x40, 0xbe, 0x93, 0x98, 0xce, 0x4a, 0xda, 0xa8, 0x06, 0x69, 0xb6, 0x45, 0x1f, 0x55, - 0xa3, 0xae, 0x92, 0x66, 0x1b, 0xb3, 0x12, 0x75, 0x9b, 0xb6, 0xbf, 0xe7, 0x6d, 0xda, 0x06, 0x14, - 0xeb, 0x5e, 0xa7, 0x4e, 0x44, 0x8c, 0xaf, 0x05, 0x27, 0x35, 0xbb, 0xdf, 0xc3, 0x9d, 0xd4, 0xec, - 0x5f, 0xcc, 0x19, 0x50, 0xa1, 0xdd, 0x90, 0x41, 0x4f, 0xc2, 0x5c, 0x6f, 0x41, 0x68, 0xab, 0x38, - 0x2a, 0x2e, 0xb4, 0xd5, 0x4f, 0x9c, 0x32, 0x43, 0x6d, 0x18, 0xac, 0xf2, 0xac, 0x3f, 0x42, 0xf7, - 0x5c, 0xb4, 0x71, 0x5d, 0x98, 0x11, 0xe4, 0x76, 0x35, 0xf1, 0x03, 0x4b, 0x36, 0xee, 0x25, 0x28, - 0x69, 0xcf, 0xde, 0xd0, 0xcf, 0xa0, 0x12, 0xce, 0x68, 0x9f, 0x61, 0xce, 0x4b, 0x3c, 0xcc, 0x4a, - 0xdc, 0xaf, 0xf7, 0x83, 0xb2, 0xaa, 0xea, 0x97, 0x5b, 0xbd, 0xaa, 0x96, 0x1e, 0xcb, 0x48, 0xf4, - 0x10, 0x06, 0x58, 0x94, 0xd2, 0xe5, 0xde, 0x22, 0x51, 0x5d, 0xd9, 0x43, 0xb2, 0xe2, 0x72, 0x45, - 0x2f, 0xc4, 0x26, 0x2e, 0x3d, 0x5c, 0xb5, 0x44, 0x6c, 0x47, 0x36, 0x74, 0x5f, 0xc6, 0x7c, 0x60, - 0x85, 0xc1, 0xb2, 0x71, 0xb4, 0xb4, 0x50, 0x10, 0x11, 0xea, 0x6b, 0xc3, 0xb5, 0xa8, 0x51, 0xe5, - 0x21, 0x79, 0x3a, 0x04, 0x1b, 0x5c, 0xd1, 0x02, 0x9c, 0x8e, 0x49, 0xb2, 0x7a, 0x33, 0x20, 0x91, - 0xca, 0x83, 0x21, 0xd2, 0xbd, 0xa8, 0xab, 0x3f, 0x95, 0x2c, 0x02, 0xee, 0xae, 0x93, 0x1b, 0x1d, - 0x5d, 0x3c, 0x74, 0x74, 0xf4, 0x1c, 0x8c, 0x6f, 0x7a, 0x7e, 0xb3, 0x13, 0x91, 0x9e, 0x31, 0xd6, - 0xf3, 0x99, 0x72, 0xdc, 0x55, 0x83, 0xdd, 0x3e, 0x6b, 0x7a, 0xf5, 0xb8, 0x3c, 0xa8, 0xdd, 0x3e, - 0xa3, 0x00, 0xcc, 0xe1, 0xee, 0xef, 0x38, 0xc0, 0x33, 0x67, 0x4d, 0x6f, 0x6e, 0xfa, 0x81, 0x9f, - 0xec, 0xa0, 0xaf, 0x38, 0x30, 0x1e, 0x84, 0x35, 0x32, 0x1d, 0x24, 0xbe, 0x04, 0xda, 0x7b, 0xed, - 0x80, 0xf1, 0xba, 0x96, 0x21, 0xcf, 0x4d, 0x86, 0x59, 0x28, 0xee, 0x6a, 0x86, 0x7b, 0x01, 0xce, - 0xe5, 0x12, 0x70, 0xbf, 0xdf, 0x07, 0x66, 0x02, 0x30, 0xf4, 0x0c, 0x14, 0x9b, 0x2c, 0x81, 0x8d, - 0x73, 0xc4, 0xcc, 0x6e, 0x6c, 0xac, 0x78, 0x86, 0x1b, 0x4e, 0x09, 0xcd, 0x41, 0x89, 0x65, 0x15, - 0x13, 0xe9, 0x85, 0x0a, 0xc6, 0x96, 0x5b, 0xc2, 0x69, 0xd1, 0x6d, 0xf3, 0x27, 0xd6, 0xab, 0xa1, - 0x57, 0x60, 0x70, 0x83, 0xa7, 0x5e, 0xb5, 0xe7, 0xfd, 0x15, 0xb9, 0x5c, 0x99, 0x8e, 0x2b, 0x13, - 0xbb, 0xde, 0x4e, 0xff, 0xc5, 0x92, 0x23, 0xda, 0x81, 0x21, 0x4f, 0x7e, 0xd3, 0x7e, 0x5b, 0x57, - 0x81, 0x8c, 0xf9, 0x23, 0x42, 0xad, 0xe4, 0x37, 0x54, 0xec, 0x32, 0xc1, 0x6b, 0xc5, 0x03, 0x05, - 0xaf, 0x7d, 0xd3, 0x01, 0x48, 0xdf, 0xc9, 0x41, 0xb7, 0x60, 0x28, 0x7e, 0xd2, 0x30, 0x38, 0xd9, - 0x48, 0x23, 0x21, 0x28, 0x6a, 0x57, 0xad, 0x05, 0x04, 0x2b, 0x6e, 0x77, 0x32, 0x92, 0xfd, 0xc4, - 0x81, 0xb3, 0x79, 0xef, 0xf9, 0xbc, 0x83, 0x2d, 0x3e, 0xb4, 0x82, 0xc7, 0x2b, 0xac, 0x45, 0x64, - 0xd3, 0xbf, 0x95, 0x93, 0x00, 0x9c, 0x17, 0xe0, 0x14, 0xc7, 0xfd, 0xb3, 0x41, 0x50, 0x8c, 0x8f, - 0xc9, 0x9e, 0xf6, 0x08, 0x3d, 0xfb, 0xd6, 0x53, 0x9d, 0x4b, 0xe1, 0x61, 0x06, 0xc5, 0xa2, 0x94, - 0x9e, 0x7f, 0xe5, 0xb5, 0x0b, 0x21, 0xb2, 0xd9, 0x2c, 0x94, 0xd7, 0x33, 0xb0, 0x2a, 0xcd, 0xb3, - 0xd0, 0x15, 0x4f, 0xc4, 0x42, 0x37, 0x60, 0xdf, 0x42, 0xd7, 0x02, 0x14, 0xf3, 0x85, 0xc2, 0xcc, - 0x62, 0x82, 0xd1, 0xc8, 0xa1, 0x1d, 0x06, 0x95, 0x2e, 0x22, 0x38, 0x87, 0x30, 0x8b, 0xa6, 0x09, - 0x9b, 0x64, 0x1a, 0x5f, 0x13, 0x87, 0xc8, 0x34, 0x9a, 0x86, 0x83, 0xb1, 0x2c, 0x3f, 0xa2, 0x49, - 0x0c, 0x7d, 0xc7, 0xd9, 0xc7, 0xe6, 0x38, 0x6c, 0x6b, 0x0b, 0xca, 0xcd, 0xbe, 0xc8, 0x4e, 0xc4, - 0x47, 0x31, 0x64, 0x7e, 0xd5, 0x81, 0xd3, 0x24, 0xa8, 0x46, 0x3b, 0x8c, 0x8e, 0xa0, 0x26, 0x82, - 0x1d, 0xae, 0xdb, 0x58, 0xeb, 0x57, 0xb2, 0xc4, 0xb9, 0x4f, 0xb1, 0x0b, 0x8c, 0xbb, 0x9b, 0x81, - 0x56, 0x61, 0xa8, 0xea, 0x89, 0x79, 0x51, 0x3a, 0xcc, 0xbc, 0xe0, 0x2e, 0xdb, 0x69, 0x31, 0x1b, - 0x14, 0x11, 0xf7, 0x47, 0x05, 0x38, 0x93, 0xd3, 0x24, 0x76, 0x23, 0xb0, 0x45, 0x17, 0xc0, 0x62, - 0x2d, 0xbb, 0xfc, 0x97, 0x04, 0x1c, 0x2b, 0x0c, 0xb4, 0x06, 0x67, 0xb7, 0x5a, 0x71, 0x4a, 0x65, - 0x36, 0x0c, 0x12, 0x72, 0x4b, 0x0a, 0x03, 0x19, 0x08, 0x71, 0x76, 0x29, 0x07, 0x07, 0xe7, 0xd6, - 0xa4, 0xda, 0x12, 0x09, 0xbc, 0x8d, 0x26, 0x49, 0x8b, 0x44, 0xd8, 0x9e, 0xd2, 0x96, 0xae, 0x64, - 0xca, 0x71, 0x57, 0x0d, 0xf4, 0xa6, 0x03, 0xf7, 0xc5, 0x24, 0xda, 0x26, 0x51, 0xc5, 0xaf, 0x91, - 0xd9, 0x4e, 0x9c, 0x84, 0x2d, 0x12, 0x1d, 0xd1, 0xca, 0x3e, 0xb9, 0xb7, 0x3b, 0x79, 0x5f, 0xa5, - 0x37, 0x35, 0xbc, 0x1f, 0x2b, 0xf7, 0x4d, 0x07, 0xc6, 0x2a, 0xcc, 0x06, 0xa3, 0x54, 0x77, 0xdb, - 0xf9, 0x77, 0x1f, 0x51, 0xc9, 0x61, 0x32, 0x42, 0xd8, 0x4c, 0xe7, 0xe2, 0xbe, 0x08, 0xe3, 0x15, - 0xd2, 0xf2, 0xda, 0x0d, 0x76, 0x4f, 0x9e, 0x07, 0x02, 0x5e, 0x82, 0xe1, 0x58, 0xc2, 0xb2, 0x2f, - 0x72, 0x29, 0x64, 0x9c, 0xe2, 0xa0, 0x87, 0x79, 0xd0, 0xa2, 0xbc, 0xd2, 0x36, 0xcc, 0x0f, 0x39, - 0x3c, 0xd2, 0x31, 0xc6, 0xb2, 0xcc, 0xfd, 0x66, 0x01, 0x46, 0xd2, 0xfa, 0x64, 0x13, 0xd5, 0xe1, - 0x54, 0x55, 0xbb, 0x0e, 0x9a, 0x5e, 0xc4, 0x39, 0xf8, 0xcd, 0x51, 0x9e, 0x16, 0xdc, 0x24, 0x82, - 0xb3, 0x54, 0x0f, 0x1f, 0x21, 0xfa, 0x4a, 0x26, 0x42, 0xd4, 0xca, 0x53, 0x1f, 0x95, 0x9d, 0xa0, - 0xaa, 0xe2, 0x4b, 0xc9, 0xa6, 0x0c, 0x5d, 0xe9, 0x0a, 0x38, 0xfd, 0x7c, 0x01, 0x4e, 0xa9, 0x71, - 0x12, 0xce, 0xee, 0xd7, 0xb2, 0x71, 0xa1, 0xd8, 0x46, 0x8e, 0x2d, 0xf3, 0xc3, 0xef, 0x13, 0x1b, - 0xfa, 0x5a, 0x36, 0x36, 0xf4, 0x58, 0xd9, 0x77, 0xf9, 0xef, 0xbf, 0x59, 0x80, 0x21, 0x95, 0xf1, - 0xeb, 0x19, 0x28, 0xb2, 0x63, 0xf3, 0xdd, 0x29, 0xff, 0xec, 0x08, 0x8e, 0x39, 0x25, 0x4a, 0x92, - 0xc5, 0x9e, 0x1d, 0x39, 0x53, 0xf4, 0x30, 0x37, 0x82, 0x7b, 0x51, 0x82, 0x39, 0x25, 0xb4, 0x04, - 0x7d, 0x24, 0xa8, 0x89, 0xc9, 0x73, 0x78, 0x82, 0xec, 0xe1, 0xc0, 0x2b, 0x41, 0x0d, 0x53, 0x2a, - 0x2c, 0xed, 0x20, 0x57, 0xf6, 0x32, 0x17, 0x2f, 0x84, 0xa6, 0x27, 0x4a, 0xdd, 0x19, 0x30, 0x52, - 0x52, 0x1e, 0xe9, 0xe2, 0xcf, 0xaf, 0xf6, 0xc1, 0x40, 0xa5, 0xb3, 0x41, 0xcf, 0x44, 0xdf, 0x70, - 0xe0, 0xcc, 0xcd, 0x4c, 0x2a, 0xf6, 0x74, 0x91, 0x5e, 0xb7, 0xe7, 0x4c, 0xd0, 0x63, 0x28, 0x95, - 0xe9, 0x2d, 0xa7, 0x10, 0xe7, 0x35, 0xc7, 0xc8, 0x86, 0xdc, 0x77, 0x2c, 0xd9, 0x90, 0x6f, 0x1d, - 0xf3, 0xe5, 0xa4, 0xd1, 0x5e, 0x17, 0x93, 0xdc, 0xdf, 0x2f, 0x02, 0xf0, 0xaf, 0xb1, 0xda, 0x4e, - 0x0e, 0x62, 0x56, 0x7c, 0x0a, 0x46, 0xea, 0x24, 0x20, 0x91, 0x8c, 0x90, 0xcd, 0xbc, 0x22, 0xb6, - 0xa0, 0x95, 0x61, 0x03, 0x93, 0x4d, 0x96, 0x20, 0x89, 0x76, 0xb8, 0x9e, 0x9f, 0xbd, 0x80, 0xa4, - 0x4a, 0xb0, 0x86, 0x85, 0xa6, 0x0c, 0xef, 0x1d, 0x0f, 0x04, 0x19, 0xdb, 0xc7, 0xd9, 0xf6, 0x7e, - 0x18, 0x33, 0x13, 0x0d, 0x09, 0x6d, 0x53, 0x05, 0x6e, 0x98, 0xf9, 0x89, 0x70, 0x06, 0x9b, 0x2e, - 0x84, 0x5a, 0xb4, 0x83, 0x3b, 0x81, 0x50, 0x3b, 0xd5, 0x42, 0x98, 0x63, 0x50, 0x2c, 0x4a, 0x59, - 0x86, 0x16, 0xb6, 0x01, 0x73, 0xb8, 0xc8, 0xf2, 0x92, 0x66, 0x68, 0xd1, 0xca, 0xb0, 0x81, 0x49, - 0x39, 0x08, 0xb3, 0x2c, 0x98, 0x4b, 0x2d, 0x63, 0x4b, 0x6d, 0xc3, 0x58, 0x68, 0x9a, 0x93, 0xb8, - 0x0e, 0xf6, 0x9e, 0x03, 0x4e, 0x3d, 0xa3, 0x2e, 0x0f, 0xb8, 0xc9, 0x58, 0x9f, 0x32, 0xf4, 0xa9, - 0xde, 0xad, 0x5f, 0xbf, 0x19, 0x31, 0x03, 0xac, 0x7b, 0xde, 0x90, 0x59, 0x83, 0xb3, 0xed, 0xb0, - 0xb6, 0x16, 0xf9, 0x61, 0xe4, 0x27, 0x3b, 0xb3, 0x4d, 0x2f, 0x8e, 0xd9, 0xc4, 0x18, 0x35, 0xf5, - 0xb1, 0xb5, 0x1c, 0x1c, 0x9c, 0x5b, 0x93, 0x1e, 0xc8, 0xda, 0x02, 0xc8, 0xc2, 0x1c, 0x8b, 0x7c, - 0x27, 0x93, 0x88, 0x58, 0x95, 0xba, 0x67, 0xe0, 0x74, 0xa5, 0xd3, 0x6e, 0x37, 0x7d, 0x52, 0x53, - 0xde, 0x31, 0xf7, 0x03, 0x70, 0x4a, 0x64, 0x56, 0x56, 0xda, 0xcf, 0xa1, 0x32, 0xfb, 0xbb, 0x3f, - 0x0f, 0xa7, 0x32, 0x5b, 0xe9, 0x1d, 0x22, 0x77, 0xdc, 0x5f, 0x29, 0xf0, 0x2a, 0x5a, 0x10, 0x19, - 0x7a, 0x1d, 0x40, 0x69, 0x30, 0x32, 0x3f, 0xc3, 0x35, 0x8b, 0xbb, 0x1a, 0x95, 0x65, 0x6c, 0x29, - 0x28, 0x48, 0x8c, 0x35, 0x8e, 0x28, 0x80, 0x41, 0x76, 0x55, 0x84, 0xc8, 0x1b, 0xba, 0x0b, 0x96, - 0xae, 0x5b, 0x70, 0xed, 0x6b, 0x85, 0xd3, 0xc6, 0x92, 0x89, 0xfb, 0x99, 0x02, 0xe4, 0x07, 0x01, - 0xa2, 0xd7, 0xb3, 0xfa, 0x9e, 0x1d, 0x6d, 0xc7, 0xd4, 0x60, 0x44, 0xf6, 0xe3, 0x3c, 0xf5, 0x31, - 0x90, 0x17, 0x6a, 0x0a, 0xb6, 0x62, 0xf2, 0xb5, 0x1b, 0x35, 0x7c, 0x6b, 0xd6, 0xef, 0xe6, 0xb8, - 0xff, 0xd3, 0x81, 0xd2, 0xfa, 0xfa, 0xb2, 0xda, 0x25, 0x31, 0x9c, 0x8f, 0xb9, 0xb7, 0x8e, 0x45, - 0x3a, 0xcc, 0x86, 0xad, 0x36, 0x0f, 0x7c, 0x10, 0x01, 0x19, 0x2c, 0x3f, 0x76, 0x25, 0x17, 0x03, - 0xf7, 0xa8, 0x89, 0x16, 0xe1, 0x8c, 0x5e, 0x52, 0xd1, 0xde, 0x1f, 0x2d, 0x8a, 0x5c, 0x58, 0xdd, - 0xc5, 0x38, 0xaf, 0x4e, 0x96, 0x94, 0x30, 0x0c, 0x0b, 0xd7, 0x64, 0x17, 0x29, 0x51, 0x8c, 0xf3, - 0xea, 0xb8, 0xab, 0x50, 0x5a, 0xf7, 0x22, 0xd5, 0xf1, 0x0f, 0xc2, 0x78, 0x35, 0x6c, 0xc9, 0x9d, - 0x7f, 0x99, 0x6c, 0x93, 0xa6, 0xe8, 0x32, 0x7f, 0xd5, 0x27, 0x53, 0x86, 0xbb, 0xb0, 0xdd, 0xdf, - 0x7e, 0x10, 0xd4, 0x65, 0xde, 0x03, 0x6c, 0x4e, 0x6d, 0x15, 0x1e, 0x5d, 0xb4, 0x1c, 0x1e, 0xad, - 0xc4, 0x74, 0x26, 0x44, 0x3a, 0x49, 0x43, 0xa4, 0x07, 0x6c, 0x87, 0x48, 0x2b, 0x7d, 0xb5, 0x2b, - 0x4c, 0xfa, 0x4b, 0x0e, 0x8c, 0x04, 0x61, 0x8d, 0x28, 0x4f, 0xe6, 0x20, 0x5b, 0xe1, 0x2f, 0xd8, - 0xbb, 0x6d, 0xc2, 0xc3, 0x7d, 0x05, 0x79, 0x1e, 0xba, 0xaf, 0x76, 0x37, 0xbd, 0x08, 0x1b, 0xed, - 0x40, 0xf3, 0x9a, 0x89, 0x98, 0x7b, 0x62, 0xee, 0xcf, 0x3b, 0x6a, 0xdd, 0xd1, 0xde, 0x7b, 0x4b, - 0x53, 0xb9, 0x86, 0x6d, 0x99, 0x3e, 0xe5, 0xc5, 0x4b, 0xcd, 0xa1, 0x24, 0x53, 0xbc, 0xa7, 0xaa, - 0x98, 0x0b, 0x03, 0x3c, 0xc6, 0x5f, 0x64, 0x5d, 0x63, 0x7e, 0x4e, 0x1e, 0xff, 0x8f, 0x45, 0x09, - 0x4a, 0x64, 0xd4, 0x4b, 0xc9, 0xd6, 0x13, 0x2c, 0x46, 0x54, 0x4d, 0x7e, 0xd8, 0x0b, 0x7a, 0x5a, - 0x3f, 0xc2, 0x8f, 0x1c, 0xe4, 0x08, 0x3f, 0xda, 0xf3, 0xf8, 0xfe, 0x39, 0x07, 0x46, 0xaa, 0xda, - 0x93, 0x28, 0xe5, 0x47, 0x6d, 0xbd, 0x4c, 0x9f, 0xf7, 0x72, 0x0d, 0x77, 0x9f, 0x19, 0x4f, 0xb0, - 0x18, 0xdc, 0x59, 0xaa, 0x59, 0x66, 0xaf, 0x60, 0x5a, 0x83, 0x95, 0x14, 0x2e, 0xa6, 0xfd, 0x43, - 0x46, 0x0f, 0x53, 0x18, 0x16, 0xbc, 0xd0, 0xab, 0x30, 0x24, 0xaf, 0x89, 0x88, 0xeb, 0x14, 0xd8, - 0x86, 0x3f, 0xc3, 0x74, 0x9a, 0xca, 0xfc, 0x94, 0x1c, 0x8a, 0x15, 0x47, 0xd4, 0x80, 0xbe, 0x9a, - 0x57, 0x17, 0x17, 0x2b, 0x56, 0xec, 0xe4, 0xff, 0x95, 0x3c, 0xd9, 0xe9, 0x6e, 0x6e, 0x7a, 0x01, - 0x53, 0x16, 0xe8, 0x56, 0xfa, 0x02, 0xc5, 0xb8, 0xb5, 0xdd, 0xd7, 0xd4, 0xb0, 0xb8, 0x4e, 0xd0, - 0xf5, 0xa0, 0x45, 0x4d, 0xf8, 0x99, 0xff, 0x1a, 0x63, 0x3b, 0x6f, 0x27, 0x81, 0x30, 0x4f, 0x09, - 0x94, 0xfa, 0xaa, 0x29, 0x97, 0x46, 0x92, 0xb4, 0xcb, 0x3f, 0x6b, 0x8b, 0x0b, 0x4b, 0x6c, 0xc3, - 0xb8, 0xd0, 0xff, 0x30, 0xa3, 0x8e, 0x9a, 0xea, 0x81, 0xfb, 0x9f, 0xb3, 0xb5, 0xb7, 0xf0, 0xc0, - 0x9a, 0xbc, 0xe7, 0xec, 0xd1, 0x15, 0x18, 0xe4, 0x4f, 0x23, 0xf1, 0x8b, 0x2d, 0xa5, 0xcb, 0x13, - 0xbd, 0x1f, 0x58, 0x4a, 0x37, 0x0a, 0xfe, 0x3b, 0xc6, 0xb2, 0x2e, 0xfa, 0xbc, 0x03, 0x63, 0x54, - 0xa2, 0xa6, 0x6f, 0x39, 0x95, 0x91, 0x2d, 0x99, 0x75, 0x3d, 0xa6, 0x1a, 0x89, 0x94, 0x35, 0xea, - 0x84, 0xb5, 0x68, 0xb0, 0xc3, 0x19, 0xf6, 0xe8, 0x35, 0x18, 0x8a, 0xfd, 0x1a, 0xa9, 0x7a, 0x51, - 0x5c, 0x3e, 0x73, 0x3c, 0x4d, 0x49, 0x3d, 0x5b, 0x82, 0x11, 0x56, 0x2c, 0xd1, 0x6f, 0xb0, 0xb7, - 0x76, 0xab, 0x0d, 0x7f, 0x9b, 0x2c, 0x87, 0x55, 0x7e, 0x22, 0x38, 0x6b, 0x6b, 0xed, 0x4b, 0x1f, - 0x9e, 0xa4, 0x2c, 0x1c, 0x3e, 0x26, 0x3b, 0x9c, 0xe5, 0x8f, 0x7e, 0xc5, 0x81, 0x73, 0xfc, 0x89, - 0x8c, 0xec, 0xab, 0x2f, 0xe7, 0x8e, 0x68, 0xdd, 0x61, 0x37, 0x72, 0xa6, 0xf3, 0x48, 0xe2, 0x7c, - 0x4e, 0x2c, 0xa1, 0xb5, 0xf9, 0xf4, 0xd6, 0x79, 0xab, 0x1e, 0xde, 0x83, 0x3f, 0xb7, 0x85, 0x9e, - 0x80, 0x52, 0x5b, 0x6c, 0x87, 0x7e, 0xdc, 0x62, 0xf7, 0xab, 0xfa, 0xf8, 0xcd, 0xd7, 0xb5, 0x14, - 0x8c, 0x75, 0x1c, 0x23, 0xbb, 0xf9, 0x63, 0xfb, 0x65, 0x37, 0x47, 0xd7, 0xa1, 0x94, 0x84, 0x4d, - 0x91, 0xe0, 0x37, 0x2e, 0x97, 0xd9, 0x0c, 0xbc, 0x98, 0xb7, 0xb6, 0xd6, 0x15, 0x5a, 0x7a, 0x08, - 0x4e, 0x61, 0x31, 0xd6, 0xe9, 0xb0, 0x88, 0x74, 0xf1, 0xf4, 0x48, 0xc4, 0x4e, 0xbf, 0xf7, 0x66, - 0x22, 0xd2, 0xf5, 0x42, 0x6c, 0xe2, 0xa2, 0x05, 0x38, 0xdd, 0xee, 0x3a, 0x3e, 0xf3, 0x7b, 0x9d, - 0x2a, 0x78, 0xa4, 0xfb, 0xec, 0xdc, 0x5d, 0xa7, 0x47, 0x06, 0xef, 0xfb, 0x8f, 0x92, 0xc1, 0x1b, - 0xd5, 0xe0, 0x7e, 0xaf, 0x93, 0x84, 0x2c, 0x25, 0x93, 0x59, 0x85, 0x87, 0xdc, 0x3f, 0xc8, 0xa3, - 0xf8, 0xf7, 0x76, 0x27, 0xef, 0x9f, 0xde, 0x07, 0x0f, 0xef, 0x4b, 0x05, 0xbd, 0x0c, 0x43, 0x44, - 0x64, 0x21, 0x2f, 0xff, 0x8c, 0xad, 0xad, 0xdf, 0xcc, 0x6b, 0x2e, 0xa3, 0x99, 0x39, 0x0c, 0x2b, - 0x7e, 0x68, 0x1d, 0x4a, 0x8d, 0x30, 0x4e, 0xa6, 0x9b, 0xbe, 0x17, 0x93, 0xb8, 0xfc, 0x00, 0x9b, - 0x0a, 0xb9, 0x1a, 0xd5, 0x55, 0x89, 0x96, 0xce, 0x84, 0xab, 0x69, 0x4d, 0xac, 0x93, 0x41, 0x84, - 0x79, 0x6f, 0xd9, 0x7d, 0x03, 0xe9, 0x99, 0xba, 0xc8, 0x3a, 0xf6, 0x48, 0x1e, 0xe5, 0xb5, 0xb0, - 0x56, 0x31, 0xb1, 0x95, 0xfb, 0x56, 0x07, 0xe2, 0x2c, 0x4d, 0xf4, 0x14, 0x8c, 0xb4, 0xc3, 0x5a, - 0xa5, 0x4d, 0xaa, 0x6b, 0x5e, 0x52, 0x6d, 0x94, 0x27, 0x4d, 0x33, 0xdc, 0x9a, 0x56, 0x86, 0x0d, - 0x4c, 0xd4, 0x86, 0xc1, 0x16, 0x4f, 0xc1, 0x51, 0x7e, 0xc8, 0xd6, 0x89, 0x45, 0xe4, 0xf4, 0x10, - 0x96, 0x01, 0xfe, 0x03, 0x4b, 0x36, 0xe8, 0x1f, 0x3a, 0x70, 0x2a, 0x73, 0x0f, 0xb0, 0xfc, 0x2e, - 0x9b, 0x4e, 0x0f, 0x8d, 0xf0, 0xcc, 0x23, 0x6c, 0xf8, 0x4c, 0xe0, 0xed, 0x6e, 0x10, 0xce, 0xb6, - 0x88, 0x8f, 0x0b, 0xcb, 0xa3, 0x53, 0x7e, 0xd8, 0xde, 0xb8, 0x30, 0x82, 0x72, 0x5c, 0xd8, 0x0f, - 0x2c, 0xd9, 0xa0, 0xc7, 0x60, 0x50, 0xe4, 0xc6, 0x2c, 0x3f, 0x62, 0xfa, 0xc4, 0x45, 0x8c, 0x2f, - 0x96, 0xe5, 0x5d, 0xb9, 0x71, 0x1e, 0xb7, 0x95, 0x1b, 0x47, 0x9d, 0xf7, 0x0e, 0x9f, 0x1b, 0x67, - 0xe2, 0x03, 0x70, 0xba, 0xeb, 0x94, 0x78, 0xa8, 0xe4, 0x34, 0x77, 0x99, 0xdc, 0xc6, 0xfd, 0x2d, - 0x07, 0xf4, 0x6c, 0x08, 0xd6, 0xdf, 0x33, 0x7a, 0x0a, 0x46, 0xaa, 0xfc, 0xc1, 0x58, 0x9e, 0x4f, - 0xa1, 0xdf, 0xb4, 0xf2, 0xce, 0x6a, 0x65, 0xd8, 0xc0, 0x74, 0xaf, 0x02, 0xea, 0x7e, 0x6c, 0xe2, - 0x48, 0xee, 0x92, 0x7f, 0xec, 0xc0, 0xa8, 0xa1, 0xde, 0x58, 0x77, 0xe5, 0xce, 0x03, 0x6a, 0xf9, - 0x51, 0x14, 0x46, 0xfa, 0xcb, 0x9c, 0x22, 0xe7, 0x09, 0x0b, 0xf1, 0x58, 0xe9, 0x2a, 0xc5, 0x39, - 0x35, 0xdc, 0x7f, 0xd6, 0x0f, 0xe9, 0x1d, 0x05, 0x95, 0x8a, 0xdb, 0xe9, 0x99, 0x8a, 0xfb, 0x71, - 0x18, 0x7a, 0x31, 0x0e, 0x83, 0xb5, 0x34, 0x61, 0xb7, 0xfa, 0x16, 0x4f, 0x57, 0x56, 0xaf, 0x31, - 0x4c, 0x85, 0xc1, 0xb0, 0x5f, 0x9a, 0xf7, 0x9b, 0x49, 0x77, 0x46, 0xe7, 0xa7, 0x9f, 0xe1, 0x70, - 0xac, 0x30, 0xd8, 0x23, 0x9d, 0xdb, 0x44, 0x99, 0xff, 0xd3, 0x47, 0x3a, 0xf9, 0x3b, 0x32, 0xac, - 0x0c, 0x5d, 0x82, 0x61, 0xe5, 0x3a, 0x10, 0xfe, 0x08, 0x35, 0x52, 0xca, 0xbf, 0x80, 0x53, 0x1c, - 0xa6, 0xbb, 0x0a, 0x73, 0xb3, 0xb0, 0xf6, 0x54, 0x6c, 0x9c, 0xa4, 0x32, 0x06, 0x6c, 0xbe, 0x61, - 0x49, 0x30, 0x56, 0x2c, 0xf3, 0xdc, 0xd9, 0xc3, 0xc7, 0xe2, 0xce, 0xd6, 0x2e, 0xcc, 0x14, 0x0f, - 0x7a, 0x61, 0xc6, 0x9c, 0xdb, 0x43, 0x07, 0x9a, 0xdb, 0x9f, 0xea, 0x83, 0xc1, 0x67, 0x49, 0xc4, - 0xde, 0x42, 0x78, 0x0c, 0x06, 0xb7, 0xf9, 0xbf, 0xd9, 0xdb, 0xd6, 0x02, 0x03, 0xcb, 0x72, 0xfa, - 0xdd, 0x36, 0x3a, 0x7e, 0xb3, 0x36, 0x97, 0xae, 0xe2, 0x34, 0x57, 0xa9, 0x2c, 0xc0, 0x29, 0x0e, - 0xad, 0x50, 0xa7, 0x87, 0x90, 0x56, 0xcb, 0x4f, 0xb2, 0xd1, 0x69, 0x0b, 0xb2, 0x00, 0xa7, 0x38, - 0xe8, 0x11, 0x18, 0xa8, 0xfb, 0xc9, 0xba, 0x57, 0xcf, 0xfa, 0x43, 0x17, 0x18, 0x14, 0x8b, 0x52, - 0xe6, 0x0c, 0xf3, 0x93, 0xf5, 0x88, 0x30, 0x23, 0x74, 0x57, 0xba, 0x98, 0x05, 0xad, 0x0c, 0x1b, - 0x98, 0xac, 0x49, 0xa1, 0xe8, 0x99, 0x08, 0xcd, 0x4d, 0x9b, 0x24, 0x0b, 0x70, 0x8a, 0x43, 0xe7, - 0x7f, 0x35, 0x6c, 0xb5, 0xfd, 0xa6, 0x08, 0x1a, 0xd7, 0xe6, 0xff, 0xac, 0x80, 0x63, 0x85, 0x41, - 0xb1, 0xa9, 0x08, 0xa3, 0xe2, 0x27, 0xfb, 0x7c, 0xe2, 0x9a, 0x80, 0x63, 0x85, 0xe1, 0x3e, 0x0b, - 0xa3, 0x7c, 0x25, 0xcf, 0x36, 0x3d, 0xbf, 0xb5, 0x30, 0x8b, 0xae, 0x74, 0x5d, 0xb4, 0x78, 0x2c, - 0xe7, 0xa2, 0xc5, 0x39, 0xa3, 0x52, 0xf7, 0x85, 0x0b, 0xf7, 0x07, 0x05, 0x18, 0x3a, 0xc1, 0x37, - 0x65, 0x4f, 0xfc, 0x79, 0x74, 0x74, 0x2b, 0xf3, 0x9e, 0xec, 0x9a, 0xcd, 0xfb, 0x6f, 0xfb, 0xbe, - 0x25, 0xfb, 0x5f, 0x0b, 0x70, 0x5e, 0xa2, 0xca, 0x63, 0xe7, 0xc2, 0x2c, 0x7b, 0xd5, 0xef, 0xf8, - 0x07, 0x3a, 0x32, 0x06, 0x7a, 0xcd, 0xde, 0xc1, 0x79, 0x61, 0xb6, 0xe7, 0x50, 0xbf, 0x9c, 0x19, - 0x6a, 0x6c, 0x95, 0xeb, 0xfe, 0x83, 0xfd, 0x17, 0x0e, 0x4c, 0xe4, 0x0f, 0xf6, 0x09, 0x3c, 0xe1, - 0xfb, 0x9a, 0xf9, 0x84, 0xef, 0x2f, 0xd9, 0x9b, 0x62, 0x66, 0x57, 0x7a, 0x3c, 0xe6, 0xfb, 0x3f, - 0x1c, 0x38, 0x2b, 0x2b, 0xb0, 0xdd, 0x73, 0xc6, 0x0f, 0x58, 0xc8, 0xce, 0xf1, 0x4f, 0xb3, 0x57, - 0x8d, 0x69, 0xf6, 0xbc, 0xbd, 0x8e, 0xeb, 0xfd, 0xe8, 0x35, 0xe1, 0xdc, 0x3f, 0x77, 0xa0, 0x9c, - 0x57, 0xe1, 0x04, 0x3e, 0xf9, 0x2b, 0xe6, 0x27, 0x7f, 0xf6, 0x78, 0x7a, 0xde, 0xfb, 0x83, 0x97, - 0x7b, 0x0d, 0x14, 0x6a, 0x4a, 0xbd, 0xca, 0xb1, 0x75, 0x3b, 0x8b, 0xb3, 0xc8, 0x57, 0xd0, 0x9a, - 0x30, 0x10, 0xb3, 0xd8, 0x14, 0x31, 0x05, 0xae, 0xda, 0xd0, 0xb6, 0x28, 0x3d, 0xe1, 0x0e, 0x60, - 0xff, 0x63, 0xc1, 0xc3, 0xfd, 0x9d, 0x02, 0x5c, 0x50, 0x4f, 0x73, 0x93, 0x6d, 0xd2, 0x4c, 0xd7, - 0x07, 0x7b, 0xf6, 0xc5, 0x53, 0x3f, 0xed, 0x3d, 0xfb, 0x92, 0xb2, 0x48, 0xd7, 0x42, 0x0a, 0xc3, - 0x1a, 0x4f, 0x54, 0x81, 0x73, 0xec, 0x99, 0x96, 0x79, 0x3f, 0xf0, 0x9a, 0xfe, 0xcb, 0x24, 0xc2, - 0xa4, 0x15, 0x6e, 0x7b, 0x4d, 0xa1, 0xa9, 0xab, 0x0b, 0xf7, 0xf3, 0x79, 0x48, 0x38, 0xbf, 0x6e, - 0x97, 0x19, 0xa1, 0xef, 0xa0, 0x66, 0x04, 0xf7, 0x4f, 0x1c, 0x18, 0x39, 0xc1, 0x87, 0xcc, 0x43, - 0x73, 0x49, 0x3c, 0x6d, 0x6f, 0x49, 0xf4, 0x58, 0x06, 0xbb, 0x45, 0xe8, 0x7a, 0x09, 0x1a, 0x7d, - 0xda, 0x51, 0xd1, 0x3b, 0x3c, 0x4a, 0xf2, 0xc3, 0xf6, 0xda, 0x71, 0x98, 0xb4, 0xb0, 0xe8, 0xab, - 0x19, 0x7b, 0x40, 0xc1, 0x56, 0x06, 0xb7, 0xae, 0xd6, 0x1c, 0x21, 0x67, 0xee, 0x97, 0x1c, 0x00, - 0xde, 0x4e, 0x91, 0x93, 0x9f, 0xb6, 0x6d, 0xe3, 0xd8, 0x46, 0x8a, 0x32, 0xe1, 0x4d, 0x53, 0x4b, - 0x28, 0x2d, 0xc0, 0x5a, 0x4b, 0xee, 0x22, 0x19, 0xee, 0x5d, 0xe7, 0xe1, 0xfd, 0xbc, 0x03, 0xa7, - 0x32, 0xcd, 0xcd, 0xa9, 0xbf, 0x69, 0x3e, 0x5c, 0x6a, 0x41, 0xb3, 0x32, 0x33, 0xb5, 0xeb, 0xc6, - 0x93, 0x7f, 0xe1, 0x82, 0xf1, 0x28, 0x3e, 0x7a, 0x05, 0x86, 0xa5, 0xe5, 0x43, 0x4e, 0x6f, 0x9b, - 0x0f, 0x38, 0xab, 0xe3, 0x8d, 0x84, 0xc4, 0x38, 0xe5, 0x97, 0x09, 0x0e, 0x2c, 0x1c, 0x28, 0x38, - 0xf0, 0x9d, 0x7d, 0xfe, 0x39, 0xdf, 0xd8, 0xde, 0x7f, 0x2c, 0xc6, 0xf6, 0xfb, 0xad, 0x1b, 0xdb, - 0x1f, 0x38, 0x61, 0x63, 0xbb, 0xe6, 0xcf, 0x2c, 0xde, 0x85, 0x3f, 0xf3, 0x15, 0x38, 0xbb, 0x9d, - 0x1e, 0x3a, 0xd5, 0x4c, 0x12, 0x59, 0xbf, 0x1e, 0xcb, 0x35, 0xb1, 0xd3, 0x03, 0x74, 0x9c, 0x90, - 0x20, 0xd1, 0x8e, 0xab, 0x69, 0x5c, 0xe2, 0xb3, 0x39, 0xe4, 0x70, 0x2e, 0x93, 0xac, 0x63, 0x6a, - 0xf0, 0x00, 0x8e, 0xa9, 0x6f, 0x39, 0x70, 0xce, 0xeb, 0xba, 0xd9, 0x87, 0xc9, 0xa6, 0x88, 0x8e, - 0xb9, 0x61, 0x4f, 0x85, 0x30, 0xc8, 0x0b, 0x0f, 0x60, 0x5e, 0x11, 0xce, 0x6f, 0x10, 0x7a, 0x38, - 0x8d, 0x12, 0xe0, 0xd1, 0xac, 0xf9, 0x2e, 0xfd, 0xaf, 0x66, 0x43, 0x8f, 0x80, 0x0d, 0xfd, 0x47, - 0xed, 0x9e, 0xb6, 0x2d, 0x84, 0x1f, 0x95, 0xee, 0x22, 0xfc, 0x28, 0xe3, 0x25, 0x1c, 0xb1, 0xe4, - 0x25, 0x0c, 0x60, 0xdc, 0x6f, 0x79, 0x75, 0xb2, 0xd6, 0x69, 0x36, 0xf9, 0x55, 0x1d, 0xf9, 0xc4, - 0x76, 0xae, 0x05, 0x6f, 0x39, 0xac, 0x7a, 0x4d, 0x91, 0xd4, 0x44, 0x45, 0xf2, 0xaa, 0x2b, 0x49, - 0x8b, 0x19, 0x4a, 0xb8, 0x8b, 0x36, 0x9d, 0xb0, 0x2c, 0x81, 0x25, 0x49, 0xe8, 0x68, 0xb3, 0x18, - 0x97, 0x21, 0x3e, 0x61, 0xaf, 0xa6, 0x60, 0xac, 0xe3, 0xa0, 0x25, 0x18, 0xae, 0x05, 0xb1, 0xb8, - 0xa4, 0x7c, 0x8a, 0x09, 0xb3, 0x77, 0x53, 0x11, 0x38, 0x77, 0xad, 0xa2, 0xae, 0x27, 0xdf, 0x9f, - 0x93, 0x91, 0x55, 0x95, 0xe3, 0xb4, 0x3e, 0x5a, 0x61, 0xc4, 0xc4, 0xe3, 0x81, 0x3c, 0xf4, 0xe4, - 0xc1, 0x1e, 0x5e, 0xb0, 0xb9, 0x6b, 0xf2, 0xf9, 0xc3, 0x51, 0xc1, 0x4e, 0xbc, 0x02, 0x98, 0x52, - 0xd0, 0x9e, 0x3a, 0x3f, 0xbd, 0xef, 0x53, 0xe7, 0x2c, 0x15, 0x73, 0xd2, 0x54, 0x9e, 0xec, 0x8b, - 0xd6, 0x52, 0x31, 0xa7, 0x41, 0x9d, 0x22, 0x15, 0x73, 0x0a, 0xc0, 0x3a, 0x4b, 0xb4, 0xda, 0xcb, - 0xa3, 0x7f, 0x86, 0x09, 0x8d, 0xc3, 0xfb, 0xe7, 0xf5, 0x98, 0xe8, 0xb3, 0xfb, 0xc5, 0x44, 0x77, - 0xbb, 0xa2, 0xcf, 0x1d, 0xc2, 0x15, 0xdd, 0x60, 0x49, 0x72, 0x17, 0x66, 0x85, 0xf7, 0xdf, 0xc2, - 0xf9, 0x8e, 0x25, 0x63, 0xe1, 0x41, 0xb2, 0xec, 0x5f, 0xcc, 0x19, 0xf4, 0x0c, 0x1b, 0xbf, 0x70, - 0xe4, 0xb0, 0xf1, 0x8c, 0x3f, 0xf7, 0xde, 0x63, 0xf3, 0xe7, 0x4e, 0x9c, 0x80, 0x3f, 0xf7, 0xbe, - 0x03, 0xfb, 0x73, 0x6f, 0xc1, 0x99, 0x76, 0x58, 0x9b, 0xf3, 0xe3, 0xa8, 0xc3, 0x2e, 0x22, 0xce, - 0x74, 0x6a, 0x75, 0x92, 0x30, 0x87, 0x70, 0xe9, 0xf2, 0xbb, 0xf5, 0x46, 0xb6, 0xd9, 0xaa, 0x94, - 0x0b, 0x2e, 0x53, 0x81, 0xd9, 0x41, 0x58, 0xb4, 0x6f, 0x4e, 0x21, 0xce, 0x63, 0xa1, 0x7b, 0x92, - 0x1f, 0x3c, 0x19, 0x4f, 0xf2, 0x07, 0x61, 0x28, 0x6e, 0x74, 0x92, 0x5a, 0x78, 0x33, 0x60, 0xe1, - 0x02, 0xc3, 0x33, 0xef, 0x52, 0x76, 0x69, 0x01, 0xbf, 0xbd, 0x3b, 0x39, 0x2e, 0xff, 0xd7, 0x4c, - 0xd2, 0x02, 0x82, 0xbe, 0xd6, 0xe3, 0xca, 0x91, 0x7b, 0x9c, 0x57, 0x8e, 0x2e, 0x1c, 0xea, 0xba, - 0x51, 0x9e, 0xbb, 0xfc, 0xa1, 0x9f, 0x3a, 0x77, 0xf9, 0x57, 0x1c, 0x18, 0xdd, 0xd6, 0xed, 0xff, - 0xc2, 0xa5, 0x6f, 0x21, 0x60, 0xc8, 0x70, 0x2b, 0xcc, 0xb8, 0x54, 0x68, 0x19, 0xa0, 0xdb, 0x59, - 0x00, 0x36, 0x5b, 0x92, 0x13, 0xcc, 0xf4, 0xf0, 0x3b, 0x15, 0xcc, 0xf4, 0x1a, 0x94, 0xda, 0x61, - 0x4d, 0x9e, 0x58, 0x99, 0x9f, 0xdf, 0x6e, 0x2c, 0x33, 0xd7, 0x3f, 0x53, 0x16, 0x58, 0xe7, 0x87, - 0x3e, 0xe7, 0xc0, 0xb8, 0x3c, 0x64, 0x09, 0xff, 0x5d, 0x2c, 0xa2, 0x31, 0x6d, 0x9e, 0xed, 0x78, - 0xd6, 0xe6, 0x0c, 0x1f, 0xdc, 0xc5, 0x99, 0x2a, 0x24, 0x2a, 0xf8, 0xad, 0x1e, 0xb3, 0xa0, 0x63, - 0xa1, 0x90, 0x4c, 0xa7, 0x60, 0xac, 0xe3, 0xa0, 0xaf, 0x3b, 0x50, 0x6c, 0x84, 0xe1, 0x56, 0x5c, - 0x7e, 0x8c, 0x09, 0xf4, 0xe7, 0x2c, 0x2b, 0x9a, 0x57, 0x29, 0x6d, 0xae, 0x61, 0x3e, 0x21, 0x0d, - 0x41, 0x0c, 0x76, 0x7b, 0x77, 0x72, 0xcc, 0x78, 0x70, 0x2c, 0x7e, 0xe3, 0x6d, 0x0d, 0x22, 0x0c, - 0x95, 0xac, 0x69, 0xe8, 0x2d, 0x07, 0xc6, 0x6f, 0x66, 0xac, 0x13, 0x22, 0x1c, 0x15, 0xdb, 0xb7, - 0x7b, 0xf0, 0xe1, 0xce, 0x42, 0x71, 0x57, 0x0b, 0xd0, 0x67, 0x4d, 0xab, 0x25, 0x8f, 0x5b, 0xb5, - 0x38, 0x80, 0x19, 0x2b, 0x29, 0xbf, 0x8e, 0x94, 0x6f, 0xbe, 0xbc, 0xfb, 0x60, 0x11, 0xda, 0x99, - 0xf4, 0x63, 0xe5, 0x54, 0x25, 0xa6, 0xf1, 0xc4, 0xc2, 0x62, 0x37, 0x3e, 0xbf, 0x6e, 0x3b, 0x79, - 0xeb, 0x3c, 0x8c, 0x99, 0x8e, 0x3a, 0xf4, 0x1e, 0xf3, 0xd1, 0x97, 0x8b, 0xd9, 0xf7, 0x33, 0x46, - 0x25, 0xbe, 0xf1, 0x86, 0x86, 0xf1, 0xc8, 0x45, 0xe1, 0x58, 0x1f, 0xb9, 0xe8, 0x3b, 0x99, 0x47, - 0x2e, 0xc6, 0x8f, 0xe3, 0x91, 0x8b, 0xd3, 0x87, 0x7a, 0xe4, 0x42, 0x7b, 0x64, 0xa4, 0xff, 0x0e, - 0x8f, 0x8c, 0x4c, 0xc3, 0x29, 0x79, 0xe7, 0x88, 0x88, 0x77, 0x04, 0xb8, 0x0f, 0x5f, 0xbd, 0x83, - 0x3f, 0x6b, 0x16, 0xe3, 0x2c, 0x3e, 0x5d, 0x64, 0xc5, 0x80, 0xd5, 0x1c, 0xb0, 0x15, 0x94, 0x65, - 0x4e, 0x2d, 0x76, 0x16, 0x16, 0x22, 0x4a, 0x46, 0x59, 0x17, 0x19, 0xec, 0xb6, 0xfc, 0x07, 0xf3, - 0x16, 0xa0, 0x17, 0xa0, 0x1c, 0x6e, 0x6e, 0x36, 0x43, 0xaf, 0x96, 0xbe, 0xc4, 0x21, 0x83, 0x0c, - 0xf8, 0x75, 0x53, 0x95, 0x6a, 0x72, 0xb5, 0x07, 0x1e, 0xee, 0x49, 0x01, 0x7d, 0x8b, 0x2a, 0x26, - 0x49, 0x18, 0x91, 0x5a, 0x6a, 0x78, 0x19, 0x66, 0x7d, 0x26, 0xd6, 0xfb, 0x5c, 0x31, 0xf9, 0xf0, - 0xde, 0xab, 0x8f, 0x92, 0x29, 0xc5, 0xd9, 0x66, 0xa1, 0x08, 0xce, 0xb7, 0xf3, 0xec, 0x3e, 0xb1, - 0xb8, 0x29, 0xb5, 0x9f, 0xf5, 0x49, 0xbd, 0xf6, 0x9e, 0x6b, 0x39, 0x8a, 0x71, 0x0f, 0xca, 0xfa, - 0x6b, 0x19, 0x43, 0x27, 0xf3, 0x5a, 0xc6, 0xc7, 0x00, 0xaa, 0x32, 0x5b, 0x9b, 0xb4, 0x24, 0x2c, - 0x59, 0xb9, 0xc2, 0xc3, 0x69, 0x6a, 0x0f, 0x1f, 0x2b, 0x36, 0x58, 0x63, 0x89, 0xfe, 0x4f, 0xee, - 0x73, 0x32, 0xdc, 0x5c, 0x52, 0xb7, 0x3e, 0x27, 0x7e, 0xea, 0x9e, 0x94, 0xf9, 0x47, 0x0e, 0x4c, - 0xf0, 0x99, 0x97, 0x55, 0xee, 0xa9, 0x6a, 0x21, 0xee, 0x14, 0xd9, 0x8e, 0x43, 0xe1, 0x59, 0x97, - 0x0c, 0xae, 0xcc, 0x6b, 0xbd, 0x4f, 0x4b, 0xd0, 0x97, 0x72, 0x8e, 0x14, 0xa7, 0x6c, 0x19, 0x20, - 0xf3, 0x1f, 0x05, 0x39, 0xb3, 0x77, 0x90, 0x53, 0xc4, 0x3f, 0xed, 0x69, 0x1f, 0x45, 0xac, 0x79, - 0xbf, 0x7c, 0x4c, 0xf6, 0x51, 0xfd, 0xe5, 0x92, 0x43, 0x59, 0x49, 0x3f, 0xef, 0xc0, 0xb8, 0x97, - 0x89, 0x1b, 0x61, 0x46, 0x1d, 0x2b, 0x06, 0xa6, 0xe9, 0x28, 0x0d, 0x46, 0x61, 0x4a, 0x5e, 0x36, - 0x44, 0x05, 0x77, 0x31, 0x47, 0x3f, 0x70, 0xe0, 0xbe, 0xf4, 0x79, 0x94, 0x38, 0xbd, 0x23, 0x2c, - 0x1a, 0x77, 0x96, 0xad, 0xc6, 0x97, 0xac, 0xaf, 0xc6, 0xf5, 0xde, 0x3c, 0xf9, 0xba, 0x7c, 0x48, - 0xac, 0xcb, 0xfb, 0xf6, 0xc1, 0xc4, 0xfb, 0x35, 0x7d, 0xe2, 0xd3, 0x0e, 0x7f, 0x3f, 0xae, 0xa7, - 0xca, 0xb7, 0x61, 0xaa, 0x7c, 0xcb, 0x36, 0x5f, 0xb0, 0xd2, 0x75, 0xcf, 0x5f, 0x77, 0xe0, 0x6c, - 0xde, 0x8e, 0x94, 0xd3, 0xa4, 0x8f, 0x9a, 0x4d, 0xb2, 0x78, 0xca, 0xd2, 0x1b, 0x64, 0xe5, 0xf9, - 0x9b, 0x89, 0x6b, 0xf0, 0xe0, 0x9d, 0xbe, 0xe2, 0x9d, 0xe8, 0x0d, 0xe9, 0x6a, 0xf1, 0x9f, 0x0f, - 0x6b, 0x2e, 0xc5, 0x84, 0xb4, 0xad, 0x07, 0x64, 0x07, 0x30, 0xe0, 0x07, 0x4d, 0x3f, 0x20, 0xe2, - 0x9e, 0xa8, 0xcd, 0x33, 0xac, 0x78, 0x00, 0x8b, 0x52, 0xc7, 0x82, 0xcb, 0x3b, 0xec, 0x61, 0xcc, - 0x3e, 0x29, 0xd8, 0x7f, 0xf2, 0x4f, 0x0a, 0xde, 0x84, 0xe1, 0x9b, 0x7e, 0xd2, 0x60, 0x91, 0x11, - 0xc2, 0x71, 0x67, 0xe1, 0x7e, 0x25, 0x25, 0x97, 0xf6, 0xfd, 0x86, 0x64, 0x80, 0x53, 0x5e, 0xe8, - 0x12, 0x67, 0xcc, 0xc2, 0xb0, 0xb3, 0xf1, 0xb1, 0x37, 0x64, 0x01, 0x4e, 0x71, 0xe8, 0x60, 0x8d, - 0xd0, 0x5f, 0x32, 0x8d, 0x93, 0xc8, 0xac, 0x6c, 0x23, 0x63, 0xa6, 0xa0, 0xc8, 0x6f, 0x31, 0xdf, - 0xd0, 0x78, 0x60, 0x83, 0xa3, 0x4a, 0x6e, 0x3d, 0xd4, 0x33, 0xb9, 0xf5, 0xab, 0x4c, 0x61, 0x4b, - 0xfc, 0xa0, 0x43, 0x56, 0x03, 0x11, 0xbc, 0xbd, 0x6c, 0xe7, 0xce, 0x35, 0xa7, 0xc9, 0x8f, 0xe0, - 0xe9, 0x6f, 0xac, 0xf1, 0xd3, 0xfc, 0x27, 0xa5, 0x7d, 0xfd, 0x27, 0xa9, 0xc9, 0x65, 0xc4, 0xba, - 0xc9, 0x25, 0x21, 0x6d, 0x2b, 0x26, 0x97, 0x9f, 0x2a, 0x73, 0xc0, 0x5f, 0x38, 0x80, 0x94, 0xde, - 0xa5, 0x04, 0xea, 0x09, 0x44, 0x48, 0x7e, 0xdc, 0x01, 0x08, 0xd4, 0xc3, 0xb3, 0x76, 0x77, 0x41, - 0x4e, 0x33, 0x6d, 0x40, 0x0a, 0xc3, 0x1a, 0x4f, 0xf7, 0xcf, 0x9c, 0x34, 0x10, 0x39, 0xed, 0xfb, - 0x09, 0x44, 0x84, 0xed, 0x98, 0x11, 0x61, 0xeb, 0x16, 0x4d, 0xf7, 0xaa, 0x1b, 0x3d, 0x62, 0xc3, - 0x7e, 0x5c, 0x80, 0x53, 0x3a, 0x72, 0x85, 0x9c, 0xc4, 0xc7, 0xbe, 0x69, 0x84, 0xc3, 0x5e, 0xb7, - 0xdb, 0xdf, 0x8a, 0xf0, 0x00, 0xe5, 0x85, 0x5e, 0x7f, 0x2c, 0x13, 0x7a, 0x7d, 0xc3, 0x3e, 0xeb, - 0xfd, 0xe3, 0xaf, 0xff, 0x9b, 0x03, 0x67, 0x32, 0x35, 0x4e, 0x60, 0x82, 0x6d, 0x9b, 0x13, 0xec, - 0x19, 0xeb, 0xbd, 0xee, 0x31, 0xbb, 0xbe, 0x51, 0xe8, 0xea, 0x2d, 0x3b, 0xc4, 0x7d, 0xca, 0x81, - 0x22, 0xd5, 0x96, 0x65, 0x70, 0xd6, 0x47, 0x8f, 0x65, 0x06, 0x30, 0xbd, 0x5e, 0x48, 0x67, 0xd5, - 0x3e, 0x06, 0xc3, 0x9c, 0xfb, 0xc4, 0x27, 0x1d, 0x80, 0x14, 0xe9, 0x9d, 0x52, 0x81, 0xdd, 0x6f, - 0x17, 0xe0, 0x5c, 0xee, 0x34, 0x42, 0x9f, 0x51, 0x16, 0x39, 0xc7, 0x76, 0xe8, 0xa1, 0xc1, 0x48, - 0x37, 0xcc, 0x8d, 0x1a, 0x86, 0x39, 0x61, 0x8f, 0x7b, 0xa7, 0x0e, 0x30, 0x42, 0x4c, 0x6b, 0x83, - 0xf5, 0x23, 0x27, 0x8d, 0x66, 0x55, 0xf9, 0x94, 0xfe, 0x12, 0xde, 0xc8, 0x71, 0x7f, 0xac, 0x5d, - 0x57, 0x90, 0x1d, 0x3d, 0x01, 0x59, 0x71, 0xd3, 0x94, 0x15, 0xd8, 0xbe, 0x1f, 0xb9, 0x87, 0xb0, - 0x78, 0x09, 0xf2, 0x1c, 0xcb, 0x07, 0xcb, 0xe3, 0x68, 0xdc, 0x6d, 0x2d, 0x1c, 0xf8, 0x6e, 0xeb, - 0x28, 0x94, 0x9e, 0xf7, 0x55, 0x0e, 0xd0, 0x99, 0xa9, 0xef, 0xfe, 0xf0, 0xe2, 0x3d, 0xdf, 0xfb, - 0xe1, 0xc5, 0x7b, 0x7e, 0xf0, 0xc3, 0x8b, 0xf7, 0x7c, 0x7c, 0xef, 0xa2, 0xf3, 0xdd, 0xbd, 0x8b, - 0xce, 0xf7, 0xf6, 0x2e, 0x3a, 0x3f, 0xd8, 0xbb, 0xe8, 0xfc, 0xa7, 0xbd, 0x8b, 0xce, 0xdf, 0xf9, - 0xd3, 0x8b, 0xf7, 0x3c, 0x3f, 0x24, 0x3b, 0xf6, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0xa2, 0x39, - 0xf4, 0x08, 0x5e, 0xdc, 0x00, 0x00, + 0x49, 0x95, 0xa2, 0x48, 0x89, 0x4a, 0xce, 0xa3, 0xe4, 0xaf, 0xc4, 0xfe, 0x49, 0xe5, 0xc3, 0xa5, + 0x94, 0x53, 0x89, 0x5c, 0x51, 0xca, 0xfa, 0x88, 0xc1, 0x08, 0x4e, 0xf4, 0x91, 0x94, 0x3e, 0xac, + 0x8a, 0x93, 0x78, 0xf3, 0xa8, 0x54, 0x3f, 0x6f, 0xf7, 0x9d, 0x3b, 0x58, 0x00, 0xdb, 0x00, 0x55, + 0xf6, 0x17, 0x30, 0xa7, 0x4f, 0x9f, 0xd3, 0xdd, 0xb7, 0xfb, 0xf4, 0xe9, 0x73, 0x4e, 0x9f, 0x86, + 0xb5, 0xba, 0x9f, 0x34, 0x3a, 0x1b, 0x53, 0xd5, 0xb0, 0x75, 0xc9, 0x8b, 0xea, 0x61, 0x3b, 0x0a, + 0x5f, 0x64, 0xff, 0xbc, 0xfb, 0x66, 0x18, 0x6d, 0x6d, 0x36, 0xc3, 0x9b, 0xf1, 0xa5, 0xed, 0x27, + 0x2f, 0xb5, 0xb7, 0xea, 0x97, 0xbc, 0xb6, 0x1f, 0x5f, 0x92, 0xd0, 0x4b, 0xdb, 0x4f, 0x78, 0xcd, + 0x76, 0xc3, 0x7b, 0xe2, 0x52, 0x9d, 0x04, 0x24, 0xf2, 0x12, 0x52, 0x9b, 0x6a, 0x47, 0x61, 0x12, + 0xa2, 0x0f, 0xa6, 0x14, 0xa7, 0x24, 0x45, 0xf6, 0xcf, 0x47, 0x14, 0xc5, 0xa9, 0xed, 0x27, 0xa7, + 0xda, 0x5b, 0xf5, 0x29, 0x4a, 0x71, 0x4a, 0x42, 0xa7, 0x24, 0xc5, 0x89, 0x77, 0x6b, 0x6d, 0xaa, + 0x87, 0xf5, 0xf0, 0x12, 0x23, 0xbc, 0xd1, 0xd9, 0x64, 0xbf, 0xd8, 0x0f, 0xf6, 0x1f, 0x67, 0x38, + 0xe1, 0x6e, 0x3d, 0x15, 0x4f, 0xf9, 0x21, 0x6d, 0xdf, 0xa5, 0x6a, 0x18, 0x91, 0x4b, 0xdb, 0x5d, + 0x8d, 0x9a, 0x78, 0x97, 0x86, 0xd3, 0x0e, 0x9b, 0x7e, 0x75, 0x27, 0x0f, 0xeb, 0x3d, 0x29, 0x56, + 0xcb, 0xab, 0x36, 0xfc, 0x80, 0x44, 0x3b, 0x69, 0xd7, 0x5b, 0x24, 0xf1, 0xf2, 0x6a, 0x5d, 0xea, + 0x55, 0x2b, 0xea, 0x04, 0x89, 0xdf, 0x22, 0x5d, 0x15, 0x7e, 0xe1, 0x4e, 0x15, 0xe2, 0x6a, 0x83, + 0xb4, 0xbc, 0xae, 0x7a, 0x4f, 0xf6, 0xaa, 0xd7, 0x49, 0xfc, 0xe6, 0x25, 0x3f, 0x48, 0xe2, 0x24, + 0xca, 0x56, 0x72, 0xaf, 0xc0, 0xc0, 0x74, 0x2b, 0xec, 0x04, 0x09, 0x7a, 0x1f, 0x14, 0xb7, 0xbd, + 0x66, 0x87, 0x94, 0x9d, 0x07, 0x9d, 0x47, 0x87, 0x67, 0x1e, 0xfe, 0xee, 0xee, 0xe4, 0x3d, 0x7b, + 0xbb, 0x93, 0xc5, 0x67, 0x29, 0xf0, 0xf6, 0xee, 0xe4, 0x59, 0x12, 0x54, 0xc3, 0x9a, 0x1f, 0xd4, + 0x2f, 0xbd, 0x18, 0x87, 0xc1, 0xd4, 0xb5, 0x4e, 0x6b, 0x83, 0x44, 0x98, 0xd7, 0x71, 0xff, 0x7d, + 0x01, 0x4e, 0x4d, 0x47, 0xd5, 0x86, 0xbf, 0x4d, 0x2a, 0x09, 0xa5, 0x5f, 0xdf, 0x41, 0x0d, 0xe8, + 0x4b, 0xbc, 0x88, 0x91, 0x2b, 0x5d, 0x5e, 0x99, 0xba, 0xdb, 0xef, 0x3e, 0xb5, 0xee, 0x45, 0x92, + 0xf6, 0xcc, 0xe0, 0xde, 0xee, 0x64, 0xdf, 0xba, 0x17, 0x61, 0xca, 0x02, 0x35, 0xa1, 0x3f, 0x08, + 0x03, 0x52, 0x2e, 0x30, 0x56, 0xd7, 0xee, 0x9e, 0xd5, 0xb5, 0x30, 0x50, 0xfd, 0x98, 0x19, 0xda, + 0xdb, 0x9d, 0xec, 0xa7, 0x10, 0xcc, 0xb8, 0xd0, 0x7e, 0xbd, 0xec, 0xb7, 0xcb, 0x7d, 0xb6, 0xfa, + 0xf5, 0xbc, 0xdf, 0x36, 0xfb, 0xf5, 0xbc, 0xdf, 0xc6, 0x94, 0x85, 0xfb, 0xd9, 0x02, 0x0c, 0x4f, + 0x47, 0xf5, 0x4e, 0x8b, 0x04, 0x49, 0x8c, 0x3e, 0x06, 0xd0, 0xf6, 0x22, 0xaf, 0x45, 0x12, 0x12, + 0xc5, 0x65, 0xe7, 0xc1, 0xbe, 0x47, 0x4b, 0x97, 0x97, 0xee, 0x9e, 0xfd, 0x9a, 0xa4, 0x39, 0x83, + 0xc4, 0x27, 0x07, 0x05, 0x8a, 0xb1, 0xc6, 0x12, 0xbd, 0x02, 0xc3, 0x5e, 0x94, 0xf8, 0x9b, 0x5e, + 0x35, 0x89, 0xcb, 0x05, 0xc6, 0xff, 0xe9, 0xbb, 0xe7, 0x3f, 0x2d, 0x48, 0xce, 0x9c, 0x16, 0xec, + 0x87, 0x25, 0x24, 0xc6, 0x29, 0x3f, 0xf7, 0xf7, 0xfa, 0xa1, 0x34, 0x1d, 0x25, 0x0b, 0xb3, 0x95, + 0xc4, 0x4b, 0x3a, 0x31, 0xfa, 0x43, 0x07, 0xce, 0xc4, 0x7c, 0xd8, 0x7c, 0x12, 0xaf, 0x45, 0x61, + 0x95, 0xc4, 0x31, 0xa9, 0x89, 0x71, 0xd9, 0xb4, 0xd2, 0x2e, 0xc9, 0x6c, 0xaa, 0xd2, 0xcd, 0xe8, + 0x4a, 0x90, 0x44, 0x3b, 0x33, 0x4f, 0x88, 0x36, 0x9f, 0xc9, 0xc1, 0x78, 0xe3, 0xed, 0x49, 0x24, + 0xbb, 0x42, 0x29, 0xf1, 0x4f, 0x8c, 0xf3, 0x5a, 0x8d, 0xbe, 0xe2, 0xc0, 0x48, 0x3b, 0xac, 0xc5, + 0x98, 0x54, 0xc3, 0x4e, 0x9b, 0xd4, 0xc4, 0xf0, 0x7e, 0xc4, 0x6e, 0x37, 0xd6, 0x34, 0x0e, 0xbc, + 0xfd, 0x67, 0x45, 0xfb, 0x47, 0xf4, 0x22, 0x6c, 0x34, 0x05, 0x3d, 0x05, 0x23, 0x41, 0x98, 0x54, + 0xda, 0xa4, 0xea, 0x6f, 0xfa, 0xa4, 0xc6, 0x26, 0xfe, 0x50, 0x5a, 0xf3, 0x9a, 0x56, 0x86, 0x0d, + 0xcc, 0x89, 0x79, 0x28, 0xf7, 0x1a, 0x39, 0x34, 0x0e, 0x7d, 0x5b, 0x64, 0x87, 0x0b, 0x1b, 0x4c, + 0xff, 0x45, 0x67, 0xa5, 0x00, 0xa2, 0xcb, 0x78, 0x48, 0x48, 0x96, 0x5f, 0x2c, 0x3c, 0xe5, 0x4c, + 0x7c, 0x00, 0x4e, 0x77, 0x35, 0xfd, 0x30, 0x04, 0xdc, 0xef, 0x0d, 0xc0, 0x90, 0xfc, 0x14, 0xe8, + 0x41, 0xe8, 0x0f, 0xbc, 0x96, 0x94, 0x73, 0x23, 0xa2, 0x1f, 0xfd, 0xd7, 0xbc, 0x16, 0x5d, 0xe1, + 0x5e, 0x8b, 0x50, 0x8c, 0xb6, 0x97, 0x34, 0x18, 0x1d, 0x0d, 0x63, 0xcd, 0x4b, 0x1a, 0x98, 0x95, + 0xa0, 0xfb, 0xa1, 0xbf, 0x15, 0xd6, 0x08, 0x1b, 0x8b, 0x22, 0x97, 0x10, 0x2b, 0x61, 0x8d, 0x60, + 0x06, 0xa5, 0xf5, 0x37, 0xa3, 0xb0, 0x55, 0xee, 0x37, 0xeb, 0xcf, 0x47, 0x61, 0x0b, 0xb3, 0x12, + 0xf4, 0x65, 0x07, 0xc6, 0xe5, 0xdc, 0x5e, 0x0e, 0xab, 0x5e, 0xe2, 0x87, 0x41, 0xb9, 0xc8, 0x24, + 0x0a, 0xb6, 0xb7, 0xa4, 0x24, 0xe5, 0x99, 0xb2, 0x68, 0xc2, 0x78, 0xb6, 0x04, 0x77, 0xb5, 0x02, + 0x5d, 0x06, 0xa8, 0x37, 0xc3, 0x0d, 0xaf, 0x49, 0x07, 0xa4, 0x3c, 0xc0, 0xba, 0xa0, 0x24, 0xc3, + 0x82, 0x2a, 0xc1, 0x1a, 0x16, 0xba, 0x05, 0x83, 0x1e, 0x97, 0xfe, 0xe5, 0x41, 0xd6, 0x89, 0x67, + 0x6c, 0x74, 0xc2, 0xd8, 0x4e, 0x66, 0x4a, 0x7b, 0xbb, 0x93, 0x83, 0x02, 0x88, 0x25, 0x3b, 0xf4, + 0x38, 0x0c, 0x85, 0x6d, 0xda, 0x6e, 0xaf, 0x59, 0x1e, 0x62, 0x13, 0x73, 0x5c, 0xb4, 0x75, 0x68, + 0x55, 0xc0, 0xb1, 0xc2, 0x40, 0x8f, 0xc1, 0x60, 0xdc, 0xd9, 0xa0, 0xdf, 0xb1, 0x3c, 0xcc, 0x3a, + 0x76, 0x4a, 0x20, 0x0f, 0x56, 0x38, 0x18, 0xcb, 0x72, 0xf4, 0x5e, 0x28, 0x45, 0xa4, 0xda, 0x89, + 0x62, 0x42, 0x3f, 0x6c, 0x19, 0x18, 0xed, 0x33, 0x02, 0xbd, 0x84, 0xd3, 0x22, 0xac, 0xe3, 0xa1, + 0xf7, 0xc3, 0x18, 0xfd, 0xc0, 0x57, 0x6e, 0xb5, 0x23, 0x12, 0xc7, 0xf4, 0xab, 0x96, 0x18, 0xa3, + 0xf3, 0xa2, 0xe6, 0xd8, 0xbc, 0x51, 0x8a, 0x33, 0xd8, 0xe8, 0x55, 0x00, 0x4f, 0xc9, 0x8c, 0xf2, + 0x08, 0x1b, 0xcc, 0x65, 0x7b, 0x33, 0x62, 0x61, 0x76, 0x66, 0x8c, 0x7e, 0xc7, 0xf4, 0x37, 0xd6, + 0xf8, 0xd1, 0xf1, 0xa9, 0x91, 0x26, 0x49, 0x48, 0xad, 0x3c, 0xca, 0x3a, 0xac, 0xc6, 0x67, 0x8e, + 0x83, 0xb1, 0x2c, 0x77, 0x7f, 0xbb, 0x00, 0x1a, 0x15, 0x34, 0x03, 0x43, 0x42, 0xae, 0x89, 0x25, + 0x39, 0xf3, 0x88, 0xfc, 0x0e, 0xf2, 0x0b, 0xde, 0xde, 0xcd, 0x95, 0x87, 0xaa, 0x1e, 0x7a, 0x0d, + 0x4a, 0xed, 0xb0, 0xb6, 0x42, 0x12, 0xaf, 0xe6, 0x25, 0x9e, 0xd8, 0xcd, 0x2d, 0xec, 0x30, 0x92, + 0xe2, 0xcc, 0x29, 0xfa, 0xe9, 0xd6, 0x52, 0x16, 0x58, 0xe7, 0x87, 0x9e, 0x06, 0x14, 0x93, 0x68, + 0xdb, 0xaf, 0x92, 0xe9, 0x6a, 0x95, 0xaa, 0x44, 0x6c, 0x01, 0xf4, 0xb1, 0xce, 0x4c, 0x88, 0xce, + 0xa0, 0x4a, 0x17, 0x06, 0xce, 0xa9, 0xe5, 0x7e, 0xbf, 0x00, 0x63, 0x5a, 0x5f, 0xdb, 0xa4, 0x8a, + 0xbe, 0xe5, 0xc0, 0x29, 0xb5, 0x9d, 0xcd, 0xec, 0x5c, 0xa3, 0xb3, 0x8a, 0x6f, 0x56, 0xc4, 0xe6, + 0xf7, 0xa5, 0xbc, 0xd4, 0x4f, 0xc1, 0x87, 0xcb, 0xfa, 0x0b, 0xa2, 0x0f, 0xa7, 0x32, 0xa5, 0x38, + 0xdb, 0xac, 0x89, 0x2f, 0x39, 0x70, 0x36, 0x8f, 0x44, 0x8e, 0xcc, 0x6d, 0xe8, 0x32, 0xd7, 0xaa, + 0xf0, 0xa2, 0x5c, 0x69, 0x67, 0x74, 0x39, 0xfe, 0xff, 0x0a, 0x30, 0xae, 0x4f, 0x21, 0xa6, 0x09, + 0xfc, 0x2b, 0x07, 0xce, 0xc9, 0x1e, 0x60, 0x12, 0x77, 0x9a, 0x99, 0xe1, 0x6d, 0x59, 0x1d, 0x5e, + 0xbe, 0x93, 0x4e, 0xe7, 0xf1, 0xe3, 0xc3, 0xfc, 0x80, 0x18, 0xe6, 0x73, 0xb9, 0x38, 0x38, 0xbf, + 0xa9, 0x13, 0xdf, 0x70, 0x60, 0xa2, 0x37, 0xd1, 0x9c, 0x81, 0x6f, 0x9b, 0x03, 0xff, 0xbc, 0xbd, + 0x4e, 0x72, 0xf6, 0x6c, 0xf8, 0x59, 0x67, 0xf5, 0x0f, 0xf0, 0xf5, 0x61, 0xe8, 0xda, 0x43, 0xd0, + 0x13, 0x50, 0x12, 0xe2, 0x78, 0x39, 0xac, 0xc7, 0xac, 0x91, 0x43, 0x7c, 0xad, 0x4d, 0xa7, 0x60, + 0xac, 0xe3, 0xa0, 0x1a, 0x14, 0xe2, 0x27, 0x45, 0xd3, 0x2d, 0x88, 0xb7, 0xca, 0x93, 0x4a, 0x8b, + 0x1c, 0xd8, 0xdb, 0x9d, 0x2c, 0x54, 0x9e, 0xc4, 0x85, 0xf8, 0x49, 0xaa, 0xa9, 0xd7, 0xfd, 0xc4, + 0x9e, 0xa6, 0xbe, 0xe0, 0x27, 0x8a, 0x0f, 0xd3, 0xd4, 0x17, 0xfc, 0x04, 0x53, 0x16, 0xf4, 0x04, + 0xd2, 0x48, 0x92, 0x36, 0xdb, 0xf1, 0xad, 0x9c, 0x40, 0xae, 0xae, 0xaf, 0xaf, 0x29, 0x5e, 0x4c, + 0xbf, 0xa0, 0x10, 0xcc, 0xb8, 0xa0, 0x37, 0x1d, 0x3a, 0xe2, 0xbc, 0x30, 0x8c, 0x76, 0x84, 0xe2, + 0x70, 0xdd, 0xde, 0x14, 0x08, 0xa3, 0x1d, 0xc5, 0x5c, 0x7c, 0x48, 0x55, 0x80, 0x75, 0xd6, 0xac, + 0xe3, 0xb5, 0xcd, 0x98, 0xe9, 0x09, 0x76, 0x3a, 0x3e, 0x37, 0x5f, 0xc9, 0x74, 0x7c, 0x6e, 0xbe, + 0x82, 0x19, 0x17, 0xfa, 0x41, 0x23, 0xef, 0xa6, 0xd0, 0x31, 0x2c, 0x7c, 0x50, 0xec, 0xdd, 0x34, + 0x3f, 0x28, 0xf6, 0x6e, 0x62, 0xca, 0x82, 0x72, 0x0a, 0xe3, 0x98, 0xa9, 0x14, 0x56, 0x38, 0xad, + 0x56, 0x2a, 0x26, 0xa7, 0xd5, 0x4a, 0x05, 0x53, 0x16, 0x6c, 0x92, 0x56, 0x63, 0xa6, 0x8f, 0xd8, + 0x99, 0xa4, 0xb3, 0x19, 0x4e, 0x0b, 0xb3, 0x15, 0x4c, 0x59, 0x50, 0x91, 0xe1, 0xbd, 0xdc, 0x89, + 0xb8, 0x32, 0x53, 0xba, 0xbc, 0x6a, 0x61, 0xbe, 0x50, 0x72, 0x8a, 0xdb, 0xf0, 0xde, 0xee, 0x64, + 0x91, 0x81, 0x30, 0x67, 0x84, 0x12, 0x18, 0x68, 0x37, 0x3b, 0x75, 0x9f, 0x6b, 0x41, 0xa5, 0xcb, + 0x6b, 0x16, 0x8e, 0xab, 0x8c, 0x9e, 0xe2, 0x09, 0x7b, 0xbb, 0x93, 0x03, 0x1c, 0x86, 0x05, 0x2f, + 0xf7, 0x0f, 0xfa, 0x52, 0x21, 0x25, 0x77, 0x11, 0xf4, 0x1b, 0x6c, 0xfb, 0x15, 0x12, 0x48, 0x28, + 0xdc, 0xce, 0xb1, 0x29, 0xdc, 0x67, 0xf8, 0x3e, 0x6b, 0xb0, 0xc3, 0x59, 0xfe, 0xe8, 0x0b, 0x4e, + 0xf7, 0x89, 0xda, 0xb3, 0xbf, 0x83, 0xa6, 0xea, 0x00, 0xdf, 0xa1, 0xf6, 0x3d, 0x68, 0x4f, 0xbc, + 0xe9, 0xa4, 0xaa, 0x4b, 0xdc, 0x6b, 0xf7, 0xf9, 0xa8, 0xb9, 0xfb, 0x58, 0x34, 0x03, 0xe8, 0xbb, + 0xcd, 0x67, 0x1d, 0x18, 0x95, 0x70, 0xaa, 0x94, 0xc7, 0xe8, 0x16, 0x0c, 0xc9, 0x96, 0x8a, 0xaf, + 0x67, 0xd3, 0x02, 0xa1, 0x8e, 0x0e, 0xaa, 0x31, 0x8a, 0x9b, 0xfb, 0xad, 0x41, 0x40, 0xe9, 0x0e, + 0xd9, 0x0e, 0x63, 0x9f, 0xc9, 0xbf, 0x23, 0xec, 0x7d, 0x81, 0xb6, 0xf7, 0x3d, 0x6b, 0x73, 0xef, + 0x4b, 0x9b, 0x65, 0xec, 0x82, 0x5f, 0xc8, 0xec, 0x16, 0x7c, 0x3b, 0xfc, 0xc8, 0xb1, 0xec, 0x16, + 0x5a, 0x13, 0xf6, 0xdf, 0x37, 0xb6, 0xc5, 0xbe, 0xc1, 0x37, 0xcc, 0x5f, 0xb2, 0xbb, 0x6f, 0x68, + 0xad, 0xc8, 0xee, 0x20, 0x11, 0x97, 0xeb, 0x7c, 0xc7, 0xbc, 0x61, 0x55, 0xae, 0x6b, 0x5c, 0x4d, + 0x09, 0x1f, 0x71, 0x09, 0x3f, 0x60, 0x8b, 0xa7, 0x26, 0xe1, 0xb3, 0x3c, 0x95, 0xac, 0x7f, 0x59, + 0xca, 0x7a, 0xbe, 0x57, 0x3e, 0x67, 0x59, 0xd6, 0x6b, 0x7c, 0xbb, 0xa5, 0xfe, 0xeb, 0x4a, 0xea, + 0x0f, 0xd9, 0xd2, 0x4d, 0x4d, 0xa9, 0xaf, 0x71, 0xcf, 0x93, 0xff, 0x2f, 0xc1, 0xb9, 0x6e, 0x4c, + 0x4c, 0x36, 0xd1, 0x25, 0x18, 0xae, 0x86, 0xc1, 0xa6, 0x5f, 0x5f, 0xf1, 0xda, 0xe2, 0x94, 0xaa, + 0x64, 0xe1, 0xac, 0x2c, 0xc0, 0x29, 0x0e, 0x7a, 0x80, 0x0b, 0x3e, 0x6e, 0x07, 0x2a, 0x09, 0xd4, + 0xbe, 0x25, 0xb2, 0xc3, 0xa4, 0xe0, 0x2f, 0x0e, 0x7d, 0xf9, 0x6b, 0x93, 0xf7, 0x7c, 0xfc, 0x3f, + 0x3e, 0x78, 0x8f, 0xfb, 0x47, 0x7d, 0x70, 0x5f, 0x2e, 0x4f, 0x71, 0x46, 0xf9, 0xc7, 0xc6, 0x19, + 0x45, 0x2b, 0x17, 0x52, 0xec, 0x86, 0x4d, 0xf5, 0x5d, 0x23, 0x9f, 0x77, 0x1a, 0xd1, 0x8a, 0x71, + 0x7e, 0xa3, 0xe8, 0x40, 0x05, 0x5e, 0x8b, 0xc4, 0x6d, 0xaf, 0x4a, 0x44, 0xef, 0xd5, 0x40, 0x5d, + 0x93, 0x05, 0x38, 0xc5, 0xe1, 0x86, 0x83, 0x4d, 0xaf, 0xd3, 0x4c, 0x84, 0x79, 0x50, 0x33, 0x1c, + 0x30, 0x30, 0x96, 0xe5, 0xe8, 0xef, 0x3a, 0x80, 0xba, 0xb9, 0x0a, 0x41, 0xb0, 0x7e, 0x1c, 0xe3, + 0x30, 0x73, 0x7e, 0x4f, 0x33, 0x3d, 0x68, 0x3d, 0xcd, 0x69, 0x87, 0xf6, 0x4d, 0x5f, 0x4f, 0xf7, + 0x41, 0x7e, 0x24, 0x3a, 0x80, 0xe5, 0x90, 0x19, 0x98, 0xaa, 0x55, 0x12, 0xc7, 0xdc, 0x08, 0xa9, + 0x1b, 0x98, 0x18, 0x18, 0xcb, 0x72, 0x34, 0x09, 0x45, 0x12, 0x45, 0x61, 0x24, 0x2c, 0x0c, 0x6c, + 0x19, 0x5d, 0xa1, 0x00, 0xcc, 0xe1, 0xee, 0x8f, 0x0a, 0x50, 0xee, 0x75, 0x26, 0x43, 0xbf, 0xab, + 0x59, 0x13, 0xc4, 0x79, 0x51, 0x1c, 0x77, 0xc3, 0xe3, 0x3b, 0x09, 0x66, 0x8f, 0xbd, 0x3d, 0xec, + 0x0a, 0xa2, 0x14, 0x67, 0x1b, 0x38, 0xf1, 0x96, 0x66, 0x57, 0xd0, 0x49, 0xe4, 0x28, 0x18, 0x9b, + 0xa6, 0x82, 0xb1, 0x66, 0xbb, 0x53, 0xba, 0x9a, 0xf1, 0x27, 0x45, 0x38, 0x23, 0x4b, 0x2b, 0x84, + 0x6e, 0xd5, 0xcf, 0x74, 0x48, 0xb4, 0x83, 0xfe, 0xd8, 0x81, 0xb3, 0x5e, 0xd6, 0x60, 0xe5, 0x93, + 0x63, 0x18, 0x68, 0x8d, 0xeb, 0xd4, 0x74, 0x0e, 0x47, 0x3e, 0xd0, 0x97, 0xc5, 0x40, 0x9f, 0xcd, + 0x43, 0xe9, 0xe1, 0x6d, 0xc8, 0xed, 0x00, 0x7a, 0x0a, 0x46, 0x24, 0x9c, 0x19, 0xb9, 0xf8, 0x12, + 0x57, 0x26, 0xfd, 0x69, 0xad, 0x0c, 0x1b, 0x98, 0xb4, 0x66, 0x42, 0x5a, 0xed, 0xa6, 0x97, 0x10, + 0xcd, 0x3c, 0xa6, 0x6a, 0xae, 0x6b, 0x65, 0xd8, 0xc0, 0x44, 0x8f, 0xc0, 0x40, 0x10, 0xd6, 0xc8, + 0x62, 0x4d, 0x98, 0xc5, 0xc7, 0x44, 0x9d, 0x81, 0x6b, 0x0c, 0x8a, 0x45, 0x29, 0x7a, 0x38, 0xb5, + 0x41, 0x16, 0xd9, 0x12, 0x2a, 0xe5, 0xd9, 0x1f, 0xd1, 0xdf, 0x77, 0x60, 0x98, 0xd6, 0x58, 0xdf, + 0x69, 0x13, 0xba, 0xb7, 0xd2, 0x2f, 0x52, 0x3b, 0x9e, 0x2f, 0x72, 0x4d, 0xb2, 0x31, 0x0d, 0x3c, + 0xc3, 0x0a, 0xfe, 0xc6, 0xdb, 0x93, 0x43, 0xf2, 0x07, 0x4e, 0x5b, 0x35, 0xb1, 0x00, 0xf7, 0xf6, + 0xfc, 0x9a, 0x87, 0x72, 0x80, 0xfc, 0x4d, 0x18, 0x33, 0x1b, 0x71, 0x28, 0xef, 0xc7, 0x3f, 0xd7, + 0x96, 0x1d, 0xef, 0x97, 0x90, 0x67, 0xef, 0x98, 0x36, 0xad, 0x26, 0xc3, 0x9c, 0x98, 0x7a, 0xe6, + 0x64, 0x98, 0x13, 0x93, 0x61, 0xce, 0xfd, 0x43, 0x27, 0x5d, 0x9a, 0x9a, 0x9a, 0x49, 0x37, 0xe6, + 0x4e, 0xd4, 0x14, 0x82, 0x58, 0x6d, 0xcc, 0xd7, 0xf1, 0x32, 0xa6, 0x70, 0xf4, 0x96, 0x26, 0x1d, + 0x69, 0xb5, 0x8e, 0x70, 0xe6, 0x58, 0x72, 0x4c, 0x18, 0x84, 0xbb, 0xe5, 0x9f, 0x28, 0xc0, 0xd9, + 0x26, 0xb8, 0x5f, 0x28, 0xc0, 0x03, 0xfb, 0x2a, 0xcd, 0xb9, 0x0d, 0x77, 0xde, 0xf1, 0x86, 0xd3, + 0x6d, 0x2d, 0x22, 0xed, 0xf0, 0x3a, 0x5e, 0x16, 0xdf, 0x4b, 0x6d, 0x6b, 0x98, 0x83, 0xb1, 0x2c, + 0xa7, 0xaa, 0xc3, 0x16, 0xd9, 0x99, 0x0f, 0xa3, 0x96, 0x97, 0x08, 0xe9, 0xa0, 0x54, 0x87, 0x25, + 0x59, 0x80, 0x53, 0x1c, 0xf7, 0x8f, 0x1d, 0xc8, 0x36, 0x00, 0x79, 0x30, 0xd6, 0x89, 0x49, 0x44, + 0xb7, 0xd4, 0x0a, 0xa9, 0x46, 0x44, 0x4e, 0xcf, 0x87, 0xa7, 0x78, 0x8c, 0x03, 0xed, 0xe1, 0x54, + 0x35, 0x8c, 0xc8, 0xd4, 0xf6, 0x13, 0x53, 0x1c, 0x63, 0x89, 0xec, 0x54, 0x48, 0x93, 0x50, 0x1a, + 0x33, 0x68, 0x6f, 0x77, 0x72, 0xec, 0xba, 0x41, 0x00, 0x67, 0x08, 0x52, 0x16, 0x6d, 0x2f, 0x8e, + 0x6f, 0x86, 0x51, 0x4d, 0xb0, 0x28, 0x1c, 0x9a, 0xc5, 0x9a, 0x41, 0x00, 0x67, 0x08, 0xba, 0xdf, + 0xa7, 0xc7, 0x57, 0x5d, 0x6b, 0x46, 0x5f, 0xa3, 0xba, 0x0f, 0x85, 0xcc, 0x34, 0xc3, 0x8d, 0xd9, + 0x30, 0x48, 0x3c, 0x3f, 0x20, 0x32, 0x44, 0x62, 0xdd, 0x92, 0x8e, 0x6e, 0xd0, 0x4e, 0x3d, 0x17, + 0xdd, 0x65, 0x38, 0xa7, 0x2d, 0x54, 0xc7, 0xd9, 0x68, 0x86, 0x1b, 0x59, 0xdf, 0x27, 0x45, 0xc2, + 0xac, 0xc4, 0xfd, 0x89, 0x03, 0x17, 0x7a, 0x1c, 0x06, 0xd0, 0x97, 0x1c, 0x18, 0xdd, 0xf8, 0xa9, + 0xe8, 0x9b, 0xd9, 0x0c, 0xf4, 0x7e, 0x18, 0xa3, 0x00, 0xba, 0x13, 0x89, 0xb9, 0x59, 0x30, 0xfd, + 0x72, 0x33, 0x46, 0x29, 0xce, 0x60, 0xbb, 0xbf, 0x59, 0x80, 0x1c, 0x2e, 0xe8, 0x71, 0x18, 0x22, + 0x41, 0xad, 0x1d, 0xfa, 0x41, 0x22, 0x84, 0x91, 0x92, 0x7a, 0x57, 0x04, 0x1c, 0x2b, 0x0c, 0x71, + 0xfe, 0x10, 0x03, 0x53, 0xe8, 0x3a, 0x7f, 0x88, 0x96, 0xa7, 0x38, 0xa8, 0x0e, 0xe3, 0x1e, 0xf7, + 0x2a, 0xb1, 0xb9, 0xc7, 0xa6, 0x69, 0xdf, 0x61, 0xa6, 0xe9, 0x59, 0xe6, 0xf4, 0xcd, 0x90, 0xc0, + 0x5d, 0x44, 0xd1, 0x7b, 0xa1, 0xd4, 0x89, 0x49, 0x65, 0x6e, 0x69, 0x36, 0x22, 0x35, 0x7e, 0x2a, + 0xd7, 0xbc, 0x9d, 0xd7, 0xd3, 0x22, 0xac, 0xe3, 0xb9, 0x7f, 0xea, 0xc0, 0xe0, 0x8c, 0x57, 0xdd, + 0x0a, 0x37, 0x37, 0xe9, 0x50, 0xd4, 0x3a, 0x51, 0x6a, 0x58, 0xd3, 0x86, 0x62, 0x4e, 0xc0, 0xb1, + 0xc2, 0x40, 0xeb, 0x30, 0xc0, 0x17, 0xbc, 0x58, 0x76, 0x3f, 0xaf, 0xf5, 0x47, 0x45, 0x2f, 0xb1, + 0xe9, 0xd0, 0x49, 0xfc, 0xe6, 0x14, 0x8f, 0x5e, 0x9a, 0x5a, 0x0c, 0x92, 0xd5, 0xa8, 0x92, 0x44, + 0x7e, 0x50, 0xe7, 0x27, 0xbf, 0x79, 0x46, 0x03, 0x0b, 0x5a, 0xb4, 0x1b, 0x2d, 0xef, 0x96, 0x64, + 0x27, 0xc4, 0x8f, 0xea, 0xc6, 0x4a, 0x5a, 0x84, 0x75, 0x3c, 0xba, 0x9b, 0x54, 0xbd, 0xb6, 0xd0, + 0x4b, 0xd4, 0x6e, 0x32, 0xeb, 0xb5, 0x31, 0x85, 0xbb, 0x7f, 0xe4, 0xc0, 0xf0, 0x8c, 0x17, 0xfb, + 0xd5, 0xbf, 0x44, 0xb2, 0xe9, 0xc3, 0x50, 0x9c, 0xf5, 0xaa, 0x0d, 0x82, 0xae, 0x67, 0xcf, 0xc4, + 0xa5, 0xcb, 0x8f, 0xe6, 0xb1, 0x59, 0x0e, 0xab, 0x5e, 0x73, 0x75, 0xe3, 0x45, 0x42, 0xd7, 0xfb, + 0x26, 0x89, 0x48, 0x50, 0x25, 0x33, 0xa3, 0xbd, 0x4e, 0xce, 0xee, 0xdb, 0x0e, 0x8c, 0xcd, 0x36, + 0x7d, 0x12, 0x24, 0xb3, 0x24, 0x4a, 0xd8, 0xc0, 0xd5, 0x61, 0xbc, 0xaa, 0x20, 0x47, 0x19, 0x3a, + 0x36, 0x99, 0x67, 0x33, 0x24, 0x70, 0x17, 0x51, 0x54, 0x83, 0x53, 0x1c, 0x96, 0x2e, 0x9a, 0x43, + 0x8d, 0x1f, 0x33, 0xde, 0xce, 0x9a, 0x14, 0x70, 0x96, 0xa4, 0xfb, 0x63, 0x07, 0x2e, 0xcc, 0x36, + 0x3b, 0x71, 0x42, 0xa2, 0x1b, 0x42, 0x58, 0x49, 0xed, 0x17, 0x7d, 0x14, 0x86, 0x5a, 0xd2, 0x8d, + 0xed, 0xdc, 0x61, 0x7e, 0x33, 0x71, 0x47, 0xb1, 0x69, 0x63, 0xf8, 0x00, 0xaf, 0x90, 0xc4, 0x4b, + 0x63, 0x2e, 0x52, 0x18, 0x56, 0x54, 0x51, 0x1b, 0xfa, 0xe3, 0x36, 0xa9, 0xda, 0x0b, 0x79, 0x93, + 0x7d, 0xa8, 0xb4, 0x49, 0x35, 0x15, 0xfb, 0xcc, 0x01, 0xcb, 0x38, 0xb9, 0xff, 0xdb, 0x81, 0xfb, + 0x7a, 0xf4, 0x77, 0xd9, 0x8f, 0x13, 0xf4, 0x42, 0x57, 0x9f, 0xa7, 0x0e, 0xd6, 0x67, 0x5a, 0x9b, + 0xf5, 0x58, 0xc9, 0x0b, 0x09, 0xd1, 0xfa, 0xfb, 0x3a, 0x14, 0xfd, 0x84, 0xb4, 0xa4, 0x95, 0xdc, + 0x82, 0x3d, 0xab, 0x47, 0x5f, 0x66, 0x46, 0x65, 0xe0, 0xe3, 0x22, 0xe5, 0x87, 0x39, 0x5b, 0x77, + 0x0b, 0x06, 0x66, 0xc3, 0x66, 0xa7, 0x15, 0x1c, 0x2c, 0x7c, 0x28, 0xd9, 0x69, 0x93, 0xec, 0x16, + 0xca, 0x4e, 0x07, 0xac, 0x44, 0xda, 0x95, 0xfa, 0xf2, 0xed, 0x4a, 0xee, 0xbf, 0x76, 0x80, 0xae, + 0xaa, 0x9a, 0x2f, 0xdc, 0xab, 0x9c, 0x1c, 0x67, 0xf8, 0x80, 0x4e, 0xee, 0xf6, 0xee, 0xe4, 0xa8, + 0x42, 0xd4, 0xe8, 0x7f, 0x18, 0x06, 0x62, 0x76, 0x62, 0x17, 0x6d, 0x98, 0x97, 0xea, 0x35, 0x3f, + 0xc7, 0xdf, 0xde, 0x9d, 0x3c, 0x50, 0x2c, 0xeb, 0x94, 0xa2, 0x2d, 0x3c, 0xc1, 0x82, 0x2a, 0xd5, + 0x07, 0x5b, 0x24, 0x8e, 0xbd, 0xba, 0x3c, 0x00, 0x2a, 0x7d, 0x70, 0x85, 0x83, 0xb1, 0x2c, 0x77, + 0xbf, 0xe8, 0xc0, 0xa8, 0xda, 0xdb, 0xa8, 0x76, 0x8f, 0xae, 0xe9, 0xbb, 0x20, 0x9f, 0x29, 0x0f, + 0xe4, 0x2d, 0xcc, 0x74, 0x9f, 0xdf, 0x7f, 0x93, 0x7c, 0x0f, 0x8c, 0xd4, 0x48, 0x9b, 0x04, 0x35, + 0x12, 0x54, 0xe9, 0xe9, 0x9c, 0xce, 0x90, 0xe1, 0x99, 0x71, 0x7a, 0x1c, 0x9d, 0xd3, 0xe0, 0xd8, + 0xc0, 0x72, 0xbf, 0xee, 0xc0, 0xbd, 0x8a, 0x5c, 0x85, 0x24, 0x98, 0x24, 0xd1, 0x8e, 0x8a, 0x5d, + 0x3d, 0xdc, 0x66, 0x76, 0x83, 0xaa, 0xc7, 0x49, 0xc4, 0x99, 0x1f, 0x6d, 0x37, 0x2b, 0x71, 0x65, + 0x9a, 0x11, 0xc1, 0x92, 0x9a, 0xfb, 0xeb, 0x7d, 0x70, 0x56, 0x6f, 0xa4, 0x12, 0x30, 0x9f, 0x70, + 0x00, 0xd4, 0x08, 0xd0, 0xfd, 0xba, 0xcf, 0x8e, 0x43, 0xcf, 0xf8, 0x52, 0xa9, 0x08, 0x52, 0xe0, + 0x18, 0x6b, 0x6c, 0xd1, 0x73, 0x30, 0xb2, 0x4d, 0x17, 0x05, 0x59, 0xa1, 0xda, 0x44, 0x5c, 0xee, + 0x63, 0xcd, 0x98, 0xcc, 0xfb, 0x98, 0xcf, 0xa6, 0x78, 0xa9, 0xb5, 0x40, 0x03, 0xc6, 0xd8, 0x20, + 0x45, 0x0f, 0x42, 0xa3, 0x91, 0xfe, 0x49, 0x84, 0xc9, 0xfe, 0x43, 0x16, 0xfb, 0x98, 0xfd, 0xea, + 0x33, 0xa7, 0xf7, 0x76, 0x27, 0x47, 0x0d, 0x10, 0x36, 0x1b, 0xe1, 0x3e, 0x07, 0x6c, 0x2c, 0xfc, + 0xa0, 0x43, 0x56, 0x03, 0xf4, 0x90, 0x34, 0xe1, 0x71, 0xb7, 0x8f, 0x92, 0x1c, 0xba, 0x19, 0x8f, + 0x1e, 0x75, 0x37, 0x3d, 0xbf, 0xc9, 0x62, 0x3a, 0x29, 0x96, 0x3a, 0xea, 0xce, 0x33, 0x28, 0x16, + 0xa5, 0xee, 0x14, 0x0c, 0xce, 0xd2, 0xbe, 0x93, 0x88, 0xd2, 0xd5, 0x43, 0xb1, 0x47, 0x8d, 0x50, + 0x6c, 0x19, 0x72, 0xbd, 0x0e, 0xe7, 0x66, 0x23, 0xe2, 0x25, 0xa4, 0xf2, 0xe4, 0x4c, 0xa7, 0xba, + 0x45, 0x12, 0x1e, 0xef, 0x16, 0xa3, 0xf7, 0xc1, 0x68, 0xc8, 0xb6, 0x8c, 0xe5, 0xb0, 0xba, 0xe5, + 0x07, 0x75, 0x61, 0x91, 0x3d, 0x27, 0xa8, 0x8c, 0xae, 0xea, 0x85, 0xd8, 0xc4, 0x75, 0xff, 0x73, + 0x01, 0x46, 0x66, 0xa3, 0x30, 0x90, 0x62, 0xf1, 0x04, 0xb6, 0xb2, 0xc4, 0xd8, 0xca, 0x2c, 0x78, + 0x63, 0xf5, 0xf6, 0xf7, 0xda, 0xce, 0xd0, 0xab, 0x4a, 0x44, 0xf6, 0xd9, 0x3a, 0xa1, 0x18, 0x7c, + 0x19, 0xed, 0xf4, 0x63, 0x9b, 0x02, 0xd4, 0xfd, 0x2f, 0x0e, 0x8c, 0xeb, 0xe8, 0x27, 0xb0, 0x83, + 0xc6, 0xe6, 0x0e, 0x7a, 0xcd, 0x6e, 0x7f, 0x7b, 0x6c, 0x9b, 0xdf, 0x19, 0x34, 0xfb, 0xc9, 0x5c, + 0xf1, 0x5f, 0x76, 0x60, 0xe4, 0xa6, 0x06, 0x10, 0x9d, 0xb5, 0xad, 0xc4, 0xbc, 0x4b, 0x8a, 0x19, + 0x1d, 0x7a, 0x3b, 0xf3, 0x1b, 0x1b, 0x2d, 0x41, 0x2f, 0xc0, 0xe9, 0x6a, 0x18, 0x54, 0x3b, 0x11, + 0xd5, 0x6f, 0x77, 0xd6, 0xd8, 0x55, 0x10, 0xb1, 0xc5, 0x4d, 0x09, 0x72, 0xa7, 0x67, 0xb3, 0x08, + 0xb7, 0xf3, 0x80, 0xb8, 0x9b, 0x10, 0xf7, 0x0e, 0xc4, 0x74, 0x13, 0x12, 0x27, 0x2c, 0xcd, 0x3b, + 0xc0, 0xc0, 0x58, 0x96, 0xa3, 0xeb, 0x70, 0x21, 0x4e, 0xbc, 0x28, 0xf1, 0x83, 0xfa, 0x1c, 0xf1, + 0x6a, 0x4d, 0x3f, 0xa0, 0x87, 0x83, 0x30, 0xa8, 0x71, 0xdf, 0x65, 0xdf, 0xcc, 0x7d, 0x7b, 0xbb, + 0x93, 0x17, 0x2a, 0xf9, 0x28, 0xb8, 0x57, 0x5d, 0xf4, 0x61, 0x98, 0x10, 0xfe, 0x87, 0xcd, 0x4e, + 0xf3, 0xe9, 0x70, 0x23, 0xbe, 0xea, 0xc7, 0xf4, 0xe0, 0xbe, 0xec, 0xb7, 0xfc, 0x84, 0x79, 0x28, + 0x8b, 0x33, 0x17, 0xf7, 0x76, 0x27, 0x27, 0x2a, 0x3d, 0xb1, 0xf0, 0x3e, 0x14, 0x10, 0x86, 0xf3, + 0x5c, 0x9c, 0x75, 0xd1, 0x1e, 0x64, 0xb4, 0x27, 0xf6, 0x76, 0x27, 0xcf, 0xcf, 0xe7, 0x62, 0xe0, + 0x1e, 0x35, 0xe9, 0x5e, 0x9c, 0xf8, 0x2d, 0xf2, 0x72, 0x18, 0x10, 0xe6, 0x50, 0xd4, 0xf6, 0xe2, + 0x75, 0x01, 0xc7, 0x0a, 0x03, 0xbd, 0x98, 0xce, 0x2d, 0xba, 0x00, 0x44, 0x5c, 0xcd, 0xe1, 0x65, + 0x16, 0x3b, 0x6c, 0xdc, 0xd0, 0x28, 0xb1, 0x80, 0x51, 0x83, 0x36, 0xfa, 0xa4, 0x03, 0x23, 0x71, + 0x12, 0xaa, 0xeb, 0x1b, 0x22, 0xb0, 0xc6, 0xc2, 0x44, 0xae, 0x68, 0x54, 0xb9, 0x2a, 0xa3, 0x43, + 0xb0, 0xc1, 0x15, 0xfd, 0x1c, 0x0c, 0xc7, 0xd5, 0x06, 0xa9, 0x75, 0x9a, 0x24, 0x2e, 0x97, 0x98, + 0xf6, 0xc3, 0x0e, 0x66, 0x15, 0x09, 0xc4, 0x69, 0x39, 0x55, 0x4e, 0x6f, 0x36, 0x48, 0xc0, 0x42, + 0x8b, 0x35, 0xe5, 0xf4, 0x46, 0x83, 0x04, 0x98, 0x95, 0xb8, 0x3f, 0xea, 0x03, 0xd4, 0x2d, 0xca, + 0xd0, 0x12, 0x0c, 0x78, 0xd5, 0xc4, 0xdf, 0x96, 0x61, 0x95, 0x0f, 0xe5, 0x6d, 0xf3, 0xd9, 0x03, + 0xa2, 0x92, 0x7f, 0xd3, 0xac, 0x2a, 0x16, 0x24, 0x50, 0x08, 0xa7, 0x9b, 0x5e, 0x9c, 0xc8, 0x16, + 0xd6, 0xe8, 0x87, 0x14, 0x1b, 0xc0, 0xcf, 0x1e, 0xec, 0x53, 0xd1, 0x1a, 0x33, 0xe7, 0xe8, 0x7a, + 0x5c, 0xce, 0x12, 0xc2, 0xdd, 0xb4, 0xd1, 0xc7, 0x98, 0xbe, 0xc4, 0x95, 0x59, 0xa9, 0xa8, 0x2c, + 0x59, 0xd1, 0x25, 0x38, 0x4d, 0x43, 0x57, 0x12, 0x6c, 0xb0, 0xc6, 0x12, 0x5d, 0x82, 0x61, 0xb6, + 0x6e, 0x48, 0x8d, 0xf0, 0xd5, 0xdf, 0x97, 0xaa, 0xb5, 0x15, 0x59, 0x80, 0x53, 0x1c, 0x4d, 0x6f, + 0xe0, 0x0b, 0xbe, 0x87, 0xde, 0x80, 0x9e, 0x82, 0x62, 0xbb, 0xe1, 0xc5, 0x32, 0x54, 0xdf, 0x95, + 0x72, 0x78, 0x8d, 0x02, 0x99, 0x68, 0xd2, 0xbe, 0x25, 0x03, 0x62, 0x5e, 0xc1, 0xfd, 0x37, 0x00, + 0x83, 0x73, 0xd3, 0x0b, 0xeb, 0x5e, 0xbc, 0x75, 0x80, 0x53, 0x0d, 0x5d, 0x86, 0x42, 0xfd, 0x14, + 0xa7, 0x8a, 0x74, 0x19, 0x0a, 0x38, 0x56, 0x18, 0x28, 0x80, 0x01, 0x3f, 0xa0, 0x92, 0xa7, 0x3c, + 0x66, 0xcb, 0xb1, 0xa0, 0x4e, 0x68, 0xcc, 0xf2, 0xb3, 0xc8, 0xa8, 0x63, 0xc1, 0x05, 0xbd, 0x0a, + 0xc3, 0x9e, 0xbc, 0x29, 0x25, 0x76, 0xf4, 0x25, 0x1b, 0x16, 0x73, 0x41, 0x52, 0x8f, 0x99, 0x12, + 0x20, 0x9c, 0x32, 0x44, 0x1f, 0x77, 0xa0, 0x24, 0xbb, 0x8e, 0xc9, 0xa6, 0x70, 0x66, 0xaf, 0xd8, + 0xeb, 0x33, 0x26, 0x9b, 0x3c, 0xa0, 0x46, 0x03, 0x60, 0x9d, 0x65, 0xd7, 0x29, 0xa8, 0x78, 0x90, + 0x53, 0x10, 0xba, 0x09, 0xc3, 0x37, 0xfd, 0xa4, 0xc1, 0xf6, 0x6c, 0xe1, 0x44, 0x9b, 0xbf, 0xfb, + 0x56, 0x53, 0x72, 0xe9, 0x88, 0xdd, 0x90, 0x0c, 0x70, 0xca, 0x8b, 0x2e, 0x07, 0xfa, 0x83, 0xdd, + 0x34, 0x63, 0x7b, 0xc3, 0xb0, 0x59, 0x81, 0x15, 0xe0, 0x14, 0x87, 0x0e, 0xf1, 0x08, 0xfd, 0x55, + 0x21, 0x2f, 0x75, 0xa8, 0x68, 0x11, 0xb1, 0x25, 0x16, 0xe6, 0x95, 0xa4, 0xc8, 0x07, 0xeb, 0x86, + 0xc6, 0x03, 0x1b, 0x1c, 0x95, 0xe8, 0x1c, 0xee, 0x25, 0x3a, 0xd1, 0xab, 0xfc, 0x54, 0xc6, 0x8f, + 0x07, 0x62, 0x37, 0x58, 0xb6, 0x73, 0x62, 0xe1, 0x34, 0xf9, 0xed, 0x8d, 0xf4, 0x37, 0xd6, 0xf8, + 0x51, 0x89, 0x11, 0x06, 0x57, 0x6e, 0xf9, 0x89, 0xb8, 0x73, 0xa2, 0x24, 0xc6, 0x2a, 0x83, 0x62, + 0x51, 0xca, 0x83, 0x35, 0xe8, 0x24, 0x88, 0xc5, 0x2e, 0xa0, 0x05, 0x6b, 0x30, 0x30, 0x96, 0xe5, + 0xe8, 0xef, 0x39, 0x50, 0x6c, 0x84, 0xe1, 0x56, 0x5c, 0x1e, 0x65, 0x93, 0xc3, 0x82, 0x96, 0x2c, + 0x24, 0xce, 0xd4, 0x55, 0x4a, 0xd6, 0xbc, 0x45, 0x57, 0x64, 0xb0, 0xdb, 0xbb, 0x93, 0x63, 0xcb, + 0xfe, 0x26, 0xa9, 0xee, 0x54, 0x9b, 0x84, 0x41, 0xde, 0x78, 0x5b, 0x83, 0x5c, 0xd9, 0x26, 0x41, + 0x82, 0x79, 0xab, 0x26, 0x3e, 0xeb, 0x00, 0xa4, 0x84, 0x72, 0xbc, 0xa2, 0xc4, 0x8c, 0x23, 0xb0, + 0x70, 0x44, 0x36, 0x9a, 0xa6, 0xbb, 0x59, 0xff, 0x9d, 0x03, 0x25, 0xda, 0x39, 0x29, 0x02, 0x1f, + 0x81, 0x81, 0xc4, 0x8b, 0xea, 0x44, 0x7a, 0x06, 0xd4, 0xe7, 0x58, 0x67, 0x50, 0x2c, 0x4a, 0x51, + 0x00, 0xc5, 0xc4, 0x8b, 0xb7, 0xa4, 0x62, 0xbe, 0x68, 0x6d, 0x88, 0x53, 0x9d, 0x9c, 0xfe, 0x8a, + 0x31, 0x67, 0x83, 0x1e, 0x85, 0x21, 0xba, 0x75, 0xcc, 0x7b, 0xb1, 0x0c, 0xd6, 0x19, 0xa1, 0x42, + 0x7c, 0x5e, 0xc0, 0xb0, 0x2a, 0x75, 0x7f, 0xb3, 0x00, 0xfd, 0x73, 0xfc, 0x88, 0x36, 0x10, 0x87, + 0x9d, 0xa8, 0x4a, 0x84, 0xaa, 0x6e, 0x61, 0x4e, 0x53, 0xba, 0x15, 0x46, 0x53, 0x3b, 0x24, 0xb1, + 0xdf, 0x58, 0xf0, 0x42, 0x6f, 0x39, 0x30, 0x96, 0x44, 0x5e, 0x10, 0x6f, 0x32, 0x1f, 0x8c, 0x1f, + 0x06, 0x62, 0x88, 0x2c, 0xcc, 0xc2, 0x75, 0x83, 0x6e, 0x25, 0x21, 0xed, 0xd4, 0x15, 0x64, 0x96, + 0xe1, 0x4c, 0x1b, 0xdc, 0xdf, 0x72, 0x00, 0xd2, 0xd6, 0xa3, 0x37, 0x1d, 0x18, 0xf5, 0xf4, 0x20, + 0x55, 0x31, 0x46, 0xab, 0xf6, 0x1c, 0xb6, 0x8c, 0x2c, 0xb7, 0x4e, 0x18, 0x20, 0x6c, 0x32, 0x76, + 0xdf, 0x0b, 0x45, 0xb6, 0x3a, 0xe8, 0x5e, 0x1d, 0x0b, 0x6b, 0x76, 0xd6, 0x7c, 0x25, 0xad, 0xdc, + 0x58, 0x61, 0xb8, 0x2f, 0xc0, 0xd8, 0x95, 0x5b, 0xa4, 0xda, 0x49, 0xc2, 0x88, 0xdb, 0xf2, 0x7b, + 0x5c, 0x85, 0x72, 0x8e, 0x74, 0x15, 0xea, 0xdb, 0x0e, 0x94, 0xb4, 0x88, 0x45, 0xba, 0x53, 0xd7, + 0x67, 0x2b, 0xdc, 0x64, 0x21, 0x86, 0x6a, 0xc9, 0x4a, 0x4c, 0x24, 0x27, 0x99, 0x6e, 0x23, 0x0a, + 0x84, 0x53, 0x86, 0x77, 0x88, 0xe8, 0x73, 0xff, 0xc0, 0x81, 0x73, 0xb9, 0xe1, 0x95, 0xef, 0x70, + 0xb3, 0x0d, 0xaf, 0x7a, 0xe1, 0x00, 0x5e, 0xf5, 0xef, 0x38, 0x90, 0x52, 0xa2, 0xa2, 0x68, 0x23, + 0x6d, 0xb9, 0x26, 0x8a, 0x04, 0x27, 0x51, 0x8a, 0x5e, 0x85, 0x0b, 0xe6, 0x17, 0x3c, 0xa2, 0x07, + 0x85, 0x1f, 0x4e, 0xf3, 0x29, 0xe1, 0x5e, 0x2c, 0xdc, 0xaf, 0x38, 0x50, 0x5c, 0xf0, 0x3a, 0x75, + 0x72, 0x20, 0x03, 0x18, 0x95, 0x63, 0x11, 0xf1, 0x9a, 0x89, 0x3c, 0x3a, 0x08, 0x39, 0x86, 0x05, + 0x0c, 0xab, 0x52, 0x34, 0x0d, 0xc3, 0x61, 0x9b, 0x18, 0x4e, 0xc1, 0x87, 0xe4, 0xe8, 0xad, 0xca, + 0x02, 0xba, 0xed, 0x30, 0xee, 0x0a, 0x82, 0xd3, 0x5a, 0xee, 0x57, 0x07, 0xa0, 0xa4, 0x5d, 0xff, + 0xa1, 0xba, 0x40, 0x44, 0xda, 0x61, 0x56, 0x5f, 0xa6, 0x13, 0x06, 0xb3, 0x12, 0xba, 0x06, 0x23, + 0xb2, 0xed, 0xc7, 0x5c, 0x6c, 0x19, 0x6b, 0x10, 0x0b, 0x38, 0x56, 0x18, 0x68, 0x12, 0x8a, 0x35, + 0xd2, 0x4e, 0x1a, 0xac, 0x79, 0xfd, 0x3c, 0x1a, 0x70, 0x8e, 0x02, 0x30, 0x87, 0x53, 0x84, 0x4d, + 0x92, 0x54, 0x1b, 0xcc, 0xd6, 0x2b, 0xc2, 0x05, 0xe7, 0x29, 0x00, 0x73, 0x78, 0x8e, 0x5f, 0xb2, + 0x78, 0xfc, 0x7e, 0xc9, 0x01, 0xcb, 0x7e, 0x49, 0xd4, 0x86, 0x33, 0x71, 0xdc, 0x58, 0x8b, 0xfc, + 0x6d, 0x2f, 0x21, 0xe9, 0xec, 0x1b, 0x3c, 0x0c, 0x9f, 0x0b, 0xec, 0x42, 0x7e, 0xe5, 0x6a, 0x96, + 0x0a, 0xce, 0x23, 0x8d, 0x2a, 0x70, 0xce, 0x0f, 0x62, 0x52, 0xed, 0x44, 0x64, 0xb1, 0x1e, 0x84, + 0x11, 0xb9, 0x1a, 0xc6, 0x94, 0x9c, 0xb8, 0x4e, 0xac, 0x02, 0x68, 0x17, 0xf3, 0x90, 0x70, 0x7e, + 0x5d, 0xb4, 0x00, 0xa7, 0x6b, 0x7e, 0xec, 0x6d, 0x34, 0x49, 0xa5, 0xb3, 0xd1, 0x0a, 0xf9, 0xd1, + 0x7c, 0x98, 0x11, 0xbc, 0x57, 0xda, 0x91, 0xe6, 0xb2, 0x08, 0xb8, 0xbb, 0x0e, 0x7a, 0x0a, 0x46, + 0x62, 0x3f, 0xa8, 0x37, 0xc9, 0x4c, 0xe4, 0x05, 0xd5, 0x86, 0xb8, 0x87, 0xac, 0x2c, 0xe8, 0x15, + 0xad, 0x0c, 0x1b, 0x98, 0x6c, 0xcd, 0xf3, 0x3a, 0x19, 0x6d, 0x50, 0x60, 0x8b, 0x52, 0x34, 0x0d, + 0xa7, 0x64, 0x1f, 0x2a, 0x5b, 0x7e, 0x7b, 0x7d, 0xb9, 0xc2, 0xb4, 0xc2, 0xa1, 0x34, 0x3c, 0x68, + 0xd1, 0x2c, 0xc6, 0x59, 0x7c, 0xf7, 0x07, 0x0e, 0x8c, 0xe8, 0xf1, 0xf7, 0x54, 0x59, 0x87, 0xc6, + 0xdc, 0x7c, 0x85, 0x6f, 0x27, 0xf6, 0x94, 0x86, 0xab, 0x8a, 0x66, 0x7a, 0xde, 0x4e, 0x61, 0x58, + 0xe3, 0x79, 0x80, 0x3b, 0xfc, 0x0f, 0x41, 0x71, 0x33, 0xa4, 0x3a, 0x4d, 0x9f, 0x69, 0xbd, 0x9f, + 0xa7, 0x40, 0xcc, 0xcb, 0xdc, 0xff, 0xee, 0xc0, 0xf9, 0xfc, 0xab, 0x05, 0x3f, 0x0d, 0x9d, 0xbc, + 0x0c, 0x40, 0xbb, 0x62, 0xec, 0x0b, 0x5a, 0x16, 0x0f, 0x59, 0x82, 0x35, 0xac, 0x83, 0x75, 0xfb, + 0xdf, 0x16, 0x40, 0xe3, 0x89, 0x3e, 0xe7, 0xc0, 0x28, 0x65, 0xbb, 0x14, 0x6d, 0x18, 0xbd, 0x5d, + 0xb5, 0xd3, 0x5b, 0x45, 0x36, 0x75, 0x52, 0x18, 0x60, 0x6c, 0x32, 0x47, 0x3f, 0x07, 0xc3, 0x5e, + 0xad, 0x16, 0x91, 0x38, 0x56, 0xee, 0x3e, 0x66, 0xf0, 0x9a, 0x96, 0x40, 0x9c, 0x96, 0x53, 0x39, + 0xdc, 0xa8, 0x6d, 0xc6, 0x54, 0xb4, 0x09, 0xd9, 0xaf, 0xe4, 0x30, 0x65, 0x42, 0xe1, 0x58, 0x61, + 0xa0, 0x67, 0xe1, 0x7c, 0xcd, 0x4b, 0x3c, 0xae, 0x02, 0x92, 0x68, 0x2d, 0x0a, 0x13, 0x52, 0x65, + 0xfb, 0x06, 0x8f, 0x0e, 0xb9, 0x28, 0xea, 0x9e, 0x9f, 0xcb, 0xc5, 0xc2, 0x3d, 0x6a, 0xbb, 0xbf, + 0xd6, 0x0f, 0x66, 0x9f, 0x50, 0x0d, 0x4e, 0x6d, 0x45, 0x1b, 0xb3, 0x2c, 0x0a, 0xe3, 0x28, 0xd1, + 0x10, 0x2c, 0x4a, 0x61, 0xc9, 0xa4, 0x80, 0xb3, 0x24, 0x05, 0x97, 0x25, 0xb2, 0x93, 0x78, 0x1b, + 0x47, 0x8e, 0x85, 0x58, 0x32, 0x29, 0xe0, 0x2c, 0x49, 0xf4, 0x5e, 0x28, 0x6d, 0x45, 0x1b, 0x72, + 0xf7, 0xc8, 0xc6, 0xdd, 0x2c, 0xa5, 0x45, 0x58, 0xc7, 0xa3, 0x9f, 0x66, 0x2b, 0xda, 0xa0, 0x1b, + 0xb6, 0xcc, 0x95, 0xa1, 0x3e, 0xcd, 0x92, 0x80, 0x63, 0x85, 0x81, 0xda, 0x80, 0xb6, 0xe4, 0xe8, + 0xa9, 0x98, 0x13, 0xb1, 0xc9, 0x3d, 0xda, 0xc3, 0x81, 0xcc, 0x91, 0xf4, 0x0e, 0xb1, 0xbb, 0x00, + 0x4b, 0x5d, 0x74, 0x70, 0x0e, 0x6d, 0xf4, 0x1c, 0x5c, 0xd8, 0x8a, 0x36, 0x84, 0x1e, 0xb3, 0x16, + 0xf9, 0x41, 0xd5, 0x6f, 0x1b, 0x79, 0x31, 0x26, 0x45, 0x73, 0x2f, 0x2c, 0xe5, 0xa3, 0xe1, 0x5e, + 0xf5, 0xdd, 0xdf, 0xed, 0x07, 0x76, 0xa3, 0x97, 0x8a, 0xe9, 0x16, 0x49, 0x1a, 0x61, 0x2d, 0xab, + 0x9a, 0xad, 0x30, 0x28, 0x16, 0xa5, 0x32, 0xe2, 0xb5, 0xd0, 0x23, 0xe2, 0xf5, 0x26, 0x0c, 0x36, + 0x88, 0x57, 0x23, 0x91, 0x34, 0x6e, 0x2e, 0xdb, 0xb9, 0x83, 0x7c, 0x95, 0x11, 0x4d, 0x2d, 0x04, + 0xfc, 0x77, 0x8c, 0x25, 0x37, 0xf4, 0x8b, 0x30, 0x46, 0x75, 0xac, 0xb0, 0x93, 0x48, 0xff, 0x04, + 0x37, 0x6e, 0xb2, 0xcd, 0x7e, 0xdd, 0x28, 0xc1, 0x19, 0x4c, 0x34, 0x07, 0xe3, 0xc2, 0x97, 0xa0, + 0x8c, 0xa6, 0x62, 0x60, 0x55, 0xc2, 0x92, 0x4a, 0xa6, 0x1c, 0x77, 0xd5, 0x60, 0x11, 0x8b, 0x61, + 0x8d, 0x3b, 0x88, 0xf5, 0x88, 0xc5, 0xb0, 0xb6, 0x83, 0x59, 0x09, 0x7a, 0x19, 0x86, 0xe8, 0xdf, + 0xf9, 0x28, 0x6c, 0x09, 0xb3, 0xd1, 0x9a, 0x9d, 0xd1, 0xa1, 0x3c, 0xc4, 0x21, 0x96, 0xe9, 0x9e, + 0x33, 0x82, 0x0b, 0x56, 0xfc, 0xe8, 0x51, 0x4a, 0xdf, 0x2e, 0x9f, 0x25, 0x91, 0xbf, 0xb9, 0xc3, + 0xf4, 0x99, 0xa1, 0xf4, 0x28, 0xb5, 0xd8, 0x85, 0x81, 0x73, 0x6a, 0xb9, 0x9f, 0x2b, 0xc0, 0x88, + 0x7e, 0x31, 0xfc, 0x4e, 0x61, 0xd0, 0x71, 0x3a, 0x29, 0xf8, 0xc1, 0xf9, 0xaa, 0x85, 0x6e, 0xdf, + 0x69, 0x42, 0x34, 0xa0, 0xdf, 0xeb, 0x08, 0x45, 0xd6, 0x8a, 0x7d, 0x8e, 0xf5, 0xb8, 0x93, 0x34, + 0xf8, 0x5d, 0x3e, 0x16, 0xa0, 0xcc, 0x38, 0xb8, 0x9f, 0xea, 0x83, 0x21, 0x59, 0x88, 0x3e, 0xe9, + 0x00, 0xa4, 0x91, 0x60, 0x42, 0x94, 0xae, 0xd9, 0x08, 0x13, 0xd2, 0x83, 0xd8, 0x34, 0x33, 0xbf, + 0x82, 0x63, 0x8d, 0x2f, 0x4a, 0x60, 0x20, 0xa4, 0x8d, 0xbb, 0x6c, 0x2f, 0xb9, 0xc1, 0x2a, 0x65, + 0x7c, 0x99, 0x71, 0x4f, 0x2d, 0x7a, 0x0c, 0x86, 0x05, 0x2f, 0x7a, 0x38, 0xdd, 0x90, 0x01, 0x8a, + 0xf6, 0xac, 0xdf, 0x2a, 0xe6, 0x31, 0x3d, 0x6b, 0x2a, 0x10, 0x4e, 0x19, 0xba, 0x4f, 0xc0, 0x98, + 0xb9, 0x18, 0xe8, 0x61, 0x65, 0x63, 0x27, 0x21, 0xdc, 0x14, 0x32, 0xc2, 0x0f, 0x2b, 0x33, 0x14, + 0x80, 0x39, 0xdc, 0xfd, 0xbe, 0x03, 0x90, 0x8a, 0x97, 0x03, 0x78, 0x1f, 0x1e, 0xd2, 0xed, 0x78, + 0xbd, 0x4e, 0x84, 0x1f, 0x83, 0x61, 0xf6, 0x0f, 0x5b, 0xe8, 0x7d, 0xb6, 0xc2, 0x09, 0xd2, 0x76, + 0x8a, 0xa5, 0xce, 0x74, 0x8d, 0x67, 0x25, 0x23, 0x9c, 0xf2, 0x74, 0x43, 0x18, 0xcf, 0x62, 0xa3, + 0x0f, 0xc1, 0x48, 0x2c, 0xb7, 0xd5, 0xf4, 0xc2, 0xdf, 0x01, 0xb7, 0x5f, 0xee, 0xfa, 0xd3, 0xaa, + 0x63, 0x83, 0x98, 0xbb, 0x0a, 0x03, 0x56, 0x87, 0xd0, 0xfd, 0xa6, 0x03, 0xc3, 0xcc, 0xfb, 0x5a, + 0x8f, 0xbc, 0x56, 0x5a, 0xa5, 0x6f, 0x9f, 0x51, 0x8f, 0x61, 0x90, 0x9b, 0x0f, 0x64, 0x1c, 0x92, + 0x05, 0x29, 0xc3, 0x73, 0x12, 0xa6, 0x52, 0x86, 0xdb, 0x29, 0x62, 0x2c, 0x39, 0xb9, 0x9f, 0x2e, + 0xc0, 0xc0, 0x62, 0xd0, 0xee, 0xfc, 0x95, 0xcf, 0x8b, 0xb7, 0x02, 0xfd, 0x8b, 0x09, 0x69, 0x99, + 0xe9, 0x1b, 0x47, 0x66, 0x1e, 0xd6, 0x53, 0x37, 0x96, 0xcd, 0xd4, 0x8d, 0xd8, 0xbb, 0x29, 0xc3, + 0xf4, 0x84, 0xf9, 0x3a, 0xbd, 0xf4, 0xf8, 0x38, 0x0c, 0x2f, 0x7b, 0x1b, 0xa4, 0xb9, 0x44, 0x76, + 0xd8, 0x15, 0x45, 0x1e, 0x32, 0xe2, 0xa4, 0x36, 0x07, 0x23, 0xbc, 0x63, 0x0e, 0xc6, 0x18, 0xb6, + 0x5a, 0x0c, 0xf4, 0x44, 0x42, 0xd2, 0xdc, 0x57, 0x8e, 0x79, 0x22, 0xd1, 0xf2, 0x5e, 0x69, 0x58, + 0xee, 0x14, 0x94, 0x52, 0x2a, 0x07, 0xe0, 0xfa, 0x93, 0x02, 0x8c, 0x1a, 0x56, 0x78, 0xc3, 0x37, + 0xe9, 0xdc, 0xd1, 0x37, 0x69, 0xf8, 0x0a, 0x0b, 0xef, 0xb4, 0xaf, 0xb0, 0xef, 0xe4, 0x7d, 0x85, + 0xe6, 0x47, 0xea, 0x3f, 0xd0, 0x47, 0x7a, 0xcb, 0x81, 0xfe, 0x65, 0x3f, 0xd8, 0x3a, 0x98, 0xa0, + 0x89, 0xab, 0x61, 0xbb, 0x4b, 0xd0, 0x54, 0x28, 0x10, 0xf3, 0x32, 0xa9, 0xba, 0xf4, 0xf5, 0x50, + 0x5d, 0x52, 0xe7, 0x49, 0xff, 0x7e, 0xce, 0x13, 0xf7, 0x93, 0x0e, 0x8c, 0xac, 0x78, 0x81, 0xbf, + 0x49, 0xe2, 0x84, 0x4d, 0xc0, 0xe4, 0x58, 0xef, 0xb4, 0x8d, 0xf4, 0xc8, 0x0e, 0xf1, 0x86, 0x03, + 0xa7, 0x57, 0x48, 0x2b, 0xf4, 0x5f, 0xf6, 0xd2, 0x70, 0x59, 0xda, 0xc7, 0x86, 0x9f, 0x88, 0xe8, + 0x40, 0xd5, 0xc7, 0xab, 0x7e, 0x82, 0x29, 0xfc, 0x0e, 0xb6, 0x68, 0x76, 0x5b, 0x84, 0x9e, 0xe4, + 0xb4, 0x7b, 0x96, 0x69, 0x20, 0xac, 0x2c, 0xc0, 0x29, 0x8e, 0xfb, 0x7b, 0x0e, 0x0c, 0xf2, 0x46, + 0xa8, 0x08, 0x63, 0xa7, 0x07, 0xed, 0x06, 0x14, 0x59, 0x3d, 0x31, 0xfd, 0x17, 0x2c, 0xe8, 0x49, + 0x94, 0x1c, 0x5f, 0xac, 0xec, 0x5f, 0xcc, 0x19, 0xb0, 0xf3, 0x8d, 0x77, 0x6b, 0x5a, 0x45, 0x0a, + 0xa7, 0xe7, 0x1b, 0x06, 0xc5, 0xa2, 0xd4, 0xfd, 0x6a, 0x1f, 0x0c, 0xa9, 0x54, 0x6c, 0x2c, 0x65, + 0x45, 0x10, 0x84, 0x89, 0xc7, 0xe3, 0x35, 0xb8, 0x50, 0xff, 0x90, 0xbd, 0x54, 0x70, 0x53, 0xd3, + 0x29, 0x75, 0xee, 0x83, 0x54, 0xa7, 0x55, 0xad, 0x04, 0xeb, 0x8d, 0x40, 0xaf, 0xc3, 0x40, 0x93, + 0x8a, 0x29, 0x29, 0xe3, 0x9f, 0xb5, 0xd8, 0x1c, 0x26, 0xff, 0x44, 0x4b, 0xd4, 0x08, 0x71, 0x20, + 0x16, 0x5c, 0x27, 0xde, 0x0f, 0xe3, 0xd9, 0x56, 0xdf, 0xe9, 0x1a, 0xe8, 0xb0, 0x7e, 0x89, 0xf4, + 0x6f, 0x08, 0x31, 0x7b, 0xf8, 0xaa, 0xee, 0x33, 0x50, 0x5a, 0x21, 0x49, 0xe4, 0x57, 0x19, 0x81, + 0x3b, 0x4d, 0xae, 0x03, 0x29, 0x1a, 0x9f, 0x61, 0x93, 0x95, 0xd2, 0x8c, 0xd1, 0xab, 0x00, 0xed, + 0x28, 0xa4, 0x07, 0x5d, 0xd2, 0x91, 0x1f, 0xdb, 0x82, 0xe2, 0xbc, 0xa6, 0x68, 0x72, 0xb7, 0x79, + 0xfa, 0x1b, 0x6b, 0xfc, 0xdc, 0x37, 0x1d, 0x28, 0xae, 0x74, 0x12, 0x72, 0xeb, 0x00, 0xa2, 0xed, + 0xd0, 0x89, 0x11, 0x1e, 0x87, 0x21, 0xfa, 0x81, 0x37, 0xbc, 0x58, 0x1a, 0xdc, 0xd2, 0x40, 0x72, + 0x01, 0xc7, 0x0a, 0xc3, 0xfd, 0x10, 0x8c, 0xb0, 0x96, 0x5c, 0x0d, 0x9b, 0x74, 0xbb, 0xa6, 0x23, + 0xd9, 0xa2, 0xbf, 0xb3, 0x7e, 0x10, 0x86, 0x84, 0x79, 0x19, 0x5d, 0x61, 0x8d, 0xb0, 0x59, 0x53, + 0x57, 0xca, 0xd4, 0xfc, 0xb9, 0xca, 0xa0, 0x58, 0x94, 0xba, 0x9f, 0x28, 0x40, 0x89, 0x55, 0x14, + 0xd2, 0x69, 0x07, 0x06, 0x1b, 0x9c, 0x8f, 0x18, 0x72, 0x0b, 0x71, 0x6b, 0x7a, 0xeb, 0xb5, 0x33, + 0x22, 0x07, 0x60, 0xc9, 0x8f, 0xb2, 0xbe, 0xe9, 0xf9, 0x09, 0x65, 0x5d, 0x38, 0x5e, 0xd6, 0x37, + 0x38, 0x1b, 0x2c, 0xf9, 0xb9, 0xbf, 0x0c, 0xec, 0xaa, 0xf6, 0x7c, 0xd3, 0xab, 0xf3, 0x91, 0x0b, + 0xb7, 0x48, 0x4d, 0x88, 0x68, 0x6d, 0xe4, 0x28, 0x14, 0x8b, 0x52, 0x7e, 0xfd, 0x35, 0x89, 0x7c, + 0x15, 0xc3, 0xad, 0x5d, 0x7f, 0x65, 0x60, 0x19, 0xb1, 0x5f, 0x73, 0xbf, 0x58, 0x00, 0x60, 0x79, + 0xfe, 0xf8, 0x0d, 0xeb, 0x9f, 0x97, 0xc1, 0x59, 0xa6, 0xef, 0x54, 0x05, 0x67, 0xb1, 0x3b, 0xe4, + 0x7a, 0x50, 0x96, 0x7e, 0xb5, 0xa2, 0xb0, 0xff, 0xd5, 0x0a, 0xd4, 0x86, 0xc1, 0xb0, 0x93, 0x50, + 0x1d, 0x58, 0x28, 0x11, 0x16, 0x42, 0x07, 0x56, 0x39, 0x41, 0x7e, 0x1f, 0x41, 0xfc, 0xc0, 0x92, + 0x0d, 0x7a, 0x0a, 0x86, 0xda, 0x51, 0x58, 0xa7, 0x3a, 0x81, 0xd8, 0x97, 0xef, 0x97, 0xb3, 0x79, + 0x4d, 0xc0, 0x6f, 0x6b, 0xff, 0x63, 0x85, 0xed, 0xfe, 0x13, 0xc4, 0xc7, 0x45, 0xcc, 0xbd, 0x09, + 0x28, 0xf8, 0xd2, 0xe2, 0x05, 0x82, 0x44, 0x61, 0x71, 0x0e, 0x17, 0xfc, 0x9a, 0x5a, 0x85, 0x85, + 0x9e, 0xab, 0xf0, 0xbd, 0x50, 0xaa, 0xf9, 0x71, 0xbb, 0xe9, 0xed, 0x5c, 0xcb, 0x31, 0x37, 0xce, + 0xa5, 0x45, 0x58, 0xc7, 0x43, 0x8f, 0x8b, 0x8b, 0x34, 0xfd, 0x86, 0x89, 0x49, 0x5e, 0xa4, 0x49, + 0x6f, 0xf0, 0xf3, 0x3b, 0x34, 0xd9, 0x4c, 0x07, 0xc5, 0x03, 0x67, 0x3a, 0xc8, 0x6a, 0x78, 0x03, + 0x27, 0xaf, 0xe1, 0xbd, 0x0f, 0x46, 0xe5, 0x4f, 0xa6, 0x75, 0x95, 0xcf, 0xb2, 0xd6, 0x2b, 0xf3, + 0xfa, 0xba, 0x5e, 0x88, 0x4d, 0xdc, 0x74, 0xd2, 0x0e, 0x1e, 0x74, 0xd2, 0x5e, 0x06, 0xd8, 0x08, + 0x3b, 0x41, 0xcd, 0x8b, 0x76, 0x16, 0xe7, 0x44, 0x90, 0xae, 0x52, 0x28, 0x67, 0x54, 0x09, 0xd6, + 0xb0, 0xf4, 0x89, 0x3e, 0x7c, 0x87, 0x89, 0xfe, 0x21, 0x18, 0x66, 0x01, 0xcd, 0xa4, 0x36, 0x9d, + 0x88, 0xa8, 0xaa, 0xc3, 0x44, 0x89, 0xa6, 0x71, 0x96, 0x92, 0x08, 0x4e, 0xe9, 0xa1, 0x0f, 0x03, + 0x6c, 0xfa, 0x81, 0x1f, 0x37, 0x18, 0xf5, 0xd2, 0xa1, 0xa9, 0xab, 0x7e, 0xce, 0x2b, 0x2a, 0x58, + 0xa3, 0x88, 0x5e, 0x80, 0xd3, 0x24, 0x4e, 0xfc, 0x96, 0x97, 0x90, 0x9a, 0xba, 0x99, 0x5a, 0x66, + 0x36, 0x52, 0x15, 0x52, 0x7e, 0x25, 0x8b, 0x70, 0x3b, 0x0f, 0x88, 0xbb, 0x09, 0x19, 0x2b, 0x72, + 0xe2, 0x30, 0x2b, 0x12, 0xfd, 0x2f, 0x07, 0x4e, 0x47, 0x84, 0x87, 0xda, 0xc4, 0xaa, 0x61, 0xe7, + 0x98, 0x38, 0xae, 0xda, 0x48, 0xa1, 0xaf, 0xb2, 0xc6, 0xe0, 0x2c, 0x17, 0xae, 0xe7, 0x10, 0xd9, + 0xfb, 0xae, 0xf2, 0xdb, 0x79, 0xc0, 0x37, 0xde, 0x9e, 0x9c, 0xec, 0x7e, 0xca, 0x41, 0x11, 0xa7, + 0x2b, 0xef, 0x6f, 0xbf, 0x3d, 0x39, 0x2e, 0x7f, 0xa7, 0x83, 0xd6, 0xd5, 0x49, 0xba, 0xad, 0xb6, + 0xc3, 0xda, 0xe2, 0x9a, 0x08, 0x7f, 0x53, 0xdb, 0xea, 0x1a, 0x05, 0x62, 0x5e, 0x86, 0x1e, 0xa5, + 0x3b, 0x37, 0x69, 0x85, 0x81, 0x4a, 0x86, 0x3c, 0xc2, 0x77, 0x6d, 0x0e, 0xc3, 0xaa, 0x94, 0x1e, + 0x39, 0x02, 0xb1, 0xa5, 0x94, 0xef, 0xb3, 0x75, 0xe4, 0x90, 0x9b, 0x14, 0xe7, 0x2a, 0x7f, 0x61, + 0xc5, 0x09, 0x35, 0x61, 0xc0, 0x67, 0x06, 0x10, 0x11, 0x61, 0x6b, 0xc1, 0xea, 0xc2, 0x0d, 0x2a, + 0x32, 0xbe, 0x96, 0x89, 0x7e, 0xc1, 0x43, 0xdf, 0x6b, 0x4e, 0x9d, 0xcc, 0x5e, 0xf3, 0x28, 0x0c, + 0x55, 0x1b, 0x7e, 0xb3, 0x16, 0x91, 0xa0, 0x3c, 0xce, 0x2c, 0x01, 0x6c, 0x24, 0x66, 0x05, 0x0c, + 0xab, 0x52, 0xf4, 0xd7, 0x61, 0x34, 0xec, 0x24, 0x4c, 0xb4, 0xd0, 0x71, 0x8a, 0xcb, 0xa7, 0x19, + 0x3a, 0x8b, 0x97, 0x5a, 0xd5, 0x0b, 0xb0, 0x89, 0x47, 0x45, 0x7c, 0x23, 0x8c, 0x59, 0x82, 0x23, + 0x26, 0xe2, 0xcf, 0x9b, 0x22, 0xfe, 0xaa, 0x56, 0x86, 0x0d, 0x4c, 0xf4, 0x65, 0x07, 0x4e, 0xb7, + 0xb2, 0xe7, 0xbd, 0xf2, 0x05, 0x36, 0x32, 0x15, 0x1b, 0xe7, 0x82, 0x0c, 0x69, 0x1e, 0xe9, 0xde, + 0x05, 0xc6, 0xdd, 0x8d, 0x60, 0xa9, 0xc6, 0xe2, 0x9d, 0xa0, 0xda, 0x88, 0xc2, 0xc0, 0x6c, 0xde, + 0xbd, 0xb6, 0x6e, 0xd0, 0xb1, 0xb5, 0x9d, 0xc7, 0x62, 0xe6, 0xde, 0xbd, 0xdd, 0xc9, 0x73, 0xb9, + 0x45, 0x38, 0xbf, 0x51, 0xe8, 0x83, 0x30, 0x9e, 0x78, 0xf1, 0x16, 0xd7, 0x97, 0x68, 0x4d, 0x52, + 0x2b, 0xdf, 0xcf, 0x83, 0x1c, 0xf6, 0x76, 0x27, 0xc7, 0xd7, 0x33, 0x65, 0xb8, 0x0b, 0x1b, 0x2d, + 0xc0, 0x69, 0x1e, 0x0a, 0xbf, 0x16, 0xd6, 0x30, 0x61, 0x82, 0x3d, 0x2e, 0x3f, 0xc0, 0xae, 0x9b, + 0xa8, 0x58, 0x8b, 0xf9, 0x2c, 0x02, 0xee, 0xae, 0x83, 0xe6, 0x60, 0x3c, 0x22, 0xf2, 0xe6, 0xcc, + 0x5a, 0x58, 0xbb, 0xbe, 0x38, 0x57, 0xbe, 0x68, 0xba, 0xa3, 0x70, 0xa6, 0x1c, 0x77, 0xd5, 0x98, + 0x98, 0x83, 0xf3, 0xf9, 0x02, 0xef, 0x4e, 0x27, 0xae, 0x3e, 0xfd, 0xc4, 0x35, 0x0f, 0xf7, 0xf6, + 0x1c, 0x65, 0xba, 0x75, 0x4a, 0xf5, 0xd9, 0x31, 0xb7, 0xce, 0x2e, 0x75, 0x77, 0x0c, 0x46, 0xf4, + 0xc7, 0x4c, 0xdc, 0xff, 0xdb, 0x07, 0x90, 0x3a, 0x14, 0x90, 0x07, 0x63, 0xdc, 0x79, 0xb1, 0x38, + 0x77, 0xe4, 0x64, 0x06, 0xb3, 0x06, 0x01, 0x9c, 0x21, 0x88, 0x5a, 0x80, 0x38, 0x84, 0xff, 0x3e, + 0x8a, 0x13, 0x9a, 0xf9, 0x6c, 0x67, 0xbb, 0x88, 0xe0, 0x1c, 0xc2, 0xb4, 0x47, 0x49, 0xb8, 0x45, + 0x82, 0xeb, 0x78, 0xf9, 0x28, 0x09, 0x33, 0xb8, 0xdb, 0xd2, 0x20, 0x80, 0x33, 0x04, 0x91, 0x0b, + 0x03, 0xcc, 0x86, 0x25, 0x83, 0xec, 0x99, 0xbc, 0x64, 0xaa, 0x53, 0x8c, 0x45, 0x09, 0xfa, 0xa2, + 0x03, 0x63, 0x32, 0xef, 0x07, 0x33, 0x1b, 0xcb, 0xf0, 0xfa, 0xeb, 0xb6, 0x1c, 0x42, 0x57, 0x74, + 0xea, 0x69, 0xf0, 0xaa, 0x01, 0x8e, 0x71, 0xa6, 0x11, 0xee, 0x73, 0x70, 0x26, 0xa7, 0xba, 0x95, + 0x13, 0xfd, 0xb7, 0x1d, 0x28, 0x69, 0xe9, 0x30, 0xd1, 0xab, 0x30, 0x1c, 0x56, 0xac, 0x47, 0x4c, + 0xae, 0x56, 0xba, 0x22, 0x26, 0x15, 0x08, 0xa7, 0x0c, 0x0f, 0x12, 0xe8, 0x99, 0x9b, 0xbb, 0xf3, + 0x1d, 0x6e, 0xf6, 0xa1, 0x03, 0x3d, 0x7f, 0xad, 0x08, 0x29, 0xa5, 0x43, 0xe6, 0xa3, 0x49, 0xc3, + 0x42, 0x0b, 0xfb, 0x86, 0x85, 0xd6, 0xe0, 0x94, 0xc7, 0x9c, 0xee, 0x47, 0xcc, 0x42, 0xc3, 0xb3, + 0x21, 0x9b, 0x14, 0x70, 0x96, 0x24, 0xe5, 0x12, 0xa7, 0x55, 0x19, 0x97, 0xfe, 0x43, 0x73, 0xa9, + 0x98, 0x14, 0x70, 0x96, 0x24, 0x7a, 0x01, 0xca, 0x55, 0x76, 0x6d, 0x9a, 0xf7, 0x71, 0x71, 0xf3, + 0x5a, 0x98, 0xac, 0x45, 0x24, 0x26, 0x41, 0x22, 0xf2, 0xcd, 0x3d, 0x28, 0x46, 0xa1, 0x3c, 0xdb, + 0x03, 0x0f, 0xf7, 0xa4, 0x40, 0xcf, 0x5d, 0xcc, 0x6b, 0xef, 0x27, 0x3b, 0x4c, 0x88, 0x88, 0x70, + 0x06, 0x75, 0xee, 0xaa, 0xe8, 0x85, 0xd8, 0xc4, 0x45, 0xbf, 0xea, 0xc0, 0x68, 0x53, 0xfa, 0x35, + 0x70, 0xa7, 0x29, 0x93, 0xb7, 0x62, 0x2b, 0xd3, 0x6f, 0x59, 0xa7, 0xcc, 0x95, 0x23, 0x03, 0x84, + 0x4d, 0xde, 0xd9, 0x94, 0x40, 0x43, 0x07, 0x4c, 0x09, 0xf4, 0x7d, 0x07, 0xc6, 0xb3, 0xdc, 0xd0, + 0x16, 0x3c, 0xd0, 0xf2, 0xa2, 0xad, 0xc5, 0x60, 0x33, 0x62, 0x97, 0x69, 0x12, 0x3e, 0x19, 0xa6, + 0x37, 0x13, 0x12, 0xcd, 0x79, 0x3b, 0xdc, 0x4f, 0x5c, 0x54, 0x6f, 0x8e, 0x3d, 0xb0, 0xb2, 0x1f, + 0x32, 0xde, 0x9f, 0x16, 0xaa, 0xc0, 0x39, 0x8a, 0xc0, 0x32, 0x06, 0xfa, 0x61, 0x90, 0x32, 0x29, + 0x30, 0x26, 0x2a, 0xa0, 0x73, 0x25, 0x0f, 0x09, 0xe7, 0xd7, 0x75, 0xaf, 0xc0, 0x00, 0xbf, 0xdb, + 0x78, 0x57, 0x8e, 0x36, 0xf7, 0x3f, 0x14, 0x40, 0x6a, 0xba, 0x7f, 0xb5, 0xfd, 0x96, 0x74, 0x13, + 0x8d, 0x98, 0x16, 0x27, 0xcc, 0x37, 0x6c, 0x13, 0x15, 0xb9, 0x39, 0x45, 0x09, 0x3d, 0x02, 0x90, + 0x5b, 0x7e, 0x32, 0x1b, 0xd6, 0xa4, 0xd1, 0x86, 0x1d, 0x01, 0xae, 0x08, 0x18, 0x56, 0xa5, 0xee, + 0x27, 0x1d, 0x18, 0xa5, 0xbd, 0x6c, 0x36, 0x49, 0xb3, 0x92, 0x90, 0x76, 0x8c, 0x62, 0x28, 0xc6, + 0xf4, 0x1f, 0x7b, 0xb6, 0xcd, 0xf4, 0x3e, 0x2c, 0x69, 0x6b, 0x4e, 0x2d, 0xca, 0x04, 0x73, 0x5e, + 0xee, 0xb7, 0xfa, 0x60, 0x58, 0x0d, 0xf6, 0x01, 0xcc, 0xc9, 0x97, 0xd3, 0xb4, 0xb9, 0x5c, 0x02, + 0x97, 0xb5, 0x94, 0xb9, 0xb7, 0xe9, 0xd0, 0x05, 0x3b, 0x3c, 0x41, 0x48, 0x9a, 0x3f, 0xf7, 0x71, + 0xd3, 0x27, 0x7f, 0x5e, 0x9f, 0x7f, 0x1a, 0xbe, 0x70, 0xce, 0xdf, 0xd2, 0x43, 0x22, 0xfa, 0x6d, + 0xed, 0x66, 0xca, 0xdf, 0xdb, 0x3b, 0x16, 0x22, 0xf3, 0x8e, 0x54, 0xf1, 0x40, 0xef, 0x48, 0x3d, + 0x06, 0xfd, 0x24, 0xe8, 0xb4, 0x98, 0xaa, 0x34, 0xcc, 0xce, 0x3c, 0xfd, 0x57, 0x82, 0x4e, 0xcb, + 0xec, 0x19, 0x43, 0x41, 0xef, 0x87, 0x52, 0x8d, 0xc4, 0xd5, 0xc8, 0x67, 0x59, 0x2f, 0x84, 0xa9, + 0xea, 0x7e, 0x66, 0xff, 0x4b, 0xc1, 0x66, 0x45, 0xbd, 0x82, 0xfb, 0x32, 0x88, 0xb4, 0xd1, 0xa8, + 0x0d, 0x03, 0x3c, 0x07, 0x86, 0xd8, 0xed, 0x2d, 0x1c, 0xa4, 0xb9, 0xa8, 0xd0, 0xc2, 0x75, 0xf8, + 0xb5, 0x68, 0xc1, 0xc7, 0x7d, 0xa3, 0x00, 0x63, 0x66, 0x46, 0x6b, 0xf4, 0x0b, 0xc6, 0x5c, 0x71, + 0xf5, 0xb9, 0xa2, 0xbf, 0x9b, 0xc4, 0x6b, 0x69, 0x33, 0xe8, 0x7d, 0x30, 0xca, 0x93, 0x6e, 0x49, + 0x03, 0x4e, 0xc1, 0xdc, 0x70, 0x66, 0xf5, 0x42, 0x6c, 0xe2, 0xb2, 0xbd, 0x30, 0x0c, 0x02, 0x1e, + 0xa2, 0x6a, 0xc6, 0xea, 0x89, 0x97, 0xcd, 0xd2, 0xbd, 0xb0, 0x07, 0x1e, 0xee, 0x49, 0x41, 0x6a, + 0x60, 0xfd, 0x3d, 0x34, 0xb0, 0x7f, 0xe9, 0x40, 0xb9, 0x57, 0x5a, 0xef, 0x23, 0x0f, 0xc7, 0x61, + 0xd5, 0xa7, 0xee, 0xf1, 0xeb, 0x3b, 0xf8, 0xf8, 0xb9, 0x9f, 0x28, 0x40, 0x71, 0x2d, 0xac, 0x2d, + 0xcc, 0xa2, 0xbf, 0xd5, 0xf5, 0xfc, 0xd5, 0xcf, 0xe4, 0x3c, 0x7f, 0x35, 0xca, 0x90, 0x73, 0x5e, + 0xbe, 0x6a, 0xc2, 0x28, 0x73, 0xf2, 0x49, 0x5d, 0x46, 0x1c, 0x8f, 0x9e, 0x3c, 0x60, 0xfa, 0x0f, + 0xbd, 0xaa, 0xd8, 0xd9, 0x75, 0x10, 0x36, 0x89, 0xa3, 0x15, 0x38, 0xc3, 0xb3, 0xe8, 0xce, 0x91, + 0xa6, 0xb7, 0x93, 0xc9, 0x96, 0x77, 0x9f, 0x7c, 0xd1, 0x70, 0xae, 0x1b, 0x05, 0xe7, 0xd5, 0x73, + 0x7f, 0xbf, 0x1f, 0x34, 0xd7, 0xda, 0x01, 0xa4, 0xde, 0x4b, 0x19, 0x47, 0xea, 0x8a, 0x15, 0x47, + 0xaa, 0xf4, 0x4e, 0xf2, 0x9d, 0xc4, 0xf4, 0x9d, 0xd2, 0x46, 0x35, 0x48, 0xb3, 0x2d, 0xfa, 0xa8, + 0x1a, 0x75, 0x95, 0x34, 0xdb, 0x98, 0x95, 0xa8, 0xcb, 0xbd, 0xfd, 0x3d, 0x2f, 0xf7, 0x36, 0xa0, + 0x58, 0xf7, 0x3a, 0x75, 0x22, 0x42, 0x8e, 0x2d, 0xf8, 0xcc, 0xd9, 0x75, 0x23, 0xee, 0x33, 0x67, + 0xff, 0x62, 0xce, 0x80, 0x0a, 0xed, 0x86, 0x8c, 0xc1, 0x12, 0xde, 0x03, 0x0b, 0x42, 0x5b, 0x85, + 0x75, 0x71, 0xa1, 0xad, 0x7e, 0xe2, 0x94, 0x19, 0x6a, 0xc3, 0x60, 0x95, 0x27, 0x21, 0x12, 0xba, + 0xe7, 0xa2, 0x8d, 0xdb, 0xcb, 0x8c, 0x20, 0x37, 0xf3, 0x89, 0x1f, 0x58, 0xb2, 0x71, 0x2f, 0x41, + 0x49, 0x7b, 0x85, 0x87, 0x7e, 0x06, 0x95, 0xff, 0x46, 0xfb, 0x0c, 0x73, 0x5e, 0xe2, 0x61, 0x56, + 0xe2, 0x7e, 0xbd, 0x1f, 0x94, 0x91, 0x57, 0xbf, 0x6b, 0xeb, 0x55, 0xb5, 0x6c, 0x5d, 0x46, 0xde, + 0x89, 0x30, 0xc0, 0xa2, 0x94, 0x2e, 0xf7, 0x16, 0x89, 0xea, 0xca, 0x1e, 0x92, 0x15, 0x97, 0x2b, + 0x7a, 0x21, 0x36, 0x71, 0xe9, 0xe1, 0xaa, 0x25, 0x42, 0x4d, 0xb2, 0x37, 0x09, 0x64, 0x08, 0x0a, + 0x56, 0x18, 0x2c, 0x39, 0x48, 0x4b, 0x8b, 0x4c, 0x11, 0x91, 0xc7, 0x36, 0x3c, 0x9d, 0x1a, 0x55, + 0x1e, 0x21, 0xa8, 0x43, 0xb0, 0xc1, 0x15, 0x2d, 0xc0, 0xe9, 0x98, 0x24, 0xab, 0x37, 0x03, 0x12, + 0xa9, 0xb4, 0x1c, 0x22, 0xfb, 0x8c, 0xb2, 0x8e, 0x55, 0xb2, 0x08, 0xb8, 0xbb, 0x4e, 0x6e, 0xb0, + 0x76, 0xf1, 0xd0, 0xc1, 0xda, 0x73, 0x30, 0xbe, 0xe9, 0xf9, 0xcd, 0x4e, 0x44, 0x7a, 0x86, 0x7c, + 0xcf, 0x67, 0xca, 0x71, 0x57, 0x0d, 0x76, 0x19, 0xae, 0xe9, 0xd5, 0xe3, 0xf2, 0xa0, 0x76, 0x19, + 0x8e, 0x02, 0x30, 0x87, 0xbb, 0xbf, 0xe3, 0x00, 0x4f, 0xe4, 0x35, 0xbd, 0xb9, 0xe9, 0x07, 0x7e, + 0xb2, 0x83, 0xbe, 0xe2, 0xc0, 0x78, 0x10, 0xd6, 0xc8, 0x74, 0x90, 0xf8, 0x12, 0x68, 0xef, 0xf1, + 0x05, 0xc6, 0xeb, 0x5a, 0x86, 0x3c, 0xb7, 0x60, 0x66, 0xa1, 0xb8, 0xab, 0x19, 0xee, 0x05, 0x38, + 0x97, 0x4b, 0xc0, 0xfd, 0x7e, 0x1f, 0x98, 0xf9, 0xc8, 0xd0, 0x33, 0x50, 0x6c, 0xb2, 0x7c, 0x3a, + 0xce, 0x11, 0x13, 0xcd, 0xb1, 0xb1, 0xe2, 0x09, 0x77, 0x38, 0x25, 0x34, 0x07, 0x25, 0x96, 0xe4, + 0x4c, 0x64, 0x3b, 0x2a, 0x18, 0x5b, 0x6e, 0x09, 0xa7, 0x45, 0xb7, 0xcd, 0x9f, 0x58, 0xaf, 0x86, + 0x5e, 0x81, 0xc1, 0x0d, 0x9e, 0x09, 0xd6, 0x9e, 0x33, 0x5a, 0xa4, 0x96, 0x65, 0x3a, 0xae, 0xcc, + 0x33, 0x7b, 0x3b, 0xfd, 0x17, 0x4b, 0x8e, 0x68, 0x07, 0x86, 0x3c, 0xf9, 0x4d, 0xfb, 0x6d, 0xdd, + 0x4c, 0x32, 0xe6, 0x8f, 0x88, 0xfc, 0x92, 0xdf, 0x50, 0xb1, 0xcb, 0xc4, 0xd2, 0x15, 0x0f, 0x14, + 0x4b, 0xf7, 0x4d, 0x07, 0x20, 0x7d, 0xb6, 0x07, 0xdd, 0x82, 0xa1, 0xf8, 0x49, 0xc3, 0xe0, 0x64, + 0x23, 0xab, 0x85, 0xa0, 0xa8, 0xdd, 0xfc, 0x16, 0x10, 0xac, 0xb8, 0xdd, 0xc9, 0x48, 0xf6, 0x13, + 0x07, 0xce, 0xe6, 0x3d, 0x2f, 0xf4, 0x0e, 0xb6, 0xf8, 0xd0, 0x0a, 0x1e, 0xaf, 0xb0, 0x16, 0x91, + 0x4d, 0xff, 0x56, 0x4e, 0x3e, 0x72, 0x5e, 0x80, 0x53, 0x1c, 0xf7, 0xcf, 0x06, 0x41, 0x31, 0x3e, + 0x26, 0x7b, 0xda, 0x23, 0xf4, 0xec, 0x5b, 0x4f, 0x75, 0x2e, 0x85, 0x87, 0x19, 0x14, 0x8b, 0x52, + 0x7a, 0xfe, 0x95, 0xb7, 0x40, 0x84, 0xc8, 0x66, 0xb3, 0x50, 0xde, 0x16, 0xc1, 0xaa, 0x34, 0xcf, + 0x42, 0x57, 0x3c, 0x11, 0x0b, 0xdd, 0x80, 0x7d, 0x0b, 0x5d, 0x0b, 0x50, 0xcc, 0x17, 0x0a, 0x33, + 0x8b, 0x09, 0x46, 0x23, 0x87, 0x76, 0x18, 0x54, 0xba, 0x88, 0xe0, 0x1c, 0xc2, 0x2c, 0xb8, 0x27, + 0x6c, 0x92, 0x69, 0x7c, 0x4d, 0x1c, 0x22, 0xd3, 0xe0, 0x1e, 0x0e, 0xc6, 0xb2, 0xfc, 0x88, 0x26, + 0x31, 0xf4, 0x1d, 0x67, 0x1f, 0x9b, 0xe3, 0xb0, 0xad, 0x2d, 0x28, 0x37, 0x19, 0x24, 0x3b, 0x11, + 0x1f, 0xc5, 0x90, 0xf9, 0x55, 0x07, 0x4e, 0x93, 0xa0, 0x1a, 0xed, 0x30, 0x3a, 0x82, 0x9a, 0x88, + 0xbd, 0xb8, 0x6e, 0x63, 0xad, 0x5f, 0xc9, 0x12, 0xe7, 0x2e, 0xce, 0x2e, 0x30, 0xee, 0x6e, 0x06, + 0x5a, 0x85, 0xa1, 0xaa, 0x27, 0xe6, 0x45, 0xe9, 0x30, 0xf3, 0x82, 0x7b, 0x90, 0xa7, 0xc5, 0x6c, + 0x50, 0x44, 0xdc, 0x1f, 0x15, 0xe0, 0x4c, 0x4e, 0x93, 0xd8, 0x05, 0xc5, 0x16, 0x5d, 0x00, 0x8b, + 0xb5, 0xec, 0xf2, 0x5f, 0x12, 0x70, 0xac, 0x30, 0xd0, 0x1a, 0x9c, 0xdd, 0x6a, 0xc5, 0x29, 0x95, + 0xd9, 0x30, 0x48, 0xc8, 0x2d, 0x29, 0x0c, 0x64, 0x5c, 0xc6, 0xd9, 0xa5, 0x1c, 0x1c, 0x9c, 0x5b, + 0x93, 0x6a, 0x4b, 0x24, 0xf0, 0x36, 0x9a, 0x24, 0x2d, 0x12, 0x51, 0x84, 0x4a, 0x5b, 0xba, 0x92, + 0x29, 0xc7, 0x5d, 0x35, 0xd0, 0x9b, 0x0e, 0xdc, 0x17, 0x93, 0x68, 0x9b, 0x44, 0x15, 0xbf, 0x46, + 0x66, 0x3b, 0x71, 0x12, 0xb6, 0x48, 0x74, 0x44, 0x2b, 0xfb, 0xe4, 0xde, 0xee, 0xe4, 0x7d, 0x95, + 0xde, 0xd4, 0xf0, 0x7e, 0xac, 0xdc, 0x37, 0x1d, 0x18, 0xab, 0x30, 0x1b, 0x8c, 0x52, 0xdd, 0x6d, + 0xa7, 0x03, 0x7e, 0x44, 0xe5, 0xaa, 0xc9, 0x08, 0x61, 0x33, 0xbb, 0x8c, 0xfb, 0x22, 0x8c, 0x57, + 0x48, 0xcb, 0x6b, 0x37, 0xd8, 0xb5, 0x7d, 0x1e, 0x97, 0x78, 0x09, 0x86, 0x63, 0x09, 0xcb, 0x3e, + 0x10, 0xa6, 0x90, 0x71, 0x8a, 0x83, 0x1e, 0xe6, 0x31, 0x94, 0xf2, 0x86, 0xdd, 0x30, 0x3f, 0xe4, + 0xf0, 0xc0, 0xcb, 0x18, 0xcb, 0x32, 0xf7, 0x9b, 0x05, 0x18, 0x49, 0xeb, 0x93, 0x4d, 0x54, 0x87, + 0x53, 0x55, 0xed, 0x76, 0x6a, 0x7a, 0x2f, 0xe8, 0xe0, 0x17, 0x59, 0x79, 0x96, 0x72, 0x93, 0x08, + 0xce, 0x52, 0x3d, 0x7c, 0xc0, 0xea, 0x2b, 0x99, 0x80, 0x55, 0x2b, 0x2f, 0x8f, 0x54, 0x76, 0x82, + 0xaa, 0x0a, 0x77, 0x25, 0x9b, 0x32, 0x92, 0xa6, 0x2b, 0xfe, 0xf5, 0xf3, 0x05, 0x38, 0xa5, 0xc6, + 0x49, 0x38, 0xbb, 0x5f, 0xcb, 0x86, 0xa9, 0x62, 0x1b, 0x29, 0xbf, 0xcc, 0x0f, 0xbf, 0x4f, 0xa8, + 0xea, 0x6b, 0xd9, 0x50, 0xd5, 0x63, 0x65, 0xdf, 0xe5, 0xbf, 0xff, 0x66, 0x01, 0x86, 0x54, 0x02, + 0xb2, 0x67, 0xa0, 0xc8, 0x8e, 0xcd, 0x77, 0xa7, 0xfc, 0xb3, 0x23, 0x38, 0xe6, 0x94, 0x28, 0x49, + 0x16, 0xbf, 0x70, 0xe4, 0xc4, 0xd5, 0xc3, 0xdc, 0x08, 0xee, 0x45, 0x09, 0xe6, 0x94, 0xd0, 0x12, + 0xf4, 0x91, 0xa0, 0x26, 0x26, 0xcf, 0xe1, 0x09, 0xb2, 0x77, 0x0c, 0xaf, 0x04, 0x35, 0x4c, 0xa9, + 0xb0, 0x2c, 0x88, 0x5c, 0xd9, 0xcb, 0xdc, 0x03, 0x11, 0x9a, 0x9e, 0x28, 0x75, 0x67, 0xc0, 0xc8, + 0x90, 0x79, 0xa4, 0x7b, 0x48, 0xbf, 0xda, 0x07, 0x03, 0x95, 0xce, 0x06, 0x3d, 0x13, 0x7d, 0xc3, + 0x81, 0x33, 0x37, 0x33, 0x99, 0xe1, 0xd3, 0x45, 0x7a, 0xdd, 0x9e, 0x33, 0x41, 0x0f, 0xe9, 0x54, + 0xa6, 0xb7, 0x9c, 0x42, 0x9c, 0xd7, 0x1c, 0x23, 0x39, 0x73, 0xdf, 0xb1, 0x24, 0x67, 0xbe, 0x75, + 0xcc, 0x77, 0xa5, 0x46, 0x7b, 0xdd, 0x93, 0x72, 0x7f, 0xbf, 0x08, 0xc0, 0xbf, 0xc6, 0x6a, 0x3b, + 0x39, 0x88, 0x59, 0xf1, 0x29, 0x18, 0xa9, 0x93, 0x80, 0x44, 0x32, 0x60, 0x37, 0xf3, 0xa8, 0xd9, + 0x82, 0x56, 0x86, 0x0d, 0x4c, 0x36, 0x59, 0x82, 0x24, 0xda, 0xe1, 0x7a, 0x7e, 0xf6, 0x3e, 0x94, + 0x2a, 0xc1, 0x1a, 0x16, 0x9a, 0x32, 0xbc, 0x77, 0x3c, 0x10, 0x64, 0x6c, 0x1f, 0x67, 0xdb, 0xfb, + 0x61, 0xcc, 0xcc, 0x7b, 0x24, 0xb4, 0x4d, 0x15, 0xb8, 0x61, 0xa6, 0x4b, 0xc2, 0x19, 0x6c, 0xba, + 0x10, 0x6a, 0xd1, 0x0e, 0xee, 0x04, 0x42, 0xed, 0x54, 0x0b, 0x61, 0x8e, 0x41, 0xb1, 0x28, 0x65, + 0x09, 0x63, 0xd8, 0x06, 0xcc, 0xe1, 0x22, 0xe9, 0x4c, 0x9a, 0x30, 0x46, 0x2b, 0xc3, 0x06, 0x26, + 0xe5, 0x20, 0xcc, 0xb2, 0x60, 0x2e, 0xb5, 0x8c, 0x2d, 0xb5, 0x0d, 0x63, 0xa1, 0x69, 0x4e, 0xe2, + 0x3a, 0xd8, 0x7b, 0x0e, 0x38, 0xf5, 0x8c, 0xba, 0x3c, 0xe0, 0x26, 0x63, 0x7d, 0xca, 0xd0, 0xa7, + 0x7a, 0xb7, 0x7e, 0x1b, 0x68, 0xc4, 0x8c, 0xf7, 0xee, 0x79, 0x61, 0x67, 0x0d, 0xce, 0xb6, 0xc3, + 0xda, 0x5a, 0xe4, 0x87, 0x91, 0x9f, 0xec, 0xcc, 0x36, 0xbd, 0x38, 0x66, 0x13, 0x63, 0xd4, 0xd4, + 0xc7, 0xd6, 0x72, 0x70, 0x70, 0x6e, 0x4d, 0x7a, 0x20, 0x6b, 0x0b, 0x20, 0x8b, 0xba, 0x2c, 0xf2, + 0x9d, 0x4c, 0x22, 0x62, 0x55, 0xea, 0x9e, 0x81, 0xd3, 0x95, 0x4e, 0xbb, 0xdd, 0xf4, 0x49, 0x4d, + 0x79, 0xc7, 0xdc, 0x0f, 0xc0, 0x29, 0x91, 0xe8, 0x59, 0x69, 0x3f, 0x87, 0x7a, 0x68, 0xc0, 0xfd, + 0x79, 0x38, 0x95, 0xd9, 0x4a, 0xef, 0x10, 0xb9, 0xe3, 0xfe, 0x4a, 0x81, 0x57, 0xd1, 0x82, 0xc8, + 0xd0, 0xeb, 0x00, 0x4a, 0x83, 0x91, 0xe9, 0x22, 0xae, 0x59, 0xdc, 0xd5, 0xa8, 0x2c, 0x63, 0x4b, + 0x41, 0x41, 0x62, 0xac, 0x71, 0x44, 0x01, 0x0c, 0xb2, 0x9b, 0x2b, 0x44, 0x5e, 0x18, 0x5e, 0xb0, + 0x74, 0xfb, 0x83, 0x6b, 0x5f, 0x2b, 0x9c, 0x36, 0x96, 0x4c, 0xdc, 0xcf, 0x14, 0x20, 0x3f, 0x26, + 0x11, 0xbd, 0x9e, 0xd5, 0xf7, 0xec, 0x68, 0x3b, 0xa6, 0x06, 0x23, 0x92, 0x31, 0xe7, 0xa9, 0x8f, + 0x81, 0xbc, 0xdf, 0x53, 0xb0, 0x75, 0x45, 0x40, 0xbb, 0xe0, 0xc3, 0xb7, 0x66, 0xfd, 0xaa, 0x90, + 0xfb, 0x3f, 0x1d, 0x28, 0xad, 0xaf, 0x2f, 0xab, 0x5d, 0x12, 0xc3, 0xf9, 0x98, 0x7b, 0xeb, 0x58, + 0xa4, 0xc3, 0x6c, 0xd8, 0x6a, 0xf3, 0xc0, 0x07, 0x11, 0x90, 0xc1, 0xd2, 0x75, 0x57, 0x72, 0x31, + 0x70, 0x8f, 0x9a, 0x68, 0x11, 0xce, 0xe8, 0x25, 0x15, 0xed, 0x39, 0xd4, 0xa2, 0x48, 0xcd, 0xd5, + 0x5d, 0x8c, 0xf3, 0xea, 0x64, 0x49, 0x09, 0xc3, 0xb0, 0x70, 0x4d, 0x76, 0x91, 0x12, 0xc5, 0x38, + 0xaf, 0x8e, 0xbb, 0x0a, 0xa5, 0x75, 0x2f, 0x52, 0x1d, 0xff, 0x20, 0x8c, 0x57, 0xc3, 0x96, 0xdc, + 0xf9, 0x97, 0xc9, 0x36, 0x69, 0x8a, 0x2e, 0xf3, 0x47, 0x86, 0x32, 0x65, 0xb8, 0x0b, 0xdb, 0xfd, + 0xed, 0x07, 0x41, 0xdd, 0x2d, 0x3e, 0xc0, 0xe6, 0xd4, 0x56, 0xd1, 0xda, 0x45, 0xcb, 0xd1, 0xda, + 0x4a, 0x4c, 0x67, 0x22, 0xb6, 0x93, 0x34, 0x62, 0x7b, 0xc0, 0x76, 0xc4, 0xb6, 0xd2, 0x57, 0xbb, + 0xa2, 0xb6, 0xbf, 0xe4, 0xc0, 0x48, 0x10, 0xd6, 0x88, 0xf2, 0x64, 0x0e, 0xb2, 0x15, 0xfe, 0x82, + 0xbd, 0xcb, 0x2f, 0x3c, 0xfa, 0x58, 0x90, 0xe7, 0x37, 0x09, 0xd4, 0xee, 0xa6, 0x17, 0x61, 0xa3, + 0x1d, 0x68, 0x5e, 0x33, 0x11, 0x73, 0x4f, 0xcc, 0xfd, 0x79, 0x47, 0xad, 0x3b, 0xda, 0x7b, 0x6f, + 0x69, 0x2a, 0xd7, 0xb0, 0x2d, 0xd3, 0xa7, 0xbc, 0x07, 0xaa, 0x39, 0x94, 0x64, 0xc6, 0xf9, 0x54, + 0x15, 0x73, 0x61, 0x80, 0x5f, 0x39, 0x10, 0x49, 0xe0, 0x98, 0x9f, 0x93, 0x5f, 0x47, 0xc0, 0xa2, + 0x04, 0x25, 0x32, 0xea, 0xa5, 0x64, 0xeb, 0x45, 0x18, 0x23, 0xaa, 0x26, 0x3f, 0xec, 0x05, 0x3d, + 0xad, 0x1f, 0xe1, 0x47, 0x0e, 0x72, 0x84, 0x1f, 0xed, 0x79, 0x7c, 0xff, 0x9c, 0x03, 0x23, 0x55, + 0xed, 0x85, 0x96, 0xf2, 0xa3, 0xb6, 0x1e, 0xca, 0xcf, 0x7b, 0x48, 0x87, 0xbb, 0xcf, 0x8c, 0x17, + 0x61, 0x0c, 0xee, 0x2c, 0xf3, 0x2d, 0xb3, 0x57, 0x30, 0xad, 0xc1, 0x4a, 0x46, 0x19, 0xd3, 0xfe, + 0x21, 0xa3, 0x87, 0x29, 0x0c, 0x0b, 0x5e, 0xe8, 0x55, 0x18, 0x92, 0xb7, 0x56, 0xc4, 0xed, 0x0e, + 0x6c, 0xc3, 0x9f, 0x61, 0x3a, 0x4d, 0x65, 0xba, 0x4c, 0x0e, 0xc5, 0x8a, 0x23, 0x6a, 0x40, 0x5f, + 0xcd, 0xab, 0x8b, 0x7b, 0x1e, 0x2b, 0x76, 0xd2, 0x11, 0x4b, 0x9e, 0xec, 0x74, 0x37, 0x37, 0xbd, + 0x80, 0x29, 0x0b, 0x74, 0x2b, 0x7d, 0x10, 0x63, 0xdc, 0xda, 0xee, 0x6b, 0x6a, 0x58, 0x5c, 0x27, + 0xe8, 0x7a, 0x5f, 0xa3, 0x26, 0xfc, 0xcc, 0x7f, 0x8d, 0xb1, 0x9d, 0xb7, 0x93, 0xcf, 0x98, 0x67, + 0x28, 0x4a, 0x7d, 0xd5, 0x94, 0x4b, 0x23, 0x49, 0xda, 0xe5, 0x9f, 0xb5, 0xc5, 0x85, 0xe5, 0xd9, + 0x61, 0x5c, 0xe8, 0x7f, 0x98, 0x51, 0x47, 0x4d, 0xf5, 0xde, 0xfe, 0xcf, 0xd9, 0xda, 0x5b, 0x78, + 0x60, 0x4d, 0xde, 0xeb, 0xfa, 0xe8, 0x0a, 0x0c, 0xf2, 0x97, 0x9a, 0xf8, 0x3d, 0x9b, 0xd2, 0xe5, + 0x89, 0xde, 0xef, 0x3d, 0xa5, 0x1b, 0x05, 0xff, 0x1d, 0x63, 0x59, 0x17, 0x7d, 0xde, 0x81, 0x31, + 0x2a, 0x51, 0xd3, 0xa7, 0xa5, 0xca, 0xc8, 0x96, 0xcc, 0xba, 0x1e, 0x53, 0x8d, 0x44, 0xca, 0x1a, + 0x75, 0xc2, 0x5a, 0x34, 0xd8, 0xe1, 0x0c, 0x7b, 0xf4, 0x1a, 0x0c, 0xc5, 0x7e, 0x8d, 0x54, 0xbd, + 0x28, 0x2e, 0x9f, 0x39, 0x9e, 0xa6, 0xa4, 0x9e, 0x2d, 0xc1, 0x08, 0x2b, 0x96, 0xe8, 0x37, 0xd8, + 0xd3, 0xbf, 0xd5, 0x86, 0xbf, 0x4d, 0x96, 0xc3, 0x2a, 0x3f, 0x11, 0x9c, 0xb5, 0xb5, 0xf6, 0xa5, + 0x0f, 0x4f, 0x52, 0x16, 0x0e, 0x1f, 0x93, 0x1d, 0xce, 0xf2, 0x47, 0xbf, 0xe2, 0xc0, 0x39, 0xfe, + 0x62, 0x47, 0xf6, 0x11, 0x9a, 0x73, 0x47, 0xb4, 0xee, 0xb0, 0x0b, 0x42, 0xd3, 0x79, 0x24, 0x71, + 0x3e, 0x27, 0x96, 0x5f, 0xdb, 0x7c, 0x09, 0xec, 0xbc, 0x55, 0x0f, 0xef, 0xc1, 0x5f, 0xff, 0x42, + 0x4f, 0x40, 0xa9, 0x2d, 0xb6, 0x43, 0x3f, 0x6e, 0xb1, 0xeb, 0x5e, 0x7d, 0xfc, 0x22, 0xee, 0x5a, + 0x0a, 0xc6, 0x3a, 0x8e, 0x91, 0x6c, 0xfd, 0xb1, 0xfd, 0x92, 0xad, 0xa3, 0xeb, 0x50, 0x4a, 0xc2, + 0xa6, 0xc8, 0x37, 0x1c, 0x97, 0xcb, 0x6c, 0x06, 0x5e, 0xcc, 0x5b, 0x5b, 0xeb, 0x0a, 0x2d, 0x3d, + 0x04, 0xa7, 0xb0, 0x18, 0xeb, 0x74, 0x58, 0x44, 0xba, 0x78, 0x09, 0x25, 0x62, 0xa7, 0xdf, 0x7b, + 0x33, 0x11, 0xe9, 0x7a, 0x21, 0x36, 0x71, 0xd1, 0x02, 0x9c, 0x6e, 0x77, 0x1d, 0x9f, 0xf9, 0x35, + 0x53, 0x15, 0x3c, 0xd2, 0x7d, 0x76, 0xee, 0xae, 0xd3, 0x23, 0xa1, 0xf8, 0xfd, 0x47, 0x49, 0x28, + 0x8e, 0x6a, 0x70, 0xbf, 0xd7, 0x49, 0x42, 0x96, 0x21, 0xca, 0xac, 0xc2, 0x43, 0xee, 0x1f, 0xe4, + 0x51, 0xfc, 0x7b, 0xbb, 0x93, 0xf7, 0x4f, 0xef, 0x83, 0x87, 0xf7, 0xa5, 0x82, 0x5e, 0x86, 0x21, + 0x22, 0x92, 0xa2, 0x97, 0x7f, 0xc6, 0xd6, 0xd6, 0x6f, 0xa6, 0x59, 0x97, 0xd1, 0xcc, 0x1c, 0x86, + 0x15, 0x3f, 0xb4, 0x0e, 0xa5, 0x46, 0x18, 0x27, 0xd3, 0x4d, 0xdf, 0x8b, 0x49, 0x5c, 0x7e, 0x80, + 0x4d, 0x85, 0x5c, 0x8d, 0xea, 0xaa, 0x44, 0x4b, 0x67, 0xc2, 0xd5, 0xb4, 0x26, 0xd6, 0xc9, 0x20, + 0xc2, 0xbc, 0xb7, 0xec, 0xbe, 0x81, 0xf4, 0x4c, 0x5d, 0x64, 0x1d, 0x7b, 0x24, 0x8f, 0xf2, 0x5a, + 0x58, 0xab, 0x98, 0xd8, 0xca, 0x7d, 0xab, 0x03, 0x71, 0x96, 0x26, 0x7a, 0x0a, 0x46, 0xda, 0x61, + 0xad, 0xd2, 0x26, 0xd5, 0x35, 0x2f, 0xa9, 0x36, 0xca, 0x93, 0xa6, 0x19, 0x6e, 0x4d, 0x2b, 0xc3, + 0x06, 0x26, 0x6a, 0xc3, 0x60, 0x8b, 0x67, 0x04, 0x29, 0x3f, 0x64, 0xeb, 0xc4, 0x22, 0x52, 0x8c, + 0x08, 0xcb, 0x00, 0xff, 0x81, 0x25, 0x1b, 0xf4, 0x0f, 0x1c, 0x38, 0x95, 0xb9, 0x96, 0x58, 0x7e, + 0x97, 0x4d, 0xa7, 0x87, 0x46, 0x78, 0xe6, 0x11, 0x36, 0x7c, 0x26, 0xf0, 0x76, 0x37, 0x08, 0x67, + 0x5b, 0xc4, 0xc7, 0x85, 0xa5, 0xf5, 0x29, 0x3f, 0x6c, 0x6f, 0x5c, 0x18, 0x41, 0x39, 0x2e, 0xec, + 0x07, 0x96, 0x6c, 0xd0, 0x63, 0x30, 0x28, 0x52, 0x75, 0x96, 0x1f, 0x31, 0x7d, 0xe2, 0x22, 0xc6, + 0x17, 0xcb, 0xf2, 0xae, 0x54, 0x3d, 0x8f, 0xdb, 0x4a, 0xd5, 0xa3, 0xce, 0x7b, 0x87, 0x4f, 0xd5, + 0x33, 0xf1, 0x01, 0x38, 0xdd, 0x75, 0x4a, 0x3c, 0x54, 0xae, 0x9c, 0xbb, 0xcc, 0xb5, 0xe3, 0xfe, + 0x96, 0x03, 0x7a, 0x72, 0x06, 0xeb, 0xcf, 0x2b, 0x3d, 0x05, 0x23, 0x55, 0xfe, 0x7e, 0x2d, 0x4f, + 0xef, 0xd0, 0x6f, 0x5a, 0x79, 0x67, 0xb5, 0x32, 0x6c, 0x60, 0xba, 0x57, 0x01, 0x75, 0xbf, 0x7d, + 0x71, 0x24, 0x77, 0xc9, 0x3f, 0x72, 0x60, 0xd4, 0x50, 0x6f, 0xac, 0xbb, 0x72, 0xe7, 0x01, 0xb5, + 0xfc, 0x28, 0x0a, 0x23, 0xfd, 0xa1, 0x50, 0x91, 0x82, 0x85, 0x85, 0x78, 0xac, 0x74, 0x95, 0xe2, + 0x9c, 0x1a, 0xee, 0x3f, 0xeb, 0x87, 0xf4, 0x8e, 0x82, 0xca, 0x0c, 0xee, 0xf4, 0xcc, 0x0c, 0xfe, + 0x38, 0x0c, 0xbd, 0x18, 0x87, 0xc1, 0x5a, 0x9a, 0x3f, 0x5c, 0x7d, 0x8b, 0xa7, 0x2b, 0xab, 0xd7, + 0x18, 0xa6, 0xc2, 0x60, 0xd8, 0x2f, 0xcd, 0xfb, 0xcd, 0xa4, 0x3b, 0xc1, 0xf4, 0xd3, 0xcf, 0x70, + 0x38, 0x56, 0x18, 0xec, 0xcd, 0xd0, 0x6d, 0xa2, 0xcc, 0xff, 0xe9, 0x9b, 0xa1, 0xfc, 0x59, 0x1b, + 0x56, 0x86, 0x2e, 0xc1, 0xb0, 0x72, 0x1d, 0x08, 0x7f, 0x84, 0x1a, 0x29, 0xe5, 0x5f, 0xc0, 0x29, + 0x0e, 0xd3, 0x5d, 0x85, 0xb9, 0x59, 0x58, 0x7b, 0x2a, 0x36, 0x4e, 0x52, 0x19, 0x03, 0x36, 0xdf, + 0xb0, 0x24, 0x18, 0x2b, 0x96, 0x79, 0xee, 0xec, 0xe1, 0x63, 0x71, 0x67, 0x6b, 0x17, 0x66, 0x8a, + 0x07, 0xbd, 0x30, 0x63, 0xce, 0xed, 0xa1, 0x03, 0xcd, 0xed, 0x4f, 0xf5, 0xc1, 0xe0, 0xb3, 0x24, + 0x62, 0x4f, 0x33, 0x3c, 0x06, 0x83, 0xdb, 0xfc, 0xdf, 0xec, 0x6d, 0x6b, 0x81, 0x81, 0x65, 0x39, + 0xfd, 0x6e, 0x1b, 0x1d, 0xbf, 0x59, 0x9b, 0x4b, 0x57, 0x71, 0x9a, 0x3a, 0x55, 0x16, 0xe0, 0x14, + 0x87, 0x56, 0xa8, 0xd3, 0x43, 0x48, 0xab, 0xe5, 0x27, 0xd9, 0xe8, 0xb4, 0x05, 0x59, 0x80, 0x53, + 0x1c, 0xf4, 0x08, 0x0c, 0xd4, 0xfd, 0x64, 0xdd, 0xab, 0x67, 0xfd, 0xa1, 0x0b, 0x0c, 0x8a, 0x45, + 0x29, 0x73, 0x86, 0xf9, 0xc9, 0x7a, 0x44, 0x98, 0x11, 0xba, 0x2b, 0x7b, 0xcd, 0x82, 0x56, 0x86, + 0x0d, 0x4c, 0xd6, 0xa4, 0x50, 0xf4, 0x4c, 0x84, 0xe6, 0xa6, 0x4d, 0x92, 0x05, 0x38, 0xc5, 0xa1, + 0xf3, 0xbf, 0x1a, 0xb6, 0xda, 0x7e, 0x53, 0x04, 0x8d, 0x6b, 0xf3, 0x7f, 0x56, 0xc0, 0xb1, 0xc2, + 0xa0, 0xd8, 0x54, 0x84, 0x51, 0xf1, 0x93, 0x7d, 0xcd, 0x71, 0x4d, 0xc0, 0xb1, 0xc2, 0x70, 0x9f, + 0x85, 0x51, 0xbe, 0x92, 0x67, 0x9b, 0x9e, 0xdf, 0x5a, 0x98, 0x45, 0x57, 0xba, 0x2e, 0x5a, 0x3c, + 0x96, 0x73, 0xd1, 0xe2, 0x9c, 0x51, 0xa9, 0xfb, 0xc2, 0x85, 0xfb, 0x83, 0x02, 0x0c, 0x9d, 0xe0, + 0x13, 0xb7, 0x27, 0xfe, 0x5a, 0x3b, 0xba, 0x95, 0x79, 0xde, 0x76, 0xcd, 0xe6, 0xfd, 0xb7, 0x7d, + 0x9f, 0xb6, 0xfd, 0xaf, 0x05, 0x38, 0x2f, 0x51, 0xe5, 0xb1, 0x73, 0x61, 0x96, 0x3d, 0x32, 0x78, + 0xfc, 0x03, 0x1d, 0x19, 0x03, 0xbd, 0x66, 0xef, 0xe0, 0xbc, 0x30, 0xdb, 0x73, 0xa8, 0x5f, 0xce, + 0x0c, 0x35, 0xb6, 0xca, 0x75, 0xff, 0xc1, 0xfe, 0x0b, 0x07, 0x26, 0xf2, 0x07, 0xfb, 0x04, 0x5e, + 0x14, 0x7e, 0xcd, 0x7c, 0x51, 0xf8, 0x97, 0xec, 0x4d, 0x31, 0xb3, 0x2b, 0x3d, 0xde, 0x16, 0xfe, + 0x1f, 0x0e, 0x9c, 0x95, 0x15, 0xd8, 0xee, 0x39, 0xe3, 0x07, 0x2c, 0x64, 0xe7, 0xf8, 0xa7, 0xd9, + 0xab, 0xc6, 0x34, 0x7b, 0xde, 0x5e, 0xc7, 0xf5, 0x7e, 0xf4, 0x9a, 0x70, 0xee, 0x9f, 0x3b, 0x50, + 0xce, 0xab, 0x70, 0x02, 0x9f, 0xfc, 0x15, 0xf3, 0x93, 0x3f, 0x7b, 0x3c, 0x3d, 0xef, 0xfd, 0xc1, + 0xcb, 0xbd, 0x06, 0x0a, 0x35, 0xa5, 0x5e, 0xe5, 0xd8, 0xba, 0x9d, 0xc5, 0x59, 0xe4, 0x2b, 0x68, + 0x4d, 0x18, 0x88, 0x59, 0x6c, 0x8a, 0x98, 0x02, 0x57, 0x6d, 0x68, 0x5b, 0x94, 0x9e, 0x70, 0x07, + 0xb0, 0xff, 0xb1, 0xe0, 0xe1, 0xfe, 0x4e, 0x01, 0x2e, 0xa8, 0x97, 0xc2, 0xc9, 0x36, 0x69, 0xa6, + 0xeb, 0x83, 0xbd, 0x42, 0xe3, 0xa9, 0x9f, 0xf6, 0x5e, 0xa1, 0x49, 0x59, 0xa4, 0x6b, 0x21, 0x85, + 0x61, 0x8d, 0x27, 0xaa, 0xc0, 0x39, 0xf6, 0x6a, 0xcc, 0xbc, 0x1f, 0x78, 0x4d, 0xff, 0x65, 0x12, + 0x61, 0xd2, 0x0a, 0xb7, 0xbd, 0xa6, 0xd0, 0xd4, 0xd5, 0x85, 0xfb, 0xf9, 0x3c, 0x24, 0x9c, 0x5f, + 0xb7, 0xcb, 0x8c, 0xd0, 0x77, 0x50, 0x33, 0x82, 0xfb, 0x27, 0x0e, 0x8c, 0x9c, 0xe0, 0xbb, 0xea, + 0xa1, 0xb9, 0x24, 0x9e, 0xb6, 0xb7, 0x24, 0x7a, 0x2c, 0x83, 0xdd, 0x22, 0x74, 0x3d, 0x4c, 0x8d, + 0x3e, 0xed, 0xa8, 0xe8, 0x1d, 0x1e, 0x25, 0xf9, 0x61, 0x7b, 0xed, 0x38, 0x4c, 0x96, 0x5a, 0xf4, + 0xd5, 0x8c, 0x3d, 0xa0, 0x60, 0x2b, 0xa1, 0x5c, 0x57, 0x6b, 0x8e, 0x90, 0xc2, 0xf7, 0x4b, 0x0e, + 0x00, 0x6f, 0xa7, 0x78, 0x22, 0x80, 0xb6, 0x6d, 0xe3, 0xd8, 0x46, 0x8a, 0x32, 0xe1, 0x4d, 0x53, + 0x4b, 0x28, 0x2d, 0xc0, 0x5a, 0x4b, 0xee, 0x22, 0x37, 0xef, 0x5d, 0xa7, 0x05, 0xfe, 0xbc, 0x03, + 0xa7, 0x32, 0xcd, 0xcd, 0xa9, 0xbf, 0x69, 0xbe, 0xa3, 0x6a, 0x41, 0xb3, 0x32, 0x13, 0xc7, 0xeb, + 0xc6, 0x93, 0x7f, 0xe1, 0x82, 0xf1, 0x46, 0x3f, 0x7a, 0x05, 0x86, 0xa5, 0xe5, 0x43, 0x4e, 0x6f, + 0x9b, 0xef, 0x49, 0xab, 0xe3, 0x8d, 0x84, 0xc4, 0x38, 0xe5, 0x97, 0x09, 0x0e, 0x2c, 0x1c, 0x28, + 0x38, 0xf0, 0x9d, 0x7d, 0x8d, 0x3a, 0xdf, 0xd8, 0xde, 0x7f, 0x2c, 0xc6, 0xf6, 0xfb, 0xad, 0x1b, + 0xdb, 0x1f, 0x38, 0x61, 0x63, 0xbb, 0xe6, 0xcf, 0x2c, 0xde, 0x85, 0x3f, 0xf3, 0x15, 0x38, 0xbb, + 0x9d, 0x1e, 0x3a, 0xd5, 0x4c, 0x12, 0x59, 0xbf, 0x1e, 0xcb, 0x35, 0xb1, 0xd3, 0x03, 0x74, 0x9c, + 0x90, 0x20, 0xd1, 0x8e, 0xab, 0x69, 0x5c, 0xe2, 0xb3, 0x39, 0xe4, 0x70, 0x2e, 0x93, 0xac, 0x63, + 0x6a, 0xf0, 0x00, 0x8e, 0xa9, 0x6f, 0x39, 0x70, 0xce, 0xeb, 0xba, 0xd9, 0x87, 0xc9, 0xa6, 0x88, + 0x8e, 0xb9, 0x61, 0x4f, 0x85, 0x30, 0xc8, 0x0b, 0x0f, 0x60, 0x5e, 0x11, 0xce, 0x6f, 0x10, 0x7a, + 0x38, 0x8d, 0x12, 0xe0, 0xd1, 0xac, 0xf9, 0x2e, 0xfd, 0xaf, 0x66, 0x43, 0x8f, 0x80, 0x0d, 0xfd, + 0x47, 0xed, 0x9e, 0xb6, 0x2d, 0x84, 0x1f, 0x95, 0xee, 0x22, 0xfc, 0x28, 0xe3, 0x25, 0x1c, 0xb1, + 0xe4, 0x25, 0x0c, 0x60, 0xdc, 0x6f, 0x79, 0x75, 0xb2, 0xd6, 0x69, 0x36, 0xf9, 0x55, 0x1d, 0xf9, + 0xe2, 0x77, 0xae, 0x05, 0x6f, 0x39, 0xac, 0x7a, 0x4d, 0x91, 0xd4, 0x44, 0x45, 0xf2, 0xaa, 0x2b, + 0x49, 0x8b, 0x19, 0x4a, 0xb8, 0x8b, 0x36, 0x9d, 0xb0, 0x2c, 0x9f, 0x26, 0x49, 0xe8, 0x68, 0xb3, + 0x18, 0x97, 0x21, 0x3e, 0x61, 0xaf, 0xa6, 0x60, 0xac, 0xe3, 0xa0, 0x25, 0x18, 0xae, 0x05, 0xb1, + 0xb8, 0xa4, 0x7c, 0x8a, 0x09, 0xb3, 0x77, 0x53, 0x11, 0x38, 0x77, 0xad, 0xa2, 0xae, 0x27, 0xdf, + 0x9f, 0x93, 0x20, 0x56, 0x95, 0xe3, 0xb4, 0x3e, 0x5a, 0x61, 0xc4, 0xc4, 0x5b, 0x86, 0x3c, 0xf4, + 0xe4, 0xc1, 0x1e, 0x5e, 0xb0, 0xb9, 0x6b, 0xf2, 0x35, 0xc6, 0x51, 0xc1, 0x4e, 0x3c, 0x4a, 0x98, + 0x52, 0xd0, 0x5e, 0x5e, 0x3f, 0xbd, 0xef, 0xcb, 0xeb, 0x2c, 0x33, 0x74, 0xd2, 0x54, 0x9e, 0xec, + 0x8b, 0xd6, 0x32, 0x43, 0xa7, 0x41, 0x9d, 0x22, 0x33, 0x74, 0x0a, 0xc0, 0x3a, 0x4b, 0xb4, 0xda, + 0xcb, 0xa3, 0x7f, 0x86, 0x09, 0x8d, 0xc3, 0xfb, 0xe7, 0xf5, 0x98, 0xe8, 0xb3, 0xfb, 0xc5, 0x44, + 0x77, 0xbb, 0xa2, 0xcf, 0x1d, 0xc2, 0x15, 0xdd, 0x60, 0x39, 0x7b, 0x17, 0x66, 0x85, 0xf7, 0xdf, + 0xc2, 0xf9, 0x8e, 0x25, 0x63, 0xe1, 0x41, 0xb2, 0xec, 0x5f, 0xcc, 0x19, 0xf4, 0x0c, 0x1b, 0xbf, + 0x70, 0xe4, 0xb0, 0xf1, 0x8c, 0x3f, 0xf7, 0xde, 0x63, 0xf3, 0xe7, 0x4e, 0x9c, 0x80, 0x3f, 0xf7, + 0xbe, 0x03, 0xfb, 0x73, 0x6f, 0xc1, 0x99, 0x76, 0x58, 0x9b, 0xf3, 0xe3, 0xa8, 0xc3, 0x2e, 0x22, + 0xce, 0x74, 0x6a, 0x75, 0x92, 0x30, 0x87, 0x70, 0xe9, 0xf2, 0xbb, 0xf5, 0x46, 0xb6, 0xd9, 0xaa, + 0x94, 0x0b, 0x2e, 0x53, 0x81, 0xd9, 0x41, 0x58, 0xb4, 0x6f, 0x4e, 0x21, 0xce, 0x63, 0xa1, 0x7b, + 0x92, 0x1f, 0x3c, 0x19, 0x4f, 0xf2, 0x07, 0x61, 0x28, 0x6e, 0x74, 0x92, 0x5a, 0x78, 0x33, 0x60, + 0xe1, 0x02, 0xc3, 0x33, 0xef, 0x52, 0x76, 0x69, 0x01, 0xbf, 0xbd, 0x3b, 0x39, 0x2e, 0xff, 0xd7, + 0x4c, 0xd2, 0x02, 0x82, 0xbe, 0xd6, 0xe3, 0xca, 0x91, 0x7b, 0x9c, 0x57, 0x8e, 0x2e, 0x1c, 0xea, + 0xba, 0x51, 0x9e, 0xbb, 0xfc, 0xa1, 0x9f, 0x3a, 0x77, 0xf9, 0x57, 0x1c, 0x18, 0xdd, 0xd6, 0xed, + 0xff, 0xc2, 0xa5, 0x6f, 0x21, 0x60, 0xc8, 0x70, 0x2b, 0xcc, 0xb8, 0x54, 0x68, 0x19, 0xa0, 0xdb, + 0x59, 0x00, 0x36, 0x5b, 0x92, 0x13, 0xcc, 0xf4, 0xf0, 0x3b, 0x15, 0xcc, 0xf4, 0x1a, 0x94, 0xda, + 0x61, 0x4d, 0x9e, 0x58, 0x99, 0x9f, 0xdf, 0x6e, 0x2c, 0x33, 0xd7, 0x3f, 0x53, 0x16, 0x58, 0xe7, + 0x87, 0x3e, 0xe7, 0xc0, 0xb8, 0x3c, 0x64, 0x09, 0xff, 0x5d, 0x2c, 0xa2, 0x31, 0x6d, 0x9e, 0xed, + 0x78, 0x12, 0xe9, 0x0c, 0x1f, 0xdc, 0xc5, 0x99, 0x2a, 0x24, 0x2a, 0xf8, 0xad, 0x1e, 0xb3, 0xa0, + 0x63, 0xa1, 0x90, 0x4c, 0xa7, 0x60, 0xac, 0xe3, 0xa0, 0xaf, 0x3b, 0x50, 0x6c, 0x84, 0xe1, 0x56, + 0x5c, 0x7e, 0x8c, 0x09, 0xf4, 0xe7, 0x2c, 0x2b, 0x9a, 0x57, 0x29, 0x6d, 0xae, 0x61, 0x3e, 0x21, + 0x0d, 0x41, 0x0c, 0x76, 0x7b, 0x77, 0x72, 0xcc, 0x78, 0xff, 0x2c, 0x7e, 0xe3, 0x6d, 0x0d, 0x22, + 0x0c, 0x95, 0xac, 0x69, 0xe8, 0x2d, 0x07, 0xc6, 0x6f, 0x66, 0xac, 0x13, 0x22, 0x1c, 0x15, 0xdb, + 0xb7, 0x7b, 0xf0, 0xe1, 0xce, 0x42, 0x71, 0x57, 0x0b, 0xd0, 0x67, 0x4d, 0xab, 0x25, 0x8f, 0x5b, + 0xb5, 0x38, 0x80, 0x19, 0x2b, 0x29, 0xbf, 0x8e, 0x94, 0x6f, 0xbe, 0xbc, 0xfb, 0x60, 0x11, 0xda, + 0x99, 0xf4, 0x63, 0xe5, 0x54, 0x25, 0xa6, 0xf1, 0xc4, 0xc2, 0x62, 0x37, 0x3e, 0xbf, 0x6e, 0x3b, + 0x79, 0xeb, 0x3c, 0x8c, 0x99, 0x8e, 0x3a, 0xf4, 0x1e, 0xf3, 0x0d, 0x9a, 0x8b, 0xd9, 0xe7, 0x3c, + 0x46, 0x25, 0xbe, 0xf1, 0xa4, 0x87, 0xf1, 0xe6, 0x46, 0xe1, 0x58, 0xdf, 0xdc, 0xe8, 0x3b, 0x99, + 0x37, 0x37, 0xc6, 0x8f, 0xe3, 0xcd, 0x8d, 0xd3, 0x87, 0x7a, 0x73, 0x43, 0x7b, 0xf3, 0xa4, 0xff, + 0x0e, 0x6f, 0x9e, 0x4c, 0xc3, 0x29, 0x79, 0xe7, 0x88, 0x88, 0x67, 0x0d, 0xb8, 0x0f, 0x5f, 0x3d, + 0xcb, 0x3f, 0x6b, 0x16, 0xe3, 0x2c, 0x3e, 0x5d, 0x64, 0xc5, 0x80, 0xd5, 0x1c, 0xb0, 0x15, 0x94, + 0x65, 0x4e, 0x2d, 0x76, 0x16, 0x16, 0x22, 0x4a, 0x46, 0x59, 0x17, 0x19, 0xec, 0xb6, 0xfc, 0x07, + 0xf3, 0x16, 0xa0, 0x17, 0xa0, 0x1c, 0x6e, 0x6e, 0x36, 0x43, 0xaf, 0x96, 0x3e, 0x0c, 0x22, 0x83, + 0x0c, 0xf8, 0x75, 0x53, 0x95, 0x6a, 0x72, 0xb5, 0x07, 0x1e, 0xee, 0x49, 0x01, 0x7d, 0x8b, 0x2a, + 0x26, 0x49, 0x18, 0x91, 0x5a, 0x6a, 0x78, 0x19, 0x66, 0x7d, 0x26, 0xd6, 0xfb, 0x5c, 0x31, 0xf9, + 0xf0, 0xde, 0xab, 0x8f, 0x92, 0x29, 0xc5, 0xd9, 0x66, 0xa1, 0x08, 0xce, 0xb7, 0xf3, 0xec, 0x3e, + 0xb1, 0xb8, 0x29, 0xb5, 0x9f, 0xf5, 0x49, 0x3d, 0x3e, 0x9f, 0x6b, 0x39, 0x8a, 0x71, 0x0f, 0xca, + 0xfa, 0xe3, 0x1d, 0x43, 0x27, 0xf3, 0x78, 0xc7, 0xc7, 0x00, 0xaa, 0x32, 0x5b, 0x9b, 0xb4, 0x24, + 0x2c, 0x59, 0xb9, 0xc2, 0xc3, 0x69, 0x6a, 0xef, 0x30, 0x2b, 0x36, 0x58, 0x63, 0x89, 0xfe, 0x4f, + 0xee, 0xeb, 0x36, 0xdc, 0x5c, 0x52, 0xb7, 0x3e, 0x27, 0x7e, 0xea, 0x5e, 0xb8, 0xf9, 0x87, 0x0e, + 0x4c, 0xf0, 0x99, 0x97, 0x55, 0xee, 0xa9, 0x6a, 0x21, 0xee, 0x14, 0xd9, 0x8e, 0x43, 0xe1, 0x59, + 0x97, 0x0c, 0xae, 0xcc, 0x6b, 0xbd, 0x4f, 0x4b, 0xd0, 0x97, 0x72, 0x8e, 0x14, 0xa7, 0x6c, 0x19, + 0x20, 0xf3, 0xdf, 0x28, 0x39, 0xb3, 0x77, 0x90, 0x53, 0xc4, 0x3f, 0xed, 0x69, 0x1f, 0x45, 0xac, + 0x79, 0xbf, 0x7c, 0x4c, 0xf6, 0x51, 0xfd, 0x21, 0x95, 0x43, 0x59, 0x49, 0x3f, 0xef, 0xc0, 0xb8, + 0x97, 0x89, 0x1b, 0x61, 0x46, 0x1d, 0x2b, 0x06, 0xa6, 0xe9, 0x28, 0x0d, 0x46, 0x61, 0x4a, 0x5e, + 0x36, 0x44, 0x05, 0x77, 0x31, 0x47, 0x3f, 0x70, 0xe0, 0xbe, 0xf4, 0xb5, 0x96, 0x38, 0xbd, 0x23, + 0x2c, 0x1a, 0x77, 0x96, 0xad, 0xc6, 0x97, 0xac, 0xaf, 0xc6, 0xf5, 0xde, 0x3c, 0xf9, 0xba, 0x7c, + 0x48, 0xac, 0xcb, 0xfb, 0xf6, 0xc1, 0xc4, 0xfb, 0x35, 0x7d, 0xe2, 0xd3, 0x0e, 0x7f, 0xce, 0xae, + 0xa7, 0xca, 0xb7, 0x61, 0xaa, 0x7c, 0xcb, 0x36, 0x1f, 0xd4, 0xd2, 0x75, 0xcf, 0x5f, 0x77, 0xe0, + 0x6c, 0xde, 0x8e, 0x94, 0xd3, 0xa4, 0x8f, 0x9a, 0x4d, 0xb2, 0x78, 0xca, 0xd2, 0x1b, 0x64, 0xe5, + 0xf9, 0x9b, 0x89, 0x6b, 0xf0, 0xe0, 0x9d, 0xbe, 0xe2, 0x9d, 0xe8, 0x0d, 0xe9, 0x6a, 0xf1, 0x9f, + 0x0f, 0x6b, 0x2e, 0xc5, 0x84, 0xb4, 0xad, 0x07, 0x64, 0x07, 0x30, 0xe0, 0x07, 0x4d, 0x3f, 0x20, + 0xe2, 0x9e, 0xa8, 0xcd, 0x33, 0xac, 0x78, 0x8f, 0x8b, 0x52, 0xc7, 0x82, 0xcb, 0x3b, 0xec, 0x61, + 0xcc, 0xbe, 0x70, 0xd8, 0x7f, 0xf2, 0x2f, 0x1c, 0xde, 0x84, 0xe1, 0x9b, 0x7e, 0xd2, 0x60, 0x91, + 0x11, 0xc2, 0x71, 0x67, 0xe1, 0x7e, 0x25, 0x25, 0x97, 0xf6, 0xfd, 0x86, 0x64, 0x80, 0x53, 0x5e, + 0xe8, 0x12, 0x67, 0xcc, 0xc2, 0xb0, 0xb3, 0xf1, 0xb1, 0x37, 0x64, 0x01, 0x4e, 0x71, 0xe8, 0x60, + 0x8d, 0xd0, 0x5f, 0x32, 0x8d, 0x93, 0xc8, 0xac, 0x6c, 0x23, 0x63, 0xa6, 0xa0, 0xc8, 0x6f, 0x31, + 0xdf, 0xd0, 0x78, 0x60, 0x83, 0xa3, 0x4a, 0x6e, 0x3d, 0xd4, 0x33, 0xb9, 0xf5, 0xab, 0x4c, 0x61, + 0x4b, 0xfc, 0xa0, 0x43, 0x56, 0x03, 0x11, 0xbc, 0xbd, 0x6c, 0xe7, 0xce, 0x35, 0xa7, 0xc9, 0x8f, + 0xe0, 0xe9, 0x6f, 0xac, 0xf1, 0xd3, 0xfc, 0x27, 0xa5, 0x7d, 0xfd, 0x27, 0xa9, 0xc9, 0x65, 0xc4, + 0xba, 0xc9, 0x25, 0x21, 0x6d, 0x2b, 0x26, 0x97, 0x9f, 0x2a, 0x73, 0xc0, 0x5f, 0x38, 0x80, 0x94, + 0xde, 0xa5, 0x04, 0xea, 0x09, 0x44, 0x48, 0x7e, 0xdc, 0x01, 0x08, 0xd4, 0x3b, 0xb8, 0x76, 0x77, + 0x41, 0x4e, 0x33, 0x6d, 0x40, 0x0a, 0xc3, 0x1a, 0x4f, 0xf7, 0xcf, 0x9c, 0x34, 0x10, 0x39, 0xed, + 0xfb, 0x09, 0x44, 0x84, 0xed, 0x98, 0x11, 0x61, 0xeb, 0x16, 0x4d, 0xf7, 0xaa, 0x1b, 0x3d, 0x62, + 0xc3, 0x7e, 0x5c, 0x80, 0x53, 0x3a, 0x72, 0x85, 0x9c, 0xc4, 0xc7, 0xbe, 0x69, 0x84, 0xc3, 0x5e, + 0xb7, 0xdb, 0xdf, 0x8a, 0xf0, 0x00, 0xe5, 0x85, 0x5e, 0x7f, 0x2c, 0x13, 0x7a, 0x7d, 0xc3, 0x3e, + 0xeb, 0xfd, 0xe3, 0xaf, 0xff, 0x9b, 0x03, 0x67, 0x32, 0x35, 0x4e, 0x60, 0x82, 0x6d, 0x9b, 0x13, + 0xec, 0x19, 0xeb, 0xbd, 0xee, 0x31, 0xbb, 0xbe, 0x51, 0xe8, 0xea, 0x2d, 0x3b, 0xc4, 0x7d, 0xca, + 0x81, 0x22, 0xd5, 0x96, 0x65, 0x70, 0xd6, 0x47, 0x8f, 0x65, 0x06, 0x30, 0xbd, 0x5e, 0x48, 0x67, + 0xd5, 0x3e, 0x06, 0xc3, 0x9c, 0xfb, 0xc4, 0x27, 0x1d, 0x80, 0x14, 0xe9, 0x9d, 0x52, 0x81, 0xdd, + 0x6f, 0x17, 0xe0, 0x5c, 0xee, 0x34, 0x42, 0x9f, 0x51, 0x16, 0x39, 0xc7, 0x76, 0xe8, 0xa1, 0xc1, + 0x48, 0x37, 0xcc, 0x8d, 0x1a, 0x86, 0x39, 0x61, 0x8f, 0x7b, 0xa7, 0x0e, 0x30, 0x42, 0x4c, 0x6b, + 0x83, 0xf5, 0x23, 0x27, 0x8d, 0x66, 0x55, 0xf9, 0x94, 0xfe, 0x12, 0xde, 0xc8, 0x71, 0x7f, 0xac, + 0x5d, 0x57, 0x90, 0x1d, 0x3d, 0x01, 0x59, 0x71, 0xd3, 0x94, 0x15, 0xd8, 0xbe, 0x1f, 0xb9, 0x87, + 0xb0, 0x78, 0x09, 0xf2, 0x1c, 0xcb, 0x07, 0xcb, 0xe3, 0x68, 0xdc, 0x6d, 0x2d, 0x1c, 0xf8, 0x6e, + 0xeb, 0x28, 0x94, 0x9e, 0xf7, 0x55, 0x0e, 0xd0, 0x99, 0xa9, 0xef, 0xfe, 0xf0, 0xe2, 0x3d, 0xdf, + 0xfb, 0xe1, 0xc5, 0x7b, 0x7e, 0xf0, 0xc3, 0x8b, 0xf7, 0x7c, 0x7c, 0xef, 0xa2, 0xf3, 0xdd, 0xbd, + 0x8b, 0xce, 0xf7, 0xf6, 0x2e, 0x3a, 0x3f, 0xd8, 0xbb, 0xe8, 0xfc, 0xa7, 0xbd, 0x8b, 0xce, 0xdf, + 0xf9, 0xd3, 0x8b, 0xf7, 0x3c, 0x3f, 0x24, 0x3b, 0xf6, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0x1c, + 0x35, 0xd6, 0xb7, 0xed, 0xdc, 0x00, 0x00, } func (m *Amount) Marshal() (dAtA []byte, err error) { @@ -9544,6 +9547,18 @@ func (m *NodeStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + i -= len(m.RestartingPodUID) + copy(dAtA[i:], m.RestartingPodUID) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RestartingPodUID))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xf2 + i = encodeVarintGenerated(dAtA, i, uint64(m.FailedPodRestarts)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xe8 if m.TaskResultSynced != nil { i-- if *m.TaskResultSynced { @@ -16082,6 +16097,9 @@ func (m *NodeStatus) Size() (n int) { if m.TaskResultSynced != nil { n += 3 } + n += 2 + sovGenerated(uint64(m.FailedPodRestarts)) + l = len(m.RestartingPodUID) + n += 2 + l + sovGenerated(uint64(l)) return n } @@ -18948,6 +18966,8 @@ func (this *NodeStatus) String() string { `Progress:` + fmt.Sprintf("%v", this.Progress) + `,`, `NodeFlag:` + strings.Replace(this.NodeFlag.String(), "NodeFlag", "NodeFlag", 1) + `,`, `TaskResultSynced:` + valueToStringGenerated(this.TaskResultSynced) + `,`, + `FailedPodRestarts:` + fmt.Sprintf("%v", this.FailedPodRestarts) + `,`, + `RestartingPodUID:` + fmt.Sprintf("%v", this.RestartingPodUID) + `,`, `}`, }, "") return s @@ -34322,6 +34342,57 @@ func (m *NodeStatus) Unmarshal(dAtA []byte) error { } b := bool(v != 0) m.TaskResultSynced = &b + case 29: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FailedPodRestarts", wireType) + } + m.FailedPodRestarts = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.FailedPodRestarts |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 30: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RestartingPodUID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RestartingPodUID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/workflow/v1alpha1/generated.proto b/pkg/apis/workflow/v1alpha1/generated.proto index 2ece46fc00f9..b32b0846a2fc 100644 --- a/pkg/apis/workflow/v1alpha1/generated.proto +++ b/pkg/apis/workflow/v1alpha1/generated.proto @@ -1173,6 +1173,15 @@ message NodeStatus { // TaskResultSynced is used to determine if the node's output has been received optional bool taskResultSynced = 28; + + // FailedPodRestarts tracks the number of times the pod for this node was restarted + // due to infrastructure failures before the main container started. + optional int32 failedPodRestarts = 29; + + // RestartingPodUID tracks the UID of the pod that is currently being restarted. + // This prevents duplicate restart attempts when the controller processes the same failed pod multiple times. + // Cleared when the replacement pod starts running. + optional string restartingPodUID = 30; } // NodeSynchronizationStatus stores the status of a node diff --git a/pkg/apis/workflow/v1alpha1/openapi_generated.go b/pkg/apis/workflow/v1alpha1/openapi_generated.go index 5bd4c19860f4..8aa8ccd115a3 100644 --- a/pkg/apis/workflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/workflow/v1alpha1/openapi_generated.go @@ -4395,6 +4395,20 @@ func schema_pkg_apis_workflow_v1alpha1_NodeStatus(ref common.ReferenceCallback) Format: "", }, }, + "failedPodRestarts": { + SchemaProps: spec.SchemaProps{ + Description: "FailedPodRestarts tracks the number of times the pod for this node was restarted due to infrastructure failures before the main container started.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "restartingPodUID": { + SchemaProps: spec.SchemaProps{ + Description: "RestartingPodUID tracks the UID of the pod that is currently being restarted. This prevents duplicate restart attempts when the controller processes the same failed pod multiple times. Cleared when the replacement pod starts running.", + Type: []string{"string"}, + Format: "", + }, + }, }, Required: []string{"id", "name", "type"}, }, diff --git a/pkg/apis/workflow/v1alpha1/workflow_types.go b/pkg/apis/workflow/v1alpha1/workflow_types.go index 56c1b86fb6d5..d1ead22dd7a5 100644 --- a/pkg/apis/workflow/v1alpha1/workflow_types.go +++ b/pkg/apis/workflow/v1alpha1/workflow_types.go @@ -2536,6 +2536,15 @@ type NodeStatus struct { // TaskResultSynced is used to determine if the node's output has been received TaskResultSynced *bool `json:"taskResultSynced,omitempty" protobuf:"bytes,28,opt,name=taskResultSynced"` + + // FailedPodRestarts tracks the number of times the pod for this node was restarted + // due to infrastructure failures before the main container started. + FailedPodRestarts int32 `json:"failedPodRestarts,omitempty" protobuf:"varint,29,opt,name=failedPodRestarts"` + + // RestartingPodUID tracks the UID of the pod that is currently being restarted. + // This prevents duplicate restart attempts when the controller processes the same failed pod multiple times. + // Cleared when the replacement pod starts running. + RestartingPodUID string `json:"restartingPodUID,omitempty" protobuf:"bytes,30,opt,name=restartingPodUID"` } // Completed is used to determine if this node can proceed diff --git a/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1NodeStatus.md b/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1NodeStatus.md index 693bf5f5e9ad..c864b38687c9 100644 --- a/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1NodeStatus.md +++ b/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1NodeStatus.md @@ -13,6 +13,7 @@ Name | Type | Description | Notes **daemoned** | **Boolean** | Daemoned tracks whether or not this node was daemoned and need to be terminated | [optional] **displayName** | **String** | DisplayName is a human readable representation of the node. Unique within a template boundary | [optional] **estimatedDuration** | **Integer** | EstimatedDuration in seconds. | [optional] +**failedPodRestarts** | **Integer** | FailedPodRestarts tracks the number of times the pod for this node was restarted due to infrastructure failures before the main container started. | [optional] **finishedAt** | **java.time.Instant** | | [optional] **hostNodeName** | **String** | HostNodeName name of the Kubernetes node on which the Pod is running, if applicable | [optional] **id** | **String** | ID is a unique identifier of a node within the worklow It is implemented as a hash of the node name, which makes the ID deterministic | @@ -27,6 +28,7 @@ Name | Type | Description | Notes **podIP** | **String** | PodIP captures the IP of the pod for daemoned steps | [optional] **progress** | **String** | Progress to completion | [optional] **resourcesDuration** | **Map<String, Long>** | ResourcesDuration is indicative, but not accurate, resource duration. This is populated when the nodes completes. | [optional] +**restartingPodUID** | **String** | RestartingPodUID tracks the UID of the pod that is currently being restarted. This prevents duplicate restart attempts when the controller processes the same failed pod multiple times. Cleared when the replacement pod starts running. | [optional] **startedAt** | **java.time.Instant** | | [optional] **synchronizationStatus** | [**IoArgoprojWorkflowV1alpha1NodeSynchronizationStatus**](IoArgoprojWorkflowV1alpha1NodeSynchronizationStatus.md) | | [optional] **taskResultSynced** | **Boolean** | TaskResultSynced is used to determine if the node's output has been received | [optional] diff --git a/test/e2e/manifests/components/base/workflow-controller-configmap.yaml b/test/e2e/manifests/components/base/workflow-controller-configmap.yaml index 9c40799c7951..4b9ebae98cd8 100644 --- a/test/e2e/manifests/components/base/workflow-controller-configmap.yaml +++ b/test/e2e/manifests/components/base/workflow-controller-configmap.yaml @@ -27,3 +27,6 @@ data: artifactDrivers: | - name: test image: ghcr.io/argoproj-labs/artifact-driver-s3:v0.3.1 + failedPodRestart: | + enabled: true + maxRestarts: 3 diff --git a/test/e2e/pod_restart_test.go b/test/e2e/pod_restart_test.go new file mode 100644 index 000000000000..6f807cc51d66 --- /dev/null +++ b/test/e2e/pod_restart_test.go @@ -0,0 +1,138 @@ +//go:build functional + +package e2e + +import ( + "context" + "encoding/json" + "testing" + "time" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + + wfv1 "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1" + "github.com/argoproj/argo-workflows/v3/test/e2e/fixtures" +) + +type PodRestartSuite struct { + fixtures.E2ESuite +} + +// TestEvictedPodRestarts tests that a pod which is evicted before the main container +// starts is automatically restarted and the workflow eventually succeeds. +func (s *PodRestartSuite) TestEvictedPodRestarts() { + var firstPodName string + + s.Given(). + Workflow(`@testdata/workflow-pod-restart.yaml`). + When(). + SubmitWorkflow(). + // Wait for the pod to be created and init container to start + WaitForPod(func(p *corev1.Pod) bool { + // Wait until pod exists and is running (init container running) + if p.Status.Phase != corev1.PodRunning && p.Status.Phase != corev1.PodPending { + return false + } + firstPodName = p.Name + return true + }). + And(func() { + // Patch the pod status to simulate an eviction before main container started + ctx := context.Background() + + // The patch simulates what happens when a pod is evicted: + // - Phase becomes Failed + // - Reason is set to "Evicted" + // - Message describes the eviction cause + // - Main container never entered Running state (still in Waiting) + patch := map[string]interface{}{ + "status": map[string]interface{}{ + "phase": "Failed", + "reason": "Evicted", + "message": "The node had condition: [DiskPressure]", + "initContainerStatuses": []map[string]interface{}{ + { + "name": "init", + "image": "alpine:latest", + "state": map[string]interface{}{ + "terminated": map[string]interface{}{ + "exitCode": 0, + "reason": "Completed", + }, + }, + "ready": true, + "restartCount": 0, + }, + { + "name": "delay", + "image": "alpine:latest", + "state": map[string]interface{}{ + "terminated": map[string]interface{}{ + "exitCode": 137, + "reason": "Error", + }, + }, + "ready": false, + "restartCount": 0, + }, + }, + "containerStatuses": []map[string]interface{}{ + { + "name": "main", + "image": "alpine:latest", + "state": map[string]interface{}{ + "waiting": map[string]interface{}{ + "reason": "PodInitializing", + }, + }, + "ready": false, + "restartCount": 0, + }, + }, + }, + } + patchBytes, err := json.Marshal(patch) + s.Require().NoError(err) + + _, err = s.KubeClient.CoreV1().Pods(fixtures.Namespace).Patch( + ctx, + firstPodName, + types.MergePatchType, + patchBytes, + metav1.PatchOptions{}, + "status", + ) + s.Require().NoError(err) + s.T().Logf("Patched pod %s to simulate eviction", firstPodName) + }). + WaitForWorkflow(fixtures.ToBeSucceeded, 60*time.Second). + Then(). + ExpectWorkflow(func(t *testing.T, metadata *metav1.ObjectMeta, status *wfv1.WorkflowStatus) { + assert.Equal(t, wfv1.WorkflowSucceeded, status.Phase) + }). + ExpectWorkflowNode(wfv1.SucceededPodNode, func(t *testing.T, n *wfv1.NodeStatus, pod *corev1.Pod) { + // Verify that FailedPodRestarts was incremented + assert.Equal(t, int32(1), n.FailedPodRestarts, "expected FailedPodRestarts to be 1") + + // Verify the main container ran successfully by checking its exit code + require.NotNil(t, pod, "expected pod to exist") + var mainContainerFound bool + for _, c := range pod.Status.ContainerStatuses { + if c.Name == "main" { + mainContainerFound = true + require.NotNil(t, c.State.Terminated, "expected main container to be terminated") + assert.Equal(t, int32(0), c.State.Terminated.ExitCode, "expected main container to exit with code 0") + } + } + assert.True(t, mainContainerFound, "expected to find main container status") + }) +} + +func TestPodRestartSuite(t *testing.T) { + suite.Run(t, new(PodRestartSuite)) +} diff --git a/test/e2e/testdata/workflow-pod-restart.yaml b/test/e2e/testdata/workflow-pod-restart.yaml new file mode 100644 index 000000000000..1554cfc58c96 --- /dev/null +++ b/test/e2e/testdata/workflow-pod-restart.yaml @@ -0,0 +1,15 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Workflow +metadata: + generateName: pod-restart- +spec: + entrypoint: main + templates: + - name: main + initContainers: + - name: delay + image: argoproj/argosay:v2 + command: [sleep, "10"] + container: + image: argoproj/argosay:v2 + command: [echo, "pod ran successfully"] diff --git a/util/telemetry/attributes.go b/util/telemetry/attributes.go index b1e25a9975fc..0385dd313b70 100644 --- a/util/telemetry/attributes.go +++ b/util/telemetry/attributes.go @@ -2,35 +2,37 @@ package telemetry const ( - AttribBuildCompiler string = `compiler` - AttribBuildDate string = `build_date` - AttribBuildGitCommit string = `git_commit` - AttribBuildGitTag string = `git_tag` - AttribBuildGitTreeState string = `git_tree_state` - AttribBuildGoVersion string = `go_version` - AttribBuildPlatform string = `platform` - AttribBuildVersion string = `version` - AttribConcurrencyPolicy string = `concurrency_policy` - AttribCronWFName string = `name` - AttribCronWFNamespace string = `namespace` - AttribDeprecatedFeature string = `feature` - AttribErrorCause string = `cause` - AttribLogLevel string = `level` - AttribNodePhase string = `node_phase` - AttribPodNamespace string = `namespace` - AttribPodPendingReason string = `reason` - AttribPodPhase string = `phase` - AttribQueueName string = `queue_name` - AttribRecentlyStarted string = `recently_started` - AttribRequestCode string = `status_code` - AttribRequestKind string = `kind` - AttribRequestVerb string = `verb` - AttribTemplateCluster string = `cluster_scope` - AttribTemplateName string = `name` - AttribTemplateNamespace string = `namespace` - AttribWorkerType string = `worker_type` - AttribWorkflowNamespace string = `namespace` - AttribWorkflowPhase string = `phase` - AttribWorkflowStatus string = `status` - AttribWorkflowType string = `type` + AttribBuildCompiler string = `compiler` + AttribBuildDate string = `build_date` + AttribBuildGitCommit string = `git_commit` + AttribBuildGitTag string = `git_tag` + AttribBuildGitTreeState string = `git_tree_state` + AttribBuildGoVersion string = `go_version` + AttribBuildPlatform string = `platform` + AttribBuildVersion string = `version` + AttribConcurrencyPolicy string = `concurrency_policy` + AttribCronWFName string = `name` + AttribCronWFNamespace string = `namespace` + AttribDeprecatedFeature string = `feature` + AttribErrorCause string = `cause` + AttribLogLevel string = `level` + AttribNodePhase string = `node_phase` + AttribPodNamespace string = `namespace` + AttribPodPendingReason string = `reason` + AttribPodPhase string = `phase` + AttribPodRestartCondition string = `condition` + AttribPodRestartReason string = `reason` + AttribQueueName string = `queue_name` + AttribRecentlyStarted string = `recently_started` + AttribRequestCode string = `status_code` + AttribRequestKind string = `kind` + AttribRequestVerb string = `verb` + AttribTemplateCluster string = `cluster_scope` + AttribTemplateName string = `name` + AttribTemplateNamespace string = `namespace` + AttribWorkerType string = `worker_type` + AttribWorkflowNamespace string = `namespace` + AttribWorkflowPhase string = `phase` + AttribWorkflowStatus string = `status` + AttribWorkflowType string = `type` ) diff --git a/util/telemetry/builder/values.yaml b/util/telemetry/builder/values.yaml index 10bc8ed520f3..bc1f1cd3618b 100644 --- a/util/telemetry/builder/values.yaml +++ b/util/telemetry/builder/values.yaml @@ -50,6 +50,12 @@ attributes: - name: PodPhase displayName: phase description: The phase that the pod is in + - name: PodRestartCondition + displayName: condition + description: "The node condition that caused the pod restart, e.g., `DiskPressure`, `MemoryPressure`" + - name: PodRestartReason + displayName: reason + description: "The infrastructure failure reason: `Evicted`, `NodeShutdown`, `NodeAffinity`, or `UnexpectedAdmissionError`" - name: QueueName description: The name of the queue - name: RecentlyStarted @@ -206,6 +212,28 @@ metrics: - name: PodNamespace unit: "{pod}" type: Int64Counter + - name: PodRestartsTotal + description: "Total number of pods automatically restarted due to infrastructure failures before the main container started" + extendedDescription: | + This counter tracks pods that were automatically restarted by the [failed pod restart](pod-restarts.md) feature. + These are infrastructure-level failures (like node eviction) that occur before the main container enters the Running state. + notes: | + `reason` will be one of: + + - `Evicted`: Node pressure eviction (`DiskPressure`, `MemoryPressure`, etc.) + - `NodeShutdown`: Graceful node shutdown + - `NodeAffinity`: Node affinity/selector no longer matches + - `UnexpectedAdmissionError`: Unexpected error during pod admission + + `condition` is extracted from the pod status message when available (e.g., `DiskPressure`, `MemoryPressure`). + It will be empty if the condition cannot be determined. + attributes: + - name: PodRestartReason + - name: PodRestartCondition + optional: true + - name: PodNamespace + unit: "{pod}" + type: Int64Counter - name: PodsGauge description: A gauge of the number of workflow created pods currently in the cluster in each phase extendedDescription: | diff --git a/util/telemetry/metrics_helpers.go b/util/telemetry/metrics_helpers.go index dbb5c24631cc..083693ae9daa 100644 --- a/util/telemetry/metrics_helpers.go +++ b/util/telemetry/metrics_helpers.go @@ -20,6 +20,19 @@ func WithWorkflowNamespace(workflowNamespace string) DeprecatedFeatureOption { } } +// PodRestartsTotalOption is a functional option for configuring optional attributes on PodRestartsTotal +type PodRestartsTotalOption func(*InstAttribs) + +// WithPodRestartCondition sets the condition attribute +func WithPodRestartCondition(podRestartCondition string) PodRestartsTotalOption { + return func(a *InstAttribs) { + *a = append(*a, InstAttrib{ + Name: AttribPodRestartCondition, + Value: podRestartCondition, + }) + } +} + // AddCronworkflowsConcurrencypolicyTriggered adds a value to the cronworkflows_concurrencypolicy_triggered counter func (m *Metrics) AddCronworkflowsConcurrencypolicyTriggered(ctx context.Context, val int64, cronWFName string, cronWFNamespace string, concurrencyPolicy string) { attribs := InstAttribs{ @@ -60,13 +73,13 @@ func (m *Metrics) AddErrorCount(ctx context.Context, val int64, errorCause strin // ObserveGauge observes a value for the gauge gauge // This is a helper method for use inside RegisterCallback functions -func (m *Metrics) ObserveGauge(ctx context.Context, o metric.Observer, val int64, workflowStatus string) { +func (m *Metrics) ObserveGauge(ctx context.Context, o metric.Observer, val int64, workflowPhase string) { inst := m.GetInstrument(InstrumentGauge.Name()) if inst == nil { return } attribs := InstAttribs{ - {Name: AttribWorkflowStatus, Value: workflowStatus}, + {Name: AttribWorkflowPhase, Value: workflowPhase}, } inst.ObserveInt(ctx, o, val, attribs) } @@ -132,6 +145,18 @@ func (m *Metrics) AddPodPendingCount(ctx context.Context, val int64, podPendingR m.AddInt(ctx, InstrumentPodPendingCount.Name(), val, attribs) } +// AddPodRestartsTotal adds a value to the pod_restarts_total counter +func (m *Metrics) AddPodRestartsTotal(ctx context.Context, val int64, podRestartReason string, podNamespace string, opts ...PodRestartsTotalOption) { + attribs := InstAttribs{ + {Name: AttribPodRestartReason, Value: podRestartReason}, + {Name: AttribPodNamespace, Value: podNamespace}, + } + for _, opt := range opts { + opt(&attribs) + } + m.AddInt(ctx, InstrumentPodRestartsTotal.Name(), val, attribs) +} + // ObservePodsGauge observes a value for the pods_gauge gauge // This is a helper method for use inside RegisterCallback functions func (m *Metrics) ObservePodsGauge(ctx context.Context, o metric.Observer, val int64, podPhase string) { diff --git a/util/telemetry/metrics_list.go b/util/telemetry/metrics_list.go index 661620ccd083..505a9c1551ee 100644 --- a/util/telemetry/metrics_list.go +++ b/util/telemetry/metrics_list.go @@ -178,6 +178,25 @@ var InstrumentPodPendingCount = BuiltinInstrument{ }, } +var InstrumentPodRestartsTotal = BuiltinInstrument{ + name: "pod_restarts_total", + description: "Total number of pods automatically restarted due to infrastructure failures before the main container started", + unit: "{pod}", + instType: Int64Counter, + attributes: []BuiltinAttribute{ + { + name: AttribPodRestartReason, + }, + { + name: AttribPodRestartCondition, + optional: true, + }, + { + name: AttribPodNamespace, + }, + }, +} + var InstrumentPodsGauge = BuiltinInstrument{ name: "pods_gauge", description: "A gauge of the number of workflow created pods currently in the cluster in each phase", @@ -416,5 +435,8 @@ var InstrumentWorkflowtemplateTriggeredTotal = BuiltinInstrument{ { name: AttribTemplateCluster, }, + { + name: AttribWorkflowPhase, + }, }, } diff --git a/workflow/controller/operator.go b/workflow/controller/operator.go index 09a1f5f60518..e80d46f48dfa 100644 --- a/workflow/controller/operator.go +++ b/workflow/controller/operator.go @@ -1407,11 +1407,40 @@ func (woc *wfOperationCtx) assessNodeStatus(ctx context.Context, pod *apiv1.Pod, } updated.Daemoned = nil + updated.RestartingPodUID = "" case apiv1.PodFailed: // ignore pod failure for daemoned steps updated.Phase, updated.Message = woc.inferFailedReason(ctx, pod, tmpl) woc.log.WithFields(logging.Fields{"message": updated.Message, "displayName": old.DisplayName, "templateName": wfutil.GetTemplateFromNode(*old), "pod": pod.Name}).Info(ctx, "Pod failed") updated.Daemoned = nil + + podUID := string(pod.UID) + // If we've already transitioned this node to Pending for this pod UID, + // ignore duplicate Failed updates to avoid reverting back to Failed. + if podUID != "" && podUID == old.RestartingPodUID && old.Phase == wfv1.NodePending { + return nil + } + // Check if this pod qualifies for automatic restart (failed before entering Running state) + // Skip if we've already initiated a restart for this pod (prevents duplicate restarts on rapid reprocessing) + if woc.shouldAutoRestartPod(ctx, pod, tmpl, old) { + if podUID != old.RestartingPodUID { + updated.FailedPodRestarts++ + updated.RestartingPodUID = podUID + woc.log.WithFields(logging.Fields{ + "podName": pod.Name, + "nodeID": old.ID, + "restartCount": updated.FailedPodRestarts, + "reason": pod.Status.Reason, + "message": pod.Status.Message, + }).Info(ctx, "Pod qualifies for automatic restart - marking as pending") + updated.Phase = wfv1.NodePending + updated.Message = fmt.Sprintf("Pod auto-restarting due to %s: %s", pod.Status.Reason, pod.Status.Message) + woc.controller.metrics.RecordPodRestart(ctx, pod.Status.Reason, pod.Status.Message, pod.Namespace) + } + // Issue a delete request by UID here in case we lost the delete request + // since the last call to operate() (for example: controller restart) + woc.controller.PodController.DeletePodByUID(ctx, pod.Namespace, pod.Name, podUID) + } case apiv1.PodRunning: // Daemons are a special case we need to understand the rules: // A node transitions into "daemoned" only if it's a daemon template and it becomes running AND ready. @@ -1434,6 +1463,8 @@ func (woc *wfOperationCtx) assessNodeStatus(ctx context.Context, pod *apiv1.Pod, } else { updated.Phase = wfv1.NodeRunning } + // Clear RestartingPodUID since the pod is now running successfully + updated.RestartingPodUID = "" if tmpl != nil { woc.cleanUpPod(ctx, pod, *tmpl) } @@ -1759,6 +1790,59 @@ func (woc *wfOperationCtx) inferFailedReason(ctx context.Context, pod *apiv1.Pod } } +// shouldAutoRestartPod checks if a failed pod should be automatically restarted. +// A pod qualifies for auto-restart if: +// 1. The failedPodRestart feature is enabled in controller config +// 2. The pod failed before its main container entered Running state +// 3. The failure reason is a restartable infrastructure failure such as Evicted due to node pressure +// 4. The restart count hasn't exceeded the configured limit +// +// This works in conjunction with retryStrategy - infrastructure failures that happen +// before the container starts are handled transparently here, while application-level +// failures after the container runs are handled by retryStrategy. +func (woc *wfOperationCtx) shouldAutoRestartPod(ctx context.Context, pod *apiv1.Pod, tmpl *wfv1.Template, node *wfv1.NodeStatus) bool { + // Check if the feature is enabled + config := woc.controller.Config.FailedPodRestart + if !config.IsEnabled() { + woc.log.WithFields(logging.Fields{ + "podName": pod.Name, + }).Debug(ctx, "Pod restart check: feature not enabled") + return false + } + + // Analyze if the pod qualifies for restart + woc.log.WithFields(logging.Fields{ + "podName": pod.Name, + "podPhase": pod.Status.Phase, + "podReason": pod.Status.Reason, + "podMessage": pod.Status.Message, + "containerStatuses": len(pod.Status.ContainerStatuses), + "initContainerStatuses": len(pod.Status.InitContainerStatuses), + }).Info(ctx, "Pod restart check: analyzing pod status") + + if !analyzePodForRestart(pod, tmpl) { + woc.log.WithFields(logging.Fields{ + "podName": pod.Name, + "podReason": pod.Status.Reason, + }).Info(ctx, "Pod restart check: pod does not qualify for restart") + return false + } + + // Check if we've exceeded the max restart count + maxRestarts := config.GetMaxRestarts() + if node.FailedPodRestarts >= maxRestarts { + woc.log.WithFields(logging.Fields{ + "podName": pod.Name, + "nodeID": node.ID, + "currentRestarts": node.FailedPodRestarts, + "maxRestarts": maxRestarts, + }).Info(ctx, "Pod has exceeded max auto-restart attempts") + return false + } + + return true +} + func (woc *wfOperationCtx) createPVCs(ctx context.Context) error { if woc.wf.Status.Phase != wfv1.WorkflowPending && woc.wf.Status.Phase != wfv1.WorkflowRunning { // Only attempt to create PVCs if workflow is in Pending or Running state diff --git a/workflow/controller/pod/accessors.go b/workflow/controller/pod/accessors.go index a311fb494c00..c2ccd7d9077b 100644 --- a/workflow/controller/pod/accessors.go +++ b/workflow/controller/pod/accessors.go @@ -36,6 +36,10 @@ func (c *Controller) DeletePod(ctx context.Context, namespace, name string) { c.queuePodForCleanup(ctx, namespace, name, deletePod) } +func (c *Controller) DeletePodByUID(ctx context.Context, namespace, name, uid string) { + c.queuePodForCleanupByUID(ctx, namespace, name, uid) +} + func (c *Controller) RemoveFinalizer(ctx context.Context, namespace, name string) { c.queuePodForCleanup(ctx, namespace, name, removeFinalizer) } diff --git a/workflow/controller/pod/cleanup_key.go b/workflow/controller/pod/cleanup_key.go index 1f85300dab18..b37014b8ebe6 100644 --- a/workflow/controller/pod/cleanup_key.go +++ b/workflow/controller/pod/cleanup_key.go @@ -17,6 +17,7 @@ type ( const ( noAction podCleanupAction = "" deletePod podCleanupAction = "deletePod" + deletePodByUID podCleanupAction = "deletePodByUID" labelPodCompleted podCleanupAction = "labelPodCompleted" terminateContainers podCleanupAction = "terminateContainers" killContainers podCleanupAction = "killContainers" @@ -27,10 +28,18 @@ func newPodCleanupKey(namespace string, podName string, action podCleanupAction) return fmt.Sprintf("%s/%s/%v", namespace, podName, action) } -func parsePodCleanupKey(k podCleanupKey) (namespace string, podName string, action podCleanupAction) { +func newPodCleanupKeyWithUID(namespace string, podName string, action podCleanupAction, uid string) podCleanupKey { + return fmt.Sprintf("%s/%s/%v/%s", namespace, podName, action, uid) +} + +func parsePodCleanupKey(k podCleanupKey) (namespace string, podName string, action podCleanupAction, uid string) { parts := strings.Split(k, "/") - if len(parts) != 3 { - return "", "", "" + switch len(parts) { + case 3: + return parts[0], parts[1], parts[2], "" + case 4: + return parts[0], parts[1], parts[2], parts[3] + default: + return "", "", "", "" } - return parts[0], parts[1], parts[2] } diff --git a/workflow/controller/pod/queue.go b/workflow/controller/pod/queue.go index 5682757ab1a6..768329fa6631 100644 --- a/workflow/controller/pod/queue.go +++ b/workflow/controller/pod/queue.go @@ -110,7 +110,7 @@ func (c *Controller) processNextPodCleanupItem(ctx context.Context) bool { c.workqueue.Done(key) }() - namespace, podName, action := parsePodCleanupKey(key) + namespace, podName, action, uid := parsePodCleanupKey(key) ctx, log := c.log.WithFields(logging.Fields{"key": key, "action": action, "namespace": namespace, "podName": podName}).InContext(ctx) log.Info(ctx, "cleaning up pod") err := func() error { @@ -146,6 +146,21 @@ func (c *Controller) processNextPodCleanupItem(ctx context.Context) bool { if err != nil && !apierr.IsNotFound(err) { return err } + case deletePodByUID: + pods := c.kubeclientset.CoreV1().Pods(namespace) + if err := c.patchPodForCleanup(ctx, pods, namespace, podName, false); err != nil { + return err + } + propagation := metav1.DeletePropagationBackground + podUID := types.UID(uid) + err := pods.Delete(ctx, podName, metav1.DeleteOptions{ + PropagationPolicy: &propagation, + GracePeriodSeconds: c.config.PodGCGracePeriodSeconds, + Preconditions: &metav1.Preconditions{UID: &podUID}, + }) + if err != nil && !apierr.IsNotFound(err) { + return err + } case removeFinalizer: pods := c.kubeclientset.CoreV1().Pods(namespace) if err := c.patchPodForCleanup(ctx, pods, namespace, podName, false); err != nil { @@ -178,3 +193,8 @@ func (c *Controller) queuePodForCleanupAfter(ctx context.Context, namespace stri c.workqueue.AddRateLimited(newPodCleanupKey(namespace, podName, action)) } } + +func (c *Controller) queuePodForCleanupByUID(ctx context.Context, namespace string, podName string, uid string) { + c.log.WithFields(logging.Fields{"namespace": namespace, "podName": podName, "uid": uid, "action": deletePodByUID}).Info(ctx, "queueing pod for cleanup by UID") + c.workqueue.AddRateLimited(newPodCleanupKeyWithUID(namespace, podName, deletePodByUID, uid)) +} diff --git a/workflow/controller/pod/queue_test.go b/workflow/controller/pod/queue_test.go index 09d9ec010b36..2d93e873bf06 100644 --- a/workflow/controller/pod/queue_test.go +++ b/workflow/controller/pod/queue_test.go @@ -11,6 +11,72 @@ import ( "github.com/argoproj/argo-workflows/v3/workflow/common" ) +func TestParsePodCleanupKey(t *testing.T) { + tests := []struct { + name string + key podCleanupKey + wantNamespace string + wantPodName string + wantAction podCleanupAction + wantUID string + }{ + { + name: "standard key without UID", + key: "default/my-pod/deletePod", + wantNamespace: "default", + wantPodName: "my-pod", + wantAction: deletePod, + wantUID: "", + }, + { + name: "key with UID", + key: "default/my-pod/deletePodByUID/abc-123-def", + wantNamespace: "default", + wantPodName: "my-pod", + wantAction: deletePodByUID, + wantUID: "abc-123-def", + }, + { + name: "invalid key - too few parts", + key: "default/my-pod", + wantNamespace: "", + wantPodName: "", + wantAction: "", + wantUID: "", + }, + { + name: "invalid key - too many parts", + key: "default/my-pod/deletePod/uid/extra", + wantNamespace: "", + wantPodName: "", + wantAction: "", + wantUID: "", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + namespace, podName, action, uid := parsePodCleanupKey(tt.key) + assert.Equal(t, tt.wantNamespace, namespace) + assert.Equal(t, tt.wantPodName, podName) + assert.Equal(t, tt.wantAction, action) + assert.Equal(t, tt.wantUID, uid) + }) + } +} + +func TestNewPodCleanupKeyWithUID(t *testing.T) { + key := newPodCleanupKeyWithUID("my-namespace", "my-pod", deletePodByUID, "pod-uid-123") + assert.Equal(t, "my-namespace/my-pod/deletePodByUID/pod-uid-123", key) + + // Verify round-trip + namespace, podName, action, uid := parsePodCleanupKey(key) + assert.Equal(t, "my-namespace", namespace) + assert.Equal(t, "my-pod", podName) + assert.Equal(t, deletePodByUID, action) + assert.Equal(t, "pod-uid-123", uid) +} + func TestPodCleanupPatch(t *testing.T) { c := &Controller{} diff --git a/workflow/controller/pod_restart.go b/workflow/controller/pod_restart.go new file mode 100644 index 000000000000..80259d4c968f --- /dev/null +++ b/workflow/controller/pod_restart.go @@ -0,0 +1,64 @@ +package controller + +import ( + apiv1 "k8s.io/api/core/v1" + + wfv1 "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1" + "github.com/argoproj/argo-workflows/v3/workflow/common" +) + +// analyzePodForRestart determines if a failed pod should be automatically restarted. +// A pod qualifies for restart if: +// 1. It failed (pod.Status.Phase == PodFailed) +// 2. Its main container never entered the Running state +// 3. The failure reason is a restartable infrastructure failure +func analyzePodForRestart(pod *apiv1.Pod, tmpl *wfv1.Template) bool { + if pod.Status.Phase != apiv1.PodFailed { + return false + } + if !mainContainerNeverStarted(pod, tmpl) { + return false + } + return isRestartableReason(pod.Status.Reason) +} + +// mainContainerNeverStarted checks if the main container(s) never entered the Running state. +func mainContainerNeverStarted(pod *apiv1.Pod, tmpl *wfv1.Template) bool { + if len(pod.Status.ContainerStatuses) == 0 { + return true + } + + for _, status := range pod.Status.ContainerStatuses { + var isMainContainer bool + if tmpl != nil { + isMainContainer = tmpl.IsMainContainerName(status.Name) + } else { + isMainContainer = status.Name == common.MainContainerName + } + + if isMainContainer { + if status.State.Running != nil || status.LastTerminationState.Running != nil { + return false + } + if status.State.Terminated != nil && !status.State.Terminated.StartedAt.IsZero() { + return false + } + } + } + + return true +} + +// isRestartableReason checks if the pod failure reason qualifies for automatic restart. +// These reasons indicate infrastructure-level failures set by the kubelet: +// - Evicted: node pressure eviction (DiskPressure, MemoryPressure, etc.) +// - NodeShutdown: graceful node shutdown +// - NodeAffinity: node affinity/selector no longer matches +// - UnexpectedAdmissionError: unexpected error during pod admission +func isRestartableReason(reason string) bool { + switch reason { + case "Evicted", "NodeShutdown", "NodeAffinity", "UnexpectedAdmissionError": + return true + } + return false +} diff --git a/workflow/controller/pod_restart_test.go b/workflow/controller/pod_restart_test.go new file mode 100644 index 000000000000..12dcacd7bee3 --- /dev/null +++ b/workflow/controller/pod_restart_test.go @@ -0,0 +1,293 @@ +package controller + +import ( + "testing" + + "github.com/stretchr/testify/assert" + apiv1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + wfv1 "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1" + "github.com/argoproj/argo-workflows/v3/workflow/common" +) + +func TestMainContainerNeverStarted(t *testing.T) { + tests := []struct { + name string + pod *apiv1.Pod + tmpl *wfv1.Template + expected bool + }{ + { + name: "pod with no container statuses (never scheduled)", + pod: &apiv1.Pod{ + Status: apiv1.PodStatus{ + Phase: apiv1.PodFailed, + ContainerStatuses: []apiv1.ContainerStatus{}, + }, + }, + tmpl: nil, + expected: true, + }, + { + name: "main container in waiting state", + pod: &apiv1.Pod{ + Status: apiv1.PodStatus{ + Phase: apiv1.PodFailed, + ContainerStatuses: []apiv1.ContainerStatus{ + { + Name: common.MainContainerName, + State: apiv1.ContainerState{ + Waiting: &apiv1.ContainerStateWaiting{ + Reason: "ContainerCreating", + Message: "Container is creating", + }, + }, + }, + }, + }, + }, + tmpl: nil, + expected: true, + }, + { + name: "main container ran and terminated", + pod: &apiv1.Pod{ + Status: apiv1.PodStatus{ + Phase: apiv1.PodFailed, + ContainerStatuses: []apiv1.ContainerStatus{ + { + Name: common.MainContainerName, + State: apiv1.ContainerState{ + Terminated: &apiv1.ContainerStateTerminated{ + ExitCode: 1, + StartedAt: metav1.Now(), + FinishedAt: metav1.Now(), + }, + }, + }, + }, + }, + }, + tmpl: nil, + expected: false, + }, + { + name: "main container was running", + pod: &apiv1.Pod{ + Status: apiv1.PodStatus{ + Phase: apiv1.PodFailed, + ContainerStatuses: []apiv1.ContainerStatus{ + { + Name: common.MainContainerName, + State: apiv1.ContainerState{ + Running: &apiv1.ContainerStateRunning{ + StartedAt: metav1.Now(), + }, + }, + }, + }, + }, + }, + tmpl: nil, + expected: false, + }, + { + name: "main container waiting for pod initializing", + pod: &apiv1.Pod{ + Status: apiv1.PodStatus{ + Phase: apiv1.PodFailed, + ContainerStatuses: []apiv1.ContainerStatus{ + { + Name: common.MainContainerName, + State: apiv1.ContainerState{ + Waiting: &apiv1.ContainerStateWaiting{ + Reason: "PodInitializing", + }, + }, + }, + }, + }, + }, + tmpl: nil, + expected: true, + }, + { + name: "main container terminated but never had startedAt", + pod: &apiv1.Pod{ + Status: apiv1.PodStatus{ + Phase: apiv1.PodFailed, + ContainerStatuses: []apiv1.ContainerStatus{ + { + Name: common.MainContainerName, + State: apiv1.ContainerState{ + Terminated: &apiv1.ContainerStateTerminated{ + ExitCode: 137, + Reason: "OOMKilled", + // No StartedAt - container was killed before starting + }, + }, + }, + }, + }, + }, + tmpl: nil, + expected: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := mainContainerNeverStarted(tt.pod, tt.tmpl) + assert.Equal(t, tt.expected, result) + }) + } +} + +func TestIsRestartableReason(t *testing.T) { + tests := []struct { + name string + reason string + expected bool + }{ + { + name: "Evicted", + reason: "Evicted", + expected: true, + }, + { + name: "NodeShutdown", + reason: "NodeShutdown", + expected: true, + }, + { + name: "NodeAffinity", + reason: "NodeAffinity", + expected: true, + }, + { + name: "UnexpectedAdmissionError", + reason: "UnexpectedAdmissionError", + expected: true, + }, + { + name: "OOMKilled is not restartable", + reason: "OOMKilled", + expected: false, + }, + { + name: "Error is not restartable", + reason: "Error", + expected: false, + }, + { + name: "empty reason", + reason: "", + expected: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := isRestartableReason(tt.reason) + assert.Equal(t, tt.expected, result) + }) + } +} + +func TestAnalyzePodForRestart(t *testing.T) { + tests := []struct { + name string + pod *apiv1.Pod + tmpl *wfv1.Template + expected bool + }{ + { + name: "running pod should not restart", + pod: &apiv1.Pod{ + Status: apiv1.PodStatus{ + Phase: apiv1.PodRunning, + }, + }, + expected: false, + }, + { + name: "succeeded pod should not restart", + pod: &apiv1.Pod{ + Status: apiv1.PodStatus{ + Phase: apiv1.PodSucceeded, + }, + }, + expected: false, + }, + { + name: "evicted pod that never started should restart", + pod: &apiv1.Pod{ + Status: apiv1.PodStatus{ + Phase: apiv1.PodFailed, + Reason: "Evicted", + Message: "The node had condition: [DiskPressure]", + ContainerStatuses: []apiv1.ContainerStatus{ + { + Name: common.MainContainerName, + State: apiv1.ContainerState{ + Waiting: &apiv1.ContainerStateWaiting{ + Reason: "ContainerCreating", + }, + }, + }, + }, + }, + }, + expected: true, + }, + { + name: "evicted pod that ran should not restart", + pod: &apiv1.Pod{ + Status: apiv1.PodStatus{ + Phase: apiv1.PodFailed, + Reason: "Evicted", + Message: "The node had condition: [DiskPressure]", + ContainerStatuses: []apiv1.ContainerStatus{ + { + Name: common.MainContainerName, + State: apiv1.ContainerState{ + Terminated: &apiv1.ContainerStateTerminated{ + ExitCode: 137, + StartedAt: metav1.Now(), + FinishedAt: metav1.Now(), + }, + }, + }, + }, + }, + }, + expected: false, + }, + { + name: "failed pod with non-restartable reason should not restart", + pod: &apiv1.Pod{ + Status: apiv1.PodStatus{ + Phase: apiv1.PodFailed, + Reason: "OOMKilled", + ContainerStatuses: []apiv1.ContainerStatus{ + { + Name: common.MainContainerName, + State: apiv1.ContainerState{ + Waiting: &apiv1.ContainerStateWaiting{}, + }, + }, + }, + }, + }, + expected: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := analyzePodForRestart(tt.pod, tt.tmpl) + assert.Equal(t, tt.expected, result) + }) + } +} diff --git a/workflow/metrics/counter_pod_restart.go b/workflow/metrics/counter_pod_restart.go new file mode 100644 index 000000000000..7878b674811f --- /dev/null +++ b/workflow/metrics/counter_pod_restart.go @@ -0,0 +1,40 @@ +package metrics + +import ( + "context" + "regexp" + + "github.com/argoproj/argo-workflows/v3/util/telemetry" +) + +// conditionRegex extracts the condition from pod status messages like +// "The node had condition: [DiskPressure]" -> "DiskPressure" +var conditionRegex = regexp.MustCompile(`\[(\w+)\]`) + +func addPodRestartCounter(_ context.Context, m *Metrics) error { + return m.CreateBuiltinInstrument(telemetry.InstrumentPodRestartsTotal) +} + +// RecordPodRestart records a metric when a pod is automatically restarted +// due to an infrastructure failure. +func (m *Metrics) RecordPodRestart(ctx context.Context, reason, message, namespace string) { + condition := extractConditionFromMessage(message) + + opts := []telemetry.PodRestartsTotalOption{} + if condition != "" { + opts = append(opts, telemetry.WithPodRestartCondition(condition)) + } + + m.AddPodRestartsTotal(ctx, 1, reason, namespace, opts...) +} + +// extractConditionFromMessage extracts the node condition from the pod status message. +// For example, "The node had condition: [DiskPressure]" returns "DiskPressure". +// Returns empty string if no condition can be extracted. +func extractConditionFromMessage(message string) string { + matches := conditionRegex.FindStringSubmatch(message) + if len(matches) >= 2 { + return matches[1] + } + return "" +} diff --git a/workflow/metrics/counter_pod_restart_test.go b/workflow/metrics/counter_pod_restart_test.go new file mode 100644 index 000000000000..314a4234c54a --- /dev/null +++ b/workflow/metrics/counter_pod_restart_test.go @@ -0,0 +1,53 @@ +package metrics + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestExtractConditionFromMessage(t *testing.T) { + tests := []struct { + name string + message string + expected string + }{ + { + name: "DiskPressure condition", + message: "The node had condition: [DiskPressure]", + expected: "DiskPressure", + }, + { + name: "MemoryPressure condition", + message: "The node had condition: [MemoryPressure]", + expected: "MemoryPressure", + }, + { + name: "PIDPressure condition", + message: "The node had condition: [PIDPressure]", + expected: "PIDPressure", + }, + { + name: "no condition in message", + message: "Pod was evicted", + expected: "", + }, + { + name: "empty message", + message: "", + expected: "", + }, + { + name: "multiple conditions takes first", + message: "The node had condition: [DiskPressure] and [MemoryPressure]", + expected: "DiskPressure", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result := extractConditionFromMessage(tt.message) + assert.Equal(t, tt.expected, result) + }) + } +} diff --git a/workflow/metrics/metrics.go b/workflow/metrics/metrics.go index 0f5477a2bdc6..b3e5076c3f42 100644 --- a/workflow/metrics/metrics.go +++ b/workflow/metrics/metrics.go @@ -46,6 +46,7 @@ func New(ctx context.Context, serviceName, prometheusName string, config *teleme addPodPhaseCounter, addPodMissingCounter, addPodPendingCounter, + addPodRestartCounter, addWorkflowPhaseGauge, addCronWfTriggerCounter, addCronWfPolicyCounter,