From c26bb4df689a377af40c4fc8ff6f2de2daea482d Mon Sep 17 00:00:00 2001 From: Arto Gahr Date: Thu, 14 May 2026 20:24:43 +0200 Subject: [PATCH 01/12] docs: fix academy ikea highest price example prices --- .../03_devtools_extracting_data.md | 6 +++--- .../scraping_basics_python/03_devtools_extracting_data.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sources/academy/webscraping/scraping_basics_javascript/03_devtools_extracting_data.md b/sources/academy/webscraping/scraping_basics_javascript/03_devtools_extracting_data.md index e774b7e1d7..fde2d094c2 100644 --- a/sources/academy/webscraping/scraping_basics_javascript/03_devtools_extracting_data.md +++ b/sources/academy/webscraping/scraping_basics_javascript/03_devtools_extracting_data.md @@ -81,7 +81,7 @@ In the next lesson, we'll start with our Node.js project. First we'll be figurin ### Extract the price of IKEA's most expensive artificial plant -At IKEA's [Artificial plants & flowers listing](https://www.ikea.com/se/en/cat/artificial-plants-flowers-20492/), use CSS selectors and HTML elements manipulation in the **Console** to extract the price of the most expensive artificial plant (sold in Sweden, as you'll be browsing their Swedish offer). Before opening DevTools, use your judgment to adjust the page to make the task as straightforward as possible. Finally, use the [`parseInt()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt) function to convert the price text into a number. +At IKEA's [Artificial plants & flowers listing](https://www.ikea.com/se/en/cat/artificial-plants-flowers-20492/), use CSS selectors and HTML elements manipulation in the **Console** to extract the price of the most expensive artificial plant (sold in Sweden, as you'll be browsing their Swedish offer). Before opening DevTools, use your judgment to adjust the page to make the task as straightforward as possible. Finally, use the [`parseInt()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt) function to convert the price text into a number (you may need [`replace()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace) to handle spaces).
Solution @@ -93,8 +93,8 @@ At IKEA's [Artificial plants & flowers listing](https://www.ikea.com/se/en/cat/a 1. Notice that the price is structured into two elements, with the integer separated from the currency, under a class named `plp-price__integer`. This structure is convenient for extracting the value. 1. In the **Console**, execute `document.querySelector('.plp-price__integer')`. This returns the element representing the first price in the listing. Since `document.querySelector()` returns the first matching element, it directly selects the most expensive plant's price. 1. Save the element in a variable by executing `price = document.querySelector('.plp-price__integer')`. - 1. Convert the price text into a number by executing `parseInt(price.textContent)`. - 1. At the time of writing, this returns `699`, meaning [699 SEK](https://www.google.com/search?q=699%20sek). + 1. Convert the price text into a number by executing `parseInt(price.textContent.replace(' ', ''))`. Note that `replace(' ', '')` removes spaces from the price string before converting it to a number. + 1. At the time of writing, this returns `1299`, meaning [1 299 SEK](https://www.google.com/search?q=1299%20sek).
diff --git a/sources/academy/webscraping/scraping_basics_python/03_devtools_extracting_data.md b/sources/academy/webscraping/scraping_basics_python/03_devtools_extracting_data.md index f864362f8a..66f04d391d 100644 --- a/sources/academy/webscraping/scraping_basics_python/03_devtools_extracting_data.md +++ b/sources/academy/webscraping/scraping_basics_python/03_devtools_extracting_data.md @@ -78,7 +78,7 @@ In the next lesson, we'll start with our Python project. First we'll be figuring ### Extract the price of IKEA's most expensive artificial plant -At IKEA's [Artificial plants & flowers listing](https://www.ikea.com/se/en/cat/artificial-plants-flowers-20492/), use CSS selectors and HTML elements manipulation in the **Console** to extract the price of the most expensive artificial plant (sold in Sweden, as you'll be browsing their Swedish offer). Before opening DevTools, use your judgment to adjust the page to make the task as straightforward as possible. Finally, use JavaScript's [`parseInt()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt) function to convert the price text into a number. +At IKEA's [Artificial plants & flowers listing](https://www.ikea.com/se/en/cat/artificial-plants-flowers-20492/), use CSS selectors and HTML elements manipulation in the **Console** to extract the price of the most expensive artificial plant (sold in Sweden, as you'll be browsing their Swedish offer). Before opening DevTools, use your judgment to adjust the page to make the task as straightforward as possible. Finally, use JavaScript's [`parseInt()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt) function to convert the price text into a number (you may need [`replace()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace) to handle spaces).
Solution @@ -90,8 +90,8 @@ At IKEA's [Artificial plants & flowers listing](https://www.ikea.com/se/en/cat/a 1. Notice that the price is structured into two elements, with the integer separated from the currency, under a class named `plp-price__integer`. This structure is convenient for extracting the value. 1. In the **Console**, execute `document.querySelector('.plp-price__integer')`. This returns the element representing the first price in the listing. Since `document.querySelector()` returns the first matching element, it directly selects the most expensive plant's price. 1. Save the element in a variable by executing `price = document.querySelector('.plp-price__integer')`. - 1. Convert the price text into a number by executing `parseInt(price.textContent)`. - 1. At the time of writing, this returns `699`, meaning [699 SEK](https://www.google.com/search?q=699%20sek). + 1. Convert the price text into a number by executing `parseInt(price.textContent.replace(' ', ''))`. Note that `replace(' ', '')` removes spaces from the price string before converting it to a number. + 1. At the time of writing, this returns `1299`, meaning [1 299 SEK](https://www.google.com/search?q=1299%20sek).
From 9cf81820389cdf3ca5b4f24ed70970519be3edc7 Mon Sep 17 00:00:00 2001 From: Arto Gahr Date: Fri, 15 May 2026 10:23:16 +0200 Subject: [PATCH 02/12] docs: the guardian first post might not have a lead paragraph --- .../scraping_basics_javascript/03_devtools_extracting_data.md | 4 ++-- .../scraping_basics_python/03_devtools_extracting_data.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sources/academy/webscraping/scraping_basics_javascript/03_devtools_extracting_data.md b/sources/academy/webscraping/scraping_basics_javascript/03_devtools_extracting_data.md index fde2d094c2..bc5ad52138 100644 --- a/sources/academy/webscraping/scraping_basics_javascript/03_devtools_extracting_data.md +++ b/sources/academy/webscraping/scraping_basics_javascript/03_devtools_extracting_data.md @@ -119,7 +119,7 @@ On Fandom's [Movies page](https://www.fandom.com/topics/movies), use CSS selecto ### Extract details about the first post on Guardian's F1 news -On the Guardian's [F1 news page](https://www.theguardian.com/sport/formulaone), use CSS selectors and HTML manipulation in the **Console** to extract details about the first post. Specifically, extract its title, lead paragraph, and URL of the associated photo. +On the Guardian's [F1 news page](https://www.theguardian.com/sport/formulaone), use CSS selectors and HTML manipulation in the **Console** to extract details about the first post. Specifically, extract its title, lead paragraph (if it has one), and URL of the associated photo. ![F1 news page](../scraping_basics/images/devtools-exercise-guardian2.png) @@ -132,7 +132,7 @@ On the Guardian's [F1 news page](https://www.theguardian.com/sport/formulaone), 1. Notice that the markup does not provide clear, reusable class names for this task. The structure uses generic tag names and randomized classes, requiring you to rely on the element hierarchy and order instead. 1. In the **Console**, execute `post = document.querySelector('#maincontent ul li')`. This returns the element representing the first post. 1. Extract the post's title by executing `post.querySelector('h3').textContent`. - 1. Extract the lead paragraph by executing `post.querySelector('span div').textContent`. + 1. Extract the lead paragraph (if it has one) by executing `post.querySelector('span div').textContent`. 1. Extract the photo URL by executing `post.querySelector('img').src`. diff --git a/sources/academy/webscraping/scraping_basics_python/03_devtools_extracting_data.md b/sources/academy/webscraping/scraping_basics_python/03_devtools_extracting_data.md index 66f04d391d..853a067997 100644 --- a/sources/academy/webscraping/scraping_basics_python/03_devtools_extracting_data.md +++ b/sources/academy/webscraping/scraping_basics_python/03_devtools_extracting_data.md @@ -116,7 +116,7 @@ On Fandom's [Movies page](https://www.fandom.com/topics/movies), use CSS selecto ### Extract details about the first post on Guardian's F1 news -On the Guardian's [F1 news page](https://www.theguardian.com/sport/formulaone), use CSS selectors and HTML manipulation in the **Console** to extract details about the first post. Specifically, extract its title, lead paragraph, and URL of the associated photo. +On the Guardian's [F1 news page](https://www.theguardian.com/sport/formulaone), use CSS selectors and HTML manipulation in the **Console** to extract details about the first post. Specifically, extract its title, lead paragraph (if it has one), and URL of the associated photo. ![F1 news page](../scraping_basics/images/devtools-exercise-guardian2.png) @@ -129,7 +129,7 @@ On the Guardian's [F1 news page](https://www.theguardian.com/sport/formulaone), 1. Notice that the markup does not provide clear, reusable class names for this task. The structure uses generic tag names and randomized classes, requiring you to rely on the element hierarchy and order instead. 1. In the **Console**, execute `post = document.querySelector('#maincontent ul li')`. This returns the element representing the first post. 1. Extract the post's title by executing `post.querySelector('h3').textContent`. - 1. Extract the lead paragraph by executing `post.querySelector('span div').textContent`. + 1. Extract the lead paragraph (if it has one) by executing `post.querySelector('span div').textContent`. 1. Extract the photo URL by executing `post.querySelector('img').src`. From cd76c6f9f1431bc40f615f69356b139a3069813a Mon Sep 17 00:00:00 2001 From: Arto Gahr Date: Sat, 16 May 2026 11:40:53 +0200 Subject: [PATCH 03/12] docs: fix broken cheerio docs links --- .../scraping_basics_javascript/06_locating_elements.md | 8 ++++---- .../scraping_basics_javascript/07_extracting_data.md | 2 +- .../scraping_basics_legacy/crawling/finding_links.md | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sources/academy/webscraping/scraping_basics_javascript/06_locating_elements.md b/sources/academy/webscraping/scraping_basics_javascript/06_locating_elements.md index fedd418abd..b4d1f8124f 100644 --- a/sources/academy/webscraping/scraping_basics_javascript/06_locating_elements.md +++ b/sources/academy/webscraping/scraping_basics_javascript/06_locating_elements.md @@ -39,7 +39,7 @@ if (response.ok) { } ``` -Calling [`toArray()`](https://cheerio.js.org/docs/api/classes/Cheerio#toarray) converts the Cheerio selection to a standard JavaScript array. We can then loop over that array and process each selected element. +Calling [`toArray()`](https://cheerio.js.org/docs/api/classes/cheerio#toarray) converts the Cheerio selection to a standard JavaScript array. We can then loop over that array and process each selected element. Cheerio requires us to wrap each element with `$()` again before we can work with it further, and then we call `.text()`. If we run the code, it… well, it definitely prints _something_… @@ -136,7 +136,7 @@ When translated to a tree of JavaScript objects, the element with class `price` - a `span` HTML element, - a textual node representing the actual amount and possibly also white space. -We can use Cheerio's [`.contents()`](https://cheerio.js.org/docs/api/classes/Cheerio#contents) method to access individual nodes. It returns a list of nodes like this: +We can use Cheerio's [`.contents()`](https://cheerio.js.org/docs/api/classes/cheerio#contents) method to access individual nodes. It returns a list of nodes like this: ```text LoadedCheerio { @@ -197,7 +197,7 @@ if (response.ok) { } ``` -We're enjoying the fact that Cheerio selections provide utility methods for accessing items, such as [`.first()`](https://cheerio.js.org/docs/api/classes/Cheerio#first) or [`.last()`](https://cheerio.js.org/docs/api/classes/Cheerio#last). If we run the scraper now, it should print prices as only amounts: +We're enjoying the fact that Cheerio selections provide utility methods for accessing items, such as [`.first()`](https://cheerio.js.org/docs/api/classes/cheerio#first) or [`.last()`](https://cheerio.js.org/docs/api/classes/cheerio#last). If we run the scraper now, it should print prices as only amounts: ```text $ node index.js @@ -237,7 +237,7 @@ Macao, China :::tip Need a nudge? -You may want to check out Cheerio's [`.eq()`](https://cheerio.js.org/docs/api/classes/Cheerio#eq). +You may want to check out Cheerio's [`.eq()`](https://cheerio.js.org/docs/api/classes/cheerio#eq). ::: diff --git a/sources/academy/webscraping/scraping_basics_javascript/07_extracting_data.md b/sources/academy/webscraping/scraping_basics_javascript/07_extracting_data.md index 74b440b4bc..d728da6954 100644 --- a/sources/academy/webscraping/scraping_basics_javascript/07_extracting_data.md +++ b/sources/academy/webscraping/scraping_basics_javascript/07_extracting_data.md @@ -290,7 +290,7 @@ Hamilton reveals distress over ‘devastating’ groundhog accident at Canadian :::tip Need a nudge? - HTML's `time` element can have an attribute `datetime`, which [contains data in a machine-readable format](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/time), such as the ISO 8601. -- Cheerio gives you [.attr()](https://cheerio.js.org/docs/api/classes/Cheerio#attr) to access attributes. +- Cheerio gives you [.attr()](https://cheerio.js.org/docs/api/classes/cheerio#attr) to access attributes. - In JavaScript you can use an ISO 8601 string to create a [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) object. - To get the date, you can call `.toDateString()` on `Date` objects. diff --git a/sources/academy/webscraping/scraping_basics_legacy/crawling/finding_links.md b/sources/academy/webscraping/scraping_basics_legacy/crawling/finding_links.md index d185e8b01a..3b9c03aad0 100644 --- a/sources/academy/webscraping/scraping_basics_legacy/crawling/finding_links.md +++ b/sources/academy/webscraping/scraping_basics_legacy/crawling/finding_links.md @@ -57,7 +57,7 @@ We'll start from a boilerplate that's very similar to the scraper we built in [B {Example} -Aside from importing libraries and downloading HTML, we load the HTML into Cheerio and then use it to retrieve all the `` elements. After that, we iterate over the collected links and print their `href` attributes, which we access using the [`.attr()`](https://cheerio.js.org/docs/api/classes/Cheerio#attr) method. +Aside from importing libraries and downloading HTML, we load the HTML into Cheerio and then use it to retrieve all the `` elements. After that, we iterate over the collected links and print their `href` attributes, which we access using the [`.attr()`](https://cheerio.js.org/docs/api/classes/cheerio#attr) method. When you run the above code, you'll see quite a lot of links in the terminal. Some of them may look wrong, because they don't start with the regular `https://` protocol. We'll learn what to do with them in the following lessons. From b8e7768854e90c9f903282faa045114797683f0b Mon Sep 17 00:00:00 2001 From: Arto Gahr Date: Mon, 18 May 2026 17:24:45 +0200 Subject: [PATCH 04/12] docs: add more relevant links to the ikea scraping task --- .../scraping_basics_javascript/03_devtools_extracting_data.md | 2 +- .../scraping_basics_python/03_devtools_extracting_data.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/academy/webscraping/scraping_basics_javascript/03_devtools_extracting_data.md b/sources/academy/webscraping/scraping_basics_javascript/03_devtools_extracting_data.md index bc5ad52138..da431dfc19 100644 --- a/sources/academy/webscraping/scraping_basics_javascript/03_devtools_extracting_data.md +++ b/sources/academy/webscraping/scraping_basics_javascript/03_devtools_extracting_data.md @@ -93,7 +93,7 @@ At IKEA's [Artificial plants & flowers listing](https://www.ikea.com/se/en/cat/a 1. Notice that the price is structured into two elements, with the integer separated from the currency, under a class named `plp-price__integer`. This structure is convenient for extracting the value. 1. In the **Console**, execute `document.querySelector('.plp-price__integer')`. This returns the element representing the first price in the listing. Since `document.querySelector()` returns the first matching element, it directly selects the most expensive plant's price. 1. Save the element in a variable by executing `price = document.querySelector('.plp-price__integer')`. - 1. Convert the price text into a number by executing `parseInt(price.textContent.replace(' ', ''))`. Note that `replace(' ', '')` removes spaces from the price string before converting it to a number. + 1. Convert the price text into a number by executing `parseInt(price.textContent.replace(' ', ''))`. The price text contains spaces as thousand separators, so `.replace(' ', '')` strips them before parsing - a technique you'll explore further in the [Extracting data](./07_extracting_data.md#removing-dollar-sign-and-commas) lesson. 1. At the time of writing, this returns `1299`, meaning [1 299 SEK](https://www.google.com/search?q=1299%20sek). diff --git a/sources/academy/webscraping/scraping_basics_python/03_devtools_extracting_data.md b/sources/academy/webscraping/scraping_basics_python/03_devtools_extracting_data.md index 853a067997..ad21d99501 100644 --- a/sources/academy/webscraping/scraping_basics_python/03_devtools_extracting_data.md +++ b/sources/academy/webscraping/scraping_basics_python/03_devtools_extracting_data.md @@ -90,7 +90,7 @@ At IKEA's [Artificial plants & flowers listing](https://www.ikea.com/se/en/cat/a 1. Notice that the price is structured into two elements, with the integer separated from the currency, under a class named `plp-price__integer`. This structure is convenient for extracting the value. 1. In the **Console**, execute `document.querySelector('.plp-price__integer')`. This returns the element representing the first price in the listing. Since `document.querySelector()` returns the first matching element, it directly selects the most expensive plant's price. 1. Save the element in a variable by executing `price = document.querySelector('.plp-price__integer')`. - 1. Convert the price text into a number by executing `parseInt(price.textContent.replace(' ', ''))`. Note that `replace(' ', '')` removes spaces from the price string before converting it to a number. + 1. Convert the price text into a number by executing `parseInt(price.textContent.replace(' ', ''))`. The price text contains spaces as thousand separators, so `.replace(' ', '')` strips them before parsing - a technique you'll explore further in the [Extracting data](./07_extracting_data.md#removing-dollar-sign-and-commas) lesson. 1. At the time of writing, this returns `1299`, meaning [1 299 SEK](https://www.google.com/search?q=1299%20sek). From d81e7d67fcd86d6df02662f3494f7adc8e2b5beb Mon Sep 17 00:00:00 2001 From: Arto Gahr Date: Tue, 19 May 2026 17:46:35 +0200 Subject: [PATCH 05/12] docs: replace legacy course link with starter repo in expert scraping intro --- .../platform/expert_scraping_with_apify/actors_webhooks.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md b/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md index c5c7d1d4a8..bf0670b3b8 100644 --- a/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md +++ b/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md @@ -20,7 +20,7 @@ Thus far, you've run Actors on the platform and written an Actor of your own, wh ## Advanced Actor overview {#advanced-actors} -In this course, we'll be working out of the Amazon scraper project from the **Web scraping basics for JavaScript devs** course. If you haven't already built that project, you can do it in [three short lessons](../../webscraping/scraping_basics_legacy/challenge/index.md). We've made a few small modifications to the project with the Apify SDK, but 99% of the code is still the same. +In this course, we'll be working out of the Amazon scraper built in the old [Web scraping basics for JavaScript devs](../../webscraping/scraping_basics_legacy/challenge/index.md) course (not the [current scraping basics course](../../webscraping/scraping_basics_javascript/index.md)). If you haven't gone through it yet, we recommend doing so - it covers the fundamentals this project is built on. If you'd rather skip straight to this course, you can use this working implementation instead: [academy-amazon-scraper](https://github.com/apify-projects/academy-amazon-scraper). Take another look at the files within your Amazon scraper project. You'll notice that there is a **Dockerfile**. Every single Actor has a Dockerfile (the Actor's **Image**) which tells Docker how to spin up a container on the Apify platform which can successfully run the Actor's code. "Apify Actors" is a serverless platform that runs multiple Docker containers. For a deeper understanding of Actor Dockerfiles, refer to the [Apify Actor Dockerfile docs](/sdk/js/docs/guides/docker-images#example-dockerfile). @@ -46,7 +46,7 @@ Prior to moving forward, please read over these resources: ## Our task {#our-task} -In this task, we'll be building on top of what we already created in the [Web scraping basics for JavaScript devs](../../webscraping/scraping_basics_legacy/challenge/index.md) course's final challenge, so keep those files safe! +In this task, we'll be building on top of the Amazon scraper project. Once our Amazon Actor has completed its run, we will, rather than sending an email to ourselves, call an Actor through a webhook. The Actor called will be a new Actor that we will create together, which will take the dataset ID as input, then subsequently filter through all of the results and return only the cheapest one for each product. All of the results of the Actor will be pushed to its default dataset. From 2373e76e668d99a97c4198198f24b3e2affcc10c Mon Sep 17 00:00:00 2001 From: Arto Gahr Date: Tue, 19 May 2026 17:48:29 +0200 Subject: [PATCH 06/12] docs: add anchor link to Amazon scraper project reference in task section --- .../platform/expert_scraping_with_apify/actors_webhooks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md b/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md index bf0670b3b8..e0e7c64691 100644 --- a/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md +++ b/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md @@ -46,7 +46,7 @@ Prior to moving forward, please read over these resources: ## Our task {#our-task} -In this task, we'll be building on top of the Amazon scraper project. +In this task, we'll be building on top of the [Amazon scraper project mentioned above](#advanced-actors). Once our Amazon Actor has completed its run, we will, rather than sending an email to ourselves, call an Actor through a webhook. The Actor called will be a new Actor that we will create together, which will take the dataset ID as input, then subsequently filter through all of the results and return only the cheapest one for each product. All of the results of the Actor will be pushed to its default dataset. From 4595262a02c11f8ebfe24b947d6b91e49dd845af Mon Sep 17 00:00:00 2001 From: Arto Gahr Date: Wed, 20 May 2026 14:40:38 +0200 Subject: [PATCH 07/12] docs: update legacy challenge to reflect Amazon offers page changes --- .../scraping_basics_legacy/challenge/index.md | 25 ++----- .../challenge/scraping_amazon.md | 70 +++++++------------ 2 files changed, 34 insertions(+), 61 deletions(-) diff --git a/sources/academy/webscraping/scraping_basics_legacy/challenge/index.md b/sources/academy/webscraping/scraping_basics_legacy/challenge/index.md index 8410611660..da3e594d2b 100644 --- a/sources/academy/webscraping/scraping_basics_legacy/challenge/index.md +++ b/sources/academy/webscraping/scraping_basics_legacy/challenge/index.md @@ -43,31 +43,20 @@ Our crawler's input will look like this: } ``` -The goal at hand is to scrape all of the products from the first page of results for whatever keyword was provided (for our test case, it will be **iPhone**), then to scrape all available offers of each product and push the results to the dataset. For context, the offers for a product look like this: - -![Amazon product offers](../../../platform/expert_scraping_with_apify/images/product-offers.jpg) +The goal is to scrape all of the products from the first page of results for whatever keyword was provided (for our test case, it will be **iPhone**), then for each product visit its page and scrape the featured offer. Push the results to the dataset. In the end, we'd like our final output to look something like this: ```json [ { - "title": "Apple iPhone 6 a1549 16GB Space Gray Unlocked (Certified Refurbished)", - "asin": "B07P6Y7954", - "itemUrl": "https://www.amazon.com/Apple-iPhone-Unlocked-Certified-Refurbished/dp/B00YD547Q6/ref=sr_1_2?s=wireless&ie=UTF8&qid=1539772626&sr=1-2&keywords=iphone", - "description": "What's in the box: Certified Refurbished iPhone 6 Space Gray 16GB Unlocked , USB Cable/Adapter. Comes in a Generic Box with a 1 Year Limited Warranty.", + "title": "Apple iPhone 16e, 128GB, Black - Unlocked (Renewed)", + "asin": "B0F4RM7Y2L", + "itemUrl": "https://www.amazon.com/Apple-iPhone-128GB-eSIM-Black/dp/B0F4RM7Y2L", + "description": "This product is certified refurbished...", "keyword": "iphone", "sellerName": "Blutek Intl", - "offer": "$162.97" - }, - { - "title": "Apple iPhone 6 a1549 16GB Space Gray Unlocked (Certified Refurbished)", - "asin": "B07P6Y7954", - "itemUrl": "https://www.amazon.com/Apple-iPhone-Unlocked-Certified-Refurbished/dp/B00YD547Q6/ref=sr_1_2?s=wireless&ie=UTF8&qid=1539772626&sr=1-2&keywords=iphone", - "description": "What's in the box: Certified Refurbished iPhone 6 Space Gray 16GB Unlocked , USB Cable/Adapter. Comes in a Generic Box with a 1 Year Limited Warranty.", - "keyword": "iphone", - "sellerName": "PLATINUM DEALS", - "offer": "$169.98" + "offer": "$329.99" }, { "...": "..." @@ -78,7 +67,7 @@ In the end, we'd like our final output to look something like this: > The `asin` is the ID of the product, which is data present on the Amazon website. -Each of the items in the dataset will represent a scraped offer and will have the same `title`, `asin`, `itemUrl`, and `description`. The offer-specific fields will be `sellerName` and `offer`. +Each item in the dataset represents one product. The `sellerName` and `offer` fields come from the featured offer shown on the product page, which means you will end up with one result per product. diff --git a/sources/academy/webscraping/scraping_basics_legacy/challenge/scraping_amazon.md b/sources/academy/webscraping/scraping_basics_legacy/challenge/scraping_amazon.md index 94545b3e7d..065bf8d291 100644 --- a/sources/academy/webscraping/scraping_basics_legacy/challenge/scraping_amazon.md +++ b/sources/academy/webscraping/scraping_basics_legacy/challenge/scraping_amazon.md @@ -31,29 +31,17 @@ router.addHandler(labels.PRODUCT, async ({ $ }) => { ``` -Great! But wait, where do we go from here? We need to go to the offers page next and scrape each offer, but how can we do that? Let's take a small break from writing the scraper and open up Proxyman to analyze requests which we might be difficult to find in the network tab, then we'll click the button on the product page that loads up all of the product offers: +Great! But where do we go from here? We need to visit the product page and scrape the offer from there. -![View offers button](./images/view-offers-button.jpg) +:::note Why only one offer per product? -After clicking this button and checking back in Proxyman, we discovered this link: +Amazon product pages list a single featured offer in their static HTML. The full list of sellers is loaded separately by JavaScript after the page loads, which means CheerioCrawler (which only fetches the raw HTML, without running JavaScript) cannot see it. -> You can find the request below in the network tab just fine, but with Proxyman, it is much easier and faster due to the extended filtering options. +If you need all seller offers, you would have to use [PlaywrightCrawler](../../puppeteer_playwright/index.md), which runs a real browser and can wait for that content to load. For this course, scraping the featured offer is enough to cover the key concepts. -```text -https://www.amazon.com/gp/aod/ajax/ref=auto_load_aod?asin=B07ZPKBL9V&pc=dp -``` - -The `asin` [query parameter](https://www.branch.io/glossary/query-parameters/) matches up with our product's ASIN, which means we can use this for any product of which we have the ASIN. - -Here's what this page looks like: - -![View offers page](./images/offers-page.jpg) - -Wow, that's ugly. But for our scenario, this is really great. When we click the **View offers** button, we usually have to wait for the offers to load and render, which would mean we could have to switch our entire crawler to a **PuppeteerCrawler** or **PlaywrightCrawler**. The data on this page we've just found appears to be loaded statically, which means we can still use CheerioCrawler and keep the scraper as efficient as possible 😎 - -> It's totally possible to scrape the same data as this crawler using [Puppeteer or Playwright](../../puppeteer_playwright/index.md); however, with this offers link found in Postman, we can follow the same workflow much more quickly with static HTTP requests using CheerioCrawler. +::: -First, we'll create a request for each product's offers page: +We'll add a request to the product page for each product: ```js // routes.js @@ -63,23 +51,22 @@ First, we'll create a request for each product's offers page: router.addHandler(labels.PRODUCT, async ({ $, crawler, request }) => { const { data } = request.userData; - const element = $('div#productDescription'); + const description = $('div#productDescription').text().trim(); - // Add to the request queue await crawler.addRequests([{ - url: `${BASE_URL}/gp/aod/ajax/ref=auto_load_aod?asin=${data.asin}&pc=dp`, + url: `${BASE_URL}/dp/${data.asin}?th=1&psc=1`, label: labels.OFFERS, userData: { data: { ...data, - description: element.text().trim(), + description, }, }, }]); }); ``` -Finally, we can handle the offers in a separate handler: +Then we handle it in the OFFERS handler: ```js // routes.js @@ -87,16 +74,14 @@ Finally, we can handle the offers in a separate handler: router.addHandler(labels.OFFERS, async ({ $, request }) => { const { data } = request.userData; - for (const offer of $('#aod-offer')) { - const element = $(offer); - - await Dataset.pushData({ - ...data, - sellerName: element.find('div[id*="soldBy"] a[aria-label]').text().trim(), - offer: element.find('.a-price .a-offscreen').text().trim(), - }); + const price = $('.a-price .a-offscreen').first().text().trim(); + const sellerName = $('#sellerProfileTriggerId, #merchant-info a').first().text().trim(); - } + await Dataset.pushData({ + ...data, + sellerName, + offer: price, + }); }); ``` @@ -153,16 +138,16 @@ router.addHandler(labels.START, async ({ $, crawler, request }) => { router.addHandler(labels.PRODUCT, async ({ $, crawler, request }) => { const { data } = request.userData; - const element = $('div#productDescription'); + const description = $('div#productDescription').text().trim(); await crawler.addRequests([ { - url: `${BASE_URL}/gp/aod/ajax/ref=auto_load_aod?asin=${data.asin}&pc=dp`, + url: `${BASE_URL}/dp/${data.asin}?th=1&psc=1`, label: labels.OFFERS, userData: { data: { ...data, - description: element.text().trim(), + description, }, }, }, @@ -172,15 +157,14 @@ router.addHandler(labels.PRODUCT, async ({ $, crawler, request }) => { router.addHandler(labels.OFFERS, async ({ $, request }) => { const { data } = request.userData; - for (const offer of $('#aod-offer')) { - const element = $(offer); + const price = $('.a-price .a-offscreen').first().text().trim(); + const sellerName = $('#sellerProfileTriggerId, #merchant-info a').first().text().trim(); - await Dataset.pushData({ - ...data, - sellerName: element.find('div[id*="soldBy"] a[aria-label]').text().trim(), - offer: element.find('.a-price .a-offscreen').text().trim(), - }); - } + await Dataset.pushData({ + ...data, + sellerName, + offer: price, + }); }); ``` From 32709d914104e67ada90acda69b6b5c7bd6925ea Mon Sep 17 00:00:00 2001 From: Arto Gahr Date: Wed, 20 May 2026 14:40:38 +0200 Subject: [PATCH 08/12] docs: update webhooks lesson for single offer per product --- .../platform/expert_scraping_with_apify/actors_webhooks.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md b/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md index e0e7c64691..2622ce51b8 100644 --- a/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md +++ b/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md @@ -48,7 +48,9 @@ Prior to moving forward, please read over these resources: In this task, we'll be building on top of the [Amazon scraper project mentioned above](#advanced-actors). -Once our Amazon Actor has completed its run, we will, rather than sending an email to ourselves, call an Actor through a webhook. The Actor called will be a new Actor that we will create together, which will take the dataset ID as input, then subsequently filter through all of the results and return only the cheapest one for each product. All of the results of the Actor will be pushed to its default dataset. +Once our Amazon Actor has completed its run, we might want to send an email to ourselves, but instead of that let's call another Actor through a webhook. The Actor called will be a new Actor that you will create, which will take the dataset ID as input, then filter through all of the results and return only the cheapest result for each unique ASIN. All of the results of the Actor will be pushed to its default dataset. + +> Note: the [starter repo](https://github.com/apify-projects/academy-amazon-scraper) produces one result per product, so in practice the filtering Actor will pass every item through unchanged. That is fine — the goal here is to learn how to pass data between Actors using webhooks, not to do complex filtering. [**Solution**](./solutions/integrating_webhooks.md) From b42922a1b3a55149f57116f56e40de50b3c9f84f Mon Sep 17 00:00:00 2001 From: Arto Gahr Date: Wed, 20 May 2026 14:46:58 +0200 Subject: [PATCH 09/12] docs: fix em dash lint error in webhooks lesson --- .../platform/expert_scraping_with_apify/actors_webhooks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md b/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md index 2622ce51b8..4300825980 100644 --- a/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md +++ b/sources/academy/platform/expert_scraping_with_apify/actors_webhooks.md @@ -50,7 +50,7 @@ In this task, we'll be building on top of the [Amazon scraper project mentioned Once our Amazon Actor has completed its run, we might want to send an email to ourselves, but instead of that let's call another Actor through a webhook. The Actor called will be a new Actor that you will create, which will take the dataset ID as input, then filter through all of the results and return only the cheapest result for each unique ASIN. All of the results of the Actor will be pushed to its default dataset. -> Note: the [starter repo](https://github.com/apify-projects/academy-amazon-scraper) produces one result per product, so in practice the filtering Actor will pass every item through unchanged. That is fine — the goal here is to learn how to pass data between Actors using webhooks, not to do complex filtering. +> Note: the [starter repo](https://github.com/apify-projects/academy-amazon-scraper) produces one result per product, so in practice the filtering Actor will pass every item through unchanged. That is fine. The goal here is to learn how to pass data between Actors using webhooks, not to do complex filtering. [**Solution**](./solutions/integrating_webhooks.md) From 711b60922df994402a933aeb2befcfb2913e6257 Mon Sep 17 00:00:00 2001 From: Arto Gahr Date: Thu, 21 May 2026 15:27:24 +0200 Subject: [PATCH 10/12] docs: update managing source code lesson to use automatic builds UI --- .../images/build-settings.png | Bin 0 -> 57863 bytes .../managing_source_code.md | 12 ++++-------- .../saving_useful_stats.md | 2 +- 3 files changed, 5 insertions(+), 9 deletions(-) create mode 100644 sources/academy/platform/expert_scraping_with_apify/images/build-settings.png diff --git a/sources/academy/platform/expert_scraping_with_apify/images/build-settings.png b/sources/academy/platform/expert_scraping_with_apify/images/build-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..adfd9f46244b558e1d31955827037390503049ab GIT binary patch literal 57863 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 Webhooks > Add webhook**. The final thing to do is to paste the URL and save the webhook. - -![Adding a webhook to your GitHub repo](../../../platform/actors/development/deployment/images/ci-github-integration.png) +![Build settings with Automatic builds selected](./images/build-settings.png) And you're done! 🎉 @@ -60,7 +56,7 @@ And you're done! 🎉 This was a bit of overhead, but the good news is that you don't ever have to configure this stuff again for this Actor. Now, every time the content of your **main**/**master** branch changes, the Actor on the Apify platform will rebuild based on the newest code. -Think of it as combining two steps into one! Normally, you'd have to do a `git push` from your terminal in order to get the newest code onto GitHub, then run `apify push` to push it to the platform. +Think of it as combining two steps into one. Normally, you'd have to do a `git push` from your terminal to get the newest code onto GitHub, then run `apify push` to push it to the platform. It's also important to know that GitHub/Gitlab repository integration is standard practice. As projects grow and the number of contributors and maintainers increases, it only makes sense to have a GitHub repository integrated with the project's Actor. For the remainder of this course, all Actors created will be integrated with a GitHub repository. diff --git a/sources/academy/platform/expert_scraping_with_apify/saving_useful_stats.md b/sources/academy/platform/expert_scraping_with_apify/saving_useful_stats.md index 6bc13433f1..e62ffd69bd 100644 --- a/sources/academy/platform/expert_scraping_with_apify/saving_useful_stats.md +++ b/sources/academy/platform/expert_scraping_with_apify/saving_useful_stats.md @@ -41,7 +41,7 @@ In our Amazon Actor, each dataset result must now have the following extra keys: } ``` -Also, an object including these values should be persisted during the run in th Key-Value store and logged to the console every 10 seconds: +Also, an object including these values should be persisted during the run in the Key-Value store and logged to the console every 10 seconds: ```json { From 0170c5b24548ab6aff5bb8e6d011b19ad16e27bf Mon Sep 17 00:00:00 2001 From: Arto Gahr Date: Thu, 21 May 2026 16:24:36 +0200 Subject: [PATCH 11/12] docs: convert build-settings image to webp --- .../images/build-settings.png | Bin 57863 -> 0 bytes .../images/build-settings.webp | Bin 0 -> 15890 bytes .../managing_source_code.md | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 sources/academy/platform/expert_scraping_with_apify/images/build-settings.png create mode 100644 sources/academy/platform/expert_scraping_with_apify/images/build-settings.webp diff --git a/sources/academy/platform/expert_scraping_with_apify/images/build-settings.png b/sources/academy/platform/expert_scraping_with_apify/images/build-settings.png deleted file mode 100644 index adfd9f46244b558e1d31955827037390503049ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57863 zcmeFYWmHsO+XoB?h$tc;B0aRUv@}XL4&B`;J*0q&bazQfGe}CzAX3tjLzgrRNH@HP z`@Wy}qo3Zj-Vg6u !=bU|ZoV~B>cjXRIQIf{NCc#EQLBWxgkpQEhpy#2Wpax=L z0(WM&N%c@r9w=Iii>t_ri-T009WAWw%u!HeLJ~CZYN>WT$blp2JIcb=_{2lG-24~`Vtj6C7{sq^0zF!BQ;;19l^C!UXQg0>O%<7)+(Vs zj&R5Ai{mV=>vWgxX>UuEPaePXhse|j-s;I_ve1ub@lY|QNP1yny~Qm2M)30ltv;TB zkno`qvE8-7tihd+m9VW(BWIS^{;WE$Vt~=&W4uXKVf*p^gb3xgMSxo3U6j|@ko|QC zn9ktNm&gYKSZ`|ZEeoBh@C%B5xBI1ieahArg#s$sKdpR#!tDhb=q54~BNqsN@J0vh|`aC8p3;s=dA;b$JZSus9zLl?;UBbo0_jzeo96?*RS7e8UJFMVq(yS0*_B3 zCd%n1Jd*jgb4=M0c=(Yv{p2NijL)kRBbHaM#Xd2)r?bSibryT-DW|Sd=8}X>$-3lV zZoTn;tyB@q7xY3YlTz>nuP82?Qi6y9OJ7*1>S>6k*{*o5+SUBI*o*l%&EuK1UH|@wTY}ONeW#@IdTu{xi|@mo zl;5aQ94~0XM66^V&|*Fk|M*fucN*om1@_y?^DtNpB1|j-t0*XiF_ySmb z1t0I5w>FXC3VibWDdsl>AHa3M;L(5MKTTRJZk`@OigI@vqrbJqccHgDdimi=SueJ2 z^3fdi$@V>*@z?3ko|&V!N11T>wSLew z3Hx$q+9H+mF zqWl(_L?Dhg`PdGgp@=rNDu2&*OvfR;(iuT{;Ue=Xdb#9<9)#)}`(1Ll@7cGf$#+Pf zMsYdaG5Cgy9;ou@-l76?FX zf|Guis72k0v^-PkH`&44x_N>?5be7U&mZ}=p?{Is!n1rAaRLgEd4V59OI0L;N&WKi z4?8m|aA@f(rsy&moINgQEdI!J$;p_sAHI3_A@6-8IMm2TUq+}fyK;9+@moD5308W= z_0!r4Rp%X>c+Vh{E1ymjh4etK=HSBv{>d;@1sqe8&&hW>I=*VrCWhyma@w(J1SS}( zYmtwkXYHGp-r4LBnU_cpsB*gdHBkJwr`}uT*40J%UF;?jXs7aG((bt@?p1;q%~SlX zdzt7I#%NSQ&ofjMp3!W9$Y|38cfbq_tT8fX_+=s6zx5TUE$}SylJNQPkMX1Mrb2K- zV6^zMS!T+6^pdeBc|u?gYhi1?^=Iq&MR5n2rBb|9f^k7Vy3Fp?N9#$=N{YOKOZdII zk{Ha>0t+$5Jf}-q2#!V-&8hh-<_?xx`Bj_gP}mcfeQ*zS zk2*34%3dgJ8GdBbJ6t$Yi1?bf8>p16JH&s`b%5qYe2H?22GfnpvCi)rU9#;TEgccc zgXmXjhGp|eF@u>kZHva(%BpmfYh))iCIcp4A*qq}lML0AoXo+m;5Veq_enfn2Y+ zO}aid;3Y{l4U-nF7BCDk4^EYMsPE*8$cw6o>iXyV1zqXinf}%fnlx%?p$}5UoS|`( z@``vI&O%)8zr-p&^0WVWhg0GLZ>vVD0gY*{5lzvcS1y6nOoxK0=r5LEJRQ>EjS5fc zMd(f9c<7}SGrzcMlW9CGNq37KHMOxKF)4mNV>4-S*3~=7GF$r74mzRlQp`UkG~*Ki z34=tv4{7%dn|M<5q>hC#(XL0K$1SmdbxvDbmrjSZ(x$@8rp&Uhimjr&25u@|wOf;7 zp=$2Zo@mum+gCed_%C~C5CA`HnlSrz?N(ufUAdZ(BEn}SaV4se!|nxBrq!MAA{ohsxmOaZGOE7S51n>v zO^$#1vfsfQ>AP;SL+w1VxQmzn+$eou36eY7}jUkONO#6JS|K6*SZh-SbDaexU>^4CTUY?r&Z0GOIz&pZuiLc zPNd2AEA|P~4knt(D=G103Ygk7ju_~$Ad^@4?UB_K+R1joWHHLId@JkUBK%6eOYH_N z`oWd`%&*SZ?+xSj{!FDx859_HScy$h#ty{xOMO3p-)oa%FW}v>b?)-QrM6#k<#V5X zilqqD%3$?k{&e(y;r&XY3xhSauf@OnzPG(sl$4U(52LtxbRlm4Me0lG$r&|NGL7h0 zSbNx1Vz_>#Ul#)3xT_vqFjP4-AdewGaQR}TbC2>oF`wO5ce~bS7<&=BE7X?RS5pHz zq@!N3v9PgQvWch|i!X&#xpz-inX{RvAzmXG$K2wBllaQ(w3vYSY%8&o%@sjZ%1Pvg)tcjW2){b*S9i+}NiaYe3c zXHrIN2Kgw*D1+^^t&KbJwvIvA7?Vw-d%+g`D}#};X@>aB7_1kTfBsFR9d0RFaOGp~ zKYo>XXX}nzv({DR0_c~KtT0%#3SK}}m7U8`^yN}zEjy7O`Z=gs;Hsf&qPl*sVtZj( zx==ba@_?N6#iX}_SLwND$8IpIs*XceveROB*IJx?!FQ#MQ`WUQf&%`6sLWlFVV|-6 zt!$Sq7o63ZeneeEEycym;c<|?gZ&}VG&{G!!PoH-k@CwQbaV2Z?05C9kk~ujrzLor zQ_yz9#y7&tUY$4#5e0lM4)CS~|IK0KsRx#a+_uduYonznbOU!v^vM0I8yTF^srm5b zR?rkK25y#UtmxUa_CfN|*R7DQxYUAv<+R4Y1~!qjlhXbAgVTcTMbVn8>EGX1+S&b2 zFGnZ2vJ3X}x6J2C@}Y-@J3hbmKIiilAJ0xr*JaHnG$H&AF9R+Y4m#VSltmP;70&do z+K=Ri5fxC6Gw1WOJRjm_f9AKS%Y*dfZ#4x`KhdFnd%G&NAu)Pd(F`i)vKK|WzE{#8 zeTlKHw=th7(m=ZHP=2SvQ4mE#B`Xt6>@m*U7r1XD$pzK!4me+~Dw$J#uWCu`G8}Rq z{?^P`%(d>}hwB&s9>sXzc#ScS62xF7&RPf97wD$4;wletP*5H2{MrGoL(R2hEff_| zn1FLE6m(P)6b#@D6*xptN&ov?3iTPvoqyd&LqQ3)MnV72GfKe!%_kZ-ZtDE||4!@& zl)JzcK5%$`Li?|$(epmt`LA=-K%flerK-5BEby;t>TGWA;9}+I8q9l43*5NpB%|$u zg7Sp!=0KGN)BXn9M_8+AxoRmY2$(wBvl*K?nwYbB+B@B}gCgW90G!&JyBdQ$?d=>~ z1U!YQ|Mi3baDH=}of`D7M_g@%skIbUK;n+h<{)0S=WNfZMX*62kdU*Pg#cJW>Oa+i zD`9FYS63$ic6JXB4>k`jHb-Ymb`E}ie)i{_?3|pez!R)45C>OdPgVyPntwO)U+qYk zyO=s#JGojrI)HB4H8yc{a}}nhzUk<{KmQ)5xu^C2^yJ|3pVtCjko~5ForCQ;`+v6$ zR290pE1+WSX>O-2VQml08PJCa*9%^ue?9+4$^Z2DziMjzPfZSv7cc&I)&Es=yQ;d2 zxwE*VJv|7Xmt#6@ns$#`&v9M+EUV7anmBW)P4n@PJhB2X`b?3OgGoKS0d}rof z`)(#9!x+wQsn{s%AmVWmG*^F2uNeLX>pmJ5=q<|aA5?r9aS$QMnj+|rA}o**_9K~H zaWNEB^hdXTunJKE)Wqr`Pj9z((?`JL=09tQp#;1In!|`s3#R&W7+63@q__I`*X93p zbTjw=|D8IqVodPhAklJL2!Zq7h&8|WO6i5mRg;9Y^f1%k=uxvmtQZ|^Igk-2dL15X z+IiIwXbs`{gZ=>8@JB<%&3i~LK<$4487Y@fWJ#eb*-c_prI$@&E0d6r7+)R#8$o^D zLq~feV+}35Y$lKAvK&YaMXdBvAq>(~hYFNEmW%eJ{x+;P*yyy;0_MGVhnw)rl?xSO zE{pgkh%>Qp4rhlpqtag(3rnvajgdmedZ19)+mENU(6+pb9^?K}qcabL>o2bpfQ|tc zik_^oh4L#zJ!fjE{qz@peDnm3kwiwDAbImS%tZ2jFvc_XkiR|FEEb9Z7Ep6s?H67d z4x80V=FeSpyxULxC*K*&I6G~8r#tK~k7Bj4M^gu=xgJPP zRJt{uF5$O_$(%Tej`6v+5Rr045DrxP@Y#)vOt zKhYqblbf5bX7(oJ<3|}+^JgFbGFwi|_klJK_dl0?o>nxM*FOzxqWVkMZy8Y07?t%N zOZ^26Wr_hb1Y^`w{N>fY#i0bmGq7RP{5knpwCZogn2G}RqW&_hdD*vO-2_DM|2DU= zOk$t}wU_16e;LbfS~1XaNZ9wkQL!u`C|a%!*L2GEfm3I#`x)$?Gp;K~)CI zGQU0x|I3s`tD&M5JhQTR^>w;ZxC)jUsFId`#0bw; zcKPltwud=iUsJ^M*p8*vIsE(t5BGKq-{cT=oTPm%ox5dP?>qyFiHSLaBO;*9r&2lW z5>rVD&tB{8Ep?ghRK1Zk+FfK{T2{(f9w}0d74~)~7Pfh(2Gu}8V_z;hQf_3+60}U5Ang=5Su?da zZx2lvE3dYi)%$?s+cSII@OtI5v&Acqdk# zUFZuw`1!W?sdE?pxlbaC_EJ8P;P`nz4!gN-EnM2~;tk9fayjJ~cib6Kb3Abyq(S2V z3kH6YWaEn-Dz<%AGhYRX>F2*1yOq9zx!U#ZB*S^c~gVaNz5OykCmrK=I7A? z6E!%)eQK4}xZSX6Hj}!u<-7VJsj>uqr6b_BO&yF&$`eMot1YJ z2m|l3Lo07ZkhyAG{Q{lY9$16&DLFZ-p!?SIRis=Ty<)oC{2vmd1tbO{L@%2sm1*a@ z9_q~MjY~4vUMqG(PS%)p=Y^D;2Fy}L%V|x^|5(bm`>y=?&j#pj8bB`4MGtM%T209D z+MRTjL%x_uns*U}A$?~~4yp#i4Y-Jqrjwh+PT8-H;4b0}G*JTXy&|rrG2g-E)A>|} zUj6*W^-t`^D+0{=JXy z1Len5&r`hnA zke!3HlvMXx%+ALKwL-Oax2s_YWlta9%#y%o!LCt_FAlwba1H@hkC;toWX4d%ZnLn2 z!RDYoh2wd0!3Sbdw@xy zr=Ix3e_|2q_GI~A5w8l)Xh1W=c@(J2;Q|^d5u(>D_LJ2STx-Mkxx-UM+(M^EOY1ki z=ERuzr@9Y8?zf;hPy@7ehtZyxJv*K&e8~0=v5a+84&3*=E52y>U~t8`6^HLfQk?gdj|G2bzV?_MRp`$Y-ej@C)Wit)+MceF=caXK6QF|aGrw!Ou^S3V zMoUOxutb3pq(`G~W5H5FxxU`&$SZL*B-L`G)ecjEbRI|io2esYxd}W#&ABFFlWOah zeSlsgriBTfq=sK(9T7>L)J`w!{qn~3KZgtFIWXyJxQ-{(=y9V(%`|%Sq}FWq*0>2- zMv`&%tp$J^Tp2f`VGnD?F%oY>&(E6SojAd)>yDj&o zsD8lp)-Bd3qP8CX%;Sxvm?a`U>*ZbO8}Wg&%CbMYJK>rfY>A^t#^;d!z{};MJ{!P5 zl@7?`qpMM=XGE8CPT$(%Yd$>nBCjmK9kC4~Vy0IX8XQaJ+tA=YLU5$;yCnJ?>@v9f zx{CYj-e2`!5#YVZz~giscS3Mv)D`KG^zVk*8ecr`?4q@D^nee?+^sXEM%9USL8rs`_@}_^6z%D?ojsn^hPRykb z9V_r)haAKN>vu+y@tYjM-zZgF?IC&ddqLu3$S>b~a(iP98)KMq-Nlnjt#;?66* z#vix@1|h_z&TdHA{ILF#{C!*PFr^`3mkw^kyM?iOO#>u-mBqjp_ZxkO)1#lo+mNrx zhkrnRqUT;-=wmh(%H9mtv9>i0NkgBaTpv!y%o^K=h^d2pB~Yc=;jWKOA?b~ zFICG=z1Z!fJQC(+NfCMzsOK@`cJ$>P@7dE<8V03QJECF!1p07F%N;?!BjmZF4Wi7F zvOAr>%8oaXY<2NQ3?Dh86*)lR)XKuA@2b33j+9CHUZ*dE!N5ogxDdhyBuXl^LzIpXyss>Hmd+y_5t%ayxc@AY=4UeQI|+Y(m?f>%pK(+gy$d!DyLB z<7PZUY-3_IGYR89QT=wda25$~A-j5s22b;zMzLC+t!HLQ#h2mYL)czxl;~veVM!o6 ze7t4W!(r`06HYa`;iyr+agf`!4gk=j*85>;|JmN$!JA}$H+JV zH^-{Y&!mnINuC|gx;)~z@aq&>p!FrvhtDLRl1R0Zed!sS?5!_@x$nXi<|9mW!oeIl0l)lC1ENgf1zLHaoc7*K(D;A)5wbwl#A&*JloI>qWx z#%4+Zv#cW$nf3SH{-^C*H3z?5-oDG@Vl&pyWNLuPgv%ub|xWx*#qMHiSu0UYWIlaiadiJZ<->zKj4U_7^YR> zJ|$&NWG5v5ZovxA{#ccigegz*oIfd3xIuoZHi{p2V(QEwKZ43nV4ca_W9)bE7+ytR|>SA>`HG1gx9b4joDyG3iz!cPTUcyFE-?H`ANl0EOPe z7j^JPXDx-o{IcJyO(l7apV~I}AgK=5Ewj4rlN&h0wr@nD^D-L-q(AO#xvg`uVYPUV zNJbl>=b)>N_!Ce7=Y}Y9=|MhNAbhCP8z=98WR5*!v{+m9vr!~&#~qPzfWGETu{R~&tv=sO&ThZF;}vVEJayvX`%@w-geQ?X|>H6?lnJ`*_V2?O# zbFbe9~|rOMIRl(>1@kJn?2 zjM_QxSa`iu+H1&!z0}HKN0VQb(suH8ELbOh*#K5msXjtL3s8BHZ7<)OPlBVd1kXqM!X4ja$wQG57%^6$?8bulSQz`ck`o z8#@Z(h8%r6ofF4x{IF?_dedH?cfBbCzw25BWancEl-Fz7XOTptfWcM9D4%Im50;nd zFsIbuzHVnwXNzzsnyZMZx4&F%f5`sv>XeOHvpiOMQivX*=Mq7zm%ym1)8Mf~e`aT! zB4l2Cu;FX{Y-zNko^s635f`tzdwo)VLhLAdsG-LHOxp!3&p}tdM1wWoV*o*GJ65`q z-F$teE8w=yWawAl#$*D`_?Ob<>%x0Wk9_qCaJFHkcJW1b#|hTOv+8!JSH%@5b+z2N z+h-tLPSBy$;JR*h$XB8Va}l}tO|w2;A68QM0gOX3LWCU5iIed^N7@V;2%ou$tp0|_ zW91##x*d}8x*wJfcCSy1dvH6@p6;zAuqU#_Wd)G~-IOD*-17so7ZR#NJ?M*0{N=>Cn4faGeABxmIIAR!nw z#Ir-kB;D?$q+F@Og6y83#;wcogHmHT=4S`n=E&4dbwhu^GceTQwskb+5cgRz?diVG zC5_^CQ)?#KG%#^@!6YAeZQs=CeRXO%WW&S51Aj5WsCT*wTrUwGIFSD^NzvaikD}~dm_ot<+mLs_)-$M1Y0$lsu@u%lk3VXt{&nK67=N<56r zeh;9706-6CX{2&df^;mV$T-{Ft*|Htj07b)!u1qui@!(w-v!Nx%@&#W;LYeh+%}awFb^->)qq0yK z)UaU~S~~+M-Fs7x=g40-rt2f`k;1_hG8MQmWGn5eE}LppRat~8L(q+T1t;vcuzi0( zo^XDxgBxyKxcbi*DuDJ*EMyhE7A@@GGh#iwT$8z-sj9)h`fkIE<%_v0P4v*2HG31n z>u`^>!koh^8)t1!nMu9$*{IFP(BjeJ7FGV;xT>UN6?WdaGa$$+Ch0~t`?nngH>bPytGe%ct<`Wbhd;7j!OF9RX9|v+?ga9g}=!Xnf zc(MKzdFoee5whiqHqnFn9y}2XhGpgl~-1OyAd-6p-&mX## zE(kV+p0={c?pN2Hqhj@5J%-PAHW*-?mlo#QUL4szj%!-q9!0eG!MJD8_@{r`E{K(+5t}M~!$IKcd>76~B zFz%%x10y0+w(diOAv?dz(#QQL2HhQyIJFnqRB?XBgY~64U-Yma|JV_FY%5ql$ut(h zf6K@J=dBoCz zfbnJcx@t!I_-#ob4oHIMcCH4*0eM&#zkfvyon@Zu?HjI}9Ym1w#OFwcrHWH~Y)>;% z`d)s}?BWU#3#s){;Dd5xw^~-#^0AOB937`kL*!z}++Y@^#oc@{I^?Y%Vw{yE@2^wVdD2iri4zL-j-!3q|cJNa)_`i%!HXIAZs zBA$$Uz>QBC7^4|tTe#9=$KZ51$&l9f!vlP4A0CdOlUQTG0S1Qq@OLG1m{y9Wk=}}4 zy(B|Ag8bety&dP)qid`v}=Tt=t>uIhHK2e$jTk zOcDR&{2PM%zt{V})%%C8^MAzo|AzN~$ohM>`+viTM>326_r=F9!~bM<6f{2!Fn4rA zksV_*?lS04u6`?aasvmBQ~N7_))p%UjLv*)L0rjO5i;QNyC#54K2w=|e?cv~d6@Bj){|lh~z7d~uwX1&vJ2e1{< zKvbM*OXx2N23Ur`0{*u5p8X57$`Ar&YR0SCe_5XYTe|;Sy8nUJ8?Ng%5`A-&!!qS6 zHHH*m7CbVHZhcL(bdd72>LsVS0!_WMluXD4U}I@v7HRV4n)NxU7jr-P8+(_d-}rFd z$%NR4H7JtW=dyN35+jPu;)880taG0DCB1o(B2tYeYc;1c~GJv@4dW=tqk zHsz}!5G86efSaI)Q@XE!<9DG`q{S`nJQI7a_Y#eRgCmw+F_n2Oq6sGVwYiy(^_KRu zK=p_>ApR)ahHp=%GWhk_fP{F_ab_dcC*gdN6h37jPM@Y;Xn5^jze4f>R|kp5viXo5 z&eD^}o>UuE6GJ4}^r*rnL(oHMWx&u#1Zt8W3NAEic`H11`e~PdzFUw+N-jT?(5yGv zgKlx71UbBkaEuoAK9X5sNy&ecD|PgSoph?!F{v+&S3b3*JT}pz?zc0e`7O)?zXsW% z6`co@Db*T#y{SohIF~lcsHs;FcX;w2A2!na$fqor*lYamxQtssUs|0^+~>YtFCew- z2jEkr760(91j!7w5okPv zkR1_UbHF%tujx)?rP&wFu-qwF>gd(3GXFhKwL$~ey^P2M;<$8_MAgUJfb)Vyw?UzM zR!!rxLh93!Oro6JeC_=wK;`pipJ<$mkIOg0m5l{KnT0isl}%& zo-y~b8y(DxLHZ905gWg!w+r}wM!h|MFG%p%b$z$am(A}5*GPCVy6Wrfry5=hvCko2 zFx(%@j72unI#3@JWw_+8{S?L#VA3q2fBpLPp6mJ1-gYvFg+7r#TtzPNSxljaq8t^@ zckV~S=AE^y0D0fId2YO-^~;HSd%MAuZL(+Q+2XMb9@{Sl3fe-9?&TfK0C|5bK=#KY zTMAY{GFw5m|CtB(?!z}iN}0oSH?=4J{`4(lo~M~x&W499yNPL+NLh&Yw&8B#VB8J6 z!H*5ojOu$>e~%93@0}1Rcd2(Y@o$d#FtF;>#`>Q7#kngBGeY4*ht7^^YnxbkSNU>w zpaiRNGnS_c0cv_sNf2SugU)}@Rsgf%eCWeGrF7V{Lqp+YBWC!_wm=bH%GY{d_=LNL zf#1#m`cA!>kwI7LLNR)ezES|-1b?~0uJw%20j4f;VHA1b3u{(*P9HU9@T{cybn-#* zV#7{khT!sXP;;6Kv3e1hzuctKeMW%accXgRsr3+Ctj1V1-I3*=X!^R-Y;mcp(&rR= ze_YEnXX9XfIBiM*;=ZDgVluOTak^h=fz;vR9`35$UmaktBY}kiK`!EwQn&di(W~dd z4eNe=sXR+Irkq=sKn}w395m)8(m?9SLJb&qcA~mH>oET_>s%{gx2qgELgvti<|C(R z_&Qf-o9q(}ZfO^Lo6s9?WmgNR!fzh#3U9% zNcL=YBYEnpAz;0I*)}J4BDn;(X@z!)Z_Y=xNouU-YU~QFD2#}`dwa&)ESKXt8E%^W z{e7NI0@Ir_s|@(1dky3~R%*s&^+;4SRYZQZXDHu!SuU32SH3ai%v;cN{u8A4_&9M~ zOm6dR#$&DrKIg|pzdb;|+?~MXd(iVfBtv{-r};XuPq+35u=AjA)`pHoUakcVWAW0z z-G}PxmJcbK8cov`bhzH2I^=)$#d86Fn5+93Gi04{^s2UFV902w~y ztFTKP;&cJ~h6nzZ@2spA^jv2dGprhwcMSZ3FMw!7rgwG_Bt!|b-0<<%@Uh!qbem4- zV@7Hhi@xYhXtMzj7o#5#nQOt)bJs2CbBp=@-h3r|{mlo)*PW4F<6nM-Ln1$SuMcl$ zx{_3{pEu7!qe>#%;pm0l&L3rH4bC2ceU?QcIz;qg{#ic6&gJm3aEbhPwL;Ap4T zbsfxUa`K!}r@C-|%+{VB=~qWl4@Aj!(!q>8c8*8s^+SgV zntdB(dT<5oCoG`J{d~C^k{np54!0v)>jyZYo>?Pz ziQtzW`;g^_kCe>o`DITT#~UTWL~>yzlf>s}P<1yvF@$$za!7KsP`Jy-+bo0MMQYn- z?EAwn+_cQEbH18&CwFZrx@?Rv?w?6TkN~+LG`$8oUi0M^eaqiZ@3Y-4IgUFjOy%<%;|dQ-jSbbvGq{Lw+8QGIz1xoS;qlmcUWeN>aRmxBB|ui4MpqJhmK~p;|Ky!=&s`G> z_IeMg@PqRN7$AJRT00!YS1X1jr z!~MtU&MS9USvk&fDa#|YcX_xJZLv~!76dr5;Zr;gXAb`G_UPqwN~k4`suY&)9- zS71+Rj5vFUTcIXE65FhhVWnD1GH;YHg=)iA-wIbLDY3C!@7n;!@#ADJk8-ze1CRBy zP+$1m=A~))+YXU}fl7r#;pP+P5a0euE5sG?zL)7k_Dz-2LnIDKsyUGSMzX2rBefy0 z0{g-t8Ty0|>c7}kV4_bshf0%PJ*VhTz(-=w;d>UIocsFqiuqajnUYP(PQd`jD)caG;6CWpIq4$|@RegNy-C*Zzw3Y^o^-avUa9*Xk{^VwA`Y zYagaB`VvSkXx6Ps2`ur<@Kx2PT{?4LaEWQlgm`o6JE?<;dxti?IXT?n) zpQfq)=d!DlXB$23Z!p<}y$^X;ex_PH^ww=$@%Dx@tqP+N%dD$3Vn&dp?G(I>#gw~x zlCh;H&X7?t4aC=tOU)ga7z9`b`K;w8#twZEKvxAO*hShmVzC0a}2Gwz)W{cEx#smYQcAn;9 zi>wRB)~6i|L9=9b{h~D<$4YaPG{mUv#;?A&0luI{Nti z)y6wzKxEn=9ADLPjuUuO?`uFEE_B56p0h@76|FQ$gYGaQ5A$GIt|>s8?`e%hW2FeG zKuWXH#tx~BHODIL#iVz6Uv8943TM9W_BXa$IB0`)L5YHLef<+xk_H7u4CQ8X*H#8b zI-xpghauxS+xkPv2GwZrqeB{62^9%3fqc>+mDhL`&&4EZ^W+;;>GB)%8jl4B0=RlJ zU{&5b+cW0IS^MY6*?KO^e*S$?E|*oIefSQ9T88eP(`2PvFx&2g59E$srGLBn7DTPw zz(ura&MQBrm(lcGbM12auJT;0m$*{HHmT?=LFLKiLHX3>OojQT2Bc_=*{crq@?18K zkK``1$?>)@IA6yN2EWOl`h3{fvUjjCtVyqMqRna13+hQ?yH`6?TBw7>n5gltYtk!8 z48J%qt^zc!Hd8Tcmc^#?yZi`*xCqzsH~VnACWljS zX+UQ$cOHh2pBwo1rt`~BR@*`mP@OLdL;3Qn)9O3Hmsy^R_a>S>JSvb{gH;}sr>Coi zw5p%OEA6^Wpb&Q;MB%d9mxL5_$9hTu=nW3DP3tko>jnGWTPa*ZV>Nc8I!HccY(l1I zstniLU;2EC^lDPKCaN?y#)@cKKloW`go%ciW?X2!@I9-3%xVDM83eMDtfxNLY|dV9 zPtuJRHy76VA1vJ6(}6X3O&D~1TxiWZx;8k}>Dc0TS)LiQKd5aFdm=Z+qFw3(J3oj6 zEK*P5x#|9PWobY96Y(?eeJR;k+7R_jmzH=uW($Rhs&m7rKJR0uZ75H4mF0lW<{Jti z#H7$2&&H}=qL%pX9)Zr(S1~l&Ti-_z^i0omjH0tv0 zD5h;G4)p+e0tv4$?spemD|G={Cf(1#c+v1cp8jA$caAPLPRP_DU|E1GoL<9$LqquKksxHRi(z?=e5#3OLWgg!YG64|Svr*OC3cF_gH~xDmPdVT z22EDTV2t={i(z`SmVT^k3gVOZ=rV8r`2~H)5*iCsn=>5v(NuGcPU48}Vj03JT8o=z zbyV|cEV#;FY`h4WvO&9J}`Y1|3R zJ(^bX#9F=Y;=@l+m>INW+CvHDEu*YnVn0!-z@GG8L|^4Mpq~6NDhn zFu4ACB&Tmj_}ly7tLH;FyZc%C3O1va`AvwjFxz|nmxpytd(D$x=O2y5^WBlx>*n6X zF^n=1XU^3RNJU=N86OrC?x{^ym)q}*)Q2gg2=u8(a|+HjxXF(>j)QJ|8R{jPJ(ED* zCp}c-?U)o>G|IhOUkR*$PMzpf_(JG|6el(bC*v=%*nI-nghw{<3O0m_k4$FZ4th;y zAx)=aQv%)z-2?KlhGV_rCZzx3l5Edn;qGRH+0SpN6cd;@6x4Hmd`h6Nc9Xx2R2&A- zQCa*00-X;xc%VUtKlP4gH)qA^uXtrm+CEYV*4hsyK0De&_Be9;swT4PvK6ToB)ZvZ zXs1!@MC;V~!A4ZK^<-um++#d+YpOSD*_(zd6MD0nLGw4{vW47rn_#0~NIyL*@pg!r zJ-W6ZqFp~Sz=c^~D2rmX@#pmX zh4p8n=Az>EmU|#28qgq8=4tI2mb_{AcWD*{Z2IQsN8|!M-%s~xr6ac-Ch9Z)Njv~8 zfxe+r*uLBtI&1{jcYaZc@tvm5kMAPj8}a#3;k@d$&VA%s2qE%|R>E(Oz_SrC|Tx81AQpWmbv5jimVv(Q)X?Hm}O0g{y$Dkb3uivbno|BTI|YkD(!%mZ^?k5Yklw{Anr!^D7_PLd zSs>;MMA@_3B1koP9rf7VJ$_a$XT<@ki4~&O&-dJO<{G)O^W(cH(Yk%Wqr97}#r*DR zg6yV{;?H;tO6l>~gv?zLqziRx2)WC!a-w1@{EQoxhe*rnM0%e!1)mb)G&#O32Pr=+L=t>=r_r#&=GkBZp=yP z#ZrrWyDU>SXHTc!=*pXRz@V2lYdt7ul<&R68(PhrFMrVFxSwHIuiKD&(g zi>_N52Kp~46$e^JjywV8`)OUOpXG|ximKg+rXOZ>u@=^|hpTAJ`CTq|W_8Fb5LSD~ z;3sfeb}yBF-}Gn%y?;<+;3X?UdMaDdWF;DTr^q6LXgO?P2ZMl*7_XG;Cv8@6m;@f6I3?)N-)^w7ss6#(`qLW$pqw9imssxf_ZLc_O)O3x3Yjb^2EqOgfsbqJIRe*QF52#$UWC2&`XIJcrdm+@fbtCQiLadd zOYEvyDvc+l5eBdAB`S`B?&59`qe=VnOX(K22-sXr^9%ST!q7e%KWdM5QaV_lQN>;w zfVOuelxXyPj1nDuQ#X$m^7z@ye|dg1Z4rc6%8xE|YCNTjHKFu?3pB9r*VCCYuwAvesMz%WFN|5GqlVbSfo6bY@5265J2hw}sSObn5VLrtC5S z)4$h=%!U@_@h}GsoMu8p^5n~CkJJ}*9Dc63*<;{~`Uy>Z^~(qrRF}c1vz}72=ua&R zdIvRZl!~SEo=>ea?R*F+dzoug6`3uhbt-m}EP%viCA*oonUUXz9f@wC)}8DG9r8tB zx;{;E(v30;N81=oW~yx?3ob4K&{&OULH)s+AG^ULc-rH^z{eW_pSXcM`<7kMOPSDY zbe@k-Wq>WYz_zg}tZ6b>$P>$fO!Yujx0V7~0O(>^{T*u;E#A}07*nVMde(l8Gb{mICd8UOsMeUJg}%Y>|Av^b2qDRkserAJq;J9;%Nl zyLG)*QVI@P+#Gpq%lYogMZYrssLpFN4=VAmU<<$(p>n2HFV=d^#2iy)37u_0XS9>9 zaB15JT>FU5TxC`qrFdj1dPV9M!Z7V*-F3Q2Ue;vQFQ~guh2nG;w2gQW(GWz}Wh&0}= z)BV-MT3`=}%xWZgwe9?7MA}zu@Q(+0m>kJQvgjqCJiyYEO&i(!fnw34Qne>&Ayjb$;GHt^$7o(hpfV?Yq5Z5X90-@7VIoDKP72mM2iD}h};XyD^L z@#)Rsx@LEFuJdaV>zrl3r>UU#zSB?h71N}4A-cM}FW2@MCNPS2n$I;tOHNdG4%et$ z;?HN0Q*~uIp@ghVGb0atPF&?Hz$7AzrrOn>AzPC*^17@q$x2ikYoFvEZBLcxZ&mn% zFc|eSoyjFg16epxu)=<%D;A+cuk3@>kaaPTTQx?-4cBdp$ zj6NRc&FbW#ZLH+sOCW3Wf{B970c$Ul&9^}YDf;y_1=znUmOc(p)@*x3{YfH|^}Ua` zhsR#88Dixq{3+6Kqr|H5^4@y3&TbAJPH~|U<%6VfY!hFFS{%>hZ!Ea++tU9rAvZ)A z5G)VUxd#@*kuQRaX5l2CQ%oOV@+w^Y(3TRO9*(Su`$KU9^f(Div_Yk4&J4h)Uk!L@ zu#z+Tx|TZpSnj;Rrteb_?HcF zj3r_FvO66;seCS>T^HK*K^S3(xojS^mI`+=PO5V z`Cr!j-+cBv4h4fzG=M|!wi5auomA`uOC=hcQgmDK@1voeXF$aU`=Ob-|NS*V0l)D+ zfe1zXrqliqhX2<7zbT_V&bvVG*!pwj{(WbGM(ib%&;P^STSmpTZCj%u!6mqb;1=A1 z1`h;>P`JAU4G`R2g9Ud21b24`777opMbIFHdm-QA+_U$&=kC4#zxMu7tyQC~HEYZ{ z$LOQ?K5mI|KSngL{Q$xp5PMI{_QUc zEJRSu6NKWU+`mEzC*-ZjS4h_eGHYx>+}Zz=;s5(% zmpAb0WZf#i7S8u-9H#}APtJCJ%B~1DQ*FEgIOx=Q{a#FkO4&)g>96CW}t5Xs}7ZTE-CfF42Hb=7299C_0~03=N{q2Tp_Au?`K$aL}#-F-DUfI zPTPCcz8fyOLgL(x*LF{qqX(10yf!y-quHIW# zWOf|9{%6GbON9czk5pl0SyF{|yCR)p+Sg8cr6kpx3m>H{0B*4M%pov5Kbxpha&}0} zu6)HdU9_cqHVe6@&}oE@?{PB3(E&xk&o$_`B&@YK{s`~u1K9D&r3jE}iV!U+g(Eq9 zLc>@rOng86)m^1@S|sX0jfcVE+l(9=_!NIgXK$H6@y=B{#EV^btv8&dNBHGN5=+ir zGK&E%KtP{0Yp|M-KiL>9PX5;tirjfc?L&M;)7mE9qY@4u4zW&fV#3e+JQImUBV^rO zw}0PRk-)4^v&#H_EcdO{r)FZVZ@xC=*swElDnd5>_)*dY>2LDHPeY?zVpT?6e0f-!PHe`ohbWQf)n$F-h~6i~NjOXqDk8 zH!6ry6qN1)U17?5=Ua|c*+l2G^@G)R#g^>qB?c#{$m zZ!I=7b?x?q(D>W6W!ou6jSB%d_;lB9FU{i?~0~f2}S_`82p%_PM}K{ltTa34d;zI^CH2-UNtF$ ze}un3lCx)v=VgU%hnHj}uzI;J_HFJe^~X2ddg`}V$L0HWYYG(b40Y>45vO>cc%?xF zvbi^FS?M`y*LMhY(3S{X0sw2PZXC(NJdl^(a;u6up$zKso+NV}fTmQ%$oy8({J#9& z`y?Sk#h3_2EsanDanR2Yc2Yk|6?Er}G2wu6XJd{+>Dy1*%9*b!^xFycUwT$S0S;f?3fFGdU)Bt?**)BkgG)f=vIXNVvx_4f5Rh5E zbllS3xu5Vrj&qeGf@FZT0)W+>T}Pj;q>dL_B>H*FWWu%tT%DlY+b<6&=`M(N18FIZ zzoj~l3LKHD6F1r~&)lx}W03Lg0W|X6EC&rpVU%@Qdq!mPRCAg5c%R0sOBrmofj16r zmiGv??G5vM(+(R${!+rjC0Nd*cCk7K(;=(x{qfW8UZ|Tq zsa^KuH>T1u+M%;UKI13mqx(YYl%wfm@4RV|p1;H^v~F&MJTW*R@yE$0Thh2|CHI7R zpPv)=eWsuN^Zpfl0bJ=qFYZk1aRMhE5@M%H3L>!c5l4H3?{xujFXLwejqYAFPfR*H zvWwkLb*UP&5oXB4Rqaa^0!6w4xyytp_xhw+-g0kPCmSKFew}eMk^lF7>xW*$v%E_r zWMe~gAK#Rfsanr%LwolTVN0ZyGXf1eq|XUvGSWMdY@JEVo)@wsFQyB?r(^D>LS7pw z=nq$1?V~#TWK;evs~6*)_L!OWi4mzB%6-Ehg~waNc|(jejioW}40DFFTHhxz>s3e+ zyngcRA)YpJsI*=mooC$9I?%4^28nl&b=hODGB6Pu=bD6F8kK7QQixvB(a#_S{;1$|v)uyP; zSXkZ#gu~0mKC%p4e1pf2cfv5sPQ0~5S1+?wqpF!1fBO!&lz-CY z?$wYhkceFoY6;SmkRG`G>e%{vjR-M~wDs&vTm52xK3{LoRj{FZ+GXb_zIM)Q5{d)0 za$OnOL}qh!t?aFr4BGjz00BhHfK4j#H@b38rX$MpK~$5`HW9OfHU#h;cXFN8agrJx z!T3RzH=>n)ON!%X?`0nUCk=0#{Bry}Zq9ZY8C3GStlFPH`_LOJ;B%6n)@xKAk?DMu z^{N~`Dj*nDx_yC7XDx1J=Uya%+xM3-&_NESy)wiN5T8}QYzD+5bG3VB)K(N^kgRrC zz_f<+w8m_Ku!T{PZ`W!}U4h)PK&9;bPudKvvrGKa8A~*cGdYOp>d`uv;Igrwf`)pKFRM0{86Yh2aMr&l zBKvw%iA&GKJ13;Q(f4lY3%k42-K>?)<(t|s?X13I_$ndS8Qd2B!v;r%*Sp8_@4_Yc zolI+I#JaLB2AJos4_UqSji2=n-;N1WS9a*C#Fs!w3~*D{8VLsU8%LRTGZ={1D*7df z&N1G1e)x?>vu*EJdHGos1+>+%d+~;N;f@HlsdDgeFPImE96|DD!uwSaNWzsnBFSE3 z9n%Vv@yqIrbWx#V<`Fdws}c~qpKc^29kyLl)Y=XT(sbmkiL&T)fG~doj%f79iOzj1 z-mvp0&+MJwH27*@F4(m0hMKlgaC>jP4OVR14C*5R^iECHD~$&qnrpVdbpg>ZbkKznvk#xjX!I@yfc!tCi)^YR)^2AyvS zWU9tGrl_FJp~S>sU)CA>(OR>iweE_97sJz)u#)y>E0+#WvAsJ|T>&KOZ{x9Goo0{n zTb>Ukqo_QA|tO(>$diwvX&!u@~1#i6M)VVTF(n2&s| z_|;Uh{6Q^teOI$!GQ%A$QMB$oTh9rdNN|~&WK2r=uy_Rl_D^7ft=2eaymb0dpGSUr;lVyH>)s5^=B=#jeaUTKWJ zZ1JTu?eaiL@)3gUm6dsuYp$iXe0Qwi!}M&&>EX4%*J-eYe6Z#0wC6S`W8Il5Ymi>` zhZx@?uHE){k+e+6I zyR?x}4tQ{V)2V##+9feXTR+)Af6;B##r}L#>?;*hLIk3I$H!q_*o6MgF9*C;J`sh2e@2IT5gU+}zK2?2Z{K+y@_Zr28g6aY-1&2i z2K2ityN`gq-6Y;#Mh~i{JdXzKyW_xY5HTW$bfbaEoNEP++14uuM3tVm8~ZEud1Phj zju`aY%vtYDMLQ5>MQfELJ1qwtuirMSQl5hdEI$r#eJGDuKd+70M$nj@DPKuKmvxi+ z&W|A{8n%En3fcRqpKWa}Vz76r#_U(c`MV?0lHBYr;XBZ(PUT`GSY=-(yh~6c2qMcr zx-gJH23Zp7x^XxaRwwja!)HyZ9ogIT^uBN*b42P90Q+5WE8!>goMFtaoSxZtADbxPKM$DMI#u5?sxcGphYjbDV)heJ@RiFS`3ZfRD_k%e{2+v_E{1w6c5_Bv zwjQ*qz@du(9c)^icB@Wvq%N_9Y_#0oOOaa-VW8J#k6hM`h9W@^tQtDe!5&XpK_m%9 z6ZKAStSLNhuVk)2&e6--gyjX*cBn_C0WDgr(EJ?|j6hOC#7`=PBjXjMShxzDfw;a% z$##L*jVFc<&j?@ISEyP>R(JH&R0gPO-YnOV1dcriZ(?vn?xQ@#(3RvMlBDpJcejh@ zZ|q@|rqn0s4X=9sqcp<~^Eg-@J_STIMUO6-H>K$PQZLx45G0D382{y1XN zmdCj{LeQN;Mw)zt!}jy?YFT=xXulqcX??CPp2fGYTj-@oLi*yaVQqXjDsqL34L&5F%n?OGT(&laV6&VdYq&7=9BS$3XLK=1I{@hHe|9U{*cCp+jfhfPcOGJM6(3I zW|g|B@!d7PZw~0MErxjfOD)#lRcb9_DET5Vm~gAZeA(o#YYNIvs-9GD1Ff9}(5O#) zTFb4Fh9Ih|7m7?QXD6v!@u_}ebaz?K_-M?O{qr@3ddvH7p+|c~{Wn%i`aN&n6gF4# zEjPSvwI>ooy)^7~L}N)!i6UKSFRfTaBFOpGP9C~ROk3CB_$LAUxofCa>+jdSda~BD!Dynl(Ib`_y;&02q4ebzC1v**cGJEpN?y8^58gOQFSQ zN=nvHU5c;zmJ3$Hs7}I4FKVmt<3gc&fe0pQYM-vF#{2OQHJ>ly&2Jt zRMT3_OOlxvmb09IaNO)UcCVd6dei+x?iJUz^t;WK*#Z-iFU#9XJ;XB@?W#+BG*i>H zm!e{+AM;3y%#rF1G(IZ4tT0~fX2I%Sg+jTh-mbr6E}*dc^!s}&m~xL+4| zKBZ-@`>5DcgQhOE@)Po4^X0JPL1ut&k&&)r}+$AEQS!@*FOX__OCA(HEPEaN{MxCuuUN} zJ(Jh1MhzlO$)5eOFD`rFZOhS;Pt5Iko||i#Uo`pxG0Cs75A)P{E)#nrsfAamRjVj| z!;(^BEJtacGf6tBqo;W}5XE0(c?@E4@$hu7wto<#rGwO>eo9hq{^`VMH{DM7+O89h za+&vi7IuDyS?Gn(IB*zbDT`ZEH~v|dN!SA5$5)pJ&2lcxT{E@e^p=NGv+{v}W!oR= zO@@fj0=2fUv%4PsOq>XJ=a=flmpxa8&+3nmL7tbS@2m6sEiZ{%6T_<897qIHdH6++ z-wU6dPLMqt9aORS-J}UX{ETL@#C%uO_;q}RH3F93Tpt{VT^U&?Sn*%CXQ5{4&oOdx zA~0xX%vrS8zQ`qDAK^82oY%`779IZ_v$*=xmVK>U5Pl50>{>+t7gF5)Emdu7g@-x4 zJ4+-Wq4Q4IY(X9xzg_23(}=+O9_#h0`sD=dj^+4!#-d%|Tj~Tpq~TnsMdhOHb<=Jm zrrLv1mvEJVlF)jt(BUDt&!yS1I+&Zh>}G#3*`#5ccZd>$`C-0BuY>e5FXD3J!=32` zcXmoD?$?hNw1Si!c=3%+y&IRCxU6c(`p-*g!-hYK1#Y4y=WHgLj0YJln{5P}`g;lsc zAuK=)YYk)+VVi(ZEsmt3UM>HgoEd{cn?hvin!QO3%dNMSlc5Hl0liIxjHg$XWFObR zt?_Vf$H>S8F#wxEn%DtToEV;~@vQpA%kOHVX;CN2KHHa<<1|hG2=5q&Q;M6&_8Q zu?=+W(@Fp0EvQZVg~xhU1s~+M&O#{+AvEyWJU;2w5w0B_o0EmcOpvMDOsgN-5-FeJyj`57CI#)blWL|YAU>Y6&~%-( zSWGG8GM?L-Sb%c1x*Pgh6UCNpC1%mEH+}Aj2InyRHqVov!9a8RYXEm*C%{~~v%6uY zaeXx`z$>cN+5PmHaUOr?NHdg9I#p9~)L-2amb&f=>+Qm`E3A5bLd&mr*9z! zgkOXeGko?Qmn2^$om;2z7Obu$Bp#L>n=OKRe`MgM6p!1kp=fTekwxuc+kFkw3&Il^ z<3HK{S^&;moHQF-A=8{Ry5Jv0XoP_p|Pt}hTls1UAeAY z5cT_cz6`(K9BsV#g`Ynh$Yb8%VSph>_==ZQK2*O$m)H#dEWUVUTM73WqB?vSS}PvSomecdPVeVgarm1(!!k-b~8+sIYvg9ZXbv3ZwXI7^^ z#)Wg}>#86=L|4H=oxJv!OZ2OD&-{^-h*Cad4u)acsk>irE+tVqif8zVE|gn)vY0QJ zG^VD2_*Kc(%Rw@ceRk);lBRw?5UVl#H=ycScF_9D%X(oT8J*(L?28Y4|73_=_w=zF zV!38I29P&sX|bUAM%%3N3MjKdFBT(motm$`t_@*wLYEC@#bvj;foJw=`m zaYgV7>q`C6F**8;1@w>lV5muyVVQxvg%|VdZQL-a^R5o%b{Ut^U2{Z;Tja9X2rw~; zN}gDwvZRUit;qCb4U$!okP46RfETx-%l@rK8dI*#R#~%0%f6izdy>8a6lx!^_f#Uj z7mUN~dvD>qI=3R!y6d;~3N7i0P(r$Xg)aZpi7miojyY4Uz^@9aDg>&b6QM5}X}s3P zmHKRKssvBD60Bu^=F9X74`rp|kfmm*<7rwLe>CC;PSsSiG53xfT^cTgH%Y)%Srt=x z_Z*EwGeV4Jr>M+@(_A`qxg5Ux`B!G+hq*va>Ym+tk_`>~A7sxst3GNkd0+Ht+8X_O z$)0XaRThwdvUD)h`0d!-FYFNcCd!2(*k$-f;Fa8LC1l(`ZiG28Ob(uqfu=RASfj|- zJK=mpk{dU*Q41V9&_pb-jz@gltw6!K8F~>uk2Rt6pdz-yQL2CEQD2}sh;*E>%8D#j zACF2WA{FlJyw}EPCYOw?ZlfuQh-_T7;1GEjc%=aJT-DSQo69^A887QQs*pij9_3fM z?#<=!#Q;YZ4DhpP#uC|ZZ<~7Ne2v;I;H~{^gZb&Jz_v5*)*bgV%ns>klWg994R0ip z-6DIgVbv-ftV)mqj@IE!8#9x6q014@E_34*CT9d02G(f2oahdMmjml6}#t(lg z8i{l*X7!Pb?V$bYmHE+U-eo{_l-yvI#0gLO?)zIPn-z~BJVl74VsdnOeXu_RR~rH7 z)j-oT0^aco42zNK|KZ8y*;W@vg`{>CXQ0ph5u z9pDX4EuPiP=p1IYx(sPB`rt9svAb2iKj=ocwPZGL>|u5dD}ToHY&Zi^8OKiMi%&Kk z7IxfsYUyt9_7Dfe5{*SOHBtGyAND81c0VoXd;0tDRML-`hkUT%vpv6rU0sRqtIjI{ zBK4k_OUjg*1@G_deomMSm=&RNMg?6_t7Z8rwi+2#y>Ytm(yDf>Ct!HSAT4$#!OW#e zGH)TnW$Wk@ef25fC1^Wul6C@`((QR1k1z0pgE{5q;($(O%H0MBUJKm?Vsp}h#~eFW zHk18M!cUS4v4_9LVp@=5_pZFcp=oo?%jVk}kC;5y;69-~0I8HU@zkfALCCa4+0Rp; zO%E9=1PXQsWk&eK>Sfxc6*0v(9v`k1xj4khb{~{RtavZ>92O!ru4Tt$%G0J5YN=FX z14Ji$S3{r9^6DN|k-f}cy4>gJlYc8Oa<%9?C&GM*u2R{kG)a)b)-?9mHy?3KRj}xD z=(@pTBRcYY*2n>ijHVq@2Ty(AI=h3fur*IoUTW+h<<*B|JCM#xQYG+9w|n^)q;L^X zRn(LF+-!EJO$TbJPoz|3F|9<;m+3SZ*UM*}gf^J&%`|6jE`&py*nCgslO0bs82k(D z9$OBbsX&_@#1*1A#U{>f@{(?rT|MmEeys54bNmxLmN?uK0we;kQe=K!lF!oz!Q zf(qB9$fKU|M7)0cQAJ@m9v~$=qwH3k-uzx!q@r|($~aEMTrk&r4oX}!i6>nxSomG{fdWkca zCR$uxDc-Ij5hvj_T~SdNc1Zw$Z@M=W`=lLC{{tzqFTO9*EkQt8%c2aV{$eg#>;oW* z7Am8m=w;Dtl0FP{lT9gj?%+mYOzDnBX5SkMB&bCBJ$h&;-pFV;p5k4*F(JMs8o$Uk z=;TACOxX_xir~K!8FT8X4Rk1R`0dTMr}i%FI)Up(W^cY5Qw9q}(PAe-?V_#@N#&X$=Vb9hMGf=hPk$2Tbxw#gkE(<@V9m2%BlZF+ zHdMrPT5Q-0Blw}Fq}oy#ExaIdOOt-p!7_n;sS^`M&2Ql9o$q6-tz0b3diA!s>+S16 ztZ0}$20o0r6~`@(;+v14V}ht(fF{!M&NpzR%UafFm_n#axnM6DF-i25J0t_VPDF;l<}OuFl!_N{lLwFap*HLs~CS18GF?~ zjqThyD~T|pluQu$AHrM=@?#UJDQ|e#)zX;FZ1amYhTvPdPNmFTJ@FcIZ>%4S$RMH& z6I730dV!MRdxh^k-cSvLh83Um^DFcqieSg#VUT8jlpEa^LI*6JU6cb(uN@&Nn6}rD zdl6Wu)zbDX;N+wbAJ(aoMw$uMLB&}~ds|d;XQeR2IJhFrOg%adG(pes)`_N!##Qn^ ziUB5?MG?=Ycqtyqtpz;*(OoA10a4TKH0H?_pT>7a>0BG%8&ZxCy3$iZxG0XR*C@xy z`pQ%<%e>oY(VtknlKb3wzfxkZE11Xf?DSPKbJL>ej~DmH+i>{#QB8&cuAbIkyh#x? znxfg~Y?e!!%~%2i?FP_ucOj0$}E>r2u)3>hN)lrOT>l?F~KtVRa695 z_QJ5=*4{?=`5*0~VMcB5RwGH0JMS#!Zal}>VeYWHY+MD14XLs! zt7%3#fK}BFttjWC3^05r)kfow6?|G+gK8P`$$X26IvIeth&ZCLqKf&_~m1Ezy1D0g50-i zah}E7Yl-EdsmR34hl8I_ljjMO;sLcxTuCC62XcwIr*wd-G|-1c1^sF!f9p4Zo&j_q znGKrX>8uwhWh)9WVq7bx)hqyKF=-w4$*Hs?REBBAXjR~#B zjpni&cXw!;fHa}Bx0zO(V+^rb9 z8_^*ALr4zL<9E%zp%lC$4D$@pi?y0)EAB@WBem07uu^HK;9%{@h9-7{vo?r}Twt$>H=#AJgXNCnwB33-7nd6Z6Shk7tP^8n7?i&Z+E_-f? zt|LceXveRaq^dH^vAel!3%nx-?a1JQ_NCB25*&&Xps5hywH2qI$1BFjNdm`9tjTP2 z6vap5?ueA_z{+p3!la-BNR~8d%tU8b7t)l-LX}V>E^e4A3J}YlRR+^Q+>LBDcv^${`v||7pba< zqxd-wyxu+*R{ z{tKkz>^*ORO=dD-)r%$EQ9MvBv z5gd-&5^zm=EO|@~9aD(z6L4>OPM08C?h8FBPhS3BkIGeVH1nEfIO-xk&3Jhc{ll-4 zpf^(dz@xvKrL`G3vh%0`k~wPk^6rw{vYM> zBl%Ob_pv78(A8r6hcEb{0b7XGuqo}2Nce-y`fn~5h4EtsK~%w<_zz#`3I>S1gzUQi z#M{N<0A5iNT_Z{Mzh3-54A)h0zkmcZqKdyKM+2O3BH$INLYU-e|DZJg*Al_ud<51A zjDW83CwlyUNU##%L(w{uG|M`O|1V9nPet|*% z^aWjDjU3^6rvLL&|E-A)%hyOoxL zndONe#{E$Y4#opXO~-4p-{FsGmA^{haG9eMX8d#5yzsYVk=E;Uc&nH#%=9Q``}}3# z0{z!S>1qjF|085o17oY}8Q=Jov_;>-T;)Y&8oN3?c z4Qp6xbC(0Cc#O%c2602XWBIBKD!_!M;t`GibpHQOBwdM8EC8ojgn;8!if*fq-nvYj zU@E}I)6MeYjK*w|uv=C!!NiPH2PaJ%<0x$p1Sqs3v4%TfQ1g zkP3d17zm9ZWXsC;Wc*wc7D4#!bai*y8en+KG`m34A{g*h0BsosifR-C9gbTHd_X|J zMmT+zTZ)3=^4|m%7NfrH`R1hnn3jB&Yt({_0YsSOD5O7yGkz9{zZF z=+e}(-QH|c(Pie&UBV()N7Tfy=~;F6OaYfz7u!Wm$XlH&ShnxRrpCR6*-#=^;czzZ zz|AOvayL{-Zeop=I|7&~B?EnE-{m4e*0NowpS{*7*QDF|S#atO5j6`kQ}q{@tot3r zNgwr~3}~xu@gKYrtsc!{i**X4(MfJ{>sPXa`|V%jhk?w765@_U?pDVthUNa|Y$JpJ z8cbpKG^Iy@P3nS~?8(z}03?03;LS$$H1iF@qyPGklY&TKY}M|3Ys~HKDcejgD7NOk zCR$7jMewto#mdgxt4X)Pc>dbqEbhr3P-H;D^z`Xo1LO}c0Nwv{4gw#;p2CxPilJ6` zw7MQn76GXL8izC{jc;$lLhGR)E2qV%4V?2bR{)-|+H$j#)a>zO3PVdzq#$DF*(G{vW#LpW9Io{b@`+h4c2P-aJ4H7~$3! z-Iq-W$IXqh2X^2iHt8&w$=itfiHw@!oLCICI$Ym=>V3#_64q*yfuwqCbr~R$6EDm2 z>3Ihbth9@@>mzyrebLr%CP@i}^Zl*+e6>m8OFp;vhDPU8Djy0y6@%jW9E@jMX37oN zW)l)M0b)F@^^B)O9YABITx_sSPH(i6iK7a3ZdV*4Ray0YxGN0i@nX}e2_hID=7DVk z&Qlw6)h0OfiZ2<|cJ+tpVJ@}%haB+Qu`TYW--OBF^QCO6GnyS`{co=oP6NDGKvC-D z+U2vrxu*kIY2Y$rs^?@HMyLVM(f`cB90vf zGx)#QIe`-xoQXU70lwpHlg)CALUf4_IEy8HWAKX(KyBWfAoHR8%Viq2@-I>I?KPU? z)ejDtqOyn@^JDLsx}yxhY58URP;#YoKl%>Mho3aR7{Cj&$e>5rwoK<8BYswCe&hMh zvRqpG`M1Qe=8s3?lcsyxT9EFK3gc+#)s8`!6tNQvMUdM%3Rd6o595}8gP@68e3^kAZ? zmuosC&P#lU8O7!!FHX8+yW?LeQ*G1v(EoM$LLQe7+_Wc@$Wxy$pGpO4xddjeIo|d% zpyV$Cz3zB=CDwGFvPrHjqph}o8(QeaSYL(3Y(^>@>^5nU%#^E8$>?YSihB*QU0{YQ zs1`8RpyRv974(J<{*rjVV#=w64K+Yh!l?`>wY z=zMAiT*g(uu440hUX+buMw0b*GHU0C4cr6b?e9+L9jM}DpF1Ab(cYzCNJeW~Bo6}{!GwHw_}#nI4;;`p;+^XLARaC!>% zpj+L^W?2k8x~%$wYF@GEunC@)wnp9kUY&O!T5u_H#s11^W?u{e6@Nm~hxfqqj&zU5 zZfT=FZL!fFDe;w>_O>-7_si&HlZ?t;yX^FC_XXer;95E?78nZ8;4lErds>WielR(^ zAne;MZk?`Gq}p7vqMxrBp0nhhjgt1pRezji8u5$I{pM^A;K{KkIBih&L0u;s>@mdn z@OvU}#$#JNyW{Rt#~Q61KQBV?Hc>)pn%cwRmqK`^H~IJ%4cqPl23QLXmd9%pX3qJp zZ=AN|$AeHrbOvI4l&L;T#dXYxSYNy>&4gVXUcSoHIP~;ZZSX>fIlnT#DU_SN46s#6 zQdUm|100p+MJ;!idzk%uK!tMd@{(k<88ALEvgJh^(`cT3sMq)5{=M4$*4#O^rU5k# zm~EkUpPV$g-bJi@x@@wZC1O~Hq+}9>sWjX4H4bNW)Zg^L28qxOB zCGgr@g&Dd>t@=Y5KY9ShDn>yu`}~gX$og~Ugw6o09DGUSg&#DoZc)=HWPOn##z>IB z6?rebJ2au5?RDSxDn_tlhTKw2b_7hApm2_KQ|>rz)qR8TIjBk<8vH_iF*9Ham}6CL zJCww7$;WzXwqcRI=VT4INSNb`{53cD%JFDl;i36mGiT2k6~t$t(`Z{L>DM;4f!5-6 z?O3JKWL7%k@utj-Vuqp_1=Q{0qBXHG()cO$)j(<#g<8=^~8Gxn2%j~DQS9P4Bjgvh|Ei46nC zbWlT%$4#n*bEYB(f-{L2pu!%3DjaJHJMSh;Z$W&s_p3)(cY*ujWb^UC1YdYRM7Be5 zeeU~o2(0zSR=k-JlPh(rXJFdCIS9oKP=VhU8^f8r$aYzFGJPSa0cIpY^o0}%ywkS` zXnVF}f;tqIy#v|5o%+j}EB<7P<}rxGI)8HfA>kq~Md?l_!l)MgtYpKdWosifonJ2~SM|fZsmbLqo_L|Y%vpH)Q4Jl@x ziyUai)n6q?z8PkV++KY-+Y=E5W^S0qnT~$4zmNiczfbQ^fte|TY24PdN?C%O8VD~j z8B&E=b-qPKJ?tRGlo^ian$VLDlagSa3EQs-ru8}DGfJn{n9(FrV|7Tu-HQJu*~2P- z^ply&5`t}}rHu-EHZXhiH~#poHLTg-3V{nRG{+f=qqY_;Iir)#U7axL2TQ#T-4WOt z$z*AETE^`vQS(*4U#^z}j3#%7;}hnFSZQ_9BRw3U+otTiJ0^ zybMz-|F%COpz9Cu!P`&L(-ESMqo#I zxh*ZEZ(KB4jev=wN0tHULo0w!NI+KURa-r|ZVi?WvP0nNy+ypkA?l#n81O@z`@);> zR)+wMyg{H*{?o`P4*3fkhFBpr~txo z)H!#AVdVqPtCsafz??ce1!R!AzJS4Te1YIe(7%pELB{rnK2~Y(Q>g1ojpm+!%Wm0X zOe&P!GZUCHuU8XIZk(fY<9HUBdUFAV9LAMv9Coyz!`Had;jRxc5V`FBR67iuhpW_U z-C7#CiSD|7r;4f&TjK&k3xfn}5n}70!U$QlmpW31{^sQpx=dK4mpiby@7?2W1y+Gr&F9y&q98C*O(4r!|xH;qj2@& zGwVuhM9)!mSaKeA$H=YSeS!ELtty0k5|);!%RzH!xrrqCC_R%pN6^tgJ#Y}7AG zt<4W?D6+RX0O5Mf_M4CUeWBtm#jlVcqMLgZ(6TR+C`sYa1xUfK*JF0RN+5+}Q-@^Lvr`46 z<<+?AG-AU;-+3G~qyEg*djr%8wfi8rh3(-?Cdk849v+*z{9}dl;b(qQeW}Jy+ZEx8 z$q{!^lUlBAH`$b+brQ29;QaIfQc60+>-NSGakw!DnZ4J9$*4l2?<~ zB2$@-q^Tjm9Wo%CY!lMr3_q4@_GLWHxB& z1vb2Sh@gEf1>+v4^4G%A*y|M9_~<&;C-^zbd4hQA<)YP0 z3t?HCWgOMdavefacycbNt+M|p@ILe={VQk{4>LOUvIh7|8GmDtv&UWAW0NCi}wE+Wf^~qm}p>BVUu%%@rNK!M{pQ}FSl#tCQ zTZT;DoeZ4q=v&P1O&3p5TJTuOV?2U^qr z{DON!$V@1KRZrmcv^7Yq>-?BSyG=qT(ev;K6ko=&8)=Or{zz}a9DhWO|igVpos zZWnd8YaMg1l=iy#)82yQixQ_C?@+}x;EB*Rt1-w<{HN_TL*XM?kn>63)Ddbb{7nTD z`{?zt+R|tb5raAsNGpTGl!+`YhLZSmDm*av&Va-y-)6Bx0Ysxj3HbftXgWtZNt zsNau;*8E>x54`lPK`zKcs>GoCFlNgU2QV z^^&>-o18oL-yIHDYNhO!+Y0)IfVq7z9r)9~V%~yV@LxYu1p5F^IwdawSTPdxkwNxS z^+hjCOh zX#;hRZxsfuti02zm%!kviF9mo#^|&TVY{}b`1gHbfL1&%je$92KJjln%>L)H{lk;v zZ_?<0fdt6pK>Oj>`at_%v#I}SFWds$BCwL-u;O3x%Krh2v4nvJ$oGL5&%gfI|FgDN zGC&6bIEMW4pIR*cA2Mg@M$v6`(F0rc$Tyo=|SGmr6j zgyjz^hms#D62rJs71Id}iv2ies!&eDxA5D6ttoUk(7n?(3 z*!;z^D{!+kwTza|Rt%O*@6nnM6M?G5wK^97Wdz)O<3p^e^g{wLX?e2JJ5Of|`sQAZ z>O{tSZWEjkOP}q<*+RK`{0;}M(bJYjt+LdiwX$jXkUGy60OS(dVb8(1N?{31Dzbnb z2&r*BV7&E3!Pj=e9Tne89XNOhjPHLeT{S%jzoQ!pt6*Z(jluSgny9}Gbr5lSll|R8 zsY`QhtZ&GfFo{hEv`n}jw2*0Mi|jnWZp!DfA7le*mcyY7W22SB!>A9EluH^~ZWRON ze}t1sdL5n!fjE|tdh0eh?YV9n^sX;oW&*6s9B zIoTd!0??*A<+r(*OzAhv>Rkbb-V>hz*SF#` z=v|gak(yFHoMO{Q;TIRhto0|S_?rbUrUk98ZWhT+_Zmn&^yp}Ru70&Vc2SYjJ^Jyo zufyx|&g~jt8Mcg&qaPF^Ze04Dq5mHf7TX&+tM;?6f(F%X^}>uSt6PBEx-X6nhRw$> zC-mn#A`-y;PLuhjE>1p`^QzW5<%CtILzYe{v*OZr`fDmJMdqW5>DsV~ECU1fG1kBg zKwu0An009YwRZxb_CB_T{7xXo^twazp&(?{oeEvf@zG<@YLo85&dGWk8vWam%Uqt^ zmW6(-I8+QUj>DnHS*j!-_@o=24)|Fms1~cp-ntzNKA(W<@5M0$bT%z(EFD~8FTK@-kbW*pxMd1BiQc^;*~?p^?QOWh?`TJ z@-L6qw!bV4Q3Ru4sf*WmGoIgpS+oTv$yqOk0auE|*m!nT>3;``X1jU&?aiVo?LmH0 z)}b?MeUPG_CyM?-qwTV|qv@E{=4IncYbkPqBQGJ>dvO4{w5nP^4M%+^poyK52G_HMA|4g$u&u^{p54 z06CuRudfB#$P5*BsC3PDIqB)rss#Bt`Mw2Z(T}S3Wr0Sn(2Yq8Q#4SOW=a7(jV4fR z=SFZhIg;?*IAY=Dd*#y9SYPTBbKh9+-N$iBxqLXabAq^BP!qyOR4l`Gg@nC2J6(3p zO)dxM_Uedh&5qa1K)GI8*AOOd^7Qo@@*hV^|F6Bb42!b;`bKZMyQD(_>FyE`K`CjF z?k;Ht1}Q<1P`W`$>Fxm}1{h$ZyQMn^7zW<)|2*%0cHDm5U-ss>KENDYoG0r%SFiP3 zpu|7e(~It%%+PJX0_b&D!If|I)gXC~`O-0$8w`%^7O!`IPEo!E;|STMdV1pHSdAqy z^J)=w#XID&7ag%tX5H?`>a|^JTLgc8FT3D@X>(?|wEFV`Ir4kqXddjcv-4eb&2kC4 zG*(ixLWYb;wKg)d1WuSUbJSs!nX{{>Oqb8@D@OSkRb|h!mej?xd2W8B6ZcRt+BuwB z%+=rbTph3n3ZXvSL4i+Y6pcTc}8eBJ70MwqH&Dsr$5yZXZAi4GE+ zZ5S;48T6kTC%)g@5cTl>A1s`Ez9bvOUED;CylIAnSCvUykdd(w=0f0(CH~w}!ri*- zr{l1x-lvcGcFpjZMZ`l-E=hX?)IGhi2$K$lW$o{)qbzY{x2h7OlG4kM30vn*=dZ-v`m-4o!6+yh4a(nCGI<5cKsDZg7{xy<y1#uigZ$y5^l#m>XvVbw&1yWJ5W8%)*yKq_zQvX6!DQI*~B5LpL-;~NdJLg z7MLaId?czMk^24BscVm`1i*HlZ@yM9rcb6FIk_JB3Jo@BNfy`(?$(f?q*gTbT9%)oQgBRI>@*aOyMEZ-+2 zbf6}~9Q>_f1%bJD!MJ@YWH*XLlA49Y^692H>2XFjlsAq7N1{I^>LMhduN#Qa_Iid9 zq&US#XUSYtRq7_+S0-97sD2}3QEhTbB`OSul49_5FG3$0FJPaXR4L{a#}x3PZ${pz z6o#BhaK{iehdX91aFq#2YzE+;ulbJ?wv1SXVO<0-TpHDBwZbVm)6I=kItydHxX@sI zllEi#0PFV@PX~dn>AvYuteweDxa8dyGC1(RAV0qzKZ!jM;kzB=C$EPx_QzRo(4{%=da$ecl)qH`u$*@oVU12DzEdW)r132V8tgPPe zF}nL$hnNF5b71Jnk+R~|$L;~|mt)I!Ay?6N9*k`TxzOCeH&?3&dsRcKC6JHts_}@V zJ)q}Wj>3<8mT&GGQ6jII_D(XcNQ}Kq{n#Q1bgAkef;J*z@u=P}gtBq>Of~gc-@(d? zo%z_)Ui=wO4QKLX+uVfHY&!+zxdZ;CjdJ@{!+3jhfGjtlJ#Rg;rydoUq|jC^EADq6 zB71hteRPz&=E7GsuJf3qwPU~?T(#Cr6?{+)$z7D7F9kL=OZ`A5FcL8F8Gf7qZu5d) ztvKDa9n|9ky*>utX8===S1P{)+4#XXHRv2mtEU|#iv0=w0WlZTJQ?-^UVJ?gXwJ+_ zUZ;m-+6rdw)(O$#2H8hXMDA#}3Tl*Bbc4eW-gmqQBg-M88r-g$gvzgEkZwD*-{BG~ z63s_L&bUi%H`f4l=Fc#J=PK*E(diK=3@_vKdGwa(uRaK<5unFE?{7al;7s?oJn88h zB~nDp?yEFaWNg71L-gf3z?GORY)Ux>&aZv5Lh9$|n!C=~_1*2%U6?m{9hw&9&aC0% za5QONROuI+1%1W}Qu)MGeEKhGIGp1WCyeQ5FIZokeR^F@u#!D4yVNM`+u{)&ZfaKbH1 zV)LT+tQ^K|=%7G#k2GXOLnJ656aPt}z8*Y<(`clk&ZMS-qAAizkBiF>GTbDxLUj~2 z6+mIU+q_z0$im1#nmd+d+;1BwGWTMJj-6q5*-Ewtbq$$)o4Abo82C1xa*b}F^$^)~ zckX+(++VtvoNgonw5SgJEL;IzFP)XEN5M zYs+}^L<$*!NTG*){mL4nitLF9$06IM>k*l1w>P*wD=|k;MSJqHGv6e(+#q;`6YPo- z9?`F=KRAJ`i$=>HiUPch#NFz^oN6|Iy0THBZZKnq1Sk4tm7bzKI}EwY%(1K-KmYvmGSMC_Y>nDod?1C;uqc2M0O2OGeWAM1vro%3@mV|rBGr!kg z#cT0*XL~m@#ass(qpM0Hbh<2wmO$zZA+mA1$%%X2Bq>kHozJ6c)K2cNwe<7%1;Gw%ZR0#+~H4H(JJ{yj$Q<%tMGn}Et- zE>C&KcnfH@?!J}sh-i*k#`v?&aa;(8nDS0N#(t)xx~cuXY&0B$^my+NKGI|7-Pgi5 z84A^SdwE?ju@E@eczIxSVNn$B-m!-zeIP%VgM`!~JosSUcNI;(a25T8Ygf*TFVsH* z#jW?w$L1aiW2-%5%if3_ChzxMZX>v(Q!pjAv=~ZAqn8OJ`o+h2hHpo7{5k01I<_^p z_m0-03Z>7Ztf)feAzeV(xAc=Ne<>E%J?3n+fpMMPP{cNd>O+Iyf8%L!O26cFoZjF` zsPo{xIuv^Abw;U)iRONPyat>sF)(U(7XH2p#ej8I?O=v z5`epa4I88KiWi4$2?dA`^H|THL-@VnwN0~8win$ISk=<|>lUM#KKts{?_4`kP)KI} z@jrFUXE=XD&b6^*x;5^ZFBSx)Py#ZQ^OS(f$KI(@Buf*m(hU0ox-pA=n9d z!2<7$O)L__UjY39(V?Q43Aeh3nJI5xoQss+9=77yvAJM%JUTc^8gmOpjUdcRA^p>dDUkaUhK1Ie)Er~>X`LFH`(@2@w_i@IA_-}tEXq=Vu)K$2XI&fwUM3JQwX-I zx>S{NCAJF1uWqHzTW( zbQ0fHqiQKkg&Nv@ZRK?a8JgbSmrR!n@H3P@xi2?lvgAjPEtCPk9C`iUx~~=&#Sp-f zSKJ;lE^yF5toskxs>#XwqZ?z7&3+7T{q$^Cg;p&DmdF3 zEcC^DCSAgIJMSdT$d1}t>Ur--9syZ;!Q&Skqnjcoe?TJab9=hG{C>-~w$y`3m}bg{I4SeK+=oD1NYeLFc&| zcHhVJS@KiRCr!e0anCd3b5T_`$o`9)x4!!`?&>Q z=UfT7VmI_Isr8cK0HO46ol11C)&|K6$C^J8M#!R)dAd|6NEEwL%Q)GHUV-3V7-eiH z{SdE7(e6C5^6A;fOZIY|2fB(ll3xxdLyEt3?(2aw=dN@M>U_alufe%bD$o<8@7Gcr zsXajsWIo{e2>MWa$4XJ`RU5Xs`-PX?5QVI_;Ls*Hsw<4tx|_@^zq3Oxz6Lh)bG90p z6Y?uhJUBZ6I!6~(!jKcn-9WBvMWcJ>duOJ%vtk~{jf>r1dT8-OfBmeke5#@a z-KN~ieBMej>TrN>K)n5*u! zH1=%Z_!L4iX{JD*bak7=cBonVm4JZ;21f#I67+k53^VtZ!jXD!_$0$9Z|h}@34{~~ z&mUDVe?OmM`Br$Wg6>C{96QC%mncLBR8Y90gxJ~etAkG_0r9}c;nB@YT;EwnV3$a{ z`Sgc=H1ZA4k4kZktB`~h%MJI`_S&SS3DwbxXQk4+9kmcfp`eatadBG7L2(?jfFg>Y z7r*@1mMDcZIo&x$xYMM)H_U%>`EPtvu=D-JL&pDI=IV2O?~BBYi4erf7!dL^)a(H3 zx_~x}{HKl~r40d9{mO_P;HlD`hUC^~{`5_d4+ck77QeH7qNg1qnfJom^B7+{ z8cJ48LpFKlkNlP>o_t;L?_QrtW~{FhI~!Dldrx(Io}wtc2kFTc)<{|uKj9J?ZZJ+3 ze4hFK;;1JkHZZt4?|3HAzVGPv)7V@(kC?lWItzL(;6X_qdy}51?#>>@crrnXTB@qa zUqI2clt4%t8Y+s4jaHYUZ!&H-*G%MNAny2R>N)-U5Cmr&6cOO_ax&3;UBX2=l{ zor=!s5mW!ZlOY*K4m~*e?W{i=#03t7p#to&3wVD@e%FXMjLC6S;B}Qyt;&!X_##0j zgSAkHn<~&(P^zZiNG7YIx+tE|P9`5Cewq-{Idz4YTsPmlJ*2bGGSe|aVK7fa?qL8-J=q|g4IeI%@5bjH}uIg_HvYmE+Q zzuQi%Esq;J%puy-`?cOQeM+mmMWkX7=+LMfouleV-|W+*=kIYahIM?7 zuW+nWmILe5kg6G0A0~xoN06^I1^U$|WjfM3;-HgFJ6VXr8;#K+EK?lanN62lI<|h@ zjc9U)^doz_kl0bt+9IJ|#KFusEe$Src$s%`PR#o5YcN)M#N7Eu?2fOhSeANWTF=zLI8<_FXJ3~HMS#R>Tnl%_>S$m=J+1XQ9ateT$6IZb#LeD7O$ zXC7{j9Egf3b5tSK`)xo{gFSDPaB@s){{3+EwW-FZ53g+1RA^1@&8BKh06EAO23V)% zN52ypKRnMktT`_X20zWDlo^Zh7kp+gXRy2wYd1%XY; zyqp5Q*$d~~h9X>i(cMJrqc5{H1~L~pe(D6NSoosBX^lTnvY@44p;x(V@gsfKpSr#3 z$>$Kx{<)iC(OTvY8=OHE^n*|FYu3_dB455Q&Csg{?8&A=O;-Pm@9?)~>H;ODq&jKSXvZWGvEBTbf%J*f6n0X^0>=*> z^)k4f*kf|%Czn4l={+O8Jw(tn>F#DNx@|S%Uiq}!da^zCh9{afyNCKPriR_vC?0yP zdgT(YZ1q{k6UnN9Y*G7W)uKyr^{$L3VLHC6KmI6sZVlp@4Z;00%B$c~XAU@ajO_Z} ztjFhO)dUQVmsY+e#f;QMO&iWoS=dj06tG_{)AVJhe*hbZ&GkbXN)=wB44vCAhQpMkf4mvh7Ok-XuDv*OfY$ z1{rSi=~vq@Yx? zHyV0|C%Q%9HJnJf%Llp~J}hudxFo|ab$D_)Ze(@Dtzmc&F^>kC9#w{_tV#nwC-VMFSFJ|Pl7sZa;7aQUFJ`x~LVRq&H=m0Lb$OBHVTeOj2#6@qyx)7Z#!K`Rh6sxRzq<^Sj% z)b+TWQ&};@y1ZZ!VBcMObT9ij89wf&;9OF(_3PE-ajjX_zcZ@>arHY zltQT1`I)@P&le#)8I@d8pq3c;TkB%aXS@gzG=JMj7Xoi*uNQ*K%8ig8yDi=Yp573MS1TjxSZ0zIVL4Y-Cg((O1Vabl#DP*;eJO*Lf3Ka^SE65iNGJF zpb{Wku%T8lDC<6FYns|;(&$pE;(2_!zYB5u4FROG6r%H`MdN>S+0-Yd#=HIUE#8dN zANB6#iTi-9$Zwzo*cI`iRk>C|xTI|tS_nhLSHr|} z6b99$(u9k!X4mXkjI!eYHlragoRoGP{nkI-B*?xGaz?Fi3`E>+N`{{Y{F*znG!k@U z8(;)_=lOoHoiL2F9*W{mnx(qDyc^Gp#fi6O)7Uj|KW*Ppa{;4rQ!GmVv6vCm69+Np zI%Yv`KJhmm$wu#gN3Pyq4;@x`jS-c!v8pt}b1x>gR!8H)beC4ZvJujwM|1#I6;mrN zFNPqG%v+De7HEV{wtk+ts;Qm7`C*jYjT=Pfb&%=2eRXxr9qRH3S1w^lyf@u&09AAp z(c{O~we;4#ICJng1_w8L^HR{{497kZK1S|6g7N2X3NFv|bel;UBGSUo5$GIH!eyzp zq_IXd65mHs20#b7eOG6tkk*4Gm4nm2i8WYz*L(Y-taP}0|iSprn;ER7VDT81UR-1Pq(f^Tdq+I5VsRoeh< zPo)&Zw;Jk4#UPUiIw+;cx0U=7M~JgYF9Ghu1tA%PXZOi(3@WD$YFYQs<&wvTRnaw6 z<@j15OK`QO+3Rr`JQD zm{M4KV@xPLor-3?9D!j)w=e4zM34u;bQ!@HD3`784RI(SVlbznFbtkw5ezJyEj!TJY;kB!eHBJT7~;xV~m(p0q}MGz-3d%}fv7A{LwNZ5a`O z_Spas5S>&+J8J?6=1=kK3JE$1jmN(dqm*<9-P-XZ2KJ;C2$;>zhgOepwS89QJgFjm zCk&JAWA*{Zd#b9Za3%0;INUOpUH0BYES{H=)F2mwcy*R1Dd6bkybzfmdzdas(zmua zILQJ}>`js6N`40Fy)H1EEaalD>>69K^!Pj}9H(j~C};u#s43 zT3?C&f+up);JIltdf7LS&Nv``G6|SVi@`AwZK(DT1D|(XIJjR%Dk=6vor4nbIMAVl zYk2vcl_%Za4yXK&tbj;>(0c3{ikmVBMqj`CsBIqm03P*$NZ858*}O6dh%* zZ_FbI8Dul1y;)R9qM%`5$YBtVtBd0%j7w_5$i@JbM%P!mw*=EuzyfcKMO}CeIHDow zu?gee`95wrkAbnGsP%N8An+ZBL@$d#&*s&4u^&DWnMfg}fvqY!CsFl0+a})B$eccF z(7;DOc4Grjy#`V1J!v^uSqov(zg-L%YboG%B0t~Ql$ns|t7vq&wr^tMUks}{%s^yA zo4_C^lOR*+55&eyO6z)Lsf0}aM`OwpP`}o8;0Ms#h33=u13r2va>3kw<+#DahAb*R=fL4(snFiDNDQ7ZCSOfKQ}nr@1)~ofddU` ze+hRM_N4I~ThLBaxY17dGoqPmK!|8FTl)tYnnE#X-?k`8%1WIr8?oPb6}e#|k?C`7 z1>Hi7wL&if6!ca&IC}$b%btVu%{cZ}uggM41i5ph@jj_PaJ>n?P=Q|n1A?k=WZ<_Q z|M7tc4{ei-1E5L3Sv>h4Zh0%FM18NY3unPxN=e~+Lj56BaWa@J)gI=2VnG9UF+e-I zCwX7leiDr|uT$CGUS6*Dh3T3Q1ud~X_dM&?$Tw`5(0m<^MC)Xc=NzTXK^#$7_Ar%PN)pWMf`J25MDto(C3kvN~K7ydJzrHp1o#CBc5OYN>kf~{YI zbB4~axv##!Z4c>3hRk*2$Z;x0U9T!tE@O^RQ~I<_3eWEGw{E@VR%v|~zd1dp%@enZ zSh^pfqi?q!{xRl6qkP|Na2oJXb?=vE9^g9H&uhk_yCbm-Hqw!gfwxEM&bth^riNsM zI)fErS~`W|#ecpxq=D38F)~DG`Z9Z!a{w2I;AO*#$B?qT*FjN8FI^GX^Q}rlCGB!L zcw6|m4#ikn74kV~K?Pu9wjw69`uZS?h*cp+dS`Zre)%O0R^rnUwZKSFw@WN^T09P4UXwPULLIh2xY0ihq#pqrHWJH&Si)KD%a)X*^UtRhj;e zK%N%r_0L1ZrUABPjE&5G!&W#n51NW?zlbl>48tj_Gl)gT(K-5be7R!bl*fsT%B$a# zmW4iX5gPUu6aL=3cxct6Rz)w2E zxK$8iz9fjPjGd44RWT9LbeD`0&aLh)%t!}EK=7_}#@jNt%OF!%93j$qDnqg}%;je;jZsJT+8%PBX!qYPR zKZ7|KtAohV%M9PX$>T#vSOVU+I4Z3yO3&xRGsjopA++zEPZK5Le0l3Q6a@`S$y>7F(bY#n9G@;=KZ!@ zZ@ifyv6jE%(gsR{SSGEjxFmjdP1T_BtHfE3Ow{PUciIw8C6LXa(c$Rz3=`{4n|1yM$YbiU>~t$o43Cd zN#RnIZihGIWL?>PZGob&WyL-%J;z2A_FE?;W3lJ>H=@N_C-w7T3t}esaAq8lQ$(Nq zO?tkqW+NObcqWv3$t&*Av&2=3Mhws~*YnAh;QLvJLfd6eO*0c$wo3&T847Z!!SFaN ztxxK~rvHVgJUorJ?$SMzS$5Y$c5yzZAsW~?7^{(|wymL;A8x+lB@++o78~JCzUF5{ zVHn;ols$CD)y~yC9qKQ9)h0zXrbI*sa4_I5^#3S%vYI!YpgxJTL4FLU@+rT!FEGPu zvTj^+tOisdFFHq((oqComL*zj-XbQ2qsOX95Nk1U@IU|1wY`2Ruba0M!i|s#N!wBy z+riP!Nmkmh$)JXGJ3Q9xzszsDOhkoA`;A}v?Z~WKM z$Ta&Jk?<-aKXMe;wJSJ;=1%?WpQ+$CmY*a8rvfbnMUJBMWisWc5VfzjIZ-`D2wYfR zJhC0x3m@k-Fsrl@l?gJI@s4~sZq-VRIZ$r4Q>BKl@|K>;K6&g@aBs%o2&qn1G%>EI zxqqMg8K}&bLP#B=dumCWW(%C-lHa$wK)d;+NMvv9;+ExEDb!(3bNf?ld(PtWZhO%e zG2WkATXqm zv-Qo6mqLT?Gtp%eik+D{hRuD&M_rRX&K&R?`hv_a!c zM~J`#Vk>lN`>}NP1G8Jf#UJV^L!ynsg3n^j2aiGaPNLWO!QqNtKz<)ix+!XGF;Dc zI}KHOU_qi^&osTa|}Da(f%f9RIMlOY4kc3?4Z@$egEXG8Jd`ZOCZeI&7sf z`HEOb9qrF~-^HkmS$p`PY{52x@l^x!sqEWA-Vv|6VWu=f>MPejOp?jY5YQQM>%*y{ z4g$XM-7$q-lEDLb{c=^!<{%aHo2CeH%>ZkKFjnt_%J!zC!iA8u&JM{ks6}fr)7FOJ z_%@ZBl4{!oD}aY<@Z>PL(#cpHTu@q78TiQkR1V&O=X&j%;xdvdloKGTj$rL)$dQN&H2v;zNdjE%i5?b+4vy&kmb;XbJeoUF9D9^$FRd>GZ(t zUI}@Ma`USqgk?TebL~`=VSQ~6Dl>gw8>?BH7j0Kj$WR|@u+jg8k9>xMb0c*pF9W{@ z4Q)PIG>nLg2DL8FR9=5wt?8revF`Lyj=1kQ5;czGIYQk1_%27)#kEkBVS4Bhkqs&z zKqQHxbDV!U865m4xKhO6urEdsKr~W4hSrxBTDl??- zkZ7-O=BPyW3ADOn)Xt;wrHZTqiJ}%NyPdm@Cr%IZM>W~)kvy(Z1YdC+bdnYZeaB1P ztffwaok+)FuNii181R@CK2zy0qzOu8n*Qfq z4=d<*<;d#-^ZgtOJ0-Tc53@Ngf$SJ5z;Pw2(T7oACk20|HIr-7MFOH#rjhjH`dPQ& zsd){a!j>o^8{z;5?6i0L_4A-6@*j>Kp|LTaL$}1q3OBlM(_FZgsf8YL38)31(E`?F z&-PAROLevh?y|`Xr3nmEv`9A1Klp*yE^z>w+?BuG?e<8hr7a#}Qiyj9>)zTQb($Yg zNY4t!c5I3@yB?W+q<{>uU3-jVSzg;x#qvFr@e9?bcT%CMKG%>zRMfa~DOj?Hk)zT} zjjb_$wxwEh>r~m|W*Q{AqhM)gQnP!9r*3;wkG}|ucs#=;M{LrH3 z?0LTWPo~b5kYWD!JQ3IlCY^xm`tLn&(&`WPjI|ra;^By zOVpE`v7?d-1~#U!rT2^UmefqP)IGxx%AHQLlT@ay_^1FZm((?oQp@aRn)#51h-d>< zgl^*d$LG#lE^S)>N$&Vc6du2*iEZ|E%N+P7y?HBHdD5#mb_Y%41i({vO1|V-bpoy$ zXCqlRY#$ysS}tT~DGH^Jj+)4p$jbG&S4yEIRK$#>QbzIbBY8&IG|4cv6ImXRwwp7~ z@sovB^>M;_Y1%CelcI%@bXo@Q5=cr?FEPR+86PIepF-Huixz>54)GU(G zK9#nRa@1;`2w_56_mePf-CP89dHjQ0%y96R|8QoYTQlqO>?%L2%LrMj6?=QiUBKPW zO^xEsbqxV{UGalA=d?cp3H0aGaFKSLpPsbDa!bg>M<%5O_tvAa!(xu+%;<~S zM9|hpUdSx-36kEX^OZB(JsJFBxY~tys!9ve`>_RzX^o%0#ns!UKDeY8z9_Z3_q< z{q`*18G72Xd$Vr@8e?jK`B4Uoh13#jU#GwbURNX- zY$HJw$q$5Nt}caUpxi5ON7l{luTXgzwf%U|SXBhJ{Z9)VEe+;GibFA3PbGo{BqnD>y3h~a$e+?b>Y@) zX7kZVllu&J$ZJY*j`6#nf`cdCmh>j?C=PEH)U_O4OZDb?t9Y2fkm0h39vSm(3HfcA zIxmcN%keqB`pb!V&Tad04cko$=`%s50-@eRqJT&vd(<&A*uo|lVHZAEbogxX)sywm z9!cYrE_*ZsNfW~)Vux;|Nf{lU(MzTw$rCNQ6lE*y{cWC_fW55T2rF|dAE`|@U>S>O|VD|?MuE`!zhmiTc=eb|% z)G~KHO2U$Ngf^HSc^!lr+Kt%11{vtio-bY^>UDR+iDVlHXmjyQ97>|WQa?;4pZ)Ra zNGB9xIXG~YwPA&c? zG%^9Q1PR$7rRCY#J_gX%r74>v z%O*Eh7Z|g=`m@aL9g$-S&r4n!N zur|4VT>kt#wFV?;iJX#q_pK$EId7ubY6vjjKBju|0%<%uF_rpqjI}(av;S4MTivmJ zSF_}>`)fYFV^ae+zS|Ms#Dh&XE_sW=58#BPjW8Lu!sL$}+ zGSnsc4~yqbBBKujY7;WBmDLij=+nA~yMsm=R3H@=H!g1@eIIc(cJIflD=D%^(T76{ zX~>z`V^Y88UW)wZ^VM!^DWO_lh~(o+LbOs+b^DOr$KogyE}>~d_c%eUIv2+U0wm3A zKOgKnR}%?o0^K9xPl5qp3mM;|-?TJ%+TNv5WDuU%)rsX07L$OiABvm25>*`PoRg*H z8c1=)#9wvACNd25(Mde-X_wNDo6LhzqkI+ARBT*K@N+amxplwDr9N{i?B|Cw{Y&A8(-vUi@V zZzkKHaz`f5wIqlCOSzYGCQN<8Z^{GS&09=gQj_T$h`_K7CvV2w1H#D9gmA8sO{4Vw z2}*nCRK_nbT)2=6U`*#y@ic8eDJqpFGstCT)d4 zbw6>q5TlbBPURvb3b%a%t)$c*iwB;l>$pK4PNyb$NMgLAbuL51#Kub;!XsGZV_rWO zO<6N7tRh3!;3(g*>5OhX0JA#m_wupW5H&476;?5b!WA5dOp^}Q_pf~*dS z!!5y7NMy0%zQ|DN%d2mH89gb;E~}cDNj3!tf_7-&A}h6A{%ILx!CMqeRC1U7F36#A|>{XEWTbdo&Nj+&B@d4 z4yZz9>yaq&r20a3F(5wl!S#LwKWL9%R|ajC>DlI6nVch*&JLZ5%9W;&`;WHHdNU?D zvi5_@`b{fM8QkY2Gpa}EcKI0rF6^gcay3P99uVsRd;!(BB*~PB-|Sw&%MD&##a&y$ zop$s}sWKr06)M_~gi2>W$#Wm?p^xOlTH_}ZC!4UY#A*5|uUdzUhup5LVgbIYA16yN z)f7#t6-G+sPD0NNmy#T&oCXSgROhbEQ2!sRa%4WYW0wZRUKyQ@KO8T8xCWHvL@c-=EBXBL;~66_t;UDncUa&! z>QkxVPUCd$=JAt+cMsQDFRXQl)@r=lxpeoBZ(a$Kf@i54j>BvnWs*46!}uUY2_Hl( zOG07MT_9#f%;sq}zra=BYGv{78V^)igO(%XmB8Tkz4SbwT*)1m(q~o`iZ2;aAShX3 z;I03ND7|lAAwQF?I(&FrSXUl>TNL#ei~TB3xVcDYj|7EemmVc(eH|WWbb`}_77w>O zG{yC1C)p)H;g&cPOR}F1?Z?HfE!^2X_l+M( zXaXTh^AwnqI@T3~B;6caB{7p|*5Dv>rt#~-Gn(- z)ZbcmTT5rMcAJL_Poz4ICMwC}u%o+`BmOy}MCtP1$@bGS{5C|G&CRSw92)TD1DxpP z=ey%EsZ3~B(NAk_%9@(i@%wjm90Y_=qpvhrc_Wr$wK={^P18UYGa2|2-uA1tA2r$T z$*r_=-kalRMR(k&EW{)hpZGLZt@Fyq9fQe315!Vrmjzr;j{$2Wm{lw(eEwvgO+}o) zWta}IkG@xYTs@4~OTr$pM0F9k?{H00WnguwooDNb>Y>v}b>l;2;m5*}whwn`I($`O z_ckt1I6I>rk{*UV5{qu=+gHr&V$nSz>1#6p9VxHwq|7F~7&%Ct%=WpgsvP%KtpinLmhM%`CcS6-_2KiKTl) z9k`4zk^DffLl$RYM}NRZMHJH!s3;H9ZgPSeQ`%^+CRj^{;OtKm7k+ z{ui44f01BlEGja$@RE9JAv+tSKON~3ia|+i`#*Q||9oGO-#d^zA(r2tw>KYL0X!mH z=H5f>!ZCT~+A?I3_x0bO?hn}7)g5=>!^-BBG1-ef);i5#Cjl)a^Znoc_J98vN*Rhm zQn&(y^UXu5J5mW4I^K$U&)dEeo5cFd8z_G^ z9OV5+{j)~&eA*FD(=K~GYubH-N9^DJffr2t7GYCx#-K!*i;;_Uw)bvTOKksgef}`v z8ak$0;s$1Q*Ms?dNY~kpOAiLsNGfAf#j1|-Uv?jQo8J8a84e4+o~NpVt%S%K+k9c3 z7gP=Lm3>vIO!XHsedzvx4C^lg9&Xd>kY}fotes2tmtTG2FONGA0$*&OSDiG+`9=GUMyrou~9JsYL`}14|WDV==r!*FZ_p!?!%Z+ROg|Zg1 zOuvNWhmG34dp!b9*COj8k5=>L!|M`4?ycuh@wnGYyvhHv&2%iBOOwPf<{54Gjx)P! zByJTnT;)pTUqu`8LtFIiXr?WkOo2_td8w0*B*b)(TIb^meEt!5V|gmHwd3>Gg<#kt zTJlaSy=CmAf7weZQegjxNgVszo$yXUYR#$*U7Nq{P7nQ=iXO>Cz~9ciiZqdFS}!|B z?Jso9k3lZLsUV3|u>UIEf9WB0LtBi_m;cff|4+`-B}rt`Q&QRa+X1)z(H;h#oPvMb zAt!QyAJ}^xf8pvE1~@8-`lW}-r8q(pW1v#S0$`L5#l)cb004DSAq6!B4uWr90KkC;C>MyT7&Hio&yXQif`q7ukPtZ&F#s0I((cnW zoo-LYSx$Q6sCeUq$Ex#V7dC+}v<&D#dJ$wA;&M(AK>*>bN7yd_Ppx-6zq2=%t29sV zd-DxwPyLzx#=k+&=bQNf|BrvG-@JdoSMe*|xBokTe4o^}@RxX@{^)o6*X{@YmHErh zE`8_jfPeWd|9$)}|K_);50IbvXVWMC^W3KXjb2rkNDKZe|Fi#yH;^~!!_D*VuK%Rp ztQYtX(zo!;Ozj@L9i~rE8CzEXXS?Y=bk4>#;CMfMoXXj{9V9z!^uN2| zY}xwPov1|(8s2fBD5Z;XFu)*V$*898Npc9##%QD2lOc7a_$kGl@Ol<6Gpz1M!~DM8 zq5p%~4cVoqoiHoNgnS|WBt zy-S&g)aAEMg}zMKGDc&F)2avF-gs5D(fD=ZUtNH%~LXEZV-(aUt zP)z@;_jz~I-}bBR|2D00{168JTMYiIYj!8;L)8BfgMY~ekIIB)xrm@|DbYE92`3>P zFK4uCeohTTg3++uIi?iw!OwT{jQl_{%IXOfM^15U8qTM!K`xxbMF;dIn3EGp8iL~P zAeOx}VUjN;r~i^*|KgQ5W?NNS=gF$N7c%f8g=6(8Ohq-(f*I;z4T)T1&(6R%%g&WB zJ;O`FY!Cu{c5O0y3br7xIHQF8ELz~c5*P<@AbPLbn?n*INxrg`-_AxfYpxJkG9H{C<#IirV5vg5h3d&Rh|%iY8mfp zku)UYf1wYPKXl>p1N;rrE8#{1H(b#@a=*;jV13N(Bi=0P_8SW+iW)_Q{)GzkY1SKJ z)DcrM4{zgj!%Dg%ovjLPkbeG?eX#PctL*+elWdZXtmI{SOgc_kWb8n+V+;)1}Qo)0pI9j2Ksl-*|vR>3hcfVc|!ro5N#c3rw*MD<>mS8$-BO zg)DX)IJww+dQ0nUPinbY+|WCU$HTo5MoN7SRUa| zV`DM%AXfD^BFQq761E>Cn|{{|>lTwn3v(sFk_4On7QPGk8L;Z0{A|HbA}W9mtsc`DYXhjcQeGLH&xVZ^ zqOd_(k^e~IbQ8%Q6AQ~1=SVt=t}Ez{3AEGNQNE%brAypJ%kOhp=1KcBHclw3PS){D zwBT3@W(!Uj7dV#o(@Z*2M<^iN&urXWpvF*}kvqX9)uXUnk}EWQ77zVZB8x?}a{20d zx7~9Q0nejRTb}gX=PG@zofANbz2Pr`tsU1Y2s{B91%z&kTQtiU->w`l$fxx}4B_GB zZWT)vPAo~4o&@cei~j8}Y0R!$V}ZwR&&PYDy)>}lm(!{&Kp>=Ii$UvF8mGHDNLE^X zfI9@CJr{M-0DY;!t+52ZbsNd;ve$?#JFQk> z5o8?=4c6oWCn%y0j;AaVAWOl_5-&QbI{4Q-e}D#(hC)F!)qfIK1F@c1iO@Q-XIuC> z@9UdE-{cRi3))6akL9g}ME4dew0RV|z_%FLzI1Y*2*!WtG}La5N*mL(2$rs$+B?Rp z@qT<5-~VlJ{}0Xo7fSwjf>sUyeE;kg0001UN%GY6jp2u^2f`#cIKnW3D(J4MJ`?}| zs_I5SR()Hu_@6~UW)uJbNbJyfZ{uXlr0E6ogP%Vr^Mw*w1QyoGsBtpU_;FjRaf6y5 z0l)j;prcIP8IF)F#j>*co|jRBnTepD&q9g`z(BwFx>4{mBx^ePI~cnAGz_?K-%*(% z*Hl~MZ7jiE?Hv%^zENoz4F& zRoR4hZE#sVvYJxwsK)b*^usK5F402unK(JKEoWxm0(z3uRoG2N`VJ3c9X5dC zsM1AFT2BEcY$e42U{RmBx8%rQ?XCV)9LKZQ6pUZFK$SNl-`aDRuvH zh!Jj@F(s1O(r-}bm9vOi5Xu2Z;c40)ZF?7L1nLnJ~vlgQTk@6+J&R%tTQb? zS>%w<);DH4Z=jLjKvcnuOL?&jSxVV+P}A^nK`%}k`!DhiF!$xh1`ens*sN$_me?WQg(QT0lI6v7y;2q z0W+JVi97a~cB>Ckc7DF7zB71QDPnnfk)Xm<8Spx>AdwEC5g)Y(D`b+sx;zYjnzV2A zq}g$fmL>X8Q6!c_!_PPtb~TzI-mCwZ_3n*Nf25>7xvm-8>}hxF)@OUM>Ljcj;uz4K zH>OLhO1Zfi^QL60^w!{-R&l_`X$q*opc$Nc-)%9^k}}!)?Fd~3eQyP~V)vMA!?ohv z%Ux{sAV={IFi2$OVYlF6O$wB@Ri>cbpO9!7Z>{+3?B#yk|t5cV1DwEf3Y#IVeN0 z$ef*G=lm1<_c56P9G$`Lu^&T+I?)|h!nL(5EGb&(R|u1hEIrcSWoO2sj7rx~LGd7i z?msVcqeH(=yjadb!5o%p=OwBIYx0V}DIQo#2ilNIdy~haec(Ea7S8l@9HVm{Ka#Zb zPS5>(8nauEIk^rm_8S}%Yc64D8M{{u3-P3IgZ|n^Kp)PH%b%&}Y<9Q^|4v1`{8{+h z(H?6qr)r_>Y-t%}H-9p#za2Onf%&j567kKWxPC%!>!DfNR!wG>0LMWw#H$ipF3N0g@A115TunlpHBro#qK2 zfg$Gg3tfbAMn|)-WVEoLJN_dW3A9^FUg;{aRsET9(&`}FaUzQh<^lHmqA}EEs7z=d zQku=FcX21ycyrN2<##k+fM8%B&eUzZz&B;rz#FDlMn0N^Vr~sJL0Y;LcRgpXaE)!8 zB&U5|w~pHmHT^eOvO58T00wvp6U2%Rbv*$9VBIMvN$0S48-eWx{(B0ZO*V*T8sfZC zI1JmRYxtdKICfFs9|Zycq5p6L3HQs*|EFdk8h>{u3*~(`1t1=4TEp7c)t2B^WLieABw0WYY+)*&Kqht+ zMncG$rG@yx1#`u5qPG_A`^$}W?I#M&{%rMNCf^v&T>v!+QvK1pi^L<+*mR~1<*8h` zq;aR(9BSC%#?uDz*_R zgs3{Rx$peUl1r%eDhdHMZa74A(n|=3a9HEvt#_HpkaU_2B*9BS2Yo&-rSx03S2A^e z?=~_xiw7Wc^Y1eS=$=G~a0%DK5glwKX8TQdZZ5NS4^_4ZkOym(+6b!YzHwHqhC?#B2^@L=CL^6>Q(O zN<#ACXq-2ZQ^8eP?U5g+NYv%yeAYNp@AacGs|GZ|fjto;W8@_}%9Do>2pwB_wP+{r zyKzBaT4|=TP_AUFddl76Bt}_>Vemx>0!OcIAqVw7)WFrG%8R3H;!X(3r$PKng~F*g zc&aJF24Cx{0Okdu;>e#>lLos6>s8>%RvYE!2~edR+|GybgHVYf{*>89A>kfHoT_Hc zIPfH0%o~7oZ^4Ib{TB7jvJ(Yd>>U&~xjgA(H_UzmJ0EGEY%I-%t9G(&_2G|NcaYhH$$cSsE1B7kNOxo zCL(o1#b^LKNmFCZ$@;1>i>h2KKV{bnEX4|kUYlj2xbkQuK$}5K+=+ttSF&U8Zi=)e zg@fMyqCOdb86>c?cO$R1YhZq@!1m1F?CRmC z1(MFW#oQSvfMEx=Pb@3hl}fB1W5Lw>gPP3+b?o}ci>{}6vxn~4MH-N!fB`>nhiHeVdZo;Qx`uFzM+6tQT~WJ#^#!E8PlZbr{WF{p2l z+Jz!QldTYXL8Cp*xkF!J_!o7<`Y4v^K>)JB7h0hW3_}^#?CYiinc^VU{YEkWyc{eDG7<1{YE__u3iU{NoaS$(47UEogfe1Ka{nzbTh~>5<2P z$`Qipp91w)akfdfhp@&!to($F)BY5>h;r49HPP7l_E!Aj>j+y|5<({`p?;?dowP<| zNA-{hOJ{dJg$~R3QcTVRoNw(z?NeL?l*pCW)Xi6N7Hp;d#GwJM!=2B<&7OHor`RQ= z<7x=fc=BCHn#=CRJm8c*GYcX~w%9z*7LJ}uhosE%1w-k(aqX17*_Xh~jH2I}aN=t% z_)T>l{68SwDGTN?HQ|D93QzKL z(lb5`G>@{DF`2e6In1YI*jL3z{t)$pjXU{QVNs&iIXeAn{c4s@@+`S+d~s=@DV1mC ztfxs12|}Lo){^y$=Z2evv)hi5(g^*?TlQ8xM#d|I({p?E1aKjF$OU;pNrP+V)p4Fr+Zn*daY>Aq>1N+!5au) zlDo*ux0p+HfC#5o;X)7ed3;PP)-<4CJE_b*Oudot(0C_^@gt! z?Mh_6eJkh_G0uuU7@_vVUD!Wn+o6rvs?&M!+o*LP^9$uKRvzI)C9m-#qf-T=paIO4D{Ca5AbauZ&QfDO z94QT^rw2fbI*;!zy_Aa;0(6MjP(Kz15%-&RDJLQ9cl1pF!Mjr~pDJ2_MtGmIc~v&a z+UEV2mywUY(@4~uBOb)37_&I>WCd8q=^1?&67fbz>eS}uNuYS7>MUL$X1*<|f4x*m++Y^_`sDgdUF+NCC<@Gb;eEXvm__w-XS zO#FvVLN*WwXBpQb`{14=P_@K%6$b}AiMUX?qSB9jyXaCL#Kxjynq4U&! z9PrWF^F6uUg4luXQBg%V8zcj`C)Ha1OG@^mwRxScjYFQK4A-ox&{kU`NY2|mL{5aQ zg%F33R_jP({oFnoMz=7jvm(2ZlY%c$NX%BXnEgO0^I1F+{ve5H!Vv$_(tH0;#jtpO zt6f5NZhjqKI}8tWJK@aW)2;kd&|VQk%GrX(no#N+a%>;@H{;rL^ty8)N4e`@pS|XL zYVFe~MF2MiJZKl92WGwzj5p8x0(8a1uNqnW2O#$G~G$c+8I47B;l1BvxFT z(qnxKKNMfK&2Jb!OfGhqncJdWEa~0Gc)<|B+DVk!d2Rk6^>`7Tp zQBj`94Qeb)T$LAk8{p7d*JzVug+yzoaR`KVUr7-YK(q-Gx-`-qUFfyIfAMSsLBG#Z zcPycJL2^Lv;jIENn$1reC=2Ud9iIp@ynA(u9|Y+%^0Q&lXUUWw*5!0II<|$yT*#3- z4WwiEG+a$8+11rO+6N63yyNo5#Z@}-htHl@#R~`z6?QToD^vc>mis=z!5uJ+YE8_5 znvpek8H$gV%>#6Y2z^BeNxyaI&x0`B_ninGw~uwdV@}9j=BpO+k5*{(+v+WD^p>PS zT|&H5EqH>d@XCNpB~{mg#5U^a>e!YW`N~L4Kw0a~0w@+uNk!s62VOV#iF9&@pVH|G zEcFvA@DB~$zM?@t2>YIpEVz(A2Kw%(_Q_eP6_1M0LLJWD#>#{O)(J;S#ZY$XcdUp0 zLT8khMU!kv%JsW*p7F>iwhpN=d2bfA@(SM(=;83`I-w|1vi5zDV;d(^0Y7GkDEI3X z)G5j(c`P2)EeB9g6AOt1pwMJ@%62I}TKfxlU`T6Y+`oNGUPj|RdQ)3F7V9b*Va~$i zZfg3op{XZLn9XSNLe~q}+!oRp9^M~=_)7<^PQ?P!XLpOmI);qmxGy4j%~~XklQL8u43k`dglkEcUrgesjakzwta-|> zIi9^wtX;@ah~z7j(M6<6yzNFQR8_9OH_@NL4E2Z7A;b`MpZ*>Zj~6O~zR-I=-jvF) zB9b_XPqr6Bz*?=R2n4$ftiv%HkB}*At)Kisw1M-VfF;mV?A<(o$12_OyP~s0;m|cye2RX9NL>c;Fp8j!yhUWy1yus9PU# znPx~oZ+su8x%By9NKFCknN-jiOS4y^vv#2{(Ca%P7un<`v}-b;rwl zIm5gX%rUm209)$qED#iq%^ysWix96H_#_!vU_p(~w?P}gjWf!O>xKO;B)dlpk$e9NpWa{w4(1nOmaH1CrRQ1Ikj#P&4ceT#2oZ|{0DXw zg#A1>M~m}>Z(NiZVELk|#mrY+>@>H7;jK5-OIpn)(cMLU=43I=Pz6_JzD7DL_ELKl z;aFPc?V~0QoZz_@V}BvwJ4)3e@w<=U@J?;4zeG5Hhk@%{BupRroeo*PCAGl#50YoAe=npY`}Mu`>)`FY*R&`;OEs_+Vv*pada0xc#`p zW-O+{D?ong5?6lmnt{#$2;JqoC8wQG$i4~`jeYJ$m9?GHP_CRh9SL*k} zL9do=2fi)@<{9y0IYZ=gJ@2g%f|{ng2DgzIdd3ox+LztO=kQMShFD8QS|B~!~%7riH&Ya5SPPAh3Qd7VWH-X z_4}d^sVpYZ;&)+_n8|m<=9h!46h3YVo8AWd%2x*SjMkT709rA{hF%O6i>($kSwc$O zQ|M!p3mOUy&c2du(0R)aJkAk?SkzfSDrvzE%q|Z+wQ5w=zU>6Wm4PDui+SG2$NJtslq*%(d*bx z-tXX=9ByRtIY{7H4d3~v((eWJhkpCZMP#@{3B421SxMC|4lzez-)V!{pL6zZ1ORuS zf?B6TbrXwEdA3o%shWZgZbZ_i=sX9iuVJM@P$}17K4Z%qw?M{1A=yTx({tb#IPr{ znW-QJN6@9bPNwq`jI_u4YW~-s(({-3aK$jp9CKh9?eA!u{&r0omtf#7f) zj77YJp@Ne<3gINJUv5wGoq$6{o)-3fwH_C{|c{0YLYPXl_$?0Dur5`($p2 zTI~+?0)Ya=PqLAjzS*>H6{pBQD@!6mS75RVMysDQ!JFQH=~7;^NqWNFxIVmtam)pa z!#`z>BJa7-%Z7I_@mw1D10tl;{<<5LVjP7OiCkQg7^pV0v1Y5}zqu5#pb%D;#c#3P%5(U5-udN;74|Hx zDk|=E#xR&0zzT@_X0BcxmCaIERPVKnq?Ea0dNFb=uC&)*d>I@_=;jF(p6H0E(3)TR zm7s3(*5<4V5$fF>1hJlu(gL%YecUJ`tY#?>(??u3j(snvfQ;Qenc6u1OS7J!_3T6i!nd6+@S7^w&lb(!y z4g<-M9jN1Wg)M-x)`r78j3+x2Q-CP&azn0{qU>JlSXat! zse2=ZJrXnZ5JH>E-ZGIN=#V@ntxxj?OH&QcvWUGTUDSg4oi$E!1LIG8cZVfv=HKO~ zbKYnH%v%eLGT`nBsH4T{CX85-+u;wg9j3HtCp}p)U#rDT`l73nBAh}Fs_>(!3so5x zC;JQ~hDSzkc3qii2oNE1jTN;?u2^lg-W|6J`u(!Q?mjsOgr0X9vs$X5;$t^SN4fKe z8y<^y$^K!HLb+8+oe~BhIsQM|rgTC2@A9{I^LqebxAs$5+5W0)TjbZKy%=or5)hje zCx612+x?Uk=zw6-{bhiZ420lsTJfa@lN6zb=}1cVJ{rscY+UYsZW+)5xv9M;)lS&MJhwbt;ycXpARHK$wX0TT~Cg$ z-<24f<`3q9WP_K9AXF1IEs<*Zr}Ul&`&^=qLLt6_Gf;zkX0YU(`kpGz$he0Ys-lck z4(TH?PJJ#T)HYl%=B^bS-%ddxy3TwdT)iPs3!Uq58&+J}naZlXj87(~I%Xg?KlLeK zztsl-0462_PYq=8Si)3LA|p8Qq~aM9GT{jD5PzVQHxuKuGE}xcsx23DD>eYi?qM)w zN=5Imf^pxXJ4k%Iz5vcl*R>_&-3J8D2M*gSwBwoL+K^#z$=TS!M5<f7)WovVinHqPG0k)Ug3aF@ z)0nsbN)$t_$~Ugvb*dT>3+}_^Us#pTz)| zPs!+m?)^gS`mhX1%+yYE+HyHCrswM}KD1L#QAgMH?W+Tlfg<4P8(Ma>cj%TWMt48~|KmerOo#e;ql-m&ZF38@~@ZZ)p$MHpza?;KCu5 zmJ3(_?05M;9DDGi~x2uTSUDHo6=>mNs90`n$= zk>I0E>L3nMsea*VHR;f*I}GXDGVW2=1PK=PEs{MifkfA^w*8cBc7HVTY6{uD-D`Z` zTDs0qdk*ebt+HpC$>LY(61|}bmw3mhEPkIc72i&9sK{oas}EViOSVl@0k6ZV5?kRJ z!D+wVruOXp9<1e=BM7D=52PnGDkF`{w#m=JFSD%l>_p&momIi*7FzcwsN|$pZxfV4^~M;_DH4J+&b&B&qtZ;5p9stYU0Yt3(W^$}8I5Jwc678d`|0kdbjr)Yj<$_CZ& z0;re4(UptUMxSEDt%H)GTaB>UdzqvRFy)NE>>?bemt^+nAn#&ts<*8b5{5HcmuZU8@GW8C6%6VWjfG9FB)aqCz-2=-=%*=wq&$m8~i) z(#E>uzQ4(enPUm%b1D)2FxUK?x#t3q1hI&kG>-Ou=`c^#oCq2l?MR9_8e(FZ=Jk#{ zu66b!Ahpeo1>V8I$^HIwFC-&wCuEz4uPZr-`BDo4-@4&C*J+Z&o^Eqm;83*&pL0kw z5ax}?IyJGKd)_|QwTUy~=*nkK_DE8jyVZFXNWCDe*%BhXvWPS}e^kcco?tI0*_!Nj zqi6mw(JQ&29?l-mFr4I_UQ{l*UIT=z^4QeLT#NtPjuLp=&uHG1-p|Ilh#0PQ3$H4; zt~XhGrXL!YBpY3Y6}C64k&s5!kLBQkIixP7Y|G-NF#N^i+ZM_k&=Rb6EiEdUdgD%v zNVP)A8`Wu_NA|PTGFy5Dd6$N)VnyM);f{v}*ZRQf)KvM>Pdg{(x@&KjpA~JbC1ygu zh9e54Q;~6Bdcv2GW?a~N^|wVGpwh-JvnH@@5&X%gfVMv{ZQXoS+rx7eaqB&m0hj5| zSaMY_AZ$U7N{Jb+25c{~!b53{wx{wnu8%rX*Hp(qp7p&g!B(3Dn5V4pX)~#cNbn zJ5T@J2R<+in$!#+A_JUrl`M0#w+^6)-wsJyv4LxtPtIC{I;*+o3lcDH?DuD=CgOI{8W5#CK{@v9*fegB!G&Ea(3hwjN>KxwS0an{S zuSzt8x(oEy0vBu)hD2e&lxZQ^9!%T&>{|=hzM%uto8)a#9krroh6cAH3S7ow!yQZm z8PWv2y$%t;fKv6bbIYLLAw-n*3g<945m0cqGzTC;@nrGtNTuhHM$0f4JA%5Q@TYQ7 zMggyhX7SgX93%p7ISL|7{XF%VJOfYLbbXS#`I*Imtz$_v*%moGm@4(aG(jKkN*`~5 z`{A(BGoQ&GguGVYPI^M_Ard8cS=Y2M2wz{kzDX+P-cWafymHr5B+A`EY6nrHPOljP zk*h=6%}*GrpM$9uGlK$Ul&!&gChq*}?_J4Pe-jgfxy%3+4aMS5MDh{AE_fvv;VGRA zLW(<4wbq>S>&NI~Rn93JfoX!0lX=~?Tq59Y(ilH&nDnv3D03eoXKClipC+Jgae_A= zQlFXP=J0GrVY0Mx32Yv3@mEpg_+x~y%5Q19LT~(C(hY=8)Y^Nh=+Em`fDkX>ZcNpO zYbt^{kT)8#mr|62OwS8^9NE6smSC2T6}h|gkN3^2nI7q`1Kft0lkPC4>R@2px^Y2_ zq;>6JRcy{h(1T_kHAaSxHN*FByt&Zi`eug_e8I}zF)Iv^amEC=)j-iaf70yl0NoFb z);VPFcB_<5AzFPp7LV*_ojjy4fYSOjU_SJTPD4B>wVqnuahqL6fy02+`c1#fHyO3R z)lOK4P($?2CM5$w-dfz^v%v=>Q5CeN^G^dDV?K`ohdJ5l`D2A4PsZr!Q|8PFK zMowmDI`!n6?xWJDz6#5;M*D3UKT|{|OAq_$HIkJ24w=4hVp8M>xp#+lA_q|0Zq^Jt z2e3oh+7wrlorLLS7n#l|s~dVtZMs`U^Z_%|{VCWW{g`B7*J;XP$SMnU8_WgZZ>Mj0 zTFg74i=@rwsFAk{ayDeOA<9pCw{P&Ll5l*(bHsgXbXS)Y#T~=DaH3}_CDKtF1_|SS zg*w#x1j^9Yk_6g)1VB76n*SL1_EppRnLYS=j$gn{0Z=kI`kyn#k_PPo97LBqV`_^$ zdiv)4;nm_=BZ06M`m%n-ly({N*jT69pE9X{Z%oxQF=G4<+&|Vzkr;i*j1IqA?t?oLV%W@sw4^3cyxhM`Yj6IIX@xLW*z4 zy)o+NCle`0aE@HYog}v6N6uyOEZLC^%a3-ud4WkB@EUv%(lAxUU#_Cd1d=S_tdgH0 zm(lbzQlr=Lm5CZt&l_o&OE(F{K0Kl}-$Dd#`F*T&4=RIBR=g6OaI;*%1%=vLC>Q$b zeC5QLP-Cl7`ZovcB!51b(uUeN0%1F9k$Wxetxu`J^_TXcWl z>*LvSCbySyQjjgugFNFFpGcXt25HIXFr}iX5p8fg9Y33uWW)_5kK4YLG>wj>(!LrS z_spxU4iOBts8=krhg{Hd61++4#9m+CkLzAuCv+!fwog`{=Mz%xMSv1+`H5P-rOH?! z8gO3+dseAn^o%y?#T`2Su6SR?qKn&uyFN##vW)scM`*bp@HEx%zyBarFCV+=kLzZ* zh@9e%k8^KO)VF1jCm^7hNuoP&FuR$t3g2o&$DdQwnzy>n38vV8cfi9~@I%dl-!WR& z7BCwFdhAPoysW?N(l0CrdhPvI55$TM1mv#^EKh<5!#s7h{bFS-1;R_(T{9q;zVT2& z0{K?`jPE@$A7%P8pNSd~Xo;HVpROzKK>M97I|;`~0$Z-{of3C|I56$V;|p?Mzdo*B zlc<}l4_1Z<2e)AWsYe@D!%EA&p--7%rcPhSXrDK58jGPkQ#+wK@dVB>y!OdHGfp`h zg!egavf(Z_Cq1!AS zuxHJe&r?Ie$&Y<;i@v-A6UoLEjD0accjluY5xlZCKDdZ8Oc`NXkJ=txTtq<_^MO+K zd{>ix=B`@bpnx4%DRN*K=PQ!5cRDHpzbvrkBo^J>+(s+=jL7hld)ZtYm6Wn}svK=% zm^)*Qah}G??c9F=rEHrlhA@wFcWpD6ge$qyL+V)!b)?qibYgSGY{{C%tCji+jlC*k*9wke6TZXcU_}SMjN;-g74%vPIT9 zI+{kjVhp_+t`X!DXcaLZ?BEUrb}26v;j|O4B0Ej)eEmmzBMZCd*W6w3Ae3&A{K_ky5F4;BvZlB)Os&*Cj;cA^V{M$w9`y&Qrz1ZU%@B9TDpoIq(h)=rR73 ziTi36r^Ks8<`7y1Z;;h1o*;_l)Ki5|F77TSrT^KUSTNH)b$*kGwggH)UPmPfVkkG)w$R*$ctOZN zA8ffU2)?||A!aQ98oEG<@{eFD3b0k>k?0`F@lc}32 zyOnwjdWnZNq zww2VHAgARGivX~{&<^T({FBLzJ55=iAv^kJSY_UI2KACpjRQJHjIidJm ze2>Q~RB+y&O~gzrXIk--XvHP&J}9_4?k)NA?LJOFHq3qPeHr3>+VI)N*nrD&w>x}3 zH<_PH0Mmt1P&08tGUoaW(!_Thu)9u2srV;A7Ib82KPIy2dU=EZ<$uLpA);>9{XQC& zC|FxMP#)%U*2Bk8^$r_hwUh!PPpY~Mjjq}Gla0!yCgJLVg^tr7eUw!X-R&MTskn5M z4)phd5aE)@Z~LYRd4+_i3uNmuT4UHecGas}n6S3&2dsK6DRWy`_;)P9DPdA7x@>VD zfZA>lIw<>2`D2P=yQI-=A^T|(U7Fd>^Cko1I5{2;Ksz*7Az`D70@u!XgU8#o$GD3X zjrO#4F>?VQQtdDyRPsV);;1Tr*vY4UqLh*)cog=hGkT*@6&c&Edgf@aN$2g5SE*U9 zJff^`n$X+SbfEc^RJpRBgf!v@k4K_^@a(QaiKuGEW{=PW(qT!3L()X6n2XOtRw;Mt zWPELf%>U`6JG8{6Q6zQ+SqrDz2LbX5|E)3}BU8ygZvl>;~f=qi;5FHo3D>7&>*min?P=5@N5D{hcC7p_(Fx9Em4 z!LJAdV?2tq_KRf5;ODB}Zsi)o{M9Q}w;tbEMlReP0|Kl5b?mf0My=qoE1MddDIPztyoXWL#h=A{e)#L!RGAc%*lRNO5x}Q0G59!%M9sLWLxn=-=(Sf?J#)w(UPPOvIu8J$t(On26 zcp-rIYvQd}j9Vo^^ zASGLE1rt7fReFew5m`8qZ!5jdc)#21*}5_fSZ}^Ng@KGrm$y=xq~}Me=0t*ca%zeh zJUde#$I;i|_7x9+Zt$>PBo(c#NGP?AU!woZEiz*wZwY+22zmzi0C$lYOs>bgcq=_` zFnfJm9_7S%|0YO#U^GN*ueM8xa!ZuRz6tJ7Z|KSFY@Rbb?cx?cR?;uia(|_C87Q%S zPu@l+j!*}GeHXu4@#CH4li7q3Ho`mxjf)1JCIwd`&OZ>YET|d^bj?;*@ribMDUM}q zrkKf_#a?TfwLip_Jg++JV}IYpNiB?6im)H9MFzgt5qnKF4+!g53}SW&nels({3@P~ z*4sm9_66!BlI!!Te`gL6--)g=Jm`FczxC(etxx^}*NZM(c}6lq7FABj*k%tkw1wh! z)&fSH`S#0%C7fFP!ku%8Na?`Dz{!8Ao&e=}_LrAw14v9fA3)m;MdypJK?SYR8N;E( L>FYn!|G)h|IcVAw literal 0 HcmV?d00001 diff --git a/sources/academy/platform/expert_scraping_with_apify/managing_source_code.md b/sources/academy/platform/expert_scraping_with_apify/managing_source_code.md index 9687dc0fa6..51dbea531a 100644 --- a/sources/academy/platform/expert_scraping_with_apify/managing_source_code.md +++ b/sources/academy/platform/expert_scraping_with_apify/managing_source_code.md @@ -48,7 +48,7 @@ Then, go ahead and paste the link to your repository into the **Git URL** text f The final step is to check your **Build settings**. Under the Git URL field, you'll see two options: **Automatic builds** and **Manual builds**. Make sure **Automatic builds** is selected - this tells Apify to rebuild your Actor whenever you push to GitHub, with no extra configuration needed. -![Build settings with Automatic builds selected](./images/build-settings.png) +![Build settings with Automatic builds selected](./images/build-settings.webp) And you're done! 🎉 From bae9bc84285bd437046f63d46f227a2a251d5b0e Mon Sep 17 00:00:00 2001 From: Arto Gahr Date: Tue, 26 May 2026 16:25:16 +0200 Subject: [PATCH 12/12] docs: clarify Gmail and Drive integrations also work on Actors Both pages required a saved Actor task as a prerequisite, but the integration can be set up directly from an Actor's Integrations tab too. Co-Authored-By: Claude Opus 4.7 (1M context) --- sources/platform/integrations/data-storage/drive.md | 7 +++---- .../integrations/workflows-and-notifications/gmail.md | 5 ++--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/sources/platform/integrations/data-storage/drive.md b/sources/platform/integrations/data-storage/drive.md index 126103484a..700dd9a0ee 100644 --- a/sources/platform/integrations/data-storage/drive.md +++ b/sources/platform/integrations/data-storage/drive.md @@ -1,6 +1,6 @@ --- title: Google Drive integration -description: Automatically save Apify Actor run results to Google Drive. Set up the integration on your task to upload files to your Drive after each successful run. +description: Automatically save Apify Actor run results to Google Drive. Set up the integration on an Actor or saved task to upload files to your Drive after each successful run. sidebar_label: Google Drive sidebar_position: 3 slug: /integrations/drive @@ -8,7 +8,7 @@ slug: /integrations/drive import ThirdPartyDisclaimer from '@site/sources/_partials/_third-party-integration.mdx'; -Save Apify Actor run results directly to Google Drive. Set up the integration on your task to automatically upload files after each successful run. +Save Apify Actor run results directly to Google Drive. Set up the integration on an Actor or saved task to automatically upload files after each successful run. @@ -18,11 +18,10 @@ To use the Apify integration for Google Drive, you will need: - An [Apify account](https://console.apify.com/). - A Google account -- A saved Actor Task ## Set up Google Drive integration -1. Head over to **Integrations** tab in your saved task and click on the **Upload results to GDrive** integration. +1. Head over to the **Integrations** tab of your Actor or saved task and click on the **Upload results to GDrive** integration. ![Google Drive integration](../images/google/google-integrations-add.png) diff --git a/sources/platform/integrations/workflows-and-notifications/gmail.md b/sources/platform/integrations/workflows-and-notifications/gmail.md index cb2fd4814a..357643504d 100644 --- a/sources/platform/integrations/workflows-and-notifications/gmail.md +++ b/sources/platform/integrations/workflows-and-notifications/gmail.md @@ -8,7 +8,7 @@ slug: /integrations/gmail import ThirdPartyDisclaimer from '@site/sources/_partials/_third-party-integration.mdx'; -Send automated email notifications with Actor run results to any Gmail address. Set up the integration on your task to receive emails after each successful run. +Send automated email notifications with Actor run results to any Gmail address. Set up the integration on an Actor or saved task to receive emails after each successful run. @@ -18,11 +18,10 @@ To use the Apify integration for Gmail, you will need: - An [Apify account](https://console.apify.com/). - A Google account -- A saved Actor Task ## Set up Gmail integration -1. Head over to **Integrations** tab in your task and click on the **Send results email via Gmail** integration. +1. Head over to the **Integrations** tab of your Actor or saved task and click on the **Send results email via Gmail** integration. ![Google Drive integration](../images/google/google-integrations-add.png)