From a39231836b777bf9d241d693faed7e3139d1106c Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Thu, 1 Jun 2023 15:00:52 +0100 Subject: [PATCH 01/39] Rename databricks IDE development workflow Signed-off-by: Jannic Holzer --- ...lopment_workflow.md => databricks_ide_development_workflow.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/source/integrations/{databricks_development_workflow.md => databricks_ide_development_workflow.md} (100%) diff --git a/docs/source/integrations/databricks_development_workflow.md b/docs/source/integrations/databricks_ide_development_workflow.md similarity index 100% rename from docs/source/integrations/databricks_development_workflow.md rename to docs/source/integrations/databricks_ide_development_workflow.md From f0c03949189e59b9e721e9b8e44043f7113d9ab3 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Thu, 1 Jun 2023 15:01:17 +0100 Subject: [PATCH 02/39] Add new docs pages to index Signed-off-by: Jannic Holzer --- docs/source/integrations/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/source/integrations/index.md b/docs/source/integrations/index.md index fbd37440f9..5447ae98a9 100644 --- a/docs/source/integrations/index.md +++ b/docs/source/integrations/index.md @@ -7,7 +7,8 @@ :maxdepth: 1 databricks_workspace.md -databricks_development_workflow.md +databricks_ide_development_workflow.md +databricks_notebooks_development_workflow.md databricks_visualisation.md ``` From 20d880a3a22cf34a1002880f217960bfee80a0fa Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Thu, 1 Jun 2023 15:01:42 +0100 Subject: [PATCH 03/39] Add first draft of workspace-only workflow Signed-off-by: Jannic Holzer --- ...tabricks_notebooks_development_workflow.md | 203 ++++++++++++++++++ .../meta/images/databricks_edit_file.png | Bin 0 -> 24075 bytes 2 files changed, 203 insertions(+) create mode 100644 docs/source/integrations/databricks_notebooks_development_workflow.md create mode 100644 docs/source/meta/images/databricks_edit_file.png diff --git a/docs/source/integrations/databricks_notebooks_development_workflow.md b/docs/source/integrations/databricks_notebooks_development_workflow.md new file mode 100644 index 0000000000..03e6c9c4cb --- /dev/null +++ b/docs/source/integrations/databricks_notebooks_development_workflow.md @@ -0,0 +1,203 @@ +# Developing Kedro projects on Databricks using notebooks + +This guide demonstrates a workflow for developing Kedro projects on Databricks using only Databricks notebooks and Repos. The approach explained on this page enables you to develop and test your Kedro projects entirely within the Databricks workspace. + +This method of developing a Kedro project for use on Databricks is ideal for developers who prefer developing their projects in notebooks and do not use an IDE and avoids the overhead of setting up and syncing a local environment with Databricks. If you normally develop your projects in an IDE, consider following the [guide for developing a Kedro project for Databricks using your local environment](./databricks_ide_development_workflow.md). + +## What this page covers + +This tutorial introduces a project development workflow on Databricks using only the Databricks workspace. The main steps in this workflow are: + +- [Create a new Kedro project using the `databricks-iris` starter.](#create-a-new-kedro-project) +- [Create a Databricks notebook to run your project.](#create-a-new-databricks-notebook) +- [Copy project data to DBFS.](#copy-project-data-to-dbfs-using-dbutils) +- [Modify your project in the Databricks workspace](#modify-your-project-and-test-the-changes) + +## Prerequisites + +- An active [Databricks deployment](https://docs.databricks.com/getting-started/index.html). +- A [Databricks cluster](https://docs.databricks.com/clusters/configure.html) configured with a recent version (>= 11.3 is recommended) of the Databricks runtime. +- Python >= 3.7 installed. + +## Set up your project + +### Note your Databricks username and host + +Note your Databricks **username** and **host** as you will need it for the remainder of this guide. + +Find your Databricks username in the top right of the workspace UI and the host in the browser's URL bar, up to the first slash (e.g., `https://adb-123456789123456.1.azuredatabricks.net/`): + +![Find Databricks host and username](../meta/images/find_databricks_host_and_username.png) + +```{note} +Your databricks host must include the protocol (`https://`). +``` + +### Install Kedro in a new virtual environment + +In your local development environment, create a virtual environment for this tutorial using Conda: + +```bash +conda create --name iris-databricks python=3.10 +``` + +Once it is created, activate it: + +```bash +conda activate iris-databricks +``` + +### Create a new Kedro project + +Create a Kedro project with the `databricks-iris` starter using the following command in your local environment: + +```bash +kedro new --starter=databricks-iris +``` + +Name your new project `iris-databricks` for consistency with the rest of this guide. This command creates a new Kedro project using the `databricks-iris` starter template. + +### Create a repo on Databricks + +Create a new repo on Databricks by navigating to `New` tab in the Databricks workspace UI side bar and clicking `Repo` in the drop-down menu that appears. + +In this guide, you will not sync your project with a remote Git provider, so uncheck `Create repo by cloning a Git repository` and enter `iris-databricks` as the name of your new repository: + +![Create a new repo on Databricks](../meta/images/databricks_repo_creation.png) + +### Create a `conf/local` directory in your Databricks repo + +Kedro requires your project to have a `conf/local` directory to exist to successfully run, even if it is empty. `dbx sync` does not copy the contents of your local `conf/local` directory to your Databricks repo, so you must create it manually. + +Open the Databricks workspace UI and using the panel on the left, navigate to `Repos -> -> iris-databricks -> conf`, right click and select `Create -> Folder` as in the image below: + +![Create a conf folder in Databricks repo](../meta/images/databricks_conf_folder_creation.png) + +Name the new folder `local`. In this guide, we have no local credentials to store and so we will leave the newly created folder empty. Your `conf/local` and `local` directories should now look like the following: + +![Final conf folder](../meta/images/final_conf_folder.png) + +### Create a new Databricks notebook + +Now that your project is available on Databricks, you can run it on a cluster using a notebook. + +To run the Python code from your Databricks repo, [create a new Python notebook](https://docs.databricks.com/notebooks/notebooks-manage.html#create-a-notebook) in your workspace. Name it `iris-databricks` for traceability and attach it to your cluster: + +![Create a new notebook on Databricks](../meta/images/databricks_notebook_creation.png) + +### Copy project data to DBFS using dbutils + +On Databricks, Kedro cannot access data stored directly in your project's directory. As a result, you'll need to move your project's data to a location accessible by Databricks. You can store your project's data in the Databricks File System (DBFS), where it is accessible. + +A number of methods exist for moving data to DBFS. However, in this guide, you will use your new notebook and `dbutils`. + +To move your locally stored data to DBFS, open your `iris-databricks` notebook and in the first cell enter the following python code: + +```python +dbutils.fs.cp("/Workspace/Repos//iris-databricks/data/", "dbfs:/FileStore/iris-databricks/data", recurse=True) +``` + +Run this cell to copy the complete directory and its contents from your Repo to DBFS. + +To ensure that your data was copied correctly, you can list the contents of the destination directory in DBFS. Create a new cell underneath the first cell and enter the following code: + +```python +display(dbutils.fs.ls("dbfs:/FileStore/iris-databricks/data")) +``` + +Run this command to displays the contents of your project's `data/` directory. You can expect to see the following structure: + +```python +[FileInfo(path='dbfs:/FileStore/iris-databricks/data/01_raw', name='01_raw', size=...), + FileInfo(path='dbfs:/FileStore/iris-databricks/data/02_intermediate', name='02_intermediate', size=...), + FileInfo(path='dbfs:/FileStore/iris-databricks/data/03_primary', name='03_primary', size=...), + FileInfo(path='dbfs:/FileStore/iris-databricks/data/04_feature', name='04_feature', size=...), + FileInfo(path='dbfs:/FileStore/iris-databricks/data/05_model_input', name='05_model_input', size=...), + FileInfo(path='dbfs:/FileStore/iris-databricks/data/06_models', name='06_models', size=...), + FileInfo(path='dbfs:/FileStore/iris-databricks/data/07_model_output', name='07_model_output', size=...), + FileInfo(path='dbfs:/FileStore/iris-databricks/data/08_reporting', name='08_reporting', size=...)] +``` + +### Run your project + +Create **four new cells** inside your notebook. You will fill these cells with code that runs your project. When copying the following code snippets, remember to replace `` with your username on Databricks such that `project_root` correctly points to your project's location. + +1. Before you import and run your Python code, you'll need to install your project's dependencies on the cluster attached to your notebook. Your project has a `requirements.txt` file for this purpose. Add the following code to the first new cell to install the dependencies: + +```ipython +%pip install -r "/Workspace/Repos//iris-databricks/src/requirements.txt" +``` + +2. To run your project in your notebook, you must load the Kedro IPython extension. Add the following code to the second new cell to load the IPython extension: + +```ipython +%load_ext kedro.ipython +``` + +3. Loading the extension allows you to use the `%reload_kedro` line magic to load your Kedro project. Add the following code to the third new cell to load your Kedro project: + +```ipython +%reload_kedro /Workspace/Repos//iris-databricks +``` + +4. Loading your Kedro project with the `%reload_kedro` line magic will define four global variables in your notebook: `context`, `session`, `catalog` and `pipelines`. You will use the `session` variable to run your project. Add the following code to the fourth new cell to run your Kedro project: + +```ipython +session.run() +``` + +After completing these steps, your notebook should match the following image: + +![Databricks completed notebook](../meta/images/databricks_finished_notebook.png) + +Run the completed notebook using the `Run All` bottom in the top right of the UI: + +![Databricks notebook run all](../meta/images/databricks_run_all.png) + +On the first run of your Kedro project, you will be prompted to consent to analytics, type `y` or `N` in the field that appears and press `Enter`: + +![Databricks notebook telemetry consent](../meta/images/databricks_telemetry_consent.png) + +You should see logging output while the cell is running. After execution finishes, you should see output similar to the following: + +```bash +... +[08/09/22 11:23:30] INFO Model has accuracy of 0.960 on test data. nodes.py:74 + INFO Saving data to 'metrics' (MetricsDataSet)... data_catalog.py:382 + INFO Completed 3 out of 3 tasks sequential_runner.py:85 + INFO Pipeline execution completed successfully. runner.py:89 +``` + +## Modify your project and test the changes + +Now that your project has run successfully once, you can make changes using the Databricks UI. In this section, you will modify the project to use a different ratio of training data to test data and check the effect of this change on Databricks. + +### Modify the training / test split ratio + +The `databricks-iris` starter uses a default 80-20 ratio of training data to test data when training the classifier. You will edit this ratio to 70-30 and re-run your project to view the different result. + +In the Databricks workspace, click on the `Repos` tab in the side bar and navigate to `/iris-databricks/conf/base/`. Open the the file `/conf/base/parameters.yml` by double-clicking it. This will take you to a built-in file editor. Edit the line `train_fraction: 0.8` to `train_fraction: 0.7`, your changes will automatically be saved. + +![Databricks edit file](../meta/images/databricks_edit_file.png) + +### Re-run your project + +Return to your Databricks notebook. Re-run the third and fourth cells in your notebook (containing the code `%reload_kedro ...` and `session.run()`). The project will now run again, producing output similar to the following: + +```bash +... +[08/09/22 11:23:30] INFO Model has accuracy of 0.953 on test data. nodes.py:74 + INFO Saving data to 'metrics' (MetricsDataSet)... data_catalog.py:382 + INFO Completed 3 out of 3 tasks sequential_runner.py:85 + INFO Pipeline execution completed successfully. runner.py:89 +``` + +You can see that your model's accuracy has changed now that you are using a different classifier to produce the result. + +```{note} +If your cluster terminates, you must re-run your entire notebook, as libraries installed using `%pip install ...` are ephemeral. If not, repeating this step is only necessary if your project's dependencies change. +``` + +## Summary + +This guide demonstrated a development workflow on Databricks using only the Databricks workspace. This approach is ideal for users who prefer to develop using notebooks \ No newline at end of file diff --git a/docs/source/meta/images/databricks_edit_file.png b/docs/source/meta/images/databricks_edit_file.png new file mode 100644 index 0000000000000000000000000000000000000000..3f50a01e5eac208c289a7b43b11ebfd0e450eb23 GIT binary patch literal 24075 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Ò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 KShrN$9{pcRFhxoL literal 0 HcmV?d00001 From 87b2f115e5b9db29fd751c81be5de3cf2ba24499 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Thu, 1 Jun 2023 15:10:42 +0100 Subject: [PATCH 04/39] Finish summary Signed-off-by: Jannic Holzer --- .../integrations/databricks_notebooks_development_workflow.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/integrations/databricks_notebooks_development_workflow.md b/docs/source/integrations/databricks_notebooks_development_workflow.md index 03e6c9c4cb..e658ebecb9 100644 --- a/docs/source/integrations/databricks_notebooks_development_workflow.md +++ b/docs/source/integrations/databricks_notebooks_development_workflow.md @@ -200,4 +200,4 @@ If your cluster terminates, you must re-run your entire notebook, as libraries i ## Summary -This guide demonstrated a development workflow on Databricks using only the Databricks workspace. This approach is ideal for users who prefer to develop using notebooks \ No newline at end of file +This guide demonstrated a development workflow on Databricks using only the Databricks workspace. This approach is ideal for users who prefer to develop using notebooks and avoids having to set up and sync a local environment with Databricks. From 7b784c7a3b83626bde2c90ebc4768d91b569cc07 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Thu, 1 Jun 2023 17:43:12 +0100 Subject: [PATCH 05/39] Linting Signed-off-by: Jannic Holzer --- .../databricks_notebooks_development_workflow.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index e658ebecb9..1e6e157f92 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -94,7 +94,11 @@ A number of methods exist for moving data to DBFS. However, in this guide, you w To move your locally stored data to DBFS, open your `iris-databricks` notebook and in the first cell enter the following python code: ```python -dbutils.fs.cp("/Workspace/Repos//iris-databricks/data/", "dbfs:/FileStore/iris-databricks/data", recurse=True) +dbutils.fs.cp( + "/Workspace/Repos//iris-databricks/data/", + "dbfs:/FileStore/iris-databricks/data", + recurse=True +) ``` Run this cell to copy the complete directory and its contents from your Repo to DBFS. @@ -107,7 +111,7 @@ display(dbutils.fs.ls("dbfs:/FileStore/iris-databricks/data")) Run this command to displays the contents of your project's `data/` directory. You can expect to see the following structure: -```python +```bash [FileInfo(path='dbfs:/FileStore/iris-databricks/data/01_raw', name='01_raw', size=...), FileInfo(path='dbfs:/FileStore/iris-databricks/data/02_intermediate', name='02_intermediate', size=...), FileInfo(path='dbfs:/FileStore/iris-databricks/data/03_primary', name='03_primary', size=...), From bb96f18d5f54e9cbda67db76e4944023041e18b2 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Thu, 1 Jun 2023 17:46:49 +0100 Subject: [PATCH 06/39] Linter Signed-off-by: Jannic Holzer --- .../databricks/databricks_notebooks_development_workflow.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index 1e6e157f92..87c45e78bd 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -97,7 +97,7 @@ To move your locally stored data to DBFS, open your `iris-databricks` notebook a dbutils.fs.cp( "/Workspace/Repos//iris-databricks/data/", "dbfs:/FileStore/iris-databricks/data", - recurse=True + recurse=True, ) ``` From e0c48c6268ac263704fb1920f43c0e1a3b6fcc54 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Fri, 2 Jun 2023 11:01:29 +0100 Subject: [PATCH 07/39] Fix image links Signed-off-by: Jannic Holzer --- ...atabricks_notebooks_development_workflow.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index 87c45e78bd..d81a3d3d1a 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -27,7 +27,7 @@ Note your Databricks **username** and **host** as you will need it for the remai Find your Databricks username in the top right of the workspace UI and the host in the browser's URL bar, up to the first slash (e.g., `https://adb-123456789123456.1.azuredatabricks.net/`): -![Find Databricks host and username](../meta/images/find_databricks_host_and_username.png) +![Find Databricks host and username](../../meta/images/find_databricks_host_and_username.png) ```{note} Your databricks host must include the protocol (`https://`). @@ -63,7 +63,7 @@ Create a new repo on Databricks by navigating to `New` tab in the Databricks wor In this guide, you will not sync your project with a remote Git provider, so uncheck `Create repo by cloning a Git repository` and enter `iris-databricks` as the name of your new repository: -![Create a new repo on Databricks](../meta/images/databricks_repo_creation.png) +![Create a new repo on Databricks](../../meta/images/databricks_repo_creation.png) ### Create a `conf/local` directory in your Databricks repo @@ -71,11 +71,11 @@ Kedro requires your project to have a `conf/local` directory to exist to success Open the Databricks workspace UI and using the panel on the left, navigate to `Repos -> -> iris-databricks -> conf`, right click and select `Create -> Folder` as in the image below: -![Create a conf folder in Databricks repo](../meta/images/databricks_conf_folder_creation.png) +![Create a conf folder in Databricks repo](../../meta/images/databricks_conf_folder_creation.png) Name the new folder `local`. In this guide, we have no local credentials to store and so we will leave the newly created folder empty. Your `conf/local` and `local` directories should now look like the following: -![Final conf folder](../meta/images/final_conf_folder.png) +![Final conf folder](../../meta/images/final_conf_folder.png) ### Create a new Databricks notebook @@ -83,7 +83,7 @@ Now that your project is available on Databricks, you can run it on a cluster us To run the Python code from your Databricks repo, [create a new Python notebook](https://docs.databricks.com/notebooks/notebooks-manage.html#create-a-notebook) in your workspace. Name it `iris-databricks` for traceability and attach it to your cluster: -![Create a new notebook on Databricks](../meta/images/databricks_notebook_creation.png) +![Create a new notebook on Databricks](../../meta/images/databricks_notebook_creation.png) ### Copy project data to DBFS using dbutils @@ -152,15 +152,15 @@ session.run() After completing these steps, your notebook should match the following image: -![Databricks completed notebook](../meta/images/databricks_finished_notebook.png) +![Databricks completed notebook](../../meta/images/databricks_finished_notebook.png) Run the completed notebook using the `Run All` bottom in the top right of the UI: -![Databricks notebook run all](../meta/images/databricks_run_all.png) +![Databricks notebook run all](../../meta/images/databricks_run_all.png) On the first run of your Kedro project, you will be prompted to consent to analytics, type `y` or `N` in the field that appears and press `Enter`: -![Databricks notebook telemetry consent](../meta/images/databricks_telemetry_consent.png) +![Databricks notebook telemetry consent](../../meta/images/databricks_telemetry_consent.png) You should see logging output while the cell is running. After execution finishes, you should see output similar to the following: @@ -182,7 +182,7 @@ The `databricks-iris` starter uses a default 80-20 ratio of training data to tes In the Databricks workspace, click on the `Repos` tab in the side bar and navigate to `/iris-databricks/conf/base/`. Open the the file `/conf/base/parameters.yml` by double-clicking it. This will take you to a built-in file editor. Edit the line `train_fraction: 0.8` to `train_fraction: 0.7`, your changes will automatically be saved. -![Databricks edit file](../meta/images/databricks_edit_file.png) +![Databricks edit file](../../meta/images/databricks_edit_file.png) ### Re-run your project From b4fb72be9fd6275133a23e4f34b79ca9840d5ae5 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Fri, 2 Jun 2023 11:58:37 +0100 Subject: [PATCH 08/39] Fix broken link Signed-off-by: Jannic Holzer --- .../deployment/databricks/databricks_deployment_workflow.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/deployment/databricks/databricks_deployment_workflow.md b/docs/source/deployment/databricks/databricks_deployment_workflow.md index ee5bbfc329..477616b2fb 100644 --- a/docs/source/deployment/databricks/databricks_deployment_workflow.md +++ b/docs/source/deployment/databricks/databricks_deployment_workflow.md @@ -4,7 +4,7 @@ Databricks jobs are a way to execute code on Databricks clusters, allowing you t ## What are the advantages of packaging a Kedro project to run on Databricks? -By packaging your Kedro project and running it on Databricks, you can execute your pipeline without the need for a notebook. This approach is particularly well-suited for production, as it provides a structured and reproducible way to run your code. However, it is not ideal for development, where rapid iteration is necessary. For guidance on developing a Kedro project for Databricks in a rapid build-test loop, see the [development workflow guide](./databricks_development_workflow.md). +By packaging your Kedro project and running it on Databricks, you can execute your pipeline without the need for a notebook. This approach is particularly well-suited for production, as it provides a structured and reproducible way to run your code. However, it is not ideal for development, where rapid iteration is necessary. For guidance on developing a Kedro project for Databricks in a rapid build-test loop, see the [development workflow guide](./databricks_ide_development_workflow.md). Running your packaged project as a Databricks job is very different to running it from a notebook. In particular, it does **not** allow you to see the log output of your project as you may be used to seeing it when running Kedro from a command line or notebook. From 2b31c925830ce7ad88598b96f302772cb576538c Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Mon, 5 Jun 2023 11:18:52 +0100 Subject: [PATCH 09/39] Change wording Signed-off-by: Jannic Holzer --- ...tabricks_notebooks_development_workflow.md | 65 +++++++++++++++++-- 1 file changed, 60 insertions(+), 5 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index d81a3d3d1a..1c8d02368e 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -1,12 +1,12 @@ # Developing Kedro projects on Databricks using notebooks -This guide demonstrates a workflow for developing Kedro projects on Databricks using only Databricks notebooks and Repos. The approach explained on this page enables you to develop and test your Kedro projects entirely within the Databricks workspace. +This guide demonstrates a workflow for developing Kedro projects on Databricks using only a Databricks Repo and notebooks. The approach explained on this page enables you to develop and test your Kedro projects entirely within the Databricks workspace. -This method of developing a Kedro project for use on Databricks is ideal for developers who prefer developing their projects in notebooks and do not use an IDE and avoids the overhead of setting up and syncing a local environment with Databricks. If you normally develop your projects in an IDE, consider following the [guide for developing a Kedro project for Databricks using your local environment](./databricks_ide_development_workflow.md). +This method of developing a Kedro project for use on Databricks is ideal for developers who prefer developing their projects in notebooks rather than an in an IDE. It also avoids the overhead of setting up and syncing a local environment with Databricks. If you want to take advantage of the powerful features of an IDE to develop your project, consider following the [guide for developing a Kedro project for Databricks using your local environment](./databricks_ide_development_workflow.md). ## What this page covers -This tutorial introduces a project development workflow on Databricks using only the Databricks workspace. The main steps in this workflow are: +This tutorial introduces a project development workflow for Kedro projects using only the Databricks workspace. The main steps in this workflow are: - [Create a new Kedro project using the `databricks-iris` starter.](#create-a-new-kedro-project) - [Create a Databricks notebook to run your project.](#create-a-new-databricks-notebook) @@ -18,6 +18,8 @@ This tutorial introduces a project development workflow on Databricks using only - An active [Databricks deployment](https://docs.databricks.com/getting-started/index.html). - A [Databricks cluster](https://docs.databricks.com/clusters/configure.html) configured with a recent version (>= 11.3 is recommended) of the Databricks runtime. - Python >= 3.7 installed. +- Git installed. +- A [GitHub](https://github.com/) account. ## Set up your project @@ -35,7 +37,7 @@ Your databricks host must include the protocol (`https://`). ### Install Kedro in a new virtual environment -In your local development environment, create a virtual environment for this tutorial using Conda: +In your local development environment, create a virtual environment for this tutorial. Any environment management system can be used, though the following commands use [Conda](https://docs.conda.io/en/latest/): ```bash conda create --name iris-databricks python=3.10 @@ -57,11 +59,64 @@ kedro new --starter=databricks-iris Name your new project `iris-databricks` for consistency with the rest of this guide. This command creates a new Kedro project using the `databricks-iris` starter template. +### Create a GitHub personal access token + +To synchronise your project between your local development environment and Databricks, you will use a private GitHub repository, which you will create in the next step. For authentication, you will need to create a GitHub personal access token. [Create this token in your GitHub developer settings](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token). + +```{note} +Make sure that `repo` scopes are enabled for your token. +``` + +### Create a GitHub repository + +Now you should [create a new repository in GitHub](https://docs.github.com/en/github/getting-started-with-github/create-a-repo) using the official guide. You can keep the repository private and you don't need to commit to it just yet. + +To connect to the newly created repository, use one of two options: + +- **SSH:** If you choose to connect with SSH, you will also need to configure [the SSH connection to GitHub](https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh), unless you already have [an existing SSH key configured for GitHub](https://docs.github.com/en/github/authenticating-to-github/checking-for-existing-ssh-keys) +- **HTTPS:** If using HTTPS, you will be asked for your GitHub username and password when you push your first commit. Use your GitHub username and your [personal access token](#create-a-github-personal-access-token) generated in the previous step as the password, [do _not_ use your original GitHub password](https://docs.github.com/en/rest/overview/authenticating-to-the-rest-api#authenticating-with-username-and-password). + +### Push your Kedro project to the GitHub repository + +At the command line, initialise Git in your project root directory: + +```bash +# change the directory to the project root +cd iris-databricks/ +# initialise git +git init +``` + +Then, create the first commit: + +```bash +# add all files to git staging area +git add . +# create the first commit +git commit -m "first commit" +``` + +Finally, push the commit to GitHub: + +```bash +# configure a new remote +# for HTTPS run: +git remote add origin https://github.com//.git +# or for SSH run: +git remote add origin git@github.com:/.git + +# verify the new remote URL +git remote -v + +# push the first commit +git push --set-upstream origin main +``` + ### Create a repo on Databricks Create a new repo on Databricks by navigating to `New` tab in the Databricks workspace UI side bar and clicking `Repo` in the drop-down menu that appears. -In this guide, you will not sync your project with a remote Git provider, so uncheck `Create repo by cloning a Git repository` and enter `iris-databricks` as the name of your new repository: +In this guide, you sync your project with a remote Git provider, so uncheck `Create repo by cloning a Git repository` and enter `iris-databricks` as the name of your new repository: ![Create a new repo on Databricks](../../meta/images/databricks_repo_creation.png) From 9156c0c29a17c2f0770941bf93072f8ef0237d16 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Mon, 5 Jun 2023 13:08:15 +0100 Subject: [PATCH 10/39] Add Git provider note to beginning of guide Signed-off-by: Jannic Holzer --- .../databricks/databricks_notebooks_development_workflow.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index 1c8d02368e..fd93977834 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -1,9 +1,11 @@ # Developing Kedro projects on Databricks using notebooks -This guide demonstrates a workflow for developing Kedro projects on Databricks using only a Databricks Repo and notebooks. The approach explained on this page enables you to develop and test your Kedro projects entirely within the Databricks workspace. +This guide demonstrates a workflow for developing Kedro projects on Databricks using only a Databricks Repo and a Databricks notebook. The approach explained on this page enables you to develop and test your Kedro projects entirely within the Databricks workspace. This method of developing a Kedro project for use on Databricks is ideal for developers who prefer developing their projects in notebooks rather than an in an IDE. It also avoids the overhead of setting up and syncing a local environment with Databricks. If you want to take advantage of the powerful features of an IDE to develop your project, consider following the [guide for developing a Kedro project for Databricks using your local environment](./databricks_ide_development_workflow.md). +In this guide, you will store your project's code in a repository on [GitHub](https://github.com/). Databricks integrates with many [Git providers](https://docs.databricks.com/repos/index.html#supported-git-providers), including GitLab and Azure Devops. The steps in this guide to create and sync a Git repository with Databricks also apply to these Git providers, though the exact details may vary. + ## What this page covers This tutorial introduces a project development workflow for Kedro projects using only the Databricks workspace. The main steps in this workflow are: @@ -116,7 +118,7 @@ git push --set-upstream origin main Create a new repo on Databricks by navigating to `New` tab in the Databricks workspace UI side bar and clicking `Repo` in the drop-down menu that appears. -In this guide, you sync your project with a remote Git provider, so uncheck `Create repo by cloning a Git repository` and enter `iris-databricks` as the name of your new repository: +In this guide, you sync your project with a remote Git provider. Enter `iris-databricks` as the name of your new repository: ![Create a new repo on Databricks](../../meta/images/databricks_repo_creation.png) From c9f8d11541a84b52e4bc9b7b7843e467451b6b4f Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Mon, 5 Jun 2023 14:30:03 +0100 Subject: [PATCH 11/39] Add Repo creation guide Signed-off-by: Jannic Holzer --- ...tabricks_notebooks_development_workflow.md | 37 ++++++++++++------ .../images/databricks_authenticate_repo.png | Bin 0 -> 84174 bytes .../meta/images/databricks_new_repo_popup.png | Bin 0 -> 108578 bytes .../images/databricks_specify_github_repo.png | Bin 0 -> 108689 bytes 4 files changed, 24 insertions(+), 13 deletions(-) create mode 100644 docs/source/meta/images/databricks_authenticate_repo.png create mode 100644 docs/source/meta/images/databricks_new_repo_popup.png create mode 100644 docs/source/meta/images/databricks_specify_github_repo.png diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index fd93977834..52e6c23cb1 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -71,7 +71,7 @@ Make sure that `repo` scopes are enabled for your token. ### Create a GitHub repository -Now you should [create a new repository in GitHub](https://docs.github.com/en/github/getting-started-with-github/create-a-repo) using the official guide. You can keep the repository private and you don't need to commit to it just yet. +Now you should [create a new repository in GitHub](https://docs.github.com/en/github/getting-started-with-github/create-a-repo) using the official guide. Keep the repository private and don't commit to it yet. For consistency with the rest of this guide, name your GitHub repository `iris-databricks`. To connect to the newly created repository, use one of two options: @@ -103,9 +103,9 @@ Finally, push the commit to GitHub: ```bash # configure a new remote # for HTTPS run: -git remote add origin https://github.com//.git +git remote add origin https://github.com//iris-databricks.git # or for SSH run: -git remote add origin git@github.com:/.git +git remote add origin git@github.com:/iris-databricks.git # verify the new remote URL git remote -v @@ -116,27 +116,38 @@ git push --set-upstream origin main ### Create a repo on Databricks -Create a new repo on Databricks by navigating to `New` tab in the Databricks workspace UI side bar and clicking `Repo` in the drop-down menu that appears. +You will now create a repo on Databricks using the following steps: -In this guide, you sync your project with a remote Git provider. Enter `iris-databricks` as the name of your new repository: +1. **Create a new repo:** -![Create a new repo on Databricks](../../meta/images/databricks_repo_creation.png) +- Navigate to the `Repos` tab in the Databricks workspace UI and click `Add Repo`. +- Keep the repo creation popup window open for the following steps. -### Create a `conf/local` directory in your Databricks repo +![Create a new Databricks repo](#../../meta/images/databricks_new_repo_popup.png) -Kedro requires your project to have a `conf/local` directory to exist to successfully run, even if it is empty. `dbx sync` does not copy the contents of your local `conf/local` directory to your Databricks repo, so you must create it manually. +2. **Specify your GitHub repo:** -Open the Databricks workspace UI and using the panel on the left, navigate to `Repos -> -> iris-databricks -> conf`, right click and select `Create -> Folder` as in the image below: +- In the `Git repository URL` field, enter your GitHub repository's URL. This will automatically populate the `Git provider` and `Repository name` fields also. -![Create a conf folder in Databricks repo](../../meta/images/databricks_conf_folder_creation.png) +![Specify GitHub repo details](#../../meta/images/databricks_specify_github_repo.png) -Name the new folder `local`. In this guide, we have no local credentials to store and so we will leave the newly created folder empty. Your `conf/local` and `local` directories should now look like the following: +3. **Authenticate Databricks with GitHub:** -![Final conf folder](../../meta/images/final_conf_folder.png) +- Click on the `Git credential` field. +- In the `Git provider` field, select `GitHub` in the dropdown menu. +- In the `Git provider username or email` field, enter the username or email address of your GitHub account. +- In the `Token` field, enter your [GitHub personal access token](#create-a-github-personal-access-token). +- Click the `Save` button to save your new Git credential. + +![Authenticate Databricks with GitHub](#../../meta/images/databricks_authenticate_repo.png) + +4. **Finish the Repo creation process:** + +- Click `Create Repo`. Your GitHub repository is cloned to Databricks and the popup window closes. ### Create a new Databricks notebook -Now that your project is available on Databricks, you can run it on a cluster using a notebook. +Now that your project is available in a Databricks Repo, you can run it on a cluster using a notebook. To run the Python code from your Databricks repo, [create a new Python notebook](https://docs.databricks.com/notebooks/notebooks-manage.html#create-a-notebook) in your workspace. Name it `iris-databricks` for traceability and attach it to your cluster: diff --git a/docs/source/meta/images/databricks_authenticate_repo.png b/docs/source/meta/images/databricks_authenticate_repo.png new file mode 100644 index 0000000000000000000000000000000000000000..7dc2cc06a16ac7ea258c1ff0bb0b4fe6077c153c GIT binary patch literal 84174 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%0ACd;Gbgi!1q#utUF0R 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 literal 0 HcmV?d00001 diff --git a/docs/source/meta/images/databricks_specify_github_repo.png b/docs/source/meta/images/databricks_specify_github_repo.png new file mode 100644 index 0000000000000000000000000000000000000000..0e63158052205cb1535d77fbbdd181293abe4c18 GIT binary patch literal 108689 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Œ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 D)cTne literal 0 HcmV?d00001 From fa890af41a9c0c972706fdd7b008f4c98d9d8d86 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Mon, 5 Jun 2023 14:48:44 +0100 Subject: [PATCH 12/39] Fix image links Signed-off-by: Jannic Holzer --- .../databricks/databricks_notebooks_development_workflow.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index 52e6c23cb1..c509507daf 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -123,13 +123,13 @@ You will now create a repo on Databricks using the following steps: - Navigate to the `Repos` tab in the Databricks workspace UI and click `Add Repo`. - Keep the repo creation popup window open for the following steps. -![Create a new Databricks repo](#../../meta/images/databricks_new_repo_popup.png) +![Create a new Databricks repo](../../meta/images/databricks_new_repo_popup.png) 2. **Specify your GitHub repo:** - In the `Git repository URL` field, enter your GitHub repository's URL. This will automatically populate the `Git provider` and `Repository name` fields also. -![Specify GitHub repo details](#../../meta/images/databricks_specify_github_repo.png) +![Specify GitHub repo details](../../meta/images/databricks_specify_github_repo.png) 3. **Authenticate Databricks with GitHub:** @@ -139,7 +139,7 @@ You will now create a repo on Databricks using the following steps: - In the `Token` field, enter your [GitHub personal access token](#create-a-github-personal-access-token). - Click the `Save` button to save your new Git credential. -![Authenticate Databricks with GitHub](#../../meta/images/databricks_authenticate_repo.png) +![Authenticate Databricks with GitHub](../../meta/images/databricks_authenticate_repo.png) 4. **Finish the Repo creation process:** From 4c0a94a561b9c8feb4d0255283ac2ff6fda6729c Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Mon, 5 Jun 2023 17:13:37 +0100 Subject: [PATCH 13/39] Remove Databricks host section Signed-off-by: Jannic Holzer --- .../databricks_notebooks_development_workflow.md | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index c509507daf..e9fe537a73 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -4,7 +4,7 @@ This guide demonstrates a workflow for developing Kedro projects on Databricks u This method of developing a Kedro project for use on Databricks is ideal for developers who prefer developing their projects in notebooks rather than an in an IDE. It also avoids the overhead of setting up and syncing a local environment with Databricks. If you want to take advantage of the powerful features of an IDE to develop your project, consider following the [guide for developing a Kedro project for Databricks using your local environment](./databricks_ide_development_workflow.md). -In this guide, you will store your project's code in a repository on [GitHub](https://github.com/). Databricks integrates with many [Git providers](https://docs.databricks.com/repos/index.html#supported-git-providers), including GitLab and Azure Devops. The steps in this guide to create and sync a Git repository with Databricks also apply to these Git providers, though the exact details may vary. +In this guide, you will store your project's code in a repository on [GitHub](https://github.com/). Databricks integrates with many [Git providers](https://docs.databricks.com/repos/index.html#supported-git-providers), including GitLab and Azure Devops. The steps to create a Git repository and sync it with Databricks also generally apply to these Git providers, though the exact details may vary. ## What this page covers @@ -25,18 +25,6 @@ This tutorial introduces a project development workflow for Kedro projects using ## Set up your project -### Note your Databricks username and host - -Note your Databricks **username** and **host** as you will need it for the remainder of this guide. - -Find your Databricks username in the top right of the workspace UI and the host in the browser's URL bar, up to the first slash (e.g., `https://adb-123456789123456.1.azuredatabricks.net/`): - -![Find Databricks host and username](../../meta/images/find_databricks_host_and_username.png) - -```{note} -Your databricks host must include the protocol (`https://`). -``` - ### Install Kedro in a new virtual environment In your local development environment, create a virtual environment for this tutorial. Any environment management system can be used, though the following commands use [Conda](https://docs.conda.io/en/latest/): @@ -121,7 +109,7 @@ You will now create a repo on Databricks using the following steps: 1. **Create a new repo:** - Navigate to the `Repos` tab in the Databricks workspace UI and click `Add Repo`. -- Keep the repo creation popup window open for the following steps. +- Keep the `Add Repo` popup open for the following steps. ![Create a new Databricks repo](../../meta/images/databricks_new_repo_popup.png) From c10012cefb900a1d93fb869ce9d6e35b86aa3e1d Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Mon, 5 Jun 2023 17:28:07 +0100 Subject: [PATCH 14/39] Add main steps to creating GH personal token Signed-off-by: Jannic Holzer --- .../databricks_notebooks_development_workflow.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index e9fe537a73..5a8291df9a 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -51,7 +51,14 @@ Name your new project `iris-databricks` for consistency with the rest of this gu ### Create a GitHub personal access token -To synchronise your project between your local development environment and Databricks, you will use a private GitHub repository, which you will create in the next step. For authentication, you will need to create a GitHub personal access token. [Create this token in your GitHub developer settings](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token). +To synchronise your project between your local development environment and Databricks, you will use a private GitHub repository, which you will create in the next step. For authentication, you will need to create a GitHub personal access token. [Create this token in your GitHub developer settings](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token). + +The main steps are: + +- Verify your email and navigate to "Settings" under your profile photo. +- Select "Developer settings" then "Fine-grained tokens" and click on "Generate new token". +- Input a name for your token, choose an expiration time, select repository access, and define the token permissions. +- Finish by clicking "Generate token". ```{note} Make sure that `repo` scopes are enabled for your token. From 0a089155d7e8569d21a553395a96b9a530dec78a Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Mon, 5 Jun 2023 23:38:06 +0100 Subject: [PATCH 15/39] Validate and complete workflow Signed-off-by: Jannic Holzer --- ...tabricks_notebooks_development_workflow.md | 26 +++++++++++++++--- ...s_notebooks_workflow_finished_notebook.png | Bin 0 -> 203209 bytes 2 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 docs/source/meta/images/databricks_notebooks_workflow_finished_notebook.png diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index 5a8291df9a..4702375058 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -158,7 +158,7 @@ To move your locally stored data to DBFS, open your `iris-databricks` notebook a ```python dbutils.fs.cp( - "/Workspace/Repos//iris-databricks/data/", + "file:///Workspace/Repos//iris-databricks/data/", "dbfs:/FileStore/iris-databricks/data", recurse=True, ) @@ -169,7 +169,7 @@ Run this cell to copy the complete directory and its contents from your Repo to To ensure that your data was copied correctly, you can list the contents of the destination directory in DBFS. Create a new cell underneath the first cell and enter the following code: ```python -display(dbutils.fs.ls("dbfs:/FileStore/iris-databricks/data")) +dbutils.fs.ls("dbfs:/FileStore/iris-databricks/data") ``` Run this command to displays the contents of your project's `data/` directory. You can expect to see the following structure: @@ -185,6 +185,24 @@ Run this command to displays the contents of your project's `data/` directory. Y FileInfo(path='dbfs:/FileStore/iris-databricks/data/08_reporting', name='08_reporting', size=...)] ``` +After these cells have successfully run, you should comment the code inside them so their operations are not unnecessarily performed during notebook runs. The cells should appear as below: + +**Cell 1:** + +```ipython +#dbutils.fs.cp( +# "file:///Workspace/Repos/jannic_holzer@mckinsey.com/iris-databricks/data", +# "dbfs:/FileStore/iris-databricks/data", +# recurse=True, +#) +``` + +**Cell 2:** + +```ipython +#dbutils.fs.ls("dbfs:/FileStore/iris-databricks/data") +``` + ### Run your project Create **four new cells** inside your notebook. You will fill these cells with code that runs your project. When copying the following code snippets, remember to replace `` with your username on Databricks such that `project_root` correctly points to your project's location. @@ -215,7 +233,7 @@ session.run() After completing these steps, your notebook should match the following image: -![Databricks completed notebook](../../meta/images/databricks_finished_notebook.png) +![Databricks completed notebook](../../meta/images/databricks_notebooks_workflow_finished_notebook.png) Run the completed notebook using the `Run All` bottom in the top right of the UI: @@ -243,7 +261,7 @@ Now that your project has run successfully once, you can make changes using the The `databricks-iris` starter uses a default 80-20 ratio of training data to test data when training the classifier. You will edit this ratio to 70-30 and re-run your project to view the different result. -In the Databricks workspace, click on the `Repos` tab in the side bar and navigate to `/iris-databricks/conf/base/`. Open the the file `/conf/base/parameters.yml` by double-clicking it. This will take you to a built-in file editor. Edit the line `train_fraction: 0.8` to `train_fraction: 0.7`, your changes will automatically be saved. +In the Databricks workspace, click on the `Repos` tab in the side bar and navigate to `/iris-databricks/conf/base/`. Open the the file `parameters.yml` by double-clicking it. This will take you to a built-in file editor. Edit the line `train_fraction: 0.8` to `train_fraction: 0.7`, your changes will automatically be saved. ![Databricks edit file](../../meta/images/databricks_edit_file.png) diff --git a/docs/source/meta/images/databricks_notebooks_workflow_finished_notebook.png b/docs/source/meta/images/databricks_notebooks_workflow_finished_notebook.png new file mode 100644 index 0000000000000000000000000000000000000000..6a594b47e2c06c29b51a8a5de315a4abd46328b3 GIT binary patch literal 203209 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
2NA6mMW|1j?<%vu$ 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»_5%i9?tWm zBEMXrBzP^3!4}n-fy2B`h8%_aK$oRhBrlUhdnw0{9ncA_jUJv%^hq9k+RU#jibs)r zjf^~cBOLji-{j~uD`b#}xUnqZ_jutHD}7RKEr>zl>)#9j#4Q3O43Ot9CElIKL8CyG zmGIV=!*p13TlgZ)@do;d&#N09TQm@NX*NqNmv6#pZW%?UFnrrNe2t!_$?`ciE#tU^ zq&@kZx4M#Gp$ygelgmvsPZ;k$RYkJ=l}T)5T;Efh?uiB0;=cMmat z$r#DxJK7)oYln<6)_+fN#>1_K`Q}(f{THa1uz5^-GpD8 zDj<)LPJ5I?_1n=bVdD$aN0(2j$H!%f`d4%QJy?0$+sabsGIi~J;hopsi&VM8DbW$? zrfNURP7O9qgAUQ(n&KM%0g)t9{cj_IlSdT^yo3Y}-=@vg-*yYE4Zb>%+;HM?LzupO za9N!Jl!)XsJ_$5`4;2zRfc@{p%WFPSc=|%0Me^!SqnDu!w%QN^waz7)R z+BhtBEN3EI3D7f5-ZM&mErR(*QvVH)_YL=bfa6WSK4>2!X#V-L+P7$=LPrhII?Fhn z9N772V|JVd?-{lIeDCFJmUYLc@VxBBp@j4(1ibw`nPWXxyJ9U4)dnJVW^iiw^g&rt zdx}=1d~tN!a)4hO@jGeVMTpr!rt$O&DJt>7%*m(u0a{O~6PI3?TUyo-i z^@j)l9GCgGfBuzx|N8-d$j#cwKr^4h4;=JX)+Cf@dfyq6T&aVZg&6bQ8LR)ShVkuu zYX=_;{Cx8JEL8JJ|AS3@KY!A9%ZyrsS-H~oS64iE$={y4hj41}@n5g|o}K#rvKhOO zy%qO=ioigrfB}km#9jy(OEMn#hHQLpWaPiB|6j;deNoUAcz66m{=**q7k~A)E&liC zlGP8d#^?NiY8Y_-r}z24FzWlCz>@NY^B*)0&oV##&2Rp@&!d?hf{q*+aQ5_xWdCZ- zzghWzeg4Jj!7z?H4`fn@*?-=~e=qyLx0LVae+AnLz7J<%`-BmHnAnC9N$&pSO zrXby`40`p1Ba_Q*^*Y_S#5hrV1$~;Z_i1M-*V6<$ zluQJ>9RkFYx(sVxs*YkjvaG8?!1vw%#R6J2awG0NqpW6EnU$Fy8~PEVSCWWbco0 z@}AI5<_lCkYS(!c1*tVgS{xCM0J+z(cN@(6fKbCcqdc^yD$-JrzP(1oIv!vu`Bj@# z>Y`$sE21k>Q`8vFSQuLFA(DN+&$65fCm8v-7HW!<&!P0gu;Sbc+V#XG_;{O^hLZs9P)HqM`rO*PQ$h(-Kn512IVTf1u=URSc4d<1QQEBOoIQDmC z4ALu|9|_OC0xIZjEsDCPtkWVku~KXRR+YJRNCC5aZAod=s`7qO6EXQe-14`C|Kw`= zhg{wH`jz3Rcye{`itOBavJmQ8=VETE(!l^EbAnDwA#CHs1)OOv*z26lLZ-DbU^ z;Jzy~@AVBJrPPhC^YU_CvNY#E7Qwy#a<#gS*t@7pPJCA#BgK35YZt;56L?^wFYa`posiaR`Qsb%qt@H~Jn6C93Rz7Fnp+$&;E?*2B2o=hlnFPRP^6O1DXX zJ|NR<^Ms;X)<06JwE0ajfoPi|(VI=>`MmpYv+8T?99@9=jK_m9 zux6a{@QB!v*VmTri8O)=7WC9#Ps#Q@D&Gw|Al%)qww%`!p)Z7)>wcmn4HRG@4a8*@ z2e=A>v7_gZ4s^l-yHo6SL*2WSaOWtC$JrXq?8~I_a>**~ioDf+s~t6QUwACBo;Rd^ z{p{ww{oXg6T{IsVe|?>HacsBxJKnIko3P=3U)=n!GKdA(7I#HO`+red?&BrtS+~Dx z&1;h5y(G!&sA@hBCW7mb?x^+l=UFldiobfckd0PBr!&&#zffAoa?zyk4T9j&#n(K& z(It8UHj&2H1Zr5Y1k4;WW3;y;fc!?Yg39LA>92xaPJS*F+|g$Z%_F-wh7v1N z-+(pMhQ$L@LN>c6#(L2O7n7sAz5Bz6MXxXJ9gI6BQ5IL_YrWCKCpcEiTkXtx)ZgYZ z8`wTEkroS8R_-Yqir4C3*`9t~10+o2Z+S7jYIi*M11_!dnU!{ZC5D7A`hfY0^+8Qt z7Ra($-tFLE)Lc2`7rgdSy{OxFs;Kzm&zn^MT``|FdV)g+1}L|PjM1Oq^x2MK>c}W{ zoZV^M_P+7aRNW^A($vQD$Ha|GvXS2bE$di`jB67Xp;8D4*G{C(Gtl=hP2&HjqH9D0 z%2ILhu7@Iy=ILl*&3=4xX+I!+&5lx^Ez!g3 zPQQ&u3!GTHr+=cbG7rxLmkMi;_iHm~9J^hQ=mBK{3sA$TP?!P(Oe@*w1ityhxg}(| zfgyv^l?g!4_AGwhl_JM8IN31%l&5ckTN*m9`>tIv<-jx8JN7|m`fl4M_8r_Lu7AQC z+~y(|z)FN{P-?fgrijihD|9ULFMj+bV0qx@rp!&Jli4?7fmZq0Lh6^j*~#6acPyil zEKoag3hdU^oqD;yY5Ba$^*efOUIRcms86$*Nm< z)eF(J(F4uuuZz_m)H-<1KPYT8&k~+(UP<$|j{>j;o%+K5@#bRBx?0zch4Zrv;1;k; zxh3*QoP0aHy$3Y!#^Kb*!W*kM1@UyTU_XCn(UN@<*Y*CYhlSx@{_4(Qa@`zyLRde2MyM*YoWPnpi=aYc}D1<=fM4OWWuH^NK(5#L~-Vl^1UtzILnDjx}**D?@Av zEd_*zE)aUIzeIM@(zJ!J-{-aH_tTCUnV6KANHirYY@hZOtA>%x&Mc~w~mT(U*Crflu|%a8dOS3q!~h`q(P)hr9rw| zN_voPP==5k>F!ceI)+AaV33-jd7p9bed2r0`EK@l*Sprce!uevYq_>==9&9*fA0Ib zr&yGLrS>R$--mmHsZGgfVq|Sn)1^5O3H%q z$^)r{&I@{vElM$n!20PMI7y@4arGi7k}aN_zOmRqUyM|~2+q(Rz)Yf;mm6DsL)8>^ zq})W^J)Zo+=32ua zh|R#Xtyip3Lg4d4iQ0x0$Ak#6;@bi?iEkPe2TioAmq%;VyZKlYn3S+^lZ zhrFK=nZhhPg8Lhg^oX@@_aD0-y-F(ae(}VhO%&@YD`_DIz`^-oR@{)t*pO>q6<9rk zvA;)_?kdjZsv1VulW+c|&Q0F`cFW>KT$|A-(pV_%Tja6=c^RCgqMB9jC~{P-K;BJ;a3UgN)Tg>)@b*=~n<#4l6eM zoSy~75VyKwomzFhGR@WYWv=UPmUbdeZQ~-HUwR+ab93E`ksUz|^cji5F|kUh=IElg z__x)(B1x z`T@UXBScr3b{u{xe%ZE$HISTZLsDTm=ql%)H0N}+g1drVp`}}{q|-N#;e!y}r6YE4 zq=sr1ipmD_nM=SqjY4H6oYbk=e8(q}p@A^q!C*_&b^OY`HSzEdk#{zi$MzH*c zS<*B*uSW~aNO4!w07=9tfgRX}OB&QmUxeK!HHt-0kn9RwUXmp~kd3Rl?#!;k z0ndvCW?lTA1}C5Il}`lRfjvY294^p(fJ@?S-2ILK7ZE}bmULyIzd-Gz%VGBIqs-{d zmmJPm5wu?F6wJQH&k(84EkQ$XK(UV+wo0$KJjEhN0TkEkEH&cxe1^)w6E+*^gUKA=H@*CJBaP;#)ReEA@pPbBq}t*z^<_<}KHXxpi&g zwu=}lXe}}&v`16nGyNL(d<4B_6{d%5R(s@z7e%i;vO_F~BIar!saC-e^mk{0hBCPA zs77?_w*8Ox*IqR8&r+p>$A@*jD?&oQ4Ux`avVNCCBWGpy*z&!a6H4Ume13Jrw>z#1 zDc&Zlw<~AWLezU$cJi?cT-XwTHF;bDY0AMo5xzx=w^`?tEx>-zQf*piAk(3|kLk4v?i1vVSWQp)vP2Uo@3vJuF@ zu8ya$f9c}uPuRi|aT#`WQ^hV2zfHhCfcPRr=a%J^^6U|f@F1t6r*P(u(W+t8+_}IS zR-!cTnP$zsRc@{7|Al$+PZ`Je3gF8(=MQcCTL&*RA9PGXyTCoCx95Jbcb&3vW;yio z<399o?4_RzvP{JiJ2fX+jpED2eXuRFuS{XH&1Z8kHP$FK_4E65Kz} zGSjgCY}hk<`&y7tRrMb0^39{^>SK59#r1BlL25dzyv%kHsh`+)RQfO}Ebh?h_RlL; zI$bcP_3825>w9^SGd*-8{rj`#%_MvC9UNU8dMfeenoa$hDw+HQppAkEMtXz1m6Id# z^Oiswt_q;m$q?vEzqs<%)RzjLqfa}^KN48A#daf!+Y@KWISNyd#W6BPq|ZAoi@7Hk z*_)KliubZe6@^o;a4|SmfAY6imk_(%p}-AXi5$A~tqIPZ+Y0ic}+sA1kdl)?;9CB&G_PHoNa;u){z&-bri<8vZet>ZrvM*O z=CVn5Nx~;2fAG%Rodgz09iijmF`l$QXgOvqjIA^L8b3*_X)LQ_<69SVX_@eu^${)@ zIGA8#LC7V@94_jps|+j?S<&muEq}ls%(p8I1TC{2v|QDV%V67&Eoa`z2%gq6cmS&m zqsMSvgX7Q9tZG)jMp3xwDV$if4*?DvIj*1#2Hwb9+*|c9%8}A*yOsBP?!=^lLQJEB z!C2oeg^jHkPjRcQF(0j3GdW)YAwjLUcE?%wh=$N$9r`7ex1pbJoGHZFp10`G#sQ0t z@H2w<&PSi)M1us1*R2vTtDjE+dr(()tWrZufMPUp}I*4r}JEP}AllFp;#T4p7boc78 zSZv~Kz)JT5(LMEW-rOwHKNy|gz^>E$+B0@Zg0-GH_QY@7@ZY!E{41) z872k4!GXQFv6wSlfoq;MeT{xm;$2T7drsN#Bsf~c@>Z0zHK+MDxXK#$*~1wfRqPb~ zu!Ng;2xhaY*=(mgT%N^_dN{izH5um+8qXBwKEfL<8IHX{CL4@%=b3pEJ5^s4OI6m- zn$9^Z9>LEahejgvhA1;q^7(-ayW-hewA~h;(G7t8WJUqG^6OhWgzfZq+TSG}!<;Yt zo8ciI7S9_p`<4WUg>LAu68w0Yi1~Whub;9|WVV3d_;si`Mipz$H!j!LoJjyJb~d1n zUDtZ11xxx)Bp<492b_LwDy_eP8rRx62_Qj&pjw#tw%F1DU3*cOm-W1U@|MTZLOu#( z(Eu%Ill4>^LjYhRg)Sa<1d&K7=Mxo(5nw3_@HZy?uFqmi&bNBYtv&}U=vDEHi+kF! zaI`oJ-9}dzp8o5vt+Ts>$%F3Wz0Mh3M8iqKi8!Yn---?xF}A9UpJ5wppUCc-G^oB{ z`IHWNGLN^w)hcI^d;*Y3?4u`I<-&`oyU#dh?^?`(>T|9Df;Y@}m(J_Dv4?^+(z>7N zVmo=BtZs@~PjKa`InKZfEd5rM;E$1KPA_f6c5yn{DHctC zpl~aK;>QZ!$Q6_8%}~jrde$raO~8`#|2!+b{PD`wnM&J;2+i|EM!{KsgZ4HUaRxl>0rgfEAxb zbtpkGuuUo~QeL=pWgOW17m0BGvcAx;5urwf@ruCjsWLYG{X`7hN?RVy+8XNdP6zD+ zS=#(B-D&)(c^eBqHSocCO0|>|Ua59aaMQNO!LopIq*xvxEkLnmRyGIhwu@LJmOAMl9cjT;dz_uqT z-%L60lYpPm;eB%Dp?|rs25=nWKqje_k1&d@KradAGL(}YY$qM-A1ly4Uy!KB`ZNARSNQPtmAOV4pV{Cb=omT>_DzR`p z0)BMI+&O}`b?_#B6*|G>VOQFYq$6RQU4$I*z`{f!Wd7dNkCN5RnMG2tq8YD}b$=o^ zoq_=6C$LSW9NSbtWgro-S^AqO$Lw5wQuv3jQmr?h*z9^v2yM>hA zP{>2xavKj>4Tu&we3tHQOoUfPP>JB)x&kcHS1AJsprcJhd85xATWT_wZ{ zL_1L|dKgL6wkD={&JOYs&C1yqVZp?sjgd@g9EW{gJcpIaMG7r5sC6GM7To1qs3&s* zVCFL35%gB_#e23{Aq_OEvSx(125W$osVEJzNkesmLv=CYrG@+Yt@JnLd)@@!3a@s! z&wi4$PppLXL=guO71%F8(^`ENLV!2!6rIcE(Uy9L5AZP?#?xW1sT&p%r#+wp-mJGEWXC80?$bFA3Kcok&7bp3Eb$$Ca7@M;;MaW&9Cus>?{v zc3}UR8w?>hdb&v_`}~$Q5Y(W~Qun9=AGw3=@fsgjxcD68cd>H3TwpHVDpu77`SHfy zxJrB2rd8tFSekxMFw6gB9;l7q@U{S=TqDzr6XV0^1=3v?4c@wI@c^NOtM6#KkG3b7 zHonK1mnM0AYs;@*7X*;h0wD82=8I%L+!}QG!nQ^kEMr>g4N$PK0g}NK1n6xLf>8L8 zmZPNLXCnp|3j#Y(RhdLq#-ooY<2|#tujO^7ElL7X0m_Q>ARyR7eL%taa~0pJb@XQc*JZL*o15!@GhzVG!%&FmBbAiLkFoa4?P z`0-Sw=cZ*z2|HbfH&$;xvAecXUIa@Y5$opf(j8$JA19f#U&Six0g)#Wi|Lbn@40fI z8e@aj`}MR~F8B0WlpPd=&zcg~UOIj}x( zefHoO8$i;~t?3)jz~eiUPTggtZ(#RkTolbVsd*}!+7O=WNP;#Mzj)yQigYu{i5D!9~B@@@#xWug|$K`W6zZX`uAIF zxa$0QK7i;4OU!uqpp*1NDt1`amvq9}p4$NAI9I}MmV0Pt&O<-4v$dsUFqkPl5(p=& zZv(;;@jdw^jdR5Tzc`Qsd+^11yS8I@9%Q2~UWy5-yk(Za7o)lUzE~{F+)f|8ftEK|o|8Hm`v1 zTZM)JgQ|g9R!*UkpX`7tNrQ=tDo3CgPQY6%lPUdR8#<$R_jUiSGcmfqaVv`G%6Ql8 zS17LQVtTTyE6M863I~_=!rHN(0oF9lonzsHVqr(PA>!e_^8+x%`6&U7cbQF0;cSWS z*rw(JmhOj}t<_Nj@=81j+V|D{aG7$V@faRRFRcABGi+-k{(e-}p|DK7>AHZEv{?GR zLx<8CI*4#%E?ZurUS1DM-(eHgT`*fh72vd+Vq?>CvGca8ByNy{{SgF!=Em6cy>%PJ zQnR!D9q^P@7xB8Kvv=_fNTUFLI?!}s>)fPvBC_>tLqejYbf=3myRX{4Hh^ZsTb0d# zd|(KmXw)f~LuN#ycA{W%vJofnf)j1}RriU4oQuwp6)a#DAfC2M4USr4!XgNJ^YHkd zTj-5yiR4J$dw0Okvhcf90yYBSGO))p`?W_7jR6o~&ZvUu5O?JML&-t`$J`uOI_hfc zunUDe0ahA4v-I6D+f3r>b(#j6O{H>FRRi z`Ym=EMQ6%HEG`-(4EE;(B~Hh+_}LfrG_{)m$9ByI=zO8xhEbFE)Na|=C|D*V6p~l|}muqt(>-gdw&5Pyzvj?Dq`IW?teO0qC04 zK5?(zBjE5oE4)IIAB#q$Z_GkkZ<`%vA=47*{H%{(Zzo1*z)ey-&AOrWnizn6CVR_bKyD-yy6$?w$zOnZA|QXHTS z19+7u%A-2->4@Me3FM81^65scdsve2@}qHkrkT22dEo}q@CfC%zePQQE(&H z2k?@xSbuoIhPJesMo!&JR$cy&fcnq`fMKOtIDn1Sa!U7z7KZZcEV=?ap3#W>eQXl4 zFJh@4L-}|aj&^nm1UffVv3}XBcTj=?Rhb|KanA)uqkuHFMT4NU_fQ+xTkBYI4BGH9mHl52Bo-KGfC@ zFJ`zqH{GgI*W?ya^w|brdyl@{wL5z>acG1anZY`v21=-fS=wAUAZb}<%ie+ghRv=! z71gw%_dntdE#Q@P)a-pCWNx;!jhq^HT%67M^53J!FVx%1n{I%EGAX4gFK)LUSJP#t zo=-pi=Gy19GZnd4rxn5LV#-PNWdM+s9H30(r6l2JoKD%hO0J3We^(Ds*U^#*Xn`d{ zi;T*X7iEhBazN30ed^{f`Z#A#W0*tx`H!Qx=oWh`+TTS$X~q+rBT~S#99K}!vFsJj zUx6WdxxxiAS^!3uC=|eNdBz6EQ&(a>`PqvWrL4W6Yar`U?tV>ixm@V`LmIsx>L3Md zTqZJSMqV6L@vMnG1sWAEc8&Vj24cOHtp}WeJ+2KLy^T*|=dpufW8Jy%rcu~vDDc{# zZnB8X&L2?+9=vgmM7-IK%N~|8UAxc?DawRGq_IK#LzGCGFy4ctaza%XLmV57VBup? z-e(}iXGXiDh>9Vr4F_=IV|t+VJu#1W^mU72|79<_yN4vAupDIR_GvhNrPHEMgrjK#H+_8{EIoM@2gz^t+Z%h+Ev~* z8}DWCO|QFSN0wolyM?rUA=QQLA~d!h;y1}oaM!E!b*a4WS)+4`zhw%xQ&3z2E&kR> zO5(MeN_+bNR_dIg_psGPboW(Nvr8}$P&j2sZfY^Y*L+rw!^L<_mxN29#_o>D`8d~P zG1WFf#>#F%ny2%b?Y#ip2NJ#nQxOJ&&qAay*UJSTFUOb2hHo%DN6T*A=3l)sBKzBY zFjxZw$_5HK|!{VkC9eVg`!!EVTEyeUXu#kH|U(=DYB5+@?b&#~b5^D{*W@y{? zUcjzpyv)&n*SHQY>Uqk~{-o_(+J=(>pe3_t7}!N9f*Zrkf6zzs(I?sxx4sOfR{_+h zTqr!5fjRN87P=lqk5mJX`1L(vSQOK#eg>llkd5B+t?uH-h3>Rd2Q8~@dGrr_4C2UnzKXh@-41aP8X!> zz%I{ZUUf|ktaUI@kMHKRsxq=VZo4~}!A`N=R`>m0DK^jnoGfnrgcYbF*4Z0+Ml{o|HQ7j=k$;X@kUSU zc+1nxTw6zk{ZS64)VoB>-q26l<$KNSk-CLJ-m~C>-*>8Vy|IvVq+C~9v9YA;F^DUd zKFdThw7U|NCSF+>q2#@pqA*|#R0`FQ2+hZIA8D}2%S@`Z@Mz9tlvv(A+)a5nwV6?8 zURy6%P%t^NSm>5E=7xirCSkGsHKc7SkJt_XNq{J5=xg3ATc9!=obcV7`;cb}ub-l@EJ#kr;l9x#HB|e_6b+oN3_&HKV?#;a&u;$htlizqCzSY)`fgC5}0T` zkUOSScsU{${Fq+xy=pNwqNH!17I1*|6juHrVAm$8u-2z_@OyX!f!W0&3{PaX_C~m3 zjsq*e?u>hi>n=1%;AT)vrOai0Z(h5F*RXYMS==c0*!0@aeJT+*3C=-lfzOM{&z}qA zbAJ{?7hlNuukU&T`WK;Rd}m#t4+4PqpomrysJhX`p6P>9Dm zn12f>Wp?RN?Vhm@wf{~@L5KC2-0oIlKDlZPCT^D^O+7zl9gNi6iCjvzeinD_S|!u5Xf9v$~&ZMx2!j+qozB1a6o+HAYi-ro(Td#5LA>6=g4zAY3Fo%Go$Gy1B?t!V@@dA~=&U6n?3P_&nXVqv!7EA3tx{N|o*>5kMli;Ld+5(5fMHcl=#j0&%n`j~)ln(A+xTXl#nhv*2}uQ zNDTB6cZhxb+J$RpPr?BQ6GyxgC{XIlZo=`;D+8%(pq2ASjmx@o_}KS8`)OS^q$~dl z>34rE(mp!g9=`a>DSiF{;&aZx@lWxoI-%N$hNCFI)UG z>4S=Tt?iLBwok$)V#h~7rIkBPbrB1*t`@J$PWD>hP#N>Re`3`1=7TIY9aJtwvefu1 zLjDFqjb>;YSiYXl4Dca1mm++`=LrFewT+T90J`Yn6lC}En7DSI6oNeni>oNrd};($ z6>H?r5+>-QJqRW82y*Z5|32k!ph3`v2mWGj#!V;f1;kPN$y7f>Q({pXSXTFM`<#2} zI_G(G+b!>US|x{D6!uY!G;qf|Nl%&l&;goO49!~~!!*aN3hv(m=g6=8M>^L(N6hLk zzvwaE=t>SvkMWg@Z$@>;6@5EVJJ^W?7D2+;IJNEy|CC^AK964u*1C$F>T+#KBjSUL z7(BP5V^63E@@hvoEecGO(w$7ry5Dunw$Ah)!|?y|=jy{>pAAMw=-)s42^!uJuM5Vu zG3JyS(*Zmy;A0aVwfL}g?_z`(*dDYVWLYIylSx51O4Q}`xutG$`hDNI_lFk1W_Dz) zM$zjR0Ovq1{0e@;rIs-{6n@-Q`(tNJbFwOifw4*)Hnng@bE zKgPVja-uV2Yr_7(Rumhf8mA!g&QFzV;zM@?0I<8xR}t|RxZfJuzpw4b6kjb2xzrOp zpRY$VdN9S%-5500$ySCCy&*mca0o?_z<642BR0Vxn#%RNjQG1Vc5{I;QbK_Y48_!A zRXiHd$DCXxmPzhqp$vtZ2XJ6Y5jjGmt^FeBISU}3%&dm+&`t{@PI!Pzb2&oSKPub& zPY&3VQl_6fwb(C&eY9%$6grK3*o3cKvIhH!&c~O0U-8$ak>C0NDju&!&hP=1u=5i<>I*gNzG#gXx%I+>8zwCe zY(Eh;^M0`&CwmRNLQnzq98J*f@4EG${PI8kciR#oG%xd(Dte{=4g_;RpPsb}F~qz7 zSw|6QG^GYt=($S%F0yrfBRu|D4b9N)O}^|1wz*1W6Vav@kM+~mTP=BXB(8ea|7jKw<>hf4`VHnRmgi-2GngK2;I;0~G%XyXHq*8AbBLlZ(afOWZ4 z@DBi_dIXIChOhq`Qeh3wZGo7Jf|PDEAH5(3^U>q5{{fTFKwPluJIqVS26U1P?7Cd`awM5)Jwv%km zGrd5NWo&cT-(t?dt}xm2!g;Lx?nPgsnfkP_`oLD}WVOmt??SYoQo1M$qdX-oy8~R$ zD_g(jTr%m5%;i&#br@w?zEuS|RS{T6ZM7=PJJ3;Qs9yK}|M+_U`h~FwG`TP^q`A|} z=FM)(v-1rYe4*=agqOH_>>sW*zBsvSJKb1v!QhfZq8>ZHmK!4qP7rlx)Z1ep(5IG+ z2wR-kQdAnqO^^@6)Nc?GD&HW+eCutrzftP^wgHK(IK-epDi3%)V(UNgn49==61n*P zJ|d!KZ?(NS7aIE1W?JVQXU`~bOS?Q0Q;D3WD5a{XeExyJ5sDuX2}*Ag&FM?lUZ0A$ zJU2+KAJ(dwU(bX-flll+49taFrq|Pno^Obeqzs!@!lX_*?O+)yjUI1@7D}pU!3F7u z=M`}A0Z*@ztHUieBD&`m$UCM@)C!@=>J%VB!TlV)rLeq=u6J$QU|Qq^&y3q%?VW^n zAExk!+bO5ILKd(Xhl|t~v+>@>Nxt^dm5^|l)C9mE}%Ma4C$YA>cW0Z9aqRU6_K1mjfZ;kjcihPhN&oCvWNufM$PK6o!Me9>f!Vc%yptZYKKCZ|u^B#EeBw40q92sgs){V`!P+-8s3XUCUm zJeY*r_219!44)hx-Z}T~#2sWtHHCI<)#%A?yYF*}paO{zJ(9_r^vaNY6bW7=L0!2V>kmLnbdG zX?#~Y>h+ISKEz$yrE14sKroKC1K$;V(C<@jaB8vYU=Pg}yJyvSw9dM8u3;l*Al>+F zLnqeh;OOE;w;#lq?i(vC=7Y%?>sZfm!_j(yU8k3HZtjVVvu0{ZPbR3bF%DNR-FsWb zJVOq@RMKOo*Q@%ohD~qqQp_ZwaE;gSTFsZai)Q5=ahD z*$j8zxymn9dVgyO>^q=Kf@;|H`rtI7WfLD{%sN~3(eWvdMXZD|Yml+!hI)yVl_ylj zmM70Ztt$DZG(1JeYJ$@LpHk7kx68-ZxL9BlVX>A$;AK;M1F0hXinT{kcToo;hbmCD zrBaA@JgzOTqO@L=Kg6ZU(P0`n{qFPK7s4*z*LS8d+ZLl#Gr($7P;K#}AX6OudQJ~J_Vkpd@ay5Gx>TJ?tZ8j2@{8k4vL!4oU(0>uO5%U%et z<@m!rZjId4>yh5fe3}PA%j5CLYz{xj>Za5B3zt>46pd2&>Lh+zVtR4KZmr#M|JhQI z2*2Kg2ijvzi>3-Q55a1bbCwiTMfo}k{*Z&dBEHRtrIF)h(2lGLPWJOdC^|9IZ$U;_>mm&74AVzUPRuEl<+LZRu&9<>NiF z-be=;L5Aon=95vI^-1An9m%jxBz%iP59Y#I_j0`~2Z%idfib_`jbY%G;SL2i+{OO| zl>8e{;IX~hG8m4@jJ_NGD=imP^cWR$w)HX6@mH8v7n z5XQG%zc8>k?N!X&WIKNw)RCat)j^Rq9@>=pD678Vp#k9fwLtQfD0MJ#0uM1qe6qRV zJ>T8U71n zto{VNb=swz@DP`-#wf+Qx0t;*vT+yB2Igd4Ds-Vb+xt^TC-}kOA|c+a<x7)<6UkOCC+W(V{W)YiV5~wOJf0eEKM`$f9pd5NC^TzL03GW}L*|i1t3?Xar!0K%20dYYMVgk_z4AR@9 zd?6{|`lfn0g_-CyML9XSo-UoC1gQuL$=xOf>LVPm;wiFc;-YqII1dQk+lCi?cm_t= z5GHS8>Df|^sYYA0H-!=R@P?;6=IdN(9gz86uU0k|2G6{de?7@TqpJvXprPhd%HRbd zYu1qEtp`k-v~XypJ+*p)n79wfQhU>Gl(b}>LM+4*ukL=@M4jOUN$&YFnca6%>8?C6 zk-BsFN}4_+z&y}Z=dn#xv)#I^^Lm5JsrUA_c(R(_lt)GrdG55A=2U}5g40kM7bU+% z{nxFsmEQ1yTu)MXVX5~~MHL{!tJsA4x_`Pk4WCDysw~eqN`pO^P}BHfN4P7wUcfCB zav$=6NXC#3R(PRy1=&xRKcqM-`iJ0d|Ikvc3WSgB3mdcy-pJlFtPA6No(nT=&|CDI z?r$QAWZ`D)3UQ$!2I`drK29pCBCD#D^u~KMt_LS`Ogg-lMEGe!_ogb$4D4hZ(c1EV zdO0;S(Uyz+&2rGsErXGa;h}~$Fizy`kB@6rCmAmmN|lY~^ezZatliD1^ZBPg^@K;0 z2#=xS%;riB-u9P7vca@8?u!7YP)S& zso2EysR{05=Tex43kWhCDF~mme5u|D*&DJn78^0Kb?n^S9!lem86VuP9Tc@2sbuQP zr*@Bx3w6U?>4>RGd&x<;d*&V^dWNbkKXu>D{uRX+WE%Y--*|ky&yYK#<($Lh7j|<6 zZ*p%Vg9Z0Yx+pUmlM&yAfS9^F%0@+{z%df9Q_8xDm$1))Ps(JN(8qLyxQuP-lu3ZN ze~ST~{e|A@tN23(maqA*;t7c;PL&u?)sAwiF2FLHI1uhTIn}!#bPU6ItBS-A-h&*0 z5c`b-Dm_!{B7f}sOz=smr6Hl{nf=ru53#26YXGH4_2d+FD-I7NIhg!tZ9K^VImGKR zTj&y7IT(7z;0DE0%LwdGwQaNE$1!e^2_L8272Pc<<%pWrsBAOaJqy?CXUG3A1{kk( zWXJAY%$sQ2=UhE|N^ic3AYPa^F^uA!zYQU$O`M2YxIs3omz6BXke@NRLEfv}6 zQsFMShNp?l(hdw2;h|4+_Zvr97%q4$2Ue`{mQ?1jYIEW&=%i!Y+u3e1Pw7(lQI3Rw zs*jG4s_$K1+sd}AN!Kiy_XW-h$-3Hs|GATmE@-oLpJd`&!Izk&A^J1JHIV<}c}#}9 zOL?I<@+Qc!muO$JG0o?o8 z_6Yl<$YINYbneHYlw=wk38|ZLunHdR&xm*!$$n~}^9{YMy=S*&p6nx6p^;>wR3+cz zwv}9Zw{qOxaA4KQo~V&|Gyp-4+L4@Mpn7}FmAh)mbU?9TaW;kqI)ue*=kc=wwA7i) zQSg#!(h7OF70Dvq;W zkA_xwGF{@j(|vh>c1ddB=WZWHytr?44a3eHHe~40x&^gIe3N!#zMR4{-wgTFM<%iI zk?E{OTI&@kEkk+EBfgpCGCN3TiFMWNVAf|D^>HC{17#tx+x6Z%eXHx18!;cvs*p1d zduH0p?z~O~_MhB`xZFg}&^hqO=)Txm?dx*$S?44ZbxP|Ky>X@)F4Si$r4Yj^kX6#k z0^=oI#Fs=BNQg@{xB!YUV+6jeuOE)5(E5_V;($kvL-pyr?|L!hM%stP%VgKvvgqGs zhejm7|1NC#M5N??-9-WyP>cczPvdmCy(`lWlIhnc{rWPG_nrwTfOdKT$oq;19ebZV z#YjJSrJ0ICHFEj1oT9HMD*aHxaeD$n=b#e%r=gkd$;Sm8bol`K?X&>QpiJO<9+^st z&fMg9W|97*eGy$1^{;hp)a-g5^3c4o#;|WF6_U*#cPR-v|A(U`m7^qz4 zi!O_!Z6}EHhwc8cCHKDo8;U|8)pSCLfEzw2|L2+Mj|j`7i3ZQoOaOR>BwfO2zyD^l zFW3Aa!gJKc2bwQi-3#xql2ES zBk-h;lCl2<0sbdr`rc$kALQEKTqxWT_U{Uy!v--G)XL;cgi!PA=2tyT^z zjS%%d?eV&rB!YkWAO6D$jc}r!dzBvT+%@{x^{AtiodTe@SG=VW;VUgh1@u~>8hhO2 zm-WQY257Gz5J!8xLmIYxnjk}Cst|`dyxP6odX}$Ba|EKkIF zH+QE8hKd9VOsUoBVn`MB-uT*td$#1U`5#yC&mA)aeYFR!1MZ)wZRQP+v9mk+Xc{jx zl;>eh1S_1g%sY!uz;kJ|6`zheSw&a(znWBqe+0Ah9e4u7us|_PZv&k#46R|DE4?Yy zKsTNhA>?h#V?E+p;>AmN$>(VfWk+9+(_g*6Pe*w!qM>r<$0IMKk7ov4Leu#4O@BSk zAGpZ%XY4|WMG(z;DY)JkdRJrz;<|&n&{}*f1~jbg0C=0_1)giPIei0PN|>0FyzEhE za{cOl)S;m@JI}?^L6qH$A*aNNI{Tth5F%Od4JvLb*XuEe&6G^Bdhg?1-t!q(WNMVk zbhUuq3>rl#gr#)OPlF+Hpqru&YSXChBJ(OtMH-qJkT-=5xdv&>OPizQ*WjY+H*?IL9`@{vYs^M$@#%7( z+y3OJc=V=?dJ$bSpj$K?^YNxoaAv2Z-KKMH?&`2yPRDiVEDg1`Q|NU*vB&OCS|D`4 zkAVZZFuolMm)1>&WtVG(3!D_0O@B5EIn#S^x%hjJ7+r^-3cHBA!S+oB!C4quR zZ}An!r5)7%7gTuu+kwyghBT=s@FI?*`$I$jfqPs=OpA?Hzj(?LY8 zvohk>5tnUj`|Og@n2$2ybn55nzH@YV6KXE6+!r%_Z>Ff9t+PnU&9fV-Gv%f675T8C9>a&A6T+dvDFAq>Vx(lOPzM#uZ z!#HGty4xLoQ70|o!>P0#|6{DuQ&qa+(Jnnn`2hJDu7%WL>ZukY7NC5ghO=_{jm#<%XtS zz}5$(RhAZkB3m3C{_-q+<|{ypIk_B>{Xm{+I@_qpMvnVl)_Cevzl_HY7%wJhMOxpT z>89wBtoAyzN#vnWxph)dejrQ9-f~KNp&)m`%ldp!>N{%hsz4&m4UJL>3%6~_L&c=EX)u^i_lp1aJqEpTQ)$4KJs6o@1xss;iTP2 z1*&U=yzEU6?S8m;)rnon%IgQ%C(%YRw&W6q-Q75KA zAz0as+IW81DAd!0jzZkOqR`X5(;K*ppUCDyVAA#K=CSE|Lha?`4CWupH(R}RtcY_r zOB5#8?az+T^ONbPxm_|KWSDr>v2pF#zw}ymk0YCw-l0c-hHVJSu0ClI&E*rvOB;~n zw>s$e+>vXb5Q0vt^*k2)_aF@PLqsk!LVO0fUH8W0$KOA_sO2xFc7Cn<1@P#yS&sF` zoPhtoZ{%i1h#h@Hx5U)6kAI>tyKYnp7J_JZ9)x+n}NNnwUzUs8s>HL0~zQT~vf2xQ6C))lviyk)!AIA*n_#ynO+8PJ>cFmpXy#4OAgzgbE zq@-N_Tb`i}=SuV6V(;&{{r4)pxY8fuu+kfH1D8}nMMXtQvhUBk8Gk!;-&zu83EOhJ zrOv@}^I;42!dk(8sq7kvHVNs5?u;MqOygH`LJEae2;OC}>MzXv0C2;YpJqyflA|0MEg@3Pqo{WXc7 zJ+Un(*s!=P8bPON96CAy?JJH9m+vZEy%tD7K*b(VoBUUde+{^5q*wH0{(^0v&;z9a z?x$kLza8P9|KZ~mps>C1L?imL5Cn)7%2)sjdG@(L<}Vx;^E)8bT>Tz**(C7a}n-X6da{(F1g{r@|-J(=}~7{q@08#3R7j4Ut?zzV zAW>%0m(Qad;SZ6CE7g+@3k`jf9j8u6Q$*OH_*XLO2JVBpaK&_C!IgmwgQ6L!7}*L! zDutU5VF;e1*?hHv{m}y%cV6rmq07SIU#5!Jdo^3{#%0={`rMf!jmuCc{BfD`wfyYhaQzaDhTC;$aH*%V&; z3wHRZ4vgN^Fv4a!P3)F6LJwH7fgc>xJFNd-g2QMxz z;%IpN70}P~*4Le!idxX#sD7uDa%Vj^qmzHmlgJ8I8PUfFV{@Li>oS|EbxI2vNa5$~ z7g!2+Jhd#YVNB*Rf5BP-1U3R%pHsUB8G3bqkmH!<{aPouI;$aNz+dq;HD7lUsx**` zweaD*|IRTS%ISRGm&_a1=ylSWUr<~-0q3kwG->%$;Cr z%Ci$xWSoY64F_8$pFd=&Ga{^qvq_kgP4ffdQSxSDa_>pg#hJ}5T2W!EIj33*;H|tDqa+&QG^WMmeNbS)?$j`x zqY&mWAj0pCLQqFg@`J19yg?1CU1H~Uo25M*QQ`cSV}<2gU++hT8+8qo-pBqVdVaXX z^>*Tmzy;M_5bky@P5up@;vu_@4c^m?Q8Gbf1>iAQaroI?t%H+ z$-R(XT}oG~9xUWdqve zfYqy20XDjApRnDn#bAoHXQ_zz1n_%Kq|8v%m@i&$B3$(#3L4aBu!vdi{G69!7jPXQ z8qQ9JlQL^ptH=5s<<_pIV{P=q;jFu+dPz`B=hOnQ9Vf0tA9_X|vQ;wCntNSz=D|PG z=lqu&{Eoha<3XW7VEtG3+yd;7Y-(TO?c6-Yawosal`NU8FsW!h2~nN3TIUtOP!>hn zJ;{l;fUa_Tmn8F7eteL7$G2DEV4&o>_m_UZ%J71VU6(@At3$8uzFATa;AGZuSWoj zLBONx0!hgSAe}vlmlm~`ixRibGvAdw&OLMH%%VvlF_L2JRWlLd|LNBQuamZaCPOa_ z+zl6CDM6FTmh(ElZ&{?03rdLUaH>(Z18ZQ2=J2*A8AX`(R?fAL7=VC6VHQ z2#=%=TJ8c?O-h$aZed~J9k|R-g~a29!cBemACj_QKBsm3eJZ-u{nwigC*Xk$Z6zk88R(aNZ9W5}OQptW%=AZldnH%e^%jZgDr^_WkC3m+=^_3Nu#4trojRKrJn zxun6TD;o?pOpvsPYJ9j02>g$V;?_U&cDCKzgTAg=?d5$v{>LuTr7IQ?Yj*x|-Eudq zY3zozba~~2c6^e$nv;=~ZX-F9J@0{N=3a!`9`%52jxtXFk}j?>?stVj?^5agLgZ}M z413p1I3?(9UmNQIe5UGY2H?Jx55GGb-|mz5+X24k0OOele+2^K&=Cj-9yA_Ggl`O5 zI<)-x>u)*0@n%H?<0F9s>OUK=p-8P(_a6OnCdID&J3{;a4dwpZE*{9c!k?YZC*OohkO1;@%(Bt=*`+o9zLc`oPm__Gf;2Den^QFly+ALZZ}9pg+}n z0C3*VTECh3Gf+kX_|lU5;!p9mp8%A3cxO6I`)5$5_MR$9@k}7Tb)_mx8yOin0a@2= z8ylNU`ohor`N@wjE&<^#r?yrzUBg$h*rqDhwL4wmd+vjRDpB#wi!Metv-NQglBhqk zbVsbtJ_L@z)i#s_2JTzD4vtuYVA&2algS zfBso1o}>Nhf=6(uWU;@W>h)5S)C;FFH)SzJuhuTwbkmprv7}-5zi%CWcv_bM*h*fg znGD`~cFKLkCl_EFP$rq$=FT1UKSPM{$YVbJXiuC4;xJ~YBo|;75F0JR%AsrH3;lUF z04(TaO1uLkfz2^aSAFI)QE$H3BYFS=Y@1kKUS1y#Mmr}fi@tL^ z^B=6dxdJzyHi4{|+daY(zrMe}ow`T=y#oKw<$Cyex0=yv zZ~hb8b!igFD=8)=Cx6CETmW3l6MxI3pKxI>LID?sO_ck`Rde9I&pii{YsYc(pUFG_ zvptvI{%3pk{KtC!V?BUC{Xfoa?|)*?$^XQjU;YCP_WlRC0WDeozlH|)>UdC!Rv%B! zcV`H<7yNVm;E|Ibb$L~N#x-N(;-u+CYkgBd5z{KD=Z)5&eGTVl0Q7!^Z@VI_7>HP; zpX$N*v(tS!IXU~;>o>FhIn;Hp-2j)*_T{Z5H!}ObxdUa?p53R~r4J+aK`@kI z>Q8{$2Y2snE%f!(_!39O1D-h_7F9im1M+gpnQhyhoT-J+QawMDSPTMc%kEz=K6lid zQ#W08P|0_9eu6Xf!|CtN@E1mh@TAlv+GW~zkqxKfcyDOAW7t}}q8k2{X!-s0x;jBSq4x~UW2N+?* zP_NR?>;**Y&OO+Xz7m%h?P6!Y|CzkqYdL<6LN@`T z(NFF^xAxTN!h#Qh=vHe=4=fWr`5P+w$Fsx8eYI@*uYK5BgK=2@Y*LBZmqcU&QbSR! zAKaL!rhvdLgPaC#A!BAKkVJUFd%>ntwmPwv{tTdUh zI|<Abt9)2gsbpbu2i7$+RF_j_P9u#~rV+n{Bf%U2ayY`oS;;uX+$}c-6qOwB>d%kC`eSr z6)7z91A+4a#+D7*taWnX>Lu;$`Wq-61l_&TyRXECMj-XHXA7Ra$&|`;TAugL3Cu_u zAghqNo|fjr>#o6Cs!qS_ljg80zEfMJ$#K9a0;`R3^51y6eY-~gNqDz;)y{2CyF=00 z>8FDMr+UlRN51&tpSKf@W2-En8tKQ?ibGa+J7IP^VoqP(Sva9&QO_MBmBiz*suyBK zgbT!wlj~m7{nE8%P zN>X}v2K6BKd&u945hrATYiubIjf!5d>H4%hD2t7}SUO03VtN)K(l%M`AX+=IeL$z> z2^g;^3Jj>YHX`jiB4=pII_C`ztf5F9d~~L5T7xXLlP4Skbm`IMc z@#oS5cK9pd_kyOw&*BN=;p4fy8iWQ4IbfPFQ8KQZNuVCr>|Hpw%Q;-JV4s5r9i;apzN z1aot^js~409bW8&61*gKd(n2=op$@6qgAP0b-PUxbzG}y;YBKAorGFqagyr_WuYQl zrOcU8N8$H4$Q!na;^^QO?dlxCg!dj z5$+qYv>67p-Sn5YXD2D@PepGr|8x{?ao`43&^A-$s#stl|BO>ZQx6viqbjwy5y?Wp_pO7V*k@HFCgsBbGr(d7@pw_n2QGBUtoi+6pQd7#Eb^ zpmzp&0=b))_?c|up2&&!Wqb+U%j`?Rwt}OGH$je6~ z&i#71@YmyJu||T&_q`AOby4EI(LsY3`RDfZ>-58X`|~V6+}XF0Tl4LpLBuuseCCDD z@$R+mHSdg1fvmKN%n;YC%uH(p4NqQFJT~_4K~&^1K&8EmjROQn_v-I$rZgMo-{428 z!Pk2}DpyyJWRtEXZet|IMV+U8hoeL$HKUX83pE<%j}Qh)&8Yp$5f@(!_0>qDXAI8Z z-7^oO8tF}*i&3`x#>ZTftTn77$5h=%$*Pq%1k~fdc~ovFXfl>yN_mG(>`oDB63G)P z#mvNR3Td_(to$R?>_^;CAEiO1?Zm0*LhK1aO}s|4E*<8eq$4+G{lbfI5T6d(%hV?8pH z5mphaILm&UIIq`IMPrEypG!i)fu8!~+oN$_{fYLW9u9f};;U%#sd&kqS|Rax_Syoq zxX)QJS7eme(va=P|Rf>O8 z(6l*_&wCcRvG_HJq2Egw@2}C)tnW@+&M$z%bSD~ViAhW0a^lr~=^uNef@ADUpIN03 zCqAsaQ)8?LCn0_F)e`J4Iuxih_2p|TD2xxhE4f3+MA+Ua^ym(WaGsIPuY6dJlkOBIx8x`QU zHLnL+EqjnKs53A?NTr(EDIRYB9D93k^?kRJ2{GGovP03prHMk;Qz(tns{Tl)COEw0 zYjh?1!u=}yD8-LfuBZII1vHx!;A5W0HT5aN2S!JRYemIzTTOxeWf~H%;iM9Wmio-* z4mYZqUl3O=#JEO37@n{nq7=Tq5;SgnfYequ^jR#gsgs-mPLO>sAQ>+NhQ>0DV5=`v z)=YJ>Ypffu(IJ|v#m*=5&d65YY6M2?AR*V31fLP%XE*7{f{NX;?32QGqQI zoqoy_B6wvFKS)bgA^02i1J02k_jDvt338}2rawyxBV~EW7;2`R>AJbtpY#|KGZ`Bk zJ7pIYw>HcK(|_FdFpHp1kSe_4Y4fQ*CAwi|@CyrF<7yE3ZFS#i*_PLQC-ub-=i_QWxWk z%E^#yWGaaCI?==)cden+d4bX?sjI;+?5of2fi>Y#Ikgtg=%EuENinR2b7HRwC5?XjoRC z9h!_5)gz9M8M@84z(m_55&})QY~A6ZwAHE_9}JlnBgPl|PoVmt^Lq7CzWQ zEe?j_6DI~{CWUAz*U!GGjHrrsXbYKvwg0&i(YL}bn>IlUJzpMpv7(#lh)x>_V&|8p zGpU^=hfpEgSzA;n+}=E_YTwXxyzPe&!R5`(4FrCxhvE^oJpn_luw%*n8hZZ0+EZw~ z&6bkMxh%6c&2!X_-rP+(#TT4dtn){D;M8~$C_X9W0~Nc|WaK7`QXivbazg`0Y2^}> z3Hs_qSUy!q!hTwRPm#d=cp=Aro+MN;dn4Aq-`kWe4YpJqnNBWK@X`Mpd(Z&JuM9Q) zWe5iW&Z4F|OB`>eg&%zghzH)hI8@FgVXM1g9b4&*p^h%jJO{ zSBQS~{FDynH)vV6G-snAvTQj7_SRK%b_t?*9Wr?#BCT+npdog-(S0l%_eaFsgmC}I z75+8lH@N9|ZVf-y6n|KF>>@iLD`_cuDK=?_ zrMFcN{-GpYIC1R~2@5m5E<+5t-`E2VL0&NC3|^RXn}A=|X7|i)F0Ptad9{#KLu5bC z-acQ&hF8sXbqqD8)-srHOTku7_8fi498qRE}Si?J-lW@#|rh~wMClL%E=;^EEN1B2F@ zIL#7`ieDVfE@7FA)lKMqZVvJixaqVcn^Jw+SXT#ZbE&U(W0>wCYURk^nez|hGrnwnsTbj(>`09 zsdu^>1m64foN|JX4dkL zHU!p{EDx1*b!A;W2a9(`yflq9qWUX51!=rNkjm&-r;#00=+}DW4S&6-LrH`hp7vH6 zwzlncf*!+eO9v0Q+Dfj-bbHx8$ZUEUB|IbFt-KdTKFD}~OkEFo=y6G{jG+F82vI>@ zD?BOk4i+S!T|#i;&cvJ+NRhjN#nyM-2x&df?rpz5z8F-*_(lNJFQqp0PB!wp|4r&&EC67kS;bu}Bz6{=@i>>D zAK{_>qkdFy8vQ}~xyY6KDPxb7#uK+|-IvvoSkxtBdcsIqB&?|~74$Gm>f4pe^!o z3nH<)bB|bjB`T`E!~ATsXX^*o>)CwF)BH=xOkG4`pcr3D62X&9@8#YBf4hZ)R@p{% zNQrC%Sb8q56{ho+_-U)DfLs+0j=kWoB6t(SlpI@j1?F2Gf-Ccf94CeB4Jt?t>)0~1 zP_7csdHQx_c#n-iRmsvX7BFUHC$i)QlEL%||FcB=vut#JJmsw}4qI#iH*p44>pQQi zzuVkIn1dZ6vXTZkp5lG3o5dsk+zyfERm(~eO7-pwNjdKt@VjK~v6(aB zxg^`YebO(Wr3Ob7_IRvT?YwCrc~kcd885q?+EFmI#RNDgmeM-wEW3y_r%?$mPI)zy zz5sf2d;kq1Ptv$(8FOe2qwy9W(J}CL9_r#LI6wcq+W2(32e#hp!ko3v6Vow>Fv1fBB=+Y@Ix6E{h> z&4ap~lfPy|S~e=yv`_JSCY0S%KP9WuR;6QOX-|xOH$jO04yU#dPZYy7HU z-GV9nbV4EedUmDn*gJ2`M90H8o*_fc4~14D=3h(NA9dZgKBh-HF*Uu;PeYHj9v4Irl-^ z>Qv4bOv3xZTb69=2vyAfx`DckAA>HX!;2`VjSgoya6#EI5Q2d?Q%PHE^L6{9KX?;9 z<~#=`2~NxEr0b<=@)m6|(XSpT!@HeRx_*1&Kd$^fAe?7LWKs+L5xB(R%3{u{uMt}& zyV}b8c^k8Qd0bN1+cr%y=@+H0A&=_SWOIw>%TCgRsyd?L@u!{=*#H}ZdC-fe++<8V zu_fJYP|*}UwRo6Y?KEk+_dU&F_N)ARMj|WtjVZ*1Fwb+%aExpT%qU-DwODe^Y#~qG zXIpBnW4iG^4THhCuQtEQ?=`DT^wE);*!rPH|F$6P4Q4=Zb;(Hq~6&gO>qzWcG<^5MXXZ@=s9!j ztq19=tRnK2WDnZQa9syg?4B7cSA7@ZwG|n60jk9^_i`r6e>*{&c72pvwjyR-HBwvC zt3yc`@GY190Zv_vp;u`)%H4b^5m+bX6csQV2%S(wF0hOQzi&UvEygOn#)ugHqSQle z!E4kzO-n23z2Lk$%(Rcn^V|pFa=z`eZs`OUj1(|^gkDW5b4!kAr_~BOFc;<)KQ2Qo zlS_heiz~DjDU)zT@5p{xI=^pq$0JG{f+p;d|G}-B7|j#C7QV4fhl#WWxAcToeUP%| zL$&^X+kYcej(xs66W7}u&EF~aDBG{|6uo+8lu2s}HD4Q~e_6>6@KZ(Gw~`bYv9VQh zT{H|!MW~a-9E=&Wldhj(SWI#kRH79VXfkUcfvYIbTjLcnU9#N{Zw?zszN6&~@}gSZ z&aIiY@Y~KnIf-Nz)~a}O81OYtkNr#JVPE&q;pMt}Vaj-x6`w;Z)g!^2?<@J4zhY)M zZG+CVkav*NtS6iqBjq0Ya)jcq7x$nXAOd!5IqBTcOGOS6`G*D)jKI~SXEEz1P7T%W zU#nPZGDt~kEBtN)2d}vklj2=XV?m1cRh@cC6sO;+ty{;D?*(u-|9)Mz@U8t zBBFsK;Sl}->&e!6>);Na7=ySa1A}V?6-|8sAmzOzXv%X*AI(Si1=bhb<@P+BI3XT? z;l`m{Q3crQ?e zJ*cPr-gYC%HVt%z>J!{rIB-41bUpFzvwQpsQcF|Y zJzcAR@3EV=ywKgV?HLaJK5xsdG<)!x{JFtyewDRrhE=sq_Krub|kkK8tvC0o8?MK`P6M23ZTu^#s><>R-E9W4F!8i#mONLS$ z2F~!mNy0y0s=hr}T`vd#FiB?Qw^5lNS1ws9S+eWp#yiHmwjQZ0Eanzs5CpbqcCv0=SVzg0!^Bzziw0AZ{0 z&kg;KY7IVfnY}TaZnL_x0udJm`?=~bqk-xE(l;%O2KvaSO!>l9;mB6{oox9+%L%C| z$);I%W--Fu#;0*mHtzM~6o2mt?-np>1O6_OT&T7;3?OdAP-Hh5x1^JC>kslO_Gha` zz{T_f!a^jVMVq;KwT3PHDD)VB(%+bCunX@jR;B{x!@&3I-yC~W7b3bjDMxpLc!wEw zgZ>Pf)B7--y$K^i1(#zSuu3hVOYQ>h@%KD~`Ts7xe=bVMWCB3lBW6KIdt`U}7?2Mw(2a&>PzKd-n&61QVgzkW=j1fR9mfrTK zMHAT=)wa8T!z5YPP$VUa7a%~5UeyYJ*4V~ zPHTNZ{PDwlb6R(nzsu5fu<*f?MX-|hNPfvyi4U$%`+?K1hk$|4NnrVXW4g;&SK z#pBo+XOvcO(jfTJmI?NAB|2UEa6n(2U18v}T-TNWVY=D-2cjs3h z%$WnEX7?Hm-N@i#GIO?sTWsu0Rv<44{0s2bXg-;Y5Pyj=?! zg{+2MdNN~py})*`m}M*ZiroXx>L}qlM?1~h2!i>Zp33X|wSPDaHm10ZADMFBaE`IU zPrAu%d*n3>x65%_`K3@J3oAJd9nM;sHhQ{YF7MDX_KOx?^&^yGt5Vi*-;_J+g*4(@ zU)qqnU!@A|31v<1OsV$x0%8(Na!y*Bc0h?FBf{7DDdx-j;+^M#^DAGfZ6l{?Q%ck% z&e|Y*D{4r@VyC)7cc{`m8$SM!?E~@xK9Q?z%T08dfnU%-OU(^@JNlJSvADPbKhwS| zp{>xVj?ouKO3aB}NWQURmNk(-B;mxqDQ5Ca2~M@rq74ap>PG z(IW@`Drn^XRnTzU+@(pIvl6afTGh41#N!|2-oAd$M(Y#Bn-3LjAaE|0WRL-nUDi*E zTKeyRt@KMT4NVB@8CL;gSPyD(HMJ`^7mfiDV}KV2o% zDfjCTTEq(Hm)nG1qIQt%a4)RNOw2BfuN6@#DYuP-J{?y%UNNfM$i{2P4$_yNsKyCO zT@7W=B2C@KgY8^~$*IDF`ngMPxFIjU%0fTA>IdNlN$ot|1oSP-y^z`Z_wctk2%(ECsuAbidxc%bD3hah57G4$~R%BjPkxERPa^GpWuu;PyF^<3M z(9jpT<5j&`JAYX$-`--lbh92!Au_QA!aeuC|9YZn2N?nrOv?S; z-%czivthN$quK*MW@b7!<-Yd<64qmw#AJw%(1;b)jp&IZj+T>&9p+EQbigye#PtT4 zg~b2PseGajMDFBlku5<+y>3KG?$LG0cDOyS@aLaT)?-39!9Nay5z;$$)AMF|! zB~sXM80Z$q2S%vJ;JzUrjbCotZ^@%e>68as`Su-3bdj#y#DLPq&y^1AtTu4U?oNfb%et zb+uB*2=7M~otO0TDq2;hYmc9~*S4`SzT$$}W|TUrIT_hPr#;;REa z9n3X%zn~}0LOtZ*Dzszr<6LCdo~h3J)BQb_hNZp`mNQp(O9b9R(!geT07o$D!mPfv zPkhw9hNY~aKDJx_F`pCmEexP`^})IhKU`y2;_J+dLhLLuJxW*FbWE{~Yh@$HiNXhr zbs&hw#+{yu#YGKHVy`DTYY;F2ORD|IhKYXo${aFJqIW`*Xk^NIT9DY_8T@a<_9qQs zRCr~NEf6IBMS3A|A=yO_#yihHGU$tSG?P9gfV4vWZVyiNZ;YJGCTO3f_D1I=2vJfr z{nl7?G^I3gAKTCp*&*|qv*_iwH7!iOaoa#~^xbmi8zJV}Q91>v#??qqSs_*-y)!N;;E>arHj~dpey2SY=A>DAG=Rsr0V0%js%baoMRE$cgCubfmCQr} zb*(@Ov;6nK1Xqs1TV;Kf+b!~+Evsy>4g$ldkX8$%DNu)bY!esUUb%a;`Evj>chV8i zW%a&j8vt%2N*WXXH6<0)R6BqSG{``IZHchou!>5``Q7c%nTcy+pvSp1y->H&*&Of9 z=D1UDNm(9SwCqc>XlwUc0O>Q=$qVy4kkQU-3Ou71+`&E-HK=c zE>GM|PgY>xA0_oRW5~GIPVN-<`27$uw&YPk=~>-pLXLeRv7CZH#gTlY`x~=wfq$6I z5+Zu!up_492YNcmiC`s;hq>QYR|BdSEey&gw;JGa=et#@MJ#y|X*kViFAcXc(^lzKq8UXo1S$z>~imp?dduBfp8s3l@ zj-VtG=5wXKgjU-kxnXYVF82TSy#DggWOvF*)3M!(=;1_scT?XZmCwH_pY|8XIll)g z5T)t9+J}6rl&l~bcLDIkU4RqSqoQ&Lw7BAI$YN(`J?^5{W^jUimeiK$Dt5KR^l^S# z?r?F3bGRlAfSw81Af!;qh`a-Nw@^&!+RE)vPlxxvoLay;z%|+1D~Bm1PF6ppuw!1t zmQ4Wo%daA)Ey8(J_6XFF+4mdFAArn)ay7rcGwd1ffkKpuD;Z0G}&0K|{xL+*HsAK+hxPI-p=X`o7Z?^v#&CxEk ze7iZIZsC&z5K}(RI$g^15b9Ux2zRL};H_5lfdt3To>lmXh_L#p#(_=iP%;x)CFG&v z&Bc=~KCFdxm(cP*oLwclBCtCnXWAf%ytE4>q={D$ z@bNozeuJFPK9Qk|Dt}}ztx=XO#f1pb57`v~U>TgzHulBROQPnQv&{A5i8r;XyQ|WOU3wpM z%@`wNc8T*}(ch~HvE+fWUhXj4fetT1yctV ze)aF@Uo82aOjfo@JF^6IqxU7SV~-dgl8IRLp;=C{16u0!Djd5l(~zqj*s!D1?GimB zAMfld$4$9wtyc^Lz(|74qh3YNgbhx9#2qoB&P%aG%nNd;Gr!dQYZgE;enH5C>9So2 zec!#zgTZdD@t%K_M71${9{bCsN}KAIh~E2y^y)73mY_FRE#c;kUfi9HfT9Gz6FPj2 z{v-1}`E+<5K0-_>`jUjLOIv`!NTEpZ_7LHIGesR5zOq|ejj`v(L~6`nLAEc}`%*wR z1-_*PeQtlS7Gd_?24K-B;hyr9e~bn{=^HDl@;hV>x-z7sLzZ3S$7^GUr0ms;ld=bv z9=oe+ivIeASrJ>3D`#VJ3s=Vqu5*{lLxa9dtvWw1q z;slyM@_Dz(7wU?Mn*7)~X5lBl+z5i_l_0$;j!f%CUX6^A#5KjnaWE49n$t zOHVyBDu|KUHaCE*>CYYjs1}vK45igjd)8v|87j+n&ii<8TMQ7{Cxv5YeSRpHD0Q-^ zZQ)Nf*G_GWWYvytfuH6!-D({n&6UJL*R&J ze&GHXm}gpZWG0D7H?TatuZTBAh6G**Y72elY8Yb8g)zqSK0?$!SLStX*W8M+qOl~} z`{q)vbN$lGI3Qfbo0TbM->_Axy73pOGg4ECV8nEWUJvCE7h;Dk$pNP649x94PEE7E z`lnm?(VtgPIPQS!M3?~WE6)$1Ao7jSYqvAi5K#iBhK5~X#d1ua(rnjx!D+%y zj~EgDH@B8P9NG;Q{=&P#qP;!W&_%FKU#!nnu2-MoU%y;lL-AN9Yn?OJZXqCl$@F_Q z`N5L?*~7b9rLpnc=f@bOk3OUDJn&r1Z8L?~b=#<^2UQ|RHKX^Vgpj)WUbwrP57IW; zmLU!i7ghsDOp;y<4L{1gJ#il0!)C$oT`^&BmxVYF0&jKUp$4dZ+6K-vI)5;MVLcgI z1RHO4E6_U7lPOgc!9@BN9U`VHyI z)ofW65Y3xCpZx~mKOpw&h_i;iOt^z-C&q2LpB>4fg)A8xvoECM{9<;C8X!=2v;gPUn=ai1# zXFOA1E)36|a+T%@Y{r+~jInF*orDKpD~QM*(hX_vc!5#&jdNIeq29|Oy31KQKL7LD zUd?8?o?;-At~Y*B$&+}s);+PMru&i4GKqAx&r*C$S%Y&1bXGmTrCRE^O{qO&N(-p0 z^BI-lc(zdrLAQN%;&1xSkt!p&>4#C!Fz$)PFSdN$#1x5SAnl1P$s60-AXQsQsmsVO zToPVI%by#-AAj8r%s}cbwoa-qyk=c_0Z*lIeZDsCbSW@09o{z&f%AsHSb^G-rrawC zsR1VyOG<%iHPXg4D@m?R>{me8;Sk342(PMJWEeZ7)$|c9jFkA{r;rj?PL^gLz5+5| zbUL?MxE;QHmwQbhHI}p?X;bW`%W2!_tM& zI&R@r5%ZI?fkK27%9_?0-gwCjUnR6zcH)!Up8ITpLdoiL+s3;N>;XVzhK--0*Gh`7 zE-^3rkH_m98jKZsi7E6DG~03*5s{$U#dgolz^Y*js@`AfBn$`_rq2{6+N!VOMw>j! zpPlV>XsZ)z{tCHP?+&0uolU(TyM?&J?43*&<=9}|0YGXsX})4GQ+7B3bhR@jp{BU) ztDNQ+!sTS&!L_;ATn#eaDg$QZ#Tcd$eQ!DU0_$K!-9 zbCjJtSi>1P!=x|qmSiBgu*C^d`GZxM`J+ZT#JqVHPGw-o-y+6SD>X{+kKZ1($=CkhvILNKs$GuZRzy%fjl}w-@LgqA%S=D zH0oT=r~^)@xuxynhC$rPTP%TkcY!Z);BP~}UjWDk zq0TnvsK^=q9|m!kS|56XEU`tpt)O?a{L=<P5=N_dAemqr209#VP~37q~YQ2! z{k2p{^Su4{o4pOK^1MP9B4i3$8XK<4->Fzdwv<@ESY~u!T_5`c@-ZT7s%ndbL8N4b zQC}J%H}nmz$)Gg$NE*ZuNIrq~>4=UKvDck-g{DiK40EUBoakZlF>;C(r~ z<)S@(7yzMkO~8H)gDda)fa|-pB*=Zw)0ktR#w`Bxc3$|&TYW98%{tM68S#ecQ2xO~ zd_v1#W)EaHrdZ0xlVXZscNl>5sdXTFv=+z`GQGD%?}}S#i5wr8snBjVQ*j~W^^Qix z4cP`!w#MW?K`S*XXlMSCRiz59#=69|)#kTWRpBg3QpGx3K7MX4@3k|7qAcwFwbwMn zT&D+T0>wLDg9#hjlgzs{Sb2l6N(;FX1^+Gef-q*D_p;Sv-5Xvyv^ZqnO2vW2Z~PC#wiNo=r9GP@?Q0^MwIvf4^f(iSKIaWMGb zS}S)Hw-DR22{|pna+gcxxM9UkcQRsgtAL1N9>grV<7rlsU{PW;3e?*I%%_(_kr${L zVX+;YD%yK-j(l>QvwUM{8`C_}^aGHOOahHOENx4mS!f86ocuK|<- zz1?UCrzjv(p|P{2&f*PoBlpjTBYM&{mfQ9tBPP1%IZWVr5!hoSoZ;WtljyEJt^Joh z<W^}Cl<=lYV-3Ee%dd#@$Ty8%ZDV6z`8&tZiI&mz-Qu3I@TU#VB5D8xOiS$G_gf8cyJO ze$@a2#LfK>Fn6;eXgC-tB7H=A^d7nEUbDJA#Jr2Q!pK8F_57aS=Jw?TENojJsf~C# zw0Utu_mP0kn+nIq_=V-d!@V~t{5J0+%IZtwIx5R9u{QMfSUY$#U-0F4n>Fh2Mj|@!*pf6fuB(Kz#s-*zB zY9?hno9gf*kq@ZW6@6a6I5(n}4Y@Q2z~*k*h0NizN6h5K3F#tet?0A9r3O}^xrr8N zFKO8o1L|;D6`*=n%M2P5aM)+e9n7yM4-Y9=s$i+Kgi!4_n~{KuwBoKsZ-X8H=SIzf z#Ksy`Ve!vaTP{qr5m^LmtUa9}Ns)THm2oDdqa+@a;CQqNBgY9w)HC{S$iAzyDsbPZ zi#@f3*J0D*t_Op1iMc+SC+(TTF3$4DvYCbFZ1lz>&2H+R#Vo*VEhZ`>@F|^ZY7Hej zZRvm1<~$xOe=sDVzYO@p>b~1GRy8Ul+aiYvK+O`TyCXT|<`e8fT~RNMI|(fYMO0dU zY!deG)|yVfvYAJotXWm7jyPr?>`*xABV9TxdTg-97qL029v3r$z-!CfQ`Zf`sXgW- z2btBffU%B@jXLeA4!wT8-pQePsQ5!{w-8ak_#$_7kCSA)S2# zq+4@zD$e^0+w%#iw~3X6V5e+Q_~OH&i0zUjnDtG$Mx@tPMX?+a z=DF{V^htJ%-2Q|OiL;3Hqvltn7qFild0WmdkN!}pKuW!>H{F(g$Zh0YRsOIkLPD}M zTKHXAjxK*$z59VI>^4Wv19vRBlQ4dKqhQ&L2#9+ArlH$+Unf_?& z(ZdGjAV?9{X~-?gSnQy#MJch5p!~+mtUf}o0_FHV_u}C5yWMYa$Ybi*c9EkxUGtgY z9HYYA>7*OHhDl!tlQ6BghWL(XW~Ns6IC7|eTshk?^#_$7YFsuMg_G%!yT_O6#8BQ7 z*7IkgPaM75?YNY2-iQF1*_qMe>i1x0qT2ohtFw<~V#gU`gJ9~g9`!Mr# zx0+v;$;1r+Bc4X=-FOhf&omKY#ZCD_Z0y81i4xrJiB!`-zBjNUqMmj?B((S#ZEa^w zB)jHBIavUx^4TsWu}d3lA#2wKjN<(wDtE>0xbkR`4$Oe ziQ9tpreu9OeKd_+n;i*UJS?#}TV%rog!sKBRVwod)R00sW(ffT8;Fx_+JMuR?AN?^ zphJ`D-G6g8%|b0O;z$B$wb8zC7PygVN=)jA;2I}#ZjIje#gC}GQlq}cqnl`+Jh3YY zmC*JbTi!fLtE~v#{*iHZDw3Ix%SFX}O5H=6fEj7itEKU1C-$uZ#MZ_6A!85Iw<5-; z9+ek(hlgJ=FC81p3jZ6GXy$J5#`zq;&9vSJc*@Afd--r{{EO*c*U0WV3N@iNu$RV- ze?T-4ppIR!1piC@bC{3elOcoz;sIxJTllY}F-@+}$RB$$h0dXW=l&NhJFvJqa>;qm zF6j|OmCnU`X4Wq5^Jugda`!U0@i*PyL73fTf&TZhob>~mPYP~G>gtqU3YqYs6*S^x zSkV&GJE5ApwaHzHNUUS^7w1IC7jY0%TNYc2lb$WI@E=%zbtTy51}K5`kwDNdzij>xYj&Md$K%RlBDH z022QYqQQ~q|9V@xU+#)SSE%mfF~`XbvYvSM_Ap&tA7{Irbg6BxzQp$R-L&|A^8n3c zSH{<-?o`ZoP*>|m8K7~!GB6XUF!7FB{5L}_zv=DzD7(LW)KA<%`@ClNYm>m`uK)9l z{d)lPzo!_p#lRk9)|db<{=EHfPR{@F(Wfxrc2^rx@h+F`eDU8mJ^Y_-K^G=>n;^oM z0S)D+)SrL7`Vyc-ET%3WFRpcwx;D{ZlCWz}|MXq=)?2;>^fm|2rk*s`oQ^VX9N+_Nd1#*u%E7ZrV;xm*ZlLGXCD8o+p~Y<4M5HPBM1M; z0if0Ye<%lMj+SQtz~Ix&3DX5Zy8CXn0w#b#W2VJCkyvq&2JhFJm2kJ#n}baA{QV& zq-3ui;zhifz_1RzE!*3pkh zW_jbSqg&Z|T(k8KhpYgd;#C;?M~ioV-%Idc7vhJ&DXg5H?bb-TQHMX8loEbOO5J;) zRhPOix$Cr-Jdu{Tj&H0Gjr{k2sM`MZPh9kju2)B_0CE8{S`;{R9qB3@Darf^kMWy; z0{(valHr-EB9WOf3hf`ba;PLDQ3B2G_wvA4^F&n&?1Ql-L(?N*VS6HrQo#>SfwsE< zMnI?hKjiTK>O_qQdT2H}XY;w;WCc*9fQWJVM12m$cTbiK#q8U-{=l_?ft?4)D6{un z|0z)Ti^~~|0eIi59nfzSe_g}B|Ky)1{o8Z@XZ8N4j66w%Dl-w2&c|7|%lT6(KSFzz z9RQ7BRFeA#GVF1z_ATj6C?Bw2x6}QIBp8~mbetdWFUK(zBqOjj9hWQ5#y;ovQlvIO zJN!_HQ(mADC0RV?Wrj+)-Cpe5YCY+DV3fJD^LBRZ7`{bAgnqnU4C|D-O?G~6O5HdV z@)zavA5^vg3+$?*i{w(hQ8@)<*bjUGz)-4P)PCLpUrDW)G-6+y{36DrpY>2(*(UvbmQ%3jmF1i z_>*7iKIy#)0Fq=2a0(py%cd#+;J=@y`Yj1DwCmTI7=hKtCNR{jS|hr3JZ!WCdjNV_kR2@AikZ&+W-lX^`wi`Htmzkucgv7nQH9iY#R0L;sffkUV4IRFV# zcfOo=7|#fzS3O|n4+Z3eBNaOgU@e%kEWZ8|gW-S>3=BO%Fy?!_J2fh)-H_l0?2by< zc{>Wf6SNj*)i=9iu%3s&zd2&QyLCZHUmszAs;0F zgbQF>+ycTNm|(F+9E0Y{1e4=U>=kt2!Q)w17qyg|w* zVL#--dUd1hX!$#>|B#LSi}gP9ZULbY5V9F7&RTU7o~{CVNn@M z1eBx^piayxh&BIS75?Rka8Jq+G4u%wwLSKkVKD5tWh%*kfdC?1iMxxBm1P;whfL6ujFyGOfbrcr|xzJ^jy|!h6cvsvMxL$zz#_h0>yb1 z7NJD6SM$K4kG)|T2){&oH;f^}!_)|vv+La<;1Cq(CNqqWYjFyoX7EZew!%g0I-L%3 zjBEQ5#t`oU$f>w5nojF|JTiY>m%smH{sZF>@RFX9$vXAC^UHdQR`?h4a}uZl+L!G% z5Fhml$1qs|??w7EZP`b^r(;A9PO}E7ZYTR9ai_P7kM4MYJ$GLA!J)nvS81LJYQP9bFN~WZnXHM6&YpWT%bz z)AaQqCyn#B?c>cCvnEC@KVXddsB-rT1}Eo+x{1L_%8E}RS^{9Nxd|nTX95ELJDU4{ z{2LE@xGvyW6Zfqt_8%Da9|A9dQ(D|V^s)ZH+_qd%l7P7QnoKVKB*6Vw_YZQ~SD*jj zVg1)XG4j2#b^3Rxn(BJ;>E`Zqc>GCm15s6%7|!jVglcaM;GEBQq5-UJ74;*3l>QAK;D|T<4JW z0s(vEhS4N|{*A3W{Sz9ZK-yOiG&0eww^$E=rWzFU4LhfZ|NfKpTg#6e_TL{`M>EC@ zy+7tA+s`(18(tndU7@T9|@%mEMNeo zhykLef|3|FA%WZd`P4XIz~f)Mc^gg+EX2me^w=M44j5QM^sBv!;jyQ^_~cXRCs}p* zLPocjwrENlegXvCX#EtYjR_!Q;mcL^XGxGvIMLv@5x#G5e?G~VezM)9FZ(2LW5CiU zIj|azr1^4H{@ER;5LgpeF$wnZ9Mt~)c;#O$<=IndHY{>C{14vS$Wsf^WX;3-{=l@G#7D(k_WIYx498Do1 zmq5}w2m#atr^D@AvQT(xD26X*IDjO0|*)&)9bxExH6CxF%|C3}(yqURRmU z{H(LxMmITd0P6A+RVK=H_WO89xXj)KN`=@aeME%tyw+<7Y$lTftc88iG~+EE&!tKc zWxmxLjgwmya03{wNb8M({8I%A22{rfoDf9@ z!b!xvr&{0V5;w89-)=fc<(Kk%VYezmJz@d}uQz~h)>&U^jhJj;*E>)?X(nn!-DF_@ z>AI5}8t_2?hIcyqFyzpQK0CHuf2A7~Bnzg{FtS*Vo~ z>vj{XMm|UnCZ5bLN{t8e-@>YcA0|0@ZFuJAs=ef6^Cja=I8HkEy8>Bxj23k|LmIt> z7I<+*yWI(dWX$KY)Qjuo0(JDXgy^Y1`3Rhm9qo+@JG<_`8V0!^nPA58d~o1*x%xq* z)oi>;eE&g_llpJOu;mhg5|DpmopR~|ByPnqVbLR#c)#kmr%hc1Qxxsbe;^eHJ*JdaiT9s&8O|LVX^Mt zdxNcZ15dN}{ZV)ICCkd=n+1ckLq{c3U>L;q>|~YevQR5urtTf2?J*7zr#B;ga_-Ce zu|1=za2x~=H^p976SD~-*U6YfCm7kZa;+itf%Ag%W{WzP^Uli7sHvqzTCEsPbSBc& zZ2Js{=!#`nuwCj-F5XXy27hIaxf#m~IX zXK9YdD>GQG0G(YCz`Vyw&?mDRp;uWfrfd?TqYEuBFJoe2epki@pXDi+65Rt8hXzA7 ziIH4u4EN;XU{5?su-^NU6rW0R|dMO5roArLWQbS`-S!efT(cgFA_? zi+P)QhhJWFB1`_tD(w;vA-_*jYN*+JTw39rRevNzh9Unx`UO-0$QaYgmY?dc6%2P> zxK!BL>%yHMfv0sSpA9?Y!bJs%&N+fUt!$Cy{5;*7)gye*J?q*xyozphc3olM&3AP% z>SfEl_l&oe@YAOg%&hO%!c^;qct<4SM3$S`+7f4u5#*>uG)xDsRZ&Y z^_gZUI%C{haeZruG&)A_8=>RBLmuTHEPUnas`)Lm4K;m^xmUJQZML_z-0xBt&5Mt2 zb7FI54@wug&}bgg+J);_+Ds*=tH1GT8wA&UOR2Q5g25?t;Tb8#5FEvgDX`U}X0`NG zl3hQ14);Z=w_SmX+kx$abYkmEDp4(TrmyxgCoy3BNW=^S_jqxN+*xeU)h=x3mP-LO z#sA)BI{rqL?T`ziC;()v<*Mbjca>6=@s3AC)6Fzib@hRh67=5uj`1GI%8w7nJh*)yU{+V4@ z<(~PZp?IUCsa|oU{+!H$isVs3Rzn)+X}On&V|59gj`}`+cLNjOG#g6s`KUgJk(DZl zm$)kGj0w4UNDieHJ@+A0i3X!wcfzGNOXnoC;7~LW{N{l9K@utipoat#<>fG;JNszR z9VyCLQq#Vb^}La^PwsNVA7}2*{fmXlI!g=t%vbmrx4~X!_X!z>UnL$Fy4!A}`GuCR z+q6z8K{m)aaHsqdsCRXX^EQ&`VuLNH7zI{7punc%r62URHp5?7K$L`Jkj?AzR4q!2 zAlRD(P@wIqG5$M7C9z@DA2)1@zqGM%EOO!AeNva8{I{J`hheJo&#dRV3nN822(9QC z&7%n0-kVF^Zq2srJ6fQK+ACfu;UNlZyV|Wr#%9;C5`jE2W#4WLMIZ3iIq?Ut8QpI9 zRio31vJ@9%=4MHWzq6q%(v&>}UFuRx)&7iF*~Oagwmv%R}IHk2b^ z6Ba`g8)2=HrP9cJhHJ<@yOY?t6s9Vwn4sdo zl-aMNjc$r+^D!of$VE07=k)ZBx5)sm7^fhvu4TuY>{)iD)Oo>d)O;PIUNzoO^gO2R zL)Z_}(5^X_Iv3{P3tO`sx}qMy5`O4aj$5HX*6GW<-R}9Nc}B9rqgOoTX${#zw}EF{ zyJPmx^rfB17i#$c=Y8T>SHMOEmPwRv{EVhVQi|qJzp@qMdpLT3#9|c#+Bx^KCW8Ur zO-3}UeU?(|i#k}eTn*K6kp11%d9Zm&9s6(`Vp6$0ZheQXi*LnB-hW`Uu;PI7EG5&* zrElREUH3!V*fl1528ToQXc3FvZ3C7=A^7h+T1TvZ?e^Tff9>|3#C_}BnbG8GqjPmA zB>qWu>3)~7T?56!{ztgC@yvP|G|D9-_qUf+f}U`;%Wd$~U(4TL;xm4G_Eh^K&09a- z`CZ7Pc`#S21x!WPhZm>~BjS~aXEDf8%$JXcKUQnbl}Sa1XrUk?rqg~cw`4A*@d*hI zUUL)^5s@oVucfqF=_vWQsx6-**{h`AC`SOl(H%;dd1d;VGdxtzLY+;7pz597?j#+T z!vTR{F}uM~5X*I;N<05v34X8f&_&V&i2lY zrlR@aNY_Cxqa~dKyX&X?mA{>fI9&HREXK_G=D;eh!cYVF0P}-%WC}XD)B$bHL7jh4 zF;P0#?m7W`&7JiZi@+z7+h!>x!3`oG>ILayk+NQ3A=o;Wb*bF#u_Vv-wCM z@-`1t{8+=fC_w;)>LjX(ZJ5o-4GWA&w;)Woer|R=CeX{RzX1F$wfnQQlG}`?bViO# zbKO4k5Xag%Is5T>|9Xny)Cz}nbmagfiP#8Og_^}!s3m{v4qiL2#*084hL&Raqe~xN z4$7$)7|AW-wNg=~nNs0S9j|(1&AYh(iEUFSd9PCpcf@ z714mV53|tB{FpyBn^OJUb%5Rp$`F^0Yv%q~RVu?6+Ltt6^1w;m9m!q2rTq~EOw*Ka zd*4d{UsZ4acxNQhvt!*Bo;6#Q>%d4KxU^dP0}hc5EQb8miRbK=Dk?+et5~a6UsX3p z>1ml^njwRx1U=-Vj}F&tOxjtz#uw#tk%){GzGdAZxKfJcRp~6Mu8Wcb`5#=TOKo2- z<|5@}eFx~Pi%m?h*Ui#6)PC2q9I!zPG|&95_>S~H>*wBkG7!bQLvp=Lm+A6^o4^-y zOBimlQ-PjbO(I>Gt8eI*roD-$)cj#kf905Adst}2kmfB!(ghD%alvq_quDS98%M`5 z%yP)=;CB(CFla69b9FVAK)O3puDycxpy5?mR}i~P=-4a2xT7%XIaen4(@qfFFyUfC zNht1N*&+#qy<~_uEVn~Wt10(j0z)fmKKX9#SIUN)?k4%{crmUF^`Y{j91!SPUse^H zAi81Gg2U2XV`1Gh9;p5%Tv@^rc+%`d8Kj}A&rZ=B!VYSr3O73FR<_Qz$Mg02W1iwx zJkW?Jw#$(F9sCSB^tV?qLOb?_%f((9S=`EOtJlkXozB20IyLs$CO7U7V*V5h8x;7@ z+OljkKRCBL|V9N zt~BBDdWG)(Y?Tr46SIAOxR^Q%sVaWO@dCZZgT()Y2xR#KXs(s)k7d}L4mxV7a5~*E zE$L2adG_R}kWAU zidwajQg9#Vu%%qDpEd7@VCfQQFf(*-vh@F?vKj;S{1us;pCWiYpfsM}D*2cgiMU>a z6LTk_oq1zjI>z#_3RshP~kHN(XDKK_=#qqM2X$%*2xVMD%JAG)R^0KbV?ijD!EiZDx(%F$eGO35}O z8^|eC_c~z|5uHh4`AIoJ`fL7uROI*PPAp3CeNjGUy!xWS(4$XZoiDE5MJL?gkiimC zNMHOPF1#c-)rb;zuYHp2kT!uP_otz7$5P+C7qi)!+`(|G48uY7RPND#@dl4_}U zZ_UMP0!wk;hxmR_+24$KCU9ODYv$G`v9l2f{)28a=NpBQSZ_DYC@FPgaF&y6l74fb z&Er~OF2ljFDdkI;*53q>?gVA}>G88(ndBtY|2$!WW#8EdNcFYB(uiQ(;n^_>?INsn zW+(~BGVx z^R_Qq(WXj!*kZLAv&oTue!A*w|La3l56yN&_k*8gjq9z}kFofn8Zwbghei zJyFSI>$J~bXDvL)X?JaGnm9Sc)fSCCD(ojoK*wSN@A1t>f9QSN_bi&40MkRi)NI|= z7wEG>Ge2?Y1!wT9a@TwU`xj!&M^S3)lz1UbP3_otH9DQ{aZ;tt5#98Z*vLt7tidJb zUo-0s&fuqSB4kDqf}6upXT!NE!Wg3uaQCjUmn712bHc`#e_ZlXKs7nW#Zpax)9Uy; zvm_@`DYXOTgdk2m%thz(;s;$SyINzO2Oy^2TDVrgyt!B8;&g%|v$NQIpbCshZxeRU zsW{C&0xopGF{Wvboa<4oBsBEuTL&EpW@RtW&`UG_zNBojf zcs(wA+fc-Ka=*g|p3s>qL>C!Oi5hD2Zs8y!-33lDWNA6}$f(MTzU&cF+iC8HqMs3e z86JE)oP5gNja+6mL0JOF(A}=`{=S}AE{01=a+j>fW*I!Ru1k(8>79<8n}0^M+po6U zB~=r8Qiy6lXkF~}7^LG%#bsL6y|H9JizR5HsLZXR~YKJ3XZsqT5Z=C7Wq?5Q< z(_8d%Y#B(M)fU5%5yBF8X1X|{WA@h0S59`aU3uPz<;sRuzX;CEx)yf2XxhQ~W%yjT zG|>eT2wf376YG5)``t`Yfp2I;<7^Z$#b$cT-8Q5ur0poBVKj@3LOnJ96l1u4ZLM>q z{J{U=6bKAv;_MhGJ_H1blhG6!%RTEx2xp^k~ z`gXscm++Bxk>4n-D0(_Ts#iqb(KAn=$cpd`MbK-H%dk$ z=EFknL+R_v0pxN(YCP-ZZdWOwN@)qGfWq)8Tz#5h}w&1>0~)jw4O4O7w3p}yt|KVzcB^n zK3be$SNr>XQ%js&%YD0?}NzVWVSnv|Bys`SqY{X4JO{~RHS%PtTouArG+ z9tYpQcxEFOg|a-qZq=pxzG2gUE59}|y~34eStMT#S784Jz zAc78sm`~E@HBJtz(U`2GBM3a4Bo!2j zMl#L?+RdUHZOu`|9&dITl2cvL-x?}_En_(R!vKR6nd!VQnon;JUQ8Vsi-u?D^-!NaCj^iNYoL@zLPBquq1wL4eKLU9#nW6*8C zKRenJL1x#A$6+pMvoSDw?UD7`PE{MUSnt5_LFz{6tGIe(m{kZUfgkKHeFm6MDrJ4( zOoW3Th?N6jJaoqgdj!c(_RO_H*P>5x7pyu^EM;sh|4uyYz*IOSfKAd?NB-AzjgzW# zo0aY*_Ux$=hI_$%-e6rPQdPeZh9Zfv@7j=z?4XKTCISi#4Ry@i0soY$rWj4m9fc$9CWexWcSc@1O{k{VvuZ^@A@N028 zQeYQDe0Hnik`e7H^J0;3{-UwJw7SxQ5v0CKZt|DFs~mD%(B#vb|d9eGGNNL-G@rPsGN z`*|aD8-bc6_XjG;i5ORB*ML?0)lyMYz@5gsP|v8Ko9EUlLtivR6y48q_BEeaclExpSW(x20! zxQFoKAM5K`C&zvgGCN^lY(f*1uy~EU#JG<@(^VI~XS*;#PZ-i#DvGTz z*vQ;(LCn%SUFamHEAhC4$Qv%EWB#?d~oO zG2E{dcVRPiBwg$;;4Vos^{st`&``Y@EB8+_uylEX$pRliTDfyKM`Q4_XUzpXxVnyx zI-@VdcgoYXXnAbQ_w;sN7!l}Z>;=2VWg3Z%GcHVWynm%M3W)8=8O?p8-w;EB2nBc& zj1n-=Pp48k-^_3W|5fUZ)6xvwd&!>O6YJD1V;8Ev?LHUN8pRt$-!l#iF}W<;oM@ z-cW}5SEoolH^+qdfpt7^3(NWO2SsT$`}(n_fTNUP;g9N+BnP{r67|Xx(P_4(f*0AA z`}5t?Sl`(wk^6nks*hdQj(@68eRlv#47NcjBg5&;YV+r?M5A%~^xXms4Lq$+s>SnP;@xUxC(zM*rsnzoc2EK=DlzC~;!bZrgH}!3u zDx{1R+c<5}XPM*8T?`Bjn;8}K(+1MPm&d=&xl{i;=Pvh@b9X{qu!;aVA1?4V5pqq4 zfUlNc7N}NHdj!`w9_y6YBCyF)s-}RfJkwH)^qFDMr+|Y~X0Y1jKsDwp&MfsBIJqTX z_@&rU@k&sGiG)Pp^DC!J0#Psd&7U7W_b9DUu6X5vtX4i2$fm=7_#SDZ1~E+sT6T>B z6C6{=a%C(A`c_YOr%G))rFCIRUaT~!e+VVz^G^jTM(bDE;t`%{qBCiN&r^^Oc7YJB z&eVLN;givL&bqr)0_!`T!n8CJcVzv$oAX`HQI1bP-&a~L3lVO};&o1*FoyTqYz__1 z=RGH}!lMI$;=)5sW#1(;>%F4DCVPa1e}&riZvLIH?-9TEOQyHrP}&l7F~JvIxA41T z*{?l<6M0?iANT}(AV8)kiuNnB*hsA#k~cN#=T~l*nbIGuEiPl!KOh;aP<>Xkq|(T1 zHNC5ZeO#UuKf^@)7Q~-E`QBfw+#0rR{U(E3u=Qnuof_V(cqQ{P9Q454;yQqx6TV!E zi+vgKH(p*R;eC3uXbjUs8bjYZ|ID~b$)C9-skE&qhn#rTncpQnC}5y{H+;~cV??Ot zXdWdcxpQ!2zVc-0k_39s^N*20sc^<@m*R06Wxb9AcUvlN|5f9>;95d8|kj-hPUKOc_1Az$Gl3(Xjit?=+LO{$xNl2Y?KE7&tJQJ@c; z>VYK`mI+IC0_lWNP_|1VeuOx=s7*B%TVxEJFzL()<)GdnQMjdre$6*c-|Ja4ltu8( zAR9olQq1cWYNdC{gs4l=S>dUHLlAY+zxW|4hd*1V`w3W&6Tvth!duzE6}{`pnkfg< zG_OUwWsGIVu)aaHpl=C?LJ3DLADu3I4e_VzyLg5xZb%Pc4u483#Whlp;Nb4NgA~%X zCw{nalZE!Ji_I*WP6f#;=XEKi2=x5enM1pvU!8|PrgfM7#l#&pwC)=5qrN7hV^tT1EoV4(w zo`r=FcSOR~!raS`!KS+oc-r5NC1l%1<$q3yMkzR!4f8{++5>6=SES*m&4WvJm{S7& z@FhBG#_^!QT@sZ{x5ddF-H@oL^~VH8d8gN}@MpyEO%yeo7S9?5@EDzn4BwwXg{B`| zfOscRl3)-}JE6}Pa49i#=1}8!u!z0pwY_Jr~b@8~dt_aiS*OlH$$lpo|B#wP0(1c04zsgjW|qd$8yf5C!2g z{kh$ttHIcN*aKoS%AQNn*Z7?aNEh=@k>;hN$tg-zCx?n;Os&0eQzFbPiK`1CK7Sm> z?PuwS$lo;3>gFDqGrF!r8099r?>||zeyB8tvgi20?yR#t9wonIc2|kLj3AW}6U!sh z)LHGe{mu6s$_Tc=oxoYu9ECjBtz@`jhY^gSxe>}wa!Z}#b&5J)eP_>Y;y9j~FdtR8 zpXk5a3xcy^lAfKpU|HxoD$~ksih>v;@wvBO659toL&W#>q0xEM#yia)pBBO-JA|!u z%)ZlGoS5VtluYh@od7asyMPY33%9teAzMu(ALAc%e3N%a4X}GpoM8&x&<02hO z2z(M2_PAegAY@vC&|7hu|M9LJv4FJccbWVB4J-J;H8voVBu?k{e62Tf_a~fF zrH%+>|9u58KSJ(sq0w$is|yig;NS;Jpi!p3xjk&AGMOx@TX{nO3J2^|_dO{osV%h0 zOGTy0)yW;HFZy@Ew(@z9w*V;{ABq){7%DG3rxj3*wzm^Rrm44>t7-i$C8s<9Fcx+y zt=A>`5;+(aW9DgtkAmnr-e%fZS8Ow%dR(H-dr*Y`NZArPtZ*8ch@GB6h&6DO6i~3 z7KXuFk1{Hr)V8<>Sg5sLMbrHkqGw=+ahuKU65(hhMok*e|0PE^YC@hH;PmmT@>^M$`ccFuNma+wH; zcqk)_5=8_N#PIb{k;Th3>)x6G5U6kZZSQky(6W7YQ@}4z&?|JTD5Y=1Z*gHh>PmVB z(N!HI1HCwEVmwEXJsllnI1wJ3Ojv{{JB|seVG54)_i9m8C9h5)CH-;E@{1oi*D`Zl zJ0RFYqgh_Ay&pIrH*fHbb{z=O#3JHIdgCG#(tkh-S2uZN@&bjD#o~CZP~u#8N3?1xHsX)?3PEoy3)2#nrOrJ9ToKXuAv80*$Uissklai zfDd|k4EvGPlz6`JraIz>hFn`Uk-WT8UQZwvH1amjO5 z>;yIL$GX9d48z*Obvl-ipJ^A??|-W5o>3a z#5s{_9={!bSfkj&p8`Y7YUmc{Vj(~T>By#A{Q&2^kT_&m?YKC0@T9Dulmy00eLXN+ zzrfOnMtRCJMensI-1eNQ94f5N@^H2i`0IrqNi#h8=MuDys*d>Qx?>@BX7`?RkY4Sj z7go0Ww?4Ji5gp&((4@Ms9GvUlk@qcqY9?7pAUrPius}BGkV_x&XC0|d3uD5&iTA^4 zr}EGDz>_+oJBgeBZ9zy|jv8c=Hb8?N(Cb8U=%^CdenV^E%T<2Rj?VK|d>lwhmIaem z%cX?6=rI#9_x(=DcV&^UXE}xNvwdEizZe|9@fE>Tk%XyeQ*ke0W|BHU8N|jXk)l=!u8YnkfwGK&hFyfX7CQG`yteHmBglx%KP+E$g*)O-$53y|ERTrJNa zzR}7IZv%R3Z@x8tpam|itM!H3dY<}D!r%2M-l2IY*}OsHO=kF*FOQcL$ri>Dk7!dhdtvYjf?$oW`nGF2ky`-WYp z6*zdBFZ^LgAk|H>1E!t^Vp!UA7; zm_6e<=G&-B=JMhfdXWK{NgyWolw__v0!{m%03xPOWEccvO2xh6`oeTdZ_|k?A$9xn zFPvB$>Mi14>2SuLPWmenx?n&g*;&doSTF@&BPD&q?ifOWV-4r}#g<8;qV&}+ZcwB_ z){AetnFS0Cs{PCiWYtUCcRkEiB>6kjnbEPu?If#vgCFCO#t-sIzJ7m!*pn@ASj; zXv-Ro_q#-hCx}`xP{c9*nNbxMt0K1pc*b9h3BBUGP{J`Us#8w^^AN%>|5a*1@h{&l z0vV}Z?R1Ue&k4k-XbeIqThOk>$k{xTLNAB^3z3_C>(`@<;$#^G_v}o^6?NB#1=zjyFCf7d$fr!o|JHXE_<$gx zuod~ubB?TVTj!_CIXC>3UHsj;nH$EsSeqd@8Y)KRD;+6BK#-Tr!?u4pHz=f(GpF=H(~Au?YZk9?Uzt3ue>+FD^3qKjn5D_I$*$*Om9Q3a-NpTX=)>f zHN2XVFxu>B&2NR3yrk4Ud%d~c!7Hh?^?$1{4bsqZcnlMM%C1GhGvTeUIkwSi{~MC( z^PwiYwPP%V5|!_8o=uXL*10^>T?BS;i^QQ(2N5|8U5y#{BF;dQX~vwHOUw2|!@f)i zuH#sflj>rJ4&@%R=e+2EL8 zL!G$XPwfdvXE|sa+F^NEFz!RGtRe{}F<`S878GjVq}1_J)%U!9efO*7<=Xde{_v_> z-ABk+csz2K_<{ap#Erdb(qgq(f73FJii7H?6p;Cd^6c5;BWpZp<$ofa_U2#K5a?ZV zEOGF{2qA{c3T>q+Zfgkg$)U+9V#>k2rbH0O_*g)4&p=6nEejWAE?7XR!Idul(kT6< z5Q4|q$v)88G7~v(V-Mt?c@Zzwac1U?4)=J^8Jpd5rUv9=6SjaUNj|1Kda)XifZ7KB z?W|9cOivF2pHUy zH!U=&1-{3;$NBm_qUaIGNyk2o%-OpK(%It)CM92)+#j?@MR256yTfE$4jUb~&L7g?)+#%NsnJaInXxA!8Ps1SDu6)~~ejidfDvGZ(u!{n|5}pO-XHeg` z?I@&5sF{|D1WvI{s*s%noiaL(P!tSuNpWEAhUMgK!|Bjxt@|BiXz19%=F=P)4ck$X zZJ^Ok`Z#&T25JtdU!$kNBrdW1-Rvh^Nx zMemK7?GToc2iBM3w+jn?U@%ZDzYduidsTms`~q2xn%Dj$tUt39yz#*({r4n2xa49Z z+T<~bh=2W8pkR>s)o5kUEPj><$Bm)tw`(PNBeCMQDd3vrRpP#dk{d6w@uT6v@;<-y z(%M7U_SnyfNnnkI`W3bq{>j#wZX$_8o@>hsH)>Hzx9OePmkNh4&-)us4;$BV?ZpcT zU4@=j^uea%avZ;UG5ltL1FUMg3bgH>+=M6_w8zXW?;1tBA(wJ$l0nr5)|widf4WT> zf<4y1^lfk-N5_suRd;_sY`59oZ~E!1REuqFKSO+Td^wirFrVb>zNcU`nCYHUHFc4y zT+&3#`%pnvzMyt@eK7%!5UIG-C@bcuXsps0GI+EUbw0S$%JG>};plvrjXzi~q?eLO za{kV~J;`D3dKc_=T^v!J%W+sk74mqfJL7B$JvhmBW4h>W2r|1_;B^?_o1AT4bUWC# zy{zU>3>mj?CbXNW-QLzpjxsA%(_~{#HS65%SJq5Q0qt)UY4I+uHsU-a9^7o$&s>>7 zX@;(fecKUy6TxGe@lT{2Uo9QGk*K-58Kqp#|E`lxL8brlH4 zb!| zMO@I{Of4x3erqthX;A-T@(s$@BAo{A=HqEVo%Q3#oS@^js~(Q5TrqK960tj(so8uhuCE1;Vm85GIq*jl7!?!ALdMhTo|s&!V0 zY~`0$ccH6}wu9ytWl3cXqatc3giXq?hPPI@z9mP3l}}w`LKN3iox{)u4{{Y2+-Z0n zdmQ@u@q?HRd-cY`&pG;I+PV8et~-W9B^k8bjCPujGK_+n=N3i?PIiMJQ+j3w=q0)b_YQas zC&otYi+3OJdA6%!$M?A{k{h))ABUubCzI`piMmHYDfCtQv15KHH%9EPd%~AFx0j0_ zToxCsj*253vR=Ah6`MAM-QTB7IC#KUT!!2!9A03bCNbMfLd;j(tWraUlec$x89Evk zolYWbA3f^zp&|>Do`ogx*k2u1E4N;#ecxQyRC?(0x2kX}A9{qxx)oS#J>=e)dbh6; z%X{9BF%|^oW8l{B$3IF)lO!<*2>`ykut5MVT05AnZW*^mLhPqZ_*2pUqq zWVgAG!MELL2$xaYXA9l83f8jq8XOms=E|L=G#cA2&4M=H9Gj{fJ8Idj;qji@d^UKP z4A_NGNOMy+S`V(T*KSTd1{GDvsTQ4a$Rwri?5|j~gD&YGLk@GX?4h~sy$Ov6ZaV|3 z!1t;p;TAQwA4S3fzpk2ctk@ifoE{7u7qdX2K(o(Sh+1h38}aR1^9*ORT#0W)u3|1?g19lePQ#^~k>TAg{(Tvs&Le6>*) zi6T|1c{x>il(3t7?hf#1(h?3&b*Cg;2%=)H?jh*ssbUm<*IK zhNY|?VLxZpZMz<=tgqbwObX+B?E(yu3HWMw{4|K{@n))d?42LM&ro3Oo@wWAj32>h z${KdR&w!zE*`;p#CQsAj_ARp=^ekE13YzctEyjWAZsUMqoY002hK?w;jsoLdM#tn0MTY(yw5sT`Bo21XxB z0^qIRcQ;~Vyo$zOSNNFbKb3=3)`j^NRUQILn^c%Y&!9&f z-~+}6)a87+*a!NMrt_P??N#9c-A;?cSYI=xSK3vGoY7v2`*32XsG?P}J(b6YQLur2 z%9Z&0bidlDzY3VO(Yubfm9o`n^&qYKKHvdI#crJ6i%*ltQ8;?PL?*xS_Uun zTwt$m0%WJH^Lc|5afic)>$gchdB#BQM&rWSd|+L$R3%1gsGfbWdf+6#5ON-8U{GBh z$9_nPaCAt>pWtJr%zbtBbEYUwgRfy>N>qrebkSDIc_(r8jpW)OEff z3%;`I$N}FNK$15j*ZaTn@NH~nuJDBu%j_VAve!3ad1a#E1uU7C?Ml{^Ea-kz-pd`Q zkf!v(X86RQVYO_!d3r^J2GTr+-sZvtAW|_;^(R1&1Hm z|NQOZJAU6GV1OS{x#kK+DvicwvZ9IA?7kMDR#~WCh)wa8JVh4$_M7vgEzZNQuU%KJ zu2vJoplhWIufD9kdYl#=GElZaSi|rr&VLQ{Xf|I&#)%bwG9{@J0l{ZQlu)3B3-0+MM+eel+cTS^xkVg zKt*ZMQHoSG^cEoWDk`9Ki1ZSQ^iF_K60+}S-u1qF&8)p<#((?!j`<~rNuF|->%Pi) zou}=3wdXbxJJD`?ZcMe@fq1Z9S|KQ7kYP2vVsr5H_o@)VzIOrfOw*8qXtsfc`1BZW zbS#gRKj9{AH0;YNA(awf0H{u}*Cub#%Dt8+yy;9c_8PoQUhz&pshIAxIoEBwvo^32_&Di$3)pfK*`JX-l=1sfmP{5}?j*eI};Cv>@ zdwdY4Z|&_4+o#=u>D&}|`dCoxZCToDhda$$b(`TzmN@^OSaB_Vv(RxkI*7eEiddR+ zL%e!vYb4%(;yo6-P*ucgXiU7nFdB5@If;DoM!UnJaA%FZhkt8kME@jB0m|6dx&2;1 zqis$tMj}m1R_$|H%}D?DRmAjYA?Izxa)y1$pvq6zGgiZI7_?;$^s<}@KV!yv4n4dy znb`AzxmPHHu#!V;uc+0^VfS7oQgrW@B;P<3MMdXm#i6`uj>GZ3lM3@=wN_8oIFm}o zY#ARODl<@PTzHxrK}rZ#8tX z^Ec7KJ4JWoSM7Rx2=fWP?YXb%%Ta!_#BtR29gCI9(oZeF?)nPx7B*LkL82A5?u8%Pope=X-^C>jtnM0_% zlt`+{_Q|q$k81P-Ux*4Oh;6&BKmDzCdx(!rn(gIa8|mH@5KTg=zB|Hh6Ba-xl9;LxbK8)GNq_-=|WMnhk; zs-l4nC1UJKJksN4I*MkUi(LCUuKDE}yK2P{N{xT?a{}VR^^C91;q*s-?yetD@tt8Lf$SvxWJhHM8}kyLpxC5=_B3{bh_|I z5hL_oSJSMq7S_+y*XoHxya&9_H6sDIWZEs zqaIODc%GiKm&>WEy=bj_qR0HrkiF2;+0jJrSYB^-@mx3SVGC3FjwCef2G= zw2}#o;Og4TmyNtx8a$#QN0R3^$fYmGZ7P_~SN$*Qoq+EV7OA8MMzb6skF zkkHZQ*H|gqk?q^ROTas^zONw# zyQJJ&*nO$Pt=*1$&5Oh2m$2b^!VSbG29YoKv9mnLGB*#HKj}Z z&gwx9uWFEtfS-dqk8;n?0^Z)rt%WwPxh#*Tq|zbEeu z_SOH*TcT&pKO}O(FX(#!vuvg65wb48j{48{}C37Rv^!-;{f@&?68A6 z;2ie=w7L(;i!}Ki;;)YTd%#^bm&@@TitiTlMEsffO-FoGkR(Rq$W&cqd)O>y{n;** zj6_bc;P1>PxvPy;&nyDThxqqy4o5YcBQJ;y`)FmVsX}zz;cKoQYzWp-kX*$%2gxjE zDEYTa8Qw}~FB&N#b@vV(FAkQQORbcX+*?`=dYQ66g&E2}ul-$6N8{^024olqH(xc^ zX!se8G5D@7l{$V|-&G)Akt0;&ip^Zz`JCKJmk->(%crxvqO|$x<_30y_g#XuzD%FK zDyt?Rl=nc?D8I!(cH4b2SE$qwDGG3qs-8PWaQVS?>>o>u3N6JY6rxs zmv*Bn`8`}g)BUh=iB?{;-l@UQg#pQp`yCF8z#w!xc{C!$*&SI?k}D3n>UX$59+n7v zPkwagas2AA_bmTKy_$LE)?Ub&N<9}`;s=<-*Swc<6Up`*2?Ag0_c6QjK zyxOZqgT|fG7rebK+hIO$DVz~H{EFH^)fTgqxMMAxDoiMIXH2W}7g~L1-1*+SG7FsF zJn>^PF`+~{=6vFDx4I>>y6!>U*B_%l$=ErSO(g&9@O>u2xy+N{Mf4j6lvE>3XLL1- zpS3Thq1&pw+}x$aQ7?bzNOYDDW6bKp{DKthb3nqVI{MxUsTK3<-YHgX&mwdGTHj&) z{%@^8Q~S10My-w|n}45_w%bnH{w@^#mA9lxyl_0MU#&CA-7d#F5oO8ql#$a1+kg>N zJ`yHCADZLU$gz4`hC^yMDW{jmVmMyA%H&N@WlRgfcYorg{`AHi9dIw~UzQmQvzp|2 z4fHm2lWOWd7WijMp71Ek_4be0E$5dskRF3KHs$rWM%{bwJQ`%}H~!Yy>J%Ho-RUzg zW|I+DGTMwbHR6zUSu4j9oJ!vs2Rh`_pNX`4y^hY1Wbo2PT&FeYWqI0$c_-~ZIy|vu z$diX$O))+Bl;237RHV~~-Bh>kpx!O%HCg=Gti1_??+lfzKdbSKnl7+RN2YtwL>tP)g z9q07@f{K-8$RH7HgEL9q%IN0u4kzbM%6k9&8+_-UuqR26uLHj2)#!fTDDxElAea6X zY;Hdr7i4g-zk${rF)q+y=4zt7FnNNe8_J4e9VIlng+tKYTP5Q*B2K&VIwY2im*MDk zld$j2RD4K-7w_a_jQa2aQ5?2>Tx|HYk2 z@PNuqiddcZoko1h`qab@ovXjG^{|t3%F{pEIs|0v5+GZLd$`&|ju*9@+zhXjC4Z=% z?`wrylk5Dx6x-Gv+kYKK^V!8%Wv5ch=o{Y{*r^bm>ctfn7i+RT*r+Q_Xvnjy3AVENIj7z4nIs>tgp}oo=Y|9qTr)9`ME^ap3Ans4+7jV*Ccwk*=~RC}wMH ziRQe8$dBhi_o1qNUJ=aK#1Vgv2R^kL) z#*pR;=J2nHjJLvfRWShrGjXFjbc#tE+wmUF{pDW|Teyn&lxl8$YLviBQ_HI)t~vQt zop%bD9#XJ=1@GcI%;8vFKozZ1{YGNBc6~lYuI|OLxME&=Yl_%bvU9K-!MC@m;u2#k zJ!)?eaZ-QAc>QHcuhR#R&|*?xw`V0hYevH62%u8Iqq`Adm$w*`6VAYa*qdRK$Ot=) z=d-sf4Mhpb%@Ex6>6`V!rr7p%9;8Qd@IQQf0gHnp0x#yx9a*>dcN|FG@<#X zt~@Y#b6xR@P%Q7c>4^oKavz+S{H$4xkEy`iS@JNon>foIV0xB^>@mv~jpGQ}A>yYK z>{>%!;)$j8u}&YFLBqlRFr_s|)64QkmVP}%}w*GZ=RJ=Oj+MvB|bGC2k!E+CCG(tD>d zXCTFS)a;dhbBeMvPpXi)zb|=avFCGKiV)(Zkwo>+?9EO6%BURLVJaqAzr)(aneMi2 z9gv0b9KDt8O*tgo>c*&W``Nu`-N?B|7Ck+~$V%C~zC@^~vXtqYB^DCf8f1Y1<&k}d zMpuQh%-If#W#x5i?N()fRD%#U`$*=VGvZq^}oj=NMA2M(Yre zvcF2_xKEGr?z5&OTM#;XO(GNuo)bJDBN_ApryagsNdGW55VpdT+=^1wYO0M97eM^F zs_?K6b=2Z9X}w}yzMv?Uys$DjRXIf>ZNxCfVQzsTeQKNB6ButA=3(iwS<9HhlU#01 zcGO(8FthN@^@M_Q$J`LK?^Z*Fpb^M80yjQUd&$1YNF!f9(?Sj8MVbfK%ZZenn=l(&ZJt6#l&-Ts4gJ*YY%B~o z(-zi7^^IblM{{C#KT7m`c&FUNj}?qQxBjUvEU4IYTZ-10?CjF097tohJXCA``D0i> zLdQWeJ$AvtMKr^4CV&|S?*|z~urrJzKI0YFz2P3N?D~5mGCHi*=7~WQAMt5BMW3Nk zSyM#N`xXz9aS8=lv4>K>`$@jeal2eG37;ap_}J~4RFg9cE1P?#WBS_8ittsL&VmE< zD@}X@b;eyx{jVnEW>XwCNRo?%fwK9(2h<3K`RC}TaFPB?yX*NtKVS)`!6Vlfl*H91 zwd;*N=nxRVN7`!P9&2>QgnXp7`egnFy%vH08-zAzK%4T0mdoJMEfy{(COao1$)`ko{5(-anA%SxO( zGGB)r!`PgaNZS_@O$#7MXGG*Y}_vPv-k`1vv;z$CVIPKr=y0QzsQ431FX|Wg+$(8*6cPZ!CQ9)&~IxPyGNk|O^W1h zuZe~jH$GB6`t~@#xM(erBtlOZ*+@8%qZ7QiwB2XoB3h@rP8Z&*Xxh&2A7~*s^tDZ;x7gN3Csc8Rov(XkE7Rt^?ZzGulO-A?=3OUYCsvYt)qt=LG%%T+#`o*r~7 z5zB&yA3#N#yb9WmsD|#H)2>rRLq(j5vc8PN-F6DH@-*ZDZi0zwt@t8CRQ=8@K{@6* zN=OLK%JH6$9X+Ju%#RwGQGI-V1s@dWhL7*x%LF zYmuFf3P)Y2a&xzBI=O@?$8=rhMB231m_^wYX_kR6w*vT9x6n(%o7nb>WOidZ*=K{^ zUjB<$C7BQ9Qdmo!D-ZkRlZ$rf7v*50=UAhr>}1)?edNQJ?GH44+?u{WPv_8*)iz0M z6d$`zeQA@I#Kd=8927A+NkPsV*YpA+rw5jL5_3(eOOgfUXNQgD^HRc1=?eV|wJ%@i zJ(xCjSUtjMdY!s=mOLq0-KXA}Lp7!9yPxl2$|FkGP*@YO9-hi2dlqpT9W>?%3X?e< zaIvp2#oN1XCCGf>+s_*?unLfwc-ePNWTT%tYHLT|4-7Pkv^26M9>HF7u361lskf%^ z*Sd5MP7gMgY1RZjUu>6z=}-;EvcbRj}3{_E(3a@bh6nM;Y@w7?AG@Zh6M z5t&4j0CB^VYdku|PTN)GfHqODDS(pa<#^!}%kqYWl1}468u626?~KS^>|)EI_5dFv zWmSLgfX1@(6RQJG;l_bZ*$k{v>*4*>jrE>a>UaGZYFLqrTi`*qi*IDRxu)JEST9O( zoLO`Z#R>{gu3cT_z|hC6EbhF!tAa!H*R}&mA}MKq`6yeo{mf2Z+cv|#i^x2o!`8V*<`qD9sv z3<8rl4l0vzISP{3Sw;~1wqrV^e5N3g8Dp-Sg!qh?mZ&<-V^f*+Qn9z zW=+Hvn~(3ViDRP5My=d9e$V&%;RK{h(3HdQKS98{MP@p6v~K}0q8o#aJ<=SeX)Eiq z8FbugNqRY_aeTRFhP)~*nj?Q22PCk@?B`LTs23(Cqs2_DAoXgG0}`Yff&57MZh*D= zbe>*ypSYSzTv!v!iG?s_wuz2qcQq!8b>ccj6kiu50WmnM#w-mvf^PjD!od9bW!}Bc zue4i0?W)%VEj^o)tMjzZe3!GNdV2_)qcZ9>>^QwpxLe$8F^SGu0C9#9T~%9Hb5+D6 z+sD!}3o9T$Thc06t(~_RkN^rr;)aZkaKKvFuw5=nAz?#w8*Mj;MKm0~-(O;n*>YWD9i9T;OhOHD znOGz@RYlp=a3{GaqVzKS7&+^M2j?hhogD4V%Oy1EX$e(xy%GL!c%AMdXWAMbe~_o$ zxKXyzp2sBQB;LsNDR!?dt|g{mNX@jSVXKI5bjvo>dAa1Q9*z#-P zP3p+mWlhg6WgHZ?KWN?`g;3yq{y(J$gm;*t)d}4Y|N;6VANv|6B5BU z-I0W%4^FGNQ2Ee-TPC)HmN6;jN!ZXzge&@b&YDvBI!D1>0!r_azbPqmr?yXl@auVm zA3=~-p-H@Q8o@;vqsK%ApyCUed~AnJ8Y8JWIPaW8cr?X?NHkg~@#|`H83ALeqirFm zGL&83UNs#Rja*CFbeMmc*?8aJRD`1(FH0HC=UE)WKWd>HmFhO&5E{EXS&)9xE-ZF` zcHgHGe!@BD7~JAl?^J*3T+v-Go)UvowvC0790H*D*Pi2IoOPb<)B6ZJ<04}*<})oE zZ0x}~RC0~&+kVwDb=%J!C|L}$SD$80!pKpndUA=5>+2JZUeefF`p*8+jtd%5dj-bj z?Xnh>(VZH5yOcx=Uz5t2jm;ejTZ+I?pM<=I(dTf0J4+i$*hv2PbO>l5*}Hw)BfKLq@i!Bg!bL)i`#^xx_)w zMS$vYD4UrYIE!oYO7Sj=YQ!Cm#e1f1j=8H_qJBYf1my2y6~3djkx^5YM$~1s2azwi zzOyM9@UCFmjfgY-&i3p`zwnlj&J=&YMq;Wb*-No^aVua#22=two%i?Vem;>&wbTy| zN?Qw-h=s4tQ8ifeK?^;Si_n1yb4^R0`>oB^YAfK6d%=wZO>~|}rdqFy1(N8R`^~4< zCf7*Jd>_-JbgF>kFF_lqL#@adS5!+(mP&0RO;(Hm|9fy*V9DJ7IqzFXVv!yrS6zvH zw%f9h0GE`Hd3TY1XPu;s&fxRtB%Sx0(4!`Ug1O@q~9#?-v~i>uFeD8G0k zt@~&_r&x>DS20P;C%PJ^v&)w!MaTXC7obf5qCin%f|3SDV5?5&p0%LYzpQ?J#hn?W zW56Q-yzw5Q^UK&teiV>FYndD(J)MV=!ber%MAwmE8IZueO^?ersLY^mMW`pba!EVc!Ii3gHeDZc4N=ofH+0i3 zQ(pC;C+mNei*+Yyp6YWO!n9H8hl3FweLqHGCT5Rmr6Lg>W!p5zo*{a zu3+Bi6;~^1T!VstZk}SYejP0k8mm`jH6WH+km=wYCFsvC%TzXm;ly(>q+L+tv)fXL5wWkaO7d-q&h&N@>LY4v8xk<8$7Ji<$%VBx!AfI-S>c z^&x?&Tw#lc;V@xsekcQ*|0p$UWK^W{Xp z4%^1v+b&|Xy$)X8QMTiS>EWR=0UQc~&k8>t<_oGAz3-HNL22z5-f;EQ9g}%!yW73X zn7)#tRF$j7p)^JgddwBydj_YT+eZ!4lOs@K2YN?hR;u4Gr(8!>Y=^r~esgtBuS>U3 zbP$R%QWho1U8&hrv{kr}e5_%zs`RB`w3+K@f6y0m`d%BBH*k3;qt4r1{?oD~Te!>leP*$73;e zhmI9Rq&pw=lliLVKt*jqF7K%KOjUX9w4IM$=qxV9BOrn-cKAcK2ha-MDIP4!NLf{w z&X-VD_~@JCVPqhkD45|pg{R!3NV%;#Y}hq)2h%Z5oy1{phGxPj~)Rl#dxWEy%(GS7B)ZyO@qG9eywN|lJ1|qqcL1-E; z(ayWCu2`bK_j1ZG<6RE3{d_(Y4a66h%92suFs7FXmzq$ z7}fcNM$WD6V16qRqpFPDi zqYqEpT}y}mDp=oY;$9*kl6raV=IQ8;{NdpdR#pL>h6s3BGuKax%bcfT5ENeRrpSAW z-b=-*+ma32>`{8oEKRxRzuc;fK@L*@W)X9bAXKio&vju);4n@(2EoB6m*cr9(0inJ zeV`9PRFI|_ojf;MEX(``2-~wQfl|2YI@8*mIH}#VXFNtXkwDX#E}*T=uCN>e;qTkh zLF3A~i}#hs-(ZzvR)qE(w||N7dEa;`g1Qs7#X(xTH3oGL!J`n+rOq;x2wSOk zXEyaqTQp~Je#2m786}#&d1o}PpyC>JR8!>9H0H@X`|sT#vsUZb>F61ih$fvOg7Xs$p;+=BR<%8VJ=Mo4UsfK4VK7DAi2GSvr;73bF_7}x3mcb3#MAw8YR8Xo z19b=R~I*rD|I|Y;kX5 z)V)&)LR%cgOh80)MmYG5NJi#e zOkEN(_t2+U6@ceVY_2m~#)t@U;E%%XG2XX+zwsfJv>`^2`kLVS?T}{Yy5_Ys;L*(H z{dxtteJ^$AGq+}a;OM>r2~##X-_)@j9rGo<(^RS~vhC9Rgd?>Ey0HJuZidfFkUYqS_iR2trzvaYUuPMs zOr2k3!dy5vIeHQEGswwp$_Dc|*T*!;UB9lHD#}B{e+&)sz%dXE-hV8_fb+MsUDvV0 zubLwT$#QFY*>-;Qq7Q3T$#>pUtF(vwQT1)@CfIiQMHx_DZ%*|uh4ubVHm|J|$P9|< z0DK+|Q|<4g+&|vp-*x+fD|LR0fX_i&UgD3d=D*+mT0f*UqUQmnya$A-;e!(K4q{JUl)Kcf}VXX&>qFIXC5^p>EF)pNmJTo z^&Q6IAhPSg!6nK(p~3d&5A(Z~H6HrQnRne(DDfV#gsCN0kO(WLV^0=$G}s>c5+@<} z16O(g9LGW%d>xYIbW{^Di8}=CK70~e^CK^)12$-xqH*Gn{DuMg%}>U!e&jd*+~=p@ zf5z>n;D6S^KkEP(@qg9<7=!=!*#i%M7Z1P^Z9CKU25M*k@DX`|otA|EaEkxWnfT8? z0@jXZsHdiwfWqCkTwRQ)`R8X1-M783Mv4c$;er{Bb1z}^AyaNCZ52=)|n_~rNI)j#)Wf;)aziNAKK7BqSc zepco$y3Ks;!3|>(J84Pg{O<_(K2S{uNgCma?y9+{+yC8(`j4B~7+uVXjJ_apMKx8v z_MIKNTQd$+USPhJI3K`eM6gB`pf>Fu-}U@~BmU6gWJVx=V~}v&@?Q8o^lB~9L>zrH z^mzKaTVdj&I6+W<%JrS@ej5AX%MV?Z=I2xFvXVe1EbX1G`FBB@=%!QL>M2Q=^|@6O zUUQC01IK$V{|~tLKfl3T+6|0JttRlBAc-+7_ors92^pNHuS3=q`o_REd>5^pZ@p%@p}yEo$Jvs{71;~-^bzNwb^4w;j=YG z48L=g|LeH@&+Ex4f{+59cbxj>UwrZ3*F!u347vN59`(Qf=YI^>?_V#N{SuHO=h6v% z@)uwH-H^8Vf+3f3&O7!4b9(~?&=$*dxebcHe}dm#_&+|HsR2XY;Ip?mKmRuLbjx0n zTMJLNGrsQ0yRoxB@WeAt!R!}Uk>6j!dmt`}6#tbebwhlvf8DfXP?iLic@IvO!c=S+P;gQFOLnqPz=%Q+2&C1^kptqCUJMPlT?>s2W3S)JE`;)sx(+zW=J+lcj;~F$-gh zeM-Zk(;sK=ktW5)T00$U*aKKQbWHdgy01Tx`1{M~h6L4S{J4#5?18nyzW#O$5p*Ay z>@DQ#29P1a7@#>LBT)Q>lb%eVg{&uJNE_F5O_5>(HESOsB8*)dY;82Vob=Z6ump9M zTB^JpdHjUJm!|mzc(20#5_bNZmbxl=Z%dh4u;Kx;h?UA&)?`P|xgXdaZ8wA2K_%zy zj7X>KD;<5yn3C1HeXpIE<|vl9XvxWEB{K>38Dq8nnV^;VVxkpT56Y>e@7!8#&Xb>? z>(?85kBT`KHXNV!g;8w*0+PD`2c*yg5c9Jp(xhs-TGow{Q3)GvGUp8dN7D&vJ z_uH8Wi)%IntRh(6ly0sZKNw?h50yRaswl>ancOM8n727#fodFHDk2IyYRk5VW^~sB z^c$Uu-0t^RP#^efaeM%w1T67%i)g7UO6gkk@LLA(zi(|k;%=a*qG1&x0DR2mzf?qz zO2iz~006>z^7e0a`uhFR)#4U39jn|*#Z)o8e|DnhoSNh%8gS&v?Tm-cgO&c($}sOX z^P$dq3VC(jl(MHQo(G;W&cx5QYOBu>2k5V$PKTr?`XG~&k0Ad*N=AyOiz@^Tt@iK- z)*jYLt}sB+q8o;Pt_27tQL6b@9dx-v9kJ4V9 z)|?kkpg?E4I~|8%YW{(-cyvRTdh^-1O+YqRv?ON~n~b>9Gq=oSuZ1;#sCy2T)5&3s zFFR=?I)G^Cz93@taM@$$@`1!h2u}fV0{Ouu*#G{Hy75-)w=LBwP@V>`9{l@fLE6*E zz~E_aejKe5Al;UO`&?tO z!|uQIG8Q=WB_9q`ryV+ST$@c-{qL^=@a8{5W>b4#_WO%lJ%CXY+g!a0jHQ0ob;^72 zuYc9t`-q;?GD|PY#{3rfeSE>Dw+`);CA2MVL7mb;0QHU&A9i?E26(CS@Ic-%HA5{q z!F(i3(hm?vWCW3>IP|Y>g7!rja;$uLMv`61MIVL6OV0XzK+tBTBMeIOoCf=fF zt{aVAt!}&C`i)81`A1%%|0MJZ0r^lcknGWOSHDX{UI?=4>y3=+XjoLs;q-22Fvcnz z`vc9=Y^*>kNK<;L@Kf>b*2<_1a_$yK3vVds)WlAEq1hU`?|1#a$KX$AmhkHh)XC`M zOYy=M#X0Z5#>{hx{%Ias7&<1t(|JL%W%7sLc2Cp8oom*cHsk6^myvt8RJGLIHtS+D zh_Zs=tlUBty7-LUW@Phch*LvNsCH9RT#bbN!Wog~97srySrJ6U>aa zm{FNQU78P#m?OaJL` z|K1;XO9y;FSV^Sv-#;_X#798B@MMg2_useWhYm+kdHA|`Y<&MZ5BmF+UtLkX2N`4$ z>kfy9zCU#Pi(Rm{x)>A4e}sHE+k@R%b#Qvyh`^8>)uNJneTL5I>r>7B{l!H;GJHp+ zFJJRn8y9`}<;By?<>K)atBmWkA7*Jl`1x}jNEd)IAbaWl?pKJlr!*;Ig9po}5 z8++k?z*Zck61{j0ND_+rZO(nenAVqk(^T#ivjnLO4Kyqr@=_;0g=NYk_rCRJz5Jos zPdFDZkMsjsoj6SpeD^$~!d$8U%mk zuk2s^z{2Tb24<*(%!J zWc(?M(;Yag>uqs#qEi(Q4b!!^yKlTESiOKk_$K%vNc0ZzELX4A8B5NlNaRAb2taTY z^c%Ul^i-rs&)b`!eq)N_mA3&ayk7XSLvDWAJt$@S%3Vb2Z)B@LiWPt?U;GaoJB~UM zq?cD4tg_9VUJf@c685bQ!>W%}&R6Kt>50JeR}|1+^$ zOvq*831bFmArwgLmRYTNb^J8z07<3V9F%=klb%l#Omgo`=!KX-Ksu>* zLy^4O8Kjmma5rS1VCc6f8C;s|P9uz=`-J+8asMW)4 z6(qtlx`kBKD3#00q6>hPyzLDSlDszE^Y+-DhZ&!ow+Ib=$P>r~TpDE7l>dEHk25_a6?O**`O(6yNj2N4m2 zglf%ZFDB44S}1pXj+MJ0HyFYLrx9#rCy+|Q%%lXY#SHBsolVRDG zs^@qkQ=aUf>Tm58ySwV2p_=@rKzqJSJXt>W*re{v0h2Do?gR2cYv)A*d6Pv%z7I9bY~f&X)ld)96#{!EJ3v zJ^R}`)d2&d2dE(G#Kv$Rg|{+en>RteyayDB`6T!7t-Wy}Xlygv9tFM&*i8^Qk>Ew@ zBY6J$6#1}p70laI4rGAl-w)D=P=Y`&$eL3Xd83~YS$FoghF(I~cR)4Z5l#sg2YEM9 zKvb|f5yp`beB?yNZ$xAu9p6Dvlbm?$0ZJQ;xg8q=gX41`SE^NWsV!cZ3y>>tw30h} z?ox}G@6VD(1y#VuMhnuPvO=o5Qp*4W!WsIpDbmbWohPEr5_!g+`7>F674B2$-FXA z52`0=Ac#?qefRE?K;ehOQg?Q?hn;7Ag&&h4_T5kE(~oRRTf4e}NATga z^xWIcYCO5%s}m?Il1Ekn-DLm6z}>G<4G1j5#ITX*maOTrJ_Gx7Y=?C2S#drgz6>rZ zsFairOm%jAOz1u<>nH;&&1$Pqz3e{xQPGI`+}diutc=uvP6`LkwWeqk zA{S3R*vu^1>`|7`w*<}u&(pWG{aL*JpwOlro9Z=WI}hqFmVN;GfGe@ZZAdXt=N_Ab zN{=3s&$$_LJ@(d%TLqP&dh3`v>nDISOIQ+7^sHVgR+h&|)>m-r7}%y?S@igpKkyYo zaOBQ3A&pC@cqwymg?p}}Q}TO#<#jQWLlVw_*F50#IruX_uyIu}b$fQ<^U#y2>Wo76 z465Q>Axz$_DX0VW=?q9Iq`o7Zp7YFZlyd;r@a-*pfrG0&p!{%jjXTG!mRCvoNG+rS zojpU~wm1zqTTD~|=!&>P?0^by9a6JN=Wl+0-$Ly`-yxFdGu z^7XjKrY863gV)Ui*9W@obt;y@r19{Ifw|n;WrFyw7^^!bx_#sd!0g5NUilj-YvfI+ zPXX~;r#=mK-`r&rQZ(5cnU#-&01>ROsr$H7d^nLCuToW@DmPRM3;&??IDvDMexjn! z01n^_7tM+&R8Qy+6~z;wo-a1HFP9o8TP%*kAjVall;+#4{@N-6<={Yl&TID&lnJ+cE`2&lDi#2o_{C?mNSPz?9U&zI*^qfqgV})8*Tf(lldT5X2 z_fE=kZeECSX*HXg!NlkVf|DTQ38P6xaqfFN=RB5G9=hWNeVnhE&4#F4V?#SYN#iTR zEZ0%X(d4mW#7}noLI9KTJ*r<>>Y~Y*d^8y_J=$(ahfgP0T0JowfL|VtJv=}c9rYp~ z_SbIj93RMHixmK#9h!Kj_)*YgOV?uC+XqwOTs~MJRGry>b z+4svj)4~BbD%yve{fauN9>f|RJ;Nnx`1k;FmTE9e;5GO{+$6?)EXLAgLeNS-2}?h_ zSFj!cwn`gW>B*O@7fj6zNQJczN3u=p1AX<^)wL%hyX;FUoSIqPRZ^n6ra?_AC6nvo zUMU7Cpw39SttZkUXCU0>qtYyQ2EmnB4q0=s8LD@ePAgylP2+t$@U)USzq1H@EbPs> z=GBx>1#3Rw`oh$FmWV95hT1=XIORGGsiU3B2Ca6-BJIyNvo)83deZFT<{TQ80i7MR z`l;T1JDsn2wA_3u2PhDhC)XDCVk1V^?y6 zx^Iy=W!*z(Sp~e#m@Q{TL*S|mKoBgVdr=O!MjMlQUJKco47nLQQVhLDXeC5v1tzgP z%gf-gDggYpTp^lipHBhhqp@E?#sHnCR!VeE5#6@K*vDF<#xkmChD9ZchOIB)oom11 zTB9K+Hq;q(KxjFb^0mh317%p-e)OxuMzIXOAii_M&uzbEymhoVeImUbidi z0OA~k7dYUQ8wlrqogxC~LzdsCEz)J|Fg5>uefEhmDkE4fy-mc6L9orCQasnDj&@IE zmkp`EM(Ks{VXN-$#l!W)4Gcrky@yAN zkb~m92Mk06KVQ!Cr;bNICgNWyO^-|BcWzt*%k;Aqw&eXiH~y^cK;hQoQ6eo3-F7h% zQ)7lM4aW!>8qdX_z7{e7GbAO++%NOA0Cmx;(y?kjV>fU$+QqMu1NYaFe(=~8$QK9) z!3*RIAjKq^UxQsbk&He(f08fnMQEBvl(4}_s7AweMF-(;Zrb{+vOX>*I?JisN8#x3 z2Xyc4OwtQ$R^5DZcMBJ%w^{(p)*3KOUl4p2_-;-Qz0>h9M2BQK6&3@%ck*3$7_(piNG9!nPVA=p-$X z?NANXTuf;3G?@Wcdr49n)Rm3yis$4sA-zF}HQN%|C>+ZnGsV#GCF=@HepZ&@n76QT zeEDTbKM4H@AZYmmC5_FTdiuE`4h|%sK~kz|DVC!V2+XphYihFbz}UErQEJv{gM1~= zG0s!_kd@Zm5wj@3Y7b>osgy9|K(UGzLUom(0uK6F*L zDk{7hkOJ5w*IG>j=jd1TuWkf}PyLMa$%ZFa#qk~Pf5+VgMNfmNlmBwgkW!KcGXX%i zjJKEQ1g7@NEm*T(E~d^ed>0BUeX%Vb{vl{cr0ev?KY5Zg1q4{Q$jd}oVi;W8yAzg$OZ^&$Lc{?IWun0+7HDZtC$&jo(PMT zNW+nHboV3s0wg!hDeHQVnSd#TNfLqcr7HX_z|g?8zV!UBf??UT05N+0=HQBh@dZ|a z`jn}SEW+dvf z^LhsDbwFM8)Vmq9uP*Qx?dr#Qgb6L%y^ zSjFd*K4r{*HJxdN3>;05(?yNfhQc@keSql9xg3)x(4sGXNGBL^sfFvcK|UG8v}&#V zSQQh#;3(A#6W&ev`9wot zH*y_VvAg@sKalN74C_O6(-;CXRr`=pi_zLt5L(q=3#|0|&{)Q(I&j#gq zjKrWE&*-&k%n5kJedAN!?DRib+}WXWL(VIkw!AC2$e|Dzz%1wI5$^e3^I>UU%D9cM z-U?NuQcy2oh+#MTV$&X08GR2)ry0TU$q%k4@bt6b(_~ct{m19fF~GTyWV`gG}yBS#HzWEHxe+66CXkFlKXWjD^Kqf%hwzXXbjNbc^b{M*{{JtvC zvRsEhEx$7kux8wdMd_G+$g#l*H?wMa))piT_H~&X9)1DB3{wN(DHGm7tWPoX8%0na zWS49S1qDT&M0}7!6q7I~Ml(0T#djZ!aOpx?qnA=TE*6LiP)EmNl;9YB!;v9BnsCDU zoxk?IcCtX{XkW#zP%m$lnU^ULh4_+7<6#NpnL@x?->O{&2yZ&gG$~dDaH+G1 z7WzXLcUGB(s(o{T_p=rL=s{)61Hy7OpQOR*8W;l7D3DmKQtfR0gyHZWah(TH$eN4hI*o{+Tt}X*pb^rI@@|V3=Qh}VxjqDj{0f&9$)@z&d*g%%=X_;rfGPJ zd_)u4MATmi%1r4TO|=Nqcqd-qSgJF^m`{Vir-Y-s)ingfa)@JKq4rjF^kaP5OBfEK z%$7enfv%v+k50X8W!JI!?;6XFUX1X3-@36_5FQG%k0!md85Rf9BARrJzCjtUW3lKx-p-68+fB=E;UN`&v z$~@2S|E$dX=bd-v-Psw}*)`$zzOVaS=Q`*6{T%Q%NkK48x`7xGJRj%Y#ovzt-HzR+Lv!etY;C=^< zs)(EEGCX><8G;cjd%A&(1@c3DlGd}k&~Pug?_Qj)`%duccWVg*s%$UCV2!iadO9}} zOmvTgOL#;K*&cfjovQF>V~jh~D%wiL#l(IjyX?Eco3#c6`EXPlOM)EG4ch>5dvmx6 z7v~m@f=zCJve{NBxb1;yfc8qgjG;<%uX2xr*)TZOx9+f7NNhXE$0qe z9Ie0alsW6MZU=vjdcP8o@LHB+{p1KI80svBQZKd5fpUz-u`^p+3&

v~yyj-7tjm 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 D6CKH; literal 0 HcmV?d00001 From 313072927c7bf5e15edb467adc8ded978590f9de Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Tue, 6 Jun 2023 14:06:14 +0100 Subject: [PATCH 16/39] Modify output snippets to show console logging instead of rich Signed-off-by: Jannic Holzer --- .../databricks_notebooks_development_workflow.md | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index 4702375058..43358ff71c 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -235,7 +235,7 @@ After completing these steps, your notebook should match the following image: ![Databricks completed notebook](../../meta/images/databricks_notebooks_workflow_finished_notebook.png) -Run the completed notebook using the `Run All` bottom in the top right of the UI: +Run the completed notebook using the `Run All` button in the top right of the UI: ![Databricks notebook run all](../../meta/images/databricks_run_all.png) @@ -247,10 +247,9 @@ You should see logging output while the cell is running. After execution finishe ```bash ... -[08/09/22 11:23:30] INFO Model has accuracy of 0.960 on test data. nodes.py:74 - INFO Saving data to 'metrics' (MetricsDataSet)... data_catalog.py:382 - INFO Completed 3 out of 3 tasks sequential_runner.py:85 - INFO Pipeline execution completed successfully. runner.py:89 +2023-06-06 12:55:22,705 - iris_databricks.nodes - INFO - Model has an accuracy of 0.972 on test data. +2023-06-06 12:55:22,709 - kedro.runner.sequential_runner - INFO - Completed 3 out of 3 tasks +2023-06-06 12:55:22,709 - kedro.runner.sequential_runner - INFO - Pipeline execution completed successfully. ``` ## Modify your project and test the changes @@ -271,10 +270,9 @@ Return to your Databricks notebook. Re-run the third and fourth cells in your no ```bash ... -[08/09/22 11:23:30] INFO Model has accuracy of 0.953 on test data. nodes.py:74 - INFO Saving data to 'metrics' (MetricsDataSet)... data_catalog.py:382 - INFO Completed 3 out of 3 tasks sequential_runner.py:85 - INFO Pipeline execution completed successfully. runner.py:89 +2023-06-06 12:56:14,399 - iris_databricks.nodes - INFO - Model has an accuracy of 0.972 on test data. +2023-06-06 12:56:14,403 - kedro.runner.sequential_runner - INFO - Completed 3 out of 3 tasks +2023-06-06 12:56:14,404 - kedro.runner.sequential_runner - INFO - Pipeline execution completed successfully. ``` You can see that your model's accuracy has changed now that you are using a different classifier to produce the result. From c4d1bed09e3d99479ab785e33e4f136599e2ac52 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Tue, 6 Jun 2023 15:13:52 +0100 Subject: [PATCH 17/39] Structure and syntax fixes Signed-off-by: Jannic Holzer --- .../databricks_notebooks_development_workflow.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index 43358ff71c..52e77183cb 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -39,6 +39,13 @@ Once it is created, activate it: conda activate iris-databricks ``` +With your Conda environment activated, install Kedro: + +```bash +pip install kedro +``` + + ### Create a new Kedro project Create a Kedro project with the `databricks-iris` starter using the following command in your local environment: @@ -57,8 +64,8 @@ The main steps are: - Verify your email and navigate to "Settings" under your profile photo. - Select "Developer settings" then "Fine-grained tokens" and click on "Generate new token". -- Input a name for your token, choose an expiration time, select repository access, and define the token permissions. -- Finish by clicking "Generate token". +- Select a name and expiration time for your token, choose an expiration time. +- Select which repositories your token will allow access to and define the token permissions. ```{note} Make sure that `repo` scopes are enabled for your token. @@ -191,7 +198,7 @@ After these cells have successfully run, you should comment the code inside them ```ipython #dbutils.fs.cp( -# "file:///Workspace/Repos/jannic_holzer@mckinsey.com/iris-databricks/data", +# "file:///Workspace/Repos//iris-databricks/data", # "dbfs:/FileStore/iris-databricks/data", # recurse=True, #) @@ -254,7 +261,7 @@ You should see logging output while the cell is running. After execution finishe ## Modify your project and test the changes -Now that your project has run successfully once, you can make changes using the Databricks UI. In this section, you will modify the project to use a different ratio of training data to test data and check the effect of this change on Databricks. +Now that your project has run successfully once, you can make changes using the Databricks UI. In this section, you will modify the project to use a different ratio of training data to test data and check the effect of this change. ### Modify the training / test split ratio From 2272ff617368dcbef690b2eeedc48ca3b8c8cf76 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Tue, 6 Jun 2023 15:22:08 +0100 Subject: [PATCH 18/39] Add environment manager note prerequisite and modify order Signed-off-by: Jannic Holzer --- .../databricks_notebooks_development_workflow.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index 52e77183cb..9c541e8b91 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -22,12 +22,13 @@ This tutorial introduces a project development workflow for Kedro projects using - Python >= 3.7 installed. - Git installed. - A [GitHub](https://github.com/) account. +- A Python environment management system installed, [venv](https://docs.python.org/3/library/venv.html), [virtualenv](https://virtualenv.pypa.io/en/latest/) or [Conda](https://docs.conda.io/en/latest/) are popular choices. ## Set up your project ### Install Kedro in a new virtual environment -In your local development environment, create a virtual environment for this tutorial. Any environment management system can be used, though the following commands use [Conda](https://docs.conda.io/en/latest/): +In your local development environment, create a virtual environment for this tutorial. Any environment management system can be used, though the following commands use Conda: ```bash conda create --name iris-databricks python=3.10 @@ -45,7 +46,6 @@ With your Conda environment activated, install Kedro: pip install kedro ``` - ### Create a new Kedro project Create a Kedro project with the `databricks-iris` starter using the following command in your local environment: @@ -56,6 +56,10 @@ kedro new --starter=databricks-iris Name your new project `iris-databricks` for consistency with the rest of this guide. This command creates a new Kedro project using the `databricks-iris` starter template. +### Create a GitHub repository + +Now you should [create a new repository in GitHub](https://docs.github.com/en/github/getting-started-with-github/create-a-repo) using the official guide. Keep the repository private and don't commit to it yet. For consistency with the rest of this guide, name your GitHub repository `iris-databricks`. + ### Create a GitHub personal access token To synchronise your project between your local development environment and Databricks, you will use a private GitHub repository, which you will create in the next step. For authentication, you will need to create a GitHub personal access token. [Create this token in your GitHub developer settings](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token). @@ -71,17 +75,13 @@ The main steps are: Make sure that `repo` scopes are enabled for your token. ``` -### Create a GitHub repository - -Now you should [create a new repository in GitHub](https://docs.github.com/en/github/getting-started-with-github/create-a-repo) using the official guide. Keep the repository private and don't commit to it yet. For consistency with the rest of this guide, name your GitHub repository `iris-databricks`. +### Push your Kedro project to the GitHub repository -To connect to the newly created repository, use one of two options: +To connect to the newly created repository from your local environment, use one of two options: - **SSH:** If you choose to connect with SSH, you will also need to configure [the SSH connection to GitHub](https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh), unless you already have [an existing SSH key configured for GitHub](https://docs.github.com/en/github/authenticating-to-github/checking-for-existing-ssh-keys) - **HTTPS:** If using HTTPS, you will be asked for your GitHub username and password when you push your first commit. Use your GitHub username and your [personal access token](#create-a-github-personal-access-token) generated in the previous step as the password, [do _not_ use your original GitHub password](https://docs.github.com/en/rest/overview/authenticating-to-the-rest-api#authenticating-with-username-and-password). -### Push your Kedro project to the GitHub repository - At the command line, initialise Git in your project root directory: ```bash From 61c4aa33c13b4ab174f81cbbbce17aedda8caa9c Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Tue, 6 Jun 2023 15:52:33 +0100 Subject: [PATCH 19/39] Change order of notes on SSH / HTTPS GH connection Signed-off-by: Jannic Holzer --- .../databricks_notebooks_development_workflow.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index 9c541e8b91..cdbac50fae 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -77,11 +77,6 @@ Make sure that `repo` scopes are enabled for your token. ### Push your Kedro project to the GitHub repository -To connect to the newly created repository from your local environment, use one of two options: - -- **SSH:** If you choose to connect with SSH, you will also need to configure [the SSH connection to GitHub](https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh), unless you already have [an existing SSH key configured for GitHub](https://docs.github.com/en/github/authenticating-to-github/checking-for-existing-ssh-keys) -- **HTTPS:** If using HTTPS, you will be asked for your GitHub username and password when you push your first commit. Use your GitHub username and your [personal access token](#create-a-github-personal-access-token) generated in the previous step as the password, [do _not_ use your original GitHub password](https://docs.github.com/en/rest/overview/authenticating-to-the-rest-api#authenticating-with-username-and-password). - At the command line, initialise Git in your project root directory: ```bash @@ -100,7 +95,12 @@ git add . git commit -m "first commit" ``` -Finally, push the commit to GitHub: +To connect to your GitHub repository from your local environment, use one of two options: + +- **SSH:** If you choose to connect with SSH, you will also need to configure [the SSH connection to GitHub](https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh), unless you already have [an existing SSH key configured for GitHub](https://docs.github.com/en/github/authenticating-to-github/checking-for-existing-ssh-keys) +- **HTTPS:** If using HTTPS, you will be asked for your GitHub username and password when you push your first commit. Use your GitHub username and your [personal access token](#create-a-github-personal-access-token) generated in the previous step as the password, [do _not_ use your original GitHub password](https://docs.github.com/en/rest/overview/authenticating-to-the-rest-api#authenticating-with-username-and-password). + +With one of these two options chosen, run the following commands: ```bash # configure a new remote From 179b101b9dd5746a321da368763b46802ad0f43f Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Tue, 6 Jun 2023 16:20:44 +0100 Subject: [PATCH 20/39] Modify test accuracy Signed-off-by: Jannic Holzer --- .../databricks/databricks_notebooks_development_workflow.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index cdbac50fae..a993feb2d7 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -254,7 +254,7 @@ You should see logging output while the cell is running. After execution finishe ```bash ... -2023-06-06 12:55:22,705 - iris_databricks.nodes - INFO - Model has an accuracy of 0.972 on test data. +2023-06-06 12:55:22,705 - iris_databricks.nodes - INFO - Model has an accuracy of 0.953 on test data. 2023-06-06 12:55:22,709 - kedro.runner.sequential_runner - INFO - Completed 3 out of 3 tasks 2023-06-06 12:55:22,709 - kedro.runner.sequential_runner - INFO - Pipeline execution completed successfully. ``` From cee1c41f7e32c58d1007fe4f484a29c06d719e59 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Tue, 6 Jun 2023 23:04:55 +0100 Subject: [PATCH 21/39] Remove references to unreadable logs / storing logs on DBFS Signed-off-by: Jannic Holzer --- .../databricks_deployment_workflow.md | 31 ++++--------------- 1 file changed, 6 insertions(+), 25 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_deployment_workflow.md b/docs/source/deployment/databricks/databricks_deployment_workflow.md index ee5bbfc329..70b5babfc9 100644 --- a/docs/source/deployment/databricks/databricks_deployment_workflow.md +++ b/docs/source/deployment/databricks/databricks_deployment_workflow.md @@ -6,7 +6,7 @@ Databricks jobs are a way to execute code on Databricks clusters, allowing you t By packaging your Kedro project and running it on Databricks, you can execute your pipeline without the need for a notebook. This approach is particularly well-suited for production, as it provides a structured and reproducible way to run your code. However, it is not ideal for development, where rapid iteration is necessary. For guidance on developing a Kedro project for Databricks in a rapid build-test loop, see the [development workflow guide](./databricks_development_workflow.md). -Running your packaged project as a Databricks job is very different to running it from a notebook. In particular, it does **not** allow you to see the log output of your project as you may be used to seeing it when running Kedro from a command line or notebook. +Running your packaged project as a Databricks job is very different to running it from a notebook. Running a Kedro project on a job cluster is significantly slower than running it as a notebook on a cluster that has already been started, as the job cluster has to be provisioned and started for each run. In addition, there is no way to change your project's code once it has been packaged. Instead, you must create a new package after making any changes. Here are some typical use cases for running a packaged Kedro project as a Databricks job: @@ -140,18 +140,6 @@ Because you are no longer using the default entry-point for Kedro, you will not - `--conf-source`: specifies the location of the `conf/` directory to use with your Kedro project. ``` -### Plan your project's output - -You will not be able to directly see your project's log output when it is run as a Databricks job. You will need to decide on and implement a strategy for storing your project's results. Some examples are: - -- Write the result of a data engineering pipeline to a managed delta table. -- Upload metrics from a machine learning model to MLflow. -- Save a dataset as a CSV file in DBFS. - -In this guide, your project will save its logs to a location in DBFS (`/dbfs/FileStore/iris-databricks/info.log`). - -**The `databricks-iris` starter is already configured to save logs in this location.** The configuration used to achieve this can be found in the `conf/base/logging.yml` file. - ### Package your project To package your Kedro project for deployment on Databricks, you must create a Wheel (`.whl`) file, which is a binary distribution of your project. In the root directory of your Kedro project, run the following command: @@ -204,7 +192,7 @@ You should see the contents of the project's `data/` directory printed to your t To run your packaged project on Databricks, login to your Databricks account and perform the following steps in the workspace: -1. **Create a new job**: In the Databricks workspace, navigate to the `Worfklows` tab and click `Create Job` **or** click the `New` button, then `Job`: +1. **Create a new job**: In the Databricks workspace, navigate to the `Workflows` tab and click `Create Job` **or** click the `New` button, then `Job`: ![Create Databricks job](../../meta/images/databricks_create_new_job.png) @@ -262,20 +250,13 @@ The following things happen when you run your job: A run will take roughly six to seven minutes. -When the status of your run is `Succeeded`, your job has successfully finished executing. You can now view the logs that your project produced while it was running. To retrieve the log file from the [location in DBFS where it was saved](#plan-your-projects-output), use the following `databricks CLI` command at your local command line with the `iris-databricks` conda environment activated: +When the status of your run is `Succeeded`, your job has successfully finished executing. You can view the logging output created by the run by clicking on the link with the text `Go to the latest successful run` to take you to the `main run` view. You should see logs similar to the following: ```bash -databricks fs cp dbfs:/FileStore/iris-databricks/info.log . -``` - -This will download the log file from DBFS to your local environment. You can view the contents of the `info.log` file in any text editor, they will look similar to the following: - -```bash -... -2023-05-19 14:38:06,333 - kedro.io.data_catalog - INFO - Loading data from 'example_iris_data' (SparkDataSet)... -2023-05-19 14:38:12,077 - kedro.io.data_catalog - INFO - Loading data from 'parameters' (MemoryDataSet)... -2023-05-19 14:38:12,079 - kedro.pipeline.node - INFO - Running node: split: split_data([example_iris_data,parameters]) -> [X_train@pyspark,X_test@pyspark,y_train@pyspark,y_test@pyspark] ... +2023-06-06 12:56:14,399 - iris_databricks.nodes - INFO - Model has an accuracy of 0.972 on test data. +2023-06-06 12:56:14,403 - kedro.runner.sequential_runner - INFO - Completed 3 out of 3 tasks +2023-06-06 12:56:14,404 - kedro.runner.sequential_runner - INFO - Pipeline execution completed successfully. ``` By following these steps, you packaged your Kedro project and manually ran it as a job on Databricks using the workspace UI. From a1436b798845dcc701027793f657ec042c09f8b1 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Tue, 6 Jun 2023 23:06:23 +0100 Subject: [PATCH 22/39] Modify Databricks Iris to databricks-iris for consistency Signed-off-by: Jannic Holzer --- .../databricks/databricks_deployment_workflow.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_deployment_workflow.md b/docs/source/deployment/databricks/databricks_deployment_workflow.md index 70b5babfc9..4db178c5a1 100644 --- a/docs/source/deployment/databricks/databricks_deployment_workflow.md +++ b/docs/source/deployment/databricks/databricks_deployment_workflow.md @@ -81,13 +81,13 @@ Create a Kedro project by using the following command in your local environment: kedro new --starter=databricks-iris ``` -This command creates a new Kedro project using the Databricks Iris starter template. Name your new project `iris-databricks` for consistency with the rest of this guide. +This command creates a new Kedro project using the `databricks-iris` starter template. Name your new project `iris-databricks` for consistency with the rest of this guide. ### Create an entry point for Databricks The default entry point of a Kedro project uses a Click command line interface (CLI), which is not compatible with Databricks. To run your project as a Databricks job, you must define a new entry point specifically for use on Databricks. -The Databricks Iris starter has this entry point pre-built, so there is no extra work to do here, but generally you must **create an entry point manually for your own projects using the following steps**: +The `databricks-iris` starter has this entry point pre-built, so there is no extra work to do here, but generally you must **create an entry point manually for your own projects using the following steps**: 1. **Create an entry point script**: Create a new file in `/src/iris_databricks` named `databricks_run.py`. Copy the following code to this file: @@ -134,7 +134,7 @@ Remember to replace with the correct package name for your projec This process adds an entry point to your project which can be used to run it on Databricks. ```{note} -Because you are no longer using the default entry-point for Kedro, you will not be able to run your project with the options it usually provides. Instead, the `databricks_run` entry point in the above code and in the Databricks Iris starter contains a simple implementation of two options: +Because you are no longer using the default entry-point for Kedro, you will not be able to run your project with the options it usually provides. Instead, the `databricks_run` entry point in the above code and in the `databricks-iris` starter contains a simple implementation of two options: - `--package_name` (required): the package name (defined in `setup.py`) of your packaged project. - `--env`: specifies a [Kedro configuration environment](../../configuration/configuration_basics.md#configuration-environments) to load for your run. - `--conf-source`: specifies the location of the `conf/` directory to use with your Kedro project. @@ -158,7 +158,7 @@ A Kedro project's configuration and data do not get included when it is packaged Your packaged Kedro project needs access to data and configuration in order to run. Therefore, you will need to upload your project's data and configuration to a location accessible to Databricks. In this guide, we will store the data on the Databricks File System (DBFS). -The Databricks Iris starter contains a [catalog](../../data/data_catalog.md#the-data-catalog) that is set up to access data stored in DBFS (`/conf/`). You will point your project to use configuration stored on DBFS using the `--conf-source` option when you create your job on Databricks. +The `databricks-iris` starter contains a [catalog](../../data/data_catalog.md#the-data-catalog) that is set up to access data stored in DBFS (`/conf/`). You will point your project to use configuration stored on DBFS using the `--conf-source` option when you create your job on Databricks. There are several ways to upload data to DBFS: you can use the [DBFS API](https://learn.microsoft.com/en-us/azure/databricks/dev-tools/api/latest/dbfs), the [`dbutils` module](https://docs.databricks.com/dev-tools/databricks-utils.html) in a Databricks notebook or the [Databricks CLI](https://docs.databricks.com/dev-tools/cli/dbfs-cli.html). In this guide, it is recommended to use the Databricks CLI because of the convenience it offers. From ca25b73315dd4434631757459a789ee5539324a1 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Tue, 6 Jun 2023 23:26:00 +0100 Subject: [PATCH 23/39] Replace mentions of PySpark Iris and remove mention of environments Signed-off-by: Jannic Holzer --- .../databricks_development_workflow.md | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_development_workflow.md b/docs/source/deployment/databricks/databricks_development_workflow.md index aa8bcefe4d..152b7337f6 100644 --- a/docs/source/deployment/databricks/databricks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_development_workflow.md @@ -1,6 +1,6 @@ # Databricks development workflow -This guide demonstrates a development workflow for Kedro projects on Databricks using Databricks Repos and the PySpark Iris starter. This workflow enables you to use your local environment for development and Databricks notebooks for testing. It has several advantages for development relative to using only Databricks notebooks as it enables the use of powerful development features offered by an IDE that are not available on Databricks notebooks: +This guide demonstrates a development workflow for Kedro projects on Databricks using Databricks Repos and the `databricks-iris` starter. This workflow enables you to use your local environment for development and Databricks notebooks for testing. It has several advantages for development relative to using only Databricks notebooks as it enables the use of powerful development features offered by an IDE that are not available on Databricks notebooks: - Auto-completion and suggestions for code, improving your development speed and accuracy. - Linters like Pylint or Flake8 can be integrated to catch potential issues in your code. @@ -13,7 +13,7 @@ To set up these features, look for instructions specific to your IDE (for instan This tutorial introduces a project development workflow on Databricks, using your local development environment, dbx, and Databricks Repos to sync code. The main steps in this workflow are: - [Create a virtual environment and install and configure dbx.](#install-kedro-and-dbx-in-a-new-virtual-environment) -- [Create a new Kedro project using the PySpark Iris starter.](#create-a-new-kedro-project) +- [Create a new Kedro project using the `databricks-iris` starter.](#create-a-new-kedro-project) - [Create a repo on Databricks and sync your project using dbx.](#create-a-repo-on-databricks) - [Upload project data to a location accessible by Kedro when run on Databricks (such as DBFS).](#upload-project-data-to-dbfs) - [Create a Databricks notebook to run your project.](#create-a-new-databricks-notebook) @@ -76,13 +76,13 @@ dbx is an extension of the Databricks CLI, a command-line program for interactin ### Create a new Kedro project -Create a Kedro project with the PySpark Iris starter using the following command in your local environment: +Create a Kedro project with the `databricks-iris` starter using the following command in your local environment: ```bash -kedro new --starter=pyspark-iris +kedro new --starter=databricks-iris ``` -Name your new project `iris-databricks` for consistency with the rest of this guide. This command creates a new Kedro project using the PySpark Iris starter template. +Name your new project `iris-databricks` for consistency with the rest of this guide. This command creates a new Kedro project using the `databricks-iris` starter template. ### Create a repo on Databricks @@ -136,7 +136,9 @@ Name the new folder `local`. In this guide, we have no local credentials to stor ### Upload project data to DBFS -When run on Databricks, Kedro cannot access data stored in your project's directory. Therefore, you will need to upload your project's data to an accessible location. In this guide, we will store the data on the Databricks File System (DBFS). The PySpark Iris starter contains an environment that is set up to access data stored in DBFS (`conf/databricks`). To learn more about environments in Kedro configuration, see the [configuration documentation](../../configuration/configuration_basics.md#configuration-environments). +When run on Databricks, Kedro cannot access data stored in your project's directory. Therefore, you will need to upload your project's data to an accessible location. In this guide, we will store the data on the Databricks File System (DBFS). + +The `databricks-iris` starter contains a [catalog](../../data/data_catalog.md#the-data-catalog) that is set up to access data stored in DBFS (`/conf/`). You will point your project to use configuration stored on DBFS using the `--conf-source` option when you create your job on Databricks. There are several ways to upload data to DBFS. In this guide, it is recommended to use [Databricks CLI](https://docs.databricks.com/dev-tools/cli/dbfs-cli.html) because of the convenience it offers. At the command line in your local environment, use the following Databricks CLI command to upload your locally stored data to DBFS: @@ -187,10 +189,10 @@ Open your newly-created notebook and create **four new cells** inside it. You wi %load_ext kedro.ipython ``` -3. Loading the extension allows you to use the `%reload_kedro` line magic to load your Kedro project. The `--env=databricks` option will make Kedro use the `databricks` environment. The `databricks` environment is defined in the PySpark Iris starter and directs Kedro to use the configuration in the `conf/databricks` directory. Add the following code to the third new cell to load your Kedro project: +3. Loading the extension allows you to use the `%reload_kedro` line magic to load your Kedro project. Add the following code to the third new cell to load your Kedro project: ```ipython -%reload_kedro /Workspace/Repos//iris-databricks --env=databricks +%reload_kedro /Workspace/Repos//iris-databricks ``` 4. Loading your Kedro project with the `%reload_kedro` line magic will define four global variables in your notebook: `context`, `session`, `catalog` and `pipelines`. You will use the `session` variable to run your project. Add the following code to the fourth new cell to run your Kedro project: @@ -215,10 +217,9 @@ You should see logging output while the cell is running. After execution finishe ```bash ... -[08/09/22 11:23:30] INFO Model has accuracy of 0.960 on test data. nodes.py:74 - INFO Saving data to 'metrics' (MetricsDataSet)... data_catalog.py:382 - INFO Completed 3 out of 3 tasks sequential_runner.py:85 - INFO Pipeline execution completed successfully. runner.py:89 +2023-06-06 17:21:53,221 - iris_databricks.nodes - INFO - Model has an accuracy of 0.960 on test data. +2023-06-06 17:21:53,222 - kedro.runner.sequential_runner - INFO - Completed 3 out of 3 tasks +2023-06-06 17:21:53,224 - kedro.runner.sequential_runner - INFO - Pipeline execution completed successfully. ``` ## Modify your project and test the changes @@ -227,7 +228,7 @@ Now that your project has run successfully once, you can make changes using the ### Modify the training / test split ratio -The PySpark Iris starter uses a default 80-20 ratio of training data to test data when training the classifier. In this section, you will change this ratio to 70-30 by editing your project in your local environment, then sync it with the Databricks repo using `dbx`, and then run the modified project on Databricks to observe the different result. +The `databricks-iris` starter uses a default 80-20 ratio of training data to test data when training the classifier. In this section, you will change this ratio to 70-30 by editing your project in your local environment, then sync it with the Databricks repo using `dbx`, and then run the modified project on Databricks to observe the different result. Open the file `/conf/base/parameters.yml` in your local environment. Edit the line `train_fraction: 0.8` to `train_fraction: 0.7` and save your changes. Look in the terminal where `dbx sync` is running, you should see it automatically sync your changes with your Databricks repo: @@ -243,10 +244,9 @@ Return to your Databricks notebook. Re-run the third and fourth cells in your no ```bash ... -[08/09/22 11:23:30] INFO Model has accuracy of 0.953 on test data. nodes.py:74 - INFO Saving data to 'metrics' (MetricsDataSet)... data_catalog.py:382 - INFO Completed 3 out of 3 tasks sequential_runner.py:85 - INFO Pipeline execution completed successfully. runner.py:89 +2023-06-06 17:23:19,561 - iris_databricks.nodes - INFO - Model has an accuracy of 0.972 on test data. +2023-06-06 17:23:19,562 - kedro.runner.sequential_runner - INFO - Completed 3 out of 3 tasks +2023-06-06 17:23:19,564 - kedro.runner.sequential_runner - INFO - Pipeline execution completed successfully. ``` You can see that your model's accuracy has changed now that you are using a different classifier to produce the result. From 2079a651e39c58a43932e571f2f3d2f93c16f914 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Tue, 6 Jun 2023 23:27:34 +0100 Subject: [PATCH 24/39] Capitalise Repo correctly Signed-off-by: Jannic Holzer --- .../databricks_development_workflow.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_development_workflow.md b/docs/source/deployment/databricks/databricks_development_workflow.md index 152b7337f6..4917440bc1 100644 --- a/docs/source/deployment/databricks/databricks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_development_workflow.md @@ -14,7 +14,7 @@ This tutorial introduces a project development workflow on Databricks, using you - [Create a virtual environment and install and configure dbx.](#install-kedro-and-dbx-in-a-new-virtual-environment) - [Create a new Kedro project using the `databricks-iris` starter.](#create-a-new-kedro-project) -- [Create a repo on Databricks and sync your project using dbx.](#create-a-repo-on-databricks) +- [Create a Repo on Databricks and sync your project using dbx.](#create-a-repo-on-databricks) - [Upload project data to a location accessible by Kedro when run on Databricks (such as DBFS).](#upload-project-data-to-dbfs) - [Create a Databricks notebook to run your project.](#create-a-new-databricks-notebook) - [Modify your project in your local environment and test the changes on Databricks in an iterative loop.](#modify-your-project-and-test-the-changes) @@ -71,7 +71,7 @@ pip install kedro dbx --upgrade 4. Run `databricks fs ls dbfs:/` at the command line to verify your authentication. ```{note} -dbx is an extension of the Databricks CLI, a command-line program for interacting with Databricks without using its UI. You will use dbx to sync your project's code with Databricks. While Git can sync code to Databricks repos, dbx is preferred for development as it avoids creating new commits for every change, even if those changes do not work. +dbx is an extension of the Databricks CLI, a command-line program for interacting with Databricks without using its UI. You will use dbx to sync your project's code with Databricks. While Git can sync code to Databricks Repos, dbx is preferred for development as it avoids creating new commits for every change, even if those changes do not work. ``` ### Create a new Kedro project @@ -84,17 +84,17 @@ kedro new --starter=databricks-iris Name your new project `iris-databricks` for consistency with the rest of this guide. This command creates a new Kedro project using the `databricks-iris` starter template. -### Create a repo on Databricks +### Create a Repo on Databricks -Create a new repo on Databricks by navigating to `New` tab in the Databricks workspace UI side bar and clicking `Repo` in the drop-down menu that appears. +Create a new Repo on Databricks by navigating to `New` tab in the Databricks workspace UI side bar and clicking `Repo` in the drop-down menu that appears. In this guide, you will not sync your project with a remote Git provider, so uncheck `Create repo by cloning a Git repository` and enter `iris-databricks` as the name of your new repository: -![Create a new repo on Databricks](../../meta/images/databricks_repo_creation.png) +![Create a new Repo on Databricks](../../meta/images/databricks_repo_creation.png) -### Sync code with your Databricks repo using dbx +### Sync code with your Databricks Repo using dbx -The next step is to use dbx to sync your project to your repo. +The next step is to use dbx to sync your project to your Repo. **Open a new terminal instance**, activate your conda environment, and navigate to your project directory and start `dbx sync`: @@ -104,7 +104,7 @@ cd dbx sync repo --dest-repo iris-databricks --source . ``` -This command will sync your local directory (`--source .`) with your repo (`--dest-repo iris-databricks`) on Databricks. When started for the first time, `dbx sync` will write output similar to the following to your terminal: +This command will sync your local directory (`--source .`) with your Repo (`--dest-repo iris-databricks`) on Databricks. When started for the first time, `dbx sync` will write output similar to the following to your terminal: ```bash ... @@ -116,19 +116,19 @@ This command will sync your local directory (`--source .`) with your repo (`--de **Keep the second terminal (running dbx sync) alive during development; closing it stops syncing new changes.** -`dbx sync` will automatically sync any further changes made in your local project directory with your Databricks repo while it runs. +`dbx sync` will automatically sync any further changes made in your local project directory with your Databricks Repo while it runs. ```{note} Syncing with dbx is one-way only, meaning changes you make using the Databricks Repos code editor will not be reflected in your local environment. Only make changes to your project in your local environment while syncing, not in the editor that Databricks Repos provides. ``` -### Create a `conf/local` directory in your Databricks repo +### Create a `conf/local` directory in your Databricks Repo -Kedro requires your project to have a `conf/local` directory to exist to successfully run, even if it is empty. `dbx sync` does not copy the contents of your local `conf/local` directory to your Databricks repo, so you must create it manually. +Kedro requires your project to have a `conf/local` directory to exist to successfully run, even if it is empty. `dbx sync` does not copy the contents of your local `conf/local` directory to your Databricks Repo, so you must create it manually. Open the Databricks workspace UI and using the panel on the left, navigate to `Repos -> -> iris-databricks -> conf`, right click and select `Create -> Folder` as in the image below: -![Create a conf folder in Databricks repo](../../meta/images/databricks_conf_folder_creation.png) +![Create a conf folder in Databricks Repo](../../meta/images/databricks_conf_folder_creation.png) Name the new folder `local`. In this guide, we have no local credentials to store and so we will leave the newly created folder empty. Your `conf/local` and `local` directories should now look like the following: @@ -169,7 +169,7 @@ You should see the contents of the project's `data/` directory printed to your t Now that your project is available on Databricks, you can run it on a cluster using a notebook. -To run the Python code from your Databricks repo, [create a new Python notebook](https://docs.databricks.com/notebooks/notebooks-manage.html#create-a-notebook) in your workspace. Name it `iris-databricks` for traceability and attach it to your cluster: +To run the Python code from your Databricks Repo, [create a new Python notebook](https://docs.databricks.com/notebooks/notebooks-manage.html#create-a-notebook) in your workspace. Name it `iris-databricks` for traceability and attach it to your cluster: ![Create a new notebook on Databricks](../../meta/images/databricks_notebook_creation.png) @@ -228,9 +228,9 @@ Now that your project has run successfully once, you can make changes using the ### Modify the training / test split ratio -The `databricks-iris` starter uses a default 80-20 ratio of training data to test data when training the classifier. In this section, you will change this ratio to 70-30 by editing your project in your local environment, then sync it with the Databricks repo using `dbx`, and then run the modified project on Databricks to observe the different result. +The `databricks-iris` starter uses a default 80-20 ratio of training data to test data when training the classifier. In this section, you will change this ratio to 70-30 by editing your project in your local environment, then sync it with the Databricks Repo using `dbx`, and then run the modified project on Databricks to observe the different result. -Open the file `/conf/base/parameters.yml` in your local environment. Edit the line `train_fraction: 0.8` to `train_fraction: 0.7` and save your changes. Look in the terminal where `dbx sync` is running, you should see it automatically sync your changes with your Databricks repo: +Open the file `/conf/base/parameters.yml` in your local environment. Edit the line `train_fraction: 0.8` to `train_fraction: 0.7` and save your changes. Look in the terminal where `dbx sync` is running, you should see it automatically sync your changes with your Databricks Repo: ```bash ... From 7e1037cba17764027b267b99897d6f04ed088f17 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Wed, 7 Jun 2023 11:40:13 +0100 Subject: [PATCH 25/39] Remove old documentation Signed-off-by: Jannic Holzer --- .../databricks/databricks_workspace.md | 284 ------------------ 1 file changed, 284 deletions(-) delete mode 100644 docs/source/deployment/databricks/databricks_workspace.md diff --git a/docs/source/deployment/databricks/databricks_workspace.md b/docs/source/deployment/databricks/databricks_workspace.md deleted file mode 100644 index 060ec45243..0000000000 --- a/docs/source/deployment/databricks/databricks_workspace.md +++ /dev/null @@ -1,284 +0,0 @@ -# Databricks notebooks workflow - -This tutorial uses the [PySpark Iris Kedro Starter](https://github.com/kedro-org/kedro-starters/tree/main/pyspark-iris) to illustrate how to bootstrap a Kedro project using Spark and deploy it to a [Databricks cluster on AWS](https://databricks.com/aws). - -```{note} -If you are using [Databricks Repos](https://docs.databricks.com/repos/index.html) to run a Kedro project then you should [disable file-based logging](../../logging/logging.md#disable-file-based-logging). This prevents Kedro from attempting to write to the read-only file system. -``` - -```{note} -If you are a Kedro contributor looking for information on deploying a custom build of Kedro to Databricks, see the [development guide](../../contribution/development_for_databricks.md). -``` - -## Prerequisites - -* New or existing [AWS account](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) with administrative privileges -* Active [Databricks deployment](https://docs.databricks.com/getting-started/index.html) on AWS (Databricks Community Edition won't suffice as it doesn't allow you to provision personal tokens) -* [Conda installed](https://docs.conda.io/projects/conda/en/latest/user-guide/install/index.html) on your local machine -* An account on [GitHub](https://github.com/) (free tier or above) -* [Git installed](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) on your local machine - - -## Running Kedro project from a Databricks notebook - -As noted in [this post describing CI/CD automation on Databricks](https://databricks.com/blog/2020/06/05/automate-continuous-integration-and-continuous-delivery-on-databricks-using-databricks-labs-ci-cd-templates.html#toc-2), _"Users may find themselves struggling to keep up with the numerous notebooks containing the ETL, data science experimentation, dashboards etc."_ - -Therefore, we do not recommend that you rely on the notebooks for running and/or deploying your Kedro pipelines unless it is unavoidable. The workflow described in this section may be useful for experimentation and initial data analysis stages, but it is _not_ designed for productionisation. - - -### 1. Project setup - -First, let's create a new virtual environment and, within it, a new Kedro project: - -```bash -# create fresh virtual env -# NOTE: minor Python version of the environment -# must match the version on the Databricks cluster -conda create --name iris_databricks python=3.7 -y -conda activate iris_databricks - -# install Kedro and create a new project -pip install "kedro~=0.18.9" -# name your project Iris Databricks when prompted for it -kedro new --starter=pyspark-iris -``` - -### 2. Install dependencies and run locally - -Now, as the project has been successfully created, we should move into the project root directory, install project dependencies, and then start a local test run using [Spark local execution mode](https://stackoverflow.com/a/54064507/3364156), which means that all Spark jobs will be executed in a single JVM locally, rather than in a cluster. `pyspark-iris` Kedro starter used to generate the project already has all necessary configuration for it to work, you just need to have `pyspark` Python package installed, which is done for you by `pip install -r src/requirements.txt` command below. - -```bash -# change the directory to the project root -cd iris-databricks/ -# compile and install the project dependencies, this may take a few minutes -pip install -r src/requirements.txt -# start a local run -kedro run -``` - -You should get a similar output: -```console -... -[08/09/22 11:23:30] INFO Model has accuracy of 0.933 on test data. nodes.py:74 - INFO Completed 3 out of 3 tasks sequential_runner.py:85 - INFO Pipeline execution completed successfully. runner.py:89 -``` -### 3. Create a Databricks cluster - -If you already have an active cluster with runtime version `7.3`, you can skip this step. Here is [how to find clusters in your Databricks workspace](https://docs.databricks.com/clusters/clusters-manage.html). - -Follow the [Databricks official guide to create a new cluster](https://docs.databricks.com/clusters/create-cluster.html). For the purpose of this tutorial (and to minimise costs) we recommend the following settings: -* Runtime: `7.3 (Scala 2.12, Spark 3.0.1)` -* Enable autoscaling: `off` -* Terminate after 120 minutes of inactivity: `on` -* Worker type: `Standard_DS3_v2` -* Driver Type: `Same as worker` -* Workers: `2` - -While your cluster is being provisioned, you can continue to the next step. - -As a result you should have: -* A Kedro project, which runs with the local version of PySpark library -* A running Databricks cluster - -### 4. Create GitHub personal access token - -To synchronise the project between the local development environment and Databricks, we will use a private GitHub repository, which you will create in the next step. For authentication, we will need a GitHub personal access token, so go ahead and [create this token in your GitHub developer settings](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token). - -```{note} -Make sure that `repo` scopes are enabled for your token. -``` - -### 5. Create a GitHub repository - -Now you should [create a new repository in GitHub](https://docs.github.com/en/github/getting-started-with-github/create-a-repo) using the official guide. You can keep the repository private and you don't need to commit to it just yet. - -To connect to the newly created repository you can use one of 2 options: - -* **SSH:** If you choose to connect with SSH, you will also need to configure [the SSH connection to GitHub](https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh), unless you already have [an existing SSH key configured for GitHub](https://docs.github.com/en/github/authenticating-to-github/checking-for-existing-ssh-keys) -* **HTTPS:** If using HTTPS, you will be asked for your GitHub username and password when you push your first commit - please use your GitHub username and your [personal access token](#4-create-github-personal-access-token) generated in the previous step as a password and [_not_ your original GitHub password](https://docs.github.com/en/rest/overview/authenticating-to-the-rest-api#authenticating-with-username-and-password). - -### 6. Push Kedro project to the GitHub repository - -We will use a CLI to push the newly created Kedro project to GitHub. First, you need to initialise Git in your project root directory: - -```bash -# change the directory to the project root -cd iris-databricks/ -# initialise git -git init -``` - -Then, create the first commit: - -```bash -# add all files to git staging area -git add . -# create the first commit -git commit -m "first commit" -``` - -Finally, push the commit to GitHub: - -```bash -# configure a new remote -# for HTTPS run: -git remote add origin https://github.com//.git -# or for SSH run: -git remote add origin git@github.com:/.git - -# verify the new remote URL -git remote -v - -# push the first commit -git push --set-upstream origin main -``` - -### 7. Configure the Databricks cluster - -The project has now been pushed to your private GitHub repository, and in order to pull it from the Databricks, we need to configure the [personal access token you generated in Step 2](#4-create-github-personal-access-token). - -[Log into your Databricks workspace](https://docs.databricks.com/workspace/workspace-details.html#workspace-instance-names-urls-and-ids) and then: -1. Open `Clusters` tab -2. Click on your cluster name -3. Press `Edit` -4. Go to the `Advanced Options` and then `Spark` - -![](../../meta/images/databricks_cluster_edit.png) - -Then in the `Environment Variables` section add your `GITHUB_USER` and `GITHUB_TOKEN` as shown on the picture: - -![](../../meta/images/databricks_cluster_env_vars.png) - - -```{note} -For security purposes, we strongly recommend against hard-coding any secrets into your notebooks. -``` - -Then press `Confirm` button. Your cluster will be restarted to apply the changes, this will take a few minutes. - -### 8. Run your Kedro project from the Databricks notebook - -Congratulations, you are now ready to run your Kedro project from the Databricks! - -[Create your Databricks notebook](https://docs.databricks.com/notebooks/notebooks-manage.html#create-a-notebook) and remember to attach it to the cluster you have just configured. - -In your newly-created notebook, put each of the below code snippets into a separate cell, then [run all cells](https://docs.databricks.com/notebooks/run-notebook.html): - -* Clone your project from GitHub - -```console -%sh rm -rf ~/projects/iris-databricks && git clone --single-branch --branch main https://${GITHUB_USER}:${GITHUB_TOKEN}@github.com/${GITHUB_USER}/.git ~/projects/iris-databricks -``` - -* Install Kedro and the latest compatible version of Kedro-Datasets. - -```console -%pip install "kedro==0.18.9" "kedro-datasets[spark.SparkDataSet]~=1.1" -``` - -* Copy input data into DBFS - -```python -import logging -from pathlib import Path - -# suppress excessive logging from py4j -logging.getLogger("py4j.java_gateway").setLevel(logging.ERROR) - -# copy project data into DBFS -project_root = Path.home() / "projects" / "iris-databricks" -data_dir = project_root / "data" -dbutils.fs.cp( - f"file://{data_dir.as_posix()}", f"dbfs://{data_dir.as_posix()}", recurse=True -) - -# make sure the data has been copied -dbutils.fs.ls((data_dir / "01_raw").as_posix()) -``` - -You should get a similar output: -```console -Out[11]: [FileInfo(path='dbfs:/root/projects/iris-databricks/data/01_raw/.gitkeep', name='.gitkeep', size=0), - FileInfo(path='dbfs:/root/projects/iris-databricks/data/01_raw/iris.csv', name='iris.csv', size=3858)] -``` - -* Run Kedro project - -```python -from kedro.framework.session import KedroSession -from kedro.framework.startup import bootstrap_project - -bootstrap_project(project_root) - -with KedroSession.create(project_path=project_root, env="databricks") as session: - session.run() -``` - -You should get a similar output: - -```console -... -[08/09/22 11:23:30] INFO Model has accuracy of 0.933 on test data. nodes.py:74 - INFO Saving data to 'metrics' (MetricsDataSet)... data_catalog.py:382 - INFO Completed 3 out of 3 tasks sequential_runner.py:85 - INFO Pipeline execution completed successfully. runner.py:89 -``` - -Your complete notebook should look similar to this (the results are hidden): - -![](../../meta/images/databricks_notebook_example.png) - - -### 9. Using the Kedro IPython Extension - -You can interact with Kedro in Databricks through the Kedro [IPython extension](https://ipython.readthedocs.io/en/stable/config/extensions/index.html), `kedro.ipython`. - -The Kedro IPython extension launches a [Kedro session](../../kedro_project_setup/session.md) and makes available the useful Kedro variables `catalog`, `context`, `pipelines` and `session`. It also provides the `%reload_kedro` [line magic](https://ipython.readthedocs.io/en/stable/interactive/magics.html) that reloads these variables (for example, if you need to update `catalog` following changes to your Data Catalog). - -The IPython extension can be used in a Databricks notebook in a similar way to how it is used in [Jupyter notebooks](../../notebooks_and_ipython/kedro_and_notebooks.md). - -If you encounter a `ContextualVersionConflictError`, it is likely caused by Databricks using an old version of `pip`. Hence there's one additional step you need to do in the Databricks notebook to make use of the IPython extension. After you load the IPython extension using the below command: - -```ipython -In [1]: %load_ext kedro.ipython -``` - -You must explicitly upgrade your `pip` version by doing the below: - -```bash -%pip install -U pip -``` - -After this, you can reload Kedro by running the line magic command `%reload_kedro `. - -## How to use datasets stored on Databricks DBFS - -DBFS is a distributed file system mounted into a DataBricks workspace and accessible on a DataBricks cluster. It maps cloud object storage URIs to relative paths so as to simplify the process of persisting files. With DBFS, libraries can read from or write to distributed storage as if it's a local file. -To use datasets with DBFS, the file path passed to the dataset **must** be prefixed with `/dbfs/` and look something like, `/dbfs/example_project/data/02_intermediate/processed_data`. This applies to all datasets, including `SparkDataSet`. -> **Note**: Most Python code, except PySpark, will try to resolve a file path in the driver node storage by default, this will result in an `DataSetError` if the code is using a file path that is actually a DBFS save location. To avoid this, always make sure to point the file path to `/dbfs` when storing or loading data on DBFS. For more rules on what is saved in DBFS versus driver node storage by default, please refer to the [Databricks documentation](https://docs.databricks.com/files/index.html#what-is-the-root-path-for-databricks). - -## Run a packaged Kedro project on Databricks - -To run a packaged Kedro project that has been installed on a Databricks cluster, use the following code: - -```python -from kedro.framework.session import KedroSession -from kedro.framework.startup import configure_project - -package_name = "" -configure_project(package_name) - -with KedroSession.create(package_name) as session: - session.run() -``` - -Replace `` with your package's name. - -Use `configure_project()` to run a packaged Kedro project interactively. Do **not** use `bootstrap_project()`, which is meant only for projects that haven't been packaged. - -The `package_name` keyword argument of `KedroSession.create()` currently does not have any effect and can be confusing. This argument will be removed in Kedro version 0.19, which is a breaking change. For now, you can safely ignore this argument. - -```{note} -The entry-point of a packaged project is the `main()` method of `src//__main__.py`, and it returns an exit code, which stops downstream processes from using its output. This known to cause problems on Databricks. Therefore, you should **always** use `session.run()` to run a packaged project on Databricks. -``` From 1151a67b618c70d8c7a88b8bae185c2d57d7ba9c Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Wed, 7 Jun 2023 11:40:43 +0100 Subject: [PATCH 26/39] Refine wording for having to create a new package Signed-off-by: Jannic Holzer --- .../deployment/databricks/databricks_deployment_workflow.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/deployment/databricks/databricks_deployment_workflow.md b/docs/source/deployment/databricks/databricks_deployment_workflow.md index 4db178c5a1..50da67cded 100644 --- a/docs/source/deployment/databricks/databricks_deployment_workflow.md +++ b/docs/source/deployment/databricks/databricks_deployment_workflow.md @@ -6,7 +6,7 @@ Databricks jobs are a way to execute code on Databricks clusters, allowing you t By packaging your Kedro project and running it on Databricks, you can execute your pipeline without the need for a notebook. This approach is particularly well-suited for production, as it provides a structured and reproducible way to run your code. However, it is not ideal for development, where rapid iteration is necessary. For guidance on developing a Kedro project for Databricks in a rapid build-test loop, see the [development workflow guide](./databricks_development_workflow.md). -Running your packaged project as a Databricks job is very different to running it from a notebook. Running a Kedro project on a job cluster is significantly slower than running it as a notebook on a cluster that has already been started, as the job cluster has to be provisioned and started for each run. In addition, there is no way to change your project's code once it has been packaged. Instead, you must create a new package after making any changes. +Running your packaged project as a Databricks job is very different to running it from a notebook. Running a Kedro project on a job cluster is significantly slower than running it as a notebook on a cluster that has already been started, as the job cluster has to be provisioned and started for each run. In addition, there is no way to change your project's code once it has been packaged. Instead, you must create a new package after changing your code and upload it to Databricks again. Here are some typical use cases for running a packaged Kedro project as a Databricks job: From 84dc938581f9e399eb38c5dae5c165c2d2754a24 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Wed, 7 Jun 2023 11:43:24 +0100 Subject: [PATCH 27/39] Update title of deployment workflow Signed-off-by: Jannic Holzer --- .../deployment/databricks/databricks_deployment_workflow.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/deployment/databricks/databricks_deployment_workflow.md b/docs/source/deployment/databricks/databricks_deployment_workflow.md index 477616b2fb..ad2b35d72c 100644 --- a/docs/source/deployment/databricks/databricks_deployment_workflow.md +++ b/docs/source/deployment/databricks/databricks_deployment_workflow.md @@ -1,4 +1,4 @@ -# Databricks deployment workflow +# Developing Kedro projects for Databricks using an IDE Databricks jobs are a way to execute code on Databricks clusters, allowing you to run data processing tasks, ETL jobs, or machine learning workflows. In this guide we explore the process of packaging a Kedro project and running it as a job on Databricks. From 77dc9db40d7f9f24bd6b344e40a8a273a1f984d8 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Wed, 7 Jun 2023 11:40:13 +0100 Subject: [PATCH 28/39] Remove old documentation Signed-off-by: Jannic Holzer --- .../databricks/databricks_workspace.md | 284 ------------------ 1 file changed, 284 deletions(-) delete mode 100644 docs/source/deployment/databricks/databricks_workspace.md diff --git a/docs/source/deployment/databricks/databricks_workspace.md b/docs/source/deployment/databricks/databricks_workspace.md deleted file mode 100644 index 060ec45243..0000000000 --- a/docs/source/deployment/databricks/databricks_workspace.md +++ /dev/null @@ -1,284 +0,0 @@ -# Databricks notebooks workflow - -This tutorial uses the [PySpark Iris Kedro Starter](https://github.com/kedro-org/kedro-starters/tree/main/pyspark-iris) to illustrate how to bootstrap a Kedro project using Spark and deploy it to a [Databricks cluster on AWS](https://databricks.com/aws). - -```{note} -If you are using [Databricks Repos](https://docs.databricks.com/repos/index.html) to run a Kedro project then you should [disable file-based logging](../../logging/logging.md#disable-file-based-logging). This prevents Kedro from attempting to write to the read-only file system. -``` - -```{note} -If you are a Kedro contributor looking for information on deploying a custom build of Kedro to Databricks, see the [development guide](../../contribution/development_for_databricks.md). -``` - -## Prerequisites - -* New or existing [AWS account](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) with administrative privileges -* Active [Databricks deployment](https://docs.databricks.com/getting-started/index.html) on AWS (Databricks Community Edition won't suffice as it doesn't allow you to provision personal tokens) -* [Conda installed](https://docs.conda.io/projects/conda/en/latest/user-guide/install/index.html) on your local machine -* An account on [GitHub](https://github.com/) (free tier or above) -* [Git installed](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) on your local machine - - -## Running Kedro project from a Databricks notebook - -As noted in [this post describing CI/CD automation on Databricks](https://databricks.com/blog/2020/06/05/automate-continuous-integration-and-continuous-delivery-on-databricks-using-databricks-labs-ci-cd-templates.html#toc-2), _"Users may find themselves struggling to keep up with the numerous notebooks containing the ETL, data science experimentation, dashboards etc."_ - -Therefore, we do not recommend that you rely on the notebooks for running and/or deploying your Kedro pipelines unless it is unavoidable. The workflow described in this section may be useful for experimentation and initial data analysis stages, but it is _not_ designed for productionisation. - - -### 1. Project setup - -First, let's create a new virtual environment and, within it, a new Kedro project: - -```bash -# create fresh virtual env -# NOTE: minor Python version of the environment -# must match the version on the Databricks cluster -conda create --name iris_databricks python=3.7 -y -conda activate iris_databricks - -# install Kedro and create a new project -pip install "kedro~=0.18.9" -# name your project Iris Databricks when prompted for it -kedro new --starter=pyspark-iris -``` - -### 2. Install dependencies and run locally - -Now, as the project has been successfully created, we should move into the project root directory, install project dependencies, and then start a local test run using [Spark local execution mode](https://stackoverflow.com/a/54064507/3364156), which means that all Spark jobs will be executed in a single JVM locally, rather than in a cluster. `pyspark-iris` Kedro starter used to generate the project already has all necessary configuration for it to work, you just need to have `pyspark` Python package installed, which is done for you by `pip install -r src/requirements.txt` command below. - -```bash -# change the directory to the project root -cd iris-databricks/ -# compile and install the project dependencies, this may take a few minutes -pip install -r src/requirements.txt -# start a local run -kedro run -``` - -You should get a similar output: -```console -... -[08/09/22 11:23:30] INFO Model has accuracy of 0.933 on test data. nodes.py:74 - INFO Completed 3 out of 3 tasks sequential_runner.py:85 - INFO Pipeline execution completed successfully. runner.py:89 -``` -### 3. Create a Databricks cluster - -If you already have an active cluster with runtime version `7.3`, you can skip this step. Here is [how to find clusters in your Databricks workspace](https://docs.databricks.com/clusters/clusters-manage.html). - -Follow the [Databricks official guide to create a new cluster](https://docs.databricks.com/clusters/create-cluster.html). For the purpose of this tutorial (and to minimise costs) we recommend the following settings: -* Runtime: `7.3 (Scala 2.12, Spark 3.0.1)` -* Enable autoscaling: `off` -* Terminate after 120 minutes of inactivity: `on` -* Worker type: `Standard_DS3_v2` -* Driver Type: `Same as worker` -* Workers: `2` - -While your cluster is being provisioned, you can continue to the next step. - -As a result you should have: -* A Kedro project, which runs with the local version of PySpark library -* A running Databricks cluster - -### 4. Create GitHub personal access token - -To synchronise the project between the local development environment and Databricks, we will use a private GitHub repository, which you will create in the next step. For authentication, we will need a GitHub personal access token, so go ahead and [create this token in your GitHub developer settings](https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token). - -```{note} -Make sure that `repo` scopes are enabled for your token. -``` - -### 5. Create a GitHub repository - -Now you should [create a new repository in GitHub](https://docs.github.com/en/github/getting-started-with-github/create-a-repo) using the official guide. You can keep the repository private and you don't need to commit to it just yet. - -To connect to the newly created repository you can use one of 2 options: - -* **SSH:** If you choose to connect with SSH, you will also need to configure [the SSH connection to GitHub](https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh), unless you already have [an existing SSH key configured for GitHub](https://docs.github.com/en/github/authenticating-to-github/checking-for-existing-ssh-keys) -* **HTTPS:** If using HTTPS, you will be asked for your GitHub username and password when you push your first commit - please use your GitHub username and your [personal access token](#4-create-github-personal-access-token) generated in the previous step as a password and [_not_ your original GitHub password](https://docs.github.com/en/rest/overview/authenticating-to-the-rest-api#authenticating-with-username-and-password). - -### 6. Push Kedro project to the GitHub repository - -We will use a CLI to push the newly created Kedro project to GitHub. First, you need to initialise Git in your project root directory: - -```bash -# change the directory to the project root -cd iris-databricks/ -# initialise git -git init -``` - -Then, create the first commit: - -```bash -# add all files to git staging area -git add . -# create the first commit -git commit -m "first commit" -``` - -Finally, push the commit to GitHub: - -```bash -# configure a new remote -# for HTTPS run: -git remote add origin https://github.com//.git -# or for SSH run: -git remote add origin git@github.com:/.git - -# verify the new remote URL -git remote -v - -# push the first commit -git push --set-upstream origin main -``` - -### 7. Configure the Databricks cluster - -The project has now been pushed to your private GitHub repository, and in order to pull it from the Databricks, we need to configure the [personal access token you generated in Step 2](#4-create-github-personal-access-token). - -[Log into your Databricks workspace](https://docs.databricks.com/workspace/workspace-details.html#workspace-instance-names-urls-and-ids) and then: -1. Open `Clusters` tab -2. Click on your cluster name -3. Press `Edit` -4. Go to the `Advanced Options` and then `Spark` - -![](../../meta/images/databricks_cluster_edit.png) - -Then in the `Environment Variables` section add your `GITHUB_USER` and `GITHUB_TOKEN` as shown on the picture: - -![](../../meta/images/databricks_cluster_env_vars.png) - - -```{note} -For security purposes, we strongly recommend against hard-coding any secrets into your notebooks. -``` - -Then press `Confirm` button. Your cluster will be restarted to apply the changes, this will take a few minutes. - -### 8. Run your Kedro project from the Databricks notebook - -Congratulations, you are now ready to run your Kedro project from the Databricks! - -[Create your Databricks notebook](https://docs.databricks.com/notebooks/notebooks-manage.html#create-a-notebook) and remember to attach it to the cluster you have just configured. - -In your newly-created notebook, put each of the below code snippets into a separate cell, then [run all cells](https://docs.databricks.com/notebooks/run-notebook.html): - -* Clone your project from GitHub - -```console -%sh rm -rf ~/projects/iris-databricks && git clone --single-branch --branch main https://${GITHUB_USER}:${GITHUB_TOKEN}@github.com/${GITHUB_USER}/.git ~/projects/iris-databricks -``` - -* Install Kedro and the latest compatible version of Kedro-Datasets. - -```console -%pip install "kedro==0.18.9" "kedro-datasets[spark.SparkDataSet]~=1.1" -``` - -* Copy input data into DBFS - -```python -import logging -from pathlib import Path - -# suppress excessive logging from py4j -logging.getLogger("py4j.java_gateway").setLevel(logging.ERROR) - -# copy project data into DBFS -project_root = Path.home() / "projects" / "iris-databricks" -data_dir = project_root / "data" -dbutils.fs.cp( - f"file://{data_dir.as_posix()}", f"dbfs://{data_dir.as_posix()}", recurse=True -) - -# make sure the data has been copied -dbutils.fs.ls((data_dir / "01_raw").as_posix()) -``` - -You should get a similar output: -```console -Out[11]: [FileInfo(path='dbfs:/root/projects/iris-databricks/data/01_raw/.gitkeep', name='.gitkeep', size=0), - FileInfo(path='dbfs:/root/projects/iris-databricks/data/01_raw/iris.csv', name='iris.csv', size=3858)] -``` - -* Run Kedro project - -```python -from kedro.framework.session import KedroSession -from kedro.framework.startup import bootstrap_project - -bootstrap_project(project_root) - -with KedroSession.create(project_path=project_root, env="databricks") as session: - session.run() -``` - -You should get a similar output: - -```console -... -[08/09/22 11:23:30] INFO Model has accuracy of 0.933 on test data. nodes.py:74 - INFO Saving data to 'metrics' (MetricsDataSet)... data_catalog.py:382 - INFO Completed 3 out of 3 tasks sequential_runner.py:85 - INFO Pipeline execution completed successfully. runner.py:89 -``` - -Your complete notebook should look similar to this (the results are hidden): - -![](../../meta/images/databricks_notebook_example.png) - - -### 9. Using the Kedro IPython Extension - -You can interact with Kedro in Databricks through the Kedro [IPython extension](https://ipython.readthedocs.io/en/stable/config/extensions/index.html), `kedro.ipython`. - -The Kedro IPython extension launches a [Kedro session](../../kedro_project_setup/session.md) and makes available the useful Kedro variables `catalog`, `context`, `pipelines` and `session`. It also provides the `%reload_kedro` [line magic](https://ipython.readthedocs.io/en/stable/interactive/magics.html) that reloads these variables (for example, if you need to update `catalog` following changes to your Data Catalog). - -The IPython extension can be used in a Databricks notebook in a similar way to how it is used in [Jupyter notebooks](../../notebooks_and_ipython/kedro_and_notebooks.md). - -If you encounter a `ContextualVersionConflictError`, it is likely caused by Databricks using an old version of `pip`. Hence there's one additional step you need to do in the Databricks notebook to make use of the IPython extension. After you load the IPython extension using the below command: - -```ipython -In [1]: %load_ext kedro.ipython -``` - -You must explicitly upgrade your `pip` version by doing the below: - -```bash -%pip install -U pip -``` - -After this, you can reload Kedro by running the line magic command `%reload_kedro `. - -## How to use datasets stored on Databricks DBFS - -DBFS is a distributed file system mounted into a DataBricks workspace and accessible on a DataBricks cluster. It maps cloud object storage URIs to relative paths so as to simplify the process of persisting files. With DBFS, libraries can read from or write to distributed storage as if it's a local file. -To use datasets with DBFS, the file path passed to the dataset **must** be prefixed with `/dbfs/` and look something like, `/dbfs/example_project/data/02_intermediate/processed_data`. This applies to all datasets, including `SparkDataSet`. -> **Note**: Most Python code, except PySpark, will try to resolve a file path in the driver node storage by default, this will result in an `DataSetError` if the code is using a file path that is actually a DBFS save location. To avoid this, always make sure to point the file path to `/dbfs` when storing or loading data on DBFS. For more rules on what is saved in DBFS versus driver node storage by default, please refer to the [Databricks documentation](https://docs.databricks.com/files/index.html#what-is-the-root-path-for-databricks). - -## Run a packaged Kedro project on Databricks - -To run a packaged Kedro project that has been installed on a Databricks cluster, use the following code: - -```python -from kedro.framework.session import KedroSession -from kedro.framework.startup import configure_project - -package_name = "" -configure_project(package_name) - -with KedroSession.create(package_name) as session: - session.run() -``` - -Replace `` with your package's name. - -Use `configure_project()` to run a packaged Kedro project interactively. Do **not** use `bootstrap_project()`, which is meant only for projects that haven't been packaged. - -The `package_name` keyword argument of `KedroSession.create()` currently does not have any effect and can be confusing. This argument will be removed in Kedro version 0.19, which is a breaking change. For now, you can safely ignore this argument. - -```{note} -The entry-point of a packaged project is the `main()` method of `src//__main__.py`, and it returns an exit code, which stops downstream processes from using its output. This known to cause problems on Databricks. Therefore, you should **always** use `session.run()` to run a packaged project on Databricks. -``` From e0a3094218510fec12f9661960acb3b17c1f5bda Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Thu, 8 Jun 2023 11:50:49 +0100 Subject: [PATCH 29/39] Retitling docs and cherrypick from another branch Signed-off-by: Jo Stichbury --- .../databricks/databricks_ide_development_workflow.md | 11 ++++++++--- .../databricks_notebooks_development_workflow.md | 7 ++++--- docs/source/deployment/databricks/index.md | 6 +++--- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_ide_development_workflow.md b/docs/source/deployment/databricks/databricks_ide_development_workflow.md index aa8bcefe4d..260d6edaa1 100644 --- a/docs/source/deployment/databricks/databricks_ide_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_ide_development_workflow.md @@ -1,6 +1,9 @@ -# Databricks development workflow +# Development a Kedro project using your local environment -This guide demonstrates a development workflow for Kedro projects on Databricks using Databricks Repos and the PySpark Iris starter. This workflow enables you to use your local environment for development and Databricks notebooks for testing. It has several advantages for development relative to using only Databricks notebooks as it enables the use of powerful development features offered by an IDE that are not available on Databricks notebooks: + +This guide demonstrates a workflow for developing Kedro projects on Databricks using your local environment for development, then using dbx and Databricks Repos to sync code for testing on Databricks. + +By working in your local environment, you can take advantage of features within an IDE that are not available on Databricks notebooks: - Auto-completion and suggestions for code, improving your development speed and accuracy. - Linters like Pylint or Flake8 can be integrated to catch potential issues in your code. @@ -8,9 +11,11 @@ This guide demonstrates a development workflow for Kedro projects on Databricks To set up these features, look for instructions specific to your IDE (for instance, [VS Code](https://code.visualstudio.com/docs/python/linting)). +If you prefer to develop a projects in notebooks rather than an in an IDE, you should follow our guide on [how to develop a Kedro project within a Databricks workspace](./databricks_notebooks_development_workflow.md) instead. + ## What this page covers -This tutorial introduces a project development workflow on Databricks, using your local development environment, dbx, and Databricks Repos to sync code. The main steps in this workflow are: +The main steps in this tutorial are as follows: - [Create a virtual environment and install and configure dbx.](#install-kedro-and-dbx-in-a-new-virtual-environment) - [Create a new Kedro project using the PySpark Iris starter.](#create-a-new-kedro-project) diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index a993feb2d7..13e0196caf 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -1,6 +1,7 @@ -# Developing Kedro projects on Databricks using notebooks +# Develop a Kedro project within a Databricks workspace -This guide demonstrates a workflow for developing Kedro projects on Databricks using only a Databricks Repo and a Databricks notebook. The approach explained on this page enables you to develop and test your Kedro projects entirely within the Databricks workspace. + +This guide demonstrates a workflow for developing Kedro projects on Databricks using only a Databricks Repo and a Databricks notebook. You will learn how to develop and test your Kedro projects entirely within the Databricks workspace. This method of developing a Kedro project for use on Databricks is ideal for developers who prefer developing their projects in notebooks rather than an in an IDE. It also avoids the overhead of setting up and syncing a local environment with Databricks. If you want to take advantage of the powerful features of an IDE to develop your project, consider following the [guide for developing a Kedro project for Databricks using your local environment](./databricks_ide_development_workflow.md). @@ -8,7 +9,7 @@ In this guide, you will store your project's code in a repository on [GitHub](ht ## What this page covers -This tutorial introduces a project development workflow for Kedro projects using only the Databricks workspace. The main steps in this workflow are: +This tutorial introduces a Kedro project development workflow using only the Databricks workspace. The main steps in this workflow are: - [Create a new Kedro project using the `databricks-iris` starter.](#create-a-new-kedro-project) - [Create a Databricks notebook to run your project.](#create-a-new-databricks-notebook) diff --git a/docs/source/deployment/databricks/index.md b/docs/source/deployment/databricks/index.md index 0f0657a2c2..e0f52396ef 100644 --- a/docs/source/deployment/databricks/index.md +++ b/docs/source/deployment/databricks/index.md @@ -1,12 +1,12 @@ # Databricks + ```{toctree} :maxdepth: 1 -databricks_workspace.md -databricks_visualisation -databricks_ide_development_workflow.md databricks_notebooks_development_workflow.md +databricks_ide_development_workflow.md databricks_deployment_workflow +databricks_visualisation ``` From c3f6eb202ae4876359b71ca2bfb2dec2081d5d30 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Thu, 8 Jun 2023 14:16:32 +0100 Subject: [PATCH 30/39] Fix syntax and spurious whitespace Signed-off-by: Jannic Holzer --- .../databricks/databricks_ide_development_workflow.md | 2 +- .../databricks/databricks_notebooks_development_workflow.md | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_ide_development_workflow.md b/docs/source/deployment/databricks/databricks_ide_development_workflow.md index b600db70e8..02ddc6edef 100644 --- a/docs/source/deployment/databricks/databricks_ide_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_ide_development_workflow.md @@ -1,4 +1,4 @@ -# Development a Kedro project using your local environment +# Develop a Kedro project using your local environment This guide demonstrates a workflow for developing Kedro projects on Databricks using your local environment for development, then using dbx and Databricks Repos to sync code for testing on Databricks. diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index 13e0196caf..f151397e67 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -1,6 +1,5 @@ # Develop a Kedro project within a Databricks workspace - This guide demonstrates a workflow for developing Kedro projects on Databricks using only a Databricks Repo and a Databricks notebook. You will learn how to develop and test your Kedro projects entirely within the Databricks workspace. This method of developing a Kedro project for use on Databricks is ideal for developers who prefer developing their projects in notebooks rather than an in an IDE. It also avoids the overhead of setting up and syncing a local environment with Databricks. If you want to take advantage of the powerful features of an IDE to develop your project, consider following the [guide for developing a Kedro project for Databricks using your local environment](./databricks_ide_development_workflow.md). From c76f526be44cd055082dac920e99b3b7d5a347ec Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Thu, 8 Jun 2023 14:55:42 +0100 Subject: [PATCH 31/39] Remove repo scope note Signed-off-by: Jannic Holzer --- .../databricks/databricks_notebooks_development_workflow.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index f151397e67..375aca70f8 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -71,10 +71,6 @@ The main steps are: - Select a name and expiration time for your token, choose an expiration time. - Select which repositories your token will allow access to and define the token permissions. -```{note} -Make sure that `repo` scopes are enabled for your token. -``` - ### Push your Kedro project to the GitHub repository At the command line, initialise Git in your project root directory: From 2fa590157e533048764d32ad96e066da7f4f6661 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Thu, 8 Jun 2023 15:08:54 +0100 Subject: [PATCH 32/39] Add overview of Git steps to sync repos Signed-off-by: Jannic Holzer --- .../databricks_notebooks_development_workflow.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index 375aca70f8..7746b61835 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -284,6 +284,14 @@ You can see that your model's accuracy has changed now that you are using a diff If your cluster terminates, you must re-run your entire notebook, as libraries installed using `%pip install ...` are ephemeral. If not, repeating this step is only necessary if your project's dependencies change. ``` +### Managing your Databricks Repo + +Your Databricks Repo now has untracked changes that are not synced with your GitHub repository. To track your changes and sync your Repo, you can use the corresponding [Git operations in Databricks Repos](https://docs.databricks.com/repos/git-operations-with-repos.html). A basic overview of the steps to achieve this is: + +- Commit your changes in your Databricks Repo. +- Push the changes to the GitHub repository linked to your Databricks Repo. +- Check that the latest commits are visible in your GitHub repository. + ## Summary This guide demonstrated a development workflow on Databricks using only the Databricks workspace. This approach is ideal for users who prefer to develop using notebooks and avoids having to set up and sync a local environment with Databricks. From 20a2bb46b739b88e4e96de42f07564f671f5892d Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Thu, 8 Jun 2023 15:12:31 +0100 Subject: [PATCH 33/39] Fix visualisation docs Signed-off-by: Jannic Holzer --- .../databricks/databricks_visualisation.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_visualisation.md b/docs/source/deployment/databricks/databricks_visualisation.md index c96d56e84d..33cf4e5090 100644 --- a/docs/source/deployment/databricks/databricks_visualisation.md +++ b/docs/source/deployment/databricks/databricks_visualisation.md @@ -1,11 +1,21 @@ # Visualise a Kedro project in Databricks notebooks -[Kedro-Viz](../../visualisation/kedro-viz_visualisation.md) is a tool that enables you to visualise your Kedro pipeline and metrics generated from your data science experiments. It is a standalone web application that runs on a web browser, it can be run on a local machine or in Databricks notebooks. +[Kedro-Viz](../../visualisation/kedro-viz_visualisation.md) is a tool that enables you to visualise your Kedro pipeline and metrics generated from your data science experiments. It is a standalone web application that runs on a web browser, it can be run on a local machine or in a Databricks notebook. For Kedro-Viz to run with your Kedro project, you need to ensure that both the packages are installed in the same scope (notebook-scoped vs. cluster library). This means that if you `%pip install kedro` from inside your notebook then you should also `%pip install kedro-viz` from inside your notebook. If your cluster comes with Kedro installed on it as a library already then you should also add Kedro-Viz as a [cluster library](https://docs.microsoft.com/en-us/azure/databricks/libraries/cluster-libraries). -To run Kedro-Viz on Databricks you must first [launch the Kedro IPython extension](./databricks_workspace.md#9-using-the-kedro-ipython-extension). +To run Kedro-Viz in a Databricks notebook you must first launch the Kedro IPython extension: + +```ipython +%load_ext kedro.ipython +``` + +And load your Kedro project from where it is stored in either the Databricks workspace or in a Repo: + +```ipython +%reload_kedro /iris-databricks +``` Kedro-Viz can then be launched in a new browser tab with the `%run_viz` line magic: From cd61bf485d556e77b4c6f13df50f20a16b396bf6 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Fri, 9 Jun 2023 16:29:57 +0100 Subject: [PATCH 34/39] Fix deployment guide title Signed-off-by: Jannic Holzer --- .../deployment/databricks/databricks_deployment_workflow.md | 2 +- .../databricks/databricks_ide_development_workflow.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_deployment_workflow.md b/docs/source/deployment/databricks/databricks_deployment_workflow.md index a3e59a3760..60bfde290f 100644 --- a/docs/source/deployment/databricks/databricks_deployment_workflow.md +++ b/docs/source/deployment/databricks/databricks_deployment_workflow.md @@ -1,4 +1,4 @@ -# Developing Kedro projects for Databricks using an IDE +# Deploy Kedro projects on Databricks as a job Databricks jobs are a way to execute code on Databricks clusters, allowing you to run data processing tasks, ETL jobs, or machine learning workflows. In this guide we explore the process of packaging a Kedro project and running it as a job on Databricks. diff --git a/docs/source/deployment/databricks/databricks_ide_development_workflow.md b/docs/source/deployment/databricks/databricks_ide_development_workflow.md index 02ddc6edef..50f9b82f46 100644 --- a/docs/source/deployment/databricks/databricks_ide_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_ide_development_workflow.md @@ -1,4 +1,4 @@ -# Develop a Kedro project using your local environment +# Develop a Kedro project for Databricks using an IDE This guide demonstrates a workflow for developing Kedro projects on Databricks using your local environment for development, then using dbx and Databricks Repos to sync code for testing on Databricks. From 728a41e3843290848d28c8c2ccb0f37e141c1d70 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Mon, 12 Jun 2023 12:40:14 +0100 Subject: [PATCH 35/39] Minor changes to add anchor links and a few style tweaks Signed-off-by: Jo Stichbury --- .../databricks_deployment_workflow.md | 63 +++++++++++++------ 1 file changed, 44 insertions(+), 19 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_deployment_workflow.md b/docs/source/deployment/databricks/databricks_deployment_workflow.md index 60bfde290f..f037554a49 100644 --- a/docs/source/deployment/databricks/databricks_deployment_workflow.md +++ b/docs/source/deployment/databricks/databricks_deployment_workflow.md @@ -1,19 +1,21 @@ # Deploy Kedro projects on Databricks as a job -Databricks jobs are a way to execute code on Databricks clusters, allowing you to run data processing tasks, ETL jobs, or machine learning workflows. In this guide we explore the process of packaging a Kedro project and running it as a job on Databricks. +Databricks jobs are a way to execute code on Databricks clusters, allowing you to run data processing tasks, ETL jobs, or machine learning workflows. In this guide, we explain how to package and run a Kedro project as a job on Databricks. ## What are the advantages of packaging a Kedro project to run on Databricks? -By packaging your Kedro project and running it on Databricks, you can execute your pipeline without the need for a notebook. This approach is particularly well-suited for production, as it provides a structured and reproducible way to run your code. However, it is not ideal for development, where rapid iteration is necessary. For guidance on developing a Kedro project for Databricks in a rapid build-test loop, see the [development workflow guide](./databricks_ide_development_workflow.md). - -Running your packaged project as a Databricks job is very different to running it from a notebook. Running a Kedro project on a job cluster is significantly slower than running it as a notebook on a cluster that has already been started, as the job cluster has to be provisioned and started for each run. In addition, there is no way to change your project's code once it has been packaged. Instead, you must create a new package after changing your code and upload it to Databricks again. +Packaging your Kedro project and running it on Databricks enables you to execute your pipeline without a notebook. This approach is particularly well-suited for production, as it provides a structured and reproducible way to run your code. Here are some typical use cases for running a packaged Kedro project as a Databricks job: - **Data engineering pipeline**: the output of your Kedro project is a file or set of files containing cleaned and processed data. -- **Machine learning with MLflow**: your Kedro project runs an ML model and metrics about your experiments are tracked in MLflow. -- **Automated and scheduled runs**: your Kedro project should be run on Databricks on an [automated schedule](https://docs.databricks.com/workflows/jobs/schedule-jobs.html#add-a-job-schedule). -- **CI/CD integration**: you have a CI/CD pipeline set up that produces a packaged Kedro project. +- **Machine learning with MLflow**: your Kedro project runs an ML model; metrics about your experiments are tracked in MLflow. +- **Automated and scheduled runs**: your Kedro project should be [run on Databricks automatically](https://docs.databricks.com/workflows/jobs/schedule-jobs.html#add-a-job-schedule). +- **CI/CD integration**: you have a CI/CD pipeline that produces a packaged Kedro project. + +Running your packaged project as a Databricks job is very different from running it from a Databricks notebook. The Databricks job cluster has to be provisioned and started for each run, which is significantly slower than running it as a notebook on a cluster that has already been started. In addition, there is no way to change your project's code once it has been packaged. Instead, you must change your code, create a new package, and then upload it to Databricks again. + +For those reasons, the packaging approach is unsuitable for development projects where rapid iteration is necessary. For guidance on developing a Kedro project for Databricks in a rapid build-test loop, see the [development workflow guide](./databricks_ide_development_workflow.md). ## What this page covers @@ -24,10 +26,20 @@ Here are some typical use cases for running a packaged Kedro project as a Databr ## Prerequisites - An active [Databricks deployment](https://docs.databricks.com/getting-started/index.html). -- [Conda installed](https://docs.conda.io/projects/conda/en/latest/user-guide/install/index.html) on your local machine in order to create a virtual environment with a specific version of Python (>= 3.7 is required). If you have Python >= 3.7 installed, you can use other software to create a virtual environment. +- [`conda` installed](https://docs.conda.io/projects/conda/en/latest/user-guide/install/index.html) on your local machine in order to create a virtual environment with a specific version of Python (>= 3.7 is required). If you have Python >= 3.7 installed, you can use other software to create a virtual environment. ## Set up your project for deployment to Databricks +The sequence of steps described in this section is as follows: + +1. [Note your Databricks username and host](#note-your-databricks-username-and-host) +2. [Install Kedro and the databricks CLI in a new virtual environment](#install-kedro-and-the-databricks-cli-in-a-new-virtual-environment) +3. [Authenticate the Databricks CLI](#authenticate-the-databricks-cli) +4. [Create a new Kedro project](#create-a-new-kedro-project) +5. [Create an entry point for Databricks](#create-an-entry-point-for-databricks) +6. [Package your project](#package-your-project) +7. [Upload project data and configuration to DBFS](#upload-project-data-and-configuration-to-dbfs) + ### Note your Databricks username and host Note your Databricks **username** and **host** as you will need it for the remainder of this guide. @@ -42,9 +54,9 @@ Your databricks host must include the protocol (`https://`). ### Install Kedro and the databricks CLI in a new virtual environment -The following commands will create a new Conda environment, activate it, and then install Kedro and the Databricks CLI. +The following commands will create a new `conda` environment, activate it, and then install Kedro and the Databricks CLI. -In your local development environment, create a virtual environment for this tutorial using Conda: +In your local development environment, create a virtual environment for this tutorial using `conda`: ```bash conda create --name iris-databricks python=3.10 @@ -56,7 +68,7 @@ Once it is created, activate it: conda activate iris-databricks ``` -With your Conda environment activated, install Kedro and the Databricks CLI: +With your `conda` environment activated, install Kedro and the Databricks CLI: ```bash pip install kedro databricks-cli @@ -192,11 +204,20 @@ You should see the contents of the project's `data/` directory printed to your t To run your packaged project on Databricks, login to your Databricks account and perform the following steps in the workspace: -1. **Create a new job**: In the Databricks workspace, navigate to the `Workflows` tab and click `Create Job` **or** click the `New` button, then `Job`: +1. [Create a new job](#create-a-new-job) +2. [Create a new job cluster specific to your job](#create-a-new-job-cluster-specific-to-your-job) +3. [Configure the job](#configure-the-job) +4. [Run the job](#run-the-job) + +### Create a new job + +In the Databricks workspace, navigate to the `Workflows` tab and click `Create Job` **or** click the `New` button, then `Job`: ![Create Databricks job](../../meta/images/databricks_create_new_job.png) -2. **Create a new job cluster specific to your job**: Create a dedicated [job cluster](https://docs.databricks.com/clusters/index.html) to run your job by clicking on the drop-down menu in the `Cluster` field and then clicking `Add new job cluster`: +### Create a new job cluster specific to your job + +Create a dedicated [job cluster](https://docs.databricks.com/clusters/index.html) to run your job by clicking on the drop-down menu in the `Cluster` field and then clicking `Add new job cluster`: **Do not use the default `Job_cluster`, it has not been configured to run this job.** @@ -215,7 +236,9 @@ The final configuration for the job cluster should look the same as the followin ![Configure Databricks job cluster](../../meta/images/databricks_configure_job_cluster.png) -3. **Configure the job**: Configure the job with the following settings: +### Configure the job + +Configure the job with the following settings: - Enter `iris-databricks` in the `Name` field. - In the dropdown menu for the `Type` field, select `Python wheel`. @@ -235,7 +258,9 @@ The final configuration for your job should look the same as the following: Click `Create` and then `Confirm and create` in the following pop-up asking you to name the job. -4. **Run the job**: Click `Run now` in the top-right corner of your new job's page to start a run of the job. The status of your run can be viewed in the `Runs` tab of your job's page. Navigate to the `Runs` tab and track the progress of your run: +### Run the job + +Click `Run now` in the top-right corner of your new job's page to start a run of the job. The status of your run can be viewed in the `Runs` tab of your job's page. Navigate to the `Runs` tab and track the progress of your run: ![Databricks job status](../../meta/images/databricks_job_status.png) @@ -261,7 +286,7 @@ When the status of your run is `Succeeded`, your job has successfully finished e By following these steps, you packaged your Kedro project and manually ran it as a job on Databricks using the workspace UI. -## Resources for automating deployment to Databricks +## Resources for automatically deploying to Databricks Up to this point, this page has described a manual workflow for deploying and running a project on Databricks. The process can be automated in two ways: @@ -272,16 +297,16 @@ Both of these methods enable you to store information about your job declarative These methods can be integrated into a CI/CD pipeline to automatically deploy a packaged Kedro project to Databricks as a job. -### How to use the Databricks API to automate deployment of a Kedro project +### How to use the Databricks API to automatically deploy a Kedro project The Databricks API enables you to programmatically interact with Databricks services, including job creation and execution. You can use the Jobs API to automate the deployment of your Kedro project to Databricks. The following steps outline how to use the Databricks API to do this: -1. [Set up your Kedro project for deployment on Databricks.](#set-up-your-project-for-deployment-to-databricks) +1. [Set up your Kedro project for deployment on Databricks](#set-up-your-project-for-deployment-to-databricks) 2. Create a JSON file containing your job's configuration. 3. Use the Jobs API's [`/create` endpoint](https://docs.databricks.com/workflows/jobs/jobs-api-updates.html#create) to create a new job. 4. Use the Jobs API's [`/runs/submit` endpoint](https://docs.databricks.com/workflows/jobs/jobs-api-updates.html#runs-submit) to run your newly created job. -### How to use the Databricks CLI to automate deployment of a Kedro project +### How to use the Databricks CLI to automatically deploy a Kedro project The Databricks Command Line Interface (CLI) is another way to automate deployment of your Kedro project. The following steps outline how to use the Databricks CLI to automate the deployment of a Kedro project: From f93b459928964d86655ffcb424376bcc178ca116 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Mon, 12 Jun 2023 12:52:27 +0100 Subject: [PATCH 36/39] Fix linter error Signed-off-by: Jo Stichbury --- .../deployment/databricks/databricks_deployment_workflow.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_deployment_workflow.md b/docs/source/deployment/databricks/databricks_deployment_workflow.md index f037554a49..381b0d0f50 100644 --- a/docs/source/deployment/databricks/databricks_deployment_workflow.md +++ b/docs/source/deployment/databricks/databricks_deployment_workflow.md @@ -4,7 +4,7 @@ Databricks jobs are a way to execute code on Databricks clusters, allowing you t ## What are the advantages of packaging a Kedro project to run on Databricks? -Packaging your Kedro project and running it on Databricks enables you to execute your pipeline without a notebook. This approach is particularly well-suited for production, as it provides a structured and reproducible way to run your code. +Packaging your Kedro project and running it on Databricks enables you to execute your pipeline without a notebook. This approach is particularly well-suited for production, as it provides a structured and reproducible way to run your code. Here are some typical use cases for running a packaged Kedro project as a Databricks job: @@ -13,7 +13,7 @@ Here are some typical use cases for running a packaged Kedro project as a Databr - **Automated and scheduled runs**: your Kedro project should be [run on Databricks automatically](https://docs.databricks.com/workflows/jobs/schedule-jobs.html#add-a-job-schedule). - **CI/CD integration**: you have a CI/CD pipeline that produces a packaged Kedro project. -Running your packaged project as a Databricks job is very different from running it from a Databricks notebook. The Databricks job cluster has to be provisioned and started for each run, which is significantly slower than running it as a notebook on a cluster that has already been started. In addition, there is no way to change your project's code once it has been packaged. Instead, you must change your code, create a new package, and then upload it to Databricks again. +Running your packaged project as a Databricks job is very different from running it from a Databricks notebook. The Databricks job cluster has to be provisioned and started for each run, which is significantly slower than running it as a notebook on a cluster that has already been started. In addition, there is no way to change your project's code once it has been packaged. Instead, you must change your code, create a new package, and then upload it to Databricks again. For those reasons, the packaging approach is unsuitable for development projects where rapid iteration is necessary. For guidance on developing a Kedro project for Databricks in a rapid build-test loop, see the [development workflow guide](./databricks_ide_development_workflow.md). From 366664d6a00f4cb0aebbc4c896f4974ab89b6fc7 Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Mon, 12 Jun 2023 13:58:14 +0100 Subject: [PATCH 37/39] Fix build error Signed-off-by: Jo Stichbury --- .../databricks/databricks_deployment_workflow.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_deployment_workflow.md b/docs/source/deployment/databricks/databricks_deployment_workflow.md index 381b0d0f50..9cb2e3a3ee 100644 --- a/docs/source/deployment/databricks/databricks_deployment_workflow.md +++ b/docs/source/deployment/databricks/databricks_deployment_workflow.md @@ -19,9 +19,9 @@ For those reasons, the packaging approach is unsuitable for development projects ## What this page covers -- [Set up your Kedro project for deployment on Databricks.](#set-up-your-project-for-deployment-to-databricks) -- [Run your project as a job using the Databricks workspace UI.](#deploy-and-run-your-kedro-project-using-the-workspace-ui) -- [Resources for automating your Kedro deployments to Databricks.](#resources-for-automating-deployment-to-databricks) +- [Set up your Kedro project for deployment on Databricks](#set-up-your-project-for-deployment-to-databricks). +- [Run your project as a job using the Databricks workspace UI](#deploy-and-run-your-kedro-project-using-the-workspace-ui). +- [Resources for automating your Kedro deployments to Databricks](#resources-for-automatically-deploying-to-databricks). ## Prerequisites @@ -290,8 +290,8 @@ By following these steps, you packaged your Kedro project and manually ran it as Up to this point, this page has described a manual workflow for deploying and running a project on Databricks. The process can be automated in two ways: -- [Use the Databricks API](#how-to-use-the-databricks-api-to-automate-deployment-of-a-kedro-project). -- [Use the Databricks CLI](#how-to-use-the-databricks-cli-to-automate-deployment-of-a-kedro-project). +- [Use the Databricks API](#how-to-use-the-databricks-api-to-automatically-deploy-a-kedro-project). +- [Use the Databricks CLI](#how-to-use-the-databricks-cli-to-automatically-deploy-a-kedro-project). Both of these methods enable you to store information about your job declaratively in the same version control system as the rest of your project. For each method, the information stored declaratively is the same as what is entered manually in the [above section on creating and running a job in Databricks](#deploy-and-run-your-kedro-project-using-the-workspace-ui). From 2e146efd31a5b90bcea54091da48d0d86dfaab7f Mon Sep 17 00:00:00 2001 From: Jo Stichbury Date: Mon, 12 Jun 2023 14:30:18 +0100 Subject: [PATCH 38/39] Proposed heading changes Signed-off-by: Jo Stichbury --- .../deployment/databricks/databricks_deployment_workflow.md | 2 +- .../databricks/databricks_ide_development_workflow.md | 2 +- .../databricks/databricks_notebooks_development_workflow.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/deployment/databricks/databricks_deployment_workflow.md b/docs/source/deployment/databricks/databricks_deployment_workflow.md index 9cb2e3a3ee..799a5044c1 100644 --- a/docs/source/deployment/databricks/databricks_deployment_workflow.md +++ b/docs/source/deployment/databricks/databricks_deployment_workflow.md @@ -1,4 +1,4 @@ -# Deploy Kedro projects on Databricks as a job +# Use a Databricks job to deploy a Kedro project Databricks jobs are a way to execute code on Databricks clusters, allowing you to run data processing tasks, ETL jobs, or machine learning workflows. In this guide, we explain how to package and run a Kedro project as a job on Databricks. diff --git a/docs/source/deployment/databricks/databricks_ide_development_workflow.md b/docs/source/deployment/databricks/databricks_ide_development_workflow.md index 50f9b82f46..dc723189c9 100644 --- a/docs/source/deployment/databricks/databricks_ide_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_ide_development_workflow.md @@ -1,4 +1,4 @@ -# Develop a Kedro project for Databricks using an IDE +# Use an IDE, dbx and Databricks Repos to develop a Kedro project This guide demonstrates a workflow for developing Kedro projects on Databricks using your local environment for development, then using dbx and Databricks Repos to sync code for testing on Databricks. diff --git a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md index 7746b61835..5867163ab9 100644 --- a/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md +++ b/docs/source/deployment/databricks/databricks_notebooks_development_workflow.md @@ -1,4 +1,4 @@ -# Develop a Kedro project within a Databricks workspace +# Use a Databricks workspace to develop a Kedro project This guide demonstrates a workflow for developing Kedro projects on Databricks using only a Databricks Repo and a Databricks notebook. You will learn how to develop and test your Kedro projects entirely within the Databricks workspace. From 6e9e834cd282d47b4e175b123d856cc071a7bc03 Mon Sep 17 00:00:00 2001 From: Jannic Holzer Date: Tue, 13 Jun 2023 15:42:16 +0100 Subject: [PATCH 39/39] Add release note Signed-off-by: Jannic Holzer --- RELEASE.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/RELEASE.md b/RELEASE.md index 77453869dc..56d341da4e 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -14,6 +14,9 @@ ## Bug fixes and other changes +## Documentation changes +* Added documentation for developing a Kedro project using a Databricks workspace. + ## Breaking changes to the API ## Upcoming deprecations for Kedro 0.19.0