From 070818daedea0fc629a59144051b8c5eb3fcf0af Mon Sep 17 00:00:00 2001 From: Drakopoulos Date: Wed, 25 Jul 2018 15:07:32 +0100 Subject: [PATCH] third commit --- .DS_Store | Bin 6148 -> 8196 bytes README.md | 454 +--------------------------- images/ADFS.png | Bin 0 -> 195701 bytes prerequisites.yaml | 695 ------------------------------------------- prerequisitesv2.yaml | 182 ----------- prerequisitesv3.yaml | 273 ----------------- 6 files changed, 13 insertions(+), 1591 deletions(-) create mode 100644 images/ADFS.png delete mode 100755 prerequisites.yaml delete mode 100644 prerequisitesv2.yaml delete mode 100644 prerequisitesv3.yaml diff --git a/.DS_Store b/.DS_Store index eb4a248070e8da49440828df0bf532beac0e6f49..bbe6bc0364607ddf3b7c06f1b2bcf44b98a455a3 100644 GIT binary patch literal 8196 zcmeHMOKjXk824+kn(&Di$jVBI0h5j{GUm$#F1=7{liwcD4@Liqfjpe-VdhRU=F0^xc{m^s2lRVJ|AvBI?-UpI+yP@; z24#RifWSrs*x6qUy>w@HDX+f2XA*NxI$_!g^7uTFHVwyZYPy1X`2~eV+XPV*#8Tmb zp&5H_$W`5})2(JEy(dG{6MlWzw#}8gniw_oxwu@>V_U9jSbAoa`_!0WY4%*VowYQ_ zYiCe(XDHU|C@w3xT(q+}5^iaY&PT$zj^@rtxV5EieqInN>!NoLoJyTNmwROX{40Eh z=d9V(Oz<`whwZmD3)|WRLt?FE^G1}46 z5eYXow>C4tqHUdRk#J{6%Lc?QvH8+`Hbd-nGOn4ZIUOBJ+Nrb`#*4LfXSRpaCNHxL z#MKqrNX5#La;ZNq@0cYv98bH3Z8@WQ#vvJ(%N*ja|b z)>K`+%QT0KbGkF`>StV5JL%XNx5smg%W~GyPw3=l%<8@5?Tj1L9CMRVTrAnSdv8rc zV{`lAuBFoLWpeorNjgb{wOr#NL(h!N8JasYp*l(3(hO^QY}Rm$gsBf(YDzCJxFCvN z)UHZJ8P6t+(^+}#4myJSVTwNKrQrfxglFM7cn#iy_u(>p44=Xm@D+Rw-@y0qBm4wE!!Pg~{0@J> zpNJ@7F_xf$x8Xjl#X8)NE!c`}*p7#>5079!4&ZSd#|fOoDbz597M{io=I{x85}(4S z@nw7i-@!$E7vIAV@IyYXyk)iy_~Y~ienOS?Z1gv=ys>MsG1ONf9lbGZ{H}yk@Ro|5 zdur+rG~IRZ-j&r`w_s~HwVFsCcQ`pb(kzq0W9$+UwQBdRQfP$eq@UT0-SRd@9KrM6 z8xDnJ#u)x6)`ldawCLFyYRQ)8TOy5Q$tU)5TeMjU$%RBz9@o|`Npb-(nOhGXCTkIK zR#>X4RCY;SQjf@9CmFUxx;J4FJ|e<>3s>O>BHOP-w7=kQEW|Rb#44=D5bnWxyd4i< z1RIHF9oUHnvB#s@Q5?h*IE*7Wig8piNp#bRZfT;MgD%eFqxcv;ju-GEK7-HW3-}_w zgqM(QfRt7!*Uz7qOMIJZYbckpdwaF4n*_LWzO~5nTW8moT8* zDC{>t-{#-{x886N5g-sC@V`L-3wnooyJ@(~r|SBVv%7Yf@+rzJF~0>ay$~vx3)6eo nagr;47*aj#+hV?4;F2tq{`C(5O--wRjRxnx9-RL- -Step-by-step instructions (expand for details)

- -1. Choose on **Services** then select **Lambda** in the Compute section. - -1. Choose **Create function**. - -1. Click the **Author from scratch** button at the top of the blueprint list. - -1. Enter **ListUnicornRides** in the **Name** field. - -1. Select **wildrydes/WildRydesLambda** from the **Existing Role** dropdown. - - ![Define handler and role screenshot](../images/lambda-handler-and-role.png) - -1. Click **Create function**. - -1. Select **Node.js 6.10** for the **Runtime**. - -1. Copy and paste the code from [listUnicornRides.js](./listUnicornRides.js?raw=1) into the code entry area. - - ![Create Lambda function screenshot](../images/create-list-rides-function.png) - -1. Leave the default of **index.handler** for the **Handler** field. - -1. Click **Save** at the top of the page. - -

- -### 2. Create the new custom authorizer Lambda function - -#### Background -Amazon API Gateway can leverage an AWS Lambda function to make authorization decisions. In order to support bearer tokens, such as JWT tokens, you can use custom authorizers. When configured with a custom authorizer, API Gateway invokes a Lambda function with the request token and context. The Lambda custom authorizer must return a policy that API Gateway can use to make the authorization decision for the entire API, not just the specific method that was called. To make the creation of custom authorizers easier, we have created JavaScript and Python blueprints that you can select from the Lambda console. These blueprints contain a utility object that simplifies policy generation. - -You can also return a set of key/value pairs that are appended to the request context values. The code for our custom authorizer is in the `ListUnicornAuthorizer` folder, open the folder and take a look at the `index.js` file to get an idea of how our custom authorizer works. To authorize access to our new list rides API we rely on a custom scope called `UnicornManager/unicorn` - this scope is automatically added to client tokens produced by the Unicorn Manager application. - -#### High-Level Instructions -Use the AWS Lambda console to create a new Lambda function called **ListUnicornAuthorizer** that will process incoming JWT bearer tokens. Upload the provided [ListUnicornAuthorizer.zip](./ListUnicornAuthorizer.zip) as the function code. The authorizer Lambda function relies on an environment variable called **`USER_POOL_ID`**, define this in the Lambda console and set the value of the WildRydes **Pool Id** from the Cognito console. - -Make sure to configure your function to use the **WildRydesLambda** IAM role you created in module 2 of this workshop. - -
-Step-by-step instructions (expand for details)

- -1. Choose on **Services** then select **Lambda** in the Compute section. - -1. Choose **Create function**. - -1. Click the **Author from scratch** button at the top of the blueprint list. - -1. Enter **ListUnicornAuthorizer** in the **Name** field. - -1. Select **wildrydes/WildRydesLambda** from the **Existing Role** dropdown. - -1. Click **Create function**. - -1. Change the **Code entry type** to **Upload a .ZIP file**. - -1. Select **Node.js 6.10** for the **Runtime**. - -1. Leave the default of **index.handler** for the **Handler** field. - -1. Click the **Upload** button and select the [ListUnicornAuthorizer.zip](./ListUnicornAuthorizer.zip) file in the current module folder. - -1. Expand the **Environment variables** section and declare a new variable called **USER_POOL_ID**. The value for the variable is the **Pool Id** for the WildRydes user pool, you can find the value in the Cognito console. - - ![Create Lambda function screenshot](../images/create-list-rides-authorizer-function.png) - - -1. Click **Save** at the top of the page. - -

- -### 3. Configure the new custom authorizer - -#### Background -Amazon API Gateway can leverage AWS Lambda functions to make authorization decision. This enables you to customize the business logic behind the scenes. API Gateway supports two type of custom authorizers: **Token authorizers** and **Request authorizers**. You can use Token authorizers when your authorization decision is purely based on the client's bearer token. Request authorizers give your Lambda function access to all of the request information except for the body. - -API Gateway can also receive context information from the custom authorizer and pass them to the backend service. In our application, the custom authorizer includes the `unicorn` property in the request context if the `UnicornManager` scope [is present in the token](./ListUnicornAuthorizer/index.js#L109). - -#### High-level Instructions -Open the API Gateway console and create a new authorizer in the **WildRydes** API we created in module #4. The authorizer should use the **ListUnicornAuthorizer** function we created in the previous step. You should configure the new authorizer as a **Token authorizer** and the token source should be the **Authorization** header. - -
-Step-by-step instructions (expand for details)

- -1. Open the **Services** menu and select **API Gateway** in the Application Services section. - -1. Open the **WildRydes** API in the left menu and select the **Authorizers** page. - - ![Open custom authorizers](../images/open-wild-rydes-authorizers.png) - -1. Click the button to **Create New Authorizer** at the top of the page. - -1. Enter **ListUnicornAuthorizer** as the **Name** and **Lambda** as the **Type**. - -1. Using the **Lambda Function** field, select your region and enter the **ListUnicornAuthorizer** Lambda function name. - -1. Leave the **Lambda Execution Role** field blank. Configured this way, the API Gateway console automatically sets the permissions on the Lambda function to allow the invocation. The console will ask you to confirm this action as you save the new authorizer settings. - -1. Select **Token** as the **Lambda Event Payload** and enter **Authorization** as the **Token Source**. - -1. Leave the default values in the **Authorization Caching** settings and click **Create** - - ![Create Custom Token Authorizer](../images/create-custom-token-authorizer.png) - -1. The API Gateway console asks you to confirm the new permissions on the Lambda function. Click **Grant & Create**. - -

- -### 4. Create the new API Gateway method - -#### Background -Following REST conventions, you will use a `GET` method on the `/ride` resource to list the rides. In the same fashion, if we wanted to extract data for a specific ride, we would create a new resource called `/ride/{rideId}` and use a `GET` method under this resource to extract the data for a specific ride. Take a look at the [REST Resource Naming Guide](https://restfulapi.net/resource-naming/). - -#### High-Level Instructions -In the API Gateway console, open the `WildRydes` API we created in module #4 and add a new **GET** method to the `/ride` resource. The method integration should be a **Lambda Proxy** integration to the **ListUnicornRides** function we created in step #1 of this module. Configure the new method to use the **ListUnicornAuthorizer** we created in the previous step for authorization. Once you have made the changes to the API resources, deploy the new configuration to the existing **prod** stage. - -
-Step-by-step instructions (expand for details)

- -1. Open the **Services** menu and select **API Gateway** in the Application Services section. - -1. Open the **WildRydes** API and, from the **Resources** page, select the `/ride` resource. - -1. Using the **Actions** dropdown menu in the **Resources** pane, select **Create Method**. - -1. Configure the new method as a **GET** and confirm the settings with the small checkmark button next to the dropdown. - -1. In the method integration settings screen, select **Lambda Function** as the **Integration Type**, check the **Use Lambda Proxy Integration** checkbox, then select your Lambda region and use **ListUnicornRides** (careful: NOT **ListUnicornAuthorizer**) as the function name. - - ![Configure List Rides integration](../images/list-rides-api-integration.png) - -1. Click **Save** and confirm the new permissions on the Lambda function by clicking **Ok** in the modal window. - -1. In the **Method Execution** screen, open the **Method Request** pane. - -1. Click on the pencil icon next to the **Authorization** settings to change the value and select the **ListUnicornAuthorizer** from the dropdown. - - ![Configure Custom Authorizer](../images/select-list-custom-authorizer.png) - -1. Click the checkmark icon next to the dropdown to save your changes. - -1. Using the **Actions** dropdown in the **Resources** pane, select **Deploy API**. - -1. In the deployment modal window, select the **prod** stage from the **Deployment stage** dropdown and then click **Deploy**. - -

- -### 5. Create S3 bucket for static website - -#### Background -Our new partner website, called Unicorn Manager, is also a static application hosted on Amazon S3. You can define who can access the content in your S3 buckets using a bucket policy. Bucket policies are JSON documents that specify what principals are allowed to execute various actions against the objects in your bucket. - -By default objects in an S3 bucket are available via URLs with the structure http://<Regional-S3-prefix>.amazonaws.com//. In order to serve assets from the root URL (e.g. /index.html), you'll need to enable website hosting on the bucket. This will make your objects available at the AWS Region-specific website endpoint of the bucket: .s3-website-.amazonaws.com - -Because our application interacts with Cognito via the OAuth 2.0 implicit flow, which requires a redirect, we need our website to use HTTPS. To have an HTTPS endpoint for an S3 static website, we can use a [CloudFront distribution](https://aws.amazon.com/cloudfront/). - -#### High-Level Instructions -Use the console or AWS CLI to create an Amazon S3 bucket. Keep in mind that your bucket's name must be globally unique across all regions and customers. We recommend using a name like `unicornmanager-firstname-lastname`. If you get an error that your bucket name already exists, try adding additional numbers or characters until you find an unused name. - -You will need to add a bucket policy to your new Amazon S3 bucket to let anonymous users view your site. By default your bucket will only be accessible by authenticated users with access to your AWS account. See [this example](http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-2) of a policy that will grant read only access to anonymous users. This example policy allows anyone on the Internet to view your content. The easiest way to update a bucket policy is to use the console. Select the bucket, choose the permission tab and then select Bucket Policy. - -Using the console, enable static website hosting. You can do this on the Properties tab after you've selected the bucket. Set `index.html` as the index document, and leave the error document blank. See the documentation on [configuring a bucket for static website hosting](https://docs.aws.amazon.com/AmazonS3/latest/dev/HowDoIWebsiteConfiguration.html) for more details. - -Using the CloudFront console, create a new Distribution for web content specifying the S3 static website URL as the origin domain and / as the path. Make sure that the distribution only accepts HTTPS requests and HTTP requests are redirected to the HTTPS url. - -
-Step-by-step instructions (expand for details)

- -1. In the AWS Management Console choose **Services** then select **S3** under Storage. - -1. Choose **+ Create Bucket** - -1. Provide a globally unique name for your bucket such as `unicornmanager-firstname-lastname`. - -1. Select the Region you've chosen to use for this workshop from the dropdown. - -1. Choose **Create** in the lower left of the dialog without selecting a bucket to copy settings from. - - ![Create bucket screenshot](../images/create-unicornmanager-bucket.png) - -1. Open the bucket you just created. - -1. Choose the **Permissions** tab, then click the **Bucket Policy** button. - -1. Enter the following policy document into the bucket policy editor replacing `[YOUR_BUCKET_NAME]` with the name of the bucket you created in section 1: - - ```json - { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": "*", - "Action": "s3:GetObject", - "Resource": "arn:aws:s3:::[YOUR_BUCKET_NAME]/*" - } - ] - } - ``` - - ![Update bucket policy screenshot](../images/update-bucket-policy.png) - -1. Choose **Save** to apply the new policy. You will see a warning indicating `This bucket has public access`. This is expected. - -1. Next, choose the **Properties** tab. - -1. Choose the **Static website hosting** card. - -1. Select **Use this bucket to host a website** and enter `index.html` for the Index document. Leave the other fields blank. - -1. Note the **Endpoint** URL at the top of the dialog before choosing **Save**. - -1. Click **Save** to save your changes. - - ![Enable website hosting screenshot](../images/enable-website-hosting-unicornmanager.png) - -1. Next, open the **CloudFront** console under the **Networking & Content Delivery**. - -1. In the **CloudFront Distributions** page, click **Create Distribution**. - -1. For the delivery method, under **Web** section, click **Get Started**. - -1. In the **Origin Domain Name** field, paste the URL for the S3 static website we just created and **/** as the origin path. **Do not select the bucket from dropdown list, paste the full website url including the http:// prefix. The origin type should be `custom`, not `s3`**. - -1. In the **Viewer Protocol Policy** make sure that **Redirect HTTP to HTTPS** is selected. - - ![Create CloudFront distribution](../images/create-cloudfront-distribution.png) - -1. Under **Distrubution Settings** for **Price Class**, select **Use Only US, Canada and Europe**. - -1. Click **Create Distribution** at the bottom of the page. - -1. Creating a global distribution can take some time. Let CloudFront do its work in the background and move on the next step. We will come back to get the distribution endpoint at a later step. - -

- -### 6. Declare a new client application - -#### Background -Amazon Cognito User Pools allows you to declare multiple client applications that can interact with your pool. This includes both applications you own and apps by third party developers. Each application is identified by an application id and client secret. Cognito User Pools also offers a hosted login UI that supports the most common user operations such as registration, login, reset passwords, and MFA. You can also customize the look and feel of the hosted UI. - -#### High-Level Instructions -Using the Cognito console, add a new client application called **UnicornManager**. Because the client application is a static website hosted on S3 and written in JavaScript, we do **not** need a client secret. Next, in the App Integration section of the Cognito console, configure a domain name prefix for your hosted login UI. We called this **WildRydes-<username>**. - -
-Step-by-step instructions (expand for details)

- -1. In the AWS Management Console choose **Services** then select **Cognito** under Mobile. - -1. In the intro page, click **Manage your User Pools** an open the **WildRydes** pool. - -1. Open the **App clients** from the **General settings** menu on the left. - -1. Click **Add another app client**. - -1. Enter **UnicornManager** as the **App client name** and uncheck the **Generate client secret** checkbox. - - ![Create bucket screenshot](../images/create-cognito-app-client.png) - -1. Click **Create app client**. - -1. Open the **Domain name** configuration page. - -1. Specify a unique custom domain name, for example **wildrydes-sapessi**. - -1. Make sure that the domain name is available and then click **Save changes**. -

- -### 7. Create the Unicorns scope in the Cognito User Pool - -#### Background -Amazon Cognito User Pools lets you declare custom resource servers. Custom resource servers have a unique identifier - normally the server uri - and can declare custom scopes. You can allow custom applications to request scopes in your user pools. When users authenticate with these applications, the Cognito hosted UI takes care of authenticating the user and authorizing the action. Custom claims are automatically added to the JWT access token. - -#### High-Level Instructions -Using the Cognito console, open the **WildRydes** User Pool and create a new custom resource server called **UnicornServer**. The **UnicornServer** should use **UnicornManager** as the **Identifier** and allow the **unicorn** scope. - -
-Step-by-step instructions (expand for details)

- -1. Open the **Services** menu and select **Cognito** in the Mobile section. - -1. In the main screen, select **Manage your User Pools**. - -1. Open the **WildRydes** pool and select **Resource Servers** under **App integration**. - - ![Open resource servers](../images/cognito-resource-servers-menu.png) - -1. In the resource servers screen, click **Add a resource server**. - -1. Specify **UnicornServer** as the **Name**. - -1. Use **UnicornManager** as the **Identifier** for the custom resource server. - -1. In the **Scopes** section, declare a new scope called **unicorn**. I've used "**Allow listing of rides for unicorns**" as the description. - - ![Configure Cognito Resource Server](../images/configure-cognito-resource-server.png) - -1. Click **Save changes** to create your new custom resource server. -

- -### 8. Configure the new app client for OAuth - -#### Background -Amazon Cognito User Pools supports the authorization code grant, implicit, and client credentials grants. Third party developers can load the Cognito hosted UI with their application ID and request any of the enabled flows. Cognito User Pools also exposes a set of client and server/admin APIs that you can use to build custom authentication flows. As a result of a successful authentication Cognito produces and OpenID Connect-compatible identity token and a JWT access token. The access token includes the custom scopes you declared for the application. - -In our example, we will use the implicit flow for the sake of simplicity. Implicit grant flows are mostly used by mobile applications. For web applications, you would normally require third party developers to host their own backend service and use the authorization code grant flow. - -#### High-Level Instructions -Open the **App client settings** and configure the **UnicornManager** app to use **Cognito User Pool** as an identity provider and allow the **Implicit grant** flow. Make sure the application has access to the **custom scope** we created in step #7. As a callback URL, use the CloudFront distribution endpoint we created in step #5. The callback url will look like this: `https://xxxxxxxxxxx.cloudfront.net`. - -
-Step-by-step instructions (expand for details)

- -1. In the AWS Management Console choose **Services** then select **Cognito** under Mobile. - -1. In the intro page, click **Manage your User Pools** an open the **WildRydes** pool. - -1. Open the **App clients settings** from the **App integration** menu on the left. This page lists both the app clients declared for your user pool. Make sure you make the following changes only to the **UnicornManager** client app. - -1. Select **Cognito User Pool** as an identity provider for the app client. - -1. Enable the **Implicit grant** OAuth flow and allow the **UnicornManager/unicorn** custom scope. - -1. In the **Callback** and **Signout** URLs, specify the HTTPS CloudFront distribution endpoint adding **https://** at the beginning and **/** at the end: - 1. You can find the distribution endpoint in the **CloudFront** console. - 1. Select the distribution we created in step #5. - 1. In the **General** tab, copy the value for **Domain name**. - - ![Create bucket screenshot](../images/configure-cognito-app-client.png) - -1. Click **Save changes**. - -

- -### 9. Configure and upload the Unicorn Manager application to S3 - -#### Background -The last step is to configure the client code with the new Cognito application id and upload to our S3 bucket. - -#### High-Level Instructions -Open the `config.js` file in the **UnicornManager** folder, replace the `userPoolClientId` with the new UnicornManager application id from Cognito, set the region and the domain prefix we configured in step #6. Finally, copy the **WildRydesApiInvokeUrl** value from the prerequisites CloudFormation stack output into the **invokeUrl** property of the config file. Save and close the file. - -Upload the content of the **UnicornManager** folder to the root of your S3 bucket. You can use the AWS Management Console (requires Google Chrome browser) or the AWS CLI to complete this step. If you already have the AWS CLI installed and configured on your local machine, we recommend using that method. Otherwise, use the console if you have the latest version of Google Chrome installed. - -
-CLI step-by-step instructions (expand for details)

-1. With a file manager, navigate to the folder where the lab content is located and open the **UnicornManager** directory from the **WebApplication/5_OAuth/** folder. - -1. Open a terminal window and navigate to the folder where the material for this workshop is located. Navigate to the `WebApplication/5_OAuth/UnicornManager` folder. - -1. Open the **js** folder. - -1. Using your preferred text editor, open the **config.js** file. - -1. From the Cognito User Pools console, copy the client app id for the **UnicornManager** application as the value of the **userPoolClientId** property. You can find the application id in the **App clients** menu of the Cognito console. - -1. Change the value of the **region** property to the region you are using for this workshop. For example, I'm using **us-east-2**. - -1. Still in the Cognito User Pools console, open the **Domain name** page and copy the custom prefix in the value for the **authDomainPrefix** property. In our sample, this was `wildrydes-sapessi`. - -1. Finally, open the CloudFormation console and select the pre-requisites stack we created at the beginning of this lab. With the stack selected, use the bottom section of the window to open the **Outputs** tab. Copy the value of the **WildRydesApiInvokeUrl** output variable to the **invokeUrl** property - this value should look like this: `https://xxxxxxxxx.execute-api.xx-xxxxx-x.amazonaws.com/prod` - -1. Next, we need to copy the files we just modified to the S3 bucket that hosts our static website. We created the bucket in step #5 of this lab and it should be called **unicornmanager-<username>**. You can use the AWS CLI or the management console with a compatible browser to upload the files. -##### AWS CLI - -1. With a terminal, navigate to the **UnicornManager** directory in the lab material folder. - -1. Run the following command: - - ``` - aws s3 sync . s3://YOUR_BUCKET_NAME --region YOUR_BUCKET_REGION - ``` -##### AWS Console - -1. Open the **S3** console and select the Unicorn Manager bucket. - -1. In the **Overview** tab, click the **Upload** button. - -1. From a file browser window, select all of the files in the **UnicornManager** folder and drag them to S3's upload window. -

- -### Testing the application -Before we open the web page for the new Unicorn Manager application, we need to create a user for our unicorn. Using the **DynamoDB** console, open the **Tables** page and select the **Rides** table. In the **Items** tab, refresh the list of rides. Take the most common unicorn name from the **UnicornName** field and copy the value. - -Next, open the unicorn manager application by navigating to the CloudFront distribution domain we created in step #5 - the domain should look like this: **xxxxxxxxxxxx.cloudfront.net**. The application detects that we are not logged in an automatically redirects us to the Cognito hosted login page. On the login page, use the **Sign up** link at the bottom of the form. - -In the Sign up page, use the **UnicornName** value we copied from the DynamoDB table as the username, a valid email address, and create a password for the user. With most email addresses you can use a suffix preceded by **+** to create custom addresses. For example, you could sign up with **youremail+unicorn@emaildomain.com**. - -![Sign up unicorn screenshot](../images/user-pool-unicorn-signup.png) - -Click **Sign up** to create the unicorn account. The hosted registration ui will ask you for the verification code, you should have received this code via email. Paste the verification code in the form and click **Confirm account**. - -Once the account is confirmed, the application will redirect you to the main web page of the Unicorn manager. Use the **Refresh** button on the top right to load a list of the rides for the unicorn you registered. - -We have now turned **Wild Rydes** into a platform. Third party developers can now ask us for a new client app id, use our hosted UI to authenticate and register new users. This will allow us to grow our customer base and toolkit beyond what our team can produce by itself, **UnicornManager** is just the first step. +The details of the flow above are as follows: +1. The app starts the sign-up and sign-in process by directing your user to the UI hosted by AWS. A mobile app can use web view to show the pages hosted by AWS. +2. User Pool determines the appropriate IdP based on your configuration. For ADFS the IdP is determined by the metadata file or metadata endpoint URL from your SAML IdP. For example, if you use Microsoft Active Directory Federation Service (AD FS), the metadata URL looks like: https:///FederationMetadata/2007-06/FederationMetadata.xml +3. Your user is redirected to the identity provider. +4. The IdP authenticates the user if necessary. If the IdP recognizes that the user has an active session, the IdP skips the authentication to provide a single sign-in (SSO) experience. +5. The IdP POSTs the SAML assertion to the Amazon Cognito service. +6. The user's profile is created within Amazon Cognito User Pools. +7. After verifying the SAML assertion and collecting the user attributes (claims) from the assertion, Amazon Cognito returns OIDC tokens (id, access and refresh tokens) to the app for the now signed-in user. +8. We make a GET request to the API Gateway. In the Authorization header of the GET request we use the id token. On the API Gateway side we have a Cognito Authorizer that will validate the id JWT token. diff --git a/images/ADFS.png b/images/ADFS.png new file mode 100644 index 0000000000000000000000000000000000000000..59a8b59efa6abdabec8e8400e296dd7e4132bf1d GIT binary patch literal 195701 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�iR6rXzcD6*uuh_P~z|6XB!=ahaegc&g@j=C0&{F%X@^pL2z zU9z;cS^++MgZvnJtzM6D^R-KF{?iwWQZ1;LAc+B>tE-++V=2fB)K9O4NHEV6 z2z=6o^1Js@lT{om-_=e~XTSKv7oBZZjaLUq@plIu0bjTOeEGutqjo0Kec7Z(yOPvx zbuqUB|2AmLZcL)tT+)aBrAk@i|2aXo>tnZB3J`*}Y0-xt2mG>V% zCH*x>k0%#lU|;h)6Ua_H_Irf?a1(-t#}g>UEqQE2ZO7~s7N+ryFspy0iBg!gmMlul zFinC=llJn%y9aSCrLYJO7Lx`SJkY0u{Vt{qRs3B$k=wcNF`JbWCF znV`CJ?{r?LOPLc?L%f9$T&(;34Sj#q?b~+M+8*%W@Ol{+i2Q0J*VX70OLK3&bcTgV zz-z?eygE1SpV@Z$qgySal}g?)eij2N4brO7&mW;#9FG8poNt-L$q5QoqFWd^09<*tR2UGT*m4=s_@le>uajGCI6DRjN7)P&tA3WwE|W= z5cS*hkg@G%?D^ni+xWX}V>-40wsh>-us4b22a`VQc;zWNNfF!8|G2ur5P$CHb0)5Q zU{~xpU2Lti93db6#wm}3bNd9{j^csa0sZz&5C!|02!p}8C)jz) zTJndUuu_Fa4#B8Bo8yJrz zP+q`Q(eCW}GGjW=pM^z7r}56XMvnuWY;s_k8Re|uA8MU5MaPN$fX8Y2m9UTk zTbR&chdOzWXbP@|o2+7&pCb2!XG$s*TI;Yl)rX?dPu{g!$t;owNDq&(GN2p;TV=$M zqb0AjkSl4G3L7PGd_W{p^XKR~_FjQ+L5&{M1}6*y=4UnelCD`e)zUs)B>et6F+nYF zr5ziP7Y*K6F%?i%RyQ8~pg`@reiQT zRap?$=(5tTPV3->r*D`4J?qfJU{`->$zY%i7I{LE(`%IeR7kA8L$Q8QsFYg-2W)~% zvO}DQ%57wfQ4G1gN>e)`u^FlD+gf>g=YopYaX29nPfv5WLrSfOsyLO{^0B@2-K}kO zNZrs%Ri*1HxpyvFqQoY4&c*q(o&z6WE2Z!C+Q44Qr3|VJ3WDxkw&(W8#!1Fk4fiN} zNp8}pOab)D5=d}d3XwwyZYVLLJhm0@CE4_+qHUIDIlAq2c0twtjChMSlh`B!dB>0f z=iHHS9OfWaF$T=qr%og5nL&#mw857YwcC)FuaU3%NQ4wz1lm1)9Af1}VMn{M%04LD>fVxV|H2Ol4n+x8K>>frZZ4fs2S;p-QGQs~xgI4k(ElA>54s`rC2! zA`T$%KMFkUU=CO28++9Jz2R7Kcis<uDr?d~3fW~AMzExg6n z*gy{52&6j$mM$|D5Thk5H+fg1Z^}p*v1!C>bFu|nd%W9w)UdS%VVM&RN!a|?!V*jf z1P8e?=QY4T;HB-j-5TMfaa&^M^-0j_ZHSQR9XrrLYnozeLGW6}CHaIY&dSr>9DW@1 zMU=y53D@AA?mLzXjEjl6upa+;nluR$$y}MYC024WSaEKuPaV*c?;_%VVjfLnx97+w4&}e-{7Q^i=Y=u7v^%{p)#o z7_mLKD=fsQylxb!)=`09r*&I85?))JIZ4YG*-ZdVMw26;WUFAoZU6tmxks+ zP%jX}Xr7J(n4ErBDsGdT*T;uHZe(fOM+Nf!U$6CKLBON2;R2f#0Wwr80VUA|#EMl3 zUq(b;hPbTYl5Q=O29oAX;dE2jM3EfAZDnppgRUa)RSlTq^zqwNlmD+JKD}bVTe_S; zFwPqEXJSVj&FWQn%=E=}a#u43Yh7Z!ES`1r~%f`x0q0fabD*K#~R(4Zn+Qt`-(Ep0tR?P-af-W3@Gjo`ftbzGi&;w~%^PEB9eXnqL+ReP=4*`Ky=s|8dI z%d`LCxc`2#1c@MQ^-c=v=ebMjh_Q+tmU&G_@igS#-OZtPFt_Q%0rYli9|I6ul`v+Q zM5UhD*LZJfsF&R@nZ!1OGU)%mXEeZ`1-_7O&I8fJNsN8bnK8nt0$Zz*62I* zmnUMI%4HXlqh#$Lavt=^d1JJBEnk`kHRM%i_@T4APxx{mLYMl{erhr?c`|^>slR0jrhm ztPl`E|7RtdFyJKRUtt_Z;D%Bm)+3uXpqVZ$;VzdHgQ{K{8>o$<84)2U9n=fFeF2T7 z<6Mkd2_KWRye6H3P#|m+82pbbrepzY?cMC^(pTD{&N_bGG1B4P`okkLbcCu$fQok4 z-Abdv3EXeQyNcrQ%?N}SrmoSN6xU+?=j@*RhX}CJdqjVix~DjPP;N$3+9b9};(If$ zV4Bz}t^eic8kEL3%m6Ofg81qWUP3;ajh1PfPOp0i+f>Z|ETl-qgK9m|G(bjln24+M z8qqgf?M@~1@kop?$-qFpS$}=)g^|Zu-h~4M500EBqicjm5|Ahgbfw=aOC9jEKiLet zx-b5JHY?s=cb3*!zgAn(_yom;0z0DcPYZYrEI+_KH)Zf;@E?!X{y;=y819M;^_sS< z3b&UF_qd;r@Xwv#_#fW}lDF=x)iVVF4aDEy{Qc~R=cbG#?%Y{9Jgax>460~;vc}pS z1&8*STxH;tfMY@(=vw@Kvi2m_7?f@X!dxLT{~L1tD?V2egAVGKXr9*%l#9J`^Fo_; zCDLCjOKGfhjcDzVMHMny!ZVG!%x8^fd=*LR*GE7@0<9d?Jt*J5`FF7YSB#ECEq2(A z)YuDFTs>u2l{<8@@gdEdaM@n%`_KU<(-{*R zEPFSX>RFN$bNR2XnOnR6%=7;--T-=;r;_Ux+u<+V6i!56flo>9G!F|4c)sD+`Z|Dh zv6iv<7|^lp&9Y9bv-dzaO9iw>KdcW)EnVzhSGq#}Z`}Wf4a*1tF*{aFYF?ba@)_u$ zZwI^CaKqXlxfFxuEz<@efoI-~_&!eaC6Q@VQ+Fv8H#rRC>41mEaq`K)$Uj|PE%(1I zg=+`&dT%jGqFr1$7(eCzF+S~A;j>pG&c@i6MeOZ~K# zU12Ya@xxTn^@`B``HIHdAfILKH`ie0gHQjcCD?coHLAwr>Z;`xE50Jw#-;%g7_p-0 z17fU%|J>C5#aJjGdh)e;vJP+MWTNl^8w1NZ~OUV5rzmKbPTO>)L_ymmU^fpDLRW?j@+OSfsIEtd)KW zy8*wG{OQYQnZm;RHeTob_Q^LqiFxy$qsgwqk6Ay3e*DY0ye-~0Ita>{Sr~`;z2#4- zl@v7}S|7rfs2KV$lL;o|4E0>d6k#;UW5rft8TmUbu*ER0-Re1&ZzWVQ^RLxt9lpIVWB#2=k!Pd@XmvQUbL z<)wP9x$=DUwEWE6Hj-dX)_NDH@0*vtZk%}qM^fYvVpuMfbE`~$|Ii?#`){Ul?mt{_1HuZ4m314xKOo}~(B=nxxP{07 zJ(Cg5^TMU~h|ZE7E2!fOYsLmvZWpB`J#V32_==FXIyJ5L>*8>;wHQ?$po*9YM~=1T zcw?8y@$Xd1#R-Ca#gE5lEOc0)3rl70GbK%rqgt9O+rDqf(8LnrMfCWgAg`3rGQwJL z*QbJuN5pD|{S&{Ww!FWPPSI30+`NK4aou)W@vuC9!mC(Uc8QIk`Sn|GJExXSd#2>s zP0*XOMKP4ivtrYC>+}wPUxq2EBrMPK?}>~%`WCk7;XZA8n8}1HOTZf{307c^5{|^` zts}kUT7rGDax!O9LI_6CzdHOe(_>1~P-#hRf3NkWP`d*IU18@xF&fzT@k*T^_~x&w z#1_Swz6^%NX=HJpkPNQx?Hl=1>@sJd>JUeOezrgrnP=aJ?TWXf*Ivj&J6TBVj$>m3 zsCl)1(!Y6E`5sCBg+G>{ zW?lh)_eIi%$zQBFDLd%pX-8sY{@&ktUV7aHQqz<0A9yu=_{sQQE;yOq%E(Yt{g zUDLn4EKSd+FW7c2BAQ%WuubnZBr899aH`WTv-n~0%**9yOL#cAhW)eg&}RTK`QuK+ z(|fB_T~p5rs|hH=2VV$!HBqf=Q)LcK#>{Zonc?QF2}DK>cIBCVZ^S%-l@rsc_j<*X z9g?ximNw;8Qb6;Jr*`T)p<|!<_rCQTx18R9`{K(_7L^qV7ukF){VZ=oo`a6eA1u#H|Cwln*H7v596)f-6KU-`S@n7_|>ZDnVme-oVeZ z6ih|0)t7x^$o$Nc!%T|$Wghwny24Wa$S%kC`-^a^YU&%o9?ZqW+Q@_tLaH`>5iGZP zkuI9H*P8?>@a+1;v#q+}8+Vrh_kA&guIKz@Mq|Eei)uPO_kG9W_C&rhY0#b~#!-t~ z(l&$Dj9Z8!XtJx#5s1LcrIdi~&Tbo@#QrBn2k zkeN4G!d3=hbmj$${Xe}(j>zK@^4JD-KQf`F{*?FOXA$Kq-OT*5sZ2 zugy{p0(Xb@+HMR{F$dHj~qRw3Fx)wiv3|iWcg?}&jQ`V{1p4$m6?)TfApZJ zR+o8Rpp1&%yJFOy8{g^vVe~kV{1Y7R7`~X0r_8(j)AJ*PLnq4hMT3jt%uiXzw_%Gv z(=0X&nFymjeRQkQuP_vh%$i+Ho%+8GA%0B!)_1z3w}7cCDqCEHZz=Dk(B{$cV?!pN zZmVFGxG+vPA?hOOT)7}BRZ?Jj7wyE8z3jOnC zvo}yBdTPFpw|dP5$Tx(DQC(To6iqtWDVg>>P^{X^0SV2bT1vTMe=Tv89Nh$M@Pq;W zffq3Kas=IV->(b9Y2_T4gvF47L>M*9V_#VgFYyhOL$S2SaL_0be_57A+$Qy({xn4n zF;aUh&^7Z2W?-ekLSSlXZma_teN98_8HR7rOXAQVHezsVU;x?2?yPXbF zyCUhWkg*?^2G0Cxm}slOn+^Jt1n@Z>2P(%IlY3 zB8QFXc$#4>H!R-su-{zHvrOFy-U9bb&&*OYQurCXNcUFu8LjBM7kP8dM z6olvej=qj-Az}2B^qtTGap^``$Sxti-9Z-a}*l!#e_*@7n1aJBDvg;KbvM13A8@1VlQ9C_6e z@*m;2GMhI+_O<4WM3zH8kR1r!uly%l+w>MQ@8dF(O`=mX;;BU(9Kh-4d{oI8GS}a9 z@%PIZcM9@xODVHZc=4dyDVSOws=oLJHL{8w>FW)6)8~Cl{ZWY`6co5f3oP_l>z;gl zu}9~8oZV@ZlUhsQx|3HhxX-(@E^3r>LShoOL1~67AG&Tu;ORmE@uznHjyUI~#o{$@o`p3(qYB*_(nGg2~Pw!2}ZO-rQ zU|{snv{o#qfrz8fL1$OuH(%x8=G4@9S`ppBWA7nPe1u~(LK|&}V47=qH?%UD293`D zh4#;^Z!CsdX{R+kM6>bhFyPODt+har8Jo92X&(MuZ6BdQlcK74o%>MvA89YX$+EPdwyUp@A=mIalsiH&c0V-+kYdpxgWFg^<^n{+>3@Q%tq}R zi>|{rZ-l#b?$tyfO1GrVt9>Fzx!ZfM654)XhIx&t%$9ec_(G~QD{Bnh7shp+BUk;1 zv&fU9?Vt_ze5S1pXp+#BCpGE!;S8u@<*S2l#;_gmxcMlNU zoj`!#?yiNqySqEVo#5{78rEGt7eKaRNOVLyf#>1#{7;sa=Zx!^UqqNe#!oUd7AGCuCs-fA1i_8B~gK1eJLW^ zy*PJ~8Hv7E1VaXwGeJ-q&o{1SNLHjTjsV8|e!^`aRH8HPgKx1eZ$Q(%m;`?NmQt|K z-tTLP-Afkz{v;Mzid-DT!@FGL{MNYHioO({>JfSdTp&GteJkiQtB2x5e5p7iXabbH zYChRjZ}fb_Sm0C970N-9(@kLd2xJaBVY)I@>zgbJ0q{Y~M9hzOi^%IpOK*-eUFP+f zURV^nHI5*5YW|Nlf1P$p-mQ6f!Y#gVHJX zz$QWrnLFEGibPmLaqL=8=WZ-Mh!+Rf3|Z$_cx--$;1q6|?z(3S+)Y7R-oHTG_`ld)G*4SlPQVX2=N zmDa7Q`gkC+k2b%_=R^{l3h_~D@_K;}B6h%_qx&V-gW6mj$-iE^%kp=Rfuh5h=$^@6 zuR9#kQ-0;1V26Hy_1cFJ+r=9)!q9=OAhI3YJVoc^B?Eg#+^JXUHMj_fLC5h}%r+(T zyPk60ciM`%KjMnUVF6?j;7G7>=`F@=V)vzZx!|w&pg5l0#zO` z!9^u%KS-+XKCh-Q z@yJj(D-j0S@>b}P5l<9TN2cN$IGZ=w+F^0kGr?2aBi7pE27{PjwSt0#9rAisq8*+- z7^egU&o48WnAjASo4=JG}>}sRX zNgDKC2bo7eEx%DI_huJOHz`CaFPZBQq0RLq2~6W8cQ0zs8Lf?jkAYW5u3p-nK{STbNi0$DlsRUcy8d5IuewiaSKG#s`-hW*+Yj3?NqFkL}@i z)O_dlftaW8{#ZVVOX}W1#Q{VREjo?4@atIRv)Pq9ByB>c+&qPe#oY`(G>{bV)%Cs- ztX1agp_X_G@a_yH6pKpd{3iO(VOzrsGyR(!9zKY9Lq=&%^-_w1O;Bk z6~kb=U}tD7JgPg%qYMjCU)y^ZGd{w|yy1q>2V-PV_SfUBLDu!dwcScFGhxr3zmkuu zr-r3D$*&<0^fH#7bwSI`{!+J6M>-da4;J38tHf_ZvR@#LyREYs_j#8FI4I2x&Dkj1 zb_2z(M8&RHxVD)ir7(BTK^CoK`%?n(p{>a5;&Lo>gUKL-vBn2UKChO0R^F&oZXa;? z9<4Y`|1D%< zAkj`*Xg z;5F2o&)sQ+73-G!A=HG_H3_cQ`1=8Ul`Zw1QfPIGC|%wgX!s4~ZZZ*;Gs@*dyVWE| zlf*JSGND0mH)hRa^(MS{V&^~e=iib=B$b+#_F9BlM{X_N3y>19c}LJnizqxb6rvJd#Pum8pbcA)FW@i6;;pS5 zZ*$6?Ss0ZZ*m$&4CuEytoxJ6MGhRfO%5sjf8DTj~T&x!z-7I@f7Mf~*n|{en+23Ku z1wi{NUM&fOoYs35!eLiwHwf&F*KjiSf!Z1#><#_kMo1$yuV=-J9t7nu{CUZLe7-=v zDh?#UrU=6*t>0w4Vk59lO$pXQV}(w^-EwWT6H0yKF$_83I6*U(G^>3lpT9QQ{W(fA zHjYoHwJg18*OdV+(rL`>v&J6N)SwQt$vUCG;wu@m$kb%#fem$BI38z)_Y!HE`dCkW zw7=6h8x-i!<_Wp}O*;)Fz9Rv{Bu1@asQF_Hf%hiUiA9!+!I~#B+9##~DFq8b)oN-@ zs?__{8=Xq-*LC+J8_j5e2kw5lb|T_NbA?}+?q%XLco|AP9D?u}3J*F-tw6ZhcdP zk@dpX8C7u71&U=@As`0b=T(N(>28D1Z;(r5`kJVVV#{Yog1?u~yRa;q+1fW5#}Ba9 z1HG|Bs^=*Fv%Gzm|Gz>x zBRbeeocHw-KjdjE)mwOe!hps#NX033PAJ7&Zc1l=FkL&Ms%!Z^=G$!0n_Um44%(Kt znmg04V?(BQBX@{@yMy)Q-DkTrVk^U=+5UxggvY#dM$-8#nr*v8J9Qa)Stc@qypEJ7 zIc>x*2jw$h>57S#f%_n%oruH-nH23ulLRQIWIv_IJa@BHF_v*2qgNPeTb~|lsHn&7N~(HSb)&ZX z=^x?-!=gLu3<})ZHzf`PSec|EOye)uPaMf6BJ`Z-6H(0}h*Li!Jy;#E13AL)`_GJ& zC}XZ~`AVz_%_=1<##h^;_G`3;g2Em|6X#`^CI|LLo(q8} z8UX&WSZvgdTV}hRh1jY}ey}IT&T~hJ;PiQF=A^lRHirwuWXzv60;QNjpu52U?dLPwwQ?Z+K?6X-lj+?40zZZtr55FQ^$W4F<{j| z9GfWN;u^}G86h?3{)5P)b{d?q}j31)y@W+Ll(pFa@^@Wh97tasZv_p4ByloD)oTRbN- zM<2pQkIkD=5SLj_1)*S1bG7zMzcf$kHaO3C4_)O}CQgaSuQ!%z)mh@jrH)f>n&oIT zM~q1!2G|X>@=g1wM6DL6UM?hxWs4$o_Hzl6dEB9mAoo3Rl;UIK7R8$1Xr6Uc4+nb? zm4}!JLXy(H-IqcGz9(V#-#z5@g@>YG<1y6VCkZGY{U9GbS>+`T-baDvW85=?lun7qvN_LPc#ZY~~(vl1O&MFI4@lT_Ei~?H-%Brm(!OYra3f2 z9OwJJ6%*rsyzbBA+d9X|-DP~??@;P1r<6{stc6w@zmm(#B+O==l5n)46r2U!^MDHT zfeZ6b!6?9Swsy~zjm{cl#FmCma7u0KiA`vzLzLU+6%1r*n`%2O2Ai(1FRI71(W1U$ zkk;~zHs?{cVXLSmXB2c#P!AdLB)eo*q-><$VjZ~&>miNJ8hPCl%(~Y|-!uuDr5MT7 z`mm2y8N=1@zHURwak@lHs2HOX#-K4P%rI1jSVS%pxp*}d!S5d##I;v38zvc5(sH!G zzv#7?rh>}M7h#wd^y?x~GC;*mZH+g_^10||e%%TbCnR}X#v?7N)62M+^2HAex8x&Q;={AMR zSS4oGd!X1NSAz)Uw@XFIOR|(2U~UFc6|G5?-~H>Z@e3kFiD6a2$iZM*SN{HFX&-5d zbc(z)n1P(h;U7}F+Y-uBeI7`)#{2u%da<5Rkt<`oqEQ6V1p%wdBTjR0jQda_p8wb! zk6u5O7`aT!%uO~zInVB&6*I3&L41$ymy7uYwyrxFAGWppZJSLP8P@ucLu=ZUwoiENg7%oe1+OLJ)tl9XB=YLdVMwxZ$e*`lXG0V)xt>^5I zc^+}5O}ARpkHcsmaW7C43sKTH#^*H+SUhz*0QEwZjTX+o~+ZFDMM&&CC8UGyc&PKZ+2_k`QVUk=-XTKU} zfot|f0I9Mf&pNjS9(GfX^nh|z#RfNYVOO5gi#}p;ggaHm=G=lYGM_-@xF3X7!xv7$R3zs+!80;Y zZCcvaZi}f@n{X4ILzKYkHV?fWW(?2B0Lm0SKi=A&7EX*ABe}fGKJxC0FW=a(I<}*B zL(Og3o}qUX;{-3X7F{$(Mh2qL?C{CtYyx2wB6)@kFx=pvh<~DQ>kC6}!b5M?^#U!e>DnZB>JZ4pO$z~bCVl+gD zvyb5$Y%jS>Lwo{z26WyRr?zO^sW28-E(lJ}@-Jsx#s;^B=y6$uSkCU4HP@}LEOI*d z)zziiXe`l@ZKgZ@*%sB?Q~U~d(1UzW%P-#gFlwn>Tq!&b`f??v3c&3z8aA?Lp#0jn zR^A(Lvz_GPs-X&dgH}QH?HWJl4h{KGWF(OdIc@xkb^hzI9tRcHPTj!o>lmPM!+Mtc z{U1{Vyu9zucG1+k*|vOzX(l`9;Flp{l{B!KQ`|TOBhccECr?hL9fZRuKVp3B212zb zQ<{du@&sTAh80I2_|f<7K+o}LLX=T9uFCCjtCL9ZLnk-r!OCg5S4!d*BFjH9?yiJJ z%E)mVyo+UR)xtIbz*uYDg=!=zPOYoMj_q~@1%=d~Lg!9_RuKK(S8i#6%#2wHcw2!Z z;c?y}RAdMAC1rotH`i#ebv}lo1Fs$a`UXxaM1m3Q7jYoSWGG90#dGx&c@75{i36iK&^k0mz1jr>EXi3Hob@bp1-TuYf7 zb8Mc0g01j{F9NQAn*cgGW2&C6G|KPl1YnytCs0HHX#5rRtvw|)QnmF0H{c_$3zAyh zNo_c99Bw6kXgT$j{KOS{NV)19Fec4-m$NUz2>L&zGq95%Y6q4T+GRTNY?K(S`Pscn z{3nhL#D1qXv_M|u{r+2jD4UNEUwnsCmbLIp9tnXB-F)1 z!sN-XetQWui(F+pt3+1^rPBsAX<5Ow;nD*O>)6`fT zP-h*p|9PLz=mExI5c`&eayr2js7sg7NFi8~!l2_2c_pV0%euVEE+97U#fJ|jjJB0K zrJ@+8M&S}h$I)Z&qWynNRenW+dL;$A8}3FaNuPl8fcsftuK@ zNH!gl>SPj3) z3?xtABEtdLCx}HQCqEVI0n%wO;-l9{iz2z9_WyeQ;v}{Xro5SNxQqDyXF-mG`(>xA ztUT(7y{0p?<6tKO*frsdq*x|}q|4}%m;FZTh|h84fiJ)< zBjmtet;tMVV#3w>->3SoAw`xlm*p(M4QM(=sRg#%yoTXESu0Md`d-W=sKSkG(Ei#F zTL-lCINQlpkmDzw3D&|`t5HU}#4GlC2hQ?=j_d!|dP5J&ZYg#)Z8nq$G#@#mOE*8V*Itvp%#XIQtSlhp^BQM1iF6vR99joBP9mLw{r|l{ z|MOLMf!dhPB?Ltc1kCaTQ|jS)l&ud4r*)>Sz)!k6dzsMsbRmdn4>9sS4%2_E*>M>;Sm4VAgdRK zesuIW9AW!=>`|vWVRzzvC+`Q*eMl<)r0yOLT+`+I1n>v?EHeq+lL8$H(953&o?<0_lD>=$RL zaha4gI$Cl=0lM5gdH>*!fz>qEY=c5a$>n;z)6wK*XU$Tj1TzUmH z+#yXaZJ3w|3Y=8=r&N+j>4qQrvxnDJ7Qep0CoJPulC^D6Wrfq*Q3X)zygQ>g#v@FC zCjJ9ZQovHt6h+6mj+B)5NXc9QC{E&kqsc-!2VZ}$DT~S7bWUx8Ou6#L4Wb%cE|Kv3 zZpb=&7`IV|C8Zh11U&jEXxNl1jOo{uYb5R%sqD z=2XNZoz?}`=pNES^t6#()`u$mC7-?Qf~JP-$~@*AI*RXG|Fh1wZpg2mJ}93T=@#nR zenDScc5-z{5+!OWzs7prx6IA5eWmRJ7zTwua8dBOK;seKNXjS|WUhH>eUV?l%j2Kt zAuiZZ0L0ss@;|Rd+K1R+Uk;ZrD>0+d-$tre3tQZP8|-(Oq`5iq4|3w=5ffL%hJV;F)Q%cbf z$5uE|#A~E7D6ou43^L}>WvzGQ|2=oe^kSky*FT{A-PV8x#^tZIdg@JRY0V61Ura=N!qW+Kp6dj{`U<@0rm5aQ6*eir7r$MTz0TrcM(|p+eb8; zcbR+@s0)bLr}qz;$+n>v2WcD-;>Sm~I+t=eXlRsY6kQv2+&SHK|0WP#Z*G~=sepdu zBYqefL~&l>3H2P*!Mz~z58~56n~kTSl^wNT$ynSSs=OkCz@#J%e?&g7yP&?lIp9W6&@2Z`(g@MmgK@gF{!~T z1)9Dy3paxXaVd?Z5&$YD!euW!_6QN(D5?5KT{va8#}$ewXMTfekWTq=MlP3K_I2;F=xB zjsGT-lq~jt7d~_B09He{g589-#LfgxOV?kLYblWSSK*vV=iK*sGoRl`R$oK*?Ywd_ z&GDEi)GbhW7NvUlkCH&AN?gA$s=_&^6jF%F{92$hhSf9{Q_RtdTVz-=YLrs&*VHn{ z1X`y==m*#S&qx&`9@s=l{m1*#N#R&jO|uMJ;beFiHbpPt>Lw|!)U{$-O5`DmQ&bLS zx6E>LSDXAFh4}OF9wn3$)1vxPkzl>+Uq5t12XE{eBPhV^`xy4VH=$s=_yJ0S{uvOE z1bYzdki3-gMCD2pmeQoC+EZ*!nTi2<=-n?V^}xZ^Y1@+;PbIQAN(d%ImbU)(j<(9W zb)VKHE|oymQ4$x<&}8Z;nZl{#Y}7P%a+4LGnHsg?wDlMfxvJP_w{p>EAL(%U`LH{k-x_eP_C4HVI+;K%q zf2VO^6GABN6zrdbBe)Iy0y?&GXw^q%X8FEC?RLlVHdf=RAGCd^d=fmnaU41b?D4kh zY9v<9zauf^{)zoN+OWIg5?uS;;RQsLo3(3+uv*BRV_x==@24MoK4kFx-RshF)vSUrYao zO@EckMSzOS6X}H_jw!aEe%@ZU z7oCT8+0;Ja_?NWa2Fz2OLj47-+R~7vvK+U(qrX~a)}11l5m6NUobv(B)XG>ucP5Fm&plwSlq%@z9N#ReQ*0T`Gyt zgjuva3Wz7^x8_=0rb707cRI$$N#YHh;JcAn8u>NrIIj|uq`A018g?LbO;SA>q#@EY z)L(16V0Dcx%)Wc?7({eJDER%pi5aS>V}oAh?!3FhOM50k4wrRf6EUP)HYAIae_+nBP(N~2Ohh2 z%0v;g+A34)>bl)7CC0g>@U{|)rqiaNpQ7LJvFI72%zquB@}mF(E6&&F=bI^EuWD>x zill6~859k#U#V2+E&r?h{! zzR^+20*DIqi0J6EMzobR*K~_8WM~ndhRA zc-8=!?p{|h5|S-h2iVA*G-2S_rM(}LkemWPg1uZE|Be{xHyB5EvHs?Kat?ku1H*iU zYtGR#32aZMey6E!--gGB;o4RWDS636|4gkB8F|jd$FHF-8k>d?vkRA3?Yxj+{Fj4* z4NMAI{PxPU%Tzy(@F;3vAW)EvTnMqsv9C|{5p^YlI3wt2kh^RFue!g>I&}Fz=k1T3 znAVWjyLf%1ohwFT%T@NaWKwiz|94!)uSh(%)&mA>0-!R9>)6@hBii|NNAo;nDkr0u zIi|J(-X$X*{~2qmnz&_lzpE-XQ+vOyE%=J#CDUR zax$&<014xQIF@SH;1FZG`G9!Of*p|uSL{H?ukoD&1O3ug!v1?$hmvv%(G_a-(zHve z(#N9?BQ(P-_9uQim(6a)sP6>BS2|vG8WwV@WMuE^=9RVyEV2;f#YK`T-pLq=n9|-- zei&M{Drl^zI)2lW`?J8&gp|0&(@0*hhAPf3MirkVkxgb7^#^BriUWi7acv)bB#g$R zD7LJdw~DYF&bPOk>7z0c5Y57N%voaM_52 zIJY*pg{-rF>kYKOv#LSu)C+^RKd`sAkB?0UQP3tYU#w2v2`8n|?htk$S)5~?rJ!_v zv6F;*Z{P8}ZMto=+$OzD+L$E76~Xs%u&5(1F5Kcxs662(uhL}v4*BYUYu+apUb zj4ECfL;*pZK33_XJp?-Wam0qvtH?TH1QY6$lBUJE_+yxmbzrcDnO`jHK6ZX2;M*Jl zH2BO{l%Ui18xh@rOGIJjzq6L42_V|pl@ISbmTyIBS+5i;t-7rgkPhcN{j5}<^$G#+ zUEZ&>^TtHgzI|ovIbL_m<1z!F%J^%Q&&Af>us;$HjZKA1kfkm`c2+|Q`VnWcW8>+c zji2qTbtwjtis~G8X-AkCV_nHz3P8FNvEZ>^)_U!yB4oHG_v@;G3ZgOjJ$Et|=)6W# zh7M**@ks5a0%jLU6$E8^TQiZ!P=JBH#AnUhjVN@*c6|l`)1+jqK#O5g#W(=#jIfzP z*$H7%vZhOYj%?vP;6ROqq`pY$UNZ$a3;VCYF4HX#Np24ufv*M%Z!MaX*^=StYqMuk zSk)tc_}cgtDpK~zhnoc4i?r$uc=M|8SjH}2A32K}=lIG4ipa{_-A^arRw_76_5u*k zwRKXNfXPOA1r6u(X`e_3+5p%WZ&pq@$&c z@9)1w$9@ClvEK>2d#wLC5rp^J1&rVv5zSI4c7C}tKR!N=1G2NyPaXf5bf!2tIY}ED zlA-mAj-|6(UK#Rwt*vN1gw$F9A=p?=9?Q(RGMP$v`1pytLos;K`}_Nnb^vn$V<1jV zQCHV?u&uIE*#U4n?s`kO%g3g@+c7&mP0YZ+5buxER+@VK=iy@A5($%th%SS}IxW$W z>JGoX`sL+?98}69JR*XEj!s7W$53Nc6_V##^Jfb^k0a+h0vIrwWcJS=|4ZaF2VRUs z;3v> zb?s(#bDhd#+s%cg5@w3>4rIQu1|pR=HVoAIz@RmBF93dZb!^wF{wc@VO{+#H2u;lj z=tt4HUf}b`1tx7e@|3D+i7oY^dwYLa655{hiJV!TosznlUn{yzVs^nnnA&tV|3jQ#kVl2`82-&F4gEwB59=#0N#N;(Yf9UpkzWIUpsGqir)70>F z%%$_zT2?2MeU<`x>}^RTc><)dtLAJ&`6nziK@ki+@>nM6+|Qnvee zdI9E%`00TiR-7`*OI*!{Jt|;6ij?OxZOK)n7I6N~3aDq?Pfqy~V+7b`SCrUBVn4ed z4P|PTRr&aFLxpgf(qjY1`m*2!m2V1Org{PW(u1GQdOPmM-TZQA5rRZ;*#i8Gu}6^qg_UU zsb1hAvHJ7GeC~HRqHiqfO*UCtfQjfZC*Wmc(1E9xcn`7K+Q`V&z=6c*-rw_%gu@y_ zpscpGreXYG$rZ_ci0HJg&Ot3{mx@w9Sb_BbUiS&CVpIg(G`Hly;iffl@cN^?>*Z4~ z?mQV7%eWfp@lf;d;0hke8f-LA8|hQrH2vX^Fj|We|&V z5uX3`x$<zF|Z)r&{OU%lB$ zJAQ0nG+=)ry-R(7A31(~LNRckl)nO>ZP#ia<-+Il0#W=FL-Zug4<e4)LZ8R)iF55@#x&r83&i@z>wzYc>6xzXL z=cwEQ0S08uSHO zc2U3yjR0;4(^O+Qd(PDo+IZx`2)nX|t5+{JheRK_KEIIUiXJeet_H^_BZ@oIg7imFdoOgTovm5H$q7 zq-J5z(DDvUBOQkr0fMXsc7YHZIqQAYp9p@Wh`HKPFyI<1fL`Uvfh1wVz7{F8g zSZ~`D^$y|yOth@ge+0BFjE z+RYZ0md<$U)aENLR_h9wpEVFcbJF)`MuYWH$anKB2SexjpZz_Wwe^}-E_4X61wdJx z!BOeGof-m#QYuDPZFU`;kZduat>;i+Bj9Q2O<_D^M-1g*P=9v~AEkpu%Uf0}!^maL z`Q;T1Ppc7l12pDoaMzC$@4oDbk$z`;@`h`wS_L-IFncTA2`f+c;?Rf~*0VnSG Obam0RxlY7_E~;dK8mr7ft4`)&?T<5})jhLq&wt)7kr-fr8~ zM(Z8@Paw}L?zF0nQMUO90yAZDFWWL0zUNts>*v#MOkd>(wdhVN>RBeBq@*Mfm~E}v zXuD}6iYE5+`}Zi`m!pEgi5&m<-axSA1b851j8cdHThDrxcJ(NbO3T+5y0f@zpJBcE zJn2I6>(eGQ)^X^9?N>U>o@~1F7(VHQ@^gJ90^DFcfSOmr$ zuXa3cgoMSkP1sDS|7^CO&_7NG<+}qplZP2!Tsek-7HFJ5n-js9j ze)VW6w}nzp`uY>AL+)cwp5HkB^ZMg;kh4=?v}1_Ph%x{yLG^E@I2R$L+g9osIDo>= zp?5#LcR5O+yHc%Im_L{o^9#| z9UYsO$y2w772WhxjTVQZXP+K>llJ_yc|f>Rh(Kj9*kudx`Iv9_smp-Od*z#k@-=JTC$SriRIlItP+x742=$l`ww8ZE zv`yx$5X`>vEw;I?x_csK&xTQMK8ABq;1k39@p0Z+1~D5o@&m2{!HsX7TW_>+KvY}J z?pnQ%Z305Dot?5v(_7JIOw8dY{FKrYLt-9Ot)+K#lPe{43*sgfHov?i_WiCW$~R7= z#6N772~k|=XxbqFj$;DTV2viA0jApz#I%~{f%McOrBC_|D!HBDbG+--Qs3SG4gon@ z-h%tV=%!cU4TayWQ0!sxLDH&$!VBf~UOOO^K_v3IM3?qfX)mFvn3#Ve9&a(TDP4|V z`iUypVB4sBfP>$z{d(|J+)BYw$*hK@k246IA#hH;@!4?lUQBFYxpQOD&77*=3r$y z)?r@=vQWQmLQ}^%6wII~Os+UOrC`LvY4xT5bjy-sN`BhN3^gguaH?CT!C{(dHcPUl zoE|yFcdVkdIQ!2S0sd@+7!?oT>=OLA9#%_B3r>U?x{@sCgYR$=MaEFx@5GCp%%8-- zGKxJp0lA?HphXkeOn_H;4J^Aqv8A>mq-rhP`IH zpGbu^e5?QbiENWOztue3wlkhKhrav$l!l6j@$1HTp{}Ybyd@wWH3j4Jj$7^ibJ+v= zs=4Y^!*x^WGOI*XAJoG(pSo5lUb)mjGnt-8Va;I3?E#>J-?i!dmf7D$(DidH%n~1y zlf7KA4o)g8AC6~WL&zVo!$t2x(-N8K8xDf65RtE`55B=cGGJ=ua3ihWS>59V<6bKv zG*+D0rg<2AesBlTLbwJ&anl z@iCFn1kz8m@D=1suxqs)KahFjh7+B>f1C5^&#!r>XuJA=75cETWXJ^tb_Glf_FdHv z|KjwG2x2wTf2G~6{ujDkbg9b*_*Wd}AYUz1z~SVKy~CNTy}r)NQs)CZUozl(-z3rJ zQ|rbnkn^<|3LVqKph{*0JQ5MnIzztF`q40ZQkrSy@?&Ohb?*F574DM+onk+v&86Ce zh!X7rzB_x>pD(AqhZ#$IIGdigPUF_u6}nx7w;CnylrDoC9c}s*sb#m5T&xCPnSXu# z;U!y$GZ~PM&KKZ>vZ-;rlsEkVbU#sps69?qiUhnLs>;V*T632v8@bPl(D4?gl%YBZ zKsd-x;;LtdpD>{6oX?>8b6-C^t4jGr%r@h>e_civ!j?rB2PdoYD>r#Z?P_Sro#|%J z2L&$cjPia)@rzblZ=8-k7Pp;IEf&&IYKU%rjalNWT4+bU52!kETHQ{?@b*Gg(1TBh zzMru}!~*yNYuhlo7UyJ~S?7DX7&4Bom%0L4W^6wn7gTl6+Z#+ZJAzBl&ZhC4U(cK9 zwzh=slF_%O%VqVZGwcMgckf2gzbWFBy$>*XE8rfawaHF>c|?z#p_8v>5;;E(+WQ?M zlWOX7JJCc90^~NKQ1U!M6SarLJF+!wLi8^zB*8gec71|EDniVDWkxZJ6MMhfF39rr z0+JtzCEAE}KVO!D^2W!psq~By7Y?&MAlLwi)P>vYST*s0NW@2;pC0L) z90r3cpyPk2jiCtvjmcuSOb#xY^Ek(WO6A{{FHxO*#O}O;gtWTsc+_cn{?!v0jP7&$ zy#Q_wPBLDint7FMnM{((wJ4>7s#~t0uiXu>&^L)@giwF*j36)I^O0Gh*`%|2vvk>G zQxF#{m>dTO%xRr=+xqP$!1C_D{Yf7tUI2UF7m67T7)=~uhFi}K#sbq2XJStGGu-|Q zTAByI+?l`SZ}4Ti!XKk#a~-&4Prt0EJ|=7-HOnDlSp`gSL@AsR!4l$nPw{iluC0~m zIJs}65ymAZR(Ngk4GyDyfjhc>q=I<+%6O%-n~MA1ZK-&33qMbMbyA+eY^r(f`9HrpU*UQHSLMBWzD=exw>+zDB$U4z_{A9YinDo!{#QykIxWQVbuPcbwb5};~E(1(5cHN2&(GHo{sDiW&IGWR!B)#jt# zd&jgFQSVrVr>kIJ6`GZkfZ0(aeO4kV6A`taGG7fxnn0p2^NZ^qaDcV89**k-+k#hM zIP%90R3(Cu1^hS?F}0Ij;6Oc)PBnyiG>tydiJppL#8$XuxK=WEftt%g z#mU2?)KjS>lP%~vlRp6WVkmTkhK;?+g%3st=JrK=*!i;?92w+?{`F!AJrL;EXth$- zGJf|HJu@XKiMp0ZNDYX55ErgtIABakNhz&b!3N9!fDt0|OJ^f=zcc^IWw#}=fC{QC z@0+!hHwn{toJAqSdzg_MO{i(wiA=;_c>CSZ7hS#En>DAaq5?nn_C<~iDhe&LczzyZ zf%A6rJ!t>7l}=?Xw`fbP*4Jrs1*pdIu-H}*@Dl(~mxz=hJn5qZ5V#IIWWW(G(cNco zvvyi+d8cs734RPOPYwG4bMZ+s-%>`SwnQ`kYIJ3~4}5=}Ui$q8{o>XP%NcpqKze4D zi#Us&_jCI-_q;t2UM9|J7yXovvL&Cxj~GY3+A!+Rsb{*(ec0OcJTLzCHgsJpOO`{$ zuem{-ahaCiGmPNAI-;~a+#kl(e6T0C3wxOIA|n|(7YhEc6gtzbHX|r8g5z4=`W!m6pv&wzHfLyt0QEp+Sa?20I zekVi)8)8A4a*;6Yg88#;p0b18Z}L-c@?=u`APV^Ti@u;|hHekCn?t@(Ach&E1B~nY zn{9+y6jc~|!BMgF!}9UW^ko@fqGzSG+YYy92-|LX!+fg&TE9OxoRO}uT6$s3bCS28 zfpMbmr1WQ6Z;uojJeY?A;tv;~rrtEzhY{E=mFjYKgF$RzooZDRpc4>6lO6{qa~X#q zIzCIX z1-ukWC4df+E;RSNnLbq4)~fg5b`+EUB4ajsEh;kRmOF7J7LI9b%3g+Y5(PQNaelE# zc|^RQz&_02g(MFsX!7{{c+a~1u6OBchL+Ak8-NOqP)xN92yCT_EtpJYJ4deh|Css; zwy3_Z?V-Cxx>MfuiIUF(*O>>L6M-7KaXe>L z9_WK}m9_h%?R8sn^FiLb>sssptl%R!T+%_$@U1Dw@BY?@V&&Yyz@So$KxGlcFu&X5 z9}iiZY2ACKkW)j+-(@q4Qb5DPnzI`70d|0Mz;XyZ<#0Kr7Rnn#2|dgCJ-%-+y9k`{ zWBOfbo|R`{uuk&ofu+(X=@^lg!yl>C@al^F5fUV^YX&@Ys+4;9EN(Yi^zTJTEO!>E zRm9>46CVC~d= z0DQ@yTSxg$&NZTs5zgf*&gjO(2(TC$&UfQuuEqnj4&v-f1>dRH4r@E@*?SL;o$Bu& z4G3i=QE+&1jLx_;ZD&9roq@Ede-iW=8D&T9=gs5d&P2fkAJ7YVHOCx$1f&7mSFwIh zcO7M3xn_Scoe_91T zQ!vcX4(~#w-;oP+CIO`Y^4(I>h)^l#$w1EemLES1Lu~#1LnAH-6q3+Zv%ZA-!|VC- zp=luC#m5+{!gIw#n--1dKyD`8m#c3@4=tjZ+(acw;B1I{8PN3|mezU;{OF6q0E|{O2uh5<+m};XRwxS<`0p>EI ze=s$vu(z9x10k|&R4AZW-eM=S6_a>TJ`ebAzhdLRZCNI(QmOc)K35D>(m z@;+Tp(RoXRF%5KT%^P-q;C-r)zk_++u&~${`e&z&#X^vHL2uEu+p|zh!+q%OpqZN!V3T;yw8s z=&l$~4%oUl`u1(%SexXe(oxtLoAE*KGm=(Y7T`F@ZPi^6d2mtjfhI2{1(oFw8&&SF zM5YbV!`#28CNB>MKL@Qh{Ay8p`zY~ur1IQf$M;_*89*zIRvg!pFbfIJ&LJR%W4=76 zjE1C>VCQda33H&os%jcMU;ZhZ;e5)`_YG^`xZ`*9-juf8YR)rDN1R(GNXUp?h!nhf z({svwh$G!AEBd_Zc^fydYY)q=tSoW+EPmQq(rC8w9800KKq86W2vOa>4^Ixaj!}rD zg(PC?@di`CY8|o>E@8jjD?9prN{mv(TS2s%5<6JxPGPRFS8(ft;(;vZ2hO%%1uyyP zMy^0ukDsR)R-95Bbf39gq4tn6fyezYoJ%Ns|2r6!7iPFz6Zm zZfCAla!Le3G|bTrp&8? z)?&*TL=C$+j7ifCv4NXMh?9(UrYR!3x#lqLC`m#ezdMYf&I1!+0m!Ke?5-sr#0@I+o9l3R3r|j8EW4=Gv<~B&4+owiP69MTx5DWRmhcM`gzaV|*eY)B4 z`q&0GCy>kxgf?Twji+;S)~}Ey%%y44@r59BM;*RHyscPIE&XvX8FH-k1gnij0$rID(uxQ{4l=*0(t%pn& zHJ32&NGS@Ci0_V#bs@?oToxi2aTin2b7f1g1G(ot-0BkqW6Lb)ljz`WGBnhH@{%nV zg_IkcLa5v{=wO`0)*2OOsz0}+oGA;CMrj*S=r@(%CA@JNDfG0|b^r_LO(O}I%xznr zMJi{p0#@Lh#O9lyq8uqEePW;!a;`G;18X?tv$FO64!2 z2PHQz7Cy}>OzJlA9~2*nxz)D=o(dH{p-1n)BS&tq;3y$hT+$gpBRWBu-V&_SN^rE9eViTK5Y zdW2^vui)3uzKt2cy`f3edz$1JSC1&8IM(5u403Le@+_!K|1Rf0#M`7y2eiws_bjY0 zAQnNC+Zg7|z@KrgP6}PTOVQq|kzGFd1V%pDSZ^dINz{u%0VDhC_7qRL_!2-}1LpKG zreD$(Mp+a8_WKk#{_`O3u!y_Ge*PSD_Z+tl7LR=j>3HG~lmJQZu-(?kGsduh={5}H z&z@Dni-Y_X)1SPR@d7_=LoO*Al{I~eMVf9pKK8B#Ue1z_C`l;@_0E#&3zxKZNanA& z7#j=6*5A|6=;6UaA!!!3BR?P`diK%WZYAMfRFnnQmJVlU>!+gSQ5ybLckJ^<)A)=X zXBt+tTU9nLD+I@QYF;4XBLxeNCc7zrV!!1-P2oj2LbMf`Wpl6Ljj=svr z`z3H+#?mKN#QG8`umNRMPh+Uzuv5p57hd_e9+4=)15gXDpY-$HL2KRccjNg1Pg-<1 zvLa53I4mkbtvo%f<=*&p!d>n3ileiIb!?!+HNKHUS~~&D=X^^~a1&G7D$a#_OSp9H zLBkn{)|>}n9NrD+6*@+&r{^$N6b$NZ)~(Vjs@h#`aa!~n-*n;C0g3&%D*yFMAC`%J z25j2YonOrrk7p%#y>KtQDu>EPL^G;3|mQCT~4S4K+M;6Aa#GF4?oYOq@?ij8J$ES8j!j|c;Sv!P9Xgp7uw5Oe_ekN+SorlY}1Wy z{nqao#|a+zs8@DB+uOQq34pd{De)wl&IYe*vGLpHt)xZ%@nS&~mpO)+w|gF;jr}nh ze@&mFn>y61rY875IG;ko^rNn_&nFA zN(bLVDG3W+FWZl1%GYrEAbH;AHh^x5x^%?GVEtn#egD^yQNaCjSyQ05jt*n@3CUgH zESc}~-B=n;f!W!HRNX+GWx6`F>lGY1eawU2eH?J9Sbhqt6|EIN+=m?s4+4BmY!Imv znIyj2bZ&${QcIFS?@|h$WZX*7s*qXEa1L`A#)oY$#|1okppiEdbx!FHyZ!|Bu4K_D zZNs@@0dfNB)pJZ6%4a-1AL1}!!CX?QQsC^fdA7bCD!(&Lhm>tl?kX@G8R2hs+4e{Q zY(Cy;4Mq-X=k?Dkak&ISRmN^BTQn?E)~p8@ zKZm;7G=vnT+#vKW$MH|aP&wkJ>RtL%j5K4&!p~^4Max~&5i$#twLU8=cz{KKDfV$+*fQTo3Jf>Mo?sM7)_}j@r zgiZvJ@m_)8kKAwY(O+g2I1U`fmE+FP=?dQ5w}#nZoNK^fC&&lm;TSArCo3z&!-qP(?fMNrxm!_^m78An(MT(nk`6(cwdNbP6+Z!D zpOvUJFZ_|;)Q3D8X3Wnmm)Q(sc-T~Mo)BO-b&A=q+gqccfLB+Sz7JpBE`mk)wH z_R7ixQhsw9hrSdYSzcar!n?f%rnFpKl2ZH@qlc4uk@%(sA1_VR&BktZ z@HM#BGV;H|w@7?zyDBQ$_Qit#7|QJX0ZnO`UQJy9jx(rxiHej!0bedry4iu0799g) z|DU8+UsaM{<1oJ^?E@geZ(e@>ikVOwgfnxqZQhAbR?nXC(Yp-J=GOdfGi`BzREe0b z9A00}%{=o{<;=?o4YvcI#;$nIpj=Iy@n}X<_i%}<-LEFK?T&4sy6~Q%{&Lv3)Ym-H z<0M+59w#69OueU&JWLD>iY0RXm>P(p9p(rrDnu=Exd43%c=`COgV4A?|A}3sNo0}w zz!%3)E^HSEy*UtCbbU*cix8i;eaXruCyjB~k9V<~S@DWR#$Rq04LyP@bBP|r@+~28 z=s64>B;PRS{jNduVmwzi_0jpvun)>1J$;XC2f0wzAi4CJ z>fQd06q+A7eQSszO?hMPo^gTS?k^B^Kw1-A%p%<@B$Ip?Y;p0`g+Yb%W_KR06|h2w zk2|fG@UfpZcF`(eNA5SteH%AueT<5muG6-#ra|t$v&}$X5`A}yJsxpGHb2~F zbggot6rOXA=kVaFnKDo*I7E|o4h&-b;fd1QsKB;r!KX%C?5S*$C+6`UczLZJcqt21~yj81v*=T>PCxghvs)d!}$cMD&B zV^8WVuowlsopYu>ds_+N9%V38oWej6m+1+BnUwn))|d5tp4I#|JlOa8PG_B@;25CL zqQPLfKh;kd*AYM`Y8zY!>K$>r-rRhsnE$j**}F6Sjdyr}r%dTf71RDO(li-9C2fk6 zF>BUMnS!;&A|K(Zb%a~ttzpG{x~`Hmg@PN)NlDF5WBn7d(xPUxRnkPeB}O-NCPmg@ zAL2k=scw@k_->p8B-4bLWKIAW6>yjNTL$f>4H-qExcg#pGecF}M-6KkyCg0qI$4$n zoq>GN0{(t@$vW$GIfsD}Np3d~{{9zFhUMavfTEUU1nbLLwdjdMtJi}G95(oqDij7r z=^#+seqk0FYlVb*1S*EZ1jx_>O{&iJGwJ$K&#^GUi3dEVq#z+d^+|z2rAn+ZC@!2= zU=h<`_z01%YB~ojFRttdnrVRIPxw3l`%_~>gjhJo^l1uaEeFlk4{(#Xlm@Sc>3qQ{ z=3PCuF*)PsMNH#bFODr0}Wo#GNKl27j*MhG+6 z1g`Axp*-eI>#lz7nvtlp?j}StUmh1H@M2IZ%!7m}U}@d17)WxWB)8p`?qXDFA4id+ zN?LdLoiGh-fD=rO9Imp_S?%rpfe+cksnE{moR+>KI8wLbZi8e2I;x2qk55My)?p#d zgr=QXNqG53Ic|h5X(`tnH336fd^0=r(fzS#(4((Z`#*XzdscQ$JrVTvKH%j`7GI zYps}KDF5Ml^IjuTxQkXAPiT_-?rv^w&%kRcvEn$t!|G7zp!R>y9z65U(-UH|Cxi+Q z#Qmn)D~~-JkbktLpEs{)Nj}#*H0?0nv1MO4k{Z$9Zd&M|Xe6CRdVh3Um%DGf& zAK!^b)-85_Fn;?%fp5#v0k{1G0Dwkch=zNus~Nnfaampm$8Eh8xH+AoF01a_H39>9 z$9_E(kY$WAWxMTrT^3|`silt9=Z6YQJx~p4y_aeIrO}+ za5DkBRL4=YYb>>Rp;u4pTp&qF``hbN?MCgA`XaP~oDvGTiol;0D3Ef|b)Mh=6_u1@ z3r_1`&vwtkzn<`V{-3ACRT)*#Z#>S%gw5JS*=Zac(Ja{s*#hF5I7HM82{aMhKO+5= zKdA5NRWYz2k_@Uo^Vs=5mXcKweZ3A%F2Q41#WpHW@`_I@_O$KHWv)n3UZ6&oeD(+= zVU+zg)}PA!Zd@VJQajng(k#0K{+8^YWB#8-{7OnKEFRY;7ixmA=Rp0L{?(WOpOj7K zuMp=T-N}qqr}?Kq=8Hc!dY6f{{lWL!9aQAO=LvF3X$j%@1&v{b8;O|O&n3XU#09Zi>M8FxGB8ngs1%{*)?bzx&Vm?m`6&fpa_SZI9*<~sbJe;|Ml1dEE+5EB7_ z%q9G$H*pD=)KXusGF}l%(J?}SwbHXaxT#dqHNadY3Bi_=3soIjQtr1tPw63&>uEf# zY*o#(5x?+RQ&wi+lckBHX*Ja1ST95HM+F^zcbjjZ@Q@X^R@Z+PmhU5YwqzAp zp7~3wqut(GN10G%m*I>?5UoC+I@uFP-#W?fW$QcG=Po`%mN5AyBgHF&vN@>j%iN*8XN9PYbWvE)~3i)&sQqC(IEe^u>VDNY=r zB4Y7$@4KtLAMD`y&yJ#cVv&oxtOehh7L>3&v#_(jO}Few?_1oHrr*}KV*1=I~*cbJrviLWJnDv3ZU1zCC%s1RPCEmp|Ej!7p03;)z)cid{ztL& zrA$h;I^XH(2bA4Kf_+MqMbA|MAS}yIT4qMLI=Jy_Q7KDr)Q!M@u1UjN7yB&ZDe=4w zXuOqQ=!0*Y`Exhf`Gb87D7pn#>aUhnzc92;^X^bkufx4c^Zhin8v@*$=HSg0Xf6V7 z<_ng6)PQ$qlJA_XsoaBz`Cs=gFdAA~m4JR=`(;k6@UeTcm5R+#XZT3KNt*Z zn0i#Vyg9Jh`2Sy_vIwYNEs7##E=fj<;yQDdfUfs0J*Rg4UC3vF#JqK>h;?!$Hi7`3 z&!xG7TJ+nRc<3uB+{p}lY@d@E`<1=j-}LUdaN_zY^SMsgk-7&8CF;x}JF6Kp2Q>A$ zZOpP#G*K%!h6+${v|~Y!RoiJP<$V`@JnkVc=TmzAQ&{O!$aN@VDw%W~0T@15HzU&GBfI&tJ8U>yP*e15A9HR9mF9&q0*Ps){XFH2-`97)79!gcp%uYM< zRpXz^KMM_ne}l}#EnEC&5C7RoPB}h_NSTkxzvV4yhaj$tl7LwKCadiO)uG2jQq##x zp+}%N9ua~_7Da`rP7hR81KV1A#K*BdOrXdfE|sD?-sqv5fp zN#U-c#yM%tKr;oa#9QvaTQ-=F3|hZnUuM8hqp1n+s9y}4GcOL=o(D*@r*RS*>r-{d z+x@ZATwn^QhkYTBR@OeQI@$K#51z|cv+b_Odp?%>R_{#GK~3e_!DrJ^r~nt-4xhtV zKfw;PbiM|Ht%413_ILdXIG45MVh}Jam>rwu#s+ZdvwXZ`+XE&B{Aovuc;k^)Pm_DJ zkgqP__dGnO;EduICc`+We6aHlpEA-K{StV;A_Y3<4HkVk=)bjo!#f?WWjS>z$RWPs z`bDq%4-dUQWYkpjX;DCJI5jrY3_BsxtCMu&?tACte*4RWewZ^S?!@*OY!d(PdZk-$ z9`LqFHSG%(1m`%4;|T=8L4(p`Nr!m23ksE?@ z=Thd*((d-ZS=Z`5x>^wpZ+nTQh8cJ&Ge_-ynZ>8)7nS|OoxPSI~}GMMy?K>pCveciQWnUG2(>`CQa|7qoe2HFwo-G zvV8Pt9QeiwmI=PCi*k1P7O{h*E=;@zWzZE_>)$(3WC}hUBPEvbsyUYm8)ZxYfvv;W z%T&gaQ;&V{b4WSZ!*>ltOk-nUbOnESRWM3z2x(&P^D344aOufKwJ%a zSCGZ=x&{A=g7uZfHGb{W(7^l6?G{4adtaA5Sw>8xFf6c@R!BdjO&|3;@oewT_@JZ&SRC4O8e?li^FHR;V=0c z&?^enF9ol~s2ykP^oZidS$2qADeInDSpR+v*o&wjnD#Ym5q-z4(>|)Vbpl@7;1x-_#(~J~UIa*q!K6nty)tb9a-Qn~I-kx@`cfuq$=QqKm2%E- zxWxOecDc3bee|2@_pKD(jP`${5#Jzv-zSBux|E4@Hjc#3!I3eR(N3VK(Y2ik!)6t- zIAM7XjJ@0V#$7*tNV&SXF)%X9t*ox@ueG`Pw%y*kN5{mF)hH)qd2$%GQh)mNiQ8pI z2Bzd(TuaUun)0cxtR%=!$<3udJ|-#eJ4&CO)q2Oma_X6Fm0!%j$M@-O^E_CLKXsmW zWbTqknNLX$@%^{s`UYwa&7W3-HmH*WCydLkB`RtedA~R_^(|Aw;$ocQ z({qnv*uS&+J5D_zYF$9s2OGh%C-d}&=gWUD*q?k`@TOC(YG(uqUKngmLi#eK9NXWT zwE6_=HMvUY_=gZcyJg=8z%=HrDLV zq$CPuPqVD%qPM9w6VuUc;Re#0jdzO`Qxh9$tk@K9+n=Dt`o# zgpiO8#)3+2zXZz1(XTCL{HDuzQn3l^aK+t-1nkE{vaT~uF&OC3?ilDqcdg-zpG1{i z_c9EohVN7MVYAbB-G31QRD7FY!_?P+MHR(Z650eWgW}ehSLU}bo&?;zDI^=-x_>GL z?f+A<=a8D}`7kINp#C$c zoan2vNVl)I3h&ZM-yolc7o+t!yr(adovm$2YpWhQI-_D>AdrXgSvgTxTbm80K~08f zO+O(;W4vY6sP)T0K!Ftf`J)e=URzuHe3(#}(km994ucshXtrldmEqv-VPY}^&$A^O zyTuv`*X~JFL{glkGN60!v&h90H9eRG6dQ+mfX6$}G(lO-iA6dqJmLR(-T@F$AkJWThdrok@Zrr6V ze;KeSiUVSicA5;I@%^{DCdKL=V^^H>gF7=8mA$B0Fnm87THchd6tMhYuM-UK5e{_ABM-^F)th%zA0A6wLW{=7NPh%n4!@*q_?Vc+c3y6?QwkRs zE?D-2LQZ7C7aj&=aDH*VmMu=3*tn#Xg}PAa#zH>XzOxw2?_<#Xe?5Wo3+x zl~o3s5PF_~G3aGi!fmLs)Rcc6`l0XfEX+_~e{_-^f2*ardAKJma__jTAl)k8ht&8f zEAtc{SMydaUK6RIEkJf**a%0(F)M}U)T)$4FX+@dtHT$REa$q`$ZT+MKtKBH*hb$f z0KEKOFbwn{fkbQ~eG-XSN9QyHZ2iQ_-V2){RM7Z%nbGjWns8tSZ^6H>P#6J94nb$o z6$UxJc^Cje-?5oyIKj314~V^CRU;IJ3l{zQLob>ck0^sf=cE4Cc@|w9@?bKu3N|!x z;_c#LRV8I3r%uDqgW(dSZ?2GAB*D(hRzs0MW7|sGf%SO(Q#gPZN;w8M2`#}FhObh| z^s1w&4;{SGig&3=81&yghmncsvEqEXCl$@}z11Z|L`0-uOh^{_cydWccZZB!)cYe6 zD@tDn2P}Yb6g@+TB`)QfMk*_a(05W$7aZ zU9uevSwYpC48#y^E7tV;rK%~Y%-{F*Jx3}MB+j|1;)ur)+_E-ao)OjR ze*9Qcv?p?Ldp!56`1kJ%@s3y-)1ae;g9mTQ*PkUN?h!TG@_QItcSq-H3JTM?E(gUp zI;5neAIsw6;(pcc?d?(Kl&A?tjHKY*AJW0*_HfqX)a_oEf6Kq;=0h=O1Cw z6`ERy{%1E%?%q+jv1R??BMF-y-sL2ug(NPrT_qK1C6cndtKUveBW5_h!h424>i`-5 z7Ph9@wORjMue^D)`SFAn7rO_+{GAVuE7o$7k{lu#C1K<_#+RsFS|?0cR;+z$srPn^%#Rwk9GR?}1Xx zUk@f>{s|C(6WFWz>=qt8Cp@0hol%%1Kq(C($)0!unGeP9d`Ol3#|*rWXLtJnEansSKE)6sf^}3h!V9HoezU%l!aHZS>Prn1@Fh zDiZMMPO%7^W|XaxT;BXOaIy*P6z`sV`G>TI{v;@uFJL~1`MJZpo)impo+Mu_Y^YS3 zh_H@{fx)h8sRfOI@klQZcz4L5xc33Oc>)3}85TWl!jEd5YqYfMHA3>e#jr2}6fthc z>+U5ibu~-p`8@!s^20SeX|vyNt{f7&9Q|Ltf!+`KwJ)O(C2`2XvqMR>@fu;I2xSWU z;g1!DSk0O$vXF(LXSz+xy@RlS74+RrKj7rlKT{`b*ZKhRt0?bg;dY(qv?^C3x4bHb zVlpXU;)Ei&s)@{(ZTTt%p{Sag>SyvV{8$2m*1EK4Mj&Om_uYi50k>Hdm$*4srzFYr*ZwwnVZiXuh&y6*gd>` zLofw!F>JzHLO~M@lOzb#1mCz@%8C2kvo<^ETndKpO)+#^1RYG76arpgvbCWmna&#; z)6cB$g%AomKZ(6uK_!9Bzvc|4?qRB7R*tTx22$eWWc+zkm>M1~4t=Thid_cJ0uHr6 zqZrV+%llSFzAyPm{saGolZ}ne)FbSs+Ad9i#oUlHO#5985T&lwR#f0^k#BE#JF69l z6$@pH2T|VMD&F}*ZT>8(A}&mczvgy8FZ`$xVl}0@-44H-y%8)&jxkohZ%i3PK4_iu zmNG}Lb`L$(n|A=l9uabq!LV||Z;CX}Ky75s`bwJ@A@-QBmH*F33< zr1tSJcW$49$O&J(*CBwpj4Q;09d@KHYWrTm?(#7q*Td0ntkqC?@ z?Osx(YeTo4JA#=PA{Zy66BH50{QOht56TeA)l*w<>Cv#dnnh25N|ZOjdHM6O8QxeV zRp62!zoYq!5Za=#&pu(eoIK#RCIW?DHlautvhKC{$%$JOWZ_-blDU=M4bJF#`u21n z(DirP&Nopp^S-g*`C|x3x9joKodr*7Zt&}}Re?_7s?QbWhWpk~V?zUeiH(o1XsAa- z`W*D-sQ4A@GAPG?pT*=8zn^~2k?21&_7MVgk($H0pmDq+qLj|WTlD>lr~;}kQ|IgJz_2$^s? z=FbO>vgFJQPjTKsFJF1?{_yM-AV)D3_~RD_2={_g_EQS{6{^iejr*stxleh9@>w6L zpi4u%pF*euVM-WI1^X+v2rGhO3?(Iv{DbeUW<|S(Fs^|T7LE!AHJTZ-lFBUueUzOe znck$B;^B+uuF7YgfY5%~Z;D3Rl_K|!Ngb_J3}>Y99C(Mf^>B#ZVfem_ESh0NmVSTG zF^P((4~Dx?(o_eZb~ik%4^sZqwgb8aZEIRW(@0oBI>IAHC^c_#0F1P%h7hs=Lb2O4 z59AFVx1TfJ0A4`%h2w|Q#RSKJJs58akcNGm3W{CCTEh8Ep=ONk~7Dn0YkC(>J z$a_zMQKmS%rxLBI{t+NPZ5MlZGx&rK%T@IKeH{1GD~$vG!%Ljh2RVEDT>GUuW1U)K zEKqj2o8sl;OtJj@sfgEw2+{#&l2u#1&D>9#)PSPqHn&4HHa9sA(Y_X#l8AuYa`cTu zSTGE8zR;TT3wYiZyTp45=H__%nd6vjIhKBW#f#hV@_35AVxwWoEC!W)$IP5~T5Cen z^>Rnh8;EV>BFDD=#cy*M(MiTy4@|QSaLYzI@eyW4k#*p*us7-p|P~nBF{1 zJ)3wpBu57qeTNMbRs_Gm`hdALh(zsB+qVCVLVe(~@5Dk`Qs|@EM})iUL9$veyZC@F z@5H$Wg{7v1`tAh_=KKD5*mE#ZBfu9{$!TC(c%+b$(cHKaFd#!tkA(C#PWLAIO3Mc} z$~OW?@gM2f`MHTDCw~|r*M6_9TUWqk`^k2@ZZ1ZKMf|T7`w6R#o-jlxN^ZT$O7{JI zOuK!89)Kw->5Bbkz!=x?EHMOA`C8LIXT8y4F3R` z9IL<=)9@JpeQk~i$=|xQXxnk;m11_1>h3xpQl2HIp~P+Sxm6Q*N8dS{a0NBB>)-B@+fl@_xZ(0n5~7Cw+n=$B8bR=RL!_KbKJe%0t~cYd773Hx)wg7~xZR z)Hn^UPJ=|-)GJ_{S%2RDv#8-ShcI z=h4O$l;;9il1}T0YukwD9Dj-wf0D=YnHn9P$93Y)CRo!vIVF1&tMf5ecH>5{3x_r9 zaKun85#|7mB$_~T229S(Bu^B`IJ`Qbhqlw*62r9S6=hjw7diZ$XJ;o*%DZrGpwCXZ z)E#YYif-cwXpjqg3xE^q5=n(br(guaOta zxXew*BFWeG&6W=wj78qv_*Pir9d=#x2@8KBdX0q#Pzbmy1+I|U}fE@Vo zVCG3AN^uS^?hGhfOl0$+lXvEr4fB69&7v;Y%9HxS53l4z13F9aM$l}Y;BjSGrS-H)%A zUQq88IYhBwti9rk&wt}tAAwQ9}ly za9_P|XWG;^MD%G3YIEsR;Qnaiz86OdQk2rwq54p?{(BrQeOUS(r9f}z*>xp3cAhzn zi^jqGJ(@vx$A2__|6VYqA8RdguvuS@qd*U_fd@e1Ia9AHWn+g%lmfe;@ccWjVkUb{ z>}jZ;;7>a_gy(6%51e!5)u(*ZA+_G?rgrn;%bu^rGZMJgriSpICwu||x+CL(S1|=) zoEKJreJ*{exO_d|wyY^NfCBE+nu|QD%rP9}3_02{Dr=ca)_d3iF4kK=#a!9$#tKJv zvyGOFLVJc0hX%70&~-jr$7z;Nc)Z#j;(N*su#6WVS>rHa*Hmu@^O0alL_jl40u^;? z3`@69HlR?b7z_k+>m{kyFp48hCuV_eq1Jl6_;Wo{tSD+7o}HdLef|3LU^j&*7%_N5 zN=wkutGf;iED9_L=Db}Nyt*Ehtg8gie5mWJ%FTb@Hd2pIcAPxaOr#9+f%N|3*UqNO zMscF)6%xxXGGAINmVLIST3y3@i%aY2hat2i+T=g5;3=j&u{>5vPVTaS;3 z+o~b}{CHYxQ$S%l@f7IWv#etx_icI_S2TU-Mvs*Hr&``G$T2T7r+VHhgtq*vsxK+3 zHSuxnP)hfY=+MY{%rDVjLUj6YzKcXCm$32wd11xD4G`$pprGc8C$D##z^h^aNveJ@o zurDtMP-Sj2>>|4ilz41fHUImjgq;CDkU?R+{_X&GFYSufsV+8($ROGaFCgoM(dOIs zBOKZV>PChN!$PUx3-~4MI5|i5>uI-32?gSggAj!$dKvTTH!Lo$)bcszFoCQI0=4;@ znmCP`wj5BKLKmf6waaPa8NWrN*_oZG;bt{rD~{NMq9Cm2Y^db;-0;TuH>Y6^1A9k`Gt`lT3KE$1L@dg9utm3xZQ*O zG$G%fx{ZuXp##=!D<|OY360BjH}#DV0-|dtTF8S=I8eM!#3Tgbb(zJMGCS2hZ8|n6 z`i>NXO^C@?edv0LV0D_CY7Zv)@Tw(@?FarpAml+ z&VL(~;#xQ_I*}mi7`Kd2&Kh(>=JWj9ia@{Fydpr=Dk#x_gry%I7cF{ffKquSsmpGG z{EiqU*F50$kAy<@pW%5!@Inkkq?xbV`61csIl-*gW7vesl=R2z+XiBwZYFYuLRkEJ2#=`A3u1Qodk^R=3rheK@>tOzwTzlAGQ!mP&v!QB^_JMzQNp= zj7)u}7Ei(8uK9W1YWdf39`(}?Fi@R@n4x!OD5smH?(HA%hAvg?qldE+X2^UTBmmx% z|K;2YXC! XA~vCFPwpWVQXPN848)qZkpGyv7&;a?LpJ42Y6=c*=0hURk9Py{r_C zo*toC2h(}2$4_J=?j8T%4wJ41&TE1sF$|b6YX>-PqNJ^YLvX)0?mC3g$q4d$e_P_? zXUsXM)ZAKrStNq1Tl898Y@@M+yZ)OILwK=$a=hla5le>Eog2n?+Df9fi6A*59k7w9 zwIgrH_-Q&pXZ)w>Vla{^u|lYJU4psBvpKV;kKppkYVBV1(CrFk)_zJ#mih+NrIUZQ zPwgOfabbZL-BgOG@Z!?>AZT%Z-ZTS?yLnHIqXS$&K61!~c*To-%fQ+)xU1lP82wzSJm=a1M%RY?cU-5sa5AgA06n%BEF%K*bBs3Y07@qNW+bO7=o z?SZ&2##`gRzo)*l40$hgE_{JWRQ@@|VpEaV&K*GcVKbe32z*ug6P@xdNb|MR%t@^y zpb~--4%ty{-`cWwG{=*#Y_o>judTzp^*{ZkI!`ycz%SU2PL648n*mZ@4i6iBkKiJ8 z(UPw91o8XU8m^~2tLC^GWc%>&mh*@7)O=A^#WoBE+g{8h>yL0zV?-?PDKxhOYBA)! z5D{8^?W*1VA2^0hHW$t<$kK47be^lm9-CJszrx_64CG&vhUrG)oAioEBn=OZExzX@ z%PqSbeUwo`Xm36b3BCpu$jw4t6_*80@EFw~ zV^44kABiLSpc35aZ|>84Z(XIUZ?K?jPn;QGf3b88*zVvRc24oFu(OjBVJzQdy&>5_|IX;r8+Ao{lE@_cT5U=S9CR1 zdES80obYjlNzt{(1Mmp_4wAbqPV64DJCtp*NRmG`+6Aa9)y5 zCt2|G{h*YZPw$%!^nuXr1;PRx4(4D&w1)YjV5+=eq36;JxF}$G_|owNdo)m0Y2EurQ_7IzoEeD(n1--Zej$@$F&TM>R(d~$ zIBR;nfBTz09`}ld3#cFso%r1USEYW3{@DdXX^1zUBuM zjfQzYy{Q4}**Nf@63%p*w9de`X)inUb`@QY!kr=oWAR8Z?;k`EnD$`+g1co|57{8-H3&|aljbrbV&()fFNGA^uoHSLnQrN)lzD{m?UgW7pE@( zb9t?_Y<7bs2K8o?*7@O2l4;v5U;h66=GL!)a`czMKZAi2gN;M((C~_0`ZdNyl1g2q z_FIuh)62Hwf|+hyJ8A}gL!hs6(eKc)EvwZh@7l;M-z&sZyPv~Ei|RVfkPu!Qfn1^r zjzRc(yPA$TDta>Uax>8IzqsW8A{lld+s|{ikV(?(yGWdU@AM8rqd5R6{h-fDk0qs6 z@S+P6q4!~@{c+HjBSuKL3|KM3({=qGi7nH<(}4H3U>_}}YjzPg*dt=OQWGZT=4Oi( z#`=Ipc?9{CDA@) zRk&q*cJpd43bRIYguBUjqY+n*%nbLYM_9>Bs34l7{5k%Bm`r zz^7gL)Hl$^f;)g`deh5HLLlNx^*wYA z-X8J9X5ttzn6E-l>OT$wvB))=Sgi&pxEq1+018SuUlIenRy*KD9I_TwF(`OA3ZNlWE>iqm;azwBsle1_>!aI;FciMCk_Ulci^x`F$-_2;g6 zy@m+5>i3^a>_TSZgsG^gK5*M=VPNoQX(08G7{EoJwqK&RcQ_2aJU?y$Ds=)PiD%B& z*{4%;T~5?$hL3D09b>3i070oMm%1Xj<}2(zPRFGOP<5wh@HLhDUJo%=4J4`v(=Ro4 zR7k%K8$!&-?ec`uNn39fBn*rZm6ewIAA@Nk01b-z+YE%S8Qw66nEV71k^Yv7jZN5u*65 zu_=g3a;)~n-#L)8oS6Ks@=E;5rnKJ@bHH|&!lDLI+UjvTI)Zm)s)W|R~Wyz9PDYX;E7$8D(K`$@`;K|a-E(fe})Hr+89 zzb^EQohA_?(d|;S&p#&Md}QS*oRf3v`DE(hlukrf2~=RxEgx2x+?0;BW*4xLtGsk< zLkfP&3?yCgYR84M_Fri+KPP8lE@;>JRR`DF#P)pg%?0E$2SsVmcO5+ce>!TJ>aYd@t*|V(G4;n=S{481)* zBn()&EL%n4^2Vt1QX5JbX5bleY!5~)|MOl`o=>ial-Lx%)%(`STfbZN{pWFI7;OVx zOT~3=T0wQHl0x^u5jWQbPb?k&vhKg#|JI=0CFYGU80C}*fd3?VhvklFjF8aKW5BW) zV~+Bl`mWC+`V6HXg%;WU@xGsUtnLM?hK2$Yp6*TPIKD^e7CSgxld=5SEs2f=93@QZ z51qnm{yqFt%H`#M9v}?)1QI_03hy>RY)O2BH)bP(ERI2Rr|N&1Zos&C*NgF*8l)c9 zAp(HpFGe`VVH68NqO2(&%QV3uZCfQpSxNA3aEFGzG5)DjVrA`l04Tuco3d9@j*W z$9+qgKF@okiCZ96w)6SkRZn<|3J3mchyfNh&EB5Xj>n1c-Ra^asG<&)r>Z}1?5kGs3IQ$&y%iSAb>1VN=^f9XcY#mECzREm0J?!g~QfsJi zt9G2O7N;0rV;p=X!2A+>b#-;|q*?j4yH-|KD6`t{V~sWeW8sHtp@0`(=u!H+CmhAv z`o+*Ucr&_Vs!!Ak$*%65EiG#QOovv39NukSLej8tiZSt^!?~(Yu&`iWxw*Y-n&K=j zo5md%4j3{40fiV0+w|ug#CFr`fPMmobxG>)Vl&ri1H}qOGmBTr};^H@g09 zISS@Vm)Oj}1o`I$!Xdi+7l zB5&T*=hjZSTeXpr9w9J^4qhBmax)K3o}E?OS7GIYfuBGdN!ZV>a*W-cln1Po9|!D9 zCz8n9HYg5cH~kb^b{cL7b2I{2KpYNu zkZGbsXb3d?z9xVgTr`n5=6gCn&wK62F}{Qq^azkeNA;?zsxH$dMor2}8MyG$bN5GR zi{`QrKqy^*2j-Pky$)tdSfE18c0oIXk7eXz?amN*q@;UeVSa_=AB8lqA5_$PVVAx} zM#8VF{QG9M2JZm}4nEeDfW(@MGYvx-ze|_ZfFTvA<8ej;Y~9S!pQ#@pQ=GW9B{?dx z%f|_UW8f65-pW9$ggFT5gOO%Zou`Eec*7hKHwUcxUS5wWs8t;~xVbf4;M&eRCPMfu zRgpB=p+Z^~eOES;T!to-7AZfC4^^g;Bi{u&_D{a`ZzH=^my7p(Fbcf;Ef3x8|F5aO zn|BU`ccQ650OH5B-?}u^_lE7}Kgj2Rk>gK8AiA;(&XJGFCOfTHZAvAPV#I|C!ALJT zvTPy1J@?;7f8U6)L8GfJQO98JsLLl;gmpD|5iL)!Ba4)zGJX70tEczS+y3y@)6T`= z`i#qUf$t6jZVE0Nt{ZL+?iBbtFDvWcRo$wlR9uruOV{OGZmq9J1#v7`RP9nqjNem0 z1zq>zg4B0Ki#mA&9i7hkEb3mU)7wO<$1+jB-qL7CMMtZja-+Rj)pv!_M=ZF2_#vaA ztjBJYm@CBsV1k)L_Fj9Jwb-qSSWy%fRqsR6wMGLOqHH4MUiD zWT8x^DWJJEojmglVwIZ9(ji8gDv-)nGOT&o^WRIT-Ll(!&t}?8rCER?=BRLr5xCgF z6VKj@4@82U0t7=Op=<_0m-vP6$d5Ahujo9dDRE?kN=wJdzrzA-1P$0T(?wa<_{1)F z4`u37RNk>SuQ`^*ZFyK6RN+iZ;h1-~V%W&R86s8utRw1?g8)qFbcz8@Vg;|UUvM`e zVfbtytT#U$2rbx4m^QL`Pt`i(2=`c z_|esf$M~oee{9OHev{+5;ED7TwDQc}<`^ow*sB>@i>_0HpwFi+NRIc~`I(MvVj>1J zSp7!=xQ#pxtDmU{FXu$o4!r^j!!r?3Z?dWH+C!g_Fm{`t2*2THy{-pmUkOX0L1Jt2 zhGWT|C)|FCEy_(Z1Jd{(Q11qo^`GZ(kU=HgAf?lNulGF^V$srq9@g7CeL~GWq^-4K zNVPNkzdh?Y0g5i33OiGL-`q4qPWmi}#G?Wh?5>v2iVvKX+Wm>0d!h;VlTD&#-ptbH z>8(l#ws?S^{17+ETgyH}&UMS2!?d0S$eBUVO&X3?KzEH8A_Bpj+M?27)#l~In}^{8 zH0F2KOw}9ODF?94{x%pXKhMd0lD-qgM-vMEfp~-Zgg7xL%weR$8aQ@SvuwQ6kU!jK ztu6r&mzKlIn3Y9qYio73;j^o(_9nPQ-)& z8*aUV{nm8bl#%>hT~P&B6TfAQJ$lbjb{x&X3oSlld2g1`LU@o?J3^101zsO;Zc@pw zOteuANr&q!9)vy7CUllQ!yYm_=lOI~O4ii7iMQ^NI_m8=4bRtas&!T-Do{1Q`ZgNr;T-g86}Xbqu?k%)19LtV;L z-KGm9;MgI}J6xg{IZ-TmU{5nq+~^S~dbaU%=HBqZhev*<&-Y|P+Zvqqs; zDEZJz2i2CI6;&Gb``r1I_`LZDOveB}C&-T;GNPQX&vLp9fFDdK$aps?@X4%`|FZV> zWF;!@x>qO64&ay`^qAZ8_Li2F*>Iv}X4%Q?`K`6Om4!`k6fMKL3hBE$7!C?Lgbj0) zFQb`IeRT_2Jpe$emSeYoxjSQ2>@g)Lt^51NIT1z-<_tz?AL4ABg;(4B{QOw0XCQhQ zDBBM2UFJs`??O7vZVgL(K0inop0G0W3ZL=|keDO?F)Y_n3A%L#rYYx>2v|PE! zN&RwuN(rVeS&dM2$-p6P%4WR#TAvHI#S2ppgk+oDIiVI6cpLhRs0bAWsYvwMjL!FZ zg5k6Rj0~;<4d?Ci78|0xO>+FI@|rz9Ba(s^Y+;iv;4pV5a>2}f8dvY)bq2WA#dj~^ zx5fEm#bU|RW_xY$$|yXH8%f8rr=h}ucnXXZnNkW(Wt*4MkQ{CRVHoi1^HQN)o~L5g|7x$u@(xmgR5g3$^5aRuAb1) zPSnG- zbg6H5vBmt#FFE1eXq9$>vrq}v?riUa?|g?>LfNlwm(jHRe3s&CWpU~q>j!xxkiaEt z%zxXla1{vEvKIIP!=>!?-?Hi#>yW(Q4_*GS*N9S?Eg=Py7EcHaFc9F1!XS%p()9Z1 zlWATM)oeOr1#X@HM6LI7$(rnLo&nAAX-UXV3D%&HzQserT>)*}Od8}+QS`32g%Nv9 zg0ts_{E92}03qdcUf{Mk`^?eFj zwIYgZ+S({vKUZD`-w=@Kde3lZMttKZ{U9N6>DvT^52^y5e|`IG3HMyzm~(|EH&dGQ zPMDotPP1Gq(0iN5)jfQ5Q{bc-=SSbo5I`Q*_4HSGS3ULS3Gk@aS3I6P7Q?t?NwTtE z7GeZMRAT@`X-Rna@f z_5|#ml5pb2I44FR?!Q#R1$(Fq3;H=~C{i)M^jrj!Z1ibos52cukaC$B?IC!FJmd0# z`!A1%R`fiTJS5QnyTbpzSUGqn*G28?L-&bh0dcNytDYNNRj_=Hl^(JS>4XO!-Z2Z* z#ru43GAh)F%L=`H4|IU+$zFf^1-003*YtAE(y-kc6i>%pMpghSSLq~Gb_%i))Qn7& z+Ijibtn#G8G|M0ER54Cx;yGRcTp%Cd*r{eU4rDP@9kO;gphZcC#NH=HNRHbp@Z%3C z`egYDbNvkBoE`X_IA8nT`2+-Hge7j0owrzPB8Q(~M5ttD;Sqba9 zHLcHPBUjq(Zm|~^&znst>IZTgs|k1pzG9D@c8i?%7b&mmBtA!7-=tQpzV6nnk(1wz z;%^$0!xe~(&*GC-?sxuczU^((ucF#qjJI=NF#F@<%eOqO#pT1R=c(a(T+7v9JR{+r zPV0Fa2NSQ#OOX6&uX0_m7yj?}jc!Kx9xnftsC~~qtj+p`ud}TbgB;@-?#9hb_{8HC zUtfX766Tr>8nvbU7e=-TM+_G)R8S|#ld`uk@McGI;bMih{uyn}N9$GiswBK#aC-Br z&}wQCzb!Ev8ip(^x4O!5TUS2UhybCeYkH?)nfMd8~x$91e<{7%fE?iUKx z5ZJ8qcwA@2vld!8Qy>cR{*xC4Y3c)Z$j{FQfb-fc#=^dphxg_L2;j(eN(Vzv*+)jr z?cBYetYp{OO+F&AYk!Hk9!p&tLxNp9M|ZWI!MPq43^?#^E;tx5Te!YdO85{*9wp*) z=%`mX?j94~q4F*jwyy#~=dkr9f)954Co6hOtQcsvK|!hd?%|D6K3*hK|NjImX$jcR z-3DGQhZ{y^f^;VgpsP|?WAYUwmb}2*FK?Xv@h(|=yag{NG@hnv(Vj#gh zlPJN@Gh>Hn;sd0#H_N{Z$3!3;CCi6cknH(0GodqUIR{JYfajmLJalqvvJ&jYrq!nZ z6?lP86=3RE3Rwp{4}}gbx^SycCn@Mq*H5sxmt={MJ7)-BS&woo+At{I6DQVpeIu#G zePOM)VKO(&S$P_1giqw+LEqu^_xrHIDY1mU4@_q7M1zr)vt%EPuN|eqid2<%-!+@} zHar`y!e@3X3ebsWk90f={uWCIrTU97b~~Y?@Q$1U6FS)Q)8_I!SmN&1Oio?#S_hcR zNAX@UtZv0riM}ob;5qf`Vk^C;0*iF6&TYJ-`GA5Pt)6mcPuwu>PKkf?>^&df_1nAn ze_tz13f7)!;G9C#L8e(?U;_@M7s=m4b!<9=WsV`c$A`x{ zs%&}XKz9sC`OS_)7iV`dGIog7+g_+elR?Ur@Esr%O*?J?$E%ma$wk)D0)Y6{;r_x` z+Dpu>NEu{8=6GS%=4y#a%JR86$E;0@BHDIC$V(s59og|3r1FVJ2fOV|h3dUWOwku{ z5kif8*#m%`JG^p{BfF38^yvuJh)Vrhr%bS0kJ8%GwgoB1j~h(bO!Rt z9@vm$+!y>tx5o`*Gc2%qK!8 zS@|QYRNY6nrFJ+c%tyU~CqNW*%VG=py}zn zW)v+^3|GxVfoGMI?-VQe7Hb_@oTP)%sC6DWv6~nj{u1Jq`By$_Y?7B2I58 znjitgJLuWOS94Dt)4^iEqo_UX_zo8reOxN6?BfTuyQ*8Yo6>n|!u=-_1Sc%pLmjwD zcG$SwJAZ<1vr&4$+b0hTT+}7|?=y)}(B|!~t6>bpk+D6oeM6%Q=->D?#U5C|AHEEv zTUHeQSp09vASwbtaZ2HMMf|DTiH$1UJkfq2W^zq#aHZ5s9f(=PSTH^@oX2Sw+`9Y> zJ9G4SgF5?;6s91UtlAaN|II5YAY_yLPBjZ$wcgHv6&DZ8K%?O`BwXS(8lT7CWV<;j z7pglPwDOouv{>~a6f&YMw|MfR<@L$9#J3GbMu;BNhJwgLLMX)f+&f(C%OuOF#T2Xy z>`Pb-rYlZR0#-^N4zmcyn0sf14&uODnePOsET1xkm+Lx8a)F(jUf9r!S=7HzeBd8L#lya zScic)a{mG4kiy8qsu2b1Xr$uXHiSL6GCLEy4%5sGNpD9`I$6`IEq`z#laG2mGbZLV zXhcmx$cXs{+HYIW={Xz`uD;`0Z>QWU-R;2R4Bw5-Z-Fa0|1BFePE=`xVcBJy;&!#C z226)!Ta?TE#%|Jw^vG#pVR1XJ4+uLqzks&RTf3sX1{F>pGCShI5EEwsz^~Ze_Gce&Q7LpmU1xYX1)d1_z zJqry-sIPo$HD<2V=?Yz0nEZg+McTtRmC4-b@zw3&*@EsdH~&S@9}>aeb1#TM$V za6pY3dHMMb7@R$q$4zT2z9a#{hozZfOTR0thyU-9;c$8pCe|V3*g`ek}#X& z_^keL9ahRn=*oBj?DZjMwa_nBY&^*-+kcB>IAa5~8tWsFoWPRu$Rll43;3Mx2e*fw z4RYmuzcDj|Ya>_u5#ESMSAxK@r?6ux^?cJ|Y)sAlBd=JjdAFDZZh*yaclN!4o=aHd zNfryGfa|~$solS36J52eH}C8V^uDg##CCi}#HnZab% zE(K#_;}E7J72$h4ujlJIYI1V1WR{MPbKXZauOC%kr?X!~{w4p-3JqE=g!JtHlzw#H z&GZ*an<`@jx07v>rZOV! zWce!muy&EY_N3_}#ly}0uXGV{-cgM4-B&P32Bc(5)8~IrOblU9gM&joUo87@4rAd) zH{NYYso?Tq))XOHn{8R`ii}eGgjU>nleoJG%t6KIB)NU|T1Vf!&s_9UQ`i(o3#Pw5 zgKq-w#9_G&Z$oj9?cib&(ir1Vz9e~$ckUoWPsV9|QiuofK@v-%_X39?T)MWv=Ej$T zh`ybOOfrZ4;t-h_>@e~Iqker5*=kHfv47rXGwFC{pu&*-I& z{L{d{~Oz3#p$Lf0R% zAMI^yq^Jnze2UoKciPOc+@JMgaF&kBdK(+(-B{6f``>M_4g%F~*AQUHC7(0slJsfH z=KmOEc`pgQMutRw{qiLNn4hdvC-MIMdrsyo=Gi-xJQI{yjKZGFkGi^y0KPaSFOLF# z?UTNj*(a1Ifb4C$*6Alc(Ph+&;6@VnC(G)=6&JI-zrWvxGg~<@U*?VL(QHk0((P0l zjhDlxlJe22xQbAVf|?2mo%JirU=w6~61VG0^=J+yV)YNxOu8yF1B?RlR1BQ5xGIXt zh?PUh@LqD*TTnmqsER%nGQZL{cD4)%r!W))C6S8QRsL7uQszH^0i7Obl6(WoYl%5N z1Cgt~K7?`~MPe9@Ld9>j@8{oT{!F_%-=rm@cx5?Q!=N(+n&J~5?inka#WP_)Cv}W& z{{0*BNd29ZUR`a8s_ZspIFV3gATUA4ibB=F<%X@TeA7+_0n@QP=-yj$rHuVuM|+)? zCJ9ptVNt=roP8RZM&GZ6?iKa#&%z8`hOjqkUW+oPV(Fkm-)qdm-a6W9(l2u6W(DaG zXO^^_Udh(H`rJM?RJVfv+)`}Doa?{*>}K+-fU(0@+`^Ga{L%O3Aa@uJbHs+rm2b-Y z#lh$*@Vwbf(yq8uOSDmv7Ts0^U|KS03)bI*bX(d&bot-Gda3ayb>9}=GP#Mu5!0U{ zXs?Lj7pu7@E24>x7~b^sd8uR}k^~V@V9|s2d2iwNUB~VMnRM!l$JJ(LX2=*i>VRc$ zmqU<=%S=jIhM%o~M_QBqk zn!3eQSzO=#voi1Hza%s;`Z?IRWTyQ6YyAB9D^h&LLtg$1KkPEzj;9Z0v5NtXs;~on zaZ+|y3Ts=G&5zPfw8^WiZC^Zo+=q-bolH-zVa7J)!NSdN7ah8VL&TTB1vBXZoD0#? zX!B4%&a7)S?-3eQ!bG*w**YOEQP@!Ch$l5p_;*bVLAEExplZh9y2q3o3tiYo1Q=!5 zG4l~Q(B70I3|R+eZs9b@N){OI%agji6fd`#YQzzjk18?4PJ^*7s4}vr$WAf!3n^HF z4JlPBx&XEuypL)+e8Vq11Fb{bZ7UI1ApWjKzGrLP_@QlT#Y+kGO2-gEY8j5V$RcM1 zJO`G8-N!_a>}k2hh&!q5i;L^*mjs=#pu1A6N1>zBa;SU9-?-1+&QgzAKJav&qwzWY z4cXe=9p2~-@452FhI0wfVCyvgy@GP#vyik(6CEcbEe#CH^Fu(r90)m-!rw1yM%s5g zc)-_XEkjuTM0&!Q*gs43jk$jeiEcv0&_-l~e#^;*Q?=NjBLofEsRm~iL^4>M;{TUP-lEVtbj zlqqWacKi*{krBv3ObscgO+D+8-PLC@ssNnu8@US1){;IXm%o2Zk&m zNgN}!pk6ebsY>-$6jh*+XVzINcJ!r4(Dx_g@AnkbK5lLwzjFK@;MZ-!GNq-WI&h}S zr;K{qPBCBs2=nUPUX2bueGtiRfwN5#dd&g9b4TYPByCMPWo1VNFZrt*qn(@`yN=5QaJ2ipVbSX{>`O z^R{gzSQJr>%x2;cMfE~8#s)_F9cYiH5-qqO4>oYm^bk=k2aD$&8SysyNFI{K+f1@d zBIf6gN*IaL`1p7T8gO|@di!)@;_Diwb8Xv}GZGb5f)_TYM9gXL8LpttyHm&JtQUJXrsZta=Y;b=IZhrgf7tdrwr}R<`vvV*jOm z<2zM<$k580S}K-WytV;9_{X}6K&%4rixpH#cZC(5Of0v1P95^zrly1 zUiV|iGe}eAd3o-7Jb1{STD8u09^d9pL!)>xcS&}$V>Rn)-jJ*M|aT0Hh`%J-zIBZa%M~v{YU00C@g!F^si( z7VhHVWhV&vbW=hvC2_rObW~JGgHPRu7aK@(SC%B7kMGVmQT`$?GZ%@uyEiIk3+vsS zu9a2n0{3Mudf@XT1{qoxl1Z=$E9ggK$w&Pa9j5T116BsDrVlQyjZ&)%Uh+HU{lixy zyvP{)`Vb>#i>@UIzSY0lN>(8M=KQJ@oJb$e8EeVr!vgMB{!1P3j*>=35nIeFV$k(Y z8sGn@Zb=tz)x_&j<=;8$TLxyX%H33KVYg12NYEBUI8jRMM$K8VEKHpEMzLsevOn&q zh1=^T8ptQ=rB!>#0fyjr%0bLSTJzkW7s@-1eosROT`+=p>%d%lhIc$#QRt4!)%J8L zUluOCwniPl55-;}M8e4#!i@!Rg87AEi_=F+@qeVgwO#A`aG9KJ4%%}Ynoyol5^pUn zWoWtINuO*y=E$@%wbGSDf&vDf2Dj*k}gP+53588^gDj zK+TrFPPG&saUp^)L!*u!gD%;%{HtICwwAgpwz?N&!k;f!=&6+GN(}93l`i;gbA^tO z{-2Hg`7>Hvh3@piU}(<;#QgZI&zI-s3p6J=Luci!v zpO*m7gC>yaY|mlQa{893$cftGie2ze(LA|u$|-}!(5W*oZ$-zx6A*>X+@L~Td2KM| zc=F=jAy~v<1)l!IX{`(nv|YlepR+?6PGL`AwE5O`Jj*ZgMr1DZd<~6f8QQhEb$2cfeSk<#2V+`|YsC5O|43o5 z5lm46z%=}~dwX=`IlC`EfBvNA=GLriJzyx9rv1t1h{<%_P%P!}r~aY6{rsn0^P8n6 zzY~{i*mYJo4L@Y9yd4Tq3RKW#Jt0Nx~zi%3E-1 zfwo9y_`By-gG^F;Ywkz)3|>kz3!}NuqKo{BUM4;zfYo0?U#I?;)O^V~o@(mzCDH^G zZC<8Zt{$W34I1WrV{muB2EHC5dm=WQ*UJuV03q89zS5+oz{p!iJj{=&hAG_AAj4hQ zS6hwrx0hEm?f!T=#&bRZbMp4n>d+0;Y}Rn+h5bYXK)E zzx8aU=*qbh?}(_qR4p%QM5O*af`B-v*yf81ua1UP%rwMQEIFp<%3R?03S!#L9~w5J z1|E;vySd=s#L64eNg_EUD}qsrSFI+-S2rW)?zf5Nolw)@gL}d(vtR1}u>cm;_K0%W^j;DacA)k4jrPHlehHJ>U5DbCuahm@J~y_0 zA2l_hRIEBnEl!UqpPeHg^T6j`78?YEG7P=}I!##RMSY^Di3!_ja`f-PPyreWEqS%< zvC~gMR-G_br(i0 zoPLq*O7IfaEce;pWeE^^pF6y%tR1&88y?_ec21*@l?By?cz2&UL7S(rT&1 zqJLx6&tx>{6jm|rm1ua@#q7+^e8@%n1FSu~!c~9Z?)D0p|dkol+*e7pSRS^PeoBNwV-hv=+ zChs3IWMyAWoinEb5TOl)&-OOmw-8>nNiy9xZC>}>wX#?$ zq>iBE2Xiqzd>0f8Sv-{ulo3UysDc`3A;L5h=n+1<-jMsr!Ndk}-UmzRQ0k{dHB%l_ zbXE$Az+l-z@vgkLHAyHZLFHl=0<+F*k7#N$QGd zmmlf02V^R1GV8iC9|0KOL{@XOsbw3Cs2;#V zi?#gv^F5QG$CVIF!(Qa{1g&4#cgx?qNWgf9{o74LK$bn^fy~4FZ3=r~TiTo&m+W}> z0&fx@V`wRI-7icR_o^H4nL;(|dd*`rX?%pZYzcI2#dKIdlBtu!J}Uc8=&Hs?$y9uAf%NU);OTJZKDH z^3Rb#%m-8}zf6hk_WS=TrhcU(M(YIOf>{KENpH69n0SXxoQb9OU69wX!PooY}n zGOp2GL*x9@F?}M8B!;&nI$Pmk(T^dff)lX8@UW$sOF?_CZpBJ7Fgz~t9WBRMUIv(8 zoK%>f;h1cYoGlg|Bf)_z2=od?$ww-~NFGkQ!jEy~X-d0TjQ#8XgP^r>Yvq-^CyYum zPZP3<(HCIQW)u{yz>oL)(w@=3{R18^E!!ywK?a3`Vml}S-{M*A(~6fLd)^^cmv$EkK#*QNm+8HluzyxO2KjFA4r=*9nMy~Zjr0qEE_t#p#iV3 z+Kb;k6TM7Wk97g;O%Y4AjfuYR_hekk*BawOY0meU$M}hux&42Cm%cP1or3irY4kz* zW9S)(NnuDx8zYM*pab3js_^OJVvoM;Pl$sz)~+;I8Jpf*YBsiPurv_n98T|8Su5V5 zPqybGXw`4U4URp_5PAFEekSClQG)gy!>p5kgLEs-E%^-2TVPQH&e)IwBg zn(6R4$HCT#N|^RXzo-who1KlnXSQx1(S-b^22nPnp)!hsw>Q9ZI$`D(#$sb+!+<}nLv5+}^>+iRx2&^_E5 ztT0Ykelas4Z;7uT#rZktndmNOXZe zktSC3m9Lu3b=vBZ%a`Fn`k{u~(q0iN!^n=zrPD}X<@HnG4v+j|_)TD=SIQ+Uu9nI0 z!kAx*z~-ON{(zzAMHOH}`z$`_d!&LU%HMhl)NBWVYhU2@+F7(0$4-79?(!VaxUA zS|z{!Mk}Px3jj>El$QvG$++w)6@ArUWB%V{aV3n{m-99h(IHsG3wjS&2%?`N4K|<1i$eDv~T@X?YRnt!Xwskz0>}C$t^LT3s&GQ5p0W zT;@pDqa>Xi_Xr}sKx7?Kn$Oc#PbS{S1WE{wcPs`xio<5kp;jR#i$lvq<^F;uGPw}d z!ejB|$q}XzSGeT$DSeInsa3!PFO=QP3A_@A6J9ZJEe*PLRoDg@x;})xm0;8N?7@R{ zYb?anHouA&sVxXk`&Pm(NLfSa&v6Yc)~cZpxrYED`;Y z!WJ^IA-rJ4*^?=he#w0ur#zJ^%1fP3zxtnV)z0{^tvp=%eh=3waBRi4q+*l4E2ZKN z{fKt4dZMl!?0rsyk3_w1J(7JtCGLfGy+;`PVF+O+$>83>#t4p#VV4Ggu+Igq zB>!@JeLf+-Px+B(cG3*jV&&axD`At0^UaXRBay$pb&yr)O?4KNOD)cy!0x2(7Cz(% zg!;jgJP2Vm&t=MUudRNC_fWm*%!^e?BPN7+RZtG&{+aLlOh14t`IUOU5vba4hgFAUHwS0 zE4lSaVI0R$qYP^wgO@ps3SnF+S@4#F0*462iQkJ42}BXV2)ETeXzsGT{w%J*`ITqe zBMmdrS&-k$^;#E`PCeWDdE8sOD`wsU4lyH!j-F|WjF|RQWbkKESV1lRDM|@d=^6Ub z;(!1TmB^MkizF_NoS%IG|i@(>|vFoOh+SCx&13_kj$9|^c= z)+Xkg=_|Jv=5lX#`;qR}M%l zv-Id@H$C+6x9DJG8&<&Njh!CV%_EdkbltS})oav(oiq#71l1+VyO{?oLe zNd=423fFpKV*)vH&pq?bJ4K>Fs1fGdK?fbB7_QoZuPF*y`j#M>dvTvz%}wtifQ6O( z^5qMafPgO0s`6g>DDZt8;9vg8@dp4V*u=*}A*Gd-$$<1BZ)#dlY2&wcC=K(Xz{{P+ z@LTW!#nVNz*WX&~McX41%_=dCJMP9Cc|$i|*kIZ<_Vfor?BS~~tpR#=<=iJdjkfZq zlrlG3o-x_PF5l0^%GW18$M<;I*S-sY0#aZDC?J&2s7w9f8T697pm`tsb+*MARlIZ$ zvXVhjNEa+Za!Es51XatMXl$zz+})RcN%H^<=0oXEA&$oU>MLT_8v092A_1py?RQq} zvbNrki%`SB*O#(K)5{u;i`!4JiNouEcD-F{H?Q5cf0?$to-^y&nVsnIDn}l!u71q3 zTU=fCl20BVPlES~bf$jzKFtRNZO>1BF1A+8zihGB?6IeRad!x_ci>pu*eZ<9YSpy+ z`bYIkLX7z5I?y&~4+c7RIP-49#j2wJdB1W*%$Iv`kt8d6fKL?fa12Wb?@Aa01)cDh z=JCgHdDt=c<*qF{ULVA#c`)WR2^w^q~Lj?8S) z;PQY50!f6$D2dA}r)aWet(*_a!$w+ejZk3wuJg;C#|2RVIxJkn`h1#-2PyfKBw9hJ zyX|A{0JVr{fl%4wDdk-i?JP-36*F>z;7sxBQ`W-8IFCw#O04GabVQ+pw85NrQ`X*5 z)5{#Q6zH0kn&!Q1rL^DunqDfif|_psT%O$E(3wAh^#tvYeg?VE`tnJF&ckoH*tFh^ z3)eJ_D9#C23xNbEkbJO=Ui*K0)q3inP`m{l(Jd~0P(|(*wwKI;w@|1ktWJ09$Kpa1 zMVxpKQMvJd)k8&#D`$hu2>|W1!CSe%-D}Zb7O_DP(Jze&$kwMWFs?~2Y`;6|dc!?v z+MD_#D?)#f1t~+(5j+Z8`lDUkiq70|z@0?*1OuO0i{)^6r}tDj-ei4?9dN?t#GM?Q z8UBs+4R>9}3S*5C?QGRX^275)Vj4_9t{aWi+`w3xsg;{I-U^LjkxBZ`wCk;Tw#ctY z(laY&=`CwZwl&sf+Ip5mgX@uU2*d4w5GdXHpDxaLwV!XMVb4Mo%~=ll`DYNyQZ`?o zKBKu-#&;k8D9c2dw*)yWlaBHub|SdD8K?QDr&}Pwp%;w%eI?qhg;6QU^~>KsEw!f7 z{MHNo4EM_~e|5Y}`swc(K@Uw18FZf%Ws{UZmuvq1O*293JH#{1RRSOANnagnwgNHj z!4U`Z3CF9U+7P{6%VfQ@1ryab7YT7Y{?e;!pJtDnbnq$KRB|N1dB~R&V=>|st;eBU z&ac}*S)56BW9;Ap3+G6quUxOjF;DSkw6VAY{6h&JN_GN;pr;SGD_=f*UnaH82^?~&R;6Tw>P z!aDG&G$Y(<-S+z#TgGm@c=rRV{7?1u`KaCTPF&4uJ29HfF;AQJHliQ=h%>lY10TV} z7VUAvQ`Xy~>P735``_Z`w!2GoN{a2`-$Jh~dE2W}lNlWH+M}b-FVET=LYO!4LvN+u z=ciM13`wCMj$Yin2Re-(0hIt_hQs1(8!5!{P(J&p5gUzHasl?EtoyH4d5&FoCz61c zl-_Pw457Wz%vb6$5GF zf0Bqw`s+xSkBmeo?wgoYR9$C^cI5t{e~dfuppV8Xd_HF4pRVBUTta!dLzI`xK--pg zwB-IqVXcpvqaT7-E3i)WUQQ=8#hrfLf~Wdqy0@ppS~_=}Z)yPz2K7eBLPr3(OO~X_ zt^w)vYyr1x8k$I@zlAL}8=8~Uzn}_(IIcFLV)(G@28$RMNY}dYBmU$M_-9E8(<`#Z z#tfL3b}8U3k>Kogo~Ym3U^lu+(P2KESe8goyndogA?~*k_4mAL_+B3P;{zjBPU@QR zxk5+8xs{9dRb!zYaR%0+_hgV^(2T)MV|9l)g?FqVzfAN9q1k!+J+_-?%7+H-4TAL+ z)$y*Ds=NbpFR-@VTC-7JVa@ARqZM|ndVSKo<2~)!pw`7n*0lb$XTOHn1;4wj@_o@? zR0FEma_U){BM(6KQT`|UI2FwZ=a4|iHk*QwzZz&!!soN(P&0`|mmg04MKL_M>hB;z zi8h)+Nk=5b6BEGQO=5*wzCnOwzN6IoUb?!vSn1~Us9>`#b>(5!!PoKd&TaJn0jEJ& zzVf$yrLq*M?AeH-4+i&S z5bB6ya*)bC4xl^-KnpJbEv-2xFh_BLUcV#!8uqzrhj4?=23$MjDFCUUa%}+c8R&!V z0t9gIfOJruJH5@z101JGo&q{`ltd79$6#|0icH4VaJ_Jz=X}r4wzz2kjOWpK9^gJR zdjsrT(nJUqFLcV59Z(13#V@@--ke;`t^ z)pefFH?*`XU~Amu%GL`ClXMA|Yf(1#(#{fTLV1}t!tN||nBO=(4G!~InSd5tM`}5tJ{i&Y4I15oTxgP5mPDA%+fhpf~b7EIL6(4q1Ei)Z4CsZ1_B(d z1fZH&3nU_LJ)m7{_3Fm6`)$e)@fJ zW?UySez`cn3Ov%K10b^l5B~DH7I|+^nbx7Rj(pqE8u`b+Y?pt%b+Wc=o0yJBE$o9c zjjgi&aJl?5)8v~vTqgd24CyZe*}^ z&8O(w{v{c&_3N9DRi0b9mrqO$9E(5E zgft_9&P)vQJg7IKGh$AKSOC30JMnf|)SH_TX{a?HgQ$6qD{3B{q0zn|5JD=zQcw;< z&Iae+YIVq$b2g);8V%+;M9#@sfbs~9rYq3n{X&3FgTDK{F{pvUaYLsL+1nj4<3SWR z0e&9LXS{CIp~I{T0(8D?Ij;s{vRrBL6+3W>JW8uPRx}KpOZv=O!BtVVNglq^ln3US z5_b3rF~?jXk~|B)hkLAL|LJcUP_SOHUCd)IgUsFm$&Sfi6i3nw+*+KM zUBH@m*8NxI$a@DXyaw#;$ZR_TqPctj@QM6v*>oWrd?dQBPzd_}u)08g`Th}M`n)$) z>od#^cKI%^SXgpv(jJg9YmlojH zRiiG@b%IA{WV$%UuMlTwl9+|B-~rZ)amh$5~ zz5u`g2TyXim^@?$O+d!QL;%bzVDo77MTf(c?Kv%=KETb7=G6?|dq|5nS=UeUId28e z6C^BQ?!yWdAB(ek8~#X?pviv^0>9}vH#X6ux2hcS<*N3I6uznDDSd) z=YABNVZD?O&do`b>n0`18@o^IbJLsS=)iNQu&PPE{ladE!Lv6nIST3T9s1o_5Vi6- z*PHp`x$RkTm2zeBX~~L2<_?7`!TD?!y@Nw)5+nD{QBeZuI(Ym4(VziNwYJzA7}**i zbF`*HdVqEq9A-NRc0zkbGy_f{^m;SWo_D(t961Y~!2_%hfXBYO?MQzvUWqjNb<)A! z!s*wDpdQ{4&Ng>_!N!2oN}mJfvz@H9OpmXsGvrv6>!II)=)1d=)<9S1kyb2!`t13a zX#_KUksCWbH&;ovT(|7`dPEfXy4b?@h8q10?&I35y?U#Is?Xb?}8_z0(TsL%MLNoMo9qlJK`oOksTu>MnvMsH@u(*r&EVt2)fTB=LF%Q$zsOk0F;wZ5RqQgp$CNlBq%`d1m`0>188W^cF(;T z=*e!P1)_w)vDRACa{({Eab(}7&mJpn+RN33XfZ=VLvcMp+S>YdST;4e0AvuHiz6cg z@0@x&POTI3%mLinxYv1KdkXKlgc)K?c^GqgD(=Bh&n0^NJvk#zzPEI$eDBqLQjN?s zuLaLuX0drwtM0kYe^`_)*QOtm)D8q5JpJ6X>(FUJivK1iJBH-k>bbi8x2=JI)PN1x z1M;-lgYK6GSX0MTTg>C#L{r3Jkd8D7juHnw<1oUcWIgKIKhRY8J`a--Gt?wX8$!Nd zayHK%gy9y8mT^gFeT3*cK)j&NSn#(a2zs<-6lnnQGdR2?9M@7fQrU4$8K^ra!IvX4 z5%*ODoH{V-2;O<0@zq)5IEs`MFo){wz`fpFjVKhz1ewatcSfXm|F`4*ZwFX`6Vt#u z$p*a+d3mD&M#YgbEzwzeJvpMsY9!qehPehrgJdk%>nYg2hP+XyPnV%Xgyku4mJArM zM6uM>Ln9yf3M*uSXrU6U#=R-Pp)^-etu*C9>ud+|szu zdjsptiik$0#l#1YA%*9?mrk-^khI=3D_!=Us#9XrvfA@!ob{!5Z@<5BTAJLwaJ;0) zuaKZJWD1mg1ly&q`|1q!x4`jK@`0EPKENSpi>-k`*MJS!1N{uz8@@lLk(HW<|;qQv}Xwl{Voh4V>44CmWULP3cF zKnFP2Yb!JXDYlWWYl$Ge)0yg%eGc*2XlY^h1XIGpaZd!OXxRg@Da^{9sAoQcGMy6x zJQ713jAY`R_mw_9zzzFsH3IfAW6~9jA3KH;51hN+BIt#Mh0@;MF6rs%5*CJeZUjh( z!;~dcOi2wxTD!Q@B`CNt`*qZb(P8qnCF3PFB3S;o{j2>ex0WVJ*oR03ofDHIHoJU>|WA?Z4xC-3+)cvsR&!blZ zHeesU=YI4Yc@WYokrLlSkm6~!R3TY6x5rN-;|rL<;fRW-1Bk_DiZgYAm}Q$qszErz z^wtXrz3@zr>`aj~5ji!25q*b|Z3ZD4#;7Wc?+${xFaSN)DYMNSUSx#SuY{BOu6hwIr z9XxdQX$A(at$qRlw_*CtM*_XWhY!h~J-cPnq$x6c_H4fyn>Pb-wqx!Go4;8FkWPS( z(gzbM#0CiknQb)yF;eD;k#Z@{wf_QKhr=ORS>q%*IY|y3%9mBER>{pb-`wqJ&zw0U zAAR(ZG&eWNoH=tO2J_@dkOeuWObhEkr;%QchH3BdGejnSuCwK9|G>Jn#f*dqdFZMf zNsbPcKddQ0O?v~#rdfH}Dcv_t|<9ysaf z5TuiiRQ1fYHl&j3W3>9A&o#d(k7{67+ug{EEU%Fr3qmd?K)U;G*!9W6K9aHG8b`Wy1$ zhaYGydunQmo}aq9dMPM4B1euKmKif<$>hnCG%em2`yJM8;Ji;yYms>PX^_3%UHI%} z_6ykH9Wij^4$`5P8W%1%pvQU>E{csuD&>=-)!K2T`%e4!*Z7nuSu#CURxHSp328Ct z+TwN)3?d-Q&t%6NIGaom>AFgJI`_fro(@X{Dom7X7$mQ>#nwQ8YGC9(Q3LdZ*u(a{ z1`MQdo4v5sYU>XYD~%Fiz=KzualCJQ&L;&O2cK%Gb6YZrc)n3eq0V5IDlnJv@djc zc!W%!K27G%oeSbKWUUO5nB*pCD28*E03E6CnD>=%jAaoJUtBBuOAVQQ-K8jv!o2S1 z5)u+3x88c2G&VNL_U&5%++UZds7RcXPzCSJ&CQaRmnX}YFV|>%aBzT|$eb5Wt(Gxi z6__JDPY%8S$)hpm8gz-d9QUwq&R;eF_JfOZy!{ zWAUN8|IQ7<{$y)l@EQp4*=Xok!zHIk!2o`-D&76aQx-ss6({9?xYy(VM+%EQfp0s0F9`7uH4_h=>$+m06<2k^spN`zjvNRWUlQh z{Dr8UAIjwu647%wNcI(@(11oh391Of+X%pM-?diZy)$}_`_OD9 zU}wrQmbqA*8wBSpbD>iYgp-VvTOeJ+IsrNe;|v0IKP_`PapHuOmzN>xoh-Sz03tl5 ziy%y!CNWuCTRTACcCCp{N=lMzuDM3R`rf^J0R&%@qM{q0jG~FZ_|D_T0I3nq$w&X)Zoq)Xq&K@7nS?J0o@9lHQbRz=I8ZVB%eXXbX z_;|VNuDfK)lqphGRf$&>QsA5Qx=Bk*m5hwBGGW35@dWExSy>A96A}_6F%i$I01#*O z0WnL~y0UUS$IE*>4M2Si9JoFL>((x!k$cY`?Tm$;U=3&w=m@QIatEOXYCjpBGGQzm zh&+xqQG+%L1Y>wPQ(DnuxfF)o5k%e(AqsO+qj@Hxdj?Z$nTk8g)77t;oC@P1Qr5W3ceY9Oi_VIeD0dhhRaFcz#^JOw(-iWds)}6y)CiQqHIULC!-R?J^ zLLo$?OgimI9@xe1kG~l)XXy;O0VrEId!b|QyjZ~3ORe>}7^B-UF(~KgwB`wlckbK) zAT|}z(JWy!bs)l)U)**>LxX~GZayw9UiU@T@Z#cPp>v?MwN=xn&zz}73iV6{?2V0$ zvSGt|Ie74(en)T~7Z-<`=|l4J%P+~_{`RiSnl($uXN`LxW9+dGuP0nfCcAvp0j!@r zgc|j|n8#1xIzoie3sH^|mNbRHVMAcg>+k|{ywZ?EYp9504#2A#%^=Dkj)HCA7izLrR z&3ZWk4w!Gd1Q#eXm00JVei@?ju56gDpZoa0%o&nPva0~+1ztNWZ(#=kW@U_2;XT0@ zi5EG~@%Ybo%yc~S9^yOo<7?e;40NiI;M3RJ4y1Ev1NJ~VTlQE7qyZA2b+9c}Fd_|% zQn?H3K*^AswZ#3~QTJKX8Dq1>z>B(YHY3#*Oz{Q*Jc)@k9T&PIi4_T~(Dq4NKe>U5 zk*+iv7ni}~f7iTB*;!O0YxbAR#|4#gys`li_f~0Wg<%vxhU-W_U&C{JxB!&s4WUQ& zFb9w_+n8n22)1_A3xhMmY(Xt?6UdPoU`#i|N!DA7B_9o*r9jHW&NNWgp7T8f+y!XU zsGR^J)3xh^gvX;|1$+jyo&!J_ponq14C`j3J2&X(z5qK7Ki;Te zVQ^S@9B)NMh2-bw%f5YkkyAjD*f1Q>RXq>gs9*?WjLckS~7*qD}x{o*KNn{Uus=&U)wN2IQrIJ7}D+D zfuFv%Gu+>^uAQ%uC`QVB%s16iaqvBf>ZlL|v0WgTPPw!z0B|P`$zikgTNWbae4$|e z;_Z_qJ7ZzX)g$0Qa$R?!tx~o{oN$UdVlF%e&M~E>C2-K4l)}OysjGu?6_T2os$~;7 zIXUP$Fs7>%#(h^q{h2_SnIg;z;e2S7=L}>VEb005(=Bi^9+oeC=}U6#*fGr{nl)=C z%6ew>y6ujR4%xJ6lj>;Z%$XqLoHUSK_qh(oz!D=8d@^gvGyA2_72ST|ykA~k?t5pc z+deM#M;owTYz^Dn_YV!kPCx`1hRj({z>fOQ3e-G}UF@o-_K(pH`zRdry7QGd)ioA8 z?3_(tq6Yi46HKgzrkw$7ko<~(Ltg|YAoA<{Y%nT6f)MPRJ4>Xc-HDpIRLM<=mM>jD zUhcbcoC5c)$E#&?L6w|DonBjqcM+{&Kgsq02BrZ_+o7MYq zja@hzt~=*{bW#KXIEBXns3WTapv_30i!kRnTsoNZA=-5yI!gp8^?iwva=9F-+>Ge@ zz?kLx+OGY*?=)b9#Y)il74o-tcFWj~Dp@!=QewhUyg&lBl(}%`4J-@AcO&%imT+x5 zVzR`Udp9yo3N`EG+#YcMn3$v4;&#e|=f3Xc)9KTvg^sl~Yd%8cxE>CjD2*_4>fgP4 zm(Cx|FZ?!8nDx=#21A(%y8c{zCJnj_I#%SN5W)G;D{EJ8QtA%Mx{rJtu4K4fW$75Fl_M(>RQ5t-rxXfCLjSY0Z=g&oFK)Q?E5YFp6%oG9tDWi)J)#5 z_^dgU1h#yLc7CU=_lEbu*L7&Ud?>7Jl*d0hCQolH1ZYo_TQ3_* zT6bK2^T81*uLF3qWdvvd*Co?Q8JQs{VT&L-uG(>a8wtb_B?rs4NzMn<3>$E0@g4wz zcb{Q=uLsm?Dj6IJ8*yK1D=h<2QW&ZRUJ{Xs&v+rd-NDp%H}T)Q%WaTed}NfH&;GKq zGL3pO?K~|lP2%I@w6>h7tdDpq$3(`t|Dp&YwXWw>`3W@nY=5l^#z3UQto5b?Mv}w@GkL<8}Z3{Ti97s;a;k z%i$+JtLfHEyJn<^WAaXL4Uz){Kto#U#K~IpGke8Zu?yE*KR`Nn#`%>F9d_(Um@bag z%hB$0g3jrlwiDa&8OfJw4ScWTL@9-lwG_^wZTK1Yg)M%qfx>EstUlzB%&Bu^N;=A1 z(1MTb>LXHceLE7yOGnZik<;sY9HO)IV=>0x*JodL-kzC;<8c z1KosQuJ_baPa(a(MdxY19H1A23K+o7hciiD+S}Xofyf6Q+i>u23O(%ftn&fOR5<=U zkhBRebY?FSfEqASuVqGO!&rgA;?eGiQ490bT9FAWVAKS5df(8V8hEpjO3QRwD6hw^ z)o5nK5p|Vp9mINg!Mo5&!W7|l{MN?w`Ud>XG*x)}dm{(zvE||Wf`EtY*`FLcgJ^oA zv?AiZ?9xn$3JsE&h+qj1Ip@w8zERqH?wO9Fw$NokyDp%-$3V|>L5;a1G7Iw>BEe{><_Wsoh8M6O z-5v7QLC~OPq=m=J)ODu9Gv%CQV5}b}Sib3|n-FoIr>ihp_Se7u6{K(55q(-D^XD&6 z&`xmv=9_P5J@ak1-G<)kM|2y@mffkTuG}~GMRGEN^rE7Zh_<=X;R)86dP=r<5|>%R z8h09nB$&&{7^6;vE3UXw-8$oSm;j6}z6|2KRZ z(9(r*w~B%58HV!k4P+?x3_H&lyBI`sn|fTo4rDtS<)65+Dtj5r2OoTZESrxJDUOtf zAAT5V;M27(+ggYt9?2<0kN>4aCpxScLNx@e7wD zULjWDywRI*IXVFO&TVl!#5eBSoRK27lrHc)!RO~KDj{nPOgo? zh_zqN(;PE(!!cawn5h@;pD%0KzQ)02t^IJ@{M*uxr6Ybvolt-L%sHLQ@MQ_N!ToU? z9ItgwEFD_Q4fng>19mEs3Z{qpBp#TBCyL}WYRg($nw6zF2&~NvXLP8cWk^(Xq-2cA zkSvgcWM+=l2Qbs)Mxrq@+!s$E?cWg;EM{z;IAd~<`*@)H&R0tcoYaRTFw^?96Z38+U_JnI|&yX5ixH@$wvcP1A%bM zq0w?&n4Qww^=th$sCO6$+TM^Y)EGTy`$Gcsh*U8F$Q^h$ke+NtXNrLoW=ANTj&5?% z#^tsTex$KOGB!R-308eAG^l7W(O9Cf%P2b2)M;1|AoE2dj49>pq21ivgtXPw8tq!K z;x3SgEry*?iyHKU8WH38xE)5HcJJOPS6y|LeB~=&RU?qcLXiJ||M!F%d|dYKyYE)^ z@VK~G-7o9e8BN=^Z5wJ>3$;Fzb*wb(I7aHArKJsN?=BEcQYMm;u{NId?yUcGw>!8` zj=Q+{l-zR5Eehhhe%A~RMA4DG;pDYgxf|JFhfuJKF3l}r5}CWqb)CBZV1Et>4LJG$hXFBoZwHBc zz!5)DI+#InHowPO9Yrf8IO8hZ58Z(>LFN1JzpwZI7r*!gb=DF5x(n}Fmdmj9-_uV& zg?S2&T?nxXBkxS1C$GiIl`Hl0{Q2`ydwq${pDdf|bfxLD&YSZS=O5PE6R46`gWt1$+eDUQ zW@eVoQ{%^v*UTdKW8?B1AIpRWOR!j4TB=z_e7ubxKSAeVl67)^oi=T{cd7%fqnJbAL}h|7@ggrs;K zaDp-uAvZSeKO^}I-q96lneaI=JlMc`!5(1$lu<~(mae>n;E zIEF|AsL>Mwc23}$o^9XOQ%S7ax^A>r>4HYxw%N5*>pk*s~W&~3jk=#Flqqzu|CxK zj&q@(`HmNXd1Iv*NL^RLH`M<+0m=p`{{-+w3-}=_K`n_jvkD#1Fqt`M{ z`8U6(p+*MwY15|3+O=!JsQxz?n??E?Yr_BWAOBHkgb^r{{OIV>W3U5K+4{U~h}0(Kg~v@^(7Pr#p&lA_1TW2f`svB!RoEt>M#&wdtX z7T0NKW{0!(1ZvUuC@B_Ou^B8S>W>h3@CBgaL`j4rZ5~qE7f47#9=0;TD~GAYDGLzc z--m5rtQ6CbqLUM48fv3$u{Ge=8eo)t%r!2@mv#Mi4%n#K5Ar!UW$DCnyFW;7#*CT7 z#3al$=RmRNaWV)vckW!7GiOehQ;tBHAib#Q1h_2nF^{a#)%f?+snc|Rd*X>F050<} zS25}yqz=V*-g!qmOnmmUx9fbtm561Smd^|zcA??^2sW)q@#j8wKkDc2)$MQGxDiqQ z&FbuA7SXOmJTgnekUAP^%*8lR$ zFYj{de(=F6)e*~?s2A#(#HAA^OjI4SB*I_BF9AD^1bT(`?AeQpZ3n6Vjs zf^GtLf^vF=7A{<-wYgVt3Pq%z3bLP&`+B9CogS`+3bMk1I@S+)R@idr*dptw2 zf9)ZhG}C2(kX6@R*cRvXCUHjRi6a~7O^k5aa#1z#*5(3v>Z85#(cU85yGarf6(?2A z!+&q|b{BPz9X*&Z7jwlC-$=QH@okt1E{o&@eRs7R*PAK~+yMi8SHbf_~Glh0v3 zs~J5fh^CQ6(xP|YeHUQ%b|n~^Jb4lfru$$(?gs$gDZl&O@8st{|GAKbm@gWq1i>Un zvZ5da<^;?H)vh{sr$(GO_6sqA^V$5{-~JXx?#Id`eBXWdDS;ECUo<>vcr$=NW7-AS zngaGjxtwi6{1K}=x>zz*?MmKdY-ASRQ7=ipdC=@P(tZBw+I zD$S8;{kZ__Wo-=%hX#24rlKt7_^U2H9nUdT?ZR9MLcfZxB@fW`EMY-XI8`Qy9P;f+^c;f%yp!`VZk~{9WL+3-L zrN8;+n*g|J^4;%#SLY)-A2|>H>Q}#%H{N(1{2RAwg!((*`3}l|=HmNb$%79*q~$<# z9x_$`rI%jDaYV?^e)dy1Af_ld-n@CU&b4p6@g^easR~|sn4JF@jXrUrP_qXvaOhtB z%(?KJkvkabo`f1HJ%FD~s&p-dXW>PV8 z!4f`CNDjJf+je9eOh)F^S2SaZb3TvzvB&W^L730(I1 z=U>3wJyyQ{^{+wC<8+_Y?}iN<g(r$H*0g>2;c7WmTp~B#bc3cj40W{Kx^U?g;xT&tQ0_c(g)zNg8Qo5Q zH-^1O!rL|hX)5svtUn$-VxWFcY7UEux>Rku5(-Og(5x<8KbLSqVyY)A`? zy8(0DlTPxLfOXx#%S5LFvk@tNcxNiRfj;KQZFk{!Hzo9YYIIxo{2#Gp&qz6Eb=H}O zVor@fDl%IKMS%zoOzmbQqMnfnJvMpq#@Az4{rZBbi@*8JuK|9;y8t_Zbw)-y47wtX zfY2zUam!~Lg+Sbj##=k%Z!W{}B@n+AYm|t;F~Y>?6xq@lec^gcWhBsk<&~EadHISO zo-~NLjYl5&SM6<1hXK<;ITqH0bDZoKOkKQbDqNWX#8>i z?43?hI!5?^{NtZ=8Fe(mnKsF+nzFLf>LlQHXo&N5^k@O>iw~8ho=%86?_8#a@49ts z<)8ogI}#om3a3GfB*aC_gDb9=B{M+ax$V2IXAqt?aOHR}4myGe(pi%Z=Q2S$$l*e~ zXjA3=POK%71rd=T9Z08_(zPgC3YEg+Gw`F|nT^(f?RQ%P-8A3`L&gnL-;clE?R)-V z!VZ)y1ZUi?XM#rF?@39CI!Ep&Qx%g<`92y?#as=uj%V7 zl_Bn-Ba(9n=OmI}l7}NVH&-{q%p%s#&zLb&yHQkDR`y6KxAw>PS6_Wa=c|Vw{t|%l zB;6;!XA4Ts-T(Dp{~;fI@V*8(Id?L;zJLEdokwTQn#DzZB6NN*qljRg!a4Kr|Nid* zwzujSmo8nZK~w@{W>`^od^S*zbm%_tzys>=+_D9{1D(R>L}X+XG6Zgh&Soj`D1V}k z*eztrl&NqwAJ%!8r3QTobwo$NJ@?!VT!?2h^g!n?yMZuc;;pyd#Ch2z*Ueqj*CvMa zd%v1_=|Lh;CmSm-s=0`Y^THaekYvvRE&u>P07*naR5XH~oVVY82N%eznhL?2#`4M! zcKa7vpGHj)j2wEq>R?>(W*tbBU4u!z?2G}N{)huB)Pp=HJuOAP_{A?u3{v|>ix{Ce z)>N?HwjfFbBcz8Q712EOXK_NO#yHnR(qkF>3!i8pIy?jGKN>Sc&R^n1J zq!N?@{wS;V0vraoj7x|XWbyi^V1jd!PXaaMMiV0C1mmdZbuwBG!Z!!LBO-Tq=k#;x z^WAZ?XE~$gT3ic+_F@cwf4gL??3=GD4?P{F9_uk*sF#XoI zzOB)3vb@t^N=QglCxI2cq9cG=bBsE%){trOT#jXN{EZPU8k=;|GuqBn%G%mG0QM?4 z`x7+Hbno6hsHZ%tQ5$P)G?=-~U;N@xt$(KjfZt_hWpz6SW(ANzp3!{PpEC+Y;qt6; z+`fIAwwNQ~-F^3cPJ6?D{p(+c(RaIS`D7znrJs_-;IndVcA12>Ax##S@j%1`NH-Fu zDZ@7-=|Q;GF1jE}=|I13=jjdNjGHD^)kCn)i+)h{4n~az;6Qc6O=e%39^&d4)cu#_ zHAL%0kaG&l%2PC83jCOO5C#fdqP?r7V<>l&l z+?OBBXC9lU1Az7SENimnRf2drUpfC0taDzsgm`J{)G3;(Z+*wwe{u*|VmVb=&z_%u z2*-qsI>`BSM9@zi#mAG2C`2>LtnKkVBqS8il*ld}x&Jm?pZx}~^8$M5rI+Agub1nt zy;f#l0wz;j_`VVXf7WcQT)7I&vio(jLj~ITpg&%CT$-9&N1xL}>$ zjXt)vqaEvR#-3km++I6UNY{W|;{?+D7*X)0uFt=BKll|bZCHzER_#HmtjqZ7HY$Sl zga7ABRh;|n9{I{-R+Q=_lBc1O?%d-pL6*EqY6V(@>_nN6dJQ3|#<3Ib{8;>Fh@l98cC6^Y+i zV@@NI5eyoLj1tjUBC|4$Py&52v9}{L;zvLFvDQ@*_)~Inax~Ly)259`U3^16|M|~r zN+X{`?BnbCJYqU0jX0LM(Ws*^1)blqR-6Vc0Xz507gNwHE6dgRn=)lGQq*5p@;Ij3 zTVr74e(Tn)3c|S#*`K*R)}a!Jj~kb*1}szcnHE2D<_tv1j%f`liKMs=iRu_!pd*1s z=QJ3WPVgfbsQy8Bej}u}eNty3fw!FL5@X5l7Uypdjygf;R$O&M5;C z+Si;f+@%CW*_^jnOU+krLWd>0PEeS-&5R$;sl+P;^E?J@8uKG+^YPv}4eIiq|5>U1 zbPPQD=%b!Lcm2%_WI8`|Ei%Zb+V*Sncy1H5g{H$RoXMl_Rlg#^MrH7*t@8{DI z9kF~yQAa=c!4KRw-R(1hJ$2*{;unCOCy6y;9qk?JRhl#Bl8d4nUQA?XWgW=YPq(T! ze!+tIJuVJk@0`cQibFIz^21~``sS=Z4zhpFl&K{(r?;cv5^fV@hK z&RSjTh&{|G>+7L=hk@Y?M@>1>iVYCI8BvIqch;H*je>ig1UoF%Vr_OV*mG&9KK}S0 zz#p?4&#iW(#{X7R4(HEbfT(hY{?4d5(=7R(k&y|5@)Xj)|3!(G82KQG&(F_S!*}}h znJ{3}6e#m~#!Nb)A=8nBdz2>|BY_ z90F-Zipt6=)PQ7NA_=0npC_Mu68(kmS0j?Gn+VQnOp;ZZV`lm#>ns28hd<~TxV;;1 zyg_ce?X&tfBT`(>%KW3D8y68Ivr^H*sd6ixCokZdKc&ldzpnKw@BU-UKBT%E2_Sw- zn1ap#Ju^1E+mLUT;&abA`@7-@gTu-O?7mT|y_F%-09((-NjsdaN-*lNSL5t4IHS^l zobp)jsgPLLX;aZa7tEocd@`WpA**H>;5}GGfMC3o)MxBSL=5!?si@F(=! zsNd1iN#VTBW$3K%6wm!K%iyJ#Uev5q0KJVA{aNVeQ4x{qiqfxaSuvfJn|Mc<9uF)U^%QT5MxL7D=|Z>njHD zzI~2CjcR`BaTB>OH{w5Qs^0>%TShef@RMkr(+g;)5}+fq=xwAiA|){W8uaeG4z1r{ z(0h1mxu`9+21d39@bGO$bi5g$yY&o!2}s>qEAcnpoB59Zw&=FtV!r0Y25UnnIJ`p) zJh<_NejfV&5Va3R?`{R+=}2Km?{XM%CZgpu*g}FsF(epKjGAlY922F!5B*3l)*i|J z%gE6cS6rddXlp-AA78t69n!-ODajj+Jhr@{F~cYi*>;)UP2-M$okC;ho8SB<{w9bM z0P+lF{Uuos+o+8NK`aeVK5IzU_Lsl>MGfGRk`kmC)@an7PHg_pcSbqrP$%m<)70ra zAXv79MpHyYBpd^XiqVRN5U_I{Mw2Y#nqy>2JX2b&s0f!^v0{bR$CGt=_397RdCs&+ zg6~Hj`JTRWo1gj2XF6fi8!*TrqMEJush%q=~vylm7XFv7tyxL3qg$8i_ z8jP~DBZ!AMaUTbzFLd2&_>Dk1FK@iIj$8*03W7g67CnVgSGH5DtgKL=%K6ZmgFKhz z-y}8Te9GmR(aLvA2$Bi@IS&$ia^BjsX%m2Ava*z4ef8BkE{=^+?(%Y1X`VF?THA4d z=a{)X=fRwuoF2G}4pWkfa&F^TxZV8x0~*A%YR#?fWo6Oc70k;=6xefK^b|T$c^oAD z>{X@+p2l&v!o%c- z;=2~_^#j)H%hbg+>a{pv1dKr{AxY;(y}*EXWGoUVNTSSrzwR5fJCVx>Kw=iXAyWLV zv?tESB!7*VXr1GrVP%W0fdJP49aqu%q)uw|QJ091^a;N=KKM-UReMIb#fEM6lmhDK64!8i>$1w{Rr zKnHkmG#qFgTr8nsL@-R^A{t*bUYM$_0JC$aBy%H}ra{I!ZA%#8AR{tKjK~1bsPU2| zOBB?Su(heFu`Bvu)tOshmIe}q?*#d5Ma0xb)~VAuPH_>fwy5Dt(j}&{b6f<{+#U@g zK9d=FXI*-J{vl0$cL(g;KAixJoHLTcb+|5T)(P-md+jxiK+zaxq=x&hs;X3jje4g+ z_LHCdMD;_*1%-wpo%QYpIf1z~E-u4$wF5ytBKy_*L@IWIEUpL!9PSUCQ-l4}yY2(7 z(GQ86h%|Qu3sM$JP&6DzNZ)mJ7r1!WNk2x{eNnwnx_@Q=WosZXGyotMH%UwcT|C9C zJBIt$<@52!8`K%fR&9J%R8&;zoXpH33*0jb&bD*;`G*xY5a3(Fk|he~em)DheMXL1 zy5w@8j@3*eE<?1B`Np^OQW(6>H{lynw)GQ>+ zfyreE#@DP_tj*LB}ktk9J_Vg z+&){?5r|tthY20ce2#IxwwC3#*-q}rk)!$y=&mDIHxg?bmX64pPu?{55@|ZN-+uco z9ryC(D`es1ORUv~^?g_YJ1?w{H+(GVsp;wg;zN6=BmwN`Q$g-P@Jvq`4HV1xxY%Q8 zZf=rl)Yn~#G>)Lon!XF~voE;LHN7)9$#Q$}-~mnd$&Jaq@GeKg5(Mq3b2a79JoqQn z(iZh`)X+bB=Hg{kY(@IxF0{J=gKpw1aiG4?M7uagI6R29Vbh2H?5~GQ15Q5JStpLD zxHJN2wBd#5xU+>(aePJ{pV5Xic7hLx+0`};X>8VKx(f#iOni9YW^gRPIC@(%GETy` zaDsExnFE+R!r<8_=pl&g0_My+V$__2@NS;;;c(S>B8Lf$qlX^)g4Q|va{Dw$3JMOR zHP9awDAU;EbCp7a@+Uv}sWJ}}cqS*OsIg?VAS0-!(AZ&AgwF>WL3|F9M2>0f{Em(Q zOSmkfPBdCQpO<7eCQzoaL&J%wpM0h>D$i&B_67%D3hqDD0NEQdh0DP@?KTvdrC?Yw!K1Y(U}pzW8ygIT;To~ zO=ori3GApNe&?CG%KdPBCV3Xl9MUMdpcb9?h|qD12>O6CMY!E~Fx;oi2eUhzz0tUK z**+8{TElT|@>p%LH8A2eK$|Sul?l}2SX)?r)7`eFb8p3pyXC2;o^J{xw%MtUypkC=j7&_m+IWLXU}d0{G7L#X3qK35-XjY4go%IxP2Z2=i=v|e@-)# z*jIP0>Ve*{9p|q*%2S7jqmu?d)gDD8|)SU!@n;#oV9!wi)$kLW;~OkS*8- zf}3Vw7PrM1ctnd0I?U&0sT(DP5={hB+li)DvKw6{3|q?Iilmu_>QT%1mC=F^+hnw=pg>4 z!J_Hv!>uHY1ICpZ24bynfbj?b^UilOJXyaB3X8%r0GfCpE7;*@8e~Q%P#>a0c<;UU zv|T8{A3gJZ3DX2uu6$3)&DfvYm(LgiTN*#V`qi)1XdwaGoH=vVNTCz@_19n3IzJkq z1kQ{^5TIIs+5+qxJHc!SIyR8Vhht_0np$s8NJ>hA0Xj~j6ik_9l*(G3#uvY%G3fwcWlv#_jS(#uVCOTcyRhvWm#M0%MieJU z0sE3AH^K;C9%CG1^xM}SMDhm({`Q<#m!ZXP7> zJbwI`tXsEMzjtLMrJ)A=4z%ICS)Va{Mz{;-eP(;DUAsmd4#6nj<^0T+o_r=*!ehVl z&byGt->jWC7=g#ci_GhZ0OZ%{bHrMfSztcFj+=n+hjf`hgNv~3BVEMGuz-rCv!R?;AR`XCn)E2*4}`q zIHG_~Tzd+{8CkUeIp3{xUDxNn_BZ6;<6&+FAsrAAaYG~I0ODb|Pr_5g#EYMULNO;Q z04ES9AZKkFK{{TTH~m2vb>6;xn|k?a5Ljt_o@1l&!e})?a48(6jB>aO!Rh+->(v;c z1Di(ESWSrgeQ($xskWf;QZfODO?vUrS5%*DqeoQ zwk0&s;lx3_CY~r2@|e%*uh%CX)2DUfvSi*&s6Tlbe(i}l(u^^ROcNC4Ub)^U9Wh6~ zmWjScx61rXg@_Co+Tu@mBIv_P5&k~^m3VG(o7$e!6vlt)G+s1y zolg}jH(fhzhjokmH&mgG>AXU77M)$De*RbcqoT*t2NXXUsL z=e?4eEmtA!e|X0!)GB=O`H-U>TE#6d!YAF9>tOJ?b{8KqSJlmn7Tc=o#DmvwD8;XZ zc?r{$7DI)FzJEwKkfjab*`xFPU6(JgzU!vUhNsvne%i;Qr!WZ--oJYyo$(HQly~(NanohZctfpX7(Ze0>f#N!xzJz3D4W z1~tGD$OZ1IcID$xAWC`rD3lY=LQ5bQr)*{Cw|=8G%kTD3M%I7(}ZX1&kA_(XuLm?4Dwi$v1FU?z3IB2I!OOE!r5p+kQ}c9{(V4D zPSfLy{I$c=&MAWgQp7=yS4*4`7-8A5Bj2o=<>OPX|zo&hD zN1LLQU7sej87AA*{kS~qMR3;%eqK>xN{fJvzY#+dlYPqYK4?2fe}8!My~p3~f)>?d zc$vX*dRmZ>i!g#5EM#@lmo)Vk>!+FLKHf`Lx`@16{ywo7Ny<;b(Xt$w&gHmujPR}Z zy1IGhwTmk^O{mf7nnGiEFV8cBHYx9Uks$#D7OpEU`&Cp|S+ui6VKK*&odP@fO&pa0 zMO}>{*QRFein!Eir6&QXmj@`orB`9!t|8rE7`5q_HT}tuOD%6U+Fe zzaq|TExq#~8 zZaioyL04|m-*74GhM9hdlrECdZP-jxM3WuhgICM#@+Bw;&XGcgm7vZ?7$2rzvCV&( zFsJlvKn-r0sMcJB*0Zk&QfeGrbsd&8AODu6@*Jy{T)+AmH;tY!)sl}w$M3RK~X=-v{euR z1TC&D`WvAV(9y;Z&V%aS*O&+ z7F`sWW8v!Da7nh%&m4b0d3r5Qam7D)&c$zwI*&Sv^3l6dJ?^m7dz29momPid4R2IS zwObcg7;Xp@2;~~@VL2&~R}1BthMNa5E`2yTT-~X=i%~BHOBz{|hMRz0_-}A*|M3Rn z2D>)6>#_j0ZR7qDkwPOQWv`MB9E566t1Rd&ucTNxgE2^}LF-i@Xq=(-Q>FKstRlSduMD|CiXc0j{%yP7}ze_|V+LR%P zYWYx{-yb4~ApN&~+S=L-o&O-ivLm&cWJCNF^t|L3nQk4zQcYY%KlN)aHhj?)3*jT2 z4$-@5x#KLpbf4>o2=g#ESiG1G|6J#6a;*AlVu7*1FOoo8`N0Wh(4mkFuD$|gp#J-J z^Bn;180{H11HQRFY?k_3cjhUAFBi-oBz0b+qVMVUdrjmWAF!A2Xlj|H#SBCw@ zJQDsL^JL35l$?T%udMJBr?jx@fg@N^tZ!2nfM<#oddLT0gL{G>Pe`o(2`96ZaKW>U zLs7OYN*8vSyv|?-CTBt3kLeO&_IW8?>951JbS%y39iUcAnIANcVRRlZjiR+dQ|W< zaE58gB9#<0D;tg@QqH%6Tq{p{E}^XJnl`0$ghA#pwlJc|Y$DoVe2uwr$=malcFA;! zMFY8*v)<`a9?MOa5Z4RhjvMLZK^;`^L8-Dy|NU{G6bhmLS-hw19nVVaUmt|1bGhx`h-;Li}V+@Ob4y!vqWO_im5w?y-CaQALU^h*WxoVg#`tW zkey|}^AS9Gwuvj0XRaH3@XHnfXE8>I=ZG}QzPh^sP^6<#pY?KD8t&6G-~|{WQ3z2} zCc!BXdGRKIBI;Vk#H}DiMxKb3YBd^KMoT%v{cSUcg#+w>+IE3G4L4S%x@%w>{;NTY z&zubltcWpnVv_u*G|f`saVR30`SHp7B)dQ*4YW4Ap-K8xl8F4Pl>93R@y-WOMe1i{ z1XW1q`1=c={F_%kBdYDMXiK_&eq>>1{d3H9Pl{)^a82h-N4AK$zE9RqtCl6ysSnTs z?!Mz)8-AY`A1vt;K-A%jGR)p7c9rgYrgI&#o*yQlFWCT+FCYLhXH+lJ> zLC&-(Qa8|Vrq>A4&#$e-;apIA$RM!G(QfAv1Uj z;L}YJt}UO{Q+7n{a!p_{vKmP)73>JHWKORnosKSOjOfd@&kU)J7=MqV?>4kN>m!77 zjiuZv@>fI_+Q~E0te)wh5r26a`v$N$KVRhS*vOcjhwvLog-xq0mZ`&>nYbLDMfw8CVWMQWV~lvWLkW_33Y(kJ3$C?)oqCRJ zzal4$WOy#X=X$R*hEE$AsUp@g-!i< zWSZ7~fW&&0a!dqOD{Q~2VeYlsmoICU_@Pmn?~#?+Z`H@XPpy{%{HuuM{`6*p z`nIU0l_7pF^4dO1`=^s|D!@=7pAVO2&S_@O=P|L-{i_3SoslV{4z)6rvL+iAzBY}a z(Wh$MoWI-R;oR2PSXe)?v+O2r9SEUZD44nPQ*xQVfl+)ahfhej$IQjK`fm1k-o8ya)=!jOayXIZB}n|ydLC*Wu$_xa}Y)wvVeAjIjsH%!}2^p zg{%m4t`a7t-ebJ3Yxy-tN=5_FxzY45_}_%Kl)|6SEMcH(ILHO%VET2#_XoM`DK0)Y z4&LvO$CP3TK7M}LFM~C2zg3Iz&h&NM(>{df<>e~^A4F2xlT_IG4=orswSRc<2_oo~ zJ6p_yozKmANd)+1b+s@*XTz>&fnq;{8C)9*5KvRG%}Xpq8+RT+Drux;$W1l77NxU6 zUlLwC;}3UC%|36z9L1;+M_nw+l}f*V5;?lmM@Rg7`Xo3{LV2Kzm8F$t)xq1B)ui$2 z!0Gv?zX|ArT_4#)6bz$w$jx>m`J@XIiH%hM{_W(wlTipQSfj4ma9iN9-_Za#?_2OoSnC-RoU6AGuP-V-1wr4;~6 zJeXP!bIS&O&XsajGev89i)IU$a5Zx5$6DgqVuxJypH!+_YXiGQBg7i~x%Q%7@e(6x ze4`uzJ5w7Ce?{AY5pzwmwVyMEriVqoL1-_76T|+Jm-W=hKmw+h0R@Bw=cX!U5;kA> zxL)ubqaObAjpna&lq1(6@Z!IW(ORV})j`Z(Fas*_QUa7V`4a*4l^r~NW*07oM)>LG zQVTw#!e|=Nv_aE8_TwG+)our}qE6hVv?Ftxm20hLf2$YX-#qfuo(ZxSB;%Z>B} z@9FU2zMk^=^U*M$OoYGB_xfn&NBUz#x3or!%ceYF{tx-Lmey9;KK|7FDZcWG3feOOLE?o8> ze%mhZnaDyMP+|wpKcWHrBP{r3az~#xW0)tsB?c+58I&W0pFG0+G>b(En#|$&pk_GKqF2SrX$iM%I-ua#M>yNg1@`RkfRd5I+R|`^; zO!+Y`Xgy6Eg?%y@FPVrT|6zIQ}CMi{&4Y zs4fK*x>qvdw@A5}#A!k;U|Kl-Ln=LB0W}ph`Qo`iQn2=~6WxhFGURwWCp;jZd~0Jv zxZ$_K;~>(NoW*nbl10w=xuQV%9{EW$$@MxQ_-eM*(e%UdQlotjZrWOHe!gBOch+_~ zY?hw?YrY&#XgiGMw=N>wRAx3ng+-Ku*xlp^NH!*rD>6 z!}WcEIQa-K08!Tjb&vRyOrzLrMNlMbP_j9%b^p16l7WLxr97-AeL9u*F*TtX60C`e znJ+c`<1JD-6{W|GMpqP^5Q5a6zf(IT-V=&g4NpO1Z1lr3ZFS6&4XhPP%WD&MWX7|H zO6{4s&!DwNhSGLzVZX?C#-WrVrW53Vg1c)fKDH2S5RASmm1Pyk#7rk4*d|kv{HPFw z?1Sx))U9vA#K(#(slzu1)Ylh@w`WsZE~J3CMzgU3nflLfB1r~B@&KvqqpQG-5lUVVO^-)8h0Z%ljsQ<^=JeOuLbUHGMo6n#jg-W8b4azol$zNA2vocd$cU5I_Ga7gN1WqS~R* zV+)yd79#@M1nimNqv|UHGXcUA(^y8QRgA8Iy%}+Je+UFK*8+?Y06+A?#U1|}`&7~1` zCEd|?ZpTTE;C*9Ic$XGW_c2SD$=ShTO+Z5Zzrjk^&gMhsD=oVCH>%#qJ-mD>Q<)e0 z$Rtt;t(Lql$#%Vb&Aa58vrBuk`bA!HK&g*Oy#Boy7Oh|;n|6WpS7yVn zCS8)T^A&ehi#T*BgZCfnk2*fNRWRg<1Eo=kyY{ z6JZ2}DHFqw%oL8kSSp*Bd&Mwy_T%%x(kAx2flP{U+Ih-s#t=KbDNh!JWvDe*QSN)}U@aKiB#}poRvEI<@JQJbNPRgNT?!v_9o-ZQ0 z007(16LDIARo-=BR)7-!mPIgWx+8Kb-{28rSGPB%N;_=ofGm4T?Y76nJ-d+_cZqR} zwvrNGnU2x>7rQ2Yr+m18V@Irzkk<)Bw>J#ij_=SF) zQcxD=C~%T3O1O<$7abUP4;e0=`S_0?A?1mN@%^JxC^t3b96nYs;NJ(4+8ymŌr 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�#1m^h?5H8e5)ctFJ#%WGTnB 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 SEBQI#byq`Az2uH{(0>6BwX!z= literal 0 HcmV?d00001 diff --git a/prerequisites.yaml b/prerequisites.yaml deleted file mode 100755 index fb4bdbc..0000000 --- a/prerequisites.yaml +++ /dev/null @@ -1,695 +0,0 @@ ---- -AWSTemplateFormatVersion: "2010-09-09" - -Description: - Deploys the Wild Rydes workshop - -Parameters: - BucketName: - Type: String - Description: The name for the bucket hosting your website, e.g. 'wildrydes-yourname' - - CodeBucket: - Type: String - Default: wildrydes-us-east-1 - Description: S3 bucket containing the code deployed by this template - -Metadata: - AWS::CloudFormation::Interface: - ParameterGroups: - - - Label: - default: "Website Configuration" - Parameters: - - BucketName - - - Label: - default: "Advanced Configuration" - Parameters: - - CodeBucket - ParameterLabels: - BucketName: - default: "Website Bucket Name" - -Resources: - WebsiteBucket: - Properties: - BucketName: !Ref BucketName - WebsiteConfiguration: - IndexDocument: index.html - Type: "AWS::S3::Bucket" - - WebsiteBucketPolicy: - Properties: - Bucket: !Ref WebsiteBucket - PolicyDocument: - Version: 2012-10-17 - Statement: - - - Effect: Allow - Principal: "*" - Action: s3:GetObject - Resource: !Sub "arn:aws:s3:::${WebsiteBucket}/*" - Type: "AWS::S3::BucketPolicy" - - WebsiteContent: - Properties: - ServiceToken: !GetAtt CopyS3ObjectsFunction.Arn - SourceBucket: !Ref CodeBucket - SourcePrefix: "WebApplication/1_StaticWebHosting/website/" - Bucket: !Ref WebsiteBucket - Type: "Custom::S3Objects" - - S3CopyRole: - Type: AWS::IAM::Role - Properties: - - Path: /wildrydes/ - AssumeRolePolicyDocument: - Version: 2012-10-17 - Statement: - - - Effect: Allow - Principal: - Service: lambda.amazonaws.com - Action: sts:AssumeRole - Policies: - - - PolicyName: S3Access - PolicyDocument: - Version: 2012-10-17 - Statement: - - - Sid: AllowLogging - Effect: Allow - Action: - - "logs:CreateLogGroup" - - "logs:CreateLogStream" - - "logs:PutLogEvents" - Resource: "*" - - - Sid: SourceBucketReadAccess - Effect: Allow - Action: - - "s3:ListBucket" - - "s3:GetObject" - Resource: - - !Sub "arn:aws:s3:::${CodeBucket}" - - !Sub "arn:aws:s3:::${CodeBucket}/WebApplication/1_StaticWebHosting/*" - - - Sid: DestBucketWriteAccess - Effect: Allow - Action: - - "s3:ListBucket" - - "s3:GetObject" - - "s3:PutObject" - - "s3:PutObjectAcl" - - "s3:PutObjectVersionAcl" - - "s3:DeleteObject" - - "s3:DeleteObjectVersion" - - "s3:CopyObject" - Resource: - - !Sub "arn:aws:s3:::${WebsiteBucket}" - - !Sub "arn:aws:s3:::${WebsiteBucket}/*" - - CopyS3ObjectsFunction: - Properties: - Description: Copies objects from a source S3 bucket to a destination - Handler: index.handler - Runtime: python2.7 - Role: !GetAtt S3CopyRole.Arn - Timeout: 120 - Code: - ZipFile: | - import os - import json - import cfnresponse - - import boto3 - from botocore.exceptions import ClientError - client = boto3.client('s3') - - import logging - logger = logging.getLogger() - logger.setLevel(logging.INFO) - - def handler(event, context): - logger.info("Received event: %s" % json.dumps(event)) - source_bucket = event['ResourceProperties']['SourceBucket'] - source_prefix = event['ResourceProperties'].get('SourcePrefix') or '' - bucket = event['ResourceProperties']['Bucket'] - prefix = event['ResourceProperties'].get('Prefix') or '' - - result = cfnresponse.SUCCESS - - try: - if event['RequestType'] == 'Create' or event['RequestType'] == 'Update': - result = copy_objects(source_bucket, source_prefix, bucket, prefix) - elif event['RequestType'] == 'Delete': - result = delete_objects(bucket, prefix) - except ClientError as e: - logger.error('Error: %s', e) - result = cfnresponse.FAILED - - cfnresponse.send(event, context, result, {}) - - - def copy_objects(source_bucket, source_prefix, bucket, prefix): - paginator = client.get_paginator('list_objects_v2') - page_iterator = paginator.paginate(Bucket=source_bucket, Prefix=source_prefix) - for key in {x['Key'] for page in page_iterator for x in page['Contents']}: - dest_key = os.path.join(prefix, os.path.relpath(key, source_prefix)) - if not key.endswith('/'): - print 'copy {} to {}'.format(key, dest_key) - client.copy_object(CopySource={'Bucket': source_bucket, 'Key': key}, Bucket=bucket, Key = dest_key) - return cfnresponse.SUCCESS - - def delete_objects(bucket, prefix): - paginator = client.get_paginator('list_objects_v2') - page_iterator = paginator.paginate(Bucket=bucket, Prefix=prefix) - objects = [{'Key': x['Key']} for page in page_iterator for x in page['Contents']] - client.delete_objects(Bucket=bucket, Delete={'Objects': objects}) - return cfnresponse.SUCCESS - - - Type: AWS::Lambda::Function - - UserPool: - Type: AWS::Cognito::UserPool - Properties: - UserPoolName: WildRydes - AliasAttributes: - - email - AutoVerifiedAttributes: - - email - Schema: - - AttributeDataType: String - Name: email - Required: true - - UserPoolClient: - Type: AWS::Cognito::UserPoolClient - Properties: - ClientName: WildRydesWeb - UserPoolId: !Ref UserPool - GenerateSecret: false - - UpdateUserPoolConfig: - Properties: - ServiceToken: !GetAtt UpdateCognitoConfigFunction.Arn - UserPool: !Ref UserPool - Client: !Ref UserPoolClient - Region: !Ref "AWS::Region" - Bucket: !Ref WebsiteBucket - Type: "Custom::CognitoConfigFile" - - UpdateConfigRole: - Type: AWS::IAM::Role - Properties: - - Path: /wildrydes/ - AssumeRolePolicyDocument: - Version: 2012-10-17 - Statement: - - - Effect: Allow - Principal: - Service: lambda.amazonaws.com - Action: sts:AssumeRole - Policies: - - - PolicyName: CognitoConfig - PolicyDocument: - Version: 2012-10-17 - Statement: - - - Sid: Logging - Effect: Allow - Action: - - "logs:CreateLogGroup" - - "logs:CreateLogStream" - - "logs:PutLogEvents" - Resource: "*" - - - Sid: Cognito - Effect: Allow - Action: - - "cognito-idp:CreateUserPool" - - "cognito-idp:DeleteUserPool" - - "cognito-idp:CreateUserPoolClient" - - "cognito-idp:DeleteUserPoolClient" - Resource: "*" - - - Sid: ConfigBucketWriteAccess - Effect: Allow - Action: - - "s3:PutObject" - - "s3:PutObjectAcl" - - "s3:PutObjectVersionAcl" - Resource: - - !Sub "arn:aws:s3:::${WebsiteBucket}/*" - - UpdateCognitoConfigFunction: - Properties: - Description: Copies objects from a source S3 bucket to a destination - Handler: index.handler - Runtime: python2.7 - Role: !GetAtt UpdateConfigRole.Arn - Timeout: 120 - Code: - ZipFile: | - import json - import boto3 - import cfnresponse - - s3 = boto3.resource('s3') - - def create(properties, physical_id): - userPoolId = properties['UserPool'] - clientId = properties['Client'] - region = properties['Region'] - bucket = properties['Bucket'] - - object = s3.Object(bucket, 'js/config.js') - config_content = """ - var _config = { - cognito: { - userPoolId: '%s', // e.g. us-east-2_uXboG5pAb - userPoolClientId: '%s', // e.g. 25ddkmj4v6hfsfvruhpfi7n4hv - region: '%s', // e.g. us-east-2 - }, - api: { - invokeUrl: 'Base URL of your API including the stage', // e.g. https://rc7nyt4tql.execute-api.us-west-2.amazonaws.com/prod' - } - }; - """ - config_content = config_content % (userPoolId, clientId, region) - print "Writing config content: %s" % config_content - print "Writing to bucket: %s" % bucket - config = s3.Object(bucket,'js/config.js') - config.put(Body=config_content) - return cfnresponse.SUCCESS, None - - def update(properties, physical_id): - return create(properties, physical_id) - - def delete(properties, physical_id): - return cfnresponse.SUCCESS, physical_id - - def handler(event, context): - print "Received event: %s" % json.dumps(event) - - status = cfnresponse.FAILED - new_physical_id = None - - try: - properties = event.get('ResourceProperties') - physical_id = event.get('PhysicalResourceId') - - status, new_physical_id = { - 'Create': create, - 'Update': update, - 'Delete': delete - }.get(event['RequestType'], lambda x, y: (cfnresponse.FAILED, None))(properties, physical_id) - except Exception as e: - print "Exception: %s" % e - status = cfnresponse.FAILED - finally: - cfnresponse.send(event, context, status, {}, new_physical_id) - - Type: AWS::Lambda::Function - DependsOn: WebsiteContent - - RidesTable: - Type: AWS::DynamoDB::Table - Properties: - TableName: Rides - AttributeDefinitions: - - - AttributeName: RideId - AttributeType: S - KeySchema: - - - AttributeName: RideId - KeyType: HASH - ProvisionedThroughput: - ReadCapacityUnits: 5 - WriteCapacityUnits: 5 - - RequestUnicornExecutionRole: - Type: AWS::IAM::Role - Properties: - RoleName: WildRydesLambda - AssumeRolePolicyDocument: - Version: 2012-10-17 - Statement: - - - Effect: Allow - Principal: - Service: - - lambda.amazonaws.com - Action: - - "sts:AssumeRole" - Path: "/wildrydes/" - ManagedPolicyArns: - - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole - Policies: - - - PolicyName: PutRidePolicy - PolicyDocument: - Version: 2012-10-17 - Statement: - - - Effect: Allow - Action: - - dynamodb:PutItem - - dynamodb:Scan - Resource: !GetAtt RidesTable.Arn - - RequestUnicornFunction: - Type: AWS::Lambda::Function - Properties: - FunctionName: RequestUnicorn - Runtime: nodejs6.10 - Role: !GetAtt RequestUnicornExecutionRole.Arn - Timeout: 5 - MemorySize: 128 - Handler: index.handler - Code: - ZipFile: > - const randomBytes = require('crypto').randomBytes; - - const AWS = require('aws-sdk'); - - const ddb = new AWS.DynamoDB.DocumentClient(); - - const fleet = [ - { - Name: 'Bucephalus', - Color: 'Golden', - Gender: 'Male', - }, - { - Name: 'Shadowfax', - Color: 'White', - Gender: 'Male', - }, - { - Name: 'Rocinante', - Color: 'Yellow', - Gender: 'Female', - }, - ]; - - exports.handler = (event, context, callback) => { - if (!event.requestContext.authorizer) { - errorResponse('Authorization not configured', context.awsRequestId, callback); - return; - } - - const rideId = toUrlString(randomBytes(16)); - console.log('Received event (', rideId, '): ', event); - - // Because we're using a Cognito User Pools authorizer, all of the claims - // included in the authentication token are provided in the request context. - // This includes the username as well as other attributes. - const username = event.requestContext.authorizer.claims['cognito:username']; - - // The body field of the event in a proxy integration is a raw string. - // In order to extract meaningful values, we need to first parse this string - // into an object. A more robust implementation might inspect the Content-Type - // header first and use a different parsing strategy based on that value. - const requestBody = JSON.parse(event.body); - - const pickupLocation = requestBody.PickupLocation; - - const unicorn = findUnicorn(pickupLocation); - - recordRide(rideId, username, unicorn).then(() => { - // You can use the callback function to provide a return value from your Node.js - // Lambda functions. The first parameter is used for failed invocations. The - // second parameter specifies the result data of the invocation. - - // Because this Lambda function is called by an API Gateway proxy integration - // the result object must use the following structure. - callback(null, { - statusCode: 201, - body: JSON.stringify({ - RideId: rideId, - Unicorn: unicorn, - UnicornName: unicorn.Name, - Eta: '30 seconds', - Rider: username, - }), - headers: { - 'Access-Control-Allow-Origin': '*', - }, - }); - }).catch((err) => { - console.error(err); - - // If there is an error during processing, catch it and return - // from the Lambda function successfully. Specify a 500 HTTP status - // code and provide an error message in the body. This will provide a - // more meaningful error response to the end client. - errorResponse(err.message, context.awsRequestId, callback) - }); - }; - - // This is where you would implement logic to find the optimal unicorn for - // this ride (possibly invoking another Lambda function as a microservice.) - // For simplicity, we'll just pick a unicorn at random. - - function findUnicorn(pickupLocation) { - console.log('Finding unicorn for ', pickupLocation.Latitude, ', ', pickupLocation.Longitude); - return fleet[Math.floor(Math.random() * fleet.length)]; - } - - function recordRide(rideId, username, unicorn) { - return ddb.put({ - TableName: 'Rides', - Item: { - RideId: rideId, - User: username, - Unicorn: unicorn, - UnicornName: unicorn.Name, - RequestTime: new Date().toISOString(), - }, - }).promise(); - } - - function toUrlString(buffer) { - return buffer.toString('base64') - .replace(/\+/g, '-') - .replace(/\//g, '_') - .replace(/=/g, ''); - } - - function errorResponse(errorMessage, awsRequestId, callback) { - callback(null, { - statusCode: 500, - body: JSON.stringify({ - Error: errorMessage, - Reference: awsRequestId, - }), - headers: { - 'Access-Control-Allow-Origin': '*', - }, - }); - } - - WildRydesApi: - Type: AWS::ApiGateway::RestApi - Properties: - Name: WildRydes - Body: - swagger: 2.0 - info: - version: 1.0.0 - title: WildRydes - paths: - /ride: - post: - description: Requests a new ride - consumes: - - application/json - produces: - - application/json - security: - - CognitoAuthorizer: [] - responses: - "200": - description: "200 response" - headers: - Access-Control-Allow-Origin: - type: "string" - x-amazon-apigateway-integration: - responses: - default: - statusCode: 200 - responseParameters: - method.response.header.Access-Control-Allow-Origin: "'*'" - uri: - Fn::Join: - - "" - - - "arn:aws:apigateway:" - - !Ref AWS::Region - - ":lambda:path/2015-03-31/functions/" - - !GetAtt RequestUnicornFunction.Arn - - "/invocations" - passthroughBehavior: "when_no_match" - httpMethod: "POST" - contentHandling: "CONVERT_TO_TEXT" - type: "aws_proxy" - options: - responses: - "200": - description: "200 response" - schema: - $ref: "#/definitions/Empty" - headers: - Access-Control-Allow-Origin: - type: "string" - Access-Control-Allow-Methods: - type: "string" - Access-Control-Allow-Headers: - type: "string" - x-amazon-apigateway-integration: - responses: - default: - statusCode: "200" - responseParameters: - method.response.header.Access-Control-Allow-Methods: "'GET,OPTIONS,POST'" - method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key'" - method.response.header.Access-Control-Allow-Origin: "'*'" - requestTemplates: - application/json: "{\"statusCode\": 200}" - passthroughBehavior: "when_no_match" - type: "mock" - securityDefinitions: - CognitoAuthorizer: - type: "apiKey" - name: Authorization - in: header - x-amazon-apigateway-authtype: cognito_user_pools - x-amazon-apigateway-authorizer: - providerARNs: - - Fn::Join: - - "" - - - "arn:aws:cognito-idp:" - - !Ref AWS::Region - - ":" - - !Ref AWS::AccountId - - ":userpool/" - - !Ref UserPool - type: "cognito_user_pools" - - - WildRydesApiDeployment: - Type: AWS::ApiGateway::Deployment - Properties: - Description: Prod deployment for wild Rydes API - RestApiId: !Ref WildRydesApi - StageName: prod - - WildRydesFunctionPermissions: - Type: AWS::Lambda::Permission - Properties: - Action: lambda:InvokeFunction - FunctionName: !Ref RequestUnicornFunction - Principal: apigateway.amazonaws.com - SourceArn: - Fn::Join: - - "" - - - "arn:aws:execute-api:" - - !Ref AWS::Region - - ":" - - !Ref AWS::AccountId - - ":" - - !Ref WildRydesApi - - "/*" - - UpdateApiConfig: - Type: "Custom::ApiConfigFile" - Properties: - ServiceToken: !GetAtt UpdateApiConfigFunction.Arn - Bucket: !Ref WebsiteBucket - InvokeUrl: - Fn::Join: - - "" - - - "https://" - - !Ref WildRydesApi - - ".execute-api." - - !Ref AWS::Region - - ".amazonaws.com/prod" - - UpdateApiConfigFunction: - Type: AWS::Lambda::Function - DependsOn: UpdateCognitoConfigFunction - Properties: - Description: Adds the API endpoint to the config.js file - Handler: index.handler - Runtime: python2.7 - Role: !GetAtt UpdateConfigRole.Arn - Timeout: 120 - Code: - ZipFile: | - import json - import boto3 - import cfnresponse - - s3 = boto3.resource('s3') - - def create(properties, physical_id): - bucket = properties['Bucket'] - config_object = s3.Object(bucket, 'js/config.js').get() - config_data = config_object["Body"].read() - print "Current config: %s" % config_data - config_data = config_data.replace("Base URL of your API including the stage", properties["InvokeUrl"]) - print "Modified config: %s" % config_data - config = s3.Object(bucket,'js/config.js') - config.put(Body=config_data) - return cfnresponse.SUCCESS, None - - def update(properties, physical_id): - return create(properties, physical_id) - - def delete(properties, physical_id): - return cfnresponse.SUCCESS, physical_id - - def handler(event, context): - print "Received event: %s" % json.dumps(event) - - status = cfnresponse.FAILED - new_physical_id = None - - try: - properties = event.get('ResourceProperties') - physical_id = event.get('PhysicalResourceId') - - status, new_physical_id = { - 'Create': create, - 'Update': update, - 'Delete': delete - }.get(event['RequestType'], lambda x, y: (cfnresponse.FAILED, None))(properties, physical_id) - except Exception as e: - print "Exception: %s" % e - status = cfnresponse.FAILED - finally: - cfnresponse.send(event, context, status, {}, new_physical_id) - -Outputs: - WebsiteURL: - Value: !GetAtt WebsiteBucket.WebsiteURL - WildRydesApiInvokeUrl: - Description: URL for the deployed wild rydes API - Value: - Fn::Join: - - "" - - - "https://" - - !Ref WildRydesApi - - ".execute-api." - - !Ref AWS::Region - - ".amazonaws.com/prod" - Export: - Name: WildRydesApiUrl diff --git a/prerequisitesv2.yaml b/prerequisitesv2.yaml deleted file mode 100644 index 9b4f4a2..0000000 --- a/prerequisitesv2.yaml +++ /dev/null @@ -1,182 +0,0 @@ -AWSTemplateFormatVersion: '2010-09-09' -Description: Creates an S3 bucket and CloudFormation configured for hosting a static website - -Parameters: - BucketName: - Type: String - Description: The name for the bucket hosting your website, e.g. 'datamanager-yourname' - -Resources: - WebsiteBucket: - Type: AWS::S3::Bucket - Properties: - BucketName: !Ref BucketName - AccessControl: PublicRead - WebsiteConfiguration: - IndexDocument: index.html - DeletionPolicy: Retain - - WebsiteBucketPolicy: - Type: AWS::S3::BucketPolicy - Properties: - Bucket: !Ref 'WebsiteBucket' - PolicyDocument: - Statement: - - Sid: PublicReadForGetBucketObjects - Effect: Allow - Principal: '*' - Action: s3:GetObject - Resource: !Join ['', ['arn:aws:s3:::', !Ref 'WebsiteBucket', /*]] - - WebsiteCloudfront: - Type: AWS::CloudFront::Distribution - DependsOn: - - WebsiteBucket - Properties: - DistributionConfig: - Comment: Cloudfront Distribution pointing to S3 bucket - Origins: - - DomainName: !Select [2, !Split ["/", !GetAtt WebsiteBucket.WebsiteURL]] - Id: S3Origin - CustomOriginConfig: - HTTPPort: '80' - HTTPSPort: '443' - OriginProtocolPolicy: http-only - Enabled: true - HttpVersion: 'http2' - DefaultRootObject: index.html - DefaultCacheBehavior: - AllowedMethods: - - GET - - HEAD - Compress: true - TargetOriginId: S3Origin - ForwardedValues: - QueryString: true - Cookies: - Forward: none - ViewerProtocolPolicy: redirect-to-https - PriceClass: PriceClass_All - - SecretsTable: - Type: AWS::DynamoDB::Table - Properties: - TableName: ADFSSecretData - AttributeDefinitions: - - - AttributeName: email - AttributeType: S - KeySchema: - - - AttributeName: email - KeyType: HASH - ProvisionedThroughput: - ReadCapacityUnits: 5 - WriteCapacityUnits: 5 - - RequestSecretDataExecutionRole: - Type: AWS::IAM::Role - Properties: - RoleName: SecretDataLambda - AssumeRolePolicyDocument: - Version: 2012-10-17 - Statement: - - - Effect: Allow - Principal: - Service: - - lambda.amazonaws.com - Action: - - "sts:AssumeRole" - ManagedPolicyArns: - - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole - Policies: - - - PolicyName: SecretDataPolicy - PolicyDocument: - Version: 2012-10-17 - Statement: - - - Effect: Allow - Action: - - dynamodb:Scan - Resource: !GetAtt SecretsTable.Arn - - RequestSecretDataFunction: - Type: AWS::Lambda::Function - Properties: - FunctionName: ListSecretData - Runtime: nodejs6.10 - Role: !GetAtt RequestSecretDataExecutionRole.Arn - Timeout: 5 - MemorySize: 128 - Handler: index.handler - Code: - ZipFile: > - const AWS = require('aws-sdk'); - - const ddb = new AWS.DynamoDB.DocumentClient(); - - exports.handler = (event, context, callback) => { - if (!event.requestContext.authorizer) { - errorResponse('Authorization not configured', context.awsRequestId, callback); - return; - } - - console.log('Received event: ', event); - - listSecrets(event.requestContext.authorizer.claims.email).then((data) => { - // You can use the callback function to provide a return value from your Node.js - // Lambda functions. The first parameter is used for failed invocations. The - // second parameter specifies the result data of the invocation. - - // Because this Lambda function is called by an API Gateway proxy integration - // the result object must use the following structure. - callback(null, { - statusCode: 200, - body: JSON.stringify(data.Items), - headers: { - 'Access-Control-Allow-Origin': '*', - }, - }); - }).catch((err) => { - console.error(err); - - // If there is an error during processing, catch it and return - // from the Lambda function successfully. Specify a 500 HTTP status - // code and provide an error message in the body. This will provide a - // more meaningful error response to the end client. - errorResponse(err.message, context.awsRequestId, callback) - }); - }; - - function listSecrets(username) { - return ddb.scan({ - ExpressionAttributeValues: { - ":u": username - }, - FilterExpression: 'email = :u', - TableName: 'ADFSSecretData', - }).promise(); - } - - function errorResponse(errorMessage, awsRequestId, callback) { - callback(null, { - statusCode: 500, - body: JSON.stringify({ - Error: errorMessage, - Reference: awsRequestId, - }), - headers: { - 'Access-Control-Allow-Origin': '*', - }, - }); - } - -Outputs: - BucketName: - Value: !Ref 'WebsiteBucket' - Description: Name of S3 bucket to hold website content - CloudfrontEndpoint: - Value: !GetAtt [WebsiteCloudfront, DomainName] - Description: Endpoint for Cloudfront distribution diff --git a/prerequisitesv3.yaml b/prerequisitesv3.yaml deleted file mode 100644 index 029ed0f..0000000 --- a/prerequisitesv3.yaml +++ /dev/null @@ -1,273 +0,0 @@ -AWSTemplateFormatVersion: '2010-09-09' -Description: Creates an S3 bucket and CloudFormation configured for hosting a static website - -Parameters: - BucketName: - Type: String - Description: The name for the bucket hosting your website, e.g. 'datamanager-yourname' - -Resources: - WebsiteBucket: - Type: AWS::S3::Bucket - Properties: - BucketName: !Ref BucketName - AccessControl: PublicRead - WebsiteConfiguration: - IndexDocument: index.html - DeletionPolicy: Retain - - WebsiteBucketPolicy: - Type: AWS::S3::BucketPolicy - Properties: - Bucket: !Ref 'WebsiteBucket' - PolicyDocument: - Statement: - - Sid: PublicReadForGetBucketObjects - Effect: Allow - Principal: '*' - Action: s3:GetObject - Resource: !Join ['', ['arn:aws:s3:::', !Ref 'WebsiteBucket', /*]] - - WebsiteCloudfront: - Type: AWS::CloudFront::Distribution - DependsOn: - - WebsiteBucket - Properties: - DistributionConfig: - Comment: Cloudfront Distribution pointing to S3 bucket - Origins: - - DomainName: !Select [2, !Split ["/", !GetAtt WebsiteBucket.WebsiteURL]] - Id: S3Origin - CustomOriginConfig: - HTTPPort: '80' - HTTPSPort: '443' - OriginProtocolPolicy: http-only - Enabled: true - HttpVersion: 'http2' - DefaultRootObject: index.html - DefaultCacheBehavior: - AllowedMethods: - - GET - - HEAD - Compress: true - TargetOriginId: S3Origin - ForwardedValues: - QueryString: true - Cookies: - Forward: none - ViewerProtocolPolicy: redirect-to-https - PriceClass: PriceClass_All - - SecretsTable: - Type: AWS::DynamoDB::Table - Properties: - TableName: ADFSSecretData - AttributeDefinitions: - - - AttributeName: email - AttributeType: S - KeySchema: - - - AttributeName: email - KeyType: HASH - ProvisionedThroughput: - ReadCapacityUnits: 5 - WriteCapacityUnits: 5 - - RequestSecretDataExecutionRole: - Type: AWS::IAM::Role - Properties: - RoleName: SecretDataLambda - AssumeRolePolicyDocument: - Version: 2012-10-17 - Statement: - - - Effect: Allow - Principal: - Service: - - lambda.amazonaws.com - Action: - - "sts:AssumeRole" - ManagedPolicyArns: - - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole - Policies: - - - PolicyName: SecretDataPolicy - PolicyDocument: - Version: 2012-10-17 - Statement: - - - Effect: Allow - Action: - - dynamodb:Scan - Resource: !GetAtt SecretsTable.Arn - - RequestSecretDataFunction: - Type: AWS::Lambda::Function - Properties: - FunctionName: ListSecretData - Runtime: nodejs6.10 - Role: !GetAtt RequestSecretDataExecutionRole.Arn - Timeout: 5 - MemorySize: 128 - Handler: index.handler - Code: - ZipFile: > - const AWS = require('aws-sdk'); - - const ddb = new AWS.DynamoDB.DocumentClient(); - - exports.handler = (event, context, callback) => { - if (!event.requestContext.authorizer) { - errorResponse('Authorization not configured', context.awsRequestId, callback); - return; - } - - console.log('Received event: ', event); - - listSecrets(event.requestContext.authorizer.claims.email).then((data) => { - // You can use the callback function to provide a return value from your Node.js - // Lambda functions. The first parameter is used for failed invocations. The - // second parameter specifies the result data of the invocation. - - // Because this Lambda function is called by an API Gateway proxy integration - // the result object must use the following structure. - callback(null, { - statusCode: 200, - body: JSON.stringify(data.Items), - headers: { - 'Access-Control-Allow-Origin': '*', - }, - }); - }).catch((err) => { - console.error(err); - - // If there is an error during processing, catch it and return - // from the Lambda function successfully. Specify a 500 HTTP status - // code and provide an error message in the body. This will provide a - // more meaningful error response to the end client. - errorResponse(err.message, context.awsRequestId, callback) - }); - }; - - function listSecrets(username) { - return ddb.scan({ - ExpressionAttributeValues: { - ":u": username - }, - FilterExpression: 'email = :u', - TableName: 'ADFSSecretData', - }).promise(); - } - - function errorResponse(errorMessage, awsRequestId, callback) { - callback(null, { - statusCode: 500, - body: JSON.stringify({ - Error: errorMessage, - Reference: awsRequestId, - }), - headers: { - 'Access-Control-Allow-Origin': '*', - }, - }); - } - - WildRydesApi: - Type: AWS::ApiGateway::RestApi - Properties: - Name: WildRydes - Body: - swagger: 2.0 - info: - version: 1.0.0 - title: WildRydes - paths: - /ride: - post: - description: Requests a new ride - consumes: - - application/json - produces: - - application/json - responses: - "200": - description: "200 response" - headers: - Access-Control-Allow-Origin: - type: "string" - x-amazon-apigateway-integration: - responses: - default: - statusCode: 200 - responseParameters: - method.response.header.Access-Control-Allow-Origin: "'*'" - uri: - Fn::Join: - - "" - - - "arn:aws:apigateway:" - - !Ref AWS::Region - - ":lambda:path/2015-03-31/functions/" - - !GetAtt RequestSecretDataFunction.Arn - - "/invocations" - passthroughBehavior: "when_no_match" - httpMethod: "POST" - contentHandling: "CONVERT_TO_TEXT" - type: "aws_proxy" - options: - responses: - "200": - description: "200 response" - schema: - $ref: "#/definitions/Empty" - headers: - Access-Control-Allow-Origin: - type: "string" - Access-Control-Allow-Methods: - type: "string" - Access-Control-Allow-Headers: - type: "string" - x-amazon-apigateway-integration: - responses: - default: - statusCode: "200" - responseParameters: - method.response.header.Access-Control-Allow-Methods: "'GET,OPTIONS,POST'" - method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key'" - method.response.header.Access-Control-Allow-Origin: "'*'" - requestTemplates: - application/json: "{\"statusCode\": 200}" - passthroughBehavior: "when_no_match" - type: "mock" - - WildRydesApiDeployment: - Type: AWS::ApiGateway::Deployment - Properties: - Description: Prod deployment for wild Rydes API - RestApiId: !Ref WildRydesApi - StageName: prod - - WildRydesFunctionPermissions: - Type: AWS::Lambda::Permission - Properties: - Action: lambda:InvokeFunction - FunctionName: !Ref RequestSecretDataFunction - Principal: apigateway.amazonaws.com - SourceArn: - Fn::Join: - - "" - - - "arn:aws:execute-api:" - - !Ref AWS::Region - - ":" - - !Ref AWS::AccountId - - ":" - - !Ref WildRydesApi - - "/*" - -Outputs: - BucketName: - Value: !Ref 'WebsiteBucket' - Description: Name of S3 bucket to hold website content - CloudfrontEndpoint: - Value: !GetAtt [WebsiteCloudfront, DomainName] - Description: Endpoint for Cloudfront distribution