From eb0d5a065786cb415db33e75b69444959d01900f Mon Sep 17 00:00:00 2001 From: andrea bertagnolli Date: Mon, 30 Sep 2024 14:06:12 +0200 Subject: [PATCH] docs: deleted documentation that was moved to the website (#4515) --- docs/developer/README.md | 36 -- docs/developer/cloud_testing.md | 126 ------ docs/developer/command-queue.md | 79 ---- docs/developer/configuration.md | 45 -- .../contract-validity-check.md | 154 ------- .../policy.inforce.duration.json | 33 -- .../policy.inforce.fixed.json | 33 -- docs/developer/contracts.md | 4 - docs/developer/custom_validation.md | 74 --- .../data-plane-signaling-mapping.md | 100 ----- .../data-plane-signaling-token-handling.md | 201 --------- .../data-plane-signaling.md | 130 ------ .../data-plane-signaling_authorize.png | Bin 36753 -> 0 bytes .../data-plane-signaling_authorize.puml | 49 -- .../data-plane-signaling_create-token.png | Bin 37042 -> 0 bytes .../data-plane-signaling_create-token.puml | 49 -- docs/developer/default_provider_methods.md | 137 ------ .../diagrams/contract-negotiation-states.png | Bin 99622 -> 0 bytes .../diagrams/contract-negotiation-states.puml | 117 ----- docs/developer/diagrams/data-request.png | Bin 32341 -> 0 bytes docs/developer/diagrams/data-request.puml | 26 -- docs/developer/diagrams/service-discovery.png | Bin 26808 -> 0 bytes .../developer/diagrams/service-discovery.puml | 25 -- .../transfer-data-plane-consumer-pull.png | Bin 71985 -> 0 bytes .../transfer-data-plane-consumer-pull.puml | 84 ---- .../transfer-data-plane-provider-push.png | Bin 52021 -> 0 bytes .../transfer-data-plane-provider-push.puml | 79 ---- .../transfer-process-consumer-states.png | Bin 146860 -> 0 bytes .../transfer-process-consumer-states.puml | 134 ------ .../transfer-process-provider-states.png | Bin 150559 -> 0 bytes .../transfer-process-provider-states.puml | 129 ------ docs/developer/dpf_selector.md | 195 -------- docs/developer/events.md | 193 -------- docs/developer/identity-management.md | 11 - .../ids-dataspace-protocol/README.md | 49 -- .../contract-negotiation-architecture.md | 143 ------ .../ids-endpoints-services-architecture.md | 421 ------------------ .../json-ld-processing-architecture.md | 95 ---- .../ids-dataspace-protocol/management-api.md | 7 - .../transfer-process-architecture.md | 56 --- docs/developer/metrics.md | 46 -- docs/developer/openapi.md | 83 ---- docs/developer/performance-tuning.md | 47 -- docs/developer/policy-engine.md | 157 ------- docs/developer/policy-monitor.md | 28 -- docs/developer/sql-persistence.md | 41 -- docs/developer/sql_queries.md | 182 -------- docs/developer/state-machine.md | 107 ----- docs/developer/terminology.md | 34 -- docs/developer/transfer-process.md | 53 --- 50 files changed, 3792 deletions(-) delete mode 100644 docs/developer/README.md delete mode 100644 docs/developer/cloud_testing.md delete mode 100644 docs/developer/command-queue.md delete mode 100644 docs/developer/configuration.md delete mode 100644 docs/developer/contract-duration/contract-validity-check.md delete mode 100644 docs/developer/contract-duration/policy.inforce.duration.json delete mode 100644 docs/developer/contract-duration/policy.inforce.fixed.json delete mode 100644 docs/developer/contracts.md delete mode 100644 docs/developer/custom_validation.md delete mode 100644 docs/developer/data-plane-signaling/data-plane-signaling-mapping.md delete mode 100644 docs/developer/data-plane-signaling/data-plane-signaling-token-handling.md delete mode 100644 docs/developer/data-plane-signaling/data-plane-signaling.md delete mode 100644 docs/developer/data-plane-signaling/data-plane-signaling_authorize.png delete mode 100644 docs/developer/data-plane-signaling/data-plane-signaling_authorize.puml delete mode 100644 docs/developer/data-plane-signaling/data-plane-signaling_create-token.png delete mode 100644 docs/developer/data-plane-signaling/data-plane-signaling_create-token.puml delete mode 100644 docs/developer/default_provider_methods.md delete mode 100644 docs/developer/diagrams/contract-negotiation-states.png delete mode 100644 docs/developer/diagrams/contract-negotiation-states.puml delete mode 100644 docs/developer/diagrams/data-request.png delete mode 100644 docs/developer/diagrams/data-request.puml delete mode 100644 docs/developer/diagrams/service-discovery.png delete mode 100644 docs/developer/diagrams/service-discovery.puml delete mode 100644 docs/developer/diagrams/transfer-data-plane-consumer-pull.png delete mode 100644 docs/developer/diagrams/transfer-data-plane-consumer-pull.puml delete mode 100644 docs/developer/diagrams/transfer-data-plane-provider-push.png delete mode 100644 docs/developer/diagrams/transfer-data-plane-provider-push.puml delete mode 100644 docs/developer/diagrams/transfer-process-consumer-states.png delete mode 100644 docs/developer/diagrams/transfer-process-consumer-states.puml delete mode 100644 docs/developer/diagrams/transfer-process-provider-states.png delete mode 100644 docs/developer/diagrams/transfer-process-provider-states.puml delete mode 100644 docs/developer/dpf_selector.md delete mode 100644 docs/developer/events.md delete mode 100644 docs/developer/identity-management.md delete mode 100644 docs/developer/ids-dataspace-protocol/README.md delete mode 100644 docs/developer/ids-dataspace-protocol/contract-negotiation-architecture.md delete mode 100644 docs/developer/ids-dataspace-protocol/ids-endpoints-services-architecture.md delete mode 100644 docs/developer/ids-dataspace-protocol/json-ld-processing-architecture.md delete mode 100644 docs/developer/ids-dataspace-protocol/management-api.md delete mode 100644 docs/developer/ids-dataspace-protocol/transfer-process-architecture.md delete mode 100644 docs/developer/metrics.md delete mode 100644 docs/developer/openapi.md delete mode 100644 docs/developer/performance-tuning.md delete mode 100644 docs/developer/policy-engine.md delete mode 100644 docs/developer/policy-monitor.md delete mode 100644 docs/developer/sql-persistence.md delete mode 100644 docs/developer/sql_queries.md delete mode 100644 docs/developer/state-machine.md delete mode 100644 docs/developer/terminology.md delete mode 100644 docs/developer/transfer-process.md diff --git a/docs/developer/README.md b/docs/developer/README.md deleted file mode 100644 index 8c4fdfac399..00000000000 --- a/docs/developer/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# Developer Documentation - -## Architecture -- [Terminology](terminology.md) -- [Contracts](contracts.md) -- [Transfer Process](transfer-process) -- [Identity Management](identity-management.md) -- [Terminology](terminology.md) -- [Dataspace Protocol](ids-dataspace-protocol/) - -## Guides -- [Customize Policy Engine](policy-engine.md) -- [Performance Tuning](performance-tuning.md) -- [Sql persistence](sql-persistence.md) - -## Build and testing -- [OpenApi Spec Generation](openapi.md) -- [Cloud Testing](cloud_testing.md) - -## Deep Dives -- [Command Queue](command-queue.md) -- [Configuration](configuration.md) -- [DPF Selector Concept](dpf_selector.md) -- [Dynamic SQL Queries](sql_queries.md) -- [Events](events.md) -- [Metrics](metrics.md) -- [Policy Monitor](policy-monitor.md) -- [State Machine](state-machine.md) - - -> All implementations have to follow existing design principles and architectural patterns that are provided as -> [Decision Records](decision-records/README.md). Therefore, during implementation, please refer to the dedicated -> [style guide](https://github.com/eclipse-edc/.github/blob/main/contributing/styleguide.md) and -> [contribution guidelines](https://github.com/eclipse-edc/.github/blob/main/CONTRIBUTING.md), and the patterns we -> documented in [coding principles](https://github.com/eclipse-edc/.github/blob/main/contributing/coding-principles.md). -> _Make sure to continuously check and extend the list._ diff --git a/docs/developer/cloud_testing.md b/docs/developer/cloud_testing.md deleted file mode 100644 index 24d5f4e76e2..00000000000 --- a/docs/developer/cloud_testing.md +++ /dev/null @@ -1,126 +0,0 @@ -# Cloud testing - -## Usage - -### Overview - -A cloud deployment is required to test the integration with resources that cannot be run in a local emulator, such as Azure Data Factory. - -- A **GitHub environment** is used to encapsulate secrets. -- An **application** is created to represent the system when running test. In Azure Active Directory, a service principal for the application is configured in the cloud tenant, and configured to trust the GitHub environment using Federated Identity Credentials. For running tests locally, developers should be assigned equivalent or higher permissions. -- **Cloud resources** and **role assignments** are provisioned using Terraform. To simplify the configuration and reduce the risk of leakage of elevated credentials, Terraform is executed manually by privileged developers on their local machine (rather than in a GitHub workflow). -- **Configuration** for connecting to cloud resources is provided using `.properties` file, it is build upon Terraform outputs JSON. The file is uploaded to GitHub as an Environment secret. For running tests locally, a script is provided to download this file locally. - -### Forks and pull requests - -The cloud testing pipeline detects whether credentials for an Azure environment are configured. If not, the cloud testing pipeline is skipped. - -When running pull requests across repositories (from a repository fork), the workflow doesn't have access to secrets for security reasons. Therefore, the cloud testing pipeline will only run after the PR is merged. - -If the PR author has reason to expect that the PR may break cloud tests, they should configure credentials for an Azure environment on their fork and provision Azure resources. This will cause the cloud testing workflow to run on their fork (outside of PR checks). The author should attach evidence of the cloud testing workflow run to the PR. - -Alternatively, the reviewer from the upstream repository may pull the PR into a temporary branch on the upstream repository in order to trigger the cloud testing workflow (outside of PR checks). This should only be done after careful inspection that the code is not leaking credentials. - -## Deploying an Azure environment - -### Planning your deployment - -You will need: - -- An Azure subscription -- At least one developer with the `Owner` role on the Azure subscription in order to deploy resources and assign roles -- A service principal (instructions below) -- For developers to be able to read configuration from Terraform outputs, grant them the `Storage Blob Data Reader` (or `Contributor`) role on the storage account holding the Terraform state file. -- For developers to be able to use their own identity to run tests, grant the following roles at the Subscription level, or on the Resource Group created to hold Terraform resources. - - `Storage Account Contributor` (or `Contributor`) - - `Data Factory Contributor` (or `Contributor`) - - `Key Vault Secrets Officer` -- Developers will need the following utilities installed locally: - - [Azure CLI](https://docs.microsoft.com/cli/azure/install-azure-cli) - - [Terraform CLI](https://learn.hashicorp.com/tutorials/terraform/install-cli) - - [GitHub CLI](https://cli.github.com) - -### Log in to Azure & GitHub - -- Both for running Terraform and running tests in a local development environment, you must be [signed in to the target Azure subscription with the Azure CLI](https://docs.microsoft.com/cli/azure/authenticate-azure-cli) and [have the target Azure subscription selected](https://docs.microsoft.com/cli/azure/manage-azure-subscriptions-azure-cli). - -- You must be [signed in to GitHub with the GitHub CLI](https://cli.github.com/manual/gh_auth_login) and must have Contributor permissions on the repository. - -### Create a service identity for the GitHub Environment - -[Create and configure an application for your GitHub Environment](https://docs.microsoft.com/azure/active-directory/develop/workload-identity-federation-create-trust-github). - -Follow the instructions to *Create an app registration*. - -- In **Supported Account Types**, select **Accounts in this organizational directory only**. -- Don't enter anything for **Redirect URI (optional)**. - -Take note of the Application (client) ID. - -Create a client secret by following the section "Create a new application secret" in the page on [Creating an Azure AD application to access resources](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal#option-2-create-a-new-application-secret). Take note of the client secret and keep it safe. - -Follow the instructions to *Configure a federated identity credential*. - -- For **Entity Type**, select **Environment**. -- For **Environment Name**, type `Azure-dev`. That is the environment name hard-coded in the workflow definition. -- For **Name**, type any name. - -Note that the GitHub Environment itself is created automatically when used in a workflow, you don't need to take any action to create the Environment in your GitHub repository. - -### Configure Terraform settings - -The shell scripts that wrap Terraform commands take their configuration from a file named `.env` that should not be committed into the repository (though the file should be shared across developers in your fork). Copy and adapt the example settings file to your environment, following the comments in the file: - -```bash -cp resources/azure/testing/.env.example resources/azure/testing/.env -``` - -At a minimum, you must modify the following values: - -- `GITHUB_REPO` (to reflect your fork) -- `TERRAFORM_STATE_STORAGE_ACCOUNT` (must be globally unique) -- `TF_VAR_ci_client_id` (using the App registration created in the previous step) -- `TF_VAR_prefix` (must be globally unique) - -### Deploying Terraform resources - -The first time only, set up the state storage account by running this script: - -```bash -resources/azure/testing/terraform-initialize.sh -``` - -After that, run this script to update cloud resources. Follow the prompt and enter `yes` if requested to apply any changes: - -```bash -resources/azure/testing/terraform-apply.sh -``` - -The script also configures your repository's GitHub Environment so that workflows can consume the resources. The following secrets are provisioned in the Environment: - -- `AZURE_TENANT_ID`, `AZURE_CLIENT_ID` , and `AZURE_SUBSCRIPTION_ID`, required to log in with the Federated Credential scenario. -- `RUNTIME_SETTINGS`, a multiline string in key/value configuration file format containing resource identifiers and other settings needed to connect tests to the resources deployed with Terraform. - -Note that these values do not actually contain any sensitive information. - -That is sufficient to have the cloud testing workflow run in your fork on every Git push. - -### Consuming Terraform resources locally - -For running cloud tests in local development, run this script to download a `runtime_settings.properties` file: - -```bash -resources/azure/testing/terraform-fetch.sh -``` - -This downloads a `runtime_settings.properties` file, which is read by cloud integration tests. This file should not be committed to the repository. - -### Evolving Terraform configuration - -When doing changes to the Terraform configuration, keep in mind that the cloud resources, as well as the Terraform output values, are shared with other branches. You must ensure that any changes are backward compatible. - -For example, if changing a test so that a resource is not needed anymore, do not remove the resource from the Terraform configuration in the same PR. - -### Deleting Terraform resources - -Resources such as pipeline definitions created in Data Factory prevent the use of Terraform to destroy the created resources. However, the deletion of the storage account for Terraform state and the resource group containing generated Azure resources can be scripted. diff --git a/docs/developer/command-queue.md b/docs/developer/command-queue.md deleted file mode 100644 index fa70a787ca4..00000000000 --- a/docs/developer/command-queue.md +++ /dev/null @@ -1,79 +0,0 @@ -# Using the Command Queue - -In many situations, especially when there are is parallel processing in multiple threads involved, we may run into situations that could potentially cause -inconsistencies. For the purposes of this document we'll use the `TransferProcessManager` ("TPM") as example, although the concept applies to other components -as well. - -## Problem statement - -The `TransferProcessManager` automatically updates `TransferProcess` ("TP") objects according to its state machine and depending on external influence, e.g. -provisioning. This is done on a separate thread. However, there are situations, where those TransferProcesses need to be modified from a different thread, for -example a watchdog, that retires timed-out or stale TPs. Simply fetching the TP from the store, updating it and storing it again may cause race conditions, and -it may cause the TP to be in an unexpected state. - -Thus, the `TransferProcessStore` should never be accessed directly, instead every action that modifies a TP, that happens _outside_ of the TPM should be -enqueued in the `CommandQueue`. That queue is drained at a specific time in the state machine, thus all actions are executed in a serial manner, which is -necessary to again avoid race conditions. - -## When to use it - -Whenever access a shared resource like a TP is required, the respective piece of code be wrapped in a `CommandHandler` and enqueued in the `CommandQueue`. The -CommandQueue will then execute the code safely and without side effects. - -## How to use it - -First it's important to note that `Commands` are mere POJOs, their contract is that they are fully serializable, so they cannot have references to any -non-serializable objects. - -Commands typically contain the data, that the `CommandHandler` needs to execute the code, for example the ID of a transfer process. `CommandHandler`s must be -registered at runtime start, which is typically done in a `ServiceExtension`: - -```java -public class YourExtension { - @Inject - private CommandHandlerRegistry registry; - - @Override - public void initialize() { - var commandHandler = new HelloCommandHandler(); //handles HelloCommands commands - registry.register(commandHandler); - } -} -``` - -Whenever a `HelloCommand` command needs to be issued in client code, a reference to the `CommandQueue` is required. For safety reasons the `CommandQueue` -is not exposed directly, but only accessible through e.g. a `TransferProcessManager`: - -```java -public class ClientClass { - - private TransferProcessManager tpm; - - public void sayHello() { - var command = new HelloCommand(); - tpm.enqueueCommand(command); - } -} -``` - -After that, the command will get executed eventually, but there is no guarantee with regard to latency, timeouts, ordering or resilience. The only certainty is -that the command will be executed once. If it fails, it gets re-enqueued, or discarded, if its retry cycles are exhausted. - -Note that there is no direct back channel to the issuer of the command. While it would have been easy to add a `CompletableFuture` as return type, it would -violate the serializability principle. - -## Best practices - -- do not maintain any references to non-serializable objects in the `Command` object -- Commands should not have behaviour, only state -- Command handlers should not have state, only behaviour -- As command handlers must be stateless, they must determine their state, for example by executing a database `read()` directly in its `handle()` method. -- Command handlers must be defensive, for example they must check whether a transfer process can be modified or not. -- Command handler should not implement long-running operations, as they may hold up calling components such as the TPM. -- if command handlers throw an exception, the command may get retried, so proper cleanup must be done. -- wrap all `enqueue` operations in a `try-catch` block, because enqueuing may fail with an `IllegalStateException`, e.g. when the queue is full (bounded queue) -- do not expose the `CommandQueue` directly - clients should only be able to enqueue items. - -## Further reading - -A complete sample with additional explanation can be found in the [samples](https://github.com/eclipse-edc/Samples/blob/main/transfer/transfer-03-modify-transferprocess/README.md). diff --git a/docs/developer/configuration.md b/docs/developer/configuration.md deleted file mode 100644 index 97d31b0beb9..00000000000 --- a/docs/developer/configuration.md +++ /dev/null @@ -1,45 +0,0 @@ -# Configuration - -It is possible to configure the Eclipse Dataspace Connector. All configuration are retrieved by their key from an -extension, that implements the Configuration Extension interface. - -Whether this configuration may happen when the application is running or only on start-up may vary for each -configuration extension. - -## Create new Setting - -Settings are identified by their key. When creation new setting please follow the best practices listed below. - -Settings are retrieved from the ServiceExtensionContext interface. - -**Best practices for Settings**: - -- setting keys start with _edc_ -- setting keys are defined in _private static final_ fields -- setting fields are annotated with the _@Setting_ marker interface -- settings have a valid default value - -**Example Setting** - -```java -class ExampleSetting { - - private final static String DEFAULT_TITLE = "Default Title"; - - @Setting(value = "The ids title", defaultValue = DEFAULT_TITLE) - private final static String EDC_IDS_TITLE = "edc.ids.title"; - - private String getTitle(ServiceExtensionContext context) { - return context.getSetting(EDC_IDS_TITLE, DEFAULT_TITLE); - } - -} -``` - -## Configuration Extension - -The integration of each configuration extension may vary. Please have a look at their corresponding README.md files. - -The following extensions implement the ConfigurationExtension interface. - -- [File System Configuration](../../extensions/common/configuration/configuration-filesystem/README.md) diff --git a/docs/developer/contract-duration/contract-validity-check.md b/docs/developer/contract-duration/contract-validity-check.md deleted file mode 100644 index aecf9d46100..00000000000 --- a/docs/developer/contract-duration/contract-validity-check.md +++ /dev/null @@ -1,154 +0,0 @@ -# Contract In Force Policy Specification - -This document defines an interoperable policy for specifying in force periods for contract agreements. An in force -period can be defined as a __duration__ or a __fixed date__. -All dates must be expressed as UTC. - -## 1. Duration - -A duration is a period of time starting from an offset. EDC defines a simple expression language for specifying the -offset and duration in time units: - -``` + ms|s|m|h|d``` - -The following values are supported for ``: - -| Value | Description | -|-------------------|---------------------------------------------------------------------------------------------------------------------------------------| -| contractAgreement | The start of the contract agreement defined as the timestamp when the provider enters the AGREED state expressed in UTC epoch seconds | - -The following values are supported for the time unit: - -| Value | Description | -|-------|--------------| -| ms | milliseconds | -| s | seconds | -| m | minutes | -| h | hours | -| d | days | - -A duration is defined in a `ContractDefinition` using the following policy and left-hand -operands `https://w3id.org/edc/v0.0.1/ns/inForceDate`: - -```json -{ - "@context": { - "cx": "https://w3id.org/cx/v0.8/", - "@vocab": "http://www.w3.org/ns/odrl.jsonld" - }, - "@type": "Offer", - "@id": "a343fcbf-99fc-4ce8-8e9b-148c97605aab", - "permission": [ - { - "action": "use", - "constraint": { - "and": [ - { - "leftOperand": "https://w3id.org/edc/v0.0.1/ns/inForceDate", - "operator": "gte", - "rightOperand": { - "@value": "contractAgreement", - "@type": "https://w3id.org/edc/v0.0.1/ns/inForceDate:dateExpression" - } - }, - { - "leftOperand": "https://w3id.org/edc/v0.0.1/ns/inForceDate:inForceDate", - "operator": "lte", - "rightOperand": { - "@value": "contractAgreement + 100d", - "@type": "https://w3id.org/edc/v0.0.1/ns/inForceDate:dateExpression" - } - } - ] - } - } - ] -} -``` - -## 2. Fixed Date - -Fixed dates may also be specified as follows using `https://w3id.org/edc/v0.0.1/ns/inForceDate` operands: - -```json -{ - "@context": { - "edc": "https://w3id.org/edc/v0.0.1/ns/inForceDate", - "@vocab": "http://www.w3.org/ns/odrl.jsonld" - }, - "@type": "Offer", - "@id": "a343fcbf-99fc-4ce8-8e9b-148c97605aab", - "permission": [ - { - "action": "use", - "constraint": { - "and": [ - { - "leftOperand": "https://w3id.org/edc/v0.0.1/ns/inForceDate", - "operator": "gte", - "rightOperand": { - "@value": "2023-01-01T00:00:01Z", - "@type": "xsd:datetime" - } - }, - { - "leftOperand": "https://w3id.org/edc/v0.0.1/ns/inForceDate", - "operator": "lte", - "rightOperand": { - "@value": "2024-01-01T00:00:01Z", - "@type": "xsd:datetime" - } - } - ] - } - } - ] -} -``` - -Although `xsd:datatime` supports specifying timezones, UTC should be used. It is an error to use an `xsd:datetime` -without specifying the timezone. - -## 3. No Period - -If no period is specified the contract agreement is interpreted as having an indefinite in force period and will remain -valid until its other constraints evaluate to false. - -## 4. Not Before and Until - -`Not Before` and `Until` semantics can be defined by specifying a single `https://w3id.org/edc/v0.0.1/ns/inForceDate` -fixed date constraint and an -appropriate operand. For example, the following policy -defines a contact is not in force before `January 1, 2023`: - - ```json -{ - "@context": { - "edc": "https://w3id.org/edc/v0.0.1/ns/", - "@vocab": "http://www.w3.org/ns/odrl.jsonld" - }, - "@type": "Offer", - "@id": "a343fcbf-99fc-4ce8-8e9b-148c97605aab", - "permission": [ - { - "action": "use", - "constraint": { - "leftOperand": "edc:inForceDate", - "operator": "gte", - "rightOperand": { - "@value": "2023-01-01T00:00:01Z", - "@type": "xsd:datetime" - } - } - } - ] -} -``` - -## 5. Examples - -- In-force policy with a fixed validity: [policy.inforce.fixed.json](./policy.inforce.fixed.json) -- In-force policy with a relative validity duration: [policy.inforce.duration.json](./policy.inforce.duration.json) - -_Please note that the samples use the abbreviated prefix notation `"edc:inForceDate"` instead of the full -namespace `"https://w3id.org/edc/v0.0.1/ns/inForceDate"`._ diff --git a/docs/developer/contract-duration/policy.inforce.duration.json b/docs/developer/contract-duration/policy.inforce.duration.json deleted file mode 100644 index c67632144be..00000000000 --- a/docs/developer/contract-duration/policy.inforce.duration.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "@context": { - "edc": "https://w3id.org/edc/v0.0.1/ns/", - "@vocab": "http://www.w3.org/ns/odrl.jsonld" - }, - "@type": "Offer", - "@id": "a343fcbf-99fc-4ce8-8e9b-148c97605aab", - "permission": [ - { - "action": "use", - "constraint": { - "and": [ - { - "leftOperand": "edc:inForceDate", - "operator": "gte", - "rightOperand": { - "@value": "contractAgreement", - "@type": "edc:dateExpression" - } - }, - { - "leftOperand": "edc:inForceDate", - "operator": "lte", - "rightOperand": { - "@value": "contractAgreement + 100d", - "@type": "edc:dateExpression" - } - } - ] - } - } - ] -} \ No newline at end of file diff --git a/docs/developer/contract-duration/policy.inforce.fixed.json b/docs/developer/contract-duration/policy.inforce.fixed.json deleted file mode 100644 index e8772229e1f..00000000000 --- a/docs/developer/contract-duration/policy.inforce.fixed.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "@context": { - "edc": "https://w3id.org/edc/v0.0.1/ns/", - "@vocab": "http://www.w3.org/ns/odrl.jsonld" - }, - "@type": "Offer", - "@id": "a343fcbf-99fc-4ce8-8e9b-148c97605aab", - "permission": [ - { - "action": "use", - "constraint": { - "and": [ - { - "leftOperand": "edc:inForceDate", - "operator": "gte", - "rightOperand": { - "@value": "2023-01-01T00:00:01Z", - "@type": "xsd:datetime" - } - }, - { - "leftOperand": "edc:inForceDate", - "operator": "lte", - "rightOperand": { - "@value": "2024-01-01T00:00:01Z", - "@type": "xsd:datetime" - } - } - ] - } - } - ] -} \ No newline at end of file diff --git a/docs/developer/contracts.md b/docs/developer/contracts.md deleted file mode 100644 index 6de6b4af35c..00000000000 --- a/docs/developer/contracts.md +++ /dev/null @@ -1,4 +0,0 @@ -# Contracts - -### State Machine -![Contract Negotiation State Machine](diagrams/contract-negotiation-states.png) diff --git a/docs/developer/custom_validation.md b/docs/developer/custom_validation.md deleted file mode 100644 index a0b6038f309..00000000000 --- a/docs/developer/custom_validation.md +++ /dev/null @@ -1,74 +0,0 @@ -# Custom validation framework - -The validation framework hooks into the normal Jetty/Jersey request dispatch mechanism and is designed to allow users to -intercept the request chain to perform additional validation tasks. In its current form it is intended for intercepting -REST requests. Users can elect any validation framework they desire, such as `jakarta.validation` or -the [Apache Commons Validator](https://commons.apache.org/proper/commons-validator/), or they can implement one -themselves. - -## When to use it - -This feature is intended for use cases where the standard DTO validation, that ships with EDC's APIs is not sufficient. -Please check out the [OpenAPI spec](../../resources/openapi/yaml) to find out more about the object schema. - -EDC features various data types that do not have a strict schema but are *extensible*, for example `Asset`/`AssetDto`, -or a `DataRequest`/`DataRequestDto`. This was done by design, to allow for maximum flexibility and openness. However, -users may still want to put a more rigid schema on top of those data types, for example a use case may require an -`Asset` to always have a `owner` property or may require a `contentType` to be present. The standard EDC validation -scheme has no way of enforcing that, so this is where _custom validation_ enters the playing field. - -## Building blocks - -There are two important components necessary for custom validation: - -- the `InterceptorFunction`: a function that accepts the intercepted method's parameters as argument (as `Object[]`), - and returns a `Result` to indicate the validation success. It **must not** throw an exception, or dispatch to - the target resource is not guaranteed. -- the `ValidationFunctionRegistry`: all `InterceptorFunctions` must be registered there, using one of three registration - methods (see below). - -Custom validation works by supplying an `InterceptorFunction` to the `ValidationFunctionRegistry` in one of the -following ways: - -1. bound to a resource-method: here, we register the `InterceptorFunction` to any of a controller's methods. That means, - we need compile-time access to the controller class, because we use reflection to obtain the `Method`: - ```java - var method = YourController.class.getDeclaredMethods("theMethod", /*parameter types*/) - var yourFunction = objects -> Result.success(); // you validation logic goes here - registry.addFunction(method, yourFunction); - ``` - Consequently `yourFunction` will get invoked before `YourController#theMethod` is invoked by the request dispatcher. - Note that there is currently no way to bind an `InterceptorFunction` directly to an HTTP endpoint. - -2. bound to an argument type: the interceptor function gets bound to all resource methods that have a particular type in - their signature: - ```java - var yourFunction = objects -> Result.success(); // your validation logic goes here - registry.addFunction(YourObjectDto.class, yourFunction); - ``` - The above function would therefore get invoked in all controllers on the classpath, that have a `YourObjectDto` - in their signature, e.g. `public void createObject(YourObjectDto dto)` and `public boolean deleteObject - (YourObjectDto dto)` would both get intercepted, even if they are defined in different controller classes. - *This is the recommended way in the situation described above - adding additional schema restrictions on extensible - types* - -3. globally, for all resource methods: this is intended for interceptor functions that should get invoked on *all* - resource methods. *This is generally not recommended and should only be used in very specific situations such as - logging* - -Please check -out [this test](../../extensions/common/http/jersey-core/src/test/java/org/eclipse/edc/web/jersey/validation/integrationtest/ValidationIntegrationTest.java) -for a comprehensive example how validation can be enabled. All functions are registered during the extension's -initialization phase. - -## Limitations and caveats - -- `InterceptorFunction` objects **must not** throw exceptions -- all function registration must happen during the `initialize` phase of the extension lifecycle. -- interceptor functions **should not** perform time-consuming tasks, such as invoking other backend systems, so as not - to cause timeouts in the request chain -- for method-based interception compile-time access to the resource is required. This might not be suitable for a lot of - situations. -- returning a `Result.failure(...)` will result in an `HTTP 400 BAD REQUEST` status code. This is the only supported - status code at this time. Note that the failure message will be part of the HTTP response body. -- binding methods directly to paths ("endpoints") is not supported. diff --git a/docs/developer/data-plane-signaling/data-plane-signaling-mapping.md b/docs/developer/data-plane-signaling/data-plane-signaling-mapping.md deleted file mode 100644 index afa35677071..00000000000 --- a/docs/developer/data-plane-signaling/data-plane-signaling-mapping.md +++ /dev/null @@ -1,100 +0,0 @@ -# Detailed technical aspects of mapping transfer formats onto data planes - -## The transfer format - -The transfer format is a descriptor of how certain `Assets` are available for transfer. This means, the same physical -Asset could be available via multiple formats, e.g. HTTP, S3, Azure Blob, etc. In DCAT terms there is one `Distribution` -per format. - -Practically, the format conforms to the following schema: - -```ebnf -format ::= DESTTYPE DASH FLOWTYPE ; -DESTTYPE ::= [a-zA-Z0-9] ; -DASH ::= "-"; -FLOWTYPE ::= "PUSH" | "PULL" ; -``` - -The first section, the `DESTTYPE`, is arbitrary, and could be any character sequence. For example one could -define `SuperFastQuantumTransfer-PUSH`, so long as there is a data plane that can fulfil super-fast quantum transfers. -It should be noted that the _format_ is a concept that is immanent only to the control plane. - -When registering data planes with the `DataPlaneSelector`, there must be a link between the (arbitrary) format and the -transmission technology utilized in the data plane. The `DataPlaneSelectorService` must be able to dispatch an -incoming `DataRequest` to an appropriate data plane. Consequently, the format must be _mapped_ onto a data plane -descriptor. - -_Alternate names: catalog format, distribution format, catalog type, transfer type_ - -## Mapping the format - -The data plane does not know anything about DCAT or `Assets`, thus the _format_ does not exist there as a concept. A -data plane only knows about data sources, data destinations and flow directions. (The source type is not relevant for -this document). - -The _format_ is mapped onto a tuple consisting of the `destType`, which is a String, and the `flowType`, which is -an `Enum`. This tuple is called a `DataPlaneDescriptor` as it identifies a specific data plane: - -```java -public record DataPlaneDescriptor(String destinationType, FlowType direction) { -} -``` - -This mapping is done in -the control plane, and it must be extensible, for example some data planes might map - -``` -Http-PUSH -> destType=Http, flowType=PUSH -``` - -but others might have a different format representation, that maps to the same technical transmission stack: - -``` -SuperFastQuantumTransfer-PUSH -> destType=Http, flowType=PUSH -``` - -from that it follows that there must be a configurable/extensible way of performing the mapping: - -```java -var tokens = format.split("-"); -var destType = mappingRegistry.getOrDefault(token[0], tokens[0]); -var flowType = FlowType.parse(tokens[1]); -``` - -This implies, that the mapping from format to `DataPlaneDescriptor` must be unambiguous. Ambiguity may be countered by -random selection. - -## Impact on Authorization - -Authorization is only possible when the flow type is `PULL`, because only then does the provider data plane retain -access control. (In PUSH scenarios, the consumer data plane may use authorization, however). - -Further, token creation is dispatched based on the _destination type_, as the format does not exist as a concept in the -data plane. If multiple formats are are mapped to the same destination type (and thus: transmission stack), but should -have different auth token schemes and authorization mechanisms, _separate data planes are needed_. - -The `FlowType` will replace the `transferType` field on the `DataFlowStartMessage`. If the `flowType==PUSH` the -authorization is bypassed. - -## Examples of mapped formats - -* `Http-PULL` -> `destType = Http`, just connects the streams -* `Http-PUSH` -> `destType = Http`, connects the streams _and_ starts the transfer -* `HttpAas-PUSH` -> `destType = Http` -* `HttpAas-PULL` -> `destType = Http` -* `AmazonS3-PULL` -> `destType = AmazonS3`, EDR contains bucket data plus temporary access token. Dataplane may transfer - data into a staging bucket. -* `AmazonS3-PUSH` -> `destType = AmazonS3` - -## Data plane registration - -Several different _format_ strings could map to the same combination of `destType` and `flowType`. For example there -could be scenarios where the following mapping is implemented: - -``` -Http-PULL -> destType=Http, flowType=PUSH //only performs basic authentication -HttpSecure-PULL -> destType=Http, flowType=PUSH //adds some highly secure authorization scheme -``` - -When registering those data planes, the format is needed as additional parameter, to be able to distinguish between -them. In other words, dispatching solely based on the `DataPlaneDescriptor` may produce ambiguous results. \ No newline at end of file diff --git a/docs/developer/data-plane-signaling/data-plane-signaling-token-handling.md b/docs/developer/data-plane-signaling/data-plane-signaling-token-handling.md deleted file mode 100644 index 80c4e20ebdb..00000000000 --- a/docs/developer/data-plane-signaling/data-plane-signaling-token-handling.md +++ /dev/null @@ -1,201 +0,0 @@ -# EDC Data Plane EDR Handling and Extensibility - -A prerequisite for the changes described here -is [Data Plane Signaling](data-plane-signaling.md). -The signaling architecture transitions responsibility for EDR creation and data plane access token handling from Control -Plane services to the Data Plane. As a companion to that work, the refactoring effort outlined in this document adds key -features to access token handling in the Data Plane Framework (DPF). Specifically, the following will be introduced: - -- Client-side management and API for Endpoint Data References (EDR). Facilities for persisting and updating EDRs - received from data providers will be implemented. The API will provide a RESTful query interface to client - applications for retrieving EDRs. -- An extension point for integrating custom authorization token handling. For example, a third-party authorization - server can be used to create and verify access tokens, or custom access logic can be introduced into the authorization - flow. - -> Note that the DPF also supports OAuth client authentication flows for accessing backend data sources and sinks. That -> feature will not be affected by this refactoring. - -## 1. Client-Side EDR Management - -The Client EDC will expose an EDR API that provides operations to resolve EDRs as `DataAddress` types by asset ID, -contract agreement ID, and transfer process ID. - -A modified version of -the [EndpointDataReferenceCache‎](spi/edr-spi/src/main/java/org/eclipse/tractusx/edc/edr/spi/store/EndpointDataReferenceCache.java) -and EDR API will be upstreamed to EDC as part of that work. The `EndpointDataReferenceCache` will receive and -persist `EDRs` sent from provider control planes (e.g., when a transfer process has been `STARTED`). The EDR API is -intended to be used by client applications to resolve `EDRs` granting access to provider data endpoints. - -> The API must be segmented from the rest of the management API using a separate API key or role (TBD). - -## 2. Updates to the`DataAddress` Format - -The format of the Data Address returned by the EDR API will be updated to align with the current DSP specifications ( -backward compatibility to the existing format should be maintained by retaining the previous fields): - -```json -{ - "dspace:dataAddress": { - "@type": "dspace:DataAddress", - "dspace:endpointType": "https://w3id.org/idsa/v4.1/HTTP", - "dspace:endpoint": "http://example.com", - "dspace:endpointProperties": [ - { - "@type": "dspace:EndpointProperty", - "dspace:name": "https://w3id.org/edc/v0.0.1/ns/authorization", - "dspace:value": "token" - }, - { - "@type": "dspace:EndpointProperty", - "dspace:name": "https://w3id.org/edc/v0.0.1/ns/authType", - "dspace:value": "bearer" - } - ] - } -} -``` - -Support for the optional DSP `https://w3id.org/edc/v0.0.1/ns/authType` property will be added. If present, its value must be `bearer,` which indicates -clients must present the contained token as a bearer token to the associated HTTP endpoint. - -_Note that all endpoints must be represented as URI-style strings._ - -## 3. Data Plane Authorization - -Data Plane authorization involves creating an access token as part of the EDR when a `DataFlowStartMessage` is received -and performing authorization checks against the token presented by the client when a data request is issued to the -provider data plane. - -These operations will be encapsulated in the `DataPlaneAuthorizationService`: - -```java -public interface DataPlaneAuthorizationService { - Result createEndpointDataReference(DataFlowStartMessage message); - - Result authorize(String token, Map requestData); -} -``` - -### Public endpoint resolution - -In addition to creating an access token (see next section), the data plane must determine the public endpoint, where -consumers can obtain the data. In the case of HTTP, this would be the internet-facing HTTP URL of the data plane (" -public url"), e.g. `"http://example.com"`, and the type would be `"https://w3id.org/idsa/v4.1/HTTP"`. -This tuple consisting of `endpoint` and `endpointType` is determined by another service called -a `PublicEndpointGenerator` (as public endpoints could be dynamically _generated_): - -```java -public interface PublicEndpointGenerator { - Endpoint generateEndpoint(DataAddress sourceDataAddress); -} - -public record Endpoint(String endpoint, String endpointType) { - - -} -``` - -Note that the `endpoint` is represented as URI-style string. Thus, both `endpoint` and `endpointType` are _always_ -Strings. The shape of the `endpoint` is specific to each source type and must be documented out-of-band. - -### EDR and Token Creation - -When `DataPlaneAuthorizationService.createEndpointDataReference()` is invoked, the service will delegate to -the `DataPlaneAccessTokenService.obtainToken()` to create the authorization token and package it in an EDR. There could -be a separate `DataPlaneAccessTokenService` per `endpointType`, effectively enabling the data plane to generate -different tokens for each transfer type. - -The `DataPlaneAccessTokenService` is a defined extensibility point that can be used to integrate third-party -authorization servers: - -```java -public interface DataPlaneAccessTokenService { - Result obtainToken(TokenParameters parameters, DataAddress address); - - Result resolve(String token); -} - -public record AccessTokenData(ClaimToken claimToken, DataAddress address) { -} -``` - -When `DataPlaneAccessTokenService.obtainToken()` is called, `TokenParameters` will contain (at least) the -following claims: - -```java -String participantId; -String processId; -String assetId; -String agreementId; -String transferType; -``` - -The returned `TokenRepresentation` may contain an additional parameter `tokenType` indicating the token type, -e.g., `bearer`. - -Additional parameters may be added in the future so `DataPlaneAccessTokenService` implementations must take care to -handle them. - -A default in-process `DataPlaneAccessTokenService` implementation will delegate to the existing `TokenGenerationService` -and `TokenValidationService` using a custom token decorator context (`edc:dataplane`). - -The token creation flow is illustrated by the following sequence diagram: - -![](./data-plane-signaling_create-token.png) - -### Request Authorization - -Request authorization is performed when a client issues a request to the provider Data Plane by dispatching -to `DataPlaneAuthorizationService.authorize()`. The `authorize` method takes the `token` and `requestData`, which -encapsulates the token and transport-specific request information as a `Map`, e.g., the HTTP request path: - -```java - Result authorize(String token, Map requestData); -``` - -`DataPlaneAuthorizationService.authorize`, in turn, will perform a two-step process. - -##### `AccessTokenData` Resolution - -First, the `DataPlaneAuthorizationService.authorize()` implementation will -invoke `DataPlaneAccessTokenService.resolve()` -to resolve the `AccessTokenData` containing the `DataAddress` and claims associated with the token: - -```java -public record AccessTokenData(ClaimToken claimToken, DataAddress address) { - -} -``` - -The `ClaimToken` will contain the claims originally passed in the `TokenParameters` used to create the token: - -```java -String participantId; -String processId; -String assetId; -String agreementId; -String transferType; -``` - -#### Authorization Check - -After the `AccessTokenData` is resolved, the `DataPlaneAuthorizationService.authorize` implementation will delegate -to `DataPlaneAccessControlService.checkAccess`: - -```java -public interface DataPlaneAccessControlService { - boolean checkAccess(ClaimToken claimToken, DataAddress address, Map requestData); -} -``` - -The authorization flow is illustrated by the following sequence diagram: -![](data-plane-signaling_authorize.png) - -A default implementation will be provided that always returns true. Extensions can supply alternative implementations -that perform use-case-specific authorization checks. - -> Please note that `DataPlaneAccessControlService` implementation must handle all request types (including transport -> types) in a data plane runtime. If multiple access check implementations are required, creating a multiplexer or -> individual data plane runtimes is recommended. - diff --git a/docs/developer/data-plane-signaling/data-plane-signaling.md b/docs/developer/data-plane-signaling/data-plane-signaling.md deleted file mode 100644 index e423bca4421..00000000000 --- a/docs/developer/data-plane-signaling/data-plane-signaling.md +++ /dev/null @@ -1,130 +0,0 @@ -Data Plane Signaling and Access Control Architecture - -## I. Introduction - -This document defines the data plane signaling and access control architecture. Data plane signaling comprises the protocol messages the control plane uses to communicate with a data plane. Signaling includes data flow initiation, suspension, and termination. Signaling also governs client authorization and access control, namely, when a client attempts to access data via a data plane. - -The message interactions defined in this document are intended to serve as a basis for interoperability between the EDC control plane and third-party data plane implementations. The EDC Data Plane Framework (DPF) will also support the signaling and access control protocol. - -### Requirements - -1. Data plane authorization must continue to function when the control plane is offline, for example, during a control plane upgrade. -2. A data plane must support a maximum threshold between the time a transfer process is closed and an access to data via the data plane is shut off. -3. Data plane authorization must not place significant load on the control plane. -4. The architecture must support clustered control plane and data plane deployments. - -### Principles - -#### 1. Contract Agreement - -A contract agreement governs 0..N transfer processes. A contract agreement may have multiple associated transfer processes, including N processes in an active state. If a contract agreement is expired, invalid, or otherwise not in force, all associated transfer processes must be transitioned to the `TERMINATED` state. Enforcing this cascading behavior is the responsibility of control plane subsystems, including the policy monitor. - -#### 2. Transfer Process - -A transfer process governs access to a particular asset. In other words, all data transfers are regulated by an associated transfer process. If a transfer process is transitioned to the `SUSPENDED` or `TERMINATED` state, all associated data access channels must be suspended or closed. - -#### 3. Data Address and Endpoint Data Reference - -When the control plane signals to the data plane to start a client pull transfer process, the data plane returns a `DataAddress` (provider push transfers do not return a `DataAddress`). This `DataAddress` contains information the client uses to resolve the provider's data plane endpoint. It may also contain a bearer access token. - -This `DataAddress` is returned to the client control plane. If the client control plane is an EDC implementation, the `DataAddress` will be transformed into an `EndpointDataAddress` (EDR) which contains additional metadata associated with the transfer, such as the asset id and contract id. - -Since a transfer process may be `STARTED` multiple times (e.g., after it is temporarily `SUSPENDED`), the client may receive a different `DataAddress` as part of each start message. The client must always create a new `EDR` from these messages and remove the previous `EDR`. Data plane implementations may choose to pass the same `DataAddress` or an updated one. - -Note that start signaling can be used to change a data plane's endpoint address, for example, after an upgrade (in this case the transfer process would transition back into the `STARTED` state). - -#### 4. Access Token Renewal - -The data plane access token may be renewable based on the capabilities of its associated data plane. If an access token is renewable, the renew operation must happen out-of-band from the control plane. - -### The Signaling Protocol - -All requests must support idempotent behavior. Data planes must therefore perform request de-duplication. After a data plane commits a request, it will return an ack to the control plane, which will transition the `TransferProcess` to its next state (e.g., `STARTED`, `SUSPENDED`, `TERMINATED`). If a successful ack is not received, the control plane will resend the request during a subsequent tick period. - -##### 1. `START` - -During the transfer process `STARTING` phase, a data plane will be selected by the default push and pull `DataFlowControllers`, which will then send a `DataFlowStartMessage` (renamed from `DataFlowRequest`) to the data plane. - -The control plane (`DataFlowController`) will record which data plane was selected for the transfer process so that it can properly route subsequent, start, stop, and terminate requests. - -For client pull transfers, the data plane will return a `DataAddress` and an access token. - -If the data flow was previously `SUSPENDED`, the data plane may elect to return the same `DataAddress` or create a new one. - -##### 2. `SUSPEND` - -During the transfer process `SUSPENDING` phase, the `DataFlowController` will send a `DataFlowSuspendMessage` to the data plane. The data plane will transition the data flow to the `SUSPENDED` state and invalidate the associated access token. - -##### 3. `TERMINATE` - -During the transfer process `TERMINATING` phase, the `DataFlowController` will send a `DataFlowTerminateMessage` to the data plane. The data plane will transition the data flow to the `TERMINATED` state and invalidate the associated access token. - -## II. Control Plane Refactoring - -### 1. DataAddress and Token Generation - -Currently, the `ConsumerPullTransferDataFlowController` delegates to the `ConsumerPullDataPlaneProxyResolver` to create a `DataAddress` with an access token. This should be moved to the data plane. - -The DPF implementation will use the `TokenGenerationService` to create its access token. - -### 2. Signaling Messages - -The following messages will be introduced: `DataFlowRequest` renamed to `DataFlowStartMessage`; `DataFlowSuspendMessage`; and `DataFlowTerminateMessage`. - -### 3. DataFlowController - -The `DataFlowController` interface will be updated to: - -- Add a new `suspend` method: -```java -StatusResult suspend(TransferProcess transferProcess); -``` -- Rename the `initiateFlow` method: -```java - StatusResult start(TransferProcess transferProcess, Policy policy); -``` - -### `ConsumerPullTransferDataFlowController` and `ConsumerPushTransferDataFlowController` - -When a data plane is selected, the data plane id (from `DataPlaneInstance`) will be persisted with the `TransferProcess`. This will enable consistent routing of messages to the same data plane. - -#### 3. DataFlowManager - -The `DataFlow` manager will be updated to reflect the `DataFlowController` methods. - -## III. DPF Design - -This section covers specific architectural details concerning the runtime operation of the EDC Data Plane Framework. Other data plane implementations may behave differently. - -### Access Control - -The design of the EDC Data Plane Framework is based on non-renewable access tokens. One access token will be maintained for the period a transfer process is in the `STARTED` state. This duration may be a single request or a series of requests spanning an indefinite period of time. - -Other data plane implementations my chose to support renewable tokens. Token renewal is often used as a strategy for controlling access duration and mitigating leaked tokens. The EDC implementation will handle access duration and mitigate against leaked tokens in the following ways. - -#### Access Duration - -Access duration is controlled by the transfer process and contract agreement, not the token. If a transfer processes is moved from the `STARTED` to the `SUSPENDED`, `TERMINATED`, or `COMPLETED` state, the access token will no longer be valid. Similarly, if a contract agreement is violated or otherwise invalidated, a cascade operation will terminate all associated transfer processes. - -#### Leaked Access Tokens - -If an access token is leaked, its associated transfer process must be placed in the `TERMINATED` state and a new one started. In order to mitigate the possibility of ongoing data access when a leak is not discovered, a data plane may implement token renewal. Limited-duration contract agreements and transfer processes may also be used. For example, a transfer process could be terminated after a period of time by the provider and the consumer can initiate a new process before or after that period. - -### Data Flow Management and Access Token Generation - -The DPF will persistently manage push and pull `DataRequests,` whereas it previously only persisted push requests: - -- The SUSPENDED state will be added to `DataFlowStates.` -- `DataAddress` and access token creation will be moved from control plane to the data plane. The data plane framework will create an access token containing a cryptographically secure UUID and the dat flow id. The access token UUID will be stored with the DataFlow instance. -- During deduplication, the DPF will recreate the `DataAddress` and access token. This will avoid storing access tokens on the provider. Any tokens from previous requests will be invalidated. In other words, the last token wins. - -### Runtime Access Checks - -During bootstrap, the DPF will initialize a cache of active `DataFlow` id-token id pairs that are in the `STARTED` state. The cache will be updated on `DataFlow` state changes. - -When a request for data is made by a client, the provided access token will be validated and its associated data flow id will checked against the cache. If an entry is not found, or the token id does not match, the request will be denied. - -## Appendix: Additional Refactoring - -- Remove `NOT_TRACKED` from `DataFlowStates` -- Consider renaming `DataFlowManager` to `DataFlowService` diff --git a/docs/developer/data-plane-signaling/data-plane-signaling_authorize.png b/docs/developer/data-plane-signaling/data-plane-signaling_authorize.png deleted file mode 100644 index 33461b97338c5d95c00926fa2fde9c156d4ae2fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36753 zcmbTeWk6JI7d4F7fTGe!n4}T{(x7yA2oeg?-3=DfpfU*39fBZI5(6qCI7)Xb(#?=V zetST@)#rY`_jzCbD8tN|>s+z-+H0+S0+bXakKs|`;o#sLla>-w!NJ)-i-WT->j*Bq z5-YYr4F51Wir;WFw6S%wG%|L?ku?d`iK$FX%}(5z=-QNE zZx|qolpspJQ;7v-eBq01 zQJGawqSJ+PubCU;;M~QL7Q3$IsyE&5rlan(Eo^(@k+_(uD6ZH^-!n$+vaMn&cApBb zY&Az&1l^S3NV{syVV#A*w4?6m6mZsFmt&*mC_3Eif12`{nnd7Nyf;tZB(JW+_ce|=2#+~5cR^PI1V<;cjQY#R<&HLr_^4&Q(vq;C^UN$P1Mrzf z;T;_nmE`I2Fk*VDh)e9n#4~*xQ+ZX}VLqFp-P#yAHSFEpihpd?Tl`YF;qzzaD_79p z!-O@CzhE%4CnOAe{P;1_nxRqn(?Jq9Isqn_gmic8I9MRs_ zUZCTvTkc$B+1=9Jt<@Hsoy{D#ZzOR;-1~j@or|Zp>60bHXoQ4>$XN9d+zkoBgZ=$m z!=J*@61YrgemkA%<)Z`X4VsulN0=BJiF4@4jkYa1KFD_w?z-WxNa)cg`*G)Sx7t0Rec zrJsGJnN|W-0&#N>Fl**+ewb|6)K4>Na{o}jJk`nUH!!OgM~cYCMMXqDe?BofDuJfB*i6_L+p8O%w4vnwoEQkr@NNiJdI- zNb^a8qBBM6V5M@U(WU+VCG6mT_j)E-psC*j8akygSmi+G5!jt6#_* z<475KNlWB&SEX0^>uMPbdV(aX zG^a*y$k@zr>BgNwoqpgZ!lb7yWp95)z5UhgYEuuGRNXSiEZy?ru&~At0Yo)8We4)q zv!BJp+`Mt4i*{#C5_vnVq^huKP%C;RgnNJixkZuYGI&<>QN`L&(9Y(Vu-T(Brzw;^ zeM7w9Mvq0FvSA#b)A+jjcD_`8WSG#pzx&qa=5PY9$871CL?{(waTsiaAhJfPXYDmY|NCzaGDLl&)i(q zt#`P_-oAKM$!ZC>9RkSc5ckD7hzXdngp9A^x~l1Nw57DH;V(rbd9&tWw9 z4Q6{|u66c9hQ(5#PNfUxsDR5XRln!gdxt4GO|O05nfDWxQr2@|LZVL~zkHjb4xN}h zpgchSg-B(qMZ_mG>wux5q1i@+rXB^m0UV6%2{X~OmCvkIO6LV_Qj(L$3AuIm`9Pp{ zua>d#F{9u#J>j&qF}TCByEgiiqK%|XdEcu2R%iQT%34}m)3P$r10Hk8h3~bkzH5hR zJ zv(%Kxhn_I0$w9Lt6B83tQ?iZB3)_z!qa0;+^g^G>TclS}Lj1Yh&g)r!QQ9O}|G@z2 zX0fF-x5v`>La$9#0O|F)J50yNAU+^`2o}0c64H*=uwiH=d&H}}w>ollWqk~;T6Vqt zlBe`d6EUg!HabJIK-tDyn`6r>V_NF4!uRJA*B70lS%vMiKTy}mif3)RN2xxv7cVu} zNH2TRA?=_Lb9JVQU*j9I#$smsn9kN%T!IGQH}#^Y2lwxY`CELAVAc$bndvE-8bFqJ z83*d{nW3$;*=kmkME$&1x=mi*EJ-ilU6y+E^_RvK3B@guD|t+s=A9RXIgs zX-s9{X_B)U3b21AX}5QnT3@#V5pMwQ9R*LwXIrT z8<*3hT91(Z@DY+&*OII@$|getgAdMjcI<+Rh1y)!hTIpaaLjBgzfo&0{Y8xa%pQXC^)J_eD#%INblpo&aQ*^ zdO2)bkDkvv5>uRblbvQUBa#_LQyni6@@b7e98=Bw;%N+;h-?L;7pH}{mQ;I|The5W zQnqW2Ys_h!vL<7h@xF`}?#AFtA2P?*v#T1G10Fn^yn0ulYBI1Kry$?fLt%3;F1zPv$naC z(qr;sPmDdgXfa910vgT4#B>UIdG-RzVpe-|@J^X`ghUH6b?nimp8Mq`rtGNebMwp3 z?(9$wGn29CmKB;dpW`!Js`b^|k?9W4(i1qANT%E)B`3EuKhI+~^w2XZN@n4p(2tN3 zj%%!tXPh#+>9f&0nE82d(5E4mx5eZv=jnsXQ-$^D6t~IFJlfNznYY5UjRoB^q^?0s ziBpTnvW5f3n&oRP~D%8caYop)WrC-W-Mf#v1=zPGgLtzw0| zvW2ARCl_ zvg6v95+>C1#?CPRrMEewwh(5RsB8luKq~3z-b}UmFg~2C+8L;?pJAMmlzkqaB^3Ld z!=xo4D#2&_Ii7?&p(rI?`ub=6?Q>Q5e{H*Ml_^EVrjr5tJPortuv28w^(rYLAt5hs zPEmO40_F4N@wjum2n$A3#O2NhhY4F&WLc3Hjy*2W%8!=ReX&D!q#EhS^Plr`J}UXgLGJC_ZV@3vsii<*+gO<)N)QL2 zV`qlhA$Tezx!mW_D6MJp<<-?&+(U>YkZ>d8@ zP!K+Hz<=M#lP6nt1WpOhoe_7#d_zpmMQ<-Pt=!$WUrbY3`D7e}nfJ1)>;SsoWzfyt zz1XT(!#z6(A?S&`*j;r9Sw(ySe$JdpRNJ}p%$!=m+L|TqHWOjA^Y@P-fwv32qXQLQ zZ?b&Z#3S(*&!Rh+w(#9EW!6C zl#f)8*F?CRNkjb6$~UMH-oZ4gY+*o>Gt5;0Fk7?F3zC{N#$RsN3iI@YP5kmAf>}Qo3k$_m^7I7DY!nn4 zwzoFOF5Q?PPYDZD?^exEdy!(ijf=k`chi?yi)~Wz;lnH3T<-4ffqq$Sv*#jhT*jO3 zkqS7Beo0Ne;O@>B;WHEQJdhCyQ58Ye{^KmRn z7EWvwSPWKm+uQ=cgT)V{svSGWQn`caIyc7#`JAVvbPaCKRifFG$7}HQvX-y7Hzi(o zBs1Tvrrkcn;zsK>{G=g{KWN|6_H4~o@&y~N*2O>;=LzE!i4bhwKD`usvYObhdK#FO zFolzG%=A;8s;7vE#LI{D0-r%z4Gh0jV%D0jvQ=&J?9Ld(Sp8D_v?bP07z_rv(qqwL za?d+Eijf}P_=VkWL8@vNn0m=H9FA_06M{- zshUvul0>m-v&bfOrzOJQ$Io}W^7HALOTzA1iR?pD`q5L$!IGuVCOc1|+Ko$9IEky8 zSR1Tv+=yCg^>)_C8OnTK_4dACtHw7O(%^NXv)!c*^jtFf93<0>_LvnotRI9sMrUS_ zw%Q>9& zh!^(RuBG)s_~_Np6dD_;@?yTtn-&!+OuS!ZVfSmiG@;OWt#x#GczOVNb8$&y`i?oI zC>7Q(qnj?6!1u2fm#$P>zUcC@iYJoa1wszqe0mG%S@jYFanJO#8r+u>b=r#_+8a^& z8rFt-0WL#_4M{O6<)=-<`5rB7FMetjPr((FT{IX+%KLILBf+~2Tk=1M3uFxA7xZ*! zKMJ=nJ9_k}Ev?!BGu~T4zaKQfHH6C%SCRVPABx}5}{r|%SH{sw4d#=4g zzuRX^5Xqt|BPXZ!Z(PG0_vJ~zk0E0hc+#DwI*jhzVaV1vbdVr){}0X}DHn)~YMpZD z%Z!W@x;Tdy8~Eq2;Xo^oiQ$&*fuG~8haBnm;#O@aHHr?$&#&y@qR8_7vr4Y!{%9qV z3g8U><>jxX$BZBT`Og3GB@eb+5}7yISk+j`aeXr${U;~$A0!Q-`o7A;`~TzXI#0*@vW1_J{QLqSOWA~_zZ*32r8o5kC6E$vwRTgWhmcYS{C&})KyhgjdcIjsGQxQ=&M$g#Kgq3 zw6sJ-i%p`0yu7@}sQC~LQPVUsR~ygj5-RDAjE*w#W0|kF)@902e^q5Htw5cx>bT*v zGq=N7J{Jc^`Z$fijWRc%b7%-l!`zG?RJBPK)beQrH~B~w2Z>hiD0t8*$L%oVY8=|>n9R%GsB9aBD`Kht-RJ?q2v+zZh zYQ_sfnXsWm&ap3zjbTASi%UxcgoHjbMV+SahK4QTO@bQUU$yQdCnEYjI!b!tgzb3K z*`N-J$C7ULKnME!`}@(jOZBM%?nKfO@Te){w&jmLC8he-pc zS&Nw14&K{5)q504*6%8mkhhKy$M^J0U{(h_@}SNg@?0-LGyx zfW=8u>=^*Wx@LPsxBVhLeXBG40EDn=I_tlHUY_5e=5u5?s2bQzJYIuSkEyw}e4Tyx za2hZDMSJ?GngDW9W=DgRiqQ+4@wt`bLl3W%kh8MUzB&n~-Rux1W<0P~dvX8OK=u!x zKL?pVdUleQcCggJr0jT(Zuv^Oe9Rq}*JSa%zsEvnP33rz%ggC$X@VQm1}3x) z&79XZckc1uAG;cLa+355emnl7Yu~c^)e-c7fC2*pQ7DxA{JX+F;Yn%kapvVl-BGbN+!U z#_xXJ{e$?!%6eY$T=XZ$^&F@5^z?>&bZ)4H`JY22@H(VB&-5%TERb&1Y70FWi27a| zrpm8t*t8O3Q%Q01o z&rXxQT$%0`<+TLv0Cr+Vd1`vP%5m$#N+j$ydGYi7j^jZ29cq&^XKsD)KWPvaDETni zGeO8Jl!{kmRU7Hf0b&5Yg2nKr%c?&f7- zVL5yDdLY{INfXrEnwpvmAFag14lD=eViw0*`)jU_)Q#511VxC6i%Zj5MTSKV_CZZ$ zm0hCuSjhtx9P&zkYDC-1n~@sgA)h{dB37(f&4y?*_=me%vvqG_3#Qm7{`51w7{zNUJ`2!#MD zIKXPzeb%vR62s*Mm82s@qGfwhd^k(;2N%VWgou*y1e2hS3&hcBhozE*_7l|CYO_Bu z_!3CM9PhnuhQv(BoDmT4Y|B*Mtl~HbV^FGB*FbQm@H&h##4u@jdRDjwZLu&WSA2)v zeTufAS#&?;Rm<_Yxk2CoYl6tW%e!Mo&L!q{zCU|DE+S&Nq-smP+Z>zxAWH>>hI+40 zWB@{$rxS$t-Nj87;9+?(O6xwJ1mO-gZ~=f+cbk^)f9{RZr4x7E#3UtKeV|IO!i=6a zN(g-2wU3IxTm9J2i1JO>%~l7ZSqLT9(_}X#B_%)uaJD~`qdjkodF-Rwrx*VAN3x)V zZ)ISt<+ki%V`F>ev$Gx8h+4cIH+RtXfU7+2Kgjm0KSM1jJZl)tr@=>>U#s~B@xLCK zk3R4d0-hLo_wA0c@l}fsxvi@exU?M@Jsioqb2j(flHA{&U=V<5u)VahW0AKz0=VB7 zIAU&W%tASfNbD@B<0K12k?ej7rh*AandVC%;glyU{OKCWT?Rtq8b7B>vbQI{ZruD0 z!S221?)kTQFMj);A6E^<$&>!K_gb8aB6~qbaPPgUDB^Iz(7)YD&f2Sn)dA7c(o%ZG zc(vkzSpcd)e-3JMA(*8M8ZYF98lvl##ouki9}bx%qyH3SQWrPCpg z0?K6~!OjO!$K`cof4R%*{Jib!z|hd`;c!L7`Ps(;)q(@Mt=!>>QLY3v5?C?~&VdP6E^n(Zn=UD@UNzO!jDVhlI*z^OQjgWp+zsgrN>~_J zBN^5ld{5R=?=AP2+C>bveL&3(%$@BoSBw|XD(lYE7q)Zw7))W+Q)uVn5*8fX2V~25 zgvlE{qL(M3oSZx zX=rHRoI{ErBa&(R4#LkbO#8&3u&@{iqZS3Ad{}z8#xiOEK084GudJ+8R#xsUwj!E& z3enPQsaet>ra{`$GN(&HUfv3l45uXqJpu!NYK=0>Z5=JVN=El_b2-n)3xr8p*RS{9 zzP&c#Q`|(*GQ2p}7)h7G!2zda*%c|d2#gtILXb!uM<)vPk?!h+veUxtjt-CpTB!9Q z*a&X{Pb3dpng9Ne&D&`pA4{AE)XfbIjr8&8D@J%m@+Uii4%9R;8N-rYz&kq2$jB%t z96$I0Px=!H>r;6pHiHUTx`F6PX~-|9PM!pu9wz9qLQF~uASWD` zS@+N#BcqEKE@TplvB!5PZY1L$LRAuznmu^RDR022-v}Ye>^(62p!|kVE{|rs1LhLg zubU;-y1>&j-u~<&qvt+xvDtNHT5I8GT3??|nRHUDK|W{jd%lY{6X{|$aaS{nO4-=c zK^^22;^oC;WyIS%IBb9zp4AT(0F6BRqug4CqQ&oAwDqUCtszKtW^3BO;lVQg+S<`& z#xO~(>GCQ4Af-32km-AV8yZ57MCvmc@3-|_TRHoq!Zl87cw_H52YHH7LHSimYVLHw z4Ky0fP`UG+b|-NLM3SpE13Cj96D?`KFzvUnnV7Bx;} zcT2x=@B0xZvEhpYY0;4bXT}FMEj}I|!fOP?ekw9D$#;d`TkBX2(^LnfG^6YK`h#D; z-V#Cu^%VnfZDt8WM~By?@Lmo(q-wK^X_IA>X;{-t@M;|$fY>FSavu-$wPv|loU@r* zw)mOw4(y%D4{~NPSH{PHZU^34Sty-hbGo3h#S*r6OL?1P2=R#%iI`?vq*G69$LRY@ zC1Iry;~=%r$w%M04S?RYUQ#v36K*6~x0O0>687;UU*CYw@h$^yV?G5qQHM{F{9M?Y zhfYD>b0G6F@CYq@AOc{F5~7fK*3i&ETwvajbLD+6cta+fy$ETiwl@^w+<(%2wx^?&2aW$K+SND1*aI%OY%A}1SWIK3) z=?9&%8w{h7kTHmD;+!Yj%v^cveJUnU5zK@F^Ee@%BN3WnpRv@nvAH>ucnbh=)gwe? z`=h^waRR`6Gy|+M>@R>|3LOl2+@FB@7ZDKw_k|7P&K+k{)A47QZ|3SDUtoyV& zomkfo)T8M8u4ZNvJ}x@5p$bk~T3Xkx;k=}0Vv=DeysLFa`Q9EAc1t7rwr+Cw2H
H_34YHsV;a4yu8 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 dpauths: <> -activate dpauths -dpauths -> tvs: validate token w/ own public key -activate tvs -return Result -dpauths -> dpats: <> -activate dpats -dpats -> dpats: restore AccessTokenData \nfrom raw token -return AccessTokenData -dpauths -> dpacs: <> -dpacs --> dpacs: perform access control -dpacs -> dpauths: return true | false - - -return Result -deactivate dpauths -@enduml \ No newline at end of file diff --git a/docs/developer/data-plane-signaling/data-plane-signaling_create-token.png b/docs/developer/data-plane-signaling/data-plane-signaling_create-token.png deleted file mode 100644 index e693b72d1ad5a961a2bc0e2c40267de658d33853..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37042 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 aftjH0RW(j+5>`RPAL#2CYZq%ep8j7D dpauths: <> -activate dpauths -dpauths -> dpauths: convert DataFlowStartMessage to \nTokenParameters + DataAddress -dpauths -> dpats: <> -activate dpats - -dpats->dpats: convert TokenParameters -> TokenDecorator[] - -dpats -> tgs: <> -activate tgs -return TokenRepresentation - -dpats --> dpauths: return TokenRepresentation \n(containing serialized JWT) -deactivate dpats -[<-- dpauths: return serialized JWT -deactivate dpauths - -@enduml \ No newline at end of file diff --git a/docs/developer/default_provider_methods.md b/docs/developer/default_provider_methods.md deleted file mode 100644 index 72dfcc66a38..00000000000 --- a/docs/developer/default_provider_methods.md +++ /dev/null @@ -1,137 +0,0 @@ -# Advanced dependency resolution: default provider methods - -This feature (and this document) is aimed at platform developers who intend to provide additional platform features. It -is **not** intended for people who simply want to contribute a technology extension, such as a database implementation -or a storage backend! - -In this document we will use the term "default provider" and "default provider method" synonymously to refer to a method -annotated with `@Provider(isDefault=true)`. Similarly, "provider", "provider method" or "factory method" -refer to methods annotated with just `@Provider`. - -## Fallbacks versus extensibility - -Default provider methods are intended to provide fallback implementations for services rather than to achieve -extensibility - that is what extensions are for. There is a subtle but important semantic difference between _fallback -implementations_ and _extensibility_: - -### Fallback implementations - -Fallbacks are meant as safety net, in case developers forget or don't want to add a specific implementation for a -service. It is there so as not to end up _without_ an implementation for a service interface. A good example for this -are in-memory store implementations. It is expected that an actual persistence implementation is contributed by another -extension. In-mem stores get you up and running quickly, but we wouldn't recommend using them in production -environments. Typically, fallbacks should not have any dependencies onto other services. - -> Default-provided services, even though they are on the classpath, only get instantiated if there is no other -> implementation. - -### Extensibility - -In contrast, _extensibility_ refers to the possibility of swapping out one implementation of a service for another by -choosing the respective module at compile time. Each implementation must therefore be contained in its own java module, -and the choice between one or the other is made by referencing one or the other in the build file. The service -implementation is typically instantiated and provided by its own extension. In this case, the `@Provider`-annotation ** -must not** have the `isDefault` attribute. This is also the case if there will likely only ever be one implementation -for a service. - -One example for extensibility is the `IdentityService`: there could be several implementations for it (OAuth, -DecentralizedIdentity, Keycloak etc.), but providing either one as default would make little sense, because all of them -require external services to work. Each implementation would be in its own module and get instantiated by its own -extension. - -> Provided services get instantiated only if they are on the classpath, but always get instantiated. - -## Deep-dive into extension lifecycle management - -Generally speaking every extension goes through these lifecycle stages during loading: - -- `inject`: all fields annotated with `@Inject` are resolved -- `initialize`: the `initialize()` method is invoked. All required collaborators are expected to be resolved after this. -- `provide`: all `@Provider` methods are invoked, the object they return is registered in the context. - -Due to the fact that default provider methods act a safety net, they only get invoked if no other provider method offers -the same service type. However, what may be a bit misleading is the fact that they typically get invoked _during the -`inject` phase_. The following section will demonstrate this. - -### Example 1 - provider method - -Recall that `@Provider` methods get invoked regardless, and after the `initialze` phase. That means, assuming both -extensions are on the classpath, the extension that declares the provider method (= `ExtensionA`) will get fully -instantiated before another extension (= `ExtensionB`) can use the provided object: - -```java -public class ExtensionA { // gets loaded first - @Inject - private SomeStore store; // provided by some other extension - - @Provider - public SomeService getSomeService() { - return new SomeServiceImpl(store); - } -} - -public class ExtensionB { // gets loaded second - @Inject - private SomeService service; -} -``` - -After building the dependency graph, the loader mechanism would first fully construct `ExtensionA`, i.e. -`getSomeService()` is invoked, and the instance of `SomeServiceImpl` is registered in the context. Note that this is -done regardless whether another extension _actually injects a `SomeService`_. After that, `ExtensionB` gets constructed, -and by the time it goes through its `inject` phase, the injected `SomeService` is already in the context, so the -`SomeService` field gets resolved properly. - -### Example 2 - default provider method - -Methods annotated with `@Provider(isDefault=true)` only get invoked if there is no other provider method for that -service, and at the time when the corresponding `@Inject` is resolved. Modifying example 1 slightly we get: - -```java -public class ExtensionA { - - @Inject - private SomeStore store; - - @Provider(isDefault = true) - public SomeService getSomeService() { - return new SomeServiceImpl(store); - } -} - -public class ExtensionB { - @Inject - private SomeService service; -} -``` - -The biggest difference here is the point in time at which `getSomeService` is invoked. Default provider methods get -invoked _when the `@Inject` dependency is resolved_, because that is the "latest" point in time that that decision can -be made. That means, they get invoked during `ExtensionB`'s inject phase, and _not_ during `ExtensionA`'s provide phase. -There is no guarantee that `ExtensionA` is already initialized by that time, because the extension loader does not know -whether it needs to invoke `getSomeService` at all, until the very last moment, i.e. when resolving `ExtensionB`'s -`service` field. By that time, the dependency graph is already built. - -Consequently, default provider methods could (and likely would) get invoked before the defining extension's `provide` -phase has completed. They even could get invoked before the `initialize` phase has completed: consider the following -situation the previous example: - -1. all implementors of `ServiceExtension` get constructed by the Java `ServiceLoader` -2. `ExtensionB` gets loaded, runs through its inject phase -3. no provider for `SomeService`, thus the default provider kicks in -4. `ExtensionA.getSomeService()` is invoked, but `ExtensionA` is not yet loaded -> `store` is null -5. -> potential NPE - -Because there is no explicit ordering in how the `@Inject` fields are resolved, the order may depend on several factors, -like the Java version or specific JVM used, the classloader and/or implementation of reflection used, etc. - -## Usage guidelines when using default providers - -From the previous sections and the examples demonstrated above we can derive a few important guidelines: - -- do not use them to achieve extensibility. That is what extensions are for. -- use them only to provide a _fallback implementation_ -- they should not depend on other injected fields (as those may still be null) -- they should be in their own dedicated extension (cf. `DefaultServicesExtension`) and Java module -- do not provide and inject the same service in one extension -- rule of thumb: unless you know exactly what you're doing and why you need them - don't use them! \ No newline at end of file diff --git a/docs/developer/diagrams/contract-negotiation-states.png b/docs/developer/diagrams/contract-negotiation-states.png deleted file mode 100644 index b8af2c4c6f55d3f95d935200735f71fee45578b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99622 zcmeFZWmJ{zw?4W60ci^)qy%X}2@z?K5(yEcq?A%pM7jh7B^TYHgoLDkNTYN}N=T}J zloBqK=06`$U*F%}=bSOlIUn|iJ;pnRuz7xhxk$-W1cze=w}>z~n&OOb+eeiy)I||tyP1$L#F=sur(3$jH3cRUd>y_Pko~Cs(qY3VW#Vvu zG3;uQ9Cg!}lVzoln7Bo^&&O{4NXDoetW1uol$W;iEKbfYX4P|B4N`e>K4Z`0_KTP> zprqa&iX+Q>_cKvdhuY7qk`Ig1f_Zq!a5{wJ`gFQ@=nm_-PL(UiGnOKot~`|gp04%c zIdl0`4f)P&#BAKAiogI7+0TbO`npH1&B%#s)$*{Mo-rn`#5hW&ImxCywluHxY&m>K z`7HjB>sY76#27jI1gf{sTm?hdL=hqyYI;6J~=(zkwMjL_w%Arn7Lr+s$ShZ z)t+JH+oG{+W0Gr<;~Y@=m8*{rTwZo52QI zADKrlXhRj1gvD%nPH(m?&akcazw2(jE~psA`pBpCI#&2}HgkNVON=zzN&B|LJMIZ;QoIbPpf3!?eRvgK;RRp#4B_L6;(J=FL3Me*v3mE|I$!pQ`;r6?2i z-fomWaJJUdukZfB;O>6w)C70tkw*ju*OqKSa-_a#W{4+98-cX27)?O*xiiR4D6 zZY0%P`|XWfCr6uY+_P`3%E{x$PM}a;D22Q4HLW3D&V-*1ZBDn@kh^KG$w61|Lj znSi|SN~rnskUMvs71$Ix+xu0S*-KWj?torSMP^XIjFk>FMdIsVmHTp7rHf@BTifN0?_cK5P@n<=nNFXM=GN1xcT_pTi$Zm9vavA`_-rc{yg=Db zgwP7t?EDy6wL@O*MP=NRDB{dp3 z2}Wa>bz57Tl(ckUK)`Iq2~@{x+mBLOT9l&l$S7VcE-p3(p6pv-TTXZV`K>+rY+9~t za&q$hnU1HqhGu+b@3y~piDzGvYJo-ES$<3ABu-pPOeazv9~KdDeWc8)c5|L{lUPPR zXsFVWM^8YirMscVee2e(TUiIcdGzQ}4@^ZyO19QxN8X$%&hSIYo%gw#p^qP@s;H4m z`LX01)Y8$>DF+{esi8<1rDd3niD@oe-L;*pd$_apljnl$!=a&}qfD~>IU1b&{E_PU zH(#&z$kB^#Ohu&k=IOqg@Z3u}F*Y_PzPEjUV_q?ui;?xji4(CbPsDfEZ`XNYP3cT^ zcf|3zySYtCZ)|LQZVI;OPL=%np|n-VtSdQcesPbqOd95wbxO)FAParoezqH?Ktc1$ z`Bs0{wMxe&Wkp4%sG{4=6%`dtjg7QIcFgC_Ef+P@DXOUKt+w-siik|*{`@wUa8stD zB9Xbps_agmpKrLdKWW%rzG-Lt>eHX&t_9bhD{uW=Qc+U+`aU-%B_&1OY|pWfcI#yd zvJL#c#N@4vOsuS5ww7uOG;#;pqBsMCN2;o(kH_#BuzY0T;JA`sURmk+W7v#UIninI zAwDUch?eDcK%+F7XoWwaZ$H$EHHXz$2oQbRO$QbE?+X`4JI)U_j~8 zD=RDSb2QpJIwJF}H*0-35R>8XM?XD%jF--BS@IY|3*KJ;b(Pl8v%@pbRZ_T9$~^Zx z?4)F6{caK*KJ2viUbFR4zFuW`i6l3dPRZ=t^OWe2Hby3P_9qq3a&vR-&6mcjr@B9f zitA5g=~ufl4T_(DER6|o(|0gOEf1l=hZmgM>kvA+H$mC&J5(~ zTJ&e#n`${am*ut=c#=nKebPs_%ra~qPD`lRW|mt^Yb!f1@2cl3b8N=9bbnTeNE+|F zX$PgI=AhL`Sw?22a_qUM)?*c`JU-hC279Y3D|16dX>P@H@9{~fFN=+W(e$Lr$%UL^ z-@7VXw1O|5l$7MTy&`9qAndS+Uig>AagkBs;^H1>Rkj=|d>RoEQBbh-E=hP=T6}w1 zy7caQ)2`&RnpX>wlafTiFq`Q;Z*Gzg4C=coiAAQQ(4RUrnsqHLUcjQFygZ0rJh}Q( z7VfXLMiDX`EDMeV7PvjHHdrM#FEkcPRS5nU_t(_0Qc;Mvn#RV)euJvJVr={C+`8|q z4cZf+INp+yBIhz#j}t3ZZE+HLW%p3&F%(DR|BQbS($vwRrlAowdgGfc>gqxrMl>a@ z#_T`)5^K?i_7vjosVi@+T7st%b-|cxliEE_lrX@rBOR)jL|j^t#hH|EW0iv7i!a@X zl~!hA?Hj~bB^SQ9e<~gFrXn5@NJ}Ya7LcWKIM^aC2vH8Ns+ax&q9)w38CRH2rg-DvDGhU&AK zjT43Lvs}EmzP<4s6Hb5{2z>lltHPeW#`TT(KSLmY6y)uV9e%E*7ITFFb>-_&(dQAH zTA6o~r~dh*oiv{IAy$>-paLUQ7Wbt~mpC{A=!7N-{(eH%%}vCE6sJzvv?DewCPq$$ z*49Ul^Ouo^Y@n~*xIsZpt)s4fnI{;P>PK{v+ZQ095B{j(;1zf9xk`mTx5bQ&&CGc8 zt77#}Vo8Yp0-1BeIAVo=W_6yP*JJ%7eigl6#qRp&(0iYoO3i!Tw6@N*vZgGKRsMV` z?LQk)7q&R^iid^8FIjXF=g%NdeP?9i;tJ9~T8{_#&T72swZA{Ug3XgBPkMTKBqb$J z^5~~`;mFzTY_2UY+q(SlB3snS<~dB2N`N?}oHxrK-_i)&jf{wprf1`>v72s_qj$$l zMW_tqXyod?vaa3RtyKSs!EEntE$yupc!pKHeEHoh#ht~#q~06%tZtdTo!#kI8!OH9 ziZXW28>`c+LV6YU8vqnD+NUyaywK`-X{KTq1;8**uhIb!H#pBTuSNk6MMj>OE7{)O zhRF(;cc(gh{eXi<%up|1<6>#K`1mMO%f{2EPt}g9KSbA`h0ruQ*Y{jWJY5R!!HGI$ zB&HNr=4uuI#Bm&Wp^d>x`|lAe&jstRYxD1Qi;Y`XJ~w-=fApV!pNqiQbdSk8tZ?#{ zd=;rW03d=k<6L9Pjf`m?JDa&T@=gn`ee|afC+-0N2m=n=TX}R+fBF0O2xZr$>Yws6 zL$#isckkXU(664Vc-{k;#9?VXDLR^kT#|f!Sj8IR?3d`Xx~7{R#hHvg{jJwFq)}T) zKzaL3Iq8x{o{j+fX;p56nwu|8J0YKW{ps5`ZucJV#RZ$H6~CLTPmSjLv!~ubgumOL z6^2GL(1)v^;swl--fs3TkufF6ZRSI%MT*NjyB(vTV2p7Lt+0dq+WNYaosOw#ru_pU zTd#^EyycDgQHkwcU97qOiF{LN$s5FKta5vo$m^^RRxc=sxY($c@rR;5gX?Suxqn(kFkqiJDXF*l5)yRbn-vH^Rk~@9r?aTw{ zy?c-g^!kIXg^H{meqHFeq^}0puX%w6NqgMnDY)k50m{a_!+*eNY#XS@xiMH^Pz#H5 zMM#>Es?y=>UC5ABRgbuHc)24X*2ocZC;)<|$wb{JcL%JgdAE0V0A{LNj(+&k5yv#B zB#jpq9Zf+=DZeV|EFRJGR2shz%{UQxg12Rl)1A#f$k+D}yIXo3LxD$DuFtP^*k&p) zmM=4ZpF`eCHHED}8B8PS;NT$kVE)AK?_MLRc}EzG&G1T*Wtu)>z$4n8y%(K(qec|L`X>IxqUBJstGd7q{PJ2OiURS z?7qZXk}Z=Ia7v{BjJ4LeI60xwJ?RR^d3Xwp-um^hVhxcX07T|absYr zH3AMWbJ98E7W9{7*O2sR_%~l)Uo^9kMhn}8-APvG9%(V@)wso>BIz1JDZd?t{f&6= zkc*31A2ZvN_Vn6w<)j~r!_p~-3D5};AV;5j z$c3-0tXxx517nPQ$HQZMO3W>m>r`oQ#e)S3dU~EDbaeCp988zBd2nH$-ja#CeJve) zK|%$|OMQJkb7}tz?Y_oFlkN2tHCo2E9tU<>p$ZczxpSS}$jQ|;;(?zSPF?aoZtNzO z!h1DTs>TB;KGUNh0Iy&@$zsHYD*Ld@9FNgQ7yQ{t85x;iY5}_k57t&!E8Mp(xKsYe z3*_*KDJMUD;&uFXa}(v2v=0tbseFmytY(A&ztG#+Nn%rns}Z^nqdO0l=qm>+t668f zz(-l5yOeyU#CpZan2pP_vZf{`Jt^nCgcc`b$*8cfurPfjsD4?z-~-3}K|xAN%G`YR znM|PC_3Lv-+WavX%;U$8*{^3_mXR5&c8#gQK|v@3r$6)^CGmig-&#Y`qGeaqd38!D z;X+U4rGjv9$5K*iYHG8t*tYchNHxAb^*q&7PTnJ2MygkC zYxFKr2s4J$+=L)lFVl18qs7-P?Ck6)c=WH@3|7cUH34ZcD@;Hd^v^4v54_N?jvx8? zR+T|WNQj#|q$Xmr?$>@JBfP8RxPiPaNa7sa(hM`&r4E_iH67f%m@pO*`zV|l(!&Kt1ju?y)e8Rdg-qs|SFkM>T3 zr<~^>2JiRj)2G!Y8k<;(JVGk?$;&<*+)IsO^pGg+uUwK&8iVm6JiLJd1JCKUD7&I6 zG~>c}^%nS0CCfOANi)&Log#)jElx6 zXeNyMMn<+E=z_~FJ8w)(#p~;)wIgPyy~|4=g*W7lY>L*G@oHD&{y8lpQla3)s|NIS zhxV-?_$;GO0}(Kgt53qF8>7)-NlAJToNa10SmtVgUxYC&txmT$9;Py+`LW@JHligu z?&td-FOa`_)v`PF;memV;ccU(vcc4GyCho2gz228!r)Ne`n)&vT!mi9lbMyZ{dt_p zA4}0Pf?3&zWD(ccV3XIu*;CHTzGw`GA0S6eI@ZaPCpS9Fv&xqNp`nkbqwAA-o&q+B zkBQMVH_viY=e3(^`I6#UGqf&#gYR0k%Y*r=0ZDXh-R%1V&F<~(CG;Ro6Pe;z7gA*- zJ23i2M(NN+jKo9bqAq-2V#P*?%>-|FrvflmSd>O^@}3XCCJrIn?w9d*Djjri=#KD8 zST26YVtlIxyx6nPJ|->Xb0gU2-t3PZPJhwCYfJyisp}5!p9VZeoQ5XEj=3J8v2x!2 z#}7V^oJqZOU>d%}M`(~OFFfI~d|cgsf14p$zjYfi;OI96h2Hc3ITpyZRcR0ACm|sb zt2OTYg?3Zf8|O9xhX|c?@2Q?V_*crBa4f0)7Y)?Y%j1y$$BZ8=KOdKrL3~`cz+oze z3&=V?Z78!E;aJ}wwmUp=21^m~PJgY@e{1NFj%)qLr2Bgcjif6MsZ#xWj;g?cvw8h{ zit`dJDBOR~P?{F7H0r=!4H-WJFmrH8m3Y3tOP63vu=d{?k6`b#ftTUo$Am>yQ?DcY z^w%$yjE#+5TrO2>E)0Bp>wo*!tv?R)0c<(;!K}5lwT~V>iqX&0z5nIi4iMFIzrE_8 zhYAEzJa>iQHP-?8gAaB8SyzOFx~HVR#HuLR>#b524h|0BFvp7?m^TKH1D<@kM0fE5 z;{N*|qOk}MJp5?2s~|J8?|9J~3m@P21e=D;?F~a1L^7Mvzx4ZtE;Q>%1HEg zZ?60JuaCLDGKEh7P)K*Q5oI7?;^)WoW+-Cxu+Iqs^!dG(Io<<+$iiX7IRR%pH$eCP z){n2{<>dwMrEf4-q^sN8^N-&n;=%~<{WaoVSBt{a4YZ+|GQ@YYa0KbkJE`u z?wciZ{{8aT<*+&+YbjmE*l}h=0p?qis#KS@6Dg+LCu1KJu zcK6Z^=57iEueSl}4Y^vJkU$f6*Y07*{RkGN#H1vZq)Rd>godOLE?g`-Ay#CQXW!|| z)Cx=GKs=|>aZOE40|NsU6&2pzDROBb!vF)yrX1QI3T7z2xVZQ^RJ?}GQlf68&vYh4 z)IB68$T^05@Iu_B2OLy0jM9Gm{4O(bW(WD)!5lus^VF<+b6wuu-R%vS`ua8a&yQZa zZ#h7TFvHopFH> z^WX7?hv|@qIo7|3@6G*A%_JTnKJkHtzT1k-Z&#^~4iE2za%j~Ui53wAF}+tT?Cb;w zz7?N@3Q`D*ffodVgxBB3p1(aCzLws_%FD~k$r-pCBzgG_S-i(^nm`VZFuAIUOb&{I z^IRb9DSsj=0s;acm;x!zUQtpyJEP{};&SwlKPp0F1nctp? z92M6M2_yXGhf;V{Pg)~bZ9bGdp*x{}hLzRd*B9bo_s>I@8K+X8NahWkSg;zth8IXK zKU9A&5`FL6=dWT!M&9DgD!S>W?;}hiMVb^%r z*iy};SRKBNZj3oj^!y~ms1!;bfATf2XRA1kn1U0(nKVS&HweOpwN2luag~#tjh+2yrhwrQ^Zl`K=sPeoKRR^i z5W4gc*F{J;JbQ-9GuA$*rvdzlg+@<_ex-vIoOL_L^h=eOG^%D50KjA_C(Tb! zYdlw`wex|4n|#j5yLHagu*mMJWgjjX6~G0|{k^4UX=$xht@Po}OicZdAVyr@yWaV;KvZ$cdhsfC2av(v0yUB;723{1Q%+QXl&7FSc5&D?dv`jX*qzNXu5MY0o zatmr)Acq9$1P5)gLr;5W=h}}S*5g$h-nc}^jvWIUvik1(9PoE>$z5-dZOLRZ?*0yJ znO3cbd-%`kTh5Hq1J$lSpB!h6zcJLOoFb+)lQ?Rbr&G#(vz%cN@><_>d00LY``dPX zu9(kuQi6;u^vxTo*WoECNTPi$O;&+EUXOx{r+5tt*lSA@1{IcHp9#8PW?56*)JP?w zUrwJtlyoa01TEP$0_2o}yvRlL zmgSY@9i_(hcff~t_yy5>Zin@MUtJ9dZkI|Ca}WO}?7W)(s1d5=@~>p)1@87cO@+y| zv`I%7lXKo^*$dMMOvVg<`%tQQY2#C4;FKq0_M;PIr!F!~Jk~A~@k_mK*>{w;qf57F zMQNd`x*FK(59Rl6(?~a=8KqnNS2jE&QkahbXZQWpghvFKcIj+bJ0y_$<+e}V#DItOLt~jDQ)Y7c4jEXOyx2dOE@Ej9Vu*c8MHS( zcq9;7tq7>5>X~^|ukKMYJ)xb-xO(~W<)Rf&{++vKc6P;X@!J3KSBDWn zbe3OLVd2yQk`s>kkj#ruGAiLL1C zKPwpQ)E>h7$HeSqV+Xt>Qzegwp3OUIGkmS-_mT8__t*43ofU2y`h7&Yss1_ivQ-dY zb?KzL*~{h*Q(a=ZYEj3~o%*CXdf@S^MYh}Rw+~-xyg3GB1{)twQC1dUzbX~b} z<*x;+hutsK5@IQv^Y#yFX=%Y=>^J8Mbp6Tb;S4mAQNDk{{W&{cLaz<`P{~DW|YD!y44tv zB<$FW^Az9MTv}S1N3Y`Y#F=jK6+9)%oD$jE{g(ohAV)ye0Hk7CTH0LE$8|KcRR_=tn9Y0BitokKOtZ0D}wE1@{bWaakXD$zt5 za{CeSCtyLR#ygWmg@uG(r>9SCt}S31%>CVXr>OB^j;5wsZS7#?~5|LLkfkzDXqL5OQmbq zdc=2ELO})CiysM~;W}g;>1fIIt*t(@q58Fj!RAnUm1n*6KKOIDC(j-5HV5S14UMuH z@x6^M%v|4G4#~LF=isJbnuwj`7m6?hhM4P6fr(gT;^uzW-fjUI6;S7x^R}qJIU~i| zyw?t2b-vGZ!eV{?_H7r_r?R!V2@19K^>y{(e9w(l6VUp_7In;Bx9^d$3@lO>mHK-+m+!8blSVyRlROvSz)@x(oM@%Ipg{MF{ zWd~e*hE3!)$OfQNjl|8_mtWa|wVRGHpu1p6Ic_m}@9*_Gn^cBWk9!BtrIW$w=iW2D zBP-hk!`m3l)_7J@Vh_hsUtb?|OqlaWj{g1CVhal>(m(j}jLz%K+edY6D zo-V7W6C{xfg9YvMH{#yp(@ta-0l)2%(Af_ z7u`28HnlqgCC|uLpFHyQwV&^22ZB-z4;!hN|3#8^LgrajRRyWtEY1(fV@L^lHpc{oMUj8iQ4-{mNR;(2zmzy}FUnM^G4m_&_;X zM1dY>2O*>Xd@1J@i>Rnxp16nUYuFJeH6`ZTfh09xD({S9G>9ET#qeB^YM0+{dbi(- zWcZ4K)5k|3hv>#%HL#M(%+uy$#PW9~V)cqRgZ*EdCXaH^8S7xPK(H2)y!Y?jf>p1SrDlVP^ zqd~N5e@4?_-U-MCGHkn_-}E+7W{`pM-EImZrM+Z1QIjNwSAhuc{ygn_C)nTLU%y5Q z$+2JG|B{-T3LNz&yEn zT3V94-UI}$qFLGv#oDPUvKMF1X&_-UIo1ikc5@fx-o( z)rv9Pjjj%JxPK2{Z6F?&q|9RQ8TF*T!96ZqI^fh~l z|2;HCNed|8ii(OlZ*iu9(i%~<%;n@yidNeD{!KZvn=4scTa)kIIi`pX-hdOBnS058 zbxHyD2vBoE1ib^+%YU8wb9uv{xdvKYL32&PqbnZ{Zcj4^bN-^D6=MfZU9?SANfEQx z=z>D9o4fl;vYs1K>iuJ=Z%TljkN8p>mP!2NB(t&ow^6F4;YOOjkHDF$76AbPIBLjn8D}#h~m_oy>00EuSr!6fV5alOe{Hn^(-5kIh6nHHEue78zmqkgHyc&AY<;f zq1oR*QA{5|(>m^MZ`fc!~VSySlj{0_xlVS%NBsqC)C!8>pft0>dN02 zF8?`!Qv;^}P%Oz|{6`;o?kpJCzh42hbv*?ad(4dmxYauAmm&P0Fl?dVT*Chh%i5_1EWTtwcFhZ{A#-nUU3`eGg{~2#NWR zACHog%h2N_6j@OJ;||0&XPH3s($R5s(~DHWlZiz9hxt6v0&uvQWP{j%oeF(OG9&=4 z5Wfm(Dv%=I87|I1i3c-+S4ct`gkL+Upa=ZqLif|Rpw$9LdZIFu@lVwz3w#!scA8vh zCfTeu$dMlH(cEccK63^N*zC;AQxMTH=L_ln`pF9W*|SQ81H_c)7|x#$%lGa9(}kx7 z;SY#jea&@O{B=E(^w^R3KxfwL@IeH? z--bbNL(d8LFi0pdSUw-2=)ZnRu5sUWu!)OLjE(8Nqq1um`Zq&;$RhadZZN+IAV&k2 zxigSH&THC1eHmJ4bo&TZ_kaCuZP365)-;kY9bM$OG!Bph&}z?f>{tMO^`P{FzmOrv zwNO%5k7U{l=EuFFsEC-t^fdX&ldLC~Mql^AL(pOJcIxu_zJrO>t#mlsN&$Y4*$hp@ zY{YN%p?`RI1BQ&rM$H&@^S^?W7`#p4h@WBJ2Do*|(PlZ+XF$IJ=YvYzV;jy##uZ?@ zV9*)0DY%~d(f;*64EGua!_1iG{C$Sm7CK~t#K=-lQSw`bo%JO~x(()V-jw={_KCS~ zc54($KvJQqiiTc-hdB7eO%r{LxjUe%ve^{b*T%eMF>qVKb$+w4wI#^E`s2s=OEWU} zV-iB=%&FTtIxwrNfQL@H*U1+SB#OF5SDkv6Yghz8b=5M?_HX@2Fb}s5SpXuvwlI)4$D!pTVg@s> zu%GL#ad$0V45i`&aZ?8g#LGNCKwpoDSEY;~aAAzRR*kw#!qMnL^PbZccclskf?1{JsFIL;JGzu;F*zYm;g#t1sP+NaOxI;PcTMQ67t4d?IA=@-6dAb92rhdD)cMfMp4y;^WwT zL|u5JNGlSE2-_nC_fm9l&`7 z`a&Hc1wc?THe0W^lE+&YhhNGC zQ)}F~A-n%uI8<{WIM%~m5Na_^xBT_ngPMT{WgYfO?whfEW~4h_*!UMu@rME6mtIL& z4j7CFqEr0m=zV+g7hf0>!itfVcJ~cROiV<2??SP(f#;uYgi)t8qTW z>;EC>gypHl$yp|2Uw{9;pSw$VWOO$>vmjIX_U+r$cQY~tL^nx)x+}`d%L~*$P%RR$ z9$l~gIgYf3g#u&l4pDg3zX8f=^v+X9=j@yX6)Qe{`Jy@UxXL zw>R={Zp@~IhPMMP-5f$2VIA$p3rSSXp69OT6d&_m>9&!+{x~Ams;UAFuk>yVzy+1q zbM;g9e89&zEwEFr)9|AShT|_-eYjce5|!^Qz%dpSz&WDb@r^e6q|!q4lA~QU40GzZ z>*ruWXnSKb$Q2>HK>EWCmawq!+~)Wmt@9xOL#|UTVG#8|w5mxais=Sn#k6!m)oRht(xme^S{Zy>)O)te^+^^aQI4XBZ`aT3H38jR;Mdoff<8n zJbKXqjN;mysruZzTMkQwRc!C`#+Kx(4Qf4@cNPJNk5xP{4g`NfG5kC|ZTcEm!k56~ zypRpCcwPjJ`0mbDf+#Z$;9`G&IU}Q|HyMvU1qT2+z;Lk_{KkcXuAdqR!YSoXW>*AN zD_!_oi`T<%97HF&32Lp#l!EBbdCv_eZMyA)t7KVog$OVhEE!)*C7|3}7Bnje2eRz> za_r5{S2}9x8!tpJI$G{@3QkzQ&xyLz$Yp{5P}HCU{c&kYrKxq1k-!-bU0!HdkDViC z^?@J!@fDfJLqmVQo-6pc)u;G$PN|#jU>|21LA|)T-qh3-KYqCAPnF}fgv2A_AEr+rnq9CS z9qQ}552_eA8lHN?kM~y&A3uT!AR2Ud)Tl>FH-V?PD*hEpYHcYJ854%T*DvSAi$xzY zG1cv8N>dmyXz&sG1KHyhQ{&cmQeSBy|1B(JTjCw~=9sA&rUylvdVKoG0xi1zbxcG< zIf*13)$&#cB*;+Ih^0Ht&NEj76%X_$q$VOp?g5R2y-y*Yok$=$q~2m^a{~%dd!Q?} zhX4x&sD97-aTXfh^y84KwbJej78P31Vqc-#K!Meu$|-Dna7sZofH}HN@Ye5@zHaP3 zJ6MqN=~cry#g+ktk`I{Rre-F$ktJW`N>2t2U&kUXbcU4t8o62$A+n*yFC#qe7Ge*O zV!PH{WR%{Nq%8gnoK+v@i}n!ytMYB0yGl^rTAb~jMxyN@&%U&DdT2g~;7+L4ZiAE) zaD$~zkqDxSwCx-jNtjZyV^V8jh*2;H9qsRW%G2xS0bg$v=qq7Y&)4!Z8e7bCrKsE> zN37C`uh{s&DkJA_e04Nkm?GyIz6kD7De%B76VZ&~-cUp;N=QhEq{^1gOsDT+w1~JF z<{=_SN&ytj_qDaC&?`~UgrE@9Ua5T@nnsY_A3^A5DAVuGNx>UcGcXDBk=eh2qWFo1KuH z2)%4bUcm=P)jY^9^{GqdF>GO=v4u$MuA z)k^?m9cvsW@74GRQ1^iWDnHALh&UeCOK9x?To=3`FgSP&Ql=-k(7FxSDdJs>7CG-@ z5a;8OP+t@lZf9hI3=ibMQ_-3)w8G3w08v3*L+X0@8DonUouA(-mwGh{Wit}OhLavy zDy+V{bpbz8)7X(J+xn}A;QDSsVfZINgrKC`xb$GYp}AR6j??ffL*W-9O5T8AaS<@t zU}!R!Qx!PgpKuQWmC&XEXL+id#-_?>Gn&1zseAIv7rC+xsDO!n@8Gk0!^Zu^l#EVf zee{0Ud*DO>`Y6ToQ$gVvak~{lEQqc&oHIPPvb?;-rb#9Pts=JJn`pRcdXtKZ3aUoT zuT*wV+C4aS8wVSE%FNdJpFl!g%v|&1gT*hmYFYeJ9)9mlyJmXR^tB@Hb2Npkt zUn@HV!$+&XzZ0gYu{qcd`If?K9v(FX1w2oVW={AWAwF!$*pKpK@ zzxi`%ui>}~m_t2=*F8CD*p=^7FtVYc=oN9`XGo~|ou;ESuhzz}92<8b#M_0CE>*?? z(uk_aXSoiL(tE5*#pQo61wH_h-5Ll%oe6?UJbhn=waG1IZx%Tm8Tx*dcefa#5E_jJ znj3hBUlY{Rs&vRJ^`uh6f)_Y6Y?ZSgs zox(ksN>eQ^5e4Sk*cM>mbh0d^{sDfQ@tYy$z%VR9ut~b~fX;QX2$s6Ra9gbzG81U2 z$%Yq0=<|L-(;Ekk4v>q6aYw`$K{)lbABMgK0O4SDQ?egk*`&nA$_K!pasi=34HDXt z%S_rS)LuKS+yXmowF1ZL1T53)12Wo6Qws}Q-O^-Xdzu{7Z5yYcXs2GFFS=Tb9$}W7 zZU?3D%lRg&FXjnh2Mha=?bial+X2}lwD(lm&mD8GBfV@D3=}&wxw`=<4SOWpTY%-b zFkl5N0n)(4!7)ErFaca=1|R2Ps&ppf1RhS#EpW)KBv&55(e5iSMt6!qH$Ra3NF&kU zSdDw7{TM)$=H_OI!DE;_o%XF$kg=zQitol&TfPq-dDnA+331i*jBl?k4_rUDENCvG zsGz`D5UYYvr-fwKbU%Oj!Yb;AH0lF$U7%OVLVr5J9{ir-l`H9Ftpt#~FeH>beS>Lvq*cH8PK&&Xir`MD{ELlAA2Q;m1#Z0xb&fWU^-~>w#JSct$wSJhw1p2Z zZXBix@qU%;{jgT@^8hfEKmoT9UElN?d;B3DI>W7Ct*71qV4>kRH*_(F^gollxKA_p zhSDaXKYZirRmird9MaptRGI1JW1xRX=;4&t^KY)ur3A+*ePO?VE_b8;i{S-htp}fT zY)d*@kf18pVtb-$?F8{Q2{qC+JqQi@KoIoeFDmp8RBe5$1d4o0>h9f~xj|y$pVz%H zCOAGTKlNJufh%H+fhM|Z8#WC#<5k1_#%L`Dy$d8%u#XT*K|Z7)YqVD!H21)S+>O*! z+D}6;pHOZj=mqVeA8x+Ha`n0@^>q`e_ZFb0Z{PavvXzppZQ+SQxYt5NL_{`}PRRj7 zBWNu@A?*zJBQyt5-TywLRD7#yb3PZra`tEG=~EyKMi3bbd#*H|VSk@)lRpB73_^!j zz~R7u&>0B`4Kj@9kS$K}&n-|*nfgNw!#a9f4pSz|{%Rx|91= z@Cx&@vdof_67Vwi{pqv#F;i2f*be#S)apDVfcmG z_@O;>8mJ4j=Nu08(Q*OADcgR;*28VT*l(I{_}Q>)P_E@L8QJqCQ7xY;+m8n;Uvj1z zSAg}9btkZwP7og|2&3<1b;{Q_)h8E(qK{Hh#U&>zi=zySfI$N!+D*o39{frYC$27! zir2UW3FDgeyriX6>_bQbE7t;dR0P1SDDv>;R`BG+DaC39|v2^ z(O(s2R2?q>F{HwcLwIV^wp-$~tpzyK5^ybuJ)k?~hY_o>mXcLhS65RzwsX!47n)G- z&2&(0V&Rh7UNqOpE-8uRz9&67&;cGBA#Gt%f2XNqzCm!Ag&!~rWH{=-rSJ4glQ{l9 zH%v~SKJB!tsE7S(1~z63Xp>pkx}z7E8WAF(f`AI|bLBVTcY<%#kw#&^kKk4@(gbdk z_q%iIz)FCTMJFXG(NFr-S& zqlfIYt1-@z~) zYN97#IhtUvI()J+mE)e6c@9D{4UfYO9WaT|x;!DM+W}9cqA7XQ=mJwIvQ73>yu?kl z_)205#X7*H{L8so4uqOa$OR^>Hah zOGnA7?hU{7}-0@%7yOo|3qCnPwRW2-+gu&-3$F^c#CMPzn1o-6Zg@U5P?{ zhTCEE(3l2*xn^S~A(Iv9x|Gf&_gaN6iZc!tZf>2IbH?A7o3E--5D=C0&#Ny0L_)?nQ!yj1nQ zou{_@_skzb0EX-V2A&T?fhq~890B74zlU_5!=PGFz%w^axu9mAh?-B0uYDc)2|)mZ zC3>V%0E*iNz#8k}7J_!;Fx3r8esfhrLqi}|*xM3lnFFN*kcN5n>)%>>X+EG6 zdtPY2gk-r_6O|Q|<>Rn8be@ciOmENpX;xks)UG_Ct<;{p&J>|CwdU&{;xKDKCyqS* z%+!ywq9&Awo=vZZsu+?B0uLp*3e2PtGOl%zXZx|bw3UHWl-6Wt;E$_ge#Vy z4zp$8PvQp=KGx%~Dm%i*T6Y5c0K0zh=SxUw7x-tm;^1|7eEf$>N1KT2s26@9;26pi za$C0rsoyMzS0}>#7q&oFo>icGO5Eerb;1jXG=34`xha;Y4j-79Of-*y*qvVHzBYg+ zu0Iy<=sZQ1X5~{OEDh3$ck5MVVPPQzl|M`6>+YF{bVXXwM1oSM-Lrtaj_W*L@S+xU z)!1u%X)srE1`YKH1X84oi1M;RMv`??TRX0@(iPzAofT*;1+s@PPZi43eLzwogf%|u z+i}D07Fhuhonn1EEK}ur`QH8e?Ok2Zb5UhTc_7UW(jh1xJPqhCD2xYSnFU3L9u2Rp zLzE>z2v)BR=mP#rBb!Y`rAa=c)yw;4cP2+CIneYxJYgDJ^I@Btgz|vwZUNXK8Zw z#>Pgde>m+CvxVm4pJiunZEs(IScbu3oUIUuc7i*FpwyzIiDik@=Vhlsf;k+;54A9$ zCe*{oDJh+hS~{U&`h+ACV*+!~1l;T;#z44J)+7ZfUjuz0-h0H`Ttja5N(23){d>c5 z=kKNfz+i6$Fv8}qtj7XEL!akj_t;o)K}Xa<6g1qg&u~C34xw7QHPRqHPCC}rQ9yBk zU?Ltc3XfKy7dQt$WL>UYjXlT6%Nw3gU3#Z)2IdTVeCyyz$W4_KE(HI1(*Em*HK4KV z-)F(?UPzTT7exWRf{N=%H!rp4S6X%CQX5$rxY%G6;!|-k@21x^kT|O(UX;|t;zF!* zIqykGNRxpp{=v*Z^b!k8-1mM9vaVN z)0%^P0=fY|A|lXdI# zB_J-?g}l-JJ=XFB^~mejufgJweMB1Ng6zVkAApy!f8PMewpGZ!)D4*Ih5qd0`j@kH2&qZA@L<-m6LHo1{x4HCa_<`0N zyxS~?`4u@D9QZ-V5nkkuGen1@fuboy>d;i6*+R}f2gftAbK{Z{#qz>e|}c z9*CVLz{o{if1m*_orI|>a-?(b>rlv=-0K&1r-8L1f-6ELYZof`EE<5&1E6+v-C} zoUmhl$@$o7?fm5*Q?SqU{O0KViQzuWK5~&5I>?OOMPp9H0-S-@g74WcjlT^7QMEf{ zd-m@W!D}Jcm;m8}fi)<#99G+maxZRBG>~3hTO%PRW~LbjvNqZ2(-X+OXo6^@VRu`T z;hvfwuyro3uJBi0pzi~$1y$XMgak!p^aZ?^g6-t_cxNwMD1)O702_m)cYeekx9iO6 zrldjF8C>8X#i2$G#}mgvNxJ3SXDH}~goI?~&TRjz-P8CX=huR`W44O>YY5uqwu9KGbB^(>7dyr`U-Wo|J9t*gdqcxCn(@V&B+GTU@d8@`O zPSk7YLv;@Gwee^NI@lksu+TTb!^a1Tz!l1L#;V1Oo##Lm9Jw66eUz*2=yLVLbob%2LmY8Kxj5MHPyg9ZQRJZP-Cw> zPMJ;w-2>=(a6plQcu(A3X3EgPXF=F`a;d9)Wc~NN0YEH(Rt;SKzA5;W!FtuzNmS_6 z0Ip$SX71J?0`FD5{wWY{bHHFVM?^(E*u>lcD#E2Dun~G`eO9(+fsHuo9HvB<1-La? z+;d#@U6bw7xG40Q*`2jpgVrX8{rmUt3`IE2tU4K|2#t7GJ((@W0 zM%)0Rq38w*qS|A}1x5g92gxPv-}8d~Gqq1ZT%E-sodFyLm=LKzK^_O?IIikiZP5E^ zV=Vwb02(|9fxz-f3(@%4$1UQAivG|7_&BYZVrmo386sltaI0*NFj*09oGGkHRwRT9 zuKH$86Y9pkY9&52l*~C#TC@FUpNjbKDiMnfM198zcR9`a^A}fB@4Y*!b01;>+?@kx zodyv;t_VV`0_6@!`nn~=`-cL2*)9~AXF>P&JU5Dp z-@F@AzF7_llM?C@5E&s*Hs6~dPv?4+^=Nrdv5DfJU(IZMNzq*H3|wAbMs&{k*y^$o zlESu=DCZqOzcTcw7w6Q>3|vUltsw(4kGW%ya|7^$ zMJnNflyhe9PHm#j<&+EP+ySW*G+Th#?camA4H5!&KpxL>qv!gw`=B&4n-hgBK&gf1 zs!oI$$~)(iuR|rakn@OGqlHSBlrlwrUVk)&q!Pq|^ckPN7ZITcliL2KRA`jE+|Fu4;jciuz$^72Kf~fSm7=i^qB= zyic^E41xAz==b}PmvU^Wr^b|HMLRI ziOgsRsR3(@_|_ud90ll>;s5CE)}AN3+y!=gb;6I~|M2zY;Z(Nm*T!wy=FAis5~Xd5 zh>$5m*^(3$kgX&^~aO5eKo_B`+V`;OoD9mn&> zb9C5y-}g0~*LkkB&ULvw27(|bFf~ack_* zbv=bt_|aa$glx)QeXZ(A^4iOYOGrE#E;}MeQF*;u=kRBT@%g(h1LL=an7=VRIzFd? z8av=zuk{oK+s(c*d*siqtj;cV>tF3werwd!Y%5=21K}X%uzihn2~hx+*z)sM;?_q! zD*k4qT&JE|Gq=J1>ur-`e0HIC2}IehlBtwc0zRzsS0IEGKK3})WE=iVcYkXTk?P818&)zsYID&V`GCn`0Cqt ztASeF-(V1Cv2qmRq{lKCQ`o2ChIanYjG(i{hVR#xK=pTC4=T%3D*?*9GH6Q4hK zv|V_=WNo_t-Y=hf{ddjO;Gf9koYG^50s@9R5*rG+^F$LaQ;N4&JBrt*?t&r8tVn1r zN-CFpu8U>|qAgMwBafj6prp^5*@k&P`98AynQz}BgJ7gAec|+JYE9^oSrOqpLdUCQ zdcU>PZi|P9VijDxcHZ30N-n|Jc1?2t++Z|gW9xV;cpGpj+W$(W?%41h*PiV4 zBZcj+c|8aF>NO*LLmne-!dg$vV{uU|IU=3%^>{6V%Yg&u)6$~3re#!At|L#=R+2-m z5t+*pvvv_=ZrY75mxtz~`Nig=sa9VPLdL>dweyx6M^(&s!E&*LQ}%!L-?tqo`Qb7R zi@>m@4$XD@960LsX=!PdaXaQtO{=jboay~2JjyXkAnC80YHhgIAKAHc@m7DNHx=br z06oQWDY-?(s2L3;-S0zIr~JTh>l}v*wIgvB;*^aR77-@}n~!SiTpjdWKlAJL2_+}y z`u({X+Iab5hdmyQ$qIwVD6QUD^8bMj~Vr_Ek>^gLjGH~sad@kr++g?={GA2|OE*Snuh>&@{5j7b95mEA+%gnzb>P@c`!+^J6j zK8Glh4UaN(TT9lu`tFQ|0?QTSt`9q&_AF-S_dNDDVdq-I#7w?Z?jQQpELHI1s3%)i zArf-HT}`YcnQIqFghJHF_?~HOqwh<%bGm^WF%pVzLP0wgws*zaWmJ{>Bs%x@F?GZ& zK4~DzPhSdvJ7i^LeeI4rYmcG2OyX=sk?-ObE-%}rh=bn~W_-gu?h`oVw+kKLJddeq z2z9z@zj8!tBrE3Fgj4zb`*U!;b6$C3H3{lC4vAV7=aSf?%gw4$Pr+(Ie4Z$yT|DlV zm%q1vvOl_5GS#Q$i#@U;2z)v_ja8PTl{+0Sr1jQN2_BK@>ajxt!DMivBH#c z&>LcjG-$Px1fp_FN5id}{~q-|(75+bxks1L*b`O5ZVdYZ7@v2ulv>*o2jQz&Rw zuU-w|$X8_2SJtNFD$e&w@dyu=#sl6|PTO_1@ET_UUyC2)wwZV9e1xtZE?6UGgsh8rSg0lwS z9#zwadHsaG80Coamz3NlH^sg?Yd%ZexhI_BlGS%-bd7koE9MY7mW7gUzYh<(xP`K|FqglI@CuV0N z7yD70Y;pej+vR}ft+F&Y%sA?890m}n9#~eV#yii~?gr2#Y`WI^nw+vSSNd|0SF66p z`QBUVnlkY5qYh3L;1YFyOOm=;TU+~8Sh$`cdzF-*Hg0px;SYHXpv5#v@+58l``{@F zWC8_dzalTN5Z@o4w@GS}oL8A9h=Q?l$>gP`+-x0#QV*feGEHeqk*&P9_ZNZVi*i^a z-%A(?sh$cq{k#&AgP$-T^+}Z`M++t8XOl%wkAME05W?*2VCJXAvWRK6Hu-#kb$0R2 zbDPW;J?76EE=}$}r+>8P*)u`<>p4`mRv;&Y!qz8s2@q2p32@?XVr?djBb)W+j51gk zJ_d?5C@83(7-eNiOD!?DM)g`VBtC`>#@NgE#wQ(;I^|-cFDt01Y&`OgKcb(P_E%63 z!&6TC5dq$4Yip+lEt4ENbM|Z?;LHgX)+o7B$=nS*TpO%+?}kynGHun@-wa6Uf_!Mi zUpDbE+Rx#w8J1@>h2s-k6xoDVNqH)Ecn1s#lxA|fN1pTu4lWBB|P-vw>{htAx{J9iEt9qNnVsi%Drb{D26Jg?amj+CR-d%WG<3wrKP8=N~f zrbr6nOmvL7u*RPx!dEqrDPEKeWf=C6q&)k2muS~61=pvSH=uNFpbmZg{nKApS9c^a zy{Q4+qd2MGq90+6|0qNTOL~VEvp;Jv^MC~=@S@?xM=V68^ovdl15rnZ3Eq&xZm%tT zK+S2#jx86pRhGU6%i*^mZ%iEafG_`^KEn(?CVTDleQG#Dag~IR9fLtFxRtcA z?|;$P@CAuB6felqp>RgBBOxySYqVXWO3H;VG^$x|GKG(wct3DMp$Dxt@)eiX-*ie* z#q3}u4i!>h$R(xl0l-H;(}(19=Rz^^n)_ZPNUl+nm1PzYB)M=Hr6{JS5E@xIIXPl= zvM5VF))Ye-jv7HLiPIE|7Hz34mCIsZqYN&;dlw!ve}IyJ>IDZ$M>JoF&x&rhs^IU%$RHGI7OTt2UG^PnMy#kX5JvwImZ08>6`u**7yAz# zs4~5J=5CRnqZM|nSf&ZKlfbSQCd*6Bxo8|lI(hZqQ1YXpcUudy-Sa;0X~;P5+0oJ3vDYzu1O1%QSXMZrK6>__2(CW zG2mhx)BL_MT>Sj1~e2vc(vb1-0;DT`SG2AQC#-!4FnJ7 zWWat>rRX#pUh5l@2_kMr2ql?hB*53>x!Ky^zdqeS?;drz*0NIbJLTo;f~OT#qyt6~ zbP&fdkk_}~xR97=jYJwPKzo~SGz45R&fVkgj=qnHH|4w{d`z2nd$~2>oM=>EEMOZ; z`)(KnXB-2l+xQ3d@Jlf3x!iVtHC2%{9e8@V6$SVQ0q*(B1qBh+ukP$S+jDX9H#%_8 z)`N0mw7uetK=co^38HyO%8X-RxvJ(Z7Zl2+6ZH$L%SCNb(-R|!wLz3B$Ruvvy=%YI zoV~*pum;hA_VR@STR}78Cehzr6DX33{wF~3U>GWaOJJA612;?6HAd{gNkythf1L4P z?21Hz&9V}AA^!!6i|`fc9PPSXArD|6G`C<1*5%RE$oYyj@kIE-d1E}4<3GC=xCrFL zpKx`EkC+StT%y;ZrwVlU;&sOo9xsXm0D=2qSboLi_*eaoQjowlfnWF>BC#)h7V*e*--Lr-wA z^QUBG1*28`&I4`MH(vqDAi0)>pbv;kFL(X6T!2|lWpvW4FN#F&MoFP%R=J_XjwZc?^t>7F2S-;!@N( z_PfF>nZk8TlKJ_Wj12Z6^1_yvPEkEF<>n&_1telY!=BwuPoCUB;j42YWSN}tv19t= z3B+Gp?q9RBAadWM%)?#+RM8838Egpdb=gubV->mLp~0QCAwNo>m|d8%2&-oNF~*j- z-l%J5TpiP9DuA62hpqffws=5}Joe(6gyqo%2x2G#OzxipYMLgtVYC!t(`h6#QLOwqtL1-#9wBL9jO zifA~C2jXW~l_iI=$zvKw1tAhxHDQs?R-(4IEyJbcVR*eQkv(f$n2YHfJ%hX?74;ra zZg6M&fn?&idyU(?`pk2Kz79rrdGA*;u}aS(i&NgY^fIPUxJrBy_Nz_2dq4yPfDD5Z zu66rWNad;X$U}ObKPT$kim>DrBra=hoN+F$uC50TjE|0v4h=DXvYcEB2(j)>tJJg0 zF(fNtSMH3cZHP!#DW@-7;EC8^Y1vTSJP0F-VJP{0LOwh}+JM8>#TlDUL)FSdL0Vm1 z9gA5_P2krxTrSnqBwwP72!?TA_IPuzf;l&LMi%8o*oKV7_S(%FVx?m;me)^0J5^ZC zf4K%Kk$kXR0q@C2oHII&>k;+m@B`pBv0gyQR3M0B(WkWE{$rIaE>5}QT!I%?#S6Qu z5tb#pl)d(1$W8Bc9|S%KK1eW0;0)7?8=R3*3L9}Gpbh&TG$`W`Q&d>xLclx@uM_B$ zPa$!-a`|%qZtBtiFOS+4{KRW7M;@t>GVuQW*$Wqv?sMeULnDK#DnVl7@f;-w{l#m8 z_(b>w27m}04hRUH`*DrYC}k;b)&e-TM0K|@M12?-WXeRJ7i_5d#~Y(Mi*gxn8z*Qw z3lu~NCHY!4BUyV{vMq9sy^bLZE2ysh3UO5Ol3z?~2Q5EC{mhTM*cScbvR)i^-@@G7 zW-jd__(7Z~5RBh}E(NJJp$&FA6)&ivsp0(b#7&Y_y<2I$YEtW~d;V8g=d0c@0QTV% z6FZsxL>f^R+|PyV?07DAUv)@PM#^{m;BQ5SL(S8+3ng ziQ_;rm7o6Q{A^bB8niEGCzBhihu#GR2X7Z5Xy=}u9-}||`OTo4Of|`A0Q-e*EI5Ze zMH(I5wMJEyx~&Ig5$y34|FXhKg)m{7xKrSj`?9{}yQeCULbQrUI)e+g(;A(H`lhTq zFX61x7Eb-#^75IH$7k;?U0Lf> zUj2~C{yLLxQlzv9Dp1)OyROW1-@Ar>eROX>gw=1;C1w)U2OiW7R;pRSovK(h7cGr^wHkaIAd2Qaj zIrn(OvNgwk&%(Hkcx|-WpMaJs@l6{Df|g{N-cRU|^em2zpBd|7wmS;#4y5#mSLmL3 zXfyuzFI6KsGn05XMq&R>g=q)DB0dq3*qULr-Fr(7z>07@!hKtOWCeoW1StDenA2qA z#tu-n*bj^!8}@7;$jn0JyHezQXP9R?_5GOIAW_$7AHF3%=pX?k@^~?f-+XWKv`HAh*2OP)IUa?*ohg(0B zQE2Vj@QHl)-VTG(wa4c}acdnCeuS5Sj!@|4YW*a=AJ(dC!ld%nojU}afn!J|kMXwX zZE{9bXX#J1Q>~&DX9MJM-NL?Mb~!UQ9Bwi-y>HLniaL8j^UVXxZmaFvdkFd;31)7E zz}<~^z85A&9$+&>5ooX3a>@HmdJFy+ZVA_ZgzPgK7Oht2+aC1&qtJ>OY?1E1)iXG| zdRecOGVUM!^5s-{X9@~eM7NumJm^16O*EX{GrVi%Sfbm{7Fm-{41fqFn)o5#zBPu1 z!?}JboMn7f;Han9+1&S%H!wG6Z-mE;TK9MF%VKx8_qUvu#cD>D8vDEr+xG9f?0AuL1v?(=BGmQ#{z1k5Z z?*PpQEBXi6bT|f)Y6r(Wn!z%4&p1>o7Zurl_Jfsak!^m?`t{|?a3#Rrv5T+0eDOHj z%=iar2cCPmBfNA*5iPMJI%l!3hZ&9cGtB(wdNkK?u~q%GreVi}Y?}d|VGca}x@#Ag#SFDg`3j z0jOmUHVGRKFTu&n`+o3$JSr(rO0Z%Ix7L||4_D3370CFc7T}-^X+3@b&agazLtNtQ$|9ZG-Qw_mMLN}>oUjinfAM{3KGcrq$ z+BV8e*ami%>{ZV)$$NMu)*TB)f(MqpL%67Z$HVE5&z1K?-A~$3l!A#s7Gt&Tk%>Wb z?>_72#Z#yq&o19=`n@KEw2!33`1jzxeU5`Weq&?2T>~`{(DHk8TLjM-RNx646^mY% zd+$P~aMiBJ_Nx?SL&F%Gtk7bSc^r2Z31`?5lz*y461D#}R1;`lD_LPXm$Ga^WE)(s z8CLQ7CMyScI0)9BIsZmlMTMtr4l&-@@6V?j4{C3Nc@cjhyuDZt2QyAWNS%>~bbsMBwQO6E$Z6)7bX2VpgW6 zUjxIz5}-yQZ*6>gIhy&cqdRW2l$`A)UdCQlTDb$j1VB*ICy#uerh$f~*w07Ez zBYr!gB@H3pSlP9 zmFj@9mT7_*B^JB*d)_yHj%4+AAcehty7cFnm{ta8-|E7UcklRaX|^2kNxT-> zwUnf!b9*?KF+=EThq`{nb^EY|16hP5Mw_|Pdk!wPD&^6WUo>a zD=@_vh`!p2JRE*BVO#;Vt*xG8ow=*xH-JYoM+yNwRW>fTyl|lp2p`Hbe@8D>q9}~^ ztSKz?z`C}P5%GqC`C}$IlcW3|^D-yz*k4=-54Fq%k=wV(h2^(jy=Fp4XY7jZs zRoB3hEK_Yy#miy^qTBzFne)Di?7W5$m~}m5P4oCk_Og!InU>A9`7p_76^k_@NTsaD zQue%t(RizvqOS4-M{Xf!fqw_ikU^$)P|(nJJg`eVr*p_clS#cgElnseX8m(FV>7d> zS>(dl5UC|gc;~}Ht^pWho@CthUZ0-Rvf{B(H%z{zh8R$z z(d%*}2Q7O*F_p67bSr&^>`gCpmalrNko85wYpph8+wN_n9L1{||BqKqa8)DmNQxSa zH3ReW{l>vtGKc+)vLT8~gIFd$%y6SSj!NX=c~)TFK%l5ely^CP@bVR11cX)z@!Bg?JzQ-JQiLwBjD4=W+z>oawOb8lcNs*Z-bxMf+7g)W5wKV zep4588bHcgOFggZx>veP_J8{YCqg&(`EyAyFS*_sHol0GXH!xlxdNK2&WCqK$8J+wpBTIK{|Im*ndHrR-fuV!t*jFA@?3#UsYqMJi|R1v3L9=-&s;FU zp2bd_4@*;Ayl{wz1M(uIb4daPCUWP)o&WD(qacrC<=tJO6XI`ECK#z4LZ#?kL6e)~t&mms0Y#_fqo0^&CMoE;8h${O`<^cOVV&#XXQ ziXzul?aY}oxK=4am%XkOff;=z#3v_D18JB>?mom6fu>fjPJ8rIR)n$r;!LE7MHHZn zm*RgDwjmY3#!v>?8HI91B;Q}s=oM%cdwoU~U>gE3u~(hSVGSIMpgJKXuLxU0Vo#)S z8(oPZwF&UQ58L1Yc(u!_8I?S-f{B6{PmDDgFR_tjdi+fw;;*(vAq6)oBjp=Z^d|F( zyNE|^MEsIp+QXRA$)qfqmx-$%BLMRBA2h0xRaNzc)~MonV;wdvhz?k(`7l!3aD*T{D?Sk*0v+37+gX?3G0S)e>1r7i*Ht z8s`N6z(BV0aIO_6aVvwQ07)RrBey%_3}ClOF(A=*Cr_J^O6z4(44tvjS?rn3R>nXF zkM7|N_fpy1lfo8>CyxNLf{h};S-D{GjDF|n^$L--FoZ@6gOJ(ENVKkqh@8cG9AI*h zrhVcAva@V$-%I!J>;9=UuB3mxGygl}xq#yanYf%$4A8J1P7;T8nT=Ol6NUw62XG9q z%*$&zW35QJG0?ERW%`o&70T>;{ppHx3=Clm8;lL@?%m6r5($vg=rSr&m4%x;>M=A{ zGO0)#gHcrzixNlo6Wk#rQIm5GTY@(|fBr25bw1(A$(_br`OQ_JikkcS=F!_-5yq!g z0{&|c+rxJeRX6Vy@odNS?ngHfPwfshKwQa@AX?pqhH z6&o1|u1pnI#gRkM9&G5TWHKtDy|#xNDo8^6L9Gv>{ko|fgmX}z?(ePO7vZ}UCB&0S zHj)LC0R_1Gwn0aB+I#Wyq9NS(&>{JYG8_cME?w3I{t5ZtkfMv6xyPkwTUn(G`bR$w z4hl$0CUCKzuA>cEB0O!py}c#n6If{D+Sm*Q7ETBNX1pjMIqbFF)YuOU4-db3{aP<* zl0n4$BESHEl>LRC^!H_l<~toUuwEUtjrIbmwP?aYLVGGtfURvaw#>}u*O6RST=eg6 z1z!W=5`d&HqYMx2Ni7)cd6BmR{H!o|^c&4~MEeaDH}DZd)a8d`0sI?WDS-E~(0{=S zIX)-_AG=$Ux`zS5$P>h6h9qsJp2&oDnDClJx`t>@pDg*?sF?v34Hasj)!7p#A1FE% z3LAasXu?H`b68tP=_3Z>jZd5b2zqtbgPOH3xG^3m!Bvy8IOt!04$+OUJ$uX4M54{^ zMlzfw;FZ-t4+loGMzoDH5Gjc&UkVk}XG?F%P%it;G5zc#DM4a|@<`EE> zKgLb7s9o^1g0!WjL)^56^#V6?CxgkbD245cnzk+gl|UlkenI>l8}08Z2S0s6SLk6$ z`5*(@U=`UoIE)Pp7_Lt-r|r4UG;Ff(6K^HVI2O|%$p~}vu%lxFN^E@18v55jJg|4) zzU*`761W=MzrB9~d0=$jApLir?uKU`_LW|efI=+o4S1VRE%E;G{^*zq(lS;@ijc5RZkyTP$2KF6_h7<3#uCmkLJ_-2TOK9mtSexgq&VKm^=R*S4VYbp zPmngRroZWoR2Wzx4@U)U@tbR5+EU@GDj|^#*lCcdUXK3d?N|gMXw8N`C6+d4PxnBe zfHbj@`tP6M#c-o#bY9dveLgDD&bUTb_gP|dJI+poqQ0;gFaRh2{e!1y@z+_sS{Ov7 z3lT;;B^;JQ^syGXt_WW+J&bG+Pz2g8~l;~f@hPIkD^U(IM!)Fe?J% zk)0Zbw3W8u8#FW$5)%LZu>oeuWXjlnQn;TuSrfU8dFj8-O|~xmSW7huqV09E8*oL? zmi1JBO6cq)kwp|PqOYCHC*$My;h;(qsBa(^j*B!F$3+-`C1st%0;~qghgPZz15WzL zJ^fd6LmwDQGIkO|-cD_=?T}jFafXJ5e8Y_wz8tIgG2mjHn;<0+)0kV^+REgq%q zs(79rSp&9VE1{RwH&krCHFJDGD%{f>i$H|a2qD=v0YN!F%sV?}~5 zfdta$-*0B;=9bb6)<_c1hA{&mnW4gI`j8oaotn})G9`zMKY|EW5h4T=*pSq+d+qJr0}?99vI}1g!I?sZs&uXtZOzm`?W=}@$c%drvU~LH6Q`0v(!$rm(ebsB z@Uq=8v>8|hrWQDsPLjAWE&|ER8$v?o6K+MHuVEj5|2Y)cm|CRJ$f`m)xVY5&Z^nZ9 z)wTm9N#bc0p-)RZZX!U!*)nhI`;`_S>dwNg0KN8nW|o6saT;YFg8{@z`E(Gg6rf@= zwSJhkfhR|BS3SVM`mQsS{^8i)3r7`htuLafLh0vP#42E5Xl|~fUL$~e4CJa+ydn;w z^Z^itJ^>Dyh~)o#CuBh2N3@HDCgmaGNH}%sA*(Qbe&vjDFhbH|VZn*&kcSBCEW0r9 z?>~Nw%iI1MJ+m1JxQ{YON=oX$%{*rM?!iqem(X~bBrqCAA2#e@Bt_cAX<+YhW%(iO z%*mZ0AtCX92E^zeX~cKBnAcJ3B^O>3h#qvL_z0-OE!Uln0EHy77epPAw)XaFXfF7k zY!_TuEquh%0LA>DUj&YVb=*X456dhBDUQ1%;px*qI(ip258w^%g1LqF07C5D!d;aq zL}F}e1R`-BXBq+zGks+My)Hm4tzDdnJ%s*~@YX`RB7uq&l&`g)&|x(SfFo%0J$ei* zN(SNF!2ZY1ntp^%!nNWG9v+{DBFaZ0k{R~-u@x2z*+O(ni#aV>Z9|nu45~9X6?YR$ zK5qj&3Q+^gk4r#|A&t6KICnypz7vJO@I#3lnHQBwJJKP$OGal zoB!ECoZ$K~OyWrb?zHex&mQJkE5nWTu-(z|FO*Eehr+KY(7%|2XygNgk2Yf`gA7`t zJp6bs7^ocw*|9tM0yT`8Fo4FT z(%2Z2U0IPZ27%21!jC=?ev)yA*g3RJ16_ZPj8@Nj303P7`_ zhDeQj5KVxuftTr|uLY4s52R!v4FqW;rL%J4;Vov<3`i*ng`-w@5w6~0)nnRVN31!S z_5US7kTD#D1YyawRAOsKZoUnX#8`gCmq#L^duyq6yL$QRzhRmnDZu5`15EXyv@g(l z`s`Vq%jNw1fjR?Wz?=dk-_W)*(b&jj%XXkmXkHHwxz-!ruCj(j20|WRzC0-Ehf}S5VOpd<`apJXmS7DNI0t2WoVp}OiL<}Dyjb@z*^I-V z2%0gW1g(E*Zy41Xjc|b3P__qv?nWMXAtR%31x%mIY;&QJ3TE9h1n#ux+O?Gda^q=N zn<1EHUDAfTq@hoH6zI8BS=o|QZAXfg-a2j34so6j+w)o=3OQFJ*O`8W6e2-F>pFsn zblZ)ZU&Rorfgb4EX?H2dIRt4l4m%^hzU!5$4++7$rCuu|nD?Xkh0MC~vH!H0i-Rv6Xv-?!n`I{k^sJO`14;&PSr_Q?s z&860{XIFR=>{soou`@-lw985L-Hq%MyF~3Pni7>N*+!b!O=gpaThXF9`AJfEH zK>euid9-Ncfmqv*?Sqx<^zkMd?rD(T30i(P9C~F!Le;jooNpHWIOoot>o9PEg%`(Y5U%}Ue1O+Mn9dT6);4k2?f(J8U=Q#Xl%=iOsKZbT5R0EvO z$_%uKB@VYc8myIZwMw^HpX^SvL7#?QZL4=)R<(K>C(2=#mfF$NP7_ zaDbDFL>=4j6&VCdpOC(YUPB8A_PoMKQdt#i;vT@Yl#g|6o4Ieb;mv#6`d zEo|Cg5jfxQmqbe2>w9R4iG5M|Z6_62!L<%H)=hsN^C$T*h%h0dz@-X-G@-MSY7w?WU$S z9>_Ud(Y2_1`nJ|cGm50hN7%tmgN_xu9vM=!wJVVG031q;iyO4KBmLjc#CQjbciZ>Z zEzY_$F;ng&gyFv#B2XCRpU~Fs*6eNBv)sc(`T&ieaYSEoVw*D?EZIx@?j6??x zdl7k29`q4P^-xob^KM3;6T?V*10_`D(52o)T7> z>M~pMypZZj}q6$e&W!IG!mxmf^V*mO3)GU;SP_|z|aSG|O?x)r0;^FUb8-D-(O-~O@ zOo91XmAZ;&l7AW~toLidzTwQy!lu*2jT*R73?gA1ji)}|<5m;1h*B3L3Nt8J5oc*= z+rJ-*>*+?D_FdpXkN`tY2bU2-ChsGG=-p8L%oab1ds&X+pRujTv?H21liVtU^(h9> z0m}Whjt=+D=w~ZIGyz}(gUiHkVg@)m2{i~p7-TDhJYJ{S-PAa_xWEwx{GC4v0QG-< zmkv@s$jS+Ss9HS-N5{zUFcF+aZkq{nRpiUS*r6*${EloWgbR1o9srg7>wLbH*|DgJ zL8^lz=pogJo;m$9E7}{Zt*b+SP9dnl9tjo#=V0j*`02$s2%aF_=s^H}@b2j9>LOm^ z(IeaD=LH2&tYg4I-Cv{T#az2~08zEhUvVspEQH@d5ZZwT*(8BM`WRAt`fC|1nS^s_ ziALfwX9efo4b7B8wLv`|wnL3omu4*JgF!!A7Mm#oBAuz#?S| zbl{^|glN`KkAcPZ>X@IRmRE`R{!LKSOo%ytz`dQ z`%K3Hf5AEq?gqS4uO2=mTr@HF+3Sw$_jQyN7Lat_oRPN#zFurQzY0rOwX#)FNy*RG zci{R_nMPjSg43@y66Vb7Sc6|i=C2NCh9zRjJ9KW+@8`>2na?&|9 zSPx3AM?LJ>nNvrg2aGbi>608D9`5jUN}isJ#>M(Tae`F5o+XTHI2s=>^WgvY4M^>_uT+Ex(y_hv47 zQjLDhUY!^<1Rtc=2!Gr}9Xchme7Pqk#bHKm4_Y+QR9t5*t=TAB2E+oHZ+nJn9+nGy zn!~=Lwi^deQ}<>YIXItGx%7M+1IlXj;kowekQk+I;Zekl`nuDI?k_hrwG5Mr(!1F0 z(zMUV(dk_0?~miruZTO?`en~5CdW)nu5VkxX~6g|9ee^;_C!`1-_o#^|7$F;a-0i zjmLNtTo4&mF5T^7;FaSDAGDS7@~ku4xtuY80NtBc?p6dk%$A7=!b)2UGH5C%kiW&G z%e>lThn1}#0>9x)u`AJ|h=vGX#$2HWTjukE?q-(Xh&7BXs_sA?^VY2|foLFZ(7$Hc z0_z(Yo=UL3B(J$hsJ#(&@T2A4IO2 z*sVP{i?J+;NzRMtHn+5lq>_JK-d`h6-MuIm44N}w6~s&^6CUn~%AMT69ng(YjO;o) z^TitExbO-G=jrSs;!+gaVPsCjbBEjTjM8Z^fWb}SMz|mh4Jco=W$gR&>e*_L^a0xj zIS%v2uQywn^o?MG%b(B$!W|0v0f1q+Ofx<%Zqk(Ydu##QOOGP@H>aP=_h-n*-k(T71F6UdM50Vz>Ig}RKN>a!e;oN>AFDifz-*9D;BfCsI z0PE(wi^*8L!&cS^p^K0e*ezXq?Dwk|FYI&t<)S?Q>#vt;P=vw41ROd<+=KJBw|?4V zLt=&}3_t-8;A2EW4X_5S7@Wk~WUonXg))cm^1;Cg<;H%59ki=`ILJ5}VVx-F6Bu}Q z?Ac!2>sBk%1Z(7*l5Fzu@Hl*UwbD{6j%@J_orqcpOrScn z11HXbpHC97r5&yjtK8JcF+e-yvc%Dg44_-kEWZ|7qlAz*HuZGIhWK6=D1QlDz>LFJ zx=YmujSn;qr7I;p-5!M^2z4g|bMAkhzVj^R63U%>2q%c(O?#rWlgC80Azw$fHB>mZ z4Icpn?UR~J+u?knGAX&TfN-I%`Ua!hfB+{PB_(|XoN=ir6VMN8BVW5|7<{TJD3HuJ zIB3LPors!PCDK!33n3{2eLFHT;%f-_=(LB|?>~RGUfT{9Q9(zi62p$cMPCnna66;X z9)R7OCk@!bTtgF!5f?DXB*jVKVmdG<*wfa;o|c|9QfP3dKgDaJ(d(YSuU%tR=+84M zKT{W=bD5NIa|;XNzC&L-DIh3IySiCeS*-zfnVFDxOf6Uc=Zn^Jyo!en4rpu?r(9=? z2&`BxD+~1Zu3ft%g;Y`LU9!|4SpXJssM>vI^)Q?9e?b3ITo8a}tNucVT>KFm9er$Z zgVfV;S4bVfEC^T=_S3km(ATacL0mHqk0?e*v}IBlxzvu1v$E0O7BBm;uUa=L?hJZ< zAm9>JkTfd$&jKRAC*#fjI8K0~4iqYG!`)Rh-YQv}{&hDMQ>b=!QR~+dF!sp;1zZ3H zqDNavf9l&eAj$;k#VF%Tf9>6C6o$Zl;N2>Z|J7HaETT^ifm}kuCMmRpjYpEeA(8~1 z(kQ=(Rq4)ZNJp^g9>7tT5Ueya(?0`^R>`$%zILGyR9nVvikG)opgyKnivh$qhla=M zYT|ajZ{NQ8s;;BY+VT}EN^JAvd>?eH>!3XL@$*xw%wkuiQMYv>V%Z5eAt6deq*F#= zcvg(|TL-;BI(`2!?kFiFh?ugCme$-_K*iNoiy1)n#UsW`Jk~)kNQzj-%htBGv=r`o zFpoWkM2 z+}K#=;ft!*$)JUmzG_<<+z?%YuAbc@3wp_k zWp4h~t@fiAPAf!41RssBLSN|50vQzq5x4O>P@Ta{(>FDlpFXpv%UZFPKO%S_-Gw_~ zdhgq8itxqVAh;?=Z40@*Kgi@A^L?gB;tioFAktNim>JI?G6pAW=ILoi?X8e z=l$_5*3B@C0w1wRP%x6qIIM{i3AWE?;CyzxY+{gsupb{cVqXXZ#z>C2xWIW5Cb{TZ za8lrrlhg39a#(`!b_Zn_2$$a1Uw|kOYG{^0O!e?xmKnZ9i`=}u!MtoM4MgeX^cx!k zQSc9}3dJ=%pzE{ka4WoKPc~Q7JOR{}S4@q?ti2IQ6U3-EX|aPhFAT``l&@%2CVaRE zjmrrV2gf*2bckp=+S=?Ey@^J=4kBEZ5!+xvOI*!m6wTS2s8FYeD*+e%HpAV_z@VY% zS=8jtq>v3BXLMu)G)n{NT&s=aHPK`nFFs^L;E5hm)eW`!Z)yDd!$gCW;JSF@U2<|| z5dEOS3PtjQj+W7-*eF<&`tNzekhLXAuCb-=rwN}~VXkXmU?p~N2t5M^Kl_k__$fqQ zvzH@Y6ua{W+M~?c87o?`$WA=e7EoB&)|WKJ2F3j$lWPqB^2= z_Lmgy4{QS1C)A|C99K~u7R%tBt60N61fy|V`}|;QQnCHL#3QHez3jq&1Ox^?r20>y ztD@tA9&|6;7S_C)7)jP7R}Xn8I<`={5*K#tsMOfURjU^k+rLxUnlv+r@poFQp|NPk zY*C55riba}4DlpLSP4yp<{J1mV6FkOHnT>R(3cXCi=0mGgiNABclGG|_h`^29IfL9 z_o*SsoX^bMW@i_G+8XG(l14@Xm?H3ZK_XRuknz0>{l>jlt=nFiB$rAsqiTUt2}ib7 z2j3|?Hf)qZq6d)^jc&EJvp5p9l@4MOa8SPP>9I$<8gf2pfdC`eE_$*Tl0=XjN6?su zObA)RjZSB^ikJN>_2J9r(6995-<5{8UhJZwLQjzF{s941gbq@Ac!8j7bXG$ag}{f@ zE{Us=Aoa0TDRn?PxXr9B&CO4gmun>n2s6+RzqW&F=v#Y@G71S{KT{V$=$+Zfok1=Y z*Y;8(LTLHHqiBV3GH_s^M+wy%twFGN#wLc{xKB7u^|9ef0df@gD!n%Jx*43&ws0UV z{Bd4u3+U>%_h+zr7gQV@t~7UbsjgWgW@b&O3z0$kq?VHD%XPPD3a&$j4)4{aOG}-k z`H8spvMpuI4ly7fpO@w9XW zUJcG4)Pe=b=CBt`AZE$d@I*VOX;t(=h|F+%pzET}>nH;N?tKR-G#{djUw+CISY?4CZBlq`XLl8GamYt*H>AU@<8Kol z^mLvFj};poJy2K+deD93Q5q&l^mB%(LS%n@E7*C{n6qck@@X-E8DD{(a%5reAW6VQ z34ng!b;s^~Sz^*OBMyg_Z@5kXzqn(r-_!H3(-YxuaVx$5g0-P9pLHS##cH#NAU}V2 zc|YTvXIeYz@0}`yHx1#f%w{p z^2?g~tn-81<^a*O@tVDV@gG(Rbolv!93iZS(V<}6eU{l9 zoI_mR0~c0b`ayXfdUjmxVI85?x|OWu9RKpPY}G*t>MG#aRNVXHyh9QipVkFCl}7_Ujs?q*8y#YG1W*KjAPq=;xF@YHQWPiz%Ye)*ng z=&t|6<-hJX*RzTiIOfX%R!J&VUFWaRUe=(m5c zRirdL_!@y0pG!?;ac6g8y4+m+%FUyv3n5yX#}DwKUZ5VE1l8ouTa7(t&uZqk@Hb!! zSRcvzgOsZSgtr+-e3T~OPWBr118P7e;42Y?_3Gp-2P;C)Eum8Kao#;;9D{((2j`xszN(Zn9=@K?}N{mStS}03V(}?nq)BGV5|A{QF+2i&nlhMJ<#G6 zr;BijO)gW_EMiXX6v9p6h1ORUzIj3oP)FJP!B)GYbfLLSQsMr-{2exWoDN?dt96Mb zack8|>qp0SFa?E#tf%Pc^t^a+7hM+4x*AdyM*A=XBUxGyHr-Okl%p4^8q_PG98mX( zTW+>?-jaP)ft+u0Rd=nPps0z)o$P|o9|gZy35DH6ZJIc@*`{b0f2?et$G0D-p% zp(kw4gAb7Xb;{v}VyY(3RR`s?Jz9YRApndxM;)1!(>4(IsZ8GZ_(!2qCII@>GzO9YQ`AbDX#?0^z;q%^Ux-vp0o`v&as0 z{_jQ{tJTFQ%yn+|#dgbmCeWx(JdT`AKkDg;bR0@Dp8!?L7o|9B(W;qse}D2W3LmiX(DxZnyM58#Qw?p4k2F7H z2!xar);~)^b^ag6!uni8((4li{{)BGyEst#3mE{~^t^gyJ}9CEJgOapQp75wZ1OWc zH1NV7aZ@~@Lw9q#d}%iJNNJDC*6WgOIuJ(MsTAC?+K#XSeLvhdQQa#93M|e{fJ;~@ z|HaTLj&5XKj)nGX^md`~68oR>I(4O^aQa+tMA|hQI79ZG_bj*ld59x)KTcxEH6jlb z+h5C?dS3zJA$B?A$C;_A!RwR?G(ePB_x!UsGIS0Vf296190Arbes9}$Br=9jciz1E zq4thl$Fc4Ct?(jgVrxRep=f6nQy^vd?FDd2Y#*P1D_^_JB{o1M;s%c1Q7Gmk(qJU+f-@YJFeVuDxD0{0mXXFeiVIUnLhuy+Y#B`)^I z3(7@PEdnSmI6f7zjR0FVTp0x^h2%=x%MLhgPSsUCL&b%n($^Z!l)+%}kYmJi4YSj8 z%A%qol>gdZYYi^LU(9(AUg|6TrJ5=f8lc&Qx3sp>W_q%E1lk1Dls?@-E1W8lH@fn9 zEqph>bu+50?RWQQoZs2ubKUHTdspCHDl&JbI6Q%7IK5)~j8S*WZl2P}M zR<}?Ld2H7Odgwn*6j1cXD}YoB$XGq~7`n9x69E_&Dg9^u>5nxuGD3LkOODh5BRQ~t zKXfy`jE02^a1ts!q6o3wl!&g;895hMRrCWuJtQfA;`l-lsINeT;Mf&JE63?zFF4L8 z26@k;tcN0D>y4cQOcAs6evwesS8jx63y@CwXLb5ZAT>l=G+&Z9ahEI%tmE=n>K1-F z(%KY|D$%u{;qp1==n zH?@QGNIW!A2VT_SSadRtyg`Or>qaowIDu$A;xvgVz8=f<2Pg#UAKc&Ig=L5R;De!9 z0F_A@3D5@-3hTm=g)c{;=H7AcWZti#4fcK(?ZluN&67`UBveG=Fw&(h zpy1ocHqm@O@}O9OdC;c#_t{P!Vr*44i|Z2rvg0c3TjnAz#eJQ(b8`A|iwGQxE?cZI zOrxsBHn3m*Ukr-R}25CJ$>1Ayd6&3hV|F4*AP$`<5t=l6petM412R;AVFOWQ51#uFVO2>3!>bKwQ;FP45U6#Ov4Nycl)|7 zMPHhgG=*T3XjjzwqlFBDQ3fEXNRSvTxtD%R|L`hho%o1A}33>gDs0_ zeLt&q0>YFXlnr>epv^|=bObt#!SEDV5l|9vu-82b%6@7mA= z#nm0SG60l(fCPJ&w>0}9`Wu`$Kv?ilq97%{1IZOpF7%B_K~V`qi^q@W{=U-vHk)<* z``;@bcbvQm?F%!LPh>nx&noWC+R}d8%d%)7E{B_HVQyz*LRK|Bn)X|1d$(q44B35) z37>|5fRTV9X~VH6dUHK94xi4Ys5^#yc`|pZ>c^26J#(L{FMQwj>Gt7{*UMs8cCO~j zDpl0dToO8Ih?aQ|MuUP}9HnwkAo{wQrj0BIJ`%1 zM8idRtVpG(P0~AO3Gqdo4$(P`w&%M~H-o3dfY+L8@Kx%t%P|*efGKDk?-)Dx{JTGRn-%C?UI2NGhdBi6XNiX=fBAAymA_b?f)^)bsrD z{_}o5@4wvl{k^`|IIr_O&f`2z+8WUtp7sjC<1qpn+j&x;*LxjmER~azxW3RN^kSDp za4VgDTd~keyi;n}7F%?o3vjougQdt)O^Wh;uTjdrT}7U|#t#J9{Mi|VIXhik zF5OjiUHSIo$GD@%cp=*8am&;ch;>M!c1yHU=gf<4x70~IZ&`>_eXxs02kdBwaQj2F2^ljFZmJVCER140 z%UcILk!b-?$v{Wfv|kpm1wF5~s80wo8!Rj=C|gtRVK$=0OWeyx4g>bhlv=gx;qFaM zOZy-JisGF*{bv2D6JTed6fU#cCVQpts~RVX)8Ho|mPd_~BMuzMGbT?M5GmSL`ABZN zJae%~f}P29GhadmsNxzL8t<=k`ggOJ1h|gm2ptmzu<{s4ZRyha71VNkX{(3bu@UEeyiIB_wr2afj*V{W@bebDvg2O$&vGUv5g*x>z#Uq5{VG*qlmFQ}Vg(K0-LC@ljJ(bV*`#jKOsg|l07LwB=eAE1ms1tfiR zKhD}%X$|5|{#{GdIP{q8pvAOSTOggM&mKB0-m_B)a3`ay(49&qb0xByI2vILAk$Op zZqw6h^cn83v#pT_RY~3x>f#P!=&C9{%%Kah?vW zi_OXs7++U;(w!(i$fAeY-(QM3e}07xcd06a8F-`NM-D%lhh^=tOiE5BDZ|Q8_eBca zik@X`be&9O+QZ9mL*V(=cV0?j>Ar!s)@8kT3C87N){J0j0^%P}7$FWt1u_^C((KJ zI03a`oK2$>E4CmeK^Qi;aW$3F!XEcCG+3KvL?r0j@D&0%g@r*?I!A1Wt*I5+ITR;lCtiW|eWy>0 z_$wcf#^4zO+sc1FgZ`=)HkWD3Du`_i_3Af-G;rO-1YK0HnW9O=Z76T5pR?CNnm9dT znN9JH(fiWy1(M&udgTg)>KnZ%jzfd_sje?pKlcsg z-q^g7+ajDeKvEmukG!fI^b^T=>yH{`iH++`O!BT22&Ei>!;?DyHn~dfO>}a&E5r;| zw4OG*EeYwh$VJOt4=#F$z5LEGBmQjd)qSGr>`6J?bGv?@32}=JCq{)sEA#c{mH2Nz z^e$!ZxO%iK2Gu)R{rF~;SyG#Dgnky5XjOjS$rztrM{2j_28@TGKb*fXw$d$fqW9p7 z#_>pqn{ue0sdb|2!L|+0V0BcLsp$V2I9+R&@v`wX5`ShFoVCv~fM)EZY7*i6axq&{ zjy$sxHxgA&OF3n?N?f!lSf6QwB3~5lN(}?ohL92R9bLU9oZP%QF?W}*fQ>q=gf_OS z+i|hHGfN+bna0+IcGii5D_wL$=XQt*0(e!W-Y?_(S3BIM!|k}GvR>3}#Yet%1$9oY z4C-z2+|0S=Nm|#y3r(E4sNU{reMWcQpusCNthGcw5G)Vma}4zKNKZr+mCf)<&KOoX z)&|WscQq_`NN5xsFtzg^RzlM0knVLTha=?%RsrsC{(MK|o5SN=e{K-BBnO+q0{@#g zKf2z$h-Qe#j~^dv53^#c&lG9&Nn>rU5$6%palm>Z&kWZ#ji}q9ifH-nr1b1}Ol*8| zHz$R!MZx)MoE?<6?tIdk6p(jyN{rNMQoQ%=l?|ue{Riv6j+SH) zX?{E^HkOTzEmL9VeT0`;B|Dihi>;58Xny-3u+?*@s|Rd$9{T}q-Dzk#BNl4ORJ-?h z6}w4<`oMdh5Q^#lIgJZ(#q7{gjV?tU8gTW>8V{_3)}|*+6pO@QqMuXaMAZSe8O95M zDk#JuaK3hT6tLOWE&K14If4*1u?#iHRO3mw7lGu-O(zPr7oDD*^@-VP1I0f%I*J#^c;oUX?bRrfUqOiL2e)7||2 zY4qmK8|qfTbSxKUFhlRo*SPV1{t^U(#sRT-bTYun0hgd?bveIP67;;>;R1QkQY+mi zUb6$K>tDUfWC0J4ABsvSJ84xG)XvMFfK>R$bE+h`gjI!b7@(XNozC+a;+{kHQpy)FCr6p))AJX5j=`PZ1sIKSLzj%=~ zoc&ZpNl8gi@Rv(>93d0@1&SXC;yI-8DSn_ckIjtouE&rf@k+LKe4(^|!GU$n2xGu7 z?A~*BrS-+_raGKGikkTppG_1#o0pf@`3$AwkO__z__|L4!Bf|ArB2>L)06cFEM*AA zAo}nKy#zmTSfkJcWEVt{L9sbspwxsHMfqQCWpbCMD}7baF%%t_W4meRw`?z71N9(h zjr4@XMD1nK4APYwg8fLelVb&aOjDYOmUw9Rn?r-8NB?&2&KxA)>?-Paqc{-7p=b-v z4#y-jv)S73aMwx#r4*cVyngk9(c&f~fST{E)`npU#Si|Dn~sa6yeM45KN@SXRuA(vt8arYX04DbNduh=!*JEHxD^-6fblK}5x$nKHa|14}7UiSf=GCpP zdH|Vhl+V)fCGfmI=hFq^KT--HeZFt>m^~oxL*vn~tTnv#9V#!qQD6)|Apg~|YVT}r z%0n45{6J5?d084>C%o6nF*?zlu1hY*&1Y|4iQBtTssfqXh=>Su2f7C9fmi{h5*}=? zyZ|7)u=uo7t>TT)K1--VPCwx6n#U6`az|!FMjQcveH7_!e0ptqER9-@dQRKe8rN1q z^wS1#0cxz_mKPF_4FZdWpdz{d)oprZ=HMSB+@g+2Oi2O7a6gDyl~i5x#^>#ZzloiR zOzaMpSolaRjlBkW0jgX`DzHJNKbGbjiCd*C7jto4MH8*Rf08u`(o9%3 z)bW(l*BqAENeyH{dMXceNp80cMK-wq{ zG=cb7nxkYVL|KvqACmKzHc$;wuz(Q_(zzIf;PMSG&d(x5JRuhCsV_T^`H7`ATeU3KNg$|)^4aGsh zFS5&Mju!M?dow%?!N?YDPi|s&vjvruF2mLJO{@44(i*1MOYqDQQdaQ4PrTF^1S4I6 zmp+aWp3VM3XCy8Ngoqb(CKK$M2?#(=PHyd~{%iIIIX`gccrc;gwWWyQ?AM^#uXmT) zm2RN&h`^dhJch&rud0s(Fa7#jS?vc+O(3>7!!BdP*PWo=Rc7oS_7227>}RK3sxDT7 z7?|Ri&O$OAg12S#HIiMj708nTo$~>&5s0hf12pG7&698lT4un%M$Gx_4^l=&D!@ti zMNIpaF5wE`7U<+dcnRR-d2p9<+gju@HJp5Y)hiT}&P(P_(G=J&PQAD?^QrJh6ehjt zA`sUeHa0pu2>z>7RmsQ!5j>zGM+}aE3~tyPnn;AVXQn$r4?2XDC(dXO1yI^RxVLN9E?etc!$~DhV21aW z`%pj$B4in+FO*E5{%0iB{_eS4m`Q|0%yHjf=Zc!^6f+Ix}sZqn3#Mel?wl2ZClh90nzwO z|E51Yva=`xtRdn>VC=zU?0sF(c*ZT?sDy>ct^eezUAt5T8Uc8gwXL`V(Iu?S`t%^w^A$vQD^ZU0t}C%K!KKm6OKyzK0CUUkttSOPOjz2ldmYo0$hP!o8OQEl*Ap{g<9w+^Y7O`-Ar;%^zW*0ODZgM z0bInR>>)9mHUc6JfZuO`dyyiQL!5`~)cjpEv3UikLBvb%$ferMLUs?^N>s{Gtjh?5 zNx)BZ!iFI3R=PEjn?@+QNoj@pJ*~0T_2z4 zo;r>YPwv)tBJoeJx=QQZm!KaX?AEMVQ=wnToY*MuyLqvz6YF=3hbVhsM{<%KY4ZwG zTv00R<3ayW6ka-f2pq)Q7c(2TUiHiY?Ft3C30a4NkoFbUi!z)E=33+Z7KCyZA2CPV zy%r+?rpQCBu0a)I^d<~kvI#@b<_ub-C&7-d}LO(C!CfI#1(2u>wPjoqAaqu=$7Jas7JD_eWuaan$D) z%M^b3bfb7y>4uS0*^&@hKLHPS0nhv`uTaj=p^q>DWDdBt*4f`o>Ot7X(t(u^No4X&OCwJ&KRAV9w$ zLnux_X|0X{caq4p^)L8jfTHPRmA$2dsfB93oY# z|NejuduRai2Q^aUgchB`ty=x%q1vQRP8zXjnVm>vf$$LxbGn3>Q>%yIpyP1e(+}AP zNj?A3xAS3&eZ?@sdPk<=!d>`U~p;_1^QrU>+9;4;;n03rIfG+#-^q_ zF+c2New0=rF#};!*l0r}wLl(=33OP5i^(*f)N(D3$}G0A+CNp=Fn-hSLLq+buQ zKDJ}`z@^PX6~MnoWwC+KEYk|PkCK_pkFcfaNb~&KzN0dwoS}?O4<4LD#1kED3?nf9 z=5<|R#H|_(xFbJBV#8~gA#bt)WmS2h_ih_!tXthw}5~fRyi;jaHBI}@4FLFzDC6L{I=c$rUCBTPB&T6 zJUjN>`*6$AkE6sq=Qh$k%swqg5O{vpnE5>a=@qOq+|71};=@29fc2Z|As|z{#Isg# zrBlNKziZCTJk!RXWa(LazB+>HIdWh6VyhS2ZiD>xmV}XhPegElcUyTAEVU9)%U=rPkz>t!ZzmN=j8a8i&EvDybTqx~bQ@SPL@ zI`@rsI&lSvs1{tjxEF62g`5;(eK^ry5@_BG?>#@xdNVa0%BSNn2v{JNSN9atSeKCc z{_vwmFKrN9#yKxmOgUq{>qK))%ah|tEk(9hWS0Pa41)PnY;0Sx{4c)n0+T2RXS8m$ zE!&}&TF8J(&%-&YW8T2CK?*lDHcpc22-t#F81Mtv&4wdk!Eb7#=+!Q2lu~TBVFVI2 zgp8Sraq++!G71D}_B)OQBm1lPia6j>hO!3bx`--$hc7=V@`gE4|30GAd;W(;Qce*2 z*mj@I%m_a3!F-<`M}k0=G1O}+v2mkGntVus!_$IWii=kRIIT2@;c|HRv2zDbr)0(5 z2B+3X8{V|8F}|fc``C8xWvn>Ng{*3l!%!@s9{nC%0(Rw2FsA|KNE4}B*ysI-y?nat ztHR>ZjVMI@d#*0S`~|i8W}H0vfRpNTsi7;$P^5=C+lk5kFg_xtJh;61$5^6R$&o@! zF&R%59|7I`-8Qnuk6cxK4o&pkvO0t-##@(=5Uh019e6qex5n){44Vo6OfY>CuS*FPUXYBOIY zJq`Tw!7qFPx&l8YRzLQufBqqzmfHnLFH}nGVda=K3TmB-*m#=VZrJD6d?vk>+Y1vn zi&o$iMLRD9HY|1%ypJe^Q~mA6861P}kOE`zvFtOJs}{ZMwq)PqrLJ zprV1u0e1uQ5~)_BOsS5u)xrL1+%v%lx8n=yzz0Bk6#oj+Gn3{c6R2{@1&uTx`QR$N zyA6ke&CzR+X>@tV-Kv3^EtVr=>I@1e~1uMCTgTpG%Faag8 zKoGAEm_$UbK64*uEjQJNZqTjNs%^_1|MWVzks$KkgPB}#*d(;ke2HQW!c!L~ zCq#6$9^K{PkCO{-mELzuXoU=+Yp=;F#*!`LZz>`Vv|UdU>eYTx=4cSI=l+T<<#`+~ z1tvBf9S=}FY3bK!CF|>Fd<*y&j4~L`F%LS{?SX1QMK4^>Vw;2yue^Zq+8KZwS4KAg)+C;^CHc!pG5tZF0H=!e83>)@~yJRtA1<`PmGV(>?d*7 z&v&%@fc2~e+3j&hhviH~?$l=l1NbUv@z z8Clb5Nv?J~0v{7~dt8+gqwtXn^Yh!J{>hGhZ@-B6TzQ$w( zMLA-;8<1upHdv0|I^*pzFbHpAODjG?Uh6E(PP=#dn(WlnrPchV@uSqp>8xLfObktL zzhTkE_Jz1r#RHEBiHQ{is~x53&4+Jw1^9te$yuvn;h>#QHb3J_f@QnW_|n!ynHz9` zfFs_1 zWhS`87mkojE1DzS<4j`=(>Hwa?J8vFY)7_kFmfO2@`GN&EXj(KFH*=9;8?VKet{Xp z;Yc9#KYn6P(I={&(siAxRAh=!7>T?b5LFYHdazm zU81-p3=9wkGoX=P2#Bg8Jp=tMPN@e1`>}@{H#iPvP!L5}k)O4m>OKwJx!ncMXiNk@ z2A*FU8}a<^!k1pm$JeAE;&|2n>xHo{iR;91RkpkY0a3u;5&!$GJGVXIy z-TSFETfSiz@%>H~PXQ2yNLiCUwLC9z((a2%NEl8htb0iZIfiyviZ4Ok<>us7o!x=u z<{OmL*z;4y*o3t~J`N}WewWb`)H`e*2t+5ylv2;V6*veD8UeJyODGc~5Ar*gdVmVB z7(p0dTwMSRJwkR9ce%Th$R{F(!d3T$5`9|{zYQf=yu7&T7>WKr+UYcWG!rJnzEq5G zx(Qb&_C+7T^mK~x-9oG);(wC7QF-0JTL@$JaOafU?s4z9GHuD+$Hs=bS5a_LJpz6? zTVBG=1jH7YLK6j35MC2F?E^QJq&7IIetu{l_Qt{Ihu{y}FQdGABkIyA(PKz^Fl9K6 z&CMlX!eK_bX{eeg5&o#5q2b8LNX;j%Vk$Bnr!tUGB0vIOaTVni*P=B1^MKucvTi3V zSGjiwg3D4f((?t ziB6KL26-dHfZxyz^$k#>PHx+@Y{)X^( zTqKSVpkfP=CQ>HJ`AWR^{bv^RHC$xE!wTTABO#bv355G;)&5=AX9FVY$)qC>7_dr2 zR`vq2fk>9LJoe^5V#QTP32qa-;?W1dtj9nFI>T1ZgP`>LQLqXq)SDckq_!J}_PLP; zMT!g7+Om5rN5X+;4R*g@`svfl`1yZ$EMX+)_pt>uiP#PvJh(`E{d)H5t)=!__VzE~ zAON32tEra93^h!YK}PgxKmdRslPCv#@IV@3EKwT1Bldt{fH2oHmV3MfehaSNuC7uc z+m{@3_T%R4j6aX(T>pXEW5_INANQ#@kgsus`!4;thWE5fx~8_)y({V#VSLH8K(MO2|Y22}CQ~vtVwb1apwM z=2Dw3#LT8peId3;NHMVyN)9M6%DvY5=uygc@cXC1r}5Zmzl1>gww33tOP*p5jV|oK zL4f@0$mpnWj~0s>&w+0KA!fvSPfeO(-Cc`vwCa0$Yo+jV6@LHmzi>JfLdZDHTm08k&Ldr0Cn zZ!eKY#)5-I_(IQJ0vfs*eKb z=!IV#%r?w3-;@r&7q+PDTsa*Zv#F$nw9;Tk>Y@d7Om892aXlVon=ZEf$TkOuEa zf;y=)$RZbrw4LM+*~)xZ1J@`W$>NaYVDpjNZ554IflvaH@7i-=`R%$o{vW*dYmu*D z{?T8C-q|M&dLyelZ?_(6O+F?}9@K^hxh1U(n)x0UMpt=!S7b$nVo*>}o z{H2)t@ii9C74~wMOGevWv3} zJb3UcuqNjAkJBm3(L2EPp%)s;iv1X9#Np2qUTkhj1_1e;t}Cm<%9PFin>)BpZ}hU| zv%0#_>CzjUa+-Ip*n{3n&dxSce8wMW3xy853oaKF40v6!OCc}v8DABWw&33+9z86t zu8v5L^ecmEU7(efm9B2s@#AI?iyjnCkcYP<@UhD3_^-2k-52U;^vOMJOxAu-Ri(GR;sR=4ZSu2yslw)!|LdK zuYDN_e~zNoiQ_iRK*MN{Y4Kcg#vd$Z_PQV$G7|?55=|1`H$T1yy$!Xs^FJr`)!+{1+dZBncSs7S@+ zJDe<^rv*XVtR<2h&Nmltan&0~kUY5QCi;oaG)M&6#6}pG@0u2neRJ||`_(ngX?vy` zT-^d+D*iMZW_%_QB(v5ai^$2mvLDxo41{H%xsU=q3h;+{z@ix1BNpx3m>y@mdA9=k zn7bZA4#r`+EckUAYsYR-N@sBj0U_94Xo-m#y=;~yU)$Vlx;`YG9A)SK+67?Vg~8<* zoV_75Sg9MisQvhDh%*-e*#J<90}vM#_4N9|y=YGBv-q~|2D>+QV+s-*=27N8PcCMI zJhXENXorTJJ_GSHH`h`|au}%?m>*pBsAy0%x(APiEiOjU58lM1d-n|d+|FE!xm)5| z@AJSw|2NBGuMqPZGypsZD9{*GEnB1Ubd# zlMRs905r)8UKE%FXPO%xvewm_7nO0&w{#*uB=+DXJegIjqcjvie~IDbXE zep?^7yht(^V#Qm}Vsl@8`Z2rT-+QY|*=>4~Sph{!C?ojNxqGbN5h)Hr8 z29HF7@+r@Kpzehi7pJ+G#QoXdsNwpLhDe^IfNPdrAs{)$uODb{M_(ze8U;6 z&l=-vGgHmYdfW@X`U?~4#b8gPuTCG)Zc5?c29&uBl-lpq9$;KkduE$YZj*VMWC;lA`{g5(7B(;+9Jhf6d#7B3hHosA~HpS1ng&y}8?l z;!-StvPv^av#?)SiLCtH%IHvJ%w5d1r@%%;ElO#s4HwVCj71xC$(_q{!&7m$0+`sa z54R`0WEP^c%Ccn-@g=l$-vyaW_%AL)pDFG?_az8n&B*QRkBinBfyv$xQ&LNISRfh1?V$Ya!WIuJEy{8qwk{1LcG;K|S3{ zB&kCox*fAr0jPBBP8xQA?@8649%2HjHWh}}lH#a9Q$xb4Y8QSropKP|_NvWNH zL>1-BN?!WFax7W6u=eyR?_BRo-r*i+T4ByPLZjX?Yd5T}=)aBvHL@1n%{JvDcJx6bBX!XruO! zi(lP2xuFU6%1#xjJBG7yNL_QrIsS1mrb~TDSc5Kpm8$c0pHMNt~Ru0+wa#uN-JymY7LY8e^x%I>m)d+rp z#bYIv;bIElcZuY^Wg3!RF39x4o3M1whI5+0(QwEWMnunI@e{(KI{OYGC)~sx|N1-9 zRj`l${yTOwI#vJs@2GnJ1i3ZdCG&ud#Pd*{CzuI?xeUlo55UguE;0lxbflBYo}R2& zushT_LV;-h>+?uGfez|nC5m8L%blu}hC~;dmjgg?CDhPA$4O*_Uw=1>*82V9K#A29 z6cS^j=nz2~vQb%+K!>*I1R@xu|3m)uckuCc0-oQH0Q85xn7W3ULqR2~%@jUW_Id<}9XUFT|N8r3=#&EJPK#wGk?XJLCc%>g7bxjpe+R?BVnp0) ziKZ(}=-+drItXnbz>-}>_P@=UD&(DK0N-~1@pon~mlLwzg7l;avy>jxFR} zGXJ+V5du*M;H2um{!W_Cu&_A(>vxbrLArtU&(HHBP6Gr(n2{mAzm4=MG>P|uFVI~S z|NGz5Ku$os`metaAbf>I;$5=nw~;P^l_Z{mwKb=$py+RFAcc^o6PaISDXHK8j#`K+ z&1sw*`~jnJ>n^%q#p6m}XjsRsMCYK%cavoBxTD@)1$_Jn1mEEDB} zfBtK7WUlKJtD$bB(9~Oyn_8NfV@in!^kL(d>)aZ$Tbb zr0(z60W4pGiyn-l%%r3`P6>kV{yMbs$ZsQ<>A4xGW}Cg>w+GdNc6!;ZBjP;6pZ_UF zhYMwot`U$s99fcS|2dNqDK#}Ulyf1){M&;>QTs7IG6G=Lo`r+{x33(BMjE1Ea9vKz znDhKLp=$|J3aNSJvzot+%>kRbN-LBBDG+BC4yNCJE)tM9D)zhyBRxdn_i2qs4spkw zW4J*|>7z(_!>{S91346|&4O0(xvJE^|C3ycc6*?7C7wFf#3}Ln(o%sK4oPGcuh(?8 z*`B`*(Fc4D$0ve>RSiL$`#&Y35=TVRk$)%5Ay`dq&47z?) znr!=RhiqQ!H&%ouq)0Jstga)Ky$pX_#t^9get2H}4FDj{RhNPiaMfSWJ>v-!7#9n8 zvbJ}##+-f|vd|>J8q8d|`y;7J%}4)yWX%_G1qGz}2%s-xPT1mVJ2vLvTNZMDx-UgE}E+_fVgO8RF(Rf57>^;)c4k^QmT} zHhfO^3nR1C-ch+b>c<|uM_;?_yx*nuR_ka9|itSf4y&9$1Hu?*rg1+`1v@rFa zk7WGl*cg<=tVki@nKOBlzi4z8Qjn8ep5!o6dbV~=F}3DS;#g3zhxG|%oC0JjX3(%P z0BKQZ;b9YhxBIK)HD3-X_katS*dlU09+kDcd#lGEgHnYo2lVq&aCsxiH7nbi9)k}h z%w{VF;$}issch@=gwgSfK|iF$#rv^BR$7F-caG;&5)YLXh4T4Q6A6~Bpkhn~Emxe+ z#;=;p*$Q~G#ky1C;ligNw}XvEGEx|dVFK8roRSv0H>(v<$qCqG>3~T+A;`Q0MTC%D ziV5@nT_E5niFDSPQuo`xUN25qU3~`B!@POxGMYd-c3b!zi7Vc38IcTL8Le24CkRaO z9^a;?on2fANNZBhYbI%1IRpw7NP3}BdD|Lv;;%@w1~TPB7jiUbOe3k5&-y|x&8ZVS zRGoALi+#BuFDTgx+!4gZAPk}g0EOTSXY_8rbjn#SCg$hwk1hHQY+$MFH&phrH2f8R zG`@0YlF)8!eZ#1|fAi(C+r7NqsmvKEu8YoQ)Ve_d0UEg{S6{^Gz=~e?|0-*{?hE+O z0B>&r4cZN`7?kfIG^e4jYH=d1nE>sfY+GG@`!r{nR+84?wvLXZi8DkE6#|^Q8lAY- zo_F_LkH>IR9`hq--8sbXOZK;h>3-=3!UIrq9m@cu-zqC3yy9B_uNZT3gAT3?rV$mU z&tE^Fp;mu!a~`1W@bPy2l*ZP0sAGgQtjOraG$~99~!4}Ah(Z0kn1$~s1G2p2ZVbc z!h0VjZ&0DJ^V^l~AGe4{K1WDgYu7XE(L;WIBy#{%8%~Jmt^K&;X7*9pFu)pLE)auN z072)D@gnDqC3LR3`Ccjdr_sb1?Wn`5*N)sEK)r(tHW7N~@+@9l7p0Sr>ZaZoFYIO( zIf9aP@}w0JB zt2In2jNYEhGh;6(D7d{bji@h388-t1gTBhTyz_ob9s<>V1l}jvZP&|?tb-Z9B;3mI zR>pN>?OHWH4w6lAH!`)c;aS7FNb;QRM%ZI&o8Gb~tfv=~bsnk%PnA@^9|)4siq6Ac z%-Frup147s$r(WSi#{!jP)7{;eXuaA>j6UxE%ApBy!=`Iu6A>RY5x48Koix_9u zBO~qz{YUiUdW0o`-&dy81Tw-QkkCO)a9}xq_a(L4j(;)-orRNI(^&G{PF|3fm0f?K z_42MwQAF-GE=>%2zH^P_PHdl^o^Jm*NB17ZT~}=9w6N)r!lxbdz@7^iOK&)H2PJUt z>=6rZ^NC;Ge(oFvbZ_l<*!(}xU5x5sxIl-!f(OJJj|~sCXzO&L8hKmwlz*mQ~sJY0Si&+PBpb>WSm zs@c)=1$^Qx)%`}dyn%@!Gx07JupI~nxW>*%X00y(4-%J7`?)<-?h7honhIZTt-xrx-RRMu#-irwY}`v>P{Thy}~hmts?=$GtPkO(}lKJGc%>a?D} zZ=0)P_Ch!0&cM%!k1~l*PnS&2u9%lalg4U`4zNyY-!8R^n(kY*IA^~_)q3L!)wMGm zhi(@70&+*!+(7iYR-FMW>FSQV%*7J8;VZ-iqBL$pU1I(CJDoP;3|`T7U%s^)Y8B|l zkeToQ1nNnh|6=E!1`oo=bTRxSTn#p9(#N3f*AK*=IICEf@C5QX|0H5A zf1z_A4<0qp(8Pio}_^i>F)HD zC|g!IZr;pQ{T=!QCIYA29HLqy+Ze{DQn&l9Q=J4|>8zcVeNin-jMGsKvp(|^2U0+g z&yF*2(fhbHijI-7V`~p+E2)KIbuX89EF=a>L3CweBOrq*!;l0PN%`mNSZ}88kGFIh zFFu-dRBY7;LofFt+=)>7pFtxzMg0xZ3F8R|6%C==;e4T=owBlM;Hciyo%Ife=?r!B ziEG|>Iy&~j2N+b9S$U9OG|d-F>o+kZx%-RMyW=BZeuCX;_jCqr<6N(%R!#+CvusA6 zG#iHot-vHLwRR7!+{&%)?45!hyy=XlTt0qdaZ^)M(_W+8iX0XTw{_xnFJ9@!mwfop zDQEVmj;N@sCr+)NU9o$H;tHCV{Y5# zAgSW=kPmnDS^aA#9@g4#z3Jq=WU-h@c0y|9pq%N3w+yaC5~goxk8?EKE?bTqcFi6| zhmHeQR>^~*t7KM~&4P)VogMwKKwgi5_ePE30oK!n0TR+xMj;QK%oh!A8+e;<(AXAE zZk+=@ZRxCzsW*1_C_jaS^9+ ziKzaS5tVjzOl}^}=loQ~C2ht$%`B%M@>PuH4#N>_S1u9BcWK_Qt;c^=pK& znfRs7yj!uGR6tbp0(dWA52}HOupvy$|EZWx-{{z3HPf&PQqN}m2%yWmGcF2aEg_GK z$I9{DaOwu6V-=KT~y5Tik22(`m`Af ziIbV}y=l$W!z>RvG_;bWQ!JFzg&o;sbF(sObowO)?pIyV7JCEFGWB~cVr@8Q>n-J) zGkuIGWZgv6VsDB{3NX}d?_V={OnrLkj`K-e{uf=?ossAaV!WMcr zjK+^^8VgI#bh~72fcOKd`;w($?HXJ4!96R!$&qZzz;@5-5UvZ0QxW!4+e~JIIH zq?Y#1?n)<$Dw2fUYb=-FG9N`eS2b7fyD`>oY;o#ww5(a-cN!7Ph0V#M#x}AY3x?jk z+lW#Uo7)yUZ60!Z?iH^SCdd2c3EHL+ zwG69IkcoC1GIu_(M1dRDwWX;kFKPB|k{K{`aPmP6c~M}>yEL;=-mB5-8mNb3iE*0K zuSM!*?`#%d`FXpwc~K*|VXD|?WfcI56y`O2+R56qwS`}uUY@&hM_gm}$|DR{0UWg+ zAnFy{42>(;j~%{`I@EV6GImDE5?Z&>A&w)~U^K@!<-I^ipPS@*&K&T|-g1F#A+xFP zD|DH?t3FB#jghAC>z}ORMu2WL1xsV`4jSmH>TJ>+c^kt67A!kwst-n%jKtt%MOw%4 zj@Rvadk;zV+CB#%xAxLLu2uV5Gfr(Fjo;9c9{--`j|(mz9K!`9PrGjGqio{UMg zlCd+OK3D_gJ)ZHcr{5t3mG|gu=R<&|iS8ChwvL&=$ONG5#Y)#%@1bBqO3HGXk5el9 z=o+0`!|$ z!b#4RHQ6*G(pa|j$CDVT>jQyxh8jDDv}5)!>iD!%61o)P^Gypr4BTRIRDiBvV;pMp zwrDhjrhm9rSBONCHKb^CvGd%@ya!r^7Kt}ATEss|o=C3_7Hm?Aa0 z(OvIcg7PQS=)XDh&EOkuQP=auXwUZj_yNaNM}5u_FFOlx2?B$(`}9?Nziy!SW65}% z*SMYM$Kay8ze&H)g>M)Cl=ctSZ?=!^Yslml?iVWAGPqXb+t4Kvg+A&nI5L3!D#wBanxFJs9vZ}KJ65)S$58co zXrm;2e3sLAN|oVF1>G5bmLL0f{o2O`joD>=m!E9^_T<)#p0x6shFy`zJIn|A`c5P! z3Rf#y=IbK$jWUBAfmdHsU=2PfYHWD!7M!FpxlUw1svE{Wg{wSu;uyGjSJTD9!hn!T zs|}X41r`$gb?(X*ew!;T$nAL3Cv zH2T*6Q?pTUL~aq|-uz?b^UhrlZDw5SMLUf_yKn8Z zPtx~gGZY%<>LyEXii;Qm^|-;VTZwb^J*Tv5{y8%G=JzBJLvIw}mC|EwQd1FF>8!xa zs&qASXr#Y52v=W}hXP!EODh9(O263{&;GzpVH=BE(o=)!_bQoO0xP|Q>Qy6azm~J_ zGl^J5%E z)tGRzK1(n6qFKf`_~o43-0P&}&*~^44qBnn9I>gK&QXE&sgjoG26He4&R|k(gL+*2PoheZ2TT&Xep*mZNEVB7wZjU(=+dI;*<_P zYLW@h(SFcn$IF*SWfSk=B8j3y11OdWX=%SD{$E>G?6$`FHcNL>V9u;H9V;HOPan& z*(ANPL@rudo|{#kyN?h`Ei81@a}m2EHYAdHAXcT_I{+Oc@jrizK0hKL0zo(;ng;h9 z=)RM6c-qa#D9Va1iTV^P#mx+9v=45S7eLsXoWe88jgt<8f4->h(WA?748ZY-Xrx*n zVMc8dQBvb1-yo8y&fw2M-|bh_7?RPF-*-i|%P+#+D5cx4C6|c#=f{%S0j6>J*5qpz z>#Vc&_TQ*nZd0rsUeZ&%E&#af25WanhyemLnz-HD`vc62-L2VLo}Qj)!}IaK--Ayd ztow%TL_QH=94h4#4wv4f%EI7|{%>%oyCpb*(Yj_tUwQsqpe};uu)vb}@0aB!ayr?J zN=!ZaHB3M`k#}w1ryyo_ns4dSdnX3D*80kyGuueICRff2-bX<hF-7A3xK5O){l%1^0dn5xk)gZ0yQU_U z|L2-P3RFakdS#$04*t~>koB84f49r2_H%c?WZIizr_Q~hh{c3zAC@%iU4wf8}rC7 zs0d+B@njM=aD%sJTl= zdhCElgUx`|U>JmHN#!=Ao7=e_Z0B7-ML;n2FtIn-Mtd{$0H1Wn*Fo{c48`~UwKdu| z!&`Ns4k7e8F>K4m9^P^VK=lOGVDSjnw_59E>~!;87({p=^<63?IG5l%kOR09+`}EY zn$=`8n9qmK4`IFM)yuL9sDDR+n!|tm3mr`k0t@xvn3J-6Pc5e7MahD6g`-)w7dWi{ z^)Kw~{X<;|u{7fp8uMS!3ng-(@jTb#6B0JShJF7YP)Sw9L0rXl_rFhl`Fw}#@PQg29#tVNnG~tF&Ln_%Jaix8D-`<`OJTe zp#dGjeNgZIU;o0yUPJcizy5`nLXirJXn2U(%vpxg8%7vo!&v^vsHpd7PRC2{PN{tO zHSz;*5g5XP?9BbC$N6g+Z+2d^n+3Rsm!e44{$pZOQ3*?tW%-YPLGcyEBPjlPM5$5v zwN~HC_w=fQ5REyfAjbcA-v@A9KhrOkp%ioc;~U=a3c=6AGw^oas>QU)crulXUQKEYyg?!*RNjH>W4)AF(;wu-(U?bl*@liFk>5v6Y+aEA)LRz z{~JL_DwY$CDdtX^-zSq#*VT0ZOc=Znr5OL$3GrG$1aJ;d3Spm7s5`&*8M`p*>QL2! z7oz{;h2lt#84lToYzpz@*CM}B!GAdU`J44ar2crJHzS`vccb$#Fa23cdD5>3#W}(Q z0&m|XS97jV>(_?%`i_JtBqSXF<6l61FQHr(!=rF+nEQ}@o0j8Fs!gV$rXVd+H2HUIGt|hc&vw3qN^RR#a{#b}0oTK?XXZX}ms+Yg= zENZKe_Ja}#_zRi0uXZ7c`W})eu;Yt zD*=uzd{Fo2H?EyKw+k!nwk>aV3tKiNVOdVfW1l3_|m2QP>C&~c|1F8u%;58~LkanWMO^u&4U-sAZ>`>;x ztsI-a&X%ox>>5*lXS@6vK|zTf9%b43j;&oady?<)h#b)s$=*TjxNM2P*4-m3_2u2q za2elOKv%oHRLEY-Lqcyw@X)7#gUkA_JimT@sOjO*!-uE73fwrc@6-Bg{f8g^Xgblo z6rJomw}oAKmB?M;+3M5~HaR(oilf(TS68rbWH{A!9%Jib*|lre4Yt&#>~K($eV(CE z4qKo}$nX9acsI7UXK>tmE8Spg+W;C%^MPhk}z-X?Y}_3?De{ zg38K|U%Uvy62J+#U#3aYsK5cib%EttvSdj@;n5NLaIr1PCwPo6ZunkvUrdDz=@?7X z8~8y`$?!g4D+cEgU?8OSL|YcWqGvWOmk?K4GkTWtaSqDI(IPtoQf{!g4cxn5d06S3 zmbuN3SJ`0b{?;aUG9;zh*Y#C)C8%bu(pTC`9;s)u+E!zXnIWY(CD$+ z>{ij}A*at3AN>toNjb7+*7e-7nj&tQFp{x2uJZ|*vc%5i>v zQ+DbdToQ_n!k;=N&gy@rmFCr;4F5D(S>CtZTS3l26O85tAOWDG?}s7?PLwnoTEg7- zv44ZVR$jUkIwb!YmDsmXF}(l`DbmPY$-mrIK5u?mDy+ccVoR5S)*J+w&KYAP->3GS zlDScvLmAf$PfBiyk!y)4pdSqcqkW5We9(;3O&^*Ft9?0FbY*DyenjtHMUgubp!Vk< zqGEj+JIP-UTL$QpkDnjqX*3%vP_7UCYo6ZA!6~r43r+((Ph4zGoAyEeZlobH z7~Y-kQ@~Y|p5MOD0MqahX~F2|=x@mQ5`{0^gD2dcLcL@lwm12)3|ITn$gk)pabYjY zW5yrI5kcsDqyy~(yTsj>uU@^>g=MejfN1m$%iLS~?*@t%`795i=ViV-8^m+DincTp z7s_qDXyOFnSIvBm*JE>$%(omjN4I^^Log#W^HSHW{> zo>AP~J*hPxAjGRSxtDP9p&|YQ_?yR_=g()Lz|+tsv{qH!cjV>8o6}K;Og_XuKOz)Z zQ4dyrcZHi}^D%4B$`OX6>&qL|l%{uC#Z|h;=awX*T@@^4ASgo~@$%d#$_R@V9-!K^ z0*;U4n+T7rcen>&@S=_#v!8kA$Av^FO=#kY6ZMrm$8Pio8@7f! z4dROhtY7NGtY5W#hLX(J!H%Q9M)Hc8;dIg9(TXFN!dI*KBGk9D>IZb_*2=;0c4&xoK6(Qask3^vZuL6&3RsExo2)&;Ivk*6unCU$ohwHx zgg>njTr{`1i|EnlXA~~m$`=CQWI5`lc4}_P)3@e5F2OoKpn}@b(b3IRSZBCyUC2Z9Kem63B!sis**h(#8vWUi(f#F$ zV_2w5jUuq?0OFg(b823$5^maXF5fImeW)iMv8=-z#55&V#fzA7ail;487gqCcH1Ka z*X53ShQE+gR!RzeI1!-8(Bk>~te8eB-LElH0Hwm$6IB#N#>o0L9D3qZ)6Ty911{Q; zN$@*Io?X4FGI1>;Ed~Y;q@2$X40*)rtr`PuEzSO0voj|Ln*us%WgiKmdg#s`UFp%& zw8C?nO>#rcn)mZ{Kuf%P=T50`6SkSy!+?>+71SSfztp8wJRiWZFxbWSmf6h2(6E)Y z{kJLfQEF(jUYGXhFN45n6Bn0$pwfT>k1G+BsWmI`9o4c+7Zth61G_SCp+@$O2{5b$ zYkm}I$F7+ge6r2y*VNIXROuVMSw!i5eSP%|mzj?rGs{$cRA1kRtGVgc+)$3jxwyF0 z<;P@ZZi~D^f2aF4FP|#0V#%9xE3D^LC6=C3JO2&@mI$p&m6gucU$IP39QQ)e)6fGU z6v7vwJ{QPEdjE;5KcH)h>f6>^7j6&A2SYJKaqsi*5EvP<#7)BZzZIp;t^fdfq=j^_ z;~i_A_&@BuX*|_!`#o%)i3l4RGbS@3%A7>T3Q?vcR7fS1c_?#;R5CV%5bcm5mRD7+U}oM> zOh9oSN(SMADk`Kp>%35sQ9Li@HV}gsyc;6!QnK-Pb7{q1LGl6Z9z;p)^nu`{Wjv5) zwdAY({^AyogcV){2xW;R<;I#Is<;2OFX*Y6_ui%x`$)EE}K(1G)D zM4Nv3DdwwCzWetvr0vL`6Ztpv2o^B%E(d=ttJKU)2FbUW8+-6|H6=A2$i86KQ;L$W z;fa8PA~{(7^@%iVYYPh>oIIEu1m8L2)P&j;hJ8qU#TSZgP*q2A_JZ^ZZbWW~i3x$M zZGTGK(Kmr)*`?42osg`}O4r7Ckr)a^7UUf%dY+&?Tu4dLHQIg^2@Emo3E>VDuM40w z5v0uVUd+u~SAOXraVufz3G_tf!O*4`+3x4}4NM3y5$6zg93KR(3Ou77sZYEu z(N@ai`s6e1KW~d6JqutKK(;n$F_DTxGhcc8_R+(K&w~!p+g3?l0Yw@)QvbaI1dD+< zv5~AoN=0Ehh%;?T>fu&#&H}HPK1m~V>Ad>S8x}7d#db#X21(-=INb%J@_|Joj2+8U zZHRTT`P5;G++2EAv*<}Fvzp}vI&%eKbv;N$h+)u6fN!84@;exI&AnUd$QSoVK&Mjg zzwT;r=A}8_Flff9n2H83hbDLC&BP;+G8g=>%i=?)6i(?drrL$x6RrvV(J*o6&Kz;u z^k1Lh5+8!2?9zJW1K^1T^8o(fpfokBk#dX3x#D6D`TD_9N#)$}Pz%#T$qSV*m_7+c zEvjjV%wW%Hq~<03pJZ?8;UX}gIVtwxx~WFc_i@CIW)U40>L_ zdqEZ!7XJP-U^g_KUTtOK%GwWS!U1G( z=-*;mS(Do8|N5ALGbq>ij2O(`uzN*X!(TKo(kM>ZgKe-wO_!*>^!>koeZ#y;SxhYA zLg!gJuE6TAVRyoAh%=!MT1)H*cvxbPg|Dw-ue%IaI$v+6)Jdnkob1FaHLXQ1=470E zP-4v*tS2pb`J@Y@R4yR%7eu7^tMiRld6?3}FQ&lYNJ=a84R2&AIiexBDNnA90gSV8K z2aYHJ5;%R`B4&s`G6aPRx_~Ar7smEF-PAB)cWP9P3aaijEn`50b&WW-h7!dQjUs0+JsqPOKQZ@J!a@4D00OCy>O`AA%JH_|QXYO@iF9T2`*Pi=gSi0Y~zG z{B;SkI8o8J$adT!#Kn?2ZKZ(j_#Hd;_g|34~*IRzE1A1Ui zxSPz@C8(h$SdfVN`&|8qlhD{_Ht9)i0y0{uK7k!Cdm^?=KC9LYGd z|DaC$Yb_4RRDywf1p}F3NPHYIyEmGFsk>7cV_xg&?!Wub&zI_Lwb3`?;26r{Gq6Pq zP8H|hBD@l}|DQj^$S))tyKQZa)r6y`MqBy8+{WRx z{l@M$U0vTHYGH@>M(9?zSe;;W?M%&mR-mO>RaJEZ-~-}38hyo9S4Oetz^owb1F@4I z0x52E^LQgGs*d;v==bkm%xFiT=mFvbYm{Wx*jfP%zXnW@1#%)7;pjAQ#IyhQy6P${ z5)4!L|izB#dhw+H^WDjzFSO+%fzH!x2-AvCr2^Nj0^!M6$&Lrr;Y`?cGE31HkT0h63t0B4ndQ^1BPOTjtZ zl*#gs!)35;?R~z+>>r? zb7MchcR^SWqY)p27oAK5WG_HHICi8|IMHPs{`5)n(7=7bK7e~)-llj>9l$WE=%sXW zZkRrx=Ar8?n1j8IxHRsr8WAfjpy}@cnhS9(EiW57CNnLFyYLN+E0~y>V^~N^*!Af@ zl}Siyp0~EH1B2hp?7`s=i6$}4b0FD$`SNAhZgK`NJ26&l`SGGaw7v&$$7)by&!*M)gUB^>vW@3{WnyAo>6{##ZB4eJwvJYtgVf(E$I!-m=KI4{+Z~9RG`K`OOZKJjP-Yht8~`r~lUJ~URci1% zP`41yvql`uVN1u0D$YrG%cEW*5Ny+gJJ8rp1O5EZ&lDEsK|xtr8Rj5=|Nb5CO{CwyUJHnq{e|o(hC1AXmbNy&PNQ9wm7GerMsoA> z!;ZOa#m2cDzy*k=NUy1T>lM(!2dDZ1US%q4aPIn^JVWNSYpvwr`q+51uGn>iAmhXq@Ie0ue)zCIu6G^isI8%T6o9B1>eWzG;6 z(a ziX>IfG)!~uNx{Q%Lbz?|AArEU*dmvzf{(JrJVf^cBd3HnQ~^kifO&>9Xu%KsB|Rfp?Udg z)wPWk(sYuNlCexHHs=0W0 z^cgn>&Pesv?DQzB)X}A<*Ll5)Bbct!!-G%BtqC#A>0H>6@H;E$W$oFkDk>nrjCwrq zsYI7JY;#vE^0Tv-K?jM3NTKp|TPFsm{cZzMl;#xA=wuzs;&ne@R;J!0G9ajQLqq6U zcojg2#Jj4U@^~YBJ=`oy1#Jla2ITZlz1wjcpWtI{T(JVE0R@PrTPLXu?`{S9L9cq_b=I!_2KSNA|>QORq`nBVMnNWO5 zDQ9X?Oa@spMTu2X07kvxZJxpD8UCX1g@AZ$$ zyo(0p?0rr#CLtemnLS!-UCguQ+Oa(+_h}L{TNBFQ5YC%5beAOf2cB9x4w*$r%wRc1 z#@Pq7gZ}LC6C8R{eQhR-t@`j34@TZvv0nEXIyB^W_7qyM7kiCS1!V3uZQI{*uS~p?`q(W*^trgG}U$P zzYBQQjj^m1U68*X2Qx~P8pKiPuvUMct?c&BueM{Xbuza3MyvrozZZ}91fc#?-P4Rk z9NRnpz(dfgS7!yOg!+WIDs9I04VYjTAHHmj_tSi9$; zRu7w_WNF7e-=7}mhEM!n)NuQPx!!iDaM8ZOFa-cx-bgb7kJ4O3U}F1I$BmkF^Jf2q z^QGf>h$m}ed;0q9yCjX-`IheXX6RPi(ZXGB^}FU6zaX#ldCzo_v>P3&GZTN;+$m^X`FQr#nh&-Ghe^V-0}qOWh?o&iEASNrLU5)-R z-*H>F%dMz$=e2gGxU;WzrPkgT?Lf&Hz)HljwE_*`^0aE*M89Cir=_>;-e%ZsHx|fU z(fFBo*RMR4KpSBq8jy8+6a-}6EZ=nRFx02?YlqNL`L0*+@LGC$9~K7(#aEh95&yE= zw+qGYHk$1`Iy13#1w^x0n&VWoy~$C-0*&1jlKnJcMD-Li|njM-;Z3tzLW zG7>|?Ma9JpIBh`Bt!Y-0?`h}nR3Z7$w%yM-G~4A?!$cEj2Qdy*TcFFW##FpT*#lsV zIcV0~5q%5bqb(a4%3MBbm<4u^-xa@uI?+vsO;;S1kppja8}kH zpxgKTc5Ow z`&`j;Y_0#7t!>FGG0~87m+R472 zo;3MAg3n8V(3S1g%-i>R#w}(b<0Q^{=SNOD&2$YN|D5eoD)p3`X`k6bRog4fmdUq` z_uNHPTuHo&;qju}49m%wg~!kRh^aa{HApmuH3hpAkhs6yb?r)iU2SM zi5fxOb}7qq#fbPL{{Hu&&FQsRxm49sVv<4Gty@r2a`cAU$}RyKmN35FpswCE3e*Dlae@hl$mt^h;k+yM8cO*{e%d>2wpr(vJ!w{~Y`DiEq^^Lp5GX z@;js12Rs;J;CTX0p))XAx;63Xw~v{NlJNG$_~VyQxH?FbH2{?iY@$!HWg`EmF(b6q z?!f6?f&~T1FOTZm*b6aS+Sr%}E^YPlU(wLe1Ox`8*Y2viq; zD7JJD8_{V|3!L#tdFUIn^k;LJ2u4f*cW^LO6ZVTFXY}(zAW^y*yDhyv2JDhAn6nKw zKQ6y;>GJ=G!Ssmb6v4i5@>D0r8z^12GBhv<#;iZUE28}D^Gj&PViNGXRFM>NX}~H8 zvFNELtaS{aN46TPE_#T(0+aus4N(QokDJZXuez$E+TPz;l;S=z81m;G24Lm{9xg6y7Gykskc~t|Me((< z(~(yVuQBM_Ud7G=jRaOD7<*=Ehugpi*PThcIss1JaMcHwj3B`E^#!7dZ~rJ;l3{7P zMWT!*6dNztG+7J^%m}ErAQeMB?hjl8{%sZ>5m8ZI-ZT&%PQFF`Ij}t#hZUeYa>6P? z_xJg;XJVHkn)t}ewSbdE>P3ZAs7|QtU%c?eax9$J^(0?sS`*Mml{bVxkM2gmDQ`dl z3}k*xeyw@_(JO@5W^ba-L9>mVK+8&yFHkxKkGO0g54{;Mc=Zm2k=Kh<7EE?9i4h6# z5Gd+y=jX^MlF=sOEx)e5iAjX$GQHR(j5u?7uM&JAQqP{Ht58!{4-m%&S74~;uCor$c!tYMApP) zEstmP5|XBtyx*6}R+4QTFPT{t+22`5=qWH)r}-H66hv|-t}!(V4qgO?LbzmBY-SNg z>I_)XD&X--HVI*2io_T#0}ZN|N8m94M1Dldr?x>)pXEtr=SU8F3yqw3qi~az9`ln$ z30Le~CynNphSlhju1@A&6sPZwyj)NKPGqfOGQFgi+EtM!bxx+zDv_M`iEH4gPUB6Q z+KNVt^7(l5Q;EstT9%O;&`k2t#+1jcY&W+wJ%1iu$Mi%;@GKSl@px_4`x&s*yXomy z*U76&(fApd(#nbJIgb!ma6tl_o2WlWq(y@%7c?N}_e(R=b8^b*kb9%j3%3+PO3!wh zGSkR|VZ~elT~v)ZgHia_Q)RprY3+52=bHntX2WTjn^N`T#USpPc~mCA&wnks>e4Lx z%9T{sSpr#S6vEosPfi-MGKs|8V2`KFSgAPlVCloQfYEU@HY?-98#bU3*E?bx7mu2J zJVT2s$`{v#V0!NV@)b$V08Ll%?*3NEE&@s27bKNU96Sj?X<@CCrNv-Kb!(M`nubmw z$1V?sL)C@2{yKez`?UoIT662LHdo99~XAZk<07KaN>a5#K#JdG$-=M3k_FIAB?9&A z-t4+YtVr*D`{=LK98B0x*bj=aK!X%Hhb=IyxJaaLLxV^ph=B;lcVMO)YPDtlj`(>i<*4AkXUZ*Wi+1E&yKUg8}99D>CTa8$=ztz#>J>Y(asQO!*T$KKL zIt`PKneNiL)`tXBr(T+GO4&Cp2O9`ut9JnFj*i=oPNBzjxHBL2KYNroLRasIy?5^( zSP_6T*>3;2^k;D&0*SXZ(n1WV==t)YXu@_UhG`*)D=Jg>fOK{_;R{7uxG6|xQ3)d! z`>BVVK6RBae{&TJWXt|6r=+ZW@#4kdAygJ@(ZAqAg#hD-)7w3SPyK{ngP|)VEF)hB z4ZR*#CsI>ucWU%`dOg3_-`3O=+f9HT*cPT{X00!Ly-n}KYRYK@TpHTlf@~~>Pmx~s zeDMOIE#sO`_4m!Dbbq~2g|uqs)OF(ipITj&Km{n)M~eE>Y|(1yr$E8{3>d&L)%Ma91eL`F42<*yZ!!`S`e9jlx;%gg@ zaaTA2QXLJy7P?5!?HO4!P2QT{-Rv_C?RR;g25~f7xwiNU~#Y))CUW;#lLV@B&S0 zrv++ICs$!LG$!|%e29BVzC``oD|SKpT5xawiPA3hSZ+1jw>LKUtzzr`9ovlV5m&f` z!{#J}MTN1!DCrDhWh#-pgFkf^qgR3~(dB$*Lg)zsvPg>nm0QV-?m3IG6|y5|TTmg- zRbpr&j~v5US-U#EVHgzIT-)&l_02f<7@i}u6Z#G)buizJa)B$wo$e6LjglGlF(FU= z+d^DiG=PF7esI246=w!Q2#}pDd70=Ft*;1QxPBTGLz|Q z?gU+plP{a?b|4H#vV{8bh82|q>ho{=t)~B_Z`Km?KS*vJZ3PpJ)UE`hMbWj9H$ZuF zY29$2kRr(e=}3Fz=dmfejFtLFYn`%)&EIK8S4Sb>H;%`PsXv^@)na{?4rJS1c7BHs z{}njGqGH$)XqT7K`6q6&yYFXe@f)Z+1vDc^Bm@ILO#aUqlz~lv>{2QL#P!&xPU&xv z>>`+1)`$NjK8wn)N9;KJ=@IY;k*!Mp-x5qCFz_@jQZO_5CGrU(JDr)CLBV#0KG*mx z8Y7(N1%w~Ou2YFzPwYvjVG$Y}ZlZ#VXII**<0fkmdtl+Hm(A^>0*Vka>=yiJbA*N9 zG6StWEs`-ZdNN`&jz*2(C?^&qw>0GBwwLJjJOvWi^inTg3I4Bh4a4LlYBw zFp`622mh2tss8zC?OkMrd zm&>LND4V82(fK;1N}l7A0QPtUJ3?)x(|g3 zzec&lJ_w?aMv1N1_7MIEdXCD4Wm#4p43hC%kk7H;(4U5XPgGQw?`vEPp=M{>99xh;WE=9gCYMRKTnhpXlz7&G|ARD)*`CXz#ebT z$`rQNq6--PCphyITTA*dx>eNLHdwhFHLy4F7&dNlQ>f9H0B7gX8JbUqcpxDd8DBo^ zh+Z!>6;)GFJEjGpi`v6uwW2JiEY<21Q34~ zGf-Ke@&$7PC7b95-_7M)8Ly8KR^(krq=m<=zU?tlKch@q`J}b=3s%3|j3Yri@)^=8 zncx$RT|zGuNx8YXxR3Z#r;bm(rR|llM$ho<#fxS}dnpO5_jRV)0sB)`heMFequWXJ z!PSJD?k#~CIzxK%by3VXkWZmo+s}0hB!8rwq;y&WwDNHUM;95bTiRP-obU*&4*9dO zH&mE!iBDsk^Ai-F=I-up=;Al9tv9;8f{q zLVJ5V5~5T~nimvga4ZM7JbC`pQ;F;ZKx3_UP(y_ zwCqiEOk>oe+JN!Ab&{)=?tsWXK~u!EJq88_UO3hP7dfx8U&*sms$3{918oCA*rP6A zhdOoFFvJ#aHvFi`5@CCv&+v^K$dRRuCm1(vVX-@#Ti~E^bSsJL~}bZ+S|IA zP-R{l#Tds6SKZ;bgCQg$3&kb+*sv%=;np0AKi6-A)r0HTbqQlnpqs;WxY=+MKveCy z*jNU3k$=AXxb-xi4MZXW;EsD+6eEN0gyO~CQ$RqVMu5OF0dBi(N|yosNRc3J3>3ih za;4hV@A{_OfC6}UNd5D6>E!q}E{rQHofamuAULnU7E(ygk&cD89jgT03=K_9a8Ua( zqig)i@3L-?&wz7V!ZFqbmFvHk2Qm=aOQRzr$*c@yK^=#*s{HQzb11QLquIfAehUyv z*BU}SkxOeg%Vr_sd!CruLPx&27!*UEC&aBc1+1`$Bvu5CX)AsQK)yO)6tvascI`q@ z&Oco*5X%BQZE|*2JbwxK-U!0<;njJVD28X?*ML@$Kw-cD1h`|(ibUw&Y{<+T> z#!dne4F4b_RrO3Lu3G< z(7E`t4S*_EuU;*r9cZ8?e3}OL%wlS0Wz~UzhS#+*cy1C-9_1w6N=oa!VAuci`>Buz z9C&j#J)Td;*tiKieY6J*3CQ%Pb?T){k6;{G-7(g4^BuucP*!dhWXL-Y7AFen6w9S9 zf;phW=84n|w6wHX)9;b-zcpUUK)I%8R1 zGm$CGLPkq<8{Q#e0Q_0A{2qR*tE;=Yxg}fDDDq-2Ia^!X+Quqvj)c5rEq+K0e?~Ma z=inVO2s9{V`R~FyxmK-$ndAb1nTvqN zl?uuJr-+Kr9am^uM^^s=j5=wxv31={y(8l;;-3IbE#qN0c`=^)K#L)2{Umb&j zf&_oe>bX&nL3H*hoz&a{p}cgEeh{ouEfdH4Zar&lWepj$3nRxOI*ufSD*aZ;$4-e>R~CtOL4 z?i_}#C}uQ*M~8Nbyp&1>`>Iv%$HoY<5ezZPzpTsTGtk2R#E#cl-WZMLfT_{$O}5+( zw&bV4Dee?;5Zn$gd_Q1r-iC`pgbwo#;xT0v6-3IRu%dbSvTea$yLjOOF20$LMw*c; z>(o4`5>QTJH5jW|kZ%-A8`Cb9KcPNS_n5AFpPaUuCj-MD@K?_ z#ETkl`R5TMw?X4$d3i=tfPn~3Gv<8hnoyAsl-K|yK(uspXO&=B%kRsX7d;0cYfVKQuOEdB!t@9%7&mGcON83{cwcTa z>!ehsLf1ZS+w|u`Rk(tx{fkYPIH(!f*mge*)>wZ04E5-BLiXES*_5oLyF zFIN^Xs5^g<{}H~7n626Cu8_%BGIpsgHVor0l(n=jET2-5!=Mm`{}~Sg7aq$8z%Iz2 zXCr>+#p`iKK=B5e^Tv?h7rck43XRtO{GjY2jEK4ZTZXDQGjZV8QSg{Ul5_vWf?BVW z0ElZxe0-J;?$|~In8n3K;CnmapacB@Ix{+$vRVJ;&1zBhJvUuwUvggkf~^F0AtBK1 z-E{oh8crlMfyhrl3;YGRSKje%n)Flq^>KQf0@XU>$RN@3@2%nJy=?Tkfph;xF*AJZv*je zNWQmb^?$B{AZCEj_RlhKLajhdLX^liq81g>3YdgvtBIQMTOahZVTZMD&%+D9R-Xe< zk}l_%ReU8hBcmJp$mUaCOW#vuS2jf!VILg|O-bMHfQ;mNTIqq^Dkd|U-S-1@qXR_F zceZny-=B}?WeB*1hSk5n3DC6@;zyv&ZV@j)4INrbDjY$_Mn9S*Y^@edRE@`wpyWt} zES@EZZh$dlj#x%Zj7nP^&gH(=dB`67C-qI*Xi!gs`*tZ6MzJfMncjH9$RRkzHYu;M zBeD6Il`@(Z{>@cv+sD9!+@gKwFDB`!_&t%u|S8S|6#h!?3ys@<{}3ohUz;3@D4_njnLAklS^uY zrd&x$si_D9tl3jyzQHhjJZjv*YViH@=`U02*K2WSuGPq35)M|_<_U85L-#B%CaX z`quIeS%FleQ1#n%>sB%T$b9T#5W@gqN%FIAgNdW51f74*w{!j z_|d-1DU5f$650z)3F|SS8H`yZ4{j0U&sAgBp&Dy0iYGsEF63dRlU`y@r!fzi;JreV zrE4RUgp+j$H9^XhnUYOkB;E}d!pnO9F$<;ByheD{sCi*YU=LPiS(!q4?`z~DAi%u_ zC23A5%{fwHh>jzdy^Ky~-$rGIhq@X!kp%%)O|~TI5|2jee!x^+W22FvP^Qn}!xeez zej^OM=IV%XPCQ_tq2Bokr-LT<)tTe!a1D5b!~q@q6jr)vkcl)7kAl~i$&oe1@BJc= z_Ja4{+*#dF!)^IDIuw1f8EmQ3l`owONf^wD|DfCw2FOE6MvVNB;|Lb&;KPgY_QEK_ z5QWh@-_(Sd-S_SlJj&9?B?SZp1S?&^kQRrGs*HH+zVa}6rR+AC9l!v?&4x_B5aC9Z(-?5Pm_tZt#W$2H74BuA zs16liYLgA5e(0nZcgoYjn}Be00GVAE>>e~8pM4h~b7{?yisdps-D_!?V)ErNTJ3uU8975w8re+4VYbL&&T&M74p2%y> z)omc1Zi4iIu+t%|MZv84eu~{$$V*!_J@JKYg}WK}`I($FnS0K4ymkT?spSGjniruX zfi}}tGqZKRn=R5d&5v;MmO>||m;#$lJE+rQEUx+pNwHD)r*$6&v zhXxErdU&SS^4k9pm#%!y**f2jdF|<6IlI%D1800Tz6BJkP@??@}&;6g}JnTLvP!A(7>|L+>FyjCCA17!NO6-d%Egg z9xfA#s+eFj$HOH4a&vcLj#PcRsI@sBEW^$si`Lw$*j}%QJ7lHO{_StT*~;mB8x6{1 zg%FW#+wm#yI>CUAl}EXN(|nz*>>7S`y*AEQ_ol;&!qhLRzEHi?%cg$m);E+;H*d5y zts<|L6l4nsOd0W~w}2uu7Y`LpDyxw`&xZ87ro`F*i-$WDr$`-T=XEaoi?_3~~|2p@>sZVd_DT-eld24F! zcqiwHwZ`HSyt49|Vp!o@|A$XzHv14L%~1owMHHfq5i;CJngz|C{? zyXBJaRLs04#20fIkJ%?VzCcqq?l%F*(DzeYqTa-Hbec# z&zin@lF#=Y-KhNMs?WyHH7{RUH$Jkj(>YHM0WRcQ_h8JTB%@SDh#142CHdopvt^FT zTrC1Eg7v5Wc+V7)1|N#7y~aCrd+{g#GE5!N!AALqTP8KI9LYtjfK3fSJ!W9Ygz@DA zGwz@28V7W1@~-bw$>d2u&NqP7hx6R);0Urkh=OlfJ&MuBfCJuCV8#^_&R%a)O!B27 z9#>i+So5VDS$3&1%*?&yaFj#_#L5%iz7IMUP6<<~{FAfiiyztl*sBF(3yM_bQP*R# zGg_7pHq=>AAGxUhg7bs&hD#3~Jn-H4nTn}AA;Ao;M!mxF9@C)``VQMJs87LFJJ~Wt zT1slHze;|gS5Y@7?&4_~Px(C$1ynpNaLDE8V5kW$^F~7+OFB>F&WFMCC|Ztw?063Z z?CP<&a+4F(`!P8MbwUPsAHWcBY86&B=gq3K4u*#s+O>Jq?AO%L*j{8o$#&{^irrx` zpGu!vdTJ{3$bE`J-I71YWS(MvmRx@He1qbyv~#T;5jshmR=+qb+TPpM#ciVOkf%72 zp}eQ<*r#P}kWt5pYZ`+aT9ludrHx;QjNvkrfpt;lr66@N9RyPts zd5a#yfYYbH>o+oNl6CYzey{?zHn8_QoDP|-?D%>AEQg1|cd$0z9=KG~VI484(>bq& znVzG2*BoE^Jkmf~Q^kQsq1>DPxw9yTfszr*NO&h97S5j-8SpVZer@wsbJjX)%MTSO zV5UzvE`3&d4x%^$kdVp?AT$3W7zn>qq`6H+0t7X*o+~mYhIuwj)nMClt(%O>sa(h_ zoh*IN42NQapPyg(HVN9Q9XPV%RqQjA&sNNxpb&UC@6L5Z)1tX1h!@IS*Nir zF?Hh7ysxl<=JNNRh6WqOAAxhRF7YQhG5_=>k+^#5L6ZgITjYb|bS`U_0G~)vIk~UU zj!5P!MG<66PUsNNgJurRODe0x2##00o&^vhz?3!3X*X%;@831OS<#fPkdEUth#R9H z?9<2^utHZ%yn+HsBEL|4-MUr)8=9I~-a0KHokB}H?tA#~yB~2GM&ZS}kyLW>hhA6f z8tr8wijqPxZS6NO8IWCNor*Bhc1}4aUM3004r-NKP|e^>``S_P3^~Nl?_U-m%w7-j zAb?=gOYqXg9Cs|_?rS>_0cV$)U28>fG~{Ux95{gCtGb(W`cXdRmJ_b?1n~X}6ADUT zR#pe4sK*o>q-rP?%w~484EJpOoFz8F(p}M94`~-cer#@lCz_T88&iK=(p>6p6K#H^aH|J!x{QN(+J~kNF z0TRpUj<0;=`l=Xmsx9cNTta_JEi(ydB4H9?dB@tta!2u?V>ZSy96Tr|8w4pZUqd-%Ba_JBcK4{;7!7{Uv{+Fvc2(%s}4HD*_K zAwT|eyPktg-_)KAy0CiK`^5QpfZ-hm}G=G-tE+7Kf9q=prGwBc*R3+Dw^Ypljc$uC7@{(d)Dkw}-WO z1-p9KyyJW{kzjn1CkHw8+LnDvSG^H(j{w+Ik~v0R&MWZv()*6t4WA*Yp6sr$ zCG++1Ay}ZjITYj@&LHB_x!X=8(zJMqFoh^N(!Oddb_%)C?Kr&94JwzxGC42paxrGIJ z%y*7ANrLA%oEZThlv66QJ!blXNJU7|ZA_%pRAW;>ERy;3#Dsx-S(0S|5g*cj(-)$t z1s`Ozod74~=j9Pl*ms?PB_ubJ9%e$Jn$oSuD9osd$Lmh#eWM`$sIG1;QaZqU@R(8t zlW;M(Xv)^)(<+8Sy5U+R1j936w!o5aOiuiH33SQ%Bv{*Pitokq*CWT7%Fc}z3(7^enNVgD3RnI$ zN#oY|6xzXnMc^~Dr(D;WfTf&IBJOu##M<{CEbB6Wi=#Mu-PlMFRe+m544jqer9RF> zV*Y}J1itlXp>KsVWxp&X=?Wc31X$g`CQ>ZllYxmfbMTVgJMGd4Pyjwo?>>L-$G{)_ z!<8-QCS8fBif$h=Oogm7Kf?sKH7NmPx&R?)bMuy;Lc{ARiG5)lju#^J^xJ}|AAk~+ zCGf2f-I`m1q2(6}3I-*0&H`Ma_;ee<22}{N*;?{vXsc&d5RkUgUey1n`KMuoi-QtK z_PQT|-Ns9q2XAaf#!e?EVbXRP@`s{8-RSS@Q+nhn6;!i5w5q3kZ(LQ?F`S^F{=LSq zLju4Umpr!o={mFr?;e{dojjE0L2&D%BQxP!f#B3!MAZbliG+k#f$vz4KWg3oQ4hl( zOKCz19NA^HRbv^|50AzZ^E^-L@6sY(axyzkwp$eyTg}ZS`MFv!2Dj((mQ)hZow_qw}>i`>3->rKVJ6}=M7vg=i2_XGD2gS?eM?CJKB^Rr3-`oHkt zn~TbuTU*VHjTxAkr@w!PXJHU}_3LJKrKp^hszf6X*GfbfECKpmrfSbA}$xha{)> zPhi>O0y;$!z?5?e&UNtNB6=ZekI5G{q8>0wBqZch(LjDk0g80O&jTy9^5C05cmd!< zNS#~vTy~oW9_4-X*-7bQ+!=fgZrG$~fIjHggo?VZ& zns{JhRWvh!oZh>02d%_ipRahOM_jgw$Rq+WX9{|RKD_1gyUz!ZQD;X0K>Y<3Y+-eA z!L}d%q^C@^lP4z;Vyjl+yj4W3U(<^4)jC4uejE{hNH29f%s3RSDh$Fn3JX=#d~kKx z0IM*h^pz(^({wcT?gdP_n3yn;wkwdo7sEDkd&>VPRn0b>KS(0W^v*~iX2U!b=_{z? zQO76Vzc>7@vxZ`h(P!1rx*BIJjfnm^!nX`*-}ihSvXy}gNjp%*O9`GyIaET(P2b4H zZX-Wj0f33b5X2B)Nw^%MVnrIM(2eyy_$AJk7o;c@L_%;+LMDNKEBL-`z~;~V_HqSU zNUSU@D(?l?aa|94x@P_Q?!LY(MG_Pt7DrI!Z9A&xzqH8FCvbq^9=%Dd;c-;o2#9Fm z--69RZ!h8Q?RKakFLb2v@@3eHtdW(Kg~WtqGn@*D>8;eQkga)HyENk$riB`?$WTtG5(o#RI}$3jz4U%d-%o4_3PFp zjGwlZ4UAMnI}w=+B7k|O0<0rOATZNF3Wk%Q>7+P#DNrV<^Yfpdc(}lJTSrYyvptp1 zppivDo&BjS*KQx)IS~&*^6J@7Sl%d*S}yOiz2&*8m+_|U4D%P9rVvUdo<0qMX)jVE z@T0EH^83S`_2rQX;q;$!vv_fx%U4YOte%+T2GO2-X;2_c_}JqN*>kb*Rrhx^z{3Nz9Ec&i%A9I}RZaCjHxf1W zWPj!YNRY7TPcTHmTyuElbN7k|QDixyGYRh0VE0~y8!m8EH-49!4B|xmBkbd`EQv}0 z>G6pZCx}5vN39-Rg$NC1Cc0|ETzUm`H-*thX}Rw~Igp2}W^7#mIe~p_VQV{waxmgf z&^ROeO=u@Wi5+i!S*m6eqsSkTkc%X5VT=Z8oz*^-%(4liyEe6=85 z7%`S!=^9D*o8tasG@DiksMoxbf{5@nTqPtV==^jSR>p>|W@KeeIDOg#th%N{_c&o# zL=p}dKC=;VC0ltP8)NJ7TRhJQZ;hi_K&!6Y-HSfaL$I&rEmg_?zchK_Kg@iUi!w?xs zA)|N}D`AEbg;M!e1v(%Zwo*%_}97!|q zPsJz|SkGu53rtq5Y=?#gHuNxQVY)U8mJeaA=U--lR2J>k71&pVtISwC<@4uHo@{

~!#3YY9uN>=a;+1t+wD2D8ASaaJQ!^j`cuo9vy?Xt( zdg#tQPm6o9ylDH(#5gxQ-#zJlZin2N9s5nVe<_$8F1cQruxP25IQMI-Z%MOGUAQN& zij#=vS$Fm7lXhHhb3zluS^cNPJ>rGx=T0^%x0QZ)y)gMYXoX+(hhIPI9iLCXe)jHg z_Ky!I*&M$9+M}mO6+#MEoe8$KwywWqE%XX(t#2dE=BYQhrR}! z(%aiD&bJ!v`L>Xte8N+hDPw)5jKhxDT695KwVmPgnfQpVHVYf^eAkUdjad3t7a;G<);w~xq@?xjlhmGG+V-&i82+r9&DifVS{r!Ld922k(86sl_;4 zULbNhGo~OFS8Jf2{EFbBg*SrzY<<`44=iq9X29-qc6PS$0j5*vUDJGW4|(LZ%aU6X^f7m=;^pT44s|MsiW6wS;89+^`t+l`S1>hGhOSn?YNqZ0cES`& z0~>k%^H)Ec&fgnOcUhswq;T*L(o*gGj9F`Q?Y;5rXT|vlC6S}!8ysh2Q#T%b??V}T z(+sNg2Wa2*zDvc#3;bVnG&H<+;(Pb*P2;{z{U*-kPm@?uS&HC3yMl;w;7k?7B?KIu z#2U#H96VTMecpU9E%6J64Z0?MxLaB7)O|pEgcnU%jU)Vvf`#lVul$c3 zdBNF_#2F}F#)S(IY>$Fu`18!*AvaKaN3k*z5)x!WhQ3TrDs1xC;F6mfIwIxpZu52U zxJFQ^4&T_oBM4_JTxy$dq?}j&olzg6@js4CrMIwZATaK3&}sU9XB@|HaJbp)En#;8 zWEgbKn~#ohl=r=UZE6^HG{*xX=?dS7C-mkXM~vH^B#Mdd{nHoTRc^yH|KdeAO~AB3 zM2@sqOEL7DA#QGK#9h#WuXNd6?#6gatTShF!A$DzM(h-`jVI`$;=~foKh+(1e~Q>y zPgXU3+A9BG28KiBX2=l0(!C-b$jhWp+Gc)u; zy}Z^s_HP?}<%;a5vV0K20% z*rB*v`zB!K#byYtj<_a2lc61$djv{AJwu7u3byQA*L$N`UOgeT(uU=I{ry3B{>Yuh zB_)MmKDIb;lvCIGY(p{HE+DC>7^+K3et^$RUN#c_yqh;uuo6bbig0|~x%A!6-rmH# z4XkTS<{CN~7GC%M)6lssHq|!5!3EYa4$pF5-|dBEc8f=-|Q9caCGa zQU!$Jz`A%3H(YOHeb&BLJs(g%&4i+)bZvWYS5j1zGw})wqU!UfPh$@&M_i6g_)ZVq zxqkG>5zDK@fVwBTiCcDj{92io>-uhe^&!wTa&yDBvCXohf$?MX$LigB?P;na)+iJV zblI4hVQng+%{qu-6*D8<0|U<|K0I8pX|dhCA`0$*cI6|0HoOI*wrU03iQ2l}1!Z>A z@ZKGczlNR%{NgI1E4}ws^9hg8&CUnY&o^N0ejFQvuhAcrg@M=irngV8on7d>Jm~jq zo$NInZIzoofBmSoYd!C4&47a!OsKVU=IOOGTV+b-yGk9mepZ;+6V!tGT%RKbKSu9RF~!O>3HEwpUEbfy(#wySf6&rD%WUdifNP&X!A?{(zzBojN7l z8DV}-De7tqC`Soq+!ZF$4?biEdE^y;<+alWxQK)m+sE!0Ax-B$SUn7i`8bExhPmt) zJ2!XSMa~s@P<{OIyYj%d4W}ft14M;|oj~*7p~>ROQ{>-KKALL2(f8+uL}cviRaFz_ z&n&E^!=id?{StmO9UXd~XF&}H=ZJ9j%o_du`{c<-DI9(FaMFe)1(KfV=;)5a%Cs_= zh4P6}RSI;%Up*d%dGaZ%-9G zzP>WB@8MJ2( z!8~UNGE9&`)?VFclU*c?0^lrv1ZFfKEL^x=l_9v3A*(#t)sp~< zekNJG!SGCb5annizX|#6WYu?@#@TIkZ9cZRx0%yn!Bx#sI4mg zw5_czAZX*0&Vnmf78Vw)GZW$<3sYsFDeHDhr;N+)%aiOUbV211=Ii!1!8LY z_U(@^{d{rB+~SSz&jFLu`t51&U9G3Va+A4)qD2T0R0UdPIlYw zxY{ska%|l-bz5N3JGnON)$7+Q4+Cprga3~;Mf5Z;q!@tnbmJPYhbF6m7Zv62`FPBk z-_|ADXw_`B`sL;?6*5lEx)NOc@saED`MS=CBuGJAA-V%f3mgH80Zj!jz>auPi9=Tp0b(ND*9qpI9ZbD^(QJ24L*Hm=;Py z3xG|HPuFF4^!q8-r`1YfhKz@|_v7`}1@d#XE*~1|8tOXZz** z_<-SI2MqD2s=VBgh*|<{oC43$dv z4cLOJcdC^I`fe>SA)QVJ7H*JuGBGgN0GtB^_TfH20wKO@o1_AZBK2*1s!h0@{2Y zXtR_s*K|uz+B_BrTrUsYI0c-N0W$srm#yEs7x%B}D(BztFI9lSdh>0WR!T`PutoBD zxsNe0375o-U3d z3<~~XVPWy{^7dR=4!kS{(=X3@w&$b*aDeQO0E34SaQzMNl9m1@uK;GoHN~NqW6UIh zg&(kA@kfK<#021VQWX70~QsDRGz2%;K2@9E=B+o&8J=?i#(oS`c_>#2>Z*(JY0A zPQ&b5625G}v25T{5)OMVhP*{GLHqM3xdjLVWrM@AZr$)@)6~`V_4R%G^5sKwh6Yw( z{}H$c4m4+3w}_+58R)r`y~`rAj6BNA%a5%9b^>PJXJgPaF)?{_celBr;l{07r`~6q z%$22ZpyRjc*{sQl5;8Ktwywz}Hil#^ZEfNEbJ^7NuQ*(ov)lCSUNvS028IJlCXztP nK<`2dh_}OGG9!?F{OJGF-_IEr)!5wu@)$f_{an^LB{Ts5j?PIQ diff --git a/docs/developer/diagrams/contract-negotiation-states.puml b/docs/developer/diagrams/contract-negotiation-states.puml deleted file mode 100644 index e3ec819e17a..00000000000 --- a/docs/developer/diagrams/contract-negotiation-states.puml +++ /dev/null @@ -1,117 +0,0 @@ -' -' Copyright (c) 2023 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) -' -' This program and the accompanying materials are made available under the -' terms of the Apache License, Version 2.0 which is available at -' https://www.apache.org/licenses/LICENSE-2.0 -' -' SPDX-License-Identifier: Apache-2.0 -' -' Contributors: -' Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - Initial Draft -' -' - -@startuml - -state Consumer { - state "INITIAL" as INITIAL_consumer { - } - state "REQUESTING" as REQUESTING_consumer { - } - state "REQUESTED" as REQUESTED_consumer { - } - state "OFFERED" as OFFERED_consumer { - } - state "ACCEPTING" as ACCEPTING_consumer { - } - state "ACCEPTED" as ACCEPTED_consumer { - } - state "AGREED" as AGREED_consumer { - } - state "VERIFYING" as VERIFYING_consumer { - } - state "VERIFIED" as VERIFIED_consumer { - } - state "FINALIZED" as FINALIZED_consumer { - } - state "TERMINATING" as TERMINATING_consumer { - } - state "TERMINATED" as TERMINATED_consumer { - } - - [*] --> INITIAL_consumer - INITIAL_consumer --> REQUESTING_consumer - REQUESTING_consumer --> REQUESTED_consumer - REQUESTING_consumer -[dashed]-> REQUESTED_provider : sends\n**ContractRequestMessage** - - REQUESTED_consumer -[hidden]-> OFFERED_consumer : used for layout - - OFFERED_consumer --> ACCEPTING_consumer - OFFERED_consumer --> REQUESTING_consumer : counter offer - ACCEPTING_consumer --> ACCEPTED_consumer - ACCEPTING_consumer -[dashed]-> ACCEPTED_provider : sends\n**ContractNegotiationEventMessage** - - ACCEPTED_consumer -[hidden]-> VERIFYING_consumer : used for layout - AGREED_consumer --> VERIFYING_consumer - VERIFYING_consumer --> VERIFIED_consumer - VERIFYING_consumer -[dashed]-> VERIFIED_provider : sends\n**ContractAgreementVerificationMessage** - - VERIFIED_consumer -[hidden]-> FINALIZED_consumer : used for layout - - VERIFIED_consumer -[hidden]-> TERMINATING_consumer : used for layout - TERMINATING_consumer -[dashed]-> TERMINATED_provider : sends\n**TransferTerminationMessage**\nmessage - TERMINATING_consumer --> TERMINATED_consumer -} - -state Provider { - state "INITIAL" as INITIAL_provider { - } - state "REQUESTED" as REQUESTED_provider { - } - state "OFFERING" as OFFERING_provider { - } - state "OFFERED" as OFFERED_provider { - } - state "AGREEING" as AGREEING_provider { - } - state "AGREED" as AGREED_provider { - } - state "ACCEPTED" as ACCEPTED_provider { - } - state "VERIFIED" as VERIFIED_provider { - } - state "FINALIZING" as FINALIZING_provider { - } - state "FINALIZED" as FINALIZED_provider { - } - state "TERMINATING" as TERMINATING_provider { - } - state "TERMINATED" as TERMINATED_provider { - } - - [*] --> INITIAL_provider - INITIAL_provider --> OFFERING_provider - OFFERING_provider --> OFFERED_provider - OFFERING_provider -[dashed]-> OFFERED_consumer : sends\n**ContractOfferMessage** - REQUESTED_provider --> AGREEING_provider - REQUESTED_provider --> OFFERING_provider : counter offer - AGREEING_provider --> AGREED_provider - AGREEING_provider -[dashed]-> AGREED_consumer : sends\n**ContractAgreementMessage** - - OFFERED_provider -[hidden]-> REQUESTED_provider : used for layout - AGREED_provider -[hidden]-> VERIFIED_provider : used for layout - REQUESTED_provider -[hidden]-> ACCEPTED_provider : used for layout - - ACCEPTED_provider --> AGREEING_provider - VERIFIED_provider --> FINALIZING_provider - FINALIZING_provider --> FINALIZED_provider - FINALIZING_provider -[dashed]-> FINALIZED_consumer : sends\n**ContractNegotiationEventMessage** - - FINALIZING_provider -[hidden]-> TERMINATING_provider : used for layout - TERMINATING_provider -[dashed]-> TERMINATED_consumer : sends\n**TransferTerminationMessage**\nmessage - TERMINATING_provider --> TERMINATED_provider -} - - -@enduml diff --git a/docs/developer/diagrams/data-request.png b/docs/developer/diagrams/data-request.png deleted file mode 100644 index 54fea35b79dd8827d97063b57d7555aa6c8170f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32341 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 diff --git a/docs/developer/diagrams/data-request.puml b/docs/developer/diagrams/data-request.puml deleted file mode 100644 index 75567610eaf..00000000000 --- a/docs/developer/diagrams/data-request.puml +++ /dev/null @@ -1,26 +0,0 @@ -@startuml - -participant "Consumer Connector" as cc -participant "Client Hub" as ch -participant "Provider Connector" as pc -participant "Revocation List" as rl -participant "ION Network" as ion - -cc->ch : Authorize PC for VC query -cc->pc : Data request with JWT -pc->ion : Resolve DID -note right of ion - DID contains public key, - Identity Hub URL, - and Connector URL -end note -ion-->pc: DID containing public key and identity Hub URL -pc->pc: Validate JWT -pc->ch: Request VCs with access token -ch->pc: VCs -pc->pc: Validate signed VCs -pc->rl: Check revocation list -rl-->pc -pc-->cc: Data response - -@enduml diff --git a/docs/developer/diagrams/service-discovery.png b/docs/developer/diagrams/service-discovery.png deleted file mode 100644 index 4de39f84086495fd58a2fdc4ea3b9ab9861f34b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26808 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 TG9m##{Q^-})mAB1vU>18FWwaX diff --git a/docs/developer/diagrams/service-discovery.puml b/docs/developer/diagrams/service-discovery.puml deleted file mode 100644 index 2ab0f1d0612..00000000000 --- a/docs/developer/diagrams/service-discovery.puml +++ /dev/null @@ -1,25 +0,0 @@ -@startuml -participant "Consumer Connector" as cc -participant "Provider Connector Identity Hub" as pcih -participant "Registration Service" as rs -participant "ION Network" as ion - -rs->ion: Observe (Poll) -ion-->rs: Update -== Service Discovery == -cc->rs: Query entries -rs-->cc -||| -||| -cc->ion : Resolve DID -note right of ion - DID contains public key, - Identity Hub URL, - and Connector URL -end note -ion-->cc: DID -==Self Description Retrieval== -cc->pcih: Request self-description -pcih-->cc: - -@enduml diff --git a/docs/developer/diagrams/transfer-data-plane-consumer-pull.png b/docs/developer/diagrams/transfer-data-plane-consumer-pull.png deleted file mode 100644 index 9aa6007a30c7760c8f8f50bb3a2421641c5ab79c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71985 zcmeFZWmJ`2*EWobq@XB@G>Wu|E&h@dpmjewMNOKk+{ZrIeOHr?I( zT^sb$>%Oo1ex5(yc;6r27>ogfz0dPpYtFf59LJoe_cIwW94sO%6ciL3@u!dFP*6~F zQBW=-FfM}sFmqYCf?xF3PgJaR%`F^E^bM?0#PrSdEp@E*^(bCCP#9TTTUhZhGh3MG zm|5GHnlR~_o7#4?kfWenGJmC@V*Ts?C>Owe>|<9HrOkUEU8`ElydT{7HLtNW9HB$gdN&ORmjikaVQj`U0U>g77tn*$o`i)&Ic&{V?R4Z*zM@M=6UN|_ z=LuEnm<+kI+-k&;Pd)hNg`Do>hyq@~tbv!hH;t%#SdVO3Djpp1j`B8<2S+xbsd#pC?Phq3)Sp!_sw-i2#u~17;qKZ~H zLoP~bQH|Zp@JM9GRa^WlV$7zt@j z6YTo4DB9;26SK%R!eSAmV-zREQP9I!^JX=$kk6{Q{pdZz19O!?mRNBD zl?w*&I*BdQG)j}cH#vDv%lZYSuW({)y1W~R5XWKN#L{>*xLff~Dl&>C)iUaf5q+gq z%4Ak577*MjsM(SDda=Qv7E*5t{{mJZz^&j+;?qX2YuWaecXza zF=7ffBw{CYvW0C_c7%YnTMeRIWth`}^JT>fYH^?1d}f|AbhVw6Rh<*xd$k7*iCDRj zIiYc@Ye9IBZ z%c7Gj3x0pb9Lnz4G4d$Zm0z2tl8bMifnHnBwG|TYdx4r&)|=t(bnYn`s%qL%B}2!T z_!-OEiL4jj89tbFdt4RSxRl}BbUg1$kG+n~*{P}pAO)y`NbTcP1Vbm8uO*$$Qk3{;_O=Rf%TRNgm#{*5a14E4Rq zwRaR4XFs$)!W;#VeJrd2h)` z&@1PRHuw|Q+lu)X;~Tr!Y)fxiL-ivzA_B~`(ub?v5STQv7Te3gsnRjjC6aoWnUYh> zYm@_WOd{a+vlxkl?lUfd2JRI%B>fQii!-{qg@W* z5zei2@~IDvx+wVht8A7AV9r}O6-Act7F<%EXA!LWEwNS|+)D%5R>Qn68MR#x;Dox~dS<|tzhnYk3bsPDecKJ@WdylDj3VJ19uUQ*jHxq+mS2^$WD_AU--DNpD8jogaWa$w$?E<61uM9aaQSud?g5W!)M0i+cclfp`5?63PG zv|YtLLqqWg8VvKZe5;ck9H0qq|FDncWfO?yc%_5O(XKwZDCXR97=yCh!CZpdEc2LU zE2H=U`Gq*w!vztqE6{2;L6~QlIJ`B&kUapLg|<@s)X9&UHd+NHUCsOf`!YkXru+Q} zGG$v3H$#B2YPy~5gbHm$#D?dHyB2Zy*Ey?0FY^Se?W9TFk}C*`$$ z7PZ>Ml;5pkc++>9b^)$kz)F=;jX33H=nVyC%n1S7fJ(ZF(OibYY$PnfNy1Iw5fR@-ZEFlPFsA|JTF21j9UXHa`Vcow)PT2$Kq@TRDr+IXO;}358Jlmcp8zektlrG*4uxUhrz9}yPwi+E?g!;rA5G3 zpIO)XA+v49BYC9H{=w5VXvkNd8+Ji569bD6X{h7+$;k zyXhhA6q$HF2gK>gScTnOMV;KP>V240c&DN#9nwAi;lJQSr*6961!kZH`o5#VZs3<> znq=@cUP!P0aM3Ggw(D@49LCF}V|23mt>HEhn_2crdd07K61yqvxdxR(iiyGA)idm& zU2$#;g}b+lo%UAMieGO~l32B|tX1uiRkT3j8?~>yF7y$8a9ee?9EA1^nKef?^Vl5Pl8RvoCxZGw5C`Uaz)K!6F{~CQ&lR7Q4|T8SbrD>kTUrBewBil@#`bC@(G^c3)}4LwUP1|Dol<`*q`sSWcIqpK)lpw60ZNL3wcD z#K>zJ1LeEpwut_1;eGZCo>k8$Of0sBV^=x1(-r6nf#vKhk_k?%I@y_xF$;DJ=_G*% zH=*6YHy#fZ4}O0b8X78!BOA-TLkfvtZ$-yNKJOF86snJI0C%chMh|I)wPuk)>1fvH zJQm&DKs>{efcJ+pp`p{nv0NMdcKce`g;q?}IbxnZQ5hLjuLrnKOCWo$#X8k|TpuwG z6IripOb$XjF*kCGFu~gLOoC+8b^-+xCBnXL%{iAj9o2}5`cwAW2^?u0c;g;Nos5r` zn05p&^&T+$XZm<@9m5Don7f7S8 zxo|O$7O&Xn@L`-UwHf-t_FW}|Z+OIbw3B0I;fy0Y{;p_EL5({C5@^DIP^LU1#zlM0 zWUyuDHBtiwHIM63_mT&B-{m6qJscDusUthfDbnXsguX!4aeo&Uku@R-mrH4FYM;97 z#(TN4d}{~cLc=_&X$jw1*6*y?tR172t-iZ=vHLO7mIh58@Zyb!J&|;#$<5=$3de~b zN@tO_JGrV37u&BHg`L_QX~J8=TU)+b$|8>3#*ff54H=yG+Eo=Zl`^%m8;EaE=K&{?Oj(Ev=mqj#;@f+iafYl+I0|sU-6DARN(a zw`f%yYW7CbH3}47oys*bY08?8M{DJbZjAU>tgv zCtdRbm(Y7jzA9w0ylQbeRy(&I;3T74WSv|i$S1FkbG~QtC*^l-Yidk?V7X7372odK zbs_?Dm=>Y$%g~IV56o3gXn`?lJ~5P_j~&k{>kVG3k3c^?f;f;f>%j%8jye*ysBXR< zNUt9r?Ou{`JlIc`<>#N|rtjK_SUcLpmghM6=8=#sOTaVS)4HKcQ;8T5Q!sKBZT&%( z8KV5gsnhMbdq<xU^YJx@Y)S}1f5 z`Zh1drssk8{xTN*{SoURnO6#si5|1#l*ahDO^01vN9bI9<&Zt>Zv)d`l5J%tPD#+QF}l7*Zej%?PF_Fr}5V;=49 z?%ILyEnjDb#D^_lJcal5U0>GszV0w-rr)tv`;4Lh=>%t@aj5Hn-mvvG9CngvDj%>h z({UYahil!)QRG~seIl<yO1sLG}!-Y*2gs&BDvZ%VwOv&VEr` z#t#b*kB>tz5Wwjbq&jK2_eT7;nd3B|bpGTVRP15?(VwcpBw@$VR*m_Z+A68tlcMNHrJP0KOY=G@ZRJBUjD+# zyp4CRo7JI{0%Xz0ct|n1@HFn7n`~RPV?8@Z$7{r`R1nvm&`JxtZvDZ$h%qN%bNL}! zzg+Y)_X4506wEb=T&Cs18fMp_W@Sg|{TN0;!GoSQ?9(W_&?KqA*F13v5%@)B5fS*- zTzhwO4UX$74Qfj_=-JM_Z#J=QFI}NyF_Cr~!e^7JJTw#$bIm%#t=cL0+Zx?-cN?8T z{Fe4kBXQ3td6?>9y(N9@Q2NGXb#LAt>~KEE?PR1lLiXU$xPk@_+fLpSOsRd9_Amq~ z!!q*;3de(?NSdLmw+q&umF0BU++6mRladXHneSiz#@a}AazbOJ#irx2A3=!qhbWsf zU{xm*P*NTm8X9J`JU`9NKaaGh2D5hgPDka?yz}G-tgO?mWzuCUFI`^(g!KV+*;*Lq zs018cl>f~Nqs#uGn^qjbs!?nNtOMJQCT>(}m0`lBIYYZ-;l91;x$K5EZtd=xBE&?c#bCaqvct7&c*w+2t`$w%UfI#6tO`M4i@nQMy=?57b3@=@ zyE3`2P8sGfR|x*tz#*2WI$9;~oyfmY6&=@(zDM05d5LYs z=CGxHYf5TrkHf|)0ReHsiEakoZtFVJQAbD=XRso*3;rux!qK=}CyKxZ2u2`A>TV(>Z zrfRe5OiTFvXyP~lWk&5*dU$_X&dcfO6@Z24?xmnX)0R1UNpp&-Po8Y3s2NekKJ5aD82lqIp_*|#=qXw^gXC68LG;=M$MLOl2SjAk>>?sVc1G1%ycg>vyBT`5DrnRBdI^Q1=uEO z))bMdxM=7>acwuTg)pr&h}rY~yXng{ttcorx&jTF&@P}1{H#N+9I5w)#1tdHQ9J&K z42$+9|^8{H9Uv>}a5IPv>GFXRe9LCF$3FLvTnmiF2s3qwzE+nX>$;AnRe^EiWW z8bY>}xk^9MF{dCdx^TG> z`(4BZ6zb39?G_{#P*eh4)31nNR8xP>M8n z;TBk9&;;B$0hg59`QG{qh5N2_dK2vO-ZrI=J3W}fy8{hs-{_56$*;P;n6DBM6MgUG z*Sv>muUnXVdzX0_9@tqpd_ z$T;3gDYlE)>a4eXaPeXcXZ!gA2xTVBytB|Rw}J%ll#A8*@#E}r+v#JSK>qfGtEhL4 zfdINZ2Hs}hrmPL`0wwIzCN%V`PXex$L$s@8KHkJ~65%9vMgo)$LU)Yn^12H)NP(t5 z?rlc0*fr~5e9P~HF?(WG8t`4HpsFR~YhgX?_7e>73;3#t;485HKGA)A@Q9)yTpa%* zzY)%m56fK>Or+-Dn^kte9)+f~pC?jpyf0@^VSM-ZGrJ(n(FQZ*9OB zpYKj|Zy5UBj>n=s<+`q)*`htcefaH~CXm@FSrM8^{SY_LH-9|cgbUX>7%kt|etKbx zw8#f6Gi#TDSqXEbdsS;=-LP+WKDLt#<^O2%;L5R;H?2DL^Yy*Y>@OG^a0`T*6r0eJ z@47J~wOJs`MHSxC=AXCguJF_hK&T{U|41$7o%KxO0zbKJgp;3Nc) zf*_o)lWP&Rs9J2~h_UPXSML&ExrETT+XD7{e75I&50h(_Hw$Xgn_$>yVdNQ(TQxrQ zdi25mS~#uKHRy}m`*YWymq;Z|tO*%^SMnp(^9afWCDxNut@D)U_5M-H1NXtUMz_+( zP>&|GAKwKdJ{IU-zwCyz-IvQ0#P2mcO&-v1?!5!v;tsLGk8`C6oK{e^kUi$Ojdoi0 zIFvDjcHimD$k3q_GxT~M&p(~X90U59=udG|6x2Le@1#mHiF#ZEJF^X5z}F~)V%_Js z3W)!bZf*g-vy}-}M3pQDe+N zR`W@uHrk|%MfbYpd;6w&lc1ZpBwTrbso`C#+yclOPr101Peh7+S%5<`RfHb^^jpIj zXC|a$IL6)p%yrBrVkmw7++2OAi1{pDXoXNW0uaBt)bwb5E`gveo!|w7ADf7w6t#cJ#aZp-`>9N-dOQ2Iw!r-Vj+c;+-W&y zbX0c!X{qsGqsx&k@q-D+GQz-N=RQYFV1Y)CLC^0&DG)spnTK=NyNje=KDh$y%41Ne z?vqGED%eaAW!)3ZARN|};o?l|g`TWq!05!qJY>gdylGHVO4u@#!bAV<3^RzzTT)9l6re1I1V4hhkA zT47g`#W5>ipnfgI>9Pwo)Z~u~4-XFsnXc5Rur>9>x)~dxRT{%?tON`vn$tW!EUZ|! z5jTxLjQF9^BgQzVvYb_#z)$+;NAhJe8oB+%Y@&$MCOf&y!^9`P)LF-kMIFaOngsEaCO{U z9g`I}xECdId(Pvkz_*o>5tV}|!+1hYGm@2fe_~F7oj!R5TOzs4t!85jf zQ7n*5`o?G89%|l&FCiNIW8gW7A|HA}>#!lE6;nP8MnlWX%f`7?w)^XoG6bxW-~_7@ zD@~X4tcqxAfoccTt{HM%kBmGtq-0 zJDe+ty6|Q^3DCOPTzkG8&D+y#^GsC;9+=)o#)AbRFH9(f_CldtTD~&z-~~cY6Gh#mS0mj2$h#nEi}Mks6JY)km1km6gbMVT^XjM zql@FUBjdGQ25jxJ#%9@A(i2}5hsj#cBK=p~3gZ=a=Ke(NfSjlw&Ok8+j#o-^>sdp4z1EgOUpeBp zIPF2CATt*G>vKi$ShO4~-f6!Er@aoF#W?gzKV(p4&MhOVDVEFg8+~N-Lta5krC=t7 z$L4G5mwR>#J&WEnr&TX%tU7>H-KRNUD}2Z$a3tLrOE~5T2XVc7o8m{2Nf6DOf3oVB z0wJv?JPqYJ_JaG#g+fX%91xU&e8Q48Il-jpS8lHdx*dD?Efw7d*uim%R5_2`s>Wig zVZVM$=$qYZ-aI`1d&|)2hgPC8va&Qwg`0rFiggr1$0dnmGwk>*xAwTIf87O#*QDgr&Plq4q z-fyZtkd$|qnb+P%7KQDdBH7;&K6S|OtH&7f z2=507;1k6+-^>K%(-G@kp25hPI6H<^k2sn_0nbUt&LA84AQ4czvV0q;W$Q<4)ply( z_f>;UPO1eCk}?DNcW+ZQ_Q8R@>4o(LbLLY{rglh<_ddLl7?o+z84u3Bh*H3YEi+{Q zC7`&P;`-hkZZ8NE5B59w-)}w3ckm@S_T3Q5Ze!)8`$Smpa;rFE!z3d*ET-t{d9gyX zVy&(DY_v9agkx@h*v!CZ;@@gJ*;!Nsp1`Skf68-b31%C22~nVsVU74u?|pZ4##OIkjv%B zxzvI`uXWrybY^r=R$MQ!KY|^^BnXrH-O^&EXn5EI=mcQXVyjQG6*7XiqLzcH9M;g4 zQfJ~3!BinuHplxLfY0V;;C$8d-lc)QskJvP&X!2}ZI~eNM#{3v>CfCU=SA&E(zIRD}WP9l6IK;H{$|gUjV12eehY{QrD!lk^npu?HH!URXrO!gLk^` zm?-Tha-e_}!OGTZ3f&Z7$W_@WUn1F$*uFNLH%WRLOn}VaDl4f+3>*BqI|gsQ%=c3! zCL5HP3?Ag-(MngzU!MGdaQb+<-D?Pr$o3i;mus@9O)O%7VUI`d`$_X(p6#=X(hf-d zUPaaU+(u^Cx!E5nKlo)sDJ)UXRLa0oPy+(PxXT`BWZ5%drt@%{jWVQ#Y39ASfN*IC z`#``Wv{Mh8LueB0r@XUz$|Me~lSTb$Nz*pJy_qI+oWH|L;?HN)^|`QvN7Cqi<(Cm0 zLe}@Or2ydSl@%Q8?>#x(A%5`U`&7Me26VAM^8+sFaI)A{Te^mkPh|EJ7bM{1&g(*H z4Q@7Cl&wD#!r-%n(Dj5UP+-{ZXjc{FbBCL)A}tZj)6Q#Cf{3yY2r^rcQ57EE3tU$& zw{Eb5RdopGbx}7YI@5bfBCTzsz6Km&i1k9Nbj*O=V%6+!pZui{SJ$3gwT~VLhcK=& z@TbGWG>+xAl5%v!BcG zZkCmYSdU&Q>vl@tj6nfK#Y5wPEYSIqnwAz4li;+<-FU0-v+-aKl|-n~aM41oCwAN$ z758mqX9s~Lw|+lJGL_3L;Z0eZ<<@TmNOw0Mz5>xXj9xK`DUfgT<8orcrrmXJ4_h4x z39RBu&@>aJmG2D}rJr1q0OO0ulY6MTaA&Oo`Adp%8beK^wIKmrY=h3vm zsf_aNnxi&?8xlzrb{aUdUcKOQGhl-HMk~^5=$~Uc1=c5!52AjzSzmTd zd?5G3-NPY0Ty)wx_~9<~5UiqZ>I_r3>>!C`-|p#o%#5OwyUrv|CZpjHW7bZL*HFS$ z00d}VSo2tKb@{TTzHlZ1)h&^0hmQbMk6$Qsr1S-O zcJ-%le_Jd>!s5oe0K}>%v#;3TJcyo@$C(s~GyLHX%=Q+E7z)aF^8Yp58H6+Z_K(Z| zL~fC7DotpnkAAnOupw{$3lRpLDgS-ljd=gVx=Zf@z>Kwv8Z_M9GHmwFY0-Queft{? zW5c-#1W?Yl-NX7mOc4-S9fu?ySYc-FDtV}X0l-aOM zyf6M~F{SDhx9$u5h5CZ0HK9=kxI6W{Y|AfkeaJSaYStl@gp!3b_3>at90|#8t=#%} zS@QSZuM}Yx)O^&Ph%dTrm6c82-sTV#7yqzK?n!0BElu)|wc{UOau|^VxK8hL z#3!7K*Mzo{qb`F^9+dT;F!~?LxU$V!AcS)F<9|fHf8XOj^$K08@-umGCvs;s_6SV? z<5A^&Uq-KoG$&UoT7D

77Z}Z}a@6X3$1-F&w7^B>#e-%?m#j^p$y< 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 diff --git a/docs/developer/diagrams/transfer-data-plane-consumer-pull.puml b/docs/developer/diagrams/transfer-data-plane-consumer-pull.puml deleted file mode 100644 index f2512653b6d..00000000000 --- a/docs/developer/diagrams/transfer-data-plane-consumer-pull.puml +++ /dev/null @@ -1,84 +0,0 @@ -' -' Copyright (c) 2022 Amadeus -' -' This program and the accompanying materials are made available under the -' terms of the Apache License, Version 2.0 which is available at -' https://www.apache.org/licenses/LICENSE-2.0 -' -' SPDX-License-Identifier: Apache-2.0 -' -' Contributors: -' Amadeus - Initial Version -' - -@startuml - - -skinParam NoteBackgroundColor WhiteSmoke -skinParam NoteFontColor Black -skinParam ParticipantBackgroundColor WhiteSmoke -skinParam ActorBackgroundColor WhiteSmoke -skinParam AgentBackgroundColor White -skinParam AgentBorderColor SkyBlue -skinparam shadowing false -skinparam BoxPadding 10 - -!define ConsumerColor f8f2ff -!define ProviderColor d9edff -!define WarningColor Business -!define LeadColor Technology - -autonumber - -box "Consumer ecosystem" #ConsumerColor - participant CBE as "Backend Service" -end box - -box Consumer EDC #ConsumerColor - participant CCP as "Control Plane" #Business - participant CDPS as "Data Plane Selector" #Business - participant CDP as "Data Plane" #Business -end box - -box Provider EDC #ProviderColor - participant PDP as "Data Plane" #Business - participant PDPS as "Data Plane Selector" #Business - participant PCP as "Control Plane" #Business -end box - -box "Provider ecosystem" #ProviderColor - participant PBE as "Backend Service" -end box - -title - **Transfer Data Plane - Consumer Pull** -end title -autonumber 1 -== Start Transfer Process (assumes contract has already been negotiated) == - -activate CCP -CCP ->> PCP : send data request with destination type HttpProxy -activate PCP -PCP ->> PDPS : resolve data plane instance -activate PDPS -return data plane instance -PCP ->> PCP : generate an access\ntoken en create data\naddress with type EDR -PCP ->> CCP : send data address -CCP ->> CCP : convert data address\n into endpoint data\nreference and dispatch - -== Data querying == - -CBE ->> PDP : query data (any verb is supported) -activate CBE -activate PDP -PDP ->> PCP : send token for validation -PCP ->> PCP : validate token -PCP ->> PDP : data address -deactivate PCP -PDP ->> PBE : query data -activate PBE -return data -PDP ->> CBE : return data - - -@enduml \ No newline at end of file diff --git a/docs/developer/diagrams/transfer-data-plane-provider-push.png b/docs/developer/diagrams/transfer-data-plane-provider-push.png deleted file mode 100644 index 7aea2e126f35d66952288fdc3a3a0d8432c822f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52021 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 PCP : send data request with any destination type different from HttpProxy -activate PCP -PCP ->> PCP : create DataFlowRequest -PCP ->> PDPS : resolve data plane instance -activate PDPS -PDPS -->> PCP : data plane instance -deactivate PDPS -PCP ->> PDP : send DataFlowRequest -activate PDP -PDP ->> PDP : validate DataFlowRequest -PDP -->> PCP : acknowledge that request is valid -deactivate PCP -PDP ->> PDP : create DataSink/DataSource -PDP ->> PBE : fetch data -activate PBE -PBE -->> PDP : data -deactivate PBE -PDP ->> CBE : transfer data -activate CBE - -@enduml \ No newline at end of file diff --git a/docs/developer/diagrams/transfer-process-consumer-states.png b/docs/developer/diagrams/transfer-process-consumer-states.png deleted file mode 100644 index c54d00e1d90d9b3f21606673c6e02bda1ba10dc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146860 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 {Nn>UY;$+M^~G3hypYXVgw3fEW; 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 bil^!8A1x^Gi+8Lbe^yoAqm;Vc;_Uwg SUSPENDING_consumer - SUSPENDING_consumer --> SUSPENDED_consumer - SUSPENDED_consumer --> RESUMING_consumer - RESUMING_consumer --> RESUMED_consumer - RESUMED_consumer --> STARTED_consumer - } - - state "COMPLETING" as COMPLETING_consumer { - } - state "COMPLETED" as COMPLETED_consumer { - } - state "provision" as provision_consumer { - state "PROVISIONING" as PROVISIONING_consumer { - } - state "PROVISIONED_REQUESTED" as PROVISIONED_REQUESTED_consumer { - } - state "PROVISIONED" as PROVISIONED_consumer { - } - PROVISIONING_consumer --> PROVISIONED_REQUESTED_consumer : async provisioning - PROVISIONED_REQUESTED_consumer --> PROVISIONED_consumer - PROVISIONING_consumer --> PROVISIONED_consumer - } - state "TERMINATING" as TERMINATING_consumer { - } - state "TERMINATED" as TERMINATED_consumer { - } - - state PROVIDER ##[dotted] { - - state "INITIAL" as INITIAL_provider { - } - - state "STARTING" as STARTING_provider { - } - - state "SUSPENDING" as SUSPENDING_provider { - } - - state "SUSPENDED" as SUSPENDED_provider { - } - - state "RESUMING" as RESUMING_provider { - } - - state "COMPLETING" as COMPLETING_provider { - } - - state "TERMINATING" as TERMINATING_provider { - } - - state "TERMINATED" as TERMINATED_provider { - } - - INITIAL_provider -[hidden]-> STARTING_provider - STARTING_provider -[hidden]-> SUSPENDING_provider - SUSPENDING_provider -[hidden]-> SUSPENDED_provider - SUSPENDED_provider -[hidden]-> RESUMING_provider - RESUMING_provider -[hidden]-> COMPLETING_provider - COMPLETING_provider -[hidden]-> TERMINATING_provider - TERMINATING_provider -[hidden]-> TERMINATED_provider - - RESUMING_consumer -[dashed]-> STARTING_provider : sends\n**TransferStartMessage**\nmessage - SUSPENDING_consumer -left[dashed]-> SUSPENDED_provider : sends\n**TransferSuspensionMessage**\nmessage - - ' incoming messages - SUSPENDING_provider -right[dashed]-> SUSPENDED_consumer : sends\n**TransferSuspensionMessage**\nmessage - STARTING_provider -right[dashed]-> STARTED_consumer : sends\n**TransferStartMessage**\nmessage - RESUMING_provider -right[dashed]-> STARTING_consumer : sends\n**TransferStartMessage**\nmessage - COMPLETING_provider -right[dashed]-> COMPLETED_consumer : sends\n**TransferCompletionMessage**\nmessage - TERMINATING_provider -right[dashed]-> TERMINATED_consumer : sends\n**TransferTerminationMessage**\nmessage - } - - [*] --> INITIAL_consumer - INITIAL_consumer --> PROVISIONING_consumer - PROVISIONED_consumer --> REQUESTING - REQUESTING --> REQUESTED - REQUESTING -[dashed]-> INITIAL_provider : sends\n**TransferRequestMessage**\nmessage - - REQUESTED -[hidden]-> STARTING_consumer : used for layout - STARTING_consumer --> STARTED_consumer - - STARTED_consumer --> COMPLETING_consumer - - COMPLETING_consumer --> COMPLETED_consumer - COMPLETED_consumer --> DEPROVISIONING - - TERMINATING_consumer --> TERMINATED_consumer - TERMINATING_consumer -[dashed]-> TERMINATED_provider : sends\n**TransferTerminationMessage**\nmessage - TERMINATED_consumer --> DEPROVISIONING - -state deprovision { - state DEPROVISIONING { - } - state DEPROVISIONED { - } - DEPROVISIONING --> DEPROVISIONED_REQUESTED : async provisioning - DEPROVISIONED_REQUESTED --> DEPROVISIONED - DEPROVISIONING --> DEPROVISIONED -} - -@enduml diff --git a/docs/developer/diagrams/transfer-process-provider-states.png b/docs/developer/diagrams/transfer-process-provider-states.png deleted file mode 100644 index 4df1c43931cd8556af12618b0aaf3e8087c53815..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150559 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 z 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 B5itM& diff --git a/docs/developer/diagrams/transfer-process-provider-states.puml b/docs/developer/diagrams/transfer-process-provider-states.puml deleted file mode 100644 index ed9acb53e5e..00000000000 --- a/docs/developer/diagrams/transfer-process-provider-states.puml +++ /dev/null @@ -1,129 +0,0 @@ -' -' Copyright (c) 2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) -' -' This program and the accompanying materials are made available under the -' terms of the Apache License, Version 2.0 which is available at -' https://www.apache.org/licenses/LICENSE-2.0 -' -' SPDX-License-Identifier: Apache-2.0 -' -' Contributors: -' Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - Initial Draft -' -' - -@startuml - -state "INITIAL" as INITIAL_provider { -} -state "STARTING" as STARTING_provider { -} -state "STARTED" as STARTED_provider { -} -state "suspension" as suspension_provider { -state "SUSPENDING" as SUSPENDING_provider { -} -state "SUSPENDED" as SUSPENDED_provider { -} -state "RESUMING" as RESUMING_provider { -} -STARTED_provider --> SUSPENDING_provider -SUSPENDING_provider --> SUSPENDED_provider -SUSPENDED_provider --> RESUMING_provider -RESUMING_provider --> STARTING_provider -} - -state "COMPLETING" as COMPLETING_provider { -} -state "COMPLETED" as COMPLETED_provider { -} -state "provision" as provision_provider { - state "PROVISIONING" as PROVISIONING_provider { - } - state "PROVISIONED_REQUESTED" as PROVISIONED_REQUESTED_provider { - } - state "PROVISIONED" as PROVISIONED_provider { - } - PROVISIONING_provider --> PROVISIONED_REQUESTED_provider : async provisioning - PROVISIONED_REQUESTED_provider --> PROVISIONED_provider - PROVISIONING_provider --> PROVISIONED_provider -} -state "TERMINATING" as TERMINATING_provider { -} -state "TERMINATED" as TERMINATED_provider { -} - -state CONSUMER ##[dotted] { - state "INITIAL" as INITIAL_consumer { - } - state "STARTING" as STARTING_consumer { - } - state "STARTED" as STARTED_consumer { - } - state "SUSPENDING" as SUSPENDING_consumer { - } - state "SUSPENDED" as SUSPENDED_consumer { - } - state "RESUMING" as RESUMING_consumer { - } - state "COMPLETING" as COMPLETING_consumer { - } - state "COMPLETED" as COMPLETED_consumer { - } - state "TERMINATING" as TERMINATING_consumer { - } - state "TERMINATED" as TERMINATED_consumer { - } - - INITIAL_consumer -[hidden]-> REQUESTING : used for layout - REQUESTING -[hidden]-> STARTING_consumer : used for layout - STARTING_consumer -[hidden]-> STARTED_consumer : used for layout - STARTED_consumer -[hidden]-> SUSPENDING_consumer : used for layout - SUSPENDING_consumer -[hidden]-> SUSPENDED_consumer : used for layout - SUSPENDED_consumer -[hidden]-> COMPLETING_consumer : used for layout - SUSPENDED_consumer -[hidden]-> RESUMING_consumer : used for layout - RESUMING_consumer -[hidden]-> COMPLETING_consumer : used for layout - RESUMING_consumer -[hidden]-> TERMINATING_consumer : used for layout - COMPLETING_consumer -[hidden]-> COMPLETED_consumer : used for layout - TERMINATING_consumer -[hidden]-> TERMINATED_consumer : used for layout - - REQUESTING -[dashed]-> INITIAL_provider : sends\n**TransferRequestMessage**\nmessage - SUSPENDING_consumer -[dashed]-> SUSPENDED_provider : sends\n**TransferSuspensionMessage**\nmessage - RESUMING_consumer -[dashed]-> STARTING_provider : sends\n**TransferStartMessage**\nmessage - COMPLETING_consumer -[dashed]-> COMPLETED_provider : sends\n**TransferCompletionMessage**\nmessage - TERMINATING_consumer -[dashed]-> TERMINATED_provider : sends\n**TransferTerminationMessage**\nmessage - -' incoming messages - STARTING_provider -right[dashed]-> STARTED_consumer : sends\n**TransferStartMessage**\nmessage - SUSPENDING_provider -right[dashed]-> SUSPENDED_consumer : sends\n**TransferSuspensionMessage**\nmessage - RESUMING_provider -right[dashed]-> STARTING_consumer : sends\n**TransferStartMessage**\nmessage - COMPLETING_provider -right[dashed]-> COMPLETED_consumer : sends\n**TransferCompletionMessage**\nmessage - TERMINATING_provider -right[dashed]-> TERMINATED_consumer : sends\n**TransferTerminationMessage**\nmessage -} - -INITIAL_provider --> PROVISIONING_provider -PROVISIONED_provider --> STARTING_provider -STARTING_provider --> STARTED_provider - -STARTED_provider --> COMPLETING_provider -COMPLETING_provider --> COMPLETED_provider - -COMPLETED_provider --> DEPROVISIONING - -STARTED_provider -[hidden]-> TERMINATING_provider : used for layout -TERMINATING_provider --> TERMINATED_provider -TERMINATED_provider --> DEPROVISIONING - - - -state deprovision { - state DEPROVISIONING { - } - state DEPROVISIONED { - } - DEPROVISIONING --> DEPROVISIONED_REQUESTED : async provisioning - DEPROVISIONED_REQUESTED --> DEPROVISIONED - DEPROVISIONING --> DEPROVISIONED -} - -@enduml diff --git a/docs/developer/dpf_selector.md b/docs/developer/dpf_selector.md deleted file mode 100644 index 903235f5121..00000000000 --- a/docs/developer/dpf_selector.md +++ /dev/null @@ -1,195 +0,0 @@ -# Technical concept DPF Selector - -This document presents the technical concept for the "DataPlaneFramework Selector", henceforth "DPF Selector" or "DPFS" -for short. In typical clustered environments (Kubernetes) we anticipate a multitude of connector runtimes and DPF -runtimes, scaling independently of each other, depending on a particular use case. Also, the DPFs may have different -configurations, so they may not even be in the same replica set (in Azure this would be Availability Sets vs. Scale -Sets). - -Further, we assume that every connector has access to multiple DPF runtimes, even if they are not homogenous replicas. -For example, some deployments may choose to have one dedicated DPF per geographical region, or even per `DataSink` -/`DataSource` pair. - -Whenever a data transfer request hits the connector, it eventually will delegate the transfer to the DPF. For that, it -needs to know _which DPF to delegate to_. In simple deployments, there may just be one single DPF, so the DPF selector -is essentially a preconfigured value, but in more complex scenarios sophisticated algorithms may be employed to select -the best-fitting DPF. - -This is not dissimilar to how load-balancers work, one key difference being that the DPF selector will distribute the -request based on not just the load situation, but also based on request metadata or even functional requirements (e.g. " -must be able to store in Azure BlobStore"). - -Another key difference to (most) load balancers is the modularity and flexibility of the DPF selector: it can be -embedded into another process (e.g. a connector), standalone, it can handle different storage and API technologies, it -itself could theoretically run clustered, etc. - -## Terminology - -- DPF: one DataPlaneFramework runtime instance -- CP: one ControlPlane instance, often used synonymous to "connector" -- connector: one connector runtime -- selector: one DPF selector runtime, either embedded or standalone -- DataSource: one particular implementation that the DPF uses to fetch data from (e.g. Amazon S3) -- DataSink: one particular implementation of a data destination (e.g. AzureBlob) -- Seeding: the process of pre-populating a database. Often used synonymous to "loading". -- Feature pack: a collection of Java modules that fulfill one particular purpose, typically accompanied by a BOM ( - bill-of-materials) - -## Proposed solution - -We propose to create another "feature pack" in the EDC repository, essentially a meta module -named `:extensions:data-plane-selector`, which will contain (at least) the following submodules: - -- `selector-spi`: for interfaces and extensibility points such as store, strategy -- `data-plane-selector-api`: REST API -- `selector-core`: common code, default implementations for store and strategies - -Furthermore there should be a `selector-launcher` in the `launchers` directory containing a build file for standalone -deployment. - -Centrally to the DPF selector is an interface `DataPlaneSelector` whos purpose is to select a DPF instance based on an -incoming `DataRequest` and an optional `SelectionStrategy`: - -```java -public interface DataPlaneSelector { - - default DataPlaneInstance select(DataRequest dataRequest) { - return select(dataRequest, new RandomSelectionStrategy()); - } - - DataPlaneInstance select(DataRequest dataRequest, SelectionStrategy strategy); -} -``` - -The main business object is the `DataPlaneInstance` which represents one particular DPF instance with circa the -following signature: - -```java -public interface DataPlaneInstance { - boolean canHandle(DataRequest request); - - URL getUrl(); //returns the url+path to the DataPlane API - - int turnCount(); //how often selected - - long lastActive(); //when selected last - - Map getProperties(); //extensible properties -} -``` - -Thus, the `DataPlaneInstance` itself determines whether it can support a particular data request, based on various -capabilities such as its `DataSink` and `DataSource` implementations, streaming capabilities, etc. - -Requests come in either through an API or an SPI hit the `DataPlaneSelector`, which then filters its list -of `DataPlaneInstace` records and selects the best fitting DPF based on a strategy. By default selection is made at -random. - -### API/SPI considerations - -We'll provide both a REST API and a Java SPI (i.e. the `DataPlaneSelector`), so that the DPF selector can run embedded -in another process, or as a standalone runtime. Both of those should offer the same functionality, which is: - -- `get-instance`: selects the best-fit DPF for a `DataRequest`, optionally accepts a `SelectionStrategy` -- `add-instance`: adds a `DataPlaneInstance` to the internal store -- `remove-instance`: removes a `DataPlaneInstance` from the internal store - -Both the REST API and the SPI implement these use cases. - -### Single vs Multi DPF - -In case a particular deployment uses just one DPF, the entire selection process can be simplified to always return the -pre-configured DPF URL. This is likely to be used in end-to-end-test scenarios, demos or samples. - -### Store concepts - -The DPF selector needs a storage backend where it can save its `DataPlaneInstance` objects. The default implementation -will be an in-memory one, but extensions can be provided for CosmosDB, SQL, etc. - -Whether a centralized persistent or an ephemeral store should be used will largely depend on the deployment scenario and -whether the DPF selector runs standalone or embedded in the connector. - -**Seeding:** As a starting point we will provide a mechanism to load a preconfigured list of DPF instances using the EDC -configuration mechanism. Named properties similar will be used, similar to what we currently have for web contexts, for -example: - -```properties -edc.dpf.selector.pod1.url=http://some.url -edc.dpf.selector.pod1.someOtherProperty=... -//...= -edc.dpf.selector.pod2.url=http://some.other.url -edc.dpf.selector.pod2.someOtherProperty=... -``` - -In addition, using the aforementioned API, any sort of data seeding scenario is possible, e.g. terraform, a dedicated -loader, scripting, etc. - -### Selection Strategies - -A `SelectionStrategy` (as in: [strategy pattern](https://en.wikipedia.org/wiki/Strategy_pattern)) influences the -best-fit criteria for a `DataPlaneInstance`. By default, we will implement the following ones: - -- `RandomSelectionStrategy`: will select one DPF instance at random. Assuming normal distribution of the RNG, all DPFs - will be selected at approximately equal frequency. -- `RoundRobinSelectionStrategy`: selects the "next" DPF instance in an ordered list. **Requires state!** -- [optional] `OldestNextSelectionStrategy`: selects the DPF instance that was idle the longest - -_Please note that when multiple DPF selector instances are used, some of the selection strategies only work as intended -if DPF selectors share their storage, otherwise the counters would be inconsitent!_ - -All `SelectionStrategy` objects must be registered with the DPF selector before it can be passed in through a REST API -or used in the SPI. This requires the use of a `SelectionStrategyRegistry` into which customer extensions can register -their specific strategies. - -## Deployment scenarios - -With this modular approach, the DPF selector can run as a standalone application, for example in a Kubernetes Deployment -or as plain sidecar container. However, this type of deployment scenario practically _requires_ adding the `-api` module -to the build, otherwise no interaction with the selector is possible. - -Another way of running a DPF selector would be as extension, i.e. embedded in an EDC connector runtime. In this scenario -the `-api` module can be ignored, as all communication happens through the Java SPI. Again, situations with multiple -connector instances practically _require_ using a persistent centralized storage (such as CosmosDB). - -**Client lib**: it should be transparent for the connector whether an embedded or a remote DPF selector is used, -therefore we propose creating a small "DPF selector lib" in the EDC codebase, consisting of a single interface: - -```java -public interface DataPlaneSelectorClient { - DataPlaneInstance select(DataRequest dataRequest); -} - -// when the DPF selector is embedded --> default -class LocalDataPlaneSelectorClient implements DataPlaneSelectorClient { - private final DataPlaneSelector selector; - private SelectionStrategy strategy; //could be null - - // CTor(s) - - public DataPlaneInstance select(DataRequest dataRequest) { - return strategy != null ? selector.select(dataRequest, strategy) : selector.select(dataRequest); - } -} - -// when the DPF selector is remote -class RemoteDataPlaneSelectorClient implements DataPlaneSelectorClient { - private final EdcHttpClient client; - private String strategyName; //could be null - - // CTor(s) - - public DataPlaneInstance select(DataRequest dataRequest) { - //invoke REST API of the remote selector - } -} -``` - -## Future developments - -Once we have performance metrics and instrumentation built-in into the DPF, we can create a small extension that reports -those dynamic metrics back to the DPF selector, who then stores them and uses them as additional input parameter to the -selection algorithm. - -Another possible improvement would be a DPF selector that can interact with the Kubernetes backend and dynamically -update its internal storage based on Kubernetes auto-scaling: when Kubernetes scales out the DPF pods, the selector -tracks that and automatically updates its internal storage. diff --git a/docs/developer/events.md b/docs/developer/events.md deleted file mode 100644 index b61a90b380c..00000000000 --- a/docs/developer/events.md +++ /dev/null @@ -1,193 +0,0 @@ -# Events - -EDC provides an eventing system that permits to developers to write extensions that could react to events that are -emitted from the core of the EDC and also emit custom events. - -## Subscribe to events -The entry point for event listening is the `EventRouter` component, on which an `EventSubscriber` can be registered. - -Actually, there are two ways to register an `EventSubscriber`: -- **async**: every event will be sent to the subscriber in an asynchronous way. Features: - - fast, as the main thread won't be blocked during dispatchment. - - not-reliable, as an eventual subscriber dispatch failure won't get handled. - - to be used for notifications and for send-and-forget event dispatchment. -- **sync**: every event will be sent to the subscriber in a synchronous way. Features: - - slow, as the subscriber will block the main thread until the event is dispatched - - reliable, an eventual exception will be thrown to the caller, and it could make a transactional context fail - - to be used for event persistence and to satisfy the "at-least-one" rule. - -The `EventSubscriber` is typed over the event kind (Class), and it will be invoked only if the type of the event matches -the published one (instanceOf). The base class for all events is `Event`. - -Extension example: -```java -public class ExampleEventSubscriptionExtension implements ServiceExtension { - @Inject - private EventRouter eventRouter; - - @Override - public void initialize(ServiceExtensionContext context) { - eventRouter.register(Event.class, new ExampleEventSubscriber()); // asynchronous dispatch - eventRouter.registerSync(Event.class, new ExampleEventSubscriber()); // synchronous dispatch - } -} -``` - -Then the `EventSubscriber` subscription will receive all the events emitted from the EDC and react to them: - -```java -public class ExampleEventSubscriber implements EventSubscriber { - - public void on(EventEnvelope event) { - // react to event - } - -} -``` - -The `EventEnvelope` is used as a container for the `Event` itself. It will also have additional fields like - -- id: unique identifier of the event (set by default at a random UUID) -- at: creation timestamp - - -To filter events, the classes of the events can be used. There are 5 "Intermediate superclasses" (AssetEvent, -ContractDefinitionEvent, ContractNegotiationEvent, PolicyDefinitionEvent, TransferProcessEvent) of Event. -Thus, in addition to filtering on a specific event, such as TransferProcessCompleted, it is possible to react to a group of events -that generally have to do with Assets, ContractDefinition, ContractNegotiation, PolicyDefinition and TransferProcess. - -In the example below the subscriber is interested in all events by using the type `Event`. In this case a manual filter with -`instanceOf` the event kind is needed: - -```java -public class ExampleEventSubscriber implements EventSubscriber { - - public void on(EventEnvelope event) { - var payload = event.getPayload(); - if (payload instanceof AssetCreated) { - // react only to AssetCreated events - } - } - -} -``` - -To subscribe a particular type of event, a specific class is needed like in this example: - -```java -public class ExampleEventSubscriber implements EventSubscriber { - - public void on(EventEnvelope event) { - // Typed - AssetCreated payload = event.getPayload(); - } -} -``` - -This works also for group of events using "intermediate superclasses" such as `AssetEvent`, `ContractDefinitionEvent`, etc. - -The dispatcher will take care of calling the right subscribers based on their expressed type. - -## Emit custom events -It's also possible to create and publish custom events on top of the EDC eventing system. -To define the event, extend the `Event` class. - -> Rule of thumb: events should be named at past tense, as they describe something that's already happened - -```java -public class SomethingHappened extends Event { - - private String description; - - public String getDescription() { - return description; - } - - private SomethingHappened() { - } - - public static class Builder { - - private SomethingHappened event; - - public static Builder newInstance() { - return new Builder(); - } - - private Builder() { - event = SomethingHappened(); - } - - public Builder description(String description) { - event.description = description; - return this; - } - - public SomethingHappened build() { - Objects.requireNonNull(event.payload.description); - return event; - } - } -} -``` - -All the data regarding an event should be contained in the `Event` class. - -As you may notice, we use the builder pattern to construct objects, as stated in -the [Architecture Principles document](architecture/coding-principles.md). -The extended builder will inherit all the builder method from the superclass. - -Once the event is created, it can be published it through the `EventRouter` component: - -```java -public class ExampleBusinessLogic { - public void doSomething() { - // some business logic that does something - var event = SomethingHappened.Builder.newInstance() - .description("something interesting happened") - .build(); - - var envelope = EventEnvelope.Builder.newInstance() - .at(clock.millis()) - .payload(event) - .build(); - - eventRouter.publish(envelope); - } -} -``` - -Please note that the `at` field is a timestamp that every event has, and it's mandatory -(please use the `Clock` service to get the current timestamp). - -## Serialization / Deserialization - -By default, events must be serializable, because of this, every class that extends `Event` will be serializable to json by default -(through the `TypeManager` service). -The json will contain an additional field called `type` that describes the name of the event class. For example, a serialized `EventEnvelope` -event will look like: - - -```json -{ - "type": "SomethingHappened", - "at": 1654764642188, - "payload": { - "description": "something interesting happened" - } -} -``` - -To make such an event deserializable by the `TypeManager`, is necessary to register the type: - -```java -typeManager.registerTypes(new NamedType(SomethingHappened.class, SomethingHappened.class.getSimpleName())); -``` - -doing so, the event can be deserialized using the `EvenEnvelope` class as type: - -``` -var deserialized = typeManager.readValue(json, EventEnvelope.class); -// deserialized will have the `EventEnvelope` type at runtime -``` -(please take a look at the [`EventTest`](../../spi/common/core-spi/src/test/java/org/eclipse/edc/spi/event/EventTest.java) class for a serialization/deserialization example) diff --git a/docs/developer/identity-management.md b/docs/developer/identity-management.md deleted file mode 100644 index dd73f1302b4..00000000000 --- a/docs/developer/identity-management.md +++ /dev/null @@ -1,11 +0,0 @@ -# Identity Management - -## Distributed identity - -### Request data - -![Request Data](diagrams/data-request.png) - -### Service discovery - -![Service Discovery](diagrams/service-discovery.png) diff --git a/docs/developer/ids-dataspace-protocol/README.md b/docs/developer/ids-dataspace-protocol/README.md deleted file mode 100644 index cd6959fd903..00000000000 --- a/docs/developer/ids-dataspace-protocol/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# Dataspace Protocol Architecture - -The EDC will be upgraded to implement and be fully compliant to the __Dataspace Protocol__ protocol specifications. These include: - -- Catalog and Catalog Binding HTTP -- Contract Negotiation and Contract Negotiation Binding HTTP -- Transfer Process and Transfer Process Binding HTTP - -This document outlines the approach that will be taken to support those protocols. Other documents will detail how the specifications will impact specific subsystems. - -## Backward Compatibility and Migration Support - -It is __NOT__ a goal of the EDC project to provide backward compatibility to the previous IDS implementations. At a declared milestone, once the Dataspace Protocol implementation has reached -a sufficient maturity level, the EDC project will switch to the new protocol and remove the old protocol implementation. Users will be responsible for migrating existing EDC -installations as no automated migration facilities will be provided. - -> EDC will not offer runtime migration, i.e. conversion of state machines that are in live EDC instances. This will be the responsibility of other parties to either -> provide this level of support or deal with migration in another manner. - -# Goals - -The goals of the Dataspace Protocol support are: - -1. To be compliant with the Dataspace Protocol Specifications listed above. This will involve passing all mandatory tests of the to-be-released IDS Test Compatibility Kit (IDS-TCK). -2. Based on specification compliance, the EDC aims to be interoperable with other IDS implementations that are also the Dataspace Protocol specification compliant. -3. The EDC __will not__ support any IDS versions prior to the Dataspace Protocol Specifications. -4. Following the approach taken with Dataspace Protocol, the core EDC project __will not__ implement specific usage policies. It is expected that usage policy implementations will be - provided by other projects and dataspaces. - -# Impact and Approach - -The Dataspace Protocol is built on [JSON-LD](https://www.w3.org/TR/json-ld11/), [DCAT](https://www.w3.org/TR/vocab-dcat-3/) and [ODRL](https://w3c.github.io/poe/model/). The core EDC -architecture will remain largely unchanged. The most significant change will be the modification and addition of contract negotiation and transfer process states. As development on -the Dataspace Protocol proceeds, we will attempt to retrofit state machine changes to the existing IDS extensions. The goal here is not to offer parallel support for the old protocol but to -ensure that existing tests continue to function during development until the changeover to the Dataspace Protocol is made. - -Support for the Dataspace Protocol will be done in the following steps: - -1. Core JSON-LD support will be added as detailed in the [JSON-LD Processing Architecture](json-ld-processing-architecture.md). -2. The Dataspace Protocol endpoint and service extensions will be added in parallel to the existing IDS extensions. This work is described in - the [IDS Endpoints and Services Architecture](ids-endpoints-services-architecture.md). -3. The contract negotiation manager state machine will be updated to accommodate the Dataspace Protocol protocols as described in - the [Contract Negotiation Architecture](contract-negotiation-architecture.md). If possible, the new state transitions should be retrofitted back to the existing IDS - extensions. Since the existing contract managers do not implement all state transitions, retrofitting the new states back to the existing IDS protocol should be possible. -4. The transfer process state machine will be updated to accommodate the Dataspace Protocol protocols as described in [the Transfer Process Architecture](transfer-process-architecture.md). - Since all new states are nearly 1:1 with existing EDC states, retrofitting to the old IDS protocol should be possible. -5. When 1-4 are stabilized, the old IDS modules and supporting services will be removed. -6. An ensuing release will update the Management API - diff --git a/docs/developer/ids-dataspace-protocol/contract-negotiation-architecture.md b/docs/developer/ids-dataspace-protocol/contract-negotiation-architecture.md deleted file mode 100644 index 4761b2f32af..00000000000 --- a/docs/developer/ids-dataspace-protocol/contract-negotiation-architecture.md +++ /dev/null @@ -1,143 +0,0 @@ -# Dataspace Protocol Contract Negotiation Architecture - -The EDC will be upgraded to implement and be fully compliant to the __Dataspace Protocol Contract Negotiation Protocol__. This document details the architectural approach that will be taken -to support that protocol. - -## Backward Compatibility and Migration Support - -It is __NOT__ a goal of the EDC project to provide backward compatibility to the previous IDS implementation. At a declared milestone, once the Dataspace Protocol implementation has reached -a sufficient maturity level, the EDC will switch to the new protocol and remove the old protocol implementation. Users will be responsible for migrating existing EDC installations -as no automated migration facilities will be provided. - -# Goals - -The goals of the Dataspace Protocol support are: - -1. To be compliant with the Dataspace Protocol Contract Negotiation Protocol. This will involve passing all mandatory tests of the to-be-released IDS Test Compatibility Kit (IDS-TCK). -2. To support a range of requirements involving externally assisted contract negotiation decisions. These include manual negotiation approval and integration with external systems - to determine state transitions. -3. To support integration with facilities for producing digital contract signatures and contract non-repudiation. - -# The State Machine - -The IDS Specification Contract Negotiation states are: - -- INITIALIZED, -- REQUESTED, -- OFFERED, -- ACCEPTED, -- AGREED, -- VERIFIED, -- FINALIZED, -- TERMINATED - -The following table defines the mapping between existing EDC states, the corresponding new EDC states, and the IDS specification states. - -| EDC Existing | EDC New | IDS | Transition Function | Notes | -|--------------------|---------------|------------|--------------------------|--------------------------| -| UNSAVED | (remove) | N/A | | This state is not needed | -| INITIAL | INITIAL | N/A | | | -| | | | | | -| REQUESTING | REQUESTING | N/A | | | -| REQUESTED | REQUESTED | REQUESTED | Provider (new & counter) | | -| | | | | | -| PROVIDER_OFFERING | OFFERING | N/A | | | -| PROVIDER_OFFERED | OFFERED | OFFERED | Consumer | | -| CONSUMER_OFFERING | (REQUESTING) | | | | -| CONSUMER_OFFERED | (REQUESTED) | | | | -| | | | | | -| CONSUMER_APPROVING | ACCEPTING | N/A | | | -| CONSUMER_APPROVED | ACCEPTED | ACCEPTED | Provider | | -| | | | | | -| DECLINING | (TERMINATING) | | | | -| DECLINED | (TERMINATED) | | | | -| | | | | | -| CONFIRMING | AGREEING | N/A | | | -| CONFIRMED | AGREED | AGREED | Consumer | | -| | VERIFYING | N/A | | | -| | VERIFIED | VERIFIED | Provider | | -| | FINALIZING | N/A | | | -| | FINALIZED | FINALIZED | Consumer | | -| | TERMINATING | N/A | | | -| | TERMINATED | TERMINATED | P & C | | -| | | | | | -| ERROR | (TERMINATED) | | | | - -# State Transition Functions - -State transition functions (`StateTransitionFunction`) can be registered at specific callback points which are responsible for transitioning the Contract Negotiation State Machine -(CNSM) to a new state. These functions can be used to implement custom workflows. In runtime configurations that support it, transition functions will be called transactionally as -part of the `ContractNegotiationManager` process loop. This will ensure state transitions are atomic. - -`StateTransitionFunction` will operate on `ContractNegotiation` instances. - -```java - -@FunctionalInterface -public interface StateTransitionFunction { - - Result process(ContractNegotiation negotiation); - -} -``` - -Note this does not follow immutability principles but has the advantage of simplicity and the ability to enforce proper state transitions in the `ContractNegotiation` instance. -The `Result` response indicates if the `ContractNegotiation` has been updated (true) or not (false), or if processing failed. This can be used to avoid -re-persisting `ContractNegotiation` instances if they have not changed. - -End users will be able to register their own `StateTransitionFunction` implementations to provide custom contract negotiation workflows. For example, a `StateTransitionFunction` -implementation can be registered to be invoked when a consumer request is received (REQUESTED) to support manual approval. The function will be called by -the `ConsumerContractNegotiationManager` during its processing loop. If the request initiates a new negotiation, the function implementation could trigger a process in an external -approval system. In a subsequent processing loop, the `StateTransitionFunction` could check for the completion of the external approval process (e.g. by querying a column in a -table) and updating the `ContractNegotition`. - -# Default StateTransitionFunctions - -The following tabled define the default `StateTransitionFunction`s to use if one is not registered for the specified state transition. - -## Consumer Default StateTransitionFunctions - -| State | Default StateTransitionFunction | -|-----------|-----------------------------------------------------------------| -| OFFERED | Transition to ACCEPTING if offer matches the original requested | -| AGREED | Transition to VERIFYING | -| FINALIZED | No-op | -| | | -| | | -| | | - -## Provider Default StateTransitionFunctions - -| State | Default StateTransitionFunction | -|------------|----------------------------------------------------------------------------------| -| REQUESTED | For the initial request transition to AGREED if the offer corresponds to a | -| | provider offer and the consumer evaluates successfully against the offer policy. | -| | | -| ACCEPTED | Transition to AGREEING | -| VERIFIED | Transition to FINALIZING | -| TERMINATED | No-op | - -# HTTP Transition Functions (Phase II) - -The EDC provides the ability to extend the runtime via HTTP endpoints, for example, HTTP provisioning. A similar method should be added for state transitions where an HTTP endpoint -can implement processing logic for one of the defined `StateTransitionFunction` extension points. In addition to invoking an external endpoint, the EDC runtime will need to provide -an HTTP REST controller to serve as a callback for receiving updated `ContractNegotiation` instances. - -## Callback Endpoint Reliability - -The controller may use the command infrastructure to update a received `ContractNegotiation`. However, since the command infrastructure relies on an in-memory queue, updates will -not be reliable. Three options for addressing this are: - -1. Make the in-memory queue reliable and persistent. This option is likely to be the most complicated and difficult to achieve as it will require persistence and the ability to - perform message ordering. -2. Introduce a persistence mechanism for storing intermediate state machine results including `ContractNegotiation` and `TransferProcess,` and updates them using the command - infrastructure in a reliable way (e.g. removing entries once the command processing has been completed). This is still a complicated solution but has the advantage of - using the command infrastructure as a single point for external state machine updates. -3. Introduce a lock-based synchronous update mechanism for state machine instances including `ContractNegotiation` and `TransferProcess` instances that bypasses the command queue. - This approach has the advantage of relative simplicity but introduces an additional code path for external state machine updates. - -A generic solution should be designed which can be used by other extensions such as the HTTP provisioner to provide reliability guarantees. - -> Note that this feature will also be required for supporting reliable callbacks when a transfer is complete and when a transfer has been suspended. - - diff --git a/docs/developer/ids-dataspace-protocol/ids-endpoints-services-architecture.md b/docs/developer/ids-dataspace-protocol/ids-endpoints-services-architecture.md deleted file mode 100644 index 2b6a968b71f..00000000000 --- a/docs/developer/ids-dataspace-protocol/ids-endpoints-services-architecture.md +++ /dev/null @@ -1,421 +0,0 @@ -# Dataspace Protocol Endpoints and Services Architecture - -The Dataspace Protocol requires all protocol message types to be serialized as JSON-LD. The IDS REST binding specifications further define how those serialized message types are bound to -endpoints over HTTPS. Controller endpoints will be added to the EDC that support marshalling and unmarshalling JSON-LD messages as specified -in [JSON-LD Processing Architecture document](json-ld-processing-architecture.md) - -IDS controller endpoints will be organized in two extensions to support separate deployments of control plane and catalog runtimes: - -| Description | Repository | Extension | -|----------------------|------------|-------------------| -| Contract Negotiation | Connector | control-plane-ids | -| Transfer Process | Connector | control-plane-ids | -| Catalog requests | Connector | catalog-ids | - -## Message (De)Marshalling - -Message demarshalling will be done by deserializing IDS JSON-LD messages and expanding them using the [Titanium JSON-LD Library](https://github.com/filip26/titanium-json-ld): - -``` -var document = JsonDocument.of(jsonObject); -var expanded = JsonLd.expand(document).get(); -``` - -__NOTE__: we need to verify if Jersey controllers can use `jakarta.json.JsonObject` as a type parameter directly. This will involve using the `ObjectMapper` from serialization -context configured on the `TypeManager` with Jersey. If this is not possible, the controller parameters will need to be of type `Map` and we will need to -transform them manually (or via a Jersey `ContainerRequestFilter`) using: - -``` -var converted = objectMapper.convertValue(message,JsonObject.class); -``` - -Message marshalling will be done by writing and compacting an in-memory `JsonObject` instance as follows: - -``` -var document = JsonDocument.of(jsonObject); -var compacted = JsonLd.compact(document,EMPTY_CONTEXT).get(); -var compacted = mapper.convertValue(compacted,Map.class); -``` - -## Migrating to DCAT and ODRL Types: Catalog, Dataset, and Policy - -The Dataspace Protocol specifications overhaul the infomodel that underpins IDS by basing it directly on the [DCAT](https://www.w3.org/TR/vocab-dcat-3/) -and [ODRL](https://w3c.github.io/poe/model/) specifications. One of the most significant changes is that assets (or datasets in DCAT terms) contain offers, which are ODRL policies. -Moreover, datasets are contained in a catalog. This relationship corresponds to the core design of the EDC and should resolve the complexity mandated by the current IDS infomodel -where contract offers contain assets. - -### The Catalog Type - -The existing `org.eclipse.edc.catalog.spi.Catalog` type will need to be migrated to the new DCAT-based model defined by IDS Dataspace Protocol. This section outlines three key aspects of the -required refactoring: dataset projections; distribution projections; and support for open/extensible types. - -#### Dataset Projections - -Instead of `ContractOffer` instances, A `Catalog` will contain `DataSet` instances that correspond to an EDC `Asset` and a collection of policies that derive from -matching `ContractDefinition`s. A replacement for the `ContractOfferResolver` will be needed that matches all `ContractDefinition`s for a `ParticipantAgent` and derives a -collection of `Dataset`s that contain `Asset` properties and ODRL Offers corresponding to the usage policies of all matching `ContractDefinition`s for the asset. This can be -represented as: - -``` -CD = Contract Definition -A = Asset -DS = Dataset -O = ODRL Offer - -If the Contract Definitions are: - -CD 1 --selects--> [A1, A2] -CD 2 --selects--> [A1, A3] - -the resulting Catalog containing Datasets is: - -DS 1 -> A1 [O:CD1, O:CD2] -DS 2 -> A2 [O:CD1] -DS 3 -> A3 [O:CD2] -``` - -#### Distribution Projections - -A DCAT Distribution is used to convey how to access a dataset: the endpoint for requesting a contract negotiation and the transport types supported by the provider. A Distribution -is therefore a combination of connector endpoint metadata and the transport type attribute of the `DataAddress` associated with an `Asset`. Since Distributions are a projection, a -single Distribution entry may be referenced by multiple Dataset instances. For example, if two assets are accessible from the same connector endpoint and have equal transport type -attributes, they will reference the same Distribution. - -> The EDC does not currently have facilities for associating an asset with a connector endpoint. This will need to be defined and created. - -> When a `Catalog` is generated for a request, Distributions will also need to be created for the Dataset entries. The replacement for `ContractOfferResolver` will need to track -> Distributions across Datasets as they are created. Another issue that will need to be dealt with is Assets and DataAddresses are stored independently since they are logically -> distinct. The replacement service will need access to the associated DataAddress to generate Distributions. An efficient mechanism for accessing this data will need to be -> designed. - -#### Open/Extensible Types - -Another consideration that will need to be made is that the DCAT `Catalog` and `Dataset` types are open: they may be arbitrarily extended using namespaced properties. Preserving -namespace information will be handled by expanding JSON-LD messages, which will concatenate referenced namespaces with properties names (which can then in turn be stored in -the `Asset` properties). The EDC will need to provide a mechanism for decorating `Catalog` instances with arbitrary properties when they are returned in response to catalog -queries. For example, an EDC provider may wish to include a catalog description property. This mechanism can be implemented by creating a registry of `CatalogDecorator`s that can -set arbitrary information as part of request processing. - -In a subsequent release, it may be desirable to create a generic `CatalogDecorator` that pulls arbitrary properties from an extensible source such as a database or configuration -file. - -## Type Transformation - -The existing `IdsTypeTransformer` implementations will need to be re-written to accommodate the new IDS infomodel and message types. The expectation is that the number of -transformers will be greatly reduced. - -`IdsTypeTransformer` for each message type will return types used by JSON-P such as `jakarta.json.JsonValue`. These types will then be set on an appropriate IDS message instance -and the latter compacted before being returned by the controller. - -### Using JsonObject - -When processing a request, responses may include transforming from an EDC representation to an IDS JSON-LD structure. This can be achieved using `IdsTypeTransformer` -implementations that produce `JsonObject` types. For example, assuming `org.eclipse.edc.catalog.spi.Catalog` is refactored to include a `Dataset` type as described above, a -`FromCatalogTransformer` transformer can produce a `JsonObject` as follows: - -``` -public class FromCatalogTransformer extends AbstractJsonLdTransformer { - private final JsonBuilderFactory jsonFactory; - private final ObjectMapper mapper; - - public FromCatalogTransformer(JsonBuilderFactory jsonFactory, ObjectMapper mapper) { - super(Catalog.class, JsonObject.class); - this.jsonFactory = jsonFactory; - this.mapper = mapper; - } - - @Override - public @Nullable JsonObject transform(@Nullable Catalog catalog, @NotNull TransformerContext context) { - if (catalog == null) { - return null; - } - - var objectBuilder = jsonFactory.createObjectBuilder(); - - var datasets = catalog.getDatasets().stream() - .map(offer -> context.transform(offer, JsonObject.class)) - .collect(jsonFactory::createArrayBuilder, JsonArrayBuilder::add, JsonArrayBuilder::add) - .build(); - - objectBuilder.add(DCAT_SCHEMA + "dataset", datasets); - - // transform properties, which are generic JSON values. - catalog.getProperties().forEach((k, v) -> objectBuilder.add(k, mapper.convertValue(v, JsonValue.class))); - - return objectBuilder.build(); - } -} -``` - -The `catalog-ids` extension can register the transformer as follows: - -``` -// registry is injected on the extension instance - -builderFactory = Json.createBuilderFactory(Map.of()); - -var fromCatalogTransformer = new FromCatalogTransformer(builderFactory, mapper); -registry.register(fromCatalogTransformer); -``` - -Similarly, a `ToCatalogTransformer` can convert from a JSON=LD structure to the EDC `Catalog` type: - -``` -public class ToCatalogTransformer extends AbstractJsonLdTransformer { - private static final String DCAT_CATALOG = "http://www.w3.org/ns/dcat#Catalog"; - private static final String DCAT_DATASET = "http://www.w3.org/ns/dcat#dataset"; - private static final String DCAT_DISTRIBUTION = "http://www.w3.org/ns/dcat#distribution"; - private static final String DCAT_DATA_SERVICE = "http://www.w3.org/ns/dcat#DataService"; - - public ToCatalogTransformer() { - super(JsonObject.class, Catalog.class); - } - - @Override - public @Nullable Catalog transform(@Nullable JsonObject object, @NotNull TransformerContext context) { - if (object == null) { - return null; - } - var type = nodeType(object, context); - if (DCAT_CATALOG.equals(type)) { - var builder = Catalog.Builder.newInstance(); - - builder.id(nodeId(object)); - - visitProperties(object, (key, value) -> transformProperties(key, value, builder, context)); - - return builder.build(); - } - return null; - } - - private void transformProperties(String key, JsonValue value, Catalog.Builder builder, TransformerContext context) { - if (DCAT_DATASET.equals(key)) { - transformDatasets(value, builder, context); - } else if (DCAT_DISTRIBUTION.equals(key)) { - transformDistributions(value, builder, context); - } else if (DCAT_DATA_SERVICE.equals(key)) { - transformDataServices(value, builder, context); - } else { - transformGenericProperty(key, value, builder, context); - } - } - - private void transformDatasets(JsonValue value, Catalog.Builder builder, TransformerContext context) { - if (value instanceof JsonArray) { - var jsonArray = (JsonArray) value; - var datasets = jsonArray.stream().map(entry -> context.transform(entry, Dataset.class)).collect(toList()); - builder.datasets(datasets); - } else if (value instanceof JsonObject) { - var dataset = context.transform(value, Dataset.class); - builder.dataset(dataset); - } else { - context.reportProblem("Invalid dataset property"); - } - } - - private void transformDataServices(JsonValue value, Catalog.Builder builder, TransformerContext context) { - if (value instanceof JsonArray) { - var jsonArray = (JsonArray) value; - var dataServices = jsonArray.stream().map(entry -> context.transform(entry, DataService.class)).collect(toList()); - // .... processing - } else if (value instanceof JsonObject) { - var dataService = context.transform(value, DataService.class); - // .... processing - } else { - context.reportProblem("Invalid DataService property"); - } - } - - private void transformDistributions(JsonValue value, Catalog.Builder builder, TransformerContext context) { - if (value instanceof JsonArray) { - var jsonArray = (JsonArray) value; - var distributions = jsonArray.stream().map(entry -> context.transform(entry, Distribution.class)).collect(toList()); - // .... processing - } else if (value instanceof JsonObject) { - var distribution = context.transform(value, Distribution.class); - // .... processing - } else { - context.reportProblem("Invalid DataService property"); - } - } - - private void transformGenericProperty(String key, JsonValue value, Catalog.Builder builder, TransformerContext context) { - if (value instanceof JsonArray) { - var jsonArray = (JsonArray) value; - if (jsonArray.isEmpty()) { - builder.property(key, List.of()); - } else if (jsonArray.size() == 1) { - // unwrap array - var result = context.transform(jsonArray.get(0), Object.class); - builder.property(key, result); - } else { - var result = jsonArray.stream().map(prop -> context.transform(prop, Object.class)).collect(toList()); - builder.property(key, result); - } - } else { - var result = context.transform(value, Object.class); - builder.property(key, result); - } - } -} -``` - -### Policy Transformation - -When transforming policies, there should be one `IdsTypeTransformer` for the root policy type that in turn dispatches to Policy.Visitor instances to -build the transformed object graph. This was not done in the original IDS transformer implementations. A sketch of the `FromPolicyTransformer` which converts an EDC `Policy` -instance to a `JsonObject` using this approach is: - -``` -public class FromPolicyTransformer extends AbstractJsonLdTransformer { - private final JsonBuilderFactory jsonFactory; - private final ObjectMapper mapper; - - public FromPolicyTransformer(JsonBuilderFactory jsonFactory, ObjectMapper mapper) { - super(Policy.class, JsonObject.class); - this.jsonFactory = jsonFactory; - this.mapper = mapper; - } - - @Override - public @Nullable JsonObject transform(@Nullable Policy policy, @NotNull TransformerContext context) { - if (policy == null) { - return null; - } - return policy.accept(new Visitor(context)); - } - - /** - * Walks the policy object model, transforming it to a JsonObject. - */ - private static class Visitor implements Policy.Visitor, Rule.Visitor, Constraint.Visitor, Expression.Visitor { - private TransformerContext context; - - public Visitor(TransformerContext context) { - this.context = context; - } - - @Override - public JsonObject visitAndConstraint(AndConstraint andConstraint) { - for (var constraint : andConstraint.getConstraints()) { - var constraintObject = constraint.accept(this); - } - - // .... create an AndConstraint representation and return it - return jsonObject; - } - - @Override - public JsonObject visitOrConstraint(OrConstraint orConstraint) { - for (var constraint : orConstraint.getConstraints()) { - var constraintObject = constraint.accept(this); - } - - // .... create an OrConstraint representation and return it - return jsonObject; - } - - @Override - public JsonObject visitXoneConstraint(XoneConstraint xoneConstraint) { - for (var constraint : xoneConstraint.getConstraints()) { - var constraintObject = constraint.accept(this); - } - - // .... create an XoneConstraint representation and return it - return jsonObject; - } - - @Override - public JsonObject visitAtomicConstraint(AtomicConstraint atomicConstraint) { - var leftObject = atomicConstraint.getLeftExpression().accept(this); - var rightObject = atomicConstraint.getRightExpression().accept(this); - - // .... create an AtomicConstraint representation and return it - return jsonObject; - } - - @Override - public JsonObject visitLiteralExpression(LiteralExpression expression) { - - // .... create an LiteralConstraint representation and return it (may be a JsonValue) - return jsonObject; - } - - @Override - public JsonObject visitPolicy(Policy policy) { - policy.getPermissions().forEach(permission -> permission.accept(this)); - policy.getProhibitions().forEach(prohibition -> prohibition.accept(this)); - policy.getObligations().forEach(duty -> duty.accept(this)); - - // .... create an Policy representation and return it - return jsonObject; - } - - @Override - public JsonObject visitPermission(Permission permission) { - if (permission.getDuties() != null) { - for (var duty : permission.getDuties()) { - var constraintsArray = visitRule(duty); - } - } - var constraintsArray = visitRule(permission); - - // .... create an Permission representation and return it - return jsonObject; - } - - @Override - public JsonObject visitProhibition(Prohibition prohibition) { - var constraintsArray = visitRule(prohibition); - - // .... create an Prohibition representation and return it - return jsonObject; - } - - @Override - public JsonObject visitDuty(Duty duty) { - var constraintsArray = visitRule(duty); - - // .... create a Duty representation and return it - return jsonObject; - } - - private JsonArray visitRule(Rule rule) { - // .... create an JsonArray representation and return it - - for (Constraint constraint : rule.getConstraints()) { - var result = constraint.accept(this); - // ... add results to the array - } - - return jsonArray; - } - } -} -``` - -> Note that the policy transformers may eventually be moved to a lower-level JSON-LD extension if they can be reused by other subsystems such as the Management API extensions. - -### Asset Transformation and Extensible Properties - -Asset properties may be extensible complex types. - -TODO Can be transformed here but DataManagement API will need to be updated - -## Identity Providers - -> Note: DAT tokens are no longer supported for provider responses. - -> Note: The IDS specifications need a way for a catalog to declare supported trust anchors. For example, information on what identity systems are supported and where a client -> connector can obtain a security token. This can be added as part of a `CatalogDecorator`. This will require the `CatalogDecorator` to have access to the requesting participant -> agent's claims to determine which trust anchor's to include. For example, a participant agent may request data in the context of a particular dataspace that mandates a -> centralized trust anchor. - -## Remote Message Dispatching - -The remote message dispatching infrastructure (`RemoteMessageDispatcher`) will need to be updated to support REST-based catalog requests, transfer requests, and contract -negotiation requests. The protocol identifier will be "IDS Dataspace Protocol" until a specification version is officially assigned. This can be done in parallel to the existing IDS multipart -dispatchers. - - diff --git a/docs/developer/ids-dataspace-protocol/json-ld-processing-architecture.md b/docs/developer/ids-dataspace-protocol/json-ld-processing-architecture.md deleted file mode 100644 index 8ec1e4da207..00000000000 --- a/docs/developer/ids-dataspace-protocol/json-ld-processing-architecture.md +++ /dev/null @@ -1,95 +0,0 @@ -# JSON-LD Processing Architecture - -The Dataspace Protocol requires all protocol message types to be serialized as JSON-LD. The IDS REST binding specifications further define how those serialized message types are bound to -endpoints over HTTPS. Controller endpoints will be added to the EDC that support marshalling and unmarshalling JSON-LD messages. These controllers will operate on native JSON -structures (since JSON-LD is valid JSON) as opposed to typed Java representations. This will allow the EDC to remove its dependency on the IDS InfoModel Java Library and to provide -full support for JSON-LD message exchanges. - -A common JSON-LD processing architecture is required by these controller endpoints, which may be deployed to individual runtimes such as the control plane and catalog systems. In -addition, the Management API will adopt support for JSON-LD. This document lays out the common processing architecture that will support those requirements. - -## JSON-LD Support - -JSON-LD support can be added to the existing `TypeManager` infrastructure by creating a __serializer context__ that is configured with JSONP support in a JSON-LD EDC extension: - -``` -var mapper = new ObjectMapper(); - -mapper.registerModule(new JSONPModule()); - -var module = new SimpleModule() { - - @Override - public void setupModule(SetupContext context){ - super.setupModule(context); - } - -}; - -mapper.registerModule(module); - -typeManager.registerContext("json-ld",mapper) -``` - -This context can then be used in conjunction with the [Titanium JSON-LD Library](https://github.com/filip26/titanium-json-ld) when processing messages: - -``` -// message is de-serialized as Map by Jersey -var document = JsonDocument.of(mapper.convertValue(message, JsonObject.class)); - -try { - - var compacted = JsonLd.compact(document,EMPTY_CONTEXT).get(); - var convertedDocument = mapper.convertValue(compacted,Map.class); - - // process converted document - -} catch(JsonLdError e) { - throw new RuntimeException(e); -} -``` - -### JSON-LD Document Loaders - -JSON-LD allows references to external documents that contain context information. EDC should provide a default loader and extensibility point for resolving and caching external -document contexts, `JsonLdDocumentResolverRegistry`. This extensibility point should be provided by a generic JSON-LD extension, as it may be reused outside of IDS. - -The Titanium interface for loading referenced documents is `DocumentLoader`: - -``` -public interface DocumentLoader { - - /** - * Retrieve a remote document. - * - * @param url of the remote document to fetch - * @param options to set the behavior of the loader - * @return {@link Document} representing a remote document - * @throws JsonLdError - */ - Document loadDocument(URI url, DocumentLoaderOptions options) throws JsonLdError; -} - -``` - -EDC will provide an implementation that: - -1. Resolves documents from a local file system directory (which can be a read-only docker mount) -2. Delegates to `JsonLdDocumentResolver` implementations via the `JsonLdDocumentResolverRegistry`. - -`JsonLdDocumentResolver` should not expose Titanium classes. It should return a `JsonStructure` which can be wrapped in a Titanium `Document` by the EDC `DocumentLoader` -implementation: - -``` -public interface JsonLdDocumentResolver { - - boolean canResolve(URI url); - - JsonStructure resolve(URI url); -} -``` - -> __NOTE__: The EDC should refrain from resolving URLs that are not mapped to the local file system. For example, HTTP URLs, due to security considerations. If end-users want this -> capability, they can implement and register a `JsonLdDocumentResolver`. - - diff --git a/docs/developer/ids-dataspace-protocol/management-api.md b/docs/developer/ids-dataspace-protocol/management-api.md deleted file mode 100644 index 0039193b9b5..00000000000 --- a/docs/developer/ids-dataspace-protocol/management-api.md +++ /dev/null @@ -1,7 +0,0 @@ -## Management API - -Items to detail: - -1. Create a separate context with controllers for supporting updated model types (e.g. Assets, Catalog). -2. Catalogs and Assets are JSON-LD structures -3. Policies are pure ODRL/JSON-LD diff --git a/docs/developer/ids-dataspace-protocol/transfer-process-architecture.md b/docs/developer/ids-dataspace-protocol/transfer-process-architecture.md deleted file mode 100644 index 5fa2ea03add..00000000000 --- a/docs/developer/ids-dataspace-protocol/transfer-process-architecture.md +++ /dev/null @@ -1,56 +0,0 @@ -# The Dataspace Protocol Transfer Process Architecture - -The EDC will be upgraded to implement and be fully compliant to the __Dataspace Protocol Transfer Process Protocol__. This document details the architectural approach that will be taken -to support that protocol. - -## Backward Compatibility and Migration Support - -It is __NOT__ a goal of the EDC project to provide backward compatibility to the previous IDS implementation. At a declared milestone, once the Dataspace Protocol implementation has reached -a sufficient maturity level, the EDC project will switch to the new protocols and remove the old protocol implementation. Users will be responsible for migrating existing EDC -installations as no automated migration facilities will be provided. - -## Goals - -The goals of the Dataspace Protocol support are: - -1. To be compliant with the Dataspace Protocol Transfer Process Protocol. This will involve passing all mandatory tests of the to-be-released IDS Test Compatibility Kit (IDS-TCK). - -## The State Machine - -The IDS Specification Contract Negotiation states are: - -- REQUESTED -- STARTED -- COMPLETED -- SUSPENDED -- TERMINATED - -The following table defines the mapping between existing EDC states, the corresponding new EDC states, and the IDS specification states. - -| EDC Existing | EDC New | IDS | Notes | -|--------------------------|:-------------------------|------------|--------------------------| -| UNSAVED | (remove) | N/A | This state is not needed | -| INITIAL | INITIAL | N/A | | -| | | | | -| PROVISIONING | PROVISIONING | N/A | | -| PROVISIONING_REQUESTED | PROVISIONING_REQUESTED | N/A | | -| PROVISIONED | PROVISIONED | N/A | | -| | | | | -| REQUESTING | REQUESTING | N/A | | -| REQUESTED | REQUESTED | REQUESTED | | -| | | | | -| IN_PROGRESS | STARTED | STARTED | | -| COMPLETED | COMPLETED | COMPLETED | | -| | | | | -| (multiple) | TERMINATED | TERMINATED | | -| | | | | -| DEPROVISIONING | DEPROVISIONING | N/A | | -| DEPROVISIONING_REQUESTED | DEPROVISIONING_REQUESTED | N/A | | -| DEPROVISIONED | DEPROVISIONED | N/A | | -| | | | | -| STREAMING | (STARTED) | | | -| ENDED | (TERMINATED) | | | -| CANCELLED | (TERMINATED) | | | -| ERROR | (TERMINATED) | | | -| | | | | - diff --git a/docs/developer/metrics.md b/docs/developer/metrics.md deleted file mode 100644 index 4b2c40ed372..00000000000 --- a/docs/developer/metrics.md +++ /dev/null @@ -1,46 +0,0 @@ -# EDC extensions for instrumentation with Micrometer - -EDC provides extensions for instrumentation with the [Micrometer](https://micrometer.io/) metrics library to automatically collect metrics from the host system, JVM, and frameworks and libraries used in EDC (including OkHttp, Jetty, Jersey and ExecutorService). - -See [sample 04.3](https://github.com/eclipse-edc/Samples/blob/main/transfer/transfer-04-open-telemetry/README.md) for an example of an instrumented EDC consumer. - -## Micrometer Extension - -This extension provides support for instrumentation for some core EDC components: -- JVM metrics -- [OkHttp](https://square.github.io/okhttp/) client metrics -- [ExecutorService](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/ExecutorService.html) metrics - -## Jetty Micrometer Extension - -This extension provides support for instrumentation for the [Jetty](https://www.eclipse.org/jetty/) web server, which is enabled when using the `JettyExtension`. - -## Jersey Micrometer Extension - -This extension provides support for instrumentation for the [Jersey](https://eclipse-ee4j.github.io/jersey/) framework, which is enabled when using the `JerseyExtension`. - -## Instrumenting ExecutorServices - -Instrumenting ExecutorServices requires using the `ExecutorInstrumentation` service to create a wrapper around the service to be instrumented: - -```java -ExecutorInstrumentation executorInstrumentation = context.getService(ExecutorInstrumentation.class); - -// instrument a ScheduledExecutorService -ScheduledExecutorService executor = executorInstrumentation.instrument(Executors.newScheduledThreadPool(10), "name"); -``` - -Without any further configuration, a noop implementation of `ExecutorInstrumentation` is used. We recommend using the implementation provided in the Micrometer Extension that uses Micrometer's [ExecutorServiceMetrics](https://github.com/micrometer-metrics/micrometer/blob/main/micrometer-core/src/main/java/io/micrometer/core/instrument/binder/jvm/ExecutorServiceMetrics.java) to record ExecutorService metrics. - -## Configuration - -The following properties can use used to configure which metrics will be collected. - -- `edc.metrics.enabled`: enables/disables metrics collection globally -- `edc.metrics.system.enabled`: enables/disables collection of system metrics (class loader, memory, garbage collection, processor and thread metrics) -- `edc.metrics.okhttp.enabled`: enables/disables collection of metrics for the OkHttp client -- `edc.metrics.executor.enabled`: enables/disables collection of metrics for the instrumented ExecutorServices -- `edc.metrics.jetty.enabled`: enables/disables collection of Jetty metrics -- `edc.metrics.jersey.enabled`: enables/disables collection of Jersey metrics - -Default values are always "true", switch to "false" to disable the corresponding feature. diff --git a/docs/developer/openapi.md b/docs/developer/openapi.md deleted file mode 100644 index 28313e4643f..00000000000 --- a/docs/developer/openapi.md +++ /dev/null @@ -1,83 +0,0 @@ -# Generating the OpenApi Spec (*.yaml) - -It is possible to generate an OpenApi spec in the form of a `*.yaml` file by invoking two simple Gradle tasks. - -## Generate `*.yaml` files - -Every module (=subproject) that contains REST endpoints is scanned for Jakarta Annotations which are then used to -generate a `*.yaml` specification for that particular module. This means that there is one `*.yaml`file _per module_, -resulting in several `*.yaml` files. - -Those files are named `MODULENAME.yaml`, e.g. `observability.yaml` or `control.yaml`. - -To re-generate those files, simply invoke - -```shell -./gradlew clean resolve -``` - -This will generate all `*.yaml` files in the `resources/openapi/yaml` directory. - -## Gradle Plugins - -We use the official Swagger Gradle plugins: - -- `"io.swagger.core.v3.swagger-gradle-plugin"`: used to generate a `*.yaml` file per module - -So in order for a module to be picked up by the Swagger Gradle plugin, simply add it to the `build.gradle.kts`: - -```kotlin -// in yourModule/build.gradle.kts - -val rsApi: String by project - -plugins { - `java-library` - id(libs.plugins.swagger.get().pluginId) //<-- add this -} - -dependencies { - implementation("jakarta.ws.rs:jakarta.ws.rs-api:${rsApi}") //<-- you'll probably already have this - // other dependencies -} - -``` - -If you developed a REST endpoint, you very likely already have the `jakarta.ws.rs:....` part in your build file. If you -don't, it'll get added automatically for you. - -### Categorizing your API - -All APIs in EDC should be "categorized", i.e. they should belong to a certain group of APIs. -Please see [this decision record](./decision-records/2022-11-09-api-refactoring/renaming.md) for reference. In order to -add your module to one of the categories, simply add this block to your module's `build.gradle.kts`: - -```kotlin -plugins { - `java-library` - id(libs.plugins.swagger.get().pluginId) -} - -dependencies { - // ... -} - -// add this block: -edcBuild { - swagger { - apiGroup.set("management-api") - } -} -``` - -This tells the build plugin how to categorize your API and SwaggerHub will list it accordingly. -_Note: currently we have categories for `control-api` and `management-api`_ - -## How to generate code - -This feature does **neither** expose the generated files through a REST endpoint providing any sort of live try-out -feature, **nor** does it generate any sort of client code. A visual documentation page for our APIs is served -through [SwaggerHub](https://app.swaggerhub.com/home?type=API). - -However, there is Gradle plugin capable of generating client code. -Please refer to the [official documentation](https://github.com/int128/gradle-swagger-generator-plugin). diff --git a/docs/developer/performance-tuning.md b/docs/developer/performance-tuning.md deleted file mode 100644 index f6e2e489839..00000000000 --- a/docs/developer/performance-tuning.md +++ /dev/null @@ -1,47 +0,0 @@ -# Performance Tuning - -Out of the box the EDC provides a set of default configurations that aim to find a good balance for performances. -The extensibility nature of the EDC permits the user to configure it deeply. - -Here will be showed how performance could be improved. - -## State Machines -At the core of the EDC there are different [`State Machines`](state-machine.md), and their configuration is crucial to -reach the best performances. - -### Settings -The most important settings for configuring a state machine are: -- `iteration-wait` - - the time that the state machine will pass before fetching the next batch of entities to process in the case in the - last iteration there was no processing; Otherwise no wait is applied. -- `batch-size` - - how many entities are fetched from the store for processing by the connector instance. The entities are locked - pessimistically against mutual access, so for the time of the processing no other connector instances can read - the same entities. - -### How to tune them -In the control-plane there are 3 state machines: -- `negotiation-consumer`: the state machine that handles the contract negotiations from a consumer perspective -- `negotiation-provider`: the state machine that handles the contract negotiations from a provider perspective -- `transfer-process`: the state machine that handles the transfer processes - -For every state machine you can set the `iteration-wait` (actually for the `negotiation-*` there's a single setting -used for both) and the `batch-size`, so the settings (and their default value) are: - -- `edc.negotiation.state-machine.iteration-wait-millis` = 1000 -- `edc.negotiation.consumer.state-machine.batch-size` = 20 -- `edc.negotiation.provider.state-machine.batch-size` = 20 -- `edc.transfer.state-machine.iteration-wait-millis` = 1000 -- `edc.transfer.state-machine.batch-size` = 20 - -Thus, by default all the control-plane state machines will have an iteration of 1 second if no -entities are found/processed. There will be no wait but the next iteration will start as soon as all the entities are -processed. At every iteration 20 entities are fetched. - -Changing these values you could tune your connector, for example reducing the `iteration-wait` will mean that the state -machine will be more reactive, and increasing the `batch-size` will mean that more entities will be processed in the -same iteration. Please note increasing `batch-size` too much could bring to longer processing time in the case that -there are a lot of different entities and that reducing `iteration-wait` too much will make the state machine spend more -time in the fetch operation. - -If tweaking the settings doesn't give you a performance boost, you can achieve them through horizontal scaling. diff --git a/docs/developer/policy-engine.md b/docs/developer/policy-engine.md deleted file mode 100644 index b03d983ed12..00000000000 --- a/docs/developer/policy-engine.md +++ /dev/null @@ -1,157 +0,0 @@ -# Policy Engine - -## Register policy functions - -The following will document how to register a constraint function to the policy engine. - -### Step 1: Create an extension - -As an example, we create the module `:extensions:policy:ids-policy`. - -1. Add a `build.gradle.kts` file: - - ``` - val rsApi: String by project - - plugins { - `java-library` - } - - dependencies { - api(project(":spi")) - } - ``` - -2. Specify the `IdsPolicyExtension` in the `resources/META-INF/services` directory: - - ``` - org.eclipse.edc.protocol.ids.policy.IdsPolicyExtension - ``` - -4. To ensure that the extension will be loaded, add it to the `settings.gradle.kts` at the root of the project: - - ``` - include(":extensions:policy:ids-policy") - ``` - -### Step 2: Implement a `ServiceExtension` - -The new policy extension will provide a service extension class and two constraint functions. In -`IdsPolicyExtension`, first, the scope `ALL_SCOPES` is bound to the rule type `use`. Next, both policy -functions are registered to the policy engine. - -```java -public class IdsPolicyExtension implements ServiceExtension { - - private static final String ABS_SPATIAL_POSITION = "ids:absoluteSpatialPosition"; - private static final String PARTNER_LEVEL = "ids:partnerLevel"; - - @Inject - private RuleBindingRegistry ruleBindingRegistry; - - @Inject - private PolicyEngine policyEngine; - - @Override - public String name() { - return "IDS Policy"; - } - - @Override - public void initialize(ServiceExtensionContext context) { - ruleBindingRegistry.bind("use", ALL_SCOPES); - - policyEngine.registerFunction(ALL_SCOPES, Permission.class, ABS_SPATIAL_POSITION, new AbsSpatialPositionConstraintFunction()); - policyEngine.registerFunction(ALL_SCOPES, Permission.class, PARTNER_LEVEL, new PartnerLevelConstraintFunction()); - } -} -``` - -In this example, the functions are registered for all policy scopes, meaning they will be used for every policy -evaluation. Details on different policy scopes can be found [here](#policy-scopes). - -### Step 3: Implement an `AtomicConstraintFunction` - -#### Absolute Spatial Position Constraint Function - -```java -public class AbsSpatialPositionConstraintFunction implements AtomicConstraintFunction { - - @Override - public boolean evaluate(Operator operator, Object rightValue, Permission rule, PolicyContext context) { - var region = context.getParticipantAgent().getClaims().get("region"); - switch (operator) { - case EQ: - return Objects.equals(region, rightValue); - case NEQ: - return !Objects.equals(region, rightValue); - case IN: - return ((Collection) rightValue).contains(region); - default: - return false; - } - } -} -``` - -#### Partner Level Constraint Function - -```java -public class PartnerLevelConstraintFunction implements AtomicConstraintFunction { - - @Override - public boolean evaluate(Operator operator, Object rightValue, Permission rule, PolicyContext context) { - String partnerLevel = context.getParticipantAgent().getClaims().get("partnerLevel"); - switch (operator) { - case EQ: - return Objects.equals(partnerLevel, rightValue); - case NEQ: - return !Objects.equals(partnerLevel, rightValue); - case IN: - return ((Collection) rightValue).contains(partnerLevel); - default: - return false; - } - } -} -``` - -### Policy scopes - -By binding a function to a specific scope instead of all scopes, the function will only be included in evaluations for -that scope. Currently, the EDC core provides 3 different policy scopes, which are explained in the following. - -#### Cataloging scope: `contract.cataloging` - -This scope is used when contract offers are generated from contract definitions. Here, each contract definition's access -policy is evaluated to decide which contract definitions may be used to generate offers for the requesting agent. - -#### Negotiation scope: `contract.negotiation` - -This scope is used during the contract negotiation. The policies from each contract offer and agreement exchanged during -the negotiation are evaluated with this scope. This scope is also used to re-evaluate a contract agreement's policy -before a data transfer is initiated. - -#### Manifest verification scope: `provision.manifest.verify` - -This scope is used during the provisioning phase to evaluate the resource definitions of a generated resource manifest. -Functions registered in this scope may also modify resource definitions so that they comply with the policy. -Therefore, a `ResourceManifestContext`, which provides access to a manifest's resource definitions, is available -through the `PolicyContext` for functions registered in this scope. Using the `ResourceManifestContext`, resource -definitions can be retrieved and updated by type. - -```java -@Override -public boolean evaluate(Operator operator, Object rightValue, Permission rule, PolicyContext context) { - var manifestContext = context.getContextData(ResourceManifestContext.class); - - var bucketDefinitions = manifestContext.getDefinitions(S3BucketResourceDefinition.class); - - // verify and/or modify definitions to comply with policy - - manifestContext.replaceDefinitions(S3BucketResourceDefinition.class, verifiedBucketDefinitions); - return true; -} -``` - -If any of the resource definitions cannot be modified to comply with the policy, the function should return `false`. diff --git a/docs/developer/policy-monitor.md b/docs/developer/policy-monitor.md deleted file mode 100644 index 31df5c91fb0..00000000000 --- a/docs/developer/policy-monitor.md +++ /dev/null @@ -1,28 +0,0 @@ -# Policy Monitor - -The Policy Monitor is one EDC connector module that permits to continuously enforce policies on running Transfer Processes. - -## Overview - -Not finite transfers like streaming flows, that are started but, in fact, technically they don't complete, need to be -under control to ensure that they don't continue transferring data also when the contract policy is not valid anymore. - -The Policy Monitor takes care of that, it's implemented as a State Machine, that starts when a new provider Transfer Process -gets started, continuously loop and evaluate the contract policy using the Policy Engine. -In the very moment that the Policy is not valid anymore, the Policy Monitor completes the Transfer Process. - -## Embedded deployment -To deploy the Policy Monitor embedded in the control-plane requires to add the `policy-monitor-core` extension -to the bundle. - -The Policy Monitor state machine can be configured in the same way other state machines are configured, using these properties: -``` -edc.policy.monitor.state-machine.iteration-wait-millis -edc.policy.monitor.state-machine.batch-size -``` - -Take a look at the [performance tuning page](performance-tuning.md) for further details. - -## Standalone deployment - -[Not implemented yet](https://github.com/eclipse-edc/Connector/issues/3446) diff --git a/docs/developer/sql-persistence.md b/docs/developer/sql-persistence.md deleted file mode 100644 index 0cb54b8afc4..00000000000 --- a/docs/developer/sql-persistence.md +++ /dev/null @@ -1,41 +0,0 @@ -# SQL persistence - -Every store in the EDC, intended as persistence for state, comes out of the box with two implementations: -- in-memory -- sql (postgresql dialect) - -By default, the `in-memory` stores are provided by the dependency injection, the `sql` implementations can be used by -simply registering the relative extensions (e.g. `asset-index-sql`, `contract-negotiation-store-sql`, ...). - -## Configuration - -### DataSources - -For using `sql` extensions, a `DataSource` is needed, and it should be registered on the `DataSourceRegistry` service. - -The `sql-pool-apache-commons` extension takes care to create and register pooled data sources starting from configuration. -It expects at least one data source called `default` that can be configured with `Vault` keys: -``` -edc.datasource.default.url=... -edc.datasource.default.name=... -edc.datasource.default.password=... -``` -(note: if no vault entries are found for such keys, they will be obtained from the configuration). - -Other datasources can be defined using the same settings structure: -``` -edc.datasource..url=... -edc.datasource..name=... -edc.datasource..password=... -``` - -`` can be a string that then can be used by the stores configuration to use specific data sources. - -### Using custom datasource in stores - -Using a custom datasource in a store can be done by configuring the setting: -``` -edc.sql.store..datasource= -``` - -This way the `` (that could be `asset`, `contractnegotiation`...) will use the `` datasource. diff --git a/docs/developer/sql_queries.md b/docs/developer/sql_queries.md deleted file mode 100644 index 11ba401cd96..00000000000 --- a/docs/developer/sql_queries.md +++ /dev/null @@ -1,182 +0,0 @@ -# Issuing dynamic queries in SQL data stores - -## Introduction - -The Management API (DM API) offers a very open and unrestricted query feature: as long as it can be expressed as a -3-tuple in the form - -``` - -``` - -it is a valid query. This abstract way of expressing a condition is called a `Criterion`. For example, API clients may -specify a query to obtain a selection of `ContractNegotiation` objects that looks like this: - -``` -contractAgreement.assetId = myAssetId -``` - -In practice this would return `ContractNegotiation`s, that have a `ContractAgreement` which references an `Asset` with -the ID `"myAssetId"`. - -This means, that the backing `SqlContractNegotiationStore` must be able to do the following things: - -1. dynamically map the expression onto it's internal DB schema: a mapping from the properties `contractAgreement` onto - the column name `contract_agreement` must be made. Furthermore, the store implementation must be able to determine - how to traverse from `ContractNegotiation` to `ContractAgreement` in the database, which in this case means - navigation ( - = `JOIN`-ing ) a foreign key. -2. distinguish between a scalar or a collection right-hand operand: operators such as `IN` require the right-hand - operand to be a list, such as `...WHERE x IN (y1,y1)` -3. substitute the values in the expression with placeholders for prepared statements (=`?`) -4. leverage DB-specific features, like querying a JSON-encoded field, which would only be available in Postgres - -The following section explains how all of these are achieved. - -## Preliminary: the canonical format - -Theoretically it is possible to map every schema onto every other schema, given that they are of equal cardinality. To -achieve that, we introduce the notion of a _canonical format_, which is our internal working schema. In other words, -this is the schema in which objects are represented internally. If in the future we support a wider variety of -translation and transformation paths, everything would have to be transformed into that canonical format first. - -In actuality the _canonical format_ of an object is defined by the respective Java class and its field names. For -instance, a query for contract negotiations must be specified using the field names of a `ContractNegotiation` object: - -```java -public class ContractNegotiation { - // ... - private ContractAgreement contractAgreement; - // ... -} - -public class ContractAgreement { - // ... - private final String assetId; -} -``` - -Consequently, `contractAgreement.assetId` would be valid, whereas `contract_agreement.asset_id` would not. Or, the -left-hand operand looks like as if we were traversing the Java object graph. This is what we call the _canonical format_ -. Note the omission of the root object `contractNegotiation`! - -## Using `TranslationMapping` - -In order to decouple the canonical format and the SQL schema (or any other schema) in terms of naming convention, a -mapping scheme exists to map the canonical model onto the SQL model. The `TranslationMapping` is essentially a -graph-like metamodel of the business objects: every Java class is represented by a mapping class that contains its field -names and the associated SQL column names. The convention is to append `*Mapping` to the class name, -e.g. `PolicyDefinitionMapping`. - -### Mapping primitive fields - -Primitive fields are stored directly in SQL columns (as opposed to JSON, foreign keys,...). Thus, mapping primitive data -types is trivial: a simple mapping from one onto the other is necessary, for -example, `ContractNegotiation.counterPartyAddress` would be represented in the metamodel as an entry - -```java -"counterPartyAddress"->"counterparty_address" -``` - -When constructing `WHERE/AND` clauses, the canonical property must simply be replaced by the respective SQL column name. - -### Mapping complex objects - -For fields that are of complex type, such as the `ContractNegotiation.contractAgreement` field, it is necessary to -accommodate this depending on how the EDM is defined. There are two basic variants that we use: - -#### Option 1: using foreign keys - -In this case, the referenced object is stored in a separate table using a foreign key. Thus, the canonical property -(= `contractAgreement`) is mapped onto the SQL schema using yet another `*Mapping` class. In the given example this -would be the `ContractAgreementMapping`. When resolving a property in the canonical format (`contractAgreement.assetId`) -, this means we must recursively descend into the model graph and resolve the correct SQL expression. - -_Note: mapping and translating `one-to-many` relations (= arrays/lists) with foreign keys is not implemented at this -time._ - -#### Option 2a: encoding the object in JSON - -Another way to store complex objects is to encode them in JSON and store them in a `VARCHAR` column. Some databases even -have a special data type and dedicated operators and functions for that. Postgres is one of them. For example, -the `TranferProcess` is stored in a table called `edc_transfer_process`, its `DataAddress` property is encoded in JSON -and stored in a `JSON` field. - -For example querying for `TransferProcess` objects: when mapping the filter -expression `contentDataAddress.properties.somekey=somevalue`, the `contentDataAddress` is represented as JSON, therefore -in the `TransferProcessMapping` the `contentDataAddress` field maps to a `JsonFieldMapping`: - -```java -public TransferProcessMapping(TransferProcessStoreStatements statements){ - // ... - add(FIELD_CONTENTDATAADDRESS,new JsonFieldMapping(statements.getContentDataAddressColumn())); - // ... - } -``` - -which would then get translated to: - -```sql -SELECT * -FROM edc_transfer_process --- omit LEFT OUTER JOIN for readability -WHERE content_data_address -> 'properties' ->> 'key' = 'value' -``` - -_Note this statement is only valid in the Postgres dialect! Other SQL databases may or may not have similar -possibilities._ - -#### Option 2b: encoding lists/arrays in JSON - -Like accessing objects, accessing lists/arrays of objects is possible using special JSON operators. In this case the -special Postgres function `json_array_elements()` is used. Please refer to -the [official documentation](https://www.postgresql.org/docs/9.5/functions-json.html). - -For an example of how this is done, please look at how -the [TransferProcessMapping](../../extensions/control-plane/store/sql/transfer-process-store-sql/src/main/java/org/eclipse/edc/connector/store/sql/transferprocess/store/schema/postgres/TransferProcessMapping.java) -maps a `ResourceManifest`, which in turn contains a `List` using -the [ResourceManifestMapping](../../extensions/control-plane/store/sql/transfer-process-store-sql/src/main/java/org/eclipse/edc/connector/store/sql/transferprocess/store/schema/postgres/ResourceManifestMapping.java) -. Finally, the `SqlQueryStatement` -gets [assembled using the aforementioned JSON array function](../../extensions/control-plane/store/sql/transfer-process-store-sql/src/main/java/org/eclipse/edc/connector/store/sql/transferprocess/store/schema/postgres/PostgresDialectStatements.java) -. - -## Prepared statements using the `SqlQueryStatement` - -The first step of the translation, i.e. mapping from canonical format onto a target DSL, is handled by -the `TranslationMapping` class and its implementors. - -The second and third steps involve interpreting the right-hand operand as scalar or list-type and substituting its -values with the appropriate placeholders for SQL prepared statements. This is done by the `SqlConditionExpression` -class, which validates the expression by checking the operator against a list of supported operators, and then converts -the right-hand operand in to either a single, or a list of placeholders. In SQL this is either `?` or `(?,?,...?)`. - -The `SqlQueryStatement` wraps both these two steps (translation and substitution) and offers a convenient API. - -## Specific features for PostgreSQL - -As mentioned before Postgres has data types and query operators specifically to store and query JSON structures -(see [official documentation](https://www.postgresql.org/docs/12/functions-json.html)). In order to leverage that, some -parts of the object graph are persisted as JSON rather than in a separate table referenced by foreign key. - -The condition of the`WHERE` clause is in fact contributed by the `*Mapping` class that is specific to Postgres. - -Notes: - -- Querying list/array types using Postgres' JSON features requires modifying the `SELECT` statement, as the cast to a - JSON array is done on the fly. Therefore, this has to be done _before_ constructing the `SqlQueryStatement`. -- in order to port this to another database dialect, the `Mapping` classes very likely will have to be reimplemented - -## Supported query operators - -Currently we only support the following operators: - -- `=`: equality, right-hand operand is interpreted as literal -- `in`: "one-of", right hand operand must be an `Iterable` -- `like`: pattern matching, right-hand operand is interpreted - as [pattern string](https://www.w3schools.com/sql/sql_like.asp) - -## Comparison with NoSQL databases (CosmosDB) - -In CosmosDB this translation is not necessary, as the domain object is wrapped in a `CosmosDocument` and directly -serialized to JSON. In other words, the canonical format is congruent to the CosmosDB schema. However, CosmosDB uses a -similar method to dynamically generate `SELECT` statements. diff --git a/docs/developer/state-machine.md b/docs/developer/state-machine.md deleted file mode 100644 index 7987ecd83ad..00000000000 --- a/docs/developer/state-machine.md +++ /dev/null @@ -1,107 +0,0 @@ -# State machine - -EDC provides a lightweight framework to facilitate the development of persistent state machines. - -The framework currently manages a single execution thread. - -## Collaborators - -- The class which defines state machine instances. The `StatefulEntity` base class can be used to derive state machine - entity classes. For example, a `ContractNegotiation` is a `StatefulEntity` for an EDC contract negotiation. -- The `StateMachineManager` which manages an execution thread that periodically gives a chance to state machines to - progress their state. -- The state-machine specific Manager which instantiates the `StateMachineManager` and defines processors for each state - for a given state machine class. For example, `ConsumerContractNegotiationManagerImpl` manages `ContractNegotiation`s - in which the connector is a consumer. -- The `ServiceExtension` which manages the Manager's lifecycle. -- The Store which manages `StatefulEntity` persistence. `InMemoryStatefulEntityStore` provides a utility class to back - in-memory implementations for testing. - -## State-machine specific Manager - -The Manager manages the `StateMachineManager`'s lifecycle and defines the state machine's behavior, while the `StatefulEntity` -is only concerned with the state machine's data. - -Here's a prototypical Manager implementation: - -```java -public class EntityManager { - - public void start() { // Called from ServiceExtension start() method - stateMachineManager = StateMachineManager.Builder.newInstance("state-machine-name", monitor, executorInstrumentation, waitStrategy) - // Processors for non-terminal states - .processor(processEntitiesInState(STATE1, this::processState1)) - .processor(processEntitiesInState(STATE2, this::processState2)) - .processor(processEntitiesInState(STATE3, this::processState3)) - .build(); - - stateMachineManager.start(); - } - - public void stop() { // Called from ServiceExtension shutdown() method - if (stateMachineManager != null) { - stateMachineManager.stop(); - } - } - - private Processor processEntitiesInState(State state, Function function) { - var filter = new Criterion[] { hasState(state.code()), isNotPending() }; - return ProcessorImpl.Builder.newInstance(() -> transferProcessStore.nextNotLeased(batchSize, filter)) - .process(telemetry.contextPropagationMiddleware(function)) - .guard(pendingGuard, this::setPending) // a guard can be added to, e.g. put in pending certain entities based on the `pendingGuard` predicate - .build(); - } - - // Processor functions should return true only if the state machine has been updated - private boolean processState1(StatefulEntityImpl sm) { - if (conditionsForTransitionFromState1ToState2Apply(sm)) { - sm.transitionState2(); - store.save(sm); - return true; - } - return false; - } - -} -``` - -### Guards -On a state machine `Processor` a `Guard` can be specified. that's a way to have a custom flow based on a predicate that can -be extended, for example, to enable "external interactions" in the state machine, as user interactions. A `Guard` predicate -can be set on the processor with a specific process to be executed. This way when the predicate matches the entity can be -set to pending, making it "invisible" for the state machine, but still accessible and modifiable by users or external systems. - -`Guard` example: -```java -class EntityPendingGuard implements PendingGuard { - - // custom collaborators as other services - - boolean test(Entity entity) { - // additional logic - return entity.getState() = SPECIFIC_STATE.code() && otherCondition; // if true, the entity will be set as pending - } - -} -``` - -## State-machine store - -The Store which manages `StatefulEntity` persistence must persist entities in a storage system. In-memory implementations -are provided for testing. - -Stores using persistent implementations must manage leases to support EDC clustered deployment. This ensures an entity is -processed by only one EDC instance at a time (assuming processing is quicker than lease expiration). - -```java -class EntityStore { - public void save(StatefulEntityImpl instance) { - // persist instance - // release lease - } - - List nextNotLeased(int max, Criterion... criteria); { - // retrieve and lease at most limit instances that satisfy criteria - } -} -``` diff --git a/docs/developer/terminology.md b/docs/developer/terminology.md deleted file mode 100644 index 7a2df675939..00000000000 --- a/docs/developer/terminology.md +++ /dev/null @@ -1,34 +0,0 @@ -# Terminology - -| Name | Description | -|:--- |:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **Artifact** | | -| **Asset** | **Assets**
* have one content type
* can be a finite as a (set of) file(s) or non finite as a service, stream
* are the _unit of sharing_
* can point to one or more (physical) asset elements | -| **Asset Element** | | -| **Asset Index** | **Asset Index**
* manages assets
* provided by an extension
* may support external catalogs
* can be queried | -| **Broker** | see **IDS Broker** | -| **Connector** | | -| **Connector Directory** | | -| **Contract** | | -| **Contract Agreement** | **Contract Agreement**
* points to a **Contract Offer**
* results from a **Contract Negotiation Process**
* has a start date and may have a expiry date and a cancellation date | -| **Contract Negotiation** | * MVP: only possible to accept already offered contracts. Counter offers are rejected automatically. | -| **Contract Offer** | **Contract Offer**
* set of obligations and permissions
* generated on the fly on provider side (see **Contract Offer Framework**)
* are immutable
* persisted in **Contract Negotiation Process** once the negotiation has started | -| **Contract Offer Framework** | **Contract Offer Framework**
* generates **Contract Offer Templates**
* provided by **Extensions**
* may be implemented in custom extensions to created contract offers based on existing systems | -| **Contract Offer Template** | Blueprint of a **Contract Offer** | -| **Consumer** | | -| **Data** | | -| **Dataspace** | | -| **EDC Extension** | | -| **Element** | see **Asset Element** | -| **Extension** | see **EDC Extension** | -| **Framework** | see **Contract Offer Framework** | -| **Identity Provider** | | -| **IDS Broker** | IDS version of the **Connector Directory** | -| **Offer** | see **Contract Offer** | -| **Offer Framework** | see **Contract Offer Framework** | -| **Policy** | logical collection of rules | -| **Provider** | | -| **Resource** | | -| **Resource Manifest** | | -| **Rule** | **Rules**
* bound to a **Contract Offer**, **Contract Agreement** or **Contract Offer Framework**
* exist independent from an **Asset** | -| **Transfer Process** | **Transfer Process**
* based on a **Contract Agreement** | diff --git a/docs/developer/transfer-process.md b/docs/developer/transfer-process.md deleted file mode 100644 index db2665daa0a..00000000000 --- a/docs/developer/transfer-process.md +++ /dev/null @@ -1,53 +0,0 @@ -# Transfer Process - -## Data Flows Supported by the EDC - -- Consumer pull -- Provider push - -### Consumer pull - -![alt text](diagrams/transfer-data-plane-consumer-pull.png) - -1. Provider and consumer agree to a contract (not displayed in the diagram) -2. Consumer initiates the transfer process by sending a `DataRequest` with destination type `HttpProxy` -3. Provider Data Plane Selector is queried to find a suitable instance -4. Provider Control Plane build a `DataAddress` which type `EDR`, whose: - - endpoint corresponds to the public API of the selected Data Plane - - auth key is `Authorization` - - auth code is a signed token generated by the Control Plane with claims: - - `dad` containing the encrypted `DataAddress` of the actual data source (provider ecosystem) - - `cid` claim containing the contract id -5. This `DataAddress` is sent to the consumer Control Plane through DSP protocol -6. Consumer Control Plane converts the `DataAddress` into a `EndpointDataReference` object and dispatch it through the `EndpointDataReferenceReceiverRegistry` - -Once this process is completed, the consumer backend applications can use the received `EndpointDataReference` in order -to query data from the provider Data Plane, by simply providing the provided token in the request header. - -> **_NOTE:_** For a Data Plane instance to be eligible for the Consumer Pull transfer, it must: -> - contains `HttpProxy` in the `allowedDestTypes` -> - contain a `property` which key `publicApiUrl`, which contains the actual URL of the Data Plane public API. - -### Provider push - -![alt text](diagrams/transfer-data-plane-provider-push.png) - -1. Provider and consumer agree to a contract (not displayed in the diagram) -2. Consumer initiates the transfer process, i.e. sends `DataRequest` with any destination type other than `HttpProxy` -3. Provider Control Plane retrieves the `DataAddress` of the actual data source and creates a `DataFlowRequest` based on the received `DataRequest` and this data address -4. Provider Control Plane asks the selector which Data Plane instance can be used for this data transfer -5. Selector returns an eligible Data Plane instance (if any) -6. Provider Control Plane sends the `DataFlowRequest` to the selected Data Plane instance through its control API (see `DataPlaneControlApi`) -7. Provider Data Plane validates the incoming request -8. If request is valid, Provider Data Plane returns acknowledgement -9. `DataPlaneManager` of the Provider Data Plane processes the request: it creates a `DataSource`/`DataSink` pair based on the source/destination data addresses -10. Provider Data Plane fetches data from the actual data source (see `DataSource`) -11. Provider Data Plane pushes data to the consumer services (see `DataSink`) - -## Transfer Process State Machine - -### Consumer -![Transfer Process Consumer State Machine](diagrams/transfer-process-consumer-states.png) - -### Provider -![Transfer Process Provider State Machine](diagrams/transfer-process-provider-states.png)