From 1a994c0e60742311ee00771b8daba73686b569a3 Mon Sep 17 00:00:00 2001 From: Sofia Sazonova Date: Fri, 30 Aug 2024 08:25:46 +0100 Subject: [PATCH 1/7] GH pages: new config.json property described (log query period) (#1504) ### Feature or Bugfix - Feature ### Detail - Config changes are described ### Relates - #1502 ### Security Please answer the questions below briefly where applicable, or write `N/A`. Based on [OWASP 10](https://owasp.org/Top10/en/). - Does this PR introduce or modify any input fields or queries - this includes fetching data from storage outside the application (e.g. a database, an S3 bucket)? - Is the input sanitized? - What precautions are you taking before deserializing the data you consume? - Is injection prevented by parametrizing queries? - Have you ensured no `eval` or similar functions are used? - Does this PR introduce any functionality or component that requires authorization? - How have you ensured it respects the existing AuthN/AuthZ mechanisms? - Are you logging failed auth attempts? - Are you using or adding any cryptographic features? - Do you use a standard proven implementations? - Are the used keys controlled by the customer? Where are they stored? - Are you introducing any new policies/roles/users? - Have you used the least-privilege principle? How? By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license. Co-authored-by: Sofia Sazonova --- pages/deploy/deploy_aws.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/pages/deploy/deploy_aws.md b/pages/deploy/deploy_aws.md index a36d4e1ff..40e2ebeef 100644 --- a/pages/deploy/deploy_aws.md +++ b/pages/deploy/deploy_aws.md @@ -504,7 +504,8 @@ the different configuration options. "env_aws_actions": true, "cdk_pivot_role_multiple_environments_same_account": false, "enable_quicksight_monitoring": false - } + }, + "log_query_period_days": 1 } } ``` @@ -599,17 +600,19 @@ a particular feature in the core is to add it to the core section of the `config "env_aws_actions": true, "cdk_pivot_role_multiple_environments_same_account": false, "enable_quicksight_monitoring": false - } + }, + "log_query_period_days": 1 } ``` This is the list of core features that can currently be customized. Take it as an example if you need to disable or modify the bahavior any other core feature. -| **Feature** | **Module** | **Description** | -|-----------------------|----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| env_aws_actions | environments | If set to True, users can get AWS Credentials and assume Environment Group IAM roles from data.all's UI | -| cdk_pivot_role_multiple_environments_same_account | environments | If set to True, the CDK-created pivot role as part of the environment stack will be region specific (`dataallPivotRole-cdk-`). This feature allows users to create multiple data.all environments in the same account but multiple regions. | -| enable_quicksight_monitoring | environments | If set to **true**, RDS security groups and VPC NACL rules are modified to allow connection of the RDS metadata database with Quicksight in the infrastructure account (default: false) | +| **Feature** | **Module** | **Description** | +|-----------------------|--------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| env_aws_actions | environments | If set to True, users can get AWS Credentials and assume Environment Group IAM roles from data.all's UI | +| cdk_pivot_role_multiple_environments_same_account | environments | If set to True, the CDK-created pivot role as part of the environment stack will be region specific (`dataallPivotRole-cdk-`). This feature allows users to create multiple data.all environments in the same account but multiple regions. | +| enable_quicksight_monitoring | environments | If set to **true**, RDS security groups and VPC NACL rules are modified to allow connection of the RDS metadata database with Quicksight in the infrastructure account (default: false) | +| log_query_period_days | global | Specify the time frame for querying the log history. This log history is used for Stacks view and shared log views. | ## 8. Run CDK synth and check cdk.context.json From 3bdfa9f93f1d91d3fab0caf0e9107d46a92b92fb Mon Sep 17 00:00:00 2001 From: Noah Paige <69586985+noah-paige@users.noreply.github.com> Date: Tue, 17 Sep 2024 09:04:07 -0700 Subject: [PATCH 2/7] Add docs on log retention and allowed origins, fix cdkproxy docs (#1554) ### Feature or Bugfix - Documentation ### Detail - Add docs on configurable CloudWatch log retention - Add docs on allowed origin configuration - Update docs on cdkproxy code walkthrough ### Relates - #1527 - #1486 ### Security Please answer the questions below briefly where applicable, or write `N/A`. Based on [OWASP 10](https://owasp.org/Top10/en/). - Does this PR introduce or modify any input fields or queries - this includes fetching data from storage outside the application (e.g. a database, an S3 bucket)? - Is the input sanitized? - What precautions are you taking before deserializing the data you consume? - Is injection prevented by parametrizing queries? - Have you ensured no `eval` or similar functions are used? - Does this PR introduce any functionality or component that requires authorization? - How have you ensured it respects the existing AuthN/AuthZ mechanisms? - Are you logging failed auth attempts? - Are you using or adding any cryptographic features? - Do you use a standard proven implementations? - Are the used keys controlled by the customer? Where are they stored? - Are you introducing any new policies/roles/users? - Have you used the least-privilege principle? How? By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license. --- pages/code.md | 17 ++++------------- pages/deploy/deploy_aws.md | 7 +++++++ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/pages/code.md b/pages/code.md index 05d9ad183..0d89e053d 100644 --- a/pages/code.md +++ b/pages/code.md @@ -171,21 +171,12 @@ The data.all `base.api` package contains the `gql` sub-package to support GraphQ #### cdkproxy This package contains the code associated with the deployment of CDK stacks that correspond to data.all resources. -`cdkproxy` is a package that exposes a REST API to run registered cloudformation stacks using AWS CDK. It is deployed as a docker container running on AWS ECS. +`cdkproxy` is a package that runs registered cloudformation stacks using AWS CDK. It is bundled as a docker image and run as a AWS ECS task which is triggered on infastrcutre as code (IaC) operations on data.all (e.g. CRUD of data.all resources). -When a data.all resource is created, the API sends an HTTP request -to the docker service and the code runs the appropriate stack using `cdk` cli. +When an API request is made to create a data.all resource, such as a new dataset, the data.all backend sends a new message to an SQS Queue to asynchronously be read off the queue and start a new cdkproxy ECS task. +The code uses a `cdk` cli wrapper to register infrastructure and manage cdk commands, and runs the appropriate stack using `cdk` cli to deploy the IaC of the respective data.all resource. -These stacks are deployed with the `cdk` cli wrapper -The API itself consists of 4 actions/paths: - -- GET / : checks if the server is running -- POST /stack/{stackid} : creates or updates the stack -- DELETE /stack/{stackid} : deletes the stack -- GET /stack/{stackid] : returns stack status - -The webserver is running on docker, using Python's [FASTAPI](https://fastapi.tiangolo.com/) -web framework and running using [uvicorn](https://www.uvicorn.org/) ASGI server. +For local data.all deployments, a webserver runs on docker using Python's [FASTAPI](https://fastapi.tiangolo.com/) web framework and [uvicorn](https://www.uvicorn.org/) ASGI server. Subsequnetly, data.all sends POST API Requests to the `cdkproxy` web server to start the data.all infrastructure task. ### core/ Core contains those functionalities that are indispensable to run data.all. Customization of the core should be limited diff --git a/pages/deploy/deploy_aws.md b/pages/deploy/deploy_aws.md index 40e2ebeef..16b4fe827 100644 --- a/pages/deploy/deploy_aws.md +++ b/pages/deploy/deploy_aws.md @@ -170,6 +170,7 @@ of our repository. Open it, you should be seen something like: "repository_source": "string_VERSION_CONTROL_SERVICE|(codecommit, codestar_connection) DEFAULT=codecommit", "repo_string": "string_REPOSITORY_IN_GITHUB_OWNER/REPOSITORY|DEFAULT=awslabs/aws-dataall, REQUIRED if repository_source=codestar_connection", "repo_connection_arn": "string_CODESTAR_SOURCE_CONNECTION_ARN_FOR_GITHUB_arn:aws:codestar-connections:region:account-id:connection/connection-id|DEFAULT=None, REQUIRED if repository_source=codestar_connection", + "log_retention_duration": "string_LOG_RETENTION_DURATION|DEFAULT=TWO_YEARS", "DeploymentEnvironments": [ { "envname": "string_ENVIRONMENT_NAME|REQUIRED", @@ -193,6 +194,7 @@ of our repository. Open it, you should be seen something like: "enable_cw_canaries": "boolean_SET_CLOUDWATCH_CANARIES_FOR_FRONTEND_TESTING|DEFAULT=false", "shared_dashboards_sessions": "string_TYPE_SESSION_SHARED_DASHBOARDS|(reader, anonymous) DEFAULT=anonymous", "enable_pivot_role_auto_create": "boolean_ENABLE_PIVOT_ROLE_AUTO_CREATE_IN_ENVIRONMENT|DEFAULT=false", + "allowed_origins": "string_TYPE_DOMAIN_ORIGIN|DEFAULT=*", "enable_update_dataall_stacks_in_cicd_pipeline": "boolean_ENABLE_UPDATE_DATAALL_STACKS_IN_CICD_PIPELINE|DEFAULT=false", "enable_opensearch_serverless": "boolean_USE_OPENSEARCH_SERVERLESS|DEFAULT=false", "cognito_user_session_timeout_inmins": "integer_COGNITO_USER_SESSION_TIMEOUT_INMINS|DEFAULT=43200", @@ -235,6 +237,8 @@ and find 2 examples of cdk.json files. | source | Optional | The version control source for the repository. It can take 2 values 'codecommit' or 'codestar_connection'. (default: 'codecommit') | | repo_string | Optional | The repository path as string. Required if source='codestar_connection' (default: 'awslabs/aws-dataall') | | repo_connection_arn | Optional | The arn of the CodeStar connection connecting with the source repository. Required if source='codestar_connection'(default: None) | +| log_retention_duration | Optional | The CloudWatch log retention days for all data.all compute log groups (e.g. Lambda and ECS Tasks), VPC flow logs, and API Activity logs - this parameter is specified as a string value of one of the AWS CDK enum RetentionDays members (default: `TWO_YEARS`) | + | **Deployment environments Parameters** | **Optional/Required** | **Definition** | | ---------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | envname | REQUIRED | The name of the deployment environment (e.g dev, qa, prod,...). It must be in lower case without any special character. | @@ -258,6 +262,7 @@ and find 2 examples of cdk.json files. | cognito_user_session_timeout_inmins | Optional | The number of minutes to set the refresh token validity time for user session's in Cognito before a user must re-login to the data.all UI (default: 43200 - i.e. 30 days) | | reauth_config | Optional | A dictionary containing a list of API operations that require a user to re-authenticate before proceedind (`reauth_apis`) and a time to live (`ttl`) for how long a user's re-auth session is valid to perform re-auth APIs before having to re-authenticate again | | custom_auth | Optional | A dictionary containing set of parameters to setup external IDP ( Authentication and Authorization) in data.all. Custom Auth Configuration : `provider`, `url`, `redirect_url`, `client_id`, `response_types`, `scopes`, `jwks_url`, `claims_mapping` (Nested dictionary containing configuration : `user_id`, `email`). All the configurations are required if setting data.all with an external OIDC supported IDP | +| allowed_origins | Optional | A string origin to be specified as the `Access-Control-Allow-Origin` response header when returning responses from bakend (default: `'*'`) | **Example 1**: Basic deployment: this is an example of a minimum configured cdk.json file. @@ -300,6 +305,7 @@ deploy to 2 deployments accounts. "git_release": true, "quality_gate": false, "resource_prefix": "da", + "log_retention_duration": "SIX_YEARS", "DeploymentEnvironments": [ { "envname": "dev", @@ -332,6 +338,7 @@ deploy to 2 deployments accounts. "enable_update_dataall_stacks_in_cicd_pipeline": true, "enable_opensearch_serverless": true, "cognito_user_session_timeout_inmins": 240, + "allowed_origins": "https://example.com", "reauth_config": { "reauth_apis": ["CreateDataset", "ImportDataset", "deleteDataset"], "ttl": 10 From c58a785e5ece6116a5da7e17d601307af0b73a38 Mon Sep 17 00:00:00 2001 From: Noah Paige <69586985+noah-paige@users.noreply.github.com> Date: Tue, 8 Oct 2024 08:55:08 -0400 Subject: [PATCH 3/7] Pipeline Module Documentation Updates (#1617) ### Feature or Bugfix - Refactoring ### Detail - Update notices on GH Pages - For support of AWS CodeCommit deploying data.all solution - For support of pipelines data.all resource modules ### Relates - ### Security Please answer the questions below briefly where applicable, or write `N/A`. Based on [OWASP 10](https://owasp.org/Top10/en/). - Does this PR introduce or modify any input fields or queries - this includes fetching data from storage outside the application (e.g. a database, an S3 bucket)? - Is the input sanitized? - What precautions are you taking before deserializing the data you consume? - Is injection prevented by parametrizing queries? - Have you ensured no `eval` or similar functions are used? - Does this PR introduce any functionality or component that requires authorization? - How have you ensured it respects the existing AuthN/AuthZ mechanisms? - Are you logging failed auth attempts? - Are you using or adding any cryptographic features? - Do you use a standard proven implementations? - Are the used keys controlled by the customer? Where are they stored? - Are you introducing any new policies/roles/users? - Have you used the least-privilege principle? How? By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license. --- pages/architecture.md | 9 +++--- pages/code.md | 2 +- pages/deploy/deploy_aws.md | 58 ++++++++++++++++++++++---------------- 3 files changed, 39 insertions(+), 30 deletions(-) diff --git a/pages/architecture.md b/pages/architecture.md index 5f025253e..a6f214c33 100644 --- a/pages/architecture.md +++ b/pages/architecture.md @@ -362,7 +362,7 @@ performance from actual user sessions in near real time. Environments are workspaces where one or multiple teams can work. They are the door between our users in data.all and AWS, that is why we say that we "link" environments because we link each environment to **ONE** AWS account, in **ONE** specific region. -Under each environment we create other data.all resources, such as datasets, pipelines and notebooks. +Under each environment we create other data.all resources, such as datasets and notebooks. For the deployment of CloudFormation stacks we call upon a CDK trust policy between the Deployment account and the Environment account. As for the SDK calls, from the deployment account we assume a certain IAM role in the environment accounts, the pivotRole. @@ -396,7 +396,7 @@ manually update the pivot role template. IAM policies cannot be scoped down to n ### CDK bootstrap We need to bootstrap the environment account to provision resources the AWS CDK needs to perform the deployment of -environments, datasets, pipelines and other data.all resources. +environments, datasets, and other data.all resources. Run the following command with AWS credentials of the environment account: ```bash @@ -578,8 +578,9 @@ and underlying access to the data in AWS. ### Pipelines -A Pipeline has a pipeline-Team with UI permissions on the Pipeline -and underlying access to the data in AWS. +> [!WARNING] +> As of v2.7.0 - data.all Pipelines is no longer a supported resource due to the restriction of the CodeCommit service to only existing AWS Customers. To learn more about CodeCommit's availability, please refer to the documentation [here](https://aws.amazon.com/blogs/devops/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider/). + ### Dashboards diff --git a/pages/code.md b/pages/code.md index 0d89e053d..abb6a7e3d 100644 --- a/pages/code.md +++ b/pages/code.md @@ -846,7 +846,7 @@ when `Datasets` or `Dashboards` modules are disabled. "active": true }, "datapipelines": { - "active": true + "active": false }, "datasets": { "active": false diff --git a/pages/deploy/deploy_aws.md b/pages/deploy/deploy_aws.md index 16b4fe827..d75f57ab6 100644 --- a/pages/deploy/deploy_aws.md +++ b/pages/deploy/deploy_aws.md @@ -8,7 +8,7 @@ permalink: /deploy-aws/ - [Pre-requisites](#pre-reqs) - [1. Clone data.all code](#clone) - [2. Setup Python virtualenv](#env) -- [3. Mirror the code to a CodeCommit or CodeStar Connections repository](#code) +- [3. Mirror the code to a CodeCommit or CodeConnections repository ](#code) - [4. Bootstrap tooling account](#boot) - [5. Bootstrap deployment account(s)](#boot2) - [6. Configure the deployment options in the cdk.json file](#cdkjson) @@ -78,27 +78,13 @@ source venv/bin/activate pip install -r ./deploy/requirements.txt pip install git-remote-codecommit ``` -## 3. Mirror the code to a CodeCommit or CodeStar Connections repository -### Using CodeCommit: -Assuming AWS tooling account Administrator credentials, create an AWS CodeCommit repository, mirror the data.all code -and push your changes: -Run the following to check your credentials: -```bash -aws sts get-caller-identity -``` -```bash -aws codecommit create-repository --repository-name dataall -git remote rm origin -git remote add origin codecommit::://dataall -git init -git add . -git commit -m "First commit" -git push --set-upstream origin main -``` -### Using CodeStar Connection to GitHub, GitHub Enterprise, GitLab or Bitbucket: -If you choose to use a GitHub, GitLab or Bitbucket repository, it's important to note that you need to set up an AWS CodeStar connection to your repository for seamless integration. +## 3. Mirror the code to a CodeCommit or CodeConnections repository + +### Using CodeConnections to GitHub, GitHub Enterprise, GitLab or Bitbucket: +If you choose to use a GitHub, GitLab or Bitbucket repository, it's important to note that you need to set up an AWS CodeConnections connection to your repository for seamless integration. + This connection allows AWS CodePipeline to interact securely with GitHub, GitHub Enterprise, GitLab or Bitbucket. -Before mirroring the data.all code and pushing any changes, make sure to set up the CodeStar connection by following +Before mirroring the data.all code and pushing any changes, make sure to set up the CodeConnections by following the steps detailed in the [documentation](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-create.html): 1. Log in to the AWS Management Console. 2. Navigate to the AWS Developer tools > Settings > Connections. @@ -116,6 +102,29 @@ git add . git commit -m "First commit" git push --set-upstream origin main ``` + +### Using CodeCommit: + +> [!WARNING] +> CodeCommit is no longer an active service for new AWS Customers. It is recommended to use the above method of CodeConnections when deploying a new instance of data.all. To learn more about CodeCommit's availability, please refer to the documentation [here](https://aws.amazon.com/blogs/devops/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider/). + +Assuming AWS tooling account Administrator credentials, create an AWS CodeCommit repository, mirror the data.all code +and push your changes: +Run the following to check your credentials: +```bash +aws sts get-caller-identity +``` +```bash +aws codecommit create-repository --repository-name dataall +git remote rm origin +git remote add origin codecommit::://dataall +git init +git add . +git commit -m "First commit" +git push --set-upstream origin main +``` + + ## 4. Bootstrap tooling account The **Tooling** account is where the code repository, and the CI/CD pipeline are deployed. It needs to be bootstrapped with CDK in 2 regions, your selected region and us-east-1. @@ -169,7 +178,7 @@ of our repository. Open it, you should be seen something like: "resource_prefix": "string_PREFIX_FOR_ALL_RESOURCES_CREATED_BY_THIS_APP|DEFAULT=dataall", "repository_source": "string_VERSION_CONTROL_SERVICE|(codecommit, codestar_connection) DEFAULT=codecommit", "repo_string": "string_REPOSITORY_IN_GITHUB_OWNER/REPOSITORY|DEFAULT=awslabs/aws-dataall, REQUIRED if repository_source=codestar_connection", - "repo_connection_arn": "string_CODESTAR_SOURCE_CONNECTION_ARN_FOR_GITHUB_arn:aws:codestar-connections:region:account-id:connection/connection-id|DEFAULT=None, REQUIRED if repository_source=codestar_connection", + "repo_connection_arn": "string_CODESTAR_SOURCE_CONNECTION_ARN_FOR_GITHUB_arn:aws:codeconnections:region:account-id:connection/connection-id|DEFAULT=None, REQUIRED if repository_source=codestar_connection", "log_retention_duration": "string_LOG_RETENTION_DURATION|DEFAULT=TWO_YEARS", "DeploymentEnvironments": [ { @@ -236,7 +245,7 @@ and find 2 examples of cdk.json files. | resource_prefix | Optional | The prefix used for AWS created resources. It must be in lower case without any special character. (default: dataall) | | source | Optional | The version control source for the repository. It can take 2 values 'codecommit' or 'codestar_connection'. (default: 'codecommit') | | repo_string | Optional | The repository path as string. Required if source='codestar_connection' (default: 'awslabs/aws-dataall') | -| repo_connection_arn | Optional | The arn of the CodeStar connection connecting with the source repository. Required if source='codestar_connection'(default: None) | +| repo_connection_arn | Optional | The arn of the CodeConnection connecting with the source repository. Required if source='codestar_connection'(default: None) | | log_retention_duration | Optional | The CloudWatch log retention days for all data.all compute log groups (e.g. Lambda and ECS Tasks), VPC flow logs, and API Activity logs - this parameter is specified as a string value of one of the AWS CDK enum RetentionDays members (default: `TWO_YEARS`) | | **Deployment environments Parameters** | **Optional/Required** | **Definition** | @@ -457,7 +466,7 @@ the different configuration options. "active": true }, "datapipelines": { - "active": true + "active": false }, "omics": { "active": false @@ -538,7 +547,6 @@ check the [UserGuide](https://github.com/data-dot-all/dataall/blob/main/UserGuid | s3_datasets_shares | datasets_base, notifications | Sub-module that allows sharing of Datasets through Lake Formation and S3 | | datasets_base | None | Shared code related to Datasets (not exposed on `config.json`). | | worksheets | datasets | Athena query editor integrated in data.all UI | -| datapipelines | feed | CICD pipelines that deploy [AWS DDK](https://awslabs.github.io/aws-ddk/) applications | | omics | None | adds the capability to view and instantiate HealthOmics Ready2Run workflows as runs that can output and save omic data as data.all Datasets.| | mlstudio | None | SageMaker Studio users that can open a session directly from data.all UI | | notebooks | None | SageMaker Notebooks created and accessible from data.all UI | From ce378fe94bc482ca3ce3d6482c2baabdde63ea58 Mon Sep 17 00:00:00 2001 From: Tejas Rajopadhye <71188245+TejasRGitHub@users.noreply.github.com> Date: Tue, 15 Oct 2024 07:17:00 -0500 Subject: [PATCH 4/7] Adding docs for GH-1528 (#1575) ### Feature or Bugfix - Feature ( Docs ) ### Detail - Added in the "Deploy to AWS" section ### Relates - https://github.com/data-dot-all/dataall/pull/1559 ### Security Please answer the questions below briefly where applicable, or write `N/A`. Based on [OWASP 10](https://owasp.org/Top10/en/). - Does this PR introduce or modify any input fields or queries - this includes fetching data from storage outside the application (e.g. a database, an S3 bucket)? - Is the input sanitized? - What precautions are you taking before deserializing the data you consume? - Is injection prevented by parametrizing queries? - Have you ensured no `eval` or similar functions are used? - Does this PR introduce any functionality or component that requires authorization? - How have you ensured it respects the existing AuthN/AuthZ mechanisms? - Are you logging failed auth attempts? - Are you using or adding any cryptographic features? - Do you use a standard proven implementations? - Are the used keys controlled by the customer? Where are they stored? - Are you introducing any new policies/roles/users? - Have you used the least-privilege principle? How? By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license. --- pages/deploy/deploy_aws.md | 71 ++++++++++++++++++++++++-------------- 1 file changed, 45 insertions(+), 26 deletions(-) diff --git a/pages/deploy/deploy_aws.md b/pages/deploy/deploy_aws.md index d75f57ab6..9bf86ce6c 100644 --- a/pages/deploy/deploy_aws.md +++ b/pages/deploy/deploy_aws.md @@ -460,13 +460,22 @@ the different configuration options. { "modules": { "mlstudio": { - "active": true + "active": true, + "features": { + "show_stack_logs": "enabled|disabled|admin-only" + } }, "notebooks": { - "active": true + "active": true, + "features": { + "show_stack_logs": "enabled|disabled|admin-only" + } }, "datapipelines": { - "active": false + "active": true, + "features": { + "show_stack_logs": "enabled|disabled|admin-only" + } }, "omics": { "active": false @@ -491,7 +500,7 @@ the different configuration options. "Secret" : true } } - }, + }, "s3_datasets": { "active": true, "features": { @@ -499,12 +508,19 @@ the different configuration options. "file_actions": true, "aws_actions": true, "preview_data": true, - "glue_crawler": true + "glue_crawler": true, + "show_stack_logs": "enabled|disabled|admin-only" } - }, + }, "s3_datasets_shares": { "active": true - }, + }, + "shares_base": { + "active": true, + "features": { + "show_share_logs": "enabled|disabled|admin-only" + } + }, "worksheets": { "active": true }, @@ -519,7 +535,8 @@ the different configuration options. "features": { "env_aws_actions": true, "cdk_pivot_role_multiple_environments_same_account": false, - "enable_quicksight_monitoring": false + "enable_quicksight_monitoring": false, + "show_stack_logs": "enabled|disabled|admin-only" }, "log_query_period_days": 1 } @@ -566,21 +583,23 @@ In the example config.json, the feature that enables file upload from data.all U "features": { "file_uploads": false, } - }, + } ``` -| **Feature** | **Module** | **Description** | -|---------------------|------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| file_uploads | s3_datasets | Upload files in a Dataset in the Upload tab | -| file_actions | s3_datasets | Create, Read, Update, Delete on Dataset Folders | -| aws_actions | s3_datasets | Get AWS Credentials and assume Dataset IAM role from data.all's UI | -| preview_data | s3_datasets | Enable previews of dataset tables for users in data.all UI | -| glue_crawler | s3_datasets | Allow running Glue Crawler to catalog new data for data.all datasets directly from the UI | -| share_notifications | s3_datasets | Allow additional notifications (on top of data.all's built in UI notifications) to be sent to data.all users when a dataset sharing operation occurs (currently only type `email` notifications is supported and requires `custom_domain` hosted zone parameters be specified in `cdk.json`) | -| confidentiality_dropdown | s3_datasets | Disable / Enable use of confidentiality levels for a dataset. Please note - when this drop down is set to false each dataset is treated as if it is Official or Secret | -| topics_dropdown | s3_datasets | Disable / Enable use of topics for a dataset | -|auto_approval_for_confidentiality_level | s3_datasets | Specify if auto-approval for share requests should be enabled for each confidentiality level in data.all | +| **Feature** | **Module** | **Description** | +|-----------------------------------------|-------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| file_uploads | s3_datasets | Upload files in a Dataset in the Upload tab | +| file_actions | s3_datasets | Create, Read, Update, Delete on Dataset Folders | +| aws_actions | s3_datasets | Get AWS Credentials and assume Dataset IAM role from data.all's UI | +| preview_data | s3_datasets | Enable previews of dataset tables for users in data.all UI | +| glue_crawler | s3_datasets | Allow running Glue Crawler to catalog new data for data.all datasets directly from the UI | +| share_notifications | s3_datasets | Allow additional notifications (on top of data.all's built in UI notifications) to be sent to data.all users when a dataset sharing operation occurs (currently only type `email` notifications is supported and requires `custom_domain` hosted zone parameters be specified in `cdk.json`) | +| confidentiality_dropdown | s3_datasets | Disable / Enable use of confidentiality levels for a dataset. Please note - when this drop down is set to false each dataset is treated as if it is Official or Secret | +| topics_dropdown | s3_datasets | Disable / Enable use of topics for a dataset | +| auto_approval_for_confidentiality_level | s3_datasets | Specify if auto-approval for share requests should be enabled for each confidentiality level in data.all | +| show_stack_logs | s3_datasets | Enable / Disable showing stack logs to users or only allow admins to view stack logs. When "Enabled", users who have access to stack can view the logs. With "admin-only", only Data.all admins can view the stack logs and when "Disabled", no user can see the stack logs. Please check out the config.json in step 7 for more details | +| show_share_logs | shares_base | Enable / Disable showing share logs to users or only allow admins to view share logs. When "Enabled", users who have access to those shares can view the logs. With "admin-only", only Data.all admins can view the share logs and when "Disabled", no user can see the share logs. Please check out the config.json in step 7 for more details | ### Customizing Module Features @@ -622,13 +641,13 @@ a particular feature in the core is to add it to the core section of the `config This is the list of core features that can currently be customized. Take it as an example if you need to disable or modify the bahavior any other core feature. -| **Feature** | **Module** | **Description** | -|-----------------------|--------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| env_aws_actions | environments | If set to True, users can get AWS Credentials and assume Environment Group IAM roles from data.all's UI | +| **Feature** | **Module** | **Description** | +|-----------------------|--------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| env_aws_actions | environments | If set to True, users can get AWS Credentials and assume Environment Group IAM roles from data.all's UI | | cdk_pivot_role_multiple_environments_same_account | environments | If set to True, the CDK-created pivot role as part of the environment stack will be region specific (`dataallPivotRole-cdk-`). This feature allows users to create multiple data.all environments in the same account but multiple regions. | -| enable_quicksight_monitoring | environments | If set to **true**, RDS security groups and VPC NACL rules are modified to allow connection of the RDS metadata database with Quicksight in the infrastructure account (default: false) | -| log_query_period_days | global | Specify the time frame for querying the log history. This log history is used for Stacks view and shared log views. | - +| enable_quicksight_monitoring | environments | If set to **true**, RDS security groups and VPC NACL rules are modified to allow connection of the RDS metadata database with Quicksight in the infrastructure account (default: false) | +| log_query_period_days | global | Specify the time frame for querying the log history. This log history is used for Stacks view and shared log views. | +| show_stack_logs | environments | Enable / Disable showing stack logs to users or only allow admins to view stack logs. When "Enabled", users who have access to stack can view the logs. With "admin-only", only Data.all admins can view the stack logs and when "Disabled", no user can see the stack logs. Please check out the config.json in step 7 for more details | ## 8. Run CDK synth and check cdk.context.json Run `cdk synth` to create the template that will be later deployed to CloudFormation. From ee7d73882ba6e373796e62014b836cd2514d1bee Mon Sep 17 00:00:00 2001 From: Noah Paige Date: Mon, 21 Oct 2024 09:57:03 -0400 Subject: [PATCH 5/7] Docs for worksheets NLQ Feature --- pages/deploy/deploy_aws.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/pages/deploy/deploy_aws.md b/pages/deploy/deploy_aws.md index 16b4fe827..a9b829ca2 100644 --- a/pages/deploy/deploy_aws.md +++ b/pages/deploy/deploy_aws.md @@ -497,7 +497,11 @@ the different configuration options. "active": true }, "worksheets": { - "active": true + "active": true, + "features": { + "nlq":false, + "nlq_daily_invocations": 10 + } }, "dashboards": { "active": true @@ -573,6 +577,7 @@ In the example config.json, the feature that enables file upload from data.all U | confidentiality_dropdown | s3_datasets | Disable / Enable use of confidentiality levels for a dataset. Please note - when this drop down is set to false each dataset is treated as if it is Official or Secret | | topics_dropdown | s3_datasets | Disable / Enable use of topics for a dataset | |auto_approval_for_confidentiality_level | s3_datasets | Specify if auto-approval for share requests should be enabled for each confidentiality level in data.all | +| nlq | worksheets | Disable / Enable natural language querying powered by genAI in worksheets (experimental feature - default: False) | ### Customizing Module Features @@ -595,6 +600,7 @@ In addition to disabling / enabling, some module features allow for additional c | **Customization** | **Module** | **Description** | |--------------------------------|------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | custom_confidentiality_mapping | s3_datasets | Provides custom confidentiality mapping json which maps your custom confidentiality levels to existing data.all confidentiality
For e.g. ```custom_confidentiality_mapping : { "Public" : "Unclassified", "Private" : "Official", "Confidential" : "Secret", "Very Highly Confidential" : "Secret"}```
This will display confidentiality levels - Public, Private, Confidential & Very Highly Confidential - in the confidentiality drop down and maps it existing confidentiality levels in data.all - Unclassified, Official and Secret | +| nlq_daily_invocations | worksheets | Set a limit of number of invocations allowed per user per day for the genAI NLQ worksheets feature (default: 10) | ### Disable and customize core features @@ -622,6 +628,19 @@ disable or modify the bahavior any other core feature. | log_query_period_days | global | Specify the time frame for querying the log history. This log history is used for Stacks view and shared log views. | +### (Optional) Additional Set Up For Worksheets GenAI Natural Language Query (NLQ) Features + +To use these features, your. data.all admin team must enabled access to the Claude 3.5 Sonnet Model hosted in Amazon Bedrock in the Deployment Account of data.all. To do so, the data.all admin team can follow the steps: + +1. Navigate to Amazon Bedrock Console and Select Model Access in left navigation pane +2. Chose Modify Model Access and select the Claude 3.5 Sonnet model + 1. Be sure to review the End User License Agreement (EULA) for terms and conditions of using the model before requesting access to it +3. Select Next, Review any additional terms documents, and when ready Submit the request +4. If the request is successful the Access status changes to Access granted or Available to request (this may take a few minutes) + +For more information about enabling foundation model access in Amazon Bedrock, please refer to AWS Documentation (https://docs.aws.amazon.com/bedrock/latest/userguide/model-access-modify.html) + + ## 8. Run CDK synth and check cdk.context.json Run `cdk synth` to create the template that will be later deployed to CloudFormation. With this command, CDK will create a **cdk.context.json** file with key-value pairs that are checked at From 6e194dc902e6d44113ad12a868da7a114396f115 Mon Sep 17 00:00:00 2001 From: Noah Paige Date: Thu, 24 Oct 2024 13:59:18 -0400 Subject: [PATCH 6/7] Change config paths --- pages/deploy/deploy_aws.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pages/deploy/deploy_aws.md b/pages/deploy/deploy_aws.md index ee9f8ca1d..5ffd043ed 100644 --- a/pages/deploy/deploy_aws.md +++ b/pages/deploy/deploy_aws.md @@ -524,8 +524,10 @@ the different configuration options. "worksheets": { "active": true, "features": { - "nlq":false, - "nlq_daily_invocations": 10 + "nlq": { + "active": true, + "max_count_per_day": 25 + } } }, "dashboards": { @@ -604,7 +606,7 @@ In the example config.json, the feature that enables file upload from data.all U | auto_approval_for_confidentiality_level | s3_datasets | Specify if auto-approval for share requests should be enabled for each confidentiality level in data.all | | show_stack_logs | s3_datasets | Enable / Disable showing stack logs to users or only allow admins to view stack logs. When "Enabled", users who have access to stack can view the logs. With "admin-only", only Data.all admins can view the stack logs and when "Disabled", no user can see the stack logs. Please check out the config.json in step 7 for more details | | show_share_logs | shares_base | Enable / Disable showing share logs to users or only allow admins to view share logs. When "Enabled", users who have access to those shares can view the logs. With "admin-only", only Data.all admins can view the share logs and when "Disabled", no user can see the share logs. Please check out the config.json in step 7 for more details | -| nlq | worksheets | Disable / Enable natural language querying powered by genAI in worksheets (experimental feature - default: False) | +| nlq.active | worksheets | Disable / Enable natural language querying powered by genAI in worksheets (experimental feature - default: False) | ### Customizing Module Features @@ -628,7 +630,7 @@ In addition to disabling / enabling, some module features allow for additional c | **Customization** | **Module** | **Description** | |--------------------------------|------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | custom_confidentiality_mapping | s3_datasets | Provides custom confidentiality mapping json which maps your custom confidentiality levels to existing data.all confidentiality
For e.g. ```custom_confidentiality_mapping : { "Public" : "Unclassified", "Private" : "Official", "Confidential" : "Secret", "Very Highly Confidential" : "Secret"}```
This will display confidentiality levels - Public, Private, Confidential & Very Highly Confidential - in the confidentiality drop down and maps it existing confidentiality levels in data.all - Unclassified, Official and Secret | -| nlq_daily_invocations | worksheets | Set a limit of number of invocations allowed per user per day for the genAI NLQ worksheets feature (default: 10) | +| nlq.max_count_per_day | worksheets | Set a limit of number of invocations allowed per user per day for the genAI NLQ worksheets feature (default: 10) | ### Disable and customize core features From 646d31779162d90c2991235e17f56ddf4e6bf672 Mon Sep 17 00:00:00 2001 From: kalosp Date: Fri, 10 Oct 2025 15:51:27 +0300 Subject: [PATCH 7/7] bring in userguide --- .../img/worksheets/ws_analyze_txt_doc.png | Bin 0 -> 83489 bytes .../img/worksheets/ws_text_to_sql.png | Bin 0 -> 81898 bytes pages/userguide/worksheets.md | 57 +++++++++++++++++- 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 pages/userguide/img/worksheets/ws_analyze_txt_doc.png create mode 100644 pages/userguide/img/worksheets/ws_text_to_sql.png diff --git a/pages/userguide/img/worksheets/ws_analyze_txt_doc.png b/pages/userguide/img/worksheets/ws_analyze_txt_doc.png new file mode 100644 index 0000000000000000000000000000000000000000..ba000b7bbf1c93a3ee296a33337c1faf9a48d89c GIT binary patch literal 83489 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≻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 K`{I4X)BgfOqK=yY literal 0 HcmV?d00001 diff --git a/pages/userguide/img/worksheets/ws_text_to_sql.png b/pages/userguide/img/worksheets/ws_text_to_sql.png new file mode 100644 index 0000000000000000000000000000000000000000..26a12c21122c0f19de2a50495ea22d139c503b28 GIT binary patch literal 81898 zcmeFZbySpV*DwwUBA}omARr+rjifY4cX!8tfH36HB`P9aLw61>4MQnNcQ?`v58QjoldNrZ`ngmh0@N=yX_=}r$463XSB z+lZc7tyf?qBxGMpQBfsnQBiUw2cWs-YXB0`vj|foqkJjGXC21IMn)aI40M!w!oWd%EW zj&@tOZtX^oESlZEErCtWN1gqGhoIy3#-J?oGkWB*HKfV96>2o{V?uJ>tUK$%CW`+R)sz(Ipi{tt0BJ{bv;5X09e#*g`e$LCJ0Ad#-w^6Oe)RY*VGrTm$DV{vgudX|ERAU2 zM|^7pYWRR0i|A)BP(-=aKl2Dxr&Ul@N=bfZXVF%a{M^wzfRu&(2zY-<2;I-d=n-Go z{qBUGW~2T0etxx>Pr+qLe#SupxBOjMU&?uL4M^`1J_fxdpu(sALehU4^6q}qi{6Pl zUsml+jEoviuCFaPZ{I$azI)e)_UiiDWAOUghv3!@0-1K?=txx~)?SPgEvJYp(Ew;k zo6E~1(IeV-kdOl`kx&sWWWBz{+3MAHV~ zWK8aA^V-&t*HwVxj~Tp(_Dwen1^FLSoU8>XwB(h@MS%_gaxP|8W>yM8OmcE^eg`vi zUKKHkKbIr^6QFqIf78pWWa$cctu1D0gFp}B8G_tgocw>x|35~4Jn^TMT0d5@v2n8fy!5A` z|GiY*5#S&Sv_U-6N$|(j{JHq&!9N%Bv)q9G6Dt0L=RbN8h!(`;XZicm1TptXrOJ_z zgps7hMATf7w`b8kAAKcl-WQ^JN)`SVN!s`AoW~wX7TpK(G>YT7RG9WB0p$l+$8Vn9 zp-6L55_aEfaJfTWA^hqo+FZ{Q=uCEmfzQ&~ZdFfTpZ5trm&^5~Vxxe^v7P`CNaGDk z&>b{n)ce9nzwyg&h9aEBP|)$&+2I-iH#fJv%gKEl92|QVor*lY`Xs}PiwlSDPYzG+ zkozK`{LZfl6kazZ2&#ltDaUk12lq)WXejDZH~!7=P=! z5Z8*#UXT8}SUQMCOn2LKaxDEFTDYMZ)SmC8zeR~RSD=cRz6=@e{Y>$jxWCWZ;_-hw z;{ER4uW_YQ!6p@?Q63zWt|G<7Wk{C{lYPA%L$$S15ktVD56)~?T&b`fHvEYVR2c2n zPkDG84qir1>({!ggWje@_~+ZIh^t5K1bm@hG#T=dq#Bg~>BZ`XG4SaO)Bd%VJQGdf zU24pCc4@=$O+md{hf&WH5;q?DOsLrTe{MBPr&(ZBx9sT+1qt)}4N$fNCibFMgkQyJ z$0CFUM86?}-^l`JAI4-hKJT;sAvl>|^LQI4WGR=gaLzIi^k9Gz>YqidzAO0ZPTGel#(htpAw`~GRXJ$S( zEPI+&%<$Ujym3Cha4%WzPgUF$ItyqusHNCytd)Iz&cBo>(%&Rw6@< zwjcPNtw}n4c7)A~1YY%hPP`-z@>cV4joyZWW{%s&X`JR+D?yZVMKmD>9d<;o-{t6?$yVFPHMI_Hr~gO5TY zEyK7?OjK@voDE9Qx$NQl%4~~qu47n8MCjqi>J zE9fjAu8Pld2cz`I`1+4F#}sULhPvD$x{nIa7|eRICe0`NQyYq}Y->|m$ZNgqY`+Vy zKX6X3HPC zA8Zq+cGhAM6pb>MC<;wT5{*G1{b2kM-p-_I9Fc}7;ff!oylbCthzUVzk`3ip- z&>mJyzxU(J&06VH(w*LSJAMP1Y|djQXX^zK2M19uvhm*@LRRw(p&x5qoo&?H5r-x$!UAivZUmaDHp z;53T4$Rsc7T!r8+?6YsVj%G7o^c_43WY|s@!1P*c`N1hr{i~C6dY+8qv)3FbL zCwg$8C~MXUHf38}No*Z%>CG-qIa5Nr(5nHXt@TE9uT)^3o*hF#IVmuxj8&-hHu0<+ zF%&zX8;8A0>cmeKF!yb4C~Ff&c1sQ|#K7 z+LT*;hOO(fce#|;S!S|>Z>d*ZH{+~pfhSDLAgf^$-N{bS75~A}!LUiU2Uda&Mv%+= zhpMyI;)%|kNsw_T+%0{xpU8&`op0X75Y5ae0bxlGq@`Q-g_B!3WT}DN<}tF zhOtGHulsFhYYnZ`p`>?!MK#J~h3;_YvjnD9bJgTg@3Vv=W@Pq0*rLM8-l+B*(M2Xa z*#ukqhIP}^EirrzcCrC@Wd4h|H&}QMusHbXO3Kss22*nnP|HAc!T%TbL zl}+M!tb{X(;j69Y*bI8R<&k)H8no=jbLTI?XPZF>&)i^x9$7MIl1HAft`#-&cwt;A z_On#+gC0>YRU73TH4Mwi8io2D=jdAI#>RL0W8BtSvVv#k6?d;q6Fk|zZ@5mo;eRjP zlGLj)LNWgcKb!16y6r9n5u&+f@D>z2xL9)e2z)BZm7Ji?kk{eH?Offgf)`z`Y^&lz zqm^xDOQ^y4LBii1(LKh%jAy^JDK{4ggmASaDg0i|n;6 zl{)R$AcvpE=?vv|cU=V-f)05}ln%xh1rAQ~Z?Se3e2_*GYjL5xr!twZ=15askQ1U>jtt`u`JAv>PX?tz?o4g z8GL6w%4?M=Lz=wCIw;RBE6H)c#-ziyih4(&s#~R@sH&lmvz3xgf*`ko0cjOSFETqf zX3gNamFo09^(liFvCRB+Z@9GVNk=MHH}xy;L`;LSuJER@E*?C7+>@EC)f#uMYLtvF zS$jhkw~KDKgZ|B1s6AQ}KeQAfxf0YJ4Wa=lw5;{W1s|-G+LxKPU~4N|2c2QNR(C}f z`vaVs+i_1$xCl+1R^XNSUG0X~G+5xGsL&$fc%)D_*|GdY3dMr71cjkmebr%ePG=qi ziqg2dM7%HY8TA=lAV{Gj(Py&b@ixv?Abk@PQ~CGNty5N$R97y`_FLG*0^;;wEO3Un z=Tb2nck5=Ni8EbVW62mYJFlw3%lU@(*%#ZbmXki~d7D7mcs9ofOuNY>qvqf_W{9BH z&gN4E7*Aei+2mGFf_t6f$uZ68*ZimnYskZ|qi2@S$_WZ10R`OBL2Z@l$LEu)e3ww* zo=Ivy4a~ZRxr7+0jN=Z!5g| z{-5+;ymsBC(2&7$W7=UqdX~;sz3%(iYyW)jOU&_$VrMIj$YUnrcxU(*4U4G34f-M@ z!Yw7(fPACi+~!MoT;(%W17{)ne6>X0nANYc5s<011=DtF8XAqw(R?%XZmoM8Bj7qJ zXT2$E8ZI5oM|PSUYfJN=tt!7V{N#=VVtAg*@ePWe@fW=3vN}0H#W*?yv!uL=(t@e6 z7(&l$CPBghR-n>ggKz05M)2wqld+;{uc3Mkrk$D~SOm*zS4OWS75(bR^|YjRTL=K% zuMj#mcbTkL-m#vZ%{zh>VHeZzmFT#WBjK~6?Itkc`Y3tb9vyDil%b` zr-}VpQ2Fi974vNO{KB$I&+PX+o0FAAmCwXWLbf2*K+deeeCP21NBwHc0F1|j@ja@l zb$Py|UU!8;5=_|AvvNXOs|F{HoCZZGVOAOuoQYM53m+H96m7{skYJ$&3(73-o&42w z_S0=;KeD1x)$8#~`i3)VJpRQG(Tb%e53zE4be^eNu#{P&;xW+s&$)g{ zQGE3h=Tn7gKQgD7YMd9h$V=EmT@X1(Pa!7rgZm{iO1@2JElbVD?PMAn?@Zejx>SoZ;)m$qtIXgxepYU|ZF24(?p5 zeSEfLlNCo)M%T~{ZwNJtBLZA3aq8;>!Uh4CbGQyAYV3rj__q9v*Tn*6q-a<*($#G% za<_>XG7-~r#c-I^zsyJYwbc$<0iGapZ=ED_h`!({k?pKFDVndH@q!;7lC1QBLcgWF zoq}YREv;vqBu+&pEG5*LG)>Nq-O62tS|+O39bXJ(8&8ga{C0k*W0j{y_c+bG);tE_ zyVYhF>CuII{y6XRg$bRPvaY-*rwh`$97wOHs_dTbsU5X_3M^4HhNxy{Flsd_6!tvF z8nu%fRjZ0Lx!N!3hH2mkUi)=(ey4OfQ4^sUzvcE3e%>|P0PQH9&+QO81WQ+AGpWor z)etiqLbbczqe2?bAc=AXaSH`wz&SkNY3}l|NOf)#cS(V5Ur2-dS5)Q=Vi$%OoIvOn z>Y8&}*G_ds?1Lrq4(_H4zWXCt?}*SQ!9f}g817+kAN zN{WZh=jnZ{f1Us6Kw%aK(*TVmVj-4diA>YUsgNji^P?-Cla0sMI;IRVjlre)&7;sq ze>t-V=l|iuSK8%h3<1N9NwtJy$nP)g}IP)UTLLDztcx5FT!4MPan&Utwz)vh1e z*P9Hj>M04&1oHBAE%w7Z-pB_4h9U*nJZ7K9=NaTO&(q@0HEQ#6Kcn=XBXzjw5s%Ti z%wOMT?pwK_ZWk={;zf|nQGtsd*`_p5v%HYP&h)Jru6_u+)A@ig5n+Nam#9Y6$aRi9CeU#n;pt_e$%3~A@|+=!!xg9L-$47 zeYxeFIs6bSS!KMtW-$)gBrV%IhXE}LagKmqbab?i!?5|4hi0ZlOE=a@ht&;@!0(p& zAll9-g72`T*Q(@uMGf!cz^&eHPkD6cb;RCbw94ob4dZ1iTlXJ_;KI!Z9JaGi z(eX50RO)EsGM@8jjjA6fOxI;I!s-=DHgGmC&L^`w%$yf)fB?q;~NKy>((SWc=9pme_+%CZK%8K-5~cUUK05=8Sd@51l8~FpB#K1 zc#!YI-FU{)**4OJXHCK#*r!{janwR@&9!}>#3+k>w4F&BW?WuJcyh4v3is{dOmn|J z*KD0*>PSAgJ`wc*A|!VNMCUciF&};F?~jPmFxT}q3h+wR4i)=sz1XXX>7r39Qqf)$ zXCB7uy4}5WavWLyU~NSdcK$)|T0H2qX2kgR4gD~qoR!N;uA|>5vthKOn$$gSczK{y zb*Ol53Zr40JwYKTZtEZ(Nbo@u*(HAes_5V=t_>9%y+(>g_YjmL{~^`c zNcLs8(D=ugK=D0FIY8i<)qw=(6H7r$waEu+j?k_+hiT}r98zs@roTlU7kw_RdTC9f zn~hGdefx$kB{=@fbb(+wN0U}McAU0*29~bEQ}f{w-4mh2P)HK8B5j{R-Ob!6gx-DWtdq5pvQ^+`kdn|B2v-W1y_5f#QT{ zF0GH%vP}pNbr5lt+R)^yJ+@lc&IpKJ$-w9Pa6a4Qg;qFry{C3NEVHj}S5KpOo}SF- zGOa0YC2jv%6UUFId-Hu}?3JG1$0t?L;9Rx%|H zQfNY#JT@s9Z#Tx$-4YT;*Tj8JN&dWnznPFB*hmEuUo`Rwk9h> zI>|G0i;kHk#k+Se1LR7Bn^H^o-4zuZct=+P&uwF$&WC_mydN|45{+`SL)}|IQTn;k zmzzTsBE6{7V?OIg>oYR7@-cJ>hrGpQKEX%;|3}De*~V|u8mF_?TJ(|j!;<+?se6`c z!h)%#3Qp$WlRY2}z~8ec)1}}eoAEwrROiZWsCtq7(1lJza8o^d8l+yp;a!E-21{+G zJ|IvTGI*_3DyxuGOC_pas$jSO#at*x2Jb=gM$U=HaJFG$mxJ~_O?dA}i1{p&e0Tgf zI&_3pltW&>(Xg(8N4$=k38*r`GUe1-cn!-=>?t@LW)NbD@Z1zCaLOZ~&?n;c9w-I# zG_@7Y*I1<;S*mvyAG91XvDvJ6PdY9aGR}Fbp`qw=O?pn{6$(O_Fi6Jx2J8q6k}&b@ zqTYsfPibCbt1q{FDgcbk>>N1E-&TN*8IRCQ|1hHaic{1*FGj<}X+&gCnJKzEtZB=6w7`gop7 z-$>B;2qNBaW|2ZUpocRUtwzXh3GU`B$Nple(j@UFk)v2s-w7#HFsC9~{~Wt(gZ+Vn z>Q)Wh!nmp&s@FCF0cnUb$YHU&WdAg?; zdIEz^>X`YQ09ll9r7yuoqr;-FE?+oA!l5){7ZT4wWt6YFbPSt7co3a^cL~DF6zwLr z+)5oxH;;n7Q{AbJX86XvbH_x)6;l!_-XWp5>7hfwJZIaDOBVQByxe<1&y!9@dIPPA=cd$+Cjlzd$}va zRjjn=Z(P*BbY33{LlqhBr5$tsaUrEepFSApTFd4=J6y43%P;}QttO_&z(eVZ&lBQg zqoVQgtj55CuR3aIK4 zdY=+rBk(ysJ-MOKsD^u`U6z82>i9~g;SPnOCr`hbL40mm*NfP$&sTlr=J4)7Vm+{% zM;$F8D{l4GWpV)&wdbPJwc4@-5yP)2)>q*jWm$4~!ptYTD)+KIyL@k?;66EUZdQv( z16!_w+NJv9V3XwD3L@dKd^yMfXzfmZSk#UAw+ZW4fl)a1t;1cVCOlTHNKL{@v*1-D z3&>U-U3C51y<}>$#rebD{N}~0&DH*6X6M-v=b2%g0DNwfh zkdgKN?hwqP*F`T^cN!5#XBqS*)R#oRdOhzfY+`C!B(HK|g*L;Hw?kA~;)6SY%r`|v zvG_7$r){T&7cV*^z%<{myHa3QSfDbD&=K5mJLashn5bBWU<>NQ?zlq-nSWU5uDrQA zHDDTQtX*{CU#ZXpKR>HM?P)E_WbdHGXT^P_G=fUWq+i)-77rZHXmlL@!|>5&4p+Pv zYY!V(u*0}(q_@r}MC^nx_8mfe74#vLowBHp2)y=FwE{x}pPPn()d=9$YP?;0l5%RF zsjH^~lckjqcPPY(4 zuZqSxkUt_i``ES6s1NAEz<$O^t6r6m(;uQqXwgL-A3~je38)72wP&-VDF5&Q9g3Sf zhb`p5;ThtQSNi*1F$@l;>lk!7Y$YBZZZz)AytwdBOSvO18($+Ym<0xJYyBr5E=+`a zCrY zvHZ`g?!5nO;&R$-B;#jwaL4SO@Nxxhxk>dl?q6Z=8-qOZsqp)FGjiqMEqEb6xw8z- z?@Di3c=-4m@m?N3R?S!4Hk2D#>~};kklIogjeV?m-DdgV=coK&^`BeK;=Xs;nVgmtB{DPtX_B8Ym0>Xa5=*AWLyYF9Gi1N5|Cr|p8ek~ zzo|iFPnW)YzWaN^0#RW^fRHcMsm7r=zll}EHTx10V4MF7;{V4TIzSOMGPRd?9Xww-a~epwdj0Xk2iDK*q@<)Yt~9o@ zg$dWr%UW(HmtkLLTlODZt*nvBR5OzRCz8*}yfwg#`nI9+WW&eu-Eu|)_qgQ%?}TU- zB63r`zP_H#^x!^oo`{9Krn51E7 zP0tG#MZuERicj%Ul0?OXRmu@tO6RhOgtT7kS+0r^FLD3Zsxc z>^XPp2DCxcz5ZGxU3v&R56G3@dfHFb9`n!`dr0;L=e$Pe@)Q+@>?m(5_?P^{*6Zc zj_$ke>?pSO&dOh%jA3mI>eW?02M%Hqo}Ht5WTg$7(&kz>_ms0V<$7Q9rPvm@9>&=8Wp!dBE2#{U)@=l(s zaC>C!t1P%{p{1SbMU7a-EYa20UM-uJ1ljjpeGfn#=Ix=c`uDbQxs6s^PUgeY9{N3e zsHfr%+cw_>9IIN#FtuUEX*W7l&hVv`$Pzf+5AhDu26PVLjb&ZBAE?zl;ddJ7@yIi7 z;jOR%l$cVOqS_wKb;ULOtL?MQ>6d9t%XS&ASu)GGMB5u)x_}f8)EAi@5Z28s zZV__k*19ehur}Btclo^UIh8VK!_oXW^DQR$ObV^n46regUg>#0%R2my(|Wvpt1AgD zNFQu7TPJ@H1EhdveKye@%cu)s7JE`&X*K>Rx%T}}$(mp37GWz?iI8L}i$00gX^zz8 z@>nLrO2N-Y@w*%R94b2OUnfWu7Q}MUdi3gD2k+WsuyZOQXu>b)Sz3VgP^vNSD+!+* zHxCbs#Foc=pp1Ih6c)y9%DyB{#n2}L;KIf}{ZcWFLM=+&>fP{eWo4BD4bDN)>zN@K zO>C8@XjoTRix0aEm;smKWX3B%E(KmKmvT@YO-D>YR)4M&c|I({pNexS(kJ%f>VfTW zS^Uh%r;vt_-S)TA!z%-ymFScyq^2rtnMtNARfhdQBmzAnE_P1t)dvWbJnj)w5yfP`;x2;y1`6Lx8Nrc@4GhpF^0{S%q3HIx2ILD)Jo`? z61ccTG6-Zw zm06y3ajI0rHC3pzs8#}pRb;?-9g3}TmPpS{oO?{K6DR_(Nx;%eJ|UX(ZXzmc3g}Vt z2^ZCcv!&8iHq(|U-kT%&Pj{xOqTw(r9&TJ9uL>aTTsOp{)@V>=aIH$byltq+S`wmC z`?9{yT|`Z-BA7%-d$l0FP~nNt)6p15-Ibvnb*vZ+`u%I};lqX)qjs$izao*p`l!gm zwIm4iVdHz~iA=jb7cs87x6$xp`G9-Ou&uEV)yzy-g+_$d^Y+t2pV@@24kYV)*j!*6 zPm_5of^`LY4{?NG39YSdGzBCsoJ1|9CFs-zwkk1f)J76GEsrw2qp7rLAgZ5v5wSoz z6hT2j`fpEP9$6&j=30P3P`7fLve#!aJoxxDKK)6Q+y%|x8o=p?=jIW)7RV4aNXBbr z5o-G&>}A*0cid)+tq|sd)t+SFDj(<-Z4>tS5H=}>fTvjF*)eT-vG--&L-*ypyO#$Z z?DJ_N0*47B!-p(5(eo0Q#`zU%kFfU@~8vdeLVtpFVI zY^q#Cm2D|io6V}nHU9Yq4h9CDCCfN6rPr>f)GCXX8OtzkrbJjw^_-`;Mv0CE&I5I* zIVUcws_;F$QKec&gEBe5vpRa&*rLc{ecrg8mj0v|5;X@e#azvaUhdT5gs!<#UEs1%?9X-;T+>#2L$q6^*I(ZK_ zylBTY7ODaPeQp7ntD{#`5H1sS)bPHxG#{g!8(XDTT-YaPqo3=NFg7Mzvp@0cp3Z9V zLK82FY0|ml_JnlPK$NHhyUtuNSIGc;`&zRE&I)}VkX}2Vgw{F4%eet zc)4v9$%f+%8p&)|gC5aQpaJiT9qosgY#YTptaNp~wWr(;CNIIc7{CV8>2>JxRsb28 zbUD;7L8vqhhr0o6yZxQ!hVMqg#W>Zf;v%VKCcNkt*DS!JdCIc};H1Fmy&6S|K5;38 z5hsSz1c+%#mt2PVk!h8$!a}Nr95BFxUJQnfNtiEcDah`^#j0LU@2bovSWefyK zD*M`_9&c6{6w+9I60XB(mEbN5eo@x9PM9nY*s26o%0{)p#)SH znwL!(VS7u8@4JAR*TLm3?c3b*mu7DO9|;&}uEc{ToGB<-WUoC)qf{3xwgJ3{%JWw^ zh#f>k{Dv;U#q`7~_h8<=EWD=$*S?Z~^HBX`E_aH8IbG)De|3-!3WcrS02m8Zb6bi! z@A~w9G$Qm;qQiKz-$#eceq%(%1CEqv{xBJ;?`XBKZ}is`GNNI+%9I!g$PwT(>%4wn zX1^QO$Bc`+bZ66Td%+_~b8?t~#UPTQKFai zzES#_@cQ~EQQnH)L0yQ5}%&6XyudG-gLxrPbUyaUEVsgzkYM1oSW z+T{ctI6}NAK$#eNx&m;2#J=f!$gxCcA)!x#FLrYBO6{7V>Sq~(ES=G=vRAumZmST< zo?|$~20CUw`NoGtg!A|#v3y=Lxz|iVY%iFJIJOIkvo%`Xyr7U)L%2JX#A91<6BZ@_ zPurgS)b_gC7)C)?g5rC;CuC%^c`yZ0<@4|!-K;!5nn4TdbwaoRS^h+ze0>i|OupGr z(gdkkPHXPGG(t(PB#98BkBNzi+E;Vvsh#=ip;a<5j87BCn81_lZQXG7!{q>=kfx|= zycOH`9h^n9@E2nr)=$3oY%Hxb@4{A%nZnK!Mrw!m((xFch)TrV!HhgBr|p~uHc~ZR zaHvUyT@3EFr{dH5i9^d&`5%W6(dH=H*q0(yxg ztCB%By4|bJL1wM}hJk`>sn}PkkX&{&fvXBrDdq-p*?C=1fBdif&A<(m zV?a|4AUj)maAjCD>gTMi;!*FHC4>pa5;&R}0onsXC^x}1zZse|q3I)wq^rX2u7eJL zmqg#Uh@?8(#rXVA@p@xOEf=HWrMq*MdnNr%%{p#-7^?`bqq#zOv+v@umB1r~6&bvq zi!&?&z-1fLF|YNPUZ$pC5?E9;HU?MFL#*&59_z;XgM7-wz&F~m2!WUk2B{r+Lwp>MDL|U$b|@6In{+?0ci?E>r+Nfa&KbwskSHf^CyjK4|DUn@J>hK4d9aCGA&q86v}6dA4-&&T?w)I^r@Y> z4(J{`tOX`QoxyzYIdgnB*P8eZ8if|t4d15)j7{KVNkkDEG7o%|{seoSK|XFi6-g>?0j|BS_Fq)8TY#41 zFpfi($4J>JwIuesr@OnSR_+<9s>vW} zg9um>nwwiu#M$b?c!y;!;V`qEDcC`K4aNby;QF~APWiR|Gs(~=oY1Dd6zId9_tivG zQs{DswC0s|qe;m2RD)t){?m_r`ON|P(37cY34IVM`2^O8*t>%jHJVRb*Wr96H)f^K_qBDJHnfz+5 zB0?6IS_W0-9p(z4KgG-ZEZ!QKoS54X=dsm%4xk<>N(QeBvJfsqn*fl&aptsv3z<)l zlXyOQtR#m`%4>E!C<1676i>wxsEF>1Wb^s_uofsRr2WYuL_0T?*X32NpmQF!>!6I0LDY5HqU}zz8!Px6?Nz#w0fIRg>8hdWXc*VZj;mJ4jkmmf^%?5|f z5lhRV3!06IPstT(Hr1~uspe`ylYR-7o;Dxo)>gQkU*)oOzjzaf{lxC^#$Cy2mu=Qj zC$qyf!>e!gf$;`zz4W{^5|=`sl<%>ONtGQm;Fb6@{>{3-@-Cx&NtM&G;PRUxv8fdT zM-^9>>q&JH0t{Un-^-6}Ve;K4vtG~}Lx9oaC+8ECe3bP4fH`h^^=L0~Lz#`kh(>2N z26zt=PMVy3@5ZZyVyySSxYW+|M=hr}l1QBK+0&;nTJ0D#Wpf0S{3h|4@%7qx=M_a}E!IZ^(!XFRD~O~%XayW5hgZ9 zRe)s~u^KLCzW&})j{La4SJD=h({|rhl;f_`<@2V?X96BL_b*BLi60oFI2Rfv)5kD$ z>bt-qEK)r?YArqLJ^($h)6%x$LyxWv>t4@gl(oG;v++7}zVIc4Dsz4Uwb0ki*+`;-4ul(6Zu8Ebz=Oc2(eM%ggMo7Y#8N1=Et?Yg2ZKtt4wmr;O zZ5B7^@@6X-OZ#le9-J%=LKI)PDF|D{*E(%PVy-@m18AG`V?7EtXmIafX$p-*!y@RE z6m7&8pbB9Q6XYQ8bY#0Kp+i*l+Aie+g`9apea!oAoDZ5w2?vec`AP$KScB$R(fqT8 z-2M*A8?Wga-aDtcGsU^w{MkPTGA96xsB^ZW%AJ%eQdNZ6_dITA9*1lr+%<2q?MX)g zEcqGO=g-txdbMRVw?g_>GXwAtJW>^vSkZ;6j*1fRAx1B<3XlZUV^!!V>O0vg9fiM2kfww4z8n-~zO`{ZuJ`AXv6 z`|ghUC$E-9!;SrgT-is*(cSY3g`H=3@3(6LxZDq6%h?y*7<)|J;Wyvz`KJhN2OkPA z>#DzEW6ZdL=ggC%fK=~Pz-Kn?qLj$O=X38Og*;VN+GB(uF_zi{czA$$o>VYs;*ScK zT@+r~4_7_in+NOuCwbp+BjVz;_=M9%{M}WUBGUZ}uWTn=z4Ax}%)$=`RM4^Ccil)2 z=0Y14_!Pp7wmMCJdC*&2Hi;i|reBI=d zE~+cF?uk2Hrm`{M1~srH(VnCCr>a$=2ebX$zSmN8oftcmaE=vKWp2XAaY&n*V{ zZfr-pNtBFyW>wEudk(95J!x(Lt8IXYTC>{-j27z;Cq&~2kyroF9>=xBQPC#2!9~!i%#O||U?m^M_B|PA^b>@G){=3o2|Zi% z&B~!7dZ%cZpsCJFn-G^!K-zQw| zp%5PJTR0eqPu4-9odl_kz>_?=jiKYCu9yP3`{I;%o|)yfSuU1&Wfe11OXl%x&hPDO zuNQK&Eu$n<5D|XudRGXcLq~gVX_D-+iNr~+>G>F&`;ivZ8t!VVBFg%eX-DmQq@#JN z3?4(xUE}O6A*btEHsIXLKo#v-Z<6OSh$?_=$rEOWqgQcVTpT)~PXw(Jiu53FDy)au zc9|nNQc_k_iqaC6)oYK44D_-iRwXNw=5(#61WLT#v!d zr74BYcF~E)dr|FU=qI&K@(mB&>PI$FNnO0Yv==?vwb%Qak*c#JogK|2O%#Hiy8)@G zz_KkG_2;695PG=WsmtkQ*c)uXv|Jj3J2 zU=QWLnD8;%uitq1P(|g6=p@K#Z_?1|I6O5#`EHxbU+)6AHYe>nAJ*0oy!x(Br^?%E zFjHeMuzv`PDSz<5;mjeLKktp!!CF5pZD^L)V>%C71>AX`!@%unA7L(=DUjBKwC%X`~9l9~R<+Jdo|kcec>JFlIiKAG1{| z?=CJGV~+^q`L6`#8gg9kZl;G7E`$}{lVvFA#FYrFcA28I!R2#t&&xt5tI_nn*dV~I zKWrUlfjEBaxG>enadpQJk2P?e+SJH5-BC;JBj#nM zChY4egJ{(`T~NTkIbeQzv;%n}OwPD&MXw$8=%%xfmW%4#IiPFLu)DzonfSu4LO zLBt26;m!rLHO$#q>{Lb)E-$a`$Epwjc!fiEqf4wmwB6xYK@Ahrb0yrTd!*KV?F0D|nRsys;#T0=3uB)7- z@o9_Csh-tX9?eqw6@{VqWmKU-xx$w(p@})pK33!T)VJo{wWq4>?>!kDED`cNkFP)4 zoPL;J7GmZ!nB${JNXc%&5r~*@Ad097)VO^T#tRaR>d#)>!m7f_STdh;Mti?F=LGagcA(^WJ1ETVpn?pC#(v z^wke%NsGE&HuZn)mRlMU#qxdA?=|O)Ab= z>WBsb&xZ1DV|jH=L3&MFaAH=dTSF&**7T^KR5Eb$84$;FvX9wxhXuiSg^dS4>P7#j zOZA7ZWmX{!!uq!V-7bnC#f>!+XFB`Rb5nAzAOJf+)=2mwnllA$MvtD>MPgo_6cK2p zmIcf0(u~~XDjh1C2Qww9pFQj7%a0iHAN(`jzLB$`BXn>8hyvtz)|PEVMo<+cPgh^3 zVO|A>Td6aAjMW?>RB;+m(VD=(5O7e#guJF7El`)<+Fi0K86MhT6uYJ^V*<^O5a~y4+L%w=9;K?4nW0c$)5}J!x-sE5|7QyFq^K@UsNwm zBP!1K%)f4uQUJm@+jDxSdmFn7zOi^ck4cK0ozv~yV0Zp!J$|F$hZGT6@uTuAYDCPr z1*MkShz2M1ix~-gAD1>;BkIJTq3}dDdEYI{f49k zd-JJZpM+Rkva74B)Kc3$v$?{+p*r>QquJ+0|1D83T!&GUt1HX#AI&UG`e1!5J9E7~ zFe=xqyNcu?XuC$O#6Ue?vxtI})YeVRuSM*irTz^X$k%S_8Xfyd1SD@Jc9{72E`H6@ z-@@0P!2*T-o5OKKy>xg+QaRBdmC61!C;Q_BRlg`SYRto-iSbutEjBoJfBc z>TCoxWT^$i|2ewyGYCj1JUR##c;W?L=l@-(We`OS(vZin|3a64!{Jcj>k+zpS=ra# z*47n>OH0Miuh*9<#1hM_AGyB1K4bUl$t{#SS;EaNEjNVwBy zEGbbtsN6%f{cf`Oskh(@TU*wGh?>U`?0ns7+vI3QZ54XW;v@^k7fSziesc{gIIGL z1M%iZ79X!({}zq}kWaR~JKQItGbO`h4p)22Jv2AS5V#}vLj?9a%K+VC7D@a2`<)^J zisqUn26(j&+5#q{lsd~+!Ba|1nSXQEO${tnDqNMLDZsr35|Epq+5PMv7*d!9)9m~% zdwP00O?hxY0Guu62HLDB-z&Mno1@DW)AI_`z~6MNL~X*7q_)NJXfsjF?|?hibL0JQ z@Pv@77Fc=Y23}qnC8|fTkF~bS<1BFAf6V)vMG9A8#|4Ij#866xN+Et|>`RFe>>-N+ zFBkV|TklWMQ$7k)P|hV05?uLsYmxjj$OMVmvJ?KDuahg^kDcsi= z=_ynWcm0;J*83k{YDX=}Y>U4) z?y{#1!Tz&KTKFT{(RVp`UBEvvO;-8Me$s2E**rI=bGfsgj*-E#9BR7o>@TSNh%wf; zNZ*^+MLgX4wUj4+ccW(R2X7*%S{RJgDq-$Mu>Q9O4~L-WU7OK!^Zl~SjhyA?wJ8LB zZ0(3@gIdXNo9geWI|MAEDE~vv2;eZ|7M_hd-~UI9&?2ZGg0r-^W^zo_nd}SgT3hW3)}gI zw>O?4mJ&TbA^ZQ>`>wdAwyoc-h}aQD5NTF0ROy|d2uKs9cMzmE={*5aQL0D@JxG-< zy%SV=i}X&E-UA5`LfT#KvpwhRZ+rIn?!$e%Z~3jPHP;+{jQ^Z-ENKo(uUSmH?l=qZ ziU+wZ@heYtv#7joN-_NpyU1 zelXmMdg^jd;is8hwWJnYmAq|9`+W32XimzBg|#3i7Yz-&sYd5ln*I#8ujZ&8w_cI8 z{lUym?cf#n>rzTmUQ7WMuR}F*x6;%8Tb}ycQ6}EEg;dtgFK|erPPyAA!zzlvf!{=LtEYbG z#n9eE7iik;X4#i*sM3$Uh9B>BzleLs$iB`wFir{m8MiJXM3n)y>YkwDb0CqgEqkAh>8pGgfzTCap!#(Gd37;DHwZLX!6u4Z1_$iS zi@%AAi~-Jn76gjE%dcQ4tfstWmxU-}7JE2jxDu_my|Z$H8bYTbszxKrs$93NlK|NK zF`M2e(fSn#dfNZNKHGNu7S{vL-A>n}8jm!!#O6nAI(LOU3-sbv67}(_)YwWb!pSqY zud{9W9&TE~-8lr6z9E$g~q&2N72F;94q zWO`lplJm!Fg}=6ne~Ws-sW;vh-eCKz!vTwKt`{wOJtQ%3_qu}i@yjNB3Z@A(Ta5-> z31>yIIU!Vw^QB5%-z_B}rBY72!-ze+3HW#A>F7)IvLHU+bFO+#~UzsO)NS-!AcnE9fAQCC~8ZuA$;^`Rc zv4p%K=W=%;W?kO50c!}!$f>8x&Xa*gO+MB1r*B_dEF7(dEsnfd`OxFGu?+z+Y2LNE zhwY?)b$YqKdq0vpN3+UrPLJo?D?+M>Z=A5xNZasCgJtXsxHQLEBd_}JUQ8xW_J;>F z8%$4w9@hsbqPa{7ekgTAkB7tj+ysWw3g2g+%H#=8$D;NI4>>MLE5G49pC#*E?P7SV zncSAG_Hu1!wBp~y`afa-;nV`M*+kVJ>CqBes`1{3wrQGc)_(j3u-l2h(6laMWzX-y zO%p@m65c5nBnx2(Y{*3x~*z@UZ>1Ya&5UJq=nbontE?Z z+-@TVE;e@G2E088`_;hNW5R#?weN_=rJnfm5UbsQ;(|*Hj;+2YrRYj*KqsEo1)WPC z2o`WX{YlVOK~sWVRAXWHT)cX2b~o3MQFhU(GrPJ+e)BUJf37W>ylb5WJ$SISIV-od zKJax>0F#1?oxMXf#+O2=;W0bVIKFjlC%4qN?z#|Xe*&A^gJ|af33Lg|yA5om0rpdGE@Y_h>NeddIMb{cJ=T zX6<543QqND_B?7jdr|_jn-OuiD&*Rb@O~4ne8XzKK1bQ<9cX=*;JiOvRvw65JA*Qt z#`Si6{35v4fozqDxyCk>#?1Vw%wz`a-V_-ZU@oLI9)Cu>ycNR_MO@GbKjSi%G0oFM`-m%zjQo& zU@o9^KHR-2BPjC%o$FnX(JO^M{tf#|HvVrSu{R!0@9$OPG0PRnkG|ZQh_$u|?|zom za~d7sWSRy)$1Y=s^kd|)1y*vNn?^NYElXSLd2Egc7ty~?vHRWFnDs30SCdz4i+uFf`bQoY`^GRIy);gh6l)geETr`Y`&%x6pQ z_R_@GcfZ9`TVuVHzJ|G14cYXE!LDd3(-y|XK5Gyq3dFP0uXeZKS6 zQQfZ*Tgg}t(GC0l)xl-~`-u9X>vzxI4=Z3-9BbZM@ejFcZx9&%3B8GN7X%maj_ zrUCo8tts9b6f1Z=WVWlH*I{9~bQXp~T)shl%I^)^zQyZPK_7-b=1fm7-^E+4OkJQi z);+h0y2U)oqxIzib@xnkdmD5kVWc;qKZwfDWho!XAd8?AQo691gDx7AplD zTr_*#bWXZld}(}u|2}Y@H%n_QebJH+TGo!s9zyb&Rg%N$G{7uklto5?!0zl7*z@E4 z#5u7nrBZU6bq}nWZEU&h47Bn?f0aK*YW_6pwRN9SJE>;oJmrvpw(z}zt^zmS+?Vps{q52hSgUUAR5 z{vgY+q7rF|LtSau417@OgvuAUZgb&I;135=mb$O&FRkE;NHfy~>Qmx-z5IFWyM6lm zhwp4>%XOw9L+H6#Dd#AK(~S2icjf1b_)Sfx!FZqenbQ-^1%%~vBg%!ESs#0`@Rc3+xLyGqv7w8GM*?`HpR#g~`^~ zM$(Yw*M9$2DoRsX=N4unyyP|toz#JT14V78)b7#%Er3kz-3f$mtYU4dNH86ovPRnz z4JLk<8uUDn513aP>(~xOM|7~&%21Dz8};Er-;F8Z=v<&*xKc-y$)L?{#iCVK35l#1 z_D++);-*%%X$J9B=uMTa3qUE)E4G)G5)}im-H4(gboW+LG#tBk8P=_NmPMKe;y#kI zv!NAzKd;|pPRQ&~_mss%oj9cbf!3N)vmS(kb-4r|3!t!UM`g|JR`5l=iYz>5(ch0Z zG}-Qhx85=%+8zcp=>*KGoWH1uUeMrbK_cIfAFmdj_q>CL< z58Y9msx!vRHdZA2iF)-BtobBilo@h~b{db2!#`8rXk2I8$rnafZhoy3-@3J&egRGC z%$wVyUl6vN9=|N?u`Es?qKmXjxM3^xlqjP?qKwq5b5kO+c)V)Qa*ML1nKHbqXRehN zPDdfGms)nswe4)-;8)NRi$!w>%nhLhDHplVNu!qapvyfwlc^E{cEoX?ojT4r%x(i0 zCH-*S1#%gA4tjIeuW7}K8N==wK_klXq8u7gdtVK;AE$^s{V^l#AbY#Ycd0nG_V>b!g z%tQ*^(j7(Y`fvN2NpUwH&S-Bvz9AR%+mWNkPMp8`Z$ISDp4T@@`EcALH`nX?SE~Kj zbT>NMhi;gv-wIF8(Nv%kEi5Dvc3%u%KsV`$ z!*e}1rd(qD)JOO3(MWZmWA{|?uvZcY)@WHD?=us=NO8(L_BJ*GD}$v{)A_<7id#_sE@bD;S55UcJ(gwOS!vw)+E*mohJ?8naUA!HL?YrEl zddjCDTZXbgwHl08aNYin4l9M?^agHG&lvCQA#>GOta9uilnR%;9gPTnGe4_Se04Xe zJ)~i5a+FN*!E_oHIvO@FwcWKL{^s2(b_Uw4ya?t?SZk!(#JxipoY!B}_UoPG>>~bH zt<_wXtC(pm+O`haz`Gd2!YYRa~k?48XoxA*aNSjsaySOwbqOul~wNlzMf!%rvF$;xu&Fu zZl;=R6eeH9emU?UnfZNBTA6I}#=E*7&o~Jh&#-|9x0UZ$Dz>+X&_;Dc`N>+jIV6pq z4HMmzYE691ACHDbdunx?x^F*0n{uvXSAJUBukk!paHXMtM=vMiwZmW)xWwlzcrC|9 z^A)VR?K@*{8Y?V~va|9v-zZ=YS{nH!T0)=%|LK;1NT8{^QTp>ZhJOB@hc)8VDKp+3 zV9Uw4H*NJqURcs3FSVY?Ls|@XHQ-1aWo_ome%!o+|?)N6+42` zMx}d8YcoHu`&Q(2EHb7u%?wsGtzZf*$F~S=BB0-_Tiw45k!DNB%j*fZT;386TTCcn zA%h|^1Y(cn_viQ>;E0-yxq6`&#RJ@UKpaxoM!BM;cq2(lF(Et!ga}!{UH*M)=Px>AskErgo5>3^D4HiZ*5}pxsVj<2Vs_%$17(e@RF|Qe~0Sjc2q;Q3LtvjIKc5=a#f)hNwgry6Q^#Yea)6>_w$B-PBcctc)U~u?Re{1J}sDezW zOCI>_5Y$6W{gZXh{{8L~qP*0$_W#2({=-*(03D5VP*JK@04La5Tn zzX#LXleMw6ODk_7E-p39wFG+cvW@FjIa&4KSVYB-nq&2kb8V!ocM6x=Xh7Bs~ z*3zx8oN7A3XXH8Is>E_WT6*uEF=;Agt_dwIo-E>Yh0=t6<3mh>%@JVPG~ZLk4{=)w z<==(F8`uK4sLzQgTdq}2Fr@f!rO;jdC_}B7bMs7@XC(} z8Waoq!6(5`7Eg<^zHOx~<-1q4!pAgZiKxUFK_}zD8CC^`gvRYeZ^Ya3-=tZT(zavf zeEI;Vyv#>*7IqlmdbR0mE{$ys6cC_(w=i0P{&wBy6I}-+gJ?Ft?B*{Kdmlt~7dcB6 zF58~rm#QH=Kc48%*w`@ZW%hicuUUu9*6o4?l=YDr{hw7Rk% z+%F^d3il&Z-SoQ?w(WPBg?VI&UHl5`+8mrTw2Pu{t=oyBcE&rBHf=sKR?e5>o`Y4A zs7!s&aW+HxINSs*Vu^3_GMW8Et4reymYcGobDr!{0f{Hv@@G=n}f@{tjr3&cD9 zP;Tcn`y;e=QrDd{8)ud?vMf>Zvj(R7%LlXp($u|iGTBJxA}D{OsEuwFPNRPXd-zV6 zoaV*L4n5~=SiKuLH_N^EgqX;fWpe739jwt^A`=8^S-SxzT9irJ=ynAnalR8(a1+N^ zG`fTBK!eAqnkS0X(xDP+xV#K_NTt#v0?^rM%m$al*OlVkB=A1Tssk6pcgS*c%piOdAL6Fo(Kl{y z#74K{N=ZsP&2u$?hh#~OuTTqIQboNcXq+PeDCW)6kH&KT{J}P^B zxQ|AV1)VA!Qe90AzJ2-j#6QoxPH$-W$-Ui8g!|#NE)=nFHJjzYwO@gvXWH!Gccn+B zW=1>J!jiB|khXD`T+T!@!22{2fM0aJ1HXxk3|s>05bpU}T%h?j}<62y%3myyUF@rF1<`g+y`Afq1 z!!6o}$;~GZ#yAZ`zdQ|VjYsehV5CdYl(N|9@QYCrALcUc&GME-K##0zYDu#lb6=^v zO1-AKbw%w4Z}SnS?OZq6o!>Y>pzb^xwBCMR>nt{byRGByu)Fb_Vp4P~ z+@)End2fC_jK&RUD-d?NUzWGt6U2R^9K`83{NYK!w;83@rsy-#J&^6GgPC{=KXt$G zOq_|6e2|>_CH+M52x*w+Msju3<-`1{rj1(D(RYo`hLg@~RI4WsX>LqzHF{0)28f7K zpV_EG-`#1BUQl}DVANmx*gmugOXWHQhcJneS0`(CL&tJ{OAu`FiJ-ohiz!b%(a2E|OH#WZ~r#u)j-jJr9(EwTr%adBS!kcTR? zM&7f$@!2X)7F;9c>udyuPl9+-CbiXs=Q-((T4J@WDg!?c`4$usOJxbf0yc#DVzP>p zHCI-pg~9|CDWGu%H;Xut04hd;rE=ae)h!MRxLfx>V6yb$on3a3_-Ji?sT0;`jFQ$B365s4_3^Jhs$Y9cqmPkL2B?vIh4&#f?!kwC>UxQ6I{lFLlJ z)2YiWY0q^a$+RZ3$IngV-@d5Vobfrl`>?7ExqHNp+&GUCYZdF460wTGKcd?nuW*@2 z1z!s^-JeEhRDBX$H4fCWD;X){>RT^md?=y%D8KR1R(FebE*DKiueyO%SWuEMKdb8o zp~pXo>Z{vF!#t6k(t`R>H-`7A`0RR#GGc~(Iw>1_iwiB+Dh-h{>3qnXhbo;^B&911q4fm(cF}NuZ0I*}Z~bvj*9~sE5k8 zzPtHLQ_ty$Dd~(LcsDg%pG(|7ir$Y@)N76{ zy-Dm6*D!jXn{hZcCcFb_KeQ0hOwK$Q@9JPMTQBvYxP~f{xvE@JDP4m-o{(y%AwfP_ zTvi*!j&eA-IFPFo?m0@!JjqXX>$6(t>2Yb^Z>yrc$30~&hhk&i7^`v*J)3Zrd61us zo2wW^=tG5ORhU=}Ym9Nk_&xuXAX#RX<)#ic7W{hOF26xaiJtS5kbWb%Ah|w9A3Ud3 z;55i8*>>2?35vrbs!Fkiip838>V6M!n%#G>gClgI#tmDCygp*C8z01ltsJ@x&J@^J z*gOOYKG|KFsku$7Iq6JXfps5c)7*ZLU+m{##pAPCm3i|kRzoK7xyoTXpFhhZLlfdO zE+Z?k4r`xt({(%Q#sHYw>kGBR`zjY+FQ29gy%At=ftlKmfiG&xh5ThOA23G zA9uiw8W;MX#mc4?m)Hkf#|-nOdpOB+39?vg4p#_M(`+yTWi z8ZzIP6rct-&VM*{0u^CXy8DvRPh7i2wM}{q zE&>wL$f21E8Tzt8rM3U&y@1Vr#0ng;Biftg@$i?`bmc^N+Tb57(HF=|CrBq_;p^EUByxtrnS*Nr1}=A z?-OU5=Ck(R)mV#NZe*_JBi`DD&Ke`sv7n}ie?kiMCIfKJX7}JqWze*X)7oJzXoc2gAN7uFd*><;Is#mOc${0cu%|usxz|!o(ED?&4GH{6ez*3h!K#^YlAx?rA(xdQ7wc0C zt|y{bsY4d3%ShPiJLbT$ac8V+$b}YRV=&Q(wnsW>cE;SEup76QUeaV2Kp`6A|*{Wyl=2R3Urwl zg_!Y6pcad-HaM7U^q`bHxGNgivy{_yF}znVXU{ji*Ffv|nVBqo?Gc$u0r=n!7rA$$ z7Qm6WF$#4XC_euUGqNnAGdN13R)_|yyHwTRzN+pyCPIly5%tyV{#sFTclELax8eM* z0hiTHZeD)U^f-%-0cG|f6yxi^yT#5gOYjk>nZ}Hnb=cVi|w?1JX#~wQx?A1B_qxo0QBYL>d6w@;>C~%u~E?zkj*slI~cWb%6*&3 zh*gU7%$1*zZ=X{~#Ti&*HmwM~wNf%Cjl{THmv&`oLex}gMcuuE3MSVdZL*Zk`xVGfn#^BoA6C04x1Jl}Pv#I*E=8!X2G_8kAObEN? zm4S=P#_o-@>4&SBdER8O7(*{y&-txT-0rH_N1h7BN&D9A&_SxX{GC|sxqRQkxFff# z^h|vUq{Dm0A0w4u&NAISXD%@p;dL>rce343)tgdnDXUjDygSPVB;$n*5HnubJy1wT z=$t(KHurLz>J(3)rLy076R$?l>Jw=HEn9Ov{pgY0yk3xZ4mll{+UZp`IiG>8gFb(ZnVna>lH zqcqv2&1*a$bq7mJm|v?&HObYWd~*HvJ)VYjdC%QOJ-We#;BWkFLZf?M*}#yk7Mpv0 zN)abZ6=t;#E!;?F!mX)-9@*r1iuM_#AE%wF(AO<K7Qjz;9XM#$yTn+WPwt4Z40w?4kLVXf?@04ia<-{28 z$#EMG68@bus6>JHm0iEIRanmdY zY*d(q$I9-%Jiz45UgVb{*lwhC=c+$E^1?}zsWxo$yFd9-LrzQ6v|*Jq<51p1ETU%-Ley01SHOaOef|ux5nW zY|VKaPkj5gzCzWv@2zHB)O@SX7d^}+^D!+(kZGal*d?J4YFzsU%vS}yc2BP!F(+W4 zeej-QY5aE6&RY1Fo^q$@{hEW_uF%#Err4fny>7R+NC{{4q=eM>H)@QXSNCp(YwkzA zRA_k^8@GAQ29}hr(z&p~LQBN8UnU>O3z+wP`L+WZH*fjo8FDs^D#v9)3@pxe$7eHS zez2Zc;f?sDpc{`M?}xrLtEMdB^EygP8?(oYl!tN^L_>}1?M>@B5RI6@IICPw-_>LV zi9%ILa?wIu&(cByyCHaQ+hj+PD^Lg&Z+1u$K}7=RjTt|k(Q*q?KK0wGkogQ**Cv5| z*VGqZ*B1CVHRGKN4a;GPHpX7T7)vUp@5eWH1=9nIHP17TJ%rprRRW*s@U=Bv_$`On zLac`ea+|6Gi*Fo0dFB33vTz#R3vY$KF8CJ@OM0wb;RjPZzVA(@8n|xKB9c|^@bM!Z zV}!cTJUAj-x7f?IIqA()ZXLIeo~&q8#@Lh5X^+NC=efYJBvNAT_nL7;%7JTj;iAF(@=% z$aXrpyf*dVyAYNm{s$zT`uM5&%L`9^JKoH9WFt+IwAz|U%j}47ig$k(NdGEzcaEr2 z_rWl1bfEEGd!mKHq1Q5koG9od{KlJw)O*dLhFokF$afq}=D9aABhQQl zvEz~%b5L|7?qj#M(gj~P5vRAWtE#1U0O*Iv4sl4MwToRfSVzaWV=ua)Y+ce3*EDYi zr8xB}CwZHu2nm&tKIzRLnn4hkp>VQ%m@f&LPj4U#P4`9w?j-H3G}SQV<$L`BHRH2o z2xrvB>>m^7k%)*PSx@rem%a2~=Mlz0uUJ;dNsk{(by9NX8+)tyo0)O9I7mIDD1!5N zaIlqufT(^<&1QPDwQTHl*+GF<+N7X>kU(yp%dn%z-Q+rQ%ntQm=ESHlu+lRcL)3}n zWf)`93G(u^YWQA9;5W;i5oDU?vEc{q#K#;bBL_i|MtoYuUXA7VTSI(S!#qUcH3yJ&A@d0-UMk{dL$cqhzX{?g}*@ z5vyDJ7dIYH-UfFM@_J1;!99wqn7V=H{+pGm0h`#ob_JN3&N1_VgIKc% zcdx_Rmmf-%--d~ZQ)d?eA;daIly72xZK_mUqs+XoX04YaHzQ6@Q96aKKqI`MJYgXy z@-%;gWC>|tZ2q$b^eVN2aF`bQ=JSBRWWf>wO^H!szuF8I*`Zl%KTqu$YfRmgit9iTeXV|JmEgu4{ z`}ju@HeQoX2obBM?&p>mYYA}&WiFhsZC?4+gs?z=be9bSlN+B3$v*CAyxYe~0OmG5 z)oLiVFJ&`!uzVH~{bNz+Z29g2aQ-T;%=S}bBG|=??yIm*pNIhhaR~*7jJAQYKi-|D zpp3#CZ%H_OeIZbqfRZ1X;kN=lc*ISc+TGCyClQmjM!d~klh^j)NlS5JFkXJz>s)&d zmhgeS<=E7_AL@|-{a-z1DGk>lJM%8BzBVjym8m^tEOKCH<07rDWVH6k4;KS8wRv;# zAz7bzFa>&cy$|@B*ztGKsXO@2q+~YeH?YFj8K&g`8OR~2l)(ytN%j3?rFUr^TZ{Fw z3EWwC{o)CZq!8ydR+}9d^Pp>unc8}$U|H%@x~Z|)@{^!#o9HImett_!+#^rfwj*2t zJrmL0M|q|a_+|E6qZRp%>=7JF9*k`m4K#V94<@~#G0%ODUkZlCn{;5(#u~@RJxRO1 zsE0>_0XQ)=P_yVE;S5u?L%@y$m}^QZkb$p}$hlL2Hep%L{%wFo*lU}vqa6f4uqbP; zm*ApN2bTP6M&KT!M5zyf9Z?Fa74I8#F*S+?$Ux42Tl4>?=V>{2(e^Eyeo4BZ6U1Y) ze4nz-yO(P)q?iLs*%N|EC5kxc?yd}2R_q%==l#)5Vo?&gn9$&LmvtEc1g_RLcjy%n zvhIEDJX0SJ)}EbiUhoyKk!_OHMy!`hjFh6{s(P#yr=iw|jA(AHf|wiElf7r+nns-~ zJakpi+mHOdB|(%}JZF~Bi2VmfyK8lv=x8%DPhVr~7)=-n#*=DhXYhXT6L&)1ZQiK_ zFc#gCQ_5dbsXdsR>P^Djli*g#YLDa&v~2=)OpS|5T)Z33P#k`SdfhSQXfi|2w-Dok z?1E~DnR|6oTR1};j4IzA0W8|tB~*+RF`h3YH|O9a?mX#w_j2HdmGEt9@3_%LI9}E+ zshmcqx@6949Wgsi$Qzf9Uz!|-!1}%WE-^0Mq*thWKUmI-ud5>!ud(#NnjRl}BMdAe z8dW$wLpm;fa`!DwCFSdIQB}!I#+@u}FNo*PGJEN$K4ykZOO&!vOodJ$MOQvg?V*ZD zH48$?e#VP7kUm>ejk~HYV>R7K4_T#KB(iFEm>_5Tp(J{+FuX`dLjK`;wGKtLm&v-o z2w{CYo;*JOquf=YHGJ}fjZiLTYQ`y7{&_7DQPgTfO2aG*(VR$7$uCAUUzRTvjqmqP zkx^=jB&(_3D&Ui%%)8>_$COIrCL9Z^mQ1QA-?O~_r#k%WNAMx<*IEcIYUSkltB+{k zre1#ZvljrhX6P(ydx^;zfN+ zpXkk66x6?@`ow8zE2Rlv*)^{jG+Q$#&n_ip^@1s`Wa#2fCzW@rH{`HJC3??`B<4Wj z#Yg0t>fw{jgfeTGd17g`7HuR;i?UG?7kkqQjW=654-MAKH-N zDpf4-WwMJ#4b~UUbml6^>CA)xU9nev^&OZuH5p)updI{o+IA-~ionBzZ>vUP`qqJG z&;T3%YJc0J$By+jo|SI60Mre-r*@%c_sIo0PAwTG7W!PvnRFjcAH9+8D;$5%;0lbi zQXhHz_Q=bf(P{w}kJgg|H{+{)7n&)pLmJZO8@B48#%^scneJRPxlS^{RI{#*8)fMC zM(CiZN_py~z9cq&S)6|3dSG6g6v}<=+-7*}#a~QFE<-Z-ipjgx_n~ZIA+)mM$=Oi# zBD$+`=0+!q9xTeRL5Vx!#O*Jr(eE{8%DHv<@OY{ogyDQC`nVxjI9Qoy$)U!?d+h2fA6>#aXj z!BOW3l*UQtAmZojG#U>ZnA6TDlR2 zMQhzKYpJTFNAjl#eT!=z)%vTZm~)>RJ_t&Z9=#_2s`cG1)iB5N zMy?y@6oTYrE_EhZVN%~MCm2qJl^;{Lcfxt5{^7GeDjz*Nh?44l?0g|U@)zPcKQ0|? zNOvbTv=ZAd)$!uwMT@20q!h7xMt~h;JeNzC#~8m`jx$6hFKmdPwI|&<^K)X4>f{ck z@(%p-FjWbE=+mF~iG15UF`OKfWGreGEwld`;6slv)~lp8@Z_*%aH;_Z@|rJSetb^i zD8j2w_-=)lU4BN=o?YV~;n==G?vTJiNz0#1XxbR^X??Af4@-KSp5Je*MRo1>q4rE# zP-1(eb9W%WFs3Pm3|;Epr!lFQEGQ&gbbBOo$9y!{G)|XJyuxJb66du?>&GzDZ+rL` zf4s%+w)t5L)Sh1?|iW5d}ahYmlfIWf!^OvI^G?0QG`3RbPxuk!wN^*Gq@_Sag5 z{kj#*+iUW`+S=9+-S$~|ADXEO;~N0%&~~iEq|$cada`hg)B9>uBNE5QoTCzQ)~ka# zWx#poA7wU%yiEKdebqA>(_l<5T9pz3J!ko(jM@Pm{WL?RWpGdVjeB7}-&4 z(KlU+fA{+TKk~1{^Z%018LlQwuU&tHQoa*vNumh8GhZ(Ml)|qi^(c$_Snu#kPnP?! z6T@P`B_@-jHP@K=e>L%c4N%<>^iFLmZTjTTaQLsk{`xkrY@pW$Yd(7V?{50}*p!J} zORpEF_r3px$_BH7u9{mbtx1Xf{cL|9yTyy~{GE!KuC%v*wf(NMTU`QtIv88Cb%ZtYFOvQf$3?U=)ThoFO$!|nGE%cq0#tBVEx12TYNR*H zY2LIiP0EEC{^|SQ>iqcR(Hn{puVm*w6uA^p zr@77J2uEcb>R!h;$$>w#_ebO(J0m5s|9s{0-{^X<{V`L2CsW6Mq2^*8-^?c>f#qR; zPw_uY5{P~0?`SRa?MGga7deaOb~W3Et!d?AAYAiXEV3Eu*D;k$Wy%gM4#;w#mg~b(&AN#Mp#J$?n15 z`itR9!R?+_SN{>Lq#kA%47Cd!zCkO5FR9PHGD?p)e%8y_EH&xx$!EU!_KCISz0n`W z*rG^%CHq7Y3(v1}(SOcAL-fRn#Qd{*%IyCufhGgauUK(a?r(|tgFjVwfe7qWt8)1F z{QJWmMu3vhQACC2I*=2P81$>`J%OfhT)L(G;2zU47rLxp!aP6uk&z2{xcq!QMFb$m zM?J@WNYHkavT<3&)jHrX6LqQ7?21TJLgYQ~zoqg6?a|2fxvOSAc2Cbh4_{i?a_cr< zI?F5?p?J32B80r0#i=yJp}scvG4c)YW-0A&3G4k6@0Y#Z{@%Si7RaTYNt|%6c@l$g zBaCf&ca%ucMt-6qI2F9v{N0`Zq~o7r`SXvpk3R;;-|{Oqtm0zxS?Ed>wzIEvn&LPo zX^vhQ$ucVIxu^kV2WqOwkwU$Wuh*#NS!p(ncqm9#TzgP+;9MP}*_(Km;)twh@te7Q zsh9W>MEgqn8Nn!-!;dS&?*l#as-k|(p*pr@x(-`Cl$84F@1_)7!~OBu_snrR$V2sY;X48Wbj7eo&kGvrLFtYF9MAPqGG{50jayq^A?}8y99jK zA}pSkBFcE0(%IPkC_An#5dStP+V{?tJV6b1Fe!UwCQC`0)ce}-W=7$ES2Y0Bd4v}1 zjbH~$xP4R$U+T+(B4!8do`xn$IC%NZaLR7adSCLE@4qut3>2|q=&F^e2Bk7b*c16o zU#xZ6(Ay)fDEa8N^ak`5pv!sK5vs#hOATqQMU!1yk@bSR_ktv5qS>;V~eywxQn;f%~`B?}4*+Kk6!5<;1fA?lx70op%@wvJ*y^TBV zgSHdpZ5$}c9vFhjg~x~iO6hP~B=GpoN3Ni1ym_G5KA(fKJd4R)0|n*Wv7s_4&y7dT zCKW*6=tk#9#9jba5>ZLA*3J1XrNA)1NK0p(7pTkEPXa~y^@JQGW?gmm^_Z#AdCPY7 z2xk*1CFGWgm_y09pN!khzt`CFAKo0T5;eD;%LWO!_cw~)j(;#YJX&NhWILK|m%9HQ zrvTW&=)~p@CtN)zS+~P3FRr+O^1Wls0DbnzQ4zBY$MzphUHCA1Hyqg7mAdOs_KTLMja2M`*i*Zo@)jO#6<#KoNv>*QMJ1@$twk%DpG z&X$$weEE&C_5K~W)K)lHEtQ4WsPZ*i{tEy;lAAf-87w4!d{1M-dWn9*`qf!hdf-bx z`OG0gfJXhT-H$s4A1~BO`5n9-^a@E!5pk;gRIYCDk&8OBH(7++Z+E2(l;ScdD#3l9 zuTby<6uvT8H^i~2HKWL_TND8lx{4vk&yG$w;xS@3V9tXl&VNWb>b}$;?s_q=m91fe zp4X^)+&&~#z*5m;eU$f#=yZ9ji7#7!ae1AOyJVfu0CA=9(o$!iM4r>%I?Ss;1q-y< ziUP_@=lw1Bp$e3!la%8=B!{(nqs!S2y?Nlid+QG9e=m2D`@7V9Ki*$$W-wWjGBg8TLfR^6fq>3y( zoOAvQ&DcXvtB3>uw&Hrb94B3~AffnQskrqhi^>{E2be0Xk?J{#l4GTX7L@=MjKM#i z=Rk`5S1QSy!{R%_;mq`Fg8~McWN>I`*mqxl`!nl5)Utm8sMngZ(?b6)uKqDlhT@N$j1G2}^Ir=5pJ!AJ`;n8~l(AZi zNEG&6)0Lc@{L-5w1vU*>9H~0p2;@`$^_2h?>M3fz^hpUG0jC@ub_Vn4R4HraUYe4| z91Q6=m3Q@+F^O;}Hukk70Da}#UcAv7m00e{GK~ynXJ+dGzH(?&C-$Ex|M!<0aXhl2 zvc4jGn|ZQRuR|9kv^L_ZQ!+)z-JWNj)UXBhNz+2iw~*#5V>KeI`;v<*rvEosPcZMr z4;4p*Zbb>qbLMXFxFpObP>d42mNq(p9TAw%QZLjUD6k6mOjsUNik99{Q%eyQ(rw(+1#*3X zS=Vg{V44Jr21c!k99Pg+YedujYbAI9$E*)2Qha_sugE=uxYQ?xilEG5%_|+IIHII? zGb~8MOhT5es-^7_Ocj}y9s6ZN-;R{^^vj2Nde34Xsj2qpHCG9ei8yG^)uesb&t*!j zo!V=5PrF~Z4-!x&j^5~yXvOd)-b_n^*Uoe}f5*CNf?~~9+I;7ia}Ve33>;$-i*oN_ zN>Oj>+?N#cgkRl2xtdEKjK>Pt$|273bbDi-|GSueEy_o<$JRVvB^k%t<)s~0u*!kC z<>xl?T@lt_7DRb1QwdluZH)VungH^{sRZ+L&%tYE0W7zOr`o9A(f8E7Bz9UbS$lVV ziu;_bIoxv}>GH!9*37s_aebc<7J>5@0Ln$a=9S6U2M(vMpCd7-a(PZP|0Q);fdQAGYrFa``>E|B5F z5R*0L<&0I{wVe%j{`P5KY?gc8xwfiwA#c;hgroYi*pe(u`%`?Ns`x_PwvX?rvTTrB z3f75@js9aLu3!3U+KVRKGrdc<+H!mJ8kx{ib7=!rs(FJYi(tJR%W23MRhj+Xn)uEO z%j+=h?#=HVuap4&o15uiGi_v-d@3hwKYg3cH^65j&J?#fb7OC(>N42Q?F{QMVm!CN zg`j{LezVP@ND9E^Zx>?Su2xE z>%S9Q>M$i*oT+yz$QRf%1*(E6MMlob_}@>dEU|DH{`h1;jUPBv)6Wwt)KFx&r(4$b zPTMbk*iiKUu=k!(QD#fq@C>4;jDnIRqbNwuIXWsqKyr?fGeVP7Pmd!=R*)Pe=a$su zpb{iY&LFgaWSbnC=G*PeoaZ^~In!`vt?$RX*8J=8K#$;Vr3882-65VDxULCK1c)eAe ze&Z3bjymkmvOBD0UC1#>18x!=Qur>9R6XN${b@E9t3U@mV4|r{n2bL^$*b#QjJO(c zpJ-gDt-QI)nFRUm!_~s=@d!Ghn<@V857>3y=8hs>w`9$=hEYXZgymJSH>QZYd6(QJ z7<^FTff9_#k{{Vx7TelOY{2fA*LwM&tb89080))BA%o$x9&Ms&- zmjCd}s(>u5znrRnUcO&t>*g?r{(~*cZqsQy!VKe?>G?o|6y7m*FEfXjq)jrTzqTy@ zvOdf4()GE0QO`6l5G_+=sOe_ETC)548P>Ya=L<#PVjPRgyvsR1~zmwuK8*Mt_n`97fGagF0vRdnVkjMkfmQIPO#esW) zntL32$6aqjyRrlsu!j6{gPJ+kvsa2IjVoRZOfre0ji8{mewm*&0~`T zvOm9G;&B-7x*=%)t%hx+ZlyoZ?6Q_Ft#VeRVhA}$c)NOb%d-ea|1|lTX$jND`n?y- zDgJ_%T}g&Celzv%A*vZ|E$Y2>#9IqocVkW#!;j`>+fsvD!#X+dN30u$Y)KtYhLo7h zrawBWVj+xBoX-aCs}l5Zq8k+f#R&O(9EUyBN=7*7Id!Zfe$Q6@XU+PDg&wqld6RGt zWI+M}m{)gQ>#zQZr#`0H{Uh7aMwx6V2uc`0KS&`lfhjNU6HUWQm4s^8>2tIr)}0sY ziQ4)tI!!9V$OzlxfsZli^Gg4X>K;c`Fnx6%1om$=nef7Tq;`7>eqC+_(V@?!n6 zW2X>HwYhxTrWPhsmK`RjgJ2>?>mE^c!VVqc+j z5~2ZDX=}y|lf^uYKxOljvOTu7PgUFRdn@p+Q1Opif?7s)jsziNpHfyM2cXv^C+kKQ z+886QMAW;_+&RzT7KZI0Qef8lkh6WTc5#BxG(WwT{0utQHVoi4JxHEleTL6!4Fq&) zxow0+Sz&Y(9D0IWk5p-0K1=qM+e9fzz2v~{g?$$wHx&?Wqpi#JlKbFJrQti&H%m!= zIx;m00e&_r#r-VNeg+jnY*mi(;JNgG0EyG(N=yAecda3~|y*GcgaBq6} z^bu|#I>-Rii+Yl69z*ZCQ8Dq>y1zu@UlPnasM;y*i^c4 zng>KPN~}?laUxcZ*Z_f6Lxl@TfD;MGr9?_+yndJsLbQD~7M)*5OZ@}-J$ypNaX~o#jE6^UU`rkJ0uL3cw*u7>6d4864 zbJGN$XINj_`tU49H4p6dBVG2h*!F)!`G4^3Kcf6UqWb@*Cy(Sn8$Dp~KzokIU|Z+WP|(pUt1n)q%(Nrvv`2H`7(Icam@pfbwde0pc zI7}c~CSRVjc2Svv^h!`jcyGS|9MC~(!gHsMo`0T7t3KbdxLwyGfQX*XseVU`#`oJh z9+RdY-th`-sV$MgXgOa#v)ZJ2wHPdJ^`)Az_vWct1Sgmt8F!hy=Dws@|te)TCF@5k8t!Vk(3NR6%9^1Cb~cu8@PN#S zB112Wm!oQeP2x2%ZrsvlTPPhy6c-N!?Uin}d=!%axoR88y7^&YaJ=Ov&FRj>b*wYN zrd=GmG>{{^FEx_K=vz=1B=)&fc1UqW`0kW zSYprzShngRL?HC_53n`Pm;Xg(39y>e4Qt*1R%Qth%w<4S=5P66AkO@PNhx9Q@AzQL zy%t!f?^H_-Tf2kh`N)eA;g*E&14)Mw1EbE!`Rwt32$%eirTIh8+JlR-_$Cy_y-uA3 zc(v_sz^YR@Q@WlZW-o2xa|uxYTKkE_cYPI;cp=oOEw~w9f6Pr#GYysPs55~$nz~Zi zCP8$SYs0;4LCNfC<21-kNIDOS?FKzwn}~r=yrvki>JG~rSZw{#XQPfKG1h5o1Uf~_ zOyl=-dt;#9H=g43r3GA?$Jj0t=KTl<{T7=IDa0qk^8K9~JT3;4-Xj@2=xS9|5j=^q zJ3(;D{9v{>A{dIF|HZ+jU*bDBXCFU1Y|W$hv_db@d$cBb5oRdlxVKm;ON#Mg z{1zE`%yuWg#&rnLzTM+=?g)~7`0T7}K`{E(scA zpZy7S!J`JB^-zNKMyn3Hq*Iai^PjphH7%%0U$(DIc(m0PPu-}f7(z{)>@Ut`uW

iuoU+3&67EcaF3oXlYT~5O{NukbT1bP|{KZiqPli5P5m6G+#71CmG%-A{~$@r zh>}hu($2WX{UOF5lv)apPLcSXJ2&=-`&?gNwUm^94YX&sp+K-W@nUCY&2W(sd5AuR zc|p@^5UIULqIXO=NAQN!fqkLQctX)jh_06L{YkIR3KAtBuTE;zyIRNa`eXv8a1J|T z(&OWEW5eoGV~<3;N!t7vxb@FJrbxIJ6JNxbKZRR0c>3U9ri@!^*YaJG93-*R;%p!C zIlM5}i&@b|wrCqgz}~&d?Lrt+(b9?`UnH&ht%Xn|scBEVj~Ol7&|z4#Uq1K(pQMMP z;t9$eV(3B}_Y>i*37VaA4SUnqH)<@+XugUjjhuXDlzOo(TD`jZl{8L-vSm+~?Wv2k zjE?2-)vN&AVdBpYBzMhC77k)77e3o*adgj|>~l2|*NW}7F++D4om&ovRE>?PLCrZM zR*+L&Ou&ksBk*~gm$Rbc)bLzQ)LC#Rlgt8hG~>x|AuyoKq!;1&RZJ>a3cc0a(uiJc zyiPp=56$oB*bj?<-gWdF(aaII>q%0-Dk5#7MHm`rsm2_BB3>Ytg~Gj#4BTdTWPH1s z*S$W0JKD>l^&05x${b$BSWeJnZ7vTRIwRe*n|Bg9yFc(QjjlMYK5`<-N>9HP9va>% zw@bxk1u?GK&En8k)+w=sj=cH$alFLVOW$ZHewmVzvU}N+vHuajTZMr0TJ{xGZR0U2 zwMDRa3kwDIu51!Q%sQN)|sSrn5Gvx*=d%Uwoxb-@pLjJRhX zrwS`IdSb~y7%YC!)hY6IHU-1(TFQ~)gQ~E$EsTJodL>f`6#Cnv6(&lD%#B_s#lk}t zyuwh)8&b6Tl^fyJS9VCAz0z`)pWydfdLxUBp)T(FAP7DxpW(bV=Ia2Ies9VTvb{&t zV%4}Q$KUG|N)2zk1wT>T(a_Xvg&r1gwW71L_jin|gvdE;!`o6knT#D4f;+Vq-6o;E zMW{e1%A@41m;dDJ=g`AL0;E&Je)p;$ga3)~aT%KGT zqL^v8NDpu{{lA~8KK{KT?k=f=eLocRWNdM62K~->;bwxq<0z@el(!#UI_1f$Lj8L2 z>Ej+HRMEzJmwarmd|pbzZ4cm$tQIRTgmN(RswsBY79?n)-EVC1SZFKezL}Kn@#Ap^Ldaf9*O)Vp%oUP%J`* zN`zPN+G~*mN?B^Ctp4{KstEv=Aj(S=sW6 zih2FaZ zZHziaW`z9j>%zJDrrXQ>oDzHvi90-LZAxO0;5hA%O~w`%6y>!WEe(8`w_ncdWR-*G zb!a?E$Xkber}W~6lq&eJ;9IV0XCi-J3?;nS6{_HglZpLDSnBR?zceY{4A5mhOH8u$ zJicY?ojTmg@b`g9f0j1MCjL+uh5JnZj$)B`cWC4Cii^Wvy?TX0c!PO2l@n%)Fm(%D z#%;tdlFFuKp5xou+2P^lR!Qpnq>hJgX~59UV^ge(dp)Jogt0HRv9}MsA9$6_ihmpU zP?QvM5XA&L(o>v_yW!IE1eSVwdg%oP1;QC`a_}#9RY@n9^&4QTiE+jIq@D2}iE_1yam%&4OHGOv78cm>i~IVd?%x}LDqy}d zwk@1itdLhdX(lt}dfYWwd5vO%em~8rpHPDTNRoSCaFA3XhCN8z*snr|F{2XyqJajC zKPR*LPB+h~d!~@~tHnb8*gNs$ZW&vC7S+nb7# zKYIay#R_KTW&@~HhqHFIbhO6JZgs3I$1@|d4gaEIqIAOjeuKybQk>&q$6(>M17l3Q zR!S6XS?EqI;#cpQ$u}aYGJ%zsDq;sQWy>a9(D)JO=HOcvH5Fd!x(%+6TBuq`u-nwM zH1b}`x>=GFC|tzPzAgv3Kkm=cO=i<02MLU}$i9A>E@>goO(>c&X!Q3hudHkX zMMlUzS^BWy;bChVo1lZOMOi;TKMif|-r-^!P~Nu4@)D2t+_`hkAfoqmc{#YJrw7!{ z+ce~drgeFx*PN2=v$)G`2R53$pT0@Raqao zS5x6Uzd%Jz4M=<~&Mjox4=gO^Dc4;Ra7h7n*O<5q&ha6iMPnFJv=ZgHPTS@08lg!8 zk4!z;^$aQ(u*s?~UF>>2@nZQbk%Xq#czAs3o5HvgYrhMSiX(V-UNHUe{we1jt3A21 zfaJUue|(lq$?HU*&a1<6F{db^?<=dw!obaUC*n*hdY*}aTiuZ{U+OIST>bLJF2#1_ zZQQ5j`*!@Z#Q$2*f0p=9^W5zlmAICk1iq&uL} zb;cWnsi>ACYWuNewz!n!-O{GQD_!4Zf6LZNU4%c6@Y{GSBF4eKT{MBV? zh~LApys|>(@~73YTB#I2RJ65|;f(_AB9l{-zUih2N)S&1!6F5oNQY|IDNXI>;CTfQ zxtU`3BcmJ;Z7k#Y%vd4(w~nlAGT1D0ibIl zgWo?Hxe&)ca_Sn;z#^}9(Fl*y66z-uaRRKK0kFC%th__d&%{cpUv3|X0snwpxw z;aI6BJ;8c_IL|fK#=zpQ6UW7~*z}(ADc|wS-Ag~h;v;Wd2>a7I;nEs$Ea2hz$X%MV z%p#JQIF2Rg$)}5Fc{u+1-3KPwjZlUfBHD0J%9j$m!j@!j@Mi2m$QS;tpg zhwewgqZ(3`jyyb8!(6B4V~bMDuM(Ug#xQ?N1p$k9a9VxgD=Ik>_E*o6-e`(H-yz7owLH95^7I~L(yvV)7WI%Y(aid(u#umG{-jHIL03|| z%OTu47ar0nSQww{+14|~BPi(pz9cA05|>>3DLYBg(qk7ay?u_-ogF{0T->O`vLXq2e`#5RtuNhSSoH1q;fW+4$(!9WAV6G!%3CZ*~!)CJEtR925$=G_*8Z+az6#fkT(lKV2sB z?GUks+EzAx@oXwEJ+I{Euu&=NbbQ6)mrcdtHmejr9-=8w%g^svhe@!u&XqbS4cf4B zp}cV;RJQTtLFQUgKe@I-Ybpf=k)9JXOOZxOxXS0MGWt^mvJ={ayf>F#TJDG z2L~rLWY>t=CM+ud^Z|2j3bo_p%dEv=oZv9vdVf{wDR;xsC=sK>tn1RD0#mUV=0hdD zpSb(_>WhNnNsxIFKpE_Yf|~~9e7CJ6;{uHW0s_lK>D%w$9x?EH2#`h?g|U|a2GdE@ z0vhTEnmybtWHie_HAkcdg;9^RpuLpFw!$km_7{`77io3H=nfb5=7Kwi7uUu{ych_3 z#pyM5kKo-Y5=KVTn|khryv6kkv^>1x*Ly8z9| zPtbXHN8*T$$dB#l15~!K1M^l&)SI2V%w?>c{#ssZKYJxLQS{P-EDh& zyOnyvBZWAQl8!1o!gsqNx1gXKu8$~}kUW_uFjGKC44J=60!cB@p=ToScK-@cLD1MPn#nnxqy&3|}! zq12tI%>?mYY0vpseo?znhxb~H{0v1UXXwJg)+U)76Jb|UyM?2lpX0YL1HJQXOYFvo z+Y18SVP3JtN<(b;*_xkS-%vh@x3SQo#O)AYX2hNq)HOv|BuYhoyy0$9(&nd1x-cj@ z!e25VAYil8e{+)Xl@W97GlJU3m%3nN@CY|wFl`Sz_T)#m@85Ar6F=Z$0O)^MWtgpB-v|mj+2hwSL7`M6l%1Wsd@vP3^ zfc;Md>%mxszpsbL(zHO#4=uC*=6WoUXxf(^6IA2Nz-@@f90)Ru*$P?`xDD;y6lvWH zmi@MDEOKi4`Xp^mSISKfB0WcTwA=2_pp6iv9WYBI1y$(XkH5`5BQh}}2S9qZQ z2)(Yh_0&~Y|H8aH9`CXt8_RUx6`z@ib@t}1X|b7P2eAraTRYpiKq-t(-QoB!3Ej-V zh|l}I?K?$s1Jmxy?kYAGNoCIR1%s2&nWJ>52?JtdlvY`4%NKi8Tbcc5F?F;#;-7#C zyvt3OAU{NNa)4Lhc1phVBB^3py1~&=W$KA7`fGb?N`HM{UkO_0a=nH|SI~1pJyY$r z6p~^Ew%*JkYZ)0CW#NMQ%_~-qaW#>H?>@sy9dNBB&)y(H@+af zpT>TU4^rw7Bxr=-O!2~Gc`h^eF5ZhtX=w1Y=p5b;q!*`Dm>^%g8NuH?Vz?FV>9tjW zYF6)Uh83@i<8M|3HjL{7bQC6ztksA6~8}##> zGCY7Ubg*%SWthn#8~u*@M$0Ps;9Jx)n7~nlgEqU)rzGPt>)Bs(JMlPs8}}crcH?of zc)Cbh%)Vdn+}Ux^m9}z1)c4QYhh*kt@DXk#83bGiL?+Jov#Y&jeh#CA4R`$+KvN*o@S2U;i8b8 z>4Us7@<7wVLOj}mWcvgC$!!Ao$6xtl3-zvfShBqdjTI=+ZUxAPEyWKr@42~Twe_Jh zw!%uEW{Ql(6XGJTFYfp4*rS)(gs@n(^_frGORF5911(orw!Q-NjzY zz9)goEfkH1VK+M8a}$=Obp>wJ`j{4^YwWp=I0P>md)@&mHgHY|x)YmTQ?vP{Eg5x0 zt2;s8g@`-sAHnGRuVt-_G?T?TeZ0@#HdD7mON~_Non6%>S_oACx(NEFd_)xGOJGWa zdaYdIrQj^n9*Yhr9ddSW)I3ML<^u%?1l?7?A@PK|FzB-1pO^&)u6g~UDaqamjEp-ZQt;) z;5-eVCjEeTQinMNrLmXnTfF#Go4vGSpq(9eiLFXHUZRjwIOr>s1X{`d+nqU#f8{+duY-GaZDAA2w?W;5Ibh zahvoKHn=?vs|C623pQI(IYbIzYZo4XRg3F@aN;W$ejK-G)y$-lz

}o! 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 literal 0 HcmV?d00001 diff --git a/pages/userguide/worksheets.md b/pages/userguide/worksheets.md index 0f0bef047..c756a9d72 100644 --- a/pages/userguide/worksheets.md +++ b/pages/userguide/worksheets.md @@ -54,7 +54,7 @@ coming from Athena will pop-up automatically. ![worksheets](img/worksheets/ws_joins.png#zoom#shadow) -If you want to save the current query for later or for other users, click on the **save** icon (between the edit and the +If you want to save the current query for later or for other users, click on the **save** icon (next to the edit and the delete buttons). > **✅ More than just SELECT** @@ -65,4 +65,59 @@ delete buttons). > for more information on AWS Athena SQL syntax. +## 🆕 **Experimental Features: GenAI Powered Worksheets** + +As part of data.all >= v2.7 we introduced support for generative AI powered worksheet features. These features include both: + +1. Natural Language Querying (NLQ) of Structured Data +2. Text Document Analysis of Unstructured Data + +These features are optionally enabled/disabled via feature flags specified in data.all's configuration. + +More details on how to use each of these features are below. + +### Natural Language Querying (NLQ) of Structured Data + +data.all offers a NLQ feature to significantly reduce the barrier to entry for non-technical business users who need to quickly and easily query data to make informed decisions. + +Given a prompt and a selection of tables, data.all NLQ feature will generate the corresponding SQL statement that data.all users can execute against the data they have access to in data.all's Worksheets module. + +To start generating SQL, data.all users can select the TextToSQL Tab in the Worksheets View: + +![worksheets_nlq](img/worksheets/ws_text_to_sql.png#zoom#shadow) + +Users select the Worksheet environment, database and one or more tables where the data of interest is stored. Then they introduce a prompt describing the operation they want to perform. For example, they could type something like "Give me the top 3 clients in the last 10 months". Once they send the request to generate the query, data.all will invoke Claude 3.5 Sonnet model using Amazon Bedrock to generate a response. + +To enrich the context of the genAI request, data.all fetches the Glue metadata of the tables and database and passes it to the LLM. Access to Glue is limited to the tables the user has access to, in other words, we control that only accessible glue tables are fetched. + +In addition, there are built in guardrails to avoid mutating SQL statements (i.e. WRITE, UPSERT, DELETE, etc.). + +data.all Admins can additionally limit the number of invocations run against these LLMs by specifying a `max_count_per_day` feature flag in data.all's configuration (please reference data.all's Deployment Guide for more information). + + +### Text Document Analysis of Unstructured Data + +For unstructured text documents, data.all offers a feature to start analyzing your data using natural language. + +Given a prompt and a selected text docuemnt in a S3 Dataset, data.all's Document Analyzer feature will generate a response displayed in the data.all Worksheet Editor. + +> **⚠️ Limitations of Document Analysis** +> +> Currently data.all's Worksheet Document Analyzer is limited only to `.txt` and `.pdf` file extensions. Additionally, the feature is limited only to +> text documents which are explicitly owned by one of the user's teams (documents that are given access via data.all shares are not yet supported). + + +To start analyzing your text documents, data.all users can select the Document Analyzer Tab in the Worksheets View: + +![worksheets_unstructured](img/worksheets/ws_analyze_txt_doc.png#zoom#shadow) + +Users select the Worksheet environment, S3 dataset bucket and S3 object key (.txt or .pdf file) where the data of interest is stored. Then they introduce a prompt describing the information they want from the text document. For example, they could type something like "Give me the most prevalent 3 themes across this document". Once they send the request, data.all will invoke Claude 3.5 Sonnet model using Amazon Bedrock to generate a response. + +data.all fetches the content of the S3 Object and passes it to the LLM along with the user prompt. Access to S3 is limited to the buckets the user owns. + +There are built in guardrails to reduce hallucinations by ensuring the selected S3 Object contains information pertaining to the user's prompt. + +data.all Admins can additionally limit the number of invocations run against these LLMs by specifying a `max_count_per_day` feature flag in data.all's configuration (please reference data.all's Deployment Guide for more information). + +