From 5cf290e7dd8370f723d43b67950b55a88b9ae72d Mon Sep 17 00:00:00 2001 From: Damian Czaja Date: Fri, 12 Feb 2021 16:33:36 +0100 Subject: [PATCH] Add Content Creation guide (#116) --- docs/tutorial/content-creation/README.md | 706 ++++++++++++++++++ .../content-creation/assets/argo-ui.png | Bin 0 -> 57893 bytes .../assets/graphql-playground.png | Bin 0 -> 113911 bytes .../README.md} | 0 .../assets/create-action.png | Bin .../assets/gcp-cloudsql.png | Bin .../assets/get-action.png | Bin .../assets/get-logs.png | Bin .../assets/get-type-instance.png | Bin .../assets/graphql-auth.png | Bin .../assets/install-gcp.svg | 0 .../assets/install-in-cluster.svg | 0 .../assets/list-interface.png | Bin .../assets/run-action.png | Bin ocf-spec/0.0.1/schema/interface.json | 15 +- .../core/interface/runner/generic/run.yaml | 25 +- .../atlassian/confluence/install.yaml | 186 +++++ .../atlassian/jira/install.yaml | 42 +- .../implementation/postgresql/create-db.yaml | 115 +++ .../database/postgresql/create-db.yaml | 47 ++ .../database/postgresql/install.yaml | 25 +- .../interface/productivity/confluence.yaml | 18 + .../productivity/confluence/install.yaml | 41 + .../interface/productivity/jira/install.yaml | 25 +- och-content/interface/runner/argo/run.yaml | 26 +- .../interface/runner/cloudsql/run.yaml | 25 +- och-content/interface/runner/helm/run.yaml | 25 +- .../interface/templating/jinja2/template.yaml | 39 +- .../type/database/postgresql/role-input.yaml | 47 ++ .../type/database/postgresql/role.yaml | 48 ++ .../type/productivity/confluence/config.yaml | 49 ++ .../confluence/install-input.yaml | 42 ++ .../type/runner/cloudsql/run-input.yaml | 5 + och-content/type/runner/helm/run-input.yaml | 59 +- 34 files changed, 1491 insertions(+), 119 deletions(-) create mode 100644 docs/tutorial/content-creation/README.md create mode 100644 docs/tutorial/content-creation/assets/argo-ui.png create mode 100644 docs/tutorial/content-creation/assets/graphql-playground.png rename docs/tutorial/{jira-installation.md => jira-installation/README.md} (100%) rename docs/tutorial/{ => jira-installation}/assets/create-action.png (100%) rename docs/tutorial/{ => jira-installation}/assets/gcp-cloudsql.png (100%) rename docs/tutorial/{ => jira-installation}/assets/get-action.png (100%) rename docs/tutorial/{ => jira-installation}/assets/get-logs.png (100%) rename docs/tutorial/{ => jira-installation}/assets/get-type-instance.png (100%) rename docs/tutorial/{ => jira-installation}/assets/graphql-auth.png (100%) rename docs/tutorial/{ => jira-installation}/assets/install-gcp.svg (100%) rename docs/tutorial/{ => jira-installation}/assets/install-in-cluster.svg (100%) rename docs/tutorial/{ => jira-installation}/assets/list-interface.png (100%) rename docs/tutorial/{ => jira-installation}/assets/run-action.png (100%) create mode 100644 och-content/implementation/atlassian/confluence/install.yaml create mode 100644 och-content/implementation/postgresql/create-db.yaml create mode 100644 och-content/interface/database/postgresql/create-db.yaml create mode 100644 och-content/interface/productivity/confluence.yaml create mode 100644 och-content/interface/productivity/confluence/install.yaml create mode 100644 och-content/type/database/postgresql/role-input.yaml create mode 100644 och-content/type/database/postgresql/role.yaml create mode 100644 och-content/type/productivity/confluence/config.yaml create mode 100644 och-content/type/productivity/confluence/install-input.yaml diff --git a/docs/tutorial/content-creation/README.md b/docs/tutorial/content-creation/README.md new file mode 100644 index 000000000..286e42cca --- /dev/null +++ b/docs/tutorial/content-creation/README.md @@ -0,0 +1,706 @@ +# OCF Content Creation Guide + +- [OCF Content Creation Guide](#ocf-content-creation-guide) + - [Prerequisites](#prerequisites) + - [Types, Interfaces and Implementations](#types-interfaces-and-implementations) + - [Define your Types and Interfaces](#define-your-types-and-interfaces) + - [Create the Interface Group manifest](#create-the-interface-group-manifest) + - [Create the Interface manifest](#create-the-interface-manifest) + - [Create the Type manifests](#create-the-type-manifests) + - [Runners](#runners) + - [Write the Implementation for the Interface](#write-the-implementation-for-the-interface) + - [Validate the manifests using ocftool](#validate-the-manifests-using-ocftool) + - [Populate the manifests into OCH](#populate-the-manifests-into-och) + - [Run your new action](#run-your-new-action) + - [View the Action workflow in Argo UI](#view-the-action-workflow-in-argo-ui) + - [View the Action Custom Resource](#view-the-action-custom-resource) + - [Summary](#summary) + +This guide shows the first steps on how to develop OCF content for Voltron. We will show how to: +- define new **Types** and **Interfaces**, +- create **Implementation** for the **Interfaces**, +- use other **Interfaces** in your **Implementations**, +- test the new manifests on a local development Voltron cluster + +As an example, we will create OCF manifests to deploy Confluence with a PostgreSQL database. + +## Prerequisites + +To develop and test the created content, you will need to have a Voltron environment. To set up a local environment, install the following prerequisites: + +* [Docker](https://docs.docker.com/engine/install/) +* [kind](https://kind.sigs.k8s.io/docs/user/quick-start/#installation) +* [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) +* [ocftool](https://github.com/Project-Voltron/go-voltron/releases/tag/v0.1.0) +* [populator](../../../cmd/populator/README.md) - For now, you need to compile it from source + +Also, clone the Voltron repository with the current OCF content. +```bash +git clone https://github.com/Project-Voltron/go-voltron.git +``` + +Some other materials worth reading before are: +- [JIRA installation tutorial](../jira-installation/README.md) - Learn how to execute actions in Voltron. +- [Argo Workflows documentation](https://argoproj.github.io/argo-workflows/) - Voltron action syntax is based on Argo workflows, so it's highly recommended you understand what is Argo and how to create Argo workflows. +- [Voltron runners](../../runner.md) - Understand, what are Voltron runners. +- [ocftool](../../../cmd/ocftool/docs/ocftool.md) - Learn how to validate your manifests syntax. + +## Types, Interfaces and Implementations + +If you have some software development experience, concepts like types and interfaces should be familiar to you. In Voltron, **Types** represent different objects in the environment. These could be database or application instances, servers, but also more abstract things, like an IP address or hostname. +An actual object of a **Type** is called a **TypeInstance**. + +**Interfaces** are operations, which can be executes on certain **Types** .Let's say we have a **Type** called `postgresql.config`, which represents a PostgreSQL database instance. We could have an **Interface** `postgresql.install`, which will provision a PostgreSQL instance and create a **TypeInstance** of `postgresql.config`. + +**Interfaces** can be grouped into **InterfaceGroups**. **InterfaceGroups** are used to logically group the **Interfaces**. This is mostly used for presentation purposes, like to show the user all **Interfaces**, which operate on PostgreSQL instances. So if you have two **Interfaces**: `postgresql.install` and `postgresql.uninstall`, you can group them into `postgresql` InterfaceGroup. + +Of course, there are multiple ways to create a PostgreSQL instance: you can create it on a public cloud or on-premise, and you could deploy it as a virtual machine or as a Kubernetes StatefulSet. To cover these scenarios, Voltron allows defining multiple **Implementations** of some **Interfaces**. For example: +- `aws.postgresql.install` **Implementation** of the `postgresql.install` **Interface** will deploy AWS RDS instances, whereas +- `bitnami.postgresql.install` **Implementation** will deploys a PostgreSQL Helm chart on Kubernetes. + +## Define your Types and Interfaces + +Let's try to create manifests required to define a capability to install Confluence servers. We will need to create the following entities: +- `confluence.config` **Type** - Represents a Confluence server. +- `confluence.install-input` **Type** - Represents input parameters needed to install a Confluence server. +- `confluence` **InterfaceGroup** - Groups **Interfaces** from the `confluence` group, e.g. if you have `confluence.install` and `confluence.uninstall` **Interfaces**. +- `confluence.install` **Interface** - An operation, which installs Confluence servers. You can think of it as a function: +``` +confluence.install(confluence.install-input) -> confluence.config +``` + +### Create the Interface Group manifest + +First, we need to create an **InterfaceGroup** manifest, which groups **Interfaces** coresponding to some application. +Let's create a InterfaceGroup called `cap.interface.productivity.confluence`, which will group **Interfaces** operating on Confluence instances. + +In `och-content/interface/productivity/`, create a file called `confluence.yaml`, with the following content: + +
+ och-content/interface/productivity/confluence.yaml + +```yaml +ocfVersion: 0.0.1 +revision: 0.1.0 +kind: InterfaceGroup +metadata: + prefix: cap.interface.productivity + name: Confluence + displayName: "Confluence Server" + description: "Confluence is a document collaboration tool" + documentationURL: https://support.atlassian.com/bitbucket-cloud/ + supportURL: https://support.atlassian.com/bitbucket-cloud/ + iconURL: https://wac-cdn.atlassian.com/dam/jcr:d6e2d2db-e58a-40f7-9d1a-d6d22a335c96/Confluence-blue.svg + maintainers: + - email: your.email@example.com + name: your-name + url: your-website + +signature: + och: eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 +``` +
+ +> The `signature` field is required, but currently we haven't yet implemented a signing mechanism, so you can put a dummy value there. + +### Create the Interface manifest + +After we have the **InterfaceGroup**, let's create the **Interface** for installing Confluence. +Create the directory `och-content/interface/productivity/confluence`. + +Inside this directory, create a file `install.yaml` with the following content: + +
+ och-content/interface/productivity/confluence/install.yaml + +```yaml +ocfVersion: 0.0.1 +revision: 0.1.0 +kind: Interface +metadata: + prefix: cap.interface.productivity.confluence + name: install + displayName: "Install Confluence" + description: "Confluence is a document collaboration tool" + documentationURL: https://support.atlassian.com/confluence/ + supportURL: https://support.atlassian.com/confluence/ + iconURL: https://wac-cdn.atlassian.com/dam/jcr:d6e2d2db-e58a-40f7-9d1a-d6d22a335c96/Confluence-blue.svg + maintainers: + - email: your.email@example.com + name: your-name + url: your-website + +spec: + input: + parameters: + input-parameters: # the Interface requires an input-parameter of Type "cap.type.productivity.confluence.install-input" + jsonSchema: + value: |- + { + "$schema": "http://json-schema.org/draft-07/schema", + "$ocfRefs": { + "inputType": { + "name": "cap.type.productivity.confluence.install-input", + "revision": "0.1.0" + } + }, + "allOf": [ { "$ref": "#/$ocfRefs/inputType" } ] + } + output: + typeInstances: + jira-config: # the Interface outputs TypeInstances of Type "cap.type.productivity.confluence.config" + typeRef: + path: cap.type.productivity.confluence.config + revision: 0.1.0 + +signature: + och: eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 +``` +
+ +The `spec.input` property defines inputs, required by the **Interface**. There are two types of inputs: +- `spec.input.parameters` - User provided input parameters, i.e. these could be configuration parameters required by the operation, +- `spec.input.typeInstances` - input **TypeInstances**, i.e. a PostgreSQL database, which is needed for an application. + +The `spec.output` property defines the **TypeInstance**, which this **Interface** returns. + +Although Confluence needs a database, we don't specify it as an input argument here. That is because, we leave selecting a database to the **Implementation**. + +### Create the Type manifests + +Now we need to define the two **Types**, which we use in our **Interface**: `cap.type.productivity.confluence.install-input` and `cap.type.productivity.confluence.config`. + +
+ och-content/type/productivity/confluence/install-input.yaml + +```yaml +ocfVersion: 0.0.1 +revision: 0.1.0 +kind: Type +metadata: + name: install-input + prefix: cap.type.productivity.confluence + displayName: Confluence installation input + description: Defines installation parameters for Confluence + documentationURL: https://support.atlassian.com/confluence-cloud/ + supportURL: https://www.atlassian.com/software/confluence + iconURL: https://wac-cdn.atlassian.com/dam/jcr:d6e2d2db-e58a-40f7-9d1a-d6d22a335c96/Confluence-blue.svg + maintainers: + - email: your.email@example.com + name: your-name + url: your-website + +spec: + jsonSchema: + value: |- + { + "$schema": "http://json-schema.org/draft-07/schema", + "type": "object", + "title": "The schema for Jira configuration", + "required": [ + "host" + ], + "$ocfRefs": { + "hostname": { + "name": "cap.core.type.networking.hostname", + "revision": "0.1.0" + } + }, + "properties": { + "host": { + "$ref": "#/$ocfRefs/hostname" + } + }, + "additionalProperties": true + } + +signature: + och: eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 +``` +
+ +
+ och-content/type/productivity/confluence/config.yaml + +```yaml +ocfVersion: 0.0.1 +revision: 0.1.0 +kind: Type +metadata: + name: config + prefix: cap.type.productivity.confluence + displayName: Confluence instance config + description: Defines configuration for Confluence instance + documentationURL: https://support.atlassian.com/confluence-cloud/ + supportURL: https://www.atlassian.com/software/confluence + iconURL: https://wac-cdn.atlassian.com/dam/jcr:d6e2d2db-e58a-40f7-9d1a-d6d22a335c96/Confluence-blue.svg + maintainers: + - email: your.email@example.com + name: your-name + url: your-website + +spec: + jsonSchema: + value: |- + { + "$schema": "http://json-schema.org/draft-07/schema", + "type": "object", + "title": "The schema for Jira configuration", + "required": [ + "version" + ], + "$ocfRefs": { + "semVer": { + "name": "cap.core.type.versioning.semver", + "revision": "0.1.0" + } + "hostname": { + "name": "cap.core.type.networking.hostname", + "revision": "0.1.0" + } + }, + "properties": { + "version": { + "$ref": "#/$ocfRefs/semVer" + } + "host": { + "$ref": "#/$ocfRefs/hostname" + } + }, + "additionalProperties": true + } + +signature: + och: eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 +``` +
+ +The **Type** values are described using [JSON Schema](https://json-schema.org/). + +> Currently the **Type** manifests are not used in Voltron to validate the data of the inputs and outputs. Validation of the data will be added later on, although +> it is still useful to define the **Types** to document the schema of the data. + +## Runners + +The Action execution is handled by runners. For now we provide the following runners: +- [Argo Workflow Runner](../../../cmd/argo-runner/README.md) +- [Helm Runner](../../../cmd/helm-runner/README.md) +- [CloudSQL Runner](../../../cmd/cloudsql-runner/README.md) +- [Terraform Runner](../../../cmd/terraform-runner/README.md) + +To check the schema of the runner input, you have to look in the [`och-content/type/runner`](../../../och-content/type/runner) directory. You can find there the JSON schema and an example input for the runner. + +You can read more about runners in [this document](../../runner.md). + +## Write the Implementation for the Interface + +> The syntax used to describe the workflows in **Implementations** is based on [Argo](https://argoproj.github.io/argo/). +> It's highly recommended you read their documentation and understand what is Argo and how to create Argo workflows, before writing OCF Implementations. + +After we defined the **Interfaces** and the **Types**, we can write an **Implementation** of `confluence.install`. Our **Implementation** will use a PostgreSQL database, which will be provided by another **Interface**, which is already available in Voltron. We also allow users to provide his own PostgreSQL instance **TypeInstance**. + +Create a file `och-content/implementation/atlassian/confluence/install.yaml` with the following content: + +
+ och-content/implementation/atlassian/confluence/install.yaml + +```yaml +ocfVersion: 0.0.1 +revision: 0.1.0 +kind: Implementation +metadata: + prefix: cap.implementation.atlassian.confluence + name: install + displayName: Install Confluence + description: Action which installs Confluence via Helm chart + documentationURL: https://github.com/javimox/helm-charts/tree/master/charts/confluence-server + supportURL: https://mox.sh/helm/ + license: + name: "Apache 2.0" + maintainers: + - email: your.email@example.com + name: your-name + url: your-website + +spec: + appVersion: "2.x.x" + + # Here we define an additional, optional input TypeInstance of Type "cap.type.database.postgresql.config". + additionalInput: + typeInstances: + postgresql: + typeRef: + path: cap.type.database.postgresql.config + revision: 0.1.0 + verbs: [ "get" ] + + # We can also define additional output TypeInstances, which our Implementation creates. + # This is needed to build the dependency graph, so Voltron can properly handle updates and rollbacks + # of these TypeInstances. + additionalOutput: + typeInstances: + confluence-helm-release: + typeRef: + path: cap.type.helm.chart.release + revision: 0.1.0 + database: + typeRef: + path: cap.type.postgresql.database + revision: 0.1.0 + typeInstanceRelations: + confluence-config: + uses: + - confluence-helm-release + - postgresql + - database + + # Here we say, we implement the Interface, we defined before. + implements: + - path: cap.interface.productivity.confluence.install + revision: 0.1.0 + + requires: + cap.core.type.platform: + oneOf: + - name: kubernetes + revision: 0.1.0 + + # In this section we need to import all Interfaces, we will use in our Implementation. + # These can be Voltron runner or other actions. + imports: + - interfaceGroupPath: cap.interface.runner.argo + alias: argo + methods: + - name: run + revision: 0.1.0 + - interfaceGroupPath: cap.interface.runner.helm + alias: helm + methods: + - name: run + revision: 0.1.0 + - interfaceGroupPath: cap.interface.database.postgresql + alias: postgresql + methods: + - name: install + revision: 0.1.0 + - name: create-db + revision: 0.1.0 + - interfaceGroupPath: cap.interface.jinja2 + alias: jinja2 + methods: + - name: template + revision: 0.1.0 + + action: + runnerInterface: argo.run + args: + workflow: + entrypoint: main + templates: + - name: main + # Voltron Engine will inject the 'input-parameters' artifacts into the workflow entrypoint. + # It contains the Interface parameters, in our case it is `confluence.install-input`. + inputs: + artifacts: + - name: input-parameters + steps: + # If the postgresql TypeInstance was not provided, then create it + # using the imported 'postgresql.install' Interface. + - - name: install-db + voltron-action: postgresql.install + voltron-when: postgresql == nil + voltron-outputTypeInstances: + - name: postgresql # We have to define the output TypeInstance 'postgresql' from this step + from: postgresql + arguments: + artifacts: + - name: input-parameters + raw: + data: | + superuser: + username: superuser + password: okon + defaultDBName: postgres + + # Create the database for Confluence in our PostgreSQL instance + # using the imported 'postgresql.create-db' Interface + - - name: create-db + voltron-action: postgresql.create-db + voltron-outputTypeInstances: + - name: database # Defining the output TypeInstance 'database' + from: database + arguments: + artifacts: + - name: postgresql + from: "{{workflow.outputs.artifacts.postgresql}}" + - name: database-input + raw: + data: | + name: confluencedb + owner: superuser + + # Here we prepare the input for the Helm runner. In the next two steps, + # we use Jinja2 to render the input and fill the required parameters. + # In the future there might be a better way to do this. + - - name: render-helm-args + voltron-action: jinja2.template + arguments: + artifacts: + - name: template + raw: + data: | + command: "install" + generateName: true + chart: + name: "confluence-server" + repo: "https://helm.mox.sh" + output:{% raw %} + goTemplate: + version: {{ '"{{ .Values.image.tag }}"' }} + host: {{ "'{{ template \"confluence-server.fullname\" . }}'" }}{% endraw %} + values: + postgresql: + enabled: false + databaseConnection: + host: "{{ host }}" + user: "{{ superuser.username }}" + password: "{{ superuser.password }}" + {% raw %}database: "{{ name }}"{% endraw %} + ingress: + enabled: true + hosts: + - host: confluence.voltron.local + paths: ['/'] + - name: input-parameters + from: "{{workflow.outputs.artifacts.postgresql}}" + + - - name: fill-params-in-helm-args + voltron-action: jinja2.template + arguments: + artifacts: + - name: template + from: "{{steps.render-helm-args.outputs.artifacts.render}}" + - name: input-parameters + from: "{{steps.create-db.outputs.artifacts.database}}" + + # Execute the Helm runner, with the input parameters created in the previous step. + # This will create the Helm chart and deploy our Confluence instance + - - name: helm-run + voltron-action: helm.run + voltron-outputTypeInstances: + - name: confluence-config # Defining the output TypeInstance 'confluence-config' + from: additional + - name: confluence-helm-release # Defining the output TypeInstance 'confluence-helm-release' + from: helm-release + arguments: + artifacts: + - name: input-parameters + from: "{{steps.fill-params-in-helm-args.outputs.artifacts.render}}" + - name: runner-context + from: "{{workflow.outputs.artifacts.runner-context}}" + +signature: + och: eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 +``` +
+ +Let's take a look on the **Implementation** YAML. **Implementation** has the following properties in the `spec` property: + +| Property | Description | +| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `appVersion` | Application versions, which this **Implementation** supports. | +| `additionalInput` | Additional input for the **Implementation**, compared to the **Interface**. In our case, here we define the `postgresql.config`, as our **Implementation** uses a PostgreSQL instance for Confluence. | +| `additionalOutput` | This section defines any additional **TypeInstances**, which are created in this **Implementation**, compared to the **Interface**. In our **Implementation**, we create a database in the database instance with the `postgresql.create-db` **Interface**, which outputs an `postgresql.database` **TypeInstance**. We have to write this down in `additionalOutput`, so Voltron will upload this **TypeInstance** to OCH and save the dependency graph. | +| `implements` | Defines which **Interfaces** are implemented by this **Implementation**. | +| `requires` | List of system prerequisites that need to be present in the environment managed by Voltron to use this **Implementation**. In our example, we will deploy Confluence as a Helm chart on Kubernetes, which means we need a Kubernetes cluster. | +| `imports` | Here we define all other **Interfaces**, we use in our **Implementation**. We can then refer to them as `'.'`. | +| `action` | Holds information about the actions that is executed. In the case of the Argo workflow Runner, in this section we define the Argo workflow, which is executed in this **Implementation**. | + +The workflow syntax is based on [Argo](`https://argoproj.github.io/argo/`), with a few extensions introduced by Voltron. These extensions are: + +| Property | Description | +| ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `.templates.steps[][].voltron-when` | Allows for conditional execution of a step, based on an expression with a TypeInstance. You can make assertions on the input **TypeInstances** available in the **Implementation**. It supports the syntax defined here: [antonmedv/expr](https://github.com/antonmedv/expr/blob/master/docs/Language-Definition.md). | +| `.templates.steps[][].voltron-action` | Allows to import another **Interface**. In our example, we use this to provision PostgreSQL with `postgresql.install` **Interface**. | +| `.templates.steps[][].voltron-outputTypeInstance` | A list of **TypeInstances**, from the **Implementations** outputs, which are created in this step. The `name` must match with the output name defined in the implemented **Interface** or **Implementations** `additionalOutput` and `from` is the name of the Argo output artifacts from this step. | + +Let's go through the **Implementation** and try to understand, what is happening in each step of the action. Our Confluence installation uses a PostgreSQL database. We defined an additional input `postgresql` of type `cap.type.database.postgresql.config`. Additional inputs are optional, so we need to handle the scenario, where no **TypeInstance** for `postgresql` was provided. The first workflow step `install-db` is conditionally using the `postgresql.install` **Interface** to create an PostgreSQL instance. + +> The `input-parameters` for `postgresql.install` are hardcoded in this example. In a real workflow, they should be generated or taken from the `input-parameters` for this **Implementation**. + +In the next step we are creating a database for the Confluence server. If you look at the **Interface** definition of [`cap.interface.database.postgresql.create-db`](och-content/interface/database/postgresql/create-db.yaml), you will see, that it requires a `postgresql` **TypeInstance** of **Type** [`cap.type.database.postgresql.config`](och-content/type/database/postgresql/config.yaml) and input parameters [`cap.type.database.postgresql.database-input`](och-content/type/database/postgresql/database-input.yaml), and outputs a `database` **TypeInstance** of **Type** [`cap.type.database.postgresql.database`](och-content/type/database/postgresql/database.yaml). In the step, we are providing the inputs to the **Interface** via the `.arguments.artifacts` field. We also have to map the output of this step to our output definitions in `additionalOutput` and the implemented **Interface** in the `voltron-outputTypeInstances` field. + +The `render-helm-args` and `fill-params-in-helm-args` steps are used to prepare the input parameters for the `helm.run` **Interface**. Jinja template engine is used here to render the Helm runner arguments with the required data from the `postgresql` and `database` **TypeInstances**. Those steps don't create any **TypeInstances** and serve only the purpose of creating the input parameters for the Helm runner. +You can check the schema of the Helm runner args in the [Type manifest](../../../och-content/type/runner/helm/run-input.yaml). + +> To create the input parameters for `helm.run` we have to use data from two artifacts. As the current `jinja.run` **Interface** consumes only a template and a single variables input, we have to perform this operation twice. To seperate the variables substituted in the first and second operation, we escape some parts using `{% raw %} ... {% endraw %}`, which is removed in the first templating operation and will be processed in the second operation. +> +> In the future we might improve the ways, on how to process artifacts in the workflow. + +The last step launches the Helm runner, deploys the Confluence server and creates the `confluence-config` and `confluence-helm-release` **TypeInstances**. The `confluence-config` **TypeInstance** data was provided by the Helm runner in the `additional` output artifacts from this step. Check the Helm runner documentation, on how the `additional` output is created. + +Note the `runner-context` argument, which provided the context for the runner. Voltron Engine injects a global artifact `workflow.outputs.artifacts.runner-context` into the workflow, so if you use a runner, which needs the runner context, you can to do it using: +```yaml +arguments: + artifacts: + - name: runner-context + from: "{{workflow.outputs.artifacts.runner-context} +``` +To verify, if a runner needs the context, check the **Interface** of the runner (eg. [Interface for Helm runner](../../../och-content/interface/runner/helm/run.yaml)). + +## Validate the manifests using ocftool + +You can use the `ocftool` to validate the manifests you created. The `ocftool validate` command checks the manifests against JSON schemas and can tell you, if your manifests are correct. + +> For now the `ocftool` does not verify the content of the `action` property in **Implementations**. It will not verify, that your workflow is correct and will execute properly. + +To verify all your manifests in `och-content` directory, execute: +``` +ocftool validate och-content/**/*.yaml +``` + +You can read more about the `ocftool` [here](../../../cmd/ocftool/README.md). + +## Populate the manifests into OCH + +After we have the manifests ready, we can start our local Voltron environment. In the root of the cloned `go-voltron` repository run: +``` +ENABLE_POPULATOR=false make dev-cluster +``` + +This can take a few minutes. We disabled the populator sidecar in OCH public, as we will populate the data from our local repository using the populator. + +> You can read more about the populator, how to compile and use it, in this [README](../../../cmd/populator/README.md). + +To populate the data, you will need to first set up port-forwarding to the Neo4j database service: +``` +kubectl port-forward -n neo4j svc/neo4j-neo4j 7474 7687 +``` + +Then populate the data, with the populator: +``` +APP_JSONPUBLISHADDR= APP_MANIFESTS_PATH=och-content ./populator . + +APP_JSONPUBLISHADDR=http://172.17.0.1 APP_MANIFESTS_PATH=och-content populator . +``` + +## Run your new action + +Now we will create the action, to trigger the Confluence installation. Open https://gateway.voltron.local/ in your browser. +Then copy the following queries, variables and HTTP headers to the GraphQL playground: + +
+ GraphQL queries + +```graphql +mutation CreateAction($in: ActionDetailsInput!) { + createAction(in: $in) { + name + status { + phase + message + } + } +} + +query GetAction($actionName: String!) { + action(name: $actionName) { + name + status { + phase + message + } + } +} + +mutation RunAction($actionName: String!) { + runAction(name: $actionName) { + name + status { + phase + message + } + } +} + +mutation DeleteAction($actionName: String!) { + deleteAction(name: $actionName) { + name + } +} +``` +
+ +
+ Query variables + +```json +{ + "actionName": "install-confluence", + "in": { + "name": "install-confluence", + "actionRef": { + "path": "cap.interface.productivity.confluence.install", + "revision": "0.1.0" + } + } +} +``` +
+ +
+ HTTP headers + +```json +{ + "Authorization": "Basic Z3JhcGhxbDp0MHBfczNjcjN0" +} +``` +
+ +![graphql-playground](./assets/graphql-playground.png) + +Execute the `CreateAction` mutation. This will create the Action resource in Voltron. You can use the `GetAction` query to check the status of the Action. Wait till it is in the `READY_TO_RUN` phase. + +After it is in the `READY_TO_RUN` phase, you can see the workflow, which will be executed in the `renderedAction` field. To run the Action, execute the `RunAction` mutation. Use the `GetAction` query to monitor the status of the Action. + +### View the Action workflow in Argo UI + +You can also check the status of the Action by monitoring the workflow for the Action on the Argo UI. This can give you useful information, when debugging your Action. +To get access to the Argo UI, execute the following command to set up port-forwarding to Argo: +``` +kubectl port-forward -n argo svc/argo-server 2746 +``` + +Now you can access the Argo UI with your browser by opening http://127.0.0.1:2746. + +![argo-ui](./assets/argo-ui.png) + +### View the Action Custom Resource + +You can get useful information about your action using `kubectl`. You can check the `actions.core.projectvoltron.dev` custom resource to get information about your action: +```bash +$ kubectl describe actions.core.projectvoltron.dev install-confluence +Name: install-confluence +Namespace: default +Labels: +Annotations: +API Version: core.projectvoltron.dev/v1alpha1 +[...] +Status: + Last Transition Time: 2021-02-08T17:17:27Z + Message: Rendering runner action + Observed Generation: 1 + Phase: BeingRendered +Events: + Type Reason Age From Message + ---- ------ ---- ---- ------- + Normal BeingRendered 3m2s action-controller Rendering runner action + Warning Render runner action 2s (x15 over 2m58s) action-controller while resolving Implementation for Action: while rendering Action: No implementation found for "cap.interface.productivity.confluence.install" +``` + +In the case above, we can see that the action rendering is failing, because the Voltron Engine is not able to find the `cap.interface.productivity.confluence.install` **Implementation** in OCH. + +## Summary + +In this guide we went through different OCF manifests and their syntax. We created manifests which added a capability to install Confluence server instances. We also showed, how you can test the manifests you are creating and where to check for useful information, when debugging your action. diff --git a/docs/tutorial/content-creation/assets/argo-ui.png b/docs/tutorial/content-creation/assets/argo-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..6a5371e2a11efa7055aa08e5aefeca9add590b87 GIT binary patch literal 57893 zcmY&<1yo$yvMmn5-6bIecXvo|cXxMpceh}{JxFkOXo3cJ8fe_zU4Q4j`|dfPF`6E| zpx3Tlt7KNy+);}15-5m-h!7AEC{mK5$`BARFAxyWMhI}=6&K^;UGN)>%Qq=i1n`e9 zf@vi9Gl8p^rmKpBxvPhfvl)biy@Q<@gNuo?nVG$drGx7^G(Zpn;v7!PbmpteWVeEZFP)q-`CyOK_twvA4cy3KsMs#Aqe z6QkOaC_1{9={gW5>AOHi#+dWD06@r`l>+@^Xf1W#{x(a}O56R4%lQZ3SXM(>;%5o# z?$3=2-0>l1TB76_y_?L5lA%dSNg{e2pF+{UA^h(zRK#sX4dMTM_`5vqMR9@ke}4@{ z-{R|cQ=BNAs|LBg2>rACEmGdu5K5?6xCP<*W-V9%wp`%(!@st@>n~nD@&jVKL9FdU&miRm(D2gK*Bi? z?YTto6)Er5+cCfw?zMQW8a8bc+npQyjL<9bp_xyN0=yOVe<48`W<^9 z;+Eaa)^hj`f9<^%u4`Mq(2DkaNGx0ViS0_oQW1Djg2SC!Owz{rFTvuupYb0Cdb=r@ zKD{qr>L54+tgiN5vZL~U&fmB6#AKsX$x4gjhAeKEwXEg17Nx7`J~#RdORqrW z^u{kHP=N~oZa2Uo|{Tu-uthq-I80Y~c4&&duPXJQGXGOZPIzS=I=kP|MvQ#X+V^oAkz~&D3FW z)tptB&W7s!r^jFAQUJmsr9`r!K9kHs>HOzNkE4e%S+0e~XG-NWvI9Q%RkISHnMMW*Om*ayUQIGwVR{10>cp z8_0=0;&cG4qU*Z4(p1-uo;;Tzf};)#8mucSScTB|jzKG2he0{ed?ArPc2k>fiklp3 zN5|~Oem!d~ao%G|1z1dj`*EmfF`t~cPC{bYzt;X1xQ6d!_yF}axBx-yaVesm_PxSx~-ND&-$v2 zY$<=yXjIh4DW_dGD7mG^7IB{wYgsB-Y*Iiry;1XMQ#C#E(RA^FT(EN$eq&Cp;Pn>% zY~tkiXFAS{-Y3i-IX=$5pw$=+m-nQmN`41o=$S4E`YIdKMR>MF?`assWX$_Ve(1IL zY@s;(o<}iQyYBZGSUOL$K6T=%X<5j(I-8?jfaQR&f1u1ERK zEFNlqzieC~EjPWJDDV%x3ueW;6O(#hcpww;mi6t!wLU%Rw7w)=^K3V&q_eo7zI#52 zt@+;Ob)4Lv`H(eSWEHR69%m7FEQ|SGoKajkyWAbGXz06OX&88Yz#7V%D|nj76iARD z3kdhn53mOuO)KU3a^{rgW{5K5e}n#Q_Ftg`#M zT^-c1{>;7`=Wk8cnUMnH;rpEN?weH-Ik3;Ahr7;cqW1w!E^8=T4rGZOc9@wv!V}`- z0_?BD{#o3A-|_l7>1Fx^6n5P(m6vAi>)3NTCm3?log``Ni5LaCoHd-+U&SBef6s#r zEaGVC;>rn_&>xc#;*N=lxOY&~mq{ZP2n5y$;u%oO9@UU-|B9iyO5ToW@p{$n19WST zxVWU%y6SvsUbq<@--%9yZgX3q#+1d1JabtE2pJvwaVg@DDnj@_j7W5{2EgX6IIH)4x>Fm1Hg^`%eMw9da3k$OeJe!;QR z7dZ{#O7e$@SmkK|6m!=yVK^fl-MZkJZweunKpc^m5ZzASjr%{ zIiCsJE!Lr_DThmo+0*x;bd0bd61tfy(jz4lQ8a-biIkt;cQ@ffB&k1?zzSe#X8t;V z%@Z7-aV znJ!s|nrL|cS!089n?*b)c6*aaksmhSFy7jYp^qnoQrCVBL&QFLn!{J`ZF~stoqL43 zS&|F%`pC}Cezi>WzL^8eE7Aepy%rzP8;oU+E?LO;oVvR_PX>ImF84Tx_Z#YZIRfe4 z7twK_XU{@-zK~7M9$b@bY5ylpitcmU38U%f0e24{};v8Cc%#c5Ej$huiNRk-1ujFbpv$^KPAWmN-~> zzR5a6aa%R}c{A4Qv+y@N3j1fv8I%kxL1KVT-nZA8dg*HKU6b6d6Ib!3KWwZfT9e5Q zxK7(2B(C=g)npAi!c?Bz9e}UPImKqFvc5+Q6Qpx7T>h@4ZEFc-foh1B zFeJ>16HlcKy}dZnZmIhnmguXkcF0V^FZ`u=gyLQm<>_jSeZMwJXlSWKW&!jEW23Dx zkwdOy5FbV(gD5&=N3y=Tdik&h2$>_iYiso08Ac`{Q8n^f=yCTx=1rDze~HRNI~nkr z-G_8M+Tr=xp+|2u4XR!Gd0YJA^~l={7knclvssWBf}fTrC&nzg2~t_~zZ9((_|Vx= zoQ-5Lw!f{CusK%kWov_|{4$|h&LlvRV01C-HTsa>82tV8dvbcub`iXbI$^+%cK5($yVw{u7VFB`@!+HD`kMzr zHunjZsrv?Qh>R<TlJ$UCbuDNe6j^J*eK_PblkL2SGk zA*Pt&3a$ZYz!Fi*CYnV0qLBAkNv5~|-2`?up+G2J4L6(qUVgAG43&L<(xLj8m41CqHpRu&F#pWh zXXptpcn;m!>VQ?#plq@nA%v~`H-?9cdh=}k^__c=~4`o~jjbOQcD;U44L!A7s#<&KOVe(cHD z;WtLQd4&(%1X8)H`ZlAdzawFV^RmbE?rQG1E*H2eGTvhmWzn zJx|MBwgkxG@pc@S14*A%CrCBq6n|-@6L>vj3%k1MO3ZeABrC?IlWqxCKEQRkTm7Lp zv2+G!J=<CHk+^!W?Q=L(1_k`!gjDkW*7Rup7*`{G}Yvf;-N_k39_nWdL83R`&3 zB4SiGv(iQcs9&i9=+$j_41pm&TUx66>%7-&N*7s zUvxMQ`mT%^zCM<+zE@&tX{t=xA*nag-dB`s@8!5b730ZUHceX%p~kz81eN`za&iq znz^YnTJRT*Y@FWYTs^J0nZ@@#cNQxV8ku84O`kWKIX!n?FcK;@Snh_G!Wb=S{;iLa6%=UiR(4?dg;G zh2Eeoe67p-;zfuIa^p5FZ);xa9pWPsSHuu$Tb@;3_kh9MgU*`gGe9=)a#zqmrKMW0 zbz4ISoK6`#-xrYnzQFEJ6v$)1VEE@dWCzNs`B-+}El~G&Me^J4F2E}++RG!0ufGt4 zf&g38))u+o>jsD5^M%`AzfMX{ZhPGqDzHc(w+Gz9tpyyz{#}Mx`C#ww28#2&+XQ&+ zhEXlHS7n#x`FZ8lz~@iz?}z8ThIjjUU#;o9Zv~tKM$|O)k%jH_1i04kbSPtmq7;NY zz>uNUqf&toGV~YnBuZ-=8+LLf4fm6DoGH`LP%?9dg zZU)Kg%dS&KM<)P`K86IJXv3Aqx^74Gdb?jatk#^p%}ZTw4?cBtdKlN(XLIJmC+{&N zIAkpX;8k?i5;(GWsx3b4qaOAp*`=yJK|zcyx278QThDJh7`$wyO#h^4^)i_*MXtQXS=&mAL0M5TU*qA(=vXVZf=#t`# za!Ss4`;~L0BfcH}WvxRfXtL={+u9Dg#j22)C=NP4#93^plqOvF4;0sT<;5SR?9U|q{K`nW85wZE2(bx?mao#$(j(iqkQwrf?Bqu=S zd-bIS`D6gP55BR(pQ)N@vwUq8oQUIOXsS=WMMr4(Yne=OWUlX+>X+xcyqYQwkA@= z@HrgKY^ujUy+q1go$_z#WH9+&B69oYJDB#@`~raQ-@)%I_IO1Ss0m$MSu5GLj9mx( zx{P?x@He}`*OOZSGCy1)K`yQ=Hu)I$WO=z;)|ay1m6~nMB5q4dHv|SrKQc!+H1wo{ zL2~l$xIkS$f;`#WHERHwzW=B20%qia%b_^)fe{X$u4X$k9ABP&8~^LktUrt1Cs z=IJSqCR7&qaPvpnp<%@+%&YFTd>ced_}XgkgAcSrOZMAee;le5i>0OAIQiP;!Sj}c z_b%hD45bp_O~XSYWtUr2IGynHC{m@rZo9fxeXOshH2$5Dr{gq@1Dx5w_%_sz&pppu zabd$kON%`wz0(_O`x$5U3q#nOmzJzv!-qKb&ayKdiy8A*@ z_UcRO-SbAQTqJ9h5mUcM(y=9Ym(ma-X``+-G}PK=RdF;K;!k_s8V|h)dAQl$R1N;B z5&hz$WDcc0)NLWr6EQ>m`KfE08y^lozHmCILhTD#2kQsU$!*}uEYllS(KI!^8I}^~ z*^0d;%KY?3rI@FCevbC{J`@9n;{Nr1aOQZ!Jr3rr{z&+fhcJFZ`t#_vxssiLep<{* zKZ%Hzk5}@CWmL5SM_(NyBBMn%o93y$tp53~_EVKtY3Q%wP53~xDLRgf8DT64EJWv4 zw>L!a^2?8b;sL$Z-D5LVxIS5iiml@91h|b6{Z(okM5ozKGustM81hI6f5Z6Vm6V^69HU% zK-=A&j`*=oW_VM!dJd?u1)2Y~r-DkmC9m|dq2xfJ1x}%kOWxdPV8x0r=o}o4qqY^c z2H!g}LqnS*zSXSPW`HwBl-n_vF$ndCnb8nwzR%U>dx_&a8ChJw`}|k}HQl;=i+xxb zXYLe;uHry@(fe(nw->5JKCfx$7!d}_r%J}hmaf83N6X9ifj!WKuhso2t>Pw@E3%WC_L zOMT~so39V|y{RwYs?y*8>d)$rmTO}F*Xw0{O=FAc8}oC#sm{q(K{4>wVCXmvMvw%@ z(hsXvLr~1!1}xxmZ>t^y`mdpbv(EWF#AHr_gAFQR2N$XQWSpvkQ+Z)y`znzyT;71s zoEpuSGlGvYc3@?68M(uRdO(OVvxjVgH;CX^MpIM!cUFwL%jA3aPKJzv1Bb4+!ZPwp z<3gxz6gS~F&5c0kw!@^1;e}=GY)P0?=K@#P>MnAPNF{TKJd|+O>2AW48D`q)7<+3` z_*cVB1_g++#gR_Lsv?1>;N|=TL^kE;hZ(6pW|Hh5Ip|r?U5giM`Ka4c(jYVWmXHDi zZA5Sc?$lA9$b=IzaW33kZhf)U*E9%T;1$en(Qzgh94(~9rljHwSQR(GBAxv>l-zS? z$bMsUEU^hr5ME~6>JvF{9OrRFV$MVXR-hRMp2WEBg|DOH27$93qF9&7*9}WMNEbD3 zI{52f;6-TUCnooPab%SthVd{iGy#jTJ&+IkNJO3#36QUoYkpi@*Q8zNITbDY)eyc; z_k3|9`_^mj)wZMxY?QCl@i+LMH=6(Twe@jOPovjLM$HYyW9^md?e4-ame2`XnkM&U zKgO0O?#@?MUS8BD&P=P-nC=5`{@kC#Qsi`5%6*ed=1^O6Y7@tcjcw*}*N*FI6l8BY zyNBuTHT3!yw9Lc+B8*PFyF1Pvu}bB*GvNK-i7;2}_a=1yfZ>Q`%|6fm*oSNv^W!#h zq^s+6)~eG118}qL;U$Krs@V>tF0Ze@e^b8->SFpcS!9uL*7jL1fSNq-FmNU|dqUCMz9G1e&f2|Ajg>xtID# zx2OvecG{~ZG5=v3Fh((>U{k)-BUzMc4L~!YocqC+}f>pv+B`AWI7H zR|S@TTYyEd_xGSxd!y`LYR}2b;Vu+$3qIJQu4n-|$~qlSi27vq)d=KfH$|32irwV| zI5e%gvy(9zOx}mz9Xc+dlMMR3O?77rH8Oz<7%04#V*&rmwHtSM|Eiggy<8@NC$!BU z2CGAhMd4fA7!WfmNf)iUDf9CKKKBHcj)tw)f&s;=#QkM(_UkZWvm=-8<)mC<5n?B@z{!fNHIr^-O5O3IWOb67J_g&Xn=)>fWO{Y zq%(IL$=TC%08akTXfM_?5_eZ;rkPtDw{~*w2Knmg+A(4;Uxn30V#bf)C2`FrE{j}$ zTCxDv)a7MMAm}g3KW&e@yk~lNTk5=DS4ijZA#Jw9iqfpqZEBtuWZ<~JJDTmFlBOvy zw|;QF+P}Pasc#sb7%^QqIZ)n7O`U%^Z#cBWffZJFr&OEgczEUOoo6ziSlxD9>&m!$ zq^G4T(ravBWs`L5U@?Kz1fv^pf#19g0N2)eYXaca4-tKxw-fLkDNFjLv3$AWc?lM| z0bwPE=%e*pE*Eiphnlp_8drB6WX4*!6~M~<)%*9MHVe6vi%0EcP?yl|&URU4rTGk< z!wfd^7I$V9Xe0wTu{r9~-fXYe!F-pF!GBRY^sBrYvd{%r{@HgSHyZmt)w&)9b-?CvCXdJbsub3f97P1w2=HKp?@{kLsp_5SYTsE3!s-C$J} z?tvv|T>zSSCEeyW4iP@E)TdKprL|kkw#s4Wm)3edhwQ<|iys7U)i@^Jm9#kD!Je{7?(4UOHHn+w6X406(X!L_=&(|)sx8~Amt@ABy|y8AO$^vsaTgeZ6YciZTEmNAR;dD|Sq5b7H>>I>7+J z4faqPmq*i=^e$2taU;e6B98QTE)OZ+)HO5(f$-e59g^Ggq`s4pE9Pt>jsSDygY=1hQ}nS z`1q2s6!3}AypTnlCiPk_fkSzl#TsiA;Pqq${vY-A(VU}1?DHdWM} zZ|6bhYd2@$^Z6?dxRZbgTzBNVbwe>VFLBwrG~sqzseV8D@}J3z4=dO{&z@a5o3}4^ z2KdC)b5=?tPvao~`Db=`grCcRPgond(cFnVH(k{jja9$mNQe z#mQwSW8Vf|Y3$xag1K|wW#6!a3F=#gI2z^W;lAQz!F)#aEd!10AR98?gOml1Gu9dd z@uUbkapWzqOFRTP_>O?PV-o}`L@ibqkIR^6uRAjG2TO75vX(g(vL^;(tM6F@Dh7;O zXcjs6>$$lHM&R^;rjR!TZj?o{DudKo;y9+2j6aPUi?|6m&}$D6#i%lpw4;{rr3FT8|8UpIh=F;{114g5vqr7?wwIXu$}I)L#6BRrGceNW}Q-utE}B`}&z zU77jw?J62Av8wt{-aJS$v=3`jf;SVx!UgGd-Jw+Gj62}sX@m!_&U~BK|9t}B*lQ$ydo1&(UbEc@YuOBnP=#;t$1qcJi;G@a_9=>y>=5K^ z&kd!q_iDb~6rcB+)v0L21)(7Nl5G z?Jjo#K-)3o+w~p*)lKdHhPcG!NYb?Uw|`{7<03`>_qeJxzB7j!R*PBAwYEDSUFOPl z#v%Xi>d=Uiag&J>yN7Q^h_jv9Y^_`#Iqvj&Gwv{+Er55PnlXbqnMXN{n62lxVKIr@ z?P2iTZ1d_i`}w4!vU8gkZpWgDchYOJdz8kn<9cv@{|b~~0ro|<{~fd0Tz4TQ91Veh zzGzjOk6>talKq9AuA+B3Q;>&1m&Y2tC7wtuc!{^No6jlH=eY@*#6Utr=&H|W(axJENopVp|d|YshRKY#5Zrx zetEDiz$f*POK%ViyF=}=3Vm|-wl-hAwhBLV5IgXo>iOSO2obV{MobX3$nc%&0)M>u zZ+ga`PN#y8-gF_n%GTz>h*s==jGd8mEzcmE6|tuD^zqeW!F}WY-QMJ-Ev?qOPy5X8 zn1^_1b0-Lz`d77)i59^!dr=M~$-waP5DACPpFhJAw?xqyKY~=caxTihY}9=Ev>xNk zb2;x;M0X2?A4&^liRpMx8kmusfQ4Y_pey&YISF8Xv**VKEn-CsYd7I&p|#>P%|X2C zK;2;B+l!R20xir<{G;cbc?uh`q55Zbw-_u%^ELbx$o_GJLsea!?d+!s+CPVn;1p`@ zG9AC?D2Ih|fZW%^jvTBGqlj-w44!4*U0SXZ>RK2CAFt3UuCXKcK)R~&bO#8DSe~)- z>vd7je&wSjyrT)3;uJE!6jrWj|Il#XbFf7csG=cqunqLOm~CpJDtG!O z8|MBBZ$?clV+3#8nf8vKb0VgLi-b#W2o4Uq{*SxtbHEV0ZNYci`WSD=ZUAwn#(ObV zS^@^Vs-8)pXabRg^HxE1^nVEt{TOBmL3voCi^Nq@rZNA$h?HRmxh^? zM4a|Jzv0PtvK+cMH2_aIBkW4eaZAMr9!>_f2I#WTROo|$==xU!@SDwyT6JG869P=% zULHH&o{nX61WEeXfA97ZxFh#vT2I4q<2MpKSVcjiaW!u%f;K+Oc;ElSEFyOGA(^Sb z=5ChjZ2D_zT6zmBMmt*%i>XosTjmKXG~w|Qa0B>lAsz>QfzUfrs=s843YZK6A%#mEG;#O z=%bzueIk4r30vq_znh<)_cy7y6W_m6u`Hg#d?MkrKK3&$E;hvXAz@+szi^50iB}60 z6&rtdWP|!LmHAWxvDPmtn-(>b`6#8eNQb)xlf^8H1&ZEq?>L;Vz-zWEvLotauWPpN zUGBu4%|d7nNz4vZX+yCYzp`A4kFx_|KBJjdK zjXfpIv%&5DBJkl2wM&2XYIs-bC<_Vb5hnV9$RB(};Ddud#a2x9z+s zC;iPTD`U8gepNr}^3FvwJZRI|M1p)Vk=ZhC(>-K?z55AU8lHt8Zh0D?kvSQ=8<-~s zpT)fLA>Zv}5g~jOr9^56P@~-D1$|zO3x!Gu9eH~e!?1Ylj4kznbcS`M6$=xh@KfPG zlAudaH`oBH?>PfziBn+-i7qKDY7I}}7VJU6+pGvWxOxrs5MpkA0zX(avr;BPciE(D zEBk29A~Lq(7#EE27tOw~^IxMUesPhcz9`J}Ik1Y$$QCxW;n_@;ak@VU$w(yQ<-07k4fA{=n~FS0nHv3M1MOIDa)jb*`kPPMF0v_1lTq7BuKY zY~OXe5E5YVFWMS6%-q3rkp~}~I*K4F->M9>e@fLMsEP=d;BZX04ROlSjyd+@{aj^< zjyPQV{l~F6*X&Gba+@@f*2GX>rjgnrm-7Lu9tz#Vp-+jSf*~x|h_$c&*(h|EYHAmj z;!J{^Y|JTxQR7Q^0_@s)yOz%5$e9ZaeU*#YK6He4T0g`nFh5}6p^DuuSN^zd!wjExEp&R+mu|Q)(wJ*!avtda?Ti zi5LW#76i(QOx%VgL3!4WZ=BbL>LG|~ZdiWMY^hnc z?IyxUu_Z1>zk-r#h;Jzjx(n(y__q`b%cw7ngVThi#z?urxfB`pFXs3GAOEypA@(-o z==o`c6tI7)QW~cGAoVMK{CDY2G)+fa}M*uURilKY)-_!+6(x?UF$`R zy8&FZuQrY!2P6lpm!oHQgf2X!{u^(sOC_ zJNZth$;*Gag!kB*JdHwxpDxoZDRpcdtdUdPutcH7y`w>i7s-_V`g|0XB6%+OFIJ-a z!X2?c-?Uq*s5J1q`WzXkoXT`LFeo0@84}y5N_%X4-_RTLGR@ZT?&ML|`FcI7@+Dew zNj$dE7E>b5;w`%AVSjS3wNUm21HKr0*{N18jO?@Ex&gnYEAfm}?VpDR=&tT z8jQ?2?TRpn?K0y4b1o07*)eTHEIqmp5ZfWEA`K0x3t1GTxF}AjiY~RlE=4#t%2@%0e z2RxPn!BAOIIIGdhaO?%UQg)gcGiKBe1y}CcF!Df*9Qdio>WeIS)?bWFi6}DpB~Zn& zT??t20{;Z~Q0}Bg8%c-kZNn=4z=}yF(;fFdhsR5TPnjv?u|WmK6=&AWC}Msp>DO?s zn-(TM*Y|D5S}jg&5JRq`TWF;yMRhcxR-%1;5+T1hzRG?R4H29TX77^;=KN5j6{*sc zdY}yOPMH5sOX9C`wkY=Gu)&kB+)VP3>!qR?KH;MeFb`LM`iZ; z9Npi=7URSHw1=SharACJ8`E_1qJSJXRc!~CI}s}po@X1F`m$E0NB?~miKWYn%E z3=8#IU`p-hVw+G!3UCTw!9-3em}0QM zOPIU4A-e11vX;X6Vzq2o#sO5z*YZT+^%PM~@o(vYUr3(+y-&+4;!9>B%?cS|63$n>#Tr&-_MFERMHX_F;*FiU6G07y+EWEb+@y3QLB`d6xPW70H_M(@uBq zr7!)>0(bpm@;|S>{9CRBRCxa%(5Q+Sb!|R+C<7UkK#Ni(Aa(&~;bCrNEs30_ND=|c zy>arJ5q@+atUV42s!bm%Y!szdl)WIWo#~Q0nP2kiA|bhU@4upqlVPeFP+9A^ub!MZ zmRp*}v2A6?-1{&oXX%%j2lquo&_Fjrj2{NXgp5?bA|iYl(h~lN+>}!pl1=9@W#Zx$ zQRV?{7YYVZ%`ZtOqB$}4L``%}9OrapB4cU0G8IO}f0?F$mWFaXfJV~Tn0zheXGnc$ zB^)_M%<25?1N5gSY#dkZrNKAS6Lmyr%X$vNS`P4LB?Xb(Q|M02D6ru{%F{w}BGdRz z2)rAd$VYvs7*y@#4#`zIssFa6AZ2yE81N;m%hO<5j`KtP(Dk;+f1i?b%>P~0aFA+T1V8#BVv)#aMZcAMgU$tyR3k`skDhV;7B_v11fKQou zASWypdt7%1b2!%U@~78DRj6hA>%lSnF@93U5+6~7W`z+?Di=msB}ww0a@#!v{-*Ob zPEfrX^ydgAYe`*6EM!uF8}k!p;uk~S5YQ=DBFgcsZ$|#8uRb_zwF(L|DqY~O%v3+0 zD>khrJ|VAYT#fNF?_{`{Cf*5l5|`iog<-sf^$QZl##>*Jp4>|U`};*{ZTxaL8$AF} zLJ(o!p#61<8YxdK3F+fTBkvZj#fW8b^u|PJgewk+{hKKb=^BkT8rVPaJ#8{gy?j#S zbNpj}`(|^)rKF^y(8c6fR^cqk9Y6ThWXUM=n~^o4FT_uuK~ zYj_`5vt(OdY%#G`p4Hawj%k8 zlSmhnut|PY;R~@dt1_SJ;EI@x*YWl*iI?vgeZ$dBL|PqIn0R>{xpfj~r-}qK)e+(r zjXC_#XvF`Yct!t{#_D{Yn;653ev5A^JIcmq^;2*`%FLoW^(eB7gQHYafn%e&v{z&; zG(Ox{omoq(M&*Y}O9kQ2zsJ*w(MX}`Ur!OAo7EO-+bWd>56+;6rfnH3Om)o01<9T_ z8?`#`-b$~K?v1E1>pV|i6&@XzEByr3mv5(*^O}<_HiD=o$Dl=WwIpz@&ih8+8YBLi z=3QlPV%Gd}3C{)1G*y(!(!R(=UZ6nlS*C+j@UH1}hrrWunC-gfyTwAH*z)s5ea-)v zTx8d=ug6)mJe5PNf_$b98xE9fQH6Bdk0~B4rGT&KGg}Q$TMxyUuP| zZ=`1e)2I64?MSFledz@3)oxT?B*c^pgIWnEZ~k*`1fD-A2_Coy*O&8RuAFtDs%3Rp z{(9+sWw-(hH#{u6eym7h1?*Gs0m$%M<#4_WWKXsG!(G7lwCb<=EdM|Cwfs-yL6wLBXpQWR z>$orFrlpN8nk4YRa6}(Dq5&3piMe}{yko+e5+7cPAHQD*`|nuRH3N2(X6N%TyZ==P63EwJ`Szlz<*y|ceEGK}t}TOcENa-GIN7L1 z_3!$-*LV1E)&o!}Ra@HJ0~d5e27^` z#|9H+ARieoWLED++9@&B5WSY8rrLg^$WG4oLd@sR?uKvW!Hs0!U8XP%xO37A6F=_M zFznD!xMpmnmrnV7@eZ+c;83`R$2~XyF!Adi*7AlcF*9k-`Z+UBN3+g-`%`)9q5<84 zz3KQM!_Dzh*StH}I@ZsY|5^w9zn$D2Ncs)IiTdFcvby!D)VAj2q3lP$C|Yu^Pd4em zDsP=R$@SK#!^IpM(`5&r!)`Vk74gwgzaOU=Tud7M(Dr5HbNX_-cXjubu{SmzNl#|e zyOW0=&Ff*7`0V+2%bfS8zMO{qpm61%pbo{MdWrPzM`jmJrrpH%9F6;G{ z5zy(O-VqI5QPm6rT6`2fY<6a4n~{`~KdUVNfO^6<%Z_Y2wDcUm{uO>Jqd28ED;q|7 z^BR6C;uvN?A|HBstt+}CF*Okm%;TWfYQr6EzONYjET;3ueKwP{92o=~EK}wKu?0ld9Rctn@aS0y9uaue)5)yh{=b*K|WzwN4 zR&~GfGF;3Gy9{;iZFXOBX~TGdk+s@&{0V;ZGsD3myl{X0eVfJTNYnAKq=Lzx9{lfviNMs~QHQ#rtz0O~}XmH1RqNozd#3tfglK;6rg-}g#z5_%FRJN%`eZ*rQMo${wP$d5%1x~ibDGMGVU zlqJP@G2j0u1r^lP0aC5&uJ#9azTpWwV4}rFCJLAoeEUsy*7Q$cH!{g0*(^Jns9OSe z&gySyNB7XKC z0Cc%vMdT6OTkQ4g@*-yWv>oSHl*P>ANz$}?PQaul!6OL9PeT?_|wmc8zCBJz;Y0OolDJzj%gk<$8G7_^#`@>Xta0fi5+K6vL46OU@rV3+la z%|fNUintiNZApvb%a@rs?4RW&KiZIR>&%Wh<$3(a7=?Vdx*sZ|es{DRQ490aK>@bM@$#=* zer2}>HkXsgg6x1nn)Gmtb@NP0v9L#MoIN(@MPYs4Z2-t1rsk7 z=?#aB^o`@##qYoRmvRXB^Cb7>SJ4SpMC^Z+U@Rwyui-{FoOy9xn5^D;V2|?d;a^` zZV$*3aMUNuVIw27jqV6xy%ZD_hWK!L9k`@3-Xu%El;Js^vUuIICl!h&6`>wa&HXs?>~?X+o~$9aafv? zs@C!lk+#CdUFR)hTcM<|J~~Y12ecuz74?DXj>AsDX z#(c9DkJd?;0+&-| z;L|*26w0I0_smgjJ>5JgCFaU(kQX3@7;-9exTrH+k`{dSmFI7;Z&Q#_u^8V@p0t2= zoJq%sC1FV!yHV}Mh>0Gt7R=&Fb0d=ZGbXt`kyX8$7|<>2W#;zs(0M}d@71UF@;Hq5 ztNa&emtQa-5G>90`lLC!C1P{=XmBx|*Xygo_A_DlZ#^ypiA=7rq1<<_Vly0UkJDZ` zpzg>jn$W;)T0q{J9w_&PY-3o;p}x)(v}XTITD4Zo^ET=uvCP3ye5^t`Ef)>ilE9#tdXxl}_j7_f$Vc_A~ zT>&-Vr#@quRVvgFkUk97ehNXy#XNB&v*BXs#0>tJU)c%egIe+lP>Ud5^r2fDrSLO3 zv%4uPgrUumJ$@Wzhrj1+d=5G+B$jwWEzji3sQIU!^~w76x>(ttXR8U-EYs4#2?A9$3hO)TVu2yj@5 zuaA}6aep$}YE*fqcIV54#dk=4$K$5BZg{tZ7`vOU1(LJo`@xhh zZqFMS(YnhF!il841-oJ{d_`UD_?t0X+vPg=-Bi4^{xRvlVir-$+eE^m?< zFbYNZl-%Pzg!(OvcfFN0b-v$f+S9Bpj~5x1|F~k&Y=>Jw(QxQ#$6cX}DGc20IWz#CgmRKX8DR`G9bjuRO}0GFTEyx*9v{XN z!)Pd#Z>%J8eKEz2H_PtFX<#z{gM$b=frm}b&W+$=&iz$p;{Uh+@?jJir9JkG?a*)j z-I6EMBvQ~%MlvJzV>tpSw8fabU8FiH_lBM`A6t_B0#99h?|f&0vgi=>t*)8ls+n6e ztS=A8yfCm&pjgb9c!a*4y1vVyK@t?w^OHxY&d1>v#Yl3@EfdGlc^4&Z^`JRFs~>(> zS4fu&rRz&83hm!r@dbYhl_=nc)dXnARc1F_Tq=DQq-@v1kv}%ZfCzatWHfv4BpyPfBowcP^i(X3urJa zlSDC=%}qEOu)e{bTdMCv#+yT`T?Mz=F}N{fwar{+z(oIc1)m`Msn(v!<5}3oYybN4 z`uupR#)Ao&U^ZQDU6c_>cY*A{PX;i%T-{cGiVJG6#@f7G~O@?iWo-B`P;{IlCG z_iJ}iiExv%N~;T{3MD1Aum*Lhgc1ZqWMT0=8VWR0!#0M`Y@kuYlXNVX?kMVbXFc7-+CyU)NSs;n&@;KciB^ zFzF(?rxAS z0qIg2>F(|p=`QK+I&khj>gV(Oe*d_0XYS0MyN7YJWu3Lxde@uJdiFjWn>uaozx|t5 zf=ZQ&M1OtrnQLIc)#NfGz`r6F#DFhUk-9vYL(K)#XoBv>QB#G!sWDMCfQMf%vxcm{e>fPDvn3RWN?Bz);lSwBTm7 z=nT4(6W<=HdLB>tz3K;ndB6Ocmk{Pt-LCj^(xvfj=LMaaqb(a!jV#JxPA^`#lzFaK z>?UL$F7>39MzRGmdH=6>P71!r0e)Q@Si6@VP7x7ejng0AJ1#{VpToO8jI{AJFGhZQ z+?%~}QQm;K%tq~EnLm;7czu8%V*8v`PJCES`-o4j4LGBW2XyVa*(-f#Z@I^I|MkEJ za(;FKCZ;FYJk#y1mt(j%>lda1n-gNbog6z&MHhufewjBP}f-P}k!Fhkh(=Rxyn){DIsJfft z)}3&Ll0SM<0HK_!F|CQ|MSTDB?h`^+!8ppEUeQkV;?B+-{7~c<_V>xUN9E$w=v^x! z{TNs{p%a6FUoulR&pp3X-)OnIZ}9y%mS#7L6gSSvDL+{Fp;jQGCdbG>&KDAL(gagY z71bGs+pc{bPgyiS9`Zk}Av-#E?uU&ZtC-wMy|&UvHFlpn>(Xu@y#)fujmW2Yi*naVRb`oSFQ0cuYS&np5u+eTCSsY@M;Uuw_)`G|yzIprB%uQl+h_8hFDf z!-4(rLSTIhOUi^k*?p1T;d1@nF_ONAO|QJCqo|-0Fxj~CB^l!+_H&lACtCr!lbCEN z8W1y~hR_%N!N$o~GtqwkGKET&d)C4Wg9s;dsuc-{7xJHj;3+!V@4U@E*pY!Bz3jO; z(9d*@zu2GSV0k))bpEVDMQ&a+6PK8Qh%dB7l}a3o289S?z=!0x%b8^KeO44PWG0C9 zrb6FA2~T|wTdZFWpFT2HOZl+>A?|alc|SAv{25OBy{~cRnp_qxF6PHOCE4P$&Sl?5 z6jHCpoGocsUjcpkCVPKVYXLtD~xFvKuL?%!npXzHtK`emzoH0|;m%X{sUk;Pay{Lns*DQ!hH>`UWcdLmpq7MqIu=PzRt%YLF%ECmcZT?{ z@MWopc;oyPU$i{&WY65E3yMy~HgHD_YG<9K{g4pm;B`AWN?cV3gL!`Z_+h`?MW?8s z5eiggmp~RGc<@r#-S?~?;5SzhcD~ggxC7tyb2q2(QpG<*41|#sK@#yaT=TDYcmA9u z{JmpeU}mjN%ys?u;8?3$TTF~4UJk5I@y|4S7SsXQQ0S3IjQy_LfXhjb(hLe&SPP?4jH^MX^5ppQ|hTLAZ zYEiH6@sa(d4ht^euXY!!dC-U?L-bA>i;|BL3KqJiH|blvsJ8Vj0%jzly5d;8t~M>w zCEewq8jO(-D=~&dsp7thX~bqbuP&e48a) z+uRH++U%ce{ca;WZ|$h9U;tuF`6%Zyp2>|VF)2@Wq=6_UJ-n84*7>c?+v>hPALf4&!Uwdm651wi;pj(t6%F#278RpgFMs#exW4?PtKF9| zxk8T$#goRfZGoJg{Hr$H)-g8r9|#N{$SdA%)xp8RF*}~SCCg9|4G;9}Rl5Vpy+SdQ zUe8pN63Pn)>zcUY5+?p>TGe=oVGX8ze#kHL!m=VEdvh+e$3~!JjLOTlRQcSv8%jAW z7ytZD?9J_ITGlruT4ozjtb6KfKdsWLI|F?MmB^Sx`uawF=c``yrGEL$uCsU`DO~^F zso{1fv&0EeYI)pq{lfUwv)s2*-L>`w=@ji!+EIW5rP5W(99GXNDHD z*p*qTBKrpcVf{(h7Auv}S<9WhpA)Kd6O#dn64uyvJbK=OkU7D|| zDnJ!Xf|K-h0SBXMr6AfM0eqoY9Q(dPAP(_5WY9$TsWmhM_Cq4cG=^&H{_||=>Ef(^7a0R z4)LkssR86DI+L$y-LQDC37@)3K~*&>mmIFbaMA@3szGPVa5|BH$vh=^o2db%nyLA@ z>$1z)B6prr*h%7J=&atIz~Nlm3xX)bnVQi3TJhbt8i3^NutxZ4*1!XVyqlO9oJz6vd2%c)Zk4RRt|Wia&%VW7~s z&Li$D{7pW}pI=;3z=L%Eph^4GxDPlmX34n50rB)k92ebb@dT+bm{#lRqXM}sXKrHU zI7(^Z(;c=nOj7J9&G>$!py{sPRPn#h#S{(g-zwb@cTFeBhJY@(*~D`&0sCRc#qJgf zG-OG!%6HT5S5njridwu`tMs%Hb~0%g^@cIn@$bIffvext@gX1kz195w&2U-?YVi94 z-PX>GIy;y2Ce+ylt&GXqo*}woohHu3uT^+C@kqvVYd%rO+IY4)GB|47g=2F>GuAs% z{LJ+4;dA0b$X?UeOn6UQ;MQop0DgdEqwl_y2Lq1~PN4W{tY6|t2~way^JOlF2aSX) zdLvG$$0bbIFN+ifi~V# zdTb5L4*ec@zcCj?>6y{@)VH)Qm!+zq6Atb&5)BR!PBeKHDSmrrQMucP0P?$OzlT8# z#H^x(Ls|1OR1Bmb)ScGwRnjgN0WxGj6ctui1WQ$RjA*3eHSU=(9R|!skoC=EZW~H| z$V%In55@%h<-ur&a8WS?tW=SGQ}z@v$q=6!0#eHB-C!p?+D-PY*196zGZNKy2(19ULBsi5Y7-Q?eLo&7(so)P8?co6Kg+5~tnB zeIJ{%cWW^i<5JJ`Xo&lsfV8JibhDB=vv+vB+Af673d<*r-MS~kbv5w#8Boa#^QQam zRv2Q4Vm7-T!Go5(Paa>rcSFu}KVK~@E9-0pfK2MAM^fJVQxO-W_PgK%g7jaWy$Kg* z;Og? zjWCJ#JUX96#h~BcNcOY^N??!@8owPPAFf(%aZ$vv4tIGkcD@F4>$s_Qd9sWOqxXc7 zUzpDE?6^wpW1Ct;UA6vrs3?;1TNumx2?V6vwrZ<5Ky5y7szAi)HT7{>K(gutf`fu!;mn;2L=fS6PI$yy zkwjAy(<~uXXSUajlr>HLuD$*g{a;+@mx=J;O-wR`0ky^2Aoj(NfB%iN$vMh?!PT=# zzHZwlOH)@lf-Oy%+3X%3BxvPCX_P}uy(=|LTVdXxi5TNNUvmb4kwV9fu)9}?P6rDJ zk64}t565tfy;V1BijhPtpn81{^kHA^7yw2^Mnma&queJ1q;CQoTuc?eC6BK)p%_nE zSt=ah$au=zu@a`)keiuVp8U1TgW9uZlv3_*UMwz0&rUzVgP`C6P&lwsMfX+d&&*jv z934^6hSO7V6Dfd;xIm$#IG^uJ)=UT97V#b=m9ye9ibCfk*CJ_~#dVhxyc35Tl49gWV!N?PJb3Ob z?Xmvp{#p9KkoZQB7<~+Y(N;#rvp+-;ay@UwN>}f&`k*4pnN87MDR6{L6-hEtV%$L6 zak4=wm_@Q&vGcQ%iq!b3sWdbq48R%RgUDFuaUhQm-YyTN%W>h6B}C1O8G}QEy@SeT z%#Ocad3k=<(n}h!Yq`CBWPdo~cY~K!e+)Yhr;Q|h2M@q<&?;i+2SKix=_W@pYKy8R zyCG0rHthZ2LPj|i(KN+HBj)o5RM#pR9~;*{335jUx)2l5^TFi5voQ@kxH8$z2dg>o4jJxg(iJI`tA5| z4^&!hALeV8`NP@`#;iVhO)a$qAroZ?+P>uT6+G(o@hqPGZ~D%hH;c$4Zo>Jl9^FvM>4{`b%3U(rZ#Q| zt)MA1yEMC7TC?{IbZ^M!Ku(5G0E^#Zaf4;%;HGprHN0k%nwU6SGWAy$X#48=xY3=Q z{dg`a;Ps;Ua)Ro#tdDJtT6=qVShye%_7fkg`fQ#>Me$s(U0ash6}crsQJ==e6~CQu zmnElZBG7h3_(l~=uG#ilzy9oe>r?*=(g6EzYcoCi$2!`9@C%k+0BMz@A}dfHuWroO-2Uyq$2Ia*%pu~B$C znjxzx_U7qg;bD|JS}U(Bp}N3eZtbZMQZuvfbnE=cemLj&bJ=cCY@E-bJ}=eDalzT? zoJ@z?nHPAzq3SuXd(%z5$|&Jv!fB(+iPzS){dN~ub^6wA&;jRVvs!Q_f!VUl=pNi; zbe{1zjAQLuVW?fC6iEOE9v!aoChxQvY=_?p-#csY2d5(}(>)GL3+K5sm*3r6&{ajhg@z`M;e3PnV(Khe;R-{SG3cQt6eN--NNF9TvL;T#UD=FHg8}0w|Y{31MpS1 zPsmL?8b~pz8JTOU@2*7djkl+Ogb;VqT<9{ooR%r#>V`T4uCOS9<7pkx}G3{oc4Ypbdr;EdN24a zgiuO;p?sDtT(hXQy2n~DQSR$Ij4U98@w32I0NmmbB#oY%n`@4XxQvTSFm?D@pSUzQ zj9(&K_(c2(>#0+gDNBkS0M#~UqfW8ARkcD&>T!_RGIF3octM+hMcVe@OT$1{ zuN^Uun@vW>$yqo$vT^Wo6?d6HBfg1EO!V`5w061e5i`PFK$-tS0B+ge9PMc78bOYJRxwL=`P6BEG&o76vHg%7vmIM?ypeJF95huQTgZ= z*8UD%V68I*5?oRulRm=fPq#fTVPHTu13qgGA^Bm3aBIFyuq6?VaQCoKBBom4D%_$? zp;qX8B`+g*^4YCk$*KmEku(Y)Idmxf^o%dy@Q7$p}XEVqH z@6*k;HVqR~xAZt+tSueqO47ccLvs6JM-S&jyy3~jq zA#ney)$^t^9^wI;kdT0PY&;ga*n`r!t#jquQfjH9QLGlS_eoSyaJH}lv3@*@Z(3<9 zcmW+qJnyOt*c&pA7F^h7Tn^#1@g8JO46>#hD_R#5`xXMB*cx>t313q;{Sd`)mFxss zhTKjnx`qWHUlsjL zAU0bDgvTQ?-Xfc?SwLP3<^`X2>+u!1KT_f+OlP>-JGweOLl>73EgXKhkqZrxjI(2T zh{Vfz?K%qVAUozqySn?IB{w?xbd$h`M6H-(ZRGB?TA7vTmv*Km@gSibwMOT3 z@V9{|_Wy7Jva!II4<2eiEhzv$Xz+Ac6#Cq;JkY4Qj#s{x_(2d@%l~TUM$w<%KSwtN z1LOrgB}LW1i(b=~-BRj-RXoM-LU{Qg4>=Dtv>DsgUi8({Twf#D{Agl-U^|+Gk8yGO zp=BCS5WYa~eAkNceVw@#>xg=&f(#IQ#+bh5q`?rT>m!2$3}3=Qp9*|flLz=4AW~Ni zS*WN?e-keV>HPGWa`;Ow+C>cyWjL&;ke^i1XCRLS2`~V0;ky!Ti^mE;Qz7Du4cbhZ z=k#pD*h*0SN%)-kRiqxDt=V^_x8K!@Fm_Kuk_+uF_a(I~?Lt}g zwZCld|B+>0Ep%{&Txgk`FGy=qEE1}wjeZhF{@i=dbb41`;;M1)MzA}Yn9m8nE#Gigw~DhSap?vfH)}?Rdo>?|B@^+ zkW}7K4#mTM&B|{RJU;NQ@dqh_@Gn0Vz9uCZn+>6Pou5e*{wRS5IYmWuGt@6f^LyWK z^c|F$Z+!~;H>g6seXN%oXFb}M=2xFr!Nq05R#pI*ci|keIG)85aCD<1RWKoMgwzXwA8T^6)pZz~WR7^8TI=#5K=oX3L4Uf$c&uJ(`CiSV9 zJC+M;eOMc7J`vC2_g2(W3aGVw>WM3F4;VD*QXc0I$?g(vxtK{~e`tT2Sp@i~#fo}r z9|`@G5NfrS4g3HXHFOREVj(%@dmMG$)}IdA+k@BxyzbfNF{%F%ZDC*)-Gcp1>kS2e z8zITVqKMmiqnZ7YGlyWFl4cze0>WlclAic}G;zbu7|-d@Fq09uM>5%WdK%;>OUQ1p z^f?TpHzFjH(;VyiWYIF|(DKK?z=ude0g{l(UrXF*|DBNdYiko2yR zOU||1GJy;>atCkkhnZ4|e`iD-cP5~|1jq!3%hgCg&LkCotgofHeCYUp)}NaFS$lG_ z1`Q4h5ueAD!(wHQ1i5wsmE?zA|96{x>-B60R%j;7uRx&M+S<94R3rT9*?N6}&%r^4 z57*WpKR_$!HJe5lzwEJ^X+1$=Bp@G^F>gamr7K-VNr6z)D_g%3%!9XV&1%~4?hUTY z?SJRoU!W9vZ3!?Ap2tsox?4730g&VOS`1LYw)doMa?PK^cF7Ov>7IGT`+-3wl@|d3 z!D>{d8JOt0y3Urh1OmYc}wSg}DEtEFk99$qOa)bAXoXaIaiGLDGE z$;^UQg%&q1n98`TNAmV}4m!gkuv;e^8?~{43FxD1<7u!|X%$h(f0QNEDhy!Y9TznH zKp~th?=G!hg&~bX1oDQ4t-3`35i`xwS1S|M(BLF_=*Rvba~M@-Z=cL-N^8@y_i>mX z02kiA<+0nzZpOsG@SFNdT)`hRiVi}yYhd^;fxhIhc=U?j2p*t4#{iPvC`X69Xm-iZ zZfYV3AQLQ7$u=w3+np~~58MF)*xzHH{xJWt4YK0twi_#PI$AHSsHPW8+72O+6p3d5 ztWY4N9dcy2Dz9~R&9*Pk$+FQT>-6M67zmgFZf7okr<;9UI7toOkMoX`43>;D zcrW=yhU!BVJg|Ke2zFbRpE}bS*onvnDPoY*;waFX(3oIm!^+(M)kekU={;;85Sg@} zWZchs?W7sBpir&B8uAOkNMHil7+*< zhbFQ;{?mnpcsYS!u|$Lc7P1tXQeqU$+H8VW5|13rxIrgFVtJ~EzwHXW_b;Cb2nJK8 zNZes6?wI~0G-T1!X^%H;`m3#ltwvqwg1WzALb;i8D23uo|NFsZ<1TqbveWa-!pZn8 zRMlof#?@gt|9@h8O9kGyYh=uplMPm_`WH?LiJ_4Nc`cOxpLQ@OpHlqOl-K)$|8Fk7 zmJ$nkUY~1|vYSJEdEJtdUX%Z)Ll$L}fS(KR+`e9IV#33$czG3hq51C58v!G7%p z``^x0^w2i78%}EKJ;fmJkQn1tU?YH&7XQLb)}O{h;Moy< z=A*=~O2`Lps>lyr0n+)xINCPb4-^n@I1Inpr>ig0^`5^_Pke$M5yTQ#RcZ6OIRQX< z>t;8U8GO;E%|{?%s#>dCg$}AAh>{o=`D+hTitpBUg7@P4HhxZQYE;{&O+G>qBy;Tk z8U+iX=<2WL~2a`}x8&D5II4+vRx*c($cTlxLf#m$|6i?Sb@eCjya zTEF7ANnQ2Dal54Z$i7n7?!=m-#!kh0I83>KVX)SGQ{3SAQj&&|K?JBM#oxT>*!><@ z;V?>7vf754rhN0-U6AxLG{$3Begd5yEA0g^=Y!)*81ubo$b(n zKa38DQwpg^-%Hv}xcKMvo!`scHV*bnMEUYNaXj6ZLxc+^7j2Z&>H+Bd=vW=tR1U3B z2rZsTGj9br8c<>blCP`qteCnOsd-99Y)QJ3vK12C%giRh1+5wHzzsyHE!+0H6fAdL!vN<)sw6 zG?`z$Lja;(`lt&`M~yv&Hhtzjz`G<``N--$6SP++o2SHH%JXUesf^Zvxr?d2u;-(w zA&{kK`h1GjtxEi--pQvI$$$Kg|YF zfq8fHI0P#0yupQr7(^xjxV7tj+s|4~)?P6XcX@F!trh1@-YMjE9kxxaygi;8iN{)9 z={)Nr^D6dpq1{aZQggR@v5=T4n-q{kQT~FpXL)!Iu;$3!4fJmTrV|N4p+QoF!cta0~c^q$LAdxXsO1dm2+(UAsnpfZXHE67; zsTxK1QO4;(<2aT1^|ObVTnbidyy6*~uBE+r3}Ev(uE*ilob8LL!SsS`V(mFqJ3-v^XYN*2x+Pq>!8AanzMi|w|Dgozyi~mXsmuc zIZFxzPV82ikQ&HEE_qySL0vNO%k57^R}UbvcjP3-Ausx_`H(7Y78y-|=NBeKkc@_Q z*FQ)Lgnb2w*RKL$A4eT6w8=98W%~LxX|WG`EoR8#qzrg-l9a8JX!3HZH&e?)3Q(Ba zs_c3HZnp)&>hRkr-`JLoq_ZYM##6Z4CNTZ}i6(;>+lS^Sk zLfMBGH{sS~PfCZ&k|jUVUgvY~q}7izcBeGFAD3Fx#I2RSj$hT)zJHr*$=A1X`mC;x z{cjY+2*4+ zu2uDj%;hGd^Ibz4T88cTjOAN-j@d!_2~SM zKPJ6bJ?<4_vf3GVQoQY*Rs-ghb)VAy^uk96J^Qo28(z8Mfv>?oL%LC2biP>6`v%u*^R+8G@=OX zdB>fjsM|FzoD2jpSC@L~HaEHVLBd*eXqHs*pXcNI$lh~Sh>c7C^BkG))@M6wP1yA0 zQ@LF@^P{a(UgMX2vOIHoDZk_?Z5bl?uideo)V~Q}Vk#nSoFljU!y#qMXYsE@_6Ac* zevp(D($mw6$cX<>7Ess%S~7@YAHShc=EG zI<~U~EWG1bj5o}`Fy$z7`wV1)c1*s12@exskZ@^S@J}R1I6%S*g2^5z_RJoWc^i%q z)YRtp_@B?|%iQXIxDJEOLIM7mrzZSeMG!}n>R)zRsO#AHNy3|B*$LaGVI48lX!y<0 z^~vhV*#>z4nFt0*@p}i5`T`*Mck%KNA=}T2aUjiLdPha3>}YWectMPBIAVoUQlF+R z3KOINBy=Q=vpngq+!qQyQiH`KU%?0n2*~&SDtu?$=LSxO9m#q4ih^&EaJQ#GgUfuE zOeVQ)LOSU!N*n`n`~?u@f!Y)3s!&ym2KTk75b#=8q5mxVd!BV_Wa1qo4Gfqddf`$f zA)HaXr#Si)VD3nF7|x=2;a5|#dw94gz$bCCk;hJ{|Cmwsb;Pa^Z$ zMNWsfkgGge-*#%|K1Az zmq~;UKWk4UTEDW89mGQ^DQswH7?JU(E=iT3Mx9fkH`WFA zR0zKHAb%w=0SQ(}35H_ren-d;fx#9QyG3@OlaK)hGgaA`emZ$@#p!yS&S4C7LfJ04 z1E7`+ip^QrXWW{F_0wR_wiU2r3&CwE^3PBz9TM`jHcm`(TB;|g5L!C7KL52v&?}R* zZdMll@r3V52vcuvbQI~HX}FNwHgtm$G-?ltg`Jki24WNs{9*RAzB!63mAeRKTrawcGm;;L@>`!-r)_$>o?Gm z`Kfw9-ONCkPKF=p7+dCN)EmqRCIx?dMT?Q+jX)9~lu%d&^RM=WQ=$6jP8tctA~sPM z#@?}Xn@yhp-Tx{D6}^>|kR7RSdLp32e<&DDno7Gbnj@)uJfZa#&eN4#vhEpwk)cJ(2q} zyzg3)9jUMT!y38m+faDF6!uQr^D|3!{HXQ-d#Q!UB6z6an~L6sCKG+{dkoWxL{}$Q zIf^MjS2vP~g$YJv2@}8@aI0zlnac)(cDMVQ3jAk~-(`DQBIW9eMc49=33R5Xkr1D` zoqfXf;m#3BSvQJfE*I}Q*C9sxihp(}C=mHVdHpz3>$i$Dr|MP%y={tON1Fo~*UxTr zXkUf#6_U5T0*`{0y?^|Z^++GqPR>Kq1FfBVB!Q0<%s6qSJP<>kf9s>%{M3j!PE^*F zCIZJyE*v#s=<$12s*s(FzkeI+@5oXk{;kV*Wwx<;YDAiEFA)xD**6}D9!#>>BoWb) z@Xt2)v;bIT!s3>eFta92@rZZ+k5Rt(r$|J!?3}Bax(w^h=~^vLH7LFJeROxJCI-%# zByrCpV-$p3;wFbDIo@eN)u3waZz%h%P^5^M{&kE~=VQ-0i&-&vo=4X@Kn>;-&TGm6 z41>&T?Nu(_c(gwOT8;CsRuf@mP(I+m{uEFMd+;!iT`RD=OAY{i!hwxsQOHgrrg{Kz z5ZQ2fj0;1>4KT zED>O{(7lO7Q8qG39%9*Yo!`@H@y$lu3JxxIxJ70WN3j3no)jJbBf}zi1D6Ir+`AVi z$|Xq^lm#!%EGd^Jr6XX3P?lCi;A&|)$OgYK{=TXzenUT4){AcD#HnlT;IY!E_*!M; z2I{}q2>(iH>YL{#JXnXUd+OAW7ciufu}Sj0IltKNQjw_Y-);S{0zf8esTIX@p*1WN zW7ASJGd$&E#V<{k7FFTbet-TWXdvH!o~ORiu-RGToQ^j3-7x%;yk(G&Sv|iz#YCVH zy9k&-#Q&)sb?vy#^bS^7^>4sz4E*OqiyoSveVAfrcvcW^0*pcBmFZNfj`a1_1>Eue zP)q@|^WzO_+CSnPQioqTVS24})avMT_AX0=!odmZx?`LFy2xztpkjaY2h`AW;a}y= zh_?;xp$2c_y`f!Xe#7}3tqLoP0YAk@bpV0l+_9cmH61r1qD#IiUEig~i5xY^PSx~b zo>2axX}m!ce|?2%rxbqH3miK$b-}H^n;&hjPiNiMa-LwpxS0`uqSe2fQz<>`c(jN0 zk$q{W$@$Hy%eyu^vN+psH8`w+LCr59{vFg?@Rq&J8i)Q8O8SRl{!_m?L($Z|dN$*+`T78^&jNv_{22ly-VY>+JGPuOyzlb22Grt-^-@{DpsKR zS*pzekANVA0dL!D0&qLOCM1ya@DNhP7m1BY0;@EYvh47Xq3}Zm{v13PM6KiHy48z@f$kt#cI3FtMCu=5RP)LYz zUnKr5kX&kQf&aA8O-j~ix!>ji%6TX`hZvww0YU%>z3O4^n-D!w0|N{n?REr!uPnfz z9d6tHR5jsv$ZOZLeM4a$QeirY7{iAMXlC|U#}*rSV`GDC*rE8Tr@!CxqVdmu2er?` zmKhEnt`LscX9-bYzl%my>T^)g_qw{5cRSVs&M?fc%B-q<-|sfFd3m@1J$e&OOmxuSx( z6dzXGDk{7S#?x=mt2Q^rM&!6yhcoZI$_^U0(=V3By&;)*2Rf^ctK*Lg>X}VB!?2)l zc!6kOy@!R_#Mb1eNK{bAfQQA_5Fq)t@dYyT6L}!ePjuBsYYo~2Jq#oe2u__g;XHxK zo1BSj|CGq5gWr9ehjCz`)-s+lhVT9Znt(x;*PcFq601BHITPP@sLp+DIh7i_M@7>qtnepjQ1tvw{#Z7>gIve=cJkI?ly?aX_fDS z+AJ%s#x~-#wer zgBh-1D#>3fD~aP?=bM^tJ>R)DzIk7)OEbzjIy$;T%t0WYxBjG{4jQ{rRe=ExrpFka z`%*f`N!w$oIPkQ--juh`(E?jhaq;l9Kr^HI(`l;LHEY&T_|~vPhd$Up^}~ z&8D4|^kK>j@%?cW2bcwN6Hhw6({{N9zJ3Zhk4tK!Kk<0b&bnzm&TKv&x_LV2zq@-; z|9e7$WGtrquAFkvSpcHR{}|RjT=2A)<#^I9|NB5)C&hd+pIY+ijx}qn)pa!m(saGk zcvi<#ZL{3ubxbP2H|2{B5){L@g#ksvsz0uIazRS*Om6tDN0Q$epRc#yHG^;DedF>+ z)8Z-FYHRPR>vfYU=S{au4y(u8+;?5u3C|l=n+|`aL+VhgAuve!P5D%|p8fhJdvU#* zZC0ADX&0*=Lcjy$%F5blLH(_iH><9;aleP?7{|34y(G|hz`bw7UtesGkAo3V<0x0# zz*Syr-K2vxdy}jmN0M7^Hl)wvEz3w8T0x+MHH3C^KxIU3E`O+|u)6BqJfu{AEXdEN zDpo6%iHjuV;Gbsmy|vI-ol72-O$*^YJ~x$iJXv<#YF=&2eyHBx-!JjGFB-|X(cz1y zmOtj7{rNN58PYuEwiUiL?>x(4HMx@?MOf|g*rang=9>Fszj3u(I!{SUi+&FQ^Z_2g zhjO|iQ&_9L=1DU%>Mgdyot&IZwnsEI8y$MT+}jYbQdwJsv9IefhO(f-|f$C z6GF})=fAOI3K|=^Ag5>Thts% z0ZDy0ZsY;DM}!~j+McGFc8+;`foDO!0($>(aHDtp%JVpD+nDt6pyYnF z;=HIpZA-nq#b@9K7NqcOYgbYHhj82_?yky?-e9!mEYx|_hlJRLR{>a~g~I*~q_ zqeDNKkh{tXX185Q2cWp;W(;*jcmYbO_%Z2-O;UUpsO%ie@G?HJ2n_18BuGqY)b zyk4^JCpHIYK4YnM6H80!Wo2cU#MpoO69>M*xNdiUA9$Z(T1d`I=>Hjn-ar1G<64mX z8gxJ)T+#mz&w`q@u1?pt1R%dyazJOkm9TTL-Tb*!RL1FzF8gjJm8VpE`vM%NSikF z|EKc@Sw$S4rr@f#;n@#!_k2)kM!x(AI7tvl5CQYwx#+E#88)@t$gtjZ)kqo#le4q4 z>0Y%8t?6=;bK}JrkK@gJdy@0-{n4*IB4-Op1xOPl7dcwB$s}?W!CLM>~7Ucf; zLF>BWZZ`k$M~kEs>)y0_9#%?F$s~VKDtd3#zaB!WSLOh{^|#jv*1@YiVc5#F2}9Gm z<;KviL9KM!Yw9??6-a=80*1Fb)MOs=S8OgNRR}&Y0#9zKsi}xwy1@9TQZ@VB4@BOyoH7j_Z7YVptUm+9Hx04h;;9Mqwt!?da&p z{d(SPa$+J@+oti2uC6ZEeqqkg%paqQqyp3uI?4T_f{&d62&PQg04Hr$-`AVO{deq= z&%@EYS(f+V04lWCK!xem;E0zDLuJj!sY*pE*Ewx%{L~pvN>s9`U&qGApp4GeIs|A_ zkJ%G^AHZxLDiCd^r>9dmZ1rYJwUb^DvLoL>|89VRSd;78Akxs+*GDNSA@Ohah~HQJ zS4olVIF{^0NZi)^h0u9ThrXr*OYlhYN4w_QgphoIEd}CV9S1X|i}~ZFtEk{V9j+k~ z-zJFIdM|u~gI*&RxqRmf#0N%d(f^>3(?~{1>$IjOdf12I4e(8hu?+m#)~}QO!;*owtnlv9m`4fIBGX7tr>=GFTtTQ=lHj5U6$h{OO!s@|=sOUuk!> zC(hIzkMCRDKTczV{K(yaTWgo-HnZQX`ug5H$fmKIo^AA+o15=#(gI%WYjE&=jrIP+ z8QqJIH$c7+il?$xZyE`#Df>A8!(j!mJ16KqHKhVXWNu>O48F|r;vz{|=V@eh1Q0WK z>o=&&bC~R@w8DazVe2v{%v^x1ZQ$VMc{>t`8<}Jk@VzU! zZEar7B~ViyO=W{x@g%@Auk(SLpTT>ApRC~HcF5C`FXXXX6IflIlo_R1{nEEvO=i;W z*<6~7u_czINt7un+C#rnO>X*r_Y@7ahFqHrz;JR)HOeEp7li;Qu1- zO`w{*x3|$)T4}4m>2Vg2T2Y(;6#<#69*c;8f{2V!5s)zoLJT2^){3nn2nfg+lu5=Q z2pEP0r7{PUc}zqIVU7?8WFp^w)1LdCb?^6I_pa~W|GKVr1xVia{f+y#_wzh^huB`O zA+5}ON-mf?<2xBe4>DO^oh;`>vh;WNnkFB;5Ii0+d5UR3*&pls4GDVn9L^pH0xSkB zn;hcf0w))22hN--{|zts*kM0rMm|&IIGk9~mfP&iQST;_zd`NICt?Pm<6vZY6m^s&9|+Cq(?X>ewG?DQ>y2gMaIRsVT4sr!a_FQ($Sl% z2Sbh+ykb|IirpB}<=ekfcNaF@S9)4PD-{#uP!Yc%(<*$Ot0UmaTjDASmwOeiz2(OA zj1AMLw|5-5fZSdL_pLO#sanfI}{@jlG8udvD@hcZ69DL7APK<{6+Xpg# z4NuXnFr9U6%GoiLqIS@iA>^C=_S=Evs)agsA=QguzPeib${@tYpZUt%J^pAgyNO|f zX{n-RG`cFs)a`jH2#3w`U2+ISS{cece3L57+hj7(DE#aDMvR?5-KXMK~1D0dv!;lH&-P7oLv;=WnsBG z@|NM)SuRNpGqP-oawyNre|j*GvjH2|AD2g{N0m5d^K2A8)Va%TUJBP&);8i-N}EIU;9eHGg0nrSXCa* zdpLIIJKcS|aoJ_u-L;+5YcB#uNcvIsj85UV!-i+FjH`2X3R9b!s=7QVHwVdVeOh*7 zKTo-1z_D4geNl4fXCx5(^d0QeiH~#cp=Q0zIOFP9yXa2C@!J&aalLNtM@paXx36hk z^exa@h?xw=)m00P2QN0qSvr;LgqUTo{|crp>BY+wZM(nB#GxD7i7sOzo2Au5HD1n^ z)WtvIRg7Qlp`_W7^L`TKu=G7n1vxlXotYG}EOWZ-*#)>ITuXpL?!Jd%m{XRkoPL_u zimDkk1q(*6vM*~3%!_8q)1w#SIy$;}N-trti$na)SJ~0y)j^c{>VN=3WTI0txzML& zVZ6(6k(1=IL$cMIKF~ zTH5=t3E&m%LB`sFbePfzn`Cl^aKcRw`*dLxc6qQBJ~G8N_I{^NDR(7l^8Bd zmH8Z+6>YES>e$({JXaljY9Hxv#eNGlIT%HmPgygNrG*>SYTA@v&f@p?6uDHDX!aKQ zSrY7{lkzwrzx!(M_IGCRr(4LaT1T=j_Q|6TZ47~MFWrVaP}b=7SZ>`2jBWqW`R4ja zTPH)&7XGZh9`!~MB?kggw(=%eQ`_z0#G+OE#Pj-L?yY&GfQaz@$axih2Fz-0h*iEN zt%MZq8oqPU`NI=2U6Ow!_ZN7~IYpV_^r)yGt9o#Ooqm%&&HM6Q(XiGx4R$f5Rb zL0n>qUT*eNirS^IU#S-UhgXR87j|<~$zj3LpGNaq9N+`UP1e3FKh4yoG}0WXIB6thKo?W}iL-~zpZuHO_Jwd-t)Kg0HB|R&u@EopJ zZ+dF6A>;z$X~ge_2p!I}Phq^Pz#s(ZGJ%9L2$<_A{jRj+|0tuHyW+dw?neRiP{Ma#% zn5i|({rX$P0wZ(3R<5fc)kQR#&ns)8Avn)?SAu4!8w6LCkbQ2W=k+}x!^lB z=N{A%*GH+5H`o{-hOgW^-4RsVoA6?935zK5pw#f2Rk1_S&X}6uTG#}|ga)n9rbsRD z)voA`Ss9JDr6z;ds!=sp>3b%t<4Gg{87jeD=W)Z+ZVBPx;ekW24xFiDFR+|^DgV8C z)20O1q>2<#y_k(>CU#mMGu2R|AF5ypr{~JeL`_i(3-`_0PYBD6hqVp&vV`OM3xAGA zv31BRmxu(O6#}OP);DR}#JGqud;_Oi&@uP;PEQh4f^XAAg&4&=8bAr{#Bna)O1D+;4rlGa&qQ}x8)<_7?vWa; z@70!4y}CqcS0b&{`3=0z^^<%BBdE_>$q!r3Q)7RqQ*3W1h4`B;CTw8~odYa$FEsDw z;%$%#Gg$es#X}+t#sR80Q!d&esFeyD^(;dh9;=bHiEQ6~LX?RN^cgBeC)`uSo!_iw z9P;y$%aTOes_P*6Q5rnku7g{6TFuec8p>uwNvHF~pOVOXPDLX_7AAOvZmiO(yxk~W z2afsSiETvQIHM&uCoKsoq3vv+nVx)Rj0y)(^ZSA*8&5@_bh~xQE#z|(Rn%s* z)}VFlWvxS-)I3q9w5!2sPG$Q6z2mO>F^krfQv>)j2E!CiYidHy#lopx z@UtT}LtC+cie%GhG_=l=Uck_^xC0KJvjb(r4WHjX5}9;jAXYT^bVsh4z=AE^fQ+Uk zJ=kOJjda;S*mp`$D`KXq=jILY4~!XUhxxV{iXH=m$r>ML4aIG+G1VLt)r3TuEH{rH zxQJD=C~0X;#Ca}F&FQrl5JQuvFBV){ebC#I;E|B1BOinZSj4yXE(p$+G0-quumh-n22}=~7|mV=0OPAs}j2$&}T>Eu|r|1IXZ^g$eEKMIE$B zW7XHFmuKaiI-ED2QZ$+=UZY8w&Gkngzib2BI`G4Bd3L1H+Eo=u5L#PwVL!WsLef;L zUU>ma#$riu{B<&m%m4y z^L`j>V@hQ;4bJqJ^70&Ne14WIa4g;9;D%%KOp}jzoN0q#Z_QFE0L#d?h7#7^2N+;- zYU&Igk9Tr*?t~z#r>94}81B6GC_qyuOFf6f|2imc?1qEF(m%MnHhyuACYrl9aI-=~ zZq|LK?^WWY;2?4ae8^ez4N;B|f;Nz&gPnmXN?>Or!B@KNl4u(Qe!7XrZhpR#R@0mC zc2Ni7`H~0)eJ|dwtlZhx_iTK8+`moJt@>EL1Ep=gL5-ZK`&J{&|`ijU!aWC@_ z#Nkp+=ukLEHdr6q*`N}1*2mYkVzQ#BNNcnqiWOi6&zr**TBI$@I{3>yVmnm! z@o0%x2px@tafEvx$RQI$v#nEw)x;>nsh1I|M&<3kRh5;k%PtC^YRqy(N(G@Jm5V)Ssxpe7t$eRIJr3EJFwgF8qAYto*2pC;SM7ZK9dbp++dG~syPF8h!wKc(YEc%slCK}PrIQ`>HQ>h0=!il3wA9K4GrMZ(7sNVM)I7rD>5n+WRj=z$vX z7=-;TVgawkwVekj<51{yAvhMD#gVc}io1I5E;?oiEMqQ((hiSmc5LSj1^2o-mizS= zFUcU9IL}(k(29wfnbybp%x3@*JSA+y017+zW;7B3qS)0?O&Rc*+dyr_a8A$>>`TdH z@f<9y=6~|bUcVm8P7Y{>0k~L%{~A7c=e+v|^}l-U+IZ?!hVS0w7kkTP z5aQ*dhyOyl{$IhhcS?M?6EpL=DAcZ#2p-|+AK)|hAHT-^8$XtX2nF?zRXZi2GtcT( zFMap#K()ZfHxD1C0FVyCXZ zl;p`Kc)}G-qN*xi_RF9{Crja&+upk@{*>m!&$z!9!ye!(md9dkJbMZpjSl|nK-?Li zxY&x@WGH9IW`KDSYc*0J+hBX|ffaNHd!h$hm^oB&5Ozfg(CPmNSpo2I+p*Dz2sJa} zF`voq`p3$=RBo8pzZzs)CH3PS#MB@CtbDuroZfn*RY0YzkthCvl9@oam;auNBYt;T z*;dI5kI>?uAb2oQan@Rwd$x4D}9Hk#o7XLba0btl~kvQ?>MLWCHq@*ceB>A^#McI3FyX|+mZ2I@kIJjMTd&$kt z@g42DN4uhKz$VM+g<;Rm&IW_%iOkA4!-RAb;Hdi<mEWf%rT0ey6*2qloQ%Co@^7hH;Ngap`+wXX-6r$;-^p*G8wyq{e=p7*;d@wiID1!+F#GVlVbLrY8Vc z{&URh_{zYRdN%dSXvx8V!6(6~g^sNLB=y9VvxGhNy!i02+zGhaN_{Ok1HAE6Ch|Lvos&hqIm3zZ;Z2`Tu zK#Uc=aN4g0ttGMF;peE6Npw1sDwxt)W>;9*u+_#7Hout~IAZ@T>W=(N@Nl$kUi&vX zr>$^zJ|H+(l}=7pvzw%Cd65i{=?$pMuMvc**frlMDd^*8Pz@mIB87sTJhPRQK<6W2#8`MEf+G4nU%!81}dGM z7{*IvDTt1NOJR*%Pq|pG&(150dfa#0p#Zmcy2{Di&lmz88Q|w2U0pPpJmdXmz3;x@ zaobYZAmN$dh+LQgOz>0LQ$t?M>aiKim`6LRwUqoqvwMAaU|b#I zU#&s?vJ2S!vgUU>QAU z^{m~%H__++wgwHk;XyLc`1;73eu+=7^Mrn1F_-#^vwq4Dg_6DV`Q=TW&T|)*^Jmo_ z5Kn$5ntGI{ayXW1GRFW2uA zT?-7B{Qelgtv_VVn4IlYYTFS!$a;l+$Tqbyc*3v3b+YOnp@Cb=hh~ zZ|<^c%&JO_ktpZH7q)MCoR~(@JhrdYw;{gJ2KGx4kaw!CCmlDPdc{}+4At4Zq89qB za3PGaBuD++FW;HgkuLOxrU>koTavS95`0*_fY{`Dnr{I^-*<(|gAL{DT*?_{K4J>B2TZdXVY9e0qDnPvGYjfx%6&c&;64 zo<31eJmUQ>a{oHi<*o%DAW1NI|3C&0UY}fX?Jxpm;0%OPiHF^P0TL`$-P^~fxzolh zwLy(!Y-1)_yrC%ba5LJ9zb4vcpKW?~e_iQxQ5F9-aaAlZ`272>lH2p2hr)Oa$EuLo z8&6??zIpSx#4@PGN`KrEEs0Wf{T@|o{d~qU6bslwN^p;3q8W(@+&;MhT<)MAN3W&r z09hCFjQGX(f>~4JSB9!ik#_I+Y6{k+p&48dUmO zLnFhGTM!hi|GEDwItVJpGGndJoZl!>6qTz$JYWED9|TpGiUNTMjLb=Mio?=J{c-be zMeJh9a+|z15fj6S|3G68>5qTLN>5oE&piv{Jj7(z)M%0gV-2NWem@!X=W)?^U4lyr zL}uz1c)T-nKHiK0VRQ1yK3_AQx+a}295e-$9u8E3EQe#TfIzID=cE7 z2va(Vri5Q;p_6RtB;SZP&`VDBBIEXuLfe!VyfAqDT-c`(@oa+`jHKjOPz%90yt zxIJj>W5ZYx%Or-!3b}%SZVDW_JnC}J#rRqZNLJv)Urw*1X*NLMADfhPW%$@u)E#xD z)w#RIf*_EhA2t`)t zvRjx1F_6)15d(f=^>~5)HISNt%%!!8wY)kM+<*yH6;0(6pPYnIq#PS zh;C3xRxY9!_4+EBu6#(DpX$xdF4yy-PYxlC@E)k9o|P(~?ljxR-|}xuF~}_{vd+D* z-PR0I44B|U;tx97MuG=6@xFOei;i#4OjmdJ(ruzptLhe=`TC}N4+Wj@h$)D?U~jUF zznOahs_O??h8h_e@odPe7l^B!<3@obw3a7LrafbjS+s|^6)Q+)^3dD4%>0pJaI#uK2^ zL|>sU-)1D4XdG}TIt>fe$G1X3^6dI5Wj$JVjevsoq7l(aC zkIYt{tAzadgMmobYdpOM+d`#~{CD8TM%0`7F^2kug_;JVV+ovgW?0BLgDkD~WeL(A zE#%UrgDREWG(p=YR%?W7NRvKILKg7#>Cs!%s!5RsGwEW{7E^Lj(L%x2HK?t#4|Up( zxi_*35Z>XS)9aTiOR{)=SCsLQPt)aJhl9k-8-ua2w6si0PVVgJh*6V#cJRoB)wb&R ze^Hv{8Ml9NrUrWSr;StuvYSg5WkFKLc}9=YwH*bBrebNTJ5kSn;EB+&CNy}tE#RL0 z##5lDfPWcQj%gza>e%7n-X~-hmXnH&&sRa-*c#Wod8P2utDlt2#9v@5KG+eu7etTy z5e?7!j+^E?;z9a{H%|cn?8i9vHlj0vcX(gF-Z(@JlD{>KKn@M6*r%m%qRVckR|oJx z&X97zo1KW(1Mr>-qkKwfsSZe%&;ix+^|yk9905tJQRUaDI}gwG07wBc93!*U z`6%8*MpQPHic3zX08$!dD!fiy%ur*e;petR{u6dt9btJWwU<7%s8Yh+VKDpKD9=ov z)#qMyK&$E~Mq0{Sc>9QzEVn$Qt5Gx7CtiIk&s&l%$5pRhX5aELm9O{Ot*N_`qKShXvGuCDfGr3OIAW~ro0BM^+f=f_9r zr(BnL#*8UG6o8Icb+R<4eeC5)rN*72x#$g>Ra5bE3+u0=?wDQd*#)qi+t9FVY#mpUFS{Iei+i8LJVQ^B>qqK*isL;XmN&$XMqDaN}1pu#OpyOHA##B;RG zRz`sE;5_ZLwgJ@WVv$S#Xc>OC6ccG0as}kQr7c=IK}=_@Mod6enJ5fSZ!Pg7&WV~A zdlC6=GnuyZYb)3`@K&0DU3pXGA8cg>n`z+_cg_Zk9c*4QXn7On&E!z$wuLXoPOQw2 z>fre^XP+I~31=vx!yAGqv=p2bK-0CdY$tKOn@&Yr#P0Fvb;UB^(^Y2Lac8{!{TYDf zBABM%(3_ik*$`ITW4FYQ7a7ep{?P!Ckt0B@ie{hRo0OAH-4o_|A3uJac<9Pi0CmaB zj-BIHRB(QH$TCwmn0ar`KEPVJh$zZU=do%G6Rbqf-+vY!(lm#k=_kypErZFjPt+AD z?PP+WwGz#(kggGYk_xVy@|vPJz?`&vr;!>HB_3|j0W-Z*tdBzNZ%_Y<{>r^!91y|D zAbqA|siy~=uht-7g)@jH8HxkC@odV9SUbeT0ARxss02C`)NTTf-S)GI;JRN1j>T~$ zCShzHdezBML;&N?VQ^B(>M~n27E6-qBeX?P&1yE-_%V4Y&Vxn}cntUYN$%Z@Y3=h! zC~$cNmKx4MGIn(d1GJsAUf*LD!&jQ>T$k}$VE;`t`p|fOD6Ie!)%8%_8;*2S$|0iXH9OSoq0`vo z;)$vJj*rYV1i>XvQ%bK2N=l;2ZjOc{1Rj{F)1Xf)68EqPSrcZRKkKC4=G%!%oyB<|ss(kJf!i53tRm{5UY7hy-2R|PI zR7kl9P>kA_N8A%!7an7zUNi{#SP<%n%#6DXec_yYt<1gF+eX^EoN&Y@LqUT_KrfpVd?OD1#ZWu&CXxF1D)gR zii#XiNdk+2VCYfA`TQS>Hlr@z8Z61gf`Iwt6lYa5$M}X*V?d`((*mD1;w>D9Z5zG_5K^5Cg zVn6k=y!Z+nM7I0VFUxkJzddaKgIPM(`qHgidu$SumPudgj4BU;H+zPTolHIIZA)qK zHgAq}vR)6+>PuM~gXDdr7Q`zMD%N6Jeo-~DB@iTvsKPP{W z9DubiJGr%#+}wSz-|8GK=|0Fo1ZgdH8&A=aG> zaU2j#6X8ULMT{$USQl1V-Nkb@V9!ghHN_b7``rH%Bn61r7<8*3HZ>0~g#Z;Kd*9Cd zDmz*KTeZ;ep#SpznSV#0{!}2BY`vG)qKb8{b0@->(*sFUs+Rz)o^Y25qRXhc)CLGV zBi19~od~ujyn#J3&un0D z(7fcYJD%RPV`b@eN`*>tF!Ev4$)VR7uU;K~pb~f*H2R`$Vhc~Sx^fAaBHn;i;*s5= zxhn3tGsuFzbKV=opkQMX?5quTgPyt((Q`|ddcmgT_wr-+STzIuT#-0Z0hlQqS#!8q zYXkOEu*laI#+s;0JXiGBqo5KTeXb~PF7G^C!???$IxUQ{Xf=A-v<<+#HdT2sot?2Do=(TqJ$~Dor0e@HAX|^>>UscS zDc6<(enP2N`wpfmvSohWqUeSI6I0Lbaex+VAl zfucTbIIuYgoQ|>LIz_k)zcTV52tN6EM#g}qf3L80rL4SsyqCTj43d&QOdk*+vB*}G zR}1@c=e-vrDehXs?za#moxxzZcY5J$K)@%1FST;=>qRmVHzXuf-2n0h3@72?{S!Oo zfK*aN7=Fku=*3LLt3$}-5@{-&*!bwZYLVJ?18#HN0eO{DWIR%Xd+zkcx3Cc+nF>}x zzF_{ZK<}4F$FY-EF>taE-KbN52yf}mnxQKXRO9cj+md~0h&I%ks3S5Vb?4bjB6WeU zl_6>{=k(qsK7TwC+*DYdmlFS;s?yF{ZHv&*&_EtTpYw-C+SWsh$pD`rmW1{JGu4#~ z%1G^!(-4^+Szk9Q7eLLxFF zE97=t--s?|Tvc}+I;6U4l{dOLt91qG;u+B(#Aus3Q`_I;O$5E)&qpx3= zQgkD)zj6@f=$~|w+8h^Bb`QU zZEOEHERQNSzaVB6$Z2w10WQdT@D=Kl&A)Ol#M#nP!NE}Z;eG#TtA*elNruVA-BORG0FMd{$(2M zGwh2}z&g$(tcAu6bykVbWF>V?0o~V^VQc`f=)-~X3>)O~G!1Y%(_fU&PIMwYD9AsFcL8NH=jW8~hUIJB;|1)iG23hKF4;c12S-7(eo zbXrf_lJI;F$J+QuO!CcJdwL`K>vYzlwyNF&3hK~7Xn?pOT%I?)w475|f$!^e>tDRI zisyAydk*|Sy)kvga1}zhvp}KMKJlNLZ1rdfXdIrM#^zc(W3aSJe$h~g$0^e?)?}iK zox}5Ofa!Gt@*95brdJU2&B}l)V8X!;gO%0Z^JTc|jNGfbKwKFi4xdq3d6i~@mcZ&_ zNZEyI{==epmvV8v-_&HmZKw(@BmHXAokFV?iaZ{bl;`+YJbqQ}YssX~kk$@~-j2aIRz*Q> z-y5(7e_b*B28Vm^SnB-LuOlN9Zem_k@T{en$sa7 zgbs{G++Sj$+PeU%n#tm8v1DhC!iwPMD=ejpCdDo8uoLJV%rvkOq@<9|m4qv+{Ww7Z z&LYj_g{V!wXmE}f9Zon2YKA*^ClS`=U**Hz%kTQ3!8n`y_^N+`G@{rSSq~p5-dV!e zw?g3NmeMbs;<0Volj~NsQY6p(Fb?l%uio3jpANrRT*Es0Z!Lf?G#kl} zmV0S+m}50$W;VPy@uZElUC78KAN%xA*7MtKf6CcTOFKYfBO~|ZLPr;O**R<#I@FKP zwYdVj_x=0o-1(P3pka8CAwGUqvzx=VQ)Ic1)`T^WB--kDMj`CpV;R>qrSN!N;5EtO zuxZ<`LT}v3(O-v66;VHz{k0N>C#+0$IEyn5MnqVvnBf&MDJU&Yc!Ck23`71JQRo!g z#rjSyD2d3?1fK@`YW~c?O+kZ!*EQJc?|uKBS`>bbJ}@t+AL0exI?0Y--eGU1DLt}W zJv?CYE$Yw!qEXsf(xe+K=vd>$W;{0cXgw6dB~*rA-G>P<-j7Zb`K5xSdeg;$K}enb z)Nbkj5I6jK*FtrZ{J663ToWZJA+u&kC)0O&ovs1)^BUY>M21d(Ks5?gbsrglAG`~^ z8|6L8Pp}L_El50!p4QiHDQRQ$cXcLar}5RBGLwX7i*j4;y6<7P{vl##-YoTRg`OoN zmaT91()}c3{O1(pf7-I1pO1CS*;M137%PO%8<@R|23H@TD>&hhQwlIw@aHrqXJ?0p zPyQ7&+s)TfKm>Y6PO%Y*pb)G`yaHay^z5t^09lZ;8HW&kP|D&o)um|h0&*^1?#jLN z32~nh{2By%jn59-nB1Y#f25q-i^Lv?m>BYg6MzvL0)G_;o)wZ^1|pet`~SHzOP8)1 zEOpuGgv|7*OCE&X19a?!H4urdWHU1)l@h$IOMiGHL3Qm*yP>#8>+YY3G+SLsA@KVV zB!}w4%yJ)i?TuUIk;!sO#>KYFGEGrN^Y3!V*@FZ*=4ymnF*AXE6-#^L&KQhF=p4Z? zs~-*n8DSH;82unf{A->0tyz%U29E8Nzi|5(;5wah&+Uzvco%DJxDRpg(p#`qRaK>a z{Urr%HHOLh7;76F8^G|8(@IY9SUO9=q`Z&?p(bSX`Ca0{=`aYaH#p@<5uoTs!aGF( z(%00{AP7KG{{V4!fb%e9B@A>|)X_+zz{Z^qu8q9Azb{Tmu5Z#Hr+|y)0j|Za#64hD z_Jmee+3D0`fv67m>O-{W$_XIMyi&WHIy^j#xR9WCWGyN4{ksPTlM%2U(ZzJYKTIJw z3CI|{|Ey)=^AFUW9KkA<9vd6!`eZ|78W|&P=@l^{EC2ONx}9jX`a8%S0%7K-S!y@iE^a&04jx<@v$ z(SoaPH<+bCtEJ>Pb%R@N1qH69+1!*U!pcd(P>xyjST4I!y7<1GbHCld$SbY-Mio^K z^(FI)hBp$|Lj<&Ty*Qw9GW(!w<*mjggyjNqA`1qe6^g|5BM+ix3_t)h^O8#47iGM7 znHbc<wRV`t8@j!gh3+Sk|^fo2hF}n4nMm5SXn<4 zf(r+iAXnm-&I3FpvfvsEQr2!GJ|=<+(70HW;6Mo^&OK_@`}8IcBhye%q;@^e+%77JV{pMsOhOSL+cm62WH zBAi=h=N+JIEp8jsqN&?uTQgSWRi11}6SSs;4R|N&OMgeia9(6QajuFpcbqdX)UVkM z$kj+_P0QS^S{B?Mpua9A8TaZNae?GLwP1 zg!_7BL(E}O0@h(DutgIIk3xF2KxGWOd!ix$5P|X5#Mt+bwkUa30zmBk`A-Ybx^nTu zheG_EoSaKQ?|)R+zuAbj+Cw9CK-BWOVws+)Z?Rq3%h*1Lw)3%$C%>i$bNw_hTrp!Y z6>d+-==oChrYtTFtwm@TL2JtmNPG80kc)>)SL=@+&CDwExCA1yykQt^gP`&Cl?S*8 z{IM$Fa1bRd0>MK{@YrIfjm@h|GgXlEa}#0ngWhi%l;*qv#>m9PM9!3g6e=jjKL&Dh z!yfBa2l^7lV6nK_)Rz4yfnH zVg9i}1E7P$a#~fxp@{O8lM-ZYZ8({k64<N*+Xng9p_0OaEr=n0 z8IPlc`kV4c=#0F$12O6#oo;?HO{!_AH@o^anmVH2t6>qZ<(4u{3})<5Rz{^etvC3R ze8i*K8dzHM=jRYkO*A~@E)g!lPXDO5qyZ$w^$95dlMJx_#l>+*31L=gi;`6;Zd}m{ zYg!l7bwz&MeoOVyC{yu=9m-O!sc=4wYs6}PB>h|+HZ`ioaP%TqHPo*~z1)0%oz|Pn zpL8n+pMlCE5_H->D0M-yJwz}12+2lo`8CRD?u`nVr+Yms3=ACl@S8M+@Oa>rFeVgqp0327M{*t3K0bm0x@DJY* zr+X=^ks8>t>S9Ay|vo3}C=zIe62?6pOj67@P zy0`Z>{tD80vU`5?Y?L8{ zdVYORa_w>y@lVpy(g3i?x^&PJF!WsmVeSB~)X~-=_x&Y#r##W3BuuaXhQs5M+);gf z4kUshBOG%LqHh`30SoX-w<9e~P~0ZNS3bUc!?R06Xd4>CC_EIYdqB8?j`8a&Mz~gK zu@9og2E2b09fv&QrC!#^K?-o;3^=c2c10e$dYV&FQQ-xifYHGbR|ub<~#ijQxU)64dYN$yRkn02clrrX4gx zh>@J2B0)B27)m@DNl^C-foDNl!M9FWEH5i#!zXP3YB`-PLp3uxVAj<8VNQ_311eyM za|;Vqzf^+@a8J>2ue|E5b1b~kIuWGy1&U@Xa%yS_nVo+Ft8k)LlwGL{M@Z~`nE&FC zVbz&SrJhy+HA_9O%gXGhcF0=Uwe{u$)y>p=5bd<^Q>)4c)xCA&d&(YnBH>Fn&Z`(qLrv)Y&T z(Y2WT$jC?;rvT!6L|%UuG{o)=k$^9_Lzx#_tpvCr78WwxZZ~|_G<>t4vOmL^b{LE81;vh~7e?$#dt+vXY1-kPx;1t;FB-xAOk~_I2Oi0sR1<`2GD8d9x61 z!+Jbq2<|k9v>*PRlkorh>r=p#nQ13aL2GAaGWD%iNWh4Ioc~XI`v3Lk_RY?MmhKCO zl2vGO-`_1ky6olaEDGU1_I=5U?feSxGGxAHN&;;#hLu$!H;jUGz{pU<%s(IiG^$tw z=~7#}P{(%fMqy+jR0`>_oL$Ch}d(EvOi?gwdijRrSN%UWRY&- zEoy=Me@|H@(9Qh4vOksio0I2E0bfG=gP%|N4}Q!+ihZ;rfh97+|L$pFhD+lM1-45C zEu~>F=J9Y-cG0{=Oj8;A?7rRdy6T*>meypa)@LVh+U;9W>6J)Gwl#XmwJ9M!KB#+u zdF$yq8_{A@udgB5c!!@Ak!qT&%^&;b@%?Io^cFw%f2nlWGu-`~4$Mt4YMl2w@UT`*2e|vaJj~fXkToeoY(jjjycXi| zSeru?uXo{iHSD8H7ifBa>s~LPa}JHE7)G}x6^*#+r+h=VG>X9v^;TK7{045YtX9f# z!WHj@(@+{ZUvp2a&$>ightmYBof~}Cao&%r{apa{J8JLHUT5kXJra#a6gK56zHHCu^mv83?sR2mR=8NZzIxJBcHcP2 z$$#9Yps8PHY9Z@^GjDKdcydB>**U+k;t54tn?nfFoQ16OT-)d8T+!LEFhk&I-POr- zZlv@qtF`*;dihx~Z(cvC^-O1vNlnwH1BOBDhmi-J1{34w0zD)4jYrg1x`bUnX`Sqr zoEtpKi^f-s#V@%|ZvWAuI?&&Mo9eu^M+XJt^iUBjoUrWrNrT~gVQ$W6-E=BUwFfb0 zD??*#n5-D`LGEe0Ub~$m56hY2#Xlm&uX2slOafi36E7xL>==5IRaoOV)FCaewi>=K zer{k8aP>asTh!&JG8{%CWYoW{5{*X|Hm&35w!E?3i4J=c{GeFdqS;~~w3$k$8j(mC z%N>0~v7O4(3$5N|+njZ7D6tfj58QdhFvzYT{DsQXut`AluwTShyPZ{8DdX?67nG+h_KXjGTG~V#AX% zY1z-1Pwg6GTZrTU`-b9Xko+pBf<0NxKX$s$!R~bAvrEl`O5TlkM}5LwO3$61^8J2N zOGDYHMG{W1SUbB4n9mJl{|j{sLq4@nJ-nZySEHw95a_}TIel_%KPkiJ)sutIE}b!G zs*HS_fYR?#z!afS#-|VqK+jhCXJv3g3+}q5jbUgE&$Ea9Vcv+lkbG|c*gMH|=SRCX ztLe3*pVMKpULHfN+~RclD>+h6ce3$os?npK5YJx-hqtI1>XlAC+NbzoviF=_W9jzk zg#`n5P-R1n6@OM!-^uISphyB**2txTefJ&&OdB-|_@lFqtdGfCxJG-_+zx5UN9J3c zw7OFD3FG5>n3Cp9R#H8zmvv&NL%~ENV_Kg3#mN24?m0NIZj~TaY$S%kfwt&_IW-m1 zPn3*`ltKLv&LgD?_Ur?_G3{mL*w~!z@g)0H+>1huDE~=@MdulVn@;|$7?zr*Z#z5c zbr#k4ldD1f#%2TW7+9%yqGe@hC<7+~R~JtZ%RN5@>D}Uwi!29AUli(Nj52qw+tWSv zSiU=_=+bEij6sbwd0NwZma&}hnq!uLz2@lKo<2&u;d!`h0nFiGc;YfX07WLcvA^QR|v;`}Uah!xL`mX8K|+2b*Kw-jkc7}w`1 zbSCB5wI^%9bUZ~2~pPW<<-|{YaF}}0IwQYPZZ~z~^na@y5sK%M0ZJ;_- z90uU6^*(-wsp8+SdUnmy4tqx70waVkkfXv?CZEsA?%j9)1NtjXzogX${0Bo!3h^iu{?Xqh zH%=id9-RFDC4VhT8|9M%)Ifyr?Gs6kvzh!VZ zPe-GgI8aJ-adA=If+iM_8d+|9CM_sAIXUoy>Ep@Cxi%Z(;yv-yRQ`euS{!C=HvdLE zEYBpX8_Yl3wU9*;yR0sJ)6NKLGu9;G`|%+9pmv6mmhUcmK_OJ?L@=d!Qe#H~Sv(;x zXReJjuNx!rMf8uy+a+AzqPDnRmjv(591fYjc)yy{@rZ{pTbcjI z9HPiV5dK5oyUus2aZE_O=SW4{Qm8xv)lRbnP|5N}f)8z6VM|u_g)>&UPkU?T8Po+Y zv)m7USZI#e+kZLn#a>fQy2dU}$q zerWUAXUCvWXe46;R6GDNh(!#jA3etl`YmDroX9RME#->g+b9FDgjao1X+(myYtpVL zLqm&_TTP!^Q*?b#FMV&5zx=+1o~G@#x}-X#?OeH-yFFPCw7&a*uo5fid^KHWYY$FX_Tp9*|CJP?yuHV8tYY2zb;$(A6o7UxDf% z8{tr^-Md(!Cb*PsgJ~_bG1{k1U+o1kQi7eG_x zRs44jwEftj)hZPu?vv`}jz=OUY4wp?3>~C}LHt||kGIk0?7}VRBblKX`dF%9%-k%- zoue8fU14J7Q+O@tc?UtGymrgHd0Wfp_fecu^h#jXstO8apY;W*Bjiq?c+K$Rl;K++4u z2?2+A&wmDVeL|VE<(G9;kOW!W5+E8SRFx4)ReZR{%o4n{mC_{|mbMEm%foptS~)p6UKks&f?Y^R7V#6b7cI)s<~VAol1I0w zq**dU&m+Y-)V=+^n+93pa24#IS8(;>le`z4v}8b^Wg8q4Yhf$Z?9UM!D;k_jPN!va~ef(aJk5GnYrWnjI|mhot)oKsom8#M3C ze0JZQ(Sle33~_dWhBFa=lB0gQPl`sy9%&C93PFoZtAtz3xXPRjY7+Y3V@Q09M2?F? z4_ySM|p{d04Ii;l#Glh;}k%=5I`E#*peOr+umW^(JM7|gLNn(PYV3#%u4%i!=3&p!bqx~eN3@}0w8W7BhscSmh|q%M@Fkrw~{Br9ry88 z8jB1GE2*lfxVFTcrJ7#gX%L&OF8I=5n$}Jb#^P3~?bf3a+i;>RZu2@faffQdzPKYn z{25p2NkAYD%S^!$_nrddS7DBY8{Pbi{#fhh=O#o1zNyIbbLJm{ZUueJ@@hGm z#9xQD#$Yf3)mP3l7YFFgxjE$MZKa;Z139<`+iQYn6$r7|da>@HBvv}Ai zVN+7VQI08xy3HuSC4e>`{y(Nu_h;jj(@%jX^5}w2X3)K=<_W3|j&{qxU;X*c^Suh) zb${;zi_87Kz)7rqbw9&5RTh74czn)2$?@5ndI!6|AN!YWU8)Kix%#n?{qu4AI}=rY zK0UwwOxxGj!8&5bdp8;aS1&ES6*TX+xc&*=>+#pk&xP;*wA2we^$)IJR_%GQRR6Sg z{NGu7ejS?r^vdIY;HsN&yPr4feLg*5lU!f@^mOr;hwM-F&)F%Tul>hebj|X)n&-W` zlh(jh>~$)~&snSd|G4-4vxc4Q&w}Uwt^ua&qm~a>{Jgm%(V5To&xb2lzy3e7ADB+p z*L{xPTy=HToXS(2mURaof*KUdcK$s1;oY;@|J0w`|NbIl{Qf}cQ@_R%I6Qpn zU-9#2m;Zk_x~~wpC1%FY|GRmBd&~Zb#{GR2KK=VQ6|IH9k_(7{(F+>g&dv1&jF(x^Hgp~cNI7UqDI$YtH*2lfyE1B zGU!|YB8JM4hOqV}zs?4EOhR{{2eB{$6fqpQ>g_#{8xzt8+KoT|Gj1*U%KZJ}3E*;V O1_n=8KbLh*2~7YeDxzBy>`3KI->~r>Bd&TFo*4m*;3Q~9vC>~&7VBkr=msG~UxXXZnafkQ* zJ>Zk}wn=l~&mCuRY1R9{<#XTU3vf^F@>bJD#oo-t-O$Mt!`#l^)|AcJ*vZt?&e_7= z1#!Dc6a(W4hP31xRgd(YId>nmwWZDjSjLo4IH&j|;eAbht1)Gw%1* zym_+t@(lTx|6F&z)Yeiyq5FF^u|HsVEBWt5|Lw8N*T27f|C%NK@xygEPuz) zVdg0*{~aTFOC~$_@0c%l;>D%^j(Ld992EPXF^`n~w-*(~6hBIX;?ZH6lHH4xIIp43 zJAQ5to-V%^^tsz5R%iTvuz#mkFl@zYFY)igN4uwI@d&Yb;<_arOl%q?x>ZD@?{KD+ z-3wa&@8pgjQ$3d34!ncjzKuFvaS*)aWET{BSZE>`6MdjcKp(}gH~n`V1%Zpvgo186 zs~|m1O|mj2W#|7c{<0+~L~1a{oQuTz>VjFjNZsp5j!{^6Ik!qmOW`jYD5JV_&UhIZ>h)2bTTsW^{3=UYs1gJ9T)$!ouk5?L}1msOo6rF4UFW;&-}1FgJK-<#ZRS+d zp@|yPewIlAmzM8I%A5BX1r!@wJGgrV_vcPX3Z`ysSZFiRt4@J@o?w?bn=_`QkgN5872fYp5K}##rQa>AE-+EK7h63x74N^= zU8M3?J6Bx>1)pZily(|Z)4r#HUY)H(`s(Q=PZ6f7DARxHW8~&7Bu*RqI+aT+_OD>E z>kplzic!{S#uYzD8?PZ>cz)JQTGYA9-1?}~p@6@>#%CY!@6%T`nCNp)o=!GDeah5; z_kbZ!eI{{W(Z5N!mw+4o%Kbl+$j!vxSx_`Ie2Q_vwrsh;UOs%Cn;SWX-wMb@(^SXI zEV!v8f9vgeA&nRXB~iNp+JUy$?}8Sp3^MDVwLjn4B^3aTe)&|LZC^@5HCdMYvOvB{lQeC%l+t&-|1Rz zP160fW|g$o&2MF8pITaOo$O5OnSy}b`E@6Hthfej&5I;w%`5WfkH0B;%XK1Mq# z3RvFNcj<7vmKE;Fn$q-BQd*O1@bWvpKB~E({WLJ<$9S4=XLIX_vTI4Muw;f4feasy0qx`uuD<_L5yuKvkiA@LPHER%kpODHw4kw8&{LN zyzk`e{T1{56u0W+ixg(M3ei`|F-h_#Azr5ooCyFTXO;T(Z4+qa@peP47HYmivVz$&nuR#7GJbRs8T8L_;=1ij zVI^5`P<8H;9 z?A3kthvCwZcNQ~Qv~*Dm)Vi0`yrKpvSidEVb%<=NzsD>E6SQgtHX!COG=&Vl3e-~v zSAJ_&3l0kAJV~$gI34-y1SkC4lv5&ijBusnHt*xA& zbWYWX(BvzmHM=H7l~y&G`cN%^E=kl2gQVSOVV)YZeNdHrBLQ95@A4!Sb^U?uW~!u$e@8I=IZq+>(fA=y$`p z#Lm@TE7b(0_rk)*8d(Q>)Fba6YP?_N5>T)v8wq%KQmgckJt?g-%QwiWb7*n<)P1%~ zC`)cF?&reoGUro$8t-*eQ4s1ajqkdtk0|Zic82<+6Rc}vH^iKx49rf~ZHde;`PjJ_ zUcdB9wtKcZq)GVn7ih*eO0@sPv~ptt%2YVai$RRJ%>a)wTka<|+(=qLw;}dw{1Xox zS69^o+xQexKlSdekE3YYH(fBJW7J&P{V!_Z41 z=>d_zSezBVS9G$-xwJ)gYX@J(kfEArRe8z&`T<6}Zlxv*xoYL8kl0dUKZ9 z+vD44>Y5rTqrlfnhZQ&j#vnI*OG*evbhSAx@VoV2vK))Y?qZlv^2{~V^Gi;#Vk3r% zouwMj9o_P5dsQYJciRq<=AGrjImmYlYSF0w01C_W*jS_SBI!I38dI}aT}I}sGyo_1 zjq>!2P%?#1=4NINAJKkP3RoguNAyp#@o1t#URf)%uvlJFaCKTKF>5KQKjf{x4^f+* z=UTRKt!0qs!^|)J$eKClT*j!5`_L_~AynkNs!m;%pRy} z+-X8jG;=^YbVpuCb91sL*#g9DDLC{PjDMU09n$Hid$axy{7jfW8Cp_ z-s&_UgqubnWPN2lR2O1N$!8!E^JSm&tL!h@dkYP+QumHF+tncGc`;SWC;ZG`EVJs{ zqy4Wm!B%YBytXUTy&R0pUHZoM(n&J`?YgJJ-)7uQxGY}Nie4WIp~20!FQPM3T$M>v zfAWN^4m5oHm26NUYor5sByX9!ar&iEw&X&EbEFSR6vPX^&c~oComtq61q(J~1pgwk zQ~(3N+~zA1$~FcU6lCR&^EhOuy`2e5fvyo^*vl&{kIV=nTN~zT+#INaF%=aTLON%v zFcZu>-Q#^l5)aAw_@n_(fqY~KNfR*e?OJ7J&j!hGnIG-8H$e1YpAn)zxxb+%bP(J| z`{csNjoU|C^FagByR{yD0+&~cr>I^V*kt=B(e5@$DNIhkS>^#DZ_PZf6Pm7$?cTA* zbatlnO{uWu&JFAgm%^atM++b?Yrz4g1f-iN($PvOCXu(SPRxaQf_<4oV3r#(Hr zj{F&uHoPS@XFh((0;SU@@@X%l4vYsFxP;Sp0z7q{TJ1SgIY-48|#!-ceVTB-4+AbiB1~kq9W) zeDRn#Ytjl4QsF*Um@Xo`9=KI3A6BD@rsJRCa&zM3XzJd&=aBH2$I|z&FJY1hSdT9n z=#qa&!xVIzmuG(J{dn2`XA!Op%eiB zFK2&f`9<4X<|4g4Ie;$pC{WbgF~Rm6pYn#ei2%%PJoh-1C#e2XT>WwJ?cdvD4`%+# zVp|npXBDn0g?JAsd;W00(dRQ+TI1Q$5^X*q5$1`m78Mtgsb69HOD7%<-oj_N|Ka(E z+p61JGjvTR{pA-Y-T7mXzl!SeP2j)0`Tu90p??k|X8qCB^YYrX!PU>Lbg5A6zw&lf zR{WnOEB+s6MXa6qUauzo-gZ*b*Zs2OX#A1K-T7bls9?z`mt4dvPWQchG9V2qFpO)3 z$Iw8-N0UUrd{?w%Fwmh z{`|r`rSKlbDJzP!89CY3(|;2#!x)Tm+G$G~|9APKn|(CM>H2biy2|Q} zs^lH@!n;wOvVMk7r)tlsp0nHSt^c)ybX9p0nR!>F>(R#a6ndHy_p7YTl>3u30i49> z#%CiWJ=07oodfO7<{qP zAhzZ$Z&$3?;0GR_8=*}aR_4>e{qpp-G@h@u z;+J-#Z0k<^wsy%C7r}0h7i~)}kEk9?s!H;+t*mr)_dhe9psCll&p6JbKV2Ng>DWJN z(#Ltd%`j-A&I%JdHqX4C*j`;h&$5=IS6i@-ut9S-Lk~7O*E%nJMi>o;U)@Nej6tO1>pI`Sk@FQFgO_tz#HB zJ2=d1Q=&}s3#J+=0+OFnQn5H(nh7>k+H+WT^ZpWkzd&kY;Bq~&+hu$Br;JwVgluhV z=#&kk;Pcq0w^7bxrlfqXakuPR*NcmEEAc;7hTze$lv86kmcP{HF?)@W zvK*-+hDXtK-)^dnC>xBnigFdy^AOhm{CS6-0lboLUGhzSTm8)EUY5cY31A5h4uo-$ zo+a!8Al#u3F|Xg2QU7@T=t-WG1^{TfC#%!cws~U#QSA9*y@&M~jnze%>`cq|p7DFR z6<;8S3E#L0aiCYQ0j*)R1?@v1+!n7F7zLzk@0}o8Gx+qjLDba5-Q0?o55wA(dp{hH z02-F*apoRT0(WuRylY%@@>MnsO5VR*j)lmRK!N+`aQ~!Y1llu1YzUj6+hzdnln3;Q zF)kE9qjm0^ZS5-q$fQbbwprg^6UIoftQ)~RHUY9j4@oKe%ii4fIGY!ewpu8ecBbmC z!~iBn&hw3f^-31mvothw>~1SZRR~r zpUL$0U_YoB$@Ud$5&w)i>Ar|TAa+22et9FS>1ydGOngyr1K*jZxs_uKhvT*bKwmII z7Dk8*U#9hklY5fDGn`3^wL7?%zB~FHt^u?Od8mUZ7ZVCu3V<#4$a1vU@W#bYM*3n^ zbPsf|6-*(?K-Zo}JM%&QS12V-%{D;77@8Gy32d7}3Imj`;q!CQ3J%m0!|dk3py1fd z+PL)DEpM4!nCO>@?L6yF`bXN;A3-P0ar2FFKLMHw@DH!PZ5o^TMEz3zZ^N7tqBh>?7bv0XX-VgnAiSS`d?2PE^?~ zITJXZd$hI0A#|~`o{z{b6O{rJz;qpU6OtZMQMDb%G44ktUF)rJkH-l2 zns7M|O@6rXrH0v0>D>`MUq`FnnTs_dZ#2o5gwGnwT1WL4w0;-D=l>*hf(Uu1|bh-DGz@U}W>xV}8ne3G<5R8K+sd z9~-7q)y`5FyteY@*ULEzk1si$*+uGHv-Q%(k7PI7Nf)j^&FEeE3c7Wn%VC4FL9)`) zdvBDDgc$XCBAr5R10@c>H%}L?cq-o@nnNqJ+33Nx^3ft+EEfOj!#Tb(-CFj z%c|M1cr*k4>CWsq9_=44V1CCfEuxx|7rEv>a&Yc*xjw#)Spx@C0{_3zFaNsn<2|sC zCYR^%mnXB8Q&5l?LNTSM^>kkPB2sRezKV{Y`99J9@e#R++3vk>I`Bwcr)IKce1cN3 zXy<4RG}0er5Ypz>mkJqNU`!j6Ic3jCxwuliwq@y_)2cA4M*G(8w3HtyZU%L3n=TC} z;8F}GZC0+wf(^L=pCp&+@G{hP=3}|$WL8EiL~MZG`c!|}$T*p2$q2A%&z)v(%;du{ zcaxpjw-XA|x;$==i?!QSwADLcVM*l{Q_nH3&!EucVu?n-fccK~E z4?PwD_MD5D>;^>1?>+e>n1JTJiwXT2KGx4|UM}Bts(O9eRxAROvqf%?z2s;SQQlxN zv3;FPzol1)IAIuMFOTGcad%+I(yLAbc6P?pPMW%;riOir^SeP+)^Wd0Nh9)Xx7Fhl zk}7SEwb%O$0%02Gv_CL?y}3<3g8Iz3GXzzAJdu69_R+HqtVw$O!J}1p^rsuay=%(} zkOlMCS^D7u?sv+EhE|Cm?~m-97cEq+?fd>9J85!~r)cnYW8$GtwiR-_$V$8TQS2Aj z-L~I+Tfn;OwbA$Q%&Z*d>-9k|^is69eT${DR%vV|>&MVgU@iXPqTXaro11N>QzK#K zi!K5;yAgN?3)x2mTAbPBCZ7}w8jM!b_uJOH$fKX|5c3zz0%3$rwIn3zxBd2G0dmG> zSM`Hv8%$ggXAF3RaM)mU>n;~=x`KIL7Un+=+%q^+03)vZ&Tn%AU)Xr7RuJiAt#=gY zfxstj)G6k-s;Y2~#?0W}-FqMVFXVy9WWKuJ+}7SP_)~&z6UYUKWOd)kw*vF=5(&m^ zTReDW`kYB8E+iH(S>e;wXUY8}XnyZjPR(jJ--HSgsOvfqKNy5x!~@+^7{<@Eag-(L^Pkhb5hZG_#kdP%c~UmrL_P*m!tP zd3f%$a-QuJA{+(vIiA4tTVngIAOgyByOnkG;B0L44w*GP@NL zuq`atJ4qoo-}alcG8Vw{H~c())VCYuJ1f(Tm=E0jR#Ov*_B$i@yn7b_v+xtjlKdYV zguw2YA5S0adNq5}gRNUjL{J!HTxDWF*6HH5^rAy;d6m3H|NIpe2ARt{F|hd#ebcw- zvOz*W=U$U_cHN#dgs*tmndV;2l6E}}hchYrPZxW@I}A3;-!e4JPVj@hZs)`Z8R-PF*Jo*m6A zxsbxA>=Q7@TMA%N>7K4kDl1b0Y;vo<^p)>sbnI*Ztyv%DHvl8*3fuA6H=wbhCp$R? zh)lUgt6Q=f`RaoC&YhC_UPuu%sebhw%owIJf+QF$RpiP79g8d|WW9k$QrD~q7HBv9 z?FHzto{Y_WW2Y~wC*;0bfzx?7j+Is6JVA3&K+k>t3;UW-{|{AEXdGu_<+_&z(=d*{ zPyFoHvJtB&Xip@17pQS}%~q$yv|`;Ru5CYX&7*gR*D}#ITUB2OH6$b?R9afsHOU!s zWnbt^8IL9WOt+C2EujB2X9u886ltmFN`vAr+&NKYc2V|VzzQ*(oREHwI2bW{?qYYVnf-5c@g}qP6;4Y4&>C9 zk>_2LwY{L(o%6857vQ+q*|`O0{O9YRW@Bo5Y42qTeBPp zOLN6d>TR!oD|=Onl{FLvL>3$A1%DXa7+@VhC`f2Frz(cj&n{)jK zSNSpxy))`+(rvKN=k5N z6V*m`n8+P>t19F(B3QJv)%UVgD%dRn;4(yN0F;Mc-!KBv1}}%DWak?ti1@{)v{iW+ z4Tuu}#$8_=dU|@&s?FgKUllj%82}_T8Q47Tb@tyz+>ERem!=(rfaK5+K|;?X`*vfSSbp$5jEN1-h@U- zd4cbK9a*Dm`bHQ931D{1uv6NMv~eJ50nI{m_0e(BrIQ>u zx*&#Q(7r+$$v@r$gi2D=f_a9E>#Aum4(e_?`X&3?9=78qgyoF9JZ9G_PhFUGy74&D z69d!$g|M0Qak=h$re37*Cx!qbc2SU_r>9SLrDRnX2@8#+LpUh8N$UIgH)$C9stMng zVhs)bYO)>KCu8b_eDGXeQ&(GE-?C|Dx5V+y&y_Ltrf$_CZ$5bP>6Rvwmw`$ww9<0M z4b8dzqwD_3j*!yNzVZf@C}v@oAH&;qdrYI(mlExWMq>dz_Rsj}z3|AdCM$_YGAPBM zh0{M=p@|VyNifX90`N_701Uo5xj>%d9vqqrxOte^M(7gr zv?$yB5&1)XTdlM)?M+xYQe5U^x|kPz&O6*3wJ;9=Y6lytZq2Q`O;CTQE(H9>W(dL; zwx`E$enzOL(lIpCv4lOyDqy4EwFLzjJP$;C_`Ib;egkTzto{)x) zVgY_=e0-wQz5~oWt^WpWUuI_*s@{41a!9I`4}jm2lF8`fARtjL%ATk(@0Z1dKIZ~Z z(gTHp!g2d>0M`PudWQDcT(}my0Z(YZQ{!)Rl0DN6NtnJ~4~dA|_Zm=>bs_;kDea~# z2(~TtAZcwCuid?n2GT?E1(~3PCehOefY02|qI}-6J9~KxfRQ(d7r+~8(BFNDN7Np| zG+xIWJ>LL#P-z!{)?#OV@vDN%OV@_y?prkpaB9hU7s|8f^LL3hwV!;!pI5}IgMStK zwSM~CB2mS^rzQBk1m#sP+AZ?@xQ0zoRZdQBZIG9@?t~B`dP-yky53gSbotTKAbef@ zC$E{V+pC^;A;zcYe9myRGoD8$QK1Fo2qI-U$W}PKO@elS@XRPrrRd>72GrnzRlc+t zB*y?yOl*uAI#Q$Gk=px|S}%UR=;>|jiWzJiJkyO7;;>6~Ij9D*<<)V&YM+^Nf^JE< zLTHd31^|t}*kuSARcez9_}m}4ws*_B8tZ2fFuyj+r_MB&yLF=@7pI%;45aBHhGb;H zO9UYVt5hZn{^^2NKemweev6Glc686VKKHUy^yZPOUpi1@<5oC3ott^>h7FsT?9v&- z*##LGxLg)7%m(x{x6>mE>JlA+T-(4qgMi-MjwOd-F42-KF5O!0CWK=dZiLORl|@0@Ydy6<$BR9vFN>NmQWy@!sUH!^zFOG>P3W9KrW4* zU?t);Z##pOw|I$eWn?)#@(Dn{WMq14JZ3FkbovYtQc#Key@^4KknwKdisP5=`>j#{ zv$`vhiM2hgv*+TD8q$TL|PwS(EqkW-E$DM%4N;!W)PcB+riZm&HR;eEbtz) z?yq07XMsS(^(q3$q%oG;QtE@?&(H^yy!LCuIGs*=U$S3lR(w9IAp=@nI+oW8e+*R2N#73{y8BD6VG%nC45&s{OvagV-(0ZM^%J@1qACQiYa z3sN?n?wSwJrm}paf##1#Bos10X%*<3Dn&NZu)g34Y;&`nyc}{vgA=UB9aqMZD!q2S z+;*p=0Kl<1nJt3lWR>|SyYaL#AKoOYUZmB@Hlg3WRdo#H0%U><~?cD7`jvZ?80>DGp0!03;Ve=&CQt$z-vgDGC*o|S9Q0|M9_3*|9fT~}Iw=Ovx z9-tdbz{u{OF4W{&(8-vTw*Xe$$QlmwYlvfY{S73kZ8Jn@x8r_NHI+R0-Kuz*^8rUH zi!0j%pz;-Nf3k4tuRNYqg7hV8SK3JAW8&^bJCV~okME?-Jb$Wzbjkgwd@g0AQ%9M`Jlr) z3!}{A{5hk(kEpFSgpN-v3nG>-E^SE;m@AN&;sml;$!sJ*a8Ka|l{Y0>hn(1wb2B6=FyG(s;l}{ByurYlHjp@wsN1$=$m_Z#{&GVT0)Y44A8iZjZ$2 ztbgyC(M?ckZ8+T#`km@Z>3P)b4TQdW^d@=|{45UbcPT&`PSZU`)EUq%InbYUl5feL`Q9$cU2GIW%v`6-|)20yD`SJ{HGXJ#?KsvfOm{)T+ z8bz~-r-N~+K26z_@WvMvUT2YVw3?sQ?Dfb30Xny;D4pDyw9FfEEr{4I2V8TN(rO z4+$2$nE*C#I5vG8@vFe-?oOfSVHU@2Vx;W#E{xy+fMDZw(Fy%#Ybl-Rt}y$073+yZ zmC)`xQDQE%05es?aD6l@==q2eVq-k@>s56k6cL%G2{k0bNi4G1uT9-L7aLbg(hCF- z_tvS{E3J%w0E%Qu>@7MS26d?7ROe=CzVO>PuCF|mCDcNLP;ZT3+znX(WTPsaZ_&Kx zWe96;;TthOGYAO|2E6k3=l&*=9%KL=1z1tpj1ABc#gD(fuBIKhsp|f2;W6OUf$kl< zz5GkMU4Y6Rr~P8587;F8=iAau zL2#UikIp}(%hieZtq{-@&)<9CQw8k*t>ydwtfE@d6EWf{M73-E^8iT&hI{uI<$%h8 z zMMUO0hZQE0JeW)pPfBXU-%Bj_Z>@c_IS@N;?45-i&Wn@9|I|X0wT~(Cq0j%8lIbvW z{)hGLU#{7dfA;MUTYBboy5S|h#%Cj4>IU`tZ~yuK^X7YXDN9FZ$eSBcE2uOZKJ1^n zb29+}yq^Vs+cv-a&%5{k&#nBspqNh;yzaMeUa~rBekM$&&k+p65v2`Yy50IMx9UEw z!P}>C2H*%wouu?>+PD=pKh@lMn#^`#{{tA+Rhn|m$9%IDe!(+A6T28$kWki>C0Bv{ zI;z*0W@*&k@9&I9m*tB@{dot;KkvAlCch^NAUFf+-cESXp2u6MbGJ@ugefr(~ED26VXOPGWBAY5D-Aj?|)7q z9I~2t%mKP6FD3`|$IT+pkbX)d#q#FiOU<3;{yF+TQV;!i3Oybfret<-Y-%E!hYD~7 z>dpCTR_eG|i?KT54>2ErOzuOfN4GxZ)Taaf_PfMe6WT6DXSf15zo7Ejv$)vhSg(vu zxTA`GbigZ~^u;feM2)fRJQ?#Mb(u=%csj#{b0z5Dp?w7xr1?S^;{1X%u@ScoCY z`RB;URy*8n**S4ctHgfcaY+i#&!GmoZEKwiH&N7bm{(BTo0#%R@s`_z&u`m*V3NPFH)r3x0}A zv$@>#B^=_YWzodu43Kx*LS|PDit+_;X@tKt`YL`Hw;{i(fw7@&p z=cS}9EbKqQ;W^AvgOlnH7;jvig7Nyg-5+bVnB`> z&@c%K{<^poOd$1P7pZvTr@DU1|2g>4#qniAD|iX14&@N0OJ|}%aZ6JR-l?Cy9w4xM{*PPtds;tmNO3yn3*Rj`ir!5<+Dhn~bD!5=@iTXP^KV;-eBOs_ z6KJ41F8N@{%V$6j_fEFUZt|q+?nV0-DhE7AxXAEqe>7wK(S}5u9zX9B_yZigwXM(< z;Mm8n^1gulrRs6R)|SV}1ec{Y_09_hvR9+MdqLHu!YJ9}GkZOs1DUaT3B5R<)fXJc zXv-|6t90ikGqbqR&=pvLYcFsr#UO2*EyZC-(=M4OCUdTiM>>OU?4XuPskLnP13cWM z&ok%t?Du@`_4=W3L35L8ln)JG$*=^bUCfOl@u=sBcX#b`0$t3eYXz_}@=B3-FrQpA z&BV_S$9EvK@6)UoN-NWaIBvrmk0S&%RIm|g;={%SBP+#88z+aARSnxDawqFL)fHo} zGzPET-CxyZ?#G*W)n9S#BCK`wj%^jY>mvA1cdSQix2%C8kqxY`WvR%MSzphG>;Ho&jundos&-xi_l_PgK!&CZ@7JUJpkmMJzAf zyTskta?ySq=bhKox${Wi4@;fC%lZ~&Q|}7}ZZ@otmuH93@3M@KA*Knp2GZB^`Yy`W z^|k%?kFMB7earViaV4b;Pmaj%ZS&bJ^
=E`3wd&L+iwZ)e zn1H#u1_j@VD|aTPi7E)yW>QXo?G`y!@9Nmq`7cI~pwX7V387i15xh%e5NY8Kw~wgq z8pC8OU0Sy3jhh)JWJ0T0Kf7D4z<9EQa#-8@O)?R)?7Hx1d{-AZAGO-=OXKcGf>Hhq z6a~|gTdHu!8jooV+eR`F(5DZg$xOxY&D=UeR zE$^T=;?i+gvn#Mz>#V_X!z7&Ed|@IGAQYQ`RUmBBcFHS-t z>!)DqwY<&_kB21ep4Q0Ia{9z06!I+EQP*G$dbtY%1|2iP*?a=<#z{@siBj3Vt8lx( zF^EW>QCnZYUxHPo`+C_Ly*}JO^Xsv^*U?iMKAR3I3h~jwH_1inhvoxIi;xk5rc$?? zUw3h%j4L#mWfz+L6`R_8S0$iRaxHihgyWTz;~UJvAzxW^YpUqFgf0zPmh!j1(7YT4 z4P+wJXOk|c#Nw`|RMBqUy(Cq2>rUcO_f|M_frl%FfPr5a%vEl~g6rXYDW5lR&LcZR z=+U@P%JP_Xp{~Y`C!CPmiXL1;HhX?|6_zgBTpz?Vnu!lOqt2d#-ik(!ovvQ-SN3>* z55{BkySzJTl;cR-_YA&`U{R1qBBID&#ZC^Ht5o?Azl5g;bsIeejSD-0l0W2?067<0b`UeE)P6~bhsnkoP7{lO!!!u#l#ZLI0VhKnK(v! z!#yH|1XMibc7-XfI{hZJJO@KK`1)5}>!qwbcQWfI+8J_0fB_RnUC1{(^9DontnB;y z9dT0L73(ibH`r=l&h^#CMcu=8H`rd^3KOBPK3;N2Nv`f{S>c#s;Ws%<@;q}RC0I~D zc-vZUO2T->UIW%q&PiqtfL|{fwWa8P-o3Y}Wkv()9;m36D)qHCYd=m%OksY`TW+W` z#{ON$Eb(9fZ4*whoGoP@P@KZJ=Ovt6)Ie;zH!;%LN6>TL%j&jQGc7Mk=EFDBlBIut zx$BfcL=dIPnU_9K8XOy^;W%4K0DW(eNp+G9{b-gAnU8-!XAXcZFHi#>*KG`BF%rI zu_gVtY!h9%$Gb$@>eK5Eb(0m(3ddLanqwZ9q9e;no`niJb76rlaUM2sFczW69warY zlsbF&9!{Z#s*`uK>2)EGL|3-X#+ySZZLWvpb^Y-ycK#-d9d6 z|56eD_9h(dd|9Zl@97`QL?}&bP|2Xac41C@3@i3a=uI|s|A-&Dyck}L0UpjkeguGtQPvWhW`86A0c0M#6mCcmX2-LWz)@8Lc*C)$kHt}(Tns-=48kx zYLMT9xPBRj8QyDOY(Bk^SAt*XIGREsMd>v-9fQ~NLfx0!m1Lr{jFs4}aMJ};*787q z>-;YUTSU!6M7G4^%liADu4sLFt_ei*fQb0fo*cHPG5>4$UR?jX<$zPA3cqJ5idRI= z4ur*}(65Pcj82Oyu&Xt3fGAf?u`JYv#YUusZY)4#n90581*($yGk0M5%3xO^@R=rH z|42lsqBllGruW?+_w5RahRbi;+NH>yzzsfB_z}efz`pIyL1GUk7aUA!kCG~@Z7@Xx zjzVadio8i5(bgv|kMg9W@Kt}60=QvyT|>+h6w8tt5Fh(S6a!zli04F|#l09IYomEK zC|o}6g`xd0(!W`xk#@t{_DMtbvzLg%|HOP&{2^8<#UOAjy1U+l$(=ju2 z{1v1SDjGX|K3NO5h$g1EWpFjqoJeg}Qp1#7;Y8*RP8w&!1q^sH$@u%)BIkEH++p*i zmnZpz<8~z!fouxZgH8@)Il*4%`?Xupy*WqMx4+#H1_6`Ru(m9O+ra@+Ay|+2Gd#J^ z_0oc1LWHbOPw~#dVllhE->5WNR{UU`Q^sMB3rC+eoNVJbB$h*LD_5<)xtidPiYo4@ zE@C|nBtYit+g_W0ZDP8mcoQhs`kMsb3l>;?c|b^Rw+};4PS(%KneYoEqvJr=&F$1t z)Vm4im!Mr?w1H3*di*WI4v)6y3=Y+$2Oqp#+WRQeBX_jDX}e!`#LBVnu-4FQ0#7|# zHNdB7fI6jNzQaG{I_gnsk-*Ep>TI?zaYi0u9cSq;UpHYnq89=@F8oNTXHYeJ{%CWA z=*r5EfyOAb8Q9u=EN#th*0y#y9CJjTiO@^>zGW^`?yRC9{Zs5(>G$uQLU?XrGenDv zBa+RGareNh&wIf|^E2Zq@b=F(*$HgLsd#8aC;o6>igO9MY|qy8c6yvP*U4+wV?4QZ zPPgAz{8WsI`3XIQ6*&*f;y@94uI~8a+`Dtloi>;&;6+v(>mPN9r?Wxl9!&JS0u{!NzpgLb1!W+QiVF*TRj}FYOFG1?-!&Nx z2ru#Pc%=VAq2J{GN*yej8@)s}nPfUpk)aA(J|p3SjkS+ogq_Ie-C6Hz;e>*;;Q9{u zu2CZLBZaJAMn{JmJ#ng|gvU!gE*>Lei7Ywh-nAlo>oN^Tm^kr#CPKQ?CCcG{ca@E`)*P9-{`$|j0>JW;ho9^Ue zrB)ciZMQ4>a1n=X-DI{w0c>32A;3ey(v^cRwh* zWN2{@Bv`vAAyHoxXiHn+Ro+k;_etz{HQ16YoP{C?ww+gAE3oD#iO(?Ks~zhMC*gMO zLD@U!{ZwJ(cDHjJc8(dyti<_~bJ^!9N{H<*-mR~7<7RpxS09ZV^sF9iHTSgSmJp36 zylJQ;DpcwvRX`I>2Dj$xi3D2DF+3a#MuK!Ps-ONi47dCskX8_Up_oN$skj}vK+}D)URL| z;(bOf^;@ws(e{c$jCk)-SKPZ!gEjbcuQg-A_rtZO3eE|pnu1!(59%7yP`j>y8w+)=@_}DyIS+&+am7TMAYhw??!;Y@!Z6fU zU%TU0T6oD;bJBu~!(J?Z6BGn`H5=YdvMnPg80=B{xZrjNiI&ZLx!9D}%ts|1drrsj zyE}@FyT#M!tC5p|zJorOw69z9O{F#`@BwoLFek3&sfSdQ+e%oGAA_!;-)D3&Tm z=*J(4^${ILk~vriVVbBFms~ek^rT!T(7XY*D=2BSw|@|Nlw{lPJ?Dt}j2xg`w+M#a zg=ZvHX%ByWSGN38uG6qd{D!u6Va?68kA-S6~E=) zzz50PITs-4x~iRz!;(9h?ZfozmdyD;7xG@lYt~MDX%sECWltd1vhm?=y5FIZTYSQ4 z9aTWrr?$8z?wF*s-p}XAd%iXA>03%FGUPINeFsr{QFoDW;44{MJ-sOBgZE7N9Q?OF z+?-^255l!jFfsFr{{C5b*eCRP%O|mjn}2UND7wq4%Gzx?Czu#$#YEbTg)4yUhTTq} z9P|B|V;sRF0j$ zqn|$+v^5kv9C5Hl6@M7f0{K&WaoEoe#G!nqBz&B@s(5Cw`e{VL4^B%RA&T~myaz1x z?zD{uE1Yu;8m;%>Fa~9<{{O|-TYyE?eSO0q3I?H~bSNp(-JpVWC?MTkLo+mk($d|a zf`dqRHw+B|l0)|Z15!gX?*adDKhO8Q@42qSH8bpe&W^SBs^40Ba2K7N!H*8OzNgV5 zuMOwYi}*^{h?YP|J@Vfa{jE!gFd0SGOwQTdQ!m()M}>&f2dV}G8152T6UhExXEjPW?zZ+b0JD@Y!^5M$~B0fnzVP*k&4TVrE5iTdrw+&kTad zDtMBPk3!ZoC!MLO@NroCoSeT_+_6R9ei>-r$rk(p*Y@WLBJ8mZd()Zvl3>C%$DZe7 z@;VARy8Dfyb5p8>Pm`J(y2dI?2M%TPnvI6%Qa0Mx5u&QvdKQ09Rzw=d`toN)(aWAhH$IO2b5xg59mi>-^tXl0_K8kNrgvoHu2$DkV;L9s z4|_`?7mLOcmN3z$2?1?Jz)vbW(kq4qn)@qf-`;lN^|;5#1hD(A#m#v39sel$NfFC= z_Ose6JTRzc<_6%0-Rb9hKGy(Z9BL~2)-?|@t0(ZB4eOg<16D6ViCkH|cpOM)*BRQ z?gCpk?Qxs)pC=LD_QqB(H`n#Njz7etWdzd7CR)dECVq#R-oI;T7%f58MV38fPT-QX zFsDc+4j@NFg1@~F*2h6LDhV+tJsVgP9}=Fb>f1g$-_*e$)GBN4U2pBu3!wSar6bXw zX2fassWZ1Y93`_6*cM7zJfs&pDF}~ilfyq2TUv_KkP>uuOt&IrwL?RUP#?$}4yDj> zMS&iCoue#bp0eS>O;6Xdlm+XddG>I#{f!4oSG$QExvZbLeJchKj2*S>RS#c7jspy* zsIa1h-+$OVV2G{Vov!U_Sq(7xOc>gl631#+!*f(SP>F~AbPRh!_enO#1Os!n7t8#K zS^zh37pbZxw?%4a=!0cZ@I)rxurW&Q0VGvX>X$i6Ei4=MJ@LimTEwF@rD_4hhCo&W zO|K7n7IH9lgq=`{O|73=a~xPsh>T@|+i+QEFWGc0@92N@_`;pYVm_1nZH00EeRP)m z+tpUWBp(2m#d&^uAemEa%k1%eG&UfL?QB+#2+E+%eWLTojfa zV-$HUph&84(mdFysHi*``CN@tITT4*yu_6Lwl&x{a%@TlzQ(wxD05|8X|+0Q%F+%W2JP>zM31^{RkrbsVQ-gHd{>2!fIdG zdWEF!5k=dUDH(ivdVdsRq(g?55_qB!^Ll3-tWmOuBaYPIdC!$k876md2brN-MJJ=^ANOg^h-7&+i5{k zS~JO_L9?QQyngNAN-43|)sHh6h|2CtC4js*a>=D7o_oa7H}~64UcIoEfDOc{z}(EZ z_ay3SXdvU5Ay%&$^6RaB)j)AGF~dT&R{2z`bkmNaRRm1O{`14gS5s7R^K-kKRZ0vk zNxmCv!dYQX>u&9)w?Qv|D(ZW-4}aJ@Ez0mx@I~S9qtC^SfL))@o?q~2T5@V5a+blM zd7ypQ_aSW2uQ4Gs!mjE3^s?F8YsN(}3bNanb>K*CZ$FboQVu$4W2Le~n*$C03?_fj zQif}HsuEC|&7wVxo9Wrv8nwHbdFitd`OrifscfF<>CLz$r#N`A@mx+X&V7NC@fb}L zAdW}nG2Uu_RfQ(iRyTG-X8F+ecd>`-id9V|pa&+mlQ3eA+2Nn*_2!>F#KrBy<}bC3 zm%cjXP!>NGNYZnBnxyM_r>UZ;c}nn|YOVsqL)>5E)8m%`phr<}9RzS7NXKjalvG3t z7O;d_;KV>9f%tK6IhoUyD@y#_xER!A&9b(R+G;0B=w3+SZ(o}75~`<9Ai!ayg79Q~ z<*+YC*2YLdSVckizP<~YnD#1haklfmvEr|WUL*>TRJ2djfk`>U$>#JpRl zWQWX5&7F|aVlWS4-xpR1=yx@%($x&JfGsdHqHkh80`uA*ki%}SEPnXd17}(@)%(C` zfRRuz90>#`>Uq8V<0(Q*`MDb>$cUt(qN>za74hY;+HTprtemUnteu$4Wb>CsaSu-L zY+n(46neP(cFEAn&U&fZZLT#}49r^Gd}`J~|9m*%Rb2(?>bOT3#2z?}>}O6L>ivZTrG@ zR;5?b-~@LbjY5~?+pb5455pT#>Thp=0>K3IH!<*$l8p*cgEB)TYp?KkB36qJQj~Rv zkm8LAXJ>VE1PxvM<;l)j3v`+jY$kV@bqF;xjDD6 z()HaL5~&|-A}W6~=Oq7m2i;tQ*nBje6|TegKnH>T`CT+Qb>o^-CIp4R>>Ax_L~&K> zU2n?x)IhS9Yl$-pR|@kRJ8OhITVr}BW2VTT!RvpognXa93FD8H42t2AC)wPl7_shA z6QsZ&6g&17^K57A>F%e97n8`y=usx|oWFkNibHPBHLRffQO~ofy4Z}be~c31d2s#X z64QI7#jj*x;iSSpeB6TC8Y6Fl!-M(%-Rhtim*TXwMDwyT?A*tWU)I<~Qpv?UXjO9+ zsbjCwbW-D}_!U0fG?!xM@Ux;ytZ&Z~r=}W1O&Axhf7qa49Ov7>#ww5f3gadYpTm-l zQDOsLBI?722RH=DNt`L^@m+VZZ|QpU+^Lz}i9Z+kRe(^fy^vVn8)g<)P?tLUatO3X zqHDwKvySQvLJ&x8JKuPx z08yY_?)z#_fC8UrklB1})75sWiLh^^=sOKfu;^%j`%t@CJ=k%^u?rs}^6K^Ciz4(1 zqu|jYx2Iw%KD11)K9-6pZT>yMf2VG7QRDXDL3DvV^hw!FPgesY*ArM*E^QR09O!eSfSpA58S*eWdCG9k;p z>y+g9{3-ZBbNPHuTh2LKax2Z9vK(2e2vdw;Y)@{QtISpC5H!fqoh)I*`LpmY+A9ODcW#evxEOEehdAFQyb5 zf7svq+`ZLQ*TjDk`Tot8ja8k!bMw+YeTOHl2T`}4HRMH}32PjabcsIqKV;5bCL`~# zjvCqP)z{9N9Io6+D1Y(l>R9;;qG{mvV7eb|yP~BDrQ)$|MqDZko_SMTq3L$QM$AMefo{GMUzc^uhS2h)WZJk0jx zXY0(;gzyQeSxS48;AQvqwZ-l~F7k4>YNT*VBx--pHr=o1{%mn}Rf*;j=XxL=6dYtw z+`1Y5SW_rwduSjRCCyw1RV24!)24AL{(9m|SH%ls7fBMoFhTU^|acepg{&uu6jYAZFM2TwDwW)ZoLafSv zybDbCxZ1??YTu}a(iGw=_7$&^XSV#�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�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 P3zHyEqeBJ3=L`M?*%U$3 literal 0 HcmV?d00001 diff --git a/docs/tutorial/jira-installation.md b/docs/tutorial/jira-installation/README.md similarity index 100% rename from docs/tutorial/jira-installation.md rename to docs/tutorial/jira-installation/README.md diff --git a/docs/tutorial/assets/create-action.png b/docs/tutorial/jira-installation/assets/create-action.png similarity index 100% rename from docs/tutorial/assets/create-action.png rename to docs/tutorial/jira-installation/assets/create-action.png diff --git a/docs/tutorial/assets/gcp-cloudsql.png b/docs/tutorial/jira-installation/assets/gcp-cloudsql.png similarity index 100% rename from docs/tutorial/assets/gcp-cloudsql.png rename to docs/tutorial/jira-installation/assets/gcp-cloudsql.png diff --git a/docs/tutorial/assets/get-action.png b/docs/tutorial/jira-installation/assets/get-action.png similarity index 100% rename from docs/tutorial/assets/get-action.png rename to docs/tutorial/jira-installation/assets/get-action.png diff --git a/docs/tutorial/assets/get-logs.png b/docs/tutorial/jira-installation/assets/get-logs.png similarity index 100% rename from docs/tutorial/assets/get-logs.png rename to docs/tutorial/jira-installation/assets/get-logs.png diff --git a/docs/tutorial/assets/get-type-instance.png b/docs/tutorial/jira-installation/assets/get-type-instance.png similarity index 100% rename from docs/tutorial/assets/get-type-instance.png rename to docs/tutorial/jira-installation/assets/get-type-instance.png diff --git a/docs/tutorial/assets/graphql-auth.png b/docs/tutorial/jira-installation/assets/graphql-auth.png similarity index 100% rename from docs/tutorial/assets/graphql-auth.png rename to docs/tutorial/jira-installation/assets/graphql-auth.png diff --git a/docs/tutorial/assets/install-gcp.svg b/docs/tutorial/jira-installation/assets/install-gcp.svg similarity index 100% rename from docs/tutorial/assets/install-gcp.svg rename to docs/tutorial/jira-installation/assets/install-gcp.svg diff --git a/docs/tutorial/assets/install-in-cluster.svg b/docs/tutorial/jira-installation/assets/install-in-cluster.svg similarity index 100% rename from docs/tutorial/assets/install-in-cluster.svg rename to docs/tutorial/jira-installation/assets/install-in-cluster.svg diff --git a/docs/tutorial/assets/list-interface.png b/docs/tutorial/jira-installation/assets/list-interface.png similarity index 100% rename from docs/tutorial/assets/list-interface.png rename to docs/tutorial/jira-installation/assets/list-interface.png diff --git a/docs/tutorial/assets/run-action.png b/docs/tutorial/jira-installation/assets/run-action.png similarity index 100% rename from docs/tutorial/assets/run-action.png rename to docs/tutorial/jira-installation/assets/run-action.png diff --git a/ocf-spec/0.0.1/schema/interface.json b/ocf-spec/0.0.1/schema/interface.json index b34cf2eee..62341f935 100644 --- a/ocf-spec/0.0.1/schema/interface.json +++ b/ocf-spec/0.0.1/schema/interface.json @@ -67,12 +67,15 @@ "$id": "#/properties/spec/properties/input/properties/parameters", "type": "object", "description": "The input parameters passed from User", - "properties": { - "jsonSchema": { - "$ref": "https://projectvoltron.dev/schemas/common/json-schema-type.json" - } - }, - "additionalProperties": false + "additionalProperties": { + "type": "object", + "properties": { + "jsonSchema": { + "$ref": "https://projectvoltron.dev/schemas/common/json-schema-type.json" + } + }, + "additionalProperties": false + } }, "typeInstances": { "$ref": "https://projectvoltron.dev/schemas/common/input-type-instances.json" diff --git a/och-content/core/interface/runner/generic/run.yaml b/och-content/core/interface/runner/generic/run.yaml index 007057df2..4baba102a 100644 --- a/och-content/core/interface/runner/generic/run.yaml +++ b/och-content/core/interface/runner/generic/run.yaml @@ -16,18 +16,19 @@ metadata: spec: input: parameters: - jsonSchema: - value: |- - { - "$schema": "http://json-schema.org/draft-07/schema", - "$ocfRefs": { - "inputType": { - "name": "cap.core.type.generic.value", - "revision": "0.0.1" - } - }, - "allOf": [ { "$ref": "#/$ocfRefs/inputType" } ] - } + input-parameters: + jsonSchema: + value: |- + { + "$schema": "http://json-schema.org/draft-07/schema", + "$ocfRefs": { + "inputType": { + "name": "cap.core.type.runner.generic.run-input", + "revision": "0.1.0" + } + }, + "allOf": [ { "$ref": "#/$ocfRefs/inputType" } ] + } typeInstances: runner-context: typeRef: diff --git a/och-content/implementation/atlassian/confluence/install.yaml b/och-content/implementation/atlassian/confluence/install.yaml new file mode 100644 index 000000000..1f2dce749 --- /dev/null +++ b/och-content/implementation/atlassian/confluence/install.yaml @@ -0,0 +1,186 @@ +ocfVersion: 0.0.1 +revision: 0.1.0 +kind: Implementation +metadata: + prefix: cap.implementation.atlassian.confluence + name: install + displayName: Install Confluence + description: Action which installs Confluence via Helm chart + documentationURL: https://github.com/javimox/helm-charts/tree/master/charts/confluence-server + supportURL: https://mox.sh/helm/ + license: + name: "Apache 2.0" + maintainers: + - email: team-dev@projectvoltron.dev + name: Voltron Dev Team + url: https://projectvoltron.dev + +spec: + appVersion: "2.x.x" + + additionalInput: + typeInstances: + postgresql: + typeRef: + path: cap.type.database.postgresql.config + revision: 0.1.0 + verbs: [ "get" ] + + additionalOutput: + typeInstances: + confluence-helm-release: + typeRef: + path: cap.type.helm.chart.release + revision: 0.1.0 + database: + typeRef: + path: cap.type.postgresql.database + revision: 0.1.0 + typeInstanceRelations: + confluence-config: + uses: + - confluence-helm-release + - postgresql + - database + + implements: + - path: cap.interface.productivity.confluence.install + revision: 0.1.0 + + requires: + cap.core.type.platform: + oneOf: + - name: kubernetes + revision: 0.1.0 + + imports: + - interfaceGroupPath: cap.interface.runner.argo + alias: argo + methods: + - name: run + revision: 0.1.0 + - interfaceGroupPath: cap.interface.runner.helm + alias: helm + methods: + - name: run + revision: 0.1.0 + - interfaceGroupPath: cap.interface.database.postgresql + alias: postgresql + methods: + - name: install + revision: 0.1.0 + - name: create-db + revision: 0.1.0 + - interfaceGroupPath: cap.interface.templating.jinja2 + alias: jinja2 + methods: + - name: template + revision: 0.1.0 + + action: + runnerInterface: argo.run + args: + workflow: + entrypoint: main + templates: + - name: main + # Voltron Engine will inject the 'input-parameters' artifacts into the workflow entrypoint. + # It contains the Interface parameters, in our case it is `confluence.install-input`. + inputs: + artifacts: + - name: input-parameters + steps: + # If the postgresql TypeInstance was not provided, then create it + # using the imported 'postgresql.install' Interface. + - - name: install-db + voltron-action: postgresql.install + voltron-when: postgresql == nil + arguments: + artifacts: + - name: input-parameters + raw: + data: | + superuser: + username: superuser + password: okon + defaultDBName: postgres + + # Create the database for Confluence in our PostgreSQL instance + # using the imported 'postgresql.create-db' Interface + - - name: create-db + voltron-action: postgresql.create-db + voltron-outputTypeInstances: + - name: database # Defining the output TypeInstance 'database' + from: database + arguments: + artifacts: + - name: postgresql + from: "{{workflow.outputs.artifacts.postgresql}}" + - name: database-input + raw: + data: | + name: confluencedb + owner: superuser + + # Here we prepare the input for the Helm runner. In the next two steps, + # we use Jinja2 to render the input and fill the required parameters. + # In the future there might be better way to do this. + - - name: render-helm-args + voltron-action: jinja2.template + arguments: + artifacts: + - name: template + raw: + data: | + command: "install" + generateName: true + chart: + name: "confluence-server" + repo: "https://helm.mox.sh" + output:{% raw %} + goTemplate: + version: {{ '"{{ .Values.image.tag }}"' }} + host: {{ "'{{ template \"confluence-server.fullname\" . }}'" }}{% endraw %} + values: + postgresql: + enabled: false + databaseConnection: + host: "{{ host }}" + user: "{{ superuser.username }}" + password: "{{ superuser.password }}" + {% raw %}database: "{{ name }}"{% endraw %} + ingress: + enabled: true + hosts: + - host: confluence.voltron.local + paths: ['/'] + - name: input-parameters + from: "{{workflow.outputs.artifacts.postgresql}}" + + - - name: fill-params-in-helm-args + voltron-action: jinja2.template + arguments: + artifacts: + - name: template + from: "{{steps.render-helm-args.outputs.artifacts.render}}" + - name: input-parameters + from: "{{steps.create-db.outputs.artifacts.database}}" + + # Execute the Helm runner, with the input parameters created in the previous step. + # This will create the Helm chart and deploy our Confluence instance + - - name: helm-run + voltron-action: helm.run + voltron-outputTypeInstances: + - name: confluence-config # Defining the output TypeInstance 'confluence-config' + from: additional + - name: confluence-helm-release # Defining the output TypeInstance 'confluence-helm-release' + from: helm-release + arguments: + artifacts: + - name: input-parameters + from: "{{steps.fill-params-in-helm-args.outputs.artifacts.render}}" + - name: runner-context + from: "{{workflow.outputs.artifacts.runner-context}}" + +signature: + och: eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 diff --git a/och-content/implementation/atlassian/jira/install.yaml b/och-content/implementation/atlassian/jira/install.yaml index 098189fc7..eee97daa4 100644 --- a/och-content/implementation/atlassian/jira/install.yaml +++ b/och-content/implementation/atlassian/jira/install.yaml @@ -37,6 +37,7 @@ spec: uses: - jira-helm-release - postgresql + - database implements: - path: cap.interface.productivity.jira.install @@ -56,7 +57,6 @@ spec: revision: 0.1.0 - interfaceGroupPath: cap.interface.runner.helm alias: helm - appVersion: 3.x.x methods: - name: run revision: 0.1.0 @@ -84,6 +84,7 @@ spec: steps: - - name: install-db voltron-when: postgresql == nil # conditional execution + voltron-action: postgresql.install arguments: # TODO: password should be generated or populated by user artifacts: @@ -91,12 +92,26 @@ spec: raw: data: | superuser: - username: jira + username: superuser password: okon - defaultDBName: jira - voltron-action: postgresql.install + defaultDBName: postgres - - - name: create-helm-args + - - name: create-db + voltron-action: postgresql.create-db + voltron-outputTypeInstances: + - name: database + from: database + arguments: + artifacts: + - name: postgresql + from: "{{workflow.outputs.artifacts.postgresql}}" + - name: database-input + raw: + data: | + name: jiradb + owner: superuser + + - - name: render-helm-args voltron-action: jinja2.template arguments: artifacts: @@ -110,8 +125,8 @@ spec: repo: "https://helm.mox.sh" output:{% raw %} goTemplate: - version: "{{ .Values.image.tag }}" - host: '{{ template "jira-software.fullname" . }}'{% endraw %} + version: {{ '"{{ .Values.image.tag }}"' }} + host: {{ "'{{ template \"jira-software.fullname\" . }}'" }}{% endraw %} values: postgresql: enabled: false @@ -119,7 +134,7 @@ spec: host: "{{ host }}" user: "{{ superuser.username }}" password: "{{ superuser.password }}" - database: "{{ defaultDBName }}" + {% raw %}database: "{{ name }}"{% endraw %} ingress: enabled: true hosts: @@ -128,6 +143,15 @@ spec: - name: input-parameters from: "{{workflow.outputs.artifacts.postgresql}}" + - - name: fill-params-in-helm-args + voltron-action: jinja2.template + arguments: + artifacts: + - name: template + from: "{{steps.render-helm-args.outputs.artifacts.render}}" + - name: input-parameters + from: "{{steps.create-db.outputs.artifacts.database}}" + - - name: helm-run voltron-action: helm.run voltron-outputTypeInstances: @@ -138,7 +162,7 @@ spec: arguments: artifacts: - name: input-parameters - from: "{{steps.create-helm-args.outputs.artifacts.render}}" + from: "{{steps.fill-params-in-helm-args.outputs.artifacts.render}}" - name: runner-context from: "{{workflow.outputs.artifacts.runner-context}}" diff --git a/och-content/implementation/postgresql/create-db.yaml b/och-content/implementation/postgresql/create-db.yaml new file mode 100644 index 000000000..f0aabcdd2 --- /dev/null +++ b/och-content/implementation/postgresql/create-db.yaml @@ -0,0 +1,115 @@ +ocfVersion: 0.0.1 +revision: 0.1.0 +kind: Implementation +metadata: + prefix: cap.implementation.postgresql + name: create-db + displayName: Create Postgresql database + description: Action which creates a database on a Postgresql instance + documentationURL: https://www.postgresql.org/docs/ + supportURL: https://www.postgresql.org/ + license: + name: "Apache 2.0" + maintainers: + - email: team-dev@projectvoltron.dev + name: Voltron Dev Team + url: https://projectvoltron.dev + +spec: + appVersion: "8.x.x" + + implements: + - path: cap.interface.database.postgresql.create-db + revision: 0.1.0 + + requires: + cap.core.type.platform: + oneOf: + - name: kubernetes + revision: 0.1.0 + + imports: + - interfaceGroupPath: cap.interface.runner.argo + alias: argo + methods: + - name: run + revision: 0.1.0 + - interfaceGroupPath: cap.interface.templating.jinja2 + alias: jinja2 + methods: + - name: template + revision: 0.1.0 + + action: + runnerInterface: argo.run + args: + workflow: + entrypoint: main + templates: + - name: main + inputs: + artifacts: + - name: postgresql + - name: database-input + outputs: + artifacts: + - name: database + from: "{{steps.create-db.outputs.artifacts.database}}" + steps: + - - name: render-create-db-script + voltron-action: jinja2.template + arguments: + artifacts: + - name: template + raw: + data: | + export PGPASSWORD={{superuser.password}} + PSQL_CMD="psql -h {{host}} -U {{superuser.username}} {{defaultDBName}} -c" + {% raw %} + ${PSQL_CMD} "CREATE DATABASE {{name}}" + ${PSQL_CMD} "GRANT ALL PRIVILEGES ON DATABASE {{name}} TO {{owner}}" + + cat < /database.yml + name: {{name}} + owner: {{owner}} + tablespace: "" + EOF + {% endraw %} + - name: input-parameters + from: "{{inputs.artifacts.postgresql}}" + + - - name: fill-params-in-create-db-script + voltron-action: jinja2.template + arguments: + artifacts: + - name: template + from: "{{steps.render-create-db-script.outputs.artifacts.render}}" + - name: input-parameters + from: "{{inputs.artifacts.database-input}}" + + - - name: create-db + template: create-psql-db + voltron-outputTypeInstances: + - name: database + from: database + arguments: + artifacts: + - name: script + from: "{{steps.fill-params-in-create-db-script.outputs.artifacts.render}}" + + - name: create-psql-db + inputs: + artifacts: + - name: script + path: /script.sh + container: + image: postgres:11 + command: [bash] + args: ["/script.sh"] + outputs: + artifacts: + - name: database + path: /database.yml + +signature: + och: eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 diff --git a/och-content/interface/database/postgresql/create-db.yaml b/och-content/interface/database/postgresql/create-db.yaml new file mode 100644 index 000000000..5a3c36384 --- /dev/null +++ b/och-content/interface/database/postgresql/create-db.yaml @@ -0,0 +1,47 @@ +ocfVersion: 0.0.1 +revision: 0.1.0 +kind: Interface +metadata: + prefix: cap.interface.database.postgresql + name: create-db + displayName: Create database + description: Create database action for PostgreSQL + documentationURL: https://www.postgresql.org/docs/ + supportURL: https://www.postgresql.org/ + iconURL: https://www.postgresql.org/media/img/about/press/elephant.png + maintainers: + - email: team-dev@projectvoltron.dev + name: Voltron Dev Team + url: https://projectvoltron.dev + +spec: + input: + typeInstances: + postgresql: + typeRef: + path: cap.type.database.postgresql.config + revision: 0.1.0 + verbs: ["get"] + parameters: + input-parameters: + jsonSchema: + value: |- + { + "$schema": "http://json-schema.org/draft-07/schema", + "$ocfRefs": { + "inputType": { + "name": "cap.type.database.postgresql.database-input", + "revision": "0.1.0" + } + }, + "allOf": [ { "$ref": "#/$ocfRefs/inputType" } ] + } + output: + typeInstances: + database: + typeRef: + path: cap.type.database.postgresql.database + revision: 0.1.0 + +signature: + och: eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 diff --git a/och-content/interface/database/postgresql/install.yaml b/och-content/interface/database/postgresql/install.yaml index c0e93aa6f..9cedb8e6d 100644 --- a/och-content/interface/database/postgresql/install.yaml +++ b/och-content/interface/database/postgresql/install.yaml @@ -17,18 +17,19 @@ metadata: spec: input: parameters: - jsonSchema: - value: |- - { - "$schema": "http://json-schema.org/draft-07/schema", - "$ocfRefs": { - "inputType": { - "name": "cap.type.database.postgresql.install-input", - "revision": "0.1.0" - } - }, - "allOf": [ { "$ref": "#/$ocfRefs/inputType" } ] - } + input-parameters: + jsonSchema: + value: |- + { + "$schema": "http://json-schema.org/draft-07/schema", + "$ocfRefs": { + "inputType": { + "name": "cap.type.database.postgresql.install-input", + "revision": "0.1.0" + } + }, + "allOf": [ { "$ref": "#/$ocfRefs/inputType" } ] + } output: typeInstances: postgresql: diff --git a/och-content/interface/productivity/confluence.yaml b/och-content/interface/productivity/confluence.yaml new file mode 100644 index 000000000..82d37fd08 --- /dev/null +++ b/och-content/interface/productivity/confluence.yaml @@ -0,0 +1,18 @@ +ocfVersion: 0.0.1 +revision: 0.1.0 +kind: InterfaceGroup +metadata: + prefix: cap.interface.productivity + name: confluence + displayName: "Confluence Server" + description: "Confluence is a document collaboration tool" + documentationURL: https://support.atlassian.com/bitbucket-cloud/ + supportURL: https://support.atlassian.com/bitbucket-cloud/ + iconURL: https://www.atlassian.com/pl/dam/jcr:e33efd9e-e0b8-4d61-a24d-68a48ef99ed5/Jira%20Software@2x-blue.png + maintainers: + - email: team-dev@projectvoltron.dev + name: Voltron Dev Team + url: https://projectvoltron.dev + +signature: + och: eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 diff --git a/och-content/interface/productivity/confluence/install.yaml b/och-content/interface/productivity/confluence/install.yaml new file mode 100644 index 000000000..3b63489d0 --- /dev/null +++ b/och-content/interface/productivity/confluence/install.yaml @@ -0,0 +1,41 @@ +ocfVersion: 0.0.1 +revision: 0.1.0 +kind: Interface +metadata: + prefix: cap.interface.productivity.confluence + name: install + displayName: "Install Confluence" + description: "Confluence is a document collaboration tool" + documentationURL: https://support.atlassian.com/confluence/ + supportURL: https://support.atlassian.com/confluence/ + iconURL: https://wac-cdn.atlassian.com/dam/jcr:d6e2d2db-e58a-40f7-9d1a-d6d22a335c96/Confluence-blue.svg + maintainers: + - email: team-dev@projectvoltron.dev + name: Voltron Dev Team + url: https://projectvoltron.dev + +spec: + input: + parameters: + input-parameters: + jsonSchema: + value: |- + { + "$schema": "http://json-schema.org/draft-07/schema", + "$ocfRefs": { + "inputType": { + "name": "cap.type.productivity.confluence.install-input", + "revision": "0.1.0" + } + }, + "allOf": [ { "$ref": "#/$ocfRefs/inputType" } ] + } + output: + typeInstances: + jira-config: + typeRef: + path: cap.type.productivity.confluence.config + revision: 0.1.0 + +signature: + och: eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 diff --git a/och-content/interface/productivity/jira/install.yaml b/och-content/interface/productivity/jira/install.yaml index 981455e6e..24830bbe7 100644 --- a/och-content/interface/productivity/jira/install.yaml +++ b/och-content/interface/productivity/jira/install.yaml @@ -17,18 +17,19 @@ metadata: spec: input: parameters: - jsonSchema: - value: |- - { - "$schema": "http://json-schema.org/draft-07/schema", - "$ocfRefs": { - "inputType": { - "name": "cap.type.productivity.jira.install-input", - "revision": "0.1.0" - } - }, - "allOf": [ { "$ref": "#/$ocfRefs/inputType" } ] - } + input-parameters: + jsonSchema: + value: |- + { + "$schema": "http://json-schema.org/draft-07/schema", + "$ocfRefs": { + "inputType": { + "name": "cap.type.productivity.jira.install-input", + "revision": "0.1.0" + } + }, + "allOf": [ { "$ref": "#/$ocfRefs/inputType" } ] + } output: typeInstances: jira-config: diff --git a/och-content/interface/runner/argo/run.yaml b/och-content/interface/runner/argo/run.yaml index 9e2f7641f..bf42286e1 100644 --- a/och-content/interface/runner/argo/run.yaml +++ b/och-content/interface/runner/argo/run.yaml @@ -17,18 +17,19 @@ spec: abstract: true # It cannot be implemented input: parameters: - jsonSchema: - value: |- - { - "$schema": "http://json-schema.org/draft-07/schema", - "$ocfRefs": { - "inputType": { - "name": "cap.type.runner.argo.run-input", - "revision": "0.1.0" - } - }, - "allOf": [ { "$ref": "#/$ocfRefs/inputType" } ] - } + input-parameters: + jsonSchema: + value: |- + { + "$schema": "http://json-schema.org/draft-07/schema", + "$ocfRefs": { + "inputType": { + "name": "cap.type.runner.argo.run-input", + "revision": "0.1.0" + } + }, + "allOf": [ { "$ref": "#/$ocfRefs/inputType" } ] + } typeInstances: runner-context: typeRef: @@ -37,6 +38,5 @@ spec: verbs: [ "get" ] output: {} - signature: och: eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 diff --git a/och-content/interface/runner/cloudsql/run.yaml b/och-content/interface/runner/cloudsql/run.yaml index 1bbe6b478..04a75869c 100644 --- a/och-content/interface/runner/cloudsql/run.yaml +++ b/och-content/interface/runner/cloudsql/run.yaml @@ -15,18 +15,19 @@ metadata: spec: input: parameters: - jsonSchema: - value: |- - { - "$schema": "http://json-schema.org/draft-07/schema", - "$ocfRefs": { - "inputType": { - "name": "cap.type.runner.cloudsql.run-input", - "revision": "0.1.0" - } - }, - "allOf": [ { "$ref": "#/$ocfRefs/inputType" } ] - } + input-parameters: + jsonSchema: + value: |- + { + "$schema": "http://json-schema.org/draft-07/schema", + "$ocfRefs": { + "inputType": { + "name": "cap.type.runner.cloudsql.run-input", + "revision": "0.1.0" + } + }, + "allOf": [ { "$ref": "#/$ocfRefs/inputType" } ] + } typeInstances: runner-context: typeRef: diff --git a/och-content/interface/runner/helm/run.yaml b/och-content/interface/runner/helm/run.yaml index 65b4c1019..6256588ea 100644 --- a/och-content/interface/runner/helm/run.yaml +++ b/och-content/interface/runner/helm/run.yaml @@ -16,18 +16,19 @@ metadata: spec: input: parameters: - jsonSchema: - value: |- - { - "$schema": "http://json-schema.org/draft-07/schema", - "$ocfRefs": { - "inputType": { - "name": "cap.type.runner.helm.run-input", - "revision": "0.1.0" - } - }, - "allOf": [ { "$ref": "#/$ocfRefs/inputType" } ] - } + input-parameters: + jsonSchema: + value: |- + { + "$schema": "http://json-schema.org/draft-07/schema", + "$ocfRefs": { + "inputType": { + "name": "cap.type.runner.helm.run-input", + "revision": "0.1.0" + } + }, + "allOf": [ { "$ref": "#/$ocfRefs/inputType" } ] + } typeInstances: runner-context: typeRef: diff --git a/och-content/interface/templating/jinja2/template.yaml b/och-content/interface/templating/jinja2/template.yaml index 1651796eb..7a599eaf6 100644 --- a/och-content/interface/templating/jinja2/template.yaml +++ b/och-content/interface/templating/jinja2/template.yaml @@ -17,18 +17,33 @@ metadata: spec: input: parameters: - jsonSchema: - value: |- - { - "$schema": "http://json-schema.org/draft-07/schema", - "$ocfRefs": { - "inputType": { - "name": "cap.core.type.generic.value", - "revision": "0.0.1" - } - }, - "allOf": [ { "$ref": "#/$ocfRefs/inputType" } ] - } + input-parameters: + jsonSchema: + value: |- + { + "$schema": "http://json-schema.org/draft-07/schema", + "$ocfRefs": { + "inputType": { + "name": "cap.core.type.generic.value", + "revision": "0.0.1" + } + }, + "allOf": [ { "$ref": "#/$ocfRefs/inputType" } ] + } + template: + jsonSchema: + value: |- + { + "$schema": "http://json-schema.org/draft-07/schema", + "$ocfRefs": { + "inputType": { + "name": "cap.core.type.generic.value", + "revision": "0.0.1" + } + }, + "allOf": [ { "$ref": "#/$ocfRefs/inputType" } ] + } + output: typeInstances: render: diff --git a/och-content/type/database/postgresql/role-input.yaml b/och-content/type/database/postgresql/role-input.yaml new file mode 100644 index 000000000..402952bf0 --- /dev/null +++ b/och-content/type/database/postgresql/role-input.yaml @@ -0,0 +1,47 @@ +ocfVersion: 0.0.1 +revision: 0.1.0 +kind: Type +metadata: + name: role-input + prefix: cap.type.database.postgresql + displayName: PostgreSQL Role Input + description: Defines PostgreSQL role input + documentationURL: https://projectvoltron.dev + supportURL: https://projectvoltron.dev + maintainers: + - email: team-dev@projectvoltron.dev + name: Voltron Dev Team + url: https://projectvoltron.dev +spec: + jsonSchema: + value: |- + { + "$schema": "http://json-schema.org/draft-07/schema", + "type": "object", + "title": "The schema for PostgreSQL role input", + "examples": [ + { + "name": "roleName", + "password": "some_secret", + } + ], + "required": [ + "name", + ], + "properties": { + "name": { + "$id": "#/properties/name", + "type": "string", + "title": "Role name", + }, + "password": { + "$id": "#/properties/password", + "type": "string", + "title": "Role password", + }, + }, + "additionalProperties": false + } + +signature: + och: eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 diff --git a/och-content/type/database/postgresql/role.yaml b/och-content/type/database/postgresql/role.yaml new file mode 100644 index 000000000..cb6fa0a45 --- /dev/null +++ b/och-content/type/database/postgresql/role.yaml @@ -0,0 +1,48 @@ +ocfVersion: 0.0.1 +revision: 0.1.0 +kind: Type +metadata: + name: role + prefix: cap.type.database.postgresql # Computed during fetching the manifest + displayName: PostgreSQL role + description: Defines PostgreSQL role + documentationURL: https://projectvoltron.dev + supportURL: https://projectvoltron.dev + maintainers: + - email: team-dev@projectvoltron.dev + name: Voltron Dev Team + url: https://projectvoltron.dev +spec: + jsonSchema: + value: |- + { + "$schema": "http://json-schema.org/draft-07/schema", + "type": "object", + "title": "The schema for PostgreSQL database", + "examples": [ + { + "name": "roleName", + "password": "some_secret", + } + ], + "required": [ + "name", + "password" + ], + "properties": { + "name": { + "$id": "#/properties/name", + "type": "string", + "title": "Role name", + }, + "password": { + "$id": "#/properties/password", + "type": "string", + "title": "Role password", + }, + }, + "additionalProperties": false + } + +signature: + och: eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 diff --git a/och-content/type/productivity/confluence/config.yaml b/och-content/type/productivity/confluence/config.yaml new file mode 100644 index 000000000..a1e647dbb --- /dev/null +++ b/och-content/type/productivity/confluence/config.yaml @@ -0,0 +1,49 @@ +ocfVersion: 0.0.1 +revision: 0.1.0 +kind: Type +metadata: + name: config + prefix: cap.type.productivity.confluence + displayName: Confluence instance config + description: Defines configuration for Confluence instance + documentationURL: https://support.atlassian.com/confluence-cloud/ + supportURL: https://www.atlassian.com/software/confluence + iconURL: https://wac-cdn.atlassian.com/dam/jcr:d6e2d2db-e58a-40f7-9d1a-d6d22a335c96/Confluence-blue.svg + maintainers: + - email: team-dev@projectvoltron.dev + name: Voltron Dev Team + url: https://projectvoltron.dev + +spec: + jsonSchema: + value: |- + { + "$schema": "http://json-schema.org/draft-07/schema", + "type": "object", + "title": "The schema for Jira configuration", + "required": [ + "version" + ], + "$ocfRefs": { + "semVer": { + "name": "cap.core.type.versioning.semver", + "revision": "0.1.0" + } + "hostname": { + "name": "cap.core.type.networking.hostname", + "revision": "0.1.0" + } + }, + "properties": { + "version": { + "$ref": "#/$ocfRefs/semVer" + } + "host": { + "$ref": "#/$ocfRefs/hostname" + } + }, + "additionalProperties": true + } + +signature: + och: eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 diff --git a/och-content/type/productivity/confluence/install-input.yaml b/och-content/type/productivity/confluence/install-input.yaml new file mode 100644 index 000000000..6387d777e --- /dev/null +++ b/och-content/type/productivity/confluence/install-input.yaml @@ -0,0 +1,42 @@ +ocfVersion: 0.0.1 +revision: 0.1.0 +kind: Type +metadata: + name: install-input + prefix: cap.type.productivity.confluence + displayName: Confluence installation input + description: Defines installation parameters for Confluence + documentationURL: https://support.atlassian.com/confluence-cloud/ + supportURL: https://www.atlassian.com/software/confluence + iconURL: https://wac-cdn.atlassian.com/dam/jcr:d6e2d2db-e58a-40f7-9d1a-d6d22a335c96/Confluence-blue.svg + maintainers: + - email: team-dev@projectvoltron.dev + name: Voltron Dev Team + url: https://projectvoltron.dev + +spec: + jsonSchema: + value: |- + { + "$schema": "http://json-schema.org/draft-07/schema", + "type": "object", + "title": "The schema for Jira configuration", + "required": [ + "host" + ], + "$ocfRefs": { + "hostname": { + "name": "cap.core.type.networking.hostname", + "revision": "0.1.0" + } + }, + "properties": { + "host": { + "$ref": "#/$ocfRefs/hostname" + } + }, + "additionalProperties": true + } + +signature: + och: eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 diff --git a/och-content/type/runner/cloudsql/run-input.yaml b/och-content/type/runner/cloudsql/run-input.yaml index 0c47da983..389428b42 100644 --- a/och-content/type/runner/cloudsql/run-input.yaml +++ b/och-content/type/runner/cloudsql/run-input.yaml @@ -70,6 +70,11 @@ spec: "additionalProperties": true, "default": {}, "title": "Describes platform-specific values" + }, + "timeout": { + "$id": "#/properties/context/properties/timeout", + "type": "string", + "title": "Time, after which the runner execution will be cancelled" } }, "additionalProperties": false diff --git a/och-content/type/runner/helm/run-input.yaml b/och-content/type/runner/helm/run-input.yaml index 6fc0439b9..d854bcc20 100644 --- a/och-content/type/runner/helm/run-input.yaml +++ b/och-content/type/runner/helm/run-input.yaml @@ -23,29 +23,43 @@ spec: "examples": [ { "context": { + "name": "helm-example", + "dryRun": false, + "timeout": "10m", "platform": { - "foo": "bar" - }, - "name": "foo", - "dryRun": false + "namespace": "default" + } }, "args": { "command": "install", - "name": "foo", + "generateName": true, "chart": { "name": "postgresql", - "repo": "https://charts.bitnami.com/bitnami" + "repo": "https://charts.bitnami.com/bitnami", + "version": "10.2.0" + }, + "values": { + "fullnameOverride": "postgresql-server", + "postgresqlDatabase": "postgres", + "postgresqlPassword": "s3cr3t" }, "output": { - "directory": "./", - "helmRelease": { "fileName": "release.yaml" } + "goTemplate": { + "host": "{{ template \"postgresql.primary.fullname\" . }}", + "port": "{{ template \"postgresql.port\" . }}", + "defaultDBName": "{{ template \"postgresql.database\" . }}", + "superuser": { + "username": "{{ template \"postgresql.username\" . }}", + "password": "{{ template \"postgresql.password\" . }}" + } + } } } } ], "required": [ - "context", - "args" + "context", + "args" ], "properties": { "context": { @@ -53,8 +67,8 @@ spec: "type": "object", "title": "Runner context", "required": [ - "dryRun", - "name" + "dryRun", + "name" ], "properties": { "dryRun": { @@ -74,6 +88,11 @@ spec: "additionalProperties": true, "default": {}, "title": "Describes platform-specific values" + }, + "timeout": { + "$id": "#/properties/context/properties/timeout", + "type": "string", + "title": "Time, after which the runner execution will be cancelled" } }, "additionalProperties": false @@ -84,17 +103,17 @@ spec: "title": "Arguments for Helm Runner", "additionalProperties": false, "required": [ - "command", - "chart" + "command", + "chart" ], "properties": { "command": { "$id": "#/properties/args/properties/command", "type": "string", "enum": [ - "install", - "upgrade", - "delete" + "install", + "upgrade", + "delete" ], "title": "The command to run for Helm" }, @@ -108,7 +127,7 @@ spec: "type": "object", "title": "The chart data", "required": [ - "name" + "name" ], "properties": { "name": { @@ -165,7 +184,9 @@ spec: "type": "object", "title": "The parameters for output files", "additionalProperties": false, - "required": ["goTemplate"], + "required": [ + "goTemplate" + ], "properties": { "goTemplate": { "$id": "#/properties/args/properties/output/properties/goTemplate",