From 8fda12db7e4fbf3c43a3a5d9b3c8cfcfd4343f24 Mon Sep 17 00:00:00 2001 From: Francis Labelle Date: Wed, 14 Aug 2019 13:49:52 -0400 Subject: [PATCH 01/20] Update script for creating replays from PCAPs --- bin/pyrdp-replay.py | 132 ++++++++++++++++++++++++++++++++++++++++++++ setup.py | 3 +- 2 files changed, 134 insertions(+), 1 deletion(-) create mode 100755 bin/pyrdp-replay.py diff --git a/bin/pyrdp-replay.py b/bin/pyrdp-replay.py new file mode 100755 index 000000000..e04671dbe --- /dev/null +++ b/bin/pyrdp-replay.py @@ -0,0 +1,132 @@ +#!/usr/bin/python3 +import argparse +from pathlib import Path + +from progressbar import progressbar +from scapy.all import * + +from pyrdp.logging import SessionLogger, LOGGER_NAMES +from pyrdp.mitm import RDPMITM, MITMConfig +from pyrdp.mitm.MITMRecorder import MITMRecorder +from pyrdp.recording import FileLayer + + +def bytesToIP(data: bytes): + return ".".join(str(b) for b in data) + + +def parseExportedPdu(packet: packet.Raw): + source = packet.load[12: 16] + source = bytesToIP(source) + + destination = packet.load[20: 24] + destination = bytesToIP(destination) + + data = packet.load[60:] + return source, destination, data + + +class CustomMITMRecorder(MITMRecorder): + currentTimeStamp: int = None + + def getCurrentTimeStamp(self) -> int: + return self.currentTimeStamp + + def setTimeStamp(self, timeStamp: int): + self.currentTimeStamp = timeStamp + + +class RDPReplayerConfig(MITMConfig): + @property + def replayDir(self) -> Path: + return self.outDir + + @property + def fileDir(self) -> Path: + return self.outDir + + +class RDPReplayer(RDPMITM): + def __init__(self, output_path: str): + def sendBytesStub(_: bytes): + pass + + output_path = Path(output_path) + output_directory = output_path.absolute().parent + + logger = logging.getLogger(LOGGER_NAMES.MITM_CONNECTIONS) + log = SessionLogger(logger, "replay") + + config = RDPReplayerConfig() + config.outDir = output_directory + # We'll set up the recorder ourselves + config.recordReplays = False + + super().__init__(log, config) + + self.client.tcp.sendBytes = sendBytesStub + self.server.tcp.sendBytes = sendBytesStub + self.state.useTLS = True + + replay_transport = FileLayer(output_path) + self.recorder = CustomMITMRecorder([replay_transport], self.state) + + def start(self): + pass + + def recv(self, data: bytes, from_client: bool): + if from_client: + self.client.tcp.dataReceived(data) + else: + self.server.tcp.dataReceived(data) + + def setTimeStamp(self, timeStamp: float): + self.recorder.setTimeStamp(int(timeStamp)) + + def connectToServer(self): + pass + + def startTLS(self): + pass + + def sendPayload(self): + pass + + +def main(): + arg_parser = argparse.ArgumentParser() + arg_parser.add_argument("input", help="Path to PCAP file with exported PDUs") + arg_parser.add_argument("client", help="Client IP") + arg_parser.add_argument("server", help="Server IP") + arg_parser.add_argument("output", help="Output file path") + arguments = arg_parser.parse_args(sys.argv[1 :]) + + logging.basicConfig(level=logging.CRITICAL) + logging.getLogger("scapy").setLevel(logging.ERROR) + client_ip = arguments.client + server_ip = arguments.server + + input_path = arguments.input + output_path = arguments.output + packets = rdpcap(input_path) + + replayer = RDPReplayer(output_path) + + for packet in progressbar(packets): + # The packets start with a Wireshark exported PDU structure + source, destination, data = parseExportedPdu(packet) + + if source not in [client_ip, server_ip] or destination not in [client_ip, server_ip]: + continue + + try: + replayer.setTimeStamp(packet.time) + replayer.recv(data, source == client_ip) + except NotImplementedError: + pass + + replayer.tcp.recordConnectionClose() + + +if __name__ == "__main__": + main() diff --git a/setup.py b/setup.py index b1313a863..3a5d358f2 100755 --- a/setup.py +++ b/setup.py @@ -27,7 +27,8 @@ scripts=[ 'bin/pyrdp-clonecert.py', 'bin/pyrdp-mitm.py', - 'bin/pyrdp-player.py' + 'bin/pyrdp-player.py', + 'bin/pyrdp-replay.py' ], install_requires=[ 'appdirs>=1,<2', From ffb84d8ce8ce421cfe25b037a25dca7859746062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milio=20Gonzalez?= Date: Wed, 4 Mar 2020 12:40:24 -0500 Subject: [PATCH 02/20] - Fix a bug in the pyrdp-replay.py file where pcap timestamps would not be correctly saved in the replay file. - Add two optional arguments to the RDPMITM constructor to allow setting a custom Recorder to it instead of the default MITMRecorder --- bin/pyrdp-replay.py | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/bin/pyrdp-replay.py b/bin/pyrdp-replay.py index e04671dbe..86fde1b24 100755 --- a/bin/pyrdp-replay.py +++ b/bin/pyrdp-replay.py @@ -1,13 +1,20 @@ #!/usr/bin/python3 + +# +# This file is part of the PyRDP project. +# Copyright (C) 2018, 2020 GoSecure Inc. +# Licensed under the GPLv3 or later. +# + import argparse from pathlib import Path -from progressbar import progressbar from scapy.all import * -from pyrdp.logging import SessionLogger, LOGGER_NAMES -from pyrdp.mitm import RDPMITM, MITMConfig +from pyrdp.logging import LOGGER_NAMES, SessionLogger +from pyrdp.mitm import MITMConfig, RDPMITM from pyrdp.mitm.MITMRecorder import MITMRecorder +from pyrdp.mitm.state import RDPMITMState from pyrdp.recording import FileLayer @@ -62,15 +69,14 @@ def sendBytesStub(_: bytes): # We'll set up the recorder ourselves config.recordReplays = False - super().__init__(log, config) + replay_transport = FileLayer(output_path) + state = RDPMITMState() + super().__init__(log, log, config, state, CustomMITMRecorder([replay_transport], state)) self.client.tcp.sendBytes = sendBytesStub self.server.tcp.sendBytes = sendBytesStub self.state.useTLS = True - replay_transport = FileLayer(output_path) - self.recorder = CustomMITMRecorder([replay_transport], self.state) - def start(self): pass @@ -81,7 +87,7 @@ def recv(self, data: bytes, from_client: bool): self.server.tcp.dataReceived(data) def setTimeStamp(self, timeStamp: float): - self.recorder.setTimeStamp(int(timeStamp)) + self.recorder.setTimeStamp(int(timeStamp * 1000)) def connectToServer(self): pass @@ -112,7 +118,7 @@ def main(): replayer = RDPReplayer(output_path) - for packet in progressbar(packets): + for packet in packets.res: # The packets start with a Wireshark exported PDU structure source, destination, data = parseExportedPdu(packet) @@ -120,10 +126,10 @@ def main(): continue try: - replayer.setTimeStamp(packet.time) + replayer.setTimeStamp(float(packet.time)) replayer.recv(data, source == client_ip) - except NotImplementedError: - pass + except NotImplementedError as e: + raise e replayer.tcp.recordConnectionClose() From 1021afcf6a711a784243c4464ae9705bc02003ba Mon Sep 17 00:00:00 2001 From: Olivier Bilodeau Date: Tue, 10 Mar 2020 13:28:41 -0400 Subject: [PATCH 03/20] Removed an optional dependency reintroduced by mistake in merge conflict --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 3a5d358f2..d983a8527 100755 --- a/setup.py +++ b/setup.py @@ -36,7 +36,7 @@ 'names>=0,<1', 'pyasn1>=0,<1', 'pycryptodome>=3.5,<4', - 'pyopenssl>=18', + 'pyopenssl>=19,<20', 'pytz', 'rsa>=4,<5', 'scapy>=2.4,<3', From 4b6d55a2bff2f896306c51d8c4ceafcd76ffed0c Mon Sep 17 00:00:00 2001 From: Olivier Bilodeau Date: Tue, 10 Mar 2020 16:21:45 -0400 Subject: [PATCH 04/20] Re-added the progressbar --- bin/pyrdp-replay.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bin/pyrdp-replay.py b/bin/pyrdp-replay.py index 86fde1b24..1181e872b 100755 --- a/bin/pyrdp-replay.py +++ b/bin/pyrdp-replay.py @@ -9,6 +9,7 @@ import argparse from pathlib import Path +from progressbar import progressbar from scapy.all import * from pyrdp.logging import LOGGER_NAMES, SessionLogger @@ -118,7 +119,7 @@ def main(): replayer = RDPReplayer(output_path) - for packet in packets.res: + for packet in progressbar(packets): # The packets start with a Wireshark exported PDU structure source, destination, data = parseExportedPdu(packet) From fb406eb79f24416218c4ebd0c717509d8748bef9 Mon Sep 17 00:00:00 2001 From: Olivier Bilodeau Date: Tue, 10 Mar 2020 16:22:21 -0400 Subject: [PATCH 05/20] Error handling if recording is empty (bad source or destination) --- bin/pyrdp-replay.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/bin/pyrdp-replay.py b/bin/pyrdp-replay.py index 1181e872b..f872693b5 100755 --- a/bin/pyrdp-replay.py +++ b/bin/pyrdp-replay.py @@ -8,6 +8,7 @@ import argparse from pathlib import Path +import struct from progressbar import progressbar from scapy.all import * @@ -132,7 +133,11 @@ def main(): except NotImplementedError as e: raise e - replayer.tcp.recordConnectionClose() + try: + replayer.tcp.recordConnectionClose() + except struct.error as e: + print("Couldn't close the connection cleanly. " + "Are you sure you got source and destination correct?") if __name__ == "__main__": From 1791cc0b8797f3f80002921eaa0f47b447cd28a2 Mon Sep 17 00:00:00 2001 From: Olivier Bilodeau Date: Tue, 10 Mar 2020 16:23:11 -0400 Subject: [PATCH 06/20] Improved the clarity of CLI arguments --- bin/pyrdp-replay.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/bin/pyrdp-replay.py b/bin/pyrdp-replay.py index f872693b5..827d0f6b5 100755 --- a/bin/pyrdp-replay.py +++ b/bin/pyrdp-replay.py @@ -103,10 +103,13 @@ def sendPayload(self): def main(): arg_parser = argparse.ArgumentParser() - arg_parser.add_argument("input", help="Path to PCAP file with exported PDUs") - arg_parser.add_argument("client", help="Client IP") - arg_parser.add_argument("server", help="Server IP") - arg_parser.add_argument("output", help="Output file path") + arg_parser.add_argument("input", help="Path to PCAP file with exported PDUs. " + "Using Wireshark: File -> Export PDUs to File " + "then pick OSI Layer 7 and click Ok and " + "save the result as a pcap file.") + arg_parser.add_argument("client", help="Client IP address") + arg_parser.add_argument("server", help="Server IP address (usually it's the MITM IP address)") + arg_parser.add_argument("output", help="Output file that will be playable in pyrdp-player.py") arguments = arg_parser.parse_args(sys.argv[1 :]) logging.basicConfig(level=logging.CRITICAL) From 306eb4f48f4c1ede6d14cf326239e8d6365459d6 Mon Sep 17 00:00:00 2001 From: Alexandre Beaulieu Date: Tue, 31 Mar 2020 10:33:55 -0400 Subject: [PATCH 07/20] feat:Add support for native TLS in pyrdp-convert. --- bin/pyrdp-convert.py | 325 +++++++++++++++++++++++++++++++++++++++++++ setup.py | 1 + 2 files changed, 326 insertions(+) create mode 100644 bin/pyrdp-convert.py diff --git a/bin/pyrdp-convert.py b/bin/pyrdp-convert.py new file mode 100644 index 000000000..39dc3321a --- /dev/null +++ b/bin/pyrdp-convert.py @@ -0,0 +1,325 @@ +#!/usr/bin/python3 + +# +# This file is part of the PyRDP project. +# Copyright (C) 2020 GoSecure Inc. +# Licensed under the GPLv3 or later. +# + +from pyrdp.logging import LOGGER_NAMES, SessionLogger +from pyrdp.mitm import MITMConfig, RDPMITM +from pyrdp.mitm.MITMRecorder import MITMRecorder +from pyrdp.mitm.state import RDPMITMState +from pyrdp.recording import FileLayer + +import argparse +from binascii import unhexlify, hexlify +import logging +from pathlib import Path +import struct +import time + +from progressbar import progressbar + +# No choice but to import * here for load_layer to work properly. +from scapy.all import * # noqa +load_layer('tls') # noqa + + +class CustomMITMRecorder(MITMRecorder): + currentTimeStamp: int = None + + def getCurrentTimeStamp(self) -> int: + return self.currentTimeStamp + + def setTimeStamp(self, timeStamp: int): + self.currentTimeStamp = timeStamp + + +class RDPReplayerConfig(MITMConfig): + @property + def replayDir(self) -> Path: + return self.outDir + + @property + def fileDir(self) -> Path: + return self.outDir + + +class RDPReplayer(RDPMITM): + def __init__(self, output_path: str): + def sendBytesStub(_: bytes): + pass + + output_path = Path(output_path) + output_directory = output_path.absolute().parent + + logger = logging.getLogger(LOGGER_NAMES.MITM_CONNECTIONS) + log = SessionLogger(logger, "replay") + + config = RDPReplayerConfig() + config.outDir = output_directory + # We'll set up the recorder ourselves + config.recordReplays = False + + replay_transport = FileLayer(output_path) + state = RDPMITMState(config) + super().__init__(log, log, config, state, CustomMITMRecorder([replay_transport], state)) + + self.client.tcp.sendBytes = sendBytesStub + self.server.tcp.sendBytes = sendBytesStub + self.state.useTLS = True + + def start(self): + pass + + def recv(self, data: bytes, from_client: bool): + if from_client: + self.client.tcp.dataReceived(data) + else: + self.server.tcp.dataReceived(data) + + def setTimeStamp(self, timeStamp: float): + self.recorder.setTimeStamp(int(timeStamp * 1000)) + + def connectToServer(self): + pass + + def startTLS(self): + pass + + def sendPayload(self): + pass + +# The name format of output files. +OUTFILE_FORMAT = '{prefix}{timestamp}_{src}-{dst}.{ext}' + + +def findClientRandom(stream: PacketList, limit: int = 10) -> str: + """Find the client random offset and value of a stream.""" + for n, p in enumerate(stream): + if n >= limit: + return '' # Didn't find client hello. + try: + tls = TLS(p.load) + hello = tls.msg[0] + if not isinstance(hello, TLSClientHello): + continue + return hexlify(pkcs_i2osp(hello.gmt_unix_time, 4) + hello.random_bytes).decode() + except Exception: + pass # Not a TLS packet. + return '' + + +def tcp_both(p) -> str: + """Session extractor which merges both sides of a TCP channel.""" + + if 'TCP' in p: + return str(sorted(['TCP', p[IP].src, p[TCP].sport, p[IP].dst, p[TCP].dport], key=str)) + return 'Other' + + +def loadSecrets(filename: str) -> dict: + secrets = {} + with open(filename, 'r') as f: + for line in f: + line = line.strip() + if line == '' or not line.startswith('CLIENT'): + continue + + parts = line.split(' ') + if len(parts) != 3: + continue + + [t, c, m] = parts + + # Parse the secret accordingly. + if t == 'CLIENT_RANDOM': + secrets[c] = { 'client': unhexlify(c), 'master': unhexlify(m) } + return secrets + + +class Decrypted: + """Class for keeping decryption state of a TLS stream.""" + def __init__(self, stream: PacketList, secret: bytes): + # Iterator State. + self.stream = stream + self.ipkt = iter(stream) + + # TLS State. + self.secret = secret + self.client = None + self.server = None + self.tls = None + + # Data Flow State. + self.src = None + self.dst = None + + def __iter__(self): + return self + + def __next__(self): + p = next(self.ipkt) + while p is not None: + ip = p.getlayer(IP) + tcp = p.getlayer(TCP) + + if len(tcp.payload) == 0: + return p # Not application data. + + if not self.src: + # First packet in the stream, establish sending and receiving ends. + self.src = self.last = ip.src + self.dst = ip.dst + # Create the TLS session context. + self.tls = tlsSession(ipsrc=ip.src, ipdst=ip.dst, sport=tcp.sport, dport=tcp.dport, connection_end='server') + + # Mirror the session if the packet is flowing in the opposite direction. + if self.tls.ipsrc != ip.src: + self.tls = self.tls.mirror() + + try: + # Convert the payload to TLS if necessary. + frame = TLS(p.load, tls_session=self.tls) + tcp.remove_payload() + tcp.add_payload(frame) + self.tlsSession = frame.tls_session # Update TLS Context. + except AttributeError: + if not self.client: + # ClientHelo is not sent yet: This is not TLS data. + return p # Not a TLS packet. + else: + # ClientHello was sent, this is likely a reassembled packet. + # We dissect TLS by hand so we need to skip the reassembled parts. + p = next(self.ipkt) + continue + + # FIXME: Rather, check if the message is included in it to be sure. + msg = frame.msg[0] + if isinstance(msg, TLSClientHello): + self.client = pkcs_i2osp(msg.gmt_unix_time, 4) + msg.random_bytes + elif isinstance(msg, TLSServerHello): + self.server = pkcs_i2osp(msg.gmt_unix_time, 4) + msg.random_bytes + + # Now is a good time to derive the encryption keys. + elif isinstance(msg, TLSNewSessionTicket): + self.tls.rcs.derive_keys(client_random=self.client, + server_random=self.server, + master_secret=self.secret) + + self.tls.wcs.derive_keys(client_random=self.client, + server_random=self.server, + master_secret=self.secret) + return p + + # If we reach this, the last packet in the trace is a reassembled PDU. + return None + + +def decrypted(stream: PacketList, master_secret: bytes) -> Decrypted: + """An iterator function that decrypts a stream.""" + return Decrypted(stream, master_secret) + + +def processStream(stream: Decrypted, outfile: str): + """Process a TCP stream into a replay file.""" + # print(f'Processing {stream.src} <> {stream.dst}') + replayer = RDPReplayer(outfile) + srv = None # The RDP server's IP. + + for packet in progressbar((stream)): + ip = packet.getlayer(IP) + tcp = packet.getlayer(TCP) + data = b'' + + if not srv: + srv = ip.dst + continue + + if TLS in tcp and TLSApplicationData not in tcp: + # This is not TLS application data, skip it, as PyRDP's + # network stack cannot parse TLS handshakes. + continue + + # Reassemble TLSApplicationData chunks into a single payload. + for i, l in enumerate(tcp.layers()): + layer = tcp.getlayer(i) + if isinstance(layer, TLS): + data += b''.join(map(lambda x: x.data, filter(lambda m: isinstance(m, TLSApplicationData), layer.msg))) + + if len(data) == 0: + continue # Packet contains no application data. + replayer.setTimeStamp(float(packet.time)) + replayer.recv(data, ip.src == srv) + + try: + replayer.tcp.recordConnectionClose() + except struct.error: + print("Couldn't close the connection cleanly. " + "Are you sure you got source and destination correct?") + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('input', help='Path to a .pcap, .pcapng, or .pyrdp file') + parser.add_argument('-l', '--list', help='Print the list of sessions in the capture without processing anything', action='store_true') + parser.add_argument('-s', '--secrets', help='Path to the file containing the SSL secrets to decrypt Transport Layer Security.') + parser.add_argument('-f', '--format', help='Format of the output', choices=['replay', 'mp4'], default='replay') + parser.add_argument('--src', help='If specified, limits the converted streams to connections initiated from this address', action='append', default=[]) + parser.add_argument('--dst', help='If specified, limits the converted streams to connections destined to this address', action='append', default=[]) + parser.add_argument('-o', '--output', help='Path to write the converted files to. If a file name is specified, it will be used as a prefix.') + args = parser.parse_args() + + logging.basicConfig(level=logging.CRITICAL) + logging.getLogger("scapy").setLevel(logging.ERROR) + + # -- PCAPS ------------------------------------------------ + secrets = loadSecrets(args.secrets) if args.secrets else {} + + print('[*] Analyzing network trace...') + pcap = sniff(offline=args.input) + sessions = pcap.sessions(tcp_both) + streams = [] + for sid, stream in sessions.items(): + ip = stream[0].getlayer(IP) + name = f'{ip.src} -> {ip.dst}' + + print(f" -> {name}:", end ='', flush=True) + rnd = findClientRandom(stream) + if rnd not in secrets and rnd != '': + print(' unknown master secret') + continue # Encrypted, but we don't have the secret. + + if rnd == '': + print(' plaintext?') + # print('[*] (TODO) Trying to extract as plaintext') + continue + + master_secret = secrets[rnd]['master'] + print(' master secret available (!)') + streams.append(((ip.src, ip.dst, stream[0].time), decrypted(stream, master_secret))) + + if args.list: + return + + for (src, dst, ts), s in streams: + if len(args.src) > 0 and src not in args.src: + continue + if len(args.dst) >0 and dst not in args.dst: + continue + + try: + print(f'[*] Processing {src} -> {dst}') + ts = time.strftime('%Y%M%d%H%m%S', time.gmtime(ts)) + outfile = OUTFILE_FORMAT.format(**{'prefix': 'converted-', 'timestamp': ts, 'src': src, 'dst': dst, 'ext': 'pyrdp'}) + processStream(s, outfile) + print(f"\n[+] Successfully wrote '{outfile}'") + except Exception as e: + print('\n[-] Failed to extract stream. Verify that all packets are in the trace and that the master secret is the right one.') + raise e + # -- /PCAPS ----------------------------------------------- + + +if __name__ == "__main__": + main() diff --git a/setup.py b/setup.py index d983a8527..3bd579c63 100755 --- a/setup.py +++ b/setup.py @@ -28,6 +28,7 @@ 'bin/pyrdp-clonecert.py', 'bin/pyrdp-mitm.py', 'bin/pyrdp-player.py', + 'bin/pyrdp-convert.py', 'bin/pyrdp-replay.py' ], install_requires=[ From ff657d0c6babba46b9d1018d872f6e2aa6e293d7 Mon Sep 17 00:00:00 2001 From: Alexandre Beaulieu Date: Wed, 1 Apr 2020 14:16:48 -0400 Subject: [PATCH 08/20] feat: Progress on pyrdp-convert --- bin/pyrdp-convert.py | 197 ++++++++++++++++++++++++++----------------- 1 file changed, 119 insertions(+), 78 deletions(-) diff --git a/bin/pyrdp-convert.py b/bin/pyrdp-convert.py index 39dc3321a..b1e196ac1 100644 --- a/bin/pyrdp-convert.py +++ b/bin/pyrdp-convert.py @@ -25,6 +25,8 @@ from scapy.all import * # noqa load_layer('tls') # noqa +TLS_HDR_LEN = 24 # Hopefully this doesn't change between TLS versions. + class CustomMITMRecorder(MITMRecorder): currentTimeStamp: int = None @@ -161,60 +163,76 @@ def __iter__(self): def __next__(self): p = next(self.ipkt) - while p is not None: - ip = p.getlayer(IP) - tcp = p.getlayer(TCP) - - if len(tcp.payload) == 0: - return p # Not application data. - - if not self.src: - # First packet in the stream, establish sending and receiving ends. - self.src = self.last = ip.src - self.dst = ip.dst - # Create the TLS session context. - self.tls = tlsSession(ipsrc=ip.src, ipdst=ip.dst, sport=tcp.sport, dport=tcp.dport, connection_end='server') - - # Mirror the session if the packet is flowing in the opposite direction. - if self.tls.ipsrc != ip.src: - self.tls = self.tls.mirror() - - try: - # Convert the payload to TLS if necessary. - frame = TLS(p.load, tls_session=self.tls) - tcp.remove_payload() - tcp.add_payload(frame) - self.tlsSession = frame.tls_session # Update TLS Context. - except AttributeError: - if not self.client: - # ClientHelo is not sent yet: This is not TLS data. - return p # Not a TLS packet. - else: - # ClientHello was sent, this is likely a reassembled packet. - # We dissect TLS by hand so we need to skip the reassembled parts. - p = next(self.ipkt) - continue - - # FIXME: Rather, check if the message is included in it to be sure. - msg = frame.msg[0] - if isinstance(msg, TLSClientHello): - self.client = pkcs_i2osp(msg.gmt_unix_time, 4) + msg.random_bytes - elif isinstance(msg, TLSServerHello): - self.server = pkcs_i2osp(msg.gmt_unix_time, 4) + msg.random_bytes - - # Now is a good time to derive the encryption keys. - elif isinstance(msg, TLSNewSessionTicket): - self.tls.rcs.derive_keys(client_random=self.client, - server_random=self.server, - master_secret=self.secret) - - self.tls.wcs.derive_keys(client_random=self.client, - server_random=self.server, - master_secret=self.secret) - return p - - # If we reach this, the last packet in the trace is a reassembled PDU. - return None + ip = p.getlayer(IP) + tcp = p.getlayer(TCP) + + if len(tcp.payload) == 0: + return p # Not application data. + + if not self.src: + # First packet in the stream, establish sending and receiving ends. + self.src = self.last = ip.src + self.dst = ip.dst + # Create the TLS session context. + self.tls = tlsSession(ipsrc=ip.src, ipdst=ip.dst, sport=tcp.sport, dport=tcp.dport, connection_end='server') + + # Mirror the session if the packet is flowing in the opposite direction. + if self.tls.ipsrc != ip.src: + self.tls = self.tls.mirror() + + try: + # Convert the payload to TLS if necessary. + frame = TLS(p.load, tls_session=self.tls) + except AttributeError as e: + if not self.client: + # ClientHelo is not sent yet: This is not TLS data. + return p + else: + # Should be TLS data. + raise e + + # Perform PDU reassembly. + if TLSApplicationData in frame: + payload = p.load + # There could be multiple nested TLS records within the + # same TCP packet. In that case we need to consume packets + # until The last layer is complete, otherwise it becomes + # extremely difficult to decrypt the rest of the stream. + tls = frame.lastlayer() + while tls.len - tls.deciphered_len - TLS_HDR_LEN > 0: + fragment = next(self.ipkt) + + if Raw not in fragment: + continue # Skip TCP control. + + payload += fragment.load + frame = TLS(payload, tls_session=self.tls) + tls = frame.lastlayer() + + # Send a super big "frame" to the consumer, they will be responsible for + # processing individual records. + # FIXME: Maybe rebuild each TLSApplicationData to be a message in a single record? + tcp.remove_payload() + tcp.add_payload(frame) + self.tlsSession = frame.tls_session # Update TLS Context. + + # FIXME: Rather, check if the message is included in it to be sure? + msg = frame.msg[0] + if isinstance(msg, TLSClientHello): + self.client = pkcs_i2osp(msg.gmt_unix_time, 4) + msg.random_bytes + elif isinstance(msg, TLSServerHello): + self.server = pkcs_i2osp(msg.gmt_unix_time, 4) + msg.random_bytes + + elif isinstance(msg, TLSNewSessionTicket): + # Session established, set master secret. + self.tls.rcs.derive_keys(client_random=self.client, + server_random=self.server, + master_secret=self.secret) + + self.tls.wcs.derive_keys(client_random=self.client, + server_random=self.server, + master_secret=self.secret) + return p def decrypted(stream: PacketList, master_secret: bytes) -> Decrypted: @@ -222,37 +240,58 @@ def decrypted(stream: PacketList, master_secret: bytes) -> Decrypted: return Decrypted(stream, master_secret) -def processStream(stream: Decrypted, outfile: str): - """Process a TCP stream into a replay file.""" +def processPlaintext(stream: PacketList, outfile: str): + """Process a plaintext EXPORTED PDU RDP export to a replay.""" + replayer = RDPReplayer(outfile) + srv = None + for packet in progressbar(stream): + src = ".".join(str(b) for b in packet.load[12:16]) + dst = ".".join(str(b) for b in packet.load[20:24]) + data = packet.load[60:] + + if not srv: + srv = dst + + replayer.setTimeStamp(float(packet.time)) + replayer.recv(data, src == srv) + pass + + +def processTLS(stream: Decrypted, outfile: str): + """Process an encrypted TCP stream into a replay file.""" # print(f'Processing {stream.src} <> {stream.dst}') replayer = RDPReplayer(outfile) srv = None # The RDP server's IP. - for packet in progressbar((stream)): + for n, packet in enumerate(stream): ip = packet.getlayer(IP) - tcp = packet.getlayer(TCP) - data = b'' if not srv: srv = ip.dst continue - if TLS in tcp and TLSApplicationData not in tcp: + if TLS in packet and TLSApplicationData not in packet: # This is not TLS application data, skip it, as PyRDP's # network stack cannot parse TLS handshakes. continue # Reassemble TLSApplicationData chunks into a single payload. - for i, l in enumerate(tcp.layers()): - layer = tcp.getlayer(i) - if isinstance(layer, TLS): - data += b''.join(map(lambda x: x.data, filter(lambda m: isinstance(m, TLSApplicationData), layer.msg))) + ts = float(packet.time) + data = b'' + for i, l in enumerate(packet.layers()): + layer = packet.getlayer(i) + if not isinstance(layer, TLS): + continue + for m in filter(lambda m: isinstance(m, TLSApplicationData) and len(m.data) > 0, layer.msg): + data += m.data if len(data) == 0: - continue # Packet contains no application data. - replayer.setTimeStamp(float(packet.time)) - replayer.recv(data, ip.src == srv) + continue + d = 'CLIENT' if ip.src != srv else 'SERVER' + print(f'{d} | PACKET> #{n:05d} Len={len(data):010d} - {hexlify(data[:40]).decode()}') + replayer.setTimeStamp(ts) + replayer.recv(data, ip.src != srv) try: replayer.tcp.recordConnectionClose() except struct.error: @@ -273,6 +312,7 @@ def main(): logging.basicConfig(level=logging.CRITICAL) logging.getLogger("scapy").setLevel(logging.ERROR) + # logging.getLogger("pyrdp").setLevel(logging.DEBUG) # -- PCAPS ------------------------------------------------ secrets = loadSecrets(args.secrets) if args.secrets else {} @@ -282,23 +322,22 @@ def main(): sessions = pcap.sessions(tcp_both) streams = [] for sid, stream in sessions.items(): + # FIXME: Plaintext crashes here. ip = stream[0].getlayer(IP) name = f'{ip.src} -> {ip.dst}' - + info =(ip.src, ip.dst, stream[0].time) print(f" -> {name}:", end ='', flush=True) + rnd = findClientRandom(stream) if rnd not in secrets and rnd != '': print(' unknown master secret') continue # Encrypted, but we don't have the secret. - if rnd == '': print(' plaintext?') - # print('[*] (TODO) Trying to extract as plaintext') - continue - - master_secret = secrets[rnd]['master'] - print(' master secret available (!)') - streams.append(((ip.src, ip.dst, stream[0].time), decrypted(stream, master_secret))) + streams.append((info, stream)) + else: + print(' master secret available (!)') + streams.append((info, decrypted(stream, secrets[rnd]['master']))) if args.list: return @@ -306,14 +345,16 @@ def main(): for (src, dst, ts), s in streams: if len(args.src) > 0 and src not in args.src: continue - if len(args.dst) >0 and dst not in args.dst: + if len(args.dst) > 0 and dst not in args.dst: continue - try: print(f'[*] Processing {src} -> {dst}') ts = time.strftime('%Y%M%d%H%m%S', time.gmtime(ts)) outfile = OUTFILE_FORMAT.format(**{'prefix': 'converted-', 'timestamp': ts, 'src': src, 'dst': dst, 'ext': 'pyrdp'}) - processStream(s, outfile) + if isinstance(s, Decrypted): + processTLS(s, outfile) + else: + processPlaintext(s, outfile) print(f"\n[+] Successfully wrote '{outfile}'") except Exception as e: print('\n[-] Failed to extract stream. Verify that all packets are in the trace and that the master secret is the right one.') From b2959e86992bea463e42fdb703981ae72efbcc35 Mon Sep 17 00:00:00 2001 From: Alexandre Beaulieu Date: Wed, 1 Apr 2020 16:59:01 -0400 Subject: [PATCH 09/20] feat: Added TLS PDU reassembly. --- bin/pyrdp-convert.py | 49 +++++++++++++++----------------------------- 1 file changed, 17 insertions(+), 32 deletions(-) diff --git a/bin/pyrdp-convert.py b/bin/pyrdp-convert.py index b1e196ac1..5ceb5b926 100644 --- a/bin/pyrdp-convert.py +++ b/bin/pyrdp-convert.py @@ -181,15 +181,12 @@ def __next__(self): self.tls = self.tls.mirror() try: - # Convert the payload to TLS if necessary. frame = TLS(p.load, tls_session=self.tls) except AttributeError as e: if not self.client: - # ClientHelo is not sent yet: This is not TLS data. - return p + return p # ClientHelo is not sent yet: This is not TLS data. else: - # Should be TLS data. - raise e + raise e # Should be TLS data. # Perform PDU reassembly. if TLSApplicationData in frame: @@ -209,9 +206,7 @@ def __next__(self): frame = TLS(payload, tls_session=self.tls) tls = frame.lastlayer() - # Send a super big "frame" to the consumer, they will be responsible for - # processing individual records. - # FIXME: Maybe rebuild each TLSApplicationData to be a message in a single record? + # FIXME: Maybe rebuild each TLSApplicationData to be a message entry in a single record? tcp.remove_payload() tcp.add_payload(frame) self.tlsSession = frame.tls_session # Update TLS Context. @@ -243,17 +238,17 @@ def decrypted(stream: PacketList, master_secret: bytes) -> Decrypted: def processPlaintext(stream: PacketList, outfile: str): """Process a plaintext EXPORTED PDU RDP export to a replay.""" replayer = RDPReplayer(outfile) - srv = None + client = None for packet in progressbar(stream): src = ".".join(str(b) for b in packet.load[12:16]) dst = ".".join(str(b) for b in packet.load[20:24]) data = packet.load[60:] - if not srv: - srv = dst + if not client: + client = src replayer.setTimeStamp(float(packet.time)) - replayer.recv(data, src == srv) + replayer.recv(data, src == client) pass @@ -261,37 +256,27 @@ def processTLS(stream: Decrypted, outfile: str): """Process an encrypted TCP stream into a replay file.""" # print(f'Processing {stream.src} <> {stream.dst}') replayer = RDPReplayer(outfile) - srv = None # The RDP server's IP. + client = None # The RDP client's IP. for n, packet in enumerate(stream): ip = packet.getlayer(IP) - if not srv: - srv = ip.dst + if not client: + client = ip.src continue - if TLS in packet and TLSApplicationData not in packet: + if TLSApplicationData not in packet: # This is not TLS application data, skip it, as PyRDP's # network stack cannot parse TLS handshakes. continue - # Reassemble TLSApplicationData chunks into a single payload. ts = float(packet.time) - data = b'' - for i, l in enumerate(packet.layers()): - layer = packet.getlayer(i) - if not isinstance(layer, TLS): - continue - for m in filter(lambda m: isinstance(m, TLSApplicationData) and len(m.data) > 0, layer.msg): - data += m.data - - if len(data) == 0: - continue - - d = 'CLIENT' if ip.src != srv else 'SERVER' - print(f'{d} | PACKET> #{n:05d} Len={len(data):010d} - {hexlify(data[:40]).decode()}') - replayer.setTimeStamp(ts) - replayer.recv(data, ip.src != srv) + for payload in packet[TLS].iterpayloads(): + if TLSApplicationData not in payload: + continue # Not application data. + for m in payload.msg: + replayer.setTimeStamp(ts) + replayer.recv(m.data, ip.src == client) try: replayer.tcp.recordConnectionClose() except struct.error: From f8612f0e6e9048d4ee4e83fc69a0a582be2fc6e6 Mon Sep 17 00:00:00 2001 From: Alexandre Beaulieu Date: Thu, 2 Apr 2020 09:40:18 -0400 Subject: [PATCH 10/20] feat: Re-add plaintext support for PDU exports. --- bin/pyrdp-convert.py | 61 +++++++++++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 20 deletions(-) diff --git a/bin/pyrdp-convert.py b/bin/pyrdp-convert.py index 5ceb5b926..2657362e5 100644 --- a/bin/pyrdp-convert.py +++ b/bin/pyrdp-convert.py @@ -235,21 +235,41 @@ def decrypted(stream: PacketList, master_secret: bytes) -> Decrypted: return Decrypted(stream, master_secret) -def processPlaintext(stream: PacketList, outfile: str): +def getStreamInfo(s: PacketList) -> (str, str, float, bool): + """Attempt to retrieve an (src, dst, ts, isPlaintext) tuple for a data stream.""" + packet = s[0] + if IP in packet: + # FIXME: Technically the IP traffic could be plaintext too. + return (packet[IP].src, packet[IP].dst, packet.time, False) + elif Ether not in packet: + # No Ethernet layer, so assume exported PDUs. + src = ".".join(str(b) for b in packet.load[12:16]) + dst = ".".join(str(b) for b in packet.load[20:24]) + return (src, dst, float(packet.time) / 1000, True) + raise Exception('Invalid stream type. Must be TCP/TLS or EXPORTED PDU.') + + +def processPlaintext(stream: PacketList, outfile: str, info): """Process a plaintext EXPORTED PDU RDP export to a replay.""" replayer = RDPReplayer(outfile) - client = None + (client, server, _, _) = info for packet in progressbar(stream): src = ".".join(str(b) for b in packet.load[12:16]) dst = ".".join(str(b) for b in packet.load[20:24]) data = packet.load[60:] - if not client: - client = src + if src not in [client, server] or dst not in [client, server]: + continue + # FIXME: The absolute time is completely wrong here because replayer multiplies by 1000. replayer.setTimeStamp(float(packet.time)) replayer.recv(data, src == client) - pass + + try: + replayer.tcp.recordConnectionClose() + except struct.error: + print("Couldn't close the connection cleanly. " + "Are you sure you got source and destination correct?") def processTLS(stream: Decrypted, outfile: str): @@ -258,7 +278,7 @@ def processTLS(stream: Decrypted, outfile: str): replayer = RDPReplayer(outfile) client = None # The RDP client's IP. - for n, packet in enumerate(stream): + for packet in progressbar(stream): ip = packet.getlayer(IP) if not client: @@ -306,20 +326,19 @@ def main(): pcap = sniff(offline=args.input) sessions = pcap.sessions(tcp_both) streams = [] - for sid, stream in sessions.items(): - # FIXME: Plaintext crashes here. - ip = stream[0].getlayer(IP) - name = f'{ip.src} -> {ip.dst}' - info =(ip.src, ip.dst, stream[0].time) - print(f" -> {name}:", end ='', flush=True) + for stream in sessions.values(): + (src, dst, ts, plaintext) = info = getStreamInfo(stream) + name = f'{src} -> {dst}' + print(f" - {src} -> {dst}:", end ='', flush=True) + + if plaintext: + print(' plaintext') + streams.append((info, stream)) + continue rnd = findClientRandom(stream) if rnd not in secrets and rnd != '': print(' unknown master secret') - continue # Encrypted, but we don't have the secret. - if rnd == '': - print(' plaintext?') - streams.append((info, stream)) else: print(' master secret available (!)') streams.append((info, decrypted(stream, secrets[rnd]['master']))) @@ -327,7 +346,7 @@ def main(): if args.list: return - for (src, dst, ts), s in streams: + for (src, dst, ts, plaintext), s in streams: if len(args.src) > 0 and src not in args.src: continue if len(args.dst) > 0 and dst not in args.dst: @@ -336,10 +355,12 @@ def main(): print(f'[*] Processing {src} -> {dst}') ts = time.strftime('%Y%M%d%H%m%S', time.gmtime(ts)) outfile = OUTFILE_FORMAT.format(**{'prefix': 'converted-', 'timestamp': ts, 'src': src, 'dst': dst, 'ext': 'pyrdp'}) - if isinstance(s, Decrypted): - processTLS(s, outfile) + + if plaintext: + processPlaintext(s, outfile, info) else: - processPlaintext(s, outfile) + processTLS(s, outfile) + print(f"\n[+] Successfully wrote '{outfile}'") except Exception as e: print('\n[-] Failed to extract stream. Verify that all packets are in the trace and that the master secret is the right one.') From 3f543f56546058b8a36d2ee953943039032f1fd0 Mon Sep 17 00:00:00 2001 From: Alexandre Beaulieu Date: Thu, 2 Apr 2020 09:51:00 -0400 Subject: [PATCH 11/20] feat: pyrdp-convert - Add support for output directory and prefix --- bin/pyrdp-convert.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/bin/pyrdp-convert.py b/bin/pyrdp-convert.py index 2657362e5..e7ac9160b 100644 --- a/bin/pyrdp-convert.py +++ b/bin/pyrdp-convert.py @@ -274,7 +274,6 @@ def processPlaintext(stream: PacketList, outfile: str, info): def processTLS(stream: Decrypted, outfile: str): """Process an encrypted TCP stream into a replay file.""" - # print(f'Processing {stream.src} <> {stream.dst}') replayer = RDPReplayer(outfile) client = None # The RDP client's IP. @@ -317,7 +316,6 @@ def main(): logging.basicConfig(level=logging.CRITICAL) logging.getLogger("scapy").setLevel(logging.ERROR) - # logging.getLogger("pyrdp").setLevel(logging.DEBUG) # -- PCAPS ------------------------------------------------ secrets = loadSecrets(args.secrets) if args.secrets else {} @@ -346,6 +344,14 @@ def main(): if args.list: return + prefix = '' + if args.output: + outdir = Path(args.output) + if outdir.is_dir(): + prefix = str(outdir.absolute()) + '/' + else: + prefix = str(outdir.parent.absolute() / outdir.stem) + '-' + for (src, dst, ts, plaintext), s in streams: if len(args.src) > 0 and src not in args.src: continue @@ -354,7 +360,7 @@ def main(): try: print(f'[*] Processing {src} -> {dst}') ts = time.strftime('%Y%M%d%H%m%S', time.gmtime(ts)) - outfile = OUTFILE_FORMAT.format(**{'prefix': 'converted-', 'timestamp': ts, 'src': src, 'dst': dst, 'ext': 'pyrdp'}) + outfile = OUTFILE_FORMAT.format(**{'prefix': prefix, 'timestamp': ts, 'src': src, 'dst': dst, 'ext': 'pyrdp'}) if plaintext: processPlaintext(s, outfile, info) From b8b007a18b3a1c84a5cfbca3d80c2ae1aee830e4 Mon Sep 17 00:00:00 2001 From: Alexandre Beaulieu Date: Wed, 25 Mar 2020 11:09:56 -0400 Subject: [PATCH 12/20] refactor: Cleaned up player rendering class hierarchy --- pyrdp/parser/__init__.py | 1 + pyrdp/player/BaseEventHandler.py | 223 +++++++++++++++++++++++ pyrdp/player/HeadlessEventHandler.py | 150 ++------------- pyrdp/player/PlayerEventHandler.py | 252 +++----------------------- pyrdp/player/RenderingEventHandler.py | 67 +++++++ pyrdp/player/__init__.py | 4 +- 6 files changed, 331 insertions(+), 366 deletions(-) create mode 100644 pyrdp/player/BaseEventHandler.py create mode 100644 pyrdp/player/RenderingEventHandler.py diff --git a/pyrdp/parser/__init__.py b/pyrdp/parser/__init__.py index 71e94460f..54edaeb19 100644 --- a/pyrdp/parser/__init__.py +++ b/pyrdp/parser/__init__.py @@ -13,6 +13,7 @@ from pyrdp.parser.rdp.connection import ClientConnectionParser, ServerConnectionParser from pyrdp.parser.rdp.fastpath import BasicFastPathParser, createFastPathParser, FastPathInputParser, \ FastPathOutputParser, FIPSFastPathParser, SignedFastPathParser +from pyrdp.parser.rdp.orders import OrdersParser from pyrdp.parser.rdp.input import SlowPathInputParser from pyrdp.parser.rdp.licensing import LicensingParser from pyrdp.parser.rdp.negotiation import NegotiationRequestParser, NegotiationResponseParser diff --git a/pyrdp/player/BaseEventHandler.py b/pyrdp/player/BaseEventHandler.py new file mode 100644 index 000000000..13555e9c3 --- /dev/null +++ b/pyrdp/player/BaseEventHandler.py @@ -0,0 +1,223 @@ +# +# This file is part of the PyRDP project. +# Copyright (C) 2020 GoSecure Inc. +# Licensed under the GPLv3 or later. +# +from typing import Optional +from pyrdp.core import decodeUTF16LE, Observer +from pyrdp.enum import PlayerPDUType, CapabilityType, ParserMode, \ + FastPathFragmentation, \ + KeyboardFlag, PointerFlag, scancode, DeviceType +from pyrdp.pdu import ConfirmActivePDU, UpdatePDU, InputPDU, \ + FastPathOutputEvent, FastPathUnicodeEvent, FastPathScanCodeEvent, \ + FastPathMouseEvent, KeyboardEvent, MouseEvent, \ + PlayerPDU, PlayerDeviceMappingPDU, \ + FormatDataResponsePDU +from pyrdp.parser import ClientConnectionParser, ClientInfoParser, ClipboardParser, \ + SlowPathParser, BasicFastPathParser + + +class BaseEventHandler(Observer): + """ + Base implementation for player event processing. + """ + + def __init__(self): + super().__init__() + + # Input processing state. + self.shiftPressed = False + self.capsLockOn = False + self.buffer = b"" + + # Base level handlers. + self.handlers = { + PlayerPDUType.CLIENT_DATA: self.onClientData, + PlayerPDUType.CLIENT_INFO: self.onClientInfo, + PlayerPDUType.CONNECTION_CLOSE: self.onConnectionClose, + PlayerPDUType.CLIPBOARD_DATA: self.onClipboardData, + PlayerPDUType.SLOW_PATH_PDU: self.onSlowPathPDU, + PlayerPDUType.FAST_PATH_OUTPUT: self.onFastPathFragment, + PlayerPDUType.FAST_PATH_INPUT: self.onFastPathInput, + PlayerPDUType.DEVICE_MAPPING: self.onDeviceMapping, + } + + def writeText(self, text: str): + pass + + def writeSeparator(self): + pass + + def onCapabilities(self, caps: dict): + """Handle capability set reported by the server.""" + bmp = caps[CapabilityType.CAPSTYPE_BITMAP] + (w, h) = (bmp.desktopWidth, bmp.desktopHeight) + self.writeText(f'') + + def onPDUReceived(self, pdu: PlayerPDU): + if pdu.header in self.handlers: + self.handlers[pdu.header](pdu) + + def onClientData(self, pdu: PlayerPDU): + """ + Prints the clientName on the screen + """ + parser = ClientConnectionParser() + clientDataPDU = parser.parse(pdu.payload) + clientName = clientDataPDU.coreData.clientName.strip("\x00") + + self.writeSeparator() + self.writeText(f"HOST: {clientName}\n") + self.writeSeparator() + + def onClientInfo(self, pdu: PlayerPDU): + parser = ClientInfoParser() + clientInfoPDU = parser.parse(pdu.payload) + + self.writeSeparator() + + self.writeText("USERNAME: {}\nPASSWORD: {}\nDOMAIN: {}\n".format( + clientInfoPDU.username.replace("\x00", ""), + clientInfoPDU.password.replace("\x00", ""), + clientInfoPDU.domain.replace("\x00", "") + )) + + self.writeSeparator() + + def onConnectionClose(self, _: PlayerPDU): + self.writeText("\n") + + def onClipboardData(self, pdu: PlayerPDU): + parser = ClipboardParser() + pdu = parser.parse(pdu.payload) + + if not isinstance(pdu, FormatDataResponsePDU): + return + + clipboardData = decodeUTF16LE(pdu.requestedFormatData) + + self.writeSeparator() + self.writeText(f"CLIPBOARD DATA: {clipboardData}") + self.writeSeparator() + + def onSlowPathPDU(self, pdu: PlayerPDU): + parser = SlowPathParser() + pdu = parser.parse(pdu.payload) + + if isinstance(pdu, ConfirmActivePDU): + self.onCapabilities(pdu.parsedCapabilitySets) + + elif isinstance(pdu, UpdatePDU): + self.onSlowPathUpdate(pdu) + + elif isinstance(pdu, InputPDU): + for event in pdu.events: + if isinstance(event, MouseEvent): + self.onMousePosition(event.x, event.y) + elif isinstance(event, KeyboardEvent): + self.onScanCode(event.keyCode, + event.flags & KeyboardFlag.KBDFLAGS_DOWN == 0, + event.flags & KeyboardFlag.KBDFLAGS_EXTENDED != 0) + + def onFastPathFragment(self, pdu: PlayerPDU): + parser = BasicFastPathParser(ParserMode.CLIENT) + pdu = parser.parse(pdu.payload) + + for event in pdu.events: + reassembledEvent = self.reassembleEvent(event) + + if reassembledEvent is not None: + self.onFastPathOutput(reassembledEvent) + + def reassembleEvent(self, event: FastPathOutputEvent) -> Optional[FastPathOutputEvent]: + """ + Handles FastPath event reassembly as described in + https://msdn.microsoft.com/en-us/library/cc240622.aspx + :param event: A potentially segmented fastpath output event + :return: a FastPathBitmapEvent if a complete PDU has been reassembled, otherwise None. If the event is not + fragmented, it is returned as is. + """ + fragmentationFlag = FastPathFragmentation((event.header & 0b00110000) >> 4) + + if fragmentationFlag == FastPathFragmentation.FASTPATH_FRAGMENT_SINGLE: + return event + elif fragmentationFlag == FastPathFragmentation.FASTPATH_FRAGMENT_FIRST: + self.buffer = event.payload + elif fragmentationFlag == FastPathFragmentation.FASTPATH_FRAGMENT_NEXT: + self.buffer += event.payload + elif fragmentationFlag == FastPathFragmentation.FASTPATH_FRAGMENT_LAST: + self.buffer += event.payload + event.payload = self.buffer + return event + + return None + + def onFastPathOutput(self, event: FastPathOutputEvent): + pass + + def onFastPathInput(self, pdu: PlayerPDU): + parser = BasicFastPathParser(ParserMode.SERVER) + pdu = parser.parse(pdu.payload) + + for event in pdu.events: + if isinstance(event, FastPathUnicodeEvent): + if not event.released: + self.onUnicode(event) + elif isinstance(event, FastPathMouseEvent): + self.onMouse(event) + elif isinstance(event, FastPathScanCodeEvent): + self.onScanCode(event.scanCode, event.isReleased, + event.rawHeaderByte & scancode.KBDFLAGS_EXTENDED != 0) + + def onSlowPathUpdate(self, pdu: UpdatePDU): + pass + + def onUnicode(self, event: FastPathUnicodeEvent): + self.writeText(str(event.text)) + + def onMouse(self, event: FastPathMouseEvent): + self.onMousePosition(event.mouseX, event.mouseY) + + if event.pointerFlags & PointerFlag.PTRFLAGS_DOWN: + self.onMouseButton({ + 1: event.pointerFlags & PointerFlag.PTRFLAGS_BUTTON1, + 2: event.pointerFlags & PointerFlag.PTRFLAGS_BUTTON2, + 3: event.pointerFlags & PointerFlag.PTRFLAGS_BUTTON3 + }, (event.mouseX, event.mouseY)) + + def onMouseButton(self, buttons: dict, pos: (int, int)): + """ + Called when mouse buttons have been pressed. + + :param buttons: A dictionary containing the state of MOUSE[1], MOUSE[2], MOUSE[3]. + :param pos: The (x,y) coordinates of the button press. + + The state is True if the button is pressed, False otherwise. + """ + pass + + def onMousePosition(self, x: int, y: int): + pass + + def onScanCode(self, scanCode: int, isReleased: bool, isExtended: bool): + """ + Handle scan code. + """ + keyName = scancode.getKeyName(scanCode, isExtended, self.shiftPressed, self.capsLockOn) + + if len(keyName) == 1: + if not isReleased: + self.writeText(keyName) + else: + self.writeText(f"\n<{keyName} {'released' if isReleased else 'pressed'}>") + + # Left or right shift + if scanCode in [0x2A, 0x36]: + self.shiftPressed = not isReleased + + # Caps lock + elif scanCode == 0x3A and not isReleased: + self.capsLockOn = not self.capsLockOn + + def onDeviceMapping(self, pdu: PlayerDeviceMappingPDU): + self.writeText(f"\n<{DeviceType.getPrettyName(pdu.deviceType)} mapped: {pdu.name}>") diff --git a/pyrdp/player/HeadlessEventHandler.py b/pyrdp/player/HeadlessEventHandler.py index 886b307e6..d67eef3ce 100644 --- a/pyrdp/player/HeadlessEventHandler.py +++ b/pyrdp/player/HeadlessEventHandler.py @@ -4,20 +4,13 @@ # Licensed under the GPLv3 or later. # - from io import TextIOBase from sys import stdout -from pyrdp.logging import log -from pyrdp.enum import DeviceType, KeyboardFlag, ParserMode, PlayerPDUType, PointerFlag -from pyrdp.parser import BasicFastPathParser, ClientConnectionParser, ClientInfoParser, ClipboardParser, SlowPathParser -from pyrdp.pdu import FastPathScanCodeEvent, FastPathUnicodeEvent, FormatDataResponsePDU, InputPDU, KeyboardEvent, FastPathMouseEvent, MouseEvent, \ - PlayerDeviceMappingPDU, PlayerPDU -from pyrdp.enum.scancode import getKeyName, KBDFLAGS_EXTENDED -from pyrdp.core import decodeUTF16LE, Observer +from pyrdp.player import BaseEventHandler -class HeadlessEventHandler(Observer): +class HeadlessEventHandler(BaseEventHandler): """ Handle events from a replay file without rendering to a surface. @@ -28,137 +21,20 @@ def __init__(self, output: TextIOBase = stdout): super().__init__() self.output = output - self.shiftPressed = False - self.capsLockOn = False - self.buffer = b"" - - # Instantiate parsers. - self.slowpath = SlowPathParser() - # self.fastpath = FastPathOutputParser() - self.clipboard = ClipboardParser() - - self.handlers = { - PlayerPDUType.CLIENT_DATA: self.onClientData, - PlayerPDUType.CLIENT_INFO: self.onClientInfo, - PlayerPDUType.CONNECTION_CLOSE: self.onConnectionClose, - PlayerPDUType.CLIPBOARD_DATA: self.onClipboardData, - PlayerPDUType.SLOW_PATH_PDU: self.onSlowPathPDU, - PlayerPDUType.FAST_PATH_INPUT: self.onFastPathInput, - PlayerPDUType.DEVICE_MAPPING: self.onDeviceMapping, - } - def writeText(self, text: str): self.output.write(text.rstrip("\x00")) def writeSeparator(self): self.output.write("\n--------------------\n") - def onPDUReceived(self, pdu: PlayerPDU, isMainThread=False): - log.debug("Received %(pdu)s", {"pdu": pdu}) - if pdu.header in self.handlers: - self.handlers[pdu.header](pdu) - - def onClientData(self, pdu: PlayerPDU): - parser = ClientConnectionParser() - clientDataPDU = parser.parse(pdu.payload) - clientName = clientDataPDU.coreData.clientName.strip("\x00") - - self.writeSeparator() - self.writeText(f"HOST: {clientName}\n") - self.writeSeparator() - - def onClientInfo(self, pdu: PlayerPDU): - parser = ClientInfoParser() - clientInfoPDU = parser.parse(pdu.payload) - - self.writeSeparator() - - self.writeText("USERNAME: {}\nPASSWORD: {}\nDOMAIN: {}\n".format( - clientInfoPDU.username.replace("\x00", ""), - clientInfoPDU.password.replace("\x00", ""), - clientInfoPDU.domain.replace("\x00", "") - )) - - self.writeSeparator() - - def onConnectionClose(self, _: PlayerPDU): - self.writeText("\n") - - def onClipboardData(self, pdu: PlayerPDU): - parser = ClipboardParser() - pdu = parser.parse(pdu.payload) - - if not isinstance(pdu, FormatDataResponsePDU): - return - - clipboardData = decodeUTF16LE(pdu.requestedFormatData) - - self.writeSeparator() - self.writeText(f"CLIPBOARD DATA: {clipboardData}") - self.writeSeparator() - - def onSlowPathPDU(self, pdu: PlayerPDU): - pdu = self.slowpath.parse(pdu.payload) - - if not isinstance(pdu, InputPDU): - return - for event in pdu.events: - if isinstance(event, MouseEvent): - self.onMousePosition(event.x, event.y) - elif isinstance(event, KeyboardEvent): - down = event.flags & KeyboardFlag.KBDFLAGS_DOWN == 0 - ext = event.flags & KeyboardFlag.KBDFLAGS_EXTENDED != 0 - self.onScanCode(event.keyCode, down, ext) - - def onFastPathInput(self, pdu: PlayerPDU): - parser = BasicFastPathParser(ParserMode.SERVER) - pdu = parser.parse(pdu.payload) - - for event in pdu.events: - if isinstance(event, FastPathUnicodeEvent): - if not event.released: - self.onUnicode(event) - elif isinstance(event, FastPathMouseEvent): - self.onMouse(event) - elif isinstance(event, FastPathScanCodeEvent): - ext = event.rawHeaderByte & KBDFLAGS_EXTENDED != 0 - self.onScanCode(event.scanCode, event.isReleased, ext) - - def onUnicode(self, event: FastPathUnicodeEvent): - self.writeText(str(event.text)) - - def onMouse(self, event: FastPathMouseEvent): - if event.pointerFlags & PointerFlag.PTRFLAGS_DOWN: - if event.pointerFlags & PointerFlag.PTRFLAGS_BUTTON1: - button = 'Left' - elif event.pointerFlags & PointerFlag.PTRFLAGS_BUTTON2: - button = 'Right' - elif event.pointerFlags & PointerFlag.PTRFLAGS_BUTTON3: - button = 'Middle' - else: - button = 'Unknown' - self.writeText(f'\n') - self.onMousePosition(event.mouseX, event.mouseY) - - def onMousePosition(self, x: int, y: int): - pass - - def onScanCode(self, scanCode: int, isReleased: bool, isExtended: bool): - keyName = getKeyName(scanCode, isExtended, self.shiftPressed, self.capsLockOn) - - if len(keyName) == 1: - if not isReleased: - self.writeText(keyName) - else: - self.writeText(f"\n<{keyName} {'released' if isReleased else 'pressed'}>") - - # Handle shift. - if scanCode in [0x2A, 0x36]: - self.shiftPressed = not isReleased - - # Caps lock - elif scanCode == 0x3A and not isReleased: - self.capsLockOn = not self.capsLockOn - - def onDeviceMapping(self, pdu: PlayerDeviceMappingPDU): - self.writeText(f"\n<{DeviceType.getPrettyName(pdu.deviceType)} mapped: {pdu.name}>") + def onMouseButton(self, buttons, pos): + pressed = [] + if 1 in buttons and buttons[1]: + pressed.append('Left') + if 2 in buttons and buttons[2]: + pressed.append('Right') + if 3 in buttons and buttons[3]: + pressed.append('Middle') + + (x, y) = pos + self.writeText(f'\n') diff --git a/pyrdp/player/PlayerEventHandler.py b/pyrdp/player/PlayerEventHandler.py index 3e0cde1a8..38223d09a 100644 --- a/pyrdp/player/PlayerEventHandler.py +++ b/pyrdp/player/PlayerEventHandler.py @@ -8,254 +8,50 @@ from PySide2.QtGui import QTextCursor from PySide2.QtWidgets import QTextEdit -from pyrdp.core import decodeUTF16LE, Observer -from pyrdp.enum import BitmapFlags, CapabilityType, DeviceType, FastPathFragmentation, KeyboardFlag, ParserMode, \ - PlayerPDUType, SlowPathUpdateType, scancode, PointerFlag +from pyrdp.pdu import PlayerPDU +from pyrdp.enum import CapabilityType +from pyrdp.ui import QRemoteDesktop +from pyrdp.player.RenderingEventHandler import RenderingEventHandler from pyrdp.logging import log -from pyrdp.parser import BasicFastPathParser, BitmapParser, ClientConnectionParser, ClientInfoParser, ClipboardParser, \ - FastPathOutputParser, SlowPathParser -from pyrdp.pdu import BitmapUpdateData, ConfirmActivePDU, FastPathBitmapEvent, FastPathOrdersEvent, \ - FastPathMouseEvent, FastPathOutputEvent, FastPathScanCodeEvent, FastPathUnicodeEvent, FormatDataResponsePDU, \ - InputPDU, KeyboardEvent, MouseEvent, PlayerDeviceMappingPDU, PlayerPDU, UpdatePDU -from pyrdp.ui import QRemoteDesktop, RDPBitmapToQtImage -from .gdi import GdiQtFrontend -from pyrdp.parser.rdp.orders import OrdersParser - -class PlayerEventHandler(QObject, Observer): +class PlayerEventHandler(QObject, RenderingEventHandler): """ - Class to handle events coming to the player. + Qt Rendering Sink. + + This class handles the video pipeline by rendering to a Qt widget. """ def __init__(self, viewer: QRemoteDesktop, text: QTextEdit): - super().__init__() + QObject.__init__(self) + RenderingEventHandler.__init__(self, viewer) + self.viewer = viewer self.text = text - self.shiftPressed = False - self.capsLockOn = False - self.buffer = b"" - self.handlers = { - PlayerPDUType.CLIENT_DATA: self.onClientData, - PlayerPDUType.CLIENT_INFO: self.onClientInfo, - PlayerPDUType.CONNECTION_CLOSE: self.onConnectionClose, - PlayerPDUType.CLIPBOARD_DATA: self.onClipboardData, - PlayerPDUType.SLOW_PATH_PDU: self.onSlowPathPDU, - PlayerPDUType.FAST_PATH_OUTPUT: self.onFastPathOutput, - PlayerPDUType.FAST_PATH_INPUT: self.onFastPathInput, - PlayerPDUType.DEVICE_MAPPING: self.onDeviceMapping, - } - - self.gdi: GdiQtFrontend = None - self.orders: OrdersParser = None - - def writeText(self, text: str): - self.text.moveCursor(QTextCursor.End) - self.text.insertPlainText(text.rstrip("\x00")) - - def writeSeparator(self): - self.writeText("\n--------------------\n") def onPDUReceived(self, pdu: PlayerPDU, isMainThread=False): + # Ensure we are on the main thread. if not isMainThread: self.viewer.mainThreadHook.emit(lambda: self.onPDUReceived(pdu, True)) return log.debug("Received %(pdu)s", {"pdu": pdu}) - if pdu.header in self.handlers: - self.handlers[pdu.header](pdu) - - def onClientData(self, pdu: PlayerPDU): - """ - Prints the clientName on the screen - """ - parser = ClientConnectionParser() - clientDataPDU = parser.parse(pdu.payload) - clientName = clientDataPDU.coreData.clientName.strip("\x00") - - self.writeSeparator() - self.writeText(f"HOST: {clientName}\n") - self.writeSeparator() - - def onClientInfo(self, pdu: PlayerPDU): - parser = ClientInfoParser() - clientInfoPDU = parser.parse(pdu.payload) - - self.writeSeparator() - - self.writeText("USERNAME: {}\nPASSWORD: {}\nDOMAIN: {}\n".format( - clientInfoPDU.username.replace("\x00", ""), - clientInfoPDU.password.replace("\x00", ""), - clientInfoPDU.domain.replace("\x00", "") - )) - - self.writeSeparator() - - def onConnectionClose(self, _: PlayerPDU): - self.writeText("\n") - - def onClipboardData(self, pdu: PlayerPDU): - parser = ClipboardParser() - pdu = parser.parse(pdu.payload) - - if not isinstance(pdu, FormatDataResponsePDU): - return - - clipboardData = decodeUTF16LE(pdu.requestedFormatData) - - self.writeSeparator() - self.writeText(f"CLIPBOARD DATA: {clipboardData}") - self.writeSeparator() - - def onSlowPathPDU(self, pdu: PlayerPDU): - parser = SlowPathParser() - pdu = parser.parse(pdu.payload) - - if isinstance(pdu, ConfirmActivePDU): - bitmapCapability = pdu.parsedCapabilitySets[CapabilityType.CAPSTYPE_BITMAP] - self.viewer.resize(bitmapCapability.desktopWidth, bitmapCapability.desktopHeight) - - # Enable MS-RDPEGDI parsing and rendering. - if CapabilityType.CAPSTYPE_ORDER in pdu.parsedCapabilitySets: - self.gdi = GdiQtFrontend(self.viewer) - self.orders = OrdersParser(self.gdi) - self.orders.onCapabilities(pdu.parsedCapabilitySets) - elif isinstance(pdu, UpdatePDU) and pdu.updateType == SlowPathUpdateType.SLOWPATH_UPDATETYPE_BITMAP: - updates = BitmapParser().parseBitmapUpdateData(pdu.updateData) - - for bitmap in updates: - self.handleBitmap(bitmap) - elif isinstance(pdu, InputPDU): - for event in pdu.events: - if isinstance(event, MouseEvent): - self.onMousePosition(event.x, event.y) - elif isinstance(event, KeyboardEvent): - self.onScanCode(event.keyCode, event.flags & KeyboardFlag.KBDFLAGS_DOWN == - 0, event.flags & KeyboardFlag.KBDFLAGS_EXTENDED != 0) + # Call the parent PDU Received method. + super().onPDUReceived(pdu) - def onFastPathOutput(self, pdu: PlayerPDU): - parser = BasicFastPathParser(ParserMode.CLIENT) - pdu = parser.parse(pdu.payload) - - for fragment in pdu.events: - event = self.mergeFragments(fragment) - - if event is not None: - if isinstance(event, FastPathBitmapEvent): - self.onFastPathBitmap(event) - elif isinstance(event, FastPathOrdersEvent): - if self.orders is None: - log.error('Received Unexpected Drawing Orders!') - return - self.onFastPathOrders(event) - - def mergeFragments(self, event: FastPathOutputEvent) -> FastPathOutputEvent: - """ - Handles FastPath fragment reassembly. - - This is documented at https://msdn.microsoft.com/en-us/library/cc240622.aspx. - - :param event: A potentially fragmented FastPath output event - :return: The reassembled FastPath PDU once available, or None if the PDU is a fragment fragmented and is - not fully reassembled yet. - If the event is not fragmented, it is returned with no further processing. - """ - fragmentationFlag = FastPathFragmentation((event.header & 0b00110000) >> 4) - - if fragmentationFlag == FastPathFragmentation.FASTPATH_FRAGMENT_SINGLE: - return event - elif fragmentationFlag == FastPathFragmentation.FASTPATH_FRAGMENT_FIRST: - self.buffer = event.payload - elif fragmentationFlag == FastPathFragmentation.FASTPATH_FRAGMENT_NEXT: - self.buffer += event.payload - elif fragmentationFlag == FastPathFragmentation.FASTPATH_FRAGMENT_LAST: - self.buffer += event.payload - event.payload = self.buffer - - return event - - # Partial fragment, don't parse it yet. - return None - - def onFastPathBitmap(self, event: FastPathBitmapEvent): - parser = FastPathOutputParser() - parsedEvent = parser.parseBitmapEvent(event) - - for bitmapData in parsedEvent.bitmapUpdateData: - self.handleBitmap(bitmapData) - - def onFastPathOrders(self, event: FastPathOrdersEvent): - self.orders.parse(event) - - def onFastPathInput(self, pdu: PlayerPDU): - parser = BasicFastPathParser(ParserMode.SERVER) - pdu = parser.parse(pdu.payload) - - for event in pdu.events: - if isinstance(event, FastPathUnicodeEvent): - if not event.released: - self.onUnicode(event) - elif isinstance(event, FastPathMouseEvent): - self.onMouse(event) - elif isinstance(event, FastPathScanCodeEvent): - self.onScanCode(event.scanCode, event.isReleased, event.rawHeaderByte & scancode.KBDFLAGS_EXTENDED != 0) - - def onUnicode(self, event: FastPathUnicodeEvent): - self.writeText(str(event.text)) - - def onMouse(self, event: FastPathMouseEvent): - if event.pointerFlags & PointerFlag.PTRFLAGS_DOWN: - if event.pointerFlags & PointerFlag.PTRFLAGS_BUTTON1: - button = 'Left' - elif event.pointerFlags & PointerFlag.PTRFLAGS_BUTTON2: - button = 'Right' - elif event.pointerFlags & PointerFlag.PTRFLAGS_BUTTON3: - button = 'Middle' - else: - button = 'Unknown' - self.writeText(f'\n') - - self.onMousePosition(event.mouseX, event.mouseY) + def onCapabilities(self, caps): + # Set viewport's initial size. + bmp = caps[CapabilityType.CAPSTYPE_BITMAP] + (w, h) = (bmp.desktopWidth, bmp.desktopHeight) + self.viewer.resize(w, h) def onMousePosition(self, x: int, y: int): self.viewer.setMousePosition(x, y) - def onScanCode(self, scanCode: int, isReleased: bool, isExtended: bool): - """ - Handle scan code. - """ - keyName = scancode.getKeyName(scanCode, isExtended, self.shiftPressed, self.capsLockOn) - - if len(keyName) == 1: - if not isReleased: - self.writeText(keyName) - else: - self.writeText(f"\n<{keyName} {'released' if isReleased else 'pressed'}>") - - # Left or right shift - if scanCode in [0x2A, 0x36]: - self.shiftPressed = not isReleased - - # Caps lock - elif scanCode == 0x3A and not isReleased: - self.capsLockOn = not self.capsLockOn - - def handleBitmap(self, bitmapData: BitmapUpdateData): - image = RDPBitmapToQtImage( - bitmapData.width, - bitmapData.heigth, - bitmapData.bitsPerPixel, - bitmapData.flags & BitmapFlags.BITMAP_COMPRESSION != 0, - bitmapData.bitmapData - ) - - self.viewer.notifyImage( - bitmapData.destLeft, - bitmapData.destTop, - image, - bitmapData.destRight - bitmapData.destLeft + 1, - bitmapData.destBottom - bitmapData.destTop + 1) + def writeText(self, text: str): + self.text.moveCursor(QTextCursor.End) + self.text.insertPlainText(text.rstrip("\x00")) - def onDeviceMapping(self, pdu: PlayerDeviceMappingPDU): - self.writeText(f"\n<{DeviceType.getPrettyName(pdu.deviceType)} mapped: {pdu.name}>") + def writeSeparator(self): + self.writeText("\n--------------------\n") diff --git a/pyrdp/player/RenderingEventHandler.py b/pyrdp/player/RenderingEventHandler.py new file mode 100644 index 000000000..1480f3663 --- /dev/null +++ b/pyrdp/player/RenderingEventHandler.py @@ -0,0 +1,67 @@ +# +# This file is part of the PyRDP project. +# Copyright (C) 2020 GoSecure Inc. +# Licensed under the GPLv3 or later. +# + +from pyrdp.enum import BitmapFlags, CapabilityType, SlowPathUpdateType +from pyrdp.parser import BitmapParser, FastPathOutputParser, OrdersParser +from pyrdp.pdu import BitmapUpdateData, FastPathBitmapEvent, FastPathOutputEvent, FastPathOrdersEvent, UpdatePDU +from pyrdp.player.BaseEventHandler import BaseEventHandler +from pyrdp.player.gdi.draw import GdiQtFrontend +from pyrdp.ui import RDPBitmapToQtImage + +import logging + + +class RenderingEventHandler(BaseEventHandler): + """Abstract class for video rendering sinks.""" + + def __init__(self, sink): + BaseEventHandler.__init__(self) + self._fastPath = FastPathOutputParser() + self._bitmap = BitmapParser() + self._orders: OrdersParser = None + self.log = logging.getLogger(__name__) + self.sink = sink + + def onCapabilities(self, caps): + if CapabilityType.CAPSTYPE_ORDER in caps: + self.gdi = GdiQtFrontend(self.sink) + self.orders = OrdersParser(self.gdi) + self.orders.onCapabilities(caps) + + # Generic Video Parsing Routines. + def onFastPathOutput(self, event: FastPathOutputEvent): + if isinstance(event, FastPathBitmapEvent): + parsed = self._fastPath.parseBitmapEvent(event) + for bmp in parsed.bitmapUpdateData: + self.onBitmap(bmp) + + elif isinstance(event, FastPathOrdersEvent): + if self.orders is None: + self.log.error('Received Unexpected Drawing Orders!') + return + self._orders.parse(event) + + def onSlowPathUpdate(self, pdu: UpdatePDU): + if pdu.updateType == SlowPathUpdateType.SLOWPATH_UPDATETYPE_BITMAP: + updates = self._bitmap.parseBitmapUpdateData(pdu.updateData) + for bmp in updates: + self.onBitmap(bmp) + + def onBitmap(self, bitmapData: BitmapUpdateData): + image = RDPBitmapToQtImage( + bitmapData.width, + bitmapData.heigth, + bitmapData.bitsPerPixel, + bitmapData.flags & BitmapFlags.BITMAP_COMPRESSION != 0, + bitmapData.bitmapData + ) + + self.sink.notifyImage( + bitmapData.destLeft, + bitmapData.destTop, + image, + bitmapData.destRight - bitmapData.destLeft + 1, + bitmapData.destBottom - bitmapData.destTop + 1) diff --git a/pyrdp/player/__init__.py b/pyrdp/player/__init__.py index 12064fdc0..c9348aee5 100644 --- a/pyrdp/player/__init__.py +++ b/pyrdp/player/__init__.py @@ -4,8 +4,9 @@ # Licensed under the GPLv3 or later. # -from pyrdp.player.HeadlessEventHandler import HeadlessEventHandler from pyrdp.player.Replay import Replay +from .BaseEventHandler import BaseEventHandler +from .HeadlessEventHandler import HeadlessEventHandler # UI-Specific imports. These might fail when UI dependencies are not # present. @@ -17,6 +18,7 @@ from pyrdp.player.LiveWindow import LiveWindow from pyrdp.player.MainWindow import MainWindow from pyrdp.player.PlayerEventHandler import PlayerEventHandler + from pyrdp.player.RenderingEventHandler import RenderingEventHandler from pyrdp.player.QTimerSequencer import QTimerSequencer from pyrdp.player.ReplayBar import ReplayBar from pyrdp.player.ReplayTab import ReplayTab From ddbdd9d2c6ee7a9ee4981930a019257d489d9105 Mon Sep 17 00:00:00 2001 From: Alexandre Beaulieu Date: Wed, 25 Mar 2020 13:25:05 -0400 Subject: [PATCH 13/20] feat: Added Mp4 rendering sink --- pyrdp/player/BaseEventHandler.py | 60 ++++++++++++-------- pyrdp/player/LiveWindow.py | 1 + pyrdp/player/Mp4EventHandler.py | 81 +++++++++++++++++++++++++++ pyrdp/player/RenderingEventHandler.py | 10 ++++ pyrdp/player/ReplayTab.py | 1 + pyrdp/player/__init__.py | 2 - 6 files changed, 130 insertions(+), 25 deletions(-) create mode 100644 pyrdp/player/Mp4EventHandler.py diff --git a/pyrdp/player/BaseEventHandler.py b/pyrdp/player/BaseEventHandler.py index 13555e9c3..9cd295067 100644 --- a/pyrdp/player/BaseEventHandler.py +++ b/pyrdp/player/BaseEventHandler.py @@ -54,6 +54,20 @@ def onCapabilities(self, caps: dict): (w, h) = (bmp.desktopWidth, bmp.desktopHeight) self.writeText(f'') + def cleanup(self): + """ + Called when this handler is no longer needed. + + This callback can be used to perform any handler specific + cleanup that is necessary after a data stream is done processing. + + For playback streams, this means that the replay file is over and will + no longer be played back. (Essentially, the tab has been closed.) + + For live streams, this means that the connection has been terminated. + """ + pass + def onPDUReceived(self, pdu: PlayerPDU): if pdu.header in self.handlers: self.handlers[pdu.header](pdu) @@ -129,29 +143,6 @@ def onFastPathFragment(self, pdu: PlayerPDU): if reassembledEvent is not None: self.onFastPathOutput(reassembledEvent) - def reassembleEvent(self, event: FastPathOutputEvent) -> Optional[FastPathOutputEvent]: - """ - Handles FastPath event reassembly as described in - https://msdn.microsoft.com/en-us/library/cc240622.aspx - :param event: A potentially segmented fastpath output event - :return: a FastPathBitmapEvent if a complete PDU has been reassembled, otherwise None. If the event is not - fragmented, it is returned as is. - """ - fragmentationFlag = FastPathFragmentation((event.header & 0b00110000) >> 4) - - if fragmentationFlag == FastPathFragmentation.FASTPATH_FRAGMENT_SINGLE: - return event - elif fragmentationFlag == FastPathFragmentation.FASTPATH_FRAGMENT_FIRST: - self.buffer = event.payload - elif fragmentationFlag == FastPathFragmentation.FASTPATH_FRAGMENT_NEXT: - self.buffer += event.payload - elif fragmentationFlag == FastPathFragmentation.FASTPATH_FRAGMENT_LAST: - self.buffer += event.payload - event.payload = self.buffer - return event - - return None - def onFastPathOutput(self, event: FastPathOutputEvent): pass @@ -221,3 +212,26 @@ def onScanCode(self, scanCode: int, isReleased: bool, isExtended: bool): def onDeviceMapping(self, pdu: PlayerDeviceMappingPDU): self.writeText(f"\n<{DeviceType.getPrettyName(pdu.deviceType)} mapped: {pdu.name}>") + + def reassembleEvent(self, event: FastPathOutputEvent) -> Optional[FastPathOutputEvent]: + """ + Handles FastPath event reassembly as described in + https://msdn.microsoft.com/en-us/library/cc240622.aspx + :param event: A potentially segmented fastpath output event + :return: a FastPathBitmapEvent if a complete PDU has been reassembled, otherwise None. If the event is not + fragmented, it is returned as is. + """ + fragmentationFlag = FastPathFragmentation((event.header & 0b00110000) >> 4) + + if fragmentationFlag == FastPathFragmentation.FASTPATH_FRAGMENT_SINGLE: + return event + elif fragmentationFlag == FastPathFragmentation.FASTPATH_FRAGMENT_FIRST: + self.buffer = event.payload + elif fragmentationFlag == FastPathFragmentation.FASTPATH_FRAGMENT_NEXT: + self.buffer += event.payload + elif fragmentationFlag == FastPathFragmentation.FASTPATH_FRAGMENT_LAST: + self.buffer += event.payload + event.payload = self.buffer + return event + + return None diff --git a/pyrdp/player/LiveWindow.py b/pyrdp/player/LiveWindow.py index 7eeb420fc..cdd7e3787 100644 --- a/pyrdp/player/LiveWindow.py +++ b/pyrdp/player/LiveWindow.py @@ -70,6 +70,7 @@ def onConnectionClosed(self, tab: LiveTab): text = self.tabText(index) name = text + self.closedTabText self.setTabText(index, name) + self.eventHandler.cleanup() def sendKeySequence(self, keys: [Qt.Key]): tab: LiveTab = self.currentWidget() diff --git a/pyrdp/player/Mp4EventHandler.py b/pyrdp/player/Mp4EventHandler.py new file mode 100644 index 000000000..ef0c302fa --- /dev/null +++ b/pyrdp/player/Mp4EventHandler.py @@ -0,0 +1,81 @@ +# +# This file is part of the PyRDP project. +# Copyright (C) 2020 GoSecure Inc. +# Licensed under the GPLv3 or later. +# + +from pyrdp.enum import BitmapFlags, CapabilityType +from pyrdp.pdu import BitmapUpdateData +from pyrdp.player.RenderingEventHandler import RenderingEventHandler +from pyrdp.ui import RDPBitmapToQtImage + +import av +from PIL import ImageQt +from PySide2.QtGui import QImage, QPainter + + +FPS = 24 + + +class Mp4Sink: + def __init__(self): + self.screen: QImage = None + + def notifyImage(self, x: int, y: int, img: QImage, w: int, h: int): + p = QPainter(self.screen) + p.drawImage(x, y, img, 0, 0, w, h) + + def update(self): + pass + + def resize(self, w: int, h: int): + self.screen = QImage(w, h, QImage.Format_RGB888) + + +class Mp4EventHandler(RenderingEventHandler): + + def __init__(self, filename: str): + """Construct an event handler that outputs to an Mp4 file.""" + + self.sink = Mp4Sink() + self.mp4 = f = av.open(filename, 'w') + self.stream = f.add_stream('h264', rate=FPS) + self.stream.pix_fmt = 'yuv420p' + self.scale = False + self.mouse = (0, 0) + + super().__init__(self.sink) + + def cleanup(self): + # FIXME: Need to flush here to avoid hanging. + self.mp4.close() + + def onCapabilities(self, caps): + bmp = caps[CapabilityType.CAPSTYPE_BITMAP] + (w, h) = (bmp.desktopWidth, bmp.desktopHeight) + self.sink.resize(w, h) + + if w % 2 != 0: + self.scale = True + w += 1 + if h % 2 != 0: + self.scale = True + h += 1 + + self.stream.width = w + self.stream.height = h + + def onBeginRender(self): + pass + + def onFinishRender(self): + # Write to the mp4 container. + w = self.stream.width + h = self.stream.height + + surface = self.sink.screen.scaled(w, h) if self.scale else self.sink.screen + frame = av.VideoFrame.from_image(ImageQt.fromqimage(surface)) + + for packet in self.stream.encode(frame): + self.mp4.mux(packet) + # TODO: Add progress callback. diff --git a/pyrdp/player/RenderingEventHandler.py b/pyrdp/player/RenderingEventHandler.py index 1480f3663..281889913 100644 --- a/pyrdp/player/RenderingEventHandler.py +++ b/pyrdp/player/RenderingEventHandler.py @@ -35,8 +35,10 @@ def onCapabilities(self, caps): def onFastPathOutput(self, event: FastPathOutputEvent): if isinstance(event, FastPathBitmapEvent): parsed = self._fastPath.parseBitmapEvent(event) + self.onBeginRender() for bmp in parsed.bitmapUpdateData: self.onBitmap(bmp) + self.onFinishRender() elif isinstance(event, FastPathOrdersEvent): if self.orders is None: @@ -47,8 +49,10 @@ def onFastPathOutput(self, event: FastPathOutputEvent): def onSlowPathUpdate(self, pdu: UpdatePDU): if pdu.updateType == SlowPathUpdateType.SLOWPATH_UPDATETYPE_BITMAP: updates = self._bitmap.parseBitmapUpdateData(pdu.updateData) + self.onBeginRender() for bmp in updates: self.onBitmap(bmp) + self.onFinishRender() def onBitmap(self, bitmapData: BitmapUpdateData): image = RDPBitmapToQtImage( @@ -65,3 +69,9 @@ def onBitmap(self, bitmapData: BitmapUpdateData): image, bitmapData.destRight - bitmapData.destLeft + 1, bitmapData.destBottom - bitmapData.destTop + 1) + + def onBeginRender(self): + pass + + def onFinishRender(self): + pass diff --git a/pyrdp/player/ReplayTab.py b/pyrdp/player/ReplayTab.py index 8a670a3e6..cc2090ec1 100644 --- a/pyrdp/player/ReplayTab.py +++ b/pyrdp/player/ReplayTab.py @@ -90,6 +90,7 @@ def clear(self): def onClose(self): self.thread.close() self.thread.wait() + self.eventHandler.cleanup() def setScaleToWindow(self, status: int): """ diff --git a/pyrdp/player/__init__.py b/pyrdp/player/__init__.py index c9348aee5..10442c50c 100644 --- a/pyrdp/player/__init__.py +++ b/pyrdp/player/__init__.py @@ -17,8 +17,6 @@ from pyrdp.player.LiveThread import LiveThread from pyrdp.player.LiveWindow import LiveWindow from pyrdp.player.MainWindow import MainWindow - from pyrdp.player.PlayerEventHandler import PlayerEventHandler - from pyrdp.player.RenderingEventHandler import RenderingEventHandler from pyrdp.player.QTimerSequencer import QTimerSequencer from pyrdp.player.ReplayBar import ReplayBar from pyrdp.player.ReplayTab import ReplayTab From 536be0c94c3a2ca3caef667e8e1957e40812abe6 Mon Sep 17 00:00:00 2001 From: Alexandre Beaulieu Date: Fri, 27 Mar 2020 10:43:52 -0400 Subject: [PATCH 14/20] feat: Added MP4 rendering support. --- pyrdp/player/Mp4EventHandler.py | 72 ++++++++++++++++++++++++++++----- 1 file changed, 61 insertions(+), 11 deletions(-) diff --git a/pyrdp/player/Mp4EventHandler.py b/pyrdp/player/Mp4EventHandler.py index ef0c302fa..575ac8ffc 100644 --- a/pyrdp/player/Mp4EventHandler.py +++ b/pyrdp/player/Mp4EventHandler.py @@ -5,16 +5,15 @@ # from pyrdp.enum import BitmapFlags, CapabilityType -from pyrdp.pdu import BitmapUpdateData +from pyrdp.pdu import BitmapUpdateData, PlayerPDU from pyrdp.player.RenderingEventHandler import RenderingEventHandler from pyrdp.ui import RDPBitmapToQtImage +import logging + import av from PIL import ImageQt -from PySide2.QtGui import QImage, QPainter - - -FPS = 24 +from PySide2.QtGui import QImage, QPainter, QColor class Mp4Sink: @@ -34,22 +33,61 @@ def resize(self, w: int, h: int): class Mp4EventHandler(RenderingEventHandler): - def __init__(self, filename: str): + def __init__(self, filename: str, fps=30): """Construct an event handler that outputs to an Mp4 file.""" self.sink = Mp4Sink() + self.filename = filename self.mp4 = f = av.open(filename, 'w') - self.stream = f.add_stream('h264', rate=FPS) + self.stream = f.add_stream('h264', rate=fps) self.stream.pix_fmt = 'yuv420p' self.scale = False self.mouse = (0, 0) + self.fps = fps + self.delta = 1000 // fps # ms per frame + self.log = logging.getLogger(__name__) + self.log.info('Begin MP4 export to %s: %d FPS', filename) + self.timestamp = self.prevTimestamp = None super().__init__(self.sink) + def onPDUReceived(self, pdu: PlayerPDU): + super().onPDUReceived(pdu) + + # Make sure the rendering surface has been created. + if self.sink.screen is None: + return + + ts = pdu.timestamp + self.timestamp = ts + + if self.prevTimestamp is None: + dt = self.delta + else: + dt = self.timestamp - self.prevTimestamp # ms + nframes = (dt // self.delta) + if nframes > 0: + for _ in range(nframes): + self._writeFrame(self.surface) + self.prevTimestamp = ts + self.log.debug('Rendered %d still frame(s)', nframes) + def cleanup(self): - # FIXME: Need to flush here to avoid hanging. + # Add one second worth of padding so that the video doesn't end too abruptly. + for _ in range(self.fps): + self._writeFrame(self.surface) + + self.log.info('Flushing to disk: %s', self.filename) + for pkt in self.stream.encode(): + self.mp4.mux(pkt) + self.log.info('Export completed.') + self.mp4.close() + def onMousePosition(self, x, y): + self.mouse = (x, y) + super().onMousePosition(x, y) + def onCapabilities(self, caps): bmp = caps[CapabilityType.CAPSTYPE_BITMAP] (w, h) = (bmp.desktopWidth, bmp.desktopHeight) @@ -69,13 +107,25 @@ def onBeginRender(self): pass def onFinishRender(self): - # Write to the mp4 container. + # When the screen is updated, always write a frame. + self.prevTimestamp = self.timestamp + self._writeFrame(self.surface) + + def _writeFrame(self, surface: QImage): w = self.stream.width h = self.stream.height - surface = self.sink.screen.scaled(w, h) if self.scale else self.sink.screen frame = av.VideoFrame.from_image(ImageQt.fromqimage(surface)) + # Draw the mouse pointer. + # NOTE: We could render mouse clicks by changing the color of the brush. + p = QPainter(surface) + p.setBrush(QColor.fromRgb(255, 255, 0, 180)) + (x, y) = self.mouse + p.drawEllipse(x, y, 5, 5) + p.end() + + # Output frame. + frame = av.VideoFrame.from_image(ImageQt.fromqimage(surface)) for packet in self.stream.encode(frame): self.mp4.mux(packet) - # TODO: Add progress callback. From 00bb3b7d08af7ce6fe6a99d8d76bda656c28bbe3 Mon Sep 17 00:00:00 2001 From: Alexandre Beaulieu Date: Thu, 2 Apr 2020 11:28:37 -0400 Subject: [PATCH 15/20] feat: Added replay to mp4 conversion. --- bin/pyrdp-convert.py | 298 ++++++++++++++++++-------------- bin/pyrdp-replay.py | 147 ---------------- pyrdp/player/Mp4EventHandler.py | 15 +- setup.py | 1 - 4 files changed, 186 insertions(+), 275 deletions(-) delete mode 100755 bin/pyrdp-replay.py diff --git a/bin/pyrdp-convert.py b/bin/pyrdp-convert.py index e7ac9160b..769b67705 100644 --- a/bin/pyrdp-convert.py +++ b/bin/pyrdp-convert.py @@ -11,6 +11,9 @@ from pyrdp.mitm.MITMRecorder import MITMRecorder from pyrdp.mitm.state import RDPMITMState from pyrdp.recording import FileLayer +from pyrdp.player.BaseEventHandler import BaseEventHandler +from pyrdp.player.Mp4EventHandler import Mp4EventHandler +from pyrdp.player.Replay import Replay import argparse from binascii import unhexlify, hexlify @@ -19,17 +22,29 @@ import struct import time -from progressbar import progressbar +import progressbar # No choice but to import * here for load_layer to work properly. from scapy.all import * # noqa load_layer('tls') # noqa TLS_HDR_LEN = 24 # Hopefully this doesn't change between TLS versions. +OUTFILE_FORMAT = '{prefix}{timestamp}_{src}-{dst}.{ext}' class CustomMITMRecorder(MITMRecorder): currentTimeStamp: int = None + sink: BaseEventHandler = None + + def __init__(self, transports, state: RDPMITMState, sink: BaseEventHandler = None): + if sink: + self.sink = sink + super().__init__(transports, state) + + def record(self, pdu, messageType, forceRecording: bool = False): + if self.sink and pdu: + self.sink.onPDUReceived(pdu) + super().record(pdu, messageType, forceRecording) def getCurrentTimeStamp(self) -> int: return self.currentTimeStamp @@ -93,9 +108,13 @@ def startTLS(self): def sendPayload(self): pass -# The name format of output files. -OUTFILE_FORMAT = '{prefix}{timestamp}_{src}-{dst}.{ext}' +def tcp_both(p) -> str: + """Session extractor which merges both sides of a TCP channel.""" + + if 'TCP' in p: + return str(sorted(['TCP', p[IP].src, p[TCP].sport, p[IP].dst, p[TCP].dport], key=str)) + return 'Other' def findClientRandom(stream: PacketList, limit: int = 10) -> str: """Find the client random offset and value of a stream.""" @@ -113,14 +132,6 @@ def findClientRandom(stream: PacketList, limit: int = 10) -> str: return '' -def tcp_both(p) -> str: - """Session extractor which merges both sides of a TCP channel.""" - - if 'TCP' in p: - return str(sorted(['TCP', p[IP].src, p[TCP].sport, p[IP].dst, p[TCP].dport], key=str)) - return 'Other' - - def loadSecrets(filename: str) -> dict: secrets = {} with open(filename, 'r') as f: @@ -249,130 +260,167 @@ def getStreamInfo(s: PacketList) -> (str, str, float, bool): raise Exception('Invalid stream type. Must be TCP/TLS or EXPORTED PDU.') -def processPlaintext(stream: PacketList, outfile: str, info): - """Process a plaintext EXPORTED PDU RDP export to a replay.""" - replayer = RDPReplayer(outfile) - (client, server, _, _) = info - for packet in progressbar(stream): - src = ".".join(str(b) for b in packet.load[12:16]) - dst = ".".join(str(b) for b in packet.load[20:24]) - data = packet.load[60:] - - if src not in [client, server] or dst not in [client, server]: - continue - - # FIXME: The absolute time is completely wrong here because replayer multiplies by 1000. - replayer.setTimeStamp(float(packet.time)) - replayer.recv(data, src == client) - - try: - replayer.tcp.recordConnectionClose() - except struct.error: - print("Couldn't close the connection cleanly. " - "Are you sure you got source and destination correct?") - - -def processTLS(stream: Decrypted, outfile: str): - """Process an encrypted TCP stream into a replay file.""" - replayer = RDPReplayer(outfile) - client = None # The RDP client's IP. - - for packet in progressbar(stream): - ip = packet.getlayer(IP) - - if not client: - client = ip.src - continue - - if TLSApplicationData not in packet: - # This is not TLS application data, skip it, as PyRDP's - # network stack cannot parse TLS handshakes. - continue - - ts = float(packet.time) - for payload in packet[TLS].iterpayloads(): - if TLSApplicationData not in payload: - continue # Not application data. - for m in payload.msg: - replayer.setTimeStamp(ts) - replayer.recv(m.data, ip.src == client) - try: - replayer.tcp.recordConnectionClose() - except struct.error: - print("Couldn't close the connection cleanly. " - "Are you sure you got source and destination correct?") - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument('input', help='Path to a .pcap, .pcapng, or .pyrdp file') - parser.add_argument('-l', '--list', help='Print the list of sessions in the capture without processing anything', action='store_true') - parser.add_argument('-s', '--secrets', help='Path to the file containing the SSL secrets to decrypt Transport Layer Security.') - parser.add_argument('-f', '--format', help='Format of the output', choices=['replay', 'mp4'], default='replay') - parser.add_argument('--src', help='If specified, limits the converted streams to connections initiated from this address', action='append', default=[]) - parser.add_argument('--dst', help='If specified, limits the converted streams to connections destined to this address', action='append', default=[]) - parser.add_argument('-o', '--output', help='Path to write the converted files to. If a file name is specified, it will be used as a prefix.') - args = parser.parse_args() +class Converter(): + def __init__(self, args): + self.args = args - logging.basicConfig(level=logging.CRITICAL) - logging.getLogger("scapy").setLevel(logging.ERROR) + self.prefix = '' + self.ext = 'pyrdp' + self.secrets = loadSecrets(args.secrets) if args.secrets else {} - # -- PCAPS ------------------------------------------------ - secrets = loadSecrets(args.secrets) if args.secrets else {} - - print('[*] Analyzing network trace...') - pcap = sniff(offline=args.input) - sessions = pcap.sessions(tcp_both) - streams = [] - for stream in sessions.values(): - (src, dst, ts, plaintext) = info = getStreamInfo(stream) - name = f'{src} -> {dst}' - print(f" - {src} -> {dst}:", end ='', flush=True) - - if plaintext: - print(' plaintext') - streams.append((info, stream)) - continue - - rnd = findClientRandom(stream) - if rnd not in secrets and rnd != '': - print(' unknown master secret') - else: - print(' master secret available (!)') - streams.append((info, decrypted(stream, secrets[rnd]['master']))) + if args.output: + outdir = Path(args.output) + if outdir.is_dir(): + self.prefix = str(outdir.absolute()) + '/' + else: + self.prefix = str(outdir.parent.absolute() / outdir.stem) + '-' + + def processPlaintext(self, stream: PacketList, outfile: str, info): + """Process a plaintext EXPORTED PDU RDP export to a replay.""" + replayer = RDPReplayer(outfile) + (client, server, _, _) = info + for packet in progressbar.progressbar(stream): + src = ".".join(str(b) for b in packet.load[12:16]) + dst = ".".join(str(b) for b in packet.load[20:24]) + data = packet.load[60:] + + if src not in [client, server] or dst not in [client, server]: + continue - if args.list: - return + # FIXME: The absolute time is completely wrong here because replayer multiplies by 1000. + replayer.setTimeStamp(float(packet.time)) + replayer.recv(data, src == client) - prefix = '' - if args.output: - outdir = Path(args.output) - if outdir.is_dir(): - prefix = str(outdir.absolute()) + '/' - else: - prefix = str(outdir.parent.absolute() / outdir.stem) + '-' + try: + replayer.tcp.recordConnectionClose() + except struct.error: + print("Couldn't close the connection cleanly. " + "Are you sure you got source and destination correct?") + + + def processTLS(self, stream: Decrypted, outfile: str): + """Process an encrypted TCP stream into a replay file.""" + replayer = RDPReplayer(outfile) + client = None # The RDP client's IP. - for (src, dst, ts, plaintext), s in streams: - if len(args.src) > 0 and src not in args.src: - continue - if len(args.dst) > 0 and dst not in args.dst: - continue + for packet in progressbar.progressbar(stream): + ip = packet.getlayer(IP) + + if not client: + client = ip.src + continue + + if TLSApplicationData not in packet: + # This is not TLS application data, skip it, as PyRDP's + # network stack cannot parse TLS handshakes. + continue + + ts = float(packet.time) + for payload in packet[TLS].iterpayloads(): + if TLSApplicationData not in payload: + continue # Not application data. + for m in payload.msg: + replayer.setTimeStamp(ts) + replayer.recv(m.data, ip.src == client) try: - print(f'[*] Processing {src} -> {dst}') - ts = time.strftime('%Y%M%d%H%m%S', time.gmtime(ts)) - outfile = OUTFILE_FORMAT.format(**{'prefix': prefix, 'timestamp': ts, 'src': src, 'dst': dst, 'ext': 'pyrdp'}) + replayer.tcp.recordConnectionClose() + except struct.error: + print("Couldn't close the connection cleanly. " + "Are you sure you got source and destination correct?") + + + def processPcap(self, infile: Path): + print(f"[*] Analyzing PCAP '{infile}' ...") + pcap = sniff(offline=str(infile)) + + args = self.args + + sessions = pcap.sessions(tcp_both) + streams = [] + for stream in sessions.values(): + (src, dst, ts, plaintext) = info = getStreamInfo(stream) + name = f'{src} -> {dst}' + print(f" - {src} -> {dst}:", end ='', flush=True) if plaintext: - processPlaintext(s, outfile, info) + print(' plaintext') + streams.append((info, stream)) + continue + + rnd = findClientRandom(stream) + if rnd not in self.secrets and rnd != '': + print(' unknown master secret') else: - processTLS(s, outfile) + print(' master secret available (!)') + streams.append((info, decrypted(stream, self.secrets[rnd]['master']))) - print(f"\n[+] Successfully wrote '{outfile}'") - except Exception as e: - print('\n[-] Failed to extract stream. Verify that all packets are in the trace and that the master secret is the right one.') - raise e - # -- /PCAPS ----------------------------------------------- + if args.list: + return # List only. + + for (src, dst, ts, plaintext), s in streams: + if len(args.src) > 0 and src not in args.src: + continue + if len(args.dst) > 0 and dst not in args.dst: + continue + try: + print(f'[*] Processing {src} -> {dst}') + ts = time.strftime('%Y%M%d%H%m%S', time.gmtime(ts)) + outfile = OUTFILE_FORMAT.format(**{'prefix': self.prefix, + 'timestamp': ts, + 'src': src, 'dst': dst, + 'ext': 'pyrdp'}) + + if plaintext: + sefl.processPlaintext(s, outfile, info) + else: + self.processTLS(s, outfile) + + print(f"\n[+] Successfully wrote '{outfile}'") + except Exception as e: + print(f'\n[-] Failed: {e}') + + def processReplay(self, infile: Path): + + widgets = [ + progressbar.FormatLabel('Encoding MP4 '), + progressbar.BouncingBar(), + progressbar.FormatLabel(' Elapsed: %(elapsed)s'), + ] + with progressbar.ProgressBar(widgets=widgets) as progress: + print(f"[*] Converting '{infile}' to MP4.") + outfile = self.prefix + infile.stem + '.mp4' + sink = Mp4EventHandler(outfile, progress=lambda: progress.update(0)) + fd = open(infile, "rb") + replay = Replay(fd, handler=sink) + print(f"\n[+] Succesfully wrote '{outfile}'") + sink.cleanup() + fd.close() + + def run(self): + args = self.args + infile = Path(args.input) + + if infile.suffix in ['.pcap', '.pcapng', '.cap']: + self.processPcap(infile) + elif infile.suffix in ['.pyrdp']: + self.processReplay(infile) + else: + print('Unknown file extension. (Supported: .cap, .pcap, .pcapng, .pyrdp)') if __name__ == "__main__": - main() + parser = argparse.ArgumentParser() + parser.add_argument('input', help='Path to a .pcap, .pcapng, or .pyrdp file') + parser.add_argument('-l', '--list', help='Print the list of sessions in the capture without processing anything', action='store_true') + parser.add_argument('-s', '--secrets', help='Path to the file containing the SSL secrets to decrypt Transport Layer Security.') + parser.add_argument('-f', '--format', help='Format of the output', choices=['replay', 'mp4'], default='replay') + parser.add_argument('--src', help='If specified, limits the converted streams to connections initiated from this address', action='append', default=[]) + parser.add_argument('--dst', help='If specified, limits the converted streams to connections destined to this address', action='append', default=[]) + parser.add_argument('-o', '--output', help='Path to write the converted files to. If a file name is specified, it will be used as a prefix.') + args = parser.parse_args() + + logging.basicConfig(level=logging.CRITICAL) + logging.getLogger("scapy").setLevel(logging.ERROR) + + c = Converter(args) + c.run() diff --git a/bin/pyrdp-replay.py b/bin/pyrdp-replay.py deleted file mode 100755 index 827d0f6b5..000000000 --- a/bin/pyrdp-replay.py +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/python3 - -# -# This file is part of the PyRDP project. -# Copyright (C) 2018, 2020 GoSecure Inc. -# Licensed under the GPLv3 or later. -# - -import argparse -from pathlib import Path -import struct - -from progressbar import progressbar -from scapy.all import * - -from pyrdp.logging import LOGGER_NAMES, SessionLogger -from pyrdp.mitm import MITMConfig, RDPMITM -from pyrdp.mitm.MITMRecorder import MITMRecorder -from pyrdp.mitm.state import RDPMITMState -from pyrdp.recording import FileLayer - - -def bytesToIP(data: bytes): - return ".".join(str(b) for b in data) - - -def parseExportedPdu(packet: packet.Raw): - source = packet.load[12: 16] - source = bytesToIP(source) - - destination = packet.load[20: 24] - destination = bytesToIP(destination) - - data = packet.load[60:] - return source, destination, data - - -class CustomMITMRecorder(MITMRecorder): - currentTimeStamp: int = None - - def getCurrentTimeStamp(self) -> int: - return self.currentTimeStamp - - def setTimeStamp(self, timeStamp: int): - self.currentTimeStamp = timeStamp - - -class RDPReplayerConfig(MITMConfig): - @property - def replayDir(self) -> Path: - return self.outDir - - @property - def fileDir(self) -> Path: - return self.outDir - - -class RDPReplayer(RDPMITM): - def __init__(self, output_path: str): - def sendBytesStub(_: bytes): - pass - - output_path = Path(output_path) - output_directory = output_path.absolute().parent - - logger = logging.getLogger(LOGGER_NAMES.MITM_CONNECTIONS) - log = SessionLogger(logger, "replay") - - config = RDPReplayerConfig() - config.outDir = output_directory - # We'll set up the recorder ourselves - config.recordReplays = False - - replay_transport = FileLayer(output_path) - state = RDPMITMState() - super().__init__(log, log, config, state, CustomMITMRecorder([replay_transport], state)) - - self.client.tcp.sendBytes = sendBytesStub - self.server.tcp.sendBytes = sendBytesStub - self.state.useTLS = True - - def start(self): - pass - - def recv(self, data: bytes, from_client: bool): - if from_client: - self.client.tcp.dataReceived(data) - else: - self.server.tcp.dataReceived(data) - - def setTimeStamp(self, timeStamp: float): - self.recorder.setTimeStamp(int(timeStamp * 1000)) - - def connectToServer(self): - pass - - def startTLS(self): - pass - - def sendPayload(self): - pass - - -def main(): - arg_parser = argparse.ArgumentParser() - arg_parser.add_argument("input", help="Path to PCAP file with exported PDUs. " - "Using Wireshark: File -> Export PDUs to File " - "then pick OSI Layer 7 and click Ok and " - "save the result as a pcap file.") - arg_parser.add_argument("client", help="Client IP address") - arg_parser.add_argument("server", help="Server IP address (usually it's the MITM IP address)") - arg_parser.add_argument("output", help="Output file that will be playable in pyrdp-player.py") - arguments = arg_parser.parse_args(sys.argv[1 :]) - - logging.basicConfig(level=logging.CRITICAL) - logging.getLogger("scapy").setLevel(logging.ERROR) - client_ip = arguments.client - server_ip = arguments.server - - input_path = arguments.input - output_path = arguments.output - packets = rdpcap(input_path) - - replayer = RDPReplayer(output_path) - - for packet in progressbar(packets): - # The packets start with a Wireshark exported PDU structure - source, destination, data = parseExportedPdu(packet) - - if source not in [client_ip, server_ip] or destination not in [client_ip, server_ip]: - continue - - try: - replayer.setTimeStamp(float(packet.time)) - replayer.recv(data, source == client_ip) - except NotImplementedError as e: - raise e - - try: - replayer.tcp.recordConnectionClose() - except struct.error as e: - print("Couldn't close the connection cleanly. " - "Are you sure you got source and destination correct?") - - -if __name__ == "__main__": - main() diff --git a/pyrdp/player/Mp4EventHandler.py b/pyrdp/player/Mp4EventHandler.py index 575ac8ffc..a51b0b59e 100644 --- a/pyrdp/player/Mp4EventHandler.py +++ b/pyrdp/player/Mp4EventHandler.py @@ -33,14 +33,21 @@ def resize(self, w: int, h: int): class Mp4EventHandler(RenderingEventHandler): - def __init__(self, filename: str, fps=30): - """Construct an event handler that outputs to an Mp4 file.""" + def __init__(self, filename: str, fps=30, progress=None): + """ + Construct an event handler that outputs to an Mp4 file. + + :param filename: The output file to write to. + :param fps: The frame rate (30 recommended). + :param progress: An optional callback (sig: `() -> ()`) whenever a frame is muxed. + """ self.sink = Mp4Sink() self.filename = filename self.mp4 = f = av.open(filename, 'w') self.stream = f.add_stream('h264', rate=fps) self.stream.pix_fmt = 'yuv420p' + self.progress = progress self.scale = False self.mouse = (0, 0) self.fps = fps @@ -79,6 +86,8 @@ def cleanup(self): self.log.info('Flushing to disk: %s', self.filename) for pkt in self.stream.encode(): + if self.progress: + self.progress() self.mp4.mux(pkt) self.log.info('Export completed.') @@ -128,4 +137,6 @@ def _writeFrame(self, surface: QImage): # Output frame. frame = av.VideoFrame.from_image(ImageQt.fromqimage(surface)) for packet in self.stream.encode(frame): + if self.progress: + self.progress() self.mp4.mux(packet) diff --git a/setup.py b/setup.py index 3bd579c63..47cb689f7 100755 --- a/setup.py +++ b/setup.py @@ -29,7 +29,6 @@ 'bin/pyrdp-mitm.py', 'bin/pyrdp-player.py', 'bin/pyrdp-convert.py', - 'bin/pyrdp-replay.py' ], install_requires=[ 'appdirs>=1,<2', From 41b3329b850b2a89e03eb6a900d12ac9d50dea01 Mon Sep 17 00:00:00 2001 From: Alexandre Beaulieu Date: Thu, 2 Apr 2020 13:02:27 -0400 Subject: [PATCH 16/20] feat: Add support for direct PCAP to MP4 conversion. --- bin/pyrdp-convert.py | 45 +++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/bin/pyrdp-convert.py b/bin/pyrdp-convert.py index 769b67705..71b243959 100644 --- a/bin/pyrdp-convert.py +++ b/bin/pyrdp-convert.py @@ -14,6 +14,7 @@ from pyrdp.player.BaseEventHandler import BaseEventHandler from pyrdp.player.Mp4EventHandler import Mp4EventHandler from pyrdp.player.Replay import Replay +from pyrdp.layer import PlayerLayer, LayerChainItem import argparse from binascii import unhexlify, hexlify @@ -31,20 +32,18 @@ TLS_HDR_LEN = 24 # Hopefully this doesn't change between TLS versions. OUTFILE_FORMAT = '{prefix}{timestamp}_{src}-{dst}.{ext}' +class Mp4Layer(LayerChainItem): + def __init__(self, sink: Mp4EventHandler): + self.sink = sink + self.player = PlayerLayer() + self.player.addObserver(sink) -class CustomMITMRecorder(MITMRecorder): - currentTimeStamp: int = None - sink: BaseEventHandler = None + def sendBytes(self, data: bytes): + self.player.recv(data) - def __init__(self, transports, state: RDPMITMState, sink: BaseEventHandler = None): - if sink: - self.sink = sink - super().__init__(transports, state) - def record(self, pdu, messageType, forceRecording: bool = False): - if self.sink and pdu: - self.sink.onPDUReceived(pdu) - super().record(pdu, messageType, forceRecording) +class CustomMITMRecorder(MITMRecorder): + currentTimeStamp: int = None def getCurrentTimeStamp(self) -> int: return self.currentTimeStamp @@ -64,7 +63,7 @@ def fileDir(self) -> Path: class RDPReplayer(RDPMITM): - def __init__(self, output_path: str): + def __init__(self, output_path: str, mp4: bool = False): def sendBytesStub(_: bytes): pass @@ -79,9 +78,15 @@ def sendBytesStub(_: bytes): # We'll set up the recorder ourselves config.recordReplays = False - replay_transport = FileLayer(output_path) + transport = FileLayer(output_path) state = RDPMITMState(config) - super().__init__(log, log, config, state, CustomMITMRecorder([replay_transport], state)) + + sink = None + if mp4: + sink = Mp4EventHandler(output_path) + transport = Mp4Layer(sink) + + super().__init__(log, log, config, state, CustomMITMRecorder([transport], state)) self.client.tcp.sendBytes = sendBytesStub self.server.tcp.sendBytes = sendBytesStub @@ -116,6 +121,7 @@ def tcp_both(p) -> str: return str(sorted(['TCP', p[IP].src, p[TCP].sport, p[IP].dst, p[TCP].dport], key=str)) return 'Other' + def findClientRandom(stream: PacketList, limit: int = 10) -> str: """Find the client random offset and value of a stream.""" for n, p in enumerate(stream): @@ -265,7 +271,8 @@ def __init__(self, args): self.args = args self.prefix = '' - self.ext = 'pyrdp' + self.ext = 'mp4' if args.format == 'mp4' else 'pyrdp' + self.secrets = loadSecrets(args.secrets) if args.secrets else {} if args.output: @@ -277,7 +284,8 @@ def __init__(self, args): def processPlaintext(self, stream: PacketList, outfile: str, info): """Process a plaintext EXPORTED PDU RDP export to a replay.""" - replayer = RDPReplayer(outfile) + + replayer = RDPReplayer(outfile, mp4=self.args.format == 'mp4') (client, server, _, _) = info for packet in progressbar.progressbar(stream): src = ".".join(str(b) for b in packet.load[12:16]) @@ -297,10 +305,10 @@ def processPlaintext(self, stream: PacketList, outfile: str, info): print("Couldn't close the connection cleanly. " "Are you sure you got source and destination correct?") - def processTLS(self, stream: Decrypted, outfile: str): """Process an encrypted TCP stream into a replay file.""" - replayer = RDPReplayer(outfile) + + replayer = RDPReplayer(outfile, mp4=self.args.format == 'mp4') client = None # The RDP client's IP. for packet in progressbar.progressbar(stream): @@ -328,7 +336,6 @@ def processTLS(self, stream: Decrypted, outfile: str): print("Couldn't close the connection cleanly. " "Are you sure you got source and destination correct?") - def processPcap(self, infile: Path): print(f"[*] Analyzing PCAP '{infile}' ...") pcap = sniff(offline=str(infile)) From 24f68ee2d1b0590b48af084104f9be5a49a6baea Mon Sep 17 00:00:00 2001 From: Alexandre Beaulieu Date: Mon, 6 Apr 2020 12:41:15 -0400 Subject: [PATCH 17/20] doc: Added documentation for pyrdp-convert --- README.md | 45 ++++++++++++++++++++ docs/screens/wireshark-export-specified.png | Bin 0 -> 204770 bytes docs/screens/wireshark-export.png | Bin 0 -> 89405 bytes docs/screens/wireshark-tls.png | Bin 0 -> 137698 bytes 4 files changed, 45 insertions(+) create mode 100644 docs/screens/wireshark-export-specified.png create mode 100644 docs/screens/wireshark-export.png create mode 100644 docs/screens/wireshark-tls.png diff --git a/README.md b/README.md index 1aabfe40d..f694b88eb 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,7 @@ research use cases in mind. + [Cloning a certificate](#cloning-a-certificate) + [Using a custom private key](#using-a-custom-private-key) + [Other cloner arguments](#other-cloner-arguments) + * [Using PyRDP Convert](#using-pyrdp-convert) * [Configuring PyRDP](#configuring-pyrdp) * [Using PyRDP as a Library](#using-pyrdp-as-a-library) * [Using PyRDP with twistd](#using-pyrdp-with-twistd) @@ -435,6 +436,50 @@ pyrdp-clonecert.py 192.168.1.10 cert.pem -i input_key.pem #### Other cloner arguments Run `pyrdp-clonecert.py --help` for a full list of arguments. +### Using PyRDP Convert + +`pyrdp-convert` is a helper script that performs several useful conversions: + +- Network Capture (PCAP) to PyRDP replay file +- Network Capture to MP4 video file +- Replay file to MP4 video file + + +The script supports both encrypted (TLS) network captures (by providing `--secrets ssl.log`) and decrypted PDU exports. + +``` +# Export the session coming client 10.2.0.198 to a .pyrdp file. +pyrdp-convert.py --src 10.2.0.198 --secrets ssl.log -o path/to/output capture.pcapng + +# Or as an MP4 video +pyrdp-convert.py --src 10.2.0.198 --secrets ssl.log -o path/to/output -f mp4 capture.pcapng + +# List the sessions in a network trace, along with the decryptable ones. +pyrdp-convert.py --list capture.pcapng +``` +Note that MP4 conversion requires libavcodec and ffmpeg, so this may require extra steps on Windows. + +Manually decrypted network traces can be exported from Wireshark by selecting `File > Export PDUs` and selecting `OSI +Layer 7`. When using this method, it is also recommended to filter the exported stream to only contain the TCP stream of +the RDP session which must be converted. + +First, make sure you configured wireshark to load TLS secrets: + +![Configure TLS secrets log](docs/screens/wireshark-tls.png) + +Next, export OSI Layer 7 PDUs: + +![Export OSI Layer 7](docs/screens/wireshark-export.png) + +And lastly, filter down the trace to contain only the conversation of interest (Optional but recommended) by applying a +display filter and clicking `File > Export Specified Packets...` + +![Filtering the exported trace](docs/screens/wireshark-export-specified.png) + + +Now this trace can be used directly in `pyrdp-convert`. + + ### Configuring PyRDP Most of the PyRDP configurations are done through command line switches, but it is also possible to use a diff --git a/docs/screens/wireshark-export-specified.png b/docs/screens/wireshark-export-specified.png new file mode 100644 index 0000000000000000000000000000000000000000..67ce008ff7e8a362538bc3a11a670d2f9933bf1b GIT binary patch literal 204770 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
  • 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 literal 0 HcmV?d00001 diff --git a/docs/screens/wireshark-export.png b/docs/screens/wireshark-export.png new file mode 100644 index 0000000000000000000000000000000000000000..e842076a10079891ef0cfae961ff32902a492416 GIT binary patch literal 89405 zcmZ6z2RxSj`#ye&P?@E&vO{)u_DTo|$;wQ2_Q)O~gzS)=O}3DI+p_mw8QGF-{-@99 z`+fcXzn|Chyq?!{yYK71-tX&tpXYHN$8ic&Qhb7Yo%A|_Ah@zJQpyN|eicE`^02SK zD-@ymaqypO)-oD)2!hvq`7c^DGaea&P$9BX;;PPHHWHn*iJqJ^7+W2XzT}_i55^5= zO!J``V>bJMt3-6$^&KnSar~I;$7UiGi-*mOL3)yg+v-Y6VvRcD1fTFmw<}K1Kl7c? za_6M!*HMakybXwZmlWsj_-{OiIIL~anx7o+N!DOLH!A@)g5aP&NYNl($~i;p`v%48 zj6@N1rX0jF5x@41i2WN6g($*$SD2&aa8ShlsivgM{)_xSBk5#Ql^BVxqal8NesKE% zl7nSZG>shc>HU4&A^OA#UwT*U_{l@0X~SjSOX%C!6l)eN?;T-?V`E&2&%ANtMwRwA zF{%cRk94w$idcK2CfqKyN&3VH65BPrzOVG6SY4jry z9!`jer7FQ9Q_Sc*u$%V=}e_e!Y*vav-zJ6^U8&jvdY04cBA8^)!waaDrd=JzoW{k=-^=x_#d30*9*#rB!At>U0o7&Is*Rufbhq?29X57j4D80^!N ziD>4KXC$(%()MjsQc`MI+?~VqiC?!D@S#EwZUq%0zr{*1s=nX$ecw26m>C%n1U4Tp zfR+H8n>0i@hv>SWn+W9$cA_FfWQVhmj;!pp&_x{79KYi8DCzWh+bW4vf_OPo(+2@4 z!r+#7@7^g{!tF)NT}7y{ecBd(+Y6Ws6Fnv&BZHj@kw!;2czKtt`THy?wb?$(J|_|< zxEc69(=1adELkDhDx+5(5DM z^_wsTaq{sQ6HBKmi3LKmW}5oz>sdmGK93Tkf+!{S4{R~;Z4?_UlcA%*mdF~+QDstB zCT}a(ENIm8;>E%JOogq!vZI5_B8!P_TWoxCbLI--rCBgyR^GRkavwE`6$v*x!KyIG zfrW#bsdMjAdl0&qk&yvUo9?E#@B4|)*PQB(p9$3J6thq^Q|;~8A_`eW~t*SwWsO*5ZDx9SdplvKSyq3 zTaEszdBY{QyB2q^-?;Hkh$0^&L-`t#!r0l~o?Th_xot5nAz^+0I4zCFw~;DZPM^7r z1E+=%(-*C+3d1{ZnABe%Zm#7Mf9MTA3IDXzjK)l2-g7$Hrjmv%3Xv>WHL*V$qIUza zLPK%%kydePGjU`_i)rL@Bf`DpPN&Uk2CP?wGz&+ArKEek}-ysyH1>MrRfE zr~(eg2dxb?iqF^?f8J%f|23({HIjV}o9B9gT266M5epNGGMTCn#WR}lPjuHNbq+0* ziRTc_=gLfXWHH?Ib;QxSsqb^r4nCt})%^Y`E>3++{R5r!yLVQlCAQ?`qeY$QcO!WRU{-NaJ7jEO{VDOl@;@HO}iU6(2|p5W1l>a%E@_<+{@0wbOi@} zvbw2B0?sQN9~U3js9Cvb;Q&0WkdP2Rzm~}j@(j)U;WEG8{F$oJ9uTv=s;y#o3ojsD zE$`2t>l~P+Wo0Z(Or71H=BB39yfKWyQAbBd1&LZDfse0Vy;@aOrTxWNpBjreIwAHc zTB|xe4=?Y?@BPjJgPh`r0q8*vxpz(3e^tI)F0Yw=XyqSS}|Hx)$1oRmwyWD7~4Nsh!c|Xc%aeyUf`aURHRkEq|PaGL&-$f2$kcMf4zh%*OXw z-VBsdVveBG=aDe*LmkY?yy&Z=qc_!lZv9g0N)ZldL^{g(xwH-%sx~pCL>77 zJ0+s4erDXH>gxXb*gjr558MPxTn4yt?@1l9y?-N1fZ=+OD%?QR@I_x@m8Riy-;l-= zG-mUV67Ey_|AK4voE>^^UizDXbFU03Y1EVZK8-!O8GondNl~;f zC2Jq2#z80#SvJ0XRm$zgi_{CO$0#|y8#k^tx?*WDjnO=amNP+$g63Y5s9y8HE5?03 zUP0(_F0RpM0C$p>Gi)}-f}+RskW?nhP-W70#Wq)FB)W-#W_8~p)Lx)m8j1}z+cyRt zB3VO>6tqAtjC`GnvzIxleOUqcc=>$UWPe%ajc?mOJaQBHD~Fqb>ElbLC6`gaiX+y= zvs~p;^;skSj(ISYDlw{0<1%pCL({1_Bp7dfa`SyaAO1-~<%VHupG^9TSSGm}oO@RV zlKkSPQU=h4m58#3HF?roZ3p)%<&vb+JGy#DP4{ihtBM10xEMli(|mdswai?m&6AUY zD^QTc!RU}dmuWod3H1*B>Uz+;9)B#r1@6bpf8{jAmaWWzrDEERH_z0+ltA z>+G0*W!D~)$S6NSM}}Njsi`<5vNLd>C4cR|&X&`rJKc+cSo3>j%96J^2naXc=hl{- zpQOR-AtVX37vM2Xk=u)Aik742x)Vru|9%FyLQe2d?oFNyY6rPQvGy#P_@@LJs@J+X zzQ(8#Nv)<$hMPzXot{P5e>w z#5hEfoVji<0@I|l(pnw}32&DN1_oC7y|Z~62q)=|8L@CCi}Kw&L;pk6@Tm~oS%>~vE z8$Zc2l*~VE{}6R7ucHoS&VIjr3V|_qVnSdknX?w%@sY9UCJJje1O1+K~-6p_#d;kGe4h&nK@5@&fdX6K|#UN z+MV=EPom&#m0gy9c*3dUP>g2ux75Q`vupi0Ia8ED@vAX4MS>@VzU5z4pL)1HDrjtB z*C=WJiZjetk|^ku#A`{4%Qhc-Yt91Y8ra)8s7QzjejQ3|xPftgOXM{}B zIUmnX4)`kbGie??=xA-l{1$|Txb3#wU1D45O~ywK*YXMhD8$QmF&(D7?Tfhobopl- zO6Lv{(dW;fUmF?KdMXfn@K5VJPjy()b)3A3e=*&wW`grK)zykj(zl_ZVWVF5*|S3W zH|rw>?(XjEwB}QlHvRqm8x(YiS9Ug|r>7@d>?Ayj(0hU-411&{PTMnaT*k*IC$rTK z>+`69_0htxkdW@KF7t+;zCJ!TZ(aT{D1IR(AsMH7^imRCzzz$Koa5occlZK)L@u== z92`Yfvvv5CA~miDTMI40^Zz0oQkL(iUtpywWBceOOI2x8kdR#S3?t#nY&7DzeNWKw zmo-0ptzWE-jg6zDqY-;;Z7mw&?d@$_Rb$a)`vZ;VTK7CAHGzUm^f`fSzsn!bi_e~+ zvC&2{f_o_Htq+P zOt}1+jAVFb#%A9BiJB>T?RbBEM>$pLi+}?YBO~^yUD-lks-%vN4m@~T>5no`pQ3yI zP}nJa^}{idL;uR@=JImPmoM6OSM3F+b6@0*e0wEmIl=Af>I(2=X=%TW(oGFf5y>eZ{uDAN*^%o;4vsded&=TXU&ht}dDFYmv-y_5L>N(AXm5+)O{&yI|Y zEG^wzN%q7$m~uV(laZdjn5mF}i9_56(Y87H9UXxSlpC}J!87?$RdsZDh#>j-`D49x zx0%)QHA?*zP8P#NU0hw^dXst_`C8wFVg(jp4k} zV#79A^yEJ)_-3_ybu^^Ct1Cgk!7PE-Qow$7XRlXuRBh$w&!0X%KI5gvPcxL`I;2a(vj*X84DBBz>M$cq5Zq2`%JG_>ol2u_goclQV4xB&$Ou={AdpbKw zMLlW~611eGq{dSNzFW;ICJGG0XW?CN%X6)qoW-iIYwPE7e~FGW-rM9$zphJ zQ->}dj_P{8>P{>uyK=BG&Sm?n-E=T>|My_l%R(K#w^MqHkU`qIy1E)0^+)nGEZTl9 zb;Y{=+xR^<$6?Z!5*0;6yt=k_47-U(%+Y{Cp-V%0fQRsgmgvqMO%08u<>iqYFaA)c z^%2}Pbf+#{Y-~ODWD)o4XVi{TrmY`I;QlE@+?=x%6Dfq8cNER5Aih6QOMdzCrKYx) zUAGPg9o5vNt*uRd@1C%b(A(KMT!i0YEh;N3D?L3uIJj%O{zAv@jCqF2ISfJS&yVwd z{BX@vE0Bgu->Wu}mmrhho;7U`i)$=>!hv0dXyuFmt_ zy<2-PHrZq3WOVYS?j66QM~2&qf8TO)a%MhDK0iB{6@~p98Y)Xe5fTzMuI#BOU;a!~ zSZeKkIdVI152wW^=SSEL4GiG6JKdw&T3gw4>)hHx@4*7dg`BNrWUx^jA|fKYySsF< z%S%f+!)x!~WBBWHa&ZL*1x-y&nSB#8Gc$YsyuUp>+N!I}cB%94-@gz5H}0~1d1Qwv zz*yc{Q&eOOWYeZI8>2gRaM@(ZE{PRtLdZHf~)f3i*8O6z&Z##-Os)_R<|z=4L; zJDUC^EGjChq_8+BDkjE^JHE2A60$q&!~+qLbI3Ul9zdgNdv?5EK0tnxgya!a8$w#? z9p{?CtY@Y3aQdjJsUZy1>pjkD-tFn>LGZF^SAI%L5-}gif1r{XHMuIp$jB%lKzikqf)1(%ozfisv?s$jC4(m@VCaBbY ztFHbTvTdFF2|NlPU*GZ1I4BG(tfv_R&CSj5&GKLP36Y{V-K4s@vk=O{9;eQoQ4h+Q z6d%vLGtSFx7#kadJJhYRT{_vWPv+2<0AdA4)P7Y-US3{Vc>sb05;G3c{_`ge9-dBx z#W)1&6{v()u8i@SNJuon39*`~Ir_8Ig$ls8tD5Rhe^To74?;oMQ&#a#4OMBg7)mLM zr<)8l%_~vT=m=84o1QP@#fDGF+l+gY5)%{8)`pn{1qD@92BE&Sw6s80Y3uLb-Cb;h zh}wY-IcO@p27M>+TS-o62sRGR`{~=(O^2zH0Ws{lY>^!n78Z9{HHmKDevy}U`_3KU zO>W(a4Dz&fble&*Wr*!6FDv`PV?NTIz&9@1sCbo&tMs8^Yr}y`w+5VV1VI(SQ!Lah zmt%{);n!4Hcg#djpQ(0)AZ41H@VEd?UGpJ^+%rzi_3T+MoTMwr@xgX-csSZ@e!6r> zMAs63Xc(oa4pVf@I{oD_mX>aXV}XV|fBqb{M(+njaBwhG%TYLIke1uRC})2-S;6zV z;@vPZ;t24geE3V-Vxq9?NK?~77kj3OF2Zl=i-z zu707Aq|L_1&b|!?o7lhV$B)wZm%rdf!zhF&Ds9rGXy$jFVMPHQy0tF*0ADG>Ml+tq zYTnMG8J-|t_MJ#hEX2;`}c2uf62CL zFjIkxm-mgU8ay)SajUc;vAXO3N=Zq9I@n0Pot>S1S-vWyb|(EZe<$!+L9KLkaiM2m zKt0X2estx^m6Th1aKzUNmY^(dZEeARHQ7vcb>%@=!-4k2ikq(Y)GZtpfhzRKv0X!&Ym3WLtA;fRkieqeSoT^mmadr%4DkdsQRi*foOT658=H%dDByORs zIfwhPy|df^lx(xf4Jv{Vsc5@<71Qnf7i9<{rY!%$CO_jel=r6S%NxAS+RfdJBO`LY z)RO)dV?}7^{tS!1e*NMX5IBD(>Qhu&n)kwgcyWGS-_URmN}j{^j4(BIs)4ZsG|p~r zZsP|wZ{NP{ieYtkbNi-SpA;Rvw75tc+hsLX86FX#Y>KXlo0*v@koc{#lDJw*&~XFk z1xbILezS73^6Ij(p_v(qR(osf_MV<^lFL98-hPz^c^%-!RGm8+#Zj{wdvb5A4BZaj z=}tivf1uQrXJx}C+z|bxZ@PWHQM)P;2{B~*1Goyx{0(^y9f4#MfOjuGA>oGT831~H za_0{~YIE}Pia77g{o9Dkz3PV88gRx@6r3E^AdXKaHQAoGG zS!Ix<%j0n%z~QUt72>}t=d^~9eRn(hlk2txSq<`0L;tOq!uoR;NJ5Yw9`f;BECgR> zNpmflnA|NEvefwNWkrV7;r&pIgVu+js6nML?)jp@Hr3X~083+FSP{KA3e#o_ z`|v?VR@R%Ah^MW)TY)~Z1q6!s?-3+r@d_Cp5ch#n5s-fpy`TW1WFPZn!EuC-LkeJ> z+{Xd(RBrR z`F|VZdmRkPLvr&aQqt1E#yf6Aq-FbJ;j8gvQ40&Z&o}u2_%fTV6Gi~Pr5k*KBmkB1 zU~4*o3Y(psow)Mtv_Q1n{{E;g>Zz8NRfQ&Uq@BmW;QAqp) zLqc$Ia5f;fT0V(VzpT$W4JGEZ0|Nu6r>D6Q21Z6NDrOfFWAL#g?~#+kYjc714Pk{x6+%HnW-jV-!gF|SkN*uQURq1s!u_-HL$Px`ttx{nwpw; zt!6fU|9-dHN1dp60Ezi$lJJk?^QL$`Bcm2a`Q_#1HG2Vb^K~aR3t@!}i@|P9JzOo{ zzklt=Xj^y%v85ta3P&4KT^~gXS%?(hG($BlZ~dlNlSptOHDvI+^+Ea;ISdVhX(h@SlgJb4qvaoukL0%>Ql6+(uM z?HlBj#>U33E@oa{UIvD&il+mIZs*WQsR6ix<_Q)eoudjW$7SeNRGpun16X2#&bX)N z{QP9w{G_UNWpDH{aSrD~(OCKQ3jp9bJj7(r^G8TZSy>reN+MM$Z}=R5mc>oHfKq)F zCTz#fJPM8-Dp29hojZlP^>0?H9asD22Qr=_UVuY#Ge_m&QU4yu0Q7@~K!PpurRAaH z<2wK(bn#_uK6ftqtIc`qCqbKoy$iw58{+I&=+aD7=4kaCa!KzUrm7}`0@4}DcvN2X% zQzHcMnT3U)TrqL9FctS1da%4Gm+EfZO3t-pfKrn!3^0qN4S%r(Xn}Lg_jH zlSV{Dh`1lCrVo66Xs8G+473sgI5FaY^PD!u=I7_pa8c0v1L%i30VyYkeps-;sQClo zcQ`+8ha5tqXUp9Q)_r#rg^7Y&42nN@Edd@kYzsBzCgrd0)--hAIXIXtHy?#k$W7Ya z8O@A^ONtSzqN-brYtF>NV~Ts3nQLll($dnl>rTGq9z|g{yJqT~_Z9q&*ftzg!!vtl zsWVC&Iek*btDj4*l^3zPYO>BrL`1~T&u=kaVg&dcA`@tr+k%mP67zR;-TL!hvOjs! z7JyGVqLx-rP!JXtCXt$5R$2?Z1VDLcle~R>C1C+j3a*kVFfcI0$z!^bO3^%r7OUEE zQ!}7~1v+KO2Y>>1{{97Ix}Wwq7`okufTWQIc&u<$VPWBu{dGR*Z8b{Y4D;??yG3sS z02mMlV4t<2oWUev*OcDx_P+-pD;*ynD}LcGhKy(7R;)e+tN|b2cK|``nq}DlLlG}{ zb5pd*Jpp?JfikZTr3%6ox~-!WabKqBli`=T?_6C`md+w48>MiSVYy8pZ=gDOqhobm zyn&7rK9Og3`VHD=adB}#QhyE(>K!*pH}2=kC@J*;n%DTwNkem`?xr?S60crCrTeHq zHdE_*NUg79EtV=FSIfrJ2y0jdT1vHH_LHw1sF^8F`t^)AlO;3$s6ZNd8?1(w(?GZ|P} z)dLU%Y+PnB4s9$a6O$a>%@^s=gJlE+V97=pu~w-;dkI8LajidaI3NRA|9inxGpPB? z_6WEvXgn4-Hcp{#xE)M85j_TNA5QRhlm4dR;TP%srw8>HM#S`x#o&aoYL@X^&xzer z<57G4t34c!D<$+m@X54(6OW^%yGp)6mg*|{IkM(++uNeA+dl!?fTVRv-Qm*Q_0DFv z@T_w;{IU|%^Znw}yQ4ow5Eyy0d%x2$LvfNsJ?nCAn>uccm#)CSkYLQeo=QqeLS0iU z&>WUIq9wik^5rNz;lms+F*km0d8`Llc2iS_%>V*@mosjs5iy&oc?U!sdYd&NP_n5Y zy5pb_f3%+$G04=>RGv0n808xGbXY1g8#7~YT%1NrgY6AJ(ipk>ycK=%jD1uBLlyQr zTdJO6Gx)e3x(0@ZmpC6lxtEuhH0#{S_jyb#Jgm}Ef6>>SY+qiF29!>U4D$x$X20;? zj+5K>ytw{SC4|y;lbT@I7kZch?rHbU=d=mD^7k??R6~}#BlEia`SkqZ*7O@WKJM{R z`aOLQJaGty_;VuJh>zmWesg=Jl4LfDWIjmDtSD6>ghTJOd8^3=q#cT|Cj=Owi|zL% zfQG(9LrW`}H$31{{>O+@GTbXw9OZCR*m)xpZ1o;_DZv1P$ZK7`%CLvav2<|!wI zMRs`g5c~;%ud?$O+oZbE|5N{5Rwd6D$;rvNfB!x-iMXG$_NE92yS zX65|>c;q3E{t7JWy0%&?FtV|MT>@96ATo^+FF>VRU0tQ)F_j1bsndBMuvT@}^G%oB z_&ot`1_on5VL-wJhlSn6#t5M!^mb;bzc_aVW)x_Sn6i=exf z7LhcBg--$0d60jX6qV`bp#XRDr z^|FxLM~CuZ2>&HQtvmhG1=$JMQ8eT==Qt!7t#Y&56ci#5d2@4mfl`0|{vHHb8#;K= z^FtK$Qpl%-1VPX9)2Fd)*Zi8^?JYx=!A1zk$t?^F{v7Tug4zLGKzq9kF^P9JYaa`M zd~Vl&7Q~#uq=eHx*_!;m4djY8n-ioA=msW021!hu2BP~iVw4z@MBFtWGKWY<#>A+x zSp%AZ!U*}E$bmK8=chuc?`8M?YDc!=J8=6*3+X3YSr3)6P)doGLHCJMW9O z%eve=KR<`x38qX{Mh}T`;2C~|oSDq<2m%3ps6M^ix_NUPMd;zH-D1x zJwMl4>M?0QrJSN78_@4KIIkr!t~7oir0q!-#Xs;60)ETDAT2t2`1`DfpnlVP=9k|P zxJe(;0ZM}HP0cFzbZF-;q2_ZXc~HW7romS zFp?4aLmVF2A+3R9SKB}r)`sBuqV7ryxGPB`{wjaip&yFf@Q#u{!a6Udmi4tHt$5sEb zSQ>l9JMIvz6D8)%n4$ObWJX*EvO7 z31K^v->cdIs-K_rx^!OkJbSV76?iKOZWARvy*UUaFf}o(%hKJ1mIkO62r)Cjt{|Ef zhH>o{2YdO4??@Q4{3KHt8to57Co=#**{MYI-2@et8JIcGWxBp&iN?KsdonPDqT_hZZ@8495&<7o`pA* zTD-qHRGuW!6{7WGC{?-OGui0cgS$hrZ199T=H}*r5ep^dxn51UA&bI6=@Iitsj7IEe`)1F)1 z(s3YZU}{Tjo_u6wm-#F)E=TbyBA+Z^cj5g(Fz~x@brj`%Eqe*hcgEJqVh<|ZP_!m;Z|1{MECAj#-V^^}6*W9gdVb<|%Xhvj0 z?Hl9C%X^-lFRn2!{T^h%r<_ja5cwsgIo8eBk9ciWc%P?B9BfUpM$057l3C#DDFmrW z#+%hx^u-#lJveBHb(qR$=Hwjc?Zp=$$ma?V4;Kd`Py-Q)BiZBlH?%`*%d)CWJ`QRk z*9rSLxCL$^DZ?teR;)}s(TCsfXrf;=j0v7w+)t{0EP993Nwk%O>x~RughB$Z-~0D6 z8OqS*0zXiCwg&r#hl{HqD+}fDsgxAPC4mmI0}B*h#d7n>3f3QrSl%X#nLrkqnN@>I z*w?2-OPdZ&Hk(!j4#Hv78P(7r22~mOd#JyKZ{vRa_yGco5nON9{oo#w0v!yraA&J{ z%paarKCk6h$*GG zc;FS-Cq%>b<+tw<8xZoLUHZ+;bNhE7txJ3sgXxu(q1l-8X@Zn+EJ82`zz@?|Bp?!? z1iG$vF8u+h7IowO%*|$?(9bD%KfLJyDG5{<4Yt1V@go4E8%BT*#_QF}1n}|0Fa`PF-2T?&>D~d<%0;jCbJEMCX)jyp_bbC=O)0&sBHFqqYr?<&8 zN02TbT|D|C^v2j6gpRus4X;-t*lK4qicMm5wl{d2I+AANh76u12_3KhdU)~NJ9>F! zY{-q`nMw!r37l~_=R8zYUi)-Y)6)$CdO|ECoE+?`u2wf%9AMPA#9}Bcd&7C@hiKnvs_iAz$Cg?mHhHyA zh<)sND@`^<^sl`_vEjc%n>~*UcjMqY1^FzqwK8@7zH;v5^pk;8jylsbh1=Q6TVF~% zbLXY8i5@44*p=jE#Y*)|#}}n&S1}^zZbfrl-xz+lxWKP$|F(NgD0-~eRN3CBN-UWE zel0m8R;}*dyPtbj2okFN{lZaLM^*h(!bydH9N)0>xc|>%N3$N@pgb)JXqS~3=Yp_C zBCVaAo+&7>uFHao)fnf7dp|9$bU=wF*QRQXd7Pa15UDf=F{&d_!OHsVT^aFw>mSNdrsGAZy%oq5fUAr z&Z@j&-Ee{KL-60)l7~Ci5S>qfE;v@UFKYH=`81&0YBW7)4s ztAxa|mb#A7*`gs76ch*Bv)jXYcPEXneSe$A7?f$sy8}!KaJ?4lgosxw0pY!SxM!@D zCg_Tp^s*%)G%5NPrm6FU@8y3^A8}^n?i+cWRUd4a^+kTwRttWd(*5ajwN5Ubc;3_m zAMigpZM~M!zxV*odlUyoqr0&LSXq^GJhl>a*mj!MHv^JRtvXW(N1fv*@tFHOo;6ci zCcbLL49#)B2DA+Ao`a&IWBb<}2Ho?+nnTAI{YiIcMUMWoQP-vZxHuK2-7Bw6lOlKRz=R zvX!;9wHF@7-yoR?A(y|avAQ1PUNk9B{}Kiw$WUKPcwiM`z0Q&m*H^g`d%2k8+<%m5 zINK&9*`B=j>IzoI0w*pU9iCj&q32q?sJ8z%R%Nc$az-p1AlRUouGUJyHI2Gm<$vb+ zShbYWP+{U5bQwC+)u1#FP1y|}$Yd-ho#YRD)>b<_ldCo~*7|YF+hu>lj&50LA@S?) zd!AaiMzxF>neK`=^Tf^Ues30(z3O*0UHWjeX4rCPw}iB3(R63uh$mU}*ZTSo=&wL3 zc0c}|)rXa4DgYK?J&q#gVW7V9N7sQJ)cJn!GJ~d*)&HX5u`2gRvww#9+%>MFE>=}X z+gG|NfdGi!>-jC5FZ$lF`7>T#jb*E}^rl^rlk*Bw!M7xxSHiV8{+>S<13yk|Gw#?& z*soDhu8z9QZ@w3NX~6!f#&+>Q6kj#EH>B(Ctj2Y8+2!S>H+3Cf*2t4GWf@0|?>U#% zXn!f*9O-iARc!heXT@o^XN&tfgx)3gYMae$qa;3MU`&^2!dAszz$6;?-bLbTa-8I? z3YBnknM!x_zu66%-OtSY*Sq-1dmxiS$MuurV{$U3_S%b)$U|VipCt;kEbao`2h38} z*8LGTsVJ_GfZcLiyZTB>NPSMJF|ItPfY|Fd`FAx+?e_eyMP2+1ixgZOq~U|HP~K!= z#gzkLS0_QiAI>gA#k;oyo4?-Cnz!rM` z$5X<@*QoCTG;$Ek|K7o8)bARA>zX-cJLQ@C4HwCYSIyAkHX~LCrE{$a%w?D+O zgERz|g3eCOa`|L6R}UCKsI$Q&J^zzPI_c!cm9AbLAI@tHwxr)&CgC> zCJh5JKaEpXjs9@OU*UC_9q3axJN?y>p4Q}}waW+a$v7FWZ5MMaONWY}XfNIAv?4mw zG@eD2SA4KcF)QJbyQ1GvIcj1eGr+0PHz1uJ^I6Z!I*}7MGDOdMeO$PJelzee9eyW3 z?m4Nt-o>kUl$vB~{5DBD`4?2wShiOJ(AP>yHAAV}+uH-y4{8WtGk)muq3fHjb&b_0 zhN+eV%bbMzKf6I9P2vJA*(2B+U{5n9i});TRgdf zeEBH29XvJJvlKZ}FgYYHweNcmi>>~n>yBC~^$Sg3=_e#$l(l~ErcE~|_x}9>LyX}` zMgHWG(bJ}NR}07KUolrvMF8kgw6$G?q@*sumVz1q*@O!Qq3)eVhrN_KYwPOEt0&L) z#P${&!V6TFFfGFMSb+rGaf=}+C|EiKCmZHDfJY#etaTc&Ha1mN1hPi6;LXanO?Q`l zG-N}lvi3!n+A9H9ZvXuCgISSomIq{MTuK7yFY<@b5fjXhn_9uQR7Gg=3ktxUH1*v| zcO>p`>&G@64&abKVM|T_hxyCC#~Ig=-i8lDU~gMyK`tWQ9nYS4t2b7rO3rR>?N;Lo zo|xn10wBh`(J{5OG)5ogt+jRemthso8VHn}W{LQtiFo6h;&0J03|ZD}%-ieR15Z0_=_n9?hDl&hpZDI^Ok*VDU@#G5g+ht(#)vqws{2 zk+v*j_kaEGMxDohlIL=hx9vi%Nt_aV$-a;n?5jQb z;Ev@pB{SUor|^q2`BDSvoob|A+bE zrADaO*_}LJzjqA@t1k$;qZXmN;&kDrf74|Gmb%gBLJZr4lRf zdUb2&sJGU$#!hrguF+;{Fnv-meYosy2s539tKCPf)nFZ?+2DI*C#)y2v{?UMMz?o% z=9ZQHd3Aej*7YS{l>_WQ+r#2&L*?^mn$GDI8*dbIt7)G3@RagI6%`dPWuQNQ zT%1%f(sDX_d-?bZx9vY+W}RD2P4KQJQB0dH_zZnf+)A8%H230J?k-bq3IlR0L4s|e zR=NMsxc7^e>CfCI!X*=J&((uj&r3%ekjUshR z?&$cqy1E(@3yaU62xB3A5qdeq3ruX>whfZDwW$hNFgGVp1hcKLAVoSQ4(X+A#pQr@I1nwU6Z`hv0 zlaqwcpBoeV<3~N)W>}WaRDNuzz3a@*B$Kj zr(kqcdf^ZH;KlE(sXC*Mqm<#<>u9_vcq%Umu7tY_F;ztPz9*M-W`hP|Lm~ zCi0LffcgP82oF7%8UizR^)WC_WI!@F0Li0;_--M1O&l=l<|ZxT$18 zr!CkqND8m8?h}4EkOnhH?zkr-4-XF)mkP_BTNvH~B81pddl;@~$Ixl?fbSgq;d>%i zv9PdQot@wN``0~71<8vXaK!%KzhxyQVBUi1>h?>#+R;DeWYFe4k8Xob&!!-L)aTbyd`nx?KlyzP<6H{|lS@L9Z6<(!@` zj|}zo`-kG;g-m@|FPIB@R~GqaWS%O3=DC0#!0&l3l-z4&#sf`r^}`6%yW?R{&Ur#FVfqT;N*N0 z#`N^rGtd3CXy8$B2P5dlO4N~s%Nm|0+cUL`ts#c^7~r}CSCO5)eN@*H zR3w!gRm2N4Xk5?%z>5T0IV_*~!Gmkq*f41EyDt?5j}Uz0dJ|yA1OB#i$rk($U>N0d zgfaBXrJM$v+Iwb0_JHCB`Uc_!5;_!}7fvV)B)xuJ=CZ#AdPLI>#P#3xQGCQpUmYwn-~jsg z@#DtkCd3*#EhKTO2M>NvTGija?)Tp`X*l@5JA7wBxSbeM1-LM9F(t=)sLM4IK?kx~ zkRoqG0~LIA-z7d14FRQsBUCvD^e4E$PQ+PwQqtT1lKJeHWIow{o-IaNMGd|uxS@Z7 z#|56otlJ(gnaS(dug%O{4tMmSu-Wd8Uz3KvOF$D2uYQh;LqouKpjQbKDpEA>4tJ;n zeE;3Jj1p+2borsG$}1>XT0FdTKY@@_RrPMX0jO7ZFeCMKb#!(Lfbp~CJ>*AF<(}sa z!x4p3=Jew4)vT|~{fBF6=f*kR(B}m=|wlu&Qq(nr`D|=`Nu|Euc(20u9 zLY5yI;-;hfdO72@1HvQR0qQ+i!}I^o_Y^_31$%H`Q9wWzas{P0=&ypj`rVdOBgQ| zD8{V?QacwHSBt?zaRQV7F#-_#QyXJ@oAl^ie9aja|BvRs3QlFne6C|YkOAC2+iy+` zcXoD;jY0ZJKTmC41Ro)ooGr~*&Ez7@Cx2b1iYLq7{O|qsPl@m45JCcre|AREz_CG_ zJ3~KO(Q#XhTkeGt5(ahC zL0x=pCab9#ugYY^4rlaDcl?V<`FK{qbD;3`u1t=N!AJoh#8D1?7<^b*TqKjjRZ4X# zQWg>x28+y~l7vQQ%++{<#M@(F!v~*~t*z~HPvT^QCQUpp`Q@Lv z4sG*8oUWfg^Pl-!;}Zj44*=91tT*8J!A)Vj@|*`Gc<(dG-egg*)lSvCD~*kP2{!@F z-4)RU$VbcIn11_q3(P>^lWb`4@askMa3;h^MGYknEejDRHKArODn&bxq_7GPEdT!J%(k_Yo?s!U*bo6J-o^VdfZ z*jk{7>R>NHqyhCP3p55H_v5JE6{ygO`k%pA*aMsh6Vn>dMzDf>ZajrS(D%dTGQgn& zARp{!I4D)p$edzP)o_^GgoxQ&8_t8k~odzV3-Dq^gO|4h2Ie?3e_>!%_ed4?v!U z#RjAi4SWjkYzjQYEAw~jTWjd3mR45y{sRgZ78Y!wAnAG>fuW^yV&WK*I!7o-D^S0y zVWALx;0TAmw?gc3e)Bk1@jyuE z%kB91_z8Flz|X(|gSH0%k~V$hrLPk#+0bslANPRLS_I;EX{lDV{e!=s^u9o@14{*j z72we3*47I1QAPSlR-KwkwZ||O_y6D)Oy5*kr0D4m`sJdaDivr~l^96ips;;7xVYBA z@CM74jezk1L1Zq$sxA&DazCc4GCjnB5$GZ&FoV9ld-ra*3=t{mF{nteOc6jlJVvz{e` zk%dY&0xp{@w+PJ(fSJpMKIG(Fu;zz%gEf{&;RAI@lA*-fA$PUflX7Lv(GIKu89p zBs@G}I&vrLcC>)2!c+Hr%q56qC8nm`r|U&AW6qkkBE)>i_gqi@xR|+2RB%mB55F27 zYoE7HrR}#!{VrS84BV~YMT8;1 z9GVH37KN#Xaf=EV%Y>5*CR`YffUkGmnG^r246Ft*4rIY^nVFax#xNUYrT+L64D{vEe(P+N=bKjN;jwo2#82`iFBiM3eq6m0@Bjb4d1w*_lw*9SBI(+d_B7Ofu61;w|v7>xB0>m9-9;C}MtQ#HBM3j+i4`(3TCY7u%zVr_jhFKeZVzjsFiJIStxpi2+)C)$p!n}FodWa99nS2uw+EuQ_gpR zWXY71pPKr1MCU*fHzZgCt*y7F?(aFig<&w_8PVW+251n3MkBDLKhORbJZqsqR;3Hi z4(=KtK|b(og~)EYZvhL^SJ~irv$T0*V}mmA@Z7aza(9ngrnc1c2o5E+1I z6c&bkAX{FM0TF%%#M$>X)YYL*|AnwzvxvE(l@Fp{$cVr?=&6=j{%U)5TMR2@Oj#KgtR8&6|wWb{&7JM>%Y_<4T2>D(aE_wrK7J84LL_uD@|J{8Y2o>N!!6ajT zc<*8H4@ew9=nEO$nAn66Tny|I1xsD{%0_RxO)L5a-xt}vRMNf|-RfQA8v{>ffr6ybm1Rg#5r&x=Wae<;iP!Ng>$3E9T0upTFumME|E<@Rss+S*tP@wcO zE`sU}U`5zb;F|8=ew&a$@F>5M1U%2YBb4YBE%Z$IKN=Gv}xnT}*|v7Nz5z2bQqXZRmfJBpQ9rF{4!sag{AnP+M-?_@{7WP zf=^;l+kvZX`WNBAI!K4J=2QzZYY5(D63x5|tZi&`)MQ|$X=#PLGqVeOONq%TeoL}0 z3KB6z82i9vgLp_lKU~hq{{F^9X?l6NBaB8bue#RUPra}}k_NZ&^YKB5Zwn-U z3Cg{tIv-sEv;J&$=J_mOAHpI6SqFr-UdLOYDUdUBm3S6;*B{g{u$}>;b?iG)^#QK) z?(N&Z_f7$$pa?hztP5!U5EVeqI|mtSL20RmCB3AgA{)dhQ`Zz@AIOBg;1gh;n|z&u z0D3KcX3eexgg|&~`j@bZ!c&QZIF*LxXnW=a2(bV;1NI9a_D`4W;p81lAy85sYdzn+%@;NTVW%c`^Q(Ff8YiLtRho7Tk0=$VF=Y&5A+|DkC_5K#ULz2$~(KNyx}plYMv!(VTkZT#=w;@t9m*-B0TrA(}h# zl4*=S{k!1Nb~S5 zhet`v&i)WFX?qOOS7g7e9Ic8G!HUK2WQA^}>x<>pRmiGjvWHVrQjqUr9PZBF=)~W< zBZ-s%DJYC9_z7dpXC}TPB%~V%=-{o;WXEys4N@*30Y7>2#AowuhEK#6&}qB7Wep4r z^z>3?sH>EYJ`8J@Y1*2b=Rn!2npGyua%LEGjQ~5q<5mYS2QpX)Xs=9pFUph9R+^FY z>2X7wOqSk(J-~Lj3^g`t;H@_Z?S@B~*_FRv@o7={-+Z&P0zDrPtxyUN%IJ;vGMW zkT-cDWi3IotFqN@1cx;C%}T07Hihe!X7*ms*8N7Xwj$7nkyY;RI zI;4#mocC*S^#mO4*q9Vmj=Vmy3so&o&oCnRIC8SGp2}0ka-JCeVn`8M!}*2qZD)F%w(nn-P5`r|ga8HIQ^Hy^s2#`|*D zf~k5o_3mhi(_(hG|!(#6T*jBC{vQzzLA7lRBao6*XtFGCRvXr9W zw)~YXQO)P)wEnG$K*wDyV|vT%t!e$cJfT5*=iHk=I~=lng@J<&#b!q7v}xW^j?9|% z!_EDgKs|S9Jkl_>JFnZQQZd`(emvqib|2OIZ6o!=s5kl4L?Qp&Ks{k1p7$|UupW-> zibEE|Ls@uTilS)E=4CN3U;cSW^g5n&0}&e}-=cH!E`R9^Fqx z`N`ckneAm~Ly2PcVI)6iA)ic@go$=I) z0rFPb>gd_7Jl|D;kIj2hya1%v{Q5a0nWn!Nc(W8}F}E^i+LVzI@A--%Vprpks`kkq zXpc4Od~6OMN6^g<5*+ggrl5mdXX{mRK+=dS#SzmicD zq(@0+uLK+G+)oS5c)1o-==(N%6Mq}!$x|Jo`g8AX%~;KTAU%5Iu+Curn=lV+h34GF zSe6R&{(;2eeG6slNyZ%So4W#JV$aT|IL03{)vs9P#Od^gFj#()$(CMvUaymz{b$EN5cHm_RC$9mdAC;1=~LQlU+F3>SgMZrW20WyK4H~xGCN$Lu0y2Iz7=>^ zr%09jjR-!gw9OQy4q>u>GWM7WC&~Jg&1CB$3K`-DK6jGUC$-VSl?3ZgBTQ31krI@F zS3@*9>9`=0eeLNz3T9+oC_M;Yd zI%IBaN|J4J5BH#p!279mo7! zR(+dDONclml=vcig5laA(z|q;fFbbYE%S9We_ETs`Y!Q?he^Tamx$Fzc}?iBOwko4 zWo^YJ(q@-^4132f<|r&}TBOiZ@{+`VcnTNsirf5~G=)D3b7ekrQ{Ls(w4ckHw|4## zLdSQ7GmUel3(e4O?z@(a=g`J;+<3&y|G=5rP!1!id2z{nSr zsdGy*J~F9b?1V51@HRO=&=GAhq8u*3qQDBSjZx)q_}bKZeeCIJrSv!X?&QygggE_f zvK8yUI%Q+Ode`e*7KI!}jBaSvp6s=qPs_k5!UNGkne3+X*ih5*kPAtqtu4ErNTpyouRqJB$RA+v@2!#gz zu}3f4X4B7p$_v&#efM_%t214r)D#OR8PmfT-qTjiXW4?WuW{bf;2IOlWxT`{qcEKE zDG$9zOSJ5`6Li9*vsSVu_~u#bnWha~9huJ)ECk+J5;7v-o%?Vu+>c|C%hhM<+v9JJ zHE9Ym7g8U5Mk6vUc!^U8xruqS?Wb*0HRHO6@4>pW*($xB8 zOHGkmR+f8M%{Qops=i`THAd;p{fNKyOU{>3(P@BW1|9w+w?84+RN0-(fR^zaPnp4kcFI#;Z$Je}GV9Mv7(|&&H`03t_f# z5&Cy~sc@NQQ+jbitt50Ek#~KJ1C=N%{RiXDlr48;TAHE=0+stuXU#L!rJ*sk%~uH_Hsq8jKndeacw8F4WD89U`@9cyHkGN)cI zeX$4YeP#Y_7@ytV)ygzF70M_Y^f_3L?!z`Psn)55r1K6*)rMQXj%OOPf70!6;V>VR zts$x^kl!mhF(}t$w5#Gk8;j4($e_>8NW-@+jn-Ra1NSr0i0uLp>thSV$e&0t-;sF(2BLpfcn?br;IU$9?kqCcL-K{tHp$yJwB zsAK(d=cmhE1Q8P5oeXS8!8APFG3VTr7f1*pyn|P9(r(uWx!7%MPBi|$E?mHQr96Lr;=5_4Zzer%Xg zvugsD6?+vC9b}a9Z;_>C`YaZjbXT4HuC64odh^FA31roW5E0I|sBzz}J+In0{ey9~ zTN!MSfUi8F6+gUe!g)qndD7-QxemcW279in5EdRDGS&z>#WTK$|N& zC04cL@as6E!_-SoLfl(;|GRH36VDG8Y%%vQ#@630N}0GuMa0q~1w#OJYGp6HdnF;C z`oW)X203vh>)ZV!-G%6sX_{-iB;2>*7_M5cC207@KqS z;b8=tD=Jyocl1}o{rRi(IIE+t1PF&Jt!^X!80Y-Nk^SVLYt*Q%@Va>X7C9FxQdoP- zZwxP*aG|jP3Phgqea?bO(g!+?XNpGpdy?VDUQg}{6CwE4M>Ov0Ac;Eh_fEaGFL>5r z#8DwB2>11FVkM4nxTQo&HePmoV-+f?qb%}3uh^2S>_}l0Ejg3C>48#j1qg!|f=yYTjxE)~_p&N7DgL%_J{rBiypN}X({u zvAu%xo!1F(JHD3oA{mxcPyJOmN4#z~{P({ZJ_x7kPIqaHHzqqSuH58ryxsnmzB+!t zJrvD*M?MfKz{B%18d)%`k~i1viiv;a84fgkriLO(%LptN!{T%YaAm*rY>cV5nC|}{ z7r<$Ju3KwrWdEm&JEE(|oUQhF-Q)oAiX(q`UaC-j-+D15ZoX%Fuv0tyox@_-Cvl5M z@|V7Bp%LL5Ez4o7)M|BkLLQDAYPGd^D|2%0B}xsOo{^#QhBOa^ga!6oWmQ2Y6# z5}zRkCtj}M`=cS0vVJQ@Y*NQPzwt@9p})XkDk4~O<&~7LM6;bV7)jp*;1PIxV9~HQ z<|Og#ObmVjXk!dAK?l80Jmw(2uXnce;2wR-joO1L3n>Cbl&Z;$r$Rz0&hYWnsP+F$d%$qzlBS!M zntIUkN#@_w{schSdFxZ4{)rz)0!+3$*}|6ddxL=LgV~P=6nFtBfGQrO#iU?AruW|` z6>rD&{Bi_)7ZBk+*I!&+4Qe-rR6j)bssHt_zCO9@;faZA7VFo5IPD{0s#JP&%_@Fa zA5^~&3sEEQh_B6iUmcoL@xhNv6i?G3uiu9fB^bZV0EbCjoC*?Ourtv51}F!p0oMQg z0ikR|&g!h&RaqH3K-d8P0lgc5Gz176q0q$xYRHih0HBDHXOA%~U;3fMxb_0K$)L`~ z3MxHdo&x0|1OgB!V4HvtN|2wQK`yj+1^h_6UcBN$&IYX_W%(oX9v@%dbTDOr z+XqDshkwT|l)Wh8!KDbU*-kBz$Ml0#W{?!se|G4a%ys_%rQ2Uf2ja)Z$D?GZSy6eHIMW~Ac zfcohLDBY@xU+7RgEZBEXh&AvyyI!Kjn;BK||JCAWeW+NY9O`pM%gSK3KDx)*9f0r1 z5z>9@&0znOk<2RuCqo@E;gtZlIAg3f0r7)P90}|Gj02ID?cA3U#)~U7akNqgoe|c? zRq>gAtBsS`E-=^L%th!QAdSk&9;ad2wevY5$S5G`&}RVeqjqI z|CRon78w!N#_xP!Z=_X=62MX5&!!@d95|ppHm=ujQC3utB$Wxk`_7hOu3Xm=8ta^| zlB)Wf?}kEx0(VY4+)>1gL~NNb^lBJ!LsvhLmQb>p`RdbSUlIB-KjF&=m=*LdIg;<= z;@yo=Rn6!6Lv@a#lUT4HnGzG}dfq`w6#MzRA#(~J5%BHyVlN^_oDV>A*;F;2cimXY zJ$jN_JNbQldSc{(C*$QWGh$~h5yc6E>K&k2kd8K@A+`j4%X2mG1z#MDtKXcC>F@`( zZ{qj;XiQgHc@(c-ds9^3dgYefWwliy1Elz3ILtpGy~ipIMB(2G#@{dp?>~A{c{F=7R{`3 zP-f;rXDif8{@HWU(x&k{=Kwi2WEc2!h(V|cKTS`Mi8%z4F~G^FfnY%usOwkVQ*pYi zYF2%E>w7*iR%YWZUY0Z)BU_ifpU98a|DL|>igzGucpr=3)ZZiPkzD05oS^nKcll9# z2TeAjWu`ABrs$X12yIakw=Z zxgB<7nf=@c*-VP+Gzq+zCc#x21}AKkdU8@Bp^Y;diwzuuNrBk}Lg z1AJ;q$FU-Y7qk&!iVE@r{dZ}u%8F%rx(Z4zeqR=@`2O=hR8=MA^A72}5kV7QquQBC zNVL}$a##8^zgJitV`mg&WMW@uKZkD0ej5?VHb2VCQ=G(a)^?dFT)# zSxX*1U>JoLt2#b@=2>?O@#b~Ji|1F^xgKJX^uoO9ooj1&jbAfcR`w$F>vo2Q)=%1< zeS~!3m!J4P>`d(|dy2aC+(n9tzNB`Dzkhz$z^w@p7kio*+3MxXuehYoIkk0kU{ST? z(FGngFJ5edd%=FIdAR+5^@;cIn3$Nr4FE{h2(Sj_0Hz=tTSVK!yTHKzUz4x^;u;+0 z=IUx{nP?aE>2E^q&m1F^`2tMY3H}=;v|e6bpfFw*mNBJ_oCKONkiEgS0-WR!fA{u6 z{_}CTwC@z>K6-w|w~C8L{O8Z4PLfG^LdH&7;#uJSZlyVikbm}<&(<&9R`x|fDjdfGE zEIy#Cofc_QIy$=@I&FS{NiY9FMnX&+=SAj21f$KSZJ#_CQY1<|;U1N)t8Vq1r2Tv6 zEex{81`*9gOV4!0pM6is9p`(Czg`v)#CHy`F-T7T7@AgANsUxd9WJ088|6+Q_=9uL z107|gv(x64qCbM2WAJNrg$GG80#ThNb$oIlrB3LmSyU1yW$w3NQ7x*iKo%miwPhHe z5*aR|?7UBJ8s(4gPWfgqTO}9<&3^Oc8s!fEjCMWWG=oA(?9r{)(j0sKLF5-)my>~l zn5HJ3Fy~s2$)??wmzO5r9o;;cuVGenGIvutVSVSO=K{Sjz(H&RNH&gqzg{CDTRxcv z>z*AbmO=elE9IZB6oe4qIu2Dx*tIw3o124zq~Iw7_zsiXJ2F3N{{GbVvWT&W+&+O#zdF6g>~jwQOPdo zyMz(ePZ2FkSbO%7N1Z(P7)M!4N17Ikdu(nh-?^;fl<%VqwY`qyfJWB0ilk>*q;;<< zKi74%{;-4r#+az9u2!6t@3=H{FuJ8H@7ggq_YBn=A0zC+pA960SSCH|8B6$c?!hs2 z`r8OWw69+dixiHlgvgp}8nB1r8McD$T4%cmZc29cQRm}M&VFLJz5l4_7hYAB`7BkT zb7_vSd3F)M+OT&aG{Ozo8eDr{T#@Lx(3F9da;zg^JET78K<9q4EjCAvq}twhVa1 zEkttvKi4TJg~D19+;+BIJ&!O1^#l|pATU8kp<-ue=T=)s6+sQPhL8`KZ4EwWK$mph z(o_@JQe0eH(@;}e+1?J<1J#<-LzRY$#RfLh)EpcZ~ z&TMp)S18PXWpQvL!kokGQppK?OU#Kn32)yj1= zOj>fOG3ETMN;NGrHF2D;YPFB=1%CdP;)5?OC~fniN%WJB?k&Wv%ujO4WmIL6?RDgj zbmk|!Rw{oYhlF}%uPoQPzsh(?Pk^2itg{xgMS|#JW8mfSlYJgjr+TEL}YmUra=)N;Y7zW*HvAEa&(pqm4a7N&G`^X9_B9z>Al5fAUZ z1NIRlIwe=3q5B6JWjfPSQ#7=+J*+RDUps`KFJ)5!{|`pU>HCa~$7k+!RaM9CO%o3y zG`527Bkp+!89W{x8r@phdE2(&;iGTE`&4j7J6=`w%6VTX{JEoRg@0-i2I9Vh$_u8# zR=l6I*!OtTg_=Fq7XBbLHh&`$d1{Is*{iYTyFPmKeuQ@i_IrEQ)P`RI{wr@Q@8e>3 z4^0ni8sH-?>pe)Cy>PG!hOBmeenbqm6(2y9`9LntHn50r+?-Y??&knAy@19Fn#Jx!NsIeFziG_JI^f12(%-STtz*Uw>HYHZ;TAtG)o9d({upO8LBTBCloagAB7iyWi;S z+K>jh5Sd7xzs-TNCL3+?0WAyHQ-(VLESpkdA^3#I&aMg)Y(3=&C2qax#INBOy!;f5 z3+Yc2hS#*VY@$}jd7ZfTor+14G|{}Q{Gn-yx85$|t46TX6Rxi#iF(=l(Ru5bqO5ON z`d@AoD^l+{8|LNq;@>OW+=w(dU+%NblzI2zQOARgiL*{XyE3!#^x%poIww3Iu%iJLLe@JTqSJ3(7P}&-!}$Q3hW2M4Csj^@=ITh;j*Fez=p0 zgxOkOM?Ebq&iuao3YaOdGb5C=R5n+pWnE`@sLth`=md!c!b3Zk0_xmr$sZLOs|FAD zXD{vGtQ~&i)``VJP@9?V-FZ9jw)5{Z#V8_!ZeI{@Zg$Y+b~TM(ye$7&1$~2xOYDnE zc^e%58U%mLHC^fYIpQnZNZ^v>uitWZ5$> z4T4^ZU97x^j5+Yj>T>a{tLUkIvZ0NU_RL^HTr?YY7$O!C8AYdr==Ut7Vj%;JGzu4uD%&v zGqa`}XsYj6nn7|0asLw9?e4^>m!;U;VEX;iy7vDM49;;Uz3)X!BX zETh9@Qv^FN4}D2qQGO}@3+nq0^V=mabJ#Yw3@@m6Xbc`(b{=K2@izyFv9SHsbZ4lc7=U2Ki8=cW=ANx6LW!>;UGYi7E3z#kRPIv2(~f~-tDy+sFXQE{tmCrS}lvEM1io6#Bpo)e54_fqoI^16B}QTz;-V6~f@n%Wamv+qvNDmDc2G zF?K90kVF(6^sehzz4{Xeg)i%@?>D$K1pDYnBB!m=i?n^G?HEe;E!NyTzOv-p4Vn)h zE^ncPGup^;hWuGHOpl4QGqQc+`{NTD7ABcg=lZ6lJSoq;a&DTo#sCvzsqxBSMV)MV z4NW#3w68m?r0(f_o%r`4u*N#d&PmcHColC^(0?5Ler|{LjK+*H>S%LOUrnbPcF;aB z!XY9ea&d8K%JKIG%EInDh!BBV1}1(P$N4Xn{3N0{D;A@aV-f*OORznzqRRD47A&q5 zFCU<-&RaguvMAW*@FQCp4`1<~UHoQUd;N1i z-SL3#mZ+ND(N^riuXC4m{)&N>_k}XcL(b5{u)h9y|M0_yQcG3Qa%pfMc@x2;Eiu6-C`A+1~F5elv)xa4MTQ z#@Xr4S=in*Eup+i7oxxMkg_-Le5^sc89=c*?zW5P^!IS#wUMwl`o2zu5n*(@GKCMp zndR?g3g6BkIZZzPW_kn3#u&$&DdY+LG^DnG&OTB$HiHH~tB7ZQl(je+rSnaM0(S3g z*ak93q^WagkY0#eV#u^CY1+#A1p~2zwL$8qjh$zA{C9FPcH6=z3f^fL{mwp&VDLuJh(pbQD4CqoHWvx5Pvs! zneuRZqQfxV>?fP3eAbdj-BCtvw7;J9U%d-kuo$Tr#!TlwmhZhzWS{D@-cj1iycPezdf5%cx1(;TL1A{oJPegzS;JadywhzdB?&1woW$vn=nmgq}Rfo$I1+& zg1Pp3=pz0{J4anL^oWP|?hF`H#s{&)^WGl$R|_U<_HbIdE)KgpAYAKVK#xntM_3}K zsiN`KtJlGsXS>e%+}z-1j)}MQAHTt)&O@m7^mpG}H0S+@fv^u@#^s57A$#xNbsPWG zt9<-r;`JZmfzAh{Tn=Nmc!F8dyEdAkcyNSqe+Lsm@%<`Y*XQra`F48IR(`KV4`c6c zTHVpsFqJn`eYhZR<>%~}k%IW{&e$uV!M%s5Jp&&@8T5W7dk~`$vqkLik+_{t=CkQ{ zys9BFi?k?BNRErWp7}hstA{IHaxPQV zKASuG#!dbS%sB#jdqGnp8VVODeh_F zH*M(`!7|jYCx5h6wTt95b-|!H-^AP$1)(=vhl_`wpQlmiK}IZ_HSBe9 zYrag3*OGrm7hpoCRJoXYjtO!_VpI@&T2=j%dkFAb3#5?~h{J4!j=QY8L!%a+1qB3F(EXdEyH~#BlJ+LRD zZaZrAota#c!c+3hg=ki0{$cIm&M@*>c1$qa!^;ew&k45b_Ajr?2&s^R?w0;)kjnW6 zr(Jh(c>M(nM^%J1Qif-Dw$AH&4<;o#iYTLVtz@QBXzvR|M!j_Pg(CSq$=15_y3xLG zB_(TtmdV|@PahHwRH4z?>4`*4v1YcUrH{Z>OWs8nrni(7|Gi|Gw_kZB+vv7TyX@Xy( zN7>A(si*VRWvO&#+>V3e$?AShMUj8k4HK;FJf@;b24>YBLS!ML4L4hFoJB1#;>9UH z@ip)yh-T5h>s=YnFCcNjjm1l^@u-L}C@oe0!t+CBpk-`orDe6T`lEpf54YXyjRO8x z&)xCtuW?9CkF9*xjD%Iu! zu5L-+KH1x~v&kQoRj+s3wR&N3OpL#1yF1EOR?0~cE2hWo-~KKz+6#SO(0lvxlHouV z*a_gPVZjmEcopDV=k=9;OT)nc84=%^J%W2GhV;5pXTtgHS5(CSAsUL;-5u1K$dqfh z)4n0`91QUeH^S`Dd0Q$4);UPhTvR{t$zId zbpB{_Ur#d={r0JuN&aa8gy>C%Up%J4C&Fnw)H`SstorP(O<^h)h>TAR6-7{7fK>wH zW$lSAYGUhRS^tNADNI7i#}740axQls#8d@JWpPZQHoQe{DQzx&wY|dcHh0=WhD3Gu z>eI{^awD<^n{H-Sws_XCxqJd)?865LHtf%YEE;Wr4iss6 zmEN{uJBgJemtYXnY&KuD*;&$1b8S0zx$-q`;F;TPrXr1APcnR2%BZ>;m&{KL!a@x@ zBEI(!Pl!^xO&LFk*tGVYMX#02R;6{WRWee&+u50Q3%(-tz0&%m`1@^T82J9^nQYH| zi241}_pS8NIxp)xv7GVI2_8;j!b5lczEJ}7F{>()z}Vva;&D~~HBX{|?|Iz}))8qU zX*vmorCBYRY}OH2cd{ix`2^had|#U|BLmp5!s-Wh_$MbzwaO|=nm)EKBoN-X3t9U* zOlnOz*8FOX5_86JMtJrYkOlqr;}#HW89F- zV3aAXDI`%-pV0-o1wN9vXSo-yC*i(0B6%mGfs)pqCwTYnJkEVpd-fZ87%JR|wxbnd zQjuHPSk(*E|JmG7BOS*l2?uw9+4Ytkq^xZ;uo!u$q8inha^E@S=Ldn2$T3F3a zn|q_3q%A>dHT{PHurOZEWS1wdx`H(%b9k)e(a%(DOnE35Hl~TF|58$%$CusoI<^k( z6>C!}YihBuY)_wkuGxEOo*Xj>VJJFq&B03*X_9o`F!Q~`Lcjj<& zm~X+FZdN{pN)@l6W;<11nVJ8LIqp}3fA7y8^~AxSJv{s@wK*jy2xEiJ$Pm+IVhznw zyw@JYr%<3$lv4m+>;7fd`d-=*=;1W z>_s&z6%NaH{r}?vto_ybnU&Wmh_SP{UjyE*PCwLCsBq+6!|iwUxSTkLzj7fSb91>u zaEKV3sx^6TZv9d#Qii$7?`HP%EdEAsjM{i_qqn&Np7Lu!#hrdVZiA`_eT^3r^)E0_ zKJL8lP}esY|F|iR9YW2|KlS6s7bs{U1}7);rd3!`dnPhL%P1%~Gd-;>Eqyn*ZERu! zWJr01g-l^=$uGGB`pxm7Q-t8nJO)tC<+k!OI=ry-K^#MrW^$eY(>zbj-v{v>S<^AJO+>cXS%_YlN*0koK4nefw1!3Mwd zC9TWm9|70HnEPn7FP`;e6mHL*@>WDVhZ>}esZY$uIGzf3Vg!MU*Zk|JC+WfxJPyV4 zWNv>CjhLK!g`0PkvkJR+3pdcu~h@P^?RDrS0;2mp5Z4fMynAnc)2aie*YC+?as?5I_Zr2{*1LuOA*A zZEkGjsTP3qnB3&x;BV+nS+LX(vNq66fyhr@K3q<{;rJsENZ#%@4gpVu8E==1>l|DD*5j6T!wdKtadk8Rh!K`|^tBm(MHj&hM#WnJr55dGgqo z6qfS`X4Kfw;|mV;#}EHk)`ZTF_in#UNl5_}1>9i3KKY-3q1ez+enA0PdzTg!eftVR zAF>F#*yl@2^IE^-WT;*07?()s>C?d^5Cj~VN|R9(SRr3TL+qisTwx&^f*Fqq^q*i$ z^qyo0ZRr)C^M6OVrmm*uDfl75-^>|J{=pYjpW_W)C8rCc-`|Pg+p(mxWwC4GH6!$? zJUE7W>fj(Ko^cRP&d!c}DY?0H7{P@_MKPo;Ln9;5d30oS6dLA0H6I~L8|}!a3+kc4 z@JV{RJE;nE5AUg|sr4UYB8j4bSR+`x1I#}VVeO10Togm#RRVMn=!z&GLihwu;vXX8 zCgd=%v1zy?t+E{(3X3ulXv7l=$XpO`+Cu)c){#uQ}vd`wt%IR-W;` zQOcn2#{7HQ(1O)SCM~Q^T3q(ca`2Dh6j_W6@ zXRkv7>H|F@l6g6p*mS0r+AKcCIg}`RaXM(g>dRD2uj1xzHCY<`lSHx=5RLm}W73k! zS9Ivl`!Cyl)we_!6RbMGN=bM`!-==pw+ z;?^4w{2~xw;17NWpr!^L?X&SW57`Mml$6-}`ZiwbPk`+CUSR7aY(05-&^9YlX4LPF z)R`>%lP54yn4$0vOGtP)3+Q***+rM3-v?O5uoREY;g}hgPr`Ephi-@>ITQPUndW;l zm!ouZY(Q>yz5S@d>LfiiRZzJ0^zYC7*dlBa{G^*pC=Xjtg%8_5N^oq1vlg z+bqHWT_pLOIz%kzaep9iu@5H*QGJ4inofTMlJfOJL9#=#n;E&1LgaZ{RaO&vL?`qU z@neQCm5hx1gSDonW>+g{!Qj}B43YTUDgnie+fYe1#r!0s$~ZPMqT;r`vO?ou4XV2S zMJ|F5=E2)YEzsr++$px7pL1J=_{0HQvM-j9fDxbvNoCvV)d#+&12^xqtaDr4s;1yve8iI{+^3k^o|`|8M*Bv^Ej}s` zaa?btZWfF{pZjM|-$3ZpV#sb!sz>M|W#yTev^~MzoMsS1PKfWiJ!uA*PGI3G+wRur zeZ*zm8QD|kFKV)lva*+Un_kfEwaZ3cH=<>=jCXtPa@CF!FPN0zm;dT1peu|XLHtOpb*nDxwD=daR=#OpTW^dCaAwSE`v0c!`S2N1m?wTvXJY3%BXG~XOPdb+XY!)y@Z~(*NyFM`n`S(#Aa16O9Cg`;_?F%WRt}Ckhp;M1u{wDBoVW@ z^+q~@Nx{@cH~nk-Uz?{~8Ux#NH8@syVB;N~?rgdFW~u(;7JpTG@6xT7rlq^@#Gd`g zCtf>Auig9YW~v*LT`TD*%Yk@Op7bzzKaeI+eO0~SKv~LBOIGy~Z9<{sKm0PF0hvl+ zZnDO!tQ#Z$hDaX?1~7p>?4<*|aYtc96%@GhUEAIH_Lp z_!B}o%_a!T`vCHh!%gbJ=9WRuha?yNMeD)$`p)Y8g~g?JUc>!^s}VcKp7q1!$W!cE zqtRDWsRXR$k#jtQv)WLV>X>@72jR%pmhx$LfG`U5t-@!v4j;0{h>uQ9AEC>@M|>c9 zBF1=?5wpI6FGn5qimxa&)=o>35Fr%q$MZOkJm4qHtIVq)iH>Hj=qk1i#LK~xTxmzJyUqRR_paj9l7kH+ zx44j!E%1lYXhx(5 z$;aoJX}_-6_GzjbjBr%2Q@2RM4<8^I8o~)$wjAe>9+`my*LFM~3~rqv#+zeYY)Qu0 z26sD#t5d8WAA=I0^ulj zH*qZp1j<=}r~4Em?1Z4FeSS8HR1=a}E<-JbB8*B7C!-u9@%Z!yAwBMG@T0&*HSMRt z3;RJC>9fhrnY<%h%WM4m6(VEAQv3pA%Jr0-S_}q~JK0<}OV`ovPH^YKa(a{uyjI3>u|iBxA_P44U-=o81m*`; zbY@3k_DlZ2@$g{{?rmRs1vJg3e56_$tT4&l86~`NC6&^W5~+7%+-lQA+A^BV*bC*F zXB&khV}kr{zi!sZ&U`jEHm7uXlG`YL@9C1ox0`qS+w^CQth*k$?(P>9535e#-n$Jc z0VN)lSmdd=CS`1qZW$#%4Zm$?NB^!~Z1)MOmZrGg*NPnMy=`qhm8|@dXB3ef1T`0@ z`tH>wLu@9W7eDuf_p2@+aoj>OV2p)87~@#MZJZ}qfjo`hzK%%mLGX8d5jV+eW|^kWmq z?N`xv$y-RlZE^Tg%^#rg%kja5V&q)?hHkBu+UxjI1K!=zGqdb3&8Z?*Rm{>nVU?aI z=E$VNHqO0y?<^x_M6;AsW27nZdU@lU;;ygg+#Bl;YrNJ3$O0to@85=p81Mt@o`+1$ z3%Y9m>sgTu3lYXZr=96qxImfPWD!ibsLReS-^vHNo_oih4v+WHa`A4Cx4kzoXKh_# zKcDuR*wx=%A$B>Qz9WRvX3E3Oz>#faV}7(7h(q!0s>^i$%w{dsb~`zVsD|XDXp1!G zqSItWnI`>bY}u^45eZc;tCfNix4ci0Uu%|Vyq6TC-dY)7`4#KTW3FzCaq%b-k ziV>_61E^{<5kxBIHj-Glc7FR%J#wNGtnczQTTOWu*@tD@ItFwa=_l!Aq*Z$7rjM7~ zqs7lLtSxOPoo(k^*U<=`)I~^FbHxv6CTgNeUV7T#VQ%x*IEe1X@fKz0Yd!CnIqZAl zD;&^U&H6&(bJeB?P|=M!G?_6X=paQEA_MxUw&4GUf`}l?p~LQ6x7}4#r7ml5n~`&E z%Jex&yM@5u}}~r z+4JgWC6|T*RlG^i2eMz@zxSt_Nt$07&zCpe7W$qop36Z+*FF79VxX+3=!d2vd1QlM za?QmbGQ{saJ_bUEJ-*B3NSv#>GlZzCtE8U1nwc3t=WuaJaftt;!M7BAGKw=HXj+@BjDxf8TT+?{U1(} zAAhmxsml2LIO^SFJzHZ;; zzW(k(hy_>0IdX39#+O5N(uSvKSA4rwGv-fgzd3(4CdBl1(5Myf;pCd}jM9=rE$$vF zwd_tAT{i-gkCM*cJJkj>tWPX)8bckgK=#%f1lvtT)K2%q)s7kxr@2`@l zRAlU>{?m0J{$6F}QJMfH0T=E)0pT;eeAIr&>$(mcQ&E9*&YkdZ`haD>pqihnkfThk zH7AGAM7vs+mODXcQ!Rup+~KA6lew{#HdD*}_H7B;Kq7ie%YszAnPN*|r6|AO4Bp20r^xzm z7{0I{FkWNZ)Q?wmhVoZc^zC5G_0fDW)m3AyM|zdjbi}o($h<%2gEW$8@hbN1J9oxF zSX6ZoTSoiHm{hs9KHmA5$TyM$y~HFTie z0jvh{Gnn{+;?CWytl{(b-1wI!+}yNn!mJ8rjdsOz;b{mIWOv8W8HHtvFz0laJ)1V< ztL>5guxUu-h0M|AGFE!n$yr%h!8#77$?WVbM8#%j><4Go0f<0`_Rq`=7>qYFJV&S; z0N_K(4q7Tz9t*GwdEeG{;E;12n;vltVq^~o!Qy~_EN1`^GCkpgP+NKYcn}CQ4+m45e%abHq;xg&z?A!y5Gzg?rmr5*398c;s($LF( z`glp?l@IArCJ*HJcq*EDdGHvnv^&KYHswr=OYbZ$Dqap;;_2ba5z0C?`j~a!{^OPS zN@vfXFD)st=_-Mt18vBMeGvbLj1J)gDL;zA!&ePLNEGpF9!zmJj(H z2-y-oLqk_FHUw~T&z{H7Z>RsRed$s+bg-bL)8YLbnBY^$Nri*}I7*eV_w&fw;%N*` zvSY_cDvwa4*|~Ekw5NdMVFZb!XpR}9+d)CVY+!Xx_@t-*f*4Y;$}ddGZN70=DUCEr z!USKoh95r+wY9hVzx|kSFht%2$q1eW>ULN(DW1}AZ-lA}G@Srl0N{w-X9$20o}#|T zghW?U6|5k@);QzZj;XO&Q3GJ4yLovbdo?sMv9>d}{={t88R@pEw7KbwP41RSK3@3bGBS=!7e>x4-n5d{715;NaR4ps} z^4YUzXbM5@dLPVEP1K-|T?*61!ookeyJKTxkxIa^;OUJo#>CA0Ir&K3zk7;45f-G( zkdv0seY_Yp(YVFfg?OSm>-ao?a9(?^I1fxfuWjmk@fb9I0M(5TLY54$U{TQ=NY@aP z#N!wzIV(e1=G3VM=;lBga1Sr97PhK^fvlcTP0tUK&>Yy?uzk<<+Tn!_#5Hj)y=8>E zfl6^b(x}lN%a3JZsw*#@$F>uKxarX<2IZd(L&cs8M@Qc0c4cDe=kxMfFDjD4ssj19 zp{@=CetcDY$RSun^?i^QGetb-axhUvWU%2oJDx4&e|FvtEUN7#SqUYf;#{N=M3j*9)QgUeFG~;q*QE@T! zs3Gnasn-KlLrAFp_KuSY4GW9KIdlKMl(aNS{(3<0$B!R`4~7Dd$jCrI@(J`dt*jK> zW+`Rw)|*4$8V&A|u`$Nr_wWGUPWK>VtE#H1`3mmNCXx|$AN<0CgM$I%V_`zAYsK2% z__mLr-WR=VPo7YDP({@9yxPlTVA3y%|uOtCLSOH>17`1!${JEQ}D`Wx52;kn3&lMIH#_`qzmjEj(5#pG> zen(Bs5QN1DA1GoSIdX)8z|tCV1dX}`NIvE&@U70DXHjE;q!{?uX zGmFql3}2%-(tLXl1d|`@bP9?F@d*k_=QRUll_p&a@TS9*Wz!m^|654CvuePy8}HWD z)ir^6(ed#*b4lVD+L-$Ktd@#Ep|OT{b4sYOpx;q)99 zny#;29hQ`ga*BgQW*f8-AzOL)$Pw&QGQw5PNJRw#{&`qAxL&_r#XcSXr1SI(&W+5+ zk0FYUi~Hy;)_5Iqf|ZSJkDwqxn!;Ewzb7Vu`eIQ(^7SPn9u^krYHDtSn6A)$*hA+1 zzGz?o!A8nWn_lSW`^Ckv5I!GiVeb)DZ@$@I8*P~Q`1+m?5JY36J+7!oHp}8*YT5@$ zFqm?CxVuBF9SsBjOKgf6Ed(JMKR!0r_3c~WJ=5kJBSC_^ymruF^YQV4w=;T2pFe-T zefu_o3F<$Gd26kxSveD}9+B~Y#1vL*PbZkCt!Ru~^R9O`GkZ{oH=vm(xuhHXnCwWXw{(u784swM^CTdGTDu{s&b!3rl%mLXJq5) z;Lu+lH3yBm&;=9hG%LZ=Nm{xGqhezbA)vrL+}Fod#O~j6CZh#gC?S!f-!>|pZjz(l zUWtLy^IORqlejA>scXkLm_D|XA>UJMZVD6GdOSQ{(bi>?#3pG<($9>4t)%c=rZatA zyGgM(TD;y?A>D}v8E)l~UKct1N~!Vh_~U)rmrY8MV}t1hlLC{OmlLsF!)LHTvZ#2|~tw z?izZQ$Bze=mM%cR??-oc#OzLyb0^f*!)Hved(g^_ya72$#Q0n4R@ohN_%2NC!$DBl z7D~l%I!r|oRrp*oMwS#56y`HtS5zRlRKI(NgpHK5F)>AqT@l6R))U^@ ziL>h>@diFHke-aWe;)x;SVY9Y4BDj2gK@^V!!T}fh7h5m(ivwW=pk`-phE?E8qgtq1Uw$4D5rK$>1RdLzjBq?GFC(LmcHxB!-`m;> z%gZ?kl1Yqk%qfhpQ7S=zwX})OuabpyUjkJ6qk4^S0vi}CVZ?Gg0P~Z@1qIKL^zYl} z?Bb$EQ~v6eme3bOa-_5#zus>NvsOaI4Cf#ure$UNii)PlcL*OWNm5{`sNf=+dwac6 zx5S8?FW_;S8_`Dfgt`f&C(MDhLzjGr)d;mC60w5w5Lv`?MvB_dPmo* z)ErOKGJ5U0oski)-VWm(`(1mbC_S@kHoShLFOP}}j~-8vB;^bX>pH4!A-=wfm=OFY z0P1c#_`{=9#9Sa3&h_ADM4Il<4*e=g?|bPzSelu?PI3`MF+K~CP<)<#C4ii0et z>gjn*v?FF9ny$vCVUCgXl_3Q2b8rxr6lU-@R8`$n&{$hbMffPC;V+`7%YF82S&U1O zLCUC%o8HaCLmlhx)G2m0wrv;sU~JOU(}Q@4oD)V4pnZVvV3sT4xjcvBGw%Lr!-6j< zDaWXShJb9SaP2_zd8El$Me%D}h=(sE4 zU8HpO>{mQ}qzeXn(0}IKs=Gc54QwC*BqQzGo*ty`URX;w9guUuR$~((5wF1>x_L^( z?_nPnJ3g2lQ<%Ef3L5&@00YAbs!;ZSAIzvB@CU01isBCxypIx4RE9jrZs|)9GH$4^ z&*!-biBsIK-j@z)a3}#OKv$PB-UPQCG~4S{G40l__cwylnB?K!hevA1|89B!2z4BNLy zf?#7ViH(jk{_TunbW##0q@xWDH6QCBuAnBoVq)UMxd@*dbae>g_t+TDI5OgYW@eW@ zZ}Jn!PV-Ca3$^j`z!AK6?^ERUU^;@rfo+hI@eU7OLqh}g*0&r(4{T>nIx6CUlw}m= zxx>OfV^$Q(CbG;luo5?wV8vc?va>suQe;1 z*YbG7;YuS#uJg^CpAf*Iun7FQ_Jv{2kYi)@3X*J+{w|Ch8X6lBeenx<)}4~`G|1u* z++b679)%)~P1MHTD-+Vh8^kZ{3k5(*v9Zk9-H4QUD5eq*aJb9M%O6foNk}-1y=Q+| zj5^^Mz7GGMJ!(499!nEYaS8e!lbjrC4KxE6eKyIK4+af+aVlzRyE))kpft&-1cleU z5**Qy2I-1Nu2dc8VPy2T#!|cd;qJ~lXQ;i{*-1SAjJ!}bGZUmIq;&cls*_pVzd8A+ z6MmL)&<_p`-MoK4Hg*>W|Bm3Zb?a@2qM~nq->Uul8GbHG z#cI~LR2Ej!D^RFLv-6RW`M!F^$8wgP1;H1D)yu|uTl^j>R$zNy%5*YC(#G)K33~%l zyI7ag+`FmSH#3LqWMu5ucd)R2@W;XShq~Vw=@Igir-1t4$zSDZrrRbxR7y&IDb5^7IS~KGvz+Q!8s@cK z&bXYt5kq;-Ph&ED;cwc~B7wQjV*UN&{HAa&A$ z{XOti*67o@%1YahwxoADl=4Vn#?H~h{>Z`p)S``*rma6L4}c2KyN6F!^TzkTN7~7V zuYbQbw&z+;EtdIEpXL-15!?Fj`+*3OS3>p4md9(?FP22vnBuctawTDHtR&3*QFM2V z@qJq>%W7c*)Bb5ZTEb`gCq;OwLa|-Zg{jh|W6kUJG_La$+HNoZe)<$Tb*fbwhBDtW z)@`0Xd4hbDgPon6KxoE=U5GO&=lSy$n88LC*x0Et%1*Bl9Q zLArDB>~2d-18r@4Bp2M=J&Mos2TN`5Rh_(hxXkum?G~&zgD!G^!&o=3d5Rla-N`(y zU%#s6=NA0E!~W(9m3#jL(oXp@YSbJRHZQF9f1$dN{SceJU#~IM^P|rV=-| zDqbCqG?2>Eoc{w^!#E9^*xtE%0*8bhtg&5P<&KJo zSOJVhGMRmz9%Yvw@4mj}HRWqk7p57d*kSBAKVMQ9&djNRX|qH&OB;$eEg&;==*;-NQf)b^LKdXfym@ zQ0Tfo|9RD{Ht0>^lm|3`W4FA#JaTq%(G?b9puun377A^7!sqVYQ*eXu@~VuFH&9pK z`p+c|C=2PJrL(lL!TrNAc}_>?@U2A&osO?xi*F8|5@kMu(;F#Fn$dnzuHoec?Qc{# z1A~J*fg~g!VF~#Fd@|d(s?C~T2!{a$@18xRrGP}a z5tt|}p$!b;@#|Gp-UwFsrYsiR8j(+4}`syl@%C-80hPB%HDkc;lpE?@f8)_cj65_?%?c< z^d1EY1YufRqs;h$2SM%(9Aj!)T1o=XBl5(f?(Rz{m_dKG`PlalQlPB;>skk>vAvz8 z6P9CtP>uxLz71QjNFQEd;Zr9^%?=S*jM!_i*W0!&OEWPxDQSFQz;U$oF<^B(+{^hL zAWz~p?wVnUJOKoH6Y)^%N!lwwZD-WgVFlBSl3GMq7^OIz&O#lfuNh-$BkL#u#hNgI z+CGvB+(#_z+S=NV4pst|ddF`zAXh+w1#}7@rn-LyIXg^zN{fptP%uN(1hoP#oJWpW zHH!49u;if$*cDw5j1o5#6)83zLCDI=V$UM;g>|8Ex$}*0*#`Kpb(ZMOFv^x>W!2Wy z0Cwv`uLWhSa_H@fBhYH635be|gI~z&?J2x-{!7+gD|t`WUQCFw3$yzs-cswhYH7JQ zUc<)9iX)UvX+s(IIY?U!4BSYVL~s1udA6W4T$Ywrsu?Z&=AU<;%Q5Y3{Oc+NqA01T zD!Frqxs?5`Va5)Dc^Iph}8e z^Ww!7)R~}c)){udaPep(q=M9W8L$T;EDJ%LM%f35kUjMHW1UC}K%_7rJ3QTiY!$a5 zH8q^`$jAv9x|Y^fY)&=<7b)Z8963*wof*Wm9( zeT+fsN#*)_@BH|pmF*+n_3>w~e#dZ}+nzNxrjhvh*_*#BL3#SwzXY>IRInZbFg$mpn(lT+yLa>CEcZt6&n%fj5q^-lyLv{xfc zf&EC#Lt0`aZH_W%s=(Rc-Cx%`r?VEklt^$dqKL1rFQ5rr*dIs_m9C?`l61r+r>bfL zePP_^y4`bF@BpHJkBp$WK4SNi7<;?V8Q5f<3bmRWkZ_Ff;|Pat4{j&WCrc9(2@PX- zS}dYWi#U;vPP(it8Y<*ihIy;|cW(K}B5n^h9yIjOOAWi01u6(GeX&s#l3#0pHMNM>|^N2G5 z9TvmB&d&1>yPE0EzWnK`ZZtO|D(e{L zRQc_9{MP+?h|1P8YW-fTx;CH2&Khc9MQdEjqmNe^6W`+;Yiv{>Vf6G|TVMA=*BG*w z;Iv%1GB`bLhX*+H-7TSowf!(f7j z7(dp)u7nOoW@ZgWjL?&XkPdJ)m0f(KXn>Q8gim}Ekvw=%Oi1Y1b?(ECb=B3%dU{__ z+vn%c6lUF1N`p+}g^L%lc2KBBX@92qng7>4-hPG z-!TAi-BsQS0s_Z%bZ&kxvP5Az9%S8B@(EAz%am1nN^78x*puXVS7oRfz{rg+GyKlW#BU5B-q;AjJ_f+UF-Hbu` z<|eW^NNMCh8tY z9eZL$L3|u~VED@EWmW2a?O%K-I`^0R9E|l;Y<^Gm?~SSx_iGL>h^;G9xv=ls@7z=H z{d(o&(7_#qPh26@=H07f?1}dJsqAQ6@40LtV}-&X#IM$E+{5Bu4zaQd%IpHtCnd{dq@f zo%?IH!Ili*x2oy~l(a>qrMm~wGee|0r=U@>u)dQIDdS|FqA%6A^4;#ZL8x;Y9IU@No z8YDoJcOL|i1cp`^;=xCTIc18R+b(|oBK!UtNM4c=`!1ECc7R)bbWBV!&^|zg1+R{s zv!o)vw6`mG%tOc3%#4v9j1^TCmAtE;8Duy=H#MCBW=Ff3P*gZT>QHz&r+%`vow#mR z_Wr$yiSF3Syy2U0xdaJz$`eer8Et zY`;@r&D`#+U1}WyE0<*f+X03`x;Y+z6A2+5s2l)HU{?6pUs_uDb_C-XGD~G5^@+21Avu*4}+%o$&>ZS-vE~S*PFvf2Lg{D;aUg{U}2EbZOJM@>%n9GH1@?|l6E zGsd^kLRlL>E?*^2h4zGS3?#_vjW8*5N5cbyV#sg-iDLd}pFx2+Fc~P-Em|jHts|L1 z+Z!h{JuR*I9%(0M=gOOdG{jFtHpDc-=lAdHhm()OLkhVIL{I^qOUB>Ri;dy3c`<=x z68#wuj}>wGUR!=XzP_}oqiO%pInGAczSR>8j6zZ2fK_+&`u9q!0-oHGTl zEHBRvI|Q-V)m7&CJ5&*XAy?4X0Fx*irev5%7ZTD)kQzm=8d)bUY=D=}6YM%{0ZQ8r zoMq(UvBea!sHmI<*S@!XcBmP6u3x3z&)(}sy}aMa(P_<#cOcxS!lmCvTq31v#co9F zprzvlP0tqzciDXw=(qW+?6N;7h=hL_be@;(N7G?Zq@@+nRdKBMpv`b8`iZ^eF19C5 z)Iq}&5dmJh@U%sf1esL>0=U0FP)9`ao6`H~f_5`de{3>@Jkxj*PN#?nEgX>O>2$6X zl$Iitr0zEh1f3?j9s|~Ty1L-9AhE`t1-cYV7asy=+RwKU@33cMbF zkU%>7Z=&;?JsSbBIyAG3vBt@mNW|zO|knleD{UZB!9nuAGY|+Id6!aj5Dk51K1)o0WiYSxp*-V05Nws z>@e4mrYdx;Bgm?#st$ijT-YhNRk3-|{fw9Kbjh36`tR>r8opl%j^NGw>)G}2U;yQQ z6c+>Z<`SEmx@zCQhe7YIF1&3<&ry-rtPQ|)VYz8|_AILD1~l`Lh=eV(9+&h%ZyYIz zxAz9l@;&_g1Ob~ciOm(riRu52)6V^IU0;ja6a75^o{@(Sja>fcU6#vz zJ^cy}$~p>rMhAh-0ZO3@47}HVMKM%=YHpQXv7n`IvPh?s;_21fGw4^kDd8FWr7EMq z;~55xuXjCnclGcnJQ{~Jhn){d9@AU_0VId9J1XfoUa;#UX>bfo&(220#GKXBqotuy zO6S2usioyhC>{fjz~O|t1fORIH6<5UvM_F6R}#OqjiBZpbPIqDv z!mkV16zuwvQ&Q+Ua^e76BtCe64lWKe&~u1mE-s}Q5q|WDpDrj-)XGM>@W!3 zOOKuG*f0(S8jtK44Mo(fh;De_)lM>A^mz5oo(2AoAgBLN{yn#fL=HWb z)rKO0i~vrrl=kJ@Hw?WF4-D|e9U%EqIwvP3fu1*yK}2NB;A6tB4o&+x7$Cm9Ie0fM zjgNpbJ@Y84MHDTa9UWLdg23on(p7=Cpu0#(kbbgzw=%l!O-;7=#(0p(w|7ULKu|}q zf)cd*L5F`0_YV4PNqc7hpHu}#=~S50Vj-Z$!5U(8FtR9G?XaLy>^-64+Uonz^9cRK ze<^5O5xiLYZGQe>S9jS_g#oaMmg>=Vftan55*FF|`Z`>K@t4qnTAZUP zV5TPCG&kF!CIImCkJ5*Fmi}K04M<|)EE~{6+&Kw9H#4N!IIi&t4kshl<~)7+(&Q~U zn%{zg!~Oly2?;cWD}XY9r0Yl?0geH?`!+!hbnwujLs-~wy9Mp&KQIi+BzzoKxt^}B z#Nr*3b@h#n4&9X?8lu1kjIp@1gfk`dK6rmv%NbfiyCQ{nc_sAP{|nT4fd0)fUYy6Y zUv05_QI`U$#c!cydH%(Pojg3@*`iFt^=Syy`e|t1riw#~K2zrWTRPxH!D`oNi*dJwBH-i48R)VB5VjCu( zGc(WW>iTDMhaB_Tvm5yyh@*f_u^kP_7=4dDdA?GnbvG%gyN>GT$Oxw2BMoBzS2P97 zg^a*nsgtMTtQ{H{03&R5^_KZ&toggAvp|5}?O`d!Zsjq6)?a6PD*RE7AIBqP3|0X| z2M**9oEO#A8EI)a%G2OA49b)D>P)ScVf&Xac}6`=^B7cbI;8@%3`!>f)`j0>w!>RD z*6aU<)l?m6UTFOM`LwdK8L2R1km|FO=T^#emZ1T9`~&DDF9W)CRSv_aALXT|`<;cb zMmKuLh?}tW#jwZHl}iQ&Pai(?(KAV9R`QEUyAvFozp)R!S_Wojr054X`@ckxbaa#= zi16C>uV0}+jybz|Gdy4b_Sddnh2erO=1Xe(aeL8ely&FyBF3?S(VCax4uWlAnOz@w zbUl*Qe2`4xQX3Pq4WVx9R&XbhakK*H4h*b$XxKlq2(A1uqs?65@No6?lutgbrnGCG z#erlH4%Q&>uEd}qHNY}R+SOdcns4I_to^!&zvHbeZH`~A7-i_;9Aoi}w$X}IICl`o z5E@NPOhBQ;Wp2)I6`TI((Ev^Y=O}DPBC!-Gx%R?Qw@nI44?7R&CYycVxbzT z_sr#x1z`_hdRZwgN!DTWUYtz0dP;6^#A{@>T&q)+dY`G8SYq=7uexyld=`>=DD{tx zsS8Ad^#=;}&8(Jb3Z%*~>P6v!4U0HZoS&~aId1yWzW=y`!vSD%v9Uvaeb|sBQ`v<{ zuIT#v5fML!ht)D#l$|R6SNP^E%zf`sb(&;lWB>yLZw5^Vz~^9-bP5j3;Jil|#1=vK z1XteGn1@sC`kP6;!(OhOT4n4{rBu*z7Zw)Ky`JpI_dmf8N)2`}{&g3<8_tx+nVG-r z%0TSAeVYt#H!0rDVy>EAb5R)(; zUm9i-8t(4}^P011!1ll48(V-XWd>IFp|c&*y+vx3Knm4-tq2rz+W2x{H!!#pxN!S?K?v)5^h^X=prZvXjktONfVvj@OM{2?zNy;I)SN(Sa~-S$u51?-K23Gzd)5YjKbH2BUb0lXM@BW{`Fq>P0ubid_T2qXK}=f zs_6OwdeR@++;sSZi3E4%(OWZ;KkS0{-$UfhKKBMwusj%KC^{HXylogC5`Diz!7Es~_#?XyC@I)|R#s!K+rXiBMYjcTqW?MNY{T;TpKtxUS^3`c0Vb@gqxOG` z!pz{}MIaTv+U{%r?}?<<{qiI*3fbJ!`kDvYT#9cabKG2K2TlT47LK{Qx&TxNO;E?f zYaun=%50O&qv*tZ%Q+ONuJM}uP;sU0MtUsni$K^=No;79ZA)pwjmp;FLq9H#m+v~g zUjKI~4Ngc6f*Y%Unx2&Qwzo^)3P33a6dM^cl0Q^teIgDNl0Lv407qC@4CnI@@B4sg zVQc`f9nNIKlP80-vMj8v$0hy-xrd{+LOF7i3FJ{QjnE+l#Tug!>L*WbYb$_da?~F6 zhzWoka98hBJB_<9#qLoLehXkR08(TGQet!%kyoLSR9#xl*XOOk(!sYhp?u5hjJig0 z+Wxh=r*-1j*}wt$HNCN$VK@KW;gwVm?RyLdswWbFS^^XR5V_F;IxRNiw%uo9d(wJ@t4qB_()8!2P!G%`Yv5$JHq6B3UCeia)?bi$wI(5Wv)# zjfpN3&0~-qGp2#;05s6i)1xFXGDS)^vJLUr5GxS4(W(KYLq&iVfeTO!nxD@fKmGvW zF(oAs|Km)SByLOQR-JbOB1qvJQbK`1cuCb^~6-aK*TM7=tv3JIzmI z=JOtw)pMeG8QwtTZ%I^qpFiaZ$K;oxXAm(0?L2XYaEJZ)Q> zCD5arH?g|eqwBlNU2=niPg+?$4-M6HbSwh-F}fZ=cY8|<-fTM)6F@w3t`iw8Ny*9D zLXeEw0VDRJA`%Jf>{;YU*e)o{z(>V0N4W01Byz5f*@weo7?c>bV7f< zvvUc!7>aRUU!FK+kiJ+u;t~_Pyx0Hm?B1P$DM3{0wj0i?*8gqF>&u&V9%A}GlU=mY zJyyKv^%<5sBjSVEBD{BRenY+aO{`6%i1zmR@D>M)4Bz(M_lsIuynFY?M@6Nlr6J)6 zUOn=T8y^}Y0H8^PeYgyFvg1efn8CMCco23}bYy}mKe6m)#)sPlf4+zG?+r-&lxcrI zE;cq@OUT^$XKie9vf;UNhn#-vO*&~C8SX#n8uj`f=d3ZNZ|VZKw@e$n%TN!Fd+Am2 zv8(IiY&4b-1qsALV;s+iR6k(=a5*_GD=X+$JND6kn)I|p8JhIKDA8q2Prr;ia_JJM zPW%ae6w>4b*vHcpF!%vWF(x7c!UVuq@E>4Be=MT~w+Ik2Pz}O|)CLE5jQV@W&Ygq9 z!>I=>=x$n{IYW{=dh%ohbmZo1ju;9BQ&L6cc0>eJl`!K-q9t1xlL0+pqS>=+*Uk0S zrRnMLt-UYc^M3RwH>3bN-B4fqwzmZS4uJq8&WVf+Wn|SCFM3e+l8t!(pYvt49-@a2 zv%4uICMH(7|GoQn9$3U?B1yr!=j~g*UAvSJ1<>gRRk%(Y7&(FrEA4U6Lr(D1c?+@~ z3EPLPH*x}ug}Ad82uHvg(D6V?yW2XJ3nVK|4O@=G3!(?iB_1fOwi{7pq%Vj0=3-pr zTU#5)%6YGGfGRFdPWHuHX#ym-9I$*qb19XFX4^JQAIcVpfuL)RR^!2g#khqa@Z?_y z2$ffYJ^6psj57J+82*|iLu9~E=s@o3|5`IfZh3{hgC?G@bpHQQG8U#Yu!kOsx-)=Y zJ7`M~Yy$*n1fC%)C3?-zz^g_R?4a#~Pcc}XaA7DH>C$icqUcWA}?z}lWP!F3DkjC!i zUHQ+hC}>E0pfThce)*nx4E;^bycaJfhTS%md1`9u>p$q0zf||(uPb%@_dX#x&t*qU z*!dposPf*xsAl9ly#2WVaEOtWg8-$i-SX_2FuxucGkRKD$At4X>cc2Sl)-T~3okgKrtiEh*{Tdh@*zABBf6chcaf|PQ45@xyOaC;* zF=}dRAVtAbY~6BY24&aW5nUI21?6XDv@aO@NhkpOU!zxdw%q4k$k8#N?OvGb6^8>M7nhi@@GBH}YT?|T&aI9E)c+0cm8g=Js(C=%vpLobr%1Pu zxH}#E(@zZqi2IX0jI~YoE{hvqe~{W4ndIf}{t88>(E87fh%fiQx(nTZ_FZ_7>K@{a zzXknMso%LnAqG3kyejUI=m&ms>?kYPF$)4T2NxUL((kV#kFKJTgi#exY2Yw*>D;+M zxwn7=i?9@NykgyfC=ad`?YI(tH(ryi-W6>KG`=A)5}*V|SUF7kA&I+G~@)mqPmxfa@B^ICr z2nJ}bugWgZuWuCmmL}4+1iUp5n>>HR@W;U3*@iazhQmAR+V!}$&{SA`IkMcEYidL} zl!q_!PTJP+<(qLQBktN96t7!5Ot@&ATo3S<_{sH%4`?89D&y%X7zGgw@kIXwn z0MFn>JC;?9jjO7vdcS^k0y3+z3&BQKPOcl&yV6n?!sN=8n1qD8)qPk+_}F>+qNHH~ zCG1#3L(lo~P87X3$0^Ds4jw#v?i~1Ord6I!LO2dErz5q0zrCH^191Cw?)(=^0kLft z!YYRD=auo0FfDN9`gIaZ22CJch*IK7d*TjRPyvniJ)V)TKaLG)cKI?a6?8y{0-X)0 zR^zLCBa@TsvxDlQ%pu)x<@3Y^qTP_S0Z0V%f`ujM9%*>SpcLcY0?|}I0y~g?KpF49 z&*NEw-uTnocq7+_)Bmljn;YgtkqO{D?5^-|83@^ue}S5Y28B8!2!>5fJegO$y{mxv zn3z1oA|mjReN=XBqNIfX=`HPW(iSldb?<&VVnIkumrl8=Dc{Sbr@l)=lf6@bN+Wr` z_S+3}$@sI}+nI-|tOKTIW5f#!Dqqd;Xdry!R&G^${+BEfc1)iV_A?Sce-_`&sj&PK zpYh~%_wvwCjmw_V{*{44!78sDhUsP*)|-?ueuHrNt5q_FL2AeUHuJ|L%q4ZvYo%r} z@zE3il^WNi<}-CBQ!mEXo(HBLVdE2yNpKxoz8mxT;McGDEN5mzHk#5eZxR>TIO@{h z<*{^KPUyZ@^W%>{)MXpcKYr45J{NmzHM+DqD7L zZ?dv&`%%*3yw{@9%o^-@^aTF?`NQ#ye3qf~<;x{$=OQtQjw|uQ77ERqH~n$CmxzN~ zIOY|S>ltopl<<@Xg`>sq_w;C9?4FX>u)c0{RU*DZ@B7L;-MqMP%;D)LfR9-@*iQ7l zkBOO1l)hno!%DefZS7XO#|z~Wu*n>=tf&@O?5Es2EpnwaQ{-NrjHpUH9nHY>+vDQ0 zeW<2!rdpr*cPRq@`Z74{pW(deC1(93$SL#Uv>*E4qqVgum$#Q{*(Ca@94y1 zo9>aT>to`{_pe&Y)`wm^H??)cP>YtDI<2#6d6{)wOB~EJM)Y=m z?WhtjDK18yF6}=vqx-t((HHkVB|(ef2t$wKrd!f&LpEO>`CS>uF!o3XQ_ohvHMhT) zdzRzc+Ue!Plp*iA{AL-#88R}9;R@?$$3e7}frSMmOL?>kiJzF(F1-2)$dJzY^9o+8 zGCCW`Jk(=F6=SOa@q+fd_jxk%WsDGExDfDLDQQqGA~DhG>Qw;|ks}y$1Q1{=o4fxI z-Iy*3Uu-^ctMMaQ=gpaYcgQe+y9#RS z)Q|E~%$J}&M}T)cf=V5LcJb}RLrJ9i6MPBqpsy>_cMk&O2-m>$~3!_&LtV!8Iqb`FAgQ2jzd>K5x;6N!=+ ze-gfZf6Bk>TYGPB(@1+v)Vck;=yuZjo@tyzUj!pEXz`dUW37GuJc)W1=^oBD;GDQH zVA$RL8gUw_wuZ(y9woB9+WwgnkaEVr6WEGqqY(s14yXdkP+S4>jtmpPoQHN!99jlO znE$=@?y?v3f<4#Pe5k&BIXf5eRN1rQM19w*QJ3BQvYfS-?Pb_wmMb&-EAsO5w+r&U z#n&P9#q;g;N3WH>f0dbeRc~^UTR>}Z{DrJn;vuV2=VzKbcDK3r7MK40dtf?RrT5X} zwrfRcbda;DlU$>4K@N>p-8CTR*RJteRq_tXaME=m`~V0ymwX9%5H#a;Gc`;V@Wn^~ z_p4OECwZ|Q>*K-q`ns;$@eBv83vXW@EB(`dgb72={tVoh)DU=PG#!trwc)UZk_nB?j1uua^|W0s zd2y{{CguEn8=Xh~xIU?r4omHnII#J^yx5K%JEL^WL!xwAPnFQTxS*=~?U4G)vqu3% zPb1FVh$`9=qg8*dzVe<^P5088{lO*4-D0ic!)pl&lSwPx4k-?t2bz*590n8af63+k z4r?v`*7l1(YG}&+{r7~ZpS^Z@Ff?>QUA=%+v#>+5KxI~f(!*|nyZwqf^oV?qz3E#o zoVW!}JGS(pL*Kv-H&X<3+R_4IRVb*6ANuT2G*SCG-n)939c?DznB~4|5@qM~D=;!( zSPh|*cHz}+if5#6C5rE^fBH9#hk^RhnQO}rw*H;q^A`Itr8>o}W>I?RT-U^a%uC;m z;PV~U^Ih$#jm&QG_fp>+bddA4^$)jwSS21TD%0~3$G7O4b~Sw!^GP|X+n=r$l5r5X zKlN~zIDEQ0SeSXyP@_y(Kw#bBbh?SxvoQ2EK2|u@o^v+2YG8S@Q_zxY;>GE(l?v%k zKLs1MM2H)OC0bgjV_1IjGPvcvuiXmKIj0K(k%>3D9?9~VQ>VTokA_@tVBluDAd$U$ zPikm5+S!fNkO3?J4ZOcL9H_?CD_2m6fSyE2MP*!O_xAgDcEtz~U%|8{qu9KvGO;da zS4m4gI(5v`qt3Wd{IjyGxc+5xle70XB7=)6o5Zq3EnkS6N$Z)M&z(MSu+W5$I+tpK zGpQtCTqe(DA&*b^TeM*C-Qd*l@^`gO8%{-(4_VU67wEWhWIdLP8lE*69rmW4PO*HJ zo0}yq6=)$JvY{{W*|{VmQ3O<}`^ypG+y08)ejNC7vb!w!uAsB$Hx#&Xa;u+uH=hhXLp+>01BPG?ugSgH8?<@KcdqALaQL{B*MIOEQps#!Ie;z{0OyQ0EAeB?SXWP9g;`@7zs zg22rg>ZB*LCOmjrJ-gp z5dC&{FeT*DdE8z|z*qNEyOO6ILp6#M&HwGHeX;{*j_~@6tw)8kCqi?Vp0fX9{8~oEz)5vIu`7kC{YKTFw33%Ml7rKK zP+JnmtT=Qo^e*Q;obQMZFaC6c@NqlbD$pPm=g^tNsS_K1fh%?8^`lA;9&)k!Tc0I{ zD-6E0jgK=E3frGcuduxMk}gLtV2&&;(NDIW@!rS6sVh#epFcl1dqGc$%F_cgjOz^F zX)fQO#`LqkF~yws4o>E-K;G{(muha}0r~MlgKa76BDB$WQ7b*xS@{-f1Yh%0%Mpv2 zI#HRpv_X=aTQT@mLW&nXxjhT_%gAZ^U!iB~Db4VPu;f<}iZhc|2`tSJ?p zf4ItCN(qStGZ2}tZ6Gb1AC2$Eb6)DG=xFf#x=U^5+~vO1D6!ty*kWCwL3K)d@m%dN z84=4t+Z^?{EV(J=kly8ACiw|hGs$D_eDG=Z2pHuV1G|OX=0(0=q-1D79%G>h-BDpv zzVXp&{*Px>pC>#}eoSdQboSHNs9ihq+Apa|N$3}zx$1P2FfBBoUNO7T__w>^ zTXKHCS6_entCS*H(ruy;m2U5F7%N^_5@b`obW~}Bt!U@_z{a-Nu=Wvmk`w}PODJez zx_#+S*xG)W7NCJ#P;j&NRSVTvkh6l&;W3F@%M!t>&xYa?qDr*ITTC;wY2M`w7qlsS zqmRxUFVrr)TlcWEOo*5pV^GA{geGc54_Pp?G24+q6;8`!;y(p2s&Dj)b#`a|qQ!}Her+q(~H z-uU)3`|jqN@F5Be%WY(3CrK3L8jhHOy}0~6U|lH}-SmE{oc%f~xlLERWapkdD&E%V zI`N|~{`WT8b0Zb+T9?nw+1MEDJ}fZz?EZS%GXw93b)lq3cv<~&@0Ze|ucbbB1XG#s zMJe{DB^3l_eQ+YCj~4Zbq-0W@XBF03w9i%Nn3og!bzQgT4Xdc)@1s1-i7$jt3qQG@ zSz6L^u{_a0cc-BG))^izz1G0I0}3s** zi%PaJ+kXvHs-&Cy5o95o&BYbk;tW6Tmz`d3i3A{gfaGx9z?=11VnTR{VK6-(#faUe}%8jf{{{$ZJ$u*bKA1)XU}aeH&D;?SCzJ8?`EZaW4iwx zx$6yshMv*uH>{nl&#@6d-A>9g`y0qyh!_;Q{%>%Dh$sz;A}J_{G)R{S z5>nC)lG2TIC{iMV(jYC}CDPr}B@KdfcQap~=l9OMYi6zY|2fNbC+Bd^-q*R}laB~T z?$a52rbP7oJd!TT<94?(Iav9Ln*5tShY~&)X=)%aR2ASEg4yKA9OL_v`}(_D0UZArq0trf z5&KMQko#WRLDaQwt;+_RH42V@+0!y^0=rDNv$zgPW50Pfk6MeciUAt?NBg{W*`|jb zQJM@9sR>bw;T)*Q;rH9tMM^Ow2QZ#BUga>-F6gDGP1mc%h5B!L&ctiMzuqf<7UWx4 zu&C5p{dhy8x#VkQh$Ev@9qRl#N;!l*EG>Cu5spfw6|4>2}@q`!U}Pjo0J9Q2pG_e8#5<`}*oA^rQTPEj$H-zJd<5AXpTWFQ*d*_=}p z&o<8yH(Sj;Jd&tzaQYFqLE!J(%SOIFU7J=w>i17#maDO4Db)0c_R6wv+A^-@JxxfW zJLlZwiqsndxz^-AR@yEJ5u24(J54{&Y6NxB|J}d;j^!xIu#Ql*_SWjK&Q<~=ogMz@Z+=% z6ToMrE2j{U8!Q>P()^R$RnR$SNQ^eHG%4ry+Qgt!{i%TKht0MDxeimhUq3kiJBpY? zzl1A^!EwlzcvDsy4cdINz+Ff_|+=XQ~)cbdQu# z6!^?f{^$F9kCJb8|1vC|Gr+-U{^P;7HS3*MgKd-3yO=PcLSWDWbGiVzM%F;}KZ?%r zI;@^9IOP1lN15P%O3Yjv#TEXSDg=iRKoT2Jkc%~09jP*+ zbj4cm@8v>-txde)GYrhU`!^4MPb}fn$Aw+$fA{sUG~EkH$mq6-F<4<4ZZVKI<+=Ol z__NZml6IB-wN??2R!DNWj+S)$_V=y-Jbytqf%JaxMI&led0m{V zbu&xebg(~UgR+pp^1U3a0BKGA97~|t!{Yj%;3m*U$R2_;3o1~6;8c3z2!F! zsi+u3t|AkYEKL}wu_{4xt?K|0IN(So@nyPY+|e$H&`BxYKcn>GATD52ics>;%tS$qHM`wocYr)B1JaJC zz#o@*WNk?isDkE(29%oC9XzG8JHP|~Oa~R=VnL255T{^EGJ~TN0#^})4e_6dvHT!J z78K8rje>{fa(>K8K2u=?Fp>?o7U(mB#Xv?0gxl4N-VVcE;K{vM332{wOcrol9fCue zmuf<&Cn}t#;HndF?8mNGuLu5!M0`*Xyz3GX9LmKCY}M;IX4!uK-rSxM8mjOtJsK(s zG7A}XmX^WO2Zx8CzZJuKNJZ5MzZOKBkPWM;$pYozy~%gOKJ7HWEjN8j&{%p z2zWHSzYcUSR3)ma0)1U!0&0~LP(Om<0AjWPFY9XtQ3o*VK>-2arAS(ug18i5hF)bU z0rLi)5udA`C`UyZxaS}n!6jz)1a${O42&4YjegHMOt+ zKnmbdAkH#9l$Gy%kvIpcK(&A}^fMf|;d|!gpUEPlXmH%kKKiw1T7uV&dgJ9wt_D1R zK{cV<1O#Bsz6;?xk&$oV6GF5au&78qSTTqgHNd*$x!m^v^yuK$M7%+Y1Moe>k-@pY zK&ztoO)vS=Fwkhgm4wd#ESA5oFT9I8L`1c4I9}4a&+^(Ef(ame5fXdkwYxpUi$HV= z+7sZsfWqNT@BPLDv{)t3-v2T#zI*|7HsTGJ077}ejB^O$8At?0yur>V9mAFeKwD|4 zL&w)g@oY=V|MG@^R#ZT+3mXH21vpx?$N;Vb%l^M#4Pi_D;h-;q<1u9DKqBqHiUVl3 zQQy4=i#Zut@cnNBZX;klg`6d~0?G@#|4wW(#H{Yk6X)eTTe}D{<}!xD=Tljp5!eSa zxtjpFos-kuvyb39L%by(iiwN6xw?WaYh$`bQ#je9EFEaLFJJJHXJB9kx&nAGLql5QY20HA{L z7d|;qH2-ooE-%gyZ;%oK$MnI^4{9_(`USBI5VwmU+s^KQv0GZ^!C(R*3JQXT`T#%= zNc97y(NL!Re=Zd(xN^w&h!F3}53K?5KOy)T#8T0$2HbR@QGmoQ82*q|47&JCDe#E_ zn=kCx1(AJylD{@<-tQCs&#IFYdcE9ovY4*9*W$A;Opa-Ey^p>=Zt}zGa@{K)olmZ> zum4p5f?;$Su+hmYD?`s3Xc$OAoh8{*79KtX&J|#3K~cwz5(W{<8FCvWJ|GPBDo6xg z4l?K5&JHbYZCQzev@E{q&Uo3SBMk?T;AlVSkV5r);HQ=?JZ7oOjm76ZJ z_M*hx^o(l@AD?Iw^Tq>MGTQE?rIEPpuW#6MF^PQ}9lk$SQ`Dh0f46`QhR^dh{#PIB zJfr>m{YOVfK>`H)bA*99SW_!5Au|JfNioty1O$JuhGDouhHJ_wnZIw}%8waeSQ&D1 z%()b;4cT0PE(NL`WbAOsZr}O~Ul73E;Q`zgcq|d*6EXWDj6IN`EG{no^ZX&|>SGXL z8y*$41-2-dnsjU3SE3&jm>r_QSGn|`z8n0EFs2|{L8m&P5`IusN9Qx=7cd3=GmR*P z2M1#Zimp!6V|*Z~)8i(BwbM0*;_N%Y-8*rHyhRZHM-w)-d&dEphwB7Z)DZY$fBg7Q z+wJPgYjy&@3qbgZf*cor#ei_l0kZ~lNT5NpwA=uJ08paF*48s+5So0`;amEWPLUeJ zXI1zK_=GT1!1o4>Eb!TYY3^I@PvsLRhN}ip4iHbkw#>hz5+V+;BgyLZg`l7vC7 z14Z|2}r5#2QRL#YXR$Q zT!Kr+`;eX@QWZB zaG(1TC=1rtEr!H2G$8W19~1_FDVp3;E%^7mCIj%bXcauTz{NrUMmnFKQ-e*{Ney_v z7>KX~JtZ(1We!yl;$1a~1KF32En%0(j;J5?;b%?ogJ(aApSfkqYkYL+JZgl#dW15LC4#6z9JJQq9N>Vjky%_AG0`=V<0s(wbZWEb6My~{TBXdG$w;d)c4fS zlYx=v?IO3#hsyB-|GO;PDMeXDxy8>-z4f^`rD>YpW{E81V>}Rk>0m?!DKw!f1#I^djB~Gl-#?9#7&+%ypBrzJF<2}7+h8q}Ztwl%ASYsPpJ+>!HB&w|y{6_`#iXK)G8yuk*UEjhL>%ro9BW>DF!g#fU&qW;7;D0z_5vGu z&DV4|oqFRf`?~Aqb_R3ebKI@m%xtP#7z|E2DQU?!5jdDsR+L3ZQ|U@nOJt13PZHA6 zKbn{vsHWAw0u;lUzo*l^^H&F_2~LqJvvw`{%)mICb7=Nxv18-y5VSm|s7BR4x=NkvKQcffQ&zsh3Ryfuxn@tf1U9Y8&&p}1%Fy6eT$d3EQZej*x? zm(q>)G5+79(U7ELMalMeg{NY?|0$h)|AiQ-?>0A`%lKL^Fj2_;Eq@VX>kf&ho7Zuk zjSAPFZD&;2K9Ps`&x^o1=f4tDE8r(hC7)GV+|GA%IH_e zm$$CD4PPZRF+Y2VhxY0!i%Q=}`Hs-S_O470ZH&fm*|@MXLF0RQN!IqR#oN^O4xlrQ-AV;dy88 zLz+d=^Y-o%5b%^;eINYj>%=_y=e8&n=AYUhC841K;o-kBikV-2^!Z_-WopUlI1)~L z@`8dW*ETq)`XR&fZaQbTy?y1Yc;Pba130obHahY4zLoVnr(|C;nhfm1LO1a1vXD}g zk_nzeysPehoxZzRu&>>HLVXK!I5ONrK~-6IrTCBW?uO!B*|_C6mV0^kNF$%)!@_^5 zcDizs^T|<4;KK*epCjg19gutCZ=tq%kepd>72~t=a|h->QG&pb5DG?L398gl4o62} zw{rg*6t5Ij_~L9lkBTmC{8$Im+ZJw&xxnavg@UDr_V46)&M?bDwe>L(R-(Q1^_gOE zb=y~4Z-ZuT@xJ^3Jiw)H8&EG2y8VP6XTz7|z4>W7gvXlq7{MNB&M?ID5EYrdiH1cq z5iG{=9Z)U5XR~XP_B&?31K8Vyq9Qi;G3V#!Q$y)aD-ForjML*P@py6$P`A_1HUBMe zvpkKqO>Off$BN@{qfa2DfdV4( zA>J`${I{vJ%wG-mP&F!vk(7Lv?Pcyv6maB32_Z>IN#~U~P~OaW@I=I<@u{h#seEj7 zaZ2&`54YoG!MDjy@+Q3?M~;f1<6&{^YUsc&bLIHP5()u^yV|evUpLVN1yQdI*`<(r z7LMSlJG!-Ej%sVZgA?Oww~Lb|`0wu7&btiLv!A6MeZ+?4$?S=be->`j{PspFH8*MO z9r97n_#IwF8FkB_r#6Up-ofOQ_)+ngcVeQPXmsrP{@kkrz0Qv>AH@Bz9Zy~o*egJR zMueGI(*PkNfrOLZ>s;aVq~8Z9NI+S}Lbe3@F6buVarc^O`=MDB-U@3=4$H z$0mJS0f(RIwM2R)w0vsG)|wictIG$_UIpdQQeBE@bXTnTdFpkJ)Z`&I5SEE(8iQac z?lp28o)z}#A0eE*8u5dL{k&Y6ugu<3J1-#AMn)Ukm#P_mEA`_m^Hnog_91VYD5y!l z(B1u{eDc=?C8T+ zc>#snvT30K4?|ka`H2c#;^Q_JD@3iEO(bn4`tG z?9@@>@#yq4p-sLwS2C`@3yBNZ<-Q3yI-jA)vY;W4a~O0tYf=iohqgR#O#S@0z4J<7 zXYHc&#*eP`IL%lgj}!M*{nGA-=6weKS&dY1DipZuMUK4ER@^9a5%CZaD0tr*LPBAG zf)(V;68)*LiI0885C!>#-9|fIp`xkVWnAL)VT;#2+e3snMk1YSBuY7)bs}1sLz!%k z?o#RBsdM1hSDNQ{?%q*Ul&^BwU_&UmgtkQF-{nU#G2bv-HB-KkJ!|tDu%Yr3>o|>A z&-5AuL2@0`ZFk+3T$HaDxSE=q=+xL_BcUfWYaYUar{N!>Mdc;&NdG>=x*n3;^Ea5CbuBkyL~4B zIO8Xs2x=Cyt+&dl3v*K}zNh#6z@GW6CyMu0Sw@-Or$N$Ir)GP~|A^sxURH&qSL~M$ z(Z_!cioA-cuFwT6e*eyig8q|;Fb*?nM!Gw03*RCu7ZoxdF_8zY1Rtzsuexz)b`(IjsI+KJo2^livSuff254|8Swb?+-jNcYN_DIDa2tUw? zwAv%GnxJ57F*UQ7+H=09=okT7KaZ&*`&{EOCR-D|(q*hcoNbdC3;LIL%3=)JTRQHC zG|9!8lzCRrBC{TPmp1H{Z1OfKJ0A|ZMw25OrYGD*F60t~UOXglI`(~qMt6YikdMRN zZMThc=&^mA-1_?94(8Mmg-~XGc7pTSc;1;LBsSD0PxrM#-2cw<$rk7M>qp9AMXgmK zn^Tp70p>N4yo@>|vphYmhMx|Xiz*HJGg?J}U@La%7w-dOhzGpc*O)hYsqxo8})bnlDNfh={IW(mLtP)A^5V8Ce{)RvIBuv09$ zb96+(z1=430D(MyA9q6QV&HsV`xXU`(wAng9`4J~%G0e2kqVvGy>)Q-jjIA>GRWb< zw>1TZX>xw&R~j0i*Mbnrfo^JeS6{zg?C)Q1uj>SSaQ@F9=c$YQ+M2YcA^EVj9^Lu( zn`avd%TlcDTEYQYngPJC~c#xDtP(2mK)n7mmjGcuSTrB*n_g<{@* zmj3nQVkgKr3s+TU7%O!D(DJy1hv;sBwpg%b)R=k9nu%N=M=9%6^&5Jh{_%|3tB1X8 ziSVD7<=CI=_DAXSPItTR*=1&pl>Az%CTD)kWTR2`thcj%V0u->PJt_M-_OrcSchnj zMy@!KfZXvz*tJp5<0`dk&zQYz->ImUoZj-%AJIJtHb-;XvYkuC3K`0nVlw1>EgifU ze}guIY9qdV7Z4sbjI5Yq^Z&e(b0M&wLF~vsu+ozAiI}ORjCQ%lCO+6|^bLy!hxAie zc~Fpj^i#A6N!73Us7U@pZH^cttJjuK&A(V4rLjk2L0wIl`r^EW^fy)Jbup|R+T~Nd zuLp~NOHVira$76%HMPX8g`8K~S1`h2pkD9O2wH9`*VCjxn2@Xzr1o>MK*bUhA2sD6 zjPd^7cr+aQMJe&nYM)c$AqYsqMn*Q=L~Cklz|(_|2Ci@jhAJ;9f!Oo@kr9Ap#IOOE z0w@{|*9!{^(5Mg~CIkm(0BRiU?4V-`@`1ouEg>tbqNGGB=0`M0&KfqoCI3S#s z0oVk%1}drmZVkNe4#w)qpSBPh48SaO%Lx=}VL5xh;%fJ3HcW?`{a`;R_&`t-X( z76gj}+QtVi5CBDNY#^N=B`%Hxp=4os1xiJDab;x=$T}(4yob7S6L9Y8=P6RUbxu|9 zS0~PLCqpB*UjdJ5BmRo(MIXui6y_F(b97W>QnrH7Yp=6HB*VJ-VS1gr?TRZYGAr9T zRYiBiL=jX&9{;;l-%p(E@0Y(qU1sGGV@JisTSoF|*XOC2jc2+(PCF4GvlT7^ffChD z4@{lvKgZ8iu@|$;pW!8L5SJ%tV+idnTFQ$4+7UdspiSl)IB?ikm=EiZstG1rA`0^T zK#D<_5$L%0Q#>@PB3WJId1vH-Fv*XTp^?$umy=%SNT5U|dA#$3^U1#?J9Kj7sN@&h zPPX(sS()FX_kJvSz_k9&sRE|l*x0MRuzIc`uhNms(hvR#QX}~{)sChx)KtwEYA_{P zZ=`V3G3GJCOK?6NNHi9Fp}35_Z$zT1CKJ8;c<$W=R@Gk;RfkiuKV*OStV-WSoEReB z5hn|7cfY@gb-_Bf|+E2 z#Du2YdgiU2U1xXq!O;;eCMFP0PZ$^gQ8#LP590;^Y2)5YBJEok7$CN$eN=Y!iQD#1 zGnk|xQXR|zq@emo33Be!+2Nf89z_R4w?v5ZJI|WD*m>&2CfK#C=Y7m!Rs>;XuDflz|E53E=R8Y0grh0qH^Gigr`xk*PHryGZsOl7+HaicVg zJ;&n8dE!)DoTR0tyeusB9*GeWrejR>mR7~v-9SQh!-cdweu9pSC}?#%;%|qW;VDv%8D7CVeYX8Nmm^ zEut+h0u!zJGUV1gPUECl=&1rqL60f7)2ct2Qz4Xf%T1a1sZa+=8I#MZRq!|B(|xQSL>D`v@}%0&&LzU}OVu_!l-&QUUrU&2}l#o`7E z=H*MM;XXM#1I;N4Vsm-!0#PE@F^Rx~2{Y~|Ql4VPWM}@`iV7Zj`XGo?g}BwOD@OmO z=ah&ytj#d}$_5Gymfv_t75L=&295K_X)n9AQ_7;N%T93WF{qrmqkKtJ+C8BLA!0y3 z#L%mZDzQ&Q)5$4dIUIQ9^IqMf_=t(t@t*DLz_O-~{HZp_BMstD`LTDd?)H(8Kn=EW zWjAY#QLSDT?!}s(AGAYrZO+&wZ2aynaVE8D(0ap<0~+}Igid}>o|Am%4uH}0`jUB1!?a;^s2+NC=39r+kK$Y9V!uzL=n`=$-;!Y?2 z_}d>S7~5@1J*6kd0@%M?Z@GS3xU(MR8f5G^mXQnVXpY>_33|!W&vl52iS}<}upapP zZq3$0OTgY1<{s-k@J1bsQ47#td@k^z#kodKK~r&J-IA#<#mT^xXkNtBjwz7p-psNg zKVAu?nQ|?637O?s*lr*T9?m(GT$Bs-IIzX|Outljv7I0Hgc8H_z2 z(BZs2&B;*zDxF&s$kPC|w#oe_i9%kB(Lfo2YYSMRY;fXcWkE;+kUwa`fUu)u-yf1m zhD90tkD%cIHWjEVn5kwC2vJWAV6Fq7rsKZ zPJSLwqB9EF$*2;ARVG)D!y(!=^VHVG^p&vm3sLP$0YHPVOTM4FciZa;kK=>RMw3Pg z`xP!K>IZ3g$#BGa2cXve>1m(HhCS;9?gv)}9iP?rj=g)i`(Gkm=j8E0cEx?DO-N?^ zi@x9qS0N``yrq>Mzr0Zr+rP;sz8cpWQ|cCN+~tzc^4&9cdnrsIAuk#2Jiow2IH8@p zpHE?R+NA-p#lvWnQgrgOA3azmc%?uGfq2*0>m7#qhqcL<-Fe*<5Z5?Bp?Gaj;2odt zVs&g;``gpT80ML3RD|DUN6E5p79bSl-=N2wW+p!`61g!vT`&?o~yO&$?*gQDV*OfAN-}wPozGsX^N#%{xlv?NUpw;ym~M z3}$G>f;f8{20*lf#j2cl^uewR4{)XfOGFd|x@fS$Z7IE?y#ebZgsJWVKMe#4P@G$w z_-MOtAYgxyVQQ@%cV!|BO+rX16L`L?MU}lsKE_=Qv!onmQG8USc`BgSB{9zKk2%2E5VaS75rQUqX|iT))hWkwH@C~ODe|C|3=@Bb}i6i79*q%YY!s3 zE8u>JfrOr}Y~9L14x59&15W!;R-$3`eWsmq8v0q7ONra$;=nO~@wF(=tj~TTtSAttW0a zgx&TOyp-2S4L}vW_+nr^Rfmm$#AwA~6O|g?MMbafBFSPeKGXSw*5&05?8$@2f-dLW zgLi6k@X)gIb6g|N#@+LMPqZ+l+~@&*DNfJ+tkXvPf-vP(Wp5b$ZMK%z;kB{5uLV&P z2N~Kv-}l1Tn{(=&F*CEe^_v(2Ny1Qg2wTQznbx_&wsw_4ehzXwM&(agh88L_3(5V9NwM5y>=#yG#}{*KI(x z0j_JfPXKKe6wH|ZGKGY82=)*&NQbE>bm~3flpXq@Ch0~|M(}gwW(-gj&{odZs z`(9bcU*n@Jw>Aw;3@Sa>T7Rue_uv%huI%lyU3+4ljgPjYUL*{#vZvl9<@K~J2<@<% zt{eV6Wb)cF^G#af>3RP~_=E+gTfpw@dbu^XT^>+fOSRSoqiEFj8R|GGR4G-|hZnDe zq1aYcKgT>91p%;-=?CVM>?do>2l`5^puU%UW1Un`N>2x3pWDTFZ^YGJD4%8D(b+T7 zBBrDl-%26|&jAWjuDF>rfdiX4?G0@(6Cg-?S34I6mwoF8_*CR=+JPAVo8oQj;EEo& z#y_fJpYDM>3cOm7jg|ACV9ML1r0cV@-d5h_g@q8O0}BYS9@W8R5JK_b zx9|z9ZEZoZnTeqxG!jF$7etr;r>zS7(foD`0U#d%^KB)eC9w7|>@pOxAY0Jf!UBpl zGx|*+HU(;dO1O*k{<<_^0o$WE|#MeTu*J_HgSou#gv)aDxe{cSsN znWj8!R`OSq8r*!|#*oB1dZ>glI6vXMHFZm8KZ|=_*)RL+tx-{k7Je21C%u2(y!rl; z(uSAW-r_>*FC8rpcI;{SYNtJ%@46ijs2Z5wT%ipNd9_q-J(-=B?7O*r+9Jp-K@&1E z5*!d{2sm7|SJ3qDBzAYv-iZoWuug1WI&TX*oYL_eT4{@TEXFZ3_0O~1`vv;S*x0zQ zw91ynBH1A>N3`n7&M`ld#rhLd0yzLuCej!LwmJ^mRR z^8?AslOX5~9x1>+ULHe?UdYuOdOGm%zg<_$Acd3;cyL>v93Mk#U1!&ge_|I+Cfdgi z*xs+e<9WjoDj$JitwgV;hMo>t8JUgflg;V1I>Y5l*=B-X zp9hzAnN?&*!0aNg({EkYyH&7vMJv2^e&K{3+gpZ5MDSL(P)W69?{n~#E*vl-A|o_- z)ym3>eznHr+y331kGzYCUo8gzL2YvZSVWU{lFuQn}h#e!`kWxbC#F%p)jxNlsMm=<%v=Gtbzb0YQ8sl#kFi(Es0P z;qng-)0?J8CtakIOPF7;TjniQJGVUIpRGS=`at#gr{z3RK{sU7kcfxeE3<2`L%ie5 zHllW!2N!$6aCtv_wN_V1`iJv%tKWx^kTjMVJRQvfnCOi3_`gU~`P7Ne2*SA= zl4awl=P$8f(+U~juuu8(hu_KbIVcyw!GwBJw+L|9`mof@l)@z;f0sMCok^STHhZ1G z5`fK9{85utq5Bi|mv=6imy+EAK@|ilL&!gAc>N#IYN+Rnt)8fZZ?cN7J>EmtFw6im zrwG83ch?uES75s?&YuRCmrg5O}_S_Ji}sU=8XQ z!SJF6zF2@#b@W+x;(zW0_^JQsTxG4-CPXS5rDkeLDmmBtqb25J=CN~w z`B4Q(?vtP(FrQ~;5s8a4P|`;F;|M{#~PW>`!-}EIHQacVh=T2p7*9_detJ z+kkkF1#Q?(|K%>w2xyuEZNfyYEj{vjqIPyK@a|3LbC^LTMgIg3s{ZFro?V8XnRZ~j zk0yz6VcL0C;<5Y3v^}{nwo=1Zp0#dR5NHVS-4VGhIEY&Od4YvqGDcq*rLTNRJ{Q(8O8JziHo-{r6@|uRqSD>on_PIO)WWW;AcFQ zX2=Cle$e-y$)O@T)t$@Ov}f#EByWG7vh*C(44uW^hf*U~>Kbf40DaH%XXC%V|5|?L zC;U-}=Ah5bM%g3LgkLXZ2Xe-o=99g(g?mcKGNNS!T?C)3Z}$Wg+935OO{_E}zd}Bc zu5#D^Xqd|RQ7fxx5FLL|9_GB2@hGFl`J3~TgofABw%?2ed!*emRV+O=V!a(<7c8PQ zL}0C}y;8L}5(9csxZ1ZQx8Wa`3Yt^Cu2)xotorio0j7??onHM1Fc(L;UvfWF5&YZH z6ciZMOZt(3;I;@|qx^R@8xCy= zaa_`@aTeAFQF~0I-R6=5F>4^B@Ruc1QC0{XccZG?ZjvtN5i`JYacLQbxS^|_?j@YW z$jDGxuM?`j9U@Q3|BU-x5dQSU01f?qcCEnoa-REyCq?_I^PgN01Vzvjjt(O~^Q3v* z>`No_&(f8r+Fh^oJmvK+_iGi2XowIbevbO3VAQ$EN~^)A9&&z}dct;K+&^k`WDp?F zG)}`BIBHnl}9@8)V-OF|0e0`St+dKPg zN=_<)tpSuVXhALGvT^oYWggn$crk2m7t|OXW%`7#pNrVOONgjFM4KY>cY>1(;VRdS)t?@HN?p{M~FWlzdBeOcp$A9zLi{WCQkf6He z9UKb3l~=%_Q2s?Gw3_PV)g6k2%*fWbEe?!ve$Oi_JD`1E9a}jbDxyd6@sMVoM)s4v=U=Y7$C%F2)9#lCp|4c1Lxs>e#I zSIQK%>Dmd<1p=eL$oux*xqdGi}H2n1)2 zH%<>jDboD0<92xWnokt{%PD5jL=f-d&fUM$^tYsLsWUv}Uk!Mldp<*0clb&#f!-0k zs|iU@UsJxPj4Ehz;(zd7nyQZ8IfPQe#mL29bf5|s$YucEmYcNzx>zGuT?%JR+8aYBl zij$L`GE(I5Z{2M#kf4Ap~;E5jF;*q|W*fgSXw(PtcHKG#rqa@fwp=-8bmE2YIx zG)S^GtUP>VH9agIF^j4??4*Ob6`!C?oM~aq?HM_tg|GMJ4rXMXbNn1}si5KDTcrMd zMUUp8#oi2l=69Cu^@hRB3#_gc^J@Z*3}R9NffSRK*0bL4WJ^e^eLN`mJu_L=JX)R~ zU9{n5=VY5_nQv}eN9o-qyd!YmH9G1RFY-F>Xfa7!^N@6c`O$+ik9i`8lcIQ#VGu*m_(%xLU64`{1mp>g_#`VX4U~8T? zp~`7-w-}eiFL9?3x=6(n6<}|ZzA<1EbK6&&Dq2>wPw&xLsT%jJ2+J+a4XkCwG@bv8 z1ivInWjFR)BV{0xq9Q2I#a+1FU50)3z@xyrAU78T$9WkUqqJ!vlmZL78=3#zJ{m;K zXaLsCPCKz*Mtya=hELaLm)G!rX#vu~)B|hly-$$e43-mmditvIZZ%|sSc&t?3pa=u{9FzwAcFjdlKxt=fsWQV2br-rI5-er238~w2pSIx z>govN@4btn%V(wviF%ORJi#&5-~Xk<5LD1m;10o`Ye(GJuxa!_2QsE z2QNv@2IE3vMp@Z#R~J1uw=>vA0GojgI?!L>dI0hHXV4Gh-~hwwU~hj-o7YSgKw3yg zuSz#yxd*Xz5D^FJWWX4K*V;D=hD+dO;8c&pt$sLhBC?hRR)zxIy8P^M&;3SFzEcRe z4jl}IL5Df8X^_AUN@4IcF|)DR!DWEle;z1Vsw=m;Hb4t$Dj*ARygv#z3J&z}vj7-r z)_Drh#;b~N+_d040}m8%ZNSadtv>y?A$N@d8@@(`T^fkU!9)_)frW!3MyQ&r*3jEK zGE&E~Ix0RpCK?|pPQbpU_z^nM;~s}|oXR8O|RJ8Eu*Qz(RcwbTy${_T0(2A&2W zo}mf=_+O}2+bU?HmMQD4VoVg%dtyu2_BS;?3 zS4=uppYBgEm5j2D_9rBn10Lkk3mfUN6XrRXTp8`jE=RjH!!;PDju<_c6du@e zR$|sM`ehT7Cm`(Px3>O^OC3SbQo&!&X(~L1=@%5?3 z*KFsFsM5wUAtkJ!)hQ%lZB9&D^Opos_Tb{gr=t5yl~%T7H5X6QsWYghjbm5j*fj_X zKVLfX*Jh`8cH0LgL^SOCvICY~#SGQXA|!)4A^uPyR#II2-xBh_e<$P`LxIpTV|X&| z*$5V`4<%Tk)6bv^0H|012L5xqAU_Bih2Q}JaFALYd2)v!>tc2h%m>h%1#OlPDm*eY zwD06P!>4t6S~GD+X=eJ(Uq7I!VZ-;1?|o&5|8yUo2VMF+7v6G`nI|<3>&0Kp{lZAV z1-H^CtK1n5T^;mEg2r$UbXBYJe$_@rcrXW1J-&C>h4oB_=*ic=|9>FhYcEdCOf4l{ zb_67nHO$v8hHo-`Qvu_Z&E)IpVZ|&i)MO)@0@sY#caCfEGwWp?L6< z2-h2ahqOWBc)a$4q`W+t)PBhI8)d~82&^-gn;(~_yA4Gb{~i$c4>>xMs@$y*MF@nZ zG|iDLwx^Ile|g(nVg4Rbx}co7*`mO+nV1GO~%uj|N_);wO#)LG@Nsy8bW=P!jq(epjTc~SdVa88piyq@dlDuSeDeF3r zaBWkp(r>UOWAJW4PJ!Dln^S5L@jGwTaP7w|#_LUQLflA{PcN`=-r~qS3g&YP3k@$_ z-*N@Bc( ztFdh4yOWn2WnG-(nvs!FRDp9v_}PB<(HH4Om=ctAl1IAD6bk0?n{)4Gzg6ekT@;_4sSDxotSn@3c0oAEC` znl&Y5!z7*<6(#PqwzL!#HYh)Lu(KoV5&W(JgX+sN@D$6-&{7Ri&QO;HOOCmz=}qmI zO(Fi9_Pc*Bu5?c_RqSJU*mx>ZtVVlhPBRMJaHI|D&wb56Jx=MwO`VpNk53~iV)>hX-_jf<;PM8M56>}_M zAbj`QxHKW~nTe@s;LrO!u|b-KUop(6koN8{8R;q!(^Ms8)f(3$4KXu8mdE}VjYTE2 zBLy1bTtTekL}oFgN+SU`D}OrlUv&$qYbo$YI$>eji&Hl~6i${)bi43*FlUvri<$;k zK{AF;!e9F`!<}_5ac18rmUn?dghaR2gZSRtQ(Y%7W17WjD+zfq!9S}lv+eBHUtBjN zaM^9{0ClOR!Pej9jRhBW2H6)nW8E`^NGE+A*-b$rPlkOv8;9u(cTyZ&L>+glW3}Ds zlFyb2@1B)x;b>;_(Mu!qi2m+%MkbI$IbkDuu-}g5@zT)Rk*#!QZ2-qfFpg(L^-o}Py z)g0@S6==Soj7q?M@e^=W(3T5QtE?f_3&+mYh?aS{f5)a+|wBz$M7RE=x!kAeU#BD+f8M9JHvFWnEzQb=hrl{B8M#jHX^rrI;Qla}5!RzXKx_$XGdD!FVPnR;y14j{o4GnjZrbbIt7KL2i#%yym!P za(*%sBcDfA#X)c(H^P1I*#7h&_%L#uh8HFWlN=^=@5<9k)h(Uw1VQ!(f6~*7{et7P zxu{zcs@wA}F126Cn!ZkCc01iS9c}JSyeiO_y?O!mKv}u)h={ZdNWEQIxp+DS#a2Jo zitDOd>zBzPz7{%ebqTV~=X?zFL% zq`@15BO%B3i=?RX)FrR{)dGJXpVa(0zEyD?w|LT;cu7)H`bY-dH1mMiHvy^HN!i(b ztlzBmc)Kj~`4GyrIRUmn{x|7Law9C(hm&pPn{Nbat>?|$Hf;hzlkm(^&V-q>h`-K> z_i}M^T+ZuzFg}n~wI?>?IhTXhneHPE(e8JrS=RL^PMV{-17~WBV`INpNmkVZn}<)u z-lNX1-CrFWb3ICv@(L9;e9#m1tyh$?y;n0dI`W}_8~KeJD^lt=%`Usw7)avoYhO$i zd}!{w?kgZ}m7hDQH8wI5nG_Iena@er@04vuuUqYrW%b?H@U?+aL1un#UQSwhitX2q zPor&kY&X>PYR{GW>5$izcJX=s0vD;TuM~CbJOpfZliD80^~P@+62v4%QJ6YwroM4F z-tRBA)?HyNs0$5!E3Q||e}k`$#e|}y>GR`=53QOU7btiNoedNf=R$hE@U2MhNOFaawmYwWqBou3 z(!d?OEasw^z8&F!#hYF#A9`1kxTAx(<0E=D{Mp)@v79KGmvvPbHOetJmlgkp0(Q)l zkKYEQ17nU77m{dDpNYw)=P$CMqR7#F317Iqwe&VTKmTtbJ#4GX%6u=ylS|2Q1W!4y z$jlatt&Iw%YuJi7m7l(H9A7%$A67gi)bXI(BW#t)&CCb75Ecf4_=jJw=yXLTj_X3K zX$b}h06)LIf7{4$p@e)&s#7AR-(*lUquTZAJ~91GgjPhZrhDx-Gxj6L!3cAgpUyZp zDAtDk5Xw_mX=TSd2(;F6<#V2?sLN{}#XCJM7{cn{yK7DDH8#rL8bT(%IQv})|1hsu zM5Q6K4l5#X{`$&PF7m9N9p#yV7~AgehI_TFanhXWMj6-YKiCr9kBeQleE#%)aGxszI5O0! zi6aN@S>Zco_U+{lANGAWKXbTI5@;~ zE3*OY;Xi(SC~dCvJFO^L+&||oFD;#{Nwn=eLL0bn;G#+Uad|d4+I!oG2-=tG_k=+g z<1`RPRq!I1D)o&j0=AryN|+J<`QhAbpRP+x2$Tx>iiN zi}j4VGbREfVV8U1I#QC+>wdDSEH5dq>2_Au%x$=%a}dR-ptip}HlIsn+-JY7r?i7c|)0d2`T*!Df`9SeUK zh5hbbLt;cVa#JFlxo#3y|Ml!+Uw&R#*tan67Gm?2n=d34VD94S?OrS0^528<3=GZW zR#u5&QKNGnK`N#w^|$4BQg!@Myu+GTwpPn0M$3L|o;_xx-Te&_g5C#yULzXTl(wNN zYk97_s7Bn_WJ5tWV?@Wd);E4Ssd|X`{Q7n>(VdID4xU~u-esG@?xMTh>0oszaBnLIQP80DqZ!+hee`MsYZzjkdN7ZS@^S^PKxowi^oUi6B0 zdinUvQJlo{JFh4i))kzH2q*Y9MGi?hoqBY8=&2ow7(g@HzsEkc&jNE3=!xKQ4})CL z<9o4!wzrqX5?%IL;{hKR&ULc%R~pw_KdnXG!NKfX6M-ldAJQA>=&eb~NlDuoBJjLr z3fQQ8k;FK|Cp&l)@YBE>FOGqCh_}mI-UFjb3kJx)$0yRl9g%zYsG*ZV=$K`9!bxQG znj7z*PrJ7`t_wVJlk-3ILq}k+u`4}V!Exd1jlcF2wD=pdgLv-G+G+CaXoW(- zqvjV{7v1vpu=)CkUS}4K`SI5Gr{7nsyEho}r)v-0)~drqbYCI>8PCd7;Zan;y! zIyrY&VrS%w7o?^VldE6--`_^+d)L=n0-c{LA&viD3_<*FXnL!~!$J|8M1ci%2K1s0w-M4Yoe zBYfx+H(Ors0Z%dH+uTjn!X6|s_fwMidEn<4#6f}AYh0$s*D=3U+VAwtpsM!pZDmeYtDE40d)c7tz$zXS3j8-C0 z_u}@;oEch@l{1*O+xBDL1v^;$L-R+c%myEs?~GqDTx+Qlduy52_E7iwJ(B#c~+|~Ez;ZDh)_G;H# z(Nxxd`ysZljV4~~jSdcIw1wETBL+q5nJlT{z_B39DgqZ)$U@e2Dis24ldI-N=IFL$ zwzLQf;lt4H7N9vcH<9e5-zF>ZMM8S@E~8e4*Vw74V$9a4sl)Tn{a);FpQ`poX}D@_ zADr4V0NXHlls7nd#c5C|B6FFEGb(nAN?b-UL*I7R^6Fk~S4gCcTU>P5W2fV{NV<8t zd2+GkNZFD2Z>*R1U*1{Kr4DsWb0m2}LOM@WtOyR{XRF$p_udtSAikNM94zI9gb#>!hQ{2VhpCCZ;h24950qRb879HTu45%WLv{ph+JEz@+&5sh-CW>+MPg0Cgx|vCx zjjbNdGny;8vaPa9EghnI?3SN?G`vMbXsy$`jx58#^t@WXx&c8X=zY9#{RCalNsgq& zW#T+Mq^TwwJsM?6TC^%Yb%@SS&1>ab^HKz+X>US0L4)_;3E}iQ!-3Pu4;U zRH%*Eij_xU{>wEvL{nFL#;)hW=q1`G_X{<(^o$<_$gMEc;<_W)yB{TI1$T&wW#V3; z6XOSWy^&#&rzy%?PXv(HS!VqM1BdaOY^;or{|*!u{(NwKGpt{|M1?qaq8t-ZBlB;V zP@aLtpXx;o%k6$%eJx!XI;$RLZ=K{)rmU=>L0VhlZS=qm>}<`+%|piTHNJ0&xUmSZ z9(Hs*sqOZZzv{S2`f*Jh=6en{F1+p&V;F6cMm@LzciC8sHC~}h7MI^KATZ5{_Tw9e zrNY5K!Gmf{IXP8lf1Y}Y4Tk&`uW@mBTGoCJBBM|A1wOnyuw6h6?dEeeGkzOrao>d3 zn`zZx2@4AfNA=H=$u1Cy4i?Yq7!+A$$x|}QW@LcGZbo52F}r8xk_^fGOjpxf>bT+e_c>NYCy-QGQFu6jyg5)3^` z-++MdkPt&4!z?TSB`-ZQb6Kbcw93J03e5o2mM%>>?ol+g%r5t50n86WQZR}Qy$NvE z{Ok6Vm4`=DPRr6Ru3qy`V3#2Cau=0ZOhQ!`uk+uyQMlRAs>Za}mSY}g>OE<&aQG}pDn$hV zCH@BmZikUr2=MEqn{{m7;rDRtE{|s&9Bl+!psrfYP0UqEJz6bMxpDrXxM`+4CjmCK z!d;%Np1nv7S@WjP9k9%Tf(J#X(t@$(4($&Q9S(y#{BEkvtdFH1>4}3x52}*bMbNXG zL)4~gXKPdOR*bK}-qGWW@#Z>om}{3buU(YFEUtM-OWOcy^`L?UmjGDoz-5Q=LEs=t zMcXQKfYavRAa-`3!vg*f-2#yLk)~Av68!7e>6MiN$)_OcBLDg`Ie6gC&CS^W^|i|f zlyRQ@3sws{?LYLFgaJn|C$&G^Oo|-(TQz6odUF3MA>rE&{~_qn+*1{#4XlmK=MYs6 zAucS5wite0QhX)<3Jhavt9c@%s@5|h9JYhDJk4rP1QtaFEk2!vM=Er9pORBWR zQQDNkPGVv@Vk(CFq6Y-{{A`4OmM}hjeYlAHL>cD|)=Wr=1q9AfuFS0ZTmO2K@p_GS z(sq8Dm&~7z-}KxttP!E&muh;y^wEg9x2Xw}<0XfZ6OZHyIH&2x?I4pY1*koDr`Nj< zj~^F*ws3t#T(;1RgX~j`Cq&w&RaKoio!Px&O=(X{Uh?-Q`AQ;E;{u2Y@ca(eMonM7 z{PY8S^FZybw7eVwhS{4pQIU~UMG1$8hgD7o)Nw?xL7^iB_C+xA0-c&Iq-E!-U+}w3&JxRA-0vl|5i`_KL%vt(; z-Ec!&UVQ{xB*Dho+DoxA$^9Cda(yti1TGZ`d*YfnC`Q4gji;wDy&5bJ@C%ibmj{`t zRaY(WYlDd!`8dA**48(Z)D0w`s2Y1(TGFkk3B1HvK7w!CrS70f=@uJ!$HMGl7fcgB zuX5Z2*Xt7s-b+)2rdkg7y(F-dq7H6pZ0zS%77>{Q-vo>jWxTKJ8QIxzO=0v#u(c9+ z*|{zi;K2kw30E$Sj6h^wZz4cr5ey^9{GrqF2yC3Xj=**X#?C;V`V37I500-%O~`;3 zc-VlMCah{cO&@@#fI5k3kxW7|USD4iUW_W>;1bFd?Cvfy*Z|^jaMnmIjOKy^!#%Le z`2j>*3^bOGQ8O|3 z2Zs&~?NSz&95nEvMn*Vwjf=l|{({%{Pnk-!pM*JEOa1azy#9&TBSg*D#AMK^YwAlW ziB?%8(!m!-jzqRDJ?!JsKHpx;Iv@Abo#>DjImtOEOK>cl%{tdZ_eFKR9}uw@Ue0A z%{DcWjEMEIn)u<+Fzb!j4f(bd{xTmz8l^9$0xgx{B!d;tPd-;F31;FIsl3=QF&%Q^ zvyHDI-z)#UXlS@Fl~^t^r>ApV9%gP=I?54EY;~RFy?!%1ay0Yw@DcEP2Q5U)GmZ?* zJ9h^C$$1usE35eDxsxtLz@*6y8q*?PUL2g=aMFW=7Z0`~s1HEuuq(m#9bYt$CB^dB zerN}aj|icvoYE2#pMkWQuqYwP<*6+4yXB**7tq`onYW(IhUp&$d-xcy9Ct!t9kiP* zHT>AZ79Ke<1Ce7Q=`6t0v%B;N$kBa?j&P&Q@9wWN9jkn)pE@7@X_FEC7?IE`JDeV8 zW-6*WY&Vs48s*4yYu@y4J^5z2kgqDPbvD&2HHT``eP`F+6^!QI5t}WZM!-{2{FR($ za&D5fHjp#mr<0=8m&-ci^)D@Au7jb{_dl%?`4&j8ikO}bec)8-x$2RCB<5#ypQJ0T z`{~e`q=w09X6stuAt)y1x8PRH+?M962yT161vtzRx!%4NyPHemZkob~cNvk>#g@w~ z_p#N_M#FAXHH~ z`1~xE|N36}r|6-vvD5tY+E-;91YTUvv+bsJCRYyfF1|gp-E3OSeo?dx^Y#$M$bYdI z8k}mS%105yz#|CN4JcZz;EOu0l$d_wJ+)sHqGy}+^y&^wq!@y;yk&fcIRO+`@Cp7oy$=KtncIL8;VK4##| zJI>fNKm*l(~s# zcjg3mTmfFrJO8SPZ&Yw?iIT-U?=*8^y6!hkemEX46t^wAj;DH<)7^C z(s5!fnLp)4hP2k-7u%w{zcK7Z62E5}#rpQ)Wo#KWqt&W)XQb%M1xuLF-BvKhMBd}GJ%9w!S6(ymR616cKn80JMtU$2O^Gu}kLTHqvNB0O#oL19w`AX#S44e0v0A$G!{C%C(*3viBbPKQ zOKNyZ2BnY#ckXPT1f%W!!RP_|B-AvZE&im+TXsTb>bi432d{m=QXXMo!u^JpSezT~`sfL7 zd9Ne;NM4-ws^S++i*e(pDLvVp#mi=_D@XC1=>JB-j|L@ySvAcbL%7khWQD1nle8E4 z1p0IW6kdYE0iQTRe$Q+PKMJooe-!=bWzSm0HE&ckv_KCa{lK^~ZmFbM4lUJiP3IUE z4qVSnlq&=>P(QrqdAR08!mfMN)zNSTX?&0%6-cHqJt@+;I=NOUiE4T7#+{P$?mXmb z6@JKnP;aQh1zTf7!rGeJ=y)`XQ;Ix%M5qdWQg>^drDLcMs_mRv5N^jtsX(dzMMvNy zaOpNOIXC~I#40TM{xC0LRD;$@)oq8foN}XdYP5?&v;Lu>zh|!bh54hF#YL#MC);bx zxLzy;R@u&-k$3SGYW41qXe|YIRet>~b5lGL@MYz=D z3>gZVM^x0+KzgdRhO>2u-Yhh2mZ*C7BYXP?4G&lw_0iqGhkOqU&&o6-d0gJtHz0o_ z4o8?G_VkbGq?@R1ZpUb4iTCb#e}yK6*ZD@2EGU+ion+6NFC`_?faVXB545S$urZKl zVVVI-)mobRN+~LAjm_x{3IQH#oH<*7%b2jKrb1K}ZI181&UWpAb8v+mrE?&xY#+!&hrzsegY z^2f_IpSv4h_1~V+&bYR=*4I1rdz#u1dQNU9@Aru4=;%xyKek0KB>@s}fd4W>SWs`Y z;NkvWfFiJduLkA%)6V3O>-*`xAmPxUam_+fl_{GiCsE`9|HevcylIiEpWg;We7C@{ z-`=CJ{*sCjJ)wJz3|5*?WMa>A@AaH0zfz=U_UcMtjig_27&;M|ObX*`&*3>OG#hRM zB|zw%V&i;GbK{3TYW2yXYkxSmNV1Gv*J$Yo9?6r13$93LA;3~6Ob{yn)7oA)ZB?YIbdGMDq6(00cA7&k4qZqPiV7Ximln9dU3Ks_m!Ild*vk9vDz@1zB5D>*SUL zwQDtlFM#jo4&qDRxv}srAQwwOfWSf4Tkg=7-_|Md_bunQZ_Plf<1LtTRXTGyXN=&y z9V5hS(kFy8a%QWe;~^NKgZn1DLz%FvK@CgorI&w9T%GgLEjhe%YpVKNa1ZF<9-x1M zkQ^s5KRYA7?D;$l8$vK97Gf_z0IQUP0}P(v{r(yNvVaWVphN%UUOxq+Az`w#;2!cZ z;CRCWSas((K^oLo?h^34FSNWwlJP!7zJGF;LJ16Z9+APn$KUc%fxmW42tpr0Zcl2N z;Opw6>nX45fybdx^U~BtEy6zWi@4kI!w-q8t{7R~E|2@n)@WTa1*I73Uf~ z_Gnv{z1(ShILGtMdR0d0RZmw-;ZM-;)$OdWxo$I(w)^6eQHV?QWJGA<6-%IDU39q9~`stX{;4&Nen zG&EA3u?`ysq_kXXlLsocGf7ZwBCvDv%Gp1d?(v|*e%h!j)}u>UDks~~RUTd4YCjVk zH1qX#$-zfxl771vF|{^ZWPY(8y}|wUW3}_ivfA@!hg&;#tP`$#=X=QufoN0*bG5W>YTWLS}e*@8u|>(Y*ze>QK2!tyxn{56<=phS4-u+SZs?a_$#6~?)7K-Vw-;+Vab8$Snq;`~|m zdg5T|5ytVwo@5T1?JSQ(PkK-8NOjHA301mGrSZjuwU7~AZ)*N5^mNuzK=+*IXw6H) zWzoX+SWWqZ!_w6!cP$Qzb#FJ3{||f}nLgvukws~JeiAK)Lxa{4@dchvz2ij04in8O3?26E<6O!3|?6+YmJ-q=g3Y9cM$VM2ZV zabBTxmplxW=G^oxESh=iqxIyjqKrm<=@0Mf`N0i+H`b$U-^Uvot2tS9H|S)%TYSk@2@#Y~M6pM-3{16C(Z$ z8Q=@%=T@(`wvYKYnOs5FQ?^Y4V1_V3(Bv0pxq6I;NBYCGNd1<-HPR)dH?R*Cn&!0v z3o4Gbel;#73~r!S^FJJ|>5}u}<%LR@L3*D? z*oRir`0h&J7F|K2cz1C9Nc9%0zlA-2@>W?prEKW=!f{*z&mj~lu5*NBIYwa5~jZ^(SD{MbEg8rUmjI^#A#YN5BYH>!z1#|K8(si<~mkMGSxJUB=Y z5aBePe?=OZ*QZzUHo3|epi9fu)g|xiz}EVuU>&<}^T_RS$s;In%}CkCi<>>;@wwd# zwhN^GP>gDg1W*S?bJ&#UwF|{}k0F2m4o$8Wn&#(sh1ituwrvsEoj?y*J1z&WLv#Io ziPVenu~R{7d7BKi=nVfdsDVA|Z_^gS+uSX`uQ>xQS=our*KfKWOK;`}`I*8KUFJ;( zGZSOE^Nw%af?{$`6Ki$uN#Ic?`I{>HosjPMbEo6i_N!MDbSH%8OR)^zkBcaPeCzUR zNm}>h-pOFihuRa5`^uD#F&FW6k2b<}HK2FPUv;-;&<)GojuM3nU_S1XQivSoYvd$0 zBpgK8CXy>r*k1rQ^3DoQE-QUX=fghsY@#AO{C0h(Ib7Vkf;ZgzO#OuJ;9Rqnw)42+ zA$02wIzoVD{TrX3SzFag)!1gPlmnfQOb#t^-bq1vmK6V~4J}5P?B2B}lLhZI2U&`X zO0ePyM=HC}9r#UCZ*K2=-<0c~J7ktl4(_-c6+0FS{TW&E2Q#9c|NIg_*he%drxvCv zZc$u7zIB_<#L@7B%+~V>j)%gjj0v<1yGva4CpR+H$!|f-6oGZ+ZN@FdvP1Iq(C=(t zRiXhXDe*O~Xh^G82F?!YGPh&^>fA^f&FAwY*i9jqv=J430U|Q#q+b(wfqs0XM0N|3 zO`qjo;b#oL@fs)8!|^?Sen^y|>@ZaEG!~ouDMi@7R0AJ} zt(hUftPS2VWj=v)*z#2Wc1Bq5;sPBbB!=F!wBve4<@bb$ns&>Jg$(m_xpqaAg@p^v zLjr^V^Bfm}JPf-1(Sj}}VhsvVa**>>SV(jR#tX)$u{be3w9osDMO`Y2dgh`#U!Sd7 zP0xB)*o|KBTGV`HMoLteN9n=hIV=|~ABow8jWI1Ny&AV2AP2yG>*V+{sb=uByqNZ1%2(vIOecOS}~p=2WlEEa-@R03zsBH%T*2yP@SR7&TR0_@BEFi8p+C z7dBEmjCR9cu9cXY8rc=wz9@02s?1fH?PoCOV(v4R`i82`$na@UT#n}2o6xN{X8!Qx zuFq$2xu+NzglO)bA$+*F!6LPOxPD=~t_IiXqfU#qS6I!lsDoknFbFIA|82blidG4} ziafpy!QLIBm#3y~jf2bOx723iUFs!Iy|c5;ru*xQNNrv>*RjS?&MJ9*z)y$51)*vi z)c8byQ-5*L)*nMopGrfY-;2sR0?7`$Mb?Fs!U$qZt?eRSwVPe$r~U{CjnIHZbB~A_ zY#tsx3yR2%`UJfn&L#cvr`6ln^tER|Lrd3z=4ilEeMPy%o*M{P;tLTC zP+>53`v50|!b<>c^1ta{6?QCE(L;|86vZF84r>Gkm~6Z>HOjI~H+?{?xk7#o=WCw% z;uGxg_e>8LkKb*Ff z=A&R_VpzaFyqmMF&9mn48P80Hfq`jLaLR4%?c0H(imrixn0qDPnREe#SR(tVR&!>{ zGpepVkbU0#gU!{+hKA+cje89ks4T&p?A%$3&T%5WjkA4FHL$@)Rm^8+X3S14KVMr^ zPF}*~ah$srNdN1g`q;02iVhpQr(VS1<^9XR@Son1W7){W@mlXjS{C^mA*a37KmXpT z*VFdDyJmW>+0!AB>=t51syEJ>@%<%}-AMUVb+xVdrtvPxN$RuTOk_JMFKE-uAAh+v zLvKBCy`WC!2K}v@E|8GrV1Sl0Bbh}?MuSmkcX&(zT{2n?DHBBJ!jE~y-C=$0` zd}G_bz<*IAQewtM_RWj^P2G=wrqLTrbTl=+GP<$8B{>tb48EX!I$mwf6yi=#rD4^_ z8Q85|9^cTj-D8@UK$GW{iaL)7*`zv{f?e3+?eP@1zm2InJS@USH)y>?YT|Z;^ZI;} zG?wK8a3_`NX}TzRrKs4s+M2K%Fx(cV-_5d}IAZo>evy^cVA{s0raar9uABB(P}rs1 z2PV>Vs0D)X+)*4>z zG6E8jQv4Ifhx6#rLh!AiWnhmF^vYW)0J6eSB>O9SU0}VA-6@-{Gi;I4 z0f*~*TcVPjDX&sg-mIY;T?uD>5#l0%l=XhV9b4y*WlSE-3aDn}ft9W%-^=%|K^RCk1Xk-GO z;8Qn0vwq3izD2hn*k;N(^LT)?*JAICLO>F9JFEPjiH<@<;UgVi={rN?pQSP`&H@j+C`ryzc^j+KED(H z`nWpkFBO;R`97s?%S1qY#r}p6>1_r9?HgvUTcv#}?=R}#^WWPofr;f=Zb-`SdJg_4DR;p8LNr&B zz@^&eTr^z%j{LOs{S>*5Q~WdVA5;0cL;ufc;>&E*07t4r?4zlS8>bC=5&4je{5{-u=suaCu3g!=j|6Sk;A zE#8C=sz>K?k~{E~Fn?Yuky7UXfqfNy8tDR?`ce%vS>gQ+;tuMO^`U^ssr<%uWpw^L^)e+tk1TT$8&mec& zl%gZG+p;-(7BpDj;R5*HCIOU)KF8Mq?@IcLKHjtXW+Rn4O~Q`rtj^$gOs{m2_7S+xRL!Ax7HNtJ7y>!k#JAkY=CNVmL(g~B` zK>~pk>odXVi;+ZD{zw=qV45G&)+~-Xt8Z$1{9&x&i+4;*!va8PBX38#>cnPerT{%V z$`2KDMsWyNbn-7+Dq}2$X;v;6nC;fMPuUQ29CzujmTWlG(llG5q5z$3m6o}4(-qwv z$X9ptHQ(KcGbZ1yXVn+sbk53tUh%GKo@{L`w|Jo99cyDVBBD0-!0AuGn@~fGh93Ro zbxl#_Pd;H8U5+ksd&h$}W`ZRkuZ3)>aH2`4TcrO@f)$U`h*XVB-unMJBb_Q21+ll8 z>=;M2|GBi^9=D}UD*-JXN(Onm&!S>4s0+RUYkcUHG6FLu&Os+Zx!09CtJ~`vS%zB~ z0?0)2DyIdpRFf~RUS_D>cISqdFh2#a>q*zm2%;KtAFN`c)J+s`6EttecfGC&NZ`*0glc6W_sc!On4?XK9-ce*NPf3> z0^?iS@vW~?i52aBwocKe=^eGQ=w z{Q@Md?oLmVwLA1aT)fQO8>&K3i9-2Q&QQX(J7yU;yD@doIgymCI)KvE31QbQ>l&z! zKksfY$pbBwps4W*G~jssZ+bg+RoUDi{@Laz1~OfuU;g^qxTSD_eqt7?I>*1@gFi3w zKBUF^R$)-$GXPIansYuRY0BKCMcBD@n(M@3dEYfbstmvFE6MX0j5+*ctKJeCJp7up z?x9I(^5NuGz!pViJ;NZ8=RMuX=(hYZhO;Fs_}6TgX9Gp19ThN7R`vYpPSZimUm5?d zuBLUjtd&ALcQS5}c%TH&Y>G{1n)X@D@Nj2%FkwfMt@TvWE&Cu}B8qX-5|iLApgjkP-nA0RfRN=`JY|k?t1hmXPL~ zoO|!@pKm{&N94Tl?!DGrbB;0Qm~WV}q7*(3ISzs#_%hNGDhPrWg&-&wSg7zFy@#Dl z@E5j|wDxlZA!xh$4<(+7fC52i5E%(EHP7UY6c0Vs(bFR(cX2YAKz4C5PIO{Q8XA7( zDYrCQ61fyBszM#x!jXnsRrdCq%K28)Xt(GO7L01HT|=kV~?_wQC7eiJEM({-~=0kh3NsL!0q!k;zR zvRyc5yb`4m=67UQ_xZQgGrVwdeo9GTxzG{0S=9ONf!zMJii`8n2A_W)K9C`z&z?P- zY-G51@7`#Ec7~zL!J0ZBA77*-m%~)G|M^KpdJpg0w{O|az7xI>o%{2L+o(AZ4U@o# zY{Veau-?;ouK9(#ySsyf1N?S5IXSM%;CoV0zBz31g}PNPHB)sS+x~>B_6zf^uTy>h zhP{0GvaD<`P3)z^Y$HA%MXTgs^}+3x_4Rx%HrD{GP23RUsU?1wKhkyGC(4g~kNRe2 z3^Mwg6L3kGt@d5ErfQJD_Ha@`0Rew@7TviFZ&A7T%!xuim0Ouw%u6mcnVFf}hBwhs zcO4gd42Dw#J>EBT^!E0)wVC~hW7rmt|NdP%CGFd{ZyGkWH8uFRIse$3DSTj`KiXa3 zk6M?Fq7o#zaYHPl-}~Rzbf#QFmGzV;0hPdhJE@_Bgv6JuEDH;ZBHgO3rJf{pb@k0L zPc^lnmzdY@JoaRF{@vDeagwjE;}Gm#UKV{v=*ObV?8{%9!8(Oe5fK}s#fBCZOADRR zq%1lTnJSYbar0a|o0o(igJm<cWrI$t5>gbavtskBp4>Sfc8m+Xx;Mb;jX5 z^?Z$D10lCHH6I@zT-@**_aryQO3;wENlAisW9*ieme;RG7dKt#R~3Ljupv&KA29W^0~zj*jx(zmJX>+1lnmf6r{#=zFj>TR!R*aM@0zkJmz=b7#lCM zeEsSbIy$;&>I1}RZ>guTv5|m)0FFwd+qy=crn`mxPLc&Z9C|+TP#K!q z+Sd6VyC9ci#MgHzMfe!jl`NAsAbZmg`VB;oC47CoGNe9KP!Xc%}a@D_s{^-lBR z($b-D9Eyv#XBvFw8zQqx95CSK?v>o2&@#DvOdU_T;AFmHx> zq*OVM^4N1{ZlyoN)Wk&m$&=Il)!4YWFZltN7w2hdG*VKXiCmUzQ;B>IQ!CSTRT&uz za7G6P2aVHV-ykz#;*rg5Z(nD!tI!bAhMg+QRSOWO$O^|6QF?RQQgGEk+S{gihd| zb{1jt;MOT>N6!fc3e$T8lCMr2~$3S63J0o^{Adg98IZH*XFO z4lcSJ*Sf7o3{d_ZH4MO~%V?|5^&3VHf{ZbBGpa~%@dxCK{e}aJK%D%(eHFQHGnm?%jg&$ z79#I-XTBAlCsn`=2T|73qoks0a9tg!udo09{rgqSMkGO@GN^TBc<^8m@=CU1%IAJ7 z)6S@2q4B|NrGIO~`7x(^k?5G1^z`&-h>D6z(0`XJ+vetGQqielwbMMjq5s)YNp!T* zdf8KElIYu97AO0w@N|<^j?rOZ3~X!x@Nak&2sV8!EzgsEYsh{`GpzdI#yHyLSi1As zd-#V1+%DWIyqF62fwsB1`SI~_N1hA3<>=_E*RRo#-wO+n0&bF% z%Vw%9_as?D{kBUgWHgdSRYMfHYo48i(z`9ZulHcPy+pvfbX6fnaii(O55i&9| zVq#)_nZ`6GB_CRhocJk^I5|0q1dit#OCWk#bt@xU=f@@|+4QP+#!5^j-4tkJ*var% z6DIdrAhW|M9JJ!5ph$w8llA4x%1lrZznon6?n392!4@Y7WK4u6MjDfVQme-0L29pM ziB>o%o3PJe!Lv;SiIZJ~AETwE%~4y+d6uznig@p@+#n=G5G-8Wn_&`tE3oi*slD0C z53iDDO^w&RYtg*1LFg|`b^v1nUkG)Wl(CFyv1O#_D&9EXR!^6T# zzJBdHzSng08<#v%GNT_-3MP}()2Atqy@)z?DB&y(Dv9t^O6^$EM=dZgFtoI^2zl>& z!Xo)%-*RZHc3w#HJ3c$!8?o$$g{*bo6tMV7h7(LgOgvQOIGe9otdgsisdBu(s#>A5 zxw7(*5DP)n7!M#zawh%+@YLPiJ;utt*cNt^%i`zG&W=%u*7`_c9juf*ovpdiUB^f2 z`y#bI`zz^8e18UwAm+KrBgNByCO;Y+i>3l_Mm^s%?>ZZBDa1{w8`c0@W^HYKqVW`> z6slK*iup=k`ub?`>rrlUd_>v6VC&DHec5M>!|)tA7`mOav$HcZ7jXYVK8N)_{~QK~ ztKJLTA|i5G{*^K?F!1&*p>S$yTwL6zPcs`Hx=cHskK<+4RaManhoOkuaDPmH@)`h7 zNJz-Ugig9LmaTw*!29_4igf2(wTU5}!h!<5M&Dz2>5xr@PT>eX+shVqF0PlOefnnA z{9IgI0CJE(@pQuQb}q|buQUY32+1QcI-NPkv6lVB#ZjXc01;v!5|WYx6ubp+N(Fv; zKE6}%Bwg8xTgT6@Avm}_>?Xbc@nXW?zb-hzD$ky!>+ZhlTiu6J09$7_UTRLSn0&NZ zHEZ-JYJr1;!`RsPCY?Njgi6rjwYoa6ROn1&)QQm$wsmx%B8-fTjb{Ldn$G@0QixoG z5^vNRf?rcpgD&>ntkilit75>&)z#I@>-dXI?ArP|J-`=ukN5rr@o{l*KwB4$s3>^t zwCddLt*mk&xsh~)l3C+shzA)dy)HEaMXDvT1Z<7AAXDG-+Hnvd( zpPc~9#;yJ`EoQB;3R_Lq1fRVng`?-Yu}Z=mm8#Qq9-6soN~yvMii#H-WxXHdv&zc2 zd>>g4e91bnx3ilW)7B3L@Z6lLjs%{ZcpDlTDk=3=Ky^245~ioO>`N1a8=KoZmWrYr zulL&fyVzalzKIjSb9*veawYmMqy=^|2$@1W=07aiZ!V-f6cq5!*nJn0U#w)kzL>hA zSbj5hdE&DM>u%_%VrFK4NDX~=dGo$%6-Wlz+1pb;_Du5`ckPaO#;dFfO6{0Z6d0v88fZ5~TJSzJOBPU>d-SX+5ppmYMZH&3mN*W)8<44KyX;eK(=eB zFLHCOZEV(be?1J1jO>AkSn5r^{xM=cjzRT3vo_J~+cN3OM!{KbuIywHz<*fvYxjX| z#l*w_A;G?W-LbM%l;$A|i+Zlw$tO)g!8$mBgy_ytcA<#&^(mVse0Qtg?W*JqJkh<6 zi-RK>LDv6{SXWoq&vBN*QaEDE$<>vT!vsCNoim5tyKmJsAm9@AJ4}LBNl6J2h5T5o zU-v#Hrhh}H-r-Y|b0rpf5R?jP0oR<|Z-7UL!u|kWc@r5qUF&8G91D0(u1c=|*>0zH znMK8xIUhQ_SBhX$X{k!43RI~EXQNq{yp;ggb&IqYsTje*!F|#Br(cSAKjzqx2cd7LXdls5s)e|rg~igQ2+h=SF%b=M+fo;FTLb# z5&yHz$*O;wlcTN&)a6sTz>k4$K|%o>otBoC#OL@vA%P-^JFvy5K(EH7{mre@f7@&f z3^Cn{KrQogb6*&~hH3&>D6Y#4f*242-$+-B5j(J=2A9Pjz^~&H5=KWxK8XZetQR+7 zAVVV~K*mb7m?1L*&{%T-f(S_xju^xp9FZ4d zUK8c%xC!TX0Dv9>OAfd=rgxn|LjX4c$pO^In$Yb`+1u5{!8>c_?7SO-PvPR?5+`de zCe{K6X^zw>gQFlnfA8=xOZg$tEuf#Tf>{(6;CY)ocY|oK?nGlIG#S5SGi+HxjNEk&Te9Z9ugLOX(FP+iSmsNu6VlnX=< zp7Xs#1Q`b{1H&pHHL?)c93{Hg;E<5Y&jWDVY!JWuEB(9$7f*s-zJ#Y*2P#7^2{aYL z%j@x{x;h^wj|S&TKt|bFSpX_!Gx~GX^5Wu%$%0W^rvNCxWzGFjJe}WTD_J}}a9*Hx z{D>DsfwPO#ZCEp$U=!Hmml*g#b&R^yV}~h>0(i&VN2}SXd3kwXR8}kPCw1OTOVJQs zI!|<}ZH^Yt0z3ztv%IoGMn?AG?c20HQLV4_utY^gL8?1}qzNa;8E!W#-;|le zwk7DA-^sqSi_4FnKe;tNi_&0WW9R1Q+qxfo%~X6ODEOS8awXNYY#i7T3JQw-(Z|Hc zUVmZZqV5PyWJq1-m;qz2F;(9#c&o@bRr!UivkT%PTL zS_7zP1SkTOGx6tVr`t^;pmDst`-Dz0c`RR(P2Uet4;vesq2X+aX(y{*^;bysNFc0d zs~!pjAQE`6J_;$8otgQnroqzKXl(s%4+qj`?A;%8Ps+mF{C4Ic{On^PAwYWH19~EE zbGbZ!u8SkR0<}y{O)XW}4^ZBfPUM%b5ccK`Job?GnX|L=&g8`8)#U>>c%Nt$*rZ9x z7~rY)c5?vIwbLRPCN?%YDk_`~Q~Z{e%Ye8cFSJI^M|L<(R@wucr{=L4f;a(Ai)`Cl zlat=M^;A+4a6rhbS9lb>c)ub+2r1Ss>*(sTo^AB2{dk{(l16@Eaj_vl{_ybds;VmS^rOQ`N9>@nD#z4>ganXw`ZJ^^-+FvzfP(f3 zWC{Shf^KVHlpjK-lrm~=uH07ZH~yY2CLz%VO9zxjdvmtT57ZgdNdju&v#1F`s=^7~`ZX?#f;QB4z_mq*PT@Tn;z1$>M_G6`=u4g^76z|Dv1j zk=m76$Is-}RcVK9>*UOHE$%aPXe5X@* z(I@b~FQp;u5w(9(zZy%Xc(6>_KBm_an;8?- zO?EvWL%IhgnKSY1-)w-cj!xx_C!m(ePz(h9+O-CATtd87Svff-CMIica=;Q?T#)q4 zI3WWj^;l2{OYldD_?>XyyVp82G&C_W0cCM=GKmHYU`D*`-rnA#ix)5j5a=d6%r~dg z)flyz0dI9WN?``H;BQ*-AeWG>$ufA^snw0tu6r_A^NJk_U@Tq7&1^bg^9ve~a{L?98nfmq%ZU zr`IdI)YeX1RZ5++FKzfv{Kj#a)xbbfN-N9qao108N$xHTY1-I^27%)fS1(gsmE7{Y zJXuRl|FR<=Q#Y%&N(G9!Yr*0%vYCsEix4{!lOOo)YcIOf(M}C&-OH>i-v2;BFfWfb zQ>;Qn%Wr-Gc2qf?tC627AqY%1$D~KbnIVdoYX?z_hY-hn{h@h z;9 z2<+r{tX_XKialv-QtgO}`dV6gp-h|BP^A3OjB`B4{1i_U?Z2+ftCI2u2-3=K^~KxM zGlE(~m`llRPJVcyU}8Wv{xz466WiYB&!3@wkq;2Zc70LF1zAgy!N}Bf@34F2MAF8{ zC{2Ra>*CByTN}^e~bxYjAuAng#Pi#6xec6R27?IOlPzfLW@|L@=H7_<;k`kVZT zeOA~Mybs2rR!tSq0&|pe;>jfGRoN+Fao>KwHe4#DtyE)?B`i#(lp=ilkwblOaC&-4 z&zowe1sP|TsNevPyp)D#v_=Jt0&!$l3mNJW>0FY>7|+PT@$4Zn20D5Ny~Z73!-=#u z>|`3Oz?*@R4-VG5>JFMPp|h}U86Y$H#fS{ltDZ#{eSLjMZ(N+5?0AC>a&)oRP{lxg zqA<0;%O3@DuiM&C7cAR-BKw*8ny+681!e$Pw9Pw#SS9&i-AI%d2K^FvJD_xCVw{Hh z`giZ%g%D7kbW{&#*{BVfNWE*r$CnL~_`zzUC&F{8AbS&i@|87L+eDn0k16JSF#*|U z8wUr13iA>zJ6?(?iv5}qXk?6zf)Y<2*|D&DN634q%(9n{mtda#J2}p(m!4hN=U*n> z803l95mxqe*RN?mcwW7yv2_wfr73(x+;s1~`L9(Dw@*r#1BuVG>HLI;AKsu-D{Z*l z(;kH5bha|QpB&*UucP{WJt{1+!cCfn>Vwc*=hV@MV|Y_>s}t|Are`iaO19De=VS{@ zdaB>TX$M>i&DM>jt%LK!}RCVLQSlfIrFp7jnS@B2huv$KX7{i1?!)Sz_(w3$V>61kFPR8&>7 z6_Q|Kl~M%Mm6gAO6ayW#Lx9^~zWjk7g|<@1p?KuHke&jjYbhEc%5@n32=`z5x*>u} z*fVr2SSMC!T|b|pUEk2K>M9Vm&?g<-l3Q6>=_^c4@>_v73VJQ@7-TakUjDvxu{^7M z$AhGaa*dxZPuYA5n7!^EX1%DSwg1$`LEspw593;2Uw@n-Rt1x!XrZCO)EXN~5t@Dwy@Zi0Lj#dn=>HDU;vc zX0p2RXb%SmM=v?W!*1q#*4yD`8o|04EJQlGRJMafpr9R_6h+C(^i#ay!K%?LTPLP6 zgBoXIvolMWJY7r|QZI&Hs`@`mb{&>%rp}|czrW;V{^Un$gQ?!PtGYSGtXSWM`z7F1 zBn9vLsVFNqFS>vtwl&j`Po10>4LSuBQ}$mf%p^%4KLUaQRSHPUP4s@CV-US?m5p!g z@9%?lVoXK?vTdD*BWGfAVq&iH!|!H)A-b;A24Wn5rtKyrqBQJz_ZaaFSk(t|?Rz~l zJDlQ;4b-V*GfT6wI@;P^$|BJOJs9u_=gG>+it)(>< z{Tjznm`{-UhG)$N{nvpAYCiGjYpKIrA{@4LcnTU&RTl*r4=Ycao9 zV`O3UzV)}uqRg2xTLqsyac#{8PAnqo?Om&p4=@al53dVY7J#(f&=7R~EdlQYss#zN zmeZf_Hvsny+d%&;SUf#5)7;IiqM@PT+4TKb1`7)ki-O8Y6*rs+`7AP?K-eQlZIFU- zg2fr*y?uN%)zpYduZ#((2vB}XO3JjmlkX;2o*<%g)s;D4t=jrpmf7@KiNYFnYyVcI zdca{Q9w%gqk=@+1%jk%_8;gipp`^_e1XBi03V) zhF5uX777M1!XhO%VYQYMEWu)#TQ2f)f9H^Yl3s2cHIG=Sa!DY8IVf8nBsb^h zH9$fiHX+8TQKjz<2>~5B^~aCAD)6dYk+#n%US(p30DC+`@nWuZ;#g>^Gsf$&R%K;j+`$Z7sD>}g%L{UIq1g9zkI~u2BY{TjIpmR9MT%SF z{hOyxaXs}MWURHHnrFsmE*_4#F=oor<+nR0O9UN6#)~7OW{a9=$Ob>LprF6DcKf;k zA(2dEM#k6ja(TM^c)pxT#{Y2}NeJ#?R3+=Nl7>k@6Wv!snl&n;Sj}i3K^HDW{?Ru?hQ% zZ)0X+ZekcVT5EaVid_;Ge%3YQ$Zh-QvTkBhk~2S@g+&3Y{$n%F+pkS?Rjk*BCw3ec z>U=CxrcRD^_pkjI5)!97A)!B$lPMh?9dUv$MuSx%B~NWqsIyes=Pz5 zEMhzqn^#cqO0XH!Q$IhU*scQT0p{mt46cH=03_l*e*kIh^EojuzVIV|f`UE=1)2Du zTqbR6#J`Uh#M&t5H&D?b;d(yPQNhIcqq{~Aq}lYr#8;L0C3)4wbv-?p!Is5Sk#~kO zii*T&b9wnJ-^Zz`sjIuMek;heu693V5JN~_;vh5cu*9#w%)IxXieiOZ=%vnq$Hd6^ zCN#9#OG)p61|fPgHs$EIw`%$!il_)`*4B`flR!$5O72YTR>+HmY6)6wEUZAw7pMrB zQ_^tRnV3M-#U(co*t_Aaj=zt;=UES&4G9Fz73vMBdC;D6a@yGdBf!rOyP$Qi*@OfK z@&FCB*`c6r?A+Nx)Q;CiQ{wmVoqb4?xXTirU_{v`Oy_?C^!^4c-s-nUr zURGO6&6lGB51Cv1c?}_B`|Jhn$B9g;wz>sV#cPp}e=ePMxYYOl{@vKzyp7k9+uh4U z&N3xA{Qa?C1-Tp{5*UIJ86WSauRrZGFwG8SgP)QhQWE+)uO6_cXn=75cr>&OGcxW) zEdbYrv-rn}UnO@4V3Fv{N$`5`uCK4lr7Js8!l^zz+{C?pJ(a^$(#Xij#N@M1Aps7~ z+F*9Hc)C&9I8Z3|l$$@#*kYuUQ&J)~i4*a(TsgyM4uS7XS4XJuN44TVzfXjnC8eA{ z%znT;Wq576t9CzMGVcizXj}0?B~yUVqu_I?$_fqHBRlr+E_S}M54X8iMW^~{pLI39 z3{XhgX9z|`ngjdqD4-&by|p@$5+px)6um@2+eSADt2d<5PC+iz@>%nga86;8u4wprQ z@HHsQ?;`)^aVE<1CMjI8ZGUJxMt8z7WuJQ?PnVRKIM453 zZ$CY9cAXy)O}87{ZS94K`=$6TUarYLCxI&wuSU<>v2(V;Z&TBdjr3Lm<;gn8n<#o| z4l;&trx=|y%!tB!;sj$BWJ~HQ017)~R z!)LUfLrWQ&9K(=}{+%5^*H4$HLqm3seZiCg)h{FjgEwjO&mVN;t!$=~NF$JINcwzy zjtzboFZ)5Wg#J2o{&RA2fTlwS6R#Co1y_Djg(Tkbu`x;k*Y9m@f54b-OzuM;dg=u22|3OrD9L@`df#`7iN(@f5!h^)F!y!mST0v3v!b-r=E>(i z5A+E12eDn(u3fAB1`RP-Gei`0>L*X0KyQEtTDOexZ;Z9v-7DqkTG@XN4XLpvP|$w6 z(jr4a>Fc*DzjCq)3aaJ~LGMt%&iz^L5G?&ICJkoo()(;|(LEMV1l@Ljx4Q}mfyRdP z!Lsx2hoegqa|TP$Rvl9Z%il$LGM(p?ukGNl1QJ~0_jbGz>M(sCmg`PGz^v9eCL387+ob!`J(CZF*8Xw+<19kt1- z;>5(;3ElVv1P;8Z%B7tjq4^pKEO!|G zHZ?^QpC`uZxYF0cKu@ofsZvuT0IgJ$4_Qwz>q<)p%x8OCJUp%;^b@6pZ-)BPxOvR$ zYH?($PwH~TG>fKIM~m|rl9H1De%0mUBk87<(HQTe>15{#7Uwc(>kQW^yu)iZ237~~ zW;s(TDJTs83#cL`3uy?qm<$J3RuE0db?S@sThPD8dUd1xr~%|EXlEAFg`>QvGWo=d zgDox3c(H|>`sK_0>fsJTe88|BQB<~Z17Om_*y;oE8H7eq`=8ZlF*kZ2Ii-v7um=M2_~ zl)10Ysr|B|;`S9IHH!GVEz>527tsX`a$)%uLDv;!1U9Rrs;bHRz^2M!8bJV)wY1z7 z5xM*pj0={UuVrOEM?2}D=mRcm@;^5^2M;o|q#20cKZPFg$jK#v zzXv={V3&n{_}1Lql{XHQ+i9p$LpjgD3I~>L94463isvx*uz6Lr2)bPXwCC6V(IQS4hR++VD)B7V+59^YwjP zFC1|3Sd4I68|A9CSDv`kkjKNr<7Do;p`2avBqhSW9NKHpz7P432kp5IUI%`sCSs(y zs|$PUBPWh+{ zR#<2c*Px57DsA75e9fwJqpt*%M)o*?DD!y&>LBF(l)~jxLqWh@u=Ne@pFEd+qUE7^ zjv6O&ACbnRdx=7Z%vmfkb3G?PbOd5C04gpAWn8r)=n zS6;V{gJc8?RBolMYu-i+?F zRSh}o_`oG|K0Vu*$k%GbUS!ZPQAvSc(8X))IC<0;Y8m0XQO&lCj;3t^y6Uwcfwm!gf5cqDknhop(B301k&v%eLW=)$~z;7xUMVTx2b%MM2KVmIx z@sY0`;C*By^*I*!GFK)l)=v|<%{ajp4A*SaiuA=npE>R`qPy69{yOX|>}?)jW5dhul4Ies2~1W= zMc)DU2{)j9CMH*4Pz18En$q?mM;usWB}4){1SUTIGeEDjq5>1hP+)4k{tP5J2Wr;4B}9}bvaKp&?P za9x34d}WDLY=`#X$?0jUIZCDqb}H558yGO0_0zXrhVTZKgip(&i!P23Cc-Zu0IquV zssL7Stkcm+{$u@FiGqM1ok6m$p6fH^ z*HV}?FTZJB7Bw}Al-mIXM39-88Fn#>@b-b>W6!AgkQX)7I^mk4=KFkl9i5#4r<+ya z|DBzs?%YjIP6iJcIAiyy7~l=T3Ih(f!>9>x3T+eofnB{A43+qNlU{KpDao-F^5xtb zbXc~oS~k&l@VlX#p(Jwt1^2Drb!Z0wiUe2=*U;#f%*<&(W9v&;W0hd z(auiG!7K%^_JEGzltF>a0qO!*Sb0T-o2%=_WEIoF@ z?+P(PK?ZHIz_95~qq>F$FPt`TDuELyG&B@?TPgm4^kC>D{oV*D6Bj3Iqs7z--3rps z`-ANc?q2-H-Rx9;kQ!bDb!Pn#RRFA2HB+$tl|zE9*_c4Fq~2nqqxNeE@6T>emIB^j zV=IP4SXWb1A@>q)7wkPy^RGNr5XNR^_YoQnj{YA%-gGbegS~2#ww+L3K>?FSU0j>2(T__VP>jj7&C;zs$mzL-fx@~Q2I-;qYU{>hn%~-%*5FHv#OHeCe zm+r?%YZU1vCM0BQSJq(MBdmK-QbOX-(vso__H?jC=BkCf zehr2qXvH%yGc!Xmgc%}{J6Cl?p6*KTh4KlOTO{ym-~#;G&0m;$*0#5{W&ksVNuaVk zvm%co=XoQU;Rmik@KP_fy)luUVUnblGy4-s4ZY%1QzoLEcGh6#ERna zvbXNs@rQg1Bp!I+RK3^pqn&wJDkRXc>D(PA2ceA)%eFaEnDpz_HJ0Vf{s7imaguNz zzY|waA@d(`;8eeAo@LJ5<}`s)lM;lA5Qbi|Dv<8azJqvaxjC_qjf*=dGJfRuxruw0 z*mFh4r%NEU- zcqq1sZNOFYdIaUg5&eq={t#nuT{6b|LpG6BUO#J@OOOtL`$Bx?f{XLfBW)VO{f%)hCMH}&lu$xcG_WWb_%t6QI8Ltoh+|`8 zkklag!JwrRBrWhGLy1EIr>6A$M63)948UhZ0F@KwcyIMEz}SWDadl7~$`ulGnb4yE==G`Rv=EAAlD=Q#NUpdI$Xw_3T$RikpSdk;19r&MN5y(ggTFA=*LG@%Hj6gzUH_ zELJW^7J`Cc1;ICKeX$Bh;Z>)=8lZs%%!&XB#N>QZT2=-IW3Yxp|Gv$n1OSjV)S$Js zj|mC?y698Eqzz0-Id_Ob^`pr0x0aT9C^>-Lr4_-S?ZxTZ!h3~BYk5vU*(m>f39fTM zAlIwcaf_lsE%Sq*fqE0Prl5l9B?p1(~Tv&%xXr zq|B%3%0ND!KYxD30^oF%mX=;29*{tx^1{%MHb~DB66g^IFv)gRs{E_TFTau> zm4Una%a<=8;RXf2a!^h6Q(Wky%&-6V%7=`!$w>_&QBa_Hu`<~V4Ut|Gf z4VctrU)U%$?}quMvIfW+)RgbQaQZ*T$rS~Gv>jWOB6IBKynX=FhZxuIocX)jhC!9B zuB#gz9tHrmh660Pq2U~=7Thof0tRQ8DFZzlst>e&0Am6dfFA!;Q$UkH5~#;&_|-@Z zxJkTh3cvGj7#Yq{V-zD~(kK|K^I(hZ(t|NXF#S+;d0*bAqpPj1CMzvu1a2loNi&6U zwVIGZL6-z%;%lXUAp%zX8JLv?xI@aUwUh4F#+VcKe_jCVfQxB(ri=8n`aG<*ChGr3 zUt!tg?h|QA{~vpu>jo?Be-lF!tlFh!u+BhP3JUCCv@Y_aPPx@HAUL4aLpp_Y>9IL+ z4dI8P0{Va(OxJE~*u|Nj&%Tkq4?K1h(m$wDA}2#77RMg{2wogX?Ol?htgo%H8q|+* zGgG|~U3o(IN+TZ}kuEiq$mI3HC^480f{=kU2r}2w^78B8;LYi}Q7|V1gMfk!TZubG z!UdEUK_Vrg+X8wgxTa1fYwyCjh4o;39Otq+keS45e*yy|!0s+!I`bPo2RtU25RWid z?*FEOVcRmBVMgK9OBfz&;eQoy^KxtEF5#tBPHkZ>DXSg~d7W^mgzQXv%pOcdaC*~R zJekv>R5d-|IT&!Up6K`iH<}J6Gf!R>5Fug3vlLUVW?Gh)I~R86biAPH@9D{p7(oOB zIy>0gTi82>iP!#r>|hWAzVxA<3Ypv3z>6JDc>kXFNA4?69~e%7>4&rHh3%L0%*-2x z$!VLj(}Lis?YaDyXJKi%KA9VEQJkii*M=QLgFJr!ng+|~j;)T?DdiT}i-ob^QwcyY z7)@~&fQ5oW0{{?)teWdZP+tIzKtmUU_<VL*3JJa;#tm06N05 znGkIW;G!>cxc3aGg0Jt@{3;*-EIG)C@B$gym?K}|M0tleDDI=>y*g^k=`#I{|fv>>=z~{w@lPN|3qXBM(5R z!Mn|AHdF6~1ojG_GIMecz=+-8U>S_5B8WiBg@I4#e>{_cWl3YmX8wl=_|TdN5G#{D zUW<^uh+rvFZ*;Hnj5qPu;tjq1z4VTw$8(%lv*kwpn>0SE+BldC(^xcDn=ka`(uZEh zP3X3NAXuA`VG8ycZ?eWi!vHdVi%mPNrpvPzAF zgN60s@I`UKD~*%LIJ1N^vb~Iz#83&kYY})yHkX=7l8ys8++4|)2=bnuxmWR*qHxU5 zip8Zbi+CwquHS#&mC~eYxb2~usSH2xq0*K-wuiZkb)3so$yoAkydpl{^@#CXPfUSe zau9HsCPXwGwYJ+lJ7``-Yi+`xz1^_a-awji;(oHU!pB_JG5*bws>aRbT*f(UtY_B# zu(-@#U<^S9eq~W3+Amw?L%lnfxADIk{Vpye}RSx4$qPXZVBJ}^`5(*K{sJ039x!Pa~GVN z05Yir(h6I#+B$>9P!NoQGc=@mpE_$+FhGeE+1VLr^}{`6c~thrv^Prqsk)9lZvJ$5 zQ`Ke*ZxqY&#``isk=dH9fJ@7p9qA8Vd*f}F%pYPDN+w3O!?_U_d(62+ciXX$HE#wM`}AmA@LaBC$I@iYc*|dd)WhFnE(ntP^ZdRbgRahDfXetYtGK`Qe{G)e#4Ea8 zcXF&W*A&rAy%0taqA*vt?crWN|6e7G?DAx(MJL?H5}ZhLOLt3l>h)mB`3dLOy%e9k z1XVq@SDt3{6!skdI{W1(=s~c#F)$q5Wq~1u-sHPq8WYFVq<8!$UrE4qTQuvf)KBWW z3^8%b@!83;yHs=QgR`&Y??xMNPsB}5^v6hP-g$s!(zh=r8BGORt1tHu*nI{)E)QJc z*i}{@KCuP&#l>~#2hBM)j5q11QE{?2 zDVW4JyhN_!Fw$Yk<8f~kCYu_5-o)C3{!Nb<2AH~pvD=D}W^C>FjplD?y{ex~ZR9fs znuAX@2kZ@HvXlA_isN0(?=i#&$B%c7^Ig=ZGvzWA$Hd9H-oQ1(86RjNDsQf_U*4ju zE4x_oCiA)a?4C>IHj~}X%4hS_yW0dVaJOOQWJn*cYf>l*q9L9Si=E}h_?Kz!>C1w2 zMU~F7<<%xzhOfy!M$j%<4O_K+UAW1ah8s3zc6zps8iL&#XIZ;4L~ChidH(OZzsK7y zi!J%tE_UN70hjgPTjBOA;qiTp+yeWtHK{A4OEW!w?(4Vf>72y%2F_kjv`>?=ox56} z7aj=MlD#-mhELmh$j4{~Z~}A)4CHFg7qnTpkie_YhL~xXY;8qDXcD@Ye@gk}2WI%^lX{h^hlW86;VQ6$D2^wOsx3M^}^B6+t?`HKnJR#ae1oVxai5YfL~X4;t%613VoEZ~R+1VDLiXxCoAV3WY3<`R43#P2n zOr#>O$wizGYTf&&WlDeN4UR_Wt#(P$_MkMCOb^29g_D_oooik#Xgnm!%P_971SQ|n z@)4Cqb~$(DitgGVv6U~ub&c{AI{+%-7oZM%Jc93 zp{o3=lps=JNavKOW_uZCJj;Og)R!=pE4*n$$U_&L9^W5fv(Rk zI`k|-IPdE2_PIE#0UMwh{qU^+=_Y&-0!*HIAOD399O_6=e(JCFn_5(Alp~0Sv%Kb7 zGX;7At7`)5{`E7QXanApqc;m;He#Cp^f!5{b$3SQga!}M^U#YZ%D2=PnI1>>5~tov zm!h*)Wc1S@_dYuy7$x;EC}1tX2;8U}PmfB6pEX|iwiMEd-lt-;We1(eZ2jjdXt+hCq5Y!&S}OM*H(Wg^9wMZ3=Vk{Qp5ZFeDNIq z@I{N4rN&?R_jy+hDK~*^g+e1B;0Qd|A&mYs-xkkU2rjJLNfD6L)#a=iS>?EXwFe^frue7z*8X9fX%>H46 zLqmapGyMEsY-ayD3TBStojYykM|*nqGBJ@7qih=cJRl{Le=?+IAV$g(aIS1_hR}eWO)m?t8!M?A^Xngo{BjSAmp2vIjweTEy&Z6a(o<4(2 z2Yh}IUE$&NQVMEE^nV%X=}}yuae}kzsmaj`?!dQOnwo&mWuUx4@@cJWU~nv=t_VI0 z4h|c*BtgM$-h&zt?7V#oSp=WP3g3&r;s;TMBE{VtY81a_t|uW;oG6T6-Y#PToM3E> z``mP6>PD}ankU0|-N1OSQKYL$CeniZ)QgCr>i+^H<@HaXv5T{Z{CM{VLHdzyfrf8Q96R zj2apsBTU6m3xQyP{i^CKcH#udg9wlxM6tT7=fwZ>7TZ8VOgx0X8(SJ;t<~k_ulCC{ z1WBV=Tr45ehc_qLD-fSiX@jw>0lfo37D92@ zDdD=o8?6>u&p5M1hMi`d3RIBt^0G3JYq1pia$ZP<0~$shi6%?Omq+L*0=;c$IDO&5 zYNN;W(ZMTwV{Y4AASC4FA?EJt>|FOSQ{h{0TfZ=6H#*6vK}NP*6A~HY4wm4Or*;6gxv(xXRdx@(Uv0OdM+ilj_QSX_~7i?~pC~eC^!oB*%HJDD%?ZE1Z-ifVj}* zK(uI^@H+Br$sOPbsqG5@6GS8$np-L=pU|5h8L?TO(OYY-LQ@G9xB311NB8c)!=htk z?5vlZIIu9$$*_0t6dHoCoshMa0sICNyG*<{!lC%a65Fw3$GEw#$;gc0*aZBBB~I|8 zHb9%6x`s~@DT73#~@)Xsq(aS5^;vNXMvYg|PnG&d!iyis4 z5^xAexP18HUNW&&Iv|=B`tRPETMZUd#B7y-DsPTOdM6{}d;H_nJL%@ToF%|9(foYx z8yba=*H?;^%#?243_{OqVZ0seBSd?k4|PMcpar2U9s;Xm6iotatN2V@T9Qf{D-RDP zb86*1ewdb#z)B7VHtCkh6HA8Tr_p&u<8Gl1~t{y zvx|#XuppY9_3Qd7`LXUaA%SHABb4)3vGGMkHGH33zwS8~q>!faX7l$;Tg80?QVU%t ziM?bO_a5TB9x?}<0lXkWB}4x@T5BGq38|@@0Gg3{1D!|j^7(xgoX3~`djVHPCa!lQ zrJIPxZm(09!yiZ3z@# z1eB@C#SO&3tsCrCs;q9Xy~@xjBHQ{cKiAOM7!emT zTYG$N(6Bo{-!Fl?4P-^YjyW!$CRq6S`7c~xa9pJ(OoZ%!1%TUu2J(?T6qEj@S_ouC zMMc=uadB~}q!%CY($#eXwJ@N1Y>G;}v^SH#`0S`7(r#ZUX ziKUx{vgGBZqaLM31_rH9;@Ag!?DSbb#>P?|J~KS#PvrwIDE#ERz(8{@D%bn;uE2Tn z^Ye53l5WQ*C0RUvYztC;;iZihH1a)hCijcxcMG%nSfi9j8`sJL+r!3VO)~J~rMHvR z7iFaaw=bvNqtAw=p}2Ta>Yp2ud&x#rbeWkWym(6-(P-aoU$}MV=uOLKbo8#%)&=l8NP8*CkH&+VW5$~-}~{1eONIS;`7?M~?V zf+H|6pgVG#)DwWeCr)u-)u5De`W-(96(ThL@BdtaEH{S=iA1VT4%{A_EpMGgWj zAps{s1a8F55sN$=PYBh8WmJxF@KnO#g&TifS29li$hH-#0T0ZRTJ_3gnwn{8R^ncKMI37RTvhW^gUI2N1IWP>o z_1FPf$eaxgk28S~fvyxBD!>Q>MG*hRGDb_PcxV=)U3f{{#1@0n5B=cNhmyS(uSYeG z(7W#2@zQJK`?I@bTep<(pMT#~Kkvy>QB=^mwMXsc=4wNI?2`V6(G{MUP4ltgbo*l? z8Xw`+IiQ0R5T^=cz-Y=NZo8KwsMuG$J-U=2L-h3aK7vPU9q% zI(v_7#H4WOh8HxqKoD^&ym%2pZ$ZBUxmkC&_?a_jgoJ)W?Z`vdjrIoGy$zM@RQ~9^ zEG;dWwr7uwjWM5nNSG(USEi({F10y45xej|U!aHo@xg8&YrCziylJ%PVy_7vA`bLJ zhYlf0X4DAadvzl&F(Cmd&3_AYIWXsI0@`w*b0G*LA0>0bk#71YeGmyKqiVrov0e7m zU~0E$9ug3|_p{3yT3R6%Qava!0#B-;Pt0~Y*hEinzTLdY2Hb9w=|b9W?bHN0aG1}Z zUqPt>r7%(%e7NrJqS#oMl3r=^@7TxHU-J$Iw;1(?`wgbf-`ecy%kzgFmXTSk5uzJORf;mLk zToZ;5Aa=&&?+~}>FQdYi149k{Ds0SWzn%X@P>fR%D1WWLL`7XfWg*Xx$ck&CJaYE! zjX3Hw&1aqU`0R@S?)cC0&+`%`Hj+QERYLEWlF^AN~9P6>#( z`OlCrr1wImhr^dvQyRS1`W*IvZ&%VAgto%yC|qq+*=gY00;M;?6+CK3{FiE>wnVY? z05mt$?|6Zd3Inaa*<~yZcrf-(TTh0wM#jYn<6&^ghugcXUczZw$hE1urMRZX1oCl` zcas+nFE7cT0nI0*Ee`+F*G^YSO8vvKbZkjO#?hY)G_5QcpiM^Oq($VgiYHl(8Wd^fVDvSpMN+&aS&`H{3^lHF@O40C|nE)8_QnxJPSi~uuw^& ziG-bs77rlGAaO?rBn&Wf!ly?DTQ>L@)M;czi&Un&Tv!kkXmm%Eb69;0aAIPU;y~W( zeuZE;u&eI<1$Y%W^F^OEZObG%l46Z6T`Tc|&4DCqeST^Nr6 zb#Z`$zDT@5=L4|7rAYo0CqPXx1iu#S-P+n@6w)x6!j9Z%vzjlJRzBz>{l>$i9nIn> zNifA;LmZ8Eo1TGzHEs!-ANES$@TSPk5t^aqhaj{GyoIvaeePGVLmv+8<8+@a&=&pq9njOZ8^z)=eO1Bob-on+OlDpcLE84orzC({#w{)-$p z@vFVQD3f+5!@^TlS|(&6JHRnPP=({}ltVQBAtJU6+%(um_HAYSlpLO{c#!JVGR6W!|URNfyO z6N6&f!XmQJA9V_X(N`FhRS#mj&A{RlxCn(4mL1c1i(_!9Dd{CO$HCTsXbWd0XkrLD z#6#?eKJ7#KUG3=Awza`(D-3ov%WLovTl$u80IAo-w|vg62^mz>;Nk6cq&-IGK}AW4 zG&~z;I9zg3GhLOGM8F5}2EPLN(j&L6@joxgP*#K}HUD(CR=IX<438AnaX595tD>aX zzsp7ILj|ME;}+}(1RJD%0zyKlyFQ>1Q~324R;E6}n(dqcz&L~`d=igR?Q`dHNgioI z{P$7ZgSt=R?XTsl9j1l{C0v1if&m3;IVwURr>pWEl*kVi?J?RO7Y31}9pZ@mw6G&x!v)?>$$2 zBH*OjR3cy#EbgmPQXzET7XJ?}08oesP-35GY{$lI^eO5LKiZTruYl~4_mlFxo1%h( zGX+e8ajV>^U7~ItL&}(ZYi8LV7KT^}B! z!?>xcOndRIcSC)5H#O8}JJXNAV3&a01APaWiN(s}(5=KeLoI~_w6mjQYF_Elkv(vA z-LCcZM%4e8q*&_0SJ!T`Tw#(sY0rI-%FL>;kg*MM3;Od-<|ey~kS--RoDmj=Cq*;( zm?b5bZJ)fv!H#bIT@@9J@itmVK5uS5K4y4{!;=|2jB&J*>mZa`! zs7 zgQ)uX4>+6u0C0c>4sfk!8oLC?3a$v%4B*v?hS=SOYb1M4SV=yBCp?Y=9NkDIvn}UA zMSz>q0(5df;7Ev5{!SoFok*4N4Olc1#n?n@9L0Q$baX;soWtJ%DIlagBOI3dkfI!Z z41Ty&V6UI_Z}%%=WCmqbJ`Ce!JVV(V4^9W;Vv3NxVEZ6nCMU3P;j!#X#gc@w;jS&XIY`++A42j&VD7_P ztKAFO!;~e3O{P{yV0VBT762g$C0*iW07Wkj|JEV|`5el_6UUCxA3B8iIS!T%F$JGq zcv+(m$Fn7Wu@5%Az2CPN#Ggkz!j>aczS?G`r9Fa_0*sZKM3T8UbOuX&G@x%+gG?iy zy#|cU>ha^lqPAxUBF%y%BG6Oxr)EraFQLUl0#wB^87N zBft3_UZe7ljO-;TS#G=^{rmT0O3Fs_M4|u|HelrKP6+&19=ONCV2nTZuhmChjkwm& zjKw=8AtU1s1?JqtS(2cVLB`dZ^fx!+U=oqpd( zILNo;UR~K%d_ef>hYa3eX*q5)b>_gjzaApjn}zn+Trk&A4F6Zi=E-N2!KJ^tBe6AaESJ>A;}fr6?bt9$d6wEa~vQkCD>79-ljRmRij)5E4GJ zs$JcgacLnt_D^0v;f}uG1HpPpzE;nRM``+=j0txg+k4-fLhQyPotjD0CR4jz8}<3S zMVqQsZu_jnMA`xrlsJkLbG&?k~|s*C${G*^$=|I>@`nk6T=ds*PGTDEuVWm*mHi#NtRXa z$pb>-R&S!1V{E^pLw>j;S5aj0(}a}Mmh*&wFkADYrh%8+eGh`+(NeE`dH9>pEi-2n zw>f=vFZJDBDwbTh5w(XnV8~v$*Y8LF_#Hw;;8V5V%wI9PNoE=D)!de`McYs})i4`% z!M=);!NAAD)LD0Y*tQjSXkLA++tBlZ`fs>hVT`x?DUCfu7=4v9@5+8Q0SadO;+wJC zpW0p6A*bvj)T(-UMnTOzufC>WT4CF9nQn)C zgE9VVCvs~e_6Ad5u=-|ow>cfY=XmR<>YwhU_qUGMOXJB4*sgI4Gw+`7eX6>j zHR8?LnO}b-Y+}9&5px+gCyi6Yc>AVbu^rN7y>CnXg8J(dGARDEwfW)SX+lr(2?R2p z3=cdYl8B0@Z^yj@`5&Db;#Yk=bePOyowAoNM<>sL)rXStC;0HZyqq-d*zMb$fP{TF2fPm;cT<)s?!a|-reHkGPKpDKlaB&Z zdwezwc*eS0`}FKAFld|?JZ(kWF23ET zW0)*ZW1m$&$uWA=G5>IO&p^rRMa>Gi%e|V9qUoJ#59%qWdk$}^+Sgyv=xX$5n*X$m z@HZUbG#mRPFuLo2l<44;onDZN{kY9|-GhkU>5qqJ3`;$Uw`z^w_r0?4k0*M}k`6C_ zP-meTYWi$G)Uqh3OhGX3_6&+^roArWMRp4c(?}_hQwlw6kfSBcp;_IwfM0kF+_eG^l&tnHf{P zrCIp>N8eOtdN^mot^rIDgG{tfh&sbv*7Q?Q2fG2Ei%LwqfOE!2`T(4*kzv@|LyQ=6yU&=BG?nQ8 z1t##B8<&ar-(dnu`|u0zWCg8Xz(9wwi}4IO6Z~u8Ud6u624a!IP*=FM#>bBU&%;?XeHmgUbaTcrg$EvOD9@)W@LQnO zK%$+bnkC!7B?|LeK(ffXk-~wu{5|xz1@jFxHHPk@66AG1f0`i=XWeJ3=gcBqKCHft zIL)o%`!Irc)Vn$~*4yiIql0EGZ_-eONRDeMv%|nqqGrjdE2}9=dHtjyqBb6dnuer3 z;dDh>{)G;8)pVg6$6@y?>}!H$WtXl+e(;)It^NM|yq8PBrD^V;tmb}V8pDIv3ruKdzUz3IiCl$&c!k5?2ZhaHUNkLq-$W5#>p00=@Pl-wX z*Xg3!&1$W_uu!J%^80{5-a)`;`u68e^hKGi3LEc@OViz4^hr@^}%`|rQi@Md^M z(mY(%L!#*ytL~?Usl#?H1Ag*bJ}_Lqdmgq}`@1uLo!h$a@;h?Eu=F~EYfvKh%@CXK zn)-7u*Ua^OZ$G#R{X1CWIQ0MhdsB{z$*oeC7fmaqjp5vQF!TCgsT5>nK_MZ?E+^Y_CbucK zO|EGcSRY*{IiUkSGJB_wj>Gr^EVk#V2VK=LRD=nMS{sDJi9dX^4Y?t@LLFg9i_S1| zYM>HEL`4-TS+}+F+&;3sf<1WkzZa?JM=|m(3uz8x?34KfS-D3#{C5nwPH!}euiO^y z9F~fBuyxh_jjSohX!5y~mP_h=;VpwQf}xrIpF};Ic^?#+NzJ&Z$kr!zx|d$wqu;@2 zxS|sy=tESUNl*5=r7t=AtAsjrsL93i^LK_@?Pf(`|H{6Imd_Wfv?mMi-p+c8U@x*4 z{3hvrl~Wa0Efn1-eT8_-wtxAONwD{b`_4V~M_m_BS1G(|w4?tgdn|z0=;~cRPp_y9 z=Utw1VSQzL?`w;=@m&nR)aTAGXfsn%D*Cl%*gjIlxlMmD?q!V|$8|5c0goS8kW9Q2 z@e)U;C4<%|bh%G14<_D!s(QZaPM(O~n-_aL<;a|BUjO~^-8E4_!>sm^;)l1|=?UT| z>X5MUdaAV7^X(9`o4XK-jJSk)ws1G2xpdx6rU>Jc>W5|Ob*8^5RL z9;aV?OpL|iga!(4fHvqDdmTA<>+)q-+W{ZSjfwfu(xQC*dTnFlZ7HcCz&(u5y2Z(0 zDsb?i+kF-M5Rj(nQ%ra`-JgCoC%z_SD4(7Vyh?4K zmV?r6LV=olXkMs6;bU|9@`d#zq+4Ht)y(ArFASS6ri&$ha?Tge)x}$QH0Fz@>UY3iUr|Ws8_ob#^OhRH}& z^DA8AHd<3xo<5@(YRSp4-{Y=`!ljEZLVXfq;z#dC(XD1)^}VI+@-bGrHpzgT0BwEs`yGj^S{5hNhoX+&iPpC9(k*&SZ`L6n{TM^xYg3# z?waInP6%J_c_LlTZQZw`KX`2;x-^=kT8;T8be5e}&6$BZkrX4YXKK`m?*gehwkU=0CHztA+ucli z?Dc_LGHi=F)lZLQ{gaSAPRLo*SH~M}A>?nbcy`#*$&(Q+;VrIIIcu#V`v&r_MBbdr zRU)m;Eq_vdH7M_dZAzQY4{`gKxkrkmoz1s@x$ti9G}a+fX+T?%=9hk>!QBZQ7n88BTl7QemK$<19=Su|G7hKhK&F4@Vi zc5<8GIgZ1IQ663I9taZre}|(tRwov_tsIwn-H2a~-Rr7CT8iOE#PjnbL&8K{&gKNx zyToZt2?~eu$?_S7^p&yf-?@!P(Ernbo1S@o8nt&$=%3l~;@?l10s;@Mm;IY~?B61; zF~Z?Vsi=pm$ZAPM1&q=xE}vtr~OFvK5J@BYFu} zIreQSPTVaT=lLxaw+|_K{`nTdNkPLBIn(Uzuqkia+5#t?ROR1Ix1yS|Glc`CePr{_ zbRHrMbXk3f%chwrLrtay3Isv66$Ms|oAm}=U{O@jAMwWgEfQ7LWq#&mcdKr{dVS~C z$<^_M2>GheMXtaJ2Ayagsh=s@Ctur$zSkblDww}q^I+i&Pm=lFr>B%Di)rt9=xFgw z=tRk}?L0NTF+gLV)*L-DsOEaNBX~@;oNjGKeoq(IN~Z6;mF+o!;_yqX>QyPCt1-1d ztFL-Jl-Hj2nSOfa^t9~_Mltf9#w|cWR^OYnJZtoP5RReX}tKP7IsqDDER${s#uD+pO(wavbXLfuN%2C%XRKJMh1tP3P17u?99}z{&u_EkAMO znLPTSFioqiX=@KyyKr?+bB&Gg)3I==$Pm*BKX(@K)BiQ^-AZgE?Jd*i)<-UE8xg$* zi;@3ZM|b(Ux#??`3TjN!@s?mAIZ#<#Ec^m;0-UZO=(4c5cwQoIOwm(bM*d5L^Zg(f z_xdm2whb8EAu4Jr^X<75*l7}v9bck8^dUL2>&70(2#?srPfPQYjW-VSdONO+&iBp8 zLg&)f{M6|IHSxus>-b>r*tvhKaxu}7X)I?Yc1TE7%*feB!PpCP-hQA>LNTY}UTtNr;GT)-*32bm4>EBwwfHsAlSF%Ihlb zDBe=Rv{qN!^ZVCb`vSkbU+B>{I`4Xa&u=;%^5wU$t`PUKGQ*aJj1+8KLegjCFH;;I z9ofjqTYo!hWMCvVUH7h`%1BXx|DG2c(zu; z%T?+|CUK3^rhVnzduR5+p%j#iq9R8F0|OJ2B;DKB2QsQ5pak8;K%#w?bJ%{BTF1=g1J z{w&wei;jGY-hVLFm7JnVWL@$06ZKn06V=+n6srq-7K3Iqp0XOJj8Ay;wK6%>NGO+o z^oUQ*iA&Al3h!B)SF@m{C3>c}>z+1zHf%D|Xqp!!t9@E)pwn)~UygMP0e;;)XwT0& z9ksX*?bk8>`_rWNp_OFVnTD1u0pa~STxw+meE^bX@y;LkD{5x>vA6p+x%Us-;8}Mo|G5GTOQ1C=;t2# z#i%Kc*|pN+!{r}w#k8awQXPo@TUlt2igcG2ndGWSbeFEjLygV-Y znlno`KdhQT>B7v2u#cnEiBAL-JrCLXPT{ugcNHUsjg4oP)}qpP>9}^`ueb$tf`{;+ zQi5O)hG#a@BYIu&+WzSBy2nS7c)qA>%1F`zTW94xmE~=>*uogA&dW*1eAY5M>Z6j{ zTbI$erC|>SBJ@6F_gjZOFxcYg{+`dg+08ZA#e7jr<3e{db7Yn* z%ii;OI~YIu@hZ_q_-bw@)F;|u29iR2H2GZT6A`0%uV*rcyxpvA9BelgvZ};DSW|z8QGu?PmKIA9E?0<4b65ba7YwI6=c}t)Q*1VfxTN8Fd zyG3@bWOz7ag8zM5yshZ*`HjY;w-IF+ctCtgN%VFv%CNXPwesr^ZjUIv<&Bs3BdpyU zmCb?<51a2;w|O=k_Prr}u7;;FlHzWiNo_5AYFt*+h;xY>zeT3Z6>UfAMNT@k2I6G= zr@k3$jW?9+L*$WFyJpds!`zS7q;!pt+vu7jbojMEKQ=5$&p9 z^{jr<&pPsk4$y&Vc&T^B`tMcpPLt#>B4Y0@eY=eno!9zjuREFigK|!~RYifZ{pLj{ z&zx|n?pHXjD}RuSN>FhRhGQAqx+?)f+=bh;`^<<1zCq*uWAIUT=*gK_#{atcKT*Lg zdP2A_3LPn?;*chP^6+tp7uD7?;$VLt0eb?{1Vsb*0Rgm;4;L93ra8(S*(j)J{_&%D z?a3hFX|784>5eFx%c6`00_lmdHf$dA3GvJOQ)iMse9r%R(ntDjw1R1E?c>-s|GM3p zszLNJVnSyGY2PXL+)tyAQLC)mz3b%lZm+97)5~=;yE&LSj+=Me{raK3e+QYXS3rLB zv!@PQ2!jU2b0XpFAnxCeVnuF}Q7&4GurW+G%h? zhcpu`2lS?tkFL#m)$t`n8|Rf+q zXzpH@T#imR?S0(xufuy$U3SJk#E+V|rjsgSco`$mF*mQkKB*5Qufa*1@p~J zeIwta6tKNCman=>lK!c%=r(4jF$2@!@LR z0)r|tfy-Bmm{Rh+CAT;ggmw6zVw-Bds@6NR#IVS?g(#F@A-A5I3y#hzZT+^sg(&%v z6hP-J%`Wp#T(|g-@wBzAv4CF}s+F1TTY0@xla{hi8hro7+?qJF;rHO2NQ!gHPybUT z9Bv^hCbXqF3>-I)4OHs5YJG879Vj)npdFNPxIE37wfT0VUfC?E)6z+Ty)`&={?U^y z#JR(Q_m+ApTDjGkx;t8bwN&pX-ppA(v&|bn|5TQpCb#vEwZ)U-CmV*tANFsmdtQ^R zum2S^EIgO-CfO`8uZ(JfdAaT#ZTq4@Lo=uMVcuZv?F248<&OO48aEd=xDh7CZntYp zl{@P9V%=3zD|aIyKG(zNV$al3U%9SlXYAObxs6A!1ij+ho79yiFDWw}IO5mUl@0$N z7DDFA#XDl_4(PbPoosMB)6bqPO6Oq-t}zr3)&hsPIXPkDaRKyHTxWhhHG|MUpo_3v zn3|m(Yl!s#{Tp;SOnwGm=GHCWgajiaVd>SWN;zK`+9b)&_qI z?tEcRJchz~!(U7!>Ep+zkZ{;@lZ<9YM@CFLzU(7Fe-ptQfV*VhID$rOb!8>!kAm#% zKS0Vw_Z9T7G-wZ)rb2hkH~!P7&tnqPMrsuhSD5Sv zgodt;!t zm>hsX1@7vyz1TwKlW&d>KgGW$@rNpMMz=}X^ldru?mXPfXldWUL2f$qRMOH>aEkE$ zViDesJSR?og}mRR6bLeCg(T8Ub7CNDtW{OpK&pY~s|y!QOADYJffoeSK`^6(Hg3ei z770sChvIJb>&{|j<+Ux0o@DppXUx|mV{m&n83o&ZX1yrWk zSg5oCA%p0Hh7=4U!S2H|0kH_I2DIt>t~aA46&Di&**mOsz;WB7Lgde~+<;mZh@pn+Dqpb&4o=ltLQuh_sX-G~y=uVy%6m0(e zdjracu=nq$FXQ>ZuNaRXG)&;@;1HI|!v%#jU%jp_uHFFOhpHW?CuB9?6!#JN^`I*0rr1reJV8$t@J0Sl?cGeM>#8E5vuG;0qWdASyLpQ>T?0f(98pzaaym}GG_ukad@Q~QO;q=^V z7@9=zmG6if>tJ_MJB2-pO$Qxv?f8hmsxMI+tfr|&>(ewk~TLRwsV-g?_g z+hC{?$Qe2QtuMvGySN>-W-FUJG%b^Ns*Ozy1ki+ju~_Jn9CPTMwK09qn~`}s>!GT{ z-OaIt?bWxn_rEt`bZjpye1A(YL#4d#{n>~AK3EKRzFZ12-n=sIQDEEG_k!!tP>MR? zwDdAmc)!_u@yCCwradnC^c1IEX0{!wVE8}S{t>dV2(^WwJ#d)>wG?irB&`IRnRr3k zGk9f_0E%DZ#pPAhh{K1OWeG5Co?1c3EOw(YVlVMs@@y3xNSXPJU5{su@W!P?PINxW63k3FQnd7B%H%}wOxN!De_d=7 z3zp6|Z+72|m}hPO8X7uR|Ey-)w++8f2TqV~u1k#G~p&!4_-Dv2#0 zT;hg5#|WEENLaAX@$izY3oUMBRLlp4^Tqq%MY$j%F6EbU&ThG5i#XMW-g>I_W@1fy zOG`b2*h6}vz{u8eKzB(Zbqn*|`1H!86yF&djq8kSWm}4W6ffx+hK`FP#>9WhY;B#I z-;=p(W|xJat)b*yHFxjH`(~=ynzuD>pZAqud37cA;Og7BI}jxvmH zzjX1E>Lotqx&`w?hB)!bOOSZDZjrzcU&H}GeN&fLR#u?(t%CX_HI+1)l;97R!x(Nx zMn+->C8fVv3+rTTLc&VV#n7VpqdR6a5h9eqJhS-}&G1&MPB~@vXLO^dVkzVKeVVEY zdCzK%HAs*NMHJEK~`Fuc=_+&k33%xIs(Y5T6xUmi8PO=%7P)D_98^AFw|=%wQw^4>I! zeS4g^XRZgo&qb3R2?@#JxfXPny-(Q}|I&XtJMN!PkuxD6Af%D2H@~p%n4&f#9-QNS z;o-lYl&P-^zn`uOO|Jj2GpBH?j;%MK@=Uc|wwdhA#MH5@#`Qlp4Ar0nKC?@3;^(}J zabS$rjYtK9lO2l>xN94m`xn37*KzfVy7{U8pnQJ`%@I?^0^7NXA@R3YquW$k-yA+Y z6FqY!NRHF31TpxVI7Uz*hmiC@!R~&=H%V{@A;QFmsUUSj{XX_$MUjz5G5qoCEU`BX zE=qvQ!L*6K^~eis2B91s1ba zKBjK)#3l?9jLq(*JsM{obGh_wuGoe-XxsbL47oP0X) zVc$}uM+=|L;@qvbj$iKvra4as(1uP;)$A156S0<`8CCP@{*svw*`;q`gR{SR)yEt2 zwG<5N2V5F!-^h7Vy_pVNCGP#;pJNu|JuYgv{5CGk|eo+PdbD@ z+tPD)LcsL8>7cw>0%ylHk%DnN*E>qLW+q17txSc-#E1BY{}Wy^-Bg#fl(aPUj85K0 z+zV1!($873^0;&J&aYofRdH701iuh}_NaF7^ju_`^P@|uQBPXTmIf>$Z#qSo{ot?Q zuJKcMxx$`fxmx!)V({R>J+sq_O1HvKi!Jp`m&6Woe7yQGLS@_OL!%7MLQOjK*+v_W zi3-QyN%4ZOoh*7{Nmjx1A?jbB)V6gPHLnfMQ_Z8yV{`2-hrM-Q%{jjZTL^)bAjN~+ zg!Grdv&D%;>Ap0?(gI__!*Sn5U1#ZY7~Bd8H=+T%K57Dpf|k^ql)(1DP(P>|*!AHS z2Zatu^nU;Tp^BfGhq)y*Gy1x^_T8yGZ6nGX`v7x{mc)5`U6uOrGQ!Vn1wl^Gq@iNJ zBV*&OmbORMi^E5w#e~|+{+9KAi+0e;jgPxVEmGFd)TjUbB)7n|LZ^tZ@P_uUf$YX}^2WUIq9jyzm`+DSist3j<_)8p2NF{@DwKByHiJa-AeV1e|7&Hd6aG$wqL|<#rJOQKTfr4?HUXl zWJIu}Z*=9j%3}GXT~3;s3P!gM_569N^pyC#5twD1ojf}?>l;^jou1*$FFS%b#(msW zGi|zss`{=;c78_t^Y|z2dCwSjk7+q-rr(>7a{Xxg%yeD6#Vjy$R!mZ@Im>K1L`yh% z_*6~f&F*_cdE&=z`K5rJta6g4QYtvMw8UO4H6`-K>BrJuoQvflpOJ$mCwxrEkFNeZ z$iNX?uxh}`7Z#xQmh1b=lVNmqK3#1gszcsk(~l=Dxdv}+PQN&Q;IZ_tHxpjG1izmB zLmSJ%se9tkYH1tH6uBgdeN`njK*>h#?4TVy{n!6g-M`&T7gomt$uFK4AL&f^%lKOM z|AQn0!YQrfd!({iYDC>b@hHB+pI2l?33!I2FW(>dKYv+ab>r9p8r^dsi-^F{(GGI)-x`zhYX{q^y=qE^FkJ$1QqG`28fzYguOJ@Pa`GAJs%=3 zb5i2aWMRsktzg1ETVh_k&*UsFPv-P8^NLK&khFPzp_ly@W@6$aC*|&iu~P*tFKxcr z@Xbyixx#AF|MTSLgUOoy$k7c72l_Yn?>uF_mafZntwPD)pGW3y)F&SIs3@09BR&f= zF9YIsL~b|C;XGPNqdKn3SXDz$*}qsmo_k&AYMW@$+ZZ0JZQ zE&1+oy1343Zi)F%S6$PRE4Ol&T#jSw$*AXz`@zu4)0FnB+lrm6D`j52Pm--&a(5DC zj@tzL&2vXR4RHL~-JPBv;xXe%ns+xMmKH@H?JJkLV( zRC)e*$MEmd?Wlh3gUOmvI+4r{qkPup&H{lOnxmQa?k{YLzjgj_c0aJBh4EW1b9_kk zq0jvVAwU*X7AXEP7SYbu77)mzvq$VV9>634_T0O7UsF{*oRtaS;%(&s3_ZYRCRsbU zlOJWlYmNF;mU?s8_l`Fd!SQLzPi`~gUkxwO6UBt#Jt>u9&2DtyycGu(FL}G3I?+|% zoHl7N+&B}bl{{P{u5g6jD_{BaZ5?0pu4{b9Y$%B-%UNEzI=79xC)3omzt9sOQoj;6 zC_4-5RLb9az8h!T==a*TWp! zv><*d*F3j>accByh;UY2LKQ&_Hq$<8NmUmOee1XKA@-|auPrOlQ<)JpFb6B`m@t2e z%ephUFK0i0kB;^)QIJ})St`pJ%#Soq>8V(6OHjq9u(DlQb@}Jy#UEQu*4Dtk%tS`? z?0m^BOw&6_@ha*0zq!>M-#VPNH9U#74*h0_36^{ot~i#(zb?jBsk&Zoe0BQju4fN! z+I`;KO*p-KN1G>RHF3mQqN1jz>DMnH@z7dBi_p;0;`aJSdAYHH!I#`zjY9ii)dQHI zvU|4&IB#FSJ_F3pY(TjcukV{Qx2qN3pEA8V^;^_l#NNcjfRSqaZ#EqvA+y|gj^>Gl zpvBE&e?7g-T5hTy*kg?qavxIvO&X)szLT?dPztUFkE|O>3Lv8A2F# z$uhO8rGC7@?)}!gEPU!o_b!6|Fw=t7V&k29j2%1OEF5p1;5O6o#jdg3QoxmwP3ZPN zhd##PmkF7xBYS=?uwD{4^)HA!j?Xy3fFPJes?ty8gd9Ki=6-on&Xe4TO+YMz#pLGg zY{gu~Wv)UEr#`JJ^AIe(SD*WY?_=iM6jt>=YEkRL)f1r{X#UVbGBSwj@7V6$yWS}U zobu&&&ORfTPH|LZn{Z2^&7n+7YD;Z}yJ_!&w=+|BTcnKK$lh~zJ1o=kKAzXJ(R+I4 z0>&7Ae66pe)|eCA;~1Wl1W_Azg`%Xd;(&0grvLHj;~E%XIAx$=vO$ zU2S>ogQ4DE-kS!6753G(Xgq)X`}^kwwQdz#` zYXL=|{KhQHW^aq<*>l4oiG$BP_C~ODJlv@;UG|$(^twhK4ZY!oaG3>`AMXSLw-9w& z{+LG)I(%}y}{0%JK?k7#I(G!LQYQZurzg1O%1j|eZr%wLvWx0X;Z5fkgmK}!$qKh zOIrFyo(Y#sS|`jVbR$`~%?lr*aC-P~Z*A2A%Vy;Bv?{`osC~^uuX~nLSmt+%#lP>C zCqJK7H+W#ApLs=fW;QoZVK zMH^l{RL7xdVrp)wIkKa3gO)b8v&8$|V4$P&TXG8Y7Q4%-ca@#6k@Ws$lKHycc7c{s#R?I&Sj0882>HbqF1HKnBuW=8z#oSddQ_U~wFF8xv7WotdA zu1k5?lbkpZAlCc+@wfikq62#HooE_Idx^LCu7;==#v@_1r(l^o=QQg zXKnMpP*|V*)f8GLNJYGT%C|n4ue@D&Hatc=oLkgt^X1XcJNi-R%E-$zA6{WSVuR6H zFg}Ay_VeeP(xlfg#E@|5t&4C})e*)}0_aNM6=BP|DRqdEQ6od&v!Fo4^Hh9&OA87J zyut+@c%i$z$8Gif;SD2z(O*Vl;a~FrsOvo<6iKVFLY8(|7AiO~{*bl279{5`^G5-ghf}Pv8 zX|sx-54b%wmp152d+dO~K|144IydFAGCzHubN^Yed}ev~wcUm^5sCrh?mN6TxQ)Wo z&-;I``p){lG4|f^SpI$g_(3Hko1~0Xw8`EIl|oiV*+PntEwhAdl8VYqLKG26_6#9K z8KJCH3(1tu1W`vz%KRjoG_LvrUI*zqH%!m0!8Zbt=D4&gVYPzBis+wJ+h3 zTDE#N;e9(LOnJLf{%ak^!0(;kUiK}vJ#5*d`m49Mw6^x0No64L4F>W%ZLbWM7Zw;9 z8IiyWK^~;85J}^OcsBqeF_oI+Utn(mjrZr~<{P(ZgozR$udverlm(e5Y!Eyj-z+9! zW_~c|MMq1kaPHjgOzl_Cp9YW;R5Uajkjt)JZOAviaACCbU8Gsr!6c{#<6aCmM$H8^ zfqS54%%VPf2AXu8V$W3-x~PZwMzp-pz6{P+s|>)rMWCj`t8}Somdz zPrP3QOwYXW(qt6knB>4UW{zSiKgfUYv)Gn*=!d2zB0qC|{~o99f1x;2>z+n@#Kcd{ zki;ik?m;{~t8&h3xg$M#SH*^{n1ddksjj|vriQn>=+LW7Z!OgfKK)o1fp;l+DdWHV zag3`D4bqoa?xe96%F9KGQ+IH(jyZZ0@iG1IvE+(V>r6sVN2YiGlrE01zPcD@-6vTP zv3Ku&w?m`(skdrHguJGV#KdyH3O4c>>wBgG z*>`?BvU@k{9c!MU(n)=}hlPn}<{m#)@Okz&bRLD;wu=BVqAetZ~} z$gvVwLVkpK8TK!*Mu74a`gFtz0LX$00QNcGD=SX{sT?wdYXk!WL#^ploR%vk$+$R7 zVQ}08mKycg8k|1ynCEUl0OZgZshkWz0}Gi>RCsvP*ROEL@}&nlbU!Kzpc(KYXbm>+ zhd>AGQ%P3V1g90$A7ligfl!%21Ag}0IcR-A^dL?+JLf^_iLlIj_deqhOUQ;9I|L!c zD7E1S5f!DWq7sHV1@?o?%ww}$uc4Vmfd>aUOjn&($dBvS@;Nw1drP-nMF&;cYYPku zT9yq=6Hr%ZD7A7dd>3Hi2%!*+IrR%&A~3r1^@Tp^tfC^802P&cAm_QWXTjy$u=j^m z7eX_L_=JSgs;bj?&fzNnIfFwo3{n7e*9_R6X%gb5>Po@IgV_M!IWQ1jS7IA$&D1}9 z^ytw&dyFkDJ33dcHe}+IfhrR5>!8L;N=nABD~Fq40*FrnHPplq|8An>fE;AgrSYpNBrq8^gspCeL$d- z@bYCL)cwPYs}LANri|Om%EE%c8+0knUp~Dk=7eoRe47svzkFp+wlPwg0Zqn;Co?k> zis&cO9tFO>l^DDyaN+YJ00*BJ7AD9)s^FbJy%FkwKbN2HHRXyr^dBxjJ`BbXn-O0D ztf>K;HaL&bhBH<>KN$dh{(#GaWD@Gb5wmS>5LAYKZL3&tJeb0h<@2e#n5T zI>35gm@o!%37eel+e1EoR`;G5Q_3*Yq}G~a(`S1yq78lYmYs_|*WE~nQH#0Dr4h@a zeoju#*Iv|1V3(xOe#b7QguN z<(Z6-{FKSv-*$4<@RAcv(IVX+>&x03z^gI2ZvEj~6C)8XsNLL9`t?Q-5L^S}g58&% zIgZV3mt?o;HQ7?j$jn&4{CMRuvl;nbd*6kvTknj=7VFuxDm6#$sn)ru)63<-u}r=x zZrxoaer#fbHj`%SxTp9@n$YnW$Bxb)t;M^NgQ>#FW{zy%van!dkZ&IUfwTBPw`uOq z!-s?3|2lnu{_^Uzhx7Vu%*V9gCW|9%?s~^^kk#z^#*;s+3&lS`m!Tnx;R-Co7 zcoE*%=M6J@zofv%A5I4pvi^z!mLkTaj2lb3hJ+#E3)y9n>{UL5#bd-vkW zMqdlSAR&Jn{B6+?7#RG3XdV*0B9}>0pHevYz}*DdS`U@DoMLCcshF10g{`kghfCJiDePkDW$d9vc=i)8U2$)2!d-a5a4oP8;-#kkwPOOX`4V z^7Ls#Wo0h@U$_(A@%IO&I`;j|ARHNRW=XY^!q7bIT)LpJK5RYK7wm%j)@!_TZn7|x=Z*T zYG`Qm)^9ZY#1Y-Mqu4(zTVIk8eS?EAx;=v(1*9jObUW7#gRTAG&Jh|MTnMdeUS3;O z6?_HHD`-NQ3;RQ4>w!Qs)YJ1C^aY6WQAr`L3xxYuRTI!c9ug7JK7E>OD$n9)J9Kr( zJLKi$gs0d+1R%x8uwr}qwQTuw7z#X+TwigzAK{x#tgMdg-75zhPS8EXJ)p|NK8Oo} zSi?Ir^^J}2YqGJk%T7$h4~}A6f~OmAicn#NJJ#>Y<9Oytfh{#-px#z0s9lyzzquNVhq%@B#noen`I zIPJEzO#hbt87rN{Js&j0tY#eXt^7*$V8!dp7Iw1FF+v^TxzmA>{R5*9h>iddGw4T){`N)et!+G%kPCP1*bl*zdPw6 zaqDf+cIB(}H7~YSJ8$o5hbhJU;+C=LZHebiFU$EaY;DmbNP63DRhq!&0__(*KDaa7 zV$UcESPuyZvckuPZ1q!DAtD?#nU-8*WxR^ue*l9aFd=$5tUy=;E2qeF^%4-XsHhEh zh>Q&73l|(PSSJW*STPiY5zNMZo|Z<6F7&46#f#Aq5v65ifR2Cu`4ju#0h!o+tR=0D zk`=jI2JfA=r%r)IA~Mw(i9XD+R4hg z;pezQF9lz;O`A3mghTcvJpJC@*sl5bnqXOj9sSs`Pgw6z$`YJ_35gdVVO_rtpB+;( zGtfi~a<6H^=%X)9UGcr=>PysY$LIR3KQ)0arx5^*Nv@Pwq(6|11B52NABCVvK)%t4OpcKe;^B|*|rUG)n}gP@`|~cVXhK% zI%%gz9(?NdN=Q6D!AZVt8^Yb1B+ZPCL27ys5pk*=RV)RWzRKGq(C>^`srA3N;UR!ZVVeCXkI5;`oblZ5P zq@=X;-BO0#sIBM|fB&t5TtdRarvbY&p3~KRjP2Nwt|o0FJmt|N7D)vP#l7?aE|TnX zJp19PPA zGvdit*!MXcL}`UP~lGh=|ZO>0gFCNhmSDp>gh>l>6YAuJK2i@ zbV9(`hR@(O$#6x};b{Yc*>vIH_K7}TGN0aofzY5J4b=q`rdxOKD#*!gatsU)S3PrP zYqXMI;a9+J`An|`|615&qA9A`59-zJ&&?KsXscI^POHFGHJbmttY31ccqpKr-W`E#UJ2>)%^qD}W`5U1t*xy=_HAt3 z+w2v#^~x7Rh9u~G8yav%D5LHby|0-m3nvxZwGG{bOuj1H#VeC>H_ z_Mwf{l}dwIZQ;(4hY#EKC0#Ja-U@#hAh+;@2@DE?|M7Y5NPj;+tkR9**+r7f2X?m9 z1SeP{nVHmwqQJN8>S};@Q)44dMiabtFq7>1_Kk&xh6Y>G;lm>^K?42H=k{$-`+Q|L zGV4U1p4o6XN5??JA-!A74g}7arRFdNcKqdMiOI?PB_&rNTL<|KdlG2NcM3mHZ1k%r zNcP0Ngj#namk(79Jp+TrrAy*)0mVZK6BEc-xVY$d?i53WgqxpGc%-CV*)2uJQq#zzZO!5<9yNhAg3)r9)7A4Ua`Fi ztsD1ab4K6Z2nA^HS>tZS#T6IDt{uMvk1#xPru<@%-(h7B6cb%*F)V_tu;0(N=`KQ# zh7i)3`S}f#a^Sg!M-h|8ZQMJ z&V>ttJ2Q%2o%-VBhGzl&V@(Y?Gx(EPg5ykO`%eC|H`<)W0)ig={CVpsximhQL1Bl# z8yw6?OPi0gL{IMtO8(oo%K&KNg%6CxT^u|ZzG1!-pQTBZ;3$IwKj*PyMQH8OlEC^B zeq5L&pp)2$Q$UmW__4t8yvK~fotqP)EMjqHL< zz3*SY`pPE2CtCf|r9(%Lj`jCDB95})yseH73$?!hKmYAkqmu!@LeA>nY1Tk_h_D89 z(qICgWX6C5CTObj0fB+%Kg)N2L>`dpfiHOYkSA?sX}RpNyxRtj^T;(F9)=M+to@AK z$xuT~O=0jGfO0p~D+g|Z2M?w~whvarXUXIaLqjtdOJT=C6ssy~OAQTJX80s|@))5^ z!;B1eOHudl7ouREIflUt>}E?aV?iUQtGf(NHvZ!P49AkpeVGGhm(AQR=-DoeHpl*m6{A;QUiBGN zP#__G2(^yMum+BdnO(lzRnT0m(?-7X{u$e$^Q>HAuN*oHnjfkuCjBzeurcIdVR_A` z&ph;jA?8fYp&Dt&Nh(*DJ8@yW6*4;NN>dV45@+o{j9Ya(S~S+>z1qC6S$4%IRV1CY z@m)m_g$O;`_kncF@%e85RXa^?p;Km+#yn+iH{BRb`}fZ6rtj&G(@6(jW%J|gdr#?p ziAyu-396_4{r#7hWgHwGt;8PcG42w*v4#|h4M3m0YY1u7vhx~iab9Z|i`-q|Z-i=! z+8_Bd2uFpZh6GX@A#=-V6z1UQhGYvg-c1>A7il7%K0SKyU_hx6ca2;EVnxnfzkW1F za4;PO#fGyyzowVtBii0|64V>u3N)GI$|&IGVoicE;H4Xa(Fq0u(=#gq=gS&5{ItPU z{4z;KuJIsMC@n_g(c?)@0in5T*2A0lqj$4$Y}zo9!z`=)b(e?tOq9YzXlAI#8M(Lz zULJ=R1lHwm7>WKds8tF%Tja|7A-?Z8QPS4%o==Kn=}K;eT|lo1;axOGDtg>uS^6@Y zoUqp0u!S%Q>dm9m9lH0`j9y-0WPC?M|6bsT?JVW{_Y`^5TUT@U9(f(t1ktU-3h9Ny z9`ip|S>Kz?H63(gG{c{Iu4_$wzvC7VZKm01)2Y0Pn3#_o0|sCkdqgOqJlxcNSuJT4K`bt z&#&j4Uf&LrxcH$y!1;LL2CZKWq2;dpa!E_*a(i%3hTDS60#f8y+fOx~BM2G}v!{xM z`Jb%E8s6t9%BTJ=b9^=5@w(F?Iw_=F`=Lmy&{y5Zx){V`RKjH1|F}J7HZ@jQP=xWm z31xNeN;vn@?w%tZQJ7+x~US^>!Mf#_e7T z*ZS|xg^SYz-L*v{CV6iQ3rKy;>!5TNtOf^s%BsP<-iXhdWhFQoqMx z;)K>Yb8q>VX&wnjUftJ!^!`Lp(XWM!CL!&*W#&E7C-Zyh6Mu$eC`6T_`<*ZpJhdnyOy2vr_TxtY;)!!6rTJ2M z0rEc~!7wv5B>;Or`~opRY8qy)Sx@$$N~?T(H4wJpSne+3eM^QM`M zovS{k*9Pi^uM^}uiqG~BmV_19b^#baqV%wt@oauXPSw3R$&t^2SF$JuHx){6Ik(mN z$Bnh&Q&Ng@+Uv^i-)>grn7ywbE~O~XIOSk$aVae&_3`9{))nU~n~VLJ>68E z<)#?_W?WoKvHV$1-_gt;GL2L@{{|8ck$f)ER>V5_*8XF-@LuowdTHrN!NVOsEB?R{ zH$5W}Jbcq=V#I{bQ%H2THA=hSSgcG+3W~|8DKOygl8bNE-5_6penIv;G5zM6g3|eq zJ|v${)MN#K_)Is)v0X#sg2%nJ{2ueQ>EWrFzAp z-FLBh?zMMhLUr;!^G!s}Uej0lx^p($4k-SdGq znhcbgYg z=-A=?(}hbdM}%GP=v|r&zC@bzpx{;4{U~={A#RGw;CoT`wh-VeAFBBn6co6LP@37{ zIOE{t;Bg~(S;e$fDJ!cOzJCB0;pD){Jf-j4` zj!rECRYq{Ay0uh|DdVSw4EG8z!PggcE@)Au04Et_>?0-oYRgs51({y)qOMH$)X&&= z#*M2oNLwh-E^y*#toJ-k*J4|yk9~4~Pert>z`@H&$x)32(Ul(yjtu|3xEZfD)#}>P zgEi}}k){Pl8xG$zE&d)LsBmq>g~NF@utEJW;azX_JFPt}_6Iw0Vse_^N!aO{n9PnN zJSlHu1{N!V`XVB*?E;>iHP;+@Tk!P5itCw?so_AygEw%^l?P+a@8x+l6mhGetTf@| zke06go7@jai(hz4%7!Y77OOUfv#lPKwsUXeToFdAj$T;%rOqTmbVzSaEX`VC(10r= zldxuEFzb>DpkpD@) z)t)HnY2q}q8f`7_Pz+YuL&5lwC6h)(P?G8j_4gv)nFSJoYBPcW6XMLStp}d|KM&Un zACAx3*UFO0^2mmsl4sjPP5UTX?XkWjlc~(RLVYPi#w%acH;rvsJhjN3-T>&LlTAc+ zl5F_gHS4*|PtqgRB`iCf+EZWudU-@9p^YW_aD|L0r~CX$|IIh%fw5F#r`fDK=Ci{1 zPI%kA>MFWb{p+ZnbcQ6;-x)lWKKj7kCEF&tT7qyAT+ZsLL8T+{UP9=?09(5wEi-?S zW&CxEGY9u#7s19wBE9x_N9L-F8(o!8r3nZ0e3<3}I79y`yPTGmu96dZ?4PS?WB!qi z#M_&%ak&CRd>({#7#W}|7lZzjUA2s}G#BOUVa-*l^R#I5twg>NZ z8uD~{aw_}vFSFgpDzGYY@@?hsn)Td;ZT(A`$L+jT#{oWfi4&~kqWNyOq7ov;5;b-t z#aBe`_ykWl-ZsZ?g-*8zS~PpEoJ<;9{^ay9BlA+7!^8JFQJPY5`J#*bD7p@dd{fS*_>V8WZWw(j^V)f1>nfl6FW=JNrP83na&V_2;?q+O zPxNGNBH0tx!cH+k31pZ5P?6M;k}oCC4kYy$8GXx?bCa3zGP=*8!s(JRePDz3R$EuI ziOAk&XGduVn8a!R+(69%G48e9M9;r5-~MbO0IB@9x^TvVW#8MR^vm7NO(_?)QWC^@ z{oq8^)As5d&#U%bk*>evv^?)P?Pr;H$>d#y?eV0I@1Al(yW@Wn+^C(C>msk5s{IXP z_p@RLY5Z#X>?sC!_M4g>EBJ@-cKPRe`V}RWljt`d4Q)UUv9atbDk>OtA(9!K3K;cs zMUWG!nwq{-(9OQO_y)D8zc^i4eLXmSz2#d$SX!Kx;jrl)8~XsbZ|Ek5bMPWRe?Ama zS|z3WuU~Uhe^1j{qxHf}l_x^M_9L3UJ-rxegG&UCM*rpCBGV|Gvd>~?7?H_1xN$D5 zb3A{LF8*It>9=o9C`%izA0@m8c@Hs~F@c7tqk4d5Q2Be9ea|Mx7dv;d>A$UU59!}% z@q|ukQc1X-(dJ1CoY=hLFe(^R@oy|L2Exd~Gr-!#96!})9phy8Hu!~%R?>lQ)0d-2CQCMfgv%)KXvrKaqY~%xED~a zh&tp}GE6k4*NKQ0B&ybvP0#vn@jZ9Aj^%8Losm!87+nv8(Pg<^zgfN<*9y*j$6_`| z)v32UVAj+s)!ikynN>$eM`0b|AsES$=mXtA@*k9{!ctNnQc`%Nq}cq+qoO>9C;tbJ z^F#o6@~>aO@wilT_Oz(h`i zAQ%`}lHJ8;V}01^&Ga7!rsgOy% z)7ukU+SUGpyQIzwi^+V4ig4QXX%eDtM|4m?Ju6$XTr>@}%M-Dd>gp>Pdo{JdI|dU=Kv%%2G#)~A zZh~27fB!5v5YR+jv+i~v1CFA00N}dH$ih>^QxzlTfcyCV{gth)b74c%8mijbUUQ>6 ziIQp{Q~?Y!T*KA-S7bK59UC8nejHSRNR>Euzjbj~^P}(fx)c=G_{C0hkFb@qh;z1T zc$A1?J|n>gTGw1d-IXXa+^@lV$8h_;`0r|-c$uwK?(V6yvbae?j$8EWSv9Sbipqz_ ze&*Uo9KSjb=b=9YaiK2?luq6p-NKTO;R>v;4X&NlfA)Wgdfxv_F&y5@x983h{q}j{ zRl|s6<*CZvieq}ty>GZ;BJ(U_RJ3myZoX zb6SH@p~3v_{_ki#H-Ucueopv0B`Q&Q55;}-PZFNM%k3X70MN(7$SCBl`2Iawo(q_V zI*&9)>7ata-8*vy5%U{kzcbai!;qG>kni5L3lP&1l=oRWqas4XVSM7^1?CN`uC9v- zd;CZQP_<)>jTeNlHyj-+dxzX@)}1j|?|pv8#N_8cL4jANWW3hgzh|3)M}V;w2z}-b zPizqOBO)@tq3+i!2WQMuTI zNoiEYk_3Ym<1kkkt;5%8>7YqNeSKANBWh}g?mmD1kb>?GL! z<7UW<*W|GZ@y*vIk56XhvHuX?vC{{5TK^)o{hk#vThUJ3m7P)`@i5WTgITvfvKGga z>Q9J=7uL+WiyDnv4lrI@2LWYnY!@5b(_r@lnMUBQ0^j_HyE>7CbPg~}jvdPcN`P_g zy2W0vZJ_2Ms0*y&Cp}&yL=O;jjK0D8K;ja9wpjT?Hvz`{axuz-eIR?a0S;x413dH% zu)?=*2n~7*P#Qqk5h_0>jM+dVioAEvQ%?>7V@y#TG53~kfEI})0taVjc#c1jbj^l4 zKt)Ag`Bp#6L(c(RIN_kfn&kcOoU`(O;hdcnnZ{X(sUFHbL^1AQVydhbX@1!Qd7n!2 zgto%tY;4Lx>74HipOX@tHN5%FS2yL5QV>R>-F(w_?H}%RQ1aVvS=gLE^e)YVL*|KM zAvv*e@{F(?sy)mk<0US=Oa5f-WtUs)HROvLKU=DwlX2_m9KjsL+DdE6W)gdX8`tfm z^}v{vmESH70T=1FAKh+eZ#us;TJ~%5&MlJT5f_7p3+~gmg^YlD@Zj-Y%QyAn#S3&R z|1c68N7Pt^yb4K+?_LzByt#DqAmc~$OZNMo4YQ8K+iW`huXIC()y5TW+;3r+L{!sU zDT8G@uEgB@{NUhVV~o(Y^Dh^6fc!ALg8P77_nlq;N7Ftq#ax>cPob9}2<*4REZ#`N zLOdNn$0FBh^WHLFna?GLl)J~Un*X7VIgKuS4BpD9v4@)*@1mxuxn)283`{OAV7t`T zMl!&TbHR7-sv-^*U`Sh=*UV5$_brUzVxptZDkyB^gaW4_yl>qi!Ow1Rw$7dfJ@J4} z;`{d<4GqeGf)KBXhe`E2XisC^#oc9PvdG^65h*358Z&TwI&JNTH|f413CHR9GA;J}RZ!Ssi-w%t4DsPM?mku>G zH3$%ZYZ520^Fy19PlVHLc4o$6AGj>3aAZGw77i!WtUG-fB@nU)Y%wMV=*yP{=38FB zbOFd<^#B7!?YM^Eq8IjH-Qlpq=L5w`SX7jputgXIE2}!Lu$C5fSD`M+FHIgCaM}Ph zPf1xBI8cwZ*}iiI25UIJP`TlU+1c4m`F9euJ9gyR^`8T|1fLXC9~bi7)P&LfUajn67FlNJ{4GsZby|hk%L;f2@4IzDtYpZV9 z{_*{h!=>6d-f~@3h@rR<%%Ua<@RovQ6ROTgscERG_4f4%+7Bqf`yb{cmoLjjl6XpC zz>W`9YibA794kL3Cnqedv7{vBY89BQa;scCJX^Onz~2hj4ip)Xuu-)Q@bN4JIK#Hr=v6%)hpr@a{}>zj*K}LHxJ5!q4{Mn2fROi>J2q(b<7`?|aj4 zbcoknE%l(Any2uw7)k!yJha*DX62Vih%`g(!?g#MIyZ`6E@)8Nuf+^9@ZLLf`p=+L z2?NEKPm={1)>n9|OY$Jyd8qy~5j)DKQ@fr#)Sjs+G4JhZN|Etmcx3r^S^)F_VBpoY z+vV)vu#Au^2%DG}ap3&~t!-0QrNeQZNxNZ zAqf)?I61)d1_6KvA%k8Zx%R)C-tus&g* zMQqsqz!zy28Fbi`p+Kn7FS6^WWDUs#)hI3PUQ|@_V}I6y@l8a}Ka4e3prtt3zGN_9 zr<(bV$uP3whDSzvPlbasiX`5{V1C;6l;E(h$}@8(!(O4C`G@*7u0c=ByTjEUKsj#oQf0*EN_(b0LDmf;X{xRC$M*ezv|;t4l)PO6cp$r z1fqp-FK}y7k>VEm6gL138yy>q1BVsSuGqEzQug3Fr0McHzMw!Hg$VM3kT8II&Y%>( z%7f*e<`cClx!)1ewX=zK>8QT_ z@!<`oDgNFEC%5A3?&(*qT8zzc7<@inIXN-W)7Ph$Wl{<6c#6$s=xsgR-C0g;mxWNV z)NALu92}I&K@b7GVMq(+@PC8RhJnDKBm=q+K_0?aU4VP~ZbWzAI*r&TOYkVJGHWZF zz1Fe9Nsi9j*?GRt{{jht`wRXLasxQP*P)@=N_76E+kLI7!moo}+}+eP0n#KvplwEj z%t+ZkG=wlkL5rTq|D@dEy|06Er+NH5a?;@B4qwT@KXw&+fvqLO$$8@R z>8jS&2Y+bX!LI|63i`r~j4=TBFN#wU8&5)Dwc>C3%_6sWzaR%3#|+ffKYu^#we=DD zAdDeV@}iXmlsEJkF|Z1-L5q&QsH}XwGLWgVlEFhV<@s~#_MEf0az3R<&Fn#`4Swe4 zzhEsdFX4@c8MQD@U2Ww($lBgQpg={454IdiN=o>Cow)o#&|Ro;VV>k178*z@hbb{l zn((d{x^)1X)8Fzy3ssbh)JCo|vhWBaRCPG@Rozl|#`OZJ1b70oAi&R9f98UWNZ#Ax z$%N4e$TQ!*f8S_|s;aQJ7hfw0*x7CSC~iS|6M-fSyCf{7GC+V#O4{Tl-P|)W0==d% zWoMpE9EgZyJ`_|`chZn@s(~Hf&JNGdW31T?;Is!JblBmZBBUDK2kJj+w-sz)7+Hnq z;K3Vj&kgeNk;8neVJy<8qO6QxR8&V_A3Ve(C{MV!rn)j7Q}XG#%$zxq@W|O^X?$WP z<*Z?Dr_#iyJIea{0$t>A~L zscAQO)`GfRaj5$KUi@W0Wj7s5owOPYhlg*+1ur#Um)^U@llF8w<S)57+Va?RL$igZ8+XcA*3rpHR-+!#-Dr(bUV?7w>FJ4<3A8cPxuB}S$)~i`7+(ZW z2^iC0;Dwjq$8qS%w%O|JA@fNn;#Oz-L9!m(@c+e1)VKmdI;JZ=PG>>*!b*GRJRS?K z6@g@R`x_pCBtEAr<1O*`he$(C<8eZ`^;4u5=H_C%Z{CLikFURfF`VSUd_e_0F)pPK z0Y*iE$3mc#38e1;7IYaZUD zd`5NTl$5ev;OqVa&{SMnK}Ff#)(C}tyQv3zdr5X)v9bzQ;?_8D zA9O(Me8XJe=z{PyQHST3ERWO^I4u_)VuaEzc^s%$^$r7`#>=vvYGBWiYwe|Iz4YATTopN5)7T#p{ z|BwC{XFiJ@kAEdUqWV%TfVi&PYh6lM_(5Ep&6O*Nn%u|9`Fev%={AQ71x3?&bUfI& zf-0GJ><|#}Y77Q5Yu5#ROUv}vulZ*8($Ph5MAVaGE`$u4g?jQw;43yatGS#*HsS;< zwZhZI|7II+S^b06S$4CG;Sa77mV+QtU7jT*+~U50haC}7*>B!}AoH3(_!6bZWGM(MSP$qO)KBozzo)3gs9l6aD}e3t|Cx?%s`7t8GGo{|}ZV z4N>w7u>8~k#x%HHpn_FB56&vMuA+0SIA7<$NCbUxe}n?+3iNQXE9M0_v#|N#X~30e zIwx;YdDF|Q7`-N$4?f`?ALIB{k)GTD+~JLt{TW+e!Ta~iOH0VZri>m*PxRc4qLH0F z7QjeYXeb5_=vO`Rc3ZsL6ChvU@cZ)u75sixc|xzamm7QjT$U6TX5PIU1WwpzgHs*G zCQ(&hzA4Q5v)RTY=sfPnypE3gL>1fzZmzAks;kpSE3GX|?iCa?vb1!AJQc+Ew|RLS z5>EA>LO;3wg2JV#nk+#6wi^Sb3){|}r6yU(;cUMBdY$radZ0HH#tk^dL1;nFv$CfG zli$;)9>_b#7yy$i-1xAdpvZ^_HC0tn7{d$=y}*Hsz46wqTOip&Zz1@WlGw<4zP)7| z60{Ng={!)s6W}lSt6`;aNNHE3`M!If-6bjH_eNSG_`i2J#|NRPe z4~`?%3U;Cdx*8ln7+T;diZ;4j2cfp_oja(oFk`Yr9C*`#FJOd9-rO(uaH;OBiY{=AZtFAtyrgj{E-p(Ft?rBWS zH9U!vaB-!tT3X6w+FMw>07d@!^MNwo zZLk7Gms_O>9$I;?EskCs9*Pe=+e4o!>_dkMdAhoRL99HNM|E84!7UogZsPv;4T_vv zD_f`MEq%QCX8+%5h_pu7C-Kl9XQ|)p3OzC^@r(?t(b(X6w6M4t%Fl-<%kPlO_%1DN zWIs&?jUXZ&x?i%Rd9v}R4Gg5w@KtrJt-jQM-wG~u`@5g>e5Y7LCo~==#lXCOW?_yX0MW&(b7H_#q~#Di#3dCH(oL$yAR%3KMDF#`;V`lBFpUV zikuty=|jh~Q;gkoyl2(Z6{~qKe7Ru#?N4U%bFs_qR0U#_n{T&?)8q*m?zW8350BIc zcbhH~0^^cxE2+uP#>ICwW5d5GCG!stOk6y5v2yi{?A}DKy>oX2)URIA=~)sQ0afcm zrq{3h?_xZ&rGle^1&)gauFD0ka&7+S&(t%*bG7DReS=GQG^?8<>w`KOK~8aLbN>_> z{Vnj%dDYVV^@gzY+|@;m^!;&R;oCzyUuC2@P7W;svnUQ{qlx_UI;&a6d+@(ZVRp7W zU-sV;t0-E0J(9QU3G5Qsj7j|G*OD`ydknU z(>Wzp*E0IvPyi*$>=6Eu|JeL}y`Qz0$E)MCv_+vgIWuhndpJ1>5LM7Bym>R-)PxLS z05`!eUJS*xlJ^#Wyb!FpUB=^E_vKyCZvRZVTr7R=IKOy-Rm37|-B--It_7yCIL(C~ zTUrMAIk8!seW=1~loVh+WGTvz_zFmD{8EU6c|^<)h7A)S)YMPruZ?8uk4 z?Rmnxg!sO!56G!23BD?DJMT~LuU^b8M=UHv@^bmqd(vAM4#8dn501N45&Pbg+|1lL!mvM1-EyXIL$9`ro{0$P_jO^ShB*XL?Lu)zE#E zm~C=cU>g9Z-+C?ZIL)TaCh=L5WoZOMpFs*!_Af0hzkdHd$i)RQ*)blT9rX01*J+c| z(kT0T2L}z`m@BKO&?x^z-IXAJ7aPB}w)Q`DKYGhuBGTiQT9+89t*lvs57i}_EX@qz8rU>-weZ{!*$4<#K z%DAvgRSc7R?>Dbs-mr}7{6TnD)wAq1q0O#izLz{ocPzs0=-Hq|-&Wmcr!JXZ{c4w+ zpS>^Qnd!Fu+3yeBn^QNX_%3v~s(w7I&Es)haHnq9${&y7xHXqX*GAV*_Meu|e{%a| zA6sod&n++**E%-iJ|DY!pWNs4E8QY8pVKr{RCThbJi~17}Ml4 zg+-G;T`6wgdGNN`n8rBMAm7fx=JnmCIIdinQ}*^oc$2#9wz0R|)-zE^TXnnC=!F+l zeNexV=)*lVCMKp8BDa(jXGh14|8;iO)(&%jqF3N>6$ema;s%Bq?xrX@-CORDLhtpq zLojAV7DQ}pEZQVk>O&0$Ed)1CMS@RM)B?jBhy?%YTfAT~e7^YyY#;FY#{celS`Nu2 zdG}|HRWf6Hr)_@)53(*VLhN$lNo z!KLxdn|yqpTxfsq=sYvaa(Q`i#L0T1V_=)_O_L60`7_Q}E^5Ae`jtzoOVa6jj=ot+ zW}>-eR(K?-myJs?dDLl~vL9AGh6iGN`zuA^Lt7Wer`Be2sr^#tgM7O~Cz6_Nb^f@W zdWRoiJha8XQq97Uxh^m(Q|6D9f261Jb>c8x`h)!QtJ6;JUfv&_^f&`2 z;4GGUKh4;uT~B|#tZn%EM8hM6%jjWoUa`vFL8j8}ne4HL+j?z9cb>hv<9)IjO&vj8 zb#5^%^3c3@X~FGgYTCVPCBKab@4MkOcstThn>$|FtA{@&As&6KZq!QNv(&^~e4Rvs z`a$xJWc`AjGb3~gByX>uG#xN+5E1OJoX#F*_Bg~f*%NO5pIm_TDk;h+dKd1yxagJ+ z#Z1&^<6@={PlAdzALYf<>gK+`?2a%i zCepgP7I8W;4xBcZ(f$5z?PpQ5bDgCAuhbO{68}M8z8mNoa1Tz4Y2E@;4^4)I^PdBU z55F;oRni_IAtt*O9A^y;j<&W&v+{4?cmnVkJt}ld3W|!abo2f|zh%|symzD5;tX!= zi%Da?zr*j&Q+~(n*G~GI2|mZ{q0v9rMl8}jj?*W{lp1~Z_y68HHZ~qq02isAfvV_T zpW0MgUbxJ7Ysl@7N;dtd&?GGGQBiJR>!W^HL(x-OS}>-rwe$H@*zolBfhz`Q-#-pd z&U|_35ZA}Xjf*-!(}0IiCR&FeOp{GD8SisQrT2bemj7Pfy?v0Sq_*(hvQQ(`85Pe1 zPy`(~!aMM+q{45Sckj_XEnhpzjrgdo<~8nXxXiDy35pF=B#%5Cf5=o77xa|-2>Q)Qw%)kPecQ-IF+D^;uBMf;x%#lWBE{4LBo~%2M{SAixMCN5fNvom|^jN z&aJYd0{!7PR#prr@Uk_rQ`QtXmcpFUw_+v(-SeX|)hRWr~h*%7K(baRieyUU~I z&UQP2=?A`9V#JAy2C2`o9c(RV5gu;vEHQpFF|_&L7mTkn5%F){k1RgkfpH*qZI`*F=&Jh0gs<)5?J9Skj^dXk>+?N$89v8lkaklP z9n_e~bxe9yN!9#Y%y<5-DSi5zG@&0O<*(dBi?ydmZ;XcI2UV9FrReivCwYFJIfsPx z{+G7q>sOamFBtI4a|9~geajb1^ZpO(vc)%b9fLxXkwb?ZoIZ-g=6=PCiRxipGDsq z!R++2=G|rYLU-&6mW`ipTcb7j^TS$;p|PinWGw~uP)a!1G(TlFkvz|>>(rHKAM0ex z&(H6B)=xbqO2EbV&`^I?gU7OXdx>}McT$?R*(Vo%mQLOwixs1D3RK#2<3>VWfsK~7 z+Ta&v!uwp(y&6;FvccJ!DC)!Qc(b-+P^znIYfTTnENPSDipC}8X^Txb-sbDFuoJ!pH-0`<@yodOY z&Z=jpt`#Ouan+d#>l`spN*~l~5PK54qpTt;CuidfM8L$w5D{2Bn{LA6Tp}!p5C|y7 zyPz57EnY!KMqT?3$u;<~-ftd|C!%dl;?l#cva6-V9xZ!!mf~NQ>$-Tjg(f+!w?jH zz!lM!;v1%@#DxX~02cAF7J@Fby&Yf!JbZ!z0zh~0>NY@Sj?v`%6Iz;dv}>&EZRu(2 zY~h-Jh4WrpYXIr}$E$4LmgtQs=07hbb?(%y-a{3S4EHul^Rfg)v~+chIgge^K2%8w z3gq~~K>qY4hoYQ@TuF3K+xQQ13fe-cyz(n!)$~sLCAp6?J4G`(^6M#Igp16cxxAN! zRv1MmXZ9CgUT6Gqknp}emDsYw3(e7!4DscKq9obdcP2I4{}ju~IxPJ#oI6olno#Q9 zQo3li1;xN~&Dg`cAIdG}^2RR2Q4I|ZKM~Scy}wRT)2{)$$2<2oi$ArFPvUqzP1}7R z@BK6IUid_dzLb8T9VLmxDwEjO;MHBhpWn`2e%zh4$~$5Z5O|mD&&(A^Eg|N&?b*qN z1ze&t7TPKg3j*5%R;%TGQ$k*S{d(Ur_50PlM4Ocm_C1{LJO;&{%3KjeI#iUavou3K z8&e@eBmT^^w~jeo@4OxgRj-?RKZr5EcquC-z52W24pGfcrcq0?YZqhH>`ZN5cV}(# zh+7hk+ILSux7F&9BJb_Blha?8_b)E)-;(<9-nd@FGa8yx6=z5Y@dEKV_DPA+T{MXZM>3bP$zf@n`?Q@^M6qzsGSn^(qx=z(DkKG zwa>4Jm}84?qPjjL>JcZ@Tql)InO)Y0p^T%^`))FA8iL^9jav_0P2@`K>=YG{YjF;l z1(~U|^yw}S2cbdW42K!&ma3MDMbeUt(vL>SyU)C=DtBaKZ7{oL#ILWkVtieQhr%k? zOwp`i(nD1Rti1EM=$JQAU-eP7Hj|H7s;>ZE{=h{=-UIHZNyHx?;iR#RB#o z20Yzb&qG7c!(l!wYC;HlivGSnrPq8B3Ybsrrw{0sW7xIpG0fa1>#Vwqqyz8Yv4x;=o*F@h$%F}zeuSg5*nItjyL{^*qk##0MEXGJuR9^j>CX8f$) zcE{eJtvDj;9=t2BzpJlmupE25B>tA^xW!CCza^i=3^-D`Ir6vT!$}82?6{&IY21I` z^!3xte{IV#irj5j1oXquyrO_qISZ*43P~g z_ZMiHSt)&QyPrSF$jppB4QOgu3tYvREg8Z$X>TUH0|F>+oj^9Lw>{h`lsIWcSF={K zo`^dJp5T;pndmpF#3{4(mZ20`Ew4X4m;*;;@7`$|MHWTi#8FXSLDB(71}7cVYG zk$$IVXNOB3&?g!Kf`PrXFeCI;ZAtnhc!0MCEOYiQkFv-Wx~mt=#hjfzwc~M6aPXbS?>(01=11Dr z+0gZgSO-5c1ffwxSU7ZCab&CA>XIXZt{y#FNMa(vW`xncjFzms`vyx1$GRHeEq(p5 zfq^-x(|)B!n6I0G^=umo;18(7lR~tTx69&M4S}$nk>ci$wu0w@p`jP_-+KRIfoLu|t+`A*Z1xn{eo-mqT zf$6~1lV zx!&XTdOcSKj5b)AucMtz90@u;bw9hWSffMjAKOfZ-j0%K@JbLCsE4>qft*-Ng#UqO}R2@6jijQ9y6^mJ`i6~y3PCU}sj*Pv+HwR?BEz?PCJ@RfU1lVG6$ zbkq6u6Ch<{W1Gv;D2UBlwop(~!ncr{hv!;%A&d3~1mA$)6&M^0r^0fSTx0|+`2Z}T zszQ5H>0pxVsrY#{g~f456(P^m;p*u4x2 zItSXUc){&A6ms(Ns4fAx$CaSNP{N21MlUc#%gGVD++GNy1>ogPAkjU3oSl(@P&|W< zIU9~gmBtua;ABFi8qo49s~)F2vw9*YkP zCh5qpU-yK;UIF_LT-CYpHOo&Q9ceXPR+lBBl`oz*8XE)$f0+dr)1_smU z*G*Tz1kHqN$YD{@57Zq1xQvAtAZfz+gm61NBS~;*;Z#HrzGb9EKQNH)K1`cNMkLIc zp+<*ej}5d_LPDVSEKC>}d%lT{Erzl|LBSM!JUEbg34dvBj`b215+Vr5rUi80sbYrn z>C>y&*vrhKY$)d+3+n&+`4e9c=4*4X?uQi=9snZpkYf01b4S=7!n&_~3&2`fv;chL zUOn{C%j?+1i>>uCYv`A26v-`#;!PdhG{KeFo^TqN!oaOZU#vvT3=K4O6}5bca)hLo zW}W~!5iY4^@93m>=9K!Y^Ug@~GB#`&PIquyTEh885bxgG4Bnd-Z5H8WwdpLt{Bpm# zLd%2UnYh3j$`=|hA1~jyfx032{n>#%Uxt`!>hpsf#rB@j)4Fi}cnI?QZt))bq*yH~ zB5G+pn-*?1nUcsVeCAPL2z$^`CXTrG3Jf;|^@?s3y%Ac~9TVxTm+HYZZ%JidUz+vs zs>^cfNo~28NjcshE;G0NO5jeI__ZQ+#j%bm`>X#6W$l!>_XaPYReAmNIL;n;Jnqw} z)1DUJwiS{ALc~}G>(;ss1F*inJ~9F)h=Ma4|}zISinqem0qF+y=dM!*OQmpB5~QAXj~>}+fMl;}j< z#7`n4Hc?Z9M#Dr$*929A{m41o7*eNPD5FLd9`#yAc z7ol~86NRAQIA&K9Tg?H-pE=zyXqy~sKLqQ}VY_GV zkt+Uq8UR0NvLItlTx3o-b`#s`Jpwi@Xm;)ld;9i~2wASjisTP!sMxEjz7Gy!o9AR? z+}f!DVkiT@_Imda|0V_kgtIC9*uz_GH%E2tA!I=ef=$+m6L;ad1gQ-{V1!Jfh{G`( zPZ>Oi#{znrR6fFu2X;8DM{l&D@&MIiWMl#FA2=?G2bfF-T($2mbO#)-52hS*&^{TN z?&ju91YJT&01odP*uEx{bUJT9`0nXp>zSAu8W;e{AN=D?xD~-T64*~xC{ifFbb!AQ zo{%zKTgmSnNJD~PT!-NGo)7CZ;``IxkIgf3ww@R5v%P9_+5`V6%i%+b@ArI?cE8zP z(Pj7h`Tq5s!4V-g>Q{67MI2N7=U+~g?XT#rt0gByJg&TU(TYvX1GnM*~Yr8w_ z#;ly>{De^a`>X-eL4Il@I|3TFbBZP-&`J}rvH7P?979z*muR(0H~q4Olh==t(Y?z& zZXa4*)lxQSx4{wyIm--5h zE}vc>Wt_x++`uJ0F__}oW#c0X`X_T<{FGO7sibx1MiErvd~}S{axDJXd^-5u#Tx*s z!AJ`pSGXI%TuJ|$jLlFDkJh?68s9R&;}>LQ*`U_Q&4Sh-P)6K-I8x%xyi*#;%;4uC zD{OLl`mMG){EAp5?N6OQPajY*{w;5(wn&L#I&LP^jy->zziC1~x3_Cuya>=2r*~}f zW-cx+C?iA|e~ykyI*c}h=dg}|hYill7tfz#8u9DfJ`MTQO9ii!lecWz^c}EANC?UJ zFJF>EKE4ru5@WH0yB-!4tmuCmF%^!$+}v6E5*(7woS}ZQEBz<@>-`k0+A~0{;p9Aw z+h)>C4I?v@vna|3zkhFPX&J=n)9j?o!NmpRB&4Q+gJlTT!bI2N{8f}rJ=WsnUP2l@ zZ~_yvY>R#K=3zx2c6Ai;QoFlj0s{@O(M?TJm*Gfzsm#*O(J!)52qYEN1Wm6?yBPf( zhw4}$erVCbq=<%w25d19jc})5zDzVBU3Mf&;buTUYEhAA)ZSYLORKWQ8+L%~(;$)j z@Zn|@mLLN1G5qN5#qCK5J|P(}dY8tjzCx}o_8gv`2;((45n^hEL(1)M8swceg7U57#MNTD4!yX zs!%SS&X_%|LlD<)mR}ae zm{==PYhhfxXE1-!{j(eO&I8h0yUgNqg7Vpkn=t|7ZH4;^y;tye3jLq9=IRqfr4|p^ zi*?_~t{UcsJKGwc^UylxWR;`RGqlEc{ltDBU*#Dkb}n&qrgxva=Z25oE-P=MJ7>18 z{<0R0-t6zWAnurgiL@^axvb30!@qvsyBO_aEp4`}!iqUb`g9*AhZW05BYy|Di&!|m zNlo&Us)<#9MGsu+8T;pRg8My9%(ihVgZ>6(chvFtM$o;aU_Xd64+Jvksi<}u9r=N; zkR8m-O$6HG!KVe?q#7^)na@rxSzrP+@3QF-`b%8mV@IF!X}#{lm?rn zUJ;q%n@IevKE4|D#OAK9OAv0VEm$tqF@RV$@|nwgByfcpfgoTzYS!B{)6&twjC%Oz zPZlX1n1*^&pa=SHO%nBCz&)Sf_2Dw^bYkdaP1&qV)+tq0>o<{yP)NaH7|yB?8ocFg z!0*u1+*s>}!U^7^9>^QP&54@woxaiDz*F02R6qP)@uFOxd$Zz!19Ndq1;eFA%j?&{ z;c5B&`F4=8unXiE`sdeqOu{8=D_GcolRnIQssar&VU!`{7d;A3&_-=Cf$);H-) z?gfokLdt4F56Ku{4W$Co-qh3rQU3$I1c3r9b4YX7e*e@#^8(&6;;3MJX=-Lhk^>S# z$X|bz0`=PRB%u$t|EbAI5d6~W9w{KZ;Z%HM&s)*b(o&RAow*JNAS27XPD$JxJHEGk zo2bXQ_y-L(4ibCQp@~!rWsh6#pFoo{J&giKo(|LNaxHh`6Y}!6W!bk-5ik*^T1f&UAU*d7Rn>FGbZIuj^mNQNlG`}%#;+&#siQLVe`RwbD|ksE{+h|!Gk z*_q^?8FGBWjNGsDOmyWXBRTs71Za*J60*=QcmLQ}vNJ+=1A+Penh;d{$|R>Sv_b-x z@^{_-US`SQEF2AujR!&KhOXxHi>Hzfo2npxKnR8;j(wlwI50>=&H=O6@$vC!(6BoC zw?dgm)lOg*1(l@i;rqS4F-6lzy4KKNqcE$tbgQ6JCjZvi2|H^YZEajzpj*Q=GNI5e zsAp{K1{7Pc48;~kIhXcy8#5&{&CXrBoWXkpc@+Es5*$+K?pEQ?@~9Z&BIs~_&d>z6MG$&nj+fH4dhcpi%*T%WYb_`6tO&<$41oe-_F3 zM*>7oLQ#v>9-JD?6G#WNmR4HCH^jY9c*e$0yKg05m0{n%U(|8Z6fFTz76f*qa9u>K z_+EKm5Ut%IXTca3MGN4jTcA3jF~WXDrHgg|_XlJrB)iHtnkYd=$HsKwkIPR(MxgeF zEbB5(zoaDUX!~-*bhtl)E{-b%_G;L8B*+vtZelM&_Y}`U!G$)G(L?RMypDZmNe!89-U+CUFsGDm)DfOF%*SK70jt08X_Z zDJ$GIH_wQx>uwtJsHmH9I&(e720p@ zG*oLe4bXPi!(I@aRbmz;CBNpJ*dKcG7fTV+>j&10eWNYhixW8vny79Yp4%|)+l7lf zyocx8=;+leYNNhq^oISxS*u)A@C{sMrMMiu_3{m6)t z($d|VH}q%p__B>}E!k=o^z{!2r*!zGax_xBR($A}C_{Gdk&J!{YQMR;B75Mi+qWwM z4&D<|>=_#J#9iq`S2yZp8FFM%^U)lo!MTHq39lP{4i+gqy-U*>a{lqJBa7{Uw%rMZ zPu#Zl_Qbpq5fNP()`l&Hvw)2Bghosv`iQmJ>2EE0JN4MUP+uI&U?O%N#PAz|X#+;qqOKN4nL}AbE z6~^qP@kg}Lg>zv?R5Sht)a~gGw)i{F7k+k6IBd9j8sdTTjq+aQ`n_lSz*q;h;h6Pa zwq+3Ne@b&K`}wb=BWncZc2GOz8QmTn6rhCj@HeU0Us)35Hk!JLcJRZYIJ zp2zZNKp!!aQlTKmHvP^L&f=@*mdFrmLrq<%;vV&c?GJKyt4waX88na)iJV|)ATCwE z@tEQsP-Y}zW7>+A(#H43tQ*+9f3Vz?Qib(<2o-U^$RR5+Yh=|gs;yyo;@w8>DkAWB zE}jtk(Vz?9>$oJZQD{_tfcwKLIaHM@t*hH91(_w>xO#uf9kM9uqb$5`FY~#p(PP-Y z;r0_5iqjJ^yJJ&dTzsmQYc{PMQ~V7ud(`W-|3>;GLZ7ShbwwY7IHPwd_y!1 z>&XMzrFVf`h9Q~{veI$P?%*73Y}~K8WVHT{jcnJRJBnq-QLkB#?8&hE?4Q0MKNI&k zFzzT*L3_)yty={bD;?jj2-9zRapVkjed*_}4+q>*^7r_{=v~#KK*ZSFm%*O%Y7u zO;9~ax#Nz3lm$6Nx_Vjn%u9c82L_ zA|hcz)9BqLR^&M~)&8s0LvypK?-HlQTY$JpJ5!J^cqG~2!p&j==k zg>9`o$CleZx4P|{9(+|W?j4ZCzWted&e&jxB75-e&8DCVe1+(FZas_i?uMrFM!PBT zYYz5Kk1vFFXz||)%6IN^@A#eTk_;|LO!(u>Yu^O>0*YH@Uo=ALVC5N;``*;R<)A;4 zSltwt5>A81*$g@RQ=&Hge}O{7_L2`+a2rF-(;$kOBC3#p02T0~&LazG%U!wj4eI=S ze8=Nd`}U+^E`MviGCFPuz|%xXAolt@MHQf*-P8Bc%=+js8lLPz6u-S#Ur9fuTPyhP zW<-)i!lLqtVgXOQv+~CZ%4LV&xjLuldYASZbG*MbucGVTII0)Yo z6|dqZ!8UjK_VK(ev5`Pws&+qLTA$W;Vhir9W*OS;+Yx4P6Y*e|z|yd@V`5~ydi^>g zPu?VwLgAo`yvvK?79Os}Hk^B7?(19rYI<=7MFl!QD1c11Jn#bz0>_CMi2-?Qs^n3c zItW)SDZW6Blo_JG?Mo5{uW|Fxu7~P5IYok_+M6-WWiq=it}lN!{(Iv(<-2Ei&%_;4 zf!VJ6#=7pm@!&!LEEcTYS;LI&O+{~oso}w0ljh%#(`^%2ch_xjeMdGym~8bl`)O`c zEAOyFREtN8xcQ<|<)_}B4ymsd+m=L6o%v)x`&($&!*v}i^aJ!=1)d4TA3DjuH_cXK z8}-$fDQ{=koe&k++sm>%q_9T~u z0tdQUC_&)=#4CE>fUjt=3Q9XnukcKu2Rd78c6$qVN)XJ|;bwl-VvSyOCx&2TWWA{* zYVPhZbzk)<{9{L#K@ep;3lq%4BS}MVO>G}?z=tQYWM>$&r<52q(J&vEIB34ba!b3) zn3zKbH}cJ>EB5Ob&@vsBuDNpk+WQEX>XJ5QLiNA7Yy|NilgXHMYH79Wi8g-C8wZct z-ak5%@#{kE+lt&L%$ z`Uh2K?hVTaQZ+J^PaB9Cpl>eOdIxy|EiKvb&acxda22J`mJ${H0!J3v%l%qnqM|4{ zk#Yi#^!wagAV(#>skDHR;F-Q%>+WBkjJv!Qo!&gy&hjmqU9O~$zWDz*>mtsGPyLNZ z_lQzMeZ}R(z=_AzmT8(b3KvyAwXqewiOtLD;F@^rGn)MBdDRn2qeJlK5=)s9-(~yh zW8*`i3&RsnWv?i||0njEFlkMmXAC{gNxl83;JMK&S5o!U>#i+nb6%dBK6_;6@(=OD z@3wm%=hR8fq#znLT-nSy?RfohRz&EU|2mXH?g76JXFI|mAM-S9nn*gmaygEfRs|!$x7_@LEGyODJ$&C*ZSi=AKN1(Q}-pxu4a5ApYd2c zE;apb{X0~^KqluWjl|7Sy!Q4se*MY_PZ^Ri4P!r=EHo5oD+mI9c}HN{g$0a?f+()8 zwm|FS?(Po5FH+{_-h#jGiPoFzHBQLRTP*8SYV6p#6GO|a^mMNvoU-_{IBu=INYhwR zQ7HIOV*mV>HwSzMG~o4wZjna;umK^mS-fz#bqm=YqsMFVrCI*f!42WaL2vbQw$}Z+l{;Tko8hdr7n{x z3z%IHLVqwi7_-h{Ftl^cCAm-Tq7))bx18M)broRaJGazBX_01mRlhE&2_(SfB<(=2 zo#l+*&ms9W@IA-|^dI^zn@42DMOQZ3RrIbKqXjXqCZoZ1{@te2kYiZ2y=^bP{8hvOh-K;j( z7s=y+?rB4_w(bv04JgtwN-=z&I-FSzunDkl|RVq)ss&ldo*O4D!KLjg01znAT+ zd3};ke*6Chg_gB>nMakpLm+Jcb;R=-CNTld!R~irLL&5`w6%%-`lICk?k+^_zLRQw z(rd!XP+0jwz|*bm@69QrEU#bN#(DqKsZRtk<1oV*8QJ!awf$tE`u5{=YL}JfTku^_ zGD&UQyN%4l>q6au>C;D>A#gBe+AKAWk$jgPu& z^!4V__zen+3PlKTuBK%(64t5W^+siqtjqz;_LVWo3Xk2|vuFQ_>K7`y75BB@Amg(} z-KQx(s$W;}oUiKM-6He3@!R{B3ioLU%f69j|5*6+|E5%*Tj zdeUO}EM#w{0D1rZ~17xF%SBLO4Q+ zL{fosSG!hupL3*+PV5ilHssx%YkBwX!x#PkX5kUC|6;g(3`1V~*wSMKLe}U^@SB-W z`fOU}?e_*1l&}4_0809`Z9zsZR=%VY$|`C86bcdE2y1P}_XrDY$C|pDN2g=$4hTVH!Yz2p;L=*6B=wVr~L1)^B%bryF z4t>kHmKxd02&e_NryVUT!v6oOi}2t6#r&TbW`7g&+?gv3@Q&`xs`S3V2>#{j;`^7m z3UyhQ=#;v=9ffyo=JmT*+UvTs)Lbh{UF~brDSqYWqrqe717lk%&?;_ zc}`MZl%^hkqy1fSwq9o%M=h6!RH%o<3%-IY-G{r+7U~R_mPT>Z{NKog{z-mADusuJ z`dS<3g9Btej(VtVYb<;0+i)c%l%`rLPpU&oX6pMShp-Q&w@&Xn-K)7Afl7Z!T>p#L zB@$Gbot&9BB8U`SMgHX@1?Mj)iuTw~oO1Y^2*|m}^ihSE`p)vb|CS4hGyAJYq>h(h zuNm;!OR|*tBZ~{nqv0oEVL+k3R8%Bj==oX{^LDH5qnP`{)B_2Hz&-bL_*Sk1w6WoK zAeiqN#+9IG5CpJW+-hK4U<6FugmEPlFBsDz_zt5t&}Qc+`#|Y{6=Bb$Gr%z5t@9vW zkt{M1xPz%~Y!n9DaK^zn6m<_Yb7&MNyt6>?e1(KJ`V6mY@%VATFfew-zf#~7I4 zK;7Jv35BNb<^Er~Z(h52B=} z7`VIFAVDdb?~UG0G6MfCnU}|F!TLJsRpseQa)R%y$JO!0wywsb+1IT+^_#PH5rmjn zU8i;7y(bD~@svis$1tudp)4Pn*(>hZH@d||(aB1I5KsH2qNd#YZOLg<20n^ylPy*p zlkO3|L9Kj?*WR^s<=GdeVw0L836N8AEnI-{|$=5ov_jGzImcq6ScqZIG(K*nA z;%M@3q6I7*tUBMRAeM9&Ed6g0Ll0XkjiI{O+6jGOzuxA)0& z=WP4R{V>QUNS3Q$s>sI-qx-;nThovyd4~wmtWoYI>_swLQ#FUO-TAi*EiAlzO1&DI zyp5OPHkH(kUz%+``-c1{C#PIebW<@{%`Lkul;@TQDs^wkhrD&mDin-T;oohflcMx? z*5rV3I9h*zS1?1@6!`~-b6wH#9rD*WdE@r7Kg-5|B5`@sa-KC>dL-L#>>L?)vyb^; zXk<>6_}0rTZ5JO=Tz5)H(*~aN57Jj|s0Ers|H5@tcccC~jOk#R z0%L0UxuvI1#>snwc8Xn&^w0P2I9ttrZZ!rH3yK>6BT&4pUxv4Rnj<-i}UEsDepaL=Cc&T!S01JJGbV^So4-|uwUoBnf<_I0XE*o5~fVk!7 zM^zega&Uli{vsnI2#h)$n?=jQT|VWNS(+6+$w=gIGP3kz4*mpus& zw*++F~#n!4apddRbpTCO`j%i;DzKawI`#j%+0m%?YLwULdzq zZ{1oCO~Qop4LG$x^JxFfH%q8Pp|qp~IeSKihOr0+g*CzOtBdJHMf%FhDZqn|vx5x{ zcJ;UF>K~9@;HQE2XjG(vY0li#z!}g{a9?zLEcsmvz-=5A9nIC|juEWY86+N~#SUos z&UE`t2p-~%mswdCz`uk5B~Bw*J2Wy9*_BHjRz(Z*^YlA+u3h=Lx>XY8`T5aU z82GxY>*A|-P6UBCcW}#sPCW;G3abHmuz(?L=;m=pz#dAPRVBU=@U`%y0>&YrKgaIV z0PQv2aMWK8O*zRoOoTKVz!({q5a3RZz*Df9!LZ}Pg?(y^u;m1sj8re|%UdH+5O#e! zk62TK^}L}^qNA@F8kRiqQHVz%HlTmNl#B87OJ)f9HT?E@%?&ZWVBxh@SDyjWtgkO4 zCB>9MV@MHD;pXDPbKpRI#GxUS9I)cKS#!UglpF~{>{oD9-@nIixBBi^_32a85w{j> z5?G_cim~C+nmGKKr6eR4V0wm`3`j^Q?qQFP`l>s_I z?`)H_W5!b{H$~w1EzuDazVLwbrv(BH<59H;_@CVrn;|3cyc_OfGZ`4{jT(p9bGA@| zf+rl4k;Ui2d=^y{oA*{)yiKn%xr86(0N`JMnbIZzIry^C|BLBk83Jqs`VNKz)-R3% zf>2Xygy9IJIV^eq@2b0gb@>q-EFmR^-P>nxt*97fR7Hf4KsBh(WJon zPzJZ{L4m0Rla_mqoG0s9_LvxGEPb!!qfYh?IBA)k>y{@r)^2%Otlp+zdb+iq>sj&3 z0-aXpR5P5tzp~0zzG8-5=c9E0uv4~3cFg$pcaf(SZ*)FAEc@14>yiHA&o#M!4LU4W z+6I3WC|dQnj!eyaR~`Ia1!TMLRuL{Xr%xN|585gRCcs?7(4RasZA_R zBw6#k=FIUnMdck3erQK%KQ;?tZf6>E8k6l#II6tghokASXyhNX^=j4CKNaoYaa3Io z=kRTGj#nAaTy|XxCeyz9#KgSpX$q^Epx*p5^0^1LOp%d2{XGqrL6}Wp)7O~mfkbro zoUoO`CBb(tRycSJZ>%S7g7f*tZ6MuZ-(ATr-3hCPe*>s4b#s3MP_6CT)Biy!`QP}d zACty|Q|x+Y-!p7mD}DBC-?CZ6eX?TD-N;u3B}JCu4}!S1E7<0>>&%T$b!Vk|`r{J< z%o1yw&VBwE+Zfq-xKprp57P>w-1e|unhE}CyJP|U_E`wn{?dP&R0KAU_%#tjZ9FIIdjal2S|>E7JTzeg{66K-*L z=4aMjS_(1a_KPoGs4hy@8azxPL!nXZRGpHpJ#ytCbK|w;2Kxht9BPFj4S-DU4>a2> zHL`tIkqB^gGk3{qACmU{%MlXqV z2PaJbjC1ZEu)QQLcUkLKQf+#T0oIHrXsdfUR49YU*g_q3P3%_8g9H$WwoG=UaJ<=b2nISh&-9&UNgo z<|V!Kk1dTYhP}tDJmp`BFw%Jc_&FXqBqTF7?7}Q|J!(KD{FTK){%iaREArwyVjHiB z^UW1J>trFzV>J!yOB3Jpv)T}XbOYLTH?3~L_6E+t;3L$J>JUK4+^|e=A<*yG;hD+a z{j^f_!j>Ys^s7EU&KD-WImEGTZ(!e&KUgd;KYL4Sq)-w{1ARjr1}TG4qf$FezU=5) zJ(?aD1`CgNhK`<5GChb}^4j?M-84<{1Uf&B4Mbi{DSEekJrz2iw?_eBSFx_v)mLmy zb&{Kyp7eciUm#m|J)t?0CM`0m>o#|w11u9C5cW$Z}IQMzKk1?I#Q>SHKd}CS*P6E*nN_wrMs{UE(Mn=Yt zNdy?f500%B9BWZ8+Obw8^B4z;%!5i3(hk{0=U6r4ITr0A9n!&6T)*pKdUfGvIqowV z#$3-%D9UkH(Ip2R4h=b{_hNuE(AbwwjyrTr@op3U`ylt)qrN6Jf83eIm%{_EJJ^l8 z7wz%PA9snFjv6SFwj+5nef`*JvmbPgul;r^VnnfOhtMI;pS{U^`z0t~mo4D>@@lv2 z+Uy-}k`|%d*{4^o>~8&mOG*s4xp@z8(pJnBRFt2xUTE=SRrw{I&-C=Zsa$n^ASEHq zQ&r1fC7O2lVA|n@f)vx%#v=jLF{d6V(s|$Op(Q)d8@k)?Wrvr4JH%v5?ebP@3`y7y5TlrykB(u|+4SN0bti-8n z`^UCO++-3;JIurHNkd)1S)uPkvoDyZ_8Py_A$28tKQdzB#a*UssV!T!W;te-z5J*n zh;EO0T0%QYgP1*i-G6zYnA&v1OXQDcoD;UG%z1TwH2Ps4{`J=KEqf_8UJmWY3!7hi zlnb81*lw?gf8#_)o@Cv<4Rc$62UmtH1qknUv0D`vmk`fv76CWol#!9dLV)%9{M;$_ z`9$9w3r!{Q8#)UeKZc*TS(wSWyyJ8&?+;^O)QsF5uvtDw+gC*Us}A*P-&01<@9P9| z=H9ampX`(l*56X%Y)Ppo%wm+93{uU8fJJzyn6I1GX8+x zK?c*ohTyR6O>|lOv%2omoh-Uv7+%Q*ASXmce`~V0MNi?)+@6cR}%{pIoSl%3dC8(QeIxV@9r69V;bFSNNJ)w$lO2x+)L-$C#A9wQGYrMsC zpEEhxIVPJQ<7 zcWd!8W(Q6M_<6G|U$M7;o{&m;$-%TV?e08fOabGYg43ym?|UZ%WHfE3l5E=hUgwot zM|S&vy{G+6^qz&@wL&NXyn5v8WJz))*e2rfi8k;vzHQQ zUT$uRX1XCr%#c7nkSBpNz09Q0%c8*W{-ir+rZ!zoeIUjAcz z99?mZx7=R%z|zqC2K+yk?~x$#y{CB!JwCcbPnGUMIHR1hx6izLw+xNw17BaXL|_9K zpghGS5@~QqXaMnYcx1%E$qB`-E5Hp*cqs|!sqneJy|?q0C6UzYBgJ4}Zh?WG4xI5I z+=Zl{iGcwbaS+b=@7}cwlHdLXtqHz7Fb;%yb61BAsVA*-pm ziw=_-(9i*_!;+aq#l;#wugpeEl1UPneU!n<7B&E&4PXcWPX#tF#L-|%4Lkc1-z-{a zN-OOt?0hai+1!#9LfWZTWEA@6dI!>vF z9^0Vwx^^u&Hg*CUjZf#3Q&YWJw`|@#^ZWM$A0Nfjry>7Hc==NK75D*ei23*<4f_f2 zajqAizkC7zxgD%3>P?$C_E#94ly>_K4}Z>s2h~(m#x0~OH-7xrHW4S#2k)Gmndy9M zw$;8429G~UxeGV(5P)%DIp70f{-C1Yky^Bh8Rq1|v>7`zAmQ^!rv!O?7|QE&80+{P z$NI%D#`;8p2fu)TvXT;p89@4AU5)35=IO%+*cUx(9LDmb@;VQ$NH$0ri1ck~(Eu|f zOc46ERK2{HNl8-Z#D#^Y^ahQe&=Ao4U<9)C_}ekfrwaszc2XKn^sc(;+YML54a5$w! zH}P$IMRL;6q4?3+v$J(wI+^^l8sb_dimD@YjN4yckE0NqS)H3xUC3&?|H5(b4BzZ+ zffz5EH0YlwIA5prcWqy~yuWl`DQ9-|QwEv4XFeHMC7v;}*I){76FB20{*-cuWE0H_ zUq(Z|^9tQH7544%ArIFcj@j*B9JNijFi3NNCTi;TzM|hVv(964P1(&lKdw%v41N>g zoI21pP&8B%Dzp7;mP59bn^hy;YE}E|{MUw~xvkruJ+yp0s9kLRxewFLGC7X`p(FgCLdSG;+@=}@6tJR@&3Ey9!@|-nd#D0R_5%P#Fu|jAQFpi-SX!>S&OC&S4DQgU zao~RX#HW+}u*G7*t+Bazrf+ivHYzwppmbqMgV`=FjXljs!7k}8uCXPGw^@H3{n}c0 zr-^~i`~DL7)@9rNhmW7Mghs}3)lpuedR8Pj!sLAUr)|~p+RVEu4{Sf%{pzO5D=R6%Svw&6u^nNp5s3(vFu*H&0g}wewk0QgvL@1%GcChtl#W{g1KgMlN5Ypk0L$Jwki51FgoZ)5R3r-a-s)5 zgP!tJTwhawhT?0*lEB(J#~lJ%=|RS_)~l->SFT@25W(T*U$BlhsJMa~&6E9*#f2T- z6_eJsD%^ZYHx6DjO{x37|B6U(Uc5zR(z#rpk%~|Kp=U0(rKZCq>MHg5bW2MXy=eU} zs^$wQyw7-PkxT1JD<7u8cMZ^noTakju8RK#O8of?LF&)=RotzuS|9(^Jp3jk{JgT< zVM?irHJP)K{5VQ%D){kky|N2mrG2Uv8+a&Uonf~) zF2Tpa_Oa^0L2X0T)_I@6evxjrJFOpnj(esa9d(}<+`5IVw_+04BUM-WAJB0O+Bsw( z0Di!n7Ta)oY6=b>*go(s1=$2&aTKI`pmW{-IN5!}-F*e((#C7Ipm0X)4#;4{P3&O& zZ-BBts37ej>CGEHD9BP%^)42}HtqmLe1q_g1rKZXNMYXYkWkCi!k%*hu z#W?METz`hi9}Ekst9>IQBSFiAJh?Jxe?vTeHJ^T=E(!>wY6=Q&<;8W3nJ2o&~rI!C6Lz zt@FGyV+eqeKOPNM$U8WDwifuoPf%BIhvSvDv?)F(027o8HA3p4H&ZQM=S-#@x@6@z zT(gatmGX~0)njJ;SC=a?rYEPeGINwusvjy?r8^lY!~-j)Yoc3lHmePcD1EnASNTKV zfd6CM11V(+vXtVg-1HIBtXZtS23FTCyf`Yjjpy8-DjYtOGv<(LF%OecG4039Hg2IK zr?sP>A3P^-Cx2nq3isHhx9yT#Yimcn%Rlv7q;Go~Dcuv4-$d@wrS=dV=@{w7zo zg=aabVIm5=ya$>-H&77GHx~7@@(u2yr^av9((196)pSfX{Ck_vR+#1 zCRf27)Pk+8|1U;RS_A@5-7(~ZlGv&(jTA8i`4%cu&=7GbB)@)*fJ=B_+(8#GfZZWMSC0?O4t%q7yc6P)8Yl;X)bry;69CK(Yv{pBdmoSn#mS zVnJeaGd_s}Fg#>HJh*>fwzuhujicke8>iR?wrA6@?K*qv*fB3(-!qDel_VEQB?gq7 zutC5@g#`+yMUUCh9p_hPM%34>yA2^FzkXrohY!6t4M_;J{YX$iz}9}nl2KWVxxNkw?bnP_0j{Nr;hZo%j24h5octUwRkkZFmU?8nVQF} z0jr0kg_&7*_P(86bF8^QAG#%T_N-;th}Lepd-pBEFmUaec;_TKem;a@ki$5ViGTWN zc9x_5MSJ^dYs(iM6^csRhCXmIde%RXqOJ(qswpc+PT zLqT!3a?@^y+u2EJLI)05AcP(6F{s?p&7!c1?Q;V87%L?!J6jdJ2M+>IOukgWSm#d)2D)|)W>r@$EIOK+Y-fhm z(3^ol#v8h6p=No&3y@cX@Y@>~&dw+)%_zlM)SuOHT7W3`a(kLH`?1ryS4*|s7#J9& zw^h`Y*PSXg+%Y>vS%0P~2DU@T_4D`g?>&35rqrf$>FjCUrWRZG%4)hZZ$rx^6}}XC zT6gx=R8;45wnt1dpUHr~F*vKzQP z4hZt5@`lmw@P7Jo!1#@pDHXMM*&V55yZ*ucmsu2_SzliCTvoLgjA5zv5Rm5RxzUrj zj_aNH`#bCJ#O~0gJh0^3D(H0M7yWjI=)n+=9b=k&Pj8x)UOxOL3qP}B+r*gWJ@qZy zSa$}_&V2B*YdyGYQ6RbJKsOtCiPF8Wu$`OsQ}1PG2f|%J3K3mO(2-_7?FbqdZmiFr zxBKg#VGl%t1_Z_1MPN74@xq$H$f=Owp)a;7Wuerv|xy1(tu@maX@+IpF`ucN*kf1c}qT&q+3~|wXbjUMh8PieMCD+O0 z?0RR?tzu;)4t)7$K>gS3_DEUg&}5wA~}l=(8eK34eL$dhzf=QbKe`f?F$oIJ`N z{?bHjK~h1|(%T2mgh{=(e_-W9$@-ESK6Y+$34U4GwYb>y{2MF0#Y5c7+^HgKU8OVn za`kFtJBZ7duLap2NgO_r9^u8alZ%VEd^f%9DWOl?d>+nWb7kWy<;fT4BGy!wz6H_; zkN*1cLX{gMT5_UUw7Fed+2Q_t`OnDr`xk7&;$7Z3zod;EWI8SzzJO7T`|`Y+zGvqw z1<0GfH*Ld~><_O;5dJtnL1hd`p9(`;n4n$HC`Ee?Lt_-9O-~iCT3UAIIa#4c zMg|XT$94+ds{)V>6DZvE0R6usZGL&dPTTFugX_h5ewZ)azaQSY1=BT z%?0aXp&?ElnDrGA*TuZ``W>6l0PZtwY0di{R_`Bm9e|B4l^N#@y;%42i6c%qMQ4z66 zl_Aijn%h+J)bLfCB&C#{cvODsOV%D4pBcqvbVKcRj9o=aMQkYi=<5 zIZ6j_prkqB)-t(m#`J@#2PYNdf#)`nFGx(oM){v6)ZOCs4@t=FxzG2N?z8*(4fM;D zY?~OZ@_ef5IO({>m&)7ffTtTvG`-tTrD0G{p24Q*j+(FMk58V6!7_a` zHzd-Y@A4Mz5A-zIXo*QQP8V>EKuV z9g1tr_x>!*O$e_?K?Ryp+O~xj@D$dQ`V9P;IE975X~4<$sk_?~a6D!!;4FY6 zi~ibJSVBZ3BqeU`MB!CAYw;-fgfaSEH#e`Ws#-jjj1h_usn`(6uCp^4eA9Nt{Hobr z@iWC0?qbBvEu{?K_uTk>HSITV!Q$Y((!Ay2783(gnjHm&eeaho{4q+7Z;$S z^xKCE*Stt6s&SZjJZw0ww7GMqYO893g-M!um~TNS3%zWW>=_kBxHf;X-X3;h7P)wB-Mb7kefUhWy$hq2Dy?Jh~dOw@^IK3VFJE`Y*1#8~1H6Cq6q)!^y8#yS0dwiH_{n-_Q&(aspLg zPr^f8uDv**K`!pGzL+(Qa^uweRA@-#Adh@f`|l#0!oRs#UH5z z0X7DT2MLMy7{@6$ZplTAI1Z2${h~`qI_>P#Md)`E4+jS(>vT*^2e`P9PHd0BGvSDb z$j<8PLw5v_We`3D2DJ_k6ruSBAOJcwpaRU76FP#S6w1xZL-2w!BCtT601$u>3iA9)9-R&k%|rjgLdpEII*i}-Zg3d-mL(^ z8hTy^-)Omeq``RzYBCFR^RxO$$KH5XZgO^ZrP>{7o4&vdl$4gM8EM%7`+?x*=$H*p zq55Cc7(E3Tnl6x(Wi`gQ*-@NB5{ z_4dt)eYoYkJk4QHu{z84@{e>4d^##BpOI=z{cz1lu(93Dru9?s3=Q(!4RzlexHjbN z1eUy}roh6?eeN9oP3BRA$?L)!D^>2@8Z^HrjfF1N=|r!7Qk9Vw&Nu8E-IqsGB0Xe<1gL{{?^c*~u&hbRMcBb|K%2@JdMi3aq3AUDCg!l&vnkOti{&Z$* z_JZNr^6Q2~Yg^;*zbJT1!{W07_?l4BQ2jP`!$N|h_k5hfRnF`iKD~jLaC5xKvWS?~ zv7~IzEx@IFtMaU%HjNxQlx5lFOt?bUcok9X{Y}kG=!2+foQZ6nrIZ&d3BKD}o$hQ#&r8(~7nMnlGMoi_YLA3@}PWNUM@B#A#s6G}U?$Kr7{yIqA2kvw2$G+CEB1{K7V z*^{%|KC!Wr6}CINvyPIf(u!m-Pd<<4P)JH5@03aZc6ROjf-b(vTptnO($#)~rTR*h}7qV`(bR)!YYGy?kXVm51Uc0i7t--5EUA z2l$w&Og~`vu1Lq}bXMZk`A6ONyV96(k9O9eTYi-8wW$j%p zy*d4BePX>{$N$|+%ipz`$8EmtH=|!}KWAjc0c5kOGuB4p@MBRo7YnzrOg>Y*P4&>b z*xBRnt9cf-due|}?Ie2(8LYdrB{i zAXA#N0m0|P+KJEoxRZr(j8*Ai?w^)&3E3Q*Q!CUW3=vve**NZ(-YDq2?fzPUuDA@} zaqV&NVIzZQycoj6gRxP=Xp zcC<;vNxiN6^LzQQVx;Lq$cPZX!PSFXm{|Vl2btT;zg2s5$uEC!lu!!{Gj6qfZn304 zrMdWL(p+AE`x^4Tpn)X&ajb-rRtOzXBnA{J07+h7f+2DM%NxzFc>^m`R!^^|#!qA)$F3O&`H0`%2CP-d~NN% zp(sew3z_hqC7L||9sz#-dNtLdB7dQ|U2W_ZZSvHXZ-Xv+NX1~C{tBPBH&755}{9&f1cO(YO`?__}ctb0LQxsWtflI7)Xj%|DH3=8LAIqB*yK`9uQ#B*O zm>6=$`YnUoGk6ZSVy`3D{JmZ9(j$LG@S=X2?ratiU@l-{V2}yH!K)jxB|D^Ka*Vl9 z>J`k{d{(leW+SFk6}G2}5;nZFC8rLO4`V7ljNeuGnY@Y~AF=lLcEObzVhiunK0E3C ze*2aaN&QtUOyZN*0V)@h#*H@TTE%FEq_l4VUm}8*2Yrp?U#z+Ydwi_#j2*_?l)-;j z`E+u1_Jz0gATU6v+cEizx!+xPS1&W`&CM@w)2L1^NhwJj5mLDkogY`bBAcb9rY6!_ zfwAV8pQ~N|x$BnB+hYMl2qDy>oU5i0-i6~WP-D{i8CN|1%8tBvt z7*^%2s-v$muUSpMUu<|!--Bo5F!0F%ho`>&9%hp9ch#;|dZr~gOsdZ;Z%))RSFTIY ztkEo0Mh32g8=OuzmX1lDYfUQYa5yH8dVGUzG#mJOv&?a?pJL+`P#+ zae{$aIVmH@CDJ<*jNWeCz}nnO{^i@=r0`i7b1HK)=bK5grQcZ8Siu!_N2$}1^u=D| zBq3n|uBWZL>^U@#$bIkoo{ffwWBnUI;#2fnt!|byFNU+kbe;8zo7!VHt@;^H)TgGY zHw@Nb@W1(nfbG{18sm>+{oel(jj0l%fp!y!yAgnUf~ylxz4LjNA`E=NTP*4&X0i8q zBT#P&%ZegE{lDGz*f+2$&1jO_*-SRAydGCp)@SQZy}g$nkiO^{WV~Cw@MxsnuzdV` zmk1O^^QX@sO-Llo&{pZJN(WnVbSL5>(Yv&{8Bo9HyQy{_6xNkNeWr}jPSsJp zPk$QLZ61K<>RKq+x|@*K8YZ;u)y@5OH*B5DG9^Bp=e6`nI=M~+kjpIhcVYSjH4F-} zjK6G1^C2mq+7tr*1f9m_by;3tQqg>@MT9%o9!uq{ITSZh^^QI83E9~|sULZD#1Fhi zU|1C$9aaGrJ$csGo>Mz;h9d+kolYwSEnr;!P-|0S+wFYcXLNbFLLdL#P!C zz<+#7XMbi9*5Cm2^w1RZh^c6+tE2l@8~xbFDZL7)nnv*K8&r3i4%rt)FJ!7R#|&36 zIq++4$g^g1*t6(*mc5X^6G?EMaZe}7`!ZVk$Ae7hfhL?bKm6>l??yBIl9H<~sJ1MHxQwmZ z4$ag76&FqWI(zmL4Gk@9+`DH~!EBi?=l<#BM;B&x3l5(8xg_6^ou64tOHBGbUx8DW zd9r3{A!%qQz5Gur&&4t&q5i^RLC_%ZXW;vDKsE?(to=hHGx?U&lKq+1Le)2FwE}`O zm4qM2;tu}B68=Q1-gY8@#u{uDJ?c%(%+6M;+I0aN>(MQUh#39n!w7+KGOTLRB3X!N zPGT86q??^wo1;f#Y?HRkwKUo=RL$)%GxRY`GoG2PdT_zua-d(LM_jlYs!une8Eva2 zJcdt1G^MSsoxpB;`*(MKGHvXF=AwnQiHy>BbPfm$;c(=51WmiiR22eS-7*t1=iUp7 z2mDVirMrf{d!^@^8jXg5u_MdB4~Gqc$nb`I=zM2X6~j{Z{YTWyd@vq@{3of6ft^9! zsGz;02S;+Hc*Vteb8Ge?1<2jI&Zb|~e2JTW$nILxML}OU{KH*8>p_v>Xkj>digMJL z)bW%kF}v&g^_)uxJv+nOILQsJP6lR%ok{b#gLmhbUpbAYTaYzArX{?orgp~oU3-$7 zIOdCoF$l6uS)vkm4pL2^UYPsB*1fy5Bmks2cLt|hUjLv2t0$hFUD43SixIP;Q9;?O zyjKFLX97t+w>`c<-|mizx-l-0bgcj4*UMr{OL9(*6drp@6hDr z1JqC9H{D+oL9a=$y0N@GYFUAWvCT3x*eCIijk9Zw7J;=9fOUO*%yK)a9^5&~~WBBM(n z(XGa2AU zdlPUuRe+oonu)kL6pwnsmkjHiTXQYgIy#Fm4*{Z@Th>L#39>7I#zB9j$CU&9F9^j{ zRa8!4*bcNeRR~aD#9Sp7y?_i#&2!~f!Il-|WqQO5RRJsrq6$`t^zGPQ8E>#c;W~8;2{Y(0}I`#Ccp|L zf|yt0Q&NB;axG+kf1hU_I%Q~ffwu=ZhDqkrKlM_~JAgE}1V3;ND}(87IY?~(q4M2a zek&;%1c?G*hc$lTuleMz*Piey<|`ha%WfAIi*V!u1qps>?D(Tk*~mW+=#z&BD3ui7 zy!jLz%|Svk1!Edbo=tpi>Z?<=INIbcVT%;e8h@y31W0bdJQFBk3^3aSrd7TF(y~YLI=_$6!VaVk zg2eQsn;fFUYtOYd2slGou-Wq3z7dhj6Pr^Km;=?3c5SPix+$2L$9jo zoOc>J32sT@piFaJ4HQ^iU!Q=uNLU~6R*bc@p0l!|E6~H+lxl-D36SDz1`~FDuvVw1 zC!ygWdH_pDyUvTG4j>;uBSGm0L|;Ivz?>aeYw!x75rb8Cvjv88_Rur{90433SQo&n z%kcz@Pc((gu(%+F0G1-SVO@f^27G@Q@(*UK-t+|5Tu`eiadW>1o@RHRI%F4sV-^J4 z=g4QkLIPV=$iaLZ6%g<}A)x_miS+f4K(d#z2|QE4vVeF53f}6oBPwJHwEsp%v#u#y zHtZ1eq#R53_%Yb3#)CJHf-A7y;F^H%21stdfW0B#f$9T(-Ea~CX#-A! zfEYMNfG7(JL5K-}2Vk352Sx?J%Dmuk!V|uX09{fWB2nOc(IwIiKPg8?0QhuWv_0~} z?PJ;oG6cRajNC>F^rS>Yz*a9#G8JwB7^vmu#8xh2^T%laV0Pe2g^n) z(rvHegobjd=9(5R2t{{r8UYa~uI}d`Ii9iH#gBX-w}{K(j_$$#`R0{Fn4IH}P~Y%9 zWW<(f$Q00cAO+|&XVd=lrVXFFG^M4hC*{~cCB>fOe1elJfK{E!hm1YaN;>86`Z_{b z)1xw5(;a%?)=rHHiQDizwYj8*E?Cz09BnK0`pTGL@=IV9xJO4j4rVBT6#=M5 z;l|;CiwtZH!IBw46i*{wgR(ONCYwR7bih-Eiv{Qxalc?9ZMsE#=V+h!29^ipwm=dK zkc>v*!v$y=MiY>3=mR#O698k5{{Bz3?@2UX3k$EnO#~rGPibh}#fDH2xbFeKo}HP2Mh&#Og>W!ZhK!Dk z=xJ+Tq&tj^90GrdOgQu{#}8=XU?ahgvaq(MQz|k%-dh8TFpS^8zSU(66GGmBHvke_ zJ|*wJS!@?6C-APNrT0r&0Bg6WNYpws)5L`cC z6P%Wj0n|m0Q8QqCtTn<=7>-?eMMcqjDjFKF^=2>d@Uk+vq~pRG1*SEDcQlx#^5EXR zi;$G1r4sc<^h>knp}-x0q+b~Iz*j&>RAgj1m|w#Sgc`uWU~a`E zzF=bFelQ8I2M$=c{9%{_BO>5IAueDu2G1o8T>mR8K^krFckj7uZv$9hsy3aC5ht*3 zT^JWv3yfJH*}`EBCtbk~`*T&TwP}+Q09xS%Z1OL;09_P_zmV_(*R>uTqHrw0FM`Jh zQ)(AJ3K9}=35i#Uk`OHb(+l`?VE_xK>OVXjqlpRyAmvU>0A<_}PQzv!AQOTy=E>&t zWh@VjYuC8{W2>=T5>-+ue_V+indVs`2bqsbB&HcDuA9bjuu@^5t6s-RKh!tO0h|x=Qoy%$S&-AMk5@brz z5EaYcKH|@k(LuCN)Nv!75U|^Yw;71ECVWext@j~ixeOPtGv$^TNlso~oeIYW@kuoK z0}BgF0ygIv-g%7C*XL6RjZ8+hD|VJHKN@V8PwL4XZ6Jy7lt7Z@_v)xrAR z+~42W*f9R^fdf*3E|N)@f}F9SMg&cauWttgI>P+1uTKh&WGK*p)CYP31YsxYf*P}J zXLA!WPLP_-O%px6)W7+J_lSr-%TPf9woxOf#Qf%OMcdYrp=VdxE}7h&)t zA(;p~rr{n2b_*F*S8`>N#)1N({(e1_e2gv08PHAuHlrc=&zM40;7FcFO=4807-dxPJ!@ z6ev2u(dYS#7qW5?;Rl3^i}HYC!i_&HC>FGEX%QI5A6ve;T!(0^rjxy&o9~Zf=dbSWu0sm=YLXYbWgaNqxDCT}a zEh7o8>0@JXzon(7zEpUif>I{paJ#G;LN*~2J_&AIDEyn6bl}A8>wh8g$QVePz=8y+ z4G=bgu(tX0$n74=>_N>X9#S7;*e(r{`kCSr}N$ ztkeBJx2i)ZU6S!p>K68RnTFLymj9`V$J$N~zi&5}uxKa~;29Zhc8{JMAmW8#wEQ zcSWKy2*scDLnjI-ZsyttsHtstD#xw!^VCrf(fUDvb-Fmeu)EJmO)u;cf|IYAD=THd z82_5URaCAzIxD6t(sAq)Dk@A^G|AsW%G*yXQ>1z}iUYXk4ua+a;?t`Zu_uy|5Z#}`Nb5xTQ7C>dX2a9Jxt(50iDhl?%#OIV<=$0e)%sh0G`0(Ah-` z{|2I%r%zL1t^<0n+nx=;DYdq?hMfUl@Tm<~qEFK?=1U?|*AB{(>>k`K2a|>mmNeCb zS1(9r2WZoOVh+2uW$wxVv4JnXc(@!vVBbm-C2VhXMm(zDbf)!lX?tqp@aS2@YqIRZ z9I&t@1kn+>|2e1HvsKVvA}$eP)xyF8r+4f)Hx#PAeOU?|cLHL~^CBieVZZb6T#b=K zn?q1P&TDtMu_8!HRwnFc$kasvk7r+FCjd!c*1{}5av8y;A?Q--8y@`{WZTu)87}eA z&*edU!1%uH;NVbaXpE!HV%$rH{PWhiGp^SsA8*buq9DNU-+U)+u9W}9g`TRdBstLM zlLe1(eAZ_yl^d;I7}F~iK@K=%M;mBJ4ctNKAR9$Nq$@H{T2UUp^#*>~(nojqdC;sC zEdD?cpjPI{kv_VA7aivwe6dt9RcSQAw|IN6z|DkAKM;r5M%+gz2o%+^T+XtPOu?iy z{N!%y@bCewK(G!)Lx5%gUv*Z{ecfAi>-k%LFih9KgXkHUPj}MCOYYh4t8jt?GTN0(7^Wec4gTWV2bHPR|c;$6`jQBnnTfoW) znC3ke0I&g`33OA~b5N2&^_MCQ=GW`s)C@E8>L)II@fU@2$Dizv>llf6aae@YhhMzvlEiEs@Qw2jG zS;*vooYKC&;K)cNNbXF7phEcS{`IRI)pd|_}&N&fgp zQi9#uTV3t9_(mr5EUWBmePP+EyklPMIUgu>I{qtX_~5QWG;TAMUYcGKFPZ91EU`Ah zE{C8SNcTW@i;Y9|j=2t)&Pgt)=x#jlXsS%NP5x0pPx0{Am~QxfZY5kNHa7R_>yA>U za)WZwO}~6mtG(rMu1vnVyuJ;3m8m^PlOu6phZq_+(IeN?WDHP()c1UQg~1qPy=SDU~o@ij1T8fq^oDewh=+Z`Go z&$jvJ4*-%*hudV(P7)Bj z6%~bnKCC7>)hZuPPsph{Jv{|xIY75E12Z$~&6Poe^KQ6GO26P*hC=&}Ck+22rKS5p z);KoC4mZ#AWqSr7p`%~F4uO@b&|AzU14szcDtIR**Tdh!`2dL|C7O369q8vQ+5IaJ_*7V`XOcu|rBRBQp~qBFt!Z_|6|HLka07X1jo( z0Rjl+1EjQ6RdGJ?Do;yW29yp#-jF^cRUezb&RTn!I2<^XgM)m$yn!uq4Gj(8e)weJ zD|j)9iee$(tEz~$nWB}$tPG&}zoz&WitLqCh>ru;#@BJ6m*x3v16v;2NOX4)4qa4R zYHH!%P4a5sX+q<5MX3OG2;lG_*?&WN<6Uh6Z{&s6syAPS7ODu$cnl7PD|By@txDd)ycyd6l1N zT#Es)@OA(Y35ab95_k*%2lRP>^+G(+^0M7jjVsWpp@keA3=Iyx{QIK51)|dT6=;n5 zD)|VIC5FGlzu@}vo9OL#rrs}ZjujLh%rhSJE}`FznE8h+ec9o(^3)Mu z3ID#QElXJ`n;}4qk~2X?p)11gLP42e=_4Ddz`AZSVfQ{V<})ob9x&;=gM|gSbwSv{ z6wy-KdS>3W=+_l3|AIP3AmC2eXwF~^z+z$zx%s&~5x-b}MO&A%%8w|~Dxonm3*qnX zP1bwW68u^b`{mngJ}nkZ1eZn=k0?Fm*S|x?1bQ)7_wbSWmQ(n#p?k!ZMG=JFjo6!p z_u4-f?g62aeN+X33Xh{|(sQu`_+@UcVu~!6h&>6f~R=a*cEA7BJC1?a6aF z9Mk}WbX7@QMuz6;Qy@h51(68@P6wIQAP#bdd~w7jI(i)FPJmFt=K?-i5Dj^u7Gz;$ zgl!h=;c)?p!3rM*wJB25-o6TOAr!7~l7qGn+E;L{fo}#aD=Fzkh6MOx0-X4lvIbZ( zC^Vp|9j!E0{O$#46@WRgssIrL8Y2}I2J1ae0L3z(I8eyfzA?8(e;=G%0LrpaGlSLy zs%t>m0dRmW7#sJqUO2ra;sUh+^dHcU!dmTHH#HtD_zh@-4?#v8fiWDeaNhtB7jHSO zl@Ndn1U3*=Lvsy~R@2X)+FDw#M#iD(@obs})>a81&hXj1epJuCz0R2U0{{~@umVr^Zb?`XV=x-I1GYRwJmGq0rlpO7mm03O zd(pLbRSve$Ra`fR;_AYd5NL4&12Vud&CC?x<<;`?54rxfsTsiX2S7&y2pU3-;GBe) zGR@zOhK()t`gI*Nn;@=%y@Y?~P9F4jOM#&7f`dC^P{QeZi57lr+z5z7;+N0YO8 z5eJJ1z_GYQ>_A)%B!bBnH#vy2_{JP7F<#|*HkTo7?LpJMMtjat=54tuo1ILhEG=81 z8;5_D?J7b-dUlkYbj0ZN3PBjcKk`BSqaHM)&v{B@L7$UYIndb`xAYFuz_8(U%jZ63 zqm3^sT2OSbQP%}ZdU3XOY9+58-@^x=Gs}zZXFEHTn9CFtGF*R=20tzLTgUxI28hIy zleHZ|3EFdNr{`oc2zN*FzIe%m2C{0~yr%2^ z-b)XbxJop*06!pEQhI8QoWJJ^e_ML~1bdlsyzbvw>KnSrq7gh;G|zpT zKRxLkmKQyHM1Yc=RdLN}d1ehC7aMC*_H2)p_37Sdcz27HzLQ>@YhlY~vyCPJUmx01 zB|Z>t6rp}qR#CZ_yrDyV2^Hn(4|#C31FiBW7uiX7J<;**ZgEhUcz85fZ`6o=dL37T zHP7`0?n^L+a8za6g*zR3cM!(HnFhBr^pBGgFYCC%!Ywme8wX1(^Bo)c+H#-erB-?R z9~&VxeL)pKQi`2*E=x&Lu6{)Nm?4f9gVB7cr7fAKE2hjLA~?G5f_GhO^XWCZ`)J<~ zBLgcs#?^IZx$CjVJ4k?Gx`!zU|GavFLSh4Z|u3h&W&?(gY!b) zx_&wbc1avmk5WwBTejiyWR?H0w6rXrZ%gR;MlwhWXl1Afcd@vPgjQsJSY$SZAAQP` zWShge*q*d%wEyiuTH7`K&jlgd=HSIkDjbh`1y-e3#XssuTW-%@CMG2O{d>i=dZ9O( zmM{CKmcPMTvcG2QJ>Vgf{}dPC-kk8A+hEW{{S@0+>=1Q6KR+Dnmz}+Vrv;Tda4zAn zU_4~$DQ1jL1<9gHr5z+vJcB8uD(}TamlvRx9;h{phfWF|o^=lwKO))W+FNI*P1j zoWhJ9OgqQ3n(YJa!@rw$oOX|@I&C`_qjqd#*29`!cG(iS1B~T3ZU7S`AS3{Jz!RGS z67!}j&nZ8ho-g6qa-C82OMI(+jvybeRG(X4MurVv7$4y{!B`TC!}FEwY8x^Zf_1>{ z05!hs21+!rq7Ez_ggO}NKeEzCuf!fbA0|pr;r{GIN^lm?k!YDcDOe0-w$^^m7crhQ4f|oT-L@ikP%)#?cl9e zdrnuAMTvTPvUy-loC}!anF{Eks@pL5aJPR>o1E|mJ|BcJY)*n5XY?=S=B|EDc zf?1zzmNHE4&zgvxVE~H}b&c>N$x`|QnB&2~m6+XT)4V$G)|T?298#Wk>yI#mmy7{w z8gMbkf{+x?YkON;uR`xaIP>{V*BRZ(I$%ZcR-yWVyVaMNixccqX89ymEV$u)^J@IO z_U`!BksfANOPW`ku*HWzZ=>1+V;c%If#=*7t((|JrCcqwH2E>)c}N1H`iNhOjjpM^ zf?7@OOaF>qsL^0j=fbhyn@!FPZ?4$)3;J5CERR;Fu&h*xCBF%GT9dqd@G`>gRMc+k zDDlhJw8?&(s|WXAMvT%#M5+Y1-R-qsdSzeqjWtrKq{GL@+m6l`TW7X_#`29cF=7%K zwa9Ju!i-6wOpn)oQSQuRHlo{dnty-CY9$h10HvyLHJL3SN|@O3y=c|&91BKqIJ}kz zRz^R1bxBEE60O&8JEFC@#woh1L2BftK$b+-wPStWOv$aP4rScD@m6&o-V#jn2(T7m z(gO>%B4i0>#xNN1q+VNsfHY#_^N!%pB-cJV-FI6_rF7?e*2~CBbQXI?5W)w36uffV zoHj?FRbJ7WM~R)==AE?goZo0m5_uLtNJ>S&y|qKpbN!hoe-~y*h*F-ZZA-l5Wx~_E zrgE(HBSGTS8j&xeecAvXYP71wNFRD!RLj~4@Q`I<*G{y zZFgd(mQI_<{US?Fr#io+T)wTe@AOu~NnFExHuuxFW3Bz@50fIO5A5ET$E_EX@KAVp zd0(P!2PN~A`xXogam?EA-+9#y7t-Dd$N^-n+Z zi}9|p7pyEz2&gGYr1VpT|Au$$we6)U|7uAC>Wh@rR7VGxbu-Y@55quzqxxKwJUINV zHaIyzIL+UIFASGpum$%O5F1XX65(N!EV*4#kP8tC48-4ddMLs@&AnR1c^qzq5w#F6 zp7Ipi^16+KhIw#K*7Cd$6%j3l2UYqdUsUejI;zGJ)2SxvSEvusrI+2 ze^4O&M2)Luq-jNZn2__eM0vgazAQ%67Q)ZO@<0C0jQ#ZV7 zC6Se5KTcK76~SUxR`m>d@0lFy8T_)+gVwNR5GPVjFGbG~V;DdB*0HLgi7>rKIV z9%3ZCSZrDF;P-u_Lkry>UCrO^F8jFwY)ne{5D(n)vi!LK2$DyNr?$rV+aG65z)|Vl} z8BoBw(C&2x>&$A0k01zY5>zJvs0h;aj#Gmn{1MX^1n~&Bg0MtR(ckgC+Z6C{|76QM zMn+N4u}RA*@muUlJn3%wP3%SDO7Vx@Zj^QO?&qq=uI-&CtvAa9ZEhg9qHopPo2x3R zre}Qr)c8J7Aan zmqFQGq2fZ?ouY^lssXb*+_`j$=fzo={h4uzI(LP zXqc8i+CMEad`RRGzu#@U1-pq{bRncr21R(#i9T^*aG{3q0dw|fb9MWvw9+Y@2XeOA z-O_zv>hR5H>C?9wt#exq+MFZ1;ABq6t&BOfr@<{g91ke`_;#|_{#fqP-(w-jicgpN zB}ow$}HK5evi9!*YtUak)GDM!iF7RRhie+L_uitqni`=2{P8mOi(F(_30JF zWF(;5-L8&%SEQTj(N+gnR01+tfQ|PiL3*-(3a_NUUdwfs`sx{5s8%T0DVeoZ-D1bx zU}>9{cPJQQ?|LZ7b8!6eQhGMM^h1ZXm^J5B^?ZdhA}7SVly-{(bA@axjCTU=wt~%AL<$V&ZQ++J{`_Ccc z9^=~Q7AhZNj?RGzvJIoES!$18b7R8H*{lAn&1lL9WJ(S+4)0{H(Ogcy2__;8#SFP` zf+VEHzn*EU$XLqw4*FSPd0^*}-$TSDWTw}j=-*xoUKG{Bny7obH)Kv<)Mj z#>tZDLxYdM*hW(=%5t3bxVz8!32ykt+6eMo`}m#Mz~lz!Y>SBc0W>R%gvW`U3FOKhWmrgxla$n+*nMLrO}xam_5m+t zyD&WVp`Q;AC4~&^4fy32;j(Bpd8@Re@H<@2V4`0#rT<{(I=pEFLB8*u;rO*ngh*LL z)~`uPNZt;W+^o7~ANlg+R2t#_&85}UNuZNEa+h*f*6Br%%u%ZFq25dQb6*f>B=FDr zIUH2k>iqIPhZrppN0FQHi<_R0vdopMoXV>Wcm(U8UZDt@l{d8FGa`5A8;CqvpS`z% zRBLSYRE$G8klYpfl8ESePHcp5C$o8>I{h)%;Ik-w@u5v}f8`qWeDxqv`S5Q$pZPFP z2B2hnbqjS1Gb=f5Vm;w=(v@;vKSQh7UCi_vG6NK(Op%pJkm`h)I=Q>7@TWfS`kB;J z={?h}l<~mhAEbM4)`Nor6lbQHwSLf=fkFWcvbSz-F%2@B#jGvOERy@-TIZUFYZ*Z@ zD3jWcSdZ+*6>Fh+7YnRGXBA6><^lqsyXI&r=2%si75pYA4< zylo|woeZQ!{vgJ@^dAXP_dGla^sq zZnm;>V}3=>k>Ew8htZ5?Rto)UZ%co+q!yGL*FK(2zIxtoel_%GGSQ>b%!9KL?(V6k z=|2~sx3%>PX67tEk%vtVQym*HvNinhp<2x7mKbRDzubOw4fW%fdsrUz(_GfAxrRr;pV-H1(Si=k7(dG!c}$!KGN=N z3@e$3OB58ev=cip8kMxOW6i4soD6XR@NZ-3r|+pSYAm~LP^0=dyaw>Bfxe!L$?>9C z3VQ*U5ws9An_~XZBOO@x=>Dm}Ndttvp|O$Q7rzi-XwZ5(B~w3yZ`VZ*q;Woy)BaJ{m{qpRDm8rBM7IqaK0$%Ha)<(?_^N>ipLi z*9MuN2V8PU9ub4aBaG9IHA(z0*IV`sHo6Wks zWT$)k=;yKo?~Tyd-z&3l(6Sino<{`#(+#X&9~Bg(%b|ZZiGSPcD~0mgjMVHF&REl< zO-~J-AAz00HTGI~b8~mcsw^0G`DUJ55mT`~#6?WfNsfhn4t&)RWDd>_;j{~|ngxf9 z37*LkswbKs=wDWf%L(f&#;K?d{@h@C!TgzU)V6w+(^(DP(dV+h=HKp-vKcqWa&wEr zp0563Bb)n5wb(_>6=}{H+@jt{9(@bz$Pk+EZIvo6MvFwU7^B#QOBMKdUBhGK9O8@5y|A9(p z$;@<~Nl6|hikJZV9pmruH<9Ll75T4gP^4ed|BDNN?Jy>I-!{DBAfezf1~vxTp<1&M zop+&@Wq{wHCJYaaG-Z`k-M%J|mlXW8#z7J579VI9IEzjAl#l}=bh)>K5k5`RFvi8S zz)YKvzKk>{T1V@!QDVvj1cq*z?Ucv_+(1g?telxl|5!L`Few^(CaX$Z4|k>+>>3;! zoWWkoPN8q_+a0f~y-PV?JImlKrutute>J&)pa680Vi}27x4jz`?nTN-SL0qhO8H#d zfj+#hA~eH!y1T;+mww$kl7?A?zOkq0?zt-o7z-sNfa8#}q0z$q#*Naa#zpj1Eln|a9LKT1$jZCgmCLv zFSg{H=C>Py(BMUSTG4V(ev_5=0_$Ok_MEm?N!YY>Jv5W>sVW%C)>dAUx(qZ=bax22 zaV`|85$qp?D>7|GpK0JYKZr!2xutdBdBtJ--hBKMu2sI7LYV{{`6|IPgB61ioUb|G z&aluWMDo)_b2UtfOKi$bPCYb%hPqu3sH zzNa_2XQ=%yv?vj)(!;NQYRM;iQ(ERb(Ur>{^&t1vS6ZG6+A)OjqFi)1qFpn zMb{kjv;WrB>w7oiP~uz%>SC`62@95wl()7tx3;yEw_A~hOG|&wWqHiFdFDReF`T|QEZYLJIqHXs+ZZr;Xk_|*THHY_s8>6M7qK~8Zj z^Hy-sSJvPNljkd}$oC@=kr6H}4Sv5@Se6oH?aG;OKHAore;^2=ODrfVhKQASoh9n( z^n}QJ15PTA9sQ0-Mf4DSs0Eyo2oVx$6Q$|-ij#sU_>&v|lXv~7?`Jzc(mzpM7bubc zlDGKf7$*)H4&nk`$L#fI)Gt;>+7`9^+XCrQP$vvlzdS?RN4Hm~L|lH&Rls9`z`&M6 z3_06fdbYcyG^2I*;9@{ddnA!R(y1%>seQ|SO$9jH@8cvBOjbs&tuFhsvfX4MEetjSIdu7D# zuWzv9J)$KlWHVEhZis1il)NJ;%zl#ewx1UZY*>o?UT7QB(GAOYHQN@&d&fqyD2_FD zYK4{p^3was(}}1mCLJ$dKBM#n*1Dfj-8SqThwii+2F1|z6sJ?Bot2*6>fKjdn6Lie zJdBBlQTmX_+ITdM>8;>!rNct-a^wR-!A@XFys=atF1rQITbv%z%PzY!Lrgx0@Wnfh zgg^-T_gdK@Bq^y^w}=S%(^rCPr_HjpRf-F9uB+hXX*lY3PtfpTkuRs|JFgvFuHWyG z;g`D_B09g8^iC{Z{E6RV9Zfl2!I#g;(MHzSv@Ti;qEFr_bv3HK`>fSK3EDLs{zFve z8C?3KE=QO`3hi(01<#aZN#~<}$|4rEuNViPnbOv2zU%i||N7r6K+;=Z2R5oQVdQJS z5o*>m7;*z6W|D&W3k5I|8@}9zXxKNH7sWRVI2{62{=~@h;zEekgdWo6;zz?DqG1{L z@391t9emf#;6QM3LC%7pgm$8rgy9RY25Q}IQkP*|{54fHfa1HwM3t2*7HJ^c>CYbv zP5Yi7ya)mm;)$N`-$`x3ZW1M@dfC-``K$4jOHy=;=j^x}QXF_*-o;f94RjV^_=gg@ef zk_vJ8XzyNe2b;qDgD|0{(+^il14==ZDn7p?t9O2Y%>390vE%6I?HKJJahMFerkN{+ zaGxBaGRjeDG~HLbYMpa@bTCWI>B!V0R9sRq=jLwkddQu4oNLpsjX8T8Yjbw(Cu|Ih z{1>JSP~!yxRKg#_@*w%cp;2_NvRT#TmJulJSFD3_EVa0P*^m79a{8!7c;es6>Hiat-1J_URc9?f^>Id zB!{Z`XM04{yBwXJtSQHb(c{r|Mt=?tg8^h|0JyAk++ll055RPU8z6B;JnSw);nvas zgE8WFY1{CuiodqqKp}|cnb1$Q0opXblvMM?_xTVF#$z%B>~Eg%f3Qu++fs5{#*z)~jl?)}t< zb$)rn89dKCE{CCAV{ctw$&b}5uF>N}caLC@2ygoN|xbHxufdM|I_yeKX_Ks} zuMbDB-z!3>IB|!@IsZD=&1qHtyNJo*0#4?$S$=edWvRaiHjN)2V|e>qo6fwZhaaim z9jo}o>@zKf@bxwhZTnIFpS%w*Bl^o}&j*+S5s~K|X`}j@<)wv(+D1vm$LeQPnAFl= ziLD-OjZ*faQ%@EgetDF9wii<^55Tz`gJthmJt<5C88FtTeOLY|0|P-yL^^}R2-DI} z*Vq2Na{eT<9DJ?4sHjR-;g#opcSH)*+Hy3j=)r~L;rBb1#LAz@dC)EHOAig`rtLFl zpuT!7Dw~xx?VB_89~JLC%Cs(+)%{0b;CXb}m7C-V6%|nMoQlUTPPq#JQ3fX@S$Bo# zrhgf(b9nE#q^QxABg8?zsy+rKa`rJ7D|0 z6rORSG?agS62*8B?5 z_GC_bXPbn5RA}@7!3BErMfA&ci?71zb zmNzWD7j4lo03v0r?6d!vfdyV$8%oy^v&9?u6hr#ZTD#by@K3&{w3tO%t|P5qBR$^ zd`bOKkul2VPTJ-wm9H4c((<};{)h2SUo`;eE@OOX&$v2~lAE{%JyC^hFoINOyt@+L zq%rVgF6EOF+Q>G~Jggte8&c4lS8LXT*Zl{x^~6ZIJ$}NuOSC|-8(3CfJsjK%h0O;O z9C*;2JA%(VDVCQF_;q~_4rEVlmecSv3D*d)C^SVtb?_stZoEh2%?Zpi^SsTlNyXX( z+P++Sl!k4*panQHt)_^HJwIEB=+M2avk)l{PEnvnpRa>ruA2SM#RIB}uHBU`%sCJh zcms%l2&8$avwF3c$7U+(aw^c z>n*RCg8Hc?Oj7Ze5?dK7osROeXWy`poaeD2F}8&ZA~fzozA&`r>cc{A;g)1>n!R&U z6m?SU9F~|RwLaC;(5A@|e=kevMY*3f{))7|cy(Z4P{a=;Tue;Nd~XPsR@YZoW|ccC zJ|{#tE#J8l9%w;`1jL3iz6Fuu-_rJFnwgi8d5I&X5T$B=>yJ_KUK6ic&p8&{$mqaG z!8nOsae%KGtH;6ul!v_ zUvx}3WOl76o-;ikrZLmZKhDsRN89#oGc+=gxJOAhqwG^+(+@jZ;)DOM6;$h`bwn ziPFiaF%f#T_Ji*-4+f1eR+o(AWTa2cj~~9{+7Q0hX4Q1m{k>Ajhv03$%)r^`*457& z@#%h9Sd^#ZC)ue(eITlT)N+4BMnY25SMXJly?yuxh|j~iI?_11>HLZ48e2hrYNDVj zzp?5j(F8A4=M_VTl@6zA{`E=w-6B!#I5?kGSi_Izcik_J#ijE{(mWj2@AVv(p9TH$ z+K9b@dc%o8R25?1t*v#;&1aW~@0zu1_iOwTo30IBpOM<~Tur<#4@I2r*JKc6O$e@Ip zk}$I4=lcoO&`XHPa)0VZEat`Eb-Z%{!aA8jWyoO+d`IxMfAq^6m*xn7Fyj}Vbbr6c z2T%pa~NC80C8X+X`TKx)C>~$ z(CXc6m(jN6@jF!=P!2jwwC9I)ZqeR@#RrvVLkqh}6CZlvdE3$dgUmWA@&D=-q4FUR zQ8^ilIXRx29o^Q*gzmw~g3GwLD%JJw6kCT=+2xkfKRuUw7JrgADU@_D!7I%%#}47c zzAZ>wX;7@Y&UE~n)AbBgFU0MX&uDC8s@a@9YeHYz{U6%i0xHY3TN`~r0RaUi1u2yV zK}5O)lonLFQ@W)j1qDO|q?Htq?vQSzM7q1Xq@>}@*R{XBzi+Me?X&m)pW|Q*84d-x zpZmG*Ij?yIgcoSxKyLzsk*=jgyo1K+NmK;f9tJl8#4aFUUTfGMMFZRxQ&Vt{zy{{$ zN_bY5`NN0bzDS0Glp8_C!=nmXI1rPLjDS%Gs2Dk;*H>0RJ3&uJ2f5yBP^Qj_fvy+$ z+L585(f3UtYHBzr1Nk_1d#`I~Dq;obeKAt7qrpAgvfV==d)aDAw>B!H! zf1s<+Tk0qQn1n`8w*ooPM8_$bWwRCH*df^?c~GTVi@0 z`_yf|mthNDiL&&Pkia-U*>`S7GYkl-)FlV!g|FCbi;p$(`58Qk;6Bp9M87H06o%ZAOkSvR)R*8-LoA?08QhWEZ?Jz{+4EPZx;#BI@eVuU|J<)tolX+X6ZRdLGaaudc2_jIeT! zhF?r6I3AD&fE3dasH>%=rIgBdkZ(L4+i$4($E)X$%vM+D<_SK~WL-{`&CJQZ=EPEw z+v%P%j+%N1zVqK7YNAq14vkT-iAA#KIF&M!{QWn^W0KxTMh$MUF+0LNANHwc!R36&6O37oHDc zkZ#T1|EKDFs`LDR3MIeHT{|1W~aslMLBK$QKG!?nkPDK z3V%krFKLPsd_HW{2)Skb*D2D7$60;^t) zR8ZL4@1a*%q3rg}9y2OCI*pLGyTOo^li97{;i78a{(S`4h`{{;t`-8JP?KKfw2oJR z4u&NE0$ZQCor=gm*7xYUxq4VgoVzC+k$q(QZo9#fT1)+rn&*7R>ec; zA$Su`Yg*Mpf4n!O8ZGg+wJ)-N^Ju%|)nDuR|3I)Wr;<*vR!mNGcjy&jZ4iDW{rEQL z9`y$}hYD^oFi5)bU47p2;U>t{S|E>n4;`2m6a70pT2xoys`B&&1@@@VSF4T5bVq)u2L6gO;kE% zm-vMq4!1F6x_J=W{JBfutwH(UbO|jU9DgOieCQ4Z7<|pBqm|!9zu|lBX94vO6oju^ zYjyKw1#{s4Qm>nTf=h79#ay^!+eeZ5+=v4}0lm8d0;{I-((*1w&4*^hA0jvZ4$PNm z&&~0ztDUxnCtR0mQZh^)bp2htnB zSpq^G4DOL2YUgdiyW8h72}I$XbG|M?`HebRKo6EJlU1}-`Nl* zA}_|0ZLq0($FZm2b9f3mt>_nDs&qz1dR~>$q;5Tm4s7_kr0Ug*xDWnBe;M&8Af*2n zEdKIeQT%hywrX*mHjO_|0vv)xbrL#@T@SY}VBioC6Tc`M0|5_cTX1|K{w*1J#A#`l z5O3eVpF@LjA|;P4(7aQ7!At6m76G#K73}yAG(V-M+`@9!G>`E&X9oCc1szg;X`fhQGcm1YGhr-%6c ze(;>71x{fLFq&%JZoso7G>8;nz(COd?x^CWJH)*r@2EL5%`bQ_6&kbcmOh^ANL+dAyFd^R%%sOIXW06657kYnlUvd6^ zYEU~AtWP1});BVNg(y9qqM-0sCQZ5jQ-eV=ojn~BI^YWkp!3v1>_T2`F%f6#vl$b+k=2z!k`i`! zhfoouQ8#WU;@CMj{@Sz2G1L-$)=sm?sxjZ+u=KK5#bZG)ah1&I??)oqj&AnPLPC7x zFUwLl=MSyDACtif$l!X(xS8hoYBK-8c)}78$==0IGTfk$;E0!-$O8$WS@clPHBwoQ zG&84AaTefqu}RWp$^6*j=C?JT$`zyXyucC}(V)tu((bYiewor#{zWxUbrohow`fmYZVk|JgGFKdnVl3c zJlclM`TyEURwPB|@k70+6ryxsr6QYPZx+!1ZtRo}SfLHTS7JYDIm^D50Pd?9kVt{r4W4=6l5hFGvdkETAhX23YR^*L!^}a+MQr3X%U~wn~nRy|<4Cl}Q1a$K9 z>=q;U!Pg%*4h{J?|6?=~*lw6~k;m<5w>hR`k`43-Y5Dm!ASQqC01+$!d0iLexsU|4 zE@Dy*&HkBfJk1*dFv*ysW4lAbQ1iIs#cweH^LSBWRiWt6G8~uxEGX#Sm#T_0TsE{= zF|Xc~xLAuQ-0ToqwA&0-?d;m>AB&+PTLE=?9SR zp8M@vt46c4>C-LpiDj6i0Ko?%#b(Alrg*-BMiOjIna2#Hc%!X`%KW5~Fe?U?i{L>Y zbe~p^AElr_d$kE&Cl2*uk2vnb82Y>Fx-j1SlY9WvjAe=at-t?%CEWcWVhJ>7RV!M0 zy;v}84q03vc)VQ!s#1`595fvwXB}O9aBfN^Jbe#glR0xYg|u=YBo-LF?Ji!980++v zF}d`)*RR<>7+SvJfHwS5722p@<`aaKtX~Q%^$4v=G(oX*AGs)uuG^=&RGUB2G!|F;-!Yh+ItQx`041NJ?t8CWjI$ zgewMfZ#eyW?<-}rT%W0hc>8(RkCyE-Kv%cTN8mQ(=*fj5hd^WvRjw@i8;znC<6Iv7LkQqh z0dw4h)nX`)^zyl}^$Xvv3{t+x?d<(84p9GVWr^PcfSvu_M@fy)4W!XC5DPIAI-q$D zW7++EpQiHgh47>Z7=^)*6O0-`?hLWP&xZQ@AEox5A1=m&#$O8=?y&gd6Wj@L;4%s3 zEF2tPK^q9u$it(fv(IC|@B17-`A>X*^)o|!G77IOw|63*g0kloPMG`&zTLe8-JE~Z za=l~LW$fBfKEL-#W`CZdP+J=b8+K*bg0XP zmz#YnyLS8W_FrlJOqYHreO@UieY|((6aEhd(KRCGtg_EmV7K_sjjLr#^Y6x0`*{^6 z9HW+C-7)RHD))tngJ%s)r>xM(4PQt_Fjt{8C`lx~mso4Qkkm zJMk7LAIjtZaBk|v-0^Ud+j@B<>jjBVIeKOZ+D|1zR0Opq@2cS zLvy9&KIM%&{6bE-xtV{{$E4Ppqv`$ac*Knoc0h{{?1Au+8q(npH$|ywXgoBYAy4%_ ztAE#sV2Kjem#hIXmxWGy@M#p7tcZU3;;kvHEuOpEG`@aAavQ%LpKGa@IyPr{KP{k8bOu(q(Pnz1SMX2I@L@R2t@4WO!b8OC~8 zi=So})npw2e-6P$;j+QC9#aKfL3?bt@{Qln2jeM_hpe25_385+pxQ(oks3rd8g6}W z5BQPWs9pWZPSa)W;v=+2Cc>Kif6waqM+-2AN&ob<3gk|jv9&pRIzF;*q@R&M)Mk6F zt$CS4{l>1GNlbX2GhEEVbgm@&q5-PQ4=;GgSk5(2g5m^2LW6JQWHFYfl(d!|C*eeu zsSP`iTtEOt2AU=?RO*cV&hq{7TYdqV>hmk5Z(ZE%|7l9{(|9KBT?W?NBzpbjA4*h- zy!i#iwto=h!J*=h(a6^qzSUgd;tJk}r%TLGAAF7HVuP4EyuL!fIZ^DUUXD}$M>c{ve#rQiFTjL z)Pkia+fjJ_M3eu&F34jC_nl8pw!YbnP-d9`TfT*ZJp|f;?Ot0@7=#J12)Uj8*!oFN zVnU+z1-T&qeNmlLYkuv&Eu>4&80Im~Oh2Eqa)LuBn8X2W3p(i2C5?-xOx)_Hs)zUHozugMT+-iDl$f z|3|fYL*D=2RI9G8FNEV0z;n(>O}=2>7n0v>EZ!0th|}JBD#pc7c(#-Mt>2Tef+7dDtU`-eRd+-{X}} z_)HcE&P=q?CRWW<;SrxKxliQOGG4-uCNrAm>;*DVL&swU(#H?yQk8E0o|znrE1}>8 zAnSE7d_Jn(U=RXOZBe zVJ~hL7ALSQ>)k`LdrZ2+`R9!OAowt&OK&DvjS&(QaDI%@O3O?x-05POEBI5L*)*X= zirHa8wGjq$!d__C%!yZIZS5?qFH^M&1=Rh*piFwDN46Q$5w4I2`9G#-4NHT2- zjX2#mSFr#pPf$y^OaQ1YB_}6d3~o!2tlBIy4<#if|7q1sDR?|imh$0%d`hp-5;c_^ zcZNV1T5TRZ_eAGC0+TXBpS@MnI(dh}<0F7D?pQ|!i6j8!j|ReH+8@_j+VRZ316A7e z_l%4DH@74zJp%<1RP5&wnX!eC_<|w_s@3On&$r|2^$Kws$#67?fLQWZ&iRBW2)=MB zA`e}T61(*PTvZ4Q^QVls6}hLq1aEb}f=}nyWsfm+pr@*u-J|dY>s|IPwlrt?E8r&p zK~;Ac_??124pltA1N*5hy1XpAk*-VosqV+rOpM$oDufq9{zO&31S3{cLM3ypz1_w_ z3lw#s3e&C!2PFsuV5`HH#>P_~HQLI`T>4Fy;p9cyW)BQ_o#P4SGhN_$r=BwE=3ekRgID57-VMJ&rC=qUL)t@PB{WZ3v&Z+? zqdd(gS-$so6P>sm_AydZ1WZ=EjI4k1lA^zwe*n`@xNJv;IXHOsx*9~+=}g@n0u?{744rYwee1eOcK^iF89HOS`|&av(dyi+ zGcbwBi2Mmwj30BdN9oQBw)G9i42U{@nx$q|^xQwvk#?uhRlItKlP4!9!E%dVP8Vge z5Ua~bJx`|&2)t;_cNXO~x27U%quoD6xIYTDYJ9`|7|JyK)>K4A}UL3nua*ROlxbC=-W zI<-YkX!J`-&m%XD^Usp)#0k09gvO7eq!T=7N%DJ>wYr-e{S) z%8NC@+@x0!RHj#%%reaH7#_0x%t_0c+QcU&BqmuU*>dpvD|5WGygWn9Oq|cR0aF#9 zKZ-jeF+(qGq2+8U>N^}|K(!*|$PL!TMB7J_g_4uMbQ!bpwGHpTNoD-0l}NgUeJRuH z?mrc@T7Abyo2qC_g*RvA!Sa#uYgLsd1Q9r<6(Fse!od&@1}4y+!fgIT`wV$Wca>!Jtv*UizD3B+EOMKR_jYE zl`%Gr-*k8pwF9n7&I|p(S|niP0O;schEMB6s54%MOena->~F~7KmSsAzO&1+xMMDx z{H=GXXs|z*-O}hsei0htJvm#-l-A9AoBe;lvv2yPr>X=~ZG^n?7^y1%dm8zBTqRxL z>Kr|Vy9LAus?16f5^up75)6|zpEx>lc|N$#=fM0sfdS0^PHaq&;86`xLK2V1B@>2p zH}zi^*KvTA?IWL>y>|)(BYC@u?4&!^%@sE@i1p>e2*W4&{=XrbS6Y=J5Wu^@5}kip z;Y4;8)O7)nAP}o8uP&`)PrMG>RG}m-a`X>=?N^>LqRn?!`&J+F%*Kfn`xR8nMz8*S zQ~Ml6U+g_P;xEYNO~fl88wkX^qaZbZ`FnZd2~QZBL*c5zt{fx=!;Zhb_wd9Fb4Uz4`%>UvA28UE`ovFoZ7@030k%Ol?Q$L)Fp(ILN_jvo^Z!h zgJA+SkReZGPK|Dv9{RmH)$96qO8Zwe3Dhifi6+D?=?Znuw> zg%$?cY>biIZZ`2ByknMBtn2qO3>AabNL0M{kf}~s5MKL};HaZyhX=yfA-Hmb%Vc z8GT;hx{syvkvS##_{ZuaZTHQ+eqGOsppE(XfvW6%te>Aut=6XIHGWN5cD~dPky9&e zziZElJ5n7dmb!mclA+>xiOw$t7yV5R_ki|ILG{dUMRSxVV`%bkI0w7sYdWGfb!JV7 z$*O}pmeNs?7p~XIjlJ9)#?Z#gW28lAsh^`ip+&7kF?=#Y`Mm5V-;(oqx^9%=lQ$9V zLiDdUe%~pIZV!$8co(92y;@gX;-T@XuhP@tpg4g*skgHHr138nzRwcNNl}KOJUC2p zfk{>;nRK~3XGKai=d$ZPgbcXPceFGMj=nCI;kp+|C4qP_RGsZSQr@_X=D&DI{!ZW> zVTFxyT7LC4nnLTvBa0iiINd(GO=+|738iMFM0q%8-{qQJX#{nratLd%Gf0Y(61oS3Cf-GcndpTO*OSB z8Cv~Rc>TOyg5`Nl|2ix>)nxctzhZkT0nBs0Kb*Yo+u#i;DEB&X5xhfd0hwO*U+p19 zx-3EUvF6vV%2=|%)60CgsXW|dmNQNQl6dI}TiI#Y$=dBd?LK8@+8{mF@1R@)H^ zVL+_$;_C~FM1GYJ>gDwfdk!J>yVw<>Zd6B+9MTsMQ*Ld?EB+8>4bu%k|x{~Hn=)5f{5AKV>ne* z=Q~dCJ*D}O+@k9l9YzpFP5qWg%#ctq_u-?6ut|ypj(Vqe*C<$vo#L!)7`(eXt`b(d zHoT)_jkClVqW(x9kw>oCS>K*yO-O=(?T@?dx`>}A{n(E=0;+;BvKEF|cK4eW zs3A3gGU(B>kY|XWyFsboF_7j%6tUl8Rl^ch_#}$Co%IT&sc}=r>q+A!o35BXQmk## zTPRy%$5Hy_X5QBMBt*F~#>vEc&=%A4(V5wbsRBV*zOFt365m`knF`KRlLYF1Sd%)q zCUMI-#er+5C6gtU zMvev8(pZo89y?dhZ;~vZLk=62PO}q#we%1a>fjHRKYMU+fJ`NEZ|jt}6@2L;Dsn%! z2<5_>rrViPB-c)YO{NGff{go&{X8@6jWIsm&iAN66#r8f`h;EgVFJE}v^V&CgI2fS z`j7ehOC=GFGX#$8nDulYz>ZQatGV!i&tEcxYJ;C_YqqD1`c{5hi}te-6WISJYe0P; zAm^Gk-QMIRV!u$FHQyO`@l{hw6UXR)g-SlosNn8lCULHr)~I?19&&eqmEXS zCBM*8Hp@`8h53-_Q0gOU&5sA$lL)TTI4k;ooD2QB_Z8dYBOT+bRs%dtyx~Kh z*_2f{6&|7n*R73aV_L9iT9C6hm_%%_KaOo*UcVfvD(l9Gzq|oHWtDcz&mf!%GKb=X zAd&X@UbY#stasf!g5uWsRnf9SDBEo@>8sS0?i%!^949?!(w3Uc1z+>Fuzu<~I=o}l zeYY`J&{k56?v3^)I~`Bp7X9N0BnC}ReVdhOQ*ZSl0}~2@A(0wc#ed>AE58B`TutI^ zaPX$EFUi}{?G!RG(DSGa&u;0(bx>?ZO>$Hoa}R&su&9cx$xSW9;Kchey9EXq*s3IB z$*8>ncMR3}I@FiH-anv|cMJ9Gx!{shJ9v|ZK{BaV;^B-2G49v8427e`)vMuG-PjiO zepJ)n3Z`ci3!#?O@8VG4SSWY8dg&tRYsN<_$d$?2Wg?N&7G$dY;K-h2yw;Mh?h=FQ zzv~03MrCC$!6Q>d#LL%LJW_WMoc9<`Cc&||T9M|QG@;PG@!QehIm#{ALF0a8jwiJD z75cT5s^{Wo8o!}TEmO)dWiXK&4oQY4S1md{qKiw*&LqiTE0UgwC?0sBYT_^828T#* zzzZj#jf5F(h znv$GjPjkNV@mi9ovTvo;OF8|!@N*ukm29*tI#slc{E&*0K}S?97kjF|K2oFY8HfD& zKuV!Apy{$3b>yjdIHy~Jfws`u!EFa-Wc-Vx5Kyn|)gpyr^IIS}?16VoFP?$_ZMj-ApJ4+4cE zt=Z_X5g`7L6k?|2FsJ^dc;jpPkN#)Y?;VQ2if(&{rR+bxW0AeA%#P%i)Hb;q8vbfr z;o?vry~Dy$=k7x;bT(bsJlp(!F+Ssp5_v{KxHSt{`X(F1Dc;D+pwGR8xOpw%*FfO` zn95wwx?eii)9zKYie@tCXf>A1C5yY7y6_ZhA?M>{hq*`Z6Jig+Zu^KAorDLxEf>(Q z%k&8ayM~MpzvN(zmP&m*@afyR!_!xr`K9z{CQxXkKAR2N3|yO#gV*_Enc6*7nYBKh z5O<5yXjiG56`|y@K;8aE7EOv$?@pQkl~7v3ZEWdxd0!hWpKOccQXZDvK%jt`cu&tW z2x`Z~r?oqj0@vd8bMz}K%anAdDBu?kmgYkg0VM2(yGz}`zdCuPt1&%wE6Sz-Fw|54hM+&6!Ds`IcXt);aQjaSRmmq9j zy1>DP>KWUY?RVO<0&(2)x(!6(nkClevZ*Zfk8P8AVTSm4*P${uwX;$Yd)WM!xfw1O?tTXXfdHy8*h#4Zi@1FE81H;s!TffYtjmx z3%#yV)%|4ZsKTzxm5oDvs0oDh%nT!WX84FMk|N(uifi96Zz$zB7M)dCsdg{f-H_u$ z=oEa^pxD%tjR^3zSJ7E2{;FG7!AZ*dF%9=AU(q_1@KkbUL@^QR>n0(A$Z)abXXI5e z`Mq`D85a|UCY;1EGRu-b33)_5q$a;SS~6ezt7LORwmX*W8eRwMmt(m?`mX&TWmcXs zSuwr_pe{%XZ;7n&B(%>9G-u}I*LAn4Lb{c-rkS+P(xf^5MZ~3xA`T9mzfhHk%{il6 zPYyb9Aq)u~R<1e+bPjVaZ!&Z7w@;Wh#@JX(=Cx}$FZG<;l*I%F2I5kxK~R8F0v7`DE?s)8W?+7uBOxpWef6;99%ncgfw5@#4?ET~*O^cHl7pRwgMEXvv2y6hisH)jO}^J9 zgvrG8txW5FV;G3Xo6#Z;768%6wlWuiElm-fOx{mXx}ZxNO?E4bLo@GB;G-U!%g5w$ z15s1Cmg{ZyQ1N5(*fA|i!5|nD|2~CczS{^*)>TC`MPbM z>m_Yg*t9yO;`DtC--gFzxpb1ZIPO;y+9&L0lEksR zP*n7h2%*Lg`nJ3(i}GsC%M3KOqG1@)A=FjlRXGbr7i!0S_nU$!a#ORJ0-IUYOQ}ni zc!Qc(bqcw1um<`E>ZYw1d<;44`%gmRE1jOHE1Q{^cAqAiME3foo0$alpd&tc-qS^i zCYU3DD_uJ#^CH5)dEaHN&qg=YA_( ztm-&z%qk9-g4NKF+aj;vd+hP^L@6ri;09DK1_pXbiK}_GXLV zHounn7XReTGpwZ8n~Y9}K7?{w{NrSK%dC^6J&%lxQoAf3L5vqz_U9pusEjQv8u7NA zD$C1{AgARph!j#00^Yv|r)mgW1t1$zb86<>k-K#A6LfZNN?RhrO1dvwq|9(f?fJZf zx&#rmJIbv0`|tk}qsWWWujrao@58sY;h$*M59X!-zon2~xwh{uR|ZL0wnbRu3sso+ zpT`yNtl`GL|8~ZxJgBtArPr?j^}ReAf}6~`l+p-QBA9yg(>mN8@ErI$>=3U8aI^DM zxK(vqz#sy8cpQ+w;2!=8f?>pR|?An6LTbd&0wY&=D; zz+V@k8XnpTnBgC{DNnrhM~}go^*236YFFy0urn37d!2be_O0pRX0BVy|(GFw#hx|fY*3TDym|B zLRe27bRxhXg;K~Pi_fyYe{Rx(*$~}awQUkTy`ty%x%}GYBs|$QjhX-|7TbOm#sD?D zRBqGGTuC?suyUTypWz_ZnQ0}xN_VWk1xYW4ynSdsXI0Sg1-j0N30D1l6}D74=mAf% z!xQlm;q+rN)52i>)%@()y=RY8qu?rBb#EN2*8rC`-Kd6(_@`bGBkhi4Txz2ownT^} z)76h8vW0f>CM)K$Rz{^ij*5iM_RUW5M?T5i3Lfei;I%Bbq)2{6FTAFE5Xwq>Xkg*C zUQfB;hXwYd54|2bxObE;m%n#F4}M^9S4f+A8!h+@7p_87hxg616>p}u0K3P;#}75> zO&PE8h;P(G!@$@C|Cht=hf9;*Q3@CDELua3!{}rdgS1Q z1V@HD=G!NRg(F@OJPi>`U0#)m;~4jmN|Kb6LU{#qt&MZ5#3&p34aIkmP)k z2o@FFRlVSB?*QdjxD|zkWyw5D`vv5M7l85L7EQuossPDdkO$}M>pN8fR^IB0mjQk}!~rBM!zY6@ zTx|Y#1M9i%A>%B0HP96W@_50h z7@R)xA+C693oN;5@%$i#X0luhj=7foOlbIl?f;hs!}PVHucJxCIjyV5Cw}JB&t93>{h2IXLFpI`uKq#@X*K3A3v&9PE%lWH73&zb>>|_9&!sp zGPyaKmPW@)d6~BGf5WzP~G=9+x$GLb!Xubdt5q4E8N_@ zw%2)WRasfrsW={}KK-QadDP?sOcphvB3te;|KZ5Ij6hP}g1j$jug6gkT=a)YzCi@` z*{q{$s21F{I*Dg~bD?V;9honO6?iQQI;hV|{83$l8r_@^)X$bC()$i(D{f;*;;uZC z1q9?re@LsIUMhO%uG#A3oIKWW?Ap>7{0Q0w>RXt{8OL(3U4MJ)&Nc@v+Z_R|5sc#J z=jTXf5fl`a0@Sy5RqD5NNgICot`i_I6wL_|5(mLuEQv9FMQ_O$_!L zO=NhRbGj6NeO-}s1JQChY-?YA{_BWutKP86kKO1+Yy_AdVQO8Qt9kjj&39ik%;%(X z4^gv8qoCi*hsN`=jzDg)>`K5D*$JV%;WeA2q6Sn^lvQhu;P#W?y6A&DRZ@KOJmCA{#^4(iMSb2;+p5Dc9I?w}^M| zzNgElf+c2t@2gj@VC)Yl@YmvExZQY92683 z7^1=V7%#%S^U@zKL|1{d%y(3i!T-`_Oy?d>djAgbYZKC9N6uBQrFc{+{Z@p-i|dN~ zC%?|2Ygnd7vv93?AI)?3U#$#WC`Z;r-!SD1ts}Y|9I^E)|dj`BcI9eS(fwa;CtR9miUNnFg z$F8s6GmD!Q@!0&nBE=lsFzrJ*V!=Q9qsPtgDEu;WaI2o>(AVz1;jwxPF@v#umVR!V zqq)-M_+n~8H57oKE6@s4M{c;}Zkd_84_5fBW&bb6BEy5~5;D?fb)A}b=bc=4-}7*a z1@=0SPqb^RPc5Zu8?`&;Z53hTOiCE-Dxe@2O!zDSkh}0!J#@<}YUlD@?LSZ-+qZ}P zC`8oH;j?!p;~zVf$@YaPP4mDtZy$F84kc7anyc&UG%o+{r^|pM`n6v zc%)+2b&!Ljho&g?E9f_-XjbQq7;-2wc;wVE*92ScFP5Um|WCa5qlxO|$=Y!#UTuIM9khD5 zk>r0#QC(g7mYXMs^EKp|72gXTaVMh|eG4NquByqpZiS`zPmB?aI;-AX1LGhvcA0NV z@iR`9LCv>p_~RP&Xj0=N!hx~Np)vR8A;x25Zf1`{?>AKFQnUvZP!Kp6WE;>hFLl z9SmJwNbdmVd3}8sLyiLVf#uef-t;C!?S?^3&dbxO<=gOn##UhtPv5KQ=t<%a)Oo?vvYbr4EOuFmccJn9b#Izbqfj#@(2;X)<=!Z z&6z)fD$HAgdZNNn&e)R-2c!i8Q1F1f8^}5kF{Y@feLRWjmDzvam*UQUamwjc+LBzFcHgu+b|y`rhL${_ zlc6*s{Fo0>RQQn^a|UogA(mL_TX^}wHLbj%un*LnYu-2NHO2@s1U47)@`ATFXU<4o zmj@iihs(QRih@iiuf$SclvRFT`Mx_;2=kN4N~=sA-}mFgW$w-B@^1PtpFo0kfN+>a z9AOVg8KZrap$(=Aj*Um2!^)K^Je>}QeP1S`o}JzK zxOBs4LBsWUWBqs_qEFf=-vqOKgxAogmwDU>ghaigBrJt7M+yu3qF@+zdJaZj?Ck9M z`a(iA&)XtUYGGEiIaao_JumGZ0cme+`b|sA%b0f{Pm_Rx%%?%HsI)zq*Xj+Q6ovev97}7@x%sCtP#t zBKcb2tGox8w`|%*?lRA-X!M;>E?l9;CCCcz!UAB#dp6Zi3|La6$VRN$HPTzlcAaF;?`OcNIR)tA}&$|y05;Y-P zyYq$h*e|)*-vMF0Vy~@z=5+JsDJ231FKeaM)fCbs{7!jazuLRH@(aOMooH*rMnF;n zxB1XrG&FBYkCXiLbW8-)B7jlCG6P02H#Y~O?E>e$mD<_|h|k@|(h-nf4KJt>DNbmr!qH>4p_d;=m)Ak~ge z=HrLZovry6z)f*+ai2eb4pdtp90NB5VpC5}Tw!2AP9B>(@E+cwmcc=I#H1Of3Z&s4 z?}(4@Gpqd`$mrs}gn1nB8BkxnxoA@!e0Xskvt(m}h%hTBgT?8l4L=2<=zbAnruHaQ zrCTZr;PLxH+|Tk}O|7nX6lnc{## zAPF0mC;$i3}OhcvgV z)Kjel-#k`ZY-wWVvIyIG^FEWx>+ZWhyAeka3?q;N=Zo68rDN; z3LX;8y}j%l9D9rL9vu*Po|6L&7tn7Ikk83(IaUgTiA#pf)7FSQ;55U7O_htED7RmQ zxi--3>Z`$1PqVZ{X;l)!vrUV-jjlyH%q}Fy#V_w%rpL6WNa!OXHWS8zbBS zWX_6oWu}v^yu%j#)l*S%q6h+ArpWQnb3qh>+g4n)`;bSO4g|rxysL8TtCnQj(JElQri($oFKOUGxH$CA_#OR5Uctx93_RuiS}$0-k%*dy<;-vtyWKPzX5N z!4$*u0tW0tnP|>+vm#{0)+4l=8=#onI`=kUx{goO*si?pOZu50)1fw?^70=-H*c~E zYw+7HPQPstnD)Kh@@%d#t{T7DBgUk8emhD%N|iibNuMLie93%uX=ar+kQkY(U}AX% z0SD^--tMOo)0@%laTeNyYT$vROw~*FWmwanCYJ`9HQ0&OzF0G#H_L2ej)Du z%c*H{A^jb_$d3KdO2@YQ#Mr~0ws8G{EwK@6oXg~h-io=W=17O_0PXn|5i5AI5)XUo zfcS%B?g7^q!FcPno6{a;FVX(5=UVc4vw=8D$c}oim%=jP-%YXpJZssl_;=}`vw_4`$b(yJ&xQ?L0~Q(I{P4lnr3_4ufKR0p3-;Dv1T)sxN6k&i3%4H+ z&*ArQCMpp~2=7V|1%+ z5yLZdbpeiEc#9x!9qh;8}$f@h?Eo+A#Tq7O zf}&!h2MN;R@i13JQ}Lp(pjxT5E(BYHNkM)u&x?gDjk2DmCNWLT*gBmU{+D>tLiQ_R zxw*MDH8pUY1400)=wKR!qBB|T20BQ1kHMiR1C9y!3oT53pR=-DLFa`}Ckq~#=^=N) z&6o-y`A}FPGd&$B1O5%uQ`V*M^S~N|Ee5h=;N&Di0I$IJ%8it)tRL~VNVxcfE&&s9 zsfX))1rsredmonV>Rb&Z?e`2VvtqgkDxE-wQ>?c(xXor8D zITB@V?`tk^9@}_kyuIz>LywDs5aZJy51gt>sJKE)N_Kk3_SlnL+>x9pO2Ak=uZ?+8 zUZ{D(#dVU^c)8E-2u`>+VuH@UxEXKqZW&j`ykDEKZv&1bOwyKh9G^%@{~{Nn8hQaf zU!6=^ZzuzGiq6xSh>EQ;al zVJ6W^U_V=|sYtT?6}lS~ljIC43+>OOq{K{DwtDYfz{noYze&6Na0>4n2prMB%mr__ zi9zeTjBO<1;2U?yk#5z_C<2tp{5MO$0E@K{w2&l)@9jC!7m6WEFv*}*XrbA$JV`_S z#!8f?s95B-%Q-eGB3!JkrQ^NSTcr@?qiC)n4;lUkhXaZS8*78FCOWJBbUyW8xs5pLndgfi z8~jWpD@5xXzgeHO{1f?brMHKFQ+;C6t)%V~RNdEwP#kHY~td*E&FT+&X;aBZGRtQ;doy0CuEC{~j{ot3Tz zB4EM2g0Fj42YgSr{C+bI5w9BcVryb(nQn7wn3bk&Lp)XvRpwOnkDUu&+bw;@88_pt zxix;u36I}~f!B!2kBhIcBiRr9I<>1H5N+tj%c-XJ%A1U@MNhf(_NHyiAXv>CW0N~H z_?8N)L#?q>n6Su*wiMTG{ zN{|$LHq|OhzK&Ve$R(5NK2o>3`3DCP69Hqf!-mE`281ew7hXj~Ev$|(nlt5YyctkR z(>n74*J>Mt^}g;)N-Lz`L-@n_=d&S23v+j64XI&L0-sn=+}{$u#V14uQ~lUU1|;8( zfQMGux#kCqcw^p^d0;Rk{AVL=TNd-k)4kz-5zMPxv_%;Mjt&m><%ol>Fb&4H%3ux^ z{CcKQ{_&%Vlvu{H0{-4j)A7PQKEA=tA)O4Xtjz2S2+=SF+Q44*@>;nNYLZHJgUS30 zqk|Un7;t!GW#KI`u9-ci;HR3fE%On_Ul{p_w=4A#qlvW4sOC}b?T1!bqkPupXo zigOi*S$)Kks+{-U34KcSy#Tx8i_mJ2X1_F#>VlZzvk=Nu7pXt@lxRj?4s3tSdkHFx-NvP{f(Qv}3)SQNa|;tds!jdKVPtP-uRyo{C064 zkKa;{N{L$dT0iz2!ULO<{b#qTaxFGt+}E>oA1|1Duu;?^k1f+|FHdE+)P?ek_&-aNa`Zzt2aZ#P@EfLSFVns_i`C@4 z_sQJc{Qdey8xZmW8G@Q;ZOew(JZ2}s3Cl`F4!KB1r#3mJTd~n%p+Z+sP5!P)8-MY& z=xY;o{6z#N=8WC#9n2AY%kio^D|pBe-R8mm*Tq!9hq2ug9p^~iAMkqre(r|ys$m-4 zQWY{E^E`Ga&b;H!wu;I(X0zlS7E{R`^*T=?)MFy855f{FQ6ru`b2l0@w#e$V;II%A z?H%=L@)7JWX5CNzOQ+bbEAY)R_xCLm>>(>oM|_Os{QQbDr~@=l=cP=baD#0DJbHS$plZ zuIu{71xaja39tQm{*7T!j8J+nv&@|+^x(sUruKw;^>K@O@lGrpC-5ef?KUd6If56h zXRJVJKc5{wiuyr)HF?f`7A@jT$IrLspB2m-EVZ5zD&R}v!!ob0fCo`&%wzG<=u5?z zkg(!#sLYI>`Hj;5A0S)qT3mYW-?8;p-y12`YG{0MZY1BT3yP|*4jMaOdIhn4zQpa$ zZ?G}R#$Kve_|9>~cr}F?u`NlNG#w8zS&BLAPnr3E|t?N+ZL73fWjia0Gil+vis2a#_S8& zmAcHoIa^keS{Kl8d>Ve5T6Y_ZAijE^oh@A zou($BhYuhP>wFSCIoZKqqu~l#@j6e7Z89%edOh;0HFCWwnYVadxTNVHc;u5w4cu4f z%dD0Kb@NJN0i8`>ExL33-+8+oI59fcS=XtZjKNNyAWKC7Ab{cSjKYvEQ)>hs0AtfaR%`MynQouT`r1bdqyjYotbtn!5>)sk>!YZj5CL;XJ z=K1UFz=2)zPf^I1`F@CW~zaX6-qoDumR9nMjjeI)j8 zeRDr4;dPimL5_D*^tF6Rb;x<%Z8XAiWnBaqdAd(#bg$wYSi>|@e4B^kJ z1TVim=dFfm`ScZ^SG~BTEGc4u!X0dFUozeXyqBThzvK?!e`rhD1wN*H#x;3u4V@`mX(}?7W zPAb2(%x}E1a_CtI?)%V8fn0JgRruy(5+gUYJxBtpKu8}d_MHCob)XOR5yEuc(t4h2VYgGt zyY#;C8C;-$@XMGkyw7@|E@Qpuc&qZ z5*Ksnms%YmE5K}zv>tmV+q?Q6(A6vKw2?bR_1_AD!PX=J29G$$=Op1VdC0Qj| z_Lv}nPTOARaE|70S)Y&l55+(JZ>f8$?_B`6?pKBK@K}2)*J{HV*+vsbrjsejTEEl{ zfd_eC!7;jp`sfHV%@A+RY{Oc(Yx@>dA@jN5iaip#P0ta!v~!Rjqd4Q8}+k z#v7I;?XHX`5Xj%?q2}E8!g@AkO)~nYc@le#%b|2)cfNDpRrXH&0|sh;B;PwpILiR* zKQl@dg5_pN;sIEOh*ssZ4Dkweo1A;AoJdJ2)#>XrWu!Z$Y+T zI6M%~8UVRR26p;=9FVyfYd6N(Gp)(&XO*G246)?geQ7;^v=P9~(wb7AfFd14MNJ(PnX+!2$sqPQ*=#`b`6-8jNzc6pAN|uCJ{~{YO5h%W zd{Lw);Lv|kb@Xy|9gFFW@i#e*@3i-M??c!U^k335KQ7?-BUQ@a_gQnWKpXmluK877 z0h-_W4T=~*J7*-9nk7hnEVT8Y=U}L*)jBlG4PT@FD~5-ZusyF=N}^kTo1P$Rx(gsS z&S6e26ie()_cwn*Z2HU`0A4fK2~TXa_`@!&O7sO{qTc6Sx)veD-#iNks*8TQ&~bC0 zXsO>io1P(^o2egZXh+9hh*+NfYS+&WYm(3$pnYX_o=d z!%%B0Q!I<8qzy#W@M$Q^<3Mt6g-GP?JEeLFqTE}vo`5Ad^|9)Gg!e01P^9oKaVRZM zqS5$}SuvD$O?)Ggc&PJFNDOFus9Z=XWUvUgKKCz&`~`}6kXsh#LehFiazf%)iFbmh zPy8Amejtx#sBGKSSOZ$1VJI))<6)%dnC&=%DSnL zz_ew&!@w_v4AHhser7}?=%Q*9^G1YH1k>uqt!9)B@`YM@kiZc`HLR9}4AceNzsW>o zcHHfN%q=y&7Wv4dw|NS%#xAnxy?WTvL>8;gRVh1VH1#X{q&0HEmy?dLPQU}Z^L+yz zU{U2o^h>Z*czvtB`XZck+}ZZx*h#Cj70?=n2oFI_bvtG$(V0MyMD;irknDz$^WUsh z^k1U^^igw+6}}Cnzz$B=_vcbiW#F0_{|$WP0Kx_4d0&Ec)X}`lzad;8`vt~P)`BHe z0*;`)B00 zxFPYHZn3If$j&rpg5~&_Hc+XschcQ?3BK`6hv&y*e=QfAP&74lReVplE(vreZ4nSd zftr;R1gV-P*fHr@MXH+0yvD7ozeXrj7{0c@H_e6Nw6>`}QN0%mDy$G≺48P+Z(N z7@v1r@Ahp#tF}PcWGdyYO6jeh_1S_4z8t}>^f#BUgB?}Gxof;!t=K==& zbh`tHP3xkgBU=7weY!Yy{nAvI0Vp>-cGine_OEfyC*x+ON)*L!4VkWVn-d|w`Ydw>*7nO% zCDzbnL%9BDOkXclO!qfg!zmPc^M_cMzc6H zo><2(>r?Q*wg&3wTXd_$Nq%+IkDu8)jv^30(b}-7!;1nU71jBexW&&U@YkxNpS1Fo zml~39&cSqGJ2KtQ({an=8l_2)8(fBR{RP+DeB6@ze@-4!x@ADOHUL?Sue~?=>M%e* zZudvi(|k@3`1q6BO^&nr zmX!X0z0QWHNiK76V&z_#1jt+<~sP21%Evw#XBj&bs$&^;x zyzTw__XYb^3v+X^EGcz$bs@I)_UnUdAf*!*7jI0>HwRdSx<%M+;k*2N255IKPf&#- z`@ji%dKPnBFfXj@VT}|O!6l_5+oHp_kDm`Pucqt}Rw!{9S*i(=5_^`0@o5s{wn~oX zr22UADSXNPjFcV)1%(XiviDn@Dfy{i%e<>V%KOEWZ0?8q53MMHbu0=>5KGwE(#EY2 z$n)Wq-F?WtGaCnB(ctKKIa+xNeHj)EqC3PW0L?)SIDseL;OSiygMQqH_nI4T7Js

    d--DpHY@P(B^ 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 Lf>@Er`;Y$zq(gRA literal 0 HcmV?d00001 From 311c055bb2e3481a67f0daa084b0f40e871e33f7 Mon Sep 17 00:00:00 2001 From: Alexandre Beaulieu Date: Wed, 15 Apr 2020 14:35:43 -0400 Subject: [PATCH 18/20] chore: rebased MP4 conversion to support drawing orders --- .github/workflows/ci.yml | 6 +++++ Dockerfile | 9 +++++--- pyrdp/player/Mp4EventHandler.py | 33 +++++++++++++++++---------- pyrdp/player/PlayerEventHandler.py | 2 ++ pyrdp/player/RenderingEventHandler.py | 16 ++++++++----- requirements-slim.txt | 1 + requirements.txt | 1 + setup.py | 3 +++ 8 files changed, 50 insertions(+), 21 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a8a22eda9..490d430cc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -42,6 +42,9 @@ jobs: run: sudo apt install python3-setuptools - name: Install PyRDP dependencies run: sudo apt install libdbus-1-dev libdbus-glib-1-dev libgl1-mesa-glx git python3-dev + - name: Install wheel + working-directory: . + run: pip install wheel - name: Install PyRDP working-directory: . run: pip install -U -e .[full] @@ -87,6 +90,9 @@ jobs: run: python --version - name: Pip version run: pip --version + - name: Install wheel + working-directory: . + run: pip install wheel - name: Install PyRDP working-directory: . run: pip install -U -e .[full] diff --git a/Dockerfile b/Dockerfile index 570e76ba9..11199d614 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,8 +9,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ python3-venv \ # Required to build RLE module and dbus-python (GUI) build-essential python3-dev \ - libdbus-1-dev \ - libdbus-glib-1-dev + libdbus-1-dev libdbus-glib-1-dev RUN python3 -m venv /opt/venv # Make sure we use the virtualenv: @@ -18,7 +17,9 @@ ENV PATH="/opt/venv/bin:$PATH" # Install dependencies only (speeds repetitive builds) COPY requirements.txt /pyrdp/requirements.txt -RUN cd /pyrdp && pip3 --no-cache-dir install -r requirements.txt +RUN cd /pyrdp && \ + pip3 install wheel && \ + pip3 --no-cache-dir install -r requirements.txt # Compile only our C extension and install # This way changes to source tree will not trigger full images rebuilds @@ -41,6 +42,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends python3 \ # GUI and notifications stuff libgl1-mesa-glx \ notify-osd dbus-x11 libxkbcommon-x11-0 \ + # Runtime requirement by progressbar (required by pyrdp-convert) + python3-distutils \ && rm -rf /var/lib/apt/lists/* # Copy preinstalled dependencies from compile image diff --git a/pyrdp/player/Mp4EventHandler.py b/pyrdp/player/Mp4EventHandler.py index a51b0b59e..67d63dfd7 100644 --- a/pyrdp/player/Mp4EventHandler.py +++ b/pyrdp/player/Mp4EventHandler.py @@ -17,19 +17,30 @@ class Mp4Sink: + """A QRemoteDesktop Mock.""" def __init__(self): - self.screen: QImage = None + self._buffer: QImage = None + + @property + def screen(self): + return self._buffer def notifyImage(self, x: int, y: int, img: QImage, w: int, h: int): - p = QPainter(self.screen) + p = QPainter(self._buffer) p.drawImage(x, y, img, 0, 0, w, h) + def resize(self, w: int, h: int): + self._buffer = QImage(w, h, QImage.Format_ARGB32_Premultiplied) + + def width(self) -> int: + return self._buffer.width() + + def height(self) -> int: + return self._buffer.height() + def update(self): pass - def resize(self, w: int, h: int): - self.screen = QImage(w, h, QImage.Format_RGB888) - class Mp4EventHandler(RenderingEventHandler): @@ -75,14 +86,14 @@ def onPDUReceived(self, pdu: PlayerPDU): nframes = (dt // self.delta) if nframes > 0: for _ in range(nframes): - self._writeFrame(self.surface) + self._writeFrame(self.sink.screen) self.prevTimestamp = ts self.log.debug('Rendered %d still frame(s)', nframes) def cleanup(self): # Add one second worth of padding so that the video doesn't end too abruptly. for _ in range(self.fps): - self._writeFrame(self.surface) + self._writeFrame(self.sink.screen) self.log.info('Flushing to disk: %s', self.filename) for pkt in self.stream.encode(): @@ -90,7 +101,6 @@ def cleanup(self): self.progress() self.mp4.mux(pkt) self.log.info('Export completed.') - self.mp4.close() def onMousePosition(self, x, y): @@ -112,18 +122,17 @@ def onCapabilities(self, caps): self.stream.width = w self.stream.height = h - def onBeginRender(self): - pass + super().onCapabilities(caps) def onFinishRender(self): # When the screen is updated, always write a frame. self.prevTimestamp = self.timestamp - self._writeFrame(self.surface) + self._writeFrame(self.sink.screen) def _writeFrame(self, surface: QImage): w = self.stream.width h = self.stream.height - surface = self.sink.screen.scaled(w, h) if self.scale else self.sink.screen + surface = surface.scaled(w, h) if self.scale else surface frame = av.VideoFrame.from_image(ImageQt.fromqimage(surface)) # Draw the mouse pointer. diff --git a/pyrdp/player/PlayerEventHandler.py b/pyrdp/player/PlayerEventHandler.py index 38223d09a..5b128b0a9 100644 --- a/pyrdp/player/PlayerEventHandler.py +++ b/pyrdp/player/PlayerEventHandler.py @@ -46,6 +46,8 @@ def onCapabilities(self, caps): (w, h) = (bmp.desktopWidth, bmp.desktopHeight) self.viewer.resize(w, h) + super().onCapabilities(caps) + def onMousePosition(self, x: int, y: int): self.viewer.setMousePosition(x, y) diff --git a/pyrdp/player/RenderingEventHandler.py b/pyrdp/player/RenderingEventHandler.py index 281889913..7f070eec7 100644 --- a/pyrdp/player/RenderingEventHandler.py +++ b/pyrdp/player/RenderingEventHandler.py @@ -28,30 +28,34 @@ def __init__(self, sink): def onCapabilities(self, caps): if CapabilityType.CAPSTYPE_ORDER in caps: self.gdi = GdiQtFrontend(self.sink) - self.orders = OrdersParser(self.gdi) - self.orders.onCapabilities(caps) + self._orders = OrdersParser(self.gdi) + self._orders.onCapabilities(caps) # Generic Video Parsing Routines. def onFastPathOutput(self, event: FastPathOutputEvent): + self.onBeginRender() if isinstance(event, FastPathBitmapEvent): parsed = self._fastPath.parseBitmapEvent(event) - self.onBeginRender() for bmp in parsed.bitmapUpdateData: self.onBitmap(bmp) - self.onFinishRender() elif isinstance(event, FastPathOrdersEvent): - if self.orders is None: + if self._orders is None: self.log.error('Received Unexpected Drawing Orders!') return + self.onBeginRender() self._orders.parse(event) + self.onFinishRender() + def onSlowPathUpdate(self, pdu: UpdatePDU): if pdu.updateType == SlowPathUpdateType.SLOWPATH_UPDATETYPE_BITMAP: - updates = self._bitmap.parseBitmapUpdateData(pdu.updateData) self.onBeginRender() + + updates = self._bitmap.parseBitmapUpdateData(pdu.updateData) for bmp in updates: self.onBitmap(bmp) + self.onFinishRender() def onBitmap(self, bitmapData: BitmapUpdateData): diff --git a/requirements-slim.txt b/requirements-slim.txt index 6f3fb9a58..e2435a31a 100644 --- a/requirements-slim.txt +++ b/requirements-slim.txt @@ -8,6 +8,7 @@ hyperlink==19.0.0 idna==2.9 incremental==17.5.0 names==0.3.0 +progressbar2==3.51.3 pyasn1==0.4.8 pyasn1-modules==0.2.8 pycparser==2.20 diff --git a/requirements.txt b/requirements.txt index 8e3a91214..4e88cb76f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,6 +10,7 @@ idna==2.9 incremental==17.5.0 names==0.3.0 notify2==0.3.1 +progressbar2==3.51.3 pyasn1==0.4.8 pyasn1-modules==0.2.8 pycparser==2.20 diff --git a/setup.py b/setup.py index 47cb689f7..c17b79e4e 100755 --- a/setup.py +++ b/setup.py @@ -45,6 +45,9 @@ ], extras_require={ "full": [ + 'wheel>=0.34.2', + 'av>=8', + 'pillowcase>=2', 'PySide2>=5.12,<6', 'dbus-python>=1.2<1.3;platform_system!="Windows"', 'notify2>=0.3,<1;platform_system!="Windows"' From ae97faeeb8055fd58acb7aadf50cd514393034f0 Mon Sep 17 00:00:00 2001 From: Alexandre Beaulieu Date: Fri, 22 May 2020 10:31:59 -0400 Subject: [PATCH 19/20] chore: Code review changes --- README.md | 8 ++++++-- bin/pyrdp-convert.py | 10 ++++++++-- pyrdp/player/Mp4EventHandler.py | 3 +-- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f694b88eb..819b3b17f 100644 --- a/README.md +++ b/README.md @@ -438,13 +438,16 @@ Run `pyrdp-clonecert.py --help` for a full list of arguments. ### Using PyRDP Convert -`pyrdp-convert` is a helper script that performs several useful conversions: +`pyrdp-convert` is a helper script that performs several useful conversions. The script has the best chance of working +on traffic captured by PyRDP due to unsupported RDP protocol features that might be used in a non-intercepted +connection. + +The following conversions are supported: - Network Capture (PCAP) to PyRDP replay file - Network Capture to MP4 video file - Replay file to MP4 video file - The script supports both encrypted (TLS) network captures (by providing `--secrets ssl.log`) and decrypted PDU exports. ``` @@ -457,6 +460,7 @@ pyrdp-convert.py --src 10.2.0.198 --secrets ssl.log -o path/to/output -f mp4 cap # List the sessions in a network trace, along with the decryptable ones. pyrdp-convert.py --list capture.pcapng ``` + Note that MP4 conversion requires libavcodec and ffmpeg, so this may require extra steps on Windows. Manually decrypted network traces can be exported from Wireshark by selecting `File > Export PDUs` and selecting `OSI diff --git a/bin/pyrdp-convert.py b/bin/pyrdp-convert.py index 71b243959..4ebe59b04 100644 --- a/bin/pyrdp-convert.py +++ b/bin/pyrdp-convert.py @@ -255,8 +255,13 @@ def decrypted(stream: PacketList, master_secret: bytes) -> Decrypted: def getStreamInfo(s: PacketList) -> (str, str, float, bool): """Attempt to retrieve an (src, dst, ts, isPlaintext) tuple for a data stream.""" packet = s[0] + if IP in packet: - # FIXME: Technically the IP traffic could be plaintext too. + # This is a plaintext stream. + # + # FIXME: This relies on the fact that decrypted traces are using EXPORTED_PDU and + # thus have no `IP` layer, but it is technically possible to have a true + # plaintext capture with very old implementations of RDP. return (packet[IP].src, packet[IP].dst, packet.time, False) elif Ether not in packet: # No Ethernet layer, so assume exported PDUs. @@ -423,7 +428,8 @@ def run(self): parser.add_argument('-f', '--format', help='Format of the output', choices=['replay', 'mp4'], default='replay') parser.add_argument('--src', help='If specified, limits the converted streams to connections initiated from this address', action='append', default=[]) parser.add_argument('--dst', help='If specified, limits the converted streams to connections destined to this address', action='append', default=[]) - parser.add_argument('-o', '--output', help='Path to write the converted files to. If a file name is specified, it will be used as a prefix.') + parser.add_argument('-o', '--output', help='Path to write the converted files to. If a file name is specified, it will be used as a prefix,' + 'otherwise the result is output next to the source file with the proper extension.') args = parser.parse_args() logging.basicConfig(level=logging.CRITICAL) diff --git a/pyrdp/player/Mp4EventHandler.py b/pyrdp/player/Mp4EventHandler.py index 67d63dfd7..1302e077e 100644 --- a/pyrdp/player/Mp4EventHandler.py +++ b/pyrdp/player/Mp4EventHandler.py @@ -135,8 +135,7 @@ def _writeFrame(self, surface: QImage): surface = surface.scaled(w, h) if self.scale else surface frame = av.VideoFrame.from_image(ImageQt.fromqimage(surface)) - # Draw the mouse pointer. - # NOTE: We could render mouse clicks by changing the color of the brush. + # Draw the mouse pointer. Render mouse clicks? p = QPainter(surface) p.setBrush(QColor.fromRgb(255, 255, 0, 180)) (x, y) = self.mouse From 5e04012f42d489d3b1a34430040313d4e10fe73c Mon Sep 17 00:00:00 2001 From: Alexandre Beaulieu Date: Fri, 22 May 2020 10:50:09 -0400 Subject: [PATCH 20/20] fix: progressbar2 is not in setup.py --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index c17b79e4e..eef705387 100755 --- a/setup.py +++ b/setup.py @@ -34,6 +34,7 @@ 'appdirs>=1,<2', 'cryptography>=2.2,<3', 'names>=0,<1', + 'progressbar2>=3.20,<4', 'pyasn1>=0,<1', 'pycryptodome>=3.5,<4', 'pyopenssl>=19,<20',