From 85c968d766eed5d9bb7ec4e7d9fad00b288156b8 Mon Sep 17 00:00:00 2001 From: Lucille Delisle Date: Wed, 25 Sep 2024 17:34:43 +0200 Subject: [PATCH 01/36] update dependency versions --- tools/idr_download/idr_download_by_ids.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/idr_download/idr_download_by_ids.xml b/tools/idr_download/idr_download_by_ids.xml index 26af1ddf947..5e3395043dc 100644 --- a/tools/idr_download/idr_download_by_ids.xml +++ b/tools/idr_download/idr_download_by_ids.xml @@ -1,5 +1,5 @@ - + @@ -19,8 +19,8 @@ operation_3443 - omero-py - pylibtiff + omero-py + pylibtiff Date: Wed, 25 Sep 2024 17:36:17 +0200 Subject: [PATCH 02/36] enable download of the full image (hyperstack) --- tools/idr_download/idr_download_by_ids.py | 148 ++++++++++++++------- tools/idr_download/idr_download_by_ids.xml | 101 ++++++++++---- 2 files changed, 177 insertions(+), 72 deletions(-) diff --git a/tools/idr_download/idr_download_by_ids.py b/tools/idr_download/idr_download_by_ids.py index 6c2adddf345..a399cc699af 100644 --- a/tools/idr_download/idr_download_by_ids.py +++ b/tools/idr_download/idr_download_by_ids.py @@ -5,7 +5,10 @@ import tarfile from contextlib import ExitStack from tempfile import TemporaryDirectory +from itertools import product +import numpy +from tifffile import imwrite from libtiff import TIFF from omero.cli import cli_login from omero.gateway import BlitzGateway # noqa @@ -110,9 +113,27 @@ def get_image_array(image, tile, z, c, t): return selection +def get_full_image_array(image): + # The goal is to get the image in TZCYX order + pixels = image.getPrimaryPixels() + tzclist = list(product(range(image.getSizeT()), range(image.getSizeZ()), range(image.getSizeC()))) + zctlist = [(z, c, t) for (t, z, c) in tzclist] + try: + all_planes = numpy.array(list(pixels.getPlanes(zctlist))) + all_planes_reshaped = all_planes.reshape(image.getSizeT(), image.getSizeZ(), image.getSizeC(), all_planes.shape[-2], all_planes.shape[-1]) + except Exception as e: + warning = '{0} (ID: {1})'.format(image.getName(), + image.getId()) + warn('Could not download the requested region', warning) + warn(e.msg) + return + + return all_planes_reshaped + + def download_image_data( image_ids_or_dataset_id, dataset=False, - download_original=False, + download_original=False, download_full=False, channel=None, z_stack=0, frame=0, coord=(0, 0), width=0, height=0, region_spec='rectangle', skip_failed=False, download_tar=False, omero_host='idr.openmicroscopy.org', omero_secured=False, config_file=None @@ -131,7 +152,7 @@ def download_image_data( omero_username = 'public' omero_password = 'public' - if not download_original and region_spec not in ['rectangle', 'center']: + if not download_original and not download_full and region_spec not in ['rectangle', 'center']: raise ValueError( 'Got unknown value "{0}" as region_spec argument' .format(region_spec) @@ -226,16 +247,79 @@ def download_image_data( 'database. Aborting!' .format(image_warning_id) ) - if not download_original: + try: + # try to extract image name + # if anything goes wrong here skip the image + # or abort. + image_name = os.path.splitext(image.getName())[0] + image_warning_id = '{0} (ID: {1})'.format( + image_name, image_id + ) + except Exception as e: + # respect skip_failed on unexpected errors + if skip_failed: + warn(str(e), image_warning_id, warn_skip=True) + continue + else: + raise + if download_full: + fname = '__'.join([image_name.replace(' ', '_'), str(image_id), "full"]) + '.tiff' + # download and save the region as TIFF + try: + im_array = get_full_image_array(image) + + if download_tar: + fname = os.path.join(tempdir, fname) + + imwrite(fname, im_array, imagej=True) + # move image into tarball + if download_tar: + archive.add(fname, os.path.basename(fname)) + os.remove(fname) + except Exception as e: + if skip_failed: + # respect skip_failed on unexpected errors + warn(str(e), image_warning_id, warn_skip=True) + continue + else: + raise + + elif download_original: + try: + # try to extract image properties + # if anything goes wrong here skip the image + # or abort. + original_image_name = image.getFileset().listFiles()[0].getName() + fname = image_name + "__" + str(image_id) + os.path.splitext(original_image_name)[1] + fname = fname.replace(' ', '_') + fname = fname.replace('/', '_') + download_directory = "./" + if download_tar: + download_directory = tempdir + with cli_login("-u", omero_username, "-s", omero_host, "-w", omero_password) as cli: + cli.invoke(["download", f"Image:{image_id}", download_directory]) + if cli.rv != 0: + raise Exception("Download failed.") + # This will download to download_directory/original_image_name + os.rename(os.path.join(download_directory, original_image_name), + os.path.join(download_directory, fname)) + # move image into tarball + if download_tar: + archive.add(os.path.join(download_directory, fname), + os.path.basename(fname)) + os.remove(os.path.join(download_directory, fname)) + except Exception as e: + # respect skip_failed on unexpected errors + if skip_failed: + warn(str(e), image_warning_id, warn_skip=True) + continue + else: + raise + else: try: # try to extract image properties # if anything goes wrong here skip the image # or abort. - image_name = os.path.splitext(image.getName())[0] - image_warning_id = '{0} (ID: {1})'.format( - image_name, image_id - ) - if region_spec == 'rectangle': tile = get_clipping_region(image, *coord, width, height) elif region_spec == 'center': @@ -314,16 +398,13 @@ def download_image_data( .format(channel, image_warning_id) ) - # download and save the region as TIFF fname = '__'.join( [image_name, str(image_id)] + [str(x) for x in tile] ) + fname += '.tiff' + fname = fname.replace(' ', '_') + # download and save the region as TIFF try: - if fname[-5:] != '.tiff': - fname += '.tiff' - - fname = fname.replace(' ', '_') - im_array = get_image_array(image, tile, z_stack, channel_index, frame) if download_tar: @@ -344,41 +425,6 @@ def download_image_data( continue else: raise - else: - try: - # try to extract image properties - # if anything goes wrong here skip the image - # or abort. - image_name = os.path.splitext(image.getName())[0] - image_warning_id = '{0} (ID: {1})'.format( - image_name, image_id - ) - original_image_name = image.getFileset().listFiles()[0].getName() - fname = image_name + "__" + str(image_id) + os.path.splitext(original_image_name)[1] - fname = fname.replace(' ', '_') - fname = fname.replace('/', '_') - download_directory = "./" - if download_tar: - download_directory = tempdir - with cli_login("-u", omero_username, "-s", omero_host, "-w", omero_password) as cli: - cli.invoke(["download", f"Image:{image_id}", download_directory]) - if cli.rv != 0: - raise Exception("Download failed.") - # This will download to download_directory/original_image_name - os.rename(os.path.join(download_directory, original_image_name), - os.path.join(download_directory, fname)) - # move image into tarball - if download_tar: - archive.add(os.path.join(download_directory, fname), - os.path.basename(fname)) - os.remove(os.path.join(download_directory, fname)) - except Exception as e: - # respect skip_failed on unexpected errors - if skip_failed: - warn(str(e), image_warning_id, warn_skip=True) - continue - else: - raise def _center_to_ul(center_x, center_y, width, height): @@ -409,6 +455,10 @@ def _center_to_ul(center_x, center_y, width, height): '--download-original', dest='download_original', action='store_true', help="download the original file uploaded to omero" ) + p.add_argument( + '--download-full', dest='download_full', action='store_true', + help="download the full image on omero" + ) p.add_argument( '-c', '--channel', help='name of the channel to retrieve data for ' diff --git a/tools/idr_download/idr_download_by_ids.xml b/tools/idr_download/idr_download_by_ids.xml index 5e3395043dc..f42af81814b 100644 --- a/tools/idr_download/idr_download_by_ids.xml +++ b/tools/idr_download/idr_download_by_ids.xml @@ -21,6 +21,7 @@ omero-py pylibtiff + tifffile - + + + - + @@ -202,10 +207,10 @@ - + - + @@ -225,10 +230,10 @@ - + - + @@ -248,10 +253,10 @@ - + - + @@ -270,7 +275,11 @@ - + + + + + @@ -299,7 +308,7 @@ - + @@ -321,7 +330,11 @@ - + + + + + @@ -333,7 +346,7 @@ - + @@ -354,17 +367,25 @@ - + - + + + + + - + + + + + - + @@ -387,7 +408,7 @@ - + @@ -415,7 +436,7 @@ - + @@ -426,27 +447,43 @@ - + + + + + - + + + + + - + + + + + - + + + + + - + @@ -462,6 +499,24 @@ + + + + + + + + + + + + + + + + + + Date: Wed, 25 Sep 2024 17:36:47 +0200 Subject: [PATCH 03/36] run isort --- tools/idr_download/idr_download_by_ids.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/idr_download/idr_download_by_ids.py b/tools/idr_download/idr_download_by_ids.py index a399cc699af..f630b1feb29 100644 --- a/tools/idr_download/idr_download_by_ids.py +++ b/tools/idr_download/idr_download_by_ids.py @@ -4,15 +4,15 @@ import sys import tarfile from contextlib import ExitStack -from tempfile import TemporaryDirectory from itertools import product -import numpy +from tempfile import TemporaryDirectory -from tifffile import imwrite +import numpy from libtiff import TIFF from omero.cli import cli_login -from omero.gateway import BlitzGateway # noqa from omero.constants.namespaces import NSBULKANNOTATIONS # noqa +from omero.gateway import BlitzGateway # noqa +from tifffile import imwrite def warn(message, image_identifier, warn_skip=False): From 62767452d5453019198cdf1d466765fbe3411d20 Mon Sep 17 00:00:00 2001 From: Lucille Delisle Date: Wed, 25 Sep 2024 17:36:59 +0200 Subject: [PATCH 04/36] run black --- tools/idr_download/idr_download_by_ids.py | 344 ++++++++++++---------- 1 file changed, 181 insertions(+), 163 deletions(-) diff --git a/tools/idr_download/idr_download_by_ids.py b/tools/idr_download/idr_download_by_ids.py index f630b1feb29..62e599f9373 100644 --- a/tools/idr_download/idr_download_by_ids.py +++ b/tools/idr_download/idr_download_by_ids.py @@ -18,20 +18,15 @@ def warn(message, image_identifier, warn_skip=False): message = message.rstrip() if warn_skip: - if message[-1] in ['.', '!', '?']: - skip_msg = ' Skipping download!' + if message[-1] in [".", "!", "?"]: + skip_msg = " Skipping download!" else: - skip_msg = '. Skipping download!' + skip_msg = ". Skipping download!" else: - skip_msg = '' + skip_msg = "" print( - 'ImageSpecWarning for {0}: {1}{2}' - .format( - image_identifier, - message, - skip_msg - ), - file=sys.stderr + "ImageSpecWarning for {0}: {1}{2}".format(image_identifier, message, skip_msg), + file=sys.stderr, ) @@ -47,7 +42,7 @@ def find_channel_index(image, channel_name): if p[0] == "Channels": channels = p[1].replace(" ", "").split(";") for n, c in enumerate(channels): - for value in c.split(':'): + for value in c.split(":"): if channel_name == value.lower(): return n return -1 @@ -61,16 +56,16 @@ def get_clipping_region(image, x, y, w, h): # It may be better to abort in this situation. if x < 0 or y < 0: raise ValueError( - 'Too small upper left coordinate ({0}, {1}) for clipping region.' - .format(x, y) + "Too small upper left coordinate ({0}, {1}) for clipping region.".format( + x, y + ) ) size_x = image.getSizeX() size_y = image.getSizeY() if x >= size_x or y >= size_y: raise ValueError( - 'Upper left coordinate ({0}, {1}) of clipping region lies ' - 'outside of image.' - .format(x, y) + "Upper left coordinate ({0}, {1}) of clipping region lies " + "outside of image.".format(x, y) ) # adjust width and height to the image dimensions if w <= 0 or x + w > size_x: @@ -105,9 +100,8 @@ def get_image_array(image, tile, z, c, t): try: selection = pixels.getTile(theZ=z, theT=t, theC=c, tile=tile) except Exception: - warning = '{0} (ID: {1})'.format(image.getName(), - image.getId()) - warn('Could not download the requested region', warning) + warning = "{0} (ID: {1})".format(image.getName(), image.getId()) + warn("Could not download the requested region", warning) return return selection @@ -116,15 +110,24 @@ def get_image_array(image, tile, z, c, t): def get_full_image_array(image): # The goal is to get the image in TZCYX order pixels = image.getPrimaryPixels() - tzclist = list(product(range(image.getSizeT()), range(image.getSizeZ()), range(image.getSizeC()))) + tzclist = list( + product( + range(image.getSizeT()), range(image.getSizeZ()), range(image.getSizeC()) + ) + ) zctlist = [(z, c, t) for (t, z, c) in tzclist] try: all_planes = numpy.array(list(pixels.getPlanes(zctlist))) - all_planes_reshaped = all_planes.reshape(image.getSizeT(), image.getSizeZ(), image.getSizeC(), all_planes.shape[-2], all_planes.shape[-1]) + all_planes_reshaped = all_planes.reshape( + image.getSizeT(), + image.getSizeZ(), + image.getSizeC(), + all_planes.shape[-2], + all_planes.shape[-1], + ) except Exception as e: - warning = '{0} (ID: {1})'.format(image.getName(), - image.getId()) - warn('Could not download the requested region', warning) + warning = "{0} (ID: {1})".format(image.getName(), image.getId()) + warn("Could not download the requested region", warning) warn(e.msg) return @@ -132,51 +135,59 @@ def get_full_image_array(image): def download_image_data( - image_ids_or_dataset_id, dataset=False, - download_original=False, download_full=False, - channel=None, z_stack=0, frame=0, - coord=(0, 0), width=0, height=0, region_spec='rectangle', - skip_failed=False, download_tar=False, omero_host='idr.openmicroscopy.org', omero_secured=False, config_file=None + image_ids_or_dataset_id, + dataset=False, + download_original=False, + download_full=False, + channel=None, + z_stack=0, + frame=0, + coord=(0, 0), + width=0, + height=0, + region_spec="rectangle", + skip_failed=False, + download_tar=False, + omero_host="idr.openmicroscopy.org", + omero_secured=False, + config_file=None, ): if config_file is None: # IDR connection - omero_username = 'public' - omero_password = 'public' + omero_username = "public" + omero_password = "public" else: # other omero instance with open(config_file) as f: cfg = json.load(f) - omero_username = cfg['username'] - omero_password = cfg['password'] + omero_username = cfg["username"] + omero_password = cfg["password"] if omero_username == "" or omero_password == "": - omero_username = 'public' - omero_password = 'public' - - if not download_original and not download_full and region_spec not in ['rectangle', 'center']: + omero_username = "public" + omero_password = "public" + + if ( + not download_original + and not download_full + and region_spec not in ["rectangle", "center"] + ): raise ValueError( - 'Got unknown value "{0}" as region_spec argument' - .format(region_spec) + 'Got unknown value "{0}" as region_spec argument'.format(region_spec) ) with ExitStack() as exit_stack: conn = exit_stack.enter_context( BlitzGateway( - omero_username, omero_password, - host=omero_host, - secure=omero_secured + omero_username, omero_password, host=omero_host, secure=omero_secured ) ) # exit_stack.callback(conn.connect().close) if download_tar: # create an archive file to write images to - archive = exit_stack.enter_context( - tarfile.open('images.tar', mode='w') - ) - tempdir = exit_stack.enter_context( - TemporaryDirectory() - ) + archive = exit_stack.enter_context(tarfile.open("images.tar", mode="w")) + tempdir = exit_stack.enter_context(TemporaryDirectory()) if dataset: - dataset_warning_id = 'Dataset-ID: {0}'.format(image_ids_or_dataset_id[0]) + dataset_warning_id = "Dataset-ID: {0}".format(image_ids_or_dataset_id[0]) try: dataset_id = int(image_ids_or_dataset_id[0]) except ValueError: @@ -196,28 +207,26 @@ def download_image_data( if image_ids is None: if skip_failed: warn( - 'Unable to find a dataset with this ID in the ' - 'database.', + "Unable to find a dataset with this ID in the " "database.", dataset_warning_id, - warn_skip=True + warn_skip=True, ) else: raise ValueError( - '{0}: Unable to find a dataset with this ID in the ' - 'database. Aborting!' - .format(dataset_warning_id) + "{0}: Unable to find a dataset with this ID in the " + "database. Aborting!".format(dataset_warning_id) ) else: # basic argument sanity checks and adjustments - prefix = 'image-' + prefix = "image-" # normalize image ids by stripping off prefix if it exists image_ids = [ - iid[len(prefix):] if iid[:len(prefix)] == prefix else iid + iid[len(prefix) :] if iid[: len(prefix)] == prefix else iid for iid in image_ids_or_dataset_id ] for image_id in image_ids: - image_warning_id = 'Image-ID: {0}'.format(image_id) + image_warning_id = "Image-ID: {0}".format(image_id) try: image_id = int(image_id) except ValueError: @@ -236,25 +245,21 @@ def download_image_data( if image is None: if skip_failed: warn( - 'Unable to find an image with this ID in the ' - 'database.', + "Unable to find an image with this ID in the " "database.", image_warning_id, - warn_skip=True + warn_skip=True, ) continue raise ValueError( - '{0}: Unable to find an image with this ID in the ' - 'database. Aborting!' - .format(image_warning_id) + "{0}: Unable to find an image with this ID in the " + "database. Aborting!".format(image_warning_id) ) try: # try to extract image name # if anything goes wrong here skip the image # or abort. image_name = os.path.splitext(image.getName())[0] - image_warning_id = '{0} (ID: {1})'.format( - image_name, image_id - ) + image_warning_id = "{0} (ID: {1})".format(image_name, image_id) except Exception as e: # respect skip_failed on unexpected errors if skip_failed: @@ -263,7 +268,10 @@ def download_image_data( else: raise if download_full: - fname = '__'.join([image_name.replace(' ', '_'), str(image_id), "full"]) + '.tiff' + fname = ( + "__".join([image_name.replace(" ", "_"), str(image_id), "full"]) + + ".tiff" + ) # download and save the region as TIFF try: im_array = get_full_image_array(image) @@ -290,23 +298,36 @@ def download_image_data( # if anything goes wrong here skip the image # or abort. original_image_name = image.getFileset().listFiles()[0].getName() - fname = image_name + "__" + str(image_id) + os.path.splitext(original_image_name)[1] - fname = fname.replace(' ', '_') - fname = fname.replace('/', '_') + fname = ( + image_name + + "__" + + str(image_id) + + os.path.splitext(original_image_name)[1] + ) + fname = fname.replace(" ", "_") + fname = fname.replace("/", "_") download_directory = "./" if download_tar: download_directory = tempdir - with cli_login("-u", omero_username, "-s", omero_host, "-w", omero_password) as cli: - cli.invoke(["download", f"Image:{image_id}", download_directory]) + with cli_login( + "-u", omero_username, "-s", omero_host, "-w", omero_password + ) as cli: + cli.invoke( + ["download", f"Image:{image_id}", download_directory] + ) if cli.rv != 0: raise Exception("Download failed.") # This will download to download_directory/original_image_name - os.rename(os.path.join(download_directory, original_image_name), - os.path.join(download_directory, fname)) + os.rename( + os.path.join(download_directory, original_image_name), + os.path.join(download_directory, fname), + ) # move image into tarball if download_tar: - archive.add(os.path.join(download_directory, fname), - os.path.basename(fname)) + archive.add( + os.path.join(download_directory, fname), + os.path.basename(fname), + ) os.remove(os.path.join(download_directory, fname)) except Exception as e: # respect skip_failed on unexpected errors @@ -320,12 +341,11 @@ def download_image_data( # try to extract image properties # if anything goes wrong here skip the image # or abort. - if region_spec == 'rectangle': + if region_spec == "rectangle": tile = get_clipping_region(image, *coord, width, height) - elif region_spec == 'center': + elif region_spec == "center": tile = get_clipping_region( - image, - *_center_to_ul(*coord, width, height) + image, *_center_to_ul(*coord, width, height) ) ori_z, z_stack = z_stack, confine_plane(image, z_stack) @@ -348,69 +368,66 @@ def download_image_data( # The downloaded image region will have smaller dimensions # than the specified width x height. warn( - 'Downloaded image dimensions ({0} x {1}) will be smaller ' - 'than the specified width and height ({2} x {3}).' - .format(tile[2], tile[3], width, height), - image_warning_id + "Downloaded image dimensions ({0} x {1}) will be smaller " + "than the specified width and height ({2} x {3}).".format( + tile[2], tile[3], width, height + ), + image_warning_id, ) # z-stack sanity checks and warnings if z_stack != ori_z: warn( - 'Specified image plane ({0}) is out of bounds. Using {1} ' - 'instead.' - .format(ori_z, z_stack), - image_warning_id + "Specified image plane ({0}) is out of bounds. Using {1} " + "instead.".format(ori_z, z_stack), + image_warning_id, ) # frame sanity checks and warnings if frame != ori_frame: warn( - 'Specified image frame ({0}) is out of bounds. Using ' - 'frame {1} instead.' - .format(ori_frame, frame), - image_warning_id + "Specified image frame ({0}) is out of bounds. Using " + "frame {1} instead.".format(ori_frame, frame), + image_warning_id, ) # channel index sanity checks and warnings if channel is None: if num_channels > 1: warn( - 'No specific channel selected for multi-channel ' - 'image. Using first of {0} channels.' - .format(num_channels), - image_warning_id + "No specific channel selected for multi-channel " + "image. Using first of {0} channels.".format(num_channels), + image_warning_id, ) else: if channel_index == -1 or channel_index >= num_channels: if skip_failed: warn( str(channel) - + ' is not a known channel name for this image.', + + " is not a known channel name for this image.", image_warning_id, - warn_skip=True + warn_skip=True, ) continue else: raise ValueError( '"{0}" is not a known channel name for image {1}. ' - 'Aborting!' - .format(channel, image_warning_id) + "Aborting!".format(channel, image_warning_id) ) - fname = '__'.join( - [image_name, str(image_id)] + [str(x) for x in tile] - ) - fname += '.tiff' - fname = fname.replace(' ', '_') + fname = "__".join([image_name, str(image_id)] + [str(x) for x in tile]) + fname += ".tiff" + fname = fname.replace(" ", "_") # download and save the region as TIFF try: - im_array = get_image_array(image, tile, z_stack, channel_index, frame) + im_array = get_image_array( + image, tile, z_stack, channel_index, frame + ) if download_tar: fname = os.path.join(tempdir, fname) try: - tiff = TIFF.open(fname, mode='w') + tiff = TIFF.open(fname, mode="w") tiff.write_image(im_array) finally: tiff.close() @@ -446,81 +463,82 @@ def _center_to_ul(center_x, center_y, width, height): if __name__ == "__main__": p = argparse.ArgumentParser() p.add_argument( - 'image_ids_or_dataset_id', nargs='*', default=[], - help='one or more IDR image ids or a single dataset id' - 'for which to retrieve data (default: ' - 'read ids from stdin).' + "image_ids_or_dataset_id", + nargs="*", + default=[], + help="one or more IDR image ids or a single dataset id" + "for which to retrieve data (default: " + "read ids from stdin).", ) p.add_argument( - '--download-original', dest='download_original', action='store_true', - help="download the original file uploaded to omero" + "--download-original", + dest="download_original", + action="store_true", + help="download the original file uploaded to omero", ) p.add_argument( - '--download-full', dest='download_full', action='store_true', - help="download the full image on omero" + "--download-full", + dest="download_full", + action="store_true", + help="download the full image on omero", ) p.add_argument( - '-c', '--channel', - help='name of the channel to retrieve data for ' - '(note: the first channel of each image will be downloaded if ' - 'left unspecified)' + "-c", + "--channel", + help="name of the channel to retrieve data for " + "(note: the first channel of each image will be downloaded if " + "left unspecified)", ) region = p.add_mutually_exclusive_group() region.add_argument( - '--rectangle', nargs=4, type=int, default=argparse.SUPPRESS, - help='specify a clipping region for the image as x y width height, ' - 'where x and y give the upper left coordinate of the rectangle ' - 'to clip to. Set width and height to 0 to extend the rectangle ' - 'to the actual size of the image.' + "--rectangle", + nargs=4, + type=int, + default=argparse.SUPPRESS, + help="specify a clipping region for the image as x y width height, " + "where x and y give the upper left coordinate of the rectangle " + "to clip to. Set width and height to 0 to extend the rectangle " + "to the actual size of the image.", ) region.add_argument( - '--center', nargs=4, type=int, default=argparse.SUPPRESS, - help='specify a clipping region for the image as x y width height, ' - 'where x and y define the center of a width x height rectangle. ' - 'Set either width or height to 0 to extend the region to the ' - 'actual size of the image along the x- or y-axis.\n' - 'Note: Even values for width and height will be rounded down to ' - 'the nearest odd number.' - ) - p.add_argument( - '-f', '--frame', type=int, default=0 - ) - p.add_argument( - '-z', '--z-stack', type=int, default=0 - ) - p.add_argument( - '--skip-failed', action='store_true' - ) - p.add_argument( - '--download-tar', action='store_true' - ) - p.add_argument( - '-oh', '--omero-host', type=str, default="idr.openmicroscopy.org" - ) - p.add_argument( - '--omero-secured', action='store_true', default=True - ) - p.add_argument( - '-cf', '--config-file', dest='config_file', default=None - ) - p.add_argument( - '--dataset', action='store_true' + "--center", + nargs=4, + type=int, + default=argparse.SUPPRESS, + help="specify a clipping region for the image as x y width height, " + "where x and y define the center of a width x height rectangle. " + "Set either width or height to 0 to extend the region to the " + "actual size of the image along the x- or y-axis.\n" + "Note: Even values for width and height will be rounded down to " + "the nearest odd number.", ) + p.add_argument("-f", "--frame", type=int, default=0) + p.add_argument("-z", "--z-stack", type=int, default=0) + p.add_argument("--skip-failed", action="store_true") + p.add_argument("--download-tar", action="store_true") + p.add_argument("-oh", "--omero-host", type=str, default="idr.openmicroscopy.org") + p.add_argument("--omero-secured", action="store_true", default=True) + p.add_argument("-cf", "--config-file", dest="config_file", default=None) + p.add_argument("--dataset", action="store_true") args = p.parse_args() if not args.image_ids_or_dataset_id: args.image_ids_or_dataset_id = sys.stdin.read().split() if args.dataset and len(args.image_ids_or_dataset_id) > 1: warn("Multiple dataset ids provided. Only the first one will be used.") - if 'center' in args: + if "center" in args: args.coord, args.width, args.height = ( - args.center[:2], args.center[2], args.center[3] + args.center[:2], + args.center[2], + args.center[3], ) - args.region_spec = 'center' + args.region_spec = "center" del args.center - elif 'rectangle' in args: + elif "rectangle" in args: args.coord, args.width, args.height = ( - args.rectangle[:2], args.rectangle[2], args.rectangle[3] + args.rectangle[:2], + args.rectangle[2], + args.rectangle[3], ) - args.region_spec = 'rectangle' + args.region_spec = "rectangle" del args.rectangle download_image_data(**vars(args)) From b7862310784a2088945d84a3df9942355e4beebc Mon Sep 17 00:00:00 2001 From: Lucille Delisle Date: Wed, 25 Sep 2024 17:37:29 +0200 Subject: [PATCH 05/36] check flake8 --- tools/idr_download/idr_download_by_ids.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/idr_download/idr_download_by_ids.py b/tools/idr_download/idr_download_by_ids.py index 62e599f9373..787e9faaab3 100644 --- a/tools/idr_download/idr_download_by_ids.py +++ b/tools/idr_download/idr_download_by_ids.py @@ -222,7 +222,7 @@ def download_image_data( prefix = "image-" # normalize image ids by stripping off prefix if it exists image_ids = [ - iid[len(prefix) :] if iid[: len(prefix)] == prefix else iid + iid[len(prefix):] if iid[:len(prefix)] == prefix else iid for iid in image_ids_or_dataset_id ] for image_id in image_ids: From fe2d7396b32572f248d42606bb0caf44088befe3 Mon Sep 17 00:00:00 2001 From: Lucille Delisle Date: Thu, 26 Sep 2024 09:44:40 +0200 Subject: [PATCH 06/36] Apply suggestions from @kostrykin Co-authored-by: Leonid Kostrykin --- tools/idr_download/idr_download_by_ids.py | 4 +--- tools/idr_download/idr_download_by_ids.xml | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/tools/idr_download/idr_download_by_ids.py b/tools/idr_download/idr_download_by_ids.py index 787e9faaab3..d1a60fed189 100644 --- a/tools/idr_download/idr_download_by_ids.py +++ b/tools/idr_download/idr_download_by_ids.py @@ -180,7 +180,6 @@ def download_image_data( omero_username, omero_password, host=omero_host, secure=omero_secured ) ) - # exit_stack.callback(conn.connect().close) if download_tar: # create an archive file to write images to archive = exit_stack.enter_context(tarfile.open("images.tar", mode="w")) @@ -245,7 +244,7 @@ def download_image_data( if image is None: if skip_failed: warn( - "Unable to find an image with this ID in the " "database.", + "Unable to find an image with this ID in the database.", image_warning_id, warn_skip=True, ) @@ -291,7 +290,6 @@ def download_image_data( continue else: raise - elif download_original: try: # try to extract image properties diff --git a/tools/idr_download/idr_download_by_ids.xml b/tools/idr_download/idr_download_by_ids.xml index f42af81814b..a56d4f9684d 100644 --- a/tools/idr_download/idr_download_by_ids.xml +++ b/tools/idr_download/idr_download_by_ids.xml @@ -138,7 +138,7 @@ - + From b6f985894293b503ea4a2139f886ba79b20787c1 Mon Sep 17 00:00:00 2001 From: Lucille Delisle Date: Thu, 26 Sep 2024 09:46:23 +0200 Subject: [PATCH 07/36] remove noqa --- tools/idr_download/idr_download_by_ids.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/idr_download/idr_download_by_ids.py b/tools/idr_download/idr_download_by_ids.py index d1a60fed189..d4d0004b16a 100644 --- a/tools/idr_download/idr_download_by_ids.py +++ b/tools/idr_download/idr_download_by_ids.py @@ -10,8 +10,8 @@ import numpy from libtiff import TIFF from omero.cli import cli_login -from omero.constants.namespaces import NSBULKANNOTATIONS # noqa -from omero.gateway import BlitzGateway # noqa +from omero.constants.namespaces import NSBULKANNOTATIONS +from omero.gateway import BlitzGateway from tifffile import imwrite From cdebf2a93f4d6441d4aecc5227da1eb44979f670 Mon Sep 17 00:00:00 2001 From: Matthias Bernt Date: Thu, 26 Sep 2024 10:15:26 +0200 Subject: [PATCH 08/36] poretools remore --- tools/poretools/poretools_events.xml | 1 - tools/poretools/poretools_extract.xml | 1 - tools/poretools/poretools_hist.xml | 1 - tools/poretools/poretools_nucdist.xml | 1 - tools/poretools/poretools_occupancy.xml | 1 - tools/poretools/poretools_qualdist.xml | 1 - tools/poretools/poretools_squiggle.xml | 1 - tools/poretools/poretools_stats.xml | 1 - tools/poretools/poretools_tabular.xml | 1 - tools/poretools/poretools_times.xml | 1 - tools/poretools/poretools_winner.xml | 1 - tools/poretools/poretools_yield_plot.xml | 1 - 12 files changed, 12 deletions(-) diff --git a/tools/poretools/poretools_events.xml b/tools/poretools/poretools_events.xml index 2d74cf3e343..50ad5aab59c 100644 --- a/tools/poretools/poretools_events.xml +++ b/tools/poretools/poretools_events.xml @@ -1,4 +1,3 @@ - from a set of sequencing reads diff --git a/tools/poretools/poretools_extract.xml b/tools/poretools/poretools_extract.xml index 72fc97f6f7e..d3eefa4425d 100644 --- a/tools/poretools/poretools_extract.xml +++ b/tools/poretools/poretools_extract.xml @@ -1,4 +1,3 @@ - in FASTA or FASTQ format from nanopore files diff --git a/tools/poretools/poretools_hist.xml b/tools/poretools/poretools_hist.xml index 93ff3c9b7d5..49c37aafa72 100644 --- a/tools/poretools/poretools_hist.xml +++ b/tools/poretools/poretools_hist.xml @@ -1,4 +1,3 @@ - of nanopore read lengths diff --git a/tools/poretools/poretools_nucdist.xml b/tools/poretools/poretools_nucdist.xml index 391afe1abe5..662e5450733 100644 --- a/tools/poretools/poretools_nucdist.xml +++ b/tools/poretools/poretools_nucdist.xml @@ -1,4 +1,3 @@ - distribution in nanopore sequencing reads diff --git a/tools/poretools/poretools_occupancy.xml b/tools/poretools/poretools_occupancy.xml index 66fdd505b03..70300d62e2f 100644 --- a/tools/poretools/poretools_occupancy.xml +++ b/tools/poretools/poretools_occupancy.xml @@ -1,4 +1,3 @@ - per cell in nanopore reads diff --git a/tools/poretools/poretools_qualdist.xml b/tools/poretools/poretools_qualdist.xml index 5a9ae6f7f6c..eac45475aab 100644 --- a/tools/poretools/poretools_qualdist.xml +++ b/tools/poretools/poretools_qualdist.xml @@ -1,4 +1,3 @@ - score distribution in nanopore sequencing reads diff --git a/tools/poretools/poretools_squiggle.xml b/tools/poretools/poretools_squiggle.xml index 466b90be6fe..dd16e052860 100644 --- a/tools/poretools/poretools_squiggle.xml +++ b/tools/poretools/poretools_squiggle.xml @@ -1,4 +1,3 @@ - for nanopore reads diff --git a/tools/poretools/poretools_stats.xml b/tools/poretools/poretools_stats.xml index 551ae7acab8..c0e2606ac80 100644 --- a/tools/poretools/poretools_stats.xml +++ b/tools/poretools/poretools_stats.xml @@ -1,4 +1,3 @@ - from a set of FAST5 files diff --git a/tools/poretools/poretools_tabular.xml b/tools/poretools/poretools_tabular.xml index d7668b2fac6..03aea0d1b8b 100644 --- a/tools/poretools/poretools_tabular.xml +++ b/tools/poretools/poretools_tabular.xml @@ -1,4 +1,3 @@ - in tabular format from a set of FAST5 files diff --git a/tools/poretools/poretools_times.xml b/tools/poretools/poretools_times.xml index f4dde2424d4..6ca041cbb0b 100644 --- a/tools/poretools/poretools_times.xml +++ b/tools/poretools/poretools_times.xml @@ -1,4 +1,3 @@ - and channel information from a set of FAST5 files diff --git a/tools/poretools/poretools_winner.xml b/tools/poretools/poretools_winner.xml index 3b84342b238..db027c1881f 100644 --- a/tools/poretools/poretools_winner.xml +++ b/tools/poretools/poretools_winner.xml @@ -1,4 +1,3 @@ - from a set of FAST5 files. diff --git a/tools/poretools/poretools_yield_plot.xml b/tools/poretools/poretools_yield_plot.xml index 85a6e6ce47f..258a6ca5bf5 100644 --- a/tools/poretools/poretools_yield_plot.xml +++ b/tools/poretools/poretools_yield_plot.xml @@ -1,4 +1,3 @@ - of sequencing yield over time From fd0ed2a9d685ad4024cfa707bd4a34fc1545682d Mon Sep 17 00:00:00 2001 From: Matthias Bernt Date: Thu, 26 Sep 2024 10:18:01 +0200 Subject: [PATCH 09/36] remove redundant options --- tools/poretools/.lint_skip | 2 -- tools/poretools/poretools_qualpos.xml | 6 +----- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/tools/poretools/.lint_skip b/tools/poretools/.lint_skip index 37306aaf5f8..033921a8a35 100644 --- a/tools/poretools/.lint_skip +++ b/tools/poretools/.lint_skip @@ -1,7 +1,5 @@ InputsNameDuplicate InputsNameRedundantArgument -InputsSelectOptionDuplicateText -InputsSelectOptionDuplicateValue TestsParamInInputs ToolVersionPEP404 XMLOrder diff --git a/tools/poretools/poretools_qualpos.xml b/tools/poretools/poretools_qualpos.xml index da4197542d2..28f955ae79a 100644 --- a/tools/poretools/poretools_qualpos.xml +++ b/tools/poretools/poretools_qualpos.xml @@ -1,4 +1,3 @@ - plot of quality score distribution over positions in nanopore reads @@ -14,10 +13,7 @@ poretools qualpos '$input' --saveas qualpos.$extension --min-length $min_length - - - - + From ee4f66c602b458badbbd84e1fb11ea385f847da9 Mon Sep 17 00:00:00 2001 From: Lucille Delisle Date: Thu, 26 Sep 2024 10:22:52 +0200 Subject: [PATCH 10/36] add docstrings to all functions --- tools/idr_download/idr_download_by_ids.py | 119 ++++++++++++++++++++++ 1 file changed, 119 insertions(+) diff --git a/tools/idr_download/idr_download_by_ids.py b/tools/idr_download/idr_download_by_ids.py index d4d0004b16a..84017a2f183 100644 --- a/tools/idr_download/idr_download_by_ids.py +++ b/tools/idr_download/idr_download_by_ids.py @@ -16,6 +16,15 @@ def warn(message, image_identifier, warn_skip=False): + """Print an error message to stderr and + - prefix with the image identifier + - suffix with 'Skipping download!' if warn_skip is True + + Args: + message (string): Message to print to stderr + image_identifier (string): Image identifier + warn_skip (bool, optional): Whether 'skipping download' should be suffix to the message. Defaults to False. + """ message = message.rstrip() if warn_skip: if message[-1] in [".", "!", "?"]: @@ -31,6 +40,15 @@ def warn(message, image_identifier, warn_skip=False): def find_channel_index(image, channel_name): + """Identify the channel index from the image and the channel name + + Args: + image (omero.gateway._ImageWrapper): image wrapper on which the channel should be identified + channel_name (string): name of the channel to look for + + Returns: + int: Index of the channel or -1 if was not found. + """ channel_name = channel_name.lower() for n, channel in enumerate(image.getChannelLabels()): if channel_name == channel.lower(): @@ -49,6 +67,22 @@ def find_channel_index(image, channel_name): def get_clipping_region(image, x, y, w, h): + """Check x,y and adjust w,h to image size to be able to crop the image with these coordinates + + Args: + image (omero.gateway._ImageWrapper): image wrapper on which region want to be cropped + x (int): left x coordinate + y (int): top y coordinate + w (int): width + h (int): height + + Raises: + ValueError: if the x or y coordinates are negative. + ValueError: if the x or y coordinates are larger than the width or height of the image. + + Returns: + list of int: new x, y, width, height adjusted to the image + """ # If the (x, y) coordinate falls outside the image boundaries, we # cannot just shift it because that would render the meaning of # w and h undefined (should width and height be decreased or the whole @@ -76,6 +110,15 @@ def get_clipping_region(image, x, y, w, h): def confine_plane(image, z): + """Adjust/Confine z to be among the possible z for the image + + Args: + image (omero.gateway._ImageWrapper): image wrapper for which the z is adjusted + z (int): plane index that need to be confined + + Returns: + int: confined z + """ if z < 0: z = 0 else: @@ -86,6 +129,15 @@ def confine_plane(image, z): def confine_frame(image, t): + """Adjust/Confine t to be among the possible t for the image + + Args: + image (omero.gateway._ImageWrapper): image wrapper for which the t is adjusted + t (int): frame index that need to be confined + + Returns: + int: confined t + """ if t < 0: t = 0 else: @@ -96,6 +148,18 @@ def confine_frame(image, t): def get_image_array(image, tile, z, c, t): + """Get a 2D numpy array from an image wrapper for a given tile, z, c, t + + Args: + image (omero.gateway._ImageWrapper): image wrapper from which values are taken + tile (list of int): [x, y, width, height] where x,y is the top left coordinate of the region to crop + z (int): plane index + c (int): channel index + t (int): frame index + + Returns: + numpy array of 2 dimensions: image values of the selected area + """ pixels = image.getPrimaryPixels() try: selection = pixels.getTile(theZ=z, theT=t, theC=c, tile=tile) @@ -108,13 +172,24 @@ def get_image_array(image, tile, z, c, t): def get_full_image_array(image): + """Get a 5D numpy array with all values from an image wrapper + + Args: + image (omero.gateway._ImageWrapper): image wrapper from which values are taken + + Returns: + numpy array of 5 dimensions: image values in the TZCYX order + """ # The goal is to get the image in TZCYX order pixels = image.getPrimaryPixels() + # Get the final tzclist in the order that will make the numpy reshape work tzclist = list( product( range(image.getSizeT()), range(image.getSizeZ()), range(image.getSizeC()) ) ) + # As getPlanes requires the indices in the zct order + # We keep the final order but switch indices zctlist = [(z, c, t) for (t, z, c) in tzclist] try: all_planes = numpy.array(list(pixels.getPlanes(zctlist))) @@ -152,6 +227,39 @@ def download_image_data( omero_secured=False, config_file=None, ): + """Download the image data of + either a list of image ids or all images from a dataset. + The image data can be: + - a 2D cropped region or + - a hyperstack written in a tiff file + - the original image uploaded in omero + Optionally, th final file can be in a tar + + Args: + image_ids_or_dataset_id (list of string): Can be either a list with a single id (int) of a dataset or a list with images ids (int) or images ids prefixed by 'image-' + dataset (bool, optional): Whether the image_ids_or_dataset_id is a dataset id and all images from this dataset should be retrieved (true) or image_ids_or_dataset_id are individual image ids (false). Defaults to False. + download_original (bool, optional): Whether the original file uploded to omero should be downloaded. Defaults to False. + download_full (bool, optional): Whether the full image (hyperstack) on omero should be written to TIFF. Defaults to False. + channel (string, optional): Channel name. Defaults to None. + z_stack (int, optional): Z stack (plane) index. Defaults to 0. + frame (int, optional): T frame index. Defaults to 0. + coord (tuple of int, optional): Coordinates of the top left or center of the region to crop. Defaults to (0, 0). + width (int, optional): Width of the region to crop. Defaults to 0. + height (int, optional): Height of the region to crop. Defaults to 0. + region_spec (str, optional): How the region is specified ('rectangle' = coord is top left or 'center' = the region is center). Defaults to "rectangle". + skip_failed (bool, optional): Do not stop the downloads if one fails. Defaults to False. + download_tar (bool, optional): Put all downloaded images into a tar file. Defaults to False. + omero_host (str, optional): omero host url. Defaults to "idr.openmicroscopy.org". + omero_secured (bool, optional): Whether the omero connects with secure connection. Defaults to False. + config_file (string, optional): File path with config file with credentials to connect to OMERO. Defaults to None. + + Raises: + ValueError: If the region_spec is not 'rectangle' nor 'center' and a cropped region is wanted. + ValueError: If there is no dataset with this number in OMERO + ValueError: If there is no image with this number in OMERO + Exception: If the command to download the original image fails + ValueError: If the channel name could not be identified + """ if config_file is None: # IDR connection omero_username = "public" @@ -443,6 +551,17 @@ def download_image_data( def _center_to_ul(center_x, center_y, width, height): + """Convert the center coordinates, width, height to upper left coordinates, width, height + + Args: + center_x (int): x coordinate of center + center_y (int): y coordinate of center + width (int): width + height (int): height + + Returns: + list of 4 int: x, y, width, height where x,y are the upper left coordinates + """ if width > 0: ext_x = (width - 1) // 2 ul_x = max([center_x - ext_x, 0]) From 8c871221141cf1aa277f278be63f5f9345a56503 Mon Sep 17 00:00:00 2001 From: Matthias Bernt Date: Thu, 26 Sep 2024 10:25:41 +0200 Subject: [PATCH 11/36] fix redundant argument name and one redundant parameter --- tools/poretools/.lint_skip | 2 -- tools/poretools/macros.xml | 8 ++++---- tools/poretools/poretools_hist.xml | 2 +- tools/poretools/poretools_occupancy.xml | 2 +- tools/poretools/poretools_qualpos.xml | 3 +-- tools/poretools/poretools_squiggle.xml | 2 +- tools/poretools/poretools_yield_plot.xml | 2 +- 7 files changed, 9 insertions(+), 12 deletions(-) diff --git a/tools/poretools/.lint_skip b/tools/poretools/.lint_skip index 033921a8a35..82f678123db 100644 --- a/tools/poretools/.lint_skip +++ b/tools/poretools/.lint_skip @@ -1,5 +1,3 @@ -InputsNameDuplicate -InputsNameRedundantArgument TestsParamInInputs ToolVersionPEP404 XMLOrder diff --git a/tools/poretools/macros.xml b/tools/poretools/macros.xml index 5efbdd0212d..3d901ebc11c 100644 --- a/tools/poretools/macros.xml +++ b/tools/poretools/macros.xml @@ -24,7 +24,7 @@ - + @@ -36,7 +36,7 @@ - + @@ -49,8 +49,8 @@ - - + + 18.09 diff --git a/tools/poretools/poretools_hist.xml b/tools/poretools/poretools_hist.xml index 49c37aafa72..d5bde96ac84 100644 --- a/tools/poretools/poretools_hist.xml +++ b/tools/poretools/poretools_hist.xml @@ -15,7 +15,7 @@ poretools hist '$input' --saveas histogram.$extension --min-length $min_length - - + diff --git a/tools/poretools/poretools_occupancy.xml b/tools/poretools/poretools_occupancy.xml index 70300d62e2f..c8d3461a2bf 100644 --- a/tools/poretools/poretools_occupancy.xml +++ b/tools/poretools/poretools_occupancy.xml @@ -23,7 +23,7 @@ mv occupancy.$extension '$output' - + diff --git a/tools/poretools/poretools_qualpos.xml b/tools/poretools/poretools_qualpos.xml index 28f955ae79a..05d555dfec8 100644 --- a/tools/poretools/poretools_qualpos.xml +++ b/tools/poretools/poretools_qualpos.xml @@ -14,9 +14,8 @@ poretools qualpos '$input' --saveas qualpos.$extension --min-length $min_length - - + diff --git a/tools/poretools/poretools_squiggle.xml b/tools/poretools/poretools_squiggle.xml index dd16e052860..d23cd5a0008 100644 --- a/tools/poretools/poretools_squiggle.xml +++ b/tools/poretools/poretools_squiggle.xml @@ -14,7 +14,7 @@ poretools squiggle '$input' --saveas $extension --num-facets $num_facets $theme_ - + diff --git a/tools/poretools/poretools_yield_plot.xml b/tools/poretools/poretools_yield_plot.xml index 258a6ca5bf5..e2dbb66f5e2 100644 --- a/tools/poretools/poretools_yield_plot.xml +++ b/tools/poretools/poretools_yield_plot.xml @@ -18,7 +18,7 @@ poretools yield_plot '$input' --saveas plot.$extension --plot-type $plot_type - + From 5d732aba34d47d0664d8e64b90cf4fdf8c4f2c2d Mon Sep 17 00:00:00 2001 From: Matthias Bernt Date: Thu, 26 Sep 2024 10:28:28 +0200 Subject: [PATCH 12/36] fix XMLOrder --- tools/poretools/.lint_skip | 1 - tools/poretools/poretools_events.xml | 2 +- tools/poretools/poretools_extract.xml | 2 +- tools/poretools/poretools_hist.xml | 2 +- tools/poretools/poretools_nucdist.xml | 2 +- tools/poretools/poretools_occupancy.xml | 2 +- tools/poretools/poretools_qualdist.xml | 2 +- tools/poretools/poretools_qualpos.xml | 2 +- tools/poretools/poretools_squiggle.xml | 2 +- tools/poretools/poretools_stats.xml | 2 +- tools/poretools/poretools_tabular.xml | 2 +- tools/poretools/poretools_times.xml | 2 +- tools/poretools/poretools_winner.xml | 2 +- tools/poretools/poretools_yield_plot.xml | 2 +- 14 files changed, 13 insertions(+), 14 deletions(-) diff --git a/tools/poretools/.lint_skip b/tools/poretools/.lint_skip index 82f678123db..3c8f09ef4e9 100644 --- a/tools/poretools/.lint_skip +++ b/tools/poretools/.lint_skip @@ -1,3 +1,2 @@ TestsParamInInputs ToolVersionPEP404 -XMLOrder diff --git a/tools/poretools/poretools_events.xml b/tools/poretools/poretools_events.xml index 50ad5aab59c..0cd5969bf24 100644 --- a/tools/poretools/poretools_events.xml +++ b/tools/poretools/poretools_events.xml @@ -1,9 +1,9 @@ from a set of sequencing reads - macros.xml + in FASTA or FASTQ format from nanopore files - macros.xml + of nanopore read lengths - macros.xml + distribution in nanopore sequencing reads - macros.xml + per cell in nanopore reads - macros.xml + score distribution in nanopore sequencing reads - macros.xml + plot of quality score distribution over positions in nanopore reads - macros.xml + for nanopore reads - macros.xml + from a set of FAST5 files - macros.xml + in tabular format from a set of FAST5 files - macros.xml + and channel information from a set of FAST5 files - macros.xml + from a set of FAST5 files. - macros.xml + of sequencing yield over time - macros.xml + Date: Thu, 26 Sep 2024 10:48:55 +0200 Subject: [PATCH 13/36] clarify the mutually exclusion of rectangle/center/download_full/download_original and the fact that channel/frame/z_stack are ignored if download_full or download_orignal is used. --- tools/idr_download/idr_download_by_ids.py | 73 ++++++++++++++--------- 1 file changed, 44 insertions(+), 29 deletions(-) diff --git a/tools/idr_download/idr_download_by_ids.py b/tools/idr_download/idr_download_by_ids.py index 84017a2f183..bde548ac799 100644 --- a/tools/idr_download/idr_download_by_ids.py +++ b/tools/idr_download/idr_download_by_ids.py @@ -238,15 +238,15 @@ def download_image_data( Args: image_ids_or_dataset_id (list of string): Can be either a list with a single id (int) of a dataset or a list with images ids (int) or images ids prefixed by 'image-' dataset (bool, optional): Whether the image_ids_or_dataset_id is a dataset id and all images from this dataset should be retrieved (true) or image_ids_or_dataset_id are individual image ids (false). Defaults to False. - download_original (bool, optional): Whether the original file uploded to omero should be downloaded. Defaults to False. + download_original (bool, optional): Whether the original file uploded to omero should be downloaded (ignored if `download_full` is set to True). Defaults to False. download_full (bool, optional): Whether the full image (hyperstack) on omero should be written to TIFF. Defaults to False. - channel (string, optional): Channel name. Defaults to None. - z_stack (int, optional): Z stack (plane) index. Defaults to 0. - frame (int, optional): T frame index. Defaults to 0. - coord (tuple of int, optional): Coordinates of the top left or center of the region to crop. Defaults to (0, 0). - width (int, optional): Width of the region to crop. Defaults to 0. - height (int, optional): Height of the region to crop. Defaults to 0. - region_spec (str, optional): How the region is specified ('rectangle' = coord is top left or 'center' = the region is center). Defaults to "rectangle". + channel (string, optional): Channel name (ignored if `download_full` or `download_original` is set to True). Defaults to None. + z_stack (int, optional): Z stack (plane) index (ignored if `download_full` or `download_original` is set to True). Defaults to 0. + frame (int, optional): T frame index (ignored if `download_full` or `download_original` is set to True). Defaults to 0. + coord (tuple of int, optional): Coordinates of the top left or center of the region to crop (ignored if `download_full` or `download_original` is set to True). Defaults to (0, 0). + width (int, optional): Width of the region to crop (ignored if `download_full` or `download_original` is set to True). Defaults to 0. + height (int, optional): Height of the region to crop (ignored if `download_full` or `download_original` is set to True). Defaults to 0. + region_spec (str, optional): How the region is specified ('rectangle' = coord is top left or 'center' = the region is center, ignored if `download_full` or `download_original` is set to True). Defaults to "rectangle". skip_failed (bool, optional): Do not stop the downloads if one fails. Defaults to False. download_tar (bool, optional): Put all downloaded images into a tar file. Defaults to False. omero_host (str, optional): omero host url. Defaults to "idr.openmicroscopy.org". @@ -587,25 +587,6 @@ def _center_to_ul(center_x, center_y, width, height): "for which to retrieve data (default: " "read ids from stdin).", ) - p.add_argument( - "--download-original", - dest="download_original", - action="store_true", - help="download the original file uploaded to omero", - ) - p.add_argument( - "--download-full", - dest="download_full", - action="store_true", - help="download the full image on omero", - ) - p.add_argument( - "-c", - "--channel", - help="name of the channel to retrieve data for " - "(note: the first channel of each image will be downloaded if " - "left unspecified)", - ) region = p.add_mutually_exclusive_group() region.add_argument( "--rectangle", @@ -629,8 +610,42 @@ def _center_to_ul(center_x, center_y, width, height): "Note: Even values for width and height will be rounded down to " "the nearest odd number.", ) - p.add_argument("-f", "--frame", type=int, default=0) - p.add_argument("-z", "--z-stack", type=int, default=0) + region.add_argument( + "--download-original", + dest="download_original", + action="store_true", + help="download the original file uploaded to omero", + ) + region.add_argument( + "--download-full", + dest="download_full", + action="store_true", + help="download the full image on omero", + ) + p.add_argument( + "-c", + "--channel", + help="name of the channel to retrieve data for " + "(note: the first channel of each image will be downloaded if " + "left unspecified), ignored with `--download-original` and " + "`--download-full`", + ) + p.add_argument( + "-f", + "--frame", + type=int, + default=0, + help="index of the frame to retrive data for (first frame is 0)," + " ignored with `--download-original` and `--download-full`", + ) + p.add_argument( + "-z", + "--z-stack", + type=int, + default=0, + help="index of the slice to retrive data for (first slice is 0)," + " ignored with `--download-original` and `--download-full`", + ) p.add_argument("--skip-failed", action="store_true") p.add_argument("--download-tar", action="store_true") p.add_argument("-oh", "--omero-host", type=str, default="idr.openmicroscopy.org") From c463311a8056f1adeb6599a4a44d4236981096fc Mon Sep 17 00:00:00 2001 From: Lucille Delisle Date: Thu, 26 Sep 2024 10:51:46 +0200 Subject: [PATCH 14/36] remove libtiff dependency --- tools/idr_download/idr_download_by_ids.py | 7 +------ tools/idr_download/idr_download_by_ids.xml | 1 - 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/tools/idr_download/idr_download_by_ids.py b/tools/idr_download/idr_download_by_ids.py index bde548ac799..bd7d42e6264 100644 --- a/tools/idr_download/idr_download_by_ids.py +++ b/tools/idr_download/idr_download_by_ids.py @@ -8,7 +8,6 @@ from tempfile import TemporaryDirectory import numpy -from libtiff import TIFF from omero.cli import cli_login from omero.constants.namespaces import NSBULKANNOTATIONS from omero.gateway import BlitzGateway @@ -532,11 +531,7 @@ def download_image_data( if download_tar: fname = os.path.join(tempdir, fname) - try: - tiff = TIFF.open(fname, mode="w") - tiff.write_image(im_array) - finally: - tiff.close() + imwrite(fname, im_array) # move image into tarball if download_tar: archive.add(fname, os.path.basename(fname)) diff --git a/tools/idr_download/idr_download_by_ids.xml b/tools/idr_download/idr_download_by_ids.xml index a56d4f9684d..31fe96c3514 100644 --- a/tools/idr_download/idr_download_by_ids.xml +++ b/tools/idr_download/idr_download_by_ids.xml @@ -20,7 +20,6 @@ omero-py - pylibtiff tifffile Date: Thu, 26 Sep 2024 13:06:16 +0200 Subject: [PATCH 15/36] fix wrong test parameters --- tools/poretools/.lint_skip | 1 - tools/poretools/poretools_tabular.xml | 15 ++++------- tools/poretools/poretools_times.xml | 26 ------------------- tools/poretools/poretools_winner.xml | 8 +++--- .../test-data/poretools-tabular-out1.tabular | 8 ------ .../test-data/poretools-tabular-out2.tabular | 8 ------ .../test-data/poretools-tabular-out3.tabular | 8 ------ .../test-data/poretools-tabular-out4.tabular | 8 ------ .../test-data/poretools-times-out2.tabular | 5 ---- .../test-data/poretools-times-out3.tabular | 5 ---- .../test-data/poretools-times-out4.tabular | 5 ---- .../test-data/poretools-times-out5.tabular | 5 ---- .../test-data/poretools-winner-out1.tabular | 4 +-- .../test-data/poretools-winner-out2.tabular | 4 +-- 14 files changed, 13 insertions(+), 97 deletions(-) delete mode 100644 tools/poretools/test-data/poretools-times-out2.tabular delete mode 100644 tools/poretools/test-data/poretools-times-out3.tabular delete mode 100644 tools/poretools/test-data/poretools-times-out4.tabular delete mode 100644 tools/poretools/test-data/poretools-times-out5.tabular diff --git a/tools/poretools/.lint_skip b/tools/poretools/.lint_skip index 3c8f09ef4e9..d710671f533 100644 --- a/tools/poretools/.lint_skip +++ b/tools/poretools/.lint_skip @@ -1,2 +1 @@ -TestsParamInInputs ToolVersionPEP404 diff --git a/tools/poretools/poretools_tabular.xml b/tools/poretools/poretools_tabular.xml index d92dd37c808..912147fecf7 100644 --- a/tools/poretools/poretools_tabular.xml +++ b/tools/poretools/poretools_tabular.xml @@ -20,32 +20,27 @@ - - + - - + - - + - - + - - + diff --git a/tools/poretools/poretools_times.xml b/tools/poretools/poretools_times.xml index 44e84146653..7522d695467 100644 --- a/tools/poretools/poretools_times.xml +++ b/tools/poretools/poretools_times.xml @@ -19,34 +19,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - Collect read size statistics from a set of FAST5 files. diff --git a/tools/poretools/poretools_winner.xml b/tools/poretools/poretools_winner.xml index 63ad4e6cdfa..c27ba4c95bd 100644 --- a/tools/poretools/poretools_winner.xml +++ b/tools/poretools/poretools_winner.xml @@ -20,22 +20,22 @@ - + - + - + - + diff --git a/tools/poretools/test-data/poretools-tabular-out1.tabular b/tools/poretools/test-data/poretools-tabular-out1.tabular index 2690807f14b..75b3169e3f0 100644 --- a/tools/poretools/test-data/poretools-tabular-out1.tabular +++ b/tools/poretools/test-data/poretools-tabular-out1.tabular @@ -1,13 +1,5 @@ length name sequence quals -202 @b7b29e94-0894-415c-87c4-a809bc8e8bdb_Basecall_2D_2d CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read95_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read95_strand.fast5 GAAATTGCTGGTTGCTCCCCGAGGGGCCTATAAACAATCGGATAAGGGTCTAAGTCAGGGCGAAAAAGATTTGGGGGCTCCTAATCTCCGATAATGAGTGCCGCAACATACGGATAGTACCTTTATGCGTAACCGCTCCATACGACAAATAATTATTTATATACGGTACCTACGGAACCAAAATTGACAAGTTCGTACTTTT )))))+*,,*,*--,-,..---./0..++++-/-//**)*)))*,,.///---**)))*))+/,//-.,00.--)***+*+))),)*)))+).*----.--**..,-,**,**,+++++,+*+*)**+,,,**((+,,+,))()**+,++,+**+--,)(((((()(((((()(())))+,//),+--.+(())(((()((( -159 @b7b29e94-0894-415c-87c4-a809bc8e8bdb_Basecall_2D_complement CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read95_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read95_strand.fast5 ATCGACCATATTGGCTTTTTGGTTATCCTGGTCTACCTCTTGTTGTCTTGGTGGGTGCCAACAGCTATGCATCTGTTGCATCAATCGTGACGGGAAACGAGAGGACAATTTCCCGGGTTAAACATGCCGATTGTCAGCCGCGGGGGCTGGGGAGGTTCC ""$"#$$&%$(&$"#$,<0-+(-'%(#$%$&(&%$$$%'-,(0'$)%(&$"'"#"'"$#$"&#&$##&%$%'%&'00,&'%#$##$$&"####%$'#%(''$$"$"($/=,)''#$$'%%'$'$)$%&$%()''%%"%&%%%(*#(%"$&&(&##&)&$ 212 @b7b29e94-0894-415c-87c4-a809bc8e8bdb_Basecall_2D_template CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read95_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read95_strand.fast5 CTTCTGTTGTGGTGCTCTTGCTCCCCAGGGGCCTATAAACGTGCACATAGGGTCTAAGTCAGCGAAAAAGATTTGAGGCTCCCGTATAGATAATGGATCCCCTCAGCCCTAGCTGACCGTCATCCGTAACGCCTCCATACATAAATAATTATTTAGCTCTAGTACACCCAGGCGGATCGCTTCTGGTTTTATATTTCTTGATTACTGATGCA "#')-,;42;7<8544/22.**)-(*()*(')%%&''-*0..+)%%$"'%'*/'%%&$&$%&##$%%(%)%/4)&#&'#$#$#$*#$"#&$$#'&$#*$%&##(&"*%)%&$&&&**(&(%%(%%),-%&%')*/,,(((%$%'$##","#,2''#$$('('*()(+)''&*)%$'(%#&%4.01-17;2&&$'12'')"%)&#$#"$)&'# -413 @935c5941-a78e-4959-923e-f71157063e92_Basecall_2D_2d CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read430_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read430_strand.fast5 GCTTCTTCTGCTTATATTGCTTAGAAGGAAATACGAGAGGAGAAAGAGTAGATGATGATAAAGGGTCGACTAATTATTTCCGAAGTTTGTTAAAGTCGAAATCGCTTCGAATTTGAAATTGTTGCTGACGCAAGTTAGCGATGCGCGATCCCAGGAGTATAGGGGTTGAAAACGGTTCCATTTGATAAGGTTTTCCATTAATGACGTCACGTTGTTTGGTATTTCCTTCTATTTTCTCCGAAGCGCCCCTCTCTCTCTCATCTCACGTCAGATTCAATTTTATTACAACAAATGTGAAAAGTGGGTTCGCAGAGGTCGCTTAAGCCATTTTCTTAGATACAGCTTGAAAACGAATCTACAGAACAAATCTCCTGCCATTACACTCAGAGTCATGACGGTCGTGTTTATAGAGT ))****-+.,,,++,,-,...-*++/,0.1,++,,..-0/)+-/,----,+,,,-,--,-+****+**+**+-.-.0500-.0-,,+*,.,,,,+-*+./.++,.////10+/,/03/10/.0..-*--./0001.--.++../////0--,./0//****.//..--).0-,-*,,+*)10,+-+++,,./+,+++*)+-++++**)))*))*)+*+,*,.0,.+,****,--)))*)()+(*))))))))**,,,,*))((*))**))(*++(+*-,-,())))**+-0-*****./,)****-0/..,-,,.--,-+,****-./680/--*)+000/.//-,/03/..0--.*,++*+*)**)*)*++++.//0/,++**+))*+++*)))**++-,-,3520...**) -376 @935c5941-a78e-4959-923e-f71157063e92_Basecall_2D_complement CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read430_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read430_strand.fast5 ACTCTAACTCAGGCTGGTATCTGAGTGTAATGGCGCAGTTGTCTGTAGGGTCGTTCAAGCTGTATCAAGAAATGAGTAAGCGAAAACCTGCGAGCCGATTTTCGCTTTGTTTAGTAAGGTTAGTGACGTGAGGGTGAGAGAGAGAGAGAGCGTTCGGAGAAAATAGAAGGAGAACCCAAACAACGTGACGTCATTGATGAAAACCTTATCGGGAACCCGTTTCAACCCCTATACTCCTCGGCGCGTAGGCTAACTGCGTAGCAACATTCAATTCAGCAGTTTTCCTGTCAGCGACTTCGGAAGCTTAGTCAACAGTGTTTATCAGCTCCTCTTCCTCTCGTATTTCGTTCAAGCAATATAGCAGAGGCGCCTGTCC "$###$$$#%#$"###$'###$"&'.)*(*+,-)$%$&/&$1(*),&&%%('$1)%##%%))+((%#$+&*%&&%$%%'(*,--+()$+-+),#*'%')4:*'$$*:,')'#%#%$&%$+++$*%$'&&)&&&&')'+*-,+*'&*$)%'&&'')'*)+,--'&&'$)(2&$)%%&(&&$&%#%%)$%&&((*(+$')(&(%##'+,+,)'((%%$%(*02*')&))+'"%$%%&'$#&%$$(#$&$%%##'&&,*))*((&%#(%*,(*(**$'()%#*=?/-&*)*(##&%'&+,(+*,)%'&*+*+('%($#'#*2+('%$$$&&%#$(+(('''(')'+30,$)*'((*('&&%#$$%%&%''$'$%&&1/$ 373 @935c5941-a78e-4959-923e-f71157063e92_Basecall_2D_template CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read430_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read430_strand.fast5 CATTCTTTGGTGCTGATCCTGCGAGGAGAGGGGGAGGGGAACAATGGTAGCCACTAAATCTATAACAATTATTTCAGAAGTTGTCCGCTTGAATCATTCATTTGAAATTGTTAGTGACGCAAGTTAATGCGCGATCCCAGGAGCGGGCTCGTCCAGTTTACAATTGTCCATGCGTAGTCAGTTGTTATGTTGATTCCTGTTACCGATAGGGTATATAACGCTCCTAGTCGATTCGATTTGCTTGGCGCCATCCAAGTATTCCAGAGTCCTTAGCATTTTCTTAATGGCACGTGAAAACGAATCCCCTAAGAGCCACTTATCACGTCCGATTACATACTCCAGTCATGACGCTTCTGTTTATGTTTCTTAACCA ##''$%)0%%)$&''',&'(&&$-+*-'('*+(('$$&#'#$%$%##$$#%$$#"$%$'$##$%"%#%)&$,5+($),,*0(&,####&)()(**)+)&$&,$&%1,3-*.''#'#$'('/*)+&&&+$&'%()*((%%)$&$#####"$%3%)')5/($$##&*$0%&()#$%%$$&'%(+%&-)%&%,-##((%$%&)*%&&#%""####"#"$$##""#('#$''$$&)0(&(.//$$&&###%&&+%('&%##%+)&&'%$#&%#%$#"(%/FA/+,(&'##$&%%#(&%*1)*()'())*("#$$(%%(&%*%$$$"$#($%##+$$%$####%$'&((&&$$%$)'1.+*:7,))',7&%)#$#$$# -523 @e643ceef-570f-4ba7-bdae-e9e78da71703_Basecall_2D_2d CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read1377_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read1377_strand.fast5 ATGTTTCTTCAGTGATACCTGTGACATCCGGAAAGGAGGAGGAGGATCAGAAAGGAGGAGTGTGACATAACGCTGACAGTGCGTGCTTAGGTTCGTTAATAAACAAAGCCATATTACGGAGATGGCGTAATCACCTACGATGAAAGTGGTCACGTACGCGTGCCACCTGGGCATCGTCCTCACCCCTTCATTAAATTACAGGCTTTTGACTCCTTCAACCTTCTCGTTGTAATTGGTTAGTACTTATCCTATCTTATTCGCGATCGGCGTTCGATTGGATTTCGCTTCGAATGTAATCCGTATGCGCAATACAAATATTTGAGCTAATTTCCTCTCTTTACGTAATCGTTTTCGTCACCGTCGTCAATTATCGATACGGGAATCAAGTCGAACGAACCCCTGACCGAGAATCAGAAAAACTTTCAGAAGAAAAAGGAAGAAGAGAAAGCTCTTTCACATTGTAAACCAAACGCGAAAGCTCCCGAAAACAAAGGGCGGCGATTCTAAACATTTGGTTTATGTT (((*-,+,,,++*()(())*-)),....+/-,.),-++--./-,))*()))+*+*)*-*,**)())((*)(*()(*--+**)()()*(())))*,--*,+,.,---+)+))()**((())*+,-/./,--,++****+,+,,-02.///..-.--...,,))))))*++,+*++,+++*)*++-+*+**)+++**+)))(((())+*()((()(()))))))((((),-./--+*)))((((()((((((*+,,+,*+*,++++****,1.+*++,+,-.2-,+,-,+*,*.-.1/----*+,*+**++***./.-+*-+))))*,,-/*-*****-,*))))**,+++-,++++*+*,-../.-,**)*)+******-+,+)*++*+-.//../..,,+,..+.)+-+,))*+*++,+*,----.//-0662.-,--.-0.../.,+))-,2/.-++*****+**++++-+-...+,+*****,,.,+*.+,,,++*)))+/.,-10,+***)**++***+* -464 @e643ceef-570f-4ba7-bdae-e9e78da71703_Basecall_2D_complement CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read1377_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read1377_strand.fast5 GAACACAACTGTTTCCCAGTACACGCTTTGTTTAAGCTTTCGCGTTGGTTCCATGTGAAGAGCTTCTGTTCTTCCTTTTTTGGTATGAAAGTTTTAGTTCTCTTCAGAGTCGTCCCACTTGATGTCCCGTATCGCTTGTGGACATTGTAGAAATGATCGTAAGGGCAGAGGAATTAATTAAAACTTTGTGGTGCCATCCCATTACGGTCGAGCGAATCCAGTAGCACCAGTACCCAGTAAGAACGAACCCTGAGCCAATTACACAGAAGGTTGAAGGAGTCAAGCTGTAGTTGGAAGGGGTGAAGGTCCGCACAAGATTCGATCCTCGTTATCGTACCTGATTACACATCTCTGCGTGATATGATGATTCTTTATTAGCAACCGAGCACGCACTGTTGGCGTTATGTTCGGATACTACGGTCTATCCTCTCAAACGGTCCAGCTCCCAACATCGGCGTCAGTCA #"#$"$%%#$#*3.$%&%$(#$%#$#'-,(4*$#$$%(2+'&%%*.%%,:'%&,)*,'%(%%$*,'''(*(%,'%)2>B>/'#$$&&$)+%/;,&#$()'&'&&($%#$(&&*&$$$#%%$$'&)+%&$)#%$##%'%&%#$$#&-%##&$&$#$#%$$$%&##&$$$&,-('(###'$')'#$+14(&$$($%$%#$&#'*+)*%)+$$&%$'&&(%&&%)"%$$'&%#)#%'#'$'%'(%&%%&%&%#$###&#&'+&####$($$$#'*)(+,-*$)&&'$&%$$$$((%+'&&$%#''$$$#&$%%$#$$$,%(*&"#&###(&*$%%%$&#$$%$&)+()$(&'$%$$##$)"&$#$##$&#&.#&1)&(%%'%&#'%#&&&%$&%$%(',('('&)+&%%-&#"$#%$%$$'$$,)(),'%%$$$###'##*((%(%%'%#$##"%##$(*-)&'&%# 494 @e643ceef-570f-4ba7-bdae-e9e78da71703_Basecall_2D_template CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read1377_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read1377_strand.fast5 TTGTGTTTCTTCTTATGACTTGCTATGCGCAGGGGGGAGGAGAGATGTAGCGGAGGGCAGAGTGTGAAAGGGGTAGTTCATTATGCTGTCGTTAAGCCTCCGGGGCTATTGAAAACGATGAATGGGGCCAGGCGCTGGTCACGTACACGTGCGACACTGATGAAACGTTCCTCACCATTCATTAAATTACCGGCTTTTAAACGTGAACATGCTGTTGTAATTCTTCATGGTGGTGTAATGTACTTAGCAGTAGCGTTCAATTGGATTTCGCTTCGAATGTAGTCGATCTGCGCATCCACTGGTCGACGATTTCCTCTCTTTACTGATCGTAGTTCGTCACGTCGTCGTACGATAGGATCAAAGTCGCGGGATGGCTATCCCCGGGCGAACTTTCCAGAGAAGGAAGAAGAAAGACCTTTCGGCTTGTAGTAAGACCCCGAAGACTCGAAAACAGGGCAACGCGAATTCCACTTCGTTATGTTCTTACTATTGGA #$$*)*8+$()&(%%$#$#&'$#"%%#$($+&,&(-(',.,*%$%%$$$"$$('%%'&('%%%%%$##$#$$"$#$%&%$&$#'$$#$)''+&$%"&##($#$$###$*&*$&(%%$&($&$&"###%$$#&"#!%$$($$%$'$&%&'*%&$#$#$%$$$($/$/.2)'$#%#%(#**)%)&'$#)%#%''(%')0'$%#$$'$&#$#&$&$&,2-,/%1,"%*%%$#%&##%%&)((('&%(&&%'*%&'$((-:'%(**)((/5)%$&,,*%)#'%$$#&$"#'$)$&%%%#$$%#$#"'$"#$"$17)&##%&')3'##$$$$$#%#%+)'&)&#+*,)&'%%&#%#%#$*%&%$%%##&&#%%'#'#$$%##$%)$'%%'%#'$#)48$$#%#'#*)-,,))')((%#$#&&-'(##'%*%$&"""$#$#')%$'($$#"'$&&)$&'%(*&%%'$$)+)6*(#%#%'%&*,)(&3*$%'$%%$(,,&# -692 @2f378243-7a3f-4584-bfb6-6800def37547_Basecall_2D_2d CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read326_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read326_strand.fast5 CATGTTTCTGCTGATATTGCTAATGGCTGAACTGGAAATAAGGATCCGTTGCTTGCCAACAACTATACTGCGTGGTATTTTCCCAGTGGAAAGATCGGGAACCTTTGATCTTCAATATAGTTACAATTGGTGGTCGTGATTTTAATCCCAGTTCATCCTTATTTTGGGTATAACAGGATGAGGAGGACGATTCGAAGTCACGATCATGCGCCCAAGTCAGAATGACTCCACACTACTCCTCCTCAGGACCATTTATAAATAAACAGTGATCAAGATTCCAACAATTAAGATGGCTTGAAACCAATTTCTGCTCTTGTTTTTGTTCCCACTCCCCCCTCCCCCCGAGGTCAGGATGAAGTATTAACTCTGAAGATAAAGGACCCCACGACGACAACGGCTTCCAGTTACTTCGAAGGCATTTTTCTACTTCTACTTCCCCTCCGTCTCATCCTCCTCCTCAGCTACCAAATTCACAATAGGACCGCAGGAAAAGTCTGTAGCGAATAGAACCTTCTTCACTACGGTTTCGTACCTAAAATGTTCTGGAAAAATGGATAGAAAAGAATCTTTTAAAATCGAAATCCGATTTTCGGAGTGTTAACAATGTAACTGTTGTAGAAAAGGAGCGGTAAATGAGACGTGGGGAATAAGATACAGAGCAACCACTGTCGTTAAGGACCGTTTGAGTGTTT ))))+-*)*)+**++**+)*)*,-,,+++-+++/./20.//.+...*.,-,--+***,+++++**+++,.//.,++,.54.320/--.,-.++-.,,.-++++*,+,-./0/.0000/..0-,----/.----,+++++,00.//./.++*+//0.//00/285/+*+**+-,,,,,-,**,,,+--00*0/)*.,+,+.,,,+++,,-+*,*+-+,+,--..,+****)**+++,+++***)*+)**)-,.20//02-))**++*+**+*+**-/0./-,,,--))*))++)+*++..,,+-./.+++++,++++,025-,5.-/,-//0/---,,.43430,,-+,+,.,/..-.+***)))))..//-+,***)))+)++))),***)**))(())--.-())((,((*(*(((*+-0/---,*/**)*,-/.0.-,.,++)*,+,,-,--,-,+++**))**,+*+*))))*))))*))+(+,-+,**)))*)*)))*++((*+****,,,---+*,+*+,0,++*)))(,03.--1+***-*-)*)+****))))+))+***+21--/.-)))**)*)***-10--,-,,+*+)))+,..,,/,,,,-,+)())***)())*++++,+)))***+*))((,+(((())(*)()()***,,---,,,+)((((,()**.*(***+))) -602 @2f378243-7a3f-4584-bfb6-6800def37547_Basecall_2D_complement CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read326_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read326_strand.fast5 ACACTAGCATCTGTCTGGCCCCGATATTTGTAGTATGTACTTTACGTGTACTGTTACTATGGTATTTTCACCCTCAGTTTGCCCTTGTCACTCGAAAGTCGAATTCAGTGTTTTAAAAGATTGTCTGGTTCTATCGGTTCCGAGCAGTTTTAATAGAACTGATCAATGAAGAAGGTTCGTTCGAGCGAACTTCCAGTGATCTTGTGAATTTGAGCTGAGGAGGAGATGAAAGAGGGAAGTAGAAGTAGAAAAATTGCATCGAAATATGGAATAAATTGTATCGTCGGTCTTGCTTTTATCTGTCAGTTATACTTCAGTAGGAGGGAGTGGGATAACGACAGCAATTAGTTCAGCCTTAGTGTTGAGGAATCTGGTTCTTTAACATCTTTGGTGGGAGGAGTGTCCTTGATTTAATATGCAGAAGTATCCTTGCTGCGAATCGTCATCATCCTTTAACAATAGGATGAAAACCGTTAAAATGCCGACAGTTGGACCTGCGAGCCGCCGGCCCGTATTCATGGGAAAGTACCGCATTAACGTGTGTCAGGCGGGACGTATTATTTCCCGTTCAGCCGATTAAGTATACAGGCACAGAGACTTCC ####"##&%##$#+%%##%#'%#$%$)-)'($%&&((,()+-'&'(($%#(&%1-$##$'$#%#'08+'$$%#"&$#&.+$%*#('%%##$$&&)))$(''($(('##+)6<4)'(*()',,(.'&%&'*($%&%##-,('#$$"$$'04)&%$#('&%%%%'$##(%%$*$'$#'''&),%$%$%$%$$$*+%$%(%%&&''%%(&%1-(%$"#%&&+**-,'&''((&#'#$&%'&%'#(&+#)*))//+&&%$%$%$%&)&&$),-*&%$$$&)%$#$'&+(#%'&''$##(2(%&$%$..('($&%%*.+'$%%%),')'()%*'&)%#&##"###&%%%'*$'++($$%#'%%"($)&#$%''&(**)$+*&)3-&%$$$#$)&$%'%)*')&&$%%&$#&($#+0&$"##%###'%(%'&(%$%(%#&$%$&$&$#%###$$&$%&+&&$$%&$$'('&(&&&#%$$'%%&'%'"%###$$#-)%#$#%'%%$&'''"&%$$'%$$)#(-*&)+09))'#'#%&%&$$(&%%%)(+()&%$('"""$"#&#'$$'./(*&&('%$#$$##'%$&$&%$"&"))##$#'$##"$)'$ 657 @2f378243-7a3f-4584-bfb6-6800def37547_Basecall_2D_template CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read326_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read326_strand.fast5 GTATTTCTTATGATATTAGATGTAGGCTGGAAATAGAATGCGTGCTTTACAGGCCTCCTCTGCGTATGTTTCCATGGAAGCCGTAGGAACCTTTGATCTTCATACTTGCCCTATTGGTGGTCGTGATTTTAATCCCAGTTCATCCTTATTTGATATAACAGGATACGGAAAGAGTTCGAAGTCGAATCGTCCAGCAAGTCGAATGACTCTAAAGACATCGGCACGGCCTTTGAGGCTCGTATATGCCTAATTCCAACAATGCAAAGTACGTGGAACAGATTTCTGCTCTTTTTTGTTCCACTCCGCCAGCCCCCCGAGGTCAGGATGAAATATTACTCTGAAAACCGCCAACCCACGGGACAGCTACGTCGAATGTCGTCGAACAGTTCTATTCCTTCCCCTCCGTTAGTACTACTCTAGGCTACTCAATTCAGGCGATAGAAGGAAAAGTCTGTACCAGGCGGGTTCTTCGGCTTTTCAATGCGCGCTGTTCTGGGGAGCTATCGCTGCAAAGAATCTTTTAAAATCGAGTCGAGTTTTCAGAGTGTTCCTCAATGTAACTGTTGGCAAAGGAGCGGGCCTGGCAGACGTGGGGAATAAGACCCCAAAACCACTTCGTGCACATCGTTCTGGTGTTCATCTGTTCTTAGCTCTTGT "##)7.'-(&&$$&#'$$$''%$%$&(),210)&&)&)+&.-+'((,%#))())&%)(')+)*+.***CC/&'$'')(*###$&%)5)1')&./%%)%++)&%$%%.#''(#%*)+&&).*)'*%$+A/'&%+%)''-;+)-'++-1)9>0()((%&%&&(')%$%#+-/&'#%+3&**/&''&'%'%$($%&$'(&'(&)*++)('&'#$$#"#"#%'$&%#$#")$&.'#&$%$$$$($&#)#%$#%,10*)%$&$,)&'"%#"%$&%1&')&%%%'-A:10/,+(*0KLI,,I330,**.,$&$'&,7255.)+(%'&&+$,%%%'$$$&&%$$&''$*)$$%#%$&$'%#$$$#"##$$%$$(#*'#$&%#&$#$$$(%&%'1)'%$/,(')3+0-,,1*)0$##'#$%$&&(#$$##"#$#'&$,(&&#$%$&$$)&+,++**(%+'&&%$$$%"$"#%$,5')(''&',:M/($&,&($%$$((7,&%%--$&$##$%$$%))$+*',.--+-3/'$')%&##&$*($''-3E3)$)'&('&)#&&())+)))('(&/*))',-&0**('&%#$##$)#'&+,,(&&&%)'%%$%&&*+&%$%"#$$$%)(()%&"#&#)&1.+,**++-C$&$$&$4(%)$$##$#$&$% diff --git a/tools/poretools/test-data/poretools-tabular-out2.tabular b/tools/poretools/test-data/poretools-tabular-out2.tabular index 2690807f14b..b5f564900d7 100644 --- a/tools/poretools/test-data/poretools-tabular-out2.tabular +++ b/tools/poretools/test-data/poretools-tabular-out2.tabular @@ -1,13 +1,5 @@ length name sequence quals -202 @b7b29e94-0894-415c-87c4-a809bc8e8bdb_Basecall_2D_2d CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read95_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read95_strand.fast5 GAAATTGCTGGTTGCTCCCCGAGGGGCCTATAAACAATCGGATAAGGGTCTAAGTCAGGGCGAAAAAGATTTGGGGGCTCCTAATCTCCGATAATGAGTGCCGCAACATACGGATAGTACCTTTATGCGTAACCGCTCCATACGACAAATAATTATTTATATACGGTACCTACGGAACCAAAATTGACAAGTTCGTACTTTT )))))+*,,*,*--,-,..---./0..++++-/-//**)*)))*,,.///---**)))*))+/,//-.,00.--)***+*+))),)*)))+).*----.--**..,-,**,**,+++++,+*+*)**+,,,**((+,,+,))()**+,++,+**+--,)(((((()(((((()(())))+,//),+--.+(())(((()((( 159 @b7b29e94-0894-415c-87c4-a809bc8e8bdb_Basecall_2D_complement CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read95_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read95_strand.fast5 ATCGACCATATTGGCTTTTTGGTTATCCTGGTCTACCTCTTGTTGTCTTGGTGGGTGCCAACAGCTATGCATCTGTTGCATCAATCGTGACGGGAAACGAGAGGACAATTTCCCGGGTTAAACATGCCGATTGTCAGCCGCGGGGGCTGGGGAGGTTCC ""$"#$$&%$(&$"#$,<0-+(-'%(#$%$&(&%$$$%'-,(0'$)%(&$"'"#"'"$#$"&#&$##&%$%'%&'00,&'%#$##$$&"####%$'#%(''$$"$"($/=,)''#$$'%%'$'$)$%&$%()''%%"%&%%%(*#(%"$&&(&##&)&$ -212 @b7b29e94-0894-415c-87c4-a809bc8e8bdb_Basecall_2D_template CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read95_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read95_strand.fast5 CTTCTGTTGTGGTGCTCTTGCTCCCCAGGGGCCTATAAACGTGCACATAGGGTCTAAGTCAGCGAAAAAGATTTGAGGCTCCCGTATAGATAATGGATCCCCTCAGCCCTAGCTGACCGTCATCCGTAACGCCTCCATACATAAATAATTATTTAGCTCTAGTACACCCAGGCGGATCGCTTCTGGTTTTATATTTCTTGATTACTGATGCA "#')-,;42;7<8544/22.**)-(*()*(')%%&''-*0..+)%%$"'%'*/'%%&$&$%&##$%%(%)%/4)&#&'#$#$#$*#$"#&$$#'&$#*$%&##(&"*%)%&$&&&**(&(%%(%%),-%&%')*/,,(((%$%'$##","#,2''#$$('('*()(+)''&*)%$'(%#&%4.01-17;2&&$'12'')"%)&#$#"$)&'# -413 @935c5941-a78e-4959-923e-f71157063e92_Basecall_2D_2d CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read430_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read430_strand.fast5 GCTTCTTCTGCTTATATTGCTTAGAAGGAAATACGAGAGGAGAAAGAGTAGATGATGATAAAGGGTCGACTAATTATTTCCGAAGTTTGTTAAAGTCGAAATCGCTTCGAATTTGAAATTGTTGCTGACGCAAGTTAGCGATGCGCGATCCCAGGAGTATAGGGGTTGAAAACGGTTCCATTTGATAAGGTTTTCCATTAATGACGTCACGTTGTTTGGTATTTCCTTCTATTTTCTCCGAAGCGCCCCTCTCTCTCTCATCTCACGTCAGATTCAATTTTATTACAACAAATGTGAAAAGTGGGTTCGCAGAGGTCGCTTAAGCCATTTTCTTAGATACAGCTTGAAAACGAATCTACAGAACAAATCTCCTGCCATTACACTCAGAGTCATGACGGTCGTGTTTATAGAGT ))****-+.,,,++,,-,...-*++/,0.1,++,,..-0/)+-/,----,+,,,-,--,-+****+**+**+-.-.0500-.0-,,+*,.,,,,+-*+./.++,.////10+/,/03/10/.0..-*--./0001.--.++../////0--,./0//****.//..--).0-,-*,,+*)10,+-+++,,./+,+++*)+-++++**)))*))*)+*+,*,.0,.+,****,--)))*)()+(*))))))))**,,,,*))((*))**))(*++(+*-,-,())))**+-0-*****./,)****-0/..,-,,.--,-+,****-./680/--*)+000/.//-,/03/..0--.*,++*+*)**)*)*++++.//0/,++**+))*+++*)))**++-,-,3520...**) 376 @935c5941-a78e-4959-923e-f71157063e92_Basecall_2D_complement CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read430_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read430_strand.fast5 ACTCTAACTCAGGCTGGTATCTGAGTGTAATGGCGCAGTTGTCTGTAGGGTCGTTCAAGCTGTATCAAGAAATGAGTAAGCGAAAACCTGCGAGCCGATTTTCGCTTTGTTTAGTAAGGTTAGTGACGTGAGGGTGAGAGAGAGAGAGAGCGTTCGGAGAAAATAGAAGGAGAACCCAAACAACGTGACGTCATTGATGAAAACCTTATCGGGAACCCGTTTCAACCCCTATACTCCTCGGCGCGTAGGCTAACTGCGTAGCAACATTCAATTCAGCAGTTTTCCTGTCAGCGACTTCGGAAGCTTAGTCAACAGTGTTTATCAGCTCCTCTTCCTCTCGTATTTCGTTCAAGCAATATAGCAGAGGCGCCTGTCC "$###$$$#%#$"###$'###$"&'.)*(*+,-)$%$&/&$1(*),&&%%('$1)%##%%))+((%#$+&*%&&%$%%'(*,--+()$+-+),#*'%')4:*'$$*:,')'#%#%$&%$+++$*%$'&&)&&&&')'+*-,+*'&*$)%'&&'')'*)+,--'&&'$)(2&$)%%&(&&$&%#%%)$%&&((*(+$')(&(%##'+,+,)'((%%$%(*02*')&))+'"%$%%&'$#&%$$(#$&$%%##'&&,*))*((&%#(%*,(*(**$'()%#*=?/-&*)*(##&%'&+,(+*,)%'&*+*+('%($#'#*2+('%$$$&&%#$(+(('''(')'+30,$)*'((*('&&%#$$%%&%''$'$%&&1/$ -373 @935c5941-a78e-4959-923e-f71157063e92_Basecall_2D_template CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read430_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read430_strand.fast5 CATTCTTTGGTGCTGATCCTGCGAGGAGAGGGGGAGGGGAACAATGGTAGCCACTAAATCTATAACAATTATTTCAGAAGTTGTCCGCTTGAATCATTCATTTGAAATTGTTAGTGACGCAAGTTAATGCGCGATCCCAGGAGCGGGCTCGTCCAGTTTACAATTGTCCATGCGTAGTCAGTTGTTATGTTGATTCCTGTTACCGATAGGGTATATAACGCTCCTAGTCGATTCGATTTGCTTGGCGCCATCCAAGTATTCCAGAGTCCTTAGCATTTTCTTAATGGCACGTGAAAACGAATCCCCTAAGAGCCACTTATCACGTCCGATTACATACTCCAGTCATGACGCTTCTGTTTATGTTTCTTAACCA ##''$%)0%%)$&''',&'(&&$-+*-'('*+(('$$&#'#$%$%##$$#%$$#"$%$'$##$%"%#%)&$,5+($),,*0(&,####&)()(**)+)&$&,$&%1,3-*.''#'#$'('/*)+&&&+$&'%()*((%%)$&$#####"$%3%)')5/($$##&*$0%&()#$%%$$&'%(+%&-)%&%,-##((%$%&)*%&&#%""####"#"$$##""#('#$''$$&)0(&(.//$$&&###%&&+%('&%##%+)&&'%$#&%#%$#"(%/FA/+,(&'##$&%%#(&%*1)*()'())*("#$$(%%(&%*%$$$"$#($%##+$$%$####%$'&((&&$$%$)'1.+*:7,))',7&%)#$#$$# -523 @e643ceef-570f-4ba7-bdae-e9e78da71703_Basecall_2D_2d CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read1377_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read1377_strand.fast5 ATGTTTCTTCAGTGATACCTGTGACATCCGGAAAGGAGGAGGAGGATCAGAAAGGAGGAGTGTGACATAACGCTGACAGTGCGTGCTTAGGTTCGTTAATAAACAAAGCCATATTACGGAGATGGCGTAATCACCTACGATGAAAGTGGTCACGTACGCGTGCCACCTGGGCATCGTCCTCACCCCTTCATTAAATTACAGGCTTTTGACTCCTTCAACCTTCTCGTTGTAATTGGTTAGTACTTATCCTATCTTATTCGCGATCGGCGTTCGATTGGATTTCGCTTCGAATGTAATCCGTATGCGCAATACAAATATTTGAGCTAATTTCCTCTCTTTACGTAATCGTTTTCGTCACCGTCGTCAATTATCGATACGGGAATCAAGTCGAACGAACCCCTGACCGAGAATCAGAAAAACTTTCAGAAGAAAAAGGAAGAAGAGAAAGCTCTTTCACATTGTAAACCAAACGCGAAAGCTCCCGAAAACAAAGGGCGGCGATTCTAAACATTTGGTTTATGTT (((*-,+,,,++*()(())*-)),....+/-,.),-++--./-,))*()))+*+*)*-*,**)())((*)(*()(*--+**)()()*(())))*,--*,+,.,---+)+))()**((())*+,-/./,--,++****+,+,,-02.///..-.--...,,))))))*++,+*++,+++*)*++-+*+**)+++**+)))(((())+*()((()(()))))))((((),-./--+*)))((((()((((((*+,,+,*+*,++++****,1.+*++,+,-.2-,+,-,+*,*.-.1/----*+,*+**++***./.-+*-+))))*,,-/*-*****-,*))))**,+++-,++++*+*,-../.-,**)*)+******-+,+)*++*+-.//../..,,+,..+.)+-+,))*+*++,+*,----.//-0662.-,--.-0.../.,+))-,2/.-++*****+**++++-+-...+,+*****,,.,+*.+,,,++*)))+/.,-10,+***)**++***+* 464 @e643ceef-570f-4ba7-bdae-e9e78da71703_Basecall_2D_complement CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read1377_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read1377_strand.fast5 GAACACAACTGTTTCCCAGTACACGCTTTGTTTAAGCTTTCGCGTTGGTTCCATGTGAAGAGCTTCTGTTCTTCCTTTTTTGGTATGAAAGTTTTAGTTCTCTTCAGAGTCGTCCCACTTGATGTCCCGTATCGCTTGTGGACATTGTAGAAATGATCGTAAGGGCAGAGGAATTAATTAAAACTTTGTGGTGCCATCCCATTACGGTCGAGCGAATCCAGTAGCACCAGTACCCAGTAAGAACGAACCCTGAGCCAATTACACAGAAGGTTGAAGGAGTCAAGCTGTAGTTGGAAGGGGTGAAGGTCCGCACAAGATTCGATCCTCGTTATCGTACCTGATTACACATCTCTGCGTGATATGATGATTCTTTATTAGCAACCGAGCACGCACTGTTGGCGTTATGTTCGGATACTACGGTCTATCCTCTCAAACGGTCCAGCTCCCAACATCGGCGTCAGTCA #"#$"$%%#$#*3.$%&%$(#$%#$#'-,(4*$#$$%(2+'&%%*.%%,:'%&,)*,'%(%%$*,'''(*(%,'%)2>B>/'#$$&&$)+%/;,&#$()'&'&&($%#$(&&*&$$$#%%$$'&)+%&$)#%$##%'%&%#$$#&-%##&$&$#$#%$$$%&##&$$$&,-('(###'$')'#$+14(&$$($%$%#$&#'*+)*%)+$$&%$'&&(%&&%)"%$$'&%#)#%'#'$'%'(%&%%&%&%#$###&#&'+&####$($$$#'*)(+,-*$)&&'$&%$$$$((%+'&&$%#''$$$#&$%%$#$$$,%(*&"#&###(&*$%%%$&#$$%$&)+()$(&'$%$$##$)"&$#$##$&#&.#&1)&(%%'%&#'%#&&&%$&%$%(',('('&)+&%%-&#"$#%$%$$'$$,)(),'%%$$$###'##*((%(%%'%#$##"%##$(*-)&'&%# -494 @e643ceef-570f-4ba7-bdae-e9e78da71703_Basecall_2D_template CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read1377_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read1377_strand.fast5 TTGTGTTTCTTCTTATGACTTGCTATGCGCAGGGGGGAGGAGAGATGTAGCGGAGGGCAGAGTGTGAAAGGGGTAGTTCATTATGCTGTCGTTAAGCCTCCGGGGCTATTGAAAACGATGAATGGGGCCAGGCGCTGGTCACGTACACGTGCGACACTGATGAAACGTTCCTCACCATTCATTAAATTACCGGCTTTTAAACGTGAACATGCTGTTGTAATTCTTCATGGTGGTGTAATGTACTTAGCAGTAGCGTTCAATTGGATTTCGCTTCGAATGTAGTCGATCTGCGCATCCACTGGTCGACGATTTCCTCTCTTTACTGATCGTAGTTCGTCACGTCGTCGTACGATAGGATCAAAGTCGCGGGATGGCTATCCCCGGGCGAACTTTCCAGAGAAGGAAGAAGAAAGACCTTTCGGCTTGTAGTAAGACCCCGAAGACTCGAAAACAGGGCAACGCGAATTCCACTTCGTTATGTTCTTACTATTGGA #$$*)*8+$()&(%%$#$#&'$#"%%#$($+&,&(-(',.,*%$%%$$$"$$('%%'&('%%%%%$##$#$$"$#$%&%$&$#'$$#$)''+&$%"&##($#$$###$*&*$&(%%$&($&$&"###%$$#&"#!%$$($$%$'$&%&'*%&$#$#$%$$$($/$/.2)'$#%#%(#**)%)&'$#)%#%''(%')0'$%#$$'$&#$#&$&$&,2-,/%1,"%*%%$#%&##%%&)((('&%(&&%'*%&'$((-:'%(**)((/5)%$&,,*%)#'%$$#&$"#'$)$&%%%#$$%#$#"'$"#$"$17)&##%&')3'##$$$$$#%#%+)'&)&#+*,)&'%%&#%#%#$*%&%$%%##&&#%%'#'#$$%##$%)$'%%'%#'$#)48$$#%#'#*)-,,))')((%#$#&&-'(##'%*%$&"""$#$#')%$'($$#"'$&&)$&'%(*&%%'$$)+)6*(#%#%'%&*,)(&3*$%'$%%$(,,&# -692 @2f378243-7a3f-4584-bfb6-6800def37547_Basecall_2D_2d CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read326_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read326_strand.fast5 CATGTTTCTGCTGATATTGCTAATGGCTGAACTGGAAATAAGGATCCGTTGCTTGCCAACAACTATACTGCGTGGTATTTTCCCAGTGGAAAGATCGGGAACCTTTGATCTTCAATATAGTTACAATTGGTGGTCGTGATTTTAATCCCAGTTCATCCTTATTTTGGGTATAACAGGATGAGGAGGACGATTCGAAGTCACGATCATGCGCCCAAGTCAGAATGACTCCACACTACTCCTCCTCAGGACCATTTATAAATAAACAGTGATCAAGATTCCAACAATTAAGATGGCTTGAAACCAATTTCTGCTCTTGTTTTTGTTCCCACTCCCCCCTCCCCCCGAGGTCAGGATGAAGTATTAACTCTGAAGATAAAGGACCCCACGACGACAACGGCTTCCAGTTACTTCGAAGGCATTTTTCTACTTCTACTTCCCCTCCGTCTCATCCTCCTCCTCAGCTACCAAATTCACAATAGGACCGCAGGAAAAGTCTGTAGCGAATAGAACCTTCTTCACTACGGTTTCGTACCTAAAATGTTCTGGAAAAATGGATAGAAAAGAATCTTTTAAAATCGAAATCCGATTTTCGGAGTGTTAACAATGTAACTGTTGTAGAAAAGGAGCGGTAAATGAGACGTGGGGAATAAGATACAGAGCAACCACTGTCGTTAAGGACCGTTTGAGTGTTT ))))+-*)*)+**++**+)*)*,-,,+++-+++/./20.//.+...*.,-,--+***,+++++**+++,.//.,++,.54.320/--.,-.++-.,,.-++++*,+,-./0/.0000/..0-,----/.----,+++++,00.//./.++*+//0.//00/285/+*+**+-,,,,,-,**,,,+--00*0/)*.,+,+.,,,+++,,-+*,*+-+,+,--..,+****)**+++,+++***)*+)**)-,.20//02-))**++*+**+*+**-/0./-,,,--))*))++)+*++..,,+-./.+++++,++++,025-,5.-/,-//0/---,,.43430,,-+,+,.,/..-.+***)))))..//-+,***)))+)++))),***)**))(())--.-())((,((*(*(((*+-0/---,*/**)*,-/.0.-,.,++)*,+,,-,--,-,+++**))**,+*+*))))*))))*))+(+,-+,**)))*)*)))*++((*+****,,,---+*,+*+,0,++*)))(,03.--1+***-*-)*)+****))))+))+***+21--/.-)))**)*)***-10--,-,,+*+)))+,..,,/,,,,-,+)())***)())*++++,+)))***+*))((,+(((())(*)()()***,,---,,,+)((((,()**.*(***+))) 602 @2f378243-7a3f-4584-bfb6-6800def37547_Basecall_2D_complement CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read326_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read326_strand.fast5 ACACTAGCATCTGTCTGGCCCCGATATTTGTAGTATGTACTTTACGTGTACTGTTACTATGGTATTTTCACCCTCAGTTTGCCCTTGTCACTCGAAAGTCGAATTCAGTGTTTTAAAAGATTGTCTGGTTCTATCGGTTCCGAGCAGTTTTAATAGAACTGATCAATGAAGAAGGTTCGTTCGAGCGAACTTCCAGTGATCTTGTGAATTTGAGCTGAGGAGGAGATGAAAGAGGGAAGTAGAAGTAGAAAAATTGCATCGAAATATGGAATAAATTGTATCGTCGGTCTTGCTTTTATCTGTCAGTTATACTTCAGTAGGAGGGAGTGGGATAACGACAGCAATTAGTTCAGCCTTAGTGTTGAGGAATCTGGTTCTTTAACATCTTTGGTGGGAGGAGTGTCCTTGATTTAATATGCAGAAGTATCCTTGCTGCGAATCGTCATCATCCTTTAACAATAGGATGAAAACCGTTAAAATGCCGACAGTTGGACCTGCGAGCCGCCGGCCCGTATTCATGGGAAAGTACCGCATTAACGTGTGTCAGGCGGGACGTATTATTTCCCGTTCAGCCGATTAAGTATACAGGCACAGAGACTTCC ####"##&%##$#+%%##%#'%#$%$)-)'($%&&((,()+-'&'(($%#(&%1-$##$'$#%#'08+'$$%#"&$#&.+$%*#('%%##$$&&)))$(''($(('##+)6<4)'(*()',,(.'&%&'*($%&%##-,('#$$"$$'04)&%$#('&%%%%'$##(%%$*$'$#'''&),%$%$%$%$$$*+%$%(%%&&''%%(&%1-(%$"#%&&+**-,'&''((&#'#$&%'&%'#(&+#)*))//+&&%$%$%$%&)&&$),-*&%$$$&)%$#$'&+(#%'&''$##(2(%&$%$..('($&%%*.+'$%%%),')'()%*'&)%#&##"###&%%%'*$'++($$%#'%%"($)&#$%''&(**)$+*&)3-&%$$$#$)&$%'%)*')&&$%%&$#&($#+0&$"##%###'%(%'&(%$%(%#&$%$&$&$#%###$$&$%&+&&$$%&$$'('&(&&&#%$$'%%&'%'"%###$$#-)%#$#%'%%$&'''"&%$$'%$$)#(-*&)+09))'#'#%&%&$$(&%%%)(+()&%$('"""$"#&#'$$'./(*&&('%$#$$##'%$&$&%$"&"))##$#'$##"$)'$ -657 @2f378243-7a3f-4584-bfb6-6800def37547_Basecall_2D_template CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read326_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read326_strand.fast5 GTATTTCTTATGATATTAGATGTAGGCTGGAAATAGAATGCGTGCTTTACAGGCCTCCTCTGCGTATGTTTCCATGGAAGCCGTAGGAACCTTTGATCTTCATACTTGCCCTATTGGTGGTCGTGATTTTAATCCCAGTTCATCCTTATTTGATATAACAGGATACGGAAAGAGTTCGAAGTCGAATCGTCCAGCAAGTCGAATGACTCTAAAGACATCGGCACGGCCTTTGAGGCTCGTATATGCCTAATTCCAACAATGCAAAGTACGTGGAACAGATTTCTGCTCTTTTTTGTTCCACTCCGCCAGCCCCCCGAGGTCAGGATGAAATATTACTCTGAAAACCGCCAACCCACGGGACAGCTACGTCGAATGTCGTCGAACAGTTCTATTCCTTCCCCTCCGTTAGTACTACTCTAGGCTACTCAATTCAGGCGATAGAAGGAAAAGTCTGTACCAGGCGGGTTCTTCGGCTTTTCAATGCGCGCTGTTCTGGGGAGCTATCGCTGCAAAGAATCTTTTAAAATCGAGTCGAGTTTTCAGAGTGTTCCTCAATGTAACTGTTGGCAAAGGAGCGGGCCTGGCAGACGTGGGGAATAAGACCCCAAAACCACTTCGTGCACATCGTTCTGGTGTTCATCTGTTCTTAGCTCTTGT "##)7.'-(&&$$&#'$$$''%$%$&(),210)&&)&)+&.-+'((,%#))())&%)(')+)*+.***CC/&'$'')(*###$&%)5)1')&./%%)%++)&%$%%.#''(#%*)+&&).*)'*%$+A/'&%+%)''-;+)-'++-1)9>0()((%&%&&(')%$%#+-/&'#%+3&**/&''&'%'%$($%&$'(&'(&)*++)('&'#$$#"#"#%'$&%#$#")$&.'#&$%$$$$($&#)#%$#%,10*)%$&$,)&'"%#"%$&%1&')&%%%'-A:10/,+(*0KLI,,I330,**.,$&$'&,7255.)+(%'&&+$,%%%'$$$&&%$$&''$*)$$%#%$&$'%#$$$#"##$$%$$(#*'#$&%#&$#$$$(%&%'1)'%$/,(')3+0-,,1*)0$##'#$%$&&(#$$##"#$#'&$,(&&#$%$&$$)&+,++**(%+'&&%$$$%"$"#%$,5')(''&',:M/($&,&($%$$((7,&%%--$&$##$%$$%))$+*',.--+-3/'$')%&##&$*($''-3E3)$)'&('&)#&&())+)))('(&/*))',-&0**('&%#$##$)#'&+,,(&&&%)'%%$%&&*+&%$%"#$$$%)(()%&"#&#)&1.+,**++-C$&$$&$4(%)$$##$#$&$% diff --git a/tools/poretools/test-data/poretools-tabular-out3.tabular b/tools/poretools/test-data/poretools-tabular-out3.tabular index 2690807f14b..ce9fa1cfcb7 100644 --- a/tools/poretools/test-data/poretools-tabular-out3.tabular +++ b/tools/poretools/test-data/poretools-tabular-out3.tabular @@ -1,13 +1,5 @@ length name sequence quals 202 @b7b29e94-0894-415c-87c4-a809bc8e8bdb_Basecall_2D_2d CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read95_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read95_strand.fast5 GAAATTGCTGGTTGCTCCCCGAGGGGCCTATAAACAATCGGATAAGGGTCTAAGTCAGGGCGAAAAAGATTTGGGGGCTCCTAATCTCCGATAATGAGTGCCGCAACATACGGATAGTACCTTTATGCGTAACCGCTCCATACGACAAATAATTATTTATATACGGTACCTACGGAACCAAAATTGACAAGTTCGTACTTTT )))))+*,,*,*--,-,..---./0..++++-/-//**)*)))*,,.///---**)))*))+/,//-.,00.--)***+*+))),)*)))+).*----.--**..,-,**,**,+++++,+*+*)**+,,,**((+,,+,))()**+,++,+**+--,)(((((()(((((()(())))+,//),+--.+(())(((()((( -159 @b7b29e94-0894-415c-87c4-a809bc8e8bdb_Basecall_2D_complement CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read95_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read95_strand.fast5 ATCGACCATATTGGCTTTTTGGTTATCCTGGTCTACCTCTTGTTGTCTTGGTGGGTGCCAACAGCTATGCATCTGTTGCATCAATCGTGACGGGAAACGAGAGGACAATTTCCCGGGTTAAACATGCCGATTGTCAGCCGCGGGGGCTGGGGAGGTTCC ""$"#$$&%$(&$"#$,<0-+(-'%(#$%$&(&%$$$%'-,(0'$)%(&$"'"#"'"$#$"&#&$##&%$%'%&'00,&'%#$##$$&"####%$'#%(''$$"$"($/=,)''#$$'%%'$'$)$%&$%()''%%"%&%%%(*#(%"$&&(&##&)&$ -212 @b7b29e94-0894-415c-87c4-a809bc8e8bdb_Basecall_2D_template CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read95_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read95_strand.fast5 CTTCTGTTGTGGTGCTCTTGCTCCCCAGGGGCCTATAAACGTGCACATAGGGTCTAAGTCAGCGAAAAAGATTTGAGGCTCCCGTATAGATAATGGATCCCCTCAGCCCTAGCTGACCGTCATCCGTAACGCCTCCATACATAAATAATTATTTAGCTCTAGTACACCCAGGCGGATCGCTTCTGGTTTTATATTTCTTGATTACTGATGCA "#')-,;42;7<8544/22.**)-(*()*(')%%&''-*0..+)%%$"'%'*/'%%&$&$%&##$%%(%)%/4)&#&'#$#$#$*#$"#&$$#'&$#*$%&##(&"*%)%&$&&&**(&(%%(%%),-%&%')*/,,(((%$%'$##","#,2''#$$('('*()(+)''&*)%$'(%#&%4.01-17;2&&$'12'')"%)&#$#"$)&'# 413 @935c5941-a78e-4959-923e-f71157063e92_Basecall_2D_2d CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read430_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read430_strand.fast5 GCTTCTTCTGCTTATATTGCTTAGAAGGAAATACGAGAGGAGAAAGAGTAGATGATGATAAAGGGTCGACTAATTATTTCCGAAGTTTGTTAAAGTCGAAATCGCTTCGAATTTGAAATTGTTGCTGACGCAAGTTAGCGATGCGCGATCCCAGGAGTATAGGGGTTGAAAACGGTTCCATTTGATAAGGTTTTCCATTAATGACGTCACGTTGTTTGGTATTTCCTTCTATTTTCTCCGAAGCGCCCCTCTCTCTCTCATCTCACGTCAGATTCAATTTTATTACAACAAATGTGAAAAGTGGGTTCGCAGAGGTCGCTTAAGCCATTTTCTTAGATACAGCTTGAAAACGAATCTACAGAACAAATCTCCTGCCATTACACTCAGAGTCATGACGGTCGTGTTTATAGAGT ))****-+.,,,++,,-,...-*++/,0.1,++,,..-0/)+-/,----,+,,,-,--,-+****+**+**+-.-.0500-.0-,,+*,.,,,,+-*+./.++,.////10+/,/03/10/.0..-*--./0001.--.++../////0--,./0//****.//..--).0-,-*,,+*)10,+-+++,,./+,+++*)+-++++**)))*))*)+*+,*,.0,.+,****,--)))*)()+(*))))))))**,,,,*))((*))**))(*++(+*-,-,())))**+-0-*****./,)****-0/..,-,,.--,-+,****-./680/--*)+000/.//-,/03/..0--.*,++*+*)**)*)*++++.//0/,++**+))*+++*)))**++-,-,3520...**) -376 @935c5941-a78e-4959-923e-f71157063e92_Basecall_2D_complement CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read430_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read430_strand.fast5 ACTCTAACTCAGGCTGGTATCTGAGTGTAATGGCGCAGTTGTCTGTAGGGTCGTTCAAGCTGTATCAAGAAATGAGTAAGCGAAAACCTGCGAGCCGATTTTCGCTTTGTTTAGTAAGGTTAGTGACGTGAGGGTGAGAGAGAGAGAGAGCGTTCGGAGAAAATAGAAGGAGAACCCAAACAACGTGACGTCATTGATGAAAACCTTATCGGGAACCCGTTTCAACCCCTATACTCCTCGGCGCGTAGGCTAACTGCGTAGCAACATTCAATTCAGCAGTTTTCCTGTCAGCGACTTCGGAAGCTTAGTCAACAGTGTTTATCAGCTCCTCTTCCTCTCGTATTTCGTTCAAGCAATATAGCAGAGGCGCCTGTCC "$###$$$#%#$"###$'###$"&'.)*(*+,-)$%$&/&$1(*),&&%%('$1)%##%%))+((%#$+&*%&&%$%%'(*,--+()$+-+),#*'%')4:*'$$*:,')'#%#%$&%$+++$*%$'&&)&&&&')'+*-,+*'&*$)%'&&'')'*)+,--'&&'$)(2&$)%%&(&&$&%#%%)$%&&((*(+$')(&(%##'+,+,)'((%%$%(*02*')&))+'"%$%%&'$#&%$$(#$&$%%##'&&,*))*((&%#(%*,(*(**$'()%#*=?/-&*)*(##&%'&+,(+*,)%'&*+*+('%($#'#*2+('%$$$&&%#$(+(('''(')'+30,$)*'((*('&&%#$$%%&%''$'$%&&1/$ -373 @935c5941-a78e-4959-923e-f71157063e92_Basecall_2D_template CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read430_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read430_strand.fast5 CATTCTTTGGTGCTGATCCTGCGAGGAGAGGGGGAGGGGAACAATGGTAGCCACTAAATCTATAACAATTATTTCAGAAGTTGTCCGCTTGAATCATTCATTTGAAATTGTTAGTGACGCAAGTTAATGCGCGATCCCAGGAGCGGGCTCGTCCAGTTTACAATTGTCCATGCGTAGTCAGTTGTTATGTTGATTCCTGTTACCGATAGGGTATATAACGCTCCTAGTCGATTCGATTTGCTTGGCGCCATCCAAGTATTCCAGAGTCCTTAGCATTTTCTTAATGGCACGTGAAAACGAATCCCCTAAGAGCCACTTATCACGTCCGATTACATACTCCAGTCATGACGCTTCTGTTTATGTTTCTTAACCA ##''$%)0%%)$&''',&'(&&$-+*-'('*+(('$$&#'#$%$%##$$#%$$#"$%$'$##$%"%#%)&$,5+($),,*0(&,####&)()(**)+)&$&,$&%1,3-*.''#'#$'('/*)+&&&+$&'%()*((%%)$&$#####"$%3%)')5/($$##&*$0%&()#$%%$$&'%(+%&-)%&%,-##((%$%&)*%&&#%""####"#"$$##""#('#$''$$&)0(&(.//$$&&###%&&+%('&%##%+)&&'%$#&%#%$#"(%/FA/+,(&'##$&%%#(&%*1)*()'())*("#$$(%%(&%*%$$$"$#($%##+$$%$####%$'&((&&$$%$)'1.+*:7,))',7&%)#$#$$# 523 @e643ceef-570f-4ba7-bdae-e9e78da71703_Basecall_2D_2d CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read1377_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read1377_strand.fast5 ATGTTTCTTCAGTGATACCTGTGACATCCGGAAAGGAGGAGGAGGATCAGAAAGGAGGAGTGTGACATAACGCTGACAGTGCGTGCTTAGGTTCGTTAATAAACAAAGCCATATTACGGAGATGGCGTAATCACCTACGATGAAAGTGGTCACGTACGCGTGCCACCTGGGCATCGTCCTCACCCCTTCATTAAATTACAGGCTTTTGACTCCTTCAACCTTCTCGTTGTAATTGGTTAGTACTTATCCTATCTTATTCGCGATCGGCGTTCGATTGGATTTCGCTTCGAATGTAATCCGTATGCGCAATACAAATATTTGAGCTAATTTCCTCTCTTTACGTAATCGTTTTCGTCACCGTCGTCAATTATCGATACGGGAATCAAGTCGAACGAACCCCTGACCGAGAATCAGAAAAACTTTCAGAAGAAAAAGGAAGAAGAGAAAGCTCTTTCACATTGTAAACCAAACGCGAAAGCTCCCGAAAACAAAGGGCGGCGATTCTAAACATTTGGTTTATGTT (((*-,+,,,++*()(())*-)),....+/-,.),-++--./-,))*()))+*+*)*-*,**)())((*)(*()(*--+**)()()*(())))*,--*,+,.,---+)+))()**((())*+,-/./,--,++****+,+,,-02.///..-.--...,,))))))*++,+*++,+++*)*++-+*+**)+++**+)))(((())+*()((()(()))))))((((),-./--+*)))((((()((((((*+,,+,*+*,++++****,1.+*++,+,-.2-,+,-,+*,*.-.1/----*+,*+**++***./.-+*-+))))*,,-/*-*****-,*))))**,+++-,++++*+*,-../.-,**)*)+******-+,+)*++*+-.//../..,,+,..+.)+-+,))*+*++,+*,----.//-0662.-,--.-0.../.,+))-,2/.-++*****+**++++-+-...+,+*****,,.,+*.+,,,++*)))+/.,-10,+***)**++***+* -464 @e643ceef-570f-4ba7-bdae-e9e78da71703_Basecall_2D_complement CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read1377_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read1377_strand.fast5 GAACACAACTGTTTCCCAGTACACGCTTTGTTTAAGCTTTCGCGTTGGTTCCATGTGAAGAGCTTCTGTTCTTCCTTTTTTGGTATGAAAGTTTTAGTTCTCTTCAGAGTCGTCCCACTTGATGTCCCGTATCGCTTGTGGACATTGTAGAAATGATCGTAAGGGCAGAGGAATTAATTAAAACTTTGTGGTGCCATCCCATTACGGTCGAGCGAATCCAGTAGCACCAGTACCCAGTAAGAACGAACCCTGAGCCAATTACACAGAAGGTTGAAGGAGTCAAGCTGTAGTTGGAAGGGGTGAAGGTCCGCACAAGATTCGATCCTCGTTATCGTACCTGATTACACATCTCTGCGTGATATGATGATTCTTTATTAGCAACCGAGCACGCACTGTTGGCGTTATGTTCGGATACTACGGTCTATCCTCTCAAACGGTCCAGCTCCCAACATCGGCGTCAGTCA #"#$"$%%#$#*3.$%&%$(#$%#$#'-,(4*$#$$%(2+'&%%*.%%,:'%&,)*,'%(%%$*,'''(*(%,'%)2>B>/'#$$&&$)+%/;,&#$()'&'&&($%#$(&&*&$$$#%%$$'&)+%&$)#%$##%'%&%#$$#&-%##&$&$#$#%$$$%&##&$$$&,-('(###'$')'#$+14(&$$($%$%#$&#'*+)*%)+$$&%$'&&(%&&%)"%$$'&%#)#%'#'$'%'(%&%%&%&%#$###&#&'+&####$($$$#'*)(+,-*$)&&'$&%$$$$((%+'&&$%#''$$$#&$%%$#$$$,%(*&"#&###(&*$%%%$&#$$%$&)+()$(&'$%$$##$)"&$#$##$&#&.#&1)&(%%'%&#'%#&&&%$&%$%(',('('&)+&%%-&#"$#%$%$$'$$,)(),'%%$$$###'##*((%(%%'%#$##"%##$(*-)&'&%# -494 @e643ceef-570f-4ba7-bdae-e9e78da71703_Basecall_2D_template CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read1377_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read1377_strand.fast5 TTGTGTTTCTTCTTATGACTTGCTATGCGCAGGGGGGAGGAGAGATGTAGCGGAGGGCAGAGTGTGAAAGGGGTAGTTCATTATGCTGTCGTTAAGCCTCCGGGGCTATTGAAAACGATGAATGGGGCCAGGCGCTGGTCACGTACACGTGCGACACTGATGAAACGTTCCTCACCATTCATTAAATTACCGGCTTTTAAACGTGAACATGCTGTTGTAATTCTTCATGGTGGTGTAATGTACTTAGCAGTAGCGTTCAATTGGATTTCGCTTCGAATGTAGTCGATCTGCGCATCCACTGGTCGACGATTTCCTCTCTTTACTGATCGTAGTTCGTCACGTCGTCGTACGATAGGATCAAAGTCGCGGGATGGCTATCCCCGGGCGAACTTTCCAGAGAAGGAAGAAGAAAGACCTTTCGGCTTGTAGTAAGACCCCGAAGACTCGAAAACAGGGCAACGCGAATTCCACTTCGTTATGTTCTTACTATTGGA #$$*)*8+$()&(%%$#$#&'$#"%%#$($+&,&(-(',.,*%$%%$$$"$$('%%'&('%%%%%$##$#$$"$#$%&%$&$#'$$#$)''+&$%"&##($#$$###$*&*$&(%%$&($&$&"###%$$#&"#!%$$($$%$'$&%&'*%&$#$#$%$$$($/$/.2)'$#%#%(#**)%)&'$#)%#%''(%')0'$%#$$'$&#$#&$&$&,2-,/%1,"%*%%$#%&##%%&)((('&%(&&%'*%&'$((-:'%(**)((/5)%$&,,*%)#'%$$#&$"#'$)$&%%%#$$%#$#"'$"#$"$17)&##%&')3'##$$$$$#%#%+)'&)&#+*,)&'%%&#%#%#$*%&%$%%##&&#%%'#'#$$%##$%)$'%%'%#'$#)48$$#%#'#*)-,,))')((%#$#&&-'(##'%*%$&"""$#$#')%$'($$#"'$&&)$&'%(*&%%'$$)+)6*(#%#%'%&*,)(&3*$%'$%%$(,,&# 692 @2f378243-7a3f-4584-bfb6-6800def37547_Basecall_2D_2d CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read326_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read326_strand.fast5 CATGTTTCTGCTGATATTGCTAATGGCTGAACTGGAAATAAGGATCCGTTGCTTGCCAACAACTATACTGCGTGGTATTTTCCCAGTGGAAAGATCGGGAACCTTTGATCTTCAATATAGTTACAATTGGTGGTCGTGATTTTAATCCCAGTTCATCCTTATTTTGGGTATAACAGGATGAGGAGGACGATTCGAAGTCACGATCATGCGCCCAAGTCAGAATGACTCCACACTACTCCTCCTCAGGACCATTTATAAATAAACAGTGATCAAGATTCCAACAATTAAGATGGCTTGAAACCAATTTCTGCTCTTGTTTTTGTTCCCACTCCCCCCTCCCCCCGAGGTCAGGATGAAGTATTAACTCTGAAGATAAAGGACCCCACGACGACAACGGCTTCCAGTTACTTCGAAGGCATTTTTCTACTTCTACTTCCCCTCCGTCTCATCCTCCTCCTCAGCTACCAAATTCACAATAGGACCGCAGGAAAAGTCTGTAGCGAATAGAACCTTCTTCACTACGGTTTCGTACCTAAAATGTTCTGGAAAAATGGATAGAAAAGAATCTTTTAAAATCGAAATCCGATTTTCGGAGTGTTAACAATGTAACTGTTGTAGAAAAGGAGCGGTAAATGAGACGTGGGGAATAAGATACAGAGCAACCACTGTCGTTAAGGACCGTTTGAGTGTTT ))))+-*)*)+**++**+)*)*,-,,+++-+++/./20.//.+...*.,-,--+***,+++++**+++,.//.,++,.54.320/--.,-.++-.,,.-++++*,+,-./0/.0000/..0-,----/.----,+++++,00.//./.++*+//0.//00/285/+*+**+-,,,,,-,**,,,+--00*0/)*.,+,+.,,,+++,,-+*,*+-+,+,--..,+****)**+++,+++***)*+)**)-,.20//02-))**++*+**+*+**-/0./-,,,--))*))++)+*++..,,+-./.+++++,++++,025-,5.-/,-//0/---,,.43430,,-+,+,.,/..-.+***)))))..//-+,***)))+)++))),***)**))(())--.-())((,((*(*(((*+-0/---,*/**)*,-/.0.-,.,++)*,+,,-,--,-,+++**))**,+*+*))))*))))*))+(+,-+,**)))*)*)))*++((*+****,,,---+*,+*+,0,++*)))(,03.--1+***-*-)*)+****))))+))+***+21--/.-)))**)*)***-10--,-,,+*+)))+,..,,/,,,,-,+)())***)())*++++,+)))***+*))((,+(((())(*)()()***,,---,,,+)((((,()**.*(***+))) -602 @2f378243-7a3f-4584-bfb6-6800def37547_Basecall_2D_complement CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read326_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read326_strand.fast5 ACACTAGCATCTGTCTGGCCCCGATATTTGTAGTATGTACTTTACGTGTACTGTTACTATGGTATTTTCACCCTCAGTTTGCCCTTGTCACTCGAAAGTCGAATTCAGTGTTTTAAAAGATTGTCTGGTTCTATCGGTTCCGAGCAGTTTTAATAGAACTGATCAATGAAGAAGGTTCGTTCGAGCGAACTTCCAGTGATCTTGTGAATTTGAGCTGAGGAGGAGATGAAAGAGGGAAGTAGAAGTAGAAAAATTGCATCGAAATATGGAATAAATTGTATCGTCGGTCTTGCTTTTATCTGTCAGTTATACTTCAGTAGGAGGGAGTGGGATAACGACAGCAATTAGTTCAGCCTTAGTGTTGAGGAATCTGGTTCTTTAACATCTTTGGTGGGAGGAGTGTCCTTGATTTAATATGCAGAAGTATCCTTGCTGCGAATCGTCATCATCCTTTAACAATAGGATGAAAACCGTTAAAATGCCGACAGTTGGACCTGCGAGCCGCCGGCCCGTATTCATGGGAAAGTACCGCATTAACGTGTGTCAGGCGGGACGTATTATTTCCCGTTCAGCCGATTAAGTATACAGGCACAGAGACTTCC ####"##&%##$#+%%##%#'%#$%$)-)'($%&&((,()+-'&'(($%#(&%1-$##$'$#%#'08+'$$%#"&$#&.+$%*#('%%##$$&&)))$(''($(('##+)6<4)'(*()',,(.'&%&'*($%&%##-,('#$$"$$'04)&%$#('&%%%%'$##(%%$*$'$#'''&),%$%$%$%$$$*+%$%(%%&&''%%(&%1-(%$"#%&&+**-,'&''((&#'#$&%'&%'#(&+#)*))//+&&%$%$%$%&)&&$),-*&%$$$&)%$#$'&+(#%'&''$##(2(%&$%$..('($&%%*.+'$%%%),')'()%*'&)%#&##"###&%%%'*$'++($$%#'%%"($)&#$%''&(**)$+*&)3-&%$$$#$)&$%'%)*')&&$%%&$#&($#+0&$"##%###'%(%'&(%$%(%#&$%$&$&$#%###$$&$%&+&&$$%&$$'('&(&&&#%$$'%%&'%'"%###$$#-)%#$#%'%%$&'''"&%$$'%$$)#(-*&)+09))'#'#%&%&$$(&%%%)(+()&%$('"""$"#&#'$$'./(*&&('%$#$$##'%$&$&%$"&"))##$#'$##"$)'$ -657 @2f378243-7a3f-4584-bfb6-6800def37547_Basecall_2D_template CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read326_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read326_strand.fast5 GTATTTCTTATGATATTAGATGTAGGCTGGAAATAGAATGCGTGCTTTACAGGCCTCCTCTGCGTATGTTTCCATGGAAGCCGTAGGAACCTTTGATCTTCATACTTGCCCTATTGGTGGTCGTGATTTTAATCCCAGTTCATCCTTATTTGATATAACAGGATACGGAAAGAGTTCGAAGTCGAATCGTCCAGCAAGTCGAATGACTCTAAAGACATCGGCACGGCCTTTGAGGCTCGTATATGCCTAATTCCAACAATGCAAAGTACGTGGAACAGATTTCTGCTCTTTTTTGTTCCACTCCGCCAGCCCCCCGAGGTCAGGATGAAATATTACTCTGAAAACCGCCAACCCACGGGACAGCTACGTCGAATGTCGTCGAACAGTTCTATTCCTTCCCCTCCGTTAGTACTACTCTAGGCTACTCAATTCAGGCGATAGAAGGAAAAGTCTGTACCAGGCGGGTTCTTCGGCTTTTCAATGCGCGCTGTTCTGGGGAGCTATCGCTGCAAAGAATCTTTTAAAATCGAGTCGAGTTTTCAGAGTGTTCCTCAATGTAACTGTTGGCAAAGGAGCGGGCCTGGCAGACGTGGGGAATAAGACCCCAAAACCACTTCGTGCACATCGTTCTGGTGTTCATCTGTTCTTAGCTCTTGT "##)7.'-(&&$$&#'$$$''%$%$&(),210)&&)&)+&.-+'((,%#))())&%)(')+)*+.***CC/&'$'')(*###$&%)5)1')&./%%)%++)&%$%%.#''(#%*)+&&).*)'*%$+A/'&%+%)''-;+)-'++-1)9>0()((%&%&&(')%$%#+-/&'#%+3&**/&''&'%'%$($%&$'(&'(&)*++)('&'#$$#"#"#%'$&%#$#")$&.'#&$%$$$$($&#)#%$#%,10*)%$&$,)&'"%#"%$&%1&')&%%%'-A:10/,+(*0KLI,,I330,**.,$&$'&,7255.)+(%'&&+$,%%%'$$$&&%$$&''$*)$$%#%$&$'%#$$$#"##$$%$$(#*'#$&%#&$#$$$(%&%'1)'%$/,(')3+0-,,1*)0$##'#$%$&&(#$$##"#$#'&$,(&&#$%$&$$)&+,++**(%+'&&%$$$%"$"#%$,5')(''&',:M/($&,&($%$$((7,&%%--$&$##$%$$%))$+*',.--+-3/'$')%&##&$*($''-3E3)$)'&('&)#&&())+)))('(&/*))',-&0**('&%#$##$)#'&+,,(&&&%)'%%$%&&*+&%$%"#$$$%)(()%&"#&#)&1.+,**++-C$&$$&$4(%)$$##$#$&$% diff --git a/tools/poretools/test-data/poretools-tabular-out4.tabular b/tools/poretools/test-data/poretools-tabular-out4.tabular index 2690807f14b..ce9fa1cfcb7 100644 --- a/tools/poretools/test-data/poretools-tabular-out4.tabular +++ b/tools/poretools/test-data/poretools-tabular-out4.tabular @@ -1,13 +1,5 @@ length name sequence quals 202 @b7b29e94-0894-415c-87c4-a809bc8e8bdb_Basecall_2D_2d CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read95_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read95_strand.fast5 GAAATTGCTGGTTGCTCCCCGAGGGGCCTATAAACAATCGGATAAGGGTCTAAGTCAGGGCGAAAAAGATTTGGGGGCTCCTAATCTCCGATAATGAGTGCCGCAACATACGGATAGTACCTTTATGCGTAACCGCTCCATACGACAAATAATTATTTATATACGGTACCTACGGAACCAAAATTGACAAGTTCGTACTTTT )))))+*,,*,*--,-,..---./0..++++-/-//**)*)))*,,.///---**)))*))+/,//-.,00.--)***+*+))),)*)))+).*----.--**..,-,**,**,+++++,+*+*)**+,,,**((+,,+,))()**+,++,+**+--,)(((((()(((((()(())))+,//),+--.+(())(((()((( -159 @b7b29e94-0894-415c-87c4-a809bc8e8bdb_Basecall_2D_complement CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read95_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read95_strand.fast5 ATCGACCATATTGGCTTTTTGGTTATCCTGGTCTACCTCTTGTTGTCTTGGTGGGTGCCAACAGCTATGCATCTGTTGCATCAATCGTGACGGGAAACGAGAGGACAATTTCCCGGGTTAAACATGCCGATTGTCAGCCGCGGGGGCTGGGGAGGTTCC ""$"#$$&%$(&$"#$,<0-+(-'%(#$%$&(&%$$$%'-,(0'$)%(&$"'"#"'"$#$"&#&$##&%$%'%&'00,&'%#$##$$&"####%$'#%(''$$"$"($/=,)''#$$'%%'$'$)$%&$%()''%%"%&%%%(*#(%"$&&(&##&)&$ -212 @b7b29e94-0894-415c-87c4-a809bc8e8bdb_Basecall_2D_template CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read95_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read95_strand.fast5 CTTCTGTTGTGGTGCTCTTGCTCCCCAGGGGCCTATAAACGTGCACATAGGGTCTAAGTCAGCGAAAAAGATTTGAGGCTCCCGTATAGATAATGGATCCCCTCAGCCCTAGCTGACCGTCATCCGTAACGCCTCCATACATAAATAATTATTTAGCTCTAGTACACCCAGGCGGATCGCTTCTGGTTTTATATTTCTTGATTACTGATGCA "#')-,;42;7<8544/22.**)-(*()*(')%%&''-*0..+)%%$"'%'*/'%%&$&$%&##$%%(%)%/4)&#&'#$#$#$*#$"#&$$#'&$#*$%&##(&"*%)%&$&&&**(&(%%(%%),-%&%')*/,,(((%$%'$##","#,2''#$$('('*()(+)''&*)%$'(%#&%4.01-17;2&&$'12'')"%)&#$#"$)&'# 413 @935c5941-a78e-4959-923e-f71157063e92_Basecall_2D_2d CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read430_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read430_strand.fast5 GCTTCTTCTGCTTATATTGCTTAGAAGGAAATACGAGAGGAGAAAGAGTAGATGATGATAAAGGGTCGACTAATTATTTCCGAAGTTTGTTAAAGTCGAAATCGCTTCGAATTTGAAATTGTTGCTGACGCAAGTTAGCGATGCGCGATCCCAGGAGTATAGGGGTTGAAAACGGTTCCATTTGATAAGGTTTTCCATTAATGACGTCACGTTGTTTGGTATTTCCTTCTATTTTCTCCGAAGCGCCCCTCTCTCTCTCATCTCACGTCAGATTCAATTTTATTACAACAAATGTGAAAAGTGGGTTCGCAGAGGTCGCTTAAGCCATTTTCTTAGATACAGCTTGAAAACGAATCTACAGAACAAATCTCCTGCCATTACACTCAGAGTCATGACGGTCGTGTTTATAGAGT ))****-+.,,,++,,-,...-*++/,0.1,++,,..-0/)+-/,----,+,,,-,--,-+****+**+**+-.-.0500-.0-,,+*,.,,,,+-*+./.++,.////10+/,/03/10/.0..-*--./0001.--.++../////0--,./0//****.//..--).0-,-*,,+*)10,+-+++,,./+,+++*)+-++++**)))*))*)+*+,*,.0,.+,****,--)))*)()+(*))))))))**,,,,*))((*))**))(*++(+*-,-,())))**+-0-*****./,)****-0/..,-,,.--,-+,****-./680/--*)+000/.//-,/03/..0--.*,++*+*)**)*)*++++.//0/,++**+))*+++*)))**++-,-,3520...**) -376 @935c5941-a78e-4959-923e-f71157063e92_Basecall_2D_complement CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read430_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read430_strand.fast5 ACTCTAACTCAGGCTGGTATCTGAGTGTAATGGCGCAGTTGTCTGTAGGGTCGTTCAAGCTGTATCAAGAAATGAGTAAGCGAAAACCTGCGAGCCGATTTTCGCTTTGTTTAGTAAGGTTAGTGACGTGAGGGTGAGAGAGAGAGAGAGCGTTCGGAGAAAATAGAAGGAGAACCCAAACAACGTGACGTCATTGATGAAAACCTTATCGGGAACCCGTTTCAACCCCTATACTCCTCGGCGCGTAGGCTAACTGCGTAGCAACATTCAATTCAGCAGTTTTCCTGTCAGCGACTTCGGAAGCTTAGTCAACAGTGTTTATCAGCTCCTCTTCCTCTCGTATTTCGTTCAAGCAATATAGCAGAGGCGCCTGTCC "$###$$$#%#$"###$'###$"&'.)*(*+,-)$%$&/&$1(*),&&%%('$1)%##%%))+((%#$+&*%&&%$%%'(*,--+()$+-+),#*'%')4:*'$$*:,')'#%#%$&%$+++$*%$'&&)&&&&')'+*-,+*'&*$)%'&&'')'*)+,--'&&'$)(2&$)%%&(&&$&%#%%)$%&&((*(+$')(&(%##'+,+,)'((%%$%(*02*')&))+'"%$%%&'$#&%$$(#$&$%%##'&&,*))*((&%#(%*,(*(**$'()%#*=?/-&*)*(##&%'&+,(+*,)%'&*+*+('%($#'#*2+('%$$$&&%#$(+(('''(')'+30,$)*'((*('&&%#$$%%&%''$'$%&&1/$ -373 @935c5941-a78e-4959-923e-f71157063e92_Basecall_2D_template CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch128_read430_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read430_strand.fast5 CATTCTTTGGTGCTGATCCTGCGAGGAGAGGGGGAGGGGAACAATGGTAGCCACTAAATCTATAACAATTATTTCAGAAGTTGTCCGCTTGAATCATTCATTTGAAATTGTTAGTGACGCAAGTTAATGCGCGATCCCAGGAGCGGGCTCGTCCAGTTTACAATTGTCCATGCGTAGTCAGTTGTTATGTTGATTCCTGTTACCGATAGGGTATATAACGCTCCTAGTCGATTCGATTTGCTTGGCGCCATCCAAGTATTCCAGAGTCCTTAGCATTTTCTTAATGGCACGTGAAAACGAATCCCCTAAGAGCCACTTATCACGTCCGATTACATACTCCAGTCATGACGCTTCTGTTTATGTTTCTTAACCA ##''$%)0%%)$&''',&'(&&$-+*-'('*+(('$$&#'#$%$%##$$#%$$#"$%$'$##$%"%#%)&$,5+($),,*0(&,####&)()(**)+)&$&,$&%1,3-*.''#'#$'('/*)+&&&+$&'%()*((%%)$&$#####"$%3%)')5/($$##&*$0%&()#$%%$$&'%(+%&-)%&%,-##((%$%&)*%&&#%""####"#"$$##""#('#$''$$&)0(&(.//$$&&###%&&+%('&%##%+)&&'%$#&%#%$#"(%/FA/+,(&'##$&%%#(&%*1)*()'())*("#$$(%%(&%*%$$$"$#($%##+$$%$####%$'&((&&$$%$)'1.+*:7,))',7&%)#$#$$# 523 @e643ceef-570f-4ba7-bdae-e9e78da71703_Basecall_2D_2d CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read1377_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read1377_strand.fast5 ATGTTTCTTCAGTGATACCTGTGACATCCGGAAAGGAGGAGGAGGATCAGAAAGGAGGAGTGTGACATAACGCTGACAGTGCGTGCTTAGGTTCGTTAATAAACAAAGCCATATTACGGAGATGGCGTAATCACCTACGATGAAAGTGGTCACGTACGCGTGCCACCTGGGCATCGTCCTCACCCCTTCATTAAATTACAGGCTTTTGACTCCTTCAACCTTCTCGTTGTAATTGGTTAGTACTTATCCTATCTTATTCGCGATCGGCGTTCGATTGGATTTCGCTTCGAATGTAATCCGTATGCGCAATACAAATATTTGAGCTAATTTCCTCTCTTTACGTAATCGTTTTCGTCACCGTCGTCAATTATCGATACGGGAATCAAGTCGAACGAACCCCTGACCGAGAATCAGAAAAACTTTCAGAAGAAAAAGGAAGAAGAGAAAGCTCTTTCACATTGTAAACCAAACGCGAAAGCTCCCGAAAACAAAGGGCGGCGATTCTAAACATTTGGTTTATGTT (((*-,+,,,++*()(())*-)),....+/-,.),-++--./-,))*()))+*+*)*-*,**)())((*)(*()(*--+**)()()*(())))*,--*,+,.,---+)+))()**((())*+,-/./,--,++****+,+,,-02.///..-.--...,,))))))*++,+*++,+++*)*++-+*+**)+++**+)))(((())+*()((()(()))))))((((),-./--+*)))((((()((((((*+,,+,*+*,++++****,1.+*++,+,-.2-,+,-,+*,*.-.1/----*+,*+**++***./.-+*-+))))*,,-/*-*****-,*))))**,+++-,++++*+*,-../.-,**)*)+******-+,+)*++*+-.//../..,,+,..+.)+-+,))*+*++,+*,----.//-0662.-,--.-0.../.,+))-,2/.-++*****+**++++-+-...+,+*****,,.,+*.+,,,++*)))+/.,-10,+***)**++***+* -464 @e643ceef-570f-4ba7-bdae-e9e78da71703_Basecall_2D_complement CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read1377_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read1377_strand.fast5 GAACACAACTGTTTCCCAGTACACGCTTTGTTTAAGCTTTCGCGTTGGTTCCATGTGAAGAGCTTCTGTTCTTCCTTTTTTGGTATGAAAGTTTTAGTTCTCTTCAGAGTCGTCCCACTTGATGTCCCGTATCGCTTGTGGACATTGTAGAAATGATCGTAAGGGCAGAGGAATTAATTAAAACTTTGTGGTGCCATCCCATTACGGTCGAGCGAATCCAGTAGCACCAGTACCCAGTAAGAACGAACCCTGAGCCAATTACACAGAAGGTTGAAGGAGTCAAGCTGTAGTTGGAAGGGGTGAAGGTCCGCACAAGATTCGATCCTCGTTATCGTACCTGATTACACATCTCTGCGTGATATGATGATTCTTTATTAGCAACCGAGCACGCACTGTTGGCGTTATGTTCGGATACTACGGTCTATCCTCTCAAACGGTCCAGCTCCCAACATCGGCGTCAGTCA #"#$"$%%#$#*3.$%&%$(#$%#$#'-,(4*$#$$%(2+'&%%*.%%,:'%&,)*,'%(%%$*,'''(*(%,'%)2>B>/'#$$&&$)+%/;,&#$()'&'&&($%#$(&&*&$$$#%%$$'&)+%&$)#%$##%'%&%#$$#&-%##&$&$#$#%$$$%&##&$$$&,-('(###'$')'#$+14(&$$($%$%#$&#'*+)*%)+$$&%$'&&(%&&%)"%$$'&%#)#%'#'$'%'(%&%%&%&%#$###&#&'+&####$($$$#'*)(+,-*$)&&'$&%$$$$((%+'&&$%#''$$$#&$%%$#$$$,%(*&"#&###(&*$%%%$&#$$%$&)+()$(&'$%$$##$)"&$#$##$&#&.#&1)&(%%'%&#'%#&&&%$&%$%(',('('&)+&%%-&#"$#%$%$$'$$,)(),'%%$$$###'##*((%(%%'%#$##"%##$(*-)&'&%# -494 @e643ceef-570f-4ba7-bdae-e9e78da71703_Basecall_2D_template CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read1377_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read1377_strand.fast5 TTGTGTTTCTTCTTATGACTTGCTATGCGCAGGGGGGAGGAGAGATGTAGCGGAGGGCAGAGTGTGAAAGGGGTAGTTCATTATGCTGTCGTTAAGCCTCCGGGGCTATTGAAAACGATGAATGGGGCCAGGCGCTGGTCACGTACACGTGCGACACTGATGAAACGTTCCTCACCATTCATTAAATTACCGGCTTTTAAACGTGAACATGCTGTTGTAATTCTTCATGGTGGTGTAATGTACTTAGCAGTAGCGTTCAATTGGATTTCGCTTCGAATGTAGTCGATCTGCGCATCCACTGGTCGACGATTTCCTCTCTTTACTGATCGTAGTTCGTCACGTCGTCGTACGATAGGATCAAAGTCGCGGGATGGCTATCCCCGGGCGAACTTTCCAGAGAAGGAAGAAGAAAGACCTTTCGGCTTGTAGTAAGACCCCGAAGACTCGAAAACAGGGCAACGCGAATTCCACTTCGTTATGTTCTTACTATTGGA #$$*)*8+$()&(%%$#$#&'$#"%%#$($+&,&(-(',.,*%$%%$$$"$$('%%'&('%%%%%$##$#$$"$#$%&%$&$#'$$#$)''+&$%"&##($#$$###$*&*$&(%%$&($&$&"###%$$#&"#!%$$($$%$'$&%&'*%&$#$#$%$$$($/$/.2)'$#%#%(#**)%)&'$#)%#%''(%')0'$%#$$'$&#$#&$&$&,2-,/%1,"%*%%$#%&##%%&)((('&%(&&%'*%&'$((-:'%(**)((/5)%$&,,*%)#'%$$#&$"#'$)$&%%%#$$%#$#"'$"#$"$17)&##%&')3'##$$$$$#%#%+)'&)&#+*,)&'%%&#%#%#$*%&%$%%##&&#%%'#'#$$%##$%)$'%%'%#'$#)48$$#%#'#*)-,,))')((%#$#&&-'(##'%*%$&"""$#$#')%$'($$#"'$&&)$&'%(*&%%'$$)+)6*(#%#%'%&*,)(&3*$%'$%%$(,,&# 692 @2f378243-7a3f-4584-bfb6-6800def37547_Basecall_2D_2d CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read326_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read326_strand.fast5 CATGTTTCTGCTGATATTGCTAATGGCTGAACTGGAAATAAGGATCCGTTGCTTGCCAACAACTATACTGCGTGGTATTTTCCCAGTGGAAAGATCGGGAACCTTTGATCTTCAATATAGTTACAATTGGTGGTCGTGATTTTAATCCCAGTTCATCCTTATTTTGGGTATAACAGGATGAGGAGGACGATTCGAAGTCACGATCATGCGCCCAAGTCAGAATGACTCCACACTACTCCTCCTCAGGACCATTTATAAATAAACAGTGATCAAGATTCCAACAATTAAGATGGCTTGAAACCAATTTCTGCTCTTGTTTTTGTTCCCACTCCCCCCTCCCCCCGAGGTCAGGATGAAGTATTAACTCTGAAGATAAAGGACCCCACGACGACAACGGCTTCCAGTTACTTCGAAGGCATTTTTCTACTTCTACTTCCCCTCCGTCTCATCCTCCTCCTCAGCTACCAAATTCACAATAGGACCGCAGGAAAAGTCTGTAGCGAATAGAACCTTCTTCACTACGGTTTCGTACCTAAAATGTTCTGGAAAAATGGATAGAAAAGAATCTTTTAAAATCGAAATCCGATTTTCGGAGTGTTAACAATGTAACTGTTGTAGAAAAGGAGCGGTAAATGAGACGTGGGGAATAAGATACAGAGCAACCACTGTCGTTAAGGACCGTTTGAGTGTTT ))))+-*)*)+**++**+)*)*,-,,+++-+++/./20.//.+...*.,-,--+***,+++++**+++,.//.,++,.54.320/--.,-.++-.,,.-++++*,+,-./0/.0000/..0-,----/.----,+++++,00.//./.++*+//0.//00/285/+*+**+-,,,,,-,**,,,+--00*0/)*.,+,+.,,,+++,,-+*,*+-+,+,--..,+****)**+++,+++***)*+)**)-,.20//02-))**++*+**+*+**-/0./-,,,--))*))++)+*++..,,+-./.+++++,++++,025-,5.-/,-//0/---,,.43430,,-+,+,.,/..-.+***)))))..//-+,***)))+)++))),***)**))(())--.-())((,((*(*(((*+-0/---,*/**)*,-/.0.-,.,++)*,+,,-,--,-,+++**))**,+*+*))))*))))*))+(+,-+,**)))*)*)))*++((*+****,,,---+*,+*+,0,++*)))(,03.--1+***-*-)*)+****))))+))+***+21--/.-)))**)*)***-10--,-,,+*+)))+,..,,/,,,,-,+)())***)())*++++,+)))***+*))((,+(((())(*)()()***,,---,,,+)((((,()**.*(***+))) -602 @2f378243-7a3f-4584-bfb6-6800def37547_Basecall_2D_complement CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read326_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read326_strand.fast5 ACACTAGCATCTGTCTGGCCCCGATATTTGTAGTATGTACTTTACGTGTACTGTTACTATGGTATTTTCACCCTCAGTTTGCCCTTGTCACTCGAAAGTCGAATTCAGTGTTTTAAAAGATTGTCTGGTTCTATCGGTTCCGAGCAGTTTTAATAGAACTGATCAATGAAGAAGGTTCGTTCGAGCGAACTTCCAGTGATCTTGTGAATTTGAGCTGAGGAGGAGATGAAAGAGGGAAGTAGAAGTAGAAAAATTGCATCGAAATATGGAATAAATTGTATCGTCGGTCTTGCTTTTATCTGTCAGTTATACTTCAGTAGGAGGGAGTGGGATAACGACAGCAATTAGTTCAGCCTTAGTGTTGAGGAATCTGGTTCTTTAACATCTTTGGTGGGAGGAGTGTCCTTGATTTAATATGCAGAAGTATCCTTGCTGCGAATCGTCATCATCCTTTAACAATAGGATGAAAACCGTTAAAATGCCGACAGTTGGACCTGCGAGCCGCCGGCCCGTATTCATGGGAAAGTACCGCATTAACGTGTGTCAGGCGGGACGTATTATTTCCCGTTCAGCCGATTAAGTATACAGGCACAGAGACTTCC ####"##&%##$#+%%##%#'%#$%$)-)'($%&&((,()+-'&'(($%#(&%1-$##$'$#%#'08+'$$%#"&$#&.+$%*#('%%##$$&&)))$(''($(('##+)6<4)'(*()',,(.'&%&'*($%&%##-,('#$$"$$'04)&%$#('&%%%%'$##(%%$*$'$#'''&),%$%$%$%$$$*+%$%(%%&&''%%(&%1-(%$"#%&&+**-,'&''((&#'#$&%'&%'#(&+#)*))//+&&%$%$%$%&)&&$),-*&%$$$&)%$#$'&+(#%'&''$##(2(%&$%$..('($&%%*.+'$%%%),')'()%*'&)%#&##"###&%%%'*$'++($$%#'%%"($)&#$%''&(**)$+*&)3-&%$$$#$)&$%'%)*')&&$%%&$#&($#+0&$"##%###'%(%'&(%$%(%#&$%$&$&$#%###$$&$%&+&&$$%&$$'('&(&&&#%$$'%%&'%'"%###$$#-)%#$#%'%%$&'''"&%$$'%$$)#(-*&)+09))'#'#%&%&$$(&%%%)(+()&%$('"""$"#&#'$$'./(*&&('%$#$$##'%$&$&%$"&"))##$#'$##"$)'$ -657 @2f378243-7a3f-4584-bfb6-6800def37547_Basecall_2D_template CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read326_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read326_strand.fast5 GTATTTCTTATGATATTAGATGTAGGCTGGAAATAGAATGCGTGCTTTACAGGCCTCCTCTGCGTATGTTTCCATGGAAGCCGTAGGAACCTTTGATCTTCATACTTGCCCTATTGGTGGTCGTGATTTTAATCCCAGTTCATCCTTATTTGATATAACAGGATACGGAAAGAGTTCGAAGTCGAATCGTCCAGCAAGTCGAATGACTCTAAAGACATCGGCACGGCCTTTGAGGCTCGTATATGCCTAATTCCAACAATGCAAAGTACGTGGAACAGATTTCTGCTCTTTTTTGTTCCACTCCGCCAGCCCCCCGAGGTCAGGATGAAATATTACTCTGAAAACCGCCAACCCACGGGACAGCTACGTCGAATGTCGTCGAACAGTTCTATTCCTTCCCCTCCGTTAGTACTACTCTAGGCTACTCAATTCAGGCGATAGAAGGAAAAGTCTGTACCAGGCGGGTTCTTCGGCTTTTCAATGCGCGCTGTTCTGGGGAGCTATCGCTGCAAAGAATCTTTTAAAATCGAGTCGAGTTTTCAGAGTGTTCCTCAATGTAACTGTTGGCAAAGGAGCGGGCCTGGCAGACGTGGGGAATAAGACCCCAAAACCACTTCGTGCACATCGTTCTGGTGTTCATCTGTTCTTAGCTCTTGT "##)7.'-(&&$$&#'$$$''%$%$&(),210)&&)&)+&.-+'((,%#))())&%)(')+)*+.***CC/&'$'')(*###$&%)5)1')&./%%)%++)&%$%%.#''(#%*)+&&).*)'*%$+A/'&%+%)''-;+)-'++-1)9>0()((%&%&&(')%$%#+-/&'#%+3&**/&''&'%'%$($%&$'(&'(&)*++)('&'#$$#"#"#%'$&%#$#")$&.'#&$%$$$$($&#)#%$#%,10*)%$&$,)&'"%#"%$&%1&')&%%%'-A:10/,+(*0KLI,,I330,**.,$&$'&,7255.)+(%'&&+$,%%%'$$$&&%$$&''$*)$$%#%$&$'%#$$$#"##$$%$$(#*'#$&%#&$#$$$(%&%'1)'%$/,(')3+0-,,1*)0$##'#$%$&&(#$$##"#$#'&$,(&&#$%$&$$)&+,++**(%+'&&%$$$%"$"#%$,5')(''&',:M/($&,&($%$$((7,&%%--$&$##$%$$%))$+*',.--+-3/'$')%&##&$*($''-3E3)$)'&('&)#&&())+)))('(&/*))',-&0**('&%#$##$)#'&+,,(&&&%)'%%$%&&*+&%$%"#$$$%)(()%&"#&#)&1.+,**++-C$&$$&$4(%)$$##$#$&$% diff --git a/tools/poretools/test-data/poretools-times-out2.tabular b/tools/poretools/test-data/poretools-times-out2.tabular deleted file mode 100644 index 20e6a4107a1..00000000000 --- a/tools/poretools/test-data/poretools-times-out2.tabular +++ /dev/null @@ -1,5 +0,0 @@ -channel filename read_length exp_starttime unix_timestamp duration unix_timestamp_end iso_timestamp day hour minute -128 .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read95_strand.fast5 202 1457127309 1457127626 1 1457127627 2016-03-04T21:40:26+0000 04 21 40 -128 .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read430_strand.fast5 413 1457127309 1457129549 4 1457129553 2016-03-04T22:12:29+0000 04 22 12 -126 .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read1377_strand.fast5 523 1457127309 1457148908 5 1457148913 2016-03-05T03:35:08+0000 05 03 35 -126 .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read326_strand.fast5 692 1457127309 1457129771 6 1457129777 2016-03-04T22:16:11+0000 04 22 16 diff --git a/tools/poretools/test-data/poretools-times-out3.tabular b/tools/poretools/test-data/poretools-times-out3.tabular deleted file mode 100644 index 20e6a4107a1..00000000000 --- a/tools/poretools/test-data/poretools-times-out3.tabular +++ /dev/null @@ -1,5 +0,0 @@ -channel filename read_length exp_starttime unix_timestamp duration unix_timestamp_end iso_timestamp day hour minute -128 .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read95_strand.fast5 202 1457127309 1457127626 1 1457127627 2016-03-04T21:40:26+0000 04 21 40 -128 .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read430_strand.fast5 413 1457127309 1457129549 4 1457129553 2016-03-04T22:12:29+0000 04 22 12 -126 .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read1377_strand.fast5 523 1457127309 1457148908 5 1457148913 2016-03-05T03:35:08+0000 05 03 35 -126 .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read326_strand.fast5 692 1457127309 1457129771 6 1457129777 2016-03-04T22:16:11+0000 04 22 16 diff --git a/tools/poretools/test-data/poretools-times-out4.tabular b/tools/poretools/test-data/poretools-times-out4.tabular deleted file mode 100644 index 20e6a4107a1..00000000000 --- a/tools/poretools/test-data/poretools-times-out4.tabular +++ /dev/null @@ -1,5 +0,0 @@ -channel filename read_length exp_starttime unix_timestamp duration unix_timestamp_end iso_timestamp day hour minute -128 .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read95_strand.fast5 202 1457127309 1457127626 1 1457127627 2016-03-04T21:40:26+0000 04 21 40 -128 .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read430_strand.fast5 413 1457127309 1457129549 4 1457129553 2016-03-04T22:12:29+0000 04 22 12 -126 .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read1377_strand.fast5 523 1457127309 1457148908 5 1457148913 2016-03-05T03:35:08+0000 05 03 35 -126 .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read326_strand.fast5 692 1457127309 1457129771 6 1457129777 2016-03-04T22:16:11+0000 04 22 16 diff --git a/tools/poretools/test-data/poretools-times-out5.tabular b/tools/poretools/test-data/poretools-times-out5.tabular deleted file mode 100644 index 20e6a4107a1..00000000000 --- a/tools/poretools/test-data/poretools-times-out5.tabular +++ /dev/null @@ -1,5 +0,0 @@ -channel filename read_length exp_starttime unix_timestamp duration unix_timestamp_end iso_timestamp day hour minute -128 .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read95_strand.fast5 202 1457127309 1457127626 1 1457127627 2016-03-04T21:40:26+0000 04 21 40 -128 .poretools_tmp/test-data/2016_3_4_3507_1_ch128_read430_strand.fast5 413 1457127309 1457129549 4 1457129553 2016-03-04T22:12:29+0000 04 22 12 -126 .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read1377_strand.fast5 523 1457127309 1457148908 5 1457148913 2016-03-05T03:35:08+0000 05 03 35 -126 .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read326_strand.fast5 692 1457127309 1457129771 6 1457129777 2016-03-04T22:16:11+0000 04 22 16 diff --git a/tools/poretools/test-data/poretools-winner-out1.tabular b/tools/poretools/test-data/poretools-winner-out1.tabular index 0e759ce8aff..a14bf89a29c 100644 --- a/tools/poretools/test-data/poretools-winner-out1.tabular +++ b/tools/poretools/test-data/poretools-winner-out1.tabular @@ -1,2 +1,2 @@ ->2f378243-7a3f-4584-bfb6-6800def37547_Basecall_2D_2d CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read326_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read326_strand.fast5 -CATGTTTCTGCTGATATTGCTAATGGCTGAACTGGAAATAAGGATCCGTTGCTTGCCAACAACTATACTGCGTGGTATTTTCCCAGTGGAAAGATCGGGAACCTTTGATCTTCAATATAGTTACAATTGGTGGTCGTGATTTTAATCCCAGTTCATCCTTATTTTGGGTATAACAGGATGAGGAGGACGATTCGAAGTCACGATCATGCGCCCAAGTCAGAATGACTCCACACTACTCCTCCTCAGGACCATTTATAAATAAACAGTGATCAAGATTCCAACAATTAAGATGGCTTGAAACCAATTTCTGCTCTTGTTTTTGTTCCCACTCCCCCCTCCCCCCGAGGTCAGGATGAAGTATTAACTCTGAAGATAAAGGACCCCACGACGACAACGGCTTCCAGTTACTTCGAAGGCATTTTTCTACTTCTACTTCCCCTCCGTCTCATCCTCCTCCTCAGCTACCAAATTCACAATAGGACCGCAGGAAAAGTCTGTAGCGAATAGAACCTTCTTCACTACGGTTTCGTACCTAAAATGTTCTGGAAAAATGGATAGAAAAGAATCTTTTAAAATCGAAATCCGATTTTCGGAGTGTTAACAATGTAACTGTTGTAGAAAAGGAGCGGTAAATGAGACGTGGGGAATAAGATACAGAGCAACCACTGTCGTTAAGGACCGTTTGAGTGTTT +>2f378243-7a3f-4584-bfb6-6800def37547_Basecall_2D_template CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read326_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read326_strand.fast5 +GTATTTCTTATGATATTAGATGTAGGCTGGAAATAGAATGCGTGCTTTACAGGCCTCCTCTGCGTATGTTTCCATGGAAGCCGTAGGAACCTTTGATCTTCATACTTGCCCTATTGGTGGTCGTGATTTTAATCCCAGTTCATCCTTATTTGATATAACAGGATACGGAAAGAGTTCGAAGTCGAATCGTCCAGCAAGTCGAATGACTCTAAAGACATCGGCACGGCCTTTGAGGCTCGTATATGCCTAATTCCAACAATGCAAAGTACGTGGAACAGATTTCTGCTCTTTTTTGTTCCACTCCGCCAGCCCCCCGAGGTCAGGATGAAATATTACTCTGAAAACCGCCAACCCACGGGACAGCTACGTCGAATGTCGTCGAACAGTTCTATTCCTTCCCCTCCGTTAGTACTACTCTAGGCTACTCAATTCAGGCGATAGAAGGAAAAGTCTGTACCAGGCGGGTTCTTCGGCTTTTCAATGCGCGCTGTTCTGGGGAGCTATCGCTGCAAAGAATCTTTTAAAATCGAGTCGAGTTTTCAGAGTGTTCCTCAATGTAACTGTTGGCAAAGGAGCGGGCCTGGCAGACGTGGGGAATAAGACCCCAAAACCACTTCGTGCACATCGTTCTGGTGTTCATCTGTTCTTAGCTCTTGT diff --git a/tools/poretools/test-data/poretools-winner-out2.tabular b/tools/poretools/test-data/poretools-winner-out2.tabular index 0e759ce8aff..4152bfa0d53 100644 --- a/tools/poretools/test-data/poretools-winner-out2.tabular +++ b/tools/poretools/test-data/poretools-winner-out2.tabular @@ -1,2 +1,2 @@ ->2f378243-7a3f-4584-bfb6-6800def37547_Basecall_2D_2d CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read326_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read326_strand.fast5 -CATGTTTCTGCTGATATTGCTAATGGCTGAACTGGAAATAAGGATCCGTTGCTTGCCAACAACTATACTGCGTGGTATTTTCCCAGTGGAAAGATCGGGAACCTTTGATCTTCAATATAGTTACAATTGGTGGTCGTGATTTTAATCCCAGTTCATCCTTATTTTGGGTATAACAGGATGAGGAGGACGATTCGAAGTCACGATCATGCGCCCAAGTCAGAATGACTCCACACTACTCCTCCTCAGGACCATTTATAAATAAACAGTGATCAAGATTCCAACAATTAAGATGGCTTGAAACCAATTTCTGCTCTTGTTTTTGTTCCCACTCCCCCCTCCCCCCGAGGTCAGGATGAAGTATTAACTCTGAAGATAAAGGACCCCACGACGACAACGGCTTCCAGTTACTTCGAAGGCATTTTTCTACTTCTACTTCCCCTCCGTCTCATCCTCCTCCTCAGCTACCAAATTCACAATAGGACCGCAGGAAAAGTCTGTAGCGAATAGAACCTTCTTCACTACGGTTTCGTACCTAAAATGTTCTGGAAAAATGGATAGAAAAGAATCTTTTAAAATCGAAATCCGATTTTCGGAGTGTTAACAATGTAACTGTTGTAGAAAAGGAGCGGTAAATGAGACGTGGGGAATAAGATACAGAGCAACCACTGTCGTTAAGGACCGTTTGAGTGTTT +>2f378243-7a3f-4584-bfb6-6800def37547_Basecall_2D_complement CPHG_CNU4299G4G_louse_library_2016_3_4_3507_1_ch126_read326_strand .poretools_tmp/test-data/2016_3_4_3507_1_ch126_read326_strand.fast5 +ACACTAGCATCTGTCTGGCCCCGATATTTGTAGTATGTACTTTACGTGTACTGTTACTATGGTATTTTCACCCTCAGTTTGCCCTTGTCACTCGAAAGTCGAATTCAGTGTTTTAAAAGATTGTCTGGTTCTATCGGTTCCGAGCAGTTTTAATAGAACTGATCAATGAAGAAGGTTCGTTCGAGCGAACTTCCAGTGATCTTGTGAATTTGAGCTGAGGAGGAGATGAAAGAGGGAAGTAGAAGTAGAAAAATTGCATCGAAATATGGAATAAATTGTATCGTCGGTCTTGCTTTTATCTGTCAGTTATACTTCAGTAGGAGGGAGTGGGATAACGACAGCAATTAGTTCAGCCTTAGTGTTGAGGAATCTGGTTCTTTAACATCTTTGGTGGGAGGAGTGTCCTTGATTTAATATGCAGAAGTATCCTTGCTGCGAATCGTCATCATCCTTTAACAATAGGATGAAAACCGTTAAAATGCCGACAGTTGGACCTGCGAGCCGCCGGCCCGTATTCATGGGAAAGTACCGCATTAACGTGTGTCAGGCGGGACGTATTATTTCCCGTTCAGCCGATTAAGTATACAGGCACAGAGACTTCC From 3d29c24dd45a3d69b784c8b5762d357eda4a4a7f Mon Sep 17 00:00:00 2001 From: Lucille Delisle Date: Thu, 26 Sep 2024 13:13:23 +0200 Subject: [PATCH 16/36] improve docstrings --- tools/idr_download/idr_download_by_ids.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/tools/idr_download/idr_download_by_ids.py b/tools/idr_download/idr_download_by_ids.py index bd7d42e6264..465f045fb24 100644 --- a/tools/idr_download/idr_download_by_ids.py +++ b/tools/idr_download/idr_download_by_ids.py @@ -15,9 +15,9 @@ def warn(message, image_identifier, warn_skip=False): - """Print an error message to stderr and - - prefix with the image identifier - - suffix with 'Skipping download!' if warn_skip is True + """Print an error `message` to stderr and + - prefix with the `image_identifier` + - suffix with 'Skipping download!' if `warn_skip` is True Args: message (string): Message to print to stderr @@ -39,7 +39,7 @@ def warn(message, image_identifier, warn_skip=False): def find_channel_index(image, channel_name): - """Identify the channel index from the image and the channel name + """Identify the channel index from the `image` and the `channel_name` Args: image (omero.gateway._ImageWrapper): image wrapper on which the channel should be identified @@ -66,7 +66,7 @@ def find_channel_index(image, channel_name): def get_clipping_region(image, x, y, w, h): - """Check x,y and adjust w,h to image size to be able to crop the image with these coordinates + """Check `x`, `y` and adjust `w`, `h` to image size to be able to crop the `image` with these coordinates Args: image (omero.gateway._ImageWrapper): image wrapper on which region want to be cropped @@ -109,7 +109,7 @@ def get_clipping_region(image, x, y, w, h): def confine_plane(image, z): - """Adjust/Confine z to be among the possible z for the image + """Adjust/Confine `z` to be among the possible z for the `image` Args: image (omero.gateway._ImageWrapper): image wrapper for which the z is adjusted @@ -128,7 +128,7 @@ def confine_plane(image, z): def confine_frame(image, t): - """Adjust/Confine t to be among the possible t for the image + """Adjust/Confine `t` to be among the possible t for the `image` Args: image (omero.gateway._ImageWrapper): image wrapper for which the t is adjusted @@ -147,7 +147,7 @@ def confine_frame(image, t): def get_image_array(image, tile, z, c, t): - """Get a 2D numpy array from an image wrapper for a given tile, z, c, t + """Get a 2D numpy array from an `image` wrapper for a given `tile`, `z`, `c`, `t` Args: image (omero.gateway._ImageWrapper): image wrapper from which values are taken @@ -171,7 +171,7 @@ def get_image_array(image, tile, z, c, t): def get_full_image_array(image): - """Get a 5D numpy array with all values from an image wrapper + """Get a 5D numpy array with all values from an `image` wrapper Args: image (omero.gateway._ImageWrapper): image wrapper from which values are taken @@ -232,7 +232,7 @@ def download_image_data( - a 2D cropped region or - a hyperstack written in a tiff file - the original image uploaded in omero - Optionally, th final file can be in a tar + Optionally, the final file can be in a tar Args: image_ids_or_dataset_id (list of string): Can be either a list with a single id (int) of a dataset or a list with images ids (int) or images ids prefixed by 'image-' @@ -546,7 +546,7 @@ def download_image_data( def _center_to_ul(center_x, center_y, width, height): - """Convert the center coordinates, width, height to upper left coordinates, width, height + """Convert the center coordinates (`center_x`, `center_y`), `width`, `height` to upper left coordinates, width, height Args: center_x (int): x coordinate of center From 03ed6ceb3d222f1059e96823ecc51a9290662ece Mon Sep 17 00:00:00 2001 From: Martin Cech Date: Thu, 26 Sep 2024 13:34:12 +0200 Subject: [PATCH 17/36] add more lineargap examples to axtchain --- tools/ucsc_tools/ucsc_axtchain/axtchain.xml | 27 +++++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/tools/ucsc_tools/ucsc_axtchain/axtchain.xml b/tools/ucsc_tools/ucsc_axtchain/axtchain.xml index ebcf2c838fd..06a15410cb6 100644 --- a/tools/ucsc_tools/ucsc_axtchain/axtchain.xml +++ b/tools/ucsc_tools/ucsc_axtchain/axtchain.xml @@ -72,17 +72,28 @@ `axtChain`_ is a tool to chain together alignments in `axt`_ format. The `chain`_ format describes a pairwise alignment that allow gaps in both sequences simultaneously. +For implementation details see axtChain's `source code`_. -sample linearGap file (loose):: +linearGap defaults: - tablesize 11 - smallSize 111 - position 1 2 3 11 111 2111 12111 32111 72111 152111 252111 - qGap 325 360 400 450 600 1100 3600 7600 15600 31600 56600 - tGap 325 360 400 450 600 1100 3600 7600 15600 31600 56600 - bothGap 625 660 700 750 900 1400 4000 8000 16000 32000 57000 +loose:: + + tablesize 11 + smallSize 111 + position 1 2 3 11 111 2111 12111 32111 72111 152111 252111 + qGap 325 360 400 450 600 1100 3600 7600 15600 31600 56600 + tGap 325 360 400 450 600 1100 3600 7600 15600 31600 56600 + bothGap 625 660 700 750 900 1400 4000 8000 16000 32000 57000 + +medium:: + + tableSize 11 + smallSize 111 + position 1 2 3 11 111 2111 12111 32111 72111 152111 252111 + qGap 350 425 450 600 900 2900 22900 57900 117900 217900 317900 + tGap 350 425 450 600 900 2900 22900 57900 117900 217900 317900 + bothGap 750 825 850 1000 1300 3300 23300 58300 118300 218300 318300 -For implementation details see axtChain's `source code`_. .. _axtChain: http://hgdownload.cse.ucsc.edu/admin/exe/linux.x86_64/FOOTER.txt .. _chain: https://genome.ucsc.edu/goldenPath/help/chain.html From f3b73864fc34568226f758ef617ff124162692a0 Mon Sep 17 00:00:00 2001 From: Lucille Delisle Date: Thu, 26 Sep 2024 13:34:23 +0200 Subject: [PATCH 18/36] add typing --- tools/idr_download/idr_download_by_ids.py | 78 +++++++++++------------ 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/tools/idr_download/idr_download_by_ids.py b/tools/idr_download/idr_download_by_ids.py index 465f045fb24..963dc0e94b0 100644 --- a/tools/idr_download/idr_download_by_ids.py +++ b/tools/idr_download/idr_download_by_ids.py @@ -10,11 +10,11 @@ import numpy from omero.cli import cli_login from omero.constants.namespaces import NSBULKANNOTATIONS -from omero.gateway import BlitzGateway +from omero.gateway import BlitzGateway, _ImageWrapper from tifffile import imwrite -def warn(message, image_identifier, warn_skip=False): +def warn(message: str, image_identifier: str, warn_skip: bool = False) -> None: """Print an error `message` to stderr and - prefix with the `image_identifier` - suffix with 'Skipping download!' if `warn_skip` is True @@ -38,11 +38,11 @@ def warn(message, image_identifier, warn_skip=False): ) -def find_channel_index(image, channel_name): +def find_channel_index(image: _ImageWrapper, channel_name: str) -> int: """Identify the channel index from the `image` and the `channel_name` Args: - image (omero.gateway._ImageWrapper): image wrapper on which the channel should be identified + image (_ImageWrapper): image wrapper on which the channel should be identified channel_name (string): name of the channel to look for Returns: @@ -65,11 +65,11 @@ def find_channel_index(image, channel_name): return -1 -def get_clipping_region(image, x, y, w, h): +def get_clipping_region(image: _ImageWrapper, x: int, y: int, w: int, h: int) -> list[int]: """Check `x`, `y` and adjust `w`, `h` to image size to be able to crop the `image` with these coordinates Args: - image (omero.gateway._ImageWrapper): image wrapper on which region want to be cropped + image (_ImageWrapper): image wrapper on which region want to be cropped x (int): left x coordinate y (int): top y coordinate w (int): width @@ -80,7 +80,7 @@ def get_clipping_region(image, x, y, w, h): ValueError: if the x or y coordinates are larger than the width or height of the image. Returns: - list of int: new x, y, width, height adjusted to the image + list[int]: new [x, y, width, height] adjusted to the image """ # If the (x, y) coordinate falls outside the image boundaries, we # cannot just shift it because that would render the meaning of @@ -108,11 +108,11 @@ def get_clipping_region(image, x, y, w, h): return [x, y, w, h] -def confine_plane(image, z): +def confine_plane(image: _ImageWrapper, z: int) -> int: """Adjust/Confine `z` to be among the possible z for the `image` Args: - image (omero.gateway._ImageWrapper): image wrapper for which the z is adjusted + image (_ImageWrapper): image wrapper for which the z is adjusted z (int): plane index that need to be confined Returns: @@ -127,11 +127,11 @@ def confine_plane(image, z): return z -def confine_frame(image, t): +def confine_frame(image: _ImageWrapper, t: int) -> int: """Adjust/Confine `t` to be among the possible t for the `image` Args: - image (omero.gateway._ImageWrapper): image wrapper for which the t is adjusted + image (_ImageWrapper): image wrapper for which the t is adjusted t (int): frame index that need to be confined Returns: @@ -146,18 +146,18 @@ def confine_frame(image, t): return t -def get_image_array(image, tile, z, c, t): +def get_image_array(image: _ImageWrapper, tile: list[int], z: int, c: int, t: int) -> numpy.ndarray: """Get a 2D numpy array from an `image` wrapper for a given `tile`, `z`, `c`, `t` Args: - image (omero.gateway._ImageWrapper): image wrapper from which values are taken - tile (list of int): [x, y, width, height] where x,y is the top left coordinate of the region to crop + image (_ImageWrapper): image wrapper from which values are taken + tile (list[int]): [x, y, width, height] where x,y is the top left coordinate of the region to crop z (int): plane index c (int): channel index t (int): frame index Returns: - numpy array of 2 dimensions: image values of the selected area + numpy.ndarray: image values of the selected area (2 dimensions) """ pixels = image.getPrimaryPixels() try: @@ -170,14 +170,14 @@ def get_image_array(image, tile, z, c, t): return selection -def get_full_image_array(image): +def get_full_image_array(image: _ImageWrapper) -> numpy.ndarray: """Get a 5D numpy array with all values from an `image` wrapper Args: - image (omero.gateway._ImageWrapper): image wrapper from which values are taken + image (_ImageWrapper): image wrapper from which values are taken Returns: - numpy array of 5 dimensions: image values in the TZCYX order + numpy.ndarray: image values in the TZCYX order (5 dimensions) """ # The goal is to get the image in TZCYX order pixels = image.getPrimaryPixels() @@ -209,23 +209,23 @@ def get_full_image_array(image): def download_image_data( - image_ids_or_dataset_id, - dataset=False, - download_original=False, - download_full=False, - channel=None, - z_stack=0, - frame=0, - coord=(0, 0), - width=0, - height=0, - region_spec="rectangle", - skip_failed=False, - download_tar=False, - omero_host="idr.openmicroscopy.org", - omero_secured=False, - config_file=None, -): + image_ids_or_dataset_id: str, + dataset: bool = False, + download_original: bool = False, + download_full: bool = False, + channel: str = None, + z_stack: int = 0, + frame: int = 0, + coord: tuple[int, int] = (0, 0), + width: int = 0, + height: int = 0, + region_spec: str = "rectangle", + skip_failed: bool = False, + download_tar: bool = False, + omero_host: str = "idr.openmicroscopy.org", + omero_secured: bool = False, + config_file: str = None, +) -> None: """Download the image data of either a list of image ids or all images from a dataset. The image data can be: @@ -235,14 +235,14 @@ def download_image_data( Optionally, the final file can be in a tar Args: - image_ids_or_dataset_id (list of string): Can be either a list with a single id (int) of a dataset or a list with images ids (int) or images ids prefixed by 'image-' + image_ids_or_dataset_id (list[str]): Can be either a list with a single id (int) of a dataset or a list with images ids (int) or images ids prefixed by 'image-' dataset (bool, optional): Whether the image_ids_or_dataset_id is a dataset id and all images from this dataset should be retrieved (true) or image_ids_or_dataset_id are individual image ids (false). Defaults to False. download_original (bool, optional): Whether the original file uploded to omero should be downloaded (ignored if `download_full` is set to True). Defaults to False. download_full (bool, optional): Whether the full image (hyperstack) on omero should be written to TIFF. Defaults to False. channel (string, optional): Channel name (ignored if `download_full` or `download_original` is set to True). Defaults to None. z_stack (int, optional): Z stack (plane) index (ignored if `download_full` or `download_original` is set to True). Defaults to 0. frame (int, optional): T frame index (ignored if `download_full` or `download_original` is set to True). Defaults to 0. - coord (tuple of int, optional): Coordinates of the top left or center of the region to crop (ignored if `download_full` or `download_original` is set to True). Defaults to (0, 0). + coord (tuple[int, int], optional): Coordinates of the top left or center of the region to crop (ignored if `download_full` or `download_original` is set to True). Defaults to (0, 0). width (int, optional): Width of the region to crop (ignored if `download_full` or `download_original` is set to True). Defaults to 0. height (int, optional): Height of the region to crop (ignored if `download_full` or `download_original` is set to True). Defaults to 0. region_spec (str, optional): How the region is specified ('rectangle' = coord is top left or 'center' = the region is center, ignored if `download_full` or `download_original` is set to True). Defaults to "rectangle". @@ -545,7 +545,7 @@ def download_image_data( raise -def _center_to_ul(center_x, center_y, width, height): +def _center_to_ul(center_x: int, center_y: int, width: int, height: int) -> list[int]: """Convert the center coordinates (`center_x`, `center_y`), `width`, `height` to upper left coordinates, width, height Args: @@ -555,7 +555,7 @@ def _center_to_ul(center_x, center_y, width, height): height (int): height Returns: - list of 4 int: x, y, width, height where x,y are the upper left coordinates + list[int]: [x, y, width, height] where x,y are the upper left coordinates """ if width > 0: ext_x = (width - 1) // 2 From 902d6f92b38836abf76b5a8a6f7cc5b8fa47c3cf Mon Sep 17 00:00:00 2001 From: Lucille Delisle Date: Thu, 26 Sep 2024 13:35:19 +0200 Subject: [PATCH 19/36] run black --- tools/idr_download/idr_download_by_ids.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/idr_download/idr_download_by_ids.py b/tools/idr_download/idr_download_by_ids.py index 963dc0e94b0..2892df4ebe8 100644 --- a/tools/idr_download/idr_download_by_ids.py +++ b/tools/idr_download/idr_download_by_ids.py @@ -65,7 +65,9 @@ def find_channel_index(image: _ImageWrapper, channel_name: str) -> int: return -1 -def get_clipping_region(image: _ImageWrapper, x: int, y: int, w: int, h: int) -> list[int]: +def get_clipping_region( + image: _ImageWrapper, x: int, y: int, w: int, h: int +) -> list[int]: """Check `x`, `y` and adjust `w`, `h` to image size to be able to crop the `image` with these coordinates Args: @@ -146,7 +148,9 @@ def confine_frame(image: _ImageWrapper, t: int) -> int: return t -def get_image_array(image: _ImageWrapper, tile: list[int], z: int, c: int, t: int) -> numpy.ndarray: +def get_image_array( + image: _ImageWrapper, tile: list[int], z: int, c: int, t: int +) -> numpy.ndarray: """Get a 2D numpy array from an `image` wrapper for a given `tile`, `z`, `c`, `t` Args: From c255347182d5877e32997c8189a86479a08aee30 Mon Sep 17 00:00:00 2001 From: Lucille Delisle Date: Thu, 26 Sep 2024 13:36:24 +0200 Subject: [PATCH 20/36] fix warn I introduced --- tools/idr_download/idr_download_by_ids.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/idr_download/idr_download_by_ids.py b/tools/idr_download/idr_download_by_ids.py index 2892df4ebe8..70b7c8ff9c3 100644 --- a/tools/idr_download/idr_download_by_ids.py +++ b/tools/idr_download/idr_download_by_ids.py @@ -205,8 +205,7 @@ def get_full_image_array(image: _ImageWrapper) -> numpy.ndarray: ) except Exception as e: warning = "{0} (ID: {1})".format(image.getName(), image.getId()) - warn("Could not download the requested region", warning) - warn(e.msg) + warn(f"Could not download the full image \n {e.msg}", warning) return return all_planes_reshaped From edceaaff2891854d44bb42344533b3c5d07e3338 Mon Sep 17 00:00:00 2001 From: Lucille Delisle Date: Thu, 26 Sep 2024 13:41:14 +0200 Subject: [PATCH 21/36] fix linting --- tools/idr_download/idr_download_by_ids.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/idr_download/idr_download_by_ids.py b/tools/idr_download/idr_download_by_ids.py index 70b7c8ff9c3..bae7da3a5ec 100644 --- a/tools/idr_download/idr_download_by_ids.py +++ b/tools/idr_download/idr_download_by_ids.py @@ -10,7 +10,7 @@ import numpy from omero.cli import cli_login from omero.constants.namespaces import NSBULKANNOTATIONS -from omero.gateway import BlitzGateway, _ImageWrapper +from omero.gateway import _ImageWrapper, BlitzGateway from tifffile import imwrite From e3b506ea64f57aef2d05073d2481047a772aa529 Mon Sep 17 00:00:00 2001 From: Martin Cech Date: Thu, 26 Sep 2024 14:10:02 +0200 Subject: [PATCH 22/36] add more parameters to ucsc axttomaf plus new test --- tools/ucsc_tools/ucsc_axttomaf/axttomaf.xml | 44 ++++++++++++++++++- .../ucsc_tools/ucsc_axttomaf/test-data/2.axt | 19 ++++++++ .../test-data/hg38.noprefix.fasta.fai | 24 ++++++++++ .../test-data/mm39.noprefix.fasta.fai | 21 +++++++++ 4 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 tools/ucsc_tools/ucsc_axttomaf/test-data/2.axt create mode 100644 tools/ucsc_tools/ucsc_axttomaf/test-data/hg38.noprefix.fasta.fai create mode 100644 tools/ucsc_tools/ucsc_axttomaf/test-data/mm39.noprefix.fasta.fai diff --git a/tools/ucsc_tools/ucsc_axttomaf/axttomaf.xml b/tools/ucsc_tools/ucsc_axttomaf/axttomaf.xml index fffe3758e92..537e5688bc0 100644 --- a/tools/ucsc_tools/ucsc_axttomaf/axttomaf.xml +++ b/tools/ucsc_tools/ucsc_axttomaf/axttomaf.xml @@ -1,9 +1,21 @@ - + Convert dataset from axt to MAF format 469 + + + + + + + + + + + + UCSC_Genome_Browser_Utilities @@ -25,6 +37,14 @@ #else: '$query_reference_index_source.que_ref_index_file.fields.path' #end if + #if str($t_prefix) + -tPrefix='$t_prefix' + #end if + #if str($q_prefix) + -qPrefix='$q_prefix' + #end if + $score + $scoreZero '$out' ]]> @@ -60,6 +80,14 @@ + + + + + + + + @@ -77,6 +105,20 @@ + + + + + + + + + + + + + + diff --git a/tools/ucsc_tools/ucsc_axttomaf/test-data/2.axt b/tools/ucsc_tools/ucsc_axttomaf/test-data/2.axt new file mode 100644 index 00000000000..c88ac3f3ad8 --- /dev/null +++ b/tools/ucsc_tools/ucsc_axttomaf/test-data/2.axt @@ -0,0 +1,19 @@ +0 chr1 52448 53340 chr2 111209343 111210259 + 33103 +GCCAATGGATAGAGTAAATAATTCTGCGGTATCTAAATTTGTATTGATTGGACTTTCAAGCTCTTGGGAGATGCATCTTTTTCTTTTTTGGTTCTTCTCTGTGTTCTACATGGGAATTATCCTGGAAAATCTCTTCATTGTGTTCACAGTAATTATTGACTCTCATTTA-AATTCCCCAGGTACTGCCTACTGGCCAACATTTATCTTCTTGATCTGGG----TCTTCTCCTACAGT-------------TCTGACTTTTTCACTAACTGCAGCATCATTTCTTTTCCAAGATGCATCATACAGATATTTTTCATTTGTGTCATGCGTAAAAATTGAGATGGTGCTGCTCATAACCATGGCATAGAGCAGGTACACTGCCAATCTGTAAGCCTCCCCATTACCTGACCACAATGAACCCCAAAATGTGTGTTTCCTTTGT---TGGAGGCATCCTGGATAGTCAGGATAATCCATGCTGTATCTCAGTTTGTTTTTGCCATAAACTTGCCTTTTTGTGGCCCTAATAGAGTAGGTAGTTTTCACTGTGATTTTCCTTATGTCATGAAACTTGCTTGTGTAGACACTTACAAACTAGAGGTTGTAGTCACTGCTAACAGTGGGCTTATATCCATAGCTACCTGTTTCTTATTAATAATATCCTATATTTTCATTTCGGTAACCGTCTAGAATCCTTCTTCAGGAGACTTATCTAAAGCATTTGT-GTCATGTTAGATCACATCACAGTAGGGATTTTGTTTTTTATGCCATGTATATTTCTGTATGTGTAGCCTTTGCCTAAAACAACACATGATTAATATTTGTTCATTGTTCCTTTTGCTATCACCCCTG--------TCTAGGATCTACACATTAAGAAACAAAGACATGAACGTCTCCATGGAAAGACTGGGAAAATGGA +GTCAATGGATCAAATAAATGAAACTGTAGCTTTTGAATTTGTGTTGTTGGGACTCTCCAGTTCTTGGAAAAATACAATTTTTCTCATGTCCACCTTCTCTTTGCTCTATGTAAGCATCATCGTGGGAAACCTTTTCATTGTCTTTTTGGTAATTAATGACTCCCGTTTACAGTCTCCTATGTATTTTCTTTTGGCCAATCTGTCCCTCATTGATGTTGGACTTTCCTCTACCACAGTGCCCAAGATGATCTCAGATCTTCTGAAAGAGCACAAAGTAATATCTTTCCACAGTTGCATGACTCAGATCTGCTCCATCCACATTATG-GGAGGAGTGGAGATGGTGCTGCTCATAGCCATGGCGTTTGACAGGTACACGGCCA-TCTGTAAGCCTCTGCACTACATGAGCATCATGAGCCCTAGAATATGCATTTCATTTGTAATTGCTGGC----TGGGTCACTGGAGTGGTCCATGCCATGTCACAGTTCTCTTTTGTTGTGAACCTGCCTTTTTGTGGTCCTAACAAAGTGGACAGCTTTTACTGCGACTTCCCTCGAATCATACAACTGGCATGCACGGATAGAGACACATTTGAGTTTGTTGTTGCTGCCAACAGTGGCTTCATGACCTTGGGGACCTTCTTCTTGCTTCTCCTCTCCTATGTCTTCATTTTGGTCACAGTCTGGCAAAGGTCTTCAGGGGACTTGTCAAAGGCGCTTGTCACTCTGTCAGCTCACATCACTGTGGTTGTTCTGTTTTTTACTCCATGCATGTTTCTCTATGTGTGGCCTTTCCCCACATCATCGACTGACAAATACCTGTTCATTGTTGACTTTGCTGTCACCCCTGCTCTTAATCCTGTCATCTATACTTTAAGGAACAAAGATATGAAGGAAGCCATAAAAAAGCTGAGCAAGCAGA + +1 chr1 56555 58924 chr2 111303515 111305845 + 43395 +CACATTATTCTGCAGTTTTTATCTTGCTTACGTATTTTTGGAATGTTACTATTTTTCAAAAATTAATTTGGGATCAACCAACACTTCTTATTCTGCTGCTGTTCTAGAGAAAATCATTTTCCTCATTTCTGAACAAGAGAAAATGAAAT-----------------ACAGCTCTAAACAAATGCCACTGTAAACCAAGGTGGAGCCTTTGCACTTTCAGGCCACCATGATAACCT---GGAGATTAGATTTTTCTGTGTCTTTATATCAATAATAAAGCCAAGCTTCTCCAGGGGTATCCACTAGGCTTGTCTCAATGGCTCAATACAGGTCCTTTTGTGAATGATTACCTCACCCTCATGGAAACACACTCTT-GTTACAGAAACTCAGAATGATTCTATTTTTTCTTTTATATTTGTATATGTTTTTCCAATACCTCTGAAAAAACTGATCCAAAAAAAATACAAATTTTAATTGTAGCCAGTCAATTCAGGAAGGATAAAGGTCAAAAACTTTCAAAGAAACCTTCAGCCCCAACACACTAAACTTTGGGAGCACAGGTTGGCATCCAGAGGTAAACATTTGCTATAACTGATAACAGGAGAAGGATCCATTTATTCACCTGTTATCAATTACAGGCATTGTATTTAAAGATCAGATGTTTTATATTTATTTCTTCAAATTTCATTCATGGTGCCATAAGTGAAGGTATCTCTGTCCACCCTGAATATATTTTCACTCCCTCATCTCAGTCATTCCGAACAATTCACACACTAAGATTACCCATGCTAAATGGGGATTCTTTTTTACTAGCCAATGTAGTACCTCAAATCCTTCCTTCCCTCCCCCTATTTCATCAGCAGGCAATTCTTTTGATACTTTTGTCAAGGGGAAATTGTGTGACTCAGAGATCTAGTCCCCAAGAGAAACTAATAATGGGCTGGGTATTGTCTGTCTCAGCAGCATCAGTGGGTCCCTCTCCTGTGCAGCTAATTAGCTTCCTTTCCAATATGAAGAATCTTATATATAGCTTTGTCTTT-GGGGTATTAC----ATAAATGAAGATTAAGCTATCTGAATTTCTCCTTCTCCTAAAAATGCACATCCTATGACTGAAAAGACAGGTAAAAGAGATGCTTTTAATTACAAAACTTTCCCTGTCGTGGTTGCTTCTCTCTATCCTTCTAAACTCCCTTTCAATTTCTTCTCTTCTGTAACATATTTGTGCCCAAAATCTTCTGCTTTCTGAAATATTTT--ATCTTTTTCTTCCACACTATCTC----TTATTTTCCAATTTTAATCATTAAATTATATTATGTCTTATAAAACTAATCCCACATATAAACCCCTATGATA--ATTTCAGTTTG--TCCCTAGTATGAAG-TTCTTTAAAGATGTGTAGTTTTCTAACTTTCATGCTCTCCAATTAATTATAAACTTCATTTTCCACTCTGAAAAGGAGATGTCTGATCTCAGCTATTTCCATCCTATTTGAAAACCAGATTTAGTTTTAAACCAGAGGAAGGGAATCTCAAGTCTTTACCTCCCACAGTCTGGTGTGATTCTCTCTCTTTTGGTATTACCTTCCTCCACATTGGAACACTCCAGCCAATGCATAGGCTGAGAGGCTATCTC-AGATTCAGAAAGATTTGGCCTCATCCCAGGGGAGGGTACAGAGGAGCTGATGACTATGAATTC--TGAAATGGAACTGTTCCAG-------------GTTGAAGAAATAAGAAAGGGAATTGGGAAGAGCAAT-----GCCCAGTGAAAAAGAAGAAATAA-TATTTTAGGAAGT-GAATGC-TAATTTTATTTTAAACAAAATAAGAACTCAAGGAATAAGAGGGTTCTTCCAATAGGTTAGAGTGATCCTGTCAAACATATATGCTTCT-AGATTTTTTTAAAGACTGTTTCTACTAAGAAAGCATAGACCGCTATTGAGAAAGATCATTAAACTGGAATTTAGGAGGTCTGCCTTCTGATTCTGACTTCTTGAATGTATTGTTAGCCAT----TTAACCACACTGTGTTGTTTC--------TCA--TTCTACCTGTAGAATCTCAAAGTTCTTTCCCACTTCTATACAAAACTATAATTCTGAACATCCTTTTTGTTTAATATAAGTCTGCATTTCCTGTTTGAA--GATATGTGTCCC-AGACCCTAAATGACTGACAAATTTTAAATCTCC---AATAGGAAAGATGACAAACTCTATGGAAACTTGGCTTCTGAAGAACTCCTAGAAGCTTTCCAAAGTCATCAGTGTTTCCTAAGAAGGCAGAGAAATCAAACAC-----------------------------------ATGG----------------------------TCTTTTCCTCCAGACAAGCTCCTTTGGGTCATCAGGATTTCTTCAACAATA---AAATGTAATAATTCCAAATGTTTGTAACAGAATGGGTAGGACTTTCTTCACTTATTTAAATACTCCCTTTTT +cacattgtattgta--ctctattatgttt-tattgtattatattatTGTTGTTTTTCAAAAATT----TTGGTTAAACTAGCATCCCTTCTTTTTCTGTTGACCTAAGAAGAAACCCTTTCCTTCTTT-TGAACAAGATAAAATGAAGTGCAGATTTCTAAACAACACAGCTTTAAAGAAGCACACTTATAAACAAAGGTAGAGCTTTCACTGTTTCA-------ATGA-AACCTCAGTGAGATCAGATT-----ATGACTCTACATAAATGACAAAG------------------ACCCACCGAGACTGGTACCATGTTTTCATTCATATGGTGTTA--AATGATGGTCTC---CTCGGGTATCCAGACCCTTCATTTAAGTAACTCAAAACAACT----------------ATCTATAT-----CTTCCAAAATTTCTAAACAAATTGACCCGATGACT-TACAAGTTTAACTTATAATAGATCAACTCA--AATGATAAAA--TAGTGATTTTCAGATATACCTATATCCTCTGG---------TTTTGTAGAGCATTCAGGCTTTCTTGGACAAACATTTGTCA-AAATGA-AACAATAAGAACTTTTATCTTTTTCCATACTAACAAGTGAAG----TGTATTTTCAGATAATTAGTTTTAGACT-ATTTTT---AATTTGATATATGAATCCA-GAGTAAAAATACAGCTATCCACTTTTGGAATATTTTTTATTCT-----------ATTTCAAGCAATTCATAAAAAAAGATTATAACTCCTCAA-GGAGGTTATTTTAAATT---TAATACATTACACAGAATATTTTTATTTTTTCCCTT-TTATATAACCAGACAATTCTTTTGATACTTCTCTCTTGGGGAAACCA-ACAGCTCAT-GATCCAATTCCCAATAGAAACTATTAATGAACTGGGTATTGGACACCTTCACAGTGCCAATGGGTCACTCTCCTGAGCAAATAATTGGCTTCTTTGCCACTATAAACAGTCATACATATATCTTTGTCTTCAGGGGCATTGCTTATAGAAATGAATGATAACCTACTTAAATTT-TCTTTTTCTTCAAAGCGTACCTGCTGTTACTTTAGAGA-AGGT--AAGGGGTGGTTTACATTTAAAACCTG--CCGATTATAGTTG----TTTCAATCTTGCTAA------CTCTAAT---CTCCCATCTGTAAAATAATTATGTCAGACAT-GTCACCTTTCAAGAGTATTTTTACCCTTTTAATTTTAAACTATCACAGAATCGTTTTGTGATTTTATTTA--AAAATAT----TGCTTTATATAATTAATCTCGTGCTCACAACCTTTTGATATTTTTTTAATTTGCTTCTTTGGTATGAAGATTTTTCAAGAACGTGTG--TTTCTGCTTTTTGTAGCCCTCAGACAATTGTGCAATTCATTTCCAACTATGCCAAGCAGATGTCTGGTCTCAGATATTTCCTGCATA-TTAAAGATCATATTACAATCTCAAT-----------AATCTCAAGCCTTGTCTGCCAATACTCTGGAGTAATTCTTACCTTT----TATT-------TCAATATTTGAATACTGTAAGCAGTGAATACACTGAGAGACTATTCCAAGACTTAGATATATT-----CTAGCCCACAGGATTCTAAAAAAGTGC-ATTAAATAGAAATTCTTTTTATTGCAACTGTTCAAGTAGTGGTCTAGATGTTTGAAAAA-AAGAAAAAAAATTGGCAAAGTCTATTAAGGGCACAGGGTAGGGAAAGGACTAGTTTTTTTACGAAGTAGGATGTGTAGTTTTATGCCAAACTGAGTATGAGTTCAAAGACTAACACAATCCTTTCAGTAAAGCAAAGTGATCATATCAAATATATAGTATTCTGAGATTTT----ACAACTGTTTCTCCTAATCATTTGTAGAGTAATACTGACGAA---CAGTACACTAGAGTTTAGGACACCTACCCTCTGA-TCTGTAGTTCTGTATGTTTTGCTCTTGATGCTGTTAA--ACACTAGGCTGTTTTATGCAGAATCAAGTGTTAAATGCGTTTTCTCACAGTTGTTCCCAGTTTTCATGTAAATCTACGATTCCATTAGTATGCTTTGTTTAACACATGTCTATGTATCTTGTTTGAAGTGATACTTATCCCTAGACCTTGAATAATAGACAAATTTTAAGTCACCACAACCAGGAAAACCATCAAACACTATGGGGACTTGGTTTCTGATGCACTCCTTGAAGCTCCATGCTGTTATCAACAGCTCT---GAAGGGAAAGGAATAAAGCACTATattttgcttttgttttgattttatattttgaGATGGAGCTGAGAAGTTGTTTTGTTGTATTTTTACTATTTTTACACATAAATTCTCTAGAAACATGTGGATTtaat-aataatatataaaaataataaCCCAAAATGCTTGTAA-------GATAAAAAGACCTTCATTTATTTAAGTTCTCATTCTTT + +2 chr1 60917 61125 chr2 111306441 111306644 + 8501 +TTAATATTTCCCACTTCATCATTACTAACCTCACTCACTCTGAACTTGATGAGAGCACCTGAGCATTAATTTTTCTTATAATTATTTAATGATTACCAGAATTCGTTCAGTATGGCCAGCTCTGGTCAAAGTGAGGCAGGCAAGATGCTTTGTCAACTGCCTGGATGGAATGTCTCAAAAGGTTTCCATTTCATGGTAGCATTATGCAA +ttAATAT--CCCAGTGCACC-TCACTACTCTGGCTCACGCTGAGCCTGATGAGGTCATA-GGGCATCCATTTTTCTTGTAGTTATTTTATTATTACCAGAATTCATTCAGAATGGCCACCTCTAGTCAACACAAAATAAGCAGCGTGCTTTGTC-ACTATTTGAGTAGACTTCCTTAGGAAGTTTTCATCTTAGGGTAGTTTTACATAA + +3 chr1 61126 61836 chr2 111307411 111308031 + 9500 +AGTTCAAGACGTTTAATCAAGACCCTTCACTTACTTAACTATACCTCCTTGAGA-ATCCCATCTATGAAAAAATTCTAGTCATTATAAAAATGATTGATTAAATGAGGGAAGTAGTAGAGTTCTTCATTTCTTTAGTTGGTTTAGTCTCCTATGAGTCAATCCTA-TTTTCAAA-ATTCTTAATAAACCATTTATTCCTTCAACTTTCTATGCCATTTGATGTTTTGTAAAAAAAAAAATATAA------TATGTATACAAAAAGATATTTCAAAATCTAGAAAGAGAGCTTTAGAGCTTTGTAAAGCTCTTTTAAAAATCAAAAACAACTACTGTTAATTAACATGTTGTACTATGC-AATTTGTTTACCATTATTACTCTTGGTATTTTTAAGAAAAGTCTT----TCCATTGTTATTATAAATGCTTCTATTGATATTTATTTTAATAACTGTTATTACAGTCCGTCATGTACATACACTATACTTAAAcctaatgtttggtatttaaatcgtttcaagattttatc----actgtcaacaaagtatgatgaatattttta--tgctgaaaacttctgtaaaaatagaattccaagagtattattgcaccaaaaggcatggacttaaaattcttgatacatgatttcaaaatattttctttaaggtttgaatcagtctatattccctccagcagcgtataaaagtgccaatttctctgatccttagcc +aGCCCAAGAAAATTAAACAAATCCCTTTACTAATTTAAATGTATCTTGCTACTAGATATCATTTGTGA---------------CATAAATATTTGCAATAAAAT--------CACTAACATTATTTATTTCATCAGTG-------------ATGGGTTAACCCTAGTTTTCAAACAGCTTTGATAAATCTGTCATCTCTTTAGATCACTAGATAATTTGATATTTGAGGGGAAAATAGATATGAATGCACTATGTGCATTAAAATATCCCTTAAA-TCTAAAAATAGAA-TTAGAAGCTCTG------------AAACCTGAAATGCTATCATTGTAACCGGGAATGATGGGATATGCTAATTACTTTACAACAAT----------GTTTTAAGCAAGAATCTTAAAGTCCA------------------------ACATCTAGTTT------TGTTATTATAGCCAACTGTGTATATTTGATATATTTATACCTAATTGCTTTCATTTAAACTGCCTTAAAGCTTTACTTAAAACTATCAATAAAGTCTTGCTAGTATTTGTGACTGGAGATATTATCTGTACAAGTAGTTATTTCAGAGAAGTACTTTACAACAAGGTATGGAGATAAAATTATTGACATAT---------------TGTTTAAGGGTTAAA-----ATATCTTCCCTCTTGTGAATTATAAATAAACCAATTTCATTGAGCTTTTGCT + +4 chr1 61944 64435 chr2 111308032 111310602 + 69061 +ctccgcctcccggggtcaagctattctcctgcctcagcctcccaagtagctgggactacaggcatgcaccaccatgcccagctaatttttgttatttttagtagagatggagtttccccatgttggacaggatggtctcgatctcttgacctcgtgatccaccctcctcggcctcccaaagtgctgggataacaggcgtgaacaaccatgcccggcctgtaaaactttttcctaatttaacagaaaaataatagtattatattttatcatatttctttgatttctaAGacacacatacacacaca---cacacacatatctgtatatacaaatacacgtatagc---------------------------------------------ttacaTTTT--AATTCTTCATTTCATTTGTTCATTTATTAGGTCTTGGAGATTTTGTGAAAC---------TGTTTAAATTCTTTTTTATACTATGAAGATATCAACCTT-TTGTCTCTACAGCATTTCAAATTCAAGTATGAT----TCACGTGTTGGTTTGGGGTAGATCATTATAGGCACATGTAGGAAACAGCTTT-----------------------------------------------------------------------CAGAGA----------------TGC----------CTTAACCGT-----------------------------------AATTATGCATTTGTATTC--------------TAATTTTTATTTAATGTTATTATT----GATTGCATTTTTAAAG--ATTCTGT--ATTTTTTAAACCATTTATTTGTATATGTTGGTATACAATCTTGCCATTTTCTGGGATTTCATATTTCCTTATTTTTGTTTTT--TACCTTTTTTGGCTTGAATT---TTTTGAGTTTTTATGCATTCTTTTCCAGTTTCTTAAGATGCTAATAAGTTCATGTATTTGAGCAATTGAGAACATTTAAAGCAATAGACTGCCTCTGAGCACAGCTTTGTCCATATTACATTAACCTTTTATACCCTGGGTTCCCACTAGTTTTTAAATAATCTACTATCAAATAAAAG-ATTTGTTAATAATAA-------------------------------------------------------ATTTTAAATCATTAACACTTAACGCATTATTTTCAGTCACACTAAGTTGATTCCTTCGTTTCTTTCAGGTTGCTTCAGAGTCTTCCCTTCTATCTGATTCAGTGGACCAAGTAAATGACTCTCTGGTAACAGAATTTGTATTACTTGGACTTGCACAATCCTTGGAAATGCAGTTTTTCCTTTTTCTCTTCTTCTCTTTATTCTATGTGGGAATTATCCTGGGAAAACTCTTCATTGTGTTCACAGTGATCTTTGATCCTCACTTACACTCCCCCATGTATATTCTGCTGGCCAACCTATCGCTCATTGACTTGAGCCTTTCATCTACCACAGTTCCTAGGTTGATCTACGATCTTTTTACTGATTGTAAAGTTATTTCCTTCCATAATTGCATGATACAAAAGTTCTTTATCCATGTTATGGGAGGAGTTGAAATGGTGCTGCTGATAGTCATGGCATATGATAGGTACACTGCGATCTGCAAGCCTCTCCACTATCCAACTATTATGAATCCCAAAATGTGCATGTTTTTGGTAGCAGCAGCTTGGGTCATTGGGGTGATTCATGCTATGTCTCAGTTTGTTTTTGTCATAAATTTACCCTTCTGTGGCCCTAATAATGTGGGGAGCTTTTATTGTGATTTTCCTCGGGTTATTAAACTTGCATGCATGGACACTTATGGGCTAGAATTTGTGGTCACTGCCAACAGTGGATTCATATCGATGGGCACCTTCTTTTTCTTAATTGTATCATACATTTTTATTCTGGTCACTGTCCAACGACATTCCTCAAATGATTTATCCAAAGCATTCTTCACTTCGTCGGCTCACATCACCGTAGTGGTTTTGTTTTTTGCTCCATGCATGTTTCTCTACGTGTGGCCTTTCCCTACTAAGTCATTGGATAAATTTTTTGCCATCATGAACTTTGTTGTCACCCCTGTCGTAAATCCTGCCATCTATACTTTAAGGAACAAAGATATGAAGTTTGCAATGAGAAGGCTGAATCAACATATTTTAAATTCTATGGAGACGACATAACACATTTGGTTGATGAGAGCACAGGATAAATGCCATGGACCATCAAGACTCCTGTGATCACCATGATCACTATGGAACGCGCACATTTTTAGTATTGCCTGAAAAAACTGAAAAATCTGCAAAAAGGATGCATTAAATCTAAGAATTGTATTTCAGATAAAGTTGCAACATTTTTTGTTAATCATA----AAAAGTA-----------------------------------------TATATTTCTATCT--------AATGTGTGTATCTAATTAA-----------CAGCAATGACTAC-------------CTTT----------------AATTTTGATGTAGTTAT-TTTATATCTGTATATAAGCACATACACATATATATGACCTAGGTTTATTTATCAGTATTTTTATGCTGATAATAAGCATCACTGGAAATTAAT-----TTTCTTATGGAAATTATGTGGATCCAATGGATAAAATATGAGTTTATATAAATTAGTAAATGCCAAAATCAAGGAAGAAACAATTTTTATTTTAATTGTACTTTAAGTTAGATAAATGGTAAGGTCAACAGCTTGTTACAACCCTTAAGTATTATTTTCAGGCTGATTGTCAATATGTTTTGTACAatgttctcac +CTCTGCTTTGTGTGGAGAAG-TATTGTCC--------ACTCTGAATGATTTGGTAATA-------ATAATAATATATTTTGCTAATT--------------------------------ATATT---------------------------------------------------------------------------------------------TGTAA----TTTTTCTTATTTAACA-AGAAATGAGA-------ATTTTCTTATATTTCACTGATTTCTAacacacacacatatacacatcacatacacacaaagagagagacagagacacagagagacacagagagacagacagacagacagacagacagacagatacacagtcaCATTTCTCAATTCTCTATATCATT-GTTCACTT----TGCCTGATGGGTTTTTAGTAGCAATCATGTATATTTTAAT-CATTTTAATATTATAAAGATATCAGCTTTATTCTCTCTA-AACATTG-AAATTCAAGTACAAGATAAGCATGAGTTAGTTTTGTG---------ACAAGCATGTGTAAGAAATAATTCTTtctctctctctctctctctctctctctctctctctctctctctctccatttttctttctttctttTGGTACAGAGGATGAAAGTTCCACATGTGCTCTTAAAGCACTTTATCATTGAGTCTATTTTTTCAGTTGGCATAAGTAAAAATAAGTTAAGTGTTTTGACTCACCATTCTAATGCTTGATATTCACTTAATTTTATTAGTTTTAAATTTCAGTTTTAAAATAATTTTTTTAAGTTTTGAAAACAAT-----GTTAATGTCCTTACAGAGTCTTTTCATTTTCTGGACTACTGCATTCATTTAGGATTGTTCCCAATATCTCTTTTTATTTCACCTGCACTTGAGAATTTAATACATTTTATCCTACTACAT--AAATCGTGTCATGTTTATGT-TTTTATCAATTGCTATAATTTAATGCAGTATATCAT-TCTGAGTAGAGCTTTTTTCAAACTCCATAAATCTTATATACACTGGATTCCTCACATTTTGTAAATTGTCTAC-ACCAATTAAAAATACTTGTTAATAGAAATTGTTTTGATAAACAAATTGTCTAGTGTTAAACAATATCTCTGGTACAGTGACTGATTTTAAATGACTAACATTTAAT--CTTACTTT--GATGCCTTAAAATAATTCAT-CTTGTCTTTCAGGATTTTTATGTATTTTCCCAACTTTCTGATCCAATGGACCAAGTTAATGCTTCTGCTCTACCTGAATTTGTTTTGCTGGGACTTGCACAATCGTTTGGAACACAGATTTTCTTTGGCCTCTTCTTCTCCTTATTTTATGTGGGGATTCTTTTTGGAAACCTCTTCATTGTGTTCATAGTGATTGTTGATTCTCATTTACACTTCCCCATGTATATTCTATTGGCCAACCTTTCGCTCATTGACTTGGGCCTTTCATCTACAACAATTCCTAGGACAATATCTGATCTTTTTACTGGCTGTAAAGTCATTTCTTTCCACAGCTGCATGACACAAATGTTCTTCATTCATGTGATGGGTGGAGTTGAGATGGTACTGCTCATAGCCATGGCATATGACAGATATATAGCAATCTGCAAGCCTCTTCACTACCTGATGATCATGAATCCCAAAAAATGTATAATTTTGGTAATAGCAGCTTGGGTCATAGGGATGATTCATGCAGTGTCTCAGTTTCTGTTTGTTGTAAATTTACCCTTCTGTGGTCCCTACAATGTAGGAAGTTTTTATTGTGATTTTCCAAGGGTCATTAAACTTGCATGCATGGACACTTATAAACTAGAATTTGTGGTCTCTGCCAACAGTGGCTTTATTTCTATGTGTACCTTCTTTTTTCTGATTACATCATACATTTTTATCCTGGCCAGTGTACGACAACATTCTTCAACTGATTTATCCAAAGCATTTGTCACCTTGTCAGCTCACATCACTGTAGTGGTTTTGTTTTTCATACCATGCATGTTTCTGTATGTATGGCCATTTCCGACCAAGTCACTTGATAATTTCTTTGCTATTGTTGACTTTGTTCTCACTCCTGTCTTAAATCCTACTATCTATACTTTAAGGAATAAAGATATGAGGTTGGCCATCAGAAGGCTAAGTAGACAGGTTTTAAGTTCTAGGGAATTTATATAGTAAATTTTATTAGTATCAACACTGA--AAATGTGATAAACTATCAA---------------TATTAACACTATAGAATAAAAACATTATT-TTATTGGGTTTAGAAACATAAGAATGTAC--------------CTATCAAAGAGTTTCAATTAATAAGGAGTTACAATAACTTCTGCTGGTTACAAAATAAAAGTGTTATATGTTTTCAAATCAACATAACTAAATCTTGTTGGTTTTATATTTTTGTATTGAATTGAAGTATTCATATTTATTTAAGTTATTATAACCAGCAATTATTGCACAAATGTTCATGCTTTTTGGTTTGTATAAATAAATGTGCatatatatatatatatatatatatatatatatatatatatatatataAAATGAACC--TTTATCAGCATCTATATGCAGATAATA--CAACACTGGTTACTAATATATATTTCTTGTGGAAATTATGTGGATCCAATGGATAAA-----GGTTTATGTAAACCAATA------------------------------ATTTTAA------TTTAAGACTTATAAGTAGGA------------------------TAACCATCACTATTAAGAT-------------TTTTGTGTCCTTCTCTTAC diff --git a/tools/ucsc_tools/ucsc_axttomaf/test-data/hg38.noprefix.fasta.fai b/tools/ucsc_tools/ucsc_axttomaf/test-data/hg38.noprefix.fasta.fai new file mode 100644 index 00000000000..4c4cc48d41f --- /dev/null +++ b/tools/ucsc_tools/ucsc_axttomaf/test-data/hg38.noprefix.fasta.fai @@ -0,0 +1,24 @@ +chr1 248956422 11 50 51 +chr2 242193529 253935573 50 51 +chr3 198295559 500972984 50 51 +chr4 190214555 703234466 50 51 +chr5 181538259 897253324 50 51 +chr6 170805979 1082422360 50 51 +chr7 159345973 1256644470 50 51 +chr8 145138636 1419177374 50 51 +chr9 138394717 1567218794 50 51 +chr10 133797422 1708381418 50 51 +chr11 135086622 1844854801 50 51 +chr12 133275309 1982643168 50 51 +chr13 114364328 2118583996 50 51 +chr14 107043718 2235235623 50 51 +chr15 101991189 2344420228 50 51 +chr16 90338345 2448451253 50 51 +chr17 83257441 2540596377 50 51 +chr18 80373285 2625518979 50 51 +chr19 58617616 2707499742 50 51 +chr20 64444167 2767289723 50 51 +chr21 46709983 2833022786 50 51 +chr22 50818468 2880666981 50 51 +chrX 156040895 2932501830 50 51 +chrY 57227415 3091663554 50 51 diff --git a/tools/ucsc_tools/ucsc_axttomaf/test-data/mm39.noprefix.fasta.fai b/tools/ucsc_tools/ucsc_axttomaf/test-data/mm39.noprefix.fasta.fai new file mode 100644 index 00000000000..16f76b03e24 --- /dev/null +++ b/tools/ucsc_tools/ucsc_axttomaf/test-data/mm39.noprefix.fasta.fai @@ -0,0 +1,21 @@ +chr1 195154279 11 50 51 +chr10 130530862 199057388 50 51 +chr11 121973369 332198880 50 51 +chr12 120092757 456611729 50 51 +chr13 120883175 579106354 50 51 +chr14 125139656 702407205 50 51 +chr15 104073951 830049667 50 51 +chr16 98008968 936205110 50 51 +chr17 95294699 1036174270 50 51 +chr18 90720763 1133374875 50 51 +chr19 61420004 1225910066 50 51 +chr2 181755017 1288558482 50 51 +chr3 159745316 1473948611 50 51 +chr4 156860686 1636888845 50 51 +chr5 151758149 1796886756 50 51 +chr6 149588044 1951680079 50 51 +chr7 144995196 2104259895 50 51 +chr8 130127694 2252155006 50 51 +chr9 124359700 2384885265 50 51 +chrX 169476592 2511732170 50 51 +chrY 91455967 2684598305 50 51 From 7127d7a93456a3d0c1b6f16d9a11cfc5c5882ffa Mon Sep 17 00:00:00 2001 From: planemo-autoupdate Date: Thu, 26 Sep 2024 12:25:29 +0000 Subject: [PATCH 23/36] Updating tools/humann from version 3.8 to 3.9 --- tools/humann/macros.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/humann/macros.xml b/tools/humann/macros.xml index 97cc121b0d0..9d950a7c35e 100644 --- a/tools/humann/macros.xml +++ b/tools/humann/macros.xml @@ -1,6 +1,6 @@ - 3.8 + 3.9 0 22.01 From 7bbdea2cb04c430b60f4d7a92fda0ea6c20f4ee2 Mon Sep 17 00:00:00 2001 From: planemo-autoupdate Date: Thu, 26 Sep 2024 12:52:34 +0000 Subject: [PATCH 24/36] Updating tools/tsebra from version 1.1.2.4 to 1.1.2.5 --- tools/tsebra/macros.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/tsebra/macros.xml b/tools/tsebra/macros.xml index c0269b2d273..69602a39854 100644 --- a/tools/tsebra/macros.xml +++ b/tools/tsebra/macros.xml @@ -1,5 +1,5 @@ - 1.1.2.4 + 1.1.2.5 /10.1186/s12859-021-04482-0 From 7d29653a131bb160ee0bfa08fb7134eafcecfee8 Mon Sep 17 00:00:00 2001 From: Matthias Bernt Date: Thu, 26 Sep 2024 15:20:24 +0200 Subject: [PATCH 25/36] add profile --- tools/poretools/macros.xml | 1 + tools/poretools/poretools_events.xml | 2 +- tools/poretools/poretools_extract.xml | 2 +- tools/poretools/poretools_hist.xml | 2 +- tools/poretools/poretools_nucdist.xml | 2 +- tools/poretools/poretools_occupancy.xml | 2 +- tools/poretools/poretools_qualdist.xml | 2 +- tools/poretools/poretools_qualpos.xml | 2 +- tools/poretools/poretools_squiggle.xml | 2 +- tools/poretools/poretools_stats.xml | 2 +- tools/poretools/poretools_tabular.xml | 2 +- tools/poretools/poretools_times.xml | 2 +- tools/poretools/poretools_winner.xml | 2 +- tools/poretools/poretools_yield_plot.xml | 2 +- 14 files changed, 14 insertions(+), 13 deletions(-) diff --git a/tools/poretools/macros.xml b/tools/poretools/macros.xml index 3d901ebc11c..39aa8a86471 100644 --- a/tools/poretools/macros.xml +++ b/tools/poretools/macros.xml @@ -12,6 +12,7 @@ 0.6.1a1 + 23.1 10.1093/bioinformatics/btu555 diff --git a/tools/poretools/poretools_events.xml b/tools/poretools/poretools_events.xml index 0cd5969bf24..c8219d9fa4c 100644 --- a/tools/poretools/poretools_events.xml +++ b/tools/poretools/poretools_events.xml @@ -1,4 +1,4 @@ - + from a set of sequencing reads macros.xml diff --git a/tools/poretools/poretools_extract.xml b/tools/poretools/poretools_extract.xml index 6ca0c94c449..61c43aa7f6d 100644 --- a/tools/poretools/poretools_extract.xml +++ b/tools/poretools/poretools_extract.xml @@ -1,4 +1,4 @@ - + in FASTA or FASTQ format from nanopore files macros.xml diff --git a/tools/poretools/poretools_hist.xml b/tools/poretools/poretools_hist.xml index 8386e7063da..b65bb0c44ef 100644 --- a/tools/poretools/poretools_hist.xml +++ b/tools/poretools/poretools_hist.xml @@ -1,4 +1,4 @@ - + of nanopore read lengths macros.xml diff --git a/tools/poretools/poretools_nucdist.xml b/tools/poretools/poretools_nucdist.xml index 21924bf9e16..13d0b56c410 100644 --- a/tools/poretools/poretools_nucdist.xml +++ b/tools/poretools/poretools_nucdist.xml @@ -1,4 +1,4 @@ - + distribution in nanopore sequencing reads macros.xml diff --git a/tools/poretools/poretools_occupancy.xml b/tools/poretools/poretools_occupancy.xml index 3d25f1eb477..7bc14b5a213 100644 --- a/tools/poretools/poretools_occupancy.xml +++ b/tools/poretools/poretools_occupancy.xml @@ -1,4 +1,4 @@ - + per cell in nanopore reads macros.xml diff --git a/tools/poretools/poretools_qualdist.xml b/tools/poretools/poretools_qualdist.xml index ce313e17132..9fe1e5aef44 100644 --- a/tools/poretools/poretools_qualdist.xml +++ b/tools/poretools/poretools_qualdist.xml @@ -1,4 +1,4 @@ - + score distribution in nanopore sequencing reads macros.xml diff --git a/tools/poretools/poretools_qualpos.xml b/tools/poretools/poretools_qualpos.xml index c929f64a8dc..0d0a03f5610 100644 --- a/tools/poretools/poretools_qualpos.xml +++ b/tools/poretools/poretools_qualpos.xml @@ -1,4 +1,4 @@ - + plot of quality score distribution over positions in nanopore reads macros.xml diff --git a/tools/poretools/poretools_squiggle.xml b/tools/poretools/poretools_squiggle.xml index 576b451be65..38db80852cd 100644 --- a/tools/poretools/poretools_squiggle.xml +++ b/tools/poretools/poretools_squiggle.xml @@ -1,4 +1,4 @@ - + for nanopore reads macros.xml diff --git a/tools/poretools/poretools_stats.xml b/tools/poretools/poretools_stats.xml index a56371bb3b7..14dc24a7253 100644 --- a/tools/poretools/poretools_stats.xml +++ b/tools/poretools/poretools_stats.xml @@ -1,4 +1,4 @@ - + from a set of FAST5 files macros.xml diff --git a/tools/poretools/poretools_tabular.xml b/tools/poretools/poretools_tabular.xml index 912147fecf7..b3f4ecae0ea 100644 --- a/tools/poretools/poretools_tabular.xml +++ b/tools/poretools/poretools_tabular.xml @@ -1,4 +1,4 @@ - + in tabular format from a set of FAST5 files macros.xml diff --git a/tools/poretools/poretools_times.xml b/tools/poretools/poretools_times.xml index 7522d695467..5490cdc160e 100644 --- a/tools/poretools/poretools_times.xml +++ b/tools/poretools/poretools_times.xml @@ -1,4 +1,4 @@ - + and channel information from a set of FAST5 files macros.xml diff --git a/tools/poretools/poretools_winner.xml b/tools/poretools/poretools_winner.xml index c27ba4c95bd..9802e7cb7b1 100644 --- a/tools/poretools/poretools_winner.xml +++ b/tools/poretools/poretools_winner.xml @@ -1,4 +1,4 @@ - + from a set of FAST5 files. macros.xml diff --git a/tools/poretools/poretools_yield_plot.xml b/tools/poretools/poretools_yield_plot.xml index ca516f11ec5..0034f370511 100644 --- a/tools/poretools/poretools_yield_plot.xml +++ b/tools/poretools/poretools_yield_plot.xml @@ -1,4 +1,4 @@ - + of sequencing yield over time macros.xml From a4e266b49ca33d08b886a52dc0845dc33a4a608b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A9r=C3=A9nice=20Batut?= Date: Thu, 26 Sep 2024 16:24:10 +0200 Subject: [PATCH 26/36] Remove wrappers of removed commands --- tools/humann/humann_associate.xml | 77 ---------------- tools/humann/humann_rna_dna_norm.xml | 117 ------------------------ tools/humann/humann_strain_profiler.xml | 68 -------------- 3 files changed, 262 deletions(-) delete mode 100644 tools/humann/humann_associate.xml delete mode 100644 tools/humann/humann_rna_dna_norm.xml delete mode 100644 tools/humann/humann_strain_profiler.xml diff --git a/tools/humann/humann_associate.xml b/tools/humann/humann_associate.xml deleted file mode 100644 index 5cfa4ba2de5..00000000000 --- a/tools/humann/humann_associate.xml +++ /dev/null @@ -1,77 +0,0 @@ - - on HUMAnN generated table - - macros.xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/humann/humann_rna_dna_norm.xml b/tools/humann/humann_rna_dna_norm.xml deleted file mode 100644 index 624489dae23..00000000000 --- a/tools/humann/humann_rna_dna_norm.xml +++ /dev/null @@ -1,117 +0,0 @@ - - combined meta'omic sequencing data - - macros.xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/humann/humann_strain_profiler.xml b/tools/humann/humann_strain_profiler.xml deleted file mode 100644 index f9a07a461f3..00000000000 --- a/tools/humann/humann_strain_profiler.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - macros.xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From c2e1750134a51454bb6603aa47797a2cc8b1ca3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gr=C3=BCning?= Date: Thu, 26 Sep 2024 17:21:12 +0200 Subject: [PATCH 27/36] Update poretools_squiggle.xml --- tools/poretools/poretools_squiggle.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/poretools/poretools_squiggle.xml b/tools/poretools/poretools_squiggle.xml index 38db80852cd..3d9e56d8cf4 100644 --- a/tools/poretools/poretools_squiggle.xml +++ b/tools/poretools/poretools_squiggle.xml @@ -1,4 +1,4 @@ - + for nanopore reads macros.xml From 567c48b703911b51ff6870d9eba20bc9aea1367c Mon Sep 17 00:00:00 2001 From: M Bernt Date: Fri, 27 Sep 2024 09:00:30 +0200 Subject: [PATCH 28/36] Update tools/poretools/macros.xml --- tools/poretools/macros.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/poretools/macros.xml b/tools/poretools/macros.xml index 39aa8a86471..a53e3ca49fc 100644 --- a/tools/poretools/macros.xml +++ b/tools/poretools/macros.xml @@ -54,5 +54,4 @@ - 18.09 From c20a8bd3354f424b08b665e2022f9a99c76eddc9 Mon Sep 17 00:00:00 2001 From: Wolfgang Maier Date: Fri, 27 Sep 2024 10:11:26 +0200 Subject: [PATCH 29/36] Update falco to v1.2.4 --- tools/falco/falco.xml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/tools/falco/falco.xml b/tools/falco/falco.xml index 7d12090a805..aae928e08cb 100644 --- a/tools/falco/falco.xml +++ b/tools/falco/falco.xml @@ -1,7 +1,7 @@ An alternative, more performant implementation of FastQC for high throughput sequence quality control - 1.2.3 + 1.2.4 0 @@ -159,15 +159,15 @@ Falco_ is a high-speed emulation of the popular FastQC software for quality cont 💚️ With its superior performance Falco saves computational resources and gives you back results faster than FastQC. -We recommend it for most use cases (but see below for exceptions). 💚️ +We recommend it for most use cases (but see below for rare exceptions). 💚️ The main functions of Falco are very similar to those of FastQC: - Import of data from BAM, SAM or FastQ/FastQ.gz files (any variant), - Providing a quick overview to tell you in which areas there may be problems - Summary graphs and tables to quickly assess your data -- Export of results to an HTML based permanent report -- Offline operation to allow automated generation of reports without running the interactive application +- Export of results to an HTML-based report + .. class:: infomark @@ -181,13 +181,10 @@ The plain text report generated by Falco can be used as a "FastQC" report in Mul Falco doesn't currently support fastq.bz2 as input format meaning Galaxy has to perform a relatively slow format conversion before running the tool, which together makes the analysis slower than with FastQC. -- you are interested in PolyA and PolyG statistics in the Adapter Content section of the quality report - - Falco doesn't currently calculate statistics for these "Adapters" by default. - -- your input consists of *mapped* reads in SAM/BAM format +- you need the HTML report to be viewable offline - Due to a bug in the current version of Falco, reads mapped to the reverse strand of the reference genome are not handled correctly and reported metrics are wrong! + The current version of Falco relies on plotly to generate the graphs in the HTML report dynamically each time it's viewed. + MultiQC plots generated from Falco's raw data output are, of course, viewable offline just like the ones generated from FastQC output. ----- From a181178679b957b9ea1c4d30e7051ab49bec2e8f Mon Sep 17 00:00:00 2001 From: Wolfgang Maier Date: Fri, 27 Sep 2024 12:26:35 +0200 Subject: [PATCH 30/36] Improve tests and update test-data - part 1 --- tools/falco/falco.xml | 64 +- tools/falco/test-data/contaminant_list.txt | 386 ++-- tools/falco/test-data/fastqc_data.txt | 218 +-- .../falco/test-data/fastqc_data_adapters.txt | 72 +- .../test-data/fastqc_data_contaminants.txt | 2 +- .../test-data/fastqc_data_customlimits.txt | 1636 +---------------- tools/falco/test-data/limits.txt | 162 +- 7 files changed, 470 insertions(+), 2070 deletions(-) diff --git a/tools/falco/falco.xml b/tools/falco/falco.xml index aae928e08cb..5fb9d98b30c 100644 --- a/tools/falco/falco.xml +++ b/tools/falco/falco.xml @@ -76,26 +76,42 @@ - - + + + + + + - - + + + + + + - - + + + + + + - - + + + + + + @@ -83,6 +84,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -103,7 +136,7 @@ - + @@ -111,7 +144,8 @@ - + + - + - - - - - @@ -171,17 +200,15 @@ - + - - tm1`~^I_S&Qz!xeYbl zfZe-XXV2R?6Nxmlv;dV1{%l&HB$R20bhQek6a)a2LWpBkAa_FE0So{D+EOwA06?Td z5;H=i0sxTT3jaUQqF$+?5Jnk@)*9voOBEFW7vNSG0stA@Mq_DZ?04Kp)S|83qvPOn zx`1)?;+gqsea;tv3iTOF#O5zHjP_z28y-}-afB^}> zo5dG0Sod>bQN-lCiyH;PEslW!Q3c)*Cwv4DTwMVGIuhS^0C^(Sd(9Ax!4aAvjUJL^ zJsDH4*!jP9set;HR9Iv2C>Wz^I*=EDWhgZ|oj0xoxKcx=+5e-%Lt>dKReOXY@WeqP z6A@ZQND3ahESl}L4U=rK{~Ce+Cnkzy-M46$L-4}lz)&7aN(SoXtuz3EwC+S}&Gx@) z0Kk70RTyMB(lFo*0wo9mNh9JR;sL-S`2a+4w_saWGT{HI{*MqvM*?meaclh~I%<0v zKx8QnfG)oSP-sMof5ZV8Ro>yXL+$`j3gm!V*M}9%o?-Fd%~ig!>}@QyByk3;+O;xnjtdnN)yy90M^nTUWZV%>h%L z!R|g}EaR4eV8+!BXi6>$*|qe&2siIa6|LFvTkB+S)q%|1=jBATX6)_4|N0n-c3Xqax>nujC< ziBY{LD>z9b(h-6;T8wJ+a!+=%7$Yu^ctc5UA&`$kd79&4vFe*KL8wH?x5d?L3glG- z(Gtl4;DCm}V*pS9-FC#CAR?5kN|h$py4s;ptx;KHMkS%vC=LxGPS-@$qSUIu3@8Hv z5JXVwrw18g&}wIflze6PUngp6!Bo`@`)w&0Jd6f`%9`e{>xB6Tnv_63&F4M4qAl4+ zWsTZFls&@?Uv07sUh)tTK&6!YNK!}~P;=iFa6qWd$Yy{ckr*^EgTPRVz~Y%8_3qJC z47EU1^lb`5v;jdSDAmFt5guANB|I>0b|HAAXK5V_$sl_ z%{2+QAyHf@o;a&Y#RzIp1xvMnQ&VK4@IXV-+N4;><`c^AGj-1OP8Mt8y7jTDrS(8f zbjxDojPocuW96l-BvchsA!Ig96`ullRS%$KQmHXFic&=ymO{8_@S2&gfwPgf*tZzF zots<%Bd|!20r7V??PUovqA!7(kx@X#I+EcGA~`_hRa(QPx7fO!Kj1W6Qvj%H>Bs?qa3sVZ=xRR)}xgnAORX}1D z0HCbixi1m|AW~Ju@T#H7s7(q0w-5$^m|uec#FfNZ22d3;1F~DZPQ!_e=s`q0WDp3D zjA@3TNz&CZaN8ODiqfh`gG3Al1tNoGlc^aRLSaZg5Qd>Njfuwq3RW?~Ac2s|TH-_i z5npU284(YkQF$4xG{cCvR25wXAY#}C*b|7e5uWZ*stj2e$nEMxz#G5_JU|eU8ZjYw zj7*KsAdre53M=P_P{Mc&>G^>4DxgMN0vcRvl$8anB~2o&0%w(%@qs}G*vKjr18Mg1 z3|bA51Ob()Wuem|0h%BMA_9g10ID)V@)DyARn?M+BVqImk^eWX-F7Cx4pu?|h^C9B z2N%Sv0!CXU0n*Csq-qpt8I)-yr2xPsfQT2*S4FH!@G(Zr9Kz@3xl5_x)Bs}RQ7wKx zzUi6+V|Pio#I1)+1L!JMjNG`fS?q4D@Y}V)kwll+m?suYp^}(2nns#NqOJnJ`FgYR z;qQZ+x)p_!^4VSKmqy1pWTr&F#i9q5?>&V3&`t2or@uGfZytX8=Ukrl^YO*cXGb>= zn)`3^8{=<&J8sa{jt1R(cq74uEsLiZg0+51PT!m|v+Jd>Q&&7>#SUa>2RcCz_Sq|rZZPx&>j_5EbKuli zz%+=VfoB!N9o#$m$|tNdFZpP$-oy-mKZ~k!>WfJqRt@CdiwJ7gO{6f_oZ0lYvWy0wmyN3 z$v=umt3^v_h^qh4`;G4|?WH`hm#|9Q`5U7=-#d~QL6PSsSKm4 zNmq3fq_okOT{BaV0zBHAmnpzgEw^mtI!8|@E^vgE5=zf&5dBQ58K%_^($myv&!C4f zml-*Rg<_+)ALhnZf7Xsw%TGm7=!K%}u+^;TYOMGiP@ds_L!6vJxj}5KA*l_$jc5ZO zCGW?CD9zA^m0?0yGIC9O45kEyh_gGzP2}*{`zK0TxJZoV;c!Iv)qnrdqTGl>zYpZ4 zc&WmIxE4&Ie*;&LXs-AC8X|B@Q?Pnjt)z_o4^iXD|q{~auWE4Oe;wfxnV3F4F<8q$r(whu?W(q z58j<5WrOHXLe`RDE7F#q?n+VRU5*|zzASA-rs&)F=VJKIgW)g_-Jz|t&bVibZ zt9wp41QwZ?7R`^~ws}|;ymq$K4UL(?2@x*Ns^cwOh zd5(2oNtpC$#mHvpu7JYpU-m#*@w((H_Ca?f(&x#mAoC<@enrT;+H^=Agen^y72kXM zk-LK|_ufO4ssh1JG)n2h_R~+p7zrN@KQ@!~b5iDj!D%vf9QS};0`OQ>Lo!fyW^Bt0 zTTC2X)+il9f{|213#U$sfJhT3k5QDLD~~7`(4Z$iP(=72RGDUgm1}x(o_MXql&Xv&x*|LENRD{la&s_=Aeb_q zJc!uNGPpLry|WUb|C}p^RFHB9!4}!<*AC{JBbBTElE;Icp)Vxi5D|Vi8wZxL#DxGx zp?&d?M}J9)Zt9=ieGtE`tNr_QVJb~!HY_kML@PMX<`u7?voTzd?+jcc1B>dSR$_a=U3ri@qdO0Ml1 z)fpw~g5Q73$AqBgWx@qaR&M6bxI2(v_GA{b+?gnH6J&-K8z~`;Zzhw!Uv)bS&30it zf(lY@`iC>|C;wJ-d-`?^(swA2$-m+ce%Xo-?!PhaJfBLo{P(@n!W#Egp?sB#gp8n& zC^ne)bAp<&qFtEai~ZqOcW$2i{rTjEZKQ-i;m-%_TSC8N5<6q4*Eh>bv>}* zy${zLubN*iy$CIyH?k&p4{;UOw5|y9?Jpm{tP<0cC@fTL1k&BqoIHMlb7oW)g&%CF zVfiI#7G96c?PE0`v!nL8$9Klp@x&uR&~%KLUW zrrT;JQ}3YXCwfm^%+lxbEF@vQZ=-FwP|DS6MH}mcZ zyl8cbOJSY5YAOK<4&@c%qo=C%wG4rxUWbB)7*bQ{cSdY!DNB76#3_r{&q6RZFGPkP9;Pmg4V`&{tU4A?$s zak81&`EM8P?-%Z-$CvH-{|=ozEPJ&2#75F8i}mlfA77ibYXTE#9$gKc-G6A9QdZ+g zSZsW%^(De2USm}#X?Z#Q!BC;J+^kGF0|he$)PXi}F}-fBlu0YkH4$?8c#+(w#QeVZg2>r z4&01Qd-g+3nHMGZg&H&6gG?qD6sCgiuDmhb-gqvE@%?mqqF_6n@SOGx;Y$1g)}dGc+V`f zX00p!S_~dH*PRBdrr*3;dN~!3ZR?^a{4Qpi(>nj=nmZ`mi>*scsZ}=}Io^c*l`*xX z*C5^Xr{juRdHLn*Tn7QiC2&(irqIp%ZrGX5Gr7x8oS&QG!`DRkS&fH`nJDH_6(&udIx^dwzd^`DE?Id-z=Wj!@lTSKgn=tFXDX z#faA6D(CshWhM!Cc@F6*W6Os&12z^+1fj|`_MzA9nl4QB#r(!?{lv)=M}hgEK*t67 zi{;JrOZ1)i`XSkibPF(F2ZKB zej)XpCVvelOzOvR&rd;y_lMYC$@kMdYCB);P~MlBv5FO4JUa4Xsrq6LSyN~9tiNjP z(H)63g}=6F*(h{dEDh6hW=pc`9^GHfnjck2Xm0YlTUZtxEKR)!H%+J$s`n7@KZXFG zJ&po#Q!T5kKC zvGc&CT3~G=?GG;T_-kkT5FF$Yo=_OZS=?h0`}*eYAiOO! zBurVO>;QhB?K6_$&5q-V3Y>GKM4x@nkj`67!DFX~&M|Ju@+kFski#_gomF~X@Hn5= z_{@1LMeBoI`sc*sNY8Ysa>#PQ@FzCt6wYbJh%idouTdWox z?V`{g-|n=Zy*go+JKbxo)bc>a27WzkEOnoMj^YH~wogTK|Df7c-t$qNQ;GAOZCUDb z@t)MJ>aR2Iq72U&J0OFDuGvXl=5njK&pX7V1sVm0p<_Ot9!f^f%@(%rbe6tGrxgzI zCmHHYl$(OkkIcEA>LfQm5m^u12&nrIyvEnBRyoX<#2di5DlI z$FU`D)WA>-#>%h5oA_1=_Vh9-qlZRc~yBKNslSJ4;(oZup6FiYc}+*qxJq$ns<<(E826zUfFy;B|dZz>@+- zu_bm7&Nq)IV>-_Q-G6?^xo|gUcA9dtKCY>Y%jd<9-w6cq)4Ugb zALKaW(NUdaM^vBK`X+rey};38N$BlM9Q$^IoO-~%!rgm9omex2!v-)ixrJSzR4Is_ z5s=I1$lNN_w$s9xAx5XhRvBdBvG2dq2s|S6?D+lCA3OYMn`_3_k7=gx@SbO(uXcWU zkZ{O8?6;-do%%~wYNnx(`Pe^%CrH}baw?ejr%;u`>#sBSHO1FnZs_=FSah9kIn-#6 zlx#(81nKX5dlXG8^QZGuz`O<@r}dY&r`79pv@e>OiXg#PhlV)XG%gKwMisjF4?0q zqT#vSFI_W1+4Si>c`WSBT)jU*UyMMSEoSqw|v-2I)QxJs^ZCa-{F3{w_Kqa<8Uwh`7jCJbZKbX0pvb zXWw^3|t}ftA(PP zygr4?!KqzqnF-BxY4XoM-n8e)sxOHnw)Mnm{*Hycr-nDk99SXWeqy|T_^QiO=mR13 zmrLo`a!}IGstw(rrv(3Y#gPBFf_`2)oUmylg{fE{|o3x=`J81vMaxL?Ql=3 zt~4*u{!!|_yY~3~AhFTa_F7#|uiHYkO!at%145 zEx^7i%-F-0Dh^5E)secM_znxoP3dL*64cR8k!$l=~Ayl*>@8(vt zlSbCcoD+w_3PRoTu%1;}MN7OUZsXF(8JCCMWrFM6i9 z-tuUyni6J#>lC)*ld>6#;*w*ist-5);+$m#S(Tnsx8 zyBMKphpAj>K6@!@yBEpFr~0Ypkn@X-(mU$tQv?gg2D%DFjXtgNmJWLR8Q*>u@lO3r z!g=n?S9O0r|EjaFpoyo8$bXqQj#8|HK8VzxI#9h^m-J>k%UtN)+xW3GEYVGMF+Xs* zq&4a7YMJ~JU+uO3oFn0Bm+X_VhUt!jlT`}0sp+xppvP}Jx{aO~>|VM5Y*~J__b4T$ zr2)37{-Co)@M+-(MeB&8pwk_x>v{D%Zqn;PiDmm!zcyua*vEOgz0#Ze?i#gk`t23I zO+c@oLxR|Ldsosz-y7J^ic!DGjXuuxRXlZ9S2=)V`b7Iw3r?zOBg7`AyrhG&h3Tvw zzwEl(_`&zzr0~tNb`f&fDdDfLK-ZpazWkl1+_F@ca{YZSd6VSFeN+A~?Y>_f+O0kD z2`N^8rTDh0JO4qfZbpBRb)^yfZ${V3<-rB&YEigfdaAbFH>%kQTFo>QLx zmX|Ibk)kf8UK*s8{Jg`*LQ9<~DcYl66RV-YpuKIyKiB?kDS*3#h2p3o?1Ow&XS_kg z&^jn}GK|sM=2~iWZ*TFTX&04}lX8)X_1Diqq?V(GkHtoCW=r2+q$zx+_`u=KUD2L! zxs>+HBw}x2!vtCl$;zlVJd%Ibk<#V1b8We8ZC;fc{;ytQaM^~b;%WXr59>7s3dFf6 z^}Hfd<89W0lrQ4%k);Fu5>J`~qEam1^SkMJC0IK?q$srQwXEv71pRvZKvvdw#JG6O z3?tY|smL5O*9g994eM0PnGbrLY2|rbyU(@XUJ^2zp!Lz$LcL+PU8pA4n1u+E1-5Y2 za;b_*s%@reEBRwgGTFO(9KY_(zgFh^$6I#o)(tU>K~!;m8ZXkJSG#?R1r=t$mHl=x zqCs*4=l9x+R@cI&LQ-&lF6vw}mn8RCj5GhjEv?^vrDYS4+xX@c2)>q`NS?@jygKwz zFeqeV`)Vlm`f)7uC)TQK=U8H6J{#Q;QFqv=Xnh(7Gb(PVN!&NdK8~NH@oyAIqGr$tGoqFN#liVO6b5l3{QM-5QQuTz?RHP;Dbw}X zN%hjm=t+_Cdb^_g)sFTCdIMZ9N5QfnYSH{vC|5!$aT2;bgAYiYUB()F+v64x zc8#a>#%Cm=xKaT#k`dW?Ob*E;; zCf1G^^Dj`gn>Cyg7nae7;ffI)U4z;*f}>*kesOz6pi#@g-3bGiZY`}G4C$ISg@K`< zKwUgcPuii?%G!p5bRECI65s9aDoCxq^HR=C9&J0NjV;eKGtJMq7WY2g>ub|^flRfr zTp+{=G1Mk{*w&+vB_>p1gnPUf#?hae7%IGtbsb)Z22n1Wa3qZ;BuLJm&f=P+MBPYq z4e8l3!1pB9m2&&3t_8Ud1SB=~dQIhx zaXZNmPw&LL-=G3eZ#gBRKX1|}1&=_=w@vrW4yAEK~wO4V4<7Vm( z>hl{)QaiiKwl&6TB34}(T%tLu+_QXEL%CHk>2bKLi@vX)95!C>hiz@4`%saHy#rgT z|BOV^sde3MN225?0mxuCm(ruGgJ z-dAT#G`VwMsW!OIT-UdNkr19!VNAn}(l_B(%4?bo(Q7zN8%lC#0h!Ibv$jU}qaA^v zwX&i6T-5~FA=WKH^jqv2d!HLyJiMe4sLO&uH*782CuCg&GcIQ4=2dsJGc?3iHY6(= zFPh_cKjn3!&DslI?@L(25c6{A1}}#h9wuy}Ys>pg+90@RV}5#yK}LFesF{vXv~Zc7dek=CPji{D4=TqpB}^6>F^M zl@Xh6a!U>L1z%@EZp3&({zK8aiNPVkH!;kTUa(P#uv}V^w7yMi=F9|U$^zL;AA19y zXz%fYLgrBej4{T)fa{3&)Jcd@3^Fi?0J2&aGVOc}Gh6nwg;i;Ht>!heq?k&R9W)Kq zGDp`%&X!YY2-Q6v%FfU7BhFw--4k`I;IEac^T(*q;2gA|fonaPp@Bo*ZCo#$ietU9 zcO7&Wh42LvE#Q@t$x-3K^DlG4P4+qyB3Aa)EDWWw<&tIdO1drg{EU4u`S(D*9o=q4 z1+AGVZ|nL4+mTV`AIAcI`Cs4+Loa#v>KlraDK+L;A4@Um)XPZ-@U`YF%xbAKPvCMX zTGJZOSz+-6RznX)dXZ@J+D7aXrFVsoo!r?zh;Tz4CNW5X{A~mF&|COZmo{cYijx-AkBaOX;P{h3T0?*hNqsPASY!SFj zgG+s6wD<}6X{IA)+tREkj1HIN4l{>yWcmvTk{Vm1M9A~l4P4Lr!r{m2w; z6lz4X)+R}U8!R{n2E~WfBo2%6jI(L>$s9U|>XP$c28&>HrRW(%5Ei|Or;P?#^WS)! z7P`Bv*R(`vwFSZav9@^U7}b_y^?a;{Y_^$qy+u%p1PJ#!{@n`Amc5ycQrfXe`JR6O z*qSr!-B|!eRYyW{LRecyx_6WnxiE=yOBZd>wXvQXM=z(diBriKHWE{BNRJoVF6n0Q z3wjJoiY%IIP|$jhB~R|@STp%fe@01}XVP7f?R}Zk>0xHUt*8>9XS`)X?Qw7&;UZo5 zK#y_rJQ~lO(!5!wte!4{5Y*vmgWtW!KB|Xjrlt1&fzO+w>eZ{WPtWvXo?S?Pp2WF5 zxYob0k(4%8Fd8_u_i0ODVoln360>1gogA3qG3b_@@#7x9azb?y^bWoIKyL!M*Wq-A z`{7(Be+An{-WWEy20uRB9mM88N;S^n!?R|FqbYgC^$K?U*1_Rjbz&4%iKRp}DXQ{1 z@gO$o;V9X*94l^Ao4qBr6{EKVEi3JsxKj_F=Q6oh(Mboj<*s5{$Bm{V%e*K|AG$n3mcNx-K^5j`4YY4!ZfS50DQ!owR0bCxvKNc222!NImsDao+q3W^qk(@ zjFfmrE*sOKU*j^EPS2-82oVW#7cqW|hRQRsId3@aDKg1ATC}yB=Ch^xTY~u1&GS8L z$zL0RrsoTg%^N#=s?}=Hk3-70)Apz%cHw{z`i9X|;!&Vo9C1gJCZF0PiJ zpwhoWAm4Jc4Nt^`-lMXlq?g2WYE9_fGi^=vFL?vW>FF}rG=ax9;7`h9`#04QRE34` zhG;zvR7XXwPf9d@Y!~2L{UVEwm$44oA!Bj5NP}lKWfB|Zwjk8rVXjrIyKX#y&uhcQ zr`tIbN)~ktYZ6@geX?fygHv|dixsCwCp$u~3sG5JP8dntB4@-v<1{$N-X*8D)`1K@ zzm;h=olOv~FaL+#dtSpLldNe7Jvgb(>6|SqVQSFuZFuste1K_BzlZhnx&_*cJR2w| zmsdn8z4ngk0QAv_-jnnjKeO2%-<~B=1cvZJ?XMoS^tar29u(wERm1B{12Iie)12n(1LbWy&UJottl;(^=p?bTA+yy3j{0F4{NrU$C-_ z3j`5+{d@RhKOp7ej%OQ0qJT@-<;mn728#MjHp#F5`f$T#?hMU-qvP&6y2|c8Xp%4f zH$v3jXu8L*(Ek{hp3Mg=1F{G11B9{weu`-Klo-6IdfgExp8u{a%v26_5VE z^4&WD-OC5?_JH}s)|p@6eJ^0QoqhY7@HcNs()f+NhvStU!u^SN(gRr^0Cny!HVw3Q z@jep9@iGYu`qSEMnI`=S%-wW}`G z`lHL96p^a1@mrQ7vGo@>dO~wQY@QbOz{LEa(%A0lZzH}v>LFSC3ot%41(Y8@g_*Fa z{7GIoP9sQQRZm;*-g?4wsl!J5^YSo!gS#>9SMSIYrZ{19?pInnyNt4A*uINdY=M9U zbQ3vWFiPI}StT^a{OpUT-a~TL$?Ic(J08SzohUF%)6=_kqmfbQU!iU6gNFblOR5|| zx>QKn-uxehv^QM89w=R9bFRLLNH6&tTsZAs{G0xDTYrVawKQOpbJ-y}nu1U9?fz9) zal-3)6x%Dr@;AkiHmPmx+HJNM-@FS-QnDc6Y;Un%$=nzx*I@yLLJ@}xW<8DDz zZF4Jbqc*juIz0i@C}A=sViO!tj4Z0pav2|Lq}Xa?weVVd`;6)#MGbYC&c=iOqKt$< zk-EJ=OPV_h?@g$fm$iBfz{OituYMXbNc@RjccbO~IO!t5&o6VXw{OkCd(~zbBA=SE z=rPYMEuXpOfZ$9_n5f}jPomY`Fvfk=Ae`%Cll`q0Lwfp+>$%U{drMsX?Wi%2G1{~_ zAr@TfQlsra5i8nPR)tBKy#2)2(U(Nw?>)%((X4X)@%?kS9>m(^^}12-l(uakM03)J zJN9g7bZ;V}c3pQXOe|{w*v0VGlm9N4-cp;7sjHjuB)hP|fUx`XfPuzi)1;>XFOvS$ zA3S0Rh_~&qk8SABIOkW|T8P&A^d>;Wl>4Wh>RvhGvn72Aa@c=fnD=93YW=vVSFtlT zmy@PN%)TkSrVBUZD(L9c-8xo-wOwV|eD+iNytSy{Yp?%KrL{mEETDe?-)Dd3@bm{@ z@+|N==HH65A|JFTlD_iJ*=2O3fM!D<8R&sH$>g>-9jFp>NXDg7lk+w;m3HpY+kbr4 zQvQa1!5Ei(Wf@`dd&la=dO;a_eduiQBg5#qk}oIGDyLs>Zx#T^HJ#i3kGn5*&%!Id z!7#YGXZ2!y3mJXsImr598txS#qJ;w{junwqjS zXGrJKd5P;Zb+Mg(8k-pDpfJWo>XQ9W09#Zt*JQq2M@0XSaAgbM{{3wo<*dhbdfA+q z3jSdqHNTWX);8DqB8#xRNf9QaJmGC@Wt~cbr08=2i_I7@!)QSv7G_z}{DuUHdy5|J z${9*ptk)vtep!}|=7K{uyKoV@zj)A#`Mqo<_v}}q4z-@=NeUFEPv0L@scA<6tl^T$ShLCTgxPlJ74Jud7@b{bW{vFE9mRSD$5KshhI}izFW+c(Qv@ZR zpOf^wWzJ)vnxT<2uFl$B%|P`T>KijywJGlL$y^4`3j{ zChrzj*!&%HgBiZX4D7PIOF`EsSe$c<4E24_hrZUZQ{bK3p!0BqR1PWIM1+f$P-SeM zuX*)4W|J99YsAe}u(~;^u7jf*7-G-Cj~h(KRP&&rjnu$$#rL`|#N zGV7Fa|7+*2z)3bWM`z3G?k@LCA_?~pFL9l7CawJ3uC^+;K}*qcJ{4Pb=U6VkG;2;_ z4VD&-n{39&u*>7znE3HU+AT_Byp0 zv;~VrBUytxJ#^_1aMqzl)sdo3T9MRh;?5fL6xG_f1zogder`y%<3O#>)_`Rjcq=9+ zt;u4OxK^WbSG&c!E{HX*AK3}4*KV~@$RXEiWt3yg5pFFok2AP1k8a7)^Y!=Oa@c4N zJbab2x2R4<{MmR=dBSRTB%(W{AU+1sPpE4bhgwUjeO)l4|rF`;9sA zNo>M(Er!e|o)amp^G12%{V*#%r=srIJ@>4^GH=|B(H=#Foyn0?Y3h@i1Et}s)13j4{Yo? zj06uQ=cN^2n9V!e3gtCYHAXwDj2kj1xsBDm)UjXb6HUQ~m`81bVHmmEaN|s`w7SfE zzlWmc`EiCXUypeyIb!q6Wc}%Bs;ZLX;FE!33?RHskuq@9y|#`Dznn9>D-TcP?7-*3 zozINEy1)@Z9^YB!M}j=%-oQ3No~!j{Jql^+&G(L{->=BF|u<6 z$k)189v&2G(IB~8_!wq$X#q-V>ZheO_l<3y=R!2G$rdKG5*(>`0+(0dQyC1>?m@Qc(8mv zhd`BmI8gbIsLkf4m0(A_n0#Fkj$Bae?ySIi^E*B9wb=Y}!fC@^e;tKoQh=O|JDasN z64vD#$CL?)GYKG@95)su3{!FSl1n+rm%+U$iLc%(O>3Eds}ly}1F5*fw69Z`?> z*sw%8-4`^OzsI>-AZ)I^hj5S<94cyKic_Q9`&7AyW`G!URcG|M7uOA9`rHP*kI~BO zQ*`g0AHf{^H^7sk%M?M5&gIU%F5xa{r+X3s0*wRKMS6Z|Vl2!O134@qX5U;yx7pP{ z)fIKO`lZ{06Bl6JCe_Dk(z-^_ja1Gy2%?1rSVA@5-wM%19X6Ja%M~Sz>!e5j__pkv zF3D+3ud7e0*z6$f=-bn#!1=|)%?e+lRyNxmG~l8BSl)8lB}B4JDoM)BwnJ+m$DAdq zBzYx7$JsuEPJN5@T94V7)84{HqCjUv+V`6wt&~AQYy~VT(vQ-4 z_Ib&96x}lN0xyM_w9Kh7o~*0QSt(Ol+ndT9CO?a0t_}S&MoZ@m4j1H-JCYEPwxl<$ zZW3@0$xR6YtU#ExEisPQQfi`mmL(ncCCIcqM^kvwMVKwTu*guGLBj4JH_G!+GfeI@ zyFHs1q5H9EnW|1lqHcXgAD5yQpA(}HRyfvCx}ZAvR(Xd__==j%+1`a(vB*Goppo~~ zb`maF#b|;VAZMiN#a2gT!qSW-Zef$Rpkrs@;2Iqx)vlk>1f}wfOGY9xj18lqargMK z;lZ@34Lmkl%>cNKhP8Y7UZ71L3Ktgn9e*dtP@fjYDfhUqg59+Vd^-NtW)B}=T$}6u zz0k8WEC4p-z4>{o`XXeE)y9%J-?ld6bs}smu_Ma2Z_Lf5WzP2%ci_AguXIXUy^WFw zc=vQQUJEfN*)iN+j_7b;71q*h)o$rzDAHDkc7e~h@+j4VEmJIG5yCDE)y^Z;RUxjxQyouL)B&A_x##N*tH0=z;?n+vej#mbM!~>tGA(#3dX5 zBwqYjm7lJ*I{1>gAnqJ0WjuV?7w$1qD2$OoIBh#96Mw6A)9xo-xy$|nIxt9)`1)EO z6sy^C(84BnDH-IImHoN?>$YUktfPh9d~}wLU6cspiz9p38pP{6X;HC?Vj-a*A7WlS zKJht4!qza{y**RdYKlYDJ4P*zUYv3*F)m1e$u6Vvof>N1EXG&dskd}&Z;cq2*yL*u z@)Q_xlc|>&%_d%T!_3j0E@|y?$;Z1D)_PQh7^hBEv+3y!DJjE+CX$jcOd)LM*)Ec} z^=%fs3)qh!ZUP@@LH8K87iI{eRQNZf)|gBErXFAarrsBp`DJ$`BPois6nZt@v-xDq z1eaB2Jap>e7&q3rW5O7FCptDAUGO$JT{8+#dcJNXb}i&Gc)etnF#hJ5yy@zS$BWx)>LzIF>vR5inOR)pDc9=>M|d0r`oSQ z?e5O6R^nZ}=qJFP3QS*6tn6KG85`1s*LS34O3>U>wV zJ8#~mkv$wbP-a<3I7>mA?EY0dnD5I51~jVKmEJL+&_POI64cjXnrZG zeiBpcfk+9Y*qQZa#Qy5dWwchG;M9Nrfpe210T0;{615X`01L6E&6{-a*k^NSh}=sH z197S58tuN7%9CnnefZ?MDnv2Yel=R$fLbMse5}4AEMQW&cw}$UMc_hAd|H;G*+hb9U53ldR8Hqjf;7Hd($a|UP|I+V z)w_Ju!!-Ul+_5&;>gc)qm16CTv(sdi{XXr@G!HS4SlzHv=8+jDrS zm7l+&v*jBJe@3LC%p42`<8loKCTa=@9|>aa1GRlN1)BC(893ci(Dva*I-f*jb=gO$ z^jvAa4avH|i6PB#x5k{>nLcIR^Y6LbX>O{PUSxI5aZtC7dd(X5LwE|MS;I1mtGwB{ zo$dgKTf2+z;z#ca(Y&sc%)xRnE+@gW z2DvpLVKnd9L0-d059bmnqtV%Pyi@HEPvBLE{-Rc$S;lZ4EoT&=vPFpeK9_Pw)QzEJ z{M~(f;`)FpK)_j(XsJ zR!qA1d!bxuSt&1A{Wkeowcp^EU|9#YcKIi%bEm3ujhW=#@wdMY#@LQ@)V`iw@}AO@ zn!$!V@fc6x!&%zUp%^=oPCeq`z(9rX0%C=aKd#Fx zjJCpB8r_pEj5{-mbsq?bckopX2>Z2aHguI@)p4_DgRkExw$YB|O)zv8Jgs^j)5sq; za>>C}bmI3r=TOLtd6QowTPu!O_i%QRDnEaOQ5@eFO8|45vs9DTCJ;LchS+LJ<$QEh zpJdB6H7Mlo*Oqj--^~;-N<$0)lT-7pZg4+v|FH7F$NV);L zHyJEa^()~nv-5AE{9U7|&0*5+YlGacLNq8#{Ek@DstC)5Ix?K0E1lBtNmB2&i;7o% z!-*a~6m)-!F=A>tl{wUnywlGv zt|6e?~%buFF-{Og`!}^AMAiG>r$3?%HauFCwXbY6u=ZUVF;o zp?0}Ci)&5{+|)~|lN#hI-b;iNHfC`GC9}15E^Kkw&X6Ltz5Yn@RS9Z@UtlzkI|+8J zBN6t{l)v(M$7*^RFDau&pyG?Mqh>Y9f7B~#MYWxWpKR>fHuJAO;XT}4V|TCkyoqb7 zQ1ma@nhnYvl-T0BYMglKFXws6s!BB?_sKprHi!25Dx2-`K8a31ylZt=g^WRtntgMR z&)e8g<)NNwydYymV#)` zEuAc;#I!FK>z|eDGrNE4=LcB@SDAgCdQqf_V!+L1*n@$GBj2`V7f((;rj|-p2jvSr zEW*Od{cj8&Ain<11KI4cKW>6TfbGMH(uzmY)M0WO5(7r${|`Svz`rQA!68x7SuL&b z>YiP0wUyFOSo%tA#lpF}+;lW0U2^iW3`i6SBp~P$piHH@vy!(~E~G<1dUoCBOim{? zDz5$JqlwC@@7-yMnTe>PyyxBLH1G|Zq_HM5W=%^$X@wJWRz%&-x^LXF9W^zJ1lh$G!9K8NBqGKE#(i$6?#}lRkdgA*MW`^j1p4Ormkig&ggES6Ox58aY?1+X(*weB!XhGNMcBID z%2BI=M^xrQ;NL#!R33TIyk^jnBugTYQONaB?FN?DyGHqMa!giqP8E#HA~8vLmz?s6 zI}Jz^a6H-|J;WzbVtVgn)JpP zt#9P4SbJi`&yrf%EX51fx)5QmOl6`mJ+xU%v>yA1BK`B94ANN`q_dlxqKZhNvH9Ic zB-AmSEgshvw~=l;u*7(WqDBVdtO`{ZPF}ooGe|&$tX=6sKc3j+-x?=wpL4|5*I7c6V8#~7qFKoq5D|q=sAdmI3$}lJvlde- zb1z(%w#xBiIx$6VH~@LT$JtgX_tvTGNbA!dVj*8E%{iPLiq^;UHHQ1IB^E@FMdo;? z^^%m<~;Y>K)i%UP?L#)FJ< zVi?Tbyvx;0+fuM|BPuB?n1miME27thDKCg!Mi;DLQmKms!?BCEr-sW9N^b^S#;Xb~ zMq!+=x`RyWYXcDQZjz$WI4&@Y5aRM!x~g`(XS}AYW0h3Rfn8l-$zpR0k}g$SyRodr zNum>&u#8Sfa!H!F#3s_mt9W-UjTtvGa#%JdE~8DLRup2b=APo_Y1&Ycc@co9HtrpZ z#3h39+-5sOHYSATA+4$;I*DmjRZf{StYKyFJExp#l%a$@#uCw0H9mNLzw7?}1Nt4E zaIplBNPaP-fZ{D4FJCz;ZXq_3Q}Rh5k9_ef>i)mhC(q{yFDmz6UnYGfuh-1#3OI_U z>k#ft?|N@})~l?@_U0dR4aE&95>e-Ph2|TIu4O%rq04i`oJcw%>mPHDws9kqxJ>O9cWnWD+GCK*0*-%pg&TkCN1g5XJphUF*fyRCdYcCIlSeiG7T4yNo-`A&C$u zL}<+Ks>377k_j;l2WkPJF$nX|d*2jtED#CAqo`eZ?j8BPFFNN*-#8kn;E%uD#e3%! zK42HQ9<{wF{f|4LaP=(f~x8AdYgo{NW(h4PnsO?29CWzbC z=7FZ%8did;W+Sa+l#ZJ;c)H4!#TdI?%ZzR#N(LZGBSlBgUmbD5%oVxn4IJUjA2#Na zESyK@&2vqc3mgbg)JK!KCRiRW>6(`sLK5rm=FQ&zK4*}6)c8?}s1k{6q&=xblqK8s zu5047@Y)l}B}C(i(r`SPlo~b>=$nn@tm4{CmFp?9oh09aNboQL99ou#;YO zqg6foV2?6p7#|wPfgta_&}!Vyl!+15IF8j4?QKCSGzd~^8ZEu5+g=Xt-{hS6R}Krx~771jAsePNZVOr6!xGi-p!bPV;TIwut8AO)LX#wF$I{ z+gr&QJCmA<7T8u!{YqlMui;5AeyQ_}W zP=t-rX1O!pQy|N6q!fcfLe=VeP)}^FGq%H|J~$E$A`gy^7QEM*GF*20l-MLvF$AQd zR>XxIA2-fs#Q6rH_}&FHd}bVPT6|*jp1QcD=6Zn0IiBNCS9DKMZ+JB8F{SVAuR8s5 zAD>$EyuVr+>$iUDYttH@A%-m@)eIyM@-1dTac{_L4OF&SxWei*&d||qdt*$;vFDH& zJOu0$e{3w#zRwS+nDlq%c~7#pahXig*wkk3GacqG^2XBnPc^&ZS%vno^ZOahUtg zKNe3U-?{nt`TOv4zV~GeLGRO*0#R#zzY8q9(qcs@^ny=rHKx4WnWk+dMT-&fTU6^x z4@kLW-&a~@Em5%sl5TwqdZ0-m2`DiZ*i5tDPhHQOopi~MS2Q|KXk^P%WIt7B3ChOb zgXgP}1M=&|>(}GYne9o=n|}NC^EuCrog&*)j@7x|Bn;z|SEW15Ca;{>{XV*LOTO4N zTW}qq>US`ZnDs1%k~`;O>2ES+n_b^?6r-oP+K%zGE->A3JniG=qML?+s92n7Bt{_V zMj;6I!@6Bx5yascwg-wU8xgb>w-MKq%Ie=r4mNc=TT~?p7Tk1{34L+*t?g)swg!=s z{a=+)+_S+Hqp?C&*!i~xA-4slp$JL|UCRs5z3ZSP|$it7RpiMVePRd^(TohUc2h|zczHBq)@zl$-H4w_N4K|p+}y4o*sGcQpd@k zZz}4BdP6m=_baK*QKeaAv)Q}rI^B(ERDGe_8yZ%xHnwLPh}(I!9v`0mM{rYY+cPtK zc}?yNT>4`sVrpI;?+cg6xpxsUbr78|n zIHOC5;)5<`6!%jUMv#z@AqhiH*HRS;cfD3|l`jNCQ4*$HF&*OR&{5KXAjRIMO{jGF z&2objM-}%rs?>MXlN)Xn+`%Ym3*hrhIJx3-b75#`idD^BMIagq5RZQ2-jTDc)$RIY z5;NXS?>AH9#TKJ|jQHiuaR!thbJxayN&r^wF-j7awTp zOt{YGV5J=(IEfMza(7u~CkhE{8tO*{%YioqEotJ8cT)u+F0!PkL8LC$_pNc+qnsQK z(k29e>pYDePf5oa&mHfQox{Gl)jpF>=TRBk+SMI7+pyUIws!g)OcA09K63Y+R*qze zM~F+rA9W5o(~ls|yQnEfb-4sBCWhu?(lK~RC!JDB*&0BEcei!PARvfg(6UL&=FOt; zZmbd@Fk(@}-sn$*u}0Kz9lvXoYHrEFO4OGPd$N<`lb>42gi;KOc4NaPYf~v(r)s(3 zA96Bzcb6w75sgIaC{1|gJuic<3Hnq)cJ{=6F^Y0qs$nlAwK|>KolHwto0T|o-P5a< zeeK?$V8EHWVBIjoCy*uaZPdv>D^uSuRztH@yWvj4lR0~VqspO-WrWp(*6GJYOtWlD zPrg@Kkc;lCh|Me3q-NR@R+>|a*AFuGYUd9McHo8!7{gZHRKFb`$PP%Rj~nax7Z}TO z;SykmhInQm;Q;%quFMMaZJ5}l4nCVir;^?J!_NBn-(NnY*PfDGxwlkPWOkX3i6nBz zT*KJTW^i>a-*_d9H8}^^<%E_{#OG-&(X@&PcXeXD<q+@Ro@Qq-L(3Y)#Qd@ zIMbMJdQN`sdaG^CDAWOhef-kNk*@qu$I&BARxDWYcM!%7W@N&%q@m=Noipi3-RnDF z6wF@V-8kUlvFQ?=wc;|P`6T8ZO*j(r@`U7BxPXi?p*H({x!5aMMuwp12qTCG*iPYn zfGe0sxJPguYY`u0_E9N(g#)XZ*Lb~k-+Xs>=UiI6wd=(*nK)t9+`|~l8G4CxEsbk* zaqeNRLlLb>13^k-4@uTu<&4W^sR^C-(;{J+Dk|ni^{gOC5_O@fI^3!wV|W$r)WR+l z2{h+jYb9Q6S(;fKS$yg#LqQEjal}WS&gZGt(5xk}Wm`E{cy^T0=!#lY$N^)lO9_iU z9N&7MJQLZ--!-lI8bmb3GKK2B;N{TXQ{CKDxTfqL=j1x>hWuFJxLgWZ zjOtP)s+4S2y`-5|$}@cwFd>5fG-r;sKI@TiiYT=xeQ98G)T33>@~gbukcPc3@tqS@ z;tSAWO2iMTYb)_1gcFA|?DZ4Uz7&+zd)roUEmxUIkM=9h>7A3{7r-YI}sW^57!V8R4LU@Q^=|(JF$bN(7JVzT2L|JoQT(qY-Q98D=^X|T7n2rk)mZs zo~NpH*}O3++)F7(_4yKlhAj#;Ez^ApcV0Or6Fbr1^7ot12j=}z%zX6y{8K4&DPxnP z@!##uqxsx@+(Z!(9QsSw?e*yvtD&OVpU)qbWPXX9tb8a`?cW89ZN$_ftz4&!ww7az zAn4oDG(_U1G-ht(D5x`7uHD|Ls#BS0ynLLjd55J71;hgPWeTwj*-10Pi-{3?&Q{d2 zjO5O-@n(%`vS?+Oc`RE^G-JnTcG1bKxMejG_UW?C&1IvP4RMh;5ln-OyVS%xS;m-C z7IERjyfw)-C6J4{$aRYrLqtv8B*yU85*nWZcNduE?i!_|4ZXQ9DVAPZe2Aq%+T5V3 zE`=~*1iMMB&|u z@zMp8gNvcT_>eUYrGHou;s^AH^pFmu`hb3}xXr+GA>j_B=kbBeQmvT#C%yBe9wc%& zfZ{bT5xMR=_ci7RaB&ON97(BpfZ`7$nO|i$2e33P3%TM)%bS>AW4H?MF&#$wYrW=i zyAx*LW(@{(A+X!fvAm%{jYVA;p(tGW{hqn!7SejLXfF+?$ncG|oFLBz;GB_C63(vm zCJ~z@36&QFUDRj2Q5*pCj2?plw_-^QbqWdPi>iBK?N5hr8X9+w5g^`3q0TpJeZ46{ zwZS1mNpoE;iZvQ~w8Dh|K?Sv2t}L!La)xB`V#V#BgCbDm({7N!WvSfJ%Q_ucny9Pk zq8m6F!w2?e$02p742t9o5X z;#R>Rj_MRw(XCI9o1*tI96{+p4FGnc2BH##q79p_Uwcv3=ggVr?tARk^j@mmO^Q-2 zxd~foRZPrO)MJMJ_3x29o<|t62b{S^%u0SNwu+?cib<0^*_V2$h`DLT-0#+kXX!2O*G*$7 zxs4-ako0GX11hg+rMN&a?rUWE-SswPZ#x|p9lX{@ZNA4f@tX9jC6?GsPY&$$ZZX>A zI@a|>y5+a5zVI_Ht54{Le)G#D9R4?btL4OB1f5aX!2tZ1zYAxLuDpF^8IIza7Eu{A zs%3YcetF-Vaq@pej52!#^^IenA$#q;gyqY#i3yYZMs@M#O8FqBew~T7uxaGs?xhW| zW2a|RnAljp_E-p@^(+jFVypH5S>Y0mS7Q!0wdU^Zxu#%vum z#qG9aw@&$|b_<(Bv65Nu9*o#WqT{9Lj*yV!bnVCDs>xM4jB

L& zGlhgv)z>&BnUIoILc5HX%{*P(O-Zs3*TQ)m$5tbau;gul2PAVX=0n8> z+he!?P#^*z9updAA7_0PW-n^JcbrhZKIHiCy6%SYbQP$RbJ}plk4Y=yD%jZBorDv5 zlU~RlvCa+6Y5gcfj63MJ1`tQTm(EVe>y5cOGRVp6rs~LYajj*{-fanw4GRdh9H@jM zZvCO?#eDN8KFc1sl%cUEd*(TXyqPaG<$Ir6wa0c91{x!qtoxTtScxX8YBLr!tBW`s zNgl(x=5u(XjLEf{+*o;Qy4K!-d?|n&iu23VKOh-&u#j`RceifY}=zcG~J&sP4mq z%&1MA^LiZ^YJM3Pm%!&hoO@zm#6?O2969);H{(B(-Zx#peLaYkY?_<6YRG$-P8A8* zYEE;XGkv>6v?psW(spL`FF3xs?`F&?O=bJzczFqWoES^b<^Fl~`t}L@cSdK{i-Q7b zMN)=r2Fx`(Q%1~Vd%RJ!`)+P2UdOW7`bu)cvHUu6dI>1~zX zTNZuRR`C|~!H>C9$hw2?e;c;-=Ciq@(;?v74Eeac-UYmWS3BHpF28qJ-S4g+jXwQr zggv}CX!qPqwAMsgu+1$@(F5dD{Be^3b7vW}X{^Q)Czu-<3AD_4a0os{Wwy@R_6Nk8 z=s|SW#ieOhtXCITCd?Wh?P}uL;hM}TlQ{1()kEgK55BpZ;d|Gp=DiWwCNM;i6ePvp+n z!#gsk5+&(*0lb$W;^4yCo{8SYzR8m9lQMA#weMcmtD#9-{1}S-7&Cd5heaje(r*%@ znWNP2&gz+`Hl^^XKc}icUQ^3@wh|s)wTKN2b1I_VRNcv!r6QElXSh@@TKjU$j6=Ot zkV#>+a35OPjuEwT?Y>dH%L%p>1xFxrI6>D1OkusNEZa#img>L}|lk`%`HYlm$6brDcb_2B+Te4cl!IUKv|wFHp_nzN#Qemvi* z7TMBBaoW#rTcGXw%?X?ra7hP!O?li+#~&AE5rdsO9c+@q9ps>dmpd7LQET>N_CBky=%OVMQMA#fWNVrh3P&Yh*4puNg9`Q+`p% zC0EK@bW?B2TI<(Vi+Rec{6d;to1cnOdpn>@)P@csuC5i}YkYdJO+GtYQ|ufp2%^ME zV z^{uI9OBYSpb|jf*7b6Hd-c|J?ZwwlVfm2%ec&LIWL&M?u5Gay94D=_Xm(`4Yhpq>F zEoKN0Lvu6ZU{sx|FVH)Q4%!{TEivoW4v0K%s;T*dqJDKBBzx@gFmP~#Jh?r|GQ}6H zDym1*C6)QkjM#fNI_q3wx3UzP&g5OH{x2;o0Jd>f3lK8HROPNM=~;c;7ABr}J<|ltC&Yc~`rF4k8*Lj6|jG z9^n#r<{qCl5~KT z5gj9z;J$Q~)tG&loZhz24?@$%9I7)7Zus{h>Mot0CwkU`I@5-**>J-RDZ9xbGr(t~ z5j9gYI|`*K*q!S^$j})(+dV#HZDWR2O7`hJ%A1C!o#+81cyu)0!IhikLo1G6etu4d;$T^&inG$`xPI`Fmzo@ZF&5M9GUQyq6@_L~Ik0j|gdfn*PDJHD8aoF$Js zW}!8rCM$3_!c7B09Aw!7I_ng}WYzTYmRy#$65y*Q=KGVOp}1kIAP?Vs;Gx0YYu~P? zp~@cav>;Hfw{!eqxYKICXJQ6&LvSol)$Qd9LKv}XQ0}87q(hg$w6oxPPVwA0p8ApA z_I-QzuWa1!*~V@Cj5Qf6;B6#*Kf^ySr|Paeu#?)k+^@?^taFsFZ;mMao{P#-wX0&r zPPTSv?sLl1Rn4KXJy{BhOtLgArP0z2Cm^uYJhd%BsDz$tr693A2}#Jaj7$6;RyjM- zL@}-!iHgn|@7e2<hBr(@ly_7*Z$xH1_ z^HZ!^MrVa&Cb{v<3EEg&S0fdD(TY2cXVgkaPJ<5m6^kLU;*3aQ5Ml)tSnRQWW|rhy zJtk^iMf_T2W+GKb&M2leT5_+=W3^jFJH{_@xbF zBaSmav6n1f_`8p*%jmeKNo>Icak7QPxfMQzg2Q%CYm0$~Mh214cn)YzP>~{q47uIF zb2Fo}>W*^b{9R*K8pInWv1#7uLFQD_iXy&?{BxAJb8@7h<%H3O>AgvHa!eu0K!);v zRGG}MnRCZfSA-i?Pg2xO%@DYpbGqY;ScJakgP<(-D}xskWKtKeJnc&I`fE7e0=LQ) zpM}z2-G;{rLK&rMvk;fcT(HOZT(L^Q)W5aIcDiud`q=iR>$>-)@?6QSm?<9QcTbhF zG5rtQk=B1Qy5n7#JAK~U#jC|CPxmh>lpv9IuO&EtBu&OKf6~wLbI&*p6qgv6J`>jZ z>o>eurwK~S6Xutd3sB0QxL4^$<8&&F|2Z}4%z4X+N(gCrj*;ho+&jcirWFg+)6l;% z0u2Aw^CY!z1hEO480@f0B8#omM$S~jxtw689aX}thn$FkiLTwI$%S<`hB}$cHZL*~ zwNICe6SXV3%vWu7l?u!(hj*rh5e9|5Jh7#ivY|vy7A7hTn<@$p=BDD@8_96al9Dp9 zvf&GwGf@v1D;=8}vMTJCHB#4N6wSJ%B4%mv2cl$|eO*-0Es7+zCYNWi7f3O9N@gxh zrlj+Tteko^E=9{a%B1wqnww`)6Lo^>o$_xQY82H?QB=W}ELg%JYZ){bW?^cc#v_)@ z*-B!nb1NqkJ>wZKZG7*)_mAiEQTu59@ci!2+)vg&5GTyPm>;js0RDQ;r2I`km~{w# zVB+#0VdfkqIfdo}$fG1TJxKdKd5<=xvz&Dyknsl^#qW8{hWNyNnnNH=klZEVh&^1! zp~-hB?)FgXLY^V#oJ8XCKv5dBzyKiVONEB&F6$uH>MfIq1iP%aWO!|B-qX>z#GzSf zi~HX!{PL}CW~~U5ddr$gqEkD)1~CvtQ56{TVi^S&LK&)&L(T@qhqruS!;Bhedz8doD(3}y9Uf-aEnspwVlT2k|$YK0~2f;9~Njx#PVsO%Ql^_UT0Og z!gU^7J6G#8=y2f@;Y-Ja9;e!gK$QePM=W~BDTX0h7t!@xpgNPHv;Ld z-Rcg*zsRs!jx}}gV z`l8tVTcSEUI#@yQRm?NX8srN%>zmt7IS*Ytvui2=@s}_|)mz3pkaM#8!cREa*^a7r ztReuj^WRyGk3ymgm6IjY^UG_JL|e~LndCtvVL0>8W$V7gP4?|v>_S~DL@YHIlzFt3 z{7^-eYU2&$3z$5dcgb7erfu74TY}U)s1m)Jb(L3(|;D{}j6B8ZqLUkAS2U#;G^+d^$W#aiJYIK}VSpH#!w zT$kzWvFPmHXr70zyE1$7(88m=_U*puUQU4?#$Afx6X>bw&K{JsT_E@BJ*UMh+dsSd z-cFBaO%l)jGOws?NS2a@B}uc*JI()1=~H@lZ-X;+Q&b%ui{u4hQI@=E%vc%`)!XI4&aXq5yMbH6;kaObh>CJfjal=_mS_qaehnk zxV)h@4!-;AgJTWWP~^u%Pdf|UPZ@=IE;b#tH#iB=KDzkLF@2}b$d3DRbw&QO&p}f@ zZ9S8}LQ4i``x8|Z-M=VHPH5!DX1(dpuXK{`{9?FT69sKR$E7Beqvk4xOyG&@K0Z&& zK{J)r{{3=)Q$u)KAtYIX-VT#H(Hl2qFz(3?2Hn zuy{Rg^J)Fuz`oc`f^@%kz0NgVoo?7Y?a-p>KBDbmOB*@G@bjf=<{o6#=3;esh=g4B zr&JtRy;$@QdDm#3mitov8sWW`64_MNmQymxN`^ic$@3!%I4sgSAH{CO$Bwt)&%j^PeH&DqzEzsV0J&h=O)%qC%&G8fho2(6Rv1IvV$1X14sL zSbMGOqCy;*v1m!r*7keMuqN?qtHiHC^22c4iX_zZ5}i~*dF(f;vH?C1gEOAFc6#6v zYLnV;L{Pi+(+!VGwb69LhV_J>F^Ho$scMauf$3omOWmbbwUP>JH+tdR%$9S%Ih!8q zv(X3ZFoxd22BWLSvq~QOGmXE+Xo{kO^7pCwU##suRQArZjWlE2V-+>F6u}#mL{Y3# zb!ywnigRCi;{AGI5M8bh2IZc~vtEo}FM3m_gy-c-6gOcyU%dC+`BT&Dao$;a=}|;a zE#t#5gZrF0GDDh!QqhuFD0+vlwD#MtqmVZ3FBzi@9P9fXZ8V&y{*G<gV z(N#dGo^nLkfOnnoV0YWQS0qjigQI&i%=8Uu5eA7?(=x3dvCv)_RAk~e^dwd!Xw|=Qdf&C znYWyYGSu%3@>w`1dxmSHD{~~-`NCnYfE?NsdDJ6dc9G^Ep-G+AT@KoBRQymY70W0!Q{Ce!{mT@3*-jj?$ppB zKpwz4grpuI=3XEdsSAu&b+K+X#qMHq-Q3{Y)A zkR2fP^G0Ud?|kt+HA1J|>Q6IMT*Y{DsU8sqkrs%QMJS9Jsm+`@D$`P$&9&3cY_OM< z?-Jt-igXB)UoSMo4FK`qCymLQn3giiR_XStNWJEk?Q2Ys2w8}F{=nGR-=LoF3+l|zCMAuOB-hXyRiN3O4=OlLYq z&ERHMycr3h#~VXPs0b-?(RtiQtJ`u`p8TI0;*Svq&;}^9dP~;FKVGzUGKF7-^;*se zIAI8NIq7D*ndbb|>ODnEaZV2p&ZW^aXDiso9@sF9r)6K!%!{Wr9Gi@U$|FnHSWRukxZk7T*$PUMa;>_L{cJUBBFE8-(DPo`&o)^}^D>-rhDsNt(!{Vn;Bs$tEWBHSx0z$( z)RFJGe% zvsPjf9>+(@5!}j^Tcr@x#n#wXjLwt?o7(M5DT`uK&m;N}i;^lL<;;pd6rm~lrHdTZ z4^uB0_Ds1;2$Z4a{nmv&PNod?G^C4qrgd>8cp~oU2Jgxd)kVbZS8+`X-@#~z;uB83 zZ)eNU#Sp4y{EyNe`Np{Pd3VM&XJL+3H8qUWhwsCpMD9I?OW#Ym}&SCT^ zX>kXoluU7LI*(JWv(S$0Cmi&boK05v? z%X3tn;#i5JO3zx#7Sy7XrQ6lLK1LBP37W8h>4YR5GJnf)aAvy zmX#H#S9bDVYM!KEsHH0MVxh!YW@*f8LKUf0E-G%_q3+rz8H5U^Q>nNVlsy}~Yf!Ny zSe%QMNYaqx7!h*xtiVR3)IDQ6(uk;uczjgosENyUEflFuOsaTg2wPOhj8P9()H3lT z;hOGR#l79zIg*<2LRpUDqN4IC14gDUwGE`cc}cO%3JxIEqo zxuJW9h@j51nI54#m)+ne5SyUd0F*(B4wMl{h}r^r*G*jSuBWG3CDxH=W}P0ZN0gSc zTBM!E#tbQ!<$UY1JA?Z5=bygqhwH!MmGz{4Jv2MN>_$w&e3*!K!x?fdp(9_H{BwkE zSXE)(+2dRy2)NV%b2PIXdlEyE(T~iH)1DpYA6z`KcmY&7!4cQ z-AvbHlL-!(n5JaitIK-0w21GIeWwQGf>ZzW2LK#!7RFxq%I%X|9Rx&(knb;Lso}&t zr-El2MlfA)PVmh%+Zj7ep9v%xch?KEE-xgy+c?~BX_AcCxPBuqLne3C604NfAk%KyH%&C+T~kCqfw}Tu zqhG;0H)5H#Z@sQJIIj|joaGTTiXyWy3b=Ysgiw}r&ru@aG((j1L`5H9xq|MCq#Hxl z9!fz=I&<5(W`re9bk}D0w^naVZk(j0z3Pgto3_$XuJ%t)gxx&bX*S;`s%5|Jl=t8N7U2u^(U;TfG*Z}vgo|Sr$#H#aTGt;4bJ>ZIx zPhM`8&l4ykTT{bD7dcWHDhBcbWVYD1L`$~4mlR1qd|+Pes{yU?a^?pbGS1Y9 z(}Sa=qy7)Y^S?c3q+r00q>6TjFZMnqa%6=yX2V7^KHZ&X zPj_oF?045Km~z!`SU<#drafH6uZ?s8sA#1;)JN^{@vgb}=rB&^mY9udOA!QWUt@Cj zg|Jc4%r2grMCTLM$=sU{7F!#jYBS)ywYuZ-U>L?N4CHmax~*&3`S;fM*IeTFuH$RU zab^m@fCzw1U!%H=;tqtn?s!8i5C_&V%f+j)}d?B}i|{H?L% z@Z{BGtYoo{Zc;)Q(OD~FKW4!C;W9o$$H`c@D5_!l@A+?bPDFTlop}JnyJQ9avZ9-(=Vlx z42v8(tvUcvxI^aLc>Ti`}DVU0Og8*SFojDytVGY7sL-;m<+BQcrB>Fg}K6ean3Mm`SQ^yGqLL4LjQ*43KuGhO3cqA|YGkmUnlFxQV%cO=+up zkx8J0!>~TpyztiTC~=z^0aGF=3O*kB&8>3-_qEg-=`MiJ(HR=fOO5d~L>k7|z%G8P zpf_i%Qq@i}u}W!*q0F-=#n%+T%(lXd)}|An=R?MaT-cS9bu70ACfXk=L8CuM=-N=< zc&svBilR7m7JMBKTj9QX^~7pJNr`Hr#a|$CfdqRSAB2xAzp3klmRS)x@+INzp6%g; zD`NE)vMLl!>w1>~RlTWUqpfzGb~0^%B83m&OTJ`BqM!6+Lx?>d$U%@>Mx2 z-Fs@{@%qE4+*2X?H~Uu82t=&9#=B)K@r_da5&+NuYe0PbnzNbC-#F9L_q-}8|AS^m z==Ec)>w_%nIl~NvZ&et&-uhV5(LtYVCELPM;Nd#=#)$8DNOB(JA4Zj5O;(96Wu!Y( zPIky1@9!p4dabK{Np!7VipljunPHaq$6YhldUlp1gd$%N$)!kc&zqhk(p+>MV{)r3kP6im_0%S$17IznWwU#&rN8YwqDlzLe1dy8Ci?&pO3jqY1E@}{45 zgOeknGY~lpGK&_UaxZF)>j>sYlxjYGMX8q6S4;kFd``Zu@V|>}Ke}d{dB2YpbaE_B z1j##PiliMp(yHt9H=(|sZ~MrQ;me+nXKQ2=QY)_2&rK7)m03#^^5rEJl=913HI@3! zn?r3SPg%+$Ju%Mfh}jp7jH{#TED3(suDcszI;U&yX*9OvlN|{SLYoZlsjhJqY!OIs zS+PxF1sk+%W67VI*x1;s-}<-zE7zCuS3{)gmGI+TPk=%c&l7)x0^TDaLV&@2Nf> zv4JWfo4I^4mgnV5(%vD=8$#rdlgpyC3n2!q$*!Yn#)(+z=7aMaZT8vZ;>Z^e2h2d^nRXw~s?`pwCK9;uf-PtSZP-Mv$Z8)&D76L>V)vZ6Z;) z>s7Ms{Yr&&maA3iUC&N8HC}~sQ}!t;d)XEF~+k4!Ts7*&1@0d!Cl&NqeMj{YK0OOUO3yWr2bc8MmeX3 z&5_?DNWv%UMjP1p9G`2yTKPF+;p=K#q8v5{446eSK}r&ox)h%!M(0az;A6{Avjj^< z-UQtR`G?K6mbGt+h+IkVkbEJf7Zru5&1B}MWV;_`htzgQox)}vkK_a1V64n7o! zM_QI`lyP=Q>B+|rAw)u460PEq<1Hx;X%k+#f%HmHm3w)5HquRES-gr_wbp-mo%Lah zTbj_sg}qjmoQw^rAz@YC1oTIFw^lrVX8JknMNH_HUpg>O!qlCnIQ&Y}(EUG%Gf(V$ zVSf>zvK}zVau&tFWSi2bosR^1pu&N=#bQL6zw`b+UviQ)5ps3NrQ(ckx<8kTqx7Ra zN5K%Akhm3J&#zl@{+g>)bD;)Immo$LsJQqS?H`jBMMD;D?BynXB)7zU^7lf;-<9I_ z$xGxyOd%?m=bG_i%SKDsYeD<4+|-nzPorJ8M7GzjNhKo%N9jsy-@n(8MminJwQ)G% zu`Et}+nY%)YKt#NtJm;u-66Tl-JjoCSF}OMv-rp zIovhGdlj?Vd_gPXru|UMl>Ha=C`ms?iL|6#$fjPjIXfi;g=gOsBsQ!lr?@He)Ywmc zhdI%n-iB^zXgq}|L4HvZRHp@a-*nngv3jxFaer1io`?IHyS%ViGyl)6{Su|d9IcCS zygUyYz3NPvDU2GZvy@}~V%6j4RrrCsbIPjEBeyp`*)klyY(Nb3v@TiqajZD_r8|j-`wf_{O`WLOY6?P&)0eD_o_W{G)_BiXPry$ z`=1>mQrn&1dg* zo+&PSoPGRHmG|>qVp;F`d?tC9NSD?q@ie7kTh~$Rs_q>%{NA}miF)(jDo#_mBq$UaESD^rpOXFa`AT1t6n9m`gwEO$AYP{_ZnUmzzM--F#-+8|QjE!V zb(#5Rjp20^I<4a$5^?$XxvI<4^7s8WHt%znIQjO|&c3(Tp7T2YJNW%cGZQ|g>Q#Su zc;Bo3`Ik?9Z@YcYnX>v7r~2mq)V|5__xp48l9H19H@?^J?hbuU)=#xOp0SGF+4$T0 zI_VSdNdv=S~FH<@rDK#VT8?8kugIZ zqMo$xCoU>VXN)gb64)|cN_IkWCKQsz!vj$=*5-khWN}=a%a)o|YD=@bxKlM5nA3tP z%+#xg$r74jMYJ|VC~0W0%+N@Agx8prhz%0qU0yakB&AfvQ`DuCtBlBdcd=~Kmar!KsAU?u=_`tibPBp$z*G(!M^a8U zun$Am-~eGjp1(WpxyISgI2`NG8V7`rb&rf*QKZQ*=pBOj*xe6R*IVG6@2=&84%w4b z>NUpL#THmS2RuG}3aN5jZ^q1K54%%#IYH7zoRoT~9YyEC({d9O*UE3F%?^oHQ1)g36=7it1&;_UfIaT(KoSgjX8`Yi=s?jN`tpms9>!UFKw%!Ni{bcA>o+n zdCli6P(*JTf#C|aFg-41Np~B3a@@7DLHUStk<@j?z+fi`>*!AMI4BYm*|?sD+O^#2 z?y#J`x4naJR7KTf5St$i#SfXzZZ*~utnG_m7X)?eZ|_}aJ$CDar$sfWR32h!7V@er zzEGEsz<3Um_wCNT;pR`-)o%QTF?<@-n|$>Vly;0Fr%wJ5%<~k@2?vTF98Ee5!c#lr z+?UKHDtr9XJO>ZpIAB*A6d5vS6_hV^Z26KF^D#C}gRSzp9L1cu!hU;-=P)N{J@wPJ z_&*1nvy(Lf{D#)f{AueeO&hbpwyw5vuq!UD3mcJ|^d(Hdq2$Vs=AyxZE#ECd!KdthI4j8 zMu!OW+@a1q+a0W=(IZb>metlDg2S3@yW2v@&VyJTHWz^^APu4k(;x=8x9an$+5!L~ z0ea7qqdaEVEtr*ZDkplIdC?U)F^Rj_uPVH*Q$e37> zDLE_UNv&V!gJk;cW^a#t&WV_l)mwKR%;55PA#-oL46A}*eau2zRO#{{KdsCz-IU(y z9{m|Tk7M7V+lqEajVYd>lT>R>Hnef4oUk`3l*3{<7IQ+A?8$1uYbh!NBgRZ{X-M0GR-lL|Ma$NfL-to@0sOwtG5;tA$*uBvb zkAhwnt&%3wteo8_9yD!%6&pW~P0B>W4!R|f?EXIwhk3t&BhK$Ds+{)88h*_$23%m> zIPZ%HXPnYqVi|IUBAM}dlKpPCQl?D|6>WR8_&$yP`upp)kk34i?xX@4As~ zG{y0xSds0!n|knu@saP$y*X|C^YiWQxAC>^A7u)8z9e!r55&WeswJcw;IX{A>4fT@ zcp74lNAyRpH+~(y%Ihj43iK_Aq$(zuOSM|CE3k>s^_KHxhR0pB=ep=1UN2**5+5#C z5(HYFUP1B0(l~^Q+SHv?_)$#S{Rus2Z}zd)_MDg9@X>@}{)?}ptNIS9|73Ia;>vbM z@bS3$>z5x}b@FGZZvHXfOXQi2`;yMAGqH&-?KojfTsgamgF)xImaWCc+=%NPiQ8t5 zX5V{Kp7&J=`e&jE5ze^hYZ}G}!H4un-z@h|1$A9*keRG(J%^bff`3A_u|i^mrHvwh zT0Z^zTh7J{39BL-6{gt5mA$OmOK|wk zF`e30#*87(6{}5Wjbo7lR#Afx%%02>{EvIPRcw67`GQZMeS7v2gI!f@*QIBR5T&M{ z{k6kLtelxsv4ZeQxn5OMhyNz}x|b}9aSO&WEQ*ob?<2c<*<^byMwau;eTG=j9;TS8 zX#A+jbns1M3qm3NA(E(r#Rr?+;@?#JzDyad3s;QrB<^fb=*}A!*gt_$q&IKj>lcT^OW4%VCv(P;F25N zcak~p3sB{9=wH6H$8UiA=sMh@N_n+ppmPGl_KJYW|(U;-z zoBDM5iX?wsG+CCjY|?%^#D|C}9#q{!b zjL68T0$MzVqIsgtfZ=TST4vZ7{6=&3Ygr9&${tW;A_KJmxn z^gHKR-w!)qXS~aNbq_Ns1~9^J+xJtcU!f{^!3Iu66NU0qE=J3+%vB4CKQ2;o#Wj7U45_+1o<59ueWmapz%Djscs&Ut0|)DC|@!o znsBCtK^#D7KoJlf=GFDCBdffwyY6Jiyy2(Jdz@R!%H)>wxEdljf|MSPm_!5ws0f42 z9@Y7e&qS`8_2WGaYhpFJo8-=KbG*96thc`aN+T2z(gTVjA|e9|z2kUqlQwl(sidb2 z=z7j;60LOv2GArC5I}f3fEt;e?c}9<-B&kTvm$NbHm>b`q)k?^Wi6}YoZ8)J&cODL z)*=psY*0i1N)2mY51fMkkHP1BuL0qKZ8?RT9| zedl^5&t+!x<>zq_Z9xGLQY)eNy1Q#?s(YKc?)uE=*T)(@43OlP?XG?|qI|ydL3#W% ze837no^R(yIk#2gGtCaLK%6Yl>Lnc&SrqSx)aEZD607SC#>PEBhGT+f!9r`};Gy%_ zt07UBz~w4G#NT9Um!^xkd_jBaW#I*pqZ3b6#}Cb(#ijja;a`PjJumw&!>_5^&%T+^ zSI++YC!`SRJqRSl?#zSwk4Gg5>dS1}x3UVVkp{NZa%LVm=M)iXpM`!}d)F?%aD948 z#v2wKouy>%omYJ3ZpfY$x#HSG7Bo(!NluYRk)#_ru94LX8JaNYLQGn^8A{(goo{$2 zoFWOvuS{i1B}O@7Lx_bbGK1}v5eH=)-P+x*43Boc?*`&DXJaGK;?uyv|Qe=#E5Ty&lZi+_$L$VUY)4F8CxZeir{j1F;QBE=ydBj z{bA#UN}zHm+)^lH?WaEyjvwqEvt!k+C8}mnF+WX;cvQ2*r9rS)>~HTkwST#Kx%EdI zj)J$y$A&XMg`;!X^sJdAML434AvMUXD#x$&N?4`JN4T;`NWajy%%EuJnpAd{33aHU zu2GooW|w?I8qv?%Px`*behn{YWy_%~CnRjL_U-dMUHoawirlMfh*2afvMp{1~!AThz2bgt+Z; zDV07CXXBY4MR>PGhA*Y?t?#0A`b1}>#N^!4+&D7ZWMB67nL-P)+R-KK=H%_VaMLO= zZ8US#`A?8bI2mu2+fj(JVb13-7V}P8807Y>2#46c_isMqjdiZr&~xPnwPic31ac-dlK zzkbY6rwq^fE#hB7C$q((IeA=7`udd5qvzJ6iOBeNL4bZVSb7X0{8vjs73F*EdrtRncG(8WsWgHZP7-*=}LFoqc_ zPXze%`JrEPo1GeB#cklD{Db0P@44~Nnp=@!CvK%2H~YTi-B$v0DK!eoGUR)ygWpj{ zO;B=Tsap*$Hsq9SvOm=L=auGNT>RhJJbk(I&-u~i3;k1mO#MrraX;=e%HP#~yh~i) zCS+o5W15#zEB1L4Fh+a7znbsLfBTs5xiZE({gV{^?h=Vl!}ix9Ppf^UQ2Ik(LZ5xq zL(#f*agM6;U7~&q{tkYO6*Cc7^Dh6;lJzxFv0o+rZ2na5JW^3Qs->rvMEJb_C1?8e zhU!?wY^iU5zZyE!-tXx+2T6Pkv4(RX(Pjvwg|l?cUqzm$Nq1zI`qw*YQ-=W4iCZy2jVx<~ppg z+?Ov{%vJt+c(jk@>3dfgpPx@M>+@2KwpTZ{r>iEh+vn+J;jFJ(@-HHu^ji@Vo}1k- z>!p<&ek)<&X%LSxGpzov7}dSE+*g(VKU%e8>AAiAQ|ndp>zRnS>c7m->uI~Uwd#4@ zy0_{+ePSN8&xzDep07T=_Z#1S@pOx(CxnlEY2ta$UhVpwC2V|M=kwJmxMa5ZuiZED zp4@W2Qds)W|IeQ{IKpYP_w)Jgcb}4_es|WC`o7CQ^=m@r^Y_|*cTXq3-l&q#cjw|s zzkjH={QfuY-}ipw`~A~CrPDVxV(;Pi<$nKmiRte37L2K@s+fzg({ENREUBs|8&=PcEQU+m;%jHB zhzxLIdzQnEbk{;s6MBPL8FCz4MMb%(h;??-qUe}Q4Bkb{Q>LL9SWD3?nk}NT9Mxm$ zqZnkhkfzd7O|g4y%UNbCDPuy&dCXW)gzU-~7xq%Z_9-`V|vf8c9QKXvktXRuVY_mo}#&@=uh?x+k?a3a0y??&h zJM_&1GpGI^IQBhcRB!#-ViBn^XF_7g{&XBlFqa5kzwdh0S-wO5U5n#`}o9RDpaA_aRqx(Q^{dbA`LH4eLRS ziFFwDbfa)`QfJ)IyQ^lHdbJC5N^EN=ee)F1-Sf+>y2XW$30maIj!Kq0=cB90XISPt zl$m`m5^9sTVk|`D5RD}AJl5cUaSkx=jOH=g2eOoYyWvzU6543ea?cTEAA@;)W)Sx* zz>+vy8f`TaYF+i+*?QCV)dsX0HXz---J(aHmz_4|`|WN9`>B}B&Zx%0B!1Nnm~Qgz zvK}90oMY3HKTiF3w_2CohXE3N7(C$KyqjGvmmAKkk@unBJmurt2uQ{*jZup4)!;Wh z+RH60(bqz6-@o3z{FUFy&lk^6C)FH=sgd#>__&8M3Q zmZ3b_+gWLzyjeYGoNm0b&~qwAQcb5OnZzO?vs`OOtYtGJScFBnaKff|Y|>J%C2mXO zx4p|;@#T-)K zN^MFV;}MGTtuw@a?~zX6*^&}-!MBcManoJFi^oxHNi%s*n5Cd^aV0d2*Pi?DzH@NJ z_T$B{lQE=_nOL{FLV3jwx?9@>54ZOz7UIPcMH4IEx0@h}{vXTxCpU-ZG2iTUng^lP zkI0$6*2jM1KKUE<&!F^r%=H@YT`k;Fc5s|E6S$?4v?i1gd6n{HvM*l9 zC*;_ltC^8sDlmRt?_U2r_I~MoO}|z6&0;E3mG~}`vU^NoWaKD7zB!$_hp|7RcT5Qz z4_t_YyL)y!P$d2HI-dB#?Cr!(%fl$12NiMKP}rC~#=zPdD|m|Dtd(ecSX4ys+iOH- zl&YjRqJ+d#tw(e()@&`zp#$f>qE=lJcZ3zjs2!M4prppBF%wg2>jdYhOEXZJM?~m< zUTL)}3!|9nz6oMXI!At-9Vf)=^1R zLw<*`rY3cWps14QNgE{Cds5yEYS84fzfzXx&eCSAdZOo@(e{U&)6Q4xAKy&AT=x#u zvi&$X3*cDJ*NW*R_Zmr`5HSTBe8_Lgq0vw_&F^H9jwD6{gxtlGYXtH4#!WXY<7*u1 zK04Kwv2=-0(ZOfl^SBZ^DB*Ktv$#(#o+KYO^U+6LTLEsvX0_;j9#L{Lnbvq?#(vYW z)lq8R-^i$4fMz*FkcSSe;{mN{w^ImHVfn>O5RZJt?oUNHjagq{y;akkF<#T{92Ox+J>1vG*xVOf~-*Dqpvv7L7!8;CtM;L1;g zGr3^(V!ff&wXG9uE0d1nnjWt~N1H~nlePNcS*8ABJb5ive(A)1e6gK;gSz|0@xLX9 zYRpv?EirBFrz8lLc54z@jy^LBV>JSyuLpn3BEeV6rX(}(ZkwCp*hEe*%HGtfaxaCd zS-%@}N%kY<`kt=Zz}MnPW#mcXWSr}qve5*3aYT^b_1v*zYrUFOQqY%uS0T`uxtwh? z#p}jMg>6|;5hy;3)$r$JsWrW?be0f0*7Lb`PNWCi9b(A~d8;p+spz~-q8_{CZJx6W>^|VmOi#LND$-ZAi`up4 zvU254d64)bUR?C-Ojon<>TY+tEc(lt;vF}akv><-8rLjm8j#<-ts!KDr(ao?x=PN7 zl1N+5QF1dCBy8zQSIxvu)17=Z_quvWP43U{c6Ub_zqtJwzl;7E{q_As`ut?i8BI4z z0!7NT$!Ca|4AWObAvyFG@*`ESe){6yTIc!5?fdL7Y;2ROV@25roc*{a4LK*;^JSK| z%DE%Gb?NgXyxVL!YT#fs5GF_sHEwjCZIbQe7_Qa;F)QBVpf` zPB}DF9NuE!?5tN@q7pD}G%NVhO8SY2!-=`O&YYI6?7h(DrL5C}6AWFTNz`4*W=K(b z=}CPpKY#hJ`2I`YS1A9fb&-*nl&+plg}Tl>m1Oh z9rYA{(Sg?cOUdbkcw=2<%Va0+Asp)pvID5;UM{-i>tK=o3lDkHzL!-5aqjukMLosq zue{n^-&}7;f_TrrLTa{0(Gzh_BhVz zQ7T_kyCUR)m1Lac#i3ELsLE%UzH%op|GLEbWNa&CbR=>txr#jGO|#3|ktKL@b5ZL{ z874T()jN(qGD&&ppX<9F554e=qNyoBI8l8{gc&C)df#*MGm~oo$EH`Tm`h9K&rFx5k!IUd?Jt z(`VoB`~1k?R=ycw&ZVcPecc zNKrX9oF=TS@lxbWhL-{AG4HMNV+T1`b>kzzW37UF`Sa+Xob$9x)w3HgN-$;6p40f8 zwtSXvSyNbc@f$)HPYR@7m+wM(*5pq0+VMO%*rZN~CBp|frso0nr7)N*-cLzmL`g5w zy~jXN3KEzpE=sjMJeAg6#HSj?-JY_yczL?@d*^VMxddA!bix>Xee+L(5Pny#$1LLe z7cEV#6O?*$C~~AvILR31g^=+PZIbE4_`FVns>mF%BKna&p=WU}K^pIXixlF+nRo_b z*b=a92e=d;`hj;gDPX;3gc`1Dgh8x&LU_&1-re_3W^=A=%L~`_{!yoz=ycxGK7%s@oH-6Q`_JV8EQmG91b58si4c z$ft-shecdO4QVwAK#-IqKt`U&w(6~&Tl9Cnvzv4ulZeq~+i;gvZ4nN_%NONtD#J3! ztB1MHWW2cTM-}P8JamKdv(G$!Z*okfedct{a^8jhGpQAU&00vS_|4Qu?C>)+^} z`(oa7d)qFAK=QntYgWmglvM`FV4JarPDK#R#+yT7m&*0);*Rdd_(}7K8E*VEa$?<8 zS>1CrdY3z$FK}^UC2t&0%W5mppdbPu6nHX^d8VDM@k;Hb-e;3Ba#`ASS%d&j>4IE0 zu9!cjc;yN{DLdz7{N~yVQE}3rJd=%Milq~QHdUs92m2(pd|U*1&ydZ6hneF->*5Srk;5HgHN_A$z-9&RuM^uvnNh?W#7ICv#%|zQt`>o z*Yr699Z#$1nKbD8f-M!V-$I_$%&pzK!J%eSihc8Q+-8;9raT+Nbab7V#%e>`haCg* z2$^4e&FXTT?9nGC*7AuGChb~Ley5s0Z{+ws?L#S3x>XcS6S@pc=&Kn*Z6d)b7`TOa z(n|a&*BZS!CpxDon9aYb@|*r=7AbvPO($J!m1C)X2~O+F4VLOKU+XP{B}i$@B=6)MHMqFTiSE;h@!L*TqZ+_wrf zGXn9<%(a&0P=eEx#WmBLjFra;iE*q-Ptlo~oLaE_XN4LED%V-twt_~*`80SKT-0NW z%;;`fiP9Yqwq;K0Tl7VucBfVQlr-sH`R45+Qd{tXI;NC##+*2 z<+O5rTfJDWOGkvS%35_wT$?z{OAsrV69ZKmTfB_QO=Y`ZAu0^{rK6(L!xAygk?rNJ zt@<-<6X#jy?8jA?M@1@Br2OjHjYwW{DED41F8gu}+>@PQEUKdSxKw_ouEKpy4Maih8Y-GCNYl`q#Oc$u&Wojr@M}wNdW4@W>I3cPg zoyRU(zdZit>ju$#pIa@Da}=QI+{;|>PC84N>ZTaAUSjZ=U+%IHh()y8=;uZk)w$yxTaAgwShMjj&P~*c%|6)PPEOtH#R_Y$$g~eGiy<*BULP}9>HkwA zF*26d#Fr$h#Wt%^Yf=6DHB!CSal!VZ&b2K_PWvkkKqq4g{~&vLKX@8D8xAwJlS+r< zoG~+Yx>Dp0Dv98#Sm&D|<+_gMRH&RdrBB3el9wmOD?KH@Lv_MmOs!cmT|8Uadp&B? zI`?v=6O6%;AJCBGW>}}5V^`zCUzyJj??YsGE3M9UCF2TqqoQx^T^vg7ic{`Toj=z& z`}(~XXD)Z6`jcAiwRP3H?vd$IuoGcWa*^kttiW;??qf6-cu>uzRRL>hBmX9G|x7zViMk{7a?Y)lX zJMuDeP+bp7L^oruI`^#cBO@|6?6v^~oKseRoDg zKUSxbyHh`;{+@I3J$$P?uciLklW040t^B*^`8$6(hL$#+pRC$_=k?WT@}BjRU29mr zJ+e)&C%3Jyf9)km{(p;3(^=P2_LAM(mMN~iIxx9b?dM>F54q8kId` zpLf?&N0)2*jnk|f^ZQJ5{7ZX!E_*F>;&Rq%FKCl$%CFkJX)jgFU;0sH_4h9~Dr!~z zeEqe%JnP3P`G4L1G`D+a@As?i{J))jp0yj>*Tp(`p^>+i3;+^@K|8s&XbzMpp0Z~iW6OK>VK+Uh`47*XxyhZqWB8rgDws3kt7aRVPwo5nRrI#^cdu_> zU32U8XNa0nXTGEBc4FDyr1bJyQZG|upoBBEiQRy`!sa{hh)eScqlMX~&O*)JV? zsV=MaNT*%WUo5nnuHKl}jeciZ{z_j-KD=Mwe^ySj{p+tE9n-#&Jq_pOXRT4z*7EPu6dL>&w^g)ZYF_U*F%vYbt3OE5C-uuHT%I5A0|6VoYx&xW#bqN%Y=7^x!= zF6$=4Rkm5BZW+pa`~7$NeSSJRQ0yVJSfm^{bnX3zXlF=CjeJBnW&8ZP%AjbbVx+e^ zwrBZqr9gz7Ja@rbE{+pXzL}zG1cl~R56}5zel>|3g`?+U2O2AlR)l3sf+n9`6pMI_nMbmblPnvpd8n?s=Z1@*eXIOGD(1L=%r%a1x3@bEXuQoCY9v!=!O_ znvx6SAqX0Z>A}Q9mJJt7u2pJxeNNOanTVAuq+LBJ6G6;;M-cIal;N%_t0Z!(!9kZB z-4oxmMjUf6?F6kGq=!@AbYi-5w&6TNzPDWDgGz$>^E~C%mHjd*dXsoZr%=$$ymy+3 zbRk{5G}c5DZFOwwVIeOL&HX|dAw3&bN6Io3M0P_MXTd8f(-M|id5%6F>zy{=m1n6= z^$*zwt-8mdNv{W+%@2c_>93PpL!4b(($OC`z8%d5E;;U3ByU3g-qM`yn|pr5*Mm3T zJ6FfuNsnFUIyxlsc!DHHIdz~rgsL70PbFwii0{fie%aUCJ?G2q?sd=1R0r-ls#Mjv z&E7(R6Pb49+LrGFT+iQi>^Daw2yHYxWSzMtZw9$E+}K_pn2{-_+D_A@R|8;EbA`@2 zOeD$^lEc>LadP4g5I!Af0;2~vK>TjHr_O^h1!F#}?e(+AXw!8y0;-R9cXEPuckeRB zrZHuRDl!GG&a%*|=}kB8Fd&hfktpM)qw$1v@G6$f9&1^XR?{m&G3D10ZE1>YxRXUfyEJ4jAX40(FuVytv zp+|vpX%2WzbT62BNS73@D_*DPop&Cez5yxyph zjN>u9tg$)*ra9%U%_k1UyXKr{$I0ICnOm}zOW`_5t12|Rz@?bw2kX8jTFZ34ZG4lF zwk_{m?p<@tUtMLP4?As3crnkSGLoxZU&u#i@hD$(p&4hjsLYFE8lC4I8@`DN+$_d# zWepXcNy~3D1QkU0s>*RXZg}gLRaEo33}V*eBA*^2ZrK|Q#49Z@#`5x-%eA#p%5y>& zRr`sya7fucfw4U0g4`;D0 zojo&U^`blaJo5}i9<$e~<&sRI;$x8&Nk0>vE+f}-FKJz;i+1W*mt6br25<<=xfVI! z7c+j3r?S_Nv#tyJD%+`DIcGgjuEsP`az0HP;V4j$&-&lFUdsbw@7U?)VoU|k8u0Bo z6iPGK1w`PxzoqRA<+5IQe#XB#SrU&g$Dl`F2RzT2-=;f13|FbHptQTwHMQbq%&BY{ z4@%}O{mlb4Z%%gKT5N&|*CnYL%r>sIT?pvUI?UwtcfrGt)Y%~`$-viykH_jSt<-fG z;ngJ9n-*Y|CVDbyQltRT7k%s;7w)Mk!iM>!N+O3(rd}6lo?YXv`E9 zCEs^Q(&oI^c%v}%u#l3(-4NCDPfxk8E1M9VNoLyLFQUY;?~~a0-SoYu3cAwcnX@`d zV>ZNzJH)n?nl}~fSlOpFsbPGXBhKw#MQnTQ=;>`*%)hKH1TvDQtWKFJ=Bonog(yT7 z(RA}@+563!%11F+JMuZzlk=T0_F1&u$$a>#s;xQ9Nu-vF%9LyRmZHV2jm*vozqBHm zpz7`Sz3euBXjSD?8MeFo1Y%2(br)RgNUidN4{ z+AHS7%WPQNS`Hmk#R*Y!kA)6J9v9}XB2v=bI_Ye(iLhUn!Km|Sgn$9$w|_0 z9oqByir1TB2glEqt-bY}v6LvfS?$8MgE1BrGNR7sUd6-NjH6M1eRMj%T)S}J&*&%e zN5WaWjgJ*q33i`U?8>h?5xI2s8HQBHybwFhTk(Y)ZO(}#3G>kNzXlAfX2&ENmnjCZ zrlqQ~rJnV-h~;d>-s$YfDfb;>eC2uEG~v0*wv0?V*9l%;h}4+2tXaL`)@EN##0W>( z8FRbi?gY6U6~KFZ5F4%ca5rredj^nY?*qL%@$ufWS08cAtEYg|4A)WLLUYegRky>< z5Vd(DhcS1*9$Sf2`a)?Wxhiz4Zg|cLo?z<5I9=;2>E^e_8^lAZ3IbZ_>HjvD&c!PA z^^CtckDb@6X1!}TTJcRpc;vlLS#=tye{!d>YJj<-jU}T4g0v*j|RYu+=tys z-aT&HFhX&zKl1t{Mj5xd+H&uBAB~{{_pe8BY@IS?N9QH`Wz6}kq;#G2qU6fiJ*f^p zT~`I|ojhuDeOKjK+=MV8?Dod`?%Lh&7_TnKgy$pM^Rz_Sk>Brkjjp`dX{+`>8`-{l z&ibDCbK7n!d$jF4wB7oxeI+=YyW)%Bw8d1~)2N`E>TE5~QWXC3rn%zd7g6d)L_{8^ zXIlTlwY_wNyW#zeb#I?L_1_;|mHD>H7Ir7G2H&G6amCtjDM;t=QsnFGkivRZrxvml z5XqCg(_7rjRx3XV{BFP1_x!hf?-}3M=cW7a{jd6rpMRg-7VkG7b(&>U`eo(SD~1tf z+3p$m9$v^(lYp^>Y=43$TSMPC&~2K!(5n3CL|qbkJGo5{L8wPfe;P^GpqU8*uCev%+`0Ew5PO_qH{Z1hZ?3VCXP; zscG+Zs%CO$g^JouMJp(f@bzdVO4PpaWA1(QKRBS}XA<>t2jOuju~%ZUFp#>d4a3rZ z@=#VLe=Yq9nADG*a!h?tj7K{5bzUv-O4Q4HBOcV^;&N>n57?(He(e9GzNUWuetw^n z?``w*8u=4Sb@T7;clg_`CeN`ams9)={xT9?T*R}%2l)LULStpp`EBpr`P9Do)$gJ{ zF8A;j<$8b@yrW#1Pg5|Lp-a2JV!cCnt^AI;$f`npiuL5zSV^7McAqhhhpO(U)Qjte z&Gaf$Kad&h2_52og)YZ@ov4nX;T7fk&&h|DE8^TcY-8k$cWKk|fiWw9)+w zC60%bZmQj1E1rdm>)zWx6D>T{bDCy_%=#3c#GewWJ5P?MY&ldb@Syxcn$h~qyCS@E zmZJ-0LeO`1r0Jg#=-Hg4B+ucfp7@hD6RM{aKaa9Mvox5ps$KbONl(+_xyQACRqBt9 zSAZDDsw(?5pNpBw8tls7gIAm3o89X9jLq`Ym!_+sBTb1RB!NVy?qNkI9B^~3@l`cM z73Gl(MI}c$kxdaq(-A~OLDpvk4c@gi6%cb|6*WW&NUDjbsje)0u)e-`zI{I5 zYmIPlTani+w^NQ{EzD4fDjrUx%(P_GD3cWuJllpM1fZnSLIv9g=>Bzmbh~TGUcB^o zEGdD7+I`&PJq(L`V~*(D#pQRRbV)y@kHEk-iP0r*@7;OTecI-Cz5<=slRgpXbgqTv zGr=Kkju4U(K#-4y#4eNhP5LE#d0ftK$MMto4IVha*00TW2s%0>mu3W#FtUxV)QKWo zXqKXbsV}y7_^-9=HP?j;Zs*M}Q&XBf55_NU2gczEd>?_zy1FSV8xb?AA47?uT|W9Y zJc2x!JfOPrFq@ZrybRZcRS^)>u;#>$KZ>ZFAc%?fNsyOEsda5+-o057Bp}y2JT4|Z z9uG^1Mc%x)xl+RZoR?j5&+D6vlF3RZb+cxp6O5xY#+eGb#r`?anlGmq@$Iwf$Adg( z^^$g^-OjyE6SCi5T9ZyHK?4csWiB%gFpKgN6 zwM=+igAF~{_Wb;=DQ>Ulo29?<-%rynIis8GxlMGV&I&H=^$c!ZaTGN|XuhocYZ9XO z>ofbkezI2@r9AR1spdy6{*vj*&?)Aag1Uso*xa&~ER;i?PQ&>r#9lpB+SchY58I2N=cVS-9ELl#(DZS{Nt?e zM_XrT!=A}!BrTHEGzM+}_Ia=%L9JQ}kyO;!pjLj$IF*uQ_V5aq>36OGL~Dn(O-r1P)jKyW$km> zd{OUZu}Pf%wrJG}pQE0te{N7?=0%ouaSNCugyIGQ;DS=gNI%!zoM?C}dYUIrt%6RTq@8g1)`X!9sEoaxKrf03WpbN=DYy z={PJ=$SogS^`SL7Lcd#HDN2tyT@=^5w3T#Gd&7NhcM|mCY1*LSZyY>hIic_O(b+@m zzi>S|yd14R7GCGRM;QBP_4M5)CBEUK~Nk`j{cUm1o=`e6P+L{3Eg86;G^3C92$6wl%iAmj>5*HP-v1*S|=t?mlB zM<~NiwiMEJ;r>Tj<6pg6Nt|wlV4>9kY_?gYv+bV6w}&~GEXGCTr*BLaxuHo{@K!n2 zXp1!`BMgEMK~_;7B;1H5jlS{MYb>G3=&o(aGVWVXQdKDOuLDtg-FqLp&4{HH`Hfrm zEm%b2Te&=!rz=5D-}OHU%)q=)2Z_b89(tQTZiM2?**?)fci{S_c6-N%-iaJZF|UK$ z)VxXhPAGJ8PmiL~H^Tclt=3a&K*BvsKBu3d(69Y`#d{9*@=Px@j73Su=XPiHk%Uj& z-Tx}bMvH}Vbz-KTWVoqyGuM_bnvjyh)#Cg(re`=Ds-D(G80`NhZ;2AQTk>*g1}fj* z>ObcG`PC|P!_Z5#js32MIrz)bM%Hb_zZS5nOUeD74aB5<-|8w?XRdtdV%PgEA`j6N zeO^t*&w{M@?qVTSuc#^`P(g5%x|k_B6zAfe`rny8xjuUKSkF}HEJiy$_2K%RusZL> z$4%(QH81PJweIbH>R;{D`X!I9w*C6fss4F1^&j77Y3N&jp3k#!>jJfyms*L~Bm1Y7Fk5MV)sB_`P` zL2`n*+Z7<0Q>xUL2?FAZnXUft|EtiEMX^-5%DBRxzisQ@XQ}n+6MsWTG38N8`#ziZ zK0b1Kr_tl}^B!!DyvMPMA6k#>kJb$HYt-eKmkI5)$=QPg@-++|g&gN;-!`=O@WqC% zHM8F%k`O0i>1F@1$Nd`;RpVJ71xZVfbw`^{djBeW{eO7F zg z%6N8f(5EKP(ET|oU#BsCy#9a6Tuwf#fuvin_MXn>FMn(Mk%Y}9Opd=t_xIWA#Cye| zO?&&P$-9c0BjJC(9I3uY&vI)%CVjjKNgFd?uPG$7$voKQoY3Vp5qaLX7PL zn1Ma(2zSv0vQPW(qx;nT{mUY8e$#DD3S5_Gsh^8DN&X1@F*Dg?>wjN(pMR|Q{PO+R z>YHcv{?i|=^Qi5=rT6K-tylK8t|PjA^Q->T&o%q?^Aq&`TKt-HQ#r?P0V_icl)+`$y@h*>rv~?`uVS2V}AWx-@WT)eDm93 zJ$|h%*XH%iwSV@O{x1B#=?|0q@6WXP-u|6M)5 zR$5QC`sXDgs-C|!>t95)l=bfIsY|b#`k(XBA_tkR*p_KHht(;zx`a|tYcbQ`J z_PpKubWY(fnJu4q_fL~8jP97vVi1@OP_qONxJw|?$ z_0P^!*E#phWp2Lb%`45bPvrXj`sT5(&1dzhri#$Lkf+~O-s~OG?~hl3SMRl zQQEtfn{XoCsg6}s=2VvkfyNRg&CR;1z_Fe3vf1!MI1zSH2OgcR1n_E1N;W1YuLyy0 zZo(VP!fC?EWHBde5DG$JDQSdmrp2hkXvtSMVx~-02bN`c?LpwEy`xQQ284KQ-cQhN%lDW;r4<0+Yo zWhZ=1XhAY+FxA=?piAaVzGW*oXl_4=KgXRM-my+UJDaBL3pU?I_Yx(|F zC~8MX&-&NvL8A2AcP`tL@c&_6mYzh_EeeEZ&ZQLMPt=mKBcurj z7gMcR-0__uGhAlzONkIm6sj&M*+w98^!Y;`y6A!5f1LdJsT6xb1Ls?qUoDeqF#Ktj zo2@`!s&%^_58#39P9EHTpVNDIJ`{y*tpZDvWx#!(GTl}g#*8MwFp#7@=!2XQNH zPdeUkmzmsQDyt~i{C)3wW@=~V(Ca6v)rqY6>NmePY5AotN4)fNFA`;<+UfVvjB#Nw z{b;-)n(nJ@L?ur~;+L%wEm%vSoO_C4(m6sev&El2Q+hYM>6RN;lfaCWoZGrl7KwXW z5pB_#5S}=j#XR@)uLZmA{u8*f8foV{TAb}#2u5{5m%k?yH{w=r!a~AQIM~l3p0cXv zBCk&prDyKhp6GN7h=~)7_R)ip3=Z}B9<8|5cf-ivV&|?_Lnl!Cmdw$agHGn6;Xkv6 zSIaxlCT2HYjhK`?hpF@`T2Qu!(WaHLoJH{NQ$sfvB@i3X@-OIgl6S?jK2d#20N#MIp)Cyfd zoDK@Aq9<;jaayzO=gvTD=e{)$xV?BgUmpS)LljKLtQ(hwtsU>RS4`h3iCSaU?FEwp z5`M9s=x3c}V3i|6^XEDY+KW8(3wbT)*P|xG<-59UX*y$??p#tEbGZS6wL7A%xUu08{GK!T9JifC`A)3ow2GSb?<$}_?_+| zHkUU`DlWIxs|byn&dRFSc@K+t(!Q}`j*V^SExgj&<3;_wvvV{NZ>*{`73Nf}WyjAs z??{;`MOU_88_VB19S@+8N6z`@+~1BwCvQe=>ys6R&Qw@x`)g4~w6J(`rk5rca!?&3+rwo9ix?F^yZE*lQ6B>z)O`OOxH@>IJc7+S|>-%@<>S z-d=4yNh*J4=7EjAQP|JH-#c#yp5M=ZfRl;JBFeZuFP5?!r+o^U8rtsWMXtN{Q1V&T z=0(oQ9#5+E?pjZCj$Kovl{r;x#WRdkZEfR6i=usekIzTywHm=8-di4yPY3d=BAK}L z(5F7QMdutaUzQH9eAXTBH{Y{L>UcivZcv|f(Zj!wzn*p0gp$b9+Nfs>qqCjZauqp2 z3+g4l`Yk+iPY;2SmV;@fUFSSe3^5$0H?1b5{dV|n=K01v&J%Rpr%hs&RY&GKV%e1@ z)1>^VgQnr79k-RfRwtZ3iwrp4H%xckVL8T|DR;rWcHkLKI8@_?Nhcg}qGuybMc01? z?>5$U?(m%r&N0=NB6Egn$yU>OJnIup#HdMV<9BS_%AH8(k1}aW{8KSxtgI^6(h?Ko z&vO)8^H?xY!Gqxt_?N_Tc&ivWq`4zlBU0w!DY{D8jXsAK_xH}dJ#m<7`MPz?eb4L8 zzmLCt>+EDk%GoqC%9E7n^5xa4tt!1YKYWkft+Zdr_37=2b`y)yJVK6X*WGB| z6!d*{m)cH!6^JS@$0w*ORAVpaye=>yz1ZJtlQ=f}&30b$376AFug|ikl4%}J-fg+s z^j?40yZxlK_3I1MdQm==Qj)}pL2u;#ENF6dHuAALW@%qn@E6JBphp6IwmPr8yPo~` z_pH@tXP%-sd*pUxJlTKow^_4(GkT`Z^t-y*?>%daOuXn|oKtA2S+){t&a^q`wDX3c za`@3av`uQX^kR7{IntsgF+uOw%V{?pc5~lvv6U;1lU+7Cd9`1tR?k;E&k4S}l`}n$ zqfxqvyGHLR-d$x>K^t~kXs(P1x~R+ckrd)3(T@^a%M*Vt{dbyW9F>Z_r#=Wq^ERT( z(N+4s8P?PYID!B@qCV6C^_R<61QU|vAavQ@$FOG7CP9P__V4Q!Ah3y`7DAMK<>2ESnr3HU%2)I|p1!xCjCeZYJnk#Vvk&Jo>jO`N?y;Phhjj5HinsGkNDpjz@>Mx~N}=x*FDoaE*1Zd%ll2F5lMmp`vTX7!CR79wVD!&O1a2#Uxg^ zXSk)-BIyv_a=tp1?V7P0G%Shi{StqVn{&QsMwOc{z0*!teAsnKW~X@=lusi@oXvL#ISoUZ_It{X-;M@X~qZBz$NE4nacB~>`> z=R3y)&@6WGo3^o4DM1ra{V{dLx>VJJ+^^;=@x-F@43 zt>$3F>V4duD}vLwx+J}yb(E&U{l&Q2Ay#{NQ*y0l-T8xVF3R)Rvhyp0mKLPAsw1)l0)>{nddZ7JF2ZG+@#d?KIA;5j)J$s8oI;7 zGVhP~9-&1}O`Tpjc=RiCDb?#*B8w?TAGc_(&wZ6nre>;cmPmQ|_SNvF?ogFdCvQbm z8OWHm=@eR@b=g{#C|={*E~1vDkFLtX4qDyX%Obe+hqR|lsmVe*adJ9bNs>AZ{TGU= z1GAKL&M+nxji7h@xIw4T@E)x>jU&*YhsC5Ebu}w$mG{^7>Kpz84d-3*^W%S$?&RmI z<&Q#S;0}q_>ltk_w{i2;7I0{4!>r-n*kX&z!jm*sWyo0P8=EBPl69e$CC0pudc^Vr zxT5zL2nrgfoH3#x?s8f!<`r7bG-U+^4GrHMZD}MfHX$M+1ZgDtxrx4}RVer*6`g9> z;^PcEtxU6S9_BfU8HKf|7lvK#O!4An@{W_8nk?GrlDNUDLq;RmqI`CvzpV_q8GP;8 zH1=KEUgTGA1VJqda&A?)r@7>vQ6!ReCtG#_h{yL-3ao9amq4f@3n=9EXKHG}^

lP4+wt=~Ngru`c+VHMt5N7v zG9(C=B7!^Mf6ry6Nl#SM9QMY+2Qpf^bhy5z4c7C9tgF+xS<00?myD@FCbWWLlH*ET zikB%rZ$Fo&Cls6+Zy{x?`==DO_Gm>fCWdpw>m=Gn->oa}E&p*CLP(xYyTvHQu7Wo} z_g{y0EbmL!+#w{NJj((MZg%@}G+4I$mEr$2$F@6FY$iF~+_N#AE=QM~i^@*DnQ@u- zc=m{?IZS;ekb(b81fBkeZ08jPs5>b zo~w%$PhIhGB^>%UL>!^il5)Xn9z5PHE*z1|T_>Ks^Qjdm$UbAi2ux~w>AA5kD3m5; ziOmSPvzyHb;VExyUhZ0{7|o!W7LG4QDpP1uNpq_$h%3WKoy>+NROCYv6j=FUs9h^` zF=EFI0UzRU7v$l)lk8u{~)~!o+eAg|V6QW*{O#UH>bNc5M#^<*jt)yY` zoRs>r;H6&ELvUXvOD`0AA|WyJ)k*isVRwZv?WMieu&`FfW%9Lsmg3W~9X3gyAm-P+ z3T^2WDZ)04?20iMcPgbsEOttzhb+SE?whfpgp#FrA6C0)q^Bv8BM>bkC`vr;+HlF} ztw+`mA$ZSZj^1!v@7%^ZBx6YkY>>uTuSe`(9zDGVQ*v|6%7oI0GH};*JgM&7Q4x;? zv9d7rM4lPFNb_`=NWY?%wQghG#w*Y0=+7GMC5-r9KC|M6{>SrcdDC(j` z9h{=!q=pO%U~VLGZw8Yl>iHnAb0Jx>%(4~r0XlI61-^3oy&IcLpHj6F3Qp@uu++uk z6*M{*EUbIy5Oo9fZKpiyW3i8?ug$^D**0QB+t8brg{*5PC+VV1u6;nHuTgCRn!Wsb zUGz`jzRO>3eLed0DTTbx36mXGLlgQR(A7VW>b!P++_gl$d>mOK{Cf9-)&1w`?%BA< z(MsYRgDRmU_?=62XFa9d$fZgaGa(td-^_DjXK%AjW!K!}`u7EluQ(B2c6z@G zMiA~wQm9Z_jOsBH%((ev^(O-_dm^a{=ooh&iKTOhq0> zI_R18Y}~l)FWH+>T$wAd@w4TP>b&I-C6AgQLtKhfs*=&{K+N^wl@bfeDm9Sbbt!ekb-ktBPK{F5H`nP6aZgAF&)^uV8u> ztRfEv7wJvG7*W1!-sxM#@R^gf3(WeTJ0O{2-N4Zc>#M7XXYH*%735%CJ!^7MmM{7! zPH$>e=c z4fNR2BQJrdRP%Q7*}_-$gj7jRV&6FHnf&mr2@88^;Qjp5o0ZSA;Fso0n>Io^TbgW)&(7We%_x-+e z=B&>SVC_aC$;3>YSa~@yocD;dASv1Utv|1QRE!<4t-d`UuC9!0!i(YBSy-oIpOY75 z#V6LHgbaBybsLgtW91F=aphhvoRyJMU!5@0jSz*r{H>|RC#AF8nKg2F8Fn((f7FMb z)sCuKP;OM3c?XQs5xRF1EC6YnI8 z_i~oBMryg?$j9zznk^CWVwJgWvN1ejkH>OsT@{Ze$@3CAr2pj4F8|y#jJ)ujB-#TLaTH+TImU4%G zXTtI4r1FHgPN%a`S{}H|J!6kUb58O|{iy~g#rjF2L==P3hr#>L zr7v=4e9bmV5-tF$yBE7TlEcd8*j#_DgWyB40RM@G&-P+5<}Buz;+#qF=DB_nbK`U) z?KPc|$3m6k!xNT7t{_r_>-oIC*Wc0oK$cx0$rRjjXA=^nAHHBpK%L=E)cYjM^DrhQ z@7M2t3iJJVUh_I7PX5m5`s)&vzkHm~g8B85p49yIR%SicZT0J%rHa{nE>tbLO;XvF{SuK+ zLPcQ6=X9Z`F4%FzeiL`FgE?;fZyxv57yIfkV3?+R@^zVv?I?Nm8*fC|%O5#{ey@@3 zL*9MhQvbB2AM)K7TJepyu66LQU2l`ZxggI+*Ln|w%rb|%DQk2~!8lVyhE14so7=1n z_Gio!Akp?vatJYjP`UQS=s3zM?%YQ=olEYM;T_~WhINv5SRXgn#%qaV#KuY&ag7?& zt2KvY{#LRuY`JbI*311o9G;68#^!_ir;uH*Jd6ve7!*)$G^V6rQxp7+lA~YIJ}q<3 zs$}m4J;K+*qYij&KZLFK%ufG`7CV=*PVFOUZ^NeIM;}HBl!*3Fd6E4I^YHp;(WwaM zN6YeiBZnz21o}BIa$$6M5nT*9>yhe|(d@>DvbtP#Do{}m3k)QNE6FW{prHS0H_7%n zO<%wLPe(4^j;uyYjbd=SByv!ge@RpBhW&fD@2-!D^|GE*F9#-g_WB&uzcoyLr(a$N z*@Dt!dY7ZYj9CphbhPZTo{6qTu6RuGE`AlMGU6PH!ydcqN4%(v{OW`qALrjXC-2T) zG+6d1@0Ip-Bl%*o^^;wW#aD?MJ1gQw)RAMO-2QRybM#_<71<6|N+6tSy18LmS0+=% z64_4|`zzf8i0_~0sLwm|;(JSV@}{P#`0iu#YxKVB`BzCZJipGpc~92wXYuOItkJ*P zD4l)&c^_;0L;CfW-#Y%icJz+ZKib-ey!_oJ-(S4gwdcj_nWz5OeC z{r^?3lJhr2Ra^D*`5W4G|KtBLIio$R-eJ9#)*PSP^zjGy@`uvj4rLIuHeYL z#7x9pOWn?5BASsF%?cfw&^MHe+7?(E5i^wnqbOypgmLPgot<0JMrAw@Mo~9an61Hz ztXGzv8LD0t%2^o(n&xfl@IF05kneO$)H4O6DXfbx6sRegnhx!&hZ!!!l^Kn8DLD-3 zML`i3MPmhE=0qx#&lwFxNq2@hSms`W4jn-8no|qb5}Cp;7nN4VQRa~ zaTuZ^X5Bs;x|+Mi{(b@2{>R@!0u8VBEeeU%w74_u1?{QKjt(7->Ia1=r|N?pJ zO4M~J#L{kgyN7pmaSsq@cpgV{!Ol8^avXkq()%f?_73DXaZNEg&||G^xzNHZ-&(62 z9dw_3$}If@C!<+e)@4~r_G$UvvE#Dv&m=WEan!m_X)AbT&aLLbGBjdF(t46=#IYpw zb9>y+X)E=J5SOQ3*Vlfb+2NrY1}rn1$%~M2-WXdsq$ZU(P}z;=`NA@XDM6iaZfkBU zd)vz7+;hRzO(6JYo+YGpbn(aOrRkkCgv1@qAkeqUzrm}F{T*ixv_{LRmU3*_$i|fToQ%26x?}g!# zZ)L3N-J_>p8OT0^N$7QBXVDWeEy{1b$CJ+Iah9_8Exc+xE%bPHllIq7JxVQE3G1y_ z+moh>vH+gSflavw@GLtXW{I^j-)4-_=F3Qr? z=>AJwG|iJ~G2U#ssdV%R}{a_)ijY^wX8jZ-ynjDMV|k zq>>R4(d1Ic&Ud>!%F@AA9wTCdF$&+N3$!Zl&qX8t43R8os&lJ zWa#!sch-5lYI%%v%aTP_71nZn(}?rAc5H01s5Xx*)$#1oys2l%o03PU4o@lSiD^81_*Qb$&fgracxkgw5Fbs4%71FPhS( zy|zd;Nm%7~B*iZn`pKU@2zcH4WN#QUX@BY&>L@Ch@DgI}lb>)y#T#Q~?WUffQyXvW zU3?$R)bk$h`sGnI$ZW1?vD_bgMd#(KYhbI*DTEayo}VqhbUc$*D|F86`9-ZR7s)b~ zsVcSBMPBadNu23-ZRsUDMlnpo7%@5Hm_&`=WV$&i+}f7bQzv?qrsqE8s~}&CW{1xF zjc<2*RTDi|f!#ZN#)2cy&pEzdMeVwY{Off$)=0jAav=KGKD-mDX6daDzIuH_G^Ncd zN#@QXEY)7=U3xe3qOWNg#;V=vNng(Z4 zILb81KGI%QX7iRz*$t3ErYfov!kMDv?if?Es>$ouPffk&>`d_vR=<$-FO}J4AAN9& z;2)pCnUln-I***=cg6FpzdiHFvoGHf@3(yO#}uYcWbw{F+iwU|OK^Fl=g1d%ZD}^R zg&PTec2%KMxz_xhMXpZRFwZ>C81B{Y;m?E1o^@Prk?F-xF)f1z- zKFT!4Ac=*fRbylaHuQ8RI(-ochta6^wu_7ze7*8u+7WhePNSlv- z{UIVknzoqJiW7Zn&&;`7$i<73gO$MJ@YeU&r_>7*S<=sJ#b`w2i%C6i#-)z?_)9%5 zrKHI$Ba(erIrd1T)URes^A+n_E$-y>t7=xb%u&_lFHNNVYF_Ibhh1yL&os5Hm$pw@ zU!7Hkv?RM({Bcb~@e5{IYB0qMshh`}ILQ8f4_GJ~n)x;=bD7&QeaYX>-JhZOxr1%T z^wF0OVj4SVpDSxEnp2#ym*m82ilUkVO>ARL@)x-mPl{O0*DI=8+^Xh^$mo?( zD!$RuHelhjh|BD$ty2%FjF)9}83dS?Ww;wVrE7If;q2&H5`C*}I=RgZro-fq`?B1^iiKAq2RBIW4H>WWEJ zw6q*poYUjuJuQ*rYvb~oYh4J9^{M6Q%=I|P{(R9qO$Crbw|f^)+4_TUxU|gZxBX`Z@!bgESJ3X%VzvO3eLQBp`Siz)Ly1a zmDJwdzG8c*o)a!d(cbWumb-^(ZQ@ax`dVM*o{H&j7TnC9-;=v+_Efqm%Z85ZdGpUI zxA*PE+CwrjFOe-yU9Y&z*{$!B%u%(Ho^Y-3cr&BIS>&Db`py1mTQT$Eni4{}%y?I} zAly!t=WL_*Scl2g3l|ad*~$LdYKXNycg=fpM$JP=Per_E>Sx+j(m2W;T;IGAQ5g%Q ziD%#X?)Mk*K8w94R^r5Q_r&*FP36J=Po4VA+twQgz3V^bmdQ*0mAbF*7crDSIi0?- z`mrBKmBsD7wYB-btNBe?C7u~_*{6v-#V0h3BSo9a%Bd_J-twRAA9=C44|{#?e*>eG z90`+YwEw}`o)$#!LU{e`?sR4-^ka+SXgZ4@0%9|4J{2msjJ+_t3$nrsUCjmEu7yX?O(0S3aQObwXw#Gn~p_PENQ&()V=v5v!8wI zuRU+3_RG6BM6l4apQ%+awkz&xu_y3(H-&78NouEq!;a$FV&f0a8YO2xJ>F9gSmFGs|eboD=d`KEb^dWloQo9Oo}`LcFQY?))B{|RPEVH$25^f=ZqxGE}+ zBY1UxxaQjst>@;r+0i7)FS$~6ry)dcK4|5oGgrR#)pon><>t#7a^hh6MmM8hUt8)0 zXS93q)7GtND|7!F9YaX!bXz7}9oiWp5+73gh*+FM5Wc4lzEP4P-m+4DbNAt-BKrE) zA#;uGTYUPvA}8KpQmMTMT8-lOnNl-FYi$&f24`ipw?#DG$6e)C8sMMac;%xypwGh? zBet^tP~iK^%eI+Y4Vrq`Pd=^%W9&5v zH@`2L6MNrAI`&?#2-{3Z-vl|mq1nGf`Q0(nH(cejDQZjF^6!T!P8*(T^)0Czbc@8b zg^cf0*&A7BtPIqN@zyGpyGNao*)fUnM=50Q%3c)jy`?VOD-By(S-mYn{S+QAHBD#T z{Ic|QvZELczbbl8?N(QAOm0rZO)`TP!TluqJK4zu%9tFXj^@QRl=p6DJkESQREOgC z$V9A9oxtXDHv6HiURc5GZHY98ohe9kGW+<}Jt<=Mv-a(WjQLNurnk~@eFpulw#v>^Se9ie>FG(XwsQZq-&|7p)#{X@^DNVDmlHg5yYh=m zY4TuB6%Gj}2N_NP^2oda;f{3t1+4Rz9Pe3Bk$Lu@>$!L>LVqm-DTY7Qi_ybl_*+$`|;X(4&LfXhc%Qk>5A<)hIZL`R+OS% zbN)Z9$2_GEQ9g*yLyo=|=e;WQo@;sTbdxh}xZ{pEvIiAQznzup)x==5T)5X3c|s1| zlI2s-#%0v)+H<3APSq#fJc&fw2=X4}D2Bu`%k2)3-(CEe2h0icar39LOl$@m2-IZ?V>`z~^ zX3CI;Z`O^--^Q8eHRi{~nPl`NX1EQHVVXne`=6Ly`O4$FNxQPJvitk&52mC z1_u~}1d7e(H1F_~v1*l(qLS>QSbn>)lkY0u$+s4?2W*4U1*Gh}Q-}OUHTmy;OBMca z_Y-yVuQknE>g=}sM6k{5c)u#2S{iBePqz1TyeXix%>PwY{;S}Wi!;(?nU7-Osv#%l zfE%?G>~cXm0THceBB)TWKHzmI2eKcbzD_B)&V`OEqJ6 zN!gqMC5X`Uba=zFT@UC)*Rh^Eb*%8G8+nA3BiVRyu|m497~ql;P6CKx`a| z@j8_Ay=%4CJdf$=Qk#u!Zg=$aB=)>KU}8Q`heGWi0vraT0f*!CKe?MR?|c07-^Vlc zy_oUTRk2qc6wqKEF~?j|k98V{Y5z(~P@)2PFkukX~OHZeLC zGIgBRQt3^X>`Kh=w38<`8HuW@o3fue&WhZ26r}i7DozjJyE~52{n}RE1y2Pt1M8Np z#o23_zZ0;z`mHOXMW=g{L+qg&l#G^JG~=8_OfNT!ACp;I1omFc2D|2w&D|R$of2^9 zWYO?u7B4X7sX|v*Ff8h2C0;zv|JPY0eRs9T}!X8uO#@xquP7NUVriOVoBmmG%lCw#YuwQG^AM@RrxTfdzZo5P zc)Lcv{-cPMc#RG zK0jPbEF<;3)9&-<_sb>x{nfF{A2eUf&wp8Yc~1;goW-b~^*52v*1tZltno_=uCW{H zm#UjBvLC9Pr&tmF^CHvxGFH<&c@4=~*-3ViId8}yTFYg-eZVv_Yw%;NWw?4zu8*pp z*OJeE*yX)=e4M-YL_?gtEJwLd$%vX*^?T3j`?YmHr{B|R@!ORj3oA4h*B?r>T~n#) zC-?eRxjx^L9S=Df{+kBgO4b^zN9>)xkf8^kmgB!?-=eh1U&Ear-_|#uRqH3adhBH1 zNTEVwCh$l}Qlx=a@cvON1@FL;qdA4DD(^vV)YQxx&DPh0^o1v_aaGBA?MEAT^#y63QXA&t(LH z{@z2CrOX$x@_%{Ah8)>H=}+kgFVQTHa~mbRrE+Gle7xCw_c~VtS){7orNp7iSg}|# z@~0cQs}!=K1h}8=+(M;)lBnXB6zF{PKh{f0?j?(eQQTP8)WVUWBc#ilEBJf3V8V)W zXwUMZnbc5uoBjT&dsSPb&WZNFKDF6xlS3pA6gMp5bo^+R^VS;}rDamL#EoByvk!D1 zJk|M;S@B~IUpHPVgov~`U#9#tq=}uuN|?OPNTrKDgcl|be}znq5~Ga<{rJQDLPxph z)cWt*r}sb7UH&8w}lMSetbr97rczH2sh%3F`f3)x(_$ zA+7%~f5KFxe|+`Ae3kg;_IG1RwM$T?<~x5-=^t#_#X3lP{CW9?{q4y7Q{g24Id6t4 zGNkKZ{{LN4oYhU(V#09*nicy?pI)ah@RsutMf7>yJmis{wtk8Be0J`F3$gqvo;lqQ zD=N_{O-}x`A}%KgN%>imcjl)j_gvTgJyy|7a)r))Lh}Yj6!><=$1`GNzrlzn*<;AQ z8wJ12Uw-!dIWEQCe7vbqcApPK(8NpewE4)GAjzG57TH>sKE^74vN6p%Ca21Oy?*V% z&-H_KvwFeoYKk|rlYf<*kw;OhGwg!XAAQD%po15SovOyxqV&+Hq$yM$(qQ_D_GV>FQ-M#}l84rQRywhQP)=087^-CcVxGQIT>3oc zaRm}$x1@O!gh9Ig=hXZD8|^zUvg?iTG`{*6%(9cUMmc-Y;G|*=WPT|E`?d;mV-qT8 z{1^H+8j-I4b&XX|?{Fttla_^Fdf}~<%}U8B{g?1ZZ}7ghQg)4s-k$iy9yRSp;?|BO z#O_*A{X30ZYu~$1@sIG=Ol+srACj$<*<#0|Q!%=d>~1_Q!ng5Bm(>iPqJ+3R5}a2) zlG+sc8=ekn!&v(F)b9?7D0A~%R)qYo6?uYY zu1J{klr6r=eRvI=V~%Ezt}dQgp9OT|VuKJ@@OcTsA+G$UkHUOpaV|Fy!Qc6k=h;#a zpn~V}qd9_WBE4jlvR%*bx*FZpHf@+v@+X34>Lh9YB}~albM$=vpEsqe{SHfr70<>$ zs@IH^7?CSRSP=Lqzd2Y(IV?6`$dgFG#EKoVu#@PKSeZO z5;oI39G%mgdHvHD9%rixl1%q#AdIk;6%g^+>-)L=V;{A-`ZKiSF%Pk1hD)=UJ7VnQWdz3QBV;{Gkm8@Ub!v+}iGp zdZzPIUexoYKFbm=ygJ=DRJ`1Kyxek+0Zwk1~7WC;-OM<<-XjN{rO7vb?pcD@mt+^z1s)WzNN|-!5VCR zmoO#^{f_Ajxk9^TWy(J(J14r-J52 z7ms9wy3Aj2CD)P;?X%xEOZoR-qTFMRsj8l~SqsWJbH=cb%WR_iYJYb1Jl;kR={1*c zf1JGze-!nTZFCpk(Noh3eR-Mnz09WQzG_5`3QIh20l&NVEz8DZ>gPfqhHih+4T-a< zoSo~Bs~@gUmoaYlLfnqo7_g?O&RBmGoYfcPr^Af`;_M~N7E1Zv{a+{PFHf(%lkqX6 zpL{ZZq=^|MMer<<)4QPZCY(_IhS^>x$DWvS>QuuDYMgo>fZ zesX=XHNI4JYrYl`&(k z{LKtYo{di0zcm_V*C~rocT?*mL$1q|{vq}I(cV1P3=@}FxHm_g_C}|}UmcHc6zrvd#+V*`9VJ{`7x82^;M9t}Y>zL=gJRIEL!HTa)3T?|}tAGM_@9xA44( z8;xH>dSNMw&XfE*t&5C9ogA3|M%&xmH!*<5_zM&T8{}9R7gSg$C*R2*N zC%@m-sWqI>X@9B_x(hRCOtG#{4-cP5zuhmI!m)!?H9C_zKY~y~IGSH2&zrXusK$Rv zpXb+a=l%MxucNm8qlxw>8~4I~o4<(YG1SkpMb3FYCH#ZYZwyG&ig{nJM`re)YI%$Q zcZq#0evZWu`VgNkwl6}>gXPPr^ZtLbE9DB~@1Nw4@3n$#MOgkF{?94>4l(S;6D5z? z(NBNHDfRjx&GpxWZzd_j7o~cpX1x3rSJVlK7B$LpDuoM{QX7g^XmSh4E{yy zZ|-~5Ez6k1rbr7w#y&^BhyNvAb@^n^#F;lW)64UDmtM2oZCnlJZ7M-e=3c*F zb>;Q7pZf3nTXoORS#QD3&%clDe}B^Xy_vRZG`>g7&RtPD z`}dvtz5kwSm~XzdZu2?Q@zFi}mrrAVJts1KOW(+Du6p_OpU;qE6K}@%&g1HzQs4K> ze(2IZd-%^^Ph29-U$}qbCsMl~YC<(uA|$MTtagL{Raz=}L;QDXlCxf_&vcs>;feP- zBQHY0%Br?7t%s>vaJ{KwOC}}r_|0~y=G`9TNg0AE;K}|NXbbu z(iYUsr^{IWv58`|ElTzOU|Q0pHEFH7-6+RhG>eeczUHeVJuqlO(;8%^ISMQk#*48e zJ2p~lSx_}kA0_YNe_!)36>(x3W=ut-c@S_>IZXndwGN`>8*2g5=o%u5%lj9GIG@cOrS zYKk&p=C2+o#!)$!Y}87|c!Y#p37DiPONC`fa9&h6Xu!=^aSYTZOJv-*h*ebz4j7EO zgJumqz9&Yp#avC;YGl=EuG6P#vMCE^mMF|a7jbIZuLR^`cV~=zPI2a$=wTGt3A%Qb zcXKdNdC7rB@W5sg(B^Q6x*-O+)mn5+QK*o~)V!;5#pN+5TY}JH0isk|npB1hEahX< zO)HCWYy|{SqETd2QkI0m71L8tX%yrtE|D297{Yd>wN)w64Q%G3^Db%`^2nuFtwmg3 zDKO0pqKrJmMTnb7L@A1ERe3RZ(>88$sX?a9nrp?ECgrV0O_5hF4n>R&c?w`t;-@6Y zhhuMwB#~Ek`Bg#jjV(Om3weB&Xr`%*O?bmKDWR>RY9lR$my5ZEdZ&RR=F$o(PE5gk zX=sUf#PAMXtGtY`p7(C`y-Arhyx%kHq6i~MfQU*|1X2PETWy$#DI)4+_Y@i;Af|YX zwu^#ALaMuVwq_`8+Jj@Trn$h?h+$yqWa3RU7%UHUY+9`4#e~z3HpHck6ACU%IuS1E zU97m5s)E8w$g>Ed;I>s&ig9xG=F2@kL1;B}7G<>Hv3Csy>RrQ^n5lcKQp)DZV)pSj zmg?SLE?Z8{(_}=i?lBvL$Yov!b!ITI%yRRUcKGn{(+;t%Q=t=3Udvoin`Gi+1~fYg zlBl_MbeeN9>gwV0M4(wPq@7BfFK<^NK)bn`q}cYwp6z5xE~X3Am^NN+*Ia0v$%Ca;mW+68E!?>AYIv~CgvU*+NRp*Od7P< zuPofdVKa>D9wbb&Rg5{P%g1pSb3yWE%e_opL)I{nY*bomiF8G~#Y&{X;nK)W5mhWz zhzSo2NBVX5}o$ zn6)(F;jXRZ!OF#Dlw?#)uJ3tp>FJ9HXGb#(52Ko8x!7l|ncLc(;i9n4GP;IEP?!-> za+DbkA_^IZ#n_6H*EZRB(@xGUI}6Ogf}l=ArinnCEVC~bo^u#Wm%Nl%I(Y_W*g>DjFe|U^+E?o5{SJeY}B(TJzFdg)lqOJfwoCN$AsynJu}3R&lF%` z$%w3XR*gEwlGyWd%*KLfiBk8OcMhgfc99DiHC36raQJZmlNo&L8muwHw%E3Y##a$D zx~mZ_lJj92d^Ygb*w<}NVkBg=sf5@ru4V5SHbml}?IVBBj1S2jj_mE5ZO#(VdzCOQ zyQvTLyn3`~vr77m7soowT<=UcQ zm{eO*n|qN2Ej&6;6LKyYNV}^pq4dzn;^~-}W~XS2O$HE$dbW3kO5yB7CQ!oVK`J2C z)I$rnYjn|S6bb`< zIY*>v;6;`^PXr=&PjJrDQ3Ws{+cw-(*4LplZi#L_<7)BfXW}1&pOIS7)sdm0!Tw1Ig^M}AWsQ-k0Aqz4&XYO z4hT*-ICSX8eHu5)1}5m!Br{U$t2D;NdgD32Zkos4eh8|ZABgoI6ZZ}HCciTnCI&7U zMY^hV@TSz(2xE~U;>7BzT}-B%pt590yU7&`BLb@tYQ-tIbe#)W8rVI|y&Q=Qwu znGJ@hmUzj5WYMW}nL4OcVWMgaW#yY88zw5=^yyT!OvYW*vXvqr;JB%w7ZlW<@@f-4 zVXXYSqVZ8zJ7WzoHe9HDiX}RjEP={-LZwS&+PBDs zZ!RJn)fIRXY{T8Y-m`7FSrT(o84&dr)}tFPBsA2DaFmI5jByi{Ei$tsGU1Cumt$5b z>7*E|6%R_L#The_oj@)Uing^brs^O?)v9{67pSR#qOzu`mE)$&CTi;!sJ-MW`Bdj4 zX7h|?#5GX3zH={dw%qU6%8Bo<4{8+0Q$5>GMJ5>36IH^_ySL6}Kx2z?;X4-S@!n%| zX74^skKYG_^m*TW&IQ*f`jcKuPBsS2yETkxyp~UF4ZD7hdhdNtUGHf)=N`pC#`pM39hJEv-nuf4Wq zOhXIv@$cL1;0h*YAP2B7;y^o)53g_&q&VQBf)Q$Ew4$596@cQyotd67RGxO>`EPL%?&8drk*67SbT4tK?NXUGmA)HNV z%~M`IQpnRxW;Ga`u@i{oI&5%F)Wu2>O6A27n5j*EQnPsOvLId-fs(11DyFI>IS8qG z-IDbeZ9vS;D!NdjA*4k)bLf%!d4ZGs6|~t z!m?&&-zr2si4g(PFzO9x#nriD%LTB;4>TBvj2BOB3T~;yHNKPxo6Iy>RwXS|E}iO* z3Jp#f*|7#NU9MT9DkAd&4-8VOc$&p*(P8EWT-;_|GOK22vSQUfD3fv-@tw#y?t@U> zs;8SU=(Ljo)8o`yO+xoBY3bh}jGSnd4>g!#@9(RDO`OhdB|>`GY5eKN_j!ZsHp_0_ z+mhEAHf_?jir{H3a`+-61Y)H1i*=CISB>^o=3h4r=+s~>cN-E9FeiySbXCk!YY&f; zlJ~+G>W|&+ooNidS#+-?&anGiO=n5Mb5o{*^-g2QO%b-`n2MlYWL!l<4-Myq#mG2t zs@xf-lp1$0`BQ3rk9$*C+>T?zm_n%;hIUmdr=qcMT9W+d49>Idb-tnk189N>jUb2& zT}}gz20-8^SKO|LKD$5KaR!slaq@;e&jJYM6|Qa-q%m@dCbp+2p>q>=e$x^dWf*g# z+3Wj*Ns@+HH1~wVyot~o%sIzl2^yJ`EdYiQZ+3y`f zG!2GkY&BPzhLAT*^vdSuLd%PWGMdx8$}cX>RWR;_=0$`hnqr}qzGFaXb1MreyJG>3 zHmWNyp!aGXvNHq4;z3hM#uJ5>J1dh2V~UAn?U;yk&h?FABMa)HpE91TpsNJEN@!{m zH*Yb6Eyc{4hKr?_nUG>wKv70v=5g)QVp&x=YHBpkm4p`)Z6fVJX?v;2yHeEkd##7v zUOH>ry-U-ZqbwZW#ryMb8C%)r?}3HjnJnUNnvz6_gc@1c%u_O@bqe1m=50$ZoIUN? z_j*d8>ECpBEm9`AmaN;GWZ6$7JMQ>zuHS>Hee`-l zo@}24#%^k{rXOOrmq)){eQB}X9%lONyL3Dk*O|KJ3gK=yQtjq?cbUza;(kM_ZQ!_S zw?-!8m2fKS&H4oU`5kY(bG~%`1fJUbJ5>kQu&XNV_&L=v=b$?k&U^M8E~fiA*K{wU z^hL$h=J#?bmA@tBUq>$$C(xbL4h{}7oB$aUjyNg+K|sF0ha6o4fRb_P2 z_-ysdl<(@D(H>vz`eVf(t>@Qf{Ql?pMB@ByeeV8ET@dv-WZULdiKe@tiDb%QprF)I zF7-EX(P;-tZAKw(%qB9fVdmjZpghztRaO+j!A6BeJ~E3Qs>g3>u5hT@)Z;8oQl4AX z*B!=hFC~lPyt6wQQZA8UPiRaq}0H-#&2}7U-NTuzSJb#mRS9A zDV|Hir)6#`m3PSC^gmw@GYDndKV>evS5TwMVfXgA%Eq?i=H_bn>@rlO``oA_b_#li znTNz-qvhC@vwvpy20nd}>%M*3)x%x$XKqQky6%*C;;LTomsqzv=T=-@D`dY(bVO*J zn+q{DO;?ASy|LMoN0jHxR~YC{wN#ke>s6kK5SEK5l}XC;Xqw6;zO}PPZ1biv+rnm= zl5SX?E73yyrx%Hq##ZE?%}-8{xilvwO3$x)Qh5}_#4 z3XLd%C=jX%05XE1Ado7dn2Ul66tC92+99$|YRxwe0W)fc38ElDrqV=r0Ocq2q#(8rRl2Af47E%pnfx&ro4|e$Eu*k|n zq4e~LYG&0{Q3Vv(OuM|hD8oU_wh4#3s8#3T+pM5@z4G`IhNAUzZBpgo+GXd>#_n=5 z9~yB}2)5XA@^2m~k?$2)ZO_H{J`TF;mT0^Up7{!5dUJVc@!p>E7Au-$;v7RnHC4Bz zSxfjmS5hRNvEylTl-*Rs$+@fdyO7lW{j^}~X1Z=~qtdLcwnRqTGQA#M%z4@81RBNE zb;)*`d1_2w-2EL4b=-Np#<}dr`Oe3J@8$RLdh@OBJOvSt)GvL@)u$roYdJv zET_*6$(%k-eh8i=7=2Mpr(>q5dP+zLdiHlmY)mO7VO3MyuJ3H7HEHRe6WX_=9oHj{4bV5Y;+Ks}Wdg6VCHw>gYuhRaoj4tHNr^ z;;df$w`If|`>C#*etFKHD0Opl+pgPZX=Dlt6hzI)OU`xdY|XMK`l6$L3tp%9MbK znHI4qx)w(#u6a$9 zInQ0#`u6RS1nH&Ul=Y0%?r9ur!B`6$xr&;GvlU|UuGGQ04rp7%+KIM&pi~hzOllgU zV#PIyr=?~luB1waC6mrnR5^SF>E2EoQuHq~CSnsZH;~yuRvfW2dZ92@F;dVSi!dsr zuyG9&RIQ}oiA>=bm2h$@EUbD=6e_HmMol9(B;#$pt=4k6*2f9Fj9lDLI3J}(t~V_3 z##{4$gWGq?qn&RDSJ97el<~DqJFuhM#ZZ0hXVE#>sJM@LT|@4wW7sc2Ha_{m%TenO zes>eeWZfIZFP>in&hj5?vzt`>+i%o)Hyt!>5fYD^(dkKW^PUG>p*?nJ#?Fm*s~DSK zbDv!ijoKXO@>rzeRL&zwVYna)ozS5G_jN_gwnCU3fZ{dm2d zg^ssHJo>I1@TUaK>SQq z5ag3}Qx)OHGmu@K!JuajJBm|*jpeV8e-mR-L6IR2GwbBavHIy~)WBySRqBr`SyGP2hvnb0n;QY(e$D zPE@5?)2Q3y$naM7*)xjapw8YP8K=2cH#7k?K1!e8I$PuJ+S`YdJw<0*+)h~8&hvxN zf6D4Q-#hJ~_1hHD6&BJW+g~H#;ofIj-8VWr-sj|QR$SuAj-ZKZHjC^?-IcL+vr~;u zaI483O$NgkJ7Krx)$O~db8$_bRGQkX6#22TJ&$5{&G)V~l2V?q@P4N#jnPeTh_6Mj zhb3uU(O!3~D%)NgF`wAu)AwETe71CylW+A|v(v&J6V{7Lc|5L6<4a8ZJc%od;$xMy z^tWtY6S>KUNfpsYw7RFG?f9*<)}1)>qQjxG&~)-iY6!4!amNlI9Bma3h*}XM9$-yx zS{G6J$50Q=H+e*|~h@MqQF2(jI4khtXm+-vCXF9=yztxgly(+gsM-k!S8QjR`3Jx1IQ-)z$ z$d5gDRn~h*7+~1u{^gRz=Ti>PiOkLoK}9o*G_ZcwhIEAZm8s=$NakSgFt-$apoPIb z52FNF`|f=1x|mC>%RKa_k*#CtiP$+t=%uQ4%#1CQ$$F9G9(CfsTPr^8Ozp5i^7Q2H zL!EYt>5ddj9Fs0labXc7qYtuE1kB*37FbcZYR*+M`9*9O z9Qr=WT&?MhbB-0S_=m|K4vpi<_SrA<-p` z*A1}`yRm4k1*KVwE#*d_jxnYkPerH^F(Q#-iE?*X;%AaRu^S(hJJZu8jT#W&SLq~Y zMXHoury_Q~^2Vfz_o{IA$LeKrMTr>c+tn_IBJT zhoc5b{~hG{H5^CXXV}kq8mx~}f4MJdJB5wZV%aZaC&RALmS>SmLQyqqkS`MALl8{` zK~^He@V>}C@h`$+jYl)q^^Xsph~diik|&(0F1(q9E#{)WX7|coR2%Em#4=MeemstHk|}0V zSx<4JvZbo~O5-C{6AeLVV=^rad~&*i=d%8qb>3K)zJ~9rA^PoJ#c!hrlPN{HwCu9= zMRT^^VUp*Tvn5+Pj$G*EgQhi1kCJ0pNp)csmi> zVR)V5PN$hzq$?8~onACx|4JXEC-iF7yj^(ukj^Q5mU_64#%%+OGEO^CrwMzXcT%zz z#iEEsKMssUri(%ti#Wet@KBr@T$OvWPL6tU2B62#vl3X9OQaV%)?{7k8eY0*?kuQd>V&xy}I2gb1wC$=Bf!@bTtPA9Ritm|Q z*6&BC_4`h0sT!8XQN%V(sIXGzGgH5KmGSC)Mk+xbi$l!Qr)3Libk)I8lZ|&t4+VtW z`#q$!7fvZ%#!IK+QY46|M2@nNdqq6!nZ}71a_b@>^;{T(H!NPJ45-&-qFpT`rsF5| z!|>c(nc0mAFItLD^UI4UZI=o?=;C-JNn~zuYDIWsY)tq2+0V?96DMU& znapdfK{LNsIrG<($#p`-)Km^zS)sGu3fP*Z+vsDb6!gwy_QeYM$Ga9Tze(Fjq3rjY zmm;X;DpR5gLY|BJa|Y{x%wVPoaETnvvDG#u4|MpUOC7o;pd7OM<6#<8l(=wB80fVU34J3q-1JS^Rp<%upQnjS&?&WPGP$YVq{qrJPZ}R8eRNbiN8c3g(!>~1|0q`rlr zB=K0jOgSP2_Eh!PWSpr=A+4Mm%_^pfB&1J(l zr6yLDn7jx|LI~VDSY=;-xSM*tF<&&_ZTXV=D`TGJEs%7S{HN(K^dgqlAoo;t^Rq8i zC`(RLc3GLq|7e%F_d=(+$a|Qfbkx~0JKxm~h%eSHn^3JF{#5F*x(lS_+_5PqGZF-* zU!6?p#_ry{%M_4i*;$)fdug|{KJ0vpN7;BeSxoNxB&XUNFSFs!FBmq-axhA!sz@&# zG`lYc_0>!Ax-n@nbBUHLY~K}TQak4cxu!L=!2;hkn5z^dW>7sRT+pzSfe^k8VK7ZJ zF-a9%&4J9;8e;7@Q4q}keAOP4;>hW3_L43+lLgfXZExcWB>5}7j|PpSrcG#aMu`?W zA*Ok9jzswCXXO0|OqR%VC5R}zJaxK~EmF>Vy#FXg!{Dhu;i{2x+*6d`bn&W1Sdn#ktT9dfSb8%GmAO$9C?=WkAhl${KXrAa z_~eKdOgCK_yzxXr>6AJ#Jq~KHFqx-Db@k5mX{+gv(ORNbu{bY&r=Gn= zc57*>CO3Lenw*#>@)c7vIdpxpiD)A5-?G+WNAu>$f2TUJGW9y^0E=fkTcQ8zB}kK3 zE^_ydW=xJ8k)emqtk1&1^5twHBq~sb{O8Q6`yjlll)(lOkrYgNMB&WW(KCEkNo$K< zN%Dcnp2=wDjj~IVk;4+3MF%rjDj_20Fi(sTfpBDzSwPe|Ta+#IIR6u?4q)9oIdk?% z^2Gi4ujuG%nW&RPp^92^Z%j|oA!<=2Iq?Q1)um1@tV30Jf|Vfqn>M*JV$BejydH_= zsw|9@73AYwn7mw6`kCrPj1v%{Lc;EGRh2KfF(H>NYjIoJg$XGw(!^(F3$lupSd|4`S0Q5=ehgu%*aC%e}CC*5|snd zlA{qS`)<2mH-%eo9vr$T-pnu1HmhQ)DDd|p-8xnpL<5TbBdh(@o7cgqQfA~VmG;(CjXtCqsmG6d5u zeZg5uWzPyaTz_V*Codd`*8_Aei(JVrp2R;^0zI z5rJ?($49o=I)-{0;*KEnAaS^%W*Gv;E;GGT$wABamm2yLUPuGSGD=>ZcWJuv&WeSL!lmO zCUL`ac_s>B3uk0pk0SmRQfHq_9hK+k_4+l(nCsp}lJKXTFa!Wmbw*(E)b`Ywd9d>HyO$IVTUzAwAi`8>CoQiR71IX#eM z*H`DMA9_6;-p4FVpE{qMn%l8)2qz>Pe?PW^u_yMAYK$jqA%Bk)PnIvwWaZ8iPhTj!A{^0d0 zvHIeBEN1|UOX~*6(^OKY{HLR>;QpD9f2O})jYuWNzam*xs@2%BiLtU^g$L;Fif~Ore{M%i;h&6mMD5Lnii%^ zi^uUxA3`r0-wBe~H{aK*NS4WrUycX8-x&ITx^5?5?RWEENqr{!b@liDa_!b7>+ZFO z=dZoushmcf$GhTwr#`(!WXT`buT=c2+mbrle>~qlPU^AC$}zrtjqiQYe8+1MLGifV zKi=zJW9e(}mGj#b{PO<2$GM}xokaY%&zW!Pe@*+Vr^-n)J9By0-|Sw^qTbK@OFwgb z&x$we-ly~T9Qo?Mf1Q4>^P1C|_xDNGN!8~>pQIrX|5#$D>(s5|JyrJ~60}*?ocF$< zx4oy|?;Ahfo7KAOpB9^zyk1qj{!=lfTW|UCMtwXI$1a zxAu?w^?Sr;_4AcKxc5F__c3a&kZt1Fip*O|j;kZvt^Ufg_A)l<9%zCC%jP*}d7Fbc0wY*=OCa;|sTcgTpzOmRaKpC_Ryp|EaGQ znK?|RmECgMWK)>w&Ch9M9VC)=%Jcs^bEqe6bI_8*!L=V&o{#=~_j#A4tR{ZY%%`=I z3WWUGi@7cl>ArVu@YNR(E?W$`A8pp^W%E=oZEjJ_W%%_MZvOS6k(s<|Gd;D^OrOId z{nQA0VNbw^@`Ze9#-BRn2=C1`MogH$PB4Y~-ZnK^UYYU zhALR=H7CuaGZkeT=JJ>~o0|O9Ug#|9XuR=EXA>=^dU-hNF%zMBVkR>gC_TK{z8aIv z>`&GnwG|&wnMuiRh+oR&RUmJ1)Ai!YarO~*OmM$#i(HNxNY-Zr<*DG6s}`e}fsrj~R#TpJaz5PE ziYX=Pcr@!TOu~KU2^KSK7bAoTSq*L&by8Ye^P=S0g`kE@6g|8okiL0Xwj!rzu1lc> z={ng-oooKqP_+=r*QvPq~pYzyy*6RWn9Xxv1yEu()TRK9Q(Yrve<(n*162E zNO=p#S~r42I$DK=N1X!6%czZAeKyXdjXL#I((4V8N=SQ)O!&G(`M^?SErI zX$(gf!i)3EhpLk%ISN&TwM|K9N?(~RvxYF35TRR~>TkvyBB3n(+kTVbOP}zrJ07Rf z$;nMl;97ptxzz@dv$~wG(xeOCwN;<0njb!6GP-7d zO9;Mxqq4I3OA#PmgGyjBw`om zL%nOYMLQ)<(0De#R%w{?-EWe^HX;4rqH#s)r}Z+deaBCJJ{KB^^UjY$ljw7k;#61= z>2*jG>m(lLb}nvUg|OEzsp_Nm+SLgNURE&K(#<&@aqhRtE8iI2N`>hurVd--B3xgE zRK7}dp8HyQ)wQWrZO#VeeNp=T-b|}hUyq$jxgm}by>w8r)w*)9bg-LFA&Kqag6`o@ zOJfaUPBeU-^iIhR^cNRv+SZhPCJ~}j&RwhP8L4YUGS;=3NX9S9k;JWXn>`rg?;`RQ z!d|L2o|!OLSSh&Xt9FGdLVBG9py`?noLG0IP*+f~Ih`=&p!{KRA=3e`DW;Z*^(d~I8dyvWYlPvv?tTu8qtHnwgM(Ty` zTW{Yb#zHDfT>X0LzR3knQVW*7Je^RiZ0&=pIgSqr@vGo_VnyttO3q~meI&}1kc-5O z6$M_YjlOy#j9aZTT{EPz55&zAg9v7Isj|44q!>s~w55f(in`aM2I(uPg*W>D_{0|T zyOwqs?a%a%JD|Aqug*@)!vSHd%h0$YI?4>tlNlpTBT|( zC_bEiEkj$<9V;)$Jd#^^?G1IuT3lC95auF)@pzO`87mBf0{PgRk53d_#?I@e^U zT9@kGn<8~9dlh1%{@M57zu))s`ZNwsy3$Bz@3G#rYJorCSbOhoE8w8Wkq?Vpq#s2i ziC2g`mHvx0#vNs`X=L_Y`P9jZN(i-hcaa~s$vYYAGIiljV!SVBvzPo~K8o>8bbay0 zp+{p=_DII$Lh$Qil>{|RK6FT4V3jhx6{F7!p$8C63Qd}pelsCQ5qXv)MmZ|+Lz@|p z-aL|BRYoeJqp&F)P{No|j%Il?@5^*nn-iLNT-H{TKhvCqiIQv!$+d!O#J(nQQ!n@G zwmX?AnJ{#91ztzCgT;~k7HZdsYS=?-Z+IymduAcwov;tq-S^|vxp(LUvM`t_!n>_X4u zR{ej>((^1!q-Nu1f8F@l!RUM?EKugAq(2`i#?IiC%$=4fBdwlENED@S!7_(G zI9X6h3S5oRSn`G9m9G){)tP8mPiQRY81sy97Uh@S4vg_Ztzqv)euS9HMv76THmpsk z-J^(P$%(!(UGV%Kcnuw|{p z&7;*w;jMv28*?awew}r>B68?yaGdco2eck&PHt`47)hxqSe1lhv5g!3Mfx$u1Q4IX zM4efbijr;=Jl|M76>F7ge9IVI?@=GLXmz@8JK z-oFaHPLI4E4eMGb0>7<$_g^BeOodYVKA!`RlNF@?h26;FypJF)n3e zKNN3A+^I8Dk?gsgXk%TH6+fxIS95t>W35p6|7f`Cr%}l(%kqFj%20?2B&1 zi>$;w_b$%Rt6y}-@hPQrn5msmYOM7>Fyfd#(^mc5w8=%@^O>lvc|V;!iSC_O-g_zc z<$qkq9{ku(GBQNejwF!EY>!yuC?dtQsv);>e3vL(_W0nrB6qQ_aYL_EsvMWBs88#9 za&5jRK`DX7s|T&Y`JsbAq3a&aMO>johYWD!QW;Y8TY$08HK_1Cg;KYQgZ zRXppd7m~2XeuO4Uv$5iFE>wI8@SKX4faOvD;<_DL+OHqZ-7ff^y3>;QP2ikN za;#RP>#{zk-BrQkO>25AE zqYh(S&X!r#iAU-k6Zi%lFJ-tlQ zWj@xp^W6CU?Kyj<5ccPAb1})Up&X4`-i5kMw?+*X$qHC%=ezu-D>@YZRoVXi7<8ep zuL_^@8BP-1^Bm4nj9+!qOo}Ej<}WK2CC7{PCkgQ0LHa)%XEn+8zO3fYTzaJY7p?c` zu?J^dl^*vuPhU4s*?o88u~8 zr8siIQi2FdSBwcl7(xqnr&v;5N~QB<83D&Acc}=QC3~WZmLO8z6ggwKCG4u9M{-<6 z`!R!CHG)Snsg<^HV54y!-idKMx-(?G-omlzN|Vro80@JC{LjWY#Oxxykf9_fZt*fp zNm7e^>AW)`v8$UxZ;c%GJ=DtO%mmGq6q$3mRP7GCQm13fHa#=T3H_kMpyL&NkD&%v zcE(paVq*>Lq05bVP>C-VpUR!;R_(1~<&B#jyimw5a^2nqds`Tad-^x5fS6C{I(?0f zm-{mK;`+z(PJOLJY4gY9KDX6{;h5_PW0?$O+&MDEN_Vnbl+U^2iEdh{L+jHY3Ayxy z_^rOQX4O34=tA15P^1h^xZC8l@=W<-olNpvnjEP^CSDap?u7-X5zN=4s|-lUrDEm9 zp4f7aXXEsvi2Ya;lqA{ka|3i{Wb!Y<`{n1ICwL!NaiyauPO!W=iXjBrw?2C$P{s_L z#ble_MHa=Jsu>`lH+ZvXJ zoj5D8A}@xy+&>p|)p1FS!yboQtsswtq(aoqSGH&{aBs0rHYHuBeh|9 zB$lbk1o7?Vv&{OLN|R#49&#g$L38gNO52c#*S8;5uBq#Qkqo4 z^*~V;GKIv?OiV&&uAFlBdh*=<7q3<&INe_|p}(m;BvN(|%ge8Vp1O+)d9$+c#A^)= zr5^`Ia4){b)D*JdU}VQwmgH7Wa&lSn-C&8RrDl3QqWMlUQ$>f87VvZXh(c+uT(g#4 z5JBo@IJ}C;vXFzRA;<*!^VMci4p!C4ng?l+fmg zQxbBHLHmi3sF!#%`}vyrqbQswE$x-r5J*hPqGhYxtwho>?+07sH^HevS#Z@LmDlHe z&YIf}4a4Gso{y!kJ0(tKd2xbd%ZXE-`I1p(0yU|LkT`UUN?*$pAYLUsA#Fu0S$&U@ z#Cz3+^&!icCST$Sn?X)h%9=YSe;lDcKJ~m38z=hmxmR*cCf29CNCahro_FI?xoBv`}(A0wG6Fm$H@xu9q|7t zU+EmLv^mJ=DTXD-vVJ%0`rq4?v#yW3WOT~Ywkg%&ucDV)GN^NsrY{?&gz7o#3nxX>QRe8ZJW%GO0vng+()Xdq}w0 zTzyTux=_K3R+01My&qBbOPgs#PAZsvczAsYEk+6yPK7y&c+cAsEEKg@(5zW!VrCp} zGGL+gSrbhRD)AvEP=5v_SWSO*!xiy^fa1!la)zk;(6Bir_F6gp{+MG;=Eq9*$3AGYD-C)sGh|5ex$vOLpoV?6q z-;X~uqI;X{!GU)=-rLd|vK+NB#0v^oXCvs?P=&m!3!8rOv8MHl9!CGC@BRG?D^1@* zxwbp%qv)y4HJRh^ioJ3roPB29c9B!?d7h#*lK-6ICB$HHj9>Tna)ano%xdUM2`1_$ zNT*Km$`dMf+;eM4UYgT1zn?0X_?L83PMru){Y=snr8>)%sp^c}TJj-`XQAk3qu#TA zx?Oyk*Qjeux1=CX2wu(6$MrwKuYBmQPJX6Z_w$dXAnxMs-Zg@nFp)##qTaT9XWSyB)wVw9P&9M z{2Bx;GBz*j{LW(eEbAqu@wl$uwQQ0b9O9?fwXvUtO`+ZvrF~HM*U6rf(H_pKN2A#U zv`3=bXPUP|yYY=^FhrV z?Z>gu%pyRX7){or(CoLv^43lfD1C|MU4$62XeYxAK&M6r$wbjTZ?m)V^$>Fc8XRHN zxX02lbT`EYDKSm%XH)a@^#)L#qi@*azm~+0@0pS6vz#w(yiLxFykGFv&ZR=UZi5w- zj|)XP;YuF(_H#d&lO{CP>+~$llC6!%m-c_NJlv`4zxI3V#`^nCi}m;BsmXg_#CrZO zXX`~eC`d^MB6IZHT$v^kC(1NheD-~ji1<#te&}w9Oz5fgx{`^ugy9E=_b0Wq`JE)`{H?bNfgpfI%Jy(~RQ(k^QH*}YsbH?Sr1UBck z<6Qf;@p8xN@Vpf+35L1Fmxn}u)KY-fL zS6o!D*E{^}yC!pUH62ZgbaTR;kZ67m%M!@$AcLReetC^w*T3oCzPG5&TIw%Tn^eag zlP!Fy$=dclA^S0NC5}*X!p&_npPf~l>SyKi$0k2Wo-T9eSh8cpe8819zW(~3LVEXd z;<4M@L)n8T77j||t8Q)IQ*Bsm%#Pw{T#HPJPil{TWXGW_cf=i@8`#BXykyb+Iip?n zJx@lA5FyK;xlXrT;8XI%%yfLFe`lY%o@3$p2JJMGb^G+^sGmg?NEqz>dF52M5y+>k zE`)+dN3n2171^;SV@7H;r|{S4^}PB#Bukb%5d=QGw^@%5@Vg12NhOIE`jc_d4d2|i z`<>5LGwlBQt&fLPu2hiaPIgdUrn@@jJ(V+BK~XT=LDa0g{<}V?7(q3CCC3#H+1b&_ zzkHE77~>msf(%pj++d3n+bH<=dGY*-b-8cRuWLc=`ZnVZf>J{tSR<)S>ryCv_(jhd zjr^<7#|cXxFif-w2E|b}C1zBs7ZpqsXe@T`MbmJmC*~;)T@Z3wbmH(#L!yN7L@UtnL^}|Mq z>ikeveyl(6gZmN)6j1~$cUt+*jFw|o*5w`q8XSEgI@vht;*4IB;sxTQ;6l%n#$tnR z=lG>dVulP`2ZmsB!Wd)U?*VM^g?A|SByG}pFXwzc# z-CusbTAQ74tc0cV-X_1f{U+sE(t#&7xa>$+UO`Ovn`xqofxeZ1vrcTSpZ z_K)-9vGwx!R!mQQ`lI*0o_73;TkjmDWMUJnW^0`!PFzPT|L3oNSJG3;YX5(G{ru}b zu<#b(;2;of3$f);&x2%u~{0iod_U_smbb_fPky|B?MS^L=afpC$3V z6FzzS_4oF-|1nqhvFWUQdA`Z{#{d$U%*VU`P*8Af43)e8vei!&CULS6Crs7pnRHME^$64II!Z3t;D&d@oHlZQ<}7sh$d7P^MTb( zytyNZ&dsHHE{o>dpC%0H3r^3cCU??iljgRmMms-aU#*GA#L8|TLJEKJQzJP}DXTZZ zU$?)#F(nkh-Oy?gZUjTOJyUxhp)W6@ykj+8+$b$(NBDHQrPa@dpycO`_LY+QCO!8W5aN8O-nzAktd@vc!WgF{2$I7( zU*M)lBFFMQY`&@V%F?7Y;a*=UoyvUa>scX+P~9Q5T6YF6UASI_CuGepX<;I~S{a_O zR+3&96fwm-n_TP5QxjtKIoD1xTNEWN&8nZ`6%o4>TpQ#_H(B=yO0qpS9rsL9nx&RS z`K}Wdh94vUxW|4OFlxxwH?0k1E@+tpi|W-YV*TH?6>!!m#RW=niWcHHnvOnTxZ8r7 z4%)Vv9*@TFJL6ndrsi0Z|3aU_^m4ua|9p+dqaRy7{k{^U?`r)0|EXWszpQ3HE&mfg zbF8DOc8#BuiNba#Uw-05a_ApXmP+{DkrYDm)@ENTWApVFwQI$_=EVD>&wV$dgvs+W z(fgI+i*{4s@H_M88fp6E!1p$aR*qE<+=ST|&+B&cS@Amjs|a*qtxiSJB7F3A*|L^< zol}yN%a(No9$9>BW>?W!UcV5b+Lt*!^*aD7y5SH_??X}Z^R$~xZ57G5A6`?X_ zeQ1}w4q}W!a}(32c~XY_ABN8Ok(ckNy{@ym@2;^V$GhGqP1UQ5$h!6ai8CA|7g|*> zx$%pXDfiz}MCGTNUny>TLffqr#LHms|9R$7S&2)H9^#4j_*-{LQ68di-*V&XTvED| zHJqz@=6I1pgC+NC7xEQ{L#e=pVTGX|Fds`RfM7rOHxVG1&o)RQOtP40Ls2 zwRyPBK5!ypPIA+dp6o{?^B|~=e5oW$k#4p%A+1AIdj1ag_^l*)&x;)HiRQ zFFw*o#p4>@UP-?ZO`_2kBjo(HPw%MCZ(23?zT(z9_t9*MMmXk!HF*1zH4=KfR?@}? zVKTP8q32&LN5Z}l*K)erU6Jd&#Eo)w7jAe`tB!@~7E>x~M9C6tbUvPB6|~G;kqClu zwL9+-xuT(B{E$ajB{&x3`q-uUobJUGw{&BoT=x^yG^tzj*S4HcT~yJ@%0P$`C`5rN zbb_^k$|+KzKP73wPSa$P^GlI2XvI{U4%3lwPYsI5E~`!CzY&hf7auoCk;6uq;--}} zl+oKp$rYJDNUy}rUvfG>ME~KQJsYcBsma!*Kv_;+7k>$HN%{JTdEfH|h?lok_HsU) z{$=?SWy=UuwYkQSi=ojvc5KC^oDfu*tVs7slc5-yw}P!XP_j!kcirkpX;ww*N(pYF zl;Jzg$B)a~+`rtpQA|aTtuL-9LF=JPvA;ay_Ct|wi(c0~e^?|xomfg{7GsWH^v!>U zwJDYO)~S0+@6#+*Wx7vay-N%3b)T!}D0b9q_j{yHN^b@QTIRj<<{uw@osq_#=K6cnGVLbr$!W@wB)}$yv1gsAoJmbFZmfv2|AU>S@3$+ z{3)IkH+f3t4a2D;d3e7SR`LptUmlL@q3DHVMmAW^=D*3QnsL`S=V_6Od*os_>Ph8E zqyRraz`x||h7V3xqC^LXR$3PwT7oo4Nzj}Oh8y+oI-E|C+$nfLE?jHC)g*gSJ#F~p zOB$&@N(f>W4pHsm7IEfTu1SwX^~MKNKc*f_#^$?4xhlRo^-t=pT6Iyj&38GOTI5I* z1)jeuOzkPm{@BD7CB^vXL;5HxKNRl`T;C$51S@ha2XK1+^jnErbZT(OE{tH+De!V+ z;9`Whom71i{G9VXq+0)-DN@p*b-{OUXNC%ln@+?Qyq2*7lY%(UGm|<=W(@y`ea^C^ z4BcR>Dvn??>LQ-}I~z6XcrhGlM3}@X9l*4{jFvpDM?5QYTwp3bN>q%{oWvCb#-Hm` z-tUW6ezxf5=cTI24e;;BQP(1S?>DJpQyM|46Tu@l^_~`lpkr6bUEOmz)#68DxnGnO z3K7;n;xgjC6j&&`-@}rXmdLQ`vY4-<>f;)k&Z5~f!t{>B7vj1wkx>x7D%G(nL*eLN zWz~=JyDuBH{l$65!ujLRoa?F%!=v8&?PV?!`&HK>*G7I%vwgHx10(UM5qf8i2NzUK)b8nyxw}17RNNsi^|hilLWY^%9G)#Ym6Y|>P<|GF%GF6 z6cwjy+p)+HdEW&`6#ZE1WTIt7qT=L=oyP>qkaJ4eD&|~!j_5HyPKPNpETn}BnjS#v zxSiEIa*0$-d=RBjdpJyQFi&Sb5LZc=vl}SU4rOa~JIeL3l-2fWYsP7uj`k)wT)bDV zv{b-^_@1--GA*ifBT5aAOcv=o$hB0ZAJ55h@gwF92ufmVNL?v}DK*__>Rmf`QNO~m zYS?c6tj9(VXd-6BY^qY+)4~TP$XIyGlq`Zem7;68%QI>Tg2gX_pOh*ckz4U`#Vb4D zdYYV(s5M308|14;9!i99N_b>GhEgO_n7IV*O*q=r@avtyIH6HX7ild1h<`*jT(Z$= zk_SZnYOFqN&wSjm;Wp|U`x2-3fa1*fqwkftpZMq1rM?umX>Y%3*M*^-Yq`pvx5kaq z*8R-))Ek-hF{7Da-HI5Vly~ZJBrGp7mZtb+Cx^KzA%s(Mxg9Z^Jk3qg;?7Cc;|PlN z(8_39@R2?Kv3k~~davh1TA0JnCe-L^8|29Lw?E9zcNaZXuc~vCzxJII=CYfjxrS#k zdB(|kT^J~MwK>5>$puG%MCQbBAxq~`U2FW76tz^<(!}~Rv53exVuuVlH4%cPSF+MLt-{ZF!V^uBsh);7HC#Tp&dumttyDdf9bnBiv))mF})U? zi73YYjrDaeG^3Won0?HGKYU|A;S`vc6J8M$E>?Gt<}AlCfSP2E)tjj11l%MGmw~^=!yO=jsODxaMODqLw6S$?Wr*P|9A`qvqw! z6gobSRFQPQ9)uWa=$9BXf`cE*63q3uPU5awgVE<7;Rln{rN)VMeZ&-*{_Jz&sfeD8 z5QWFv!9^eTR{7aNg-a6RceEiY!c1e2k2ZXwf4+hA zZ;O!chxhZdy_qvY{fQm9I7DCYcd^h`Y6NJ_(5YBI-Th#!y?e{?3P^6mV`@R6&V*^2 zC&lT<+HvP1^h~45+;)!qeKDxHgHtc0ppJsBR?{KmpV3xirOBVfC|q;OQ~pTN*@}!( z#bhVkh2cL(>V3=N)SWf&zhxc)Q21Q)zUgwg{A+(?+LtJ{D*j$&kJ(YAJx+}r%B9|l zVChL5YXb4^Ma51kMt|go;tN|`@T9bF?5`XEUc`wMJ!DS^8v>Z4C8<)w{*_X+AqW3U zc28}BTws)fym-`a@VP4`L>%?6C{QQF%3(uuf?V76x4p`*Jl1}sPvz*8o|levQvh!SrOT<1J^1sg;o}JH7wMJHHt*g0`+MMyZ~q$#VpaBcwtLaTpgW zKhTwWzywxvnS(kd7?duo1IjM5a|A7a>7uMqo7sTW`g|8xiW(BHgB)SI>~bH zVzJRD!a)k;8~ij~2{|KYs}?*KVFZqKlBsjiSQtcDvmVQeM6Fwy5#%8@3V4EvtB6#m z`C}Mz{|2S2tPoPdR4hRQxiRQ-Jzm?Lb7K`gaU!AJ3l@$#)Y!S$lMs27E}z*&^&Pa( zXe&XShZMPPxp&l1QLP+yS0o-aG))S&1~GgijSMboR)17dvmu12!w^~QhKD_PR#?&F zl8)F?Uo2i*Bp~QkoyYc3$rh^}VNQk?f5ov;3c2^INb0g@6 zKdg6Wzu%tFyw3@m;Oc_Pi?YFDhKm%ziBx$K5z9tSkLvvt<9+MQ4->jiKa6bxpQVoT zAlY|rG&OQPM={H{6(s^rFW+Q}1YqW<;==H+iQr;7A(RmR@iB=N)r$R)6B{am% zevdx_zejCP$zUjBAH(R*( za$Shy{OH5VhIW6iXF{zt`dVKq`n;d(#<7w<$qF}RijCJLgUdkZm%lhb5)`_Sn!2~MPi81*ERC&Ahv zp`=V(v^#kha;2o6ja7++6RYz{R7_8fhMZ}O6E!N&q-pFjbs_pL)1}W=rqKVgAF^V# zIZ;1t$y6wXnC5H9@DS2RVmPYEdcWwEr-X;vr{d(4?Tj}R6p{1tRGrln@iI0b>2l-B z70DsY*ARctJinoDj3PCTuq`BI&7<)`Y$_{@A`FUK-;$Z()s1Oj^_)z}HA+B*EvFKP zgA<{g5`LARs}jxlsOQ3tAy+=u6BMs*P^EN_*r|;bJ(`UdLJ>bI))YRKoBA0haCIS| zNsuudFRNR>URZ>r%#T8;$fSc>S`uLx$AgUEg_i{sF-?oZ5_?wRVq9$5NbxvQ59ySL zEX&t7GUSSC4OHCo8$#7@ZOKm}L=!);iRY@t=icuXTB?2LSAVC@=qhPM=2&x;Z@6e>E23~X0p~WFM3()3m&a)({+iK`UE_?7D!Y+yOx&RJmMoP%Ttu=pE_Q_cG6O63gw%Hme#IHpf$OL1T9g&tQN zb6D{vC!!1J#d48j&kyP*csWBk#}%3Pcb{MTJvB@0oAb3ZGF*K5W~;{c%&ac(Oypzk zIFVRcw2~+%XTE>VwKy-=rpFGK86zp+5!f``$f~zj<^BFjN@!Y8w-xKsTWiBKkaWv-nne7CrqAA5+ywGwr z+-R}fzpZneYK&8rxgrwz;-)zM#haC!&X$}baU#@y?;^g?k@6z^y?*2`AKth&Ypj^| z3O|ZYICff;KM8mvt`fHq9pV`%y$OL<9$#!k^D#`B;@o!ZF*3zb%hLk&-t9@B(X!b4 zHc-Mjxf&5A5J>$0qP+RNj-}T(sS@puyC$-<)JYCOITHGr=`tgeGhQs$7G4Xz4#;-i zPP|@L-WcWy75(A(#fpSBIQq^kxvb zLWRai8H*sq5aZ$yS@8r&NsA>q9P+-)6{!OHPIRLqiJN(x#qLbeuOxDMiJi=2%oc7t ziyplldc5_rzF2^mK%RYmo^yXY&HX0AkVPhy`X#rqBXlH0UG8abVG$G7j<~%H$ZN8u zOYJym2v5PD)nJbEuLZZPv(G!WC9#Nm`_|&kM_4i!5K^WR209@`a>JkC{Yu62@W_Q^QkFsf zphOh&G{+i|I3TB`zt!JA)rn2TEF{_Tw=ao~O!Xn@?Msv|%Z2@yTy$VoK?z_*a)YrE zhBQOwQk#$vED0YTx#A_0Ht32M5WP?GApI8(bIB7Y_r~`>x$w%E}*VIkz<^3I@2k`EUb)u-FxR!%{Z`DN4NSvV@u)e z*lwcefkrV?DF)a*;NT3vF)lzk{9cRlFVZQ72-$PYa)|^ z#QWKQ+7i@_HDJ6Z36=XaOu>^?7Rs7pTy&O7&a}~KV9@#!2P-3^tH+^>%4k)whc+oJ zp;ca1`!hDdg}%)+!l$_}Ik!Z{87U<_(ho9ADnP@D9uz7x*PhY1sR5*97&r1{(6}pq>n|rKT<8>K}~wG=Y=@P?^zcF zqx9q-8fDKbNsK=_<%$M{CWy0q5kI+~&lsuMVo8@38tighRO#p@^G9>G9QKA!B)Q_G zyA*CRO!;D8_c+f}(lYmQHzCB$zD$~=jXJ8XmYLypg_7+FFzS^cgw zO`}6HoN#CMLO(kFQw&I_>_f4L{%5X9{3o;WM_fecg%p~S8$Csu3ee&2@?O%znG+>P z>tpKqFj0ru{oJ3pk~Uk?xwfGqMa%IrXdq38q84K>sy2^fQ`Hv=yjL)b<%0|o@>l7-3Sg&^NTW25p%DB2}@4gQof34hP`Lm>u={6DDJ zNSWGP>bA~mJkCWWL*R0yi>gjVOc@YlQ)Fi|2x^QhKcOgKn57GuCVLpUvM;M~Z&E+^ zha`4S8Xx^%c#oF#oU8Rb|Vs;PqjbUZ81`xQzIn&PLOhy+lm#L8z4~) zUy{c^$QDUJoS=r8gYPN*&joW^22)? z&bcX%rT6_Fq~+jX^so9Ct@;{CIo7S?EQazYUL&Cdnce00XKGMm6&#^!Nv<(d1lVBa z$N0QT^PRL}bqzV0?{oTF)=N;L`OS?8Y78-4P?gIi59se54lgNl2y{7(1v;DZhHgXF zU2VlOWe`^8#T@>uOvx4RW;Eg_#TK5B)`TwUKUy zUj(T!)VQ=sqy%A&79{)K*}MY!g)ZsZlCD^kiVehFa7?lagO0!1`Qtc} z!RYugqDAy_F{uhjT|k3^<%tV$sKkXZ3RJKuBZ~X|G}?M-o;PG%o+nRLv{G|UOc9AY!5KO}!V>wi7^GxR6;ey8=? z$7ijUJ~=-9lbK1WBiNjk=w=!&^gb7p5(ve|P8j@Yv7-Rep0HDQIUg;KM>cXdnx7A{ zUO`jNiqf&(2?BaKC!-cEBl@8tq*I zXVM$NEBX<;qw=&Gc=kDB)GSbU<^PCtG5<{Ma^DQ1i?~0^LE!tUjvsdvVQby&QfJP! z-Rggnz?P=5R(hHg?uE*Va|a|JOym+UN@;YsXEZW<;>H|CB9O zbS(#D9G=J#3`m(ZJMfnpCGoByF~#BEk_0R2QisvjY)pf%b}xfkT_BvS^qdMA?R zc(jZ+6Bw1SzYubH7m-|gg@gStTRft{bJ@x4?@-SabHw@Qx}Uop5Pb02=%Fr5T$s;F zl5)H>ya%c5Tn(aCGI(}8zEx9=QAF^`Mj)j2HI76%76uqoWf(!sEyyj#2R{lPikDlH zFe%yXjrL@i+5RcROs)hMpo2xr6pNH9bt8s4Juxyw#zXunHxa@LcxFfZFm8f>Lh0;O zth*`uG;&*xIB){Dip%p~P``Qg&$#z{ewP=JnA=Uh_m!vhigT^$zgn&>f9ATeJk$Kw z`5(_$`Sm>Xl*g1`f1QwjQtK19f70^H)wt#UlD6jmk$Ouu`}Yj>ru>fUxb@3cd~ z{c>i1{CjJ!&#mP?cWQG}eo~%GzEAt{y3Ow&y|hoBXYZ-*6?w(8(zL1bsoU<7Ww+(C zURQsK?wZaze;*j;pRUtN>%AU7*OR>?T>r`IuidBjt95^@*7FiNX%upA`hICh5m_ZO zG$ufhS8p+x4mxUutM&goJt-``&>at354nmB-)!$O{ZPVC{s~D+-u%hTJwmsC6W30q z^fGULan>8}a`*M3h3+np?Z-muq^W`EF7HdU7HF1-QsNfxwU&e+^Qu!Nkf~rA<=RMZswqp)v(C8`U3pT2h0uH<`*ERKY3i>P0Yw zewhPM=7CPtMQQ(p;?_VeknC1Y{3TNk)o2eb|ayIA&Iv$poH<%xa!79 zV+VEOky$MSrpfaPmKMDs6~sNL-LpDqu_La=JU3ds$E)#SqQp%}c%`+nh&_&H=12P_ zpF&S%uf6zr%I!bi@mttt=61!`7)zD7(NaB>7^zA-raT-(6nkfl>In(tQIvPPTtz`_ zT_?OLsf6TwE-!@Gk_hZl6vD?b)0(9V>)xj-%*#3Nn-cH-*Uw*ySZPzq zOFEOCd>6J`_m)u&YOY#LM-FFMd%)Im>E6rrLGU}J1rcjKDaPMAg0x{bw8tYZ*R{rSamLd5Q0v()3?S}1kg`N|6T;;iIa zVh));{3ip+N{mT8Qw0aC`{z-Tv#3!Kp?7TF^gmVXsX6DN3SV?TW=~w$=TXm<&SSr? z^F8TpK5Z)g{PLXYc3!tXljf4>=aU8THmi(6CtNc}b0&5#p6^S1Nxa2TY06z49=OXA zKV7%Z(k7GLv!-Q;S{N*fRy55=Wr`DU?$mQR#dFZ*%8`LfV~ev79QP~|p%lrR7i2d| z)OIRr{;wj_;-#!ElyNe0MaPUbyum`8QlrTbC|BD`!_ZoCON^^*mFnkN=((8U-Dd3yD_8h8)OTZ~EzetGXSFmrCJGJ-t#nhv`63>=P93zB5v zH^oNNarJ&72Fr7k?B@E=objoc1Q+G<##EV+A9%Tf#pF^Y`K|* zOHHJiy&WgJ%3@ld-=C{Z6PgzK5;JDHd`rr`T8^T+_!!;l*64mHQVJu~pO+(sZrJ`B zuD|!9bSgE4|wU)Ox8H)@#XB73%3lUzjgQE<#w7Hy3&b{omq{TCS zAZZumS5KtHs#ee`o7!`h;P_XFh$4d+G8M8zFDXnS7O{0&S@NVFrGi%&-78s>TVPU} zT)v`T!T+3@HhxT(W;4x3_0iOdO5!&bNaJW)V+iEAL6BofSE1C5T7yQ!tK`w7EK(EQ z3O){`dgz1ovlygwe*Vk}(M>Q`!1aGtL;R5$o)|vG`K^Y;B=p_49Z8js``N{fYG(@> ziX966=h&-#5#M$%+`U$|Iv3Z6t^Tcv?!4?$=XT{eq@}+Ek6Dv4X^HII?mWw+#TESs z_u+}|VxFr?%BOV5{DAp@IjU>L)z*`RavmV@^v9 zAuLm)M(fG&a+!7-y~6P`6>sc*TyxhvLzwTUeKq9tT6N%sPe${{%iRen)wJh)SB2=e z72>c91qOi;^jO)c6`j;ZEvAa1ibcH%y7W?{he*~AU!2?LLy(=%PuXU%l zywzJbdjDyD#gVG5b~<{pMz!XznP6M^L@>3PdZJfTc3W!?d1$wy*_LN;#8-)RYnmta zY<9O2vMMm~=#QzFY|j>7Yh;+>y~yyClya7OsWgP@a<-hz%O_HomtBnl9d9J#t8v`$ z!v{Ae=QSZu*%4Gedstz@1bN0MVnX(*20w>Sb0T}|1dgljSfMdIMjIa=G_B_IxWN{7 zw3VQr3@H^-f~k8*txA+B<%WXK9gOF?$bq@`#Y@z=VM7QY+NyI7J2vZpj# zOihOPb~aUmv9IUXBc3JioZ!f@;UR>YPgU@_XH_OMpU!ZyTGE~)dfvN%ujoUQ7pEQ# zcE);cI&=HX%ZbE@rJxF^IanPX{V@@nmSa+i`By~UZ`RpHSqNWqI&Gf2`(9nuZb}OnYnN4o@jomPH^MDw|B(h_^IS2r2UdYD`*k7f3}9TAZVZtQT@aW>p$eFNG+H zS`oJ>A$w#8l!904*pU5ANGII?i6p+Vz19WC5F>f6=aN?Ir{=oW z4$9I-dLj-^O&}@~7~aNiB({@IJq^Sd9FcdtpNdOMtkVdh%9lvvaxx(1%n%^_e)$-= z>6-V1&4sxCqr5!N7o?*n7CSrYQ^erdygTcd4*_{o&|bXqYnRQ79e4AJNufMzfX)wy ze<`5!DEJ>ygTds?Z=ULLt644wd>bMMM)fDLv()CzD`yv&-iLE08_sjF%wI#j9GR7K zl6a3ydT!F?Zgt6~xw>;MrO9JCGIC_N-4#3#h1T{YJ`Z6)=qA1INLBeUo4m-)Fz0`d zG}i7hzQd7R9p_B*qgmER8(n0O&L0vJqQmCNI$j5Z| zg6*LcLYziX$RwJ@!2DlaB@{?pw23t3B82%*)~QmIkeDsSgxJf9 z{`>!GIYpi*Aj4zpz9l4?ArfbUYtPrI72=Dm`+XghYeO|<9mxITFz`7$$F7HydF|}Z z8zufM>pB*U56tIm!r>Z*m7kH8d4{N0$;)u2>Pux7iT$kS1-bni<}gZhzFc8066w6= z<5nmP?NO?yU}M#H6RyVtj2F9v<8Q|#@--q4ld^FAA$*t0ZhX0#Y=dOjZXBugOB)c< z%Ox{^|B*n!S7K8_V@Q-3EFbwoIi@2>uPBZ%I!K5k;w}VF8uJG{K-Cav|i^f zkJ}q5$9<;9JM}Y}6Ef_JEtw5l+8^!(D;}TUt>>zLD`e#DiZ?x8%!IgJPK=f8V?_6Y z#YZaS?vfGGDb5hcJohOnIu<7e$&>%JR~BL#<}~+og!W$jA2Dj(?k%hHAKnMZY!Ub`lfgJhh@krFmooNSRX)`AONQR-~5LhA$&HK5VW(I#hiKJmN% zh3x5}ik)*pRTx0qJkMx!a*9nvz*2Gia=w&QBQ0J#g-mz5Pvnde&4<98k0Su*tXNBv z?&SKBTo23lFEu_{h~Z^l%^gb{7V|8JL=JPQ@q?=KIa{T;sC-?QgWZacIf$o+F~!F$ zmoGhBe3KZNTB%wPd&-pTtCe9!a;1bP#mzOG3T@>{q>>^l$INzj5Kse$=JL(>6YFdf3Dt^>SxH}^vtP~ z!`BbV;byKeB7EFpFGOxdG%@8{o5*t&;fj_bC`O0*`qw4J%97PfX{kbVSkz&U}2cJWLuUgklN`*1Mk@qO^2$NIJn|+fcbI7HRRMyL9Pi!ik zWSCB0s|q!WxQ>EP9GAU`5;RvNN@i3-2rgy}q0TT;yKgUk&S|KOeCUJA(TYzD@_UG2 zeko48=Fmu+AB9C8yGXV@*U*QoWi$L*?8h73BfeebYs1HKT6gW7&JEg-VGnry9<5L8 z!Bj3v2J1Xg5_y(pd&I5oqxI_gySOvwlLn4_Cj8nw zJ!hdAqeA#Lx;ZICu{&NBifX)*t36V;*5L^iIoV3ZEHj&KS#sPUkSO&X@=8r^uKcXO zw_OoxLOvRrmR{jpOb%uSRzp;HD)k}+4DpsEm6EFipI6TP?J{%Hu^U%{v+k6SJ@THHZ%6D0&pUMPmDQ3}-%i|+!;#Es>QniQDoPG~Bx z6(xbcqF1-4dXX%c;j?mOgpuq*ZI`i@Tc(zz(S|5spw?uOH{myk5z7=AhmdC2TGmxd z5*D=}yUGU=j$B#Py2z0p|1Iv5zU<~p?s}-QG*6VFQ4V}R3Ru~HuVp9%SNmplx#2U96 ziIDPAx+uhqD7cWsoT=Fuf{1#NYnZsVY#kLl)x1ScHO(&#&h5DiR~=%y0I#zE-dH7 z$RO=hv*ip{!iBTUsW>EAvrl&D-m+JU?*ov<)SeGHsY^?b;*w(;$iMqt1(LwX`qB`x)6M-rgow|IAJJsxlT9E=1+^cA)g_Q z48AcWX;J=`#^Jwm*JmPsQYQ-g36axVk$RY%;!^7tH~A(%PjZ`U1>07I1;rrILRcW?DY;5cQsn>NnY248xC{m02Z83Wp^ncqaA9WHepfNS0{D znnSrU{XGgA5SAN=IalkJ_L<|6NjDj(+widG(PsL%_%w1q)4_@r#)Lil6;eF@6En>T zl_>5!#YYkEgj!IU$N2!QKf<&UJzb zsWquPVak!1(Oh{$PVC;xMX{lW$gx9}tL&=Cy>j+Th~=dsl46GDpsv}BF;e}v z&5dG{;zY(7jU zD{;=Ls*|3{+MNHr3oOF*(I`A5V6lv!j?5|lsdRIzt&P_ZP8wsLNdc}*gVer{(ITHa z;;>PUgfdUXTAqn#L?ajK#1i1I_QJS*(cDxMpn!dP#Rx65<497Z7Iv$LBd zt;WO34qDnKM-iC|o1g8)cqld~^&aEQ#rhn*%OB|cKkKiUEMK95g-Q}Dt`yRHO(2og z=R1x`29e=HB_a*|P;%164v!D$*@^mMXKtrlinC1JX5vWKBx}h3a4m_8MqVr+g}uc_ z$v;FV{4Q7Tzg6hJ>|yQNSM2&-aD{k65clT~1GF7j%+7paNOq*kn(2#=6D3s4-bhCh z80h)+ED$8klv4%yp)*w;zU9%Za>ntaF-Kv;L=0rH3?iWq29RQ9v{5H+Yq91jEzH}- zvn0%w3iP#dyD~!ZNp?A-D^VyRH#?-Un;_#c(B1x4G_jLK^!h04)g-UiT!Mt$kxZLY)@ynf<}+*7N|o30uLsX%-;Twohl8A))TE%MXiIW6iN^%hKZUJ z*^{z$`>V3P+c5+rd6p+Ed_(!Z_(HaZuMK`Kg2VAUpp8yUl4696=C`&uoXW7Bwl<6F zp{1^E!90yFKk#`GG7?;7t?Y9|3|w9aK}I~G;d%5YH4d&#vE8}gzY-gawW=_eQBS?d zsdGbrLvXQu6&q4m6Bau|B&x#07A#U+w+!M~C^}D%e&R;ujFjR#vkCILNjs^k2zOsuij9YBnWi ze?*kYLWPUhE2GY)cgh#)_%XuPFk#=hp#*qD=nV9m`E6hu17CyI z!_V!cCU{<@YSRXaT?VH+!TQNM@m=GS8pr!Oh-f6-pv{ILLUtl&tQDnFrTP}oyvU>> ziPcJdu`!C28An=;$(<~mxiWYhDtH&225{SPGu0*!QGuZNo)WrEOy3i!joTNfqPr+a zkI~ti$l0ROH_@30Imn}Yo{7o}Oe{Zmq>4zNZ`T##Ag|FUgB(iU*Q5KJxpOrwt(Y)= zi41*O1VfV6E^Lvc;=*x`>UyME&d*1qFU^-}9~M@eG>vgqB%>|{Z-bSZFCOkmOFSVV zDk@OuACAnD8b+9HSVNN~u^Bm`B3`@dIpaBDXUWctV?_@Mb%XiQqNY%&g!>q;CXanN zZoO|gAjXe_8soO0q|cI5G$mb}sJY3PrdvaSR%(a(6B| z*}Ip`O+jIa+C_vnjHJR2jkLtA#gm9Cmd<4CTwDlHgLCA8X2?sATPf~GcIcRxv7hH9 za3PDGH9B#QgQR}&M;crb_;^;ddhxB2TcDw`QRt()M$P1!FvU+l8s4OTLKCax*rkEE z{JgT{6s!m#K}i`lgrs#iZ$wy}t;Cpu!%>JQ0b^vw=H85!m5K3U!W%*cBrGtdPkl?* zb;R=eB2|}EXd3%6WB*)m0NQo`+5Sk%4twX>z9RIC>esGLlW zCR%w?r|#?_bgl86sIef&OUyln=Lqxdwf~Leg zME ziLr>;ubJWtlg4eHlzn!ESsbRO-$WnmP{H*UbCEqA+t($&YbRuWSFN4SMY=R*syN~j zC0~ghjAdRBks$(O738h>VHeWa zgCz=9&EgG>4BKWhPW#B_JreB))l3)|{h9Hr2AaH7wnzV@*s%gqX~iA6s4OW?eKFU_ zFlgv9TQzt37(pgdwaA0oLQq~Aszd~P6-`dsb5fkgF?WTWO{+-Drp zaSVzj&-rQ~1BM9A6lS(Gb+-@!ijJ_et6!Um2#3pGcSfrf1LfTtKGnm!3sk%lCCB7YR>=9lLg z=#bPjf|yd&b25Xg5(FC$c4fleC5w zMx5-qw1Qok|E)o4UqAEf>kvv_KPZO2Cg{6OCeV4kzbIT|(KDM7Vp8~KhD{R?y$`nX zIlmR3(abw$4hPCqMXhx3AIg(RAVq&czYD#N{JK3lcpKEQI*Ea{_-7@RrN< zYohUY`xH`L{Sp-Y_xaY31mQ5kH!k%%+0oG)iD3#$_;xA!MJe#Hk|~UR)ynjL((_8G zZ*QTGI@x<@kl03IJJ`>bGh)I3>77pJ1@a9 zL-M4=;y6Ph;Fj2-A!n}0VMt1gVXQ14}a4pjeaeO$q^#uJ*G6RRafBut!3FaC~h z4Q6EvWX~`3M+$9AA-W5lf)GloPUK>qNRoXH!zFxS=1_}RVhSm~RM`TAe_}Z}svA3D zM?R;KzKLw}^&HqRyDo)4OFkuB%sP2Bsfn>8yOZ>HV-_q(o{KS3>m3{asXt`NOMHv8 z9*YvyaZ?ah#1HCcTw+L2BtycBlmAq3`?UKpY4W2KE;%s?b}al1%+ay>X=wfAW3pzl zWkQrES(WKl9lz$T#KsVTIR45LW2i&jc&GF)L=@0H%XlpCURwX?X&#(NoyPwRQ zvC1U)T}OY2@OAFqGRAzSOpI5B4CvNuE%D$2w4ui_H91)A8rnq;L)O)pjAbuqCijC}bvZ z*G6XU(W0j=n@y=cdRZLnGuL-q_clRgrsCa6M^pslM%hNcW4mCCoyb`&@oa<}v&0@f zUfVW-5Q%G|BMA?$z-R40zqrzpjanE<9UTg0?5+ zXCf1&NpYb?b-Gv)wQC2vT4YXy#BMPdlgwTmP^N1|t`zCNmja#m&dnf^z^)Qd}M-KO10C|hwR*oO8}{B1Lry*a@--KnY5ELXZx`z0o- za<_6OoZ#8FX{yr044lCZg=Q1mP4>nc?wnVB2r)4;JZtQk*0_$XT^8i2`bFHzjG|PJ zBY(-&nyxhuU%VI&t9i+_GXhNnb4f2AL~o^C9j>)-&FdBM4!21 zQ6N@X=iAx7=@uuag(}5ZnOkOD`n|1=C{OakA#&7Y;~cFX%ca^k(V^J; zrNsBirh8G8)N@=Vy z&FEa3W{qxSHRr=5825u^NsBhE3`w*pe|CcgsvdKkj#w*Ot~2dvx}Wx7`l7*xi)Hyc z@TpPoEWO;To5YjPvP~;De9-Q{TREJIohA3knQM|6CRy@7uFZX3NQbdYU zTNpl4y=wf_j8^2ZqNR9R?2mUTVuHsDdGhB+dgqZ{YFeZVWG@4A%2peahF91ZD>EKfiHOpIc|$`Oc)q?ddDeCH0mlkI~WAs+`UMx`1ZFbH~kH$*5krKbFljia& zm*dVPg|Bi%4M7Hj|6S6hc1?=Kt^9VbZJ7=Dj9%&8=}2 zVZQT8lQ3WO(T^u1_FRzr(itmaKUN!k6d2l0tT73ER-gQ%a(`<{s*Rbx@_n@Hv$5eD z(#)air>k_85$Q@L`^_qZf11T7>n1FF^u7A&rc9+-$$#0r2>!Vj^(Bytc0BZgo{Uu8 z1-syLbCOJtYoDzB26ap^;vOJf6+=x zhg7icVd8Z@dc%lWE$Hlfkwf*9CAFHSujM4cjcr zMu7}K z&;0%3J`wBYt?5|FsHoCpX~E^oR+Hb^DLNdj=K%^5|K~lOgXf*i$ zUf4*k;fBpNL~!QY712KncVnovuQQ^4^E8DYMJ&`KiGM{_g%WPpD+H_&-iAxSnNipj6Y{@?7w5CYpaW~#N;o)^uNn>s(|7D zhnt<%`VY{vt-R{s5X6j+E+x6$QbqisiUtYe1WmYzoFlF}u|A7&b-jrRTR|n6atqoi zK`8{qK{#u?8~+N^U#j=L*rZ(>yADrnB~|_u>Iae%7)2qNN0_!C?s6>sfAXJ>J?1e% zuH8QjVHou6dl!h_uzftq7MOzQRKflu2=fvP1BED-p3+QUW5aDq*uV7K=XBjz$h~G3 zt%AB;&19}PvKq9Ir#9Jm7->SYE9Dt&qnE)Jl2(M`+HtLv!<_TOOM>5+0^a zV&#sVg?mmUg`y5e=xYBA)7|Y;7kwQSLKM>?d3xI?okuW|O!0BE!V@%yPIg)Np6c~E z(?atilX)9()VDq_#t6MSP>{xpJwK~XDq>N@X*CX9v=KLL803`az~q$54LYb7k3B)1 z@-O4Jk^4dUuYkZ6$YdfzhZH3@%7ysDn`rCLDaTf_aYiX)3?$wX3{ZL=Fu9>w%yde1 zL}Jyf=2)7Npn{uhKXnOYjSa{3+0Y1ENqgkqJg?67Kg z%NMBGTPGG`IGaL_In(n^rK;@0 z(P=UU3kP$%m6S(FIDXQ7J@11VgF)cEuL~NtF(;wSlv;UmLHs>#Wi5kLuNcDdw@0Tn zF)5)EEG8Yqu(B4_G?^+x%Oy+I{U22ztgVvtw2Wl2gf7;f37kXzO&rk6Wy!L9>Cxr~ zPK*oLMLz}l@q0J{2on-ON?T32RrUXDcAmPxVGhp ziu`&y@xTSVI~{qBBb<2x>lsVITAfK8WMY|Yz|&UurWlnm#m>vhQY2+Z9nPgBs?_xV z?8;H~mCP42wtAX{CJ_EWhQaJhg`r%f|SzIeS9{k+DIL#(B@x?V_A5O$;ta_EefSk6x=otxl=C zO}WUmdhDIq)2eYrpdmY6byA~_OqU}`tjg_w2Qp6OcJt^N>C=ulJn}~mVN?(LSlXce zvO5>YGNVeS8xqdsqCYb(^E@px zsJBjC6#GGHT)~q0Csw4^^?zk3&P=eRn6pE{{k0lI^puuWbEU`io^OH+)D$dQEyiG8 zWy2KExq?J-$)Uw-k%8zef2Iw2Rn>)o%5e@=UxXCItYPOaIV>o{$gPw6^iB~HVuy4e zl3aMhp1ox2ki9iSY5LVV=ler>;~r>wp@-WJ&P(Y%jZYD#!J}_!w0h8G!geAo#0_04lHjV*M3 z?oEndb1FeqRQ}i+wnow&Tx7XZvke8Pyli$ZT_8rB#jpK5X_qBvOF3d5y|1r7&PXXssa>RAl7RFz8GRUSL>~Dmpf^;SNfriA@6tT0P?|hTu z#R`qZ5o{qrYZD|*21Y#+q{MSXl-A@<4n`y+zwU$A?263Efp_{eQjwvJ9dd%scQxuP z8y_MQLC7dF5h5X*W6zSrT&XBOxUoTMqJuzE*juoN;}t7WDxA-U)x_=1+F#1?Ysg|! z;yCqg7=aG?$w*69VmkIULFgdEh@_3T4t*6WK;lfUSVtJxgoH%Bi48t`nFYz_hb@7O zlOVav!Tl2!TN(+9K*b9srGg&~1EBY#Q15z{iZ~YMO|HiSYb-eaV^()@wuj^|$+?Qx zt!Bn4PL}N=4AK@<`{uJWo^GXju`H$_h8`-6a{OtXa@2ZOJw&8KM^`22vYEN;$y&%` zSs0kKlnmqEbkL-<`N=q}&+WOctNnO=V+KsegMxl{*QngF7$akKV1u`h2~_KX9^V0c zB7MzV1QH^}|nd(bv)X-(76VZ$@{i zb1_6YmAYIP;?li0a>7MWac(6ZgpcKgx|F$ts*lF7WL!jWwUSJke-$aC)Z&%N4RX&@ znd$09uW8ECw-h122~3Slk@}R1Oo>37zBii6Y$uYh{@yX8wqXR95O|_K>mzbuhfX8^ z2B`1jH?DAVlNAurl5nR>MiUY$UB?!u^?4EyduYOl#m5k8@#MKBn^2RPS42V6%;MM< zd1@IP*5(+dUiLMty;6osjXIAH182BlE3C+g<0S|)K}(KU@-AMG_8CgB+(Qhlei*H< zK2s;`=hV;58o_MLxv2L0#&f#fk9)v|Opv0bi`jal#MDEIRG73XKCVbprL2F5V~C|h zce>NodMip!s$^6UdpO5VNU1qEtE{_{GGCH}xJpM>ZZjI482xQ}tex&9RfjT1$;fD8 zR6)uSz@Ak?mF=om!;;5l3A$qZJ7mdj75HMM6Ni%UBlK#w{PTF`h4xAc8>>kUb*VtS zR#e5$>W8R0p=wrW`*Kfm^khP{j?ScLQbfg=zMRSRIed>*EFhW|NQKPkUqf7pjl|Hh z32tP`G~A3*M2}Q5W@4%jXF0bv6n+O9^(H?<&xv4CoH7?O{31D0twR&z?naD?WBKXy zkI8)ZQ#7Rsl402g>{F1Ac^!DT$3vLpUq_5Xibd{qoaD+W0b^R>N@CM5!wPNiTb|2Y z$XHUs9Gfa3BasagAi$=ieH{|OvC@o4L6oS}E}I*{hydH&txnie8tv)VPLp*l7;!kc z0`WJa(B1S)h;m2orIzL18zqi+Wjxj;N;2zuw&gaXWO;XckP|XzirG1m3Usld(FS}? zxY(HHMXO#hnhjIBJKlngrrB;;NLtB8{4CjppFHoPSc{w8Eqjz^vvLKY*Jwg2gQ7F(7X6R)m+pUaw|x_Bof8JNd9*=AB+4}MA@ zvXI8n)*P{4sWnTJWpZ8?z>6Bh>oF)YrAdoMG-godx|VTSw2SCu!HeZ6BcUY|C)m?u z$pVgGp(1er(%tx3okY>n2;-bFg55DUD|-DZ4|&eMc6Y{*j+rH$v#s}*SdJ}R+=(!wk3?ZPF0@M?&(z{xjG!h+72ZFY z*(n(5DIA?S)N@JMh!LLy5@HOM9xH>n61LCU_l;i6TwZjVIiDC!X=sY8LVoVfOjk&4b@V3715b8o#A|13!~VC)1u zP7^1Rb~!yABC37f^m^>7p5J*ER@7EC4K_~4p+Wkqj{*H${tH4(2f0=U6*bhXvIiA`RHUR zEIQiCB5;T}PC7Y1uK6deLEP)Jzwx2M5ohE_Hp(}+WBX7O?Ckl+_*S#x(1)Fq9z?wq zMk(6PaIzn~aY^U*{r1!ag#Ma{K;-u2eC}^(+{Ej;^iAkv+ul0vloQd^j74WU$ytlZ z!72W>zlvhtb}5YFLl}ySc;DG68@&{_7qXWnHawu~k35(B)bU?uvBo|n`L^~qMLOz( zMr}oT`nc37CpJQrB&!M7{^(sZoENW?wIooU*;0FkqJKjysfRj31QRM+MhTYq zJIE}0CR54Wx!9akmw7Qn771Ed5T#hja&nl2(Z?Fruhj>}X~Woj=LInMVcvBFz=dv9 zu>}Sric^A|FW82LJQL4a8kh2>B%<`AjS`-G!OK|eY9&aSg2ED6VKR&@y70b_E@tK6 z))YQS)Rx5u@YPxeZYwSvR+}*LcZ7masB<(Yk#fZR8PG$YCAJST&p&<-=tf6FqM1D} zGUQs)XRXrNQ5NhubKf@->DyM8oNu{`d717t$X!sM+uV(g^nngT18=e&fm~rDrkLbs zC+<%J@XRG&MvPj+w-hM@l#zF=dMRpHu`Uvk*w)24R-s90S+gOqHZZQ<4P+`Qx4#R0U{fWXd#;QH$b=O22*R|87=vE1@=c%5p^AX#@@REFVRNg1HKy z-_dy;82eIb3sg2m&-ZT<&bD7 z55z!{_0(EjmL^^ppVSyGNb^iF1fK_pu&jaYeHi-=t22S2D6r=h#pyv}#-%t03R zP$*9FK1y8wrHOy04oT}r-Jjm3(&M5yf;j0+Pmh%x(4qy#Ad!{~77$X0hgoycNgJT1 zPw>LhJ)qfr+i9n`^ra)Ek_|*Z6aOz#{W6PEq9-a?(i)5=u~+ zS7M)SXfJ|HeDyI(se-%!cANkqz#U$(YEO+ZZqHap}dx*A&0@NdE9spZ0Vh zL&PvN&veP?(2}RAiZ>G~Nfio}?Y1lYNvaW_(UHEibXSJPZ@js`VntFQ5cr_2DH>iT zQzS~B{d}=G7n~a{VcQ&2T7%(nsdEWyi$ok+*@?#~Bb=4GQ;9u^=ERJRj)p~Gz(orX zDnn{JRzex7gp3IuGMfZmmfVbG7gsPYh`$rc-j7&77y+#4Me^OfL~=ebm3 zKFBOrnirV2nM4?*gkB@jrpZx7=7y>#cK`gCE5*2(tA(SU=sZl-+2e#?bvl>i=XE(W zQLso~;*S`k2%XYe9hI>nJv|Ir3cHmkAzD?f%TP-SSVH8AmK^^yxhEpn!!iw-`oww z`4Z=42q;}rf*Wo+bt|Smp&uV!MdxMCk^bfqYo~mUzPs+uBL-?Fn3W9vcljlWQQqRs z6MFm%*|JZ1UU1&9x(SqSGgJE+&P-vA3@mBT!|clKG3ceHzu{?AkB|GLPyEwdrv(4rG`VCZ$xWq}W>u4Cl5Pbg1}!B1oo zBq@GcMXguEk;9JLE9h>2_B@WNW{@{kEN*0wWh7AM$0#6!@K$Ey*-So!V6K@Zj2ZBM zMllpxFq7+}-S;{ih<~hH$$1HN8c<27goKH&L?Or?M|6Yyy>RO5xk8oseQw7+im5B{m3pNB(LhM5deil+! zJUlL3)s9SXUx_KK8e#|GDq%Upxs2S=tIYKdQc8K8xuhb_PNyVi?qw~W5>*$U8dESO z3)6=L-}qdSV#5_~FIce;5#wO{s7``a4zrCv7+Mg-Hg@ij*O=(a~=P0$Mu!JKO@nB zBj2Vvf#G@Nw#LSUnFJ=>JrI#a4( zV&ugstBt`w!K^w7#tIiXoSezEIy`p#;~eLst4vmQ{|GeZE7@<43<+!6~ z(vj$p#feTB#p;4aPcsIuf&(SlA_ZAoa*5d?Q-mPC*{WJYmN!wNr$e(gek7qBx9Itf zj4F&fIxI#MZbQR1$rjV@IgrGqwxG9abG>0@bUOy z=kB>C|IsF<~5&Zr>gCKy8^x|R?^d^w?Iv9jBv@&AHx`YbrbjSP8NH)G_<=*c4C1oXwt zj>Mcn#v~#bLnVnBC}#r|Dt27XV>BToirLjvo6eLlCtit6LciNfmpyzrUL*0$HPI(> z+;hyjO^q``pNeRw!v4;va%86$_C38uX|t(Yt`m`}>3$IRS`mNeBNLLKVChawscp=Z zxLq4s{*>ggYOT)JmF2NNcP?66yOati7d@#7Q?$&A5vR7ZB0?o`Y1l?RA=c?B5q4p( zs}(g`tCi=`1~5pJDY%8Ow6v5`OklAiM2Iwkm>!fKQVSVlnvO)MRKVZ*!HHR5LfA|p zA@VjKmNYQ;tCkzMEkP(B;{P8)N~u)K@<8d?$v#ntH%W;CifxUhbyUejS#mJwRg9aD-|#4UfJG{S2AO1{uCBDQoTEnrUb32bFi-^=zKzUDp#}cagbxXe+@(mhR4HvRN=bW?|w z3=@Vq5c)j-VaXUd(TNUGd0jN+RyHcs`u2VkGc&|Hu!Ds~E$d^cA;+4hqAwy3hf@hF zdM;d{1qu*gj=pb`T*&6UUgx9oW=E8c&%>Q1sC0df!7&T@=)3&>rL)o4_OC%+D?&y$ zh534)XE4OBOxB-p+)E|!Sw>Rxp~*h}`_B@#Dk$QiEVW0cpZX{rO-+a)^f5~HE|G-c z9$=ajq1>Eu20Co)!5mCzQr-`16Bbh$pET@A;~)6eJ6p_kr>uU99&Fx{*yz@?Aq^om zRZ53axb-cisnx|OP6?seaZyPPGIE4N!zD|EjEGW&K}%8wAaceA9uToA5F($^nv)RH z6{#|Ui^8A6*pZ^u5L5akLj{Q6e2!WYWgNi5xQ9j!+oE%(Mi{8{LJf{7%#R>@Rp6T$ zsN)%l4=86UV+5-)bi~irO_X~|xIGAK1!y}+v1j2sBtc_j$rB<)SpUa9$eCF$7+jb& znodQy!yTXp#PC zQ?iyjEPvrK%1r2{vm?$sKP@4rBVL5sib;weP(4UHCmO^`(FA5(bz?LpHHr#L&qvOP z_$l*eBpVb#kNp==$<9CFZYo%qzw@xe9|Sxyejhey&v?c|Dp_IuD!9+tb`;X(1L8_{y(Jq5a{TUS0qqzxzyW)C34~% zXq!{SEQL#m2!H0!>EuX4&{(;PIvDp--?0Vzw-ze3<;RsFeCp$vKFgV6 z*Wrib(LPUhg8mg-kbh;k;Ny#OA^l>{Nogw@cKW2{HjhI?_46+_r`iYU5gJL-_#-%mMK{moc*kJfMf(@az5KPzbbn^!uP zIkZ`%`C`_oZy(&E5j^$(m59WeuKHfTwEJnzK6kgmOXX+IYN?x|QnpV0S+F6ZWZ5Zp zXIvwxU$T(hP1pS z{0mV9^26|yiSVjb$mt6~TltH4p9|QwS%f{H{#1(ym>$1Jyx;sr4dxRb>OMbTGafFe zgB&E}v_zwroFB;Sd+2MSWvA)wp1o^)=IMxRll?V|QvIRKt3G-$k_j@*vy)Dgn=Zth zj7rdQdR(9Bbz-HKt4xkAr^a(?)BP{aLQiqU zr5sk?LR4g10wp&TuBd8?e+rv-DgUDKEBzbeQ%I6kaM-Qh1~)BQcZHm+lU0srisMaw z-CLB@s?9>;Ef4#AQX%_X##3e|PFGoWDWmd^F{xyj%7dS&B4Xct-Z(9mtB$&#Y;|7Ox8)nOJZT*NJ*9_QL1weCoa2> zuY|ar3lcL|#zpF1+tZ4wPpLw?LD&$$&Z1?vVX7wNxNlGR%R3wlKHo@h1Sp>KnR!}I z3w81~R)x*%&ILkU40;jFn#hJ@RuH z8ip)cL?yP6s@Y{8POOvZszXu~(-@-9vZfm9{mMxx)LZ+v8G&dt$~0ou;psm#RPRap*u2p zy>w#&T6oPd`Yk!d4p4Sa78=ru_SNHkDcQY8xbl2&myzU09C-1Fqb#~Sq3_haON;NK zTOF2TOK0mQrL1$8sU`jtEv$UHnyO&Gu2n=52EHGDzujuIw>VM)N6D9B3HalWU&OZ} zpMJ$8iSGQ_{Rx6)G~+0zBY1j?Cm6h<7l-y>w;6O&oyK9>eZDC?_5@NjJ#8H8Jf-^Pu1v5zHIml%>N76mQZh`yik@1 zG*V^sIhI&bB#P!tTem-GQ#bz(hB1K}9XYKULghI4j9#w_d+p?jEO#}GpLc>tR}pJL zjv+OMaSI4cS1#w5JANK~R*zxw(-N^5oo@fzFAp+K8Rr75A1OK!G5^P|vM8pAY(8eJ{zHIW@(@*tPrrDLo}Z)w3} zE;odiJ$3r!j>I;C6SrKGsk)q`UwYQdwI)){O%#yYIa6ps$tEYVb}`9Y66bd@g|UC# zOj=WP<$q^9MRSS#zgHua=)3XS53Vf~NEug$Gx$YG>*t!`zHHu;{v7{S>b5A_#~jw_ zxyJe{#cC~>eZz4$C5zaRYe>QOSu?XA3?4CvQspU_=WDS=a|5?G%!>6cwp171iAnPhj zzZ%0jKlCxX-Lgota(jt&#B`5_u-sYcX&&r<^vcmHCd)UoXZhrLL$9myIOW6~R8%J7 zSU<94NyY8EohHPlF3(ZK;HUg6$df&pC{M(xE~%jk>SbV-ODkn`l@;ugR#5TQxDkAUCNtJljY#mrM zDxX!`k+fxOKRMq+BwEP-jm23Lu=g?_z`_#Whq1Ia809M=GdmO}N~Nu=Ma3hE+A6e& zg~GDj@xN3dBJ{B~C77A^%@DXGgE1OW*&wEB!t#}sEEnbC%fx%P6yb}W$6`fjRN4z7 zy_=}x@S>G8)gOiuB&=0Rtj*`v3>LTgV8xGy7*5Tv40FkICJfewtA-b*FjR!GA_pux zgI`#jI~I;ANysIiFPp(MR5P4$I8(DGV1eLd8~%%+W1C|IrkE{`6;ODoBEpk=M-R1G zk3<}}OuX(moX9SD%wvZlW2>&KqZo;)dc&muwJ&S7+?DSV|8m92%&gNIl3GZm>WHX!dprs~}OU8yVnlg6}!u%^Yzjwf2G z7iJ)uACVUPJ>aQ?m-f7uI~y`5`M+D=Po!``sF)Xx^Z%40eAVgBo!130!IY^fdbMZI z@0Xjk56LE=e8Ush9we8GeaVXLY}uR?A6%#DY*sx=(y@D){IkJpnGx%^i(tuPIRZVP-DIoiVN|X6tDYrcAW-e7Yw&VUCt#DqN!5ov;Cz5rAWJdqgd8K*B|^Ju1Edb9p6ag(2+9oLkNJKB)k&s0~SJuBB@K8p$Dj5oXKPF z6($#Q=jf28s5ez7%HaPG;ZYB=3eKhaqT6Df8eDaM3JXCUim2y!a-si8N$*Dyq?o4Z zbg4MHx_qaRDCq{~qT$R_QqZxMN)&Y`9Abn{co~&-HA10R5UPSE|*SVloO%<8yTRVB^9lI;WKZ-6(Oc;ug9@E z&a2J5hnK%)DqD+eUuU=B@+_rhh%B;L>QMQhOPRwt|;=rHgij5lQ3GFakX`Zip5vimf9 zJJJtQ zP>3*5i`fggZ{wfakTA3|CBK#hGxe;itJjLkWte6pU8QpHQCC)8cDR}hq{JSCoV7*bK!sdm6)GW3s+zJrgu!yof||xVCMB-p_etvLqBX`& zNp1u#MFNlr<0#eN3&~Ue2@XysSlquxvSUS9?+TP2qc>N_s$h|B=0V$XNOa-P@Lo?@ zRzl@aQHLrxmnXcEW9Ca=0=rj@u|? ztq`2f_^aBpbgtsv=91YP$ipeDCMr2M;wf@SMQn@NG!}aZGz?5IM(b4!;ljb->>v2z z?A0x?a!S{fZIMmrZ%{{fqwL9w)9CXQm-R|KYmP*QbujX$rNKN6IS=Z}d6h9Ca9&H9 zK|*R-2w&8?Vm&!Dot(|@PCuDC z*vyD3c?L1xCidp9K3()7H11O~DZc0>qgjucAmqa~Ol<^>id8I}jHaYV%xbV$vk2S$ zE)eMEW{>jDHl$7xa9XCZAqhUlDQk3GajJB$MEk#RO%1vx4pV24Pi6Ke%SZ4|jGgg0 zLiSBeB!kR9WPMjTqz+J?{QCTTm(Zf{soBh#6*Zzh1koSTIcQHqcKt{gX{1nG5dGMa zO=igyagd@3!%OAYMko5oirkGklE!|RZpyV~?!g6m_FRGZw2KdD>qwbl;$)mIk`f}P zgM^aDTftmQpJq;4TywifaRWLTh;AdCON@POc1~F4usH?pX_o21c`+K3}$d4gCd+{*`o&w`^D#3lZsx_Mko7Bl;`Rts>+X7 z=Jr@CL!Qn37w4Y0dr(AO%-BH%V|kb~n5I;PxtPVcUnnh~lDQFyIKsbF;{#2+EW&(gm%(eN9w|fqDQNL>a~)>98S6YE zE^!ns1ddpESL4(Zjx4?L(XFFh==@#pGD5$r{aR+bwsdK&kz;Bq)aPZ`t?BzJNKSd< z605Sv`ncm1?sd*indvSQ7#0MV*u}<_ID$Ljt6T~}0;CEtb9R{+GNljtQup(=*0Dcj z9g#9fxiR~%qJ4=mI_AlHzFQ>6y}Cu1)q2omwaUsXBi?38b>iX^6G$t5 zzo~I;7O?g#bHfO2y+5Z;udQ}G*4!zLD~@0^DqvRk6rC_tAc@;)E)w{&vgY1e#mNgo z^E%v$8YX8)sq<+NCJI)=D@&HEOr4}uZVz#~3&r4*78{K}0SkX`JLY?#fb_b4mi1z4 zS!(21ccu?4P@vA2t8Dcmr3wfsSw0IGC4N6uu3)lRj<9Q3`r?`^OO%ROxcH#tz2$0x zD7PJ9$*`kQi9xalpR2{LMD3x<@#L;m1TtDxu^eT2?jx z<@YB>Q2Rw4F&0jFXL!jOd+Qk|&AbmcDiJ2(*8&QDOpw_Wq@4YkVapmZ#KQs%Yfb+N z=*cK24qR&xIH#6xg3Os>dd&)xVsZpLJ~=lgO!bv3B@mR#;pRCYQAQ=Z-t6YL7x}T* zq;P*d8?vBe;y)uYjNKDONH*dprwj-o5$}D|2a&MC)C4>*iT5`)^u$V&~Uz zK_3g}C6wx95o?h(vqQxim?c#Lm>!aC&;g{%D*jvR~h4rYwdD>IJ2z%h3zbq8o@ltwKa8 z%}MmCJX@A2>D`P`M=4(LOqqFJgVgn735qr{{_i0wbRslmb-}K=<_SBCM)qFBThit{ zyD->p2<2_X$lJ@%{;YH?aEsN&s=)~TrwtZSqRY*oN_XlfkHj+~JQ^OYAJ&PX{)%d`F$UK#Y4y?lw;Zj>9J3R<+GqAXN~?uR9kBBlzk zky*%3nHZ*WAghWHCcPfBNg7wF_S`AmTfyjc$)a6Ah94v4+1H61Rm2_fNlETtqh(Pg zldIBAJ!QqInu<{; zlAI7~#nmP;q)g|6Qy8%@;2^G^g6H0YIJv?-IDImUz(fg%B|A40_}#e2{Wr+qENRDo z8_5(Z_5Vs37LTDi^-1pCe&{_<>{an>0Z z&BU*c9)w%r^i#vk5>3+A!y7+-NcJGUSeF`#2!+cN>YOqYD3cmRDe>#&)MVsY@#vdy zM$3j1gD1mCle^jJ z6fuONP8;1Md+*a1BZnwZbsRyA3g@=I|1;eUh-Q3bmm{>c{h}|11qA5`*VblCC?g%xzl`f~EXX6+cq46k|EFsx7 zaSNPvo3a+@P@#RarC+~sXl}&WQYHK&pmSx7^X=25A?;_eP zO?|mLlBO?CFr+b!==qn)8=!+;yeErdHC&oC%USUj9(X!;ayZ19U~>+m>~?XF~>bVZ^gz;abtG(5S3t%_}2!h79Mj;Nh{C!z<0^ z2-&0g;mhUfjrV+_$!7bpXL+NfeqAm{dndjYbaUC+csw{VDL9zwR3KW8I+6vVdV!$% z7BHrZ7^I2td~vaLGlC!cNSVnOrXC2N6ecM1Q9tL* z8{TRWp&KeFM3X;8Vfe__jUAF9g)!Q8Dy%bxik71b4MILaRCr07$jDkt2HBVL9@<2-c@qrB@UQzj_{j5bZ< zR)R?c7pXExNa?AXV91;}h9tIgg<+zFnSM#4i&{Pku}4p2tJe|G&2_q=ZFpva8p83$ zG(m10mKKOoYDm=9f)NW#nkqWPikKj(4+>7My*W~}rlMynYZ&6i7}||uq*;j3JW1Jw zDWbTlQ`L$RsD#kMYh!?oh3rU>5bvg3&2g}7NXHWKLa$Zk4B~_pt*c^!aR*Z<+;^!I zRpU0~QgSQy+-`-)EHNF>VT2@w&T5WdgeQd*p!ZIT9h0de{3c19!2H263zPKGfW6RZqe0`kQxw#YKhY(~!X0TP*nL=gYVGTf| zSmjC>;s_jME=LnAEMRfv#10`$3Q9EJh3`%l>|Zk~GOraF&bSOZqWQ7z);uvAlh0ozK zM2d1Vln_$d%<&`aQRq`{d?Sg0Ax9B5s`q0zWN)&ZH%S9DEnwJ#Qff@d?{aPVa|M4{ z{bZ!1#sn>MCT&CcIc{@Or@z0S99aeMO%!XOq_|E$aU;p;&dQ6}GS*$wj%?)dJ8DHx zrKMP#i_&q?m>jIQK5H{_-mlSb4v&xOXFCwfdDv3S?In)y*+a4rT@W9qiWX^N$wY_9iVU>$k zM<>;0>L*pI3_DP6$r?GNP{}syoC=EN(uN9@;_q6ySQKw^Cpi*w&ciRw3b|p+-TsO6 zM$V{MYN3OaJeWpYHe0%7wr!2gu7*|kV>>t8 zg-sm(J{@4GNS+D7l8R;t@hWr|nM+0=f}Ga~P*F3JS*2u{7u3wOSfZ^9%XZbd=cVy2 zogJcWLP+S?p_5u57h;!|5`>7Eqr)>cUp{C3$9(0N*F%=`tOYrD6^g5{dqb* z>jWQH7u~TgOF8_TZ0i*&XQ$y#>PI@)`Oh~P-QHl4B1G!=al?*~dt{!&f;@BN7N-v*ZzI8KRt332j7p2b3PF9GHb}4Im$gp+M9N&btkN|mUd%~kIw(|GkSMBR zjJZZGMphcrLWga9NNXWV4SP7pGU=7bN^;6jkxsOCm>YBIxg@)_c_wZzR}!owRL={q z(B%dU(dt}lmM;b7c9mgx>%7hcAW@G#@?Wjebi%BOB8wcr;+rW1vQVI@6Qs|SAzgDwAX$)Bj|2!3FdyJTLg|B>z`3~68M|fs*9RywIOB*t%S`glhvcbwk~|j1 zWL1SOCm9~A?XBM^BR1k=IbmDd6p2ffrNxwfOi@dV3#RqUl`A4ap#(w+ zwH%L!WNe3>TELZS8K}5HtTA6IdM=6-KyGSsrcZr}e&rPlDVrA(gBNj)4tU&+6rkK^ z0*%A)p*H0S(Ks_Bgrm7$u^kvNOq9#DxKh_2iw;F|Axan*=&cWGO)#R#L@j(2EJq{c zf%8iz77`JTP?7LcDV31Pa+Mw6onV-Q*ESGmeF(_t`Jozd*1a1u4GjH;a1?O%Hcvv; z1%XiRM481HyIeyeIDn2w&yt{Im6KN!F>6j_v?mPmws|fu9GSWh_%`BmF-&ChRUp3} zVNFc?{ut)c%d$?leu%jrvQ?Yde!7uEq%e~+Gds^zgH@TW6MV)}> zt4BTdeEK_G7HGnuIN$F!o@Mnx~-szVK9JAyg_HcqC$x0;qok^c@389*T-S8$A{m zOl1<0Isj`oPO`ixX^f=Q07&t6sn;4D)J$jAwXBR9`dl{V6q2mlx`fYA+ z6`a*C{JvrcsvD;lAY#uod?yWug2ctr+StOE9`ZqfqjIpSaJXpS_B2QEmbkZ${+AXd{X9RdaiOwDg7#k0mEpa zJ|6aDtoX#PNU-KOb{3UEx>?pFDwmriFz#C&J}5$C6pmn;55b#?+-D?`Mp4rOmQ(PV zBl%LAFk;6vGElIn5wY6^^;j&fyfBJNzr!jwM24P*DouH4F9k&6^@BwgW?@SslpBmF z-CXFAh$*gkcIqT*8jkW&&`XQ;bN{?!(^%UK6o97*!lBN+WsJ|4Q_kAr51%n&g`Klg zHYHnM%7{$y|H88-NJj2TU64j(V|g7_4VvLhp4A5?G1bIeA%USpyb@Uv21xU(6XOM# zY8g7`7#Oik)To1;=(@qTa@8|ElH%h{tupTGgp=ASX_jF!U#lekHHbEH^+;hzkqJR7 zG35iW+9$y)PC(Q@O$VXM%tOJ3Bvh%071@4Hsz?o8@K5x~VragS3N z7{zBlvmFyBGPf*pzGglDnlmx*J%=oENeAPfP_yT2LSw;0Bg9MidSZi}+{wESfR@c@ zE+JmTuexy zetA*HJGh15#z$okl10vHLdW(tc~I{q-p^?qj#$I2IORwjK!YXAjyZ0oZA*J*l<_r1 z6thW2;*LzHgvlRAUq$#xx>8?kquV|7N$FXFEO>hGvr$5b*qo847FEe%a#yJpy|~1W z3R+qwVK_lpi?(W2D^hj9#iU~QD-|VKkYukDF*`YOQsIf87*y)Nz=h^Z9^N)N2zF=? zCwLuai_z6k>`3opar2ihY7D-tMW1x^Q;5yPQe%{L;k6_T~#1t?&&RKX5hQpY4C z6z2qt6@(^&kWUgInKm{z9$=FOI+Hk-6-*ey*s%kmNSOL4MJt0smb;E$`9nm+zd{{& z_&M}7-lb$e5aN~;<-ZLR;qe*y>NDlVGEl#v@bTgAn&?pZH$s0Ej7V-9K!OX!5OSXe zh=RH^qC{}-#QQ}sBnG)T8pIo!K~8fs(sfoi>HaQ{<3{dJrm?l(% zLrny#aqvskNE8@mKl>{<;vjRlF&1Y}XkHoG@9>z24gcl|pQ}vkmQjQil zLY9b+$x;r*bz*ISka*9ZMUC$W3<^=SZcU!=2`>#6QSObI+>CgPK1?P|DKoR=*JOxM z!pkV#VTa`Cnj>;DOg7VTQsf_m%mSAv=aQU=DOeCbuT#AkC823^s=(w3Y)tThDqf30 z4Gt41K!kHQBzQ=Xt`enYA3gTS?p!#IV7DG0Fn$;HgT3+{)zlI};!T*Bjd%J@bH?A?myZfI2}e6g~Gnzpl**#ybL zvlen%i*#hEQ$oo0WqAG?;)h3ebn~BBF2+R?g}Nc?WOm}_1*C#T#*}ib=qZZ{Its%P z+wk0D34y1@ICdYmBz}pXvlJ$FFw~Kk)7W$Hr&a7j;(ULk$zp0D@ViDBtH}0jXp$S| z>M`tI6VS2jaw|euaTKvT6TvaEZ?|ffZI;0F$^R~=m7b zxbb_@9A3IERAx~K>6B^C|H(Br4FQR@Q@}uwHKi5-f;!ds(xibmCJ=is&)DOx|!vsWh}5 zRuZj#dCv=NC5cd}$p_>ejCbEQD^ZS%Jez%!gZ7s?zKNbOLZXt`q|u6tu0~oU9gp=n zP{~mTVytq74KEIMOnCpWc0QDnb?CNR5jpYQjj)lLtIKd(C22k}#Fos078d8KXW7!y zg-kaaVL=NLWh2p}=yWRuDI2S&5S(&BH1?2!aXd_;oRWDD$inYL7O1qQ8L@=8gvJw( z>eZdZoXU#A6uCj1gw~m?g|a*5rNkGAj)Wv!?6BPkRf`F347f0z5LiTVUQ>lGOj2yj zgU754SfEVga>Xtk;?c%X&I!)8%nz7)J2f~YdcH|M>Nv3Pu6;+EmnM7U(MLo2QBI5s z$skcwX4fo0heDF{c;!dgVwHo!2lH#O}*}=&nGIZP*Vz0h}No7OIaFu*rqgN z?@j!W#!F#KAH#V$`Y2D1Yr}nuW*}nX9WfhAan!bmbp#$(!~b9GbbByMNJ&ie_$L*W z>igQ5x;Vz(57_j1t|+LN(HKJ{TI^rVv>wS4C%Y3pNsc8SF�+4h4h$*P+nDG^ z5_jb9^?4Rjo)r|)wX7H?IhB~4Oo9aY#{d{o))-LD}IGLvlpwA`Ykr|)X$G&-VU_3 z>P-*q@m}PKStlduP?3Y7d@8gkeuyg~5E%G&@7*9krv)s!@JAtKKUd}SQrvQC92K`tbLDwh}}-y ztY#-0kys|(qoD+MS_lZquxPD7KnK8>9p zt{vAx5YE`eM`1P#hf;Wd_>nA3JCB}@I zB7+$avy~X@*kRd-!5YgfkrYEmB<(aR zgA%vVVst7_tRXAek%@*+cFLk<3`*Z5%>4vHN1Clr(=r zlR3D>>{OQyLI*++CJd4$e}#r6$2q{qNqm?XXfDGQ7i>&^D1DMGs#Lh-D20VCS&p$Y z|44p>CWo>Q4u3f_k7mZ=`yf{w_;O-bJYRkpAg!g)wHGFKC_s)lcIJP}l|n?&_A!bU zufl^HflDTjM}!{C)L{vVWS}PuG3-r$<_mH~iV6%(N3EWo4nLwSPKb@{kj2C-F3+S1WLx@3MA?)Xb<~Jrx9*95AnEo*4 zjzmE!eR*&FEcn^kLuacJV$gIUflnkjG5^54SVQ{|+zwcAgeFwTnnNd|E_5OdXx`k%5N3J@4Q%yxpQ}GoMoh9BpSzSJtGOblTIo&pq z#jRUsGUE}-KR@O%O5Yi_awN8tl(V+Dky&{rp~`b5w(YCyUaIxB-#_sR#JRZ#oR-f$ zrl~pNe=FI1n(@ZNnLzQ0_Eu&k&o-{@|2;kKWvASJm-viEyL6|n`N=J}H*F=TrKV!O z9Hq2N1k%b(yygGDIkM}}m@RW7WTWxU4rN8GwN;Ba=w?nb*HsHQ7BDgiXRj0CN5CG6^ED0?E*>wGy4CRBEKw4%kX=SX2?XZdO^jXjdep%tL5UZ`si_rB7#f+S8m&GLeX|M-Brc&NRbc!Z z6}WvvRv}_E-Ec5U52vbHg)?FlQ&-|H@-$dadBrARu(hhaVNiWavwzgvs#`N^$c26q zZ0D0HisIa@2sJD~=Q%bMC&cY~;w085{}G}Ul_>LN^%ofW-pP{jEjZhDL=CaC3Mc=0 zX;KtLRwinss$09oPRak{la>abLJu#aCI2(WWlW4-R^-}AtS;e6k*aD$PxtEnb=%{V zhubz)E`K60?7u<{4Vy1q4X0i=^e?lN8HKU`Cue8&<9>oPZ|2rTY{toIG4s^Op}LJ{ zD=A{v*1CD}y-h28Dbo-t6uC`35sXp#R?aXnnvzZ6w&%o^c&7+fWjJt_<&Um)FrNA` z{|m{Z6W&p-H2d2n2qJcv^C&Gh+s<&tikrQ%PX?$c-bIMp3QK>`{;esN!xj}eVuXbg zB$%tuYsc$DW0;|DyVAq7hHXY@e&kU+#G4+)tnDW>kT9r%m>Hr*L{@SnLWrmu>_-VW z4yQn%SRa>zz0ik2#nW~x`@9~Cl)!|GmUKbyWiO@F42fwr8E&)65|pUUnGAS|+L*at z-osBF#YnGJ(7yr-&t~j(0+N9pYbw;IkGQc?xTMOorew?&UCO%F3Kn8QSXtRtdl^ho znu#nevC9+Knx)#5q*o^9L75SFTm5NbL~nAzxRmxOteN1$6|pB9%MFB`E6p)V79PLC z#1SRRZ@88T*=C1k4y0_M98ZaSp<{n_=y~04h}Jw&geU2oW4NabCltd@Ylsw7mxIu+ za8P{oYYT?OsX>>y>Ur6RGNpx%Bqw7K*HVy=tl{RkY0ysa(@sJamckJ`N1PtFF1+4UVYp*g2tO7kcU>VkLuoVwssd>evw^ zV8dN_pds@Dl99QN&pKC8)>pJe_dv(`>0U;+V!@5T_t&M*t6d|i7CV6#_CbA4m9fsb zpCVBWLuU7A!LoyhGtOoSLXW%L&DfI;MF^9uh!_Vc#LSin_2pp|^R1?#e9{O|eX5DXv=3&EcT|u!UQBh}S24&!f6_*xmVRj=`m4=V(g36)lXro7b zIfP`LJx9+DsOF%*C2xyEyN++u{CjX zi%5*KyBIAx&8sPn#ZntK#XhGfN5#2Z86J##OPNaMfr*nL3W}qk$cZP)aeaO=|&^u^7gf281suJPd)CY%R8Zq zoK6{1_SB0Al_p+R!yJ~myUi>z&X*WMPAb&M!WPx?V45rCX!2K`0)iaONf?(*DI+DT zQbp>M;ZkKKN=u9&`PmgWvSR|&TMNk6AeR(*kDW^>UQ%KhQty~6p;V4Sy>m|yFTS209S+|9`1g-@Rk_eJLZFAM>ik1hlx{75d+Ho(7j3eHM@M^d1Q^&T2@K z`(B-W-I!ZIicEYVuV-&qC{1dE^6z6vv+?dWWh%~D;NoOy3+7p?cBEq&M#(lwXG5Z= zNAxNsM`FDzql_vqmT3Mc??04CXFRS9|ALA-%@dyw;77gQKXGRYgfGy+1cT{XGYwys z*v~SA`<-A%W>iHavWdzJ68Uu|M5{HOCe^5%w-)h5dgY6}AL(L*W-O?#l%ZJ9sh$pJ z?M(jXgrlqWZHVhIHilw&Ha%g5ol}OX2f8$fGxDrj2Bs}&trk#pNsX9rwu^p?&FIb} z4}Zz6YYud&@beg`Q7g0}Dl!|H5dt8x_t#1uK!?ylcp>2wVYLWaodR-K>X7as%9 zHdqavNqu<7hInCOIl_Fmf-KqA_H*i&bZoOWzBn-SbZccgx4b-E)`FBeM@`02qJ~(+ zsf3qicjc6MhH@lqxJF?|ncfpeC@}RHszzXwmST;HvSGL&{+BqViVHTY#PoUlgTwUj zdi7xIop-5i0+VIo2oXd}>4zBvi5HtEYW8PTVN9fL9DkzQ^3d8kS^Pv&tAMqi50S_~fS%l5Xx=#DjpjzWPw{cw0FAT_1BI zhlcWli3~`I2vnw&u}77xx*iCpc%I5)n2fHd%K1k4nrF`mLpzNH=#Q19epKuS9lW`5 zFcA@!Hh$;)runn)wJSiFh50V~e=a&qs*J|F;^7>@(aVj=Zc(3t`&>sHGsD}_+os}< zG;7zHT_e=+&gM{Rg!W2QiIicSLC^ND228H#%8$8P?kg8%qr3Jn>oKNJnoWyhW0oYx zB_JIr8MMj`&)(( zrVN+PNsdbLAB_Ey7Pcx#oSH>O;fnYDw;v?BNYS#kZF z*FnVwuVIRw=2hiUM3Dr?BSN0obCK#5ABxb97(q-3Fw@}#Cgvt2rol6BQ<&(%M7__I zT!4dfr*i?{g2O1`gQ(o~axX|lAt7al9K>XDV5$g7A z-Q~kLT8^$EVI)V;oLq+`_BOwFV#3tf{!~%@6KO*7h~+7rG=cF&}^QC5}}ouqU+Pqtn5WuXBTnksy%0hQS5|?8o7=q z6%|Aqy4w0BQ(vr&ZOXJI!rN=ZwpvDwFxr&OY6q4@G`mU3%{v~Gk%LCgX(|{0?rgM% z6q4_Y^HNfz#oL(@)>e>^dP;m^3)|x}C z3-{Mh7qlyWKONX|j;wKNR;aLf*lQT~

p1kvAmQ6oL%PlC>R4{^vRpIvk!V7@0tC zhoSh1kaACjCGAdAfS0aY7d$<5MvT$7U3z<$C}O~Lb}msdBc|UYK3-dv)M9eci#}lNctZEDiP8&O7G2Kb!SG3M2KY!BNw*wL8-w4 z8FcW-u2{5&F^Ns#2OL+Z?%>z3WglL(*@c}Q38`^oX6&jy@c%P3Gf_&Hu%|=m)4P-@ zT83t7yg7jcFestcDls|A_7v};I;iXRqe+`2QWMN6OQ9zoML1f8I$D)X^K}2!i*Bf7 zWR{DTys2?03!BK%2?5l6Al7U^*~`4R$hIaj;)LeBW>bmKn@2De66V*6p+aI3Ha(om z2B1)z4D~$+>Xp8^da^!{V*Fye1-+5!#OUfe80OG{ut(skf(WrM945u-o<+z)vm?m8bO57oPEo(atI+KlDt2?PIvIn5N3j)KFG(97 z3!`p(Eb~%+`NP@d^TR3daa^*WtEjaJ7O>=mo=ir`s zx9IWP-Rq`M#b;cTWr#yQ%+yR-oBO9Gt?JS(MU9>&c5xkaSjEvM#!g8%y6QMr`kJrL z;&ya0WSOz2*(SurQY*NHRbufs2V>PKWim*t=?&2-Xz2xdH)6dYS{t~5!E0I#tF{7v$ zaY>acQl&VCG)mT5(T|5FC?!Z!@ShapC%&{$tYs5;tPyFk0HoOgR&35lRulet0%{Mw z#MKK>$$ALzD2_fvGQ^%(h<#IqBSaO|2As;-x=W_D$VVKUL7ogVOIXHr(PbBkc!xVD z@E6q>*JF5u>wxg<(qZ^VVy)su4~~iC@UC6d3J2Rb?7NitfHf+1IYvt;T9CHS5 z;uxi!RBA~oQSDjVK2C;yyl4E68Ez`7Vagd9O%C2nQUvK)IM5=BSW+z+E^c*GWj{~d z%Ls&fG5s{l@aLn_j8?pNDLFD^#F0f<8*$8q9EJ`~*6{>mz94pU1=v%VFKMibQqgh> zl@$pKQ!Azv(s7EH;$;Xphe<)-3oz_sJ@(BCj?RtAB6~fOemUW+V6kF_#N^2#T|@~J z9iv9-Ft`_0woeYI!fjI37D_tbt(a!yk#^`r(9cc7ia5p&5JMxACQQSVCP>GG$l{3) zEWOG@+P?X|3X%}>yQmGRGCD<+a&yDj%W^Ch35A9n!IO1y4_@R}RtBE@`Q!%9GVp8( zJP>7ZTF!flL5)_>T`cf(>t%SMK?+GIB?CA|CTS>jLse_ZYr{cS6y#Q+E*tu<`)L;y zWSY}48O(nnsWnCISZNm_w1mgdHIPu7(b1EQ$nP_mTM9}s6=8`dLqkmBbAgwLoUib2 zl|r+h%308g<9|J^PcMA(hUSM^z}9$!V6re%H?xL{@ZX;%@S|Hs2x*x|4PBl-vKkTC zy%k4XW$nWssNEv+>-HJz^J~tc^=meVfu7)zm>6g5+}b#abHWrUHYTM+7~WrZQW9v4 zF+Lo1V@mSjLgs@WE89qYThWS3hRsM5tyr8AJqyE*iO*Ytlq5UyB{?vK6r41^G*X|| zZcV+Y*=6(0)Y>L>)eNYy2ea8MP>Bd3Q9S=H@g2)KzE4zhtk1uSo2%d_yRwinNI1p1(;YtX@4zop=S0i$BhdM3C2Rt-c*{6v?#?P?yJ^pcOgsuyn zXF`OEjW}=OgBC37ztR&_*MYKQ^v%0Pmcr>PM@krCSu9pU!a_|MPNZUVGbq{CXv`PJ zhnVvXm{gcI!}TUB2wnK(xb4CT0buF4xdYvfXi{^Yhcz=}G*<+M9D`+&Oq|ZIXZkuq zGBjvM)Sei1*XU*J-U$rn@8S42k*}d>n6m~o4)$j}873jAG@PFYU3JSRgxubIgwssj=5uSw_1{SSbQ^Bb9^L1W9UZZ6?4>FQ(x$Pv-c`S zUYWfp_x=;nlIX?n4a3nmlL-g85M)Do7_Ny~62pjsjC1f(W7&jbHYmwb3GQ+jyClK* zthR9Z`?&cw<3X;Z?CkCl6D8|q8_XFI>9u0U4)I1m`H7Oja>ZJFS&GP-6P=iOMo4%` zn7Qjj)s7!G2=`$kHX{kt4{L~Z!9p~u+$Lbeb~f-H#LXHQI4op|6)7xHq)z4jHU9iF z{Zy_t#au#$Xj>xgwHW;ykTVSus%=LGhHDa;8S4 z%5Wi;Bod1ZEPf!fHZ2X3C;!5FF6K$x-$j!+g^HCu{jY&ZzWX{TXt+Ww`MyS;%nX?k zdOI2a;bKFS>kL@Z3yDy|7=pqH`yiDyB14-LNQM3i4pCAhqhyZ{g2h$Ba7Fz6m=aiw z*(U~Uvm~>_=hYk^o7(bb@RKUATmGEN+$D(r*{2vIS%WrAY{--BLye6H(2N<#t1Zso#K}Vw zJs2_eAQ0n+)94LrL;Lc7;9eu5f7^~bUQKsdX3f84%sP`Ln0;*g7|XoLtLKMTqYSFI z>w?{gmLC30V7#qB<|F7C^$%oS;O)!5u`CevR2eLP$yJs8OjDGv9unrRE=wOmQVF1z zwu;7zNd%6R=8Nw)Co=lYJJR1UwOTx)QAfYBgH-i1eAxFF^72eeYdJn)T3m}Z z=^_WWMHn~I{sI+AW(J-Vgs6h4aj5R6!?hdMBN`=Xb8&!sTJgna=-rXvxQkt9L7EQQkZX`$FewRG61Wa?mk=KjNDwydS zCOJn8$brYFHXK4wcBP0eDFs}_n0F*#tNEE5rjo)I#EwnZ7?!Bxic(5dc*Ef2LlZih zlc7=QF+uU7pTcD21SumLmF!4}NJvP8{;1NTlh>au6p|Eq7L%g5xOXx%;&R)1KlAZ@ zwF=*2>+9yvF-6Q#M#jBxv%ze8W*u6ZOXS55ginl#ajkJ`MMka+k7E-oB+C!ku7$D2 z&2Dy3_Wc!dqg@}79Tr-pGI|yE!<{AG>zxZb8vwq{1*A}^A7njqu- zZ23M+vW9035BC*1SDBv*D45|gU6wDm47;lUQZQeq_R9e)+)~ zhZ1TIerE{MVG>s2>@YqMl!>8pWeG8c*5;1jvDxVBt>vTpQ|8HO^_|H|;Mw`IRmAve zYd%fMvgA>HStT&~*vdGs3q_Ue@a}Z2_Osh3c8@p0QIVYqbjgHGn-_}k=zFUccx9>< z9YWkaPehFo%M%ctn!<6=s6_O7s*F1|t=`!}ia3OgDKSrE z&%0iQ4Ic>fcMgU>aqRv~Fp??v98Tfk5xkc6@t2i zH)v-Y(`1T8vn#VbccY;G7l%40?O=1)ejw@xhYP#4EjbgexBm_Li3C)Z^&(J1lTu+o zV)Gb;^M&BntT7i&)WDh5wQdAd8wuE|+LlyNl4v>+6Cp=8cjAWE31c@iIUQw<_(+sQ z**q#P5lGVZN#VMxKE67U=6iqA(CW35{40}1rE%>eMN7FA>*pl+=t-)b-mcc6z9VUEWV`6>t?59mW_z9Aw3RgRCmfQ7^~s2aKDZPlV?-X z{5ms^>HoPS-cE-Z*A025dQgUcS~a+=*3WfNka~y!>&*}OLInuLsEV+ABLW>M`B9ksR2&C<1FoZa~jWR^Bf90!uU>N=r zFK=c^l(t9V%R&XoLnWYoAcZAjV}lAN)xBlOqmd;k=>8#W7npTIG$~@@(A8%l#DNZ6 z_p$eMu~RBhOH7s^Xs#G$X5n4Jc|%65G=;HNV#+rb8YJ_PtYncPjS_wtA4;Rii_+0K ziAgZVvB>=u8#?!xRgaO}o(wxJLJ_j$tln8|4#fo`fc!{|jI1EMd@^)%e3=)HX=6eR zNXzznr!ge02z8>5OKiZQ6e3L;`mlVCr0gpT0<_6N0zqgfoQ!i7@2umibZJ zxc(K{lW?jWt(1LBSYa&R&sJgeVb;75&x4|4Xo^OU|09%f7d`BeNperI1NJYSHc(-w z-SA&V6kQm5habe_o0hFgCuGX-AqG&)rYjQQ|H5@E;WHutE;YHBRB8W)!^P9l`3EJ{kqnqxTu7CV&#ioM(DqBu0+Bu3DikS^wDNS znL7XLGB=Xx|56G$#VZriz|v2n)_oTg%`ECUC1AP~Qy;OV zGDZY@L1_v4*;E?^3)h9Q%o&T6Dt5%AYiKe1Qs?gCofS1i&DLdLVv{gDF_Hw~jKNtg z3RY!F9x*Z^3X)O%ij#&x?4uFvvzQ&1Ri75%UI~DmY9^GYY-4ATnZ{Cs5cexZX&n|8bV~MSh)!GXcnw#RFUk3 zElrQakP>fKIzYh1VgJ~HsL{iWH)(F|I41fzP{S;9qe3RUhK}tjfixU_A zI`CmEq&0~4Q=AI&IV;=g375G-tWAzf6=_Uq)re+kkH*F@Ey>TMu{aqxfvz=oUmx$) zIl7X-twDvh8~#G@)rX%5tv=ds(K%f^unYc97&0>xN@V}fkd}5lX9h)S4Ixc*!b|=Y-%q{ zN5Js!vWbjBW{u#%-G$)SRK|qruE@=lpye>sss7 zo#QN%qD-}C;*1rPGVGcvWZB(wWyw-+b~5*pveb&gVdZf}MJ4Yjvf5ay36i8m32B~& zFC@H=v#A`}FoP+h5+r99(nzREOxA(8j6^>lscObb%$w$L)ey@PC|JaEGG_=-S(Gn< z*%0P-5F1tDi3>aAp9n~S20Osh{y~&1RAG2=e?}fyTW5zm{dwE;haj{zA<=RIEQKXb zB`z=a^ZJgEk>rj_klZ>*P8>k>9O7J_^kR=kP|}Iplc1tv_rGP7bH;R@ec*o6+>1LQ z74Ul|Ml(I4^H^Up#2OYz>v}c9z`iw1S_droKP%CT3|$M2TX_R$Qz$?tRk%GHq4-Rp zaS9+@?6i+0TC2rL87);HXyK4jiunBKR!xRk;vI!cFSDcaXReG=%Rx$=%)GF?F$YBp z3@Q7A&Pb(Tn45@vc3A&e9Z*S!JpK0@EyqVk{TbHXNB&RAB$xYCsQgJ!NE6(K*ycng zQMgMhh*9f`(40px$I;1tBt3)=1i@iM{9U-NQk-r6OtP&Bi%s<*&TDHX5$KtX3OCWi zLpVNRvsyZ`q_xL%f?}r0mlUw%!pg+j6@4Gyisjg(papZfcvdr_P! z86!jEEJY!beG*8&RgKo4-l*MkV&?w-^&0tS#3PiU{88D^%Gi%AXO)Fg zv+UN53kFD!2`l>^?uL&_rOSwcTJk9&xnb!OWjt9I9d` zaF~WVQV1 z%6xU$pHXXPim>7*@61S%Rim?kjKcg8Qii@Dm9SvAu1?0Cg^k{NNB^E zA6*rFR~hnUOp^E^mnvCFpoA%l>DY3sO6awwTw^=be_=&X=GPW*6gPO|Vf&D4q`rOJE_KZ_2jTMj~k$C=^%pRapmC&rEl!`|Rk}G8%;>;?% z!fBq&{7eqbaqbn-^%gPt;LOddBpN0Wqu`jR>B-MM7<$7WCj$AEcEZNJBk*WqyfvcY zb+#JWy1?+lutteIIGCAKsj;nrV8G@_zQ>X_2IH(VEm(1@ZqP#ohkp;1!>c;N9>c)D z#qPjv1MFuKPVaIF4I}xAj$YbRDB>DUSjdeolwXg-R!V~mOIz6GM43M&plD>6jObV< z%qaWGWg_wsBmiWR6Xy7A`aBV%(vxKzIx~fyEt`%P@J;%`iV~0f48!yy{n8d5`(wB! z35V&v;x>*Q0*D@X`Bj9KH{? zLKQK^ADS*d7ItJ=XDr!$;UQOl6f%w)y&Dm1T8_mG5Gio^KF#d1kX<;}4vAE8^lJ7Y z$vUD?jB)I-mAyz%qqBG;)j=nwPoj?3*};n$;8aN`*OYZ;jG{q$96C5NNuuxezNKZQ%{tPTe8sRz-dNAaa=)_PX=O#|{DT@g%2LurQ?fWoL zuxR%xnDCIr%85hSHL)?}ivnxhTx$J2>Vo{mTEPO|h@>2k=l!>;mEyvpu{!# z+7Aj`#tYkwmM&0v3rQ0yrigN;Opj~9W?^JZaft&CPE}hoTZSpV2$-FYI3rQdQhrW! zaKlVSaKrwF7HRu7JQ2A&6??M^HYgG&M?)q#QoDFGR)Y#sNI6l;E!uVva=^4hLaiXt zL#i`}XAC)?^6zFYv7eGn_#$Lx6&CLYIbYC_NR|B&qBv8QC88k0h;qh^u=9|+C@Gp; zWwca7=9p(JLkc8?s@!6x55c&sd&G&KR}xoys}(KBB}tVWl#9rN3NFfuQoAlc7BFGl zc}$VRmNxuI=w2j+Pf>^|fqNb)1c@-HOl=uEsG)LYk@hL%hDhN!a-hY=LB$mMvap_s zPGTC|z-|!kBwhG8NrayT4|FqU#gz@Zi)N34ixEa5VYq_j$jk~MgZnAXE?!ExDlV** z$Vb9Hgrv(cVzw%63xXym$ugvg!x9vk3JLorVA*C8^omyaPY!I8t`)M5_s{HaQHKOi z1yV;=f6Ir@;*5u(p1p^ovr%NBm}Us5B>`VViwrE}68>3(E=-yIn2_#3!VF+xXoB(V zLyynmhuDX*!kI82rFcNULvi~-$@}fkzg>s1&)$4Pp~X5qYW-xw86e)v0~fP5gP|XM z39|b8K8+hNVTQ?#-ozftE2c8MFr-d~A(BaM#7ibTC}l85f-FV_BRSEsj?K{}2+L=o z8Bb;yB4H?r59HW)F1EF?2(e*1Ebv9I1Ps(6SF1WP2rQHOxhU)|4agKAnK|?$qMe9Z zIu#7vK_!g8lhKB3Ssx-cS#uI1f|`?)7XlfGIFU(`qn9>T#LAjKY*6DUC{{;NsN-5R zQl=ydSXRL9F)|sdRCPlTv{{6dj>chT7-3}CG;jF+GqMz!jwakE9Ew!9bV2;)3sA78 zj}T*|!O32MM-7%Tj+n#}dnENnhC3QK7FA3#GXyeEoFx3=hL4l!lyr}ieE2MotA-do zp9P`smgZ-<4jUl*G+>S&!h`g5L2!TUn{j&a$H6G(M5hior2HJAk?=Y7&JV-keodDI zJ_skbh!#P zNOT*{^pA&^vzu(LV`?dDI>ZwsI@?@@G{$zBENy11Sc%grZF%>-hO1~so2=bd*@+D~ z)XUZ)$<;FD+3S+hDYO`#HYL%cIhM%W;>zmjmt7{=88>8y{|sI{t!8#zYil_xV$Ex{ zt+m)?*H*qu-jh>@LiV$}Jgh^SEvnQpovSlju>48to} zHkUCr0v5xTvTaR@*0fSsvZ}cuGAz>;dT{iUV-_Mcp4qg?R-duq?>MffZ*6exn z@n-*h|2@28TI+Jc*0O5T>K4c*YVv;4_`F=ymG4F?XR=O1U+eNeah&0qw>#}UEcw)a zck6!8&(HFBjepzW_~7TMw(zouLp(blL>^SB@#;*37`xW7T%L&IB_P=NLn-$R!eIAG zyx0Ao8%eJ=bM%hBBkozgA)7tu`lB@t8~EgBmF7bcrdbJ9FUN8w;!Aj?(p71+bg})c z^L&=a>2u4Pa%Bd47#fYQtU(@Bq4?)CuIq~ zh2L4{^kh=cb9h?`EYU9J^c5=&@q%Y$*s)R;!`WJc)u} z!w)i0$MR)bq-~77ipz-<>~eJ}#pX>*6&8XDG_?p2Mx$e_Qtt5fsh(`mdKps0c_zl( zc-Te|h2YCzgghu1In)Fy^xb_JHsdqq`awVKv1;P;h;Pa2(kP@US`#TXO~odPY@tEP z9mC$(hc7OV*#6oz27DR)=^Y(l`!YGREZ>g&I8W zK|v<4R9-p|s!Jro;wrR{e_I7{%}Y7=Mo6Tf2;JUnKM?2^Pu(YRx7T{j^;yfFD4 z@6Ihy4XO?@kbvjhLUGLJb*%Wa=?XK_NH&;*Su*CCp2jO_T|~O;B1m%YjosAqv)zfb=L|X`7`R{BR?#6eJ-PD74GR7?KI=1BOWwGcz=qHtfP( zK3;js!y)Ox5USz~oo65$+}nrW|MQ@U83eH|B+7gL9(yC1bEj4P7R$H$x=j-`)&bjaNyRXY@!C%8s-rd^E>DQ+@`Lt4FaBA-B zl-L+MqCCqRDeJ01uIF%CCrA!&`otmpwE*gAlIa5HbZhE&iYZSVrr6QpLCUx{Mkswp1 zyB3v7Jj!hi7y<06CbKVwat-`U3z4*TM3EB+CVy9sgghDAeT1$sJTFRp!>$Gzxa^zR zBvwvIL*+#bB?WFISriN#>?-5+ZiU$V`n#i7RSo=BT?8W7+nPm-u?GBg&8Bj4Rz|Dxh= zlJ4E)(;HFWsCR5d{R$!PX^|1Qq9i}@z`fJ`h7le=ix*=wnI|!SmLY1o zMfmc|H|u}m3h}7FL+^jrg@O)k;gq5qvBAuw&SG(zX{}K`ldqf1_~+lX#x-FDoL}6d zmthRK2o95Qc3>z2P=k*Ona%Djaf~1*)kl`c?(7mN2|H`5YgzD$L(I8#Eb_tcmt4Pe zhemsMCRo)$6893>fu;@rj+Jhp3KPVUqbE=8G@AIN_^u`{^k_%rhddNJU@w~}OV5T>>8dOUYai(N_Zb}Gl?WNj{S zIx{wsycfv*gsiXIGp1h>oUZyvuWP5OlbVx*?`57%+Qg3A8U-)fH$fs%Z?t$5H~vJM zWIjx2lY43P6(7GFo$X6zWIM_oNVFep`vnfVCYaWgyxx|P*x?A8i;e{b`x zplOAlRFN&+4~;SHEW<8E70|I_oopqsxvIZ}^uMBF2g6dt9+0NZWeOAPi`A3}fl~sG zLe3jg^g3b!Hxdk&H*vWctJX=GI&hWcGA!MdU)_yi!z|YF<{E6!{)tEK3l$+2r!qjo z+v(!ruy{3r=EB)r9DQX)oRh;RCe?TP@&7FytZ_e1pM!;G10n(U;&Q*Wm^F@%Ek3p+ z0x5Dy`jQxNZIGwm(3jLVo5x{>Q_rm>(pvbJJSsg?tWWJmmOT4ZZ!{+7iv%z&>Keu}?)Junr&)3E=AGyxS z!6bb$wqt;y7rW82x{DtD;B zVLuDWZX+b2ah$^Aq2YpfgCisfpqm#>@=z@Ohyl@qR)#mvO)4IR<(hQk9$e2=wVdv@ zspNN?3;@+U*R&N&lvl)iW(G0%V_$=kr6>7KkWP-w>1Z%T;KSE6F5Wl9cy=+_1k`WU z>~h&qc?36ZG1Lwm1W9G`=`GBGuL6pvdOCxrb8rbSymcPUdwy4XDQC`h>)sFYwbwGf zR(Cp0f@OJsh$vk8^V9miY8(==DN3huU9)Cr}`GEC7M_S-brdj`hyT*Ev)Z zxnAK=r0!_0Ot4cBWXtuFNtaR=Q)2no190U8pI31%&4Ri#O7zR(Ve1{hkh=rPDAIyRb?5YfM2q>Nql>$EMy{hY=B*RmfG zXh<(Tbu$g8(n&?UaXP9AOD9qx%_D1Q71Y0OXK+nTIv+{T!N{F6I^Gq333N>36zn20 zOBF+o#3{_lEWah3YD{Q~3z`B>H#M3>hK6#D39HLrZ@Z5&+cdu-lrS(hYyrVyHmJ#{0z;z7?t@j>f0-p z(~P6W2KFi=NK8WwZLGIG*kY%H0oZ8C!yp-KaZ6e&`oq!VFw!o&c+8C%J;_GV2wRxLl z49VK}2)(;sa%d%+F`h1loLqHlm5=Y&<^RyJZFlWi_x0-G<|45PG7z+wudPtY%&nJk z-(fPv_;i1p-Yxr2Y_7@dJuM0ib8&<7h^I=gnj8yJ#<-Bd1WZdRj>u!YYj}7Atyu`| z=e3%}XeM&>rTc8z2lri3=S)eRqVH?uzYPT`^ME%5xvnWa`z>uB>}>w;V1TsAQs!$j zY~-GL8B<@+x2Y?Xhq|G3vrM1{Q^qg{=!fpV62`k3)&BR)!=K;nxmQy4Ny@zq$gIZX z%NF|Nn0Q5~#U+-%Z#4SMHokO)q3OZu>uD`IR?_Wm~$Ckh@d6U0`} z1aY92&fct$QhW}WAg3RHTRrPIZnRIfrTqwekY*Djckb@|MJZ;&lzLl#X=snPI+UMx z5s5DPw(Lv7pnnnh5WNQCPtNZP@Wgy;y{#Y1Its_<;nNGH$Z4Hw*KX(K+(LSnJ2J@1 z2$N}Jnk(JzEuP%A4RHiOl?{F~;gQ4x6%8_U_B-=W_Wml3R{+;cNVdCAx+dDP0doRg z?PKjsmOG+P2c<7>`(PMAowzz%2_qX*?D=Ze9p*{Lod<@$0bh{3&nBP#dN6&Q#vZ)C z4jkgp|IHBsu8kxooFigC;$QP-XK%!#uYq34fe+m|9~C5XptS{ZsQ;{GML=Y>;yzOj zH~o@wP_0sO5GX~g7ygM=v2y_0jmiPpuaM z;go>%?W5)kUFN}ejQP~poNy$n5PmxWQb>p0s9h`-A;?NUyGd$_*t`-rHhmu&PQ}Ty8+ieT$RN zg*;W0yEo^a2p;o%=R**4o2xV>&2rEwl2ynbBihmkL=N>WYj(B@yq6W86W1F5W7wEF zAWm)FYF<+bS-PP^X#U8=!9}2Aw?tk^r2=erpJ28n@Zir zD%uU{C2;#Ib+p-2i={h?OWGS0B{)mWIJ#Bk=qi)BpYr8B1>>?_;qMM540P?6;HusS ztorw5iEBR?HUee8 z&)2lFa41zsBVa5LWVEt0_#x)n-MIgnz2$n!XbRdBIMsx|8y-bfZ?-F|acb$mkvRMP8i(#0wN zJ&-%((~4HdPNt7S9{H1uF0tx_uPlY&uk^>Fg_lluOQRK<7CdISTvDpJjl zmrwgol_qYhd`-rD`1!3cI1y2!_FsoUPHAp+pOvQMHGa8G9D%jZ;}-p}^P`W4Zi{aZ z{IyN~P=6MqQkh}*P9)L}N>!9nBu%s4v6_J2Qj?7v#62#WG^xZXsrx$^Zfz*LbJ8Z12^_m#s9 zUkJ@LNlk@F5IEh*g&5i|L{%(9K1PyNhrQ2m#bzi^cS21v=lQFU&qjCtzH;iwewX&W zpzYmUD^6{%S6lc)3Q;Z013JNEeUsZq`m@)ReJPXb&7wFq0(giPSDobLu&NQmVaF%y zS0PZETRDM~P|(~;ekf&$MFFgY6PZCef61deHV^ZkjY~Tm(68IMel!>V`l)OxKkKjL zFmso@XcvIqq1ca9QHbgBaFi;JH zQwfgBATYwfXe+^tL*70p4dnfes!XpjR;>smqs0Ng?Nh3sByc}uW(oS=?B6twzGaQ` zvIy4#W5wAtLptr*UXWI4bG`SYWErCSbpoRW@`gys4mRw4l}Ele>UZ)M#h2*>;B9D# z#q4s#PI?)m|50&I3hF&J>Gz5GGwDrpFJm8J*8IhNO*4C-PvR!4Xo^s=55RShIleZr@XrP!(YZ+=32CO=jQFdOVk$rW3DEaA}Q2r-J{h{}v_74G4E%8*{v13jOd z-Js*jc|Iv0-+)I3>1bjXF^Qy+k}yM#*^`%{;+gIb)ExMvNNQH=nK zSlkoIQ!}&k8ais}7fWSUR5*}`IX31k<&w3yE6Z~2658=J_|SgM@AXse`ZHT@Xi5ld znlHgei(B2G>XDc_6OUX)E;#I6hPLCLk$|=e^Jb;@g<|C=*_`lCQhe;X_cKVNPyF^> zR{I@=@wBehRRb>l=Oq=q&#Z&f$uohl`cA6Y0o`~=mzOmx1L}&aKNzCf))=mZbx=Z;pQD<>kc_H-fP?f;%~3R9?_Qfy>Txv#igAjY_C*aO`6| zJXK7dR`8W>`80L0zxgF~!WSx$EnWWgxAkW9m<@552p+|^KsAkip_>vOLm&-xX;zCk zD?mZRzm~hoho_Z)zbJ*z<-b?nsdepV;c!IdhWfR*j@M^@15Rd>f^L2kOs$!$@s#Rf zPnj*N^mf52lCHR!g+SSl@1;+`<-=g4ag)$bqN72Qw!fB410uWle45M=aCsc^yD)f+ z!=Z2JDm(Mp{-K(?SgeYogK?!Pa(1OXinn}!COFk*b?1*^uTP*$yi9ji@M&}$A>NJ) z6-A7fR^LWnbI!Gh+&7h^ww7~iU}|kS=C#*bgX)?tNcIxPY$E&zfQ%TKh<kaC^KXGKWB@x5@UbvFm%fcE_q8hbaFuClDm0!myx6Lo06&T&{RxJIy31 zHSW*SPC;gX8%#jiXL-oPE~ztqig!+< zjy9>SEoQfim^H^=f-TK!!1YV0#u}sHsW<-P=CQlCXa4AQM@~)i97*W9IXA|BRPMwG zhth&NWn3LA-E09nJG-736h+Lzv5&&;^X4cLtuS_0J!J&1?X^}l^7j{`si_^6C0FT2 zj5VkFV;7#g-FdM6sSB_6zE9+5lQo64(f=p6Y4uIbKg0SbC-*)=)NU63wU0APHfJ^+ zH(oLttDSr4l+V9`C{YPD)ip(jTKMC2WIkI!ksiMAH3u`@$+*urQ&^eIW*jr`U*&3L zUYOeQaNkks9oewCfQDQ`l$LH%%mnCSZg7j>2OVq@Vtv~c!u>VfU?x)^ECu%F&5jms zaj&dSD{Y(n(Cr}-W${5$2PrW0BVG2~Gp8_8K+b=5ryCS(pdo9J0%4!DS^VY{nJEV& zQ=WHUjVh*A&LGT~?C@TfV8Mgn9X%#~aHWAM&!hTi?gyWx?Hiqf`~S_%Oc3CU&vq&S z);UTxEfk4Y7-}tlDs0ylHw}HTS2~xZdvAPHB6A(DGkw9Dwvs^I_x22CU;;v0LJ2&*URYX=t!?(Pe-hu#fzD9O~eRP4v_t6q0IfXC@y9&4Oj+)XX@4Hln z$9`ZL;YPs|U!?n<7RaE};q|0LrFzwBlZ;{?!F*gmgo~b&|9h9z zMu7~5k9LA=2Cnh~rv+oJBX=Kv25?LNL#?X0>7+O~%^k_)$yX{{@A;0Gh6FoOLK+ob zyFlO~YuO~72N+%>;D~Bka7%eguXNsJ?D&vR%%Rb) z!C=>2{CaZ(N%-8~Ef1`u&+LTRs!X}`9LHoxAvt`}>E=WREh$Awezh2`!mw58oFo_T zPQ>N__tLR-0V?0E(w&Q)PR*sp_)$c(fts30*&hAMqaUa=%>^9lKwn!`S8x{${mR9m zv>y&LzP+3%Vn}MbqZ3G;{v{KJQ*tU2d&2y~n11&(D7`f|#KvtHam3(uDVp#z2;SOp z(G@auuUpNJTGe+_)o<2gOT(EXY85!r2g?QAYF5V449zvkAVdDk-Me7$pU1wy3ZUDV zg?|7OutIw3bK1LPY(LoqgH6KczBg*1Iv%yJTLKQTptU?T8FI2nV=-tnB`{y~)Y(sa z@RrKWW@-Doik=cmj92u*3Ijue!%5vJU)mGXvG~R#(ao$UN4 ztw!(F=vwd5#O!bO7Rm$aS<9a2w&Ayd(K$oCDnf2-$hDlmiGPQ6!24dJD=}}VsUKeJ zSFPmQe<>C7o`@}L8DF0gWXN)mNuvV{3b&hXRsA{t#pe&r``|%UlPr|zYB-8CIIWdX z{Zhy{V<(Fm9v;cljKM=jn5^?ZLSG^>UDi=Y(VX+gcWxE3YjRento{S95PiA+?)Ed% zp2wlkJE7*u93c|NY2jDRRRFHDs?XjEV^VdAkJrhz7X2qxVXRLk*+f1uZatDcG77mK zVIq`dlLhQZYJf(;k~-2V!53(m3TPB(u4ur~UT7#0^q8M6s|?a5da!m6@TV~)Fb|n( zIKg~96_G09iwJf96x^bQqS>dZJlWt1v!lOs0|@DVYJ(x2V8k-5b(y@swTfcmi&em- z@L#Hld&GbElv|*ImAVtbbjreqiu}a45VT1G$mB5KU=1!B=hd1HJG9A}Fa(G#CSMM( zAFK)S=ewQCiWq(lh6b~bjDkc?W{lX>-^_nApHer}r~UbI#A9+S>QF&c+(A`zB*M%k zJWE*2Js6Lj_D)uozjt7wgp#Ih*$0hLMMhp#w_EKKY5&rfnW&I_~k6%bG8kG226toDy`MQ_%lGp+Jf7cYz+{u@Qo$Ts7PA4HeDCeoH zazt{9+w5cp@bb;=L_p^yBdg`Ct1XNWGWf;bV6uoW-KOu57g6jS^oBK=63wO~56g&C z0!_&PL49Hgp{VRnpGR~=j;4c3`KxUnA;)}}d=Y%Ms z&HbVLuJuHyrhLaMn+!YqwA`0T$swCdG##fn7?fQXk!o$N^PkwETy{8m-C(wSfp^9U zNg9NTP96&EN5sLj*y&J`x!-`B*_{7f&TU}!Yeeo zGtr?iDG)3oWxY=daxrTiGNH?v7cMhw+U;_dmM(UMH*S!MKqZtD%1w-5uj4tyctn!3 zV<1GxyI+X9$2lc5;fxvBNes6RrX-^*UmH)hX;< z7!6%MedDss@(q|tF6gAM=s0$rTUPdO${T_I3qBuW|G5|scDSX!@MGf9R-;%eGpSTI z-Tr$a>1l5osImZ@_R>_VMo41QjQL42)!`5MhY_`_|AAoe`$ycOiAjXaHffdM3B}Nu zJr5cp5WQUOd92v~f44PWYn=wC&8rO~eu<431ma&lGJygrw6xYAPeX=_?_t9frq72o z95z?FwBgw?O1~HVp3j3)(F0;%ehD>RzK^24NU8Q5#@$~_h}IFKditS?ZfY3u>1kR} zV|j+xH}hIAl)t*+X(HnSZg>W;DgU=UQn1$x&g$XUaU?JZWMEZ>A;S`Z21>3;yu`CG)mmq^b6~F?3W^Vl*zSh;lrYVfIo=)$7zC!9xR=v`jlgw0H;1u}Az>{OH zQ3qrB!(5Xc$6!EEtH@)nOx4forb}s=PGSG+(6Nb>OZup{RvVgQm0cs>ToD>2_8p?i z2d=k{{=I_~AYVHa6}6Lq3O~o1m~>b48WD7b-8+8irbKkYg@M&D1dS7rVovyY;-kfs zD)|e~9sVrb&ZPVK!>qp402AG((Ly;o)-d!&%>6rhplM3K&h_Jk%!M4Pz?1JC}m$H@le$ zf6T~egH}ocFZxIJVUmWPx+HvJdS~G`kO)553#|>mzgWYYf1eYu<6}vbKA3wFgpt1L zJyv-l@O=62QX66$8dxBAD>SJvp6iNy( z+ zi&Uw1G1Ex*?)5BYe-nNe*u~N}YwLRT=7OE-|{puF~qi32`y&Txwd@p zwwK9Qm1;O5WSMZHpGnndVwT49;YOHM>Pq9OcBv6dvwRFP3|9n|KKlS@T=_)d0)eTz0o-AqKeRY3JmzPW<`gFy;Us2Lw~m4Tm3->)OxUFm5in9A0BUUpMD>W>Crn8 z(!0M=f+}~=_2Q5(bCc1!RY@VXW!>@5D(d&*b!;j8-0B41;QJDwu_cSGxe;JyLzbGR znz-&b#ulpk&H5WWn=L6VdiUQzhjpY*#PLloIW}BdaTLLnL-8s~@%A%Kns6qLzQHf) zAI_^7_-TiQv$nV&J(9d2q3(X{H3U$Qj6m{xNEcAZignF(z^d1}OB`jNAd{}WUN54Z z!nA6Bz+(v8vz|g;iJV%W-ydr3MF;%(QEogO-TZZRDGouFsNl)rZyMjtXrq1u3|46s z-8Mq3d;?UK$AK%_=NPY$E?IC466Z!{l8{%64c2WQdp4o`bY^MhIlJhFFWN3*;eK>( zO11>wNJ8;idxoM~7oja%X5gQ4NY}2!=HyKani#S3XuSEf=Z%r~Jql|}#^K#8h1)tts*NsvqOz6MvB-o`^q5)QhH0` z22Z|V+5!Jr|5Kq&zn3r=yQK2{TDAOE9%qf{a+NY@qOG_T9#u7@v6hGTxc#!g+?Om@ zCWOa2?v6@c`Bo!@BD|;V22|P|QY@D~o&qU~mOg1d^E%(v`oxQ8ireKaLovp{1r$ZK z_+x(S$-!Ft9f1wCWL&AEPY&Y^J*^QXM^+ zbdp%`F&$DN9F=~?sPkEAQ)uDxRPX7{sE|cHV8LrwBQUs?; zeN#1>rNl-Zo*?tzVH@#CS+z$h-YBV*pKo9W&|49dyF=-$as+%C0qJcH>5K{`d8R)s znq${FxN}p?aHvg9FJ|JUU*Snv(F>`t{*&DjauRM{Tv{sK2&H~h_KyzudQn>eSYNUG z@Rf#Y>Guv@vyKIgn-wgXvXq!jj(L!0cd?AyCw~=mZ;a2kBw5 zue)g!hG>yuHcV?>NUPPMkpPWRh#V;i-{~R2fct8EI%|=%?xoHw9^%>(FnjqlNh7%= zN|y7~c@#C|Fe}mHTM~cU z>hWqpS)vDP{T5AHZ!xTPWvUB!7e4AUyjH*ND93xg7xRUcRWDkAfhLu>nBU(DuFsZN z5enLj8Iz3!lyK3E3)yCH*5DyB4NBfT1b z1n??3a8G!eb$bG-_!#fKY)ZQIC16R&wd#Rb=1(P0O}66mvoFy^#+sph!)x6dy>VGg zLlB%w%0dldWA7SXUEi2wwkYrLJ?=7np7f1V-*|_DQBag~a#+>e6OK zC-Yt4%}EndYe>}7ds%vdqSPSkyStGmX~3}8_id|S*E7>}Ry650swCAo9 zHSFim{ZuLH1h_v8Jjju^44GISjM`qv<+L+nTNtc+#fH|StQ#3V6n@+H<$-^6W2J#3 zouX#DwA(e&*p*L~ z6uoZja`8IKKz8d%gw9ITmRm=V|1Qg7kAZ3X8o}1aG=x$j zwDU-(PWLH#q0J}qFhFHWL8H4y;jZjjUe`&9T>i)qp!`AfX%Zmv(M6vG=TLx7@?zoo zI46Xp-t)HqRs@8MGG^Hl_X2xH6IRD&{kI?o*UC}s>j?Qt&2<8bKqBWv3dqh2B?sPS zPz8j?d$NfGEw7QtS=ao-;*NnE=MsVN^G)*;OM84q$9#~To0)IVmvMfn zwSJxAl}ho;}mOFoPtpcmF5A2z@-RG^KvB516DC9!>rBz#z;VguOetw|}rv z=0g5ha;FS}Q{s`jvKmY@K3-3PiPP4Y?Q@9)G?Tw^!;Z^hHZpPB(5QLFl|W8UK+g*g z<(%o2-0!R0&xE$dPY7E27}{nm?;os~#&nk)=eQ}pOlpZH=P+g;V3K7B$rK8aoejen zfRSk(%BTo9$qK%H{$Q7#{YRrjs-H2Jc{ZVM(fS+I-VxkWWv<^OVCz0zfmfXec(%x#72`V^~2*X^W7EN&-a)~~fPwmicS?9ueWq84W&(vSyT1#^$v9qp1 zn}LIt%E41cGjYN@C1;aDVF?GM~v@;K^Mr)Q7Bi%$|;) zYGpZ0lBH<81DLJ?6=Ev?R2i$(WEBtW*KS`#zKOLC7F=mh9 zIC68K++aNlNC&Hqf0MapsOHAyE?Rl_Y2PPlZv4quDI6h?to@>qna4{2DGe z-b~O+ilRM(J|j?;wuCC9A?MYbfuSCVUfHShA5~I&fcsiCx-KdT=87nCg7Oio*8ZQi zux%o|gv@roVTyf5uR(LaPPqQyM>KUO8QszFBfWg<`ejt7gi-^81SXOElFT zNx0T-nH9HB#Z-;Y8O$YK14(7~!Tx*;g0)gw5; z#EE9>*DJ4kli>NoD2ec^{y!#E3go^;!oOY;6XC{8Io{6wZT|0uqyybE7Tr)H`HPn+ zdGeE7SO&0?2aO~l;Z8^F+F!>t7IdK4u4> z&y$FHT&n$>50Qi9twh0T4ZJPyD@RoSlJo1gczpZ;mR}i8Fa*#~qn7vF0$+hu`;Wvr zeU_P^_xkF%ALpt280?(8lM3n|osun5k&!Y@Y@(k((=j4BO$)$>Ho z@}|d&9`qD&GId;L-hIR17*0*Wv((uvk(ltfHGZ*Qoe&1-asiV@_5QxO)vm_3qdgNleKUS%+$Z zEM_a->2MsEAe|5dxX$Ip?lmL$%^LG$2@!edS?u?8zFvsDISY#}3E-6wnsny4f1`b(ZdaHFI{mG5+F!$UE!N(fT zt~Dyvg657+C_>Pb$48cnXhnP47`)UCu;%2CGt4$O$_Dod++;eO-W#hU2)4$N0jCo43r>q93bVja%o4G9o)oQf2uhqTx~=^f0bKn*6&udk}<_ct$mH%l1+ zgJ$1UnA%*GkGPsu#_Z42a6~$4E(cqLWB&9}=loH`d+{yIJj|V1HzYAk_W+s?4NV~m z5dxXPICtr&6zw4TT` zb`W)G_;83eh}stbKgw(1r76=6NG(;=G7Z0!T)Z}JO&l7VqdY44yA;v~N`)@1_IMDgQ0aIuZ1t%6*c=1L_=B&gaGza8zG~%1>TZ%~za{b3pr_ znyCxXpES`!baay^;~`)S9V7sRF-x^MwOdcKJGLPS9($*38s;QGHHEd7V& z-LaS%^3wql0qNqOZ?}*2sG%D$xZMuvbW6q})9qZV*yy;Q)+zKeVH%@_$V@yq44qVt zzoHDVHUb;qM3kl<=Ig7#_NOt&dheTD%^r6oNH*kFAice|Ou9o@uKp>#?>@JChfsl9 zS5ji>nmcHzUlSm{X-j)jBk2afS4T#&poAi?*@VenQL22L8QvBmtCGUhKg0p56h9H& z+4*|}UOfRvgDtYOE+NITh15#581TwPwIBbnl3ty-36kH4Hhg^9pl;0)M7kg(HIQ>$0GwO{9 z5qHxGBe`|7P`ufl_g8FOE5`@^Wan~7>HiR0!u8FCZsuv2i-s1f-S;3S7l}37)M)x} z>fT$u433gesDHTLdjA=z_sH12O9UIkS-i%0CsF+IN)5e)i3T)xBHy$X(R)%Aua?r< z5}mi{_1hZ<3RaXHBmi8hm~r$7i$@6vi~6tF1Wh8&YmsCUvWrIO0{zbEQr{`x&qf`v z|0~Z7Kh@7->n*68qm9(zas@PtWUo|#a|@zSkV}h%P$h~~6#H(!Ty1&(>B(%`Qo^^h z(O)sax_&tVntc6ZnoD%-uT;)p;+oehtKHWj8Jz#Pn>lG2u~*#1tG8Bg zPB2DuNXS1^4Rm;$sj=QMJeP{C&wn;KNF=wb$|%sZQZ%Y864;?Xbs`SZL1*ezK=R5< zYbQkl$s?#Lrynx$1^4ru;#H!T=WbyMc>EUW^k#ar|4=-dF@CRS-I{)4IQt+DMecKQ z7SI&183j#;>Dc}jl=;o;WgLOoP2cY`V}Hn|ZHWY{q&zh9fVT5iCB3h&YTa1#5`9Oh zrMt*7x^4+_O!=MFrGq%HZ=msh&yW@qdH@~eDDEXR+rJTQ`nxu8BGuqCSvPeFd-U@V z5H9{^AR|%x_G(QYtCUxsfm$b);_F9I=hG$6r`$$Kp&F#c-^~=39|_4k>D=qS2Rg4< z?YUj81iZ0-zTGXDGSHhY~ ze+7q9p;WbK5ruvX>K1k=tHea&RZbV;@`-oj8yiYWXf_!mWI5-g^0<*S zN+iCNv?q|kI;+AqKXmcZaRrDNlldPfW`sgY6$f(X?sbMetmGaWCGlgGUwtxEW zoNOC04w`Nof;gQlMqfllFP`T=G+#Ltn^T7I{Ovav6F$>E857_5KE11} zVJ%)QO_y>~x!|^m89g*=rtq*~ncAT{XqLT~X9Fa>I2{-Bumoq`8hdVDzHR_k4u_n9 z)taO_bb9b^0CTRf1+j*t!J{)-zjLpsB2sG7f^C_3c#yh^4nm}}b{&|a=#$Cac*%Ah zowFRykdcC56LR@trAfAX2E*n8icb#Rr8YmWu~CzMK%*Oo3Mji>PtaGpKG-wY35=>_A^aw%3I^8Xs6!U`h) z$LflWQ2;#`NupxRK?Z7C??QboIU5i*!`m0E8vY6_V0(wJ1IFxgT8O#p{Q>4)E1qrs zeeZ_;pQ7`AWOIG|{`d5>HH(lEyJAL-#9q-N_6*vhC}QuuLeB?5A_=uO6}4Jgp*C%e z#H?Ln)+%b&*8Oa-ltgQaBm!9FOBrOC_hLsiOi($hk_eN?tCXtBA4)z3G3W zo0vXGmC69-iqQvJr%nARJ-+ufie%+r-RtpP<56L8_ycRbhgue{x@Qx?udScrB3(Bh zxny%Q^4IV6cCmwPl9{%)OSO`Qw9n=e=^Ja3Bqe$>*GZqtZ!mDOJv*bLm#j-*i{?X4 z57t?HP)vcq`jO*WH`$7KA#p3IH@9(6sdU1-+pr>TArWjkR{u;ii*^5fFA~z1YG1^* zFt`1SSF@Tdz@p6|pmWct4=DD?oPuD>D`tCi#Zoc7b>RL~L&f%eRdHaxc`4?FBmg>L zAu83%fH1)Ex9SW}A>Uk>`7uUY)DZA6bz@Faldv zW@J(_?Qmt|NsNOwvFyP*E0=eT*vH?g&nZ=Ieg5z|18Gs3FJh|0kpR{;4XU2eo0rE`7&HWHk+(c#FK|AvujDz+f3o>tX;Izfu^NAfT1rDspW9mq zLU-D-CNmtXul^bf(2ZTMEopFBJQ0NL@zImvW>S9E#xONRlR|HFc5gHnQ|hASXs|7H zqq%L2eRD6F_4UbCi8-@I0istV!$K|}{A4&uh*5^BD97HWOIK4Nl3kam@&lRd6 zMZ>f~mT?)=q=`FOl@o?!-odT+yO*t22c+ApsC2j+Qfhue_W@~!)Z@U7>DS*~Js0+% z+b!6zG`Rm#VuPxJ#P3bB-QR|gsq5U@EUCI8mS1kNjoS`#OAK$kwh;JMLgyZxgW&a;5?qo~PufkxqtCAWEe0elYvmT~0@99?Sn@#B02N{s z?yqWHt9E9*8L0eN(j>&lE_pRrZ>2h(Y{|qWq5bn-SAekp`PgN zj?L2E|KqmanqRv3$R{#L&$@y?CAK+4#e{xkoc#WCqAd4(8`}pjcR8daE^YO<*UI2c zi?L(F0%;bSjG?wSPszrhDC9_t_Bop>DA`y zWtvkBh#*G8it9;Y?$pVG`M|ubs=#51Ut$rq`U*Vp(%ie#>paWMoDq->jZqlni#zqJ z)WGCN0^F)SXNiX=f~QioNuNUSt!cTGQAL7ADN}$Ab@PmVBdQ9tq9`C~i53$F?%Rd*E92gW=;p-Ojf!RkP7GZtb6|MW{{q=k3kqbF4`<3{)4%9W#$rpz389v>GF8hegUaD~;;E;DY z2w#eB!6r=0O!p;3ba}2MUAPl(^bLT)a4z8?7wU#Fi?SUDhzzcoTm7+Ej?b|;G*_9) zpQA0JyXoD_7adag#F)Wi(p6-hpyK8ra_xclpbk%_;(pYLO98({o797iz3fA1~*!22rgN6Pi(uV`~THT(eyB)KUrhn zS_d3NciH&s$AXr&aI4+*L?Q?qK`*kZ{D#GE?JzP$*~K84F!7@3s8kG!e%_W- zKgPa|l_3^?Az)*Rr}Ge!#cB`2KPgIQ`~Ga3}-=y4#!dJBbl=;h9N3G@ps8ccI!oWI!q~Q?E z`#gg0TP-7}@zsQF?=^>-L;r#j>iJ91u6rDDRGO)8y>;7aI!b7dBmxKl*{$FM?L%_R>nB#B-N?yfLbH$WqKLf=Yfi#YD*WP~J+nATlm+0LOeE5V9URRug z;zh%UMcsQ-EF+JD_IDn=HCr26-it7HCpj6782+#PCh4TVD}r1`dMFsJtX^sM6{9w~ zx3u8EPun@E^FoA6(Q0Zc;?>0p5$*BRBOhCHf`c!z@-WEQmZM&bxVq;dq+>e9q^ zcIZ&Sa1pQuZddaHp_|vEeNLsyyY^g>*20%+eW74#u*>zi#iVe_MUYV75(Wn{(YB=Z z9fcN88K$VHyIfdtOPvYc(0?}ICgqTd>~*3HvMt34>GMYTmk<*l`6sn&2iaWjVf9r4 zzU~Os9b7=@s?zs2)AhWIcQn z%Oaqqs2S{HtfC)!+#>^4zy9A0s&_R~2o8UGt|4+9<=Pdl(O<59QU4CTSg+M0N1yA7 z&|?F>iY?n+npwx{+5zlf1cIPwE=DIFUm;o;R1AH@Qg#r}Qr9U`OkeK5qZ{dDyjoXti9f z3}G-NocmUcag?BfN(^^%E#FS>$y3JHyB0$fAKNxjhVEcIdqgJ)_6AjB800txjVxqv zHXVdBTy#uzEmz;cO#1p$+fq`aPB4q2tDJfq!?K|U}F&)s_`={SteixqBB&8}VPN#utQ|&itkIc4%zmx3PH!mRF(r5A8~ov-CyX?Jq`+9&#{{`MwrUYHJeI;0>M^57jUfp(}MOgXSg#>R1TUVi3`{_rOMMEd4NhEXbX z!_SY*1CvogHrrU1FS$B{wb)J?99DPaz$}2>5W78@7KApaeFl;2IwqXRakI!Kaf>IC zASS?tC%b6`HpWr%DAMIjrm7e1k&x-#**eu6x%@(AnyJ|oZXtdh`dl1&Rf4?V222vb zB$`KNDro+07W5+}?t%vLBqRpI2x|NpQmH?ecWJ$L2X8{R{?#7lNUZD;wiqU2gxV2k zdS~X!BFB#2gN>6VhK>kc5({YEqEe86G6F}^mYw_g;vW8_b+)o{D#w5 zvHE^x^Lj^tNYsbZN5XA<2*Y-~P3FxuiP6~pQr=~Aeq#-*+tS9w&ZB;P-v>9-Kg{#C zz0U3+JZ`nD(AcU>6s5+?c|H!@WpBdj&dGM7vz~yz=bs;8*IU)XpgzV)qigHrhPA@2 z_fGHcxke{fl|OlQbkN>9B|yeg298px>`DBdX6?Y=%kZi)bHAQ0M`6bB!}(y{sn0$+ z(1fyT#RZAUS(XVIi9C-U9=P9(MB3m%Or$gXsDpLUoD~8;q2s+hS17|)69nN>;JkILHJp1IOf|_+v$HSnwrBv8>|7oNRP^=8}K$&NHB!t zwgH?IGI<=*a`8F*Se#O+@JK&k;^ZO{=_#W)`^WEBo+mIc?R=x8Ws53 zym`W%A7wUO=AYDIg339AKAyUYi-$h1HH=DQbv=$q*Ld7=m)CNN_c2q97^}AEfk_@e z%#>Si{o_U%V*N5O2mvuWpl+l~2(zUZX^397ofa;AAMLWl)zo}GP1Ebmq?kC7>@2CY zG7gE(%KODLx0FGBdf6#9b)Ne(j)l&9PE|bMYra;TGOwBGZ5MIWw|=i^`@<^i#l-wi zS$p?bcKxYpzJAQ8MY&m`xfd4go_D@nTW9+!!*!lPt}i^O#FP6?OCEDk+-i>e%j`7C!spBSi=5%}z-Tu89HAKE` zBE(4GGV%yw;%VEI1ZOWGr#STxw3=EgE1^%^tphZQ5@t;uG93&@8Si55xP%+Tez{0F zrLRJTiiS)eJi!N(s0JHwPdfg7sumwae|b;yTftO#uy^!mlQe&>H1*-{{;)58clRP3 zCDlCkJDRQ!4eINNrq=k+gHbHui*Lk23;*w#i$?F51SvXAOi0QR$2YYT=|ke~b4Hde zu|)Y~^!b9Qc)LN*Nn4Zv2i(M?B|@69f($s=DSEh;W$H^_(jM1)T(aWj;WiDnMgRBw z`&7+AC6nrlDK6G?Ug6e`CBK0=oG^eM2TxTep~7J=lYq;$ok3x4?W_?3>!ZoI*U&_q z4$5w;iHa~81p|@ci}zgUCIo)+7@*0E7rbGj6Z`=Vi?*hiN;>BaHTiPvl-OJ8m%h)$ zOsnkYqU5>8geIVM5^CP++{Rv}i34zi#2WXK7GclkGrIo7?0PPL>p@Z(fmmjY%#phA zUy7(dwh>hZGpjSY{MfB0PP3KB`8fkR-|IB zC+TH%ukB{`UMu}Ny9&(oli^GZVNwD*{9VL}4jpzih?Gjjl9)z`wSEhl_xY@rY27gU zdP(^g_@0A1IYgV{R&Su02{j9oY zQT6`*Z*-^djCSkGZT>=pv3vihI6p5h0SQQG^twQ+U)5Fh;HYRR#CJX2l#dnjR4{E~ zAXdMtv1^zLK^v&qnCYisgr}3y`Ua`&0@4i|IYD}Rj|RAs&j*|xFHOx3%56e3)+N`_ z;8;AIF2!Lao#;-X#}UVmcE`FF^y0}d+y@`e9~$WS+boRXysvzKicAL?!n?xAy^Cvm4ie-7N%dI!a1*H^7DoKH&;toq0l?y+^ zK|jBXiQL-I$9(tyN~yDQDl110yp{j{=`D4&wUVt&_fus{+gk40+B;egHfI9`U8)7J znL@(yZzYD>J-ZeP861dglmPuUW9m_Gi6`1icq=&as0z1=PU%o=xyRcQv{rJZ z{FWJ630hZ$_rFfdyp7rCiQcBrUKsG~BfynSO-4B5U}EL<%a7|x0hz%nZFyJeM15Mv z$-m!9pPp?-Z{;Pencrdou=jXTsn<{Gvf%qvfOI3Pyi$X+ah+dn*|U^@nemEcHDyRcCYC`OauHZkM#5G+xNo?js1bvgPaNv z&jhoq=%(GEdo(`_RI!ye`(3dniuf^rd&?j2+RAzBFggIG{kcM@RIrxj+nq z(Zr^LF4I=@j-g;_gGT+BcmjjdV_SVyYEsxm0=MPGYw@ka_KlB~RzOJGt%a8XYNu0g z-OEVOi|B^3HKle3Xsp|UQ(m?1GxhAOn4X_%x$MRb*IwbV85d0Gtgpk66j(-k$yQ3!+=_tYIsiGs9v>N@A ze|hG)ddvCT@5@Ne_urVU4-nP1Om3cIxVzEl7dK|V(*4SB=qK2bSef%vwB#^k*iRMa zqQ*~EPgl#V*2tnADBl={Z9~;j5xiNDFTjh`{^UAk>c+}wh4gz#pYwa4FUnubTIqZA zS`|H(T`*fdmtF^UIt(IJDpj9ss(#(6zq|o*>x}omR}_1G z^0Yc8pDDrKCKWQ{WxRH17AmO5{KBfSPhE^%yrez6-tol|+MYUIb@(JkzjxWO*5yus z?wZD#nfx%tMKD6NA=fU}?sA?``QW!>%;`e{=%Rf#86!4M$sh1+r(EIi~&iQ~r@y6fCHU@zg&_azq7T>`)_ZFtuvKV0 zSY{(|S&Ni*qTVA?86wgm+< z5`=I`lpy9?yn6Komq!^pKbAthP7!vUsohI)v8<^SdGdR6snDe2URm3!k@Z`0LtjHd zN($*u{b^Qz2EM(N{5q;s#6O{DJnye^mz2HLdYEaC=f?R7 z`w{gh#gb6f>~C}u5^7JX?v%9p(VMxDv3t^gSt*qr4#2CX>yCc5~sClK7boX1Csg1Jz^aWeP z4pA?|++>g(ocJ-arnUi?Y8pcS?DtuJZ_~=fJfAki+*?@v6)5bQEuVNZv$kln+}^Sk zz;#Z8mj`Q_Sd9iaQU5W`3U73mclXF&T{*}YZos z?Jcang(Z(f2H6N_9R*e$O1`$Z#H{B9eSZHN@lB5^;v9BcSNtUKQNm6&ymh|T`h{#* zEkZ(M_c)ykH3bn$+bFXuZ=SZD3|05VHa9JX8)-wDh zvPaAa1?)+^L8OM4c?2~wdM>7-KVTTJ$qi0rf@$zA_y3;ug!WTDDO1$WXQsFu*}sa* z&JtvArbQlAk9k!m&z3T@q=|0F^+l-<{nR`B_r|qR=jEIw(4x2$yuLmiWC`H2c3kK$ z`=3rYc+8Ys2A}sofRWo3s65v2$a?KLv%r$pZWJ;AjDD>q-_Bnmi29L|88>_hAk>{7rc;@GJX?ePEev~; zUp`G4nXuYd=k!D?ca#QoH5}gd#+dL(H)<@7?f{^09`+WW)v@R{nREf!cgF#|pxT~< zxE`}~m_L?`Eq56_V=>UZ7}v+7T*sxcIWx++(tP!L=wG!lPj_jO+&5s_b-cbkf1C3%vushE*(6aG;2jZNG6I~vI4FprBjNc8VG41P8sB$ zUL;bkN8qbzF`l6jT=mOSaTzz;H=8(&WHdVu-AAWiF&^ZqdwqTJ$$9d2{^C^jXz%<& z;LUB{S9#@rEPL^rwLdhXzhX~bE_f4pCjw;Bhh3VgUreuf_}Et6Qu+k%a*7>_D)BO; zLPSd=OX)IT&QGt5Ccg{6ilyM;u$o{-RMeQn7fSGy+C!?q$BnU!L;nR{R-w?dDP7*Q z!JlLPJXIAIQLw&Bt7}fpd|qje0=KGbu=7`ddC0$qAjG4$dP==m_WExx;3Afr$86rfbt-Hv(K7fU}r0sFgd`dYtk+R=w1_lureg~#5>;=iR=Wi!^sR}!f~jGN;F1k z$6+A@I}6rbcniZ?Dzx^x$!h_P5E$W)`)hc?IA-YdboZy6SW7a4N41%OA@q@CJ?uK54ml3AU zi+ix9S;lmDiz7DD1d8nf1REYmIdgD0WSO=P=?(~$w}?>&$sF7v+AkbAmer12F*|Eu zA(LYVP+dN=goKRB`73BCW2u{Aqz7>fp)O<4r_^ z?J+()Os&&PNz^Td-%LM0$9!EEEm3#<6eee$hq=bJ=&?a`j!uGKY}W%IBWAi6&pz)qo#JK~oWQ!}WegmOkxTcvw&+KeA8 z8n2y&OF}BZr;2rGP;j`U5IIzp1Gk4suPpH88NFy-UtZ^bqkX}rumLga6DOHVAMG)8 ziBs02xT*34JLe3qK(CR0D`1saI_yoNfN5K>bDYm{OldZ4m4g`Zx9v`IdeQhMnlcMOT~O92mdc3PF2 zZY;>EAU53ZjQ$uAjdZqB>^E1L zBMy{^R-$TekHnEU2EK|tT{0M^1Nkersz_bs%)h+OdMTp!5jz2)QHo+?B5v}Vnp?uj zi=`2Dko{$9e0aI8M);16V`10Ttaa@(Ur%yPC{5YA$9}Mu1={DZk*Td+8lxw6VhD&& z+6RsshsUW-BNL>sTpl9jQXufogFi>@o%#V`3mP@2oF$tb3F=6veXHAjM{B_cRV zxdljHx%EsZ$km{C)&*j_L`8UAQPZp=p{``hz4{(%mc~y_!rZI6Vo#57Bfbu+lD2LA ziJ3K7J%F-{M#+(hy=L4lxwV5^!gO-v8%YJ0iq^8oBorJli#sHO*|?ZErI%fMWMOMm zj)lQe4eI5Q09~i<5G(liemv%AOle1$fn|TL-J}zziw2}{3^FBklD}&H{Cv;vU5o4F zV+YZ27^qk~SXK{q7&W*Sbfir;9)sGg&kIn2w=8jQo1BmgV0;%H#w6xmM5hakJ{wYF1*+tD8@m>z zC@m_>8CB@GwxmAeA}W>zfy}n91lU`Yw8tPK(SVyYoprtK3|TLAm$_T>^AF2!a9Y^%G#grRWsN7O#$ecgEfD+!#4AM*ztk>=)2)<4v5HZZHBrJrngWm1e=}qO@G7yPA9bZ)sJqq4o zp+KZ48os8gI+;Vb*k_IWY^(`WRryMhSS^d!INxKSmy?hmLHlQ%Mn(Ih|7DDv^cSKG zXz6XtymiJhzcAQ((~Ig3c36W|>miPHQXa=1@*F*SatHlc1?C*ar1q%g^+gb^w!%HD zr-5WIlVv(4+gm^MlS^li#OUtq9Aq-|aI(<5V-XU8w6#s`OUGlVpnPDmYX~J2-5;)K zrf{IsdiB^mBDq^sPJuE&d&MpEJ$lMI)m+b#^S?0cf4Pfa(-(R%&rZPNUpT`38KRA0Pf$6;sP~m1=}{Llrm!Xn) zjcjDs31-yBWxCGo$wa12eYc{5fr3Kfs=`+2dQb&Upg(hIO|;aJV`)FH+*vWZ9VTk= z^G3;0a98jrdKH2YqT;GN%{SyM@3jP=<(3l1-<^98-CwmZ(I>C;pdt0hj74znr}vL! zV;rG&3puNmTEdTo@+*gK`G@glB(mqC6XGkS8;Z*^b%YY3lah~cSLQyPL1&z8{oglw z=Zo(HN`6iYpPD@?Ko-5yBmkf&v)ve4xOb7==Wb3qclbawvL|9c+OMoZjw9 zqB(knIIo$UOd9w6-qz5^3>s;4*A4mO>3atj3$ixtGi_|G06FsV4qOgDKNH8|bJy7! zk3lF{f-ydQqTM7@yoQ7w06w1Xw@*PlL8L|NluyAPttd%RQJpRxQT zQV|_}fiXHGaur0@mz+gLi5&u-^*akQ;Do;7OQ@1o1lQKLorFDG%6Y-N3toIL`FuIf z+)$!_WyxF1q;l-7@Z4 zk#d)~egAF29sZBEgp88D++qjF(4Yy3^?$ygyUM&-IeiUc4qrXfNM6KPxJ>Y!l~tQ- z?FlcYcR@-6$eGI>p`ybxCNU+!42<70!#4v}Dq%DerhUp=mc}4-yXEjq5%)WfT1bCq z&}*fa;1ZRKV{7m9q6O`Z;?GktiMtba_I0gigp7psu__`*?t5b%x z%m{A^Hw+vM)V+xwOG9!Mi8U0i_pz2*JI6%`Pv8I+eW$)+35>QfA5uiKmA`kw*Qb0z z2%0-pj?)S`@VP_27^&`#N?os^6j${}9Xi4q#DJ!l{*+LNNAjTUldfv{1O0yO=rPt# z)sa7nq^=Un5WNuA%R{|0+W+ZMuYf(bC18kj1C z{IKb&1;vV1&URSUtv=2)690^9EhBc>yR<>lbJLS8sP6OVE)d+n|s!i@}z z#&SS=Hw1CF33NL@UerCof+`)(k2lJj){6-02OF)M;5@7t-m!HEON@=Z(S(2EmXC0j zZGKx@HeC_)JYDmc)#{UwCo@3O$G4`sl`_(tE-{lLge|YScE7SCB#y5F6xu77v+q3; zkh-3FTO*B+zR$;h|w!edW+5C3$a%WhpWaUO(4 zYW?O76}n!`f*;o8Vz|}2ouUA^Jm)@;0a;);zRWN3>o-9wYqYe-JT#gE2-s*(6pO%wQ>wVy~$W-x; zoTFevtTyyyq3%#Wl&u$%*20^>Pjj-Y%=NYz@r`|GXGP?8XROF6uDy7vF8v!!L_XexKeD|S3i)k+r0H?@Pr6{nVXvgiJ3$&`6+DXQ! z|A0%7cArCGm7ROxWf$+3pPI+6vxK@SFfcFy^blryx4-x)EPkXG+2!kHx0(35Y!B2Y zk>l1#H|6Y)>ey&O4C#FiV;(5w*J)t3OOIxWYKquCBETP-oSfNBW`(#~&3s5s7Tphd zcJzD016Wm)%eyvO1)NHFIu$m%6D^?O$9>VY@kGwj+_v8Cj=^(Nniiji=GmIakveGz z`_pAkE%GAl*vG{;njkG*ZVI+VAO-?|bVRmr?u-G1@H%Id4ejp35Y)cip|ayTMfcIA%{GnxWKjRVgzr5itUY?G3a(4gYKyc()~-xS=S5~W)8Kad z3>Y}VN}r;OZxPz2X(L>Q{7~LC?93 zjmlMk5mBB^i@?x^7L8-=m^&08R!ZDSeieuKp3Ihe&t@R;G+$;2sYB=KGKHHTd&0^B z+asS38W|j4W=-rvgwhoRUQ9&AaI5U2MVo^mJ|+&k;|-&kR%q&OfTnyVsl-9z*qN3N z;&5)x4N(h|=@(e9Q(qomn+z1Hm&1D3OFv&DDhD2U+#<%K)Pso5P#nBn#v|Mi_7V&g zi$i?E0RR~YSc84Xp}=D1DnC@1MgWQGA4ZxBeCc6z2$`CM+Y8tFD=@bvOS%&Rp36d(dILL9nqC-k0I{mR=*Y4aC1&4>z#B4W31&a5B}$KWP!z>rWleo|i5*bv9Nz z?PX75-_TU!vr1L&J!4sPc?TskE%szp`}#i$=OAtXTWAOg$XhChCDxt9SYTP;4XVnt zsz>dvoFD#5i&Z&uBl4SMH3Dh9iy9URQuWWDUEJCz4J;WIW*Sb~b!bjcetI{3?`%c; z_B!+L?c=D);U$HZrhA%Hl^oIa)&6i92`ovdacWX;&fr&Jnj_Glm0(eR18UQ_gokM3 zDjKGyV=R-tV*HetK~<^8L9Rz33xq2E(C#|*R?jd;TYn1RmRXey;V^ za#a&nGEgvq5e`NHt~`@6`cIhFUy;du`fb8D!mpPpWy;ILW`Lx4m=v`_B1;lPDbY>= zC~qGfbg@^0JXp6<#2MsS46FF9@0tYlhwZ{D*}oouY%?=?io!u+>Yxg>BCF75;qroi zBP-tX#7+hJxJmr~cJhv8PhySBM`zs$n92AACS%Wr_M%9O3=r&!=;(7ut{c}g0SoD= z3jF4TPm#%)=XWCr@b!PQg#bou*ymADYFgyGSpndNdB)RF5o9e%tgT$?0TYcUD7@;F zdnb(5MM%a{SPZ!x!hp|vx{w)34NPY}dhztKpXXtY3C0e)*x5`6HuQb27Jc;-U6`gttbcp4FfC6y6UN zj3|jly+2jOSwtJYKd+t3Zsq!uv6__lH;FIKGs3>2s^}}mNq)}nF;@!R<_bDCK!Lk4 zgCo_epUvx8CB#y4)+@-_<~~(6Pw-C)MEi^PObF6vhhpabfH)P2p5eH`@=^6tuZD?B zPbk=NWZlt7HNEaS#~0tnA8WJ4&1#ZFvY(~X|GGawC8SalF-HFue>i=`9+i4QYmkIx zz=Rfr8`J%ng&wXh>eMqwFt5~Is+4Cy=#+*ODX)J7{wND>o&TS%Ta=D^#O-VU-Owr8 zX=!wu4Cr1;t4TjTGv*$elTC(u2mUGA_H>xsU?CAxiZWhhi$`Zz=EbBlHX<{bDP@13 z`WhAlem(s3tmm%y7ly6PGul|p?(=%#qM8B-PyLCb=ctsHR-d=ylz#Txw~FnLbz5J; z{J>x7lX&&+;8I3Fbu;Hh3hxwW+|2ySLWc~fK9Dl>~iQM@#tP#b`{u=4tEN+;OT_aG<;|S!p(;3V2q0vky!%TWiq?=S-*k;Q0z(RpN zF1^5v#I?^llW&_+V4h;~pTz9@Bf2GuBjfNH-BN$5Y%w}M`HzcueObiVwCV-vvy!u( z4s2b?LNu~3BZ;>pV@P6PQGr2>#p+#W8X(U%8X`#Wde;>bpAJuCw zvhgN50~u7L`gP)m{Idqgsk0T*Hmaq#FtkD}$UTZRg>0t7~|lTyNMoRa~qmT<%2h`53;W}gAD&mzi^ zL*O-6gNGpY|3bKuU7kJH%78}N$Msntt)<=e`Jq~K*wSl(Io{uvrYHP(>u4Kun<>x% z?&njgyOR9}CsXRN{dL`?ViouM{v}UdD@{hdds5CD1F`KMt1K2mL$l zuPv&8ceL*LN>Hx1j#kwU1mECr2^QkmY5`T!KmKx~ok`PwL~^c?L!^{H)UzS2TUTbx zWEIZgR#zDKxr)_+kZHT~QorvP=p4N9O1UBKw9(AWTNte;eL|(wz*-VZ5@l5C}aY|Wa(bJ7Xp(wzJjrGg&7r(ZmgmIf#=&Q_W zG<5qyX{O_S4-J7d`2BT2n<1FDnO&mNAdY@5DWs$L3^w@p%RAhjxESD9+v;pWe1g%# z`zy8YA7UMwRbaK8G-nU3r^zeZq3nlCZjD@>R*8(+kn4m`R~~H6Te+MyOzMWUDbN1E z#VaKdZ<#y)zIc#*KK9OkduAQ~CS(1Y5!8KfA4MGui2Fb5d+rx*I$|GB*J8i={M^wr zjo7mY+|LWpG&hSimc4EV9IfCD@|j!i{20r(y*;6!#&Rbsa6hNGkV6=gnIeV=k~GR> zml6_|2QJA61v})f0l8g4cPpO4lJ@dTAh7En&BK{8qL^-c%n&AKw6jQA+Yb8n zXX?Am-#nuA<8L9mTMM^IX*AuG2Q0I>VN$y%R`{vC>6gg49zCX-`Lm^~Udg^#iy^-$ z2fKowXF)^Ku@SHGs@8*$!%-w*m!*AW%>*bI<=XwRNP+l;$!=AzqudK|HG5IoJtC{W zuW=hkTve2g#@adnsrO&?S6 z*5@`YH*XZ-1nsZfFFbISR`Vd(mFl9S+Wm*fqdxHqyVXn5lX*Vc7wKw)=YTVP8>3<` z61jJr_jvWaw~PXP_oJ!}tWe9o6Bz;K?kSShwn-d7q3sq}N029^u_rmX=&om(sQb{I zn}n1m2w6N(mzgAnQRrK}7B{HeX?{gr&+uz~zIwf6=gEJ9blvI-qs^n3O=V1G{->R& zt6%1f!z_KdIXmMEae%eE>zeLrM#{asGC8q#${*Q56(wW+(`DGtT*YRFnL_ONp4=a* zs;PHcm_C|UfnKqVm7Nna%-epT<&^A8MFsfvf{9ono@Ju)&Nx}cLOZ&-EE6?Y$Sk=t z1aJ{uXzC8BfyJwPu;30%^L<~K|B3!Q=1_b#=b&$339DXq=j?k#IOAZB{$w(xyluiP z3yf=xEc_T}IGM=E5tr7M%GtX7O;gew?z^`KYGxXI6OjIYeC%!}o)b-50ownzt+AG^ z>iC%KiJP}*pULq0?K3WqhRgJ}tEWcv>g#dq}zU#=$S zIHE50LJxclO3fMt$xlk@(pT$nDc9`S`%FgD_US`?+TY!d>#`4;xf*8sh`eX=YR5#> z8O)V5ar8a`{dav>9iXEI<3FHA`*!Qr?bFJ+5T5$BdZE|Aq7Ga-zfwb?b)@*U&1XMA$)fk=QW|3 z1)3g+NgR*ilLH$sVnIfCqRO?j)Rh91Tjnkm@Ne%m`%Gq`>Ca4~cN6~nkX2i?`s?_4;Ez^q zbc>)#Q+sy7FN4VtRTXlSVIt3iF!S{5Yr>aY&=@%RbnlVQygm!NxJ&8iM?qb^CM}z| z8%#`eO61>$mF@}L|4rqD&}zeqv!uqiSKYSNdpC|GM}CU*K7a`aoyllaNx#vkp1zF9 z#pH!6?>3@*Kk;ldzLLtcS>1F=ntv55!OXH`@4oG+otUd|5jknJ#1arQW5+^by*r z6IGaGex}HLIEOkKtj~6payj=VofPCriB1^igbHBT>)TiAOGdF-{9JUV0a|F`@lBQP zfMEI_QJ^@Bg-@2JZGKj0MQMKM+D1KL1cv+3DK+duY$HA|>;WrESeZ-kNg8 zs#U?m)O5^9qSzVVhfkXb;p5CT43wgnanR?fmw2lFR~%WwBS*+UtgjE=Ytzjnx%~Cg zCKYbvTkSJ(J}|6aYv3i9($gQ3JArqW`_&`8`6NAWs2wd6=x^#K*C*0t-oCAWHc^M| zjscw`0Iy3_yEQyqJ>M?-cc5)E(m&vQg~jdJKEvwa;q#p zl}8jW(OTu}g81pVJ$c+@?3#t%FWH`}%kL05%G9H83@Lv&Z7*K_UunF#{b)$5 zf3zem+V`%Bsr2GOcdk7qJ;~)}gk>wB$Zna%$0&>n<*z zdoY(Tu7;IU8`;-bNX!Arg55)8xmEE03iw-HfcxUS_v4@SbM@YqFi`3zmDk+E!+$wG za{So$-Q%N5wOJq7{+Gp{(Z)K29h~R>rJ*i=y(>2NDWwA?Tc}{ST;5HvYnJOL;dU_- z+jAxLv<+N;A~jvhEH66}$soAPzOLHWOK<&NUDkRj{8TgHd!Fo>!2WeB3i`rk9+DW ze_pS;#X}B#m33royeaFqz&1QVTcIcmI*t^x(k*GqQelJnI)#oe6~BTT9i zIT@2AJj>EpUNp{;s*?#CyG3^|pxg6xLMe=>!`x1=sg3H^PuK?{gvq-@7Q17 ztGJ!}kMloJHm$NzePtowM*f6zZ!D*$wSA#0b_OSlh>w=gKlQoRA^FJSS{7GYRa-p8 z@L3X_&YImLI~4;UTIncEV{Wzaa`|*fLyx}W+f}8?V4O00A#`Z1TDW}>X7QoKyH_a5 z)ghG;Gy>Y{zgZvJ?CNkD>E^ zXZwBI`19=yVkCmZCP8emsZo)H*g;!LmBgyrwH2RQF%l}&9*wO-YgFx4tfEF#jTWua zHb$*lrQ`7j+{f|$;XaQ0ysr28I?ur__8SU>VR~vC9KoR(cXV_cNm2PEUyG6;@749a zc6;+K(EPsQMUL9S9GKa~##H{gK7<@6z}ILzyzq{WU0R-Nq{Y$r|1=uEria>VV@vd2 zVy73ZO-8YRZ)+AEBD5rFvKGm64(ELE$Kq;!=h#%q4S0@lBW&VDT)g?9*yvCLQ}ue` zxsvTYg;?)Q-f}AB-dQd?}>tH96m9a2@1HM-^}=gHmQHr z$c-6|JpUBl6zWa<3*GbKO{(a*ds|AZnt}D6L=a@;`~@tzS-%>G^;>(UI~7>(KjB6| zxnCa%a7d4!Zb9XLKdAT}FlJw}RRX!BWUg1+G(CRj3wEZeqkGC-@|s5}^O1|7Vb9B? zp|a(L@s<&dI%%+D&pPZIzq!E$=Soz{A?UdpVxrVnT;)s{TdGVx5j zTlDDfSG{n3xR|tDvSjX1`b4>Th3|Jr=Q<|qEdRi&E+64Rkc)mUywLg9#FIg94I&(o zLm)rqN|aS?%wMaB{Q;UdMtC_Ri*%*Hx7J0ny}m2+8U5F(z7&R6iOYgSLG@sDCH5|J zp4x&gBEFNL52Nfwij?DOwah|wt96s}JqvNzMy$ypf>jb5<#}jw*cJJ<+JH+l-eOrQ zO~FtPAo)KH&0m32l>+vnX6Jt2VrxwSG0tH}N#G zMSOiwxOT>=T{St5*s6dGj5&Gq;ZVk<1pKGsoKqu7>d1zm;P-y+bffnYKIohpoS|yk z0PjiH9d_SMNOe{}EqD?5-Y}a?m@&DUh5i$+1|Xg0un2bPwTCjLxMuU$((@r1psAai zcfU0|_GXX3j^4}ifm1!ZFKXOAHRs8AMg-pdoVn;I5)zsCXwyLdws-k9ns>Xc*4Sng zILBI~Xr%i`>h|P1xu-%$0U#{EE3vnmul)Hc#JkBN1EB4m8z9$%ei9aXjo+I=6uA*FR%6fjd9dslF>!u|hzujoE*)1}>-T-!>44PGx_ zxjfFORCRr=dfsg{T=^tjkECsp@ks+bl!AleL)4g8q9A*wK{M7*$tM44K zyk0-Wrt~0x%@?USf#WS8qZZn^qY}fymNW5zlAKzUmk5z;X_Ol~MPi6DRpGB~`CHk8AC{*_3)Y=?XHtp-@`(&Bpxf{jvIV zRjd4U+&hCS|z2uOaM#t;!GceoQ;?>z8 zpw|#`z?LZS7lxA5Qt4~$^ASFm(xPmF$>@?-cc|2SQQjh1J0R%{$8ntori3Ui@&*n* z1zY1&R7m&4oJzRe$p^iS*2YSg6x?a45OeZwg5(@F7jL-H{Z|A^{fF73lre>4qc0IZ zDtYxQ*XDn_b`K{`{I8~*VI*7Cw|nLD!*7xkU)TnF&KD4A;8?FmJ1o2TlKppx2FeZ8 zg&~ECE=ctSiUJz6E0Lp1rL^&kC?I>$a+#yE8A;D9-0a96+;>aLo~e4{n5r7W?=KqX zT66c-GKK?wcXmR0&R-zQM@o@S5L3D+w8!0&Iwlh?pb#e6#mtR*MA2mpYn)s)s_;wY zy-txXYXa$UBv-O&i8nuqy`QCpB4EONN?GhNZ1zKR_U=&}JXqiUG zY`>ryx>s^op<~Z?2;{9&&%1Q8cmBW`Kd-Pp6Drgi?46?%^WcvKVKPhtIf)n|J`&6_ zgE+ni+Y^jQm=ZkWd)|8KtB(0Fk-h09-&jeksc#NmhMI4vR7r||r%65^l)2QM^>n7+ z;$w3<4}R(B_G`z!MWik}f2B5q+bxYRp?3AW2(p5hVVPr=Ap%PF$6pf``8S0XDb{5X zdc;0;Wih>1XwP@&G|dTLxOS(S$?8fXAat*K#s&fi{C#g`H+R`yAyRTkF|1u((=9k4 z-#Q5z?Eci0MIQ&AG%mln{gkb2@duC5Js_XBrdlB{+u4Wla%If0;1^{u(PV(PN~M4t z$~|%--s56XuA+lPN>9F(ye@=4{b7E@9x{rC@Xh1;Ty4gC8~R|7=V5=%&{;@|6$t9+Qq9_DHA<}@*9{Pim53t z9&r+AuJvoXumn};+X_sXXPTC&rPPJle)8g)WFJmMM_u*3=`j~4koJ;ze^5ohG;I`L z#FM2_KtLGjI?v&ZlYK%%+ts)TUbINhL~&Xl*j&xG@Dg+kIJ@t}Pr%NE$FPJZU1!gxSW|H#h%O$?OyPiW@GC>J6YHK%E@Nr=t=W?kXyYjaTSb6hZK=aiE60)Wp z5)C`;fpJ)CRC`G4yN>?5*<4*?bWs)@>u5EI7=B=vnipam@cBOm#IYPvW$YE0{*iSR zB{5$zlvHAI+ly_k#yY+n*>vd=V+_bDdANjOzG0CluXs;^Bot@9`PQ*E;SGyPA8J{W zh@9+>jh+kaY#!ji@Lv&AT~^S+ehDJ1FF~E;!ch&TZOU@_Lp-0IOO;%{M{l}5byw-t zA&`rjIKWv>i_32ba?YCvX~Dq(Z%o*cd8=w|!503$JsoVxp0ZfVvgjWnM2;>eZ~a7Q z>kVOzuAIrFDQ2D0r1A{{otLB>FQ^FowC2m&LYj1C#s|gEYeVrb2iSR2X3)9!k6^6J zRf{yO^3k4*N(1{~AM88Cz_1@UD984$1*DYPXvv{c+nB1Sm;D~t%a(m2+!xtFnfq!9 zu^n$rb%BEfPi##kF4`GDyh&mgO#KH!ARhGhg<+0=pulJIzn(s}Ni=}+nhed6V+#5! z27J<|`4cr~$!sAZx9b!TS6Y0U@g&{*6@GN_|Fp&Xv*^Gq>}@iJ880Pr$JxXC%KU5{ zuMWu{&A*N15Xy>#|KFZL>Kpx5cAW2(*)Or1QvBhH@M<-M{k6g7F-N3>f<{U);$MQz zh)$Q&OZ^k|tJJ_I&*uieM)sWe^k}30FsWknYKo=lylXmf`w==-q4#9pgQG~cj$EFu z)i}h}gxlAz7=?iSh7R<5G~%YFp9IB25H_>(B@mynaZVvVeo|JNrg@r>uU9)s&$UKq zS`t}pn1r&bIeKN6(O;uftqz}{vS+S!PCv;Ohtg+o#~M1kTuNY$@nEbh7G78di`OB`j4cw$qLbD#xD-?BS$oCX6cG9sidlDJM>Y z{3S1wc>NJ72X0qJX9VGkJz0*UH1G2 zq_T?y=}v=g&VF{tPAmQUFRzF35FyKg3-$tAVtE%dn1QmX_U^N*+upCFgufH0J8@@)YR<^$S-{^~v($sgK{>ezJ)= zEz#hsMg`{ov2>{6(Nt3OxZOEr20*>PX68#gCxv^RTHdeSX+!5s7EkNdz^N{XXc*I~ z)7lqb-b=19-RMb5G1lPx3LKmZ=#Ly<)#Vp+3BT4H62rxwm}{Tgja$vR%ddPsVmbT5 z!IG@d`<<%^wFELURX#BBYO}OX)1QLI`(d3Hek-pFmSJwtrRvM6-oZnQv>3ta#$#jy zw&#Ol?Zq=f+_hjW0YrWmu#t731XiiveypS?a|!fyyDIrN-w`8&ig#88l5}d)zf^AH zeiUf|=g^3if*4syqZikR0uI1T0(ndkY{E-M2Opmr_b1S852)d z$FVkzjIa=Y)*|>GHDwTGl{&Na?HT-n@*VeV-K~-UvdKk(j*LY8{Sg_DA}pRBW^paS z@Ri1TtdKf>+StTnkvm#g!eN}bx~dR8V>m=3nBE#zFP8fZ+`TyP4r4(Pu{!H%w0~9D z#^=T+OG1Feo!->cl+YLA_$pC9O{6xc#OiHrCn}{a_*?;zjy7h;fK4LBFus^T7#Axz~CgJZ?QIzfxgt>?U)aS3cdG{lHB#@zSOm$7!Ty?TB}FF&(GG zuM0a;KxXO55G1Qt9JEZ(N||I;Z%^+lw;w-ZwMZG?_y*E`QJCY~#^(WS#7Q!xrU9|p zD%)O|;*a&!5q0cZXH8kJqyuKy>CEypM9^r)g?7V}VU%d1cki35Y&ct1A>xC2qD^8I z>SLPqU{eg;h09+O`;~j_g!vfO4%3zuEkI%COmpG?*uY7_i;NhvwU$;s0e(!-Jt!3T zh|@!$=i2oX`v5x;W4fB9y=tQNBU-BIqvg4LoNh3?stsNV0f=2IF&i+ ze*b?92al>KOHt20MJYFa$>c23a+K+&Xh~kO36qzGwGtXb2*$#c1*`D7hV%VhMz7rS zotH!uA=*^6VBdV#R@2IM7_)+jV}&{F*Mr>(E@V>M-w#kJa#pE_MHOf5zWmKI*D1FL z-T<&3yX>+NoBpZMub$xY$4!nZw}k$YUWkVPV61t|JeU1K-N#UWY9-D9NV$AN?pR z&O@DjEAasqmxFh*U%JMXp6UD8K9Hz6bY5tK{=l~T360f&PcC7vp_k;ML^tsS0I02C zGLv!MK8Cxt0P5|Vn0bgsWI(YL37rX>*+2s(GhM$-2S*Lu3S;;^v4i2Oevg^rxE zDptn?MXu}#<95!z`)YQsxr|9eo^_MTjQ9kR6Odh_j_Ojk*vlzo1`Y?s#@@c&E2D{D zk|Fq(Tgu+C6NV*whI$5Emv{aK8{4zWxr(8Ev3@h0mGp3R20s@l#cr*TOPMdrOp+ z@PZpv2r`lXN2{$kf;{onfhWoJ{BUGs4m};=&QPZ^8L#-c(!ZM&2mm_yuQ=($xPYyH zN-O`IvS+T(x)TXX@0;kVufW%fJ<@n`9+nL`gLuu72~wsHtyT;bXWmd#a<0lsLB{IX z26tJ#|KmqVTBqbtOH*khr_}64t;u;yLHmjZA&7gR`@a(4Kl3m%&0#rYsie^$Qsyl5 zU0mutHg*YfRy?Wyyzuj{k1ltrkQ;__4Lz`OvJL4$`aKOmfR5CKlTmPd_ao~xnLT&> zo@-yo9LrbOsxpm!)_{J0qONSkr0(C4OftPJF!}islj#CgyP>-BYxe50%yBk>MK4wl z?Nq~(x1ZXA)qP>8gbsy`C;9Y}V_|30|GbEe<|LG|le+L+8VH(}OZpo`?(xMzZ4-** zzJP^)Kfdgf_(f34urjKyTj6@%^YH|WsuPmBf`O&TgC1NT-q(9&-uCGWRr|VwBuu#M zNy+!O^X2^F52tFE&g8|r}S6d^ zWY&XZc5_YmxyVmG8>f@SpOMdwcXb~cJvTlTrbv3(NBdK*1I`AMrHh><%Oug#;HC#D z<@%IFO!)mE9M7s-OthfmY85qx^^84l9qSP59)lOG+%S7s=eEqF}aLkn0PEwJc_RRUzLui!==#-Ga4_N-6k`Z zqHgj|j0SXL@&qp3+w=Z3Na}M{_x5FO^W)JNDswNiY@BN}iAxi|xzY4HU)}UATOwGz zbfsY1bHLto@ZUL8H%>8g2|b>t_r|Ze*&oXp)hzF44VNt?rRf^F-T#L*MtGAazF;K8 zvV=2Mb8Y(2h+iNS97;WFINy*YCiBNVCnCOF%qJ$dS-+2W%CquFIxKE=Kv(f3zf>OvJG-YG%Wyd;nr?E-n3J``46d3irlA z3}NUTg>8_~;CK$PGW3Ql9_Y)~yQn>8m#EGAD&Ni(WhKJBZ9|r!tYTB(ahNh%#koM! zW$zUs0WYATw(mp_@b{ZACEjW1fL%ipTgsg4K02J#hdnDgHSD&K2HDiRL? z?1^iKUayExg_RqlA07~e8JHs2u5xw-c~?>RuyDJVlW&g1Q2;S)Jda|W6G;mSVWC+T z#%IdBEXX+r_H^SaX^lkU6QuiP%*E4(`mA$VBZJP$Hg%c$NVbyo3DOGl&TymdGfHVta78Gncgh|OiJp%YA!W9ww ze(Y04#eNf}8EufN8EZaDURgo}u@P^3CdYD<`2*Kp@OxjD?g2nEy$|q0 z*$p%miEW#gU}P*l`G&~QLqyn@h09jz`y4raU(~6N`)1FK7cbIf-Y1B~o-RLGdU5blH$N zvRFmMkd)E7%AqQL&MjWk4apdAS?NIj*{oP$OfodM8;nexnj+xFjhI+Xe3QxRVNJQR zeZx)sjDue@f zSn4xa^F5$MP8~LnR8{?`N#;Aif%Y-(n{&S!;?^Yg#y@0~Iw? z(=8h{%CmK6%$OheW4gXrLuU&K;FF1GU4@p7*DVI*!dh%c_>v{F+E_K zxePCX*VeW44__ZBFiY9kcz>Ok2fsmW$*^C$GpH!?y1p8fjQI3(an}GlK)dl`#M19Y zvwsj}+56YX7F!NeDJM8XqsH3bQs>G2S5GrF?iDX94LlIC_bW-}ANE}an#OdI2c*Ay zxEleVH_D@^EjB-e#w@% z4&Ix)BdYznc5<(PZgg^&J!5f8aWHNT|98ZzckVag&oTKQ;BK~*T1yZmPaq>}>sF{a z-f}l(09pz8e1(rZJ{)*YB&yBD8aUBT-~M`r=MgCTs@T1RKPSzWDlUGnj1U(4%ca^iv?cVDdbUrxGVg&lM#EgQ<{lFD)-T%vjuR|Ctt<|_ zh~gs!FQtZ4D;xuHK^NMAH@yf^(~zI5;)0w<=?Y5YK*1T|0wR7dGn`@x=)@hO@K%HA(hEzIeh-HXZ1hnv~d!+=+IPcc(+_ed;pHsklL5<8cT6L0ct zfjW$U{t;UoOO_hRCA7c-M1=>Nhel(3Mn{_gtUM$An(E}{mj`A+CT4GK!>Yc?68rj~ zjps*sELyA2=S;>MiC>Xda#p&>E3GQ1;u$VI6i<#9bKK0ZAH(ZXN-l8$q$ck7Oh-xI z0(y;XOr~du-u29@c%msM2m6=N1>x61P>N)la5yQixz!&N&XSog%WwQDDiQTjD29CL zeKV&DbeK)TGiGCD8mX~Jmx`$;LpcFm(G99Y`kPuP+d$TwM_c!|P$JTO+VywrLsuhc zQxIyb@U5YmlKyGnS7llXvd)D~NWPKnK9VKHIaS-=kKm99U1G9kM~HFzdis)IM!$3D z!@z)z#eHKvP?IqNTXD4q@TZ$CGl5>TT5hIp3+lxS81EaTtn$QXd zc1AXI#6x30L1D^H+XW=Uoc-r?!SAJ_jo=KJv69?yW94IGXbc5_5DWhM*J{J3c0Y-m zP(AYoDt1*oS!6>DVUrFGf+chyV&0cY<$=8m^hlYX-v=_rlw26vs>MA%neA`eehx|_~2+-$@mk`%sRH@lgX+YyBn;_)QEbG%F zWSW5NK&KGllAoX`lx0YKdVAwyc{sR3cuinMJ4m zyx{02d;F8J@e46ktSnokkd7#p(?xm$D~gy))#42$r-^JZFOn1zU4+#kl zoQs)$GFzz<*oVv&8Wc#bdsOZul<@D&nJ@`EO?=~!R<09_guvAGyaKJi#5R-;XbU(bPee)05hS15+M%&M9QpygJC-GN zO&+UTxfd^1uvOTjICcsEvm<&Y?9Nws2qVSCr2@K4QmKi*II|ckf&ZMHvIv;6YSxhh z?W>vGUT4=FyZf8w{mH$O+Sn)P0OtwqDMaNvn)Ks)H4Ukbnc4E`8?AK)Q6-Qu?zrjU zBu~Knv$|$U8aJDh`|Bhz^3F0i;SKJlXZ*UF8C_U71fTT>Vo@NI6j;-$o1cxzAz(#{ zG|m+o0EG8a)n8azh=izpn#z=qRo`_k$uCx;YrO&Gme8An+wVH{T8F^R403<5FHxxe#1-&oe~?hOAQ?h#(A2P}zGI42-k zz^+&-e>lAy@qA(sFo(#7_aYkv)i|ifS{~<%hAAKuv>J0_1WU=nWPsL7+ne%bdv#hT z{$6ZO?@=6hGM{tJy>Rlt^q4CCXI*LnK|IzI*{u$pF+Q82eP2p~rfpxalsqKxlhA$> zhU$IBM!7`f0JX(^wiKZ}kvo$)8sfH9PK`Hg9U*j!>0mZ3v|}>agW`b@g7jx%L#WoC zYq0VDPcjo10;g{xS4~G606+3P$9vv!fDW9b4eG5pyv{@M4-bvdZ?L%lcTq4GB0GR1 z$7XxU;4z_T**JgT&M*thd=+(8;(UrXffY#I$lvdwg;>zwrdh%^cN`qm1Iw>vx2m97 z2fq0gdw6M~eFFKEmOwNtSzzKpYs{Y=@rltebdnT0N7{o;2#M)e5r1D`NaYSY>SGF% z3@FkL^Wu$Z(qt}tCRNq@Gci$e&FXEs;hD_x!Q@dNg)EW$;9lngM=a;Sk{DXjc4>l~ zWPCcVmN?_3#~RV~^F>InA(@3-Hh#1O0L`T#*eR{6z}z?pPJ)M)*4Ac5djQHibk7kQ z(k!yh0d0Z-JR|laIjR<4Dj?`W$Zt^7&$f+njOZX=J9TKv!WanyN2%NgeSlww(IrPA z<1tU-ZF$1mE4+GsY|kcYHwbx5EKfWcumw|7CepUvrk1ZR*drY4K$t&1>51NG4v5>v zV?_aq5>9DaWQ|Q%eb75A2acs_f|cpCX#R}no)rBY#Q!C$+8eFpn0gx#k(Xa2AP&-s zK`ICd0FP^*_U~huccTrX4+|bk!cbF^Z3fJfO&KKe!$%v9jeIvpkd zuCD$|J8qS&uNj}elK{MKX+;p}?jnEsxcD{A+GkwJ|HFnKJWIr(rseC1dt_K6hY)nC z`J>nV*TuK2cTNH`;hZxut($EbsR>~TT{vZ~){Vvc+C5E-opBFv z_kDg=1t$nQ@>*c9R-=mPi?4!V$GqXkATP zdRYc=HVsr>DGefDCG6eJvu6`2=-?#hpVd>zf+yk0bOEmmA&P=9)ACdVcMldo)7O&J zRAVoXcLDtVThy1gUG^wOQ-193Ve^d+kA~c4%Xf(6cLn>l_WqVBH%ZWpr!>oKLyaV8 z?9)OJ>$$f^^f8u{OoEl;Y!c9LchB*OK}ph@3N>3anDo-K9Pz%%6NutQ)_tWsx4;s_ zmsveDh1(mScK$w1B)s_;H~+n^P%Dl;xE8CXi|D_?n=q9v1vtEElQfB*s<2CZU<_T; z`Nwu>m23AdfeZAoxMX&HA~s=IH&de2h!45bu`rhP^H2n48PcEg3bx}ulSz>s(2#95 z!!pLHp8>4Iy%VB5C?)=6ZC7crK%Yvw-`X_C{D$cwNzxj;ejs zJjoJUKe>}h+u01d?Qi=%zXeT66^M!MjCjwb?r@aC`~o32ca4F{MV^-`X3q-q7z)b-Mn16)BPNc`tq-&j0Pe!7V zoL0%ndI#(8vHn{$The8kdu_18KonSSqdY$XpQG~cR<=u@qrS{UDuzmXXDDN=9(4&Z zi<%&xc444-hT=(&r1iCHv$$&o*>K%^{wAXWE`x1mnY@3ywNfyHkS@>R_-&H0itsIq z$!x}>LZRfqsXKR+RGoM|DMn`3#GYw6J$6mf3M{G8PBG%>KG!bV%+OY zBsbwZ!~I7_k_=m4eB$i}Y9$TzX%iu_JVr5+Przv&v;F*W&W&C49<%X5i&waQy>3Qr zn|giF`hsPLZ03Gm>s@`mKK=*e=PO@|mJF&}rMPfM%kstEcVZW)^txBQE z&LRJoc2`fDm8IJTj`!jg+AIBSN@hc6+$9piBdYNt#Q z9k?0T2GMgvlR{j8X^GzMH^t1x}( z#vsj-jY$^_HqI_jG?Sv)=6&r#i*3g+G2s}ZA(c8mNQEgCC<#0M+AN;S>9i}_Nid6O z&kc63e3YXr4)O29D5Ob{Gv+7q;HVeV zWW9N!)Vs=XtOyRJ?`Dw~(Uc}Y5%zN`zJ$ddH)Uv?ziV*mB6(ftVF%;DOn`UR=n{KG z^`RQfrm^t#WYPfKG>k&L!qIrG<*R}D*T^=`7>shgd8eMk(2@1aK_*YB$-VUYSsM&| z=Ziul#$Jo;mxZ86;hUBqrtft1E|?=K@=Rqu8}rBZB7Wfl*zS3ER>ULT3u$z`Nd*NW zzs^0>&-#iJf`pHC*=)o%Oun0nm?bp2~)T9h4bca?3^YYcl+rwA&|Gx@m~7 zDowv>Vl#8~K8m=HzR^p>cA~+#A*NIV9Mkt3APnV|Vpn+nIU~T6Pmz2`-=G&mY*LZh zc=0S_?POW)RB7$GRkTy=&`~)-wt;F_0O`F|&)Ww2>xd|!lmfg>j>CpPzO&=UU-xX| z8Yu9#B%ROg$bmr|TtF+Xqt)fBg+|jX}N-g*yvo@aQ|YBF(Nz zU$m%>cf&Un+c*>GW^B+`)$Ip$r_;Zc)78O(-3ED+e1^_BHO%8l>!yUMbXQHJzua8z^@)!I+X zE?elgptTs|7kS~;mj2SNq=j`di1$|Qzv~7{rbn1x{JWOHH?o&!(!@xQ-B5vqY7wQV zpVN~mPgM-ZykKB(6j&xxTGfs7gL-}mNYr$Zg$?l~GCGT%KDWFx?K;D+mgqO_pBq0ni_d z>_IPEy6H?^o906ib}3Fp6eF{)SGLaj_~-L?$NxxYK+}Ef*mkl={x0(8A=F{u20#AT z;0e=M9YshaqrGaVE!qKtiY&KAuxQzh*z>2hZB zS#WBiM2by@(4){#Vglg_tn1uci`#XX?nhST5NlUc3`&~;4K&Oq4bQn!@|J;JU8|dk zTNjkgvw*H)E&Q9+EW*OA9>!JNtp(k%!uz@pTI67681-Z+PWq{DRu?u$aOoF;5>QX8 zWp{*Cir64US`yL$A>Kdw$$ZEAe4bP|{ZuJvsM8VuE;p(~NxpDPl68VSkItQIM80 z;3i07`zX@SJ1O+Hw+9-poV_fn)dGB$uP(9B=%G<&DV&n{W^1uS?&@(lvq#?Cq+IF^c_YS!Fu68Hsc1EvdS|7}*g0~pg zaM-YE?WSl6Tx#v7XbM-IJ604WjX#h1u^9C>(!#-!D2;QIZEkV>8qRkqLr}mk;(a!M zM0wEA-R1wPKq90+`P&a)T~oNq(?hzEfzEZ7$Tsha4mKOZ9o~%&-IXeqnFUH+B$pW| ztOSvn(KObMe{@4Ut^*{`yfK!r*eTP1TW^P&>R&MAHjCLk5bXzb;MDzY9CmHVvITZ< zyaYiID-*h8m#&QGKnV-d#>qWPUyaFlw!zyb4PKq3&fD!PF*U!xr#D7HTLd&m>O#4C~i}scx?`m-aWTVyp~wxuf}H%>r&+)d~&Fl)`!NVP_?Vf2dq{hF^q}y6@l;*)_gtQm2w)f7GgcGiPT2im~KL zcqjSd`(Q+;^j9W@h!3emv*oG>L`T%TN!;;J3={p?8I>Tqvpf#J2BAf?elU1W>V+)> zQipQVB)`{@?*^su*7d*XH(&%VYOl5}1gj(ouzh`ACDE?MTG)c|vO!H8`vvo!V;(^G z!s_eawEl-v$=8cLIO3zr=@#EkbuP>dLOyvEV6lS>zebY?S zGR8`G)!ggllc)}^CnuEf^N!T}AHNngSU-!}u6Cq&G`1di7t2BqwDO)gphp39WX1F8 zDHEBzvk$bqAe&KP2D}$D+3>f9mTQ_=WV_ag*=D-chUVB??(xj-@VEGo%Zmwa(*uDu zcE%ZnlQ|g`s!pmYk)o49CiOk}djdr?Wi3yyrt__q$&Q(I8DxN6=JV*&G{2*(Ighsd zrka~petwJ&4~5-HR*?-()2qg*f65-bTNbQ$IOD?e;WV(ZdO%fk_-1&h{GC}pH^+^j zsnVx4FFpp``W|%CDQ|FONB^?adgM1{0cE4dd51MKzR<(OB+ZJ-MRNoSlULdo?>bBJ ztD~$f&1J+j-@eSN<^ zMkH9wKlbW^Twp3;U!K@XeiajD0RLqC2@|2zzC9l!zp(2O zEAy1%or!%HHB>S9_ONTY?$(PUkMQh{xV}X{RD1I6!=0V(?lXT6Cp7-NUbWI^iKNF|FS>QwY;Q+WZ=VrCo+(;vzA^jc zJ{kQO2XWhP?7Umi=a)GAjZzq{nO)?>w^5o`77yLNTFbcGu}8tDIq>FMZd)=L1M3Yd z3w0mVW@i>M@0csvcvQN~Z@+_?NlJ5iG}C$IhSH%6?E0umpJuq{^J=6-$feVO%ycui z7X{6ZD@Lp*_8zR6xUa&8-F;a*cPf7Fd?AnY0fwaE&Oeh?X3Hp{2i@Fk{nKxy6$n?8 z74K)QjF}w#(o&ADtdy5Xdzs0bp`+H4W0|Esrc+`!Cdb7o>(!~qRbyb`;AETcfi&0% zS!=uD;Tbwk_&?oZ>9G$5dAe`t2PZM~*dHyE&s$U~=L^2BWWm2*!bBw6B8~g}XV7}4 z^QL7nosl5q$*GZ{qVHIo!7z<5CCW-jYC;P({1+=r7xi2Q_L)nR9{ze1oq}6w*Yf!m zV3IMOR4(}(cTtjfZoDG2{UAZ_0r!oCk5sFlhB4g+N;%IKBEF6K`Xk>NLps94(~q{g zYbx;BTZs}J-e|3RfH%%dAivY%L_oRo_m z(o_%;k{Zyr1Bx(IYXUbLS~gw+oTZ9uUww$CLE*+1P9Z)(#9fIcYX;QXx=`hyf*bQU zn%k?1J)$%DBx1t|BD?uQI&oN62Oi~VC!CBdCc@7se5Y>A-qr zYI7N9%=r+-vUa;0(Vp`nBXqX-Qp{Ggrqn76dwXQoOsb}?ihKu#8%dMaUuSaPbiQ_> z{kx>Lepo906g))%MwTlSt-uqnhk?~A0e%BlUliOiN6v|_JTnqd{=hRC zm6$(7Igqf>AGnZ8Sov(my4slI{SHYuP+}eA{rT&ppXt&h1MNWFnw>29A*c`P$}>lh zE`aq{HOlx=uLPQp0;u;NM1H=)VlK15O30xtlePiV zWG;_GYEL~3gLU)Hw?7k!b@{dS@7gYf3=orb3&+;HNh0%CN2p%s6G~)jAKHDn_pI}_ zKG%G(NUxbKK{oyRmv6aug9To8hC`F|aDhvv;r^1Uc8(m?yP?YqU0-%Z`FPG0C4B~5 z-dv_=f*|Au$vx@xLT!4BmZMXv3+bF_VC%Nd`ZXhJhohwE01_w9H*-~a=ip}dSPZY^ z>;9y35rOwprus+TC}%giXqLK^TYp@#lz9nFJ}y!C(eYEeIZACF+U2nf=}(vwc(Dcg z!h_oh$@Cw}4JmB)x-%WBdhJ2Zzkv-NKF0t#<{>p91jjnsL{P{C$Q5MH5%iid6Fco0}O_uRfE1K zyh(BELY_qQNv!fB;7yMOS6hVr%}f>k?vS@qe{JECj-Xip*$;rOsWMe6F#Qciq=!vr+PBOieu)VPMxx9dBGsEH zc01Tom#aflvUl3PetEtpqyHz2mvNCFedzt5mXI@<8^X|5bsLB$fshCj-#Z%Qnf|Wo z?(W7sA*(K<=l!LdJFofg2UT+0LhgZ!XpOR#ptdRCZI6elpBaEdQYqV#z9`SiK01=& z`oWiUF+cWrEA4+ENEFX1Hy~L5%o&+Gy9@@qc$v!>PZdnIXFAWV>t`~m+LZBpv7D7W zXtZ(|L1ISto|7r1fek@oDTn&)m4sJpzqTV|^x{(z^R1^PH=@|A?*uLl{f@538p>~G z*WCH@N@!@Dc_!lLy|0sS6wkAue@$C4%S-b+DOq+GHr!T>gY_5+2nVcMjoMZ?Wl<#_ zfczL{asxb(63>qUFSDWTLrmJLif^}pNATwcSTvb)2vQ&+IKX8O)eGV!w%;;yH&RqY zzH$2fTE783?p7Y*iJVtm`3ToEenkH+`)3Pkp!91lT7VmLouNOfYs`Q5+F)I#!s}#N z>a=TP7F$CY2&|NbF$tgDIodf)JW4r=-~GGotaq3_*8`)non08Tomf(vHIuN+V9HjH z@+@c6_-I)}z8&{ErZ=j$S_1{aJf~gj_hgU$I32~=>2eriKh)Vsj{jP^p}Q!LHVhiQ z1d4mAn)#;R3u}?xXi+XV_h)#iUE^;C_n(}&M%qB&#xr!*)F-m>4emekIl=gzV=>eP z^18%j`8yP`=?5e z7XwT<_MY|NmGDw{BFZ1knw-xA!_Uc;yGaFHanA)rs6sRyTEv@W<iaCTu7SlCn z7r7Kil)3n=8hf$QQO21M5~fxGM5IBWNMf2kH_{Dv`i~#itfq0EvYVC&Co1xKLV~OZ zvp{Ove_NLaL_V8^C-5hwdjU1$667}~Vnjmxd4}%^>e0-V#`m#wY>tE&MIH+TkxLJk z5|BL~RY$4D(qO?kDZZ^FBP?+8L{~jj2AiBH2iuMlaZFGqPo>NyY@(aB1(Nqk3Pxzj zF#jQ-x*AWd$zL5z4$vJDNB}1SdNFxRS0kLmuJXg@hKe~bbP81h(RXm^1uFw+?M3fuhrG(}XxvKrrAq1IE zB6b1Sjmx05>WpnTz|Ig65|1;tK|Nr~x)xj}_n90}y zQ%-YE8?nv#OgV(woC`TOhTa&4p&=wD$LJuZoK=Q7l*6QuLpepxBWLC7Ke&FmuG{T; zJ|B_ z{zm#6qK-gVl2V>6;VpyS^i-tFtR9QGpVy~FLxJ(ZR_}`_e_`tAFsD>JIZ!f29IBfni8=3F!@7qs$e#T`W?NdM3MSp%)e$nuyCe43 zgR10OG_=$$L(qor4SQZxtnJ^u{aIJpbXO9a@o(SsveMn?;E>n9c+x+kST!{%HZYR_!86qe6oX|smU_Luw=M3^jZ;j zcb$c9{dY?JaVyX-IxHVb6~^$By$hC`vPXB-dNo!NLaRLtM_d1ng&PbkME#f=dIG!m?xCal^EUUl1EjLBM z6NcTs*R7qx#k_}_r=EXXkt*#tp?Yd})E73r@M;R25Dur^RP9`IQ2$zA`ANU-{X8F7Y!|I>|1OVE)sg~t?t==?lR{vJhizH3#ni!7@|wpQw{ z1G30{C|bOiN8`VO-sRmVJweULWdPoC>$}CW`L0g{ovwHGR`crSWZon zn-!((Ie!+>UWP9+g47^Pa?lu{gz z{>?`du_&v3ZBzR0{QCzN0=^}}X~vw1SHCHn2m(|7_$AA})e}AR?=Yy{v5sk@Y6c?G z=~OS=1x!0nmfW$8nupauN zihH^}IU+MMa8T7x&y1Y*x~f{dFul&-oeL+Zh~e{4u}lU5lXc;Afw{Xi?Tk+5gFjET z72$+A@r)~%G+eL<$uWGn@{=o;jWdB{Q0*iwhP*^tR5CdKe{jnsy@C`o%UFFd4aWi4 z2cAM~u;WX1lI>>zR)w*glzn(cjj_mST2|!WJCD<+50b~vz)I@X8|#Gs+lFVTSLcE5 zD>~PB41})m)_?Amk&ONqp0S<4DO#N`K!)G6UiovqHt6a?LH;ejO--F}2JQ|vSGSgb zzC*~2=kPO(yC)6z6j61m z3)cahsLcIiZ~Q2Ul9*3u=@_kJc+szWCFkv#obH8?mRji%Ld%^jon ztJxc27M`v=5U-p5r76Qw-esA(PhQoh>SH~yfVo|?1+j69@H|)@tDDu$eXPy4sF?9> z5i47j{588;a%HG>ttY3RfBs3ekjc>mi%C<5W_Ah82sm5RMX92)#&+a{Pw$hVxQm|IXe=qAnaaA@*v6C= z3QHJV99Xdoj#^d2+(^ARXz(Um`0h^Vt>h*4{_s71emt4Zi&t65Rdh^Bz@z zMDHwt3!gmoFJk*3avw#Z2E*qBYfzqoi$i#zK&2 zqU!zUiJkgSLDHZ&0S>PWhQ5DiD2b0%%%y$defqM~hjDQMpLERliu3tY$r0jJ>j9bn zy4%CW>aI%_CI2g!iJgwpS@uz4G&Ra!2B1^nSPw*9-B724rV5`P@KN6!FRsswXJ0FQ zW-==}_US&LW-Vbj@fE?>w^A+J-YSPMNfqGUP6IPv6;>gxrC$J?Z~YK0wP$NBCvIu(o);-)!Y`3l{HSlo zJl76!UvBSinyc#Pz>CEfd>r%gF5^!r@QMwt;Z8-OU=qC!sNzvw8%ldV>=z}Ny9m^M6IXSG1U9(?%k z3vZ~&Xc;YZEFN&FHv2Xcv>`U-K}I$g!FbjuEjs2bca|Xn@~BQ}WIdBN9l(>qz{LxQ z2P6aolkeQzP^ig0b`U;zAH)@szC@V$Yo(?Z-WJm=T`yE8G1?Yp-cusX1=6?9TEPy4 z6v_FXWEP+BNen1$(gANf=mxJJX@5MJZh2sy*-oc{T?MI&LBlWxKQck8$Mf9}dl#$y zG}3JU4?LykKpn6vtdQFCTZC10Bzhqs18f>5fClzn>SSx0+*lg~K@3F_+UB^sUnVny zK!Stjc}J;&aVY}NCNuSN8o#`>IoFkG2J+J2qXr%DaaM(71C4~@XgYrEUx+;)PCZ~X zXU4ITZVSWdYtLur?VxVAy|*S}Wi8b{3d+7ct=4y#b4`$n0R<{aPqr})6y7xyz1_{9 zo6=`JWYzc|mP@GejehBWQW(jfxh_g`9{sm7zZ%^T3Ydpa#=FlT#;N18t<$s!IW9WUV|@%TP80*8u0D1%KUyn926U zauFpv{3ScYbnIS8#4|&hVk5M^igW0}yp%q^M7T@P%U@#1Vt@)&s0Wbc7R3ZA8*^(& z*LTLaJ+06+5=J0{`B;K7hB{m#Kzr|0`&)X27OO;u_>`bxmU3ONRu3Lq#mynw#y}xI|)g=k>qAi25n2q+$T+JPpJ4YSI$3u9|V-L?bVXt;;u0`lI+=c7o7qhD4#-Si(N0W^M69d6x{{z*lxne zP@;UO&yEZ^FOi3rGkz)EL;~)X6DlrzQ`d{;Ln2#|bEo^4hLYb4IbM-dHSB}qYYHjt znWT%tUaxJ0@t6G{N<5l6d1yK^6{K}{&cVRhk&ft}1lpWyI!Pflx` zL7dtMOeS2f!d!AG8Y@8HiipqWJ-`%qXs`?trfl_A%MHhi#;a+b^~!OA6|bbIYq_e9 z@Q(9h0l}FlSnvQB;MInZHCAcXR-#_v>!1 z^I^WG#Fv-P|3Rro{RLeYTlG<_Ov!}Bd(r!O-dya&ZI1V=JouZ{QPVHjB^Y>FHviFi zV*q8XR-fmeRs3aOA%|5w&t@5SxaiWV`w7R|BTj51={9^MEW~hPGkxRx!P`2L)=C+Y zx^K`9pMkdO!{RG*hDzze4)r&G_U8t22moYy8R1KwE2%Ou`~wk{y_#<6h&fdlH^sz%5r}cah7rKJN#O{Br~(8J_LFIfSa%+3LtT?EP7aa1 z#CPrYy1!swI&U#(Nv-1V0@DkcRp0EVynQpz zeKtm~dS)*2Nw!i=W3U9QI`G=LM9ulr{`sKA`|#ChNWO>xrCLaHUq>qgmxDYOQn~vn zcGEi#nX5jppZ3Pn{%)0BHC{&Fw7a($mnHeIa-cVb^GUJpQ9mn=sxMLa#8u9@H#}TB zC0ETAqYsTe58(9+p8N-+GN9jGcW>Gb-{>BT3+Oma+FwcKAM>-ZmMVe5NVvwLZf zO^!k!yzqq`7$FG9JxJZR&n$@o6e}lPNkFIpIE$URFg)#c(Jh~ z_350p`9MjnN8?LP$P&W{Cls#z_55IVu0gf1W!hnWFbS7nn{q}T9%o31uFsYj$u3Tq ze$TDxkS!(jKTiyQ1kY*YGTj(1`p2qTT&VSqY)K(UR!%xO$T?qZS=A82^DmoK zj=^q(vXX~@PoW4*HO3lC!|?U4r#u0VP18|u+b{!Y$O$NBfp4m#JQJrSqdf7UEOZ{sQu9y{x}IRQvgx$G2RCk^=?~A#6mvd zkK)VANImcRFqyTE%@AQQEv{f^dw85uyF|;y5skpeMo>KbIX@pp;^>Pp{v)m6I8lsuL2&G;!sfnZz5QvcLKn!`ORhGCRhUcIeeOPSX zh-#7D%-BEr5vjwCsyg_s6vK{uNHAR8TQ9$-XdEw} zKCg!+Pzi!1aR6v4O{kGVDx`!1lo^4B9seD>91F7FE^O4^!9KPJB(St}47iXv!v4XM zhdOd_#aE&N`W%gXotLd+{}a54=Fo*;b@qjNx@0k9`7*eDlJrT#)Y^QX)7FTdh#hcH zH@cL+@E(0v{xG6$*iN1AqZ6P6d;cvBj&~TI}&uwYYDlx9_IB8*vWuNHV@v zdgaoI>f)V0>}0&x&`dxH$gj8Qm--vcfw~yqASSn}7e%!zMPl@x>W7BBp#OAE!;tU? z^px+4wn);$(D52d(0HC*5s?pFfr~9#RP9ZY;ra6!~{WBm#r}~Lpjdzv~GV$34H1$FKQsSYSbOo}0a$Zh7dX=af!KNxn z@2;HrBY@;dBgXtvcJ8Z9zqGE48%uCu{3%;&IbCE0jC{$LO;QC-Rr#ddNDc20RS5wS z1nUK$X2{B(G(WX>F}c>S3RI2_e(rBxe^&T`U{W-nkCs%$Gafp11=OD#E=l6kS}As5 zDV53cl!}8M)UxilGz<@C6G^%)f`Ysgv=LhEcRk2_daW--JDCbk>|G~j*SkLNqD$*_ zDtxVKg^jn=00QqnXiy&zoa$B85K^tSshD&q+W8#mrQoeep|%8 zsRf#--y$m(U=#!&iI9n&JTBnunbpN?c2D<9w}hMoh+GRh%LXVQCe{|Ve+MW+Pc@gu@kxQX8te-NfsyR62oH5I{UKo7Ny-^_ zkX|>`=qX7;Y@FA>!16$&&@8PWyAEk`fW+oqFd*=ZCj;V~<~1Ch&?WqXY)TclgWi3YM7 z6$^aduJ{#vK6Pg8wQm65FO;U1jq`m4 zFBXqqP1}@bs(_SoA()v~5DGp2Vod2bQ=P?!&H~ck8EoC%#1ah~0Aj6a<^ZO|KCD}K zZa;oz{&#H6wF>vt%htIt)zm9)*g4Mq#=us)T)Iah))IsI=>`yNM!K!FUc+c zSWgvJ8B10-k|Y~RQFB(|j04@*svv}Zyshp}1VGzLf3w5pHJWvbHLfw%VGi`wbov?) zpvJJ;ZvysK6DWWHL?9k16ah6~lEVq%RoW#6N?67Jw`AbamyV|Ht0I9aRs&*>q>KhY zuzT>sA2{7=aY|+c<*KWkfd>y679;oL!{+`yWFEYLaa`C~hwyvX|MaW(SI(M~9~&DI z60+di+Sk@!zH?kvr?7hc3SWx=8`Wf8i~rHlb0eiF$m{l^#1gSDtQMPReBLk3bTuk> z$@sYmbTt1ujo+=Qa$!!Q_V*r{e8Sk@BksTC4-<;t~y9J6TqkKOMjSZ9H!HPyPs#GcZJzX%g3)}q6AnTVW}#Cl=LjX$?QXjkYS zTu@&$}QMF%@#*I_1j4XWT${YyU2v>()I9j*O(&=r^TkYcWcI)q=t|$t}4cNzSg#! z`vz7Q{oZ+~wm0$i`R|qGKNwd`&*aqWZLlkPPROzVn8rt5J&Dt1=klBnSDYf-E?lz0 zn%_x3i^JJ0zL?!80Mb>wlkCTx?#-MPx5!FtQd`gI{6LL5j)1S<)DE+d_MZ{UASefL zQWD-gqtP*#3vEF%D68U-P(~>eJW*B5oH9iZ#P)~oPCJYD%my3IabKwZ@B1%@Qeni< z%6aw7?*S%KOob^8P=4&^>rBVc%R8B0ebPfs@Svti=850`tEO1U zHdlvQxe^>H#v}8!_uW_DGxuenh+^|!Ht)2) zxXTTvvJ9C@lT64QXTTAOEy1x-^QxBe0zkKtrxVQ>QoR~VHj!BOYpMcY>Xxo3{aRaq`A1;Y~;bj7Cg_gUmW zK37w;Kmk*+<@kpvrq9o4KBO|7BbHM?E{P+zRuJ)oHwlj|Gf2sMR?5B0&RB{*{G&B* z8l;&k@I3qE?d>)}tLpbtXYz=M_^nQOQkvT`oxRwu*#x;`T?`vz(p@uLLCCzjG!(tN zh}k3}`2BZFu6*Ov`N7ctw&%K>=<08VR8c?UT1kWjzsLVDdvAaEc-UE%%oeo+$)SdR zkPQmWY+4Bl6=G;o3w-jd2de_iqm+)qwS@hpSCvfl#iheP@Ci5)83t6SKo-c>LWFA9 z_LgMq$G`(^##qae3z>EPIlZM9v~*Ab-++Uz%@H0i3fG!1-+FoPwey*5tDHd5fve@d zXU|e^H8n>h;Za1GDY`l_H17e)8*<7jpy{uTDtpOVxXKI0T7P;#d>C9_HlsPauFeGO zC*+28PY;G_(-ijE(J#cT4{7-%pVvrZj8It)z&+5ujGqa0bhJ_V3s#rly*gfz)0=UPV^m9Vu{y)9OqRR7 z8rDE+mwDDXAFgmaLlwRH0PuUA0}KMGFDL-6@lPH|THGG}kf7KLp1W#NSkW;*vzaY+ z(EmHdL(#_v_)om+XZKp$r|P2=W1$C*`X>4`a!;y4%LY-9XaCr%b4w$KsrdrCnlql+ z_(SF5EET7q!BKmz7tq5fuS7Iypb6V8Z;%ZwsXygqAGD-0M~zSyF(=aw+rP=*O`JC068f8%oWO>1P_VHyG;B@$(VwzyHUL-p4Z>TVoIS6 z0XYGQBka8L7ZNI;7{sm9GP+wUdvBDrL&+6GZ#SojZ*LX^?`KyUzaz7(jv5*x-sNb; zH@BBr<$5?lyO4!1iKdAgP$D}Fee3HCN~T$hPph)gjGJn#X)-teo0+gtcG<5!#x2Io z8qJ^0=70Z;0--wWB!PPO5B=&_K@Tr$l&#gZOkxhTXH+A{7G=+uB=|uNQQ;^qO>6^d z_cUI1kF?$Tm=RVK22cxOaO8YF{{#1VqRp6E3Fs2_etmUhDts_0yD4uP2U}kmQBgP~F9U{Ye+4hCMT9QAzbrQq(*neQpGA#h2(SriML5b<4xK+00zi+=b4>$Y_ zXlO!Jyz36SK+J`aCb!c(~9?iLup zci|mlce$AuuPoZm4~|a^e^A?Xq}@1s*wEri5^E;JTDV`w=w8i*#$T1!_E@fB2F$g? z`jXMpm}%(S-|E^fn{76O##Sp2opODtp~`d0_xxPH1V%&<*$=FV1o^#){oQOD!s*Gs ztEYGFGwly2$Vg1^N5zJ8R$NNBWgV-= zmg!K(oni#5*X#dHCP2FkGqbu@1125=O zAgfdHSW@=1#CP-EGGslQtVd^(IA=FMjbMxPs?)x5YNiWG)7)Cfue4qysXz6U)6o}aYy2JpF~F1?+y+Y8!7n4_iV@xv2$ zNSr;(Gus0zH>di28*=hH1Timlyf*3ga}s@jI5$kAe?;KyWV)|hwrVDsOU>DoeSABb z;9dXwan}wp!k*syv?YY=fi^1q*I0}ltPZb~ql|iRr;RTy@ndp)TkbS+IWW)>sU$!4 zu##={a{%1mY%DGig)#>VcKiWb$O^7`VM!d|%l9r#w58pt&u`7I?`@XDz_p_3t5#VJ z)8GHROkF^cCPtvnd0e-RJkIszOau*np0NlO0Tq2B354xQixdNcrCg_>T|e8tT~;=l zCXUuTEn1xPEJUZFDEmcxAsepX?VnqaHCnTZc8aE^E0v=!G0k?R*TlZ=+i;mu*=!on zAw5CU1CjOg;Ne5dQL5&y9!yC$>iGu|a2q>k@;gps9JHE_}_rT-1<)YWvU81x0` z3#y;GI$h?ix0RyBcu3eiPkr5$AR`epO__)cx%E7?=F3HKe`)Wesp({;ZSZzOV71}f zrtbj()Jz`l^>q!t27T>yG@mKB!aUGrdvVNZdtkNt5@l5u7|Zde3C6*Kt#G;R#C{jw zm8fhBvd5zPa_~->ubs)YW>!2iBSSjk4CiyGj)fW7fBV*R|cd%GJLV z_&CpC%c~z|5O-ehGwVT|;9#r&g`gYs9-^r2aHX@TOF~hia#(X9u+l&$9OWo1lC720$illjd%IE}EKW%z z%ypzWuf#&Qo07BiS7r2TQmkd0TdHh39o#(g)(wKA zO#R*m#2l`U=((!;zu{uugQQ3)KL`syKzEC)KxE=$)(Iado2}2j)K@>8PHlTVk?}Ut z^I7FY(zhY6)WE^=vfQ6c&Ec5}i;B_Yy{0&1DmIWg-$f?v%uP-bO<<#f)VoFM4;oK> z=HJGTxLmV}t*IkJyQ3AKJ8r*`1=MxFK6XIw2+-$%M}(N5Z!m-z5J4<^;jBODN6_+9bsl5LfEjs|r{|(b8$1&FN12%|gR)~&K|8gJ z*Ebxacl{{$74D2aBX*6foao$bb&dRWD;~X&hZm^sINqNeMzB_1uxIB+Wl0C>d%Ut# zXwD0IMbyqFY~+hka++{s$4WOLbGrNWT#ZcQ>@z<9;XaW@;-sTcDTZ_A=kIY5yil0I zTSCVVsXxSFV1^Ga;Z@NBKtqWfNYLK%oTR{QQO?>th8+n33DOf6h2RXw?^=wK%J-D% z`WPMX%{Jq(XLD@ZNb^q>ra?nK{ZedD94!Rxxni_JgarcDiO_OczMpKG5*3u{mkwJ_1#Lv zmKHuDV2Pn0bga$CArWCf1{ynzm{B8a;%_JAtS?bVYNYorqed-{-mNg5N~z_mN2(;N z>Kgpq-{ju80lxztnF3Lcdn-ar69rRS9X`zMh5?X%L8{53@x<+RVZQO}`zmL^p6bPG=MpKJlIBBSTXN3r24BW7U zn`57^e)~DDlHh2UKKtC_0cR!+*o;F-B{zrkA(64R9nqZ~+KY1*;A`AS_j=m^vf0{1 z%Tn7;-%Ah&R3^09q9Y8Y$<)T9`RPjwnl1xoRO#Q=YmX_WQdQH_7Cc~DxGdiGktA_5 zO!=1SMjmCR_Dn!ZfU7F5R5|8m?j>Q{j`L0sW68ugaWBd}A1L6guTiC(A6cAnH+5%} zw!1RB`R+n1X3M#rQMQYs6&3=UQQ7s~Eu5!;-&Qbxi_`fzTPCORw~rHy{?oE)qVTgWL?CXa`4gW{j_3$drqaSy#@de zX7ILcK)wF`;3|kPjJm#lUAp6ZE+LgiB2_Ivd8{ktOyd2WIRFu_E#Jx#O$Iz>I7u~) zRds49(R5#%%gGD9JVinq4@&2M4ZzmhKdU}9+A#3{r)pWI)WMHT>T{bKK`Jg6$2aVYSZA1C^Icc-kUB(_kV7&9%kjYnB1?Q)2tk?jNMD# zi0@q!s82HW0lTeFc_0J+Uff94DATm@*88V9MG5ZSart*2Yr$ErA?Nc*;*RvPL|NQE z6~C$nORPLk7Uakk8_KKTk+a;RbXseo?&*_<&M{^BwNUq;>T)9G9hq z|NV=3L^EfknW^QZ7|`K@_LqR?0ob~B<33o@_w=|r0!**^>YHopBZXh=C;gOis-D6e zi=Bh~3{FFMGwd{M8bAb2fQ9tMm_|ICUX3s?gepL>o0uLN+6mGWpOSW5^k9$8$V6w{X(7AO;|rScLYpSH;ZhY>!Gv{ll%X` zjd2J6;{qH@yzF4df0z#YYYRerePZ#;D}UDt3Xo%!dt7{ULGftwDIw_++%|9z(D>?< zF945By~Q_6HO+~RE?Jc3@*C)SIYjXr_$S161%YJ$9GGU52N} zrJKT@jn`%w#fw}^qAFqDqp9%1W|53*89h ze_`=ThL6+uQfhn|Ybuky5c*6b zm{JzZSTBc~HrOT{HQW!8L|6@#uoxE6Kp2nc5XIn+5<(bI*BH% z>J-JtcUUWPTNQ8Gmw;#TxkO{sp?ZneHG#nn#XrY@u=C1_s~-;bKuQ(82ZxBRa|VAC z!}JUcgSRznnqYe8IL`>H8(Ot@o>iSmiY?)h;@;Bqcm$g4%K6_ zSSa*OD8Mu&g+Na?f*71Uc-XdvOk!k?t2~j+0+_7T?5J`nZ#lc{ZiSV&-`Z8aR_JBz z_UxKJ;d`Q(bJb!{q1-O(=7?-QJ-@_xfLiQZX74dy<5`W2tanWC`uw^VzS)qD6exar zKXby7X}0sg!AUOZ@o=v#{HiCHmj3O`k(V9->m>EW2?sUNo<+^k{IPpUvJdW-37&|I zKaJQOkyCxK)MCf2bPyf>qkxo^{6vRcRhf=R^t<|-)m-*VSFZ%;;Ss*9DqBzh+N!zt z(p{)8mx)^u4yE-5_1-+A+O^iUmT9`+j8~VXfy3fCo+oNael9;596maFIF5cpoeBN> zR`9DcMxf+9Q_WzeUNTCB#K{KAt5#tIcH-xPP; z?ItteH?2ZA4v~L1!ndKVlRLk9CEo89IDHEzEne^UG5=&b<%(CkwshPx62?v}XiL-1 zk<@Gceu<=eT3D?rN>4vn!73Gv@=v&;N|0w%54W>B>pB!n0?pQ%$G=$dr2I{s6A?ie z4MVqA@rzKUL`7~M%NHj)8xP*ERToaprWid++l!I7@wWfRj6u=aiZo6M&gUS(d)2MXeKzs_li z1Ankzg(LRLZO~hukN;Q@-`XE{QzTe-P5M5W?VCDb4DrN2caDK9=w+@ z7aX~YKWBy?D#BS{>pJHhjFL?}6f`|Hi3tI%T+NTIMV>Qx$Htja5z;ecI6(*ipkx|k z>fXuAif7udVpq=yC6;Nk=nC9pW&6qCG~(umR#y{oSjcDCABhM5jRUXDiV7@YrHrC^ z_a_o|_Kvbi2YY^t$Y&oisQ0sT5%{1F7L>0n^eATNR`6<<`|ZRJ}&h5zuAErQP}}`uG&IXfNL56?e_@Zj7iw z2Ae=A|2d!Bf55z0k-H;It^H27Htw$#63%=nLmQNoGEw z3#*Ll-~CMtWr^~@OgwhZOq9}6NC@+z2v??K-!|y_ zMhh-e8nMHAvIS#%k~vM>i5xgGR@W|zv>&5;_91sqRJ}rzmEQt@cuz38tIMle?7-nlWh*#@_akL&^chch7c^;;%2iUoMIS#P-vzP5R zp#B9Zf#!raB)^#xl)a6A?KN+(ox;eGK*9^MydZ_^S)7}<6iE6){u|UgA ztn$@9#10(GD`%fsT~=se*M+5-;rw=Pt^A9yIors9lR}GJp@uKgh1O#)l)k_&<#vJ) zlS5vo$}W#puHc(B$|6|W8?UR@>TFr(tjpGpg5~P^yI8F^+2zz#An8&^qu*m8QgG6A zOb07;K*T@Bi(P`EPa(GG;X)T~Tg1s#%p3D^o4sD45Ka99V7p_674JjOe%?+f5+w`k zk*V=hEIwFq1Lxx8u7qaT%q4@+#$(7{@**XZ?6>lm=114zB`?Mslr*g$uR5h&$-eO@ zwO6XM?FWK0qf*@Q-N3Dck(+Yon^#{uFUn!Y98qN)SD;Xcl zL4nGg?k!z5qp$c=i}_femdyjh9M2-a2ed4_Z`i8?n(+;Bk#_Hysx;^)z) zom!)RU;jBz6FsQ)r)F^l}XktW<`u)Wc?v!U&M?r|7g zftx;hw~qu2jDbSc%?9pJu1cg?h)pR<&MsWTuj?Kt&74_k`XwaO8m|Fk(D)Be86+>`;szxJH`XG}})$9QEzI<2R6L@VGO=M9`X0=qvd+%!gI;Bmavaupo zwh;y0Z^;Kdk*CJfms|#0?gj?Zt-+g}>@L~++=p-7M9ZYqo=q$|e~|-?MKf|z)Qina zRnxt-N-pWmN9)@~HUHgvC=h;|ui?@QSE1Q&EE8`3wm!KXao(Nxq1zKLo4Dc2e&zICf_gE#`%|draaV) zX>jXvJ{nDEHeGU;E%13f4%P)!@D_KOb8@sz3np{ww{td`LSYY3!V5cdp zO$SesLGgvwP>nY{k_ukc!20JR;1G3Xi*~t+pRmA z53gX3*q&blLPWs*`3urRzS?sdt}d*)ztzN@f}b0s4F3K0GtWHFq(_?ZWI<9WK`{Btw%vJI$6QLqV;p=x@&>^ebt-@jMU>u~$cbyz^%^mma7 zaSP+VtVh~lS(7gjKaU>o7V8apzSopUz2_y; zHhBd**58%6ev}gK#>W{QzCg4~+^9}<0ZhHT{3TV`KA@0|4KUvgcb!>b4Q=nmK?vU_ zFqei1Hz?UXSomI>>vx+5 z!GZRN_(y4#2YeX|XA7g}v3QwGbMGshS{y_8RYwiZ=g)~IA;Xu15y#aX zJ{A>TWSjnCj3$V29+BG)HY~)PO-G-i^(qgG z=LnA!28Y4E2@bW5R*I#YrEG+n4fPR7d2UV8%PH|N9v!JdJ`O(v81DV{`j&@6yy79{ zC``^(W+IS}iwhMmSXiik30?bkfJD{ zF4<%jhtj{4KNQYgNd-`=f$pX_k;~WWjmoEibNT7_4OW6OHb`$~*t04fpY(dtu|YzL zUdIP0jLbJR_9cHzMvVkxpn^$O``^VPXDePlcR3_Snxahl<;~W|siDsQ4O{5)NfmxZ*AQ-m0(a?}5VRX|!X$Qvr|Bert#E3h-bp7xo z!u*TJhFz>=8X_}x&b}FIbnRFslu^yv^qQ2TEpPWA3$K1U+7(@1O#xn61i%8b^o zm;aD?1`kkaF%S+Oij|0ngkkEWpnnn&k@#9e?~R1 zgtaISw)vAO$?j2zs6_|&H!e{PaJYCqa{e@abi$)qz~O^M45fbm#9MmBW@cRx7`2`{ zf9+bsSsd6xA33ei)tP%;RM&`EFUkFEI*P8Hl{r$%_x~w6_eZAN|Brv}Zk1Eb zHZh0B<~V80`LHR>`AprELv52oA>=Sd-57>3b3QevoH{s`^Hjqe%Bkc`F(T))N_BsI z|AOnc>w3Rmujlje=pmPQTebB&Q0<4>3*?I7;AQSz5pL7SwuyEuK$32-O$Ywb+8FQo z%{_Oh-15&KA5AxER&VR=>!Hqy3cELZ3NaLga`Kd>kvt=zU&UvFZJ~|;wfPCF$qXiZ zlBSv&Su}a_o$FLidqnW+n2h+{Qn8sPrMz3R$GDptRT;ggf9p^7&K3_XxjRmN*YnjV zPOMtoY<%PKxzi54zwm-27n;n?g$sf+=7%4l{oXoi7TC5k?1U%S?wk^`q#?QlV8k=R z6GXtPv*e@Qjdh)W?L&`#N-Qt_u(P{p_Ip9l0|oWnb=ry`&d%Yh!xqf8M)1d6S9lg9 zBab3G-rEUW@BHvvga!X71y!2c^%^{F2>-xxlWb3HKLGjfT$6Yck+#g$Aa!rKc4%K#gD*cv44Y)9; z2QRGnd6`tczL4Zx%0p{Fu$jwkrxL)<)=gHIs*-?bfRA+_R5^f zu1;9O!Tklz+a_7GpB;5;X?%@RK!EhE&y=223Me8QfcyLFW)C(2`gr2f5Xpr&OK-z$ znUiM4Q@+x#t!wuM%00i-))@=ma%@*egtK|$N)$T$w@Wj{D8>s|Cv4JtaY{3hO!*#) zQ@Qa3mUfcKy8A@R$HPNFFFNeOjBnJ#h~qAu_^04i%Q9h0_}4)5?C*p#@E?P~uh;ZT zj>Q00fi{#GPPIeFiYl8?^(kOA2AOT)n{8G9UYqEg7fY#*y_Phcune7jMKY#1asuc* z6TLXe*s^N73Ac&LFzCi}#Hzm5e*k@2W5ACq$y+8=1vPus>i*s5G0}h;&K5E9vvXen z)LS99()6so`;J!mIe0PHxb&_Um9-LRtSoiXS}PjkY6c}JXC0Bn`S1B zRtVm`XY}Q$`b5y+>Gz3^LsC)`Ntl2VLF6|Ii9MSDo(EvIs+RQrLj}+Z=Z*-vhH%H# zrS6YBfS?mAu^ezl@n9izAiJf&z%6Jk>_Zxk9%HRSs{rYVGR`Re>sv8 zCBu!jSi;BI$q}i!(!Mx-$9i=m71MDmlizGq+3yNoD@E03JiuRs-$Q?Hg`v5RV1Mi| z$2?qp-2XYxw{;nq@+-(X=KlmOD538WaI*wW)*q2{Sz(2anPWBEBB^ z=w-yq`m@GMC#xhu;lgt4?Ik#9&1BPT2=Yr0J%U*zt{7#}>kUWw)T$oRrw-h$auOCb|O&1$&mY`my}{1uK9e;T&!Id)#0(<%8I^rCDRTG zTO%(M0AIlxNB7(?e0}ZvB4=U~mTO#0{!<$7ncg@_Kq+SxgW3pw^3hO}gkxdUy~3$w<=-^rwKF9w(`hRXe^->sg<=;hKdfK4*Rv^ zb420GrSqGUhUbf|H9&5wt?+zlfX}+?IxyC=c+D96G{22V0rOv)u|c7r)1ln)NoOE= zYQV{)aQ?6a?;B77eQoy(&=u$1?bjmzj7#(Tw2UWISq6{N_{cKLRbAe`-v| zCyv}jzny)S-WQO93%+I-kvnhnwf#Hoc3ohpb6V?v^4?sbkE;2{VO?^`P z59CEIE|-LLyzjB606gIolbgA?26UR}o&^NHo?t0Rq%wCrQwN|2?GD;E)b-fQBa7E& z?-P6ejjU}3&I2#E1qsfZI67Zs6jhUF(%N;WNJES_UpEYPr!Ir`dNkAG2DG5B-H-e-1Wlq<57wkz^g&3qSkS?XlhS@bOs!I2vzLt=xGUf>@KoMG zTyR7@WCrc0V`;nhY21bWcb}2V4B5bQ(KfVWUta#lzb2X6kB*Of3bDPvCPEO?e~eM_ z>-el?l%u6|p)A+Gqt_O`h#j!iYZ+; zb^nGXjB`d7GqX6W*jGJpUgX!L*p-G6zJVP$9+*TawPMwcb4{^s$7Z@0#| z$tB#Q(~7Cr;|p|aOB}f8EXZBge(>k}$ST|dYX9WNCG@SGs z7`b!Qd@yo$%Xn8)-oVBT?N_^-vXp4tK?2D2P> z+-a1_o_;a@+wUi{AH!-#xJI@Sv_7fU5Ra-b=v}5@ed|mSgx*?c*PT-@`?fFZn|ydd zqOdO&9|d(Y+JdLE5-SqXVH~mIEp8=%uhWpxNml!`sbmFn+R8O}G-tx3=_iz~rXPfU zD=@A|**yo8QwoIJ2zDHa+b#!-oEQ*>&1KF{PL#l8`X*-yhor`ehdh|$x2zRUM0t~2xOx!?)^ke?-8v_glkJ6b8@2y+l9Mk zG&>O7_o#H??`GY1%k<@c+|$H;mY_n&r=|}y*wTaP>f_GtC9h6Bl}!|Mz4LW~HF)#l zulcvCqlJA9HfBGhb{z|<(~6Bo>gvFF4V+1y-h=t}tPgj~R-($MTvXvq)31W={oeBi zIpOR7;Fne&rE{Nbi_j&D*N1#Q$a@b@M))1+ez#$7 z7FxQcWd7}X_7HZ$;A>K5nNs4vLN9#!(QE}fW64cnR-R2IVr`9~(xjYH)Y>#H5qcs| zh>tY3oqO9hs*bNTxgF1#6-uJB9!W5xB0;##7Jap#OGE0jdI`$;?kuTKh~A^+hN#~J z_`ML$uKLg=*2EKlxsv9KYYIQk(R56wUPQ|n1O?F(Ww2IVt#mBn)<(D zO}ZH@!w2~q*Bj-% z?M)M4;7j3abYnPwHvG3Q+OzTD+ghE;ShL9-M$Sz4&M53Y&Dfpa@14^ZL2+mUl1gf8-UDBFHpFl zghLHbQPeLd!9ab2Kt$S6;>~YySiA5G+_8%`Cq<;?%u}8lafST|S|Q=Ag>}5V!*hh2xdwCq+jGAzJIbGmeHlYJAk7#1ETO17^N)>zeWe2MGqULBd3_20eI z^2E*U?yED1Eq>hIH1N9Jc}q_I!l1QzV)z1tjJqo+JR)nRkHsT6TVf*UT+`-CPG4OR z+D2MhG7Ze)&i#_s?5+ACFw7zeWBzWke`ztkWRqg*S+aRYOt-~N`lxXzj5K81IV8jP z_q)$PKkxa*J~H&m>zSC&C7DHoD?GH7?c7}LYu_%Vwh~(f8x>%SP=Uw&Xjw9PUk?6v zh7kkmW^1+*4hLsUhj>efRWEibyvZ)rYDFyGx=(7yM>Bi2 z4x9OgW+JkM7LhnToVtsa`rRg2Ry}5;ssn9Ohc}{->AX}RUi$ser`Yp3YEUfsGLnt?&eS_f>+#GOGJW>*#}?1(7GXX3KzQP(lE4ls zGZ>KgQ-8lsUYt2NwtjHtE2x@r(f4|! z*y#%&XFOwpYV6B7SyT6DegXGM%WX4dN@iQSnjo{!g!2nht`G*}dvS6Ob7OW8I5}tQ z?<8ztNbswVcK3n+En2E`?Ra^AV2Bl3kl1*KZmkWA;_8sbn)i8>ts8NR z38rzy$9`Ma`P=`QMC)#m%C)vTt?CdK&u7^O@B&iKR6yr zn)-4v-AbNt`WPqw<$$X&4i|lxZv`h*GxA#G|c-$ao{6#Uj zDCpO9j60xPOYg8x38*t9(n2&FXjRZR0$+LA@x9?QRu0o&P_oUfQ1MK*asJPhh_G8& z2ZO__S2EXYYQ}&nhM`S|hnLEh+vo~13gOj8E%VIBtk@lB5s#%0#d38Lkb7acPN zuxD4@yqU&cl8-Y|t}UnPgQ~KzponGq0qYH;14x<^d1!c7KM{Zt*8^=5XT#3gs9Q!S ziW8y)-ml=x@7^wYlky;$|LHF6RARVD(pt4a_aG+WLbqH}T&h(NuaxGccYU8&zGUFI z0Yc#BiuLf-y&+$4HUmr_3gCXvox5Ud2ZjrSn9^<^*=NERF#*rdSnjLN{@vO6pnJ@s zUGJG*V6@WxTjX^;lbYu?F56d@NR>DLJE!IP&i~|Gmx2J>iNUi}pQrXDQ*U zzM0fPGQi;ak6*_$mo7Oa>EcIzQF8UTlPvq#Ws*#W+T?(Hp9=>Ih#-|==>e{=lEsKNEevGHECS!nbKUH# z^(ckUzp%A)Q1_rIVt<#Gss2bEsR1sDx{a5p=~*z{Yj48x-U?1PP@I^OUBMR?=mLlfeh*OP?>yo7%S8 zBUK*{AH1811zr?(n>+ZHlo1zqsG*nAg0%{{^k6jKtOe^vjDKgWm?t~>!XsU{>c(tn zdS}0Kneq;!>8){2aCdL+EmzSfB^VP}B*_;zll|E}Ij=daYio|Ots7x9v&8`ONNA`Q^nR#j2gBUg46wi50?$s-A<>;It0XexOvbAX@56cF* zoO0KqhJl# zl0_bq)lc`QHd%#el1HIKD=comL)g^RI_yVJWt)lnt>Fk5U5_gk7l)$C3S`=W8IE6} zeE>-YaZ3RS1sL48%&*U*-O1v0|8aSjkg<>ZEL{jd1pJ^zLQw8+_oz1UvZH_ElK6OU z*dKKCT&v)|`}5WLhCu(XJFeerDd-x}R<1|J0<4hH-K^mN|9S92t_D&~=;D&@#DP!_ z`@^?&4{uLZ(`c70Tyyvjq$*(W>!lOP8XVv~1{~KnvODnETt~q9#tl+4wjZJ(|9KrT zDZg$6AcXhGDmF#{qD7s#qe~oBR{D1vrqf62b7&hp$D#<2Bm*JGq~IAiRC?FvQ%@ad zyxep&M<3c3?QS*vvo5U;wh?k+(J&)I3J~;2G;k*R^}PptC4!2XZMXcad4qGNP^g;( z@=A@6xIT2+^%VI{G|Mfcp)2OoFr&5W?J`riWw+;{xGaD8{I0q#x^AHtzwx3R1>E`f zF&6z>LeFuOQR5QwTCC?yHuinC#Ah0G`G_rO;|3HD#7yU&73K>*Wg`Q}CI=-$D=ZLy zJo)cTLp4;Bv1dL`qf^O8%=-eVMX8k3G-BjhPb<0eO}=liAPtAYgvj0?hg&dOrS0JH z=hbLZ?}W_(n6~(*3lb(YfQ_DvX;seC42LJcrq|sqK71#2Rf!q5 zz;Lh(ot)B`f8J-`E_-6T=}?qq05xM38yL6!lK6XJQN=aO?k8+0phUfkIMQ;L0wpIB z#J*@B;o_M=XPAT_B|U{F)DLF&ucYA!evxzam ziN>6alxCh7R}b6mP^^LXBgL&VcB*&r^&OfQkpMgEO+L>m&O#hc;N|s)uQ9QDk~#RO z0|4i!r(I@P?=^8Rt~q7VJ=XfOekz7|AGJ(N;wdW~5}8RpVbV-LaeUJ4-Z`j&X8W*l zTsMTH0n>q7`Vvspemgzu%V`ax2kQAKo96IZmE*l!7_X4|fh+#|jHN0EW< z(UNVWMN-f3Y-ksOr_!WMNMfYWF=4qBxEyhah|rOt>>ga)wA}W`XT>&G7#*(snq6A! zNa>fw`1KpX2Nrae;|+&1T;{pEgZqkx@WocAeDW?Q0GPuNBe$*Tt8214&NvRC{V|3a z%-FhCQ4?E4|6f*@f_n=PpxO~W0Ek#e#}1EsF_tllgO;72nf@hl9wm@iBoJAh^s42z zz#p9d5nDzCfhpEzbkc1Txr-OcDi@k?P}4DeaUUn8iJb)jx?Qw<6yP>qTXL81yN7*1 zhiZHd-{J1%fFU)ZX?>Q>XmJ+JRQIDIwq5?@)n{w1s4 zk@G=^;U_5nlK)W6KQCCQxcA&$c|kC!Q;jdh{CPP2@f;wcb9R~KlV2}6BD3Mu=XsiZ z@~SSh9Lz77xM1dyvmq8z|Kv?3>cG9dw!5m4t2y@a6^x@2p|95=4s@HQ4RIQ6TJrh@ z=`89^bEo%d1Sv4zjn3qvj3qnb6$0EFp0h*n*B8cmB=<)7IgV`c+em#CFf~}U<2@P(mGWoc-1G$%(I`oeu-Q5>oJvko@UMKRadmpNUek`JTMy(9t6rB+~pb=!+$%3sU4-DA}mjd*XW8ML& zehk|#g{03+krxy!)CA~44%*K+YHHjf421@d?YR6qNg~$F35Cv~1H+rmuNZfw;gE}@ z_=O)EbEWGiErTxZ{M7!$z(8=%cNKhlmY1Kz2o%gBXe6aRf&m`nq|X{-ul_h{o2I4h zL5YG<-1+s8FzA5t)AlD_rf4~M{s@!%*taLWn}|Iat_h7b43;)5t?p)^3}mhjmq<&q zCsB3r@FVL>^M!H@o^{|U))I2D?al4_+`IEet@2*y1SNZ4!+va1U8hIccCv4U3WD;l{POp8Rqs*rz2X zJorr8;{dvMb#j-lmIJ3|4Mywtlxr@3ZW8z@bR~OXcD_a3A8XJFCv6GS{A2nWPdM*b zqYtSDzAY#o{UGW6E_h@eV=ub{Qy`t7%FE-j{jrnDdCNJR+3S6DB^|K?uuFbj7;+}e zv8~&~4Sny)q_P}`6e=##5pG+NJobTB)xBj2?fwkXl5Q*UbQGZqDwkjc=;uoL zl8Fv)J7efQRyYqE_wXlZE`I%O4#wKd~R zRj3ez#r~2}9JWKOb%VP#mWwy>^HTBYJGHBs_N{EcX=B9>^)!*)YK9z-#jjIFEy3}@O0oA)9B-Ax@wMfcWcWq z(p|>$*m;0E#80${(r0H5_HtF=a#nK{suoG!EzY2Pi8h+AdRsSt;n3mA_vY_i4gS@Q zWly?!9}$1-aEwKCEP2*8{$5Mqf~|yw#YZp2{e?BuJ;h4kKuChpwoLSsefZJD>@)Tz z>WJsmcO000y2CN=!TYQ>ZmBsUS}V-p!bx&7D@wC-E9^i$r$LrqC@bPdO2_{EItm** zY9|P|Pht_RTQ^|<+YlS=&F=TR0&)m|8rD}9%8-?OB$h<&bjf6r4n92U7V6|2@FRVG z1u1_^@J{}jqgaP&-8@)#q5S9ihe`sNgZp7dyIOK0Wp)NHEt}5Oj!NovpSFEVc|Fm? zh^KS%79YJRH-gOzzyWnl2K(5%^I)KVGFCIP6?k0*mWDaoz_pJyFkrmDEI$IYLKwtM zfD>)s5`7*)Xs04_Y~o*pkWQ7<#`f5n<~(5|qoubbpqz!g3A}@3>_ZJ!gsigMS1@o# zf;g16#dwL?mxhpl0k)OxD?mtP7H(7POL^mag2NoPAv&i_y}7m(KH>NY*3FRMSLF1< zpK|jooJcQCEvhX_;9M3(dKW(~_8w8vmC>|--7rf&*yy+cRxTYbg0u%azZ8JG%#{kb z`564%WEr5zJ4p;mD;>;nskTU>!`4b<^shiBIP-w*qhrGQXVtF~@&kXch&|3-ODodI zGLuCIrQ)OlRZLSUdu`lt7r+)hLm?zJveXb}eltEzo~{2E1Tuf-mKH~-;O$;=J9{z( zRttQBW;-Rwmt6g7EjW7a#tr35=0f{p0X~6}?{Z=<>!Efy;t-;D--F(E#82|hH+^MS zMw9E`{Wc~GnP;UHPIN+yq;?!ZM@xC+_iagDiHUz7-R3?OH_Y?D|91cC|LYg!?4LJR z1tkSe1D3C%ub*~H;qQGndqd>rm{3P>P19$+1J~#0e9d>?k6RuD-W8%Im#X(a_X@h# zAglgz-B-(X^7>fz`J={H=Qio%2)+2HJL1A6=Ei3_MD^ss(!&QURO%i%J^F3n(N_o#X^PB zqj%G{^bZfQ71&Xv3X`lj{oKL#PAFE^VCLoZ8q$3bY1&08GhD)3;_`;U$5%nicQlo- zOpUlG*E+kpTGPB~Ezbr7BVD~NBjMhOBNO$iw;Y&&&rS2Vo7BjD#Rv;@NvM9;IG8WR zl`|HIv27#u)Z3_r)z7>nAWH}LL18ii@7L8D{fEmDLt8hQ_A)*uLxa$tQeUl}f8tR- z7W=fYIyM9OWTZTWaI3feVkD12y8GqdJamI;VHvSm1Y z?N&4M?7)KJ4x$mx`B%ojvpM2~K84%rg*PfgvqPv8!HY!A>gpUzIa$SZg}xGbizT>Go!e1D4#QZW9AY&nhW2Xx(0g=sVN9{Z&>2s6N-h68=%cW`F zhvq3eD?ldTdI;>ydLitksoE969vaOvBuFW_Cs;1%e#mA16)D62Fi^2Re!?jnDj5=J zAe+&fW3qTBzvPk`aJ{*K?bazP`=&7eZNa9H=!xtwHYqd9X6yr&&r{N$o6Pr(`QMdwB54 zR#8PopEX*!jvY(TV#Xwd3eTelw@ z+(8XSaW{6q=Z-V5l11g?)G642-oqxew#rWqbgAqWhd83u`pr`4oK_MD2TF1IMVdId zctuTHH0sy&dICnrUa`8YpMSgDb1F+i>XbGN2r{X&xcx3o-H(15b=_n`g4onGTv#CD zwC^M2e>gUl5%2Q5mVx_Dnca?yhRwY7PpAT6<0FX8x1_nE@;)hmqFv`J%@AZsAQ zENydCpDrn)*@|lVaTrS2&iu%{388i&Qv_QfB!}nJt4j5rKfa@x!sZS`Uc7^?rF!2U z@yj}p@^%9zSlTsPw+})ggUSg!7v2e)6VUp*!TkweY@s^>5mC8Yy0e15!(MjE7{Ugp z$39jJJY~}6d`HpfB~p31pb$ty4^?rr!;~|pxo?G7A);pF>=STpHnJFvd;;59Z)N8W zvWLG!eF{(cQtX_3AtUw&3ac%ucyDkuC@i)i{vuuep~pq`ME!@tf{Uz(wwS6JSb=Mq zf|q-_{5+{H9$@xlZb$FeExn|bj<9yaW4Y6@mj+;s-~zf z@NP1s;S?cFQG!I7?qNhE1npe__PNL>%$*g@SaCPx$L-#pYwMf%YnJF{Z&o1Bfkx<& z9EN0Gt_2(AbW^hXgU36RAEan#=urG|d>$jZCi6$o{dTpnHvBo%OVGo)@m64SubD(` zlPyQEOkU344^^$(8*p^-A>t^}wdH%L{-!c4hMFlvMU9vCsg;cT>U32|&@mPkTiiNs zi{S$3fA+Rq8a6>}NVQe@xj>5R#Ed`e5OFi~)(qM{4{I`V#%(lilTt$Y#UKT`C1zYa zhA1b5k_)uLt4lPHB+zvm-{4}iN#JaYiO0FiijezZy4A6bopXy?t$v-%xXzU6YagEC zV@r}O@87mw!&1+;j6jUKd{{v)M|Y*O*dOLkt9Kt9=*CPH-J8{{iTQX@q1Y$|;cd2# zc=N5YrIAy~>2)k}Gg=9KB&s48eRi#lMLfb4Bres}QQjN9w@eXN6Mt{}z3zpkMZRlD z5@_Nha4)Qxv^WIMdFa>K7d0Mvwiz)tppmJudG9smV_JWtiTiid-qUa$Vy8_y2C;b0 zYa!?DE19*>K0r%K=_G$FK|!kCg=MUSHy%D@wh6*HQYj`)l35f>V_!x%DE;(=`k1PE z0ZkA=5`#N~$`B5Cb*{II!c@@`v=O)M6JM{1%5Hfl`F?)j(h}={^ivdjK=b! zwy)(s^si|#ML$H|;;y2fL1UM|z!)BEsnOx46m&W_QD$$+!H#3R0SSPeO^48YhG`d@ zIkCosdr1DRnwt(uTFrMFma7k-g8p=7a@2t<5*Wo8F72#4SNmgcW%mY~15$i%e+e6T zGi%~@g^FL!*2W2aMNNi$i#bukXoVvoQsl!yqE4aelhg!m}_F5wtNURkFHyR zmNV>J4e5FAv*%#wP|XQJ*t8Tl+^O_qwkhDm=GS_nApu2}^GjwxRP!a{LnRr$xmhmM z*`jnghK}h>Do)HdBuXkE{SqbmC_%HjH&sIgC_)m8U3@h>kNIZVLk51GR3?{Azl5{~ zYAMUa8wmm&waFy)yw)gL55q1new!*!<76) z{hdUzI-L?qQQdky@ER!aD+gIBls-^{SKfm(YDzn=wAJ>8W7}hg5}XojbK@+PFWU^fi!7^ zN%0W4d`DhRVef0%_SCi6U?|6PmI~vIAW=)%IDWL9LFZ((WsYUG`&|`s?5TO~%CO}E zuob_+j);bOPrLEw6=?rF9)JkGDda93%m%!&% zG3U6cL{yt1NGpQDc^hQgK~e}qA5W9V@!W<0xp^Hl@wUS{(XwJ)pJJ5VA<#kd{~C=> zn#q%%x3uewZD(@tNBa|GFw4N4S7%8EZw;BReQ=3rUhz;43lgJo;g9ISw@rL z)t-g-Iu|Hixv1u`a>n}>=nZ254lWkukIz{;($U#5{8)OmYCR5U zL%oBRf7V;T5Yq#r?_0;}g9ABYX=$^2WHf`%z-adI0mlLWWjlL5P*OX5ydK)3$pblZV&zK_m%K%1`?9B8gH25xfIWRa!#B`I+n+R>gJ6IhtB*^OByz zum$dxh_rJ_`d)&Q)#NtxY;vJ3W#ND>HcpPn)(dB7jdz#Ni51wxpHy>=&XKA|zp(qi zn_p`vFCg@4w%~&1e6WNr-pUeaQA8y5*YDW)P2cHam2v_W(8X9eM$gfO~bnj(gG|J`H3RVPj+g35(v2)}CK?%|G>b(ka}k zfgGd7LNwKiDv+#;1fq;Lrt4xQ8J-}vAgKu;9fV08$@7iRuu2m>XTL9o2Yzvj?rA6V zhIdXt64q_&f()moo35su4Uw8_=t??8^d#3(a^4neXka*jLGQC1YVGHd2?mtz>>G7w}Fpc!sU8lSf(pW$CX6Qy1J zkY^oG{r2wegY)XK^;C#T1~}OJLuV4zaDqMZL;08mm*th>H8dn~=gg}(*lEAK15RrV zE|9sW_0fb@jU03I?;JOHeC!mcR8IM+d55ps=qNdAXM5EttrvI%ZTL?jP4^=3x~bd8 zF405V^w<@*q8;4kOeer}Cyw)2R_cJtYZJV%=z5{@PfyhHoLJN<7{m7nIFB|bs${Rt zEpWQ7rl$9z*~)%lSn0tL>hCAJ0x-7`V+WlWgii^zdzwf8-yPaq&Nja9YlddOX4$lM ztl+4ny`?-Ql_OwuJjaR->%plG3`}vq8$7E^2J=2`X@051v$mD=W>pXTwmB|bfb`Nu zMppjAhb;b&r*2nQG~3)KS*_?rd>@tHPEGyG$FBs=Dt)=VH*Cy`gl+~%neh{!3^i&o zpT#-hSxI8Ie}Am9?pA^(ohW3z3}rrCr&_b{sE2QY&pduV^B_Ml0xm9U-!EMJ^p;0J zw<<@foAFAk%xA+=?Pm1l?M69K35c~8X#H9_%DtlLyyn<;HYETr!4%$@y(n%?oH>^F9F8W29OEC*S%BQ&!4RJg|Qi3^}N@!E}b-Zd$w^I@&ya}H^ zSGPruxuECCUp9_O-XhG|F*%Snhb>$>*_?ZTmhzDrI8mnASNc*uq@k+sgL_beprun$ zhNt%uh}bER5w)CgRQ-~~9G<$h5yA2QgKQVS%h?1kzQu$I*~NMk#$RCuY>`u2NR+BE44$Rkah?B>+?!(Q1IPwWC0}ICFMe}g4f`e+HB8Y z?tQPp)|N$D<3-?M6l!7c3sY9pcCb!W|Y6sNK+kh3tn-lD2lcEGWc_VWklXKwCb6`<#OLL)k<^%?R z`4jKL+d8ass+zMg8;sq4?Cnq&w~(VZFP~Nrhp79`Y1VoaQ1;jwYk?}m7`rvq9j90W zh59Dm&g97Vr4yX#FF%K#SDabh4JAaapMw+M+|$j|3)TGToTUSw*A#WGqnd=Uv z%dK^!`l7%!6Xqm}Z=>sC(sDoz4yVz$LG>h9N-02AI};V9$mJ@Th!}$IiJ4Gxa=u_k zX8l_#6)rV&;gwHn{#HO*K|f06W^HvDI!H&(+k5q5yXCpfrr5YbYaC#e-K zx@kf-5MD06`r|n|+`+HtG0Vct%4!0)HWvGY#dAm;ThbwpsRCWOa&6<=ctRH6wpymT z?D^+H8TS0AJvcEFYG71#*&AD1G1U$c+aI5@R^dvAbMXnm@3D9(xK#%jztFTp~U~}w;ZWIR|>}5rEmO;4uGa~Ba>gdWifb;IBE_d6kMYU^`(2 zv!Rd1t3Elb-Tz4i8-7TKk|N$NLE_WcWPhc!+0sj$6uJaYpq9gZT_QtRU}g_vegoC4 zRC7{LE)>+Vkt6Q9!88U$jLr`E@k)P~URt;FZhG*AbDl z@GYH2_M3Ud!;3EsGoeO$q-J$&N}hYePV;^m_p>2+-iIW-o>L+WD=IoIpYiGl5Hi}IaX*`(JswHe zI?D`{qVE{c+{gXmK6M}JQXO8My&1M}Q1Ih+93LXdI>-mZ6Nt|DD|?q=$dx+m>qV(- zlr#-AT{<^$n9aRi@_jC{P5PqUVZ+K#Pk?V-36QvZM-BFMX`#-UY8x|{Qu}VAwR>s; z2U;s$)Idqnf(JE%Bsa(v4D2_Kk9&L_C5c}?T2c8HX%4M?9JI#9vPYhlb-Y8gdfWQO zB+e{U6T8>KZTO1qyYxA8sI#&1v$ZL)++8eep&rnmBZrc01~^p0T1#BM^v*{A5N6Ap zZg);1!@*+H?F_3Ad*GU<-^-7iUzWCr4)ea3JVH!23ZH7efDNT_Fp__t& zN0EO4pkSuJJ=q`a3`fR;^KW0g-**%O!X1FI5W#doY3GbHpG-@b65-l_J2 zSt&m>C9ep-XnA@kEM8Wat;HPA%4p=zn40vhoyQYIz3ESLt^>pC^$1}cD(DAODeuSJZsH~h&(iAhYsJUq z+$$C6=t*uij#c1^$h$}-2!)J@tCgOaKUZL%8x3`^|CldlAtV@J;nWnSw&`-x&aN5E zuvVtz8mG-t4a;9W*9xjp^22S!rSll4JXw2rf8<-tWZRI>Mala2-pOX>vZZ3vkH@u) zueIPV^fBySLo{jpL?7Z?P4Y33#8uO!nSMV6I9mo*!#~a){zyx2o>iVkSg=+6OCBfJ zc16<8Zx;LAhv=hF)Eg~i>N5d9i>>QN9mgZe1n~JdX;b~pU!>6c4| z!7|b73UI$x8e|Cd*Mmu9XBUi$I~#vqL3m+MXVBxoc}zQS#L)7teL}e80o=_pfw_*y zu;4xzysvSk%6-xtXp7eXNNE-vPAJNk?afrlV97aDz85?WD$PTpcjOn*pSiP>s(`FC zj~^Jn=Wb|F`p^v~N6Xx73&=x}&xy}f-Y%=Q*L3s%iL9{ha52cEc~J)t@}Zc}G+uNX zC4j%oLkY5e*z+>%7nU$>OEvKFZGed#wL{&mnWF2GJm-2!^UHQUwV_shRp10UMwhNJ z$P!Y0U2$QPGO0{CrEq5Nm}}?Va>CkjF;MX$Ll2E*_&`6{A1S#Eyt_e#eEx;$DZ7kV zrnPjRF$CgauuJ01>5#8S?e5KY7W3w}{E%JRe`ZYE!vLaOL_7azqluq$#XI^5Ie)-2 zg(nL=G1S?1qK*7ZS;}^}_Wk&#`1c5q&+WH4i5eVTefbC5S%$WS&6`l$;=SEk4MW8JaSFP-Kmhv4_f)l}oljNqvX zNthU47BvNS7lZ^Gn6;t+b9Gmmx86L z2G#C%8j0~0dw4aIu0gy1iG9hu++%5MzwnrEjfI!?GkqbbmTvfg3Kwi7OM^>9~qR5;66XF1C?QZAHH8vNx z6`%jVhR(&G3H|@$zi&ruQZ~epWg8pivdJwrg_%3KbWzAQxr7~)%S?4njE!yXA(zQr zHwVdO=$m0ExgWQo*oxd$=yE#WpMT-=`8+<4&*$}iy`C>MKjZqL6A<^7=&^AQE7ug` z;(_a+P7oKz-ZH%K!g13B+Yp79_)~}jeq^-n_|y87@Is`AzJ|2$(hS=Lx#hM~j2jOG z2-m|ZD#>m-B@|1=*L8E1I)9O7S4khT0glzmE|6D!_!Pw{2RcrpGSkRLE4B;pnez2_ z+5ofCQE*{7S__U}2e;Q|p$_(AG>pQ#+qowbwE3ispIDd7z`A#lAwOsbZI1zyDfnFZ`y6qmes@i{YQ zhC?}Ow24MHIQo0-tDGfoA@L)`)D#TqRuQQFxI06)S{b%HJp7%oMt>L=ru(#Y)9#;z_-)tx3MGG9O>~{zVHtzo=`j7rFM`3UG0K>O z>u&wZHOORy+KdBnVej0VcNf0j@{53v+pILBj;Wp|#+u&U7j329G`z-}?&gB(=b=6E zh+*q{ir<~X-03I{7q8r=pxpT!q?eDYj)(rb#jf;jDZ@VqBgn0x)-3gLqVtf65v6sy zbGbsjGEREugDJND+rw*VUhKKAd%T*+Lf(3Gq0ch|eY-rNhQPDu>}Ybc$lCHT)n-9i z&8xRiuv@brxc$3p_#=E}*`h*E)rY4AF$i$8NdqWZdlwQ&AA0JZ5}6>A(-UhlK`=F1 zN;!Phn^uaPkJ+=INGHfsrwAw{&Z}ixJ~&h%}ei~D;9&*BE70r=`g+JMff&$Twkl|N?;J5PA%*QkjE9{RfdUq4?E zPj&k5S76`?6fdQ)V+YK1?Q!Q!q5gUTwDIOgo!5(hAWu-)Y@3vT{$VfREZXro7cv-~ z8a2C?)jQoKjTDg1HLV(Av+;5$9r0E|{^E*z8dCLJ@Y)nRsTYuu6S}Fw-@~uK$?bAs@6(fi2!@Ta>6cbB{vBm;E)^bdkCE-dI)sRN@Y4$+)w#m@LfMV<&1JS{mEj!m*FBzi>2okw&-O%-$A$u80vtd@x(+%Z-ZgyLLiMCw z6jaD1KzG&xX5~^=>izIG2leDfzh2oJ1HTyY?(NIU7g5FRc#G)X>6u>DSbL&yA7Xno zW?(KZQd@e~DExevJb9;Gbuk0rYop9*O81`)b8A+!^r{Jqh>eH$O8*PBo2EBsLbT;1b_(J4C0lB*6 zBIzr(S~eVtK`Iw4H`+eX{(Q+DYIdLA;UHKQD`8Ww1={CWGX)796~obUKMSeVz*MvJ zw?!tH3oCCwr0+AVjH<0AcuzB}{hVXlnW+cENK*d=M^QLnaWu~mmEVDVJDgv>?!x*i zFkg7HXue;ezm?GSA1lpmW+|=AAilA?Dc$GQhWXH1CPdxQy4g1m{&Rk=1*AwrZMEYdc{2Oxicreqro?8U-Vz#7K2Z}O^nEk-}>r* zj`k8t8cJ=&M?0ShwYO9BFtAnN8mGiMwnV64TC{YZJWJLXNkqbCz;K(s5N+^ju=9Rs z!eI-zIMl^!GLAF^P9*GS(6v$_`I*<__Y*`A^_GkK8Hh#sLs6M2Ct_W(o1QN_#$Bg% z886n)rArU1Pg&{j+!5|2bWQ9EF-~;lt=_9X`*}+GTy47x-SSxqVnEeMF{PICz_RAj zHbSH^)>Cbwk$f7aUMW%`52&eRFJf^u5S!1@AC}5O-9U>eH8G|B`WCt4d*@J+ow%{K zVjf-cmDZnaW8ZKu0feR9%HoO2pu^Z7+SaS3$bv2fK8%;x8R?s*NRNjk={cpp zs7fwx>OJDD!=V&q>9uQ&<#r%kl*);!PG?%z%+J;iRI79CIDn)Eh6_c#TCsCn@{%z^^3M4CbUZi##XJWNe-p zP&uE<6$F&^Ug7R-6hM`eKb}-4_WdQzyK8l@6#EE~fXH%|L(jYMg=T}-;-$YZAGH1F z^vmPFR(`I0c>4pepm?j3+-p1h_|Z&G$kjz+;#xS?j_`}1Gw%|#^y&4ClQG@xMnO;e zqB&iq8^(Kw5XGfC`;C72i`Y4z<^wrCsbjU@fl53QhI`&~`sISVZwAffYOIo`AP9~Q z`#<&Lclw-6$CyF4Q88w~nmH9#%9EZdxy#0%{h+&>H!pM;J4V5M{?Ez5#yYPy2zGZl ziFpyMBhiBx<*7a0)v#4He}63bKf-ZYe{s65%_m{)kctm2+v;}e0YQ^s^>h7&JSUZf zk64-Cq<4~D%m|7H-r@H9W~~g3zVEOSEFL*i7}MXi76M=Yf}(%c|;EK>2S^F*k~Dz~RA9@K3QFj^whO>g?%KvyJ;9whE%JMjG6;7d8H8bVFlUVe(U zfsCSB$W?rOmuEr6&HPqpoqaFfxDwgm*z|Ii>8CXducu4Bv=2k9HWI8CP`I2MF#C_M z|H`M`dbX^A89Ze2Ec}^>V^frsvkS07h%#^+aD-4PBFtz$doItr^_yfpfu5W6yCu)O znWEoEDxcRbl|?(@Nc=(O);(G~|eq3@E~`$8NEk zQ*F>Lg=3J;^fz#UjGwWtOJ>Kp91|^*s6kb$z1_X0+XX|FLzEa!M^OaHj(L)=t#x_|+HGhCi8f*)a*s|I)hkvsPRLh!MG$><% z9-m6O@WAI!<05SnM3~I2?35axKQ{$(dG#iVJ_zD;U*yZBt>FKrDD6))A5@eS69LqA z&}R?GlbpFCsK$8zp3c!3gEFC_-=z^Z8@T#cpPksN@^*_@QE;QD+$A12oOt4w6>b5q zytuOcr5O%Z)CaZOS}x0%nujT*P8}`L*SH+oQLuU~Bq1lKZ<_8%M!sO8aR=NsR0hO` zGD{5_D`F^4Jz=-W`^-@(2D6$T4!yilxi58&uL9Vk2_0vnP6ad!mRqw$4IdS2uN_8@ z)*vlYALHDZCvwjd(j1=d+=2YC3|rnHnkK>)8b4JfM%E>xC08*<+R7dt#?u$`wO^A- z&zxW(L7Zx=SC!kB5_)P@dV$j!$oyqDYuzDYQW8(qCH#76oU{Gan?{vQ{clb`c_vbY zIO7Y1E|mVXqoY{_n1Wg~A)EU(c(5`GlMn6UB zV~4ij2wlG>9FOG>2iU3hUa7cMA^Xc8+9ApYudtl%HhMO`e&46zCAay>KJtML^cR1imO0FZUfAEgM z$I^IG#hEhk~DnQ&GXkV zF=){nw*rj2I_D-Oex>X5I?;c^JHhw6d7koE^Y)Mn@K)KQ^ED?-Z<+;6&lqr3E7aO#728yh-0uPRLWu{O6Eb`bE4irs%&Up2y04EZ30m1XO=!kxsb z1~U?7rLknZ<`|lrtdqN`I)1=FEe{k7BM5 zTJ33A$C!!_1g~8*O`y~ulm$P$xQ-A_ZXLc8{kaqfeHpb`h3mA;xHbq*Bjw6gL_eXr zrwK+S<)+f6vH_1aAz}L&G>K%_<`^8nRp%hv0bYa(^|0ns!eU>~{3Dy6sUiKbSN_&@ zIRS4J6xe+7gf)0#xPQ`dNorrg@q}qr?jzCrX%}A7K8*hk<&o)3Nw(3McEk z)@gosT{J9YFH^m0y(ZN~b@}RKWkg2Bf~EL6EN0Pwp5r!>PgZ)*8t$yGnFwWI^UQJa z5Mq3xv;)a|Mg7e+lU!eu3QaS_-;*1n=b)Q{{zPOe#~1vi0m{e3yh$BpdczbvEzDL1_)^31$ zdyUIcC4GR#7tNv{fkFyA$Fe? zd({bb1|-9(5R#rfu_vU*C7dFaa&hXYp-^8eEfdCkfF*Ym4|4JjU%{SSrg?iXq|X4O zW@2#al7}>stjC`Xm>(O9KQq@7oe zGl;ICxfo}a@EZSS_#8&JJS1?8l*+E(WCLt_?8rpp)6=sCCu|kK0c{7+;wR;HnXd|N zeneD`l>Y#1$ElA9mkg(;?rZGMy^X2x(3F=ID0itul#cH=8|dpRcaCpte8jBmCEn9{6gd$6Fe9)g z!lW4fhU6EG$svFTMG=9MKZRcwi%Q^bFow?tW2I+Cl5ux&6DxAIY-BO_Cv% znu@8p&hp$s-BSepPU|q^>0vQ1D^fyAnZuspy!AV?m(^z)hn6M+u7=V`HwLZ$qv8Zu zJUe7iZK>$tqRr|pUek8HO-{gUx;eJF-ZOf*Xbqng;J4Qt_nG68>)^nyxM5ni8Hf0z zD`zUCBv$%hc~0R;CXigoRQl7ZLd$j^MKzxd)lZcRFV(1=J@XA=21q(!ZU)sf{8}-W?I+3|@fub5TYd?d4*{|%DB;FTz4WFP^S3BQw z5vHaMJk}i4CFJweWBJ8Mu+w;~;*o(h!aq1vh6+MW8juI>mDS{Y4t4UbveXHiBql}C zl7`9l{P%Yvrw^>4(D2akGrnKGxgW!ld4YYCIAFpeZep?9EGosgFMe}TAtKa8nh%q8 zn1>2+pTq69gc{<=j?7mF7?R68OcAiFFD}-v4gU5%RcB-JblBAtMH7)%{pyfz+23s` zB74cg$#5JliKub^nqP_Tm82KdN{^qLk?z}xPI`-LpV(iOG;*6CP0SVzj<(!XP^)h^ zbz{Jssw0UppH7RcISN!3N7O%2RX5MRNaR1~oGyDBu5D_B7~uIWVM@&t{^<(Y{)%9m z|1q43Y1(FPPEyonwjt@wKPXp!gnec#&M~Ov%bAQ#sXw7|d2%A8ah zU%=p>A84tF)z|I|h^RQ$f!kraY%X0!&-PwAWUMG~?D^j6(-B^%9nh)z^5e_j^LU31 zs!XLnD!m)7kMv@9hF7mf?#8Ol&-u;Pso>mlKlOS4{r(e|jV@@*hlhtPzr@}dW)CFV zhJM({=D8SS|E<5WsvKO^aVyM+L;txT|7gf;p`s60HmXa{oxLwbbq>-U7|kmdkwSyO za>mZqZek@DFGde}RJ=bH_wIIrN){9hUU?RU@|z2-LJz|6qnM;a!PnHv=ekl@!=Y#{ zoOoPOoh&pa_C%4@a;?Xje43od=&n{VQqoZ}_XuwyG&VNPV~1v)2x$=J%|40Ic2o zq-eGtlQ8v-CLOe$*pWk4RVdP4g}SM@TOCt;V?FoJK2POyE()fE=0@SfJl zMyy&bX!{~u*9WtU8q&{>Uz_6@Xzxh&Gi0p}XM`gLm8^qSC|{O4{(8=1C1fq9Da-{_ zV{+DMb_+e{$!KQ7;(^N!jPw0`#)*3Gfe2s!+WSoyL*RRpMNc9jrD1K($KaO7taXgQ zsE%uvBc~En$nks;YPsr%mY2Zif89R6w#iV%liBMq`+*VhK~ZE-=dar0=o< zDLMwelHPyiTeN72>ttUW9H+IrzqR2<=SL+Mg>W*kJr;@}gO=-FKe7chNNWi$lfH1E zN%ANj!k*KlWrHp#GqZVsY4KqG)_I~P1CQO2w=%Me3f9g)yR~JT;;*k$?Um3NgJD-X zvAon9t&MuZ!y6i}hES$CMPPi#F$AQ0gx^h-va1wC5J}91Tp4r9CylM}O z3mwB%&^0|fuio}id{Kk^8M^Q8y{z07AzVEQDru{@49r0_yMyBO?!vLwpA_X{;X=h| zB=tT#qjLeXl6)MDS2%?6{qiH@u;gEC!Z50y1ij+E(7*H<+g%@CCTd+(qpbUzx4kB? zs!y;Qq=B5vcmr7k)%qTm-P)B$>pp!9w{N(fkJn_a)p>znDX;Wq$WHVR<$PK9m_wrLtdsa-PC@rD` zTnOvraJ>fv4;LIK{eI33itp#EM$hlxS>GZ>SU`teO1K)|#<#_tjBnRB-mXAin5T_swmuaz#tM0%*JIeyN z!=rVbOw?bo?cH;a9(Ic|2_*P3kDZ-Pv%i3f(gK`c`jxa_v8c;u7@UPJ{)7N@szs2? z4~7BT7QIds)Rik<#h;O~nDBrp1*DtS2b^OqbD%X%SUe;2Ew_NNXq*tCLb-7BRpCk& zzDwzk_ocUQlfDf=CMO*@0w8msBWu&?l*ULhHDmO}pq*IGAta+Cz}+D~6~+c=Owjk1 z{1vbP--K9t)zXX^P+D`&CIQTI&slo7&n`LgW`o1vx%iwU;i=1cGc6HA^Xi81gDr9B zu|K8V%W=FQlyuW!iZ&4=`x%kRufr-CG$CkUt%L3k&u?>4syV7l7>~Qv@9QTnP3ZF< z$hjHlxo2KwL3*QobbKnYOcs#OQl!eu{x1)6*WoTgq%N(Qr7t!sodBW}bDI1aA+J`8$f=Q`WmW6kTw4zj8(DGh+n zDt8qbAK#=ws>b@2{nA~@ZZ17-@C}?w1po1w=Z2L2w*$&js&=4HN2wh7kXLQ6(-4O) z1_G#);%0DOkm)x_=9XY9X!b76}(*rQupt5N?hl<5(D-w*8siN6o~h)b^}w z`g<53>AKbD5X=qrz^Qg)nY@IvMwi~mbyh$ldEm7=tYh2NTfs+|nH=59R@Z+CwwLX* z1*oukc&4ajatrwL$|rpOI>DnS-7JH6aE}pJtc3vADVu%cFY`=ra`D`bZU2P}OE4?v z1^RD?%H8YM_spa1cmv}c?MuKk^8D=|UP;Yp-K{#;{@!R>m-LS#$EEUOW;*%%2QtyY zM>5UNyIiYGj)DgXslYS{vzGC^epqL|k%5J*fzugxF;O%ecU59(-IC; z*lCsHag!J(?=9fSJ0q%_#Pdz4&GtdXgxT86cB55e6d&KQ6rvabINC+DC6})46RuAW;l2L}5`Tq{oI*NtRjI0uE=;!p9dj zlH|~a=V*qfe(iL=?uY?6=z>>aYmL}~k@+V_W}Poa{?9(==#mj?1y>X8ik3`R>{D|E zW@@EM%Zal(A|U^)!8{`5u zy4%>2jqYNN5z*DR!i=eR+-kyaMm{)eJ^>Z)R~>|1muA8#EXVb}PPASba8_^nQ)-hLd(Qy(Ab4hTcBw zLCt+NaBQQZE|eL{PUyiVWE~M%#sz=2T?wmLRDNsF_YPg@>=tWknZ}JUhmdh@)JLy! zJ7e_1Tk1&HDVylwwfz%L{<)%wQBRJGIP{(=1Q}VS&ox?hLSQN$(Q__zOBk?}l5`t& z$SVeA{i@5229}DAzyT$JouGsKxMfn5>1llO83q&B>i?6VnfjHiY6b>*9O1FuMCIj} zil~AcqnJ8_M#6`W-}>4G$3ZqUEUII7!s=w5`uuZ{fPBPtP_3xI5*DNv!o8VS_^*9! zWDz(J^a$TAs;=v~V5t3C@m&+HFmZeD%-u+F>CE>2OZV%01j=&#a7f6$ zYeaF3hAt)yCu%5)g`^v3lCufHlArE%tl1vltUW{xu4*LOm`p8@#HIi)?aFlWCgpUW zRVlTlm{bX_R4YAkd+!l{9`w~3nmgc`2m{T+!j4SNjB+Q4>!&Dz?;vaW9Sqivlhu-^ zeG8%~+|U~NefA_F5#IKr1G+9h4BmWr8|4mofF2p|?b*(Sc0Aq8ei|c9bkgM(%=rWv zyjpI@$a}G$MzU=A(>>@6qS2i#I(wAC;;*or-3%PqIQHr3LMtM+-yas=k9}3p9=mQk zz-pGXIPpVGEC>acW9b&C)e~NiR=#yr8|(0=Ly{C_g=fmwi$>MwYe(`FH8cHGMdyo{ zbtaXb$?PGyc*OA@zZzVfKxl!O=$R|62AV*HY@Qg?n;*C0h3aOi!>rC$`c$2wY*2ybVucU_3*v=`vIGJ zE;ri!@(o7o#SM_P2M#7MCSyH)NY0K~891NL1FsIqnK$VMjTFV&Dbcy3GTmbd^HJ}} zK|6*mEf3Q$Ui}A;p;FKAmClb%GK`feVuBlrd~*zL%TIEIPeR;%zU=`1F?>hc*%UGa zK%C+7U*JW!!Fsm8?bhu(;^UyVs$ZrB&=Fp5hOeoar@ji-kD?xG6to&v<}a?SiMt`^ z6?;@USC6DHAcb60Z$&3@#+Q7*jdTt8a1PUyj#M~p#Q{G;#r#KoWS=16^Yj$edk@gLW2_X(QXy8BtQKtwcIYvLhs>sl8q5ed z;^&JC7y`cBOkM#F<7oM*LlLx&b$lWGR+KJdzCUoljhZrRj^Bh9hd$i6kA6;itDDpM zb}HpR&J)d%t6p3=I2o?3!%ZdZ9J*#*qCE%)JUAjBFqfKn&OQUsJKTy-{3u2+m{n?? zrPPH_yHoKQdrnaSWX6 zU@aApt%-Lden{S(gr|WG+6jt^(HJlg9Cd8E-?c(MNJ7KA{avoaNaYV6u#L+{nJ|nDC}s8iELQ~y z0|LtaW~S!y-xv#Dl`&nZm}9tZ^DFnQ^#VNvxY45e>yUY7q5~hOa&N>PG4tUBp0wfv z<$naV-65X$pFg_LHN9Srp-P56EJ@2S@Lo?UD&wU8T&`y)!8W@g5X!hy{&GVP}G|@x5!yg1X543J- zNRoUp$i$JaI?VF<3EO30s|Ul-uMP9j%ugp3RCB)3v!V|(K6^U)_CCkqK29p5{(J{^ z_n-=8cM369zT8kpg3?;c-0qbrfK0NMV_jlbSYTPV)V3cmMId1JNR-~(%gD{ElCqBy z{7P~%OskCn&Au)V<|}q4UUcgj!^wG^--+@wjp1Bjykb2Y*2}H>GOH#=UMaY%qI7l+IchO53LMvA8h6Nmen3Y+Y9_LF zREkFBQCg2V_)|%8j?_co3-D;$cOiX%GQcAhClrr)1fIErE%yT;4y9=!o}!5HOvXXt zNzoiMh;`SUi3Y%t3NQkTVP6Kl0EQ`MEm`%E>oYTP(Et>DA_IP8jEF0P;&|KRN#LlD3&hH$OF zKs}kh@f^g)kyeJ20rBu@>-tffd^oBxQ<8RsL2tEdyO6C#W4PJ5p9NJ22j1HXvgD7< zg9lTG5$e(DYSxfM20j*z{4#Ug5@D$0r}Xe%w4qK99N~wPI%j$NRc#uCHL6|?4`bFP zAF1xOSp~wsRKeE0GQu_`jmua{O9>yV}G4_g@eXUmQF0 zat}k_D96LVxR`WCCkH80W@oLcNnh3UsHGL=h1e~E6$}&{&dhTFA@vW-09j6Hi74$H z**JlF`{eo8r?e{GSu$I&HhutBd0L{1tkv|z<1(33x=+>fdG`$PY{FdE@p-x98oGAy zd_$dwxo~?wP-Uiymaon=X{8S?7qyCea?dV_WsBR|<8(Cb@VF;MHU*Rr(5DX$)hSBO zWh5Of)`||^ZYA3SW}$YCTde+kO5PZa4ekhNy)!=6gU<&7DqJqZt@^kN(B07`O&gd5 zmb_g3K>-Ogw=-!!pzCDWj^sz(m&XdM@o+HSTe<#owX{Tah0D(BwdP+GLH8Q>}v F{67cO(0l*@ diff --git a/tools/falco/test-data/fastqc_customlimits.txt b/tools/falco/test-data/fastqc_customlimits.txt deleted file mode 100644 index fc1bd64270c..00000000000 --- a/tools/falco/test-data/fastqc_customlimits.txt +++ /dev/null @@ -1,84 +0,0 @@ -# For each of the modules you can choose to not run that -# module at all by setting the value below to 1 for the -# modules you want to remove. -duplication ignore 0 -kmer ignore 0 -n_content ignore 0 -overrepresented ignore 0 -quality_base ignore 0 -sequence ignore 0 -gc_sequence ignore 0 -quality_sequence ignore 0 -tile ignore 0 -sequence_length ignore 0 -adapter ignore 0 - -# For the duplication module the value is the percentage -# remaining after deduplication. Measured levels below -# these limits trigger the warning / error. -duplication warn 70 -duplication error 50 - -# For the kmer module the filter is on the -log10 binomial -# pvalue for the most significant Kmer, so 5 would be -# 10^-5 = p<0.00001 -kmer warn 2 -kmer error 5 - -# For the N module the filter is on the percentage of Ns -# at any position in the library -n_content warn 5 -n_content error 20 - -# For the overrepresented seqs the warn value sets the -# threshold for the overrepresented sequences to be reported -# at all as the proportion of the library which must be seen -# as a single sequence -overrepresented warn 0.1 -overrepresented error 1 - -# The per base quality filter uses two values, one for the value -# of the lower quartile, and the other for the value of the -# median quality. Failing either of these will trigger the alert -quality_base_lower warn 10 -quality_base_lower error 5 -quality_base_median warn 25 -quality_base_median error 20 - -# The per base sequence content module tests the maximum deviation -# between A and T or C and G -sequence warn 10 -sequence error 20 - -# The per sequence GC content tests the maximum deviation between -# the theoretical distribution and the real distribution -gc_sequence warn 15 -gc_sequence error 30 - -# The per sequence quality module tests the phred score which is -# most frequently observed -quality_sequence warn 27 -quality_sequence error 20 - -# The per tile module tests the maximum phred score loss between -# and individual tile and the average for that base across all tiles -tile warn 5 -tile error 10 - -# The sequence length module tests are binary, so the values here -# simply turn them on or off. The actual tests warn if you have -# sequences of different length, and error if you have sequences -# of zero length. - -sequence_length warn 1 -sequence_length error 1 - -# The adapter module's warnings and errors are based on the -# percentage of reads in the library which have been observed -# to contain an adapter associated Kmer at any point - -adapter warn 5 -adapter error 10 - - - diff --git a/tools/falco/test-data/fastqc_data_contaminant_summary.txt b/tools/falco/test-data/fastqc_data_contaminant_summary.txt deleted file mode 100644 index 109484ffc6f..00000000000 --- a/tools/falco/test-data/fastqc_data_contaminant_summary.txt +++ /dev/null @@ -1,11 +0,0 @@ -PASS Basic Statistics 1000trimmed_fastq -PASS Per base sequence quality 1000trimmed_fastq -FAIL Per tile sequence quality 1000trimmed_fastq -PASS Per sequence quality scores 1000trimmed_fastq -FAIL Per base sequence content 1000trimmed_fastq -WARN Per sequence GC content 1000trimmed_fastq -PASS Per base N content 1000trimmed_fastq -WARN Sequence Length Distribution 1000trimmed_fastq -PASS Sequence Duplication Levels 1000trimmed_fastq -WARN Overrepresented sequences 1000trimmed_fastq -PASS Adapter Content 1000trimmed_fastq diff --git a/tools/falco/test-data/fastqc_data_contaminants.txt b/tools/falco/test-data/fastqc_data_contaminants.txt index 6b8283d09e5..5218d3e1cdf 100644 --- a/tools/falco/test-data/fastqc_data_contaminants.txt +++ b/tools/falco/test-data/fastqc_data_contaminants.txt @@ -1,4 +1,4 @@ -##Falco 1.2.3 +##Falco 1.2.4 >>Basic Statistics pass #Measure Value Filename 1000trimmed_fastq @@ -1597,114 +1597,114 @@ Sequence length 1-108 #Sequence Count Percentage Possible Source ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCAT 33 0.672783 Test sequence >>END_MODULE ->>Adapter Content warn +>>Adapter Content pass #Position Illumina Universal Adapter Illumina Small RNA 3' Adapter Illumina Small RNA 5' Adapter Nextera Transposase Sequence PolyA PolyG 1 0 0 0 0 0.0203874 0 -2 0 0 0 0 0.0815494 0 -3 0 0 0 0 0.142712 0 -4 0 0 0 0 0.183486 0 -5 0 0 0 0 0.285423 0 -6 0 0 0 0 0.38736 0 -7 0 0 0 0 0.489297 0 -8 0 0 0 0 0.591233 0 -9 0 0 0 0 0.672783 0 -10 0 0 0 0 0.754332 0 -11 0 0 0 0 0.835882 0 -12 0 0 0 0 0.917431 0 -13 0 0 0 0 1.01937 0 -14 0 0 0 0 1.1213 0 -15 0 0 0 0 1.24363 0 -16 0 0 0 0 1.34557 0 -17 0 0 0 0 1.46789 0 -18 0 0 0 0 1.59021 0 -19 0 0 0 0 1.67176 0 -20 0.122324 0 0 0 1.75331 0 -21 0.122324 0 0 0 1.83486 0 -22 0.122324 0 0 0 1.89602 0 -23 0.122324 0 0 0 1.95719 0 -24 0.122324 0 0 0 2.01835 0 -25 0.122324 0 0 0 2.07951 0 -26 0.122324 0 0 0 2.14067 0 -27 0.142712 0 0 0 2.20183 0 -28 0.183486 0 0 0 2.263 0 -29 0.224261 0 0 0 2.32416 0 -30 0.224261 0 0 0 2.38532 0 -31 0.224261 0 0 0 2.44648 0 -32 0.224261 0 0 0 2.50765 0 -33 0.224261 0 0 0 2.60958 0 -34 0.224261 0 0 0 2.71152 0 -35 0.265036 0 0 0 2.81346 0 -36 0.285423 0 0 0 2.89501 0 -37 0.326198 0 0 0 2.99694 0 -38 0.407747 0 0 0 3.09888 0 -39 0.468909 0 0 0 3.20082 0 -40 0.468909 0 0 0 3.30275 0 -41 0.468909 0 0 0 3.40469 0 -42 0.468909 0 0 0 3.48624 0 -43 0.468909 0 0 0 3.56779 0 -44 0.468909 0 0 0 3.60856 0 -45 0.468909 0 0 0 3.62895 0 -46 0.468909 0 0 0 3.64934 0 -47 0.468909 0 0 0 3.66972 0 -48 0.468909 0 0 0 3.69011 0 -49 0.468909 0 0 0 3.7105 0 -50 0.468909 0 0 0 3.7105 0 -51 0.468909 0 0 0 3.7105 0 -52 0.468909 0 0 0 3.7105 0 -53 0.468909 0 0 0 3.7105 0 -54 0.468909 0 0 0 3.7105 0 -55 0.468909 0 0 0 3.7105 0 -56 0.468909 0 0 0 3.7105 0 -57 0.468909 0 0 0 3.7105 0 -58 0.468909 0 0 0 3.7105 0 -59 0.468909 0 0 0 3.73089 0 -60 0.468909 0 0 0 3.75127 0 -61 0.468909 0 0 0 3.77166 0 -62 0.468909 0 0 0 3.81244 0 -63 0.468909 0 0 0 3.85321 0 -64 0.468909 0 0 0 3.89399 0 -65 0.468909 0 0 0 3.93476 0 -66 0.468909 0 0 0 3.97554 0 -67 0.468909 0 0 0 4.01631 0 -68 0.468909 0 0 0 4.05708 0 -69 0.468909 0 0 0 4.09786 0 -70 0.468909 0 0 0 4.13863 0 -71 0.468909 0 0 0 4.17941 0 -72 0.468909 0 0 0 4.22018 0 -73 0.468909 0 0 0 4.26096 0 -74 0.489297 0 0 0 4.32212 0 -75 0.489297 0 0 0 4.38328 0 -76 0.489297 0 0 0 4.42406 0 -77 0.489297 0 0 0 4.46483 0 -78 0.489297 0 0 0 4.50561 0 -79 0.489297 0 0 0 4.54638 0 -80 0.489297 0 0 0 4.58716 0 -81 0.489297 0 0 0 4.62793 0 -82 0.489297 0 0 0 4.66871 0 -83 0.509684 0 0 0 4.70948 0 -84 0.509684 0 0 0 4.75025 0 -85 0.509684 0 0 0 4.79103 0 -86 0.509684 0 0 0 4.8318 0 -87 0.509684 0 0 0 4.91335 0 -88 0.509684 0 0 0 4.9949 0 -89 0.509684 0 0 0 5.05607 0 -90 0.509684 0 0 0 5.09684 0 -91 0.509684 0 0 0 5.158 0 -92 0.570846 0 0 0 5.21916 0 -93 0.632008 0 0 0 5.28033 0 -94 0.632008 0 0 0 5.34149 0 -95 0.632008 0 0 0 5.40265 0 -96 0.632008 0 0 0 5.46381 0 -97 0.632008 0 0 0 5.52497 0 -98 0.632008 0 0 0 5.52497 0 -99 0.632008 0 0 0 5.52497 0 -100 0.632008 0 0 0 5.52497 0 -101 0.632008 0 0 0 5.52497 0 -102 0.632008 0 0 0 5.52497 0 -103 0.632008 0 0 0 5.52497 0 -104 0.632008 0 0 0 5.52497 0 -105 0.632008 0 0 0 5.52497 0 -106 0.632008 0 0 0 5.52497 0 -107 0.632008 0 0 0 5.52497 0 -108 0.632008 0 0 0 5.52497 0 +2 0 0 0 0 0.0611621 0 +3 0 0 0 0 0.0611621 0 +4 0 0 0 0 0.0611621 0 +5 0 0 0 0 0.122324 0 +6 0 0 0 0 0.122324 0 +7 0 0 0 0 0.122324 0 +8 0 0 0 0 0.142712 0 +9 0 0 0 0 0.142712 0 +10 0 0 0 0 0.142712 0 +11 0 0 0 0 0.142712 0 +12 0 0 0 0 0.142712 0 +13 0 0 0 0 0.163099 0 +14 0 0 0 0 0.163099 0 +15 0 0 0 0 0.183486 0 +16 0 0 0 0 0.203874 0 +17 0 0 0 0 0.224261 0 +18 0 0 0 0 0.224261 0 +19 0 0 0 0 0.224261 0 +20 0.122324 0 0 0 0.244648 0 +21 0.122324 0 0 0 0.244648 0 +22 0.122324 0 0 0 0.244648 0 +23 0.122324 0 0 0 0.244648 0 +24 0.122324 0 0 0 0.244648 0 +25 0.122324 0 0 0 0.244648 0 +26 0.122324 0 0 0 0.244648 0 +27 0.142712 0 0 0 0.244648 0 +28 0.183486 0 0 0 0.244648 0 +29 0.224261 0 0 0 0.244648 0 +30 0.224261 0 0 0 0.244648 0 +31 0.224261 0 0 0 0.244648 0 +32 0.224261 0 0 0 0.244648 0 +33 0.224261 0 0 0 0.285423 0 +34 0.224261 0 0 0 0.285423 0 +35 0.265036 0 0 0 0.30581 0 +36 0.285423 0 0 0 0.30581 0 +37 0.326198 0 0 0 0.326198 0 +38 0.407747 0 0 0 0.326198 0 +39 0.468909 0 0 0 0.326198 0 +40 0.468909 0 0 0 0.326198 0 +41 0.468909 0 0 0 0.326198 0 +42 0.468909 0 0 0 0.326198 0 +43 0.468909 0 0 0 0.326198 0 +44 0.468909 0 0 0 0.326198 0 +45 0.468909 0 0 0 0.326198 0 +46 0.468909 0 0 0 0.326198 0 +47 0.468909 0 0 0 0.326198 0 +48 0.468909 0 0 0 0.326198 0 +49 0.468909 0 0 0 0.326198 0 +50 0.468909 0 0 0 0.326198 0 +51 0.468909 0 0 0 0.326198 0 +52 0.468909 0 0 0 0.326198 0 +53 0.468909 0 0 0 0.326198 0 +54 0.468909 0 0 0 0.326198 0 +55 0.468909 0 0 0 0.326198 0 +56 0.468909 0 0 0 0.326198 0 +57 0.468909 0 0 0 0.326198 0 +58 0.468909 0 0 0 0.326198 0 +59 0.468909 0 0 0 0.326198 0 +60 0.468909 0 0 0 0.326198 0 +61 0.468909 0 0 0 0.326198 0 +62 0.468909 0 0 0 0.326198 0 +63 0.468909 0 0 0 0.326198 0 +64 0.468909 0 0 0 0.326198 0 +65 0.468909 0 0 0 0.326198 0 +66 0.468909 0 0 0 0.326198 0 +67 0.468909 0 0 0 0.326198 0 +68 0.468909 0 0 0 0.326198 0 +69 0.468909 0 0 0 0.326198 0 +70 0.468909 0 0 0 0.326198 0 +71 0.468909 0 0 0 0.326198 0 +72 0.468909 0 0 0 0.326198 0 +73 0.468909 0 0 0 0.326198 0 +74 0.468909 0 0 0 0.326198 0 +75 0.468909 0 0 0 0.326198 0 +76 0.468909 0 0 0 0.326198 0 +77 0.468909 0 0 0 0.326198 0 +78 0.468909 0 0 0 0.326198 0 +79 0.468909 0 0 0 0.326198 0 +80 0.468909 0 0 0 0.326198 0 +81 0.468909 0 0 0 0.326198 0 +82 0.468909 0 0 0 0.326198 0 +83 0.468909 0 0 0 0.326198 0 +84 0.468909 0 0 0 0.326198 0 +85 0.468909 0 0 0 0.326198 0 +86 0.468909 0 0 0 0.326198 0 +87 0.468909 0 0 0 0.326198 0 +88 0.468909 0 0 0 0.326198 0 +89 0.468909 0 0 0 0.326198 0 +90 0.468909 0 0 0 0.326198 0 +91 0.468909 0 0 0 0.326198 0 +92 0.468909 0 0 0 0.326198 0 +93 0.468909 0 0 0 0.326198 0 +94 0.468909 0 0 0 0.326198 0 +95 0.468909 0 0 0 0.326198 0 +96 0.468909 0 0 0 0.326198 0 +97 0.468909 0 0 0 0.326198 0 +98 0.468909 0 0 0 0.326198 0 +99 0.468909 0 0 0 0.326198 0 +100 0.468909 0 0 0 0.326198 0 +101 0.468909 0 0 0 0.326198 0 +102 0.468909 0 0 0 0.326198 0 +103 0.468909 0 0 0 0.326198 0 +104 0.468909 0 0 0 0.326198 0 +105 0.468909 0 0 0 0.326198 0 +106 0.468909 0 0 0 0.326198 0 +107 0.468909 0 0 0 0.326198 0 +108 0.468909 0 0 0 0.326198 0 >>END_MODULE diff --git a/tools/falco/test-data/fastqc_data_customlimits.txt b/tools/falco/test-data/fastqc_data_customlimits.txt deleted file mode 100644 index 6730a97717f..00000000000 --- a/tools/falco/test-data/fastqc_data_customlimits.txt +++ /dev/null @@ -1,76 +0,0 @@ -##Falco 1.2.4 ->>Basic Statistics pass -#Measure Value -Filename 1000trimmed_fastq -File type Conventional base calls -Encoding Sanger / Illumina 1.9 -Total Sequences 4905 -Sequences flagged as poor quality 0 -Sequence length 1-108 -%GC 41 ->>END_MODULE ->>Sequence Length Distribution warn -#Length Count -1 3.0 -2 11.0 -3 28.0 -4 56.0 -5 43.0 -6 52.0 -7 39.0 -8 56.0 -9 60.0 -10 57.0 -11 43.0 -12 46.0 -13 45.0 -14 66.0 -15 59.0 -16 49.0 -17 73.0 -18 54.0 -19 44.0 -20 52.0 -21 73.0 -22 72.0 -23 68.0 -24 56.0 -25 86.0 -26 92.0 -27 75.0 -28 69.0 -29 74.0 -30 96.0 -31 72.0 -32 81.0 -33 65.0 -34 87.0 -35 86.0 -36 87.0 -37 100.0 -38 82.0 -39 78.0 -40 76.0 -41 79.0 -42 88.0 -43 83.0 -44 75.0 -45 74.0 -46 72.0 -47 84.0 -48 74.0 -49 81.0 -50 91.0 -51 80.0 -52 98.0 -53 43.0 -54 8.0 -55 4.0 -56 1.0 -64 1.0 -97 1.0 -98 32.0 -106 34.0 -107 169.0 -108 1122.0 ->>END_MODULE diff --git a/tools/falco/test-data/fastqc_data_customlimits_summary.txt b/tools/falco/test-data/fastqc_data_customlimits_summary.txt index 109484ffc6f..1d639fa65f6 100644 --- a/tools/falco/test-data/fastqc_data_customlimits_summary.txt +++ b/tools/falco/test-data/fastqc_data_customlimits_summary.txt @@ -1,11 +1,2 @@ PASS Basic Statistics 1000trimmed_fastq -PASS Per base sequence quality 1000trimmed_fastq -FAIL Per tile sequence quality 1000trimmed_fastq -PASS Per sequence quality scores 1000trimmed_fastq -FAIL Per base sequence content 1000trimmed_fastq -WARN Per sequence GC content 1000trimmed_fastq -PASS Per base N content 1000trimmed_fastq WARN Sequence Length Distribution 1000trimmed_fastq -PASS Sequence Duplication Levels 1000trimmed_fastq -WARN Overrepresented sequences 1000trimmed_fastq -PASS Adapter Content 1000trimmed_fastq diff --git a/tools/falco/test-data/fastqc_data_hisat.txt b/tools/falco/test-data/fastqc_data_hisat.txt index fda438ce067..96e52740c79 100644 --- a/tools/falco/test-data/fastqc_data_hisat.txt +++ b/tools/falco/test-data/fastqc_data_hisat.txt @@ -1,448 +1,601 @@ -##FastQC 0.12.1 +##Falco 1.2.4 >>Basic Statistics pass #Measure Value Filename hisat_output_1_bam File type Conventional base calls Encoding Sanger / Illumina 1.9 Total Sequences 20 -Total Bases 1.4 kbp Sequences flagged as poor quality 0 Sequence length 70 -%GC 43 +%GC 44 >>END_MODULE ->>Per base sequence quality pass +>>Per base sequence quality fail #Base Mean Median Lower Quartile Upper Quartile 10th Percentile 90th Percentile -1 17.0 NaN NaN NaN NaN NaN -2 17.0 NaN NaN NaN NaN NaN -3 17.0 NaN NaN NaN NaN NaN -4 17.0 NaN NaN NaN NaN NaN -5 17.0 NaN NaN NaN NaN NaN -6 17.0 NaN NaN NaN NaN NaN -7 17.0 NaN NaN NaN NaN NaN -8 17.0 NaN NaN NaN NaN NaN -9 17.0 NaN NaN NaN NaN NaN -10 17.0 NaN NaN NaN NaN NaN -11 17.0 NaN NaN NaN NaN NaN -12 17.0 NaN NaN NaN NaN NaN -13 17.0 NaN NaN NaN NaN NaN -14 17.0 NaN NaN NaN NaN NaN -15 17.0 NaN NaN NaN NaN NaN -16 17.0 NaN NaN NaN NaN NaN -17 17.0 NaN NaN NaN NaN NaN -18 17.0 NaN NaN NaN NaN NaN -19 17.0 NaN NaN NaN NaN NaN -20 17.0 NaN NaN NaN NaN NaN -21 17.0 NaN NaN NaN NaN NaN -22 17.0 NaN NaN NaN NaN NaN -23 17.0 NaN NaN NaN NaN NaN -24 17.0 NaN NaN NaN NaN NaN -25 17.0 NaN NaN NaN NaN NaN -26 17.0 NaN NaN NaN NaN NaN -27 17.0 NaN NaN NaN NaN NaN -28 17.0 NaN NaN NaN NaN NaN -29 17.0 NaN NaN NaN NaN NaN -30 17.0 NaN NaN NaN NaN NaN -31 17.0 NaN NaN NaN NaN NaN -32 17.0 NaN NaN NaN NaN NaN -33 17.0 NaN NaN NaN NaN NaN -34 17.0 NaN NaN NaN NaN NaN -35 17.0 NaN NaN NaN NaN NaN -36 17.0 NaN NaN NaN NaN NaN -37 17.0 NaN NaN NaN NaN NaN -38 17.0 NaN NaN NaN NaN NaN -39 17.0 NaN NaN NaN NaN NaN -40 17.0 NaN NaN NaN NaN NaN -41 17.0 NaN NaN NaN NaN NaN -42 17.0 NaN NaN NaN NaN NaN -43 17.0 NaN NaN NaN NaN NaN -44 17.0 NaN NaN NaN NaN NaN -45 17.0 NaN NaN NaN NaN NaN -46 17.0 NaN NaN NaN NaN NaN -47 17.0 NaN NaN NaN NaN NaN -48 17.0 NaN NaN NaN NaN NaN -49 17.0 NaN NaN NaN NaN NaN -50 17.0 NaN NaN NaN NaN NaN -51 17.0 NaN NaN NaN NaN NaN -52 17.0 NaN NaN NaN NaN NaN -53 17.0 NaN NaN NaN NaN NaN -54 17.0 NaN NaN NaN NaN NaN -55 17.0 NaN NaN NaN NaN NaN -56 17.0 NaN NaN NaN NaN NaN -57 17.0 NaN NaN NaN NaN NaN -58 17.0 NaN NaN NaN NaN NaN -59 17.0 NaN NaN NaN NaN NaN -60 17.0 NaN NaN NaN NaN NaN -61 17.0 NaN NaN NaN NaN NaN -62 17.0 NaN NaN NaN NaN NaN -63 17.0 NaN NaN NaN NaN NaN -64 17.0 NaN NaN NaN NaN NaN -65 17.0 NaN NaN NaN NaN NaN -66 17.0 NaN NaN NaN NaN NaN -67 17.0 NaN NaN NaN NaN NaN -68 17.0 NaN NaN NaN NaN NaN -69 17.0 NaN NaN NaN NaN NaN -70 17.0 NaN NaN NaN NaN NaN +1 17 17 17 17 17 17 +2 17 17 17 17 17 17 +3 17 17 17 17 17 17 +4 17 17 17 17 17 17 +5 17 17 17 17 17 17 +6 17 17 17 17 17 17 +7 17 17 17 17 17 17 +8 17 17 17 17 17 17 +9 17 17 17 17 17 17 +10 17 17 17 17 17 17 +11 17 17 17 17 17 17 +12 17 17 17 17 17 17 +13 17 17 17 17 17 17 +14 17 17 17 17 17 17 +15 17 17 17 17 17 17 +16 17 17 17 17 17 17 +17 17 17 17 17 17 17 +18 17 17 17 17 17 17 +19 17 17 17 17 17 17 +20 17 17 17 17 17 17 +21 17 17 17 17 17 17 +22 17 17 17 17 17 17 +23 17 17 17 17 17 17 +24 17 17 17 17 17 17 +25 17 17 17 17 17 17 +26 17 17 17 17 17 17 +27 17 17 17 17 17 17 +28 17 17 17 17 17 17 +29 17 17 17 17 17 17 +30 17 17 17 17 17 17 +31 17 17 17 17 17 17 +32 17 17 17 17 17 17 +33 17 17 17 17 17 17 +34 17 17 17 17 17 17 +35 17 17 17 17 17 17 +36 17 17 17 17 17 17 +37 17 17 17 17 17 17 +38 17 17 17 17 17 17 +39 17 17 17 17 17 17 +40 17 17 17 17 17 17 +41 17 17 17 17 17 17 +42 17 17 17 17 17 17 +43 17 17 17 17 17 17 +44 17 17 17 17 17 17 +45 17 17 17 17 17 17 +46 17 17 17 17 17 17 +47 17 17 17 17 17 17 +48 17 17 17 17 17 17 +49 17 17 17 17 17 17 +50 17 17 17 17 17 17 +51 17 17 17 17 17 17 +52 17 17 17 17 17 17 +53 17 17 17 17 17 17 +54 17 17 17 17 17 17 +55 17 17 17 17 17 17 +56 17 17 17 17 17 17 +57 17 17 17 17 17 17 +58 17 17 17 17 17 17 +59 17 17 17 17 17 17 +60 17 17 17 17 17 17 +61 17 17 17 17 17 17 +62 17 17 17 17 17 17 +63 17 17 17 17 17 17 +64 17 17 17 17 17 17 +65 17 17 17 17 17 17 +66 17 17 17 17 17 17 +67 17 17 17 17 17 17 +68 17 17 17 17 17 17 +69 17 17 17 17 17 17 +70 17 17 17 17 17 17 +>>END_MODULE +>>Per tile sequence quality pass +#Tile Base Mean +470 1 0 +470 2 0 +470 3 0 +470 4 0 +470 5 0 +470 6 0 +470 7 0 +470 8 0 +470 9 0 +470 10 0 +470 11 0 +470 12 0 +470 13 0 +470 14 0 +470 15 0 +470 16 0 +470 17 0 +470 18 0 +470 19 0 +470 20 0 +470 21 0 +470 22 0 +470 23 0 +470 24 0 +470 25 0 +470 26 0 +470 27 0 +470 28 0 +470 29 0 +470 30 0 +470 31 0 +470 32 0 +470 33 0 +470 34 0 +470 35 0 +470 36 0 +470 37 0 +470 38 0 +470 39 0 +470 40 0 +470 41 0 +470 42 0 +470 43 0 +470 44 0 +470 45 0 +470 46 0 +470 47 0 +470 48 0 +470 49 0 +470 50 0 +470 51 0 +470 52 0 +470 53 0 +470 54 0 +470 55 0 +470 56 0 +470 57 0 +470 58 0 +470 59 0 +470 60 0 +470 61 0 +470 62 0 +470 63 0 +470 64 0 +470 65 0 +470 66 0 +470 67 0 +470 68 0 +470 69 0 +470 70 0 +473 1 0 +473 2 0 +473 3 0 +473 4 0 +473 5 0 +473 6 0 +473 7 0 +473 8 0 +473 9 0 +473 10 0 +473 11 0 +473 12 0 +473 13 0 +473 14 0 +473 15 0 +473 16 0 +473 17 0 +473 18 0 +473 19 0 +473 20 0 +473 21 0 +473 22 0 +473 23 0 +473 24 0 +473 25 0 +473 26 0 +473 27 0 +473 28 0 +473 29 0 +473 30 0 +473 31 0 +473 32 0 +473 33 0 +473 34 0 +473 35 0 +473 36 0 +473 37 0 +473 38 0 +473 39 0 +473 40 0 +473 41 0 +473 42 0 +473 43 0 +473 44 0 +473 45 0 +473 46 0 +473 47 0 +473 48 0 +473 49 0 +473 50 0 +473 51 0 +473 52 0 +473 53 0 +473 54 0 +473 55 0 +473 56 0 +473 57 0 +473 58 0 +473 59 0 +473 60 0 +473 61 0 +473 62 0 +473 63 0 +473 64 0 +473 65 0 +473 66 0 +473 67 0 +473 68 0 +473 69 0 +473 70 0 >>END_MODULE >>Per sequence quality scores fail #Quality Count -17 20.0 +17 20 >>END_MODULE >>Per base sequence content fail #Base G A T C -1 20.0 5.0 35.0 40.0 -2 10.0 10.0 45.0 35.0 -3 35.0 20.0 20.0 25.0 -4 35.0 30.0 25.0 10.0 -5 20.0 20.0 30.0 30.0 -6 20.0 35.0 20.0 25.0 -7 15.0 40.0 35.0 10.0 -8 20.0 15.0 45.0 20.0 -9 20.0 25.0 35.0 20.0 -10 20.0 20.0 30.0 30.0 -11 15.0 20.0 45.0 20.0 -12 10.0 40.0 35.0 15.0 -13 25.0 35.0 20.0 20.0 -14 35.0 20.0 20.0 25.0 -15 30.0 35.0 15.0 20.0 -16 10.0 45.0 25.0 20.0 -17 25.0 25.0 40.0 10.0 -18 25.0 35.0 10.0 30.0 -19 5.0 30.0 25.0 40.0 -20 20.0 15.0 40.0 25.0 -21 25.0 25.0 25.0 25.0 -22 15.0 30.0 20.0 35.0 -23 20.0 5.0 45.0 30.0 -24 10.0 30.0 35.0 25.0 -25 30.0 40.0 15.0 15.0 -26 15.0 35.0 20.0 30.0 -27 15.0 35.0 30.0 20.0 -28 25.0 25.0 30.0 20.0 -29 15.0 30.0 20.0 35.0 -30 20.0 35.0 30.0 15.0 -31 20.0 35.0 25.0 20.0 -32 35.0 15.0 35.0 15.0 -33 30.0 35.0 15.0 20.0 -34 25.0 25.0 25.0 25.0 -35 25.0 20.0 35.0 20.0 -36 30.0 25.0 20.0 25.0 -37 15.0 45.0 25.0 15.0 -38 30.0 25.0 35.0 10.0 -39 20.0 45.0 15.0 20.0 -40 15.0 35.0 20.0 30.0 -41 35.0 25.0 20.0 20.0 -42 30.0 30.0 35.0 5.0 -43 25.0 15.0 40.0 20.0 -44 40.0 20.0 30.0 10.0 -45 15.0 35.0 25.0 25.0 -46 15.0 30.0 40.0 15.0 -47 35.0 15.0 30.0 20.0 -48 30.0 35.0 20.0 15.0 -49 10.0 55.00000000000001 30.0 5.0 -50 40.0 25.0 20.0 15.0 -51 25.0 35.0 10.0 30.0 -52 30.0 25.0 20.0 25.0 -53 30.0 10.0 30.0 30.0 -54 20.0 40.0 20.0 20.0 -55 10.0 35.0 10.0 45.0 -56 50.0 10.0 30.0 10.0 -57 15.0 45.0 30.0 10.0 -58 20.0 35.0 20.0 25.0 -59 30.0 35.0 30.0 5.0 -60 20.0 35.0 25.0 20.0 -61 25.0 15.0 35.0 25.0 -62 10.0 20.0 55.00000000000001 15.0 -63 25.0 20.0 35.0 20.0 -64 20.0 35.0 25.0 20.0 -65 30.0 35.0 25.0 10.0 -66 15.0 40.0 35.0 10.0 -67 20.0 35.0 20.0 25.0 -68 20.0 25.0 30.0 25.0 -69 15.0 35.0 25.0 25.0 -70 5.0 40.0 40.0 15.0 +1 20 5 35 40 +2 10 10 45 35 +3 35 20 20 25 +4 35 30 25 10 +5 20 20 30 30 +6 20 35 20 25 +7 15 40 35 10 +8 20 15 45 20 +9 20 25 35 20 +10 20 20 30 30 +11 15 20 45 20 +12 10 40 35 15 +13 25 35 20 20 +14 35 20 20 25 +15 30 35 15 20 +16 10 45 25 20 +17 25 25 40 10 +18 25 35 10 30 +19 5 30 25 40 +20 20 15 40 25 +21 25 25 25 25 +22 15 30 20 35 +23 20 5 45 30 +24 10 30 35 25 +25 30 40 15 15 +26 15 35 20 30 +27 15 35 30 20 +28 25 25 30 20 +29 15 30 20 35 +30 20 35 30 15 +31 20 35 25 20 +32 35 15 35 15 +33 30 35 15 20 +34 25 25 25 25 +35 25 20 35 20 +36 30 25 20 25 +37 15 45 25 15 +38 30 25 35 10 +39 20 45 15 20 +40 15 35 20 30 +41 35 25 20 20 +42 30 30 35 5 +43 25 15 40 20 +44 40 20 30 10 +45 15 35 25 25 +46 15 30 40 15 +47 35 15 30 20 +48 30 35 20 15 +49 10 55 30 5 +50 40 25 20 15 +51 25 35 10 30 +52 30 25 20 25 +53 30 10 30 30 +54 20 40 20 20 +55 10 35 10 45 +56 50 10 30 10 +57 15 45 30 10 +58 20 35 20 25 +59 30 35 30 5 +60 20 35 25 20 +61 25 15 35 25 +62 10 20 55 15 +63 25 20 35 20 +64 20 35 25 20 +65 30 35 25 10 +66 15 40 35 10 +67 20 35 20 25 +68 20 25 30 25 +69 15 35 25 25 +70 5 40 40 15 >>END_MODULE >>Per sequence GC content fail #GC Content Count -0 0.0 -1 0.0 -2 0.0 -3 0.0 -4 0.0 -5 0.0 -6 0.0 -7 0.0 -8 0.0 -9 0.0 -10 0.0 -11 0.0 -12 0.0 -13 0.0 -14 0.0 -15 0.0 -16 0.0 -17 0.0 -18 0.0 -19 0.0 -20 0.0 -21 0.0 -22 0.0 -23 0.0 -24 0.0 -25 0.0 -26 0.0 -27 0.0 -28 0.0 +0 0 +1 0 +2 0 +3 0 +4 0 +5 0 +6 0 +7 0 +8 0 +9 0 +10 0 +11 0 +12 0 +13 0 +14 0 +15 0 +16 0 +17 0 +18 0 +19 0 +20 0 +21 0 +22 0 +23 0 +24 0 +25 0 +26 0 +27 0 +28 0 29 0.5 -30 1.0 +30 1 31 0.5 32 0.5 -33 1.0 +33 1 34 0.5 -35 0.0 -36 0.0 -37 0.0 -38 1.0 +35 0 +36 0 +37 0 +38 1 39 2.5 -40 3.0 -41 2.0 +40 3 +41 2 42 1.5 -43 2.0 +43 2 44 2.5 45 2.5 -46 1.0 -47 0.0 +46 1 +47 0 48 0.5 49 0.5 -50 0.0 +50 0 51 1.5 52 1.5 -53 0.0 +53 0 54 0.5 55 0.5 -56 0.0 -57 0.0 -58 0.0 -59 0.0 -60 0.0 -61 0.0 -62 0.0 -63 0.0 -64 0.0 -65 0.0 -66 0.0 -67 0.0 -68 0.0 -69 0.0 -70 0.0 -71 0.0 -72 0.0 -73 0.0 -74 0.0 -75 0.0 -76 0.0 -77 0.0 -78 0.0 -79 0.0 -80 0.0 -81 0.0 -82 0.0 -83 0.0 -84 0.0 -85 0.0 -86 0.0 -87 0.0 -88 0.0 -89 0.0 -90 0.0 -91 0.0 -92 0.0 -93 0.0 -94 0.0 -95 0.0 -96 0.0 -97 0.0 -98 0.0 -99 0.0 -100 0.0 +56 0 +57 0 +58 0 +59 0 +60 0 +61 0 +62 0 +63 0 +64 0 +65 0 +66 0 +67 0 +68 0 +69 0 +70 0 +71 0 +72 0 +73 0 +74 0 +75 0 +76 0 +77 0 +78 0 +79 0 +80 0 +81 0 +82 0 +83 0 +84 0 +85 0 +86 0 +87 0 +88 0 +89 0 +90 0 +91 0 +92 0 +93 0 +94 0 +95 0 +96 0 +97 0 +98 0 +99 0 +100 0 >>END_MODULE >>Per base N content pass #Base N-Count -1 0.0 -2 0.0 -3 0.0 -4 0.0 -5 0.0 -6 0.0 -7 0.0 -8 0.0 -9 0.0 -10 0.0 -11 0.0 -12 0.0 -13 0.0 -14 0.0 -15 0.0 -16 0.0 -17 0.0 -18 0.0 -19 0.0 -20 0.0 -21 0.0 -22 0.0 -23 0.0 -24 0.0 -25 0.0 -26 0.0 -27 0.0 -28 0.0 -29 0.0 -30 0.0 -31 0.0 -32 0.0 -33 0.0 -34 0.0 -35 0.0 -36 0.0 -37 0.0 -38 0.0 -39 0.0 -40 0.0 -41 0.0 -42 0.0 -43 0.0 -44 0.0 -45 0.0 -46 0.0 -47 0.0 -48 0.0 -49 0.0 -50 0.0 -51 0.0 -52 0.0 -53 0.0 -54 0.0 -55 0.0 -56 0.0 -57 0.0 -58 0.0 -59 0.0 -60 0.0 -61 0.0 -62 0.0 -63 0.0 -64 0.0 -65 0.0 -66 0.0 -67 0.0 -68 0.0 -69 0.0 -70 0.0 +1 0 +2 0 +3 0 +4 0 +5 0 +6 0 +7 0 +8 0 +9 0 +10 0 +11 0 +12 0 +13 0 +14 0 +15 0 +16 0 +17 0 +18 0 +19 0 +20 0 +21 0 +22 0 +23 0 +24 0 +25 0 +26 0 +27 0 +28 0 +29 0 +30 0 +31 0 +32 0 +33 0 +34 0 +35 0 +36 0 +37 0 +38 0 +39 0 +40 0 +41 0 +42 0 +43 0 +44 0 +45 0 +46 0 +47 0 +48 0 +49 0 +50 0 +51 0 +52 0 +53 0 +54 0 +55 0 +56 0 +57 0 +58 0 +59 0 +60 0 +61 0 +62 0 +63 0 +64 0 +65 0 +66 0 +67 0 +68 0 +69 0 +70 0 >>END_MODULE >>Sequence Length Distribution pass #Length Count 70 20.0 >>END_MODULE >>Sequence Duplication Levels pass -#Total Deduplicated Percentage 100.0 -#Duplication Level Percentage of total -1 100.0 -2 0.0 -3 0.0 -4 0.0 -5 0.0 -6 0.0 -7 0.0 -8 0.0 -9 0.0 ->10 0.0 ->50 0.0 ->100 0.0 ->500 0.0 ->1k 0.0 ->5k 0.0 ->10k+ 0.0 +#Total Deduplicated Percentage 100 +#Duplication Level Percentage of deduplicated Percentage of total +1 100 100 +2 0 0 +3 0 0 +4 0 0 +5 0 0 +6 0 0 +7 0 0 +8 0 0 +9 0 0 +>10 0 0 +>50 0 0 +>100 0 0 +>500 0 0 +>1k 0 0 +>5k 0 0 +>10k+ 0 0 >>END_MODULE >>Overrepresented sequences fail #Sequence Count Percentage Possible Source -CCTTTCGCCATCAACTAACGATTCTGTCAAAAACTGACGCGTTGGATGAG 1 5.0 No Hit -TGGCGCTCTCCGTCTTTCTCCATTTCGTCGTGGCCTTGCTATTGACTCTA 1 5.0 No Hit -ACCATAAACGCAAGCCTCAACGCAGCGACGAGCACGAGAGCGGTCAGTAG 1 5.0 No Hit -TGTTTTCCGTAAATTCAGCGCCTTCCATGATGCGACAGGCCGTTTGAATG 1 5.0 No Hit -CTGGCACTTCTGCCGTTTCTGATAAGTTGCTTGATTTGGTTGGACTTGGT 1 5.0 No Hit -TCTGCGTTTGCTGATGAACTAAGTCAACCTCAGCACTAACCTTGCGAGTC 1 5.0 No Hit -CCATACAAAACAGGGTCGCCAGCAATATCGGTATAAGTCAAAGCACCTTT 1 5.0 No Hit -TAAGCATTTGTTTCAGGGTTATTTGAATATCTATAACAACTATTTTCAAG 1 5.0 No Hit -CAAATTAGCATAAGCAGCTTGCAGACCCATAATGTCAATAGATGTGGTAG 1 5.0 No Hit -GCGTTAAGGTACTGAATCTCTTTAGTCGCAGTAGGCGGAAAACGAACAAG 1 5.0 No Hit -CTGAATGGAATTAAGAAAACCACCAATACCAGCATTAACCTTCAAACTAT 1 5.0 No Hit -GCGACCATTCAAAGGATAAACATCATAGGCAGTCGGGAGGGTAGTCGGAA 1 5.0 No Hit -GTGAAATTTCTAGGAAGGATGTTTTCCGTTCTGGTGATTCGTCTAAGAAG 1 5.0 No Hit -CTCAAATCCGGCGTCAACCATACCAGCATAGGAAGCATCAGCACCAGCAC 1 5.0 No Hit -TTCTGGTGATTTGCAAGAACGCGTACTTATTCGCCACCATGATTATGACC 1 5.0 No Hit -CTCGCGATTCAATCATGACTTCGTGATAAAAGATTGAGTGTGAGGTTATA 1 5.0 No Hit -TTAGGTGTGTGTAAAACAGGTGCCGAAGAAGCTGGATTAACAGAATTGAG 1 5.0 No Hit -GCGGTATTGCTTCTGCTCTTGCTGGTGGCGCCATGTCTAAATTGTTTGGA 1 5.0 No Hit -TTTCGGATATTTCTGATGAGTCGAAAAATTATCTTGATAAAGCAGTAATT 1 5.0 No Hit -CTCGCCAAATGACGACTTCTACCACATCTATTGACATTATGGGTCTGCAA 1 5.0 No Hit +ACCATAAACGCAAGCCTCAACGCAGCGACGAGCACGAGAGCGGTCAGTAGCAATCCAAACTTTGTTACTC 1 5 No Hit +GTGAAATTTCTAGGAAGGATGTTTTCCGTTCTGGTGATTCGTCTAAGAAGTTTAAGATTGCTGAGGGTCA 1 5 No Hit +CCATACAAAACAGGGTCGCCAGCAATATCGGTATAAGTCAAAGCACCTTTAGCGTTAAGGTACTGAATCT 1 5 No Hit +CTCGCCAAATGACGACTTCTACCACATCTATTGACATTATGGGTCTGCAAGCTGCTTATGCTAATTTGCA 1 5 No Hit +CAAATTAGCATAAGCAGCTTGCAGACCCATAATGTCAATAGATGTGGTAGAAGTCGTCATTTGGCTAGAA 1 5 No Hit +CTCGCGATTCAATCATGACTTCGTGATAAAAGATTGAGTGTGAGGTTATAACGCCGAAGCGGTAAAAAAT 1 5 No Hit +TGGCGCTCTCCGTCTTTCTCCATTTCGTCGTGGCCTTGCTATTGACTCTACTGTAGACATTTTTACTTTT 1 5 No Hit +TAAGCATTTGTTTCAGGGTTATTTGAATATCTATAACAACTATTTTCAAGCGCCGAGGATGCGTGACCGT 1 5 No Hit +TGTTTTCCGTAAATTCAGCGCCTTCCATGATGCGACAGGCCGTTTGAATGTTGACGGGATGAACATAATA 1 5 No Hit +TTCTGGTGATTTGCAAGAACGCGTACTTATTCGCCACCATGATTATGACCAGTGTTTCCAGTCCGTTCAG 1 5 No Hit +TCTGCGTTTGCTGATGAACTAAGTCAACCTCAGCACTAACCTTGCGAGTCATTTCATTGATTTGGTCATT 1 5 No Hit +GCGTTAAGGTACTGAATCTCTTTAGTCGCAGTAGGCGGAAAACGAACAAGCGCAAGAGTAAACATAGTGC 1 5 No Hit +CCTTTCGCCATCAACTAACGATTCTGTCAAAAACTGACGCGTTGGATGAGGAGAAGTGGCTTAATATGCT 1 5 No Hit +TTTCGGATATTTCTGATGAGTCGAAAAATTATCTTGATAAAGCAGTAATTACTACTGCTTGTTTACGAAT 1 5 No Hit +TTAGGTGTGTGTAAAACAGGTGCCGAAGAAGCTGGATTAACAGAATTGAGAACCAGCTTATCAGAAAAAA 1 5 No Hit +CTGAATGGAATTAAGAAAACCACCAATACCAGCATTAACCTTCAAACTATCAAAATATAACGTTGACGAT 1 5 No Hit +GCGACCATTCAAAGGATAAACATCATAGGCAGTCGGGAGGGTAGTCGGAACCGACGAAGACTCAAAGCGA 1 5 No Hit +GCGGTATTGCTTCTGCTCTTGCTGGTGGCGCCATGTCTAAATTGTTTGGAGGCGGTCAAAAAGCCGCCTC 1 5 No Hit +CTGGCACTTCTGCCGTTTCTGATAAGTTGCTTGATTTGGTTGGACTTGGTGGCAAGTCTGCCGCTGATAA 1 5 No Hit +CTCAAATCCGGCGTCAACCATACCAGCATAGGAAGCATCAGCACCAGCACGCTCCCAAGCATTAATCTCA 1 5 No Hit >>END_MODULE >>Adapter Content pass #Position Illumina Universal Adapter Illumina Small RNA 3' Adapter Illumina Small RNA 5' Adapter Nextera Transposase Sequence PolyA PolyG -1 0.0 0.0 0.0 0.0 0.0 0.0 -2 0.0 0.0 0.0 0.0 0.0 0.0 -3 0.0 0.0 0.0 0.0 0.0 0.0 -4 0.0 0.0 0.0 0.0 0.0 0.0 -5 0.0 0.0 0.0 0.0 0.0 0.0 -6 0.0 0.0 0.0 0.0 0.0 0.0 -7 0.0 0.0 0.0 0.0 0.0 0.0 -8 0.0 0.0 0.0 0.0 0.0 0.0 -9 0.0 0.0 0.0 0.0 0.0 0.0 -10 0.0 0.0 0.0 0.0 0.0 0.0 -11 0.0 0.0 0.0 0.0 0.0 0.0 -12 0.0 0.0 0.0 0.0 0.0 0.0 -13 0.0 0.0 0.0 0.0 0.0 0.0 -14 0.0 0.0 0.0 0.0 0.0 0.0 -15 0.0 0.0 0.0 0.0 0.0 0.0 -16 0.0 0.0 0.0 0.0 0.0 0.0 -17 0.0 0.0 0.0 0.0 0.0 0.0 -18 0.0 0.0 0.0 0.0 0.0 0.0 -19 0.0 0.0 0.0 0.0 0.0 0.0 -20 0.0 0.0 0.0 0.0 0.0 0.0 -21 0.0 0.0 0.0 0.0 0.0 0.0 -22 0.0 0.0 0.0 0.0 0.0 0.0 -23 0.0 0.0 0.0 0.0 0.0 0.0 -24 0.0 0.0 0.0 0.0 0.0 0.0 -25 0.0 0.0 0.0 0.0 0.0 0.0 -26 0.0 0.0 0.0 0.0 0.0 0.0 -27 0.0 0.0 0.0 0.0 0.0 0.0 -28 0.0 0.0 0.0 0.0 0.0 0.0 -29 0.0 0.0 0.0 0.0 0.0 0.0 -30 0.0 0.0 0.0 0.0 0.0 0.0 -31 0.0 0.0 0.0 0.0 0.0 0.0 -32 0.0 0.0 0.0 0.0 0.0 0.0 -33 0.0 0.0 0.0 0.0 0.0 0.0 -34 0.0 0.0 0.0 0.0 0.0 0.0 -35 0.0 0.0 0.0 0.0 0.0 0.0 -36 0.0 0.0 0.0 0.0 0.0 0.0 -37 0.0 0.0 0.0 0.0 0.0 0.0 -38 0.0 0.0 0.0 0.0 0.0 0.0 -39 0.0 0.0 0.0 0.0 0.0 0.0 -40 0.0 0.0 0.0 0.0 0.0 0.0 -41 0.0 0.0 0.0 0.0 0.0 0.0 -42 0.0 0.0 0.0 0.0 0.0 0.0 -43 0.0 0.0 0.0 0.0 0.0 0.0 -44 0.0 0.0 0.0 0.0 0.0 0.0 -45 0.0 0.0 0.0 0.0 0.0 0.0 -46 0.0 0.0 0.0 0.0 0.0 0.0 -47 0.0 0.0 0.0 0.0 0.0 0.0 -48 0.0 0.0 0.0 0.0 0.0 0.0 -49 0.0 0.0 0.0 0.0 0.0 0.0 -50 0.0 0.0 0.0 0.0 0.0 0.0 -51 0.0 0.0 0.0 0.0 0.0 0.0 -52 0.0 0.0 0.0 0.0 0.0 0.0 -53 0.0 0.0 0.0 0.0 0.0 0.0 -54 0.0 0.0 0.0 0.0 0.0 0.0 -55 0.0 0.0 0.0 0.0 0.0 0.0 -56 0.0 0.0 0.0 0.0 0.0 0.0 -57 0.0 0.0 0.0 0.0 0.0 0.0 -58 0.0 0.0 0.0 0.0 0.0 0.0 -59 0.0 0.0 0.0 0.0 0.0 0.0 +1 0 0 0 0 0 0 +2 0 0 0 0 0 0 +3 0 0 0 0 0 0 +4 0 0 0 0 0 0 +5 0 0 0 0 0 0 +6 0 0 0 0 0 0 +7 0 0 0 0 0 0 +8 0 0 0 0 0 0 +9 0 0 0 0 0 0 +10 0 0 0 0 0 0 +11 0 0 0 0 0 0 +12 0 0 0 0 0 0 +13 0 0 0 0 0 0 +14 0 0 0 0 0 0 +15 0 0 0 0 0 0 +16 0 0 0 0 0 0 +17 0 0 0 0 0 0 +18 0 0 0 0 0 0 +19 0 0 0 0 0 0 +20 0 0 0 0 0 0 +21 0 0 0 0 0 0 +22 0 0 0 0 0 0 +23 0 0 0 0 0 0 +24 0 0 0 0 0 0 +25 0 0 0 0 0 0 +26 0 0 0 0 0 0 +27 0 0 0 0 0 0 +28 0 0 0 0 0 0 +29 0 0 0 0 0 0 +30 0 0 0 0 0 0 +31 0 0 0 0 0 0 +32 0 0 0 0 0 0 +33 0 0 0 0 0 0 +34 0 0 0 0 0 0 +35 0 0 0 0 0 0 +36 0 0 0 0 0 0 +37 0 0 0 0 0 0 +38 0 0 0 0 0 0 +39 0 0 0 0 0 0 +40 0 0 0 0 0 0 +41 0 0 0 0 0 0 +42 0 0 0 0 0 0 +43 0 0 0 0 0 0 +44 0 0 0 0 0 0 +45 0 0 0 0 0 0 +46 0 0 0 0 0 0 +47 0 0 0 0 0 0 +48 0 0 0 0 0 0 +49 0 0 0 0 0 0 +50 0 0 0 0 0 0 +51 0 0 0 0 0 0 +52 0 0 0 0 0 0 +53 0 0 0 0 0 0 +54 0 0 0 0 0 0 +55 0 0 0 0 0 0 +56 0 0 0 0 0 0 +57 0 0 0 0 0 0 +58 0 0 0 0 0 0 +59 0 0 0 0 0 0 +60 0 0 0 0 0 0 +61 0 0 0 0 0 0 +62 0 0 0 0 0 0 +63 0 0 0 0 0 0 +64 0 0 0 0 0 0 +65 0 0 0 0 0 0 +66 0 0 0 0 0 0 +67 0 0 0 0 0 0 +68 0 0 0 0 0 0 +69 0 0 0 0 0 0 +70 0 0 0 0 0 0 >>END_MODULE diff --git a/tools/falco/test-data/fastqc_data_nogroup.txt b/tools/falco/test-data/fastqc_data_nogroup.txt index 842ada09b78..18ffb98f34e 100644 --- a/tools/falco/test-data/fastqc_data_nogroup.txt +++ b/tools/falco/test-data/fastqc_data_nogroup.txt @@ -1,4 +1,4 @@ -##Falco 1.2.3 +##Falco 1.2.4 >>Basic Statistics pass #Measure Value Filename 1000trimmed_fastq @@ -1744,114 +1744,114 @@ Sequence length 1-108 #Sequence Count Percentage Possible Source ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCAT 33 0.672783 No Hit >>END_MODULE ->>Adapter Content warn +>>Adapter Content pass #Position Illumina Universal Adapter Illumina Small RNA 3' Adapter Illumina Small RNA 5' Adapter Nextera Transposase Sequence PolyA PolyG 1 0 0 0 0 0.0203874 0 -2 0 0 0 0 0.0815494 0 -3 0 0 0 0 0.142712 0 -4 0 0 0 0 0.183486 0 -5 0 0 0 0 0.285423 0 -6 0 0 0 0 0.38736 0 -7 0 0 0 0 0.489297 0 -8 0 0 0 0 0.591233 0 -9 0 0 0 0 0.672783 0 -10 0 0 0 0 0.754332 0 -11 0 0 0 0 0.835882 0 -12 0 0 0 0 0.917431 0 -13 0 0 0 0 1.01937 0 -14 0 0 0 0 1.1213 0 -15 0 0 0 0 1.24363 0 -16 0 0 0 0 1.34557 0 -17 0 0 0 0 1.46789 0 -18 0 0 0 0 1.59021 0 -19 0 0 0 0 1.67176 0 -20 0.122324 0 0 0 1.75331 0 -21 0.122324 0 0 0 1.83486 0 -22 0.122324 0 0 0 1.89602 0 -23 0.122324 0 0 0 1.95719 0 -24 0.122324 0 0 0 2.01835 0 -25 0.122324 0 0 0 2.07951 0 -26 0.122324 0 0 0 2.14067 0 -27 0.142712 0 0 0 2.20183 0 -28 0.183486 0 0 0 2.263 0 -29 0.224261 0 0 0 2.32416 0 -30 0.224261 0 0 0 2.38532 0 -31 0.224261 0 0 0 2.44648 0 -32 0.224261 0 0 0 2.50765 0 -33 0.224261 0 0 0 2.60958 0 -34 0.224261 0 0 0 2.71152 0 -35 0.265036 0 0 0 2.81346 0 -36 0.285423 0 0 0 2.89501 0 -37 0.326198 0 0 0 2.99694 0 -38 0.407747 0 0 0 3.09888 0 -39 0.468909 0 0 0 3.20082 0 -40 0.468909 0 0 0 3.30275 0 -41 0.468909 0 0 0 3.40469 0 -42 0.468909 0 0 0 3.48624 0 -43 0.468909 0 0 0 3.56779 0 -44 0.468909 0 0 0 3.60856 0 -45 0.468909 0 0 0 3.62895 0 -46 0.468909 0 0 0 3.64934 0 -47 0.468909 0 0 0 3.66972 0 -48 0.468909 0 0 0 3.69011 0 -49 0.468909 0 0 0 3.7105 0 -50 0.468909 0 0 0 3.7105 0 -51 0.468909 0 0 0 3.7105 0 -52 0.468909 0 0 0 3.7105 0 -53 0.468909 0 0 0 3.7105 0 -54 0.468909 0 0 0 3.7105 0 -55 0.468909 0 0 0 3.7105 0 -56 0.468909 0 0 0 3.7105 0 -57 0.468909 0 0 0 3.7105 0 -58 0.468909 0 0 0 3.7105 0 -59 0.468909 0 0 0 3.73089 0 -60 0.468909 0 0 0 3.75127 0 -61 0.468909 0 0 0 3.77166 0 -62 0.468909 0 0 0 3.81244 0 -63 0.468909 0 0 0 3.85321 0 -64 0.468909 0 0 0 3.89399 0 -65 0.468909 0 0 0 3.93476 0 -66 0.468909 0 0 0 3.97554 0 -67 0.468909 0 0 0 4.01631 0 -68 0.468909 0 0 0 4.05708 0 -69 0.468909 0 0 0 4.09786 0 -70 0.468909 0 0 0 4.13863 0 -71 0.468909 0 0 0 4.17941 0 -72 0.468909 0 0 0 4.22018 0 -73 0.468909 0 0 0 4.26096 0 -74 0.489297 0 0 0 4.32212 0 -75 0.489297 0 0 0 4.38328 0 -76 0.489297 0 0 0 4.42406 0 -77 0.489297 0 0 0 4.46483 0 -78 0.489297 0 0 0 4.50561 0 -79 0.489297 0 0 0 4.54638 0 -80 0.489297 0 0 0 4.58716 0 -81 0.489297 0 0 0 4.62793 0 -82 0.489297 0 0 0 4.66871 0 -83 0.509684 0 0 0 4.70948 0 -84 0.509684 0 0 0 4.75025 0 -85 0.509684 0 0 0 4.79103 0 -86 0.509684 0 0 0 4.8318 0 -87 0.509684 0 0 0 4.91335 0 -88 0.509684 0 0 0 4.9949 0 -89 0.509684 0 0 0 5.05607 0 -90 0.509684 0 0 0 5.09684 0 -91 0.509684 0 0 0 5.158 0 -92 0.570846 0 0 0 5.21916 0 -93 0.632008 0 0 0 5.28033 0 -94 0.632008 0 0 0 5.34149 0 -95 0.632008 0 0 0 5.40265 0 -96 0.632008 0 0 0 5.46381 0 -97 0.632008 0 0 0 5.52497 0 -98 0.632008 0 0 0 5.52497 0 -99 0.632008 0 0 0 5.52497 0 -100 0.632008 0 0 0 5.52497 0 -101 0.632008 0 0 0 5.52497 0 -102 0.632008 0 0 0 5.52497 0 -103 0.632008 0 0 0 5.52497 0 -104 0.632008 0 0 0 5.52497 0 -105 0.632008 0 0 0 5.52497 0 -106 0.632008 0 0 0 5.52497 0 -107 0.632008 0 0 0 5.52497 0 -108 0.632008 0 0 0 5.52497 0 +2 0 0 0 0 0.0611621 0 +3 0 0 0 0 0.0611621 0 +4 0 0 0 0 0.0611621 0 +5 0 0 0 0 0.122324 0 +6 0 0 0 0 0.122324 0 +7 0 0 0 0 0.122324 0 +8 0 0 0 0 0.142712 0 +9 0 0 0 0 0.142712 0 +10 0 0 0 0 0.142712 0 +11 0 0 0 0 0.142712 0 +12 0 0 0 0 0.142712 0 +13 0 0 0 0 0.163099 0 +14 0 0 0 0 0.163099 0 +15 0 0 0 0 0.183486 0 +16 0 0 0 0 0.203874 0 +17 0 0 0 0 0.224261 0 +18 0 0 0 0 0.224261 0 +19 0 0 0 0 0.224261 0 +20 0.122324 0 0 0 0.244648 0 +21 0.122324 0 0 0 0.244648 0 +22 0.122324 0 0 0 0.244648 0 +23 0.122324 0 0 0 0.244648 0 +24 0.122324 0 0 0 0.244648 0 +25 0.122324 0 0 0 0.244648 0 +26 0.122324 0 0 0 0.244648 0 +27 0.142712 0 0 0 0.244648 0 +28 0.183486 0 0 0 0.244648 0 +29 0.224261 0 0 0 0.244648 0 +30 0.224261 0 0 0 0.244648 0 +31 0.224261 0 0 0 0.244648 0 +32 0.224261 0 0 0 0.244648 0 +33 0.224261 0 0 0 0.285423 0 +34 0.224261 0 0 0 0.285423 0 +35 0.265036 0 0 0 0.30581 0 +36 0.285423 0 0 0 0.30581 0 +37 0.326198 0 0 0 0.326198 0 +38 0.407747 0 0 0 0.326198 0 +39 0.468909 0 0 0 0.326198 0 +40 0.468909 0 0 0 0.326198 0 +41 0.468909 0 0 0 0.326198 0 +42 0.468909 0 0 0 0.326198 0 +43 0.468909 0 0 0 0.326198 0 +44 0.468909 0 0 0 0.326198 0 +45 0.468909 0 0 0 0.326198 0 +46 0.468909 0 0 0 0.326198 0 +47 0.468909 0 0 0 0.326198 0 +48 0.468909 0 0 0 0.326198 0 +49 0.468909 0 0 0 0.326198 0 +50 0.468909 0 0 0 0.326198 0 +51 0.468909 0 0 0 0.326198 0 +52 0.468909 0 0 0 0.326198 0 +53 0.468909 0 0 0 0.326198 0 +54 0.468909 0 0 0 0.326198 0 +55 0.468909 0 0 0 0.326198 0 +56 0.468909 0 0 0 0.326198 0 +57 0.468909 0 0 0 0.326198 0 +58 0.468909 0 0 0 0.326198 0 +59 0.468909 0 0 0 0.326198 0 +60 0.468909 0 0 0 0.326198 0 +61 0.468909 0 0 0 0.326198 0 +62 0.468909 0 0 0 0.326198 0 +63 0.468909 0 0 0 0.326198 0 +64 0.468909 0 0 0 0.326198 0 +65 0.468909 0 0 0 0.326198 0 +66 0.468909 0 0 0 0.326198 0 +67 0.468909 0 0 0 0.326198 0 +68 0.468909 0 0 0 0.326198 0 +69 0.468909 0 0 0 0.326198 0 +70 0.468909 0 0 0 0.326198 0 +71 0.468909 0 0 0 0.326198 0 +72 0.468909 0 0 0 0.326198 0 +73 0.468909 0 0 0 0.326198 0 +74 0.468909 0 0 0 0.326198 0 +75 0.468909 0 0 0 0.326198 0 +76 0.468909 0 0 0 0.326198 0 +77 0.468909 0 0 0 0.326198 0 +78 0.468909 0 0 0 0.326198 0 +79 0.468909 0 0 0 0.326198 0 +80 0.468909 0 0 0 0.326198 0 +81 0.468909 0 0 0 0.326198 0 +82 0.468909 0 0 0 0.326198 0 +83 0.468909 0 0 0 0.326198 0 +84 0.468909 0 0 0 0.326198 0 +85 0.468909 0 0 0 0.326198 0 +86 0.468909 0 0 0 0.326198 0 +87 0.468909 0 0 0 0.326198 0 +88 0.468909 0 0 0 0.326198 0 +89 0.468909 0 0 0 0.326198 0 +90 0.468909 0 0 0 0.326198 0 +91 0.468909 0 0 0 0.326198 0 +92 0.468909 0 0 0 0.326198 0 +93 0.468909 0 0 0 0.326198 0 +94 0.468909 0 0 0 0.326198 0 +95 0.468909 0 0 0 0.326198 0 +96 0.468909 0 0 0 0.326198 0 +97 0.468909 0 0 0 0.326198 0 +98 0.468909 0 0 0 0.326198 0 +99 0.468909 0 0 0 0.326198 0 +100 0.468909 0 0 0 0.326198 0 +101 0.468909 0 0 0 0.326198 0 +102 0.468909 0 0 0 0.326198 0 +103 0.468909 0 0 0 0.326198 0 +104 0.468909 0 0 0 0.326198 0 +105 0.468909 0 0 0 0.326198 0 +106 0.468909 0 0 0 0.326198 0 +107 0.468909 0 0 0 0.326198 0 +108 0.468909 0 0 0 0.326198 0 >>END_MODULE diff --git a/tools/falco/test-data/fastqc_data_nogroup_summary.txt b/tools/falco/test-data/fastqc_data_nogroup_summary.txt deleted file mode 100644 index 7e94fefb156..00000000000 --- a/tools/falco/test-data/fastqc_data_nogroup_summary.txt +++ /dev/null @@ -1,11 +0,0 @@ -PASS Basic Statistics 1000trimmed_fastq -PASS Per base sequence quality 1000trimmed_fastq -FAIL Per tile sequence quality 1000trimmed_fastq -PASS Per sequence quality scores 1000trimmed_fastq -FAIL Per base sequence content 1000trimmed_fastq -WARN Per sequence GC content 1000trimmed_fastq -PASS Per base N content 1000trimmed_fastq -WARN Sequence Length Distribution 1000trimmed_fastq -PASS Sequence Duplication Levels 1000trimmed_fastq -WARN Overrepresented sequences 1000trimmed_fastq -WARN Adapter Content 1000trimmed_fastq diff --git a/tools/falco/test-data/fastqc_data_adapters_summary.txt b/tools/falco/test-data/fastqc_data_summary.txt similarity index 100% rename from tools/falco/test-data/fastqc_data_adapters_summary.txt rename to tools/falco/test-data/fastqc_data_summary.txt diff --git a/tools/falco/test-data/fastqc_report.html b/tools/falco/test-data/fastqc_report.html deleted file mode 100644 index 611aa925db4..00000000000 --- a/tools/falco/test-data/fastqc_report.html +++ /dev/null @@ -1,2 +0,0 @@ - 1000trimmed_fastq - report

Basic Statistics: pass

MeasureValue
Filename1000trimmed_fastq
File typeConventional base calls
EncodingSanger / Illumina 1.9
Total Sequences4905
Sequences Flagged As Poor Quality0
Sequence length1 - 108
%GC:41

Per base sequence quality: pass

Per tile sequence quality : fail

Per sequence quality scores : pass

Per base sequence content : fail

Per sequence GC content: warn

Per base N content : pass

Sequence Length Distribution : warn

Sequence Duplication Levels : pass

Overrepresented sequences : warn

SequenceCountPercentagePossible Source
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCAT330.672783No Hit

Adapter Content : warn

\ No newline at end of file diff --git a/tools/falco/test-data/fastqc_report_adapters.html b/tools/falco/test-data/fastqc_report_adapters.html deleted file mode 100644 index 183af248509..00000000000 --- a/tools/falco/test-data/fastqc_report_adapters.html +++ /dev/null @@ -1,2 +0,0 @@ - 1000trimmed_fastq - report
Report
Sun Sep 1 15:39:42 2024 -
1000trimmed_fastq

Basic Statistics: pass

MeasureValue
Filename1000trimmed_fastq
File typeConventional base calls
EncodingSanger / Illumina 1.9
Total Sequences4905
Sequences Flagged As Poor Quality0
Sequence length1 - 108
%GC:41

Per base sequence quality: pass

Per tile sequence quality : fail

Per sequence quality scores : pass

Per base sequence content : fail

Per sequence GC content: warn

Per base N content : pass

Sequence Length Distribution : warn

Sequence Duplication Levels : pass

Overrepresented sequences : warn

SequenceCountPercentagePossible Source
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCAT330.672783No Hit

Adapter Content : pass

\ No newline at end of file diff --git a/tools/falco/test-data/fastqc_report_bisulfite.html b/tools/falco/test-data/fastqc_report_bisulfite.html deleted file mode 100644 index bab408df38a..00000000000 --- a/tools/falco/test-data/fastqc_report_bisulfite.html +++ /dev/null @@ -1,2 +0,0 @@ - 1000trimmed_fastq - report
Report
Sun Sep 1 15:40:53 2024 -
1000trimmed_fastq

Basic Statistics: pass

MeasureValue
Filename1000trimmed_fastq
File typeConventional base calls
EncodingSanger / Illumina 1.9
Total Sequences4905
Sequences Flagged As Poor Quality0
Sequence length1 - 108
%GC:41

Per base sequence quality: pass

Per tile sequence quality : fail

Per sequence quality scores : pass

Per base sequence content : warn

Per sequence GC content: warn

Per base N content : pass

Sequence Length Distribution : warn

Sequence Duplication Levels : pass

Overrepresented sequences : warn

SequenceCountPercentagePossible Source
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCAT330.672783No Hit

Adapter Content : warn

\ No newline at end of file diff --git a/tools/falco/test-data/fastqc_report_bisulfite.txt b/tools/falco/test-data/fastqc_report_bisulfite.txt index f8d32038dd3..6b767d2c476 100644 --- a/tools/falco/test-data/fastqc_report_bisulfite.txt +++ b/tools/falco/test-data/fastqc_report_bisulfite.txt @@ -1,4 +1,4 @@ -##Falco 1.2.3 +##Falco 1.2.4 >>Basic Statistics pass #Measure Value Filename 1000trimmed_fastq @@ -1597,114 +1597,114 @@ Sequence length 1-108 #Sequence Count Percentage Possible Source ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCAT 33 0.672783 No Hit >>END_MODULE ->>Adapter Content warn +>>Adapter Content pass #Position Illumina Universal Adapter Illumina Small RNA 3' Adapter Illumina Small RNA 5' Adapter Nextera Transposase Sequence PolyA PolyG 1 0 0 0 0 0.0203874 0 -2 0 0 0 0 0.0815494 0 -3 0 0 0 0 0.142712 0 -4 0 0 0 0 0.183486 0 -5 0 0 0 0 0.285423 0 -6 0 0 0 0 0.38736 0 -7 0 0 0 0 0.489297 0 -8 0 0 0 0 0.591233 0 -9 0 0 0 0 0.672783 0 -10 0 0 0 0 0.754332 0 -11 0 0 0 0 0.835882 0 -12 0 0 0 0 0.917431 0 -13 0 0 0 0 1.01937 0 -14 0 0 0 0 1.1213 0 -15 0 0 0 0 1.24363 0 -16 0 0 0 0 1.34557 0 -17 0 0 0 0 1.46789 0 -18 0 0 0 0 1.59021 0 -19 0 0 0 0 1.67176 0 -20 0.122324 0 0 0 1.75331 0 -21 0.122324 0 0 0 1.83486 0 -22 0.122324 0 0 0 1.89602 0 -23 0.122324 0 0 0 1.95719 0 -24 0.122324 0 0 0 2.01835 0 -25 0.122324 0 0 0 2.07951 0 -26 0.122324 0 0 0 2.14067 0 -27 0.142712 0 0 0 2.20183 0 -28 0.183486 0 0 0 2.263 0 -29 0.224261 0 0 0 2.32416 0 -30 0.224261 0 0 0 2.38532 0 -31 0.224261 0 0 0 2.44648 0 -32 0.224261 0 0 0 2.50765 0 -33 0.224261 0 0 0 2.60958 0 -34 0.224261 0 0 0 2.71152 0 -35 0.265036 0 0 0 2.81346 0 -36 0.285423 0 0 0 2.89501 0 -37 0.326198 0 0 0 2.99694 0 -38 0.407747 0 0 0 3.09888 0 -39 0.468909 0 0 0 3.20082 0 -40 0.468909 0 0 0 3.30275 0 -41 0.468909 0 0 0 3.40469 0 -42 0.468909 0 0 0 3.48624 0 -43 0.468909 0 0 0 3.56779 0 -44 0.468909 0 0 0 3.60856 0 -45 0.468909 0 0 0 3.62895 0 -46 0.468909 0 0 0 3.64934 0 -47 0.468909 0 0 0 3.66972 0 -48 0.468909 0 0 0 3.69011 0 -49 0.468909 0 0 0 3.7105 0 -50 0.468909 0 0 0 3.7105 0 -51 0.468909 0 0 0 3.7105 0 -52 0.468909 0 0 0 3.7105 0 -53 0.468909 0 0 0 3.7105 0 -54 0.468909 0 0 0 3.7105 0 -55 0.468909 0 0 0 3.7105 0 -56 0.468909 0 0 0 3.7105 0 -57 0.468909 0 0 0 3.7105 0 -58 0.468909 0 0 0 3.7105 0 -59 0.468909 0 0 0 3.73089 0 -60 0.468909 0 0 0 3.75127 0 -61 0.468909 0 0 0 3.77166 0 -62 0.468909 0 0 0 3.81244 0 -63 0.468909 0 0 0 3.85321 0 -64 0.468909 0 0 0 3.89399 0 -65 0.468909 0 0 0 3.93476 0 -66 0.468909 0 0 0 3.97554 0 -67 0.468909 0 0 0 4.01631 0 -68 0.468909 0 0 0 4.05708 0 -69 0.468909 0 0 0 4.09786 0 -70 0.468909 0 0 0 4.13863 0 -71 0.468909 0 0 0 4.17941 0 -72 0.468909 0 0 0 4.22018 0 -73 0.468909 0 0 0 4.26096 0 -74 0.489297 0 0 0 4.32212 0 -75 0.489297 0 0 0 4.38328 0 -76 0.489297 0 0 0 4.42406 0 -77 0.489297 0 0 0 4.46483 0 -78 0.489297 0 0 0 4.50561 0 -79 0.489297 0 0 0 4.54638 0 -80 0.489297 0 0 0 4.58716 0 -81 0.489297 0 0 0 4.62793 0 -82 0.489297 0 0 0 4.66871 0 -83 0.509684 0 0 0 4.70948 0 -84 0.509684 0 0 0 4.75025 0 -85 0.509684 0 0 0 4.79103 0 -86 0.509684 0 0 0 4.8318 0 -87 0.509684 0 0 0 4.91335 0 -88 0.509684 0 0 0 4.9949 0 -89 0.509684 0 0 0 5.05607 0 -90 0.509684 0 0 0 5.09684 0 -91 0.509684 0 0 0 5.158 0 -92 0.570846 0 0 0 5.21916 0 -93 0.632008 0 0 0 5.28033 0 -94 0.632008 0 0 0 5.34149 0 -95 0.632008 0 0 0 5.40265 0 -96 0.632008 0 0 0 5.46381 0 -97 0.632008 0 0 0 5.52497 0 -98 0.632008 0 0 0 5.52497 0 -99 0.632008 0 0 0 5.52497 0 -100 0.632008 0 0 0 5.52497 0 -101 0.632008 0 0 0 5.52497 0 -102 0.632008 0 0 0 5.52497 0 -103 0.632008 0 0 0 5.52497 0 -104 0.632008 0 0 0 5.52497 0 -105 0.632008 0 0 0 5.52497 0 -106 0.632008 0 0 0 5.52497 0 -107 0.632008 0 0 0 5.52497 0 -108 0.632008 0 0 0 5.52497 0 +2 0 0 0 0 0.0611621 0 +3 0 0 0 0 0.0611621 0 +4 0 0 0 0 0.0611621 0 +5 0 0 0 0 0.122324 0 +6 0 0 0 0 0.122324 0 +7 0 0 0 0 0.122324 0 +8 0 0 0 0 0.142712 0 +9 0 0 0 0 0.142712 0 +10 0 0 0 0 0.142712 0 +11 0 0 0 0 0.142712 0 +12 0 0 0 0 0.142712 0 +13 0 0 0 0 0.163099 0 +14 0 0 0 0 0.163099 0 +15 0 0 0 0 0.183486 0 +16 0 0 0 0 0.203874 0 +17 0 0 0 0 0.224261 0 +18 0 0 0 0 0.224261 0 +19 0 0 0 0 0.224261 0 +20 0.122324 0 0 0 0.244648 0 +21 0.122324 0 0 0 0.244648 0 +22 0.122324 0 0 0 0.244648 0 +23 0.122324 0 0 0 0.244648 0 +24 0.122324 0 0 0 0.244648 0 +25 0.122324 0 0 0 0.244648 0 +26 0.122324 0 0 0 0.244648 0 +27 0.142712 0 0 0 0.244648 0 +28 0.183486 0 0 0 0.244648 0 +29 0.224261 0 0 0 0.244648 0 +30 0.224261 0 0 0 0.244648 0 +31 0.224261 0 0 0 0.244648 0 +32 0.224261 0 0 0 0.244648 0 +33 0.224261 0 0 0 0.285423 0 +34 0.224261 0 0 0 0.285423 0 +35 0.265036 0 0 0 0.30581 0 +36 0.285423 0 0 0 0.30581 0 +37 0.326198 0 0 0 0.326198 0 +38 0.407747 0 0 0 0.326198 0 +39 0.468909 0 0 0 0.326198 0 +40 0.468909 0 0 0 0.326198 0 +41 0.468909 0 0 0 0.326198 0 +42 0.468909 0 0 0 0.326198 0 +43 0.468909 0 0 0 0.326198 0 +44 0.468909 0 0 0 0.326198 0 +45 0.468909 0 0 0 0.326198 0 +46 0.468909 0 0 0 0.326198 0 +47 0.468909 0 0 0 0.326198 0 +48 0.468909 0 0 0 0.326198 0 +49 0.468909 0 0 0 0.326198 0 +50 0.468909 0 0 0 0.326198 0 +51 0.468909 0 0 0 0.326198 0 +52 0.468909 0 0 0 0.326198 0 +53 0.468909 0 0 0 0.326198 0 +54 0.468909 0 0 0 0.326198 0 +55 0.468909 0 0 0 0.326198 0 +56 0.468909 0 0 0 0.326198 0 +57 0.468909 0 0 0 0.326198 0 +58 0.468909 0 0 0 0.326198 0 +59 0.468909 0 0 0 0.326198 0 +60 0.468909 0 0 0 0.326198 0 +61 0.468909 0 0 0 0.326198 0 +62 0.468909 0 0 0 0.326198 0 +63 0.468909 0 0 0 0.326198 0 +64 0.468909 0 0 0 0.326198 0 +65 0.468909 0 0 0 0.326198 0 +66 0.468909 0 0 0 0.326198 0 +67 0.468909 0 0 0 0.326198 0 +68 0.468909 0 0 0 0.326198 0 +69 0.468909 0 0 0 0.326198 0 +70 0.468909 0 0 0 0.326198 0 +71 0.468909 0 0 0 0.326198 0 +72 0.468909 0 0 0 0.326198 0 +73 0.468909 0 0 0 0.326198 0 +74 0.468909 0 0 0 0.326198 0 +75 0.468909 0 0 0 0.326198 0 +76 0.468909 0 0 0 0.326198 0 +77 0.468909 0 0 0 0.326198 0 +78 0.468909 0 0 0 0.326198 0 +79 0.468909 0 0 0 0.326198 0 +80 0.468909 0 0 0 0.326198 0 +81 0.468909 0 0 0 0.326198 0 +82 0.468909 0 0 0 0.326198 0 +83 0.468909 0 0 0 0.326198 0 +84 0.468909 0 0 0 0.326198 0 +85 0.468909 0 0 0 0.326198 0 +86 0.468909 0 0 0 0.326198 0 +87 0.468909 0 0 0 0.326198 0 +88 0.468909 0 0 0 0.326198 0 +89 0.468909 0 0 0 0.326198 0 +90 0.468909 0 0 0 0.326198 0 +91 0.468909 0 0 0 0.326198 0 +92 0.468909 0 0 0 0.326198 0 +93 0.468909 0 0 0 0.326198 0 +94 0.468909 0 0 0 0.326198 0 +95 0.468909 0 0 0 0.326198 0 +96 0.468909 0 0 0 0.326198 0 +97 0.468909 0 0 0 0.326198 0 +98 0.468909 0 0 0 0.326198 0 +99 0.468909 0 0 0 0.326198 0 +100 0.468909 0 0 0 0.326198 0 +101 0.468909 0 0 0 0.326198 0 +102 0.468909 0 0 0 0.326198 0 +103 0.468909 0 0 0 0.326198 0 +104 0.468909 0 0 0 0.326198 0 +105 0.468909 0 0 0 0.326198 0 +106 0.468909 0 0 0 0.326198 0 +107 0.468909 0 0 0 0.326198 0 +108 0.468909 0 0 0 0.326198 0 >>END_MODULE diff --git a/tools/falco/test-data/fastqc_report_bisulfite_summary.txt b/tools/falco/test-data/fastqc_report_bisulfite_summary.txt index 4281c854696..dfd9f170b57 100644 --- a/tools/falco/test-data/fastqc_report_bisulfite_summary.txt +++ b/tools/falco/test-data/fastqc_report_bisulfite_summary.txt @@ -8,4 +8,4 @@ PASS Per base N content 1000trimmed_fastq WARN Sequence Length Distribution 1000trimmed_fastq PASS Sequence Duplication Levels 1000trimmed_fastq WARN Overrepresented sequences 1000trimmed_fastq -WARN Adapter Content 1000trimmed_fastq +PASS Adapter Content 1000trimmed_fastq diff --git a/tools/falco/test-data/fastqc_report_contaminants.html b/tools/falco/test-data/fastqc_report_contaminants.html deleted file mode 100644 index d7a95504ae5..00000000000 --- a/tools/falco/test-data/fastqc_report_contaminants.html +++ /dev/null @@ -1,2 +0,0 @@ - 1000trimmed_fastq - report
Report
Sun Sep 1 15:39:23 2024 -
1000trimmed_fastq

Basic Statistics: pass

MeasureValue
Filename1000trimmed_fastq
File typeConventional base calls
EncodingSanger / Illumina 1.9
Total Sequences4905
Sequences Flagged As Poor Quality0
Sequence length1 - 108
%GC:41

Per base sequence quality: pass

Per tile sequence quality : fail

Per sequence quality scores : pass

Per base sequence content : fail

Per sequence GC content: warn

Per base N content : pass

Sequence Length Distribution : warn

Sequence Duplication Levels : pass

Overrepresented sequences : warn

SequenceCountPercentagePossible Source
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCAT330.672783No Hit

Adapter Content : warn

\ No newline at end of file diff --git a/tools/falco/test-data/fastqc_report_customlimits.html b/tools/falco/test-data/fastqc_report_customlimits.html deleted file mode 100644 index b923bc5f79b..00000000000 --- a/tools/falco/test-data/fastqc_report_customlimits.html +++ /dev/null @@ -1,2 +0,0 @@ - 1000trimmed_fastq - report
Report
Sun Sep 1 15:40:01 2024 -
1000trimmed_fastq

Basic Statistics: pass

MeasureValue
Filename1000trimmed_fastq
File typeConventional base calls
EncodingSanger / Illumina 1.9
Total Sequences4905
Sequences Flagged As Poor Quality0
Sequence length1 - 108
%GC:41

Per base sequence quality: pass

Per tile sequence quality : fail

Per sequence quality scores : pass

Per base sequence content : fail

Per sequence GC content: warn

Per base N content : pass

Sequence Length Distribution : warn

Sequence Duplication Levels : pass

Overrepresented sequences : warn

SequenceCountPercentagePossible Source
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCAT330.672783No Hit

Adapter Content : warn

\ No newline at end of file diff --git a/tools/falco/test-data/fastqc_report_hisat.html b/tools/falco/test-data/fastqc_report_hisat.html deleted file mode 100644 index 507f4a078f8..00000000000 --- a/tools/falco/test-data/fastqc_report_hisat.html +++ /dev/null @@ -1,187 +0,0 @@ -hisat_output_1_bam FastQC Report
FastQCFastQC Report
Thu 8 Jun 2023
hisat_output_1_bam

[OK]Basic Statistics

MeasureValue
Filenamehisat_output_1_bam
File typeConventional base calls
EncodingSanger / Illumina 1.9
Total Sequences20
Total Bases1.4 kbp
Sequences flagged as poor quality0
Sequence length70
%GC43

[OK]Per base sequence quality

Per base quality graph

[FAIL]Per sequence quality scores

Per Sequence quality graph

[FAIL]Per base sequence content

Per base sequence content

[FAIL]Per sequence GC content

Per sequence GC content graph

[OK]Per base N content

N content graph

[OK]Sequence Length Distribution

Sequence length distribution

[OK]Sequence Duplication Levels

Duplication level graph

[FAIL]Overrepresented sequences

SequenceCountPercentagePossible Source
CCTTTCGCCATCAACTAACGATTCTGTCAAAAACTGACGCGTTGGATGAG15.0No Hit
TGGCGCTCTCCGTCTTTCTCCATTTCGTCGTGGCCTTGCTATTGACTCTA15.0No Hit
ACCATAAACGCAAGCCTCAACGCAGCGACGAGCACGAGAGCGGTCAGTAG15.0No Hit
TGTTTTCCGTAAATTCAGCGCCTTCCATGATGCGACAGGCCGTTTGAATG15.0No Hit
CTGGCACTTCTGCCGTTTCTGATAAGTTGCTTGATTTGGTTGGACTTGGT15.0No Hit
TCTGCGTTTGCTGATGAACTAAGTCAACCTCAGCACTAACCTTGCGAGTC15.0No Hit
CCATACAAAACAGGGTCGCCAGCAATATCGGTATAAGTCAAAGCACCTTT15.0No Hit
TAAGCATTTGTTTCAGGGTTATTTGAATATCTATAACAACTATTTTCAAG15.0No Hit
CAAATTAGCATAAGCAGCTTGCAGACCCATAATGTCAATAGATGTGGTAG15.0No Hit
GCGTTAAGGTACTGAATCTCTTTAGTCGCAGTAGGCGGAAAACGAACAAG15.0No Hit
CTGAATGGAATTAAGAAAACCACCAATACCAGCATTAACCTTCAAACTAT15.0No Hit
GCGACCATTCAAAGGATAAACATCATAGGCAGTCGGGAGGGTAGTCGGAA15.0No Hit
GTGAAATTTCTAGGAAGGATGTTTTCCGTTCTGGTGATTCGTCTAAGAAG15.0No Hit
CTCAAATCCGGCGTCAACCATACCAGCATAGGAAGCATCAGCACCAGCAC15.0No Hit
TTCTGGTGATTTGCAAGAACGCGTACTTATTCGCCACCATGATTATGACC15.0No Hit
CTCGCGATTCAATCATGACTTCGTGATAAAAGATTGAGTGTGAGGTTATA15.0No Hit
TTAGGTGTGTGTAAAACAGGTGCCGAAGAAGCTGGATTAACAGAATTGAG15.0No Hit
GCGGTATTGCTTCTGCTCTTGCTGGTGGCGCCATGTCTAAATTGTTTGGA15.0No Hit
TTTCGGATATTTCTGATGAGTCGAAAAATTATCTTGATAAAGCAGTAATT15.0No Hit
CTCGCCAAATGACGACTTCTACCACATCTATTGACATTATGGGTCTGCAA15.0No Hit

[OK]Adapter Content

Adapter graph

\ No newline at end of file diff --git a/tools/falco/test-data/fastqc_report_kmer.html b/tools/falco/test-data/fastqc_report_kmer.html deleted file mode 100644 index e4a5cb59dcf..00000000000 --- a/tools/falco/test-data/fastqc_report_kmer.html +++ /dev/null @@ -1,2 +0,0 @@ - 1000trimmed_fastq - report
Report
Mon May 27 16:59:30 2024 -
1000trimmed_fastq

Basic Statistics: pass

MeasureValue
Filename1000trimmed_fastq
File typeConventional base calls
EncodingSanger / Illumina 1.9
Total Sequences4905
Sequences Flagged As Poor Quality0
Sequence length1 - 108
%GC:41

Per base sequence quality: pass

Per tile sequence quality : fail

Per sequence quality scores : pass

Per base sequence content : fail

Per sequence GC content: warn

Per base N content : pass

Sequence Length Distribution : warn

Sequence Duplication Levels : pass

Overrepresented sequences : warn

SequenceCountPercentagePossible Source
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCAT330.672783No Hit

Adapter Content : pass

\ No newline at end of file diff --git a/tools/falco/test-data/fastqc_report_min_length.html b/tools/falco/test-data/fastqc_report_min_length.html deleted file mode 100644 index d9309493339..00000000000 --- a/tools/falco/test-data/fastqc_report_min_length.html +++ /dev/null @@ -1,2 +0,0 @@ - 1000trimmed_fastq - report
Report
Mon May 27 17:01:42 2024 -
1000trimmed_fastq

Basic Statistics: pass

MeasureValue
Filename1000trimmed_fastq
File typeConventional base calls
EncodingSanger / Illumina 1.9
Total Sequences4905
Sequences Flagged As Poor Quality0
Sequence length1 - 108
%GC:41

Per base sequence quality: pass

Per tile sequence quality : fail

Per sequence quality scores : pass

Per base sequence content : fail

Per sequence GC content: warn

Per base N content : pass

Sequence Length Distribution : warn

Sequence Duplication Levels : pass

Overrepresented sequences : warn

SequenceCountPercentagePossible Source
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCAT330.672783No Hit

Adapter Content : pass

\ No newline at end of file diff --git a/tools/falco/test-data/fastqc_report_nogroup.html b/tools/falco/test-data/fastqc_report_nogroup.html deleted file mode 100644 index 444964c36d3..00000000000 --- a/tools/falco/test-data/fastqc_report_nogroup.html +++ /dev/null @@ -1,2 +0,0 @@ - 1000trimmed_fastq - report
Report
Sun Sep 1 15:40:19 2024 -
1000trimmed_fastq

Basic Statistics: pass

MeasureValue
Filename1000trimmed_fastq
File typeConventional base calls
EncodingSanger / Illumina 1.9
Total Sequences4905
Sequences Flagged As Poor Quality0
Sequence length1 - 108
%GC:41

Per base sequence quality: pass

Per tile sequence quality : fail

Per sequence quality scores : pass

Per base sequence content : fail

Per sequence GC content: warn

Per base N content : pass

Sequence Length Distribution : warn

Sequence Duplication Levels : pass

Overrepresented sequences : warn

SequenceCountPercentagePossible Source
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCAT330.672783No Hit

Adapter Content : warn

\ No newline at end of file diff --git a/tools/falco/test-data/fastqc_report_reverse_complement.html b/tools/falco/test-data/fastqc_report_reverse_complement.html deleted file mode 100644 index 47057a8fc44..00000000000 --- a/tools/falco/test-data/fastqc_report_reverse_complement.html +++ /dev/null @@ -1,2 +0,0 @@ - 1000trimmed_fastq - report
Report
Sun Sep 1 15:41:08 2024 -
1000trimmed_fastq

Basic Statistics: pass

MeasureValue
Filename1000trimmed_fastq
File typeConventional base calls
EncodingSanger / Illumina 1.9
Total Sequences4905
Sequences Flagged As Poor Quality0
Sequence length1 - 108
%GC:41

Per base sequence quality: pass

Per tile sequence quality : fail

Per sequence quality scores : pass

Per base sequence content : fail

Per sequence GC content: warn

Per base N content : pass

Sequence Length Distribution : warn

Sequence Duplication Levels : pass

Overrepresented sequences : warn

SequenceCountPercentagePossible Source
ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCAT330.672783No Hit

Adapter Content : warn

\ No newline at end of file diff --git a/tools/falco/test-data/fastqc_report_reverse_complement.txt b/tools/falco/test-data/fastqc_report_reverse_complement.txt index 4cd55952a12..e47fcd7b37c 100644 --- a/tools/falco/test-data/fastqc_report_reverse_complement.txt +++ b/tools/falco/test-data/fastqc_report_reverse_complement.txt @@ -1,4 +1,4 @@ -##Falco 1.2.3 +##Falco 1.2.4 >>Basic Statistics pass #Measure Value Filename 1000trimmed_fastq @@ -1597,114 +1597,114 @@ Sequence length 1-108 #Sequence Count Percentage Possible Source ATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCAT 33 0.672783 No Hit >>END_MODULE ->>Adapter Content warn +>>Adapter Content pass #Position Illumina Universal Adapter Illumina Small RNA 3' Adapter Illumina Small RNA 5' Adapter Nextera Transposase Sequence PolyA PolyG 1 0 0 0 0 0.0203874 0 -2 0 0 0 0 0.0815494 0 -3 0 0 0 0 0.142712 0 -4 0 0 0 0 0.183486 0 -5 0 0 0 0 0.285423 0 -6 0 0 0 0 0.38736 0 -7 0 0 0 0 0.489297 0 -8 0 0 0 0 0.591233 0 -9 0 0 0 0 0.672783 0 -10 0 0 0 0 0.754332 0 -11 0 0 0 0 0.835882 0 -12 0 0 0 0 0.917431 0 -13 0 0 0 0 1.01937 0 -14 0 0 0 0 1.1213 0 -15 0 0 0 0 1.24363 0 -16 0 0 0 0 1.34557 0 -17 0 0 0 0 1.46789 0 -18 0 0 0 0 1.59021 0 -19 0 0 0 0 1.67176 0 -20 0.122324 0 0 0 1.75331 0 -21 0.122324 0 0 0 1.83486 0 -22 0.122324 0 0 0 1.89602 0 -23 0.122324 0 0 0 1.95719 0 -24 0.122324 0 0 0 2.01835 0 -25 0.122324 0 0 0 2.07951 0 -26 0.122324 0 0 0 2.14067 0 -27 0.142712 0 0 0 2.20183 0 -28 0.183486 0 0 0 2.263 0 -29 0.224261 0 0 0 2.32416 0 -30 0.224261 0 0 0 2.38532 0 -31 0.224261 0 0 0 2.44648 0 -32 0.224261 0 0 0 2.50765 0 -33 0.224261 0 0 0 2.60958 0 -34 0.224261 0 0 0 2.71152 0 -35 0.265036 0 0 0 2.81346 0 -36 0.285423 0 0 0 2.89501 0 -37 0.326198 0 0 0 2.99694 0 -38 0.407747 0 0 0 3.09888 0 -39 0.468909 0 0 0 3.20082 0 -40 0.468909 0 0 0 3.30275 0 -41 0.468909 0 0 0 3.40469 0 -42 0.468909 0 0 0 3.48624 0 -43 0.468909 0 0 0 3.56779 0 -44 0.468909 0 0 0 3.60856 0 -45 0.468909 0 0 0 3.62895 0 -46 0.468909 0 0 0 3.64934 0 -47 0.468909 0 0 0 3.66972 0 -48 0.468909 0 0 0 3.69011 0 -49 0.468909 0 0 0 3.7105 0 -50 0.468909 0 0 0 3.7105 0 -51 0.468909 0 0 0 3.7105 0 -52 0.468909 0 0 0 3.7105 0 -53 0.468909 0 0 0 3.7105 0 -54 0.468909 0 0 0 3.7105 0 -55 0.468909 0 0 0 3.7105 0 -56 0.468909 0 0 0 3.7105 0 -57 0.468909 0 0 0 3.7105 0 -58 0.468909 0 0 0 3.7105 0 -59 0.468909 0 0 0 3.73089 0 -60 0.468909 0 0 0 3.75127 0 -61 0.468909 0 0 0 3.77166 0 -62 0.468909 0 0 0 3.81244 0 -63 0.468909 0 0 0 3.85321 0 -64 0.468909 0 0 0 3.89399 0 -65 0.468909 0 0 0 3.93476 0 -66 0.468909 0 0 0 3.97554 0 -67 0.468909 0 0 0 4.01631 0 -68 0.468909 0 0 0 4.05708 0 -69 0.468909 0 0 0 4.09786 0 -70 0.468909 0 0 0 4.13863 0 -71 0.468909 0 0 0 4.17941 0 -72 0.468909 0 0 0 4.22018 0 -73 0.468909 0 0 0 4.26096 0 -74 0.489297 0 0 0 4.32212 0 -75 0.489297 0 0 0 4.38328 0 -76 0.489297 0 0 0 4.42406 0 -77 0.489297 0 0 0 4.46483 0 -78 0.489297 0 0 0 4.50561 0 -79 0.489297 0 0 0 4.54638 0 -80 0.489297 0 0 0 4.58716 0 -81 0.489297 0 0 0 4.62793 0 -82 0.489297 0 0 0 4.66871 0 -83 0.509684 0 0 0 4.70948 0 -84 0.509684 0 0 0 4.75025 0 -85 0.509684 0 0 0 4.79103 0 -86 0.509684 0 0 0 4.8318 0 -87 0.509684 0 0 0 4.91335 0 -88 0.509684 0 0 0 4.9949 0 -89 0.509684 0 0 0 5.05607 0 -90 0.509684 0 0 0 5.09684 0 -91 0.509684 0 0 0 5.158 0 -92 0.570846 0 0 0 5.21916 0 -93 0.632008 0 0 0 5.28033 0 -94 0.632008 0 0 0 5.34149 0 -95 0.632008 0 0 0 5.40265 0 -96 0.632008 0 0 0 5.46381 0 -97 0.632008 0 0 0 5.52497 0 -98 0.632008 0 0 0 5.52497 0 -99 0.632008 0 0 0 5.52497 0 -100 0.632008 0 0 0 5.52497 0 -101 0.632008 0 0 0 5.52497 0 -102 0.632008 0 0 0 5.52497 0 -103 0.632008 0 0 0 5.52497 0 -104 0.632008 0 0 0 5.52497 0 -105 0.632008 0 0 0 5.52497 0 -106 0.632008 0 0 0 5.52497 0 -107 0.632008 0 0 0 5.52497 0 -108 0.632008 0 0 0 5.52497 0 +2 0 0 0 0 0.0611621 0 +3 0 0 0 0 0.0611621 0 +4 0 0 0 0 0.0611621 0 +5 0 0 0 0 0.122324 0 +6 0 0 0 0 0.122324 0 +7 0 0 0 0 0.122324 0 +8 0 0 0 0 0.142712 0 +9 0 0 0 0 0.142712 0 +10 0 0 0 0 0.142712 0 +11 0 0 0 0 0.142712 0 +12 0 0 0 0 0.142712 0 +13 0 0 0 0 0.163099 0 +14 0 0 0 0 0.163099 0 +15 0 0 0 0 0.183486 0 +16 0 0 0 0 0.203874 0 +17 0 0 0 0 0.224261 0 +18 0 0 0 0 0.224261 0 +19 0 0 0 0 0.224261 0 +20 0.122324 0 0 0 0.244648 0 +21 0.122324 0 0 0 0.244648 0 +22 0.122324 0 0 0 0.244648 0 +23 0.122324 0 0 0 0.244648 0 +24 0.122324 0 0 0 0.244648 0 +25 0.122324 0 0 0 0.244648 0 +26 0.122324 0 0 0 0.244648 0 +27 0.142712 0 0 0 0.244648 0 +28 0.183486 0 0 0 0.244648 0 +29 0.224261 0 0 0 0.244648 0 +30 0.224261 0 0 0 0.244648 0 +31 0.224261 0 0 0 0.244648 0 +32 0.224261 0 0 0 0.244648 0 +33 0.224261 0 0 0 0.285423 0 +34 0.224261 0 0 0 0.285423 0 +35 0.265036 0 0 0 0.30581 0 +36 0.285423 0 0 0 0.30581 0 +37 0.326198 0 0 0 0.326198 0 +38 0.407747 0 0 0 0.326198 0 +39 0.468909 0 0 0 0.326198 0 +40 0.468909 0 0 0 0.326198 0 +41 0.468909 0 0 0 0.326198 0 +42 0.468909 0 0 0 0.326198 0 +43 0.468909 0 0 0 0.326198 0 +44 0.468909 0 0 0 0.326198 0 +45 0.468909 0 0 0 0.326198 0 +46 0.468909 0 0 0 0.326198 0 +47 0.468909 0 0 0 0.326198 0 +48 0.468909 0 0 0 0.326198 0 +49 0.468909 0 0 0 0.326198 0 +50 0.468909 0 0 0 0.326198 0 +51 0.468909 0 0 0 0.326198 0 +52 0.468909 0 0 0 0.326198 0 +53 0.468909 0 0 0 0.326198 0 +54 0.468909 0 0 0 0.326198 0 +55 0.468909 0 0 0 0.326198 0 +56 0.468909 0 0 0 0.326198 0 +57 0.468909 0 0 0 0.326198 0 +58 0.468909 0 0 0 0.326198 0 +59 0.468909 0 0 0 0.326198 0 +60 0.468909 0 0 0 0.326198 0 +61 0.468909 0 0 0 0.326198 0 +62 0.468909 0 0 0 0.326198 0 +63 0.468909 0 0 0 0.326198 0 +64 0.468909 0 0 0 0.326198 0 +65 0.468909 0 0 0 0.326198 0 +66 0.468909 0 0 0 0.326198 0 +67 0.468909 0 0 0 0.326198 0 +68 0.468909 0 0 0 0.326198 0 +69 0.468909 0 0 0 0.326198 0 +70 0.468909 0 0 0 0.326198 0 +71 0.468909 0 0 0 0.326198 0 +72 0.468909 0 0 0 0.326198 0 +73 0.468909 0 0 0 0.326198 0 +74 0.468909 0 0 0 0.326198 0 +75 0.468909 0 0 0 0.326198 0 +76 0.468909 0 0 0 0.326198 0 +77 0.468909 0 0 0 0.326198 0 +78 0.468909 0 0 0 0.326198 0 +79 0.468909 0 0 0 0.326198 0 +80 0.468909 0 0 0 0.326198 0 +81 0.468909 0 0 0 0.326198 0 +82 0.468909 0 0 0 0.326198 0 +83 0.468909 0 0 0 0.326198 0 +84 0.468909 0 0 0 0.326198 0 +85 0.468909 0 0 0 0.326198 0 +86 0.468909 0 0 0 0.326198 0 +87 0.468909 0 0 0 0.326198 0 +88 0.468909 0 0 0 0.326198 0 +89 0.468909 0 0 0 0.326198 0 +90 0.468909 0 0 0 0.326198 0 +91 0.468909 0 0 0 0.326198 0 +92 0.468909 0 0 0 0.326198 0 +93 0.468909 0 0 0 0.326198 0 +94 0.468909 0 0 0 0.326198 0 +95 0.468909 0 0 0 0.326198 0 +96 0.468909 0 0 0 0.326198 0 +97 0.468909 0 0 0 0.326198 0 +98 0.468909 0 0 0 0.326198 0 +99 0.468909 0 0 0 0.326198 0 +100 0.468909 0 0 0 0.326198 0 +101 0.468909 0 0 0 0.326198 0 +102 0.468909 0 0 0 0.326198 0 +103 0.468909 0 0 0 0.326198 0 +104 0.468909 0 0 0 0.326198 0 +105 0.468909 0 0 0 0.326198 0 +106 0.468909 0 0 0 0.326198 0 +107 0.468909 0 0 0 0.326198 0 +108 0.468909 0 0 0 0.326198 0 >>END_MODULE diff --git a/tools/falco/test-data/fastqc_report_reverse_complement_summary.txt b/tools/falco/test-data/fastqc_report_reverse_complement_summary.txt deleted file mode 100644 index 7e94fefb156..00000000000 --- a/tools/falco/test-data/fastqc_report_reverse_complement_summary.txt +++ /dev/null @@ -1,11 +0,0 @@ -PASS Basic Statistics 1000trimmed_fastq -PASS Per base sequence quality 1000trimmed_fastq -FAIL Per tile sequence quality 1000trimmed_fastq -PASS Per sequence quality scores 1000trimmed_fastq -FAIL Per base sequence content 1000trimmed_fastq -WARN Per sequence GC content 1000trimmed_fastq -PASS Per base N content 1000trimmed_fastq -WARN Sequence Length Distribution 1000trimmed_fastq -PASS Sequence Duplication Levels 1000trimmed_fastq -WARN Overrepresented sequences 1000trimmed_fastq -WARN Adapter Content 1000trimmed_fastq diff --git a/tools/falco/test-data/fastqc_report_subsample.html b/tools/falco/test-data/fastqc_report_subsample.html deleted file mode 100644 index b3fc3892e5a..00000000000 --- a/tools/falco/test-data/fastqc_report_subsample.html +++ /dev/null @@ -1,2 +0,0 @@ - 1000trimmed_fastq - report
Report
Sun Sep 1 15:40:37 2024 -
1000trimmed_fastq

Basic Statistics: pass

MeasureValue
Filename1000trimmed_fastq
File typeConventional base calls
EncodingSanger / Illumina 1.9
Total Sequences4905
Sequences Flagged As Poor Quality0
Sequence length1 - 108
%GC:41

Per base sequence quality: pass

Per tile sequence quality : fail

Per sequence quality scores : pass

Per base sequence content : fail

Per sequence GC content: warn

Per base N content : pass

Sequence Length Distribution : warn

Sequence Duplication Levels : pass

Overrepresented sequences : pass

No overrepresented sequences

Adapter Content : pass

\ No newline at end of file diff --git a/tools/falco/test-data/fastqc_report_subsample.txt b/tools/falco/test-data/fastqc_report_subsample.txt index 601284edbd7..e0059f22fea 100644 --- a/tools/falco/test-data/fastqc_report_subsample.txt +++ b/tools/falco/test-data/fastqc_report_subsample.txt @@ -1,4 +1,4 @@ -##Falco 1.2.3 +##Falco 1.2.4 >>Basic Statistics pass #Measure Value Filename 1000trimmed_fastq @@ -1593,110 +1593,110 @@ Sequence length 1-108 #Position Illumina Universal Adapter Illumina Small RNA 3' Adapter Illumina Small RNA 5' Adapter Nextera Transposase Sequence PolyA PolyG 1 0 0 0 0 0 0 2 0 0 0 0 0.0203874 0 -3 0 0 0 0 0.0407747 0 -4 0 0 0 0 0.0407747 0 -5 0 0 0 0 0.0407747 0 -6 0 0 0 0 0.0407747 0 -7 0 0 0 0 0.0407747 0 -8 0 0 0 0 0.0407747 0 -9 0 0 0 0 0.0407747 0 -10 0 0 0 0 0.0407747 0 -11 0 0 0 0 0.0407747 0 -12 0 0 0 0 0.0407747 0 -13 0 0 0 0 0.0407747 0 -14 0 0 0 0 0.0407747 0 -15 0 0 0 0 0.0407747 0 -16 0 0 0 0 0.0407747 0 -17 0 0 0 0 0.0611621 0 -18 0 0 0 0 0.0815494 0 -19 0 0 0 0 0.0815494 0 -20 0.0203874 0 0 0 0.0815494 0 -21 0.0203874 0 0 0 0.0815494 0 -22 0.0203874 0 0 0 0.0815494 0 -23 0.0203874 0 0 0 0.0815494 0 -24 0.0203874 0 0 0 0.0815494 0 -25 0.0203874 0 0 0 0.0815494 0 -26 0.0203874 0 0 0 0.0815494 0 -27 0.0203874 0 0 0 0.0815494 0 -28 0.0203874 0 0 0 0.0815494 0 -29 0.0203874 0 0 0 0.0815494 0 -30 0.0203874 0 0 0 0.0815494 0 -31 0.0203874 0 0 0 0.0815494 0 -32 0.0203874 0 0 0 0.0815494 0 -33 0.0203874 0 0 0 0.0815494 0 -34 0.0203874 0 0 0 0.0815494 0 -35 0.0203874 0 0 0 0.0815494 0 -36 0.0203874 0 0 0 0.0815494 0 -37 0.0203874 0 0 0 0.0815494 0 -38 0.0407747 0 0 0 0.0815494 0 -39 0.0611621 0 0 0 0.0815494 0 -40 0.0611621 0 0 0 0.0815494 0 -41 0.0611621 0 0 0 0.0815494 0 -42 0.0611621 0 0 0 0.0815494 0 -43 0.0611621 0 0 0 0.0815494 0 -44 0.0611621 0 0 0 0.0815494 0 -45 0.0611621 0 0 0 0.0815494 0 -46 0.0611621 0 0 0 0.0815494 0 -47 0.0611621 0 0 0 0.0815494 0 -48 0.0611621 0 0 0 0.0815494 0 -49 0.0611621 0 0 0 0.0815494 0 -50 0.0611621 0 0 0 0.0815494 0 -51 0.0611621 0 0 0 0.0815494 0 -52 0.0611621 0 0 0 0.0815494 0 -53 0.0611621 0 0 0 0.0815494 0 -54 0.0611621 0 0 0 0.0815494 0 -55 0.0611621 0 0 0 0.0815494 0 -56 0.0611621 0 0 0 0.0815494 0 -57 0.0611621 0 0 0 0.0815494 0 -58 0.0611621 0 0 0 0.0815494 0 -59 0.0611621 0 0 0 0.0815494 0 -60 0.0611621 0 0 0 0.0815494 0 -61 0.0611621 0 0 0 0.0815494 0 -62 0.0611621 0 0 0 0.0815494 0 -63 0.0611621 0 0 0 0.0815494 0 -64 0.0611621 0 0 0 0.0815494 0 -65 0.0611621 0 0 0 0.0815494 0 -66 0.0611621 0 0 0 0.0815494 0 -67 0.0611621 0 0 0 0.0815494 0 -68 0.0611621 0 0 0 0.0815494 0 -69 0.0611621 0 0 0 0.0815494 0 -70 0.0611621 0 0 0 0.0815494 0 -71 0.0611621 0 0 0 0.0815494 0 -72 0.0611621 0 0 0 0.0815494 0 -73 0.0611621 0 0 0 0.0815494 0 -74 0.0815494 0 0 0 0.0815494 0 -75 0.0815494 0 0 0 0.0815494 0 -76 0.0815494 0 0 0 0.0815494 0 -77 0.0815494 0 0 0 0.0815494 0 -78 0.0815494 0 0 0 0.0815494 0 -79 0.0815494 0 0 0 0.0815494 0 -80 0.0815494 0 0 0 0.0815494 0 -81 0.0815494 0 0 0 0.0815494 0 -82 0.0815494 0 0 0 0.0815494 0 -83 0.0815494 0 0 0 0.0815494 0 -84 0.0815494 0 0 0 0.0815494 0 -85 0.0815494 0 0 0 0.0815494 0 -86 0.0815494 0 0 0 0.0815494 0 -87 0.0815494 0 0 0 0.0815494 0 -88 0.0815494 0 0 0 0.0815494 0 -89 0.0815494 0 0 0 0.0815494 0 -90 0.0815494 0 0 0 0.0815494 0 -91 0.0815494 0 0 0 0.0815494 0 -92 0.101937 0 0 0 0.0815494 0 -93 0.122324 0 0 0 0.0815494 0 -94 0.122324 0 0 0 0.0815494 0 -95 0.122324 0 0 0 0.0815494 0 -96 0.122324 0 0 0 0.0815494 0 -97 0.122324 0 0 0 0.0815494 0 -98 0.122324 0 0 0 0.0815494 0 -99 0.122324 0 0 0 0.0815494 0 -100 0.122324 0 0 0 0.0815494 0 -101 0.122324 0 0 0 0.0815494 0 -102 0.122324 0 0 0 0.0815494 0 -103 0.122324 0 0 0 0.0815494 0 -104 0.122324 0 0 0 0.0815494 0 -105 0.122324 0 0 0 0.0815494 0 -106 0.122324 0 0 0 0.0815494 0 -107 0.122324 0 0 0 0.0815494 0 -108 0.122324 0 0 0 0.0815494 0 +3 0 0 0 0 0.0203874 0 +4 0 0 0 0 0.0203874 0 +5 0 0 0 0 0.0203874 0 +6 0 0 0 0 0.0203874 0 +7 0 0 0 0 0.0203874 0 +8 0 0 0 0 0.0203874 0 +9 0 0 0 0 0.0203874 0 +10 0 0 0 0 0.0203874 0 +11 0 0 0 0 0.0203874 0 +12 0 0 0 0 0.0203874 0 +13 0 0 0 0 0.0203874 0 +14 0 0 0 0 0.0203874 0 +15 0 0 0 0 0.0203874 0 +16 0 0 0 0 0.0203874 0 +17 0 0 0 0 0.0407747 0 +18 0 0 0 0 0.0407747 0 +19 0 0 0 0 0.0407747 0 +20 0.0203874 0 0 0 0.0407747 0 +21 0.0203874 0 0 0 0.0407747 0 +22 0.0203874 0 0 0 0.0407747 0 +23 0.0203874 0 0 0 0.0407747 0 +24 0.0203874 0 0 0 0.0407747 0 +25 0.0203874 0 0 0 0.0407747 0 +26 0.0203874 0 0 0 0.0407747 0 +27 0.0203874 0 0 0 0.0407747 0 +28 0.0203874 0 0 0 0.0407747 0 +29 0.0203874 0 0 0 0.0407747 0 +30 0.0203874 0 0 0 0.0407747 0 +31 0.0203874 0 0 0 0.0407747 0 +32 0.0203874 0 0 0 0.0407747 0 +33 0.0203874 0 0 0 0.0407747 0 +34 0.0203874 0 0 0 0.0407747 0 +35 0.0203874 0 0 0 0.0407747 0 +36 0.0203874 0 0 0 0.0407747 0 +37 0.0203874 0 0 0 0.0407747 0 +38 0.0407747 0 0 0 0.0407747 0 +39 0.0611621 0 0 0 0.0407747 0 +40 0.0611621 0 0 0 0.0407747 0 +41 0.0611621 0 0 0 0.0407747 0 +42 0.0611621 0 0 0 0.0407747 0 +43 0.0611621 0 0 0 0.0407747 0 +44 0.0611621 0 0 0 0.0407747 0 +45 0.0611621 0 0 0 0.0407747 0 +46 0.0611621 0 0 0 0.0407747 0 +47 0.0611621 0 0 0 0.0407747 0 +48 0.0611621 0 0 0 0.0407747 0 +49 0.0611621 0 0 0 0.0407747 0 +50 0.0611621 0 0 0 0.0407747 0 +51 0.0611621 0 0 0 0.0407747 0 +52 0.0611621 0 0 0 0.0407747 0 +53 0.0611621 0 0 0 0.0407747 0 +54 0.0611621 0 0 0 0.0407747 0 +55 0.0611621 0 0 0 0.0407747 0 +56 0.0611621 0 0 0 0.0407747 0 +57 0.0611621 0 0 0 0.0407747 0 +58 0.0611621 0 0 0 0.0407747 0 +59 0.0611621 0 0 0 0.0407747 0 +60 0.0611621 0 0 0 0.0407747 0 +61 0.0611621 0 0 0 0.0407747 0 +62 0.0611621 0 0 0 0.0407747 0 +63 0.0611621 0 0 0 0.0407747 0 +64 0.0611621 0 0 0 0.0407747 0 +65 0.0611621 0 0 0 0.0407747 0 +66 0.0611621 0 0 0 0.0407747 0 +67 0.0611621 0 0 0 0.0407747 0 +68 0.0611621 0 0 0 0.0407747 0 +69 0.0611621 0 0 0 0.0407747 0 +70 0.0611621 0 0 0 0.0407747 0 +71 0.0611621 0 0 0 0.0407747 0 +72 0.0611621 0 0 0 0.0407747 0 +73 0.0611621 0 0 0 0.0407747 0 +74 0.0611621 0 0 0 0.0407747 0 +75 0.0611621 0 0 0 0.0407747 0 +76 0.0611621 0 0 0 0.0407747 0 +77 0.0611621 0 0 0 0.0407747 0 +78 0.0611621 0 0 0 0.0407747 0 +79 0.0611621 0 0 0 0.0407747 0 +80 0.0611621 0 0 0 0.0407747 0 +81 0.0611621 0 0 0 0.0407747 0 +82 0.0611621 0 0 0 0.0407747 0 +83 0.0611621 0 0 0 0.0407747 0 +84 0.0611621 0 0 0 0.0407747 0 +85 0.0611621 0 0 0 0.0407747 0 +86 0.0611621 0 0 0 0.0407747 0 +87 0.0611621 0 0 0 0.0407747 0 +88 0.0611621 0 0 0 0.0407747 0 +89 0.0611621 0 0 0 0.0407747 0 +90 0.0611621 0 0 0 0.0407747 0 +91 0.0611621 0 0 0 0.0407747 0 +92 0.0611621 0 0 0 0.0407747 0 +93 0.0611621 0 0 0 0.0407747 0 +94 0.0611621 0 0 0 0.0407747 0 +95 0.0611621 0 0 0 0.0407747 0 +96 0.0611621 0 0 0 0.0407747 0 +97 0.0611621 0 0 0 0.0407747 0 +98 0.0611621 0 0 0 0.0407747 0 +99 0.0611621 0 0 0 0.0407747 0 +100 0.0611621 0 0 0 0.0407747 0 +101 0.0611621 0 0 0 0.0407747 0 +102 0.0611621 0 0 0 0.0407747 0 +103 0.0611621 0 0 0 0.0407747 0 +104 0.0611621 0 0 0 0.0407747 0 +105 0.0611621 0 0 0 0.0407747 0 +106 0.0611621 0 0 0 0.0407747 0 +107 0.0611621 0 0 0 0.0407747 0 +108 0.0611621 0 0 0 0.0407747 0 >>END_MODULE diff --git a/tools/falco/test-data/summary.txt b/tools/falco/test-data/summary.txt deleted file mode 100644 index 109484ffc6f..00000000000 --- a/tools/falco/test-data/summary.txt +++ /dev/null @@ -1,11 +0,0 @@ -PASS Basic Statistics 1000trimmed_fastq -PASS Per base sequence quality 1000trimmed_fastq -FAIL Per tile sequence quality 1000trimmed_fastq -PASS Per sequence quality scores 1000trimmed_fastq -FAIL Per base sequence content 1000trimmed_fastq -WARN Per sequence GC content 1000trimmed_fastq -PASS Per base N content 1000trimmed_fastq -WARN Sequence Length Distribution 1000trimmed_fastq -PASS Sequence Duplication Levels 1000trimmed_fastq -WARN Overrepresented sequences 1000trimmed_fastq -PASS Adapter Content 1000trimmed_fastq From 2e644f8228c9adbe49a3379db5bc4204b288b16f Mon Sep 17 00:00:00 2001 From: Wolfgang Maier Date: Fri, 27 Sep 2024 13:24:37 +0200 Subject: [PATCH 32/36] Fix test regex --- tools/falco/falco.xml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/tools/falco/falco.xml b/tools/falco/falco.xml index 3f2de700cf4..3b648d77eb1 100644 --- a/tools/falco/falco.xml +++ b/tools/falco/falco.xml @@ -79,7 +79,7 @@ - + @@ -89,7 +89,7 @@ - + @@ -99,7 +99,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -121,7 +121,7 @@ - + @@ -131,7 +131,7 @@ - + @@ -141,7 +141,7 @@ - + @@ -171,7 +171,7 @@ - + @@ -182,7 +182,7 @@ - + @@ -194,7 +194,7 @@ - + @@ -205,7 +205,7 @@ - + From 3930dde692c6f87709280c13c2fe28bbb29b15b9 Mon Sep 17 00:00:00 2001 From: Wolfgang Maier Date: Fri, 27 Sep 2024 13:33:27 +0200 Subject: [PATCH 33/36] Fix invalid test --- tools/falco/falco.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/falco/falco.xml b/tools/falco/falco.xml index 3b648d77eb1..97860d320cf 100644 --- a/tools/falco/falco.xml +++ b/tools/falco/falco.xml @@ -144,7 +144,7 @@ - +
@@ -92,7 +93,8 @@
- + + @@ -102,7 +104,8 @@ - + + From 692e15aaffa88398c20fd108b806aaf31b1606db Mon Sep 17 00:00:00 2001 From: Wolfgang Maier Date: Fri, 27 Sep 2024 17:05:19 +0200 Subject: [PATCH 36/36] Fix reference to test file in test 7 --- tools/falco/falco.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/falco/falco.xml b/tools/falco/falco.xml index 45da042defe..9498236de5b 100644 --- a/tools/falco/falco.xml +++ b/tools/falco/falco.xml @@ -148,7 +148,7 @@ - +