From 4604e050baf1ce95d0b76440b1dac01d15f6f110 Mon Sep 17 00:00:00 2001 From: "595208882@qq.com" Date: Tue, 21 Sep 2021 08:29:05 +0800 Subject: [PATCH] adjust --- Database.md | 207 +++++++++--------- images/Database/FreeSpace剩余空间.jpg | Bin 0 -> 21835 bytes .../InnoDB页各组成部分简单描述.jpg | Bin 0 -> 30796 bytes images/Database/InnoDB页结构示意图.jpg | Bin 0 -> 14482 bytes 4 files changed, 101 insertions(+), 106 deletions(-) create mode 100644 images/Database/FreeSpace剩余空间.jpg create mode 100644 images/Database/InnoDB页各组成部分简单描述.jpg create mode 100644 images/Database/InnoDB页结构示意图.jpg diff --git a/Database.md b/Database.md index c4f0e02..3555872 100644 --- a/Database.md +++ b/Database.md @@ -1493,70 +1493,49 @@ MySQL 5.7 版本以后,支持设置多个刷脏页线程,提高脏页处理 ## 数据页 -数据页主要是用来存储表中记录的,它在磁盘中是用双向链表相连的,方便查找,能够非常快速得从一个数据页,定位到另一个数据页。 +数据页主要是用来存储表中记录的,它在磁盘中是用双向链表相连的,方便查找,能够非常快速得从一个数据页,定位到另一个数据页。通常情况下,单个数据页默认的大小是`16kb`。当然也可以通过参数 `innodb_page_size` 来重新设置大小。不过,一般情况下,用它的默认值就够了。单个数据页包含内容如下: -- 写操作时,先将数据写到内存的某个批次中,然后再将该批次的数据一次性刷到磁盘上。如下图所示: +![InnoDB页结构示意图](images/Database/InnoDB页结构示意图.jpg) - ![InnoDB-数据页-写操作](images/Database/InnoDB-数据页-写操作.jpg) +![InnoDB页各组成部分简单描述](images/Database/InnoDB页各组成部分简单描述.jpg) -- 读操作时,从磁盘上一次读一批数据,然后加载到内存当中,以后就在内存中操作。如下图所示: +### File Header(文件头) - ![InnoDB-数据页-读操作](images/Database/InnoDB-数据页-读操作.jpg) +**用于记录页(Page)的信息**,如页类型、上一页和下一页等,占固定的 `38byte`。重要字段结构如下: -磁盘中各数据页的整体结构如下图所示: +- `FIL_PAGE_SPACE_OR_CHKSUM`:**校验和**。为了快速比较、保证数据的完整性防止遭到破坏等 -![InnoDB-数据页](images/Database/InnoDB-数据页.jpg) +- `FIL_PAGE_OFFSET`:**页号**。InnoDB通过页号来可以唯一定位一个页 -通常情况下,单个数据页默认的大小是`16kb`。当然,我们也可以通过参数:`innodb_page_size`,来重新设置大小。不过,一般情况下,用它的默认值就够了。单个数据页包含内容如下: +- `FIL_PAGE_TYPE`:**页的类型**。InnoDB为了不同的目的而把页分为不同的类型 -![InnoDB-单个数据页内容](images/Database/InnoDB-单个数据页内容.jpg) +- `FIL_PAGE_PREV、FIL_PAGE_NEXT`:分别指向**上一页**和**下一页** -### 文件头部 -通过前面介绍的行记录中`下一条记录的位置`和`页目录`,innodb能非常快速的定位某一条记录。但有个前提条件,就是用户记录必须在同一个数据页当中。 -如果用户记录非常多,在第一个数据页找不到我们想要的数据,需要到另外一页找该怎么办呢?这时就需要使用`文件头部`了。它里面包含了多个信息,但我只列出了其中4个最关键的信息: +### Page Header(页头) -- 页号 -- 上一页页号 -- 下一页页号 -- 页类型 +**存储页内的一些状态和汇总信息**,如本页有多少条记录等,占固定的 `56byte`。重要字段结构如下: -顾名思义,innodb是通过页号、上一页页号和下一页页号来串联不同数据页的。如下图所示: +- `PAGE_N_DIR_SLOTS`:**页内槽的个数**,其占用`2byte`。新建空数据页初值为2,分别指向Infimum最小记录、Supremum最大记录 -![InnoDB-文件头部](images/Database/InnoDB-文件头部.jpg) +- `PAGE_HEAP_TOP`:**第一条记录地址** -不同的数据页之间,通过上一页页号和下一页页号构成了双向链表。这样就能从前向后,一页页查找所有的数据了。此外,页类型也是一个非常重要的字段,它包含了多种类型,其中比较出名的有:数据页、索引页(目录项页)、溢出页、undo日志页等。 +- `PAGE_N_HEAP`:**页内记录数**,含最大最小记录及标记删除的记录 -### 页头部 +### Infimun+Supremum Records -比如一页数据到底保存了多条记录,或者页目录到底使用了多个槽等。这些信息是实时统计,还是事先统计好了,保存到某个地方?为了性能考虑,上面的这些统计数据,当然是先统计好,保存到一个地方。后面需要用到该数据时,再读取出来会更好。这个保存统计数据的地方,就是`页头部`。当然页头部不仅仅只保存:槽的数量、记录条数等信息。它还记录了: - -- 已删除记录所占的字节数 -- 最后插入记录的位置 -- 最大事务id -- 索引id -- 索引层级 - - - -### 最大和最小记录 - -在一个数据页当中,如果存在多条用户记录,它们是通过`下一条记录的位置`相连的。不过有个问题:如果才能快速找到最大的记录和最小的记录呢?这就需要在保存用户记录的同时,也保存最大和最小记录了。最大记录保存到Supremum记录中。最小记录保存在Infimum记录中。 - -在保存用户记录时,数据库会自动创建两条额外的记录:Supremum 和 Infimum。它们之间的关系,如下图所示: +**为了快速找到最大或最小记录,在保存用户记录时,数据库会自动创建两条额外的记录,最大记录保存到Supremum记录中,最小记录保存在Infimum记录中**。如下图所示: ![InnoDB-最大和最小记录](images/Database/InnoDB-最大和最小记录.jpg) -从图中可以看出用户数据是从最小记录开始,通过下一条记录的位置,从小到大,一步步查找,最后找到最大记录为止。 - -### 用户记录 +### User Records(用户记录) -对于新申请的数据页,用户记录是空的。当插入数据时,innodb会将一部分`空闲空间`分配给用户记录。用户记录是innodb的重中之重,我们平时保存到数据库中的数据,就存储在它里面。其实在innodb支持的数据行格式有四种: +**用来存储用户插入的数据记录**。对于新申请的数据页,用户记录是空的。当插入数据时,Innodb会将一部分`空闲空间`分配给用户记录。我们平时保存到数据库中的数据,就存储在它里面。Innodb支持的数据行格式有四种: - compact行格式 - redundant行格式 @@ -1571,27 +1550,9 @@ MySQL 5.7 版本以后,支持设置多个刷脏页线程,提高脏页处理 一条用户记录主要包含三部分内容: -- 记录额外信息:它包含了变长字段、null值列表和记录头信息 -- 隐藏列:它包含了行id、事务id和回滚点 -- 真正的数据列:包含真正的用户数据,可以有很多列 - - - -#### 额外信息 - -额外信息并非真正的用户数据,它是为了辅助存数据用的。 - -- **变长字段列表** - - 有些数据如果直接存会有问题,比如:如果某个字段是varchar或text类型,它的长度不固定,可以根据存入数据的长度不同,而随之变化。如果不在一个地方记录数据真正的长度,innodb很可能不知道要分配多少空间。假如都按某个固定长度分配空间,但实际数据又没占多少空间,岂不是会浪费?所以,需要在变长字段中记录某个变长字段占用的字节数,方便按需分配空间。 - -- **null值列表** +- **记录额外信息**:它包含了变长字段、null值列表和记录头信息 - 数据库中有些字段的值允许为null,如果把每个字段的null值,都保存到用户记录中,显然有些浪费存储空间。有没有办法只简单的标记一下,不存储实际的null值呢?答案:将为null的字段保存到null值列表。在列表中用二进制的值1,表示该字段允许为null,用0表示不允许为null。它只占用了1位,就能表示某个字符是否为null,确实可以节省很多存储空间。 - -- **记录头信息** - - 记录头信息用于描述一些特殊的属性。它主要包含: + **记录头信息**用于描述一些特殊的属性。它主要包含: - deleted_flag:即删除标记,用于标记该记录是否被删除了 - min_rec_flag:即最小目录标记,它是非叶子节点中的最小目录标记 @@ -1600,51 +1561,43 @@ MySQL 5.7 版本以后,支持设置多个刷脏页线程,提高脏页处理 - record_type:即记录类型,其中0表示普通记录,1表示非叶子节点,2表示Infrimum记录, 3表示Supremum记录 - next_record:即下一条记录的位置 +- **隐藏列**:它包含了行id(`db_row_id`)、事务id(`db_trx_id`)和回滚点(`db_roll_ptr`) +- **真正的数据列**:包含真正的用户数据,可以有很多列 -#### 隐藏列 - -数据库在保存一条用户记录时,会自动创建一些隐藏列。如下图所示: - -![InnoDB-隐藏列](images/Database/InnoDB-隐藏列.jpg) -目前innodb自动创建的隐藏列有三种: -- db_row_id,即行id,它是一条记录的唯一标识。 -- db_trx_id,即事务id,它是事务的唯一标识。 -- db_roll_ptr,即回滚点,它用于事务回滚。 +### Free Space(空闲空间) -如果表中有主键,则用主键做行id,无需额外创建。如果表中没有主键,假如有不为null的unique唯一键,则用它做为行id,同样无需额外创建。如果表中既没有主键,又没有唯一键,则数据库会自动创建行id。也就是说在innodb中,隐藏列中`事务id`和`回滚点`是一定会被创建的,但行id要根据实际情况决定。 +**为页面的剩余空间**。User Records部分从上往下使用剩余空间,而Page Directory则从下往上使用剩余空间。 +![FreeSpace剩余空间](images/Database/FreeSpace剩余空间.jpg) -#### 真正数据列 -真正的数据列中存储了用户的真实数据,它可以包含很多列的数据。 +### Page Directory(页目录) +**为了在单页中能快速查找到对应的记录(最坏情况为全页扫描),把一页用户记录分为若干组,每一组的最大记录都保存到`页目录`,每一组的最大记录叫做`槽`,然后就能通过二分查找进行快速定位记录**。所下图所示: +![InnoDB-页目录](images/Database/InnoDB-页目录.jpg) -### 页目录 - -从上面可以看出,如果我们要查询某条记录的话,数据库会从最小记录开始,一条条查找所有记录。如果中途找到了,则直接返回该记录。如果一直找到最大记录,还没有找到想要的记录,则返回空。 -但效率会不会有点低?这不是要对整页用户数据进行扫描吗? -这就需要使用`页目录`了。说白了,就是把一页用户记录分为若干组,每一组的最大记录都保存到一个地方,这个地方就是`页目录`。每一组的最大记录叫做`槽`。由此可见,页目录是有多个槽组成的。所下图所示: +### File Trailer(文件结尾信息) -![InnoDB-页目录](images/Database/InnoDB-页目录.jpg) +用于检验当前页的完整性,主要记录了页面的`校验和(checksum)`。具体地其占用 `8byte`,前`4byte`为校验和(checksum),后`4byte`为页面被最后修改时相应的日志序列位置(LSN)。 -假设一页的数据分为4组,这样在页目录中,就对应了4个槽,每个槽中都保存了该组数据的最大值。这样就能通过二分查找,比较槽中的记录跟需要找到的记录的大小。如果用户需要查找的记录,小于当前槽中的记录,则向上查找上一个槽。如果用户需要查找的记录,大于当前槽中的记录,则向下查找下一个槽。如此一来,就能通过二分查找,快速的定位需要查找的记录了。 +## 行格式 -### 文件尾部 +### compact行格式 -数据库的数据是以数据页为单位,加载到内存中,如果数据有更新的话,需要刷新到磁盘上。但如果某一天比较倒霉,程序在刷新到磁盘的过程中,出现了异常,比如:进程被kill掉了,或者服务器被重启了。这时候数据可能只刷新了一部分,如何判断上次刷盘的数据是完整的呢?这就需要用到`文件尾部`。它里面记录了页面的`校验和`。 +### redundant行格式 -在数据刷新到磁盘之前,会先计算一个页面的校验和。后面如果数据有更新的话,会计算一个新值。文件头部中也会记录这个校验和,由于文件头部在前面,会先被刷新到磁盘上。 +### dynamic行格式 -接下来,刷新用户记录到磁盘的时候,假设刷新了一部分,恰好程序出现异常了。这时,文件尾部的校验和,还是一个旧值。数据库会去校验,文件尾部的校验和,不等于文件头部的新值,说明该数据页的数据是不完整的。 +### compressed行格式 @@ -1813,61 +1766,107 @@ InnoDB使用两种预读算法来提高I/O性能:线性预读(linear read-ah ## 磁盘结构 -InnoDB磁盘主要包含Tablespaces,InnoDB Data Dictionary,Doublewrite Buffer、Redo Log和Undo Logs。 - ### 表空间(Tablespaces) -#### The System Tablespace +#### 系统表空间 + +**系统表空间(The System Tablespace)是`数据字典`、`双写缓冲区(Doublewrite Buffer)`、`Change buffer`和`Undo Logs`的储存区域**。该空间的数据文件通过参数`innodb_data_file_path`控制,默认值是`ibdata1:12M:autoextend`(文件名为ibdata1,大小略大于12MB,自动扩展)。8.0之后InnoDB将元数据存在该区域的数据字典中(data dictionary)。 + -**The System Tablespace** 是Doublewrite Buffer和Change buffer的储存区域,也有用户创建的表和索引数据。该空间的数据文件通过参数`innodb_data_file_path`控制,默认值是`ibdata1:12M:autoextend`(文件名为ibdata1,大小略大于12MB,自动扩展)。**8.0之后InnoDB将元数据(以前的.frm文件,存表结构)存在该区域的数据字典中(data dictionary)**。 +#### 独占表空间 +**独占表空间(File-Per-Table Tablespaces)**默认开启,为每个表都独立建一个.ibd文件。 通过参数`innodb_file_per_tabl` 可以设置关闭,这样的话所有表数据是都存在The System Tablespace的ibdata。 -#### File-Per-Table Tablespaces -**File-Per-Table Tablespaces** 默认开启,为每个表都独立建一个.ibd文件。 通过参数`innodb_file_per_tabl` 可以设置关闭,这样的话所有表数据是都存在The System Tablespace的ibdata。 +#### 通用表空间 +**通用表空间(General Tablespaces)**是通过`CREATE TABLESPACE`创建的共享表空间。通用表空间可以创建于MySQL数据目录外的其他表空间,其可以容纳多张表,且其支持所有的行格式。 -#### General Tablespaces -**General Tablespaces** 是通过`CREATE TABLESPACE`创建的共享表空间。 +#### 撤销表空间 +**撤销表空间(Undo Log Tablespaces)**保存的是undo log ,用于回滚事务。undo log(撤销日志或回滚日志)记录了事务发生之前的数据状态(不包括select) 。用来保证在必要时实现回滚,如果另一个事务需要在一致性读操作中查看原始数据,则从undo日志记录中检索未修改的数据,也就是说MVCC机制也依赖于undo log来实现。在执行 undo 的时候,仅仅是将数据从逻辑上恢复至事务之前的状态,而不是从物理页面上操作实现的,属于逻辑格式的日志。 -#### Undo Tablespaces -**Undo Tablespaces**保存的是undo log ,用于回滚事务。 - 该表空间有rollback segments,**rollback segments**是用于存 **undo log segments**, 而**undo log segments**存的就是undo logs。MySQL启动的时候,默认初始两个undo tablespace。因为sql执行前必须要有rollback segments。而两个undo tablespace才支持**automated truncation of undo**。 +#### 临时表空间 +**临时表空间(Temporary Tablespaces)**存储临时表的数据,包括用户创建的临时表和磁盘的内部临时表。对应数据目录下的ibtmp1文件。当数据服务器正常关闭时,该表空间被删除,下次重新产生。 -#### Temporary Tablespaces -InnoDB把 **Temporary Tablespaces**分为两种,**session temporary tablespaces** 和**global temporary tablespace**。 - **session temporary tablespaces**存储的是用户创建的临时表和内部的临时表,一个session最多有两个表空间(用户临时表和内部临时表)。**global temporary tablespace**储存用户临时表的回滚段(rollback segments )。 +### 数据字典(Data Dictionary) +**Data Dictironary(DD,数据字典)是有关数据库对象的合集**,例如表、视图、索引等,可以看做是数据库的元信息。换句话说,数据字典存储了有关表结构的信息,每个表具有的列,表的索引等 -### 数据字典(InnoDB Data Dictionary) +InnoDB数据字典由内部系统表组成,这些表包含用于**查找表、索引和表字段**等对象的元数据。元数据物理上位于InnoDB系统表空间中。由于历史原因,数据字典元数据在一定程度上与InnoDB表元数据文件(.frm文件)中存储的信息重叠。 ### 双写缓冲区(Doublewrite Buffer) +**Doublewrite Buffer机制极大的保障了Innodb引擎的数据安全性。尽管出现了宕机坏页的状况,也能够从Doublewrite Buffer读取正常页来恢复**。Doublewrite缓冲区是一个存储区域,InnoDB在将页面写入InnoDB数据文件中的适当位置以前,会在其中写入从缓冲池中刷新的页面。若是在页面写入过程当中发生操做系统,存储子系统或mysqld进程崩溃,则InnoDB能够在崩溃恢复期间从Doublewrite缓冲区中找到该页面的良好副本。 + +在MySQL 8.0.20以前,Doublewrite缓冲区存储区位于InnoDB系统表空间中。从MySQL 8.0.20开始,Doublewrite缓冲区存储区位于Doublewrite文件中。从MySQL 8.0.20开始,默认会建立2个Doublewrite Buffer文件。 + + + +**为何有了redo,还要Doublewrite Buffer机制?数据库双写的好处是什么?** +Doublewrite Buffer机制主要是更大的保障了数据页的可靠性。**主要是解决部分写失效的问题。**好比16KB的页,只写了前面4KB,以后就发生宕机了,这种状况被称为部分写失效。针对部分写失效的问题,redo重作日志也不能解决这个问题。 + ### 重做日志(Redo Log) -redo log记录的DML操作的日志,可以用来宕机后的数据前滚。(在log buffer的redo log日志会在宕机中丢失) +重作日志是基于磁盘的数据结构,主要做用是在崩溃恢复期间用于纠正不完整事务写入的数据。在正常操做期间,重作日志对更改表数据的请求进行编码记录,这些请求是由SQL语句或低级API调用引发的。在初始化期间以及接受链接以前,会自动重播未完成意外关闭以前未完成更新数据文件的修改。默认状况下,redo log会自动生成2个文件:`ib_logfile0`和`ib_logfile1` 。 + + + +**WAL机制** +WAL 的全称是 Write-Ahead Logging,中文称**预写式日志**,是一种数据安全写入机制。就是**先写日志,而后在写入磁盘,这样保证数据的安全性**。Mysql中的Redo Log就是采用WAL机制。(这里的写日志因为是顺序写,因此不会成为性能瓶颈。) + +**WAL做用** +Mysql中若是为了保证数据的持久性,在每提交一个事务就将日志刷新到磁盘上,这样效率就过低了,严重影响性能,因此就有了Write-Ahead 。 +**Write-Ahead工作机制** +先在内存中提交事务,而后写日志(在InnoDB中就是Redo Log,日志是为了防止宕机致使内存数据丢失),而后再后台任务中把内存中的数据异步刷到磁盘。 ### 撤销日志(Undo Logs) -**undo log**记录数据更改前的快照(感觉就是备份),在数据需要回滚就可以根据undo log恢复。 +回滚日志主要是为了支持事务回滚功能。默认会生成2个回滚日志,保存在undo tablespaces,默认状况下就在数据目录下:`undo_001`和`undo_002`。 + +一个事务最多能够分配四个撤消日志,如下每种操做类型均可以分配一个: + +- 对用户自定义表执行插入操做 +- 对用户自定义表执行删除和更新操做 +- 对用户自定义的临时表执行插入操做 +- 对用户自定义的临时表执行删除和更新操做 + + + +## 存储索引 + +`InnoDB`支持`3`种常见索引: + +- 哈希索引 +- `B+ `树索引 +- 全文索引 + +### 哈希索引 + + + +### B+树索引 + + + +### 全文索引 + -那些undo log 记录关于在global temporary tablespace 的用户临时表的回滚信息,不会在回滚中恢复。 @@ -2471,16 +2470,12 @@ select * from t where k1=1 and k3=3; 在 `MySQL 5.7.7` 之前,默认的格式是 `STATEMENT` , `MySQL 5.7.7` 之后,默认值是 `ROW`。日志格式通过 `binlog-format` 指定。 -- `STATMENT`:基于`SQL` 语句的复制( `statement-based replication, SBR` ),每一条会修改数据的sql语句会记录到`binlog` 中 。 - +- `STATMENT`:基于`SQL`语句的复制( `statement-based replication, SBR` ),每一条会修改数据的sql语句会记录到`binlog` 中 - - 优点:不需要记录每一行的变化,减少了 binlog 日志量,节约了 IO , 从而提高了性能; - 缺点:在某些情况下会导致主从数据不一致,比如执行sysdate() 、 slepp() 等 。 - - `ROW`:基于行的复制(`row-based replication, RBR` ),不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了 。 - -- - 优点:不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题 ; + - 优点:不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题 ; - 缺点:会产生大量的日志,尤其是` alter table ` 的时候会让日志暴涨 - - `MIXED`:基于`STATMENT` 和 `ROW` 两种模式的混合复制(`mixed-based replication, MBR` ),一般的复制使用`STATEMENT` 模式保存 `binlog` ,对于 `STATEMENT` 模式无法复制的操作使用 `ROW` 模式保存 `binlog` diff --git a/images/Database/FreeSpace剩余空间.jpg b/images/Database/FreeSpace剩余空间.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eaf7939980ddea2847819207a7379292336af950 GIT binary patch literal 21835 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 aNQ%bEGZKbLW~#FMO#p$NiOaeF_WuFKf;Rd9 literal 0 HcmV?d00001 diff --git a/images/Database/InnoDB页各组成部分简单描述.jpg b/images/Database/InnoDB页各组成部分简单描述.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1c1e82e0371ac6cb2876ffafd469abaa4d954890 GIT binary patch literal 30796 zcmagEW0WP`wkDjmZQHh;m9}l$w(ZPH+o)8fZQHhObk%$AIeov|{f&+vu_I!{h**0) z^TAvr6eY#PMBD)Y)I^2kRpmJdIQ|^ZZ~$ckQq_SF1M?+F+e1Fe>&u(+`m%!g<)B1h- z{Pe4POYuW_7<=sd);O=6|DLN|q`&Z6@7C!8benvNyUwlmTjnMFFgwC;`F8k*|4MuB zZmNCbgY}Vn#ee2M{2ung{V2Rh+u?8dPWbNrf<6+z_&)M$`;vU)znOonz4B}M-u)8v zBmL6*LVnk~rhnE`)w}C9;sJbuf7rh19`^!zn|DA?JL%r^+we>L zNPh?XlKIs8GJDRo{=RhA{KEcfx%}?If0(}aYx=tITl+r#R{L6huH3X+)O+h*^oIBr z{ks3w`p~o9ma<=5Pz^VaD*)@~{k|L1xYwO*M(wXeF0=sFX;x(UL&9+xwL!HMFe!q&=H z2@$D24`UE~?N=CTt3k5t+$OJd2;n;6z)yi_&PbS^K}@_j$r5mGH)-@Be4#LEI6UTD zx26bm8;iKiQDJc`7;h{77Y*)iEnQ4Yy!VgtPDq zr_7vqAA0s*1W(9J=NENK$ z{#641+-!}Izh*n9;Gfg}vMOIvXat2IFrv)duj3g!8xOyAeTvf7f7u(K>b0>%DI%OEhy!~&d=n8c8zrk@XE-#>S~BK8nFd-da0Zl7A$u{ zLX$jRy2xUjLp+)~3DBNpmkGpR@2uB9(! zLetIS*iWjQ4jgnCQ6rpW3X7CqNnogQH@_+e4SG}%!2OYT+J_{~T{EDrOU=o()W0&k zX9NW*F62AH2`WFYd%`oNF{XP2&(YgMz5d7i{{xU<<=aPHMO2%=-@hm&c>WIq|0h-k zDyY-TC1h+Q9K|JSo9sEPs@q%0Ua6hP;DSLn8g zs&&?Hi#GYr*OO#J;6F4-ON%U+34HuTwW)8!0~drv6O{m_c1u|bvhiul$q^WB6Sp+1 z8xavQOiS{hL1!xX@~RRIKFG3P_?3f(v*h+iGxhaS#hapHs+fYu=vH$J>HaEc4Lah# zHTW+r|4V}Zujm1jIuNG)KPmuS1*maigx5gxFOo1-hnl%rf*=`(D#Z8y2x*gnCU>Ow(WXD zxh?Z6)5s^dNDogsM!Zv)#(pA)2p5}@YH}HLv4DUtya6A8w5KMSK9bBb?v!L($ACLX z{+%qk;x(xiDMOe{b@!VeSC(XV({>|BR02X1^c!`u#yA{ds7D0Pj6W~%>@gNvq_$o) z1R^{AF>beKpiU(mz0$Gn`fD>IpU#lV7!}wJVv|>h_2P7Or_C_gXJM+h4%AKTJ zx!I`2XGeUxc7Fq3a8;Y}hudjq=}H7avD}mLciOGR#CoM8)7`cT`hnY=VSDz*X7V!d zD2F9~&zc`3oSy#$M0biY)uUtTE-?dpyzhRVfjU_}^E1H(!7#wm8Jl zB4oL{cbBH;fI5Eu3WwcLp~3<@f_@F&?+@Po8COO0hR%MGEFpJVmizo+LWzG_(L!Y7zYD!BFoiu@ii|TemdSkg zn9!A}GM~!X2PN;i3&3^UXOgsnfS0L?H5uoba?B-&8DEuPOJe1)0p%D(1QkMa@=)wS zJ9-JhPI!|BLlyK@odu>l#I%8-fg(ml6C2%JF)kI=|{iP z4t7=^X-Du704A~RY@@*%86!{U$So7dDOO<*&{fJEA2D zg=rT%KB6r1M6du(=_6NG1pd=s4)Tx3^~BYtKvYpSsI%2VKe5P2h`@i- ze%fohP$CjOEj9^d8EQ%vpgq)3DyVDA%-LnX!7^5aV9@rz_iTEbLGg}c>;E=MMvVa9 z)ifwov)O!e}sg}uu%nBZTExV8mXUz3y^yNqM^glv6&lU{{9Ops6eTpKV zuE!`h{{96H_iQhMNx9qeodTcsGdXTNTC#*1P9#+bKhXD|0hqBknx?ZZfyT6Yy4jw z=|8{|QnL^zxc>2`|76C0C(QpAMmqAH(;5C6*8lHqZu0Pl%|%pS1)ky(4!f~~ngH0T z!nRH>Lw6voNKI;rNwNjpTEDDkLKJa*|CnF-Axjh{dM4Z{s$xmdY=d^DQ-%DY%Qmuq zdi^)ur%K7IX0tI?%zB^5qw3SAdUr576HwlQqsM(iSz)LLF;h3qiL$ z1N``HdUo(zz9m@~`R5!*2J>=`AH>r}(B5i9s8f|b6MFz?7GB*{VpFz?vQ887WLK6v zj+J)7b0iY?H<=H!-22+{jO5n%^Hf9zt*W3?t#^CXpIn|GVbCA$-So8O2g?KYJsWpg zofa@cj-2yC(#{00TuO%LzZ8ZWPwZ|^@lYQ#TL>3Kuj=n~GK=s3Zp)8-D^hoK7B`+vy6KUwo%Vf3$cb@57N{i{Hpv;Li8kU>lT6>P5A z{!=D@+!CzXwfb*=q3`*xTG^!hC(;_E$^D}le@~QfkiclkSszGx`ajA-%YcI6n(Fx{ zZzI4_eQZX|{Oe&YaNJ3x&tti$OCxN-0-78N!rl1`3#!YH?K;l1iS*mFnSTj?Ek+<% z{E6VIvQw=985_*BIZiGE`n4ca(mtc6%-up2HPFxuw9ebTZ6QEX60iBm?|urO>EgQ> zbs*}!1eU>UXQ_vmX*>`(vwI>%L{0#jbv!sJyO$?{oUX{xjHIiOoxEH%6#~c=0Nj&A z`6$l^0LIIiprKOs?svJ2=hJvZD68oD`7=km-nceWJ zD+q=Vw32#A4e^R47Voe1`j~-1zLIj3hegr+Wg{&1lS}x)VXiToRvy=nf^or8_A)2f z#iC2QCS%sMf-C%h>!lNC7v(k9yWJz;rIUr;7MnY37T}i10U|F6-V5rP8g>D3G%B(w z*UE#GR)7{Ku|~wfOJfjpz{RGkL>l?UTTqmO^<8hP9r4U+yUL_}%74iRPq0 zu40eSmlk8S<$f@zH9|eYKWP6M*gyTokkY?$O||lW7+uXY#x(y=5r}pCJGb_;{8z(D zEMx!Q!qPp+f9p>EFJ=?(*-s&zyX{Fggb&ocEWIjgh1i*w6L9#R*8=qe>QCM9-3-Hx zhwS1xx(09_(AVm=Qwx{cu(&jVQ=~M1ErwVftMpCAh4mZ0$6g}t)wao$6w|D5AtzU9 z{G&#^dB4~UQv01wh$~T9c}BTBN0Q1+&qh)!Fqys*XnobEd-yVDGxu9n(+k_rIfS9@ zucVHafi%)p6(Q)~4#fkJX*cmds0vP*R#-nUdkCG;tXXX28x+1#7+`NPhv4X;tzRYM zSerd}^x3!W=k)tZH*-C~A(}HsJQyBta5-R2?PZl`$00!fcq7b9$wdUdF!2<~!i?g^ zTSsTX%MgdJa>e0r?P;}g>l}yc5Y*~d5+!cyQ@C|000G7CoE;<4*(zzLh&R1Jek>Cx(DFTcFlD<;$Wx& zv&NB51(goBrP|PYUF4m4ruj(|e98`RIMtJ71BH4l1dF8$xf_q0+0)IHpmtIMm(p&M z@Cmkv$Ha0qB@!aRaD9N4&5aYM(!^8BgzQdfKS14-VGCL#wb%+R@o^Bfh^)d?pThy% zB9mf;v~j}|Uu+9%^gZ`>s`09+xETx2(|$ja18xY|Tq5k@BNIq(G7%;lUervH?Yw+n zIO1;ktJz@nL4%~mBU$?EKzKEtZWSzo6?%$^vIej2PK~kq{sdb`puoc)FHcYRcFH%?&HU!oz7mgz+fhU_QyJP3n zHaW4N5p3EMGh84hMf13vv3~Nl4s`g>yI8WRWyA0W+)@YFCRlA;h2hjVd83lEEQ)|_ zrhQx9!1U&gESk;omt9@e>c!pAo|x69e#b>M40p)41_kly>v+Wg5K43fv4x-XbvVlauC2z=%qh2okkIhr;|%yAm-nena3Mu+G^>Ucp}tlkF@F zZUbw{-EUfA2l9stWZlg;#Xm6oCQ#RFGAhwNtxo92o_dL}Q z4?ivmtmJP3JCkpp`o&q8%ax+t!(&sbCkHN{K(7(c4cVa{i~s0^ z@2+*J?MC(^jsU%x4z3*2I>7Q$THO;)LLbc5*d254$>J2Doh#MUBz$nI0i-vf&rU~< zz1>7@zJ@RzAd-HB5|9?{?guzto>I583##hFEgu>{ zzdok&rdJ2?9o=mdUYKeMk5QEra{hwbIw)Hr=cCbJ>1d*{FTP!-$X&oEVF7r=%LHk- zH-Hrv#P>pH|A0l<%>t7T`h8`dBu5J(xxul0Y7mUr_)Gb2DR!Y1i{z?d-Gpg(&1G`iYTXGU1 z(%N!6#`W*|$N}7>85ntvV*LJ%T(1pL;)*EqkO`=Iqx5OmpRANzrI}(I%z?i2C_!pM*N~3Dz$EjW}iVG+msAn`%#(p>U(-Dtz|@J+?~^? zZG>i{ny#{~wBu~Z)4i6m;as`@+C4A^^$_I>Oc|=Thal>?SCvaF8aj+aSZT4{JhQIw zr}6Gi*IUf-rNvmMzALr(8k4%!ZQfvdoAWf7xp#4KU+1p9OK?W^OA{Tq)E6GgO>?be zll2+kg`rU9G#}8M4U{buhO{35%4fFFA7yKE**IJRUU`L55A(@B*BT$v(Y+k4%g#2r z2tBG_(_;s3&^bJVyxw4iDZAE2`9_>2q=SUWSl~NkF6M>j1SrYMI8shde6_DlU^3nP z2AD0#z$9@l(v%8hKZn`GS99<`0klt{Q^m}a;$m``weZ*Cet7PEy|9C*&Pmx0y0)n= zZ|2C59XpC?-0$j`F8khcg1t*HMBS1lz;D{=iEG}M40_DE4JUsYnFgzQ?RQvk4Q z`NrvtC532lcj~!5)4Ad`kLM_Mn_eRvoUxze4n;LXD7(+G9m(c&{6vSMg+ryjIYR!D zUTuHHPlcBpm>)mApzKSS2k5Aco_U8OlUU+%oDWob7*lhH@&aAv88oq8j6d2gqC$s} zKg__#n&xqB#ins#KA`%5;I;sNsfWR53y$deT@Y^e(!qz1XpdjsG+^f>xl+a#(&;;; z7W-xxT2(k_hNM-09~w>msaB{(jUE^1ZXwdI8@N}=my%l?i4*Sbrw zxOG;t%;-8-V;}DQLqCPn$rN!xHffUGVDl?oM`Gq*?56eQ7|kWh^kE zNp|wilCV_TfuG8&2RbQzf+Zbt7AE%0zQ-oUyW3Hy2l(!BQpj>z5SQSojeUj05hY&l z=@y-hLu{*mgVoRIcCiDbntqI?+~PtL9!^s+*jiHalnmgf+0<~~qO7?9w;lp_!ydoI zoGy|j&v&8rv+yU9w=Ykx?5svwnK67oR*{oPWch3YPRADv{!v-w9yh@{n=a4v`UIjQ z1>+N7dT>|<_vbG;9SEZ3*KMA$a?z}3+dj&Du6ks(j#Kz=WNHeTL2Uo2y!==xVE}ZN zGB6Pua4XT3gri0 zC>{*q@C8%@|5!rNcFT}1Bw`phROb(?x*)?X?^ftD7LA9krB(x4QR)eDplL(<_Q*ml za7C~cd9F$X_bv}=^7!Qh{hVR1p`C*DwSF+!u;oHRfs8Drd42~_HvxuS#sQvSd@ZxG zGRGx1qp#b@cNAECW?458`&i7NEF(tEdBY{H&|XnbOi{n~v*W(?j2I}vXC)qd+^(i( z^4~PCYJk}jrXIhMvuV8ttB58gKt0YNZl>$ea9CG#EGeyGB~eE6IHGO%)d(S6KLT0Q zZ+NHF{P90t|L}i!(lGp2SoXu4~Z_-VhA}%Ris`#BE}XCG+m#4(+sP;m^3DN45qmX*$cJM z`0IfAK)Zy|1mH=`XY}el&gEAxs`|PH0-$D|pvwI@RIsC~t2k(0h8 z9&tAf1s&QX&lEcfnZ}HzSUgTA~BEm_QL22rn8C+-V;0IOBxYkB-r@XyBjWx$ z?6}??=a7V&+Nb@N=y=v5>%$H-l>G07&$A*X?>}zH>eGgo%Ea~hZ}e!pl092qb9Y5QSr`wI34fuT_eWkHAW&Nz70^2 ztFRhj(xJ_))KumO&Y*0P-zUR)aG4hvz%}~>e=`!<*m6&s2B^cg^c*1*U zns(q*2PAJQPa;Z`t45KdWnVeWsrd(QwpFKFB;b@Z%hHC4uS{jHQZhdBx@e~K+#y$* zr;&Aq)AB7tmF{`;=6H?BwrT)4OdM3oG6#sgN?Y3}ZVt zr_Gk?Cm(cf1U$G*FB=X;8;P_dm4sGWa zaF!NpiQHF`gp5C77qaqObl+9B4&xXzj!6`p)ke9BXB13C*Mu1zIoRoakdzKothc0x zCYhDCuz;!`7(ye%#7~%kPqES^Lyyf9!SoW!9-!x!1e@=)4o?&UghP{U=aaAUg!?84pR1E9GexZwMKC%$yJdWmuC&%X=;aJUX#bENOIhHs*tF>Bd ziDqhj`2gG=`bw?)9KD2x+Q3H@y4xe#{9a6?j|bKv4m=HW0<9_fXRs9zS`LeVqKCn( z%DbUB!MK%mGML*I8SE6;!lCA}8&;00xvr@`mmG?IZ#jT3T%wac7Q&*bpUVnSxmGg{ zYpETTuj_5tUL!+Q>quQ5cZ(rV_No9Mnbge(rUza&W==}we%_Rm_Hp2K0-p3vAxKd= zoqC5^S#9^uvfLKS(&31DP!zH3&)fs}fSthoQqu7#^yy;QMQF-03As~*?Sr%$%*LgT zn9jMnrnLD%h$9~q5JLdZo6d3>-XK4bY5y$N2dF@1bdjzj^6LE*4Cn?OWx6iPdx@Gb ze17@`ZUaf2O2km9Bk_Dze_^VVdi0D*4dP{tb?Rkr@BB4Kl8|K_6#H{B2v)sSoX@bu zaadP5+OL<4Uz)|$Efh`ql~gJj^XIG$qt6?CFjO@PcNBtsK09+oVa+y2%HoKsp(tTn z0A{^iC&d28N!(rf!+3~I%dr0sQ!kC59|IGmiGK2Q>VC@sMc_qZnkW2~HE;8jNc?#Sm)F;17<&z%n>$ zy*_KVQ?YN<2fn&tN9}p4=;iM9dVP)-ZFsK_2^VIozgIx3Aez2w`xbDDS+smt=~2-{ zgia1Z(juE*Nk)`61jntY^w~D|UM(D-T;4AHVD)-BrteZ;rFE3Yc%{}j>5h!@%+4Bp zW!KW}Nv+F#(Cgr4BP~2x0zWvRNqWp+(lSoILNlKLv%R~E1H*WGKXC2%6pmG9JK^`c zdI&+7X-NuZFb*6OC5+n~&D2X(u{zaOFaP{(T#YI+W|t&0W5?$7hwQTMqgMh-!H*ct z`RuO~7EUN0{r0;~%Wb>^`As*HBdaM?MQNFG9eQmi*-=M*1$v0X-V~eT$$ZZuSsR5N`I5c2&tOq( z$ghZlu3&ZiC#=2C?wkA(lxMMim{gjNp^&(wP3|z{!bZT6lPR5q)yAA1pK98PP z8lxGBrC-2Lis~C)ljvR3xS~ZG6V<4(3gK!j{7$Il7w9|heDkN>;Xs3_?LP?4A^037 z$@gL!t&%I1S}Ku38^%_YW#qkYgbq@fzFO(zSxO*f%;fTKLmhAHwI%y6`31ky5G?FZ z0=P->74GS=HM~2X{qSob(Bwaj>Xqx}E(US^@Pba@CfaqZJAZ~RDPy}0(aXa<(>0!G z&m0TY3hU@y^bdaKOuC6&X2#FQMFB`jBxM$Ut?m9E{}!q89Yuh@dRsfMF=|>c$gMgB z(q`+^m8cX4Zaucs#;O0EHD-#gn(6JMb;_o&3SG18s|H$o7bx6Rk8~1K37rQ4oNYu| z7`_^ws2i=ZdH2Yk+(v^C39KZSqMKj8T~b(l$ha(Ur)9QS|3B}gsI!Bz10Qo;TzxMY1s_mWQz3IB}VQ8oE-oIsL9@6kHICe zL$0|_X7%4&cuR$%BRd*Q6dl#$uuL1_h^ryEkcXW|$VypwND-}sp9D2Xxzlc+f~JM2 zJu}ly=UZq1(DOKg*V5KiuRKKpHv0N(o0o(>b_b9%G+vEPM^y9MyahXzfITWz-SGf0 zucfooEnsjQN){W%U*_Un6eT%jM#>cgNO~T`D8c*#p8T-$awo`>dD3vhq??%_5-~k; zK!++7%eAK(mJ^Ul1X72dyinA7C>9Nm#^N-Bwt4jqxFny>$?t7BYleuGq_D$I0ynyI z_=Qv2o6dF|-N8V~UBQVk)kN`xWsK&C736COiV1H(X$ZIrpvm1* zs|4zSC+rgZjOP?KUV3vBZCH7Z)NxheFUjH;6`ssSQOt9TU>PR+FLAG>(EM_o8;QK(v0VBO&RUbd1~G)+ z))2Uu$9f!Qb=44BMD_>XkZboU3T%;0*-I8$2d45T=MBR}G$0;0oOhzSCtfHWm>t2F zg<5sLh-@OzEYo^fJDgUGTqCvCX*1MK(=}b|CTO~6ZjH01uQl9f#l9^~rt|iT`G49} zA={R)0NXb!3Qd z{H|ibFrYsPKzH|e6&oWo;U{m8xe~0ZFiG@3LG;fKSZ^d+)nd)=)gTUo1>Z+Q{?9c! zdwFhvInrkrG*Cb$g@~`4p!a39&UEDB7H}4bUexpEnVCg)t}c;RZ}(&0Z8HBh{EG z1j?^fRwzdFQ=`$@6n2u0&b5)=b%iO1w5FbqyRmU+US_GSq(ITiYGv6iTrXhY2ecpy zzr71+<|}rN$~Njr=`e^q8lwNB8R7m$wV(uz7iXKRs2^3+#+Axn1qtLEG2pndC-wod zQnZh@;!K)QZ&KcvnC_%7=;Pl0Ubq1$#|$!0m_}{n$`-q64S(4l+dGo7N8vG|g+S)*P$U$5Wn+r#k2QpNO{k}_zS&9oyAK5q>L9)gncPA5m+)Te z2F=HO(PZ4r=H~2vc9)_APCbfa&M%8!k$fvuJ#5{wbmSlK-kAWsO+75^4Ll(U zg7v=y<|hVlf?K9jxnhq3WI-k*r@}3R<+b-%Zu7HR9-(x-3(st4Ea}-u+wcyG&SWp$ zL8dozDdDvL9w1<9M~oxyaiZ~AJRr`t1QFm3#=WSvy&;eOT!^fBAFYF*01^O#~WXRDjV0`!S z6=j4kVhd~;!57zZglz4AZk#%K5$>3O1wmn(d)c7@a%vD`AKZ`=owEVBG&@7xfs}&JAk5sOyO*;gpnU+najIiCv;f>%9tC>9# zH$v}+;+JV)k4eHhfpuWzIrKQLR{$@X7@wBZ8v8gB6*&7_;L<7EtPgf6+Kfb;rFAKi zlBD9DFmJ+4P5(`@%{5Zssi< z2WIfWst)^;1^36JIUXM7gW{8%YM?C!HTi^5Jx(4B8_YzC5wYI}gGPZQEkH}3F( zIL7s>^VCP*lfHz^EQ zwtp8X(DD3s202TlVtbakyR?L!D0wyqQX`anXx}w8+wms$JS9qu&_OGj zK+Qdjv&i?wiZ_hu5QZPhpTXbXG-E((N<5;_w1^0w*?^_T{j)fJ)Lk-TezgJU=PkI9 zKgW>u^?J2XROpqGr{(HK?OevM4ep zEo+F1MH`mqzpQp5BFMYb`>_**U813&KSb1DEXPjb+`IQe56UdvD7y|pKm;8yk&k*Y z8zE@p;y+k}#os)OfGAg#=?bNKTh4GiV9svHJMtS$*VN8Qhqr$l!}(NQi`%}QKsG?B zBHV%+m4o$R8&I$>eyyEwuWW23fhKppDgg@~HES00o!y}52WAb`1`bfZ@`3rOd7OEO z?T_fx4A6YCxCa9sMu;hqJaJnr?mNHPD{+!pv3x-HAQY;#*70bEYF8L^eV)DEAsk3g z==GmDgKEH)mklih%s({r1Fxn0HZurR4M6W0ZgB?-ETB_`Pm_1pj+ z9e|1@+*a3a$))*37-&+E@hXIG?A>?2TWZ??$hEweEl6%8tu*%ajA8|wrv*^;(uV9e zjpj~Pf1)*@zq*Y=a=+|m*?p-1`yG=;tDCZMv%13HS8DsTLtF7k|0Wjnom^>Ox&c@R z2V~oa0Sf7 zEpG{qJ|6R6@h?Qvx`v2pv7OrRHe+Y9l!z-lwN>IfK& z2_T5sU`K(!G18|ou;cIV|K5NByKFZnY8K^t$!_NXV?`$;j)j_^YEPYn^ZYs?I`4mR z=M-bMrP=%j)VB+31b)oS3Y374&U>icY4t7T{<%=VG$I_mW+`H#H&CZlI1Py@MxnbcZy0W10A5?P)?W?!HDah= zZpCmmGKk-6*4t{F!T_7;7^Pl_c6)0(a$6=WR~eI2@SIzn+JnVboRV#yYMt7PF=5l8 z>nX z@q=U~WLCESlYS1{U>F1dc(~@?HH1Jk%C?1rO3I$E7))p1+I{ZPv6CP5-Tg|FL7!K% z)3_ms?)^#WS3<1GQJ#@gLv)1WC+h(O*rb!hQTHZAE_=Vp?=v+w4sH%Je_+uD%GZ}V zoCkTzq#ET>xlV-oMB-VUCZjG_tOygh5v;vjSDd4D?o15(s#lirZ+SIKNCLqJ~Pt&6btV4^3(<2ce=y z?xUae5H&M3(%kZT+gM!d_~cq9tXA2Qts{M(qZ#BWhPWM3AiQY2&w*|u<|k=F{K`Rc zeK8i3G{#|tR5=zw%(c`#S!679y2u*=l7!3WeDoYL%lj?-m0K7R% zzE1Qyx-*th$WrK03un_=h(nj*hXz+&iE4>rz%ofRolL43040vh27F(HRw5crin=Kt zPtC&W z2ShyW{nz}|Cki0f`luff;V>8ouf+5(pIBte{BINYR&S*J^ECmW8k=Jz06{7UVjv4? zIxnN>&S>hbad8%bBw>nzl~uW-Y|yMueG9DkzJjILOT?p?g)d=oCwZjG;`p>_tzuO88ke?fiRO?K8_GN)4XTO3AJYwlqBkUnY8%wrpc zWG5<`URlFfgPZFK{ zkiv*m31_RR5d=^s&%$Cf92ocUfI6@*(3J*j&>uO);9NM}#P{-~ijg(&>i1fL;zW*@ z!V|kunop~0F%tO@jN_k(P;|*DaXB4tcl(`McEu$J?u1b7K;xZFZlLw5M0iqD`!!Bc zrW$pV9ID{nby(XV3(3nT!!d4&K= zjxc7AsT*~whNp#jP7N-Yx2pZ_Gzn^_{Ge#LiIpUqe6Jr>+HY}#>t=3e;qK<=_nU&e z3BQKjK5}$mpy=i7c8|j&F!NWF)tZNFGb>b=Jq9P;ovI$c^r$uiYbny_qCDU@-En|g zQ&%#pTw!lLn`DSLfW<1QgyS7;?=~BgcDa4;YKC>fXKVZybaf8{#uBDnVdB_Oh|IE- zh-dwsjL2^51Xs%Vw_+_j`7TgYm?stlC6hOo=M!Y^M^QfY9M|Al_`D1^LZxP#VeYd- zsomxQ*Z8H*;ZF=ak*Wl&LDqV??{XE9NJYvnRJSy2?~gE6*!1}m4BVurL7f}dw2l}8RdO7^4tw)WlJ>nCLiIlb_?5Rb^kyLyx5 z1KQO9a$U4Iq@!-GPsm!-RVd4*Cuwj@DI)+Iz=Lj1ATDDMcl8k`Ue&OfFQ&m~ycT;k zV4e4Ti-`~_Ru02jTLBSt{Q9hll9#|NXUdg)=W?`c(8!d#jq-Yd{njH3PibV{CyHh0V@KAtSZxVGct(>9UP+}=ZujZr-bINRh*%|#ah0p_Z z*#<0={-pr$dSxJykb4D*@;c?b=OiM>#ZBfZ_%(JzGKcnI&0IEO3{kP2; zsTvnk#e6Pw_ad9vTWRl_`v!bTOHC&B3K3*W(d_&aKiL>08z70rTU+CQ`_m!1h<%C#b2>thK`L z-V771%Q6BEhw{*<^19)kQBt$_&GCqc`~*pTm^b6v#^K3tR&Z%JoYi~MumwfK`1=G@ z3rDk!bVSTjA@^asiaq7Qt8&SXV2%gmM@UPQ4&w{-uvA#LVW~AqnXs|%hqFr1$E5hT z02d2aEo2dw>zIqcEex?!^Rr6l0ro1M`;E~{Wb%_dVW-Xr?37tGz{0x4n(x>2?kLJt z80Vp=`ZXBn^@Uks23VtvGkU0lNyBoZTUJ1etG2Qn`U~p(Y4S+q~l>|A`%N3pcY=Hw~k(}F_lV7Jn*UGM+kKC{R`kl84xEij?Y z&Kv-AxtII-4&K2?L|!A!3nx=;3f8FR8)6~;W@Lh5N7tE*gb*}poCZq!aEcZsjU*2> z&`8Ik{XXzj*^oKD6jUx^y#b`G&pvzu%X-b~kZSYPln{k1hgb^o<}}LLvP;$sc(i!% z0sKpZFSS1gN6v&>M7;9Ys8AlUT(E^WM4z)JbzY8I#kU69q{lUVHksvSK}|ExWtl>q zjY<)-tL$ea@%8UX1M0E>`ozR^lSWS_k}1MihQZOxLZ-Ydh#c}%)o?sUw9L!h*v#j> zTqi;`2T_`Sf@&RE@uIBWKruHq%p=%o+3+u%?M{ z*+`qT7@1CqX8ro?`Uh`u zdSM4KPjg=DS-krrBUs-Uk{eqn4Ftgvct!3G3D2}U%P+?IDPUNvL8ucMU%|q#E7aX8 zok^Jdt7hpk1iu(uqg2&)f3ec@FQgyjTTy69bP8vS9FXjT5z9SY{vIO1yJMCOx#J) zXq?X8TF zHR9{Jwka1QlYqCCx|)4FQ`26F&rv~m%h?a+RzrDr&S!8L24uig7H~DfZvO121-wg0 zbrHKxKq=FxD|h>lAFzZsOm3vD&tOMQScgdm@i$Y}pux|_?$@B1YW2g=c*Z6P79YdS zMJCIw7Q1FNuWu=0j@Ri=HR<0y$NX4PwCGqIt{1Q!M7|2oo9R_>#LztC7oEk zuT+WIF)lG7ULUeWPmp~gq*nnS2bE613|Z(5|2bqE(d#RRv<;1XT_zH(^&Y-lV4biEEgBS zwq7x3zcvtrfy3)Y+zQ7TNo{Qub$*Ie>->-v;@H>-aOu&~dv^GsCr_kR9m-uN;jxTn zt9+ayd77W$GLSw;sgUE%BY0T%go#nHecE)=Pfw^fC2zJeX7Q4#jC zmB)nGlzs3U8lFu7%;h-6HeKjvA1%fj7c9f4MZxma%odQVTvJzC4omh}$WbVoF^c7I z0kW8*qw?*iiJp&IJlwp9D+`@c8vIJp6QYSg&+m*U z+5<*}SI<{H`%A@7L<$m%P@~k=z~81;Z@|Bg6u2nq)#|&j_b+Nx38blfZN2V^b;1y3BE_Wr=&WUUz3R%e;hl-#@3X|k97N= z+NQ6D0ROK5YBiP0O4$U=*B)EGGgcwC_D>w)>~)S#LJ~CD#>hh(tNX3tzJ~pj8fhRv zX<6(b=K@e-8(?%)U^agu_Zm4jlJ`aTWj4CsN+8bQqTrDnV7O=adco8Ak!W-ja%!Y5 zkt8E4{NPX{Smx3ib5}PiGE8!yn|I#_ae4;oc3F>aiiYE4KvXy0FHtD1YzNc{p@HRI z_*S)z)m(#_pKKKNv{UaAEdjL)fKkY~+wQ>14C+$V_(d!ekU1#!97{LBW{B7E1h8H3 zbr0|&_{`*-zRkEtdJNn=za09OW0R>l!hlcPxWf&bjZ%_d2TvGk7h6y{SV>V} z!T+F)95J{bSUExkXry|sF1WAss#u>(OG6GvVXc4V%xjFPGpx7y&!{A^~i6yClwQ&rb z^`JWM?yLgnxT~6zfzU|-tcCp6>;Upe@k!EP-c=)7#)`Q20Pp;6D;ktL-b%Tu;O5^q zhC6G{*?Q;`H47Rk57r!Sy`+tWag1%wmRlL1eQ%g=3cmn02}{|(-pmM_`$2+5I}7M| zVee!^+Ek5(`a{3~00000000000e!*2v1Xm7|CSi>gF*MzsPX^+02b2SR;4DKy8e-- z)CC?9p^5xA-2p?CAx`_vFTdn`Ip)k50gJW!B_(-}Mb@GeUjNl2dCRjO{e44&qPMSy zMM_@p+$94R8(B(2-z1~Yro9{K&hPOG?@hVV{(>y|aJ(Y&4#cd)Gm+qH8E&@hjGKWF zk8S3lKB_Vukd998`#$~j`&|SeKTuGi`12&_N)Cuof#D#>4unEpc_Wne1p)1x&j5D3<|cXO zRW84)28{KFOI4Z!LcyyPv9;ttTfdMZfk90-lSTWYE4 z*3fWPW0ooWZV@LKzie)JuV$vqo;A_yv|~iQQtKh5`dYejD^f)Gx+mI5+%V$CB%R^? z_Enhlbd9Hs1hO&eR&Mbr8+de4z`6u?=TX`uJC%UEWbb-S^48CI@+Z+oHZMzZGrIk? zX+%vO9#1R{`OAC1oyFMVXpy|XDlOgWH;ZV7ZUp4jFFJKY&&6l5fO{@-gW`#yaGOo= znn}3AjryL?`u1M)hz5w%cK3h=b^_cyNggj^a_&BAxH}sLvT+^X(3o8kI+7K1Y>JhWPfvPmo{9SGYd#Hj;+1gQ!q% z2(ua;e>`FCTWHX3YmF__-ugxHs`;)Nx8f#mw^S6riZCmokAGOp<^2$a#wLDHF7|nl zqcLm>-h^=$qI!4hw83iis{LehpZ4N1V_y*GN%;JXn(8GW&>#T===2`%DKZpRlROH| z43yfbnRWGG9$5|9Za=&c)FeONTCY`C53fLv+isfY8`DuQoTnSh0PB+VH#@i%4PdU0 z&3nuF#)q(;+$lK#lTbks7#M#RG-6y1R=&uEmqLObUK>x3^Xjfa(e51xZ8`qOYMlt7 zN9n#2qX!W8O#V-mdW}^;V(pXk^(mC*abFw9|rDF16IjR{B0TcTEYfq0?m$ zm<7mgtjdaxP#7sWLADmKi`j1HK2k8|y;Kg)sn`1>xW2F^Ej6c#LT}lFrr-toNcfmH z)y6%F7S7&FuN%z3@U0mY>hxt;5WW;qXO}be(@_@h0$ncn%u&y3px*0(wy`@4WLOvp zTjYsWzpJ?0Va^&Pk57<9mhU=l_EsZvh=s3qWPUH9<;7rQexT1XlUKV7o4X~Sx`5_;Bzat#s|Hb=5N&zL!1<7eDir%h~Fr;AkJZnnT$FO^&3!{ z_h1O-@=)0wtEkQ<-j?rm<@uslx~^(-t{vHc^NLX{U4jX?&(eZqGI5rcqnTDjxu!vL_OQ=WVib5Svu)> zgXCRn09I#0KKy)pj{sMcbf6FcsATjFtW@DQ8)GlRzBQb|Nax#|emT}75#qlRz6hB( zaJpFBu(G~^j-i&gyQbnqL=N0D<5g}wTy}wdb(`x{1S*S27bH{*R=3wxgb(RrD_Gv| z?^S~A|6q&wm0fHx{#7^%yUqTiJ(x}|r63#cxNMgT z=KTqRjCNV2?4*bJ+~LpZgSF^0HW!!-99{;vqb5!KO>upF1Hf7(2y~lA{T$Mztm>VR zw>56Is@3J{In@$LDAR|){ZhEL13uE7|Lf_9UeaT%7QS#trg5>rTmH% z81dJv9r$&BI5(>wv?XwF{Q1Sxeec;$o?tA}6KiR|AYkbs(L$@Tmuh=mlZC2PQ@65m zxFlfaVTBRFiX=lBdSuGLr$9j8e?b(fAk8>1E$xRz*mhcQ8sd@&^A1B5Gu>_k;qE;& zsk*Tj9Xd>ZC1|yS6|QmzHBsSZYi*8xhxhPIL(6qvQ5;7vgTQ!wj-nBr-W8(>01jD} zZ#+(NLh5DT=~rG}C!+&q7crn?k4>k!ZGiMU*owXmJaXBNi{Y;BUWiP5ar;M!PlF+5 z$%61r{zuiOOv=Xo$TS_eh$6H&p}dg`gRJx=N4EV`PZ> z^US7SwMh+4keKpx=yjGv$t*#)(hzUD}uicNNU(H<23+`SSO(Yu#V zdC-)YFuzJEFD>Gmm*UVFI?x!YedTYGNsbFF;fEd9CJNFD5A8_8K8oLfsH|+Md(s{1 z7Nzb48}F+$ojvT!1zn%kkV#KhMI#h_)rP)^t~u>)r(9d21{6FWq10tbWh2tMw!KyAHhRXJ4wlu*Yr8=!dQUGQb1MF{0fH@Eu!>z^LBC@=>wfiN-3j+gUbsYH)Jz`lDcb5kGSwp^W^slsPcb9nJ!KF@j zMEmVvxo^0KtgqC0xD~nGJ)1Xh1@{Z!Hg=?@#}+v7*f>PHlf(#M!|J)9pOB(JtgN2* zy8e#kSxa~PEER@qo5@Jdh{35sfENX>8kn8A&DU)=u4tpbPcD8JK2ZP=Nj=loF;puH zM{$n&6Zhm#c`ZYu=hjG?phS)1*nVXz(K>U@ggaGQ0HdCCg7-5N4E27JY+{-jXlXa; zR>=FRigQ7i5;TK^$?C>#`-nElnR)*)xTO?Gn(q$O2HTcEf+dc6foYz^O=KFjI@qH! zs|Nswi^3(gjItm#Rwpd1$}uFfuWv{3MIn_>a~Ad){73{o13rt0 z4fGF@%WGi96J&N;dg&!H2e@F0ZXA4zD9Z>wqf1ib+`LHP%#3S!!o(0t7X#WJmN*-l zlV|MyW*e`#BJF9`c*4EADlUK{a~gB}Mf@C3IV8Nf2{ ztH^(yR%^OB_Hgw93ym$htbq&om@2`SYCrd@u#k2LO=^x{G4c|*prg=Oy+ZX(Od(k2 z9ezWDW%$Wn8o6E%W&=SJ%ur&VQw}pASZQFQc@q!1W$mQY4&V>ztsB8p#mM>lQnY{o z00000QsORe00002>Hq)%`%3@-01W~{z@uR-i6RW!?3&l(9d9hRI6xsn`kiM7b)LQ; z-+E?n_EA$gx#P9-LnsZHMBBR?Lq62;57Q>ssWd{XNuYXYbMZ<0Kb`Wv>tRF|uIdQo z;FljsWj%OQfE)t`Oj*`*4lcB-+^6oDDYo^mwGhx`8x2NI$&Sk1^DcB}G@AtfJ}gN{ zKa8o#3j`l#Z=#{>x9g^Py46qW?VHiN5}MZFB?MmDtE=9>h#jI`uZi!ln^M}MWy(kM z7~LBgO-q7>IoDiHAenH)v}h^09>E8gZzDCyS=^jdRk@vsJ{u__Fq}{?|MM>-MYN8` z+bPDD3N+;WO#NNpUau8SE+o+LK}m@!N7|=fK9_Do1<==TJeI(Kb(d^rNOOy?)C+b} zllmRRots-y3g95&Je|#r@|!EM8A4AF6E%@~RPsyO9P>iatQ=+PY)kf;PXcn66T(Nb z+A|X=SwShYWzPs(N^fy_Ksi}L>*o+>7{Npku97S>bJGwRo}i_z%{IPrVPK3;F4GNx zto;TeDDi~?lf7>#;Q3za1qV5O@((3qTpV`|F4UBckT7i^HGaEqAYmSsJBH_a*nzp) zpUAakwu?^t1ni^}KD#P2j+WlvAweys_b`!92hYVyT4J+9XI-_gTG4?3vlT!E2Dd+f zeQQslQucS%agy=L!}pa@fj$+^d~g{F{Psc11Eq;@hXW|)c}|%!CEd7gi6YIC>u=am zpK`|0CnENMii{pW-Hr~vULYJ$Ei|nrz|EEb>EB_DWu_fD?I6%#uUldla3xSvU3jH= zhl$}+OhgRDoSCouN*hADkbZzc{ zsacN!jw8+O%P7u1+55fMGxMlyV%BHQsB@4k9W&i?g2eI;Q}`ri`43{8l6$*UJZREx zVg+{Fr-Cc8Q{{X$M<$SKQ4Jwh$nUdzBr%wxtSCR3uRkS^T7;eBFp=~!FHC<7xH{sP zpp3-}7>ExuA83Vq3(s;}7m^Qh;NlhR2>s(fYjGc*X5Q7SCRZQ`QvfQ8P`F$>ZzlaB ze_HO|_z>q-JwpR}z}lf`n5qTu$aK$kzRU$Lw0 z#Rp8}tnjlVuxHfTq4;y8a;Sau*WpS(B%$ws^i6K$2*0`>xtK>VtMn&0d%wRBKv;u+(@>#+p@E0Wv}`_-a9~T^`M?%iN_PJ<0IMCu%Mf_ zeSfc(Xw>JjKErSa%Y^yM#kd9(fXc#WoCfbm?d+Ps%|gywP|s|5Kbij2ykW|q*dK{X!9{CdlK zfvR^yW=m;yYjH&;;`=5 zPE5H=c3v227HHcNtFasTggj(C;=@M$=ByTq4$aM3??3M~7cF8FLfR10 zA^@9h^`R{8yxqley3o;M)(h{n!Bc^p0!X3|M2~;EyEl|Ab}q_=q*P? zb;T8`}tRnPqk8W(Xkr&V0?WS*NJu8V@zMy=+oM_Z{VQQ2yJ(y;f zobmC$7{tuv_5Ox4oR52MEW(2g;|3O;0_x{7y(r+=R2IuC&Y?$vsPkf1WgRk(z5`*U;Fgq&#AS6mz2DIT(SiT(TMv$(^Vgg$VM(Gu~q>4h?H6NrtAH4`n#??9y25{7{Q{j&v)U^xnL z1uUYzHm`0Q#v~g6LhiVng1G1$KUx%-Sh)%qLZH4u&;Yfx5Wyn1AMra&%91+!Th<+^ z?>qjbY-wf~Pxg`xZ(oD2F&K_S7BJFUu242S`=`Nq(Hbm z9@p50Iy+Ulm>ib!D% zU(Q4_??LMlBjD5>M&pjpDH<$#L;1nkXcGkH5H}F!i=SbM`PxwxM9^3BC~`=rdhYy+ z5v^G2&>t42#j!8|>Ol>ylf2U+kSV!dw7-JRfwjVdZ-^16J_{^PUD*t-Ls}F#(KRT= zY4=2dg-+FH7wVesED7C# z6jl>QUjX=FJ|#;JtDf%J#T;UtmSk*pL0Ihoa3_mhkQ&IM=jMrbI)+tjS=6e(^UfwH zQAJ}FwQT^azzHs8XD-!qgd?8`IBBXZvy5jEKpm8hn^7-;+sL{I1~a?fu+n2Wn7jcu zjNz!~Bn^*F*<;|`+2H6%eIb0w9@c~{ocLm6z=T8_R~~C5knnt~M75CQ)zKrE8i1p9 z7b#4|rZ%nr#?TTw9BoqOJ}rOk-=-_n2XuJM=dekLG+^06(BUpxKhecjB6qGHk?xM1 z(X)+K)dLXzYV=1vI6E}&bQ&8?)T##^4oRqGaMN{fvynmV`G5)ZmXVjW2trCXsu9>X zYu-mh91$)%kWW{o`7sxU8o?2qq<)nLY{;$})U%*D! zv4q|GE+~l%^|ycXo;%s~aM|Jx@-i+zZ3`?Bu#z8F!pM6Geurp`FjYB}X`T2-`nE+! zKwOb0Scl9HcL6JB{HpcMGQq(%oW5vdSZ8ow!edz+iq&|80w{&3o$TZAALGgiHpH|H zB#&b2hhSiUSXg2SO839l!tt6TU=S~Qq0k%@E}D!n%vPK^umGHq#4GJ$?Wg;gN^i3T zAN3%ix0&`8EJmTSzt&1iOWW!I8u(Hn@O@pH)pG`-6hhJ~c%Y<9hPq-HcfWG24T881 za&zzum(bKTE6VQTuD0=z)9yxLAkN4?_)?DW2EM@EUaE>=Lh?5-UU{}m3~jEt&Nn(v zMFgiC?8}1 ze2i64-U(V}wYQ}3uN5eY9|-JH?w^r!;+i7$&vtDLn94d_^kfnOo<@~*XH|8dA^KyH zkOkwvKmY&$000008k`&(DRhd)ug<~QUM;nxmgn+dPVug)0k)VxSuXS);y01F@joSg>p7gXTk(jV|h4OEfSxHM;w!ITKxxNImwRf<`W$3&8cQK}JfW z+;b3O%#*Dy%%<5ng~>uy+EDU`DO+d#8Dv^kx$yV#;I9s3*XtMmp*`(e_Hm}f9xq=x zq^%!ltb2hK)+{69|FdStZ-=(k(rM}WZ4<&*Oc{bSk>JjGXp39M{@;9*9$3YgsmoXN z6F$FdyL_ZGvL;TLKq{KzyRQvOxfWPohzL=-RmF(;a@-d+B?s6ynXokTLUtDp88}O| z&vj+7kc_rqx94yHnTz6=oxc?@QhHRhfaE=5YG893z77@pF@%W{H-294_>jQC>j-?h zy>eg&@mypB78<&P_qqK$E_HAA0PwKv*_g2hYE&Qz4*gWRM4g&)SuKS2H6b}hhNw-qjZ0lY zun~I|F-Yl0FHvE_JthPt7K3-?GxZ|>lf91ct8+3zo@sZ#OYNB%NXOsTk$2!gZn#>B zD;V}05Bb(NP~mvVJii^dDYoA5;zh>m+gc~Vy{?`FUhjfus)z2km2WvB^Vq4W1^!ko z)b?0Ecxim}U@M*pw7k-J?^!fLA|=Ij69#>F3ta(;17a*Wd)6yTjfW2cHtKPVz^eov z*VS`uL?W2vjNo9wmcl^O4RhEpn0ldvcSmmAL*t3;^^$>(6QbTS|@`2)waH1igS%OWXxzs7hs9vMl#s3!Zdas>7iuS z2Epu!;0f_^65akx>=S%oKW`y?q!jy-g)XSW=;l3iUydf|K&X^*FYuNd_(}PNB+r;3 z&`%_Z&@!ZER9d$RcT1N!Bo6$m_>Pd-XJE|<9YWHpe}X_o8;;aU5a~icbcRftEV0DC z)iddwj^@8`nrJk4^$nWd{{*6^5)n|lVeKQ>yX#%p4W{QCn8jf~Jvb_wTsHhP;K4BG z%D**m)Fb8hO^et?#hRUTvoyAh1PSRogNzSs_zk{C0xWH1gK31zxD^ySePAi1E%89n zXt#Q5znaVvXmK(jNC*k@@|K`LD)L4#6!w3)qzan*i$T*nvA7m}Yqqnu;qBN7IsqnK zHnX@9u}h7W=o@B<_YkQG!pa8Ss?X!n+n~!MTvmSxA<&0f^>MDB#uGk=c=SBo;XV+R zy=}yDXu-)3WG$DF5^Mts$KDXrvOSIz%PRMxL=R2CplI%50vR@eVWybC0VaAYjG^DK z0)=24pp7gD)*t=P-N9p42W1Lbwm@$hu6bhFKl-6^7DY%}kd?g`Uy6(ARN>~Lg>g3p z2l|{Lmo)$Ual+HS>Dzr4t-5vJjZn$3G`1ht7cL=zKrQrX84<#nW90WOsiWeJ;7jTN zuR@lKJ;`Zk2L+~#3@co7v@#7Wrqh3R=<78dA`3sS8`l9xAND!_=`K5Q#*In42A?nY z)M6HkZkb*#Fg`1xB~c~$R~o=J)BKO_3zYtHW1i1mv0eSgUj$%F-&c10X$)>%2E-&4X)SVG)Z$8F< zJ|DIh=J1|1&79?<>%w$r_zM^AgG}WIVC+^~d9a@>7Q3N1&CW(Fuwm$s>1K-Irz)v& zU1~V*z+UlP5}YTDDF!aDQ!YSy!Ya(QpQ`J~rmMGUv#@n_1~|6XZJ?%RLi(Q+y2Z$# zma-AL-*sKzqd8Zwxn!W_iC?sLIo$NQi30qEqZz$ZCY>vpXd#Pglp;j%NTjan(k#-b z@UC{WG-_KoQzby3ie-T|cF`BM(B{)Y>WnxW|1^X-b#k3S&p5HXv(YMd0mu@h@r{$0- zV!Y8?(RSXd4tFOiBZ(sqEarTS$Xa6=V_384tr-u%{Qy8?Zp^fM7xas= zj5nOu3?@A6^A9r7xB3Mt9@-+Nd@7|+4u!fUFZQ9X7{PNO{-nLfvlX_x^M;YHj@ZKe3Jk!#{WIhc`lqh@t4`{NU!7LEXtO#Nwn=?@Zq|iW>LbBIo)?E-qBZ$9k|`PJ_vG&Tq0BwX8;=c3QL|~GRMBn-gO}8e z%f9>y&b1h{O^eir&i>ixQY;QqR`1VQH7D9y4qnHk%!5?F!`snUj_%v7W1peWbpuTU zu=H1QkLQyOjgNaxE*wwj0&n=EL(&$p+9@kql42W2x7l#_vC0ZwR?1T?f$l#_;+?7& z$w9CQRJT!%O2_Q*uOsV>>Isk}`5*gwIq|KU;&sNh!`^GQr{fGe$OK5s?Ous!MyX{1 zgb9;E#MGML@|9x3-f)Zwt8~K@c8M0X#C#ja2lC0CyMOfC*8K?HhK|nOxuv?pe%i7T z{`GZ}Kzz*He-P%E(BK8yXW@!3+iS!8QbY-(C{RAi!P_J{25gc~@()`VZ(4c=5&60m zg)7By)B^$(UW^>#a_vZvr?v++ZKe5pD0L>on(mm^e@Dg^d_lK?HSQ_=IM-DE7Fsp# zL&`O20GCajL+^Bg!itd@G9gY5=AtbPaMWt#)DU1uj2Pp0N|0xFXp=l8)Nm?sByHV$ z?sshX{y;W8&A!p(To-|Y;*hc9^v6oP2H#a#jJ01+pVlnzXIQ49^*DvI;j1WwXnw6a z?f>|5z0TOLbde7Hc;PWKk^;OAZ5!}xX3p7n8l37u0iGP~O&j!A7LKumSgGt!u5^%4 z$uFd;7=XinGyo+8=aMwf#E<$8_2)pR5y&;;xSqr48F#|$dAf4 zeeS`a#Z7F(TcQ@+Tj=3ELIYNm(cx!(8+9TIL81#EciF0prrFwB#N5)5J09wO=R8z% zPRSsuV+aLAJK8OrnX%32%2A(^P|fcsCIV2Sb{Rba=q`~R=qJGr#0&EQSt6IHD=twa6icGjp`zd6fl_xcr+U^edu@(rcPT(4P~ zc=;RaqI}NO9^=f6 z{|CNK@}M0+ADClm7kJ<}kq3+6V2}1gX9^1iqwhA{Z{(%{Y_W$b*bE$15s}YkLQewlXRojf&B96g$3RSICv~HFWZl zDO9$Sbtsx_Uf4nSd-5b}950T8r9|Hl_z__>Zi8JxDtp5>Kg6yQZ^sI+`S~K z3pdLmm7>Je1f8<{>8~b@G|s8_&Tuf8zMxwMPrNF+f>IY3|NeH)+HDWDfw`AsuCQhR zbAP^~8*0^mfu9kqeX+9g)Dk4zfhlEvs=yX?r~*=Qg6`RwokZ)1S_w043=n$6CCk!q ziExHD1Vq>bDzMf8XIdDC-gVrACzd6$lN6lLG@Vz(Q7ZAs9Ai!nNS`vP^gHWPsQXCV zdwXQvc+7Kj89C@{H1dRid<;@80QnedC+6_xJ$;=A`b-BDX}w(@Vg%up!f2NAXx;i^ z(cJM)!EjP@9%MV?#m97xi)mYo{%sdm7Mq*wI`X+`J4 zAn8>ZDpLaxsy?Yi6hR~$7O|Hy3Y|aB!*PwA4Gs2S8=ik%cU7t3gax5H8kC603#PTo zNFVbn+kk7WHCk3_SK+cu0+j?CKg=camlE)9pa=QJ^KzZ5?6qw?lSpouZ4Tp5J&ovm z7CAqdmbVh+eGln6E7JG{j)@u0-?>p^;(J{fa$zm^q zQ1uSe#e_~8Q!aA1%h2^J|NEuNIa3$wNg^4|ux&Dgu`Mg$Xh(9XM}?M-rU{?pNn4k65|@ zRtImqJ)yo~L4On>)2lk4N`aeGh4*Txv*nf?wX{M6Z52K%5KhU>HW%NW7*~<9S9SP8XWtSHuc0jDwiOXBf@?fU_>&u~ODLG_VWmJryO6tP9G5+9J>hpo!6z zblqkRrd^kU1G@%GpoER{wDv@bQ*E(thN~jN>f~urQL0|J&i>oesn()sfoPfFJJ5E>l(u43zvZ0NhgpcV)dJe z&fFkb2IMLr45=ssh363ikDxEnyVeKyM&xqdOdj+FD2Mw)OylD_vcVO0aHp%vJeDKZ zU9*gQ#C5v~xnX->t})$I`v2KR^{=2{O9y^zi`l+UT`E7&pcp9EDxaG6cBunFP-Di} zk(NoE0dDLm0^?FV)T@*-m18i;gNoiTA{|?|n#|*0ceVq{Ozqf-<{Q!B5p}5b@(TfI z-i2{LtyfqrsgIa=vm7%|l zuMaoT7BC3um;K6iuQ@-L%08$qY>GpETsG0$aHY#W11swRLhoSA0E+SU8RaWHDTG4&Rk71yN_@@5wr@XE zorvi&N%{tSlP!6;pk9S}LrZGELZj_*Y9*n)8WeKX`M9Gy1Qe-%)IR?K(=g9y)?IHi zSQ3S0x|wLw6=rt6Afn17&zxCPe+`SN0gexjp~eLa)_fp%fSe_w7kPblw`5t18I-NE zq7%d48UQp<)^rnra1YK;_p9H}>1^5X+}V;Ik$4hPGjkkM3V#YV8nxqCLb*xPbftO#XvXxOpE zsJTosA|Ya{nk2;iMn0Y=!#vQQ$oMh8|ekL;ajpnUPGGo8@`2yi{~jE(yNPj|1;Pzf$jg2g&~0l0DOBL3MM8n3DlS78?=6O^7+f;j49=Mioo0-&R( z;cJNczPu^E^4euQQQ6cE7|B!0bRc9Gpb`KV{JKZzL(O*%uIx@%p5#Sx>+_$gk5>i4Tdi7pIhP*C_T&h;e=<HgLNTEp%XY}Hde>h0;4R1i00000000008EZrW NfB*mh00000001gFuyFtY literal 0 HcmV?d00001 diff --git a/images/Database/InnoDB页结构示意图.jpg b/images/Database/InnoDB页结构示意图.jpg new file mode 100644 index 0000000000000000000000000000000000000000..141e3132f489f22523b659a14db7b4715bf4abd9 GIT binary patch literal 14482 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 literal 0 HcmV?d00001