From 118b70d4561c4d163c7c15131ec7a41a41a984c7 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Fri, 10 Apr 2026 10:19:20 +0200 Subject: [PATCH] Remove the FAST data platform stage (#3851) * chore: remove data platform stage and references * fix checks --- FACTORIES.md | 2 - .../datasets/classic-gcd/defaults.yaml | 8 - .../classic-gcd/projects/core/iac-0.yaml | 13 - .../datasets/classic/defaults.yaml | 8 - .../datasets/classic/projects/core/iac-0.yaml | 13 - .../datasets/hardened/defaults.yaml | 8 - .../hardened/projects/core/iac-0.yaml | 13 - .../classic/projects/dev-sec-core-0.yaml | 1 - .../3-data-platform-dev/.fast-stage.env | 5 - fast/stages/3-data-platform-dev/README.md | 376 ----------------- .../data-domains-automation.tf | 78 ---- .../data-domains-composer.tf | 119 ------ .../3-data-platform-dev/data-domains.tf | 263 ------------ .../data-products-automation.tf | 78 ---- .../data-products-exposure.tf | 86 ---- .../3-data-platform-dev/data-products.tf | 172 -------- .../data/aspect-types/test-0.yaml | 46 --- .../data/data-domains/domain-0/_config.yaml | 90 ----- .../data/data-domains/domain-0/product-0.yaml | 77 ---- .../3-data-platform-dev/demo/.gitignore | 1 - .../stages/3-data-platform-dev/demo/README.md | 190 --------- .../demo/composer/DAG-dp0/gcs2bq_elt.py | 308 -------------- .../composer/DAG-dp0/gcs2bq_table_create.py | 224 ----------- .../demo/composer/variables.tf.tpl | 9 - .../demo/data/get_thelook_data.sh | 84 ---- .../schemas/curated/customer_purchases.json | 201 ---------- .../data/schemas/landing/order_items.json | 57 --- .../demo/data/schemas/landing/orders.json | 47 --- .../demo/data/schemas/landing/products.json | 47 --- .../demo/data/schemas/landing/users.json | 81 ---- .../3-data-platform-dev/demo/diagram.png | Bin 168364 -> 0 bytes fast/stages/3-data-platform-dev/demo/main.tf | 48 --- .../3-data-platform-dev/demo/outputs.tf | 53 --- .../3-data-platform-dev/demo/providers.tf | 24 -- .../demo/terraform.tfvars.sample | 10 - .../3-data-platform-dev/demo/variables.tf | 73 ---- .../diagram-data-platform.png | Bin 152881 -> 0 bytes .../3-data-platform-dev/diagram-folders.png | Bin 43577 -> 0 bytes fast/stages/3-data-platform-dev/factory.tf | 197 --------- .../3-data-platform-dev/fast_version.txt | 15 - fast/stages/3-data-platform-dev/main.tf | 134 ------- fast/stages/3-data-platform-dev/outputs.tf | 224 ----------- .../schemas/aspect-type.schema.json | 1 - .../schemas/aspect-type.schema.md | 50 --- .../schemas/data-domain.schema.json | 377 ------------------ .../schemas/data-domain.schema.md | 129 ------ .../schemas/data-product.schema.json | 293 -------------- .../schemas/data-product.schema.md | 104 ----- .../templates/providers.tf.tpl | 33 -- .../terraform.tfvars.sample | 33 -- .../3-data-platform-dev/variables-fast.tf | 109 ----- fast/stages/3-data-platform-dev/variables.tf | 179 --------- fast/stages/3-secops-dev/README.md | 4 +- fast/stages/CLEANUP.md | 21 +- fast/stages/README.md | 5 - tests/fast/stages/s0_org_setup/hardened.yaml | 45 +-- tests/fast/stages/s0_org_setup/simple.yaml | 45 +-- tests/fast/stages/s2_security/simple.yaml | 1 - .../stages/s3_data_platform_dev/__init__.py | 13 - .../s3_data_platform_dev/hardened.tfvars | 57 --- .../stages/s3_data_platform_dev/hardened.yaml | 42 -- .../stages/s3_data_platform_dev/simple.tfvars | 46 --- .../stages/s3_data_platform_dev/simple.yaml | 41 -- .../stages/s3_data_platform_dev/tftest.yaml | 23 -- tools/duplicate-diff.py | 4 - 65 files changed, 13 insertions(+), 5125 deletions(-) delete mode 100644 fast/stages/3-data-platform-dev/.fast-stage.env delete mode 100644 fast/stages/3-data-platform-dev/README.md delete mode 100644 fast/stages/3-data-platform-dev/data-domains-automation.tf delete mode 100644 fast/stages/3-data-platform-dev/data-domains-composer.tf delete mode 100644 fast/stages/3-data-platform-dev/data-domains.tf delete mode 100644 fast/stages/3-data-platform-dev/data-products-automation.tf delete mode 100644 fast/stages/3-data-platform-dev/data-products-exposure.tf delete mode 100644 fast/stages/3-data-platform-dev/data-products.tf delete mode 100644 fast/stages/3-data-platform-dev/data/aspect-types/test-0.yaml delete mode 100644 fast/stages/3-data-platform-dev/data/data-domains/domain-0/_config.yaml delete mode 100644 fast/stages/3-data-platform-dev/data/data-domains/domain-0/product-0.yaml delete mode 100644 fast/stages/3-data-platform-dev/demo/.gitignore delete mode 100644 fast/stages/3-data-platform-dev/demo/README.md delete mode 100644 fast/stages/3-data-platform-dev/demo/composer/DAG-dp0/gcs2bq_elt.py delete mode 100644 fast/stages/3-data-platform-dev/demo/composer/DAG-dp0/gcs2bq_table_create.py delete mode 100644 fast/stages/3-data-platform-dev/demo/composer/variables.tf.tpl delete mode 100755 fast/stages/3-data-platform-dev/demo/data/get_thelook_data.sh delete mode 100644 fast/stages/3-data-platform-dev/demo/data/schemas/curated/customer_purchases.json delete mode 100644 fast/stages/3-data-platform-dev/demo/data/schemas/landing/order_items.json delete mode 100644 fast/stages/3-data-platform-dev/demo/data/schemas/landing/orders.json delete mode 100644 fast/stages/3-data-platform-dev/demo/data/schemas/landing/products.json delete mode 100644 fast/stages/3-data-platform-dev/demo/data/schemas/landing/users.json delete mode 100644 fast/stages/3-data-platform-dev/demo/diagram.png delete mode 100644 fast/stages/3-data-platform-dev/demo/main.tf delete mode 100644 fast/stages/3-data-platform-dev/demo/outputs.tf delete mode 100644 fast/stages/3-data-platform-dev/demo/providers.tf delete mode 100644 fast/stages/3-data-platform-dev/demo/terraform.tfvars.sample delete mode 100644 fast/stages/3-data-platform-dev/demo/variables.tf delete mode 100644 fast/stages/3-data-platform-dev/diagram-data-platform.png delete mode 100644 fast/stages/3-data-platform-dev/diagram-folders.png delete mode 100644 fast/stages/3-data-platform-dev/factory.tf delete mode 100644 fast/stages/3-data-platform-dev/fast_version.txt delete mode 100644 fast/stages/3-data-platform-dev/main.tf delete mode 100644 fast/stages/3-data-platform-dev/outputs.tf delete mode 120000 fast/stages/3-data-platform-dev/schemas/aspect-type.schema.json delete mode 100644 fast/stages/3-data-platform-dev/schemas/aspect-type.schema.md delete mode 100644 fast/stages/3-data-platform-dev/schemas/data-domain.schema.json delete mode 100644 fast/stages/3-data-platform-dev/schemas/data-domain.schema.md delete mode 100644 fast/stages/3-data-platform-dev/schemas/data-product.schema.json delete mode 100644 fast/stages/3-data-platform-dev/schemas/data-product.schema.md delete mode 100644 fast/stages/3-data-platform-dev/templates/providers.tf.tpl delete mode 100644 fast/stages/3-data-platform-dev/terraform.tfvars.sample delete mode 100644 fast/stages/3-data-platform-dev/variables-fast.tf delete mode 100644 fast/stages/3-data-platform-dev/variables.tf delete mode 100644 tests/fast/stages/s3_data_platform_dev/__init__.py delete mode 100644 tests/fast/stages/s3_data_platform_dev/hardened.tfvars delete mode 100644 tests/fast/stages/s3_data_platform_dev/hardened.yaml delete mode 100644 tests/fast/stages/s3_data_platform_dev/simple.tfvars delete mode 100644 tests/fast/stages/s3_data_platform_dev/simple.yaml delete mode 100644 tests/fast/stages/s3_data_platform_dev/tftest.yaml diff --git a/FACTORIES.md b/FACTORIES.md index 35e492bc3..1a52b505c 100644 --- a/FACTORIES.md +++ b/FACTORIES.md @@ -90,8 +90,6 @@ The following table details how FAST stages implement factory patterns. | **2-security** | `projects` | Module-Backed (Factory) | `project-factory` | | **2-security** | `certificate_authorities` | Stage-Implemented (Module) | `certificate-authority-service` | | **2-security** | `keyrings` (KMS) | Stage-Implemented (Module) | `kms` | -| **3-data-platform-dev** | `aspect_types` | Module-Backed (Factory) | `dataplex-aspect-types` | -| **3-data-platform-dev** | `data_domains` | Native (Complex) | Multiple | | **3-secops-dev** | `rules`, `reference_lists` | Module-Backed (Factory) | `secops-rules` | ## Maintenance Guide diff --git a/fast/stages/0-org-setup/datasets/classic-gcd/defaults.yaml b/fast/stages/0-org-setup/datasets/classic-gcd/defaults.yaml index f8ac4c1ea..f1e401c26 100644 --- a/fast/stages/0-org-setup/datasets/classic-gcd/defaults.yaml +++ b/fast/stages/0-org-setup/datasets/classic-gcd/defaults.yaml @@ -93,11 +93,3 @@ output_files: bucket: $storage_buckets:iac-0/iac-stage-state prefix: 2-project-factory service_account: $iam_principals:service_accounts/iac-0/iac-pf-ro - 3-data-platform-dev: - bucket: $storage_buckets:iac-0/iac-stage-state - prefix: 3-data-platform-dev - service_account: $iam_principals:service_accounts/iac-0/iac-dp-dev-rw - 3-data-platform-dev-ro: - bucket: $storage_buckets:iac-0/iac-stage-state - prefix: 3-data-platform-dev - service_account: $iam_principals:service_accounts/iac-0/iac-dp-dev-ro diff --git a/fast/stages/0-org-setup/datasets/classic-gcd/projects/core/iac-0.yaml b/fast/stages/0-org-setup/datasets/classic-gcd/projects/core/iac-0.yaml index 18029513e..3fe001a5c 100644 --- a/fast/stages/0-org-setup/datasets/classic-gcd/projects/core/iac-0.yaml +++ b/fast/stages/0-org-setup/datasets/classic-gcd/projects/core/iac-0.yaml @@ -130,12 +130,6 @@ buckets: - $iam_principals:service_accounts/iac-0/iac-pf-rw $custom_roles:storage_viewer: - $iam_principals:service_accounts/iac-0/iac-pf-ro - 3-data-platform-dev: - iam: - roles/storage.admin: - - $iam_principals:service_accounts/iac-0/iac-dp-dev-rw - $custom_roles:storage_viewer: - - $iam_principals:service_accounts/iac-0/iac-dp-dev-ro # Terraform state bucket for FAST outputs iac-outputs: description: Terraform state for the org-level automation. @@ -143,14 +137,12 @@ buckets: iam: roles/storage.admin: - $iam_principals:service_accounts/iac-0/iac-org-rw - - $iam_principals:service_accounts/iac-0/iac-dp-dev-rw - $iam_principals:service_accounts/iac-0/iac-networking-rw - $iam_principals:service_accounts/iac-0/iac-security-rw - $iam_principals:service_accounts/iac-0/iac-pf-rw - $iam_principals:service_accounts/iac-0/iac-vpcsc-rw $custom_roles:storage_viewer: - $iam_principals:service_accounts/iac-0/iac-org-ro - - $iam_principals:service_accounts/iac-0/iac-dp-dev-ro - $iam_principals:service_accounts/iac-0/iac-networking-ro - $iam_principals:service_accounts/iac-0/iac-security-ro - $iam_principals:service_accounts/iac-0/iac-pf-ro @@ -196,11 +188,6 @@ service_accounts: display_name: IaC service account for project factory (read-only). iac-pf-rw: display_name: IaC service account for project factory (read-write). - # IaC service accounts for data platform (dev) stage - iac-dp-dev-ro: - display_name: IaC service account for data platform dev (read-only). - iac-dp-dev-rw: - display_name: IaC service account for data platform dev (read-write). # workload_identity_pools: # default: # display_name: Default pool for CI/CD. diff --git a/fast/stages/0-org-setup/datasets/classic/defaults.yaml b/fast/stages/0-org-setup/datasets/classic/defaults.yaml index ae1c16a48..32247348c 100644 --- a/fast/stages/0-org-setup/datasets/classic/defaults.yaml +++ b/fast/stages/0-org-setup/datasets/classic/defaults.yaml @@ -86,11 +86,3 @@ output_files: bucket: $storage_buckets:iac-0/iac-stage-state prefix: 2-project-factory service_account: $iam_principals:service_accounts/iac-0/iac-pf-ro - 3-data-platform-dev: - bucket: $storage_buckets:iac-0/iac-stage-state - prefix: 3-data-platform-dev - service_account: $iam_principals:service_accounts/iac-0/iac-dp-dev-rw - 3-data-platform-dev-ro: - bucket: $storage_buckets:iac-0/iac-stage-state - prefix: 3-data-platform-dev - service_account: $iam_principals:service_accounts/iac-0/iac-dp-dev-ro diff --git a/fast/stages/0-org-setup/datasets/classic/projects/core/iac-0.yaml b/fast/stages/0-org-setup/datasets/classic/projects/core/iac-0.yaml index f648827e0..91e49195a 100644 --- a/fast/stages/0-org-setup/datasets/classic/projects/core/iac-0.yaml +++ b/fast/stages/0-org-setup/datasets/classic/projects/core/iac-0.yaml @@ -135,12 +135,6 @@ buckets: - $iam_principals:service_accounts/iac-0/iac-pf-rw $custom_roles:storage_viewer: - $iam_principals:service_accounts/iac-0/iac-pf-ro - 3-data-platform-dev: - iam: - roles/storage.admin: - - $iam_principals:service_accounts/iac-0/iac-dp-dev-rw - $custom_roles:storage_viewer: - - $iam_principals:service_accounts/iac-0/iac-dp-dev-ro # Terraform state bucket for FAST outputs iac-outputs: description: Terraform state for the org-level automation. @@ -148,14 +142,12 @@ buckets: iam: roles/storage.admin: - $iam_principals:service_accounts/iac-0/iac-org-rw - - $iam_principals:service_accounts/iac-0/iac-dp-dev-rw - $iam_principals:service_accounts/iac-0/iac-networking-rw - $iam_principals:service_accounts/iac-0/iac-security-rw - $iam_principals:service_accounts/iac-0/iac-pf-rw - $iam_principals:service_accounts/iac-0/iac-vpcsc-rw $custom_roles:storage_viewer: - $iam_principals:service_accounts/iac-0/iac-org-ro - - $iam_principals:service_accounts/iac-0/iac-dp-dev-ro - $iam_principals:service_accounts/iac-0/iac-networking-ro - $iam_principals:service_accounts/iac-0/iac-security-ro - $iam_principals:service_accounts/iac-0/iac-pf-ro @@ -201,11 +193,6 @@ service_accounts: display_name: IaC service account for project factory (read-only). iac-pf-rw: display_name: IaC service account for project factory (read-write). - # IaC service accounts for data platform (dev) stage - iac-dp-dev-ro: - display_name: IaC service account for data platform dev (read-only). - iac-dp-dev-rw: - display_name: IaC service account for data platform dev (read-write). # workload_identity_pools: # default: # display_name: Default pool for CI/CD. diff --git a/fast/stages/0-org-setup/datasets/hardened/defaults.yaml b/fast/stages/0-org-setup/datasets/hardened/defaults.yaml index ae1c16a48..32247348c 100644 --- a/fast/stages/0-org-setup/datasets/hardened/defaults.yaml +++ b/fast/stages/0-org-setup/datasets/hardened/defaults.yaml @@ -86,11 +86,3 @@ output_files: bucket: $storage_buckets:iac-0/iac-stage-state prefix: 2-project-factory service_account: $iam_principals:service_accounts/iac-0/iac-pf-ro - 3-data-platform-dev: - bucket: $storage_buckets:iac-0/iac-stage-state - prefix: 3-data-platform-dev - service_account: $iam_principals:service_accounts/iac-0/iac-dp-dev-rw - 3-data-platform-dev-ro: - bucket: $storage_buckets:iac-0/iac-stage-state - prefix: 3-data-platform-dev - service_account: $iam_principals:service_accounts/iac-0/iac-dp-dev-ro diff --git a/fast/stages/0-org-setup/datasets/hardened/projects/core/iac-0.yaml b/fast/stages/0-org-setup/datasets/hardened/projects/core/iac-0.yaml index 5fb24b960..a0a302f62 100644 --- a/fast/stages/0-org-setup/datasets/hardened/projects/core/iac-0.yaml +++ b/fast/stages/0-org-setup/datasets/hardened/projects/core/iac-0.yaml @@ -220,12 +220,6 @@ buckets: - $iam_principals:service_accounts/iac-0/iac-pf-rw $custom_roles:storage_viewer: - $iam_principals:service_accounts/iac-0/iac-pf-ro - 3-data-platform-dev: - iam: - roles/storage.admin: - - $iam_principals:service_accounts/iac-0/iac-dp-dev-rw - $custom_roles:storage_viewer: - - $iam_principals:service_accounts/iac-0/iac-dp-dev-ro # Terraform state bucket for FAST outputs iac-outputs: description: Terraform state for the org-level automation. @@ -259,14 +253,12 @@ buckets: iam: roles/storage.admin: - $iam_principals:service_accounts/iac-0/iac-org-rw - - $iam_principals:service_accounts/iac-0/iac-dp-dev-rw - $iam_principals:service_accounts/iac-0/iac-networking-rw - $iam_principals:service_accounts/iac-0/iac-security-rw - $iam_principals:service_accounts/iac-0/iac-pf-rw - $iam_principals:service_accounts/iac-0/iac-vpcsc-rw $custom_roles:storage_viewer: - $iam_principals:service_accounts/iac-0/iac-org-ro - - $iam_principals:service_accounts/iac-0/iac-dp-dev-ro - $iam_principals:service_accounts/iac-0/iac-networking-ro - $iam_principals:service_accounts/iac-0/iac-security-ro - $iam_principals:service_accounts/iac-0/iac-pf-ro @@ -312,11 +304,6 @@ service_accounts: display_name: IaC service account for project factory (read-only). iac-pf-rw: display_name: IaC service account for project factory (read-write). - # IaC service accounts for data platform (dev) stage - iac-dp-dev-ro: - display_name: IaC service account for data platform dev (read-only). - iac-dp-dev-rw: - display_name: IaC service account for data platform dev (read-write). # workload_identity_pools: # default: # display_name: Default pool for CI/CD. diff --git a/fast/stages/2-security/datasets/classic/projects/dev-sec-core-0.yaml b/fast/stages/2-security/datasets/classic/projects/dev-sec-core-0.yaml index 82a1d77b1..75321bc22 100644 --- a/fast/stages/2-security/datasets/classic/projects/dev-sec-core-0.yaml +++ b/fast/stages/2-security/datasets/classic/projects/dev-sec-core-0.yaml @@ -28,7 +28,6 @@ iam_bindings: key_delegated: members: - $iam_principals:service_accounts/iac-0/iac-pf-rw - - $iam_principals:service_accounts/iac-0/iac-dp-dev-rw role: roles/cloudkms.admin condition: title: Delegated IAM grant on keys. diff --git a/fast/stages/3-data-platform-dev/.fast-stage.env b/fast/stages/3-data-platform-dev/.fast-stage.env deleted file mode 100644 index 470f66550..000000000 --- a/fast/stages/3-data-platform-dev/.fast-stage.env +++ /dev/null @@ -1,5 +0,0 @@ -FAST_STAGE_DESCRIPTION="Data Platform (dev)" -FAST_STAGE_LEVEL=3 -FAST_STAGE_NAME=data-platform-dev -FAST_STAGE_DEPS="0-globals 0-org-setup" -FAST_STAGE_OPTIONAL="2-networking 2-security" diff --git a/fast/stages/3-data-platform-dev/README.md b/fast/stages/3-data-platform-dev/README.md deleted file mode 100644 index 6182510c8..000000000 --- a/fast/stages/3-data-platform-dev/README.md +++ /dev/null @@ -1,376 +0,0 @@ -# Data Platform - -This stage focuses on the creation and management of an opinionated Data Platform architecture based on Google Cloud best practices. Its architecture is designed to be reliable, robust, and scalable, facilitating the continuous onboarding of new Data Products (or data workloads). - -The Data Platform's foundation, established in this stage, provides core capabilities without prescribing specific data handling, computation, or processing for individual workloads or Data Products. This allows flexibility in the technology choices for individual data domains, product and teams. The platform's approach is to encourage shared patterns, aiming to optimize, standardize, accelerate adoption, and ultimately reduce implementation costs and management overhead across Data Products. - -While our solution is conceptually guided by [Data Mesh principles on Google Cloud Platform](https://cloud.google.com/architecture/data-mesh), its adoption doesn't strictly require adherence to every Data Mesh concept. However, the 'Data as a Product' principle that treats data as a first-class citizen is fundamental to our implementation as well. For foundational elements like resource hierarchy, networking, and security, this stage can integrate with established [FAST stages](../README.md). Nevertheless, FAST is not a mandatory prerequisite; the solution can also be deployed independently, as long as all necessary dependencies are satisfied. - - -- [Design Overview and Choices](#design-overview-and-choices) - - [Data Platform Architecture](#data-platform-architecture) - - [Folder and Project Structure](#folder-and-project-structure) - - [Central Shared Services (Federated Governance)](#central-shared-services-federated-governance) - - [Data Domains (Domain-Driven Ownership)](#data-domains-domain-driven-ownership) - - [Data Products (DaaP)](#data-products-daap) - - [Teams and Personas](#teams-and-personas) - - [Central Data Platform Team](#central-data-platform-team) - - [Data Domain Team](#data-domain-team) - - [Data Product Team](#data-product-team) -- [How to run this stage](#how-to-run-this-stage) - - [FAST prerequisites](#fast-prerequisites) - - [Provider and Terraform variables](#provider-and-terraform-variables) - - [Variable Configuration](#variable-configuration) - - [CMEK Configuration](#cmek-configuration) - - [Data Domain and Product Data Files](#data-domain-and-product-data-files) - - [Context replacements](#context-replacements) -- [Files](#files) -- [Variables](#variables) -- [Outputs](#outputs) - - -## Design Overview and Choices - -### Data Platform Architecture - -The following diagram represent the high-level architecture of the Data Platform related projects and their associated resources managed by this stage: - -

- High level diagram. -

- -### Folder and Project Structure - -The stage manages the following three high-level logical components implemented via GCP folders and projects: - -- "Central Shared Services", a single central project e.g. `dev-dp-0`, in which Dataplex Catalog Aspect Types, Policy Tags, and Resource Manager tags a.k.a. "Secure Tags" are defined -- one or more "Data Domains", each composed of a folder e.g. `Data Domain 0` with a top-level shared project e.g. `dev-dp-domain-0` hosting shared resources such as Composer at the domain level, and an additional sub-folder for hosting data products e.g. "Data Products" -- one or more "Data Products" per domain, each composed of a project e.g. `dev-dp-product-0-a`, and related resources that are optional - -

-Folder structure. -

- -#### Central Shared Services (Federated Governance) - -Central Shared Services Project provides the standardized central capabilities to foster federated governance processes. These are implemented via established foundations that enable cross-domain data discovery, data sharing, self-service functionalities, and consistent governance. A key objective of these centrally managed services is to reduce the operational burden for data domains in producing and consuming data products, while also fostering the cross-domain collaboration necessary for the data mesh to operate efficiently. - -Core, platform-wide capabilities are delivered as shared services managed within a dedicated "Central Shared Services" project. These capabilities include: - -- [Dataplex Catalog Aspect Types](https://cloud.google.com/dataplex/docs/enrich-entries-metadata): Create a YAML file definition for each Aspect Type in the `data/aspect-types` directory. -- [Policy Tags](https://cloud.google.com/bigquery/docs/best-practices-policy-tags): Configure these via the `central_project_config.policy_tags` Terraform variable. - -Ensure the main `central_project_config` Terraform variable is configured according to your requirements. The `terraform.tfvars.sample` file provides a reference. - -#### Data Domains (Domain-Driven Ownership) - -Another foundational principle of a data mesh architecture is domain-driven ownership. A Data Domain, in this context, typically aligns with a business unit (BU) or a distinct function within an enterprise. For instance, Data Domains could represent a bank's mortgage department, or an enterprise's customer, distribution, finance, or HR departments. - -To support this ownership model and ensure clear separation, each logical Data Domain is provisioned with its own isolated GCP folder under the Data Platform parent with its collection of dedicated Google Cloud project(s). This structure establishes a distinct organizational boundary and resource separation, directly mapping to specific lines of business. - -Within each Data Domain, a corresponding Google Cloud "Data Domain" project serves as the primary container for all its specific services and resources. A dedicated Cloud Composer environment is provisioned within this project for orchestrating the domain's data workflows. To adhere to the principle of least privilege, this Composer environment operates with a dedicated IAM Service Account capable of impersonating the necessary Data Product-specific service accounts within that domain. - -Define data domains by creating individual sub-folders within the `data/data-domains` directory. Each domain's configuration, including IAM permissions, services to enable in its shared folder, and settings for its Cloud Composer instance, should be specified in a `_config.yaml` file within its respective subfolder. Refer to the - -We recommend granting data consumers access to exposed data product metadata through IAM Secure Tags created in the central project. - -```yaml -folder_config: - iam_bindings: - bigquery_metadata_viewer: - members: - - data-consumer-bi - role: roles/bigquery.metadataViewer - condition: - title: exposure - description: Expose via secure tag. - expression: resource.matchTag('exposure', 'allow') - dataplex_catalog_viewer: - members: - - data-consumer-bi - role: roles/dataplex.catalogViewer - condition: - title: exposure - description: Expose via secure tag. - expression: resource.matchTag('exposure', 'allow') -``` - -Refer to the ["domain-0"](./data/data-domains/domain-0) directory's [_config.yaml](./data/data-domains/domain-0/_config.yaml) as a starting point for setting up and configuring an example Data Domain. - -#### Data Products (DaaP) - -Each Data Product within a Data Domain (which is organized under the "Data Products" GCP Folder per domain) is encapsulated in its own dedicated Google Cloud Project. This separation is key to achieving modularity, scalability, flexibility, and distinct ownership for each product. - -For every Data Product project created, its exposure layer (e.g. specific BigQuery datasets or Cloud Storage buckets) is carefully configured and deployed. This involves assigning the relevant "Secure Tags" that were established in the central Shared Services project. Applying these tags is crucial as it allows for the implementation of precise IAM bindings based on IAM conditions, thereby ensuring fine-grained and secure data access in line with least privilege principles. - -Following a data-as-a-product approach, individual Data Product Owners are responsible for defining and deploying resources essential for data ingestion and processing (e.g., intermediate datasets, Dataproc instances etc.). The Central Data Platform Team provides a self-service platform and foundational building blocks to enable cross-domain sharing; it does not implement domain-specific resources or dictate how data products are built, including their ingestion and transformation pipelines. Reflecting this distributed ownership, each data product's infrastructure is managed in its own Terraform state. - -Within each Domain, you can define a new data product by creating a `data-product-{x}.yaml` file in the Data Domain's folder. In this YAML file, you can configure IAM permissions, services to enable, and specific resources or settings for the product's exposure layer. - -To grant data consumers access to exposed data, we recommend configuring IAM bindings within the `exposure_layer` variable in the data product's YAML configuration file. - -```yaml -exposure_layer: - bigquery: - datasets: - exposure: {} - iam: - "roles/bigquery.dataViewer": - - data-consumer-bi -``` - -Refer to the ["domain-0"](./data/data-domains/domain-0) directory's [product-0.yaml](./data/data-domains/domain-0/product-0.yaml) data product definition as a starting point for setting up and configuring an example Data Product. - -### Teams and Personas - -Effective data mesh operation relies on well-defined roles and responsibilities. Ownership is typically assigned to team archetypes, also referred to as functions. These functions represent the core user journeys of individual roles interacting with the data mesh. To clearly describe these journeys, specific user roles are defined within these functions. These user roles can be split or combined bases on specific needs and the scale of each enterprise. - -This stage provides four predefined role profiles discussed in this section, designed as initial examples that you can tailor to your needs. To simplify references to IAM principals, leverage the [context replacements](#context-replacements) logic. This involves configuring a mapping between concise short names and full group values in the `factories_config.context.iam_principals` Terraform variable. Once configured, you can use these short names to refer to the groups in your YAML files. - -|Group|Central Shared Services Project|Data Domain Folder|Data Product Project| -|-|:-:|:-:|:-:| -|Central Data Platform Team|`ADMIN`|`Log and Metrics Viewer`|`Log and Metrics Viewer`| -|Data Domain Team|`READ/USAGE`|`ADMIN`|`Log and Metrics Viewer`| -|Data Product Team|`READ/USAGE`|`READ/USAGE`|`ADMIN`| - -Please note that the above access scopes and the example configurations provided as part of this stage are for development purposes and therefore the IAM permissions and roles assigned to each team / user personas would have to be reviewed to follow least privilege principles in a production deployment. - -Refer to the [terraform.tfvars.sample](terraform.tfvars.sample), ["domain-0" _config.yaml](./data/data-domains/domain-0/_config.yaml) and [."domain-0" product-0.yaml](./data/data-domains/domain-0/product-0.yaml) files as a starting point for managing IAM. - -#### Central Data Platform Team - -This team defines the overall data platform architecture, establishes shared infrastructure, and enforces central data governance policies and standards across the data mesh. It empowers Data Producers with building blocks and best practices, ensuring high data quality, security, and trustworthiness for consumers. The primary focus is on providing the foundations for a self-serve data platform and universal governance standards for all users. The Central Data Platform team often collaborates with Data Governance functions within the enterprise. - -Typically, this group has `ADMIN` access to resources in the "Central Shared Services" project. While the team usually doesn't have access to the underlying data stored in each Data Domain and Data Product, it can access log and metrics information to monitor the data platform's health and performance. - -The team is also generally responsible for configuring IAM bindings on Data Domains and Data Products. - -#### Data Domain Team - -Aligned with specific business areas (e.g., customer, finance, distribution), this team holds clearly defined ownership of data within that domain. Key responsibilities include establishing and upholding the purpose, scope, and boundaries for data products within their domain. This is achieved through ongoing activities such as: - -- Creating and maintaining the domain-wide data product roadmap. -- Implementing robust data security measures specific to the domain. -- Ensuring adherence to all relevant compliance obligations for their data. -- Continuously monitoring the usage and performance of their data products. - -Typically, this team has `ADMIN` access to resources in their top-level shared project for the Data Domain and `READ/USAGE` access to relevant resources created in the Central Shared Services (e.g., Aspect Types). While the team usually does not have access to the underlying data stored in each individual Data Product (unless they are also the Product Owner), they can access log and metrics information to monitor the health and usage of their domain's data products and resources. This team is typically not the primary owner for configuring IAM bindings on individual data products, as this responsibility often lies with Data Product Owners or the Central Data Platform team. - -#### Data Product Team - -This team is responsible for the end-to-end lifecycle of a specific Data Product. Data Product Teams, which can be part of or work closely with a Data Domain Team, develop, operate, and maintain their assigned Data Product. Their tasks include defining the Data Product's schema and interfaces, implementing data ingestion and transformation pipelines, ensuring data quality and security for their product, managing its end-to-end lifecycle, and supporting its data consumers. - -Typically, this group has `ADMIN` access to resources within their Data Product project(s). They also usually have `READ/USAGE` access to relevant resources in the Central Shared Services project (e.g., Aspect Types) and the Data Domain's top-level shared project (e.g., Cloud Composer). This team is generally not the primary owner for configuring overarching IAM bindings, as that responsibility often lies elsewhere. - -Key responsibilities for the Data Product Team include: - -- Identifying and configuring the necessary resources within their data product project to perform ETL operations for the exposure layer. These resources should be deployed in a separate Terraform state, using the dedicated automation service account created for each data product. -- Configuring Policy Tags to protect PII and sensitive data. -- Defining and managing metadata for aspects related to tables and other resources within their data product's exposure layer. - -When using BigQuery in the exposure layer, we recommend using [authorized datasets](https://cloud.google.com/bigquery/docs/authorized-datasets). This can be achieved by configuring the exposure dataset to authorize access to the underlying dataset that hosts the curated data. - -## How to run this stage - -If this stage is deployed within a FAST-based GCP organization, we recommend executing it after foundational FAST `stage-2` components like `networking` and `security`. This is the recommended flow as specific data platform features in this stage might depend on configurations from these earlier stages. Although this stage can be run independently, instructions for such a standalone setup are beyond the scope of this document. - -### FAST prerequisites - -This stage needs specific automation resources, and permissions granted on those that allow control of selective IAM roles on specific networking and security resources. - -Network permissions are needed to associate data domain or product projects to Shared VPC hosts and grant network permissions to data platform managed service accounts. They are mandatory when deploying Composer. - -Security permissions are only needed when using CMEK encryption, to grant the relevant IAM roles to data platform service agents on the encryption keys used. - -The ["Classic FAST" dataset](../0-org-setup/README.md#classic-fast-dataset) in the bootstrap stage already contains the configuration for a development Data Platform. Adapting it to multiple environments, or for a multi-environment setup is relatively trivial and left as an exercise to the user. - -What is missing from the default dataset are IAM grants on security resources. They can be added from the security stage by populating the `stage_configs.security.iam_admin_delegated` and `stage_configs.security.iam_viewer` variables with the identities of the Data Platform service account. - -### Provider and Terraform variables - -As all other FAST stages, the [mechanism used to pass variable values and pre-built provider files from one stage to the next](../0-org-setup/README.md#output-files-and-cross-stage-variables) is also leveraged here. - -The commands to link or copy the provider and terraform variable files can be easily derived from the `fast-links.sh` script in the FAST stages folder, passing it a single argument with the local output files folder (if configured) or the GCS output bucket in the automation project (derived from stage 0 outputs). The following examples demonstrate both cases, and the resulting commands that then need to be copy/pasted and run. - -```bash -# File linking commands for Data Platform (dev) stage - -# provider file -ln -s ~/fast-config/providers/3-data-platform-dev-providers.tf ./ - -# input files from other stages -ln -s ~/fast-config/tfvars/0-globals.auto.tfvars.json ./ -ln -s ~/fast-config/tfvars/0-org-setup.auto.tfvars.json ./ - -# conventional location for this stage terraform.tfvars (manually managed) -ln -s ~/fast-config/3-data-platform-dev.auto.tfvars ./ - -# optional files -ln -s ~/fast-config/tfvars/2-networking.auto.tfvars.json ./ -ln -s ~/fast-config/tfvars/2-security.auto.tfvars.json ./ -``` - -```bash -../fast-links.sh gs://xxx-prod-iac-core-outputs-0 - -# File linking commands for Data Platform (dev) stage - -# provider file -gcloud storage cp gs://xxx-prod-iac-core-outputs-0/providers/3-data-platform-dev-providers.tf ./ - -# input files from other stages -gcloud storage cp gs://xxx-prod-iac-core-outputs-0/tfvars/0-globals.auto.tfvars.json ./ -gcloud storage cp gs://xxx-prod-iac-core-outputs-0/tfvars/0-org-setup.auto.tfvars.json ./ - -# conventional location for this stage terraform.tfvars (manually managed) -gcloud storage cp gs://xxx-prod-iac-core-outputs-0/3-data-platform-dev.auto.tfvars ./ - -# optional files -gcloud storage cp gs://xxx-prod-iac-core-outputs-0/tfvars/2-networking.auto.tfvars.json ./ -gcloud storage cp gs://xxx-prod-iac-core-outputs-0/tfvars/2-security.auto.tfvars.json ./ -``` - -### Variable Configuration - -The default data files provided as an example makes a few assumptions that needs to be matched by corresponding Terraform variables configured for the stage: - -- the `location` variable needs to be explicitly configured, as it's used as a default location for buckets, datasets, and Composer; locations can be individually overridden but a default needs to be in place -- the domain `deploy_config.composer.node_config.subnetwork` attribute needs to match the location defined above; Composer network and subnetwork use interpolation from FAST networking outputs, explicit IDs can be used instead if needed -- IAM roles for the domain and product refer to generic `dp-product-a-0` and `data-consumer-bi` groups, these need to be defined via the `factories_config.context.iam_principals` variable, or changed to explicit IAM principals (e.g. `group:foo@example.com`) - -### CMEK Configuration - -The stage can be provisioned with CMEK keys configured for composer, bigquery datasets and storage bucket by using this configuration for the `encryption_keys` variable: - -```hcl -encryption_keys = { - bigquery = { - "europe-west1" = "projects/myproject/locations/europe-west1/keyRings/dev-primary-default/cryptoKeys/bigquery" - } - composer = { - "europe-west1" = "projects/myproject/locations/europe-west1/keyRings/dev-primary-default/cryptoKeys/composer" - } - storage = { - "europe-west1" = "projects/myproject/locations/europe-west1/keyRings/dev-primary-default/cryptoKeys/storage" - } -} -``` - -### Data Domain and Product Data Files - -The formats for both types of data files are controlled via [schemas](./schemas/), which can generally be used directly in development environments to provide error checking and autocompletion. - -### Context replacements - -This stage is designed so that factory files are as much as possible organization and resource agnostic, so that they can be portable across installations (e.g. for different environments, or partner/customer organizations). - -This is mostly achieved via context replacements in factory files, where IAM principals and a few other attributes can use short names from the `factories_config.context` variable or from internally managed resources, which are then expanded to full principals at runtime. - -For example, configuring the `factories_config.context` variable: - -```hcl -factories_config = { - context = { - iam_principals = { - data-consumer-bi = "group:data-consumer-bi@example.com" - } - } -} -``` - -Allows using the group short name in templates: - -```yaml -folder_config: - iam_by_principals: - data-consumer-bi: - - roles/datacatalog.viewer - - roles/dataplex.catalogViewer - - roles/datalineage.viewer -``` - -Or within a data domain definition, service accounts can be referenced in project-level IAM via their short name: - -```yaml -service_accounts: - rw: - description: Automation (rw). -project_config: - iam: - roles/owner: - - rw -``` - -The following table lists the available substitutions. - -| resource | attributes | context expansions | -| --------------- | ----------------------- | -------------------------------------------------------------------------------------- | -| central project | IAM principals | `var.factories_config.context.iam_principals` | -| central project | tag IAM principals | `var.factories_config.context.iam_principals` | -| domain folder | IAM principals | `var.factories_config.context.iam_principals` | -| domain project | shared VPC host project | FAST VPC hosts | -| domain project | IAM principals | `var.factories_config.context.iam_principals` | -| domain sa | IAM principals | `var.factories_config.context.iam_principals`
domain service accounts | -| product project | shared VPC host project | FAST VPC hosts | -| product project | IAM principals | `var.factories_config.context.iam_principals`
product service accounts | -| product project | IAM conditions | `var.factories_config.context.iam_tag_values`
FAST tag values
exposure tag value | -| product sa | IAM principals | `var.factories_config.context.iam_principals` | -| composer | shared VPC network | FAST VPCs | -| composer | shared VPC subnetwork | FAST subnets | -| composer | encryption key | `var.factories_config.context.encryption_keys`
FAST KMS keys | -| exposed bucket | encryption key | `var.factories_config.context.encryption_keys`
FAST KMS keys | -| exposed dataset | encryption key | `var.factories_config.context.encryption_keys`
FAST KMS keys | - - - -## Files - -| name | description | modules | resources | -|---|---|---|---| -| [data-domains-automation.tf](./data-domains-automation.tf) | Data product automation resources. | gcs · iam-service-account | | -| [data-domains-composer.tf](./data-domains-composer.tf) | None | iam-service-account | google_composer_environment | -| [data-domains.tf](./data-domains.tf) | None | folder · iam-service-account · project | | -| [data-products-automation.tf](./data-products-automation.tf) | Data product automation resources. | gcs · iam-service-account | | -| [data-products-exposure.tf](./data-products-exposure.tf) | Data product exposure layer resources. | bigquery-dataset · gcs | | -| [data-products.tf](./data-products.tf) | Data product project, service account and exposed resources. | iam-service-account · project | | -| [factory.tf](./factory.tf) | None | | | -| [main.tf](./main.tf) | Locals and project-level resources. | data-catalog-policy-tag · dataplex-aspect-types · project | | -| [outputs.tf](./outputs.tf) | Stage outputs. | | google_storage_bucket_object · local_file | -| [variables-fast.tf](./variables-fast.tf) | None | | | -| [variables.tf](./variables.tf) | Module variables. | | | - -## Variables - -| name | description | type | required | default | producer | -|---|---|:---:|:---:|:---:|:---:| -| [automation](variables-fast.tf#L17) | Automation resources created by the bootstrap stage. | object({…}) | ✓ | | 0-org-setup | -| [billing_account](variables-fast.tf#L26) | Billing account id. If billing account is not part of the same org set `is_org_level` to false. | object({…}) | ✓ | | 0-org-setup | -| [environments](variables-fast.tf#L34) | Environment names. | object({…}) | ✓ | | 0-org-setup | -| [prefix](variables-fast.tf#L69) | Prefix used for resources that need unique names. Use a maximum of 9 chars for organizations, and 11 chars for tenants. | string | ✓ | | 0-org-setup | -| [aspect_types](variables.tf#L17) | Aspect templates. Merged with those defined via the factory. | map(object({…})) | | {} | | -| [central_project_config](variables.tf#L48) | Configuration for the top-level central project. | object({…}) | | {} | | -| [encryption_keys](variables.tf#L90) | Default encryption keys for services, in service => { region => key id } format. Overridable on a per-object basis. | object({…}) | | {} | | -| [exposure_config](variables.tf#L101) | Data exposure configuration. | object({…}) | | {} | | -| [factories_config](variables.tf#L119) | Configuration for the resource factories. | object({…}) | | {} | | -| [folder_ids](variables-fast.tf#L45) | Folder name => id mappings. | map(string) | | {} | 0-org-setup | -| [host_project_ids](variables-fast.tf#L53) | Shared VPC host project name => id mappings. | map(string) | | {} | 2-networking | -| [kms_keys](variables-fast.tf#L61) | KMS key ids. | map(string) | | {} | 2-security | -| [location](variables.tf#L134) | Default location used when no location is specified. | string | | "europe-west1" | | -| [outputs_location](variables.tf#L141) | Enable writing provider, tfvars and CI/CD workflow files to local filesystem. Leave null to disable. | string | | null | | -| [regions](variables-fast.tf#L79) | Region mappings. | map(string) | | {} | 2-networking | -| [secure_tags](variables.tf#L147) | Resource manager tags created in the central project. | map(object({…})) | | {} | | -| [stage_config](variables.tf#L168) | Stage configuration used to find environment and resource ids, and to generate names. | object({…}) | | {…} | | -| [subnet_self_links](variables-fast.tf#L87) | Subnet VPC name => { name => self link } mappings. | map(map(string)) | | {} | 2-networking | -| [tag_values](variables-fast.tf#L95) | FAST-managed resource manager tag values. | map(string) | | {} | 0-org-setup | -| [vpc_self_links](variables-fast.tf#L103) | Shared VPC name => self link mappings. | map(string) | | {} | 2-networking | - -## Outputs - -| name | description | sensitive | consumers | -|---|---|:---:|---| -| [aspect_types](outputs.tf#L201) | Aspect types defined in central project. | | | -| [central_project](outputs.tf#L206) | Central project attributes. | | | -| [data_domains](outputs.tf#L211) | Data domain attributes. | | | -| [policy_tags](outputs.tf#L216) | Policy tags defined in central project. | | | -| [secure_tags](outputs.tf#L221) | Secure tags defined in central project. | | | - diff --git a/fast/stages/3-data-platform-dev/data-domains-automation.tf b/fast/stages/3-data-platform-dev/data-domains-automation.tf deleted file mode 100644 index f149ed323..000000000 --- a/fast/stages/3-data-platform-dev/data-domains-automation.tf +++ /dev/null @@ -1,78 +0,0 @@ -/** - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -# tfdoc:file:description Data product automation resources. - -locals { - dd_automation = { - for k, v in local.data_domains : - k => v if v.automation != null - } - dd_automation_keys = { - for k, v in local.dd_automation : k => try( - v.automation.encryption_key, - var.encryption_keys.storage[try( - v.automation.location, - var.location - )], - null - ) - } -} - -module "dd-automation-bucket" { - source = "../../../modules/gcs" - for_each = local.dd_automation - project_id = module.dd-projects[each.key].project_id - prefix = local.prefix - name = "${each.value.short_name}-state" - location = try( - each.value.automation.location, - var.location - ) - encryption_key = local.dd_automation_keys[each.key] - iam = { - "roles/storage.admin" = [ - module.dd-automation-sa["${each.key}/rw"].iam_email - ] - "roles/storage.objectViewer" = concat( - [ - module.dd-automation-sa["${each.key}/ro"].iam_email - ], - [ - for m in each.value.automation.impersonation_principals : lookup( - var.factories_config.context.iam_principals, m, m - ) - ] - ) - } -} - -module "dd-automation-sa" { - source = "../../../modules/iam-service-account" - for_each = { for v in local.dd_automation_sa : v.key => v } - project_id = module.dd-projects[each.value.dd].project_id - prefix = each.value.prefix - name = each.value.name - description = each.value.description - iam = { - "roles/iam.serviceAccountTokenCreator" = [ - for m in each.value.impersonation_principals : lookup( - var.factories_config.context.iam_principals, m, m - ) - ] - } -} diff --git a/fast/stages/3-data-platform-dev/data-domains-composer.tf b/fast/stages/3-data-platform-dev/data-domains-composer.tf deleted file mode 100644 index 79fc675ff..000000000 --- a/fast/stages/3-data-platform-dev/data-domains-composer.tf +++ /dev/null @@ -1,119 +0,0 @@ -/** - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -locals { - dd_composer = { - for k, v in local.data_domains : k => merge( - { region = var.location, short_name = v.short_name }, - try(v.deploy_config.composer, {}) - ) if(v.deploy_config.composer != null) - } - dd_composer_keys = { - for k, v in local.dd_composer : k => try( - v.encryption_key, - var.encryption_keys.composer[v.region], - null - ) - } -} - -module "dd-composer-sa" { - source = "../../../modules/iam-service-account" - for_each = local.dd_composer - project_id = module.dd-projects[each.key].project_id - prefix = local.prefix - name = "${each.value.short_name}-cmp-sa" - description = "Composer Service Account." -} - -resource "google_composer_environment" "default" { - for_each = local.dd_composer - project = module.dd-projects-iam[each.key].project_id - name = "${var.prefix}-${each.key}" - region = each.value.region - config { - enable_private_builds_only = try(each.value.private_builds, true) - enable_private_environment = try(each.value.private_environment, true) - environment_size = try( - each.value.environment_size, - "ENVIRONMENT_SIZE_SMALL" - ) - dynamic "encryption_config" { - for_each = local.dd_composer_keys[each.key] == null ? [] : [""] - content { - kms_key_name = lookup( - local.kms_keys, - local.dd_composer_keys[each.key], - local.dd_composer_keys[each.key] - ) - } - } - # TODO: implement the same context fail mode used in the project factory - node_config { - service_account = try( - each.value.node_config.service_account, - module.dd-composer-sa[each.key].email - ) - network = try( - var.vpc_self_links[each.value.node_config.network], - each.value.node_config.network, - null - ) - subnetwork = try( - var.subnet_self_links[each.value.node_config.network][each.value.node_config.subnetwork], - each.value.node_config.subnetwork, - null - ) - } - software_config { - image_version = "composer-3-airflow-2" - cloud_data_lineage_integration { - enabled = true - } - } - workloads_config { - dag_processor { - cpu = try(each.value.workloads_config.dag_processor.cpu, 0.5) - memory_gb = try(each.value.workloads_config.dag_processor.memory_gb, 2) - storage_gb = try(each.value.workloads_config.dag_processor.storage_gb, 1) - count = try(each.value.workloads_config.dag_processor.count, 1) - } - scheduler { - cpu = try(each.value.workloads_config.scheduler.cpu, 0.5) - memory_gb = try(each.value.workloads_config.scheduler.memory_gb, 2) - storage_gb = try(each.value.workloads_config.scheduler.storage_gb, 1) - count = try(each.value.workloads_config.scheduler.count, 1) - } - triggerer { - cpu = try(each.value.workloads_config.triggerer.cpu, 0.5) - memory_gb = try(each.value.workloads_config.triggerer.memory_gb, 2) - count = try(each.value.workloads_config.triggerer.count, 1) - } - web_server { - cpu = try(each.value.workloads_config.web_server.cpu, 0.5) - memory_gb = try(each.value.workloads_config.web_server.memory_gb, 2) - storage_gb = try(each.value.workloads_config.web_server.storage_gb, 1) - } - worker { - cpu = try(each.value.workloads_config.worker.cpu, 0.5) - memory_gb = try(each.value.workloads_config.worker.memory_gb, 2) - storage_gb = try(each.value.workloads_config.worker.storage_gb, 1) - min_count = try(each.value.workloads_config.worker.min_count, 1) - max_count = try(each.value.workloads_config.worker.max_count, 1) - } - } - } -} diff --git a/fast/stages/3-data-platform-dev/data-domains.tf b/fast/stages/3-data-platform-dev/data-domains.tf deleted file mode 100644 index 4d70747f9..000000000 --- a/fast/stages/3-data-platform-dev/data-domains.tf +++ /dev/null @@ -1,263 +0,0 @@ -/** - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -locals { - dd_services = { - for k, v in local.data_domains : k => distinct(concat( - v.project_config.services, - lookup(local.dd_composer, k, null) == null ? [] : [ - "composer.googleapis.com", - "storage.googleapis.com" - ] - )) - } -} - -module "dd-folders" { - source = "../../../modules/folder" - for_each = local.data_domains - parent = var.folder_ids[var.stage_config.name] - name = each.value.name - iam = { - for k, v in each.value.folder_config.iam : k => [ - for m in v : lookup( - var.factories_config.context.iam_principals, m, m - ) - ] - } - iam_bindings = { - for k, v in each.value.folder_config.iam_bindings : k => merge(v, { - members = [ - for m in v.members : lookup( - var.factories_config.context.iam_principals, m, m - ) - ] - condition = try(v.condition, null) == null ? null : { - title = v.condition.title - description = try(v.condition.description, null) - expression = templatestring(v.condition.expression, { - tag_values = local.tag_values - }) - } - }) - } - iam_bindings_additive = { - for k, v in each.value.folder_config.iam_bindings_additive : k => merge(v, { - member = lookup( - var.factories_config.context.iam_principals, v.member, v.member - ) - condition = try(v.condition, null) == null ? null : { - title = v.condition.title - description = try(v.condition.description, null) - expression = templatestring(v.condition.expression, { - tag_values = local.tag_values - }) - } - }) - } - iam_by_principals = { - for principal, roles_list in { - for k, v in each.value.folder_config.iam_by_principals : - lookup(var.factories_config.context.iam_principals, k, k) => v... - } : - principal => flatten(roles_list) - } -} - -module "dd-dp-folders" { - source = "../../../modules/folder" - for_each = local.data_domains - parent = module.dd-folders[each.key].id - name = "Data Products" - iam = try(each.value.deploy_config.composer, null) == null ? {} : { - "roles/iam.serviceAccountTokenCreator" = [ - module.dd-composer-sa[each.key].iam_email - ] - } -} - -module "dd-projects" { - source = "../../../modules/project" - for_each = local.data_domains - billing_account = var.billing_account.id - name = "${each.value.short_name}-shared-0" - parent = module.dd-folders[each.key].id - prefix = local.prefix - labels = { - data_domain = each.key - } - services = local.dd_services[each.key] - service_encryption_key_ids = merge( - lookup(local.dd_composer, each.key, null) == null ? {} : { - "composer.googleapis.com" = compact([ - try(local.dd_composer_keys[each.key], null) == null - ? null - : lookup( - local.kms_keys, - local.dd_composer_keys[each.key], - local.dd_composer_keys[each.key] - ) - ]) - }, - lookup(local.dd_automation_keys, each.key, null) == null ? {} : { - "storage.googleapis.com" = compact([ - try(local.dd_automation_keys[each.key], null) == null - ? null - : lookup( - local.kms_keys, - local.dd_automation_keys[each.key], - local.dd_automation_keys[each.key] - ) - ]) - }, - ) -} - -module "dd-projects-iam" { - source = "../../../modules/project" - for_each = local.data_domains - name = module.dd-projects[each.key].project_id - project_reuse = { - use_data_source = false - attributes = { - name = module.dd-projects[each.key].name - number = module.dd-projects[each.key].number - services_enabled = local.dd_services[each.key] - } - } - iam = { - for k, v in each.value.project_config.iam : k => [ - for m in v : try( - var.factories_config.context.iam_principals[m], - module.dd-automation-sa["${each.key}/${m}"].iam_email, - module.dd-service-accounts["${each.key}/${m}"].iam_email, - m - ) - ] - } - iam_bindings = { - for k, v in each.value.project_config.iam_bindings : k => merge(v, { - members = [ - for m in v.members : try( - var.factories_config.context.iam_principals[m], - module.dd-automation-sa["${each.key}/${m}"].iam_email, - module.dd-service-accounts["${each.key}/${m}"].iam_email, - m - ) - ] - condition = try(v.condition, null) == null ? null : { - title = v.condition.title - description = try(v.condition.description, null) - expression = templatestring(v.condition.expression, { - tag_values = local.tag_values - }) - } - }) - } - iam_bindings_additive = merge( - { - for k, v in each.value.project_config.iam_bindings_additive : k => merge(v, { - member = try( - var.factories_config.context.iam_principals[v.member], - module.dd-automation-sa["${each.key}/${v.member}"].iam_email, - module.dd-service-accounts["${each.key}/${v.member}"].iam_email, - v.member - ) - condition = try(v.condition, null) == null ? null : { - title = v.condition.title - description = try(v.condition.description, null) - expression = templatestring(v.condition.expression, { - tag_values = local.tag_values - }) - } - }) - }, - try(each.value.deploy_config.composer, null) == null ? {} : { - composer_worker = { - member = module.dd-composer-sa[each.key].iam_email - role = "roles/composer.worker" - } - } - ) - iam_by_principals = { - for principal, roles_list in { - for k, v in each.value.project_config.iam_by_principals : - lookup(var.factories_config.context.iam_principals, k, k) => v... - } : - principal => flatten(roles_list) - } - shared_vpc_service_config = ( - each.value.project_config.shared_vpc_service_config == null - ? null - : { - host_project = lookup( - var.host_project_ids, - each.value.project_config.shared_vpc_service_config.host_project, - each.value.project_config.shared_vpc_service_config.host_project - ) - network_users = [ - for m in try(each.value.project_config.shared_vpc_service_config.network_users, []) : - try( - var.factories_config.context.iam_principals[m], - module.dd-automation-sa["${each.key}/${m}"].iam_email, - module.dd-service-accounts["${each.key}/${m}"].iam_email, - m - ) - ] - service_agent_iam = try( - each.value.project_config.shared_vpc_service_config.service_agent_iam, - {} - ) - service_iam_grants = try( - each.value.project_config.shared_vpc_service_config.service_iam_grants, - [] - ) - } - ) -} - -module "dd-service-accounts" { - source = "../../../modules/iam-service-account" - for_each = { for v in local.dd_service_accounts : v.key => v } - project_id = module.dd-projects[each.value.dd].project_id - prefix = local.prefix - name = each.value.name - description = each.value.description - iam = { - for k, v in each.value.iam : k => [ - for m in v : lookup( - var.factories_config.context.iam_principals, m, m - ) - ] - } - iam_bindings = { - for k, v in each.value.iam_bindings : k => merge(v, { - members = [ - for m in v.members : lookup( - var.factories_config.context.iam_principals, m, m - ) - ] - }) - } - iam_bindings_additive = { - for k, v in each.value.iam_bindings_additive : k => merge(v, { - member = lookup( - var.factories_config.context.iam_principals, v.member, v.member - ) - }) - } - iam_storage_roles = each.value.iam_storage_roles -} diff --git a/fast/stages/3-data-platform-dev/data-products-automation.tf b/fast/stages/3-data-platform-dev/data-products-automation.tf deleted file mode 100644 index eadf61c18..000000000 --- a/fast/stages/3-data-platform-dev/data-products-automation.tf +++ /dev/null @@ -1,78 +0,0 @@ -/** - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -# tfdoc:file:description Data product automation resources. - -locals { - dp_automation_products = { - for k, v in local.data_products : - k => v if v.automation != null - } - dp_automation_products_keys = { - for k, v in local.dp_automation_products : k => try( - v.automation.encryption_key, - var.encryption_keys.storage[try( - v.automation.location, - var.location - )], - null - ) - } -} - -module "dp-automation-bucket" { - source = "../../../modules/gcs" - for_each = local.dp_automation_products - project_id = module.dd-projects[each.value.dd].project_id - prefix = local.prefix - name = "${each.value.short_name}-state" - location = try( - each.value.automation.location, - var.location - ) - encryption_key = local.dp_automation_products_keys[each.key] - iam = { - "roles/storage.admin" = [ - module.dp-automation-sa["${each.key}/rw"].iam_email - ] - "roles/storage.objectViewer" = concat( - [ - module.dp-automation-sa["${each.key}/ro"].iam_email - ], - [ - for m in each.value.automation.impersonation_principals : lookup( - var.factories_config.context.iam_principals, m, m - ) - ] - ) - } -} - -module "dp-automation-sa" { - source = "../../../modules/iam-service-account" - for_each = { for v in local.dp_automation_sa : v.key => v } - project_id = module.dp-projects[each.value.dp].project_id - prefix = each.value.prefix - name = each.value.name - description = each.value.description - iam = { - "roles/iam.serviceAccountTokenCreator" = [ - for m in each.value.impersonation_principals : lookup( - var.factories_config.context.iam_principals, m, m - ) - ] - } -} diff --git a/fast/stages/3-data-platform-dev/data-products-exposure.tf b/fast/stages/3-data-platform-dev/data-products-exposure.tf deleted file mode 100644 index f5c2e0956..000000000 --- a/fast/stages/3-data-platform-dev/data-products-exposure.tf +++ /dev/null @@ -1,86 +0,0 @@ -/** - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -# tfdoc:file:description Data product exposure layer resources. - -module "dp-buckets" { - source = "../../../modules/gcs" - for_each = { - for v in local.dp_buckets : "${v.dp}/${v.key}" => v - } - project_id = module.dp-projects[each.value.dp].project_id - prefix = local.prefix - name = "${each.value.dps}-${each.value.short_name}-0" - location = each.value.location - encryption_key = ( - local.dp_bucket_keys[each.key] == null - ? null - : lookup( - local.kms_keys, - local.dp_bucket_keys[each.key], - local.dp_bucket_keys[each.key] - ) - ) - iam = { - for k, v in each.value.iam : k => [ - for m in v : try( - var.factories_config.context.iam_principals[m], - module.dp-automation-sa["${each.key}/${m}"].iam_email, - module.dp-service-accounts["${each.key}/${m}"].iam_email, - m - ) - ] - } - tag_bindings = { - exposure = ( - module.central-project.tag_values[var.exposure_config.tag_name].id - ) - } -} - -module "dp-datasets" { - source = "../../../modules/bigquery-dataset" - for_each = { - for v in local.dp_datasets : "${v.dp}/${v.key}" => v - } - project_id = module.dp-projects[each.value.dp].project_id - id = "${local.prefix_bq}_${each.value.dps}_${each.value.short_name}_0" - location = each.value.location - encryption_key = ( - local.dp_dataset_keys[each.key] == null - ? null - : lookup( - local.kms_keys, - local.dp_dataset_keys[each.key], - local.dp_dataset_keys[each.key] - ) - ) - iam = { - for k, v in each.value.iam : k => [ - for m in v : try( - var.factories_config.context.iam_principals[m], - module.dp-automation-sa["${each.key}/${m}"].iam_email, - module.dp-service-accounts["${each.key}/${m}"].iam_email, - m - ) - ] - } - tag_bindings = { - exposure = ( - module.central-project.tag_values[var.exposure_config.tag_name].id - ) - } -} diff --git a/fast/stages/3-data-platform-dev/data-products.tf b/fast/stages/3-data-platform-dev/data-products.tf deleted file mode 100644 index 1a2ce5c76..000000000 --- a/fast/stages/3-data-platform-dev/data-products.tf +++ /dev/null @@ -1,172 +0,0 @@ -/** - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -# tfdoc:file:description Data product project, service account and exposed resources. - -module "dp-projects" { - source = "../../../modules/project" - for_each = local.data_products - billing_account = var.billing_account.id - name = "${each.value.dds}-${each.value.short_name}-0" - parent = module.dd-dp-folders[each.value.dd].id - prefix = local.prefix - labels = { - data_domain = each.value.dd - data_product = replace(each.key, "/", "_") - } - services = each.value.services - service_encryption_key_ids = { - "bigquery.googleapis.com" = distinct([ - for k, v in local.dp_dataset_keys : - lookup(local.kms_keys, v, v) - if startswith(k, each.key) && v != null - ]) - "storage.googleapis.com" = distinct([ - for k, v in local.dp_bucket_keys : - lookup(local.kms_keys, v, v) - if startswith(k, each.key) && v != null - ]) - } -} - -module "dp-projects-iam" { - source = "../../../modules/project" - for_each = local.data_products - name = module.dp-projects[each.key].project_id - project_reuse = { - use_data_source = false - attributes = { - name = module.dp-projects[each.key].name - number = module.dp-projects[each.key].number - services_enabled = each.value.services - } - } - iam = { - for k, v in each.value.iam : k => [ - for m in v : try( - var.factories_config.context.iam_principals[m], - module.dp-automation-sa["${each.key}/${m}"].iam_email, - module.dp-service-accounts["${each.key}/${m}"].iam_email, - m - ) - ] - } - iam_bindings = { - for k, v in each.value.iam_bindings : k => merge(v, { - members = [ - for m in v.members : try( - var.factories_config.context.iam_principals[m], - module.dp-automation-sa["${each.key}/${m}"].iam_email, - module.dp-service-accounts["${each.key}/${m}"].iam_email, - m - ) - ] - condition = try(v.condition, null) == null ? null : { - title = v.condition.title - description = try(v.condition.description, null) - expression = templatestring(v.condition.expression, { - tag_values = local.tag_values - }) - } - }) - } - iam_bindings_additive = { - for k, v in each.value.iam_bindings_additive : k => merge(v, { - member = try( - var.factories_config.context.iam_principals[v.member], - module.dp-automation-sa["${each.key}/${v.member}"].iam_email, - module.dp-service-accounts["${each.key}/${v.member}"].iam_email, - v.member - ) - condition = try(v.condition, null) == null ? null : { - title = v.condition.title - description = try(v.condition.description, null) - expression = templatestring(v.condition.expression, { - tag_values = local.tag_values - }) - } - }) - } - iam_by_principals = { - for k, v in each.value.iam_by_principals : try( - var.factories_config.context.iam_principals[k], - module.dp-automation-sa["${each.key}/${k}"].iam_email, - module.dp-service-accounts["${each.key}/${k}"].iam_email, - k - ) => v - } - shared_vpc_service_config = ( - each.value.shared_vpc_service_config == null - ? null - : { - host_project = lookup( - var.host_project_ids, - each.value.shared_vpc_service_config.host_project, - each.value.shared_vpc_service_config.host_project - ) - network_users = [ - for m in try(each.value.shared_vpc_service_config.network_users, []) : - try( - var.factories_config.context.iam_principals[m], - module.dp-automation-sa["${each.key}/${m}"].iam_email, - module.dp-service-accounts["${each.key}/${m}"].iam_email, - m - ) - ] - service_agent_iam = try( - each.value.shared_vpc_service_config.service_agent_iam, - {} - ) - service_iam_grants = try( - each.value.shared_vpc_service_config.service_iam_grants, - [] - ) - } - ) -} - -module "dp-service-accounts" { - source = "../../../modules/iam-service-account" - for_each = { for v in local.dp_service_accounts : v.key => v } - project_id = module.dp-projects[each.value.dp].project_id - prefix = each.value.prefix - name = each.value.name - description = each.value.description - iam = { - for k, v in each.value.iam : k => [ - for m in v : lookup( - var.factories_config.context.iam_principals, m, m - ) - ] - } - iam_bindings = { - for k, v in each.value.iam_bindings : k => merge(v, { - members = [ - for m in v.members : lookup( - var.factories_config.context.iam_principals, m, m - ) - ] - }) - } - iam_bindings_additive = { - for k, v in each.value.iam_bindings_additive : k => merge(v, { - member = lookup( - var.factories_config.context.iam_principals, v.member, v.member - ) - }) - } - iam_storage_roles = each.value.iam_storage_roles -} diff --git a/fast/stages/3-data-platform-dev/data/aspect-types/test-0.yaml b/fast/stages/3-data-platform-dev/data/aspect-types/test-0.yaml deleted file mode 100644 index d81db5678..000000000 --- a/fast/stages/3-data-platform-dev/data/aspect-types/test-0.yaml +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright 2025 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# yaml-language-server: $schema=../../schemas/aspect-type.schema.json - -display_name: "Basic template" -metadata_template: | - { - "name": "tf-basic-template", - "type": "record", - "recordFields": [ - { - "name": "source", - "type": "string", - "annotations": { - "displayName": "Source", - "description": "Specifies the source of data." - }, - "index": 1, - "constraints": { - "required": true - } - }, - { - "name": "owner", - "type": "string", - "annotations": { - "displayName": "Owner", - "description": "Specifies the data owner." - }, - "index": 2, - "constraints": {} - } - ] - } diff --git a/fast/stages/3-data-platform-dev/data/data-domains/domain-0/_config.yaml b/fast/stages/3-data-platform-dev/data/data-domains/domain-0/_config.yaml deleted file mode 100644 index df5a0581b..000000000 --- a/fast/stages/3-data-platform-dev/data/data-domains/domain-0/_config.yaml +++ /dev/null @@ -1,90 +0,0 @@ -# Copyright 2025 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# yaml-language-server: $schema=../../../schemas/data-domain.schema.json - -name: Domain 0 -short_name: d0 - -automation: - impersonation_principals: - - dp-product-a-0 - -deploy_config: - composer: - {} - # Uncomment for VPC Network Connectivity - # region defaults to var.location - # node_config: - # network: dev-net-spoke-0 - # subnetwork: europe-west1/dev-dataplatform - -project_config: - iam: - roles/owner: - - rw - roles/viewer: - - ro - roles/composer.environmentAndStorageObjectAdmin: - - dp-product-a-0 - iam_by_principals: - dp-platform: - - roles/composer.environmentAndStorageObjectUser - - roles/monitoring.viewer - - roles/logging.viewer - dp-product-a-0: - - roles/composer.environmentAndStorageObjectAdmin - - roles/monitoring.viewer - - roles/logging.viewer - dp-domain-a: - - roles/composer.environmentAndStorageObjectAdmin - - roles/monitoring.viewer - - roles/logging.viewer - - services: - - composer.googleapis.com - - datacatalog.googleapis.com - - dataplex.googleapis.com - - datalineage.googleapis.com - # Uncomment for shared VPC Network configuration - # shared_vpc_service_config: - # host_project: dev-net-spoke-0 - # service_agent_iam: - # roles/composer.sharedVpcAgent: - # - composer - -folder_config: - iam_bindings: - bigquery_metadata_viewer: - members: - - dp-platform - - dp-domain-a - - dp-product-a-0 - - data-consumer-bi - role: roles/bigquery.metadataViewer - condition: - title: exposure - description: Expose via secure tag. - expression: resource.matchTag('exposure', 'allow') - dataplex_catalog_viewer: - members: - - dp-platform - - dp-domain-a - - dp-product-a-0 - - data-consumer-bi - role: roles/dataplex.catalogViewer - condition: - title: exposure - description: Expose via secure tag. - expression: resource.matchTag('exposure', 'allow') diff --git a/fast/stages/3-data-platform-dev/data/data-domains/domain-0/product-0.yaml b/fast/stages/3-data-platform-dev/data/data-domains/domain-0/product-0.yaml deleted file mode 100644 index 94dcc436f..000000000 --- a/fast/stages/3-data-platform-dev/data/data-domains/domain-0/product-0.yaml +++ /dev/null @@ -1,77 +0,0 @@ -# Copyright 2025 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# yaml-language-server: $schema=../../../schemas/data-product.schema.json - -short_name: p0 - -services: - - bigquery.googleapis.com - - cloudaicompanion.googleapis.com - - cloudresourcemanager.googleapis.com - - composer.googleapis.com - - datacatalog.googleapis.com - - dataplex.googleapis.com - - datalineage.googleapis.com - - storage.googleapis.com - -automation: - impersonation_principals: - - dp-product-a-0 - -exposure_layer: - bigquery: - datasets: - exposure: {} - iam: - "roles/bigquery.dataViewer": - - data-consumer-bi - storage: - buckets: - exposed: {} - iam: - "roles/storage.objectViewer": - - data-consumer-bi - "roles/storage.bucketViewer": - - data-consumer-bi - -iam_by_principals: - rw: - - roles/editor - ro: - - roles/viewer - dp-product-a-0: - - "roles/dataplex.catalogEditor" - - "roles/bigquery.dataOwner" - - "roles/bigquery.jobUser" - - "roles/datalineage.viewer" - - "roles/dataplex.dataScanCreator" - - "roles/logging.viewer" - - "roles/monitoring.viewer" - - "roles/serviceusage.serviceUsageViewer" - - "roles/storage.bucketViewer" - - "roles/storage.objectAdmin" - processing: - - "roles/bigquery.dataEditor" - - "roles/bigquery.jobUser" - - "roles/dataflow.admin" - - "roles/dataproc.editor" - - "roles/dataproc.worker" - - "roles/iam.serviceAccountUser" - - "roles/storage.bucketViewer" - - "roles/storage.objectAdmin" - -service_accounts: - processing: - description: Processing service account. diff --git a/fast/stages/3-data-platform-dev/demo/.gitignore b/fast/stages/3-data-platform-dev/demo/.gitignore deleted file mode 100644 index c6077b91e..000000000 --- a/fast/stages/3-data-platform-dev/demo/.gitignore +++ /dev/null @@ -1 +0,0 @@ -composer/variables.json diff --git a/fast/stages/3-data-platform-dev/demo/README.md b/fast/stages/3-data-platform-dev/demo/README.md deleted file mode 100644 index 297f6f785..000000000 --- a/fast/stages/3-data-platform-dev/demo/README.md +++ /dev/null @@ -1,190 +0,0 @@ -# Data Product Reference Example - -This folder contains a reference implementation of a Data Product showcasing the complete lifecycle from raw data ingestion to curated analytics-ready datasets. The example demonstrates how to create Data Products within the [Data Platform stage](../README.md) of Fabric FAST. It utilizes the automation service account and shared services created by the Data Platform stage. - -Our example consists of a batch ELT pipeline that processes and joins individual CSV data files from Cloud Storage to BigQuery using the publicly available theLook eCommerce dataset: - -## Components - -This reference implementation includes: - -- **Infrastructure as Code**: Terraform modules for deploying GCP resources -- **Data Schemas**: BigQuery table schemas in JSON format for structured data validation -- **Orchestration**: Cloud Composer (Apache Airflow) DAGs for automated pipeline execution -- **Sample Data**: Utility script to download theLook eCommerce reference tables - -## Getting Started - -### Prerequisites - -- Google Cloud SDK installed and configured -- Terraform >= 1.9.0 -- `jq` command-line JSON processor -- Access to the automation service account from the previous stage - -Ensure that you are authenticated with the `gcloud` CLI using the user that has the relevant access to -both the Domain Shared Resources as well as the Data Product GCP projects: - -```bash -gcloud auth login -gcloud auth application-default login -``` - -### 1. Infrastructure Setup - -**1. Configure Terraform Variables** - - ```bash - cp terraform.tfvars.sample terraform.tfvars - # Edit terraform.tfvars with your specific values - ``` - -**2. Deploy Infrastructure** - - ```bash - terraform init - terraform apply - ``` - -### 2. Data Pipeline Setup - -**1. Set Environment Variables** - - ```bash - export LANDING_BUCKET=$(terraform output -raw landing_gcs_bucket) - export COMPOSER_PROJECT_ID=$(terraform output -raw composer_project_id) - export COMPOSER_ENV_NAME=$(terraform output -raw composer_environment_name) - export LOCATION=$(terraform output -raw location) - ``` - -**2. Deploy Data Schemas** - - ```bash - gcloud storage cp -r data/schemas/* gs://$LANDING_BUCKET/schemas - ``` - -**3. Source Sample Data** - - ```bash - ./data/get_thelook_data.sh gs://$LANDING_BUCKET - ``` - -**4. Configure Composer Environment** - - Update Composer environment variables from `composer/variables.json`: - - > **Note**: This step may take several minutes to complete. - - ```bash - # Copy Airflow JSON variable file into Composer data folder - gcloud composer environments storage data import \ - --project $COMPOSER_PROJECT_ID \ - --environment=$COMPOSER_ENV_NAME \ - --location $LOCATION \ - --source="composer/variables.json" - - # Import Airflow variables - gcloud composer environments run $COMPOSER_ENV_NAME \ - --project $COMPOSER_PROJECT_ID \ - --location $LOCATION \ - variables \ - -- import /home/airflow/gcs/data/variables.json - ``` - -**5. Deploy Airflow DAGs** - - ```bash - gcloud composer environments storage dags import \ - --project=$COMPOSER_PROJECT_ID \ - --environment=$COMPOSER_ENV_NAME \ - --location=$LOCATION \ - --source="composer/DAG-dp0" - ``` - - > **Note**: It may take several minutes for the DAGs to be parsed and become available in Composer. - -### 3. Pipeline Execution - -**1. Verify DAG Import** - - Navigate to the Composer UI in the Domain Shared Resources project and confirm that the DAGs have been successfully imported. - -**2. Execute Pipeline** - - Trigger the DAGs in the following sequence (wait for each to complete): - - 1. **`gcs2bq_table_create`** - Creates BigQuery tables with proper schemas - 2. **`gcs2bq_table_elt`** - Executes the ELT pipeline to process data - -## Architecture Overview - -The data product implements a three-tier architecture: - -

- High level diagram. -

- -Curated data will be made accessible through authorized views within the `exposure` dataset. - -### Data Storage Layers - -- **Landing Zone** (`{prefix}-land-cs-0`): Raw CSV files stored in Cloud Storage -- **Raw Layer** (`{prefix}_lnd_bq_0`): Raw data loaded into BigQuery for processing -- **Curated Layer** (`{prefix}_cur_bq_0`): Processed, analytics-ready datasets - -## Troubleshooting - -### Common Issues - -- **DAG Import Failures**: Ensure the Composer environment is fully initialized before importing DAGs -- **Permission Errors**: Verify that the user that you authenticated with via the `gcloud` CLI has the relevant permissions -- **Variable Configuration**: Double-check that `terraform.tfvars` is properly configured - -### Useful Commands - -```bash -# Check Terraform outputs -terraform output - -# Verify bucket contents -gcloud storage ls gs://$LANDING_BUCKET --recursive - -# Check Composer environment status -gcloud composer environments describe $COMPOSER_ENV_NAME \ - --project $COMPOSER_PROJECT_ID \ - --location $LOCATION -``` - - - -## Files - -| name | description | modules | resources | -|---|---|---|---| -| [main.tf](./main.tf) | Module-level locals and resources. | bigquery-dataset · gcs | | -| [outputs.tf](./outputs.tf) | Module outputs. | | local_file | -| [variables.tf](./variables.tf) | Module variables. | | | - -## Variables - -| name | description | type | required | default | producer | -|---|---|:---:|:---:|:---:|:---:| -| [authorized_dataset_on_curated](variables.tf#L16) | Authorized Dataset. | string | ✓ | | | -| [composer_config](variables.tf#L21) | Composer environment configuration. | object({…}) | ✓ | | | -| [dp_processing_service_account](variables.tf#L30) | Service account for data processing via Composer impersonation. | string | ✓ | | | -| [impersonate_service_account](variables.tf#L47) | Service account to impersonate for Google Cloud providers. | string | ✓ | | | -| [prefix](variables.tf#L60) | Prefix used for resources that need unique names. Use a maximum of 9 chars for organizations, and 11 chars for tenants. | string | ✓ | | | -| [project_id](variables.tf#L69) | Project ID to deploy resources. | string | ✓ | | | -| [encryption_keys](variables.tf#L36) | Default encryption keys for services, in service => { region => key id } format. Overridable on a per-object basis. | object({…}) | | {} | | -| [location](variables.tf#L53) | Default location used when no location is specified. | string | | "europe-west8" | | - -## Outputs - -| name | description | sensitive | consumers | -|---|---|:---:|---| -| [composer_environment_name](outputs.tf#L17) | The name of the Composer environment. | | | -| [composer_project_id](outputs.tf#L22) | The project ID where the Composer environment is located. | | | -| [dp_processing_service_account](outputs.tf#L27) | Service account for data processing. | | | -| [landing_gcs_bucket](outputs.tf#L32) | The name of the landing GCS bucket. | | | -| [location](outputs.tf#L37) | The location/region used for resources. | | | - diff --git a/fast/stages/3-data-platform-dev/demo/composer/DAG-dp0/gcs2bq_elt.py b/fast/stages/3-data-platform-dev/demo/composer/DAG-dp0/gcs2bq_elt.py deleted file mode 100644 index c80663ace..000000000 --- a/fast/stages/3-data-platform-dev/demo/composer/DAG-dp0/gcs2bq_elt.py +++ /dev/null @@ -1,308 +0,0 @@ -# Copyright 2025 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -""" -BigQuery ELT Pipeline DAG - -This DAG implements a comprehensive customer purchases ELT pipeline that: -1. Loads data from GCS to BigQuery landing tables (users, orders, order_items, products) -2. Performs a 4-table join to create a comprehensive customer_purchases table -3. Creates an exposure view for analytics consumption - -Dependencies: Requires gcs2bq_table_create DAG to complete first -""" - -import datetime -import logging -import os - -from airflow import models -from airflow.decorators import task -from airflow.models import Variable -from airflow.operators import empty -from airflow.providers.google.cloud.hooks.bigquery import BigQueryHook -from airflow.providers.google.cloud.operators.bigquery import ( - BigQueryInsertJobOperator,) -from airflow.providers.google.cloud.sensors.bigquery import ( - BigQueryTableExistenceSensor,) -from airflow.providers.google.cloud.transfers.gcs_to_bigquery import ( - GCSToBigQueryOperator,) -from airflow.utils.task_group import TaskGroup - -# Configuration -LANDING_TABLES = ["users", "orders", "order_items", "products"] - -# Environment variables (set from composer/variables.json) -DP_PROJECT = Variable.get("DP_PROJECT") -LAND_BQ_DATASET = Variable.get("LAND_BQ_DATASET") -CURATED_BQ_DATASET = Variable.get("CURATED_BQ_DATASET") -LAND_GCS = Variable.get("LAND_GCS") -DP_PROCESSING_SERVICE_ACCOUNT = Variable.get("DP_PROCESSING_SERVICE_ACCOUNT") -LOCATION = Variable.get("LOCATION") - -# Validate required environment variables -required_vars = { - "DP_PROJECT": DP_PROJECT, - "LAND_BQ_DATASET": LAND_BQ_DATASET, - "CURATED_BQ_DATASET": CURATED_BQ_DATASET, - "LAND_GCS": LAND_GCS, - "DP_PROCESSING_SERVICE_ACCOUNT": DP_PROCESSING_SERVICE_ACCOUNT, - "LOCATION": LOCATION, -} - -missing_vars = [var for var, value in required_vars.items() if not value] -if missing_vars: - raise ValueError(f"Missing required environment variables: {missing_vars}") - -logger = logging.getLogger(__name__) - - -def create_gcs_to_bq_task(table_name: str) -> GCSToBigQueryOperator: - """ - Factory function to create GCS to BigQuery load tasks. - - Args: - table_name: Name of the table to load - - Returns: - GCSToBigQueryOperator instance - """ - return GCSToBigQueryOperator( - task_id=f"{table_name}_load", - bucket=LAND_GCS, - source_objects=f"data/{table_name}/{table_name}_*.csv", - destination_project_dataset_table= - f"{DP_PROJECT}.{LAND_BQ_DATASET}.{table_name}", - source_format="CSV", - create_disposition="CREATE_IF_NEEDED", - write_disposition="WRITE_TRUNCATE", - schema_object=f"schemas/landing/{table_name}.json", - schema_object_bucket=LAND_GCS, - autodetect=False, - max_bad_records=1, - project_id=DP_PROJECT, - impersonation_chain=[DP_PROCESSING_SERVICE_ACCOUNT], - ) - - -def create_table_validation_task( - table_name: str, dataset_name: str, - task_prefix: str = "validate") -> BigQueryTableExistenceSensor: - """ - Factory function to create table validation tasks using sensor. - - Args: - table_name: Name of the table to validate - dataset_name: Name of the dataset - task_prefix: Prefix for task ID - - Returns: - BigQueryTableExistenceSensor instance - """ - return BigQueryTableExistenceSensor( - task_id=f"{task_prefix}_{table_name}_exists", - project_id=DP_PROJECT, - dataset_id=dataset_name, - table_id=table_name, - poke_interval=30, # Check every 30 seconds - timeout=600, # Timeout after 10 minutes - mode="reschedule", # Release worker slot between checks - impersonation_chain=[DP_PROCESSING_SERVICE_ACCOUNT], - ) - - -# DAG Definition -yesterday = datetime.datetime.now() - datetime.timedelta(days=1) - -default_args = { - "owner": "data-platform-team", - "start_date": yesterday, - "depends_on_past": False, - "email": Variable.get("alert_email_list", default_var="").split(","), - "email_on_failure": True, - "email_on_retry": False, - "retries": 2, - "retry_delay": datetime.timedelta(minutes=5), - "sla": datetime.timedelta(hours=2), -} - -with models.DAG( - "gcs2bq_elt", - default_args=default_args, - schedule_interval=None, - catchup=False, - max_active_runs=1, - tags=["bigquery", "elt", "data-platform", "customer-purchases"], - doc_md=__doc__, - dagrun_timeout=datetime.timedelta(hours=3), -) as dag: - # Start and end markers - start = empty.EmptyOperator(task_id="start", trigger_rule="all_success") - end = empty.EmptyOperator(task_id="end", trigger_rule="all_done") - - # Validate that all required tables exist before starting data load - with TaskGroup( - "validate_prerequisites", - tooltip="Validate all landing tables exist before data load", - ) as prerequisites_group: - prerequisite_validations = [ - create_table_validation_task( - table_name=table, - dataset_name=LAND_BQ_DATASET, - task_prefix="validate_landing", - ) for table in LANDING_TABLES - ] - # Validate that the curated customer_purchases table exists from a previous run - validate_customer_purchases_prereq = create_table_validation_task( - table_name="customer_purchases", - dataset_name=CURATED_BQ_DATASET, - task_prefix="validate_curated", - ) - - # Load data from GCS to BigQuery landing tables - with TaskGroup("load_landing_data", - tooltip="Load all data files to landing tables") as load_group: - load_tasks = [ - create_gcs_to_bq_task(table_name=table) for table in LANDING_TABLES - ] - - # Create comprehensive customer purchases join - customer_purchases_join = BigQueryInsertJobOperator( - task_id="create_customer_purchases", - project_id=DP_PROJECT, - configuration={ - "jobType": "QUERY", - "query": { - "query": - f""" - SELECT - -- User information - u.id as user_id, - u.first_name, - u.last_name, - u.email, - u.age, - u.gender, - u.state, - u.street_address, - u.postal_code, - u.city, - u.country, - u.latitude, - u.longitude, - u.traffic_source, - u.created_at as user_created_at, - u.user_geom, - - -- Order information - o.order_id, - o.status as order_status, - o.created_at as order_created_at, - o.returned_at as order_returned_at, - o.shipped_at as order_shipped_at, - o.delivered_at as order_delivered_at, - o.num_of_item, - - -- Order item information - oi.id as order_item_id, - oi.product_id, - oi.inventory_item_id, - oi.status as order_item_status, - oi.sale_price, - oi.created_at as order_item_created_at, - oi.shipped_at as order_item_shipped_at, - oi.delivered_at as order_item_delivered_at, - oi.returned_at as order_item_returned_at, - - -- Product information - p.cost, - p.category, - p.name, - p.brand, - p.retail_price, - p.department, - p.sku, - p.distribution_center_id - - FROM `{DP_PROJECT}.{LAND_BQ_DATASET}.users` u - JOIN `{DP_PROJECT}.{LAND_BQ_DATASET}.orders` o - ON u.id = o.user_id - JOIN `{DP_PROJECT}.{LAND_BQ_DATASET}.order_items` oi - ON o.order_id = oi.order_id - JOIN `{DP_PROJECT}.{LAND_BQ_DATASET}.products` p - ON oi.product_id = p.id - """, - "destinationTable": { - "projectId": DP_PROJECT, - "datasetId": CURATED_BQ_DATASET, - "tableId": "customer_purchases", - }, - "writeDisposition": - "WRITE_TRUNCATE", - "useLegacySql": - False, - }, - }, - impersonation_chain=[DP_PROCESSING_SERVICE_ACCOUNT], - ) - - @task(task_id="validate_customer_purchases_data") - def validate_customer_purchases_data_python(): - """ - Checks if the customer_purchases table has data using BigQueryHook - for robust cross-project execution. - """ - project_id = DP_PROJECT - dataset_id = CURATED_BQ_DATASET - table_id = "customer_purchases" - impersonation_account = DP_PROCESSING_SERVICE_ACCOUNT - - logging.info( - f"Executing data validation check on table: {project_id}.{dataset_id}.{table_id}" - ) - - # The hook will use the impersonation chain for all interactions - hook = BigQueryHook( - gcp_conn_id="google_cloud_default", # Assumes default connection - impersonation_chain=[impersonation_account], - location=LOCATION, - ) - - sql = f"SELECT COUNT(*) FROM `{project_id}.{dataset_id}.{table_id}`" - - # Use insert_job for cross-project execution with explicit project_id - job_config = {"query": {"query": sql, "useLegacySql": False}} - - job = hook.insert_job(configuration=job_config, project_id=project_id) - - # Extract results from the completed job - results = job.result() - records = [list(row) for row in results] - - if not records or not records[0] or records[0][0] == 0: - raise ValueError( - f"Data quality check failed: Table {project_id}.{dataset_id}.{table_id} is empty or has no rows." - ) - else: - row_count = records[0][0] - logging.info( - f"Data quality check passed: Table {project_id}.{dataset_id}.{table_id} contains {row_count} rows." - ) - - validate_customer_purchases_data = validate_customer_purchases_data_python() - - # Define dependencies - start >> prerequisites_group - prerequisites_group >> load_group - load_group >> customer_purchases_join - customer_purchases_join >> validate_customer_purchases_data >> end diff --git a/fast/stages/3-data-platform-dev/demo/composer/DAG-dp0/gcs2bq_table_create.py b/fast/stages/3-data-platform-dev/demo/composer/DAG-dp0/gcs2bq_table_create.py deleted file mode 100644 index 1d0aacf60..000000000 --- a/fast/stages/3-data-platform-dev/demo/composer/DAG-dp0/gcs2bq_table_create.py +++ /dev/null @@ -1,224 +0,0 @@ -# Copyright 2025 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -""" -BigQuery Table Creation DAG - -This DAG creates BigQuery tables based on configuration stored in GCS. -It creates landing tables, curated tables, and an exposure view. -""" - -import datetime -import logging -import os - -from airflow import models -from airflow.models import Variable -from airflow.operators import empty -from airflow.providers.google.cloud.operators.bigquery import ( - BigQueryCreateTableOperator,) -from airflow.providers.google.cloud.sensors.bigquery import ( - BigQueryTableExistenceSensor,) -from airflow.utils.task_group import TaskGroup - -# Configuration -LANDING_TABLES = ["users", "orders", "order_items", "products"] -CURATED_TABLES = ["customer_purchases"] - -# Environment variables (set from Composer variables.json) -DP_PROJECT = Variable.get("DP_PROJECT") -LAND_BQ_DATASET = Variable.get("LAND_BQ_DATASET") -CURATED_BQ_DATASET = Variable.get("CURATED_BQ_DATASET") -EXPOSURE_BQ_DATASET = Variable.get("EXPOSURE_BQ_DATASET") -LAND_GCS = Variable.get("LAND_GCS") -DP_PROCESSING_SERVICE_ACCOUNT = Variable.get("DP_PROCESSING_SERVICE_ACCOUNT") - -# Validate required environment variables -required_vars = { - "DP_PROJECT": DP_PROJECT, - "LAND_BQ_DATASET": LAND_BQ_DATASET, - "CURATED_BQ_DATASET": CURATED_BQ_DATASET, - "EXPOSURE_BQ_DATASET": EXPOSURE_BQ_DATASET, - "LAND_GCS": LAND_GCS, - "DP_PROCESSING_SERVICE_ACCOUNT": DP_PROCESSING_SERVICE_ACCOUNT, -} - -missing_vars = [var for var, value in required_vars.items() if not value] -if missing_vars: - raise ValueError(f"Missing required environment variables: {missing_vars}") - -logger = logging.getLogger(__name__) - - -def create_bq_table_task(table_name: str, dataset_name: str, schema_path: str, - task_prefix: str = "") -> BigQueryCreateTableOperator: - """ - Factory function to create BigQuery table tasks. - - Args: - table_name: Name of the table to create - dataset_name: Name of the dataset - schema_path: Path to schema files in GCS - task_prefix: Prefix for task ID - - Returns: - BigQueryCreateTableOperator instance - """ - task_id = (f"{task_prefix}_{table_name}_create" - if task_prefix else f"{table_name}_create") - - return BigQueryCreateTableOperator( - task_id=task_id, - project_id=DP_PROJECT, - dataset_id=dataset_name, - table_id=table_name, - table_resource={}, - if_exists="log", - gcs_schema_object=f"gs://{LAND_GCS}/{schema_path}/{table_name}.json", - impersonation_chain=[DP_PROCESSING_SERVICE_ACCOUNT], - ) - - -def create_table_validation_task( - table_name: str, dataset_name: str, - task_prefix: str = "validate") -> BigQueryTableExistenceSensor: - """ - Factory function to create table validation tasks using sensor. - - Args: - table_name: Name of the table to validate - dataset_name: Name of the dataset - task_prefix: Prefix for task ID - - Returns: - BigQueryTableExistenceSensor instance - """ - return BigQueryTableExistenceSensor( - task_id=f"{task_prefix}_{table_name}_exists", - project_id=DP_PROJECT, - dataset_id=dataset_name, - table_id=table_name, - poke_interval=30, # Check every 30 seconds - timeout=600, # Timeout after 10 minutes - mode="reschedule", # Release worker slot between checks - impersonation_chain=[DP_PROCESSING_SERVICE_ACCOUNT], - ) - - -# DAG Definition -yesterday = datetime.datetime.now() - datetime.timedelta(days=1) - -default_args = { - "owner": "data-platform-team", - "start_date": yesterday, - "depends_on_past": False, - "email": Variable.get("alert_email_list", default_var="").split(","), - "email_on_failure": True, - "email_on_retry": False, - "retries": 2, - "retry_delay": datetime.timedelta(minutes=5), - "sla": datetime.timedelta(hours=1), -} - -with models.DAG( - "gcs2bq_table_create", - default_args=default_args, - schedule_interval=None, - catchup=False, - max_active_runs=1, - tags=["bigquery", "table-creation", "data-platform"], - doc_md=__doc__, - dagrun_timeout=datetime.timedelta(hours=2), -) as dag: - # Start and end markers - start = empty.EmptyOperator(task_id="start", trigger_rule="all_success") - end = empty.EmptyOperator(task_id="end", trigger_rule="all_done") - - # Create landing tables - with TaskGroup("create_landing_tables", - tooltip="Create all landing layer tables") as landing_group: - landing_tasks = [] - for table in LANDING_TABLES: - task = create_bq_table_task( - table_name=table, - dataset_name=LAND_BQ_DATASET, - schema_path="schemas/landing", - task_prefix="land", - ) - landing_tasks.append(task) - - # Create curated tables - with TaskGroup("create_curated_tables", - tooltip="Create all curated layer tables") as curated_group: - curated_tasks = [] - for table in CURATED_TABLES: - task = create_bq_table_task( - table_name=table, - dataset_name=CURATED_BQ_DATASET, - schema_path="schemas/curated", - task_prefix="curated", - ) - curated_tasks.append(task) - - # Validate all tables exist - with TaskGroup( - "validate_tables", - tooltip="Validate all tables were created") as validation_group: - # Create validation tasks for landing tables - landing_validations = [ - create_table_validation_task( - table_name=table, - dataset_name=LAND_BQ_DATASET, - task_prefix="validate_landing", - ) for table in LANDING_TABLES - ] - - # Create validation tasks for curated tables - curated_validations = [ - create_table_validation_task( - table_name=table, - dataset_name=CURATED_BQ_DATASET, - task_prefix="validate_curated", - ) for table in CURATED_TABLES - ] - - # Create exposure view - exposure_view = BigQueryCreateTableOperator( - task_id="exposure_view_create", - project_id=DP_PROJECT, - dataset_id=EXPOSURE_BQ_DATASET, - table_id="customer_purchases", - table_resource={ - "view": { - "query": - f"SELECT * FROM `{DP_PROJECT}.{CURATED_BQ_DATASET}.customer_purchases`", - "useLegacySql": - False, - }, - }, - if_exists="log", - impersonation_chain=[DP_PROCESSING_SERVICE_ACCOUNT], - ) - - # Validate exposure view exists - validate_exposure_view = create_table_validation_task( - table_name="customer_purchases", - dataset_name=EXPOSURE_BQ_DATASET, - task_prefix="validate_exposure", - ) - - # Define dependencies - start >> [landing_group, curated_group] - [landing_group, curated_group] >> validation_group - validation_group >> exposure_view - exposure_view >> validate_exposure_view >> end diff --git a/fast/stages/3-data-platform-dev/demo/composer/variables.tf.tpl b/fast/stages/3-data-platform-dev/demo/composer/variables.tf.tpl deleted file mode 100644 index 46ef77b90..000000000 --- a/fast/stages/3-data-platform-dev/demo/composer/variables.tf.tpl +++ /dev/null @@ -1,9 +0,0 @@ -{ - "DP_PROJECT": "${dp_project}", - "LOCATION": "${location}", - "DP_PROCESSING_SERVICE_ACCOUNT": "${dp_processing_service_account}", - "LAND_GCS": "${land_gcs}", - "LAND_BQ_DATASET": "${land_bq_dataset}", - "CURATED_BQ_DATASET": "${curated_bq_dataset}", - "EXPOSURE_BQ_DATASET": "${exposure_bq_dataset}" -} diff --git a/fast/stages/3-data-platform-dev/demo/data/get_thelook_data.sh b/fast/stages/3-data-platform-dev/demo/data/get_thelook_data.sh deleted file mode 100755 index b16c83c49..000000000 --- a/fast/stages/3-data-platform-dev/demo/data/get_thelook_data.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/bash -# Copyright 2025 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Script to export data from BigQuery public dataset to GCS bucket -# Usage: ./export_bigquery_data.sh gs://your-bucket-name - -set -e # Exit on error - -# Check if argument is provided -if [ $# -eq 0 ]; then - echo "Error: No GCS bucket provided" - echo "Usage: $0 gs://your-bucket-name" - exit 1 -fi - -GCS_BUCKET=$1 - -# Validate that the bucket starts with gs:// -if [[ ! "$GCS_BUCKET" =~ ^gs:// ]]; then - echo "Error: GCS bucket must start with gs://" - echo "Example: gs://your-bucket-name" - exit 1 -fi - -# Check if bq command is available -if ! command -v bq &>/dev/null; then - echo "Error: bq command not found. Please install Google Cloud SDK." - exit 1 -fi - -# Remove trailing slash if present -GCS_BUCKET=${GCS_BUCKET%/} - -# Source project and dataset -SOURCE_PROJECT="bigquery-public-data" -SOURCE_DATASET="thelook_ecommerce" - -# Tables to export -TABLES=("users" "orders" "order_items" "products") - -echo "Starting export from ${SOURCE_PROJECT}.${SOURCE_DATASET} to $GCS_BUCKET" -echo "================================================" - -# Export each table -for table in "${TABLES[@]}"; do - echo -n "Exporting $table..." - - # Create destination path - DESTINATION="${GCS_BUCKET}/data/${table}/${table}_*.csv" - - # Execute bq extract command - if bq extract \ - --destination_format CSV \ - --field_delimiter=',' \ - --print_header=true \ - "bigquery-public-data:thelook_ecommerce.${table}" \ - "${DESTINATION}"; then - echo " SUCCESS" - else - echo " FAILED" - echo "Error: Failed to export $table" - exit 1 - fi -done - -echo "================================================" -echo "All tables exported successfully!" -echo "" -echo "Exported tables:" -for table in "${TABLES[@]}"; do - echo " - ${GCS_BUCKET}/data/${table}/" -done diff --git a/fast/stages/3-data-platform-dev/demo/data/schemas/curated/customer_purchases.json b/fast/stages/3-data-platform-dev/demo/data/schemas/curated/customer_purchases.json deleted file mode 100644 index bcaa28a6c..000000000 --- a/fast/stages/3-data-platform-dev/demo/data/schemas/curated/customer_purchases.json +++ /dev/null @@ -1,201 +0,0 @@ -[ - { - "mode": "NULLABLE", - "name": "user_id", - "type": "INTEGER" - }, - { - "mode": "NULLABLE", - "name": "first_name", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "last_name", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "email", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "age", - "type": "INTEGER" - }, - { - "mode": "NULLABLE", - "name": "gender", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "state", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "street_address", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "postal_code", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "city", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "country", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "latitude", - "type": "FLOAT" - }, - { - "mode": "NULLABLE", - "name": "longitude", - "type": "FLOAT" - }, - { - "mode": "NULLABLE", - "name": "traffic_source", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "user_created_at", - "type": "TIMESTAMP" - }, - { - "name": "user_geom", - "type": "GEOGRAPHY" - }, - { - "mode": "NULLABLE", - "name": "order_id", - "type": "INTEGER" - }, - { - "mode": "NULLABLE", - "name": "order_status", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "order_created_at", - "type": "TIMESTAMP" - }, - { - "mode": "NULLABLE", - "name": "order_returned_at", - "type": "TIMESTAMP" - }, - { - "mode": "NULLABLE", - "name": "order_shipped_at", - "type": "TIMESTAMP" - }, - { - "mode": "NULLABLE", - "name": "order_delivered_at", - "type": "TIMESTAMP" - }, - { - "mode": "NULLABLE", - "name": "num_of_item", - "type": "INTEGER" - }, - { - "mode": "NULLABLE", - "name": "order_item_id", - "type": "INTEGER" - }, - { - "mode": "NULLABLE", - "name": "product_id", - "type": "INTEGER" - }, - { - "mode": "NULLABLE", - "name": "inventory_item_id", - "type": "INTEGER" - }, - { - "mode": "NULLABLE", - "name": "order_item_status", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "order_item_created_at", - "type": "TIMESTAMP" - }, - { - "mode": "NULLABLE", - "name": "order_item_shipped_at", - "type": "TIMESTAMP" - }, - { - "mode": "NULLABLE", - "name": "order_item_delivered_at", - "type": "TIMESTAMP" - }, - { - "mode": "NULLABLE", - "name": "order_item_returned_at", - "type": "TIMESTAMP" - }, - { - "mode": "NULLABLE", - "name": "sale_price", - "type": "FLOAT" - }, - { - "mode": "NULLABLE", - "name": "cost", - "type": "FLOAT" - }, - { - "mode": "NULLABLE", - "name": "category", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "name", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "brand", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "retail_price", - "type": "FLOAT" - }, - { - "mode": "NULLABLE", - "name": "department", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "sku", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "distribution_center_id", - "type": "INTEGER" - } -] diff --git a/fast/stages/3-data-platform-dev/demo/data/schemas/landing/order_items.json b/fast/stages/3-data-platform-dev/demo/data/schemas/landing/order_items.json deleted file mode 100644 index 9b0d6829a..000000000 --- a/fast/stages/3-data-platform-dev/demo/data/schemas/landing/order_items.json +++ /dev/null @@ -1,57 +0,0 @@ -[ - { - "mode": "NULLABLE", - "name": "id", - "type": "INTEGER" - }, - { - "mode": "NULLABLE", - "name": "order_id", - "type": "INTEGER" - }, - { - "mode": "NULLABLE", - "name": "user_id", - "type": "INTEGER" - }, - { - "mode": "NULLABLE", - "name": "product_id", - "type": "INTEGER" - }, - { - "mode": "NULLABLE", - "name": "inventory_item_id", - "type": "INTEGER" - }, - { - "mode": "NULLABLE", - "name": "status", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "created_at", - "type": "TIMESTAMP" - }, - { - "mode": "NULLABLE", - "name": "shipped_at", - "type": "TIMESTAMP" - }, - { - "mode": "NULLABLE", - "name": "delivered_at", - "type": "TIMESTAMP" - }, - { - "mode": "NULLABLE", - "name": "returned_at", - "type": "TIMESTAMP" - }, - { - "mode": "NULLABLE", - "name": "sale_price", - "type": "FLOAT" - } -] diff --git a/fast/stages/3-data-platform-dev/demo/data/schemas/landing/orders.json b/fast/stages/3-data-platform-dev/demo/data/schemas/landing/orders.json deleted file mode 100644 index bb872ca55..000000000 --- a/fast/stages/3-data-platform-dev/demo/data/schemas/landing/orders.json +++ /dev/null @@ -1,47 +0,0 @@ -[ - { - "mode": "NULLABLE", - "name": "order_id", - "type": "INTEGER" - }, - { - "mode": "NULLABLE", - "name": "user_id", - "type": "INTEGER" - }, - { - "mode": "NULLABLE", - "name": "status", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "gender", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "created_at", - "type": "TIMESTAMP" - }, - { - "mode": "NULLABLE", - "name": "returned_at", - "type": "TIMESTAMP" - }, - { - "mode": "NULLABLE", - "name": "shipped_at", - "type": "TIMESTAMP" - }, - { - "mode": "NULLABLE", - "name": "delivered_at", - "type": "TIMESTAMP" - }, - { - "mode": "NULLABLE", - "name": "num_of_item", - "type": "INTEGER" - } -] diff --git a/fast/stages/3-data-platform-dev/demo/data/schemas/landing/products.json b/fast/stages/3-data-platform-dev/demo/data/schemas/landing/products.json deleted file mode 100644 index da9182209..000000000 --- a/fast/stages/3-data-platform-dev/demo/data/schemas/landing/products.json +++ /dev/null @@ -1,47 +0,0 @@ -[ - { - "mode": "NULLABLE", - "name": "id", - "type": "INTEGER" - }, - { - "mode": "NULLABLE", - "name": "cost", - "type": "FLOAT" - }, - { - "mode": "NULLABLE", - "name": "category", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "name", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "brand", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "retail_price", - "type": "FLOAT" - }, - { - "mode": "NULLABLE", - "name": "department", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "sku", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "distribution_center_id", - "type": "INTEGER" - } -] diff --git a/fast/stages/3-data-platform-dev/demo/data/schemas/landing/users.json b/fast/stages/3-data-platform-dev/demo/data/schemas/landing/users.json deleted file mode 100644 index d4a86c28d..000000000 --- a/fast/stages/3-data-platform-dev/demo/data/schemas/landing/users.json +++ /dev/null @@ -1,81 +0,0 @@ -[ - { - "mode": "NULLABLE", - "name": "id", - "type": "INTEGER" - }, - { - "mode": "NULLABLE", - "name": "first_name", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "last_name", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "email", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "age", - "type": "INTEGER" - }, - { - "mode": "NULLABLE", - "name": "gender", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "state", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "street_address", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "postal_code", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "city", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "country", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "latitude", - "type": "FLOAT" - }, - { - "mode": "NULLABLE", - "name": "longitude", - "type": "FLOAT" - }, - { - "mode": "NULLABLE", - "name": "traffic_source", - "type": "STRING" - }, - { - "mode": "NULLABLE", - "name": "created_at", - "type": "TIMESTAMP" - }, - { - "name": "user_geom", - "type": "GEOGRAPHY" - } -] diff --git a/fast/stages/3-data-platform-dev/demo/diagram.png b/fast/stages/3-data-platform-dev/demo/diagram.png deleted file mode 100644 index 5f4921df3e2457fe392c2b24a5f60c5ff0e65b93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168364 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 HV_)*$woK-V diff --git a/fast/stages/3-data-platform-dev/demo/main.tf b/fast/stages/3-data-platform-dev/demo/main.tf deleted file mode 100644 index 79bd45918..000000000 --- a/fast/stages/3-data-platform-dev/demo/main.tf +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -module "land-cs-0" { - source = "../../../../modules/gcs" - project_id = var.project_id - prefix = var.prefix - name = "lnd-cs-0" - encryption_key = try(var.encryption_keys[var.location].storage, null) - location = var.location - storage_class = "REGIONAL" - force_destroy = true -} - -module "land-bq-0" { - source = "../../../../modules/bigquery-dataset" - project_id = var.project_id - id = "${replace(var.prefix, "-", "_")}_lnd_bq_0" - encryption_key = try(var.encryption_keys[var.location].bigquery, null) - location = var.location -} - -module "cur-bq-0" { - source = "../../../../modules/bigquery-dataset" - project_id = var.project_id - id = "${replace(var.prefix, "-", "_")}_cur_bq_0" - encryption_key = try(var.encryption_keys[var.location].bigquery, null) - location = var.location - authorized_datasets = [ - { - project_id = var.project_id, - dataset_id = var.authorized_dataset_on_curated - } - ] -} diff --git a/fast/stages/3-data-platform-dev/demo/outputs.tf b/fast/stages/3-data-platform-dev/demo/outputs.tf deleted file mode 100644 index e40a5e5e1..000000000 --- a/fast/stages/3-data-platform-dev/demo/outputs.tf +++ /dev/null @@ -1,53 +0,0 @@ -/** - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -output "composer_environment_name" { - description = "The name of the Composer environment." - value = var.composer_config.environment_name -} - -output "composer_project_id" { - description = "The project ID where the Composer environment is located." - value = var.composer_config.project_id -} - -output "dp_processing_service_account" { - description = "Service account for data processing." - value = var.dp_processing_service_account -} - -output "landing_gcs_bucket" { - description = "The name of the landing GCS bucket." - value = module.land-cs-0.name -} - -output "location" { - description = "The location/region used for resources." - value = var.location -} - -resource "local_file" "composer_variables" { - content = templatefile("composer/variables.tf.tpl", { - dp_project = var.project_id - location = var.location - dp_processing_service_account = var.dp_processing_service_account - land_gcs = module.land-cs-0.bucket.name - land_bq_dataset = module.land-bq-0.dataset_id - curated_bq_dataset = module.cur-bq-0.dataset_id - exposure_bq_dataset = var.authorized_dataset_on_curated - }) - filename = "${path.module}/composer/variables.json" -} diff --git a/fast/stages/3-data-platform-dev/demo/providers.tf b/fast/stages/3-data-platform-dev/demo/providers.tf deleted file mode 100644 index dd56a321b..000000000 --- a/fast/stages/3-data-platform-dev/demo/providers.tf +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -provider "google" { - impersonate_service_account = var.impersonate_service_account -} -provider "google-beta" { - impersonate_service_account = var.impersonate_service_account -} - -# end provider.tf for data-product diff --git a/fast/stages/3-data-platform-dev/demo/terraform.tfvars.sample b/fast/stages/3-data-platform-dev/demo/terraform.tfvars.sample deleted file mode 100644 index f405bf3e1..000000000 --- a/fast/stages/3-data-platform-dev/demo/terraform.tfvars.sample +++ /dev/null @@ -1,10 +0,0 @@ -authorized_dataset_on_curated = "" -composer_config = { - environment_name = ">yqZQE_oG-hMlwryLDZSy_tbwBt0pua!hozKjf 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 XG27eY5yi1z{eKl ziSZfa>AkjF*Kvx?830gs0T$wRjrDy7)1G!baaP*?FGVhOP70`1GH0Du0*qpvzQMKL zyEkG@nI@hjvByLMFA90nk$3>VroC(Nz1L3lh_*sL7X5ZCI(aoN+OjK1s<9s6x7SX8 z(*72r#q8PzV{T-rEU{3oT|`@Ulqgv89pH)Ka4l2pf2qVidbrWv?u=Iab2e{O!H-~e z6zYUsgJ!xS`|$Pm+#Nci1R_(}C)BecC6XzwV9oLMO{dlQKDt|0CFf}O#)*4BXc_IR zcZ64)+$oS9jnG5a)B#J>souvc60KG{=%gvL&DkM9FamTL6ZJyv>j&=*-zSe`d6I9`pIY^kKRm}BB>zZdGv@D3Dtx@81 z$i-z^q47&3j;gW=)Yux+FpYcP_btv~mwq!qsd3j;?Wr5#6bJ!wE9(9#NzR_JJtiNR z`Ur2tdXF8m*=l~=@Awqj5ejpu-s87)7*K1k6yA=SN{=i`mG}BWlH#ME(CB z7vMSu}o~{NaxBmJGE=OQCZ-W{-P(_S{@C??Zn~_Z#Fn zGlj!N4K~!dx8^-u0)!)Zq`^9Qt|39o_DAuKUv-+s%VnJ`>frw%>8=6`yCLg=J_2}yATAU_GM>rBkoUTyF9irEU=mzoSQUrYT)y^4y|v-1lbD!jrLR#@WMuxMO%w4-Fingz zl`u_$ngni6ZxtUnwU$!}$>nIo?Oz@*jaJ0emcW03J-H&SRoYhCzOFZ8v!`O`(@*Id3Hz!I%Jwh zo_grBlAk(ca5&z-jEFe&KD3}oYs+eKtWJX|qK9(kSXS3_Sy|_3GrB9vY!rzpFE4ea@ot?- zi@)v{IDpxE2rQ`5gw?Q$osvjzQ2t|5(7=R(g-Aa}p+45)a!c*3!6I=ES zB-p=|{1ePj{G=2XlR><=%gcLhDO^&!rGx?oIzI{uy-y5Ve!kI4D_P~R;BtA9{N|`D zhWXn(oaiE!lXnuKlk?sp-+3)!t+YA|xKs^{I;^%&WU%cjhDRL2~}sKtDdQB`J_(5|2aW7d@i21?wus zAQS%cYbY3lfyOF+^KkbnyfndkqQmj2Pa&`T!kroMT7Am+7JZkMcNh0j7|6RNPXoU7 z*?(J-wMl=Yo)lTo9FT^`hDH|^?u@C5RX&3&-eEcsFjY`@qZy8*_?m{|3Hl=T?ngzT ze-iZR0Buql?DfpTg^!ZJ3L6#U#RfOlN+>BnXYY}7jEbdzp0UYDucN0sa**W2&Ao;d zHBJccC2eJ}aPI4lR&3?3yBAyVCqAgAoUa9nfM&2|+UG^e&kqirxHzMY5i-sPjDCP3 zll5K<@XpaA{)diiJhdoD8P!et(jM31G1r&4C>W0zPAe}G$2~!-AzlxLye^T4%!t3g@}jzK--XzF+Up4LhRbm0NGNxP502h8#;o zIy-NZvA%*`vNgNZ>}_&B5y2zbT8s7wvlnrnPCPPVB8mBwKQ?Xo<=G_A%tZhlAheG6 z;f1u^9eM&pCB=#V^k{#up-@Y@Nd*?)B>sd)Oq>^fs zLcWs@+FK_2FPbLFRR=0N_(Y~UMXMa&<7pMn)vVQ^u!54j%2q)u6-I%17Agoft+je; z&aWIlC__Ww#S6p(Lq_w?c9#}VlG^kB4Q_@wDo&eD<77I+%M=7wjC!5(UfzwbN;$YQ z%XgHr;B%B)C|Rqb0k;FPg7^-T!e2G%B&}K!x3;KJ+2z$RiC<=n)tU%Rd&uE>Xf(@{ zIELzW0{Kj0VxJK@7)f4V8nK%g64c5#%l@(2ATRO?o5or(@A+v*1uN|R#k`Y>w}XO& zRwPl0*7~3TL#oF}ua_{tyFbwW_^t5nGq|f?12vDVWZG8tG;8ei!aP0LcbZX3#pC=U zZ5uq9`0p9KVD2bCZErBBea*KE^@0U25T$+3dU?xC8r}FtcotXYc498oD&0RSMT5>N z)zXOcyt>bw2K!L*n?q?=GHvT*9xO%oRJ&$NK(>flNJc`9@h#j_hZB{31={nj89^Np zqSefZss}{@ZbswW=fnrI!8fENaSUQFF8j%bPhzRf;+5+bJ_4>#_HeD6mvIrDKCCo9 z+N8SGwWB`%N!o~|u1hN{$hj-rQX?1N5o^WnJ(3q8M{!hwKK6P;oxld3uM$6DtZ$SK zO@9vfWGFb^f!M_t!}X}n`0-{fq0gL4iK~X1?>yboO8Z%W<~15VtH_PPxW?X(=H+X+ zj#=itRnPC1VfxV~!0AOcQHaj1_}xgWMREY$Gf90E+*bxVmWI%@Mq)vO@~cJT?U zo_4uls}7P&$9A$3K?e?H%L8xUKs>{rb+fyNZHJ%v3y#0$97jq+D?Fa^hv$h^K}QKl z26_-w2Qa=6f(*#nDsQ+jj4b%Y9{4cKAEbK9X&lbUD#VbwsfM#FSD|AF2Zc?7W-0kZ zAx!KDwU)2zOR>cX>^OGq8bI1%+rwZ8J`B=CGECS`*k>ydHQgv1^!R7I3Yg(e$#!kN zVX><3@3GiT(i3^tC6Y0G-7>p5{|%HZ^Q&ziC3R+r{lSpFFJpz`QV1Ug=OQ$ZG`+@r zP7;(l%BgCFeO#KBWq2iVv>w+);5QEzy%2EwnmhE>mIDM*aNqI#))ep>SF<)K}uib+xAu43wRg&?o-wKm%jAAA#0O;W}W%GAs??YWopW! z$tb7eztr!)dHx5qd&xZE?@*3&+&TAf`4rF)|l;Lz&|_VK||QX_6kwSVnxGaSdlK$v#J}EL?{q z=)VSle+%L-B?J5(js~RZu}vm$ZzMgZ4UGTkho@YW)aoq{@qhl}+255vNU}d}6(D}MmU7rBtJ z+x3DqjCT$3Te`1*1be1IVtuv%wVa zOD#W>UABxzjgLa2Be@)#<0$P%a3*#b`x!mS4pQn|UsC8xeoG`9hvs?5I8;OU6M9Vr zmOtV@c@L20{9ivsh~60ppjPN#06FD89*&@9@2c$^;D6QL^B%EN3_u>-|??#k{Q;Y2z12+8c51!p4~ znT)pBn;TZmVq#)$p3X^V-sx0siTR}jkTi$LZzw=w?i|a57MzG ztxKp^$0{PaPo$+aEaPfauu1^gKd|%Y>^Y@8Fcps8g0oTXB8&?n= z=$;y7Qmc;rZ@Cf2!0;2)^-tFUy$gQulRCoz+0`sj(wquFI2Ks+PnS#5UN&WAVITxZ z1~i)*{DxYgflfd=@aer?(tt)H*40X+P3gG~Jr01WH#%vEY7yY>bC+}f8@)h%0IDN# zwln?@Q;6hcLkOgJZvt=*?^#KKr&^pmDt`pu)`aK0X(X_3)Bw{FX+3DayV;>rmIT-5 zsEJo61x>>kaYm<*eR01v{lHO<{41!&nlHrCST(;jdXP_?nhk&?7Ec#G`MjmKRL#L`8Wfg9 zavw~;@aizljXU__;Nw!>BF?n#zHUu1R)RSKju7oHNh?}){onsZyIO#ipCQrxOL6~Q zQ#7Kyx`u5v#{QF4Ql`#Nz0{BaU~Y1qRi}?PXG*2>w9mQG_8jd>;@9_khw6qMOITZ7 zY$xD!9PLTEks7T5pS$kmu8EWs!RB0#{_!E2#Mo#?=~!gtcYn>XIgW>&1aCCjy-{}3wW)>2h|!}iwiY| zsE3F{$5L|A2IAwmb;q92vZ0?v#WNN37apxnd36*u79a+^u<=zcT9gRAs@B;WlRM;d zjA93j;y#~}jbl8{xfpxT1LU0IQ7xI|{hM9DIIS92RMqpKX4S0kXTKI$Z=^_S#z+Yi zzQn5JCT~Uk?gDPikl5e=C(*s{{96>ON9Evd3jIaWeXW>k6^lVS;Eq;2YX|&Cmefk+ z*%*C?q4?G$O>NcKX!j?>8V%wn$DXz9_-L6befyG+&#rQz=mrO~6LaU}>8fq@T=g(# z-!itCQz1w4)^vYbYJssHJ4-9)i$pdeqK?mRdQB)_2Bx?x*|lt%pZ`r4a0iLL`QY zncrHt@wXp72ImwfLR%UEPI2;Ez)|`$z=ZM1c+Wx4)Sh%DrUld|z_wq5uRytvtS@=+ z^fA~Er)$O5J29jMX0VScYg@9R+^^9iqok=i&Cpa`vjN^Q1E~4_OeUl`0r6)V0n}TW zMmb=e5`D)-xR0Y6R;Z~;D-3uI6_;EACVooEy3y!MiM+t?z(tu*S^-};2E?4=HsE__ zFX6pH^awUxS+WX3fh5fAF6j|c&e7fLFUb zbuVw@vx;*R_ngf6-|ePfzBa98!&K#23`mLnR()`ifBf_9kI2c6n!~eBI-Zu0V$xfm zNl6!5^k$ba2p^ap2UF>yd)ax!Wmf0B=j;;x*HAC-EYp+Y736K1Ca|RZav=x`JbX?Z zUqq8_$4(Vn&yOoAr*?BFH%ijp0c*(>@58xTYz_O2S}amGuk~LJjqWN)51Wt2}mr?t!T} zz|*J+6tBm}xny_S?V(rMXo)2Z_~E?)v)s3&qq>$5F5bF6l3ygn)|e^uCn1;v_Fl6w z?5U0U7Y=O&5xEcs3Kk)8Tfy?EAow3W&5*J)oNqchju+23b$*HayCb(-z7{}=qr zpB&kO-~5M5zCieSpTFRqe@qC8PEas-X)-?EE2`lr3EaY_)gvy@Jce%2vylc$dx58M z6`J(M$$!hRZ;EHB_8rmVLy0HggXeab~90p09iaQoIi45HqCU#~wKe9umx4d3?T0a$ejgTQwv0m9&M^jN_qdT_J|*SWMpBoRgdI#`9}c0P_D- zRlX7J+sC-2I6xCGPOFX1!2jm68R*s;WSF+q&^dE#n1ZZ3 zqqS!_t_x9N)A7$L(MLpbNCa?DZUd1C|4^qO30&`|XxgP4_syV$RRMIEqc|TjO$&?; zqONX_Hwp=G*(_&d<9qt~0zs8m0dFy+>yq}pW!H!}55KCat3`QL8+AX~ktM$s7{))S zb>J|7FrsT~Q0?EC6;}nM6;cV%7g%I64N2)vG+v8zyU~`=pw!db@p)h+G9tn!uKK2j zXt=D65TycEMGq=dmPp=J!g%pXEb^4!_RfmPFTR7SQt3Iv#Ae*PY$Y_S%^Pz$Fc?r2 z9m_tDZh@zYd3Z8sA^o^Y{)eL^#n(Y9?LA!yy5>_rg2s{j8vqBP(C>qk$K;zT>*aL3 zBdasSFIjJ@6|BqiTiG77;)Q577(~N4X1`$(qhq}n6&Fk`pSJHJ3tHxz{&vcQaGoEc zvXL~U_xDNo7E5-P=n!d+KV5O}LDVTW$&j&-BX5Z2gA^+t|0=BoHzfB$3=5yDR#Sdf z_(XcEE%{U4Pf9iPiRQ#fR8hS|k|j6&vGuxNtbXL|{>`<8Melq6L1Xq!lvrQk_55be zNJsy1x_6@!5lP-wN5Q&}if->eNQQ8AAJm*pPTBlJ4Y^pSLM3Ev2Yp#(?Iy0+H7xnB z5)U(7Q`z$Aj_tYHE_M+K4s5e_ovg9Ng!ki#_y?U^$}=h-M6iwhhJrc!l8(M@p2U`A z@sJ8%6zMkX2(x)d%N^jq<7!?9gv0y$iw`uC57$uk86er|J0d0jq^ZR)07RP-5x&|p zlW%Wq?^I)Hy#Z=2x$oe$Wh+^7`)v=;n3RhNTjYo(0reyR)CEg&)t@E6)c@p=0!RRm zd$m?P3~?4ix*$b?2$+a}@{Phs5I;b?j$KZH z+$-kCB?W|@3D#BbC*JY$vRi2YEFLtbROlb5Vyb~`jr!{xq?GJ;^F8RtV}XfS-st0& z>!7ySbcNSqkaVUyz@uxmgJrPv(3hrrs(mcL&AMBF3z(lE8o>w0+8bsY+HO-7#)d^T z{|P}HvooD6hrLLaBLv!&JnL%iuZ>Z5#>1EO*CGjy-(@u>8$uNdh+3+nI~T@<+Gzd* z59w=y2UiKm*39Ydyxdv50#8s|Xql(Kq@{`#l0JtLaqj|+z61ul{9+rMH07NLEgQ35*->_suo(=oum8zb? z+^_<(!^jglxJ}6tQhZHo=zt0U6-ev|fR+Uy7?SDlOw{FSE{T}SHz;$r5w)CHS{oXq zDzYunc#Or!8}>})8*86E8TALOi1LDi5CY_J^~V~H#@20_k7&A-lJzGKx@^+KLKbwd zay?nk_H&Zk?w;?NmM62h1m_pbUqh>Gxf6B!0ToE;-gUjm2X|fS`4s>xqOI=v#aK9P zC4xdO&)c%Oqbv@L`v)p;_Bxq+*>Ww%7XWnXk~tIg2fksd(_PA%g=p$E79-+8>FFHJ z;U4QP01enRx_MOK%aZY2`J7~kB3sb{gu7$A5sTS$xvDn7lomz%v~mfCZovaLyDKz$ z!CZHAtKRM|vgt^-VoZFS@Ad5g2V(g}-9-snrL@7NkRBU(1FGH{l5!fL@EhJG5XroMj?bI6q754 zi~ZzL6PQcLFC>*?gA^bvgRGtWP5@_yfk|6OiX@DugL1l9wezrE*Vc00TDNZCL|>E0 zwce9SLUeQPdcja~HR|kjasL}CVh*_PEeqk|%dQha=)DZm$W$*W)S0vzoWg#s4CJ^R{J!oHDc+g8P&3nFKfI@Ia3)ohrV|tV zt^7j{`Fy8ttoAB@SmY{#Pzi1IJa7tT-97!21LQ&ie^?Nv!k9%RJNHYeUhobh{3L z8WA4z>@|-gy;^6k?OhAaTTBtkcmx#xDJ(rwH6XBZu?hBg$ zFU9b3E8RRwK4uEDyf0vtPe4B*NV~*5A7p@_D1PeBaDDvru^O5vuR2%%H5W_#XKC3= z^jK-9vgj%qR{HsC$A*#8<_f{>vyKhIoV5XhtKyQ2#Ob`$0z2+BDBwS62YiB1@>3VN zsR851RzALn8w{?JsC1kcxU5H^IU^wo@WX9*>Ca9n`WfEO;W66mBr)etBUsx!)2N{n zYW6vC73~Y9!XW>A&j26jR!~;;tk@?|kys0_ALI`z;e31+Ku+K4^d8@@-6)IS<3LKz z7tUk5oZqm~w7r%jlD$vNqZ^+p8s7MhO1zn4s8zi}6|CKQDG7jm1t3TrS=P*~vi0+@ z|De%;2MDC(v?FNr(_gFl4&mt_mrs+azF+!EFN00-HIuS~&Pc76$8NVtyWI4IQQ`fcT#T>X}G^7(@au@JZ_hSzht z7Jsuzf(fX^B+o;n<;?GBuQBFZX?KqQ^wXf5y#x~rH@Toa4gE}4`_Hj-;2TJfY8&A; zRUr`IEAT_jPcuc^{TTZB3Fb~xJN^ZT$k!iSP9xMoE{!|Pj0~=h&B6Qf7mGfDOiOn* zujsIU#RDwxCG}41euM{uB$1@r4bU=P(l(WQ}f*}?h1QXl@ltuHntS73P zSo|Ub)x0xAsp?P$@HGi%z`IQ|uPB`_e~BdAAS19Sl+r-P3ULpWD`9E#ggP~HVoMTc8%?^fTv*Q&ZgsCfTyS)50)Ci>u5=a6cToQnn@r#Ev zE8tB45&DG(^e>mbxT3bW#E;-FhfMJS;TtOSLJSw?ctP+2Wc6|Yj~HHRjf&UxjLQ(J$V;;N#W{O9gy zAxvAokJ%E=@^vGWbNQhMWaM+n}Klv6B!;Kt0oj~IVK2~%Wy((y9je`M!8$bcH z+@eYD2jbsa?tm~Ugb1#5)Cx&A&V>#$#6hB#S6?bt9A?~KC<+hKN|Gf>kI05NuNW$m z4FfRDSP+H5G;JKXQVRt;G(K$nf1e^LkR{{R?K9CgCEN1B&}cl<`}<+K_bkj~4)P19 zIuT*(ma1$zN^WgmPR}`(-o!+V7R>eqX3B_6kRQ;P1G8b0Lo7}%trnt1vr5SQzXWWX zAqer+bT#A8OL`vx4p4#^!1f{K;Htm*9wiF$yPCJ+RRvFl4KTi^!<)e_M{`?tF`|<- z@vGlONtdtcbiI;a?7BvI()5KD_k-ql3-q{XS^hjbaC-`J}rmmbQJeMh=S3C+%Lf>y;Q4-J@{N|vNFh&!LW6ec_QP7$6VRCW< zeZCd{rla!T%>CPd^5XVD6go@QJti)AmBN);@C2mZzYD$ee3osRtJxnePT8~TIt8@@ z%-qVUMS0@Kr$ohM+%f$g-l@13P?aZ(J|0Fkw0jk-*)3%g)YII2xO)e-d&glPeUe^n zlGz_457~|t`~Kdks9v$qmQUYqVYy>qxL0?aURH|A^1&buAS#8UoH~uyH96heYB6(W z+rRmQOG^b&c#s#Km@pD4DbAV7;};KomZpYULCVz_5_7N#nvpc7v-N**opD(v<6wjL?sp|6?jVXp7!5QrqFR(Y)!EvajQ zwkFU)OE%DXyr1RQ&c_<6=ti$3ORI#_%q{#uMw1xt#^>|^k`EH&ft0$G(0l*3+&(_{ zAOLp#=&-lR^jN(8m8`BLhsUGYBDjx~nC!ar4I)sm{=zDLJj1rCxR6%b>QN$3Lz`v9 zrZi*GqWsY?93*HUw{(`oyVc!RFG6p2dK+?{hYoisY!+(Pn;Z4L+nNHQPd0GieHoK& z`F&>ma{KmIAC0^F^vAi`1^P6@l6Sqw5Ya~40E;Vn*yt#-5o;k*1JbI+(J||j5@AXf2T70c&<-vt*pF~D`N~sawYf+wv zMhh~Dmtb8yO}yY*!5cyOHd4`$mLVZO&!5~ z#{~$84jXS6pk@{%S(K%5@x_oW7wxQO?8jOqlybMSD8(JB?6{}q2$=seumQk8%!i=< zeuIVQiea9V4SMmLYmaLCy<59Sjf;8X6q3~4!O&k(tHuw%)YRk&?=@7ZKq1r=mxAG$ z({vtVW|~ellT1M<5CvC5jF21jen5(a*wwUGv&_t^+4bu6F<8`cgZD(zw8Q z&COwC?9tEvjf+4^P?Zg>?fp+*FWw5#PsTNf8mKx}7qKd7$-SEiVd`MTC0%_L;&!D? zhL7`jsjT@iLw`5~iY**-(#euWIQFcM+uL*frX#z+m2q&yWB?U_`DsHtO@|d6@1!z&Ntg zEalXrUtbTTpC-{)wYNhYR{iOX1!}CV&f<-=OlB3Os?<_{aF33Me%Q-Fcwn)(>Wli~ zKyuGnZJ4>Z^t9RoaLD|BqmCHjtc=7~Ev7&n!xl<{tt<=gN97=1#M*cPl6dJ7oKnEW z@&xHsAXkS8`B*a(h{5(CZZ@-1%)(yMy-YDxxm%34az8$TEx6fpKkXNXCJ)222Rp`K zatLG7E=Z`7#lhc_ybEH2l_@{Ce?PK){~!q&Sc!t7jZy|m@u?8R8#xY^_f2bWINlih zZ<{Ld1?V;7C=Y)49q7}i_xHiEj>o@Yh)*>^(-h|J->saTfyAAi{ej2}Nu6}`Q0_MF zjGcW$NOiLC$sxn^aM#wvsVusk?$6)TSk@b?jf{=-jhu{~E?zsw-B~7H+gY5?U)Sx& z9gBZ`Li-IzT2U^*Cy4f)(?do7V1UH@KSQDUO>?!vKHAg^vOk0U-oN02+bYbe(C}XM4EJ@EztHu3r9; z=wwFLP42uy5hmbE@IKLKKtFE;{!-iW38!M1UiBS%2beCu238MPb8BCZDom_{O;qJ* zNB3Mxhv@nT>MRge_UHJOIu0p(A|`1<-Tqw|+WNw3AuKb3>+gRoTZ;gaG-+%%jHJtS zaKE$YN-2$3p(dJW$nrtWA3OOVP6gCgNn9m9b1jfzV_bn3GX06Zb$g-#Qb)3gu!s~4 z=Ttjz9q)`T=f);haW^heM|htMb67kuI2^-o&2y4~7NHF|M>3&mAz(TT-J^j3wgo{v zI!Y~Qc(_^2$#aLxcAyd00ph+=lm*0BuMpZGwjZ-qPK%c6iK~jQjW)1=>DVOd6MgI- zoU)+>dAKi>KEMr(+pe;+DbNY*)f*!xE_s+)6!P(RlnieB~)PP38%>v!Xa1 zmp^R3Ja0*5Mq-AIm{*>wz_+Vp2LD)vtfLqo@AONq3b}6ZdIwO|y_yA8l|`S}#BH>K z?wDk*oiF-_)Cmjvc*icjci-(S6$c^T2forLO=~#Lwu?0p{f`tt0cq(k%OSQcF_uE! zQSrV#Nh^$ze;FhwXXq~Q)Tb&%SDbivs_1N=^*2ja7TWkR{-%5Uy38;@>s}B!si!xb zidp$Q^Uf=+9pLixtIZmGJmMUN2F1DV2Z3f>EZXL^C+Neo4t!+ZEJ8>&>>D?=iF2`BKWbD%%bgKAD>zc{t{pE~o*@8b;4Rw)!u3t>=Q+#d1i`6M(> zOxZTisgi%=V311+r*UCLpDJ%m6Zkps1n#B!ff1 zXMo?Som%44l5_lQd36sMkzmYUY7LOYEJ-{ahVEkecO-hRMu>ROK*vwF$K05|4!l)J z+M5WR3`y{Ea^Vi5^5eqgcU~B=1|{?8sSmN?rdIXTSJy{rwOPZoUZ7p!qBt!0zorgHq4<6n~D(NgG2nA8_^@XCF# zPNt5ZNNf(7>ssTDZUUdE&kkUv*_kTq0-LDd|0_PlRC-Ec(7H%Gde&No*XX_pekHo1*% z85U#ixV*ot{mz)zF=>Dccx>8v0fM)Q-;F05G-w5EWRe#o0EdDZ^prmpm4T#Byt~+U zameC7W)-l1U!OUMlHpZEk>_o4L8XRD@L7epYP5A%wOT&bb2p6n;kUYedM*OR6OazCXV9DzQ^JIq(=NtWEn zwyRt}(8d}X0A7FvXr2i;uwNyDE0HcyR8;2wZ1@L3rx&kfQM8p~cQKBF(z5tZr!_dQBjw|^HtpQR-JRE0?`@ZUTgBN=nQ)^R&J=2y z>+n%A@}Zy@_LXUMc1@hbTuqO) z*=q54ZWz6va)guctOSP(^=~dwv@AfaoH^*tX)W)0-_CO!0*^w+~5T3t({B0fhaq%@q~Mn1prO}@C`H7G>!@^Z@^A}{ywgp$fb-o9OV*7c~6 zDdk8C6y85$7DGrW6(Igo4++38kLpfa!X$wja3++bplbI(Mnk~q#r|uke0p%R(m9sQ z#ti`MIlPoJsBqH+TCzTL0DNS{hw1Jkqka zIdY=_Dcd+@) zr69I`t~VO7(847^i1V$%Zlj>3>XtV_Hny|xBW?a%t*T#ZxbJTSJpVEy){X9o37;LxZb!>blt%{4#s9eTjX08eKs4 zb1GAcnH!<97I(09+dTp%|N0PtxS(RcTO_PQWA-$jCX zSfKSM5&`rCl-uirp_)F{n3$hcTs@m*Q!?uHOvoe5dE~tdjoiA8MiLrW!oSs8r|reA zARZApQslC@p)5H(sAw5ygWRJB+jf8GjS`fBqx~7FF~LOz#52jnIsV7$Po}`zh1cTOuI`k}+cCC|x7@Sz0hxf5t01!9phuZz2udT) z1tmwA0e)geV>3rWsWcx^yynZGOfCY@&6nhrs{Xk+Svv4LNBOjt3UBvpxqC8vw{GB7 zx>N&Q`T>85tBj}XPZ??J(3&}(Lq#1@sfT6BugKS<0Bp0T?g$V5WqIwF_>j|8dKdTR z?Hg5oIGl2hsThd72U=^3+*qi@QmO9ag?=(S)AuBbiAS&Hn6QO*wp=7#=rZAo<4Dth zWS90XU+fU#G??^Jez0RencBJEod<^@3`P0+u-lVWYGQNX9fOZh1#e5M$jr?#?045p zIP9i^8(ji7orbCWOH)RMs{8T6$O20T4mFwtn#W0 zcH%)$c&QX+{uEaHHGUthuEL66@q}jM^m@TIk9*Yf>yxRc4S36MNtb$z3XPSK%!T{c zNGwtJh%koiS6+9Wjq<5wYx>8BpxH`D+7%`-&R;2?}ki0Zvb06xK9cbn85|UQk_QTFu`S#rwTIH0SA&YfaCRU4m>xQXo!znHyyTo>HJB~yGuylOn&tFo~#x@{&Ng@w-K_uNxGF&oV( zLAJBD`KcoS;!37c?qbWh{z3+%KG-lTb{*cQro0rmr&7g*b>qbqDS}`5W2UxLpDsl*TW?#r~MYnUY_ISQKoF7P-?Rt4#X`@SqVl?&9c>*p_@->e&~Y^ z+aR8gL``yhSyQwn zKedRq<8p$-S<%aGNc*2@*4UV-z# zr`)K|F3i$MyUWJ8$bDz%_3yj*Yof0GPuF8P{B--#b2*(3zPIRt5&loZ5+QD_HLX z0wUSB?UVA|J$hGxkk`vyaIPBRI$c-1f0gGW<^KDml>RsxA$;!zjoq?m3DCe-#U?># zA=hd6*~_r>&tz`BYy9C_#-5pM&Akba?yMJIGuA3aOg-i&Dd<>pv6$1?d_lq93F&iq zk&lD8W9gX6E8I3xXpG)d{WBZ($uu!n`!Fgb%omFs^Jz`Vx{r@p8psPa*I4opGhUBB zK|)eo{&wWLT+ROc@Rl4+4m1-glCK_m>UuH&(swakF%eNd6MwIa+4Iu@f3wB;_rOP4 zU?JL~5A6X;8?&?4)>ftYsn$+yQFECrGG3SljPgJ`3EMu5=PRoBLpntG%3_Nv8e=DS!>Up4;iMeLYE~t5puslNuC| zWlSD@bZf%jQs7=sS%M{K2_|(cCmJgkJ~->Dc*lrfjPb9lZzqavEzw>wsOL6MLMGK+p8bt46__X%?{K)%6(oOIl^585fuTHp(R8G#SmL5;?%Or};%4slU%a|49$To7N|P|xJxx(Y@wP+w7w+C30tWNJ z4leK{tMp7lx$RvnIb!^!MKeZ12*V+6x`P|;Sx(CVd!`Yt3dn#3J71Yuxa|$}Kb-)} zAg^rwy8!hcBd3N1tae?*=t?jwU*E%JMEml*UV2xTPblA1o2r;_{?FOtOX@3G$O1IN6TuuMzWFoh_&!V2C#Ki^RtsvZurnK+h~ z(bO#Jy)yN!5uT8l*%R!6N4?wJsN4&;6hpXkjnkBg%&>hsE^<`t9gJ6=)p^+|LC%!@ z%>Lz9lEfEi=_iKLSZO2!`8Mh)FE^51Th%*z$0*FYfdDtW*$IBCVN;8@eoOi-J=7%3 z-9tP4(YLis-Mt4R<6%n#&n0#wssfu%sX~9&20;T`qSt!^rSPhWTn^1&Q5Mcg=@o7)CL*en6xGxivRsG|^n53#6diGqHawx535p&ul+{-27=U$Go-EL zqpEQ)=({mv+2NrW5_XAuVd~)NitDE&7y7Szst|)q&9k(Cml=vIgS38gwz6x25Es*X zd5BaVmwc<&yd^J;dl^!Y-%3@wea1#A*VdP)KJr=>MIFA=tIbClqg53mm zG9OWTwfk*VbjVChTufbBzP!m226<`VHq5>yf7yaml=x{+3T&UOYY24DcqVS7@wwrs zZef*WOh|>vc_3w33;D{KVerV!HBgFRbh3-R#$CC>L)@|Vjc2;@SSUrQjBQjcCh|2j zZ#NO#<#?L*$B{-!`b^5xm{gB-2GURSf!?}&tEF5Tv|Vt|;hGc46w2jXS=FNdc$$CA znaLNB;h%3Hd=E(s3+7*BQ}Q5)%W8X3Qt=XujR|&FgE!Z1mW`sjR0zHyD)k9_3w4zT zf~Q>Kul78ln)8Q_Y%qa=uAuZR^&ntB= zxi;E)`*^6dRbEjroi#--+GS{e?o!WU96JbLL_q-&(Xa~_$}!={<( z7p5w`rar%Q*5`7WZ8-tz!py~B30NCHx??n$yry!42MH&=q}UWdYqtA7Z{$xwI2(#Z zVBxRPUG&e3PFnIL_&<6RlS>VhfoqqPnZ0R;7M2$Gr^m9_FLMt^{vUK(LIK@r$J4)m z&zte9G*t(mJ)?TQunWhMXX)yv12CM-UKjyh5eNl`Mqs0PKDV(cRa>}=8Nap`yJoP- zp|>tveSzD% zSXOH$e*XW7J`jMAebXE#a%>hVq7338L$__#=^#pe2In+qhbiRyG`h3Y94lB>9Ba&F zQCecqCr*5KERxbM;2tYwS7fyB&DKx7H1BR^FRLesC`k;SoQfUae^M_<`tg4l=)X$z zol@{3PdXv^s_KlOjJF~ZrYd8PudE+g^pdD=g1L&PM7|d?yL<SUPiS5SfhC^ZfE=o}@j#2gr$?9fm}OD4qs zUpkB6TOZ7OzRx04dFu|SI=cQoofs||>9c`2`V|VARI2vd9skJzrW;UgIL=c&=?BP= zHX zc{i1z`UuIXw+-+07_%(WYzN*=zLSVXD#=+0evXY69zx+geG*WWdR)z!>*a=RR_q8< zwwkjIXWRF)zq;N86H$KPdIBHsf-)w&CR$M~q<57O3F)BFjw|VCS;<*QLa#Q`T~AOA~qu$K1o%)bkZd8 z_we6o70=LVew|YjM~>}8)++YLum0Zp;?r6Rv8Vap1$dFxaa_65(g%H&DPU%dN$@&C zUgBiIp&WV^81yNR%Lq#;{iMG+>421q<}Uhuts=tHg>uDuP>jkJ2W-?S#HS8|)f^!{ zVVHP`o5N!(SL9ogn&8`YSR zlzg|>W9B-|?a^eNH+0{X4&J0&)n?Zxn2T6bO)1Oy z5Wabau+}6=j3YfQY(|tU1lm@(WzobEp3qpCk(4TO*sQ0YD^#H#li zKE$q#?U&3WV?w=yJ+q$w8Xcw7fwh#n%TT_B*#I;_^E_5kYD_|!Vq^qicojPf5fUz0 zNw>wa$T7xF5wwOC;+*SVNEEv%rM{g~vf|9TYIHuMb!l6EE*-HrvtjfpHlcB4y*XhE zwI#^y$|YLTiL?C7=+<0ZyRC7lrj$;%<3vifb@OTzqrOU*-MobPF+(M@*0QnAgiENg z&Z)a0jJUh2ap22-`@sJ6Xq$UPUv800a?i9zO4<5S|2EN+-6O}GavOu@U1e^kF#@MNM}Ve*+vDX!&Z98PKM zEEPhBProWCE0*{*K0f2Q#O*xnDS@)s%i`$HVV*n*acCN+j)#rzzDqob>;=7r$^#2( zuMzBQBEUfyJA3P4hz5p@0;g-VZEj;gD0_?D{0uD7=4f;Y4#ju6ZQ|fStFU_f#3d(V=7yM)^f3wAiuoXCYL^>Y9A(69K$J-k-dwNrHCO> zX(Klh^alZO4=P)aX+N=*hOzw2kGeib+w{Abei!uZUk*ucj6@M5Hnd6wZFy+1(T3Jy z9qQt2=fPjgpn!y3GA)^y7oVM1m0tH*7F9MZ=Q675RldkyU=OeaQdSjgjOP#HKUtpM zZ)l_>1*1}sOqX(bZygvHOA+Hkv-q)gkf}CWOX6KoQY~aKGbJDDjWO^!U8Ol(-H%LW zgp`}-Yj^97{L%7-2eJ=PoEq|$adBZt(@5JyTSLo`eGT0R;ZwBzMs6qF+49OtA*NSc zjDFpy@WohJS{|+RTLn=maDPW>B!9N=zRChiN+m+KDbEawwg_Ru_)u9*3x?kLYN4dl z;0YI-gc{Y|e$I zBmbMmrGoUN9yVNnlFf(uuwg`AdL&{tZ$>Dv{$tqp(jDTX8`jc!_@}J|-_2#=VCY z9Or&td2Zu$HCZRC<+Ck+B9oHAYl%!D#;=AZvL|k;Tqa`Qb-j1?mLO91z3~CGyJ4h> zosCS|(G@Q#fM9ED&5BW@6_|+#h)NgPVT-ekv3<+&^`kBrNTQI%t?#c$PfbO&1*6-kDvY1)ArR+ zLONtG%^jf0i@HjN%HIOQr25Sq#USQ*w#su+B89(4Pn?L((9*}y^Z(;WmH2%`DH5Zw z%{(oH8Z#(?%iFf6*$om>M72Krnh~Jeqq_%>Ejq8lZ&=vqFBCDkAAR(J8`JtL98 z{;Z{tj7E6y0W8G9PI&4{QGj*I*9tk_=H`Y!(9I+r(eH~kM8l>OyWQafbz9F-s~$&B z#{}}A#w&BN*hr|pZJ@CQY_$TEpYtg=evyVuOe@6Wvl4;JF0_C^ADJhGXY^oedEJrmkY9hoT6Mh;^r};uf;aIfWK63D}vK`&Tiz0Vv+xQoH0?BpNE6111juA z#zOJcn5!;wH@WvS*dRf^Y(Q4%eP_eH@IjDP zsLQqKUdYzg#Z1+OL76nZ@^p3>p0+@rAromyp^z)lYXz=ik6O4$U222G*X}w0+hjea zDL$H{LOn_H`E2?;$nz}CSUqt-=aV}P+X>5t2D!`hm;fK9daT02P-v2Xw8 zN0M-~gyj~~A*BlVlV9Kl0TmH5NV!dZkcg^I0h#p-o;X5d6ywI=fvAMpPmO^N#Po$p z4+P46RC2b{LP)3YiHr$@7C*nuDGF%03OWY}D`@XpY3Ik?n=K&k86$@B7V{qVf<;{| zxQn%FS5%3m6NQ?~ihv|2D}Z&*VG$J|BFPJ6O8IZjTxlrgkXzp`kV#{+dZWr&$#8pui~S&ai_hxe_zpE^iHw50h*wD#nKNV&^1576l~JwJ7azkO zIN-CRco;eSB!4GrlYt1fq8lp7MhWNX%tV$JSn5%Ko`mt8RWaK_HKn|$Su2^GWQ-BH zz+WRVA|RB!SwtxD-$JOu#XwHK_~ybooO|O_Kk($xBd0$g212aB({AFs2>t%WnXkFG zYmpj!EwPN6N7+SS+!^7aiH!B`KYSs>nAbh-`ZYfANPyZi(x?3Z0DPSZ$+ovqp%hEz zzGFd;RVpx;1Qyo{3g%5*RzNwujE~qp?vK1p?tJh)E?ttpcb5b?d1U-t_&id36CVC^ zMI#<0-#5nJknD%$;mZYn1RYrqyQ(BGA$@y)T^X32!@2Ljc z?w?>NbaDL=@*>=>FAARbE5{vnM)zxf(Kk$?IIo!PNosgbbW3e1+fYcukuM2Sw+7-E z`4}P5dL=>x;--Gsk5u7^9e3I`VJfy*5Zf_dPdF`AHW4o7W^1IFlcY(vhRL5TwlG6< z?^iIhzAYC-lXv|hpnSM@kjgj3uDF0#B{X|}yqf?Im~|27h1ed7vWXFhrOM>JnYa8w z${-wxM$kuyH{UuTQBV9wIadt<$Z7KY8;6iI$em?h*W^LG7P0F`nHGmfSH3tz`GT^$V z#b$pcSu4SDMz@mw^&lP&W2 zu41-u-1x85qIOJCnx2i|a6SX-bJP1`%zSWCsw=|5oc>zF zFcUKgto&;w47yu(5BdcYC%j<1E}}sy*}`cCB#uy(6C9iXKDuTg&D<*zno9K>Kebjc z30`!)oIXAc1}#if26#%mth@9<__^An32rPb=hbbn1sd+jracWU<=D}>+AX8l znA!R#eX}}bvjL$VDQ1IGMoRr-t@habs3HuS4AC_tG<{2ul%2L&GxaL#lH53jU=GEo z*L7yX#aQXpph1e8MH=8+cqPzaFFA>WMzGSo-R%=FWjn;(ZRAfR6Q2Tq4-rY_;!7=2hEG!WHW0&y)S|TQ?>QMmF3`8bnpwuC^W1 zm%p4B28-}u!5wpsK@61JdqOXeRGzU9|GDT2Ft4@BFjpIe_#=AL%-5)~GAu|@f47vd za>9d6(ot%k?o0HB3-3?B4E}?tA7l9Md%bhl4 zfB7_mV^)!dd1!)aGDL1WT3JO9fiXjqu}TNuMHrXhaa^vdVTLlSH&vub3Q2`#PhySw4o_u=P5qGq_9Vr%+Q@HuOdh^>MO5 zN+sa@a-Gz@!E$wOQ@71ByNEjUn1Wv0Aud_QpTH35v)D_YQH)da$~7xpHNkP7>SByR z@T=-Ram0K>*Z4Yz^l~yXRbpAqe|9=XsnpPL0$s^3ZQDQD344Selxq2rV`RtouEm^{ z8=SMw74?8S{lrS)O4R5UlpCq|SC?!ky{{wx^U|cp%V{b6!=pOGDaZWfMnoP~rc4S9 zI(xdrVKX{%PKwlNNm039c)`_}zZEH$tT=d z&0>QJQ?OE2*oC7LvaIMAk)A`U&q#IU%z`R(`ib>62*u*V3ZJ_3+n^^JtB%{aG!5dA zx4k(M@VHnMrAuuAwd}ic{mr+``gpDE^!42+Vnz8EY2?I(&Ecg2WRla>x>RD2t!2Dh z*t@$g{&g>kXat2Wezq%{a+O9BP1>-54%I|M2G)xyvB3~@RhKB?@WdsxP)KyY7zisk zp>HM7Vh`$~A_3nnw-M+)yzhY^O4A5l+#Z7C$O?thFcQ=QyvP@{gWG|l{pu;F83hm(^Xh}DYBCJ2RgyCyHvuKMx{8}jz8T6G6>H-3Q_BF0s8tmoUOQHoHC zi+C?2P1)QrM?f_!#P|-yx_YN6fRmrGcJ6!zv((V<|8nN6I4UT}13J`qA0&`CnDdH6 zm|WG0FPYjwRKBJ$h!TzbonM4Yehd{svj3QVR9_{L%uZCCH;i+cwLDl@-~AU41VMnwPW!G*ft^^cidgV*SOq#Dun<6`=_n3~(^T7Q9<`0hEL zxU{zWKx2b<_OoOL2uwgT;bZQ$64`gf0$mC8`5UhHD@m~ta?U3F0@~J0d(r2RHi62U zTY+i{Ps0^hQVN=R#F3sgjQiV6zhA$wes7;$?F$I8oohse8Ph-w9FDI;e~X5J>TT05 z*cMQ0lFOH`1>%8^NH-zfhN1do0UVv zved@fa+~r-gv+1=uMXS$cJJ4?4UyIss{{bkAX|29y4(O*LKZSx$?+APKQSA?V7w(NoZhfESlkP;r&!H1WBT2>AB~vvN zQJ@p;BVRs!XrApzB`l)!aPw>3HcKi*xc95wc5x>vKUdk0XwT*9Yj65iPNO4>4DFZj zV5^9p=uHR=6Y$Bq0_CmDo_#o+?w2dk5Cxc92(iFg)P^`3Vjpl^4TL3m`+WaR+t-i0 z$`+*d28XzU60clsIahdvf8H$lW&q+eH?SNP7W>hmAVzT2{HCGboQiH9;WgG?@uo0w z9H-cT)=@6&ae7~#;yNa(?MnRNKAAUiRyb+Gf~4rrP7hK)%)GtHe+Enq{7vCnn_-0y zA92uomlw|dn#?r{)H62Lmd*fGeyY8Il z`AhBx>?WWKr5M;`LGhJ?He0e?do$VFR~6!sn=B#Q$br<-lAxO8!2h^w(+<(j5?W+K ztt!-dl9&u@ox2vy-KXZ3 zYLm)6{~MC6Ev~XwStUH|ld2vpxH=sC4+LxNnLYWEOP~FtMshX0GOMGdPGV=0yzz=e)f|UBpl$wbWc^r$;2=dG7n#I!sqohb(YG+lP>CjkoUD6JHY_ z(pz@nB5LhY$^{L&DH5O}X3=b>DnM*3Wt}KaY&QS>Hg&K7umn^qE`9HLl&dCVsyN&daPtJY$74gRFk`d7doedSFuBGEiM* zEDNxuJSurAM&2#dh_D*I1}xdG;6(~H5)lqb+RY%(NoV}@YrHf6Gbn0&7eO>R2f0*9 zU0L<}hx4e*QExktv@sjPYefI&P1s?HS6X4uXzk9!|Zf11o2%OiR8pl>I_-;o@4-z(HTKR6( zA0V&i@v-CJ(XMItv%CU*QcMFY>&MM#0NiX1a}Ly%XcwhTQw!|P>JU_&6{mv5S!C1B zqmhJJ%1*i7(&QdFkUcmcgD{He2`B?o?IaDz{$2;cqlL*0gV9xoK%( zUBNaRgdoPgeu7x{({d5HG*A{$Z<#kkN-+ccD>&NO_zz~-o@ zBh*3$w{P+~9O=IrzHWdq($xqL_;f!>EZq|IZR3C|yyK%iXkH+kv`RX8iFmgxJaq~j z$OGHMS1Y7;t!eUp{cS8Mt^#;xu?)AJ?pLz0wkGB!#gDJULa?})>MGi4+(*VqQK=2| zkcg(FuKisZ9Qrp=1B@SrZDbA0cbAu`GP%{s9`wNqX{e@~6F8P~AA1r+NJgr;Ncq<$ zD-(ks_pf@&jFpw$yx_H-WW!i#ycU4|t2PhlJ-l5$q>>LKvn+v()m_IV0ci*tj@hdB zOB<4cRYQGe!a#OTaedt5Xmg*eFf~1Dl%6=eRIr+^4(;gy{{DFa8x(~CM&tEKUHh6Bn=5b)O+rMKU}r{FFE!G0%x zH?|A=4Cq{R@oq0KujvO`3rGmnPeEevs2?h-s8}<*%k)xZ;LgwMiMmm8oh5#G`cqJq z(d|!9@J8P*fR-H1M!mf}9gSWL@KKAJRMV8;GAO0cmIyJSL3Wlffxr6fu|1k8N$z_n zR{la&!{#9wnYAv|73OH*dkuUhm$)h@N(|a_Rn~`C;Qr z8nOtNO-xAmCj*0r%ue20u|^6{i$9QsFv4A&Cv;+ z*jJzm^7=oZSm9)n+mvbY{0>$3mz>6I8l#I<)oeQob%yh2G;bAn$~o}ou$}6}<^JHD zs%ic^26o^alHJAL^hvbyWoTov>pRa1G&noPz!F2tmHwa~h;!kvQyLM_B{GQOaICX_ zP%9XWgBVQ+AlP(fR$pny;E9H-DUQSv;QXg>T||aqAP269o(!cC5I|TqJn^6|Z=D+V zm+srVxR__m9-+^iBntt~cREli6sC}1OyZ8}X{m+gb!6bVQBmxIohNEG7)+A%0y!H9 z9QkG*3DE!!bfPO0`!$`3;`&0HDCMRGM4jzAz+M#Z?Q(j<)7sD0`=3N;P2x6YJKVJm2Td8X*w zWzLoFs>io?P%1WB?*;?^sdm-XFR5Om5SIk~vtC(vrJ@7gIJB8>vBpH7&CL;yKg1Fe zLV?J#8;~$|!jN>|WA^66pc}p>TXx)K$)q4z;zcKDqyB-9sw|mtX$yELl|N~x-8P!U zGj2!*PA|D+gJTudbF4Ex8$X!D8{ASci}sBcdU6v}O7BSsaqBt6#;Mn>G12{de<|>q z_*!Eu)x11CqKy4GlK2qlC0>Six~;wMjjyf`ud-B2?LcC)TvJNUEq6<7uK5Sa7dH1S zvdDQJs$v4kDFz3)vDnSDKrf*7rJzu`^c=C+SCM^$-}LRe}^90YQq`1v>veba)uMmKV>Z|TyAn9 zLYFx+UB)M8_+JXDSx3!_G4j4E{8<|)lY{yXCwf7e2ZQOivh48iMHKFV7}4dEIQM=^ zb>2dPOc)w+el7UT8wvX#ZJNFeiS#WsGnodwJ);92Cdp2z2S#HR7Wgd?} z7ZOAS+_TX)fjka-PV1siO%4e}ke-GWy%}}}%|-lZ zVHd36HBj`g- zLRWq1WhH5;czhkwkBSp3I7QMXG!0Qw@4fE0!hT9{Z@xJeO4#%mrPL>1t;+7(Jj61m(0jEo1QMBK~(zfw)=RC=neO$|PkLBz)|k8a(0c%kv<}+9Oc$ zr~qrxY7!{w7uu{~l)LL+g-D zarfuRL(ts${}0G>F!28ad8&Sv>4}jCJ3iWwVk?$y7n<4qjs^jGN;uWcB~CYWuOgJB z^#0z%!WZKK<~DG>aT2wDi{Flpq>1F$hb-nPh%Pfh>=6vMVqA)uSWr4i{xH+1#XRH8 z335v;;FJ=G8w!e^66mcb?dDYHPOaB|Rb;ap%n~{J$NwwQ@b}-mgg^@W6AFrbYVKwX z;qfSA@n^hm1gAF9eWGUV{t6)ZIuDGit@>Z4%4jIFnrJ+ff*gK(d#3Z=r6jdZw+)Dx zh(S2?N1;rbgH9cfO52)gtRWi0 z(oczP%It(4^2fXDZZY9gZE1bt03F7I68}Cyq@cEhAmVE)9Q|Oz-&K*qlYznR@urss zR&HHu_>s_RCVq=y2z%uKs26+L85oKK#Yia$CNBpLULNBBc1=AQ@KstcpR3<5t*$1QF?B|UD^lvemoDYT@EC7?J|XmMns_-=s4gySWu@9zPWrihyk9w2cWUH# zo4|c=^@xo=QUhK7jxxy7kuaS72t3*OrCNHFVe5=s&$0=Uc-?t{JzXWZjo%#>AS*J~ zG0&0Y4!hcN0)O%_)Y-f^sI*aDop(;B5~#Vjz)Nijdvr@jaU_w9TIYT+z28>bxT2jw z8WwNRLN%3h?wj^s3%6ItS8OU14(2%-O_d`>t8}t_B~y$<_=xY?d5o2!(aX{Fo@@5H z#99q>8OWbXvRL-Uycw!NLhPy1kd)GBek)o{!HToZRH`Ig(n#oeeAjzxc_0MmLL(@< zMWUAUoyClg?;_mq`;$sq4bFViSWVJ*Fwdi`tM&G^w)_9CN`9c);nI4t^Rn9rc>L^I zp&0s+E3iNJDX4EQ8V*_1q|6bIe17(?7vkbV{^_LsRy5^{8_=W)?(yz29ooS*@-?Ju z^KO_D>T3R0e{X2TPF95(lBD8Ka#)L@sHUnM4Q&Z{hU>x%EXu8jZA_-AmNJ+wzwq$u z8+0Xo-Mm2io9?9;=?|Rvxf`1Sw?susa)(%VAH9y*f6|PzGxN2^+NcVxp&gor9nx4h zm|{1nZjL{4)q0yZ!FZ#a3BD&2#|ov|V^EZw2f2myis$YL62z3h%;=gl=<3yRu)|5$ z#=8!zKOE8QHd`GIQ{Ip_xRIuvsFKp^z8?@uQB&Qm0C}G_TOY$+zyEch{6XR!GJ9N+ zwnRQI1Ad2OKnDsxyi_J8Gc1Xhllcctw{SVi5nEzRmi^Ah=FT=YZrw+ks*w=ociqp* z{RazD!KBc*Q|nxniQlPb`7)2NISInxrg4&(u&D~0Mf^s}fS!o2Dhlhh)+jcPX2c&2 zQU>ZA1LIuyCezCFHe(o!928n=+H1G%<#g*)DPn`+nuBN@f=h5`V3n5LRp|8A%!60t zmBetG-!VooNgQG$Di*M;u=$={&Z&#xSG6Dt%itmBzj+4SngVYMBPs4|#Q)<4dcV6)E zVR}vXJ$d)JnV!jmn%Me;lFiN6fu+509v2D<9M_g#Fba&+8s!N*P!4j1B%+-cZ?dg_*@FRGwCO!rY zQR^nZ&iH;&$S0ebHpn+7eR0PaE@BJTPw`a;oT*IV#c)DbV|&#I^la}B6Fgd=!jo^e zcFtn9bw#!$R!^Ca5IKQLA+H;oFuBpLF}K4_N{*Q8G`Mzq$R!oqk<;$U@yiaf_?YVp z)LE(*Yt3a2#MOwO?x|C#-BPK4g^2V7Y&|b=L9g{zY9Xn3yk$Qlue`^Ee0t17^)@1b zVTM|rfet0#kN@K=US)!lt*^}^z*20Kq^oZ%{6}Illf5u-O%1(JngDzLlj(?W{Y#myxB9Z%!UEO?rp?p8T^gXKo(uk3 z!OS*_d~e6+^V8XHrPe}E4%agfd9w1ntH>f&w?DmS7U@Po-&hw8q~BVS0DX?cEAz1& zHutBxM1<^XM%vZ$-4kLT3jVHdAP4rvgdlS8 zoZw$0QoOHv)M;1>>)77lPM9f#D`MMws~dWJ2dPriae~b=B5xtnV=7PI!kb2h`7{_e^Zr!E#GGV2|UJxu664>&pY%Cld_O5q} zYiYK*_w%)WXTC`#vZ=%Dg$!`4Du#CTVNcOlgF{Q!zS2jGVcwgO?Q(ZLVhTg6kowY|L^ z6drkpwZhjV_4My%irgjke%M(3PS{ctjklubVCLx4!V`@BTp+qO4_6MdQ7y5eg2fRm zjspwDEU*f0@K0)UkO&H3kt}o1;~ga>M*~(>eHJ?K0}A``*S~@DweR?^^&PJFI`_qb z&IrkoRXm-sEa_sUSVH++P@wtI3eNUJhDL0F&BNfySS(r9i#yCfZ)e=XF_uCV7izki z@q3RJbJVWJ*IIWfghw5nQ^JQEj1SUH9PY0`LG!Rya7LUcWuO8LYT3$@%yIjjT%f?P z@D9a1v;?z6T;)+n21OwRz_L=yOnxrq_y8n@&rR(-449`vVDTK}-A0%SFe@;u1``Un z^ZI1E%6;R1Bm3@eBR|BK?mmoQEkED6-aeX)?A*pmUftDz4RR~pR!NF=f9BM2wd1YH zL);|YDJvnT`=X5Qq%u70L{ms0Z6Ey1C2w!%rg^uN@z?O)3c`3OFqbX4GhXaR$n_WC z%9vBMi}0x8tM_|Fa?RoO^TGl1%{e8zZ@0rISa~b!6^|~gq=wAn^RyGmvUA97IzuKk zMJFKxVW$6zw@w>OWNU)bxLDg<4S|&cZC^y6bnsd*e#?q!naQxIkPAq&QvXplN#FZo zOA{7W+)8Qax+cMs^3m=3+DHDVVh!^&J(LQgxtPI)n!Hx)(})3FJ(e%r%&S8~&|h07 zp5NYdFWo6B3E$q|j-o2sWekc)&rq~CIZWS{wBnyS$5`3>U~eK!o-HXR`^q3=NkT|Q zAv`>$*t>im5#KuKus&^M2A+fx+dh*n9PImeOB*VGT3g7arm4h~fD{Un4qSfhK$f7Jid(9oJ%w&c$7l*+DiRisY0GBc2+)266ogK*gi1qr%hnW^0%Mw z%?`ulp*1Yw)ZTpH%hx72x~FmYC;N2Ysmn06VdrK796HtRVWUZlFB9O$^iEbPJ2QhF z6a8x13^Jw@ypPhZ@^1Sbw|qZRAcq?Qv)1VDaEO;CuAg^Zs_U@wQ7AS&p7@MO-EAwL zkmhUbJ0PxF4e}@69v;h-hq8%T?W{02#he}%emvP2Bu%u;*!GLfy1ydgJBp5cMCE& zmy!{okQtVQc;7nKvEfgN?1oXun-2rM^asd9BslKP(^Y_ zRYPE*FO#pVw+qyx(p=ldrdx4esA?<4U94bT-o5TW(qdGDr88R%Q5-uWRe@|JekrX0 z{-$U4$3Vj^mHFntVZCbdXXaHXph9*W@zZnLc7x+N+VWS5(?cyzyk6H8VXou9nH$z^ zLJb6JhxO6_9|Pd*`|14&a+yfriq20y+VKQ-XEHmqSn0no5bHexb{D+J z8#OOK5_MhkzxSu8E*NaA+UU%zVd#>az$-&4k6#_H;)XnRY|RCJ9HHoPDE!E(NFL0E zqH*pVD3t}9##wk8B|rhJ!IN)&STI@;7x?W2qJ`%0!)veANx^H`PI(>A7H&HzN)50M?7^y z<@}Sp>H@g&*Dez)j)JkbK(9 zFr@KIw6&r*X*N{RtAv5cG~*p%>Qh*fZJ~|zbJMWiFsIij85KBo??fha(euM> zaxJovi|py{_jVNdbX4`IMhg+N=1R%Y3Ki6A+#K{Qs)ov`+MMvItSGX-ImU;V?Bdq; z-7(5aaVyEiivw)Zd^Do`Z7OW|AmN|QAI9F{G$zYl#PxcwUIhGp7Mwd4EO7%%A+({W z+58=N7ta7rnH#+SrS|adY@EuC`;0JM@Hbu~ z`+w8|$AfGdC0ziIAa`PAo;!o`bPcW8?006kH-@$+52BZ)Rc|DFg*-HqArC?hxSl;l zz6F_KgGL{}np_wZTZIO8wKTZl=<9xjCd`YI*mU|u0n6aiHzQ~I9<6K;z+X>5pO?GB z(rws^%w-lGn&#p&Z%s2+qcwR;O5*(I3q*yMh7B@hj z7jwQ>cfZ8th0v$)Fg49%P>a#xTl>>f$zYY!vPU0I_4MLF)AN}K&i_tbGzI~4E^piI zjy^KcYWpGzD1sP8uj9r;mnJVe7s68+-eEg)NG}H=VSm`;3E&oq4UmBfn^7g#hOF(x zh+3Gd553y%F#0vc^{+!c0FKEok1i}>|E>iZ3VCS1b+sm}3UNbw9L@=Q;jmVg^sX$r zS+A{_8Vr&+$>OSic90dN2wgbnpk28$CO#5t=-TSb;x8HncVPAH&3vOI>IK*pAM7dM zxLS{H&f+vN4NVQnj8i+3H-f7SHw`!tcjpl@M-Qa#u)D->9G{MQ3N*Sef1!Umf?cljs1i-5fCmdq zSj%~vHRBg7CDW>I5XzuA2XdU|KADsmA(yXT>2#4J3A}r25e24I34}8E@x+Zs<{J}V zgfcwj7l*L!L<-JZ8Sp(W>S5>6Ty5Y5-(^+R`iR?6;ginA_-4TqvP^YG#27Wmg_JaL z)hDo1mB!lFPKcRLuE%9C5;WV>w3HfLG?1WY_C>d7y(Awh`gq7?-x&^Osae8O6m>ME znLgn7P=QJC3VHcfK;>t>zVNj7J|xY}JZ{dKi0>_Xq#GT0HLv z%>lsR=cJvD30(REfdACVgS?|s`v>`c&2KMn66cDj$&T`8ZMKLm!xm9*BKvtFmb<#(w}0nynk%AO(y7f|%v(0aUk^ZvT6Eve6W!D+R_ByE z@yVr8Q&%d9X33q|2e`lZy=;Qtm?jj`&UjEvj*mmQ%b$nsT0)2xH?vd*E-s8B8;?*F z>F`vL)Zi@#+NTmWfqN|5um5g@%c9N9YFY>{DoHL;WvP!rxMfJ6a&g;U|?sCeO z>v^?Bnl8Qb)NWugdq1;&cx>$Ps-+-^V?qM{)++Cc=sHi@5QnCzC#f5N-H7}_NuO+Zf)ZB{4NxtHuL&Xqa)6(>D(x0pgQq<&8TB3lHuEaR|at< zV^TSC$gdbJ{AnMJzT-)^LRm zyJ<{QXjp3db92E&*ke!~GepQXg>k9*lVnq9D1>`u_VJL~ z_Ob{KGZa1YvJ1k`JmRaIo}2>(Ss2F+2#`D_j=yZ$I%5S2eevWlg5>ED0kf{&!;VME z-;HFhr(Okj!?`OB=37{Gs0Q~7te_fJ0TiJL%|D#|*RnO&Z<9I(a<4kXcg9llpaj-D zVIRI2?L2=e|H`u71)jytS}opBK@)*mFRPq`fXDiL*` z8ImnNNxKxQl-+*9kU9@G@B5zc?N;j4J)}l)k)Unge#h6nsi>CKJB+2i(1SLu*ar;z z^Y}nuP`l=pbKb2no#FjTS&GqJ$h%+?GC zk2@@^cM?X(Ej60ILabb70+x~8N$zH>T&Qo>*+A60`g@2Q3hUhM7Td{p<-s=TngwCIX@x^H}n}-CWN`4T;zpwio{H_ zSy(3Hf{N^KOAG(?FutjrV-JkZ?qo5GYbDnib%pUgwTgwX=i!fqBU(b!;Nzs((g#vl z;$ox$jEydl7c00?04tuu*GoW@l;OebAYzL{#k4pC*bnYNQ&x9_M*fFLO~GO*p@OM~ zk?Co;M*7RZTod6gmtcA02q|lJtQ=nAG^n_Tr_dbt&o*u)q}a*W`3C7!lso*+7LMl+ zS;eLn{LY5-9Wbwb_PM!Y$D@tob*55v@RnpZ3~PdtWT_4F;^&^srlqo^QT=5N0aN2d z=!^#>{-?mbT`mlJ#0}w)Y3IC4z#%-?m$-qCr0A0TT$_<{HZ*6o0A1p8l7bl~wPj8h zaDwt(^0rE(7@;M(w31Ud@s+(towT&~s#dt?v6O3@Lv&0GvEWdSzeYZZYnz4Tg&NzO zHhk$3*Bikr zp4|tLLmB){RuOt#XmfL!+yZ6OrDINURj6P-8OzmkU46BE#p0-<}JMKuk+onVn z_UC?}$d?>T&bevCm#W0$>C{E+jH5PIwD<2SLz$s|+BsEUj(`j7+~DIMq6LXEF7u4q zf=5{`xO1a_E1n{!jOq68rM8&ZSvJfvB2r(P1EOEkaWK#kq$m!2-q_3r`%{*j59eLv za;6b_%2Gg2jMZ}~cdYGK(9U8eQu$qdSXgiwR$=u7oVC(`?vJ9-?!BZe0oqfLngf0> zlhnc+vUyq{lxUrs$h2C>r~$)<#5s3YunyGfJS64n?@qenKEU11-jHZW@BlGp;&#n$9uwqw zTyTey-Tro~bSy^y03A9rvRfMVBAv|#vEfa~wa{kLs?F>i zeR}pvYusO8o6Ta5lCyM;7=JP?E5vYk`EXfRHW0Kg+b_lr!den_rVRCelAz?+TM`YH zdGyHr>4LHe)7ktPI6{M-tVIXLKl$WH{2ZUqlJ<~7o95_J>kvAEe84M^;5h@vjIwjZ zix)&R#Guss&`9p^lo0Kk%shcSO8{7}fKUuSu4CQN(cgxdb&L?!Q?h z;n(cuva9>cj(Z~OTz8^sQa4M)oy(dwL4(*F4u8%FJV+Ktrp#|sUHL3eqGPq?zw#7y zM9u8hBHt_|{!A{tcijJ&7BSOZ61hHoIN*R(6ebVB{j0wScj&5`Q*iru2aoL>^n;Hv zr{{9Y1#o4x+GfNYF`1Itr727vT*c}{G4;X_W6hke_o399MVPrMVOoWbh5o@>?eQWeEc%PT-UT{BfEaDZqT~Ff` z#Cy9{;JKD4D*8TNY`7FZfiU<8Kn!Gso{KF3z}quZXO&}69}{^(2^3FH?jJ0*Aj z)7tcXT&qrYD-p_Sgg8&1wg~g~DKkB(!W1ECzgZhsB{1}B1~~g_Bu4RX( z=!7-z0aip|IQ^c#x^Rm0viDFD>8Vmah*QJs3e|a{?cz~jn^-b>q<~?*#s$J_0BW=+ zGLZMu{8SjZO3Nxt!Xu}tEBo0RlTkfu@lYbN#lfkU_fy#@3m}mF(bE^VNP&bm`$N2> zz(vd9ZZ9>`pUoU{b}K)=scD8QruzOZri{&Wu$H1RM!VqlYLUMSpl=rV<%%3D%7|5J z8-AIMjJqPBWc<4J7g|%~)PADVuu7ipE3lt2x~#w+Qc)ipHKgXMs1H=CLkbk{hh_q8 z>cdh?LeQ+Y>)Y|IaTXs*{7)C?i~V#9xd%-qi*fYUzCF}mQOkvK)=6!uG_6gS+1?ae za>xPfNjDj$lc{;EDZ8Y5^lPv-17Av5$Z{2Uf_=d6_E|H%Kg$Njnkl$mO^_o;Yofyk zsqeL3%979{=JWK6THAKHJ^MKVpvt2oyO7J?7Q%xw{>!*oi@V5@$=*q^swIO{SesprC=uAGNmS#z&5G9`95Ip-XJ{hCk}qX0E{;ay-8OxTKH+i zm=12K-v|zV$$~E{sg_f;rL@Sy+FG`0fjpqz4NuKjxXXBTdMGB*M|vwsPSazjptD(x z^?6mfKk86%C&Uh&n9LT(OzsjCgJ1-28dFzUGa*{`u+CIhg!2Hb>_eGRk%s-NYUv55U44lIGXHzp#w*QQRT@cIlQpVR5^-&SX=AEl<2sLk~y87Zi9Rz^wIM&|6SBwe*sQH`4&~6KsMx_ zh_1Hk%?X!?H{%;>Y1)~&14*JD%1_a)uJ1}-9x$GG`^gG0HYy=%t3lA^w3Mp3@!A^T z#I>4AmyO(=F5F|v3RKTso$-Pr&jbtFrCiKsqf$dO*}ZBLpQ7ID#2s5F@&k(Etd}_2 zy%e8f+)LS$KYBSY{lZ;(a&uGy5k5zUjwfJlcvQq%W}CJ6YHH*chOu855X)bWkA?I% zUe`{UW?Y?{ePWuSXg;>zQrzr1TMz~=LR6KrU5Szf*QKa0>`Gscw@W{N6i<4xN|}d^ zI(BoPoV;Au21k&n3_Q#dnal$t!)woFqECjB0dXgJlFIL33Q`8dY~l&jzx$#yalT>_-LC z=1VQt#}^YOS@X`%UoZ9OWkp}5vb{!b7}Wmj^!=46F@L{;z0qJYSgu9t%-+Cwgm14R zsfjHOQrsMPjQe+U0nT6NpFDP&#hN#x5}l1d_BFWoL-B0Fz&)~XJF%mJE2Lz6_vwJN zRF}MRfLAw|KZAQkVR)S_i!&L68rp*+Y40sR4P8$`{zRV>uAR=&}Sc-uRT39Fu6rrneNw zUBMs$iefDTUx00K{b=#hWYc_}RH*`19iX3|< zPxi_lE&+@ARL%|XaRT0X<2kBr+ln*>pF-I}wrN@7o9*t&_h{Pegv}w5@hI1%SSS!m z#e>I|{VE!~%gK=$nFut^Ntn;SL;^+WlWE9nyeR&c*kiStxxV7f?rdW`afFkB4Zf4@ zW24_b0BV6Gr7dhGs5qvL0`P*nH<7H2J&Si0biTT76utp?{m~&Jas?t5>lhRM8aq?? zJ+WT7bGp2W;dt{4`UjTYY9{DV2gf>b)#9@J_0rf3)@Gj}-1uAs;1FpYso4*h$6A%` z!^au-IztA6>XNs2hC*7iR>jHHNi^NVbIa<;y=9d#n5%yU3~C`MbSx@9o`1WKj+X>6 zb?C}@Uk$9S(oK7lZ3ZB(<^7=I^)KHD=7o-5H5|~Ax^|JG8_F1TLLKD`>l?> zy|;F7>1~EaAVqxThY$gLhs%ALmUYS zOISOnYMH5Zfw%33t!OdeND`<^d1NtDFYVW0EnPN~$neg2Hi^Nn{;1ri*)`*br6EHmPKyO{Xt5g|(m0 zcS-@zlh#>UBrO#^>~vtv3Yrbl$2``O4E97?%VGxuQL+&m`rIj*kc%*-^o5yl_hf#8 z`CSE4FtN}{72W(`7C6g_IeRlb)zgwR)46pw%u~5xU^J=f+DEp?l1~-ABD1$dbTmD) zJSjh-o2n!0Zf;KEej~9{H$;t`^-ih6e8(!+_u|LI7E5`VbdZ+!9qM!Lf92i=xb1uIUHU1MTmN48087uEsQ{{`MuBMR z-nKB#2z*LPGqRI00I@!Z^h=X+8vxwRpaq{2Xka{ufgg)afx4db^ij)_13Nx90K}av}Qqu+}xLBn^^QvN=Rxa zsO;*-j?!=u>kVZTSVug3Dv`13XhOMW!4`@7v@uQQ(9~%1@cc|o04NMY%LI=*u`MG8 zE$Fu#^)N2rD#{BO+>AN|Jv-$)To|PT`A@)_Em(IZZH~u+SMN6Zc?#HwfxNMMM8BvuqgI{b=Hz+lqS((IO7GGnP$~IJ6q=WmD zo0)^Jyb`_b4zZEWP9DC3S~AD;;m>2+Z{qLDPHqmv{t^OJiB*NC63)oi+ZEL*Xme#K z=>xiE^1EUyE_@dqs!?jaG;#|I?;6LedNud(Zy(J|P=TZ@-43S`8eE1uTeuPA!ys68q>vCvG>=rvduaJGkx05#=I-|RQ(i4;woI+ftALhgm$hvL-Njd zRhiqnm&S=rm1^nEC@7Fbsk^ECI9#+#4YuI)#P~$-;W}-Wg*jXIJPP~9mqPmt&%%kR zk~o}S%hs-is92jJRkSRX*xdNB*GpJ^Ih{&Y>dJF?-AI5y3$?cC&&Jy6&X|`~D^&a^ zRkh8>Kn8=;`KtgWT}Gh;0{|{R|E<8HM}-zUcBz03nBhG^UBc_+;i+O61Xe@1#_cWydu?5Q2?+TJ-UFelhOQPtX6NB!F)H- zvgqojL;vfYtZaOuK=uthIw=xrhT=9k+F<-?D5eG2Jnt$duC@?KOTh+tZLgwL_YsuU zFb)F&S1v7o>hN_1^%0~%Cku;b;wEU%x>vW3Mx}+mGc=-DxI*C-BONeeMVjxYYPkIA zWFyZP#v(J(V*j=yNoKJBvpyV=Wi3u{9WnHvdGV1xd7f_-G(ufJjq}fP_F@y{uMiXq zaZ2@POA;pm0o3*j{d&9}GkS9!Hn9r18FZ2P7dHA5myqsTmwQ}54AM+^U4z3_nB0~{ z(L|Ii7|9R55JB277s=v>;g|$sIaldIOTzB2WI*hA*A^p$%$kLg$!>VddUOoY-24`=k6;1oMsi%Gl^kqm1 z%x6`#YQzp)Ja+JL?`HhD`%NYu$2262l%J6I!=Lxr#CwzX@m|G(GG;ferz?u1Wx}5s zw*OL1T-?-kul{6oLpe|?Ggzf?q|_1L9BWLl{WAM>u#yR9FySDns-lZh{hU$meEn?4 zL6EbQ*SLpoG!q59BDSv{6xp|>`*mDzx`vpgRnDE%>CznY&VNkdKHl%4d#lhO&o__xB7 z@`O)jrT5~F2LtJiP+E~0+Otl}%I@qBd-OGc_RRX4Kx>s9%``M7H5G@$qQ4X zgEj6kBh4qRz1PyUMnL%c{3x+f@Q9|1%JOsjgl*tCg*Kywc#LQ%d-n z=kb+@TEoBB*om;pf*95vy!9klWc~Q1qz(26tB@5MHNaw*V3yS380f1;r*0doWT_Du zqNb(>2If1VJ@B7-vfXn2xQENQ!mm|<>4e8vAY1%`qrr}2H^Fh&LH$zQ)zL8@vzBRs zmNCiF(Cy?T;@J!o!#x{=V&DMsbfbJ9&`3Z{dKgo%*`mjYNVWYTCFk?(9Cr zxwT&wOHw1PetA6mZa;k`zB6B{>MK$ye-fQNdzBDaSEp*Fm6B#!AVJA!O-fSzH*Dc| zTrwc`+dc&z{`Z%B_dqT^f-_(NilJBlZs*jSq`d!M%DH|K5%ybo zAh;K`A0*-#mf&y4FAbZH&@P~og2}Rs_K&4KmsJ{(2db5WjLh85H1ySn^@wQ=kGFni z)BA2AGQ+p%{w%or;$faW3u+kQ5C}Z+U1dw9dpq|_y*at|GM1txd(RhB7?$k*0OeQW zMt{C&kX@=L=LQuuSD*aLVL4QxxjMfV{$mO#aL?!aU;_y)K6nAh@HflvT<@2BdoZzg z@*hg%~v%e{Ikl#op(#KxM)QqA3#)B*H#*36|(>JS)bZ&%AG* zg;4bJqFO63#cH;;Kf~@G`u=_wIzn0PFe`t-Dm9#FtnNyT#G9|ur5706tOVX5Dn%WP``Dg8nO!Lr# zy&wXH?hMHw49RNJxE<9df;zP|**+}NhkQ^}oJ^HOkMYJf$FauqoAYH zpIHF~wZ!hr&Fy%w`3Yg+o(bXvDFpKePym_&|6(gAQ1_LY#c~43APp-dQo52d7!=$5 zt7qa%y78i!J^q@sO5jERcw;2V5#3ZH5rNzt-9XX86;M%%;lol-RIX&*j+Bp8TJ*PG z@Dc4`N93u5HA|B+#sQuJw;~|8@0EUI2{Gq?gavqLJ`ssw?G54R-Og0ng6UT_xehq*yjV*cL`uO(`v}2o$y9tnmcRX-jrL ze>eLg8_B|wU!JIMsW-Dqa!6bN`k1?j{XEn&wudKq%k7(8^C_G0Jq5W!nV{crcOt7r zO;gj)I6_)v6-`^%!C9@=S+l97t1-LXk9|e(liwM7edNtYeGiLLbJctAQ2s}0lC-ZC z_(YLVV{k%qUmGse=Vr13Hvf^Vf2l6PX53|;OLd-Kb?GPUkNBO|o}?ly3faQ}k{tMz z?7OFrKJ9bVSntW!qN9r=#F7IE?4`?j>-7#c9^Lhc6vbjKx|QZ9TE(>yGcy`%X2!i` z@>uk6@@YfzCz zNbkr{uU9YxLag}Y2Dy$_3sd19&VJcbIK7u8Xi38JhQv@gC>wuRXa$1kss(;>#~ zsg`#wC2@r4IDs&$7%VV22ba8g)>4ih^$Y3;dm2T$1lO#0mx0YPTRY_!gpJyY15)M& zD9^EYT3E1E()liIas+UvZkq3^IMTA|CwTs$W>V_1YDE?BKD|H4PiU<7&sMmoO=+bo z4|I~ULJ~7Hp8(dR3F5}yt ztkV8+G}N0*Vu>?0m3e1`JK3xH*1*q`{p1Dw;bN70hHyCJI)ye;8%6wye$u);LdD`k zo1gJSjjjILUqfP8xed7=2R5QGIYhQ}Iw{lem@owd8*SaVVU8!<&~!vp4u6FUVm+!kLa8lmAK&k*)ZeVbbRV*)i>Dx@@sCRD1uf7R7`uPU5?Cz=-cav7~`A{4{|* z>Y?}=6L>JChG%HogOMT-D_q#yIzxd+JR-oClFlH8;jH|_8rev(?te#uq@trwrxhcMr^EU#a7J@jBt9I_#zkX5aYqgABNhnwu6HVDE~=GNFc1YlCWM1IRk&`alVF*Ezj zD1$N+&Z2b_ykmVDRNW_TS!!Kp{c@Vqy5KHZW+AIOpO?ECYRC3*-CZ6X>FzPT=e(L2 zaX@M=H3Yz^N_#Fbb`6kYN_7NPuxrfKcKteP0}|Z*llVLBf=f#%yYFRNC4J2;vHZ-U z*Kl9I$syh)8Aae&aDW)FTMplnh&(~Q1^hx|{q}P}WCK+p>=h&QP4L`V+;9fMRoCfr zM8+&rBR2!j^pDV0`NP@sjUx{qmwQH?W$F^q>Y*&>lC~x)wNHaGK3>IrHXY7g)P+Gi zl}55b&M?KT3)gh1iXjSR->sk;2<4FpYgrhfZ!yJy_Mzt{sw3idFtFNg;+^{H;D)f( zFA|~73NW;avDz`8)ZIwn@ltBPAr6i1w|Q2*Nz0_C!35s0Q3UJHNNh$0-T=hTrolJr zLFX!SJ3nF$!QR)zkoOm|SNkEwj*XM?KCSx6k-G6dm0vr*;ehxG^!xr)KGGATaHIt3 zDWDHd;dyvv3NqZdfrthkIT@kmKO~T&lJ*oqLuV%_U}mjcd= z{wEr%8U0ezGk{P8Iy^qd1u)}UtHBiiY7C>XYE`|Xj;5aw_y=DEI+XQATKTZYsqgXT zKmr~-whUpO;Rm9Au14&sbw8qpF1Y!f2%f1tE7p7m8w(2CsC0Q*k@AdIeUI0zE8@@1 zA4cq_=gA%I+^rD37Mqw}-9TpP-q&>wps_A;U=qjBo8kd~#sV+B5lbqBusCIy!KSi@ z(-H9<{BiIrQR0qw{Tao zD4{o6m=^Xsvh#8_G?^aAQ!>5X(b+PzMM6egpdVRA=2srJ9iP=aGRH;CIc7hv)-y5} zUv?J*2YbtVe1R!mvlizCXySvm)mw%dn`sQaZNNE7OcU4?Yfv4ra*#s`37oP?kn{j)E8g>)-5E{cL5aQ65Z0>9?Z zcMGeGRQ7FhPHEQzg4iTm0{W^E^t{I`u>A1ea_%Uqzt89cxRVXNhc5P%nu*(z6P_YU zpD^AI+=!mY#_A#iJ2(_Yi}=7~ZZ0fY^~fSrn$^yB{zuBy7;&tRc!Q^1&6`JS@p=M zjctHUO$v~mQqz@-iE74P*c$w@(ryInnxQbTZHJ_wb?-`lL0pRXxBttJNz-|~iGmQG zmfz`b9W;CqrOe~B)^kky*|%^8%pf$xS@7cOE{&qkuK7AV&e6E=;2;`nj_FsUw_3O$b1V-)Aihjz2(QKe+$MPZ;a38xE?Xvv z?a_&+KLuP8Ee)RTHg7KhLogknjv42vv_tAVn_Ow=Dt4j6zW}LpV`G<@Pfa0G+DM0` zPga|su8QbW6;9R78TQXbsF=DofrN$|rh}^P9yDVXboaV!91vP3wmu8NPtgI4P@HHr zeJ#Z$w#e(q3#|{}ai-k^K|y#KNMB$>rtdsaDBwQe(7;%Pt5BmE!by9lBJn|A+3-)b zbrGEu?am&t^%TrXg3PH}HYOzyJ-~;+q*74;Q~aG8&FQl>Vpuc=^wHVNJbC9zmc=!Q zA(t->xQ+vvl~~~$dKE{!Fr?89Bm}L{pD)pIa2R@YUe0km`$#1fOovNFP(apJa{C6h zg1&J=6!mfv(ccg_64`2GVmR!ko2ZkkO1SVo{;7wx2dK!T9O%T6^p5y&zNoCWw&b2^ z-6T%Hq2{6SnmAKJ#bgj0@vC5zGFFp8stDu0sb{| ztb4xH&lNOQ9)yN^=vJmqIpI!5T)-9g~73&0*cDM!R2sQ`SCChhRUXI;cOYPO$h{n4flR)HpYuerfQWoQ*DCJv?=@F@%=>}X1y zs{jr|qxCfAb%#X(cMTW{$>pv)mA!*Url~Ps^&BCk=Gd2iwUm%pc7o)_M+}RiG4h6? z^lQDxUFb!r8gr|WqE$5-B$`lFj0{amBELrjn_aD1AVULeGJ!Y6_wG{T9sFlmiJTg; zBa`67sx+6AAbgOpbT6wD;s_aVm}gvFeA#HEJ=>X->dqrHdbzw)|2*r$k@mHw?f+=Q z1}WkAph~GX!{{Y6P%q3Do%HrvU+|Y>7QHo1LneA!N8ukhdC#5*r|ijNd=nICtQS^| zqP2oNN=G=mcB9YDQifhw*LkC$4D_%5taMc;6h|Rx40B{QvPJu0&&M6vma)eU@oAQ? z)>!2O=<|u;H!l;(ngt;`18ltIJ5Nm07-nk`^rk1M3bNqQEIgLm>Lhq-s<-Os+M^BQ z4MAjvqvbM)(TF6Q#WCgtSw@joP3GtffyVZ83w7@%))zl~0MDlUp0xP7m^my<@V3 zD>VoxH~pgB#p|eivi}O}m0H&m?dtp3&0n2m9WG;NtSY50Q+54M-;)ORaIM-zo6{pNt+FSE>+`NHQt*=!g`e*+Q41e!{V(B1YhlE`_x|ddqvT(t zU`KsF8Fy_NStM&~1{(0lV9n=ndKwYLUw`P)=7?Y{DjQ)n&tX}&<#u|GFh#d! z6ygYa8i25}vI|Pd9ze8 zrgVROZpSyDV^x24%07QKS}(1kZ5;afdmRpCR(uDHMds@4XL$Uzo%V~151eWr5f7%C z`)kXhA|(2TbRAl;wTz!jgs}N(EZzl@Z{CA>`3`*C8QBWQ9!4t(gNZeCbqDd=3L$Q_ zL9xN@HFW0B^5!}uyyxwLboxx+yjZbA*H?=1VRw;z)hN}ZC;q6(vyf2`Sq6JPO z&l@2+B0=NfyQmET0k=LyET3tiY!n?3{C91kxvuRp9O6VOSomyA?;yqGmK{X$KW9)Q zLUgo4fI-yXV?-H~tO4oWg_C6(5BKjcX0ze(2VPwG9i1yCGcpXZv5RZ`9yC_`Rh;8@ zF$!RI63sx~eNe(scuFllRN;hm@GiS%YHO`E@!QW8cQyX$!osTO)+=GRydm>U$ES3; z6{Lcj{bo1WQwid~uN^gPjJTgEtNr~69}4UBerd7prd1OSTe|i5(j%lF`_lbb&I(fZ zx00l1rL82miNXApG~IKR(Bv$5=i-j%73T4Qh*=$YUnw<9N&MPpIiqQ>;&n! zZltR#804!YGWt1#e}j!a<5^ypS-ZtXRBWQ75Za`C?Lf(*(zLbXFJHl81kMSRiMs>} zI7%FKf3Y#@okHhi303g^D~@Uy?j8*)u&{=ufVGFg#lSYkS>3zyS8;|*C#Wz=I9YeD zdvNS4t~%(Q1(FpJ zSpBSkVNbbEgt=ZIKB&%+2)Myyn5l=JI=g!=Ev#pLRF$8|Moz`^3iYv*vc}1en(cOv z4PB|6tD%_@G!i2b5U%MQO6KFuM0n`0^z&&e*ztz_8QgHs7S#4`GpYB9`#9DN_0k#d zLR(O*o??DViHm(GP1VyD0lox4?jG+@$6Do=XmT2K#&?i5%d7;0g*6RW825Rf<*YTnEt=@l6fS?3dgzpQm$D}VopO?d=!;NGiUFJPC$6nNgbqscR-U5@cGaQ!IH4qKk@Qtj?PIx$DHQRJu}Gxsu^jspKSkeF8`Z$_l!(I z%ZL038S?nwjJZVmE5rgtvFs`)o$4CV58@wi`HKFMica(sVaGZ4gydpk#a`{pcVY@z z^3BD|beh=XmBz{Sk2u51&8qC|>b)#32`S{(;-(khjTgqoQ6ELmpB~ck ziTjCCuRdmP^rEuRRn0x;Mkrd|-<(gufkzsuLF^~t5}fkC-Vhh~N02{)#m!mXUB6&$ z{`evZ7T|~SbKhQpaP~$*Qcy8*HC0qz_1bNoi%;TfV=b;$UT8m8{yN-DyjNs$npW_M zbXE2xP=N=EXj$T)tuKiBauO!6gK)Du5?;UZZVmXsa6(3?zA?RD3jM?yDv3c))Ij-8 zp3FDuhgWRR&#|KNz}5@2mioY9{O)h)#6_q9l|-^t0##>v(+4zOxHm}>Jm*Rym2#it z2%Vzs^k>@W(Aw{oH?~mPgO~x}hpX54MHdgm8I4E5OIB$%2XLO4$ddODn;|Lh=Vfin z(1*(r{dK-`{K1fJeYa>j__sz*bwT$T4+vaOOJ?f8yZr6XkZC#j%9s896q>Wx>oH-s?T_OV@uYNb~Li zFNcP9{eT~lW0M2btHNv>EnjCYq=&H`uB4x~3*6$q!R_Abiz4)nLX9M>b0z`dS?tJe z&hqvegdB`S-BVNWhpE^f_4Ve?Tdyb=b;c@#-C;KyLX-{XO7&;>)Ts2yq&414}>>OmACf)3FEq`94N z!NOAIyU@InhowsA$^KQ7;gQjbmP}mT)2EDZdfnl(-k?{|m6Ygo8H>MkJQ#*Aj=BpZ zlCz46uyWxmoCCsEVK_C;RbMZ;k86nb$VK?3JY@j)$zTg1jlvzyZax*ui`~1WYZ2Br zdq-c-fcY0vqSs{kj@&cq6AJ+1(7T$s(Cuxy29Qzdpne~Y;-4XL3M1vRN+o`8_=Iez z_fiTq{OF(`FQh|$FfExT>t=&Kv&T{@fB_(k*1coojQCmtSo%X?F=&{0BMPHfHqA)D zLk*89t*2I8K*+yy1*3&Bux2U8kC2@67-R#Q)PA_T>0?E(vd(C{BRp*ZM`62f*Cm`1 z-ChmiK;TcG6Nd#nilzMi%f;}wLQ=YM-0rb*U$)iQ{^u+P^FWtMJ)j~s!Nv&oy+0jG zGA{KRYM2H3Udc2VeHiQCj2!x%%6-4>3y5T4|2~>EyNp&BO|xcf+)VG)eSh~CW$&R( zTmydnZ-@s=X$#-W;<9Ua2&a4~;v|-F05u~`Tzt7Cp8z;D$;Ubb^L^vvFZekSs8_w722f&%?-^vY{!N&MHF2 z?{c9b1w#UX=SX(amRx;ig`3$;iQ9I5!Csr_Jxx4N`1OfQfEl+lbfv8ialXcOxO}jJ zgAuyjNM%SC7Z4#~#R!$5&=)rfiu)iSXo4#bRF=Q1T#s4u7PSrzjSB>;j692>EmeGMHb}<>r5KguO ze`vYinU90j_E(b0=i4QtH~YVCKat*W?Vlz)EbbDQ*HOKiNoo=}aQ!=KFk@M;Hl+J| z7r4*h-!8I?;;UfN`$iUxoITyLW-ff|IYRULz>?l@e3X5nH1=xFo;6#k68~UjK-2UJ zL4btlBZbLVGNkERfCmV}_f~vCRF0AG#s~fN;{>`}&4x~QX1AHs7~@{aOQ`+_&Df>` zDt-JsVZQ)Z^)b9rixBn=w^(=u41WIk}X|>A=brLwv3YqfLtC9~V;Vn$&$qPMw zb!17>A16mU?@k|Dk5!q<;!OkL-{bn8BR>hTwx#9Jjwyz{N=*z|%oy=a>S;DTe#g z&$VL7-U9Co^AP4t0VhODLkQt_P%PC@e$5ZD&=~((g3-su%Lprv>ptK6am7@@1f=x7 zM`MeT-Qj#<$K;KkUTA%dPW^ku^jUrr(PNp0zDu8w+wu7K(`0O-Uf7$-IoGQ?rq|Jb zxr!<*KLhme^;ayt2|ZL+y0Ra)hse=U-wpdD*>NPD^!KV?6kyUx(lw4!3iP!ybwf90 zYKTq|4JqhNod~jzIv%PNtTV1rTz)tqUc($LLKkjNEZc-=U&?ugw10i4+kDcA9r}fD zt5xIO<#@pTg`|TqRzCL9chka8TN)_*KslrlB&QPaM0IDim6J;hOHok&+-@G9;hWs8 zB159aFuyrXulU_Gn@DzcTs0qJETiFuS4bc8eD^l`aB;dSRF+I2nwg~Uy zfX|6y{n?g-2Ci@EDi_W;FS8TZOY^I4v&71%Ymq6cexbVF@H;a(Clth-sj)6$fMz>k z^|Y1O#(%*4m{DXsdRI`>5mo1Ai(x0=TtIdyS(%>{qJ-;aR3Tg(>IgvuD_s-Q=M_)XCwhchM+G9)-=#f$^o=Cb z^B8kgJt2o%(s*ZoLJfh7QwPJKblt#)hj`vn#|0eWOr+KD$R$hE<>n8VIh{jf6EgtY zWdIH?N|@t2aKy4#KvY9!6ORxdZ~n%^lr3*^0~QM~$@{Q5oUhr{9U%R5kzlw-Cr@gzLmoHWd%c4N}x@wqFwHL z>&U3OkcbH6?WX)M9Z2PO95i({`dC1ldo)beaF5RwN7p5GAmEW=ndz^^)gVmM=Bh{E&UcsNPw5fzc4dz2>( zY_Y8^8aSu)en;u3*`52r*G^Kn?SiY5j3bnn3?a?S=0X7X@&Y9M!b`2Qv2%8qau_1! z&&wx<3QHX=lW^GwaVv7?VrOj;19>0khpqBMO4|BoQ#e0ijhDbZZE!97_!gW0pj0oz@M*CwV!O8Q``8W?NrcM zqrH%VQdb;^>YCq}54EYp)ZAAVv*cWm0q#huue(!(>C}9MoemK0%ZFl-E*3BN9=t|& z$Cdy^Mz4c&^rLqDlV5z|cKzx1^t~B?Df5xOT7yo3z8#A#jAfHy$$h(7np%~wsO8E3 z_t(n_ttq@=xtO=G(TGPnGBZ_zGij)#t<| zfgd`v&rhg5-%%QHD4$*;!J%F!&!?@GwBSPsw=IGJn38F1>$XM}qGRaAoO^%!CiAOW z5z^JbL;o4<$=C7rBS#Z;EA7B?R$1a087ZQ;oP_I_dSbqe8ODqKv3HMN3VQS1WBN2L zUR=A+zH%)^yQyY_W&o<-zMt*k=xjJ1R(N}Q%Tyv{16 zYZ_}|yJ>Q0PU@|+fQ54ZEzLl4FuTRT^kHAQ=ntzSAoyDT*e>!9uWZm}gqGUwgf=>& z^J3lQ-1P|Du8PzXq7}7LJgkVYT*}$Vag7@T=daJI%qGjqck}|IlotUbRW>5j3O`W? zLb7+W#uA!gJUq3AK05q)k#!-@#}wNpu_z~*Rh3bbLw8{_*6J5=$`P+bQ3Q{F1U@)m zcdwk6Jeb{aC({9bYLR z0tLnew>LG5HEsK*Im){yzwf9HGMWgBb>-ei_))=0t*yMgzt<7gtgDz1S)ig`JN=$H z_Pa|#THl_(@5;GPyu_ITrBorok0I zRqHcq4qc!8FhtBSwRWFlV}yIh-((W(2~nY>FM9UGNf}u=9h>a-2$}soFjG@8 z=pBHOtM89|E||Qe(~N!DPmkY|l|k~OUm5-;Z}69Ub&N)$-RZN3-UN|%SmKwh`-k$~ zPYQBC(nd~Bm}hDVhhJttsiat_u{mtkK-{=D?>i3?ZqK5ZU!4cd+S88kGM^P4&jKOq zpPSJ53LcoA(xvrbV@U|1EOLY9k%OIJ`F-g3Ldfa3vJ%2$;_aL~s`ozHEWeh8j5uh6 z`gAjHJ}Y1ht%4z7<-L(}DOnmi{l)dtPIz zxLN*jDLq?&`8g;U=p*@!Qs4l6D$af3HnX1uci%_UOff31WA|ThTRv(B7b0d(g{NFB zCIq-DA(P;Xtr5%T8v#z;$$MV>zg!t5DFh*eNQPiOq1QchqHnqrir%qDcH9VQ}tkG*yOEK z$Fr6ITgG8Q&UhG1z4`EO{L=od&$aBY=~6+r|AhFk4r6@0t-+tg5<*7(-Ij zL!;HDDW{!yO<<$-6rHiw*?I@BYCO^%_Qzf)1JxFRF|)G2f_x0Z#mnqtR>f0pAZtOX z$`!u&E#o&^iT2wf1me0{h!xuf2CHNyNJ}1ZBXBur!);nH)tcybrnB?QgM@fO>!wH+ z2Upf-Y^WiZ!t&W?4nYA(N~Uh8*}M{xP}R;dZIF#*(f99Ye}a**ClwWB^TgiHaHGJY z5RHaUL@zAdZrF#sPX*olEeJvRY6;|G3q;XrmN!3Nl@wTw6aiOjn21Cb9#hj+ejrj61X?<@y^qUn{Pnb>ay@z~v_ZmV}6g+UD)~_Ne zow`edVlh@N9FUK6dEC44ED`ty+8kanL#HW46WIS2cZNTqR{RlnT=iDW?MM)}~9pqu(SY>*}$SmMSQ_5>14#>b1f5nd+%|x>Dy!G*ZmUv^H zy52iJ_HjnS}vc&FazoUbGW;^e#r`Ik@ zEqPwjFNp<`sJW%%$?uDu&4y4s7a`ZEqb1feCw-%BU43nkXG&?D@e#qT^o;FCQjM9F z^_ev?5FgxBUFKlJ);$jpUhT?Omeh2h7?aU-=F0 z6A;0XP|!LfF^yHfy>^LZp>X>vzsu7=>3qMX+MwyHTk^g871hq&$wYEeMR4LAU2&BW zc@|rA`sC@}d*^cRK+3`SY^^Z}Sa&BX&B8f`)1}|8Yv)@jj0(=L6Ome{z#eH}^hdz2 zY#!Q!-+@ION3B}4w=b7x5vEIZ8$pkEp=eA@5j_ooaUP$eG_wo@@XdnKg8-)ofz^h;Qs!SfWqgcN7{F3;WSTFI&{(UDg=c3$gW6=Etn0p>%sZ$)AGdZE zQ-|R$>MzUW?zmQFwCgVktwkmH@jml@_kS=`u#K4IcSBN$Tt-LVsAu=h6Z^{kJgIdc{b=#_FoLSaDri3`23uHu2|gjm)x;; z1N!gz;cq(pBqk=%O`l^ddAj7Dq~7D~9S=NGGPg74fh$NBubB+$#kz-3*<=hW7u_%| zV%Q8G{;~&&S5#-H1yVmNY7Z8D_R&FN&&cWGx8~6#)Yyu=5NEvkS)Nh+F3CRhZBKcb zf`WW?T7=#P$%q0AHb|+ z)DWWyPi$p)Lj5IYvYd(h0EUvf0Vrx_HVY8~%|0@PSRwp=IFZ=x%QJiq<6WC@Z;LRuEvW3#vyQf5$c7Dj4j$U47EwZVf@g;!HQP3BmcK(IlOvM z%uER3?*zpf>*I;Hzmo-!R|x>h@&>wR=HgH4XREKigX@VcM!c}B0s7A(Ivz=>DcsNIROrpb@Gs17*udbh0gWDUBRj*wZ8B=_ z2(40P)(aZTg4P4Ynr>Zk#YyhiiyklZS6*s05v(ukXgoxi1>5h(G!zGF}yZwaU-QgZKO5-AL_q+i$Zkd<^6cV!}8YBad}9nO6sX zf%$l&uN-QspB?<1CAm}x4!`?~w@~9{ zC!}`OB8(-69xpG5Ij7p=7Xb`L&K(#`$~N-v&b5(E z>1W`YE+gyS5Y9jam6&(`@J2O6zLp$QYhU+%dA)7_8{uI>q6LeTW~SM6H|XsoG0w#d z9S(+pt`4S>!Bda|4n)U}5V1Og^AJNR{IeAk4y^QgxcPOK`5>9y(YE%Jz0z%oHmKftt+XM_$k zm*>2VUJ&DM5Ne?;Edpz>Bl2tJ;dOemE{HVOcQ$&}>g|5-@FK{yZ(4X9!KqI+VJT3N zv`spi*FvueYHi?3-9!~cOFoF3_+}DCMUs;R@6Ec4GaGKx3EnTMEa+E1p4%RKVfa?4 zdB~{t;EwH#V5L~0?(!OfN)$3k{2sC5u1wlkR zkW4f`dS7i(Tk$SPS0Fm~h5j5amc-vzROBA}wX?x9J=T_})Av|DvtHc#ggAAG=iK%q z&{wuSSG)8es*if9ALT``y;+0qRk^S|tu#5A3K@uAziISR1s;}U97SwGW9bSb%FRw!G_ z-S*VJFF?z9My^q)O;+g9)E!kU2$b0M<$6|<4{dJkNVsivO!LT0cO2jqs4kIVm)g2@Ow_NuS-4tt>-|9M~nHb0xU55$O` z_*_+%ee6)u;e;qg<#xMI-81S+_I0q+`g6>76ksw;)%ol~fjXf`S$F%u8xymjmG5f* z&0Az6g;Y$x`p^sLW;mGmkwY?RL@Ln1@42lEE*m!PqdJKiB5M&|`U%qZZr6j{v?_lR z&n<~slkeRQcuHLpOZWF~VbRR<^6wj{#}=hw=PYa{QZU%wAm;F1;r2TWbmxv=~;b3o&AY`^r zG!j0hZwmN7b6*}~R3YgiERd9&Wt7r3HylZ&6Tt_AhBv)PSe+#qPw!(y;mS;!_<&i4 z+b%f~Y@hW(+m~?>?5#HDq~0nqt9i*GI#vq_Q(k8(Wwob@m-}i%Rz*Mx(%Sm%ky6zG zVhlGx#e!<4t|%41e;BUOB#i#+`w$&|zS6n+r5~qD4)4UAgW|b!hwO)^8&lL!Ma{7` zQK8voqAobJl#1&1Ov8dezjo4Qw`$A$6D@}QPF#1)uQ#$zOMiSjcmo?*&Ec|+xPoK3 z+tRK(s~6Jl6YpD6|6PX7VtH}`kNpQZ`dhSM)cM_sc{0}x0|HF%)weH_qsrvf^#O7i zVljP`^iSt2Bd7(y<%BDq0_3Df=*p%<^cz3oq&y*dglnrr;mJqnGJq>}l1?+r@0ua3 zX*~2NI3h_K2&gN+mKB|}fFVXN@%LO9TvZU9!9ANIG zpWji&VO*yZa#tgFMVX5j>?`SUby31G7E9W0f|Q)tsCE4{>RYl-K&(^f_uGqvRYNpZ zBSAA6uy5-hWM^ZRV_hOG=(a-`WPm)CD;em$=`v8}ZYVPQC3b@a6JP6X1oVC7 z#2OF>m#X@J5jNPg+FE0=*<6-7LD&;Y-Fu=!?-) zs8z>zheto~>e8RYtd#eCs~G2bX(bFYNVJt(@@@Ty+IA=O@!9{IB+vCnG0>&nn?p7t zotxNjZ!<#^huK?7cIokOp)I|$l&s9Jnj>oH|9mj9FfRYW9=a5=+`iQIX?)P-O_i*t zESgzFXRY4|z5e-XrVFyT@nS#Q2Qn$;q|2+DzV}fyj5b8_666s?+J-MDeL zH>>wTLvylxPGfR{P2BW|Q!V#0Xh%$Bptkk3#DjEJh^&+UeY$<3Y??3GG%adH2}2-Y zCIjUMsa>sbIsAA2Se1kPy$$JmVrP0NpGtZ|9h1%Uh^C-;a&#V>%4I@%3_d7~c37}D zb#Ej~lUc9`aO6R`qL7{0;e2ufTTIq_@Rzqj)X|J#ByYZFllNOBZzN)mnI0 zM?^McmUMU_K9Bs_8@ltYS^riKZ^QR5pv1*q{3<@oy6!iXV(Gh$?%*mEeN=tq>#yOa@z zGVW&D++AL+J#7fjiF2cNl0<@fl4+jb=fxgEpI@+w&@U1`${2c)j@A3F+ge_{3&7PF zCcTsUbNYTMO^;h|^TYL|UH4xuWyI0mN0C(H_l%|jQKOuUk99f5K+tl#onqimmLbiWN*`p^*q zLtTJV`N&6Wsa3F8(_Udm225B-qdMEz=RM&X_D5R7lmEoyi3GHQAF0>VUjFl8?*{R4 zKp`)U`Y7@PTRt8xxC_wmtVEI!H*IHLIlS*Ke4k{HFgQ}sN?4yjJIcb{*;Ps%Cg))~ za*1+2Fr#i+PRwR(JDsSU!JK(lLWp@}}=pO{~Au5%uzW2zt>p zza>^nLI#3no3}De$?J>m!k64o`e+}pae<4xv_8bZge0oy6H;pZxePp1<2xlV*YHm; zYL)`H(wOLNhFtQy)Y`b5+#0XF>Ua%39gg+8YK_au)kfFR!XOqTqL)VfMr3kEaf@pW zguI2XffdXtd%F(djn3p$U&}vaN`|3U6s30xI}nWkb96~19Gq~A>7XozULWsncBDeE zE+7^_kFase(x%5#beDZPyNxSL)vLqw>JWaxuI)&{4}A|eFxrve45X%$^^^!&*+N)g*u_}*6<3>@lQN)J`N4K})9(}Kb_5C0ar^(1^%C3FwOyQP^5=TvuSv}{%Kr7( zs04GT=l;DHKXqPRt^D<6SXu?U-^U^{To8e%p|Z@^)!v3`FO=5xoYN}Wgbbv$rDcq+ z+R|`;^5ghwx3^~F%inN@`D*LH+Xn@>CythgL^fK9`&%s6SY^ZV#$Vn$i!0vw;M8t} zq(sOheap_N;uOEYdE z%~3W;iOJ0Lde1dP>EG4pdW=mPS%nvhT9IgrW^_r|@Aq7>J+ zwGrjP3eChPQRbQMjljt2B=FCMPO;~=KS(3x>awlOm!qzT&xTfv(-*qVMY1RKP@d>_ zE+s>N6Ne5@CC-Tf`s@rL9xM8Visycc7wM1LS`qnoRBhO<{0wz^q`X3_ob&qcahzZV zf}67n(oSQ`=@xTyk3^xn%HT%X zVMSl=2pq1onW=d$x-clgL*m1qFEjd{aH*S20yR{tci^;M)iX9R~ z$qEWKbcMgX?x_Z2G`>6``t;vn@DLxZVb9xOWAGd(MMRWdpPU3* zoyPp!nfVyFckWo&(s;rV8m- zmzK%txguQ<$_{Xj+HL#zT8=NDncmhg)C=Tkb!Yr;{}A-Ez^`fK%|xCk#fZG0h9(`< z_RIL@mt(CCy-kZNj(xRLzQ_$$D36sv!?tylTuUaIz93K<57I!M9){rt%tj zpwlhLmvS8tCes(Rzv%yqLqP09!NN;&I&!3R6@KqZW_C-QT`Qs2PPahEh(6lZn;*=_ zKK}(#6-`#AV@GX`_5D4E-TH~e z^8I>E*<-k*1k_J%pv{pEU$u-5@#{*?P&i?tS_Q|6oJ+apH$}sD(sA3+r-~11>7CdW zcP2%&qPnf;?yhyPEqu|9EvWgGv!b0NcPHM)+DL{8wN=xk03!GP5>R@CKkdxb1I>ds zL~Z-2$?6WK*o2zb>AmhC65#~GQzY0s1)LaV?Sp{95e+ga~X zOv?VaxZ-etlLZ2z#%du*vap^}t&SpLhN53+cSXtIz!ooexr~F%bd8%NSqmG_A^&Qt zcK?bVk~NNf8+xRzBb+T-?z}0n;h|Cs1rgN{w=bEL}|0KVqzgG~1X0zmrAEZWH3_Udrk7Pd91y7c_RX0f@4( z4v4yw-9HM;ONhV&xNR1#qWEdr1xo=!$%UR87xurXddKL)%?ns_N7^`|Q2X3p|J;@W^$n`5mH-oD_8Z zQbg(d%1L4*=rES{w1)WHLG4QspZ$w!8G0FM!H;1ioAZp;JUpr&P>m4|lx^SJdPmn# za4x#(&A(YXm_aJ@(>#A~>5Cxlyv*4(pErtOXyQ6Hm2yH}x*8w8wHYgmQam;poq*bI z8OH7JN6KoJ(ZbJ)Ite_nI zA&SYZ+>VWCIyh^|IK6almx@zUlQg4r+xYv@Xs$t|({s6-SE3*osN(;g$Z~Lt+4CqrszBbDt#HlJfqfDVR5SlD1sbT^1Q@ z(QTskTg3WF>qQkdF2@0OIjNqe@}gQ)!$T(**=fF752yH}?^T@fLQ6|8H?Jkq zAmb$*q`y5gJ$yy*GYb)^bezCgYJuxWiWzt`RuJa@%#ZzpreaE;F9?61yk_rn#GC=k zj|uhIp;fp)togWWv`43L4N7%GHDJRjY@@P9px~ zXnBdVZ>=DJv`WH`VXmRPLT+%Wn`63#S^?A>fh&sguajYjnF9frYvY=QaQ8=n%uL6-38DYm`a&tMTU%n>^c|CCXDX4Kw%zHoj z31Mp*icO_Ui0E5O3Z}0$qDGet;`;3FmxfmNw}pZoho+`fFxqW{B$P5S6(Dm&OEr*v zlSn*VLpoi4WLP$Q1y@9QqSgV5ji%Yc&e_>{@M<3O&(!b2i46n+=jsKtuY2&ZQ9#ZS z&L0=+TEiv(Lr`#kZ$tk41i!gl)8JBA4g_<(EcaPp)6u!wciU3o(4EHGtrv{r8N!79zTY~!m87H%qHA)0l~2`y_SmBAr)DiECN{{f4;Zl1 zX(OP2PhG>2Q;m8B{^>6&eXQ9z6>5x`c9bMqJr_8X?e%%Il+v0{Mw(!V%>|2VTe``sW-%9y3ApTP&;!H#?^LRjATzLuKqg>V1`i&Kk3a@RZ!8_wq`R{K z6~XB8Q1>!G+ns3XoWgIMstO3SK=Ca}YExd$^|YJGDR)u)eT}J%IQSHXJnO3cXohf9 zdR7I(>Em0!@Rv4KemxyLID58gn~v{^$R2`rwfM$8dWs*ymeC=C$H#Q`v!~3gR0ju#7XAu zxf2JynWcoek9!?@G9BFj1kr*Aio1ZB@WlX-raM3iFqKoXK&jUL^G6yc0H$}CFbn>F z<1dYO?lL?&NR$GFS^bk4ZiBLjk^WA_aQ4P&q_B>xdR%=h*_5z+wXI-lNZajd#X^7- zy?_c7nX?0H;VY7Bp|wEfgt3=r(kbcjIm~kTuLq0w0VVpqO#{g{H6DZVAtf9nfHgl} zs+5DhFmXe;NyC;ya0xG%zaC~dFO#LwH;Y{mTDrPB!^0s??0<44zN8e3tVH6RZ|M`l z4T#u080wb;-0C|*&XfYu%A%b)xQrK_p?nXIxwOh%%p+P}A6OS{sA0>*$`xzpnTeqE zV$2AXUc6GxS!)%$&KB{4Y`}8khl9(V8HH=WH5L&H27$TztTeu5@s)>ac1vf3w3-WK zNNL5}!(jJ}Rm~hi|aO@WAH2DiGvl(P(marfJ=GW{3#0 z>uXZ*6P+^eOMu`!?O!@>*?)S6AW)az;~R*QBrYec=}ZM230Mpw+zqaGBV;fiO2>{# z$W^ib2DkL{@Qv-0k2nU=NzSD^4X%P_OE`$gymp($`Foi`jjqsEj*9sX0)A<$9(+Z7 z9a$s&b}4!07>0fR)|`H;N(F^vHh?+cvi1VgAY;RJMF{)m^t(+>@G5s}=a zeP$8@vc0{WN>QM=XTWzDT45BP&5US5`3K}b-}75)v8ERjm>P@XfZ|WO1a?xgMPiiq z>Y-qxTT+UMAaD{S<@VJ&EjO0Ta8(Bp9N-P#-5_yzx_h%?D#HFh_I%_k(>kMas9WE@ zn$dJFJofFFV752a{~|NA<;@p`{_uaI@Gp3sWoca^FN!*ba=B6>wF-+r32_ltNN#yV zj>%PE9&HN`1WgMZi-jffF|Cy79G0tTS2{^36ZCQPer8Ga%>|a`;1uQ>`D%u`v zo8Ic!bh|t_U4#%m=B|y+F_Rm+?e)W( zBwi$dZd5;p#sa|fWjBtN-sU;_{(n?X`W~f)c6ds4x&uLv)(pv?A8^TX@$Xl|z zFQ7@9MgvsmfTSoONlvp)%`5={a@xRxs`_h z5iHintwsg=3Ty--0dgk&9JPucCjAoIqj}2fpIU?jB6LnhO9iLc*I)R1HI?5$$Vj;` z$$D1J7@g+pzAZKyF+;<{i^z01NH5THoWL-OOB|7?*r?_Nt<}r{ZiB<~)gn6`6+QkX zE<_RBAP70IUCG?NS~AeY9Lk-jd^YN`r)5bf52O*IvFunH$?m9RDWc~lxGJJXm>k^B zTuIMPc<5?|TLWnSXItMRtx|GLV^)9K`2+>mDUUgT5FETxgR3q9&3pdxq@+AO-+o`S z^_MhyWv~iP4pa2Ba~Uk?-`2Q&)5o?4cm1lZd-CR_QXTyLEd|H@B#)t&g@=3BvCr1A zpUby7oJ*IoivMz=_>sU=OZb?|cF^=;*X6U_w)g$#=Mg^4`e;NqO{Yg?5B0tI?YM;% zha(!YfoXZXd&L-M744$IOU%(qQy{uovo#XW!aLUT;BmgRcY_jd!_X^(UGV^_VZpSmiRC?@bsV|`y1{j|x zjGN?>B1FJceTc6|7c?m(f)Hot-FfRwd;pTxrNB{GD64}lFWvr%&;RQM0EjZRxPzij zT0S5Hm3r(RZ#2(M%02jJc1S5XWaMy7%_i&QSe!_D7 zOhs|$r)$UiTc?cJgPjnyN^H#YxoKaLnu4i%e_TWnn5vw2 z&ghWPKb*!Kq>rpMsqc$MGI5=2lxpb>0kgiZGKpbgZ%KLhqy@g4mfY4HWa&Ci8vp!X5oq;4EYy#6Ek^6U**JC^9%?n)V@NXj8-=2sk z>WsFx=jE{Pz5uGonr>G+`LnXWzX-2EpW^A_WxgVS1Z>ZIEn6&@s26UTHC6<_ipqsA z(m-j&T@o`Q0^2X*8}(=3x^t<_<+(q#SZgnX@3hl(jHU`hl4^kyG(WFkv?dKpdd+Z^ z8WFUJ1ulak!AL3s7dtgA;E;f`AA&z5>;pXvtiT`vxw+^Nm@yAE)F{!84Cx~OZNyn< z!`&Nf=yefSx?sA$3KcMRmH6=7U%D^PpmwZ=UiTK}%Nv;5V6A?>4opat8lZL6MH(Uu)On7s8 zgda9%>T9=hg3)>byRGL7xu+MOd!;z?Xqc|nPOk^5N$&+Z)19815sKC%{-1D%NheK> z&0X)I4q)F+kZB}7Hj2xvo4Io3=3&sYqXW@Ix#&^r1`ZMf3=m-ZFc9eq9e=>N_i2M9 zmLdYv{oP4_ITophBiWVss)&K!2$=!D#yN~C&P_{6rv4j&y_)HmTcw;Krm|dWe{Rzn z8VBk-#vZ!R6-LEzyBc*nJiYX$x!azd9g(WCOzFo1PXrjl-$E#Ns{ZKJ^tWk%>DGdI zC%Mg2A^*W|VUn@5?$EQv?Sg5BrEbklV*wKqo5<7)o*VAln!z;i%OMIv^nmjZraOM; zeEN|fhiq5TxqoriCuijaa52_b)Ik8Z(x?7_1I00~p0Odt6Z=4HAARAj zOT+_>2ArC9s~*aY48DyanN49Ikkfj{O%8hKJ(=7NF>aWNLb>o@XL421zM!N zV;a?bM@Q$C#iDfZimEQioaL^TXj<%kIr^SxLrSwI<@LN|smgB&evWt%Ct=BIMu8BG zZUhkEzBk)%5u{ve-IoXxQ&aELN?56XYt9C5;eHV4=S?b&w_|7r4ld(Pqzz&B=YUt7 zUcdda4Q$@Q8Q}wnzv4MwHwXo%3cn6QHX?s3`&;b*t_7W}cVOE5Z|DeeORRNAgjkMV zc~7sP_W;F{n+B6V_c8Uvp4Xs~9}FPqE+&V`g>!xhk2$wzh`I(E3TGmA_Dr+NrMZy0 z)V>&+vdv*n=5gvJ9;efI8J7fJLEPHa@-T#diEVe^!OsRP_7zH5Dw7@9gkplv^-UfRpkc5*#bhtNI@u|BxKaA}BYx=ag)xj%SR`OdSEj3u3DFhCh>MeH;V=*RH%NJ@&y}ltvrh-y z$YcRiuioUx>)eNM?WsYdvVasS3TE*z~JUQ%UAalrM7N# z@TMz*ZsRa&e2--LY%H7`sH11z3^MlXSIl306ZZNsgM%EOD`aD$6%~jbQ-^wa7<7sm zdr|IFl_!^A8Udstf1=Y{yn#6~&e4`P!>$diW zD%^BQ_$#8p;`8VAA7-ZE>4@i6mwcl4Uk~1h&AkHTWun#My9s&uZ2Y*?9oymwWOoxCN~)tJwaNZI*aQ5Lt)(+`zAKZHLFT|rG%L1(#&+;UB- z$(O*o?Eq0zZS=jW?qPKqU!mf!HwHX04uu!H%au1@%Zm8Nsn$&6M#l#$-;P(ttK6jM zR<&Ydt}zt|rYmb>ajwsXU41ehCU#_G9WDe0-6~Z|>0+balPt@_Jl-4--PgafFDtmTwP92aV#Ku{X8#~iqRgSv*}^+iT*`&7$FZU)w?{5c@b<`*%e|@QRAzL-l!H|HzpN( zLKx0-O=w##zg24wP8YU3cr7IDnZr+sx)sOtKvnrvcJDl?4M3=N2CgNuJSuI5s@3YHNnB%G4x9_C^w?%TDUJ(C(xrGoC{qOK0*MXpI7$ zZSMK^M>y(elw}5Gf{vP;T)Qi1{#;ruuo{KYzdBI3;o^jSCu@YB&?d|k#8myfy4dbq zUpo}rS~y+S5*%LsxSMybI8Gu@$>5#hB6q&KOOzlDZ{#%2whLtB=P{h=<|Dxa z#4KftDnw!|Cvcs8Rjud;7Rq76P>1cr9sc$-H#gkfoXteenXHEbYW0t?2v%-J`ZleN z>)!FEjKafxV}qg+{tOOX^?;Ln&|wnjT&FQzurNa;O)!)j-Z)=_1k!i;CW#b5VV3DP z8B+;#bc9+KSZw>EkKTVlgp{Cbw0{O_I^qRK#1{H{6_7n4vF!-J|B~m*42-00q(Ln- znfD&p`i{sY?OtHL&W+b_khH>|3I^PQ`z8R>D!(Q24tyySY=d3Pl#?(p|C!5nj=&1% z<`OosRA-C1Aaz?_z5Dl{MNu_8Slg-c*Q!TXdTIa1r^-BB1Qk-BVT4X8TP8y5suD%*pQ;Z-?uLdqWX+w! z-)v=N^94Yqm}~?lC9JYU?Ul$n`pU^%VOBaK9wgKzudQ56RS3W_J1T;{Oze$SGXv0= ziUYXDm8^?{MpIb@18fjV^o;zc{j;as#{MmWaB4T1YgOxM8ou&hxwVFl-opl9;&*Pm zwaH)K7hM$9eMsn``QIHn8;(xo7=3=XyK64N28-wQu=`s)k2`7ONtS~&ig+`3Iboic z>&ZVneZ<78A}HR%_TzkDjd#z0fCoi90$F<iiKh!h!}b*oE5hgs`;}J?BCRoDARB>q?{1)n&x};*auQFB7mQs4rJ`4 zAsU@Yg*OKSaz7=!$Y&HqDw@D5G#LEF{Qd9yR&Ek;T?u=l9isUaWVB1ESqIlo;pr0k ziK+hxkTp`3>)o#Q-zZ+0WyU(^@w)N+cbMI{jLaIsT>|oa16abTEZHb-Z7UFLI|(_A z%yRKMFfc>3K;NHScQ?LwKUb*ngdns9w;}hLFksDkn_CRzehShCa7YcCqOp~K|7hVL z@oIn@($S_`w4V6f{>B*aD7Kqj@u>v?06O7*^-L-Wk|6O3Dha<4yu^`b~M0P!WYou|P3iy5N1Au`)LXC@uTZm#E?Jt4$^Z&Y%Ygsg~q#t+|; zJ>uCH4Xh%g)?E@K_3lIVA_GY)Dy?S4ouoz7F<> znFG4P=N(j<5I07E_ciI931noFumr6~Tg^AZcq~LCTu4Q_ViygAqTcdL=$0HjZBzxN zL0J>aN$PNblpL!;78lsGnm%k~!NYntOW)$x%2IjPW+}rBZ;(kUR~#M}DN(}oi6Zmt zRT0I)n23D}*&$;3^XBnj_^qh)M!fN0v+-;^t#1R_@BzVy7r~^g?V6j8k?w76#$z7s z@NV*9WE6t5o-0XcvXPIZ2Ja*BYS2oC0i5b9DMcOJJnRBozDD5O5=*mI(ZBU3FoxX7 zAu2o?HYca0Re~mOT4kBIG&;{q>gPXUvjey6x+T^e+xpahcw@RL41${%XC9!x+7Jpb zsee-!?FF_G#uRqtwrVz2U-<=|k`?EbB_u^K?6*DskQPX$Y?Yy)cpNwqzRl;$Fg~J=avQJcz zjWi(ujl)X$k2@+0B$F5-X$Ql{q{lg^iT`?XXtf_0ter|8+S63D1K8>+i{$a7)XLI6 z?@@%t;>SeBWQ{Vi8=2iwUG)@PU|1S=bRP10dcCoeJp~sRcv|12mSE_Fd~@MuCfijn z!mF7ZCdo6ntvT)JFwKK5h5-J1p!)7}!vg_az)MG8u(tq3Vtve3J8-8tdTgUX$bg4W zbY|ji3Km^vyB0!?$Mph?_m6o~$`wI4(a{M{Fmfcg|&c+K4K__$RH``n>E%(Lo#KYiuP4)ME?@3VJhGK_)r^6M9r1fl~gV0 zZm(^kn30_PhFb)p%PFR1==31Ge6Lu^E@_PpnUm)VAAbMH>!0;C4ek3>QRC2GR~P&rH8t`AOU5_s!n??dKJv&gPQ30LIln_$73CN zSzNPv-K3OK^?{6BTAz4Rs+q5;L*oxJF8WvQodW#CIrBC7LN^)=R3E*oMhkcn@Pvg4 zaVsD5*AE)dPJlaJgl?tPdIT4M?}^S3AYSxoCQkvY$P{l!_j_Q1`oR>UR1{uP3^nSK zi?snW&Qpcm!))d&P*}1V4f6ene6$i7d5)UV&=gN~foaR+Q_Iru;VE*ymnw)mIlmG) zEq6$CT=t!x(FFt0&HtAm%e;J2HZgDjCFHei+cEpgCG=yw&T$baj7U~cX+GdTw?e6T z{-`ZdJ)a+;4vI5U_t3`%GVrcCfP*5d-IjSfe_!C@SO9Nxu$2dev#2a1sgjOaj~vFm zyY?TQ9Ps6i27R#1lGvy}BmAGwIn*E0)9S`D*FSpwrnAbHalf`nT3+TT3wKL@zk1`= zmil7ldPYi+eBB;8m5axGwev!<`1unVzHeJjc=?cFlErc;@|jUrG=JtHvt|6?|3 z6sq#%XEXF3gdry%kp`>6`N)Rm3NkkQFvB7b`8hN8(>I2g&ah?Rx~m-$P$-MnGFF9v zy8$^UV519DUN-_=Q`bhM#v&tz&-OM(5c&52+lsMje5mJyT;bd>M(E%hEth5E!%t+t z&p1+Sn{7vebaYxw?sDsq(})HRQ#U%oHvkfvnsmS_23*Vt{lzv%G5g4# zSdLz`gAvKv(d%%qpENe^8r`rKS!%w1WTC_Ao@%074qXKy{fd&+)rYSZah9e0V63&j zC4vN`W-XIl8AL1Lt*^O=Fj{n_zP|L>u^By#>~(70)!5)1{mER;T9-7}`mI}J^;Muq zGB<7#<(NW{7#)z13twHr!X)hPp#4A(UNxlg+8x(U9MYeCzuP$X&nuB?5jG1Sz;5Jb z;2R3X6aqr+LMp%+nzlZ=Dfc}Af5v+iq^V7hhxHqT#_n{u3_gW0BkHZ89BG-z&@|&> z$r9D(bn}ZT*5(f^ns@egRUp>ofQKR5Qz|J*E`7!brwX0U)1*Q04?TsDEx!O_0h^k! zz8G#_SHEYO447kNJ@%HqF8T)hb(V&)qtFq5Yp0@JMYvG8t@yVPp&G6u^61kFKS{3Z z+W!Hivfvfz*9v{lI}~Y(?T5F0iUhtLVdjo08BS)o^c7>F;xOe^`1pakQqW|-2G&rq zJ$EAd$;y6Ep<7b1SJtsnmcTv5R*5U1DPr(tcotgA&rAITX!CEU$s0+x9e_%*QYD#H zf8yD)-E(~*I=^Rw{o)h`57I@m)S^cq0{T3Ojhn_Q>X*cREmI{}#nn)uQBQf-SYUWE zKQO+2v4>84?3kkY>GqZJS)F7sq=;)N(;;S3$!f%hB%MHRX6}`Cp^6=TvkgNyZ*2B6J~3 zk*3Mu46_(G>sJFcdsSJ8)%R@D(7yf$NKjsHCip)?EAH<@erf-Z2GTf$ z!Z!Wn#a1s@5uHf!r~IXq7#%hMmL3kFxPb2W@d)h$mEOY!*$=&QE@F;-rlBJcARU0D zjB2l8C|LVf=z{{5@GKX3=9 z)JsV8Kz5JI{ka5X4v5~SYFodf&75Lf3;_|0a1Bj%TAhRj7v~9@Vq&)!CyfMsF1kiu zGQkcQ$!h_-<GhU;&Tm57o;c%6xxM4X-9iOt_8p9H zk!u>H;u>M)Y7S+1$1#j(gVdA5r6_XrQ2D9QC-oJ+l{-5%4=(Mj7h4>xA0RC40bOAQ zRLs-BXl!EPq;;;4daO6+Z*M9KP6PzMV*}1>`Iiy%F5&~1(BM0j!v5XZc6`@RF6@3p zeSb)W7BiM#7P7gZ^RZ4vsM%{egg+%L`#i)f)%U+>4am_bnS`fP?m(@y8LX*mcDNcS zEUQrYvCznHdC6Ct`|I&%Pc$yWf6WYiT@J|m{)g2DTIS1v?#=j?{GJTy<*Xq_h&AJ6 zDG$2wG3b5>Y4k>HeKk*#0$$I9;`YGu98ZJsIqlc*=&x`4Mcm7#7fADkW(_n)~4k(|qmS+Qa z7JX?Rk(^f8Z{E)E6q7g_@#q3@#KK*vJ2jpG(;W)lu;!yYRQND+(mPn*FHAQiE5)4_ z;MTuGl>G5cC#>^vQ@U`QzT==iXO?3-h`I4$j%|I&Qodx=G-@VD0*8GWAOS~9CoBG< zso&b213h@~e-WGpEmuE;R)5d^Ulz23z-c$Ja=u57!s?T)>ogNAR$WXk z|Esbmzl0m7^zW~?E){o&S%9J-iTwS%*R3mmP)FqUZ5Fq}-3`7!ItR#`khD5ISZ5FOC8U9l*EZ`v^p*mx_LFaS7CZS> zH4?g)e&e$H#O)~sVu$d`2TXFG8lZT9!PR+msHVLAoYda%GDEoP-r!TKDUFwJ_yecz zRnCyl=YrKWdfG>~ePCYR5FjVdL~*O*G|uVF25Kh8v~!Cx8%$QLJQEYtO=pbV#q%-9 ze@E%Mu-><(BF0yrWbyZnbMS?Dm)eHs1UGuA-h?q5qKz=93zf?J1VP%3yKE$$JltQ* zS zCFYxL*CG7hEe?#`<m3FDyF;m7z*hnfh|q`DqBxt8A4GN;>?b z1l+5LP!;N~x7f?(bMT?sWybe5H7sgwg3>Aq1l{!BU-mRa-H&${a6;s0cftcE8ny6T z>j%fItIu=5wPXtnm$zElUf+)}xmJF!61B3BiHQ(zO2HUF(%1Pc%kLV6ltcjUK>X$Xv{ZGB7|fN23=O?l;Mu3~3MMve8H z=$J!sbr)6Q!>Tb=F*!~Hb{V+uZ48!Xm&9Wg{*bkeG0T3m?P?D|JX#w>Qp}>S zsHf=W#N;fzUB%zz?d8)9%80z)gFOI72LCTwZKt4?c^c=AiID49l%UBB@II$V!4R*A26sy*?nWcOgH3D9&&WYi5 zOed_-3HHO31yhnrxg5~+o0G1@jPGUpq7Vc!v9B`jRFA)Aa-~X#fedr#C&zJXFiZw7 zSF|MwvOUm#Ck1wCXBvFA0(zn2FvCfKHKnWg$L|02Q7{3pFJU%sqpB0Ftj^#q*AL}%K(Syn(_i8XjR)hz1L$L*Xd2CJJ`DLVi-0eeEe^&|`TgVn${Z}nV>&pzp}{^#}M=+#XV z-8L8g@_@J2O*S2r@Vq!{lOG$PQD%KAJ<)k|RnZu;8Ws zn71{o43pm>&uw*>pKImwGXxr_X!RQvo~s6@b0EJAJ_ghVw4yN{&y|QJKK`ZwZPdut zqB3rQF9lY4dE%)I+c@#s)I9>Vt|EO!Qbzg{$6bzlpN^_|d~yMelw7|Ui0(-ekiQzA~3XjxMr4Gb_;LUeJUm@kV?hLv_61`g<&TvetO z*aYn`%{4|_%vHY*wF=9J%WlU^zwFC6!ti~pYK}m_aoB89!MC1TzYX*_a8Im)n&sAU z2#g(F^|Y8ebKl@KVD_$J;ZLv^TE$wp73eM2YXT_(7n|04m24!P4r;e$9jukj@xi%a zFdR?@X(22N#j{AfyDz5t`>vHUyb0v;7n3<)jkLToeram2M$Z6~RdCJ<89aVVc_>tBW$_>NV&Zncp^ULFsHtB2|Ls;?}xu zTD^BQqaj-}<+ZjheEv?U2)-4-&h@wvisKVGAhmT z-v7JHMi=`jF7%aq_FsAN2NWcwahNE&~-j%0qh**V@(j`K#rT+_9u z`QukYLclZR{97~9x-IIuNH$iJWhBagY@xbQNfA;-F4#p)+~fo9a|=y;#a2+HrY&T% z5=y9H6Bi18O`X~Aw3og5k-5%l!Su(pM%PbtVG91cw^f6L>0@}h_3%yO@3+Oj9;`DG zchYmslUHZHor{(!1PgC4mx2mHi244~?Vmx$W0*Ra425y-_#l|%nFAr+kDOJt)lxTk zoVz^fU&=}D^5zFB0jXaTkv1oOd6bjvd&k`^U?4MJ z3zcero^k*e(LM>xG+bU1g7h}Q2w99Aw&j3% z6Dt+GK$Gv}$VE0GNyx1jD8j*$-X^-i z+<@%z9x9P*3P=^7Ke()&73<{l_K5f9waCSRhKuV^8O?nU;>0`;T7RutPh`=5$jN8r zxcADs^puyz$4sVl?|6G!YA8u})|pvrfVUP7Q?2rC?)v%_5wx{g)Aq$O)ae-$3wFOt zW0+2iQbGdk2&dk856VaU?3z#3>X&j8t87Ix9M?zd*d3Z_6lJ`ehpq;@PHO`#(Drhl z*L=(RgzA~jl&?g0zjCeIrkXX$gY-H_i7jj^T(XTP-6HPSA%>niPQr`%)J7uu4lutV zJpYV!(YvpbRcPJ4V8il%PrEciRj;yLG$C8VY5r?#!u1@r7FgVS9D9zkY{mdzCDzId z!8&N>>+^sf{rZoX#@0*qtZdxXqNXBrYL-MA|DBs|@XXMKzMzv?;3a>^M z*Q~%{yoo-xRtC>9D5@YLOf%=M4@ z=JGy$$I~FSW-JARB-G;@H+y1+*!y}A`31jzc$`lxON#G@`0~HO7Js{X$i~pXO@;j5 znHwKft+e=0s@=i{0aAFwHZIa+6l8D-%v&Mzt5WWZ*hTwJ*Tw$;Rq@qH@}$ilhuhSd zJ++!$g7h_=L~b4p57?O0oG4PgwHoPWUFykf9^gPZn~}+Z{{KI*gaG`HDwPK`kp7II zV3y#Q_|Akyx5a*1OcHBJf?NK4rrpFaRj$MHK5`Z&O{WqfWRSRl|KqyO@{fp(!D@=b z+3qOC{P+z!h*u;|;(L?`&th9nmSRIF8GYK1slj3Dc&0Eb2VV5Kbq7mb$k^v28ow-hzF;m@$hG3UFJ zH{+0yP`X9QZR>yKyJ|5LolK_#;D>D1duWEznAnUO1H4y{+6{NinS)%UHii{xB%a7a zJh0?6yHLMk(GS=$*G@5&zvWS71+7vrWsoBUt6;3+dR+_JAqW@~{FsmTB1M>Dw=hVl zd|Mb`b{d4r%8SY&D`AYEowX=t0Auj4{_=d#{vRX&R1$rcoH>h^9X)<<5$iasUrxf)GDi#vDBqS{^?M4Ot2%2W!Xg-a`(J2H6DryzV z9;r^8?%Xx=F;v9ZfxW1w%y^$yl=hCzCu1RmaW2o7G_6<}?zSRc{;Ql~AI`6wPS7Zr zi9=Tj7+_Nl5WHGPR|#k0ZJcFeiXCY1{Ep^MOczA;+~=Mti&QMy*%v8$5S0@lf76@C z!r6Kqb-DdMM_oqfruBO41c#~`90cV5s@DdKZkbq~)<^o2Ky&r{WDcIaC*V#4{KEr= zV`ee5B!2*Sx~~#oeBFgQGT6q|)c@5ps6%Pa@ArO=Z@Z#TdO$M-vy;o<)9g6R(QR~n z>MZco>mN(m+>d+3ieOf;;C(@gTo@zs6fL76W}-QQ3NS0|NTS|O;dRr)uDB34+y*CxVE5@Bq>-<+uIuz5?P35=z(A z<6^4CBqc~5ljOa85Uz%=dw84#f_qU>&ubS2D?V)y)xK^-WW7S3UQ0$uipW+Tz@vQ( zM4xP3x~t447-u?`_ghR(^J6h|{Gez4i)Cx85#G2$2Vv=%8si)J$-n>|;h!w8sN~d& z5wLzw@AGd(LT{k6=L>1454k9qMgB>Zwbo=&dhuj9qXh_UIlpGZp8oPB6RYxq`V6V! zJmjr&=>i8d>Al$#;2OUYk5$3VgRpbK8owT7@*EZ(h;P`a*c`kVtzQKMSnmk8(Umkj~PX3#GDL&lqtbNYZ)n-Grs~ zqL9lX6buYRxPi!KfSX_}S2s3Nh1=4~jj}L*9Q@(T>t@Cd>wba1d@gKONCIxH8OI5s zehuV94sd28PQnN_L`}<&4P1ftK*ebr+0L6BmUAKtY6 zVCowg*D1R_u&Q4Pa^(yq4D37N$JvbzvxLBmn>)rLP-sA99bNYu3Tg`Tv$-y>^H}WF zZpRN3Cg<(MIXGK}Gw4naxI!_3{NiJ>ZXM5=kH0|sz=#rp5Al08%JP-p%&wzcPhUwF zcQWNmFnx^M4oi7q6NNSA#JtlvOg-Hm@=H1WJq@g~l1r7Vf!iF!QN?F+;i(IOsZ~ZC zoWeXDU`)dSYiRLbeza3;JtT47hOtcakB(7S0~fLS~k^*8YZNQ^AeF?ipIFT`j#3^%$n8?&zXmL zOlkq^4;geTk;7c8ri3e7M^VEAqkxYiv+2^0B8&194t)BNR##{lGkY8S8usS!)h>QW z0LZy7!1{Q3gqfe_-^%z#TRc~b_ zG)GnT0ZS_^_olBj+GX?3pcI2c;EKJTX4yP*@gx})KKCw+@p8BBjHhP7eiJ)UNzSb+ zR0U}q2z}4qc*t${W3~4>MU_ZgTF^g;f2vkSF?kLBDd4E#FwP7&oM$)Emp&k5{M5;- zrkn0{UYbmqS=BRfJ9?mW0u57@R>d194EK%!Uf=ECKmx0rwogCT;vIO_vU}Z)$jH1j zmnm9h5~9}k3-6Rgp{hk?>B#%zZNDXfHV-m6js+4)k4ev8Y-Ud9--?##^jY$D-OWR_ zc8R}keaLAsCjUD-H>oHC2(<*SnD%(#g*I>EN~to}a@x)?;|kH^g+(ulo=-Rk&(vHZ zwKQ`A3tatL4>_DRpv`t!Bylks{?>D*ERV8Nd)ldJA6@_1PS~uZFyKN$(rX4~BIxVJ zhXFS*S>i7YQhfeXL=rO&Lr9h$Fgl!qFdmQn%X39+?E=?5Yw@UVOx%iI3~v@K`*a!g z2ln>Vv?w$^N*Cv%C*T-KQcukh(gyo?Ld4QMPf zW7=nXx(?ruU2HVUKy8>xod26lbk-s8O#P=vTozp_A~w8AMRHjx|9My$-DSTs_|0&# z_TvZU3^wnn_emqc$)Yt`xAPPA!o{}aP8v?4S~cbdmTrUWN9DKxirAn3WfT3%cd5@R z0CjeS7Nu`@EHPwHLw`;-PS>qIj`_N~vSNv{L9O`IkA|tMR7jiU1PL7*{6OCasObj# z_pY8`>nt*DK$1Mqk{})_HgSgi942>kd!u|+LYo=3g6e!9mu(7c*9z3e%+BELb^Mo; z{>P+d@Gb90KIW(6PViGT`&r)F{KnMW07^_%z3$AGnnrMZTrpCGi?Dd(74&>f2St(M zTgU#g1D`K>X27(yI#U3{ze8!oL*&DM{3|H}eQ&)SzJZ=A))o8@g8vRJ@^36pyEe59 zQ1WgZL*u+^7P+!jYWMXW@pb8Ho*bR;^Q<3SXUhY$CviFYrM6{EC(%$9*N5to%T``0 zPgmBICKkGN#+%x^&Hi}JT)nPX6K8AV$|ccIq^$`A2<14s=F&CVfk5lHJu79PbgKqTZpm+qC^&H^P}j&LAubg0u_PU?Z2WZ@|h(=SZv<1DHC z=?QpQh!~j#r`KV>e%9cIwuxjrp;f&1E7j{YVzKM~gVq&&` zP$erZg=juWSu3E~Q~ZbQUUM#dCm$Bby4*_iyXm#pIhbomj}dUyt&3sBH?TD zRQkhp%1U^VZb`d~j<21IFmYu+zze;``KaEwLTSnaw#OQ!b+1d5*%2Jd$azi1zGB;M z91~A|9nRJ7_TE(MZ93|Qr`x*^Gp9(ve_0$@MF4ug6<+HBTfg;sl(WFws4>v%mOQ(N z6v6@Rt-KBp(v5+6vB{-!D#G{st`3(WP5W~BVV>;g;j0vw=9spL(Os)1MZU{;Gf0P|LzzUrJW0`@iW<)$G3& z!GJO|-!F!`lh+*I9y#?_8Yn=54H}bvxc`T=cZ!aL3!+A2Pi)(oV8V%Qb<(jh;l#Ek z&V&<8Y}>YN+jcsb+ux6S|9fBWTIZo3diCmcPMtcts&?(F$l~GJuG3B>)^)xn%E0)A z%o&tf=C5uKg{t`^DwQ{zoE2D>$wA`diy{-pvl9p1bHfE2)KQLMGBOl!!w~{1`)gg! z$p$WLHkIZR8{C{)k-hSbokDyx{ZcLsRumDHK2NDmW!b5K4Vw{ILN`&1C@rTe0aqEB z^M7xn2kAOwQn+oGR)Sy9)Hax|MY^5Ml}~{#b?EpTO1OAi8k>MbU=yoza?84PIl{F$ zP6Z~i+k;NkwhqU2^=r$5U&IUyt$1oTpk;#TQ_N#fu|_jAb9oRq9+HWOr$-;MoRhoI z!%LkL^!9R+!Tyb7afn_-N0Wb}@u~aa)1kmbNcK>=S#`@o(%#2pnh)pmE?Mf$Iz z!|?sQ4gZC4U|IY&+F2J|O14P2zS(@(P8;X}&>-^E1H_V{>qr;!vN><>Q;2)H9VT|H0$T@`F9i%}C6GHjB$!!8e)W_H z9iSdA6Y|>S$i6h|)-jA3#i|(C21~9SPoB_OX;-dlkxMXlT+U%j#Al`aiTxcrlcjEc zaI6<UxevL-i@GPf6h`#pz2F^8ngli#9*6VCr&^%v~De% zAq9capliDq$I@cJ;{AB6G4~Jg+VZ0lKMeeBVPcyn9OL8P9J^UxWRQD1%Dq<$w+}|X zbA!PoxVdUn@>a+M@D-O>0)zga_?iyN3P*ghOjS8fW6X=6I%@*G!{>uRkP5#)UiQa3 zz0~uUez1U%(RV%zY-<-U4fNpJczg};D0qJH3PuO0{iQ1|p?%EKSYg9#(W;Qu6}K8} zB&S6aybS?1<)H^;oqF5JVLKt#sb*N z!N-4O&BT1zqii}!bRUN|VCm%lMN0S|vV8-ptfxyQ z{Neh}Z-m5Z9SWSY>K6hNu_xExzsi+Gg%}h|7VQe>Tdv`YIzQcer|bh~5h?afFwL@; zuM>_EH+>w~T0g%(>thhIh|PXpg6Q=Y1bWQ#o#}eY$W9+Sy#67i#!N2aRIVHTN?yNL z`2E`A=O#%kK#o*jCDV+gp?wZ*^TAcpi11W=Ge6McBxxc7j`w%ma0s&cr6G+Wr{oRF)<(uuGrCYtIfvY34B^AzMP6NQEz0JKQ@ zsshkk{e=ikIg_yxSg}6zSWfuJt3Yn+l+;bmzbz58XWx)EF+2zYfcb;s;4aH1&lnFi zU0s#{z@Fo3ShkA$+)Ml3VX?%-V?7L>m>ZQD3nQAc@_b5lWqyfY;79mcH1CRBccciX z8=6^wg2LLFoCj=zd|q*CDVRGI?t<2Bg@nQ|KfoN`q{dOf4+U&IZd=~+438EGwIRe= zNy-kht~LV^dr_6kgckrS5i2my-%jw*9%64rl^mgmBuPcLYdAn1bE!Qs>XwMr?X`#p zRin5+b&+|YfVbp&xyCeI>+N9Fef1*H5blR@VLKi=Y3I=Ax%TzRXqF*=YJS!|&Y084 z^+2z6oDwvu3Psa#ZF3j98w|~)!18`Q2aj>S{LbOPZ(MtCe56@1w!wTb6hF17yZ-~W zExe!@v0}};4KjG%$FZ#jf6a)2e>y`$rL6Tart(>SJC-828_Sg2VKdit)$qZ*{xxVg#bIff;q4K{QUlSbRt$Csa2Ai%pgl})qNb<0EFM-5s%q=!1(7P zBX}H>WA}1Zjjr$z=gM(GyYKw!t4=Fk9c)`1EU_cv!%b8OfDmVD~eqvW~G7nukbK(iZ zL9X0>JYOH6wnlIBmb`ZSlW4r%4~olE_wb&6?sEmFn!@4UGvpaI zk*H%^A}Jr#wHbpMN^Wk3$K51}OF~!-X zDU@`W6r1d+f9H3s6F`6~XiP#-T_1IIWp(|BuZC`W{IKs_aP@PqnbYH0^bX#dP8RZ_ zVZOkucrx&B7C-AZ(x@u$5+)4)H@#8YRc)N*?D3H8f#FPhC2+IjYV!Mp!Ly5?k4^fZ z6N`Yg@`2E}O#v^f&COs+9}0cYK1>){vm=*uO!R?8YLD=f_)Kj&dr$Zj#-Bw8G|D7b z6%WEf_=1zv^0Ny@5+gRZn{+>n*Z9o7ZYatE`RryT|F}->qBq8W!<(X zb@%OXgaIt0pE_VFmhdur_I$@--|A*S(ux0IgxS`2!d_!Ws;m3*iSRP&gfi}65Uah@ zV%zVhz)gUO@?um+$`L&e6jFiOZdg7b`TVW%mrqC!zc%lAL02%B_~N({2FSo(_2svo z0pyArrwXtVEDq@A{)y7!y$zd^5CQ@S`oUGCTzsoT)UPysTuAut2CYd}H9eFNF5ULV z@}t?`lvF=X7*_#%>?^psJUkeTwF%|9o&Lgq?4Ig!bl6RCH0!>z{VZ18*6~NIb=#}d zwO6y4(YEcEHuSJ8cK7$5$TUFanofgNncAFUr&M5EnlTO@oG>S@5y2@oDX(H6Q=VYF zZr^XHPK*i-iV>Ax@|bn#JNutTI7IgHk0L$|twV(h8nO<*^jd8L?|Y#7_EyUD-E4fo z-m}eHj?uoI>n|7eU!JCss)Sy~W4o0_tvVYc(^o`okIr%jur3$4KPgg`cYG6H6U`nJ z-{3A6vh@^q8igk{RWo~kbdk6?I8wzDzLYaO2hF5NXOQMWrUpd?ZrAWU-rQ!o`G{qF zP*O3Wkc7dW58^I-c@$xh?7Qz78&(Uka@*r`U*|9?3I0BeVff!#0Hx|) zSR#umLB<%XGN@G)`aKrzJ`8Wmvuy+${yv`Mnx9dWMq}VW(iXD0Cg3H@tlCVBR1#sL z9Qmx~r0oQA1zgaVTzY)#!m(vI*KGWhIc;P-Sp?jmvP<#V>-T+kI;eN!mc}{qH&658hD}a@j22YX0=Yo}EgI(bN^4{SqlLUX7(>QK3Lj8VMWIymw`VX(N9DVIJCGBIB`h zeeLWh9-ko&^&>#e{yjW?*n&7iA_57nGg5=DY2_;3)?|X=+X&gel~?I$EZsw4{|m_% zHxX+Xj^~p&fE6kdEuI^j0z1uFrvuP}~9CevHrUM8uZ(!VF9?{`3}%u!wM{i6M6pS) zuvDjOUC(@GO2X?8DPXSxsw=tLin?9v{WCxSR9B6?zSl-bVCpN*JX& z;m)BkxFZe1iwPUMa2}d5a<41^X*ZIC8a|2QdjV3{7QcrIpSyCMZch6)MXUdD1}yPx zwaI!7vTGMbXFm#4RTK>b|5(i&Yc`~vEM%V))(pn3-VWN8ytLY2tfW;%NeBlmq^NIk zk2(Py8YPd5Tba-u31QT9-+ZbFT_@`9{&Bw92NS}XJA;o2TrPzT^jSSZ4&}4&zoZCs z(Yz7)<2;vrF&K+zF%eL~)K$|=)(Rd$%^Bu>^J)nSaFsm{%vZdaa(_EpHqNQ6XP{ul zfTm2Sxmx&^8yPjn+VlSTJsfqrgnK7<8VQDlNuKBnImHu?Lqy|*Te+z;1k+W^1@4Jv zbM@rZ4Ri`@>SYZ2l7+cjCiW(jcEHEdc~#SXZDyPo5SZy*E~ly)*0g^;~|3HpTBIG zSj)$R6axTk89CVJYTC4Lt-PU1f2dm^k=|hHLiHU55FKN%ruabN{{ddombW_>X*Roh z!Ca;s6Ggs5p2q_~gIcZxDuFe>}*#uIlGOe$CVs5OZk1AA26aGu8igqnJ( z;38(+WL(bfOB1U(F!}STj9m+b@F%R#e)QEP)IOsPmf#4{u&}3K$9rE61GPggn?Q*Jqnl*+#!GfS#J%jd8f{8=() zl3F_NCgm|4U-uzAKa%WpewB=8Q<9&#TCbB4YXdP-AOKs4^!r{E9z9=5Rvv{G0b+qd zK{=&Wf&L&PsEwkGvx|wpb^7u-EG%Jr)@Kfx#N0KUcH0KJ|AkCqS5Uw->6iT~17#6) zKVR5NH!q~VQ$o-k&sn3&Z|@wb^3beL&$({$LbAEwysun>7@a|sx8BCITdQxu>}v+9 zoj2F2JS+H~&l5`+SE6h@GbSu574Y&`? z91b#KW5-B)ytRE}~d_u0Z}I zNSYMU_BB9_pbbR;aGR0fG;IundHhu5bK5HtGH@ulvDLQDE+Un^(C&Im@)u?DO_adz ziF(tY3)cbiXBW|OPBu`r^}JvFC}vA4p2cV(HJcyTqpbe%SB#y7ehfPPLeik3(TNZN z**!kog-MBDlg4n5FmM|wT<}rDERu)yu(&I}6SdtK1=ai^Z(nLZ*H3tJ?fM_)us*m6 z!8CX~81$sN+y+C4fUu^>YL_ums1&i2%Y$yzkfe7lwo8Hy>$*z-^E+JeF?aD-);pd~ z?tHG)Z%5Inb@&nQpyfSC$koTOx)P5dgY)GIEcC|08pDe+` z6JpsqQREFU1hu<-@bRy!O4FNoAOjs|1^@WoQ}aHUs=0eM{{pVXcW^tvNIn0SBHihT z#C&P~F1#c0Ta_*(AKK6BFds&PyEJ>vKfCtZHGT>)kU|gRfGiA+^~Wo_V-908YZ+Yy zV|fDx#Q_vP!H!N&q?R$; zz#K9HxSMD>ZUb~2e0-hADf9bO3)OZsvf$?D;!HeTezP|?FNy;FS-+&=VEp=GFOfYE zKpVrf)RZ^K*$5}6Pct-RM)3_yvOo~HUZq>x%BmcxJ4?kqNJ@W=*&pr1yt!uI?m!zJ6gvlFwF4iTkxT^c71sd#*h=-pa39KRTl7Va=A74yV zA0;=_f`6rn?O+$)*Zbw~Z0U7S!c=^5)@ z2EGiT6#8|bvHcT)YP85ddU1kksYCZ1-8X_urKE;zlwPK~tD_ra6mZp5H;e;qZzoAE z3oM>Janpi(G_QJ`i(A}!)re<3p@FBP!iP=V4kF43T*bQ)!MCXt>XHJy4IiC1*k3EU z@T!b=&dW>n@7aHr%zs025KxbUbd&>{DgnNo+}!8tNWgg+n`A@0FbLW%>;aqTCq}d` z!R;NxtWEh3X_tl=MukHy(c}VhL{T-U!}Hlk2#I;^KTN3Up6ei#fdb<=Gd>3sb!({( z3oJV&;9NtDGosbwEr@eKhBr!pmZlk?r+IoH&o47Jn~1(<*5iOsjw@X7jUDSr?fGy<8k3d9LRvTE~=t()%NB2X}n$2Yw^RXxLozw`_!Yv$Qt^P*p7@9 zwQEEjt;l$zlhaHsBZS&gO7MN<&z)ZD zF}8#7xf9C*3aLp$}8xq0&|F-b9#@IqUjAvcXO6@TonQg_gIVsiT_o zYK6?0B#~n=6J067cTm|C!H3Z^IQ=UZbe4*WI$&5N)zs$gU`Ib3slO=J1rF6ovk3#4 zK=4hB$5vqr0RYpYS^fE0zpuQvudKq_QT?j@vU*vKHd0c!ydBmjW%g;on%5f#acw0> z$yKpUw}_BhS=1GRZCbzd#V$zfl)DU?0+?8gV9KUMr|knUB_pv`0nXtEuBT<*-fjYl zZ5rp(g?VC@F5M`|Hxl~#Bpo7cfZw7sXPrOGM52hi$a;24EK-%Kw3O2gtvk_hFNmcp zn9-uARKP*f{6azO$yD*(qRb7;P|l6d1ERa|vym#AT5Ow5o84WkZJ<&uL@*%ECp~8O zmaup$@s3{1$Ur}STw+;ZtVT_fB-r6HLaFv|e$0ui{8%DTtDwjJQSCbm>(4t4d^{2l z!{RdPol}I`awPN>OC)RMcLml^%NS-Rs63d|E|0r!wW@T>vmCV=QNA!iZ57)v@e_1; z%HxduyD~T{c#9cXc$7k80RTGujX>J}V0G;VWX+mZR^6<$pge#w-|k+4*SS*L^IME9@86Oxgj)t`(R+F6ld- z5Xs-R2*iVnURndHezJ(6AFTz2LEhHjK zkI|y^xiT^f?->%ko6Y(t;Q^MF>v;_40CRD3{q`1<-a1CA2%D>Hv(Y@i9d%oLAe*l^ zUu~_)$%xQRDb=OxVB6Dd&N`ofhU z<2+_yu}F$JwJ!b7(z3xqBdN^BF=gOEN~*wRU3xM-ztO|aoS_mIqC88XkuTO7s_N=r z2?WlfPNdsGoWCKNU0d_iRZSQU9k?%C017OwBk@zrZ`Z=cMR70ulme;(zv9exlTnun zR~YXio!46oL8I4Ke~;9v@;lu50kv)q3CoQ3mBBlS(T!>EWEVc3_C;(FI%r^`?0ey< zOw^-T;nGMI2Yh%fiyeyT1!sfvY(p^y$c-M-1ei0S2SIoScgov zT%4~ZmrQhChX=Hh1vGR*G_s_&WDGujQpD{opS>m4Qr%kOF-x$fy}RWB>Z1g5&C-0r zB%p656SiEU9UBxQ>SS^rYIEDssjCH{xuGeu75DUwA=OzOnce76E)Ir=#G?5k1sqVc z*n#2W>VNcVx+edK%sX2btyJL*XdC|8b3N#+*D?A}(AD=_nK(*+YogQfO#l#-;fUG! zUYmq^uHDLMG)Rlyi--$K=B~8$p{E|f4P>;iBPOpIBY;#zY%?!&(yF2Z2Iv=Tah8ja zY)rctZ2e{-*X`lPJz?DBm-e2%C_}pLGQtyqE0f4!XdaLeCCaK2foOdunOw@NQwr~n zUX9KJLHLN9TmTr!2130lX%~?BX!y;jy^y;ryGb>u&m$-pkQPe6 z@VYgj`V-bdLn7r5Mdtgaly&fmVr1`k?2xm)%b44>Zrv|JO^EQj2x5`hedFN9GhDx= z&lB>EPM0TXEG>s%g4=(9)!oI~^=Md&jTPJbyN7GZ!(2HVX=}}`c1%35A-E7Mo-*Fl@RiNPXURTi~%sC6pPawzBqgoSy%`#-JClDR0m)uO1VJElgrr?EOs zd}ZEo=#7_QDj>;fqcdLvU%*6nY;$S^MARwCvaea!q_XV z)J8-Qh%qvc2Lkd(s_w!WNZh{OU=oE~cK$A()}@%lEIBH)`OkzU*k#`B8* zZ)h66^xW`fvUhdbwT?2-i2DtqVvs|hRfajUGFT+FP;z5`WibFJE>e_93({z*;=nk^ z>@tMu-Yiu_OQ+t{^?P#%{<<=+G})0%AewS)4x@tRo?FSpko6i%0Su{T_PX@V)rC)R1RQTr32*c+cc|LRo1V@?Y4Uw{2I{HgiJJfv#=X{!%(zN?J9H@oI{}O zp!pwFnxf7E^~1~D-p~SR*8*y&2*=z4^TRLlMN6$>JM-K<=Hdu5WvWynso}SdmKb@q z*yT>`m3;GZX4+})YJO7by5j%g(KVYqZzV7AZN znpl#Z0g{8i|4VV4sQ!_r2W%+$MbPRL(cl)-7ccDUH?)p-=p3zb41Ulz`XIgGmbnF7 zk>q;lFRQ~lB*ak4+vMPQZGLO3QMao0oqE;gdqX4l&D|qajRSh1Z)#JEQgSmg0DhUG zX1hi6SO>d-7afm{x$dx^wJ88QAbCL?EQ0urc>{|;vzxShFg&A-exNBZj~HsvRVNTI zXz>dPkYm^pm($!kOx#Q#0_)DdsqUv|ZnkYmHr0bU~naCST+!V+!+&K7{UPz}DRlY+R z&(nZ6N~^&~?KXtSXeQ6uVZc(#`6(hUyFY8>wG^ew;C|xX_lSHLuh8e=5XXFeTd`U0 zl6(}V%R7RZ6zrABnzEJJKRucFFpu4u_`wFnQlo9l=p43;U&G&Xqc3cTi2~*IzSUe~ zpDZl0pAhb(8buRUGp@+z%&@)`D+W+@;4!*)utBJdg>>B@UdIg0VHJT`z5wc;%q0~4 z2-EN8OE%tE#H2ToBxN`rba2Yhe7`8Ok->av!|(#o1d7}2rt)V^6(cO35RT0Nvt+@n zsqyKS8H4Q3h%vkTeTb8@k;jZ;11<+-LcuhbPEgN0olHy9(SY2EbyTV0JOaB7(l7Iz zn}&hAx$^RzQm)UeKdGGfRv3eH0YhzRXL01@)-15wd4h(9Fi+iT_yW(%g0<(Si(S*Z zSewhnJ!QK$;Wq@YNuI8Eet5bfa22*25NXEd{p|MfAN`+%%sMuiA)Ef5_!hBTLK_=7 zHcIZI);(i7!xN&+w}QcVO9@$&mJO-QqPb6F?hhS&2u5Aonw?EUmVPmO9{sOJY(`Z3 zr_#x4?ms`U_|JOC;Hr5e0%)(>nV6=x-dKXT1#xYDC}-hq8ou>XJ0xS2G-#$a3N9s{ zmzhml>PL3nN(|~)qb=0A`I-6Dzx~nt@kT%$G_|yLX+;{mD8xNn<5FCW4yjQQ7s$v! zYhv=DW{*dTA38F^o_Nx>B_0J`{6#E87(mtfiZMf7SGMv|ozsE~-FMH`$t`wSBZ7`*UDvCi8q1aq;K47vI5K<3k<5)AOEm5HEN||PfLP_X8xR(^^x8?rl3Q; z>yrfwUO;QUexdkJ%T!F4}5IK6(?$*~~ zG-jdVi+KW>@x(Dwq;_UgXEboI{^V2EL~e=x*cAeeb;q}F>MU4Z26I&LEQA)1URJVk zVbcg%&2Yn9*y4#$vPE)KBPiCdW#=valbT5CMmWZQDHE=T%{4vFvF*=L87dIf_rZn4 zcI>)3u)uHN_h6*Qmo|(PQJx4~+xHhC_zMLv#-(KQ4ViikK1U{y`^|IGJAD=Kx$y6< zQXa$gHCypg>%t@TEYBT=&FlG&LVw_f3u@Qeia5OF-RP{JLPGzRzU;|wE-$l~GN7l~ z_JoKV#_7Y~`xufG(Ac<}Oqw8q^cMy}@i!%AI(=j$EY4soeI!B&7mjy3$h&eGPENHT zUj_qNQ3N)b^1B9Pph!S`$b%B--RAOV*r=HfE$1lp{pE2W-|@xg6=x#fc15Eb1b4>~ zfm`8wa3tqGaEH^OHMz?a?*3E^lBIenu6IrJtg2Pcxd0$g?^}I<_L+qcX7&f`)O&h0NTq$)Y_;kWvnwbPfwVvw|`)KhtWg_=Pd0 za3n!u`NUvnV{>}pcVV}!ZDVI;_k;JF`0vdZp`|NPg2a~hACSR?U7TbCD8t7S`&v8( z%A4!2^s{4n!r@95s^6yt31|3I)i@R6>o;(HFG&Sfqcuia8QZsfGjtCz0<^qQF>cmRSe!Ew=z(IZSN~Q* za<}*(APYJswR$5i+N`EU)?vzM=}bT=BE51)B0K7@aO~Jf^$&Mby95*?cjrXkaBa%W@gaLWJy7!X+X)Dw z(DsjnqCG2CPeJuuAG6%%3k|XgoBB~#D6!2M{xV0*`2VoO(@!M6DFzig4t0%tzoF!>UjK5*GTYi0~q3h+pQP5M@P z7Lx;u{*wa|qdxPu^&H_S!F_4Dowa6|tDRribM`Lup9%GP;*!|#nzOw&o<^Dv*ESmN z>TG4q0Dbv%$z+;bIi~W?D}{&xPVHXeg3YM+j>yqOUL~A%j|QZ%yrB-J9H6GBXPveP zi&Bwa$*MDl;$%r(N@^HB%C$iMc}i@|wX(eVm-|c_1bMQdpz!)os(#Pbx!PI}v*{I- zPzuwkr8TVF52xUt2s)noWYC9R=ECEOo8>x0+_$SICHR_sVs4QB?i%jCzYtnA)6C+G zXjlV&=oYD;zWU%=b^xu;6d`{v|8D6!{JSx|r~V5wysyeHD6)QkHS!FC`-DH_UMnHh z(05FzE*Z8kJeepvn%nf*wn+%dboa=f`{CYES9^xffWj?lz<-RdBQ|o?PI;KsJ8Pra zVIQGv`;^t~RCjn!o3dFzvr#oOL*`WXsMHjZOurf+O)AgP4qf!q@DV6NBzL-gl;~gI zl!WIV&C-NYIqqWX`bhB_7Iuq95Zd9q_n6e^j>AoSlj+2h)Qzz!?QhIf3WHlANMF() z!@M+D%kCN!sfIb0JkI}6UpI8;Ksq>4r1EotinyCGuH+Nwb2U6&dD}(&ki{^UTIYv#L>_&A`mblIk8wT zml`%}Kg(DeQKoV^(?ri6QmU!mBHc&P%!BJfDhzDd$C~gSY<5dma+7hPE;>o}n%&(QRuG6=cJ`B3kDT4wywUhJX$~d#h*bGtZ zjz1n!o>0{M_DC7|vPB^)L5@5^7h5eMq0K8C=M1FIA5+i@K;csj6qftLgW4=dA=(0 zC+kS8o7|tIKLsvOwp>6j)aYSc4}W*E7o;h|nGHw#mS3W2F7y~?&gjj|^HlYRi%_6O z-@JTH!*90kaDk38o02dEjo3=v92*J}9pe94JmfoaLCL@x*h1S<$TR*XE`BWr)u9y8 z6em3feTLzvJG3I_bD_E6wz|TqMh?n9$yv%&*EvOc4GJC{fZ-*lqO&#cFSwdd3C@1s zF)EIP=lhLG6b*^Q@0W+>k{neR+Qm!y*SKvFf|4n|4@(ZDE;r zqj&fkVx6rw*-95U!7_PL()K4bDU+&>eEd1(r5j=eU+>r}a(2fj71HTF!Yd57yPqZZ1~g1Lp#cQ)rht46p%DArk1%@l z3TEb#c4W=lw84kjbZmZ?HiZi7*^%(0Xau^gkA|_))gXZEnK7fRfZCyB-v6^l|Ls>v z6bv~0tgaa^F*IBc{-L|40_c@ndm0y1_~iSib5^8zlw8A|r1ia4#IYwhDGF<3YCONA zo3@{326p+!j13X7HG7^mP_(8jchF6%myx?U#KKOl`0>s8;ed+pZEhhvLp`9{RLG11 zcsjcWzAFF6D*GFNpm}>7{Nuzom}IV*3WkY5<}Y?7uNw}0wG)D+mIJlE8g3^3AlCnB8|V;$Q81Y2kGYx{EUX44eZPUaF24{O*J)JF+o+8>lL!7O zKCW-8(p6SAcrGn29}MJcv{@3sFyZMLfgcfE*mjt7$bFO4{MEx?v~IeIy9dA@&58Ift+vVmdKiO(-C&^;9CbBtM&id z26oCFlC3yFXhI_W#%m2X$Ze01&EPV6AkNjNjP?nBTwl8?)*TvRaSv+qSv_@6Gxc^@ z>Pa=cQXaJcFo&r+6*dZ=QG-YN|TXZ5A)t z%D{G~jZlF7z904Z@!}riFF;t0-T{74a$0DBkvUv+ls@Tq;Vh-UOa;&3T;S{e`LMoA zoL5L zfFWr5eXO00$!_0s{?#AMp3yR{2*gC9z31t(KA){N(0G13mGjezW^&gTV36I&MV0pn zZj^6SGQwDvl})Mm!}To3K*t=DD1D!0v9EAAeP*ZE(bw99o1jW0(TarivmUv6YE`^` zNSe=fiBiqK^Qu66or{#%4Uvo1 z#8xB$4Fb3--~}baj$P3LeIK>>KU%&gu7$tNx@=*n$dgsd z=WahA#sjr0(^t|3N$|Y&&--?(i}&|V54yHXuW8KtGWrEXg8xtZCRd3<94N${d*byE zzr;MT?H$ux80t$Y^%^pX&fPhjWuB`*r?SJV^qbO11lc@AN*|dBX`iVNF^(quq;^iG zw)YwuO>j+d)XrSChw@e~n6GVd`Ono?rX#>GA&(#02Q79-z;YRj22tJ}C>pysJj0!N zY~~V!TmWfo_tC@srHWL;EwDNw*YOnz3;h}iZUYo{xfuVijV-Z(5j^9j%>HFV%)x?D zL8}l|1i0SbiGR{-#85=%^9uy06Z9BNUOD`uEQS>iO%I3*J{VOssp-lo*9&q0KXdUjF98D0EtReyx zxF$=^_Cya36v)~B1)QY?C`t1TqpGQdvl0UuFatpsm6q(~1&dL#S{f3H*IolV){Cgf z345dc;~C8v_G*n`D(y>H^iz|$eG3vuR*PLr)38|JN9HFgM8m{*>e$x*=8BOB%StWjzF*iY>_A9T#1&&#cL zL#zf{Tw@?aln9-WUzAwYg}m|dmJSQmlrXrIw>?pG)K6OMg<)rVHNWK*Mv|%98ZU>8 zT=Lo(M`Tbnce@I!-qID@N9Ma`D*!u+nDj8;jQ#bD@9w6;H~aR8Rx=@0e)Zo)UXOfR zg7VKlttQ-loxF5WE`yQ>SaUO_rn2iDu^itVikhlB_80tSc)|YWl4eJySFWk$dWAnE z46WwF;m0LS`0rqmOLB6^!@EI?4~<{B{Ou~#S(?d#+AYHysx_G2W%|Wa^SL2V zcl-K~@NTGi=yX89=p@T%T08bHqejPmLa&_abDsRbwYXoWf$Y z&J;U_8fR?Jx<)0}!n|lM{`*C0>zQ(RZo;2hjV>7kA3TMhZDHw~!bwnTu63=--sc2v zKd*{mZ5JhNjUP*P4;e{@l|XEsu&`?5v(p)NbZ^<4Nga2`{B&m61)2Hv&PBCpm9g(S zTt#r-L8>$6n`P8vgKVGaLHw@yaH-E<$Ls3|ERPiO@(Q@_97vQPN%+-`-lmuh_&%=z zeR20E@3Z*U_jCUM5u%`_M~y#8B8u>6JQhnYRee z!j?HB3x9A+6F+#mby^Rt`ZfG7NFIyNu?7*yubh)q`5m)6Tk*Acs;t%P^-WFIkHT{q zEvHDFl&)J!u{>0CY8E=_VP6gDY$-W?10>S;koJDgF&4Wet$5WH7sPsL;hg=n#Cbt( ze9C-RW|)1^fy{RgWhzW44dy(vEJO8pX%QQgWPsg z*W8ljVC!m9>pt4pMwhx`@BDHG;kIWsX6QxQ{3!uh{mWudI;z(%xhSO3`EV9@rhR_v zy!q(O4EoDv!w5m`O6)`nrLEjA^bhHf8r_Neqz_8|j~FaORX*LPqxOLkp?( ztjyXO5qtLJJwiR%4Y8p)i((+8kaINLRFRvIedWKs3@w$#=5da!W34;D{L|+6<&acJ zrZUTC_NpsWUsaD43wJXA8{4~KVS9o%k6*8X_3eq(*jjtC)01;_UDe;xS(fL7;^w%; zCpq~@hUXCj^B;d&?U>rHlTXfHzS&7&P-V?#uRF)P^M_$}XGl+ydi;8)T2tE^rP|o` zGf2$W=zhal_%nR^3;S(#otYhH-A*>ueUDvNk5+9d>#y7k2lfi3p~pOJO6(u_wf|fg zDWo*Ars`$zkGF2H5|`6fLasS_2{vSeVdLvO9FE!@)HQ zEPF#BPfROCQq?88jNwPJlJGTsy%M1l03qfAZ;yRskp?XBpteB~3_KNK4#lEaEQ zBY~=}sR(;KHMiPosQPoe3wz_9@Eh|jb#*{wUowK?L2iCL>2g9W&h>rmzXX2|qPvH7 zt3}nMECp?Nx8DvxQ>2atCfzcPhOLQ}rog$+_u%xc=bTI2uNPxhqkDx1KCC#@S-Alt z@`@=@h7ZYg%u$&mn)Gn{jZI5MXK5MvRSh9dd^PRvA1ZeavvS)m@6Ge0!gVB}kL{uN z|0vL|gmVA_$%dK9qTr-Xjr=;!Sb8Csa9rJ!ooP8So11DB<#i7T<3UI#(La=l8k1VErC- zK(Y`(ZK1W7w|a1TExk)cr|II%O_;F-b=HT{0rgJbGQB9LcV{M9%tP{KY_3n)-lqF-}yA}xLYO_0<;W>HwTrVMU zw9kxs8(tJgpylV`fV4whqy7hnvDy&*Xr?RvF;P|EPXW&Ts5*YU&(!HaFCYIhMGRZ? z8k(Y&*A^_F?eKWR`JY{JuXtaTOkgd?EhAc=t45y*;)EZkliydJ6FP!|OGTFrut%;^ zWWaA-3L>vs4Q8{5?7SZzWbYV<+d+^>BRaZ!&-H6ICsdVqO<4*J*LH*eg628u;Y@M) z*gz)fCG^Rq08t`aJEZlGm5KVKB!hyA3QfUvosXKbL%<Bqcf>duG6iuLIjLSik z0{~yXRq0hiBDBITqm)-5E|iw6smL?IeTd0fpV`>)cp^1h<>jU}sm22r$MR6^q;Xm8 z1i+)ZRce~lWXz3IXrYoH*sQMk@NMoEw{)q(qGFMgN7}JDI^&f9$MUFz0etIaCc}kt z-9(dsQjctLdGT2vrw4TZiYsgyR`d~trw(7l>9C_Ho17y4xusx27h))rIaq&8oSzB0 z_RBSquT7`uU(o0<6_s4&t+~3W&DnWuq&3Z6G!$~Q(5R; zBW4_o%+UQIquu_Dug4&OZOmM-?TSsj7`J!iH?;>qipwRyIX+-SE{?aUGJanCtC5gV zU9DSf$AkktIlmmokJ~=Jbf;Y)O9Ck?Xh{8)bQjzCg9VONmSDD{Lx3H ztryGH3I~f=yl9{3N%vV;p)WADxQNy>Ao@cUvarHXl+XM5-1(5y+G+Vi?iVh_dB&sAI&SH3BrW9zYvrkI0|K?v-2xK3}id?I4g&XQ~dRFNE1j2onL8G|n@ z|L|4QPOTj)+M2%PDpiW@-~tIe=#in6$jO%g{qR!!8zd@WNWEi-$eL-i=WRwbU(1Ik zVzgwu+z`Np25U9ZcpX>rj4ohe*;ofp0mGxUel-WeWJ;w{FOq$rMJgl#c@7=Ln!%UC2S-?`bSfl-fUK$n{lgBYkP? z)$eLpdb4PN^}vspMyo!tk^Q8GI{_Ml2H#t|NW&MJW4e0e9d2epbCs)h`z; zQD2=nn(Aqm$o%QY*=j|=w+k`~C3NBJbUA5;CWW9_=wG}fMeHB|IAEfK9;MSYmUpsn ze9csz2-0s?AAJ=Z+h`4Dks{RI04ST_X_pmie@ja@g&S5+sFkz!StqgOzDJINVLtle z8%aH+G6MKW#sORuU#sm4T;+lOdeeVpc&c|VF`$mZct$CnH|(fB3l|m&bV8L>2Mu-8 zzt_^GEgK7MjVuZK$`mshrySE~hvpvjOWnkV+W|<_|NTvSEycW`Rvze@gW9UCGDZm1 zbH<|i_x`=n4}@bbTYMRU@3tQ!r@^_HqLE2v(UR4az(vx*G^pzvE zU0paS5|ztQ_;4j5Xi9DH`g%zG5`HZ7hsC6A=Ct%*epoX~o>!&7&Fyg6d3yM7L5RaKeX59f)He((j%EiyUsQB!0MCh)$9*MpMd^+#c4yuUj^EH&XIqU~MGxCh|#FG3`HZ>nis=tPS zt@pMQ-*UX4sF()+VVP|Yj5MNq1_oz!0wKn~wZb{E$&GFF6Jb^8n%3JG8(gT$>AlBz z{p0rjBPoJ0zkNt9dQblt35v|&x{k|0m z===Wo)88IubojF%*`}rnSu?I4h%=lA5c#eQ^0SqH`q62nUHCgeUkJ|MFFi8K)y47} zj_Z?uc;jS|0cf{1)-6#?Qq+~I;qrI(C_)SUr#lqizpMO$?37Xu{xEw(&;P5vuZ(JQ z>DsP9fzlQ$v;_)nvEmw}c!5$RI0^2-rATlqQi>M|6nB?Ea4+75Vj;M@Lve>MJ?H)2 z^PKZM@2~IIx7M3=udJ-hx@YFz_w1RyuYJuP&Y;(OL7k7$btC}8DB0pyZ{h2T;}_1% zR*_`wY3bR^p^uwCE0e6Fmri1j)cjMGHw?A>eB=@;MSU{-Dp*XPb=-~)T1%I!XL>0Y z@Wh@IId=9Wr{qSrilN-=LAO!uy9Iapk@qjb$LjW_Jjzl?bAnTB>nNu<)5NPrdH@>WmV>$VSJSC=mmSF99BZ+Ab91_&7tX zA{I4uSUHW|`JBbJi$N%tf-&8TfvybDd|*q56|$^2QfgjJ=pN_b<|X+HRXk*3j<}oJ zk&haYlzg~tsJBmXXw*ZDZ(lCi`1(hm;h@!nvjARGaQk*F!W2f_j2Vk&n@_OhxmxHJ&$ekqr%ABl}zXK|)4 zyabWxL3$YV$xKBs6Fw#Saz|Rdf~icPJAs&U5B-GN!I+BWTfm3Qg4Wow52-UM3Z%RT zY1Nb2rs@oxOIrJdQiV5U?a~!JbMjtOh|1p0SV&rIOfC4+tN5*@*H9@AqL)05tMBe( z&f&E>Nw0*krKBF;#&+5=aSrbYXPcj_+qhbsZOmzYMpQ4mkDtGszj`>THdXVmCCaCV zY$FjjBPa08$@IKiR_NH`aUn94f1|h5f%TI}0Ww%Ax z(Ra%$-k~mfeYip4_WbH-kwa*}=re#~p98ycJs%i=9f%r$ApC^Ig>U&Qp;a3r^XNWJ~8gMLS zBtt$A_9FlagejM6tln#+FCl&oGQ=-4#Un*x>!94b=cD1&w05~V)wp{PEjpH8@edrf z#MUlpR|)EiFKDvWz)FNO$5b|1-0oqQN=udeSOs5cjI@TI2!hT$b3L}>wa|(i|I%OTxDvjUtmVf4kG1f zc^}`~I%9=mCV5{mbx`}l+)w887oJmULOEUnLL}N%Z2!wlI+y^G6VvD}5X?_Bu%m*U zFR%7qdDtnQ}C%kW1pOh zb!5kpa#;N3xg>IR7_TLE4u-fkOSP*sV%{t1*j60T=-@BUws4-seRFbfhxD*{9$13_ z$j63E)7mhfbZDyfbiniUl*sgn4?d6R1GNAfTMxchq4({M4jdB zGKSZx#hFUg7f`!uA8r<=SWNA|+!54kJCR_Cif0G~u`FT7U%jW<@u-tVI)9g&+-HXD zPARZh z%P2{FYg?=&Mxl<1>aMC2e-VccTR?W=D9z-IvtdJep^k`HsE$$%+v5qdTiPBF#N?h` ztPg!^n{=3=RWEz5cidwK7IxL$>0jO5Wy>?xL%ZC12P8Khs(7Uj;ndj=@BW6?-eHMo z!@h|w+$*4VNHNsSfilb7$~O>t8z@e&jBZPFqB`| z$A$&?2i(ZND!h}ixTK>dDI+TMt>sfncAVm_lQZ~{O-t#05Ms_nQ2^++Dp#P3FM95v z;TSq~UBeqVvfHn0Ukn0T+msiVBxs4fGn*dkS|l7S6zF_$TF?13+28l}Z9Ko^M%!nk zsS(C5mBbMi=r1nno8qn0?DzR6N?nQjWs5EE$He6SNFgXRKyF38TLrP0+&1tP8LR#* zL?LeASQg|zoHWxmU~SyT zS1)ESmz6m`6N~`I<{1fFjDQL#;#5~2Ip>g{<3=741MZzEF0jzCB>Z@#6kSgr_aXe= zj6{d6e%^R}?%6<;>{B$Dga1o?aL)?UZE?1X0Ki<(l~sW_AKBA!CMK`;H&AM&f(R|3 z>$s7@?$lz?7@eascDb05s*Ko;qudHp`FrPdYn~4r_?9W}D>jC78dOHEzr~q!qjBlT z67^mAL&3s~dl$Q7NYmHd!W-H9l1uV>&FJil!p8$f;DWXZpP$+!`+gpWsz$IWcw$w& zMroi9v?|1ozO}KxFQu<0Is#kNnH_@9(Odt%i+vBZbWO1CD2(&I#*;uRgob`0+ox#6 z6q~u%64-%0kB5$$X6i7JkoB`QM4lE-g+6pY%q+9Ir$XK!Xlgx?jXdYU%Q8KA1on&8 zfDBuWM)3jHq*p;~3$^B)l+1l;tM>T)3^CJ=nztG@iMXon8IDdNPu|f$44qesWZe0L zZ$LzGQW8{wjd@(v)}Rx_1EgrC0D$sCUOfY=SKQ;(l@DU)o!>Y(bq_Ul%MuoXo^V;;mIkm`Ar1Wo6a}~g4 z2FtsugHR>rO(gs?WEolHUp`EBXTel0Iwp(Cz=r%Fa8^?CL1>bICN?jD`Dh&AiwYAz zRI3w6Jj%iwWEh(I3G%ir@RJ-q{urXG--wTks+<>v#mLCA;}=-4dYGwMch5w~+Kp}m zBxNDPWc$UCdgQ!PO>rYJDa+-(*Zsy~e883ug?8TZo`jFDw+1Tr^F41Mn^u|Ww%Li$ zBPDj*P%gfN7!5Mgjx^&U1ZYW<-S>W9vhv5JcH5^)rZ%0+o)o-;HAO3JMxiUHoPLfs zU#>fKQRu$N)i|H_y$%#>*D)$_XsU@pXyLaL4dqP)WCZFR+N_ z0K92f=9pR*vzd7G<$mAwq@p!lY?fq~FK@i%Fl8x07^9e7|WUM<3?F&^fPlq?_|c1);45YlL{ESXthN#`!2)5QF+n6 zfCx-<_rYuUnN&`!c6!#L4EEt_i`!$z(l4lr(BPKM!o%gyWav^((ObhPwZ}DhAW)Ul zHpkY4q8JqqorbI4Pa=r@{3w?SHu)&kC##zWGQ#pniN?sp-5>0kRlN-`nHTQxZ(>yk zNnKJ?FC1^C6$PXT9BzH6cDEtxyNwid^h^(32nLN1!L`I}%dtp`n6;y^eES6uX(7@5 zQ7-SFV(Xv+H(a(%)p;s%Y+`TU4)+!Gj5BxaWX9$9_mysXw?twe&Yj3MnyaA+{7MES z{^hng_yC48SV;LQ+1Ixn&-~*^%KH8MhnUFMyUb5|o0$f%RPbAg+|=@yj330R;Wd6`w{&F4v7{}?By1P3mb&frw6l{dG)l_6f8YNUD^Z5W)b0xUKmq(hieXlbq z8n6fDYIqQ0z11vrt#pK06|?Vi-&L58JJjz-pFh@PA5!Bj{Y_KByuJ5A*{6Zr{OK1l z=dQq&Hv$cF_@os1on`hbA!C*g+YQZJxHcNB>t0H4>vCsbB~n@YaJ9=cFxf3 zOYfbOJ~oXK{+!zK!+BnYr1(wsVHW!*tr_)!xXywI%y#+kyL-jOL~lhfF*zXN7vIfP z@9W1-jNRUat+D6b_wR3@dYpcplT$vazxRjK%TmOkSl}8j9?7B6u7S&{a@pc&_e3e& zfFew;15Lu$H0gD>Leyc6@r825(KCQnik)Kp~ooHr&pt zY=g}oP0TTwEAVqM;07Os=Fo~G=%B>`zi2>!2!*%+21mytGLtR(+9UJoab4`?Q2%OR87H}%TNgxkPpA1-ooqBaW|xgla6Grh zaIU^p3a3vc-W_P5n1!B$Zh~yiN`_#XO2K}qPHkmeZw_0z%aWJjx<{sc>hW{q@oFAG zK*q^K=OrZ_1S_yHx>bt0Kl^TX4@+#vIZ};_j4C^fUgT*!-{UlSJO$y&z-M6l?{2zI zqYk)F1<4D-Y9WzprYzOlg32>6hh3Q=GDn6I&}vKlnE%}W_fQjO)W=c*xXoQ;0FF);r7sc zZ-W)Ri_~*culeo({CrC1Mlj=DMcn#;yT*D_O8Yp4C*fooLHfA6CHdLNP{5t?JA%*^ z7Gb9wUDAoEMkqsy0EHs>Kts}rTV4eYamC*lt%;w9Kv|Ax1-KMRuGQM#-3ZY1=i~py zpg`Zc?Qz{D_gtoHR(C0JDP?6>IJY@#EXizLFly?Eta+Yl&f1Tj>VYnNVwg}^Eait1jT8!6yiG0eei$gAdKOV@D*MY( zvY~Y1Q;Ah^NoWqB43>hMZw#UAtt7WHtoO~5#zeSi~Pjw1?U}@o!*U44C>>T&?9eNwtQ~^#~?#Rw4x3~^b zD}B@6U>{73nSuO1$yp}bkH_pkxT{vQggy4N*;P-zRIbaq<#y%Y`+S3;bm)BY^|bx! z0k4-$J$AFWe8x;zB-lUG@^WP3hfY|Dy@~BUA6Syi(d||CQ^&y#i~z6iA!l7xF)h|n zFIEaI?)7+ zAR~irT#p4CulS*Qi%yS=OXz5s=e)mPPA$5?m!D-4Y4pEbr)v6LQ?$EA)&@tPirTGXqXb zs3=C46Vi^-_7D2#2PDv{`p{tHQAlGWBkbrF9f|b^RZqzU4;|1dQ-uq9HYt+XR?(3E zqe;$ccmqS{Q|}3E{Y|;?)w~l&h0vkvpSYVX--q@$vMDsPyyRk+hTr}g>+Ugkb(JA%+om0O($2EWH^@$)XdxML=fULE!nvDvpXrkWXDc@hr&%bzVzBIU>&0?$l zSC4<(r5wx#+K81QFlRAuSZoZI!C)%i|6IZTv~vFX{#Y;dO{ut0VUsBXx3$oATJGz^ z|5P~!GfNNyhNyG7;)2xm-tx@7zeD^T=xGtP zroYhN_*j4TKmP&?!$Y_Nl)|`q9+#Nh0YLmTnCA@#{#h}mDWx7fF-#N_Un4$P(VwF(t1p85MA5UlM}8>VW2nApW49BR`$ zJ6r3izA5A7aZxNgowznM;o4hX1ybC%%CuF#hYIdU8YoM)P^9U*=S0BDIG=O4G88*htU zf3>nx+D_ansuDdt_AG!0i$L_WTJ{Z1k^>^^>STqL$ANSOX6yJcA>XeXiW3NQ-V#M= zS~3N_9JGi_&+L$Kv6@Fu;@!U7C;LP$He~VGi$#FC^u!lYj+K#jB%a|Hs6N&!d(3U< z8qCp@E*DF;_f=jFcepN#Bywyon7t1a-^2Fk)+T+ovY|y`_lLph8CziS1<<^59@|x^ zYb4M6^GWY;)kq$9msNPw&(;}06_1|BEH?n4=P_Ezv{=>k9c32Xv{>a#pjA)3^&HL` zmb{l*?$X%yO|QB7=kU};@66r=DzC}YYQvkO`}@R|Hmsl4ahFf~^o?<2Up)>hC!%X~ z%1aG)5>_SBTM~L`u`O(D(Kxa((U99m3I92+hB)-n-qCmL=SIcl)FXJ0Mf%6I!ChAU zj=4W`5YX^hm|!|KTO z3(fPpmNtzm*Dur|jU(4z5{zjbOMr`2fl*DKe{^L=B(SB9{n^Nh7Rh3j(<~U$7&l|5 zzCNU)E9Zr**I2MBEIrJjbIgq4aOir%xejiw{Cc6T(PgzGmyG^h(IG_r6!}Ej(Ghx& zX5K8=&gLmROj&LP%gH8HOF$Kl8DVPuS}k!KmM8uNFq+utA#je$j;e)qkd)!BI(EZU0GH6NM3Pd-R{OnD#6bqMjKEZ{P?=^ zP$bq_mr=aTA!qoTMxmsb$ZOhX%;<@D-$HL?4nF=8FUPaEb7&R25f@H)R>9d z3GLAt_Z@ycE35Pp?B5Q|UySc`UJ{OzFoW%jvO4#+Hce=b;^L}OcoVY-yQQ(?5f~R# z+Wht@^?#nXYM){FlD5@zU)lbL@;8|B|Gocz<@f*d_-TCGaI%%7S+Tk~%2epVM=re2 zc_r}ZF9rHnWx_IlvAoJ$c(^wbSZ)VgcYSa zQ@*Tt#rZ#WEm`iCAL#*Ux#ilx%jNei=Mxl8b93U*hak}Mz+8toR){Q;9LYMeu8l5T zXaDsv5@PcMtyh@$t>uZ#LM>?PKcH%{Oe&byUt&G?hvD1}Rwy z?aMfI0UrJW+KQR|yfh63$LgN<>vuzfivH62TB8gS*qDlH|fk}C#oH3908%0`W! z(Q0j8TOl$-X_3#zN?GpS`2T6_{Oh-GD2A)uiI3Ha?A%3Z2{o=;8Jk~EXaM{pY~JQG z<167PWXC5BM&TQ&)`jvWzxT+EKFr9m)mfQ5V$iJIf5ADB2oRC&X=DBm^HnX&Z^1q= z)__7b3kk-MNDfx5N=fSO`)nUSnS8KjzFl6N$ibReUrmtHpN2_HlNnm-Q(Zm(*}+5e zg`g{w|FxmvR4t9% zHVJwOK%<*=bopPiuw+;4;i2gf(40I~SUqf~I1Y@lKoT=2aAIl~=vIfrG;&^g8k+JP zZ4tipdJ`aChDygEXa8*P8w9Vm#DI?3$Q%N(#e@KY#8MQbeQc-XMXxK9yCS`!*_yH? z0vVT9RtC$zK9!Y`$;saVD`}V~;E!M0JsGTIH&cRBDWh9%0BG*Q24c97(3sgz*+N-e zW}qO;#m&r_@45bDWa(<%uo|kk2*Vl|tCLbQ9#NmTlqw@0m3S7(Ok3w;tdOjBk`g}} zn7H)-S6jrTlM(=SMBEZzb5wn$(V&Fbz;Rxj?de*}$UZ`p*RZ z^Iwbo=BqpAfJ#k$V9~F+=Ih9owPC&)6v0)&AkF$-HD(^2ljaR(;dwV0J+#>n1x{KA72W^?J5)aRK+&xb@ET?LtoX2-Y8M;Lz;&q)F zg@tV&1WSE|!`a=)x5~_1+F|*x{f3W?Ee^l?R-0I^w#f1l(aj^N<>Uc{k2U(~8>dr_(6S74m7H1qdKbmogf}>*r6tXflk(ry0IhPzmR-YQ zlb+3QaL|L1sZc)MK`KMGtKO!Y&E0(ge?#17V7mqd0H5SI+f14dDZxEXsM8s`nXiQ9)GMG&fYndscj`dWf($i1c6c9ye8| zbNaCQ^V?4;Kj%BG3QLSl&`0NbU*nA%+tajtAK4aU5P|<5#MF<#t#lcD_Ehr zix#J4L9cmOVvSBcmp1^iuCV9A(h;thWMTN)bcvR?M*pc57`Hw378Y~7erD)houeMD z^IZ>W)OO9I>>w&nF+BBLmY|Nde8YAQ_nQU_t~@G41s@cYl*4V?n{;wiDKpF!U_9}}`e?LKCu!oxiRh&~ zwGVGXvo=T2M2%GuTPSR1pR{QBh~ZsCx^g7JXo$8~Z$Eq4>j5pBTiE~p1}GJ7`3+-d zzjFPVD4b?23{?ez62C2cSa9ZjJ;EeG{j8Ntm7olF0E7o#P=Ero34#OFdp>{IK-G~1 zzi{fmOJJXV`orC&%g^r)#LLO1r6_h;<}lUk5PfQfe$NvxCO{+?-+(ilL3P}#DKM_$ zvUehiT2;**R0kg`U)fxHFbf}lZY<#ERF{C`@RBOlrwPhlUD zgeuBC=>x~9CJvk(C&4#$ae~Uy0l!u#EU+5-!JuZPJ@X9osA|3i>iV*3*1!GOJpy`|cDF z9Ia1l_o_=SW2H{s>%)JLpI3Tzrt75pIDTrD@3LTqc~r-X6dQ+cAo4EGKVgBnQVe{s zhfE4FhP*zlZR_3ZM6<8QSGAznnZ47w?aeIu8tqO$dQ>?0qq-RE^YuK=u*pw;Iu`0= zeR^0`>;UiKSGtf+lUG?7&55tfHgj)sY9&}Y_N0`PJ% zMev3KA`WebUaj|z>YGNrh$2G(M$;(x7>kn9)5Q|6hvkt=8q)CQL!r*pH$VcR!`Hgq zBU(3Z+jOLhmhEXigVZghxkOpr2&m$H;Ke03F<6Xf-&?;z#V+A!zB}f%KWnv!=dO*a zYJQy6D~)a8)EzD|Py}Id2eFI>pOO7q&T3jtP*9|rQLF|Uy5sb$%6w2hIQQYkXx>Nv z9n-;e+vU`}+fOoN{IcbmYd;=0T${omuM?5wwI7;Kr?^c6DTosFJeQ&F$LsbyXQ38a z2OCG#A8Q5nl9Ca@v3V+hiqET3p*3G>+A_k#yz1YO)cO(j5fa zyB>+&MZEOF!8-?eUBVJ)EMqdn;O~&omhv7}5Wx30*!j0By_9fnx_(MT z7_g(M3okm4zo=n$kCd}NTN~PZ!_#`UkE5CTngIaSnZ)hCLko^`dG@MoCa64Hv4K5mY*RYe#YC{X;Ty2Zd_}CtJ zL`*-Zb4^5#C`%5>3JvxV2z)dBow1>a=O{d>=JhdyvEq8bS$CRO#)zCY^)~dT)rYA# z%D$VjK^At_f76r|<6+$2d{v*FZK5k9Q(!-Me|6Ja8@}OS&7uxIZ*uw0kus(DX}#p8 z8IF|Noz4?+F6 zLzvw${v@n2r-}M7W$quZkjfZj__xqQN}N}IU6O38#S5D zwqwDAeIypETVNi5d(=2Ocm9t5`wLgeASsb>Yry+z;AHItQbDcXY?dS0%R? ztMktjI{=o*Y{gjZgbvR7lUBpSiwT%@0ax6;SvSFHj}wE5n%!FfWBfASsFGng!1v*@yK?060=E+^|t>lJT}A6m%ii5-^BVbBh|uj(C~;YUnBE|Lx;)w0(a z_Ag(r{2*Zs)42n90&Lf1tUw^vyR>)HPp&WG5cI@FMcTH_!3xRzt>uFb>nS%L5_R*> z`XwDVC#%;Z?{AvvjGXG|?9l3sx1Bl0dK6o8{n|QUS2fujIou1{WjYZf8#e#m-afn& zuQlLe|6KR5R|n!nH)15psxQNB+N<0vm+p*r+H7=04)Lm8?w>tsfP@In&RtMt+pYA` zk|o7z7uMz>o32qsH_CAlNjIl3J)eUXoo;DrK?QO$X69!}8t+0nv(StSuG$F4ofs3qO{r z+yywdMhj4%oxH|>!0xD%rJdtmm7}bhRp6LJNbc-4O;n6RajSXq_>euL_M8)WML-bo zvI=%wZa~Y~K|65ct9`FPm!59ye27F}?PSI{@K(mvf!Dg-(DXhjzczP7S z%v+a9&X!C+qmXjRc(gMt0g?Gx5U=kcR~N$el{@D8)QaY6cd`F{07Eb|E-~?)?$|ba zx}LDQ_fT93Wk(B+jC>(=JUkt4)|+GNNiglQt83|h$FXfg^-|#FPQGF|mCU3o7^&~0 z51&Zl+hmR&vmm~(+0VNfA^`I~eCoMNNDLm!>lT$_P2?M0Ee|A55%!1^xmxowD&pDS zKQxM$B{C>)&!8gyr;|PvCzgV7J{MJlg`8ePm&XL6A7Oa+fyq)EWBdv*bZ|)hTk7Je zR9>}qz^~cq6VYtvM~!LJwc#-uP}j2BbUNo4)rBt|Jq6Z?oSlLpvshe1CfCZ2}jir}(CW~S(i-A3Y^ zj!Z?~XSfd@sI`vP>`qCEvgy7*AoDZ>X^;+Xr<~kKt5n;i%`iobT-r6O8jW3F;b>3_ z_K-#DTS}Qg@ zY#Hd``ezY-XCi zSHJXASH>HZ7_EVtRH$2SE{}Vd_XXrLRT&oS--sm0udlDu`%hDZ<|0xT3K<%-Ct@VO z@zA-FA6K}p6C94Os;UvXjLWD>a@!A*xHL12zqQ0`2-yjl=^^t-Kxf+9`ratwQQ9#FV+U|3A!H6XB?pLfT>-%KFUDtw4LkH3!!#i?9;>Vn7@gpyj6BnLU@0#HQL!^+Z+fJ(fZ~h72We-U ziYmU55nYe0!3mZyrk;;CjI^|4*#@cwpC~mnx@c|7yNwl8utJT&h-JOBnI^RG$~W6B zTUlqhscPdVk@kW)I%uV(g*QZPQot^2fi6~?KX5vK!t3hK0$QXBFco*`L3WDQl9 zRxlmF#0D+#gddRn-BiLX)8D4?&~B}T%-UeDZy?Yoi@{8~bAC`YCc|2_;TS_iFUk9r z=MUoH8dAja4QgQ7eubyfDS}WQ{S30DE&ezKl3b~wt428ki1Yo!y;sY!Yo8fI)Q4}A z6*rC4d6O~j} zZfel)UgxIhdJ2CKx>^Xn8^LBp(RSskgom#~V`m{Z>Rdd<=K1L9o&TbZ{e?GTAkmLZ zMENm(Fhb611ees0sYf5RG^Hyussh1;WkJ5RWD|+*`ejonz{lJ!7q4F_agR1048&Bd)_R2T2N$p!olQy571i{P7K|hDF8WljgOxrpKh}^h)Ee z)GVM?;Qwm=Z*BZl%K_HZ+cGXuucg0&$^VLH-omXV{~aT#e)W{#pJVgSJ8A`f$5_1Y z8l3-aI{I(*o3q4tT6Gg4215Ts`O5F|vxmOx|Ngpux8Peugvowk$?UiHpL^(=^gBDo z3g4|rHF`vq=*QGf|I?OrHv^ZoW#cj^#>ZtT~9K!l_-%=MTMm{WN~613rnFg z9Ys>mQ=;KWg`>Uhh-55Tm=;6o`Bb8WH-rA$NJQ7wRB^}mduCQq*tU`S{5!b%9R_eJ zG?nl6dc9X@J&o_QpA>FG*C(HyU<`>uK9(g6^Tb?MPR=mK3l3f(5Ni*Pv00dTRa86# zQRBl*OVY#yT$T+B-}9=QsayT9LI~vlzji()neP|T^0pbq|&Uf4*vBZReCd%=YSW45aS6}d#eDwH#df`ljt^_)YaCVxq z8HKDjB~mUseK^bWnaaeLx*qtHh7>79KGOeq|HIMC&L2f*G@E1AsA4vxlOClKH#jzGq$I4@oM~Xd1M^)*Fj1!A}$BiGgEqQottZMAYXK8m7EwIbd zjj48EhSS-DvGk$y$x3@i{&1&s_W960z0iKQjh{tjH@Ocv>H{4dI1OQVYu?ZB<$<+d zYw`)^^Sy%L$bSpd;=qScnt6y08$==LEelhgky1U1jtV~{-@y+=`0Y>BLC>>~npe*o z5dK9lM+(d1p(7b8V%?tJ%WpJ<`xKA(gTl|q$@UHLTc0`^s-E0>`+dIt;Xr{a`1AP( zbCaPErjLO?;fzpUhFXLXF9_BWkYSbjmGLgy%o=k?vYfo@d?)t<@rUXgg2go##~7RV zq(_+;TMsZ->8`i07St3*@J~CNzVNF2O0I=>Xw_ZdCz&Pa-$B>hjRtoYmA$pRWeO_I z7>p+E_!y-0OX2D{=T~v7Nz2;EZ_k~tUHw#=bE8&L`G(oN{C3r+2!3$dR6aXla>L;Z zPH*iuEY`p^FzhTdDfnz)~xz$j>E7q{wBBe!2b+ODg!Pno*+@|XJu$GW3|ZraTBNEmrUr&jf6{m6 zA_DIaTt}4tAEXQDSZ%lt@PfGd0W6&i`$Ub8gx>4_f-d`>nIl9PNR-ieJob3k^-kso z;~TUuX=QN^p$eKJCJ;q9g#hkZJaHgZ8xl4PBisyM+S>3FZ$UEl@m{0q))uh$E$Z&fmxE@vptlu zp16YrolEPR;$Voj2ED)>8^-^BWpBn8LMYlpcWweFhQGxy>Yh)o-jaXw>Frm|p(~3Ql|IwxT1*fc2pOapMWkIZ zIFE8vr7Y!nM#PYQyd2%Ut}p&R)|J6EXum<7RSW_77}t+0CXte|VYn zt8s|9a6ON1m|<+D&|MYUBq%MUASCWzo2be{BR~x zZ-X5sk0p>V=T06v+VjyJi=S%DXk!_QJgDn zr%c9o7flj1=E5M?Ph;j*7DPq`taE15h8JzU(~NCJzimpVbe#)$X87BE(mhi>LGM3` zz3bo)^9s{W#FMTzO_Ljj@f*= ztFbb%G~9Wy*KaWzl1l6P|DR;Y$-I2)4+0g^pA{duixsm`(;eG&pE_NFxzFBKpp` zB$sWPO;i2?U35Qd{Ow#sbz}zNwerK4w7j|WYmPhbCOyBKFFkb}S>9UG>%8nN4R1*| zh|83)kj|#dr5&ejmPD7(iW}wdyjnSr8=xbm35!crmU!{;1)uUo9+I4)0K+7O2lEkb3GPW~ zqnNd*{HsQ`aTET&qkf&#skqft)r>KQwNDHkEEOWt@{ z&-!_}wXLg7+%8EPczV|OUp%D0GGrE1XRWc#*lg@L+#Oi&1y{pqMmJ~LemVcK^nNZZ zh+vE{m$_f_$~s1QC?%^Uk%r0g1t-0p%GF-#g8h~>yOhbZi6k$kxeKP7;JO9{MHvt^(^qU-gNiAuZ+FwZ-Ys zs)%ikZK;XtD!+>h=T+uaZ7v0_=bSF8@6_4tD<^BMmOHzPx(iirRK2+f?X;>l`^*;C zq_wZA*=;zcwW^P=PnV$fHW>5c8n&vs&FQsG2A9jEANl&PT5rC%<+b&fr-R%i-CW0h zj;9s4mKGPY6=`cmjWcX{yXEaR*U}ltI|qxjS2y)GnO?REb~Kw`j-2T8;kac&C@u}! zqY{Pecz<%MOoy`fTkcqQTWwj%+3oU^c-0nn6s``+M+!l#IBbh~v%F1K6}N_#z9M#_ zM;((VkwFDwJeLe-j;d$q=s=B5^lK`en`I;B{#Y01D}?>Y#^y}})ftEU?q>uiEVAo! z{an=z)#Mjr#}gu?cBBymvn=fTN41l~Jo$$k&%n}j%nx*K&e5UW=Y=uqe5KEH8XN_V zy(TahBl5VM?VB4_9k$ycV(zH!Qc$aTrWSLL(hIH`@QGWUD`_3ML(BE++29#$WNeU7 ztkA`z?$zg$+N+OUanpJI^4i`(Ud)222St~4N9Q5)vEV8{@X?R8jwt`L>!EqBy3)&> zoz+%QkN#%M^l?&;zU}qU^{L)^)6HJ)QSr@8iu;bc`8-{d|AFDS_;BYZ`D&1sV2E!s zTQnCd#cI!4a0|jy1v1-LaA(d0aFr%-Pxode(zAHUv7U&!=8}po2pNtMI+fMJ55nDU z8hb5*`&{8pAaJedTO-Qwp}FulQ24=*xZ+!Tns$4$`HZ3-oM(b-%3gZBXIx^gwAbCx zAtr@_`hX!w3!IEg@Jn)WZ&d(asF`X=n#sz-(F31R;ow6o;gEn&@W6`*c)`IT#(sc% z0Q`LnyhJk*?yn;FWg`Cj8~|K{d#x-YDGB^lHg+;KwR5(xcd@8%rvV-{ZmFW-q9H58 zYiw`JY-nO{WXkMe>j0|)$M3-le6%%nF{JRYwXt*N^$?)?a|bW*8CJ|fMe*kr7i$43 z4Os;W5ql?73QlHLW>zXebP5UzekT(%UM11Dch!M!0#p_*E)KjbEbi{^%XfaIv(vqkuiv(8%7^MSzM5 z*3iFyfBR|bVfmky?40k01q_e{c7^37Gb_u#X9HFFVWqqZmL8@ynxdArfO&v61UcDR z`TyMie_Z)bi~m(qjbrP|+1)6jb{LjqXRsQdbcNO_rU?cx8 zOZ+wSpHjfig6RA#|K>~(U1`T1m_=bYNzvCT9`HMJ4+8Kys`vIq@M6LP%0!W0#>ISl zZYHMK7N94Fr^2e!_)P~FrI9N1=}U^x3nWDP&x&{|cu0v96g(vXD`}7P(x)MYZlBYW z=h6oS4ojgk>B$+pTLt=%1~PirKoMFrG@bz#Hn-8S&p|17DOx z16oF+{n5$?=l#L%i>pICZw#PeF)uZx2mlS=Y_0s>M2 z3zusdUmPVX+7bk{d~=E=ytB3F>&#ZlxUA@?^$LsWa#@+J!Ec7aKI=1Oegdfv+B?s4 zX%PQTnvzxkkKaqXn?^<)G{#teG9>>%UZ1yrry)=R`RP`KN;mTQ=H7m~`>D%o$>#`n z4R|O9vja>-j7^Z0$3E$ z{67EI1WgpM3=S%valF3wpf~6^XYW@QrSE-{!V@r7Y#viS+PypCC;@AO23!B%WOPvj ztAXEEQuf~hhz5L=((~-`ea|GwfOc0brLBVQ$MFu2Vh^LMJ?UT14uD1ROkP_F_g}-= zK-VP5n*S}(SaG0T&*|8df6I^(8TIPT!QQj`o<;Km?RJeMjw0PR{Qr?j@UYHp(f!Xm z2=pc9>Rojy%M2ESY*sBaTJ)+1eD1dZBr3q%JxW%iWr5l9phdQkR(XGkf8#4hWgSf& zi>-03n_{z_J|6GSc)@@yc4zfdVDP3@V!&MISSR)GS|*c7ExmuWrr?4_{dfNn4gy^2 z*cvX6&h~fNqM!KOzFJ6DmAVq5%Hw~7CkR9ck?HPv-{mI@ETNJDDtJ&~O7M@r)>@DR zW`LVxrY$(cq?bUy3wb@Ap_4?JU(S7%^S+O*hVW}=q}8FD4ZfErU2NB&I56!k*~ldc zw*y7)c^uEZ3#$Y3AZP0?@k)HueRmo^j?WJKU8H{Av!;^!lE1Fyl)8KkTJ^FHJNeE- z0^E_8$j*+5StXbo%D+DJ^9^Oxt>&k7YB=4A`Pd>GDLH?WYz3VYi4vrY%ae)ozd7%` zEu@}@f?L333>p;nD~ns~Ylo#K;Xxr6W)`U(?z zSIC4IL56uL+0Fc=(_BP)&Y`V)H{DmEB-@#qb?S+oq+EH>i_B(6iUT|QzF-+UKGF75!Unj zbUsmDh{zD3wfmq{yS`fn_hIb4^TXqZdM~KohL5Zs$_vJ?KRBvj+FNh*JlF|XUp*)+ zNl*kuqRluzk*px)bs5Y^jM-1xnW|8~(QA<7w4Hz4l~c#tIdvn(QlRX{Y?qc=#LEEc^pF^TKL!?+v72VJMje(~_v7gG63 z&z#2?A7GQk*B!3))Vpr4uIu|%O$ZLJciDJ09$yqX{o2ek<4Xi#ul6KVBu(V|20irO z=9n`7;Jn^@uAG}ApY({_&n84ipJY-$h0B`$_Va-yy&nHTD+`ya(}!4y?2hlJo&fWV zSm_z}Xd$zK1o{L9KK=bqciX}X`snCZ`C^PGj3!;Kb~+=p5!sGkQ4UrojB}uD15!zL zbEcEgZAt|uD{bK4QGzi9`hFbRY+HloVP@u1*B9mzkmaZ(WqF<#GpFa*WwzRDdoIgw zBW%>f!ti1~U~Wx;4*RN^CgvR~W-mbxR`ST3@#$C@GQ!AOB(}5LSBPXDP zoX$-Nq*uE;C8NB(x|QXHti5lpBsnO~#~7z48{A9NJd8*!=gRA#+fthFQrn44IWC(@ zw4qmTy^b5jnHyH9z&tnhm0Y%NYET_R+%gX9X^pKEe&;x~qTaGR7QIG|w|?B+iPoFt zre=yAM!5V;HQ*|%A)QEiulSwmsu{m=gHa*d>B=ca(PSF`RMpx}Qgun@<~@WLN;DOk zRQV$*9R5A{q$L%ai45A~y*z0YbR_!H1-Us>KEPc*mvhV&DQCBDeVz-2-%5^`Xw%6O zam0@oYe_Unvm_!Qqfa`!EcO8&v8vDSxzd9D*{zOd=H)FmZ;e98=V0WFoArINyN&lT zOLSSQy}jB(-s?1fDY#7D8oh}_e+Dw~%-jom~{1U%;J zY_lOe%eFXQ;geDPymZU51xy5PN3_ib(zh?YRvwUdg$C+S)RWg(P%%bP8@yL>n5w>;>Zgysyy$zKX?r@jwM{Oy0^n^Y`L<4SM6 ztJ(x`M#(XTYcK6M3&Y7zSMx*$)%6_fNavfOfw$9!4%g+co4l$U>o3$pa>#dmTNw4q zdr^F++uhA;N~(LmcKTR)8C=eI#&*cmaj;Gl8v%O>1@$~BZP*i*7(VDljb(6kE)&`D zToTva*18}U_zu|*t1}Y9msZm}fu&wk69}HI^PkSBU4%B<2Ma77@1)|j+?J$dcfpZZMNv}L^p>&`)=3rj5MdSu|-3kmi7 z>cMcH<{QM#WUT8cX?p5r$7i}OZJxuKe!e{UcBJ`=U+a;G`^Us+Q`iHBv!mXPWJ0s+ z>AFR*=UM2+d0u;+Y%!5XT!{9wx0Q^f5|+r-OP#f!hV*=mI;~;|=eylTnX>dESRc@* zkd}ciGn6(_*37zmW!Z3EBiW)~#umI$(IdR7-=t(>GVP7Z)f0dwaGF<@Ls|H5`5VM~ zNk*^+FufG%Q^_PTpK$c0acGlyXO;Ti&ef8y?2F$ryvLxs8t6(4(Z4enjt+(4ZI0U- zR8|^9Su^jXTs>T@-!kMk{zZ4LW%rm;WVM$zB4>cQ2@<{JzU+6DE;P)TRa@jVaVv*cZ+?b&^2||MPvNl6r^B!`*uf_;`B1?DXuL%qEw-_xe(4`qqjUehICFmrJxR6OzDAQ7Xpls83W z6LP8|lp7yip1({hwHeH7@8k_pI%U(TG|5l13DUSf$!paYe&fSC(ibxG54O_z{(1-| z<+7Wl5&3|{C7)T_L&i6A#LvWjxXNB->m7-C@gx;)IY(W;qVs5?0UA{~Q+0;*nXA9T z!5!L9qBpi^qHD2#UAu3lr@ywh%VXPLo&=mK=I1U)PrL1c{eo$k><1|A=7clC5 zo_CJ%MDv!)EOHs^a3xA2*6z_)$>8P&?^#OsdB4=_#zeaJ8V~#^|HLs1W`VV*XOPM7 zBmLqd#qwJ0_Gar#n?x;##uj~@l@2V@$spY%`8W(kb@SWhnd6nY`EioKqwyuZ328E}OY#6^K1vrMs z?exFOPoAALIG#)%C0E!8*f-v2)iuuLm?>}bt+a)ZafE4SBvxqGRIa}(h|5s;>ZR(P zang@$HBOKy07i@}yctFH)Q++}YeCMu)QqGaO80jkHT&{(}Z=H{Un666}WD9fc|A9TWT zLUQL&0Ri5~=%4G1LzXo8F>#tnFPl_e1ty|+C(x_128tttpV0Coh!KeI%(Spr*vH#h zW@(piyd9L&s`SX`zx~nU=DL-Wq+{ZRJ<#WdtvjV%DKV58r7*I%Vx>CrQlWA0~PKZBOs^JXLSmAjyhI$@TF4u@= z_F}{Hg@}_gOBM^X5r%@m)VNXi?n)P)9-IBgjFy@r$h9eS+Vx0r%TNEt)Vq&>m~lO$ zK>6`M^izfOxVo0Q>T^ERzX0C@2;qO$z(4y3IF79-4*y@*?18TN;F_6bw#|PES5@qeu=&@64Gf$!F>pM|Jt~D)2M}gm zx#n}c``S3ZK<$mxSnB(N1u1w0A$3lS_iygIki`Ow)K}T*9~jgDu{-!Tq0uSfC* ze!B)XxNS1(+C$Q|w`=d)KVSx6_dG=Dr2CF?I8^mt_X=w9dFk}>Z?Eef8${}t)N*Tj zU!-L+wGgF5p~TSK**Fx2vVGFx)|i0?!mV^sZ?d{2&Hi@u9Uf2*fVmIxV1&cMmv26H zqh+s~4=puXGWvoSmwl9D;bAQZ$D*@#vPcq-TaR`3AjGutUaY^~Bly;C{l~oPdP*rK8kB^+Z(S(S?(Qh=M~k4}%`--U<(gVM@^(x=~KmGE>$ zD)D~Wgl~{EW@Chez+*%^RaWDo1?tj=q|2E9T!R+ymFLxO3)f_`J`-#HJyw8z4dEMn zoh+kYGp@H?@IxY_#x_z9RJR$D&5TZE_-IJ)pp+(m~*Za2IpdxOB1!ALH`O8fYg&9L_g5 z`q_elb)h6-H00|#|KJx7fZk;l8s64}^=lUfZwcGJ6vTd~ugV}N=?;Sa?T>^iyw_FM z=s}aW8^P_D8He`j3*Wp*NX4A5>8}DC(6PujJ&|j@!=d>`hZn=bY&wEIQFlX~2WB|T zXy!e}34%Sohu^|_>!I@n2{U)^CU4|DePD$Kun$@gS=;{rLV#qf-OuN}Gi-Ju;G$Ml zTvd0JL?9k){uY1bZQakG7Hs~;=0~60&z}Y`fA5Jw1^;QIEM3~F%3a3l@{TAmj&-+V z(=BrdgvNe2-ael{M7gUg3XrV~zY~PNe!!&hy$H9Nuvo|wx?e30HE<$LyLRLg3A@$I zTn!~MJow)L`p@~|)AHZGWW$&tDNgTshPiLAeK)6boafm>M-ud&8>c<5z4H`7_zzyb zc#R)bS~n$$U)gwMC;f!*lYSc4lf+cGCjz5&VPs!9`4TQd3`X|AXTtL?NA9=)7Oda1 ze^|uU3Sh_?w!G+(_fEAU2e5v1hf6m1o9F-amR1&by|jq?Ivy}btdL!A4m$mx49Ki6 za<=H*h-%@&_>``&DN@Ej=bbj5*#mLqc5_~-kQa0yMhJ6*M!&sxWIVm*tCSk5`v~E8 zFkl6;!CD&gz~Bei-S%;LzkN?nPtsKyJsj({`)5|W8JOeVyhlHe{Aczh7$@q}6nA5X zjPWFX*?O$(c<1o9$U!#-;_5rCs_fg=*TdJlmnJjSkUGw@b&$W4FDAj=$CDa&D^5JzA#ehvia(g=9ii><4i6yysd9*FoRuL%%xNolAvu(?$?U)M(qsfc%o519a1&FV|Jm>1y4&e!P)5 zsp%Sgb)3LjJv^d*^z|k7Z%;GB&|Fja!gnoaTf|dU)=4`4w&MDNjdyfu;2>a>FTQ7- z%SgpX4WeowY$y25T5rp|8`Vck(%apAX#pCXf{>uS~yyuDMG|y z5zVwWvTWbTA+t3q_?nr&1@h>0;ofbKfO8sS_s5VADz|oxj5NqmlzDr?zOvJW8I*fV zy#K{_Y`!6krA4a0;aj?lEQq;SyE-1AbZWrqo@U0$0`4W4NXNpr>w0BPzSt-A@-9!4 z@7d-UG`z?i_Wm~%PJuAC!^yNq>LR>75d145b!B7-)N@JhW5ULJS)}H)F-UoSG4p-6 zK+Ku#!QSKZr9yktU68+2*jnF8$!^W1orl>7ZMFJdLYuu*1ksquY}E4VukF$VHaVd& zcP#t6jh3Pja8wWK{!j&B0-cSe2;a-onFR>o2r(gKzHiq0^eGC}N~`NOqIVISyryN- z(|H2wYxGkqv}ZsDHN17ZADztNejS`A=}(nfj}^U`v)g{WqY`q>Fj%vx~1zbUOdvDmy^F>W?oup!vHmy+%n@t#@KBCV#ke`3r66-D;RLY4d= zv_X1_7%CojM)~9vX7}q$p%cy|U8nE5W#27FXb+E~z@|e>&z!o%2)dV}Zn(HQ7If}* zj^D2VuYd3qt5e>f?T6T_3xM9ddI#FE(rY@DH1kkjztMG7D*tR-%5ZJ#@Y2yf%|?lrSJk)(@+Hs-F-pp z7*J4RM}{79zbZuKGaZh~sen5i;{JtgF~hL1ZK(c#3)@kAptmRO02NZgN1L9EAs}>rVmn6*S@}{`7;m-9+>v=l{6n2 zK`;*>+^Wvw8)|ytTauvFmVZC2z!j%InIr(?OdQU=;5=Vrv zgIa`11!0HkcLE@$Ir%k985)4%o1$jcgu?S)M3OPHz0-Yuj_sqh#29Raxx=EE3f<@U z2$C$B|B;n&gn&TlOw$=K6)H~X$(#6qo%2wb8F46DNm}4=1gWBJ5Fpc4xYv#%L}#UcCsRW7f>q(;B|TyIW&yRKP8n-v(Wl^ zU2W`751a)<3ax5|rGuLvkw;-A$xcE!Kn|}#W?ArmeGLx26o6`;IXSUKX+%esT9#g; zl>`HVZPYR>=^5mbnPUZ-xLq2qD`iD`(CoyuGzH0?>~roHd352T!-$(JZ47^{@evlb zxnMZ>Gi1WYpWM8cUPNHJ7M$f-++Fk`w|hRx6Q%yw28{rATu(@p3UqqQU?2@oU+~8{ z0)#V=Ci|bs+vwb%7N{QbfIYlz-+ugOOnx++v(=9gVgCYYC{W;8+V}h=f+Y1|nO{?O zJ_bJQglwc}UBY6id~7O8L4W`(i|C_GHXn7L{SE@98arL^x@a@tb+4)H2bzFq2gVaT zclezhuMS7Ci_rg}uOFq~kwy41nAP`}OxrOrU-o^i^&g)CKViEHncu<0q**SpUCrpVG+T0rbrQH+|(1r%MK|EUu zN4C0lPwwNveOMS>%H=KsG|zjqoh#b9o;#k&h)NM{1YV42^a+dJ>{AkIKDV9tCw=|#FybvCs&Hl6NtqR9Cn1FQWLz(V z2pyOZJRc2Wriq6WQI8eoNNy@UJB$_kQSw5u{2feZI(Hp5Aw1r+IJ{`MG7kDyV5z$D z?Q7&GsX9L{0Y#W#rd4G{i66;Cp1_aD_Cg^u0FPcrqxtgY!MW#B>A}r!Y}3W84y8(o zN0QRgK-f9UMzJ>_bo)CH@qtV-IdGg&Kn0s*s#lj|}TsN|)osFyUY zS@G0syi86M)IDkj-?HlcN(OC>70wuN7I5_%o9RMpwdZ}dZR_@e4p*O!h$MlJ)*F!z z)&^^AIqjQI%5{8K@txW{*QMU0cXk8BGdn~>X={Q{prvNf3$S&oE5i9@Y20>!NFYvV zQ~-)w=R|>_{rGxJ$VvhMN;g`SmE>(;aQ5ZgX;-!FjI%BdsaLwdsr)$*BGc}r7?k=0 zVZW2w3Cw)!U_By6trF3^ z5jj3pKs#jgy*;&2`E>C0<@izGI_MM1mR$Xhqa)Q)HQ8Lb^fi(t81j~&5BwpiN=zRt zOoEL5q?g2P)bMw%ERp2$Tg;W7(oQL`c}4>BTzyX&WpIv4*YA+;;(kXT8_y03r>rs$ z2VCYg|EJ0}bg^)x@Pt#O1&DfL(q`5eN2ob<-umpt*v!@{W_Vpa8v3#*nv-$rl4Q-N z_hP07`rG}H%V+nUTF2pR#dhj7b}Lfr&lz%%a~fD!(DfWhBnU5-N?)QX^9Kuhg8(ex z{gd6J{;E7I$7yvryHh}5H9rrO0BDtF3_XA-*ITw{G6fUXEWA>*YHW5do0U4yPkjHU zvet=W)Esv;KS}n3$A6k~`iGgGUPW$1#j)ObI?)NFxv1VkAzKo$-yb|T*YEGWTx>|Y zz^_@-QXPD4H&LQ{;7=`BDG+BpQCtD9V$DYIeJ+O}1QTnbSevDj#5w$&hhK--QlLPk zgwg1xg_bn31PDA|s8@&c51kSw3pywAPeA>hl;+x-+>_18&b^OQTEu!BS63mCSHmPj znexG&Fy22p9N1&JCJRPiFe7+Z1UCj+Ih=ruYwwV}nqw9PL^C^>Xr}vc$=?o4 zM^@q7b2RC>UL8}t9$wQ1I6figUXSHx*O?Q@@S#vs-{9Wj7jR6j`)AqxG-8;wf$m&0D)zMq87JIryc)dP7L#_}4*x;y(2 z_vOmx2h+qNHrJ34oEDeYA-TXBBXt~y!9vrwA1uS1BhMmX=}^M2PytShP%DO)M#Vrp zda)A*pG;G%*LEz4Zgwv@HyS2w;14^@$-92;gQu2xL+rn5)-KYRbB}3~HhT7`tuufN zQG&6BF5Y2Y>~8smTydW;47EzFw+hVJ2XHsJHDfsKn>8fQtb@>>Fj8>2)Q^*CRhoS4 zy)dq3+3q=1%47xwJg=T?V{UCvA-8)gqSd8etvm~?Fq;RkSZ-X zU4gVzuZ^X|w$hdt{=Lb|+p44ZW2H^!iRp3bc_(PEtWVN@Z)Hs7TYBqWZx=vYZWqP9 zzfC2}BDO5C!6q0Fm|)4Fa22XY2>n+AkVhCYFgO?DVxfMz;_drefu};!c=J%gK40Z~ zmdu%F7Bm)^Jw{fZwi)<}*a^v$Bos3?vunzh)Q$)4ZVj?_^^3d>59a=gSr|{IA*N~8 zRK85Q1@QvMQ9^4ZjvukYthDM5SY9Ml9rw3DH!1s4O;Nx?>8=<-k^Qq|;zBK!Yb%@MEOnA}<6$^mj&o+%0wx&vVjdTIRTXg7US9Q-n#^AzpN#7MI!`u# zFum~oP?l>NV*6&b%^h&-0CnWg%j;u_haPp-pPMd$Z0-XSrXw_LUTm4*!Y6&HQ*|EL z$zRklsnm+~Y`3$+sL3|QMg%e2H(z=$=BSH#kGc$f$ThzZGz_67_d0T{gG7?KNqzRRJYg;u$pZN&d&+X)R@(HT`*;bQm5mB6dNd?gqGXmf9R$ru?*URy!eyVk zFUY5txxb8Xb)Hjx_-rFe+tQ`DFUrn}Oh0BM&!un_TOoGVS(_xV~{Vd8g>H z3m9)@$~S&ybI;fisCszoTc%!3IeH0gP`BIk3c22m3E8b7X5DUVJwGIn0@mzwBUN!o zirsvpShWeJKWMH#p^~Ses*k!@%JhoEx@fd@u*7<~0zFyTQ^-tRj>(ss(uTrmW7A|)hhu|dDQ?|yL ziK4mN<1Vhh4g8Y0T}PQx=GfaDKYn64n%R84b36AF4Ln09*cOiyPoEo30>-Z(B6nc3aLX-47 zWnJX5vGPKsr-LsE={VR@Wc8?)O`s5aCiBB5s;sf+1HAiO<5@-AK9;%`YedwLN* zB9A%E+*a~O;#x2TSO=CGGE?z;*1?IgbtzKEz>)qhYypUg|H~~vG=RYjwX z?O2gyH!&Qr^&kNWZiHi5kFUfM;(Boajve4AR=3dQ-U8_35AmQPT}V}&f?Jt4O)fl= zXltaj`W6VL`M>}}KgIu4u%GK0A&?yHe3ycJ{%BBqrjoavWB zuMa8CFh&>I5X8{|B`F(C{EylAY5&p_BgQ$owWvQ~_PJS`eFOta6etMOmw6b9Ku%&>@pcOYFpLubVG*$Y9DMq4+IHrfG|?-z4w=q2@lW? zYBuOd6LeN9YbOzb3uFX5>jv*`%KoKZyBTw+-&9RUbY#i=^$nV0U`VmmmUFr<=Wyj} zQ1TU-WJ{n9?;9|rH~&_acnq`?n@yRIg76*hn;nA7pL~pfQ-B3I^dnY6L^5JlXtKiJ zoU8Eeg|=h*?(60Ghi7rFv~^e2G~7%bFZYGp_N7HUlrBGfm&fS$Y{m%TnCL=EiYE~8XNij=!e%e)zpBz6Ku&^Ar^6pp43*{!V4}yI1q1~E zh4Ef3D|{bsgUcXV$IVon@ah6bv);y2#;yrq8IsRtRz9ylK%4e){z)({9ta9(Z?6uc zZq*$xlKj{ zQtrQN{jF$hvONxw95TD8Z7rUuUO!W=SLv#)k^C6@Y^4)TsH-%Nw&$C?cHc9<%CQ~2VO zusHao*VCSm&|k8ch{L33yjZEyLJ<%KuMS}9S2Gdw!w1O8ZtJL?ib&7uM+C7Ebck)^8bY83<2 z*i(9S|3|{F&dJ*?st_RCH>}_L63|#|=cA51UlFfrm$uNGr}xlyNEr!GaU1(d&mu|APS90^Q#NIphFC6~eg+W2zb z1dsDu>SW$b_*|6OFG{uZoeC3crwu{KY~IH%|Ib;$-4B!Bro6qUE98K5+1g4Ax7^WE z{|}>rHy%94@p0w8ATah!FKd17uLz>4i7c^C6749*I|JuHHvE651t)wB!;f2KQ0rzt zWLyyNKAA30bDYjU-wKpYp;zNp>rP-`aK24rsc~s)Ut7N| zJWrO*@oQqswwvR1n$8ai@twG8Qp=T-=8CFKwLIZVqcl%*OSyvP3*IChkOjU2Hq~eG zpj7JUSp*{C_gh^(vJhv!pCt59Q53f?-8o>$0J_$n^kSBU)g)cU1O{?Cf!)m)@&eaI zkn_U<^JLARdxe^n-`$~lY^BAKm3C9Jr>;4l@OLi9nY5)ghjV0b&LfVtJfn2ny2P5D zufP`Ai#tX0bw6kgtj8+}jR%A7(mruzJ#<#+1^dC>8~* zxTLP)n$u`tZl{(n3Nr{#b|+5JcrG@KvJR2`pWen5>DI`luv%ApkF3Ilp=hx61Ua8Thu`yOKgsk@m1(n=@luh2eAQ|B{AOMkkk!cUM$lu7E%ceG6cA-4pdpvPSz63a3bv9~yAu=RI=Z}LBGo^QKtGr?#)h?OShZ*~c9yFqEU zm!Y?Hz90`7W>x{~lzzUNh)MzTM$CA2ijh{9Jb~S6TQKuo`muHCm_D`8nS`ECvwulY z%PPYw^^q+EjBCeOls7~Hoc8l7CAB+B#12gt)2W<;TMnw;BO;Rui7CPg+a8C-HDRAU zWJ11iaC}oASj%bu$!l`u0KJ4{C8?vd7zV#wCldjaF!H%WDg#rn!mI~2Z!>)RQS6iS z-MIJoTsES0{Fj-W#A~#3u2++~25|l3^sog@Du!B}fnP(c0(qZtXkdS)<(A8C0t>(M z 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 diff --git a/fast/stages/3-data-platform-dev/factory.tf b/fast/stages/3-data-platform-dev/factory.tf deleted file mode 100644 index 34fe9dfc4..000000000 --- a/fast/stages/3-data-platform-dev/factory.tf +++ /dev/null @@ -1,197 +0,0 @@ -/** - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -locals { - _dd_path = try(pathexpand(var.factories_config.data_domains), null) - _dd_raw = { - for f in try(fileset(local._dd_path, "**/_config.yaml"), []) : - dirname(f) => yamldecode(file("${local._dd_path}/${f}")) - } - _dp = flatten([ - for k, v in local.data_domains : [ - for f in try(fileset("${local._dd_path}/${k}", "**/*.yaml"), []) : merge( - yamldecode(file("${local._dd_path}/${k}/${f}")), - { - dd = k - dds = v.short_name - key = trimsuffix(basename(f), ".yaml") - } - ) if !endswith(f, "_config.yaml") - ] - ]) - data_domains = { - for k, v in local._dd_raw : k => { - name = v.name - short_name = lookup(v, "short_name", reverse(split("/", k))[0]) - automation = try(v.automation, null) - deploy_config = { - composer = try(v.deploy_config.composer, null) - } - folder_config = { - iam = try(v.folder_config.iam, {}) - iam_bindings = try(v.folder_config.iam_bindings, {}) - iam_bindings_additive = try(v.folder_config.iam_bindings_additive, {}) - iam_by_principals = try(v.folder_config.iam_by_principals, {}) - } - project_config = { - name = try(v.project_config.name, k) - deploy = merge( - { composer = null }, try(v.project_config.deploy, {}) - ) - services = try(v.project_config.services, []) - iam = try(v.project_config.iam, {}) - iam_bindings = try(v.project_config.iam_bindings, {}) - iam_bindings_additive = try(v.project_config.iam_bindings_additive, {}) - iam_by_principals = try(v.project_config.iam_by_principals, {}) - shared_vpc_service_config = try( - v.project_config.shared_vpc_service_config, null - ) - } - service_accounts = lookup(v, "service_accounts", {}) - } - } - data_products = { - for v in local._dp : "${v.dd}/${v.key}" => merge(v, { - short_name = lookup(v, "short_name", v.key) - services = distinct(concat( - lookup(v, "services", []), - try(v.exposed_resources.storage_buckets, null) == null ? [] : [ - "storage.googleapis.com" - ], - try(v.exposed_resources.bigquery_datasets, null) == null ? [] : [ - "bigquery.googleapis.com" - ] - )) - automation = try(v.automation, null) - exposure_layer = { - bigquery = { - datasets = try(v.exposure_layer.bigquery.datasets, {}) - iam = try(v.exposure_layer.bigquery.iam, {}) - } - storage = { - buckets = try(v.exposure_layer.storage.buckets, {}) - iam = try(v.exposure_layer.storage.iam, {}) - } - } - iam = lookup(v, "iam", {}) - iam_bindings = lookup(v, "iam_bindings", {}) - iam_bindings_additive = lookup(v, "iam_bindings_additive", {}) - iam_by_principals = lookup(v, "iam_by_principals", {}) - service_accounts = lookup(v, "service_accounts", {}) - shared_vpc_service_config = try( - v.shared_vpc_service_config, null - ) - }) - } - dd_automation_sa = flatten([ - for k, v in local.data_domains : [ - for n in ["ro", "rw"] : { - dd = k - key = "${k}/${n}" - name = "iac-${n}" - prefix = v.short_name - description = "Automation for ${v.short_name} (${n}.)" - impersonation_principals = lookup( - v.automation, "impersonation_principals", [] - ) - } - ] if v.automation != null - ]) - dd_service_accounts = flatten([ - for k, v in local.data_domains : [ - for sk, sv in v.service_accounts : { - dd = k - key = "${k}/${sk}" - name = lookup(sv, "name", "${v.short_name}-${sk}") - description = lookup(v, "description", null) - iam = lookup(sv, "iam", {}) - iam_bindings = lookup(sv, "iam_bindings", {}) - iam_bindings_additive = lookup(sv, "iam_bindings_additive", {}) - iam_storage_roles = lookup(sv, "iam_storage_roles", {}) - } - ] - ]) - dp_automation_sa = flatten([ - for k, v in local.data_products : [ - for n in ["ro", "rw"] : { - dp = k - key = "${k}/${n}" - name = "iac-${n}" - prefix = "${v.dds}-${v.short_name}" - description = "Automation for ${k} (${n}.)" - impersonation_principals = lookup( - v.automation, "impersonation_principals", [] - ) - } - ] if v.automation != null - ]) - dp_bucket_keys = { - for v in local.dp_buckets : "${v.dp}/${v.key}" => ( - v.encryption_key != null - ? v.encryption_key - : try(var.encryption_keys.storage[v.location], null) - ) - } - dp_buckets = flatten([ - for k, v in local.data_products : [ - for bk, bv in v.exposure_layer.storage.buckets : { - dp = k - dps = "${v.dds}-${v.short_name}" - iam = v.exposure_layer.storage.iam - key = bk - encryption_key = lookup(bv, "encryption_key", null) - short_name = lookup(bv, "short_name", bk) - location = lookup(bv, "location", var.location) - storage_class = lookup(bv, "storage_class", null) - } - ] - ]) - dp_dataset_keys = { - for v in local.dp_datasets : "${v.dp}/${v.key}" => ( - v.encryption_key != null - ? v.encryption_key - : try(var.encryption_keys.bigquery[v.location], null) - ) - } - dp_datasets = flatten([ - for k, v in local.data_products : [ - for dk, dv in v.exposure_layer.bigquery.datasets : { - dp = k - dps = replace("${v.dds}-${v.short_name}", "-", "_") - encryption_key = lookup(dv, "encryption_key", null) - iam = v.exposure_layer.bigquery.iam - key = dk - short_name = replace(lookup(dv, "short_name", dk), "-", "_") - location = lookup(dv, "location", var.location) - } - ] - ]) - dp_service_accounts = flatten([ - for k, v in local.data_products : [ - for sk, sv in v.service_accounts : { - dp = k - key = "${k}/${sk}" - name = lookup(sv, "name", sk) - prefix = "${v.dds}-${v.short_name}" - description = lookup(v, "description", null) - iam = lookup(sv, "iam", {}) - iam_bindings = lookup(sv, "iam_bindings", {}) - iam_bindings_additive = lookup(sv, "iam_bindings_additive", {}) - iam_storage_roles = lookup(sv, "iam_storage_roles", {}) - } - ] - ]) -} diff --git a/fast/stages/3-data-platform-dev/fast_version.txt b/fast/stages/3-data-platform-dev/fast_version.txt deleted file mode 100644 index 6a2f91bcd..000000000 --- a/fast/stages/3-data-platform-dev/fast_version.txt +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright 2025 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# FAST release: v54.3.0 \ No newline at end of file diff --git a/fast/stages/3-data-platform-dev/main.tf b/fast/stages/3-data-platform-dev/main.tf deleted file mode 100644 index 53c472f29..000000000 --- a/fast/stages/3-data-platform-dev/main.tf +++ /dev/null @@ -1,134 +0,0 @@ -/** - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -# tfdoc:file:description Locals and project-level resources. - -locals { - environment = var.environments[var.stage_config.environment] - exp_tag = { - key = split("/", var.exposure_config.tag_name)[0] - value = split("/", var.exposure_config.tag_name)[1] - } - kms_keys = merge( - var.kms_keys, var.factories_config.context.kms_keys - ) - location = lookup(var.regions, var.location, var.location) - prefix = ( - "${var.prefix}-${local.environment.short_name}-${var.stage_config.short_name}" - ) - prefix_bq = replace(local.prefix, "-", "_") - tag_values = merge( - var.tag_values, - var.factories_config.context.tag_values, - { for k, v in module.central-project.tag_values : k => v.id } - ) -} - -module "central-project" { - source = "../../../modules/project" - billing_account = var.billing_account.id - name = var.central_project_config.short_name - parent = var.folder_ids[var.stage_config.name] - prefix = local.prefix - iam = { - for k, v in var.central_project_config.iam : k => [ - for m in v : lookup( - var.factories_config.context.iam_principals, m, m - ) - ] - } - iam_bindings = { - for k, v in var.central_project_config.iam_bindings : k => merge(v, { - members = [ - for m in v.members : lookup( - var.factories_config.context.iam_principals, m, m - ) - ] - }) - } - iam_bindings_additive = { - for k, v in var.central_project_config.iam_bindings_additive : k => merge(v, { - member = lookup( - var.factories_config.context.iam_principals, v.member, v.member - ) - }) - } - iam_by_principals = { - for principal, roles_list in { - for k, v in var.central_project_config.iam_by_principals : - lookup(var.factories_config.context.iam_principals, k, k) => v... - } : - principal => flatten(roles_list) - } - labels = { - environment = var.stage_config.environment - } - services = var.central_project_config.services - tags = merge(var.secure_tags, { - (local.exp_tag.key) = { - description = try( - var.secure_tags[local.exp_tag.key].description, - "Managed by the Terraform project module." - ) - iam = { - for k, v in try(var.secure_tags[local.exp_tag.key].iam, {}) : - k => [ - for m in v : lookup( - var.factories_config.context.iam_principals, m, m - ) - ] - } - values = merge( - try(var.secure_tags[local.exp_tag.key].values, {}), - { - (local.exp_tag.value) = { - description = try( - var.secure_tags[local.exp_tag.key].values[local.exp_tag.value].description, - "Managed by the Terraform project module." - ) - iam = { - for k, v in try(var.secure_tags[local.exp_tag.key].values[local.exp_tag.value].iam, {}) : - k => [ - for m in v : lookup( - var.factories_config.context.iam_principals, m, m - ) - ] - } - } - } - ) - } - }) -} - -module "central-aspect-types" { - source = "../../../modules/dataplex-aspect-types" - project_id = module.central-project.project_id - location = local.location - factories_config = { - aspect_types = var.factories_config.aspect_types - } - aspect_types = var.aspect_types -} - -# TODO: Migrate to new Policy Tag on BQ. -module "central-policy-tags" { - source = "../../../modules/data-catalog-policy-tag" - project_id = module.central-project.project_id - name = "tags" - location = var.location - tags = var.central_project_config.policy_tags -} diff --git a/fast/stages/3-data-platform-dev/outputs.tf b/fast/stages/3-data-platform-dev/outputs.tf deleted file mode 100644 index 74e7d983c..000000000 --- a/fast/stages/3-data-platform-dev/outputs.tf +++ /dev/null @@ -1,224 +0,0 @@ -# Copyright 2024 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# tfdoc:file:description Stage outputs. - -locals { - central_project = { - id = module.central-project.project_id - number = module.central-project.number - } - dd_attrs = { - for k, v in local.data_domains : k => { - automation = v.automation == null ? null : { - bucket = module.dd-automation-bucket[k].name - service_accounts = { - ro = module.dd-automation-sa["${k}/ro"].email - rw = module.dd-automation-sa["${k}/rw"].email - } - } - deployments = { - composer = lookup(local.dd_composer, k, null) == null ? null : { - airflow_uri = try( - google_composer_environment.default[k].config[0].airflow_uri, null - ) - dag_gcs_prefix = try( - google_composer_environment.default[k].config[0].dag_gcs_prefix, null - ) - } - } - data_products = { - for pk in lookup(local.dp_by_dd, k, []) : - split("/", pk)[1] => { - for kk, kv in local.dp_attrs[pk] : kk => kv if kk != "automation" - } - } - folder_ids = { - domain = module.dd-folders[k].id - products = module.dd-dp-folders[k].id - } - project = { - id = module.dd-projects[k].project_id - number = module.dd-projects[k].number - } - service_accounts = { - for sk in keys(v.service_accounts) : - sk => module.dd-service-accounts["${k}/${sk}"].email - } - } - } - dp_attrs = { - for k, v in local.data_products : k => { - automation = local.data_products[k].automation == null ? null : { - bucket = module.dp-automation-bucket[k].name - service_accounts = { - ro = module.dp-automation-sa["${k}/ro"].email - rw = module.dp-automation-sa["${k}/rw"].email - } - } - exposure = { - bigquery = { - for vv in lookup(local.exp_datasets_by_dp, k, []) : - split("/", vv)[2] => module.dp-datasets[vv].id - } - storage = { - for vv in lookup(local.exp_buckets_by_dp, k, []) : - split("/", vv)[2] => module.dp-buckets[vv].id - } - } - project = { - id = module.dp-projects[k].project_id - number = module.dp-projects[k].number - } - service_accounts = { - for sk in keys(v.service_accounts) : - sk => module.dp-service-accounts["${k}/${sk}"].email - } - } - } - dp_by_dd = { - for k, v in local.data_products : - v.dd => k... - } - exp_buckets_by_dp = { - for k, v in module.dp-buckets : - join("/", slice(split("/", k), 0, 2)) => k... - } - exp_datasets_by_dp = { - for k, v in module.dp-datasets : - join("/", slice(split("/", k), 0, 2)) => k... - } - files_prefix = "3-${var.stage_config.name}" - providers = merge( - { - for k, v in local.dd_attrs : - "${k}-providers.tf" => templatefile("templates/providers.tf.tpl", { - backend_extra = null - bucket = v.automation.bucket - name = k - sa = v.automation.service_accounts.rw - }) if v.automation != null - }, - { - for k, v in local.dd_attrs : - "${k}-r-providers.tf" => templatefile("templates/providers.tf.tpl", { - backend_extra = null - bucket = v.automation.bucket - name = k - sa = v.automation.service_accounts.ro - }) if v.automation != null - }, - { - for k, v in local.dp_attrs : - "${replace(k, "/", "-")}-providers.tf" => templatefile("templates/providers.tf.tpl", { - backend_extra = null - bucket = v.automation.bucket - name = k - sa = v.automation.service_accounts.rw - }) if v.automation != null - }, - { - for k, v in local.dp_attrs : - "${replace(k, "/", "-")}-r-providers.tf" => templatefile("templates/providers.tf.tpl", { - backend_extra = null - bucket = v.automation.bucket - name = k - sa = v.automation.service_accounts.ro - }) if v.automation != null - } - ) - tfvars = { - aspect_types = module.central-aspect-types.ids - central_project = local.central_project - policy_tags = module.central-policy-tags.tags - secure_tags = { - for k, v in module.central-project.tag_values : k => v.id - } - } - tfvars_dd = { - for k, v in local.data_domains : k => merge(local.tfvars, { - for kk, vv in local.dd_attrs[k] : - kk => vv if kk != "automation" - }) - } -} - -# tfvars files for data domains and products - -resource "local_file" "tfvars" { - for_each = var.outputs_location == null ? {} : local.tfvars_dd - file_permission = "0644" - filename = "${try(pathexpand(var.outputs_location), "")}/tfvars/${local.files_prefix}/${each.key}.auto.tfvars.json" - content = jsonencode(each.value) -} - -resource "google_storage_bucket_object" "tfvars" { - for_each = local.tfvars_dd - bucket = var.automation.outputs_bucket - name = "tfvars/${local.files_prefix}/${each.key}.auto.tfvars.json" - content = jsonencode(each.value) - source_md5hash = md5(jsonencode(each.value)) -} - -# provider files for data domains and products - -resource "local_file" "providers" { - for_each = var.outputs_location == null ? {} : local.providers - file_permission = "0644" - filename = "${try(pathexpand(var.outputs_location), "")}/providers/${local.files_prefix}/${each.key}" - content = each.value -} - -resource "google_storage_bucket_object" "providers" { - for_each = local.providers - bucket = var.automation.outputs_bucket - name = "providers/${local.files_prefix}/${each.key}" - content = each.value - source_md5hash = md5(each.value) -} - -resource "google_storage_bucket_object" "version" { - count = fileexists("fast_version.txt") ? 1 : 0 - bucket = var.automation.outputs_bucket - name = "versions/3-${var.stage_config.name}-version.txt" - source = "fast_version.txt" - source_md5hash = filemd5("fast_version.txt") -} - -# regular outputs - -output "aspect_types" { - description = "Aspect types defined in central project." - value = local.tfvars.aspect_types -} - -output "central_project" { - description = "Central project attributes." - value = local.central_project -} - -output "data_domains" { - description = "Data domain attributes." - value = local.dd_attrs -} - -output "policy_tags" { - description = "Policy tags defined in central project." - value = local.tfvars.policy_tags -} - -output "secure_tags" { - description = "Secure tags defined in central project." - value = local.tfvars.secure_tags -} diff --git a/fast/stages/3-data-platform-dev/schemas/aspect-type.schema.json b/fast/stages/3-data-platform-dev/schemas/aspect-type.schema.json deleted file mode 120000 index 3813d7b7a..000000000 --- a/fast/stages/3-data-platform-dev/schemas/aspect-type.schema.json +++ /dev/null @@ -1 +0,0 @@ -../../../../modules/dataplex-aspect-types/schemas/aspect-type.schema.json \ No newline at end of file diff --git a/fast/stages/3-data-platform-dev/schemas/aspect-type.schema.md b/fast/stages/3-data-platform-dev/schemas/aspect-type.schema.md deleted file mode 100644 index f3da76a0d..000000000 --- a/fast/stages/3-data-platform-dev/schemas/aspect-type.schema.md +++ /dev/null @@ -1,50 +0,0 @@ -# Dataplex Aspect Type - - - -## Properties - -*additional properties: false* - -- **description**: *string* -- **display_name**: *string* -- **labels**: *object* -- **metadata_template**: *string* -- **iam**: *reference([iam](#refs-iam))* -- **iam_bindings**: *reference([iam_bindings](#refs-iam_bindings))* -- **iam_bindings_additive**: *reference([iam_bindings_additive](#refs-iam_bindings_additive))* - -## Definitions - -- **iam**: *object* -
*additional properties: false* - - **`^(?:roles/|\$custom_roles:)`**: *array* - - items: *string* -
*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:||\$iam_principals:[a-z0-9_-]+)* -- **iam_bindings**: *object* -
*additional properties: false* - - **`^[a-z0-9_-]+$`**: *object* -
*additional properties: false* - - **members**: *array* - - items: *string* -
*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|\$iam_principals:[a-z0-9_-]+)* - - **role**: *string* -
*pattern: ^(?:roles/|\$custom_roles:)* - - **condition**: *object* -
*additional properties: false* - - ⁺**expression**: *string* - - ⁺**title**: *string* - - **description**: *string* -- **iam_bindings_additive**: *object* -
*additional properties: false* - - **`^[a-z0-9_-]+$`**: *object* -
*additional properties: false* - - **member**: *string* -
*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|\$iam_principals:[a-z0-9_-]+)* - - **role**: *string* -
*pattern: ^(?:roles/|\$custom_roles:)* - - **condition**: *object* -
*additional properties: false* - - ⁺**expression**: *string* - - ⁺**title**: *string* - - **description**: *string* diff --git a/fast/stages/3-data-platform-dev/schemas/data-domain.schema.json b/fast/stages/3-data-platform-dev/schemas/data-domain.schema.json deleted file mode 100644 index c1d5632a5..000000000 --- a/fast/stages/3-data-platform-dev/schemas/data-domain.schema.json +++ /dev/null @@ -1,377 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Data Domain", - "type": "object", - "additionalProperties": false, - "required": [ - "name" - ], - "properties": { - "name": { - "type": "string" - }, - "short_name": { - "type": "string" - }, - "automation": { - "type": "object", - "additionalProperties": false, - "properties": { - "location": { - "type": "string" - }, - "impersonation_principals": { - "type": "array", - "items": { - "type": "string", - "pattern": "^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])" - } - } - } - }, - "deploy_config": { - "type": "object", - "additionalProperties": false, - "properties": { - "composer": { - "type": "object", - "additionalProperties": false, - "required": [], - "properties": { - "encryption_key": { - "type": "string" - }, - "environment_size": { - "type": "string", - "enum": [ - "ENVIRONMENT_SIZE_SMALL", - "ENVIRONMENT_SIZE_MEDIUM", - "ENVIRONMENT_SIZE_LARGE" - ], - "default": "ENVIRONMENT_SIZE_SMALL" - }, - "node_config": { - "type": "object", - "additionalProperties": false, - "required": [ - "network", - "subnetwork" - ], - "properties": { - "service_account": { - "type": "string" - }, - "network": { - "type": "string" - }, - "subnetwork": { - "type": "string" - } - } - }, - "private_builds": { - "type": "boolean", - "default": true - }, - "private_environment": { - "type": "boolean", - "default": true - }, - "region": { - "type": "string" - }, - "workloads_config": { - "type": "object", - "additionalProperties": false, - "properties": { - "dag_processor": { - "$ref": "#/$defs/composer_workload" - }, - "triggerer": { - "$ref": "#/$defs/composer_workload" - }, - "scheduler": { - "$ref": "#/$defs/composer_workload" - }, - "web_server": { - "$ref": "#/$defs/composer_workload" - }, - "worker": { - "type": "object", - "additionalProperties": false, - "properties": { - "cpu": { - "type": "number" - }, - "memory_gb": { - "type": "number" - }, - "storage_gb": { - "type": "number" - }, - "min_count": { - "type": "integer" - }, - "max_count": { - "type": "integer" - } - } - } - } - } - } - } - } - }, - "folder_config": { - "type": "object", - "additionalProperties": false, - "properties": { - "iam": { - "$ref": "#/$defs/iam" - }, - "iam_bindings": { - "$ref": "#/$defs/iam_bindings" - }, - "iam_bindings_additive": { - "$ref": "#/$defs/iam_bindings_additive" - }, - "iam_by_principals": { - "$ref": "#/$defs/iam_by_principals" - } - } - }, - "project_config": { - "type": "object", - "additionalProperties": false, - "properties": { - "name": { - "type": "string" - }, - "iam": { - "$ref": "#/$defs/iam" - }, - "iam_bindings": { - "$ref": "#/$defs/iam_bindings" - }, - "iam_bindings_additive": { - "$ref": "#/$defs/iam_bindings_additive" - }, - "iam_by_principals": { - "$ref": "#/$defs/iam_by_principals" - }, - "services": { - "type": "array", - "items": { - "type": "string" - } - }, - "shared_vpc_service_config": { - "type": "object", - "additionalProperties": false, - "required": [ - "host_project" - ], - "properties": { - "host_project": { - "type": "string" - }, - "network_users": { - "type": "array", - "items": { - "type": "string" - } - }, - "service_agent_iam": { - "type": "object", - "additionalItems": false, - "patternProperties": { - "^[a-z0-9_-]+$": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "service_iam_grants": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - }, - "service_accounts": { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^[a-z0-9-]+$": { - "type": "object", - "additionalProperties": false, - "properties": { - "description": { - "type": "string" - }, - "iam": { - "$ref": "#/$defs/iam" - }, - "iam_bindings": { - "$ref": "#/$defs/iam_bindings" - }, - "iam_bindings_additive": { - "$ref": "#/$defs/iam_bindings_additive" - }, - "iam_storage_roles": { - "$ref": "#/$defs/iam_storage_roles" - }, - "name": { - "type": "string" - } - } - } - } - } - }, - "$defs": { - "composer_workload": { - "type": "object", - "additionalProperties": false, - "properties": { - "cpu": { - "type": "number" - }, - "memory_gb": { - "type": "number" - }, - "storage_gb": { - "type": "number" - }, - "count": { - "type": "integer" - } - } - }, - "iam": { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^(?:roles/|[a-z_]+)": { - "type": "array", - "items": { - "type": "string", - "pattern": "^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])" - } - } - } - }, - "iam_bindings": { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^[a-z0-9_-]+$": { - "type": "object", - "additionalProperties": false, - "properties": { - "members": { - "type": "array", - "items": { - "type": "string", - "pattern": "^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])" - } - }, - "role": { - "type": "string", - "pattern": "^(?:roles/|[a-z])" - }, - "condition": { - "type": "object", - "additionalProperties": false, - "required": [ - "expression", - "title" - ], - "properties": { - "expression": { - "type": "string" - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - } - } - } - } - } - } - }, - "iam_bindings_additive": { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^[a-z0-9_-]+$": { - "type": "object", - "additionalProperties": false, - "properties": { - "member": { - "type": "string", - "pattern": "^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])" - }, - "role": { - "type": "string", - "pattern": "^(?:roles/|[a-z])" - }, - "condition": { - "type": "object", - "additionalProperties": false, - "required": [ - "expression", - "title" - ], - "properties": { - "expression": { - "type": "string" - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - } - } - } - } - } - } - }, - "iam_by_principals": { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^[a-z]+[a-z0-9-]+$": { - "type": "array", - "items": { - "type": "string", - "pattern": "^(?:roles/|[a-z_]+)" - } - } - } - }, - "iam_storage_roles": { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^[a-z0-9-]+$": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } -} \ No newline at end of file diff --git a/fast/stages/3-data-platform-dev/schemas/data-domain.schema.md b/fast/stages/3-data-platform-dev/schemas/data-domain.schema.md deleted file mode 100644 index cf401daa3..000000000 --- a/fast/stages/3-data-platform-dev/schemas/data-domain.schema.md +++ /dev/null @@ -1,129 +0,0 @@ -# Data Domain - - - -## Properties - -*additional properties: false* - -- ⁺**name**: *string* -- **short_name**: *string* -- **automation**: *object* -
*additional properties: false* - - **location**: *string* - - **impersonation_principals**: *array* - - items: *string* -
*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])* -- **deploy_config**: *object* -
*additional properties: false* - - **composer**: *object* -
*additional properties: false* - - **encryption_key**: *string* - - **environment_size**: *string* -
*default: ENVIRONMENT_SIZE_SMALL*, *enum: ['ENVIRONMENT_SIZE_SMALL', 'ENVIRONMENT_SIZE_MEDIUM', 'ENVIRONMENT_SIZE_LARGE']* - - **node_config**: *object* -
*additional properties: false* - - **service_account**: *string* - - ⁺**network**: *string* - - ⁺**subnetwork**: *string* - - **private_builds**: *boolean* - - **private_environment**: *boolean* - - **region**: *string* - - **workloads_config**: *object* -
*additional properties: false* - - **dag_processor**: *reference([composer_workload](#refs-composer_workload))* - - **triggerer**: *reference([composer_workload](#refs-composer_workload))* - - **scheduler**: *reference([composer_workload](#refs-composer_workload))* - - **web_server**: *reference([composer_workload](#refs-composer_workload))* - - **worker**: *object* -
*additional properties: false* - - **cpu**: *number* - - **memory_gb**: *number* - - **storage_gb**: *number* - - **min_count**: *integer* - - **max_count**: *integer* -- **folder_config**: *object* -
*additional properties: false* - - **iam**: *reference([iam](#refs-iam))* - - **iam_bindings**: *reference([iam_bindings](#refs-iam_bindings))* - - **iam_bindings_additive**: *reference([iam_bindings_additive](#refs-iam_bindings_additive))* - - **iam_by_principals**: *reference([iam_by_principals](#refs-iam_by_principals))* -- **project_config**: *object* -
*additional properties: false* - - **name**: *string* - - **iam**: *reference([iam](#refs-iam))* - - **iam_bindings**: *reference([iam_bindings](#refs-iam_bindings))* - - **iam_bindings_additive**: *reference([iam_bindings_additive](#refs-iam_bindings_additive))* - - **iam_by_principals**: *reference([iam_by_principals](#refs-iam_by_principals))* - - **services**: *array* - - items: *string* - - **shared_vpc_service_config**: *object* -
*additional properties: false* - - ⁺**host_project**: *string* - - **network_users**: *array* - - items: *string* - - **service_agent_iam**: *object* - - **`^[a-z0-9_-]+$`**: *array* - - items: *string* - - **service_iam_grants**: *array* - - items: *string* -- **service_accounts**: *object* -
*additional properties: false* - - **`^[a-z0-9-]+$`**: *object* -
*additional properties: false* - - **description**: *string* - - **iam**: *reference([iam](#refs-iam))* - - **iam_bindings**: *reference([iam_bindings](#refs-iam_bindings))* - - **iam_bindings_additive**: *reference([iam_bindings_additive](#refs-iam_bindings_additive))* - - **iam_storage_roles**: *reference([iam_storage_roles](#refs-iam_storage_roles))* - - **name**: *string* - -## Definitions - -- **composer_workload**: *object* -
*additional properties: false* - - **cpu**: *number* - - **memory_gb**: *number* - - **storage_gb**: *number* - - **count**: *integer* -- **iam**: *object* -
*additional properties: false* - - **`^(?:roles/|[a-z_]+)`**: *array* - - items: *string* -
*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])* -- **iam_bindings**: *object* -
*additional properties: false* - - **`^[a-z0-9_-]+$`**: *object* -
*additional properties: false* - - **members**: *array* - - items: *string* -
*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])* - - **role**: *string* -
*pattern: ^(?:roles/|[a-z])* - - **condition**: *object* -
*additional properties: false* - - ⁺**expression**: *string* - - ⁺**title**: *string* - - **description**: *string* -- **iam_bindings_additive**: *object* -
*additional properties: false* - - **`^[a-z0-9_-]+$`**: *object* -
*additional properties: false* - - **member**: *string* -
*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])* - - **role**: *string* -
*pattern: ^(?:roles/|[a-z])* - - **condition**: *object* -
*additional properties: false* - - ⁺**expression**: *string* - - ⁺**title**: *string* - - **description**: *string* -- **iam_by_principals**: *object* -
*additional properties: false* - - **`^[a-z]+[a-z0-9-]+$`**: *array* - - items: *string* -
*pattern: ^(?:roles/|[a-z_]+)* -- **iam_storage_roles**: *object* -
*additional properties: false* - - **`^[a-z0-9-]+$`**: *array* - - items: *string* diff --git a/fast/stages/3-data-platform-dev/schemas/data-product.schema.json b/fast/stages/3-data-platform-dev/schemas/data-product.schema.json deleted file mode 100644 index 49bec5e1e..000000000 --- a/fast/stages/3-data-platform-dev/schemas/data-product.schema.json +++ /dev/null @@ -1,293 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Data Product", - "type": "object", - "additionalProperties": false, - "properties": { - "automation": { - "type": "object", - "additionalProperties": false, - "properties": { - "location": { - "type": "string" - }, - "impersonation_principals": { - "type": "array", - "items": { - "type": "string", - "pattern": "^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])" - } - } - } - }, - "exposure_layer": { - "type": "object", - "additionalProperties": false, - "properties": { - "bigquery": { - "type": "object", - "additionalProperties": false, - "properties": { - "datasets": { - "type": "object", - "patternProperties": { - "^[a-z][a-z0-9_]+$": { - "type": "object", - "additionalProperties": false, - "properties": { - "encryption_key": { - "type": "string" - }, - "location": { - "type": "string" - } - } - } - } - }, - "iam": { - "$ref": "#/$defs/iam" - } - } - }, - "storage": { - "type": "object", - "additionalProperties": false, - "properties": { - "buckets": { - "type": "object", - "patternProperties": { - "^[a-z][a-z0-9-]+$": { - "type": "object", - "additionalProperties": false, - "properties": { - "encryption_key": { - "type": "string" - }, - "location": { - "type": "string" - }, - "storage_class": { - "type": "string" - } - } - } - } - }, - "iam": { - "$ref": "#/$defs/iam" - } - } - } - } - }, - "iam": { - "$ref": "#/$defs/iam" - }, - "iam_bindings": { - "$ref": "#/$defs/iam_bindings" - }, - "iam_bindings_additive": { - "$ref": "#/$defs/iam_bindings_additive" - }, - "iam_by_principals": { - "$ref": "#/$defs/iam_by_principals" - }, - "service_accounts": { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^[a-z0-9-]+$": { - "type": "object", - "additionalProperties": false, - "properties": { - "description": { - "type": "string" - }, - "iam": { - "$ref": "#/$defs/iam" - }, - "iam_bindings": { - "$ref": "#/$defs/iam_bindings" - }, - "iam_bindings_additive": { - "$ref": "#/$defs/iam_bindings_additive" - }, - "iam_storage_roles": { - "$ref": "#/$defs/iam_storage_roles" - }, - "name": { - "type": "string" - } - } - } - } - }, - "services": { - "type": "array", - "items": { - "type": "string" - } - }, - "shared_vpc_service_config": { - "type": "object", - "additionalProperties": false, - "required": [ - "host_project" - ], - "properties": { - "host_project": { - "type": "string" - }, - "network_users": { - "type": "array", - "items": { - "type": "string" - } - }, - "service_agent_iam": { - "type": "object", - "additionalItems": false, - "patternProperties": { - "^[a-z0-9_-]+$": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "service_iam_grants": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "short_name": { - "type": "string" - } - }, - "$defs": { - "iam": { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^(?:roles/|[a-z_]+)": { - "type": "array", - "items": { - "type": "string", - "pattern": "^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])" - } - } - } - }, - "iam_bindings": { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^[a-z0-9_-]+$": { - "type": "object", - "additionalProperties": false, - "properties": { - "members": { - "type": "array", - "items": { - "type": "string", - "pattern": "^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])" - } - }, - "role": { - "type": "string", - "pattern": "^(?:roles/|[a-z])" - }, - "condition": { - "type": "object", - "additionalProperties": false, - "required": [ - "expression", - "title" - ], - "properties": { - "expression": { - "type": "string" - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - } - } - } - } - } - } - }, - "iam_bindings_additive": { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^[a-z0-9_-]+$": { - "type": "object", - "additionalProperties": false, - "properties": { - "member": { - "type": "string", - "pattern": "^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])" - }, - "role": { - "type": "string", - "pattern": "^(?:roles/|[a-z])" - }, - "condition": { - "type": "object", - "additionalProperties": false, - "required": [ - "expression", - "title" - ], - "properties": { - "expression": { - "type": "string" - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - } - } - } - } - } - } - }, - "iam_by_principals": { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^[a-z]+[a-z0-9-]+$": { - "type": "array", - "items": { - "type": "string", - "pattern": "^(?:roles/|[a-z_]+)" - } - } - } - }, - "iam_storage_roles": { - "type": "object", - "additionalProperties": false, - "patternProperties": { - "^[a-z0-9-]+$": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } -} \ No newline at end of file diff --git a/fast/stages/3-data-platform-dev/schemas/data-product.schema.md b/fast/stages/3-data-platform-dev/schemas/data-product.schema.md deleted file mode 100644 index 32f09f86e..000000000 --- a/fast/stages/3-data-platform-dev/schemas/data-product.schema.md +++ /dev/null @@ -1,104 +0,0 @@ -# Data Product - - - -## Properties - -*additional properties: false* - -- **automation**: *object* -
*additional properties: false* - - **location**: *string* - - **impersonation_principals**: *array* - - items: *string* -
*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])* -- **exposure_layer**: *object* -
*additional properties: false* - - **bigquery**: *object* -
*additional properties: false* - - **datasets**: *object* - - **`^[a-z][a-z0-9_]+$`**: *object* -
*additional properties: false* - - **encryption_key**: *string* - - **location**: *string* - - **iam**: *reference([iam](#refs-iam))* - - **storage**: *object* -
*additional properties: false* - - **buckets**: *object* - - **`^[a-z][a-z0-9-]+$`**: *object* -
*additional properties: false* - - **encryption_key**: *string* - - **location**: *string* - - **storage_class**: *string* - - **iam**: *reference([iam](#refs-iam))* -- **iam**: *reference([iam](#refs-iam))* -- **iam_bindings**: *reference([iam_bindings](#refs-iam_bindings))* -- **iam_bindings_additive**: *reference([iam_bindings_additive](#refs-iam_bindings_additive))* -- **iam_by_principals**: *reference([iam_by_principals](#refs-iam_by_principals))* -- **service_accounts**: *object* -
*additional properties: false* - - **`^[a-z0-9-]+$`**: *object* -
*additional properties: false* - - **description**: *string* - - **iam**: *reference([iam](#refs-iam))* - - **iam_bindings**: *reference([iam_bindings](#refs-iam_bindings))* - - **iam_bindings_additive**: *reference([iam_bindings_additive](#refs-iam_bindings_additive))* - - **iam_storage_roles**: *reference([iam_storage_roles](#refs-iam_storage_roles))* - - **name**: *string* -- **services**: *array* - - items: *string* -- **shared_vpc_service_config**: *object* -
*additional properties: false* - - ⁺**host_project**: *string* - - **network_users**: *array* - - items: *string* - - **service_agent_iam**: *object* - - **`^[a-z0-9_-]+$`**: *array* - - items: *string* - - **service_iam_grants**: *array* - - items: *string* -- **short_name**: *string* - -## Definitions - -- **iam**: *object* -
*additional properties: false* - - **`^(?:roles/|[a-z_]+)`**: *array* - - items: *string* -
*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])* -- **iam_bindings**: *object* -
*additional properties: false* - - **`^[a-z0-9_-]+$`**: *object* -
*additional properties: false* - - **members**: *array* - - items: *string* -
*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])* - - **role**: *string* -
*pattern: ^(?:roles/|[a-z])* - - **condition**: *object* -
*additional properties: false* - - ⁺**expression**: *string* - - ⁺**title**: *string* - - **description**: *string* -- **iam_bindings_additive**: *object* -
*additional properties: false* - - **`^[a-z0-9_-]+$`**: *object* -
*additional properties: false* - - **member**: *string* -
*pattern: ^(?:domain:|group:|serviceAccount:|user:|principal:|principalSet:|[a-z])* - - **role**: *string* -
*pattern: ^(?:roles/|[a-z])* - - **condition**: *object* -
*additional properties: false* - - ⁺**expression**: *string* - - ⁺**title**: *string* - - **description**: *string* -- **iam_by_principals**: *object* -
*additional properties: false* - - **`^[a-z]+[a-z0-9-]+$`**: *array* - - items: *string* -
*pattern: ^(?:roles/|[a-z_]+)* -- **iam_storage_roles**: *object* -
*additional properties: false* - - **`^[a-z0-9-]+$`**: *array* - - items: *string* diff --git a/fast/stages/3-data-platform-dev/templates/providers.tf.tpl b/fast/stages/3-data-platform-dev/templates/providers.tf.tpl deleted file mode 100644 index d1c224c5c..000000000 --- a/fast/stages/3-data-platform-dev/templates/providers.tf.tpl +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Copyright 2022 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -terraform { - backend "gcs" { - bucket = "${bucket}" - impersonate_service_account = "${sa}" - %{~ if backend_extra != null ~} - ${indent(4, backend_extra)} - %{~ endif ~} - } -} -provider "google" { - impersonate_service_account = "${sa}" -} -provider "google-beta" { - impersonate_service_account = "${sa}" -} - -# end provider.tf for ${name} diff --git a/fast/stages/3-data-platform-dev/terraform.tfvars.sample b/fast/stages/3-data-platform-dev/terraform.tfvars.sample deleted file mode 100644 index 5e217a3d7..000000000 --- a/fast/stages/3-data-platform-dev/terraform.tfvars.sample +++ /dev/null @@ -1,33 +0,0 @@ -location = "europe-west1" - -central_project_config = { - iam_by_principals = { - dp-platform = [ - "roles/datacatalog.categoryAdmin", - "roles/dataplex.catalogAdmin", - "roles/dataplex.aspectTypeOwner", - "roles/resourcemanager.tagViewer" - ] - dp-domain-a = [ - "roles/datacatalog.viewer", - "roles/dataplex.aspectTypeUser" - ] - dp-product-a-0 = [ - "roles/datacatalog.viewer", - "roles/dataplex.aspectTypeUser" - ] - } -} - -factories_config = { - context = { - iam_principals = { - dp-platform = "group:dp-platform-0@example.com" - dp-domain-a = "group:dp-domain-a@example.com" - dp-product-a-0 = "group:dp-product-a-0@example.com" - data-consumer-bi = "group:data-consumer-bi@example.com" - } - } - aspect_types = "data/aspect-types" - data_domains = "data/data-domains" -} diff --git a/fast/stages/3-data-platform-dev/variables-fast.tf b/fast/stages/3-data-platform-dev/variables-fast.tf deleted file mode 100644 index 82b096909..000000000 --- a/fast/stages/3-data-platform-dev/variables-fast.tf +++ /dev/null @@ -1,109 +0,0 @@ -/** - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -variable "automation" { - # tfdoc:variable:source 0-org-setup - description = "Automation resources created by the bootstrap stage." - type = object({ - outputs_bucket = string - }) - nullable = false -} - -variable "billing_account" { - # tfdoc:variable:source 0-org-setup - description = "Billing account id. If billing account is not part of the same org set `is_org_level` to false." - type = object({ - id = string - }) -} - -variable "environments" { - # tfdoc:variable:source 0-org-setup - description = "Environment names." - type = object({ - dev = object({ - name = string - short_name = string - }) - }) -} - -variable "folder_ids" { - # tfdoc:variable:source 0-org-setup - description = "Folder name => id mappings." - type = map(string) - nullable = false - default = {} -} - -variable "host_project_ids" { - # tfdoc:variable:source 2-networking - description = "Shared VPC host project name => id mappings." - type = map(string) - nullable = false - default = {} -} - -variable "kms_keys" { - # tfdoc:variable:source 2-security - description = "KMS key ids." - type = map(string) - nullable = false - default = {} -} - -variable "prefix" { - # tfdoc:variable:source 0-org-setup - description = "Prefix used for resources that need unique names. Use a maximum of 9 chars for organizations, and 11 chars for tenants." - type = string - validation { - condition = try(length(var.prefix), 0) < 12 - error_message = "Use a maximum of 9 chars for organizations, and 11 chars for tenants." - } -} - -variable "regions" { - # tfdoc:variable:source 2-networking - description = "Region mappings." - type = map(string) - nullable = false - default = {} -} - -variable "subnet_self_links" { - # tfdoc:variable:source 2-networking - description = "Subnet VPC name => { name => self link } mappings." - type = map(map(string)) - nullable = false - default = {} -} - -variable "tag_values" { - # tfdoc:variable:source 0-org-setup - description = "FAST-managed resource manager tag values." - type = map(string) - nullable = false - default = {} -} - -variable "vpc_self_links" { - # tfdoc:variable:source 2-networking - description = "Shared VPC name => self link mappings." - type = map(string) - nullable = false - default = {} -} diff --git a/fast/stages/3-data-platform-dev/variables.tf b/fast/stages/3-data-platform-dev/variables.tf deleted file mode 100644 index 7d5301666..000000000 --- a/fast/stages/3-data-platform-dev/variables.tf +++ /dev/null @@ -1,179 +0,0 @@ -/** - * Copyright 2025 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -variable "aspect_types" { - description = "Aspect templates. Merged with those defined via the factory." - type = map(object({ - description = optional(string) - display_name = optional(string) - labels = optional(map(string), {}) - metadata_template = optional(string) - iam = optional(map(list(string)), {}) - iam_bindings = optional(map(object({ - members = list(string) - role = string - condition = optional(object({ - expression = string - title = string - description = optional(string) - })) - })), {}) - iam_bindings_additive = optional(map(object({ - member = string - role = string - condition = optional(object({ - expression = string - title = string - description = optional(string) - })) - })), {}) - })) - nullable = false - default = {} -} - -variable "central_project_config" { - description = "Configuration for the top-level central project." - type = object({ - iam = optional(map(list(string)), {}) - iam_bindings = optional(map(object({ - members = list(string) - role = string - condition = optional(object({ - expression = string - title = string - description = optional(string) - })) - })), {}) - iam_bindings_additive = optional(map(object({ - member = string - role = string - condition = optional(object({ - expression = string - title = string - description = optional(string) - })) - })), {}) - iam_by_principals = optional(map(list(string)), {}) - services = optional(list(string), [ - # TODO: define default list of services - "bigquery.googleapis.com", - "datacatalog.googleapis.com", - "logging.googleapis.com", - "monitoring.googleapis.com", - "storage.googleapis.com", - ]) - short_name = optional(string, "central-0") - policy_tags = optional(map(any), { - low = {} - medium = {} - high = {} - }) - }) - nullable = false - default = {} -} - -variable "encryption_keys" { - description = "Default encryption keys for services, in service => { region => key id } format. Overridable on a per-object basis." - type = object({ - bigquery = optional(map(string), {}) - composer = optional(map(string), {}) - storage = optional(map(string), {}) - }) - nullable = false - default = {} -} - -variable "exposure_config" { - description = "Data exposure configuration." - type = object({ - tag_name = optional(string, "exposure/allow") - }) - nullable = false - default = {} - validation { - condition = ( - var.exposure_config.tag_name != null && - length(regexall( - "^[a-z][a-z0-9-]+/[a-z][a-z0-9]+", var.exposure_config.tag_name - )) > 0 - ) - error_message = "Invalid tag name, required format is 'tag_key/tag_value'." - } -} - -variable "factories_config" { - description = "Configuration for the resource factories." - type = object({ - aspect_types = optional(string, "data/aspect-types") - data_domains = optional(string, "data/data-domains") - context = optional(object({ - iam_principals = optional(map(string), {}) - kms_keys = optional(map(string), {}) - tag_values = optional(map(string), {}) - }), {}) - }) - nullable = false - default = {} -} - -variable "location" { - description = "Default location used when no location is specified." - type = string - nullable = false - default = "europe-west1" -} - -variable "outputs_location" { - description = "Enable writing provider, tfvars and CI/CD workflow files to local filesystem. Leave null to disable." - type = string - default = null -} - -variable "secure_tags" { - description = "Resource manager tags created in the central project." - type = map(object({ - description = optional(string, "Managed by the Terraform project module.") - iam = optional(map(list(string)), {}) - values = optional(map(object({ - description = optional(string, "Managed by the Terraform project module.") - iam = optional(map(list(string)), {}) - id = optional(string) - })), {}) - })) - nullable = false - default = {} - validation { - condition = alltrue([ - for k, v in var.secure_tags : v != null - ]) - error_message = "Use an empty map instead of null as value." - } -} - -variable "stage_config" { - description = "Stage configuration used to find environment and resource ids, and to generate names." - type = object({ - environment = string - name = string - short_name = optional(string, "dp") - }) - default = { - environment = "dev" - name = "data-platform-dev" - } -} diff --git a/fast/stages/3-secops-dev/README.md b/fast/stages/3-secops-dev/README.md index e03fb028b..c48bb9f2b 100644 --- a/fast/stages/3-secops-dev/README.md +++ b/fast/stages/3-secops-dev/README.md @@ -40,9 +40,9 @@ If this stage is deployed within a FAST-based GCP organization, we recommend exe This stage needs specific automation resources, and permissions granted on those that allow control of selective IAM roles on specific networking and security resources. -Network permissions are needed to associate data domain or product projects to Shared VPC hosts and grant network permissions to data platform managed service accounts. They are mandatory when deploying Composer. +Network permissions are needed to associate projects to Shared VPC hosts and grant network Network User role on managed service accounts. -Security permissions are only needed when using CMEK encryption, to grant the relevant IAM roles to data platform service agents on the encryption keys used. +Security permissions are only needed when using CMEK encryption, to grant the relevant IAM roles to service agents on the encryption keys used. ## Customizations diff --git a/fast/stages/CLEANUP.md b/fast/stages/CLEANUP.md index 477469b01..8e0f06604 100644 --- a/fast/stages/CLEANUP.md +++ b/fast/stages/CLEANUP.md @@ -2,26 +2,7 @@ If you want to destroy a previous FAST deployment in your organization, follow these steps. -Destruction must be done in reverse order, from stage 3 to stage 0 - -## Stage 3 (Data Platform) - -Terraform refuses to delete non-empty GCS buckets and BigQuery datasets, so they need to be removed manually from the state. - -```bash -cd $FAST_PWD/3-data-platform/dev/ - -# remove GCS buckets and BQ dataset manually. Projects will be destroyed anyway -for x in $(terraform state list | grep google_storage_bucket.bucket); do - terraform state rm "$x"; -done - -for x in $(terraform state list | grep google_bigquery_dataset); do - terraform state rm "$x"; -done - -terraform destroy -``` +Destruction must be done in reverse order, from stage 2 to stage 0 ## Stage 2 (Project Factory) diff --git a/fast/stages/README.md b/fast/stages/README.md index dee025ea7..ab41a4785 100644 --- a/fast/stages/README.md +++ b/fast/stages/README.md @@ -42,11 +42,6 @@ To destroy a previous FAST deployment follow the instructions detailed in [clean - [Project Factory](./2-project-factory/) YAML-based factory to create and configure application or team-level projects. Configuration includes VPC-level settings for Shared VPC, service-level configuration for CMEK encryption via centralized keys, and service account creation for workloads and applications. This stage can be cloned if an org-wide or dedicated per-environment factories are needed. -## Environment-level resources (3) - -- [Data Platform](./3-data-platform-dev/) - - ## Importing existing setup into FAST For brownfield implementations you may need to import existing setting in the organization, folders, etc. These snippets can help you add existing settings into the YAML file diff --git a/tests/fast/stages/s0_org_setup/hardened.yaml b/tests/fast/stages/s0_org_setup/hardened.yaml index ffc260555..67d33a194 100644 --- a/tests/fast/stages/s0_org_setup/hardened.yaml +++ b/tests/fast/stages/s0_org_setup/hardened.yaml @@ -985,11 +985,6 @@ values: force_destroy: false name: 2-security/ timeouts: null - module.factory.module.buckets["iac-0/iac-stage-state"].google_storage_managed_folder.folder["3-data-platform-dev/"]: - bucket: ft0-prod-iac-core-0-iac-stage-state - force_destroy: false - name: 3-data-platform-dev/ - timeouts: null ? module.factory.module.buckets["iac-0/iac-stage-state"].google_storage_managed_folder_iam_binding.authoritative["1-vpcsc/$custom_roles:storage_viewer"] : bucket: ft0-prod-iac-core-0-iac-stage-state condition: [] @@ -1030,16 +1025,6 @@ values: condition: [] managed_folder: 2-security/ role: roles/storage.admin - ? module.factory.module.buckets["iac-0/iac-stage-state"].google_storage_managed_folder_iam_binding.authoritative["3-data-platform-dev/$custom_roles:storage_viewer"] - : bucket: ft0-prod-iac-core-0-iac-stage-state - condition: [] - managed_folder: 3-data-platform-dev/ - role: organizations/1234567890/roles/storageViewer - ? module.factory.module.buckets["iac-0/iac-stage-state"].google_storage_managed_folder_iam_binding.authoritative["3-data-platform-dev/roles/storage.admin"] - : bucket: ft0-prod-iac-core-0-iac-stage-state - condition: [] - managed_folder: 3-data-platform-dev/ - role: roles/storage.admin ? module.factory.module.folder-1-iam["networking"].google_folder_iam_binding.authoritative["$custom_roles:project_iam_viewer"] : condition: [] role: organizations/1234567890/roles/projectIamViewer @@ -2267,26 +2252,6 @@ values: project: ft0-prod-audit-logs-0 service: pubsub.googleapis.com timeouts: null - module.factory.module.service-accounts["iac-0/iac-dp-dev-ro"].google_service_account.service_account[0]: - account_id: iac-dp-dev-ro - create_ignore_already_exists: null - description: null - disabled: false - display_name: IaC service account for data platform dev (read-only). - email: iac-dp-dev-ro@ft0-prod-iac-core-0.iam.gserviceaccount.com - member: serviceAccount:iac-dp-dev-ro@ft0-prod-iac-core-0.iam.gserviceaccount.com - project: ft0-prod-iac-core-0 - timeouts: null - module.factory.module.service-accounts["iac-0/iac-dp-dev-rw"].google_service_account.service_account[0]: - account_id: iac-dp-dev-rw - create_ignore_already_exists: null - description: null - disabled: false - display_name: IaC service account for data platform dev (read-write). - email: iac-dp-dev-rw@ft0-prod-iac-core-0.iam.gserviceaccount.com - member: serviceAccount:iac-dp-dev-rw@ft0-prod-iac-core-0.iam.gserviceaccount.com - project: ft0-prod-iac-core-0 - timeouts: null module.factory.module.service-accounts["iac-0/iac-networking-ro"].google_service_account.service_account[0]: account_id: iac-networking-ro create_ignore_already_exists: null @@ -8567,22 +8532,22 @@ counts: google_project_service: 37 google_project_service_identity: 11 google_scc_management_organization_security_health_analytics_custom_module: 18 - google_service_account: 14 + google_service_account: 12 google_service_account_iam_binding: 2 google_service_account_iam_member: 4 google_storage_bucket: 3 google_storage_bucket_iam_binding: 4 google_storage_bucket_object: 10 - google_storage_managed_folder: 5 - google_storage_managed_folder_iam_binding: 10 + google_storage_managed_folder: 4 + google_storage_managed_folder_iam_binding: 8 google_storage_project_service_account: 3 google_tags_tag_binding: 7 google_tags_tag_key: 3 google_tags_tag_value: 6 google_tags_tag_value_iam_binding: 4 local_file: 9 - modules: 58 - resources: 715 + modules: 56 + resources: 710 terraform_data: 4 outputs: diff --git a/tests/fast/stages/s0_org_setup/simple.yaml b/tests/fast/stages/s0_org_setup/simple.yaml index 70644fc48..0f08d1f96 100644 --- a/tests/fast/stages/s0_org_setup/simple.yaml +++ b/tests/fast/stages/s0_org_setup/simple.yaml @@ -810,11 +810,6 @@ values: force_destroy: false name: 2-security/ timeouts: null - module.factory.module.buckets["iac-0/iac-stage-state"].google_storage_managed_folder.folder["3-data-platform-dev/"]: - bucket: ft0-prod-iac-core-0-iac-stage-state - force_destroy: false - name: 3-data-platform-dev/ - timeouts: null ? module.factory.module.buckets["iac-0/iac-stage-state"].google_storage_managed_folder_iam_binding.authoritative["1-vpcsc/$custom_roles:storage_viewer"] : bucket: ft0-prod-iac-core-0-iac-stage-state condition: [] @@ -855,16 +850,6 @@ values: condition: [] managed_folder: 2-security/ role: roles/storage.admin - ? module.factory.module.buckets["iac-0/iac-stage-state"].google_storage_managed_folder_iam_binding.authoritative["3-data-platform-dev/$custom_roles:storage_viewer"] - : bucket: ft0-prod-iac-core-0-iac-stage-state - condition: [] - managed_folder: 3-data-platform-dev/ - role: organizations/1234567890/roles/storageViewer - ? module.factory.module.buckets["iac-0/iac-stage-state"].google_storage_managed_folder_iam_binding.authoritative["3-data-platform-dev/roles/storage.admin"] - : bucket: ft0-prod-iac-core-0-iac-stage-state - condition: [] - managed_folder: 3-data-platform-dev/ - role: roles/storage.admin ? module.factory.module.folder-1-iam["networking"].google_folder_iam_binding.authoritative["$custom_roles:project_iam_viewer"] : condition: [] role: organizations/1234567890/roles/projectIamViewer @@ -1571,26 +1556,6 @@ values: project: ft0-prod-audit-logs-0 service: pubsub.googleapis.com timeouts: null - module.factory.module.service-accounts["iac-0/iac-dp-dev-ro"].google_service_account.service_account[0]: - account_id: iac-dp-dev-ro - create_ignore_already_exists: null - description: null - disabled: false - display_name: IaC service account for data platform dev (read-only). - email: iac-dp-dev-ro@ft0-prod-iac-core-0.iam.gserviceaccount.com - member: serviceAccount:iac-dp-dev-ro@ft0-prod-iac-core-0.iam.gserviceaccount.com - project: ft0-prod-iac-core-0 - timeouts: null - module.factory.module.service-accounts["iac-0/iac-dp-dev-rw"].google_service_account.service_account[0]: - account_id: iac-dp-dev-rw - create_ignore_already_exists: null - description: null - disabled: false - display_name: IaC service account for data platform dev (read-write). - email: iac-dp-dev-rw@ft0-prod-iac-core-0.iam.gserviceaccount.com - member: serviceAccount:iac-dp-dev-rw@ft0-prod-iac-core-0.iam.gserviceaccount.com - project: ft0-prod-iac-core-0 - timeouts: null module.factory.module.service-accounts["iac-0/iac-networking-ro"].google_service_account.service_account[0]: account_id: iac-networking-ro create_ignore_already_exists: null @@ -2957,22 +2922,22 @@ counts: google_project_iam_member: 15 google_project_service: 33 google_project_service_identity: 9 - google_service_account: 14 + google_service_account: 12 google_service_account_iam_binding: 2 google_service_account_iam_member: 4 google_storage_bucket: 3 google_storage_bucket_iam_binding: 4 google_storage_bucket_object: 10 - google_storage_managed_folder: 5 - google_storage_managed_folder_iam_binding: 10 + google_storage_managed_folder: 4 + google_storage_managed_folder_iam_binding: 8 google_storage_project_service_account: 3 google_tags_tag_binding: 7 google_tags_tag_key: 3 google_tags_tag_value: 5 google_tags_tag_value_iam_binding: 4 local_file: 9 - modules: 50 - resources: 325 + modules: 48 + resources: 320 terraform_data: 4 outputs: diff --git a/tests/fast/stages/s2_security/simple.yaml b/tests/fast/stages/s2_security/simple.yaml index 40aa8c20d..3335c1040 100644 --- a/tests/fast/stages/s2_security/simple.yaml +++ b/tests/fast/stages/s2_security/simple.yaml @@ -117,7 +117,6 @@ values: \ [])\n .hasOnly(['roles/cloudkms.cryptoKeyEncrypterDecrypter']\n)\n" title: Delegated IAM grant on keys. members: - - serviceAccount:iac-dp-dev-rw@test.iam.gserviceaccount.com - serviceAccount:iac-pf-rw@test.iam.gserviceaccount.com project: fast-dev-sec-core-0 role: roles/cloudkms.admin diff --git a/tests/fast/stages/s3_data_platform_dev/__init__.py b/tests/fast/stages/s3_data_platform_dev/__init__.py deleted file mode 100644 index c37e93b74..000000000 --- a/tests/fast/stages/s3_data_platform_dev/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright 2025 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. diff --git a/tests/fast/stages/s3_data_platform_dev/hardened.tfvars b/tests/fast/stages/s3_data_platform_dev/hardened.tfvars deleted file mode 100644 index 94f2f4e9f..000000000 --- a/tests/fast/stages/s3_data_platform_dev/hardened.tfvars +++ /dev/null @@ -1,57 +0,0 @@ -automation = { - outputs_bucket = "fast2-prod-iac-core-outputs" -} -billing_account = { - id = "000000-111111-222222" -} -encryption_keys = { - bigquery = { - "europe-west1" = "projects/fast2-dev-net-spoke-0/locations/europe-west1/keyRings/dev-primary-default/cryptoKeys/bigquery" - } - composer = { - "europe-west1" = "projects/fast2-dev-net-spoke-0/locations/europe-west1/keyRings/dev-primary-default/cryptoKeys/composer" - } - storage = { - "europe-west1" = "projects/fast2-dev-net-spoke-0/locations/europe-west1/keyRings/dev-primary-default/cryptoKeys/storage" - } -} -environments = { - dev = { - is_default = false - name = "Development" - short_name = "dev" - tag_name = "development" - } -} -factories_config = { - context = { - iam_principals = { - data-consumer-bi = "group:gcp-consumer-bi@example.com" - dp-product-a-0 = "group:gcp-data-product-a-0@example.com" - dp-domain-a = "group:gcp-data-domain-a@example.com" - dp-platform = "group:dp-platform-0@example.com" - } - } -} -folder_ids = { - data-platform-dev = "folders/00000000000000" -} -host_project_ids = { - dev-spoke-0 = "fast2-dev-net-spoke-0" -} -organization = { - domain = "fast.example.com" - id = 123456789012 - customer_id = "C00000000" -} -prefix = "fast2" -subnet_self_links = { - dev-spoke-0 = { - "europe-west8/dev-dataplatform" = "projects/fast2-dev-net-spoke-0/regions/europe-west8/subnetworks/dev-dataplatform" - } -} -vpc_self_links = { - dev-spoke-0 = "projects/fast2-dev-net-spoke-0/global/networks/dev-spoke-0" -} - - diff --git a/tests/fast/stages/s3_data_platform_dev/hardened.yaml b/tests/fast/stages/s3_data_platform_dev/hardened.yaml deleted file mode 100644 index 049fc048f..000000000 --- a/tests/fast/stages/s3_data_platform_dev/hardened.yaml +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright 2025 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -counts: - google_bigquery_dataset: 1 - google_bigquery_dataset_iam_binding: 1 - google_bigquery_default_service_account: 2 - google_composer_environment: 1 - google_data_catalog_policy_tag: 3 - google_data_catalog_taxonomy: 1 - google_dataplex_aspect_type: 1 - google_folder: 2 - google_folder_iam_binding: 3 - google_kms_crypto_key_iam_member: 5 - google_logging_project_settings: 1 - google_project: 3 - google_project_iam_binding: 23 - google_project_iam_member: 12 - google_project_service: 18 - google_project_service_identity: 6 - google_service_account: 6 - google_service_account_iam_binding: 4 - google_storage_bucket: 3 - google_storage_bucket_iam_binding: 6 - google_storage_bucket_object: 6 - google_storage_project_service_account: 3 - google_tags_location_tag_binding: 2 - google_tags_tag_key: 1 - google_tags_tag_value: 1 - modules: 19 - resources: 115 diff --git a/tests/fast/stages/s3_data_platform_dev/simple.tfvars b/tests/fast/stages/s3_data_platform_dev/simple.tfvars deleted file mode 100644 index 14d0e9406..000000000 --- a/tests/fast/stages/s3_data_platform_dev/simple.tfvars +++ /dev/null @@ -1,46 +0,0 @@ -automation = { - outputs_bucket = "fast2-prod-iac-core-outputs" -} -billing_account = { - id = "000000-111111-222222" -} -environments = { - dev = { - is_default = false - name = "Development" - short_name = "dev" - tag_name = "development" - } -} -factories_config = { - context = { - iam_principals = { - data-consumer-bi = "group:gcp-consumer-bi@example.com" - dp-product-a-0 = "group:gcp-data-product-a-0@example.com" - dp-domain-a = "group:gcp-data-domain-a@example.com" - dp-platform = "group:dp-platform-0@example.com" - } - } -} -folder_ids = { - data-platform-dev = "folders/00000000000000" -} -host_project_ids = { - dev-spoke-0 = "fast2-dev-net-spoke-0" -} -organization = { - domain = "fast.example.com" - id = 123456789012 - customer_id = "C00000000" -} -prefix = "fast2" -subnet_self_links = { - dev-spoke-0 = { - "europe-west8/dev-dataplatform" = "projects/fast2-dev-net-spoke-0/regions/europe-west8/subnetworks/dev-dataplatform" - } -} -vpc_self_links = { - dev-spoke-0 = "projects/fast2-dev-net-spoke-0/global/networks/dev-spoke-0" -} - - diff --git a/tests/fast/stages/s3_data_platform_dev/simple.yaml b/tests/fast/stages/s3_data_platform_dev/simple.yaml deleted file mode 100644 index 43f6bd5fd..000000000 --- a/tests/fast/stages/s3_data_platform_dev/simple.yaml +++ /dev/null @@ -1,41 +0,0 @@ -# Copyright 2025 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -counts: - google_bigquery_dataset: 1 - google_bigquery_dataset_iam_binding: 1 - google_bigquery_default_service_account: 2 - google_composer_environment: 1 - google_data_catalog_policy_tag: 3 - google_data_catalog_taxonomy: 1 - google_dataplex_aspect_type: 1 - google_folder: 2 - google_folder_iam_binding: 3 - google_logging_project_settings: 1 - google_project: 3 - google_project_iam_binding: 23 - google_project_iam_member: 12 - google_project_service: 18 - google_project_service_identity: 6 - google_service_account: 6 - google_service_account_iam_binding: 4 - google_storage_bucket: 3 - google_storage_bucket_iam_binding: 6 - google_storage_bucket_object: 6 - google_storage_project_service_account: 3 - google_tags_location_tag_binding: 2 - google_tags_tag_key: 1 - google_tags_tag_value: 1 - modules: 19 - resources: 110 diff --git a/tests/fast/stages/s3_data_platform_dev/tftest.yaml b/tests/fast/stages/s3_data_platform_dev/tftest.yaml deleted file mode 100644 index 22393e1b3..000000000 --- a/tests/fast/stages/s3_data_platform_dev/tftest.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2024 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -module: fast/stages/3-data-platform-dev - -tests: - simple: - inventory: - - simple.yaml - hardened: - inventory: - - hardened.yaml diff --git a/tools/duplicate-diff.py b/tools/duplicate-diff.py index 71b13250d..294f777e4 100755 --- a/tools/duplicate-diff.py +++ b/tools/duplicate-diff.py @@ -32,10 +32,6 @@ duplicates = [ "fast/stages/1-vpcsc/schemas/access-level.schema.json", "modules/vpc-sc/schemas/access-level.schema.json", ], - [ - "fast/stages/3-data-platform-dev/schemas/aspect-type.schema.json", - "modules/dataplex-aspect-types/schemas/aspect-type.schema.json", - ], [ "fast/stages/2-project-factory/schemas/budget.schema.json", "fast/stages/0-org-setup/schemas/budget.schema.json",