Linux Device Driver && Device File

catalog

. 设备驱动程序简介
. I/O体系结构
. 访问设备
. 与文件系统关联
. 字符设备操作
. 块设备操作
. 资源分配
. 总线系统

1. 设备驱动程序简介

设备驱动程序是内核的关键领域,在很多时候,判断一个操作系统的性能时,主要是通过现有驱动程序可用的外设数目和驱动程序对外设的支持程序来判断,例如

. 显卡驱动能够多大程序地发挥显卡硬件本身的性能
. 网卡驱动能否100%挖掘硬件的处理速度
..

因此,内核源代码的相当大一部分是在致力于设备驱动程序的实现
设备驱动程序基于中心内核提供的许多不同的机制(这也是有时驱动程序被称之为内核"应用程序"的原因),驱动程序的结构通常非常类似,并且与设备无关。我们接下来将讨论内核如何为设备驱动程序设置并管理数据结构和通用的基础设施

Relevant Link:

《Linux Device Drivers》
《essential Linux Device Drivers》

2. I/O体系结构

与外设的通信通常称之为输入输出(I/O),在实现外设的I/O时,内核必须处理3个可能出现问题的领域

. 必须根据具体的设备类型和模型,使用各种方法对硬件寻址
. 内核必须向用户应用程序和系统工具提供访问各种设备的方法,并尽最大可能采用统一的方案,确保程序设计的工作量不会过多,同时保证应用程序能够在不考虑特定硬件方法的情况下进行互操作
. 用户空间需要知道内核中有哪些设备可用

与外设的通信是层次化的

aaarticlea/png;base64,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" alt="" />

对各个设备的访问,通过层次化的多个抽象层设计,在层次结构的底部是设备自身,它通过总线系统连接到其他设备和系统CPU,设备和内核的通信由该路径进行。在我们开始讨论Linux内核中相关的算法和结构之前,值得简要看看外部的扩展硬件通常如何工作

0x1: 扩展硬件

硬件设备可能以多种方式连接到系统

. 主板上的扩展槽
. 外部连接器是最常用的方法
. 扩展硬件也可以直接集成到主板上

就内核而言,外设连接到系统其他部分的方式通常没有影响,因为抽象屏蔽了这些硬件细节

1. 总线系统

尽管外设的范围看起来是无限的,从CD刻录机、调制解调器、ISDN板、声卡等,但这些都有一个共同点,它们并不直接连接到CPU,而是通过总线连接起来,而是通过总线连接起来,总线负责设备与CPU之间以及各个设备之间的通信,有很多方法可以实现总线,其他大多数方法Linux都能支持,例如

. PCI(peripheral component interconnect 外围组件通信)
许多体系结构上使用的主要系统总线,PCI设备插入到系统主板的扩展槽中,该总线也支持热插拔,使得设备可以在系统运行时连入或断开,PCI的传输速度最大能够达到几百兆字节/秒,应用很广泛 . ISA(industrial standard architecture)
一种比较古老的总线,应用仍然很广泛,ISA与IA-32体系结构(及其前辈)的某些特性绑定非常紧密,但也可以用于其他的处理器 . SBus
这是一个非常高级的总线,已经出现很多年,由SUN公司设计,是一种非私有的开放总线 . IEEE1394
对市场而言,这显然不是一个较为通俗的数字,因为某些厂商称之为FiewWire,而另一些则称之为Llink,它有很多非常有趣的计数特性,包括
) 预先设计的热插拔能力
) 非常高的传输速率
IEEE1394是高端笔记本上非常流行的一种外部总线,提供了一种高速的扩展选项 . USB(universal serial bus)
这也是一种广泛应用的外部总线,有很高的市场接受率,该总线的主要特性是
) 热插拔能力
) 自动检测新硬件的能力
) 其最高速度只是中等水平,但足以用于CD刻录机、键盘、鼠标之类的设备,该总线的一种新版本(2.0)的最大传输速率更大,但实际软件没有太多变化(硬件层次上的差别要大得多)
) USB系统的拓朴结构异乎寻常,其中的设备不是按一条单链排布,而是按树形结构排布,在内核寻址此类设备时,该事实就显而易见了,USB集线器用柞树的结点,在它上面可以进一步连接其他设备(包括其他USB集线器)
) USB可以为各个设备预留固定的带宽,在实现均匀数据流时,这是一个重要因素 . SCSI(small computer system interface)
这种总线过去称为专业人员的总线,因为相关外设的成本很高,由于SCSI支持非常高的数据吞吐量,因此它主要用在服务器系统上寻址硬盘,可适用于大多数处理器体系结构 . 并口和串口(parallel and serial interface)
这些存在于大多数体系结构上,无论整个系统的设计如何,这些总线非常简单而速度极低,用于外部连接,已经非常古老,这些总线用于寻址慢速设备(如打印机、调制解调器和键盘等),此类设备没什么性能要求

无论采用的处理器体系结构如何,系统都不会只有一种总线,而是一些总线的组合,当前的PC设计通常包括两个通过"桥接器"互联的PCI总线,处于兼容性的原因,有时也带有ISA总线(大多数情况下只有一个插槽),一些总线(如USB、FireWire)无法作为主总线,始终需要经由另一个系统总线将数据传递给处理器

aaarticlea/png;base64,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*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" alt="" />

2. 与外设的交互

有几种方法可以与连接到系统的硬件通信

1. I/O端口

一种选项是使用IA-32和许多其他体系结构上都有的I/O端口,在这种情况下,内核发送数据给"I/O控制器",数据的目标设备通过唯一的端口号标识,数据被传输到设备进行处理,处理器管理了一个独立的虚拟地址空间,可用于管理所有I/O地址
I/O地址空间通常不关联到普通的系统内存,因为端口也可以映射到内存中,这通常会引起混淆,有几种不同类型的端口

. 只读
. 只写
. 双向操作
这使得处理器与外设之间可以双线交换数据,进而应用态再通过RING3 ~ RING0通信方式进行通信,最终的目的是应用程序可以和外设进行通信

在IA-32体系结构上,端口地址空间由2^16个不同的8位地址组成(0x1 ~ 0xFFFF),对其中的每个端口号而言,或者已经分配了一个设备,或者未使用,多个外设不能同时共享一个端口。考虑到当今的复杂技术,8bit位在与外设交换数据并不算多,因此,可以将两个连续的8位端口合并为一个16位端口,进一步的,两个连续的16位端口(实际上是4个连续的8bit端口)可以认为是一个32位端口。处理器提供了一些适当的汇编语句,可以进行输入输出操作
每个处理器类型实现端口访问的方式都不同,因此,内核必须提供一个适当的抽象层,例如

\linux-2.6.32.63\include\asm-generic\io.h
. outb: 写一个字节
. outw: 写一个自字
. inb: 读取一个字节
..

2. I/O内存映射

应用程序开发者必须寻址许多设备,与内存的处理方式类似,因此处理器提供了对I/O端口进行内存映射的选项,将特定外设的端口地址映射到普通内存中,可以像处理普通内存那样操作外设,图形卡通常会使用这类操作,因为与使用特定的端口命令相比,处理大量图像数据时使用普通处理器命令要更加容易,诸如PCI之类的系统总线通常也是通过I/O映射进行寻址的
为使用内存映射,首先必须将I/O端口映射到普通的系统内存中(使用特定于处理器的例程),在不同的底层体系结构之上,完成这一任务的方法有很大的不同,内核再次提供了一个抽象层,主要包括

. ioremap: 映射I/O内存区
. iounmap: 解除映射

3. 轮询和中断

系统如何知道某个设备的设备已经就绪、可以读取,有两种方法可以判断

. 轮询(polling)
策略非常简单,只需重复询问设备数据是否可用,如果可用,则处理器取回数据。显然,这样做是非常浪费资源的,为检查外设的状态需要花费系统的大量运行时间,导致影响重要任务的执行 . 中断
中断是更好的备选方案,每个CPU都提供了中断线(interrupt line),可由各个系统设备共享(多个设备也可以共享一个中断)。每个中断通过一个唯一的号码标识,内核对使用的每个中断提供一个服务例程(这其中有一个复杂的转换和寻址例程)
中断将暂停CPU正常的系统工作,在外设的数据已经就绪,需要由内核或应用程序(间接的)处理时,外设会引发一个中断(通过CPU的中断线)。使用这种方法,系统就不再需要频繁检查是否有新的数据可用,因为外设在有新数据的情况下可以自动通知系统

3. 通过总线控制设备

并非所有设备都是直接通过I/O语句寻址,也可以通过总线系统访问的,具体的实现方式与所用的总线和设备相关。并非所有设备类别都可以连接到所有总线系统,例如

. 可以将硬盘和CD刻录机连接到SCSI接口
. 但图形卡不行,图形卡只能查到PCI槽中
. 相比之下,硬盘必须通过另一种接口,通常是IDE,才能连接到PCI总线

不同的总线类型称作"系统和扩展总线",对内核来说,硬件实现方式的差别并不重要,只有总线和附接外设寻址的方式,才和我们讨论的内容相关。就系统总线而言(对很多处理器类型和体系结构而言,是PCI总线),可使用I/O语句和内存映射与总线自身和附接的设备通信,内核也为驱动程序提供了几个命令,以调用特殊的总线功能

. 查询可用的设备列表
. 按统一的格式读取配置信息
. 按统一的格式设置配置信息

这些命令都是平台无关的,相应的代码在各种平台上使用时无需改变,因而简化了驱动程序的开发
扩展总线如USB、IEEE1394、SCSI等,通过明确定义的总线协议与附接的设备交换数据和命令,内核通过I/O语句和内存映射与总线自身通信,同时提供了平台无关的例程,使总线能够与附接的设备通信
与总线上附接的设备通信,不一定要在内核空间中由设备驱动进行,也可能在用户空间实现,例如SCSI刻录机,通常通过cdrecord工具访问,该工具产生需要的SCSI命令,然后利用内核经SCSI总线将命令发送到对应的设备,并处理设备返回的信息和响应

Relevant Link:


3. 访问设备

设备特殊文件(设备文件)用于访问扩展设备,这些文件并不关联到硬盘或者任何其他存储介质上的数据段,而是建立了与某个设备驱动程序的连接,以支持与扩展设备的通信。就应用程序而言,普通文件和设备文件的处理有一点差别,二者都可以通过同样的库函数处理,但为了处理方便,系统还提供了几个额外的命令用于处理设备文件,这些对普通文件是不可用的

0x1: 设备文件

我们通过富姐到串行接口的调制解调器,来讨论设备文件的处理方法,对应的设备文件名称是/dev/ttyS0,设备并不是通过其文件名标识,而是通过文件的主、从设备号标识,这些号码在文件系统中作为特别的文件属性管理
用于读写普通文件的工具,同样用来向设备文件写入数据或读取处理结果,例如

echo "TEST" > /dev/ttyS0
//向连接到第一个串行接口的调制解调器发送一个初始化字符串

0x2: 字符设备、块设备和其他设备

根据与外设与系统之间交换数据的方式,可以将设备分为几种类别

. 有些设备非常适合面向字符的数据交换,因为数据传输量很低
) 串行接口
) 文本终端
. 其他的设备则更适合于处理包含固定数目字节的数据块
) 硬盘
) 光驱
//内核会区分字符设备和块设备

1. 标识设备文件

字符设备和块设备可以通过对应的文件属性来区分

ll /dev/sd{a,b} /dev/ttyS{,}

brw-r-----  root disk ,   May    /dev/sda
brw-r----- root disk , May /dev/sdb
crw-rw---- root tty , May : /dev/ttyS0
crw-rw---- root uucp , May /dev/ttyS1

在很多方面,上面的输出都与普通文件没有什么区别,特别是在访问权限方面,但其中有两个重要区别

. 访问权限之前的字母是b/c,分别代表块设备和字符设备
. 设备文件没有文件长度,而增加了另外的两个值
) 主设备号
) 从设备号
//二者共同形成一个唯一的号码,内核可以由此查找对应的设备驱动程序

内核采用主从设备号来标识匹配的驱动程序,采用两个号码的原因,与设备驱动程序的通用结构有关,首先,系统可能包含几个同样类型的设备,由同一个设备驱动程序管理,其次,可以将同类设备合并起来,便于插入到内核的数据结构中进行管理

. 主设备号用于寻址设备驱动程序自身,上面的例子中,硬盘sda、sdb所在的第一个SATA控制权的主设备号是8
. 驱动程序管理的各个设备(即第一个、第二个硬盘)则通过不同的从设备号指定,sda对应于0,sdb对应于16
/*
两个从设备号之间之所以会有这么大差距
ll /dev/sda*
brw-r----- 1 root disk 8, 0 May 16 2014 /dev/sda
brw-r----- 1 root disk 8, 1 May 16 2014 /dev/sda1
brw-r----- 1 root disk 8, 2 May 16 2014 /dev/sda2
brw-r----- 1 root disk 8, 4 May 16 2014 /dev/sda4
brw-r----- 1 root disk 8, 5 May 16 2014 /dev/sda5
brw-r----- 1 root disk 8, 6 May 16 2014 /dev/sda6
brw-r----- 1 root disk 8, 7 May 16 2014 /dev/sda7 我们知道,硬盘的各个分区可以通过设备文件进行寻址(/dev/sda1、/dev/sda2),而/dev/sda则代表了整个硬盘,连续的副设备号用于标识各个分区,这使得驱动程序可以区分不同的分区 这个原则也同样适用于字符设备
*/

需要明白的是,块设备和字符设备的主设备号可能是相同的,因此,除非同时指定设备号和设备类型(块设备/字符设备),否则找到的驱动程序可能不是唯一的
设备号的当前列表定义在
\linux-2.6.32.63\include\linux\major.h

#define UNNAMED_MAJOR        0
#define MEM_MAJOR 1
#define RAMDISK_MAJOR 1
#define FLOPPY_MAJOR 2
#define PTY_MASTER_MAJOR 2
#define IDE0_MAJOR 3
#define HD_MAJOR IDE0_MAJOR
#define PTY_SLAVE_MAJOR 3
#define TTY_MAJOR 4
#define TTYAUX_MAJOR 5
#define LP_MAJOR 6
#define VCS_MAJOR 7
#define LOOP_MAJOR 7
#define SCSI_DISK0_MAJOR 8
#define SCSI_TAPE_MAJOR 9
...

2. 动态创建设备文件

/dev中的设备结点一般是在基于磁盘的文件系统中静态创建的,随着支持的设备越来越多,必须安置和管理越来越多的项,大多数项是不必要的,因此几乎所有的发布版都将/dev内容的管理工作切换到udevd,这是一个守护进程,允许从用户态动态创建设备文件

aaarticlea/png;base64,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" alt="" />

每当内核检测到一个设备时,都会创建一个内核对象kobject,该对象借助于sysfs文件系统导出到用户层,此外,内核还向用户空间发送一个热插拔消息
如果在系统启动期间发现新设备,或在运行期间有新设备接入(如USB存储棒),内核产生的热插拔消息包含了驱动程序为设备分配的主从设备号,udevd守护进程所需要完成的所有工作就是监控这些消息,在注册新设备时,会在/dev中创建对应的项,接下来就可以从用户层访问该设备了
由于引入饿了udev机制,/dev不再放置到基于磁盘的文件系统中,而是使用temfs,这是RAM磁盘文件系统ramfs的一种轻型变体,这意味着设备结点不是持久性的,系统关机/重启后就会消失
0x3: 使用ioctl进行设备寻址

字符设备和块设备通常可以适当地融入到文件系统的结构中,并遵守"一切皆文件"的原则,但是有些任务只使用输入输出命令很难完成,这些涉及检查特定于设备的功能和属性,超出了通用文件框架的限制,典型地例如设置设备的配置选项
一种好的方案是IOCTL,它标识输入输出控制接口,是用于配置和修改特定设备属性的通用接口
ioctl通过一种可用于处理文件的特殊方法实现,该方法只能专用于设备文件,每个设备驱动程序都可以定义一个ioctl例程,使得控制数据的传输可以独立于实际的输入输出通道
从用户和程序设计的角度来看,标准库提供了ioctl函数,可以通过特殊的码值将ioctl命令发送到打开的文件。该函数的实现基于itctl系统调用,由内核中的sys_ioctl处理

/*
1. fd: 文件描述符
2. cmd: ioctl码值,一般定义为比较易读的预处理器常数
3. arg: 传输更多的信息
*/
asmlinkage long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg);

1. 网卡及其他设备

字符设备和块设备并不是内核管理的全部设备类别,网卡在内核中具有特殊地位,它无法融入到前述的分类方案中,事实是网卡没有设备文件,相反,用户程序必须使用套接字与网卡通信,套接字是一个抽象层,对所有网卡提供了一个抽象视图,标准库的网络相关函数调用socketcall系统调用(这种多路复用在新的内核中逐步由分解后的子系统调用取代)与内核进行通信交互,进而访问网卡
还有其他的一些没有设备文件的系统设备

. 这些设备或者通过特别定义的系统调用访问
. 或者在用户空间无法访问,包括所有的扩展总线,例如USB、SCSI
尽管这些总线可以通过设备驱动程序寻址,但相应的函数只在内核内部可用(因此,USB扩展卡也没有设备文件,无法通过设备文件寻址),所以,需要由底层的设备驱动程序提供函数,导出到用户空间,供应用程序访问

0x4: 主从设备号的表示

为了兼容旧的主从设备表示方式,内核使用了用户空间可见的数据类型u32来表示设备号,主从设备的划分如下

aaarticlea/png;base64,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" alt="" />

. 在内核中,比特范围0 ~ 19共20个bit用于从设备号,比特范围20 ~ 31中的12个比特用于主设备号
. 当需要在外部(用户空间)表示dev_t时,则将比特范围0 ~ 7中的8个比特位用作从设备号的第一部分,接下来的12个比特位( ~ )用作主设备号,最后12个比特位( ~ )用作从设备号剩余部分
. 旧的布局共包括16比特位,在主从设备号之间平均分配,如果主设备号和从设备号都小于255,则新旧表示是兼容的

该划分的优点在于,该数据结构的前16个比特,可以解释为旧的设备号,从兼容性的角度考虑,这是很重要的
内核提供了下列函数/宏,以便从u32表示提取信息,并在u32和dev_t之间进行转换

\linux-2.6.32.63\include\linux\kdev_t.h
. #define MAJOR(dev) ((unsigned int) ((dev) >> MINORBITS))
从dev_t提取主设备号 . #define MINOR(dev) ((unsigned int) ((dev) & MINORMASK))
从dev_t提取从设备号 . #define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))
根据主从设备号产生一个dev_t类型值

0x5: 注册

内核如果能了解到系统中有哪些字符设备和块设备可用,将是非常方便的,因此内核需要维护一个数据库,此外必须提供一个接口,以便驱动程序编写者能够将新项添加到数据库

1. 数据结构

我们接下来重点讨论用于管理设备的数据结构

1. 设备数据库

尽管块设备和字符设备彼此的行为确实有很大不同,但用于跟踪所有可用设备的数据库是相同的。这也是因为字符设备和块设备都是通过唯一的设备号标识的,但是,数据库会根据块设备/字符设备,来跟踪记录不同的对象

. 每个字符设备都表示为strcut cdev的一个实例
. struct genhd用于管理块设备的分区,作用类似于字符设备的cdev,这是合理的,如果块设备没有分区,我们也可以视之为具有单一分区的块设备

内核根据所有的cdev、genhd实例

aaarticlea/png;base64,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" alt="" />

. 有两个全局数组(bdev_map用于块设备、cdev_map用于字符设备)用来实现散列表
. 使用主设备号作为散列键
.cdev_map、bdev_map都是同一数据结构struct kobj_map的实例
/*
struct kobj_map
{
struct probe
{
//next将所有散列表元素连接在一个单链表中
struct probe *next;
//dev表示设备号,该数据中包含了主设备号、从设备号
dev_t dev;
/*
range博阿村了从设备号的连续范围,与设备关联的各个从设备号的范围是
[MINORS(dev), MINORS(dev) + range - 1]
*/
unsigned long range;
//owner指向提供设备驱动程序的模块(如果有的话)
struct module *owner;
//get指向一个函数,可以返回与设备关联的kobject实例,通常该任务很简单,但如果使用了设备映射器,则会变得复杂化
kobj_probe_t *get;
int (*lock)(dev_t, void *);
/*
块设备和字符串设备的区别在于data
1. 字符设备: 指向struct cdev实例
2. 块设备: 指向struct genhd实例
*/
void *data;
} *probes[]; //互斥量lock实现了对散列表访问的串行化
struct mutex *lock;
};
*/
. 散列方法相当简单: major %

2. 字符设备范围数据库

字符设备范围数据库只用于字符设备,它用于管理为驱动程序分配的设备号范围

. 驱动程序可以请求一个动态的设备号
内核需要找到一个空闲的范围 . 或者指定一个范围,从中获取
内核必须确保指定的范围不与现存的范围重叠

内核再次使用了散列表来跟踪已经分配的设备号范围,并同样使用主设备号作为散列键
\linux-2.6.32.63\fs\char_dev.c

static struct char_device_struct
{
//next连接同一散列行中的所有散列元素(major_to_index根据主设备号计算散列位置)
struct char_device_struct *next;
//major指定了主设备号
unsigned int major;
//baseminor是包含minorct个从设备号的连续范围中最小的从设备号
unsigned int baseminor;
int minorct;
//name为该设备提供了一个标识符,通常,该名称会选择类似于该设备对应的设备特殊文件的名称,但没有严格的要求
char name[];
//cdev指向struct cdev的实例
struct cdev *cdev; /* will die */
} *chrdevs[CHRDEV_MAJOR_HASH_SIZE]; /* index in the above */
static inline int major_to_index(int major)
{
return major % CHRDEV_MAJOR_HASH_SIZE;
}

2. 注册过程

我们接下来讨论如何注册块设备和字符设备

1. 字符设备

在内核中注册字符设备需要两个步骤完成

. 注册或分配一个设备号范围
) 如果驱动程序需要使用特定范围内的设备号,则必须调用register_chrdev_region
) 而alloc_chrdev_region则由内核来选择适当的范围 . 在获取了设备号范围之后,需要将设备添加到字符设备数据库,以激活设备。这需要使用cdev_init初始化一个struct cdev实例
. 接下来调用cdev_add,在cdev_add成功返回后,设备进入活动状态

2. 块设备

注册块设备只需要调用add_disk一次,较早的内核版本需要使用register_blkdev注册块设备,其好处在于,块设备将显示在/proc/devices中

Relevant Link:

4. 与文件系统关联

除极少数例外,设备文件都是由标准函数处理(Glibc提供的标准文件操作API),类似于普通文件,设备文件也是通过虚拟文件系统管理,普通文件和设备文件都是通过完全相同的接口访问

0x1: inode中的设备文件成员

虚拟文件系统中的每个文件都关联到一个inode,用于管理文件的属性

关于struct inode数据结构的相关知识,请参阅另一篇文章
http://www.cnblogs.com/LittleHann/p/3865490.html
//搜索:0x2: struct inode

我们这里重点关注其中与设备驱动程序有关的成员

struct inode
{
..
//i_rdev中存储了主从设备号
dev_t i_rdev;
..
//为唯一地标识与一个设备文件关联的设备,内核在i_mode中存储了文件类型(面向块、字符)
umode_t i_mode;
..
/*
i_fop是一组函数指针的集合,包括许多文件操作(打开、读取、写入),这些由虚拟文件系统使用来处理块设备
*/
const struct file_operations *i_fop;
..
//内核会根据inode表示块设备还是字符设备,来使用i_bdev或i_cdev指向更多具体的信息
union
{
//管道信息
struct pipe_inode_info *i_pipe;
//块设备驱动
struct block_device *i_bdev;
struct cdev *i_cdev;
};
..
}

0x2: 标准文件操作

在打开一个设备文件时,各种文件系统的实现会调用init_special_inode函数,为块设备或字符设备文件创建一个inode
\linux-2.6.32.63\fs\inode.c

void init_special_inode(struct inode *inode, umode_t mode, dev_t rdev)
{
//根据传入的mode参数表明的设备类型,向inode提供不同的文件操作
inode->i_mode = mode;
if (S_ISCHR(mode)) {
inode->i_fop = &def_chr_fops;
inode->i_rdev = rdev;
} else if (S_ISBLK(mode)) {
inode->i_fop = &def_blk_fops;
inode->i_rdev = rdev;
} else if (S_ISFIFO(mode))
inode->i_fop = &def_fifo_fops;
else if (S_ISSOCK(mode))
inode->i_fop = &bad_sock_fops;
else
printk(KERN_DEBUG "init_special_inode: bogus i_mode (%o) for"
" inode %s:%lu\n", mode, inode->i_sb->s_id,
inode->i_ino);
}
EXPORT_SYMBOL(init_special_inode);

0x3: 用于字符设备的标准操作

字符设备的情况最初非常含混,因为只有一个文件操作可用

struct file_operations def_chr_fops = {
.open = chrdev_open,
};

字符设备彼此非常不同,因而内核在开始不能提供多个操作,因为每个设备文件都需要一组独立、自定义的操作,因为chrdev_open函数的主要任务就是向该结构填入适用于已打开设备的函数指针,使得能够在设备文件上执行有意义的操作,并最终能够操作设备自身
0x4: 用于块设备的标准操作

相比字符设备,块设备遵循的方案更加一致,这使得内核刚开始就有很多操作可供选择,这些操作的指针群集到def_blk_fopen的通用结构中,这也再次体现了VFS的设计思想,最大程度地向上层提供一个通用的文件操作视图
\linux-2.6.32.63\fs\block_dev.c

const struct file_operations def_blk_fops =
{
.open = blkdev_open,
.release = blkdev_close,
.llseek = block_llseek,
.read = do_sync_read,
.write = do_sync_write,
.aio_read = generic_file_aio_read,
.aio_write = blkdev_aio_write,
.mmap = generic_file_mmap,
.fsync = block_fsync,
.unlocked_ioctl = block_ioctl,
#ifdef CONFIG_COMPAT
.compat_ioctl = compat_blkdev_ioctl,
#endif
.splice_read = generic_file_splice_read,
.splice_write = generic_file_splice_write,
};

读写操作由通用的内核例程进行,内核中的缓存自动用于块设备
需要明白的是,尽管file_operations与block_device_operations的结构类似,但它们在Linux内核中所处的层次是不同的

. file_operations由VFS层用来与用户空间通信,其中的例程会调用block_device_operations中的函数,以实现与块设备的通信
. block_device_operations必须针对各种块设备分别实现,对设备的属性加以抽象,而在此之上建立的file_operations,使用同样的操作即可处理所有的块设备

Relevant Link:

http://www.win.tue.nl/~aeb/linux/lk/lk-11.html

5. 字符设备操作

字符设备的硬件通常非常简单,而且相关的驱动程序并不难于实现

0x1: 表示字符设备

字符设备由struct cdev表示,同时,内核维护了一个数据库,包括所有活动的cdev实例
\linux-2.6.32.63\include\linux\cdev.h

struct cdev
{
//kobj是一个嵌入在该结构中的内核对象,它用于该数据结构的一般管理
struct kobject kobj;
//owner指向提供驱动程序的模块(如果有的话)
struct module *owner;
//ops是一组文件操作,实现了与硬件通信的具体操作
const struct file_operations *ops;
//list用来实现一个链表,其中包含所有表示该设备的设备特殊文件的inode
struct list_head list;
//dev指定了设备号
dev_t dev;
//count表示与该设备关联的从设备号的数目
unsigned int count;
};

0x2: 打开设备文件

/source/fs/char_dev.c中的chrdev_open是用于打开字符设备的通用函数

/*
* Called every time a character special file is opened
*/
static int chrdev_open(struct inode *inode, struct file *filp)
{
struct cdev *p;
struct cdev *new = NULL;
int ret = ; spin_lock(&cdev_lock);
p = inode->i_cdev;
if (!p)
{
struct kobject *kobj;
int idx;
spin_unlock(&cdev_lock);
/*
假定表示设备文件的inode此前没哟打开过,根据给出的设备号,kobj_lookup查询字符设备的数据库
并返回与该驱动程序关联的kobject实例,该返回值可用于cdev实例
*/
kobj = kobj_lookup(cdev_map, inode->i_rdev, &idx);
if (!kobj)
return -ENXIO;
//获得对应设备的cdev实例
new = container_of(kobj, struct cdev, kobj);
spin_lock(&cdev_lock);
/* Check i_cdev again in case somebody beat us to it while
we dropped the lock. */
p = inode->i_cdev;
//接下来设置各种数据结构之间的关联
if (!p)
{
//inode->i_cdev指向所选择的cdev实例,在下一次打开该inode时,就不必再查询字符设备的数据库,而直接使用缓存的值
inode->i_cdev = p = new;
//该inode将添加到cdev->list(inode中的i_devices用作链表元素)
list_add(&inode->i_devices, &p->list);
new = NULL;
} else if (!cdev_get(p))
ret = -ENXIO;
} else if (!cdev_get(p))
ret = -ENXIO;
spin_unlock(&cdev_lock);
cdev_put(new);
if (ret)
return ret; ret = -ENXIO;
/*
file_f_ops是用于struct file的file_operations,设置为指向struct cdev给出的file_operations实例
即VFS层对设备文件自身的文件操作函数进行进一步的封装
*/
filp->f_op = fops_get(p->ops);
if (!filp->f_op)
goto out_cdev_put; /*
调用struct file新的file_operations中的open方法(现在是特定于设备的),在设备上执行所需的初始化任务
有些外设在第一次使用时,需要通过握手来协商操作的细节,该函数也可以对数据结构作一些修改,以适应特定的从设备号
*/
if (filp->f_op->open) {
ret = filp->f_op->open(inode,filp);
if (ret)
goto out_cdev_put;
} return ; out_cdev_put:
cdev_put(p);
return ret;
}

我们考虑一个字符设备的例子,其主设备号为1,根据LANANA标准,该设备有10个不同的从设备号,每个都提供了一个不同的功能,这些都与内存访问操作有关

. 从设备号1: /dev/mem: 物理内存
. 从设备号2: /dev/kmem: 内核虚拟地址空间
. 从设备号3: /dev/null: 比特位捅
. 从设备号4: /dev/port: 访问I/O端口
. 从设备号5: /dev/zero: NULL字符源
. 从设备号8: /dev/random: 非确定性随机数发生器

根据设备描述我们可以很清楚地看到,尽管这些从设备都涉及内存访问,但所实现的功能有很大差别,我们知道,在chrdevs项的结构中只定义了一个函数指针,在打开上述某个文件之后,open指向memory_open
\linux-2.6.32.63\drivers\char\mem.c

static int memory_open(struct inode *inode, struct file *filp)
{
int minor;
const struct memdev *dev;
int ret = -ENXIO; lock_kernel(); minor = iminor(inode);
if (minor >= ARRAY_SIZE(devlist))
goto out; //根据从设备号选择设备
dev = &devlist[minor];
if (!dev->fops)
goto out;
//使用VFS将设备的具体操作函数封装起来
filp->f_op = dev->fops;
if (dev->dev_info)
filp->f_mapping->backing_dev_info = dev->dev_info;
//打开设备
if (dev->fops->open)
ret = dev->fops->open(inode, filp);
else
ret = ;
out:
unlock_kernel();
return ret;
}

函数实现了一个分配器(根据从设备号来区分各个设备,并且选择适当的file_operations)
所涉及的函数逐渐反应了设备了具体特性

. 最初只知道用于打开字符设备的一般函数
. 然后由打开与内存相关设备文件的具体函数所替代
. 接下来根据选择的从设备号,进一步细化函数指针,为不同从设备号最终选定的函数指针未必相同,例如null_fops、random_fops

其他设备类型也采用了同样的方法,首先根据主设备号设置一个特定的文件操作集,其中包含的操作,接下来可以由根据从设备号选择的其他操作替代
0x3: 读写操作

读写字符设备文件的实际工作不是一项特别容易的任务,因为虚拟文件和设备驱动程序代码之间已经建立了关联,调用标准库的读写操作,将向内核发出一系列系统调用,最终调用file_operations结构中相关的操作(主要是read、write),这些方法的具体实现依设备而不同,不能一般化
上述说的内存设备不必费力与实际的外设交互,它们只需要调用其他的内核函数来完成,例如,/dev/null设备使用read_null、write_null函数实现比特位捅的读写操作
\linux-2.6.32.63\drivers\char\mem.c

static ssize_t read_null(struct file * file, char __user * buf,
size_t count, loff_t *ppos)
{
return ;
}
//从控设备读取时,什么也不返回,返回的结果是一个长度为0字节的数据流 static ssize_t write_null(struct file * file, const char __user * buf,
size_t count, loff_t *ppos)
{
return count;
}
//向空设备写入的数据直接被忽略,但无论任何长度的数据,都会报告写入成功

更复杂的字符设备,需要提供读写真正有意义结果的函数,但一般机制是不变的

6. 块设备操作

在内核通过VFS接口支持的外设中,块设备的总数是相对较多的,但是块设备驱动程序面对的情况比字符设备负责得多,导致这种情况的环境因素很多,主要包括

. 块设备层的设计导致需要持续地调整块设备的速度
. 块设备的工作方式
. 块设备层开发方面的历史原因

块设备与字符设备在3个方面有根本的不同

. 块设备可以在数据中的任何位置进行访问,对字符设备来说,这是可能的,但不是必然的
. 块设备总是以固定长度的块进行传输,即使只请求一个字节的数据,设备驱动程序也会从设备取出一个完整块的数据,相比之下,字符设备只能够返回单个字节
. 对块设备的访问有大规模的缓存,即已经读取的数据保存在内存中,如果再次需要,则直接从内存获取,写入操作也使用了缓存,以便延迟处理,这对字符设备没有意义(如键盘),因为字符设备的每次读请求都必须真正与设备交互才能完成,而且往往还要求是准实时完成的

在理解块设备通信之前,我们需要先理清一个概念,即块(block)和扇区(sector)

. 块(block)
) 块是一个特定长度的字节序列,用于保存在内核和设备之间传输的数据,块的长度可通过软件方式修改
) 块是连续扇区的序列
) 块的长度总是扇区长度的整数倍 . 扇区(sector)
) 扇区是一个固定长度的硬件单位,指定了某个设备最少能够传输的数据量
) 扇区是特定于硬件的常数,它也用来指定设备上某个数据块的位置
) 内核将每个块设备都视为一个线性表,由按整数编号的扇区或块组成

当前几乎所有常见块设备的扇区长度都是512字节,而块长度则有512、1024、2048、4096字节等,需要明白的是,块的最大长度,会受到特定体系结构的内存页长度的限制,IA-32系统支持的块长度为4096字节,因为其内存页长度是4096字节,而IA-64和Alpha系统能够处理8192字节的块
块长度的选择相对*,这对许多块设备应用程序有好处,文件系统会将硬盘划分为不同长度的块,以便在处理许多小文件或少数打文件时分别优化性能(整块读写),因为文件系统能够将传输的块长度与自身块长度匹配,所以实现起来要容易的多
块设备层不仅负责寻址块设备,也负责执行其他任务,以提高系统中所有块设备的性能,包括

. 块设备预读算法的实现
. 在内核判断应用程序烧好将需要使用某数据时,会使用预读算法从块设备预读数据到内存
. 如果预读的数据不是立即需要,那么块设备层必须提供缓冲/缓存区来保存这些数据,这种缓冲区不仅用于保存预读数据,也用于临时保存经常用到的块设备数据

0x1: 块设备的表示

块设备有一组属性,由内核管理,内核使用"请求队列管理(request queue management)",使得此类设备的通信尽可能高效,它能够缓存并重排读写数据块的请求,请求的结果也同样保存在缓存中,使得可以用非常高效的方式读取/重新读取数据,在进程重复访问文件(通过硬盘外设块设备)的同一部分时,或不同进程并行访问同一数据时,该特性尤其有用
完成这些任务需要很多数据结构

aaarticlea/png;base64,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" alt="" />

裸块设备由struct block_device表示,内核将与块设备(block_device)实例紧邻的inode包裹在一个数据结构中
\linux-2.6.32.63\fs\block_dev.c

struct bdev_inode
{
struct block_device bdev; /*
所有表示块设备的inode都保存在伪文件系统bdev中,这些对用户层不可见,这使得可以使用标准的VFS函数来处理块设备的inode集合
特别的,辅助函数bdget就利用了这一点,给定由dev_t表示的设备号,该函数查找伪文件系统,看对应的inode是否已经存在
1. 如果存在,则返回指向inode的指针
由于struct bdev_inode的存在,利用返回的inode指针,立即就可以找到该设备的block_device实例,如果此前设备没有打开过,致使inode尚未存在,bdget和伪文件系统会确保自动分配一个新的bdev_inode并进行适当的设置
*/
struct inode vfs_inode;
};

与字符设备层相比,块设备层提供了丰富的队列功能,每个设备都关联了请求队列,这种队列也是块设备层最复杂的部分
每个块设备驱动程序都维护自己的请求队列;每个物理块设备都应该有一个请求队列,以提高磁盘性能的方式对请求进行排序。因此策略程序就可以顺序扫描这种队列,并以最少地移动磁头而为所有的请求提供服务
/source/include/linux/blkdev.h

struct request
{
struct list_head queuelist;
struct call_single_data csd;
int cpu; //IO请求request所形成的队列,在linux内核中struct request_queue描述,保存对设备的读写请求
struct request_queue *q; unsigned int cmd_flags;
enum rq_cmd_type_bits cmd_type;
unsigned long atomic_flags; /*
the following two fields are internal, NEVER access directly
特征数据,如扇区、块长度、设备容量
*/
sector_t __sector; /* sector cursor */
unsigned int __data_len; /* total data len */ struct bio *bio;
struct bio *biotail; struct hlist_node hash; /* merge hash */
/*
* The rb_node is only used inside the io scheduler, requests
* are pruned when moved to the dispatch queue. So let the
* completion_data share space with the rb_node.
*/
union {
struct rb_node rb_node; /* sort/lookup */
void *completion_data;
}; /*
* two pointers are available for the IO schedulers, if they need
* more they have to dynamically allocate it.
函数指针,指向I/O调度器实现,用来重排请求的函数
*/
void *elevator_private;
void *elevator_private2; struct gendisk *rq_disk;
unsigned long start_time; /* Number of scatter-gather DMA addr+len pairs after
* physical address coalescing is performed.
*/
unsigned short nr_phys_segments; unsigned short ioprio; void *special; /* opaque pointer available for LLD use */
char *buffer; /* kaddr of the current segment if available */ int tag;
int errors; int ref_count; /*
* when request is used as a packet command carrier
*/
unsigned short cmd_len;
unsigned char __cmd[BLK_MAX_CDB];
unsigned char *cmd; unsigned int extra_len; /* length of alignment and padding */
unsigned int sense_len;
unsigned int resid_len; /* residual count */
void *sense; unsigned long deadline;
struct list_head timeout_list;
unsigned int timeout;
int retries; /*
* completion callback.
*/
rq_end_io_fn *end_io;
void *end_io_data; /* for bidi */
struct request *next_rq;
};

每个块设备都必须提供一个探测函数,该函数通过register_blkdev_range直接注册到内核,或者通过gendisk对象,使用add_disk间接地注册到内核,该函数由文件系统代码调用(初始化阶段),以找到匹配的gendisk对象
对块设备的读写请求不会立即执行对应的操作,相反,这些请求会汇总起来,经过协同之后传输到设备

. 假设进程对一个设备文件发出read( )或write( )系统调用。VFS执行对应文件对象的read或write方法,由此就调用高级块设备处理程序中的一个过程
. 这个过程执行的所有操作都与对这个硬件设备的具体读写请求有关。内核提供两个名为generic_file_read ( )和generic_file_write ( )通用函数来处理所有事件的发生。因此,在大部分情况下,高级硬件设备驱动程序不必做什么,而设备文件的read和write方法分别指向generic_file_read ( )和generic_file_write ( )方法
. 但是,有些块设备的处理程序需要自己专用的高级设备驱动程序。典型的例子是软驱的设备驱动程序:它必须检查从上次访问磁盘以来,用户有没有改变驱动器中的磁盘;如果已插入一张新磁盘,那么设备驱动程序必须使缓冲区中所包含的旧数据无效,即使高级设备驱动程序有自己的read和write方法,但是这两个方法通常最终还会调用generic_file_read ( )和generic_file_write ( )函数
. 这些上层的VFS函数把对I/O设备文件的访问请求转换成对相应硬件设备的块请求
) 所请求的块可能已在主存,因此generic_file_read ( )和generic_file_write ( )函数调用getblk( )函数来检查缓冲区中是否已经预取了块,还是从上次访问以来缓冲区一直都没有改变
) 如果块不在缓冲区中,getblk( )就必须调用ll_rw_block( )继续从磁盘中读取这个块,后面这个函数激活操纵设备控制器的低级驱动程序,以执行对块设备所请求的操作
. 在VFS直接访问某一块设备上的特定块时,也会触发缓冲区I/O操作。例如,如果内核必须从磁盘文件系统中读取一个索引节点,那么它必须从相应磁盘分区的块中传送数据 。对于特定块的直接访问是由bread( )和breada( )函数来执行的,这两个函数又会调用前面提到过的getblk( )和ll_rw_block( )函数。
. 由于块设备速度很慢,因此缓冲区I/O数据传送通常都是异步处理的:低级设备驱动程序对DMAC和磁盘控制器进行编程来控制其操作,然后结束。当数据传送完成时,就会产生一个中断,从而第二次激活这个低级设备驱动程序来清除(将数据取走)这次I/O操作所涉及的数据结构

值得注意的是,块设备的file_operations中只使用了通用函数,这是块设备的一个特征
在字符设备的情形中,这些函数都是特定于驱动程序的,所有特定于硬件的细节都在请求执行时处理

aaarticlea/png;base64,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" alt="" />

Relevant Link:

http://oss.org.cn/kernel-book/ch11/11.3.2.htm

0x2: 数据结构

1. 块设备

块设备的核心属性由struct block_device表示
\linux-2.6.32.63\include\linux\fs.h

struct block_device
{
/*
not a kdev_t - it's a search key
块设备的设备号保存在bd_dev中
*/
dev_t bd_dev; /*
will die
bd_inode指向bdev伪文件系统中表示该块设备的inode(本质上该信息也可以使用bdget获取,因而是冗余的)
*/
struct inode * bd_inode;
struct super_block * bd_super; //bd_openers统一用do_open打开该块设备的次数
int bd_openers; /*
open/close mutex
open/close mutex 打开与关闭的互斥量
*/
struct mutex bd_mutex; /*
bd_inodes是一个链表的表头,该链表包含了表示该块设备的设备特殊文件的所有普通inode
注意: 不能将表示普通文件的inode和bdev伪文件系统的inode混淆,后者表示块设备自身
*/
struct list_head bd_inodes;
void * bd_holder;
int bd_holders;
#ifdef CONFIG_SYSFS
struct list_head bd_holder_list;
#endif
struct block_device * bd_contains; /*分区块大小*/
unsigned bd_block_size; //bd_part指向一个专用的数据结构(struct hd_struct),表示包含在该块设备上的分区
struct hd_struct * bd_part; /*
number of times partitions within this device have been opened.
bd_part_count是一个使用计数,计算了内核中引用该设备内分区的次数,在用rescan_partitions重新扫描分区时,这个计数很有用处
如果bd_part_count大于0,则禁止重新扫描,因为旧的分区仍然在使用中
*/
unsigned bd_part_count; //如果bd_invalidated被设置为1,表示该分区在内核中的信息无效,因为磁盘上的分区已经改变,下一次打开该设备时,将要重新扫描分区表
int bd_invalidated; //bd_disk提供了另一个抽象层,也用来划分硬盘
struct gendisk * bd_disk; /*
bd_list是一个链表元素,用于跟踪记录系统中所有可用的block_device实例,该链表的表头为全局变量all_bdevs
使用该链表,无需查询块设备数据库(伪文件系统数据库),即可遍历所有块设备
*/
struct list_head bd_list;
/*
* Private data. You must have bd_claim'ed the block_device
* to use this. NOTE: bd_claim allows an owner to claim
* the same device multiple times, the owner must take special
* care to not mess up bd_private for that case.
bd_private可用于在block_device实例中存储特定于持有者的数据
"特定于持有者"意味着只有该block_device实例当前的持有者可以使用bd_private,要成为持有者,必须对块设备成功调用bd_claim,
bd_claim在bd_holder是NULL指针时才会成功,即尚未注册持有者(当前调用者是第一个),在这种情况下,bd_holder指向当前持有者,
可以是内核空间中任意一个地址,调用bd_claim,实际上是向内核的其他部分表明,该块设备已经与之无关了(已经专属于持有者了)
*/
unsigned long bd_private; /* The counter of freeze processes */
int bd_fsfreeze_count;
/* Mutex for freeze */
struct mutex bd_fsfreeze_mutex;
};

关于内核的哪个部分允许持有块设备,没有固定的规则,例如

. 在Ext3文件系统中,会持有已装载文件系统的外部日志的块设备,并将超级块注册为持有者
. 如果某个分区用作交换区,那么在用swapon系统调用激活该分区之后,页交换代码将持有该页交换分区
. 在使用blkdev_open打开块设备并请求独占使用时,与该设备文件关联的file实例会持有该块设备
//使用bd_release释放块设备

内核用结构block_device实例代表一个块设备对象,如:整个硬盘或特定分区

. 如果该结构(block_device)代表一个分区,则其成员bd_part指向设备的分区结构
. 如果该结构代表设备,则其成员bd_disk指向设备的通用硬盘结构gendisk

2. 通用硬盘和分区

尽管struct block_device对设备驱动程序层表示一个块设备,而从另一个角度来说,而另一个抽象则强调与通用的内核数据结构的关联,即硬盘的概念(可能包含子分区)。设备上分区的信息不依赖于表示该分区的block_device实例,实际上,将一个磁盘添加到系统中时,内核将读取并分析底层块设备上的信息,但并不会对各个分区创建block_device实例。为此,内核使用以下数据结构,对已经分区的硬盘提供一种表示
\linux-2.6.32.63\include\linux\genhd.h

struct gendisk
{
/* major, first_minor and minors are input parameters only,
* don't use directly. Use disk_devt() and disk_max_parts().
*/
//major指定驱动程序的主设备号
int major; /* major number of driver */ //first_minor、minors表明从设备号的可能范围(每个分区都会分配自身的从设备号)
int first_minor;
int minors; /* maximum number of minors, =1 for
* disks that can't be partitioned. */ //disk_name给出了磁盘的名称,它用于在/proc/partitions中表示该磁盘
char disk_name[DISK_NAME_LEN]; /* name of major driver */
char *(*devnode)(struct gendisk *gd, mode_t *mode);
/* Array of pointers to partitions indexed by partno.
* Protected with matching bdev lock but stat and other
* non-critical accesses use RCU. Always access through
* helpers.
*/
struct disk_part_tbl *part_tbl; //part0表示hd_struct的一个实例,每个磁盘分区对应于一个hd_struct
struct hd_struct part0; //fops是一个指针,指向特定于设备、执行各种底层任务的各个函数
const struct block_device_operations *fops;
//queue用于管理请求队列
struct request_queue *queue;
//private_data是一个指针,指向私有的驱动程序数据,不会由块设备层的通用函数修改
void *private_data; int flags; //driverfs_dev标识该磁盘所属的硬件设备,指针指向驱动程序模型的一个对象
struct device *driverfs_dev; // FIXME: remove
struct kobject *slave_dir; struct timer_rand_state *random; atomic_t sync_io; /* RAID */
struct work_struct async_notify;
#ifdef CONFIG_BLK_DEV_INTEGRITY
struct blk_integrity *integrity;
#endif
int node_id;
};

对每个分区来说,都有一个hd_struct实例,用于描述该分区在设备内的键

struct hd_struct
{
//start_sect、nr_sects定义了该分区在块设备上的起始扇区和长度,因而唯一地描述了该分区
sector_t start_sect;
sector_t nr_sects;
sector_t alignment_offset;
struct device __dev;
struct kobject *holder_dir;
int policy, partno;
#ifdef CONFIG_FAIL_MAKE_REQUEST
int make_it_fail;
#endif
unsigned long stamp;
int in_flight[];
#ifdef CONFIG_SMP
struct disk_stats *dkstats;
#else
struct disk_stats dkstats;
#endif
struct rcu_head rcu_head;
};

需要明白的是,尽管gendisk表示已分区的磁盘,它们也可以表示没有任何分区的设备。struct gendisk的实例不能由驱动程序分别分配,相反,必须使用辅助函数alloc_disk

/*
给出设备的从设备号数目,调用该函数可以自动分配genhd实例,其中包括了指向各个分区的hd_struct的指针所需的空间
其中只包括指针自身所需的内存,分区实例只有当在设备上检测到实际分区并用add_partition添加时才会分配
*/
extern struct gendisk *alloc_disk(int minors);

alloc_disk将新的磁盘集成到设备模型的数据结构中,因此,gendisk不能在销毁时简单地释放,而要使用del_gendisk
3. 各个部分的联系

我们之前讨论的各个数据结构(struct block_device、struct gendisk、struct hd_struct)是彼此直接关联的

aaarticlea/png;base64,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" alt="" />

Relevant Link:

http://blog.csdn.net/jianchi88/article/details/7212599

4. 块设备操作

特定于块设备的操作汇总如下
\linux-2.6.32.63\include\linux\blkdev.h

struct block_device_operations
{
//和file_operations中等价函数的语义相同,用于打开文件
int (*open) (struct block_device *, fmode_t);
//和file_operations中等价函数的语义相同,用于关闭文件
int (*release) (struct gendisk *, fmode_t);
int (*locked_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
//和file_operations中等价函数的语义相同,用于向块设备发送特殊命令
int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
int (*direct_access) (struct block_device *, sector_t, void **, unsigned long *); //media_changed检查存储介质是否已经改变,对于软盘和ZIP软驱等设备,这是有可能的(硬盘通常不支持该函数,因为它们通常不能换盘片)
int (*media_changed) (struct gendisk *);
unsigned long long (*set_capacity) (struct gendisk *, unsigned long long); //revalidate_disk用于使设备重新生效,只有在直接移除旧的介质并替换为新的介质时(未进行卸载和加载)才有必要使用该函数
int (*revalidate_disk) (struct gendisk *);
int (*getgeo)(struct block_device *, struct hd_geometry *); //如果驱动程序实现为模块,那么owner字段指向内存中的一个模块结构,否则该成员为NULL指针
struct module *owner;
};

这些函数不是由VFS代码直接调用,而是由块设备的标准文件操作def_blk_fops中包含的操作间接地调用

5. 请求队列

块设备的读写请求放置在一个队列上,称之为请求队列

struct gendisk
{
...
struct request_queue *queue;
...
} struct request_queue
{
/*
* Together with queue_head for cacheline sharing
queue_head是该结构的主要成员,是一个表头,用于构建一个I/O请求的双链表
链表的每个元素的数据类型都是request,代表向块设备读写数据的一个请求
内核会"重排"该链表以取得更好的I/O性能
*/
struct list_head queue_head;
struct request *last_merge;
//因为有各种方法可以重排I/O请求,elevator成员以函数指针的形式将所需的函数群集起来
struct elevator_queue *elevator; /*
* the queue request freelist, one for reads and one for writes
rq用作request实例的缓存,队列中保存空闲请求的列表
除了缓存之外,它还提供了两个计数器,用于记录可用的空闲输入和输出请求的数目
*/
struct request_list rq; //下列包含一系列函数指针,表示了请求处理所涉及的只要领域,函数的参数设置和返回类型都通过typedef定义(struct bio管理传输的数据),内核提供了这些函数的标准实现,可以用于大多数设备驱动程序
/*
每个驱动程序都必须实现自身的request_fn函数,该函数是请求队列管理与各个设备的底层功能之间的主要关联,在内核处理当前队列以执行待决的读写请求时,会调用该函数
request_fn是用于向队列添加新请求的标准接口,在内核期望驱动程序执行某些工作时(如从底层读取数据,或向设备写入数据),内核会自动调用该函数
该函数也称之为"策略历程(strategy routine)"
*/
request_fn_proc *request_fn;
/*
make_request_fn创建新请求,内核对该函数的标准实现向请求链表添加请求,如果链表中有足够多的请求,则会调用特定于驱动程序的request_fn,以处理这些请求(进行重排)
内核允许设备驱动程序定义自身的make_request_fn函数,因为某些设备(例如RAM磁盘)不使用队列,这可能是由于按任意顺序访问数据都不会影响性能,
也可能是由于驱动程序比内核更了解如何处理请求,因为使用内核的标准方法不会带来好处(例如卷管理器)
*/
make_request_fn *make_request_fn;
/*
prep_rq_fn是一个请求预备函数,大多数驱动程序不使用该函数,会将对应的指针设置为NULL,如果实现了该函数,它会产生所需的硬件指令,
用于在发送实际的请求之前预备一个请求
*/
prep_rq_fn *prep_rq_fn;
//unplug_fn用于拔出一个块设备时调用,插入的设备不会执行请求,而是将请求收集起来,在拔出时执行,有效使用该方法,能够提高块设备层的性能
unplug_fn *unplug_fn;
//merge_bvec_fn确定是否允许向一个现存的请求增加更多数据
merge_bvec_fn *merge_bvec_fn;
//在预备刷出队列时,即一次性执行所有待决请求之前,会调用prepare_flush_fn,在该方法中,设备可以进行必要的清理
prepare_flush_fn *prepare_flush_fn;
/*
对于大的请求来说,完成请求,即完成所有I/O,可能是一个耗时的过程,在内核2.6.16中加入了软中断SoftIRQ异步完成请求的特性
可以通过blk_complete_request要求异步完成请求,softirq_done_fn在这种情况下用作回调函数,通过驱动程序请求已经完成
*/
softirq_done_fn *softirq_done_fn;
rq_timed_out_fn *rq_timed_out_fn;
dma_drain_needed_fn *dma_drain_needed;
lld_busy_fn *lld_busy_fn; /*
* Dispatch queue sorting
*/
sector_t end_sector;
struct request *boundary_rq; /*
* Auto-unplugging state
*/
struct timer_list unplug_timer;
int unplug_thresh; /* After this many requests */
unsigned long unplug_delay; /* After this many jiffies */
struct work_struct unplug_work; struct backing_dev_info backing_dev_info; /*
* The queue owner gets to use this for whatever they like.
* ll_rw_blk doesn't touch it.
*/
void *queuedata; /*
* queue needs bounce pages for pages above this limit
*/
gfp_t bounce_gfp; /*
* various queue flags, see QUEUE_* below
queue_flags借助标志来控制队列的内核状态
*/
unsigned long queue_flags; /*
* protects queue structures from reentrancy. ->__queue_lock should
* _never_ be used directly, it is queue private. always use
* ->queue_lock.
*/
spinlock_t __queue_lock;
spinlock_t *queue_lock; /*
* queue kobject
*/
struct kobject kobj; /*
* queue settings
nr_requests表明了可以管理到队列的请求的最大数目
*/
unsigned long nr_requests; /* Max # of requests */
unsigned int nr_congestion_on;
unsigned int nr_congestion_off;
unsigned int nr_batching; void *dma_drain_buffer;
unsigned int dma_drain_size;
unsigned int dma_pad_mask;
unsigned int dma_alignment; struct blk_queue_tag *queue_tags;
struct list_head tag_busy_list; unsigned int nr_sorted;
unsigned int in_flight[]; unsigned int rq_timeout;
struct timer_list timeout;
struct list_head timeout_list; struct queue_limits limits; /*
* sg stuff
*/
unsigned int sg_timeout;
unsigned int sg_reserved_size;
int node;
#ifdef CONFIG_BLK_DEV_IO_TRACE
struct blk_trace *blk_trace;
#endif
/*
* reserved for flush operations
*/
unsigned int ordered, next_ordered, ordseq;
int orderr, ordcolor;
struct request pre_flush_rq, bar_rq, post_flush_rq;
struct request *orig_bar_rq; struct mutex sysfs_lock; #if defined(CONFIG_BLK_DEV_BSG)
struct bsg_class_device bsg_dev;
#endif
};

内核提供了标准函数blk_init_queue_node,用于产生一个标准的请求队列,在这种情况下,驱动程序自身唯一必须提供的管理函数就是request_fn,任何其他的管理问题都是通过标准函数处理,用这种方法实现请求管理的驱动程序,在调用add_disk激活磁盘之前,需要调用blk_init_queue_node创建请求队列,并将结果request_queue实例添加到设备的gendisk实例
请求队列可能在系统超负荷时插入,接下来新的请求都会处于未处理状态,直至队列"拔出",该特性称之为"队列插入(queue plugging)",以"unplug_"为前缀的各个成员用于实现一种定时器机制,在一定时间间隔后自动"拔出"队列,unplug_fn负责实际的拔出操作
0x3: 向系统添加磁盘和分区

在学习了构成块设备层的数据结构之后,我们接下来讨论一下向系统添加通用硬盘的方式

1. 添加分区

add_partition负责向通用硬盘数据结构添加一个新的分区
\linux-2.6.32.63\fs\partitions\check.c

struct hd_struct *add_partition(struct gendisk *disk, int partno, sector_t start, sector_t len, int flags)
{
//分配一个新的struct hd_struct
struct hd_struct *p;
dev_t devt = MKDEV(, );
struct device *ddev = disk_to_dev(disk);
struct device *pdev;
struct disk_part_tbl *ptbl;
const char *dname;
int err; err = disk_expand_part_tbl(disk, partno);
if (err)
return ERR_PTR(err);
ptbl = disk->part_tbl; if (ptbl->part[partno])
return ERR_PTR(-EBUSY); p = kzalloc(sizeof(*p), GFP_KERNEL);
if (!p)
return ERR_PTR(-EBUSY); if (!init_part_stats(p)) {
err = -ENOMEM;
goto out_free;
}
pdev = part_to_dev(p); p->start_sect = start;
p->alignment_offset = queue_sector_alignment_offset(disk->queue, start);
p->nr_sects = len;
p->partno = partno;
p->policy = get_disk_ro(disk);
/*
在指定了一个用于显示的名字(例如,在sysfs中)后,将分区的内核对象的父对象设置为通用硬盘对象
与完整的磁盘相比,ktype不是ktype_block,而设置为ktype_part,这使得可以区分源自磁盘和源自分区的uevent
*/
dname = dev_name(ddev);
if (isdigit(dname[strlen(dname) - ]))
dev_set_name(pdev, "%sp%d", dname, partno);
else
dev_set_name(pdev, "%s%d", dname, partno); device_initialize(pdev);
pdev->class = &block_class;
pdev->type = &part_type;
pdev->parent = ddev; err = blk_alloc_devt(p, &devt);
if (err)
goto out_free_stats;
pdev->devt = devt; /* delay uevent until 'holders' subdir is created */
dev_set_uevent_suppress(pdev, );
//添加新对象,使新分区成为块设备子系统的一个成员,因此提供有关该分区信息的sysfs项会出现在/sys/block中
err = device_add(pdev);
if (err)
goto out_put; err = -ENOMEM;
p->holder_dir = kobject_create_and_add("holders", &pdev->kobj);
if (!p->holder_dir)
goto out_del; dev_set_uevent_suppress(pdev, );
if (flags & ADDPART_FLAG_WHOLEDISK) {
err = device_create_file(pdev, &dev_attr_whole_disk);
if (err)
goto out_del;
} /* everything is up and running, commence */
INIT_RCU_HEAD(&p->rcu_head);
//最后,必须修改通用硬盘对象,使对应的part数组项指向新的分区
rcu_assign_pointer(ptbl->part[partno], p); /* suppress uevent if the disk supresses it */
if (!dev_get_uevent_suppress(ddev))
kobject_uevent(&pdev->kobj, KOBJ_ADD); return p; out_free_stats:
free_part_stats(p);
out_free:
kfree(p);
return ERR_PTR(err);
out_del:
kobject_put(p->holder_dir);
device_del(pdev);
out_put:
put_device(pdev);
blk_free_devt(devt);
return ERR_PTR(err);
}

2. 添加磁盘

下面给出add_disk的代码流程图
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAO8AAACZCAIAAABIafoyAAAgAElEQVR4nO19T2gcyfW/D2Zh8ILge2jIwYdAsxeZhdB7EzqENjlEFj60otXCILEbtQbtIg8KoQexC9LghKjHLCSzmCX0GJygWYIPLhwTZJYQGDbk4DinBt9MrpPDnnTZU+t3ePTjzXtV1TV/9Mf++R2Gmvrz6lXVp16/rqqud+X0Lb2lN4WuXLQAb+ktzYzeovktvTn0Fs1v6c0hDZqPj48XFxc3NzfjOI7juF6vx3GcJMnOzk4cx5uj1Gq17ty5U6/XNzc3t7a2tra2Pv300y1CzWYTA0itVqvVajWbzUajsbu7u7e312639/b29vb2dgndu3ePhu/evXv37l0M3L1793e/+x1GQvz9+/fv379/9+7d3//+9xD4UtDh4eHLly8LA03fpybOshaXnOMScsZfKRur/Uxbej4E8mjQnGWZ7/t5nud5rgRBpDYJaDAYmFIHg4GplFIqyzJtuN/v0780AyQhpWkKSVmW9fv9tCRIQlpeXk7T1N4v05CJraxiysGjfE5HkSr/WiJn0thpmjM9gTB6NAdBoAWfBcQukMUkyifLMvoXwzhtYHogaXNikiwuI7e3t9M0HQ6H0BEYoP1iQYMpRpZlbLX8ZQbLgNnllAJrYyxtsZOWubv8Z0og0nhotpBJlyu3OcCyUW6IZglcFslKyarh79raWpIkw5K0/TLBYGvHmLKV/LUZKjlo+Uj+9qSJm1bZ0gshEKkazVIpKqs5QeFot1VM8NWiWeaxV0fRzDT39vZ2EARhGEZRFMdxlmVFUQyHw9PpVJd9jCUaTgU67aOlHb9TM2S18VKGcZtmaay9CWdKII8TmqWS00KQglVLcg4wVaqEVaBlK8GtFUOrs/M839jYqNVqtVrN8zzP86Iokl1D+4gO3lijSOMZvFyYWMBUWRcV2JJhLJLMLw+BSDY0ax/uJsSYEAwEL23MdKFl6XNAy8FelxRPghh/19bWrly5UitJopl2kGlQWU4TBxk28dHGaDNXIslSr71pdrLLf7EEIhnRbEIwEH0zw8gkSeI4Pjg4YJnTNE2SJEkSCiwtBDE/rE6o8i0Q7AGLPJgZFjSkhHRmbm9vX7lyxfM8RzQXBAqOaJZDLhHpjtFxoWNBMBPPjl0Tmk1tvECqQLMJMQw9FEZxHEdRFIYhzZNlGUT6vt/v9yWaWeY4jiFzkiQAvn6/73leHMesOilJmqa+74dhmGUZU/YSzVQ3y3fBwjrk2pwspjDoyMKAAwsyxgWNBcGFbpa6k1aqsWSbjCqrAGEqLA1qG/T7/U6n0263G43G119/DZGDweD4+Ljb7e7u7jabzYODgw8//BBQ2+/3e71eu93udDqHh4fz8/O9Xk8Re4Myf/r0aa/X63Q6BwcH3W53aWkpjmOsd3Nzs9/vs4K9Xu/o6KjX6/X7/ePjY6i01WotLCzAejMUAaIzByyNq1evIppPTk5MHXQqdLMcRZltguGxFLSgXPvXguYZUqGbtBdFIJKrbs7zPE3TOI7BDLh58yZoxyzLwjAMwxBsiSAIAEywBRNFEZQKw9DzPAAcMqRas9VqBUEAiwy+74MyhtSVlRXP88BQgUpBN0N+4IyaG9RzlmWLi4tBEOCUoFYHtZvhLRB18wxH2qX3JTi0+KA8TQULAeILpHFR6J7fzqcazVSrITSXl5cBWIBgVe7AAbjBuoiiiBb0fV+ZaX19HY0HyAzFofYoigDNOAFADCgCO/AQD/KkabqysoLQp2gGS6NWq125cgUwHccx7RSGBtll2sFzH0tTKRcOdgDZeZ4PTYbCcUuZ+IyB5iiKQNtFUfTBBx/AaxkiCQhwDJgGwxeTqN3MTOcsy+r1OkwGiIHFYFo14hWLwHMA14whZ5Iknuf5vr+3t6eEaQ7FcYUOiKLZ3r+nwtgo3J6zpoE/NaNQK4wdPY6AmxVVynOeBLVXoJkiLwxDXGpYXV1F3Yw6EmhpaQky0/c2MDyosqQTIM/znZ0dGgnTRqKZERyEApMDYkCvJ0myvLzMQIzcNjY2tCt0leNhGTxLwYmxIqWS8ZeQJoPjlARVa9AM+FCjW8oIqSzLkiS5ceMGrriBUQH2dBRFN27cgDCoZ8gfRVGtVjs8PNSuYyilGo0G4BWWNajdjHODohOeCXDqCKwOSMLZtb6+jqsiDM32NQ3LkEw2clPC4tQwZyZme6Y0CRJnQVC7Bs0ARKnScK0tDMPNzU1UyRAPe8VJkty6dQuQl6ZpEAT4bheGYbPZlGiGinq9XlAS1BIEAUyGhYUF3/dh6Q0xDVNuYWEBisBDA4xmmIrtdhtX62hFgGZqacxEN5sym5LGHScpQGEwURwxN3FZxkdKdSEEtestDUAz0800ILfucNtCS5Ct2+3CUWnQrBhI0xRMau2h0G63i8zBLMnLXZJutwuIp6Ugz/HxMZwFZZKrck0D1TPdPRlrPEwjSoEyq6Gy1+IOPibbWMUlt+JyQLmoRLN8QFOyHK+Dp7+2VK/Xg5fIuCTQ9GD1WiYDnRVMJBmmu+jaVsBboAnN2jFjHcfyF4ZBndUAa6Ej660En5TNvbiWoanh508ggBHNuOmAZDo3Bznx77NnzyjimSLHv8iNLkLTJNz4ePr0qawXc8oqmBjAH4UcDAbb29tXS9LubJ86KFeWynKe6ehqkeQOPm1DJqZzaK8LgQAaNIMRjJpSWhpaot+A0HhEWE7O3UtVKsmkgGmk9hgT+4u1s7dAut5s2dm2d19hUOeyrETAxMNm4mmCWmGYADJGW9BOLJu78LMlqN32FjhD0kI2J4eELAVReWvPZtirkNUppT755BOKZss5jcrus/yd4VCZpLLgUivGxJB1QfMZtdeRjGiG9WYGI6Z3qXlA89Ak7Ssd/ct0M77nsSKsLspK+8kgS5IZ1tbW4AAdnKRjuyeF84YI7UeGj/MhWq8Fatr82vhKhnY0XyCmjWgOgsDzvMBK8PZmCiNFJdG/+CKIqRjGAC53wFfisADCCFa1IYAxmLq/v88y4FeuP/vZzxDNci/QvftoP17UQLqg2YJvmcGdtGXPp9WmJmjQPBwOsyxL0/TOnTt0XRYPBANdcSDHbPaCV69elakTEMqPp+egFtP55teFLIBmGewcxsUxli0us6WBOV68eIEI8EqCv3Nzc1qgMMQzglIyDwIUAqzSSphKoEvEs5gr5AydVjdXDo+LKjqfMT41qMmzQ7MF3BdFRjSjfC9evIDDmXCOB4ghjCKPZfB0VBudGBRVmEor9Txvbm6O/sVKPc+7fv26iTMTQDuLzhrN50x2NEtpMXJc7LJS59tKPRnRjDlevnyJAKUBijCJQoowhiSMQVwiUWVPs0ES/AXTXM4T08yhE4MSnR6+709pN184wZtu4bZCR8mEZpqqhawJzRfYJ9Vo/uGHH548efLkyZNvvvkGAw8ePHjw4MEf//jHB4Tu379PA/cJ0Yu2/vCHP3z55ZcQCfG7u7sbGxtzc3O//OUvIc/nn38Ovyywvb29u7u7vb29vb39+eefw+/Ozs7u7u4nJa2trWF4c3NzY2Nje3t7bW1tY2NjbW2NBtbW1m7fvr26urqxsXF0dKT99qSy+86hiAu9fPnyu+++gyYwgFqqZrrWjmZZhMacdQNdyIhmd5nkMq124Rbp5OQEL2TBX6VUEASWi+GmJ7tUk5FUV+P23lh1ObIdaxwnQ/MEUp0DzQDN0xOg2fd9LZovT2dJkrJdktGVGNWmakvZwSozzFj0KcgJzecg8RuD5guUwYRC9wF9k9FsAjcrPxM58jw3WRqW2i+cLpVgWviasC4LyrGmTGSkltXFkiuaz1qO2aJZO1qOmV2Ya7EycS9N1kDLANnRLIs4ovk88TAZ2dBMc2hLTlkr5WBC8wTdx8bSPt6yyS51XfgYa9uoTbWLXVgha0k6t5aORSDbJGieskpWy0zQLEf3VGgme9kJajy3oa2si42aDGjbKAMmzmzULiGmJ0FzZeMtlRVCNwBJNGuFcaziktNZrBVWkhxE1rH/X6BZ5h63VSaGEs0wzJK/pZctMcPh8L///S+sbb98+fLly5dDQt9///1wODw5OcH175OZUlEULCB3Zyr3a1gG7cXpY3G4QNL2D42HIWCZsfgPP/yASaws5rGhmeHJnVgzTBNAi2bJxIRmbXU0Ek6o0rOp8Bd+8UtvepYVaGFhQVuWHYWVBKde6S89EKslcI9kIe0hWDzpKqnb7cKHvUA0zEh7Ipx+pGOn4XD46tUrU9JZUEG221i8E5q1cHRBMEOY5Zeh2YRaFzTTv8PhMAiCbrer/Z6ADbaMx1Tp/ocemGZnpunRahOxL9W1RM98079aojPHQnQmy1nKpqvLiXYa6V7WJINdQYRhuLS0RFtNP5RG9WxDs4SjNg/7rczDAhCWloacDxY0ywCgudfrMbWBiod9vVtJSveJoSUG45XzV5WMmNMWyVbLED/SYUmyCbIu7ZynX/2wmY/PAfY0MM18SNXOcPylc95OAGvf91+9ejUemicmS3EKU4lmkzByPrAiqJt936doZsiQF5WzPBIBue6L2kqg5LqPyd3JUkTLMCsvG2F5pBhS4OFwiJHaMOWZ5zlYGsPhkHWFXULpwgYDY7mMUuVdcMPRy13PEM0WoujMhd1syWzR06cGNCuhO9UoCjFARxGHBFNNGl0OpHZoxxoqSVqRpCTKgK1KrND8Jmkrm+nIPxPXATAJtZY9ayl8vQq6GcFTvUKnTbUj1ZStGLUlTkctDQtPrWxaIRHN3W6XjTF+WmtB9rhGiAncpoHPBcplvLYsZtP6DDBlpqW0omqxIvPIGGkLSfw5EpaVHzjTuhhlWVar1fCdGJAwCZonpmLUDj6dBZqZqFo0M6xYxoDd+KFGsc6AYhp+O8LYILngwI5mCVnZUurySzbE3iJ7S2V1JvDZ2ziBpUG/5IDvFVy9xhe6dy97Trt2R0QqpagBpDUeTKRdUmVo1g6AjMc+1cbb+VgUlYufZnofgzLfesPqkkLSzGoUatpUJqpso6wrF5NKspKzVCuGqTcsHUUJ0IwfLIM2rECzFmEUrIXubUyLe6aSMTAYDObn58fdGgDUtlqt/f39v/zlLy9evEBkA5q//vprHH4IHBwcrK6uNhqNZ8+e0XvJlFLtdhu+gvnTn/6Eka1Wa21tDXy1KKWg1KtXr5S4W+z58+eqvBwMkvC6MCiF4Oj3+xh+9uwZOGdhYzYYDO7du9fpdNhwwi/cSDYYJSXmEvX2IsMsGzaHTRt2kRpG5nlOm0z5oMCMv1Kq3+8/evQIGyVvbKNkT1VK7e/v12q1d955Z25ubm5ubjAYFJW62QTlCYiyophWSmmXh1ljtEqx2+3id4FheZu/1tIAisurqZGokoiiqN1uY6ms9BAgcyqhSk2pdCSkOpQEqbu7u2EYMuFBJKm26S2psohJQkw6Pj5mmTFVCyPEusxvb1QQBODwQFV1helaH0pJklwhrpiSJKlG8wzJhOY8z33fxxVyuYWGy+lwpyhbyfdGPyCHi/U9zzs6OjKh+fDwENZBM+KDEGCBaMYBSErvQfQlUo3iBrEi73DCm3y1m3AYyZLwoiY26mwNGCgor69mDuyUYVKp0akooY9/tW8RmGTCmckwiOP46OjIVErmxwDruqx06oBo9jwvz/NTx9P604O4ENYwBmA8cBlc0sno14SUjo+P4bvuWq0WBEFcOkBhK3SK4NXzvJWVFZgYEXGtopSKooh6S8nzHNAM3ifA15YWzYpcvQ5bALibpcrr/nESoreNra0tzAZlISmO44WFhXjUlwAIj3yi0jNGHMfwNTtslSuCVLhPELQA2EtpmsI+BQ1TZzSsdb1eD0TCvQ+c/0dHR7DTgc1R5cLR/v4+FpG7rQy1uMNCpz0WRw6SmG5WSk2im6nJe+pgN0s005jCbWf71PA6uLe3BwOZpmme59Ru1u4FJkmCzoSy8ro9HDyGZlW6XwGNjrYQ05d5aSUDQ7jQH3e/wGcADlJSusxSSoHXrDRNoyiq1Wox8UUEQGejDpclHB4eAqAhPis92cEsQsFgukJkFEXr6+uqdLYL+QHlcRxrTTL422w2oTnQyUBQ761bt/CxicYYdO/S0lIYhlAQkqADgyCgLwMYD0yazaYqPUXh9Iaw9rZBRDNcyeL0FmhB81j5KTRd0Gzng6gFELMDKMPh0PM8OUgIJrAUmVkMnUvRDEABSomnZMpQjZoBMAC06zudDoAbjw0BKNM0hboA0J7nUSXXbrclmoPSdQYoLVop/MUXDKgF95xV6VoJ8sM7BsMHaw7+DcPQ87yk9CADDJMkaTQaOD9x9oKE/X4/iiIoBbocSkVR1Gq1GJRRyKWlJWhaWHryhb/wCkT7nFkalw7NlhU6yYepaqnUGZopAZrx2Qq9jyPH0KyUAuSBEmLu4UxojuMYxg9y7u7u+r4POhv1DSC73W6r8tmK4IMY8AXKjEVQq/Pz82iu5KVxD7Ma5UHzA2fj/Py8Ki0BnJzZqENyOV0Hg0FAnIPRRxbaSADcqHRtg3OPqgBVOscBBazKN+y49NuklGo0GtADLD4MQ/DcjrUDMUujAs2FsHSLUWuhEsSmgpW62cJQolmrs7U729AFtVqt0+kgsulLWBzH7Xabvn8g3KMo2traUgbCN7Og9PWGXQ+6WRbJsuzmzZs4MLVajb6StttttOlRcoQgqEOKLZw8dNJSRQ7ewKAIuCHFZg5GT61QGgwGIfGchHngXBs9BgRSBeVFyThnsAmAZlzTwL7FujY2NkBg+v4Df7XrXWOjWQLFHc2MjzuaLZLIqiWmTWhWpZkB9hx9IctLz7CgPqPSCQvoQsiTpumNGzfiUc/1+DsYDDLimAsHGHKCDsPDYmgYrK6uooaD3SxV2gkrKyuowqEVIAyMN7VfVWncK6XAp1Feum0GGfC5DJmp1oQ5AMIzrOTlW2BYusnLiC+bJEm2trbQikBrAXqv2+3CWhN9hwOx6eMInngoIXigRN1Mew8tDYlmvMdQWd4CJY4tkJJlTaW0aIbHmQnNWg6OaGZr+H1CuCeiyk0NoIcPHz5+/BhX+6EfB6WT+l6v1xylRqPRbDZbrVaWZd1RystFWaiu3W43m81Op4NV/+Y3v9nf30+SBDzdo4LvdDrtdrtTEghweHj41VdftdvtL774otPp9Pt9XAjr9Xp7e3vtdrvdboPw0KK9vb1ms7m+vt5sNqHSTqezt7e3u7u7u7sLRQaDwV//+lcQ+PHjx91u9+jo6Ojo6PHjx8fHx7CptLe3B6wU2cf54osv6vX6nTt3tra2Wq1Wt9uF7mq1Wp999tnW1tb8/DxE9vv9O3furKysrK+vf/LJJ61WC1ra7XabzSasL9Xr9S+++AJMrJs3b966dWt/f38wGOzs7Ny8eRPmKl346/f7gGZcnLXpZgsKT4W6pRm0kNVyLnS6mbEyzQeTnBTN8tSRfJhS/Yq4lxno36wkVDn0ryKPY2XYo8ZAq9XC4+fZ6GFOEzH71SWzlIolHRwcsM8C4EkVx/HAsM9vqi4mThypFQEknwA0Uq6jW5qjSt08FZpl2IRRlzx2NFuq00pF0ex53uPHj3MdmToI0WyfAFMSNX7kNqGllAyMK55jFUhyilZWl5XL0vT9T5k3j6ahMezmSjTbgVWJZorpXPcWWIlmmc2OZm2PsNRcHEObmEyKkP41bQ7nun1jtKotLbI8Byx71P/+97+VmCc0TGdgJZoZcyxoKeWSQdJUaJaoleg0QVALdGSilGJ2s4WVFs0sJ6CZ7mzbO1GL5mkALVWpJY8aRaqdTy7O61XWDmzlWRfMz45w0OYPxKlobY24/pCZ3ThNT6x2WAga4wxdQUwCC+JnguaTkxPTXKrkXIyqZ9TNpn6pNNFMhG/xEzC0DC1dJZyMgxZnjhPScuJCiQlgB3RlPN3VY+8ediFlhjiOxz4Rasc6w6WLcqV5Tkd1s5atIzfKEN4CGZrZYFR2nxw2GAlt12vRzDSWEuMnTyZomcjikptFcpiB8ntVU40yW2VOZZiQpjdmltmEZpmB5oTjAPgiONVeoNTHY6GZ5lTlaX2KSFNxrTAUzaenp4Dmzc1N+lUwDezs7GBMOuqCjd5WgXvRQKaLLLJywZXGZGQVNhX3WkC2brebTUQ52eC1gIklMTC5YNRCrHYtZGl1DI6yCCoLWRc7hwgURRFdb57KbraQFo7a4qejutllAjjWG0UR3PPiObi0cid0s0JjauR7nrHIr6JAUBiGeH8NxshrKOSdG4zs3/fjVMdp70I4/2ERnc15GUN1gX1us1tvKJrHW6GTQHFB1emoRcECLNKC5rGqpqr95OTk+++/f/Xq1dLSEnybQLH47rvvzs3NXb16da6ka9euXb169dq1a++++y6gE70KYZ53330Xi2ASZQjxwBkLIkPKDTNgJJ0hV69ehVIQBpobJZqEGd555x20I2lSrVaDJPyLOKCR1I0ilYrFQ9I777wjM8MvCq8lyvbatWu0h+lwXLt27f90BIMI4wVrGjAEY6B5XNJy08ZINEs+Y1XKIuH8jWfwW8Ucxnk6X1tYkE4JyrAmdDbNIz10eQb3cFi2NqrsazpXcdrqtGTPQOvScqsRf2K0aq1TMiDqFZLlkWRJciEUY8ZottgSdmha0FyMqZupei6KYjgcwvEGfHBrw5SuX79O/3rEHqDgw1QZw5IYEwuw5KBq82jnWyU4tLYQlcdSI6sOAmyWsuIm8Ek1z2T2yMyhARaJhON1Jmi2xJjYzhbNLD+7qgdI+5FcVq6Val+bwHqTkVpbkL5BohFJTUyTwSotWmnyskvZqGUMSdKSDslFkgG5PA4CkKS11E3WvMXQZ5OEzXDLC4bJzaQLXSSaWbbZWhqOU4gRnveHr7ZkfOFwgSz7aABLSYbar8ImoNxwJyfb8pAxlHBuyyQ24S2LzWyxgs1207Snq0Yw7dmcr3z1xPdUGOtLrZvHksRu50xPDJeSKFK1pRjm8HtHVmRILjOW6IckWYrml2VNF49ow5YmD60zU7bRHj9DgtF/E9B8KjYsxyp++YkO2+W5Y5wSBa42UuKvMLSL5SnKqahFyHg33mpJm6Gy4JmiWSv/xDPzMtPlRHNhQNtQp8slrGURLTdJ06LZlGrXzSa2w9IzsXaQpkSzO4e3ND25oJkZV1o0T0aT62bKgrEbV4KiKLIsW1hYMKF5AkCPJcOF07i6Fp2AvL5EmzyrR81s0DxZQSxeFEWWZWEYmlo1Gc9xya4kTM9Elqo1B2k2+muyJpkR+ZYcaRI0n+psiSnV4WVAs51cnoZ2xBc64GrXNOxzQ0tYljLUZrAI5tIDjgwvhGamm6eUw243j2v2wG+e569evcLeN63LugClMsYOnaFQyS6lsCyttCDzqrLsGdH51+hI54Fmiy7HpFmhGYvkeW7Zr/J9f35+3rT7FQjnSxiGw2v0qBo7tqY9rRaVPpTs59fsZ9MsR8+0h86U82lPy65KXjo3wf2XSwvl4hzQLFPPFM3INs9z3/cPDw+1I52WfvVMu1PZqPektMp1mv10JcWr/aCmdkeaThU6zWSgkuTs1U5mS/EgCJIkuZyAvgA0F7r97RmiGWg4HPq+L68lxr+mT1m1HwvhX/sXR3b9p3Sf/VkYun9aZ9ltVoYz9Zk4Pi+zabUATK3XFc2VSDLhFdUkZSWnyik5EToxmmUG0M3sxltHEJgy59YLvdXot6XaWUFBdp6kPXRBhdTeQwfEvqiFp4QFze6qZ+Y0hm7W5rErcjkxKMoxsrCiuajqIK0MeZ57nidv7rKMrtLpTjWKUZMqNSVp8TExoQatfESwR4G2B0yimrgBIZov5AXUTq5oNiFyLOibJChm/RZYVKFZlR5MqEsOdOfx9OlTRXQSVWCYjbKCUsCQRmKl6KZEApEpe8fb6ilDbSm0pmie58+f07/0vo5nz55RG4zeOkA7SilVr9fn5ubef//999577+c///lrg+ZTq6lgyVwJPsazKIosyyy6uZKJJIZmSmpUN8skebkEBkxXbeSGOy7sKrlSYWszSH1PpysVQ7bdpKotJ0LZVImiCM/Ov/fee68NmmkOGq4kx1oxXBRFlmU+cZjsQrj42u/35VNvOBx6ngdvgUpAloGDxlsgK/OzlycTWS4ZMiF1LDI1ypSHhdkE1s5zjAQ0wzn69957Ly+dGVwGuixoVsTScOFAaWVlJSSuqCAyJ7qZjRAd42zUSx+DZiW2YL2MRWbOH/c7otldqizL9vf3s9H7a2JyX6OpE7R+GICYxUXRfOPGDezwcUftLGhyNFvYOdaK4aLUzeyCFakbtNTpdKBzfd+PSu8niGbGTY6WSY25qMm4vEq+MnNcurqpRDCiynGFDp8SSqkkSRYWFqLyXmfAtOd5MblLXMuk2+2GxC0QJWlp4Mfe1NJ4jdFsZzeBHEopn9wQLsm+V8e+iwyCAL5sZa6WVGkbpKX7o3T0rmzYPWm1WnTU6XIsm2/U0sBRl8u3SqmwvF6bcZaXJ+EaMP08UQtBrSRwIz9NSkrPI8wHHKOEuBmwENrNV65c+fGPf/w62c1aZFeieQJMZ6Uze+3SjzzSkJcbrUqpx48fB0EAXQzqGYbW8zx5m1ZW+owCp0lBeY2+Kp0pQWRcXuyepmlArl9Br2cQD3tjlHlS3t0PSaC5u90ufOAJcw8khPzgXSoor+PPSm8VQRBsbW2lpX+0hHhmoYToxJ3Cer2Omhg3KZlBlaZpXF7PzFqKsx1IVvq6vgVKXE6PZlN8Zj1DZ6fd3V0ACgw5RCql8C1QmozwRKaaL01T3/chfHx8HJSOFzAApRYXFxG4iF2l1HA4BGcLvu8npavMuHQa2+/34TmOKEFJVlZW4PmQJAkCGv7C1IL98HT0LmQ5P4PSpwRYGtjMqPSvg83PSmcOcHTE9/04juGeepAW8EobztAMlsaVK1d+9KMfva5oHiuPrKHXoWIAABTFSURBVIYFWNIEK3RAeZ6z9z+MB92sffuJ47jRaFDFA5YJ6KqdnR0AH0ilyKN5ZWWF8cE5gMAKw5Ce+oAkEziWl5fR0gAEI7eQeEAzGf1qVKdmWdZoNJilAVMiL9faklHHRTHxhAlChqMu5ySaX0vdrM1q0tYuZQszmvv9PkMzLWIqC6T9EAPQDLeRK7LuBiMax/Fvf/tbGB7wDwLuzO7cubO3t/frX/+61WodHh72er2FhYVGowGeOw4ODn76058qYj3v7+8HpbM2pVSv19vc3Gw2m+BVZH19HRD56NEjcN9Eyw4Gg263u7i4CM5QGo1Go9FYX18Hi7nf73/00UcmSD19+hS3M0CpZ+V1o5999hmtKCs94lCzHiqq1+srKyvguOTRo0dJknied/v27aWlJfC0wpy2w9+lpSW84+snP/nJ64dmCVA73MeVoNDp5srpYWoMUJ7n8BZIFXNeOvnyff/GjRugRDFDXDobXVpaQlUKliuYwnEco0M0tGi90k8eRHqeB+jBgqjS0BiAzWHQjgsLC3jgMyIOmpIkuXnzJuSXaGZ31+KTJMsy8JqFqhftCoR7VPpYUaXBHZW+k1HHh6UTKq3djJbGa6mb3QE6QzTLqvVPAYOcoJtx90SRFyZ2RJg+xOH1qF6vp6M+GwFeWZaBpQFM2GlPVT648YUMIatGX9SiKAJuSqmDg4Og9PiG8QAsfDuU6wyodymgITNMRag6DEO8ZygMQ3DUB5Y0Mg+CIE1TeBlFgVEkOZHCMNSu0DG6kM/AJkSzCbIToBnIbjebpLLUxdBMrWd8dCLKKeLzPAeNjvgGPQ06dXV1lY0uKjlgSN8sKQrzcjsDlxewioy4VmdsaYCeooaFCzqLWHV0HiJzXJTE906cVNmoq2Nm9KvRxRO0m+nuCaPXCc12dpYkU+rEb4Emom+BanQjBtFsSmJDGJefjcRxDNsxmcEVmjYmN5+808IXObP9OTRRAM2o6SUrOjnZ2pyJtDs1TPi83At8vS0NU0kTO0tN54ZmpRRdb5YKWHtSmZklsyLLigR9OaPx7C8rPoGPFSkAaG4az5qfk2NMSHT3xKKbL4QmR7OFnSXpnHWz9kSoJXB2xGSQJK0FiyOViV0QWeYV5U/z00N5YIu/CSt0jrwmmwYzQTOtPRfnNLRDOy4a7OePpZ6bYMJI85elgmVPLRM7wwmaaREb0YyWxvkA2gUbRjSfqWSyilmhGcNKKUSzFh8W9cZWDBhVos09ib7q0TU1DGhf7xiaJ5AE+agqbc2SUDeD75zzRLMLTaubJ8Y9FjwtV+hMN3dNRnme+74P/t97vV632+2NErhxlzEAFHoYCP2eM8Js6Gsei2AGDFOGNPzw4UMtiNmRIxqvlIJSSingrMjkBFfyWBwzYB6Uh0ainLQIcHj06BGta2Fh4ULeAl0uKxsPzVPa04zzKdnhy8Q5jckeFMhzOBzirof0S6ClcS9z117vTonF0I/46S9dWsaAvI2ALlfLu/Xxjg5cvGPx2usQkvK6b7zQW3vXAl2h930f15tfszN02tyT1VEIw7oSzZM1CcsOh0O42STUOVljPqAqk6gnLzoBHKfKBISeo6hLPBQGFaQUTBtD82vbUkmssa/rCh3Fn8RiJcRN3OhfQLOpyLhNon9BSaPerencK0mqGTwpmVI94s5D4gCnhzbVFEn9g6AbEQjIslSMycCqJcpKovn9999/zdAsw1SnyiIShVr4sr9aNMt6tZPNXt1wOISDGRYLoeYMawkvCiM0MGoC9zTAwGcRDOtijnCoVBjW1o7VeaPzzRuFpvZx5JXu4dgUQvrggw/ekG9PJJoLg061t9OOZsncjmZtBtTNjsTGj2HF0/lWM5Wq6ZwCWqqWqRCD1YG1zTJDjVIqBk3Gk2K60g+ill5LNLPcpwYdXDhYCDIDRTN+5VpJdv4sjxKHjVJyD539gjl605zjlXPy/Qy+c5HvduwvexfUEuSEKyHxtZLdFukbCOebJ7yeaYnNXvaC63ne4uKiC8jOjcZAs4xnQJeRpvpYTEHQXIldyyzSijQrgoVV0xqi/NZrJpSPEo2kqTKnJOV25x1dWtZSSu4m7fV6M+zh6akazTTfqcHGsBTU1sdiCjc0W6o41c0xGZiGHLcJEIjuRdwrxbDW6xmrepp6X1OyoZnBlxWj5WeIZlOpsdoj54Bj8TOiydyU/PDDDycnJ2/9RbhTBZoLoe1MWD81K2yZh0lQiLdAKaVFeiYby+8yx948mkl7T3VPOe0gXhKyoZnmoOHpiUlQmNFsxyLt3EqZLcwt4r2mNNtW2Lldnh6D4bvUaC4M/UW5MbaXp38vkMbqBO24yF5lfT4rUWdFINt4axoMQy54HRfNJp728Nl1U3GJXdecEcnBOhXIvgi5bFSNZprPnewFGedi/N2TQvfQoAzPmSbAOi1iWaSzlNVmQA9rEws2Q6psyGxpPDQXBu1oB5AjmoMgsBfRCqnlDAFFnJtIQldLJhqOOmWjK75nRNrek/HD12QNztQ0Nt9ozpl8ruG6QlcJI1MFLmimK3QWSbTAlUlKKX8cb0uOhB7WAnI5Hd3bG5fo19eMdnZ22OlNLaVWMm2C4InqSqrcl8nJtg7+grIYTuGmsXKej43mQlhIdmydHZpZfgxI2SCsyq9cTQPZ7Xbp5hYNW5yvpaNu1/AvBLT75IBL05Y4oJkeRLajPyb3dbBDzxDGXXQ63yAMU9Gyfw73b8gJzGL88sJISKLb8pZSJkLxKCupI1z2HW1olhAxgd4FzYXQoyY0a2WobAkjpdT169fxhquc3JhP3ZfQVNRG1DlITj7zpO4/FHEdwpJy85UDzM0KftmBN/NSUVE2VgUtTuUHev78OWsd0r/+9a/j4+PBYAC/VKTj42OaBH8h9e9//zt+rgLxEM7z/LgkSIIPfOATnocPH/YEHR8f93q9r7/+ukvo8ePH9O/R0REEOp3O0dFRp9PpdDp37txpNpuVe0lOaJbQnAzNhdD0yD9NUxfdTGeFvWqwNPBZyZ6YavTQQj769duAuBvLR7/3dLkZQzLUxmBd9jx51dd7UniTVNq6cIbLKlgS7T010Qe8lgaq8msuU9L29nal+TEGmk15LFCWCGb4w7+VaB63XqWU7/sSl9Lmk72MKpYNnsS3ZO4+wJY8sgqaWYsqNktd5oDsEG3Vg1GXKC7MXdolGbIkJLAAFxcX8RVCKTUhmh3hZSqoRfOpmCoUzXYBaEwlmumNt1qIaMdjIC71olhhMdpRdxlRVpcps5QhF0Q5a9EsIWvipgSgtbqZ9oa2G5lG0JZiklgoTVN62DpN07HRTLXg6ejD/UzRPBNSpaUhx940ikqnexyHPNfpMBNA5ag7klaY3AHNJg5KQFY2jUHWBYW5uO+LSajtcAulaQrfE8DR6sTg6LsCzSYsViJYi2ZtANEcTHSfhlKq2+3mws+XUsr3fXiVob0mV6boqLDUvLzgR46EBLp9kExjPxaakZV25mgrpbVLmZUBlzS/1M2MG6tL+5dGToNmUM9pmlqQdlbnNExoLoSSpueb7RWxBgyHw1u3boXCw5rSeYrI8zwu79Bn5kRWOnbwPK/b7UJSVl4ai39xaDPz7YNqdBoow3UzpiFElIDfEyVAyQChTdJOHjkVlQ79DOisLtMcsOCSdZcSM1DbEJqUpun169cvGM2nowqYwZGh2Rce1tSokmD9iNTpdPDDuDiOsywbDodqVDfTbo2iKEkSpiEwHEXR0dERjfE8DwL40q3VQxNoWTs1Go2kvIrcor0gKSnd/FDIakW1w07p0Gyql1o1YxHOdu2skwR2M3xAPqHdPBM0m9gyzqr0JCm/ljMR3QLwRr9PDoIgjmNv9P5m7BpYjd/f309HbyOHQBAE4CcBKMsyz/MycuEQjgQdGxxaapag3YJJ7FJkrEI7hL1eT5o9QOzu06z0z6Kmm1RaxSFT8S9T27IhJqTKeFqW8cmyLEmSWnkdwlS6mWWlqZV4lcVZDNXclrXxE0J0Tx/+ttvt+fn5999///bt219++eWTJ09evHjR7XavX7/++PFjNhhKqTAM5+fn2+12r9dbWVlZX1+nyjUIAtDNWBBsj62trSAIPv30U7ptgQEYWsjm+/7y8nK9Xm82m81ms9Vq9fv9W7duNRoNdIbSarWUUr1e7xe/+EWj0dja2lpZWfF9f3NzEypttVofffQR2DwImm63W6/X6/X6xx9/vLCwsLOzMyjduHieB0m/+tWvcLuk2Wzu7OxsbW2Bi5OvvvpKKbWzs7OysrK8vNxsNiGpXq8/evQIS1HIDgaDdrtdr9c3Nze3trYajcby8vLKykqr1VpdXYWH1dbW1urqKr0KbG9vDzq22Wz2+/3Dw0MIQ4ZmswmXoUHmdrsNTlhWV1fBGY18RKdpWiOXe+zv72sPdbiiWSLYrqopTCWaLdlMM8GUlOf54eFhLnxSgU6VniJU6aMJewrNYqAgCNBuVqVuhr1cGDzt41gRBRyMup/Ksmx3dxfMG9z6DoIgTdMoitrtNjBJkoRJsru7i4ocagHLPk3Tfr+fkuv409I9HJ2ESZKEYUj37cHNhSof3HHp/QQAJO0uCITkwnOYNhjudDr4ZABR4U0DKw1LdxkJcYTVarWi0msWPCexbL1eVzpiuhnWNKSxYUOzBJwlm2UmsMroTKjEsRbNLtMA0Yw9goMEPYgKLxh1YMp0Mxj0sIAYRRF9xNMAzY/DiTw3NjbAfKKHEyDnwcFBJhwWAu3t7VE0K+JXBZjQd0RcjsTfMAy90r8JELogSojDHmZtM8rzHJ1jQH4UEtCMnZaW3ic8z8MjJfAODSYW2kKIZmgyzHM4x7K4uCgtMYlmsJvHRnNRZTc7YovVp2UrM5hSXepS5ZoGHRj4hWE+OjoCZIejzhbCMISkvFzOg/EADQTaSHY3ohCyUesZcJmUHkYUsaeTJFlfX1di8YSiGVmB/kYLHmBNK2XywM5ZRu4MQAGopqSamHYU9sDGxgZli28RURQdHBxg7fDCCk+YJEnwbGBCnBECZ4Zm9qakfYtIkoTeSDaJbraAyZTZEc32so4COKKZgQ9AQw+UoX6CPgWjIin9sVKQxXF848YNfHeUaIaHO+gbIMDE8fExrLeAEoKKQAndunWLqk8K1sXFRdBwaekhGLRySlxIIeZQO+7v78NsQWAhTzDWYVUH8qcGR/YU1ogwqKVWq6FubrVawA2e/oo8mtToFdRp6aJTKUX9c4alKzf4a7pUG9ebYS/wzNHsAmiXghhjEUZbSotmZViTyspjnxSXaO2B3ZyXK1+ow9I03d/fR+zS0crKG5fpQdA4jpkFAkQBmpW+2+LSjTHE48lPeBCjikI1Fpc+jGlSQDyygS6HSJjA8B6GhgqQaREQ+63ZbNJ1JLrCgxrB87yw9AALUxru5KWvKMgEbmPCzAFxk2zRzXRneyo0u0B5AjSbgKiti8UzHEsB4JnI9rHoUFksRbbIxTRxVnqMZCuG8g2GrgyY9F+9Xgfoh6X/YC0H+dKplZxZODhhgFAMiZjDw0PtpwCQSo9305OJqBHAkqFdBEe6aUUwb2Emwy8yh/goig4PD7VNAzRPZTe7oJniyZKHcih0+t4RzbIibcGi1M2m80MU3wzrEs0MWI5EB9KCZjAiqQJWAo65IDnflA7obAJYpkGr1dJepUefS6iGI+LVU1rbWv6mJEcCS2MGaLYgbAKSCB4LzY5CUjSbsGs/Gkah4DhC9oPF7MmgLWWpSzv3ZH6Je1bQ1IrKPZds9FpKe2ZH0hoVSteuWaJ5SviauM0EzbIskFLK87xnz57JngJsPX/+nA4zRfCzZ8/ozgj9TOPZs2d0PrBUuvuAHIBhPvrxCOakElJsaY9NylJ0E4fmp3+xafQvEnCAJrNWa2UejG4eIU/WFfDVjx3NtIuwoyCJvQ7u7+/LFboJd08sSHWBux2mLlA+taJZywfs5on96o1LVM1I1UI9pdJXN0fSqlUTDXTH6yr5K92zSNZreizInKznaau1gyKfipS0681ShQEMJkFzpSp1yVno3gLtkLXURbmp8tSROw5cyH164Iu/ImfotDgeF9wuBSt5zrZbJGmv0FXExK/kkBGK43ja3RN3eFkwXeis5MnqctHNGFBKwTIQLpYl5EZx+XG19qvsxPx9fyY+9oaPwFPxBXg6eg1AWnUrgIv+xm/RFZkklqlCGWqZuzggHIsompl4FneMTE4MJEmCzodmppstYQY1pnQl2jCDhYk7dqXMeZ7Dqic9YefpnHcw8nRuQUw5JyPT3fdIlV/tMzIdM8SlCcij9csWkZsP6LTHMDpfQ9XAdARVEKnhhgaLyqAxTFNgUhzHV69ePXNLww5EiWYJYhNGJyBWUVEUJycnSinYwdL69WCoxb1TiWbpncnTuTipnAOSrYvLs4ndotWEwzXKysSTZgBHb9o8V69enaDJ0mNQ5fxnUl0MmrXZ7ICuhDsDbmW2PM9BPTPtyAIM5b7OYY+2FBYBn1TaSSKHzT6KNLWmmzbUkxXLee3aNUdUeeKRZRHeGz1B7phU000YyHNllFgRGgN/L143a7NVotlFc5seBYxJUZocWuxSYklaNHtVDtEs/CnVzDiWHFhmyICHFhxrBLIrRSlVrfQBp81paoWJv0kMWgS61z4xvClP69thV4k/OwRZXSZuLNWSh9ZVlN4vA+G7iRqpLAZ9N8Ev2Kb2mUCJxluKyAysuD2ysgoTUSyaMGeaVCwzdXLFMtM5YJm9sgpTEp3AWZZNiOZKmM4KzafW+eOOZpoEf//3v/+91NF//vMfFvNCRy9fvvzuu+9evHjxnZX+8Y9/fPfdd99++61S6ttvv/3mm2/++c9/Pnny5Ntvv/3b3/72REeQ9E1JDx48gPgHDx588803f/7zn+/fv/+Xkh4Iun//Pv19+PDh/ZIgBunevXv37t27a6b9/f3PP/+cxmyXlCQJ/N3d3d3d3d020MYoffzxx2traxsbG2traxCA8MbGxocffojxt2/fht/l5eXbt29HUXT79u3bt2//zECrq6vLy8vHx8djo/ktvaXXkd6i+S29OfQWzW/pzaG3aH5Lbw79P+vOlcTl/p7tAAAAAElFTkSuQmCC" alt="" />

\linux-2.6.32.63\block\genhd.c

void add_disk(struct gendisk *disk)
{
struct backing_dev_info *bdi;
dev_t devt;
int retval; /* minors == 0 indicates to use ext devt from part0 and should
* be accompanied with EXT_DEVT flag. Make sure all
* parameters make sense.
*/
WARN_ON(disk->minors && !(disk->major || disk->first_minor));
WARN_ON(!disk->minors && !(disk->flags & GENHD_FL_EXT_DEVT)); disk->flags |= GENHD_FL_UP; retval = blk_alloc_devt(&disk->part0, &devt);
if (retval) {
WARN_ON();
return;
}
disk_to_dev(disk)->devt = devt; /* ->major and ->first_minor aren't supposed to be
* dereferenced from here on, but set them just in case.
*/
disk->major = MAJOR(devt);
disk->first_minor = MINOR(devt); //首先,调用blk_register_region,确认所要求的设备号范围尚未分配
blk_register_region(disk_devt(disk), disk->minors, NULL, exact_match, exact_lock, disk);
//在给内核对象提供了一个名字之后,调用bdget_disk获取了该设备的一个新的block_device实例
register_disk(disk);
blk_register_queue(disk); bdi = &disk->queue->backing_dev_info;
bdi_register_dev(bdi, disk_devt(disk));
retval = sysfs_create_link(&disk_to_dev(disk)->kobj, &bdi->dev->kobj,
"bdi");
WARN_ON(retval);
}

0x4: 打开块设备文件

在用户应用程序打开一个块设备的设备文件时,虚拟文件系统将调用file_operations结构的open函数,最终会调用了blkdev_open
\linux-2.6.32.63\fs\block_dev.c

aaarticlea/png;base64,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*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" alt="" />

static int blkdev_open(struct inode * inode, struct file * filp)
{
struct block_device *bdev;
int res; /*
* Preserve backwards compatibility and allow large file access
* even if userspace doesn't ask for it explicitly. Some mkfs
* binary needs it. We might want to drop this workaround
* during an unstable branch.
*/
filp->f_flags |= O_LARGEFILE; if (filp->f_flags & O_NDELAY)
filp->f_mode |= FMODE_NDELAY;
if (filp->f_flags & O_EXCL)
filp->f_mode |= FMODE_EXCL;
if ((filp->f_flags & O_ACCMODE) == )
filp->f_mode |= FMODE_WRITE_IOCTL; //bd_acquire首先找到与该设备匹配的block_device实例,如果设备已经使用过,指向该实例的指针可以直接从inode->i_bdev得到,否则需要使用dev_t信息创建实例
bdev = bd_acquire(inode);
if (bdev == NULL)
return -ENOMEM; filp->f_mapping = bdev->bd_inode->i_mapping; res = blkdev_get(bdev, filp->f_mode);
if (res)
return res; //如果设置了标志FMODE_EXCL来请求对块设备的独占访问,那么会调用bd_claim要求持有该块设备,这会将与设备文件关联的file实例设置为该块设备的当前持有者
if (filp->f_mode & FMODE_EXCL) {
res = bd_claim(bdev, filp);
if (res)
goto out_blkdev_put;
} return ; out_blkdev_put:
blkdev_put(bdev, filp->f_mode);
return res;
}

0x5: 请求结构

内核提供了数据结构以描述发送给块设备的请求
\linux-2.6.32.63\include\linux\blkdev.h

struct request
{
//发送给块设备的请求的一个特有性质就是,请求需要保存在请求队列上,这种队列使用双链表实现
struct list_head queuelist;
struct call_single_data csd;
int cpu; //IO请求request所形成的队列,在linux内核中struct request_queue描述,保存对设备的读写请求
struct request_queue *q; //cmd_flags包含了用于请求的一组通用标志
unsigned int cmd_flags;
/*
cmd_type表示请求的类型
enum rq_cmd_type_bits
{
REQ_TYPE_FS = 1, // fs request
REQ_TYPE_BLOCK_PC, // scsi command
REQ_TYPE_SENSE, // sense request
REQ_TYPE_PM_SUSPEND, // suspend request
REQ_TYPE_PM_RESUME, // resume request
REQ_TYPE_PM_SHUTDOWN, // shutdown request
REQ_TYPE_SPECIAL, // driver defined type
REQ_TYPE_LINUX_BLOCK, // generic block layer message
REQ_TYPE_ATA_TASKFILE,
REQ_TYPE_ATA_PC,
};
最常见的请求类型是REQ_TYPE_FS,它用于与块设备之间的实际数据传输
*/
enum rq_cmd_type_bits cmd_type;
unsigned long atomic_flags; /*
the following two fields are internal, NEVER access directly
特征数据,如扇区、块长度、设备容量
*/
sector_t __sector; /* sector cursor 需要传输的下一个扇区号 */
unsigned int __data_len; /* total data len */ /*
BIO用于在系统和设备之间传输数据
1. bio: 标识传输尚未完成的当前BIO实例
2. biotail: 指向最后一个BIO实例,因为一个请求中可使用多个BIO
*/
struct bio *bio;
struct bio *biotail; struct hlist_node hash; /* merge hash */
/*
* The rb_node is only used inside the io scheduler, requests
* are pruned when moved to the dispatch queue. So let the
* completion_data share space with the rb_node.
*/
union {
struct rb_node rb_node; /* sort/lookup */
void *completion_data;
}; /*
* two pointers are available for the IO schedulers, if they need
* more they have to dynamically allocate it.
函数指针,指向I/O调度器实现,用来重排请求的函数
类似于大多数内核数据结构,request也包含了指向私有数据的指针,elevator_private、elevator_private2它们可以通过当前处理请求的I/O调度器(电梯 elevator)设置
*/
void *elevator_private;
void *elevator_private2; struct gendisk *rq_disk;
unsigned long start_time; /* Number of scatter-gather DMA addr+len pairs after
* physical address coalescing is performed.
*/
unsigned short nr_phys_segments; unsigned short ioprio; void *special; /* opaque pointer available for LLD use */
char *buffer; /* kaddr of the current segment if available */ int tag;
int errors; int ref_count; /*
when request is used as a packet command carrier
请求可用于向设备传送控制命令,即请求可以用作"数据包命令载体(packet command carrier)",想要的命令在cms数组中列出
*/
unsigned short cmd_len;
unsigned char __cmd[BLK_MAX_CDB];
unsigned char *cmd; unsigned int extra_len; /* length of alignment and padding */
unsigned int sense_len;
unsigned int resid_len; /* residual count */
void *sense; unsigned long deadline;
struct list_head timeout_list;
unsigned int timeout;
int retries; /*
* completion callback.
*/
rq_end_io_fn *end_io;
void *end_io_data; /* for bidi */
struct request *next_rq;
};

0x6: BIO

我们接下来讨论BIO的实现原理

aaarticlea/png;base64,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" alt="" />

BIO的每个主要管理结构(bio)关联到一个向量(数组),各个数组项都指向一个内存页(指向对应于该页帧的page实例),这些页用于从设备接收数据、向设备发送数据

需要明白的是,这里显然可以使用高端内存域的页面,这些页帧无法直接映射到内核中,因为无法通过内核虚拟地址访问,对于BIO来说,该做法很有用,数据直接复制给用户空间应用程序,而应用程序可以使用页表访问高端内存域页帧

这些内存页可以但不必一定按连续方式组织,这简化了分散-聚集I/O操作的实现,BIO在内核源代码中对象的结构定义如下
\linux-2.6.32.63\include\linux\bio.h

struct bio
{
/* device address in 512 byte sectors 指定了传输开始的扇区号 */
sector_t bi_sector; /* request queue link 将与请求关联的几个BIO组织到一个单链表中 */
struct bio *bi_next; //bi_bdev是一个指针,指向请求所属设备的block_device数据结构
struct block_device *bi_bdev;
unsigned long bi_flags; /* status, command, etc */
unsigned long bi_rw; /* bottom bits READ/WRITE,
* top bits priority
*/ unsigned short bi_vcnt; /* how many bio_vec's bio_vec的数目 */
unsigned short bi_idx; /* current index into bvl_vec bi_io_vec数组中,当前处理数组项的索引 */ /* Number of segments in this BIO after
* physical address coalescing is performed.
bi_phys_segments指定了传输中段的数目,代表了I/O MMU重新映射之前的数值
*/
unsigned int bi_phys_segments;
/* residual I/O count 表示请求所涉及数据的长度,单位为字节 */
unsigned int bi_size; /*
* To keep track of the max segment size, we account for the
* sizes of the first and last mergeable segments in this bio.
*/
unsigned int bi_seg_front_size;
unsigned int bi_seg_back_size; unsigned int bi_max_vecs; /* max bvl_vecs we can hold */ unsigned int bi_comp_cpu; /* completion CPU */ atomic_t bi_cnt; /* pin count */ /*
the actual vec list
bi_io_vec是一个指向I/O向量的指针
struct bio_vec
{
struct page *bv_page; //bv_page指向用于数据传输的页对应的page实例
unsigned int bv_len; //bv_len指定了用于数据传输的字节数目(如果整页不完全填充的话)
unsigned int bv_offset; //bv_offset表示该页内的偏移量,通常该值为0,也为页边界通常用作I/O操作的边界
};
*/
struct bio_vec *bi_io_vec; //在硬件传输完成时,设备驱动程序必须调用bi_end_io,这使得块设备层有机会进行清理,或者唤醒等待该请求结束的睡眠进程
bio_end_io_t *bi_end_io; //通常BIO代码不会修改bi_private,该成员可用于驱动程序相关的信息
void *bi_private;
#if defined(CONFIG_BLK_DEV_INTEGRITY)
struct bio_integrity_payload *bi_integrity; /* data integrity */
#endif
/* destructor bi_destructor指向一个析构函数,在从内存删除一个bio实例之前调用 */
bio_destructor_t *bi_destructor; /*
* We can inline a number of vecs at the end of the bio, to avoid
* double allocations for a small number of bio_vecs. This member
* MUST obviously be kept at the very end of the bio.
*/
struct bio_vec bi_inline_vecs[];
};

0x7: 提交请求

我们接下来讨论内核将数据请求提交给外设的机制,这涉及以下几个知识

. 缓冲和请求的重排,以减少磁头寻道的移动
. 捆绑多个操作以提高性能
. 设备驱动程序的操作,驱动程序与具体的硬件交互以处理请求
. 虚拟文件系统中与设备文件相关的通用代码,这部分代码通过设备文件又关联到用户应用程序以及内核的其他部分,内核会将已经从块设备读取的数据保存在缓存中,以便在未来重复提交同样的请求时重用

我们接下来重点讨论内核如何向设备提交物理请求来读取和写入数据,内核分两个步骤提交请求

. 内核首先创建一个bio实例以描述请求,然后将该实例嵌入到请求中,并置于请求队列上
. 接下来内核将处理请求队列并执行bio中的操作

在BIO创建后,调用makre_request_fn产生一个新请求以插入到请求队列,请求通过request_fn提交

1. 创建请求

submit_bio是一个关键函数,负责根据传递的bio实例创建一个新请求,并使用generic_make_request将请求置于驱动程序的请求队列上
\linux-2.6.32.63\block

aaarticlea/png;base64,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*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" alt="" />

void submit_bio(int rw, struct bio *bio)
{
int count = bio_sectors(bio); bio->bi_rw |= rw; /*
* If it's a regular read/write or a barrier with data attached,
* go through the normal accounting stuff before submission.
*/
if (bio_has_data(bio)) {
if (rw & WRITE) {
count_vm_events(PGPGOUT, count);
} else {
task_io_account_read(bio->bi_size);
count_vm_events(PGPGIN, count);
} if (unlikely(block_dump)) {
char b[BDEVNAME_SIZE];
printk(KERN_DEBUG "%s(%d): %s block %Lu on %s\n",
current->comm, task_pid_nr(current),
(rw & WRITE) ? "WRITE" : "READ",
(unsigned long long)bio->bi_sector,
bdevname(bio->bi_bdev, b));
}
} generic_make_request(bio);
}
EXPORT_SYMBOL(submit_bio);

内核中的各个地方都会调用submit_bio函数发起物理数据传输,submit_bio只是更新内核的统计量,实际工作在generic_make_request中完成

static inline void __generic_make_request(struct bio *bio)
{
struct request_queue *q;
sector_t old_sector;
int ret, nr_sectors = bio_sectors(bio);
dev_t old_dev;
int err = -EIO; might_sleep(); if (bio_check_eod(bio, nr_sectors))
goto end_io; /*
* Resolve the mapping until finished. (drivers are
* still free to implement/resolve their own stacking
* by explicitly returning 0)
*
* NOTE: we don't repeat the blk_size check for each new device.
* Stacking drivers are expected to know what they are doing.
*/
old_sector = -;
old_dev = ;
do {
char b[BDEVNAME_SIZE]; //调用bdev_get_queue,找到该请求所涉及块设备的请求队列
q = bdev_get_queue(bio->bi_bdev);
if (unlikely(!q)) {
printk(KERN_ERR
"generic_make_request: Trying to access "
"nonexistent block-device %s (%Lu)\n",
bdevname(bio->bi_bdev, b),
(long long) bio->bi_sector);
goto end_io;
} if (unlikely(!bio_rw_flagged(bio, BIO_RW_DISCARD) &&
nr_sectors > queue_max_hw_sectors(q))) {
printk(KERN_ERR "bio too big device %s (%u > %u)\n",
bdevname(bio->bi_bdev, b),
bio_sectors(bio),
queue_max_hw_sectors(q));
goto end_io;
} if (unlikely(test_bit(QUEUE_FLAG_DEAD, &q->queue_flags)))
goto end_io; if (should_fail_request(bio))
goto end_io; /*
* If this device has partitions, remap block n
* of partition p to block n+start(p) of the disk.
如果该设备是分区的,则用blk_partition_remap重新映射该请求,以确保读写正确的区域
这使得内核的其余部分可以间各个分区当作独立的、非分区设备对待
如果分区起始于扇区m而将要访问分区内的扇区m,那么必须创建一个请求来访问块设备的扇区n+m
分区的正确偏移量,保存在与队列关联的gendisk实例的parts数组中
*/
blk_partition_remap(bio); if (bio_integrity_enabled(bio) && bio_integrity_prep(bio))
goto end_io; if (old_sector != -)
trace_block_remap(q, bio, old_dev, old_sector); old_sector = bio->bi_sector;
old_dev = bio->bi_bdev->bd_dev; if (bio_check_eod(bio, nr_sectors))
goto end_io; if (bio_rw_flagged(bio, BIO_RW_DISCARD) &&
!blk_queue_discard(q)) {
err = -EOPNOTSUPP;
goto end_io;
} trace_block_bio_queue(q, bio); //q->make_request_fn根据bio产生请求并发送给设备驱动程序,对大多数设备,发送操作调用内核的标准函数(__make_request)完成
ret = q->make_request_fn(q, bio);
} while (ret); return; end_io:
bio_endio(bio, err);
}

我们接着讨论make_request_fn的默认实现: __make_request

static int __make_request(struct request_queue *q, struct bio *bio)
{
struct request *req;
int el_ret;
unsigned int bytes = bio->bi_size;
const unsigned short prio = bio_prio(bio);
const bool sync = bio_rw_flagged(bio, BIO_RW_SYNCIO);
const bool unplug = bio_rw_flagged(bio, BIO_RW_UNPLUG);
const unsigned int ff = bio->bi_rw & REQ_FAILFAST_MASK;
int rw_flags; if (bio_rw_flagged(bio, BIO_RW_BARRIER) &&
(q->next_ordered == QUEUE_ORDERED_NONE)) {
bio_endio(bio, -EOPNOTSUPP);
return ;
}
/*
* low level driver can indicate that it wants pages above a
* certain limit bounced to low memory (ie for highmem, or even
* ISA dma in theory)
*/
blk_queue_bounce(q, &bio); spin_lock_irq(q->queue_lock); //在创建请求所需信息已经从传递的bio实例读取之后,内核调用elv_queue_empty检查I/O调度器队列当前是否为空,用于实现请求重排
if (unlikely(bio_rw_flagged(bio, BIO_RW_BARRIER)) || elv_queue_empty(q))
goto get_rq; /*
如果队列中有待决请求,则调用elv_merge,该函数会进一步调用请求队列elevator成员的elvator_merge_fn函数
它返回一个指针,指向请求链表中需要插入新请求的位置。I/O调度器还指定了请求是否以及如何与现存请求合并
1. ELEVATOR_BACK_MERGE、ELEVATOR_FRONT_MERGE: 使新请求与请求链表中找到的请求合并
2. ELV_NO_MERGE: 发下该请求无法与请求队列上现存的请求合并,因而该请求必须添加到请求队列中
*/
el_ret = elv_merge(q, &req, bio);
switch (el_ret)
{
case ELEVATOR_BACK_MERGE:
BUG_ON(!rq_mergeable(req)); if (!ll_back_merge_fn(q, req, bio))
break; trace_block_bio_backmerge(q, bio); if ((req->cmd_flags & REQ_FAILFAST_MASK) != ff)
blk_rq_set_mixed_merge(req); req->biotail->bi_next = bio;
req->biotail = bio;
req->__data_len += bytes;
req->ioprio = ioprio_best(req->ioprio, prio);
if (!blk_rq_cpu_valid(req))
req->cpu = bio->bi_comp_cpu;
drive_stat_acct(req, );
if (!attempt_back_merge(q, req))
elv_merged_request(q, req, el_ret);
goto out; case ELEVATOR_FRONT_MERGE:
BUG_ON(!rq_mergeable(req)); if (!ll_front_merge_fn(q, req, bio))
break; trace_block_bio_frontmerge(q, bio); if ((req->cmd_flags & REQ_FAILFAST_MASK) != ff) {
blk_rq_set_mixed_merge(req);
req->cmd_flags &= ~REQ_FAILFAST_MASK;
req->cmd_flags |= ff;
} bio->bi_next = req->bio;
req->bio = bio; /*
* may not be valid. if the low level driver said
* it didn't need a bounce buffer then it better
* not touch req->buffer either...
*/
req->buffer = bio_data(bio);
req->__sector = bio->bi_sector;
req->__data_len += bytes;
req->ioprio = ioprio_best(req->ioprio, prio);
if (!blk_rq_cpu_valid(req))
req->cpu = bio->bi_comp_cpu;
drive_stat_acct(req, );
if (!attempt_front_merge(q, req))
elv_merged_request(q, req, el_ret);
goto out; /* ELV_NO_MERGE: elevator says don't/can't merge. */
default:
;
}
...

这是I/O调度器可以采取的仅有的一些操作,它不能以任何其他方法影响请求队列,从这点也可以看出I/O调度器和CPU调度器之间的差别,尽管两者都面临一个非常类似的问题,但是它们提供的解决方案差别很大
在满足I/O调度器的需求之后,内核必须产生一个新请求,内核会汇集读写操作的请求,并一次性执行收集到的所有请求

2. 队列插入

就性能角度考虑而言,我们希望重排各个请求,并将可能的请求合并为更大的请求,以提升数据传输的性能,显然,这只适用于队列包含了多个可以合并的请求的情况,因此,内核首先需要在队列中汇集一些请求,然后一次性处理所有请求,这样就自动创造了合并请求的时机,这是一种基于cache的请求重排优化思想
内核使用队列插入(queue plugging)机制,来有意阻止请求的处理,请求队列可能处于空闲状态或者插入状态

. 如果队列处于空闲状态,队列中等待的请求将会被处理
. 如果队列处于插入状态,新的请求只是添加到队列,但并不处理,request_queue的queue_flags成员中QUEUE_FLAG_PLUGGED标识置位

内核用blk_plug_device插入一个队列,但如果没有发送同步请求,则不会显示拔出队列,内核通过blk_plug_device确保队列将在未来的某个时间再次得到处理
\linux-2.6.32.63\block\blk-core.c

void blk_plug_device(struct request_queue *q)
{
WARN_ON(!irqs_disabled()); /*
* don't plug a stopped queue, it must be paired with blk_start_queue()
* which will restart the queueing
*/
if (blk_queue_stopped(q))
return; if (!queue_flag_test_and_set(QUEUE_FLAG_PLUGGED, q)) {
mod_timer(&q->unplug_timer, jiffies + q->unplug_delay);
trace_block_plug(q);
}
}
EXPORT_SYMBOL(blk_plug_device);

这段代码确保队列的拔出定时器在q->unplug_delay(单位是jiffies: (3 * HZ) / 1000、3ms)之后启用,定时器会调用blk_unplug_timeout拔出队列
除此之外还有另一种机制可用于拔出队列,如果当前读写请求的数目(保存在请求链表的count数组的两个数组项中)达到unplug_thresh指定的阀值,则elv_insert中调用__generic_unplug_device以触发拔出操作,使得等待的请求得到处理
在重要的I/O操作处于待决状态时,内核还能够手工进行拔出操作,这确保在数据紧急需要时,能够立即执行重要的读取操作,在出现同步请求时,就会发生这种情况

3. 执行请求

在请求队列中的请求即将处理时,会调用特定于设备的request_fn函数,该任务与硬件的关联非常紧密,因此内核不会提供默认的实现,因此,内核总是调用blk_dev_init注册队列时传递的方法
下面使用一个简单的硬件无关示例例程,用于说明所有驱动程序在request_fn中所执行的基本步骤

void sample_request(request_queue_t *q)
{
int status;
struct request *req; //在while循环中嵌入了elv_next_request,用于从队列顺序读取请求
while((req = elv_next_request(q)) != NULL)
{
if(!blk_fs_request(req))
{
//end_request是一个标准的内核函数,用于从请求队列删除请求,并更新内核统计量,并执行任何在request->completion等待的完成量
end_request(req, );
}
continue;
}
//传输通过perform_sample_transfer执行
status = perform_sample_transfer(req);
end_request(req, status);
}

BIO不仅可用于传输数据,还可以传输诊断信息,驱动程序必须调用blk_fs_request来检查实际上传输的是否是数据,在真正的驱动程序中,特定于硬件的操作通常会分离到独立的函数中,以保持代码的简洁

int perform_sample_transfer(request *req)
{
//在判断请求是读操作还是写操作时,会查看cmd字段,然后采取对应的的行动,在系统和硬件之间传输数据
switch(req->cmd)
{
case READ:
//执行特定于硬件的数据读取功能
break;
case WRITE:
//执行特定于硬件的数据写入功能
break;
default:
return -EFAULT;
}
}

0x8: I/O调度

内核采用的各种用于调度和重排I/O操作的算法,称之为I/O调度器(对比通常的进程调度器、网络中控制通信数据量的数据包调度器),通常,I/O调度器也称作电梯(elevator),它们由下列数据结构中的一组函数表示
\linux-2.6.32.63\include\linux\elevator.h

struct elevator_ops
{
//elevator_merge_fn检查一个新的请求是否可以与现存的请求合并,它还指定了请求插入到队列中的位置
elevator_merge_fn *elevator_merge_fn;
elevator_merged_fn *elevator_merged_fn; //elevator_merge_req_fn将两个请求合并而一个请求
elevator_merge_req_fn *elevator_merge_req_fn;
//elevator_allow_merge_fn在两个请求已经合并后调用,它执行清理工作,并返回I/O调度器中因为合并而不再需要的那部分管理数据
elevator_allow_merge_fn *elevator_allow_merge_fn; //elevator_dispatch_fn从给定的请求队列中选择下一步应该调度执行的请求
elevator_dispatch_fn *elevator_dispatch_fn; //elevator_add_req_fn负责向请求队列添加请求、删除请求
elevator_add_req_fn *elevator_add_req_fn;
elevator_activate_req_fn *elevator_activate_req_fn;
elevator_deactivate_req_fn *elevator_deactivate_req_fn; //elevator_queue_empty_fn检查队列是否包含可供处理的请求
elevator_queue_empty_fn *elevator_queue_empty_fn;
elevator_completed_req_fn *elevator_completed_req_fn; elevator_request_list_fn *elevator_former_req_fn;
elevator_request_list_fn *elevator_latter_req_fn; //elevator_set_req_fn用于在创建新请求内存管理子系统调用
elevator_set_req_fn *elevator_set_req_fn;
//elevator_put_req_fn用于在释放会内存管理子系统调用
elevator_put_req_fn *elevator_put_req_fn; elevator_may_queue_fn *elevator_may_queue_fn; //elevator_init_fn在队列初始化时调用,效果等同于构造函数
elevator_init_fn *elevator_init_fn;
//elevator_exit_fn在队列释放时调用,效果等同于析构函数
elevator_exit_fn *elevator_exit_fn;
void (*trim)(struct io_context *);
};

I/O调度器不仅负责请求重排,还负责请求队列全部的管理工作,每个I/O调度器都封装在下列数据结构中,其中还包含了供内核使用的其他管理信息
\linux-2.6.32.63\include\linux\elevator.h

struct elevator_type
{
struct list_head list;
struct elevator_ops ops;
struct elv_fs_entry *elevator_attrs;
char elevator_name[ELV_NAME_MAX];
struct module *elevator_owner;
};

内核将所有I/O调度器在一个标准的双链表中维护,链表元素是list成员(表头由全局变量elv_list表示),还对每个I/O调度器都给出了一个可理解的名称,用于从用户空间选择I/O调度器。sysfs中的属性将会保存在elevator_attrs中,它们可用于以磁盘为单位来微调I/O调度器的行为
内核实现了一些列的I/O调度器,但设备驱动程序可以根据自身的需要修改调度器的特定函数、或者自行实现调度器,I/O调度器有下列属性

. elevator_noop
是一个非常简单的I/O调度器,将新来的请求按"先来先服务"的原则一次添加到队列,以便进行处理,请求会进行合并但无法重排。noop(no operation 空操作)I/O调度器仅对于能够自行重排请求的智能硬件,才是一个好的选择,对于没有活动部件的设备(因而没有寻道时间),如闪存盘,该调度器也是很好的 . iosched_deadline
它用于两个目的
) 试图最小化磁盘寻道(即读写磁头的移动)的次数,需要使用冗长的数据结构(红黑树和链表)分析各个请求,并按照最低延迟的原则来重排请求,以降低磁盘寻道的次数
) 尽可能确保请求在一定时间内处理完成,会使用内核的定时器机制实现单个请求的"到期时间" . iosched_as
实现了预测调度器,它会尽可能预测进程的行为,该调度器假定读请求不是彼此完全独立的,在此前提下试图实现预测调度,在应用程序向内核提交一个读请求时,该调度器会作出以下假设: 在一定时间内会有另一个相关请求提交。如果读请求在磁盘忙于写操作期间提交,那么这个假定就很重要。为确保良好的交互行为,内核会延迟写操作,并优先选择读操作,如果第一个读请求之后立即恢复写操作,则需要一个磁盘寻道操作,而稍后会有另一个新的读请求到达,这又浪费了寻道操作的效果。在这种情况下,较好的选择是在第一个读请求完成之后不立即移动磁头,暂时hold住紧接的写请求,而等待稍后的下一个读请求到达,如果在预期时间内第二个读请求没有到达,内核就可以恢复写操作 . iosched_cfg
提供了完全公平排队(completel fairness queuing)的特性,它围绕几个队列展开,所有的请求都在这些队列中排序,同一给定进程的请求,总是在同一队列中处理。时间片会分配到每个队列,内核使用一个轮转算法来处理各个队列,这确保了I/O带宽以公平的方式在不同队列之间共享。如果队列的数目大于等于同时进行I/O的进程数目,这就意味着I/O带宽也公平地分配到了各个进程上

0x9: ioctl的实现

ioctl使得我们能够使用特殊的、特定于设备的功能,这些功能无法通过普通的读写操作访问,这种支持ioctl系统调用实现,该系统调用可以用于普通的文件。该系统调用在sys_ioctl实现,但主要工作由vfs_ioctl完成
\linux-2.6.32.63\fs\ioctl.c

static long vfs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
int error = -ENOTTY; if (!filp->f_op)
goto out; if (filp->f_op->unlocked_ioctl) {
error = filp->f_op->unlocked_ioctl(filp, cmd, arg);
if (error == -ENOIOCTLCMD)
error = -EINVAL;
goto out;
} else if (filp->f_op->ioctl) {
lock_kernel();
//调用file_operations中特定于文件的ioctl函数(如果存在的话)以处理该ioctl(普通文件通常不提供ioctl函数,这样该系统调用会返回错误码)
error = filp->f_op->ioctl(filp->f_path.dentry->d_inode, filp, cmd, arg);
unlock_kernel();
} out:
return error;
}

7. 资源分配

I/O端口和I/O内存是两种概念上的方法,用以支持设备驱动程序和设备之间的通信。为使得各种不同的驱动程序彼此互补干扰,需要事先为驱动程序分配端口和I/O内存范围,这确保几种设备驱动程序不会试图访问同样的资源

0x1: 资源管理

1. 树数据结构

Linux提供了一个通用构架,用于在内存中构建数据结构,这些结构描述了系统中可用的资源,使得内核代码能够管理和分配资源,其中关键的数据结构是resource
\linux-2.6.32.63\include\linux\ioport.h

struct resource
{
/*
start、end指定了一个一般性的区域,尽管理论上这两个数字的内容可以*解释,但通常表示某个地址空间中的一个区域
*/
resource_size_t start;
resource_size_t end; //name存储了一个字符串,以便给资源赋予一个有意义的名字,资源名称实际上与内核无关,但在proc文件系统中以可读形式输出资源列表给管理员看时比较有用
const char *name; //flags用于更准确地描述资源及当前状态
unsigned long flags; //父、兄弟、子节点指针能够建立一个树形层次结构
struct resource *parent, *sibling, *child;
};

用于连接parent、child、sibling成员的规则很简单

. 每个子节点只有一个父节点
. 每个父节点可以有任意数目的子节点
. 同一个父节点的所有子节点,会连接到兄弟结点的链表上

在内存中表示数据结构时,必须要注意以下问题

. 尽管每个子节点都有一个指针指向父节点,但父节点只有一个指针指向第一个子节点,所有其他子节点都通过兄弟结点链表访问
. 指向父节点的指针同样可以为NULL,在这种情况下,说明已经没有更高层次的结点了

2. 请求和释放资源

为确保可靠地配置资源(无论何种类型),内核必须提供一种机制来分配和释放资源,一旦资源已经分配,则不能由任何其他驱动程序使用,请求和释放资源,本质上就是从资源树中添加和删除项

. 请求资源
内核提供了__reques_resource函数,用于请求一个资源区域
static struct resource * __request_resource(struct resource *root, struct resource *new)
//在扫描特定父节点的子节点时,只会在一个层次上扫描兄弟结点链表,内核不会扫描更底层子节点的链表 . 释放资源
调用release_resource函数释放使用中的资源
int release_resource(struct resource *old)

0x2: I/O内存

资源、管理的一个很重要的方面就是I/O内存的分配方式,因为在所有平台上这都是与外设通信的主要方法(IA-32除外,其中I/O端口更重要)。I/O内存不仅包括与扩展设备通信直接使用的内存区域,还包括系统中可用的物理内存和ROM存储器,以及包含在资源列表中的内存

zhenghan.zh@miser010249213142.yh $ cat /proc/iomem
-0009dbff : System RAM
0009dc00-0009ffff : reserved
000a0000-000bffff : Video RAM area
000c0000-000c8bff : Video ROM
000c9000-000c97ff : Adapter ROM
000c9800-000cb9ff : Adapter ROM
000f0000-000fffff : System ROM
-dfffcfff : System RAM
-0047dd90 : Kernel code
0047dd91-005c075f : Kernel data
dfffd000-dfffffff : reserved
f0000000-f1ffffff : ::02.0
f2000000-f2000fff : ::02.0
f2010000-f201ffff : ::02.0
f2020000-f2020fff : ::03.0
f2020000-f2020fff : virtio-pci
f2030000-f203ffff : ::03.0
f2040000-f2040fff : ::04.0
f2040000-f2040fff : virtio-pci
fffbc000-ffffffff : reserved
-2132fffff : System RAM

所有分配的I/O内存地址,都通过一棵资源树管理,树的根节点是全局内核变量iomem_resource

aaarticlea/png;base64,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*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" alt="" />

但在使用I/O内存时,分配内存区域并不是所需的唯一操作,取决于总线系统和处理器类型,可能必需将扩展设备的地址空间映射到内核地址空间之后,才能访问该设备(称之为软件I/O映射),这是通过使用ioremap内核函数适当设置系统页表而实现的,内核源代码中有若干不同地方使用了该函数,其定义是体系结构相关的,同样的,还提供了特定于体系结构的iounmap函数来解除映射
总体来说,实现对进程页表的操作较为复杂,不同系统的实现有很大差别,更重要的是,将一个物理地址映射到处理的虚拟地址空间中,使得内核可以使用该地址,就设备驱动程序而言,这意味着扩展总线的地址空间映射到CPU的地址空间中,使得能够用普通内存访问函数操作总线/设备
0x3: I/O端口

I/O端口是一种与设备和总线通信的常用方法,特别是在IA-32平台上,类似于I/O内存,按良好范例编写的驱动程序在访问所需的区域之前,相应的区域必须已经注册
\linux-2.6.32.63\kernel\resource.c中的ioport_resource充当资源树的根节点,proc文件系统中的ioports文件可以显示已经分配的端口地址

root@iZ231vybmaeZ:/usr/local/aegis/aegis_client/aegis_00_73# cat /proc/ioports
-0cf7 : PCI Bus :
-001f : dma1
- : pic1
- : timer0
- : timer1
- : keyboard
- : keyboard
- : rtc0
-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
- : ::01.1
- : ata_piix
01f0-01f7 : ::01.1
01f0-01f7 : ata_piix
- : ::01.1
- : ata_piix
03c0-03df : vga+
03f2-03f2 : floppy
03f4-03f5 : floppy
03f6-03f6 : ::01.1
03f6-03f6 : ata_piix
03f7-03f7 : floppy
04d0-04d1 : pnp :
08a0-08a3 : pnp :
0cc0-0ccf : pnp :
0cf8-0cff : PCI conf1
0d00-ffff : PCI Bus :
10c0- : pnp :
1f40-1f7f : ::01.3
1f40-1f43 : ACPI PM1a_EVT_BLK
1f44-1f45 : ACPI PM1a_CNT_BLK
1f48-1f4b : ACPI PM_TMR
1f68-1f6f : ACPI GPE0_BLK
b010-b015 : ACPI CPU throttle
b044-b047 : pnp :
c000-c0ff : ::03.0
c000-c0ff : xen-platform-pci
c100-c11f : ::01.2
c100-c11f : uhci_hcd
c120-c12f : ::01.1
c120-c12f : ata_piix

在汇编程序层次上,端口通常必须通过特殊的处理器命令访问,因此内核提供了对应的宏,以便向驱动程序开发者提供一个系统无关的接口

. insb(port, addr, num)
. insl(port, addr, num)
//从端口port读取num个字节、字、或长整数,复制到普通地址空间中的地址addr
. insw(port, addr, num) . outsb(port, addr, num)
. outsl(port, addr, num)
. outsw(port, addr, num)

8. 总线系统

尽管扩展设备通过设备驱动程序处理,而驱动程序与内核其余的代码通过一组固定的接口通信,因此扩展设备/驱动程序对核心的内核源代码没有太多影响,但内核需要解决一个更基本的问题: 设备如何通过总线附接到系统的其余部分
与具体设备的驱动程序相比,总线驱动程序与核心内核代码的工作要密切得多,另外,总线驱动程序向相关的设备驱动程序提供功能和选项的方式,也不存在标准的接口,这是因为,不同的总线系统之间,使用的硬件技术可能差异很大。但这并不意味着负责管理不同总线的代码没有共同点,而是相似的总线采用相似的概念,还引入了通用驱动程序模型,在一个主要数据结构的集合中管理所有系统总线,采用最小分母的方式,尽可能降低不同总线驱动程序之间的差异
内核支持大量总线,可能涉及多种硬件平台,也可可能只涉及一种平台,我们着重讨论PCI总线,它几乎具备一种强大的系统总线所应有的所有共同和关键要素,在Linux支持的大都数体系结构上都使用了PCI总线

0x1: 通用驱动程序模型

现代总线系统在布局和结构的细节上可能有所不同,但也有许多共同之处,内核的数据结构很好地反映了这个事实,结构中的许多成员用于所有的总线(以及相关设备的数据结构中),在Linux Kernel 2.6开发期间,一个通用驱动程序模型(device model 设备模型)并入内核,以防止不必要的复制,所有总线共有的属性封装到特殊的、可以通用方法处理的数据结构中,在关联到总线相关的成员

1. 设备的表示

驱动程序模型采用一种特殊数据结构来表示几乎所有总线类型通用的设备属性,该结构直接嵌入到特定于总线的数据结构中,而不是通过指针引用,这和Linux内核的kobject类似,定义如下
\linux-2.6.32.63\include\linux\device.h

struct device
{
//兄弟结点链表中的结点
struct device *parent; struct device_private *p; //嵌入的kobject控制通用对象属性
struct kobject kobj;
const char *init_name; /* initial name of the device */
struct device_type *type; struct semaphore sem; /* semaphore to synchronize calls to its driver. */ /* type of bus device is on 所在总线设备的类型 */
struct bus_type *bus; /*
which driver has allocated this device
分配当前device实例的驱动程序
*/
struct device_driver *driver; /*
Platform specific data, device core doesn't touch it
特定于平台的数据,设备模型代码不会访问
*/
void *platform_data;
struct dev_pm_info power; #ifdef CONFIG_NUMA
int numa_node; /* NUMA node this device is close to */
#endif
u64 *dma_mask; /* dma mask (if dma'able device) */
u64 coherent_dma_mask;/* Like dma_mask, but for
alloc_coherent mappings as
not all hardware supports
64 bit addresses for consistent
allocations such descriptors. */ struct device_dma_parameters *dma_parms; struct list_head dma_pools; /* dma pools (if dma'ble) */ struct dma_coherent_mem *dma_mem; /* internal for coherent mem
override */
/* arch specific additions */
struct dev_archdata archdata; dev_t devt; /* dev_t, creates the sysfs "dev" */ spinlock_t devres_lock;
struct list_head devres_head; //klist_node是list_head的数据结构的增强版,其中增加了与锁和引用计数相关的成员,这种类型的链表只用于通用设备模型,内核的其余部分不会使用
struct klist_node knode_class;
struct class *class;
const struct attribute_group **groups; /* optional groups */ void (*release)(struct device *dev);
};

内核提供了一个标准函数device_register,用于将一个新设备添加到内核的数据结构,通用驱动程序模型也为设备驱动单独设计了一种数据结构

struct device_driver
{
//指向一个字符串,用于唯一标识该驱动程序
const char *name; //bus指向一个表示总线的对象,并提供特定于总线的操作
struct bus_type *bus; struct module *owner;
const char *mod_name; /* used for built-in modules */ bool suppress_bind_attrs; /* disables bind/unbind via sysfs */ int (*probe) (struct device *dev);
int (*remove) (struct device *dev);
void (*shutdown) (struct device *dev);
int (*suspend) (struct device *dev, pm_message_t state);
int (*resume) (struct device *dev);
const struct attribute_group **groups; const struct dev_pm_ops *pm; struct driver_private *p;
};

2. 总线的表示

通用驱动程序模型不仅表示了设备,还用另一个数据结构表示了总线

struct bus_type
{
//name表示总线的名称,它用于早isysfs文件系统中标识该总线
const char *name;
struct bus_attribute *bus_attrs;
struct device_attribute *dev_attrs;
struct driver_attribute *drv_attrs; int (*match)(struct device *dev, struct device_driver *drv);
int (*uevent)(struct device *dev, struct kobj_uevent_env *env);
int (*probe)(struct device *dev);
int (*remove)(struct device *dev);
void (*shutdown)(struct device *dev); int (*suspend)(struct device *dev, pm_message_t state);
int (*resume)(struct device *dev); const struct dev_pm_ops *pm; struct bus_type_private *p;
};

3. 注册过程

设备、设备驱动程序的各个数据结构之间彼此关联

1. 注册总线

在可以注册设备及其驱动程序之前,需要有总线,因此需要通过bus_register开始,该函数向系统添加一个新总线
\linux-2.6.32.63\drivers\base\bus.c

int bus_register(struct bus_type *bus)
{
int retval;
struct bus_type_private *priv; priv = kzalloc(sizeof(struct bus_type_private), GFP_KERNEL);
if (!priv)
return -ENOMEM; priv->bus = bus;
bus->p = priv; BLOCKING_INIT_NOTIFIER_HEAD(&priv->bus_notifier); retval = kobject_set_name(&priv->subsys.kobj, "%s", bus->name);
if (retval)
goto out; /*
首先,通过嵌入的kset类型成员的subsys,将新总线添加到总线子系统
总线需要了解相关设备机器驱动程序的所有有关信息
*/
priv->subsys.kobj.kset = bus_kset;
priv->subsys.kobj.ktype = &bus_ktype;
priv->drivers_autoprobe = ; retval = kset_register(&priv->subsys);
..
}

2. 注册设备

注册设备包括两个独立的步骤

. 初始化设备的数据结构: device_initialize
. 将其加入到数据结构的网络中: device_add

3. 注册设备驱动程序

在进行一些检查和初始化工作之后,driver_register调用bus_add_driver将一个新驱动程序添加到一个总线

int bus_add_driver(struct device_driver *drv)
{
struct bus_type *bus;
struct driver_private *priv;
int error = ; bus = bus_get(drv->bus);
if (!bus)
return -EINVAL; pr_debug("bus: '%s': add driver %s\n", bus->name, drv->name); priv = kzalloc(sizeof(*priv), GFP_KERNEL);
if (!priv) {
error = -ENOMEM;
goto out_put_bus;
}
klist_init(&priv->klist_devices, NULL, NULL);
priv->driver = drv;
drv->p = priv;
priv->kobj.kset = bus->p->drivers_kset;
//驱动程序首先要有名字
error = kobject_init_and_add(&priv->kobj, &driver_ktype, NULL, "%s", drv->name);
if (error)
goto out_unregister; //如果总线支持自动探测,则调用driver_attach,该函数迭代总线上的所有设备,使用驱动程序的match函数进行检测,确定是否有某些设备可使用该驱动程序管理
if (drv->bus->p->drivers_autoprobe)
{
error = driver_attach(drv);
if (error)
goto out_unregister;
}
//将该驱动程序添加到总线上注册的所有驱动程序的链表中
klist_add_tail(&priv->knode_bus, &bus->p->klist_drivers);
module_add_driver(drv->owner, drv); error = driver_create_file(drv, &driver_attr_uevent);
if (error) {
printk(KERN_ERR "%s: uevent attr (%s) failed\n",
__func__, drv->name);
}
error = driver_add_attrs(bus, drv);
if (error) {
/* How the hell do we get out of this pickle? Give up */
printk(KERN_ERR "%s: driver_add_attrs(%s) failed\n",
__func__, drv->name);
} if (!drv->suppress_bind_attrs) {
error = add_bind_files(drv);
if (error) {
/* Ditto */
printk(KERN_ERR "%s: add_bind_files(%s) failed\n",
__func__, drv->name);
}
} kobject_uevent(&priv->kobj, KOBJ_ADD);
return ; out_unregister:
kfree(drv->p);
drv->p = NULL;
kobject_put(&priv->kobj);
out_put_bus:
bus_put(bus);
return error;
}

0x2: PCI总线

PCI(peripheral component interconnect)是英特尔公司开发的一种标准总线,它迅速在系统组件和体系结构厂商中确立了标准地位,成为一种非常流行的总线,它成功替代了ISA总线

1. PCI系统的布局

在讨论内核中PCI的实现之前,我们先来了解一下PCI总线的主要原理,系统的某个PCI总线上的每个设备,都由一组3个编号标识

. 总线编号(bus number)
该设备所在总线的编号(从0开始计数),PCI规范准许每个系统最多255个总线 . 插槽编号(slot number)
总线内部的一个唯一标识编号,一个总线最多能够附接32个设备,不同总线上的设备插槽编号可能相同 . 功能编号(function number)
用于在一个扩展卡上,实现包括多个(经典意义上)扩展设备的设备,例如为了节省空间,可以将两个网卡放置在一块扩展卡上,在这种情况下通过不同的功能编号来指定不同的接口。这种情况在笔记本中的多功能芯片组常出现,这些芯片组附接到PCI总线,以最小的空间集成了一整套扩展设备(IDE控制器、USB控制器、调制解调器、网络..),这些扩展设备必须通过功能编号进行区分,PCI标准将一个设备上功能部件的最大数目定义为8

每个设备都通过一个16位编号唯一地标识,其中8bit用于总线编号,5bit用于插槽编号,3bit用于功能编号,驱动程序无需费力处理这些极其紧凑的记法,内核建立了一个数据结构的网络,其中也包含了同样的信息,从C语言的角度来处理这些编号

1. 地址空间

有3个地址空间支持与PCI设备的通信

. I/O空间通过32个比特位描述,因此,对用于与设备通信的端口地址,提供了最大4GB的空间
. 取决于处理器类型,数据空间由32bit、64bit描述
//系统中的设备分配到上述两个地址空间中,因而有唯一的地址
. 配置空间包含了各个设备的类型和特征的详细信息,以省去危险的自动探测工作

这些地址空间会根据处理器类型映射到系统虚拟内存中的不同位置,使得内核和设备驱动程序能够访问对应的资源
2. 配置信息

与古老的总线相比,PCI总线是一种无跳线系统,即扩展设备能够完全通过软件手段配置,而无需用户干涉,为支持这种配置,每个PCI设备都有一个256字节长的配置空间,其中包括该设备的特点和要求的有关信息

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjIAAADZCAIAAAC1sk1mAAAgAElEQVR4nOx9X2hkyXX+POyL2IDCJjQxQUseOoGgyeJwB/ahGTbhioknkhh7uy02oVdiJ9MSa0cSkyzdVtYgKXaMrjbjkBaztqkemODpYbwEFUsCGg/BpjNgw87kwVyQjUHkYV+awD7pZZ96fg/f7x6fPqeq7u1Wz+za7HlobtetOnXqVNX56tS/e24wGDx58gS/mgaMnNFEiIjPA3WEMIUl8eWVGz8cM1eesWX2xSyYe5Ecz8jnjJI87awLtiVd9c7AQPvxhRQUsnjkSVGgzfPi66LRXx6uH3Jp8Im2n2dGushahyK+85mHOJtZuDU6kwTSilcBhkLUJ65mk6sckdBXTJ8y8XDO9yKQTYB8CgoXKaxcH+dRuTnVMR5PX8yRpJoIjaFbH5+JyHP2rHOLI5qrj89IzJ2tYrx2Wzzy0yMueW65fGrUfTDQjz4lBX8GpLXhVO9AmZ0AE6HGsLb120Gw1pyS+Bg6YwrOoiDhQgWYByI4YEkLVLAwWmLfq1wKcHO+LcLNqZSRpOIMx0s4cQpXwUh8JivY2Fn7JBG1X7CwBcvl5DmGSj89DWMQ7ICiLwxGsS9Ozp+qgj8lctqQgVJmQEsUZ8A0Fkii4/jeaiF9gb6MfGydchZUVJh5gEKwlJulSOWLWbAY4ZAzUkApE8xiUqxGzVfUyCciRi6dUdvOVlqwdT0bCT89FG7novM6m42zm/toMJbq+v3+2UqZw/ws/J1lCagooAqf/n0JdbjvVW6lDFwNIJCXTjUYbkv6r1NL4RLliv3EB0s848ePHxtjrLW+inGK5ZRYU7/fPz4+FpyFjgoSxbfWGmOMMWmaap5aX04mAYHTNE3T1NfoRxVb8xecRWvwka9ET7Xz81xyDcEYdUrMB/5pitwcz1gjYxDp4SkpvyBb0dTFK6cOiXNuEmeH8klyenpauHAjEEkr+CN8gsjk7FM+PfAkTj1rjfnadiA8TJqtLl04YZGsfXorLqEviReW6LnZbBpjGo1Gs9nkOh34u71PYk1Jkty7d89XtoJMOBljoihqZAQ01ZwDCgowPz09bTQacRzj1xgzhoRhajab1WpVi5SrDV9d9Pv9JKNOpxNIPp7A6KLW2kajUa1W79y5Mx4fQaenpzajNE2ttRqtCzYSZxxrbZIkfOAyQcLY5ejoiMs8toY1c2rV4InsAuOkXCuAcGLCwwVQ+UxMoC6c8HBGzOBMOB/+dyJZhMmnB5+WnGkDDJ8UwIYiVRAW21cEp6i5eeUWYaD6ghbgnHgnntM0PTg4wEMcx+jGxcsfIGNMs9mMoujmzZta0PGo3+9Xq9Vms4kWCWQScZwqK0jHx8dRFMEoJElCCpkUPX78uFwujwFLgRJZa6MoajabSZK02+0JSguClYzjOEkSa22tVpsI24cPHwLnQCgCXhWvNZ9aUHfXrl2L43jilgsNL47jer2OpjhZ/sYYLnaSJKSlJEm4Z+lr6toGDQaDNE2r1Srv4E+ePPn5z3/eaDT6/b62NZoCMu/t7Q2YEwP9VKtVPWociTDY6vf78JYweiYLMBjXW8VITg8pMAfDA51l14aUhzx69EjkhV8UwafV4spP05R8xydPnmDIEhjVjZEd14kmZ4SRshsMBjmwZIy5desWAhuNRpIkTlEC5NTdIBuuVqtVwJIuVbjMznBgJ7V18C/OPJdgf1HBHKcnRTdv3oyiSMgcpkBlg4QVmywR/FerVTy3Wq1RmehKeZKN00FQe5qmT4o5jpqzSAKQ6/f7k3J5OX+MA9I0PTk5iaIowN9XZT5K0zRJkiiKoiiiRohxUr/fR0XryXadhVDLkydPjo+PG40GDblA/X7/4OCA8vJZFl4puiyovqWlJQoBJsEPrtfrY7dMdECMO5FLFEVJkhhjANLjeUunp6eYcRFp+/1+FEVxHPPAsE54NJL5nXfeoXAMj9B9dnd3nTwHw7oNZ4cmTZKnaYqhOQZ2BR3fgafNPBnufb7yPnF1OmehnKwQ8itYEoQYzWbzwYMHCFlfX19fX/fFH4/a7fb3vve94lPPT/wd+PT09PT09OHDhycnJ4PB4OTkpFarbWxsfPzxx5pJgE+APvroo+Pj45OTk+Pj462trVqthrx0FsUJZT89Pe33+xsbG9vb2xpFiujHV6gkSer1+q1bt27evPnTn/50bDmddHp6enJyEsdxu91+/PjxgwcP/vd//3eCzE9PT3u93vz8/P37909PT8erNUH9fn9+fr7Vap2cnMzOzk7Eg+SCNZvN+fl5TIjBZzr7ygqax4MHD27fvl2r1aIoAs+9vb35+Xkoqt/v1+v1VqtFrdFnOLTk//7v/379+vVyudzr9ejV+++//w//8A+VSqU4LAmZT05ODg4Orl+//tprr1E7r1QqmEzu9/uvv/76GMhxcnKyu7u7trZ24cIFqPf09HRvb6/VaiGXdrs9Ozvb6/X6/f6offOf/umfFhcXYcTBGeF37969cOGCgCWisJIHg4G1dn19vVarbW9vU2CtVtvb20MuATmfKJDT+u/1evv7+9VqtVwuY7Ue7aHdbkPDu7u7P/7xjwOSiyJosMkto07lyyXAECHnRJBg12g0CJb0ssfZiXtjEyTM5mGIzY2CT+kjEYalNOKegLiDwWAwaDabd+/epbnB8TjrQjWbTfgEGEVO1m3CFAE8PNDy8nJ4lFpEgCfMW8LcFA8fo+JEEoys4zielB/J+aMGIbweX5+R+v0+pr4hdrVaxSTbIGvzvIcGbIQOTNO0XC7TJB4CHz9+TCryo5LDqAmZV1dXSUi0barcs2gDxR9k4zbwhItA3tIYYwLylvgy1fr6OtjymLxBOi2s4Jym6dtvv008MfWNDWUjDc21iSeeURQBlshrH3g2UgljKOR3/h3bZgZK4SzXCLAEf3CCkg0GA2OMc8vDWQiz5Hw2j6hIL8ol1DHAaVK7HiDzyckJUGRsW6lL1Gfr4VtbW5OddaTJE1rPW1tbc2IqhvMF2T558uT09DRNUxgIvaNyJCFFfJp1bLfb5XJ5jHnpMFlrwfbw8LBcLk8WlgaDAWAJz2SXQdpuOonbIwrksET0+PFj5yTewINSzuwwbOeLPWgqzWaTT+4VJA4VsEgce9B9+NzpGLCEJs2bqzHm4OBA980wDjk74ze+8Q16xngOw30s4RfhFlZ4HMeAJfSdZrNJa7SavwYnnYWodJ3jpIhnlANLSZJwWKJl51Ez872dOCzRjDMwabLOwcnJCdlcjPVorHpGwprB+vo6Vg6w4joGZ22C6QFdYuK7B8kKI4vt7e0zrmODAGM07KXws8MSBIYbrfmPwVBQv9/Houb8/DwcspGYh4m8Jfwlu4y/2vo4RdXWZ5BZSR8sOe3UqLDEm3SSJOVy+SxNRcMSBkm0B4TcslE5C1hCTz8+PgZ+jDS60jITLA0Gg2azSd7M6uoqxXEm53+fuAYWeOawVC6XG40GDrTEcUyWnOLn4o2GpaeKTCRJDiylaXr37t1B5nL6mlG4XQZosrCETksbisZIHo7w/vvvA5jR3IVROAtht0y73cbi5ATBAxvk8PzOO+9MBDM4YRKPxitvv/32RAYE8JYIoQeuRddccsbkUzQwjmeR00nwUE9OTpx7QQOUWzQNSzRbReMkzi0MSzxO2FvS8DMGLPEiwGKenJxwL2pUog4oJty4B392bwmzsr1eD31TqGgkoydgict87do1Pc/GnwvCEk3iAZastQg3xty4cUPwL4I3BWt5UuSAJf263+/v7OzQnJWv9YwtrjHm9u3bYyR0EgYFxpg+o0kxHwwGDx8+pOES7Yoer+kLIjnPOImn2fK1mdXV1YlP4vXZpvzBYPDmm29OJAucWzrjgNpJNOd+eno6WW2DsF+u3+9jM8hkJwlh00nmJEnE2hLPbiQU98GSWFsizmPAEslcLpfHxgxeWYT6GCOSyw7Pb+ylXw1L8H2jKDrjrC9giYTk2s7dlJg7wgBxb6lUKlEWAVgK1Kau2acNSyAvLJEQ2ODBj6ZOUDJrrXAtz8gtzohOckyK+WAwOD4+BmeMUuEgDwrPXxfpJOgD43UnZypMD2JllQ4VTdYQ83NLgd41Uqanp6eQnPrVpFod2Sx4Y2TXJsJ5kBk1Y8z9+/cnfoRgkA1c8MwPGyFf3klzB8KcoA2xjIcGT38HIwISqJ9teQAJqM7VvBhccg+DT+LFcUwLnBie+vp+bo40cOF59dlMzEiK5ZSm6fXr1/vshAllwTvOGE2dkhAsYZxB7cEY4zuKE6hQEWdUqYoLL/jnwNJgxMXq4nLgAU1qghYnzagfPPo+NmEdHptnJu6NDbLZvMnytNZi5RPbf8Nij1oixKeTjHfu3PHxHxWWcOD6LH3VR3D9McKYeA0OMuSoVqsTX8kj40geEo2Q6BAPUUHYIM76sM7jx48pr1wr5sulz3biwVZilbrZbOKY7djE50j58Ms528blCbPVWx44LA1GbIo8cn94ywNNt6Rpurm5OSpnHR88Hz9+PBiGbTw715YGwaGGAODizWlUGhmWfo2InzN4eoT2yjM6y7mlAE28LE9JThAdv3BOznz88ccjFYeOuUxSxGH+H3744VPif3p6enx8/L+TO8LFiaM+dH58fPzw4cPj4+OzFOf09BTmjNPHH3/885//XEd2mieftSLOOMn04MGDBw8ePHz48OHDhz/60Y/Glrnf7z9+/Pjx48enp6cfffQRzizeunXrnXfeuXv3blgb4Uz7/b5zx/bjx48fPnzI71AYVebT09P/+Z//4Qxv3brV6XTeeecduDgB4tkFVH3r1q3/+7//o4LcvXv34ODg4ODg7t27XHLnIMP5dtQyToR+o2CpOE3QP3sGST61pMsyqdI9g+HFbxg9jXblGzgHxtdhCZ/GBMNguLUEspjg3PhEOAdI6DNX1QWdmPEqTqQdqSDF6TfWW/qMPs30lEzSROgsgj2NWe5PCTlhaeCf/8ll+JQUNeri7lMSY4ImW+szV9WBKtAINxgdZngDeBr0GSx9RhOj4j380wxLZ6HfYFgaqH35T/yTP59RABUKYkaAc9jF8WURiDbqkOJpV/dnsDQx+g22R7/x9Nk8YUFyQtGvBSw5lznHYHJGDsV1NbY+C2bhwyRexQP/4OMs4uWGcCoKS7nzws5lBt/mzgnSsx+D9xX9Ohq4MfTGi+wLGZXDZzQpEiqdFFr4oOhTDkgg9M1wk9Pd+SkJU1BdIynZiSuBhOHaLMItwLZgiQJ8KLwQLPns0WD4kiuBQE4Sb3PjFyfe/kR4wTIKYYpow1fA4vEpVZE4g2LQrleANZNcSYiVM5ozPBx/bFXkVlyRaIGERbIYjOhd9Sc3WMnlM7YGnhmJec5cafuqHfrihJn4Wlcg/gSHmJ9C5D4jLI1XIs1Z8NH5jgxLTuKnhZ4BFRFpsglHzaWg3ii+8/lpiJQr27NR0UjkkzlXyVqxA2bsBPOC7V8H5up2UMCGDlxf/gZRuGDi05KTz2C4vMXLXoScYgyYwn2DleI0GK4+QQR7Z8yFZ3dG8sHbpPiPRwIYRoIl8WrUTJ3Jfa9yYAnHO+r1ehzHlUoFhxArlUoURZ///OcjPyHOeUYXLlygkEqlcuHChQsXLtDDhQsXXnrppQseeumll/jbixcv4lcQYr788st4pshO+vM//3Md+PLLLyM50SVGePvKK69cyiPE+cu//MvLly/zQIS/8sorly9fxt/Lly9fuXIFz3Nzc5cVXWEk/tZqtddee+3VV1999dVX8eq1jF599VXxoF/R31dfffXq1as8/OrVq/UgXb169erVqzy+k97Ko7c99NZbb33rW99yxvzWt76ln3d2dr7lpxs3bty4cQMPN2/e/MY3vkHh3/rWt77xjW/cyOjmzZs3xqKbir73ve/du3fv1jDdvHnzlp/u3bt37969999/H8/vv//++++///3vfx/Pd+/efX8UeqDoP//zP3Xgw4cP6SBRgHBq57EiHuhL8t///d/379/v9Xq9Xo+n/elPf/ro0SMK72WEt71hejQW/eQnPzk5OcEzfwgTwIOeT05OPvzwQyccfvTRR/RMJP7ycB3ZSYPsUJqT20iQ4AwpiElO/Ciee3EJR4OlQXb8m05QgxI/bW9vJ0mCr3QLwtFu/Ux/C5IvfoNRHMdTU1O4ZiZMjQLELxyqekhE4GmLEC7kh8y+CILm5+d9r0YifBYoMMgAlRmJ8FKphMDZ2VkepxwkH08dE/xzn/G3pMj5dmpqin51TE3T09O+V+BDRCHh4o9BvLzhaGEqGG1Sablawm8D0QLJp6enfQlnZmboOawfnxrHq6nZ2VnqXDyc/6UGn9tDfX3caSiOj4+dDhkBwKDYbJ5I+5RgiTOn53MDhajibz/7mhlu3CFkarfbZpg4bjkJCOQM58nDfJCvjiPCG41GqVSKsy/gOSXhOfJnXxa5BfFFFn+JPxUctLGxMTU1hUtr+KsiAjiLE5DTGTlcWBGTxI7jeGpqCndlCjLBEUySDWJyiUYw7Xa7SPxcajQa09PTTpmT4UEP/+uM4BvoTE9PG2Ps6AS1877GieLwX/5WBCaubpW4qka3Aa1t3TByFdhoNMrswiEfObWqU1EIOnipVOJDQDGUrFar9XqdjxTFkJGGkvRQr9cDQFWQRFr6CwAujkaBcSTnwB9KpZLvltHigCT8pEEQlsJAFUYyJ7cn4jOATiJvSXQPJywlmeHQr3R83vSNx4aKTpUMYwaPz219kiTVanVqaiqOY2e+AXkSl+1zZqGldRYtUITEBUtkK40Cj4Bp0EoTrzRDzsHJ0FcdPG2z2YSTx028s3Q+chZHyylkEMJolVIVOIVPkmR6epojjS8LXRwhp682AUu45BCE516vlzLigCT+OglxKC1nItjyXzwga5EXwkVyJ4ncNQn+oCRJLly4oDN1CsnlDGvDGANbbxT2o+7Eg0+T+pVuz4GmmxuHRwZskFRFSLQWrmpdHOjk/fff9y1f5XpFRZLkQotOqAOdaentZGAp0LGd8Z2GRvT/AIwF+BOTMCzlipGbBY9TMAvi7+STJEmr1fLBkk8k3ujFXx3ORwyiUwkkpjg83KmiZrPJvSV4Pzp3zYdUp3tvMmzrffWiRfLxccYHLAlRjUI4XQSREWUhtB2GJR4iIohnYYB0uIAobcisQiyrgIHz9yUXRdAMedGIms3mSy+9pG2oNMDFyDB/ET5NkiTdbpciUB3hb7fbpUrkfCiJCcISbxXO1ljcvIDz888/T5lq1WnN2wLDBV415XK5Vqs1hz/qUdBPciJEICQMSzyVD6t0pvh1wNIT1yReAJaSJKlmH68DYQTdbDbt8GRCEcsSRRG3y6JenfVNBs4we9FoNABLOiaXH6tQRDR85gIHmiCSOKUyed6SECxhsOQro5M/RahWq+VyOY7jvb09zpYefDbaGLOxsaHzCtQX93HjOC6VSs3h1USKzE1/ksFYHMdUy7BcwtzrZ6EEZ9F0tDFgSYQ4m6JuG0JL4G8V0gQMis8w+f5qFydswngWOmau+etnG24DaZ1eTpIkFy9eFKY/HQbmtBhK9Xo9MwxL8Ja63W6auT6wRTAjzWYT8GNGmU31wRJvk6Kpi5bgay1RFL3wwgtOJfiqLFwpIqa1tlwuVyqVqudTqAISxvOZwjF1/EASJxYOCm55wOqc8QMDDBNVDOyj6LfOQaV+KJVKsMvCdgdq3dluyFvyNRTEpxaMyeVyuVytVn3TMvov0hpm7JxNWRTBN77W3pIuvuBP+aIgmDpfXFx09p+Ajb506RLBoS6CTsWLwL0lLpJOBQ3Tvgbso8E6gejkhOjNZrNarfLhgrNqtKqTYUcWITYbTSfDsGQUOauev9VZi9ynpqbCpidsjikCwY/gQ65JQcs1hrEbNbmGPSicJvFE6ZwzUQXBw7BJPO4tIUc0myiK5ufnUSlhbjxfMYmH5Ds7O7zV8TZgVMf3NSfYSVGPEyRrLbpV7PmS+NiwNCpxniPBEh7GgSVdAVh+JL8BdoeqDUuUojM31SI2ohEsUaAwN7mTe4jshCXLFoQJlngctBtu47hBpKyppE214dAM227nK+dCSJIkrVZLFF/0AeMyf0lm7imclK/Fc0qbJMkrr7wScPt4jlrbgCXkJWCAq6LZbGJDB8lWLpdbrRYqnZdLFA3T8c63FEgOorNVGDaiooSUqRZVlzfxI5/WD15xb0nYdGEKU+bK2OEZnlStIhCfMWDJt1AxqfipWn8CSLz00ktmGBhSV5EpjoYrTcYFS2mm0iRJ+ERItVr1gZAOoWEWmjS47ezsUAhvMM6l8YT1XB4SgKXiqu6zc6Ja+eQtFYel4mAzEQpkOg4saTygkHa7HUVRpVIxxnzzm98slUrXrl1LkuTatWtRFK2urs7Nzb3++uvtdnt2djaKolqtVqvVyuVyvV6/cePGSy+9NDc3t7y8HMfx9PR0vV5vt9tLS0sIrFQqc3NzyCiO40qlsrq66hMGjaPdbtfrdae3RHPNiI9WS6larRYG0deuXZudnV1cXFxcXDx//vz29naj0VhaWkLC8+fPw7yeP38eoyocxqpUKufPn9/Y2EiSpFarvfLKK5VKpVarET4h93fffdeo+aXE7y29++677XZbmEVe3tnZ2VqtRp0EAmBOf25ubmFhIY7jixcv/tmf/Vkcxy+99BKGftvb25cuXapUKvPz83/8x39MsATO+EXW3GpDUSgC/vJJvBs3bvCY9Pzuu+/W6/Xp6elr165tb29jCaperzebzfPnz09PTy8sLDSbzVarBZG+8IUv7O3t4e3U1NTCwsL6+vre3t7f/M3fGGO2t7cvXrzYarWSJEHrmpubW11d5ZYCcvIm2m63u90uHpLMW2oz2tvbQxEgHiXXu3gQwlVklGf2W7/1W8YYsjhkgvnfXq+HCSgYYm6OcVgnTdMPPviAr9lQwg8++MBpm3zhmihTkEaUUbPgohITwJJwaKy1+/v7f/u3f4tOd/369U6nQwXEISceWQOV8XhL165di+N4aWlpf38fDa/b7V67do3P5u3t7bXbbR/4CW8JzeDrX//6xYsXFxYW5ubmarXa3NwczBQRtT1qFaKrmmzLgygX1UXBWjs5OfG9Aiy9/PLL8/PzBEu+c06fFCwVIccGcUHcWwoQBr8wE2graDeo3WazOTc3lyQJZslMNu9UrVY3NjZopE/eUpJ9axKjHnLF4jheXl6mzi8euDXE2lJAbO4tcRgolUqtVouHQ+Zms3nx4kVkUS6XYYWxP3V5eRkZJUmCEwYoSKvVgvB6JCUIgYAlAJ6OoAdfhEykZ07cO4E8GxsbeEAgfCwU5OLFi2KBh7SUZD4rf8UdwcDOJcOQDKtKpVIJ9U4DT6rfJElolHDp0iUIyWu/2WxeunQJqaidoDjb29tQglaRU55E7cRDA8ZQiavCqX/RkARn0NTUlDFGGw7nVgWnfRSWy5eKh/isVcoQUSfny1QUGGDo5C+eSf4kSWjLA4UbY+I4RgdBzdIRFCcIWbU+ZIzB3mszDEuNRgML28aYarWKsbJImyQJhkFJNqPA3/raM7o2mi4WR0Wl6w4u3nJvaTz1hqNZl7eUuytvMCJEnQXJfJsdBHM3LPGQIrAEvcPGwekx2UIR7amvVCrJMCwhfHNzE7BETAQsmQzejDFRFG1ublrPXKJRsESSOGMaBUuQGZNpsJ50/gkiGbZyRjZxaWmJ3LIkWyyZmpqan58nT8InBqednR291ipS8b+AJdhTmhwTGqBhAcpFMkP/pORLly4FYInrR+gZaiGQgMPBIxg2M4YZ/3J2UBFa5bCUZGaCYAmTePRKwBLKHkUR3FmhAcOQW6i62Ww+//zzYoM47M7MzAx40uSzs+VonYg4tLYkaNQFFT6OtgqE9IOOr+MUsX2+EOsCLZ881gVLaZqaDJb4INUEV4CMC5aEt2SMIT7IZW1tTbNNMuNDx314Fk5YWl1djbJT57Rth/cUaqJY38XstGiNuWtLgVe5hLThSTyNEE+Gt8kVhJYi0Xx5Ode0xMOY3lLispWoKlo8T5IEG8OwmwDTerCJSIVqhndFlUdGEzCGmARmmBJ0WgGx5YFgSWyHEzITLFE4vArAEhHaKGLyFglpr1y5Qi4O5X7u3DlafuRN0yk8yOkt8XZvXJiBfY987Ab4gbkPwBLJBnMvthUYBieid9EzknBY0nHMMIYl2SIiUmG8TEtTVJzp6WntLTUaDXh15PORB3bhwgUtvPFsoDIuWOLiYbUc8Mknc3StaeZEzi0PdthbEg8+Clh/TT5YstmuaJ9R0yG+PegBAXS5Es+WB7g12E0HK+EsO7Rt1fqT8cAS3+SZJAmfxufJ0bA5fyIfLFG7RYjeM4y3KBTMmhj3aG/JKnQP1GyYkHY8b6k4uhSP7MsusNWCQkbb8qBtJQ9BO+PTQQQnJtsdICbxMGKKspuNEjY5Q7CUZC6UGZ7E8wmDRsAn8bgFscObCfXujFKptL29TWP5hN2TNDc3h+E5NUdIu7S0RFjSzA75T01N0T1MZhhOhF2jZ6e3ZNRGcMNsLhKiY1MfgI0mb4nsOMES+RlUxsuXL1O+XF1t/x533vOdx614r6ZJPB6IQQaHJfJNL126RL4UvcU8KlUTOYjwwGAFRKvQWzCI+CQeb0VJNl1DsERFFkXTquB50S0PwlhzbyllgCRWX4zHdQhgBvFPhwFM20E7jDS+eUKflQwcjdLWNnFN4oH4FDEPR9HQ3+l0ShRFrVbLDMMSTeJROBok2kMURWQueO7GGNzwSTaK61zvxEsybwk50h50HiFhA1asxPPxa5Ik4KxhiVeBT+e6AQRgCdM89il4S8X31Pny0pgkfKZJwlKSWWRgNYVAQagVhCOEIAGHbPjiAcES1qIokAwZvPKwMImCJf7Wsp14aDr0Cg0aOzjIi4L5NsZgso7MH0HUysoKtT9qi+VyGYdh+d4AACAASURBVIv2NGjStlKYS77lgUcQIzt62263qR9G7NJCqBprS2R5p6amsBWCYIlmJJJsg7i2rZzMsO3mvZFvENcuCPk6XB6oCINQgk/aNX758mXy5KampogPTeJREo67Yj7WKT8JgFbHkQnmppTd74fhhW5deCCkdM5zNptN5048Yf3J1hhjMKOVsHUO8PTtxHOGpK6rHEzmKKyvr5vMfAsmPDBgBwNm0cnQDk/icWo2m7jQGX0NltQwfMJsWJLN7xljsK+HOoJYW0KgZTP8SZLQkSau6jiONzY2qINjSGeDk3hJkmDWBx2chqF8ZRHth44P0siJ5InjWJxb4sSrJh0eMejqcI4MrIKlwIXlRbwlAVrFvSWnGxSGJc7/XIAXqOCWB1AURRcuXDAMG2C4MVln2CqRYRNoNFHGDRxcEHhgZHOr1erm5mZYBsoasOTbUE4yYLiEjCBeu91G24JhopUPwAb37RBndXUVtp7mzVDSer0OntxscTmFzPw4rY6smVDRkC/tI4iy80B8WYu8JVqIoggwHHqdX+ebKNBqDt/yoPfL8pjcP0PboA3iJDkivPzyyxi+iC0PL7/8csLmJ8ltgoNLI56wAkFiywN44pB8wjBMMERkmuUrl8uzs7PQvFico1seuJWxHm+JWzQavEfZARRBGgACQELIBG7gnw77N3pekaTi4Ty+D5Y0eiUuWDLGlEqler1Ol9RxYKDcUaHUg+r1uvF4S5SKOjI5TKg+US4+SROxs//WBUsNFzXZiQgeE0rmI3LqC9pbStU4QAC89on7/b6uYnpbLpcvXLhQHJZy7f/ESaORluccj312WGo0GnC0qRujv8XZJUB8+ImqNdk+nDi7EBf1vbOzA0BCCCXZ2dnhVk8Twp2TeEadCG6www3kOuBVnN3+Szi6vb1NO3BMNg+J8TJEpaVyFAq74fUknji3ZIZhidtWHl+XkWMA740YATSzuzbAnDCAz4ljQ0EURbOzs7z/aCOeDMOSbxJPr0XxtPw4LWh7exvQApgR520Thhbgj4uZy+Uy4TdZAeckXjKMkbxo4pYHUtT6+jrF0ettQFNaEYnjuFKpIIQ7rImaxLMKljhmlMvl3d1dk80NwEqi4xQ5xGOH10hEjmmaQqW9Xg/yJ0liPfDGbRz2GTuL4DSLzsuHEgVLELVarXY6HS42PYhJPLreFA2bIutJPJMNfMmH3t7eNmo61GTLPGRh+FsBS7BO5eELWHE9PG/b1FTQjNfX18W0gXHd8kCqrmY3xhpj0jRFS0jTdHd3l5DbWotygX+SJKK+7Oje0kQR5//jRTiCD5b48ziTeGH/AydaRGS9XCze6o3/ZnjELTjwEwM8XzpQ0si2PPBDP5r4sQMepz189sV3QKHNTq7wt1x+bqr4+oQoqcl24mFImKjzmzxrUQpE3s6IzkwITeJQES+UMabVarVarW9+85s8R3oAq+3tbV5TZhi3ArBEOqGst7e3NzY2NjY2sPB248aNdru9t7eHoyRJkuzs7GxsbKA4SL69vb2zs4NnvN3b22u1WnT7+MbGxle+8hW6jo/rCvILYUC/8zu/wxEIZ6GiKPrDP/zDer2O0fTs7Cwdh4Ko5PDxu8/b7TbiY0G0nZ0dNq4zpCnbkI2H7e3tmZkZDPm73e7y8nK73YZ9xHxsrVabn59fWFhYWlpCtOXl5b/4i7+o1Wqbm5s4/LSysoLjgFevXiXmyLHT6ZRKpb29PYixurq6v7+PrNfW1paXl994443d3V28bbfbS0tL9Xp9eXn5lVdeQeDu7u7a2lqtVltZWTk8PLx//75AIzpNRUegqLzJ8NqSMebatWv1en1xcREC4wteOzs7hEnvvfcenlutVr1eR/x6vf7tb3+b724Q3hIOpUVRtLi4uLKysrKysry8/JWvfMUMu1PdbrfT6SwvLyP3paWltbU14vDee+9VKhV0Q16/b7zxBiABXQyDzlardePGDWpvODK1uLi4tLR0+fLlSqUCJtQaK5XK7/7u74rDv7hR6fXXX+90OnEcLywsWGuBhb1er16vdzqdTqeDq1sODw87nU6lUtnd3T06OnJ6S1EU1et1W2xtSeABUa/Xa7fbBwcHYT44FHV8fHxwcIBPT52enj569OjWrVu7u7u7u7u3bt36+OOPc1GGSzWY1OVDwtBzcymsp++VDtf2PTcaj9xgO/FyZQ7wEXkFJCnCkD9wVnh2eksiTiAviiDQzhknGab28K4KzkqXOhmeuwhP4un4gpyFddZaMrwFozl8mkrr0+RteeDLaXDrkyRZWVnhZxjK2aE6sBLbq7g+ERnZcVhyuhqWeUvwCK1yX+At7e7uxuzERZKtd0IVyBEPSZJYa/UFdPDAjMJIeE7GmE6nQ5LDmbZsB13CVndoy5w2iKnrQgokP3/+vMZmY0yr1bLZEppl11uADyYAqhlhQYj4GNfaEnGjOiIw5gnjOL527RqtDoo9F7HrQy2tVqvMiJxj3nEgMNBrfX09yk6YEJMou0GcqwIiYWsG1JumKWY1rLWLi4twnbmq4zjudDq6CtBmMImXuu7EEwDgdFkGg0GaptVq9fj4GAyttT6/CvWIvgOI6vf7GLdhsrFcLj9+/NiJPc8UlrQpCTwnHjtrgvBWJMeG66rWkVgJo5l49mL54gdIuEH0DG+pyr63xPMNFEHb3ESBUMFiilTt4Z14vAiUkc9b4oJxPpyhU5mJgjcuT6DIWqWcj0gIWKJXzez41/LyMu1N5ztfwIrWtDglbKrHZFM6Pm9pVFiiGSraw2KMKZVKOMCXZAYdS2vWWlyXwNEC/I0xYscdzfYcHh7SriKaQkzTFCYJE93QHnTCx+l8qUNc3wdKXJcPGXbYA/z5OhbBUoPtGtccnLBkMiuJyf/V1VUNS3ytAcQjaFhC7TfZJ0Op3jFJSJUuoAvzfnyTl4YlWHbUNWoBdQ3l7+7uwkHn+sFgxQ4PDqhOC55bCuAEdAiYwX4QX0LEhMKPj48REkURgWKSJAjneYVh6UnBD1ucBZaIAuPxQCpqSfTXJwYfjxs/LJEAuQ86frfb1UbQWagwZ+3NICFtEHcWzbgghPPhtlvbdOPaaG5c5jtQIlEEhAhY8qlC80mGYcZZZCdpCUUWvpgmMx/J8NoSQUupVHrhhRfwqVO+UkgqgmUB6S+i0npDLixxgtdyeHjIWztMTBRF3W6XtgieO3cOSw7VanVmZgZNBZyxTFgul2k2jHLk3lLKdnxhGQYilditGUm2GxBrS7QMQ9u1xfIYkd5oboO3PBjWlyN1nJZ2VxJxjDHq3BKSQ0h4V0l2bknAUpIktCEiYt84Jcvu9Jb4+jGoqQ4YUO1TQh4nAEvLy8vWWqyt2mwoYK09Ojoy2YomDRcC3hLHsOI4JAjLY/TcaDT4W7rNCAtXafadJ6wqYXyG8cp4y1pFYSlyfZ2WOk/AfHBaXV0lP4CvbKP1jAR4RSKHYYlIm2lNzewMXTs7i0ArpWE76HvQ3g8I28ka/ivJeYi1tp1tEDcMIarVaqVSoeVTn+FOhknkxWFDy2CCsMQjC87OjPjuJmdMHlkPbgIq1WIYZjhK6qpW0LVr12hvmMjaGINhMpcZi9uiCEW8JQrEKJtsa5RtDEMf2draIhcN3hKi4dB3OfsOnsl61szMjMgxSRJuDWmajh6Ojo7AmdRCyEGGnm81zL3ATcCA/gwgcl9fX29kB9X5nkM4iEm2fYB0SzNyqBQBS6Q9w24z2tzcTNieeySsVqu1Wo1XovHAEg1ccHkNXtE+zGR4BoVmHcWeTN5TXnjhBeOaxFtZWSH5bba2ZK1FkTF2QWVhluzg4MAHS1Hw3FKRfeEcilAF/X5fJyHUgdLwlxAUCZMk4ZfyOecMtXheWKIsJwVL/FKiKru/h8JziTcsTSN5S0TaxmnTSX2VdiGj2sRpIaft1rbeePYsmOxOvMbwBnFti52lSLJNa1EU4Rrc0vDNC4naj6CLrLMQ843a3CfBtSV69s1/0j1PUbaNkEYAnImWU0iiJU+GfXFhIBK1QdxJtPAg2IqiUWSe1re2xO1IynbitdvtNE0T5q/AWK+srMAeGWPoVbVa7Xa7TXYGgGwrjnZxg2WyPdaUF1wuGlaLSTwkN5lDA88DRUAxw58BTF2TeBqWkiSp1Wq0BdcwYKAdeqIiMA4LwJLNttqjOWGfJCLb4Vk+unKewjUs8RaFc99JdpNnIzv6Ihpng20Q160r4C2tra3ZbDkNIxVUDTYv2Gyrns0844C3FIAlcWZIhHNY4t4SnSgQRBiRpimHJd6ExlhbmvwkXiDC2toaLZzS8rIxhh+nHZWnfkUtoJF3VWtxAqskSUhUaoh84jiXtBkVMvPLh6i5i+SJwgwKbLIDQEl29UMybIs5Z5GFeOsUXouUBL+35EzFQwBLxAozUc3s9kwulXFBglYFF0zEoWe8JVgiUwKN8ekaXb9JBj8NtsKUsKtAiH/BSTybTctsbW2Z7JyWySbx4ji+evUqrAy1Q2NMqVTa3983Gd4gBGZraWkpyfwDyiXK9ponDPYwDWCM6XQ6GKSbzFeDTalUKjwajCP4OJ0k5ySe8XhLpChSIKnr4OCAMIBTeBKPwmFJQdhVwQk95fz58/xQCq8p55aHjY0NaKbKjqz5Gmej0bh48WJZnV6Kokh7S/jFghAWcjA6QW1ev34dgIQhAtTbaDTu3Lmj9W8Lf2+pOCzRdCh5ls3sDHvAW6JX1Wr13r17ARByhpwLxBCwlASn2nIRi8OS2OBE4w5hPnhLcuYVgCXMeETqlgdKxb+m7CRKRfgvYMlkdxeJmSsnq4DFpzh8J57WhvMvBaKtcA+Jpr9Ndr0sv2awkZ1TRrPTjpQpMImHONSNDcMDUXDxikIwE6WRvt1uN7IjZXzcihk2FDagDaecwnwQLEXsSDV5bDBYDfaJnXZ25TymzmgxiS8sxeyymeJbHqy1SZLgOpwyO06L4r/zzjvl7IwUqsxmE2sRO2+LEJoNE7BnskV1GkqTPwSXopFtLoAS0CoqlUqabf2KstO4SZL0ej0sKuCXZ6dhKfEcp43jeHZ2tpydOePYQGtXombF/UxldZwWTZ03ANrawBMm6oQsf+uEJZOhXSO7IYU7Q9TAoDfqek12TBBFxt0fpB+uMZKTg/fR0RE4U3jucdpcbyk3EP2LnjGJJ0CB/02ZtwTYpghJkty+fdsHRRompbeUC0umAPbwc214brfbeLh69SpNqVWrVZzfNMa8++675XIZh3UCPMMhRGSG1tfXp6am+E1IRBDv9u3bAVYcaWgST8MSzD0OxODYBM+CiBvEdrstjnZRnO3tbX5uiaflWTjnANvt9vr6eqlUWl9f39nZqdfrMzMzuLAAz6urq4uLi7Cb165dm5mZwYmlSqWCQy1keTl//tkYrmF+SgxL4uQtUXLSIQXSA/Xnv/u7vyuXyzgDtLe3B1HX19c3NjZwZqhWq0FU9PnLly+vrq6eP39+ZmamnZHQklNOHge/v/3bv41lISgNaaEQbK8iIfEKrPb29nCgCudX8BeEo1SIzGFJnOOhIz70Cr84kgILi9M/SP5f//Vfh4eHh4eH3Yystd1u9wc/+AEmu8C22+0eHh7euXPn8PCQfBf+kSecRDk8PDw6OqJXR0dHyBp/Hz161Ov17ty5Az60467b7d65c6fT6RBzp59E32ESsPSnf/qnGpaiKHr77bfhnq6vr8dxTGXHuSVR3m63u7GxYYaP087MzBhjEL/dbtdqtfPnz8/NzeHw0PLy8pe//GVKbq1ttVobGxs7OztLGa2tra2trdHXnqy1OLdEsIQK/fu///tKpbK4uFipVFqtVq1Wi6KI7stfXV29du3a3t7e0tLS5uYmmivSbmxsABrRU+iQNa/9k5MT+sQUVyn9RRz+pSXxySs6LhZFkfjekg+BngwTj9br9arV6i9/+cter1epVA4PD30fbaL4BEVHR0dRFPV6vdPT05OTk/n5+R//+MdOEHI+/39Ycjp0TlhCBeQik4/W1tYIlrS35Nw+IMh6nCRnwkbehy00Hx8Jb4lzI1gqwodILNiAkmwnHnn9Ir6T+EitkV2IQEN+jNdoDL6wsAC1R2zfM1L5HD69PCZka6rLh8Kiimc4iCQwqixJkqWlJZK/nF1EWy6Xd3d3E/a1C6dKxSCAy2DZR9PpBvES+yBWkiT0mW0tthn2uvRgmT/nnlvS42URbl23ovFnHZK6fBcOFc5U4tJxIv3FOR9zZ3Z4MMboDeLWWlorwjRaMvzRIyetr6/Ts2EbxHkcXhfNZpMm8aj2nY2Tq0J7S8aY1dVVONBolrSwTz60b1KX9xcM4IyaxBtVtwGdhyfxNERpwluT7fxOksSJC5zSNKUN5YPBAD2UnMsB2+nwZHjLwxO1A8IBS07kFFse7BlgKcru3OWwlLALwidIgbUly65qLcjK6S0l2d1oxVlxW6nt3d7ennMSTwMDngWfJrsWFoYb1hydoVwu4+aeprqbTsOS7r3c4PKsiT9q0KkKHzeTrS1Rl46zz1NduXKFb7yGtFNTU/iuLl+CEgzFg08ewFKDfUiQiCb0aCuRUbs29IOuJroTT2OGAIZUoREP9H0IQ08G5tosHVmn0uYyQIEPeBMl6sMWJrvoVjwTYQq3qqhWq+XCUjW7Tp620qBG6K3Gv3QYjJ2TeEk22Qu2NOtIEwblYeIXj1EjiYMftvDpvGBdpGeAJWcETNXq+E6UopgIJ5UinMOPDw5H9pb44HpsIm+JrDnC4S0FtjyMR7lbHnKxhJt72olH5xlBmJr3sfLtuPNlB/7CWwrYdMFfbHmgWqNBAN2Xw91fpCqyhuQUhsOSjuMUnmcEWKIQQtYrV64AQfkIlC5Br7JvA4pMdYhT1RyWuH/JLQutvRkGS4KJUBGHKGxP0OZP2BrxoA2lDkzHgiVt6ThQTZyIszFGXD4ExSZs2wWtqBljrLWdTodgieOT75YHKg6YJ9lXu4wxtEsCdRQNHzYiCsMSd4Bo4zhetbMPEVSz63pFo+Wt8VMIS+E4Or72b0ZNOwgiE95Kb0ln6dsgnrtlQNDm5qaAJVTV5uZmxLZZT4p8sGTzvD0hSZL5EwnzlvCqmX3YwpeFb71d7GWnOPx7S8UVQtmRTaeJBSi2mm3Hx0QEB6pk2FviVtWnHCFzotaWnKl8IbjThWcNlfJBDHY9oHS4P57DknFhBpGuAnqmWx6awxt5nbs/BBPOKgBLxr9BnD/wVwFYcv4dD2AKgpmexBM0hreEBmmGNzQl6uu0qWtHsiDaicdZAclMtq+dGy6bnVCOoggbTIiSbADR7XYjdZyWdmfwIQs4Eyw1ho8Jtl2HOpywlFsXBSsLEWgsZUf/3pJ4K56d8XPxiYNNcSrqLfm2PFB9Uwj/9gknwBJqqJp9kiQePvrjNChObrlU8NxSEYJBJFjCyIj2JoXxozjAJGxtyajtZMI4+uSEsaauQiNHjEYXFxcR0mAfhkAnDPAPy9/MvjPbzO7554ZbGHHD+i0IO/F4CLRKg5Um++JfHMfY/YxhMtetz5UxnvaTDF8+JCyINiiJaxLPpygBS9Y1ItZWKXBGVVsxbtp8VkwT38CtI48EbGl2jJ+nda5RGWPoTryUncihtzb7ZphR608BMp4PW6B5oyIajQY5WMaYNE19HZZzjtRnAOEkxdknlGifNG8VzezgrbPZg3wbxMP6HwmWhLc00veWwigVgLHcVIMR5/HOif/FYUl4S7ngQbtWUNm0NRMfqrD+1Ujq6hTHmZdzRmsisETjOzwAk2hQVpCDeNARArDE4xiXQaQImPhqZ/cR0JQFVmhnZ2dpPaaafdICoJKrfBEiNojT2pKOHy779vY295ZMNi+Ky0Oj7FAkIjSbzdnZWVpw4goR+tHZUcuhaE5Y8pXaWQqdBZckcIN4ymCpoLlxopF4zjVeGpZGJe4eFXGVUjaJl2bzbBgw0YIi5k6o/dhsOS1VDhO/CtZ4YMmy47HGGJgX4swdI2cWGpaoTpvsi+li0Sj8QBSrWx44+RrD2LAU/saED2Z4YACKwpwDsFSEim55CHtLvr+8YjiM+cyrz0AUJ0o+weO0gVwKxhQW0xlNwxIl4dNKPL6PlZiG0uEcsYBPGDQEDDoFWrZhJBne8pAkSafTEYYbSCD2hYsOr1XUzr7OxdfGuSGjLTNj10iJfSMxHNn3UASWwibGaZ6c5qY4LPk4pBOCJeu61i9QEDPsLSEyKpEP7wRUpK5SC+whWBI3l1NDtdbirjlixV8JNYK63S7WlvQSL4clChdTuIEeZIrBUoCKwxL80eKwpDHDF3kkiBoflnzgxmFpdnZ2dna2nZ1AomMc7eHDOvSWVwkid7tdfliH6qnT6YCPqGPNgRLykyhtRvyjR9jJMz09XalUEB4wPTyVYeeKeL68pLzIQpJwFmSdSRWcf6I2iItckuFzRUI8np0w9IRG+OgRQnACY35+fm5uDhc5c/DgWuXCcEXhLz6NyG+YpTgJO8bkkxaq0IgLzoahabvdxoeu4zi+ePEiHbTiWRAHCqfP4VA04j89PY2PiHNVc2k5QPJWIRjyL+7wLPi5JX6EiE6oiE8T4SNGPUYUnxtoevXBBx/Qc8ogh0608Lcg+k6SQClOCMSq0i9+8QvfK1p24utPTobtdtv50fResc8b8pikCgFLt2/fpiN97Xa70+ngYX9///XXX6dDS5pSj7f03HPP0feWjDH1eh0N78KFC7QcVc2u/+DNj9qeMGt4xhlBw84tcaVp7fV6PX4+SVeoiGxH+Qwg2fxcaCkSLReWeIgAHR1+TqTU2ePckhicaqK2ErDOThopvhiQGs9ESpL30XRfWYQd98XUdt/5tq32EWi84a/05UMUn/g0h2+4MR6bTmlF1pzEUn84vhC1zRwv34ZaHx/+7BO17dp3IJ557YjAIrnTTjx6Jcp4Fmq6rmr1kdM42mwyymdSc5PboM+RDvtetsCcEp77/X7g8iGdV+L6sMXYRMyNmsSjPQ60aB1FEQ6WjpR7lN3Hmgz3Ed7S9OEE0QDarkVWcZzWMg1z1fmAh5L4XllrMVfPtzycBZY0iozER/hAzkBNQ7Dk48thifc6Xme88oSxc9o+fugMu5ad0Xwd3hffuGApEEc0piImydkQaaDkhCUnW40rifKWnPwDfM5iUsMwoEN4/LjAR9MFE8IA7l5o/rp07eGN7AVL5yyCb20ptwhhtiDAUuI6ItrLvgiuMUOYnrBpDqTygRBHOA1LPlEF5wA5HaDEdfmQk6D/gtGMMbTESCHWv8LNXwlu4m+5XD537pzuhk5ythaxNZwoiqLnn39elzFQ106V+uoOOsF1f3ZEb8mHAgF0EHECsBQAJKc8v1pb0pEQAliiT8uUs0vAZmZm+IHHcvatex3I/9JJNx2oqTR8+RhoZmaGXoWJvprDt3VqEm993KLhT634qEgcH83Ozp47d452IkTsCzc8RIwHRUz+NvaQGFcWJEpVrVbn5+dpbSCKIowA9PnHMDUajXq9zv/SIVYRIki/qtfr4pWI08y+PUEPzz//fBzHPJyooT7012w2cVMRH1GFSRxxI8votIYBQ+mb7NLHbAOkDRkP8WWhh+ROfArwSdO0ICxphYQhyrDPF3HUobcm8zWLQJ1g6xwd+oYjBYdHxpg4jkeCJZMtm/Eq89WIzTD1/PnzURTZYp8BLAhLRVgVySsXlkAhWCKh0cljdpKZzD0HJIINHwIJ4l9RC8f0kU41xcgZqD/dJkKmpqamp6d1kikP6Uyd0c6dO+fjkEvPPfdcbpxzGVFelKN+0EkoC0obpueee464lUolztnJQUhF8QsWLTfOGFQk6yItSrcW4u8b3/BBjB7HiBGSHr5gzFGpVPQwJXdUwUckBP9YO6EIYrupHk9gMMHHEDQ4EEMKshsUqIcU/JVvVAESn7ZCRfCYevDBBxO51MiOx01NTZWzEyyQCuMwTlxXRajRaERRND09nQzPGQiEK+L5OQl8StmVwT5Y0r4Hx4wiWDIiGIVYjQZL+mEwGPT7fWpncRzPz8/r9i0qzPmWvwp0Ic6fky/8mZHu/PxoXpUdaeJJuCtDBkWEO10oEU3zccYcj7gRdDqLPr/T52IGqKT83eKseDTgBHxonQWFl9RAyjm4KTPv3DnuAROBUk5u09PTOqGTJxWBc4Bl5ChIb31ZO/PNJeImcJeLpIFZpwVC83AfwJcKDPICcYqQL3lxtr7xmYiD8dlINBWsPh/pRiu6AGm+nF2ZMRhxEq8IlowGRC5WgqczZv4kHv3t9/s0BqlWq5g2cY50aLAz6mjC9ypWQ7kA5UaL1ZBQZyQIbwkRnYIF8hXcwMcXrrPWgRMhzlkMMsZjQiGRay6RP1AcyjfKm3IUGYn4XH6O3AE5c4mSBGSL/NOq4h4B4qlrGRn5aj88DtPl0l4UUYCVVnJVjS8DfHSRRRvgg6e4wPgpN06ZjY1wAV0u8aGPZkIh4WFQmc3nl8tlcfuDjwSc8Lx8mYJQNBEtnCQa5eu0YVgq7t8UoZG9JV88DlqDwaDgATox9Yl5z+L7QZ1zrLlx+DdXeMKz+MUFSWwnI5+aO9dPifgGEOe8BEULzFo0m83t7W3nWzElIqZTdHx8BtuZJEzV4Umber3OOVTV/A8PqbrGNIFRDl7x5bGCxM00PTgHKwh3Wnk+KBFJBP+4AJr6MMMJJ874IoT+VocRkYdrVQT4xNl0QuQCy8g1atGIruGKkkSukUHsGZ1QoHPQwMNFWpqZ4PkG+PuKSfxzazZA4bSolzRNw8BQBJacScYg4fmE8xqIDeK5DtOvI3388cenGQXCT4MkIuj4vtzxtp8Rz5pHCKT1yUNx6KHf7+Pvxx9/TDmKJPQAYUi8jz76iOL3GVHyfr9/cnIiikPPTgn7wyTS8hDN/6OPPuJvc0kwoSx0uSj+hx9+yBM6H05O3vKRwgAAIABJREFUTrjA9Jcejo+P+4oePXp0fHz8y1/+8iQjBD569Ojk5ORnP/vZ8fHx8fHxo0ePwAFE4XgFJvT3WNHPfvazx48f85DHjx8jhH5HpV6vF44QZvvTn/4UZ2sePnz48OFDPNzPqNfr0TPCf/jDH/II1lo8/OhHP7p///6DBw8ePHjAzyr56Ic//CE93717NxCT3na73U6n8+DBA/6lpTt37vzbv/2btbbT6dxVxGPir3iLh4ODg06nw/9qVpq+853v4OHWrVu3bt2iZ/A5ODigQDDsdDoIuZURXtHbvmvuriAsTQSEBmphqAgs4aGot3R2WT+jTzk52/GATU9zy8vji7+CIU+rmQuYpDinwc+OjUR99WHNfgbJI6UFVhXPd4JFOCP5lP/MSKtCtyLxVsfkf3mg/qtjOskZ2ZlRPxvwDfLac6DIk6Uwf59sAdfHCUu5vlRuLgFyJsTDr2550LE1RBWX7DP6jD6j3zz69BsBMYQix13H0eHPkj7xUX4RAcYQUkCaD5ByYKk4oD1R7tgnrtnP6DP6jJ4laSPwycpTkHJ9smdPZ9HeRNTOBdAMOX4EsMDH9oyUA0tO0X9d2uJn9Bl9RmPTE9eo1tf3z2JknwF9GhCoiCZ9tldH88UPJ9R5aWEKwkFuYc9CjsuHCpbqM/qMPqPfeHriN6ZPfj09p2dPTv0Ikytinh0DfPEDUmkUoJAxRCoop5POaYmL5A0S07g8cJC39qgTFiQ9WRzgMAZ/J5MicZx5OQsuNqTxeXDNxMnZJ1LuMqwz3/HIWbqnTVozTi31g01CV42TrfOtk6HOvUjCX3cqbigEkWZ86/ZcgUXUGGjYPAtfjetMnzGNp8aR+D/xQCB/9gGV720grzAsCTF0hDPBkpMmvgVl4g3lk7UXY7f+Z9xtfKZ21MAABXL3GRqnnIPhVueMrNNqgQfKchWRoXh5A6zCOeYmDAupOYfVogMDxCNPdtzzyVJxDfxakA9dPO7KyGjkzCiQe5iGbnngLIjjxx9/vLa2Njc3t7CwsLCwUKvVarXawsLCF7/4xYViNDc3Nzc394UvfEEHzs3NLRampaWl5eVl39vl5eVarYbnS5cuiYQjUbVavZLRysrKysrKa6+9trKywkMQCKrX66+5aIWRMwKnV1991Rl+1UVvvvnmm2++ubq6+uabb/IQ/P3qV7/qTHX16tW33nrrrbfeevvtt98apq997WtvjU5vM9LhIi880Ku33377Wy6i8O3tbf02SZIbN27cuHEDf+kBz/h7g9F3v/vdf/3Xf6WY/FWSJDdv3rx58+aNGzfw+93vfvdmRggcg27duoWH733vezhQcu/evZs3b967d+9WHuk49+7d+/73v8/Psty9e/f9PHrgIoT73joJx4/omUI4+QJxvgenjv7jP/6DziT5iJ9qcr4diR4Nkw75yU9+8ihITwPq+Dm8frEDeSPFBBXBDG3wz4hGxWk0WNJyg05PT3Fy2OZ9tUXcrUDPItyom+RFoLiXQfAc9bIGcfmCLwKPJkLEwxmvY+CXL4j7FzY2NkqlUpR9NzZ8d4Pv4gZxfYMIEVcw6NsZxM0L4mZufktCdfhehiKXIwRCBImbMZ0cRqVo+Eob3B7Gb6CJ2RWomiqVStl1aQ2/HobfYcNvxAncE1Pk6ppcGomP7161srqyj1/Tx0l8PSB8dRvd1TbeXXDPmHjRfLoqrtLchAHilxs5G6QmNOCHDx8WhCVh7QNANWCzbT7OI2FSGKJGhqXJ0tg8eULr/9TmWWgk2QikOdGl9Kn6lIBOi7PlU1NTjUZDJ3HKQx8wdQqjc3F+CmGkEvmyoL/OWuDholAiuVUDnUBxfEk48XwFvfjii81m05lEBwqd6AhG3Y8V+HwfH2M5B2H61dOmxHWJtXiV+L/vZYa/hiUGZDMzM3qcVJD4+Ckch0cb5d4rB9HohwZkzi+nVD1Xg56d6IahgjdT00CtVCrdvXt3DFjyocVALf9MEJY0MiFEXtXqhKUoiqrVapqmcEW5dejn3ZJnXR8IscPGuiDxtMJYpMxG81fpuHAlmDiF16/0W27InOLxaARLzoxEFjazuZohz8WZXaoMqw4B6c+9aPKF+6Lxsghk1UXTko9UEK1AevXCCy8kSSJUZBV467xEFrnfQxKS8KLxVz7kDmiSsxUy6yIUUabWrTOhb/DhfLDWzszMGM+1liJ+EdLldb4VPHUWOoIdrjVnkUVCMe4Jl8KpJacYnL+TjxjyEkVRdHBwkKapWB7T0OJ0XJxQURByxoAlnRHonC8GBZK3lI4OS/xtuCk/M3p6OYY584bua+JOb+mpSqUj8L/WZQJEiAgM22gnZ588OtMxhOetTnAulUoaltLhDq+z07bACSdhVQREFZFT1ydfnQrkr5y1k7oaniiaSOtTha8Ba1ZpmhpjSqWSgCWd4xmpCEMunq61VA1KnEUWGtN/Bf+AwrViRaD1D26cwlhrMdtczfto+hPlIQ3UJN6koMiHSSIvByz54FHDEini5OTEpyMnfUpg6ZmRbmGBpom3HJaevWbssL0LPBfkwB/Cvd05uBlJA2HhtTyWwZKIE4AlEVMbJv5Ku+/iWXMTzyIkkNyZSpMTlrRsY5Ovj5fLZScsCdfEeihV+hHlDSf38dRKs/7ad45vdEnT4do/OxVsjSQALTIZYwKwNCn4Gcmjyo1Gb4c2iI8ES9pzGoPO2A1+vYgKG/CWSqVScW/JOYLLDQkIpuP7jEKRV0JUZy5Feq+zCDpQtMaAKiDziy++SLDEI08WlrQAvvlJn7cksuMGNHXVnU/VPlWkqhastf1+n9trLkNAJzwOfyBY4pn6imD9iI6iESuK4HNYncosUgQdWBxmfLX/DMiOCEs+VBgUXisalQqyPUexA7AUWFt69vSJ1PdEiJr7SJN4gV40EVXwnp8q06M7s9OQCYbiWRgLX+QAnyIRisMSngFLuj3nwpIolObvM9+BhM4kpGqnrfdlmqu3gnFGjZl6VGeM4WtLKdNALpyIVzoO56OT68ijlihcNEFcwk8QlvBJpzFgaQwaw1t6EtzvAPrVDeLOlByWoHTqxr/4xS+evd7PTtRcPvjggyLRODmT9Hq9MKuUDYRxqEK3WgT+4Ac/mJ6eJljS/MlOhbMbj5xs6SCI6JPOIvsMa8BeB1Y78Cq3sIig5dEJxer07/3e7zWbTXolKJwjQQVqh9dvmtUmhafMVHEbKh7u37/PVUFiOGe6SBh6pjoiPpzwikQiwfiDVrivwQeUw2ucFKUn8Zwlcr4iFVnXcl3KuhUVQXBLh0GFVBEohbPUuQ1DKEEkH3XVA+SU0+cbAJY+//nPA5Ymey74KflPAxdcDX3YQscIwNKvKflMZ5HAggzHiIn+c3R0RJN4PPKkvKKRImtLwSM4B4++EG4RhEkVxmIMsZ02OjeJtfZzn/scbXngbwt6S/RA8YUkjx490rJZtX9SmGCdkdMWB4ofaM/FEcXHJ5ecpfDBUthbEiLZApsbfXzOXq6eZ3G0oBKclOvfp57WGIYl8pZ+7WDpV2tLPq+K/vJJvM9IUJHeLiIH3vpgaSI0EkOKLDr82WUQtk8bppEEdlpqnlxXDSWhtSXBpPgkHmVRRHhti0VMp6i+wgYkHHUQQzZO88wVSZOz4IEtD2met8TJh9A6XNQRF6xIuypYtDOmnfgQ37K1JWvtxDHp6S04hbyl3C0PRVTJm7KzKZyldjVBnkAHHpsKJs81EwW5WWsPDw+dO/GKDHLTyYEHJz3JJnQrctSzJZyPfqXj2yDST2oC02bHacNFcCZ02tZUGcGeZ+uBsJjc5oqYnI+InKqOxuM4xeY9V8Q5OTnRjcdai3mnAG4J8g0C9LklIYlQjnZN7DClSoGp0ptO4iRnHekQ3SrCDbU45Wq1OB9rbblcPn/+fEFvaQyYeXo+Eyfv95ZICAFLueTrLZOiUdtB8fjOZheONsHS2TPDEsnjjC96fq4wzqydpkHbRKf18VkKpzy+ScLirka4dHbYWwpnLQxQrvCBcC0qaSNQBKHeAB8dniuPL44tvFdeiCRagjFG78TzNYZ0uPGIOBqhnQ/OLJyi5mrGJ6GOVlxLI9GoDTuKolxY4uY9gA3PBoGclANLA3b5UFrM6+T1za8D6XQ6Y9XLrzQu+PNX9BZ3ovCQXq9njBkpC+dfZzh6XbfbHZW5M4IPlgpyptticO1NcUm0ARJGUNsICteGQCdPh2e6eEzfNI7OXWSnBSukLMaHe0u6pDoXAUsU0+flODlrDdBzQVgSqtMU4ON8FTg0xlvFqDNOJCeHJdF+eF48lbO1BCg8Gahz9OXuK0WYQy6T3CTOKR/Qo0ePijO01uICPZrEOwssCeoHL56fLI0GS0WImn6SJFgpaTQacRwvLy+nQRMjKsw3Lg4ksdZGUYSLzijw8PAQlSSYOJdb+Sse4su90WhEUTQ/P88Hg2MQ8jo8PNRrSwXZoux02Sg/KEoFdM6waW1rM+GsNWtttVoV18p1u12M1NJhxepJPB4uAgNFbrfbtH1ubEIW4Uk8oQQeXh2+rFbYUJ5El1cXkEKOjo60EqAiDOx4oLW23W6LmFzOVNWjLil/xQkX3GEoGa4OQc7BjTFmdnbWt0HcWQT+wG/eI3mK6NPHOVcDVt1wqAOdqYooijd4cQlOcT37yA6fWzrjJB7OrumQTqcTZotoUBfFTJnPkItqEpYG6nKk8WDJWttsNqMooioEB91oAoPNcAXov5bBEtHh4WG5XKb4UJkdHmGJJhhYIOGtPEmSKIqSJNnd3Y3jOFczuoA8Fxv0lsIKsdlUCS7N3Nzc5EhsmRUQqXy1YF2GQ8S31sZx3Gg0eHftdrviphmRl8hF760SMUURVlZWxAb6sJ59M1rW4y0FGNrMyNJgq1qtlsvlra0trWpekMDeaJ4FfG6hCqSl8S9CkOS1117jx4EDCnRq0ldkVCtfOQ9oRqjIGWKHtzxo/ei/nHD9KK7TrlQqgo/4y3WuX2k5ha4ojjAjaZp2Op0oinQpcpfShbadDzCV2O0sVFRE+ZzOAkvi74MHDxqNBgcbNHvcThtgDj+k2WzCPgB9cZMsvQoj4jkBSJOCpTRNOSylaVqr1aD0ZrOJ+25hFHq9XpIkFELxd3Z2YPJE9RweHoIDv9LUGFOv14ETNJqmTzYQLBljms0mxl/dbjdJEiiacoF49Xqdc0Ycvg6BmBgvW2t7vR6arFZFwUYGht1ud2xYgm+aJIm19s6dO7wL0R3PpAQKIc537txBWp4dikZ3SKesg2GoHkWRqIV2uy1mbJAjlwQhSNJut/FMcfQ0LPGP41if63JqIzeCZbCUDtsI39oS/ULPkLPRaKysrPBWwcvuBCR+szil4qTtKSEEZwhYEkzS4PFbkZEuXZqmSZJgfGOtXVlZGds35fyL3PKg9YDywpxB4YuLi3wupAiJIaZlNStUwTMtl8sClkTDpvgalkQuziJz/SC7VqvFz+GMTRPxlvr9fpIkc3Nz1WqVAo0xURSlaXr//n08OPlba9FW8RxF0aNHjwBRaZoSn/DsotyJ54Ql3P1X8EQY6X17e7tcLu/v73c6na2trS996Uu9Xq/VasVx3G639/b2oihaX19vt9tRFO3v7+/v78/Nza2vr6dpurq6+pWvfKXValUqFSxKUW299dZbiBzHca1W6/V6nU5ndnb261//+urqaqlU2t7e7vV6q6ur58+f73Q6y8vL5XIZQ9Fms1kqlVZXV7e2tr7+9a/XarX9/f3l5eUoijqdTqfTOX/+/Orq6ubmZqVSsdbu7OzMzs7u7u4iu+985zu8KVcqFbRdwFKgA4sprA8++MAOD7V6vV6v1wvAklPDPATdBhMdX/va19Ay9vb2ZmdnNzc319bWcLXw6uoqQra2tmZnZ3d2dpB2eXl5bW0N2rbsfOJXv/rVxcVFvFpdXbXWdrvd5eXlL3/5y4uLi+VyuVqtGmN2dnbiOF5bW/vSl74Eq93tdtfX1y9cuFCr1ZaWlpIkwUTu8vLy3Nxct9vtdDoXLlz4q7/6q7m5ueXlZdRjpVKp1Wqbm5sLCwtkUHrZMc92u72yslKv17neSKW5WuKvrLUvvvji9vZ2ODJlTamMMdPT00BllLFerx8dHV26dGlhYQFtqdVq9Xo9lKJer8dxvLm5ifiXLl167bXXFhcX2+02z7TX673++uurq6txHC8uLqKBoR2+/vrrL774Ihpkp9NZXFyM4/jatWt/8id/sr29jcBLly4tLS3V6/Xt7e1//Md/rFar8/PzS0tLnU4HnW5ubm5+fv6LX/zi0dFRr9dbWlqan5+fn59fWFjY2tri+tze3p6bm0PtX79+Hf3RSScnJ7oiiKgVGWP+4A/+wOkt4ft+VMsEqPh4oLX26OgojmM4Sd1u980336zX62g8S0tLtVqtXq+vra299957+/v7S0tLCwsLi4uL169fh7a73e4bb7yxtLS0u7uLghOW3Lp1a21trV6vr6ysdDodjBX29/f/+q//enl5eWZmptlsokuura2tra298cYbMCPW2lartbu7u7u7u7a2dvv27a2trbW1tZWVFdQpqv6rX/3qysrKnTt3EII4m5ub//Iv/yJ0hSZ0//797e3tUqlEC9UiWkHbi698AZaKfBXQGX56evrgwYN//ud/Jljq9/vz8/PXrl07PT398MMP79+/T5zFVwofPXp0cHCAt48ePYqi6Je//GWr1Wq1WogPIXu9XkCwQhvERzq3xNeWYLbguKGz0aCp2WxiSLK7u0vDfCIAFXBVLADQiAbDKGtto9Eol8voADTMwUA+zYY5SI6Y4LCyskJjXszFWWtLpRIGLJCz0Whw2cQXdMjTz4UlOzwgdc5bpmlaEJachMkl+oYYjfVIe1EUbW1tVatVcuzIhYrjeHd312aTctx87OzsCG2j4rrdLvQGX5Petttt0hjmuJDX2toaOFMqNI9Op4NlDGibnDwYXJKE6M0336wOf5HSqWp68E1C2tE3iKPWjDFTU1P0XcFSqbS/vw/QpVYBo0Doguk+YwwU0u12+YwNteeFhQXLvF5UaLPZxGk2TDygQUJFly9fhp6TJJmamkIW1tpKpZJmziXmBsrlMhrV2tpas9lEFtQjoijSDRIPi4uLge1CgR3nomi+c0u8BvlfXmtosWgkWDRFE4LCUZa9vT2YGjvs61Sr1a2tLQxGhYVB0ay1lBCsMEkDzadpSv1lc3MTSrPZvGK1Wk2SZGtrCw0blWutRXZYZEWtIQSmBk4DVxd4drtdzBiJKihO1PxwnNYOLws5MSmwpWAwGDx48IDDEhSFT0AlSRJmnqYpPCTiAOb9fh/h4QtkC33YYiTvkk/iEQZYa9Hr0LWoS6NG4zgul8tw1REH/RDRKBBsu90uOPC+iox4i6S9A3fu3KGeTDHTNH3ttdfoq47UatEia7UazSxhUhtN0A7T2LDkCxkPlmw2UUZrS61WizSPiSaUcXd3F2DAcYs6OXU24myMOTo6wtQoaZvDEpodOKCFYG2JwxLEW1lZEbkg1dzcHDdYiNNoNGihRRT2+vXrfBJvpK4rtP25z33OCUs+tgKWMLVbLpeXl5dJkzBAMD1XrlyhZoPmhNJBn1AmJ0yWVqtVKBBgg+TYXmWzBW2Id+XKFVQiAIzaJ3wL5IJKQSqaHaXlMcraOU5KkgQIV1y3ev7QDsNSOoxYohfoV2hjfLyFUtCAEgrH0BOjATRRvC2Xyzs7OzQS4swxe4w40BK6CRo2YAmqw1sgH/gTVlk2lUrjCYiEjkPjLZigNE3hoFMBqfgopt6pVJyoB4kPWxSHJfGWYOnJkyeAJTGJZ9XHKtM0FbDE5+uASVAdz0hLNYK3NKoJEFseMDxBT8aQDYM43iHxCm1lb28Plc2baZqma2tr6O1oRpaBDToweNID3/JASdJsxZjIsLUNfDabGws0mjt37vDO88xgqcimRL62hB19KBdMEgqOxXkUB42MrN7CwgJ28/NBgLV2bW0NHV74pjZzocKwRGrksMSN9fnz5zVGlkqlpaUlbbbSDJZEl3YqRMThkUHOtaUAcVgiLSVJcuXKFTJqHL/39/dhSWm8xVfveYcCq9XVVagIJoyP8QmNOJ5duXIlyT4Ly0WCEUdM7geUy+XV1VXkCENJfUSrDp13a2srVy0+Ij07vSWQ2PKqI1iGAUmSLC0twTuHflDGqampvb09wDlKROg7NTVFKhWw1Ol0UGUYZPDmSqNbcjRtNg1AHg85x1euXKH+RW5uuVyem5uj1WiEwERgv6VojWmaYlEjYkvURdqk1jk2howHS7neEnZAABFQBY1hEl5UmqZRFN27d2/A/CRjTP5OPA1LHMHO6C1xWMKWB16jKCe2/PImiGjAABSVZw0+KcMYegBPPomH9kSgxWFpbW2NejIZSqTFByYIsRAnjuPr16/zFsOnvMSirm4u/EFv4QUT2PTcDeIUwuEKMA8ZCBtoGs1mM3XcnpJxjKLo4OAAgYZtbbDWXrp0CYE0wwCLhvlMDkt4S6pDEg5L3F4k7BPdXEj8Ypxu1G6X1OUtkUq5cihcc6Ci0Z14TiU7tU3GjmDVGAMVYTwBVaDUtKeG+zpQFzkuJI8xZnZ2lsbaaHi0Ske9RsNSOjwiscxbogEs6RwbtRHCZRPjHsjAN4blakk0SB7TBD8DqCuLEzCAXD0skdLoFrOUmMSDlSTXCqCCmQ+ymJzz0tISqoPcLHLuCY0Mm30JwBLsADZA8QZMc6dc24uLi86y0xqEGHWNtHHcngGWBspx0bDUbDYH2ZGhJEkEupyentLWcApsNps3b95M0xQGBK9GgCUh8diwRIShOjndmNkg64a5oGq1ur+/T5PCtLcNk8JJtgObN3SaFBajG+zQI++b3u7u7hIU8XlFLLRQchgC2jWAB0JWa22j0cBSKgmDDYHGGMQ3/ll46wIh3QmdsJQW8JZsBjNJthMP8tDsdpqmURTt7u6S/i0bIlSr1XfeecdmMMOlnZubo8hglWRrQjYbWJhsntAyWLLDwwXSts1WsFC5mEshQ0yyLS0tnRGWAnUBCsCSMzl5S1RA/F1eXuazOlG2toQdImRDk2y7qc1Wm3gbIK+LhhcclmA6RZsHHNrMGSKoi7M9exjMIjuTrfDRKhflWy6Xj46OSJM0yDDGhBue85sgOqa1lsOSfqv7BXlRvA0bY9555x08k/lOsrUl4JDNFnKgBJp0obeUC7mwAGaqJprEo0kX2BO+FkAW1lr72muv8cEWmFNFUBL6xdYVXvw425OcpmnEtraGW6OT7ERh6f33369WqwQh2CUAUEEtONmiF3NYunfvHhoVkjjzeqawFDPa2dlJM6xCvaKPYQWYoplsUQczaXoNEHv5AGA0jdZsNufn5/lalMlmjRGO5kL7FNM0xSYfMOEWE5liicVk01MIx/4r3gjoVZHpIHrV8xxi932dVmzk01lQ/4yyBTkwAQxjtBhFEfYd0D4U2EqqKVrV4CJdunQJ6Fsul8kNiuN4YWEB8WHyUK0I12tLxpj9/X2MGChf6BZ7z/jwAohFJ1RESbHCXKwBSrXTX5APlnK3PKDUmPCM4xhaJWQlMwdvxjL4p6EDn8QjeLh06RIAA4qiBtxut2miCRUK7Z0/f17AElhhJGGyBZU0TSk7vuUBTMCQww+fpM21jyJkJG8pdTVpq4gwwBizsrKCZxq9QfPYzUsrAuVsg2gcx5ubmxxmKAs0MI7BCduDQ/ypcWJnloYl7JyybG2JkJ52OvDxmdhFYtlY0GbrArrtFST71CbxBoMB9GmtvX//PsGVxg5CIDquBD6N7KgTwgfD83Pjw9J4auINkX75sCJlS2c8MoYtdhgGKJyPQfAKmMGZmOx8kmHTtZQE1oemrUhaYwxGWJwJzebpAiZJQufti2gj9dwiYdUN4lS0wF5nIQmMzt7eHnEAEqCYkBPD9sbwMdhWq4WeLETtdDoUmVaejDE4UsfXotBqNzY2qP8n2ZIvScIXlpBkfn6eSwLZqtVqq9USkuAZ296sH6F1uKgaajx8y4P121/RemkOB/NpjUbj8PDQZFtj4AhibLSzs4PAiG3bqVars7OzNE5KWR8BQ2gJgyeaZKORE3KnwCQ7BMYXb65fvx4NL18hQhzHGKqTC0I58rJjMEFvE/VdeVDg2wq8XGkBWBJ6sMOHrFFeiIR5TsuGj/BI4AXSIihNG2B8Q9OAPIuLFy+ipVEFoRJrtVqcrUWlbDvx3NycgCXwOTg4iLK1JfJTy+UyDgbw4Ui1WuXDYtIARgY4t0RzG0R8X3iR+5/K2VWtNg+WnMjE3z5+/DgZXiuixSTL/B5N1NPRHU5PT2mSE8YEEBUQ7JzvBTaec1gqYhzT4Pe1+PkPfkyBN0TeuOn0TDps03lIT913Qvzxlw4JOeXU0xTOyFpyfqJFP4hoKUMXEonn1Rv+DCBXS5qdc+KRQULVJBLFp5hc4VyBPXVSRFQKwoXOnYSEPL4I51WMpaler/fee+9Zl+OoldNjRC2B0lJt6hoRz92Mfv/3fz9hH7bgkYl/yiAKWWghSXVg2xveks4PFeCV7zitOH7AeQomGGmRDo+Ojo6OjrB3EVkcHh5SZAoU4nHOvJhHw+Rsw5pEjXAlGPZ1Wq5Sal2iKVI4ydlutzudTrvd/sEPfkDhOzs7+/v7XBXtdnt3d7fdbh8eHpLGvv3tbyMaNQ+E3759e39/HwO1druNCN1u9+DgoNPpgAOkPTw83N3d/c53voNDSNZaRCBR2+02UpF6O53O7u5up9MhBUK2ra0t3uBJdXfu3Nna2jo4OMBsKles82ur+gwTdY1yuYzPAHa7XR8U+X7DE2uEC+GzUCByjHgqTuHkXlgiH018NN3ZKHUDLRKN99VUWQfBh972hicKnKl4nx9JpHASDoEj8RSl4J2Wh2MSjzx6XuSC2YXQjwahAAAgAElEQVTzFWz5A8cMIZgzuai1XPIV2SmSlscpDA/puRzQlNlHrQqft+QsWjpsarX8nI8YmDvjOPnoSsQCD4+j3Q7BUA8geByhQF/jscNqFOEanHR8LvDMzIyYHPZpAKRbI4U744t7mwLKIdkEHod15dSqMwtdfK4Wy3BdC2b9NSKo3+8LZCJuZXZVq9Ow+7BHwFIYpYoAWCCL3OReWCIaexIvV8uirQgKN83U1RN01kVk0PL4ep1GUNE0A8X0NWj+QHfi+eKnhduxjmM9WMJfObuKU2CfKgRyi7f6L+fjVLUuplN7zlahE/KsCZZEFj6x+Ujf+ilQ2CKRR2owvix08W2ebS3SnARP55YHO1ybaZpyb6mIEgLRfBooSEIVQlQRTbeEQNsIxHfq1hceroWA5iktwZLJ9mHz6TLffJ0TQpxAMh4gibS5gHeO/3eKO/aWB2d8Xeu+v6mrCaauZdVA1Qbi8CxEC/NlUQSWnCGpatZOPji3JLwl68cMMcsUyD0dhiVdcMFZS+sUyVlHuX9zo6UKlnSRC2YXqAInLGk+gYbkLBSRRlYe7iyCs3Fqb4lq01lTzukHXUDdYIQkWiohob7lwTmYcHpLnxSJIgc0o9teoN51TD09IDiIhuFUeFrsziEuFYelQTaZJux+EWhxbjgoiElnh65zAz8ggQBLfEfcpEjUmbNN6FfPAJZ8fHwzVz7+wnAEssOzz1sKN3Fn2Z0aCMy8ickurm2nzGFYcupH//U9aMmtqpci/K2y6fyVD5ZyZ5B8tSk2jARIlDc86ecrgq53O6xA0R4s8yl9DUaz1TFBtKWKv9KzzdYziRfQyVMlUcupamZiqEepwrPWulJ0a3GyFVIJJVtPlQUqqFwuX7hwgU/iPe1vIxWn4nA12iTe2T8+L5RulUH0xaeHIrBUJHcRKBquL3mgretcnDbd2ZTxQLc8iJi5Cz8+deVm7RSmSPKw45ibnSiallzIoGtBVBlvFSJrX6qCsDSSZvTbgACB5Dyaz1sSWfD4zkabukhk6mtXQkupgiVnHFDuJF4RzYiqOTvpYvJXgkRJNSsdeJahZK5KfdGs8pYGLofp00/nchFsgt6SqCT9t0ha0aqKZyriOxfJRavNzaKIzIKh7hIULi4fsv6+WqTU+sEpjJMzPYyKrEUihyNozetAnTC8auJMrrc84EEXWdeprjtNeotEWKV6vOXUgNaGUzDBR/Pkr5xF9olBxL+pKorApTX+y4cogiiXdaFvgHy1r9n6imk9ReYlFeXSkS3TfHi0rSmwiyQgWMpqARSxj6Y77Xlgy8NZwWRyVNRbCsOSs56c8XUr0QskvJ5E6xFMeLiehnI2IB5fSx5u02Jon1sE3fR9nQGkvaU0a+JO2XI3RImiObe3Cc4ilTNfwUFn4axroRBnprzIQp92GH58VWyHqzL1kM1gSSRPg0gcKIKzLNZVy77ItDlYFMeHGT6vyCp9iuoWpUj9K3laafyvE5Z0Wjt8NVdAb5ybzlHEz93u6AsMJHTqh4rm1LMI57Wm5fdpMvWsE+fWSMogE9Ho3FIRWCq4yFR8VWlU8rHNh6UPP/yQ7j4J9AQinFDR5IwsKBBTnOoYz50PGM3xODvPmlA7C6el5ksht2/fpi0PvPM4cyFp0+EDGb3hYx+BrHnu+twSPSB3nwziVA2P2WWE4xoUmeIgnIf01PknUbRedoxJq0IH4ggXveKFeuGFF9bX1zlznrXgjAeut263Kz7hIx40aQn53//4j/8Q4QG/yqqjYM6MnL2PAqkX6CLjFT8NJtL2ej18b8lXWJJTT+LxNiD0xhtPgPNIJDTg4xzWldOUoUHy/k5a5UrusbN0iG+Hh0EiOYX32BlEzsd37ZMdhiV8CSn8CYnxIeVpUqGdeHTXJN2tECC6haFguBm+l0GEi2fxKxoQ5xNohc4c6RlJtGDOTClExPeRVgV/y88t+YqAxpebly+CLzxgX3xldzIM8PGNY3zhRfj4pCrCU3hLY1CRGrdKgXR9iYgTbqjFabIGvWA4FM6z5l2D7qMSnbpIkXU3CRsQEUELz/u4L9NJkRn2EdPsIDn9pWeuUl84f+sbWJfL5ZmZmWj44xFOEgb/UwVRIVjCM2AJ963hdt5SqcQfBM3MzNBz2UN09365XJ6dnfVFE4T49Cz+4rOMIr4OEW81OV/54vNLXMIR+IOPoig6d+4cXW2XS3S1IJH4OxEK8MSdInStfbVaxaVEmiiafhDUzD513/QQ3bGEmIE4/C9PBXrhhReq1SoPpFumxF8f8TiGfYqernoy7OYqIvrSDxGPH6Yk+wKLsLw60Em28PjJZxO1fbR5Zt1k3pJR6OKM7AwMiO2DJV9k/Yrj0wRBnZNzao4/9NROPzzTLbqWQZGe7+GTeOXsTvRc6y9giZ9V+mRRamiDuM9boquQtKEfFU4KkoA6Ciz7QZHD4ag0NTUVCKSH6enpqakpHnkqIx0yNTWF+JzJ1FhE+T49eu655/jfc+fO4fe5557DsyAeiHIhhPicO3eOmDw1qb1URNUk6tj14sxUtArfs/47PT0t2hsauW7YuvH7iHeoQHebmZkZKTxAzrHg888/z99SBD3sKwfHf75RYJExHI2uaDznfDvS2E5f9UbjLd/4jAZe/CE8PvONvfTwq9FolEqlP/qjP4o9tzw8cVHg1ScFTufCUg6Yc9fv93k1UNWKv77KLt4mir/ihJvCeeMT4c6WJzLyieeUip5xHWRBEr0o7GzpLpfbCaMoosvXw/2W56KTFCdfqnI2InGGg7iPy+Mg3MenrMY6PL5PBsFnVIPro//X3teERpYk989hLsKHBh8KxiCxH0Wzg8SwuBp6jXYYs0/0MkhCXlch9y6FxAyqFu2xpG0bl7aYXSTth9FT4zWUPLsLrxbG0DV456BkPWA1eC/F/9Yz4EPCsJe+2JfyYU66+FT9P/x4QbyIzHxZpVJPz1pxKF7ly4yMjMyMX0Z+vTAGiLcBCCFY8sHPjGvwFOYpEuoseDhHVpFQwCofb1VcoC5SCf5TocjhznMY0s2wQdglmUxFmGq+5qLNvbDzpd7SdGEpHue8X6d1shCw5KTl5WUnaAk8EPEThQeAkwCKcIqELqdgSXE2LMzhSonDW4wkHHEpVS168OikWnFkGo+4BFFC8pqawAxIGK9/znAs4mJwZPUFirc6mi9JLf8kikhIKuWpavnIgKtLa5Ln4qsaEc55OrVRyz+z7VWZKgIF8gKKjJxqCZDOS0cgFdWKwxQeHiY9SBIq8o1vxmWr+YN8ovo40Lit5lqzoLSc0AAu7y2NpgdL47pfhXNLGkgFFxMxf93tdvlMupgZn4ycE/168UAExlCqlhwCpL1p8rV5yMSkHf86W4kBtTyrMvxtXU0viBBBMaMNgdzOt77weLAJx+e5ON/qcO5D+zKtFW0ifQqBv6rX68vLy9rK8PgUQmyFSDw+hdT8sJT4YayU6vmXwGIi+4iPezgroVWtCpFKj5+0jeYJBR9nqflbUQWCm6i1RGmbE9e2s+yJa/AXUy+Io1UxGQXGi8jCWquxwQkVGjmuwlsaD5ZG43hL41L4dLE+fkwh2NqoA/mvvoiQ/x0yEn8DgSKCzrQ0VTz/SKL9oJOloh2lQ3XrMKf4q7diiC/MgmhF1xb3EVGIfstDzDgb9gIr3tZ1vbfYDiD2SYYHYXyPAw3CnKMxesa4TY/SDg4OAgMyMZBqt9sU3xdHjOfGGq5hpMU3nvhWOGLGW1ggEUMoMWbiD76FGYQ7B0mJa8zUci06UAS85SEBokkgzbCu5lrqrkkjwoxALomaxaHJpACJjJrNZr1et9aGDXgpLE0FAjTzmPgSlkYKpXQBrgkU892R58/q6rJGTP65lPgPqIxL//u//zuueJekcTMKxJ9MJ1RkHU4Mh8NhmPPFxYXgExYDb31ZUxxBOgviAyE5aeHFW/6Lh//6r//CKOrp06cIxwMnEcLjPPWQSMt/eXYisiZdxsvTf//3f8dE+/TTTyMZBirUR06UmoCPj3M8N8fXaZ2unJOv7+81gF3TNV2Tj8h0+iAT4drO8viR1jlsuIdqxoVDDmV0ZZqYhHxuTdj0P1OTcsLCjzywFMk/UmbnX03eSbxR0X/ywdIURb+ma7qma7qmqZOAn5HHFRl5cGuKtl1w8HErWVsKw9I1XdM1/d+kL4RNeNEcnUtSwD0YKYuvE4rITp6lsDTdInhhyYk9Pgle5CZ4Tdd0TdfE6YsIS2FoEQATY+JHQYAJw9JIQdolIWAKsHQNQtd0TX/AFNPBS43dVCWaMv2hwpKPAjwDkQPh/O3o6mGJXr2kc+V5x5f8mq7pOdB1I3xx6MWviy8ELGkdOkPGosskL007xYL7uHm9pWnlfU2CprKVszSLqfP8QtML255fWMEiaery66bra8xX3YlKaVplH5fPWABTat4jIeqKYMn36iWdkzNvfXbBR5999lng7VCdXQhHjonGiQuMVPzYh08eUUBKEimeYBVWl4YlH0MqkbN0F+r4iHjLEwohh+oMso7jFFuIoQuia5+HU7SwikbssI6/VY9NgmH4sM7lM6Iii6oUh3tGeVv97LPPdNsIEI8vKi5SSHoYSxW6NfJXvib9fEjkGDh+5Gvhw+j+iCJz1em3mgKn0+KrYOrktPmfo38ivSWnNO12O7n0RSaXJ5xkDh+TjidxwY8IdF7/47vyx/kqksQ5eRSTXo1LgWuZnDTxjVDiiqm0eK/BWGSKXy4Qry5Jvu8F8MsdxJUTA/XN3zDxCzKG6vtsFB4m8OF/RcJShjoQnbc061LSTEbFa1bCqUTRxqIY1ekcS2WL50ZMCKVGrptftELGssJD/xGusZjERPMhzeeCQD7kc0ziiWQXFxcJu+DLd2dGEndfaulFGqWkrxS7JPFbDnXItKgS/PpU4Jbo0iSlJOI7k0/8WRAhz2U+L8JLF+DDlVlRd3ULhYOPU4cz7PsRlyHn1x9q7DLNavGezckuA+XNNfA23Hect+nX1SU6PD5FuMwQsMauFuQjOVyTc5lRnR7Atdg1la3gh7vEoE2P7VqtVng8p6+hmpjG+s6Tdd3mReOtMD7FwM9VTNmNJY/DWxJ0cXGBVmWKF51xHTnpcsPcF44y9r01HihG+kbdsRZJaO6VSqVer5e29bCD4uxFzvBLkvbPDg4OnE7bBCSMTovd0qa9TKf32W63Yfh0tCRJbty4UQsOtpyUqDth+a1l9eKoqz7+IEzDjLhzOgxLOnngL5FGSicA+8KdxIcR4kMYLz5Bfv61iKkwrObjpImZcD4+zf/2t78dFwZeNCqsLemH0WgEb6ler4enKT53El/SdMYRb43rAlDLpnFEBMqCM/Rl5MxXE3/b7/crlUq9XnfKE1O6QCDPTrz16cGpNKdK6VlMmsVowEl8Jo2z4qrQOtGFdYqKh7m5uXa7rVWhJaesRV5C1NJCTaCHADk/HeusozDxHq2FdIaHv1oL4uOkarUadiacqUqHXGKIJkJKZ7DDgy2Y+NT/qWLteMU887QTDN1ovCVuv6UBWaVS+fWvfx2w+Ho+bNqYEpt1gAq3PFBiHiJg6UWmcbulUeChIwhDMFmO1MNFhxe//X5/ZmaGw5JOwrlxDLARVoPDqnjlFNK6wD6QhVVzC6XZ+Yqg44cVK0YSRIG1JQ5LPJWoZV8WxFDAUrgUgRA9+ADhRnMdHjlY4eS7J16Pt5yq0FSqbRA+mk5/6fmKvlDOMyrNQktLUFqr1UqzCAwOjKcjCAWaYkcTCamWSysCVK1WHzx4kGVZ6UJXYJruimbw4nlKb4kL5ISlF9ZbmoBEA+JNzRl/3MVwnpGzYZmiRdbeki9fwwwl5+xs2YKP6I2Cpy32IuG10FvtFem+5+jEKotwEi2bT4djGVAw98GSs7zWBUtcq04F+opsi8r3qcuJRhQoat9ZhKH6xImzjHwwwak0C/1KFBBUqVScsDQVcqqOMpouLOkCCtVRTOcQ0Lr6IKmaArV6AyHiLeZgsRDAt2/4QMI5QzYWhMTT2LCkiWJ8gbwlonDl+eLz1hPJJzIjzVnka4OwNG7rFBF8kXVhfXrQb21RadbVSzkHn4ETD6JXRxbQerAhkNYwWOLlNUXiBXTCklNLRFm+08+nLlFkwQT2UXhFujiEOvotrJKIZl1A5WPu4+yLwB+ogD5vyUeBCXmtN6vUzmkCWIKEAVgSpfYVIUZdkVqNTGiMqVart27dSpKEYCkMEtzUi+fPE5ZGZTgJWFpeXkbJp/u9uOdPgeZilKXjkSd2lTg3ZPH48WORI14BlprNJv5S/CdPnkSWQlvnASPOh8uj/xIHnpzkpGdb1JIx5smTJ4jAU1GRnd2VIxY9cw3w3KkIgo+T7WAw+P3vfy/iUEnn5uZ2dnZIcl4oXi6yMo8fP+ZvrauFGGOOjo4ajUaj0bh79+7e3h4lh33s9/tQRb/f7/f7vJig1dXV/f19xHz99ddXVlb+6q/+anV1tdPpkJGl2uRCCoWDYJh6vd7q6ipWIx49eoRX3W53fX0d8X/84x+vrKy0Wq1ms7m9vX1+fm6tffr0KdceEVkAbgpMEZZEPQpYKiW0IlIprwV6GBTdEdLk+fm5Rgg8aIgiPoMiEGZZhm0gzvi8GQg+vPGQeJch0SxLI8/Pzy8sLCRJ0u/3yYBPD1kuRWOsLYmdeD5vKUkSlPwLPYkXFj7chi7Zwgwbaok+TI2evKVpZXeZaIbZl5gk3AToaBx7nAx5HzbFhZMY+Z39VqTl/I0xr7zySqvVcooqKouKJiJr/hhlkxOGNXOjyOYfySX+ZLWr1Wqr1ULIzMxMu90+Pz/HUjbF4VI52xXRcDhM0xRph8PhyckJdeR2u43wLMswuAY3TI0E1O7sRKJJCwlLYUm8HRR9bqcCdaYB/pSLjiaSE5xgNkwIpks9cE0PcD4+NQqKBJ5Soi2XWZZdCbZcgiaEpZHLs7vM2tILiGGBhhJuQ/EtLBCfdwCruhOHpXH5OzlbZSZ0fP5WR+CjSM0kIJhPvMhUA+X2iXDxyter9TYzKsXc3BzBEi/goOg1ajm1bulvu92uVquwZf1+P0mSdrttjEnTFLurMYw1xuBMDLZXYfMYIgOWrLVZllUqFUAUQQuySNPUWnt+fg7Ms9a2220YI763EMXHbnhjzHA4PDs7I8jhoi4tLRFMQiQkd06NOGcFfe0NFIAlsRMPpG29My2vNV8c7iE5ZbDFXkMxYd9FTFFeiMrZEhPhfhl/9zFF/9IXTVSBb9aqVqstLCxgbekqoOUyNDYsiYWvacESp2kNB4jCNTfdVL6EY3GjBqptLnUhJywFXBZfKxfdTMfkf43LFeBZ837iYyiyc8op+Fj/TjkxRWPLGl68t0QZlW55EK98WfDwVqtVrVa1YQIgAQkePHiAkEqlkiRJq9WCj7WyspIkCUERvCU8c28JC9rGmKOjI9hN7GbGLuFqtUrTdCDE10qAtwTx5ufnnbaVbJ+zIkpNAaUCLGlU6Ha7ONoFF1PXfpqm0ICT9O4Pkt+5+5xTYH+jKYMlbMXG8TXnOClNUw6HXBWi71ME0eCFKpwNUmvbGFOr1XDhgDFmulBxefLt+tOBY8NSTEPkNEWHKVwftmj14LBb/y6jAB9hgHjD4jED8jhDtJCCYby35JTTKW247PQWBojLxh98MvuedWfWvVFz0304puICDANJDJvEE5FFgwkXQRgOAUswfHCV8JwkCcESrJ7N59O63S55SLCnhFu1/Dy7YZNsR0dHCEQECFOv13u9Hu905H7ZYi1zqLt9+zbQi6YctdL47gkK0VpyVoQPljqdDsoCvcELtKwxwPSLhPRXQClPCJA2xvT7fR4ecNpENJxbEshnrQVi4fhRkiRHR0eGNVdQrVY7OzsTWYg4ttjCB4MB+cE8gp7PFLrlzyaHpYC3pGEgHi0uSZ8bLL0gxOvVBi2USIWHUlgS5IsfMGQiHOTbiecT1efKiBB6KHVYdUnFJJ4ID3OzLqWJLLTklvVGkW9ALb6i+eY6TDQs6SxErfFwgqWseCcIx6f79+8bY6rVKlU0vCiM32ltyRhTqVRqtdry8jLfFcZhCYEAGHgbkId2Bltra7Uaisk37JkiLGHNCVcJEAzwC+Ksy0lywpLWMworNiWCtre3YYgxjQkVtdvtfr+Pv7i4CK5JlmUnJycAKjqXCj7Hx8fwq+r1OiZFMWWapunx8TEF0qxpvV6Ho0ZK47WJB1pb4kt61lpUIkLS/HJIql/yaHd2dmiKFbLhLw2X8UCnd5EKK3+kB2pFVNgsyyCz04syE8GSM/CKduJFBsbCEq2URlKWZfzaGBoHCT2OxdMEXYTBYEDNghu4Xq/Hk4czNUX8CMtJ0TAiuwxBYA5LpfGdAqMX6R1HtmhMdRnF1LYQTPAxnqlzq45faDm1MM4Q39S8nq7hrSK+RRljbt68SbDEqXRZS+hHwxIaIca/eIZDA1t5//59ay1giac6Pz/nsARvqd1ug0+lUuHGyxjT6XTIbmIeDBYc8vhgiToIbXkw+YwW+iyf9BO3l1r/5IfQlVCRb21pb2+vVquRlkgVx8fHAnHhNW5ubgJUaEYUilpdXcU0IF5hVhM+TaPRQKFgi+CMJkmytLTEK0s0PL5BXMAS7WqhWgZSGmNwzZUxplqtNptN1A5gjGRuNpvW2jRNgRyonSRJDg4OcKsQAIlurur1ehCeOKA4PjPonMQLY4ww/gG0uCSNDUsUo3QnXiSh0aApoM/0ej2jrJ6NOA4iDJCz3YMP3wRFSVZXV/VIzZYt2HDDp6Pxt+gtzqI5ybCRjviNhCX9FiF049n8/LyYkefRdKBRl/1YplWuPR7fGIPK5ZvKBoMBepHIRcCGsAJCqz7988taxFvncl1YhxyWBCunojRP0ZCgEL59i2wuVSufxBOwBGzga0uAIvKiUGpaWwIsQQaYv3q9XqlUTk9PuZAw6Nba4XD46NEjGulzWNrf36fyQhhKLmCJU+S+VuOHpV6vB5nJ0CP3Xq8HyIHJJrxcXV1N8xuGjDFYG2u32xsbG3S/EbQEIw6FA7aBGcChNE3X19ez/FYkLVjmP7dkc+NG/i5gCapGSLVa7Xa7gBxIboyBx9NsNlEu+GqEfL1ej5IDWTkfEgk+Vq1WwyZ+rXN+nDYADz6E0IeFIiFnuuT+3hL/S7BEo7BwW8RxCqoMBNbr9X/4h39AQ3z48OGDBw96vR4Ynp2ddTodhJj8BEC32z05OTk7O+PM8eqXv/zlw4cPT05OqGJ6vd7p6Wm3261WqwcHB8ix2+0+fPjw6Ojom9/8pskPNDx69KjX6/V6vfPz89/85jenp6d4BvNer3dycnJ0dHR2dgbb1O12T09PwXwwGOA4BbdZh4eHtVoNTc2nE3HywBjDT8BQucDQCUvOSUIRYowBGvX7/dPT00qlcnBwYIzp9/tQZq/X++ijjwaDQb/fR0lRBcj63/7t305OTuD2idXXs7Ozbrfb6/X4OZssy46Pj7kVhgJpAEjHdMAQWfd6vW63S9Vhrf3Nb37DxUA4KoUaA4lUq9X29vZOT09PTk6MOj7FlckfeJyPP/6YuH35y1+GvR7kZNnRKArkGRmGvvTAa7bf79dqte3tbUxDwcIeHBzMz89DgUmS8Ek8sD0+Pq5Wqz//+c8PDw8rlcrOzg70Pzs7u7Oz8/777x8dHcFCGWMwFh4MBtvb27C8W1tbq6ur0Fiz2fzxj3/M2wY8j16v9/Tp0x//+MfUkcnbgB2kkmKYjzh0bglfphCtbgJY4q3LGPPP//zP6I9HR0cLCwv7+/vtdnt+fh59GWi0uLgI7Jmfn//Zz362vr6+vLwMUGk2m1tbWysrKz/96U93d3fX1taWl5fv3LnT7XZxV3qWZd/85jf39vY2Nzd3d3dpsjRN042NjX6/Pz8/DwAgqdA3+/0+gEdMPFhr0X36/f7Z2dnGxsb3v//9er2OY524tBds33///SRJms1mt9vd3NxcXl5uNBrdbvedd945Pj5eXFwEn+3t7UajAWFo/8vs7Gyz2dzb21tfX//Hf/xHDkuQIQxL3/jGNyCG0+ILl0ifDhqVeVfP4dNQchJPyzSWt0RtkQYmpKxerweswpiXVjhXVlYQQqNsjMF3dnZomdeyoSs8Wdg+k++Zqdfru7u7NMNO3jrN9UMkTNZjbrrRaJCzzPkg0OQbnGiQJTwAky8VtNtt8pYie6lvXtjnLZXOUCE5KRCDTZqdRylqtdrJyQkNAxFOhVpaWqLJdC7wyclJNb+ymtZCUHAimqdCTL6tGVknSYJVAZrIyvK9zoIzMYExErWPVkSBFG5dvi8VgUfmrwiWnLWjUw2Ki8+Uu5j/NPmKCO0OR6NFSVutVqPRQBzu2dPsmU6FG8RpUI++A/4ANngDVB3aYEHP9Xp9cXGR6pevkezt7dH95bDmiEPfSbIuEIrczWSKsGRZX+50OjDEEAb+RK1WOzw8JG8JDQya2d/fR2RyeqAKjAbgLaHloziGeUtYSiATv7GxgRbF1xdIQuomelGAb2BJ0/TBgwc0iUfGpFardbtdOD3k3MPzw0AW0WifYbvd7nQ6EBLJs3yDDM1nwkBRRwjAUnhtaeQ5CyT+WmtxW79hk4EYKMC3LoUWYnV2doaH4XDI+2DgnK/jqtbRNNaWAAyoMFii8/NzPv1CNpSwh1YF8YqaGjcuWZZh6ws56XT84uzsjGCJGqUxhgwcYIm6N6wDtWN+NOTevXtkXCgtZvm59YEFybJsfX3dxMGSUcQ7qg+WjN+88uSEuM1mE8Xn0xStVuvBgwf8ECV5tFQE0iplsb29TT2HBtf1en1vby/LN9FCe8io2+3SbbNpms7MzMAuYPxL9Uvdb39/H5qHTaH5B+fUK7ZZk+Hm2vBNQgaqQ0zimSL8OLXtrAjuLXGigTbe0tTToLibg56d01xYKRSvYLkR5ZMAACAASURBVJHBnzigFghRdHnBytmu4P7S0iyPE8Ce8LlaHuKDpUePHiXsO08mN75wO0w+cEGlp2mKnXtkvgFXfCaN+NB60sbGBm3noxWdLMtwAQfY8gag15aM6ow0JYjxFuVF64JJ/mkrTCpCYPzSkNHm4wlM6D169IjPWNbzb5MC3iBSkn9diFxeIZhha0s+WPLhEKfhcFiv109OTiA8bjBCB2y32/v7+61WK/Krg2mavv3223im4REchk8//ZRLxYWRk3jT2vLA15ZovEydivsfS0tLfM2TptfJF+G2AL2dRtnWWgKP8/NzgiW+Kfb1118HZ76PNssyHCEkm5iybx2hw1MRqBfx8TItq8CmOztkoLtyw0R/xU48iuzzliicWiT60uzsLB/QUQfe3NwkbKa3qI7NzU0OVCQV2USOZxgMUnz0PfKB4CEhkMYBtG0MkiAyJuUy9kkC6tjHx8ei3oF8u7u7SK43EwtVa4Mi9C924vki+15xQ6ZfiV/+itcal9+3zEaGUhTWKCsfboGgyD0LgZjhCM6K8O3EMznEctzNcjJs2SxjWzPoLyx1mqakIs4KTDBlJ/gbNQjQUsHC6FpGCN8KaK3FbjoS2xhzfHxMz3y7HSbrEI47OPCKioBXFB/JkTXawHA4dA4+EDkMS3qmzrnfwVpbq9XgKKOD07ns0Wj06aefwpCWYpK1NkmSu3fv4i/QiJYqubfkhiU9t3gZWDI5BlA11+t1XLfOZ3Jg8TFNpPfFYkohZQcp8NBoNGjKwjCfZjAYAJayfAsTkghYorY+NzdHkpA/gb+4lMwYg80aNDznhoMgM03TO3fu6Pbh666iM/BAHywF2IoWCZG63S7fMYxBAPaAIRo0TLpttVo3b94kVOPaHgwGtGllZmbG5PCAdQ6CJdItJuVb7G4C8MHqCGUBhGu1WvPz8yQnIVaSJOAvikm9l7KwLuvP5XfqyrJJPFEdvqqxxUURnqnYbWEUOQOdr3QLMcG7qJ2snC3E5lcD+O515WnDm+7CJEphg7Akcqf4zl0nQi18pk5rley7OLdEFL7CNQBLtljRohaMv02C8F1KXWo9sQ8KhGvNm+nBUrvdxnfiiRUHFWgmjEnD4RBuyfb2Nv5iDDGK+L577E68+jjnlkzufVP1tFqt+/fvA0L4uBjxabiNieaa2srF2+LS0pJhaCS8JRgaDNLBHPGtta38FhaTYwk1QXrA4IUfeue+HTUF8vEBnzdv3tSzH0Ih/Fn0OgoPn1sSkW3RW+Kuxvn5ObksQAJMQmKmDiUC0tAEyPr6ejv/TBlXe6fTqeY3CABjADYYDJKTRPhk2BwdnxflfGhKPcuyZrMJjKQxLHjeunVLKI2rjuZqeK/WkcO1wGGJv/V5P7zWeHWEDZauPuMnHdMWJxV5ZKftvjqaAKVIPAFLNqgEENYhhHLEM/EM6FbDT9hPojgBb4k/OKd8RUm5TsTtD1pdIolz0dSnbZPvxLskLBEB+621wCo8fPLJJ/CWhvknnZyYZIxB2s3NTYAZZizb+anhKFjSPtPEsGTzVVbSV7vdfvDgQa24TwEWcGtrCwoVezoNm/klPlggMcz14XuU+SZamv2jtSXaywCCjTZsiYgG4Ovr69zvtvmUHW80KfsUpvCWuMDhB9Exxr3lQYTU8hMqWJZDCyCLkKbp/fv3qZiGHa2v1+twpFJ21wt4rq2t0S4SsAL+iUm8FrvdQHtL1tqTkxM+r5iyz4nyyVKaBsFWYCoayUaw5HPfAxZBmB66E89XZbqOfK+c5NuFwQ1cpi4P5X8DeQk+PImP6CK1+NuDeHbW1eoEOYf2xpjZ2dnUtQ+bZBZQEXBlrKpHrSUdoTSOoEytLYnBAfERG2Gc8a2rFWnVOSuFt6LSrY+m6C1pwNCwxMNF5NPTU/RlEf7w4UN0HA1FPEf4GMPhcHNzE29p5gl2g68tuWHJB6GXgSXaSgCIoo35Wb6FhpYHYYxoJRP4hA37ot9i60uWbz0yOcK12+1er0dzd/ysAJlL7sBZaxuNRsa2AHHjiO2nfB4SIolxMbXgu3fvOhucc4RliuNcwW3c47Q8hFCfJvFozxKKcPfu3Ra7hqDNDiRub29zvRHbu3fvwqDQQhEUjnlOmkUhNQJZ0Wp57mdnZwRL5DRjjcoUxxPIjs7/ixYFLXFXW+jEFG23U8kgrC1x2+GsNZFK5+jb8lBKtJ6PNXmat9QCt/ID6T5WZNatgsPADjrxyvgbsIgcP4S3OSzp6QReOhKeD5vCFB+T1pba7KPjvjvxbD5cCK8t0cPBwQH4821mxnOpo2jSToWQAHjA+C88GcOTc28pDEujsmNJH3/8MY07CXistUl+8y9sCCfM0Y3yPXsoNcESd5KSJPntb39bDktCdAFL9L2lyBHW+fl5p9M5PT09OjrC8aDBYIAjSvv7+zg0c3R0dH5+/uGHH+7t7XU6HTrJNBgMTk9Pf/jDH3a7XcF2MBh0Op2Tk5NHjx4hibX26Ohoe3v7hz/8IYWcn5/v7e3t7e3t7+//6Ec/wuGSbrfb6XR4Fvv7+3t7e0dHR4hwcnKyt7e3u7v7gx/8AGcXOp3OvXv3IB4OUVHjoGaKc0LW1Vfp40DUskE42mXV8gB5S/Q20AS1Zra3tzc2NprNJmRG30BIs9k8Ojp65513+v3+9vb21tYWdiqjCs7Pz3d3d5vN5sbGBk5oUdYPHz5sNBp0imJ/fx8Hob773e82m8319fV79+5hbNvpdJrNZqvVWltbOzw8RHWvr6/T0aVOpwNWq6urqOujo6O33noLezFw7GZvb6/RaGxtbb399tt0ngy/5+fn29vb9+/f598E8pFTdVQuqP2rX/1qK78TgReZGyCqMtQm33syYN+CEvWLEP49JC4ACEvfi4uLJycnJycnnU7nG9/4Bp+VhUL6/f7vfve7jY0NqHTA7qv+8MMPTX7SKMkPHpHYQgmG3btK274F0owFNj49GwWNxpgvfelLWb4LUbf5xcVF+sQUVo77/f7R0RE2SaG99Xq9w8NDMMGpO9pE3u/3f/nLXx4fHw/yj5bhLBS5XEmS4CjY/Px8o9E4OTnZ399/6623BmpZyBjz+PFjDUvOSrTWHhwcfO973zs6OlpdXW00GgjHwbuPPvqItkrC+Jyfn29sbHz00UdnZ2dnZ2fUgPHlLd5a0jRdXFxEXYM/vuAVrqNBfrYP31vKskzvwNbWnr+i508++cQYA+O/tbWFzXjD4bDT6SwvL//7v/87AO+TTz75f0X65JNPLi4unj592mw2d3d3YVH/7M/+7OLi4uLi4tNPPyWR0jR97733ymHJ6dwRstHeRGrKE3wP0Kjx7GWI87k8Z2qXnBuFgLjB4mlL+3NAPJ4XYIlUPW5x9ODLsiGYTxIRwZmcx+FGWQQGhNHhnA8alXg1cW06C85D8EBrSyJyuDa1Mn3ErZ4tlo7MZcLuyMBip8191lp+8qnf79fz29sw1w/ffWVlxeQuF5/7XVlZ4ZPYGLfSFCjiTHZxQww5i+zc8kAPNLue5ZdZPHjwoJUf5AJCoNSYXYevXMsPwKVpyotM25T4zjdatG7l1+DifIiTbH4fa821QZyKYK2FqCQ5TQbU6/V79+7R0TRwo+kBlIWmc/CXrny17EhZlmW4qoo4BJocROWw5MQeTcIbefbsGaQChNBOByxIix10PiJHzeZrS5CNwlut1gcffFAOS6PiMSuKQTvxTBGWJmuyNtrcRNr6iUnw95mbUvMaQ4GC8/45wZ14vre6pxnXriH9yimz/hU2V+fOmQyHQ+4HmByHrLJQOi1ReGezGJ6XtjTj2Yln/Q2Du0qCv1MJA9eWB67qGrsX3OQH7OigAoAEFw3Q5pR2u41jYRhQ0yw0zYK2223cAkd76DH7yvfsOO8TclbluP4TVxF/CMCSzTcQGXZ1U7PZxAQR/lbzq4kajQYgOWOHalut1tHREa19iu0wxhgBS4Ydp/VRKSyB0jR9+PAh4kDhOGxkrW02mwS3VJBKpdLpdIBVGHPU81vb+U0xtPRAsGTY/LZPGGpUkbAkoIi/tdbWajVcgEvzgYDbNL+dNrybjt4Oh0PsxANPlB1sP/nkk3JYcnpLeJgWLInGekV8wi0phltMch7H50UFkohwULy3VCoh7/n04LMazuwMM/daOQO1LQ1vnz596pStdBDgrLXIitBF86XlRaZbHkTW4YkpZ6mdGTlFIrLWEpzAfmHjTKt4fyh2lxAs0X5IY8ydO3cydg8sAjHutrnVM/mhZpgDPn3nc5jiKZBWaCkMSybfdkTnXtfW1mo5pflJ7SzLVldXyRbBygOHYOvprxhtOL0lIJ/xUCQskbdkcljCmjdhJwqOA6QYcGxsbNBZWkSAeKurq5QR95beffddy2CJstaTVRAjciee9pZ4hNFoZIzZ2dmBukb5yhBfQ4o8TjscDnu9Hp6NMbyWA6kKtzzETOL9YZPTNJeSz5AFArktpmfhLYWtnjPfAH/rx5gABydPX5LJKFIeGMHw1HG4+rgqTHESj5OvNkXxnQaLmzY9CKBaI3NJ91bQlgc6a0zGDke+CJZweswYc+fOnZTdL0XxV1ZW2vlxesO26XNNxmAS+bj0N6AiH5FUWXEzN1eRtZbuaACUYn7S5Dsza/nFQvCWaNsUylWv13EpUQCW4GzRg8n3WeiKG7g+A+grXZqmnU6HymjY0YUs30vcZvdGApbgfBAswcrTQpQteks/+clPbI7cVImBmYNa8Ou02v1wItOobDfEVZPjOO0lYWmChdM/PHLqymk0ef/B0SsNS9rV4AYuhrn1j9/pVbgH+jK6PGlRnRQzri+Vjec1Lixpb8kyrfria9mIDxk+y4pP2xTJ2HFYwiQezJOApSw/NEYrMTRhomHJqs/6Tb1aia1hX7+1xQY/YF9K5HfQ4c4RmkEibwnzk3oSb29vj/bZ1vOvS3CVclhCIE2aCamcsKS7DIhgSeRuraU5Ve7eVatVeEuISQW01uJiZTDnsARvDDEpa90XqBS1Wu3WrVsQJrATT9h5bfOviHwQI2j6sPSFponLKJqvk48TD/jDYDAIe0uCf6S3VCpGmFUg+eXJl69zS8WweE/BxATO8bAU4GOLU7jC5jqbBIelRF1SwA8mG2Oq1SquQRHeklWwRPFxmy0G47YIS2OprjQywVtYRSboLSEwy69DhOT4ZgehSC0/gw8sQUxMgSI+TuoAe+rq434UQo5pkiTiOzv0i9qJ8ZaMMdhtQUhp8vuQ2u327u6uYYfciSd9lrCWH/jDX2x54NpAcvi+NMgIk5nolgefz3RFQBXDVt7y4BQocHrxmox/vBxOxR/CsDRwnXOK4S86VWAS7/OCJR/b0p1+MawCqYzaicezDojEX1GtUSDJbPwreRROoz3Oh8bdJl8+wdoSROVrS3SbbZ3dKZwkCdaWuLdEoBWvQ6GKy5Dxry3xWiYkzvIzRiIEyGTyI3dZ/kFbay0dHjLsCJemjN2+qGuZi6RhyakKk58N5/WONZhHjx4hkL/F7Vn8qL7JT1PhPABni7f4ym1WvATPORRA/FrwBnFu2AOOy5U6TzHM3WtLnIXvTjz+LZZxW2qAPt85QOPCGFBYMHGyQbMNJKTOiUvQ9eVDfBsbf8D3n2LE06LS8QveG0vdr3j+zlRic5qIL8pCpzSEVOiTWlSKzEtEh4105K9+9as7OztUcIoWw5lqRCO9ZQZOv7L5+afz83N8Lohqn84hbWxsLC8v37t3L0mStbU1Ywyd7Nnf38cdj4PB4Hvf+x4WJHZ3d2u12tbWVr/ff/To0Xe+852NjY2VlRWctOt2u7jJaYKe9fvf//7yvdvkGzcESFg2e+zcI8oJER4/fkwf/XKSvh6CtKpzt0UoQggqV0/i/ed//idFsHHdoVTn4q2voepADUvUl2u12te//nWc/dJ4MFKb7mKm1J4/Oe7EEzHEBvFScpoeELXFGD6fC0W2NtG4L5kdZzgWLAVU/TxLEc6FP+jfeBJbHgRnW1QmhfgWeAz7sIVQgtC2Ts6ZGDYTJaJxUyjejkXhS0VJJO4l8FwmUPXUaWFhQdSLKbYEQU4U8T34FFKqNBKGi1q6tsTJsNoPx4whZ9r4YQFyx9pSeBJv5IElDVETI1YglW9OjpO8fEgnuLi44GuzAY34aoWamjNJmIluZ6WwF0naaojn8IPuBroU41K/38cHigRz0UudMoSJiuwrgtYGOSUiPKB5o2qHCywkt6oNGI+GbVzNOjPyyWOtDR+n1UUWquCq48x1uJZTi2qKjpdTHqdUIlOnJicmPskmduKVtgdOfG9hgLROfNHCEWIorCjDNqSAAnMALw6Zsp14o6C3JAApjC5hEPJNDPrwLwRLThqNRjGwRA+i4i3rdaUNhafyTeaKVYdSMXzkk8eZPJLnWAJo/rjWj8NSmJXoKqX8wyFjRdD5itqJYTWWogLFpHBt+wKtDrAkktjiHc8xpMfLpVmDYiw1xdTrKySnkw/vERRiimoUfccUq9WZ3ORgr3uf6INcIXQnniAUIV4PvvJqVXAtjcvf5psOOJqKwYd+4Ml9gQHymTU+KAmPDJAcsFTLP5KkcSLGW9KvLk/a+QlE817VSkSTeBkjWjl0/p2MeLNzvvLF568CHHxJdJywYIJJoH0HJNRMsizjx2lLuQXe6l4xWRxT9jkZX8hYWZQSN3ZjwZ5xeYH0V9/yYFy+6WUoXE3xjcf45+hKKVAv2qiFI/se6NmH0Ddu3HAWdgLMcBKHJWdnH5eyLMMnynx8AkoI1I4tzlhwcsKS8a+KOfOC2E5Y4kZ/LFjS4QGwKcWkQEwep8RbQoJ6vY77S4jE33A4AmdnZ51JdGRQaXwMZy5D8AIFw1K2NUYImZ+fd0ZAeM1FvvCZmRl8fwiU5B885CEUuLi4KMKnSHTCUYQEKEmS5eVl7Hmt51995g9ErZycga1WC19La+Vfjw4T3QzNQxBIv0QU55VXXkmShO6Lo2g7Ozvt8YmfgQcdHBzQK07YNjYVyrJMPKRpSndOxw8WAQ+aiFVW9NUITvQv2UfDhmJ09/y4ZFzDR1+4CDRqHMnfhn3NrAyWJqNS3NKR9dRxjLeUeG4Q92FPAJZ8oDAWjQVLo8D3lngkay16HQyitsXa2joNfWk0gRMxIFEdB/YINTnsERCKmJenGzduAGYqlQoe6K+PeHx65nx0TB6CQMSnHGOIx4xPJaS9JOmy6Fe+VFTkcGQe4eWXXy6VZ8av9pmgopz1okX1ycyfdXxnOxEJK+PQ7OxsfGTdm3wdjZK8/PLLOi2FaP7hvqytRDgyTxUgMQSEPmnAh8NApSM5Gr0tLy/rQVtgPOcbsfG/gZEZ3uIGpsCdeE47P/LM7AXCLw9LzgfKrnwSj3PHYLN01OzTu3Povby87BuMi8DwmF23g0jBnFLppsYdCJ02JsTZiH1/Aw6QTwYirlLBk/fAgGw6rSDdS50unfMtJ+7wOcNFWh2fR6iqoc/8/Dz/q02bTqsjwHSKcZh4qCozLeTU8Z2CaT5OqnhmL4ShF3EIfkQqwABPq+M7kalaNoCbycdJOhyIW1FIX/Eg92QUZlVxjQOmwp+KJnKZIAtNYT7xsOQDqjBdEpZi6KVnHtRySoDvcBhjPvjgA3It6fmDDz7AM/32ej389nq9f/mXf/nARRTeywnPv/rVr3qMPvjgg9PTU3y6qdfr4eE0p1//+tcU/5QRpRLxQQ8fPtSBoE6ngy9FIRoejnIScf7pn/7JxwHfauK/R0dHP/rRj/DQ6XToQfzlRAnxu7+/DzF++MMfirR4/ru/+zt8a4oIX5/6/ve/v8eIXu3v7//gBz/Qr/b39//2b/92NyfOcHd39969ewg8PDzEX6S9d+8e2N5j9Nd//dd4aOYEnhQu6K233tra2moW6d69e/fv3+dMENj00927d0UIvvmEVysrK81mE7/4pA2P1mg0VlZWGjlRID3j9y/+4i8ajcby8jK95Qx54PLy8srKytramogPWltbw+gKowrEX15eXltbo9EGp7W1NXqmhD5CFiIyPaAsFIJnJ6FcpFXiSQxptMTDv/3tb+NhcXERAxoaOSGQxi6I8MYbbyx6iIZE/O/t27drapglWFEWJAY9cLZvvPEGZKOK4BJqeuONN8RYDb/f/va3eSqeC5eHngUfIZ4oshgaChWhYehzSwHzHolGU4SlwNsRjtPGSMajcQy7pnEp8uZdHl98jfiKyJeFuHCaR9bhQmDxq+ni4sLJSoQHZPYRj+BMgix8wotS/METX6WgQH5ohuIM2ZV6w7iLCn27SHxbJMalwOoU31cZu6LlIefyGJbf+Cs882U537ogRQ6sGkauRIpVTN/C0ih4LZ7+DeCTr0uKt2E04XF42pfCEsQA1TWNRcO472hxGjf+F5qc3cnXx6bFf+okjP4oCOQTcLsKgUfTVg7xpEEGhYOoYYchc6TGOjHqdUYLCFmq3ivSfJiE6i5DGocE0sRb/rD9d2YRgA8dMh4sjZXZJWm63K7pi0uTGfGrE2asfK9UmC8QOZXg85UDCOREIyf/+IS+V4Lzi1OPk9nGeDNeigIxAjwL+kxOwehV+XFaIUpptKnQdLld0wtF4XHrNb2ANPUOrukyte90KbT3o4cIApBeZLpkFTzzo5EzMPAqPqNxo9HzSyKnsHyj59JAr+n50/Os0BffBFwTkbYALyDpWW7ye/irLxYI6ZCJDa9IG2PzS19NUISwVJzGg6UJhLuma/o/Qi++sRuXtJG66hyH+YaXyyQP/P2iwJKmK7K62ryP/CgwRVjiGem3197SNf1fpP9rDXgq5X1uSpsYOf6AYWmk9H8ZJ0EnCVv+y+QVFqAElqaCkNd0TaV0cXHxh7G3UEwQTWuMP4EYV6fPgPmItxKfffZZOJcLF/Hw0uTkZvkoBpBEvuFM42kqhjQmbTz/0roTsDSutDECiAdOLwmxnH+nLtPzoRdqWOQcuOnnLxw5ezvf1CQiiL+lnX/c4W1MTDDUqw6RWfiSODkEOE+W4xextZTKHHBrfGl1i/K1MSfPS5XncjSuRX3md5LCxj3MU/MRv2PB0sSFchZBwtLoCw5FLybpbiZ6yOfeVbicOpC/FXFiyhUIcTIfFs+66ky1wJExwxRQhS+Clt+XFyUUI/dw1s4sAoEBqZyqCOSrdTgZ+SSMKUUpTZzW2cA083CJpqWiUbTCL5+pE40m9pYmRooSWBoV4dEp5ZCd5RY1J857D9nJcArUqZwUH3NiEoWaCsOhv6Hopj9yWVIhjLVW85mo6kM0VDYxUJAYPqOyiSynHpyVMlJF9slG4YgfqBddEQHZIgnxedb8lU8VQtTSrEUrGrmaECe9WzqmUJPVvpPP86enT59eKX9dC844utYiNTZFnZey9YGQeOCRY3yyq/KWnL4hqNVq1SKu3fQRXdw0QXzfVVQBmiwVqJ5/TIH+8t/l4hWo/PovCp+A+O23go++JLg+/oce9N/JSF92QoH68w0TkO/ulgluiDHFjxpknq8e8LfiMptLXocTIOfHG23w23qRNCwOH8WreJrK6JAPTFG0CTiH5RevRlMFxYCoIzUKmZimxSeewj6QD5ZKkenybhOnKFiq1+u1Ws33XRlNMbZPfxpnWiTMN77co8kX7qQA5CSue8fjEbRW/IQSbjLWcZxYy+9tHHesIEjfe81vvNa/dJ22SO4j3EUdfyX2BEQXXUOqUob8yyaXzPrzopr6CgxVh69a42ncxhwgusc9mWjUGOh6xC3QeZ1Wgj7oJQhf22oVPxVG4e3xR3hi7HVwcEBpxxrPOe/ic9LQNVsgkMaHDYHZPCc0hNElQGGckzvxnHK3Wq0kSS4zdpsi+QaVpeEm+OliPm41nk9ABj5SrkPC42VneJZllbiv0xrXF8CugoSHQUQfjtPRnMS/TZfmN1FqL8dHzrep+g6eL+1Y5Lsck1sQPkTD5/5SdV0m+MSMzAIGDgaRR2upjxxqwxozevOR05RTSF19AYgDgBjqEa5UKhWOHxxyJsYqsJ2ZmalWqwR7TmSdAJJrtRoxnwDXAyLhLefMRxgUgUcODEdEHIj9r//6r6MxYSkMHmNBUST/EljS7HzeEiwgd58/F3LCjyliRiQfp3EXWZjgd5EtwzCjYI/jhynCGzfxnL+GJcHQl5cmoyBWq8gpc2mIzsIUgZzLGSYRh1KJwURYhtI4tliDvr94RtZO8XQxA+Xyfa9dF42H+zQjmMeEaDlLNckLPhwOw31qOBwKblQEke/CwkKapiF9GWPUx2SNf1QEAjKl+bRtgK3+y9ly/hQCcx/IPZyFc9yGh3a7XalUWq2WKF1gWBZPtVrtvffe4/ONMeSbM+OwFI83Pr9KTAYG3K+xYclay6+799Egp9KYvEH7+PhiOlOJwCdPnjjDOWdjDP4a9q1iW0QRekuv8DAYDJ48ecIbJWXB//pKYYooRbBkix9I1qmc6uJkmDXkqnCqlF4JJgEkIz68rqksvHTW2sePH3MV8Wj8L9WCD5Z4bWqn0ym2+HqCDZp7q+rXKuTggYPBgIrG24loFVxargrBXLQ60JMnT7hOeBZUOq6KQZF4Xo8fP9YVJ2pTFBOdfTAY0INVNGAjPMTkFWqMmZubc8LShx9+KIChz4jC6S/naYxJkmRmZubg4ODDDz/s9/u6PSALnpaTyJTzh32fn593Zp3l38vgrYWULJq06DiDwSBN05mZmZ2dHS7MkydPwNNZCqPg3ygLgMAkSf78z/98a2ur2+3GwJIPJ3ywNO5kXWnuk0/iCViKJGMMn2TY3993xnGq2MfQ95eesywTHYBbpVLOfLpGt4ytrS3MnPDANE17vZ5o7kjO+evcjbKV/X5feEuRqhDEVRqp2zA5/WMf58tIPkEqrsBwWi6YcWEMnn1IPJZKydUIpOJsRUMVcvIy0rMeo+gGH1DOZRoGDUzDskL1KwAAIABJREFUTCjrarUqOhR8hX6/3263+bQhd33wqlarJUmCTkdggAj1eh3eEg+k7gm/BFOa7XZb+EPdbhfTic6eTt4ShQCrtGfW6/WIA3CuVM9pmsJbIrEz9l0oyyrOWX3hqkyS5NatW4n/67QaFXwe0rPiPNu0YCmGj3vLg4g0MSxRk8IUvFOnohqcr7j2dS/l8Vutlp4EM8V+68sdlVqtVtFeq9Uqbzr1en1lZaXValE42lO1Wl1aWuI5Yoa3Xq87h5a8LKJ0g8GgWq1iGc+pKJHcRyLfcGQf53Dr94XrrIXOdW0G+AeEEVmE4wiG4d7uM/dOJsYze+zkLxqwEFgPJnyZcjmdRQhLEk/iM4Djzt5T1gRLCM+yrFKpACpogQSLQOhc/X4/TVO8AmKhV5ridBm8JcIhzpn6Jm0ArlarFJ5lGbYL1et1cLa5bgkeaBKPapkWyTj23Llzp1KpIBoYWjUFIqoA3hKEsTlKbW5uUrQsy8j+RCqZngFL9XrdCUs+HBqLrhqT3LCkI00MS2gK+Mu9XVvs1WIAQvF1ZFHNOpAccxHBWYs8kBo64AQtA03QGNNut6vVarfbpWd0MzSpxcVFYoLOUNqkjDJ5eOCwZIoGaOoUtjJGwYYzgqDLiGqKRtn54ExlXJbXl4Qi+7wZzc3JWTTF0kLhmXtROgvO2cdQRxZvnYOSMEMfiel62jY9FhOjJvEAHmmaYnoAnpNhPkq/3weWcM+pWq2KaQknLHH4qVarh4eHtOgChvCi1tfXKVNKYhQsUV6ApWq1KvyzxcVFgiU+y+LzuW0OSzS0RdFef/114gmrArwUM8nEzTnLbXJYivGWAmZfhE8Rlkau2TjN+Uq8Jd1EbA4zmCIjLWPEVK/X4bCjgeLt4eEhvHtqmvDxm80md2La+W7OXq+HKicgzLKs1Wo1m800TSkEebVarW63y+ub2iI5W1iZRO7wnygaOUxoQDSAQiowCTQpHmKKFOktCVU/HzLGcJPkzLoUlkzR+jsfxpXKRFteXhFi9jiQnBqwZhLI2gd7PljyzTYL7yrAx6nJsZQjQmJWkUsZmtxb4tNo8Gn6/T51JbxttVozMzMCrkCVSgX7OSmEw5LN/QzywwiWEE4zfhhxPnjwgJwe3uu5KdCwxL0u5Fir1WZmZvgKGcK73S6mJSkXakUCluAXLi4uUl7wDslBpP2cVEFZlp2fn9scw3jbKIWlZ/5NB/o5Bh0mwCQNSyLaS+K/M9lk3hLqW6zEoK1AlZhwOz4+npmZqdfraZpiQydU3Gg00jSFF0+NO0mSnZ0dahnAANTZ+vo68aRWW61Wd3Z2CDbQ6IF/zrk+ZAdDgFEMGhzCKTKhFLrB7du3gXzIlHbBhg2N7sPopXrLQ4CcceKX68blXCqVngG7IiIV8epzxvElj3fsRBZjZWQVWjjHudZfa3qaQYdftbZt9CSecRF24mlYgjXA0JPGf/CWyCkhqtVqe3t7vN5pJx43LwKW9vf3CfDIW6pWq0dHR6Q3wADPKyvuxKPsaLs5Qtrt9uuvv04ykJVI03RhYQFmE5FtEZZobcnksLS6ukpOGE1p1uv1s7Mz2ATOql6vdzodW1yzsJfwlrTx11BR+tYZHsAezlbEiYWlJPrcEu910C+8md3dXdJprVYD5KRp+ujRo0qlYtg0K9oBmiBajM1hqdVqDQaDWq2GKTKwQq00m01qfAhBA7XWAidMjjQmhz0a2lCl8obFoUjDEnKBwHfu3IE8aM20iutbxPZ1ZoKlQEydUAeOO8jlTLScJmiRBTmnaq1nDSnATS+cOGU2RfLFcQYGfFnr0oleE+LhPjl9RYspHY+vI2tYchZkWhQDS76Jd7HlQcMSQAvdE2tLAm+stbVardPpcLbwlgRnMYm3u7uLfUzkEiH85OSEOPMBKAkv1pZMDkscw1qt1urqqoaldrv95ptvmuKMC8gJS5VKZXV1lUbweAtuJycnfASMOGmarq2tkbUh/ZtLwFKpY8SBZ1yfKd7TQjS5QfzysMQJmsWkGbxpw1ZfoO5utwtYomVD2nVDS3+8tlD9eEAT4W4swRJHOBpTECwZY1ZXVzUs0aomlluJcwCWZmZmms0m/tKyE7l9RtkL4zEcZiJYcvKZ2FsyyhaD4nfi+VZ6S22xCC9dIDFFcnJ25kWBvt0WvirzFSGgbc5EF81ZHPHKFM8qaD5GkbO8pe0hLKrgFgjh2iO6efNmYBIPN5tU8+s2sLVVe0tJkmCoykO0tyRgiV8vQtEAS+QJjQVLMCzINEmSZrPJYYnsDEbJfHKIalNP4lUqlb29PbIYMFzgBjNo890ctHBON7xwmSHSwsLCtGDJh1XjekuTw1KA9CRezASIMWZ+fr7dbuNIxOPHj/HQ7XYXFxdv3LhBNTc7O4tXJoecfr+/vLy8t7e3srJC7Qkzco8fP56fn0daY8zR0dHm5maj0XjnnXeMMa1Wa35+3jBYGgwGmOszxuzs7OCttfY73/mOKRogVOry8vL777/f6/Uajcbi4iLOQywuLi4vLyPmYDDgk3g3btw4ODiYnZ09Pj5eWVnBHDF5S1Quw+wLTqI4N61hljleyaU0MROdUMtMgRROZRywUzW2aIt5HBzuCTDXwgwGA33Cgx8eErJxYbg8XHL+F4d7iBslIVFFEZywRA4rLwJIHKQTpRYMRfvhBD7ilVXEc6GsY4j73LqAgr+Wn9PXvvY1p7f0/vvvw1vColG3211aWkqS5Be/+MXs7OzBwYHJN0+fn5/Pz8/TzBuZ4EqlgnNLxBlWgp7v379/cHDQ7XZXVlZgBLCf4mc/+5nJNzjAyNBmh0F+bgmBsACPHz8GDCD5yspKt9udnZ396U9/euPGDZrqx9R9u93+3ve+J6wQVZPwlmA9wKfX6yGXLMvm5+eR3draWr1e39jYuHHjBpnTer0+Ozvb7XZ5A5sYlkpdpasmkemEsBRDqCfuYyIQ3MjRgbdEoxIMdtI0xY5JQhRTnMTji4HoM4AN8pbQKGnCGgtUfBJvdXVVdza+VQFzvnximvoDrZmhg1FjopEarS1Z1/hxwOY6uGZQRjEZrbU6bkVMzMFELMBQoSg+D7Gs+Dy+CInJAs/o1fApaa4frYIME2coxOMP2npSuC3WV5gajUagLFoVHKH5q4FyNJ0q5arQhXLqXGcdo3ZRCpGFj49TRb5JPEzW8XkImAWYfhr5oaKx5YGzjfGWCMm4S9Rqtba3t/FAe8R5GU3RW7L5mJWcIZwvrNVqcOw4LBlj0jR9++23bb7ti2ZloCIBS+AGxxH7MiA/rNzm5ib3ouB0Wmtp47uoHYKlNE1HwevJfTjkdKEuCzuu3AMhVw5LmDgG/Jh8zQbKhe0+ODig7TTUdLIs29zcRBxqHLTrmtaW+DImwRJ5V2hGvV6P9qkTyNkiLNEDrUKZ4jQgRk/Hx8dZlqEIFF6pVM7OzlqtFuYKCAiT4qlY/qBtty1O4hllVnxWwEkxWCL+cgSlQOOfD9Q2XYfzvPhfrZDIclm2YpzmN+ChxsUeLaeqdXX4qDQCL87S0lJY1cQQEnJY0pF51qIIzlRan0Kl/G24YZjiTkvnrkufzEIeQQFY4qcAjTHoR/1+Hx0f609YQ/LBEt9UlRV3exMsoZ1Qd07TdGlpiQIxpSaED8AS5Aegnp2dOWHp/v37tghLIO0t4e/5+TmKzLnV6/W7d+/SujUVLU3TjY0Nw8bHpPzJYMn3NgphroAcsKSlmRiW6uxLDYANLDVBj0AdwBKWf7CwhLTLy8u0cRxJaNmJQngW9+7dM8a0223CAzToxcVFbPWx1qZpSsMixOddC9z4UdmEHQJvt9vLy8s1dubc5HCFk9405jK5fyY6p7PrisDnA0u++uIKMZ7xNb3SD1YtetOvcBFEXjzcFr00XV4aLtjc1tdqNVrBxhiIIAoHM8XiOaKRjcuKRJM5fBcWppi48Fl+CSxNuvq06nzWCnQivVEjBl014Sah6ygmlZ0IlnwOqFgApp6FB44rWJfFIIN2shE5tzwA3qhSiCGeeS3z1eKlpSX0ZSw71dgZKYostudRp6bhcrvdxqgXrTHJj9NyWKqx0yNWwZLNZ2XoBHHCNhJjxx3wKckvtAXP09NTy3biUV0k+XFaJyz5vCJu+UW4BrbIq/Yug2puWHqmtjxMAEu84er+Rq+Oj4/FRkyQuMnKunomtSGavbXKzPFZHZ57v98XEtqigdDhaDoZ2yjBxYMYYEjjYiFMQCF44O3SFG2B1t64FDBkQntcFUIGpzzOovFw5/SRU0WG2Vwhp2HdWMDS0dFRlp+A5ltpV1dX8Zd6b5afrKSTImT+ML7B7LHJRzyAH1gucQQS8W/duhWoFKEKU/R+tN6sq3mEKWNr9bp+OU9dlT4S++5EWl06UTQhWFVdPsRJFFnAA40zsizDcVqKkBSP05q8efC0vkxpvALOImamNohTYxPPOhAPdE9SVjy3ZHL3SFw+NMhv2xNscT8THeFK81P81EG4K2ZybykMS2KObuSHqDRNW60WMcGwvu65QkLQcDikzW5CDGNMq9US38ksmcTzwZLxj/ucZIpN2Tl1bq3tdrt8VCI6kjPESeElAWdHcsYXbcgow6FF8s0UxcwgCUmcN4g7VyMiK4JHKB1f68JqvelS8Gfnspktwh4nPkmoU+lXNNjMsgx2E5hxfHxMcAWbgm4PXOETIDTA3NzcpP1U8Ndhnu7evSuYwA8+OjoibjR31Gq1XnvttdJa0Frlv7p2AhWkE4rIYt5Vx/dpm1M8LPFnn7eEnXg6nN9xxy2y83JVqxqPhiWj0EKwEmNfPrgRzGvq3JJQphYvrCJKJWDJWUcUEuhQzrz4JF74EnHhOWl4+J//+R84avQBp1p+pIcCA0TXh66vr1NkiARACXCY0FvSagqQaFUivN/vixri0Zz17asnndZJtniTps4u4DrwsmTqWkYhqi64bn8isvCWtLrG0rzIS7s+TkmceTnLEtC2KKxzXlFEFgmdmdp8Eo/ORGNDv2FT//x5cXGRDzMJbLIs29zcRMND887yxUJ4P3TiBGjH9+bwxXOKH1Ca1oxT4T7k9iX3vfKp2vdgXTbOd0rJ+JufUR2EaG5ujht3gQEUmcJ9K5fn5+cUkuVrTgKWOGmwsQqEdIhxTeKJ1kh/9SSN0JVRNe6DJZtPnDoTEsG4+6pg4i0PGpZ++9vfYpIATDAaGw6HH3/8MeAggEmoHZTovffe494V1uY1LJXsxPOtLWmNRxLVn0jrDBdvYzJ1hlNy0UsFT2dGvgUVPbTnWejG5Bs86sZN5IQlvecqXPbSDVc+DlwPWnu+6uBShRdCdMGFSunZtzzGp+ZxuweQqdfr1Wo12h9FalxfXyccMsUzcwsLC1hMTtjlh9ZarBVhJwVAaGZmBnEASwk7S2eM4dfGhGvN1xJsbtOFqn3xRdWIStEN3qdtp4bDpJNr/kSTTeLFR0iKlw+V8jEMFH0ISpLX1OVDpaIG1MVD9CSeL6Hx7FKJhKUYb0ksNfEIh4eHGPmBiTEGNxtgL7R1wRJ954kn5GJYayEbhyUt5Bg78Uyx9Tv14lOWZdXZ6/V6vR4dp9BNRAQa/+kQXwhvK4PB4Pz8HEvilpmJ//iP/8A1emBOySk7LR4djhHtxuRmSLQhxOeZctlEdsaYDz/8cHZ2Vpg5y46bcNlAzlZbejwlpvqoyM63OHrFpSIlOKUSHZhUyqs1ZqcGYGl2dpZP4uNEC5aLut1ut9s9ODjAqZdf/OIXDx482NzcnJ+f39/fN8bMz883Go2Tk5N333232+32+31ADn2wp9FoHB8fLy4u4vhLu92+cePG4eFhmqY7Ozv9fh8nKHGiJcuyb3zjG6JougFb5oLTIRveJKh0omHwZ61ApILkWqWmCF2meGBOt4GYitCpKPKgeJSKEy4fgsZ6vR5OxZIC+/3+3t5er9ejCTeuIq5SQXwnHhUKbI+Ojo6OjjqdDqoY8Q8PD+my13FhiUc7OTnpdDqdTufk5OR3v/udiGPVqThb7Olpmt64cYNgiVpLv99/9OgR5+Osi8Fg8PTpU97HuXil3pJvywN/vri4MMb86le/wtZlMLHWLi8vNxqNt99+e2dnBytDFxcXFxcXiMDXiur1+tLS0v7+/sHBwY9+9KOnT5/Czdra2oLxr1arJJtYZHqusETtgF+1QNXJlcsrMpwRfysm5Xib5oefiGen06EVbGdCQUIkZyqnSCLQxxP9k6akeJxxvSUdKDQZ1ipPEvBadKGs8pZ4fCEG8Y8RhhPf8gCq1Wp7e3uoZSwG0CReo9Gw+TYHbKOiMwCbm5tYvOVXWFlrO50O/CFysLAfHYugWCTnJwf0MEK3DaEoEchVytPigc9cce0JDBMqdYrkc+utaiG81nRkQUIMq/oFvxOPb9Qm4ru6NQmGtN6TsMuHeL50rqher+M2BFM8yFhKtC+GQqCKLL98ASv/1Wr19PTUxwQL/lpL2lvCA467CIWLKiDOYscWvaJdP5g3i/eWOGJZa+HrcFiCAm3uLaEgOPiFGXX8IjKt+4xGo3fffReuG+7axkeNOSxpmhCWLkMClrjBEvtejGt2mGpRyCN6I68tOgzL2/eDBw/q7DsrxmNQwmSLRkGUVIyV+LPIyOYDvcAkniAhMA8Uz1owHeIkEzzp4lSCz/A5R7umaFup6gNymvxqy4zth8Q+WnQbmAzaCry6ukpHJmkXE7Yw0MSdgKWTkxPM2pGQ6OorKysUiJ6PmQp8kiBMzioTlSWUaVSDEXw0ZlC4r37D9a7fBgYlvnBRBBD/sIW4Jk6s/FGgiKDf6rUlypcffzw5OaEjt+KoQACiuLfEJ/3ooCRldPfuXWRNn5AnJtxscgkJlnj92iIscRILTll+VtJZg0mS3Lx5c7JzS/SAufGDgwM6NgoUqNfriFDL70nQqqNNDbQt4r333sNAEKlwB0K1Wn38+PEYsBSztjQxUbukg0p0zDbJCU2n2+3SVn1qtYjm3MSyu7vLkyMQwyUuP2XUaDToDB0WKnARPVjx3cBZfvKXzvNTCLLj41xOpbBkizYFsMTHaJyPUR2eWwGnqsWDfhWuKat8UBFBZ+EzWFx4jih6yO8rMrr9IL/cnffzLD9URMM3ygIXcGC/rMlNDHodPpds2F0hRPyTCjb/Qsry8jK3jGgArVZLfP3aSVrtorw8pkiix1uCG08YU6fxb2NgSdSaLrgpwpLTW6JjTKgaXGFAx4+wFFGpVHA1g/CWwrCEWxhwLLeVf/223W7jQwTUMATpSTwQfG7eDHD8ETwhPCLgPBM/LEzqEsdp6S0fPROdn5/DLhEMwH76PvY9wZYHbfNNDuEES8PhEAfChsPhxcUFngVDmouDY0Sw9MEHH9AVpmRmcQ+qD3qeq7dEjYb24+J2DZNfhcdnVDY2NtCYasWbvI+Pj2EOeK8wxugJGao/flwOA+o0TW/fvs2v/YbXT6fK0RNopxZeLS0tpeyqYFQbliWsy3ZrWBINUb8Kw5Kg8AyYKVpD47KJpXU6mbdERGuzvnG0E5a0VD5V0FunrxwoslamSOj8Swx9e8l4iFhbclZEWJm6aKJqRHw8XN5b4kVwxixtFeIhMImHCIQc9Xp9ZmZma2sLQ1KTT76hSy4sLJgxvSXsn0Tu5DHDx8WuFpriEzVIE7nkLYGDgBNoG5cGJfn94hht48oGfax+LFjCpA7Y8jsvMDstCG8ngKWRy3ka5W4TnglpaKe4D5ZGoxGMqrV2NBrxnXhgboypVqv63JIXlrRkU4cl3i6zLMMXx1v597JoHejOnTvkemOkgOkXDB8SdbUPPpzRVh9JGgwG9eJ3KJARlhZsfqsHMUzT9MGDByY/4JLld+9ba/f392lpgYZy9Xqdz/NyErBEovpssfHciadnxjg3X76maA1FRfheBYrgZBIQ1RdN92qhCk2cv1MDvnG6cGR5Wue8oi0iHxdAx7SuGhQC6HKNNbVr/TWuW5eOI3QYP47hqtCE8PAOci4SYAnP2lvK2HcuaJxHt4i181v5syxbWVkhnNCwRIQkcF8ajQaHt7T4GcCW+tISEV9fNH5YAsGr4Lnj/iSxTmyKH7YQ2nZO4uGSIZt/jcHmV4nTV0y52gUshXfijZTDpOfJMLeEZ5M7D/v7+6Xnlqy1uIsny7JmsykkQXH0Tgei2A9bOCc9I8kUDYdYW6LRChxh8p3X19cTdvcPNWia8aRw6ipQIjV6Ag9aDOeg9eDBA5rEq7HPFbZaLXz7hJYfkvwOVtrSg6EcJfEtaznHyxSf90y8EnfiWWaSRId3WgEKFHMsxm+JwrVmyj5KxF8ZZsh0TJ/jqItJ8Z3FFCE6jmZrXWoUv2ORKHVpeDgmPfu8H5D2z5xTuKZsOdCpTB/FbHkwqta08OFJPA1LBBh4wORKq9W6desW3ctgXJcPgTBNQucEaP42Hpao12tYIpOCOfy9vb0sv4uICihgidepD5aMWgLnb2nobHPnkrYUCiaTwRJHJm78wZn+ouAHBwc2eGiJ0mJS/ezsTLwaDodZ8J6Iq4UlZ2t2wlI7/9Y45tNMvrZUzb97ZK1Fg8aUGneNwRZrS/Cm0XAr+WcACZaoFVpr3333XRp9CFhCvdLkIbXRhN22V1PfZNLlde6gM54jeIjm9JZM0e6UajhgmGIqKPItxeG1IBLigVaDrdJGIKPI3MWz6KvilfNXlEIHOt9SHO2QgXQt67ROvfG8jGsQYzwOoshX8xSwUareGOJ8fCKN6y1xWMK0HvaY4HC0b22JiLwlimkULG1vb4dhqaa+t5TlZ7GttRjjpmmKz7ZdHpYGg4ETlrA4SqsMiDwzM4MtD0a1n3q9Ppm3pP9ORuHkkcyfh7ck6ODgAFWIRgzHfH5+/vDwsN/v09uf//znxpjz8/ONjY35+fl+v394eLi4uPj48eN+v7+9vS36wHe/+1267hBnIKrV6s7OzpMnT/DddM7cWvv3f//3aBk4+EKNe2tr62/+5m/Oz8+73e7e3h7OQJycnPR6ve985ztbW1sIwekrLFydnp4SAnFIwNkCOpcAMvn5J/pLDfHx48cClgbsMzmUxLKRMmVHr+ivT/88ZjyAWdf0EXELj9CfPn3Kx92+LWT8FT+WQUUWpXC+Im3zt9TYuKj0/SRb7N74MJhVptwoi++cExN1LXwgkx8eskVYGgwGIlxkKiThKuKtgvMRr2x+2sx4YCncZpzhH3/8Mf9L/LnMg8HgK1/5CsHSzs4Onfr68MMPcXRpdnaWlpYXFxfff/99gqX9/X18WCjLMrgmpIQwLGVZ1u/36awhFnsODg6yLFteXn7nnXf6/T42PjgVjnuZwYSKs7i4uLKyQjEPDg6+9a1v4SgbPuRm8hH2Rx99RF8H5d1cwxLVWrPZFN9aGwwGS0tLnU7n/PwcO90HgwGOkfzmN7+xqv0bY+r1+te//nXAEp0o0tigTX3A/j8HEpm+9MxDPM3UN4jD6cGWASzkYNI2Y/fPb25u0gAqYZfKHB4eJvlNvUQmhzeacLP5J9W73W4tv6nTsO/MYuswBfJLwdfX17P8gILJ76tHeDu/yxw7LAgFncpxdmbeAayyQQKWTBF74qsgHNO4zLEzRBTBKCARyX2icj4+2UzR4gfk15JE4iup1BZBhRfHh5q+2vRlLfjwShfCcGtoVZPQDUYn56kCrU4XSsQpDeHENy5TkUWh8HDz5s2MbaqGb4TpID7fbvM+i/tJaccBFnczdURMw1KmvjZLIoktD7R+LA4bcOZiEs/my9ttdkP52tqaZSviJv92z2AwaOWflBOtQsAS6VCsTYCw9O6cxHNWitjy4AOAZ8XjSsLgB6b1JkadURzy4dXnAEvAHtpMCf222IctsFb26NGjJD+2luVnJ9M0XV5e5hvEibB7hzYgov7AE3tIkIQ2iAMXKRo9W2sbjQbiZPnnMGhPuWAC5noEatg0i5CTmxirbEpgy4OPxq0XnnuAmzOaEEyTz6ZPIIlVuvKJav3wGUhii6aTHmKKEFO6wGBCJ9dilCo/RjxnSUslDxBP5dvyIJq0MQZrQmS10fuovxtjaKM2+i+i0UQ9jH6tVsMGcZPDj89b4mm5i0m5YN0enPlyQJbf5G0ULBHBcMFe1et1bBCHhYEGAFfn5+fAJzIjRL478drsWnoQJgnpL20nhi1yKj8p3iAegCUNPBoqwm+dwFOaaRiT8Pu8YYn3DWo3vBFTzEFxjo7C6dZhQYPBIGNHcWkoJ5iY4mE9/dZaiybFw+EY6duIxThLi+TUgHOcDipdWxpLzxOQL+FlhLFx3oyoBZGXUS5LQKTSUgSy1mx15YqG6mQoBiu6kegWqGP6mijlq8PjC+hTDsUJ11rgZjZRat8N4gGitHxxSJzEwLKT3hrHcxdmxOTd2ZcdUVK8+ZCi2fwTNsTE5lbFKAWSiSAaqO8tcTl5YTP2YYss33xI2Tl3/xp1bikGIUp9l2dsoi+ATAGKzG4kvCWnEETkXTpbXimJShWp9Hw6hRvVhzW30nz1xIJujrbYiwLxdSoRoosmlBAgfvmQs8giIw1vPNwZX6tISxhW6VjhgcjhJKLWdHzxNnISjyd3NgyrGqRTVK527aiBtEGkcFEEzqc0vpAzLJ6z4DoOZS0il85PBrLg2qMtDwIPnPOWTiU4CbCkzy1NhcSWB10LpAqeO1cRj8ZfiXNL1jVU5fwDqtaa51seIhFC+0NOCIkBFZHRyDN95+PzLOwtxcOS8XeAgO6Mq0uEieI4e7tVdiSS2wtFgCU+RnN6dYJ0WTQsOaPFM9QUA/bx3MatjkB836vIJKJtj8tnAtX5GjZxC8CbcXVDH8bwwHAWgpWmgK10akl7SzEN20eU1glLohZ82ivNopZfGC+Yi5hcsSZOdb7jtDw5BY7lsJoyb8kHPGEIGReTArlEkncSj1hfXFzoSTxT7F28bpwt1arLMAPSAAAG9ElEQVTBHf2Ge10gXHBzki32UuPaaCtEDWQdIKusg1M28VcIo2GJS1WatfOV861VHSkyR2fta0l0oHPwYf23P/hyd7oOumiap1POQBYx8kxGNP2iw8PGOvBWdEDjKaNzaM9DBMPSZTb910n83JLxz6JHEs2hJUny0ksvjXXhcoAnHjBRr2HJRzGtRVRKmqYzMzP69geK7OMvjIxxtXY6yqIvBxIeidPaazhxAsxYsBSI5hTj2bNnL42KM4bOeDgMhN0H4spYPIDEXx/FxPERLrOi5+dGuCHKGc5/KRoeDg4OREjgGfEBSzwQy1oZ+3o0nSgUzz6iON1uNyb+tIj3Lurtmb+f87Sw0Ty+L6GIH4gjAp2fQNUJnX95eAyfGM4BPjF6IIofVDntqSiaNoWmDIq0hAKWjNJkuFC+WhDe0nSpFJbE+EyQc8YC1G63NSyFx3nir9Y/h6XJJvF8IOQLiYElnakvRLyVsCQSPMuvMHr33Xd/8pOfrK6uLi4uLiwsLCwsfP3rX79169bNmzfxC8LzAqO5uTmEvPrqq4gzNzc3Nze3sLCA51dffRUxbypaWFjAdYd4S78IxzNxI6IkePja175GHJAjjzbnoj/5kz+pVCpzc3N//Md/LF5VcqJnZwRch/XKK6/w+HNzcwgPE88FxPlUKpUbN244E87OzuIXD3i+ceOGCEcIfumVYMuZ0CukEiJBjTwyfw7LSRlpeuWVV0Q0X2QIgPhQr36LZygWgXNzc1/60pegbTDH22q1+qUvfYniIBAVRzWoGwyYo4GhZaJh6ybNiZLg+ctf/rKOQ4GI/Nprr+Hva0Xi8V9TdOvWLXp+9dVXX331VR2Hs6KYFP92Tvj7p3/6p7fj6I033rh9+/aNGzdee+01/WpxcVHEpPA3cuJveeAbb7xRqVRefvnl11577Vvf+tadO3fwCg9vvvnmm2+++QYj/KXwpaUl/F1bW1tbW3uzSGD+R3/0R3fu3MFbZzSE3L17F89/+Zd/effuXXrw0e3bt19++eVbt27dvXt3c3PTFw2vms0mnikmnt9666379+/fv38ff+/fv49Xc3NzX/nKV5Ik6Xa7I9enjJ65vCUBDAHAiKEACAlk8VEBlpyC8gxS9oGNZrNZH59oczbR8vIyfyXe+uIjkIQZiwKpkiKJt5Q13+Faq9WoCDq+5qaZUwjiU6B40OIRf3qFfas6nPj42GrlcDnFQ6BQMSTigwPOk43Fx8dNB/oij0U4zwjCxl8dHiBKwh84Hx7oI2zUpCsPYpKECclxY3cgr3CgCKfnapEohL/yxXdywLBD/Gr+nObn50U04iOY4AFjFJEdODvHWIIbkW9wduPGDS05vZ2ZmdFJnIEBquVfXRj5PwPoM/UCSCaAJY0al4UlLrSW9dmzZ/BAiWgmjc+q0SSbb/JtulRXU4JkXkWIIJ7WGcFHibLFAVgK2EHOEH85LIm3icv+OmGS5Ann6xNGvIqxuc6EIoKTD1dmLQKWasqICzkFE2cxw1n4MhVZa0l07WhWKGYkjBFR0UR4uJaviAJV4BNGJwkwARoBJn1JCFCRI4fVcDuk5GPpLdC8w3xIzkAqH4dSCcWQV7yqx51b0mjhjOnErRhk0rDihDrN1v29JR8sUZzhpQkTo8PhEN/TDcQhQgjFF6+cSSJJTNf6ptF9k+mlJNY29CoCLZD4kpvi0otzQSXNvx3AF2YoQsw6kA6n5SixGEYRKNPMtQaml9kE6XAkOTg44Kt39EDh4hUP91GLrUe2Wi0xTqLRlSZnfKJxx1vNZpMPmFpqaOUc4oxFnHOiBjqcEja+4SH62ZeWk3D3tQnWr3jI8yQf2OvASAmpOPjLYUMXeUKhGWlYEnI6YSmASQIbtPEPINNYiBUTPwqWJsPMLxCV3mkYTnv5aOG3gRvg42niAoaZ8GHEaDTCNVx4nkqOmo/zry9foTqfSL4sOE/KQpC4eYwnmSKJ4VcgTiDa06dPxSBPpx1rtKff8r8muIBvgvsCnCMzX6BzwwsfopniJgvfoC08eisd2wmi0RvfvoTL/ZxDtDCJrVUYL4q3nIz6yN6obOu2iOm0/Nr4jwsHMQjyks7YKbQo0lhyPDearmDDKVnVPyQq1clUEPRzp3GrfqhQDTRVocagmI7w+fbicfUzbmRnjVyS7YtDWmxem9QHA55NAJAC0XzoNZbwgRzp2QFLkeRkFxZFZzRWeXw8S4WZVo7XVEp/GLD0otGVWs9x++8EyZ8DvcgA8zxVFGkMRy6rKNLGGH9fLhTOmYusA5JHwVKkRnzZvFB48EIJcxU0Wek+F51cdabXw5EA8Y6vXzlj8r/aylwr2UdhEz+u6pyRfTXirDvfsy9mgKFPnshS+8r+/wFH5xN75uxWBQAAAABJRU5ErkJggg==" alt="" />

. VendorID
. DeviceID: VendorID、DeviceID唯一地标识了厂商和设备类型,这两个ID合起来通常称之为设备的签名
. CmdReg
. Status Reg
. RevID: 用于区分不同的设备修订级别,这有助于用于选择设备驱动程序的版本,新版本的设备可能消除了已知的硬件故障或添加了新特性
. Class Code: 用于将设备分配到各种不同的功能组,该字段分为两部分,前8bit表示基类(base class),而剩余16bit用于表示基类的一个子类,基类及其子类的有如下几种类型
/*
1. PCI_BASE_CLASS_STORAGE(大容量存储器)
1) PCI_CLASS_STORAGE_SCSI(SCSI控制器)
2) PCI_CLASS_STORAGE_IDE(IDE控制器)
3) PCI_CLASS_STORAGE_RAID(RAID控制器): 用于组合做个磁盘驱动器
4) PCI_CLASS_STORAGE_SATA(SATA控制器)
2. PCI_BASE_CLASS_NETWORK(网络)
1) PCI_CLASS_NETWORK_ETHERNET(以太网)
2) PCI_CLASS_NETWORK_FDDI(FDDI)
3. PCI_BASE_CLASS_SYSTEM(系统组件)
1) PCI_CLASS_SYSTEM_DMA(DMA控制器)
2) PCI_CLASS_SYSTEM_RTC(实时时钟) */
..
. Subsystem VendorID:
. Subsystem DeviceID: Subsystem VendorID、Subsystem DeviceID用于更精确地描述设备的通用接口

6个基地址字段每个包含32bit,用于定义PCI设备和系统其余部分通信所用的地址,
尽管该结构长度必须是256字节,但只有前64字节是标准化的,其余空间可以*使用,通常用于在设备和驱动程序之间交换附加信息

2. 内核中的实现

内核为PCI驱动程序提供了一个广泛的框架,可以粗略地划分为两个类别

. PCI系统的初始化和资源的分配,以及预备对应的数据结构以反映各个总线和设备的容量和能力,使得能够较为容易地操作总线/设备
. 支持访问所有PCI选项的标准化函数接口

在各个不同类型的系统上,PCI系统初始化有时差异非常大,例如IA-32系统会在启动时借助于BIOS自行分配所有相关的PCI资源,内核需要做的事情很少,而Alpha系统没有BIOS或适当的等价物,相关工作必须由内核完成

1. 数据结构

内核提供了几个数据结构来管理系统的PCI结构,这些结构声明在pci.h中,通过一个由指针构成的网络互相连接
\linux-2.6.32.63\include\linux\pci.h

//系统中的各个总线由pci_bus的实例表示
struct pci_bus
{
/* node in list of buses 总线链表中的结点 */
struct list_head node; /* parent bus this bridge is on 此桥接器(总线)所在的父总线 */
struct pci_bus *parent; /* list of child buses 子总线链表 */
struct list_head children; /* list of devices on this bus 总线上设备的链表 */
struct list_head devices; /*
bridge device as seen by parent
pci_dev结构表示各个设备、扩展卡和功能部件,self表示父总线所看到的桥接器设备
*/
struct pci_dev *self;
/* list of slots on this bus */
struct list_head slots; //导向到该总线的地址空间
struct resource *resource[PCI_BUS_NUM_RESOURCES]; /* address space routed to this bus */ /* configuration access functions 访问配置信息的各函数 */
struct pci_ops *ops; /* hook for sys-specific extension 挂钩,用于特定硬件的扩展 */
void *sysdata;
/* directory entry in /proc/bus/pci */
struct proc_dir_entry *procdir; /* bus number 总线号 */
unsigned char number;
/* number of primary bridge 主桥接器编号 */
unsigned char primary;
/* number of secondary bridge 次桥接器编号 */
unsigned char secondary;
/* max number of subordinate buses 下级总线的最大数目 */
unsigned char subordinate; char name[]; unsigned short bridge_ctl; /* manage NO_ISA/FBB/et al behaviors */
pci_bus_flags_t bus_flags; /* Inherited by child busses */
struct device *bridge;
struct device dev;
struct bin_attribute *legacy_io; /* legacy I/O for this bus */
struct bin_attribute *legacy_mem; /* legacy mem */
unsigned int is_added:;
};

2. 总线的表示
3. 设备管理

struct pci_dev是一个关键的数据结构,用于表示系统中的各个PCI设备

/*
* The pci_dev structure is used to describe PCI devices.
*/
struct pci_dev
{
/* node in per-bus list 在各总线设备链表中的结点 */
struct list_head bus_list; /* bus this device is on 设备所在总线 */
struct pci_bus *bus; /* bus this device bridges to 该桥接器设备接通的总线 */
struct pci_bus *subordinate; /* hook for sys-specific extension 挂钩,用于特定于硬件的扩展 */
void *sysdata; /* device entry in /proc/bus/pci */
struct proc_dir_entry *procent;
struct pci_slot *slot; /* Physical slot this device is in */ unsigned int devfn; /* encoded device & function index */
unsigned short vendor;
unsigned short device;
unsigned short subsystem_vendor;
unsigned short subsystem_device;
unsigned int class; /* 3 bytes: (base,sub,prog-if) */
u8 revision; /* PCI revision, low byte of class word */
u8 hdr_type; /* PCI header type (`multi' flag masked out) */
u8 pcie_type; /* PCI-E device/port type */
u8 rom_base_reg; /* which config register controls the ROM */
u8 pin; /* which interrupt pin this device uses */ struct pci_driver *driver; /* which driver has allocated this device */
u64 dma_mask; /* Mask of the bits of bus address this
device implements. Normally this is
0xffffffff. You only need to change
this if your device has broken DMA
or supports 64-bit transfers. */ struct device_dma_parameters dma_parms; pci_power_t current_state; /* Current operating state. In ACPI-speak,
this is D0-D3, D0 being fully functional,
and D3 being off. */
int pm_cap; /* PM capability offset in the
configuration space */
unsigned int pme_support:; /* Bitmask of states from which PME#
can be generated */
unsigned int d1_support:; /* Low power state D1 is supported */
unsigned int d2_support:; /* Low power state D2 is supported */
unsigned int no_d1d2:; /* Only allow D0 and D3 */
unsigned int wakeup_prepared:; #ifdef CONFIG_PCIEASPM
struct pcie_link_state *link_state; /* ASPM link state. */
#endif pci_channel_state_t error_state; /* current connectivity state */
struct device dev; /* Generic device interface */ int cfg_size; /* Size of configuration space */ /*
* Instead of touching interrupt line and base address registers
* directly, use the values stored here. They might be different!
*/
unsigned int irq;
struct resource resource[DEVICE_COUNT_RESOURCE]; /* I/O and memory regions + expansion ROMs */ /* These fields are used by common fixups */
unsigned int transparent:; /* Transparent PCI bridge */
unsigned int multifunction:;/* Part of multi-function device */
/* keep track of device state */
unsigned int is_added:;
unsigned int is_busmaster:; /* device is busmaster */
unsigned int no_msi:; /* device may not use msi */
unsigned int block_ucfg_access:; /* userspace config space access is blocked */
unsigned int broken_parity_status:; /* Device generates false positive parity */
unsigned int irq_reroute_variant:; /* device needs IRQ rerouting variant */
unsigned int msi_enabled:;
unsigned int msix_enabled:;
unsigned int ari_enabled:; /* ARI forwarding */
unsigned int is_managed:;
unsigned int is_pcie:;
unsigned int needs_freset:; /* Dev requires fundamental reset */
unsigned int state_saved:;
unsigned int is_physfn:;
unsigned int is_virtfn:;
unsigned int reset_fn:;
unsigned int is_hotplug_bridge:;
pci_dev_flags_t dev_flags;
atomic_t enable_cnt; /* pci_enable_device has been called */ u32 saved_config_space[]; /* config space saved at suspend time */
struct hlist_head saved_cap_space;
struct bin_attribute *rom_attr; /* attribute descriptor for sysfs ROM entry */
int rom_attr_enabled; /* has display of the rom attribute been enabled? */
struct bin_attribute *res_attr[DEVICE_COUNT_RESOURCE]; /* sysfs file for resources */
struct bin_attribute *res_attr_wc[DEVICE_COUNT_RESOURCE]; /* sysfs file for WC mapping of resources */
#ifdef CONFIG_PCI_MSI
struct list_head msi_list;
#endif
struct pci_vpd *vpd;
#ifdef CONFIG_PCI_IOV
union {
struct pci_sriov *sriov; /* SR-IOV capability related */
struct pci_dev *physfn; /* the PF this VF is associated with */
};
struct pci_ats *ats; /* Address Translation Service */
#endif
};

4. 驱动程序函数

PCI层中最后一个基本的数据结构是pci_driver,它用于实现PCI驱动程序,表示了通用内核代码和设备的底层硬件驱动程序之间的接口,每个PCI驱动程序都必须将其函数填到该接口中,使得内核能够一致地控制可用的驱动程序,这相当于接口规范

struct pci_driver
{
struct list_head node;
//name代表设备的文本标识符(通常是实现驱动程序的模块名称)
char *name;
const struct pci_device_id *id_table; /* must be non-NULL for probe to be called */
int (*probe) (struct pci_dev *dev, const struct pci_device_id *id); /* New device inserted */
void (*remove) (struct pci_dev *dev); /* Device removed (NULL if not a hot-plug capable driver) */
int (*suspend) (struct pci_dev *dev, pm_message_t state); /* Device suspended */
int (*suspend_late) (struct pci_dev *dev, pm_message_t state);
int (*resume_early) (struct pci_dev *dev);
int (*resume) (struct pci_dev *dev); /* Device woken up */
void (*shutdown) (struct pci_dev *dev);
struct pci_error_handlers *err_handler; //driver用于建立与通用设备模型的关联
struct device_driver driver;
struct pci_dynids dynids;
};

PCI驱动程序结构最重要的方面是对检测、安装、移除设备的支持
5. 注册驱动程序

PCI驱动程序可以通过pci_register_driver注册,该函数的主要任务是对相关函数已经分配的一个pci_device实例,填充一些剩余的字段
0x3: USB

USB(universal serial bus 通用串行总线)是一种外部总线,用于不断发展的PC需求,在设计该总线时,尤其要注意易用性,例如热插拔、驱动程序的透明安装是USB设计的核心,USB是将内核的热插拔能力提供给大量用户的第一种总线

aaarticlea/png;base64,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" alt="" />

1. 特性和运行模式

2. 驱动程序的管理

Copyright (c) 2015 LittleHann All rights reserved

上一篇:C# 写 LeetCode easy #13 Roman to Integer


下一篇:电脑没有关机可能出现发博文dns异常(write)