From c4fab86aee92e26a7fb47a4494fa4cfc2a8b9447 Mon Sep 17 00:00:00 2001 From: The Robur Team Date: Tue, 29 Oct 2024 11:07:07 +0000 Subject: [PATCH] Pushed by YOCaml 2 from bc0bbbc7065262b41e6a8c189bf8c0043a1e1109 --- articles/2024-02-03-python-str-repr.html | 14 +- .../2024-08-21-OpenVPN-and-MirageVPN.html | 16 +- articles/2024-10-29-ptt.html | 206 ++++++++++++++++++ articles/arguments.html | 14 +- articles/dnsvizor01.html | 14 +- articles/finances.html | 14 +- articles/gptar.html | 14 +- articles/lwt_pause.html | 14 +- articles/miragevpn-ncp.html | 18 +- articles/miragevpn-performance.html | 16 +- articles/miragevpn-server.html | 16 +- articles/miragevpn.html | 14 +- articles/qubes-miragevpn.html | 14 +- articles/speeding-ec-string.html | 14 +- articles/tar-release.html | 14 +- feed.xml | 16 +- images/smtp.jpg | Bin 0 -> 131410 bytes index.html | 94 +++++--- tags.html | 34 ++- 19 files changed, 411 insertions(+), 145 deletions(-) create mode 100644 articles/2024-10-29-ptt.html create mode 100644 images/smtp.jpg diff --git a/articles/2024-02-03-python-str-repr.html b/articles/2024-02-03-python-str-repr.html index a7cdb2e..daecbc6 100644 --- a/articles/2024-02-03-python-str-repr.html +++ b/articles/2024-02-03-python-str-repr.html @@ -5,13 +5,13 @@ - Robur's blogPython's `str.__repr__()` + Robur's blog - Python's `str.__repr__()` - - - - + + + +
@@ -20,11 +20,11 @@ The Robur cooperative blog.
-
Back to index +
Back to index

Python's `str.__repr__()`

-

Sometimes software is written using whatever built-ins you find in your programming language of choice. +

Sometimes software is written using whatever built-ins you find in your programming language of choice. This is usually great! However, it can happen that you depend on the precise semantics of those built-ins. This can be a problem if those semantics become important to your software and you need to port it to another programming language. diff --git a/articles/2024-08-21-OpenVPN-and-MirageVPN.html b/articles/2024-08-21-OpenVPN-and-MirageVPN.html index 0683731..b80adca 100644 --- a/articles/2024-08-21-OpenVPN-and-MirageVPN.html +++ b/articles/2024-08-21-OpenVPN-and-MirageVPN.html @@ -5,13 +5,13 @@ - Robur's blogMirageVPN and OpenVPN + Robur's blog - MirageVPN and OpenVPN - - - - + + + +

@@ -20,12 +20,12 @@ The Robur cooperative blog.
-
Back to index +
Back to index

MirageVPN and OpenVPN

-

At Robur we have been busy at work implementing our OpenVPN™-compatible MirageVPN software. -Recently we have implemented the server side. +

At Robur we have been busy at work implementing our OpenVPN™-compatible MirageVPN software. +Recently we have implemented the server side. In order to implement this side of the protocol I studied parts of the OpenVPN™ source code and performed experiments to understand what the implementation does at the protocol level. Studying the OpenVPN™ implementation has lead me to discover two security issues: CVE-2024-28882 and CVE-2024-5594. In this article I will talk about the relevant parts of the protocol, and describe the security issues in detail.

diff --git a/articles/2024-10-29-ptt.html b/articles/2024-10-29-ptt.html new file mode 100644 index 0000000..0c525a6 --- /dev/null +++ b/articles/2024-10-29-ptt.html @@ -0,0 +1,206 @@ + + + + + + + + Robur's blog - Postes, télégraphes et téléphones, next steps + + + + + + + + +
+

blog.robur.coop

+
+ The Robur cooperative blog. +
+
+
Back to index + +
+

Postes, télégraphes et téléphones, next steps

+

As you know from our article on Robur's +finances, we've just received +funding for our email project. This project +started when I was doing my internship in Cambridge and it's great to see that +it's been able to evolve over time and remain functional. This article will +introduce you to the latest changes to our PTT +project and how far we've got towards providing +an OCaml mailing list service.

+

A Git repository or a simple block device as a database?

+

One issue that came up quickly in our latest experiments with our SMTP stack was +the database of users with an email address. Since we had decided to ‘break +down’ the various stages of an email submission to offer simple unikernels, we +ended up having to deploy 4 unikernels to have a service that worked.

+
    +
  • a unikernel for authentication
  • +
  • a unikernel DKIM-signing the incoming email
  • +
  • one unikernel as primary DNS server
  • +
  • one unikernel sending the signed email to its real destination
  • +
+

And we're only talking here about the submission of an email, the reception +concerns another ‘pipe’.

+

The problem with such an architecture is that some unikernels need to have the +same data: the users. In this case, the first unikernel needs to know the user's +password in order to verify authentication. The final unikernel needs to know +the real destinations of the users.

+

Let's take the example of two users: foo@robur.coop and bar@robur.coop. The +first points to hannes@foo.org and the second to reynir@example.com.

+

If Hannes wants to send a message to bar@robur.coop under the identity of +foo@robur.coop, he will need to authenticate himself to our first unikernel. +This first unikernel must therefore:

+
    +
  1. check that the user foo exists
  2. +
  3. the hashed password used by Hannes is the same as the one in the database
  4. +
+

Next, the email will be signed by our second unikernel. It will then forward the +email to the last unikernel, which will do the actual translation of the +recipients and DNS resolution. In other words:

+
    +
  1. it will see that one (the only) recipient is bar@robur.coop
  2. +
  3. check that bar@robur.coop exists and obtain its real address
  4. +
  5. it will obtain reynir@example.com and perform DNS resolution on +example.com to find out the email server for this domain
  6. +
  7. finally send the email signed by foo@robur.coop to reynir@example.com!
  8. +
+

So the first and last unikernels need to have the same information about our +users. One for the passwords, the second for the real email addresses.

+

But as you know, we're talking about unikernels that exist independently of each +other. What's more, they can't share files and the possibility of them sharing +block-devices remains an open question (and a complex one where parallel access +may be involved). In short, the only way to ‘synchronise’ these unikernels in +relation to common data is with a Git repository.

+

Git has the advantage of being widely used for our unikernels +(primary-git, pasteur, unipi and +contruno). The advantage is that you can track changes, modify +files and notify the unikernel to update itself (using nsupdate, a simple ping +or an http request to the unikernel).

+

The problem is that this requires certain skills. Even if it's ‘simple’ to set +up a Git server and then deploy our unikernels, we can restructure our +architecture and simplify the deployment of an SMTP stack!

+

Elit and OneFFS

+

We have therefore decided to merge the email exchange service and email +submission into a unikernel so that this is the only user information requester.

+

So we decided to use OneFFS as the file system for our database, +which will be a plain JSON file. This is perhaps one of the advantages of +MirageOS, which is that you can decide exactly what you need to implement +specific objectives.

+

In this case, those with experience of Postfix, LDAP or MariaDB could confirm +that configuring an email service should be ‘simpler’ than implementing a +multitude of pipes between different applications and authentication methods.

+

The JSON file is therefore very simple and so is the creation of an OneFFS +image:

+
$ cat >database.json<<EOF
+> [ { "name": "din"
+>   , "password": "xxxxxx"
+>   , "mailboxes": [ "romain.calascibetta@gmail.com" ] } ]
+> EOF
+$ opam install oneffs
+$ oneffs create -i database.json -o database.img
+
+

All you have to do is register this image as a block with albatross and launch +our Elit unikernel with this block-device.

+
$ albatross-client create-block --data=database.img database 1024
+$ albatross-client create --net=service:br0 --block=database:database \
+    elit elit.hvt \
+    --arg=...
+
+

At this stage, and if we add our unikernel signing incoming emails, we have more +or less the same thing as what I've described in my previous articles on +deploying an email service.

+

Multiplex receiving & sending emails

+

The PTT project is a toolkit for implementing SMTP servers. It gives developers +the choice of implementing their logic as they see fit:

+
    +
  • sign an email
  • +
  • resolve destinations according to a database
  • +
  • check SPF information
  • +
  • annotate the email as spam or not
  • +
  • etc.
  • +
+

Previously, PTT was split into 2 parts:

+
    +
  1. management of incoming clients/emails
  2. +
  3. the logic to be applied to incoming emails and their delivery
  4. +
+

The second point was becoming increasingly complex, however, and errors in +sending emails are legion (DMARC non-alignment, the email is too big for the +destination, the destination doesn't exist, etc.). All the more so since, up to +now, PTT could only report these errors via the logs...

+

Hannes immediately mentioned the possibility of separating the logic of the +unikernel from the delivery. This will allow us to deal with temporary failures +(greylisting) as well. So a fundamental change was made:

+
    +
  • improve the sendmail and sendmail-lwt packages (as well as proposing +sendmail-miou!) when sending or submitting an email
  • +
  • improve PTT so that there are now 3 distinct jobs: receiving, what to do with +incoming emails and sending emails
  • +
+

SMTP

+

This finally allows us to describe a clearer error management policy that is +independent of what we want to do with incoming emails. At this stage, we can +look for the Return-Path in emails that we haven't managed to send and notify +the senders!

+

All this is still in the experimental stage and practical cases are needed to +observe how we should handle errors and how others do.

+

Insights & Next goals

+

We're already starting to have a bit of fun with email and we can start sending +and receiving emails right away.

+

We're also already seeing hacking attempts on our unikernel:

+
    +
  • people trying to authenticate themselves without STARTTLS (or with it, +depending on how clever the bot is)
  • +
  • people trying to send emails as non-existent users in our database
  • +
  • we're also seeing content that has nothing to do with SMTP
  • +
+

Above all, this shows that, very early on, bots try to usurp the identity linked +to your server (in our case, osau.re) in order to send spam, authenticate +themselves or simply send ‘stuff’ and observe what happens. In this case, for +all the cases mentioned, Elit (and PTT) reacts well: in other words, it simply +cuts off the connection.

+

We were also able to observe how services such as gmail work. In addition, for +the purposes of a mailing list, email forwarding distorts DMARC verification +(specifically, SPF verification). The case is very simple:

+

foo@gmail.com tries to reply to robur@osau.re. robur@osau.re is a mailing list +to several addresses (one of them is bar@gmail.com). The unikernel will receive +the email and send it to bar@gmail.com. The problem is the alignment between +the From field (which corresponds to foo@gmail.com) and our osau.re server. +From gmail.com's point of view, there is a misalignment between these two +pieces of information and it therefore refuses to receive the email.

+

This is where our next objectives come in:

+
    +
  • finish our DMARC implementation
  • +
  • implement ARC so that our server notifies us that, on our side, the DMARC +check went well and that gmail.com should trust us on this.
  • +
+

There is another way of solving the problem, perhaps a little more problematic, +modify the incoming email and in particular the From field. Although this +could be done quite simply with mrmime, it's better to concentrate on +DMARC and ARC so that we can send our emails as they are and never alter them +(especially as this will invalidate previous DKIM signatures!).

+

Conclusion

+

It's always satisfying to see your projects working ‘more or less’ correctly. +This article will surely be the start of a series on the intricacies of email +and the difficulty of deploying such a service at home.

+

We hope that this NLnet-funded work will enable us to replace our current email +system with unikernels. We're already past the stage where we can, more or less +(without DMARC checking), send emails to each other, which is a big step!

+

So follow our work on our blog and if you like what we're producing (which +involves a whole bunch of protocols and formats - much more than just SMTP), you +can make a donation here!

+ +
+ +
+ + + + diff --git a/articles/arguments.html b/articles/arguments.html index b1ed2f9..e7a9023 100644 --- a/articles/arguments.html +++ b/articles/arguments.html @@ -5,13 +5,13 @@ - Robur's blogRuntime arguments in MirageOS + Robur's blog - Runtime arguments in MirageOS - - - - + + + +
@@ -20,11 +20,11 @@ The Robur cooperative blog.
-
Back to index +
Back to index

Runtime arguments in MirageOS

-

TL;DR: Passing runtime arguments around is tricky, and prone to change every other month.

+

TL;DR: Passing runtime arguments around is tricky, and prone to change every other month.

Motivation

Sometimes, as an unikernel developer and also as operator, it's nice to have some runtime arguments passed to an unikernel. Now, if you're into OCaml, diff --git a/articles/dnsvizor01.html b/articles/dnsvizor01.html index a5cdafe..fbc488f 100644 --- a/articles/dnsvizor01.html +++ b/articles/dnsvizor01.html @@ -5,13 +5,13 @@ - Robur's blogMeet DNSvizor: run your own DHCP and DNS MirageOS unikernel + Robur's blog - Meet DNSvizor: run your own DHCP and DNS MirageOS unikernel - - - - + + + +

@@ -20,11 +20,11 @@ The Robur cooperative blog.
-
Back to index +
Back to index

Meet DNSvizor: run your own DHCP and DNS MirageOS unikernel

-

TL;DR: We got NGI0 Entrust (via NLnet) funding for developing +

TL;DR: We got NGI0 Entrust (via NLnet) funding for developing DNSvizor - a DNS resolver and DHCP server. Please help us by sharing with us your dnsmasq configuration, so we can diff --git a/articles/finances.html b/articles/finances.html index 6f75ade..6fd86aa 100644 --- a/articles/finances.html +++ b/articles/finances.html @@ -5,13 +5,13 @@ - Robur's blogHow has robur financially been doing since 2018? + Robur's blog - How has robur financially been doing since 2018? - - - - + + + +

@@ -20,11 +20,11 @@ The Robur cooperative blog.
-
Back to index +
Back to index

How has robur financially been doing since 2018?

-

Since the beginning, robur has been working on MirageOS unikernels and getting +

Since the beginning, robur has been working on MirageOS unikernels and getting them deployed. Due to our experience in hierarchical companies, we wanted to create something different - a workplace without bosses and management. Instead, we are a collective where everybody has a say on what we do, and who gets how diff --git a/articles/gptar.html b/articles/gptar.html index aeba524..e7cad44 100644 --- a/articles/gptar.html +++ b/articles/gptar.html @@ -5,13 +5,13 @@ - Robur's blogGPTar + Robur's blog - GPTar - - - - + + + +

@@ -20,11 +20,11 @@ The Robur cooperative blog.
-
Back to index +
Back to index

GPTar

-

At Robur we developed a piece of software for mirroring or exposing an opam repository. +

At Robur we developed a piece of software for mirroring or exposing an opam repository. We have it deployed at opam.robur.coop, and you can use it as an alternative to opam.ocaml.org. It is usually more up-to-date with the git opam-repository than opam.ocaml.org although in the past it suffered from occasional availability issues. I can recommend reading Hannes' post about opam-mirror. diff --git a/articles/lwt_pause.html b/articles/lwt_pause.html index f9fe6b3..0306e51 100644 --- a/articles/lwt_pause.html +++ b/articles/lwt_pause.html @@ -5,13 +5,13 @@ - Robur's blogCooperation and Lwt.pause + Robur's blog - Cooperation and Lwt.pause - - - - + + + +

@@ -20,11 +20,11 @@ The Robur cooperative blog.
-
Back to index +
Back to index

Cooperation and Lwt.pause

-

Here's a concrete example of the notion of availability and the scheduler used +

Here's a concrete example of the notion of availability and the scheduler used (in this case Lwt). As you may know, at Robur we have developed a unikernel: opam-mirror. It launches an HTTP service that can be used as an OPAM overlay available from a Git repository (with opam repository add <name> <url>).

diff --git a/articles/miragevpn-ncp.html b/articles/miragevpn-ncp.html index 34a6770..97f2dc4 100644 --- a/articles/miragevpn-ncp.html +++ b/articles/miragevpn-ncp.html @@ -5,13 +5,13 @@ - Robur's blogMirageVPN updated (AEAD, NCP) + Robur's blog - MirageVPN updated (AEAD, NCP) - - - - + + + +
@@ -20,12 +20,12 @@ The Robur cooperative blog.
-
Back to index +
Back to index

MirageVPN updated (AEAD, NCP)

-

Updating MirageVPN

-

As announced earlier this month, we've been working hard over the last months on MirageVPN (initially developed in 2019, targeting OpenVPN™ 2.4.7, now 2.6.6). We managed to receive funding from NGI Assure call (via NLnet). We've made over 250 commits with more than 10k lines added, and 18k lines removed. We closed nearly all old issues, and opened 100 fresh ones, of which we already closed more than half of them. :D

+

Updating MirageVPN

+

As announced earlier this month, we've been working hard over the last months on MirageVPN (initially developed in 2019, targeting OpenVPN™ 2.4.7, now 2.6.6). We managed to receive funding from NGI Assure call (via NLnet). We've made over 250 commits with more than 10k lines added, and 18k lines removed. We closed nearly all old issues, and opened 100 fresh ones, of which we already closed more than half of them. :D

Actual bugs fixed (that were leading to non-working MirageVPN applications)

In more detail, we had a specific configuration running over all the years, namely UDP mode with static keys (no TLS handshake, etc.). There were several issues (bitrot) that we encountered and solved along the path, amongst others:

    @@ -35,7 +35,7 @@

To avoid any future breakage while revising the code (cleaning it up, extending it), we are now building several unikernels as part of our CI system. We also have setup OpenVPN™ servers with various configurations that we periodically test with our new code (we'll also work on further automation thereof).

New features: AEAD ciphers, supporting more configuration primitives

-

We added various configuration primitives, amongst them configuratble tls ciphersuites, minimal and maximal tls version to use, tls-crypt-v2, verify-x509-name, cipher, remote-random, ...

+

We added various configuration primitives, amongst them configuratble tls ciphersuites, minimal and maximal tls version to use, tls-crypt-v2, verify-x509-name, cipher, remote-random, ...

From a cryptographic point of view, we are now supporting more authentication hashes via the configuration directive auth, namely the SHA2 family - previously, only SHA1 was supported, AEAD ciphers (AES-128-GCM, AES-256-GCM, CHACHA20-POLY1305) - previously only AES-256-CBC was supported.

NCP - Negotiation of cryptographic parameters

OpenVPN™ has a way to negotiate cryptographic parameters, instead of hardcoding them in the configuration. The client can propose its supported ciphers, and other features (MTU, directly request a push message for IP configuration, use TLS exporter secret instead of the hand-crafted (TLS 1.0 based PRF), ...) once the TLS handshake has been completed.

diff --git a/articles/miragevpn-performance.html b/articles/miragevpn-performance.html index 591b8f9..b6160f8 100644 --- a/articles/miragevpn-performance.html +++ b/articles/miragevpn-performance.html @@ -5,13 +5,13 @@ - Robur's blogSpeeding up MirageVPN and use it in the wild + Robur's blog - Speeding up MirageVPN and use it in the wild - - - - + + + +
@@ -20,11 +20,11 @@ The Robur cooperative blog.
-
Back to index +
Back to index

Speeding up MirageVPN and use it in the wild

-

As we were busy continuing to work on MirageVPN, we got in touch with eduVPN, who are interested about deploying MirageVPN. We got example configuration from their side, and fixed some issues, and also implemented tls-crypt - which was straightforward since we earlier spend time to implement tls-crypt-v2.

+

As we were busy continuing to work on MirageVPN, we got in touch with eduVPN, who are interested about deploying MirageVPN. We got example configuration from their side, and fixed some issues, and also implemented tls-crypt - which was straightforward since we earlier spend time to implement tls-crypt-v2.

In January, they gave MirageVPN another try, and measured the performance -- which was very poor -- MirageVPN (run as a Unix binary) provided a bandwith of 9.3Mb/s, while OpenVPN provided a bandwidth of 360Mb/s (using a VPN tunnel over TCP).

We aim at spending less resources for computing, thus the result was not satisfying for us. We re-read a lot of code, refactored a lot, and are now at ~250Mb/s.

Tooling for performance engineering of OCaml

@@ -40,7 +40,7 @@ To better guide the performance engineering, we also developed discussing it in the OCaml community, and are eager to find a solution to avoid unneeded computations.

Conclusion

-

To conclude: we already achieved a factor of 25 in performance by adapting the code in various ways. We have ideas to improve the performance even more in the future - we also work on using OCaml string and bytes, instead of off-the-OCaml-heap-allocated bigarrays (see our previous article, which provided some speedups).

+

To conclude: we already achieved a factor of 25 in performance by adapting the code in various ways. We have ideas to improve the performance even more in the future - we also work on using OCaml string and bytes, instead of off-the-OCaml-heap-allocated bigarrays (see our previous article, which provided some speedups).

Don't hesitate to reach out to us on GitHub, or by mail if you're stuck.

We want to thank NLnet for their funding (via NGI assure), and eduVPN for their interest.

    diff --git a/articles/miragevpn-server.html b/articles/miragevpn-server.html index 2e1250a..4a96fd1 100644 --- a/articles/miragevpn-server.html +++ b/articles/miragevpn-server.html @@ -5,13 +5,13 @@ - Robur's blogMirageVPN server + Robur's blog - MirageVPN server - - - - + + + +
    @@ -20,12 +20,12 @@ The Robur cooperative blog.
    -
    Back to index +
    Back to index

    MirageVPN server

    -

    It is a great pleasure to finally announce that we have finished a server implementation for MirageVPN (OpenVPN™-compatible). This allows to setup a very robust VPN network on both the client and the server side.

    -

    As announced last year, MirageVPN is a reimplemtation of OpenVPN™ in OCaml, with MirageOS unikernels.

    +

    It is a great pleasure to finally announce that we have finished a server implementation for MirageVPN (OpenVPN™-compatible). This allows to setup a very robust VPN network on both the client and the server side.

    +

    As announced last year, MirageVPN is a reimplemtation of OpenVPN™ in OCaml, with MirageOS unikernels.

    Why a MirageVPN server?

    Providing Internet services with programming languages that have not much safety requires a lot of discipline by the developers to avoid issues which may lead to exploitable services that are attacked (and thus will circumvent any security goals). Especially services that are critical for security and privacy, it is crucial to avoid common memory safety pitfalls.

    Some years back, when we worked on the client implementation, we also drafted a server implementation. The reasoning was that a lot of the code was already there, and just a few things needed to be developed to allow clients to connect there.

    diff --git a/articles/miragevpn.html b/articles/miragevpn.html index bb531fc..7486adb 100644 --- a/articles/miragevpn.html +++ b/articles/miragevpn.html @@ -5,13 +5,13 @@ - Robur's blogMirageVPN & tls-crypt-v2 + Robur's blog - MirageVPN & tls-crypt-v2 - - - - + + + +
    @@ -20,11 +20,11 @@ The Robur cooperative blog.
    -
    Back to index +
    Back to index

    MirageVPN & tls-crypt-v2

    -

    In 2019 Robur started working on a OpenVPN™-compatible implementation in OCaml. +

    In 2019 Robur started working on a OpenVPN™-compatible implementation in OCaml. The project was funded for 6 months in 2019 by prototypefund. In late 2022 we applied again for funding this time to the NGI Assure open call, and our application was eventually accepted. In this blog post I will explain why reimplementing the OpenVPN™ protocol in OCaml is a worthwhile effort, and describe the Miragevpn implementation and in particular the tls-crypt-v2 mechanism.

    diff --git a/articles/qubes-miragevpn.html b/articles/qubes-miragevpn.html index 3f0ca9b..7e41954 100644 --- a/articles/qubes-miragevpn.html +++ b/articles/qubes-miragevpn.html @@ -5,13 +5,13 @@ - Robur's blogqubes-miragevpn, a MirageVPN client for QubesOS + Robur's blog - qubes-miragevpn, a MirageVPN client for QubesOS - - - - + + + +
    @@ -20,11 +20,11 @@ The Robur cooperative blog.
    -
    Back to index +
    Back to index

    qubes-miragevpn, a MirageVPN client for QubesOS

    -

    We are pleased to announce the arrival of a new unikernel: +

    We are pleased to announce the arrival of a new unikernel: qubes-miragevpn. The latter is the result of work begun several months ago on miragevpn.

    Indeed, with the ambition of completing our unikernel suite and the success of diff --git a/articles/speeding-ec-string.html b/articles/speeding-ec-string.html index ae8552b..aadfb42 100644 --- a/articles/speeding-ec-string.html +++ b/articles/speeding-ec-string.html @@ -5,13 +5,13 @@ - Robur's blogSpeeding elliptic curve cryptography + Robur's blog - Speeding elliptic curve cryptography - - - - + + + +

    @@ -20,11 +20,11 @@ The Robur cooperative blog.
    -
    Back to index +
    Back to index

    Speeding elliptic curve cryptography

    -

    TL;DR: replacing cstruct with string, we gain a factor of 2.5 in performance.

    +

    TL;DR: replacing cstruct with string, we gain a factor of 2.5 in performance.

    Mirage-crypto-ec

    In April 2021 We published our implementation of elliptic curve cryptography (as mirage-crypto-ec opam package) - this is DSA and DH for NIST curves P224, P256, P384, and P521, and also Ed25519 (EdDSA) and X25519 (ECDH). We use fiat-crypto for the cryptographic primitives, which emits C code that by construction is correct (note: earlier we stated "free of timing side-channels", but this is a huge challenge, and as reported by Edwin Török likely impossible on current x86 hardware). More C code (such as point_add, point_double, and further 25519 computations including tables) have been taken from the BoringSSL code base. A lot of OCaml code originates from our TLS 1.3 work in 2018, where Etienne Millon, Nathan Rebours, and Clément Pascutto interfaced elliptic curves for OCaml (with the goal of being usable with MirageOS).

    The goal of mirage-crypto-ec was: develop elliptic curve support for OCaml & MirageOS quickly - which didn't leave much time to focus on performance. As time goes by, our mileage varies, and we're keen to use fewer resources - and thus fewer CPU time and a smaller memory footprint is preferable.

    diff --git a/articles/tar-release.html b/articles/tar-release.html index faf10bf..511fe66 100644 --- a/articles/tar-release.html +++ b/articles/tar-release.html @@ -5,13 +5,13 @@ - Robur's blogThe new Tar release, a retrospective + Robur's blog - The new Tar release, a retrospective - - - - + + + +
    @@ -20,11 +20,11 @@ The Robur cooperative blog.
    -
    Back to index +
    Back to index

    The new Tar release, a retrospective

    -

    We are delighted to announce the new release of ocaml-tar. A small library for +

    We are delighted to announce the new release of ocaml-tar. A small library for reading and writing tar archives in OCaml. Since this is a major release, we'll take the time in this article to explain the work that's been done by the cooperative on this project.

    diff --git a/feed.xml b/feed.xml index c508c2d..58cdd12 100644 --- a/feed.xml +++ b/feed.xml @@ -5,9 +5,16 @@ https://blog.robur.coop - Fri, 25 Oct 2024 00:00:00 GMT + Tue, 29 Oct 2024 00:00:00 GMT https://www.rssboard.org/rss-specification YOCaml + + Postes, télégraphes et téléphones, next steps + https://blog.robur.coop/articles/2024-10-29-ptt.html + + https://blog.robur.coop/articles/2024-10-29-ptt.html + Tue, 29 Oct 2024 00:00:00 GMT + Meet DNSvizor: run your own DHCP and DNS MirageOS unikernel https://blog.robur.coop/articles/dnsvizor01.html @@ -47,6 +54,13 @@ https://blog.robur.coop/articles/tar-release.html Thu, 15 Aug 2024 00:00:00 GMT + + Testing MirageVPN against OpenVPN™ + https://blog.robur.coop/articles/miragevpn-testing.html + + https://blog.robur.coop/articles/miragevpn-testing.html + Wed, 26 Jun 2024 00:00:00 GMT + qubes-miragevpn, a MirageVPN client for QubesOS https://blog.robur.coop/articles/qubes-miragevpn.html diff --git a/images/smtp.jpg b/images/smtp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c974dccb37df7f1c3ee771105f4c7010535a50b3 GIT binary patch literal 131410 zcmeFZc|26@|37}DQW1B{luC4KQ9}t?ODZ81D$b0o8H5aD?6OSD9W{j(+NDyKIc7wb ziEy_JMP=WUnnFmjW}oltOv`=W@6Y@D`F=j%@9*>1ukmo^oa?&Ib*|;LK3}ghf_lNb zxgQMz-3}s%i3vhP5M%}-A%Y;Ha3&&l1P&tK&PD%(^C`k}yzYj`^l#Ie@A4=&+}A~)qlHJ1@8e_2LG8Ns>1X6a9$nZhD?QT{N9i7wG76E z|H*0`KoEuBetd6rqEVce?Qx~~(tKQLUdvR~*Quy1TTOQJbfN|LtU*-Qt8UOyS+Aq2 zv24Az@MJxLOg)PrV$ko@^{Q$rH^0wMAV83tQ+_;i+M1i9KhCGrKwJDXT}1TzxTpVp zZX%w4%}vDr?{k|X@}m!tuqi+LoWP5v@Vm;~sW1Y%{Jd$ZN6*d2NAPH0#TT^|ly~08 z&g+{K9DO$QuAGh!Kx~!z<4PDr!a^qlRKwSq|8ofc`w=MoH3UH;A|Wb#<{U&18JvG1 z!1R2~dD}|kojdNF-??w!QRnQ5yO#&GBUeVH^SalSYp2f1s+sHyf0dMKAGJwuOTPfg zQ!+NWYrkAiobc|7X2zx8W=N?dL=`cbqKC+n=RPhHOQ|x*X^P#!Nz5WsFxJ$uSZ z?)zNyS^Ke}K}o~UCZKJj<2Cc9sC8}*e$|uVLj@(DZgmfC4xboYk>ogZ$#gJZF3Y^L z)F>%G@9tRho+be@qtP>z@r>0n;3}7MSfkN?sN~3Vc8>WfaV*e>b>Ho)M|xIc8{=v7 zWOz+nRr;vH9;KY5wuSkriEZahwE|~5u#OkJ)}74Su>WKJwF#;{xoTozDmxmxEOPAL zn7?LtsrFX0r2)9`(75vSRO@o_AOhN^C}n_U0+pQ6YMtSq_oa^$eq{bpoV#PaUH@ z;{A$5{tm6|{mvq_kM3!A(+{i_b8NP2%X)R+vpe4Cuqat(2kmCRw8(N|PALg&Ut z4(oM~hmm}3VYiZ!yMBP0-(GX}gmOQ@QhaYUPz~YJ^$OK6j3!FZuG#4FO`W5;?f|YkWo6g@O1x1BF-9T~if5 zkCyIQQ*`@HJk5Me_o7v)!I7p8EsZ2K#}s$P33a=|arFXT)(-Ao%lwxa<+Z1&2O8@( zNmXi}S$E%2rsu_=?D;E6GJiam+_v-3K+DIZNxkI)MDI157^fW2V4JH@_w4szESMm#=zu{dv`6lbq(Q^^k zm!9_Wxcq*@f{1#4kw;k(CewX89<4iUQQu=<#fcLjcLwL0vm1j06j!!bDlU2uNPSu` zMqezmf6ug@OJwV8jVEYW%l?Z3M0dQbBQ*ZzV9KDlbIcaUSSDRXLv=W}Uw~dS{w-i%*8q{XwgVkE`Rm&Z#k&B`zhr5+6kW1RvBtuQU;Frd+@2DG97~POp;b;AM zkUen_(=+&((md!Rx_te?)`CyhuDGwen{D+THDy2Qo=*`V>sx{ux)<#Q$gI2eyI$ti zP9$CbbhRh7ntq6#SuXvyf;LLM)IjwZ+*~mtKyGqkY2sp1qB4%}_B5`Un&(WJ-oCVq zKGFVQ<@#hstg3BGd9j>N1}syU#o_q9ox=@L(t#1Ha=R|>&CPB0DTpnI9J1=t)3+~o zX()`JSX!8nSDR#bO(oS4gil1aOk2dlIr|wOCzO*qtG`+mqxWkD^$gSRH`|ld^@c+C z*S}anw&f&S_OC`HH%Gr1@Na zl;-D znwbTBEW9>IouupEsu-R1x%gS(C$_RnLl6D_)=y1^^0^r)8K;+Y6yyjH&Cx@J7gGl} zT}xq~aopjNcg^{Bj{QBOiK4qN9*lkUcvIF^_;^Kr}l*S?SkCH{sysir-q`l^p*;c1fS+5iY_TppJ;pI zJK|!8uyq1tCMCV}6ePW&Ckucz2Hz7B%z^LDCO{}Fox_*MBK0G*j zt2;gV*$NMC`q$dp{qFfX>;bF=Wh9W-A2u?298{RZ-y79swU~M<(z7j8Bl5*~OPOV0 zoVDzyw>oBfi(iyxUyrrvLw{ykb- z>XjaD63eK~sdlzIo?oZ-dqP!O`Jn3N3IXDluUA8Fm~_|)#qx8Hkv+(;ueJi^=Vk>_Zfb&dumJyEl< zxXJreJ##Cmg*%#x_MV%KN zoc6~CyKB6+spIcjYA)N;X7i#@e?fB=Nn?NKgsuSj;%>@fC1%&`T4GBbRXQ-+by%Gh zfj;UC3UHi=UhlByk?XVYOO`!*3ohs?h^5CCu-~w0jFeHD*?`-c1%@V}M#MylN?ql& zGr2GC#^wavP06SoYwE~uE;#Nnq5M&R7>)C5KWBU@8ZG){<({Uu=u$?8a^`#Orj`*- zYUnLC)-*72k-=l!&Ob#mu*|HB4QTY1E;^moxG4W^@TUe#_eBp{azO)D4oMy+(SXWa*=N=!csTCmQjsoPP`UVwyNrH2+wV@|9rP* zR9h~Q-5`5$w4jDul~a3vT(*D5m|tXE=mP1!mP1-GG3^7p71QZvjpA|V++UB`v}K)d z*B*K>8EcwT^?JpQ+OWp1l>F-4ysypXRx(eV2}@p!XK(a~QO#@V$g3Qs zx(w9@N7z4qFtNc|HTPuTeWiC+O6r-}IVx$Ow(f^jIof~9bI!Ex$@^p%|FO0}k{~Vp zl2^23jpL2B^{$I$zuI=(3-h41WMqdq&NVl>m8a9CnvrpWkBKW5Yj2IMZ&M4>IHQBH z>ofC*CL^!da|B4Dv)*ks`T66n2ik;&qZbS}>zY0jt8vJ9;*kG&a8Xj?%gB`2$%&Yj z3-%w^4)iVf*m|IF3FfrlrQvm3oxW%nR_*6!^VL3fh)KZfEjwnciMSa5hUE;wOeV^_{d*|2hD6EB{;db^aR(JPi6 zqeI)d!hX*|RMXtlWd8n6l^UlvUGF{owbPzCa!Nhx>}n6|IfV(3VOphXtaomF-05qk zyL3g*NdzkdxrNTBQ9JUg=#A&EPUuhh`eA=4p(0q-s;J=fpXnDDL=HCYcf^{80#I`S zVkkh`KtCLAxns~_sq{E+neEvZXU21K$EX$AS|TXprP;@hl*rx>%4GXRXVwFFLH`a(^ zS+dhshqu&4x6C;)ylPhjtJA}SooU`Zp^)09CRgW@VmE$hf>EhgHJGng#lAh)Tu=q3 zu=25e;GGz+xVvI5@WqkkDcqt6nJHmX0h7jaKUs0IuTj@EN40OhCu60l9ewjsR^h9# zsHV+V3DFr3zw{O7CRJLAFSeC*&*}DWxs@L=;5PZ@jfpn0U4W?eNWWc?h~-XSa(Pi# zYu4G?2U#DQ?cP4hDtu9pA745Us(#C0+g0~FT3k~3pY7iMk$Knu_|#~1AfqRCLA>${ z_Vb86MU6Hlk&&jIY`5NbgMY*{$eeg-_xeRdvq7l%5*CI3oIPSjc+eBv;{2j`%uu~L zpWQq#agYpJa8feAXi!3P<^m%gN9?l?iH4TmDypqxc3p3)yD!ha+xkjFqs=2bPr7Vt zY}NSJjF!w5iCP={OfQ75e*AH`=|-1QI=3fn!981d9^n%w>2UNx&4hyXu=Y{23O3ct z;DOqk3em}|Eta7=-HEK`D$c-*(FgtyB7H*37>UFu&eWWWW^>{|!+7zqz1>}|5B*4M zx!&7PdS9Q$#I3Y+vFJ&#{k%zlsJRM|yN=S;SFSuf@;Z31H;pzK;m}`7i17Syb*?oL#$b329^ULaj^I zLsz>?Xt#?q5;YgS0FnB*psZ??@uG8J{Q7vfb_3UC=F8>oCaF1IdL`J$Zeue+_2B$V zrE69sbvpgqudH5sr90>2Q|=7kRp5nWoZlIics?ec&{tx-X7tMHZ*}MY{v~J-bT7X8 z7gD6QZat#4&Ddlrjxr&Ll#GZKBD!Rykqn?wI3OjgTPdvj?Pb|$XmWAE%xPZ!oV00A zOoeqi!nz(f{s#Xzj)NfLUfyn=zGi;DUVgrCiGyFr9v@$G3XMh;wlMbeb$0gj^S~?c zbNpMM>WyDZ3GX#`3&dM&bMwXT!K=UZ>FjOl;NfgxU}*tG-yZhuhCSXi+Cg(?Uq3H1 z${|OnoP!u5G{hV6KpYTXWEtXwC?Fk(7nC?7euzID@y{%;pZCF)u)}RsU(fGjlc4yy zQGMM!g`GqFOkrz%ll{BCt;;Ln@z=OK|=LM|jUtMo=ba(l_B;VEx z*=Mv(A4UVfB!cX7TDHuI=118=dy8KRKSti3|DkLf^*^@T=IvyGdiokJ-$%uF`R8XF z)oIzkE8pis^%a)y38Zdu{qslrS^mzBzBKRc4!#cf41|N+Tu9k=Yqdk}tpbM&TpkzJi(bAeXfJY9Y)pCn$f55}~O z=IcxIpwc{DzTYD8qXr+s-^yqIDBtJi;`;Xr@gEg1wx8{Bt`Y72HU^{!z5(s}@h#-2 zRl+*S?+=A9y(8cGaJH}v=Tuo?%SHdZ7VQ^a&lDcvAR?qvK#B3stncgs1S=fDps;iY zqI~cm)KK9FXfAw2zL(s(a`k74s<7M&jz8L{3rldy|6U^Oa~Q4>;4wt-Z$F}dVE<3l z3D;r<-uDkaoU#R`3IE^MZ99G@tiz?+mVeaALJeTx_(9muV*E^07Y^TMhF>B$_C0M4 zoJ>W0K%)5KbNsoUc!M9G?<|I2;_ZK8=0EEH?M;6P55&`tic33O@=mAF{5+j}{)KlP zeN~`NI9#0Ie^M0`{tHzi+kR5-w_)u2Nu0u|O!uL>IXe50sJn6Y68Xn-rU~nycrN^l z2``Md|Ls{~F5WahuYVLxr+K@%xc!uz2IhG0X2LS)W442zFU`o=)7jg>*VzdQ5Q`wM zA1Ywhx5ju0USsUxvJAfdr{^!~=S}^GA`veBKTAw}T>hzSraMr5EgW3_(MrA z4)itl*7 zo93h+#s6$BPI1wvQEA?PTiiL{`rl^svjT2GOlh9@TF>;Qd4ZbtasIp1nneZi_8&?m zC_-`gAIimHi(UVr^u_4U$GR`&E+=YVH5 zuXCh%C0s4iI={!tJ{vl z-p=NSO)VS`yE|$-$?I)iwkc32(8J5a+1FuNpa<2{M<-BMUf8(~oa4pH^2>xxeBE{B zh1tf-EKT+-)2DemFVkM9vet3^devo`+Up!N95mFlHI$a&`P9nm)s$6K*RI#p*`TGP zsl5VZ z>kzos(`WgQ9=1FCIC{GYLrBZ;9w9v9=c_9ZL;W@f4=)pwpB?|(w}|)%KMysXnx*~&IbO@p1#X}-0tM~^Ik8&O@$M1a#VJvI(tAfAJ`m~pO5nT zk%s>BmVXTHXSHxge>?#8=ifK~vGsUEn6S=vnxh~7Oyljk@~Zmk`Ww{Lwe{5vG*z`! zw{26=R@XGpR#jCo)YnqkVDRG}V^1Gn2Tw<5{2u6KotvAJjygqC#aUZTYps)m_WHG2 znj1E(b)aZDu2t32P;*dIQFqpMQvY%PHyGQ2`rmuDlcUZ-nzx4oEW4YBgNw8BAunea z`DH)nuOmccO=wQey7FqmN9pK$I|Durp)e@IX>6^^`n9SW7Lc>QUQ0(!U2(mt&ieJ= znwkLFIzi0r-!;ZF{n!7aG0n;CV9@`mDb6UuHQwRo0};8P@04urO#gmHbz3H+BOM1v zJg})N@8jU_>?Hra(Czzsvke`CHM&4Huw)1R_r^ADE)_5EuFeyzZ- z75KFRzgFPa3jF_Q1^)6zoISy`2moK>Z|^IDm-GF7#pzS0icJ#}pFUk&a@LGll5_Ca z4d*PFhkq9QS6(+15t})4p2R%)dGqA|AKq7-QZsFhs0h5^_t*Q1iSWMSZ5XE5-(Ocm zrcM)`GF=4u{=VXrDWZR`g}CeA-dCI=B8tDSI9*H>4pV$Yrijj&icEtS7Ps!5KF_tnfb8yHbCH`T5%!jy{jow<}yoxUaF$!pZkZC4a`M<1=ST zFZv_K!0=8csR~`axbJ;G{?4Ma--+07?=AjsUR%`KVd)xp@^UiwS^dZ1HQL7e-GWYC zNqO+Rp<{%ov(xI(Vdhm{!fPdFRw&OOJk=JiRHaKs}Vj&K2DOz z522GDi4o|s(pat^&(_M9XT|pC**xWQ#0UX)TpW&I7fUB~ zFteu<`EJb2O>|O0Aa*iIpUI7vLGNwl*%*ZrKgZF@q&O84W}8k{(ZY`MZ0k70w=j=H zVnYkT^$ePdW@xk!+#Tu&^v%L`wOU5ue3izaD_@?iJ~PJ-hFV5Abe!ONj+w*EgK=NR zY;s>D z3^s9-3fZ@dnVZ?c%(CicJ~+j*ktBZ3r;|mP+0#@=uZFSh_==y)9>%OCx!40K2^3z& zoT-JOX*OtjH#3_|u$oS6rjupRKPBt298rSb)($3j4l~bl7~@9O!&t1RU&aEl2NEbN zK7rsr(MviBM01G3k%WyaAT~&2`cyQR&l$6&lU~(haQu^JrNyeGqa})U1g~)w(kP$P zlufJ`OXpcFe?oB0QXz}B5NM9fYy%bY(jsEz4S23J7B$SOVrIjP=p+oN&#{R>K2P*-W_+J;U>Hc~jRCD0nNMB-Z*L>`~R zhmz$4>S79;&-tK2VuhVSo4)d_mdT*J6ed@TXC*s~IZ@cN(@9;-yly|BX9^pRq6Aky zX3Qh6hOK$>g=YpK?M5F0(*SWu$<_m(g5Y?+8!Zk&>seLM z`X=042|Jm>%rcWfpHNXh6;h;`4f}nVC}O=R!Tlq?m*r`t1RLmQp50~4K8pBuCeLOe!L|+r>^od?coHjs zq%+ghl2p? z1Jys~f*kZsBzE#KX`s0JseBB?sbgpnG4m>geH?@~>y0ILs+VV@@s($TbTc#EnOrFu zG<`S9;Pm|R%jGbk_*NSisYDQpR}8P=B1NsA)(gaDBgEGN)`Kr`17tESLNkE>b; z0lU%H=^zkq;!KpS*~QHC2bR_CCB4GQ{fH>R6QuV&4zZTlyas=M(R@%EB3i78BA5l8 z$zBCyz~^v?ITvvqOP-zIi^~Z1V&D*^p8`AU3zcplhP`Lz zfp{d)PV#Kr-ZRETqFMUQ;k*SUxQbW3pR?D(wj^L@4vE|6j(%0Z|68G|iO8 zvO(SP+3QDDNGFAy7|_kk0>V@@Nhg~ZgPz4$hQvA>v>GZ~2-G>iV<3I5qfbR)ym@pc zm&VLH34+Lw*b1U=8K0djjadM@H47<+lLwsM3FH8>gTm>mgLNZ?JvRXzW$&C9!p>y7HcIXv5YEd)P0Y!aJ~nHUm3q1C|JU?uXw z2!U0$;8{;tVkdwb&M`SQ=cxZeCT=vqEovJM8H7m_pM4#5ONQpT zu{>+JO+dh@C<{cxWsHFlyplkPtDvQzmT@&iiy~%<)DZ&K!aSLoJC>@Dr*nvW(3R|7 zQqeFL4W=xv?ST6Jvk`%1%LWUDPNuMBW5CD&Wuoe+-v#rg46fV> zhhlhEpf5UkHfz8ZJA-5wq6xyO6;Uy?yz%xLiS9iqfZivnTrQ`)=dQW zC}OiD*o?R^e#*yORY)B+=shw%y z4as*u<-oJI1ZVZBOKW1Ho>H(PVv8M@71O^mleX!_@~HLuuVf=qnJ*_<{IuU63Xtpf z`V81rR-^sTSbmp-0lKwD3{bf4_4yB%JC=FB^^?}V3SluDoF zNZN=^{5t_cCLCV-Il)vvCay(HQBz@Zr%BV-j#hcVf{h_+Ry+ZuY-W(G|JDLDM@iAMBoNMHrJb#;pP!_9wWjxFME%lg|OsN8(~p zK>F-D+?ob!w+z?l>C9{s9S~^1#P)*P!I{0FFjYvWgtQ5=Mx93jX9_${7&nY&AK0#4 zpjqdFY@El;J1fol%mw!epD=D)ProsY`GElv85W2+n1YC`0sCkTlY11#1m+p;9fExT z-U^7wY~nk87)ehyh}Syc5m49ozz<#qOCfs+?vm^TFEq^@T-SOm`XtYGFEi5=JVw%^ zMBE0<=Hk}1R21$s9f}2u&&q?zJ;&tkxsJX*f*bH8m{c#=E}-`}fNjU7qYvHtdDgQ) z5aBi$h_0uSAVR@&V5X;u#N}FO+=Wo!n2)iMdB|yZP1zO`bDotuWynr;|$<{bzJu>>KH^ zm3&g2J5ML@hMLcY(It}$3A;l|6Ourxe!Qou+US~I^kPdIZ=Mo+;mD@M3#Tc`@gt?B zSe#XtK_4f6Vxl^7t>RYu@YSW7eQ7;QE`8#sT9?XhFAu30xfYz5>7LwiCrUI7bLb_<@Wv0@*{%&f~)(S#9LALHxCVE!afi zNV7V@ohK6xW%8`k!oh>&fB<*Iu{RKUAh!d{##>{b@IC|``?P|4boM4~9|00cCox6> zXp+}jL)AsZB}jYD7atIt=C3Y5j`8diM>Z~>JP=0dEC`&Et#QbM{p#t`{0;9x0@TD$ z9;T!QPx{!~s@ip2)wz0y{_vCT>rpr0mn9UIPEAeHHQM-v58aDu-GeQcU436QeC*zg zgRN#6CGr>IM~AVl3(NxlzPouN@%BC`V%BKm3qsRFxYBh3g2mh!rkW6y-cRcq}G%M^e zTA+NiqArT~)l99iEa0x4bz@!a#Wxnw6O=RX+e@>V1&jJt-fyXY+1k||>Z@qkP}|vf z;H`1N2d`l#+E?p4XC8)XO}6MAB^L^iSDGW08xt8yL186^1}SOLxzCZr`ciW)>o5N6g|u8&hpChjhoNuL{^8@Ea_I%Y@9sE+aHDb3^R6X^JI8mFMB2Xzkt|%In81Mb3?Dx>o?JbC zCnvY=%2KD=EX`Jhd3K8X#&=0YT+8zw4kL_dVXqjQGq3FuATQXeRWIgBZ@{kE@2ZiQ z7p=TsdNeX)+&Qe4c>Q(I{pXBxqdpBmTR17H&8lm4w=PewUvqxPiMe{iEWONnjL{!+ zwWhWG?7-K8BaN@^%*0LRs1Gz9FPt?-Nu&1-zGNq!b2D}vAiY_()@EQG>)rjE zudrUOEQk-7_B0)_rJS=#))n_sprRW__?Q`J<-NEo0ZjD_R6c0`5EQhsQ3%Spj0F#Y zzez=(5NyGz1C)bw8S?|c98g2>QYmcUo@`(R3VS+O*<3Jwz?jKB0=~5=&a=6Ip@Qec z;&Z_M>4k8>GTF-*IMv{q+~kpJBM7!nDQr48C6dGngwFv#)R$+KBF*Z#LChSZa0t@4 zuR|tKqj9g>12BFOW+t#SfM$iBm*K%SDrhzM7C1ZtQl)%QWNJt{IqV_orT`WILSe^K z(VNDdD!5Suc0Y&;un`>Y{frtcHl|$r03_=Ja;V399g9k{JnK*JdMUt3%19!Y~0olSKGG?|Z@h!kw zV7mMd56jY}t>@kTFAcfCX&8yN>0gi~ll`2oSd{*3#-Q}`&ciW!Zp+P1EE&({ z*>9;HX26bpuruzPp651lJar_ABtEEkazc^xVW#49t&rt>Gt<=#bc=Nf0z|9uw*AP7 z@gh%-{M=XTBHl);#I~SyleXUX~ zo4C|XNyWDIO@tqHy&4uf%i7vtXz%nVlb(|YsVMEr264vvj=IGLJPV8iXU%_S)(|F*b(F3CSYr!rn=^YR@&kaB7sbB&g5C9#S0LnOf%i4yV-dnXSW+iR>%6K z*{v(kD`noX+dY1y?^4V zbR7FVK~cHEmv(yMQa>f__vlHluAM8CMzgve>ll5BdvJ&LhPEPGfO{i-7{}#et{e1V3UZ;G9hq?63zj$9CwO=4SzPUL*9M0KNcL zL$koNPyj>W?F=oUj)l-#0kIs+5mRCV_$b}D$+CS;AJ2BQ7rk=>;82K00ka-eNag`T zlT(UY6DL4dF9mU70C+PF8}n>tc5``FVg#E_lEln%5IR%A#NmUN#DIvzGAHVm%l$ z3IL(TC4)u5P5~SRKnaggFh20>GibtIX5KlFcS|Vjqc#x7AW&r|deLTx8R1yCYZbu* z96_I1Fgl(Mxq#RSz;`*%`mPEo1uQLd0+q((UZrp#es=~J%r`ExUZBE2=c&!om_a(3 z-a>^rVJ0dlIB=s7bE_iYkqIVuF$Fut-gu)PGswOLk}I3dMbrtqHw63$gK5vDRMr6{MtzjW%#A;DVFh$NR=6Iq?JCU;Z&V`5TqtzDJfy_Ta4Oiw|I-Q&m}h7>@<6tGh1faEI;z8G;O)Qz;(nw;CBVv z*JsW4rm;Hg_Fw(%rR{a>-JL^HjqeE8G-Xh8{P{=6pWiUhF^WmbIivhEXF;9X`4E)9 zYqNOqP@vvuJ*#lIuD_6+(e84)(dyKtw`aYgEMzxFw!Zh$`%oqZ2L9Ugs>02KGb_bY zC^=`cLie9IEq|`!@>ZFC#xrg_!O7@(;SJHrOQW>$)AnPyqtqC5P_I>!$4nC- zVqt+&qxKzzeQOy#OPSoDjr~t1(?$cnjgJk#4h43m*u;j#-$x8TASX5%$fyw@u=VHM z1xVm0^!|sQGP%*hAAMwQiW|XEmQVn z;s0e^uXPtQ9ex8@U(9~2odOT5-6}xhKYl{f@v@f5?s`oAUcXs;Tus>W%MHBvwg4tLDNam?R9PK6T9rcDg#u-;$n=x0*0p4gxdFl zdY0nu@$vDBC_fMVlFFB~F=Im9YtIm^QiWPn@53&B$}mvP>3*-4@i{4>{fvg`#G*S; z(&TEx(>S)bI@Vb;_?YCNJxl5oBQ~A1qp<(V*=mLU*j#zwqqqG_6u)iJVSdSU&1pJz+Vt~-nzY{qYxGZ zs|fHsnDXh6?UD zLG(fet%tk>s};i(_5y&K!5yTdiI-W8VBdlK&xyiKxXM9EVooB&=y^7auTd~))H#Gh z%>dk|qc@My(LX7iWCa3sFYd^Z$sIh>1twPox5E;8Ap8fCGzX$Cr37j)1v>_ws|xA# zaYzS{#weHZDHLo6a}pq0Q#@R`m&rXsC*`MuLI4}J9v~>tNnQ}Fk-$yE#5f4maKW4l z#M04xh~YrgvAT(1r`t=mprn!~NjWikonMm}l{R{V(7~j8kkMqC6>VbW6Cf`Yk^pIS zANf|YN*^yl3;VJjCfE;myA=*xlA5pplk=s$P@0A?%H}{blhge za9C-GB};rVobeB-n}bWe?7q#{lWVJ9+h1Hk$T=F5HexbZ#$rp2NYt}n9QwCfC2Oxn zk251COVUY&AAQEb>{9wsU?F)Q#4dL8iPTyJ)4UsD`tPn6&#F3{ld|MZi2a9Ay-&Rs z@T-WgyvUO=_5&jVS{(XUjSbQyC?1<2(7O*Tx-3 z-kA){)|@m{p7=l~X*2vrCj8V&=c_a&Ts@hfF^!ZT^Qs?wE-^)Z%0yvI;ikKhD?EJ6 zPF>l$y0`ebv7AHx#+mcZ4-7A@8?h$r984=Qdu4mj;C$B$|BuhKqPGRHc{=09Ztl2b z?kXi1bjbBbhlO2~wMx29TgF{6zJ3>7wQ9%=TggkP8;{>LagoT3pQIPQB+n=>ZMQXe z?}f%*q|DGoV_HIXhNzG>ijBXMaF@T5mF@aS=2+u2ik=%9S$g77Se=*vF()_`4y=-e zmA{y8G-(KQ{b>Ru?ibM@t{7h^pS>+CXL;v(IY zct(K4?roJD&FE+uI3+b<&a)LDM65(^&)yp-$4!qVk>iw zDZ19qnB&M)pLOykk#*DnMTb#~uo6B9QV4O*nE-Qw;C&SjEaJg9@a#wfO$7g8?6^5Z zry#m)R}Y*8TI(V)^EXo*NQUgPe(%5Nrpl z4zgixF%p|P*X!OL*!z0xvIHafaFVP<^p~7*Nn&wftHsE6zlselqxun(DHM)gY}lTT z(RrY=?r1SOZxCbL?fauA4QuzW$gNykeskGj88%ODKe%@G#A=JJ9$Jejl0xpHF3<;_`o zm*SHY~ z7wf}9C*AbD3h!)6?YBe0_R79mcCkIf zXWPF04RWU@(q*#GsWBcYE4T5?lMCC`Hr@Qh@&J9sOlK0Me2U&R;p&QuX;(1XmxV;8 zJ}YlJ^ksSS2a`X8>F>VeH*Q^`IWhwR=0R=&gb!=ZiUnv9N6omaLi2sN3ekyvEPLu+bxj&G@ed60Xb5B5Y}7T zOG*Jf0Ks|Q7M@kIFsxW`8H0Q~$koYf$5ZwWB|%~!I5*PR0WuyQ{Igt`a?>LWvZsRr zOi#yCNH9DFMUINrB-x;^9{^5igR&qnlumjC=mZ2FI)%AXsc0^M8n`mEPzNZ4&yf(b zK?^`>f)YH+%nkrQY8IqOEgY|v>rd{oA9|T5KrX0KQhoaB`l?F4-XK@5^YlGE^WY`3 ztblXfl!FId6I=ogn(qG8GEXfu6+I_FN|O7cC-(ccjBW?|=Ywg57lbav8DIy_0Bz$b zeJ4RYtO5cKyVCU9@Dslk>2kvoDEydqta*uh>&T^&1fmg>$j(GU%ft5LJRy zHSp#3Kt?0zJM@-)f)M*E4nbJ}@m4`>4ysriDUgFkO9Zcsin8$BPtJUB&R4U{x;?y947DEPx8)R+{7u7==4uEeVDi%4`eYKZ3w~eqy z>o<3tVysVI+;ZpB&cm#6MlH`$q0OZ=J~nkc4QsaQSTN`1>=RW9cT;zkl+HgB6_sM) zt2Z}igq2eFq2L-VaYWPbSWT!_W67eEDS9#`>s)B3N7^nLy&p2aG=Eryn znyVgM2uY+&Zs2va_zA&vHNG<7eX{4-pf#evSdhoC8!dnU>L*BGAr%oTw6Fq8%s!3a z4uMbzr{al9^d`vQ$)PiI%=;k$mOzJ^DS3SMg?CK00>L#N+*&Z{AioRmAsuqbVA%n{ zO9nu(3Ev#tk*^{gf;;N6iIpiEucH|W1R5ZbkaA{9eE*J_IiHeh-%qBk{)^!_#Z&GL*ryTy8PB-9Vkz zTu4~}l7OK9sgd^nOIDk`v-|90)}C*(bTZ68h#dJNEji98sUu;sSAam8MD|)Kh@|sF zR3KfH4Qa_>V6z~Z17g14lU!}P@qCrX5d_z609V{W+(3#&mMtV{G!fh^;$9IO0Ko;~ zr*LEy2y_rSvsCc7D`eAdhjDKKvIO!5(UncC3C6M1bR3`sWn0$;Sv<^aNUDb1KFCu5 zBxCJs3cGr|7ow>)?vOIcf%MT~$mfDU3M3E{iQ?g^$(K|%<6Qv^a${vefN>5ze)iXIOObYK7R&Cc3& zp8Be~cg{*8^GX;4I|^zx6E6C?2$1EM17=QTMkGWVeo?q@I?FBC-9o#Fo z9G(@x1_px43kY{FZtk}2* zGjZ?E^Ec0HNSqOon7vgD-kR`R!^}$Gz_Y5CfTfVE5vK7k9Ixo#{s!%(a`dLz?L7&#PXK79uX}q(35A&|RX2YSJ9u*75c$%3)9O}EWnxaV!tR`2@w%dH= z#*IsQLxGsC6r|kJNiU}pYg9-)9BBiIJWYdV-Koj5LLmNtC&@klosP=@D2Bm<-2pi{ zuyK4gMEa_6ppNti*cfsbOnOPr#2^r|9DfUe8}%OYba#Wo$i)+PccU3=nCumNb`^vv zX?Vs{_DulfATKEFcdI>+|BVw42S) z-M(D}MUCcf2OD~C7-26H6Z@}I517XHcMBEM85oucAcT#1V*@ zz?4o(V<$hWKV5K2rS$v zSk%eaLeQ8=i|CPR;Ddt=0t9CS^qELDF6RU0fvm?JjUFbhj5}~eY%P`z;abRkq4P*^ z^*$dGWM9%zT&vf!cC{Na$`40KWepm4^bfQULhg<%0cWc}DQIk~EoEr5ZSKnR$~)I> zU{&!k@2*J>@zujeQ2*$I{TjFX?mEpcyR4eh6b^LRx9*wah-oS}@XQMp7_WAZOnF>6 zTei{q^sZnh%LKKer}VwNAe}{Yiti=YG<-Q>57n z0piTWb|qW$R2v_jTy+-x?cRqc<1u3l?dycosX^(g> z@%iGWu@3;vatCa zNCAY{%=g5X#oNI-`;0{3u%L`K~NB6@o?F2fY*)H}F{ zLXv~WF19@NwIV+F6J9(|_Y_)?KgjE@lYiO%xHhrxX#Nv_*B!y>6*MvIx1KpmgU^{K z$gcCzxJ>|4?HF9$dA3U1%HP$|$^Eju+4GJ~#?ja|SP2IWs7dm%#YTA5 z9hY72N!!R@b7nSk_TH`T=ddjQT$ZTinK@{$d#^tHny&8U{@B=WIzShHDwJHE6q^Mg=>!CNhQXY$JB^)TQo5dIbGvtaMHHQyUC za3|EPd9MR2baegc01NAmsbUq%upYWbnW9iw-`9yb$7hGPThJ-tGr5-ScZd~TOL0nZlz*Be{sb_?h5hW{UVn~HA5g!oyL3_(>5cI@z@ty zZilD4tdcxFm2hP|oQmazikvxSaMsYajHpE0{N&d+!lZxcZQa7&e6y@LnKIoo&)}&M z9vI$ACzl%+HmSE=|IoB2?009vvKR%E8jlU*>rmZ(yd?A#wicr;uO+akHh;)bKQMor zvpw4TWc@`sqwf#no};eE@x%U#z2^Ot_Lj43_^m5Lt9o4}@4rLFq-Rc#M#s9->4!~|a=qWm7gmB6I-z!m?&1X_Lqm}`>IER=H?{5FgZ zN$5uCt#Aw0w-`Xk$B@Rn^e*f>-N@j<0j^0or#?xr)51g^!}$KmSvtF?G^+M?!mYnz zWL*`E_;mDNu^SK3Q*Mf&f-FI~+(M?(E_AaU@`1V4s+?@=ax7%&ejblkW{Ni{v*aHG*kTbc!U!^8QagdW8Fw+8eDx1-rjuPW#w> zH7)4r9pv2u%e;SHh#EZ8iv_BBOEa~-ZooJJZ8DdBVZkzl z8U+uE77YfX9BTGSAiaaVUL1SU9?VZnZgl*}I2MvwP{GdyB-?wlP zSYUwwhYy}(X$Xr6QBO+4Erjj?G+yBQ^wtJjuo3!WVY#3={+Fan;^#$MI6>T3ks^A-3gPkg5lP1TRUB<5 zlCfDeJ(D8Uwz!8%d1;B?<)a!)#|`#|$KNo1dt$cUde;SQPuec;&{5S?*=NFv?i(oQ z4v^*Wx4k{}f$#Z_qwjwHKxdPNo`#`RX>ELQb@oM`=){~>8be6y{-V+az~u)V3z#>A z;+W=(i;`96!Yn|_?UA-hRmIoY?rw;T5AjShebv1uv&-+(vJQIUH+W+tcM~U4ap7F9 z|DUv!Zo%ptAlYxZ2wrf^Xyg+9=K@=4JNfZo%9sK*DN;U`a%jhZdz@m2WoUWhY|+R+ zu5*@x*{rVFxU7=Ep4B??V4{Cz{e^>W$m0cV75MegY0_>;ty3>j>)Z%n^R!h&v(?NCt@j-W1rD ze<(x$-WXvk^<5;Z??#MU=-F~V(rYTG)wMWQ#@<3Fo z=DW4d53R}my50_SjUxo9q!=U^M9<~70oY6(_1 z5HsN)_5eP((G>)Q@NWQ3f(~fa6wKuS8A8_$KB2sS=WHklcRI%jey}Az*S+jr)PE#v zr|4yKJZ(2xfjD7TRp8dUch=E2?jvlD)dE*S9s@9le1y9WL>v{}zjIL30Kp6xgpb%vAhE85%8d!Tm~by z0D;$`-B_@ogM}Qv7hJKYNN173v4Th7u(pAaHhKY+wVLxMI=Jb;d*n<0T)VT{U~p*u zOuHh*IGXHvnt7{-&|B@NqSFCh1`VXod#l)pa-HVjp?uy42hTeaosI?V79foz8u-Eh z?Sw1IIqxh0&irhIhyle7CmpV75Yh2fxGysoF?t74yg zZITNQMlMusfI*~T!y&@AZAGNucMu252l#?evY~E|QW;R*TM%ooOEr?za2YPbonB~M zFN4v{4z*w-M$p6G3D8?cAbS^V0-hw;n9=}+eh&nQ=?h#=DwJpxvaLBle+C|E@JqM! zW+3S9Z&2GA!K2CrmBt-#8{H$(mjF>h>jmcw>@e^_z~}?^Okk=A_hFTsq>>9N<)<1j zJkJu8*8rNGI|J=#(KwE+gd}dxyGj3 z#tG{csd*3KvEw4R*GE|0TsA-4^LxHai1|0vC70jvEH?)nZjfv`J!t=2L?bcmk$M0~ z77zqLGqJn@)%8e14|IUf2(ZZ0ZQ!AbS&lA*Uiqk0S_9;LNC4m{McdH)yT`9q`T zLQV3Jp%iJ+ok{g?TBjsBC`N~OaoNAK@6MsyXsXaqxKIDCSh4Hc;Raz`j@ z5VS#mus}lSccWbYf4_^2C9p98L-Vqra*3$LK!i0TF}wlBg*A;B&hkc)9;F-jkxx>H z=I9NyR3Nb|mBqQ#q1+Xzxy!V<^a-Sq`cK_A@R(D8)Y=AF2J>q8)N=^?(}biK?1yV0 z1+@)`18`nn25U{HD-tjPBWMOX+o=%+l`|vi1unBKtsN@f+D!s)suof@C&;?l#^do@ZjN^X+NhJ>DIu?}oh|>MHIuHn(Nr=%9KEVxe!NPzh z?G0QIh~r`ToPlzQsLuaj1vL_a6Uvy;L`mW64;-r*F$9Rbs#UqG-(Hx#!a0FH`Z0CnyNMxS{mA&63Y!uLie*{W*WYW>ufNt0hEOL4)5KN?g8 zj@?TsBXOv+7*))mtPU&jvF~U)(bU#E8_KJDd*+OVlr88IjFvFUMWCNy z7wg7j&F;?5T9L8c{Eu!oyDdbISRium%cBix?X`H?Vk@e?SJHPET#a#XH@C4k_lev$lWS(X~HAiZ3S|PdO`$M-m;x*I_?Ng~vH1m@b64!#Wcq$o=I4b6gl9i!Ky_51E!vgFK?HV4 zV8dU6g0JSe}YY#`jEIOdALE5oysheT4qp9_(#q7C7u?5yA(o54y% za*c*a85#&pYoC_}nFpldAFOc8d>p0yf*p^u1wni2HpFM5Le6x+3}@MWb_ti~H8sSBw** z%dLzLEXB7MM^pH9C{Ns=uzxV*t$4jd>Qj-K9Z?`vNi8y{jCIQ9Uk_XU;mS6r-=>+* zB%iO^=;s87qI~o2` zU3X9*bJpufN`}hyS9`7T%RZS^)!^oizwj@IbHZuV;#Xf6UDj@sdn@%xFfNrQUR&&# z%X<}kE2B$M=TK@**nVSslw{g`k|S=g`;|ODcorKwDgTw*?x2`#{O8$en;_M8?(mew zQ_iK(N2!9Lxa>lqXhUW0+{rvHgHW%-NgA$~@kb9R zrrhV6Ypz)&r{l#UhXM^Q}cs=~J`ud9?MyN@0EdUoln3$G6~{%c=Ls8@(+_+?g~x!7ah)8}jcX$&IC7b6%1z zy|P~Xyy()UHGuuzfadjugrJ(e+cR46wuxX~{*jOD2QI^m$BtD0E2eHYZa;hOt(W0_ z?u0@-x(Zjk+r}md9odkV)&OuGm@gpmA`rGIWYUKP)C@rg-nfiB81Hivz|kd(dk=VC zFZ7veup78)!Ai_-hFSrI24)o)DUjb;c<^Wsqj5io{NU@w&OC$p>_B1cd)Q(i0}7!8 zp$BRP`vpMv5NWiq%x+4h!9E5T^O_^h3Ft(QCH&a~u+C9r#r{8jxMuMuh@zxra=i?U z0^r!PH1NiKN~Pw7b|89$QdpzV#vv053^1Evow!2L^@#>u2rO$PlmSmOf-eckEvSnD zyXl7>*bR6a##91e~Uc(0TVl)x8G8 zob-a8xR}n8|Jzr+>Ev7a4=N!Ls+k-S;crBr*Eg3#x|?HLA>oZ{X;sr zXtv}Ser}XMqeTh-gPvXo?JuY`fJ{cfDL|F?TO!O0$9zr;8rKX3pm#r#==c~{M65yF#^&t1`?w6^2i{<~PJxZ`4`vQ^wMUmh?=8wHO_#+HUquPtTSyM_i&=0w1zT2eiG1mF?aTi=V}} zVbh2w76t98iW28~r2GGQGE=;6^^~hAjkkpF@q#De&IYoTNcxai7h)O-uSbf+*pSppQ1IcT@tXy*^QEr_^-!-@4GOLsKT^>$R zqEKfG1L2b{I>Z>P9z$D26u-0fNRL@2v2T{f-ZMCaX3Z(#ep@%X7NZ5NBG=URx*99H z#_O9SEW@W2n!+f(jyR>Sn88ghNiDmgzDNcazfiGqU3!wXV^2cdH?ygkt;KtLr@%Iq zN~y(&tjHSd(#WSCPNQaqWtR*CgEVj(;-0Z9A&Wv+m?ix3Uigt2YTT&sN{bZsHl22? z3AHY}BT#4nhH_PrTiu0OM#y#l^J_V!YJuUZFxHl;5kiN?T>9j-1=oz5aP$#{MtXhX z>I+zL{|~P6zcYu2oazG5r8!s?d-+JjI1;-zpW5DmC7r3n&m46*CH2zj%uYu69Cpr( zwk)r8%voB_R`+`5mf)r4xU=dc>XAag|AyVbfhW52>ukS#)u?>+##L5^O1neZ+ZjsT z*V!8@_e#tJpg&?1g^l7N$~rY(YdAaqkvVJox_IyF4r(Tlr^R8Hi;OVCq?9p1Ir~eD zOZCq#;#c(&A20IlU11$TtEE=?jf``v$2Bz_aZ8Jhn+kiq2Czr$4(Qy?w;80bc)CS- zya=ZyJox|(Uw}3ag2qW~Uq&)xsLO)Yq|+*z{&LCh)2AYB(Qu?#A#tj>7VY1nBT$JO zIIF6h_=s;nmN}eH{N0lGkwZySkWjv#EsLX?i=2iY9+f-a zsFOBszgE0CZRd`||4ekbU>oLaXsQ6JyG$_&F9ioo`uvTCCtAWaT4-yq+tN3l+Pcx? z;!usulYxzep^fwDxCzOAR&cVAE&R};;bf$?CBer@r*J~?*BrbP_XHL8 zpWdDl{NXK20AOKl%vZ__bgxp2_>|cHWMM3g zMaFTcYRISqlNU1J--H<(b`_Mv2p8hB@&eZ~VSdXohtCU~+P{Q1%v-~tBV>+Iv-P0A z1JAxG7cu@JSw0HoC|eln*C3%%0GTu2BfkfMRPG>tLimScd9*Yyn7@(akjtReg@*7n z0z)Cf6LZK@bj5L)P~!ox$_6lxn*RtOh=n+-A4fTs`=IPHkw{5Jcx#Y@f~c5F2WcGA ztkYY|Q4ZGtgz!Fs_?iFfK+67a0LmYYe{)}8H?>FTFW4>s{A+`pFu4BUfJ{K7%+a`b zOI)+=IAZGi$Ym%CKWhm8%e1u>rY&xY*Ra;um5_Fy-mtAw9<+7Jv*Uy>+FKF^0xQmT z#O%)g<$it@+1%oe->cHV0bJ;_UXJxZL|R}hMFXhj!L`c;Z|W%qKcB2z$~z+yzRKHD zns}D`SIihXACaY9B+1;I{Jc)`Xa1?^FODM@AD&g@P0D&27G4aWiAn4of=m)RPkwMs zvDt?f#*QqqyN`9S{Q!VncU&f;Mpf6z+qH_8nf?{y4cD}X_nqt%#S9!FWfI$WmlDTc zE}saC5_#&lQ53l8_~}YtQk+qvaNb3hMTqoo`dy}e-Nyd@S`Sg(E_ep()ER>1gj&nfa>KWL6N`&{1sbHN87VV2%n2QsGl|^U@ zhy5pyR&_hZ#po;M#88Xz**)yFJ$WB?VCBzK)ld7+xs->i&Qw#``lCsk%0j63hE}8` zUmhpi^R*UT79>>p+PUZnwqWS1gY;Ooiuhkc64?0;St@&&v$rfxl0%JW|FrS$xK-BB zTE&mzo=#Y~suj=y4l9Mg%qO2#2y8!H2v$ojjK(luwpt6SrfA4~Q;4_N|N zGN>P!@G^bh`1Y)qt>5Moo5d(`qm)l1#u4GXkkQ2cXQJag=4_GN;l0uZcdMk)PG}X zIe+!-^YA^LGZN3~Yrm#%-sM*o|vL;bjbQ=%(uD~Z2%;PRJSJ{KM?OSeX)=!B0fJ7GkWECC83jGDOx3XUc3p~G7G z=}^u6J}yVuzdsP-jC5uw!PO|wCj8CMEBsOD{eSL(OzRr;eOwj0>MW+3>8X^lE1Gy_ zx6Vh|{Z-ULN-JzYx-uX#E7nTWAE?{$GuGwVl~$)~1t%Em+|yba%Z-%O@Tv=dJz4X3 z(~f3G$GpoH?>#DmE7s^$k1Ll4Y0>I)0sgGhUp@QSlnt?*W~zgIUE#qwpuhI-NhDzlgm(b&XDD+6NJv7|M`?{n&|`)&(z1ar1w6Fpa7_vs z=x_gy-&6d%A@D8)g}-8Z)71#YkUROGC?pxF&^LoVsUJdO1JL!LaH0bj2Y}8SC|&@* z0Vtpb4m7$fXjZcosrkuB1}ZT9QUK2rWpQOOOgxPk3x8Jv<+-~K380bmGWv)w>RuR%@9>zdVC0zNDApLUgrzzELWTWM4B0Up0Qi-n19!Quu6c z3pr61u@SUmMQ}wp7O-ap$|4Zl8-TWxQMMR_NdQD;6_*}t6hW&3om`aYm_#Uhboj5> z1sJel0022-nx046Bt+LuL1K50I~x5qu(-Ps=HTtiLnYXo`-3=s%R?n$Dr znphCnN2E0X`2fS@L!dUIac@K*)@J~^1jy=1Z4!-)@DMJ8kgg4GN^fK$lR{Kv|1w?> z>I*7#MD_K9!Viw)g_9LT?f)XUUVBkD<+RdfNi?wVMF-~uI+;8PHVRR-f{q!; zi#&k4njzNT*ibFO(*Bet(R+aQI*W>vI}y{2+;;)k+yu5I#?+ z_*0!`pw48d9Qw&$-VtOPyVMJ0l3DZ9C3D`c_-$Z!Oz4-3`!6nY+`le!d0u5Ir6Pqg zLPJ@LE<#ax%_F?VE+WtBT_bjO-QQ9&^pXh%>>96kVgYmpAkQX&}Yqn5QCo;l9G@@0=Ev95!a=^KjZlY!kdRZDmkoTLAXz80ROoe}-kiKE1CS>Z z5%V3Doo%6ud^_3jRw{;trYpsq}`y3BVD8#obi zUV2C|=l=ZRHBMH_V5Cc$L2|lXk=Rq`p@JN7C~Y87iq)c>ih%INYk()dgi^jB?RJOk zM04!b1qm?JpO+#pk@NY!0^8g44Z2QuFX~)5dibXNjb@wqB$q5{QR|#6?tvYcDz(ES z;xA)srE4mi24=op;H^0QtFo?L-y^?;G`jHk zAYqpQZM3HuFrR|v5AnM!0Y?+SgTPL-Avml8>L$>tNG>1r^m$zR8rehOe7CpDr&hNVC5h^&SI@RVX{64YtcBVi|ICW(qIGDx|QNFlsT`! zGpO`5UEI=PkY)Qx`O@1>#ec=dom%Otb8@hH3GZxkwRILZo?}s4I_>dV7cc7TVwb-C zD@H$u+ZD$vsS2%Vs7bJEI6ZRqp!qSwUB55AaNmo%MwrzMQqJ+vDOmnIxzqkuXzdE6 z(atw7_629S_->xfmY22E#ddw+pL%~%1^rS$Jek8|4Or&OQKcKt#hr2(%rTVzI$P4Y zBDQC{@~;!35T&!fcJ4IzQ oc)#KD|7<+~c}@XheI-me7P_DX0Mp-Xm_C3+g7M_k zJVXNn;3kW^)5#jnaY#W3~24TmIkFu}!)6Toxjj0Q&DuETL*q|5gJ1{mJ>8tCs~NwW|>JRkTy7!M&z zgobz|^JQ^OW7Oi?t&>mPCF-11TGoFbagtj}UUaO+#ohf+ggY5GNOIH|J%VJ*^e&w}9xybtO z_RpDYs@;;ptdp@g@!hW!<0CE+*fXf4v-LH!bQb;a1acW5=8b;G&nXK}DCwvF6W1VJ z`e6O$-wG*fLE|Eo290%k7LUSvh!uWd+K!qV6nrqNDLIHEr)W&H_HYYdv!hU+i?)GK zYAG09E>TJb`Li0{*}&Z{O7$n82LwCXCJ{e!=Jt zb$Jvo8Xd8oEsD(TIXy!NoMj4${8rR;ObpOycw)FpzE2_1vU%5q0X<9HqMwcH4|@|c z5h=BfaL#3Lta=pl#rI*m(i-xe)iy zaKydoLIfl?5T6H>wY_k7LK}_BrDwD)tR09g1z3P%wG8g)7R=y(pwdi^m7o=&{j!29^wg9dBU)U9eWh3OV#~9DftgsmRI;(47+?S07K%qGpotMeyhEhh6;z)w|ZSB`lgaxW8ii*vg?5v)K3} z%4Li@We#)fXOVVhSz}6xiMOA}CCjVGC6Dd3O$Z^A(IJ$6P`7=$B`Q}Vq#;8>Gc5Oy zGl;AiB+MW}1YMv9;)q@^4jl!)=9Fb!{0?N+G0x50l{1fpUglIx@k*^O8U`2x!SHqFw~UwtWOG@B<>>F`?$= zsNsLA;lWD;T>#`B!|Q_Cc^#}7h;F-l@jEm<;M7?6Zv^vy_o13$nksxp?T*#{b!Fvw zy+f#N5^HrSZIK5lrLF{a6YR9$CV2pnAi%(@>%lYv^FTDhWWeDRfZ-tVA_PYy7ZTbY zTj)WcQ{go@2*8~DU~oQw#4uR^!Q@||1!XsNdIVpYhWOn2?J43nw}DY5CQ7skq!cfftSV#Nye?iQYT%62Hsatz8Ce ztjuUll)b`g$^b>tY}lM7LAQ**v2Wj@I~TrFnpaZ`v#N=4EN%9Ha#v6zn(VnE=^}1( z`s$iwRU-;>@0^?#?JEXNIg-uz@=WDNV{gb-ktzBjRS7 zu#obDiB}bb3TC=4@s;CVPDEYwa#s(2mWKVjOC1*&IF}Vz)}4iD_6{ExJiOJfs{GE} zvBrhsv+u-h^()WkDygyTiZ}^AH+_(od@0<5m-{-!vf_HAgKc$1=cQCmH6^Ul)wHfw zb(gua5Zvq@xmhT|(+Q1_Ew7&u)g`g}Nes)cltC$Boo@fDxB=Z$hYQ(Bl|v^t9^816{POfS z9BERb-DQ$VXwWXBImNe~PqETWc5;$AJ^CZ<2nFOx15Nz80nGt>%V8^vNL~4(xhi;r z?HeT-oU&8FBKhZ21o&|M;RCvZp-&hCPk-qp+}zT&f1CZ9%ny;5JTK;@Th35kM$j55 zgWK3@I+f|LpvL?4T9gYg37i=1U`H4WWIY=sL(U+ zQ-~V_6^(p^rmr2ZP+P=apLtV4)8&CCE_wD0Z*JdTu|GP1wAX~1vO-#izgA>+JW|=V z;>yQW&6nrk`*n4<9SWOn!B{K*JKY$(Q#-~->);r%Rk|?=HvWdf1rd^u`Ca^QYzE0@}n{d;*kRm(x(1an4oB;V@3jn_M3MWjFP z{gaj-<5w8Qvf)-cZzq?gcjuIZx;o;P2w459+CN{JQzCRK)2fvx`#u?eKe%K=vc|76 zU_fyfJ%ozXL`t;C{<%57)BUx~(4FN{ySRlz3aeUWuaV%n(#2+X50e;Y;Qf3uFFVu` zx@>s!&+Xb*9ld7Owtl7a4)CI;?jLgP`|e6;x(!_~$S3d>3r>%YHORqJpiF>@!vYBU z0#fu~;x)O3%pL*I27#3clmq9Gbq|vs{4&%hI3ocXDFFDRYnqZ9ehWWPY`bDOh2h3! zB~zEzCL~apHvQD%=wWIOWD;Be^C>jdNSI{Wkr%kPUPvUo1^kCNnj!tI4BhBNE!-q> z^Q&#WY2eV;aaj7ZvZ49es9zFNCsxR`<`PyloKYHcRDbVzfyrsxexl!0GQYkpT`HazOYNmWOT?Kncz%mwoY+9_5_(A(l$Z-Wm!d8q~5f%50to-GL=uxHS z?n?}1>-p|vYLORcl`<)PDqyIG8hOfOVMz<76l-9vK{NjZ-3(hWAomL@uC;a$ zT?I19WR&9?1X2Onq1$>ON&wrECV{pM_+v;rN4bOVa5?%Lyi8hG1nnBA$^hqp`O- z%FKv?0xjCl>?@!1Xpq{ByaDLkn2_KOkIg-#TXKwshQ|fQI~eMd&|fu%kxWF~Tco4p zWxy3;{dh73)JE>fp=zuk{#uJu=pJ^P4>j!AB^HU0?R!49T>u5DtrTwrz zDE5>BaVDDb8{YB`L*POC)o~=xt*+oW!zJLqb-D~C8lbxN&~dC^$3H`8V+ zxKDn?bfg{yf-!vrMg5q6E(to$^W(y|~OWRwPBSu;y->oqhdJ z{Hv~ajT)<}o~^&Oo|rSF`+3UBkXkq^zti6L29Gt9jHR9(#q;rctfWNhGQ46nqy3e$ zCA%4Ur7TLV`jD?xc72Zjx|7=d??go-0e$#FYiAj6tMDyG7*;jvO0hnF%0E?f!xEz6 zGnEtH+gZt9*tlfT&yV!EGu4tD5$MD)8af~WkG689ZrgG=x$!NLR$BGwf$#oZp~6@r z!aOwtJu5D94beT;UHRU8h-tVqmw%3$nTqGi1kG6Zrnk|W-`&4{>dD1QDby9OhfGTx zUot#rKYNExw_aeXDcJ!}G2WVrdoi_Fq}JL9uPFigpImB#o9bwbrk$zp1-fH0Vrxn_H_)FXLyd`@$L@hf#cfNd-caDwVTL0*w zvv!MTHE+G&zIpAqsA2*ZYQYC@ViwQ>-zM3DvQAYTugEW~_ch(-y^BffiKPX>hOf&@ zs+(MR;UgL7mm)}@snxFT!)kU6Yda3jTI1<5;g}*jDc5VIs_WCcx1e7D+$Y!4Sl#|R zCjMNb)$qn=<#hdHjGpWBA9GO0Uw0s;ujBc}#P3xNPuy})-wd|mUT-z&nepAixftmpk=iE`0e!dfV(p<0_^IB zmr_!qxB8aLXO*K)Phcz9hlXeAxpYBb%5F|Z^zrhInmakZJF1>Z)6aZ194jxlLXYV+Ddc??RhxG|{{GeA z%mdtm%OS$&-oA-V&;Q(<(eiEOP>UE>0SWypree>MgdBhE>`g(}vKow6q-ZN>#579? zr}Dy>1Qt~jY}jh}N|-(H6C8_eQ1VIiC4h{2k&rZ!wXlUiD60cM&>0R)7q=3o^ zM!R~s8Jay7B%A>5Y66y&fkYqzDU~q&0+Dmo51+$v0B`|T=?NUrhPnv@9N^3#bc7R` zf)_+tFxDMyMR_+0mL$|@4%~>G)W;rMneoOmMsWVNb-+V`hxys+`6uXEbKuecbDz22 zu}RnoBdH5AlBPZYywC!KRE&K>q=Gr}>Y~TG2_GiujNQqH9^YGIFq)aqE(cm9*bG*> z9QoLiOI^QRuI&TxeWi3X?x*OOkny$f@n)v&KT;?9wr-7i9VnkQuIpR32T9DY6pSa3 zGpdFwJ$Juo_n+WJY^42pVxq6Et};?F48fy76F0+|3qm?gaIGpgpAaFd(PTqS>27>6 z|MXHprnebQPb+N|{}_`UD^pP5krdnZ>T&0i1Dm=IbXy}d=-cFHH~inebTcqcm$(W2 zuWUU=c|uv@T-5PKCu14KH(b-jg&zWxE8{}t{YH4OrI8avuG4i>TTI9VgC4IpGQqbb z#x6=puRpx{PsZ;VS8AxektjQMo3pu>+4-I*>g_{hNaW{4ykeK0= zVP_0_sm1;|hC3fCye=|C9leowc)i}9-i}}n4zw7ixG9D?q%Uk(c+mWpgEa-%A7hZT z0dDjW1k+$!`sRo`Hnlu<<&NW=n63JMb{XfkQPnZsnkre6eyqarEm%Rmc@1jyw_&;ayKpysgxKvW3YW4ovYkf;+1R~{mNK@TB* zkW?U6i_z_&hya;JJ70!I{vDEO5ZEYTl|1@VmFca^r!>}{|M<^$w+r4f4}d1ZfiKr< zT&RZsC`B^>J{ARJ9HjY3A(3Ig;2@G3kTmPVA+hLsSlw;6hpB}Ly!HV_21ZbJdYkoy zcGAXo8!ESl9Nt2kGu(MVYd+jci&VAyr+D@IZKv&qsh2agwU%koKd;2MVjBXUJo=150|{=_>_r>|F)m#2d)QG~wUBKcf#}cekkKq1hg>9hx9X?K1D#mxp9Mh3 zcB$;shnnd=JD!v2|>M;lq!yyct4@0FuYSs0bfCa0w#w2ORAim`&!9V*!vKTs=5eJEkPq zqVJS$DNo-vFXeYwOn0^F9AiF81zo0&5meRfw$FUJE7szer}}sh`;Tn{$X_!#R#{h5 zI)>KMYoed2t4>{(`Uf)-jw0v+f&brK99U}bmimzOTYg)8;KO4VDbr)t7k6x<cct&oYNjEn*C zrv+hfcU56>LO@K=>vsOPNA%xEfuc$77PTK2VTnCffo3gb`5I^SlRYU3_Ik{!=%Qc5 z=Og1iB~zl7qj_ZS<7z|$Vq%DObXh8*1I`B>JxDg9iQ*#MRQO*p1I*+mJ@n);!)~A+ z5YEB7-sZU_KOp_gtfusruV^Z-e@$rRUNs|~tu8xz*?eB_A1=cINgFf&A6J9JGqAd~ zPKZQ6lIwzV1Ibr`h?e7Uy2K>ppio)IsbHCOya4`4a4LbO0>TC1sOg0`n}?ulZiSEt zfY;kWwG0gU8eFkDqOo>}&;n}%sIigkqxVusHhsMwaE8#IA>8tBM0*CIEPzr#kd*|e zTaXI}yFQb!2vpfn>W!gzPIJ@T&M+S|tbgOa7a9}U2PfCPSQYyS&V)@}V3>bfY0)0* zMZkK|jw710HPqr5#s8JBV1~+|W{OCc9b_vUoVK)! zy=R2 zIhquMFb}Rh+Z#Ei$m*~lXCUqiMRlmYrr%47k^N*v;ZmFKxVfyRA64VYHWVhc$hY&I zM}4Bz#`UX}9gd%GDQ-(kD#-vuI?(qDIRmrbmJr$Z5`%+~V0BsyWH#&IcUH~n z`tg_4Tu@0J(7jG@kRccEC@b{2PJG^@4AjPFb&iQ@wGRpVg?-SHOsF--CBI{yDLuKE zv%5eU)5#Q4a!R-^ENUiOP|6Bv7__SYaoy)o%Rta8jbzSF3Jre((A=MC@cn#_kTTXn zFlnPV?mH_UM3EcVQ1#lAQ64uUU{{nIr09MlSD%gz^0BtO{LEVCzDf18{JJ6V2KcGM z`rZxCYaG4xwGQ)2(~s6=H75Bp>Ji*0vI5?*7f%h(RWXqj4=A;V8-ep4weV%sg?*CS=9Hcg0e-#>P{u_5@Y92d?zuC0ak*)oHy>q zXSGf$?wwT5aG(43)^kIpto|-1&gXpIsW~O+;xbI3*J*G!IOCr52L+MxW)TILx2vzy=OWX1?37j-jxOIJ5T+=YpFc>kRet`752r9Cxg- zertyn5mp>WiA_BPW6;K|3#e{v+(F_d< z4VjBNe&++E%=a}@X-ZEs`M;*#^-sZ$a2)2X$$`~HM{581slBa_HLEklHEfu#JR z3gf=l%oW=K2GznLTDIClzqrc88}@G|77k#Vgx|cBd^Gk_ak1%Qu0`)Awi}bPx-@y- zAoe3V0^X#gHQ)s&}|x^MB5U9Oq|*9oPq1k5_c2DG0TlU z%D!DbOhB1Q(Yr{Q_$rCTQ)U9^L79)&L<)f4^ zBt5*FAEIZ`>|HJqmR+w~@?~Im%w|t-zs8zSVKFkC=V(Kuz{Tt#Umr73G4@@q zwPNlRLDnR2mhA#l$0s_p0PfiRBD}%CHs`xhxX6t=?ePA!_^ZzJ@>{>k$N!2kXPEf? zaAz6?eglVdehG61F7N^3O_u&K|;mc?&3)6 zG_#yIsecs?1S?08%Lf8-k_89r@^#GLDesASd+7x8?LM9FiU;P4@@CTuUjxY&CXla` zkMNxDY>o5IWp-4i8ftIaZ>kg`?;o~Hp2W5hb?=^0Bh*tsyAn3Yn>)TmQzeu5{cvPY zS#NOL&d{km)lm}TILzD(H1yW|9G;>?Zp{0B$Lv=2*13DD}bMcf)7#+_rGF->T(BNW8FhbsY5GY z9XTvfx^?w|!VuNKrGLeqa#Pt6l)?RF&-&>qe@g5vqBq8)rSoA_ zY4Fy~Wlaaxjs6uogs!9vN_&u<+!>lR>b=!1uIjGgDU;akRX&)kA)l}rjJ+l9xh*AD zGPl@W?{=%t#id`*TxFSmEjwQBvg%34v)gl&5pWa@R>bi`+OrATF!D!MoPNu?M0fId zoWLZW+B~N`zKdD|K^}4Z7jho0-aR&{Rt~)E><@B5HcOsv4?ppScppM}(f^yZ7uk<) z+!t-g23gfhBJcVz%1a_dgX~@;Zq)2-ySE_g0eLZXo$;v<_J*EHrs+s7Y;&22%@gE4 zvs~~-ID%EC6h^9YZ(J#m*pW`q{~1TY=3uoF*4-d>{BF!&vC(&!zDW^!x(i~(Gmzto z=o~ZFKyKH?mQ)CL>8KMN+=J%84W{s{eo-bMh3w)%F2h(Hsm{iMO4mTT`pY2C zKn71lvsSX8GN3{8lYwRh9eD@=-Lkk6=RDf&y`U13_DuHVuuv2T2VN7XV@X zVY%DCXg$cj=k5R+>!}gUa}WMt430^GRJ2I*;y(OG*ZnJuM#zwE{L& z;K$dE9phVR1>b|1sId5L)w7!_(%Ai)O1PauRtvY0vTrgz`CMw+R{0hy)0^qno`*wm zD2DZXoF`M;Wx}Ox;b|H44IUMi4fWI4WcIf5AbVN zOy!0fE4J$&Ln+)ay>Ya&E6%Q1)em)}J8rf~&O!LOUdV9%P9N!evVZZ{dpzyzHzop- zSqt<5P(ta&aV8(?b>dtuZW9W>w_cAoO9-5I={iXHNMgu>gD;XF%dR$UxSthw_U873 zEqd6>$ddsHQx>C|a`G@+9X57MtBgrv*saA%~HTM0{HY-w$>z z!cU8N-zmrRr)Q{l(k-P--a>^?q@s_ z;u%iB85NrBMm6%ia=fCDD;y;kCU3*@``uWf6=^j+%`U~H&d;-9OHMhzt?Uj`3TtIJ z%P7=$Im3HINAOFqdH>l09zCz5YxcA~$glS=?Ljhy>2u9-d!9{bKd@j_CMBgDo-JX& zSNOsrajHKc{Mj73Z=Ey@>p$+P!Hg(FNeB`Pj~3kZb~QLarHR#)lb?&y=Ggc z&B8vg<$nhzh7%*(!kQSHrq#{K*{^1#oFm)V*&Yv8E+U6uyjY55cNXyiOkXYHyP#_p z4;p-ClbHc|{r{9x%A>}P-86WWa7pG%LZn$TVjV=)Rkw}*aPfJEG~x{y&zfIN%3W(X zj2X_FI?8*obQ$v;tv^CFAWWQ*bk&{>e{iy}A-$jbtOogaXCilMOHX+%fC8zCRhgz! zJ|3`=qDk7kvgSUUkKyz<73pG(?nnswt^7EC)g>L99{*aJKiK%is6Bt!*JRqoXt-Jt zR@uu8;jjC=M=nPzSHz|)dhI*4@lAw3PwikdT=;rpA}TFepRP6wuZM0Q zKGy@%uV3Sa!8BpFM6MmC-Vg#Jz4?;2o!08hH~(|uOJJ)3*9Coq z(dOW?|NS%qsvXCPvvB@Djth{em4T2I5^QmXs~-P?w68DIgVIn_V-RXmPPI&9!h>__ zc>pJ^AN@C7-v2praQo6<{$0oyQ^3jJ1OA99lI1vJj$s%}RKu!k?S>A2vFrdMn`gf1Zf%R_{906?$ zD}dDGLioOsQ4Pnn2*3H!G6!QlTE@}4n;IeXZ#oh4EanZH;IFX==%*DKf{V6M&A>(h zD31kf&>nCJbJVtw9)*NVW7v+tF9h3T&e~rUz7;3xCd~(gxjM))Ddf9csBOGF!K3uE zTDz3rXR*ypxci~p_^5|*D_-mm*CVQ~P!x=+!o~-DH_AW_)DWWRO{No@2~yf)%vtmLw(T1)?c9sFA7pVv zNvKyb-#{pWB8rlcb0Sx{>D+!(o24n18KzNBJ$Z7#=i0$U{^XjLK!Ox<^$>lTZl_Mq zh>mY4{1TmY$9tfNv@MjblhVv{~72R7a#%3<+b7dv-KTP?NZ>Va{F-yR% zPNm3kk`QU@g>HYpYmll>?EaNeLciD6_>A`f)B0uTQiS^ElkLptP9n(UyVR(bvtVzk zK-e!*&5rg!?lCDI;tqU3By`2cD)Y45%q5=fQnw5b?X}h=SRw;T-#;Gn{xE%Fg}f2< z1BaPF+}R90)!>#A{A;p>d@v6g!&2%E9z}2A>x|r3slaUNlv!Q*yVqU=o4(jv`acb@ zsO~Ej3s$j@ZSC}G39X#ZV(U8Mm^>{7K5>fi4so%)3OkTB7x%A~jgZ8?Gn}7@~+`%t7py_v~5+n#A!B28~`RL_VSC1F0Iyut0EZ*NHO^)0;kt4dr94PY~ z1JZ$$ql%j}7iFV{TW#^~A9qTp*OL9-4S+Hz9IhQ(B~w-y-9P%^$@YaFl~&^R!v_zo z<8MT-P&%o)*hEx>KjY|^zP3Y;>~K#1M2d_wIO1$FKGCLz^R`y7vd|5*M%V?5+iB?g z3P~o`2SofwYRRR)y2C-yTuB|3Jk%&(5*M81TsY8k-s^A&?$QH6`OgT*0WinB+9C^M zFwZVb=P@hN?px07>&~B_f8TRLM>taP(lz%Hwhl5+2MWx_Y2qf{WUaDR54j1qJC&x1 zm#1=*$H-QB$qRE5YzMaCrgWzFi7wfPoloVq>!N#yoA%ev)rP_Imy$aP&%aPy!_i0C zy`rJ%bfYp{=`o(wwn9+cJptzF8{33Fm>hMlM>gpEMzj7*%#kLgcA42(+J397*W5Ri z%%C97oRvebjgiu3lhgZK?sZ5Cr%#mDvU)fH!D6ynTUk_wQk2VEC)oqWmNFl3p;y|( z46)BCdyuPFwzY{E59{W?-a*>JwdrQcx;f?shiTfBe{_Y!3(=hg9j5219-nTMY(9Hp z>nU23&_4sHp5e@IN(|!b;zYi7)1q*6$6J$`v;$rP7-NrhUmV74=T1MRZNGlCT0KT= zd-0e^+JeB~3^XP$6LZ9gS?}biM!73w+cGjI-*gywng7ev$;qdK{Qp!A9b>e~BHwTw zusIH{v}%>(G5z;=0aq865etU93z7eEMnmva8uLa5OBnnZ{pZ@**K3IdB&ZnSTmz8S zVdRW~kc(=IX5=gHhNdSCd`^Cg;)CiDk5Ou0_RCg0cXc_UzkF@~u%}z`M=;xYAEq!u zm7F#|rR$_N^duYbDtZNqX0Z5>(NmzLPx5_rs=YGNdply(hB#~*Jm6*4k6ZNytb%&O z8>RGzOAZ*0hRs6zZ^QVE;YZj2eUt3dog`O5k@9}tEN&L>m4qFX2#u5}uaVfVdbV*W z<21@4+<&W@nyuxIstzllhWRpytIpse#tTY*LruNzu|w#x*zGyR$&EbXllNZ~^w)RXbEy&6KpyJ(O+(y<64F0hF>%skMV7a@wbElsW|CAYFDfX~;%x@676_``LUSaccHPpk;?%Qwt?Fihf)dS&^k zs~ea7tt>@2)5dKvw8R;6P)#r%qf?Nm#U9JmTHoc}AMdtm@Rl5VsHoWd~5C3p& zn38a-j* zQamjrI@vAyrEO+!#q;k66YKZ56Hee@!ZV~Xp7GJujxHO$YQAsv>T&AY-S8;nW4hbu zG9Z#tifgysQmd%V!5wGKH)u3k3z?qh%g!7LsbPWcx;iCkR$zxn+lhlb2X-k-`0f=d zCX&L`ddQA{dASN;V)Z#}>|eJgq+beMWD0SvCefhm+NsN;Q#E!$R4?sKuZ9w`>R=^3 z!wA;FY5c6O#g=)#h?k?8(;A_Jx@X=+fgS$d(KbsRhp3SUBf7_ms zeW`R*5t3lgaLH8ei6K8X{&|jC-IIp>-Wz*w(ECjd3x{`u&|XHPE%)mdFDy; zD?(7WslI7g#(=MsRFh&n;24eBYpTM~tj!bXsAu6@e!-E%oMzuyu9xRk&1AOgjk-!F z)a)-i9zATRhBCg;cHF@%2noXA#+kf3L7~Orev@Tc)t#uH{p`0c^9Hr_ zO)BAP^mCz3;^KuL7l}CzTF)PRwpe?slSv!1%BEr3W){sfi`GVg4!Z4?W*TbXA@j8| zde~BfV23bCu`lsCnQ*~1p0~!y^|8W;>9sXZjO}Xk=+}Z6m*PzbP2biDZK3*Ces1RF z!Ck@ytNxx!`!f0nOA6!-;5#@~8R&OMl3n(#JEdVi80y-8aOz^Jt~Jjd>Ioa~?J~AT z7+uBO8qSu%=mOjKgcBC|MRAZBIW~8y?!bka1jMZBKbM0;$#~!tRDYDMy{4 z{4zt_wnbmSYfZa*$2Zn{Ty(jDy5{}X{Yrj{C`-TH!)BPm!;M|cH;4wPnqG=wa7PL? zD_JVa^_ww8OTVkj>+bIiVS1B&abzF{SS#e#VrdcYkw&Fkkd-DS89vSTPJNN0_xS0} zU$)~!r@CQRrw@LWn4kM$^F7a0nl>iv{kN*ACeX9Jm(B{1kzwBvx?zxp0o?*C6hs|Gf!10c=zNxqFdSUUH(4`MBMn6eSb(liwlCdRjx4$IJ<78HbNS zv(YyOoD5&Ev};+J@yp3mbgGHlsMxrb_gq7(`L&vbXYck7>=}EwVgnF9{M~mGt3+OL zJc$Hn%y0CB`uM#hH^!st;#Yy;BC+Is_scW^KSFLHb{T$g)t-pZbS!;wBd?l`K9zc2hrrr&(VB^d!!FP zCIM#bTRToWH4Wvwt91;!$W7){Sxl2{!H zv-vMpQ##0qZ?8s`;sW+|@QQcIf449+j*qyJA^lk89xzvD*Nw@_oUjc9WFV`_ z?eN#u>u*{=?n*V-OR({$4`)iAZSb)LDCh8+vCAK>kptKK=U}gtnYr4HFay05gnL4! z5mXG^0DT(teZ~*x@ChRv6G1IBLd;KAVw?XQdQcQxYw@Dt0J>>MzM=j#!80q%)Eg)% zyt4P%21eRodQ#9Czo>}VQ@$AMQOd9CF66>L5BD5%<`h+M;=Z5BU^>I8%z9DLS+4w!Njb|eA(-Zc!?)#|G3{fgp z4$zfm^8w3x+2mvW`C)4NavJmLo>pFYoi2Du+K-Xxl=WPc(Zsw}77Y?kMaf6Agpycu zvLU1}>)`F%?r+Wtu&%hzqi*1;TO&l}7IxQ4>;&?`8jRojhb8 z@eifqF?S9gVR_#-EV;P3bN}!3?bDODeW zWC-wt!tEviDHbtg1I{w>Zmub$k&JGb;nTJp4v|qxti)uT-*(an#_)(_h#)-1s$_*% zFh-v=(_(oQo9k$$vP8#8&Atc3gS_ zxbN)BL9s|*io<4n!efOf55)}GL*%n+PvYI-wvz+Ym9E8znrmL_d(oBC*2cJgr{Ki? zvJ^uST!m2@y*Q(K!J!mXlJBRut~X-jOG|G{rgvXZN!vJsEg(%Lpt^0TCd;fb`S9H# z2`LC>q^y!eqwoN|@T(bNzm{E4FYce0U|_fG0vRK8>mN*}+Fd=~?D& zF~O*n_!;>xO>8u44>IwT0_iuWf!hsXF9%^k!(=VaEXk2nf>9S)xtC*S%Qvha&NgD0 zvGsPlv3t7-bldBgK)Cp%XJ9oUw6?6Pv=FOqfPSV3CMyB5#UA9W0Qtphs-^y0LbDo^ zfMFb|jXD%b>1@a>i;WbveL3&3@?vBS3k7wo24>x8mDEAu4mokV8>s@VPoF)SdLujr zJ`);i1T&o6C_YA?$XeZM5F7K)MKvCAD`=ef!AAU@Gze^WH-<3l_*iK{G5*5y6l38G z%r!!))*r47zonTs2;sy^=__#j*mW)@i(V!hBiRw} z{DP82Ni8Nz)ohuFcYV3qIhktsqe{&H>)#Q&e8ejiSG#6Ro`MjHmIl31Hz~E~?X|j< zsojXF?Lrm)Y;S26DvMaT#&(};jPu=uZa?-&O0L=Whx>V1q{g9RD<)}pMPBqGoYh%u zRdwc*u?BgD@m}wUE0?q~KRuURQz}34w(0l$1ltH&0b3-@`taAiRc|wPGs~WL#;iUS z45RUW+#zF&8kLs7oMgfBl<@i+Yl5`AD;%X;{E)cF~4g6=WA42f=s*b zgcy)^aSxO@lclb{0V=fl)zwG^1uUtYH3f15N}3|!A=KdK=_PxnkZE+o)%Ku>n_;tV znEa_uraI0|OkjpKyxL85YDw-q8D(RVIJO+eXJ_WLll!U6wiW_X#+0>dJ~#2i7ZzR= zZK#8?>mU>p-&N_iU}KMltKS;ah$8faE(%y*rs(foEee7+FK|Cwj%v(c)-np0d?^_r z30cr_wF~3G2$_I8A)TNNdphj6-iI+ojN}RXi%fz}Mo}he_6PCJ2q>K%P9IBQ$e;t0SRfD{^jCAX$F#57%Z#tS=3M zc{9xj&9^4It}n5zTj#Q+LbE2N4{pm~tU|b*4T=G3n|?yGHB-rO$8X1d8Zv;q1J6juXz9fliG(m*JvV zNMHD|xUtcTKEV!@-WjSIL>mrVqYM%5bAV{@);U^n+$B6P zp=K_+PrKCqaJ{@EHirdIx^F-88Ndpm5AIpE*Pk2ildSC$+mL$cz54F!xcT)YeBNpx zv2q$dgXpAttnbzQg_UieHOKCIHcgVE6sv^BSKiMPw~RC}WsJInB2lkaAxhcm!M)Y4 z^vgW=Ppy<55Z~otU5Xz6vDPvXbsaMaqPPF{iC6-FtdRJ&CWFb>H_l6)OHcAfs%{dG zR~GK^RZ7funP;qzpuPYA^gs-TCnI1+p#H!rFP<LG$MdiNL+Su(HL!(Hbl#Cmj;5|l`q62@df z7Lk=zR+yJmIV4iX&`GIl$>lotleV$;Fkv>!8YBnH1S9{TFx4F*Lj`%Z7dhf)j^7Df zO8|~|ksm3*KeDjS7@8&sd%G6-K#5q>^TY@kM2kH~};Nn%_sw!&y&V#Ubjm1r<(+t)-_J zc1X@1i(4JSVD^1hUU@WjIAe)WZnvHs_-i=t3ah*;I6B9I?ZBKj{U~=@iEMLFO>+K5 zs#u?KN`S)IQlWnEbfg45$+VH;@b{iYXf--e-ok^atw?e;u0QB1piY%>X(jw{Gy>H@w`05EGe)`;jA-lV?~o| zbL#G&{1r7?bm}Jp^J1i_ENZj?cm+F3EG6oK+c;m6?2K-KtakIk+bCYS(^zH}&Y+ZD zK}V^us_fnuOxz`$N-@8F*+-~Xr>T z8-OoBG0maihLrJkYU<7-ZH=p+yO%i zJc^Qn3N|S>qPHee>hG>$3y&gWnQLs^_%y8H4dUY_bC|i5q!WC{lyzzKi)#*IGdy4n zHp1(BhmAB=8@78m)gKD@zV+&G{dH&BuQGS434Voa0D8*^8p0_O_Ly%;5WxM{VhBNF z_XUBxJT{zd#?T>;NjmxyTD$LMux^DTY?Q6YCQkWaF!S>kY@6Yw*LM8yIUY|hMbSd#&N9P9hn@VILQkdWnnYyhYq&Q03;m(^7SsU z$PD2DbtsVC$caEnoHqioR*rifoMZbzqz?f|Fb_kD-H2rj7$O08Hl}l;%GM#?k>LKh zxe2|zoc0?J{dg_M;dvJKHfr#-qo{RCQF+9PJ~!dgcBOE$f3Za9zTk*9p@2z}CW8|R!Z zk3_(tQjFe(aRtD24P2|Q;Ss#;GS6AtLHpLdxCO9>1P&wvF2R!uRi% zr!NEu-}F<#K1)2b6g?w~tV4;Qgb8DoX&tLCC;c9He!ZleP9!QJj%MiVgQC58P>=AB z?{o@NTvJ@3AV&M%2VW$f{}mt2{yR31X#ozGw8Dg+#RzU_b)MzxyNc8>d4#;et^rt}0o)xh6g8|7j{nrP_pI%( z|L9;n*{r4r63h`5h{fpU&{B+0yc2jw{sb^6A)q^%7N2L{IuEpaUL%+_KgKD3`z)>yZIoXsDWC7GKto7hvR*mhgLpw2A%v zY|{igCP-^8p8ZwEi13ZdtYD}9&wmwSer=IYUbT{wu6A2H2KNFZ)Y28T@cBRXk6a-} zXp$@ZVL~_7;NdCQg*o3!m^kKf+Dek_jkYLB4&89G#5*Eqi$L9p-U5o0R&CoFia%@q z4%NgzlprTdlOHg5n6J4DhCVL32~FjAa{En%=67`b9TwIp`V=ih&LB$4v0&2m^`nts zBLnZ4RL9R7XQ*kXkKp@Padlz{P-mu40Djhu`vs}JzXbs2HrfX|P#}aR!G|b=NrsCI zw8Z6bqb9)hR`Qp#C39-|s==2Isa**i${I}gRba<~*sdI$q3{H)2?f{BeyR7Kq4h># zW*N0-*K-w*V*{Ti#h+*r%h*`A#M$G=vzRpatp{mn`j(d^o>*Slx+@FE<|Kbr9xKKR z@rpPXFxa#AS8xX1brgobt@qZH3A5!mhwa|SN=3px)7NJPD2Jj}s&w{=F+q*&LysP# zMYG-}B|Wp*oo6*w?2f9BWnTZo^=mNSP-PG2$%dcp3rDtchlVgSg$P*=0V2*gS9VWQ z$pSsq&0ig||EH+Zh=2koiU@!gt+9G@(xL{$V$?;6W8^uJJO7M zLkVN`>IGq9cs+TMB(MF;p<*POAo7*gYrK~?>Ee^S51igoj}IT)MO1!0w0%an>itV2 z=IlCpNq~G*h!J4v%-CI5#;|>V_+=*IUm_Kl{8Kt~!{@0i#K5>-bvc8f$Q6=DBjMori2aTCV}2ZcR_pMF8j zZPfo&0Gk+?EZ~GoC=a8zo3`dIOs1_i2yc0O=JLrS7S~@p-9ErHQll_ft?G^&_@DwB#S4K1V*|?gk3`|{T_K}4u!{Wu9rCqe*b00 zcufD6UK0f|ARFKY^&aMgncyzNvwasox24n@4ezW{c#sD-4BTN8r%-2DAKk`N>9dg@ zlG%LI`%gV1@`tjet~XTZhmk<09n#p+_>@&n|JsrFHCk6D8z(I26ON-r%8%sRab$P; z==yahlWs+dQx^02fyb*JQhFOU1+XDxs@GOW5_AcW1qI^>6k(YjgI5^5(g>^MxGzb1 zUH!~<(d*l|;xPr<>w?}>o;UQ2lZ;{IkY&xp{zJoPS?!gDXkNPBe2`x)79e*wP zb!4gRZ6SR<86Av_WUG5WF{^dl^2NcxgYMkmdY$|bzLCGWZdM= z%@{e*RNqq@HC;|@}4muI@-MXCB1^#8ij{d^$1Ne9UZ4=$mafmBpk24)tBHvjw* zD*G%s`}Jjzdac1PQruPpN~x9^#GL7Ng!z6jtOK12LMcx0h5#9A{tS+0kjy4SC8_c`N4HAK>Ns!(}}~)x-CfeiSSO zJ|poyBc(Ap#-06?m0J+$Vtsd4dG>rn(2iHu{}gTwKDpp`9_5qg)vC2tp)p~c42_Y{ ztD}&WW}@MNR%l-B$`Y$R=6P$|U1~ff&%Hq`YppKvcGS6*8N=(CnG(-)OMBCD5*&8z zdzf|D5n-^0m`Q=;AR~m404(U>QU)VKHm3Z)Jn0@liaUcn#4+P zDRpq94puqNGEklI|NZemsSTuV@8$-j0(|PFRMP|S@k0as2xkrlR(3W8Ci%Mn@N6E= zF?h-8@$Iz)mwo`DSAis36s z!albv&o7#AZOzKOJEc`;_KPgd5E=twtPWK_cXrCs4z1w*g*Me>$G>@$lqZqkhr)DT zU`hO%gWah*j)gM}0B)%otg2SI2SAp<`9+TV4CK!^V+Q=MWAgAlq&i!TS9QXhRX2xy zdAQ-d$kGVxtchvA?;%elGaCd{Bw<`u|K9{kNaFTM<~AB4g|LNkCxAS5oO2LsCG{2$IM zxETa?qonV_yxs6Gse;bsXgUVfz?(WQOEuq4HO+z>=_;|3a+&oys--2G?NuFmGT0hZ za@q6^GV8bx5nl_#9u}cVm^e|H;x|4W#H~^kFj^e75bv*hjfBjlhb|F3t%1i+MjY(`%#PyB zFw}rKR2#Sb;hIuvN7#sc9?sp}k5HcOBTpIz-9J*f9GoMVeQqjUO=^125V=M$)puRf zI?6yJ#YDvOdknd`Wt?YxTR-avTnsK|ZmStY_>RT7p+!D*iqPNH&$g!;7kbw+sxv~O z7rvuLkPyhCjxbdmVbcCf#k%1it}m!0ZgwnGpsPu*kLDW*oyU9K|0YXg3Q(3qsk%{w zBtop9b-U^G(2clRgJY))G$Xkg>_sEJU`G~eP@_^w%A9h`V6Gk-i7nBc$0W%`eV9+r zNScT0pT^ORZHi3}KD}qDEen5;iO}wfN zBb5Qxo~0&L=TNZZKQ9d>=#iFoqpp{lsDzY~-qNPyNI1t&4 z`NthvXD$_wIcr4<*@e0ShT6WSUOS z$L5I!3)C8hK7Pcm%g1y@zoV&?@)bzDDki~7FOU>i`37;djY@tjx_7u{gnju&RC*)w2<7X<(s;PrkdKRCE^>*dey(m% zh~9V5uFzYwJXSqV(ck?5eMQ$VlE%u$j10jJmk`F_kFA_>NmF?z73y*C8|e=Dj%ku* zj`!V>d4d!&me72?xH@H=BKdPQBJgP3tR+_O)9WprCW*~oEBA+hvYXyOXta>7L&cO1 zS+}{UlpDCo%7~zDh9w|E*ap_6^i zT3fQkzbJguJvFUL)q8~WzCUTXLi!FIBq%CjLIKspAkYg#J!BY0OJUj4S%5t9bYucR&@kwilm2LK61WJC(Y@bG-EhVkp;S`1Y&ZFPwpG1%*%+hs-msKQX-5U z&qJnU)(i~C*R1mR>B$rP8Dr9C9ZYlj8@zok7aMshR$aNBpn_IXG#cS}Gv1;m1bvg( z7WBxv1Ay^vR2B3f%mqhSt(p4yK0a1x}9^Lk5Petg`{L3ro;lX7+j8KhRw zR;R5AHTRIuu*O)$s2HDpttqiC>Aa~~!qUffbl}#*mn^^(Gup&EakX_uwqY$KXTVG) zzp^9a#3k|?$_}AJ!h1oDu>}mGS2-y@@AhyqqW<&wG}u#^b~)R`+#%ZI+_IkH87_OT zuQ`Y2-Fg+FraTjS%3G(V-p5?%Lkm}w{_@3E80d%-GhhO? zms)|Ct`aq5NinCqIPVfFrv<9r-+5r#R|fRhWoVOb1Ex^IeQvN#;7n454D= zx&}$xmBphx|4a(H#jz#`J8Q|b+B+rl`;4|37iy}q-Ja=({7MJ5;w&RXg+3Pv#!G4D zHTjO>6xTN{Kdu%vt&a>;DZDl@gB6|dHR(#n;=0;go$0gDs3=eF=?gDPZiZZHYC37n z!(MrcpTT#}_@a&?n{q0%oR|mQa=eM#ulG4OY%4B48T&LokGBasCqn22l!jwJFfL8X zqnx?78`<3~?^C2#S*Y^%%c+N|yz3G7T`lu$K&bbk1k7TM(oOL~q78eJj=?-;P=5GL zQK{)y13b85u`5s)(B)qAJ2f}`oXzGGj~nW}ZXQ(32iQWO5`=02rO{yj{%as}gV6lM zWvX%BcrIJ7i!u{`AI;n^imV5fzfKCc%ApMkoCm{Yq&~nAK!utG!AzVhlIQ1F!b}=q zu^oQt$oii?RwViRdM2Nj<)!j3^Tr+-c!t3oP8{`I!C(jupp(MNct1ch;wOa}7r(YW zz3`;P!!IStT~*|D;@UR6g@l|Ma&k)g`^`si7Z%c6j; z>{5Y#T(_Nl|2mB)YmI`zqh{BQe>mvL7`>j)Xh7H}@51!!`(o^mK^zE}{}9Xy=DZ(Y zdXgrKa{0mdcJo>h;-+lLHJlh~P&R*^9B>knn~E`RW+NtkTa3IR9?VR=80^!{Pp4LM z`tL@eZzyMKjt@l;zqN>jp{OGCdE2!enbmnDl6D#sIR}RTLul%#Haho{tcmDq&P;>! zwxKaft1R=gzK^2oCH^2+KJ>F$L6a&?KO4*fPJq-0D+DJp%&HoQ=-{M>gc%#Lb!A5d zGIESqe3_$kgH;jom&%}7D~4RweHZdxI1GN-MjYnDF3vW;A7YvCG*1XA;q*}e3zf49 ztKwCt#jZxaVqX2aY8NrnC}>Tn3VZ$_R_XNY(d?N^V=Xlz4B0RZR`M^O;7}ij-&R?F zxZvC04Hk}e9H;W5^`_8O&3jkjL)` zm6K&;*?zdS1oe9#g{6h?5gId^ zz(+ElGEA=?h`PTtoagq>O4-7Aw&I}~Ag>m#?c#tSn7_GCknvN*IVzyp009nq@J*_o zqZ)RXAj?h(a2CI5%Q6yroFYGoHz@E!nU884D7+jQl;SikrV*my$e z(%~+Ov8k8e^qj5a`~I-mu~Ac^kp^9-s#N{o!2Cp6KhvuJc)&x#9(5RV=lCvc_~-R>hdOP-_?8i+TRV?FrijsucVsMrJm!DshIlYhS$X0W&Lb2VXch zA_n;NBRHcMcqg`(i3PEFS0D3MX(fasH{h?c*A>YL#%!* zhA$#rxgjyh!)Hl zPfl@w{aD{j$Bj#GXXKu1GF!?LSMasJSYD)^^koLQ@hG-)rZS!x$h|XQC7Yknf_;wC zU$VY2vPPR&^CIu6Vt59S*w&7Mv_#j9#y?YQom@ZUhrar)s`2cquX(Cl?`U1a4+zGQ z8>Q7JUS-Ieb;_Y6DjdoWx0Uf~VS|pmFFKXAKJmG-tn?Fwhgyd-YBhzj7WHrmt74OE z>gTTd4WYe{Lj8>*_f?$(P!Mixgii!6TSGWV8N~apndpalKB-i@Y)`AC-heImE7TSr zy~Wv<8m6M$WpAQwYl$1p6{M#uFU$TS*Pjv`??OKrSrHi}RzD|N$MPA!@EX`^sIPl@ z;7sV6B&Tbtj0m@xZj{fZ$Z*-HSE~C_eKK#eU?7JqLuNbOlZNe3qofZFI9#CY&A~b2 z`!e4K+;)35Z{Sxt_NzQ38ry((E5A?{k)(fSTVLeZkxQul;AA&uzTqXf>YC60&fJtxNT+*?q(WmvGB+^vmx%A31 zdbzuXBULl{ruQ}M*uCQs4-KB^US1P9i~%3_EO;)UqAM6VcoF<{5IwJkjADi~3ED-u z9MbK|wJIt>93H#*=EatEg$~vYO{zuIDdsg6elz6Qk_pYGJ?29}@^z~gL#21LcpeHc zw;X=|QBWO+6Ps~gycrmB7!$~b6QKFpw3vE%TXBel`6M~Zti?IZ{Mt_?S^M5lo1(zZ zg>@ZsZz<#=&vE#jn%?S7ZIUFNF8N^PeHPC`qP0^ZO}-NX%1A!dh3rNzaz_oYv|Euh z$QZWDb$KRZqz}d~Ziv*g0_}x}zLr0`&lJ0^-e;AaTSi8(y17}xImv5=g8(RUTzB1i^#9WpedaW2a5ra}^2JipL@R7Lt_4Ef{)GmFUm(?K|%|jD2{pCL2t`e(?)>lY< zASdVAiu^s-gl@W|Z_&v!);-p`DCdnVjV5YnsR-?=KWS+$s)Mag#EaX)Kv23UJvy>6 zn?m=e>tAD)mcRp2oT+nKu04 zF|_kVlADfati|Jvm2YK<8YQ-dmd*p-cd*5x$VP&cZ%?%|eKELf$Js&UAnEjNsu8~Y zGOxpjM-EJj5cbRWu4ym93=ZxPg+E-ie<9$Ag!FFVOI`-L?Bx%zzaWu!qN2#`39vhWz zIp%x1GP{Y2Gbp6TOh$l`|rUoY^ zZxxy?aV79Wco?I0Vj^zQPi+Y+Y4P!P#^lq70$&8JA{Te~j4V@b#p-c*!$SJp6~_IE zJaU$kPi097pMTrY7b8Zm-JTzip)PsReW5|cFJn5%lu{~SE(wENch46i<5=FchH-|*gwtN1VqOiJ&)e-+9E}zQCeixvbqShBvtw8?Mv3LZ6 ziR?j}2Y$8At(?qrvyD|iT%)7F>(og3dc+8lHUl#q?|-*H75L?(SllZmg;rDrR*x+j z&BQ_IiqY7)c>Y(e_nLO}-r_s%D!h%dUw};$UAx|NNR#-MFu||bCf6crraXEu`$$gA z{nv`ac`SxACV@G^*rY+f6f!C4?sn~j*W29L8CHG<j1fbQEyR>H!zz2vSdOM?~hefnCEfqZHOMaW((bF}U70Cq{n05z%> ze?P_B@1CEQuD@PoQDkJ}nbpS#l+|EzUd{Y^-Xg&c;e&Fb4*B~aK*k5;RL4?Hr`s~36Kmq#vyFYDqti;Ii#ZKyRnzrDn0$J5{GQOX z+R1+9$}5Xv%veh7V6~_-X6Lwc!}_MiGihDQzLmE*- zU2;T`HRMBNNSO2|8H}S}4`~cEIzs|v^A~`X0=eIB#8I-u;BAkZe3LFF@w&XeZ%U9; zs0B1$VK@)cm=YeeOID_hnYA=(--{}*S`-UY8?2HOP4F8JtIRiw(PZ|H&)jb8)5&{q z_vG`)`}ZE7(krX|8DMzYPZc^q*3&KBfr{>025ACqvv8=|w>s!Wt|M{1Yb!a~%n?bvaN z0TW7M$}V!_aCVDMyX3-8zOFAK&$m$#d$;JKI?XZr-$Qg|QoL0zM9KGoog0dyop)if zA;1l+Hb((P(x94w!jJ?C!&VR=f)5w^gx;M7$FUD52HVsRFyT-L_=L?8XzC&js-;CX z9_x4^dfdf7F4O3G`$CuUqJF)n(~GJ-hu00(o4RwRR-Kb80LyR#cD)4o0i|^Bcn(w8 zsCfMLX=m3B8PdxMITL&2Ons94GayaSeS}q?%L?e`H=*lZK|s2oqxD~+Nhl!ka(pjanIy%X~#_3dn}psb~T!JphocS3j1V8Cnm;Q zytxmXurS&stNFC6jW_k4HEwA*@iKH&io8;yZLBs{V*rOKFt6 z&qwztiO-)?w?vu+-ifAg)e#H5TCMbeMm(U)b&BiAb7Y0%aIOo`FtA+@=g`x8NZ355 zlDOS3`_f-GMwLuAs~HbnAt|-5-pLNTgDw`nv)<<(y7IQrisaK0<5E zm7>tkufDb%)^=yDYZ+i>FW81Vr1j?{C2scYsZ@`dcsuRF@$Z9bEjXf9M-hd+!N!NyP+#A;KsIRYo8&A0 zdv!O@=K)#=#2numpF`oVScoQOtGN9S#@;ik$t~>KMbV9liXagcBq}Hp1VlkVN))Ao z)FkvMy$AuRp(HjGg7hZRlp-ZS1nDg*Mmk7WTBHO71tg&bLiSnN@AsWD&NyS7KmKxW zBzc~-?lR{!<=y-E+g(rMJ2OW_kt-WyKWcaP5?clUg~8eh(?gZP?n30p9z)jEr7R;X zgXO$=K1E;w^vq_Z#X_7ED0XhlZl+`b&e77mpNf2}Q&U%P zYoqDZLSx(sIO9{DuFzJb<8#c zJvXR>){&=;-V=Xi`w|+h8F+?})u6&HrqApZ>brNwBPax{y8Oz%nj-SMIc5IW_^Q*L zA_0@7v*p3C5BLsJN9Hy9y#8sg3^m=^TpOGBd**z;WmkO`-)cIE^@+q&E86Azi@UZ4 zz<#k^0n-sH&rG+@HXBx@_}(u#D5`XMtu=`34WA552=J2f>s}pySX0ZkcxSPz5RS^g zq47N`Sa-Ct$Ed=#A+}&aZuGL`<#3CtFL(<#J8Lu%AGlC|{_oUhquA-Y7R0f}NalTy z*|ZC`G8^0ar=&jjV4uZlC<~#BiQ2z4Tha?Q|K&PeBiZDJROUzCo`cI;VPo&s_A7|5 zOMB(Y)xKHT@h~2D)Y_WHZ`x!yf~DtAAgfYT+=%nQS(ELcxn&MsJWJxF#TM@j;s$Eb zZ3FL-4c2eDV5~RK&!)*A!Vh&AZ9f|HF%QgKUMCugPUA1%g7lQU4Lez&Y7#5HuAJq) z_99(&C2huKq7M=d-giHE9z%;)!N*bWlU*P{aF`465rile^RKG}t%wbzk^7wqy789+ zbzWbh;ml|Ls&%QHm>p+BD_96kvt6!6o&(3S#^xb)16i@a_81feII@wd57=BgTWc1cNrk)ISqo97Hr5xoZB;Z-D{ z2S*2kHv0e1@ei2s$@Tt2n+eX=ciaw}wTOj7&I!g@??zpR(Rmn03z$Pk(`K9Y_AU8^ zh`;#lo0(EbfY$8)iQV>CZChFm%RmUvFCFi~nJ{(?XD6;&{=R>v@@RP$*U4uWZ%)TQ zzYFaqG@;o(RQhv#=hAhzDha+qY7*AmG(sr#KplGkx7uWY;G^N&4b3zeOVmu!4M}OQ zmsJsxbGKt3^M)l)QE(U7HV7K-K@|g&)W|I5llk5>FTEhBxaiI2B~6CW&@yb++3!r=aPgs-1K%s$lkC3*t8gyqFPwP9J{t;#*bY zQLVnJ8~~A%fU!(5Y!u}$`}1@W&pegpNu3josJ?#uKv^kmJx(pCZcpk{Faa6e5{6*A ztl;yW6Yu-M`RvM%l(jhdbU&Bu*|t;cUZxW9B&dusWQQH=N|*D!-X|g*Q7-WAzZGvt zJF?6Ih|>uw_+)m?AP4Vo$GPKa5=Zg>bAdk>aAlP1lCPW&$@q>w?L?w zwT0(-3(pygToX<6JvW&!mKX$#CavsCA!=H%=}RylBvAJhZQB2rJ~#Bg*Lr}h-x7)_ zCjjNHD{z>XAnwlnkjV+bYG0Z~YKfkEaU9HHQ^@n8GRvWfb4~b;3x~5_>x!EcO}v!& zc_`G001B#bik&ZM(as$VW8uGsHJ=9|wyev4#ue{2Bev>BHqtlBQE%`)65TRUbD2h+ zspXpMd67wN1a5BOV%5-**h{^mz?{+FFkK=G25aX0!lU4d|M8rPtzFbQ4_S|cJ zO-mC8+bs@NMgQDEcM_V!yb2(05erlZmc*L%Gm?#0xCOaot|hwZ%MlydB)ZhjKyOJG*W1Za-%uw{CULPpM zeNc^KII9J8LKe`$EeSS`J{eO!ZlnYk^hx}XDz2?^W zuDr!w3b=E*NRtNIKE8Pp?aauWbpES>vXuViugLgQpWYTiE3*aalkB8hA>hT3#-H_) zx4p+CcBi%?hIuwU$@|7)WhX-osGWZc4kLc|yKOM;reXwyBR(BGXKZHR^?6<^jdU9|$)=aj3)z)&i5)h;1L#kyS8&1=`-6 zFktQl>k=z*8CXjrgPE3x^-`=*9R6L>xkK~_;JcPKVZE4Rt$*P)qYtY@cZ}MoCHe-f zqHt)os~g+rh^wjo5$6NL`laf$Qx{*PRz^XICw_Ip@b$E(!xnakSco2&Jd;%_$(
    Co{B~!+$?I2BSnP3w9kLj$u&7Y>n&;>V;<_`ByIf@6_HSITq z=>AZ1o>!%!dAb5jEIn?D`;6;~M3kSnba*qMGDT~5K;d&$y$^okZ*{ydB&3%{PLz*U zhp!$f`CYsi{N!Qn(80ru74(FU^qHpjKg(M^Fch(vleu`4>3PBj_pk|a8En;+70X8> zWl1ZjK~lyv7`(b}f!yyca%+EXo^YPP7EpY}O*I8QMI!l%Tf_#a=nS?ut^>bj4)l?3$RLh}V@NQeaw(C^O5s4WwzKKs~ zPP@TpL=ZbrzRlRrqG(>Sj7V~jIXnvv`nj}JY0p{f{pFQMrM%5`zdnsB89||cWeX`J z_7nI@eAp|4TTPmlJaY=!*{t%}^a*s=>4_>@*HtS6v6w!*-|EDjzl}mt>yE)S`QkZq zUyaHaB%lN>#G3T~_OHZ%yXL_dnS<3Hp&9Ze{ojV3rr@Oi2lfSj6)#nZ=@NzvtXH~! z8P9or{)9#Q4lcc-cIGU?Qp`Vy`g050Dx5=7s>=q3ha|Rb-N2LRfZC!y129bp`!C8~yE3>txhG#759Te6_zF2`UaF%Ij z56Ys+$WVA{ey1~5_d=EpBJ(H^e4?{9&Zy7X!W3Tbo{KM?@zum?Wa}vcHn!be7_~8W zmm?eN_9S0{%O!{li5jC`T{_xcG*+Bw6rBK{JUNj1!^qTVtL-}o4iy8yHi^E_fjQ^F zwI&VysNd`BDLrC-)g>3|=Tc3_SP$YWU-JKqF+!Y6?2nxSWn|WXf>M=~e?yJs31z8U z@}?To&x&YAK5Jg}+roZrOr1f8bK;>>ndLcbyB`X}MX;)NtCk1Pf-8<&`510#w&Rr3 z!o>gOf@$4xvI7cfrQ|$!(@}S}*AQ{hL-G7A^O>%cxS9gqQ5p`J(sV#1ped8zg)C3 z*bcr;J#;{ICBL=Ajn9JWthM7)yJMn9t^krFzKww?iY2s{vvQrSu3;a4dWQklCoA$x zI_FvDw8MS+>z(*WN6qce8j*|JUVnFMYimXke^|iO4cG{!W4~GIbCcjdXgvYXlBjj1lA(b9sh=>Nc|$ zqz~m?-#~fWjlHOk(G{>b;N+a5(&=3Uo$S?gh_QDvjP_zul4Q+oO$ z^-r{1<9mL0F0p@qb1lVVJDACap))i!I6cH>Aav=?t#!{cwF}!Ny6wsLy^HqGZ<^f* zHr0yukx)pObF4wHcrA;^qZ*HS07Yv~k7WIOy;i zTPAANYGoWA9S8(!f)u+HALLU&dj}T<0!Yo7(?qvT`!XOfhyh~6|9tA-IN_T=L4EKM zC`Eiwz!yDZfcP>13EgBSGsEUQjJm9$3Rpc+-G}@#B3uZ!ojQOr@8y9;LG0~(S!Im* z#6~K14t`N%gnu&al%uA$qX6q}vGZ#m@_qB@|>Og-KVKFCjy+FQ9kdB$LoY^6D`SRZQ%n6dElJ<%fv9;C!zAcPsnwbSzM~h9^6N|0MS*usGc^feqnw?I19Eh zxQFZ3dqJ)szMpbP#ZvaYU)v7?J7nH?G^zjd+JZYqUvrN8tSS)n+cM99+g>os%Q^~v zt@3(c9QW0BJN`=apWe-QIvW$|gDPV_)&0P5j#YblqunixS3+LFv`k$Hi3SNv3^ENq z7s58_Vc%wa!C(&Qbz}VX-XPhStrB)uRPT%LP87S5H_Ys|jplc6^K9MTr)|d11jW_h zqy99*=on@jUr(59mlbA9u_GZ`W1FoR*>$s`_=#{Vykfb#bvioDEb1Y}Zi0!W<khU9P?C6t47) z)hP&47m?Nstz2kFngCmNQv}#A9hwG>OCZ=1%X69u)dQ>A5i^qM?{_ET%o&D6-|Ay z(|aAZeFMP6CSV*g4v4QSF=KGkTW>R#vIp1OxGSD6bde92C%`962iUqbm$IkkqFW)M z6sKZrHXxkaTo-C2g*FAy!msOU8(E3kG?TC=XMVSIZf5hrO=UGg5$ohs{~g&Y3xC~5 z&7%}DKl4P7wA5$Q{4kIEnw2Ijq0=@Xw4BtNvO==N${G@+mh>zgvS^N`eO8~2U-(p; z{e;Z>?q}3JGLLXU&1)oje7oaAAK2T2ZmSX?m0lJ1?+4KuOz_&Yf*3cD0ipoJq!(+6 zZDn{Vd2*N0<=z7K+s{@Ptv*=MAkE)r#N6ptE z9KkAJCLT_(csS#ROOD%T3Mm{c9jccC7ksBvrRPGWQOC&~}IFJ6&Zl2*a{Wh=Z zJ?{426zoyGic;(s7JlO4Dt?Y4pYf1#z~lFp{FdF~vibALE0&X5hl+WYRBArwLV~E- z@Odc~=;VXsQ#_HY?p)7vj!|jjik}xiAu)~F0O16o|8j)^@1!~#OT|S#O0C`}R}-}v zuqv&+B7qs3+Nd+2!*^(S2S`ZGtOTw3S-lLIwlKZDPF@fyuXT%)Ok7;OS*od>IG|HD zTbI(EVq~Rm(%yYx2iEkpf5OvV-|uqg>1X?YWJYjD%wNvWiw7Hh-BX!k)6O&kkqiC- z%!%e*<`Jp1?zos^H8+MjhDXOp=w~+LK3ggK@BbxjrV7aB3yEGc^dfe_WdJMQAF2S> z-BILgPT0A+-Jg}>#MisorQS2Y&KHQD2wyG7s|p8Owk5n#Ds3s|$xMLzGae8}2LoPfN~XTv?khL-~d z3ceiJno7CDcG}Sg{pc;G*=^dH6M$J!30Sgn(H>lxj|8m{W*}-&9A(lS_)=<<0 z4vBT%G^rgX`Hh7T$H)eq7d{{KSRmyKz5B2o$@ftxHAiech*Z=IaayE%Qy;Q?-VLYoS-iyBiIm7-YL+%=~Y;-NIdECEwjKn{8>Z4th3C$^iHmh3`3i zeiJ8)u8!L(e7vW*_j5G=K77iEM+;l78MaB4v9z^VNJ*)G+1xa1d?!)g6x&uzyj0`HM>&*bh~D ztX{nKCmMB-rJ>YuRnLH-`x-5SI<_g~U#p+kslH#8@e?*Uu-QQTfu^97x6!nXSM^@6 z-*kO4{4#4oi#sHwF#icoHD>984O>dTN^uv?qL|y{oBWcgs|;!BUTxM;-ADS@vOWcK zM)>$Ot)Xb)1n-@LY>GK{XVv^@-CIkK>W6OId6K?vmvURr7OI~KzPg+5v;!?)wI@aT zFDaU_9y1z!EtOLS`z_(}Tux=@q^Q>MJP1tc{T;jgf0w2&34;@<-D)xk@( zC*I%5SeCd7YlNHCI0a9LwexE9WSp&AQ$rcOfH>Ld^=IpRTid;U*JjD{Y*sO34?tsKDVcTP?wGJcBl{QZAc69Jr( zXJq~4Ne=k*8;BYN?1l50M`6>UfXv79A2hKZj7TI}fRY;^@drR^rpSL5cy12MpcKFv zBRC0sVqlxZQL{Z`2ea*&k36c?wdsyIM>G};D%z`VQlC8Z_t%_`S!Ur=A@*-G zh22Q0no~ntypPe+m36ANCm3yJ<++Jc`M#D9c^J%aO zNs-qLVTG@1wn1UF+1_k}mUbNuzACEGzb`740TGnIQJOC!FlnsRJZ27G@$Z203C*!r zMbJg^D0)MQ*bR=|jJtICG8^ljH|&m{L6#5F324@!m$CAZ@*$UIUL6W1t+s>xs5pnq z69emVl_Hdi+k@zLkhTa`nV|?gD1GHnhXHH{NZ+UB5QAdxfTii11Q<>M4-Qb69Y(}p zf47~6XO^H1hnI#O&;AYGBYtOKGlf2og!xNi3WP->b+HnCok$&qbYFH#|M%<$0kHWfk2z zibPHSn%PLuL{ZE%B)?6UNwh*990P{Sb)PM3~Ty5&kg)Rg;!O&9o9Du%Go30(H?cpM-%L$O>BXJ<|N>b^uT_Ao1UML zryf8@X3nc!wH2~3GM&6%Zks6*7MbI@r3?MTQnlWxgG{@LIiY27#@Hxp7HMRieEvpy z(eUJ)hmM92pReG>#ff+^FZa}xqE#(&v-6tR?iffVzr(h~p*v|75{*M;N7zk8S3B_! zb#v>V6dl(88(veRwf1IrG!(vEnD~qz)-ClPHM9>*ooXqz42t!C4)S_nga`MF`AGrp zqjZIlAwTP)k8`GgsDCfly?=YD=!sUUNT{x%uAQB@a~ zoSzaBnRkfq&-S+%8@!X+9f~D22|Q?rS>ysZk!0Ilbj+P!`|T-c=lR^uYl=)=Unsbt z$L0B?7bfkhtdE?ZRIzsa75`{IK8@@)#!PFz$bNvBr^b=j`hlWCyAa<64C@v|Vb&)` zrMh9ioF}nR<&QT;PA1Sk}m4;U^nrsgwFGtvPVx64}kQjG*{U?Moq?$ zS7>jb1nG-FpVeNa{6?-1k>UjS)1iQ5`zaA`#pTiIDOB0=Kj4+3lbP*{U~1kpg#RBr zHL55PB!PWkKMVmg^o>INoG?4*9>p#>-z{Jpk$1yCAvj>TFHf#icRJ#&n4MvJI)OC$ z03j$zsLQxiBrmE&Jjj60YbU8zSSqNQ?oZZ5#$0vs*8bCooaEF|gj(0_&5eP-`> zNdILol8A!TIUVEJIb>;9_8%*8iiH<=QIyMxI@-TVWk$JfY|~YTn8A3&42Lw_00t-- zBSTYs+Yb6QbrP|B#J0bt8Fh?xTwM>D@2Gk2B`;Y_8?p3eoM z)~+mg`drNQe%WR^bPxjB`oaiCu0YSV4n5H&zg9#?&kHd?XHn_V@#YR1z%^51$bT7C)~|L#M8TnycM+(Zb!z z@1bqf*p-}M3iQIddh4(nTnlb!rIU{~dWO3GtKXgkGB7f<>1(6J#jMaFH|gEkB>|m} zMDy$tJDtMD`%|h3U&swc6WcP8pMY|7`;KS%$>PkR!RtP1-JK=IU-BpZ^MIsHq)#Cb zI|kp2Q8~=cJ0ni6^3fXo8|HQfDU4RJ{UlLMduLS-LcvY&QLbdcm}6{TGo6~m&W+Q# zvfBoVSx?@>%P&7{KmRY+r!h?ekh@A?@j8QkN{y}Ob$v>#bfw>IEn~o`5<)RSxCH0j4hiBOnMy0#aQ7IBnwOkyr1RL-uTO zCKSM`0qgWS{EM=>x})WIQEg17Cc@2j2nRX z#b&j>QvKjQqD3EBT)k0r|BTtU)YKpRwY2UtW3d!M6O`UU55P+?ug`Zf z49*X(3&t0u?GI9o`h+620<}j=s0C4+mCI^?rf%=E5-OI6x13G5sr1|hUeN${k{B?F zNxq?-h{3EMQ5kgemkhI1(<=NYf9p*Fqd`%&its^>(69u&ieMB4{^aJM&vYrMOW@aT z`Hx@F;Pst&PqY={8Vd|8gP=kS{m(QnNU;e#Nz?;IfVUty9N?i`Iw3ZEVC6})%alVB zf&C)0y95=l>**bJS%4_^_2<=!_tU=?sl2(Q&mG^1a}om*tO&+Z2~xnUW0dvenn=PS z?fS2ix#TbE?-;&gC4t;lH|6$?S7X7Gz=@0Dr47jJV=1x(QbKR_&wbxk| zzWqKuliTSc~Tdqw-R5u znaBHgIQl{pC2s9CxbEDQPq9aYfZ);qvHm=}aBT5S zrptD0eULrhiQvzV6e~<9Dv^f;ILE_{wXaJHWHpu<##!nb(O>n)ijKcxdr7a}BU(9~ z?s@D~`f1%(>)d69BVQ5}0Z~HIM*eh#{i*%>gHcu0F~j0dj-9wP2z&f}&rS80*5@yo zzCW2i25doGpcK7>AvBWcf&(mlV0gF)*1}hPP({H1RG?6Dt?{8=#0szP%lG?oA+B|A zcT?B$Qq=W#1ON{G0r33!fc8NW2(ZCb_#~IUY5srmI^G3R?C{JLT9|gX=v{K(T2NES zk6q|pb-m;n`K#nsDRKMwT*WWni;wqac{0{B2ZwRybQa1-0;)&%sD09euxuUT9qVco zmxgXqg^uE#%25OlbOs)%&ff5njN#0nI|?sSYC6hSWr>l1SPvY9QI>k}mpZO1LGUcB{pJ2SCogCMIrj!%R` z>8nV$ci{Zzx7LO==a%SRmfuQ{@)5?DC(mW#XJcS(LTvAr4%_AR)3I9>{Qq*i!HnQRK?f z4!ZeYt|t@=Cioj@)~7O%Eu=bz9|Cc9&?Epix+YF6#x7_SD&H{7h|D1fQU>4Bcq+tlv?ysVR z&qo;yd&sGN7U{S-FP_2N3F`b%+ zGm%0fW&7dn`mLE@cbb%a0@m}OMEcJ?eQTZmlVZmI0Y?t8U{QYyDTq2_`%=b9VteBd zbH?9=Xz`1U>YE*b8dngu6?Maooli~^3tR__ETeF&>fBM$V&Zg(3nQvG>p^P!jf%xl z!O@$3&lR#%Izz&z>3O~-lj)SJ2OTiCH%*K>hrDnJfb0AVAAbY(t68^S+N3j5I%T@@ z-6qfPmz8XbQ5^y808kyV~N&CEw^Vib2iq z6ZM4MRo{$)ERwp#cElD;(ey*XX8LB=pV~T%vL^W z=45Y2D}p{W5m(bto0OlqcG*FGigzN4=&+ugnoNH4-p4gaN_PV&Qk?1V%ysO#8>?vU zyY!o(pVj)6A=&}YgDfYnCx|Cw$98RZmCi`uO?8!Z1%fSz>cFc2xO7Vm_N9-2>N`hO z4jE+z@m55nEp7nb#T5>i=^iL=AnsLwkE_O^loM}q1^_dJ+C5{CfS>kd zg#h%r7ueyckU(Jc^EpYpHvnjNf#*Pg)fyO#H^ch4rpu%OBm%JP`_{S60^`)I z40UWu%P%RP>{*idJQEcvNwJPNtY1$^*_5hNhkJ4w_4Buh?$m|?JeDNc#_2$aJ%|E18}83;va z?3h#!OnDH0I6OJ|Nm~3R#Qex&&l*t3-U2fPW(N>#{nE^-NU*&-g*{|_;nA4rL@~J!I%t6(m(wg~#qJE7m6mZn^!9ApZn>7_YH*a^~cNWS54WAR;nvVMo$O{!{vH5-+<9)|Sfl9_#Sv zXPELdU3dYo2dEOPY8ncm>+@xE38F4Ws_FkX7{&6CgwPU|&clFZ`i{N7fqf02$;=4OJP_Tl6NIa+P7L_J&9g1Z&0-r=k>1Pvy60c6vzwqQ$j#o4%!UNN;f8qpqS$D`z5yVpjT(Tl z5*h>P64oCKZ+8XXO2#!^Y$_T*@O-{st2&aVmK>%VFO<5OEmY7skVqiie@n3u0_+U1 z0h{`-V0eUYQ~SRfYWvb-A=5>+t*-z#OhZl7<5dFNQ6}z$$b|M1EGVo5aqU;A5p&DF z?E7>XFYwOS0(v4)eVzfE;3A*^{R$wb$cREJ#7z@C4PZO`pC=4lRTnnE`JqK!=f@D5 z3{b#lf0P5x1#2|mf}$WZLAhlDHiA^E+j zfrQ{=4*G#D@KE*tBq+v%Av&oG-L|4&%Y27dVoD)mI_5Uudj3fjJ|-f@KG8EVGlT1D zGI$Z6N`btGTH{;W?gh|9DkC-ydvSsFsl+Bz-|m&1+be{Fj9{1jRo@idiCu(8jU)Cv zPBh78c8)mmh-6rfB;Ezb90d<(GeM{4({lUXsJ`iUxP+gPZ?p>ot+?is>ugK0MBoyR zR~?{{I#whtevK~Y?ys82JFt0T=`6Niw|Dpqj>uQ!?RKH{4`p{`1>OMcv428)-Ab9i z^@r9B)wexDO0S1t{r{=Xy0q^>AJwvN*&*6GNMfrGBECJV>YTn)I}|)5S*7^@`0DLm z5z&CSe(?YHt%82f3)Tm)&XuGl(0y?OERzkQOr8p{0c12o0PvphK@Nfj(E;KEs!nqZ zp)v>bCaa*%wWippg4TtHV_b`tL!DVgfskGBx63&MmIK@%FtrT!Q`HAa0j&&R5jDep zf))}uBq8_U>G;HY%$#P4F;z9*(6j6FYMkP|>)y9!$-vpJ1P-j*&D)tNL|W8S{Z8TP z05iLn`|fJ*D9NE}sf*jlSXlaxx7Dv{$voH1-Gnz#(_7>09vBdpTp_D8l4n(Z$#=Wu zAGeXcVxqj?s^Vc{@b23krD9&rpg_P?UB7N{ZS46IY}kb-78~vj+*P=42O606gBeLi z00WvP&05-)?W#eUsZFGo5anO~UWFO)vKgs6q}1;e3;29YQ;{z7X%X7Z-pFb&%3tn@ z-cx7}uGgrV3Lx`7G$`|nrNROECR6(C=Zdcv8XvcQJxDwoQATxmArnOWB?|(nUg2fe z{J$;DhrAlrPE3DPFaviXOc$l5hb97q-=vD+!~L}c$rI-L; zf)Th>|AEZ`=vsIIs2V~3q1r#NzQ3Rc0sHG(q5wl^?s-%WT03X^`HE%QlU4`!eTj*h zi8FTkkcx=(k#*S%)luKpFU(VfAx@dsL7z$v1&lZ_asCL179gt60^s~0UP&AzfWskB z0B}{q$RL6%bcvZuqh9#xI3nxtL~rl=ryT&4ggn612Ol{cs-HRrC=+|;jF_FCE?q)L z@|iq_iNlGG@!vY-#+ELWsLmkK^wBAJ8^yH2h}nwo;_FgQHDTm4t2JObf!B22HfVYr zzkCcd*w7*#rU{)!L6tD!Y#&tnD9g-!3RxlZfjR6`|2rCNj3Fj6rRzl zO08ujP}KDZ)m_<*!|iZ(ry3b%q{Ya(GZ)20%wurLEbAApR;{)};o9T9JTi!RQ&}}V zv!4aSyYNx=O7_w!#jZ<{VoH^FjUu@z)~hH-V?1d!GW+$mBl=G8?%3Q0Fnl}=ujB>4 z0N2GDb!{BKCQiESac0kPAB(LIItU!`hPYQ^YcGLim&7K0EG}(M2Aiq2(%>`N#^EKQ zHE=+H=&XUHemxsX81v0Z3J1gnV;HL_!qvjv5O z+~W%QFN^VE*%p|F75}pZ{MsK`J>OU_T)ozdKG#8Xjy;tJgYYoTb}T+=>8t#1oe%^I zBA=`BZj9G&X4S%M+^wEPl*jRERBg}X^nSS7F=9e2&cmv<~;nOb-5Z2P9;9!-k=V|Xit;h$AG-iCUgp{?*S)+snXX9 z=Z(eD+)p4L-#$7sn4$>v1!JoPK>xUWiPG^O@|`%8O@j*v1b>(nOR5V;wtxbI?4YGKmO?xj_BjX z&JE7?WY-9N+JQFgP6JeG`ry4m)%09LS9YFbYY>>WvmNNo- zfEnS$c{X-3W*7m`&Tf%P`7q?FrL@_{m=CpV9W4F>?jWn1&>R5n19w(wcJJxm*mTPy z7s4}|Kd78eE0bC*hR)fco6?!hg1glev=vsL{=1WH9M%8r!Tl;#y;FPX@sCxvbbTdM zB2lS7EX6TD5L?F~j^;ez@eI95vH5?UvKa{64ESf&Qjm#Y_R4|vS%ZgKU5WU7a*O!r zOgS40M!>8Q0A3CP!pKRE2Jgx?P`__OQyEAIGdQrAK^W%0e76){H2u(fD`wMTnr zQ3l@K$x)=y2AAL&uhqYeYN#VFQ&*c|9dI~Yu2NQxdCj2TFX~Gz`G}X5;Qll>eiU+M z!_u~vJqhc;&x^7ilWcyQGJkjd-9=1J+^c>@5)dNfWE(8Umzb>H#s9V^8PN-93NKPs zTZ^#82OSe;%yvxP?=dZ1g#QEOpPhlY+*}o;*qZvFjva*!gZVPp3WCr400T3xm=yZ1 zTa;L&A)$5Y+m|p)?xTgPw-!|mcU1G&23RGCX*+lDb@$5{h@u7#ijz*so+kg69rEn` z_Ob^52krvV^OV7>sxpp?JBLW=I_}N4|8PmFOECC$VX!W%FF0dh$_q4=j<4Y?u+5os z`~VpW9Z_i9Z$#NYG}vX`(jWJO1g%;P&i*539+t|Q`kLlPpTH)fn#hgG%rvuSj{kBg z5`XVvX$j;SFytT+U7Ky`qHl%b8y|a}XI!t&MyCAIS-DV377Y}7*>CVNaa(WX%Gjq1 z&F3 z`ph(VQ1)Ju`ynv8ZxDS|ya*=Jz>Q^J1`yUDz3@3_rdc#K0=Wl$Mb5IbqC=Gwq+(IV zh{M(IV;-I!h=p(3KzV(4*W%eLGqLFag?}y(fQ6Hp@4r&pQ%v1P9TMKTb|3tKWei?e z8%PLiJ`p82ZXFf;op_dxVogmXnewhE+cmNNU{$XqlqZ^X4%TAUB3nY?0@6e}SQIX^ zt?AF>X|L3YIaaq_P7Lv%-Cs1Rt3DphHv3>-)Cz(&0q3@~90ev(`#Gg;tLnd8?6Wrv z;;}lnw(n{b#(EE0JQbDo7J8PI`&nH+x*25hC_;$_V24-_zT&X=-!77U4x zE50fpa&+DlZr78)uwQ#eU#MG$ZpwA;1ua8Bag*cYu?L78U@``^?G8Y(QcUqTToXM; zPrS{uzM8k0lK3%vQBXd<(Y43?n$IltxDO5vrb19=tD)(P8C^6{ZN@j=KIqmP=)SA% zo`+cQ_QNIxOtf1$Dvuw0zCqC0Gc8Pq?nx)QNaVupGc9PVJ8$*!9w6|IBH2kP18yvb z-59N>yOS&!1FHe>3TkdU#Jw#H&wm zceB5rpgYPzv0E2+l!!B+Pa2!R=np#&%ZHs0bDq|DJ>h!C^K;H7`GJv({Xyj{sD@#p$QOJ&)@r_&*x+OY+n6`yW` z8=#wG)w#%OVg|qTv#Y z->H75FLY)$OrR588MAn#+x3qs7oF)Rjk=1Kfhj%pQNXb&{`oHlrZMZ8{G><)$fOg-=;jY*Mvat zLmUT$r*=t5>QdN?8AASz-g&-x(L}|eGSxcXCT=9J+q@NYt9p3RwGN-y3u42KdSrXl zY<4w9Zk`x0GS@XsS`C-jXtMrcSd8z*JcZnHSGQ(uF}O87L*$278PG<;^e9)=_sZyk zdc*U3c2u4I{Js7=V z2=^G^kcsUYW4ne$UFkh_^HKv+6FRAv$_(#E-1tD0Rw`&&4HYRz)yFbBq2i~k&Ph`Q zAGh89U_OxWdIUpHg*f0DX-N76)7Pl6+H|Acw|(4i&$nk1fDR@_uOw&GyjI8`dRguL zoi}JyOyV8iJE5O$%2JBop@7-(C(E2Q@=d|*T;G^kbvEh%5%xs~8OJvn@haxXDm{m2 zU-FY+UurI`EA{~K$PJ#wHXByRr!R%imj?eq9FjWu`IKVO!V_uXSx& zO{~WzNiU7|8rqjR?#a5#^D-QJ124tmr{fKk?Ma@j0@kP4-tB#-rzLX55=F|N8kdnh z9>awI`PnjD2h31MIH_50_#{2-;JF;&d@?A^+ibl(a60`m&v2={_c40IWR$c^Zw?;& zD>wu1kP3|g&A=8vp$5F;<{5}D+#nN;Gv@_yNf9fA_px1Q1=o%~tjt!o!dzqQgL75J z^gL53O@-NvYQh0jVsLElPK_S{t>Ja3QJ?P15WshMnqoTfD*e1pNmW&S4;^kx{MbsL zvX=aptJzX$V7szcaaf6wy13Y!qk94&aPII+<-JF4@c;#MA;8e&-ffa3G!hw6?1$Vs ztmc=apOKpuXTxi>1YZug)O+qKP^V&de!yJ-!-_Z$7iZfrvl%T`H#Ta-@}DZMc)c?A zF=I0PkqepMr#G&&9Tfaof_na7G6_OO^^Zx=*R*Ch^?KtPyQcERukm z?MyzzHz>6c^5LmjZo{Ds#jzD{bpgl%2ixmukjw%;#1sze5tIgna>yqfvR^<8#~Ahwss-x< zEENES+$~4e*%QOv0Dlk6*u)_IIw0Etgluszw53k~5)TaD5(%}BI8zQUIq<5X0hNWH zV*4IQ%YDEtS~^WM)B>#BL7>oQf*(sd4UVG{`m}r2-4u3G_TBi4TFZOROYAU7tbbtL z@Jo$7ldkl#Orp+#1PhHOeAd-_aUc~X=tns!o0&_0VLA+#%N?1oelmaS_1L#Mf%huj zj!yhx%{H~c56HkGEKi@G4NMBH!)|LE4b132axeKp=AIE~vo+@6Gc8BKwG~e&1ICJf z03N^ah_CIynlO?)RCd0q+VEw;eo8^RdjX(i>e>HAzdS=_bY! zwIx2t+$eFW9i~aMY&g4k@jLNIYA5)Ops!0bS6_erY^P`Hu&xtS)4I@9!B;Y_y%D4u zH;(^m0ALmRZ10AM>|(?gI4M@ zgSgch&%@q#vQk&uZi1+?8D(d*k^3=0h6FVVzC1|rL(T3-jJUPlW_`0E>u z{fwU`1)KqctW_|(@_@L;17$y$dvSsEcu*23U>o%5`RVSjX`ih|i+J0AH$WrKpMRd9 zd*H}UZ66i*p_t2?3{)>Py}vn)8REX}oM?bb^NxJAAp5v}uqBDQ$>#Oc z60g#stm%Rj)!KIdV*1d^iM+JI10J?%(zl%8e5^`cZ*mQw*}CXFa}~R}w-B)HxS873 zutq4Lr^#_d9h{_!-2PX^G*M1mUjVR44^gZZKvPhva1v1eO#xYR!3OaY1Ga)hnZ#=~ zi7W~}cdTnqg2F82)ro>uj6&+iVwQuYfHpd6Gg}mviAB?eQSa-8POrSK^3(v8gQV)W zz1nW#+g%l1K`(=Z1U?u#Zx0 z7e^g$J!hJ|f6zpsfG7EQzY{@MObaWAv}A_ON5gxz@7$PsHI<;b_fDymB-cOI*Z{Ld zZ8U9n+B*#%c>Wr!tq!DqgZJzv(6cCj1|$Sbpa|7q_!=sQI%HphW}w(6XFS+HYW|B1 zJ~bYN_1ciifSb<5d($4-gqP^Z!1%@+WtLKXOs135YpPDEHfU~)D*gE-t& zETY(nfiG@hE_~1*Ex)iq6iJC++!T5;B|a-+qmm~j0Q>8@Wm(x=Q@R=)`BfcYb~k|Q z5?G*-zd>??0Y`Y6f&=b>fomMiK=!{}*UC{v83+bu&MLdhsA~z{afd!oS#`YU%^$;k z75IvRe4(Aohs+cgrHXr9j3vH&#AI1`}4`=X|%xx zEbmya)TL>s0!d4a-DGz-@IZy#0;@p7Ibp17LBX$TuL>LY;~Ea;_l)-2>A6|0Iy-`7 zdnzMNXaGECL-Jd(1>%vOt|1QuL9bN%^*gZzf4MSR*osm8BJbC?%kQmn^nKK9?R5DK zzmSH4N=(^vH)MeZyIgf_-czFEL{Ug-kM!FF&B%lMhN1(uxN#l3qz{B#g>>gZzn!R% zfUUA~@%)e3{;-!v@EtoAL>efKm!P++ss_teN>MD`x0My=oW0PFWqtU-zp9}^Q@f3b z8DnOM1;fMeGExy`6{VUuZb*qf##bT8g3lF_kHXSj>q*&$UwCexPLkc5ccoRJjo$>< zQKK`4Us1cW#lDPq$skAB#K_(8!FJ!fdpg0|TiT6o>tQC`6k_IIM^1Y}Uq2LX?dS@k*(Sf?mLaqS(#q-m;o@t_2%|39PP`1; z{*GVMeMs5QgXi1%5w(#v^|?|eKklawqy_1a4o5>7pGydh$lvsI29*Alr&)D%nGpnZZ~}$(Do=VNMHbgb=bs+07V} zeK)5xcF8Vl#!i$O+c2j4HGO~A_4qxm`@SCcbwBPu&Uu_g#b-Y6*ZcK)zMjiBSHG^a zow*u(@1o5R)JCzD5}U){CO*`0*g@COu^d0gxs0hkOloG|`Q9lDa{A%|E~QKA-G1ND zgYuyd>skVu?qA&){S|mD0;5a}aB&)r=MQ0-FuuOIt17=XpF1_$uC;E1)>=$EfEYh$ zx!NL{luBEA5IjpH^|0TL?-DvQt*~}H=7@zwHd=b%P0VQ>QLlMM{g1i2Ct%b4J((Ao zNGI=Crjx_LEmDwsEMIVw071k!jJQ_~j>BBfQD9K!VZwE7Nv|JrWs?1SK%Itg=5pc+ zJK;+~Urr8Bf`98qb^#uA4NdJLl!E8vwVmn}sAY{_CWeX=cmTp3K= zD0CtNg zk&9%N)E~D=W>&OBvSw|b3(1&W2&x^@*wndQ?{lPP&QKDK37nM0PB&s;pOOeb?)J zskX)2fsb zEdB;*X+*ATF0Q?xAjIe1DbX!qr>ynsqQtVrwvIH7n4gL~a~nOLgl30#Rc_p`c3^kL z>+oxO2kT*O6AduIi)UC}0^^O+2mLft8Oc=$r*kSlQUg-^Hy5Z`p)l}Jw>7vT2}qbp-`$c|6OQKq^i@hz&02< z&HLRdB(JsP@t6;5j<34N(mD^F{0;j?&PJRJGdMKu;p~Pi`KgxIN~akq@+VJP2St3V zvrnJhVw?fN48|?LE>`xrGc`sxx`=f(;p-(y$oCvs_OD}dd;Sw8;%1tRVfV4e+s9-r zecT7%@ZddM<^6;nb}(fosxFp;roPCM*|E zsr~KB%F1OKXH#l1Ho6zA`-F0J83rALXG7B*FDw|Ew1uL)zi3!T20SFyszhfwuEi$* zboC3CJm={CDbwOiYKNj=##&;rJ7fG*XJ)5!3;~r@sg_0&?Qy3dtXqtL*8^5i8nW2y zbP~h{ImkmTC`R@Ga3+X`nB9`m?_A_3FNKZ9m-gyVz%qA|qk){%4Blhm*N&0yemGCSLG`6fr3`c04hoHWJ9 zs*jMJ<;<&oQe7VQYgpREncLK`1BEPdFv(^cJGr{4(aCe zkbL)wW+*zcu8RnlwsHK;aJvRbnGf7yi|nm}i5#GRQL zMA4hkOGe6Hx!$;)3&0eER*O2xyQCK~d|JM8u2EU}+xzF&dCy=ZB8!X`0@mnv#s(5b zN0()>Wu7qB`Ym7}sTZKUj%+R+#l_FfRGO6DKhy0o-Sc7wXLS`kRYW2$z8UlpJ8VHx z?7au3M3q`i@x|2f*^1=GmcOx;F>RxZ@)siB-gU7H%`|h}`!3A6>4CvTU(sZA+0w1a zrQ5|ZJ%~r!qWv=M#}iK8v}^ci%V?7Dh;bBH?@!21pvU_-E}(vZRF^+ZN6>);b4cRr zikOc2i=_VgwhGBJy0XUT$)F3y#DLEc6Y&V4?%e!R`NFrMBhf350RM4elz;HWxH$tq6zRaFrM9UrYpx91B1+x|en= z93c^9p+5l*VXqv`0wRn4q&7T;cLly3<0^1cg0<0p7;Ye<@6{0^Xhk~+l|PxoMip%; z)k!z=V{Tv6A14n)Tp3q=2>x0)b1SvxbD{%dW09HjJ(0HAQa$W3&CquT`I91u)62%K zHM8d|GP{~CIPzaj+L5l)Z8+5WrGNH#IU^E<1KA{+J9R+ganFalzLWYNNNugVoFA;$o?<5X-C8!~!KT_wy4Ri6v50SJ5gf%k zchP76enUKf>5y7-)>)kGnso6vP=hojq!9p}O*HqBILClcXxtAvYT+x!w1ZY<3Ia(bmQR%dlsXSk=h52T0AHm08e1=CRB^Fkzg#wkd_G<|` z@*|VoD6NRQ;-IxDhprzyZ()*4$ApBbO} z_hr1|M-h!r2B^bZ@9hpfei6bk}EdPMKmChVD4~>mYX|orV@TTU@-Wc|DU2Iy+g2xDEv?=)8*nk_h z(36}03^yiM&D$%t0>9i1UFi%G&z)|V>=8mqzaRPpvnT2Wdf{7IDCauoTYekTR>uXpx+dtxh^`7_BdQf`@~OW{ ziE7>R67|LtUEOAc? zlvK$3xrVM9PEeKD%FCP+!;*aqXJ%``EVvBV%O32NbK$#aAEO z&>hoLw6^@F^`@J^N%aGl21FirMdKgFP_dI7Y~RMuY(h4xgX31vQ0?$nOY#)!^S(=CujzDucG}8#36k20kDIq@%ZT5hU3o5-Gy0~AT&YV7QthiY#jIY zmF!r^nwqOs4;?bz6MW8dJa*PY^uP(WV6V1o(_MK`GU`85X z7fectv?zet%h&ml%I7?|_8Yp4!K>NJbPskU62(#?y8Uo7P55&B&eO&|jfoO3Y)3)h zIKBCB#HJND32M!ZzSxmlHvQfjHZSrp`&iq?1d^qvO`I*hjgx01{k?ufpE0G1i#$%b zk$4nN&R1qisH;+)A7;L4vkm4XH*thvXz5;jm(Rut0_bmV$#wLVoco;|u7U7_9 z)5krxB8v;bsXzqb9ER-uUp{2B=+H5}N#%8W&jZ!5H)fuNUCUNWJJuD@A?hlrJGZWu zBH<54%8mzVmPlF53O95*nnh~D1l;M6eqg2J1MOy8aieah-#M)otE+japSA(0if9BB z7Q{me*d^N~N6ksABuuV9cFdl-dqZcpYpugxx5p`G5(lf))RNB_%}Z77z;;JW+(yf^ z7Y-V7+;^Gi+hENl*%5Xp*NXB^Sx?94(8n1MH4D_EXYv?O^nh%ScYq$!y7It@nxbf4|lli?{{u1L2>Coe_2q)*u=H zl>A_Z!;MMi2Es!Rc?;q66amG7JLD@Mzsb{#Hy&NeV{Um}Zk@ezzHCZ#x0!6{6o=eY?Xu&n#me4&vUuygTt^MN%;%-1{uf^ zAda^-pM;(JwuVlytD|hFpGGe6|0LwnWih3Itpy_-{^5p&q(f;keTnvN{bMe_^CcIq zBN2+V!T=vBuAoCqhqXCtw*=?(Z=Qd{0n?3BB6R|;HV5U1TX`Xf71C?mFeH$P{P{M% z%0ZCtB$s9j!}xza`(cDL&=xf{_SC!@*KMx=YY#O1L4VE?5$p9~=+pAb_WX~?*O7|X z8yjmvQd8N|xl~6S;-OZwrw8jOQEP0__g(<5^LC{ExuyPx0wYUg>90w$S1H1Z-6Gl} zOQ)8`R!_gZ8~v!u8(c4`ZU7B}1oa<~+rm`~DI`x3I153v_dc$r*j+zhcW>gFq>4iT zTbeC&(Zmj@?a(^@%#J+!R_RGTt zRH7Zl;C|$>C4)WhJDnMB(lnXDJ-H(Wt0XO#JS<>GmE5is47eWMlf{7B$sA<)+BY0X zmJG0SuEyP#HJ@qIBH}j5n^vhR*Afm%f5IgMm3mnl0z5zjmh;RExr6mJFpDW;fhqETs42G(22gwBp-GWYj->Eu`>WxE~R-?7PS{yT4H=FHd`e`|M{qCHc3nHKso@!c<;431Ku-q}PfQ$8Xf&Cese4RTg{d0m2WH0V! zJY$ul4hU=*<=!@T2#PhzDs-~fB z*j$RPAlmUAgnaFQ4u`9R1E9O~CAu7oaQj8WK%?Wk8(sAU4mcW;e@TQwcs$&Z9m2!N z*))syfZ=0#F8?_g&IoV)1x#=;I8!RL`eX+L+el?G*aQ=KuXiV6izV6#-k`|MukJQv>b-m$(}fppNeVzU%+g13&rC*~0R{ z_a(ROUMcZ7)3_wx5Ho)}NOs-eqZa#sZMJ4ID{y>HbIQ!zNuj{%z-4~j^cTOb^U;7X zd;3@(Y`md9l!MSKCcuE>X6eH;=~`rc*B0qW-?i_G&KdKLmA7R9KbP?d2;Yczphc^g zBa}cmjT=Up6_j+t<+$swkgMfI*p8)tBy__~=GcOz{z-UVWNd)RpijPwXtIjdL5nB# zSKc%xX>V;2OS|SYP`nDNeuz{$exo~;{jt+?5C6!!Sgn%K&Y*YOt0T)7)}>V&anC zkZwTJ3?#kBVp%kJIl#*a3S}UyfQ}V|vjWIy;Q4|kf5%)Y&0-tEQiT^;`1JwJVsj#B z$^oFkgA{X%^Dx)0to;qi6#OTFjR;F+eOZv&WNC6AbL%zq9b^S~-I1;)1Cz6tR0=~0 zSSAa#Hl;B#s>Ug*LYhi0(nDWnG%+&Mmg0i{JooS{dF*PXCKKeSwtZ~!G;+Bddly{; zJE;zCaUUhTr)pU2qPAPV#9J15B_&G-gl8KBB%{JR#%p4b1TmL2P@6glLIrVh z2B%{9xRAej2<)P)sT5hsl0);t#x$**)UG1Q8Em+~>p+go(-Hb_9$sWE_`#|4CD}3b zpYE@&icApyd+T4<ZB;@oXUIOr!D*Bvc3ylVRYgm-?8-%s3R(R*qKYWY*vPlYdA(Q^Qi&5DKBQ? zlj0M4FR^vkE8UpQsS=cx2CPMmPa`*oVuidNcrK7ZB}cOYFOg1g_n_faWzlble^^h9 z)_N1e1x3#0_+WMe%{mQ-@IJl@H58On+a`p4wly(lRaA9mL;{tM3jBx#t)E&CD0dcq zN^mX%1^Z2dP#o&)(vF7G4LVNK0dWKklm2d$^A9Mqr;Fe+#C6CSo}G^W89U+p=#jX; zPRgrTd*o$<{SRyy)C9z%C-DzJ7YPO$fTcJBt(-N?ajUHzs`;YkTv$j+6`VO#5zlqQ zNYUwg1JA1q8WAvrM~~IrEK{pNTz0f*iOJhn){z-Dv9~#W^hQl&{5gj8D8f&N)s>}h zHz^~FtKAX5(*BqSk>#p+1@+C>&kfs4jp10kO8a;iv>&g85OoZNX#yZ#O(Hr12C9KD zm}6np0m3$E_A)!;xMxSt_4dml&A$Gk`Ef!W?&vB*_0Cm%Pl?xqMQJ5!wxF?o3x+C8 zRiM^(Z!_o$PoL1+S@&pDX2$32#SOQ^Y{^-g8pWeQ^$b0d*Qv@d7g_j{+gN@8Wc-#BEa78z%_I)aR%BwNQdq~m=oZLWgy$Y6vv?$Ij_0^ z=J;f=Mr{Wr&0Ta=r5jhq$BQh1(Y=Ib$)8|Lssjr;NV@`nk>r<$e)j|tgFsj=hPZ3w zhK05dI}Hj3La8iQKlU`h+vkq!c^_rd4yiKVpL`_#+Q4spTX98!A~r9EJa&Gf&N9BU zAD#mMFRI!>&7KhxODxcCS1qrTXjqQdCb`^SKSa6kKB8y2^jyIL%{&U^5f)(Y1*>xq zRd>O+eIJZ4fFJ|A??Nbi`FanACkgNG7FJlHy4Dh9Yi8@)8>Zh`yDRp`7>JBU|K=Hd z$$pz>dc7ZhoFFa>kp36VVwtc;6f5zo9SeNGJWs%hlRPQ(;FCpRQm+-Rcr_lgC%p4~ID(I~8!EO=_@nSfofGs$oe9RRL%& z-fQL^b=;6+Kike=Zi}zZ$|H*?{6*8p4`%;89l~j;xrUmfAg4Br>{W&WYKgH?@8hi&AAQ>?g@S{eD!zm*?dm1r0% zD1Yv{E^Kc1J*?&jTZ)rvn^ljRR7{m7DLgm6_z&&g#}nSjWK4MMT4e{q*YGuJ@{CIK zgpOM73SVa9=YM3-w#Gb@O+8vMeexU0!}q!w9Q;NLS5wK7IW>f zoR`#H5_|;&(qDw~cZujcjXxOX|5C0~43OXJxJ=f=tP+;n;R)VA=}^(6mzB?6HRuLL z1hh)CkNC;dAs)^pC*#k-qCyyFc-E1cURckgQ5ux?OlaY@AJu+i{WyfOH}QQ@6=3c^ zDx^P&X#VTkS6v=Y%6$zqS8c$7i zznGTjpTW#(nT6)#8i(ll8s?`ajU!(#RS6j++Z~>>&2ll}xbxQbeCZz2D}HfD=ZJ=U z-NntXd!9K_3rWA$-VjBY;mih=5IKI$SRQKkeEq(UCYO#ZU}D2*4V*@?K5hsR2$kqz zMR=bH|2wz@&Gcy*Ig<50C40Osb)0z*HABw^b6MExwW zV>7LdQAGteAyg15n4O4@_i17hSSX1TT|bX$Qb@I5#nMaq?u6;=4QP^7U&g!SVT@RO z;{`0wvFKPUyArQ+R?T`lksnq!9Z#&1vtg9^9U*~WS6W&UCHI?0-mW`0b=0Xc_hx8t z-{M1!9eCD7@IAS%iTuVxCj+|`Dy$MIdl=z2%UT+18Wx#}2ypbdaOlE_>x#&+fE|cN z&C?Dj$J3N_?`f)9Kxn5^{@Th;QeS28q`&f)zH9tLuSZhe7wxBn5;p%r zjGEC!Wn}%<|EeD2axhp$b1g$*7ebzf@TvvuRtTV5;QD9hVYo0e%sCDx61mM7aR&`| z&=L**p=-?zokq{y%~i@dtaEdMdr2;!Wdpub$I`Zwf0&Noexl6I!vum06t|`yTlj;{ z1LRD*M6<~H!-lGc$;~PclTE0Y1PT?xDHH5cenNy|D|__$#&*x)Q>bp#fI{B54SID@cb9B`wV)ChfTU%m@lvmQXyX-Pk?E3!S#{Yb`G_`a9seV#lMN6(8I5yL^Jl7i z^!)t(b#Vm?Ky(LBmM)a zIg!eI<-G@9_Z;REWnN54^Gk=T(&ONL%6#fovSR?TozT(0~Mzwt*$ z_g)G`kj{#{4*%6EXTSW+$oJLaXrtFg)&e#M|HX9Xl^JXQ^3maECGMAZUkRq;(b7lN z_HkHGF!%hh-`6b@o+2B;2S$a+K{I0F(wdLm3FBdqIwBjyo#RsB%=+t{&s-xB3XojC z({R9OfF>|+2_Rf9vP*1E5>-u3nO ze|pz0-bji?0K0m~~Qm>Yk%64-)dT z6|wV;s2=-5v=}}>nua9@}7ICj>3iE zaaVcrhC{b_%>>Ad1E;tV?Bf#)8DHDBraT6;TAN(^^+|Kij$Jc)%c|#>^Gx};649ul zJ<8hMD$~UG1n_^=xqVeQ@YY}B<8{maTCTzDXqt^;fSFHFf0IR}_0299+Q1=Bs&K*M z^?9jj6kq?wBp+Olk-bv^UQf{lOmceK3V%#i&w;B~4t)L~D^cM8I#bQDHN1vUbRD`NL+kD0_mkWco42F>ON`ypu)(>gncW8?G5z9)S{oV=mlPPkE& z7D?G|<+LeaMD4hx4yvAr|6SS=JUww`2QlQTT;rzqjBCTCoxV-=Aq*z8J5OpO4)2kNK9VFH&{O;^}uBZ>+8cs0*_{$!@*{8Lg>Kx)$x@54DN9@z~ftiYf{i{aHVZ0uBeRVbcSU9ljgN_h25Za7#LX83GygvanhOWdhk0425*TLx?+}g8el9 zcjwaKQ7)YFFcDn`li?XIv!oR6w*xSC0nr=^Ka7!pPNQM9yTC;plt_@IVM76BjL)V^ zL+0#W9Vk^xHs>6FBq*KfQFv@wKx>N3Q8-IX{e>U0EU){eG89RgM? z?u~-0#asBSPFB7jV~G}3RIauBFx}(oR88uMdogM+=#m;EEj6Pq|Jj|w@DKC^w-G$6 zDO}!%;E>}-awzwxKn7lt&hS1J+Y#RRT%*?7h%@J6VPm9rG(h?YQ74^qDc}}sqx(0H z*?x`nl>IKo-V=YztMchoJ?gDK9eH)>gmx(d-*4blbqne*Gq6u8u{yT`FaK-z%e>D| zHlN^c5Uh*-oEzz%WTaXdvcR@1{RJ{*Ge$=2I8MIffwIG#)axDsFZoh+T9}VYKH@4i z5+cFF`)DQrmK*>JHbFEI+*i5G+HS6`T)8bkd!8_UD#N{MK_|nI1$7&?;4oXG#XJbb zuyf%k!5AM52CIIcRC|dYuRmeJ__niE?^Jsksfz3HPa zm|nNdndNTjIv5?F$o@C|503fi?WYMp_?_K-w@PgRaxBq-UfpxFLJtx;Pz z)Nrj`v}6l@OwX1g%S>j2FJD|yJS|1zQ1p(BSsgpIp&VkiVW0J05ekz|LFRR+)J#@g z4$Zf6ihugGf^A%+)>xRYD7`OyG9vl_Y++eAC{2$At&>tGbuQGO`P3+^6wbIOW&xaG zExwxHJcregYqsrQ1e7BCAjErnr?4=#r)3 zeLrW%54>79D8*a2z^W`iQ52yNu7kJz$0+T@o99%?$^wBY}+rfOb>E6ZS|Wc(rggbOQ+zrIqgO> zhuIUMV>;s@0$TUQA~$ZE&ZC9nZsQ~6+VCH9VUB8y78*IW|9^&8WCtfyzRzG)7{qFI z+aAE_qP|H4H0Pn#bFadHzZx!yW~AqmCS+K3LT8Vu%|=hg{1iQhBp7R~pEjcoD@KTi z-Z2amT}808rgRC_d5qyVKU5lS@>0@uOAf{EYB+{R*v*8If0ZkK4sF08u7S@F@~aV{ zbkBlm$QRDTc6M}z9@+Wan%BY)qN0!B)7m4(q%Y=5Y}8@IYFgAYx5_tQ{#P*WdY0oi zOnFl|&}u)fG$!M6<7G|f=&wwJEisAR&fOcc9EO06hEQ}l#h2IYUlP zgmxGeKnq=#Ek&Lk$DaSdZZ1iFX8VQnty zWJXN%eHqC`lIdITJ)a6uu!m3OoFWt)+Bt(R*=D=FKY$v5WJ0f&=*G~U5ko8RG~$x~ z{&9;Ep1O=0wM0)Fef~g9bEX|MGQG~jGbK)-khk^{dHoO7PIy)(4T(!1u!~4F9^Js+ zY;ZGmH6oM+x?%o>;iVs8#&b-06{`3uo&1!LXDH9Ha6InVnIj*nVL9j+{$+pYXHP7B zls;A&1*2j#AGkicLPfp{9Xy0JxM8mgLU5Zs$LbsFH;+bwdi5=#bH~N61j%X_jUY+> zxjEs>=5(I}@%}|f>7?fKRqoqZ z5w$aCZt~gI$P4#GG%pQ21RYNfVJOYd2Y(T-fUNlm0D0xpo67zA#P^ZsKfj^JYe49V zoAJv1 zW_?95W~M1~>sN*xCswOlKZ3u|W$-o!5Km=9yr@n7NJc4n^EG~P0o&g^q%U)Sj;P_#$H=MA4i{JUSAgdUb-NzzAoLl*AU+nHSAwFDYVB z6-HB68?l6(7XmtN4FazdQ_I6+|4me4E`dZR2A-P_Mu_C#b-z!GhOQF*EAhnW(Rf|o zC=}aVLPzAhq8QDD5CJUIatPJhvjA#UOeeGwP%>pcOTfPMgE)6`ui@G`Wgt6T2*pAO z2SIefWv(i0eo?kA}S`CJ!59oSZ;imHN%oJAqt+uYsL* zF|2#Y3ag|msoZEdSl)hkM2GOXe@*<*`F{a{;W-UcPxwyaxqR^bFC`KWbc-k05xMoJ zE81_EZ^4(2Z*g9~R!rVm2CmE?0T6a&)u6=cf6TgNy*vFLW0r+#5S)XS<$GKn8np%# zP+*-lS*HW{25yvmOSIfq{N#R>==6F!5V$TB9iqEF+cy-`;L@~Vej$^kMCvZ|-&&*o zkACRJx6D%9SRm6rpTJ>^z0)Nr^+&))nVq0p5ZG%+5?o)P}c?vwA zqlXcX-dn(is|n9c6bN`C#5@Y_X{DrLJhFrl7Gkqj+=p*?vw*qIqbiHJF!@v1amc$p zt}yU9?OGfLUlER62CYsZ&pW~VoK2pQ{GXoKS~RM^pTA;AfW2|#(Q(Q zNY;6bjhE#a&wtg@jBz!#>uN?@RJoe5hYzFk8l6 z^r=BXwAU+fBt`UcoW)Dhsg8n+mIld~RdQ^HhV@5Q^yHv2qyMr$X5wPqJ~Nl^VIg0x z@TKqMcYC3fdcI^m_e}L>Z~9BpXZ9TAYDVK>8@^)FHYZ1s8Mv%+ZAIA7YQF)dK`8C? z5~o0-K943EBU{t@tlig(okp_`W{G99%6IKi)bEj$8rJq#8|WYGYfwM3@A0v!jiSyc zcj8hnW7>c$u@dj(F4t`{2J5=;T+tt0eHtflv~+W3|X$;2Y;* zA53>}-zIPqw$K5q1V1!T^>Co)xD30!4um`VN+GBR;VU0-*#*$W+UDRG9baZAL;vn? z*4a^vOO+CqYJIMA`{~?*VbQevI*RYxD&XLa>U8oZ$l8$MxH~g$v*PR6hVMVu;qtDV z-%@Vc$+p?KQd+`c92XMERKoj+b#=>|fH9!!mt>Y1zvG9_IL(qf@3jBQBp*o$NjE%h zYTl-HWNc&d-zZUCQm-ad*8Eb^Kd{B|*IXrC+SCDNUXZc(2NN+P2F@*2zuh%xUH|Ix z-Z6&uN3_=5VJ|w7sz9?j=M&2$H7Ccf#W5)3erL=)@Yy*EJ)bK0g`Gvg~eM4C|9zu3CP&B;Rj>rSMv_$f1# zOt_T{p7k6GMgB|lVR+ZSTwv|ee|zsnyRE(T6Z2DXsBh|Sk{?ReMem~dfUBa^HnwBT zQ9$pn#26L(w;DRbPeecN#YcwF@KE4lSqB)DrfT1=Tp2dy)|yPynji7i%)ZtOl`(XM z{l3L|atz$%d(>@pZqCZTI6qg~b(T(9*Npu<@5CRQsM3%!sQ0Bwe?w^LHa#_%yh{)D znbg86XKak3gz~Ap$X0ELIs?~wn&lQn8tw!%7El*cw*GMu%RzH>AM#vE)*0AZUHh{a zBL}YMVcmILfMHFu`n<$N`ts1geye`Stw`w*3k7r!F6RNk?qpC`lN;BPUgr5S4PC@i zg`@>DF3s{|qirc>92a zXsfroU3g-_hWQY$`{x4Rfht$4<2?us9R7=Rmt=TVY9oj zyjl8_6D7M`?Hwg_79|oik zD-5uWQT6$$&(Qy;bII%GF5L*^yWO#D5(F^_*egkB|2%Uud2GhjyK(QWDcBg z_60xPlV|GMig1pgS#G;UC;>}AL-0_sM1TH^Pzc-;9$^CUY3%^H*6TLt<=}PAx=ZOk>yF`708mlIYZM4wZK0!H#M9%Fb` zv(&liz}Q478~sw7!0{L6bYjr>7e2y-P{@k2kN_oQz0N?1IJL+^O`h=Vu8POn2v3{% zx?L^OtaxiG7go=g6|oStUbi@|hZ(u|p;f-)6KP6WPs!z^p7U+(cQ4TU<*sKDQwhSv zwudLycM?g!J8!OfWYIDHa(W17<=g&E<7;%TuqNU5q@m`J_W0Y(P^EI6znL48+c_%e zG1Ob3x96RQbjmv9U3QtayUOs3?oru{3o?)Vexf|~tG9j7)_X$eb^KUnHlfPn5_`w@=o36eRP+QTAPtiqWZ8hWWDVp7@uUi(u}er!>I;k3Gdi2gg)qW?4I3 zwhJ?}9z1#HU5rk2igv(Zf+l9HRWVh#Ic8ci57cyobUZWcqJM4jm@0BtRTs{Gg!v9qvEZxvhFIIm-B#MV68vpt2R&>XB8B+f*<_N^Jv?A+xu{Y|526+EAAF6 zIHivCjeS67e*UEDt=BwOsHV{B0poxHyz{f9GzZf8BP5M%IF`V%@`E%SOYq5ce+tPr zG}G}oTNBY|$Sl!F2c8+QLIfKLn~OdbX!aWOZx*UCx0_>CB41j1vb6pnW9@Srh1ZB- zxF~>KO|lu*6U8sgWF%|&Y+|hFGNj|n4MK#Dyk>acG8etY`4QJC17u=sFoW`ua8&HX z7FjIT2?z>6i^Va8tSi_x-P^{8V@|y?*BqXApXdKeP|Gz-3-y_5mK>56AzZRP&AJ-9 zaFx_8w`Xfz)AIFc3sVVK`+Jolp%?e8s8n|-E7plpTE_9A{Ry@d1$JRMVYZdy7CG2` zbx+30GwM7IoAUr_0CCMiJ+(kMzZkicoWw;ovSH|fF^CQu!5$z*Li=t@0j0*iO0TJz3Y1i zT*G9S46)9tuh(S1njSiQz)Df(uc>|=P7~r0SmXSk{U9Kj6{bqtM%-c!Xs?(|=WB>| z&wsA{dU9hjQ|JeZ)-*!1I#lAw%A1tfT$HwUI{coDD0yeXi{K--Tnp3R+Z0wNAe^<5 z4Pu$W#*boddhdCuw?*PJ@2;h=2dioa?M7P>J~2;O-l)l~RXME2M?LxNBXOV4pWCrx zyV@4h0F_%od?7y=HcK2y^bD0rNV=hzWL?^piHx z2J>$UUl0=JR0Wj8J9f>7;A^GPF6|fEwO(BbKlu{>XiH_jX`f1Gc=Tt#gq47VI!Qxe z+boJC$JEEWvB$=`O)CD2aaNdc{7r#phMFjg;qJA{=B(C*mV^1exgE@IQeUh-NHc(1_w3-4Gd07$RE zTouV(7R><-j>`&e2Lts^2qULi-29_fdi;lCF>l3XR+WaW5(n404;!EoiX^v|A=p*z z)Tv2MiapIb{eQf??}}OuwOZyU=yj$X=(9YjBjVKddYydKa85$zu-0lDFxF~Ic98L3 zF8b6Ls->-|wi=j@x^3~cRv*Dt7!Nx>JXb=indwovjb28@vOn5UdM^{F-E+FV&m31g z_HiSMolE|uf_J)rNVOX)CElw3znzfET^#qHE%C+SsTPjqJ`Q(_#3CiKJCD8IGJ5w* z>Ig2-=U7C*h14h79HlBW&Df^Nra8e-(y`3}NN_ft@}HNQv5L(Z+tU-iA1@)-j@xQs zFe9EzuEfjJYsrqo2e+EoX9al7zG^)fQ?41-zd7;>EW8m;wu`qrPmaA_t$K(KkjWp; zPv`MVW{p5G+)(CdP&P*MOppCcq$;TdW#~KA_FH{;QPbphPwm_@blai+uaT$1L)??} zFO&xKtN6*9(owAXqbjrSbJR2fW1F!DH0~{2OQ*eyNzvCd)W5xyGdE>2yF1ZnXlvQi zQJfDNf?--CPB08&%W@aEcz_5+^!$qdx$F6FSY}HzafhcWVQe z8Q0x)XfO}+T$OwLLCjZF2C%g(_OVYL?45%igIUx!6rDc|xzY!(_g!BgH$&BiiU7n0 zxB`GR0e=sKmpT`0^Q?e)+t0O=LFd;-iD(H2X>L9jas6`teK*tC#%i55cDCS$DX#`+ zL56Qw_Scfji+tlWj2Y{&ZeEwG{M0)k>&|_~-lvPuf>*YnwvVX|gMZ8U_CjSTWUray zFAY~G3GLKN*<~d5&cE3*!)5p@C0E-)@4kp4v)Bf1hK|5;B*LzQqIspB6r4Xq7-a1m@Hwj0ODI3D#$PzXa#~Fv9n(Bh0wgrKALy z)}g9c1Hl!DFYvA%M!04mi>v+*etsMfP@(GB2r>8yscRR0^JK*>V6z{CQi<#aSRB-O zj1Vi6<#Ll1n5vUz6EJVI@KI^@;6Hvc^P$V94Ew`bLeHL)Ch;tIS1vlCVgl@987s|= zwohhmM1-9xwWJ;lj0l2#L8XECvcTx#?TtqNn+w<;IhuulZLZul@bM!Q@^S&v?n#90 zaVK_F9#f$xbLL{(^oG z$BvaED1!(iF_Ga|1$^~=63derO_=iMjc?yh2BSNaz@{F?F4TZBq=ruvm4 z1~o|~Z=!$Kk&k7Sk+n10_2I8$C8jJIgdZ<7hDZ&Nh3gs(b!;PD=aq=dOn6J=`&Y5K z$X_xn+G!WNO4{Vk?NOLc{S(_FUQ(1ZOimq0>X{)7VArcHu?X1geBh>NaJ6;dob2J! z!L@E8!RI*ahwfB6!c9>+Y>9S(H7eK=eZ2)poeO-1f5^9$Xn03p&NhAu?F@j-g6Ldu z?7NHp4D4At$S2*hfEQH?6E;`Hu&pK+*(*v16&CzIfbqfH8!-p*RDTe{A~1S^mEQvP z0k_A22xzj*|LiG<{u#~vwIIlap6&Xd3gCK+YpQ7}fbda_L#f?pWB+s+>j~Xc`F_87 z(}K9AX`EjvDrHCsUymc?esQJ!>j6p@(b%p91AIi&OKJ9v*R{qpc7`vrAHTH8d z=*_|?!8Tx2VM3^gM(Sj?B8XOc{C~Cg9#BoL z?Y1bErORHUh$t3pL1m$WEJb5ORHTVX=qzJFM8K#BC=$!EMF9l`q)LZ`fJhaD*di)Y zRGJ{5p-Gi4fe_Dp@$CQq_c>>bbMLt4?z_hwdyKV~E=uy{``-6`o@dVa%%>kSv;-eX zNPJHrV|!7SBgIWay$go5jN%Z3^Szen%+k3}7Q=|Qo!PAuY;U&nk6hmD9dY9LuIiNu zX#T8XUEkrLNey2*Mv?`A78(p^XIlFnyCZ>gsxsC%AQm& zNxoo@$9+bb=+R>az1qOY^H)|2G)F5G&M7W zSLC(IYNF;Z89~gxzgkri`YT<(AIJF)CQ*xFO`|Tr5Iyu%x;jhIWg^pUQ6D88b-wtj=Rs$2q~i=H_>u%CnBxgv>f7ReFrJj`OP(bCTX# zIgVeG_~1eXbZ@_Q*Xpv~*wdRfw=f=0EHZte+&*)ph-JK(Jvw%k$X)3Mr&P56NsPeb z+^(cj&9giED&~3__^sX?zVgYR?_JsTxqcMnKGX7deX`2cPR209v|Gwv$9z&qUr2NyA6%m-iI3nxbU~JLqXAy!q7_ zr7_Xe4B{t1Cke%`NwDU4>=2Ql=LvVug?}A|Nu?q^6M)mC4Xgyn4Xa@9vK7s#=1?P& zSSPaB3e<@{geXsD9tb3?1c?}rnw9XG1#w(DIvLOygMQp*ae~NdY~%RQf}xS2z4kt` z#j)bV^Poi4zz$8b^5=WyP}6ZXPf?_oET(KbRuONe7c_9?O{7NWlX(5g<#lZ4GX>iH z)>Mw#viqs`FFf|6Up=yWHfWIQ$Xoe?!m7?2oRYot9|b;q)8@W6=VRXbRPLdA@7%gi zMejPQ5D{I~*XF8r>R&#TzivH$pr$nHk3LNE@Vc9z3I&tu>hD@@k?OCX+zYU0E$zKH z$?TL)fA|f~Jr@qP*)^lCMt;5N>F*17Pr7NKq+)6~^>X0ZTR-KdEbY&w-IVl`KGZHy z{WVMN9%a9ZROd%|e%$9h?tx=rh7uptzF~Ut5$mp;DW4p>*vxmK zpvi+3dJFE%@^MNuZPMtV@9m1nKm8@ivHp(xWa|lTw8_+bVdL^AjpxSPiIy<;1UH8C zsm2>DI{rbVQ06zY+UHS9ys(ay_y=aY7G!mY`t+E~w>hXBrtbK0+u%0+CWL^)?MAo|gVsj>by)6aLi)+#n?pE@A%n<6)8`S@4-+ylF(g@#Ap7&vkR1TURzRt0jg5q& z^D^#38fG$M?^tr9WCuzY74=jK%)YJNYBSm=W6vxVh5JgEgp?!V(DBKtqCpdWA*WHE z(`9YT={faN&IrO$IUTG~Bl?01DV8JzH%5Z1Bds5ec(;C7nYFS{yrXo-e0BZK0B1g^7JyMhhHpX3rE^MPNpzKwyBTKok`J zRWC$~Mvz3i5kBk$y4v`Qt_5Rt{1D$EsK`U5(L#q*9I151gSikR?Dn zGL{XxHlT3_pNCu&so`Qm>g}J`$(#z}8=#j2>lQi^lt$tjf3rgxw15ysX~X^f7B8Ib zM6nO#YyCb%_+;fT8F+a^Ds?$!t0_)Awrbc4fTW>xkr~2kDfJ0J{l>=j`~2n{qwI%8 zi`H6NoY;1=_?797&zy43bIfSSSHhsYDpzOikH=RDDvdrKPM`kv%Zj7V8qdVP7%ckW zW-)ijliFvwRyXy7;KSQj%9pA)`DzwZW0(0o=YQw&U%RY0He-w4SmV}BolLIlo~zPH*frao}e^r6e2D@CH$>LYHf zIbr;H+3Hc0gEhA^S4TxQt-r~CYM-!LT_x_))UDz=qqv^+Q@YUJ(xCc!p85W64Ss{} zirTc0-S!E`mnawSx%>m&y)UO-VWLYV#1+!Ef*;9+QLf?7OH~}VUaG3hGi-NPYTvCY z5*GKfnf|U5-pqIEati$x$XRWhzGPncX9MaicWsw|(g>~>;Phz@R^jn}Z`^gd=O;Ga zcPnX}yUV_`^vz!vS?)%@XCqF48?VqmcRr?{O{W1YDA0VOpqJyrue#)WHu>1J>!R&D z<#yb-dE!f9uFv@dP5uWMifFqf^2QqvO?C)v)}X$mHOfDE#*TMgQ~o(TrnpLA?BQ&3 zsq;wvp!FnmqpASTqVl0FHOKI`@x$`m%wL2(#|Vwp8ubBu?CRLpmGA!u-& zQXm|g|8N~;l3XOdV4!|k_Q7WCgDZOmAFfU-#{ zZ4P7+mOe>LPnlth+A-PL?%@24!#hG=jg*&j-QqXP`_9YsryrimLM4i>?Bn#-bJ!Bo zHPBoTvz42O!eZ(eYDxf0FbbIN7>Fr>fxPPHdtHTD5QROKc+7xcBYytjJ4wPIfOoRO zE&5IOV?MH}rDd{`U*6j{IR$@&S?9G;vy^%+3$tJL^NW*UbZ3FzMg{24&&Mzx{L>D* zi8jZa{LlJAcql#6h%*qh#l5I{1KqMAwU~j^0{7(E2K}^t3wozR(lV(a@!i!~ zB=c49t0~;|H>nS+cA-J30kU=>5)wEnkNWg zpMn}0`C&rfE&8K!UIiAz0#?EzfBxyQ7&-_S1K>5J8GbG?7pcwZM>=N+Or(dEAlL{B zp_6#oq>M#X8sg7)BG7*OI>hCfWDF{#Ff}&7qJWYqz?-s#o8pYq7uL$i3o&oZ8l&r; zRMmM6+A2vl9pGlSj)2oG{9Za4*X7A52;{1mNecLl2ly@nrSx1Jqynry=k3;I+)N=z zpcQa0!PPe5U`FzY*!+h)&$7Xi;*`IpWskF(0Jb@Qspuaw_EV}Dw6>u@0=??VMZ3C9 zvsO*c4=|duvTJ@qTVJRb8c||3h;3CaAT?G(7-YfUpaDJu9T`eb$gN2px@q{3kB40| z*8g(Cgt%JQe*=^J&n6CI2sce=f&vx|7G&N(CF`o#GPdBMmn5K^-{O@wX{WvJ+X2g}!XJ;! zwwcRDv*JT8gWFk;bEOTE{evRY zU40@Z_;oRVC!Dt+|8BxW!Bt!VUY5{uCB5<@GZh$fr;%LmFL46?{sfsXfKeRWwpRV5 z%7U0j2WKWLLH!rP!GkAK86h~$jc~9|rj}zLLcWQO$^YdRV|ENX4oqJao?Y+o@A&hI zfG$5PpqAK?VjbuzQH9_sXDFZ+2c0xLY2pI8)Nr6tXvw!DuiQZh6=~iEh2(ep96ejd2tOoRvVR6it$5sb2HC*zO zCVxvJwy?*CDTgj@B3%e`BQD`%#B9VHTOM-h`B*=o2!H(!i@&8q#2l;1r$d0@Kb#6P z&}o>#`(j5B*A8a)gaTS$Gmudmk)aYCx$Zk}rhkC{`LST@{Rd}iYnvMX)qYu0sH#UR z60jT=ll&8H=6} zbN#k%@o!$mN{1Jpv99Q^p&XK-^iD3l@Ts!fRKhGhG~RpF@)U2=DbKi( z!aGURn6xYJqz~on7_<%kxwYP&X=$xmIZ%^* z?=S9`*q*94Uxcao#-Yy>@;W(jTu|nIX4xsB0rL+e-!f<((B0Q{)sz3Cc-(Bt*R093 z8SMTf<|X$t6;*ah{uNh!4*i+$s;u$F?InuT>F5-)M^5Lp^P~Og*Xia*y%)H-T*%-p z-e26-6KLxAJ!re*$aUTuPmd3eXEX1*9+aKDmS@E(4KF$#@woAXENI^vxp>Z($BEL( z)JsyxEQ3NmJ_&WwxD#2K77@F3=VDR|ie_3SBkQx=`QLO_bCj?SjzhpU;~pht5bgGFh|IE%4gx zI^cZV7K+e` zcbk;G-B2@>?C?{r?wvnhNIlc#c?0B1B~7w+KJ~3DYOsGSyez=JXa0K&4s`;KE(?sz6e}Cb~j9pFh(XJgP?F@uM$qHw0A0$sc^NyN#aI- zhE3^HN%F3jE-V2eC%HYquU*p{|Fja zcuC))C;Eb}&y1j8x{hE5*p3WXnd4k{BHJ02*ZYldQUi^hP>Zm65I0I;SaXi8Y|g^f zT!5B}Pz=xoBuv^%|6<)8urtT-pNHu=NKgLbuMkOfcICeuEGAykI-PscH?;ff4AfjX z2KHM|cbH$Va^>Hcc1Zm8v$-1|`Vxw+Sr zYtqDq{v>+9vN~a)`uQ2}G<=$5_uA@<_h~D?qeRv&*18@gJSgs+O*y*^y*o438NAOt z>3Si{s&b6o#R+ncW@`;;xNCi44a)P!U@v+}LyA+(Z-#1o>so2%9P?Yo)%gdWcTRnj zJ}vh{xSJmLNv>X(YG6V{QfZH1wMkq2>pz5}_Pjc8^El8~>N*rt`+_^*!vBmKeCBb- z-oYXB!n2R3Y^q#2BBOKS8C%nt_6ApBFqrZI!L(U9`|wvM)9}?B{4R5;WqrPM@e?+) z$lbj=Rp_(szIs+hREQ?mbLxe6y7M=6GSnpRl3j0h$p$Rd71#Cg*ThU$jIC8s9RWAi zz9hy7$y`ZT-6mR|nUg@;SDG2jdqm?a@UO0XnfW%Z&)ToDK2MT^(KWstA8Y^VdOX`S zjT5=H{I`449lm{zXgFl8Z-|DFt~#l4t;jUDvCk_`V*Gl*z^CVsuXyARrt0+M=~Ktn zc6cSNjL(;ekbr%!_mkF+No{b9cMmZ=oww`q_4C^OxBm9JzRi^8+#xj>wC*V9FO_;q zvp6a;8;ho*6z><&m73l*R$8B)JIt2YEqfu0rVeE6!?*-=mtyctVvlgyi}?Ibt7gCT z&dvrOi|@yHFZH`t?)ByB!sknN$&`{% z*;0Srdu|#GY?0~?dv=4?d9U8W&GI1mZ4!14Fqc<3hNVB{+5(-CL>v-XN{p;KejP{# z!w1s18aSV*Al(HMT{$0#1IP|gipZua$(9<^&ugVWU}M^K0;kdFUtY*u8hgxj`wpZl z_MyWygEEpBB+`ptkQ5#t^6dzy>VE*Yif|mbkuI_V0)eEg+h?Rk*BIWCmHbyDH3bH$ zR!Rn}ykr{X$k4t1d)BRM;@8Vg3>uaup8j)s_m8ui{MuI*Q!g$~@vgGWTRh)*?J~i{ z-6G$~G>jrTbe!HZ8>TjVq};>j5Aw;0pmrf1%puG-bV{gEF#ISr2`tWLq$L=qvR_Pm zx}a+`Ta1JOILbuQg8*hN34|VslEp;z^i98OV)V9f7wHV_#Ge6m#V)<|r@j+aFnU)lt&2&Q?}PIhUa>GDi|Lt(Kc|jIj7P z^J0;ym7{?Yb2!MEd6YCagjt|^=p@X=Q*lB$ak8REf`EKNcUr*}04&txiOZ4IWrC(q zB!J_#4PwlPL*jh`warXTz9&@GY$oLgaSnPTz3)2DE96Ow^PjadS46#Te8wo6+ z13JhsKJKy0Ao#vM`YzfhzXaM9&eNHZd1nuc$6y$mEVxvzg3~U&a=(*z9O=^ruaqij@ zRpa~Z2`RA(w(?nj)TJ&; zNCny2b|Q$5)j?oW!=8y>Q9sG?-v)ox+*=xA^q$ie_;2Zan8*S?M%dShu#qEcj*pPo zO%%20E(CNd0F}aZw{zQURGK@)C*vdi`J8)7UDuEPv#f}Yp;(~C2F?6_z9#=I4&&w6 zcbM@3og{{QfcW1xni(syrn*-DFq95t@!mw#zf&7E}1 zt)U?#s_=*X`bd6L_Sh{+MJrh!QeyX27gV|ADvTdd+x{-U^L6{XF50WswoXwkqJj&B_T2>t~pgjxgNbMG?{6nj$37XA{T5NI7I z59&b{e-{`cY|Dx0v0^hW6C6KVjd1}D!ZVw=0?4y5;U|Qkn@(8cd?LmkwvB!Wms@TI zP9D+=#8g1)z|BAzeO`@@aq!4XR+8UJyH`oE7+Zs)I!J~rr6}c6 z98&Qyeq%FUgSc{BiOq+N&Ul7$W!O3uW*5M|hKb9)^p|Mzg$*hfxy?~@Be{tA_-rDx z&5)?E5?6Ljv|EOj*tr+>dn}*oJo>zueuVore?IlGl;4&5eyKe*|3=N=-D=@NZp6AN z3%<>_x?LD)Qd#kK>uVej9KvSZW(SgJtd)>_hqw`?u5NLewZ$-)h`EsLF0nCHk-Tj;Hy#(~VCF znrlY$=jrNsvv7>Qjq2gvCKFuEvC}M2Sj_C&OS? zbB0=io&S`TP&WpYIVtj=V*Mk>ws9}#Tb_l_WS=~Vb_p?_gdk^AKHC$oR?>AYXV*5I z-LC*ax$v*xKtquHNI7oUdKTLLU^T=$(rhC*E9UQp z|36|QGJYi1Gq@=cxfDny9N|z+kUQ8dQ;uDO!m3d6=BJ$0FEeInE~i*8huXV&3lX-! z_y?Hld&s8J$RPSMS>m*%K7j$DM_Ffjmbe`f%o?(4m3mw@CDUD z5KbECYS1qz&--4+C8V+zn}NJXG&vWyY6TQtZ01QYHhArn5R&4M`?|2}hi^e(+_6lb zc=zatQ!{zZn`!zR&z(Eu$p}wxZ@4Pnp|8)ykPb6bO-T2#k3u(2II+0Z*G!h_}T+okl$x*c5>^o{>V9vUe} zjo)r4huO7#jr6_`#jYy`vnXd^=u5$9n?d zzY@)@C?&Q=`?vmg|CNnYRf!%qJocO;H>#q{zbF5%ki#I<&g*WLEroQ{+HNT}wl!`c^d9H7vcVxxncd zXZ?U-s+VjJD^auCK-%!~+FdL2k8%{n!%t2gquJd{fnMApiJ>$ln4<=2#NMIWw(;85 zODhtVX>|S`v0|n}p{?Tkn7EC5Qa$XW0`?zq*e6}l!Rt#zv)P*rX{x=9TDt1phLVmY z3;wdT9Y@PbzgglM-K(&AenjE2L`64y^UH!4@A#GZ(D|Yo)j5Ba`sEzpW+Y*VVcO1f z0UIZge*Y~Bz*&iR#)sZ2O;pb>U zcc3CF+E$Xzp?G>GHjW|Q_~0)OoAhXe-AqJ73}z98`16SwRwnX3-~)-WlNShRFjo44 zQ@mH6UwrjH{t9FD_I)tVb56e`*4?deH(=o$r?5#KH~rfe_QySY{2U_)-7vuPd2iv{ zyx^k?GP`G`T-xxlx!b(5G$oN1S7AO7YV)<%^+bOLyFq#nrfu6fHTew&gV#A_P~1rj zQ|G$+y$k&@^`~5-CSRv(dazqw1MMH*%@)3_J_L&S+K{Wr&@8=fOxQZb(}@~(rQOAD z##JeKxqa7S=A;}0YS!EdO&Mj^Pq}Xv(yE$5h3knaHGP&`K9+02X36spheA|0THjxM z_^)}&PD>0H7OZfz`g4XP{LVb3KA9q&_E;*EzA_1_lw_M3#&FZ_J3L6;OtG1?coBxL zp5Qcm$?v;&koM(!AwYZGq4hHD7>J$eZ|c4m)GtWOivDBXR*$2cc5CjVi?FOa%_)Zd z$^Z#q*K9Yf^x?lA=B!^K?01xfs_n1WDr~6QV7FY|a{inz!QLu2gEu!t_T1<0NLCNd z&rYdf+D6tdi&_U&LfY=b_X0l-iQ~VxW0jKJjh|M|$80A{GSRPU*wA7J<~_;tJ%GfF z!OSO;nd%T~=OR)sxE(Vo_J|_-{d}y{bmB)XqN(?Fd8W|XEM13d%zYTSabB;Nw#at< zbZ=9Z%az?5wUvFFiql(nWbof3V?#~09i;j#2(y5|R+EGMn?6;H5;qM94`o1YfAYH= zlZV~ve`jt^oEq}>%LwJe_w8QZm@U2)kvLnMOyTlAChWc@+baw#O<(V8bbD;n#HX<_ zXRCBhsV+vNvkNO0e`p@4pN4rAXYX-pSJL`)xhb^9iCPiW-}iwedH7TA(`srhe#p9B zNn%$ltUFHY)8jr$RN)k?l`PJaDi3&-9oZx6>b#XYRua~~N+Gm+3O9R0>4&+ye5*gr z(!4Dfdx3iK3oqq?h<^XrdRREab_IRq;fsL&K#d>QTSnaiEDc`uXL@0I;cmcALQkv-T+rN0b2Cg<-T*ADrB$ zd4zt;IzZ%FNJx->pBYMGG*711f+TUI9>-}1mIpj#Kd%jiDzsriIJinQ`8Uzmewl*F zE;*1c5NB4iSc1Gltzs~dUV@J0_nVMahy_IeW6!b@A^r}!m6GB2W_?$Mp7NT?zXR_c zid#6(Rdq?VKhLz`r(C{=&fYHB^>x3OwlK>W%OBV(a1)GN-{Bjb8dR@tzlO<=>jZ0c zl0%mFPWhwRc**1O<6q^M+8B->3fYsv$Imq`5pGgnHHvw8Ygb+VXy3y}GMt9O-IXu& z=e`hg8bsDxTy^qiRkJ>}eP0kT=ZMQe*IBbCQtod(9A$b}MT(Ovq!>vR3<{SoqhMPl zZ*SwqANz=GW}V0koCOMU47JRSe#_l%ilo>naqvhrhrq;Ol{9l`b@QA4A==sZzqyelr8-El zg&X+_uyB071^v~vzranhDILTd_<#F=oiHx0xOWnmN;{0&h#`g}5y<8&=qIPLnNFz7 zP>)?AT04x1Bc4Y{`92L--gsN^^LyzJ>;U8rviRC0+aQXkr;y5cqCpmeC4eLwDAFHj z03Jue%fApSvY4bsAQiIDsGlBSVhu16Zk8MUHE*Y?WUUi7yHoG~ldHQ}9oz|oW-^B1G;t$kC*F_Aj;L-ruF@Om%987U z6hiZ)N^-j{YnQo+1mDh7MBOd*b!Tu7xgHw5();A$n-|>GhrHS)LqYVW`6s%r3Iy(l zk7jyBH)5t_^-iC@(ZVPF22zunOzU1I5YbTX*k)YlO?oxW3yDRq|F8Z4_AS^Fo5%(@-PHTlzu$=1slzdh5*&-wIc` zdHdb^#4)wnUxZWp{~XHEWPChxZ%jzL>B7_N(kuY z%^-Sk=-FzFTnO&{`CCwbR09+#>79htkH%8aDmWm`AdJ}{PFRPa3fLgKlaU8r2$A*J z12DAuq=+X_5y>t=K4>$u|rM}0oKZFxhGahWFA%YAy1&J(z47kw_1IasN zJsUh?hEiByuGeewt8rw3UB?iv<7o&WA~u6J7FdQ@a1lNM08h!=B<y!in)X1yG8WZv5AIk=J5@Xl(6aJ5(QtJxVF>g z>)kWGu#)oz3ZkLbSyOjApA>5@WH=uz`c2V;y?=_YR!OuZM5J!1a5y9N_U(Cg#pk0I zW;{xltl~yrd1`gYbDh9oj|)Lb2D_QNx<6LyM9!{1s2VAKN}1bvXT{(oQ4-@XHO5=9 zVE<%T=@0v9>|iB4AjuZAf$v2Y=D8r~c@Vecb2DZj*xwVGLB$LZ9l;sF8q1)DV!wM> zPFNCMJN$hKD|VB!&NZ`-?Wg&?f!QbCjOtvcb;x*b=O(XNA}a_sHJ=eYOBcxdFK^2S zP=oeHQ^l~(0QL=`$z_6+6L(ig5exD2LX9@g>Ufs_ONYdElc?;>fLXM6?jPATeQc(8 zIj6w#n1WU8ajlxjAtO1(p+(g^W^0nC6%XB4iF>34(w>jfi26$FKR#VNGjM^CddvIC zUC-m+OESXYgU^cB?N*VUJWE?Gip;q)U3W>3QI&;C@c>&>Y3y_64}tYH%DIzvzWPNk zKQ78Yak18;YWt%P!tv*$2hOe z+&(jymRR7l#s^{DWEg|oj~GP@yoq>Yi1Jw?Y9s-9Px`~EIpT;kQ*X$aZb1a5Tc zk7=J@`Mh*RI~}8S`}jCSu$<&^e$CRd(g}H2bXKd!tls2O)|W&#`I542eszj0wWEC1bfgGCwyE{jUIr>`6Sb}c+D6$9?nZ$J$9P0`k?$M;z z;%>+_%5hBhAi!x!B9uzd*5&jgCo^9f45T|3=LU~78UYh>A&pCX9U!x16h{C~HwbU= z*yR=?MCP#7J@URPHsd<1L*{kD2I~oCt99?h{J1we#j^~3*Pkd{pj;d`#a6VUFSI1{ zM$T$lR>SAVZkqg0Z4O_vudKGWJbaZt*?S=wWu$^pMz1l-NVQeWyGuSPG|~^yPv)qI z($^k>EQUYdt%Xdu0LJrbIEO^q-~@#XA%`*5^dkWpB`2!t^aw-9sNeJ#sC3vM`xGsL7ilJGnkz zq3>E)%(t2Bc`rI1Kfa->HLa~PeD$CdvdtH?)mk^||BR>YaksYCac;O?B;WAlNbDI! zOR9Yq=`4A|4gXW#D|xoO-z5wq6?#$r z3OOu&RjSn(dn{d{?Q`Fmv-_tsiENks)_Zx?6LwGif&j;UPwIfu&hA+;^`Uw4y;-l; z9@D5``#wrvWa4Rb%JF9C^Y=gH1n8N6ohCEsE=WJXbM03AdxS&mdxQMCBEjUnV7pC zd{?n4GNvSL;PbaFl^>SB*Ix8Sf1a@YMc;`~uO`eyJBceQwq-aRn8m)`f|s^h zI(Hqy?)G1z#!%=m%6>w3ETlMLg%n`wnm-=4g)OO!;_1aW2eFc&NZ5ClkUdDxNn?B| zLbxZj8DUk2a=Z=0Va(bg%l@@e{$jGp_+H2_*jM(*tZo15h1+kX%oDxbk?tmls*E3i zYCy@M5f~eQK&^AT&Nwl=TM+p*s^)W`V8?xvGRWZELb5Qj9sdZ@q8t6>=_hZ05#?9yXZiBo4KaO`sey`zcr7c<)KD2vUq=fo3pRxHva9@g^bAYA#XGI^3uZYgA(05zk%X&d5+W6yt*pCc*zvS ziGfl`?KG>{jhyA28%z9!{_3-PYh5imzUH;&m9l^&KU`lFp6%9HU@ z?>D2v8TcXL8QKX0O*FFnbR=+7uKvy!!~K#KDdof)ME3yzIM2mwNVpiNFSlD4@vH- zx|ewGN&P`~OqGcaB{4R3&)>Js?)mY@u6^QJyGm)sAI-gtB(HBMJ)2DZQM1CeWk>h< z$5};=i?Tdy-z|)Y(*3PB%zf?l!jJ9~sLNKXG1u#reXf`#iT~7~<_f=^)(XQ^jQ~F> z_nPc2jC{YHlK#6d=-K1Vch`+OXliYA^!{D7o#{c3yf?o%dm@wWUih?Cn8)RDii+H= zrwliA7NVik95X5&5DR#I%+N*{2$xKxYrPk4l=|_X^#;06Ae9dV_oh}tP{`;>~$d0+{$P&*w4=s5C3v)Fl=WR*XwIQpX zngQKwG9D}L)s2Sps#ZIFbh6U3cjeC!)bAeYGq{pvBWCY^iN<3hBPIR!Ut1@Gm_owB zW?WcCVM9xbGxvEJDmzSebjX3C-_K|*R(_QJoZ%_OD23Kek(Gz!faG9|yOnKzv~A?;4}W^^4hae> z?yS!p>I)so;tSQZs$wOqin$)^bpsi@m2SNm*MDb4U;lext)U|Blbde_=H&)SyKNe> zHci(X|6H_WtrmA$%t-}xo?K{a;E>~uB*p>BVTo(pw`!;E+5V2TUmabV)7p$W`AUWl zCrE`O-7MIQagy_rQ5vx_n@8O%PnwC&otRZ^=CI{XqiIBIt=P*?TFHGhx905>T3)n4 zeUnqU>bl1VTwDsLO=m|fwBF}2xaXdO3(r_`kXP+GX4g8q!WDY+BkLD<_r0h4YLE4b z?=l_=bhB<@#mSN+2iFG**VGp~#O?dBtVtEQ6inPpUgsyBA92c?WTZ*3^BEm1w+Cw=+!NW_pAkqE@iR zqT_Jy*yT0cL|HkYiiWjjs;V!rsKy3nTQS~~AaDg06ftn&Wm!hjKTxV-GUO6DU zK09F7Q4cnChrA~*nqj3wIk=&$(a$^Ox^{j+($Q}wOBUSLFIf=UF4*L%=|*$BHsw=& z9%Z+VwC+cJM+*-P&1C&s{*>EJlbqEU0yd^!M(f>9(d|u?KtdEa3tsCv%M#_ ze7z9nVAFD`bhTXKtlDL9ovP1reW^a2qHnI-Q=_4sU4%{eD4w1;FmDRBLEh4TerY{9 zu>4X>S62VnR-~TwWz_E#8x0Sx9{a;lYkFam)Y{hf&pEUjdu~)(X!q^;?9BVCBD(Y+ z%-^~Hx9VM`k)6NQ`Mz0nL!~c7$K+#QpeOZaskBq_cpbMw$JgFIymqH)yZHW1W~{eL z;ARzrPdxyvWd&4zxSdi^z-_iu%r{@f6l@x0E{vTqt?TaKLAtM|zM<*3W~D_%|CIZ@ z!Ex{{E3VpWR@h8MC)2QuAT_NASHjHP-wy0EI8*XdP8I(i;PRRR4(9|;yYyaj@$Qu` z_lJ7g&Tlx=FAT9g#OZQnqo&hVBxQgTQlAV^+Leeaz!=OaMwwaM4@*PpOEquPgJ07} zNu%wrQlDx;8NRGu_)hn_lO?m*X4iB6iv{DGtn5BLKA)H-#N4X2-D|tr^WKDc+*kMXN|$`>amYhSIVj8j|nC7WB4pXhhw# zrDcW9$mY?81=GNTJcAghaf-^bhTugl+cTFO$h!5)^lW0+L;S-KS*c2(JJGBZxGppG zGTM+aaM$ro*cH?BM*0hF;=an#D@g%+Rv1ECeO#-qZ=dy>HS;zf&~o?btUJ?h?U>w= zC|%!;(`(%mZ?~5Emh5pBI?CTPH!`@*+auP`>n~w5uYa>Lm3}K~U0ig!+h$(yqwC_^ zDLbwx*@(45W#iNsp)xk-o$N@)(5i;)GntoSO{$lyWL$mnr>vIyeNdjSE`5T}?D$bC zh>I4+S?TePO`B4cB0M}-Qat_LJ7IDs1|<1#7Opc;jgFaAuP*PjyVPcP5!-6wcZErn ztto;|sVeu82eYd-uOhWaA!_K>T8oMYyG*Zaiyc%!8t>fUUihqIC^VUyBwXjdFDJQi z)7pYRKCj#z6UMyhq5Cm(@+vxA)=fD}XEO#J(cq9nh65RcW5tYN3T*EK;Q=-?x}Wbt zjB`LH0Y~~k2-GB$e^4wS1%WUQlMjGVnvcn1@h>6X=tBl1G6yFDlo;q_=4p}HvRw26 zm_XlWj&UOfIn?GL%xlKizjGg_i!3w<5C_RuW-yd|CVxYWchxuS3|A9@~4Xe%UHLHY5dY_orD(F@> zY$rS$zg^j5ZTOWnw5bJK!tM;Idv12@3;gIYLt@0HAHe4aE;k14qo9Sd2!~L@sSueA z{irYWb(&M%{$uyU5b<`Vx30;3f26`27aqX`4{og2Th4N?fqhNFo@-Nvj71DI9rL>U zhD_Jh3~aw9ixVe6QD#&>D*c<@zqK@jhUB@0kCn1d*9`0+KN36dV3)z0v+-jpYITx# zC@Z{}da;=%Zn55JNPE+mOW8deE3T{GqenR4nt`6^e!h^nr*fLhz+|qc^%-#^6=I}c z8@<1;p6@ch@4dp^t8?y#7yZ_+_tH4O^L$#Pid3&dN}G)H58UgDqh>Rs8+VmB-Tae# zPu201;_>~rP5;bw@W}P%vj=HVRIa8b<5L8kE2|Gm^J|=ERXtK}!n#L$N`@kuwb@5g z`g+)y=UZnG)RXmh*5!gS!6L?`qh^Obv-`syKM9y!+1l-qk^WLRTf_}dtywIyd(kAj z)~%hIZ&%nd%kWul%oKwUmwtq*-V9aM^?EVXsCsdKqEtyzO>5%BC`lTGKRiXIOCqfU zJGR}~C^^H>9)E~^dd~Hk4YGh-rDcP9&(|5$Ym4Ypq=Lf1zMpbU-4wP`;5Av4aKKHp z@4StLwDDu4Nn1+3g2eQg)fguuVY#EA%Ir;EU(V>S2(Z4PnlfjkXqS%-KV@#kS^O?uA~@B#qF{J2c#zblD%$ z@5qS91j4U-hOA4IFT^bh9^$+hz)Kk5CHQ{%!r;~|8^#2Tsk}eik<o4*&K-PSVe`-c>*4@YOHEz=&V#g7Hom z_+jy)bU&l(3)T!d@U1JX4t$7^MjnsM_;xHrIt?3`3CjY#$H_=BIByrZvtjrS!>axa6T&NUDTYmFP<9IU96z+ z{p;%ZGK1$RbYkQ_CR)(Jo8Ckn3%?`lETVx<>*rq`1|p&JG)|+|Y=-~`HvQ1%o}qqP z2Ji>W;Sd`EAZ;!VXEo+EPJzi$g?9dftpjtEeM{%eX&2vYTT^t_hAY*N{rs548xH;6 zUFsoz_R(weV*-!*s_xl;Bu44lV7cU!$Ye@GW5ecqk~@jt&Qu$kwmaId-acpaVdjma z1DveQ(}RLhFj|{=5J?^JPs>6J4Mb=#cxN+Sp+W|^Sq>4u*<$#xkx?R(&WM<>u|N>A z$B&^24n2J&;nDZ!Z+FiCMUZie?hL1V$WpI^KLLTnW^h5N5E>QJTrG+4m=0Q}Tr4O? z>#X%ea6x=N@@$~DDj;C(yxfqK9Y$}ox+bQSSb{<(@&VGp`(jvSz=zi+6dkuWUgoBQ zpPCOAX&FQUDP(T@ zm<(Pk-Y^c;9GvW+WHfNYBviuvWMZNyptnavO_za7<)$$(-x+FJHF}jZ8m~a{9lI;C z*hJI>DEZEB5c6F}WdQJicJ?bbeH&B|V6Jt5Ux4LOB(_!`^dTUGEbl+ztzxVaxHDZ3 zn%&Niwe?Njb2jP5R+`2rH~Jq%TA>k=^Da%Z49(7o6ygR`F8&}i!2Ap%nKWZkjQ_IZCR%nf^4W|5G#F`k@0C2COvJ>{ONcB^K(@6Wge-=7IeNe+1{*6CCj%YOHxwI0G5^vr zjasz@U&hW)^aQ|{YK$W&4zjRetJq2yHz+_(f`l0u3_58sB)yynba}VvIY=}iFcQUq zMQX&^N)*Kriec0nB!1MBy_bZ0B57=XjsCXvTgO??mj^Gf=oV`}s$m@8wgGy`nz!AYHhBZ0_8 z-eWN&ZHE{foEkJ>5a!&7rq=GIr&=ZvFW_QAOFn?8smO^GUa9()lgTOmaD>QGznu4B z#c=-_{l#&5WzevH4v0&XdfG7EN25E>h4h$%G5@a%{7-QQQIlg9(gGq?WC zFQ<{5g%P0F>>Ha2DHoBj^b^)C4oc??-upDHk}vxBPcsv0#tf3S*tmnXC8rJQ=1-6| zYVy%t{FG=@vT#U!<`cx2o2KJQP2qy4ol7`v`WG>jCy*x{BX}^wcb*z^QWA3px`p=A zUH>17Bvn!}6c9+aw1Wg`aQV6XdhhDG*!4&cx%%wm%unt8Rv<^ohIwPYkA+dxqX-qbon9`u1>-jZu zJtjQFvAyIXGw)Hb>QW&zbr^zY3f#9Igdk6{?_@flyg+*!=rd{3um}^WmN8NpI#dPQ z&WZs%WrpDWu{t3tIC_ho7(#`tCS2<*D`5gepCli@N^LIc$9H_8vdtl9AUbI~8P`0? z`v3pyO=BX4l=c2*J4~cwKN2M~|Kc*zKVv~phNP9p5?n^KKsK=yy)#MBtd$*rxz7cW zIShDEL_BCAG7cC6#DjAj6G*x%9R4O^V5}45xTL=oRwU*%(bN=@)k4Gqt!b(S0u|O7 zUJc8DP)2y#MC!$OMVg<;Y$M2KhJ`IJ(NwL;gLVf>Y3NTeixeRWYGVOpgf|lND917D zH?^E481V&GYs2#F*bT#ymjD)jvkU(s>gk%U1u%YN8rV|47-QkzV)<7#_mM`Iaj}K?{n9G(5j1zrR!?SFl@*Yj3%24qX zplpsK`tjzE7|0wTO=5@uq*`937R`rY4CIL_+|0`fKOE`igMw&biHsYy}=rmy{Yyd7FnQ&9^ppM z$yTF>$54nOxRTT$2@g={a#KMa?xbdrk65;so`9cu1})H}B;?;0PnEGw@s^b^oxIvz0Em zO1h8ikK#uGVl4IN^C9!ZBYLe!PcR_{*yEz96{r>+xv9X!ld;BdHe(|q6@*?KUIQ2+ zpGy?OX|{+0)Kau8CgBE|@O>dA#@BlYX7ZR#&&9YtH>h`>4BtKEqvR&G$%sRcK+FeX skVKEhED`|!2}n3B&L=Uvar04U>F-jsO4v literal 0 HcmV?d00001 diff --git a/index.html b/index.html index fa0ae79..f7a7526 100644 --- a/index.html +++ b/index.html @@ -5,13 +5,13 @@ - Robur's blogIndex + Robur's blog - Index - - - - + + + +
    @@ -20,21 +20,34 @@ The Robur cooperative blog.
    -
    RSS

    The Robur blog.

    +
    RSS

    The Robur blog.

    Essays and ramblings

    1. + +
      + 2024-10-29 + Postes, télégraphes et téléphones, next steps
      +

      An update of our email stack

      + +
      +
    2. 2024-10-25 - Meet DNSvizor: run your own DHCP and DNS MirageOS unikernel
      + Meet DNSvizor: run your own DHCP and DNS MirageOS unikernel

      The NGI-funded DNSvizor provides core network services on your network; DNS resolution and DHCP.

    3. @@ -44,10 +57,10 @@
      2024-10-22 - Runtime arguments in MirageOS
      + Runtime arguments in MirageOS

      The history of runtime arguments to a MirageOS unikernel

    4. @@ -57,10 +70,10 @@
    5. @@ -70,10 +83,10 @@
      2024-08-21 - MirageVPN and OpenVPN
      + MirageVPN and OpenVPN

      Discoveries made implementing MirageVPN, a OpenVPN-compatible VPN library

    6. @@ -83,10 +96,23 @@
      2024-08-15 - The new Tar release, a retrospective
      + The new Tar release, a retrospective

      A little retrospective to the new Tar release and changes

      +
      +
    7. + +
      + 2024-06-26 + Testing MirageVPN against OpenVPN™
      +

      Some notes about how we test MirageVPN against OpenVPN™

      +
    8. @@ -96,10 +122,10 @@
    9. @@ -109,10 +135,10 @@
    10. @@ -122,10 +148,10 @@
    11. @@ -135,10 +161,10 @@
      2024-02-21 - GPTar
      + GPTar

      Hybrid GUID partition table and tar archive

    12. @@ -148,10 +174,10 @@
      2024-02-13 - Speeding elliptic curve cryptography
      + Speeding elliptic curve cryptography

      How we improved the performance of elliptic curves by only modifying the underlying byte array

    13. @@ -161,10 +187,10 @@
    14. @@ -174,10 +200,10 @@
      2024-02-03 - Python's `str.__repr__()`
      + Python's `str.__repr__()`

      Reimplementing Python string escaping in OCaml

    15. @@ -187,10 +213,10 @@
      2023-11-20 - MirageVPN updated (AEAD, NCP)
      + MirageVPN updated (AEAD, NCP)

      How we resurrected MirageVPN from its bitrot state

    16. @@ -200,10 +226,10 @@
      2023-11-14 - MirageVPN & tls-crypt-v2
      + MirageVPN & tls-crypt-v2

      How we implementated tls-crypt-v2 for miragevpn

    diff --git a/tags.html b/tags.html index 6cc8340..7e5438e 100644 --- a/tags.html +++ b/tags.html @@ -5,7 +5,7 @@ - Robur's blog + Robur's blog - Tags @@ -22,7 +22,7 @@
    Back to index -
    +

    OpenVPN @@ -72,6 +72,11 @@ QubesOS

    +

    finances @@ -112,6 +122,11 @@ gpt

    +

    tar

    +