From bb76887952c31cfa7f46d5673b0da5d76f0389f6 Mon Sep 17 00:00:00 2001 From: many2many <6168830@qq.com> Date: Wed, 7 Aug 2024 00:09:31 +0800 Subject: [PATCH] add c4 --- docs/chapter04.md | 485 ++++++++++++++++++++++ docs/index.md | 68 +-- docs/resources/JavaBean与JSP开发模型.pptx | Bin 0 -> 1285289 bytes 3 files changed, 524 insertions(+), 29 deletions(-) create mode 100644 docs/chapter04.md create mode 100644 docs/resources/JavaBean与JSP开发模型.pptx diff --git a/docs/chapter04.md b/docs/chapter04.md new file mode 100644 index 0000000..3709d0e --- /dev/null +++ b/docs/chapter04.md @@ -0,0 +1,485 @@ + +## 4. 基于Java的Web应用后端开发技术 + +### 4.1 Web应用的系统架构介绍 + +#### 4.1.1 应用系统架构演进 + +- **单体架构**: + - **定义**: 单体架构是指将Web应用的所有功能集成在一个单一的应用程序中,通常部署为单一的服务单元。 + - **优点**: 开发简单,部署方便。 + - **缺点**: 扩展性差,维护困难,部署更新时需要重启整个应用。 + +- **客户端/服务器架构 (C/S)**: + - **定义**: 架构模式将应用分为客户端和服务器两端,客户端负责展示和用户交互,服务器端负责数据处理和存储。 + - **优点**: 强交互性,数据安全。 + - **缺点**: 需要客户端软件,维护成本高。 + +- **浏览器/服务器架构 (B/S)**: + - **定义**: 用户通过浏览器访问服务器资源,所有的应用逻辑均在服务器端执行。 + - **优点**: 跨平台,易于维护和升级。 + - **缺点**: 过度依赖客户端浏览器和网络环境。 + +- **微服务架构**: + - **定义**: 将复杂应用拆解为一组小型、松散耦合的服务,每个服务围绕特定业务功能构建,可以独立部署和扩展。 + - **优点**: 高度模块化,易于开发和维护,服务可独立扩展。 + - **缺点**: 管理复杂性增加,需要有效的服务间通信和管理策略。 + +#### 4.1.2 服务器端渲染与客户端渲染 + +- **服务器端渲染 (SSR)**: + - **定义**: 服务器处理请求时生成完整的HTML内容,然后发送给客户端。 + - **优点**: 有利于SEO,首屏加载速度快。 + - **缺点**: 服务器负载增加,对动态内容响应较慢。 + +- **客户端渲染 (CSR)**: + - **定义**: 应用的初始加载只请求必要的数据,然后客户端JavaScript动态生成页面内容。 + - **优点**: 减轻服务器负担,交互响应快。 + - **缺点**: SEO效果不佳,首屏加载速度依赖于客户端性能。 + +- **两者的区别**: + - **SEO**: SSR 有利于SEO,CSR 通过预渲染或服务端渲染来改善。 + - **性能**: SSR 提供更快的首屏加载,CSR 交互更流畅。 + - **用户体验**: CSR 可以提供更流畅的用户交互,SSR 用户体验取决于网络和服务器性能。 + - **服务器负载**: SSR 可能增加服务器负载,CSR 主要负载在客户端。 + +### 4.2 MVC设计模式 + +参考[MVC 架构详解](https://www.freecodecamp.org/chinese/news/the-model-view-controller-pattern-mvc-architecture-and-frameworks-explained/) + +参考[MVC&&JavaBean(PPT)](./resources/JavaBean与JSP开发模型.pptx) + +#### 4.2.1 MVC模式概念 + +- **MVC (Model-View-Controller)**: + - **定义**: MVC是一种用于分离应用的输入、处理和输出的软件架构模式,以提高应用的模块化。 + - **模型 (Model)**: 负责数据和业务逻辑,是应用的状态。 + - **视图 (View)**: 负责展示数据(模型),是应用的界面。 + - **控制器 (Controller)**: 负责接收用户输入并调用模型和视图去完成用户的请求。 + +#### 4.2.2 视图层、业务逻辑层和数据访问层的职责划分 + +- **模型 (Model)**: + - 封装数据和业务规则。 + - 通知视图数据变更。 + - 可以包含数据访问对象 (DAO) 和业务逻辑类。 + +- **视图 (View)**: + - 显示数据给用户。 + - 可以是JSP、HTML页面或使用模板引擎生成的页面。 + - 接收用户输入并传递给控制器。 + +- **控制器 (Controller)**: + - 接收并解析用户输入。 + - 调用模型处理业务逻辑。 + - 选择视图并向用户展示结果。 + +#### 4.2.3 使用MVC模式的优点 + +- **分离关注点**: 将数据处理、业务逻辑和用户界面分离,降低耦合度。 +- **提高可维护性**: 各层独立更新,易于定位问题和维护。 +- **增强可测试性**: 每一层可以独立进行单元测试和集成测试。 +- **提升可扩展性**: 可以独立扩展应用的某一部分而不影响其他部分。 +- **促进代码复用**: 视图和控制器可以独立于模型变化,模型可以被多个视图重用。 + +#### 4.2.4 MVC模式的实现 + +- **框架支持**: 许多Web框架如Spring MVC实现了MVC模式。 +- **流程**: + 1. 用户通过视图发送请求。 + 2. 控制器接收请求并解析。 + 3. 控制器调用模型进行处理。 + 4. 模型更新后,控制器选择视图并返回响应。 + +### 4.3 Servlet基础知识 + +#### 4.3.1 JavaBean技术 + +参考[MVC&&JavaBean(PPT)](./resources/JavaBean与JSP开发模型.pptx) + +- **定义**: JavaBean是一种符合特定规范的Java类,用于封装数据和行为。这些类通常用于表示简单的数据容器或小型应用程序组件。JavaBean的设计旨在方便集成到各种Java应用中,特别是在Java Web应用中作为数据传输对象(Data Transfer Objects, DTOs)。 + +- **特点**: + - **公共无参构造器**: JavaBean必须有一个公共的无参数构造器,这样它们可以被反射创建。 + - **属性**: JavaBean的属性应该通过标准的getter和setter方法暴露。属性名一般遵循驼峰命名规则,例如`firstName`的getter方法为`getFirstName()`,setter方法为`setFirstName(String firstName)`。 + - **序列化**: JavaBean通常是可以序列化的,这意味着它们可以通过实现`Serializable`接口来保存状态或者在网络间传输。 + - **简单**: JavaBean通常不包含复杂的业务逻辑,而是专注于数据的存储和检索。 + +- **使用场景**: + - **数据传输对象**: 在Web应用中,JavaBeans常被用来封装从数据库或其他数据源获取的数据,然后传递给视图层进行展示。 + - **配置文件**: JavaBeans可以用作配置文件的模型,例如在Spring框架中,JavaBeans可以用来表示XML配置文件中的bean定义。 + - **表单绑定**: 在Web应用中,JavaBeans可以用来绑定表单数据,简化数据的处理过程。 + - **组件**: JavaBeans可以用作桌面应用中的组件,如Swing组件就是基于JavaBean规范设计的。 + +- **示例**: 下面是一个简单的JavaBean示例,用于表示一个用户对象: + + ```java + public class User implements Serializable { + private String name; + private int age; + + // 公共无参构造器 + public User() {} + + // Getter and Setter 方法 + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + } + ``` + + 这个简单的`User`类遵循了JavaBean的规范,拥有两个属性`name`和`age`,以及对应的getter和setter方法。 + +- **与EJB的区别**: + - JavaBeans通常是轻量级的,用于封装数据,而Enterprise JavaBeans (EJB) 是更重量级的企业级组件,包含业务逻辑,通常还涉及事务管理、安全性等方面。 + - JavaBeans可以在任何Java环境中使用,而EJB通常部署在应用服务器上。 + +- **总结**: JavaBean作为一种标准化的Java类,为数据的封装和组件的重用提供了便利。在Java Web开发中,JavaBeans常被用来处理数据传输和表单绑定的任务,是构建MVC架构的重要组成部分。 + +#### 4.3.2 Servlet基本概念和原理 + +- **Servlet**: + - 运行在服务器端的Java EE组件,生成动态响应。 + - 遵循Servlet API规范,实现javax.servlet.Servlet接口。 + +- **Servlet生命周期**: + 1. **实例化**: 容器创建Servlet实例。 + 2. **初始化**: 调用init()方法。 + 3. **服务**: 调用service()方法处理请求。 + 4. **销毁**: 请求完成后,调用destroy()方法。 + 5. **垃圾回收**: Servlet实例被容器回收。 + +#### 4.3.3 Servlet API + +- **javax.servlet**: 定义了Servlet的主要接口和类。 +- **javax.servlet.http**: 包含处理HTTP Servlet请求的类和接口。 +- **HttpServletRequest**: 表示客户端发送的请求信息。 +- **HttpServletResponse**: 表示服务器返回给客户端的响应信息。 + +#### 4.3.4 Servlet配置和映射 + +- **web.xml配置**: 在传统的Servlet应用中,通过web.xml配置Servlet的映射关系。 +- **注解配置**: 使用@WebServlet等注解在Servlet类上直接配置映射。 + +#### 4.3.5 Servlet事件监听器 + +- **ServletContextListener**: 监听ServletContext的创建和销毁。 +- **HttpSessionListener**: 监听HttpSession的创建和销毁。 +- **其他监听器**: 用于监听请求、会话、上下文等事件。 + +#### 4.3.6 Servlet过滤器 + +- **Filter**: 用于在请求到达Servlet之前或响应发送给客户端之后执行过滤任务。 +- **FilterChain**: 用于调用下一个过滤器或目标资源(Servlet)。 + +#### 4.3.7 使用Servlet完成前端请求 + +- **示例**: 创建一个处理表单提交的Servlet。 + +```java +@WebServlet("/login") +public class LoginServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + request.setCharacterEncoding("UTF-8"); + response.setContentType("text/html; charset=UTF-8"); + + String username = request.getParameter("username"); + String password = request.getParameter("password"); + + // 验证用户名和密码 + if ("expectedUser".equals(username) && "expectedPassword".equals(password)) { + response.getWriter().write("Login successful!"); + } else { + response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Login failed!"); + } + } +} +``` + +#### 4.3.8 Servlet安全 + +- **认证和授权**: Servlet容器提供认证和授权机制。 +- **安全考虑**: 防止SQL注入、跨站脚本(XSS)和其他安全威胁。 + +#### 4.3.9 Servlet与现代Web框架 + +- **Spring框架**: 提供了更高级的Web开发特性,如依赖注入、声明式事务管理等。 +- **Spring MVC**: 扩展了Servlet API,提供了更简洁的控制器实现方式。 + + +#### 4.3.10 Servlet容器Tomcat介绍及使用 + +- **定义**: Tomcat是一个免费的开放源代码的Servlet容器,它实现了Servlet和JavaServer Pages (JSP) 规范,同时也提供了HTTP服务器的功能。Tomcat由Apache Software Foundation (ASF) 开发和维护。 + +- **特点**: + - **轻量级**: Tomcat相对较小且易于部署,适合开发和测试环境。 + - **免费开源**: 它是一个开放源代码项目,任何人都可以下载和使用。 + - **广泛支持**: Tomcat支持最新的Servlet和JSP规范。 + - **跨平台**: Tomcat可以在多种操作系统上运行,包括Windows、Linux、Mac OS等。 + - **易于配置**: Tomcat通过XML配置文件进行配置,易于理解和修改。 + - **可扩展性**: Tomcat可以通过插件和其他扩展来增强功能。 + +- **安装和配置**: + - **下载**: 从官方网站 (https://tomcat.apache.org/) 下载最新版本的Tomcat。 + - **解压**: 将下载的压缩包解压到一个目录中。 + - **配置环境变量**: 可选地,设置`CATALINA_HOME`环境变量指向Tomcat的安装目录。 + - **启动**: 在命令行中运行`bin/startup.sh` (Linux) 或 `bin/startup.bat` (Windows)。 + +- **部署应用**: + - **WAR文件**: 将应用打包成WAR文件,然后将其放置在`webapps`目录下。 + - **解压部署**: 如果应用已经是一个WAR文件,Tomcat会自动解压它并部署。 + - **目录部署**: 也可以将应用作为一个目录放置在`webapps`目录下。 + +- **配置文件**: + - **server.xml**: 位于`conf`目录下,是Tomcat的主要配置文件,用于配置端口、连接器等。 + - **web.xml**: 位于每个Web应用的`WEB-INF`目录下,用于配置该应用的具体细节,如Servlet映射等。 + - **context.xml**: 位于`conf`目录下,用于配置全局的上下文参数。 + +- **示例**: 部署一个简单的Servlet应用。 + +1) **创建Servlet**: + +```java +import javax.servlet.*; +import javax.servlet.http.*; +import java.io.*; + +public class HelloWorldServlet extends HttpServlet { + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("text/html"); + PrintWriter out = response.getWriter(); + out.println("
"); + out.println("<%= new java.util.Date() %>
+ <%-- 使用JSP表达式输出日期 --%> + +Below is a simple message displayed using JSP.
+ <%-- 使用HTML注释 --%> + <% + String message = "Hello, JSP!"; + // JSP脚本片段可以包含多行Java代码 + %> +<%= message %>
+ <%-- 使用JSP表达式输出变量 --%> + + +``` + +##### JSP与Servlet的关系 + +- JSP本质上是一种Servlet,它在服务器上被编译成Servlet类。 +- Servlet可以作为JSP的底层支持,处理HTTP请求和生成响应。 + +##### JSP的最佳实践 + +- **避免业务逻辑**: 尽量将业务逻辑放在后端Java类中,保持JSP页面的简洁。 +- **使用表达式和脚本**: 利用JSP表达式输出数据,使用脚本片段编写控制逻辑。 +- **模板和标签**: 使用标签库和自定义标签减少页面模板的重复代码。 + +#### 4.4.2 Thymeleaf的介绍和示例 + +- **定义**: Thymeleaf 是一个适用于现代Web应用的服务器端模板引擎。 +- **特性**: + - **自然模板**: 允许HTML标记保持完整,即使在没有数据的情况下也能在浏览器中正确显示。 + - **易于前后端分离**: 前端开发者可以在不依赖后端的情况下构建和测试页面。 + - **内建方言扩展**: 提供多种方言,如标准方言、Spring方言等,以满足不同场景的需求。 + - **静态资源处理**: 支持直接在HTML中引用静态资源,无需额外配置。 + +- **与JSP的比较**: + - **静态资源处理**: 在JSP中,静态资源如CSS、JavaScript和图片文件通常需要通过特殊的标签或表达式来引用。而在Thymeleaf中,可以直接像普通HTML那样引用静态资源。 + - **浏览器兼容性**: Thymeleaf的一个重要特点是它能够在没有后端服务器的情况下被浏览器正常解析。这意味着开发人员可以在本地开发环境中预览页面,而无需每次刷新都请求服务器数据。相比之下,JSP页面需要服务器环境的支持才能被正确解析和渲染。 + - **前后端分离**: Thymeleaf的设计允许前端开发者在没有后端数据的情况下构建和测试页面,这有助于前后端团队并行工作,提高开发效率。而JSP通常需要后端的支持才能显示动态内容。 + +- **示例**: 使用 Thymeleaf 表达式语言在页面中显示动态内容。 + + ```html + + + +Welcome to Thymeleaf.
+ + + + + + + ``` +Thymeleaf 提供了一个更现代且高效的模板解决方案,尤其适合前后端分离的开发模式。 +相比于传统的 JSP 技术,Thymeleaf 在开发效率和浏览器兼容性方面具有明显的优势。 +Thymeleaf也是spring mvc的默认模板引擎。 + +#### 4.4.3 Freemarker介绍 + +- **定义**: Freemarker 是一个强大的模板引擎,用于生成文本输出,特别适合生成HTML网页。它可以应用于多种应用场景,包括Web开发、邮件模板生成等。 +- **特性**: + - **高性能**: 由于其设计上的优化,Freemarker能够快速地处理大量的数据并生成所需的输出。 + - **宏支持**: 提供了宏定义功能,使得模板可以复用代码片段,便于维护和扩展。 + - **复杂的模板逻辑**: 支持复杂的条件语句、循环结构以及其他高级编程特性,使得开发者能够灵活地控制输出内容。 + +- **与Thymeleaf的比较**: + - **模板语法**: Freemarker的模板语法更加接近于编程语言,提供了丰富的控制结构,如`#foreach`、`#if`等,这使得编写复杂的逻辑更为容易。而Thymeleaf则倾向于提供一种更为简洁和接近HTML的语法,使得模板更容易阅读和维护。 + - **前后端分离**: Thymeleaf的设计更加倾向于支持前后端分离的工作流程,允许前端开发者在没有后端数据的情况下构建和测试页面。Freemarker虽然也可以在客户端渲染,但其主要还是作为服务器端模板引擎使用。 + - **浏览器兼容性**: Thymeleaf的一个显著优势是在没有后端服务器的情况下,浏览器也能正确解析其模板。Freemarker通常需要服务器环境的支持才能完全发挥作用。 + +- **示例**: 使用Freemarker表达式语言在页面中显示动态内容。 + + ```freemarker + + + +${message!}
+ + + <#list users as user> +* z*QxF91Xx<_VoX?+xlYl3u@zMZ<1^&wR94{vGkqy}Q64wk}@F2v@C2;0WQw+ZL9pvVgc@wL?r4>wKanF>(fY$mvj? z;rwaH{=mQgtjK!XX|d42+pBq~bF*(Vx4IO_F-}VMRR|PQI7O%9h<1OT0vJjoi5sl= zFVnMm 0C^yeI*06(wTdlG)VV?zx`bnK!K&u@TEMg;oXCHd+>{V8n|Y zR&(L+Fc&xVQGi3CQdL0`i-(4^X2_qU$Hc-@GMXe^>gt2C$R!eIB~19e)OP-=wo3TH zM|ibr+R8pJ8+XiJcZ^;k@&n>N?R+OO+RfK?2GjLw)49T9BAws!67BDJB3vOtq B`H(tMHv^(`w2%p8N&AO=7mE8v`x<&sw*+~FSiGFm~$QXk3Ixol{~Uy z;TLc}6sgoH8Ih=$l)M+b|3sB^WKH-W2oMkk (L!lt$rb*A1RKB(KR%$vn Jg{7NS&D=$28UFSq(2UTq;no;x`qkXB-WH+!ZsfgG8! zF$95tYy@`aEQs&5g9v$Dm%lF_UZZ}kA}ruE{cRb5@ES8S^*I{DI9CFt3r1vVUt>3~ z1z}TD;{!tgNUPz97G2uv!MD?w(Sj;SN9#rm;$sGgsblvSvdKUkzl2CW ~D%P;(Z`>*nzL+B-bljo;3GY~u8D^{YV`NYrJ8LeA-P5z>cI`iFc }7w{|1xP=lD7cqgn0cGUZS_HtDc9!gs)l{0R%*)|V!bm;s>fzLi7h;!Tk)=}u z1$APg(z3SBTf1a*Z9hy-mCZ9<_Bc<*D8tGOBUn5>PN~*6qi=`;6xETEObSwBh5~*J z!2}Iw19>A1X`~-=C|5E&!Fln8hGRX%` DLBe|N z%h#dt8X_P9W1%^yC+B_Ywt0|kHmebIZTU7OR=Hr!4N4`hZDJe!fwGc%rCyb;{FdUs zyKZrysXBVznkL{+_4V<(JK0aDeKTf+$Zrssnj({>$!l%v$Zpo*u-j;iIepmZsaUVF zeRD20eS=%K276qzv2C 96QF8E!6kq?-g~c)Gaa z*v?$fbTnD2a_ti|^E5viR@6|b8qM1gmAiPG71HQvRZFo_9AS*mMjeP(LvPn5*VXg= z?rbbb1ivCb8=|8H5>HH0(6BPhOoR!ZF!vxDs~QZ)=xr9u41wx5@=&l-et@ v!$Ishx-EgknipfJKCOtuM;?l}VQtN+;R*!|dcjGTx2@*n0o- zFQOH5YZ~AfQ0?(pU0p!c!W5twJf5!~zh2HS2Gu@)_b&_h$_to|>YllSVKxd#{NDUU zQCQ!!##6e}9z>Qyhkl2^6~!+G6ewh1@dj)vTqs8Zx4f(X9Yy3cM*LDC?PGvU?T$yw zc~QvXan9Pz(8E0$4Lbwg1th_!jk=M=7(G><@8FyY2WDJ?-cOv`j>Xf=LKGpSm?tnl zy=vjep2xZ?pAN#p_hi3w$oUkH9kkD4p+bK;gW9CpU 7JRV$fqCMpYHlSU0Q zM^#RC9B3Jf;-cD>V{>UAD0sg?$o?5WA4MebjAa_PtFr;uGhKq(07`~2@`z0U%-ODt z-iY*$2t*St50;UKObIW*c k-cNu+_(x4-%QHq4!glb@5fQ7e8D>N!mAe(HwX|CF z=n5m6G#Pw;?Vt5z6K1fIsV5vjnkZE>NGx32{m>`(0|)ga6cje^+3Sv?HF`%4Z=5~Q zk4D& =pwc9Ilg*fmg zFg=VDX(`>n1o%$`0-Yal60SracCV-O>O}sTSw38xpO?(a0}Vk=)z!qik@>E)e}?9I z?wD>)W_gko^c4H*=WXdV`UYYAr(lJ0Y$6qja*Oo35NpKzRZLG5|7@`<&LIBj4Y(8R zhcC$N=8bZOFSAm27sGp0MyU)mp@{%)3~FGaNrWU4IVHc`{ul}7PyAutKf4xSl7XI7 zdnWXj gnE`|AhkA{|&d$gZn=2}#yFjZ`Z4lv^HYfhq; zGb?8=O_WBITddDi09e=DD+MWw#-eC)TZ5&<*_AOL1qE6A6w9pGm3cV`&(}y;(Gl%_ z*9_4ouSXf!ykDh!?GuQ%Mw4Fx95W)PjoE__{Wyx)*EG8u1q$7RpM>BzhZ62jig5;` z4GWbjBmh54r5t3J3(NABNDGye+1fqw)tfDH!e2)xL|6KKP8L4{RnM%O87DPhv-E;! z2O4{R+8y>NV~+?cZKGw&%UrcB3w*wwT_KPx&j$9ERax#NzFzI4OVvUmTx>A!@6?68 zSIwx}{W5vR3!Kh@i-F&*S@pc}`o;8np%6d^@hquTc_W-ZNqHQJX^nYbSGA0~Stcc= zQ!SZZp;i!4v``p9b#5Zd!hROQ74=Gc^G7hy36@~7ns(vzHc^MSH%?noF$L^2lycQ( z{t5l+fDqa80RYl$r_TX`Cj H+jdzD|kjOa&;~4pRj|8KjGuy?s0vxsP}wKA#UsQ z>EBIX7nq4?k{Ts2TK{RqaGdWl _*wA_esBu<32A6f;`0kQ_L)cn|EkFbSU91d4(N1~(;Xd5qGViK260 zV hagMj17Lx Wc78-%3(Z~+ A9%fHUGNiDaJuFBl0j85DYN-92`v?}Y!BT*0h^DPL zz)qz3l~1xE ~Y#^vGpBbK6`!c|_6*W>eU_ha?;w9{4;?}%dBlmXwW2ZO3c z(kFzp7k`S$@s?OGaCe7VC3gZw8%DSz2i-&xc9x`m|F_yVZVvya4pZv)jHvM=!ytm0 zELu8rs&1XRbMndvOMHRkydzzI)%<`^Rj 7@bOSbquL^1h!% P$z?`TB`)_)BrGc4I zp-6+t6*_q}@goNORSInHv@(m0;8UNc0>b=Nh%A(8BygLeo>?r`K1bq*kS(z84q2 zAC{+4WLhSomN_-(1YP4Bm=!#OO`+j`y?I$}=$KaSB~>_hsf2bnM`w0gPwG^foNP27 zc|fcaiW1?_iSN1@(tfbza+Nf13F^vC$M vh(SfOFwC5R7_+JRFagZVfKiQ;j?4IT>*MbDyj?)G zaGz!zLFXLajNamT5b8LwCtCd_yZ)|I; zQi^LXAiyLStVoxUD&x;%>OoRB9| z_9AMJ<+sa}lTUmB9cQ(cDuRZM+E4HD; !gV$Y6a6LV1Of^O+FlfHMyf{_6Sn?N($2kti+AKy} z|A)LL!5tDAE2UmKB14`O=?!!^2?wqSbExZdB!n %8AClv-D3^5n(aovzU>hZi-|&(Th9l^HNaZ?FiFnsN zQQ_rrZS8%$s0l#ibC+Me XD<2`AF48X$2KI%U<24kMc ze _NyQ@EQamQMx>*>(>|vW30^`Vr8wW9;pncD+` PgVSb*% zwmgUbo6-9YHPCMMmL`ZCar xVZX+ih~avucu2dk|v5+ zOZW47A_=b+Qmqq`Btf@iPB&%>0{CaaVLyspoO)=HjJh%g{9?HZUkX5vFSEIZ;}6kz zwuh&Wi%*kkMkUr`f(FN3j4_sT{SKzdBo%7)LiHrONoLM%NxPef!Y*XPZgnG jO z(U)I>AZHXZC!g^tB939aO_$*(gZUY}uFr?V^Jyw~;izP(B}}&cvr&efkU`wy=RK;= zqFijsTXh&f!-%b;o@e9aCkp}Z3#(WKYqT!3`2L`a9kE&2oSeqJ`?!OQWsyxP+&EK& zd%4L%gh_u%(!J^`Rq_!|;oYAjlp{~ppp&m|B}li2T`c@V11&r~% {ooA55 zlaf+QA4);BIVUS(?-PQ=v+e%`x;@xf$<<$=55WCj0R4ZK^lsXsh$H$|FMRJdT!(rS zd~pwoJs~}l$r2;Kb#-bDt6i0QS}qsu{XtH^3HQ@%{6j4vi`0MseyifIwAM||-|suS zs#C2atia@g$Y8pCIdL&z>%+s+?qZJ^teG=IE3wDTOph8bX2@_G=vEz5b{NSuD{fi(JNOF%pPaAAKbq6g4$m1&I!l=7zKyhRHJFr)slpi<+W?~4 zsd`8G18pUyFF=Df85RlNkae-xHb2LS+h3fXOqYR}>9-gqG!y7|y-l3SnC2V%l9CiN zBT0jvb2yxG7`mT9J20#y%abdl1j=0l0u6)(5ZIR7i6v9aPX9q{|Hsnv>+H$lXO3L< z<`{zbYp1v{rL-#*kv8v@ukd`9QwGfD t%`FOQTL6?PSoV ze2HeGH0+c>1B0Un+SASLL3SNbe C zC@5s`kUp?Jr0NZZTvixKiE;d}TnI_s{B9O?QAI{E{PhLHUc=j$7B^)JcH^wWT#?V! zTndPmFbO_5@jsIUd>DP~jP5>e1_ibc<>ATSx25I|#pQ>mZL5XaFl&t4;KDzxWo{3_ zT|u4g&_Dpd5vlIfTbVBBDr*Sh`@^n7km3}+1Ty%aMQOY+oJ`d1*NMI{ccl;g&>$W( zceH|_ HuUm0@s0v0KTIVgs^ zs}q`w`A`?MhWbt4k1zg^#lEyV?p$p;KF#RP_5a={P`%hSTpU$hr0TwB?0z2apocz5 zsg&jqq&mfx!R5TjH5WyO!_4&hDT%zOkfgRKAoAO-)5uAGY$vd9`MmK_vtGmUtTJJC zF0#t{FLOFM=bxslHaeFsRkbY7HfX%1BB6^E;9WdYuAVV9*zM2Og|!m(GGdR})qr-{ zv0T^ICaRq2e!U$>;s{JDQ*gFgopDEvZFsNtCnCAU!yWo^j}f1G#;PZwss6UjmU$9q zB#W{Y$RZ&Z%Q8j^Z1t_j$bwEUX`ngsnr+hQuWE40w{C9(G-P z##p9I4R(HGcD&n_(u+~KllXOiKoA|}#rZ_cS9X~J+qr^}x9uszG?NkHU}Qzw;ha4! zzF_<(TWs9|0)`-ffLihXFWBPWD%(p9>3?Lw-vSn2LN_%LrGgj1gC50;2EX5!_H&lC z %Cs3Mwt$>rvJXKh_2rIz~95DOlK_(!}Z zCZ?vQ?2a;8y^IqWt!3PiOwHvv7_i#J<{2aR9!iS0JL}i)oGK|Lv5}Gs8;WygguCk= zuXs}KbM pQ;pcoW*Z5Vk;UsX?~E=PBlm!<6%_9m$PF;0N(fREqL+p4KA3ZM zGzPKbUeW%sS%wu1G*QHLsB&p&!Q%{J9xgYH)!qI+9K08=_Wihfh%HWEzmR8S%b1@^ zZP>D)YmPfo;x+?CKfaa>3@=AmKw`zQZPi(B@M`@`KFlccU4p=yK6AOKs)CkI%{IVE zrlU;9OCUTJb *HOR5ImQk1A zzIAPKbwOho4;A5a_Uexd4K#)or3Y}5gcb^GrbD+{NZx`` TS%0Wpwlu}pM_QB z#+<3KN{zlpRi1zg)#j2eo{-Em@k#><(E-rVco-8Jr}9!#sMVi{gz*gc24OR32=vzy z@=IXDvv{fYCD33Ph`JME5+TSD`t}H|AoX<+<(W6gbGAlv{IHpw7r<|N;~ jG>L(gcq6DUHf zFQq>oX9}9eAx}=DwAaC@ifvTTbVg*(7EtqZ;hSceD0?|mZ#pMD)c=&dZKUe@D&Ldt z!vNQ!4g#R5q9N87*WSIG7VCLct bqbZCK&R{A$3_cyS`E&0OD2Z0BZ z04dP-v9^fsyO;low{tr5V(9jCd3yw%Oa@;v^jG82zU(gVum(IVY$BsDh1zMLal_(^ zW33?#w#sqrgR&IPuG=#o8mS-kaXl4@5^)1#w2CSg2j6F)$+DM#IHZG$oUlRbyC;04 zoIDKX01lh35+1@%oJ2IVDA<$m)Q$sXog%8QvCU0UvM~6#?+Ign0(!58cfI0G*bUs@ z4yM&&@h!rTu_90KR1YL{>|0WTpJC`G-+ngGow~&5YtVR{QhUpVi(WRB%~>Z4h@7EV zTPRM3TSh~&auuXn-aM1cqV*=04A_w#+iQ+_z-pjpJ+$rM-L@3_8oIBC>}siLc@Lj7 zTlH_6TfaB0J4E9xvs+DHWPHklH=9GIV(3E#>5T7t^!-|cRn8)XcUS!tc&C&~X3grz zh+kGLgNcwP#%7ezsI>_bYEh?B3J}={ g=2!HG{o#%v)#eN* zo9_y`@yzcC{yoZM#1o~VojsC<_XNE9X%I4BMtXFPZ HmS>5r11=9K1SC};0!fIq>vwJnkxfrfis3 iB*A%!@(xpx)=Hujv$drp+Ln(S~=4FeT!qDW_r5NGqMV zV1Q{uA_WHt0@8(wBLwr`3qO#A1O_P-sIRB_gyn rAKRh`ijixPLocB-re7V{T8!jk!Fk(y`?j zFIFQ+4lUn)J?;Kd6Ik8EU2 gesQ&Pz+M-mkX4=@8hx zY5N>|iPU|ir?-8%?i%;m(lu2)|Mpg^V_ntq$zS;S^ySm2{$ +MZD zXk)cCB&Pp4szvv -N|5_ZQE{clGxz0eSR%!a5fn z#aNT7DbeT5qv7yAYWDP45j}ThJ@a@*(Nde~ycK_rtYUv!57pw<#Z&11HC=No%G>Vg zqDP|!NYhi1_xqh)fzShh8+C$k=WrOoGIwpOf}>k~3sgcqjW@6Jw8QK5(L=y}y(&ky zF%n#xDxXP6RV~9}vwF#L*^YZF?p%5P@blBbp0~Kxa`v%f^C6l*E#uOs +wO0U2sn|ye5Z9|>wowjJF1?7j5RG(R_AV4=poReH4WD}HQD!LqcPsS$% z&&wlMEEa-gaWqu@^_A20y)KY-u&J&;m($JGxcjp`Wqr^!bkyYi@n^exr&rUq?KU6n zdON6lS{hCjHyzw3u>lXMcvgqUGvqoCt?XsSe$&rYE!qIh^ 16(GMcm3`zcJuva+Tvg~Q3@^wsc!qW#;?`^!zpvIm&&;G;{E z+nT|pTFxuDx%2*8Ee_M|Di-GHI`3BZuJ0->*3qdI|1S4>4ShUDmOC5wZ&=OMj#)RB zjvQ)_i4}hK-}|APcU?L_fu`?(_OA4cwaF(xz2esgu8yVw-^=cs>CLkiH@8{-swF#S z&Xr%cGgk=XHX;hRzq`?hyT6aSUk ?jo^*CSq&?#AhGuw+!~5&QYRF#VZ~mmKe|j51C(_y%#t@qc@l0{Vj63Vl9D!A zua<}X-DQhQP0yFzeB2fdb25Ke^Mr2hz20Se^vG}1#vBo@W{H~_CHi{1_(m=4cXxT* zgLFoC@6TI_y41eUxrp~=?%INV+>>WS%jLs<9BqipA9WXolKeI2Jl 7dko-@BEU7rJ{GJAZeBZ;u>gC15#Hs))5#=9_*DGLrd54U4+cob< z$ca(x>1_Gxub17?Wr6O1sQvM)=fk5>0&h>zyhX=DA%5oWldn@^5M4Ik;LqmR42tu7 zcXU;R_=iwq%dZ;FFy(-c{@wokXABb9<9OZJDf$|4VxlK^T!C~62~zw$kX!~t%EH{6 zg7kSiet8kF3^%4hrno&pQJu*nogNqq2Rl}Vqsbrgc&OlG<>s4CM!|SiX2!QeBB;=u zIHFdzy4ytA5~9`CEidT8R|LyYvELczlFAEE+-UQo?UHOpkf)Y?!c``l3zHRT?7u@L z`7Ym*nVD|7OjOnG+ss0YiSf@Y*jYv<#=O+Y^AM{{07u4L)ga6?iuI%Sr&gMPer8L> zdJDvc)X9ild-go?of4$>@xR?zkB2nGoyBG9s<{}B=iA^<eHh|JZV5k9rq(%Q)sgf~wzG)L nCB KvF{QpPy+0pPtwh@&6~}^z zY0Q+2+y@J&G>&kvQd1&sEH5_=J0U#=4P1Zog5lhqZ?f*S1~}qZ1xz@=i;r%umYP)c zc2tkl2q0ClSFV>91E8wy8;e|~OPvX{`D-h44}R5#bm8x~J*|zHE>|)HU}#9jUiB;I zCh8l%{#gIT4;uvtK-(@op-Z?gH`Gl6Xn=i`CF&0jOZ|BfDNPcw6e$y-;a`% Wv>P;j*!X&OcrVU23--FE+f@+OHrFJ)sXn>Oq0H9l??erjjQbmwWnkm zuBvT8H%o1&U6y|8w4(R-+6yb!^{BJGr^Jm0DOKy?XaNwt-k5BbG*~eNkAht;QeJZ8 zbOnD=-S~HK3vSIu5gPhNN%8V{GXU1q_zG9(tOcp2JuEA7B~mGJWeWl;Ol47~=_IdR zQ(q&@F6ivApIBZnD13~8drv)fIC^$bkvjm)gciTy4R}Bv^ucTC-O{PTZRM;S0@s<` zAfo+SrjM0b0$LgOBQ1!^W+pAD)bG$>zUPQrnNbv>k_CExM4e0qIB<%L|CY~~{x%%P ziQXWBAmA9Ls3dfXOy<_vqe?#l`>zojt2~J6mqIuKyvlrDI)vPrW4QcAE>`E1-Mv|a z8|YWs0w9>g$`wmUg!1G{)&dYdAEpvMFY)*IzxQb61$E@AzYkXB20$yvEKQF|jsQeS z$cjr3Qi~N7 4HTBO3`#6Mv=;9D zFVo*)bF_@PHK}cwnEfa<-E{VJ!x|8dikzigBVNg%efr?!I#AjRStOoatUYtrFCXT> z7<6qW$yTbMKLJY|%{8vt1gVOj0r0dZXlS2rtqBOMB|d0XdL?f)EQ{AwjR@lm0PhMp zmF+H8Y)tvWv-u)9xEmLu5}``1nlTNLW3gua!dq3sm0_7?{l?lz2(1ZcSXEq}UnSrw zNfPrAlIcdzuuV5LCX==G;96!4RG8b3NK3dTD*1+!wIty0Ghy=~3y(;%+D392aE*c= zJS(9?nd}Kwq9TsbT-L}skzq&Jj%z?|=tz@nM-45mbbaZdzsz+sTS~!I595yPAQuDJ zh9hvS{xB5_+AoW%J95UI1+ooGVO{(*l7lr~7XK#>xNRvoaeXg8>k*n|Oo?Sp@KA^0 zB$6Ur(@d(eU?UFTuaEm+dWPCdAPw<`mSzgbp9RRg%s+|-#3kqzT*Rrp=-7@h`Yzr< zYz(YNY?d)2Ml}f0Tokbz#ATTOjGRjx4TIFL5BqndAMO9%DV$}Dgx)_+;BRgG#Oan3 zRAI}FP?j;_bVvn2c#Vu|co3an(tZ}b=_EbqbD-BrDzHnqz4iZu7@TTT3}zeN`}3wh zY5LDoqrT UI=Q;nWhNqa_YWjl=&Z44v9M=n^@XLXy%<< z`;=~GA?~R!i#ra)%WREt=rr+NXoExyjYafaWJ2X?y_ut@?o+w`{0I&cTS_pW&v zXqtzg*_JZgWZ$0$Gt_9bYrg&;_TDMHjxT=uZqzi58XJx6q_G;?w$<3SZ8b?_+cp~8 z+Ods>@6PZ4TrZB^=j=Jz2ea4A@}6rabI<*q&n!cA9G9=0UQ|mHkrgL&6{+ AYa>?dCm$la` zDA*Ywns{&VhM)UI{L&%N43ix~(@8YsKDg84{-R^HRl~W&rK}}IKPqmhn7IJa!E(OZ zj9=b^R1iN{H!zXc@Nl?U?^3-{3GJNjY8Q`ymMtJzC%B3~6OQ7+(5YlF)r;$jv4J&7 zzdwtBQFPaB8AKocgJ6wY9?yXh{9vRr&_&> ^a*kZiu2{paEA_w1DhX80$rOcB^BVHD zvAIiARg=2#e1hH9fx2)E%&f_8jChNxNX&RmTr}XqxYVdQ`L2_>TY?%I$jU8FSs)HL zYTPVwb=L0Kw%f*9V5A-UKALV)PGdeN63T(2*;5XKF9}&_MXs1il8#ueG3L6>QQIJ( z=A3_tyX@LUem8WsjG$XhP;Af||9Po}y(FNVTtP1Pkd`LwnsXoU7Rb|zZ?q WeQR@_*8eEEVVcrcR?-gxl`B4s^nTzsw4AXyUK(mwEt6>NUr68h)9!*FU5_XR8PgYKy$XO*pm6C~x;#JYr>jPJiX7hy+Ky zKKFP9iG+UU^eopCG7V}?3;ZRS0qFHvx{&&x88F|jCuh?cp&Q8Qk}dtDsCn_aI9ahg zISvn;x`X*kBZU@|@2kiYyT3owNZV?wm18t2j^-E#1L~Ou#QR+K=W=JlXWh4o(SQ2~ zesw1AjhgKNFk9^knOg?z{L$p$Hp{e_n6F D-TBH1kF^rRVXn)(pMUQ;+)$BF zh(@mOyISy@@&!LWJi)!X^WZL4C36nqxqT6AG6vl5+qPC?y$^XJ=k#GHIpneoQslP+ z8EVB$7EfqD^duGF9|#%dSv4vLQh<{+Dy__Mj|^T_NIjq)-*w`N=knj;&mox?09>Xv z&KaX~&E?u?$$p{dwShjt*R`|gEdx6R=0>$d+@jG)tv0o0QItST$j8RV$hw+e{;S_0 z{0$1kzi3`Ht5WrARwy<1^QyvUhp~S1WGWOAk^-Y0 *aIVBSxwPe{1x@N3NpRT)Lk-cD-_yYESyQ9LPr z?PiZb%jcQ3DA4+gO}5V5!{Kn8cE8O3U?w?vDYYu(VIpB3Z(L3|$y_1ByVZ_(_f}A3 z@#veh%zt>8{$I~n>!ZAPQf*Nl7Rvx;?pe0!tTcsmBOhw9=dgJRw?bB_R#T#q`#I+4 z%UZ2)t0Sx|^9-{|DN5 LDOr9(YRQ(!8Ev{^1%xfjEPk*9= za2Xi~BqD`$hX2vvatl;ctaGav=$ei(j~~Cvm-o|SU-B*mT@ah<*zQkd>I2rZIKFzc znM5 8OSAMd8tx_pdJ>Nv?nF z=(4 #M5*dFdFCjy8LHt96u7W&@$$0?_xnP+z z4bBd|(79!0v=v3zT~dKICW4z^jQk79pG(%fa~+=A_jxc(&qUWjCHWCQ^A9l>7P*d7 zTY7Y_og5jRYfHK`eCK>CC1-pSN?LRKiAAz;fK7!XoGHYPP|nnR|Bo?yhHI?OMU=F} zhuzZsn|8<@YI$UYFUs}(^V|V>zUC>zd9no(si9#uVwsQ>&_gzg43=9Z>|s;Ggrq`X z1PZ&n^Ke>D&3oT4^My=}Vv(~-1G^Tb(PF8tC`Z9{@!+1?`isC|A5hoa`xMYx5Stt9 zW94y}W>5mC$N-NlxgPZs0wVh+oKoRy(2jds((qCw!eY2XI(E kBUEpS~0C>*K3wQpQXxN6FFx25pr^2dSoe|3Kid%HRjoeKJSx zm}}N%{cfiPygdky#oQF?*6FvpAkPwZ+0BFkyp?_lW1fTZdiPucck~z%kD8 xgW7 @3JCZ;t$}l+ z=t%((M=vI-4OmJP16WBFuF{c -v;f9EAbM*Mqy3`tmP9_vd zK##Pnt6($Lq=s&rVZGB}7)iDMR0ZN}HL2u}Uh?38{rpfmfR%4`B^$b{3z-2boSg z{j)$&jY~1UnxWQ-=r?4-tlLi-2=l&9=P2=>IDUaY+4${!e&jQ36Csl;L#VWxR&pE( z7>@l|wnh^Da+D*#FO|E>uu8< dx^IIy zY ^P9GlfJu#{YH1LG1GDl+|UH+D=&xI`N#?vG!Iy^efqFVJ^9F==B%W znec>a(#Z?=skvX)5 K-Z_GrJAq`I63S`9TlqrWyrnZm8suw^Ru_$7u{ zqNQ*Z?tN=7Vl{l+_w3bcLEi#?Q^;}(#GQJ;jr&ynSB{Pf!o#~K^Y2?g!SJX*hLXf+ zOdBU3#&H@R ~MD&9Gg!mQ8S+a%DEP?!JX7l9r zd=>At+HDjo*As1uOb&3Et0>X7b6zAv`TNIX76rPJJ$8N~fFQ3#I;uRKERQ?~3izPa z*oB+61SKzPB(z%Huwi-%GtJOCQ@Mh~m4Fs8L`m`^|Buzvu|x&OTm^~ow5PhYY&eTw zXA4JI3s^UEKG5bS`abG(U#U3Bh%xhN*)3I{ECU{0Co5y4>CG2yCG%GkGTuWOe51 z_Qn6@mS>G+9G#A^Wbh3Y)Y !NN 2^(9_Quoo#BV~7mTi#lrF(CX9$2#d2)THH#nCLvc-qcfN5B7 znL5YXU@YKbyxnCPdg$9_IkRg(;(fR3vRM4Pm)*A~+1&a1Aj%vCoDooqqy(-2wTPtP z8BmJ=M@=A~1H49O%dK{xy>nmXgd@|8w>j^|vP5}_3e+S)@v@|jpG0<|@Y~gM+Z3Lg zM1=Xhc6(}gZrEyII7s+Yj$?2fF_EqAp(9?M2b%`iI1vs+&5RyCBdr^qS^};%<|9V~ zzgC)Pks;_*lJy$9F=s1E9CfoJc{#G~Fd>0`eBLF^3l!Lu6=I;Xk{BFUk{Kr;sL2^m zEvPFdeJOx1D`PUdVob$)!}vyJhlNDtC-9e&sWD UX06f})BM z*efX;@y{g8fgp)UfS`H$y~Kb>se^f37Uyr1L;)V(uD=E2u_ @v?^oU;;Oz(S{eLTQH4^2Q$;RPHq}7ncRx8cw zd+p({$|Lpif2dN}CQV4QmMBl0_ `BG=8;xDQgvyRBJo;}&l#M%; z4f;^RG7UY%5aaJ3ICqa4xhzD=xv1HqR5on9F-jX&Y@;{jX;3N(Nk1ZpIg1k^-b!Xn zb_A7IthO*KuZ?%o%RHA4F_k;5M2g@~zxPpp@k+{nm^qw=ocxw+p;ekGZ+D2pktYI2 zXbN gr26V|MqmSsfv9S)YY)h7exal ^Uli?SdKyc*N%}B1<4XTCII}QIsG7=v_N7_LWB-RZLtR|_ zFIoOCQSv3CQ--1tDFqspM5rG|CHgv{xZ^LhKbTnjK;?JwpFixl$01LPmK%!5Kk!i% zXo2Q^SfI(_@*low1e2M<*~gJW|4?Z!DzP%q?fk0rpS4M)!$`#HwV4aoBJ?FzDOrmZ zk9ObzP4&YX{TT5-A9Py5E&`>bc|3jCOc1q`>E~Mer~Zf^?YaSpC=&3k67(mA+uhII znjSVDIh_+7L-G7~0b_`X-o$%-Ud5fGMfV)vn5Ke
luNFc((jswsT9Wn?FiZm|UHdYy0V7wk>?geZ@ z&6M<=QCd|iG^+RY-BH?+W@y!b&)UIkNF1Y=yQOYH!gZAnu=j}v=kt~fu@AuPg_L~c z?~wE@z5-o9ZYg_k9f5U!R>ZnYBRS=JMi~cxm#kJO!{}dpyKM~7AMR!{KG1bE{T!&7 zaLCzwytP#Xv + zMuHq{bCZ?8m4QYH5 PTBmEC)3a>V3Wc!*~#Qw#r-e zuU{o~sWyhLa2XFf_8IjU>SEOqC-}F2Tn`)e10A~g6U<3W!Ow@jDMbdxrI 8j0M&B&~#RE3-Z?Gs~;Fqcf`kV3`chEY;}3KP2XOL{9@H19V@FR>raw z9|Jx;S%qjzU^#{G2$N1KS%!-_tw%kBG~0!|23yBnK+Ek=sw5rH&g^ibxbZ~A#5oP6 zP9~c-_20~OEyVKV7#f_42YSTiEsVV*m^9pByzZaTZVHV1DOxR%@3?F02tWsKggyDT zHzE7O<{5a>!{~x;{meh$ibIcDx7lyPSzeD{PEjYNfwO#}g<+EIG#~}vJ0Q+e-NFO3 z8BN26)U{K4!()=j!kYB_B{l!bQp=q9G2VOV>2XuhMlkYzlim?O@e@Yk39XJBVE-Yz zz&oe~be=L+6A~5NqaURbqG}$^%;Q~Q3&|-ffa-5>>B7%%WGti|54^D%u|Lu}c7c8@ zZC)JUjZ~J{eM7@mApW(wq9OCD*TE>mYchK6DH;H;5OgrSz(uS5)N@>NZ`4|&KN?Sh z;b_;}Se=JY&n?;5)S+>71<1!&)0R~Lx;(Cp)#Mvb5xkO13Qc!KSy-n}1MMQ1YKK#{ z8qCfXwhizY;RDIJk&v#zslDAs007C&6xW#If37Me^Oh2Kj1KickSPsIVUS5G0O4+> z?>M!$-tML~e{ac{T_v3?3+xv13i-&~2;(%?*q>ZoCF4N@j%GKJ94(L6oMXA2mb>JU z<|GgS# >ObdpqClJ ze65$cE^P##j65r$)xf?FxhnWmceBksnxbcdW!qgmSR_UfR+e@@#sGq_-KQhD#-(cT zBA~z~v?mf?j_!b_ElZ~a-fgVt041$7@?_@`4-$3}QLWA&RE#WrJnQYWGy>@;X7#xW z!HI!jFBDGg;nQ!APmHn4-;pauPFt66OGZx9%l|T8R?dv r!Xp z!kzS{F>)5D_;r14lQ||6-@YvkcyVh=)dQ!FZ@LQxx5_w+n0NnmkFIDCw$2&e1e>rP zG-Ayue4Y2Ym^a-^jWd+%q+iR7TGU0kUkxlQ(np}?Z2cRp7B{>^7IXGS>JQmGn6(4J zkTCyQC{t)G6tOVx)S}i(*E;K>EAMi47wqC#pz+^$#yGh0nB*jVlK)As(S!NRRj<(^ z`C8>>=<_xX(ww_BnUEi(%Po`cgObl$SLDZ@`C#j0 IDzLpWAv z(84+aOAVSq?WiOG-H?oHO^iiXpTB%RFZDFNwlckyPy*RVJ43E^_%B+Ew3GInn@)0~ zh|Nx~mo)cATVP4ER2nU63XCCp8WbShNgEy!W!gfOkq+5~L|ghVF2R)gzQa66XYX_( zUiM;sn#9}Q+`sN6fB>^8(U7&NbOTO^<>l%|SLl_+$QZd^ zq!h}l;;oYLxoR5tVp^~;*revjFG<}%d&jeMxjj`Sxc$^Izh2{(ENTK oNj7xloDJDak zGt(!UFHvvL5S)B71<3z$Dndgz4W6W^Ez{%7-ds%q-o~y$#luafTo4kF97jeJr-qPI zFw?h#E{Ez&tgyEho)`3zwE+!4mpj_Fo6H@Zx3*4FRvGUh#;o@J2s~$M{ui8-K&0<} zW+m a~%>vVA?C-zn1g)xP}}z^SMMr(&9H(9qX{GStY;P>0$AoJsf^LJT@o^dB$+ zxl`w>G~p5Ai8>MB8TpG$U^;dj?R4X4BA>2L&uR@8hVBeNChzD*Sk2E9CeU|*2$fX6 zb>_%g>c$lw3x=Rh1~f%z`YK?rfBJ~xR-_40pI0>tE+Z12tA}r%2Tlkm m+xQ-+OPgZJk2a6a!9aUN*vIawI21bp!D?&|4 z)hl+xoVFW@I}?@KO1Fe@mk2nT@C@q0JVlnoi~$_`=(*kcoW!SvwVcW9rTAk(&;)+v z(aZev+R=Zqb7OYN)$y!l<^!-Um$ZzXtl*WjNxLMkzn)gta#j#45kx@hTyz_d a?J^iE=jm`BDsl)LNw?xPXWQ;3D9NEVX_5s&0=$-%Ck z@xq@Eo540r7t%)5FJS$Px^{vMX;%oZ5f#=jSaIpA9TuR{D5l5I>s+Cswutb=CeIHH zyRx6ZK#LY^7xH77 9+02{T8 zaABu=@J?det8-}zV@7fpHb8zRwtBKxLj6L-O#~;B`dkWS3GDCsae=~j_73UZnFga2 z5vYaqb{Q)fqk1bwp0FA#2Qz!ASg6|fVE@t4Esx4yJ@>AD35XkN7TJ!ijH%vN`>jM! z?iScHY^Wuv$8e3gNFgMU7tVmGf0U4Ca2~$O3p=Wd SIk`Xs0NGe+u6L}GX&5}&EG3; zf~0<#i5^$0rC21&Nl?WcOyF3$0mk1V=+UNy>b%l>YfZDU(X2HNckgRz^W|~AbJpQ? z#r;vDBEp$0e2K~k*a&+RbY-0Du=_JjYd*H-kGvctuP8Bzbg|d=ajj2xb+*w3252=9 zrMma- rnJjLrT8bL*A)2D z5btUz<^#i7{HGj0dHCZh)l3DFwY0V#CvdJ0 0gfI9a}ro^y)i|&E) zt6`+iUX<*sw&Q|d` ^|d5G~-E514aa>UAueDBqZ@9!aU0;koktT*P1sC4k0) z)Rt5>`u62k58`>w=vy77HP?0DF(Od_MV 0BE*{t5*kx?{aE;^Fc`4y`j~bco>NED?{_?_oBF=xUi6XMRcnpSAEuQ z`a(+$8E0VPGK3heycJjG=WDO9b+7EFuKGfcENL$oB7w4oL$Jhx82-%+MCFuRSuh&c zZVBHbOapWFyxTZ e{} z-3~WDodNHM50^-7jnDe%T>&T|h&-q3-g`qYKSYJl<8I`aP%@9mFZ $@NmTs5kitwM~!*kyQ)>|v1h9b?AGV=Kf3~<+)fJKla#Tq)QRPq^$Mq9}Z zg yfC2L7_S`nOW*#a2CI?Gv(ZB?T z_R(AhF!0Q661a;(iu%0c9?jzoR{1*E-~ @a=Lg!EmAt? GF5P)5>CtGw&82(`#iUgVh zZ$a }FN!X&>ktkC$(?v25aTE3B3Mr+mP@P9f70(Sp4Q7ND=H(FCwhbOtGs8+ zyqRl{kZGgT!)g{$jtsfhIVR>B20FYoI_CvqTC0A&cYfK(sl{+ECJ)dW_Ag@neG5i= zrW&AD=|yhyQrfR=`=@}CW=z s$_ou~Bl(1FgV$sgOmy^;a)(ts(G+==cv& zA?l;=;!lk$bspEk!i=wTHP8{t6%XKNrVBn(cYA}q?=d*A>s&jlul8Z4Y}|U@ZJj4{ z#N`h@Q|E7&XPug`t9^DY@2%7;e$p8x^riR8_!vJX7m91mV@9ixG@u9`c3*eg9h%*= zfInz O5+fc)@Sx%jVskUTop* zZ6r4RPpb$T%Ld{}&ug!Rc6TglHt`!DhN=hw?jAld$BS)eZF}BL+P|W|B}q?@SU9l$ z8@S%=Qa?)xDN_9gdDWJ&)47hTGBoeZ%yDXqw_Ux_`ICm78u-f4)0!<=%HZ{ljt;MW znq1wfFFx(MRn7@*Xcnh!ds1Khz1FI^;C1Rx?#i66w43>=0y3WOt<6u@VkSe+jOEEY z*SX9PPTEq=LV%Al%f1u*f0;RM@}21aZCc=eUiu881^$0&fdLRL0HOszv;c?}0MP;< zS^z`~fM@{_EdZhgK(qje768!#AX)%K3xH?=5G??r1wga_h!z0R0w7udL<@ju0T3+! zq6I*-0EiX<(E=b^07MIbXaNu{0HOszv;c?}0MP; _=S$P$tKXdq_c#D4 z@QO{>@`CY3#LOf+$U#ouFzZoM*xYaJ;%s6h;_1c}ho$R%@vyN`MP8Ni+-K3|<{9V3 z(veE@BjRk_;^z8lfIyqigQYDMH~MV9P}}Cm=n%$5a!ADH^JDgV-NjiY!b!%#S=(9J z4kQy>NZI|>z&dc9-_~|+n)Bp`v+cYy>z1BP>!#=D`%v8ndU~7tGo0a0UETdzb1%2e zN;V8F?`#Ec505qtnyxPG_Euf%XpLd-7V8+Z_igJ2E==<_RP(mi>rafO^;R=i>j*3O zszZ0z07HtlM=LMp<@yJ)vA5kH?`Py)&uv{#0N^scXI;-Bn{T(|RDJp`9lCUsC;N8< zr!LuNyz6E5e6FuY-nFd)HL!F(b|XGpR>zC*wc8=1I#($o3Lba&&OYx~4=dDade`?? zP`>V>?;?NhE&koJs~`3Yr?fUdZ;NdVtY5_JcCw)5Ks747G3F?x;Z%4(kNUh1_&gyd zFx`~?aC1^S??QYj$&;^iG}h-TPCA%vpF?w`GIe7URrTi(yJ;WWAFrQMsd+LTug^-6 z5LsZkQMZ1xrjZ|uaOV_8h@T#-Ew5C97>crAGLL{`r28)D62JNOD%AvEkfyLsypq9x(;exD`v5tFMTOhw%v0?X=SZKeOJfI z8R8J1n)L TMU}c@o z{`58mmb$eaech~LTYXLSy_;Srzp;cc?>nuGw#l}(*@$b#c% b)!#Y8+}pIR>lF=5tOcWYbVn+ytsUMe|-_3f}Sue%ophyJ%1JM z?eEVzZ@z^di-x#+UhTArX1{!zSr|Gve%RZeCh#hp)5IlXDcNX*9sBcs?R{gmd>oE& zaqi)xPSEn;3~;(oB4bD|I~OEoWWcAsa8-iXt-oS#(XMj#kxIZ&4>-^t<8ccTMn)0k z89(tq$hzrPV(xd-%Yxn)sc>yS*dCWtU-kR<<6W^L#-fMk7dL0#l=}7!r{!^4mc}WC z *=V^OAvMl>)lKhH$p^Vmf?j|nf}7qb!prVLxw^2y54D- zmosy=%pPyss_!+gQ^@#$dxw^d?)mDoHNS$5n|bHZN`{XYV@rqb&NGU~tT@MLQK^QN z!2IF7CiKR;f;i(Y!gC7!X(Jo;@jt~oC;n$umv@hinw7J2x1lGebG4eJIo;T H$Uz=?9DmpyQs-AhfU1e=DSXf >~*$wCPFmS%&s;C__7A}wqq^166eN3_1Zd1mu`YL~}32sn)JdHI*p^%S!CdOGR- zF#7Jvxcsrq6M@{U=aZv`H0;Zd?Bu7-$CKmcW{-u9ss%G+fj8eaXCE~{z`J~M-J;>L zcT{gzWeoRDQf`5GOVJ^8Ox}3quhaPBVA;*>dwl$o&oV{0(PRxX^EYma4_bC;3KsXn zO413&3rGDjE$-orp;4vru|Mjqj;@wC4*!BLU5EBhG82||kh%+D=b6doy;EaO5Hc6N zJaoMSs@^?w+x)e6@0#5@wLQI4ts1k}w)?#P8Fg)TwrDo~xTHMns7+YsJCV|9_oM&v zS~ozUbkdN<{phe<*05YE>WF{(E!omDkziOn<8atL=gylU!3~eX;@+)eVrw~rX7wPW z=y@_}DCiVU^|7dm4Hiz0r)Z7FW?NF;7t$nUNAu<%(E~+C+73*n=gCH*{Ed-72gYw| z7UNU|+Wm;^_kk*(yA(kawxAPK6nT@kqmjT6R|Z&pdB$|WPy-vnDkVABdeig4Wq+@a zvi^$pFYB#e{UphgrNPJ(CM+3B<|4It88wGvsm8_v+1b%}H(2~!t8o|u0xl#wHF%Ok z(bZUMUZz|#=S1de30F(e%BDk}8mxQE(e5e9Mxspkt2NH2p@#UZk!}C%jI+T+nrAher`J7cPsXf@s9OZ^cRO mZyE3s%}JcW30CteJ6EL z#7o)}!Si>a#y2=gQ>-Tv0_8S>xbyEri+c=T*S`+$4-#C%sWu)uujHpEh(t#OI16sZ zib6)Pueq)uD$UJXZQP9R548W`!aMd>WUauNR~e#jb1k^Imm6X@NOI)$*W^hwLX@cd zE|i_{5-}>SIA_a=Han6bULgB(J@ZhI&2)WkygZF9p-r4e*{O|V`jU?PTzdQ@7q}>x zY1;Vm7$GzDja{0p J<*3pAKMCXNthO3sCIhZq+kEvL zV50Dw+H7 BUKsYR z@aya3EW}pb8I2svp??E(`5F}U+Us`KS)lu8v-8|U>4O_Lb=T9hHi{le)!vuA=KYok zg@hDVZrdHgJvuRU#d&r0r@&T1V`i~|=>*YISOuMlzZTK>Je)uG!1Lu4VKIo;;`_Vl zc?i+y#PrM1>BNlXr^N2WrH8^NtWHCz?2>s0jFapjP)F3z=v21<)r$?4+SZf?)ak}W zDjyjLXE(hqBVzb*DF)T#YW`g)O?9hl@A1VyQ)w<*HLlo48+15R|94nhm4uD2S`eYE zZA9wT8iNSdiZw4jZmLFhlU7tgr?#CGE)!QiXP}d$tnT`xeB_U2P2B=ODNv!)Kq{fr z*lzr92fQLjo7!)oo`z}7980v!e!6#jwR{BZ)NHa>J9R>heU#c3W}JLpn3_6$*(%v% zfyzotu>cTQJBppG(Pp+y#;>yd=&=Ug5TW9Vo%4L6?cyhIN41Tm>1c0J7knnM7-hA9 z+_YQM`?zwPtE}YU ;~1K@(5ml6H`A&oQqZpN z^~ymqW8LGn+|TMjTSuwu4o;~U6o$pYwd%8%o$ReZ7p0n@yD7blRP!`*QtzXN^U5Y| zL?h7DR*@AI4wOhCUwbvBlZq2*WeDoYZea+5=XB7g(sNsyt81Qsl $jU7{2_+@)kxlf=N&gyaZU7pm)LdSg zhwH8-LUt(!>t9{Px#A jSHZW_%s%hf~tn^?>_ppSH_^^$0Y3O_Ac# zc^d;KiHKP7D!9F@_KwV8iiDdhdM%MgJ_;6r1zuJ#Rl-6RPfN(w5g+{puKrJEm#|vt zrKV7AVGQkdQ>fTScQ*fZ_ZL`a6F4BD20L91G|?HJjEIuj3E(UkQT!4`P!FlwUE1TD zQ-33mTqX}*`c~^~LyKKl 3_mT|tM_eJI^mvg9)*x(`C zX~ZhwfsK>y*DuMzJa% 9s-!RJ5JrowEOv@8V}E(a zr}2bf7POc-Bcp9`w?dK2IZPCRT{_r h`$q}7J+o6qpYWqw?o{C1 z9qjc=fpZU_;-BkD@4Gpy_-QcFL%euN_0ii%iCBgI&=hb08HAt8L^&<}?fT=}M>h-K z8OcSnONoIQnVGJofw~TGR*S8>IeExzmmbZf`d`11syVPPdAe_Di6`ofZ*$)y17~|7 z)$q59LnciKulyg)M^i0bCFmE84HfaRk%|HdNS2gT=9UT87x@iNlKtIi1*eak9gRr3 z?<|Wuzkk@FHt L}1L(X=PZ%)ITuu$!rkL#J$wG2yOf+YuoJ9 z(XmlR_@=pi(O_+Ey!c2r 07{?_SwXAlItz~}6+BjYzy 9cAs zzxy*NYC9T@HMW;3?E=fr8o%kw6cgs4WsYJzl00|MJ$2zM=dMZAtRrC+Oi~Zcg$5-h zN6lv*URwg;h3*kdpIif(K>?0<*)o9#!dpT3nCYIi5`YmW4SAH4y#{={?iN$yXG2@p z5-mKb+Oz4}hv7}5i{ko?#?R+0+q)!qR2u=w?!j!V`K06vInN4VB3%33>dj29d}%IR znVBjOlW1P@?T=ggVa2Hl+w8LElI*bd9w80Lcnk7Habk!EbYW)(QECRp;np$ oIUHp 3Srb1YYmf1Ibh_!mkQ_7n^iWEr9<6)YBWv9!%c!oD6V*XTmv zdH$?IPG^TD_VO(@8V_bF?y-W;(-gfJOk8B$;L8Qy>~xHsp5tlUW}>dy2*Y6p{}S~3 zg+K3vCh!nu)3o{QD4FqkHXd38SCKH=fiK|~YaP9hL29_Py{Ryz;#*-)t?}++LJ8&{ zaBES9Qak&21gjQ{rs{43)k-70W4NI_#QM` DTa@Ngs#c&Bp znKHi)je1ynY)ciQHFi8{-X0N^#CkS%{JGQVfWcCewshP^zZeglIy 2PO;zw1Y_ zj`K}?hFhe`r6py0KQ&1vQ9iMfkdn{qJ?T^h*YD
|f0gvC*V zE$%F#PD4X}hESx;M2dDTOOlbX=nUfjZw6oxkt%A}ne0&w>lCS(N$9oRGRvld&7 zt5tpvUG-otO3V;l>|myvBKMfg>bI>a%Hs%b%P!yvLH{VKo4DE&1_({fYAN8|vXU)1 zOJ7<1B6@0K#d-B@tire0`a^T%ERcIe+P%$tST@Z_*GTu lv{L3qnP*G@ewL7j6)g|caQ7A`%A`TAVTL4xu)02Im GPNXQIc zu+DJ`=WCGt3(PVPALdPs=d6!bL%jW}2RV{uUXQH(7n7{Rv=o~3iD%XmXBb=h7=~vS zHO`BHly!tjM6Svd`}dRY4d>il)f@*ibM(|$q(${ZqGH_lwMLxmeW` zroWea7X`oPZkB9!xwa_ZJqb3ke%@u%eII2G_W2Q%h>76jjVaNUP|%r)wmAk7j~uYY z1+DL!Mf|M>wpD5U48En3gj5A`;IIFEK{;~GpsSIjB!8l(HM%7|B_k5*39mg7B_pni zlw+lM*j<9==2xf~RZGJrd`dfAQ#j^-?F$}p$b6Rk&wBeE54f%yem{Q(ySZ=yC?2s$ z>=HYFKKz-XLpEdvuC^>uzWlrEYtv0yB4%UW*4V@DFmD1fUnJgSem|n&5Hn@X3YS-L z*-l#GV?gk`l*EfbpAQ-7Th2CL0`d* X1Vh!@5 zo6FN7}V1-Kn*3jfIQ{;gVzeExZY}E@2YE{GH+_k&YF7CzS|MncH zDM7x!pb&bNuI#ikt^4g+t#NR=ac16wnssKuv6uwU?h94Vi6VfpxK(9tnm8caT6VP% z-4%?Ho aY%-rn)@=v-g%@Bu zlsn62sk*j3_;XC^mM0bBP$hIcT{UMR)4$cb-VjD7TTF93?nBonZxK(V`>XIy))GC2 z_IdfzooK@P#vtu5Jd9PK4w}^khoH+FE|teMwwmeB`UPQg#Z1flQiRD^ELFzGu+y;O z(e{YKDcF_^OWpGxsyhl#Xb`UHLJ`;nx9eSG$7uS}U8t38*N{Gj6900V4i}Rajpz;f zrP=3zJ}|ygzRk;DPsm2iW-;!m;_8g)AH)7%+vbWdmPgp%@HK%M!xyB7p?w_M<-Huh zlgOc+58QHqTV^lEIweDDLT?}K{dOju*mmZ5=+^_sqAuGBqe$DJ@5*^bk&uXX&A&%5 z{7h+KkEgG~YWEwnF817qzB2c{);he8iH@5sRG$f(8fjsPP-eJoo$J#0=~7va7$ zC$v+a8;|A{UzYYAmun@F3s0aUs_aXWB^goj>(J*c7nmX6o+zN(QpU6lDfVL>tng<4 zezc&cYg}y~3SRDj5yL`3ctx5*ezbL u3zr?JaZYjRaR@Yrmi)$@?ZP_)QshphYB7bW6Bgxk2EO%#4NEo|&rk z$L}qCBUghgNCTFfgl5SDOJHupd6+bxcuCp-JCn0N%s5b@49X#H!)-CzNZD^Gg{nfA z2;}|I5T~g9MFbP|n(qpx85NBc!+t0-YrA|`@oGPEZY>UA1(q9ZJ4i;(QXemLKnvq> zWUvVTW^=^Y&xPO(9SD&Ng3Xpcvrn}J*Oj?(!CILbrNxS(a>sz0zdKwH f+hlzEg_Vr3^lPbat{3iaI1lu8|B=Q&St7aaFEHjK;!6sXs;pxB zY+U&@+P03>BhLAfb 52DUiQK_p~#mma~BpzY)Dbc{2DpeB} 8heVIqd%Z*Itd*gB$*j1$#?CtdC**T=4 zgX`(3D1p82?wZG*OA~kO&RQ`1(RQyG#L@W*-9nSGouinro8dQ)($6eTA3q)Gus~e_ zPAma17l!&c+X+U9`}M$)QkUy>A#76Jd6rJ|WHekODL5)aF$Cd%bSR`^trrglI21#O zZtox-gerJ0Rgt9)ae3(I%5)UCObk`nq9Br(-@TtgDuA~(HF|MN zn{OTrj`3g(Ngp0AHD`MIq%lR8=DlyIgCidv5`6Vqdf*y)Z6Ca>CjJenz!gDtls}&| z>!1+#(4t5 nL*7OZqzEv z_hMAAd7GHix*WEyl`4GQ7aT1=>LS^je|e^N054{_fY!FvhcSIx3Uia?r zog372HcnT6l#P!{_A|-SU#!mW`-eVVp*P(hhAt4?)9b3y9yJVK4KKgm&+m&kQB5<= zkLG0kt5U!WxXdBqb5RZ8zjxrKeF?aoRE2@$8JaZ+2}gL!vdcMeT?q-( l1?qsS zdY}$);I3G~$l5VqMAhVIv3Z!>M(;^_z|s~`|5csQTP70o?N;!X(7$2Fxs8KYy=!gj zPu_hsuIUx~=_TYeEuJ6HV!e`!U%|xIZGJpS(7Y3hCntEn8z?g^p8vPvR;$}!c?!D% zuY=|{%a_eNV6O`3+9$wWIa3)LSg*VHZcyp`VfA#e@~U5wW%&e@9z(O _ zBXeOO(?Cz+6`y>4z^F~DPw+nYS3nBqw{4MW<6HMY>_}}HT==C-{WQ6reYnwnlkWY% zHX56Khj0o!bMhB=HlQW9776?;Z2!O5d&{UezDHdX2=4Cg!QDML!QI_mf?IHRcZcA? z-QC^Y-Cd`X-#PclJu`FX%Y6EOsP3lNRkc|QsJEZz-K&3dm9o&yJN5Vl1yC;>6zI($ z!Gr;=a9NfjSJv785CNji@=M+R#LuOpL&~LN2;mUva^AKq6(BF+Xpb^xMfgUNXO0uV zU@USlz1dGbqlA%PE%#@`F3MEMO&XEY5H6M}#sZUz-l7*WXAUSFHzfl@iFR^9k_?~5 zi8~PrL}>$=R*3`vOEe+6Vv%^$tcI3eN&p2bbBMYcQvfrGR42rucGnpPK}4tWGxx_6 z=$pxlRa`s1hNVW5!dcMmn-MK2G9)uF4=?S3L1%l1rcVj zUMi Hd}Bj?uX8K -w&EAD(0aRDQ~ZpJZmH5wWxJHHuH`Fo5JqY3F95vw zo9f_7WLI;+aKWft_{>VpjNaARsRu*9R)73hyI|rjSCD?kq<4yh<*RZDca}geW0_=( zWrU5>5wx^{ly(TQkakE<*DjZ?s*hSJY!+O!*N?=m6SNOHc~2uY+oonLUV5WjziFyL z9Ota->}i~OHd{N8oRT~`%kSkdsirr{ziS!awVQ~~d4TD*(; ^E-D^*#($dpN<4T<*6F*%9uI zM9-!fabO^msTuQEL7jIAL#bdZdsI-lp&wC(&0R648*MQl{ixpYwm@+`6NchDg|kba zs&%o!vv)wbnj8V(!3G(=@!zT_0NUv7j*=k>*wvi92@2YoC!DcG+6z8mt(>tP(9;WG zm20y0ar)d8l7Nv>C{xgXNA8jOmjX_fgp%Plg1ol+`|K4lz#c&UIFp?I;7Jrhty7N0 zX>|x-_B{B7wMi!-1jH7y9VH4ZzCyqmaXY-L@R1#(URoQ7CVH0<2UYUm2ijnY@yBd| zQ~^ZsixCCTGHtAYvtMQ&Wp^6Hkc?dknIyx(gUpbeqZ6ULA1gvkrmvvDKSPfkY(nj8 zQ0hyhSH`8%bf@qC@YUJShzDUO1;Efn7u5j(?0g kD+jxp`OnEI!F~m>KD~jtsb?tUt#O+^+4I%<&45nesqM zq<9#m*{Ws~oLT-n%PX*DzI1Edd_9O$ly${iM*USi51O@bLGv{uW5Jt5@^ak@u3Uvc zolRr0(|yQ&GrpMK=tMvRiDi6|5d!PmdmM9ePPXG%d|a9lZm-*Pe0CBbiao#RC40j; z!THA7V_#C5==7PemDgcMQ1VJ+`;JpD2I`nvGco(yIViwcUHk!A@qLC>7b!g<2!-UK z?0SBZtBHS4W4KoJ^XD<6Iab6qA4@$&1vt9M8DUf;>_GEJ&4uCEumo#$vqzkQf-DjO zGHByF4PQzc>4xuee8QhO{5^R1j(Y Ktkhkf@jPImzmFvMFK}>h(+y(w~^B>^@k~q6F8xVM5-*@`NVw z4~>r>`<7fD4485};G$h}JdHY3{h<`!Sy}=}Q+A;D*LqKm`s$o-+er6Q%sCR$$g_aY zpmu&W7ssYndnH|87^z$9SWYwO7ULShK1h5UUeN4`kCUy5vW@q>v}|0g^^#c$N@2P( zYRbb*`Vb9P-UV>wrGkHE+MNE_cMAM72VC{543B>N0GYeV0!ef5aL!@DM2c2*-!vjn z$m2Mjq2%V?nsbK{Q17sL&>`InMn7KI8<0&f({LIpM+LazK;P!|$FS1c>l9PzF#zjD zoEQEjk!$Q8x&bYUNUBwa1Ts9`Tv~aiCLb*GnZr3Ys5RPFZMH(i%*pF6{-aS7p 5 zh)?<%?G&k*Qa3^Ieb0)lsd_*#bWQg`Z_(-Jwe#*3i|CntfScsm2H*Nd8_8>1myaO5 zqe%@n^D>y3Yf?q;*=_&i=gwm1i cl*w&H@a zB8ISpUy0?pq;sA_=2B4$-3br96m&kj_ck4cmHC&V9;RHsajYaL!=((7NW_m8Y+LfS zc{W2eQaY!V3{+0Oyjq+| Xz2nxKPlC^ zF;=j+Ems#hY0Rava9DtPX$zMES%A}xl9RL)#(IZxqiTQY!DGgd3tT-hK*Q%I=4q>x zYP |Lz>Ub=Ut{Nl0%;8a)2b8LS4vi_#*31n@#~_C zNP mEr8=aiK+nHmw%J>^uk GAT?ce%_-OdUTZ|*D|_!Uxq~vtHn;xSV~wAb4u^m z` ?Jujp@vT5Dcl zsr#+bt*Hpw1j~kltjfs}Af7pI$BJ~5G?)Scp;;o?hRK*ke+wtBI;zQ%1e|7<2n@A- zXl9map!Ljj9{ZB@mmUSMcI_y7HU=@I+U=nTvZwPN^qd&cRo_29u!w$i=G+!#7upD& zWs@nCcPntFzf`EqrPu1qzjG%)PLDljU~DQudyJ&x9n^{A9>A6d*!%!nRLLLYL^;L` zC*5s>QLY`gDpFH)o6=PryQDO1g<&qhBp0_tN6d;vHEe?sn+A&>SYCt;qv+zW@K@-T zC)sHMY;V4ZD($R08&Wx`sWiSi7Cyaf5+F<2=>$ZQWncipm!T8~{hx^T66Lts&7MAF z8W5-y_+*2CqV?K3u;hoaBx@QlKQ|7KN!iMd?oHnNqOUt*V+i|7^aAPaP?(>t=xhth zgRaWX{X%by(S1qh2BxCM&OJ_&K%gV-Rd3hT4P5j^-nahTkNxEwg3OPy>&3wA)#51d zs&>E|o1_mn99zwlKO89qbq&PxmPfz 6#U&j5py z@I(QE&q5R0#cyi+sTMM1%!q2OaO5IOk5{&el{`@DDDF>y;cOa~7cGKj!2Fq^0tgon zm=TD=TS?-23?TghfAR}v#Fb~$KQF2~!U0Juio3^(71P5ji?y$YN)rq-!u`7?6s)M) z-MUIFNyrr>1E&5NV4Rz8H>6-*9;jv1ldvv*w-XT{g8_r* ^hFfxwEUysW7(y7d3R z2%OJGdi`JD#3@mEHf_S+)d2CAkG7}%* HMx7t{8%U$6LO@;JkP_P >%$;eZU@m&L5|1yz2S3A$!)4`kIvCnjIf@9P(e zMs8Sud~(_Xlw#=Qzmx@yq7$cDj{t%Irl&{VA1y`b12oQA^Be79i%PxJB)(pH) qkmSY3dcx+qi4{MU zsq0Lq$ZMrJIV->i8Udh;^H)$t7Cp#JJ9Y@OG?~=AmBXPx*aTWb#6~!#V*y$5aaZJd zBwN0QZ5^CgkI+fiDOM?8yr8Gp5MgyIx)Gwg5ibjlu!wBbts>A?Upl*8z_0mPEu+Ey zN?2uTl`r?qK7sTX-mV@}hXlqdQ-RW~PF-@k6I-zg$mlMe*#i-F&8_aun_dmCPJj-x zvuZHjyT|RyTgOwkCFn_&%@r{Z`OzgbPQV|fWSam70=c*8Goq=CCCEMk4jfLfv^L00 z1|p iqe34VG1$8E@%T->hyE6-|%7T_pDnYV_gx;P}Jw z21WWp0HbrI?d@*f }tOeNm+4LMoHd5MWJ&1TWy zmKYoUYHZ$1B%Xflo7Ld!Ja)POjaK-dzU53)0f4qXcGT^rB5&p{elf|WXPpWENJ zxLzl-ea(Zne@p%iQ`ShMbKNFNc7dKfnqH?ac>l@4ZHYFE&epuAS2mk2Dt_@iZBmbc zAgq(GnHT)#T35HtJxGHf!)NPT;OF SGUO?B=2gToB3D9yx0 UwQIZ zp!jiuu?le%bEg1IN&;Yu>EVoLB=&aUPg8?O&S#jSK7z4H#tfWprG-Z6dftuhInqW8 zbWT|JkZyO8RjTs)poG<$b6l;g;(X3$uruEr#|I4I9hQm*xN?HPX^+@sTY8<>d sWiu9&PWRr85VbAWo}B7!I9_~!n0`55g*c 3@C+$SILx`H^@lG*@W4Je_x%Ai?=8Vp#t;DQT?Xz=YPicNW8$( zCWvtPic_$f?9>nc(n(eHj! k2LrReE0B{DHwu{(g3c#(8q^AO<4nb!*vf$2zXc z;Jh<4=a~(@F7CoA`xf8iNLjk7$M>fbvzm4{FRy5M;m#by57$ d-y`{3_F*MNE zB@=46toqaYaOdmh&JG Mz>gF6+W*@>NXHRHOPW0nd?PGQ%5!>lv_aW^_A>cmwEZjXL_@lAnq)-y*Aq_ zE)`faDQcqqaP9WG^>FQ#pgdl!6*8P@WG2>TgV~ApyT28BVR-Dv@N)tCRDF%XaYVm5 zcGO*2^&CIP+w Eb{WU @$r>_0x93HMT)Y zRd3tc%9tw$^+O# =%EOXYl! I>ej6=hJkpq{6z*Rz2jtK-Z?{AQFdPjpH6nX5RS<-=gvOMeK^Z457 z_1Ve4d%Mj4S?N}vaMP|KX>E9%0QeIoBM=!cMqgry=rC;6I{Rsjz+ dpe5|a0LVxS<4o<)+Rraz^Dp{Ln=`=$~%Wpz;6nH0Oag^J@YZLv-17k_Y z^Qj+O;ZUKwy3r8)V>PQF52@hTa#o6lN(c&Y2hDy>dgN>{f83t7V_Rj{vaB`_uQcZ9 zprDyP;m)GX?i?b~?=3oi-4R*5uIQjvp4-nTyc ;NTyG&blC7oWpD8ZFu zBs%rTeah?}eE7cEkK)i7)m*Dzjm#%bp7$07hr#ShxUNz1 A@F~c@|N2oMI8bRHs`(t eV1{u6pZ+`F6|sl@l9!96teT2&=C` zOt2=IlB->b1CTc%97(2R`vOd;n5)fUBss+2Rs L68ATvgD z#~AT5E<}aAYfAg0hm?%3hKgHu4YLQJD#oSJ`0BIx;xdTh_fhC+=UOUu;in b7ogWYNhBaGv}y6rHFnxTj)u35KAby`i9UM|?@i1* z*jfGu-U6~iqZ>;Nky$Ld{AHT&vOfdo&;g{Y>xL9MtbFWXzMW7C9<)Ps6?DsEHYOc( zDfCjKa_A1{$X!u9Fg7O{jwrTe7Ax7t&_pX0QPvA4la2D127zfUbxr@*4mSgT^Tc_q zZOH20xGAxe3H;xFyrK@_ZiLTP%Q!v-mNb fcmMH1U)JGFAu&vSxo&CCoC}~`ip>-z zda6n!N8iVPZ;4ss;!LvlAt6{NTYuy|CVsP}(C&cP>#tvwZQ1Bz@eYw#JeNs2r@69; zzleeY3~J4!n`&Mg`D}`-q*T1z{Jz0;3~j=nmw91SV~OIL?6m1$5DsUn?XcN?SW$b) z>3lf2tg(Ba#`S1X=XHPwV@3SyYfz?(>0z<9Yf Qhn??5q9U-+A}&Pvt+PuUuxf+`oj>(>ZtHd z+loYCN8TW{{U!Qd14?NG5o}b*pj))(SfS+o%`A{>MCHAM1`t+$w@C(1sw*iWqO0ov zJjpzRI;UxF;(K=y(qd6jtY{hO<%F3!Z~AyRz3hBmye-z{`Me}>qBZ?GqJcTc6a}|f zeI3~l^wc+70-c1CB+Ph@BmOC+l0ak;#yh*COoRG$Nz*VD7EFYkqtFMMp`yqF5;> z4?Cj-?K-%T=GBZ_c?{!@qIgBrIxp$D=AHr79gNB6A=yXE=QeRby9OSv3IkDCWbyQM zLBMG+%^=0xwZZy{2@@8Vr9g)s-O37b)ERHKj`#D4EUdmQgtFyO+e ^y6C2zbSVV!40P)z-^&(kTem<% @)MA;CJ9PpF%6kR3$||zDe3SXJcd=wR4Sg$jo2U)Z&)N4*Yko*Y zPOIC{&DDb6uTmQyL(RRT=fn<|mTlrVmKV(anrM{2V~YVU7^$pUfC9DA0hd3)c{+x) z`-&1=A}kSaw+?ZFdpJ?t4+n2F$}kd&I;;E!ABcEmb($p%81s2scu)HZpPo5GBLVkz zl}+&WjEUw3R%PMBpAVj2TZE$#@(T-IwHOz*nue$ohyt}^iaC~PGSHNn d;GrgZ*{%dHn1luk)f&>COCiy=IZ5;oEHmPV_F}zNaYdj4vzi%Ed^6%JgxZ@KS z;H0M3Zg`a?4aFwK``(2urtRsJ!Q$YCp`d&I{^FoS#CAZVxB`TNTcbwK?3;eN%0C{* zCVFXZR#tkoOiEkJKJI-wOKm!SWRR~Q?HXs8@~*e&pJ0#Xd19Id^S-aYwu HS=GJe!^Ue!P54AuF5Bo5lC3 zBtsqkn!)&+klQ^S HxsRvdmOwgXB{<<4pn4yFD58sR<@Jt z{jG5}y7TGaG jwh0+2(5u zskA8962uCPM43@c3Jt{g3-Vf$Re4n7&335XF!0B|)Qa?oMJJa;iV+%Q-a3*nmC?=5 z)0Cgq@XnDHgbZ*7V7W-h9;-_a(yf;W4KE#r-X-kf(_zZ?BhI_MP^K>AXrQvKxHr-z z)oG7|1A4NHW(w;`lQhg5>kxS6tm2q~iC>}j9uzE=ujuygHa>v}n?zc>a7fwj^h< 0)0i%RFU0nh1~kDasuWcRVD5c1NwBRJ=%hJO$pjLJZ_%O zbSH~CpI##*E|eLdq8x1FD)-{Gak|m2ekq$cB5J^+t}Oi!H;bXQT|M#;++5mdc$-=w z_FCMuNNoPTLp18U{$oKOguYnoa`~3xkpFp<{nORqW3YI(s&g*m%Fnmp8b-$=KJMDO z4;yJt1Ap=rO7PN;{@%-=l@6E1vv@aE5RvXlncmlTd0DB3#*S$k+M3e+w`P|^vIOJFVIdrpQ z);M~xebTKm5VD-|W%&U$_}7843@a3279BEwT!Wu%Gc?$T;%dZC{Jv^vT8QC@U*L0n z&kGh$N8Wyj?zERin&p$yc@sKfFuufMLgk&}_FeHt2MmGgp#|Z^2m~dmbM1gO9LB6z zm3NUA(VAL~nHaK3aW3Pq {;JuJ(f+gW(B)TY~uA3nWnyRxh1;io8nEQ8B}4WFu&1y#wuMk=|uJ! rtnta( zkG4!IKaS+Yng;TP7Y_5c8Es6%rsKn;*sSiy_iwac3Z`UNEMLCe*n3SgL8#b}&pZ~+ z^gEAD-6=yKAPzdN2hQ}nXs_1&jG)w}nI-eK{%-9u)bO2}& CNJ1Y6!D%N zJ8!*I0@_J)P8i`?Cu+u%!=zpm1f@blE~ggIiG8GK?_BCYE90kRWm(h@SLev}>trWY z^MR{m7FF!pO;GUAA_Ae!T1|qy8snOq=qO>8372<|lf~JeN+cMs`clw~N0(gInx?$c z)yQlRj_RgdQrLsYN*eo8i8eA22N@kR8D%O=g@)ndVW&Au=|zD@Ct8O^A}Hv>OPaQ^ zW@ox}LuFRy>P6<94Z$HK`Q2eaP_IrEg-=a<#8zjDPn%MpS&?2kF0Xw*HF1C8KG@*W z7Mb@@DivgSKiJ~Nn)S#9mq$!}WOTSXee66xmR~kLYrp|*(?q51c64L%+AYw-)H#`+ zyT(GYwN^}euYQGq49-iXW#VOAa7`|Rfc?t$xh;pEPsnk7g#R!#m0vFhZLu`Yd=4a! z(S&_7FDUCG&qUm2=-#i67TGUn%pkv>Y0EF*Q0o $80^cHdPwER7ZRMT31n+~1ABSDTEhzW z7n~#vSF~*v!NA@-zrj>uv{d8?u>cm~36^a}c$4!S+qB$vV^}RmJ;d2f#uuV%xXrce zPzexAJvctph#GMWF}^8|G%E~yN0M%0sYaj~jvcqu=u#Z{Ea$22fggScDj=08Y9?M3 zf(M)9zz~RW$0q*7JlRv>WlF>btIn9EHaWWx`dc*4)88 QQ%(TUmRZR$8j8y{5qwyg=pgSn-EU=BVo7+&hAbM7efQ zTS(1awdvZdhepbaI%45%?*;`%{6}>$8ky7=bW?NJrB?Xx4G1y*&*gVdrM_;g)`_G- zaC~z{gWz@%^@DtW{~p}{DC!Gix0Ib_nq4UB>-b3okcrAJ?ofp9+Aavl=!NYkULBLK z%U0;m+vW%K@eH(NDEI^AeQ)6+2^e9T9SDsX!C*@vjf=%~G(z5C&2b9uVlfN+(O+nd zp`7$SPg*;@pWn*(*Wa#P*gKzh4o*KI{f;w+if+Z;j`(oU)N#S$DWm!kX2dw6nw^Jt zdN-VG?%<;?2(07+Yt@gEO+_RoQ7P;NBf{VOf{C;XlM&p!vt~I`7Q~XHo6x~n#x30Y zG b3& )DR+%AW3iId=X{aXK&Xa-)S(pUn@}4TOBE^us z&Z9 ?e-%+tfO zXtvH+?JL7UIqAl`7Bx(1wa?fCT!)$2nhl?vl61aH?Qc!e6bW{MzQVNV!qxQ*JtWrH zMq{Cn5>_~)6O(`fT@>q7#E24d`v_WWrj;}{!TE~Qh8kM49K}^p&Gl84ii(Se8Y0L! z=Pq<6(q26kb7P#Q8B9TZtihY|99;1r5W`kEdr&1Kam^4$e&PnI=oRS*5ekES@7B=Y zmBKVT@TAMq5%nYnwpHd+AV~GUvqS2@{XC_`ISVD@aWO@|3;`SN33`GoTxYR?o#kQ? z!PUf}3us%Y0x4bbTiY*@{PlrYI!1nfd|-b`mU`$MPt+_MmWc3}jFI@51h3L&^PY&| zPiPsX--?s-jRj>X$~K*enMU9cOT(~5x^ORk!xb>4CVPYGND73BD`oTn*b=W5U5!y+ zpFA~sWwc#nqUU)Qhe)v{n0v|`Fx?=kt2DlX_)6j9J@7rk&MwG)uj024_V3{Ro!P-Y z73{TsCBuVZKFpW-mZmaYEf!7**>eZ0CT@)c`-)B@OPp;g!bW}htnNT~-M&H&w29+h zFX5Z%8g)GMy)&qCF;EE;%3U1=`4=}_fRiON%1D6giRMY2pv3+ODNN-sdhru_C|r?p z!eIbO7rc}Zfj%~mLB<~+C<5?-(*! n$Wi$%LP!bepSCFeX-Q5)xLaAKvmQA754o-68l zQf%fF+I9j4CtJ4`02Me*O|}ltSC!_(twyxN9=67R>}+pQ*4l1$)zw FN8QcwzeO`Uawh=6CD^! znb}6v(sPz4Yh}|9>P|G(p#?>l&KsGT+0NUk&L=pD&QdPm%7yDczOSy+)Td`%aH2Pa zD><`4R0gBRmJrWHuxaos0ilRMEBh6dO3&lvU8ggRJ`npm_hVtF^cPDFd`p-bam@%# z!)BzsF?50>k3B*utpVk2(oWoRN?&A!Qvc%vl_T?>U?U0Y3`G**vjzL4Aj8XI^4(SM z0~(UFaHBuCiRiG)eyQjjZbv*HIj?!X-al@>oj%XfXMH{*@cx?*oRf7DYrF#Zz&C&o zyuy{Ip&v$t9)@~W!8n*FXj{;6bL9Smo~lY!kxEV;PG%vjua|d}Z$$+y z9PEAgSA%?dxp9XTFKnPr=vemqJ^}ltXCYK_`M2IvFi`dB9}rob3G2U$FinmsjgNKE zV1wAO6{;{`7T5wrTBFR>DqU`n`!(c+6V`7lJ1V~t&m=vRS9gQK^kCG-w`z8J+(m5u zIAyPFoyV)#EV?Q6Go|jzgW02J66WpPt837fPvlCW$=Wp&m!8ACTc!L=t8QZTU>Et^ zhr?>iMQ|F-aVI3MsCymHM|haRgD-2i)?|H67O` _1*VnJ7I2u*#H zZN&Z7kSRThzhV%XR&EZ0e?r#-Lu7^{J}Dn*1=f$oQwcA7E;>~|x(gyjucC$*mES+W z$y-Cge?U<4wkriZYlrz8mXj;DDRK8n-xvc GBI %mdQ$?EYs>5XM#KXr(>p`W)aLB zeSh8=EK_r&X(;iEA^jqe3~gY6{BbOr*kRwZpXO?IZn6Ka1Bd?6foT8eK$yQeaLlL1 zt1S{(l= 2ESiD=(6Y3N!zQ)V2UfZ2^GP=2VdW2&)Y< zOPDTlY*66iz;_JiR6(iEWoVxiMDk8WbB6%$^HKZyTpeOsd`6|2i0xX?9}{_JtbWkz z?@z22^zWgK=Wl4Ehd0U4_H#idPz&0|Bc+kNKk@QTf2@7xf$oW?Q6tmWkR<1cP!D~^ z7^S2~ZG2-}bHGQ}BiY! G_x}O4kwE^_;kxd9wNf*(XGs^fr}2*A>#-lJ zhe40NJMNi7fWIWLk`KIf!%QgtkIo?KW3v9rqwRYd^!msE(=lEmyi~tkL@lu*J z%S<|aolBu>3_PLE&EkE3bm{zDef)f7=F5J+y-ZV;Qg2t4`ejX%8Q0w3j+kHaJO`2< zH0@%g8p2zB{`1gk#0ER+FfFUlvL4zZcZuOp sI5f6&DZtvBcBW7iHI zrw3$|(ULrl9|nXYv_@S}x@ug1{XRS>ZI;oY_ 66N4g%Y5{C9 @o73%F*oIJAnS{y9fh>4lO;}TQ(ZLJ*j4EWsLHdL>sA@) zP$o0u5ca w@$a5_}2dDGjVoEj;->5Bwl$9c$7=RAwq&ybb2%)g=S+y55Y?6uQD9;PB< zz||#Sa_H(uV`V;yX~npnG1p~l!moHxP=S(N=|t} t6PY4?{qyk?$}GIMn4m@vFs{6~o^3{c{l)A1sj`?nHTH^wZsGj@=N zL%~6_Ao;X-8j?<8?+~}I*ZiLn*R@%J&qaEYA+Dyk?GD@vujx(`Z>KG+d(bh#EB;KJ zBhxc$Mcy%N^0XCtQE``$MYtXpyPg{|7!P%gn;ZR5+?UYHc{bpu4VF@Akh4A)T2+%5 zIH&fn1wG