From 776d70cd7640e389093ff89bf3134cbd736e1a65 Mon Sep 17 00:00:00 2001 From: Varun Nandi Date: Mon, 24 Jun 2019 10:18:04 -0700 Subject: [PATCH 1/5] Add ReadMe with tenets, metrics list to collect, design doc. Added prototype interfaces --- docs/design/core/metrics/Design.md | 206 ++++++++++++++++++ docs/design/core/metrics/MetricsList.md | 128 +++++++++++ docs/design/core/metrics/README.md | 64 ++++++ .../images/MetricsModulesHierarchy.png | Bin 0 -> 44316 bytes .../metrics/images/MetricsSequenceDiagram.png | Bin 0 -> 58299 bytes .../MetricConfigurationProvider.java | 45 ++++ .../metrics/prototype/MetricPublisher.java | 68 ++++++ .../MetricPublisherConfiguration.java | 92 ++++++++ .../metrics/prototype/MetricRegistry.java | 127 +++++++++++ 9 files changed, 730 insertions(+) create mode 100644 docs/design/core/metrics/Design.md create mode 100644 docs/design/core/metrics/MetricsList.md create mode 100644 docs/design/core/metrics/README.md create mode 100644 docs/design/core/metrics/images/MetricsModulesHierarchy.png create mode 100644 docs/design/core/metrics/images/MetricsSequenceDiagram.png create mode 100644 docs/design/core/metrics/prototype/MetricConfigurationProvider.java create mode 100644 docs/design/core/metrics/prototype/MetricPublisher.java create mode 100644 docs/design/core/metrics/prototype/MetricPublisherConfiguration.java create mode 100644 docs/design/core/metrics/prototype/MetricRegistry.java diff --git a/docs/design/core/metrics/Design.md b/docs/design/core/metrics/Design.md new file mode 100644 index 000000000000..670f5649dea5 --- /dev/null +++ b/docs/design/core/metrics/Design.md @@ -0,0 +1,206 @@ +## Concepts +### Metric +* A representation of data collected +* Metric can be one of the following types: Counter, Gauge, Timer +* Metric can have tags. A Tag represent the category it belongs to (like Default, HttpClient, Streaming etc) + +### MetricRegistry + +* A MetricRegistry represent an interface to store the collected metric data. It can hold different types of Metrics described above +* MetricRegistry is generic and not tied to specific category (ApiCall, HttpClient etc) of metrics. +* Each API has it own instance of the MetricRegistry. All metrics collected in the ApiCall lifecycle are stored in that instance. +* A MetricRegistry can store other instances of same type. This can be used to store metrics for each Attempt in an Api Call. +* [Interface prototype](prototype/MetricRegistry.java) + +### MetricPublisher + +* A MetricPublisher represent an interface to publish the collected metrics to a external source. +* SDK provides implementations to publish metrics to services like [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/), [Client Side Monitoring](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/sdk-metrics.html) (also known as AWS SDK Metrics for Enterprise Support) +* Customers can implement the interface and register the custom implementation to publish metrics to a platform not supported in the SDK. +* MetricPublishers can have different behaviors in terms of list of metrics to publish, publishing frequency, configuration needed to publish etc. +* Metrics can be explicitly published to the platform by calling publish() method. This can be useful in scenarios when the application fails +and customer wants to flush metrics before exiting the application. +* [Interface prototype](prototype/MetricPublisher.java) + +### Reporting + +* Reporting is transferring the collected metrics to Publishers. +* To report metrics to a publisher, call the registerMetrics(MetricRegistry) method on the MetricPublisher. +* There is no requirement for Publisher to publish the reported metrics immediately after calling this method. + + +## Enabling Metrics + +Metrics feature is disabled by default. Metrics can be enabled at client level in the following ways. + +### Feature Flags (Metrics Provider) + +* SDK exposes an [interface](prototype/MetricConfigurationProvider.java) to enable the metrics feature and specify options to configure the metrics behavior. +* SDK provides an implementation of this interface based on system properties. +* Here are the system properties SDK supports: + - **aws.javasdk2x.metrics.enabled** - Metrics feature is enabled if this system property is set + - **aws.javasdk2x.metrics.category** - Comma separated set of MetricCategory that are enabled for collection +* SDK calls the methods in this interface for each request ie, enabled() method is called for every request to determine if the metrics +feature is enabled or not (similarly for other configuration options). +* This helps customers to provide MetricConfigurationProvider implementations that uses external sources like DynamoDB to control metrics feature. +This is useful to enable/disable metrics feature and control metrics options at runtime without the need to make code changes or re-deploy the application. +* As the interface methods are called for each request, it is recommended for the implementations to run expensive tasks asynchronously in the background, +cache the results and periodically refresh the results. + +``` +ClientOverrideConfiguration config = ClientOverrideConfiguration + .builder() + // If this is not set, SDK uses the default chain with system property + .metricConfigurationProvider(new SystemSettingsMetricConfigurationProvider()) + .build(); + +// Set the ClientOverrideConfiguration instance on the client builder +CodePipelineAsyncClient asyncClient = + CodePipelineAsyncClient + .builder() + .overrideConfiguration(config) + .build(); +``` + +### Metrics Provider Chain + +* Customers might want to have different ways of enabling the metrics feature. For example: use SystemProperties by default. If not use implementation based on Amazon DynamoDB. +* To support multiple providers, SDK allows setting chain of providers (similar to the CredentialsProviderChain to resolve credentials). As provider has multiple +configuration options, a single provider is resolved at chain construction time and it is used throughout the lifecycle of the application to keep the behavior intuitive. +* If no custom chain is provided, SDK will use a default chain while looks for the System properties defined in above section. +SDK can add more providers in the default chain in the future without breaking customers. + +``` +MetricConfigurationProvider chain = new MetricConfigurationProviderChain( + new SystemSettingsMetricConfigurationProvider(), + // example custom implementation (not provided by the SDK) + DynamoDBMetricConfigurationProvider.builder() + .tableName(TABLE_NAME) + .enabledKey(ENABLE_KEY_NAME) + ... + .build(), + ); + +ClientOverrideConfiguration config = ClientOverrideConfiguration + .builder() + // If this is not set, SDK uses the default chain with system property + .metricConfigurationProvider(chain) + .build(); + +// Set the ClientOverrideConfiguration instance on the client builder +CodePipelineAsyncClient asyncClient = + CodePipelineAsyncClient + .builder() + .overrideConfiguration(config) + .build(); +``` + +### Metric Publishers Configuration + +* If metrics are enabled, SDK by default uses a single publisher that uploads metrics to CloudWatch using default credentials and region. +* Customers might want to use different configuration for the CloudWatch publisher or even use a different publisher to publish to a different source. +To provide this flexibility, SDK exposes an option to set [MetricPublisherConfiguration](prototype/MetricPublisherConfiguration.java) which can be +used to configure custom publishers. +* SDK publishes the collected metrics to each of the configured publishers in the MetricPublisherConfiguration. + +``` +ClientOverrideConfiguration config = ClientOverrideConfiguration + .builder() + .metricPublisherConfiguration(MetricPublisherConfiguration + .builder() + .addPublisher( + CloudWatchPublisher.builder() + .credentialsProvider(...) + .region(Region.AP_SOUTH_1) + .publishFrequency(5, TimeUnit.MINUTES) + .build(), + CsmPublisher.create()).bu + .build()) + .build(); + +// Set the ClientOverrideConfiguration instance on the client builder +CodePipelineAsyncClient asyncClient = + CodePipelineAsyncClient + .builder() + .overrideConfiguration(config) + .build(); +``` + + +## Modules +New modules are created to support metrics feature. + +### metrics-spi +* Contains the metrics interfaces and default implementations that don't require other dependencies +* This is a sub module under `core` +* `sdk-core` has a dependency on `metrics-spi`, so customers will automatically get a dependency on this module. + +### metrics-publishers +* This is a new module that contains implementations of all SDK supported publishers +* Under this module, a new sub-module is created for each publisher (`cloudwatch-publisher`, `csm-publisher`) +* Customers has to **explicitly add dependency** on these modules to use the sdk provided publishers + + +## Sequence Diagram + +![Normal API Call flow](images/MetricsSequenceDiagram.png) + +1. Client enables metrics feature through MetricConfigurationProvider and configure publishers through MetricPublisherConfiguration. +2. For each API call, a new MetricRegistry object is created and stored in the ExecutionAttributes. If metrics are not enabled, a NoOpMetricRegistry is used. +3. At each metric collection point, the metric is registered in the MetricRegistry object if its category is enabled in MetricConfigurationProvider. +4. The metrics that are collected once for a Api Call execution are stored in the METRIC_REGISTRY ExecutionAttribute. +5. The metrics that are collected per Api Call attempt are stored in new MetricRegistry instances which are part of the ApiCall MetricRegistry. +These MetricRegistry instance for the current attempt is also accessed through ATTEMPT_METRIC_REGISTRY ExecutionAttribute. +6. At end of API call, report the MetricRegistry object to MetricPublishers by calling registerMetrics(MetricRegistry) method. This is done in an ExecutionInterceptor. +7. Steps 2 to 6 are repeated for each API call +8. MetricPublisher calls publish() method to report metrics to external sources. The frequency of publish() method call is unique to Publisher implementation. +9. Client has access to all registered publishers and it can call publish() method explicitly if desired. + + +## Implementation Details +Few important implementation details are discussed in this section. + +SDK modules can be organized as shown in this image. +![Module Hierarchy](images/MetricsModulesHierarchy.png) + +* Core modules - Modules in the core directory while have access to ExecutionContext and ExecutionAttributes +* Downstream modules - Modules where execution occurs after core modules. For example, http-clients is downstream module as the request is transferred from core to http client for further execution. +* Upstream modules - Modules that live in layers above core. Examples are High Level libraries (HLL) or Applications that use SDK. Execution goes from Upstream modules to core modules. + +### Core Modules +* SDK will use ExecutionAttributes to pass the MetricConfigurationProvider information through out the core module where core request-response metrics are collected. +* Instead of checking whether metrics is enabled at each metric collection point, SDK will use the instance of NoOpMetricRegistry (if metrics are disabled) and DefaultMetricRegistry (if metrics are enabled). +* The NoOpMetricRegistry class does not collect or store any metric data. Instead of creating a new NoOpMetricRegistry instance for each request, use the same instance for every request to avoid additional object creation. +* The DefaultMetricRegistry class will only collect metrics if they belong to the MetricCategory list provided in the MetricConfigurationProvider. To support this, DefaultMetricRegistry is decorated by +another class to filter metric categories that are not set in MetricConfigurationProvider. + +### Downstream Modules +* The MetricRegistry object and other required metric configuration details will be passed to the classes in downstream modules. +* For example, HttpExecuteRequest for sync http client, AsyncExecuteRequest for async http client. +* Downstream modules record the metric data directly into the given MetricRegistry object. +* As we use same MetricRegistry object for core and downstream modules, both metrics will be reported to the Publisher together. + +### Upstream Modules +* As MetricRegistry object is created after the execution is passed from Upstream modules, these modules won't be able to modify/add to the core metrics. +* If upstream modules want to report additional metrics using the registered publishers, they would need to create MetricRegistry instances and explicitly call the methods on the Publishers. +* It would be useful to get the low-level API metrics in these modules, so SDK will expose APIs to get an immutable version of the +MetricRegistry object so that upstream classes can use that information in their metric calculation. + + +## Testing + +One of the main tenet for metrics is “Enabling default metrics should have minimal impact on the application performance.“ +To ensure this, performance tests should be written and a baseline for overhead should be created. +These tests should be run regularly to catch regressions. + +### Test Cases + +SDK will be tested under load for each of these test cases using the load testing framework we already have. +Each of these test case results should be compared with metrics feature disabled & enabled, and then comparing the results. + +1. Enable each metrics publisher (CloudWatch, CSM) individually. +2. Enable all metrics publishers. +3. Individually enable each metric category to find overhead for each MetricCategory. + + + diff --git a/docs/design/core/metrics/MetricsList.md b/docs/design/core/metrics/MetricsList.md new file mode 100644 index 000000000000..a37cbfd4b09e --- /dev/null +++ b/docs/design/core/metrics/MetricsList.md @@ -0,0 +1,128 @@ +Here is the detailed list of metrics that SDK can collect. Each metric belongs to a category. If a category is enabled, then all metrics belonging to that category will be collected by the SDK. + +## Category + +1) Default - All metrics under this category will be collected when the metrics are enabled +2) HttpClient - Additional information collected for http client. The metrics collected for each http client can vary +3) All - All metrics collected by the SDK comes under this category. This can be useful for debugging purposes. + +Note: When metrics feature is enabled, only the `Default` category metrics are collected. Other categories should be explicitly enabled. + +## Information collected at application level (Category: Default) + +| Metric Name | Meter | Description | +| ------------------ | ----------- | ---------------- | +| RequestCount | Counter | Total number of requests (successful and failed) made from your code to AWS services +| SuccessRequestCount | Counter | Total number of requests from your code to AWS services that resulted in a successful response +| FailedRequestCount | Counter | Total number of requests from your code to AWS services that resulted in a failure. This can be expanded later to categorize the failures into buckets (like ClientErrorCount, ServiceErrorCount, ConnectionErrorCount etc) + +## Information collected for each request (ApiCall) (Category: Default) + +| Metric Name | Meter | Description | +| ------------------ | ----------- | ---------------- | +| Service | ConstantGauge | Service ID of the AWS service that the API request is made against +| Api | ConstantGauge | The name of the AWS API the request is made to +| StreamingRequest | ConstantGauge | True if the request has streaming payload +| StreamingResponse | ConstantGauge | True if the response has streaming payload +| ApiCallStartTime | Timer | The start time of the request +| ApiCallEndTime | Timer | The end time of the request +| ApiCallLatency | Timer | The total time taken to finish a request (inclusive of all retries), ApiCallEndTime - ApiCallStartTime +| MarshallingLatency | Timer | The time taken to marshall the request +| ApiCallAttemptCount | Counter | Total number of attempts that were made by the service client to fulfill this request before succeeding or failing. (Value is 1 if there are no retries) + +Each ApiCall can have multiple attempts before the call succeed or fail. The following metrics are collected for each ApiCall Attempt. + +| Metric Name | Meter | Description | +| ------------------ | ----------- | ---------------- | +| ApiCallAttemptStartTime | Timer | The start time of each Api call attempt +| SigningLatency | Timer | The time taken to sign the request in an Api Call Attempt +| HttpRequestRoundTripLatency | Timer | The time taken by the underlying http client to start the Api call attempt and return the response +| UnmarshallingLatency | Timer | The time taken to unmarshall the response (same metric for both successful and failed requests) +| ApiCallAttemptEndTime | Timer | The end time of a Api call attempt +| ApiCallAttemptLatency | Timer | The total time taken for an Api call attempt (exclusive of retries), ApiCallAttemptEndTime - ApiCallAttemptStartTime +| AwsRequestId | ConstantGauge | The request Id for the request. Represented by `x-amz-request-id` header in response +| ExtendedRequestId | ConstantGauge | The extended request Id for the request. Represented by `x-amz-id-2` header in response +| HttpStatusCode | ConstantGauge | The http status code returned in the response. Null if there is no response +| AwsException | ConstantGauge | The Aws exception code returned by the service. This is included for each Api call attempt if the call results in a failure and caused by service +| SdkException | ConstantGauge | The error name for any failure that is due to something other than an Aws exception. This is included for each API call attempt if the call results in a failure and is caused by something other than service + +For each attempt, the following http client metrics are collected: + +| Metric Name | Meter | Description | +| ------------------ | ----------- | ---------------- | +| HttpClientName | ConstantGauge | Name of the underlying http client (Apache, Netty, UrlConnection) +| MaxConnections | Gauge | Maximum number of connections allowed in the connection pool +| AvailableConnections | Gauge | The number of idle connections in the connection pool that are ready to serve a request +| LeasedConnections | Gauge | The number of connections in the connection pool that are busy serving requests +| PendingRequests | Gauge | The number of requests awaiting a free connection from the pool + +## Additional Information collected for each http client (Category: HttpClient) + +### ApacheHttpClient +HttpClientName - Apache + +No additional metrics available for apache client currently + +### UrlConnectionHttpClient +HttpClientName - UrlConnection + +No additional metrics available for url connection client currently + +### NettyNioAsyncHttpClient +HttpClientName - Netty + +| Metric Name | Meter | Description | +| ------------------ | ----------- | ---------------- | +| FailedConnectionClose | Counter | Number of times a connection close has failed +| FailedPoolAcquire | Counter | Number of times a request failed to acquire a connection + +For Http2 requests, + +| Metric Name | Meter | Description | +| ------------------ | ----------- | ---------------- | +| ConnectionId | ConstantGauge | The identifier for a connection +| MaxStreamCount | Gauge | Maximum number of streams allowed on the connection +| CurrentStreamCount | Gauge | Number of active streams on the connection + + +## Information collected for event stream requests (Category: Default) + +| Metric Name | Meter | Description | +| ------------------ | ----------- | ---------------- | +| RequestEventsReceivedCount | Counter | Number of events received from the client +| RequestEventsSentCount | Counter | Number of events sent to the service +| ResponseEventsReceivedCount | Counter | Number of events received from the service +| ResponseEventsDeliveredCount | Counter | Number of events delivered to the client +| RequestSubscriptionCreated | Counter | Number of request subscriptions created to deliver events from client to service (For event stream requests like startStreamTranscription API in Transcribe Streaming service) +| RequestSubscriptionCompleted | Counter | Number of request subscriptions completed +| RequestSubscriptionCanceled | Counter | Number of request subscriptions canceled +| ResponseSubscriptionCreated | Counter | Number of response subscriptions created to deliver events from service to client +| ResponseSubscriptionCompleted | Counter | Number of response subscriptions completed +| ResponseSubscriptionCanceled | Counter | Number of response subscriptions canceled + + +## FAQ +1) When is the end time calculated for async requests? + The end time is calculated when the future is completed (either successfully or exceptionally) as opposed to the time when future is returned from API + +2) What errors are considered as throttling errors? + The request was considered as throttled if one of the following conditions are met: + 1) The http status code is equal to: `429` or `503` + 2) The error code is equal to one of the following values: + SlowDown + SlowDownException + Throttling + ThrottlingException + Throttled + ThrottledException + ServiceUnavailable + ServiceUnavailableException + ServiceUnavailableError + ProvisionedThroughputExceededException + TooManyRequests + TooManyRequestsException + DescribeAttachmentLimitExceeded + + +## References +1) [V1 Metrics Description](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/metrics/package-summary.html) \ No newline at end of file diff --git a/docs/design/core/metrics/README.md b/docs/design/core/metrics/README.md new file mode 100644 index 000000000000..04e839460ede --- /dev/null +++ b/docs/design/core/metrics/README.md @@ -0,0 +1,64 @@ +**Design:** New Feature, **Status:** +[In Development](../../../README.md) + +# Project Tenets (unless you know better ones) + +1. Metrics can be used to provide insights about application behavior to enhance performance and debug operational issues. +2. Enabling default metrics should have minimal impact on the application performance. +3. Customers can publish the collected metrics to their choice of platform. +4. Metrics are divided into different categories for granular control. +5. Customers can control the cost by having the ability to enable/disable the metrics collection by category. +6. Metrics collected by SDK are namespaced to avoid collision with other application metrics. + + +# Project Introduction + +This project adds a feature to the AWS SDK for Java that can collect and report client side SDK metrics in your application. +Metrics helps developers, ops engineers to detect and diagnose issues in their applications. +The metrics can also be used to gather insights into the application over time and tune the application for optimal performance. + + +# Project Details + +1. Metrics are disabled by default and should be enabled explicitly by customers. Enabling metrics will introduce small overhead. +2. Metrics can be enabled quickly during large scale events with need for code change or deployments. +3. Customers may publish metrics using their existing credentials. +4. Metrics are stored and accessed by AWS only with explicit permissions from the customer. +5. New Metrics can be added and published by the SDK into existing categories. + + +# Metrics Meters +Meters define the way a metric is measured. Here are the list of meters: + +**Counter :** Number of times a metric is reported. These kind of metrics can be incremented or decremented. +For example: number of requests made since the start of application + +**Timer :** Records the time between start of an event and end of an event. An example is the time taken (latency) to complete a request. + +**Gauge :** A value recorded at a point in time. An example is the number of connections in the client pool. + +**Constant Gauge :** There are metrics that have a static value which doesn't change after it is set. Some examples are service name, API name, status code, request id. +To support this, a constant implementation of gauge is used + +Reference: Some Meter names are taken from open source [spectator](http://netflix.github.io/spectator/en/latest/intro/counter/) project (Apache 2.0 license). + +# Naming + +1. Metric names should be in CamelCase format. +2. Only Alphabets and numbers are allowed in metric names. + +## Collected Metrics + +The full list of metrics collected by the SDK are documented [here](MetricsList.md) along with their definitions. + + +# Metric Publishers + +Metric Publishers are the implementations that are used to publish metrics to different platforms. +SDK provides default publishers to publish to following platforms for convenience. +Customers can implement custom publishers to publish metrics to platforms not supported by SDK. + +## Supported platforms +1) CloudWatch + +2) CSM - Client Side Monitoring (also known as [AWS SDK Metrics for Enterprise Support](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/sdk-metrics.html)) \ No newline at end of file diff --git a/docs/design/core/metrics/images/MetricsModulesHierarchy.png b/docs/design/core/metrics/images/MetricsModulesHierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..cb5afcf7a90e5fba1b5d1dc4111e5900221b09e0 GIT binary patch literal 44316 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 literal 0 HcmV?d00001 diff --git a/docs/design/core/metrics/images/MetricsSequenceDiagram.png b/docs/design/core/metrics/images/MetricsSequenceDiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..9d07db70877cd9751dd36702992d26d6c5bbff8f GIT binary patch literal 58299 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 z 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

+*n%{;HJX0&j5J7y20GJ$Y7GZJ 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 metricCategories(); +} diff --git a/docs/design/core/metrics/prototype/MetricPublisher.java b/docs/design/core/metrics/prototype/MetricPublisher.java new file mode 100644 index 000000000000..cb6f3c66ce25 --- /dev/null +++ b/docs/design/core/metrics/prototype/MetricPublisher.java @@ -0,0 +1,68 @@ +/* + * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.metrics.publisher; + +import java.util.concurrent.CompletableFuture; +import software.amazon.awssdk.annotations.SdkPublicApi; +import software.amazon.awssdk.metrics.registry.MetricRegistry; + +/** + * Interface to report and publish the collected SDK metrics to external sources. + * + * Publisher implementations create and maintain resources (like clients, thread pool etc) that are used for publishing. + * They should be closed in the close() method to avoid resource leakage. + * + *

+ * As metrics are not part of the business logic, failures caused by metrics features should not fail the application. + * So SDK publisher implementations suppress all errors during the metrics publishing and log them. + *

+ * + *

+ * In certain situations (high throttling errors, metrics are reported faster than publishing etc), storing all the metrics + * might take up lot of memory and can crash the application. In these cases, it is recommended to have a max limit on + * number of metrics stored or memory used for metrics and drop the metrics when the limit is breached. + *

+ */ +@SdkPublicApi +public interface MetricPublisher extends AutoCloseable { + + /** + * Registers the metric information supplied in MetricsRegistry. The reported metrics can be transformed and + * stored in a format the publisher uses to publish the metrics. + * + * This method is called at the end of each request execution to report all the metrics collected + * for that request (including retry attempt metrics) + */ + void registerMetrics(MetricRegistry metricsRegistry); + + /** + * Publish all metrics stored in the publisher. If all available metrics cannot be published in a single call, + * multiple calls will be made to publish the metrics. + * + * It is recommended to publish the metrics in a non-blocking way. As it is common to publish metrics to an external + * source which involves network calls, the method is intended to be implemented in a non-blocking way and thus + * returns a {@link CompletableFuture}. + * + * Depending on the implementation, the metrics are published to the external source periodically like: + * a) after a certain time period + * b) after n metrics are registered + * c) after the buffer is full + * + * Implementations can also call publish method for every reported metric. But this can be expensive and + * is not recommended. + */ + CompletableFuture publish(); +} diff --git a/docs/design/core/metrics/prototype/MetricPublisherConfiguration.java b/docs/design/core/metrics/prototype/MetricPublisherConfiguration.java new file mode 100644 index 000000000000..d4f88b4b15da --- /dev/null +++ b/docs/design/core/metrics/prototype/MetricPublisherConfiguration.java @@ -0,0 +1,92 @@ +/* + * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.metrics.publisher; + +import java.util.Collections; +import java.util.List; +import software.amazon.awssdk.utils.builder.CopyableBuilder; +import software.amazon.awssdk.utils.builder.ToCopyableBuilder; + +/** + * Configure the options to publish the metrics. + *

+ * By default, SDK creates and uses only CloudWatch publisher with default options (Default credential chain + * and region chain). + * To use CloudWatch publisher with custom options or any other publishers, create a + * #PublisherConfiguration object and set it in the ClientOverrideConfiguration on the client. + *

+ * + *

+ * SDK exposes the CloudWatch and CSM publisher implementation, so instances of these classes with + * different configuration can be set in this class. + *

+ */ +public final class MetricPublisherConfiguration implements + ToCopyableBuilder { + + private final List publishers = Collections.emptyList(); + + public MetricPublisherConfiguration(Builder builder) { + this.publishers.addAll(builder.publishers); + } + + /** + * @return the list of #MetricPublisher to be used for publishing the metrics + */ + public List publishers() { + return publishers; + } + + /** + * @return a {@link Builder} object to construct a PublisherConfiguration instance. + */ + public static Builder builder() { + return new Builder(); + } + + @Override + public Builder toBuilder() { + return new Builder(); + } + + public static final class Builder implements CopyableBuilder { + + private final List publishers = Collections.emptyList(); + + private Builder() { + } + + /** + * Sets the list of publishers used for publishing the metrics. + */ + public Builder publishers(List publishers) { + this.publishers.addAll(publishers); + return this; + } + + /** + * Add a publisher to the list of publishers used for publishing the metrics. + */ + public Builder addPublisher(MetricPublisher publisher) { + this.publishers.add(publisher); + return this; + } + + public MetricPublisherConfiguration build() { + return new MetricPublisherConfiguration(this); + } + } +} diff --git a/docs/design/core/metrics/prototype/MetricRegistry.java b/docs/design/core/metrics/prototype/MetricRegistry.java new file mode 100644 index 000000000000..939d35d5da63 --- /dev/null +++ b/docs/design/core/metrics/prototype/MetricRegistry.java @@ -0,0 +1,127 @@ +/* + * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.awssdk.metrics.registry; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import software.amazon.awssdk.annotations.SdkPublicApi; +import software.amazon.awssdk.metrics.meter.Counter; +import software.amazon.awssdk.metrics.meter.Gauge; +import software.amazon.awssdk.metrics.meter.Metric; +import software.amazon.awssdk.metrics.meter.Timer; + +/** + * Registry to store the collected metrics data. The interface can be used to store metrics for ApiCall and ApiCallAttempt. + * For a ApiCall, there can be multiple attempts and so a MetricRegistry has the option to store other MetricRegistry instances. + */ +@SdkPublicApi +public interface MetricRegistry { + + /** + * Return the ApiCall level metrics registered in this metric registry as a map of metric name to metric instance. + * Only metrics that can be recorded once for entire request lifecycle are recorded here. + * + * The method does not return the Api Call Attempt metrics. For metrics recorded separately for each attempt, + * see {@link #apiCallAttemptMetrics()}. + */ + Map getMetrics(); + + + /** + * Return an ordered list of {@link MetricRegistry} instances recorded for each Api Call Attempt in the request execution. + * Each Api call attempt metrics are recorded as a separate {@link MetricRegistry} instance in the given list. + * + * For example, + * If the Api finishes (succeed or fail) in the first attempt, the returned list size will be 1. + * + * If the Api finishes after 4 attempts (1 initial attempt + 3 retries), the returned list size will be 4. In this case, + * The 0th entry in the list has the metrics for the initial attempt, + * The 1st entry in the list has the metrics for the second attempt (1st retry) and so on. + * + * @return an ordered list of {@link MetricRegistry} instances, one for each Api Call Attempt in the request execution + */ + List apiCallAttemptMetrics(); + + /** + * Create and return a new instance of {@link MetricRegistry} for the current ApiCall Attempt. + * Records the registry instance within the class. The instance for the current attempt can be accessed by calling + * the {@link #apiCallAttemptMetrics()} method and getting the last element in the output list. + * + * If the Api Call finishes in the first attempt, this method is only called once. + * If the Api Call finishes after n retry attmpts, this method is called n + 1 times + * (1 time for initial attempt, n times for n retries) + * + * @return a instance of {@link MetricRegistry} to record metrics for a ApiCall Attempt + */ + MetricRegistry registerApiCallAttemptMetrics(); + + /** + * Given a {@link Metric}, registers it under the given name. + * If a metric with given name is already present, method throws {@link IllegalArgumentException}. + * + * @param name the name of the metric + * @param metric the metric + * @return the given metric + */ + Metric register(String name, Metric metric); + + /** + * Returns an optional representing the metric registered with the given name. If no metric is registered + * with the given name, an empty optional will be returned. + * + * @param name the name of the metric + * @return an optional representing the metric registered with the given name. + */ + Optional metric(String name); + + /** + * Removes the metric with the given name. + * + * @param name the name of the metric + * @return True if the metric was removed. False is the metric doesn't exist or cannot be removed + */ + boolean remove(String name); + + /** + * Return the {@link Counter} registered under this name. + * If there is none registered already, create and register a new {@link Counter}. + * + * @param name name of the metric + * @return a new or pre-existing {@link Counter} + */ + Counter counter(String name); + + /** + * Return the {@link Timer} registered under this name. + * If there is none registered already, create and register a new {@link Timer}. + * + * @param name name of the metric + * @return a new or pre-existing {@link Timer} + */ + Timer timer(String name); + + /** + * Return a {@link Gauge} registered under this name and updates its value with #value. + * If there is none registered already, create and register a new {@link Gauge} with the given initial #value. + * + * @param name name of the metric + * @param value initial value of the guage + * @param type of the value + * @return a new or pre-existing {@link Gauge} with updated value + */ + Gauge gauge(String name, T value); +} From 85e732bb8944cf16a2a992c1e070a43cead7e9bb Mon Sep 17 00:00:00 2001 From: Varun Nandi Date: Fri, 12 Jul 2019 12:26:33 -0700 Subject: [PATCH 2/5] Add more details on Reporting --- docs/design/core/metrics/Design.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/design/core/metrics/Design.md b/docs/design/core/metrics/Design.md index 670f5649dea5..4bcc83d1172a 100644 --- a/docs/design/core/metrics/Design.md +++ b/docs/design/core/metrics/Design.md @@ -2,7 +2,7 @@ ### Metric * A representation of data collected * Metric can be one of the following types: Counter, Gauge, Timer -* Metric can have tags. A Tag represent the category it belongs to (like Default, HttpClient, Streaming etc) +* Metric can be associated to a category. Some of the metric categories are Default, HttpClient, Streaming etc ### MetricRegistry @@ -186,6 +186,12 @@ another class to filter metric categories that are not set in MetricConfiguratio * It would be useful to get the low-level API metrics in these modules, so SDK will expose APIs to get an immutable version of the MetricRegistry object so that upstream classes can use that information in their metric calculation. +### Reporting +* Collected metrics are reported to the configured publishers at the end of each Api Call by calling `registerMetrics(MetricRegistry)` method on MetricPublisher. +* The MetricRegistry argument in the registerMetrics method will have data on the entire Api Call including retries. +* This reporting is done in `MetricsExecutionInterceptor` via `afterExecution()` and `onExecutionFailure()` methods. +* `MetricsExecutionInterceptor` will always be the last configured ExecutionInterceptor in the interceptor chain + ## Testing From 57a3de24256145589869b3d2ad03d18d0155ad75 Mon Sep 17 00:00:00 2001 From: Varun Nandi Date: Thu, 18 Jul 2019 15:15:37 -0700 Subject: [PATCH 3/5] Add performance section --- docs/design/core/metrics/Design.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/design/core/metrics/Design.md b/docs/design/core/metrics/Design.md index 4bcc83d1172a..938813d8a281 100644 --- a/docs/design/core/metrics/Design.md +++ b/docs/design/core/metrics/Design.md @@ -193,10 +193,18 @@ MetricRegistry object so that upstream classes can use that information in thei * `MetricsExecutionInterceptor` will always be the last configured ExecutionInterceptor in the interceptor chain +## Performance +One of the main tenet for metrics is “Enabling default metrics should have minimal impact on the application performance". The following design choices are made to ensure +enabling metrics does not effect performance significantly. +* When collecting metrics, a NoOpRegistry is used if metrics are disabled. All methods in this registry are no-op and return immediately. +This also has the additional benefit of avoid metricsEnabled check at each metric collection point. +* Metric publisher implementations can involve network calls and impact latency if done in blocking way. So all SDK publisher implementation +will process the metrics asynchronously and does not block the actual request. + + ## Testing -One of the main tenet for metrics is “Enabling default metrics should have minimal impact on the application performance.“ -To ensure this, performance tests should be written and a baseline for overhead should be created. +To ensure performance is not impacted due to metrics, tests should be written with various scenarios and a baseline for overhead should be created. These tests should be run regularly to catch regressions. ### Test Cases From 1db31f22c0228a18f3440f1bc2e949ef642ae465 Mon Sep 17 00:00:00 2001 From: Varun Nandi Date: Sun, 18 Aug 2019 23:47:07 -0700 Subject: [PATCH 4/5] Update metrics sequence diagram --- docs/design/core/metrics/Design.md | 17 +++++++++++++++-- .../core/metrics/images/CWMetricPublisher.jpg | Bin 0 -> 26203 bytes .../core/metrics/images/MetricCollection.jpg | Bin 0 -> 50885 bytes .../core/metrics/images/MetricPublisher.jpg | Bin 0 -> 23225 bytes .../metrics/images/MetricsSequenceDiagram.png | Bin 58299 -> 0 bytes 5 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 docs/design/core/metrics/images/CWMetricPublisher.jpg create mode 100644 docs/design/core/metrics/images/MetricCollection.jpg create mode 100644 docs/design/core/metrics/images/MetricPublisher.jpg delete mode 100644 docs/design/core/metrics/images/MetricsSequenceDiagram.png diff --git a/docs/design/core/metrics/Design.md b/docs/design/core/metrics/Design.md index 938813d8a281..91ff95a43294 100644 --- a/docs/design/core/metrics/Design.md +++ b/docs/design/core/metrics/Design.md @@ -143,7 +143,15 @@ New modules are created to support metrics feature. ## Sequence Diagram -![Normal API Call flow](images/MetricsSequenceDiagram.png) +
+Metrics Collection + +![Metrics Collection](images/MetricCollection.jpg) + +
+MetricPublisher + +![MetricPublisher fig.align="left"](images/MetricPublisher.jpg) 1. Client enables metrics feature through MetricConfigurationProvider and configure publishers through MetricPublisherConfiguration. 2. For each API call, a new MetricRegistry object is created and stored in the ExecutionAttributes. If metrics are not enabled, a NoOpMetricRegistry is used. @@ -156,7 +164,12 @@ These MetricRegistry instance for the current attempt is also accessed through A 8. MetricPublisher calls publish() method to report metrics to external sources. The frequency of publish() method call is unique to Publisher implementation. 9. Client has access to all registered publishers and it can call publish() method explicitly if desired. - + +
+CloudWatch MetricPublisher + +![CloudWatch MetricPublisher](images/CWMetricPublisher.jpg) + ## Implementation Details Few important implementation details are discussed in this section. diff --git a/docs/design/core/metrics/images/CWMetricPublisher.jpg b/docs/design/core/metrics/images/CWMetricPublisher.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f18bfecf1db7ad15c239de5345dbf32f5878b5c6 GIT binary patch literal 26203 zcmeFYcT`hRw=Wt(?}Xla3r#|=(n1w5frJjydoxr;Fcj&XfK;UuLhntG-a+YIk)|M^ zC`Co|@r`@Vedl{`ynD`f#~JUhJ2OYd-gE7>*UZSO^Y@#7SO0DUXbg1pbpUvH007?Y z2k>_TpasAO{zLxpjejcyLm(2#?^Xc+E=0rxge12%(%WKv8UTO@5C7J0Vlo0k0z5(h9uS{^kO)8wq9viD=iy~w zgfKDlNol}Cq~#SfO)PTS+80QjvX}VH92}nu$V6sn$(lZlF1dXb{eNiU-4Kn?KuZl03!Vf)j{E#ab~!|z7U&gJf3jo+z+nA$g=n!}?6;YfNZ zO{c<9kYq0OR&<5Fb4Z^@+a-o5t1Von>F6{S^ACF5QXs`L74Iyp6nGK(E?dz&C9sSNEsMV|K~0%!%$$6h$D#Ku!KZFBu**;Qx4i3 zM4NG_pm# zE<&;lMhKzAdkOW-1T0Vcwif0+9^Rzm=f!E{5=)$tLoJzNJ)~iNbVQoun1RGB%_YZJ zd&M6xqHoeB9F^!ZK|`gp!~ZQdC!$94*<$$9h0p8<<i84-U zjpkTS+EgwoF8a3sSbHW?9q8>UBMVHe7IuFYM3aTj(}@} z&nm!Vc%8XW_$mN@8X9ocaF0W%&pT<^R^d=I_LNQpTbr#Zvj>Z%oOH|ut*YOO)-Hy} z_pMaU;aObRhT)}e64N6>xfNFaxT!p2GnX4{-!k~)BL75?Xapc?Ev}? znraZKWBa}Hxnl=k?a+dq+?;t7|G!TOk@F#+n#!KWU3}Recd5xX*MDC+n(~Kh<@Ix( zoO)u+f)OtsEsq}T2cDKaMMKbnwfl`S?D^vLw>!P5SqI)W*b$&`31LuT211f~WHW{i zB{#@Rh__0i3|P&x@>=4whKUCKP#BNdn>SdY_@+%r&to7)7pSEu`JDzIATS;pyQ2oc z;}WB;tFifnxIvb>w|otK^{15oCbYRtFHVEss%#6cJuQd_He`zo#cU?ye+7Wv)Ly=J z&$jCka?MyG>(n05E1~4?c?4w;WlF>$;-fYxRLj1}=NUC(ik+zX;WP)GsreUk-_q~b z)>&tw$lzOcckTHN0?Mr29$=iS`qLr9*N2nz9I5%cJUC!iQ9Z2PJ4_fy)Y0D}&ZZFJ&%1 z!IMGvP{yzL7cU(dI*w(rFQi zpCO2+@W62gDIJbJA^>}7!Ka`?u1z-2$P7Cu4>S$B6OKS&r_Pol)cyiJ|!|cD*WhKk}h=spEEJf zn`n|}AjU80q@kQ9V{hLGe|34?vJ62_*4$3I3f(6^&~JX35sTa4TK&E!)xVFY_zS48 z_ZPQuVy5`-Q-*);XGmM2h$L3|A5ZQ6*u+|O(tj~!?NBWDN6M!!PrBH&vx)e>5fUFS zvRFN*n3=yBinQstAl*nu^J0mP!uu>s-@YqH^z>PExfIk|E?P}KK9?;m%#5UzK#j7h z@0ehlOLNPii+VfAY~jL^MhtXB;AOATR%mtn#PiI+x52bR>FLr7N=7p8_(??a7GVHYk2DBKaD!gjE1Z9H;klq!K47X<(=rT2AmzQL&VWuZsAh?dQr%3jAs(1P+vt~xM1<8tim8^Whym+J& zlVYhOWO3kM_JFZT#bj$6yetIR$#m!srWjs~NV2f4Gd?|>TyQSmG@R4}RSf3pe;Q7I zvX$s2EH51s*Qcdh?kGVFSUsW{rjgrbR5i!0iy!Ti8&-_09w73fJe)5RL9u*{@YBTC z4!R;(ffM#I@4x}^XLec_3fWq;i<2GtG6JcYMh!x23c5y%xPfK8)r@#)uxepQ9K(-d zLcQL($7(vzaTEVze#1mh=NlD0_mO2!3vGjctGnHZ;zxS!GWR?E z_i2SlxT2Ntl7%PI8mEeMA%BqO$HcxdU`Br|t07gH`Q#0iQ$Yd=Y;#bMqXPu`KGQM& zuJq5PQq7+N#B<%*YZ`Au4w=2PRA6R|n9&kI>{*-dp)EPFX4<0fHHeygINE;dq)Jl;q7o zC)!u-f`)?n5n=o1(Kwg@BC7YZEMpgcPJfwV7@eF~77FvB+Y@U_w693{^#?QYHcy_1 zS@?BIbk3q4U27QU@x1T|=;w4M8SvExc~qtE`jntaB`;f%RL!)WAOQT$0%5{4TSCiY zT#PR4hv7-0eGb(8(g9D;B1^-t24_v=IfQJyqO5k@(ySnqSg?#!t9M3E-)<9?mac z{h3+pE_;pYdGS41&>DPf{664i%IfZi&P%iRU1Pp;SHH^IMYsIsLXW&Cb<&rPOsxvb zBHc$Hd0fV%26mF6!TfuO6ZUOk9MB|J_tTqezSb3H&{g*{jnpp5g*@_+@VaJrXO9!G zHJ?8t5DknHDPJ|(QUrhy&=KLdxtEu^-a1N66`2v=ujNgSQg0?t!)8|VysMg&!)GJp zozh}=*Q_Hxa`foFKT4f{Wv}_-b41dZsfDLZY=cSu;yydMj`Y<1R{nsBegvMr5O0zL)5GU#GHmQ4IEE1E{^88_fFQ~!TT>Cm^3Pf~$Gi%7@OYr<(I%Dw4EjMPhA7wwf zNmV~*Xnc{SW-TS|JvuXjyLr3m{84{VfMhE@To=Zk7*C;ui|Nfw z6Vm$8Y8IP%0p6Tp^h00q-n7G&R?Ol#BHo5IMt{JFXaBZ%dPJon$t`J;Nc~&>?wG$J z?3W$KOmv#WT?-}~=T^i9Je-n$>Du1Xb*IH8u^JD7kuu22fNEvX^Nid7z>G*z4FXx% zLTZ)nafRp_ae0Qrd%OBE)#^1;o0-IPOd0BI3D;4)4C2|D6Xs#=_Q-_=v^vHan1ee0WzS2oGk27yhi${to>)v!P5u59;PRa6r zi-VJVq9^>s8=!NeQw`!@6E5fnQ#54@95(vLjn0sYf89CLV@H^v^Q% zc?leCS=1ku27hF@QCSQVU9wJIs#wzKQ5daF%;HC8YIjezoJr84_T)qy>kkD*0MvvK zzJG%kszToMBql?0IF1_R#zDdood3;6z$dCj6LhU$n{zh=+W*0l=WJc6jOWT42e zj>kX&d$2g3q%&}$Jx2_Ibiu_yHm7;{N*nLJ1I@Mk>eFBBf5L5K@4$*#G?rX1R4vvE zZJw<~Ni&M82U)|1a(})UBEV!D)nwb&7T7CfcfarjP`D8K0^#G2cpkdR?eDeM7;7DA z&$d;7C&W2_x*n1FRvIr|$JQ1J0^-AYv=Y*();8HGG!vtM97m&8B1Ud?yUy#%X0l^3 zkMqeHwB#N{(w_(ec=^=`>C`~0p@n5%X{KN8e3nfi+ppWlHwk(?W3nJ9ca@P^E7(*& zFtOx^M_VSCDxf}MDTz3GWr1KYa6v%J>6oebWr9X)Cv}fhL0X@o$6tjFxj(5HA^Te1qheEA$xuFJL*~wP`S0vQMOY zcTvSLZGGV7LucDI09|{qB{L?|AI6msPhQmcH#Rs-bJSnz)jB z4PMeU8AHVY!Q74LP|&$HE~*ebs$jUifVflkFkN_R`OPIUi%J_Z#)BC%Ng7UsGQmKx0t}fdX z=_>M?YzoE}>i(%+ztuBNX_)2B0Dph^9lpX*j_B!85Eq2K`x|cV^{hls1h@2`?8qte ze=Jk~Ma{UvZl*-U`j2dAE>2Jj>O(2;-m4_!IE$rf?7jw;n{WHU9u=wae4`zgViB2a zu54P`v%TM`Gx*H)5hKXued}SymNt16(fP@Q0G+Gmujq-1-*G#zy#0s9E0YW>rWe$D zyU7==r}^YOxn~~f@z{dO?PkwndxeB}LQX+CJSYX%ZSb9qOOYI|6tVR4Ud6i!!+4G6 z6>F=vcZ%{gWYSKPlcClj4YaEpQJ*CGwWXK=?{sM>lYu-ak1B+cVs*YXORZ5IWldXk zo)E~8-C|4LUV=$~;4MH%fS_zs%8~z$geH&;L+no~^?0IU(xysS@YRrjqK)UwUIEfh zP{X&Nj2Zh4bbGQBejLHGdEft+rr*S+T~UxHtA5Nh(s;Txz|B0EWMpZn9=9*|&7}WB z$+Ui^@M7JPcP{WLWy@3E7M$WI>rCW%NtExV5Wur+bYC-4DdzB2wGs1h65<(f? zoz?5`heTuesAD_^UQIT<&PtxQvR((t^CEOP>1|pA$XE|uFAJ9{s~=#7_YCst+o{P- zXj8QWFdcpZluQ%zj9>u5PW}K^Tl~ehI=hbV)jRev&8EUfJk|!XX5-SqA%swM^U%!1 z+$SQVI~i2G0NV~afXhS0ijc|r>aNAgd_Av1I%Vgq_Uubzrv)3@0Al7j76P(;#2h|< zaB4vURS6Yor(z;TO{`#VzP!;J0l$a0?q_8caVf8Y2_1V zd!_(1n#3nBXvS{A+9hYe7~Q4aomXp+$*7-alg?oDp#VSKumZHXyYcZNWYxstwIyF< z=!(f>zax5ZntKMaDpNvGc$NkGt69>c!_0DFWzk}WHv6$o$LdsqW&2acg0VWrnq=!3(}TV0AF-ztPKETagxpGykv4%Y zeu+>Jm(l0rfvxgsF&gyK)re4x9Lj&Nh> ze!*MUQ&%5(aT9#{18~eq4_b(t8xLYAK=*KpSUWIE*Vu3SrdJ;$#v}8t<$%>M<9GpnK_u9T%S_CxVu%URIbN-xv5cWxI5NZpH5YS>o36n6JF0V zq1?wY#Vp@r7V8w7yD)Axub202H2L$tc}Qhz1T-0G1{i+E#DerHxlzIe_B7wA#rBEv zkq!8DuuFY$wHG9-HJj%JF{>}S-!TpJdH-w)N%;}4SKF8!NVR7J-g7W*&%5LX$<8kw z))yXLpsK3iU@&Qg-SErQGfKFQ{x83hA~0)HKa`4!Y*_<>P(MWD9zuE}iVwRv8xAka zE!^zg1B?Xk5o{%O&_Yf@{uBPeWQq3q)$ILF0A2@45~6-bpT0j2$mRMz^%`(4$wI1^ zignU+!S?#3GG=x%y5r@Ryv)X0x#0rbXy&0k0N;N43{kBmY;j9(5p2tCec#DPPZN|y zEZV62oUF}g&`Yd|MFi)3cT}(Bvt$C<%NN(_7(I8n#=iJh%Pbx?-JqlS<0eC^Rd)3* zUcW7gd@K(&_ol(|Opc;)$xX3I0u)QN4>5{dbzbz54{>mS8UM7h3N|Wn&ee`7B?>;o z#_s!Ps&o~pzUtq{yK@t;D}YuWl1o^9!lMxy3GTG!Udm{&bs<--0Yc%m0 z&}6vqRcP+D$G%eFqR53rG#C$_<0FLc)naHQTSEZaHN3yG?`fe?n*$4 zcrlaM?>I6my|}2Rw^c3C^F&S#jug2nVpVN_E`l?qv>Ma(crJzq1%QzubR=k|hcq*? zVK%KV=DdUMd-%ob1hstEZFb+kc5D#jp6D488Alfv1x7OIljN3M+gW?_S;@><+k`+D zloT-JaluU4YtHKnKtMHI{=UOz7AP0bb(RyVbIDqmJxkByNzBmW*z(*i_XBmq zm+sNy3jEywBHEKCG(gt@K)UO713GD%AuU=a43p;97|KPIXGou$a7D%W5}nfbIUERV zypdlUeXHb9AMdq~T7zi3;73T57)>ej(U}(vMl)gW`bIBrYmf>o(@I38Y7f59VNmwq za>P>>!Y}IX?z)hLU)?|WSlo7^e-@#(ad#Pl-~aG9SOH~uXA)%{-W6eZm&;3*!+XB& ziaJ1b@iR+(Oz3_0tLrZV9qo^P_$vE$+w`ayU0a9znfblSq47U_*lrw$dwY`3y6OYB8C)#0< zxk&6@y==ad^OHlC%)8mz&7}l-F&{>_7!lK^XLO{7_L4qB_#I7!NWUXp)ARj5*y?)? zefh}S9baGB1i_vV>!38V>nY)YMH}Z2zG?N|a%crU`xt05ST5^hSnao*BH_j0*+bks z*PKtVvY3t5bCIMr-r?dVQ-%zl1w>Cd0WaE45RR(uOpoGu$2?0Ae~UYdhukf)kZA4} z9^PSC-QcIo)VbG~1`6Wd>S$TEJpyM3h4~tknEN{M`y}&p5;?xR2(vz4s7buIwzxC% z`NDHVQ(;Bv*s!I7+dxX9f<|M&paGZ|1DA7=iZvvFK8Ya%0J+}UxP52RR;oH8H#lsT zy*Byc({bHi#?kV?H_XKL6&sQ#e;k+SV+C?EV32$e35OQLICVG$g!k(n9Jy78RaPF- zXC+P>>2NwWc!oPP=#`!cJhzk86cnXT;?>rJ??uI9e(NSq;r*V}pgA>k1DSSbEnSnJ zur6_!My4bhe*Y12aO})OS+mYzorQ#?85X22Wgxyvp1w3~m?V|F|3qmeQ8;J%~ ze^-(<$k7SL&MsNG*gdx#THZq)(oaTL#{LQc=94Fm!n@Q>2c%T3^4}E7HEwN=M{8=IUtr#sYpp5aebQg72^0^9Vi=Ovr`r{ znri#tMSvoXv0C^i_z>2&2dh0#*QIAJI>?-Cdf-Bxt0>R}yP)4J!YZu7%>@*-C9t}9=%hI(qy0~N5 z?1jiYyHLE$kjIU zG<@f6#~XbEPwV{N@b)s^OFKu(vd~3a#j}_ceRFE!fE$nrT^b!}a)iL9kKT)BrN|!I z3cKo0C&9F*nMl@KEn;pi9-0$&H!95w>*_mm zg-h-R)`x3tGFBbFepVj5+sB3{yJG@s9`(CN+<@FsZZaG_`hGl~)8mn8N{A8I}5FF?Yx;g3+;(++#9&dHjO;#Cj6 z9o*tSJ7MP6!FT`F2fApp9#5!R)a!B2{vv|K#N6-u z(=ysOU$rfbJ;-FGBuDnW1-E225ogPIpCezSsS&vG!+GF*Z4oCpy~+}827sObVw6xG z=&eO!6)qnn%z>n3GYPzuvg6EOmoviblIEW2JKej=BiE9*0hrqI3hDzSGmQF;pG(n0 z0VPlWBgpr0{iS)Ee;o0zmv%2|I(DU;tJt*@cwe$AoDvQi4b#INU|4x2G%=3`3_QZ4 zMu+G8_Qn9oSzj9z`_d10545RCkW^rw>5J4cT9tMGR8)cBE_aDBus#H&SDgwhcZlI2nHZi^SJ2o*_LGrDIRc#snwJ(` zbecr!9`*XpsmjnzEpLntHyI&|)C^P=@oA!hNHm`h;qYg)XwcmDlFxS}ee^y{^^jHu z$jvBKT6v?UMU2I8+=U8Qj9mW*nS14p0QNXavvM|&N{=OPp4jkF&g zF3K&lwAD&6664xpzLH==3}NmFy8C^_=?S1Ng@oh)Qgy(fAf93|^<$-uvHo>0jFF2A z&GI$LCDpiFTN-OXWlhKD@*1NeK@zOVI4+~>$^exf3#_yU(KN>09=fe*Wj{84|LBd0 zCIKsx2WvCO|BQ=)S~tNp)B^HGCJFZt(|Lx~WC56=c8}d(MFI^7_r>)Tsle=O)1Sc~ z)P$IwEnjPAA*nZ=i@{TiO#t#O!`|V^fJ!2XvGMEFByQx=!$qnafgxQ}LouqQ^fK8n z6?1VDC_2eQ7D1!YG`%HF8b%Czm3@NMfItf-sg0Qop5>=YDb-FIlvGakk!@;-_Qu(7 z4F$oBchXfno2K zHUl9MG-9}K7L4A}BBoJPNJurMRTEk!cX7vV;qqm}o)kczp z^|(3E5<_oLE3$p5VlYTnf6A{S7IFSibIRq0c_K*S8@_V7$L4R=K%Xi<3|2v76z3WL zWJnUP4J*Z$jTbuz$A0J=I-|IG)BoOnkDIR}7wz-1^M7(j*pYwurNh~@ei!{dxm|+Z zUA5i3zof;{wRFUs+0K$z^j&xCzP^L=i(8+PuBmxxisTCXy6O9Tn z=a^HRK<4i%fsT#mdqW>C8Whh3&Um!&3>ZTL#O23|$eW{COC(afbKu zyq4;|1d{Bu7;zxH{OK=%i}db@`ypfRKJAwdM3gq^j5PiJW+_jXA&|>HR{i`xkYG?t z{kV%em6S9~qfJJ45c?dAtSV=e2ruEY#CL#wu<@L>HBJi`iLThok8(`iIC=d7w!Zd< zi{z-XTtJcHTf&37vv_s%dfy>fM?9D82`zNIhYzWnXxl8@6OhM0)8D7A(j(8zfGn#x z0d<0T4_wRl8eD{u+$_I?&qU|8R_}DbKC^G?H3+#bjC;tX(hiB#)jEeS$gr`59$0w`YWmc; zUjcR;ejVr+gb<>V%s#>&N;{J^kwwh&YLZ|8>goU>99yL5-d8Jrx375KG*`7$93$2t zUvElGv92gxd3c=v3`okTm^NN$sC>-J4PbHJ1>%~|drI0z=i~3qCzIWqsc^Dgu#``+ z72q#G$&1D?>6>6Tw=nU!Q93-(VrBHH^6$04>f($PkLjIH+K$D5$u^=)mG04T4~nlC`+WQHUd;JBOokkZyj_a08i`#CgTBm@1C z#)2Z>ML6-**i`rx2oybXt~h_JVtCAFbjR>SOl&?4MI~TYAIQr8I$oa$C)`+6>TK;o zh9H#0r!PAL2lt*uLZ{EObyDj`JLbRF;M>Qww{&&nW(6MDhTNIE^y_v%T!c`Nn)3>{MGV&Dr+E)ifh`z|K?Ru`e7~&EZm? zFe5J*RPOVY_f#w?MTLlP$Qr{LV*c0!ZzKe_LLw3CO4e^bCmcL4tdeju{qAA0 z)#E2|(G#U#83_}`Fz7oLHC=0iDc5N664{uE!8d`QkCd? zZq(l~+_pK*Qxy;f595bNPooY;301M{fLSfA`d=F56GP^)Uu&Zp%yP7cqX4y0mCE~_ zWW~O&r^1c^W)iK0;5#(CxhdUliS}=FJjDbPv(D5YC*mT69{8l?BzZB zBlVj!ObW?}?+zTXj|YM7d(_C%Wm+7&G9%qsMl_3!DRa`Ka~o(nXe9cDiv*p8ecAA% zz43pwBq!+iI=`qj=SwqIe(ts6x?<2zdTK_RF>TM0TacFC$v_9gPxsr_9pCVUhMgyxk^C9uoq7#HX#Y{35~!FqZ;> zZ0NX+$m@TcyQs_@3dq#9+>2+=JGeB7+L29;ms;na2C7 z=sEc`k{tNrvuxwaT?`YD+*oydX0-htjN=kS-4Y)67f|vhl>PPcjL3WcE9oucru9xxI|tZU0;`)iV6Pt>fwO`s)(ZKKj7gjIVkdPX7WLvtdO= zuY?j${cXjswqA4m3^#ppcbWL#_+&2s3yLoKpYWA`A_}+p|IfbopI)$VJx&>4`Q%1n z+bV9D{>>Sq-p}!UJkM2ge2-K4tB7_4(FJkd!Z$7+v1p#m+8Plr4m<6|>lklgGq(%} zM%!!SJdQVOZSRg5K z%}LT^w0>7Tv5Z+k5%aq08OJDPj?+{!$cv&%OaB6ZU)~}96eSBy0c(Ow9?YZuWci|- zg_!q_3+w1_n4WoW-+~Hxd~A_J{+nfuaa)nYm!F>qzMS?nHMOernm3!#ik7L-XZ!Zn z$SJ?ZN&^)-!AVxb8M&wtNP;84#|DoV6M^p?Zn#(EY}L~$g}`4deU=hu(Y0NCuJhUf zf$K86>ys}=>wj!&G|`_@C}^)3DS!mWy8tw_Fk4SH;4%lsKKr&sNA0J!Ndd|s?3jEq zMGYYPuoRA;h>rf5q9I%oeLLp3XxK-3JfF!$5@koZ>eIE^PNR4}EbAGP_J$@wH`Dkq z$^vi{^Q2!RJq1taF_50K$a2U1!G{e(Rm+xpWN?|-Pplf4NQMB;Ju-wjz_MQ$iq~9P zqMK)kAd8RV$lA>ger{Lg_x(gBQ{IY8h`H@&qU!p);+`fE_cm^RcCmbu(+vH=PuLG7 zi6Zm_bczTO1Ny^XN(WlDfgc33JgX#EWUE=*v zp1aYXuWrx;qFEvGdUAm(R*~5REaBSo!om(V^84a3i{LKORmaaSIxTCI&`T-0Tk-B% zot~Jp!qUhW3M4HVJYnxpZo;+NSs>4Rn@eBi!p8^J@YWqpo9wlXEuZ9)o>)F6R6PH7 zm`Ap0yr2_aFSxLZ>ke-&#a&JOmrP1k6)B#zeqUrcu_?aldq&CYS(J$*1B>#s*+RgG zwc$}pG?~MumN(VCE-!kyio>7h59`a-!ac}t_SzNN?=SIP{sGC3=lh~di47km+H1aa zP?V>QOzJ%7Tfm;poqbCj{9N~}E|cmtfsz)*yUEf7E9Dtl2qS$6&2xq=7M-K3u-;OB zVmzp!2sPYFDSqB6B~!Eb+xXh>v4;cG;{jYkVl|KOkJ^HIUmb8LgI4eQr5TUFxHwNiugCzE)6XU3S8}uKVF14az;c_S%29->yHXtj`@uX@oLN2 zcYGfF?SmTqR@TQ?YhyBQ!iW4O-thpuC+HBxF7|MN{r(v6BcJxRBYF>63XlB4(*LI;YZvaGnHL43aS@bvvmQGBOo3y3TxqdmLnp_Hk{pEzZ*& z=M5@bw$dk<;wIEX?re@JFu-X6xq#BUc2B8QE*P+gE342kts2S%#9e*Nuyo`;FxKo`V-1-tKZ^DxU4Cd0jfPUGRl25I+CeV75>QC=9!90L0nyu z%zh>>su1Ssz(c52?8KHZ&$&vg9o%`;BBxYTDbTiRdNkUIzh6a`DP^lxcf&Yas zJ2Ye`ykp0wZK31PfTwbWztRHN_l$nM8khClW%%}l76$=@JOL_X{3bQLa zVLuJQgLro%>MR_J2aL0JDB5gCNQG%FgeBLW?dBKd0I0! zhG^K|n37i(95W1tG1ydXYY6{jOOJi;ODt$)@gfDrlS`Evx>cS7+KBW0`JP+9%xmg70F)CSD zHS-j;`}R!e4hsP@>Ng~S0iv6dOv)y4ILwKzmwi^vI4GE54e7|ERhjD$&5N}_2Bb*G0K0hoTiE-285P>s+d z-pjsrM)G;mlU%W-@5KE6TPW)OVOW%aWa=~T)B z4N5`w&T#j)b0CDMTC_ zgY~=8zkmpsxCNUBIJGIrz5^gXFrz22^#!WlS{#yfNID>M3MS7lSRBk0T&n;sH zk2*EnUtwKYOBQ9IjhVhhg)+TXX*2vsj(ePw5vn6HmWieDBE?xDWow}OdC?K}K-hj( zJ;psh$)uoBp>5HvWQT~6S4!bBrg+qzVq+MuAT&Oj%$KDcNq55HPxwf@0HF zDnzsGNK$)r;L~`&e8Yn;nV&b8g8SJfKtUCGQTkB^d8^pcR9ZqjL_AE?_DXId)@AKb z=`$9|+gfl~eMr|}Rs$-dYv(p6t1wskq#NCpm|h33lFY`xNojn6rsk97a|% z{x)!%4Hu|fqX_3c)7K^--GEGU77L2$q#l(M;Rd_n7c67atxU)akW*tcX`c_ip4H{o ze@Y9&k6 zxFiIwkpA94L?Wwrjy{4_@^f|Y`sd=OAw60R$vs0nE1Apu+*!LQ%EsW5lvKgCe0*<5Cu*1QbnAcs~s5p=tJf9gm5&we*F~Uwk)PnlLgC!5n7rvOe!^~`nh8$qoeJjguwtaG zyH|~QzAt)pmO=XU^WgJ3Boi3}#JAKqop;o4bH~-5koOram6be>s+@0u^W}W0NR5GU ze}yf7i%!C5cf=+u=D|Bv>uNPUK%zz3U-;D%@^55EZpT3Eaw5NW7l5cmh4N zr-}e+uc|4yD+_d5Bwhi<3juCM5m;2bwy5J`^ttZ z!99RKD<__&^r3eEuQpXRJ*1z4n;6ooLz(JnceQYd8}sO8jnrKrHi~S|!m=9XS z=pdalMRUFs>Sb&2$x>+M9!VP>6;8y*rw+gGIEx%*RApGIUXRH%3Vi1ZemiA)d<3e= zHSGMq&t~GF{;kTypx1BVux(mv$*OrS9@zuc6GUdOO33$_O`5odMvE7G2dl88e^r$fX zB(s60Hxb}|MqekM1?|5Dw*M*Ce7iIpDxX`-y&n2?^=(g*_5U+vET{foO64Um)&UM! zrD}7Cxd7uSGSlpI#}g;Gn>`a!8+l7@UMa;Qwq|YH$asbDgh_usS6F5#-AJ;zqH>?B zQa8K&Y3{PE=TAMs9M!3Kpa!6U-n+_`4o@Zt6CEj9l-Vr(rReW^0M_8s+uwqcC)iW3 zcst&e(!Ql$t3q|Z0ERY3ifU!}OIa2DLl2PZe4Tq7Q2h9Gt`(G1pNJ0NmL{YfcZxR= zE6MlgyHVKw>FbG;=(Rqs-Y;AcYHOR9?^}k3fAl?d{lgV^^WN8M%}(sJq;j8WZYo+H zVnE8OD{;haa}N;F;{-a(6sG=p#H$ucWC)3*4hwB*i;cl(=}J(uPhtr|*rT!NhqU;= zP7Omw^!mB>gd1=A6&tVez24sm`g7l#bLQ*Km(c68KeHd(Z(eW;johXIef_O=dX3Wf zKR@*U{G`{O`+=kOLI!o~3?Hq6d0i|w?&Ub3dMh1K6-#MyZAaj<+ zzUvx))WT_Lk=yO~T3FerJ=#%Kg9abiC%Q-sKDCf=*sM5DH#PX6;a9-tm1lKfxrVmwR$S6yMvyzT-I;viMs6S;H)Gb#|rsS$DazmxY_ z+UTV0*f#p{os)LjUU&V!?1ksrJuj(j7N%wy5i7=+=fE+YGT-1DVvQd0t~$g5u|$?NCbhLovs zVl%`^l$8j*dS*Ah&pQVA`f+=hnQio>yC(#%{Ws}rPNyMA&Bod3edgZUmHFz7PL{$_ z(mOZ^WO^i%6s(COjYL*Q7etb zo%Q(EZ}t1U2KtTVe*M+iXu0D}TVwH|*s1#AF~!%cGP#HTL_B&fctcJdJRoiWPPO0m zK7T)ye9AuS1)bQcxaVsGU#m1&&ou6Bt9!iuQHdu9- znLMuP?Mz9|sx#`$$cS=P++C>ppd^_V4^>DV(uE-*t|C1T2EXL&{;!StKeSYvT&EpPm$c~z`y(~Ga0LY~ey+x7=GbQcto>&EN*@8w_j+Q^ zkGt-{Us(Fd$zVs3*EB1NIgZ;zbzLD;ezhqkcNeIW`L#Q&WK)h<^4B6OXn+`qi~sd~cQM6<{R$3MXfsQ?kN;f} zktV&kg*sT9{lKya(*a5Id37qO-4 zQrbD3M$Z4k9PiV<0b~4{o8Lpf9;mf_0a50^S=!ykk?YM2rAm6PSmW1F`w6;12K|@8 zuxRnyq5J$~Mj$gYJ1CV38l0#6rN<`A=5z=maxW&3RC)zPZ+=Qhh%m*R#!RgWfDsqjU;BKy`dGAc zl6+kw&{=$`M%f9U8YvC<2tqWGm)Mzfh6|tc5kbu7Cb$@@Cw(aJKxILioqD|}s+)HQ z`9LmSL!h?n$d!4|G95H+u$8rm>M&Xh4k|*!rXgvMvk|&*3v|*Tp@z5}Xkb}e<`*1_ z;!PihT{If$*OH7yWOK{Qj`j^DkZItwD>9HQ;U1|~)SBbr(eEmM!C4dX`>%Y-hxooV^MFQkYVF1o&x@$DpMhp&kdsa~ zc|!n&9?ZH1W=og>Ee3rGntZu!Yqo>($6m96X5S6lHoW!={1HL=&}mFn)+~@IPaZ?j zLjmL(Ixgg@TO`|HR#H77!F!;7_J_9TI*X$oA{`BVnf&Y9JT;ETwxPId3O)h|i54pe zI(zDD-3PB!<2=)HSX)hSa7Gn3`}?6qvNyB6#H6Jl(ph)%;B*S-CR41R#2VekP2nu8 zF+u?TXv)Vr%(3Tqz~8sAO7)pW$(U^RZ73)Tx)z{U1%SO0|MaXcMqU2DXS4s$do9GF ztxE3bnc4H=l5MyN*e7dz1MF2CTT~#!BA_eAucJf05%J0O*QR#Y&TF3?@1yz-Zr7TT z!CoW#Rrh7n>(*1*w=P3Qc{cDRoG4|!Ym$#>$)AKfJCe%AwgVEk8K2B`-E66yZD*!9 ziR+rnpMDil3{?Q^I*tluyjdsiUedj;3iig!8NS*Ek$w7YGiz()u3XQlTNPAM=Yz-+ z&4F|}b=)!~L|9+1-r@Qt%{^RTR%)bfVV$1RaE<#(=@P8bG-CXtmAQm;(-joe(2i_C z2pffkDtrUR=(z25`#Ob(hP_yZ5j}rY&Rh_Vs1irhUUy*1Q*b$x?8{=XIvscvY!UI< zEm)0(L3Q33XI7W^bqbT7cyX?7n?OifaDW8pMdLiUP^9>2D?{0@7m;H7+tb0ufI}XDe2=ah?3p(JMCo zqr+CYU{A^PL+N{!(E3eAW&XyvCgGHCw?tu)IX)4u&j&GvE>8A&X1-8ivNrDU?5>X^ zHzr&e=dY08qlS{%P}rB+C^oA}teJvZ}x6sfk_ywSof7H~QujJxG|%3EqOL2BO6 zwEDpX5#<$G<4RSD8N;p#wA;OvzCc=`;v;ni6*#fekR-artX+W)RU-{k(5nEY6eha+>S-Q?JLMl{iz@)JX7R2QVYc^dC6aqh789zHbK=%wXX_kG=ZTD; z>Y=E6o-_A>r_c53x|5|Y+itpUNIJ@XUc>S0$as%Xid}SN;;H6B$0;GZ9<$sya92m3 zdL`N_Y~c0O=;a?m6?-MEmP55^bH5Hnl!y^d8Rr2LHIa^PNG5CxKA7AU`+W3B~?2<9)XpzN%CK8z3y#?#(RGu3i7-nBs z&7WjF@{^(0do$NamQDLsECi*;)zHlYM}ij=re5$19W zm>|P{(U9TR0^FdGv+U?0PHH9G;2@K9S4s?ubrjvv7<~kG`H&++=GZe-$t1YC=tEaL zm?e4Wi`ZGflrAra=z!SLrLEj#{Q6Z*xBFZxHF?$`!J$saDYtfH(S1|!I8q->CixZe zv$ZEyOn;ptZzpwPl(`zKd0Kx=y)V)gA>NMMx``mKt3vJF)MZRc*5P<`uq8=M`uyvG zpCMFI`K%;dTYmYuhr5*Ii2o*51i`_{$9_y&{VZcI2<@JWq|m;5X* zIhN8U0T(M@dke+J-5M@LUz5|)uaoZ7yugaB>Kz(4BtU`>emqWBCpxO-M?^e#kY7uJ z_?Kj(0~+aRdK^0a8m}%s`Iu8;wzde?BB%B_FYae9ow%L-Wbzo1fn2@CnMF4JnU$e2M zZjwL`19n%tZj!BF46}DD+x9m2QyjuMx62sPbFv=PDlAYRAW*A9~ zC6*kdSbn;ZWp}zWO_MYJDR;dzW4Pv5;o!DrQ}bQft3#BJ1{PCtw<;pynD@jnI&g;W z264=1|9HiEi;oDE=|QkvdDxQCaAi=lNnSxwbbrbV!v(j_AjZcu&_wt@H+`Fe&KVkj zdv)L=A6IqCp$A%wRgmy}c%V1Nw2l9V5C_xbMgw!@!67hr2M55KvsZ?z_}F(v->Pi6 z+*(L1Nld!8J)Vx8i{xDiE6|LOzoHbe$+)psWof6)tO^lhID=PBdM}f#CxUN_wEE z^TpkMu{0Mlfe27%tpuopSKaxN?;3}T$R7{QdK^s*O)P)Nqex&`h@-T((Dp@s!va61 z-V5d9OEo|;sRYoAhiZ+!eTnb^?b~Z3wl$LfKH_6>40I)Cr(wtX5@v;Ij*NR#N`3i; zlBp{;8VL*Bg~%*$KR{J%$|lSTRUQsevJFhEH6D4o*YlA>$BD6Ga#JX!_=I+Xn3#naw6^}` zRUgegqx;pfo1BLMwnfDl{F7f+Spb{2;2#<{_;Ty+e6C_RVbVBR() zd}a#6rZvsu7a`I9lt=KYLatoYtc`&$yoZ^fF1s7z+`uY>Jo~Z)08xk4eOEYIjL+=jg?zKh;<`ur zH_}Yj=+m}GYQ}~g@Cw;JTR}*S;#)sA5{ZL7G-K5g-VJ5#-k;`epk)Ls7c0-Kx7+D< zeZTEjE-_!$T@dnvyHJQkMtgzNE62*>!6nlQbOa28{-S7gK)*@Fqrn$^ruD{d_wU@V z=FQGtYv{_>ge#@&@ck9wrDVih`OGLP!#G^hqqnhet!6l#UNCP#vF*-JwYPRTtwYxv z^A645^2QMrYk44Iw%*JfNG8zyhUQqpH$4{ey=$V(Ym9RB06(j(bbea@mX=tMVfahSkPk-34$O^( zM9++#zqvCY^zR*W#l|KxEgCM*tu;raN|@Kv;_5qU`=9fGzr^e?dioTSmww|jC8xQv z9t@6_oi9m6*oU`l+SN#N1v8${g>HjWu(&k`W>ywNnk1hTQU@ta=j0;9d;-8_4od!S zIKKbDy-Z@?ekn61Im=ykQlnVm&}#$^*YEC1ox{rJiT%R~gysZ}xNJD~W6!S4Gvr)M zGE<~HbC7AeRPnLWSFc{1;0`3-zc47Wgm`K9rALRoxVizRUla)<9zApAVvy3#UlCg5 zY-*ZWd|^Y_^Sxu=OD+Romvwt;Ruc^z(nhk;v^!)B<|e@MzFT3Ofg<#t-E`4*o=wSL z(;hbO*(9II0IsOw0B%I@XkXYB8P^v?VrBsOt~8kB!pW7H1sWu<{zQi1MAV8K97I3) z^KLDw3sg#oYeaM zQXiERN3$}b()$+6rB#p=*n3^=?G#v^Wrh6aQU%AES-FoM{wkAlXxk`eu`xF@u}(8= zUO>0}jGIhrRrKNs<*%YrO;|^27R>d*oq+XC0_(+ldhrqLwohk2>gH!TsAy|3)m#-$ z{UE9}uaOzF^ymYn*r(05Fr^$pl6JA9p7^_LMdY?j^T-B13Td=omkWW7j3CCUmN2Lg z6~l(0t6^w!#fS-L9}ED9Ty!}cURIEyzPD&GosB`ann|Vp_BLJFCP(_J@(2yG)>-I5 zB@If46(T~wgY=iUxCB+ zs~xSU%I(y@e&9B$p5jd%)ff!{HZ!Qg9qUW8VNs zRzzwGw<4%_BibD|pHYlm-#*mre9%Q5dmnb<5laf>UiK*(!u|p$tfA?2Vx4nd$~D}3 zTmWDlRaf&x9?8q4(qBbx1iT8a&gNq67stDuXL&w5G0AUy@(`F>E;MSN zGJdmX8_?`X-rdO%t~&?VrnNF|@UjR(mfpjLpigeB|G9y9Y@L{ahP!!jd$MQ3AIn&U!BGqPIkA3k*?Lr@sX z!1QT9TWUWL$Nq(u`D~s`*2N$!E|>o!w8GeM>5`x4T&G|H?tAs<)G$wzi*0;>(V9#w z@bRI@$sgl$*F5=a=fYBc#-yZo%TEsFpP0fHGPxx1qs!=+75MhEV9vE-H}s{#6XLnW zo-6yGwb*g0hGyuUF>{jxx3250a|*^;0|)l_U*b3ExbohuGtF6Yx;dL90?edGVO7nQ z5GVb*tuNSRQrN{8s!Zq9goFT-DqVVxl>>UfHy~ZyV?v5H*{-C=ptoV}0>S5?CXz2l zm%qXh!5#cT>h~`3Rz@#fhXL|$)>5w~e%HEoOmyuDsUyin(p%`*{EiIg-*NS0j(wK? zhR)3m`UW*1j;V4L$aN8`n+F-4Q^BR3z7B}$dOhkHXzR;yK_9T+=n%)BrvwNPii(%l z&RQ~l_wbTeYYOHU9;;luI=1HXa!_%oC511_mzm6>*`AADJ>*O`#~lDr^dyDFYF=bNsYP5mkS7BVO7 zI9w2XstVHN7DJz;tZ^ZhbvF+_VgH>vN0vL}Vl}U4~%_d4xj9r&4| z(`K0astf6Z7W+7ZkCIol@Bg}Q*sM|Cr!QXno;Oee^G!Y9uvV=zSN_XU0BZzPr{epi zA<68ngm+(P$j0m+SCx$0uXxFq+OY^4o#ooHCO&+T5uK>n8|){4auU1C4tT1&^(*$X zV!3_sz&p6Jo!mRVLUqE}_MRJ^my5{pRZ9sjiVNGDKn}yfDIxsHH?BWeBb2->mY!Lz%K81%n+3Vj*%*ibnI{+szg&T_g~l#`r4YzSwx_Sqjs9qt zwi`|^8%nA*EqG9AY~=iN9fE05tSVcVF5hKDfW+pjGVj$8&LDVedU*1K2@BJI#)a$B zt%mCKLy+V6vFm8da*;%CAP=02h_qq`eD;&R+g5E6CJbHTL09jemkxS m!dD;pa-{KjaH&TdvK=p}($R^={=&{CHvuf4qUR5>gH~;lA|FRB1{~{?P34nnC0AOA}fR`nJ7~l=; zU+J&!H?IlqE!{|83-bmJ9`F_c0}~O89Ge0M7oU|! z!!@OD29J_kNiC_Kja@`Nc?yY2)X-i`If#SP$S;oCAs{!epz5_c?EkvU|GwK_XEFZs z-v4=a5rFar=Czq`FaSb;BO#P*0)DQwJJ4pt(%Sn>YhzR6yh+(KHoYR4z3ukxw=(@Y z-_n)YDS*_}z}KWx@R-p0(Ob){^odCKd5oXd8<)rK_ywT%_&E}?{-s@J6<4sFANU+q z@d7X>qdI#>rk2g{0+5{Ztx3```2YDjs~~ZmfV$-3=Nh$Nb?N0k$#@?mZ>$a*<$J>W zeX1nQ=cg<_2=tlAP6|jTsn4i0xepP6ZmB19E*>78`g$S-hH*}8Ft3X-ik7=d?{ehw zujs19m)ssV3}pBlkchaki73SPN%SMP)1kOCt*&{^>X~r}j#=#10zP2LZNI`n=m9)6 zmU`f$nLlfcbyo1QZAC=n2S0{5^NNl>@4APihxR(KRPAKKmj%0`e4OBb?Q{?*s$K&X$E|p~}C8Has za!QSh>>MyLz{rh$Gk0U!Ia`-e1S{kdB37BDNcS4?W46PXB+V@r)8-mHN#^$pa$Hyh z>N=wEWZnSXW9B3Ut)0Zskb<|Q+MU!ObVR_Z>j2I=ShV8G|YP;Bzy za7mA#C!vzUA*HtQBLs2^`klSEBojT!u}FEQ4lkA8`n)VmxExLqfoHNvr74=A!i;Sw zA{3Ag+DxpF79pK>FO17&Q&uL&;Mp52O~>D2(7Kp2t6__e5SIB=TBydyEIXs9ky)=H z<730_T#!IAaoMZM1}9FXDu#X(_Sn*kqqVKuHvQ7oX3rNgB}Q+aEk)? zA$2Nj0~HGCpXqZ>)EUlCR$l;yz1MuYUghZ(5bEhvRDLRBG!gvTO(%WNhjvKVA>G!O zHjGZ?y=c7O2bH3$2MwqXvXu#l5ujSN8}pLwp#V0I8ID0B&J%8&6jCdWDRKiH>`PSn zURoS>)8E6r4|{~mlbj8f@Hj#e%_}Gw=m{78Lh_v3@Re(6A42j|6f zmaOYCL(`J3;-n;`x04Dvbnm^bw|9Q)-s5UT1Id~>E(|5sml(>S;PoG9HkS?0AZsH> zd*4{1Fp+zSu)_X1qT=Y1V}~xjFGu64f7(4+S|v#!-@zn>GzHVJgT0yZSWzS$HLkWz zi_GNAj5a>F}P4>l}8yz zrM)I)`G+~r0`@R`fSUBVZOq+jGv0YfGGN3jM1N>4Pd+1l{di*iLaaG`ffzq7D+%A( zu}U)Y!n?=Iq)6-o`r!}h?}%;1M5A~?y5?$?{>^g~XE;ug)~(3Mt1c~^sT5{-dEX>nD7Y5j;2*vL9g{uh-JP(>nm z&I$~sz_^w;%=$d8wfii!%wkDfH^@1&SnC0*v8+rYEhzCt6fJM1I~PV3s-BcoQu!dk zCN2Sw$$Xs2H^jeJ_e=L+ZaJe~x%~=N#Vp2>tvUE(eHU<8j*?8?mC2P8Y$g*5ZNKZ~i6GHL+#)FMC72^pTQIG=O`M49RnZLa zG&^@5a=eSs-ln_9a-gwsb+84`bi1hj3amScuwVnE9lQWI6!^c898w@sk>;nHjJfWu zl*T}tl=EV(_l*v`tYuqCyco>Lj82V%j1>HM?g<)DZ#H1TT+)Z`{@_Cj27GJnl5~& z8^`r*+>2jVyD%%fNF`=hB9}vGQEQyHZ#`g~89Y zOe77}Qj#-3iNM%5_q`yz8TH}g!*IU^{4w#`?Ptedl*qz67OkPjdj&pYhUiS(;<^AG_%!MiND^f3x zsu;OAwL+T`P{~{A8}~gj?sr{ zx^QR)rhY#=PL`m%6rlPQe<*h*5eGv_ct5l_Jd4*%^b{>f1*hl+`A~Xtds)J}I)Nk~ zkBQg~mM?6Em+|nh{)7JF>B)YZhdF`9H`}LzLyVP;6=SQ4MbO=YBQ#5ZB(ZwMi$?s8 zHAK&8((`AMmr*W$af}0(XqNh?+D8R;XX|0hMfrmEEZtg5HP(Y4_ReiYsM1EGYC}3! z3-Kl+&NGpRR3Rc&Z$u8mH}b;$=J^x)wd9}6#)<0)(s9~N=?(c{gTmwkT_#P4)wS(I z@TCh;QZsB{yQpqxu?a!Igcrj(X+hqyMarU2Lyg)oo)Fr20E=GWjFk+omTA5bBKLMR zYHhbDU1&ZeP+VO6OBLZ5^)|1!57#L8Xs*(A>158sK|XLMVfkYo5kQr(-RjDWfoL); zUtzYnm4+^V&tA!k@v8+6mkZ1J9JZa7qq&sM%Hdn-MYs1PrZ-tP&iP~;#EmIsvd!rWk?_oN_6w~H9mn0@%CHS=2ZwFK+B4(7-=Qy;{ z2!HqYV>1(H6Hd?{mg!nWO~jN+9(&tRRd)7&0u`Jh=xKCGmn@z7r-+l5jA)Ty3ly1# z-;!7?m3bdz^}Ab}btI^N4ppJ|S~5$EIynuOj2#-_ksd}(b2ob{{Q+#!o^^USmB?YX z`MF1@%-Q3)w4|>ka<|+ZQ>RF~EpU5(5}{JpdpFhamx?Kn7n6?g3MhPVsxbX1I2a*Y z>QLwhS(I$9bvs;Fobz|IQ?w<5HX0#Lfr{kLONrI+F*B&EJAz;;Vk{4o5);al6VHfV1VJoUIB__nBGDSk` z>EnQ4-@6h;Bk|ykR@h@Ml5`7L8r0loaZ#aiOrapIQeXM;^qq?XZR+yN3kyx5z-vCq zeBt1vxP{nl*t5c>`sNhYESGNQLXQ@I1PZEcg%?0{!{e0cuM-_ z*0m~C6+hn13m_DOudd`adA#u2_r2sHP2K5c-7-x!UYw3(hRFlcw#LZ=EB3vHmuxsl zs3jwa>*8>W45ht=_ckQva#+@O*&F8)H!{clmW>MO2;9N&ZGNw#0^4umwu(f zjS~h`>TYt{zE)sTM%Uwzajzf3yIf4K$|(bm@qt@%ZjyRnca}cgjrG7Xw&xK9{4@LpuF9b zG;KPH)aaAYCoy{{N9KN3_?N(|MzWX>&#Rzy;6BtK32Hp|CA^@#u5Nf1oV`&mSy4aAY=9VPirWKmWD1;Q zM1bPz#aGWmKHDR8q%F`R^kwMme(9l63;BU9>sz`{3+)G`(am7Q&_XkDasAJj5D26~ zn4h|^f-mP&|3sbksH1v>yE!-Z;6eM+jz-Gy)rW65z`Z~it z!GG|MjE6dgo%IK+OCyog_wC|*>iJ6_8-R})WV!7U_wyIfixu??8^{(c@SbQ}zdYs@ z#4yeH(v13=Z3$YIHBWCS-No-{BdX1zi8aOj_9@Fj5c~4S4khM!^k`O$HSGm(|HpaM z+9t@6;X&31YGDQ8;Op0~3N@Vs<(1n^;O9L|>v2&zJxzxBcE3@4LcL&_?N9PeKI}*^ zzTzI}&?W^wYeSyp|KdI!VqOu~RXh4S&Cu=nzgwEB<6}Z6)+nBA+|~csmj2L%oueG~b1{>}4nsOhJjp?;;MLDhHUMcS_KHSp zNz5p-60>@w#l?Zt`)xQFDz^+2MG!M}e0)@H(W$%pru%Ys{RkkbPC^>(poB`?hdA^s zr$N4U5`19xZBBg?hZbku{{HDkO|%sY7JT`M+7opr`RN z&pbrT|Mph?j}Qmpxw>ip9+j^T6o_n z3+GE9d`$v7*Xpf{9ShD-DV+W~m;>)U$h*r{&2id8bwq2wU!*oLV1M^c_(}~c@(GBe zN=~j9v0q$rS%}c`AJhoWR7rdV$ls8| zVryAN%QsnRict&F^&PqWC+y1ePY>qD@Q2n-{hq7kDbwrkfEH-~|KZh-)?GP4 zvm^*a$*#)LfDXWJ-&#GF2jP$>MzJKF|EZ%UJQZ2CEkI4}p@d^MGUt2UTS=|f8bJiBLmn# zv{+gi5*{9&wmnm4#l#%W+))1WMjC@}Ks<|E$G#sW(|J$VUZy|WzMGraxr>(g+sH_0 zXqZ!}RfZm2T}I=yNHHfqWQ6b#_CvbWz2l(S?* zw$Ggb1c4sr>P>3)RFzjnFE=_;@UyT|hrlB>XnzBWcLsfpjRWG~;IPmA=UT{bESvF4 zn|tSos4$^UcIJ$w%+UU6WFK_P#}GdxUB6xgaS}21>e=OZ&!!(i)=p*6?{iVq&ilF7(h>XT1S}bY=p?dw9irXAdE)uqUUI6Ty;|#78 zPNz>;AOR1bv*#5*?B79yYTEB<$L5Ydlb`g-H4|{L=l@(Ht%+o5VEXa8@}Uo2{gDhl z4DE)!NU6F~Qnq}@_m29_rfk&r&;X4cRu#SclAe|?4A7?+z%xk>G_iri7tH~>A~^HM z1zw$i;g78S-0wYxr>PVD6m$AZsmHIf-&=*fR2Hs?JSzkmD~y~Ng|D_qfecmDML@{1$#}i6 zvT@s(V+5#m2qW$(BKb6=A|hCvw}}WV8wqx$YbSpKobscLN#Vy%V0B!|3|i2n{j6#Q z&=;K1dwnmmaCjLQz+hZ4!RQBD2VGD-}4LZqc5(K}`N;Z@doO{<}gDc)7> z{)k{iDuo0iaKY7kOsDu_WRMi$S-mHUr+;n+M4}?*cP3IEu}SIxyO$9c;?IE4!-0!Y zVmMefa-8ndY#fLys*1;~$!eDq*C?dLI(R0EXEcOh-rk^k*^+g1ECFB0@Nm6^E1$U- z93D=1Fn&j^817sfTjn-cMA(+%Z1`2jX2|NoYrnG-afXw=PQ{e)4QOu7t!1!R-ziX- z8~Fu*yO=-hi4=3#0;kJ`n}%g8?>A6fY;}2Ba~wu2qo>}oc#MG#q($!)+E@8u-|%t9 zfj`0{X|^8K>^@9Gn^1fIgp(;a2a|^Ma5$O+)cD;Sk(fFBE%l%h8pXrYihus@9#8;|ZLLJ4|B&6vK#lf(glO`5yH$u-sdU9^Kos#CX$DjUv*w5 zfmM&q^uh64=sai;4V}`a{!GLIrx%0j(;tg$W*hB|6UX?^ve7Pv4znp+60PAL2DYd; zvK55YM}5a&bq_89Ac2Zo9N$dvM67ZXZ5qd2o`o&SHDMIELn#*A<$FEloiM0$+xF@e zWgC}x9h`ZvC~BbHu77IK^~ljkYCB4xnBD*C6z6lRK*W7C_K8<;O|6JZ^37PO-!9ZT zuy|OvkbzF7b>R2TK=n;Q_Sq+3aGQ{2!Sc!B(#+ggk||7TR02p^^GjqOoBvcO@1p}`6N>y1(s5(?& ziKhRmXluOYY51JPk^d3+lZ#)oy2cL6$;b<R)v(@JfUKnjsFsVeBrlAcYF zaLYXmMTmq%_r=(`><_p2EzgX3ZMfnyi-$l%WOR zz87nHnf(I*=5_wSz*bh3n9w<=?U#?I?IixONf$=W*_*-lUAj0tJdpD+V!va(5r^NT zbcd;5zdN(^Re@UuXmO9Y*N;HTD*}aR1K7Ymoa4WP>pN6j1S#fzz(sv2imQ5Wywk~6CvCphl`jgCpi^xrRO8<#UO>%*(O zF#!DM|smTkaFSzfw1hT4>ra1N6)PVJ~3DNs&VlI4ZlAE62wMJ|R|Gvu^l;IWbAtsrcr91v{^ zcAVENJSA+L1rXdx4IE4j-DIzE*Ax}mxyqpi5EON7jFFcYw#+d$LKP!asvDuY!bZ__ zQZ<}^hGZ>BpbXEK5<2p)Hr0jsb06KHib*QvJTc0hKGF33WgLIP*{w**AU?mvbx^wr zpwBT*WYPNhcA@t#fWC3_8^w@z6!Q%-$|6O^MNhBQvFxn26?U?BAw0qL>1R3>n{9$j z3PYQ1&M@ITxuhd=d-O~{Tv|&XMsdDzqnPEt05HzQ)6>5Y5F3}YXqMx7e`GI+EK|c% z$eQ#Ms|(tPWQkx2D8VjvxTlY_ReVfe(x9Y)7wdY%z*rU!7eYw2ukcCw*r!+;vH-nF z)WrbIpGO+7{#VX9;gdfd^<<24n{};L44dae>tcFSest0ZYcwosA>U@SWk$0k8MuU+ zDjiEjP0HU1`q%77OVwtIYn$nsR~rx(K8T-@V>+$a_YW^ZJPHScA17lt=mt# z<81fsrzXi9R%tQNB(z;(Hzrg^ag$=fX&2T|VI{0mMLY>TNP{iW6Zo=W5l-kpi+EJ? zn;rJDMt^Z3fhjWmm4sxE5<-!=s_4n-b?0^k&pFb_BdDM7 zjNr2+i{p}&lxdQ^uX)9)4VuOS$#$bnzi>H%PSoxn+R57_kz4=Dk+JC5lZ1e-zAyxjU;hu5(+e@@o6O*5D+;iX$Ue$6$aMfZLB8JVA=41Mad_dqvtMZuo6 z#GaP$o#ZEJeOA@DpN7+{2m5WF>iM_t-xJHXHl5%lvM(l`DDRXFEj7*j3NuASNuIeI z=i013 z;TJ8RS0x7J7rAHeoe(CY6C72-N{brqStpSwmPP+{AoWM}U3w3W94Hosp@hIsDgIx| zk_pZk8|ne(;zbp%s+r4#T8-179;5r8g*57tKs5>l8#0mXVXK10%%a8*0!AqH1$p!FMJ|U=Z)N5-0fQzJuBzGqcD{vvNPMx3mchyjF>{y#M z4#WayCaOE4N|O~$RpZ?(k;7KN{&bJ^qreXxprXWKc3S1pGH1V5#ek#8DQ15_Je&3N&D$^Cnc_5<=TbW; z)B}wW)zuwie^&ex96%$~T0{(kqbq*6H`1PV^0$XD8*V?}x8u48<|T)rJ3R%lBo)N$ z=6C#|S8A!I)VsqIVD?~aBpD>)8lvb+Itf5>IC4ew`@plw0n z>#w28Cb{`S=z({oAReS&bL2_-(;dw_ia<8-2=`)J@KGucC3qxO>9@!?QrJ@i*#{~S zzr!sk`s8V=pw8v#tvW?TbFyUDV`{mueaXk4&>Z?$vFHu@h-cY1tH>qyW830nB8r?T z5xO*BdWD)v*ZIkH^{AOYEeapBPPC(2QRK20c!TG8SeNaIV7PzQp4u1QvnZ+xy;l+I zPM++%(O#5GtF7~4V^J$^_z)3&yj167Zmbjy$84G@1LxHJ3#( zsjWgtB;t>?#H| zyRWaT@yzXXc?~4&c-7T|tQq33aO1A~q%Ee7A;PLP9#2rVm> zE@0{x9WnLz!#xM3LPK18w0pFNGoJjx^%W>I1sP>P1?jQDZ@sI1 zB5=Kmt#Rl-`+9Zs>2-4tGG_|xrmh#COp0U#QZz{FKbMl^k|JdoEDE-H)E^`S`jg;6 z<8PsjP2~r~NX8|0liZ(MO1Ur~g&>CyqP8U(tX8K^?uARye|m!Dd54PwzYBD&(^?cW zWK(wSVaxr>T;K9?(^q3gcKO>1y$$1dnSof0iY73(t%_fgnF$Qw&sbg{(r*wC7Ep ze9MtC>V3u?ibmJBrLPpG6Jqe>`bv6%S+4>Kk3!2t9oFA0G*F61lgs9ULr=1*n-{<> zEo02X*!A<-`f1L>ZR^^-r}ryt#k8RB%``5xZ`LYLw+1R52~=rZc;^klk-h*}8e2TB zj;5MCe6Bm6W!yH-)rY-MH;a6?NI9452^kQvC>5C94R8m&6fdpc|a%Wkvl zU>+)4OJ?ndn;j)>GtTQ`qzJ4Z7JIw^{)T&P6UXI!5LJywGnR#kt~cRSl0l0+S2WV^#3 zO(aeZfaX-KGEKBE(w)VZh0?s)dz*ewKilm1*d!GHJ|nPkq|s25C||L&C5Ac90$drn@@rJhgc&jmpjYV!T>1g8+ppKAL!jP{=@cD%2}d1QwtY zj{2s9XwdfaC~XS`yr)4G$O~YPqPehcW7QXJe79XoEh5&)MtQMuAC(qztp*N}NB?x9)pJB-a93*l$)#jv{nk%QcqEd`!i8MLul&rooZpu?j zTd?5d4uI~mwJTbYh})ijlI~7dlfIQ3VnZTepnVNwUjhFl84O>)03K*x0QCrJxBfXP zs{;F3o*wsCPfzUEnFQJuQ`UIE$DZAmLR(I*UeI5ZY#khy>+?EdOZU9C-O(i?tU z_4;U7Ct#3xVQ|@az!lwHxc2^DkD*{8nNz}=?xCjWXYA2Hyq+kHmV_anrxLLQbKAib z_{w&}a+D)wG0U99l6Q4;IB{xrb@O@qkiTe&M|9|299ZU1F?WCyM1cMz%HnntnyT`O z9wL3{UjT#c3=hLqj}c_}k18*K1TWxiit!)Zzd-O^|7Ol(#wN72g>0beJf>IZ4|lJ= zyNgiVe{hTczHqmm(C7C(*`=M-UQaYt`OCfS6?biXz-?=KT;-24y>OAs`u@g|wOn7M z9BB@bLra{f;c!OoJhnSXwegVT>i1Upt@XVGQngzA;1o@y;iTgWq8O049JJ9k(Uo9d zi5;dUVqYu?LG1~53+HhK=a%N`pdhWmF&|Wk?|$ zo9K4Q(Jms@m}9)@Z5_QiY}-VmpHT-I=ePq-LeglTP4{Ggdpfb%maXR)355y-81$Gk z9LS?wrSc^){bS<3dOp1J0Sp{<$yg%S>dDH3$`tW-Sb^v5l4b{u3K$rK@kgzlw{K^< zA@iSy9@L8ha1K~MNY8^Z0`Qj;aAx%^`KR74s~BXH_MYB)CSgrgyv^EZNxvoin&B(k z_V}K37Q#VL00UvOjVnQ=_K>zJ1=0hen39dUrJSj)fwwqZ>J5igX&im_T5PVbL=eT zsaBo4Lue+JKldR^cC02;Foa)Y9G(6E(+Y2|NcA?*9r7C%O{pqtp0Z!J3+A;qc|Uoa zp1SlsCTAUX$_6h*i8xCN`Q|XmqhuZ|`crLw4M=Sj`?+je_oa!@JF_h!L1&guZI-zB zcXfpwsP?_@QeyDe+sT;f>K@WvS7AJ45=zj_g z3^I%{2E&@K>S_6(Xs?Ap-zPgyJoBmqd6CC4U=r#NLkV(_II-Z`bXI594(P|eyZ`gj+Zumy%`LKU-wV6&_KRa*ivB(!>=(fH8jknQ{IkUOe^M;Q zcOcUtZPzZ?N!1Jol4YFA&8uGpX{0)Rl&UlK@I zlXQ09qs%>1;s0LgMVYXdA{;5RlLq4}n>nD|jkk6Qn-XyoAgjaYDedROZv22i$m3}p zF3%n%o1}V~6ZwI5r9DAKXJ>2DA<(X0-1N7~wgfaw^eAmQJE|`E_0bLQCkDq=L?ok7 zrQg(W2^9#Ddgq+#haRON{2teAJ(ef~rSK|pOZ%w&$|oH+9UP|d>k{*;oj_0N(!yevHx?|r z?v}AfTFDvrn8kDuZ48rvC9X|Z?D0-YjZ7tC{;>YBm>w;TNR&dJA^B&i zTlj9&c>nxoOfqg5li zY2TJhPd0!#dOm?;Dn3;4s)$!=xRb?9|Lmb~FKTXH4gz}DP?CRB9aQhx3u#9}{AmAB zHujEtx22|z-lY_7UN;_qk(HiII(gE&xD@qCYWGTVghsm)6bHt736pXVo z6C^=Q-LyzEWPuChiSz!1Vb=zHO7HeME?;-eNc1iTl-N4vNv&AlxTVW6$_rK-#-RpE z|MITq5QGk>=SjprKwvBAKT1%Ei=Gfx)NLdLJ4>$E*639EwwAVntJ*6w?X~>qOvPe| z^98NCQQPMU*%l+Lz@efg2N@siSxAHTTLaU7m;X`ZQ?#OI!KA7VL{HiVDGrO?nDyqX zl8GxHOv)vRr8i!txNDnF^Tg==at)Lv%sT9rS?A24tgCAIQ{qWBcrr#|j!3T`y%z(E zq{3bw#TsjKQmM~?7KbwvF^;4;j(oe+L&cn_-mhOeF3v5D%$b*S8sLfX^&7dz8ndHW z?de*Zq(}6WWKr9!@hG%5flHz&g$tZZiXVd&zC;@P_*MTLy_gPuWx+zl;Wnw2-_ zF70A*v(LTOYaZ`}mudC;t zqO{XB0nQX1>9Q912K)+VB2y&Yc*xrg$U6hrLQaop-!-zmUAJ3rBCnU5|HjxvA3A+F!bmR{V(dHk1zsFa%ix`+>D2JU}TB%1o^5iMi%03dGieG}N zCw~wWHVa>`4TPArdBj6P&hehC%xqF)+raILegTnEd!kO8{OvP!}!S4`- z_0xTiqQ5OeZI%qIoibeNTD7b%x94G{XY&>$4?%M^2FH#I(Kh4;pIq50@C&Gr-G7w5Gz`APA86W?okXXO_FY13WaEN8iCgVyZz z;ZUsa(4{1by-~~^&s^d4yul|n*dF7!H1S1CNua_8K z1y?YLFC>DWx7!AlZCgJs#9F#;~(20b8Ug@WoLPqclG-<3a*N&Fu6HOr#^5g>eO%D zKT09ewt_2$B-HNn`pWC`_in<3fj|!$JGahR>%0Cah{cXIj+b|NcTpA`!;X5DYPWq( zFohB8G6f!u_<_Q8e-IEez20tgI!<;4$%p(0|NX}MHt1;}q8YB~x zf9zkDK7EO^WNxW>=s42;ZV8IC+<4Y1%^p>itF{wjUa>G*=%TFNdvj3r*%#cMPI_7X73+w$sjDfT0 zF)26;!^3OPA3%-s0Y^y>49Q`80W7@<{LE-&^a23czNc_l=^+&k7-~**)8ccn8WAfY zxZZw`f&+J{$;R%xn8X(}jhobSqL%W5-fcB#%*~919;l{tKE-0AbYw{8G>GSFD}PhM z7MUccb*!!mgI7Dc1$^Fy13mez?Yb1XDrBv^irS7RT(Syp&DxUsTCMpOXnT%HLJV>J zX0LCSVOULbIcQd^>}#+i@eXLt|$$=ca57={G`D*Tjj)SS8tT7e9s4hZ*Zh z458EZv}VhU-J$``ibX4zLDt4`PmV$z(}4@aj(OT0>FE84vd{Bd=JV@FE{*V0xfB(? z)b$ncu3=BQ#ox-&j^ zJ7i?qr_+C|2XS5a(|;!nPtEn(5C4H&a>)>S{U?F?`R`HnZ`9gkzj9&($8TABoJSzr zrN;Lv=X(p!J9p7dufkf#qOi6Q`|^3x(&?MDT7|)_rT(-O91I1Hs;Uyp64;2#Sjtl; zi7P!wL>68o;v7m}-At2WJkQDs)Tq6r)GU3GsG*)&A$E8QR#Y0sdEA{)IhrP_s2SPh zyT1VZXMN?Jw$*;)>bL>oAr87@-PDFca@(4MMdcm?GU-!zQDI!m6~pOhCPJZKqIeRT zRO`vUVvah{ZBqW~j^lIpbD+k z{pMvyD3Q0ySFLh?vo>FesxKg>of?B&jM_?`^UNwPV+zI(<;C)%>U?A(r+U31!1o0<=5H3jNtPAcVG zhb4H4^1Z1`qhrBc^?^r{$YAMqbEW0)j`g58v{}BNCv8B1 zltv_#(Zld;{hQ`jvARnsASjA@U3WRtOWIUQc*i<5H8!t}N`Q z2TyT$RC=gGoBULU*&p@3W!Z5e=Q(_Z#lwx@-uD(ReIf%4)?r*Yqgn(+6%D^Q-TeQA%KO`4nU=&kdy(9CZS2@U=yEiWYY~Lbtnis(Dj)1N{q0N}9jVx6^9w*z!V;=<{X%hU(E3%W+^+p)^bo*w7LiJW< zYLXp;D9}w0H-jbG@Ek3%uSif-Hc4~_PNX9Co{oWc+r(~&T>?~hssy}6xTUde?3^h) zSI1lEsQ6O7<*lW?=m0pX5K<)RDil6GmbS{B6|zfQQ)Fo#4f|uj_P^Uu9 z&li|F5Zq!4RHu+h5v4gwN*|?kMiA5?9NH+<#J<2C-q=3+(Pv-D&QG-8ftWmZ1sxE|QMHNob*P@Smxu$;y4VfK=apsq5Qjn=s%?G zg3$8D%~->>gd9We0bp&?_DZa2_>kmJrDbN3Dh@+*Bn(GejJJo>9LTyr=X7C|_o^HU z?gB>yDA*IhpfCx~jnSy@?R}r9Nmy1~dw|5Kq_VOKy2!r?Gj%So>pRfA+g7QbTJ4;R zjhKiP+>&4OCE*RW`l0H)3`yKzTEc5y1^qddYfMD@d}#y^#rFT=r;l+sBHs8qFPb>R z>N`>bHF_3&2_0zOn7eiplNk}qx*n2K@d+aYSr%Nr%7@ako$aFii{o95pj8URQwsA} z&C)}ttbSOjC5H*38>tEHht)4cFUCdfwi24=>(1z3FieHaKo$uopDW(2i1dHDsy#ObChmu~*0<4A*Bu}&Aq_P_;YCnA z4Pz=b6PM;AAl-8n>;ex`6Mo`Hcx5mTuDqCP$HnIRK)VE6bPnH3vFr%0c2lEOPUWbP zsz)`wGi|8wWk2keI4u4O1Q-#`z`Y~TugN60qe2-M#98I+05w`sodO?g>|dl^zK=a7 z!!>{|_QcFQexbjZ%kLiA2y`b2R~9d%n4o2JyVc7`zkH&>*H9C%j>GlAs($`6v);8R z(kkURm=mKc?Jx9V%OYdfTZU9ix%I&0?L>A4gQ@Y<_mV|9_W<8DS8gPM2*C>1pZN-@ zVtrIX=~L%EcWZ?;EI$2+xUWN(1WSB|VhABT;k;RzY($>NN zY5vU#EPukyC&0XLobKc&v&?w+P>qve|7J~fttBDrU?xH^D6;bsd=r4{)@HFZv_C!o zamp1uy8xCx8mbmN3bS5we;N)@@26*Yeo&e25~3O`dH-^`ix4g#_I2r32J_jade%8u z%BModh26yK@xS*pG{+efO-uv8Uo*4km;O`!f)0Jcxp>xsSikUI)A3`{m0Rse@KY zs_?XtN#>__``?R5{L;_+lpkNy&}nfa(|4Kxk0xrz9^qwPF0OIvZ6c=gK%i&#^Du_@ zyh35}dr^5}Gs)}_4KTRk;O~Oz-(8c5zndZ-0{}o$LVxzsiTnDPi4S7@Gx3FIA3Eur zvKwX(cbf!kGwrdd5VJ?tgUJ-(E<@uZEQ{_%oY19L0wjCi%1dAUZWgWm!wcG-(znr3 zk?a>)p9*O<^$Bvg_V?2kI@EX0@sq|YhdyfXYn~9F@E^>4oFpUQ1?8~m07ZQWUHB>P z`DNHx$}L0PiGD@zJe^u>>~+kH52J?#k+UiH%qdwM72n=uCKSTz&hX;0{lEGCZ)~)5 zVtRj}Xs^(7hc+tYHO@{R)Z`+*IVX=7SW6#9J1hyRH_+4s^lhbx*HL?*Yf(H>;*b5> zuGx9^(Aytp?osc2rd{YTUvw$bj!Of;Q8(Id8gSzZJr46nm28dvN8y~IsNh< zSy2C8oBe&Z{}}nV+RN|1OCI!{m%joaXY*s4U7d22I<>k-ZuuPfOltS;_-@s9?!r+7+s8hGNxk4rN^U%Qp$j`fyqW5;vbwiCYPAZVlPSr?mdte zb8+BPQ)i>U?Y8{FkviS+f27j|S3ZUQTQ=dpyH|GqE?eEvXEqVJSNQg(0V`y>K@9lM zZFSj;XRsxJz2zO}QsJSGvB0>LE5%?mc8pm?3o8$nIa?=VT7)80TS+lpo2&K3jCxmH&#Y z^^d*~4f3jAFaV2|x(&i~^8F6rD={r&ON0JTgZp=n`LS?HZczYNU|5!tw0N}(L( zoJUfEe8J9*52`-U1fY397X0Xw5i4%Vd+g0q4|xE|2nZke>u?ev{;)0o7s^wt#7LEZ z@cUqk%t4a5ISHzz2DG{eQ{G}l%d0tufN+}UkD2~Lxx6$hi&4%QX*&@gAifC4MwtHm zO#ZRjpzi2Bq>;s5#{h-C!Qs;W@sGrOI$ho8+`Z;^D*hY4`%b++yKb+X!8tt}SJV2g zE5%}6lLu^BM5$JXypEDop;loK2jN*iGDX{c`0$%*Oihn2B6r?t;F`xF;EmNl`&)~| zcjOa@4(?GSUy9Dl8NUJMXTn>Rm)>KKh#Ltd9%IfB_rme`T2)sJ;kmwj#VT1^D@~uS zyd6`rpC>be&wZ?F?(?^z+&;+K?lyzFDuuYIK6-idwX(Fpys6THB$Plu_DCS(tG3Pz zSK+P+)|^p8cGRHUi`TJEyovd3yF^JZXYv6YBTg~bgMGQ`3ywF(T~1pY3!V6NLG^Z$ z3rUESBZoSrN(+JOk||&T;CvEDXe3Y2<=jcyE-pX|BjqxUk2Oahnc4l&7F0BA*V2tH zzH`A$p0Jl6G@JYMl2#$|MT&!Q<7 z_mnr9UeO83Ey(2Dm=C<7ES!QK`b|w`*HETSN?oXi zRwjNb7-Z(9*lReXbF0BjxzB0%tlu<r?PMjN@z70M<8^P`(4m_ z&4IBOlWAcBJ;F}~4(t`d`l2KKumc>orZrl~AKFxN&NWW) zqMa3lBS7&`F?ENdXoYFHsYCUY=sPwjxLpFrpo(d;JdQNux@^A8+E?h z#0Ov$lC6eBZAl*l?sbTa{T3df{bQ8@lH%a_g{#QGBM;Bvi-#+>WI3XwUSEaz$FEhL z>i(D|7R%+R4)7~*4uBj~s{4BR?4NNE{x3eg{*!CG_a^{OZc&H8tHc}LY?XTb&4iyX zm=WW)VHyf9n8ML{D3j9f0)as|Oq=H6tC-1E(+7NwFXqy935tNdcHleMBTmfa3);ww zIBATZUP1?zt@3m&g#2A`_~C3?hn7m!keFGAS|f~Sw)w9xvPt9#2{n;+8f0B1lUVx4 z-$;?@6@PA6xHg6LL>Mo;+)@}*-a6=@h_myg8LbE?o0U%i)IaKgeKdV^zA4C;TLdek z+`WCD;dH~QdpH#m9MVCItb?>XY@waMVx4-b)ykuLkmJvDIx)`|daH#>&+rIHcLXj4 zhinNFZ%C;ePl~9J1u$;UWvw*oT`hm8a_b#F@5r|<_XXu&>Atxy64ECi_;r+TjdrdM zRpchNDxwKc(U}u}K#D?vgaDo0!~6PQFpQ=G2SI8tMQ@|Kac?HI;J|X7T`_LmavsXm zgw~6g5}VGb9R2*LDA4m52FIm85`)m&^pL)XM0${{vJu%VK8WE8U;1l=G0-fB7*gLh z0|#G2P@;kNb(Qo!?WD)Pr(C2@QXhBn7`T@fj^PHd4 zsWUssCieJBxCCe)Y-3@g5Pd2=bKKgy&f><#5l<+x+p&}6H-2-N_upby27V{BAk)9; z|2QiCd(!#$5Bq)SKc&4G!12zh+|VL6>(iDAnSf~3bN4DQJugcY_PVZhO%UD*66Mo4 zKJOQeOjnHx8ExOX{pb)j;17?3f*H6PCjAoF>L!IJQ>(Ku1F8v+4gPtsh`ikX#|g53 zhGF=xcaf};86GbvbLAGz2i;iyr$u%Mg`&6il|tt|J!X=LK6qsdN{3THI$+-)Ipw<%GlpR>B!&cIfuAI|K}yz8pNd8; z|0z?QlKh?T{UKB8RM48PJT9D~TK&UdwTlmb1vJMa2E*{UG3*NMWHjwm;pTHnDmr7L z*_!u)Ul94~)#a@$WPASGT8nj)Gyc~UrnINE)yj?wk57FoOUXQ#8Z-*#sIY$d^MHLc zCJ}sDI*pQ(t>{J z0`#4!=6f|F1+6j54_Zvg+3UO@(zXcqI9xi(#^(XuuXcvkZV9~u{>)mwzv1*fw)~+j zpAz~>Xb4vVrQ>8SZF8LIQ}nEOp(Pze;Yy=?Y16kfi(K9A3DrXymBpa8|Kt_6t%-{d z_j}%yAsXWSrPIn3O@*5v0D*{!U5hY2Lrd-Ka5cgQ#ztWeoqsZm-^Q=gLB49G`kEj? zDj;aaa_7=K06w#W)0JwR7rc|OQuz``IYo;f)CERKf@cAa7b-Bs*hI{qHaa;^sE=&z-$amur_AKW?ZH zsbUzwnFNneZ`$;9VntJoShWt~!-G4>=fq3jL=U!)p=sDswoRW3L+SL*7%DP==6rbp zg$%h&r2ABckFz!|=A%I8;_y?`6dgtGa}! z{5NUxPvn0~w2ej1lNEgvaGDq3E*7eiekWYRjvd)eUcWhuU3R*f8Dfu!ae znd;@zbD`iwNdFQSW04Acbe^A#|FgU+VX002Z3$LfLll#0UIqTI@|lgnpBbPt+EP~k z?VuPb8WIr$%l*XAq|o-g281`dwpoc)ZuI^f(4T?5#0K&Lwkh4I=aDjOqHoVfKB_6S zaGYwf1$rqSl{&@%`N8qweg@4T;wv?eY01P^)&u=C=)gCH$mD>`f#I=t>6Edq&%)qZ znqAC@YPf90UCm!8h#V=M=Db+W2hKodSXNP2w3&H-o^+N#9;#okxqYqA<7>Ay=GJgnNQ*)PJZl=8uT4JQP>8Q!mRE5&Q%+RoZ6=WAn@3??4mUJjao~M%80(f%q_t>v3~*jwFi`L`QuezU zRH5%Dh%&n^5Y=FR-(a>uS7CDIe?vbdlie@rBw?H1Tc7uajC<&*wSwK#^f)v5h7&h{ z^m@twG70yHLBPKBHC`Od^C}}w5A4H69k#-#LhfL1=1CRsctpqtDOkqR@8IdQeP83$ z&65`YHmN!MtbyTuI5>APnEl!a`)zjQV!_uBpxHfM-*grp#=*>E$Z$}a?bDY#(Sd&ocwFx?sqKkw>QZiuq0+>Wog$P2BM36s}9J zF&Otz{=`FB9G^mR$L;l^pfRq!*-Qf};^ex8A0%gSr1;bq`!npWg?`7iA0wUW_=JF2 zmR_FdFeS=Nh^))R%X6ESIj?ehbhhZYVOXE9NHuNLeoM)xv`4})uIOm+!LR~`gRZz) zk0=bCF&Ni{2ilmQv-Cg?DKXlL78fGtP$5?0Ib+#Q-ys=9#$zp%*0|mx$yVZ#i|^S| zO*=vB61h2V`*VjXoH@jf=8LurwEVMGP9+hrMpGl7=uJ`I~1Dy-nIGV>dS|UL?86Wf{-2ils zA242uaoXpVLTY#@XL9(ar5Ute(K)c12I%|scE?RUpS<5Pecfh!t#2h<7KOb!6N>s-laDaYO-8bh; zVK0s&mvWAsk#bf%v{M)+b(A6k>NG{f4lPiA`x%*A)>V=#4#R#Qn{>b zZMujmX9uq>jIX@#ICm@nIuFU554}!Rt3IO}yT>ba9gJ=T%)Tm}6Y|Sdp81fpoZ)sj zmCz4=dJiLJW8`{-OR6AF+<}zwEkB^GkEpA5$<}RjFz7XE->QUaT%qekkZv9>Z@n(_ zeZ=G8qbm*Msn3Gw_@4QkkQTys7XN^kkn6s+%cKT2y1JrRR9 zushnF6F00r=QgI$YTI+!t{*Z_rN$UdDKUmq%LOQv6=yWFVz0>2LMv; z3zoE8y;b$ZbZ)afETLZ0V3gOZQAMeRlJI1?7FZ{(&rsJsD}*rXAd zH)FfE+BU<~A0Vu4!uUu*+xxSv3DB&h3N^!Qc8^-ujN_-Qi+7xx_$38{_-=W%$!H>B zt1x@%aPGwCo3D5aqfRiE%`4S^i9Fm}a3E}oTC4K>f6 zswIv37KpA_pngwvIFQ)6`Qr!j`j%^B@)r-4qiAH3c4~pqd<)a72WGZKI>Ce z5H6??%|M#29H_IN;Bkc?!e=cuySipiy_Uv@tE66F{K9h7u5t0{6DeayeIryf{{$!?P~pPo0!kl;uk{XHpusV5r_=#B+bh>piIo+XZYrNKxB z!Jnyf(=aLHR@IU}iT&~L^@`#nQ||49=t=n?-Kus05%<^{qr>bsBJ-X|MYFyy z>Pq0dIt$M9AW{WJ9MoQ~VFl|BmDwY&mI2}dW=ihz3K=&J-bQfQagWGy46d9DVOWrg z*>ibK9}^vBA*3#D1P%dCV5Gv9-@^#<`K}Oc zqYSRGMQDyhtT2w$YOjvxfE_56?>QOIp1o_I3!ls{0rNyPE%F~7;Qma$K?tI+grR^OdOYw3#3yzuaH&-#)>}9*Xl|32Q zO@&aGq*NxZ6gE&ORuY)C6@-L-TX-_lF`iFg?UO9Ub(F{6#X7WQ_Rk07IhLITy=T>k zS|5CL9p)Y>VqGTxs?%PJK*5s7DAc9@+PJxshBGp%4vk?$_4up$`rkhbFGgxJ zrq$}%*5olp;4DqG%xF;^$U~Nz3KreQLg>s)iJM>L+0l~UB~f16oDsYTcW34iVePS! zb(1aAv-FvpK?mcciU;<)YL|t7PJ91dyZzrVm&Qtloz>5)+l-7oNC7A7 zqX3}Rqx{_Poc)8t;C*iel=vSplYUg0Z^x`<=Zs4tW!T>iBUavQ#G_J|nJ=B|6_Vn>wv*rtG_oksrFPMlu%|nGbJZ!1M zNy)-q>upOeQan#-w+L6*>v$7~N434en0hR!zM|>P6*;t067fs%t8~1r)upP18(l+O zK;&*cD!PwHOYRiSx<0im@Hk-9M#nf_e|ThM#+Qpxp$YCAV0iD1?TM+at*+Xi z=YL<+x3~SBcZ*?0w$DRvpj{lLWwt5z#k*mA=EFdJIlGmyvH7o8=nytD*C@MDF@8Gw zAR|3G;TTcqmh3k#r@fnNhzyU^MC=10WD4qf0zQZBveX(u#|4OTEn1{`JW;xEO&k<; z(482MabNJ~3>G=$HWQ3F$Gk&IXsavpC!3v9u43RvKGsWk<0OcU9KK9$F?v(XWa?yk zLK2&C(&yeZgcm0Jvs{6|k_AVTkl|J-#d>aVR_FC%j!`pXGj2FJJ^y+fz&xioXkb!H zYSs)SMJUd)JP{?$7~&RNh%tR&Ji<1HMQYPyS-LIAT}!c#15fEob?J_jDB%V_yTsR> zh*yf{CTNFds-q>*$4*+0rd>=M_zMEvDA-1hQudy36XS5~Mo|zuPN_d8B}dEf?Rt{l zD2_M5ADeisk}1<32V^%Mi z-F#tYH(%2F+F7x9PIAd>JC?JPYtWLK*Q=a^DRie@4#CafLk~0g(X!q;d>m;)Q+2O@ zHQe?@sZh2m&H1?{QTQhV4`am@zj}FM7ZsJxZAKZ=lkRYj3>*c|Cb=qF{;o>Mtmy8M zB3k1Ny^_7Pn-?2K6%khJd5ZKFvYmvo>Q<0{fqk3$oUwBfh==j)&2xiuRMSI5id8CUg+U z=gJT(=Ly8=nBwI(Wh3TNx_C{-MyDOF$R3CsUD&P^k(P$<<}(?0I*TQr>P1`XwC=ue z1)!8piB+e%q|Z;K;jREG{aw+&)%Uk&2F&{cD{g8VgRK)&HEBW!&mpU@x!Z)t`mEGB zUz2Vb=DB`y-MGwD8A6gZ8GPFqB-}q%3R!@;2Mz zJn)x!RMuX+3)*Jm1ygR09JhY$b8@Y4 zISm%!!YuYXN20*8bsH^NO!UTsQv0G=;O@ia5eg zUpSSoi#aN9yA9wxMU5(}-L5<2Zdh-2%KuI$`-=XUUSXm^6Wb(+*xb}onC45x8dBZu z?8qYF%o*c2P61Z0W1s!B-F^|eed~(TGBa{aAT#>=BqKxU|ComEzffLCO2d2W!3)9( z%FEXy;A|MgD9@FJ?M8G~jF8HHFroLg@U#fmra4y)zmTi|ca8wIZEryAfMbzN@}myv zZ-F11sFU7hr&IE_3KYR!9qaOYeigl6QIO0`2$`LJ`%U`ym2@k320x=?|8?YQ{(1e4 zFQV87)~`^n;;%dmA69{33HJzw59i?mY4EL>lKzn<9 z0L~@1-C%ekwxSCHYqJ*+#^I9sMiO&ju-VL!D9;lc|IqgP+<-)Ig=UEhxA8Ezgi6b` zD2*$%*P{2RJ<z)}#4nutCQ(LxCgw*8IazHDv9VoGoq;Ra8m^JSiWqgC zzkWR*jV>TE%LT1YAP7Z<00<<`za;7T`P=pL=T8gXVmAMWYmWcLCjQ6XPb}^}k;i!T zZ)2W{t^lLHXn(;Mj$D)%(K1e-BLygc7!=SH>+uJ*e9 z<-=jfqUeDfy2low46D+WlbJy|_?y9Zy_SJ2EjNFbP}JkXd59Iy?o4#x4=S6{C?}qP$d@sS-;!2keO;(I1g6 zrnersNhTjr1n8=@du^y~YHGK|7B4;3g;XxCo2b<%TQgbbJZXF{4X4!td&@cYdo+nB z<#Wh)mWP_dlsMaU&;0hU16Z<-KMh&q0D}UZp1=QzeZj2hLlO3Vx!Vzt5w8!GElmUA z5fSBc`++XTzZJVY)p-}Obzmw^8t<|sN-ntcB!i%9dr^OTAbE{UB3_&`x>YKF{TcLI zdkkAR+35DF*X9b`8gZNFKF@ZFBo=_RVROYb+63~62-v_vxQUCZijuA?upTpLozMfB z1MWP73wS^{B`jbO^|-NfRwF5tqKPoCAwN=sB-9_MZ8Wn)dTZ!N^#b=ackB!{Pu~Ql z9LH{Afa5ox@_ikvQ3L)WabcXT_et3pOANvKdhvmgNh`<4(yP-%THD9YDvi}ujP?1g z*?mON14yJ$mYXCLUN~&S@y)N8HurToaS^m`xVcCe7fWKB;<mP29lkqFI^Pm~n%cZVy@O ziK;{P5i8uM|MfG7T(Medt)XAcg;U-3)0?) zj~Phcs!(x69i#hA%be=~V_5`kjxNs^^w9z6S~^9~&WyjFu1-{{C-+oB<~}d2bQrw( zNts0By>xg?lM^LdFpETii-QB#9bWq0vi8pZ+7JL|K0t+)P?FPg}DfQ&Y1#x_*JZxiFy5Y+et?~n??Bb~Q02LEYmF*V_q?Q6M@k6tSAz)0B62{3rUNEPl9b+gZe6qB=%QC!XF*)+dq|&zXCQo0|$+m~ey@>x{XLkoMUG7{iNhdLm+eu4JBn|ml zSfj3FeqYy8x0~MgqNJo;N>KI_u!~X{7-VyG`a@}>ybFuL=P#7PC8^T-zfgLcN=w|D z|Iclx{)Ix2oZ0Ucq`LE0vTIjwGgMV}_=Vy<&7g?vMhDrEgCXz7T1eESoyL|9;RRz2 zd$=MEnj?%abQJiLa9qpfssj*hWb9vE*t+7H1i|sn;9^FTltjYW7$b9wHO8c;w*k zebF)XrjajnC_oeCT_oa`Mf%XmXgLyetlK8&&ULcUT>CjLx&7dKl^bubd*4!$oY15Q zuEb-RMqQQ~z8_Dr#75$s8^-FS3o8z1CtQijE3H-1e%|toQcN+#m1!usP`Vg@+Gs;u zmYd#)cHv)@C=60(mA&H z9MB)43*TBE;{f}b#v$F)^BXPJ)Xak#;M@zo=x-n4_v-kdpCh%qkd8XvBj6!$DM`y{ zxFOWyE7~3rGb}<_GTH^jN0!$kiAA$i_m!Xj&)bIo(DwgE$^DNv1|?L`H}i4TX<_YEB@Uz{)@9i(kq>!Cly43 zgSK3yMtkSb_G6Np#7jN1(+pd^S zOSk6ca|cJKe-6!br&CyItSA3`Xw&dAt>Z0g|?FsMcr@ z$C7UbjAlOZvFJSEGhL<#8mt=0oqfw-$cxK3$%;xRYb(=D%3Zc!#>Rz%AN|D7n8cCi ztU#b(bkTIiaFJ-IF0d;5-4;npxv%wD}1wlYe;N~5cPXt{ludBUf|D^uBr8=1nn?bF&K zqe+p5Qv&d&lp!_aEkuIteQ49`Z5;mYg3LrYAzO(_kzc*JJV!spr@TUN4{MIr7EFqL zIXN85sbw-#799GPT})^%FLcEd-9Zq~7YyFdqn8hjCnA+6xxj^!QUNtuYxS0t-tjTx z#5^yBm{IFr4yUu26zOZJWIRs&T)vD0x3{u;At~sodPbH((l|^ppPo+H6%@D<`86g` zWMj6CV#f-GMO?E+PAh*x=&s%+R3|TYm_1&w`6T#beT#mZL-=kZhaYr~VqtnHS=h`a z*HaYzl`HAsCKm_#d6w8NzBy+Eu5fn+9XgMpKn# zYzZO39p_5n{f+v>`B{XIVj?jp-+t6^Zl2<5G+y~=T9;kB7g0Ty$qkeF;%I5fAn$&1 z9bA`1X3HUeTj)l}i?k3nD~r*5lM8V_3#t}TISxUEmBxCtL3g}52QTIz&E6LL*o2L5 zCo-6)2~M~d;%|IQ?R}l!p1o*triwTwCC3@WwGK)GhFAILZi&OTgGskfVz&;iHHP3t&H@`p#M^RMRoPz;Jr{%xebfP3Ns9n{ zKElofO#8~Pyk1OUXA|p}5r;PWUXCI`Rw=PI&}3USW?eDL#+X}Y+_Z#3Hr!7Hi*mve z)C}6P3j3L=kY`IYsm6F$=CBRN5{!;Aqr?Ld>m`N=QTnGBw>@Gq=O1LgiZD@nOx_VYCHbL1n6c5I6O8z7PQ}EZIMxcWJrp z?eMg=r*O-Fj_3;5nZx0#dc2~2VM~8S*mF*+BZe^1^}P~+`CaxqAc5KlIZ#3`vG?A# z|EGGM$s#945G=D+6_n0JNj9$*Y^-f9`bzqMvOk>$zmY(9atxg>^)pwi1-eDV96=h=kIxnuFP zz#Jdz>H|C{UBWsi?7rGxUeE4~KHXJyD-U45%iTy&Tcq!+bfikx9U-kCn{4IjdY(Wp z&3yP5O8%kT{)OF89IhQ%aR}M;bCAuZSAvC;Nc{wOr9KD2kd?Q!B2`9 z%mXoh?pUwy?smV$J@q!i8HAeSaeDht76?5W8fV}b=U*gz4hAu>w%e#7qGBqLN4%f> z&$Oi!WxC85OmzTBTHDq6l5KdM;sLD19lW2GnbWn$7;zK{A}V2Lr4G`ZLD8*{&ceWdG`bX34%flg8o7=!Zq$iq@C!5 zZUSPZrQyP?kmC80AzlAt+r$3lt&`3rhjq#hdNW1pkYVy%IkKq$ac^Ys`4uj^o+YIj zU2yoo7^@nLt9pnq>%qG#wpr~Cv@RHMMlAYDcJXG%IH(J)hR2t&6|j??IRpBZxZ6)7 zp9Pk2t^xJsycVBzS?TpZWz6QTkDs+#ay> z>IYTg!3or8z4}@NyBNd5@70thckVdKRw;eYV-g}w-n7#n-N`ERKdkQk7X|6J9o&xR zB}g@{Y+sG_0c+weQQpUq*E4VwP^VA>xi^63f~^Dv`0BK7#T(bx;E4>uH^l1B@zcgj z6824iBi++lY?m(@ejT z6OT@t=+m^5nN~+*&(BjGi{}n+@qs9BtH_lko+<~8XT(`}?s?pN%XfH^x`hQOhUROFgtU8>r1h6_ zxe&eK_(BE4kV=-?5h9IJv`6;UE+C;7E?UzSxJf2_s=&F>4c|H^`@rLwI>7ffKIpiP z#5;o}qD@$}Ka%t@U?whNH_F?cyhW+B^JRwsmHB9(;oB+$H%izqwc1&r$}{b4=krMT zNQx>dr?0{VRu0gkL2-%%-tNx|w%dureJeB1ekJ9#z|OJT;}jGTu{Bj9igCeT$s#5E zDkUuGPKtRoim5DmiV#R#?PBmZiTpo#{WonLEPgj7c~+!U|8Y0}|J`%^-+Pn)&xR9! z95&jYCV<~v%fr?G*b7IScMmMmMAP$k^s$X7MHQ5{5Y7veyEhWzfT{Lfy= zKRv8SKJM?GKmX_v`nRS(UB7?S?<4=IL9@1+W?Og}?Ir1#lJ#hYGE(2_D3$w+Vx$cd z$$SKTYtn36x~ke2t$)|?1E#}H(^}MSU`Z)=RCD-x#L7T0YPcDbh3`ZB69sceg+)h6?zSZ(VMoE$|?;4NRlKGp(p!u z;+MCrB`#C%G6HfaGHcpR&cmb5QA{0o^PM8`9L@&)JQZ}UOm(4lgtcCG?LH~ouF!mJ|NDCW<0AR9 zWy}BGwf!%*;`w#7Tr(%NjEE1>XrK$qp=ne4caKo>A6}>9UwBNdwAZoJ(5kHL4ki1BsXx^$OL>hkW zY~~24+EL4-b#|+q%eY z|NjgZ_-6oY5*0!~5GlFnN9Rf3PN{|+*rl){N{t1nLDUdIQ3qs|6HNOoz z!{kG)(kS!e*Lan`B{qkv<=XjOuL6E`@w%lYS6X+stmLaD%*Byg4iRwaeFRZ)gPuVi zbU>vF$fPu|dEIgO?vj2PPD zep|c~5cJZrb^hDIxzNBjz^rm(GJu&G{k=~7Gh{><2$28cLW*A4@NrMJoOCzS*qjZc zi+kpMLT==N>+%AtW6|Of##z3+6LBh-zIC8}EaYlj@Mpbz!czu1%dBfmy=Bh3 zYL1SXtJn(H=Rx-K==^Jj7$P306e182h#lv0Ym7>7dueutySm|5$70p2hXk1?C%71j zl$m$e)%=h#)epr67VC;&hwSr8ca$(SOb{XTW+XBkZk2%3mE2sS_rTNu-AiTp!-PRQ z7{yDop-Ww*V%ck`y!e&bLkD?jzUkG2#*}as++nLD#L~&Fw-)#%O-?B}2&2lg62EMM5bMO4$4Hd1xf1 zM>0L$mew)C&3=>XQ>^v^gC|C7vPfiha&=t!QQdJ&(#>=JrSNb!e6w(@7+K`~J0|us zp4%B;A2n_jlIZ2UTNEGo`K-9N%ID)Q46{i1Yr9KDnDQiX!D^Q{L#aGaR{_g6-5T$- z?~5~dC{F#OM4J7u)oU*$O27IkOM+%}DS(1jGC*evpd-P^8lW$}mleXX7sw}B(pBS0 zrLzWBt_rQ0;iI@vABa{bK~|#B8q~m`pMxth@6`OvkFOggZ z-j?bxG>VGx?J8mBO4Vmgjn~LLobW(RU*5AKL3CyI zGpGi(pOrion5|+qf{;}IC9Fj!j+W}eK1IkLQ}^)ud3>LbYHsvgP({H*A<{y6Arb6? zTgq(4++`1>bD(6s0-6DYjuXw696?9^#aBLauh%cECLn1<)}3_sp|Cmm)Q7!_)Gng6 zdT=6ALwpB@{C#Qud(ewqqrW>z{~MPSvW??!U{^N@kp_bmfb(~eXN~y8JI*Z6t}BCx+xXS7pZ-l2`?}k+ zG3htRap^)VE!N0!;2g(3|4(R_9vV`XrK5mstz%oAn=po5xyyk3pPs)M1C`(p!T~Sq z0;RrNzr?zw5%)8jS=zn!zC1qJ53R8l{9z*2C)5D<-+4>A|Nm5X)=_P>>w>4H6lie> zl;T6_ddeE*cI{9Smk?Xe%SFB3I+xUKPt52tG#RB%u zpzaXdeJ$*X9^T8)Y<5X|@%lui6|~5}CR46IkS2~koeo_@pHdj!%pW`soLqm4dZ5{K z+uQO{a!j9}nrdtnipVF_&0LJ+{62Ko%#VFVc;c1Yhj_vuk1yx+t9VPVP42wYj<|EHj` zF@t{zc7JD3{!bhxM3BzmmPNt)VN^SHl>4>3fY6FE+oDGUt;--9#{#k`4whd|gwpcOLJKM(Nuo-VNE{yZEjA4&V`U?_4 zqH_PZcdkdSpuBU)G3%*Xi$kksxsKe8McQ!b6%PiJesMCH;E;+S)CcVyBZii51tu6N&{yXwSS(XZGZ~WcM%~g_oF+;aXo-Sv`FnS(aiXR;9su>k)5J z^7CHZu~BcMZu{_f65g)2sL2>Ui^%SvL~q>OHx8pa*sekbvu({vs0yjI^xu=<;`G~U zPI|`sXk2Hy#Nhbq zkTCyYeGP8VeTQoXtDm7#V#@uH* zu=@-s8rsb)b?xx244Rq?=X8@)0AoPTd)s#z8}e~a@%m8Mu`YL|w!#^xD?z2F9+k!g z&RK;;y3)qC(*(*)v@PFo5yTv+=fiQ8-wMSb zkHmLG$7;ZGS=EP+(c~iE`|O~Po7GcuMxVVbYn#aZ^iikqML7B!gcvq24>I;;dFqi! z4|9NY;hN?UoXC|HC0(5d-fJlo;Ean#^2v0uow&o_bRfwp&j$rDL%ee?hOk2q<+LZb z$t|WX7I@t*>UD=1PI7)&lUOHBY2;oID6JrlVcTlwKuMh0|bJ$i%geZYf1@_%Fnbp_HW_U{aOy z{0s1mBW!3e@UBq-;m)KZ>)O<}$TED>3*+4p-2h5oUHSs5CzuPtBkDygtIquxHM_js z1#mmw6X6YW)&UNhxS2XiuA$Gn+40HQhN;Lghv_iGxr0N9kb_&o?m#1a*_d9$bGbg2 zy@!60J4z-P&sVMZip7VyO=Em~Zdu!T^%d_HNlBqjV*p_rhNH=f7Ogvdn$^UH&k*>m zwGZ0FLiK_Y;{OPXKp4iGV=fm z&gC+uJ^jo!e`B>>>SuyU+y2runCHP+ys-ZhqV4V_*O^i2Vdr5DT_e>tG2(Y>xD4>g zDkzw1p-R$TA$KgGpF3}nXH;!q(I{z7pzEVyI=9kBquguq>xWWDOB*u!9cL=@$GZ=l z8AdIe#Ky2T#Bfbt`Q^=4Y9v<)PH`5=PvN``)ghtedCd)5FcF?;Satoh*#i3b6q2Yg zlvrA);1V?IM^``7FnF#EEwR=@r5j6NEew5XU$Qh|gPbjg}t>`EsU+ToV5 zMR1t()~PM8F1Zx8L>HD?Tiy*jq=YHDE8n-l3Kccwb+4yJ$cr;0NVP0%#i`kTg|X{tbqTIQ)cO6G))@Z2!|Kq5@jW!vv~ zHo-G=pDsOHLm1jnSYH)ZUs?BKyWnNTCwmgflZPXZY)DcC<5Tiu*Wm>rDdJg|F4<&b z8Sj}7)6W=wY^D>v!8gTC(lLmr;8ko03z@)&mN4W2b7V|UJVq0)N&0mPY+C&y6R1}j zjp&HY9tf9sMASXhX9bo-%eBC}Au=MpvSOEoTBCB4 z-a#|lSE}gyd1}rOQLNX)pen+)KEWy~#cMFjw{^vM@DqjN4gISz<5(y4cka^l6OZ_T zoTgC;#Lpe0B)`34b0*U!*Uta=Q4&Pm!RXJ-dt#)yFlp-(a=}xQGG|X-29**Fi#y_BlWCyzD(yqtx=uU8lRWGp>lR}WgYVuNuz)hrcAIt* zh`&5BM`FtNwU&y69z32DMH+wElqNJ2>#ZW6AB_k5`G?4$M`&pmbmP^((NO+rWB;tplkdI|Er6HI`5xl6XOb>muZxtqaNNg3O*#>4k7^oz07 zo@jObmjvoZSYLXbvVN`OEy|6nN_|%7b7`2p@DuWQ-ZlrWbO;XPVc zq%)vis-<-E+Eo9TiV<5=yiQm2`i>}$r8%_G36|&lnbekqfDh2%pgr2w=3Q*ekJT-G z$bHUkj>}Z+f-XJ?GPIOX0}$Z9Am{jvJ!tx8)EDB&rZfD_W+?odjqF9mzyD=k+rAyD zn}iv!XO-Cnvz+NEjWer65SzAWbLv5faNeA_^vDx==cLd9=_9jcQ5677a86KjHnv{! z#*oPxW75)nU$pJ<=h~N=PL$yX;Yi_l>eYp!^rLddOJXl5Wu}@;qOMGKc2B1tjawg+s3$K#LiWKnat4Rlk}QR@^1Y8TB| z*R$W;_Q%4<`edriC6j8tTM0wY2DO18RfTn@ES~=1WghhJ)HJI4o+;!%7n29^>1okPFl(JmN#adfhDP3`87)TG;djrquN=GNdAoN_weh$bYz*Q%?s;|wZY<15 ze&WpGlCYE!ej$CXoZ?Rx#K@1N0DRV~p!31^hlsuIbuK^ATbFjllEE}U=%uM~^|7vg zsh}snTJQPEbBP0JvbH(eba)fFh@3hAM7V+gj*&M{lA@G3(J~N{@H{`lIIPZ=v?e7lt>T6ss73iG*;u4-ZmqGO7r2G6fx(!B>Exe)T3CIIb{rWfBdY>`Ptao*WP$O-lOH}*|?!dN>i^_NHIR^zAI zwa}dwor_tD`;O1IN^%o21(ZP35} zg62y)#DcPRl#iS;6|a7L9xBKV?Zg(q0hNS+UeR zo_xT3{WZp?k`-bbxm=~@Y>2C4|7OsQUCb{kGB#Az%r+HULXI%ERYwV#VZVw#3O_0h z4FV=OlAr|O#E!dCupcN4&G4pSRSaxQWQ$ z4-F~nm-?JsuAPmxQ1r<&!%6+wzdF4)E>2Gxcj4@iO--4 zrfo;BrF_V;vK3%`NKj9{06``zwGUmu96JSb1#m zFZx?@)c;AdN+tCqt=-)ijlrZ7osj;?Ytmn7X|n@^``)FR{bW+aDN}fusV=&1tKP5J zjPyqaIU+V=;5c>vnTv;);@w-P)%nNv8&^cvu3-qlvy;Z|;(1`~4@{qWL`fOs+pzB* zdebkjnzuMIR^{vTE;;sD*z4uQ*^R{x6;%gO4fi50jo$DM1obZbVksJ0tKFqwR`j^ zfO2U+RJ;Eccg~@D0mXnrCYVlXt8uoj&w*Mq3I*lYvfrTOfFqHdKw%@ z^Xb}`w&C>i=cUFw%f$6Rv&^2jHytH_WOwqYd6|jPSaw&#Iuz4RyGu^axy?fq^nBoV z2!;zITdu78X2cX4<`>yCg(?RUG^06pQK@KYpZ4xGaZR08KkY}!mCPASn68Ehti6Rz ztiyB0b4axmaXrgIx${FKJnjZ~XAO(38k#iR)WcNw}0BVUj5(kLPpt zRF0|54f+jPVb|_$Np3wAw-6Z>)H+UnLsEXaRVM$Kyxu~s;}tD9ySj&0i0er(ZNLc6 ze!}Ij1a;I;?z1>tU{He5bJ`~R{GMa_zV-Q5GjgI>DQnj}nH4Sy$98n)_pf>Tw2|NH zS_6_r%sGEH08M^+Geu{sybdw^th4NCoZv3kd4#TyK zk8NA$fNzhdM~I;>kfj-tcnMjwMjF}Zr4IPSd^1TS`te0-t6O6?zhg+|EoHijt{RwI zN7O@%->SBP&f_gDY_{XqC&yO7d>LR>K@paUY%k+J`r%c_BHL6iHY{eT-q_!y{n#tARAc`drzl`&=W+=K!@v}?g zzI2`N`w1J~4NXh6Jb&Hs`9uz_jC_1&Mfqei-iSQvOq>;3B?M_w34EzMcLuKh#dvd$ zXeDrYkkT8h_;Y3^1)zt}ZvO)o@y|qPUh;yquX1vc?DGJ^MX%4z#XfJY{Xx9d?dg>P zm7X=%o_B7?dkgLSWf1ohIb@3j^5t|tj>&;^vKS?cwSq<;q*o19+NE24jF`pJW_M`q zs|#X9!K-ayd@Fj}22L|qlAd*%8Q&L)33$9W-3$`p+!y@{&tzZOho86$^D zL(v#YSNIdJBUm(MGXr7{nXC+!@(x{g4Vs}dN6a}<8cZfi=eSk^TeyfT$NUdXmLaRVvrUEQXMwQG$9i+kgfk5GT~e=p*Vx5*go}Y zg|4~BwxI)@Dxv+nCLva*!BM@sA{F->M(8QAVwLoQnPFesKiddh4cx#O%%MMW4Dn zL`K`@b^K&^ByUUuD5)TUvUuN}``c)cEYoz_kqXNe3LH9p9`Huh<=fu zr40J|%dksDs=gy#u4JZDzoGqpyj{4ANZ0tdsAiS8P~Rg(!QQosN2LCY{gGZpr^)s`_&ItB_#^b zbcS&fhmQN66-D5E0X6v{#rFVO=R!Gx7FGfA5*vL%o0q8=`$4SDcyCj&B)y63zB-T= zSg1u4mpat7mw(|{b+p;Tx{2IA>{jx4mQz@~L_FuVlTv&myb!9+YTIm_ye5Y(Z2%+2 z^&zw~(Z~{WQpwrPT*O4266&++H%F5l;lCDGW;lYtBO2w-wgz!26_M{3#Qt_lgiG3D z6o2S{Ds55Wc4!w={W7qZMyJ&9wff^*$3~J)LzBHj@+A$4gVhzE_H1;wb0MF$?1Na( z*85ZDd;a2kk%{+E=(*h5qwiLQ?uvCWOtyFyP6IDnwiC4_cjYFxR;&t+?lJyp71;O! zr;Yw5JklnpJdVQE2NLc$KO?p9Jp30}6H&s&{y!utAODMq6{`z{WObSEz&~zOOli5& zH?gzIs2KANEESJNw^R?|Q_#yjm|z^|FIkjo!*4TC8bn3O!BdGPKrP2@f^#xi5CsL5UvR#y8D`?}=^74^_#emfK!??FlZ4XpGNFS*9+}$qM%}(;tFFir8 zGgen<$ez1H;nf_J0R+l&HjI14UkTTvFbM@o18J5QLYBADLbv`kjf;F@SF^|MQ1@Iu z*~dmKB1fOV8**e2TmriWLT+}BUv>Ru=V5|Z=hAL!?6<`pOUAv08Trhvt?mUDQyz20 zsCIGlt(M~0IxOTMtB+Q@5H%DD!&L7C`lK1|HWgbQ=c!VJ5t3%IQuME=OZN-zkq-@Q)xPsdx#@MKao0+$E9RS3q<*lQxy&YcI@w6|r9utO zOhMLn-We_3Sr1kDj+*l768^Oxo|A#wV@eKneOqW!-F#50 z_~j*HpQ|pnpt1GM$xY?w-_^VUb>ErJktw&L7DGS=*&Ie6(Iuo&)HREtkm1g&t~D&# zg_O=k-B0})jn1fFD93y&O{Y6ga$z47 z&<0QlZXi~;5{4_K24UfUAh}M~Q%`q;{nJ^t)i0zHHK#FYdxjIAr%IBvL1U$27;qPm#OV#D$Jl?nEV^@-E zrDX%LIAo?R0t$6v^Jri4uBoBWO8E`s6fCI_wQ`#juiC`TgvnF>VAsTSQaIK^`LwnI<4F zgmYMO*^MBLN);7D4vLp|;m^hw;4pV1y!gqU_l?d}vv5V|cXZh8n;svZOkL;E>#s{! z6r3YHZwNBfj;Xom=;**>FP(gWJW}+r>#TfDHDxJ{Og!#nzZQ*>x^1TDm&5zC?XNgN zb7A~pA1#FViQV@Pj9fU&9lsMqv;e&xoJTH)ZSA$$b==cpDMddtlu<}+H#k&vHSO~M z%*AN}Wo6>$d0ULHbgzY^Gb9Z=zo)Iac)ni!>h*ei6R~yi1Z}r*ojGN`-zRdrq;Vf_ zH&!aGqA%rD?seD4~7s{*~w#4(fLl3#Jrbh8#Y|bFNyk z+EAfWQ(Ly0H=K;sxAN=91P;eR=JXznTzVTtmVYWb1k~{0>RZTreS`~5EZFA}_Jcx* zpg<_}Vw8>VTyE7@;B@I@a*=Z<1Gr^b-3CN|Q|rJ|HRryQjv^LREU_))JJ7Rlp$JUH zyBPj;dA_uLNnTmH-^vN()vWiNy}F*}uz6AyNS9j1){U=Yf1Twb{uW!s{z(;4SOyVF zQD%+lZ%pTZC`=-le&Dlz&0VTcXtTm_s{vr?G$gNR;igpSJ(@K{=+@?zbQw3Y{Jny~4oiH51VaJ40hrPOLuWZCHNf~+qUlKa>Yz+_XkY%03J zT$>sGj7pYz%SKtpSOtb<`l!@;yM{d01dEa3C+Ll zcFP8`R$|YRCAVTTha(vrkJkDpGrXczg>*DS1qH`A{YGU!q^YL?`qzY^8x6>VxnO0ec{1B zrx@kP(cUic6JY<1lDoev7zSVW_f4zB6s)(#n5GqF-A*VG!6!Y(gp95J` zse4TbER1`sbj(A0in{!baTWhI9|p@K>Y@|k{7aTfABMmWI}}BV5_b@n%5!GT^NhcV ziSNud4WXXEKae%INC;?%1b20d%tU#)XE+YP^pE0~mjmQdx4H8iG{YsY*-#$ewvA5olw1I5DwA__)|d^mL1nzuY--ZU-*E$J`1 z2KQ4#b2vr^%%)5-!J2tUFWhbuAfVk$e4y4poFf0>xA;E7yo)w(58g|pyZJekT72j$ z&*#IX^(A5KKKAdeds%AV?^7DKp%~uxW(nQqg(+jnebQg)`bhe%1@50Ym>vYr+2{H2 z$eyQJsSgi-0ZHH^%3bcLsRLr3HTJ|#n5GJkT~TyrBh~`jw0;rtB_P%YjUV_Ppg-AD zg!a_kGDB3nfnYgAr}cO3huMwsgXY?l-IU{o2oavHFrjY=3OarhjI^nlwHcCMoco-8Ug|m6Qlw_C= zF48gnzARtm%eL%60rKt>Z03W6B5i%!Z&lr9KWE8o*JC~k(HFV&0ws0)-35W@+-HU*;qyrF22Jj)IiFUTKAe7vPclYQq)B|^U@{y=&_ zbXz}+?KFI{bnO*1{w8SX$3OTz!Mk+8;<68Q^Pc)7vBA-^NZmHDo$-FaHDS)nT%42>BT*vuv%6WHDeOjm)|D zG}{;aSyxFgJl?ozQt;dv0E?3v*p04K`YHSS9(K7rZ(av*GRJv5Dy-kzum;ilGCrvQ z*2TN5e|WRQ@it^X0cyO&@HA6KGtaw1pFQv)at({@^gi!Ke@jL$q^_c|C%{{S+N@{P2b&4B!zpNQn5uncjUhmtj9!7{pvDe17G?BOOF$T>0C$&+v z-PB3#deGz%$t)l%qT21o0)3Q!V<%q#eHq_?_Y5c&G8<7Ig35$kX-7@I5=kZynJ;(r z#s#s=)16_y9*ULgKJ1gp-JN^nBXN3KZ?iWb4i+|oEqxsVnIq;5Cgp*bk0HZJ7P#S8fUP@GZOTRvx1N@oMZzb$lp zHXQ))Uv+Ah!C>5*9xJ(w5zmE6KAvA zMmrle4^>Z@sa0jYYk$sa6>F=?TA|i{^0$*=PVn2cDqPB)gUT@0ZCsbtwMJyIud|4h ztdNwi%rBWMz{>Jb>WK2SqO`isbGH=E&D$~OMmURd7;G3;RmHGikV!9F(}na^Ca+^d zPm|eiEyazjwq3(b>?hiOYk%}w$9idkMJUSE}E6X#$AB$UZ1;nAmuAFrzS2jg8HPY_xzqr@izLB=w-== zg5t;ktK*1*}*7gmlfR7F(KppT* zg5W|iHMRG7xkOKfdFi2s&uC*`+Kfh@`%;p|2{gsRY;;|WmFp+LyM5`1cCa^;y0XHa z_g`#nzs;UXz99IlkLTwjg&9VZ_rULP#g>Y&Zp`Z@_?Vb`6%u*Lk}N1J95$oL!|ZBl_3u`Dwj4 zEYPU=FFY`(%xhRPK`+Dy!yjL)`9Jjk77cE9C3;!^%GCXp;}|fbkqRDg3~lIYs$A3B zt`O^(Z}1ChKUSQ_v17HAk2nDWbCIK@t$xIL<9vbo-m3mv&DuYR@%~S}wLEQnr1Q-m z$PgIQMM1@NVHwMx72HIx5Q8yqYOuM`vTcmDDfF=cc*r=M2GmN384)3M1$$uMDiZ}l z3!?1+Mm%XDnxA76V?y=)Z!k3Ub2eXch#tXDm<&=Ec8TixuSvs{0H z=0R|ea!~q;W21RHGMc}8TcPP$Rxm9vA}b=L7xmg27X?QG7gq=u|NYW$|JZM_e3U8j HAM^hWYH21l literal 0 HcmV?d00001 diff --git a/docs/design/core/metrics/images/MetricPublisher.jpg b/docs/design/core/metrics/images/MetricPublisher.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2b605d1b5388f7ee778b830d1090bab3f630e3ac GIT binary patch literal 23225 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 z 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

+*n%{;HJX0&j5J7y20GJ$Y7GZJ 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 Date: Fri, 10 Jan 2020 16:02:32 -0800 Subject: [PATCH 5/5] Minor formatting fixes --- docs/design/core/metrics/Design.md | 183 +++++++++++++++--------- docs/design/core/metrics/MetricsList.md | 8 +- docs/design/core/metrics/README.md | 25 ++-- 3 files changed, 135 insertions(+), 81 deletions(-) diff --git a/docs/design/core/metrics/Design.md b/docs/design/core/metrics/Design.md index 91ff95a43294..6220f121d8c6 100644 --- a/docs/design/core/metrics/Design.md +++ b/docs/design/core/metrics/Design.md @@ -6,25 +6,33 @@ ### MetricRegistry -* A MetricRegistry represent an interface to store the collected metric data. It can hold different types of Metrics described above +* A MetricRegistry represent an interface to store the collected metric data. It can hold different types of Metrics + described above * MetricRegistry is generic and not tied to specific category (ApiCall, HttpClient etc) of metrics. -* Each API has it own instance of the MetricRegistry. All metrics collected in the ApiCall lifecycle are stored in that instance. -* A MetricRegistry can store other instances of same type. This can be used to store metrics for each Attempt in an Api Call. +* Each API call has it own instance of a MetricRegistry. All metrics collected in the ApiCall lifecycle are stored in + that instance. +* A MetricRegistry can store other instances of same type. This can be used to store metrics for each Attempt in an Api + Call. * [Interface prototype](prototype/MetricRegistry.java) ### MetricPublisher * A MetricPublisher represent an interface to publish the collected metrics to a external source. -* SDK provides implementations to publish metrics to services like [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/), [Client Side Monitoring](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/sdk-metrics.html) (also known as AWS SDK Metrics for Enterprise Support) -* Customers can implement the interface and register the custom implementation to publish metrics to a platform not supported in the SDK. -* MetricPublishers can have different behaviors in terms of list of metrics to publish, publishing frequency, configuration needed to publish etc. -* Metrics can be explicitly published to the platform by calling publish() method. This can be useful in scenarios when the application fails -and customer wants to flush metrics before exiting the application. +* SDK provides implementations to publish metrics to services like [Amazon + CloudWatch](https://aws.amazon.com/cloudwatch/), [Client Side + Monitoring](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/sdk-metrics.html) (also known as AWS SDK + Metrics for Enterprise Support) +* Customers can implement the interface and register the custom implementation to publish metrics to a platform not + supported in the SDK. +* MetricPublishers can have different behaviors in terms of list of metrics to publish, publishing frequency, + configuration needed to publish etc. +* Metrics can be explicitly published to the platform by calling publish() method. This can be useful in scenarios when + the application fails and customer wants to flush metrics before exiting the application. * [Interface prototype](prototype/MetricPublisher.java) ### Reporting -* Reporting is transferring the collected metrics to Publishers. +* Reporting is transferring the collected metrics to Publishers. * To report metrics to a publisher, call the registerMetrics(MetricRegistry) method on the MetricPublisher. * There is no requirement for Publisher to publish the reported metrics immediately after calling this method. @@ -35,19 +43,21 @@ Metrics feature is disabled by default. Metrics can be enabled at client level i ### Feature Flags (Metrics Provider) -* SDK exposes an [interface](prototype/MetricConfigurationProvider.java) to enable the metrics feature and specify options to configure the metrics behavior. +* SDK exposes an [interface](prototype/MetricConfigurationProvider.java) to enable the metrics feature and specify + options to configure the metrics behavior. * SDK provides an implementation of this interface based on system properties. -* Here are the system properties SDK supports: +* Here are the system properties SDK supports: - **aws.javasdk2x.metrics.enabled** - Metrics feature is enabled if this system property is set - **aws.javasdk2x.metrics.category** - Comma separated set of MetricCategory that are enabled for collection -* SDK calls the methods in this interface for each request ie, enabled() method is called for every request to determine if the metrics -feature is enabled or not (similarly for other configuration options). -* This helps customers to provide MetricConfigurationProvider implementations that uses external sources like DynamoDB to control metrics feature. -This is useful to enable/disable metrics feature and control metrics options at runtime without the need to make code changes or re-deploy the application. -* As the interface methods are called for each request, it is recommended for the implementations to run expensive tasks asynchronously in the background, -cache the results and periodically refresh the results. - -``` +* SDK calls the methods in this interface for each request ie, enabled() method is called for every request to determine + if the metrics feature is enabled or not (similarly for other configuration options). + - This allows customers to control metrics behavior in a more flexible manner; for example using an external database + like DynamoDB to dynamically control metrics collection. This is useful to enable/disable metrics feature and + control metrics options at runtime without the need to make code changes or re-deploy the application. +* As the interface methods are called for each request, it is recommended for the implementations to run expensive tasks + asynchronously in the background, cache the results and periodically refresh the results. + +```java ClientOverrideConfiguration config = ClientOverrideConfiguration .builder() // If this is not set, SDK uses the default chain with system property @@ -64,13 +74,15 @@ CodePipelineAsyncClient asyncClient = ### Metrics Provider Chain -* Customers might want to have different ways of enabling the metrics feature. For example: use SystemProperties by default. If not use implementation based on Amazon DynamoDB. -* To support multiple providers, SDK allows setting chain of providers (similar to the CredentialsProviderChain to resolve credentials). As provider has multiple -configuration options, a single provider is resolved at chain construction time and it is used throughout the lifecycle of the application to keep the behavior intuitive. -* If no custom chain is provided, SDK will use a default chain while looks for the System properties defined in above section. -SDK can add more providers in the default chain in the future without breaking customers. +* Customers might want to have different ways of enabling the metrics feature. For example: use SystemProperties by + default. If not use implementation based on Amazon DynamoDB. +* To support multiple providers, SDK allows setting chain of providers (similar to the CredentialsProviderChain to + resolve credentials). As provider has multiple configuration options, a single provider is resolved at chain + construction time and it is used throughout the lifecycle of the application to keep the behavior intuitive. +* If no custom chain is provided, SDK will use a default chain while looks for the System properties defined in above + section. SDK can add more providers in the default chain in the future without breaking customers. -``` +```java MetricConfigurationProvider chain = new MetricConfigurationProviderChain( new SystemSettingsMetricConfigurationProvider(), // example custom implementation (not provided by the SDK) @@ -80,7 +92,7 @@ MetricConfigurationProvider chain = new MetricConfigurationProviderChain( ... .build(), ); - + ClientOverrideConfiguration config = ClientOverrideConfiguration .builder() // If this is not set, SDK uses the default chain with system property @@ -97,13 +109,15 @@ CodePipelineAsyncClient asyncClient = ### Metric Publishers Configuration -* If metrics are enabled, SDK by default uses a single publisher that uploads metrics to CloudWatch using default credentials and region. -* Customers might want to use different configuration for the CloudWatch publisher or even use a different publisher to publish to a different source. -To provide this flexibility, SDK exposes an option to set [MetricPublisherConfiguration](prototype/MetricPublisherConfiguration.java) which can be -used to configure custom publishers. +* If metrics are enabled, SDK by default uses a single publisher that uploads metrics to CloudWatch using default + credentials and region. +* Customers might want to use different configuration for the CloudWatch publisher or even use a different publisher to + publish to a different source. To provide this flexibility, SDK exposes an option to set + [MetricPublisherConfiguration](prototype/MetricPublisherConfiguration.java) which can be used to configure custom + publishers. * SDK publishes the collected metrics to each of the configured publishers in the MetricPublisherConfiguration. -``` +```java ClientOverrideConfiguration config = ClientOverrideConfiguration .builder() .metricPublisherConfiguration(MetricPublisherConfiguration @@ -112,7 +126,7 @@ ClientOverrideConfiguration config = ClientOverrideConfiguration CloudWatchPublisher.builder() .credentialsProvider(...) .region(Region.AP_SOUTH_1) - .publishFrequency(5, TimeUnit.MINUTES) + .publishFrequency(5, TimeUnit.MINUTES) .build(), CsmPublisher.create()).bu .build()) @@ -132,7 +146,7 @@ New modules are created to support metrics feature. ### metrics-spi * Contains the metrics interfaces and default implementations that don't require other dependencies -* This is a sub module under `core` +* This is a sub module under `core` * `sdk-core` has a dependency on `metrics-spi`, so customers will automatically get a dependency on this module. ### metrics-publishers @@ -143,87 +157,120 @@ New modules are created to support metrics feature. ## Sequence Diagram -

Metrics Collection +
+ ![Metrics Collection](images/MetricCollection.jpg) -
+
+ MetricPublisher +
+ ![MetricPublisher fig.align="left"](images/MetricPublisher.jpg) -1. Client enables metrics feature through MetricConfigurationProvider and configure publishers through MetricPublisherConfiguration. -2. For each API call, a new MetricRegistry object is created and stored in the ExecutionAttributes. If metrics are not enabled, a NoOpMetricRegistry is used. -3. At each metric collection point, the metric is registered in the MetricRegistry object if its category is enabled in MetricConfigurationProvider. +
+ +1. Client enables metrics feature through MetricConfigurationProvider and configure publishers through + MetricPublisherConfiguration. +2. For each API call, a new MetricRegistry object is created and stored in the ExecutionAttributes. If metrics are not + enabled, a NoOpMetricRegistry is used. +3. At each metric collection point, the metric is registered in the MetricRegistry object if its category is enabled in + MetricConfigurationProvider. 4. The metrics that are collected once for a Api Call execution are stored in the METRIC_REGISTRY ExecutionAttribute. -5. The metrics that are collected per Api Call attempt are stored in new MetricRegistry instances which are part of the ApiCall MetricRegistry. -These MetricRegistry instance for the current attempt is also accessed through ATTEMPT_METRIC_REGISTRY ExecutionAttribute. -6. At end of API call, report the MetricRegistry object to MetricPublishers by calling registerMetrics(MetricRegistry) method. This is done in an ExecutionInterceptor. +5. The metrics that are collected per Api Call attempt are stored in new MetricRegistry instances which are part of the + ApiCall MetricRegistry. These MetricRegistry instance for the current attempt is also accessed through + ATTEMPT_METRIC_REGISTRY ExecutionAttribute. +6. At end of API call, report the MetricRegistry object to MetricPublishers by calling registerMetrics(MetricRegistry) + method. This is done in an ExecutionInterceptor. 7. Steps 2 to 6 are repeated for each API call -8. MetricPublisher calls publish() method to report metrics to external sources. The frequency of publish() method call is unique to Publisher implementation. +8. MetricPublisher calls publish() method to report metrics to external sources. The frequency of publish() method call + is unique to Publisher implementation. 9. Client has access to all registered publishers and it can call publish() method explicitly if desired. -
CloudWatch MetricPublisher +
+ ![CloudWatch MetricPublisher](images/CWMetricPublisher.jpg) +
+ ## Implementation Details Few important implementation details are discussed in this section. SDK modules can be organized as shown in this image. + +
+ ![Module Hierarchy](images/MetricsModulesHierarchy.png) +
+ * Core modules - Modules in the core directory while have access to ExecutionContext and ExecutionAttributes -* Downstream modules - Modules where execution occurs after core modules. For example, http-clients is downstream module as the request is transferred from core to http client for further execution. -* Upstream modules - Modules that live in layers above core. Examples are High Level libraries (HLL) or Applications that use SDK. Execution goes from Upstream modules to core modules. +* Downstream modules - Modules where execution occurs after core modules. For example, http-clients is downstream module + as the request is transferred from core to http client for further execution. +* Upstream modules - Modules that live in layers above core. Examples are High Level libraries (HLL) or Applications + that use SDK. Execution goes from Upstream modules to core modules. ### Core Modules -* SDK will use ExecutionAttributes to pass the MetricConfigurationProvider information through out the core module where core request-response metrics are collected. -* Instead of checking whether metrics is enabled at each metric collection point, SDK will use the instance of NoOpMetricRegistry (if metrics are disabled) and DefaultMetricRegistry (if metrics are enabled). -* The NoOpMetricRegistry class does not collect or store any metric data. Instead of creating a new NoOpMetricRegistry instance for each request, use the same instance for every request to avoid additional object creation. -* The DefaultMetricRegistry class will only collect metrics if they belong to the MetricCategory list provided in the MetricConfigurationProvider. To support this, DefaultMetricRegistry is decorated by -another class to filter metric categories that are not set in MetricConfigurationProvider. - +* SDK will use ExecutionAttributes to pass the MetricConfigurationProvider information through out the core module where + core request-response metrics are collected. +* Instead of checking whether metrics is enabled at each metric collection point, SDK will use the instance of + NoOpMetricRegistry (if metrics are disabled) and DefaultMetricRegistry (if metrics are enabled). +* The NoOpMetricRegistry class does not collect or store any metric data. Instead of creating a new NoOpMetricRegistry + instance for each request, use the same instance for every request to avoid additional object creation. +* The DefaultMetricRegistry class will only collect metrics if they belong to the MetricCategory list provided in the + MetricConfigurationProvider. To support this, DefaultMetricRegistry is decorated by another class to filter metric + categories that are not set in MetricConfigurationProvider. + ### Downstream Modules -* The MetricRegistry object and other required metric configuration details will be passed to the classes in downstream modules. +* The MetricRegistry object and other required metric configuration details will be passed to the classes in downstream + modules. * For example, HttpExecuteRequest for sync http client, AsyncExecuteRequest for async http client. * Downstream modules record the metric data directly into the given MetricRegistry object. -* As we use same MetricRegistry object for core and downstream modules, both metrics will be reported to the Publisher together. +* As we use same MetricRegistry object for core and downstream modules, both metrics will be reported to the Publisher + together. ### Upstream Modules -* As MetricRegistry object is created after the execution is passed from Upstream modules, these modules won't be able to modify/add to the core metrics. -* If upstream modules want to report additional metrics using the registered publishers, they would need to create MetricRegistry instances and explicitly call the methods on the Publishers. -* It would be useful to get the low-level API metrics in these modules, so SDK will expose APIs to get an immutable version of the -MetricRegistry object so that upstream classes can use that information in their metric calculation. +* As MetricRegistry object is created after the execution is passed from Upstream modules, these modules won't be able + to modify/add to the core metrics. +* If upstream modules want to report additional metrics using the registered publishers, they would need to create + MetricRegistry instances and explicitly call the methods on the Publishers. +* It would be useful to get the low-level API metrics in these modules, so SDK will expose APIs to get an immutable + version of the MetricRegistry object so that upstream classes can use that information in their metric calculation. ### Reporting -* Collected metrics are reported to the configured publishers at the end of each Api Call by calling `registerMetrics(MetricRegistry)` method on MetricPublisher. +* Collected metrics are reported to the configured publishers at the end of each Api Call by calling + `registerMetrics(MetricRegistry)` method on MetricPublisher. * The MetricRegistry argument in the registerMetrics method will have data on the entire Api Call including retries. * This reporting is done in `MetricsExecutionInterceptor` via `afterExecution()` and `onExecutionFailure()` methods. * `MetricsExecutionInterceptor` will always be the last configured ExecutionInterceptor in the interceptor chain ## Performance -One of the main tenet for metrics is “Enabling default metrics should have minimal impact on the application performance". The following design choices are made to ensure -enabling metrics does not effect performance significantly. -* When collecting metrics, a NoOpRegistry is used if metrics are disabled. All methods in this registry are no-op and return immediately. -This also has the additional benefit of avoid metricsEnabled check at each metric collection point. -* Metric publisher implementations can involve network calls and impact latency if done in blocking way. So all SDK publisher implementation -will process the metrics asynchronously and does not block the actual request. +One of the main tenet for metrics is “Enabling default metrics should have minimal impact on the application +performance". The following design choices are made to ensure enabling metrics does not effect performance +significantly. +* When collecting metrics, a NoOpRegistry is used if metrics are disabled. All methods in this registry are no-op and + return immediately. This also has the additional benefit of avoid metricsEnabled check at each metric collection + point. +* Metric publisher implementations can involve network calls and impact latency if done in blocking way. So all SDK + publisher implementation will process the metrics asynchronously and does not block the actual request. ## Testing -To ensure performance is not impacted due to metrics, tests should be written with various scenarios and a baseline for overhead should be created. -These tests should be run regularly to catch regressions. +To ensure performance is not impacted due to metrics, tests should be written with various scenarios and a baseline for +overhead should be created. These tests should be run regularly to catch regressions. ### Test Cases -SDK will be tested under load for each of these test cases using the load testing framework we already have. -Each of these test case results should be compared with metrics feature disabled & enabled, and then comparing the results. +SDK will be tested under load for each of these test cases using the load testing framework we already have. Each of +these test case results should be compared with metrics feature disabled & enabled, and then comparing the results. 1. Enable each metrics publisher (CloudWatch, CSM) individually. 2. Enable all metrics publishers. diff --git a/docs/design/core/metrics/MetricsList.md b/docs/design/core/metrics/MetricsList.md index a37cbfd4b09e..f93c912be42a 100644 --- a/docs/design/core/metrics/MetricsList.md +++ b/docs/design/core/metrics/MetricsList.md @@ -1,4 +1,5 @@ -Here is the detailed list of metrics that SDK can collect. Each metric belongs to a category. If a category is enabled, then all metrics belonging to that category will be collected by the SDK. +Here is the detailed list of metrics that SDK can collect. Each metric belongs to a category. If a category is enabled, +then all metrics belonging to that category will be collected by the SDK. ## Category @@ -6,7 +7,8 @@ Here is the detailed list of metrics that SDK can collect. Each metric belongs t 2) HttpClient - Additional information collected for http client. The metrics collected for each http client can vary 3) All - All metrics collected by the SDK comes under this category. This can be useful for debugging purposes. -Note: When metrics feature is enabled, only the `Default` category metrics are collected. Other categories should be explicitly enabled. +Note: When metrics feature is enabled, only the `Default` category metrics are collected. Other categories should be +explicitly enabled. ## Information collected at application level (Category: Default) @@ -125,4 +127,4 @@ For Http2 requests, ## References -1) [V1 Metrics Description](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/metrics/package-summary.html) \ No newline at end of file +1) [V1 Metrics Description](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/metrics/package-summary.html) diff --git a/docs/design/core/metrics/README.md b/docs/design/core/metrics/README.md index 04e839460ede..3f94783c8040 100644 --- a/docs/design/core/metrics/README.md +++ b/docs/design/core/metrics/README.md @@ -3,7 +3,8 @@ # Project Tenets (unless you know better ones) -1. Metrics can be used to provide insights about application behavior to enhance performance and debug operational issues. +1. Metrics can be used to provide insights about application behavior to enhance performance and debug operational + issues. 2. Enabling default metrics should have minimal impact on the application performance. 3. Customers can publish the collected metrics to their choice of platform. 4. Metrics are divided into different categories for granular control. @@ -13,14 +14,15 @@ # Project Introduction -This project adds a feature to the AWS SDK for Java that can collect and report client side SDK metrics in your application. -Metrics helps developers, ops engineers to detect and diagnose issues in their applications. -The metrics can also be used to gather insights into the application over time and tune the application for optimal performance. +This project adds a feature to the AWS SDK for Java that can collect and report client side SDK metrics in your +application. Metrics helps developers, ops engineers to detect and diagnose issues in their applications. The metrics +can also be used to gather insights into the application over time and tune the application for optimal performance. # Project Details -1. Metrics are disabled by default and should be enabled explicitly by customers. Enabling metrics will introduce small overhead. +1. Metrics are disabled by default and should be enabled explicitly by customers. Enabling metrics will introduce small + overhead. 2. Metrics can be enabled quickly during large scale events with need for code change or deployments. 3. Customers may publish metrics using their existing credentials. 4. Metrics are stored and accessed by AWS only with explicit permissions from the customer. @@ -33,14 +35,16 @@ Meters define the way a metric is measured. Here are the list of meters: **Counter :** Number of times a metric is reported. These kind of metrics can be incremented or decremented. For example: number of requests made since the start of application -**Timer :** Records the time between start of an event and end of an event. An example is the time taken (latency) to complete a request. +**Timer :** Records the time between start of an event and end of an event. An example is the time taken (latency) to +complete a request. **Gauge :** A value recorded at a point in time. An example is the number of connections in the client pool. -**Constant Gauge :** There are metrics that have a static value which doesn't change after it is set. Some examples are service name, API name, status code, request id. -To support this, a constant implementation of gauge is used +**Constant Gauge :** There are metrics that have a static value which doesn't change after it is set. Some examples are +service name, API name, status code, request id. To support this, a constant implementation of gauge is used -Reference: Some Meter names are taken from open source [spectator](http://netflix.github.io/spectator/en/latest/intro/counter/) project (Apache 2.0 license). +Reference: Some Meter names are taken from open source +[spectator](http://netflix.github.io/spectator/en/latest/intro/counter/) project (Apache 2.0 license). # Naming @@ -61,4 +65,5 @@ Customers can implement custom publishers to publish metrics to platforms not su ## Supported platforms 1) CloudWatch -2) CSM - Client Side Monitoring (also known as [AWS SDK Metrics for Enterprise Support](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/sdk-metrics.html)) \ No newline at end of file +2) CSM - Client Side Monitoring (also known as [AWS SDK Metrics for Enterprise +Support](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/sdk-metrics.html))