From 64765fd96e9948c013ae2dda2e3b21bba16ca2b9 Mon Sep 17 00:00:00 2001 From: Frh Date: Sat, 18 Apr 2020 23:03:27 -0700 Subject: [PATCH 01/36] Refactor base classes and improve plotting Move common code to base class to reduce duplication Stream plots display pdf background for better context --- camelot/core.py | 53 +++++++++++++++++- camelot/handlers.py | 22 ++++++-- camelot/parsers/base.py | 39 +++++++++++-- camelot/parsers/lattice.py | 36 ++++++------ camelot/parsers/stream.py | 37 ++++++------ camelot/plotting.py | 43 +++++++++++--- camelot/utils.py | 33 ++++++++++- .../test_line_plot_ghostscript.png | Bin 6832 -> 48244 bytes .../test_stream_contour_plot.png | Bin 14487 -> 15438 bytes .../baseline_plots/test_stream_grid_plot.png | Bin 0 -> 50045 bytes tests/files/baseline_plots/test_text_plot.png | Bin 9112 -> 72432 bytes .../baseline_plots/test_textedge_plot.png | Bin 19000 -> 115318 bytes 12 files changed, 204 insertions(+), 59 deletions(-) create mode 100644 tests/files/baseline_plots/test_stream_grid_plot.png diff --git a/camelot/core.py b/camelot/core.py index 03c7985..67a9cf6 100644 --- a/camelot/core.py +++ b/camelot/core.py @@ -7,6 +7,14 @@ import numpy as np import pandas as pd +import cv2 + +from .utils import ( + build_file_path_in_temp_dir, + compute_whitespace, +) +from .backends import ImageConversionBackend + # minimum number of vertical textline intersections for a textedge # to be considered valid @@ -149,7 +157,10 @@ def get_relevant(self): # get vertical textedges that intersect maximum number of # times with horizontal textlines relevant_align = max(intersections_sum.items(), key=itemgetter(1))[0] - return self._textedges[relevant_align] + return list(filter( + lambda te: te.is_valid, + self._textedges[relevant_align]) + ) def get_table_areas(self, textlines, relevant_textedges): """Returns a dict of interesting table areas on the PDF page @@ -169,7 +180,6 @@ def pad(area, average_row_height): table_areas = {} for te in relevant_textedges: - if te.is_valid: if not table_areas: table_areas[(te.x, te.y0, te.x, te.y1)] = None else: @@ -215,7 +225,8 @@ def pad(area, average_row_height): max(found[3], tl.y1), ) table_areas[updated_area] = None - average_textline_height = sum_textline_height / float(len(textlines)) + average_textline_height = sum_textline_height / \ + float(len(textlines)) # add some padding to table areas table_areas_padded = {} @@ -327,6 +338,8 @@ class Table: Accuracy with which text was assigned to the cell. whitespace : float Percentage of whitespace in the table. + filename : str + Path of the original PDF order : int Table number on PDF page. page : int @@ -342,8 +355,15 @@ def __init__(self, cols, rows): self.shape = (0, 0) self.accuracy = 0 self.whitespace = 0 + self.filename = None self.order = None self.page = None + self.flavor = None # Flavor of the parser that generated the table + self.pdf_size = None # Dimensions of the original PDF page + self.debug_info = None # Field holding debug data + + self._image = None + self._image_path = None # Temporary file to hold an image of the pdf def __repr__(self): return f"<{self.__class__.__name__} shape={self.shape}>" @@ -377,6 +397,33 @@ def parsing_report(self): } return report + def record_metadata(self, parser): + """Record data about the origin of the table + """ + self.flavor = parser.id + self.filename = parser.filename + self.debug_info = parser.debug_info + data = self.data + self.df = pd.DataFrame(data) + self.shape = self.df.shape + + self.whitespace = compute_whitespace(data) + self.pdf_size = (parser.pdf_width, parser.pdf_height) + + def get_pdf_image(self): + """Compute pdf image and cache it + """ + if self._image is None: + if self._image_path is None: + self._image_path = build_file_path_in_temp_dir( + os.path.basename(self.filename), + ".png" + ) + backend = ImageConversionBackend(use_fallback=True) + backend.convert(self.filename, self._image_path) + self._image = cv2.imread(self._image_path) + return self._image + def set_all_edges(self): """Sets all table edges to True.""" for row in self.cells: diff --git a/camelot/handlers.py b/camelot/handlers.py index 74ddde7..2356ed0 100644 --- a/camelot/handlers.py +++ b/camelot/handlers.py @@ -11,6 +11,7 @@ from .core import TableList from .parsers import Lattice from .parsers import Stream +from .utils import build_file_path_in_temp_dir from .utils import TemporaryDirectory from .utils import download_url from .utils import get_page_layout @@ -101,12 +102,22 @@ def _save_page(self, filepath: Union[StrByteType, Path], page, temp): Parameters ---------- - filepath : str - Filepath or URL of the PDF file. page : int Page number. - temp : str - Tmp directory. + layout_kwargs : dict, optional (default: {}) + A dict of `pdfminer.layout.LAParams `_ kwargs. # noqa + + + Returns + ------- + layout : object + + dimensions : tuple + The dimensions of the pdf page + + filepath : str + The path of the single page PDF - either the original, or a + normalized version. """ infile = PdfReader(filepath, strict=False) @@ -228,6 +239,9 @@ def _parse_page( """ self._save_page(self.filepath, page, tempdir) page_path = os.path.join(tempdir, f"page-{page}.pdf") + layout, dimensions = get_page_layout(page_path, **layout_kwargs) + parser._generate_layout(page_path, layout, dimensions, + page, layout_kwargs=layout_kwargs) tables = parser.extract_tables( page_path, suppress_stdout=suppress_stdout, layout_kwargs=layout_kwargs ) diff --git a/camelot/parsers/base.py b/camelot/parsers/base.py index 5e4b35f..016032e 100644 --- a/camelot/parsers/base.py +++ b/camelot/parsers/base.py @@ -1,19 +1,48 @@ import os -from ..utils import get_page_layout -from ..utils import get_text_objects - +from ..utils import get_text_objects, get_page_layout +from ..core import Table class BaseParser: """Defines a base parser.""" + def __init__(self, parser_id): + self.id = parser_id + + # For plotting details of parsing algorithms + self.debug_info = {} - def _generate_layout(self, filename, layout_kwargs): + def _generate_layout(self, filename, layout, dimensions, + page_idx, layout_kwargs): self.filename = filename self.layout_kwargs = layout_kwargs - self.layout, self.dimensions = get_page_layout(filename, **layout_kwargs) + self.layout = layout + self.dimensions = dimensions + self.page = page_idx self.images = get_text_objects(self.layout, ltype="image") self.horizontal_text = get_text_objects(self.layout, ltype="horizontal_text") self.vertical_text = get_text_objects(self.layout, ltype="vertical_text") self.pdf_width, self.pdf_height = self.dimensions self.rootname, __ = os.path.splitext(self.filename) self.imagename = "".join([self.rootname, ".png"]) + + """Initialize new table object, ready to be populated + + Parameters + ---------- + table_idx : int + Index of this table within the pdf page analyzed + cols : list + list of coordinate boundaries tuples (left, right) + rows : list + list of coordinate boundaries tuples (bottom, top) + + Returns + ------- + table : camelot.core.Table + + """ + def _initialize_new_table(self, table_idx, cols, rows): + table = Table(cols, rows) + table.page = self.page + table.order = table_idx + 1 + return table diff --git a/camelot/parsers/lattice.py b/camelot/parsers/lattice.py index 5d3c771..b855c03 100644 --- a/camelot/parsers/lattice.py +++ b/camelot/parsers/lattice.py @@ -14,6 +14,7 @@ from ..image_processing import find_contours from ..image_processing import find_joints from ..image_processing import find_lines +from ..utils import build_file_path_in_temp_dir from ..utils import compute_accuracy from ..utils import compute_whitespace from ..utils import get_table_index @@ -108,12 +109,13 @@ def __init__( backend="ghostscript", **kwargs, ): + super().__init__("lattice") self.table_regions = table_regions self.table_areas = table_areas self.process_background = process_background self.line_scale = line_scale self.copy_text = copy_text - self.shift_text = shift_text + self.shift_text = shift_text or ["l", "t"] self.split_text = split_text self.flag_size = flag_size self.strip_text = strip_text @@ -124,6 +126,8 @@ def __init__( self.iterations = iterations self.resolution = resolution self.backend = Lattice._get_backend(backend) + self.image_path = None + self.pdf_image = None @staticmethod def _get_backend(backend): @@ -242,15 +246,21 @@ def scale_areas(areas): scaled_areas.append((x1, y1, abs(x2 - x1), abs(y2 - y1))) return scaled_areas - self.image, self.threshold = adaptive_threshold( - self.imagename, + self.image_path = build_file_path_in_temp_dir( + os.path.basename(self.filename), + ".png" + ) + self.backend.convert(self.filename, self.image_path) + + self.pdf_image, self.threshold = adaptive_threshold( + self.image_path, process_background=self.process_background, blocksize=self.threshold_blocksize, c=self.threshold_constant, ) - image_width = self.image.shape[1] - image_height = self.image.shape[0] + image_width = self.pdf_image.shape[1] + image_height = self.pdf_image.shape[0] image_width_scaler = image_width / float(self.pdf_width) image_height_scaler = image_height / float(self.pdf_height) pdf_width_scaler = self.pdf_width / float(image_width) @@ -336,7 +346,7 @@ def _generate_table(self, table_idx, cols, rows, **kwargs): if v_s is None or h_s is None: raise ValueError(f"No segments found on {self.rootname}") - table = Table(cols, rows) + table = self._initialize_new_table(table_idx, cols, rows) # set table edges to True using ver+hor lines table = table.set_edges(v_s, h_s, joint_tol=self.joint_tol) # set table border edges to True @@ -369,30 +379,22 @@ def _generate_table(self, table_idx, cols, rows, **kwargs): if self.copy_text is not None: table = Lattice._copy_spanning_text(table, copy_text=self.copy_text) - data = table.data - table.df = pd.DataFrame(data) - table.shape = table.df.shape - - whitespace = compute_whitespace(data) - table.flavor = "lattice" + table.record_metadata(self) table.accuracy = accuracy - table.whitespace = whitespace - table.order = table_idx + 1 - table.page = int(os.path.basename(self.rootname).replace("page-", "")) # for plotting _text = [] _text.extend([(t.x0, t.y0, t.x1, t.y1) for t in self.horizontal_text]) _text.extend([(t.x0, t.y0, t.x1, t.y1) for t in self.vertical_text]) table._text = _text - table._image = (self.image, self.table_bbox_unscaled) + table._image = self.pdf_image # Reuse the image used for calc + table._bbox_unscaled = self.table_bbox_unscaled table._segments = (self.vertical_segments, self.horizontal_segments) table._textedges = None return table def extract_tables(self, filename, suppress_stdout=False, layout_kwargs={}): - self._generate_layout(filename, layout_kwargs) if not suppress_stdout: logger.info(f"Processing {os.path.basename(self.rootname)}") diff --git a/camelot/parsers/stream.py b/camelot/parsers/stream.py index 266a0e9..3156823 100644 --- a/camelot/parsers/stream.py +++ b/camelot/parsers/stream.py @@ -69,6 +69,7 @@ def __init__( column_tol=0, **kwargs, ): + super().__init__("stream") self.table_regions = table_regions self.table_areas = table_areas self.columns = columns @@ -191,7 +192,8 @@ def _merge_columns(l, column_tol=0): @staticmethod def _join_rows(rows_grouped, text_y_max, text_y_min): - """Makes row coordinates continuous. + """Makes row coordinates continuous. For the row to "touch" + we split the existing gap between them in half. Parameters ---------- @@ -206,15 +208,20 @@ def _join_rows(rows_grouped, text_y_max, text_y_min): List of continuous row y-coordinate tuples. """ - row_mids = [ - sum([(t.y0 + t.y1) / 2 for t in r]) / len(r) if len(r) > 0 else 0 + row_boundaries = [ + [ + max(t.y1 for t in r), + min(t.y0 for t in r) + ] for r in rows_grouped ] - rows = [(row_mids[i] + row_mids[i - 1]) / 2 for i in range(1, len(row_mids))] - rows.insert(0, text_y_max) - rows.append(text_y_min) - rows = [(rows[i], rows[i + 1]) for i in range(0, len(rows) - 1)] - return rows + for i in range(0, len(row_boundaries)-1): + top_row = row_boundaries[i] + bottom_row = row_boundaries[i+1] + top_row[1] = bottom_row[0] = (top_row[1] + bottom_row[0]) / 2 + row_boundaries[0][0] = text_y_max + row_boundaries[-1][1] = text_y_min + return row_boundaries @staticmethod def _add_columns(cols, text, row_tol): @@ -399,7 +406,7 @@ def _generate_columns_and_rows(self, table_idx, tk): return cols, rows def _generate_table(self, table_idx, cols, rows, **kwargs): - table = Table(cols, rows) + table = self._initialize_new_table(table_idx, cols, rows) table = table.set_all_edges() pos_errors = [] @@ -421,30 +428,22 @@ def _generate_table(self, table_idx, cols, rows, **kwargs): table.cells[r_idx][c_idx].text = text accuracy = compute_accuracy([[100, pos_errors]]) - data = table.data - table.df = pd.DataFrame(data) - table.shape = table.df.shape + table.record_metadata(self) - whitespace = compute_whitespace(data) - table.flavor = "stream" table.accuracy = accuracy - table.whitespace = whitespace - table.order = table_idx + 1 - table.page = int(os.path.basename(self.rootname).replace("page-", "")) # for plotting _text = [] _text.extend([(t.x0, t.y0, t.x1, t.y1) for t in self.horizontal_text]) _text.extend([(t.x0, t.y0, t.x1, t.y1) for t in self.vertical_text]) table._text = _text - table._image = None + table._bbox = self.table_bbox table._segments = None table._textedges = self.textedges return table def extract_tables(self, filename, suppress_stdout=False, layout_kwargs={}): - self._generate_layout(filename, layout_kwargs) base_filename = os.path.basename(self.rootname) if not suppress_stdout: diff --git a/camelot/plotting.py b/camelot/plotting.py index b602cef..f9fb5ff 100644 --- a/camelot/plotting.py +++ b/camelot/plotting.py @@ -64,9 +64,18 @@ def text(self, table): for t in table._text: xs.extend([t[0], t[2]]) ys.extend([t[1], t[3]]) - ax.add_patch(patches.Rectangle((t[0], t[1]), t[2] - t[0], t[3] - t[1])) + ax.add_patch( + patches.Rectangle( + (t[0], t[1]), + t[2] - t[0], + t[3] - t[1], + alpha=0.5 + ) + ) ax.set_xlim(min(xs) - 10, max(xs) + 10) ax.set_ylim(min(ys) - 10, max(ys) + 10) + img = table.get_pdf_image() + ax.imshow(img, extent=(0, table.pdf_size[0], 0, table.pdf_size[1])) return fig def grid(self, table): @@ -94,6 +103,9 @@ def grid(self, table): ax.plot([cell.lt[0], cell.rt[0]], [cell.lt[1], cell.rt[1]]) if cell.bottom: ax.plot([cell.lb[0], cell.rb[0]], [cell.lb[1], cell.rb[1]]) + + img = table.get_pdf_image() + ax.imshow(img, extent=(0, table.pdf_size[0], 0, table.pdf_size[1])) return fig def contour(self, table): @@ -109,12 +121,13 @@ def contour(self, table): fig : matplotlib.fig.Figure """ - try: - img, table_bbox = table._image - _FOR_LATTICE = True - except TypeError: - img, table_bbox = (None, {table._bbox: None}) - _FOR_LATTICE = False + + img = table.get_pdf_image() + _FOR_LATTICE = table.flavor == "lattice" + if _FOR_LATTICE: + table_bbox = table._bbox_unscaled + else: + table_bbox = {table._bbox: None} fig = plt.figure() ax = fig.add_subplot(111, aspect="equal") @@ -143,6 +156,8 @@ def contour(self, table): if _FOR_LATTICE: ax.imshow(img) + else: + ax.imshow(img, extent=(0, table.pdf_size[0], 0, table.pdf_size[1])) return fig def textedge(self, table): @@ -164,7 +179,11 @@ def textedge(self, table): xs.extend([t[0], t[2]]) ys.extend([t[1], t[3]]) ax.add_patch( - patches.Rectangle((t[0], t[1]), t[2] - t[0], t[3] - t[1], color="blue") + patches.Rectangle( + (t[0], t[1]), t[2] - t[0], t[3] - t[1], + color="blue", + alpha=0.5 + ) ) ax.set_xlim(min(xs) - 10, max(xs) + 10) ax.set_ylim(min(ys) - 10, max(ys) + 10) @@ -172,6 +191,8 @@ def textedge(self, table): for te in table._textedges: ax.plot([te.x, te.x], [te.y0, te.y1]) + img = table.get_pdf_image() + ax.imshow(img, extent=(0, table.pdf_size[0], 0, table.pdf_size[1])) return fig def joint(self, table): @@ -187,7 +208,8 @@ def joint(self, table): fig : matplotlib.fig.Figure """ - img, table_bbox = table._image + img = table.get_pdf_image() + table_bbox = table._bbox_unscaled fig = plt.figure() ax = fig.add_subplot(111, aspect="equal") x_coord = [] @@ -220,4 +242,7 @@ def line(self, table): ax.plot([v[0], v[2]], [v[1], v[3]]) for h in horizontal: ax.plot([h[0], h[2]], [h[1], h[3]]) + + img = table.get_pdf_image() + ax.imshow(img, extent=(0, table.pdf_size[0], 0, table.pdf_size[1])) return fig diff --git a/camelot/utils.py b/camelot/utils.py index fda56f5..d4ca34f 100644 --- a/camelot/utils.py +++ b/camelot/utils.py @@ -1,4 +1,5 @@ import os +import atexit import random import re import shutil @@ -15,6 +16,7 @@ from urllib.request import urlopen import numpy as np +import pandas as pd from pdfminer.converter import PDFPageAggregator from pdfminer.layout import LAParams from pdfminer.layout import LTAnno @@ -136,13 +138,40 @@ def remove_extra(kwargs, flavor="lattice"): # https://stackoverflow.com/a/22726782 -class TemporaryDirectory: +# and https://stackoverflow.com/questions/10965479 +class TemporaryDirectory(object): def __enter__(self): self.name = tempfile.mkdtemp() + # Only delete the temporary directory upon + # program exit. + atexit.register(shutil.rmtree, self.name) return self.name def __exit__(self, exc_type, exc_value, traceback): - shutil.rmtree(self.name) + pass + + +def build_file_path_in_temp_dir(filename, extension=None): + """Generates a new path within a temporary directory + + Parameters + ---------- + filename : str + extension : str + + Returns + ------- + file_path_in_temporary_dir : str + + """ + with TemporaryDirectory() as temp_dir: + if extension: + filename = filename + extension + path = os.path.join( + temp_dir, + filename + ) + return path def translate(x1, x2): diff --git a/tests/files/baseline_plots/test_line_plot_ghostscript.png b/tests/files/baseline_plots/test_line_plot_ghostscript.png index 12c44c0a222f131ce839846befcc052f5f1fcfc7..6ddeacef6a63305448c229136313c2af185658ec 100644 GIT binary patch literal 48244 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 Q0N4WkLcXZ^{Pd;&0+-pEi2wiq diff --git a/tests/files/baseline_plots/test_stream_contour_plot.png b/tests/files/baseline_plots/test_stream_contour_plot.png index 958ea0a4c0fe944858247d6f7fddeb3edb723c28..d781439ee195c4202bf4c1e71aba4eae8b9cef33 100644 GIT binary patch literal 15438 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 C@`h0W literal 14487 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

U6g1S` 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%0AjU|gV1hJ)jCdD^&=-a{dI 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�`QY;=F*sog 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�<7qnqurGl$}v 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 g|9_+Zr|0NUPKhCg;z#ZI5)^FL6*Vw+ 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 AlmGw# diff --git a/tests/files/baseline_plots/test_textedge_plot.png b/tests/files/baseline_plots/test_textedge_plot.png index 1de4e9cb0b4346eb5f9faf795dffbe3091a7a028..1c04473949bba61ea49d055f119eed7b4aa039a3 100644 GIT binary patch literal 115318 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�ks-qHsNM!01dA-!kcvO&mhV8Q%uV-k!+o zSLXLG?IchKGa+5&2ne9j-ag_IH4S}2LMnq^#S>mly8f)^z(>;>MceKlkPntnRL?oZ z%{2;_sx0g+6oK@J3Ss@_REo1!ye_TEwi%0Cm0FDhF2JJ?7ulU6+h-pv)4!tJ`lX^h zoDLQ&jlYTK;!^fmjAC0_q@baJfW3kE@gSZewmwIOeEdCSRpiCbV`GiwB*o;NK1DPNHcUd zXW{d{=R4moa%T4I+55iNy4Dq`*fb=~Sa=kHqbyCMxoRJ)*Oava8+v+<_nT@!{c7{O zrLpOY-saiH!(!JRN=_&&6W!B6yUqeIkF;DMM(#Zjymr-jZjcRO-*}Hpb}lN>%zi#A z(g#~}dg(56o~nBN`GKDwv2FDwW#Yd!)EL^*ALjigXq`h9?Dgk+g-4*Vz5L$=>MVq4VmH8X1Vqo83X*Bk8}GzRK1Cg>M(ap$q{WMYvApu}cGwaYC5S>qrd{Rz~>i z1F~^|3S~V#$>Bgc+D*aJpE)j$-`Vi7DVkcnh{xfJfKq_p*$taS)+We(b}#>TeJ&iVR_lltt!gRs<>Sn~3H#Qb2$N==>0qFoURJEhn8PO>wT z#N{B5>L0vCd_mtFtuHOHJY%WEdv4n1m!$oeBvFr?;%E6RK`h6^}M!f%Yz4APKv@vIzVyB)`qJl^_D!t)xfjUG*K2mVE(VFm*z0q# zZ~5~e{Yp%Q&Tr}&7h~5BoTW6Y(eDDZQT6T}#ZFaKUTSJmvr9^$17*QQKLt#)9?nGNOh2Kv`m^^#t z8`)b#PT=Mq2mV7k24atycXreImtU24S(}-q*y?%GJGd?n4(7hurhTPSHnrajmT5hn zd%mZd?5S9e?S8tt>jS&bJWCsU)Wc7vj~&g~q0fo+;%iY}ovYdE+&r+t4U+;MMi(BZ{s^^ltlp9Hy$wEm1MH-_qx7;~+g_ z1Fb@}>ZVV4xFDt+$4k}otKnm7DN|C9qrZ0T(Z4_Q* z$Jr4vF^>ZKYTVe9!}ey~7!+D|Hk-W(8yIQXZ`3N7bm6FuEiNKrVmW*(9c49-jeqmr zC)NBl*Vgd){O3D58E-oJB!i_F%OfxwuuCW^GMzj-z=Q{LIOWNI(ilqMxXwt3E0V)#d~wPq zwJ!d|;=u#HzMWl7&-^vtVe8827))1*r|T-d60oq)-(Ddj|3NlpYUNeJ|HA?WC@*;v zj5E7>)5edEx?_OKZ`rDml9~`6Zuq?Q#Ea$Q_0(xU^2S0VjFo-Tz5=drr~^k+6K}YV%yq1CK8fvNaMwhd^;;~ zr#~~Ov3nyLzh$OTV1hMb_!lx=O9`#>Osv9t|2bN@wR=1)@4tU@65OLBH!k8tGlm;w z!zcc}$fF~fUz54-zopTpRqFyZ`SyfsmbhW?`NfF9&L%^S$C-DrL$rUWC^vt5!Bf#8 zDyr(Mw?~azeAvNZI{cmlm4j72fj#gnMPgIMcJrJ#)XEV2!k;qPUbOmVi1(Oi)M& zboktEwYsqn?xk1`7qlboR*pX3V_qd~vb3}WO7a!7e9f|7M(j$ux(e3TxKFor>OMnZ zUcJ{kwzajTYR#;gHyx#>`?7CnUKrqIS!?UFpvxef`Oo*)?X6aKWJFAMPDIb%07UKG zgn=j63V$QD0+LiYrnM&64xY~7)faZed@p0?1DyQbSK^k`pkOH}^`>!K*%k%?Ez*ZW z1GKxtdfwy_Z66!-e;Toe$H#wZGooc;x)ISP)va5rGZcAX-}L$3z|hd<2{Jy;N=#8o zUEJ&38k|BbxDsU7yI~mwr=hiRXWB&}LT5zUTe_Ia5*2%Y(6~DIRFc#5cEWhZ#<=*dit1AKpl18fA z|LU*zCf{;y4CM>lDm5RtK2>CBmDVY_W3xep-*Lrga4e%^=f2R5 zp1yU}u2yU&zqg_LiKPi3MAJ_JfgJVcmuJ7R72m%%`QiNdE@3qK`DbkM>E<9Zzul|! z1E>VvTjq6Ra!cjSQ)!Z{Ky3TFxF`wdURYSz#ZBgMNk>P=*2kZ$ATUdMgdpfofvKI= z;&Ol4T|!j`$18_}@_eegy1|mP3i3<)a-HJhO2y?uolmLY2U!W00T%V2P31Wu6ay?l63E>4BKN{oteHe+N=g} zgO(wOVzSlVmsBi1F|lts#9MfOiJW#iFKHpq#zrA0!5bbiB| zYwPa5mhLdu*Jm)4C;ci~S*dP%f6b%Hd7~LzD1RZ5Az!~9eeLXUJ>7Z;F?}=$+r_Q< zm=n0t3FEn~=l0jMGw?)2gnE1XFg{LXjn*VUpZ<2KM-8qG2G7{ej;Ja_L!u&Eq%OD> zeD~M~1uHc1_b0O?!fqWNYNH*`u6cfjXmDOnH;gy9p@GXqMQ3dBF$9D|1jI5I=g!zS zcNWq@gsE6qaBOYO)s;g6-Z{7!pFMBIGdY|)W4fpzf~MQfVF#byS+)@r_2&r%$^Er{>E_u zHEA_PIS+!-?-WFcj{?qJZ;!UsM1zav3w38MANE1_c%PpGbO1>y zcfp$SM=BHFp}%5atX$aEi0JHh6N2QK!S-oEi&uD^&95CnLGg#4^Db3KyPwx=vvdsH zG4iz(aFQMNl(Xun_^SfO{oiVNjwk>6^#!u1KEwE=GH-bnk=HpP|WByV&YB54%-JbKIniG(3<*>xdNsN_Sqe{ELup^B-Zey&hqkvCW2VupFMGUcw-caT9x$o!o zMTdpG_JNsm%Y;O#Y+zuYp!Jx+sAtI2uA0^;TFF(X-wZ(OvDSP%f%9yEZI5WXty37 z?>^ik@fxEB-D7@l1jt%X)ib%~O1-dqQ}Y_O3eQyq_v$^fkv zZqwDN${mczm>ByVlgz&IH#6NMWtNCOOvnIc%yGFR9~mXhBi=29#jG}V(X2;b$Ypc| zPxv~Y-m{bao}#o;FO$q&4p077~dh z363Edf<)MZw(r8JrfootIs;)=eRFvEX9tQsO+rY2c*F~y(+yG4ovkr-hw$c-!yO}I zofPFPRkT3LLdmR%Ob+`&KV2mypN5{ecplq3citv%yQ)NCjgHo(rnD5Z`CCMrE z1jWW5b{fj0%~CS%UD!&6TS6MP1n>eh7XE>^!r0x*g+mpiQ-ql_&Vh9=zYA2 zE8PAYRR6eLqnEvwlwOrXsQu#p>~d_25BeGuzJjN3uEXkkFk#e$cDZ1x=_PjOYh`Wi z{!x~jMtWax(MUL4D>m=_c3rVsQ21z0K0}_nH2D5es1C+kLlNLp^OUV1gNLF@1U01( z(hiS@3Lk4}Xd()Ri-s4ZvgFCuKwP=lmH5(OZOvQeGir9fv9S^TCN*_&Z1p*De5b^( zUmiL`+CQk8VO}>(q-9=Z_-1`*4PES6MyZo8y72K*i0ZJIa?l8rz)iykkI>O?-=<1L z=u`_kYM4$|sW`0M6*XJZ0UIX+N3Su&LB@~GoQ}ACobzH6gpKu^7N0_i!eMmR&kHmm zrHzeg-=!UGV2$m0f%oedtg8AWKd{8{fhvIZ-=!(RZ8ahaixqfbb-~6hBQMVdWb5Be zB$aQUxuJ?oI^!@gHy-I!y-+qhlRs>Wc!+U0z98mh-=BEQLZHH!%OU{!`89(SDj_h(F{_Z{ZaDUf-8t5 zU~MobyGufDY2BjAKn$_g7*?lSD1<#38>`oRkDzLZfAUGHKsBcJlT^!m<;!U;`ag8i zjJ}jU^+H{{c8m>s@=jgd=K0B+b?w=6I0RiDU$)@_=}$8+>L)Yh-=LyPSr96()XBn( z399lUVzH6h2wSlj`59N&p|#P`(NY`ou1^FRmlg2FhN6ZB$$3t7HE@pvHyX3ws!vK9 z(?MALHA2~-Z_CTepKNs^-Qj=EP*YLkqyglEni|;V=4BI=$^~XuRLfLLTMDozlQK&; zUZ-cczFAZ_6CNHK`a3g|Ixsq@9FIL&j_2N@Iusa~HyG)stA4#(#5=LtxslJgOESBE zz0Oh&oHb=-PO-DeTGTYKv$N+TV}>;cH8dEH982S>=M6)n>DSyfNmW}2Q(ov5fQf?o z_4;EK>fyo|0t$+$X_xk4WmsJC2xSW#{(sf-k^`IF+!a+FaYdLEo zY~(wl(V-q*?nxyG5fKhf6mSj=dmA+}B5pNVMS_QiClT~HQ~XP`Itw8_0RbEF17ZOu za8l2`JL@XZj8|$sPN=8X=Ep*oDRMMNb#(NQfuRET=Sb1)(nt{j8Bf7Ok&AKzlMQHQ zpwgfcI->`pCP#MMLL-WeE$}U-{hmi2{Yl3j(R8IHSZ8J?pnBj#w{)2kB<(n&rl`61W9||W z-MQV|B03$bqxO+lw>KAMcQi|B zQ^)tiLVv{3$wqG<&I%6<<=`cVfNKm^LVPAG;pUEIOM#9Su$8H}_vyr+b%M=ilr&C4 zEOdR33m?4qo!MRPhk(WSje4Hk-3(#X{IP3+gI4R&h3}w&&?qt>DJptw$US@^fWh`~ zBYc1I6SfY25|YE^joz-?kq4{g<_2nIFc+ui2>X)S^dE21qt(1UG$_mT(M`g@H2HX$ zU%xDPooy&DtKyw%-v%@i63O1>8*IeWM~hkbWC9<4{D|Ynu*BupLD$eghK6op!guKC zbTTXUV!!nAmAX4kXmoWe@7_&M>%Vs!_5w-DHNOTlNE2bnHQEgfoP|*dI>Sr3;V!wQ zeAIfU?|V|Op>Nkd2aoBaX8U`76!f>Xv{hbOY)dua2C+%4 z#^DK(0h>=#IN0vCc{(iP89M zy5hJ6gRvYf7DOsV2I7Km-^xBAcKH5~l7T_0<({EC@Z7&=hXosY)Pz-3WI(Q=;$1eE zH$?x~(>^X}Fb?c&O%kg96rv}go$%6JtAswx7YmQwV&FSw<|f1pD`{waYBQQE=@wS* zt9{CT731{4`+`SBC92eF6yN7Ej-{f4H$`|)dr}Wx>T+5vhz2I5FMYipYgg!(t^V;# ziY(1;sLP4y0T&WwL}5^TPYAilm}mVM7j#HfL$NCvUk- zc5WDJ3|*!h=CXKiH4*(s0sVJ&NzHE&9FLWK0%?R`%tB}K*3`5|y?(1{;Rs{YSMh}M`ScEI`+88--n;yEm{W%%RY0KY-n}1LyfKQ39S)#F0<`F7*Fi*xtpz_8}hn5d^u(Oq1mcvcJKwk&P6#?4(i+V5MMuAn++ z5kC}Qb6vu~loAeof5n_TB@m~Des_~i8UbuWe)+LGD~t+ig#|pRA*30del~@88upF; zDl(+pK(i!U=K5ZuLr}$B79G9t_Tr3M<|Hc{>mA`p9K5U2{5@HFc1^jZ;Qe}AWOp8Z z^JCCBg;4Y*7FWkbJfwU**D86hb8O5)A)z9*&99)WYju?+CkMxl3#O z<_0jbuKfuj%f4K$0b@jep`_H{gHDrI?s>di^t+`6xX?}gio;|UU%sH~#c^??fz;kI2y!^zBFTf@a6hEdtE8C1Q4pzOW znbRX>un|><*6j<#JSHWHOW{$io3A*isFs-+8L>S!!OxSn_Gpwi2Juz7T^AaTf57)_ zz5?m)u!Zk0Lp06f?sJ%Y9dtb0YN1rt8pr;ct1%o_{>L9T_vagI&aUs) zin$esgy6U4h$1yGFaV%s_DiJVp|7k8FlXHF{JS+fo5N@%r4$tx!O(Ixh-XTF;JaBh zDqm-u4OeHOJ&O50zr**ZC;qs}TxRa5d_-jZ8eQtRtPo;2bEw=DTG+f)S8Z!C5x5S~ z-1k?N#^O5s)<4F@kp>SA8ncr~%g7kO6T)*_l`Pp#)r@AmwhJoqI&-tLvjc>BqRLU0 zzrKC9a=pkYfA=e0d=CI+&7&q`2Mb0W(X0TR${4%;{ul<=^+Ax;Ov0tF(&jX}XqAHR z`}bfOwo(5!21K*q-m^<@9!SCwZP*eFWsh&0QF={HpfKp-l|R6YMucPw^YSJli+I@m zbDYd=m)K}f*tClo>XvICgSa$VJN_hAUoC-9SXpko0nZ&xRr)g^62(tw=Xqd4v}De= zI|L=A@1{|)Vw<) z(un>s9)+73@3m`eRwL@S$it^x0GXova!u@+K*US08=Aj_t@TV1D%bJW)@$Y>ushFWY=IOC|D5m`y!k$$z=Y>7jv&w9r#P{r%|Dw1_ z$N~mJSQJaLZ=dWgbKoEY4S3h;=sE9)&!NUkFXSQX_nNnNq#?;YuJF)MRft`1MsS(_ z`I_1{09ICCjEtmGzjjI+QYUJD{P^)FQsn(#1NGwH*G1nnGsZbw60F>>Y@vZ^cigp6 z0KX&{Sv94eSweSIG^3li@aO0A-s%Pl!wE#(jFP`z0@3I zl%j8wwU(lKVXfKhk0{H*{0hR1app`UUw`v?>~*(E}KQ6 zj%g#iIOAufUbFSKicL`01inP z=q#hI0*?y@D55cs@J6gLBKIl1Dp~<#Bjzx9-{*8>hZ!3i3o)wd%U+xBVoj5SRLZ;m z)JSD1=;W0TF6*}hcl!BDgvQ5r9BvW7Smy?qiCuw6a$%1H9exd@w$V0G|5lxzBEAy- zagm__v9Jd(I4S@rH84O9S>SzhYb9rqs4P*4 zsbQRH*Uxh6o^KyecvM}SlYElF$GmQxwU*gM{PA{|dy6~Pe;+NbFSTFKi?8g)DJs>g z2W-U6MQ>(!p+|l$(frcn4{l!{)@{CfLUPSW*wIVRHa&q5ls;Xv?XLbDvoo0)VD z65JnQAbfN`YXG%T7;xjJR!l8c>9wSX4A;lX`itE5;sv*!Q;Hr(t4%2gUCmQrj^v*+ z@tm|01pqx&+fHC0Ab2mMH{TA|&vk5Lu5h*!;I9q{e~MJ|pMRjs$VR~)SfDkz=9 z#|VjtBw;YuZU+%_n|ozl3x|-dbcoWs82cU!CI9uSSFrzgC8C#aft6_AV_=1B^xDmH z$`==`)*aD!_#{VEVPQ0_?eAM#FF6$T^X01fRaZ6#l!cze$0#d>KQp2g{b69RG3H1M zHh5S-*fiI26tNHr9a`=+^i#3s*SY?Mh%7rN2WhiqAYGqxW6EWgAj##gx#$f-oEs~D zAPhXDM$p`1tWW8y;L+kMm9}>t_~PPw-it$JL<83d2#KCatDfCvQDb1S5~QKw>E1G3 zw{Tw+GvhFCo2zj%|Y_WOHfWo5ZY2G&UWjR&$9x@-v7GQJ5|e);GUH|zNFHmn9E#g|Dqb@SYb zx29aPycW{Ng@1bfIOib7sX3rX*opDCJzIBHaMnxxar=A|3x!3lHCOjphqIg~b8?3J zYv{gYM~|nxV>vp#ZyL*OXU_47Xj)m$p=|Mbd9ts98gUGwUu>WD*CC_5VxleLF+11Sh(sZTyDZ9H18}0RHS-H=%b^uW)k&R}# zHob;GF0>H^U=%=1Zjsd9;Ys7?dwX$c!}Yc4W)_v^rRvl92-U4$H*ZE|JI|-P$5MWt ztA1tOPp!eSITN4-ab};tkx){0gV|H0V>kgfd#r*@Z5cR;Jk0X{^G9}fjk(rSzT0c8??&d+{+ z^Sf)~F;9K-vh)P+G+D8^-aO?6_4T_cRE1e(`Hq(67jv`@j#{XpJL5w9vgV_2;O>ZYz_k!&-1`bUfBP6Yx98xxG8g#lcas&D4o5u#ymdTrB{Tgq() z8I>VIK2d<@UMKZ4w`xbhk`mk0;YMJ-Q6v^<_ujl7YSPcdQZrv{^6J%H=m`~pbZ`f_ zS>HhR)jLryLc(C5(@WeJ->M|Ov(vHud@b#6DwUs=FJZ~;Y_*MztL0a(h*0;s6v;^sJ8BIEJ5h?p@VFo zmbWL;u6Tn^Ntw8FFA>D-_b;Ew>ty_bnsrSe*YfPK_Ynt)ja+V2T$~JiHc>mQdiD^0 zE*(M7RcXQnm?n&qAkM-SQ4R{AQl&-UGV?(aQRBrec;CtN2G@ZiWya0KTqMK1F=Tyr zvMT5bsRDt;$!I7wM`ZV^JR>QYrBx3!(Klssj?$&!JPeMH$i6}hb9)@_R_!{7WLTdb zW=TsI!EHKruJ9Dy0YxZoV{_(q?HZ`NyzT58ko6@->UfYE{!p|JDw_1y>ik#-Rl$KZ zqoZuEf5{nF#CV)mIg(|pnm*-9p++>6hpbwe^Re48)VkwcOW)}!L|(nYu4q0KR%X(r z{V_Q?{k406kl+IbhMs+W8kDK2Z?YcQ1Db%b!K>HtP&eeI)VvR8yj&d7R z0`?UXMnhe4d>3gxpG@kjgg%s1%+y-AfO6yHIR!2#y~EOo$^UR4*)$Pg}l zl~F!f>rS-6zgVu?UkTauNhim@P=$I~-@hjsTyfS;yCxzcl9P+lJ0FwPKv+jOLK|Q^ zb`@bG-LXHG@@UWf%E0`6yEW2;N=8>Xm@HXZ{b|*@gjzYPlJ8mjIK4r%Z}IORo5@v6 z>cm@X)}(224USTLy)vDVt-u<$#!M?c&R;fdhW}xI?RERz#W=fs9$Sl%gR1VF+<3hb zz5|_(vN?;y-~w1QHv7eJE**e6-z#9j8pPpbC0n4ap&;L>@cz9*U!k6GZ*Nb*r0eNf zeP)dZ+5G(Y$6){MZR>%d^#}Z<^O6?h)@2H2ONe%4Z!cPP)ZWdTJb7TsTLnMod4ya&>1CeSN`!s z4vtZqM9rS%6xo>SQfv278SoFiD-S2@guF$cCr*H8XB@lSKT#6d+FCsMoY*@1c`IKDZ|2)5`%PP?GmM> zvA{01-v0qjVMIhpW0_dM!CsgAA&x;rXy>{Aj*xf zNi_NU`+R9nd};54i_2VSqGuc#kHYq93BeQM=~2^%cBmn9=90r8vWIP5!tgP4L}!3e z5qK6U7;uxpuhQ}^R!fxML9CKfPI2w1RcW8c{^+OGaRg>-mVCTsMs39*{zC;TNLik3 zcXL0WhmmQpX>wxwd`CdV+gVy^=?#oNvYW2sq5OD`UkLkbh>d9pjtZ)fhh;eR{ z35fUN;00{kt#~Uk^(}|$c+J^95}FnljQmUSYEh&n>$nzp zlwh#vR7E!U25ffd)eTJBa{*Kewzfw&vfEC0LIXjP6eRk4qsM#6MV=>4fJrq^H#{Te zVybG`2hv(Q60idE9(q)+{8CFWrK4sHYx%R zFXEK|!)5f%m0Vdqk3%*XvNjvBv%75Gh9u|pT;8{T{RZu{wLK@nf&7BWajMGk3*6K0)c{Ey09iB zB-D%AgF+(~-Yvo1yT4(0oIiBbp?CfVPegk#FE%MDxS=PyH%+p{{lLbgJE;-g+|rZ| zzZdLYySomZZoyJ=a_OesNzgGe=rL4?K_!VNL@Td%I%=An+J6Kj(X)ih=l+LN0N1X4 zy^Ir#cQ7yHkKj`nn)8IU?V`>FICn$mxnH1ZxHwM$8?o=-8I+Wjmxl}We7m7q9#qS> z7fsj#T`;|Vj!JH|&{t3P-2^lya|uryi{ zqogG+{tWq%w6c)AU&*z`v~kC%5YII3b!^t*Gnu=U0!rAPHOV@OUx?~6v=G8UE9!&U zkLitNn0}wfjeU{4KeXJ=mC?;&A|t~@?)1EO`K>i0fknhg^7#OptVE$mQzYX{how-N zEQS4$tlTmalcWc9be}_n$J)ES7F;lyhdHU~t~ssxv{2f5=#ZG66wGUeqaq729zQ-P zpwmh?JCLBdeQHW0@fsit6L5y?>tkYMwKmcY!(AJfwUsHiW^U9&Da&%C(UI$L4_e5J zsUe=$#_|YAY6`!--{-Lw-?Qgt&hSb%iSwD-^XHH0=BtYFyAsR=i50$F&JFOUWVN!2z&bXrnN9wLliJIpX*Jy#%b8u!^s8q`-_b&flZ12 zl~cO?Q)^pg6VTcs=NA@QWZ=M$PM(4~_PnCiR?x3fUX=4Ik7Kva5!fwjw5`z^Ktl@n< z#boZrQ$XYWrOs{74lS1lB0bkl4>!Y%j7~)%ndgXekE-WApxyk5Mgs@?m*zldWxtyr z{r&mwERgs~INX-Ef%{N=9a79yAY}5(JhEO=K ztyiaM!d$RnAbS?=dw%}w`St^FHo?Dh=YSbyGs%Se%+5q?c$tdJ5qD>?1w@=LLAw6C zKt}*N+qtepF$04IMpRs<*1NVx;9|E4wAALmO|qkv_JxCQ8apzKjs8yfJ<`KcE7a7( zVAZ@jGEk9FIg2Is&xZbgscdA$*pvD`gSkj5Zl@b=o=;p|k&MklBO{EflkrljLp*`R zcQj1*Ya4q~@!r73Wnh@~!=#gae?w1lW6HX%{n-Df=$A|*2Q_c6Jm@>(-E@xpIXKhb z0>?Pz%&oBz1YN$Ox)=m*a)CxYNly#|GwtaP?oiy~vDJMIolAAc z*Zvfum~CIgPss9-n)7a^0y&Halalx#_mp;?mlS7{W{%?d|8fC3c^GZh1f&*mWWZDa zNpNSz+`iM?o0)`I-5WPgw>B{O%<4);MohlkQs`RW7AVmV9{pEWl7V@&(Z%^=beFZV z;Sq43N1LCY2QU{4ZFQnD;^)twnB(iCC6aB&46Lj(kPnN7L%PdgTX*C?c@Ckctn(W{ z592zV&^<0LaoDBgz@8+(WM#$HXJ$(9)xoGNJ)IU4*DZ2jfFQ`)1|obO9PfrTk9waU zEv}B11a!vpfUA|fv2liM-1ZSAhY5>-^ZIXnw%d2_J_iLHJRUrUOY9dFF!4zKe#^vy zUp)1tmzLcO_!TTHXAu4HukUyw1Si|1)3S+L)hmjw|u>U8K{kzGA@%COU|t z1F#`Qg}K6M?QUD!%bF7#rjvsMWq; zIb4T5NzwJ^mqjUQfN?2tVi|FO4p-oXz}KF#uUi*`m!ZHmmrL0GnVuu-KhE_5|NrH< zfq|x=jI5{GU{2IZ#J+ZoS*^{>mtmd!ogqT@l|pkxOKOGSegQS@$aB$2VJ4#o} zwVRd1Lw*N!Y=Eq62C0k|`WjX4qw|@=C%m(ea%J-+*L+$tsF7VWuuC(rv4FJsf?RG% z^UvXh42+TfpM$x?Cn^62dQQB>@017hvfChK>N-1crlL*9B^Pi4OSpUI=Wg7#=Ly-$ z$-k{2coU?{;nv2&0541Y4}>kUJx>Eyh(=u8*=&$WN&`YqfM(|WT-J*oFr$~liMLN=k_*v5LCM4v-`ui;>CmgD;+vGYM9ohN$ zGrvEP8JY0&q>ghqQ}Pe=_<1cV2-DG7w>mUTSXXagVA+`LuV%ZrMbDs6-OK$*{8P3^ zda~Q;=*gb@PlVj}X_<2B2l)|7>Du@H5NXZPptB zp`(nU@}P|X6qt`M3*wN-6@~e}1_q{ya(^Kd`qY4C+O2-3quzjt>WhsSpS&>a+d5D2LK9NVQab zV%$!AZr@4AyUXTJ*>}G!#vZG>Xz9F?&D>0}(iJXPmI`=1#JrYPq8P zWacS&b5rABUcbR)-^R8+i$NnPEH_^MLfhkxFFGBzCu%549@y;iyHL)}j@uq+n%f}j zR7;{m@L-t!E=D)bchqWbHss>Di3t;Mb6@U)OE;glZZ(kHT1g3CXJ~f|T@NYdb%sg?&N9^c;C;q^+8$M(7a>V~rNXpJj}Zdctm=U=}+5uigJEzhOJF07G%{~9PM zDQ!ADJ82>!iUgdQ- zV$w+u>X0vltUb#sdepQa@w_|m1|QQDXgnZ})vc!At-m`Yb8Qm`@igdrf>{}|CSFkFvlGc$Go3`4~Fzvc69ig%V_r@2BH?zMN}-b6WWCxMZSJY#<6kEmjg|IJ z_^GJqLY)YlhN-E&@ln~!={p@=pPe~(&#gx~Im3MRm&7w;dj#g}kKE>c_d&n&jU;f@ zao)-FZ^P2&bmlR|uL}I9kIDZ?tq$sS4L}5xv#McULZw!~($ca>)!X|*y&}6|1CoWm z{dhy*>S~!UOeQ#DP&Sb!N!Z&vGWhAE6vBd;Nk%C;Esa{_f+;g#zS_oyBV z!6012$mqu(3Oy5Q`RySfqvJ zpL))>Z@bCk((g9-W>^D4@;W2Cf2~l!*8I8TvzNUMRji5eJ#?K15XNP%8n@zEZ)eO` z%Qax`et*i%64w53B7>11Ok-u$`hzW<@r-et^O|42I5RlnQtD!_miLiy<@kq&lKI#Z zRB7w!r#R^7R&E12beqB}vwpp;Cw*p>c%*nNpe-8B2lj5df{hkdMr ze6h4D)(!r_tU9YK$bK7MDLhN1k8{({6?C8MDG|Dcj@ZXUpyTnGTjo!e*x z^f(V#@-%x7Pj}|qk&1$M=EJddgfFbe-SoN1-m&0dwzl#HH=w0S?7>lM-q0TSbH!#b zBYW}NFp(z7!t7tdO5>j!ee>vmGD~QVy&Nka+yY_4-Oietl7WGVp*$6BkN78s$D7+7 z_CN_u)=M2c0y=VPG5dI>IysE2pBDz$)`K6)#Ev8OTJ1>Ho~QWE>Znddyx;kR{S)AT zX-~+u|Hc4T^SO)d=~;*N&<+d;dKNp$a%q2cI6AH8Iak9h?~N_>e|o#O>l1vyh!Ka` z8(MlsMp$B^JXCs+8iDgNL+|0khZsN}iGV2O!JinZ+^UqkKa#=C1k}{^QVI$Sz=2W` z{t_7Ys&t?V9#V6(5U(BHA~cxFoiL7Ke)2NzNYYx2Cmw10qw~TT-_6a99}H(5R!731 zT?66?x|I32UHdLHLogH11d{V36cBlve%C_T_x`<~6SeLjuQk0xWC~u50=cLiShioOav}iXN(QRoppRRQgtvaQ(tiE)wRH=k|C0 z*`R*9kR>>Nm`uC5+kcZY-_nx7SwbV0^Zc}Icsht@rN4b}JVzOFjTlKh&)mLp$-3RV zvM2Gk%u-oeAv(NgXPb7X5=MX_AO4rdRX~?&DV?X9*2HU-%Q!2g1r)6eey&Td(5c$P zR7*uxXW$W!x*j`Ai#cch7j64*k>@0^z_3v6oIjXE_|&?WWFhmCtz8}0mFqPF9Ojc_wn+4 zKm#>26l70=0f2jA*eu6wGx5_8n_%-`c&CY|4U)bOchjdmjJ&Z zSL*79vKQCJpS1)#+H$R?Cv~9OtoLk1)1NPIvSnkch4)w!48)#cY;I-$>X4Px z)qMn7e89f~(J?UXvP;3ss7zB?Lg*e)NtH<5tgX2yD0CCp1bA+Z4~-%=O#dW{#DD(m zVPTm;tua}(hnAl3@omIHC^jd^8`F>WhO0@0Adw3IxHlqZZunJsg?0WwLYj3z4r*>k zR+4e&fshJjf8wQ98X{x~0@6$6i*34z@!aIsFuBI-;yXJ?MC>5zd#OC`$rE!Niiu~v zEX*aFlNSGW#s8W=8a$z0z%oA&z%_x4&*?K}x~_-=-H6c$%7GAOg@^_QL37Mm7zoYd(zSmEPG-yuTW^#Qn9J;vveD~`k@GPx>?v~y%-T=!YBSKP1D zqp>nD!I>Q?)Wd=fy+uTIW_h{oF;EDq$^$A`>?HIRk+ zN3a}H)be(k$-Fbb|4enfGf7BN!xUOpl#Nebk*R@Bk->-U1JmTnB)3Ot3UbI&a{{z` z_x2PCRtD@z+#zw&tE$oIkg4M(fo z>NU(7Ua6^F&N;(q0(6F?K@|qYZe`ky55VLCViR(0461a%vl>^C^~rc5r=fVl>d^7d z{tfg)Sfk3zg;Wc)!K+9FMYobMu>Y+$BNXu)4{BT1co?+6@iRQByF= z0$Oc2j2G?@60Q%qs+9nvW`E-XSWLJ7U2Uo#c`jY=M!)CzJxmUyW4`$_1_or~h%7dv z){j-(!0Wog(6O^{cEbl9gCfV0gCRNlQxF%o8HBrDVNV5%-s zSvkFdjQ#Uoxd;DvkNj#ia%Nqpwc9xf{Xv>S-ukdD1Nbg)k+JFDK*JN})z;|B6P^#x zlyfRCohU@|&gZ{S2u>%7cD+$IoJnKZnNWEfT!;^&qn zugERcJ5?(j@k+(HX(HAYGQZe*4UCPB_EhdP9v%tF{Tmq)g~~16QmD@4$HFDe7+}26 zN?%qOlF!sfmNBhYtf4wiNO*3X2)P0v zVM6=xfefDLCeiuR#jZ-Uxy3976i{{Ec>{pBHDVav{PjuSw6kvm|4UD+`hc%0p)&Of zFTCeuui9FqY(g3zG-%6*C(jK2BH_L=Q7PeXB6Sjw z6H|MbgN2oL3Uiyhr^V$7evdAAWyE5p6b82&@fNK(krpY-HuzP?U+HOCXm~5m6I@+Z zL8xL=^s_fDX6vA^@TKQ{tx{ew2TmN)SAFTU4o8QXS(LQA#1PmMrE!}GedxBS{i`a}+$7j-yZUJC^OT?;|riVX6|C4R#< z<>6PXxyf9Q=J~#MN>n+Re@fOve_St!<%8KdZ_l-1XdoWxE}M>* zN7d~130hd(a9z%DT^-%YE?!F%SiF2?$lbl39lJ|nEFJCcXbFU0)Sz_Z^iWYV$%GB0{` zz?(w6Bxi-R#DwqGk^A&JtdT0mL?uJ*38gDnrZ0JNM{{Y8{1jHm^RRD64Okbl(w{76 zGoo2Eejjc%x-KS)fCGNbbE)gkCCZgJiT)2$UjY@>`n^quNC+5!lt?!c(j_2`q_jv% zNOy`Tib#h@x3qMJpn!CDDc#-m?eYHpYkh0owY z^ik=W0r2Q=YG6%xcz9~ro2Uoic1H+L_~m;!%6yZAD*&9yLn~*m$gr`op>PdM67~eo zM|PyJurMSbDo&Da%tFW`$Gw}l6OF(Xf!EESfTAAvd3+zyXqD@}^X^|MKp+r2RTHkg zqeC#GwdhpqbozjrMmxaKAdnw2qpKfZ(P9Ejh=|U#>*pO@3RB75%jj4WwX*KU!z(B z1B!>V+VrW*i-`{y8H2ujQTO*hd!~VI-aE6<9**_$<;J<-0`ZELOqK&{2Bkpay6g&9 z$WbLDRCMj$kL8Lq*J1Mc)u7&kFV|Qj`z?qRtklwZKr|uZBycXfqL@>fBfD~RR^?It zN_NGCr?Z?kwN}-9J@20Y@tNrX7HGRHnZJ4<2m7f_Hw8HH7o`6%8h9DH9=Zq|MlEB`4Dle}#LDmut zgPrE;`l0>SiG?9YPgzLyX}P*o1-=!Zwc03A47LeGsedIH1#6InAqRdNvbmLh8pJeX zHa5C88qjV5lKK{#oY%VZ-!;i6qc)?NyM;Jk6;3~Na^(^CB&=aRr@YU?%4a&;7EGd) ztu)YApPPH5;k5M<-k9^!vixWg)ZlnL-u+PlTXKoy`^BFB6NQK(BWjad#hKk63gf+mE#U`gC{v`yUQ`5x0-yrSY2PuU2{13M3nd z?^OJmwB?CjZFawblx0OUoKkPp!o;EHkNLGQb7Z5FHr5g`K%)Dv*8Ln1paHCp(AU#7 z$UtSJL;*?`J|2Zodx@zn)BDw?CNYG}S5|**vW?Pr>RVh*bwnSufJYM>w5dhK#uSyY z0fnziV*|E8+(`l)bQsaQy}Sr88`S^)f*PomrUqSu-D#sk51l;Q=?<8+3hlrTjo!+N z9;UDV^aNk6_zruZtbIspW1-nincj0vtoV;R?1qXU!$TVF-M^cxpSLyXlkmv}i2TmC zw?i8n4P@U@2sqLG`Zb^%Xg}|hwQ_M!cE#aArNH5oLA(I=w7_BA?!$wrsk1}t$i79= z1!4=We^Py3h0T~_$CbXguaSK=Jmj<zBSq zJwif3Ojc92M;Vby?HJr8L>v#|(ez|0s8YUtK3-qVnjA7MyvEn-^)f-6 zdMs@qpODCfK)iy1NiIrb9ECbyTG)g&{v&iWS-`k^!MN0*|{fYYWgMl-oGBr9O6JXuk8-V(2P*Z^tbE16_N425zj#}U_BW{G#3LGI9m=pHdOtvkNP-+m;u^tU9m*m&53-H?~LWXG<(Q@5?`74XEA z7$J9%VQZ@>JT9(hrN89n*#Uo7I8EN|xXf9HJ1Zk55|tVGH&s)>q>9OPe?nuZ4D<=9WLIYjA8s3x-qk)&8AOqG(<)fFjs?t5y=`4+QMDVz57 z>w$Zr_g7n4D>HzY*#_)S<+bQ5YeuZ;fnN4T1$EQH%C5%-&x+H*bF_O&N>c!yT09-s z7eDBGzKKf0V@V}Iu8>F?+~_NpcL6v1DE+_Gg8T0^*P-XFJNe7q(b2<95_W#D`=>|H z6T0ny0aeEJlN#s#CsN%ehik4;4twQ$dpPjZlkB(OzQvuKL@}9~jIR!!GqNi$h092P zx0w`>lVbzjBm=8(cGUW?e9O+CX^yy?@RWxPPbb)jxpMLqvdRwbt7V6@cIFXB{%)G8 z#!nmk@!d$c-=c$97)sYf;_O5hK! zt8+9lO9HV!GE?K?UC9Da#{C9wmD3ByN8;k&xZZS*cSc6)Hli`JvVJ!0oY64dAF(8( zkoK;dJa%*z^JD+sR>|C%ax@RNVr47M9?}&g(prLRSZ-XBS?3 zzcD8^mU~4hpA?0nJoGj&;ISy@@b;K2&4ZgrCbn(kX!5*V57aSw$N!?C?Cya_0`S#H z_#0o%H|@k4`Tzu}>!vF>`RxC=0IQh{5d4A-QgLI}!p4`Gj+bYL4gfwVG5*=H#nD$M(iRhM@koH>~L)U zqeX4Q!_k03fQOU_M2rp6C4S~4#TB}~*snVr(Z%bh2ekC$1HzoLiOr`du5Xi?ZOai1 zrPEBvDx-z#bAs1cO_eLPmX)R zclY+`7q$d7`tvg#oHeA!5v-S2SNOZ9%kJQc8WtPdW*2Kvum^EtdddHNr?6hX4ohlC zrcX}zk*mRZa*oO2oE!B6Bw_(4C%DkkuxJ+O{Ek$XbEgIKiw=OW!M9a#tkGB0PZa~g zFgT~2)U*Q6UNL(LjP-n*N!nPA;ljt4ZFIC@U_X>YOICTkU&c=4F)y+;ir;X~_6D4C z##l<%-PZm4OcRxq%1=(ll5SpDSo#vwco_x+92j?fu~X$41Anbh3U>CBKY`mMA{Q%gObm z4ZexjWpj6@2fqjZy}kXqy$%*90k_3y?Wow~w$Vz3+dnrygeLGz?-jAe>5X*Ce+?^> zxkErjE_iNHMJyEM!LAtpwr_g+Prr-|!zO3kO)dYvOof%qRTC zm&_dmzu%OIMctny3=r`=y6OKmHFxbnB;B;^a?e`vW}20^!!7OXY;zGXXtdy#VoIcu z!Luw^l3$=Y(6z-)tKco~7GG%#r7yAjW9=mHMevwfPv4Q4vb0n=EMnm7`8`)xL^_3& z02cPH_)NRl%#c_*qiuOl>)GOV%Lu5n1#TgFn}`1*3?3(dj1vXu5<1ZriLNsUVl(nj z3vLe3qJeR|Gr*qy((?uF$Y)2JZHOkXrlRC)#c)YVTPta?F8fj?t*5HqPzZZ4aPeb#Z%&lw(i$9Y*r^mV+*2*+ISKUqOfBFt)MD_iB*9 zZ}NFo|5H;($ISINZ){?J%a^e1?nT6yU#=S#;7Hi!gtBX1KJik4n?ZMg#BG=U%Ft`_ zZJ*6*eXy)XIhIwqGw>e^s(!)k`H(h;qKxg9jLT-`?9(U7f5nV*K;#ljtqV z*&3>YJ8hR~QAnjc;wvEyvDT}6@y5@qI8?*UH#ka{hVCOix2d^*F6vFx7Thm*8&T0J zbw}Tz(obxwl$sdxvSZxon=4`^5u=_%JE>5kqa4+3FX4=zMG4wCn7r$jXm7}+@ z^Q}Klc4;1aj)>dPllWyPC-n>}3z`K}A-R3QCXz-n6qGj4+oqj7OHbEg7?><9^S%hU zb)jxJAcvUgdWhE{k{Mi#df6l1y&GV^?tZ3ja>+ZVGrx%5&|qn3{o91U%y7glPfdGi zT|Unu=eonH<7tt|uerih3%yOx+rtq`*?U|U1Im9mAD1Z>Ra&pI7ZuS?7X<&fBIWKm zk}|GbF!y$6eZ6XWfI$gn@yy#~C9AKAx1Zxo^eetwm@W ze!ShJOv|%p*M49tT9B51GkHkOB9PCQ{Ubo#KMp_tYd-G3Pfk8~71S)jxGklm^tQ{| z0J#Y)q&2M0Cp)0|n#?puAork{&eyAs&@MIO(Jrj3yIa zxs0T&tSGoC{)8_tP@*rIiW;v_%DC}xP0Y*&AlFq|1mE-%t|;qdneVla^k>pxrfZv3 zYXxg-7PzNMCF9@w`_DM7^i}YHC&5mrFZWe)${UfF64V4!D~Lr=%&wb(Ig*ajz(6(s z$qOnmJP2^3=0D|l^X3IF`vVSwm&UP7ZD#uqz}qi=O^Aa)v)~MWeU$x~Nn9NLc;mHW zZr)%t*Is$6bK}|Cqv7fc_qCiremA>EFjr&I@a~*1YB&oX8>7`clb2)5-QXUv;bnh$ zyybjnbd59q?w>7#;5;kpaG@jNSfB%Yh$(xMVy9rv8`c(10H`zajhpOaJ`W8w63*s8okfud`@Y_8B5KTS&ED0 z3t9`(9z?S@gl)W@DAP0T9p|52qp-Q~e%|PVou_#T?8;c8dsyh`%TZP^J+>O|jpt?6 z3SnkupI@Z)9@X`rVS>B~g@5a~p4#8Pf1j7OKC#|tvnWTRwI~n!>JhYJf$HN^2wFVf zm62}BdXXCicMi@N1_pcQmY0JxadZkEy?%Y$q8#R81yPL5ohWjEnrE*>7p)#X3%Z(b zYcyROI{z5Ln=&eMi)i0hPFuOxQcs^b%CY(?Q@)X*&2d=-!h<5C*HxMgul86-6$@Ts z$`N0)9sW5&Y5#ft+qe<`xeUU08dPn5SQRGlasl?jhXX2T(Q4GCFcK=*ExU-srNj!6_Hr55tc&w3cCF$A0VfVZsB@i_+3AqTvg3 zOEbEj?!8J0D9{~c^gbGpzx9|unrH3PBlriH3zsX0&n{M#C8LT@*YZBQxex!{)Gvw( z1j$$OTWPh<_Hd)1!nqghWjc1QMd~Kr=W8EAc>i-vsvyaOgrf||8L@)cE49apGg zye8u;dBGhyIj(Q{T~c}PQYFt*;X-{qWA^YS?&-;7(j_4=j}tt`h7`o?F+AK&IemR( z8tJFr941dc{7nxGJewIx{NOA9d z#*n(6cAdq2I@wJ683WWUw~sc)QJWB*!^Li!JNRR22rP)bO7Cw16u+RP-qX#EVf4`B zt;5t7qxOoNvmgNxUvO*nzCKwBP4K$ZOA5!`boZMDv8F3us{}2JW z`bBd9=7h;|O-;qDd$f56!x@Z%@IDtlu{S(?@SxeK!qPJLdAa3nW#M5C z_o+r-%5>?^E?;nwB43fH_zs^HWfqUuxzoT$(7;qdt_YsbNl7-I(|ziqRn{2`#g1EeM(P_ohIZuNc-p_jKW6(i&Oy1M5P5ihHjlejV! zG=}k-TaaCt4;Pi6Ji)qki<;LIo^td4mzMn6qNZ6P zMQfF-m@ci6*D*Zelam`6u~$407;`yTy^sCifdp7ps!5qwzRs4F)5*$Bjxp05xAhY8 za-%*yUB9h8TA2M*E{GaVy`y6@An(Je$$<{Gb|X1H)zh&u+QYHH+HmXwKj+vv*|kpz<-*g9ibE z+bmgSPNlh@S6B0_L*A9{8^Aez5#SN4rV9-;JslWOblUcbfw#%UrI|LEXyKsH(vq5Q zjiaq?1qmjm&b9|D_Ay;u8k!C5mv*ZI^c_5%9z;O%yuRA$U>=zKbmTQ5a0>dYQPG!V22i*t#tArc{rI7WJrwg7{J?eFK(h?r zpAh+2x&C#sn0FWZ$=465nkWrtRg-*l3?iaGDrH}3G`Mq(SJ?0)BR8x#L1Mup3vBU10-o<3+#+dv(0eRbR@ zCL%ySG(7xgW8t%DF)42Dw+8{P@$h~qo&IKO3gzHTOS{gE6B$|Q=db$Si_`sr zIzH0tSU*1`A>sZ0b()W%p=~By1Ox<6^`_39wl+S8Dsu+n*-%4SJ0MD`cuRmhn9?`? zucVn7e^1YNM#lXIR4I^1f6U0Y0v+SlTnoPFg0k-o zV^A?^&O;DlwIlzEQ$!(DMz`8c+QTNXaMphfEY901!bH^_tCTZKxts4ZMY4;Qz%1bKR;eFj^-dum6Ba>Gc%bGD*Z+062xz zoSe@X=`riBz+H`oo&Bz@t?fvmJ`OjUB&D!N)FbnrZymZXNxVdCXM`Y#=JqM9;J~z@ zWoM5C=@+9j=q79y9SsZ$2`8x?|M(M&ZGv@Zzr|eja*|phzo4Mu?&bDFdczl>W%P^k zD+EK*T|lh2egG!<;s**GF;3LCL4yp*!1vM_egaKQn+11RWaL`|Ta`7xG8SfdA=s95 z4#oBL6CGF_+sIwNt#!T`h%wdE)8in;?Ou{ZeigxRJlGyiQ^cYh0e(}MFHZLsy&ye} zn3!1Q*)#EH&u&dt+M=#S@0M*y$}g!)fAiT^px{|_;fH-a$VG$2@q#9=O%@eq}piDdVXMqnl4g=b+-Lvu_;ah)0VQk zw-7U*jpk?KD@6@V=qaCU1Z-Ir^uzD41)qHuw!him|EVy(;`zYLoV^V7OEEP6b+UiC z$9j*rNf|kK=w&?GZ%sY!N@5kxU#_@lxuEnPFHMJMaMLk7y+F9a6tex>$O=h(d{kfL zwui6~T=?``JlUy&Z$r&LFs&-<8Uz_{~k_0zP?7GZ*h+UunaDwKa_Ytv| zpaiNs$Fgl;{N>91ZoCe~Z@hH*n@P-a1%TIBa2a1UMvh{Yx}#Ul2sE|2l#IRyt<JsVco(^fOTI&nwbg&73IgUgaSlqylL4vK9)(( z!IbN>{Ik+;+h>`X@m7Zw>f(qfr+^iUw+|vaJC^qhPaUr>kN5gz`sJz_)#w-wx9X31 z7axmWM>uqkWLs(ZrUZ1yYcablgqAuo_V;6mT-b#>D5mF>@4Z?b@SR+I6va>@dNODD zM1~BcZoX;5&4^xN(aS5N#L(;3WQLNiZ(iR1^STq8_zKo@nJd9p1NWACeS;1T9)bR* zZM<5qI;(#urz2=O6wX=9uKX4egdW%pkCiUxF_SctRh=%WXuP+U2YX>@7%ppY!To!O zP48R8@89V9dU{BV;geu43bf(a=x8a+HCm*Ih#tm0C}q?eo=8dAZzVWgf|;?Z*J_`* z9Mafhn}`Ie-aAkV;*noKQ~#uhPsPwMu-^h0<5!xd%E=<1l}4q8@hc8MJAsMxv$d6w zq2981JeJaHM?BJ7$fEDXusis>er16V8gZ$`{#|NG?S>1QVRsc30who`qt6|zszC`X zBwU}rwzRki1F6&qSZ9H#ktGm&-O&biNK4bMcM(Cs8YFRFzGSW(Vl0ZE1Hl5x#M~V9 zJD_iw)=!^eAwh+$;RU*+Oi4^%+Vsaw$Fshn{T5U#T`mcTb55a3rce4(*uGV>{#qk0 zQP33yP=SlLkb3|i!%e^V`1oixsNA85v{;NU*x0VF<`42}4mj7YamwL(6))tDn3cfD zgB~QPgnr=_dAXb}+0 zz02d-{XR*2WZY_XIwdcak43NWV_f{-zMU*!7ZjYN_P8%=V^dIKB(8=a;Vqhy#}4Vh zK*plH0YaeD{kVH*WJ1ccdD+=RVe`)uiR@jxM=Nu%T;seBQ7JXuR{!_r5O~ZSK}W}n zjWJQwMHaosff{*fIXS<98gpANOC_c7D&)C=Ce4OJieocg_VpY8{(Q zRW{LUma8jgF}%C%R~b=;^=FO5cjy@1MU@f}+SzY;on}j2=h^_V@bHkpR=^uQ&ED|b z^bvhvsUroTE=EJ&-rT9?>QHx=0_?==d{Yx!EI_ibrPQ2)svWayZ-Xr zwV4YuC{m3LqN0ueH1n%#WFqq;&Nm~2^2?)TY7Ilg51W%(VF_N(cjxnpL|S@_FaTx= zlb2}57#Ij)Ji@1#Qn21o&GVuuX=w09RkyL761f}eHC$cmdCSnZ{u%B0QoQ2Em{G-A zOKXkG#`9kx1Q4l671CUU7xV?miDCe$xbjZK}ade_>!*~EJjCkahh(CsX zM|M4a8BGb`lJW~G>*=$c;pc6wY{eb>CC=+NXtg?)x+wu!G4!dH1~Va-k1%xo<|K|+ zY9^er($OjScD(LsF>5RCdb+whPnpin&Nt1D+jk6F z+p?1yyla8XSE+h+IC_oAUZew{3H*mgeg^oCr4QzG z=!i<7>gkCn5_I(m`6M6bfGbBF50C@3w$j&nDJc~mJ`Bv=z?*5^Dkm;IsOu$&-VU;kg9W+jS3nr*~d>9#uwMKwO`BD*u5*JYNo^vNumPW=4Q$h6>Dq{kB@D=YK8i}B^F z`P9HxhDANSjxT)MvT(L1i?Ng|vyJgDx0QWKgCo^Q;^Jg;clq7-!a6h^_UzNrakaMI zshjn9q1B57;gRdX1*G9WMFYd9!rXdD*nN@*A-KuSuwUdfIxG^lhF%ltuqKH5s^g>g_kybI}~P>J*$TE^869qbI$4DD*g;|1}eaD|N9W^$s!58IDp zHUc$qAl@$bYQ3L^py19{gJ+oK6ce-Kc$GaZdp+@w=6AO`s=zZCgFahzcuWc|exzE? zTJ7?J`ulj@%nyfvfj46RH;E7Fw|LRyhm3H=J3A9tWN&ip70$j-_89}RBGeCSTsAE; zm3t~-t+E_60Kg&g^sx!dVDhZZ1o6uA9aI=#lMnsx^~Vxvo- z%+~|}<88?$JLGNBN4eO5g)xxK7_UB4iW)HTy=X#0itdWpie}c*S)`Sfmq(rZ`|FdY zGw7gjhEJ`E>RZ7HO$o9NAzSKwt~U}Wh*Vk&8X7`u8!sW7RYi(!u<^Qp*SoA-FCTsj z!O7tf5ozsslp+f7q@0|b+!AmO)tcr*#ki?5VddTnP6VokhBA=GjdQml!?K07aw=_r zaTI{ByC-|{ujChgfc9%z9ugMQ;dn5OV)Ukst%iB8hR>U_1o@?f-$c3R8H~ZwsAi?w z{0*BGsS8U>pvbh1Uj%(OauYl~T2Jus&>7ODeJciPy-pp(E~oQ~ij2YPO7V;a_7^Rp zV%#Dzs_!_S6@NAdOmSi3K*eOqyq-4Z`bBW-)_Cro_xViMO8>w@c3IgyTiXJCXJcbg zxUde4eG~IrX~nYg+kct%1EGDn7myB3}%A-$J?tlD+mgl|?UuQ^DfTk-X25cV7-5*w{g@a_7`s*V!rTiIjFT*eM3cyPT@^_ z<3`3l1QZPdFmxxPD4yp3xBzc`nVFb&4i40N$S_e2tL)yuM_E3;J%VwUo;EREIhg=X zFX!90rp`|Jej`TIZ@IZ?6&0EqS;b&9p#xu~C@v%e0|RvpjXzskJ{l8hT3Y7i$Oywd z;Qd$DUMlLNV%@kwM^7IQ^_;icjXLebBcK1`_!|R9nYH*ccBcMJCokfU1x zG}mLpr%HtYAP`0}LY5*Gn3>5bDcw0g-Zt-udWG~wA(_cEqmdbgbPKiHco5Ng{M~YR zG$8P}*(3=0d*9us?(XP|ikOe=&H){5B0|n# zJz0?m9pH0D@TR&2bb{vA&$`vuS8Yfq3z3UML+W{FKT60;>O7B=GBRoNCWr_JLP3iJ zU!31LYK?@X9yoM^feP_QXvM|JjLy?jQ`q>v(m8yV>W{_6-&9pq%`K0XYDI86g9Or@wwO~XbGH!K{v(ac?)xqShiC4?6t4SPxw;4nbV=61DQvY zk%>tLm|)^Vo%d;XXXnL4SzzC)SWzgoMB9TpR7s7g59@6`U=H(4#b#xF{*cuj+CYvX@BdX}#ewphhMZT!%{qT7t za>ive$SO>=zQq@@_#;l|?EES!)=(__?Vpxf`}56E`-S#fE*mHJv_>Id<_Rf&qS99{ z7VVM%VAXKh|9t|E3>}xp_~^O2drVU4;dGRZ*^9E!C+*1mH}(#+UmIfd^1cMk)D<#h zw)<(s0ko~Arl$DvR`ukUi-}qJ!QcaCF!2HPpfs=3E&HHB=XHhMSR6Z8^vjCL)u&iVaNzV zTN<4YYc@FRB4#{=YX3c1O1|+a&|^RNUVD<1m-8O6+{U^}sj5={yJaxrATFMFx>4Hu zwT^D)A0++&3(^%I2LR~v7ME=6q+puhLOhI;4gKiZbB4tYJ7QDk@(h7k&bo9AMI2pI z#B?J4U(XFKpHCa{oxeMapR18gtvw%yUj}fhnj1<0KZ?qZ_+Om^rSJBa60TQ!aHjOY zI~>I8*LE1QNugwYkoB~#{ zJSk_zhOG^~j-$I|;5T|il<4q*82lt;0jyy9?@H5jMOyy{8$I-qF;8DJGl^so)ZabtJ+~7v#GV9z zL+pDl<2DglcmAkY`B9VRmTJ|W_;8wJm9>S*_F>0@M)tp+FhsBV4=`e@CVf+DBef7g zz@5c&Y_4%TK?plKI;7Naocs$K4^P2y+p`bb@5JopA0U?3xtb?n#C-ub3}Z@DkE z2;iXQWTJeNk}Uv%2(hetTQcWbrD{Yo&)Egf>(&fP>tg-=#j;WBMIt69)Xxt0!6F2| z9cZI}|31oX1Pr%-RmG&CArtIN;vVcDS8nz?_I5uIm=JsU*XI`{L+kGxK$lQe^4npm z>RbTqL7o*Sk)Ylfo3OR0=jd&p5ZBK5-_|r&LrYDK><4#b-U5&!TZT0*QQX#sa_T_t z0-M$#Y;sapv)5OM8Ii{L#f4W-0)Kh}rO?S|Ild+^#k)U<^#ivhSA!X@re+W8wxqns zl^Z`2@N(~kq4cmDHslWh;Sem;finb9s^Z!!1rUfp{#)IFDse2kVV3Lm%z~bFqL&Ae5%nIB ztl3yD$QqG^2M8zYkD7_b3TYYkztzhRH1G|%Oifi^>@;4{Uha7b8`~0;N~0RLK4t^D z;M?pX=^aNauRe>6l8`DzDE<9k{O~`TP5x(Gx*mz`;UO{FkK6X*`Z%)yUW1YwtH!DNs_`z|SG@m$ zs`3{X8G#DLxZCC8cuX@5!q5?BG3){G0#REg8ij>DoN+rWZ>wWjOYvMV0Q@^f*mdWY zY`4!Xw~8R~UOtB9^z4{YNh##uPD=f;xf$KX_I2~|?DqWC`Ech=cD={8j)U*^9A52l zxbu2xqf9XGi+MJ($Hj3Nw_-yx2BmJnv3A9E2XkNE=;3uel>Qa}p@Y+Zm+2|&3VC{Z z76EtcTgQc(@ALQX9A!F>o!5v{Q&ausXP<(oH*jFUnojBdFVF4ENWK|2R6lTMj7Us; zS6Ye#eJa%9CYNV6T}d{={B~&2g1kIfnH;aQEz*cbzJbG@-hWeTV*A6nTKbzDH5o(f zn}Hh})-i1Q&1J7b^I~`lv`gQ^OLlbX?;LN-i&3ehjhGgRzJASvhS{>%xps7UK6|}n z>w8Xy1nw;lnB>-$OU-*#b#*(z*b!NzD~VhxTj_5tBf(VrKkg1J*-=p7Ah`kVh|CeE z0NB2sMmz+yn!qRrMnU6sGjN6yl9Je1ST&X+3SSSfz*`F)tiKxU z*RSM`U4eHJGNAkwHD=tT5O#urNSl0^QPg7n{{8zBU>7ac+1s5qc%Q?;QT1z_01_eo z+$ta~2e$uT{+-W@yAK%D`|clMaCVBHie7Rj8MigmnYoZnx-MiP73}^9KbkD*_qX<~ zY50PDmq_*|j`6pPvjwK{GSkM)qfgg-h^FZIzve;0%S%WtOW{>@%ACNjyKdy)uh3_{ zTF-eVBqS6TPh*^$?dyt#qi$6G!ju`em7gpcyLMsyGD8Eou{}xk7`$ZTe2r4x-bR8> zaNCJ;{nu_c8;1%@i;H{5`&%v=s&;nd`)ZU&X|Gk#TFGS>Sb=JIODe|Y>!7i1b(WWP zM{-SxPJ&wJ%40oA+44_oI*uZ|rpkqCni$T`rjG@a(~R3x^z=5)t82=2Cv;TRO>Dhn zNCvYC=G((<`?&WX)zmkP*^a6nciyC&xhOg*Sp76|GPj7HDA+i)b`MMUsw{KUz#wen zs_p>eA!q*DQrl6 zd0Oo7^=M5IfBUVd$Q=9w!8^7mx9c4as6}?b6_+h2X=+L>LHPWU=#^VgIE~FY?YYCL z1MRCPkXK7K^cXN19 z$5XL9&)!=ZKj-?!r=ctEWn;A?mUTCGo&~q>eCBT#@5Myv0bvXfR0IUd-l!+}0;*tZ z2u?IW!)RXVe~Wlkhs9dR^9-4o=wdeg8_fk8U8A`sHZis^$rmZy)t0~6$7Auxh3@g@ z-<1qJqT*25Td!WuVsIfO{Cm3B$pZ(*EOig>ST4}jQhDx{R0O%Hfil>@s9^xknnkoX zJ3Hd3*x0-9ip9p~#JaUE1*xvKhTz%26&KgYFb^Z{Sq2f8?X7|+*{2`0T61}9zgmA* zly1dlGZc|~K{YgN$|!F1kxwY2nsnaQ=xht`IFvdQ|234U7Tg0x`ywJ?|B;w-avJTn z>m>o%3_H4F`7v2bQJ`6m);cI{i6tMGKUosOQhLGdTAxG9$GZBepgwD2xT>Lmmru%Z z({>|IdQf2c^E%$WzWEN_7(%ER>=|Y9&;f4)p!-(A9g#~X&OJ9dk)hOKe*?;Qp`qLj z0NBBrzcT(vg>iI(S4M_xXWvme&t_+RD2Hz>pH0a1 zs5f<3!oa{G{!DLVbITwn;rg)X*29MzVtMZXEL{3XPscP*O1zMIGLWq-BZWu1Dc4}m z&kJR`f7~NVqqdMkG_)#a5zF$vT2~IhUjeT~@bG{x78dXMrXu(a>p8e;+$14%FzsAq z_(gv@zozp;S(IF*Cp{fEXtSn9BHT}fs_Mu8rdw4&9fFEPA>o7y(#v61l*g5snTZ50 ziVP*aqK38_Ju%k6MMcoEM<(MZa*eIX)H@wuZiJCROV_>&n}FkNT}ULjl#2M)e5ct=;=jJA+DiZ@*U*5)^wv$S0A( zc7FbJnTAC02zp#pfkX&9`w9H((`C`menZNkLR{6;KJ7KIY`h0}^JM4G!tyfX=-&Q5 z?6`2wrik58PNEqZB5_H$Ot9eivXK<8BB!ApGlp%4!w5w>J!*NO{y2@_R|MPdE9ono ziQCMY-_}~&+L*842-2YxgJ^Uy}vFl-&FNN3Uck zaY6KuS+)kSz5PsMW#x5R>KHCxU)f4ia_y0*p4QPtg|1!^97^vY0tG8=@H{xvRUb-eJCysG zpqaCC@eHC{(v;NHCWC>sgu1x>g?y-o=7t5=_fJ3257CnPP` zlsCq1we}=_45qZ5WY=vNGj0S-?$>m=s+v(7-dHtJYiOl@Ys_Ut1XEMJ_H=pqFd$Go zx>E(?vLQk-Qc?rFB{~H$Wo6v2YgXxyn3$LV5^WwGjRlix;78cm z+dngLQ1N#3;W_#>;N#%H1v+~5jq|fJohieCg_b>^$WR2+ER;fc!e}-z=mrBDn{?iA z?uIS}WR)`69@W*=F)%Sb;NVcv$dU{k5iXk~CF>L^9>N{lAd}ZNb!|dEe!n59sX2I* zmzS55pPx}!sHBlq?v0=xQ2s|IKwB;Nq5Znn2IVG)q_AekXf$cM&ok6%LG!VQt z6IfzTo;;+BjFX|%7jx$MqVQ>TtoRWOG)v6NChp@=Ucoe4KvgBI7aZNSs~z}zg&tM@ z-ZWjTyjMYCx4?H7!ZF$x9QG!O=;>FHe~*x1p0Wln#uHOgu6oFR)B!bvt?I&buBGL} zX$lI}OQm;BQma~X$Rc*gD-*Xp-aWOI_wpXLHG&+5v%QR;s&MU3M~ad!Ffvkug-=dp zYYE41-0bNJxV|(TYrMvxird*C$Veb~@efSTiQIvu$;F2T=xhLq_l0WtEn7Dln z(TLGvjMFv41QZlE`q<8sl0dj8K;ixnW#^YkkkQ`4)23Kq&xQv=UMzDcC#w4Tzp|6r zw9c~1hDdB}DHlh5E0+wTxYw19lc6+hf>I{h>hzQc1X2vffc+x@b9WjWKly1chU%;9 zdg^nauwX!Jan{cmAoPdp+SW&Z|84|YlxSF4nhW&}xnBN!Dj|7ZnS&3w#^Kw4jTIiv z!wh-|4=G~FX@`8^(7tsVS*0tyc7%u$>qhQ85S-p99GpEZn;@hLO`+O3Vv{H`6f;@i zroylHK@R&UtrlX?=r=bfKouFyd<~Dd3nr_?iFonJ;JP(9#KWjER-h3(PbJy!#5`1?eK+ zv{6$2f{|47pBCNCqt1c5<5y5Sot(^9LdY#r<#ZNAhS;t2ftcvA8wW)q-g~@Fh=?HL zW6P|&5DEihl6QY?JvT5h0k^GqFuG3Dzd9GGJOeZ6;#{BAnQ8rDEoy3!FA5m`Z^>G7 zg^i6@2Tyk2f@Z3t{OS^w^s^$}))qR*LemHNw`RWIk2R?04!ZbAFMaF2-X|pp`)-3w zb6OzVrONgM*z~=?h zno6mQf%oBccw}TZWQ^vuTcf8=-te%My+cWfFJ@{g$ss2%J_|}sO~f<{75B~J3qh>Q zydoFIHiw3Qg-^e`Ctfo?oedXX`K%4-3O_F??i1-AW1vcCh_5X7CW8;2F5~`~v1$(< z@F^t0q@V2^kQgxE{sSud1(0(rWX0ETxo+vfHVWd=j{uhfybO=6bKj5hRK}BVHK97n zPWH*Y&v!e3?HKo|H>b;nH(seNJn}n2?L^iJI7jZl7VyVR-80h1zf&9B4rqA!D|=(= z6rJjl((PiG{^`@F|Egc4|7u{RLQR6RZCqXC4aMIqu`jfjroKn<6tdG`j=Hk2Ed4Gb z8b7tT*LK-klCFF2_zH+)p{bhAtZ&B`8)LZGi$JBv7fACqWfNP%HqToIWKF|9`ueOr zJ!~U4SS;iTYU)MC1t|(}C2T+Ab9J9S@b5zh+Q&aW*L?|RXUUyMV*2{zJv}|$7|EUE zX}Xe*XF8JLSPEtzPOAgI*1i@Xx#)6rzHsThx%AmI=Fn7C?a|6ad1*<@D86WuHhCYe zswx#LM6aGw7v*;7EN#s+P#r8;uwm8I)g^&pYCLi~%y*co>%~_Jii>9WyJd^FH#UMp zLqj_-=a?pA=_o5EY(CPUe2>Q&s(eymsIRXGLd$snzRg4NEPKB?)075?Y=!efz@b%d z{?%P`1XEL_{>k-qO(thyA3i)~Vp0OWUEhIQ~}``_ZsGX8~gfh)>9dysv}l zg)TT3#BAJIAkY3|N=nSzCSBv%L86Wh2ka;^VESGGEcaCIEaZ12&F_v5$jt0fKBHxe=<}xs{Yvd9s6TkwmEfW^+ z-Mu}Hi^tw)TCW>U@BB~ph7F8OyL($(1Cm8i$N~{CSi)28^%8K&Z|TJcr@B=TpuvFUDY42C6453(H1_(vt}5 z?yo#g#kVk!1Y82Ty1>+nr~L-bIyi>P6oqD#l|}vhi3WdBjDHyhAvzBDLIf_EHovs| z|B}5#q{usE7T`c_4yp=01e^$zIl)+mjWM>K#6hGuH1yvh@}~85H~QD_&PB3yQxG=H z1o(=!W14k)+|y-tTu3ZUp?*58YDN-3agRaxz5t=9s8ymW(w?o4~T@_Ecab zB2Z}o8Zj(MslL}&C+C$mzm?UF8ZR7hBkA6uk~lS#l#jz8AJXiRm6Q_sou1;M#TM$1 zQ;!-Qp`!k&UZ!}qvAnPVzU*iw1F4eV9U421K7FF*tF#d*TZr6H-k#aJW2-vp=%{Sh z$*LCRkck(JR6fie(~xgKo_=D#s>&&lXnYQwNEjd@io>~F82h96WoKtI^?5FJ#dVwt zA5THula*@#atv+lxQmndP^RhvB!{q=32tXxDrV-$ogF(`hM5R3oJY*Cq=WB?YiiPg zfl=;y_iFUMLHm7CA3c6HCZ@EM6hDX(ajIcM$iBPRJiR97bGv4`$FEsISGf!ANMv-h zEO6)OB0nPd0;8~o^6>Bg6%~H}8)&cOudjQ3lMs@F)v4;z0YjWSPa}Wz#CWnAN|~H9 zYvxmdw=pcW5Mu)tjZUS8GYr zBwaX-jWekZN^453vG9y_d>)W@Oje++TcW4xsy=66t$xN{THNTP3oB8%Z@GV;jnR5i zWm`i!{Jfh@-DOYue_Q~@`?mvT?s;zG{<|T@KG1?6aT7H+o&-A!3)*+j&hF;sW~=YQ z*+kxFLLlzJjS%t9;G_6|RDE|Kl@IhcLLr$^3E49;LUuB`+$M$lmX{`u^Vc_x@AHUC(u&^PF=&E1tVYVY#=9ohPfOC)2u%eJ%Jk$Mb$F z7sj13P0TFiphv+i_o1rl+#D^HBCJy|q-i+JBX!nQ!(vkY5Qs!(-F-L*{!eE=n;ZA; zT6p(QT2YrMk=ak4jduV^H@ zT6~JbIo+H5(qn*ob$y1?bFZpo?Pu1^>zcAZme^T6@8aYL67}^#tT_LQJX^C|G7aZ6 znED!^q;AYh4<2Y)j}wAigI?@BRo4EKYEfWIN=363LLY|6oEH)X6{gpDOoaZl_F4uuDg+7bx6g=ch#jlN53LKsq2QV+6Fm<+0Z>eavxJ zq%)jT>0y3gtrPXv7u?KCF@GN7;whsiK{w>+q?|b#pE(>*;}%LRZpD4Gpy2a2xHVKR z&FK3eY%k8}0F#ecEmIMKYt?tHbejtmmK{4>-ZEaVUd6@)@jge-?P#27ecoFGYdIyD zX+=C)%E```(}WOgK6QqzPoWQ0V1)El!rz3=?8t<;Gz}98&bx|FxxvLsE@_g7Cu;L( zt-tyKp1Z2%%=X_?_ny0FkN38`Hjv>{V$c;P@odz8&}uR9TfB-qJZuIt4;kvlt^|YR z&~UHWpFRUHqI>RLebI^?>qsEZcq?MZhb(CTkT=wa<7H7dkW50t!&Uq86}?g+;+%PD zYikP(EUEp=j5ijlCtm|ho1@Fg$~wQ*nSnO<=LZi8*fFotJ`?k@qoS6I-aKz6iIL;3 zr9l_G6O6-uZ z{Gu(A6m-@jx7->m_AU9oRVDq-;tMr*Y?K`A=T9Q2H-nAGNbsHC&#MtL{E7*Y!L9FD z`lC}*+qV19o90hR1zlD#3*?qvy5Qa+p%&7XmaNdDymr#vY$Gw2Q`DO?U8`Fl@N-YQ zZ#A}gel|ylfm1Ip+)SDxex>6L79?i4Ob>|Dct_355Vot$se8tKP!?%*p_Hw67B&-`tix`JUR^|pXVx$Ar_l^y-g zY9Ehs%(vdR18fxG{h~Upfdr8Sj+5s_#GZ;13B+}hPn)B!g-FtJVVR+;pIjFORZ!6a z2T>iPCi^4&^3Ob|7fCpIaQI-+q0x+nFuP`YeLU~sCB(>f$d%wL`cLLAUL3i`dzlO| zg3ICPQjOxG#}&ub?N$NP>xrEkQ`9^R&NMg9Pn?i#P9ih1bEDy7YO~(%lcLW=$kf+D zSo>AJoJ-*}G9m-t4KTzUy=g#?mZi^|V_g)q6$T?zCAbnCuH@^zi^JNgpN;rxTjO-J zBL|eG_o3w(erGqK@@K2&b7&{!epE&fWp=JrYC`Zr$n#!Fg%j6=U97#+WN4N*ebVJc6{xp4z5;$965 zc6IR@f->`)4h8- zYX*99%h{*UPX_Jm{J_R(bXah-uBJ!5O~f9TXrpCUBexbhFMaadwN%^z`rUobM&5|# zlV6-r08rU{_LDYxV3TPv;aXwp!T1g|KqA3zv8}N(84aDI;IpR^1wAA*6diKS3`SSYUc5lre+*BQhPllop%*N*+tj$2?5>W! zFr|X*q*4CdQxw;x*d3E;;$$Vi0<_f{7w^r*KmDJRh>sdP_!yNG3I_R%1g{G$ZY5hU zu-mWIAP{(0on>c_Tu)B*+MT)X%W#H;=d(w$XnqKyDzCh3_ff1vqxcz4qstspQu_!A|b)a@tViXUwswp@2{fuTz5C_dZFmEBbQNzo1#;<2gkoJ=uqHHIpH+f(mN}w zHeI?DJj)B8VWt8t?nW)Bd&B*^vN(FQh0Wh62ty@}aMv-%LHs>jglJ?pNWTWesyiww zDll}!yMTK==$HrV_ZxYw#&nDL9T#PxCP@Lv*^`jZV>x1u*1C4-@}AS?96DGy6vqJ# zArU-2G5!3C)T{l@_hC97HSzLk#_|l9oZi2*%d_;$cbB`KaJcpBZDqwB`F;H+YtrFY zK~#j9CE6}Gb~|Y53X4cf4f-@VE9yyB@bI$aNUBP1W|s*xVPXB?wOQ4C-jWv7WTuQ= zGdrW|m67HXN9}unV#%Oa#SWykZ#)W)BqAs88O%w7oaAqJvevK;AomFa1LHo9&x|m| zqu2B!bv`~A#~;+r-vjjs7>N`UBTQLqoxhJa_J_)hWxBgD6o@|U`jl&rG6gG(CS|52 zU}1S+UJkbOVPpQrB%s+l&LuBF?gL94JObf?;Me%0e&i1x{0IuB=#TaH7w?FOg^LR9 zziSFnV-T$QFA2EY(}iJxl^Bp!W0^8;f8X$RD^(w>wh;gme=zq<-Lw~i-{zV0hz|{! zayc%hG2=q;fKdg5T1aJ%%U>sExSclT?mkX;4<`|oEu#D6q{Mu3xrSUU4reNE)X5jg zUV+CY!abx$O0HVHV^nvB@kIB{;bCpU{H{b@)Aux4YSI@?i&kagy1JMT9>`pE6veO_sAeXmxi$;Azj4Iu=}0NrynuUK5!YYx0=cu z?XD7B!M{5|4?zZE;7dc&U}=!ia`va9d9;r+T9^a8>8t7C)q%rDrTSURrD=;H%wa6+ zUFn_MO--(?9<@Hl%}+>|r|a*AVK_L@0IkL)O?DaH$j;3TGZ1=dR{zl>#ZpQge{3}W zBANH$<7MJd%(wh^h(q6BLj|sbq0VrSL3GgBjMoM#)X-`dMgG3U`=qqx74Kw|kJpKd z9~p9_kO%mB^a28HZws1$W_EINQY8pX()X(QeJH*m6pM$zRzye1-TWZ4@xz}|{W&Gz zlfNPMbm2aBo3%lI<9HB%cNRk$XFBbPK78ct4L|hor88zhD8y`TdJRC$;g>F7LyKHE z0)5R^7gNTKm;tG5Zx|qnh@#)c#{&U1W1v8Vj&m|Y4n~v*4)d5@U2+pIu~hS$B#n%S z;Tr&$0KYN-sQGK2V#*bKd=p@O^V&|0+g}^Sl8{hVP?!huV25SZm`4g4O!+(w86sYM zkmq2}($m#d7`q4Zt3sdt@81=`e?a_sd$}zt>mgQI^yl}aVbF_eq24@6)IV)J4bcM- zw)P#$qbY20TJRIThZw}9q@}O3ztdpMVw);q_z=!Dx-sm58*eUSt*UutaM0@pPu?D} zrw!K9YC%NMdLgEP260_JvQ(!gKI>7iS}i9Jy|bO_N@LuB6Q#WGVDAQ$YbG{4Bjfr@BaiQuve~+N)@2Ifi1e?^K0}1h8fE0>M*4p=30OieL9i@8prUL8pKDM?ThSz(XL(3<2ygcl1M>Y6Oqtnv0 ziK^|=GE5Ho1EAd#6Q|FQm*q&x$W$1$b7$vJY%k|TnU}km{w8WVbtM5mktC?y+Z%r8 z!M>+Q1JyQO)_fEI4CzWBILkk|mrX>%VRcebNJ&aQf|bIjNjw}pywYb9oGe=m_gy%) zwqhHJKed-V@OBp>=UjiW_>COR_~_(l*8mb%FKPdXVF(WeYcuZ~KvjiLju4GsUux}Z zrW8E#ydkivfY?=>1B#BXwwx`UOq%d1l@pN`g!8;j^08L=qFuw;(eUCDwei&F%ZZ|= zI53w&r}uBEp8^F52qYbYIkPbtehRTkOo~TPPKNWvvKZu<7)8UgGe=cPKTRsbZ{Ms8 zXFMOy%f0=e{Kw{Dsfft59t0(DmU4H0<7}XG5$4vc+~=9%s{_-gH7eM2FGgYXj zhZkqs@)e(rQAilZ=Wo?E8Rp35lfRl!H(zJBWIdt?2(L6J3V}}e*|Q{6kKq~lZ>->U zS$)=eytqhzwpZg;g+NnG=Ecgin{9es2aOwctq?~^gbwebL`<5>qT<~Fe z0hQ*`rXUWOX~&{XIdoF8>o4`7CA;dRRvpIMWLTw>J zcs+F%eKj`dn{3X)6RqFDiP+ak7vDCulSFstJzt6K+5PLjkSaXiTvQvxaRuMSTm9LK z@8}j&?gU#~(0BA_1S1UGUMTnr@|k}Bac&nku)Co0L(}{4mmrnc*{oIFv z6O<%&(2{j#v!Y(dh~0Zsi>~lRYpBt4mlX;PSe!qu8N@4Or4d(-qIa=dbU5WRN*?Np z?I3kf>7VACe>r93AUlhN6^E#pWJ~A_4;%TL{CF8-I`9?-#%-2Ah*F_FJ&M6`OSODm z6O+PIW|jbIU;9796su1$N{i^7Pu&+6pNW#4ojqC;#?jmPwUlAyrvR4*5z6q@x2OW{ z7md2qwvndB4rI|VDWA!%jjiI#YEKxUbwoxW^lPjT@j$f>udHl;LrD=et=|GLPxpA) z7U;%8p@!7k^yql#Hb*o!dlF@2*m-;28R~u|%u(&&i$VK-qoJXDZ6(8Bpl2b#%zyZP z!T{DhPRIcVZ7=0WK6mzMG8ojJZ;O@mZ0a|sD?fX;koQ!!56l+xy!NSHbDK$e*u)G> z%gyoIzJr~+V65h>uZ0E9+1Ur{dv@s&p(G@hqfNfTJM#TxM@M2BnqFr16QcT4NvX!?`W{kgIbxob$0-C)IKQ?V=;q{5 zBGshSCKrD_^r(HrOb$~;zWJ-yxAt=qn%Wip>phQ7L-06M`Ze~+eFB5l*T!pZsGf>q ztv5BhZ8<@8p2`#pS$w52?w-c#D%SHa3>Efl%!# zCv$dt)Np8u@#J`K zcfqhKY+;DdzfhHupIS>xt6{4H6OA+%f7ZJKQ%a>1M7W(0cEP4$iMZ@zkj(3_L&v{Q z3&FtiHO;5R>R_vG%WK7_z<*}{C$UcRQ9$U@>rvcC!82U|dcTsJZnDFhhE$tB6ay+LK-bjWYc zN9`v}E#FS*0ZgXcUF@qjp5&jRj*{}?DBXjSi0k00`x-yTV`orCPjs@%iV3vtjLhFw zP35mQLWA8|l=HzR70Z^3Q*XmOB%dyhAu7C3MZy%3pA$afBtlCmvZ+ATDmJOOl1lY` z-1iNB8O*GDuJ!UAA>Xb!)KEVZ_kV<2t-XKG@jb*^*);zq7Icq4yZe{_g9KxiJZdc5 z_{O4%Dgwd@K{R~oX)!%6`0DyfDJVVrUpyeF;OC z^TsaA+R=->7V)3*?isG9KZALa_gP7C$oMfTr(a5y#+1{1RG%!iFXs@B+)QV#|< z8P2x=Q`TR<(tesmg5;fSy?ORPvP}nFXNN)f_BBdRaVJ=N8f z6&EKIazP|{%3oJ?zz|S zYB=95n|X6SJO{NIE^Xw4c<9?2Y8}e0 zfcfq6tZ#kon5yOn3E|!WykG0xL6TNw0x`L}++Hu`6zw!SJvt)6Q~OcrNj1^o*YImYryjS2nZ#*@*|K)K4(>kqnuK z32lDA*-xR!@8?&n(wJ`)_g^x|i@q3oFPA(eY|>4qEw)}?inq134?P#a-x{SR7{Is6J*}R2 z^l@uBg|s86?mwSOB*?CEq5h?Jk$^c6xWqv4lZsVE=jMre8y_$2?k-SP<^YzPbgz+Z zuioohlQo?DWdqv{E}tXkgnr?;fg&~?@I8C}ZeTa2uAZAFYpsWyn;Y$5OGf6ei;LVc zpjs@mo;cHblcRE5v^dk&IC}J1{YgBR{W+UYV(QoHQXo|ep6PWq^SCu1g#u+{^)w3EJQiq0~q5=lx<>~I+X(_5M)vZOn zenUe;aKVm*oCA~#w~=UUd@565IpFTLOPp_YlAxAEJu_oeZsm2N zevdMQ_0>%kBrY$IveW#o>)9Yw&6gxTif8hCOXT>bpHxl4j?%q;&-u}g3}<_IAV36C3}Q?ysir3KFHrGARg{;r>cx-55oQ+Ygzkg-inriXt5tP>GQy3iXic>ji-@R1ZW;fU0Du6A zYf4mz*(a(0v+Zy49;JB~E=S;z#q2On*xUNzv;8^zRODPGln)C?Q9tE z;Y=gkHWlS1_J5BjLPOD8OT*wC`u>d8?qdBXApaF=P`&GASS!%ocR^Pc+2!R+frJZ8 zrikJF2m^xr# z@~6xQMeuT7Ne{+auKTGfkpmH6our5qUWbuF7Pu3}l8Hum7_L^OISmd@q=kyu$)*VK zsYKg}JEb^Zd&NrH>U!>BCnd=MOX=-H2^2*aJk>|4uP@yemy;t(;J`|b3GzMsdlQTh zv#dI|D5rfk;E;!a502Wq$w`#1kB2;$_Mw(c(vn+_t7>-4t<%ITSlIxQV8B-iAy_`s z(-@Zjn`kb!rWTs)A29C@MO9P~klb*`hfxVK)o;OnuE?*I`!Z3!JtKutIn0FAVppUB z;8)41sdTr+n$)~9l4_GWB1)Z>((byS?&cG%OfoR!|ERREXeW&f*FLpt(#rNh?XOV3 z3=PMVR@q!;Vtsr{w2_lDipSvR*SQ}a>8dC}aMk(SLYz(MEHtcit#sT&ToFL(XMQJS zM{;w8*=l@XOS|%JUgXM1iZ&6|x*#8|kItLcY$-nmE(hW;3?iZrglVy{p}q0%(=LZ$ zw7#AWfc8te!>lU4Wp`!P@>uk?$PuM#p76`w__k`Bq9>%EeNS(PVH9cjJsAwfB*hXv zT%@kFzPYS+e8lznbdL-!6}UFmZ4V00XO7ANi+C?bvQVq4^FfFYn)wuf8JKZ*)~D5r zcnn`AYi>k@Y{(tw=9)orGhrBp-^l_zqHW{ohlt>t#&@D+&%7?Cf%kpjf=-Qwny;P@ zW=lcecaFNu!gj#~z6AsW@x zyTN#C7UcbH@FmFpznWG!9Bk6GjtAB~R$Uvb`8yX#kUR!FKRlLVcj5O51F*^LgPSG- zngCte@ap+qP4oR?8-EyGNY%dcYr}k;$(SWXCt9Bb+>KOlD|__gXKS#X_A$Th)Bu?g z^kl?l|E9%xQ`zMwF6uHayOvKGiCeMaY!)``QvW^!VDtCaaEm9NH)~c|G}mJXuG_l( zsA;kp%xDqsO!aEy^+Vp`wQUGKIGA9{s&7@jSVwgD^dE`57V2TXI#|d<*^qNy&45Ma?_!ls!8?mRZE(P}0&ryfls*qbq0X4+<J#Fl5%2G8kfY98{@iVt+koXYb*)Uh42ZlmJ*tCe@v&p78N|h!iDF?z1JOwCntNutRSB}Ltb89^V1zQk}pQv(A%1}E(Yc*HM07TxDyqdX zu*K#gh1Q+rBsiJBbt3pt+t2^mEAj3SAAK@(Gp9YIuu}lnso@6tn!7t^Mv7HRztcSt6^RXn2@vs2 zX3L4%w*$)QCj^r7tWsds5UpNHY^8qRpu>sDzW^!C#JHxEJ9$_AU|^=d>`N zYM}f3jlk6j0{px8-h81x+a!fD01N$)|GnU;fU5vxsaePxadk1*T+^(cP&_reH_&92Xe))?bSsGH)Jhj2O%<6>76T3Q}*&`=niN`vA-)z zl)m}?y|vPO@Tt5+hQMGM=DG~Ek7SOt3Pf9M0AnklkhqS@p@e~n3A&gb2#fazquwXa zo=Ji^!QtVdZk=-|utpn{Ci=g915G9t2eGH4V@!PfnLLki$5qt+=*$Rt4)!OE%*-Kh zRWtZVKpeV=2!Mkk4wad@3f&HFZT>E6&#JvfzXz_m$?>3>^>PK@hnN8?L9C*3`kfE- z&V$#U@naS3$t`CJlJ#j3c&6rydprj4ZRzZ@RWk>Ga1-ahQzEY3xc901G?6B&UWo7h z1FD(F%QMxSs7tUf9pwcMCLu23`Uh0UgHc`vUZdjmRaQowbtPi!lcf|m z)7yKO$7+N0f0Pw=ZEZ?R@aOnkEL<}FTezH@(g++dNk>}uot+AyCYK}ut^g2WbyivZ zcta)f+GE>VAvLk(M}^tvUu5?mYQGCbsOHfFmP&okVV?ANZw1lq+fZwj(LVW}CM^C= zr{^b6_p&WlCzujLCpyL0@7d%Vm5TVR!;N@gGG%#x%!w&0+{C?6QKIy*M5)4mM^H04 ziuXP9&cSAD5_p1eqk)E#Pa#8I*^l58Y_~(fQyG-ESLg2+5c7&le0@=Edm8DAd}+lV z5Pk;It^|wW+s8`Eeo@QIrouY|bmP|4(Qh}|p&Kwql!!csX!?oS3NyAq>|IkpaR8qP zJv-I0=={N)RpfJcw6+WJ7~`Kf?NnQ)DN|JQl?FlTe2ec{zmOS@{)rF|9efaub!vQN zHfHuMk(}C#vJ#h}MHisp_brZyQb6_I{C}|lcpC`;o@6NS^&b5IsptyAj+ZQ)U~uq* zwUFbY9-8p!&J$=&S?Ns<_9jhsmIoiDxc=Pm!-5m@OW+3heF}w!y#y+_Mb{vZ7e+@L zadk28ja=HrFc4M@iB#ttD{9rFJoTlei%|W%v%CE_lXin3yxl#A_|~d6!lO`oP-fP; z)AdNLh`p)gm~8Udn9Ndt?_2L;b@M3!&12Ef(BV`|T?Q_$P`KJspMV`}X#vlVCpmVr z*LKzrQLt7eCW#gB^^PJJVZFmk>WZ9br*xZoXf%(9HqnIciWCgXu4Llj0Xm{YD`^IN z8hDI?w%s;U9|n4o+``4eB3~XdxdGH*NvT)m5JZFYGBYuWhLtw>%~>=Y{?D{i<> z5yqVcC39wIzQaK33lbBwPA*x6RO=flI3%yppFDqwZdoN^l`0zP{^&I|jUsu;wQy`qe8sVr@ST4dH9JRpr zCgP_VyxVAhV0jF>ikAS);L6D|^S%6><&V^OH*i;0oA*wE2{0?)5hV)?3&@h~AxsiFngz9E@DqgJf^*J8xM@#9(Ly>nLxUL+Y^T9{(PDSk7+9qe za&q`fMIPT$A2=PLB+*YfIz$*4a+P8S0IO33_zDdyq=D=Jqy}s8Mj8?yAWnaocQz9S z=a_`^yaq5Abs5tLmHgX72Zc#;o`|0fr?J|d^%LTS*wH(OvdR))Z8bG+FOy?ZRej5p zAS$vvrGP@sV;+0V$Q}I56cpr}ZgNdQJ{yTyD)6#O*!r zxZPM_m0BM*GuriMeXmgYS*apG9(`CQChNbv9HRepxqp6?A;4klFOHPA8S391$um&P zk6J54)j-UHGuZE>I9S8ZxmS??qVF*HukY~l`|RyOv9+cA?7f7ati)IP)(!Y;&M$OY zn0W2|`91d~u&q<9P_F*w&HC{QGk)079?XZk=+-(yR@y?94QAglkdKJ^g}3R^oPK+M z1Lwnj4Fex7nt8$1mjw2K4Z_r@j`j5D+R$76 zsRR0P-`8!u|F|y1zD;J#3b*n09>EhYy6)&S%_;U#6y3pELv<%~!80{MyU`)%HZ}Ev zwZ0j+L#~cVW0bP{=n6Z4R}5D3@wBn+L_+{9C1j#ZhpKIa{%76ea(sljXNBkkv*55E zx4yn6X-UcV51SB(E%lbYo$)I_z5COz+BP@lLu_Vxb+eZnwut8rru|L43w)B|A3pj1 z8A%oi36t9Q2hC5SUkiu2&3MSf4h|2SfddzTzK>d?1>umb!W&Mny@E;M?Kh8}BZ6=B zCEpKkYg?JvfOFwx;3GoS4R{0#{Z7EpFvu%icLQ9Y6N0k5^ebTj=Ng|a1?dY0t}Qk3 z#zY9i6LVww>_yukv?23tAwH~`te!rrJ{r1&Eu-t~KC?kV`YGY^B0qnwM)9b#@mjvG zj!QjZf;x5p!CE&(y#>&~waFq;oi4IH#g1`);Zjv^7T7QHTVj6s@(a4Ik9sLz@i-Ok zjkts$M7_aZhSzT9wp0KND^*J9h^XLETyS0cWHEdTSl5Px8`l|PKtWmm?O+}xNP!dc zU1eRpy=|tGxoO)lGW)Cd>)=es?tzV)ohXVLp!iyYRO4cSEOyb&uVSY3f(B6te*?LP z0WzBVqzoOO-WBO%%rI4Ky6yjoUjPl%XD-aAxvZJ8m#+#ZKUMgYNKjgb~;S-+cimHv?pK ze`fNsc>Uq0AJ*VMuRtM`(kuP!S>;dcA$Cx#ZNK=6+1VQ`fSuil@-~1)N)m)xqF#Zp zN0JljmOWDSCK4nCcdB9@UGm$ zt>`n!@Gg&m<}fEPs{+;k>uYLNTn?yxL5(|8F_^)_qi?B;mH`xXdv1 zFc5ot7qN!VZK+l`lb$^rYFM?t66S z5b*7gMf;|uizX7YzjeZ7(N_TCRbY8|wMX+(WvSTL%&qIDGu$mJI2-VU_WUNx0lUO%$me2#tdW{Ssp zZGv9RKsyFWI9cxB#aLx@erEQa3l>Mzzn)YQ=A{>?4g_d=&Z_Jjj=#Ti1g7ffeW=O* zEDz)ApYH22B{BeaE%lkK6L%KHHd(3umLsln!mZCg7z_BtZ!__t+FGlKQZ@LGj|!XW zyU2<5(r&3z4BLhvme;gP=hZ;r1i8XrqoLI?k_O0deQxk#T$Y& zP=V0R=U_X|*z|2{p~}wSd09)Ph4Rfvc|-|r80_g;$z8In2Tr@0c zKu3HCRwQULPd$Js@yOESVS9|MPPO%5_mte&I`Q}2q1t)?m4@70OeCmk*2ZoC26VPw zf0x4q3>olRpg0v-*Ym*$m0N32La1JCv(4esAo#m4O@6lN^r{Jz6F4^^T=-`3wHA~O zqmUa%v33=A@hOyM(SzsLApY3|8kb7zA2IL~REdK70)bRD@xB!q?8J?LC8WttR6xu9U z%Kpt4I}J_ZiCFTI?%=q^Z#y4TPxt@ogo+02-WZ|~yuA&qH+9~Hl5U-N_vb$kWl@ce z?qJdELoTm{GClBgX#C5fX-Vw)ZHTI&?Cgd?)#{hVVAtV>fJYJtmPQrkvC^Fdt8^O}dBpnL`0aWT^ZX%bL(2DiZ(7HseDB`lNmtwMOXJD>}hw2 zi$8y2yX$i0*ZKs}Zg&qQcl|*Fl$s0(io9yphgLi?yZ1CWNdL)`syPn*FJ-vx=^}2W?OCaZx#a<0~HCQa3=(1wkwOJVS_y~6Amu!&1ISi}U&DEYAWp>~NNz`t0HynAMokcRS(9m=+k*~-9 zye_wljy{l$bsO7u4VR|&8jc8OspA(t&h^XKf)gC<&mJ91>dee@gbLs7?Pv>yosC%3 z)&i3yYHK0R^x9x)suosJYr{3|<)whz#>-IM>>v>H?gv`f=!7~?7YIuubB@%f1(Q|H>6R`Io@X)P)@rYRj~zq@2ML9bpKNY%E_ ze@=8_s#t6H@tHKz;c-x+_1o^nM4NGc)VRq3=K|2Re2$fjD~j*E?+f%y6+O15q!i>W zayjlh@*l+ovoYg6>#7JyWd4vwaYWbzdF&*Vl!_KBTBY>vJ_b9+G#zN5{E{ar1sV&= zC<2mcNnzT!O64s!IQaYGa}k(hS7BCUtOE2VCkgKyX+pv$V8BU%@`nfwHM)M!#lauc zosS=5Ty(m|7Y&Gl$(NT=UEjXhv-p8|pRAJ7JW50X1QrOrxCK#>bI`dm!6*YisjQ2* zB?WV^Rf5k|O2O|>l%py(ao0_dtC;&>5|HVMqt^@&x89qFiZKJPf_%YhviLhJBy7cw zsw>zqSXTvc^iUhqCBj9aX@Fb87li>1k;fABNlH>KYbSZTFw` zRh*yt^jQggD_`CqJI4tp1GCKBNK(D(4F%(xklk&k15d85te7%o1wQDkt(IGU`5~sp z?lsV;=Q!egCaa6VgRZ{YrWc@W1gG-TF8G3cWO3?Zx6&M~`Uyp>ewKFabS;zbW&QT; z!|v+qyHhypak~#Q)X!E}1ynHGKG51}1{jMWO6#kUN>cqj20?5b&Z4(D<(u z6#i+nOAgZ4Y8IAb;Fp&`s17?lLhTk$r7qx9)y@6jfq{&bajw@O>xK)apR8=6!UaEt z4B*{fIKjSjb_QePpHw;e4-LhH`Dik8a<(E6%Et|mbV|WL(l4n6H^;wq5Cc|1_V!mm zb`ZPU5%D)nLlivS?BU}I345DcEV+Q!m2*=Ui}*}NB1^%`4IYm8qq=-MU#=!Q`ZzM% zAon_QCbQv0P*n6+3qE^1nzwgYXr!&UN9}@GSvFP22RNihFte6d*i1Ix6xbAP0j^Ti zc5T_eX=o8#7bK6c^2nKo6q3lC+%4X+z!aV-j_5@*xn8{S3E%?}TAm?lJ*CT0X(|4*N$mserd{g<)&Z_Pe(T48U!Q zMFyj=@MgHJGh&_I0kzw#f8D4rmHrn09s?tz{{yF(N>S^HcYUKpmy^WKIa7se)8g2c zh)GDqpONxflD3o?PvRfzmcJmotF0Ll_A)UMO}*GN1MU_Yscz?8UfxGcloh#U*lU;nj6xve++_qk+HkW>x|0FF42nUeH=64BMWD(-P3RT{`7DTKOs%zT`??1 z0+jT-le(tNbN6zk6?xy6K#Jwb8WA|K_sSX7d6fh}ARtNNk85pQRo2+8N<5!4m65c22Ls9r379TqdPI3#+3!A9W82fbE?z(=}eUZ&<;QsZH7;QkE}&#PeG0fxks{-AxSwT?|pd=GkOl-3O*46d56X_U+XhrF~B z39F`?GncWkEs=Ni8xm0uZ}?RbShwwXoDEk{Hr*Zz5&To@kgj-E^AnafH~@i+%^1|i zylS6+>tMWK#KNMI5!2Sz_Q|ZDO3-ax!NGwGIDPX5=SK;Keq{MYH2|hmB7i~Ue?-1q z_hNJI3(yuJ3+08Pvwo9q+|SGSw_X$o8Ga2CTxmVrUc%p)_1X}@#l>A7Eg}b${wFZg zfY=xWN9X`ojdGVFkCn|}0_w3Qw^IGa&8;oN(GO~%79WIPUFtIYBuLM`Jo9fs_^5AL|8XnH`t~ZfuA+L%vTGn^^9~jO{<8t)RIHNV$sLr`w*WKYMRWerqDWrA58c+M{OALqa0PwmIwegTExb zDf^Osl%AcGbP&@_wD>D@D&k%-fY|gfr~I8a67cxTbm#R)b{Q>6$;%x2&-QnxoGiVJ zl6w!g=QgOj2C|f&YJX^oia;tJ?=^OHKV3WB8CE7GdmR(^s=7GCfXB$l)7&JR`bWa( zb3!ll@j!M$AjZ4oE-g>89g(z*7TGVQ(LoGa^ucisl1}LO*5IJtx9*q0)ajWIr~?8F zb(^l%%uEcYw5~`fMY8fwA}!~Pe4Dnn{6&4Fe>y8?K1w_K&Ax|d@-gU$^l7)hhJ{^C z%U4}97Tgh0|Mwf6UX>`wr#C>3H&IoZ{~j|tTkuAcRkLr7Rs~qK#7kQ&C7Y9v>@W2T zVOsML4n4Th`Fn3N7~N9m)vLL+$u}q7yNT$!JPus<8V@)o2yk%+x$Q8wwn{CH4S(N| zrH?rm{crZPTU;C;?}`hn=i*XUr`zRY;;AsT!Ne9MZVeAhCZR|Xe~6wcdbj)bMK^(MbPoOu`eToObb{|OSOTq!V@)TgN(NV1hB z2yh%^mwkOdgk1d{(jj55-zXTjwUEIbG8_5MNloH>Z?YG}UNkfh@iQxah+=f#zgf>m zTxTwJ!IFv!3L@8ypAvCgyoa20yJzjT_>E?wX2bkLP)R~DIj1XU^QHHBzTZ`qMRIbp zFM%=y#7mLZ5)_gL`A8WfAv1K_e02RcFXX~B?p@5CrD^?7_HpME~8 zspnSVXO?Y5zgPd!@X>D7fH*B3CI6%7=+XU753zs%X&e#3I$OyF7S;5jHY=J$5F12^ z%@9O;7W*>N$@xyvzElTvLpkwkg8?4ed(3nYA{92YW{C<~5G+8h8QF53FxfaZOtB?I+og`yf zMI+}ZAX$u}6#5WXtXo^&T|FHa>flVa)(erL2r2q8`DKs~x*V~~9gEn{iMM`E{sN;r zIyCBna{|BpPIBr5#G%lKhRXe!tcd~>^E&oxbNIt~jUOASgx&8!rsYUvf?s>a-mbCB z;a`)J@4EZyoh!rn_kZdVQc!fhx#>4LLrzLMl7!i0G0bQ)%cPV#2S$_gEBP6GBdApj zEzvjn3mD)W37zkR!WWEv)XDOIDJz&A`GsOFYDNAJy4l2b-BGj*B;1L{~KW82aVhToX)8 zO)xs+8X4|sf4PR}fv*SmjH|S3eH-6EyAAZogX80$8+Kgpw2IYn@sI~cN5q7L1-n%r zKl<0NWB8pv|Klq3^QSrn#z^ho?C+LUPt{F35s1qMvv-O=R#u`F-A_!tT|ZW{Y0u{B zh0brw+hXKUX}Tqcm)7;NCHBH{VTeG@A6(fG;39B+H^8;Y=Tnv!jh-|GOQM%~wl( zty3ACQOm*CR~O=Sv=afsC2kQC9C>gfYt@kN9dni zF`_pGK|=iWYbSMcyPYoyD4qI#{`mo7#DgRK7c&iF(eZqNbW*58TF6n;$L@pKZD7cA^6&I9|=Ce$! zxZ0IhOqcrluOh*vg=6evl1!2M!|PpZUy=(buA3;Zk&_$u75)a2|X-&aSef%~L1N9%K3z4Y}}qe7bC1TW5MN&N&NnR;dw z8~qOS`#I9Pql;@Wdth74DxeDqPtl~Ubu#ie@kB>UfnQuRV-`H_7+Ju*?Ws?ib4|x} zhPv+0xwEn&%UDEM_in%Nzh1?o}$`#E&0)04yf(2j@MCRizZZ z2voccEctGAcScZj0^@uIQJT@y58^b)K4Sq321hxJ%W4OdJf?5t59>Gj#)f|Ef>Yg7 zFQ3&Bxv+3bCkqv}>|)Xe7E2VBi|jJ3mM&<=&mCEYqW~qmhF0&2be@!{xPphbusoaUv#I zne7v&zI@5jHrSaYC0#Tu)7;!A80dbgN`BAuyZK|blH}AigZlVKAmXnDf}5zQC_D%3 zFbGLsxU9t9;l?|VJ7u$9A`}Q^&EdCuQWeDU71zm$a%K4|77kuuPl6f~+V|)Iw%C?0 zjXTAD8S&MLi8o%MUs}Ip$&`h+!?G9<@awinvRu6@Xz-*H= zUl%{{uvy&y;4}*b0^r=aAOx}IrV5m$Wj*o&sy%yo1px^;c^L3BEmtSo+FxZei!$T3 zwH*+XlXu53RIolBDsJn*c3K^AH8Os51&>Wq|<&r5Xm z2tC%-Wd=&Jw9509A+77kf=S=gU0M*MM1_RoF~EH)E8R59U&QZ;3LW1ICa@dYW9x=H zR+R%)-w`=M1JXl>KjZ4~BNldH)PiDVSm=Sf{Ury7EMCiJPq(H=Hr!7R)SHfN88k|6 z4|IU3TG~g0=7BpOE@=W8f4+(S4y+DExSvj|XGBunEG!9QaFqET?+w~2XiX(Vui?q{%{lPdiVgZyolt$8mfl^|lh>mrJcqJ>5MlUX?er^KpsveM#` zxTdDS=`lfpa|%Qi-aw(Y^@{l9789NjFo?gAuaJZxuGKyj6U(Ic%gM}jW5#BDBkX!l znZ`$(BhV%F=JvwAv(9-%0D1VccH`oX z7mxQQ5bQtqTjUy>9t!kL zst@I;pT6@hd_{d7w2wWsbfYXR z*#9+z21$_}vbSWfY*|UNDWmK?iX1{@XJxNshis0Wy~*BtXYc*HPCd`_`u_gt(MBO1u67OAk*(Ldny(f$jG{*&?EJ&%E9u$c6?)007M^;ZuHEpem*dA^&W zUfSgY$;sA%_rfPD@}IV}B+71@eK+Q0RsBWFh9sqzQc`jZ=jQ{9+geH1Vkm$^&(mp7 zpTupn=@!;)`3?0_T`d{Im(l+UE?EDPz9QYFMK=I^g>DfQLj;Tfu)@ZH-tC|H13e>S ztp#geG31eb1HWcyCP79GKLkktVXK3=#I5j8_?iAz5qZKA4G;Me0>IHRo1C7Wi$>0B zmstp56DPaW81`=O05~r#X9rn|-f+9yGyZe@a6g=pz{F3~O<7Ty4x41C zrTU^$o)IrB>@bEUe_@{Y+?|*-`{{UixOUmMsuGPPC8|B!MUKTabiK^5ly3qI*C`pF z_ne)Qi1MZ%ksX`YL`Ji;dXiWa@mc7sT=r|&8sFXtLdBhZtAXOIboWye`G%CucF9Oz zH20+36o7dnC)b(lSNA5d{fxu|9YHzhVc?*_ z&gR#zPaCSA2Lr7HC19)35(=^Prl8zL=~!G2>g!uZ%9II~g5-hXraV;csCgG10`957 zF9@}Xz8h)e=H(3z7d#t&z6$xT>-50hi`U`L{oKmb34c@o2LOuw%P7=FSNJcxA~pEy z*T%|&{b>L_^agX{fX#^M25-J^1$_G3smJ+Ym6XM3G+IoG29X^jZ_P&vANTd7B~`;1 z%X0P}(!xx&Xr4FjVGUj!daqXP83OG(yYLUhEghznIt}vO#U^=2(&aQa1(2TwRq%aImo{goMc4AO%ZxmmZbE zNYStCBaT{s0xfM%LX@C4r6w=d9B5yuufoHpxoWk{SW_zwk236&3wG`oyyw=8UwR_h z%r2z-0_zOFdQ>}K7*t@2&tng+m}q`ms}b1=_?AE95QSHK?15 zvM=i|)J1K!q*U~+V0b!X&uqy9+m*qCB%1$UymQV9#OxUz)+HpcSFAqI%zTs)_dL03 zn^*bHNWVn&2hoe9y8lUaz?e&4lOk$#Eqp^N%%}Lq^$OYlvUdIU!omRO4cyQqHlYGO z>*=X&|Junhb`BnvwlJAWKy61@cU+K?d|-e&m|)CqUlcel^eDYBCP(Dc#&J?Ga(?-F z?a9@~pO^_Z9$<42i9eCxs#Thu^5^jAA+(QG=(B#q*=SBuXc+cWA^_8uiRD4!XS&yu zqL^QPdNMozjuV_D56{e5$$2P`^hh3Cj1^jTTAetVK&n_}BG)(0cW+bLeVp2s5I{wD z2PNVsvFZpU0M8oLsEN1eT$F=Q(+K zA7M=-Dk{3Ux0m+)`{zJXY6*L7?ORn<`x&a+RT6%`%K$G)H*u1sUaM)D!eJRdxBAm+S~OK5F5BOufg=I#hM$4FriuG) zl{fjy(;v)~c4fl4E=95B8}UEpA|#efVs|v9<>cm)gE#=yEgx$ozk5~oYenM*f;$4T zJb+jvm(mVGwus5|eFPEF3M423cZ4JT$B(&^Y8MfeHHX+UjO~mO~6d0n+;@}f$ z7})*y_)o8nO24>Uqb_vT2iaQ`FH{%tNVIBEJCRA@*tJn%Q=1zHO0kXl`ezwG1fEJu zQ`6wtExnreW5vhAo9%MmsDzYg9N)J6@{OuQ9$8k+eU7seZ~eT7v$MAGV0}3^e82R% z>*KL9Th#blRP-3s|77~TAsuS(#vzwQRE`uM9$ z4PRL=q>prda~`b1Fsd*=_8QvAip^g)#=s>sb4Wox3TS-P*O3f zumt?|4zPVSHZpo9zJv;_-4_OXdB{L|1d}Wo;_x+Wt2|0dxM4$O&zKA0E7q+Cz*Y^6 zu|Q(|^s53>pC3F)R}9{~G4WhFKfgq_>`etE0)zE2VH3SipFROPU45U|<{>Qq8FQAJ zKsDm+(1OE;sMvLwhg3(T!jf5)op`j7y4nV@?9m%=&&q% zk;z)E+_i=6=H90y5=%BNO&Q86Dz~*YI@>Mt(_L&aSrG|!s+H8ZPF*$c41KiA6l|4$ z8oWmK7!)Q(@)_&5-8KMbq~YAiv9B{CnAj(7l{OG z?iVi+F+E!XUue&+e^9|B5xbKlWnX+CRV5QjuC_apr;*}fV_{6F<6P+{v1T<+vYnq5 z6?H>KE;hTqpK=pbxW)Ll8we5}S;X!llb9*3D$kpbxXsi$=2}X&>u^TFW}ArG72r^i zHAAEY4}`d3Vq%&V;5o@2X=*s^HwTk|bo419j-qe3CZAN`Vrt^lT^eQ8m$^C}*{~2> zS6I?@*~7x4k+yW7+j(68<_eaC4+AbuaSdifv@8-s+ zR$_4v@*`i`J-BzTzrN9dQsgn|gn{n^Kzb;|yx2_o()~KK7hfXS?fY0}@@bf{OFo;+-M$Y(^$Nfs4Bk}w|6ZXWDL#L z`;g!5t@iYsZY?AV&7eYS3bJf4Kt@$M9~7&jWe<{jTzb=i33vncn_WdD0Ax?Bh3w-@E@v-<;~?&rQ*n8X3nDWVilibDB@ZfB(y;p78_f70DwS$@ z#((`fpcl6%Z)?#vpP!$PmW`>cEww<}#@~7{+mw?3{(V!pnv;{0U)kOv||Yh3dY?CT%ebii{eNb7hmdtjx|%@1Bt-9FHqHVLMm?Ex+QAIavL*R;$JDy zVxYD2GZfNq^rvRY*^ub(wPmc1{E6JHj%Hp-(oAuCWbB z8L=VauXWLp6k4ti{49jFd=s_eCvz7)EjUMPd9F`UQ97_$>y5^B$0Rd%4w{Utc&G^?3t5VWIHQEYZv8rBrF2&#l4M~9bFc6VZy!aU|rDr^h0x3 z^&#?KP1v$_cx;)o_H}!yEIDhnt=V2b>$Lzx!hO-dtoL2NWMBk+{_*4I!wa$9h9u~l zd3kI-S48z6uk+}(6-r!PcRFWZqZA!n{l70wkBf}vB0+@Um3QYDvJO~-BzzQSyLg*gy#>FJnBcD+eHIDe`q+Nn1%Wt+%vwCsaUXElGBIr#T2=_Oa0WM>>M1mTG~&+ zo#m~PwzljGYwB3f!z|MzFuM*_3vbLO*mW{lR33{wRX=;&V&rMxUTX)V__VYI%Pf?8bt}#ylR< zbQ*Kh+C4@f_DxwIJ&J?8(v&};pO!$=t+&wb{0Ws@(2h%V8+BY6NDm}m^j5?5f(yJllN4){;o8-RyU{00q z?0e{ZmV4^bTbKu{w_6oNaGm!*wA6eIj%69b5D}~6ojI0nduh*RqTQhhM}t3=ANkXH zWKAQW7R?*yEiSQXy@9*^>V$HmAiZ&F;~76)I!VEMY-n?=ttEqY+g`b0lU5uq#N3ON zvpTlJuXOh2WJdhF7K-)q$01Hi%JAL0f1b78BpYkdpWUvx()(^lewimZd6k}NERCcf ztnEAI_L{{qPN5$jaya&TX+Lp*)w&kT+fI^K>tm>#ZeIyM9fSQpTTg{YR!6?%R(g5$ za&pBt8eF#AC}@x4zXwOpG-sJ57S$NMLxUjB_}N}X;iSC0U`QvIKZUjhwh~5qib6*Z zp@BkCX=o`ZJ{tF?GP1itTb0t8Do=b*Y3JwbIy+lhNc*zr;|RRN-6VttY{tR{{g9Vi zc_pK1isWe=x`-p{+{*oEnp}O|=+)l6LEViPl54Nx`vFaySr=R1RZk z@J$~)%QSfZ;87Y0f!)?1WP?mv7SwQWHRaZ{4fr8rllmZMgz@yRPg)RJe|Y!~P{S15 zIZLRk!>hk~;jqPF%eN&`KYaL#ix!k)?IF~%EHdX1t}G`%6S%Zw1hJK$=pdDt4igs% zsSiG~)S`oRdQn|VJ^DbJN_b1`@DY_2{;EcW%(SaVLK{EHGG55@ESMLZ@;tH7)vw|= z@E^Hxa-++xU73-=MaI{ZW&g5$Y<@3^oA&f&!TTLai_+J2j7Ot1qK*BiONN*nX9op(?`XciwvEyTUw@pEGzk#m5FG@N%+)S>lH|uCjHOayzM92)|=C z5OZ94(Ccq|!1}+AiH%6nc0OENt>T?fD2;q$S62|ow*bM)_`%flrl6<08%@N{?ky;9 zpqnkByonK}CMM?b+$HZV?ti%eG_X$vXG!q)A^euiZ(2VG*4MA+Tknk_PDq~~EiH9M zSGBOi4GD}qDe0QgP>vE)5)k7O9NZI)+;*(oAMuUXET4X8b%#dYi)yk?={ttEP_4tG zCr9SqFp2Wv-wjfx_-8Ps+x4;QAx{N1a3bhZ(yhTL^o zuR0-1n^g&oKPM}ABh%Z6{cJAp(}V3-@Mp2FU$#>8oER%Y*)nf#*10|>W9ZY**K4rpOb|{py8-8t)qASHZL$90G1r}Y z=vH5gObLGH>fSFZqGgYIz-W4Fbs(j{W?mBt0%0iDHJtT!r2R5c@Oo>w<<`-nAE%+H zD1$nZGaSNAp`tCoJjyr^23*cr0eHltVZw<34_?_{FhhxHR zRtH&=zRx}Iz;IlElu)}-(^as-KpNk;S?Jef$Zn+;c^AW&e)1=qu~WE)6&aaDZZ3f- z4lc45t*58fw{+M{0Y0uwlHOcI|0f8eO5#=Uqb3~Q8ZmIkAdem5>{$3QdU;79&i}&+ zB+kd5;)b^PfvK-&Y-|TC^>7%D269{?%52kKaX{NGjP^DoyJN9OYQurQn&~jm-?Pki zLn-H0!TZ48qhhs?jGRvW(cNg>YgUD(<{ zJMG671%4I;Wx!MWp~X9?Pia?lD9FqlH8pjOk}Bm?HX`*~)wRxqNx#}>A6u?o6U+E} z!t?&8ANKOPwz9HvpMRf5UI6L}fH6Gbxmj6taNjpu4Ii#}j|b9DD35IRE1YR(CJ&R! zRI^;dR~s4{*kOs#QH3LX>IR5^PW8DHm{TqF(spK4X~;2^r)BA*iXj@Pk5%-XX11th z2^c38OI28o8;HjS|RvBG1UmqM~2622UbXaBqxptzh4x06)K`^*4-V zK8U?Z&CK+LcLW7+GzAB8Ru(-_hwO5M5f1J#gaH6cz;C@TT=r8k-Kn1brAxnK9eHyI zLi2_bE3}ST{F<)pw8^N2OEl+GobLIN2yL)?_6)1nA2u?cli838(%R|jo(P;LJ}Ac& zWV`*V&hg8aZZ2G>Czk|{40<`)jT@ua*^53E!&p~YRdu#coKxQU-jLn=9NHNEKq*^& zYkKjec(u)1Qe0$~e$O3IPnO$S6PULkm}e8y94`syo8!h479WSv8&XP#4fU6=Bjz#?rv&lCf)^%JYE&c~9DbMv4wZi|ujuv5R zpQ{unPH|38zlKdL?!A5)pC~zPaQ+PFF?#s0z8Pt6iqcf}%R73}C=)d1#8AszK z74IV0^D-I2Qfv&*y!7SHZWK+7-mG@I(spudxusfzLng}oh81l z?g{&ZIKJUFEvBTT&Gtw8DKGnFf3WB<`S{_0=IrA93R-isT5DfM@1?g-if0`(#i#Py z93&e>@8G>P9SQXHT?pi-VN_UJiOt752JaNOyXnTn!EZ?sB=IKIR(Edp6c+1c%c;7d z@l{^{r#Ia%XRLY2AK12dc~@eoWWtFN?eSxk4`+LlK|D$29Qc0ty!=VvBjwlN*DJ_z z4Rr6%@FEsfGEHy~@SsqmdOQGV%RBQXY@-s)=ZMpl?gx$EMb84cS{ zIr_yww2?`2Sl7r)C4zUFu$EzSGr?Kx2>*7-Jpv#VhelJ@G*w&<1ZAwJ)3 z)$Dw$mA;_XQpXK4$m$YOQE3u@xrO+~UXjr2Uu+eXT?~sg2HQ!htXH;+s8Dd_e8AtH zjV!sUDt=^y2rd5I45S)<-v|f@@TDtHP4xnU!ZaiXHVG=d4RC(fxi;2nw1@2Gw(C9M zCzii0__$yFN46?B9^zYpu{(*|ipfcA$Utlp*k#4)K`IW020>DmZ8?LeWi~1FXD|_@ z*{pL|P6(t$YPgx@se!qF(KeT9{b$@4D#Nj@Md5{o5zB*$9N$0e55K)6t*Dr$TaCDj zkIxr3se9o>f^yGdBo+`cEfT?Axsv+YHS89mdRh^YdJK4XRWI2xf6ik(CPVG7x+pWFamU1Vljnaxd zp?H~Y%wAL#vh4>y{k?&3i(Wy^lcGDnhSadht2kY{@qA0X1Tb{8o0RBs&Z8u?bM&RM zm&)^$kQ8C0?frq>PS^{9GuG;!@d-F-T_s})1L8}MADiQ8a(mOpt&ggDBFs@>)><31 zXKj?5y=kK?XpT~zIgN3vC``}2?Y|RjGTyN#7T(qY&I6tyw}b?8A)%^RKKl>|wt1b` zzIc8@-dB$@5{I<_m;poaG1UXvhEi*bD`^j&Z~2Jj&q>T>tcJ>p@5DkLPc$JMl=1j$ z+ow;ERW*`tGuii_cZukD+}$%^vN@lIVbH0aEMprbvX``G&rxt*mz{v zDj0nn!)-a|MJ#zG9xsWTi_7ZJic3|ihujU^1t5)05%?C?4fpnq74h3XKY}fW>3T5BvJsh>CvaCK)ZcsOe4$VfE#ww0pd*_ThNh2G-|40CL-n<1Z*Z zUZFsP)m<2jGk=?}sQ)xy>2clF$0k^++V`HgoYDI?K9!@n&sRts!&QkBo1)3B%kpPN8^<_JXm`^{&w8@czAVqhHH#hzlCM8sg- zeZ}#_c$uQ=XhAH1>Rp16q_6M3v$!Wq$xbJKSH5vC#?!!HDrY^8+Ns*Oura9A=}Kon z3A`dB^GIOkGK*i0;dIFemLOd^z+tDSzDGL=Z|P^8L$OeReGukPF|oDFo9T3F<@?o4 znqO1PiiMBnn30Y+H3sh3qzqAPuS-X7Tw0pmzyUjPb=z1dOJJ-bCr1OJ&lIh^As6QV z>0HTBBS{m4NTy`AHkMlN`|S1i_g5URFe(_L+<$Cl1N39YI?`5(2diCOQTeyn!6nL)Sb}tG$IOjPOl{I$yrfm$pjDsl{`uY5ZcSS@SQMe;7#*`F{1Hz<;y%2& z6S__bQc<=jIS|SkYO>7E&v$@=V!1ynV)Ur@_wO)=kPx!Br-zeh4oUXV6v30Lif_WP zfotI(THdiHlnxS!UNcs$(l5=;(xBgmE!ziZdw|BAaA~N}Sh?T^Lus3~<9LS{&Y8k+ z@vvE}ptBd~@=Q!kp%(&!GJ2OSPB_P(k3cXZAVUr|ZU=Lh(f;1m{@WMP+9`gcrE^5D zgsQ^-@#Fr{UZ6P?`+4K%N=nbwi}(wX9bZY>4RMdh8`SLz8yM|JXFL&QzTMRq2u3PN ze>12y;=q^C*tj8;Kv2p_X-DYT>4SQ5_k=r1mtbNis|}@`FNW8!yd^k|M8AD^ggB$i;LqfMOym3v$4R2OH5uL)E(F&2H_e(o$-x z;0Ykj?bEQ&7$}qm7d8PU6MP@xn9;XwW?o22NZ6d8q63ptUT=oPP}jwU6e>(>F-+xj z(#UcLvouh;{r=5Cy$|EPZLfUt@o57Q;b?2V`eb5)#dL=<+`&X=FH;aDubu%^z+n02!#Z`8n)@ACcYx5^KN>sgNTH$Z*B2*y-lc0`&>QG zg|yqMqNBBwdW}q$u7p`uEppem6Knh)hV9WCrUx}Hw7dIvk|rHSr7vIcd;Dv)e1j~T zkeEkyu`>Vwq(4KB0N~#tXJr=o>2ktQBC$kGjS+4e6LD~5w8Yh`wQ!se>wv)HD7{bc+)@({7RYXSW}H)J;^D)a^Sz3b76iD*GYuJ6F(OQD+WZt>yqMc;rgGHFd-%ve zT9pE|clkF`1x7~`F)%Wg9W89RJ?!Kn3h?yug3I7zP=y0ih%Kkcix-?&SXc^rIz?)Z zy{Q2&Uc6w_Zzos^#aY%3>-A- zeeaPwb5^&{wKy_ZlGh+Qph(AnNbH%eE{dItvLq;q%N{-e+gmi$T!Q)M zU&Df>e%Gn)7WZu;qRe6NN_rs~6u-hAybY)pA%tD|8SbV^mH~pkNLy)0$5PB6o7FJO z(NV;#n3kED?^o5Yfm_6n{6k7P7`%gijf+*3JT6YcKX+AODSrTh(uB_1-gqo6k+#P! z!RcPrS4>Lrs{h$Ps-kfA;qFF~G~bTX4FH zxfdU|boD6Lm;e_Ud+`fh=F5Z@IZFzr_Bd^f{GFz9Ckp{;QAc~N-7ihAAbM0m*1Apj z9VGYZ()N^s7bA~+5;A$$(^J~I=-t>G)2cN$ zv~uG2(x0_=vk_NjmI8BfsQ5D@!iOi#cznCd?L8vNIw|d7B0b9fEGObN_Y2$Mbp>tV z1E=-TCr>&r+kVjlO*KC(hV4d8{4ljyFUo8~mb5zQ4{DV>5i5Q47FF*no;Svwt{A>+ zYwOClU%duw=T>)ge6n{Bl$4vS&4eyKkaAB7Oz2-WvrkAon*TUI3tUQj$W&khKldP? z?!86{A#Okbl*N|<^(p>!`~M~-B{ek>tDoVkIjhM$z%nRn_s|-%vf0#npgd zzgc?C!-v+&Zt`pWxu9D?SOob1=9kI$v?(%wwC3$}Mj6~3+J*JRacFx=TCOG~ais`P zx|GCLRBSvp9BX04>P!*RdT&VEfOQu2_D=XI0zq(>)(#*Wo3VnoK?kL1n(LuRT_vSw zI*9v#IYVC&4*FJS0l@wDOEJf-wdQQ8{JIU_u5c8lNYg$Jrd&i$2QBOg*9s2)M;OpybzQ zYGM-G+L8xbm2o~N_=~SYSJkF1JxHZ9!@<^)6|qCy;!^>3Ke7CdFzsG1HXHsHTPJe# z_-2Hpr`F4tjR3odf*D85v11$cJz>?CFYgc%Vu_fW--7Ex*yj)l4@Kn!OijI_ep963 z%0cn&*_V%DVPOtXVe{@--_t(=Qv)>r*Jgz#?LWTvO9ta0Dv)hwKWin8ys5~dkx<^EW_9xHFt0vW< zBHSS})BovcK)^O9od+dDZq|B1djL0?|f-Qw`yfo6t=-oZCqH0dCNb? z^-P1og^_CtKWA=Z(9%D|b)lUW?L_UJ-c1Ol@A}W6BDxdUe8yw_YtKPcblpm(K5OyW zdM2Keh@18g<{KgX>_;gQrt3>4J&vYp>7V8}Y<^VfWQJ;@?OLdNT3D4@zqrv$DzP(; zd?G43YO&kbIccI{b17n}t0k1VWX%_|BKyes;Cx(h#S>fAX641|S{aq7@oj2u2b3WJfcg|W?hG!nifkB*Wl+YQ% z#5Bd&hTQd(J(PA5tLFU7nUL+(gGt26EkLCOANX{4#nMlu#x#~ui$Gzw2C+Yw#X)?N*Js>YF|na7_2KcVT)=FZ2Ie{)&mdle_ov6%Z~6_Ix`EAfoY$*2W@(TxOF9 zGrMee>2){BL36Mmdkpz@B-+VRPi5=SO_Cvxii*lsd(*s!y?OfgVEYGSq|-hpWUU_9 ztY(V|(1-^4UVqb{X$a#737^C6>{yu=^~E=d3(+bTFPx3Qma7vJzf1qN4gV^mJ}hg| zbajQ{ zVoaVbKl(eyqW`(jdt~^Zb1e-GIRk@8nrodF3mx*ctr=sr454$L6OY*9VGY6%9=}>9 zU@u8}<3_JStxXe_c9-D^2%}Lxk*&OZy1?F$pR7_X94ZF%)aeL%)OLTuP8=?i-@hjw zux|yw+%DhnoFGwGcP^Xp{n$YOjlG@f31#x4!g?T{lj)J4pC2fzEc0-(1D=>(OhS{B z@IO?Ea(BO0WpD@9estgF2F7~l^K+0tvPk<=yxrL1BE@AXcfGD;S-5_W7T%i(j8UX8Uf|3SKH^bWu8x>53a8#dTUes?#q0J1myQ;{Lr)Qym_C?0FZ> znEU5fl9;-d%ib44x)}9_-6z0kjZVuWcfSxA|h141x=|ieqL>_0mx8qTGtfNUZ^RixoRHc zA{mcjR-xwe0t%B>Z)+Pwhv0;*(xr<7SLHDqQA=jmHkK{Ra%R!$$ULP3Sb33vUkyan z*~@w&@)jk#lC=L3PyVq#ysE1S{0P$YxM+C^uYU~-n_66yLLh`-kDFFl7}nkW3>Y+$ zkXxRok=@td9~>Uu5Xr8u(XOmxaq;*u?8>k#Z&mWGH-i3jeHj<`H=-$$(Y$rNX9eS$ zM|CCXk))!w>VA#U@?qupi=$6oPZPd=3GBU5ew%cPiEC5|d?+NIhZJ5O@W7c!)xry$ zU|OFWT}R^8cTAN4EQXC{V3ajzjyvC^p_I5gCwy~^Tn+PofrQIJ zN;*2774KzyG0(t*vsK8iK~za8m{MfV0?DrfX%%RoxA>Nxo<3a6$`g&9XfHgNm8F_i zq18oNDYvJ+k^pp)^yVW48Pd@4-aWm1DkNi>VJ#GkN`;I+B!hAmgnM}dk2|t@Y~?I1 zA$15$JN#{SSgC|Rz+PZ*ZNl4n)*=i|T;>QC?fqOAZRy70P^&CFOlU|GM07J!!zs00m7 zD*c=9-!88sSCy_`fACN|nxi*YH|UL4A=P7+RxaYhL(g=rt~&b_-odTCwM1(wNB?2% zt~G_Fy**q7mR0yK(ScnH);KTz-MLA#^$`usn|~5{k_HE5ca$nBPJH4oa_`ksi^=pS`$D7V&m{Rj^o9RO#`Y#f{Oni}xH-;D!TSwzUr;%FE8Se|a+`Wyv? z_3!)dHh&wff8ZR%xD7nn+WEkLTYy@)Bo^15wCn{fvjh3_21xo*$nqYrQdmo#avOW& zj9QM&@$Re?-RNi6)h)NGteOy{-CZym$E{#JI$|#Af$2*JA*E$M<3Q^w>r#53c60ys ztJS@%G9gq0#hgafvG?TvgPRk`4GftL7uuJZbbi>oU4sw-^PA)d`IwQ3sxu5PY|`~G z90(ANvn}eAYT_d(m|O2l3Hkb8E3>OR`2!k*=T!F%Zv_~=jEl{$E#eZ z%|F*Z;LU8)J8YI-RC|@EU20KKwg@HDgkb$MW^?m9(oI_%QOB|M!CYbPF*YJAdElAB zLAz$ipsS&g+32IWUI$sBysqb$#k}f!lf;Z-B$k|9q!kks^=9ONCLbmQ-pn#DUcQ{& zAWviz)%{uXYj@dajk4xt5Kwm@m<}I2UNv%H-sdOfEA%+?FFz@K#y9>pe`%G#6iM{ zP=9~UVsp)m`aX+cSVWuXQBZ_On-A{^2%Z^EF`ewY__SOF%DV3iAG0eq`Na2ngSR$3 zvih^e@_%YR?%gFI2Y6N`YofQ*rR^y3^VAdv^&8FsNQP-&=pZ+Z?e6^@OFG=YzLEo! zhqgb*C$cAoQuf1pTC6mF!?&(=@g@QB@&V~$U&gGpov3#~U*8;klL=QBgu(WhL+zw@ zm1)5O7b{rFSS*L=pS^C_I~}YhlUC@YK|1UK-#aA4gA7>4;N!~l^+iLg#zlixT9 zCd2J*4vXqD2OAsgk`W6-#x|OknKj+B6;gz(;CiOVEpT(PsNXF>jWajbljML9hTxSYfwWb3u#1&sc1zw+T zM^qO&udl3_ptz^=ljabc_~{eDPmPqdZa?i2IRI&AP*?xQ8fqt`DTT#otO<3kp zzF`rA=VV*x5MNMG0R70=h#^g9C(UQt2&*5&DUC8AgOwN zQ^}u?`sTk6z~mf=otCoIBrP}S-X4_}1Csl-ps>)hyE~A1z|{PvCmvE{v+X~GCARzD zGYH;xoo{4skP|z{HO6Vi&%999CzxJonByr_{Gs0~s9~I8_vqy`y13|*tiBptQm+pF--U4QkRNnBtd(qyx-krW#+Gd z_DB4ej&Tjl_sWsnme-@AGFtBw2c#Sx$J5YUgZr|G z+)WbxVj149Z806qi=WTO*L8C3F^&YdxX)c2T`2prbOK0* zBR*pq^C`>SgrHQ9g14^q2AOqTxo+un#0O)xq~(seA)Qa84jOB$nGgs3YmcX9ZHYXd z93QMMs@4$bGCiP^9syNzyS_f`jS=zxb{$G{;U6n17{c#a`%7*fQsIo3}~E66J7U`gxujz0|O>+7=VgKQO?+Zclc!CSjd7UR#Mo5_w!AB3`T3 zAi&38S+K~61B%VfYw1~xmUV=7w>&O=Wp*Y`#)S+owwTcLoGKCfJ@nQ##oiK2f{xOr zCfz4mu|9G9+|CA1BWuxM!Fo@)+5{XQFTJt7vr!QWOPh~2=GmGNGNQkX65Yqfv>(za z%oYvC9}IoVs_2##TkcJ1q%DKq$B*7` z^Ee%>x4Wa~0`KbAE2G5XV(Dc++O+vgX2aW`eitX`-kX>R?;F6^=M;ta^ZR$`kl7*| zQIc!~w%$s(h}D0WtL@Q`iL>r4bjV)&BSe4(c}UGaUvobPmI{9pyQPjz@A>UJcTySV z{rpVBol3^Jw2#Q{=>0Clc*SP-TyJHA!^vJ$l#iZe=E2$JtU%B*CM~O~Th0#-|NLn+ zU#`>M)HGz)-qoe(^U2fhd8$N9wSf1hPmC^Dn3y#t=&ZS~sPS=elVUU_b4hh|bs-?( zhG}_e>EjsOr=(TR6fSh7L55nIM$ zN)L8=;B=baNs>Kk3aZY^aBX=S1(WGho%qq^aH00-J&buZ7(}|D8c>OOOQJ3Li(v){ zY=s=3~!_24&Vw&|-N&bPZq6uzV}E=5TV7tz zvZbuFp?}RIY!{?j;1zliwrB5yU6#>K?;Ye6SWR(FU7I5AAR9cM@e$HOi?3_TsuOdVe5I6oGNSlkIv9_crWK(zR{4E-$5{WWJne)HNH@rGk8>Q!zPCtzHeI*KV7 z0IUD|5SO@iW+N=TyS}F5qPSa&S6E3dwA=VddG}nkQ50_0A5gfNh*it8+z~w7OAQU) zWgAtaV4LU#Nf=LMT5wO#+GG?JsVOf5*)$_pSk}oYlZNKv)~#$R*lC#Ghr08>VvL+PZQBCKr#=UA^_0NGNnsbVrk`ngn z0JBo-#z>J)N!R>*6Q}tGpm6X!?(RRL^9fiC7$-g4zgy$&EC2;uWK&k80<~0*AbHn=e&HX?|GO^TGGi0qItFfc&7=TGj+ zJlmvu!>z-CjGUbK&CV>^+}s@6J$c55)Qr49E5L&_uDHDXEvQWN^fneJ9L1GR_LSU? z+*DH7^=1lSN29i!E7uhtT;J5yP13ej(q_r`eHLsHZ=;e!NJ^?*Z#{#)unPoy-*=}E zsxPh-ycy33JIP4P#sczz$P|4&F)Xe(fwUbW2l*mhLMKdJf(InfuMG%X_2eSN|Ni~q zBM3^Ga22l0IR8Q+7CUm~rv_tq@yyH&+6x@+J78;LFje#MsdfQx6k{$)B7H9atLb$l zp>GphzQUiE!(inx2>BvCe^kjaY6h|=FHOzQXU{1^%$y^ifZN}il@`Wn`lz zkOa|??k^NyI-S`WCLnK0pW$G-5$IlZbseg5;TQA9HZPuN4QDJn+aComcm`5#fquPa z&O^owHW;4XvN}`%&%FWvN{bS#{i@=6@VZ?ZE}#V~&8wy9v(_nR3(XxJDJ3^d?Cr4~ zx671WK@$aY6v{cHwI>HAIHX^>HqV9+Yy9Fee{MVCIf5^Onn16FIUwGc419LYdo%UMik*j8)10mCIa*r5v>Wo#FQ|UMPRaem5b&>mA2%hToYjrK>?7qgO zo_(Q~6RDt_+1=$&(Wga4S$V@k_Iv~IqVN)LYTSCG)oh#WW&>`K@NDwYgfbZj=ivTu z-B;(s#ocTmX#4yb?02ce#YJ4s)Yq#o90Hag@z;e(W7jwJJXO9e=HBXG*DtYKSuZQI z>WPRt884sX2*)alU;Q(7WZ3)d(&Am*>Wa^9V}TtGA)hgUFc*9$^n_tCOyX#z;j*aM zYI-Ig*f~sg!XE|kt0;!FJb72_@Z!Vch$cwBRkaIZ6%@ReoEHt(EHHr+TL^J4RaH?( zqu);a0$<9^QZyd<5;Q$l=JE8R&wO!ytvl>so8d)cH~ZqaV-Qpn4vvYb@{N~y4r_Xb zJy*)ADwf=j)%fhvU$698Kb2eeMy>}_P1^n$3W`QPOOL&P=e&G{k)B!b8$AHkF1^+Z zcW^Ha4^Q$kFFbqpvt-y*n&}(#O(eLM!1t-8HXQh|3`a*pgX4iQ(1tng^V!k$^xTT& zQSupPk}o;#u$;LU2L}ASKuczp&yH;{u(5Ck91XRRr(IS5-Ftx!vR}~Z5`Fo)lAX~4 z(=liQj(4NbP_i{}`$+n&7i$Qce}BSWa!}3yuDtt)(7)v>R}4_Xu|ZNo^z2V}Zo%OR z@eB5h$u~PB&!2~=m#~l)9Leaop4lg2`bp?s1cy)>%V%b>f}kVs!;y{QDRgx{K0Xab zp6>2-kl~80KDWN88qkAz1!Mnt{hyB??ccpuv6`ykGEh3N`RK8^ozGx6cf7Z^2c-@y z*U7W3s)*9NclQGM5gqY@nriuT!Vs5q1yFuJnNS+~la7V&G*|dbt)}VPzE*+)GY|-i zU16UtfkD5y*Gff}NYWH%9ynY?e!9q<<3lQZchRyBmX-ijU z$^LJ4OmA$T_iCnI2L@z&y$`p^_O+{hCV{<1{@qM39+W^Nk$(?no%ewypYHz7eLTF* zDi_V8I`Va8d>ysY&0BBUBQtneQ6@I`10=sCCvRWR~sW=IfMG;8vL0w3x%AKol*8cL8xr zo$ly2(9$z9l=hj`^TkUhg@i^XO#zv`F7oWzZF>3^P~TN5l##pG{oQ>XEhebWKv8Rz z*AWvFQ!bNw+%(?|(-gXhfx$!gX_&rsi$WrHRrg(XwRNKLzDh?3W2*H!SoC)G2apq6RTGqKkBd+ z-t89aSYV6kXgxB+Itg%68VSjML5m*QnKx(uw|ExiXH5#Dnv8~ z7!J1{02$*G5NF}DZXv%oq(uX3A^<%W;P)TgHLP*ViVai}3WO{Yw9O%X8HE$DmCO1d zY`fs!dk$`!T;?O+M~nZ*p~X_qh2?}u#h}*ZVjBS7ga+%Fi=Q$%a zdiC8va$yD7DghqB{ovvd18K>!_jfb+-%d-^m|ox@c6?qd2*ofX&&*0$tEdnF`WB+6 z3{(|hQc;=CMS?yPm_BN3THOa>?s)k41F1+Dnc)BV_mWZ&MGN0^RJqx1U%M6Jxwh8v zLw%bwW50{~aI(hePg3kgv$Qca(?^j9X#e0L&yo4DS8m)B@8ZDj3+Nx{($yc}jIjh0 zs~1&AZ-`M`^zOJ%HzreT-{L_l372Vs-SQnn9XEH7^y^674YWuAM~qqlIIe%t8p z4B|slvUgKYK!aO1lxJ&Xl&)Xv?g*$q&G7IrSQFx)f#5MIKi?f}mxE(sa+wxQ;ep$8 z*0xv9}8c9(4#;Sy}Uds}^Jeb!dT=j^Df;L=G20{A(T)t@)5$Zc$F zN>><+Cn|c3l8cM+L$Q4Q7$K{75EV`E`nAf{Yu9ELRolVIvL##Y&hU)L*cZ8JXYm$$5Z$ya z_%R&Yn`Vl|rpawADkuQz1?Y~1!IH+`2d}wTK|zJxvxo~C5&)wI7)y^(Lv2lsWW^Mi z?JAwcNHxzc;NUFK>~T(8Sd3<@@YXYu$ytfDBljJHepzylsj8{n8UIKETweeP#@Hah zefwvw);-ycoLeb2dA4YAaacfhL!~Cm;Za7;Yc?ClWe~`!`fpACkZ*>8-E~rEDPyIE z+bw9qM>;eClowYS@Ip5XItSOV^Y1a40s=odf6XY{CqIN{$5mmVpF=F{0_Uh3JrnhV0yv;)vko%;9zisM#;5O&cQ2h zM4zV3;N3zSoC3`z?F%Vg(D4a6e_uOanHU^tW>r+w8Nj2OfdfK54u;9f!IMAeo4;<%Vm~{(93jkMCwXMnFp70+o4_zWX z^scP+EE+3(zD}Su^feLXDG2p;)C@d zl#Gd)#!@>=w%%Et@7G|NiBnStz^{>t>ny^F81FHN{6YYC&UlY{D4^w^l|j73A0Dw? zXv2-ij}NQePu9V+gTKoU!X|&KH;q<;CwNjSydC4A0huEv=3`B1`?5FckNSH8!p^U} z%w0y?37XQc*!6;?hoXU~%vD!$5=J*jHPj6ik<(8@cXi^7?6r#^CA*k7rkHV^#tq^v zdFu504FYfHx4Q`ggn39QIXM+i)n-pl%~1A-EMNphzZEo>;~9s|c04;Xvn@{3{mj1L z-!ZS7nxftbIXm0pGY0Aw2AUV)v4O3|aCY1>dB#No2EnV2O>5NzXh49HaA`>h3?|)* zq=bab-q7*NOCXsd4XNPils31vI$%LfgRQ1L1e%y^yW8ye$5W1i5m}ZHcG;Ewc5rEzX+GgPSkt8KJD(E@ zY^Xf01=*v#;CoShT_g07hs*=efm?=ahp_ifkB1EfSSb!5tM_fAJa<;0da`^TrnExH z2ZAIl@8M>}3^{rE-e!|x9hi%@9htL3q(lVUDy^BFodyu<`;RVjpY#D}ceOxlA7!^o zoJv~(a;O#0eEUf)up4gfI9=XIZA|s&W|wWws{yM0Kimxw#~e`H*8*IHUw)%e+ZC2D z40MI8j?Ni7mfwRJ`#!s$42)W@nmD#@4PJiSFnh$VaidASX-mub&oogH>8rr;D3b{k zhhbTZt62UVte>9_3Wf3+HMPLK%|BPF-`BoU5jb0D^YMaALxxneJM~|C$p%q{6!Xic ze|%c(Y*coaRJDH<7WsG+Hmy2QO_0xQhgyQcmK_V>+A5Z+8lp;)2hqyJ=tx@GwdXW3 ztz^=)i%V_DxcvO}9RJYKH1x~AwvL0E%2GYtv)ckKc#W#aLOH7Op2COopi=b5NJkv~)2D$DDA!E>93m8Z_b;N+TH4y1K}J)V6uR8oHC%Zp zUb5-i_fZFthl%1??WQiCR4t~V2bWu}zs95~B**SB!t$A`(2 zy;vBov0w#ii;qruK1xYZ(!=rQTXb~IB`3zdy2szX9ThcM5(x8su?xeEz3t`lhnr#z zFUlws`h9gYu-n;tHCBf#l8OoJCj3}PN4n!c6t!S1B88xZRl-~)5);dRr4#gy9N~rZ z+S}Qkn7ke|ck3R7&TJemE@m^nXy`kC*iWrno}l`V<{HiV^!>6(JIdY`FU!XH#U0=M zxhwmTkt>t=)KUqPrr%%uVF7960u0}@KB=4;U-}w1q3j~(Tq{kk9nbq*yR=lxpoD8|mMg^0Yl!XSl?4s5SUVz* z)97(ljm32OxkcLf^wJGG>?Ko=vksaGKFdmy-ZEErqr9#DJnE$!94PzZc45nVRTO`i zm+U?<8?qG-UW(nqt>SnI9(bCjB zGq&lzbso{E+vo3}#@^em?gV%@^z8~m5acqyI27395IzLSDu$;>YG&2i$?6ANC(P67 zbeD@4v*i43&KA6vw5%@g@o++yJ36lJY%gykcbI;g7xBC&E5~m;0%BOcoVN)c$*BB2 zOG`_>b3cdRyLAe}m)`;e2-xZXbq5Cr7hu!r(O7T)MnO?=xcM)|Vpz@HeS8W74jDvl z*o7bl(y5&&Butx62todBjGz#tOX%;zD1HR-9(dV-ASktym}Ax^d;a^`(FVx>y72$@ agkh2t4ET0krpOZ%Bn8M@d!~X+`08xbi literal 19000 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

!ef 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 From 9d86980e42618a6a3706ac73969b99784f96ea46 Mon Sep 17 00:00:00 2001 From: bosd Date: Sat, 21 Sep 2024 16:42:02 +0200 Subject: [PATCH 02/36] Fixup Pre-commit --- camelot/core.py | 70 ++++++++++++++++---------------------- camelot/handlers.py | 22 ++++++------ camelot/parsers/base.py | 9 +++-- camelot/parsers/lattice.py | 4 +-- camelot/parsers/stream.py | 10 ++---- camelot/plotting.py | 13 ++----- 6 files changed, 56 insertions(+), 72 deletions(-) diff --git a/camelot/core.py b/camelot/core.py index 67a9cf6..764b82b 100644 --- a/camelot/core.py +++ b/camelot/core.py @@ -4,16 +4,14 @@ import zipfile from operator import itemgetter +import cv2 import numpy as np import pandas as pd -import cv2 - -from .utils import ( - build_file_path_in_temp_dir, - compute_whitespace, -) from .backends import ImageConversionBackend +from .utils import build_file_path_in_temp_dir +from .utils import compute_accuracy +from .utils import compute_whitespace # minimum number of vertical textline intersections for a textedge @@ -157,10 +155,7 @@ def get_relevant(self): # get vertical textedges that intersect maximum number of # times with horizontal textlines relevant_align = max(intersections_sum.items(), key=itemgetter(1))[0] - return list(filter( - lambda te: te.is_valid, - self._textedges[relevant_align]) - ) + return list(filter(lambda te: te.is_valid, self._textedges[relevant_align])) def get_table_areas(self, textlines, relevant_textedges): """Returns a dict of interesting table areas on the PDF page @@ -180,26 +175,26 @@ def pad(area, average_row_height): table_areas = {} for te in relevant_textedges: - if not table_areas: + if not table_areas: + table_areas[(te.x, te.y0, te.x, te.y1)] = None + else: + found = None + for area in table_areas: + # check for overlap + if te.y1 >= area[1] and te.y0 <= area[3]: + found = area + break + if found is None: table_areas[(te.x, te.y0, te.x, te.y1)] = None else: - found = None - for area in table_areas: - # check for overlap - if te.y1 >= area[1] and te.y0 <= area[3]: - found = area - break - if found is None: - table_areas[(te.x, te.y0, te.x, te.y1)] = None - else: - table_areas.pop(found) - updated_area = ( - found[0], - min(te.y0, found[1]), - max(found[2], te.x), - max(found[3], te.y1), - ) - table_areas[updated_area] = None + table_areas.pop(found) + updated_area = ( + found[0], + min(te.y0, found[1]), + max(found[2], te.x), + max(found[3], te.y1), + ) + table_areas[updated_area] = None # extend table areas based on textlines that overlap # vertically. it's possible that these textlines were @@ -225,8 +220,7 @@ def pad(area, average_row_height): max(found[3], tl.y1), ) table_areas[updated_area] = None - average_textline_height = sum_textline_height / \ - float(len(textlines)) + average_textline_height = sum_textline_height / float(len(textlines)) # add some padding to table areas table_areas_padded = {} @@ -358,8 +352,8 @@ def __init__(self, cols, rows): self.filename = None self.order = None self.page = None - self.flavor = None # Flavor of the parser that generated the table - self.pdf_size = None # Dimensions of the original PDF page + self.flavor = None # Flavor of the parser that generated the table + self.pdf_size = None # Dimensions of the original PDF page self.debug_info = None # Field holding debug data self._image = None @@ -398,8 +392,7 @@ def parsing_report(self): return report def record_metadata(self, parser): - """Record data about the origin of the table - """ + """Record data about the origin of the table""" self.flavor = parser.id self.filename = parser.filename self.debug_info = parser.debug_info @@ -411,13 +404,11 @@ def record_metadata(self, parser): self.pdf_size = (parser.pdf_width, parser.pdf_height) def get_pdf_image(self): - """Compute pdf image and cache it - """ + """Compute pdf image and cache it""" if self._image is None: if self._image_path is None: self._image_path = build_file_path_in_temp_dir( - os.path.basename(self.filename), - ".png" + os.path.basename(self.filename), ".png" ) backend = ImageConversionBackend(use_fallback=True) backend.convert(self.filename, self._image_path) @@ -733,8 +724,7 @@ def __getitem__(self, idx): return self._tables[idx] def __iter__(self): - for t in self._tables: - yield t + yield from self._tables @staticmethod def _format_func(table, f): diff --git a/camelot/handlers.py b/camelot/handlers.py index 2356ed0..091e225 100644 --- a/camelot/handlers.py +++ b/camelot/handlers.py @@ -11,8 +11,8 @@ from .core import TableList from .parsers import Lattice from .parsers import Stream -from .utils import build_file_path_in_temp_dir from .utils import TemporaryDirectory +from .utils import build_file_path_in_temp_dir from .utils import download_url from .utils import get_page_layout from .utils import get_rotation @@ -160,7 +160,7 @@ def parse( suppress_stdout=False, parallel=False, layout_kwargs=None, - **kwargs + **kwargs, ): """Extracts tables by calling parser.get_tables on all single page PDFs. @@ -200,7 +200,8 @@ def parse( jobs = [] for p in self.pages: j = pool.apply_async( - self._parse_page,(p, tempdir, parser, suppress_stdout, layout_kwargs) + self._parse_page, + (p, tempdir, parser, suppress_stdout, layout_kwargs), ) jobs.append(j) @@ -209,14 +210,14 @@ def parse( tables.extend(t) else: for p in self.pages: - t = self._parse_page(p, tempdir, parser, suppress_stdout, layout_kwargs) + t = self._parse_page( + p, tempdir, parser, suppress_stdout, layout_kwargs + ) tables.extend(t) return TableList(sorted(tables)) - def _parse_page( - self, page, tempdir, parser, suppress_stdout, layout_kwargs - ): + def _parse_page(self, page, tempdir, parser, suppress_stdout, layout_kwargs): """Extracts tables by calling parser.get_tables on a single page PDF. @@ -235,13 +236,14 @@ def _parse_page( ------- tables : camelot.core.TableList List of tables found in PDF. - + """ self._save_page(self.filepath, page, tempdir) page_path = os.path.join(tempdir, f"page-{page}.pdf") layout, dimensions = get_page_layout(page_path, **layout_kwargs) - parser._generate_layout(page_path, layout, dimensions, - page, layout_kwargs=layout_kwargs) + parser._generate_layout( + page_path, layout, dimensions, page, layout_kwargs=layout_kwargs + ) tables = parser.extract_tables( page_path, suppress_stdout=suppress_stdout, layout_kwargs=layout_kwargs ) diff --git a/camelot/parsers/base.py b/camelot/parsers/base.py index 016032e..ea69181 100644 --- a/camelot/parsers/base.py +++ b/camelot/parsers/base.py @@ -1,18 +1,20 @@ import os -from ..utils import get_text_objects, get_page_layout from ..core import Table +from ..utils import get_page_layout +from ..utils import get_text_objects + class BaseParser: """Defines a base parser.""" + def __init__(self, parser_id): self.id = parser_id # For plotting details of parsing algorithms self.debug_info = {} - def _generate_layout(self, filename, layout, dimensions, - page_idx, layout_kwargs): + def _generate_layout(self, filename, layout, dimensions, page_idx, layout_kwargs): self.filename = filename self.layout_kwargs = layout_kwargs self.layout = layout @@ -41,6 +43,7 @@ def _generate_layout(self, filename, layout, dimensions, table : camelot.core.Table """ + def _initialize_new_table(self, table_idx, cols, rows): table = Table(cols, rows) table.page = self.page diff --git a/camelot/parsers/lattice.py b/camelot/parsers/lattice.py index b855c03..9468519 100644 --- a/camelot/parsers/lattice.py +++ b/camelot/parsers/lattice.py @@ -2,6 +2,7 @@ import locale import logging import os +import subprocess import sys import warnings @@ -247,8 +248,7 @@ def scale_areas(areas): return scaled_areas self.image_path = build_file_path_in_temp_dir( - os.path.basename(self.filename), - ".png" + os.path.basename(self.filename), ".png" ) self.backend.convert(self.filename, self.image_path) diff --git a/camelot/parsers/stream.py b/camelot/parsers/stream.py index 3156823..78dc5d5 100644 --- a/camelot/parsers/stream.py +++ b/camelot/parsers/stream.py @@ -209,15 +209,11 @@ def _join_rows(rows_grouped, text_y_max, text_y_min): """ row_boundaries = [ - [ - max(t.y1 for t in r), - min(t.y0 for t in r) - ] - for r in rows_grouped + [max(t.y1 for t in r), min(t.y0 for t in r)] for r in rows_grouped ] - for i in range(0, len(row_boundaries)-1): + for i in range(0, len(row_boundaries) - 1): top_row = row_boundaries[i] - bottom_row = row_boundaries[i+1] + bottom_row = row_boundaries[i + 1] top_row[1] = bottom_row[0] = (top_row[1] + bottom_row[0]) / 2 row_boundaries[0][0] = text_y_max row_boundaries[-1][1] = text_y_min diff --git a/camelot/plotting.py b/camelot/plotting.py index f9fb5ff..ec73630 100644 --- a/camelot/plotting.py +++ b/camelot/plotting.py @@ -65,13 +65,8 @@ def text(self, table): xs.extend([t[0], t[2]]) ys.extend([t[1], t[3]]) ax.add_patch( - patches.Rectangle( - (t[0], t[1]), - t[2] - t[0], - t[3] - t[1], - alpha=0.5 - ) - ) + patches.Rectangle((t[0], t[1]), t[2] - t[0], t[3] - t[1], alpha=0.5) + ) ax.set_xlim(min(xs) - 10, max(xs) + 10) ax.set_ylim(min(ys) - 10, max(ys) + 10) img = table.get_pdf_image() @@ -180,9 +175,7 @@ def textedge(self, table): ys.extend([t[1], t[3]]) ax.add_patch( patches.Rectangle( - (t[0], t[1]), t[2] - t[0], t[3] - t[1], - color="blue", - alpha=0.5 + (t[0], t[1]), t[2] - t[0], t[3] - t[1], color="blue", alpha=0.5 ) ) ax.set_xlim(min(xs) - 10, max(xs) + 10) From 9353dce0645f045b5a95a6da0df0b719128d62ed Mon Sep 17 00:00:00 2001 From: bosd Date: Sat, 21 Sep 2024 16:42:52 +0200 Subject: [PATCH 03/36] Fixup Pre-commit utils.py --- camelot/utils.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/camelot/utils.py b/camelot/utils.py index d4ca34f..dde4f53 100644 --- a/camelot/utils.py +++ b/camelot/utils.py @@ -1,5 +1,5 @@ -import os import atexit +import os import random import re import shutil @@ -139,7 +139,7 @@ def remove_extra(kwargs, flavor="lattice"): # https://stackoverflow.com/a/22726782 # and https://stackoverflow.com/questions/10965479 -class TemporaryDirectory(object): +class TemporaryDirectory: def __enter__(self): self.name = tempfile.mkdtemp() # Only delete the temporary directory upon @@ -167,10 +167,7 @@ def build_file_path_in_temp_dir(filename, extension=None): with TemporaryDirectory() as temp_dir: if extension: filename = filename + extension - path = os.path.join( - temp_dir, - filename - ) + path = os.path.join(temp_dir, filename) return path From 2e1e45bd31032b3870811049e4a7dee1250c7f9a Mon Sep 17 00:00:00 2001 From: bosd Date: Sat, 21 Sep 2024 17:08:06 +0200 Subject: [PATCH 04/36] Disable plot tests on windows --- tests/test_plotting.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_plotting.py b/tests/test_plotting.py index 17dc9ad..7841896 100644 --- a/tests/test_plotting.py +++ b/tests/test_plotting.py @@ -14,7 +14,7 @@ def test_text_plot(testdir): tables = camelot.read_pdf(filename) return camelot.plot(tables[0], kind="text") - +@skip_on_windows @pytest.mark.mpl_image_compare(baseline_dir="files/baseline_plots", remove_text=True) def test_textedge_plot(testdir): filename = os.path.join(testdir, "tabula/12s0324.pdf") @@ -37,7 +37,7 @@ def test_lattice_contour_plot_ghostscript(testdir): tables = camelot.read_pdf(filename, backend="ghostscript") return camelot.plot(tables[0], kind="contour") - +@skip_on_windows @pytest.mark.mpl_image_compare(baseline_dir="files/baseline_plots", remove_text=True) def test_stream_contour_plot(testdir): filename = os.path.join(testdir, "tabula/12s0324.pdf") From 7bd4c9e3df3c5cdb8320cba7ac1ff4e134205027 Mon Sep 17 00:00:00 2001 From: bosd Date: Sat, 21 Sep 2024 18:14:59 +0200 Subject: [PATCH 05/36] [IMP] Transparency on contourplot --- camelot/plotting.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/camelot/plotting.py b/camelot/plotting.py index ec73630..f458a05 100644 --- a/camelot/plotting.py +++ b/camelot/plotting.py @@ -132,9 +132,7 @@ def contour(self, table): xs.extend([t[0], t[2]]) ys.extend([t[1], t[3]]) ax.add_patch( - patches.Rectangle( - (t[0], t[1]), t[2] - t[0], t[3] - t[1], color="blue" - ) + patches.Rectangle((t[0], t[1]), t[2] - t[0], t[3] - t[1], alpha=0.5) ) for t in table_bbox.keys(): From f97c731f4ff70d009e226b922fda22849909cae8 Mon Sep 17 00:00:00 2001 From: Frh Date: Sun, 19 Apr 2020 16:27:01 -0700 Subject: [PATCH 06/36] Initial Hybrid parser, for now identical to Stream --- camelot/cli.py | 121 ++++- camelot/parsers/hybrid.py | 441 ++++++++++++++++++ .../test_hybrid_contour_plot.png | Bin 0 -> 15438 bytes .../baseline_plots/test_hybrid_grid_plot.png | Bin 0 -> 50045 bytes .../test_hybrid_textedge_plot.png | Bin 0 -> 115318 bytes .../test_stream_textedge_plot.png | Bin 0 -> 115318 bytes tests/test_cli.py | 20 + tests/test_common.py | 299 ++++++++++++ 8 files changed, 872 insertions(+), 9 deletions(-) create mode 100644 camelot/parsers/hybrid.py create mode 100644 tests/files/baseline_plots/test_hybrid_contour_plot.png create mode 100644 tests/files/baseline_plots/test_hybrid_grid_plot.png create mode 100644 tests/files/baseline_plots/test_hybrid_textedge_plot.png create mode 100644 tests/files/baseline_plots/test_stream_textedge_plot.png diff --git a/camelot/cli.py b/camelot/cli.py index 8aad5eb..2d266c6 100644 --- a/camelot/cli.py +++ b/camelot/cli.py @@ -32,7 +32,8 @@ def set_config(self, key, value): @click.group(name="camelot") @click.version_option(version=__version__) -@click.option("-q", "--quiet", is_flag=False, help="Suppress logs and warnings.") +@click.option("-q", "--quiet", is_flag=False, + help="Suppress logs and warnings.") @click.option( "-p", "--pages", @@ -105,7 +106,8 @@ def cli(ctx, *args, **kwargs): " where x1, y1 -> left-top and x2, y2 -> right-bottom.", ) @click.option( - "-back", "--process_background", is_flag=True, help="Process background lines." + "-back", "--process_background", is_flag=True, + help="Process background lines." ) @click.option( "-scale", @@ -134,7 +136,8 @@ def cli(ctx, *args, **kwargs): "-l", "--line_tol", default=2, - help="Tolerance parameter used to merge close vertical" " and horizontal lines.", + help="Tolerance parameter used to merge close vertical" + " and horizontal lines.", ) @click.option( "-j", @@ -204,12 +207,15 @@ def lattice(c, *args, **kwargs): raise ImportError("matplotlib is required for plotting.") else: if output is None: - raise click.UsageError("Please specify output file path using --output") + raise click.UsageError( + "Please specify output file path using --output") if f is None: - raise click.UsageError("Please specify output file format using --format") + raise click.UsageError( + "Please specify output file format using --format") tables = read_pdf( - filepath, pages=pages, flavor="lattice", suppress_stdout=quiet, **kwargs + filepath, pages=pages, flavor="lattice", suppress_stdout=quiet, + **kwargs ) click.echo(f"Found {tables.n} tables") if plot_type is not None: @@ -254,7 +260,8 @@ def lattice(c, *args, **kwargs): "-r", "--row_tol", default=2, - help="Tolerance parameter" " used to combine text vertically, to generate rows.", + help="Tolerance parameter" + " used to combine text vertically, to generate rows.", ) @click.option( "-c", @@ -302,9 +309,11 @@ def stream(c, *args, **kwargs): raise ImportError("matplotlib is required for plotting.") else: if output is None: - raise click.UsageError("Please specify output file path using --output") + raise click.UsageError( + "Please specify output file path using --output") if f is None: - raise click.UsageError("Please specify output file format using --format") + raise click.UsageError( + "Please specify output file format using --format") tables = read_pdf( filepath, pages=pages, flavor="stream", suppress_stdout=quiet, layout_kwargs=layout_kwargs, **kwargs @@ -316,3 +325,97 @@ def stream(c, *args, **kwargs): plt.show() else: tables.export(output, f=f, compress=compress) + + +@cli.command("hybrid") +@click.option( + "-R", + "--table_regions", + default=[], + multiple=True, + help="Page regions to analyze. Example: x1,y1,x2,y2" + " where x1, y1 -> left-top and x2, y2 -> right-bottom.", +) +@click.option( + "-T", + "--table_areas", + default=[], + multiple=True, + help="Table areas to process. Example: x1,y1,x2,y2" + " where x1, y1 -> left-top and x2, y2 -> right-bottom.", +) +@click.option( + "-C", + "--columns", + default=[], + multiple=True, + help="X coordinates of column separators.", +) +@click.option( + "-e", + "--edge_tol", + default=50, + help="Tolerance parameter" " for extending textedges vertically.", +) +@click.option( + "-r", + "--row_tol", + default=2, + help="Tolerance parameter" + " used to combine text vertically, to generate rows.", +) +@click.option( + "-c", + "--column_tol", + default=0, + help="Tolerance parameter" + " used to combine text horizontally, to generate columns.", +) +@click.option( + "-plot", + "--plot_type", + type=click.Choice(["text", "grid", "contour", "textedge"]), + help="Plot elements found on PDF page for visual debugging.", +) +@click.argument("filepath", type=click.Path(exists=True)) +@pass_config +def hybrid(c, *args, **kwargs): + """Use spaces between text to parse the table.""" + conf = c.config + pages = conf.pop("pages") + output = conf.pop("output") + f = conf.pop("format") + compress = conf.pop("zip") + quiet = conf.pop("quiet") + plot_type = kwargs.pop("plot_type") + filepath = kwargs.pop("filepath") + kwargs.update(conf) + + table_regions = list(kwargs["table_regions"]) + kwargs["table_regions"] = None if not table_regions else table_regions + table_areas = list(kwargs["table_areas"]) + kwargs["table_areas"] = None if not table_areas else table_areas + columns = list(kwargs["columns"]) + kwargs["columns"] = None if not columns else columns + + if plot_type is not None: + if not _HAS_MPL: + raise ImportError("matplotlib is required for plotting.") + else: + if output is None: + raise click.UsageError( + "Please specify output file path using --output") + if f is None: + raise click.UsageError( + "Please specify output file format using --format") + + tables = read_pdf( + filepath, pages=pages, flavor="hybrid", suppress_stdout=quiet, **kwargs + ) + click.echo("Found {} tables".format(tables.n)) + if plot_type is not None: + for table in tables: + plot(table, kind=plot_type) + plt.show() + else: + tables.export(output, f=f, compress=compress) diff --git a/camelot/parsers/hybrid.py b/camelot/parsers/hybrid.py new file mode 100644 index 0000000..9d12350 --- /dev/null +++ b/camelot/parsers/hybrid.py @@ -0,0 +1,441 @@ + + +# -*- coding: utf-8 -*- + +from __future__ import division +import warnings + +import numpy as np + +from .base import BaseParser +from ..core import TextEdges +from ..utils import (text_in_bbox, text_in_bbox_per_axis) + + +class Hybrid(BaseParser): + """Hybrid method of parsing looks for spaces between text + to parse the table. + + If you want to specify columns when specifying multiple table + areas, make sure that the length of both lists are equal. + + Parameters + ---------- + table_regions : list, optional (default: None) + List of page regions that may contain tables of the form x1,y1,x2,y2 + where (x1, y1) -> left-top and (x2, y2) -> right-bottom + in PDF coordinate space. + table_areas : list, optional (default: None) + List of table area strings of the form x1,y1,x2,y2 + where (x1, y1) -> left-top and (x2, y2) -> right-bottom + in PDF coordinate space. + columns : list, optional (default: None) + List of column x-coordinates strings where the coordinates + are comma-separated. + split_text : bool, optional (default: False) + Split text that spans across multiple cells. + flag_size : bool, optional (default: False) + Flag text based on font size. Useful to detect + super/subscripts. Adds around flagged text. + strip_text : str, optional (default: '') + Characters that should be stripped from a string before + assigning it to a cell. + edge_tol : int, optional (default: 50) + Tolerance parameter for extending textedges vertically. + row_tol : int, optional (default: 2) + Tolerance parameter used to combine text vertically, + to generate rows. + column_tol : int, optional (default: 0) + Tolerance parameter used to combine text horizontally, + to generate columns. + + """ + + def __init__( + self, + table_regions=None, + table_areas=None, + columns=None, + flag_size=False, + split_text=False, + strip_text="", + edge_tol=50, + row_tol=2, + column_tol=0, + **kwargs + ): + super().__init__( + "hybrid", + table_regions=table_regions, + table_areas=table_areas, + split_text=split_text, + strip_text=strip_text, + flag_size=flag_size, + ) + self.columns = columns + self._validate_columns() + self.edge_tol = edge_tol + self.row_tol = row_tol + self.column_tol = column_tol + + @staticmethod + def _text_bbox(t_bbox): + """Returns bounding box for the text present on a page. + + Parameters + ---------- + t_bbox : dict + Dict with two keys 'horizontal' and 'vertical' with lists of + LTTextLineHorizontals and LTTextLineVerticals respectively. + + Returns + ------- + text_bbox : tuple + Tuple (x0, y0, x1, y1) in pdf coordinate space. + + """ + xmin = min(t.x0 for direction in t_bbox for t in t_bbox[direction]) + ymin = min(t.y0 for direction in t_bbox for t in t_bbox[direction]) + xmax = max(t.x1 for direction in t_bbox for t in t_bbox[direction]) + ymax = max(t.y1 for direction in t_bbox for t in t_bbox[direction]) + text_bbox = (xmin, ymin, xmax, ymax) + return text_bbox + + @staticmethod + def _group_rows(text, row_tol=2): + """Groups PDFMiner text objects into rows vertically + within a tolerance. + + Parameters + ---------- + text : list + List of PDFMiner text objects. + row_tol : int, optional (default: 2) + + Returns + ------- + rows : list + Two-dimensional list of text objects grouped into rows. + + """ + row_y = None + rows = [] + temp = [] + non_empty_text = [t for t in text if t.get_text().strip()] + for t in non_empty_text: + # is checking for upright necessary? + # if t.get_text().strip() and all([obj.upright \ + # for obj in t._objs + # if type(obj) is LTChar]): + if row_y is None: + row_y = t.y0 + elif not np.isclose(row_y, t.y0, atol=row_tol): + rows.append(sorted(temp, key=lambda t: t.x0)) + temp = [] + # We update the row's bottom as we go, to be forgiving if there + # is a gradual change across multiple columns. + row_y = t.y0 + temp.append(t) + rows.append(sorted(temp, key=lambda t: t.x0)) + return rows + + @staticmethod + def _merge_columns(l, column_tol=0): + """Merges column boundaries horizontally if they overlap + or lie within a tolerance. + + Parameters + ---------- + l : list + List of column x-coordinate tuples. + column_tol : int, optional (default: 0) + + Returns + ------- + merged : list + List of merged column x-coordinate tuples. + + """ + merged = [] + for higher in l: + if not merged: + merged.append(higher) + else: + lower = merged[-1] + if column_tol >= 0: + if higher[0] <= lower[1] or np.isclose( + higher[0], lower[1], atol=column_tol + ): + upper_bound = max(lower[1], higher[1]) + lower_bound = min(lower[0], higher[0]) + merged[-1] = (lower_bound, upper_bound) + else: + merged.append(higher) + elif column_tol < 0: + if higher[0] <= lower[1]: + if np.isclose(higher[0], lower[1], + atol=abs(column_tol)): + merged.append(higher) + else: + upper_bound = max(lower[1], higher[1]) + lower_bound = min(lower[0], higher[0]) + merged[-1] = (lower_bound, upper_bound) + else: + merged.append(higher) + return merged + + @staticmethod + def _join_rows(rows_grouped, text_y_max, text_y_min): + """Makes row coordinates continuous. For the row to "touch" + we split the existing gap between them in half. + + Parameters + ---------- + rows_grouped : list + Two-dimensional list of text objects grouped into rows. + text_y_max : int + text_y_min : int + + Returns + ------- + rows : list + List of continuous row y-coordinate tuples. + + """ + row_boundaries = [ + [ + max(t.y1 for t in r), + min(t.y0 for t in r) + ] + for r in rows_grouped + ] + for i in range(0, len(row_boundaries)-1): + top_row = row_boundaries[i] + bottom_row = row_boundaries[i+1] + top_row[1] = bottom_row[0] = (top_row[1] + bottom_row[0]) / 2 + row_boundaries[0][0] = text_y_max + row_boundaries[-1][1] = text_y_min + return row_boundaries + + @staticmethod + def _add_columns(cols, text, row_tol): + """Adds columns to existing list by taking into account + the text that lies outside the current column x-coordinates. + + Parameters + ---------- + cols : list + List of column x-coordinate tuples. + text : list + List of PDFMiner text objects. + ytol : int + + Returns + ------- + cols : list + Updated list of column x-coordinate tuples. + + """ + if text: + text = Hybrid._group_rows(text, row_tol=row_tol) + elements = [len(r) for r in text] + new_cols = [ + (t.x0, t.x1) + for r in text if len(r) == max(elements) + for t in r + ] + cols.extend(Hybrid._merge_columns(sorted(new_cols))) + return cols + + @staticmethod + def _join_columns(cols, text_x_min, text_x_max): + """Makes column coordinates continuous. + + Parameters + ---------- + cols : list + List of column x-coordinate tuples. + text_x_min : int + text_y_max : int + + Returns + ------- + cols : list + Updated list of column x-coordinate tuples. + + """ + cols = sorted(cols) + cols = [(cols[i][0] + cols[i - 1][1]) / 2 for i in range(1, len(cols))] + cols.insert(0, text_x_min) + cols.append(text_x_max) + cols = [(cols[i], cols[i + 1]) for i in range(0, len(cols) - 1)] + return cols + + def _validate_columns(self): + if self.table_areas is not None and self.columns is not None: + if len(self.table_areas) != len(self.columns): + raise ValueError("Length of table_areas and columns" + " should be equal") + + def _nurminen_table_detection(self, textlines): + """A general implementation of the table detection algorithm + described by Anssi Nurminen's master's thesis. + Link: https://dspace.cc.tut.fi/dpub/bitstream/handle/123456789/21520/Nurminen.pdf?sequence=3 # noqa + + Assumes that tables are situated relatively far apart + vertically. + """ + # TODO: add support for arabic text #141 + # sort textlines in reading order + textlines.sort(key=lambda x: (-x.y0, x.x0)) + textedges = TextEdges(edge_tol=self.edge_tol) + # generate left, middle and right textedges + textedges.generate(textlines) + # select relevant edges + relevant_textedges = textedges.get_relevant() + self.textedges.extend(relevant_textedges) + # guess table areas using textlines and relevant edges + table_bbox = textedges.get_table_areas(textlines, relevant_textedges) + # treat whole page as table area if no table areas found + if not table_bbox: + table_bbox = {(0, 0, self.pdf_width, self.pdf_height): None} + + return table_bbox + + def _generate_table_bbox(self): + self.textedges = [] + if self.table_areas is None: + hor_text = self.horizontal_text + if self.table_regions is not None: + # filter horizontal text + hor_text = [] + for region in self.table_regions: + x1, y1, x2, y2 = region.split(",") + x1 = float(x1) + y1 = float(y1) + x2 = float(x2) + y2 = float(y2) + region_text = text_in_bbox( + (x1, y2, x2, y1), self.horizontal_text) + hor_text.extend(region_text) + # find tables based on nurminen's detection algorithm + table_bbox = self._nurminen_table_detection(hor_text) + else: + table_bbox = {} + for area in self.table_areas: + x1, y1, x2, y2 = area.split(",") + x1 = float(x1) + y1 = float(y1) + x2 = float(x2) + y2 = float(y2) + table_bbox[(x1, y2, x2, y1)] = None + self.table_bbox = table_bbox + + def _generate_columns_and_rows(self, table_idx, tk): + # select elements which lie within table_bbox + self.t_bbox = text_in_bbox_per_axis( + tk, + self.horizontal_text, + self.vertical_text + ) + + text_x_min, text_y_min, text_x_max, text_y_max = \ + self._text_bbox(self.t_bbox) + rows_grouped = self._group_rows( + self.t_bbox["horizontal"], row_tol=self.row_tol) + rows = self._join_rows(rows_grouped, text_y_max, text_y_min) + elements = [len(r) for r in rows_grouped] + + if self.columns is not None and self.columns[table_idx] != "": + # user has to input boundary columns too + # take (0, pdf_width) by default + # similar to else condition + # len can't be 1 + cols = self.columns[table_idx].split(",") + cols = [float(c) for c in cols] + cols.insert(0, text_x_min) + cols.append(text_x_max) + cols = [(cols[i], cols[i + 1]) for i in range(0, len(cols) - 1)] + else: + # calculate mode of the list of number of elements in + # each row to guess the number of columns + ncols = max(set(elements), key=elements.count) + if ncols == 1: + # if mode is 1, the page usually contains not tables + # but there can be cases where the list can be skewed, + # try to remove all 1s from list in this case and + # see if the list contains elements, if yes, then use + # the mode after removing 1s + elements = list(filter(lambda x: x != 1, elements)) + if elements: + ncols = max(set(elements), key=elements.count) + else: + warnings.warn( + "No tables found in table area {}" + .format(table_idx + 1) + ) + cols = [ + (t.x0, t.x1) + for r in rows_grouped + if len(r) == ncols + for t in r + ] + cols = self._merge_columns( + sorted(cols), + column_tol=self.column_tol + ) + inner_text = [] + for i in range(1, len(cols)): + left = cols[i - 1][1] + right = cols[i][0] + inner_text.extend( + [ + t + for direction in self.t_bbox + for t in self.t_bbox[direction] + if t.x0 > left and t.x1 < right + ] + ) + outer_text = [ + t + for direction in self.t_bbox + for t in self.t_bbox[direction] + if t.x0 > cols[-1][1] or t.x1 < cols[0][0] + ] + inner_text.extend(outer_text) + cols = self._add_columns(cols, inner_text, self.row_tol) + cols = self._join_columns(cols, text_x_min, text_x_max) + + return cols, rows + + def _generate_table(self, table_idx, cols, rows, **kwargs): + table = self._initialize_new_table(table_idx, cols, rows) + table = table.set_all_edges() + table.record_parse_metadata(self) + + # for plotting + table._bbox = self.table_bbox + table._segments = None + table._textedges = self.textedges + + return table + + def extract_tables(self, filename): + if self._document_has_no_text(): + return [] + + # Identify plausible areas within the doc where tables lie, + # populate table_bbox keys with these areas. + self._generate_table_bbox() + + _tables = [] + # sort tables based on y-coord + for table_idx, bbox in enumerate( + sorted(self.table_bbox.keys(), key=lambda x: x[1], reverse=True) + ): + cols, rows = self._generate_columns_and_rows(table_idx, bbox) + table = self._generate_table(table_idx, cols, rows) + table._bbox = bbox + _tables.append(table) + + return _tables diff --git a/tests/files/baseline_plots/test_hybrid_contour_plot.png b/tests/files/baseline_plots/test_hybrid_contour_plot.png new file mode 100644 index 0000000000000000000000000000000000000000..d781439ee195c4202bf4c1e71aba4eae8b9cef33 GIT binary patch literal 15438 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 C@`h0W literal 0 HcmV?d00001 diff --git a/tests/files/baseline_plots/test_hybrid_grid_plot.png b/tests/files/baseline_plots/test_hybrid_grid_plot.png new file mode 100644 index 0000000000000000000000000000000000000000..b04a2f1b51412aa2e7dfb2e565e8246e2a1b6816 GIT binary patch literal 50045 zcmeFZby!qw+c&xZ6;KdRK>5J99n1WdY7Vx*-7q!~a(L`9Ge2{C9Ga_CT$4iyk^ z2x;jCVTgUM`+1&k$GeaBc>mdd?T_R3kb9h2Gi$BuI?rF7^ITK?2K7;df-@2)+ zjUZ&~2tsN|aReSo^mzOL{yOBQcuSW8e*7pbL*V}@AKbj-h9ER%=pT|y`3zflP~zb= z!-qP~)(<_+T&)mCvxg5HoF6*anzMUYxw_dpI|*MFx-7`Ye*fXa2T}q8|L4D7c6PN9 zc)u$33qjbCTgq2;y^`jKypvwJAILBFeQjrtvYNN}7Sj6bisC7klef=D@OuXJEU5Ed zq+cnGW_VgvWm(mxM#uk9=iU4r>(|)i#@gczhSqD_dxCXcO{FPTvG&%T)hXf6nk1*) zu(4ayQZ`9**nGGAaIPR)c24xi^=jJS@xT!D=jd@Rc4hQug6V(%^8d?=koXqX0uN3q zU|+_6f7@ozrHO?{KiAOdnUb>d;hv4TzLh>qK$=OF2agfn0UnLEQdI~!ySuyA^`|>S z!|B;oW#vOiytLifIY9HmXcX%!h*T6BteK4G@OYwoUlCLpU*?Kt)Okxi4ZQsk^Ted_Vw$4YUng2+P z)a!qnIu?i_PY?XWmUfa3ej@DQCI9u8h#$o^U4zFz=_NVe8}}nKy81>yi~V~LEoa#i z_STo?78Z0YEU)6@<4L!aZg6t8O8@m&eiUq@@Xuyw7KKwofByF`|KDE(($I9sd?YFmA!w9<^(@`u~5=OUMw{L6j#qel-Uh*3DnaksQB|xN8 z{5{q2hJuEs>tR4`=%m2j{^t6iP5Q`ux-HWYsx$YPo%Ngd_y3O5Z1j)xrO}cG>}|wZ zs1EP6J>R>g9GwiS^Dr&Pp%n>71)1ASe`UCGY^h^QD#wm&24r)=`^oyv&9?N$yUaxx%EUBABWR%8CWTcMk?iN*Y2F)#wK~}`CRHI zE>7~o95 ziBKy&JFYkBN`RZpw^z3{>>IY1XH<5)rKKfU2$Nb?=|0EAx-?MSuHrc*g;wBq5q=eNhGPtT%fA9Vu&%s8_4y`MZ*7@&)@Lk?GQ8KO!WL4!rx?Sr z$2h9@^~avE`D?m;XM0Q1s1Z};v5>tpSmP_6u9{$;buNbQj&@AV<}Z8JrmkG5t&FT} z(jM(DZ=yJ_y|A=btu2u5m-kw}mu{+~6ih{esHVsaEJ?s>oQ|hGOioUQWb0;;BIOTf zB44l|!vP0aCG&5U?)IsTq2b|MRUPDPe!q2OIp6ID!KX$FiBiFJ3&=Qk*51xWaZkWv z#dOhLcQ>wfr!~Xp*y+os_Ebv40aSzhnfAok*+8^re2L?{nE?n;p%KtJ|+kQ`6OrcB~;GJCYf1>ODyxj%_Wz z>bteLAyw;5wY?$F$ys)I(gRVBt_q^{I@sIdAE7&~cn{9${$P2blqPxLhY#n2f`b7E zkp`|@;iGR_1E~8b*;#4PejFw*q(qh6z-B4cRRsJ(}P}PJ+3bQ`-#D~ zqPVtuhA-cWauZ=|ZXLP*_vA=(#5qTcJLL~J(5G!=9pv6A{+44PP`cM&XkoY8+kY2GtHz%#Vf=gCwxWDEIja|f z@!$T4DfIS{d-CLo-gdm81!C!!r`9d<@Xxoa$rqz=N{HMA*C{bVnR8j5u-lZXit6y7 zTbHa{UyNIsZ^sF`imNAgPw+(K_4gYp-?(v(i|YtAvsnAW1JWN*3(41LUM-OFE3V+?oBbHa*$0l6Il`&f_vNP<7Mdr#DAam? zy}!~uhvWKw=c5qPmfh{O-b6udb92t0xpx|b*-u^ZqUYlj;L=DryL>Q8;9t+E3;6Sm zW6*m#Id(NV`cwn`6H81Km)hqLx^psIlv83we1d{>7gS=`y(2`im<;t~#jh{usj(x~ z-Z~}=_hB#2YFAGko{!}>3O>#vr9knh;Tg^Q>#yJ=SASJhj;8lud(cAjC4}@a;3-$t zBQF^EU(EI4q)pXD&!7LYxtgy?QJV5J-8NRQO2D)_^B2^$uipY%A}{o|cGsRzeCxF` zmZ_T+c_Bsd>Cvnrs2$9gWu-jk4V6r?&^Kv`q9widlHr=6VSJNb|8u}Ri~(ed%E9z$ z8{}i+PJ<7OxzR%eH>K3Jmby)=D|y2+D-VV|NACQxoccXnZC+v`1D{7+hE>+5q_WOo zKuE>cjV&>qLsF9Q^kw5^X=oFit@Ve3LeAD~PrZ@DX*+JkWGOzKKX_SawA=Yc`{V5_ zVl7|FluEm6ge3CkTiTP4HU5jM_GZu!+>=fNwDWHA)Z)}m-JGMD7cedlTp4d7q)m9&el>1t2(R4iA9ZvJ(tW+||_CnbR zqVURDZVe!<^8To^Lda2x4B^9OW@fRDrS^ULR<~~5!ejs7hR0@}O?Zs^NZF5;sKv@3 z?5=t3Z%?x{6<%VN_TU3p8WJCWrYHA~aCadJK$pCZ1ce;Ug>}OrCdL4pT>qO#BCZ)5pB)<;bCsroYkE`xP%3E%ik_&mva*6# zp|tMwHUVcp)EkBn_AkKvEEW3(-{wF7?FKZ5OX_*aSTlPBaf z?^F|n{KHjXPyPb{&IKvlycyz?Ys&3>`uunhEp`}ozs1bvZZ!6Pwfgh&d*P6kZ&xwes0cjxO!mu@4^1k z!P)6sa6TtdK*JfNps7h485KoswVyb6@%hPBy3Mn`qYz=u@Gz3!z%Qc3v97E#e18SLc*l^-I zK5zxf`tUm+)JL9~+WT5$exXOSNwXSb&k8`I+~o&%61IkP?1v-H2wd8fRSb_}e$l4KINC z2~2SzA+F(Ef4|fH*LJviVSDBwY_DuUs@!r}omm>~R(0ae!^)$dpRRo|9(pIQr2l$K zZGxeeP3tXMI(V9zpL}m_ZkBPom#E{??0<}&H`-=umSN4=3%0(D8L1)^8D-`C|NfU# z_n>}7^G{Amy=373EKs*=UbQzrP%QT~HYFv0XZ2|=w=*pNQNt~$XRyzqOO*~Sp7PcA ze)AINw$U@3D!1;At#F>Me?-Pg>^W%Tb0cJ=`0x@g7puZzPGaXY5)>394Gekyyk$Yt zkL%z=N5C(H&uYYeG0+1KaP{*LOvEmKA`fo5diAQ@#zK#?`mU$v zY|q7&ojIKEtBb{V@eVTv7@!X)3JVKk#env2RR(<6Tp%#BrpjUO?k+e72uE8r)%I+y zjJ*`FwjWV`#3f(LM(6z*>L7`7zwwccZVmZT{-s}~mjXlSJFt3H9*#+pZbx7}!pUiA zX$ANGm|Xa9D@rq6l~MWn^}uiH>NgFSy15gN?ufy{^?PA#qM-9m)*ZE=nkM}5-FHJy=IPu%BYm4_>^xCj%T*L zIvKnQWnc`%kka+6@C=`g*^uz?8^ihX-|`buT7iNBN47p66ZpM4+2*w~lOf!T(bhg8Rrp+JeQ0}B>+f(U_Vw#PKnmu7wS(p6da}qk4kd~?X7413*hX5-FA&OnO=3(= zDBgqq&l@bgSl%#RovojD6iWK&=fhC64swyYLHO_$l)HWSm$ zW`2AOc2QJP(#pFlswBVq7JBKOVr$06qm+~+uM6#bm6d}yVu9X_miCznw|}zzR1Xvh z{V4apzk51ML@8ML!TLnsNIR70u-C6?&q}&}q4k6(=p~#FQUKs!_H?tSM>pu{(@{Y1 zii(P)x8pA7;RP_YXMx`ct{+2y=z;2VrtdrlXKS0W3_&p(H_@as{PzG;`grD&LG9pH zkBzzcyPK-2C3{TawYl)liWD3`t~qx$7wl&+PM$BmI#E>_VP)?C+ZJ^XnERRc4tQ(u z-dkt!``_3}6hJr7-W_KA0*j^Np)EZ^VJ<;k(?6g~H0VXGHCP zw$FJbJpY<{rs#8ZqOZrDDv!Loxe*~e0;5vw%Ewpd-1|1-I6LO8Zh=-}Py&^|N~w(@ zAvx+z+Z12e+Daxd5uc$N2DcJ z)KnM`tEbAD^d<;e1UDJBV;2W2x&_rWCijS2W$TjG?Pv5dG&#lt+@w9`5oCV2hA>w> zk5@~U>J?*$qL(o#C)e=eBYr25E54f!1dlHHgX%PsQoCM1 zrY@)BOEp`pfuZMx0pk~{l{pP9g9hU>PmtLpqmlXD&xRORd30z70J^X}dDk^kgxLek|T$qGuzY*+~iN#`AK0gIbg*grZ`+n*^_tQJqli*lJg6xAhL)Ls# z-)gKJ8bOl>P=bz4oG%^S_7jjaNZ#2p>Elcn-1eZFFtJEIY+n8JVyOK4_wR-^KBYUi zBexNqlq@7PwP2atY1m{J@it5DL)|C`w9HpdGlUOdKrv zu8e&R)+mDaa%Ap<#u^bHpEqBkUe{wlTS$5~*1jD;^RKTu+u+Wylv z)t>OaG2*!etd6sDI82>fmp{v^kfTTTj|4T7)VaM879wJ|fT;lOpH@)zR)WRS`$?28 zg7x1tny!KuXoSuJspK|NKXHzxSo%p!T#|f%T$vI(=jt((ZuS;hG`UJ2;;d^PVVKmj zYK!eypbZJx{d_1W6Y-k)7$-C&2Cz<>fk*xxzj65$Ah5G;*gcxh!VT3UGA37Bo!Gh( zgqsTeEiEnaUnbhzE(Po+#i5`SUNs(0oV1sem6dH8M@3lt#)ZE6md?5=g>7c8ce^08 z(RoKh!}m&x>(jY%=}ysyaeSPq59Q3v4BA}%7Q0@N8EDM=pXHwkxUxjE<~9R|7dS{X zfCUM+^Fw<2*ypFmvfKUMBqqK9Omq|^Mf~|mKu{e&YX5efi&ov{JfMd|$o=m0S7w+$I0kDc z?o@Kb>+k3@myKCHq!ITiVJpXPcY8WDXBC8YBe47f@l?dM3<)>>4Kl!)If@xRrZt+&!4K7t@}`+qGO z@BmML{|kFcdoJouMnptN_^k7Q_DqF%O~x4Xh-DmR)X~u?wC}r&)I%wE*edk9`~grA z2?9|1I5NBRBW!3S&|AJ$h}|O9>+YI0)D%O!L&Aa~6e~sAh&))KBnn@?d;u9rE-K&$ z@+Fv>8T}JPt4PHnrAxstQFSkrG=Sm4qR@e%{@I&2!^b z4@MtfNQWx$>q^s!3%4_+P==LOJIMW`$f~UeJ8y-unj1?cU!|*WqFU%^G>)JdlTW>P;dl= zym(O*%I`kk|6OnsxLOG4wP$9RM(Rd9!gSJA1!V$6?Rp-Z)xl$l3uTUN3#Jx;vc;n7 zc30b22~UH9`eWZ5)Xq2JjLPzPg_qc>{wCp3or z(j4UAYKv-cWq#YP?g7xbO^FX?Z!AG?r9-_J4Z-yEbg4~7W@h^VF)$#)1!3W&2JB}o zrpkE#C>#d-_7%#S-wPf5hSh$`FXHWhZ-24`s)!(>#EKz&g3V39#a1uM1xy#%bg^=L z$rFY$z5>jJap$5=dT3=Gbo(~L8)0WxY;!?2x@*3{fb%E9CZQ&DCP|K$z7hZf1J3>I zTuWUH)Oo4RnJ(k?t;sn;YAw%FTlmrq<&*~;ik#%ee=jAkPJLzGL#HtG-8< zuy~}XvxT*%s;XQ_$SSw#;g=!CHnpU>)@ms-k~)O;c7s#A6t28!gaR|Au=Tl?rMiQ~ zop|pAc^sDW-5}_6Jb_8Fz6?NUgrf&cn0gmoJf1&)zH*maL`1}>(Pw)yPPkONe=@F&_i4Y*SB00dS-N;K;6(d=7dy3%u?_EBa#Sby=lC z>uYq1Z*N9$-XE$IMc#tsZ|4i@%N5IJT0H~*kK6#x#y?GhXr-65Q@&od>JR^@3360Z z?dIZ;edb7(4tMGGua6HO)7?%}dPX&Fn;0x))ruhgyDK+J7n;}tl#8u9(4*}x1ssqe zx;gr48&EzNb+fdu$?i|aVZOl;jLRR803Hx)Z*Txu@ptNtGvC@^iS5asI1H{8)WGEd zn^ZFb-Vr@Rz_hPG^t&^4aqB&JUffVte?v)&m6+K50JM?GRD7xuWKx6hj$0LSo0xz- zdZ2x9>Fi9x;X-6>D8i{vl*tgH4mcyG;b9;5dGPvsHNTU`SeP|1}0DMJf>28?^W%N0Gv1 z=EsGG&7XNj(s-O+PORCRA*n+tjT;QbJw;Y3P>J9ygdK32X^&~ge$v0T+(!45LER7M zwG#RH*|RcU--^QL$D-YncH-iiH>?6A7L>dxjiDHahL+@}elK^iXp&2AyfTs^;quuc zX~%JORt;4$ww!CJaD&!m;TlO2qup!gTSPCf$LV^^8ij=BlqSqkMy&Y!z!U)z8JceE zo^6V94+lx=eii75E5p7^-bqo_LtqHqAFi%Qli#DST6gYI6Tf5u8|RdfF%Ek6EJtV$yJoQ_#^HqZ*?~rM10FMyQ_F(|k*50d zdpI)_lO3ZDUa*Nfh!&)IR{4s!4U$Y@c2roUICiW!`N>eZI&eUbhBK>pSnRR20Nfp) zW8?+gauq2Gu|yAo1lke*sEpVE(m#ZJukrQN<3`^+IG9O}zi$hy8qZ&g7TCRlf-A7< zpwtzI+B(^9NktwkR?c0fV`aVEnIe1Xb3?;5VAzgZPyP6sgi~e7?irFR<9q8;+T99$ zldBK*iFo&p`Kj}m9Mn*iVcU`D%QLd65@;{f#hIE=M7SJL#s`2X@U_}|jW2+EXD=o? z`aF72@GXCt0`frL2)48ZW4Dt7N6;VeqMGU`TkBQ{z+J_S$pOXVs+>@b3=~1`vW6?5 z27L;mJh|K{z2ueaxwqqf>XLqY@>^F!r`(mRwbCwQK}{ojwA(M2Zk)RR7fh8sZs3%E00?kXd>8Bz|AlyvG9hzgu8h(Fz(mM`qAPrnwUOYhHZi|3b z@0hY8KIw_gguLALaro#cQE-(#Ue?F7P7g$LogO#(I>i!*>5K_nl2O=zN1JVX$<)Sw#kl(0l4ABYZ z{I`b@ps!6poxXvVGw9xDBJtpNV46HObYO3AYQp|PMvMRk)G7bH9n&buVmAN3B+zv> zXWU;C>gpma-lPf#m}{u2wny}bg!p|$)k;-=Uf$FAsPG)!tar12?0%yD!HU#s`ic`a5@};p--7Q2%>5_mvVf4_9t%t z@d3OpQX(AiOW^dG=(vwR5BMeS05KTHLm$W%ys$QC)0vcoS4))}D(HwC;p)x3)9v!c z59{qylbA4vau9neW#s{s8Ij!EfAPY9AsG5;sZZ&LgKS!)RHzgV)_b-I-38b%8~{1i zGGC%pf+Xb+6%`e?K|FBUo;)K1Ed6cPcI@6pUu>n&EhNx)spfQj9(~5-ry>+J@LBCl zD{?V``n+5|93%kC5kWxQdBe*rXnqK}2ktB)^z$PyV{#-j=JN(+q_M>W@NeX`AQ}zP zaK!27F`<AF1;XD;mN(5*!H4F}^)q0t0uO*aVlARa>)0J|czd)^e_P}m^J~3hW9fy%8 zQ2=3%0x_TOFO0?W-!0Kx0Jb+Js$X%U>J%Fr4xcLJe!G{5LUc!r-^w+mDp*Sro!2Nh zP{Hx}WL8GX333`%-SDndd1u=?M}kEOCR4@gocKStVbm!@j2qjm&jHM4JAxik8hW9uW$!{8zzlv62BAO)(|10l9h<|| ziLI}JCm#aF;!)u>i5((1*xDPs2KjtQ2&#!~(jkHnD?%9^gE3rBeNE%vcCAHzGIVW+Z%f!&6Is49Il$QxT+Mwh;s%NIFF4ssn}SE7izI; z(SnXquyV;z`2%_u6)ca1AQLfooWtP!`SVw{dDxH6+9!pCfR1o6)o=Bd)3dh|9}Ndj zF)+juI9{v#=O48YN$8ca#N~|}d2O-$N}!Yh?+1e%Jr$<>{O&@F8zOc+JcOo=kE!s` z*!oO&b{EjSiI<|RNtRq5RbrAgH0X^o@&|LwfrYzj^BG}PkxG5l)j|1`7aIS1ExlAN z+=gu)3G|X?pZS(XX5E!S%|33Y{p>i4(5}BF=Ixe1Az*uffQQcstpEA0G!$n;xxTR; zCm9wVUUuGbKX>IGm%#f=1h7mGdk(qBeM|)rp+9T@+OSIMj>N>|!wt7JhWBN~!f?UK z?in9^c3Om3giv(N^5h=va%EEN(N4lB&8V7 zYp}-SOse$r&J3Yw@ks{o{;VDKpm2M`Q~Y;Nfw>56264($`u$u+;TR>Q3skt_$GDZ7 zD6Mha22}!4U@6#G93p)41j~zxuzo z2x+vOdtlFTb-OwM3}M3x*9*vRNZR1X{}AsK+3{OlQXtK8nY4wBM0^?FSb@=_Kox44eNMih;H795;Sgz6cIbFSZ)%(`33`;T1> z01}ZAkjmulTM)##y&u_vET9tT9slHzOeoTR{-IOMT$$hRV&`nV2>F4dA#dNZqgvV4 zNI;nb5sW@Z8m{giKYEsAs#iANVkjO#A4ZVYSpK=v+IgK65;{dgebxW~{lYBa0`4Gy z9{v535%P^7{k^Dgn`Xkl8LIX^iRSgN`Jiu33}?NfRm4*Bh>GetMq#|W17j!<$q5Y;s_njp_Wg>jjMWUyJGf-_}ItpnIq zXGHCyC)xeLjSg#xka<6D`{?$q{K)+9EohVCd}r^U9*38qIRT^-^VCghyx`s^($rc~ z21Z8PTZ5J(t|M)dv!_=9&~k8altYjJu9^#6?ZImA?q#WSoUOM1#$Em@uC7HpcVE1j*6=;GmvZb?i-D^>mzMP+Zg|7fV*A8hZYM}Z$M=-~da+Um3UeIGc~_dFx<)LDO6L}9@x7-%n!z`f0=D}I`z+dlb4`~?&#LROZ~$m znAdSLK>jj`V5_?4PTSX|p_0lks!3J5c8c%boFD;pDf1?}?7(;q#b z^OXIAAR+N2WW0n4s7D*HAMCzZvBdN&vI$AIsZ5o|PEdh8YQh0PkswECSVMsYXF9q~ zwUZz{IR-RfDixK8Ze`TT+jO3VVtexy`U~(@a)=ASI!Q}>xovl=D7=Z)w_Ru$RvDj# z%xd$w*!bF=*-I*_t9Wn$0UL56kh4*Y0TmA7M_Dn$$;UOJz`TUaC@GQxdCWmTA7{iI z&Oo3K^dG))EMRjy(YRX#En<1S9DUpg!Zu-*C3zx{Zfufkhx}Y#vui@GU1ECY?`Ekk zIbyC)?IqpJz|2e@ut$Y(>f=dZdpib9CD>5S<@~YuK621kw?AokLtYS!f)0c>`MnzF`6@LfZIqFw_Ms? z;b!x2agY%#cJY#-GG{h0l_?O^9Hw?$H~92}Q0-kD$9RHnlJ=@H-rO9(65Yv@QG~R= z*Y@wU5unRv5>;aPRt)>HR1f}w5HMRfR7ZF2x|hS!sio!72L5q0FJYky)+eYy?sY(* z@OyIyGyIs^K}|gPalneuq{fOR5frb?Rmdf1Q*eBN1|i$&0`?Hz4L^s$0CW;3c&Jat!;r}4zyyTj zHuZA>VhsQ=eAfz4lN$VK#WViJTA8mm@?5|XJOf@Oka_$2TR^G?7Co^nYgRf>X}w@6 z@wsCM;y_*egf`mV@P}QpTbab2VxK9T3EXf>Co3uCZ8iVhFO-2inA&QPSviz~Lk=Hf zK>yBkoDybteN(*vUgu~x0sID|9Zw&=B^pK{WmIg-*4WzwrQ$g}_00ajhP`!|&W`{g z=i#5AO(-!UE`OKJRO&q3B5f4b3BWdV8qRJMwh6OOow2L|>caHv&m3qI>O(ZgkK@<1 z%A8DA0Ll^O>CKomfJF0SOYC}Yx5o=A&5zV!9FHA6dIBnp{sIaod#6F1w1d}QI%d_AmmgF9VN zxN3UXxT!iI*|cnRgC8@lZtVo2KhaUoA523^VA8)zbKnAp^q0H5pLEs?0~h8# zdRpru7)jPi?Dh&E%afOtZ%zarlh-nJgOf(nn-whA>v`@U(_kpsK62te-h0R@B^TR3 z&Rdqy(7&Tn1u;u)6SQN1ZL- zf2=d&G2XlnX~(zu9?|jf_p=C)>n0RV>$%Urq)WqRF%~#c;c0_et(SN@}*YTW(n&eO2!?c)AfODT{7wMfv`|ki)PB zGRQhd05|qGxMsn%>uWAPi=t{uc6PjwF*kpH4G+Lr3Iaoqp}l5H0e8H5_bwA8y>vfc zY6=Mp!w-2DErCu*;$!5I4mSqW#s+! z3Yt#{TcM@1x^sCSN#W6G!x^wV>WIk#5T4r#elUL!?HF9kY<18Rkhl4k9|Vf$q#=+2 zOAdlRO%m$giAeMk zWD2g}y_4uK>7SX!)cEN23Wl%zG;(Haj3mB=p{C${9c^u8$n80ftEj2bcO;4y&(mOQ zQe=IPas*Yrh#vHS9ea!;2*toR;R)a;pMttTXFVmy=JlHddf0J7U(NY(Ryn_Nilaxh zCj<7kGb|2ZE@y%7|o_scrAg_st8&qyLRa8!5chiiZg zpa)PKKi&v6f37fP`$j*=tbd`{7N2@A4xC0CouF_w?p92zOufZxFNP&e1ss4>}Sag4eYpQ;gO$qDQ{srli zIvkCfgyW*nL_)A6q;4$WwRXM$JrK)X_B~kinRkl0@D2m!(o0ZGEeZBvA1u@=o}@FQQ^%`e$W*bk9nAs3Nq0b>D%R2;zleFY10lMFz&pyc1jI zN*w~$0u&?|i_4F{V)hvR>5@S{1v0Dp(gA|aX+KlHZP|nsg24cWTB3+8XJllgGT=`1 zjzf{5MRZl6^%glgc$BS zr{r)-z8HxGY?Kr0GQr5OH#-LG>ICuyF5WeWHc)RsIW^lbTs#1sf~irs%Y=dhov~=! zoyZvV0Tx1we1XRC6`<*bpk|3TZ=Fw{IyK=Q@TTdI4EJ7HJ{t&(-x$!YET4K}!93kNLG(*Fwa3xux?-PcN0(RQSY&_<37mM3VwlX?U)0yxyRgM)d zTk6~iG=2qLU^gA3Le@Nh+p#nlnIfA;MNl|}J51-Kq@?<4r=k;F4D#+ymWB;#K!#|! zDxeq!IWDweY3a0nLnQRny$P$^RS#!KfBz(zEF1BE2?>Q(&2)L51DJxLwt{di7m|5x zXWe~r(&&O)fJbU1rq*u&-vPe%bm0)pN01;OLgF2lE{4Hqk{M|6u|CK$WUjNGcxjAl zq{u)J8lw2?z*Gwy0m`siyxsz?oHpi?%?2A;dLLwzBZ${VuK}70(yRT)zK7oaIx_Mx z80cqqh@k)In(Se#wp(l0xm4p31nsI;Z%o)cCKze&OhZ-v`{#Z5Sppi0(%x*ngfnck zAE~Vwk5^WX-a_Z@u7GKE1SxGTUx&EH7(llpNRpKM(ZCg*_0y(apYZYn;otHC%;d<% zo;&EgQ>FwlTQ%kYf((e$h11yg+v%!FRA8xt8eo{Yzt!IV=-eC3q zk|Ag5r$_-YX3+DhVa4;Z7W*z%kSjF)I=h2)$N*guPf$`+)FmCGsaSO%s&wZkSdv!W z|ISIkXK27D60!eDrO;UYjGFm~S~o;IuV2q5{4S#r1c|_dOOLK_-$n|Y zhNJ+^G-{isDIV^{fUg1yML>Vpj7Tap2(M6g;3{EzNfIukD=RCI*Ins<7P?f}#0s`x z-d%dAQ?8+KeX)pBGH~#F@N&E$bc{Cp$W>@5W>Ap9qbzNbAju5+wn)|dcV(PpP>Re- zAExmT#$!iF72vgk-m8|OEYd&m^0rV1AdfBwchQCiCQ*t<9aP{P9HuMagiD-9hUfg* zIp0;koP%lH-|l@wr$grS4~-=iy@R#|*~>$a1}&4fi7jW#dOJp>JIn+@JI+>)3YTy5 z52x61@QfhPwSRng-qk{W5;W8L6VU_`TDn`0Jl-ZSuSL`)H@EE$3CIwyDxWe$hbR7n zsQ#N@G6Rc@{5qd!=;6S_a!Mr-?V)k{msPk(FVK2%7%_1UqoG#4yP;?`~-ieaL*i@(0Y2OjWLF4HH63Pd{0jzx{RxhOxGO zrK5w6PWXp4$KjpfB0?T;^V1YtXW0?#}|Ci0T| z+yFL`m5y$-ykl??W~;Ju0f5DNfB++0qH_B-Dbk)Kc@kOvrbM%SDk>SAy1T9GIj(KJ zy;cFJx=TP=LqFcCje$_C#KAG-Yq9p9EC2^s?F!;iD{=fr`lZK?AJ-?GJ9mzxAERv` zukPg~;WSuo#v?ug{j9r?28#iTkDxikoFYimla-g+)u;}_g)MpvN~qPb1YNJYxX}cg zl)`8%oSiA*7D!t>$Zybpwl3jeW;&Y)u0@H%Qg6;_Aj+_g^acV+$j%Z`jE*4a_T%kt zN`>(}1l24ZeZAQO0H!6$cx%VB6^lax4iRFY7dfez`DGM{XPDq^h>MURkUQ*!oNu%M zh81}LnqBHF3~zfwjx6Mg%b0SL;||#{ifmWW%*rhK!S46vCuc*fM-g0vK22u`R=`Nw z2gd{0mYYmAFqLuzWZSdAVl^+HB;{U3n95<`4(fMiE39d9pmMfV8ou*XlH(4Cqf+%19E9HR9)b`842;t|@I1WyvQ7pEzCXbHZQ&o7QigJ1Vk!ltGK+qiteW&a*kfAMd;IPGC(Y zylA5ag}5WaA3Kl=;O7X!ccS3nrIN}B6p88g#%oQ=n7tY>z_-BVS48iz`&>I z0I(QL&aQb`A3>xZ{s{#Au79)2W&FC#TDx%ATCWH-#8$2Xp+7qpKUZeg+p4(F}x-kOhU~2Q#zZd1HvmoGE z+JOBGim%e;8`1JJTj%Jk*#2SVjI^AsaWG0A1~RLS3PzEl*TD3qT#>!06A`|Q!VS`@ zoUP<&CWA!Y1=eSEAZmyIPrD2fId^@cj6P@0s9Isl+zE22$CV*gA1w~Mj5iRb+m0fc zTJMAVDq&z+8JaLP0Paz!I3X`zDj6Fmr48=(FUkRa{wnFzw}oculv0s@5*Y!YSkKm0 z_cmQPO)ulWTmH*`aZnPC_CO}_omDM-PsTG2F)ZJdWPDk|_@O|U{H+&SDleBn$7A5V zO4hj{=6w`RO+oLKMN|_-T0CG1@L#jtBpxuug>wg`GZ@zCnd8kc2^s>F=A4kw37}Hh zi;!ZbMg>SJBvU8j_+``T`x5oF9t%v6tm0rX;KL*!Z|(+g`GGpu-);-JOj&BoIX8sWx013|r0sR^<(ZJU5J|NJ+pB zEoj;Sc6`;)@C?Mm-^+cBBmayR)E;WcJ49d9K@cd2hY?uCKR4?oA?OB10@S0&5J`jY zl}I}Pak#i+9NQYCd3 z?(R_(5=TRZ4a8HvyCoD*VuYgKun~sD6&-g-O^_nM-~}O5m$$@ z%wCuKZ3}@v{c*PC=}DMQCe_n)B3DpeL@zDip3!dZMGz*h!(X4ABY^>Wx-x7!_8@S()Uh0xV^TjM2MN<_u^t|`enPl~$_)kiFO*W~Te4?+bBM-ekTMt$ z;zIWfibAVXD80d{={1O*xQc})%HqK*H zbM*6yUVXIbN(nB4KnVj}Jl63+2wbrGEniiV-irrlO{-|eQ)al+dnnlMdz3T(~sY5*am&$+x(Qk(T19QfY7 ze-D1e6R=aKJR~L_?O##>ZL|@M&J?Pf7DCm8%P0dV>77j2e~S02EY{pC&M$s$f*uXF zX0n@;{*T6;lqJW2UblVUhbf7~_j@+vdmn?`2vD)H*<0{sG1G>qztD=WUHwsefs^w9 zE%R@|;+k|Df;&hY3V`dg>ogt?LmgH|82E$*AKR-LLIiRe-=L|Mgs_$<7G6Rgi@o32I&T!2s)>%Z_hiV}oH8jlvfe971yM zmfmK0+jeaaQU@@mL?{zDLd|qYt^0LiqFpArr5~@8XMsQ)jPcodIn*vdd;peu>M|RQ zyA+tfchrEj+;)1n=GJ-tPq z?DErB0Okibyz5M>t*4TvWxCut+pVVBliX6!y5>jH)ArYCpy*nswChAj{^D(dH4CF7 zk7OQrwz+%GQ-vbZyr(K|s&I2Rl^zcLPHAV4j+R}mG*s<@1}=-uX_&pos)DC;o&rNbTAWjt@9WS4L9dI_)-o| zPDs1IxgG9GsKxq{zAajT+-BLSV7eBhc*3^tWOgjeq#{@6pjm?d_^c6<|D}g$TMyB-`>AC3(70n5O{AQwU{k z2#jrs!pJNDd^I)nyAD8Od2{(bBhinw3sHw`e7827 z%$+4L=z#e>g2Su65u*m%;u<l%j_81i}> zFb47&4V_haI^T>8s>Kqsr?kL&AO~yv6W~NkX23pA>gwb}C}7pp1N8*uj>gi)<~?+Q zA}3EzPY7uL+5NV&4&%SASwF-qB29<=tWO@ro7u4Vn%gKRaF_jynv747%3T9^1|^bjV}#<0A+uN zMZj68m$VJ56{RjVRiCb?vI1xrw_B#=3pO)m`p&^K-}&r^zDuw)8&$)V(BjeK6b)D4 zH~8<`5l;nplYjoZC{#}N`QMMLMtowS{rBT$FQ^s+|NS_Xj^zXLpnpBzES~d;H2c4f zL)CDKaggNSkDp0z{ta(YP7BlmJue`1FjG0^;F-&LE3$VN>4nV^?`f8pJaD|{ETbWJ&`=STs8qJf zC@UjENTrOVh*F8{tdI~TGcr>~C3`fakP#w#Bq}qc>}*1|gvfs0Ki6}=p8J0OdH#9+ zInV2ST^z^ZcYMd^^Io4KI}=Y}hKWTv{(im0qxjW11qBDGV4>1*Je~nbRt*X6sKFD> z6rRmIdJyv1JjO*aVtyd##MoeNc~#YTV+>?*E}kH4?G~e>*(3=P#8;}~$eic;f@d=1 z*qWYXL{!%`*ZrgI*-6SoN?Fuwxs5r3a7bPO0o0@gsT+i0cKp!`e0!4iiN-yUj#;;U z=_$f8I7V&4Qc3@);uNXcB=cBjgiP#;?w-~12+P}3U1|xpM;lM`ndWIu5e0oS6GH=$ zeb92ztPmQEl&h$4Z|X$)TL9Balz89|@v(6(Ey)4^imwZLNA1xi5YII3%xOlYhDn46 zU#cCvwH6R_xRpqZiZQ*a#`0{PFn_=)%;#5WWYy znE8D5>}wZrgJhce2{%Cx;o^y=)we`22vTq*1qGY~2j7Mh7LByfQ+V&fV3=CMO>Qw)%-0N-N<}e%I$9{MWNFLOZti zEMt%Rf`Mj{S|KDJSEly<3wk+Hp?nmf{Xva0>hQq+4=9rXR674qags==%ro1ylx1XO-Z@QPhU0Mn zM^=%Y0`E&BZf`$7O8>2JUy{6V_mYta%1C}SjvZBa?5u&y>efBDsw&{V`O~a^@yiS= zD{C(N2j{j7pa-NCxm zQ)i2Rbpn~gi%WLWB+~!qNMy#TX3a=X-)GJI#H0>qdGw@r+5P~lwGbr^+X9t@n^SIL z)asY|M7gLf*N|mKn;nI&WnvD>ybU^G-5*Hl&w@?dHv! zi&^H)mbMzhWrjq!TGBVs>Y!Cv=gP{;DDX)lf?y*G!i85u*R}ylNFOvDq};UW6*zvo z!chObS;9n0n7|=YkpZ60*VYp7vvHC1FiMoVtm`FlIp}Zl^z;OT%ZBa|=m>>%r69d6 z1KfndRdoo5V>5K_-&_d7a9G2P_v~lryU9qPK|-4lvv&`+8E#?Wy6=gXqIk~|d;{-U zbc$KZiiML+Np!qtPvIvuT%tq_#M6R;bxYhNNquMp1y6*}Z#FU8$Jb$pKr*7jAgo^N zD8YOkcXZ+mTs$T%-T7|v+Y9NWnF@g|{uUYQ%cbj0FYckpCy`K}Ckqb$`jsfixqG+Z zFcb`i2}-Ox;!&d(IWY+97pO*U8T2@KNQw?0uM${+!ziwOvF7-z2ywLQgk*rCfSJFd zvr{h;gntE0RAk8mpDi+80&n}W3_eOC$8v5DL#AB#@TE{*1M6qFvd8A|S}KtX3ky*T zxx=cjdkgKA3=d2KTF08)LVAVoB1<1O7ZNEZCWa75IXGU*d;D*Awn@eI7RP-P-6igw z@7Rf=Ec&y-P?WK<2%l~DU(>3<(MHHM6ck!b@AyAqRah{gL4=^3LPql$Yc!Q8QiPZ)U^Q%`!8iCWeM64i~XYX$$x9a7+5zZ!p!B)KiS7}P#m7w+4 zb>YShUftBBo?wnW;G3oBc*14owTL?)ZJSXlvBIbUd?{Td&-CP&&V34(h-? z(9BifJ0Hp+a1E?o07Cqz?}jq0748Gn#-Y}3rWDFcYu_faF z*!C~tGdq2;BC^xcehr_F(k*(L_Rf8A#;nY3sPK{^<+n!{iDU=e`pYh#AmNy3H9Z$~ zd-I|{5>R4n@Al;qZBtUyKj(5%x;KIA4zY_Ui0YM@8**kt zMU5*tb*Ws^((li#Wcjv>f0`FZrV7bt{Z=mSB*K&68`idY^V>%}4*~*&Rb5=AxCrIN zU26epE^ZHhR>gDVLY;cTTw+8TpQLMg5Q@Ogp+{Fhm^ppfwW7kRc5oI`-^Ibg_wNUAKc*bkL%S!>Cw;3=?#0azBSieT5Q%NLfoYet z6O?zA*&$c;G}&y18T#D|<6I-K zo#Et#R3I^H0r4b#pbZaNrvjaLg%(WeMa^4_bsU;y1-vFl;=Q~`nmwpkgHU~R7qTD& z1mqaOtI59)Oau1l))V+|_)~s)8+CjRKsWT`=%OS%ecXL>Cr07;ZISQGC8ToQn zm$5fV4r~9GmQ3)srOc}?@ps6TTOC|};jiK~zXYj{Fch}r8y<-M-}ZPo)nC3GY$2RK z-I7gHZ75uI9HUu%3oqW9VsrN0UlQJ|sdR-;%Ui7n(8PtIuLbDj^%YkvZ=e@TnW>wz znteQoLP^5~@{ZtzUZ_Mh4RPOSn4$9H&mg`2>w;=E(XlyQtQp1!ZtmS6XBZg1;x9?M zIR3sp)Bi;r-|^!H{8p)}{&w0cjEj(%@-i^sE<7{z@fpol=p+7H(Y_ry?>X@J=pdogC$D~-vA3j4r>Pyj zz4sj%C?96l;Fr{Jfvn1@!c(>KUV|MRtu97xkHt+JU!P5M!EyLLMMV)vcpOSeg2f#? zZ1w?B0pC%7lRn~F9CTnfz4GFAPe|$cCxqZm_p9~{v??9Nh5?{{l~At?nQ}K)D3Nhh z{b-0=*=_1OJr4T-j_%_cle}@?b}*m~4dw4;^)=r9B5q<*?EKld*B@-J!vwy#yc||q zS{j|$Wt4sG@z^n(1DYP-?R@V!U(l)C5J+uLW*o%|hgW033|>3wx(c6RoVH6>|=nLeSokA$o9dczk_tZLM!f}B>)Q0o+2uxd_@ZTdYvZlz=M_9AKpt;M7?zeYtIu-i!P za}7#TdPp*R1@votrIEw)PX)8oiE`#(e4Eu-c+;j97nD;)cPu)aER0+aMD15s>>+?0 z<2}Sm)mEBx+1ZJzZ%@rbQ7*;dbC2>=RNWZ9)YToHvxSdd$|ztEEa%O?LX~N=MB&k=nHSeUTKv?01F5x6p{d4E{IFumMX{ zo_>mG#jyf`$c|>kWQlCu@LG>V2w73^xd>vXlNE}z{!IR1+PNG1vvE|L1F~A!B8a2_ zySg2E0*+4>Zw*w^7<532{TL3>b~AaaB(9yjSuVij%N(|`X^O_0qsv0rUv=0N>fYxn zs^+L0MmLJsotdXp)nq5y-l!`%>a+PiwQ$e!!z;&QkKMX`TU3?Zx;-84Xyp?Ov1m0( zcHcUYUhxqBFIlz0+X-mAUtV~Q!#QGs@9ZhC4PuUC8j=rPfryZiaA-C~{GFNkj1Uv+ zj$3m_B3|0_66kxG!!9O5NB}nNNs>4lZ?G|owl5%-fw(8fd7judJ?;J@JgC9|a;3=65#-@jQHC5fMHxP?(}fO>y{hD|HYN9-B!h%PSLYTHTb- zos-wninMHp!{HT}BFIa#t`C4BCuSHxN*q9xfKVGWv}?*vJU4D_c%xq^PI`q}KgHq1 zi4&C>6rby~wY7CgiOLbn zMui^cOgpcxalI9hG~?zesK3+~-wvX$ZZV)##)8`1XXvM=Yh*>wAane9KiZT>-u38F zC-y(g^!H1rfc<0da`$LlF!wg>*x z1Z?;JZU@k04xI6^s2w@5uzy;TQr#&{Ni%wJF;W!_TI7ow&k|$Lw?27 zn+H)*F7Ok@;65Y51nndElJnu`Enz1Dw7Lm6cIx8)Uy$^_A9%lH(I+T53ZD%PlQ~FG z%crjiiT+*q^QR&ACC>y>NsejozdG?P&rLu8yhF}2BUHoWodOSjH08Niu7j~-DrYA^ z%gqF6SwT;C1YRMvgmpk_F0DsU!m6(Z5`#KOURZvT`uVIb51x1+3<4{;(m0RrEIGqo z#CI7>ZJv)Y@0a%|MD~(_9TeY3&)eYEDY+qiuULNpU8GiL-Z7^&T%r#d3E1P2IKVl; zJFvceL2q`W>G(<~s?#!bhsG(O=|Nf)QV`B@@%fI<_OsClS zAmKY+7I2tE9^bU_h1X|8@1qqWBcXpJk%+j!tA*%Ibv@|oYHGZB&l32LvJznPgO-iF z5o`F-FLxrAJ4}H(=w8GlxiwtRP8t)H1n&v)3$~Ngp13p%eo}$U>^=hXAjzFS9}wLG zhZN}}s3`s@Y1etoP{5wuu#f9{Kp#Nz0&YoYEW}Rz;~G1J1ClTY+_ezXj%6ktO_1ca@SG6!`86Qnw7qh`3kGU?02e07AG$mN(GRkWuMZkzl@Ld5tfbe?F>ABLNdJzl^a;u(<*`S^jv_bTof zJ=O>vr_>@8P1RLEpby@lBiR{*OA*E@-F?V3%Sl%xM#f;y(B$NSQTb5k-|($NJ>hbS)Ln>7vhm}Qk*=B zYQUfq9;ru$Xq&jX?||}iGz({^w|&d}nj)@3i&CNRs|_VMq-Tp)TghC0KH#6o;>&}J zLfx@3VlW9ml19OuZZqZ9Wfa~Fr0>b6^-t)awg35@KRLz2BegY%Wi+c`!g!Zrj%BRnXjMC$uupb1HMHu)lU)jw^ z1_cJz+dnP-Hw#L8@NDVZC6*T#Nwm`W3JUO}yt|Bt@92_OQLrT)1SSg~qZ-+@z2X5> zVNaeA24t*3tZ}JM_I;eiFm@1Dl8~^l0c&kG<&*ruhXOz84xbF=g$$|lR>;=MBmEns z6|VzGt4Pqr@AZc%synwEp6~BZo0U`OTD-!Ns8IHQ(^3Ps9@dJ-0whZ@&Fs2$a#daA zwjO<5GH@AbbMwg^})*8sY6KuHzKV-hkpCyfBJ1`T8YDlmQyx>5M;@?FcK=) zX1Y^|-Bzm*AbAl04JjDj6Cg2?Gg%TI-UJMqb@MLoSv%{8xLRvQal$ryxn8?JAHNC~ zPrYK|A7B@np~r6YQd2!2Qg`p0g#>GSu)M_Ib1#0N42M$U3_oIt`7g#m>9dJMSaHaM z_h?+yqhydi72Xo#hXub8qp1oC;)M|!zf*_}M!t;WUp@5mDHl)*r8Z`~ea@84!m8*3 zv@$RCLqt{0(!*6?sXV9v0we5D9Y4>M3MUdyn|pz%jLzY^a9IcFqcv{vHVnLNYz-$& zEe35_PV4bOvgE;?9Neo&Y!BwC5bA7gT~tqeB+;_ufRyO6Str=832$GL(#khf>iZd^ zkFLKket4A6wgs0?;CK83$_+BF*B$dIe+2<>Lwp*q*r1(YTCEY!lQ-ex;m&N?3E9Krun|#No%29SjQXPWSY} z_Lts8G|2t}!omUm{(zqoQqQ6C8C*pNwtJ}|@dD&cDZoz|7|gC-tzJakEuJ=jk0&52 zYbe{3Z^Oxsy_VN{McyJhZa1@*R;}i$pHs^z3XI7)+YKgkKshP;gU@ z5mmsP&?>!J&0~}a_bzyTCDPdNJA=s!^QRODZ1iSN@&2U8?9y627|Btmn&)$%yp4?e zGa<$rRD5!~nZ687F(VP2AYu@GkGNv4yMUx>|Av-+sNDm%Gx6u->^3%#`;+X{?bK z&~X?-?*Tad| zRsmiyVJ)baCv0YJu8uC!OgGz#hJ*$F5CRk4{DgTn(sy^Vh9%Whtpkm5)=7{yR+}jp z076Pe5nt51NnK|D12C1DTdGjo?r`pQv=9G72Ql>{ym8L=IcCa-&rh@poGlR#j73bH zNMYAud%6JE|W_VztTI_#rkVgjMz zA|t`!cj{?Ks-m} zTgXFVrI;oqkxS4%j9%+YrlPg+MLmlzR>Q))yqgqwm-){Uk?r@+adX;Y2fp+0G(JqMiHr!jlnkE~e zSR3Ly^Fl{an@uQ6I(Pn6Ds?eGe4E*|%y)GR+s?E`avYRh!%rqk5Gm9;t

U6g1S` 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�ks-qHsNM!01dA-!kcvO&mhV8Q%uV-k!+o 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%0D1VccH`oX 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 agkh2t4ET0krpOZ%Bn8M@d!~X+`08xbi literal 0 HcmV?d00001 diff --git a/tests/files/baseline_plots/test_stream_textedge_plot.png b/tests/files/baseline_plots/test_stream_textedge_plot.png new file mode 100644 index 0000000000000000000000000000000000000000..1c04473949bba61ea49d055f119eed7b4aa039a3 GIT binary patch literal 115318 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�ks-qHsNM!01dA-!kcvO&mhV8Q%uV-k!+o zSLXLG?IchKGa+5&2ne9j-ag_IH4S}2LMnq^#S>mly8f)^z(>;>MceKlkPntnRL?oZ z%{2;_sx0g+6oK@J3Ss@_REo1!ye_TEwi%0Cm0FDhF2JJ?7ulU6+h-pv)4!tJ`lX^h zoDLQ&jlYTK;!^fmjAC0_q@baJfW3kE@gSZewmwIOeEdCSRpiCbV`GiwB*o;NK1DPNHcUd zXW{d{=R4moa%T4I+55iNy4Dq`*fb=~Sa=kHqbyCMxoRJ)*Oava8+v+<_nT@!{c7{O zrLpOY-saiH!(!JRN=_&&6W!B6yUqeIkF;DMM(#Zjymr-jZjcRO-*}Hpb}lN>%zi#A z(g#~}dg(56o~nBN`GKDwv2FDwW#Yd!)EL^*ALjigXq`h9?Dgk+g-4*Vz5L$=>MVq4VmH8X1Vqo83X*Bk8}GzRK1Cg>M(ap$q{WMYvApu}cGwaYC5S>qrd{Rz~>i z1F~^|3S~V#$>Bgc+D*aJpE)j$-`Vi7DVkcnh{xfJfKq_p*$taS)+We(b}#>TeJ&iVR_lltt!gRs<>Sn~3H#Qb2$N==>0qFoURJEhn8PO>wT z#N{B5>L0vCd_mtFtuHOHJY%WEdv4n1m!$oeBvFr?;%E6RK`h6^}M!f%Yz4APKv@vIzVyB)`qJl^_D!t)xfjUG*K2mVE(VFm*z0q# zZ~5~e{Yp%Q&Tr}&7h~5BoTW6Y(eDDZQT6T}#ZFaKUTSJmvr9^$17*QQKLt#)9?nGNOh2Kv`m^^#t z8`)b#PT=Mq2mV7k24atycXreImtU24S(}-q*y?%GJGd?n4(7hurhTPSHnrajmT5hn zd%mZd?5S9e?S8tt>jS&bJWCsU)Wc7vj~&g~q0fo+;%iY}ovYdE+&r+t4U+;MMi(BZ{s^^ltlp9Hy$wEm1MH-_qx7;~+g_ z1Fb@}>ZVV4xFDt+$4k}otKnm7DN|C9qrZ0T(Z4_Q* z$Jr4vF^>ZKYTVe9!}ey~7!+D|Hk-W(8yIQXZ`3N7bm6FuEiNKrVmW*(9c49-jeqmr zC)NBl*Vgd){O3D58E-oJB!i_F%OfxwuuCW^GMzj-z=Q{LIOWNI(ilqMxXwt3E0V)#d~wPq zwJ!d|;=u#HzMWl7&-^vtVe8827))1*r|T-d60oq)-(Ddj|3NlpYUNeJ|HA?WC@*;v zj5E7>)5edEx?_OKZ`rDml9~`6Zuq?Q#Ea$Q_0(xU^2S0VjFo-Tz5=drr~^k+6K}YV%yq1CK8fvNaMwhd^;;~ zr#~~Ov3nyLzh$OTV1hMb_!lx=O9`#>Osv9t|2bN@wR=1)@4tU@65OLBH!k8tGlm;w z!zcc}$fF~fUz54-zopTpRqFyZ`SyfsmbhW?`NfF9&L%^S$C-DrL$rUWC^vt5!Bf#8 zDyr(Mw?~azeAvNZI{cmlm4j72fj#gnMPgIMcJrJ#)XEV2!k;qPUbOmVi1(Oi)M& zboktEwYsqn?xk1`7qlboR*pX3V_qd~vb3}WO7a!7e9f|7M(j$ux(e3TxKFor>OMnZ zUcJ{kwzajTYR#;gHyx#>`?7CnUKrqIS!?UFpvxef`Oo*)?X6aKWJFAMPDIb%07UKG zgn=j63V$QD0+LiYrnM&64xY~7)faZed@p0?1DyQbSK^k`pkOH}^`>!K*%k%?Ez*ZW z1GKxtdfwy_Z66!-e;Toe$H#wZGooc;x)ISP)va5rGZcAX-}L$3z|hd<2{Jy;N=#8o zUEJ&38k|BbxDsU7yI~mwr=hiRXWB&}LT5zUTe_Ia5*2%Y(6~DIRFc#5cEWhZ#<=*dit1AKpl18fA z|LU*zCf{;y4CM>lDm5RtK2>CBmDVY_W3xep-*Lrga4e%^=f2R5 zp1yU}u2yU&zqg_LiKPi3MAJ_JfgJVcmuJ7R72m%%`QiNdE@3qK`DbkM>E<9Zzul|! z1E>VvTjq6Ra!cjSQ)!Z{Ky3TFxF`wdURYSz#ZBgMNk>P=*2kZ$ATUdMgdpfofvKI= z;&Ol4T|!j`$18_}@_eegy1|mP3i3<)a-HJhO2y?uolmLY2U!W00T%V2P31Wu6ay?l63E>4BKN{oteHe+N=g} zgO(wOVzSlVmsBi1F|lts#9MfOiJW#iFKHpq#zrA0!5bbiB| zYwPa5mhLdu*Jm)4C;ci~S*dP%f6b%Hd7~LzD1RZ5Az!~9eeLXUJ>7Z;F?}=$+r_Q< zm=n0t3FEn~=l0jMGw?)2gnE1XFg{LXjn*VUpZ<2KM-8qG2G7{ej;Ja_L!u&Eq%OD> zeD~M~1uHc1_b0O?!fqWNYNH*`u6cfjXmDOnH;gy9p@GXqMQ3dBF$9D|1jI5I=g!zS zcNWq@gsE6qaBOYO)s;g6-Z{7!pFMBIGdY|)W4fpzf~MQfVF#byS+)@r_2&r%$^Er{>E_u zHEA_PIS+!-?-WFcj{?qJZ;!UsM1zav3w38MANE1_c%PpGbO1>y zcfp$SM=BHFp}%5atX$aEi0JHh6N2QK!S-oEi&uD^&95CnLGg#4^Db3KyPwx=vvdsH zG4iz(aFQMNl(Xun_^SfO{oiVNjwk>6^#!u1KEwE=GH-bnk=HpP|WByV&YB54%-JbKIniG(3<*>xdNsN_Sqe{ELup^B-Zey&hqkvCW2VupFMGUcw-caT9x$o!o zMTdpG_JNsm%Y;O#Y+zuYp!Jx+sAtI2uA0^;TFF(X-wZ(OvDSP%f%9yEZI5WXty37 z?>^ik@fxEB-D7@l1jt%X)ib%~O1-dqQ}Y_O3eQyq_v$^fkv zZqwDN${mczm>ByVlgz&IH#6NMWtNCOOvnIc%yGFR9~mXhBi=29#jG}V(X2;b$Ypc| zPxv~Y-m{bao}#o;FO$q&4p077~dh z363Edf<)MZw(r8JrfootIs;)=eRFvEX9tQsO+rY2c*F~y(+yG4ovkr-hw$c-!yO}I zofPFPRkT3LLdmR%Ob+`&KV2mypN5{ecplq3citv%yQ)NCjgHo(rnD5Z`CCMrE z1jWW5b{fj0%~CS%UD!&6TS6MP1n>eh7XE>^!r0x*g+mpiQ-ql_&Vh9=zYA2 zE8PAYRR6eLqnEvwlwOrXsQu#p>~d_25BeGuzJjN3uEXkkFk#e$cDZ1x=_PjOYh`Wi z{!x~jMtWax(MUL4D>m=_c3rVsQ21z0K0}_nH2D5es1C+kLlNLp^OUV1gNLF@1U01( z(hiS@3Lk4}Xd()Ri-s4ZvgFCuKwP=lmH5(OZOvQeGir9fv9S^TCN*_&Z1p*De5b^( zUmiL`+CQk8VO}>(q-9=Z_-1`*4PES6MyZo8y72K*i0ZJIa?l8rz)iykkI>O?-=<1L z=u`_kYM4$|sW`0M6*XJZ0UIX+N3Su&LB@~GoQ}ACobzH6gpKu^7N0_i!eMmR&kHmm zrHzeg-=!UGV2$m0f%oedtg8AWKd{8{fhvIZ-=!(RZ8ahaixqfbb-~6hBQMVdWb5Be zB$aQUxuJ?oI^!@gHy-I!y-+qhlRs>Wc!+U0z98mh-=BEQLZHH!%OU{!`89(SDj_h(F{_Z{ZaDUf-8t5 zU~MobyGufDY2BjAKn$_g7*?lSD1<#38>`oRkDzLZfAUGHKsBcJlT^!m<;!U;`ag8i zjJ}jU^+H{{c8m>s@=jgd=K0B+b?w=6I0RiDU$)@_=}$8+>L)Yh-=LyPSr96()XBn( z399lUVzH6h2wSlj`59N&p|#P`(NY`ou1^FRmlg2FhN6ZB$$3t7HE@pvHyX3ws!vK9 z(?MALHA2~-Z_CTepKNs^-Qj=EP*YLkqyglEni|;V=4BI=$^~XuRLfLLTMDozlQK&; zUZ-cczFAZ_6CNHK`a3g|Ixsq@9FIL&j_2N@Iusa~HyG)stA4#(#5=LtxslJgOESBE zz0Oh&oHb=-PO-DeTGTYKv$N+TV}>;cH8dEH982S>=M6)n>DSyfNmW}2Q(ov5fQf?o z_4;EK>fyo|0t$+$X_xk4WmsJC2xSW#{(sf-k^`IF+!a+FaYdLEo zY~(wl(V-q*?nxyG5fKhf6mSj=dmA+}B5pNVMS_QiClT~HQ~XP`Itw8_0RbEF17ZOu za8l2`JL@XZj8|$sPN=8X=Ep*oDRMMNb#(NQfuRET=Sb1)(nt{j8Bf7Ok&AKzlMQHQ zpwgfcI->`pCP#MMLL-WeE$}U-{hmi2{Yl3j(R8IHSZ8J?pnBj#w{)2kB<(n&rl`61W9||W z-MQV|B03$bqxO+lw>KAMcQi|B zQ^)tiLVv{3$wqG<&I%6<<=`cVfNKm^LVPAG;pUEIOM#9Su$8H}_vyr+b%M=ilr&C4 zEOdR33m?4qo!MRPhk(WSje4Hk-3(#X{IP3+gI4R&h3}w&&?qt>DJptw$US@^fWh`~ zBYc1I6SfY25|YE^joz-?kq4{g<_2nIFc+ui2>X)S^dE21qt(1UG$_mT(M`g@H2HX$ zU%xDPooy&DtKyw%-v%@i63O1>8*IeWM~hkbWC9<4{D|Ynu*BupLD$eghK6op!guKC zbTTXUV!!nAmAX4kXmoWe@7_&M>%Vs!_5w-DHNOTlNE2bnHQEgfoP|*dI>Sr3;V!wQ zeAIfU?|V|Op>Nkd2aoBaX8U`76!f>Xv{hbOY)dua2C+%4 z#^DK(0h>=#IN0vCc{(iP89M zy5hJ6gRvYf7DOsV2I7Km-^xBAcKH5~l7T_0<({EC@Z7&=hXosY)Pz-3WI(Q=;$1eE zH$?x~(>^X}Fb?c&O%kg96rv}go$%6JtAswx7YmQwV&FSw<|f1pD`{waYBQQE=@wS* zt9{CT731{4`+`SBC92eF6yN7Ej-{f4H$`|)dr}Wx>T+5vhz2I5FMYipYgg!(t^V;# ziY(1;sLP4y0T&WwL}5^TPYAilm}mVM7j#HfL$NCvUk- zc5WDJ3|*!h=CXKiH4*(s0sVJ&NzHE&9FLWK0%?R`%tB}K*3`5|y?(1{;Rs{YSMh}M`ScEI`+88--n;yEm{W%%RY0KY-n}1LyfKQ39S)#F0<`F7*Fi*xtpz_8}hn5d^u(Oq1mcvcJKwk&P6#?4(i+V5MMuAn++ z5kC}Qb6vu~loAeof5n_TB@m~Des_~i8UbuWe)+LGD~t+ig#|pRA*30del~@88upF; zDl(+pK(i!U=K5ZuLr}$B79G9t_Tr3M<|Hc{>mA`p9K5U2{5@HFc1^jZ;Qe}AWOp8Z z^JCCBg;4Y*7FWkbJfwU**D86hb8O5)A)z9*&99)WYju?+CkMxl3#O z<_0jbuKfuj%f4K$0b@jep`_H{gHDrI?s>di^t+`6xX?}gio;|UU%sH~#c^??fz;kI2y!^zBFTf@a6hEdtE8C1Q4pzOW znbRX>un|><*6j<#JSHWHOW{$io3A*isFs-+8L>S!!OxSn_Gpwi2Juz7T^AaTf57)_ zz5?m)u!Zk0Lp06f?sJ%Y9dtb0YN1rt8pr;ct1%o_{>L9T_vagI&aUs) zin$esgy6U4h$1yGFaV%s_DiJVp|7k8FlXHF{JS+fo5N@%r4$tx!O(Ixh-XTF;JaBh zDqm-u4OeHOJ&O50zr**ZC;qs}TxRa5d_-jZ8eQtRtPo;2bEw=DTG+f)S8Z!C5x5S~ z-1k?N#^O5s)<4F@kp>SA8ncr~%g7kO6T)*_l`Pp#)r@AmwhJoqI&-tLvjc>BqRLU0 zzrKC9a=pkYfA=e0d=CI+&7&q`2Mb0W(X0TR${4%;{ul<=^+Ax;Ov0tF(&jX}XqAHR z`}bfOwo(5!21K*q-m^<@9!SCwZP*eFWsh&0QF={HpfKp-l|R6YMucPw^YSJli+I@m zbDYd=m)K}f*tClo>XvICgSa$VJN_hAUoC-9SXpko0nZ&xRr)g^62(tw=Xqd4v}De= zI|L=A@1{|)Vw<) z(un>s9)+73@3m`eRwL@S$it^x0GXova!u@+K*US08=Aj_t@TV1D%bJW)@$Y>ushFWY=IOC|D5m`y!k$$z=Y>7jv&w9r#P{r%|Dw1_ z$N~mJSQJaLZ=dWgbKoEY4S3h;=sE9)&!NUkFXSQX_nNnNq#?;YuJF)MRft`1MsS(_ z`I_1{09ICCjEtmGzjjI+QYUJD{P^)FQsn(#1NGwH*G1nnGsZbw60F>>Y@vZ^cigp6 z0KX&{Sv94eSweSIG^3li@aO0A-s%Pl!wE#(jFP`z0@3I zl%j8wwU(lKVXfKhk0{H*{0hR1app`UUw`v?>~*(E}KQ6 zj%g#iIOAufUbFSKicL`01inP z=q#hI0*?y@D55cs@J6gLBKIl1Dp~<#Bjzx9-{*8>hZ!3i3o)wd%U+xBVoj5SRLZ;m z)JSD1=;W0TF6*}hcl!BDgvQ5r9BvW7Smy?qiCuw6a$%1H9exd@w$V0G|5lxzBEAy- zagm__v9Jd(I4S@rH84O9S>SzhYb9rqs4P*4 zsbQRH*Uxh6o^KyecvM}SlYElF$GmQxwU*gM{PA{|dy6~Pe;+NbFSTFKi?8g)DJs>g z2W-U6MQ>(!p+|l$(frcn4{l!{)@{CfLUPSW*wIVRHa&q5ls;Xv?XLbDvoo0)VD z65JnQAbfN`YXG%T7;xjJR!l8c>9wSX4A;lX`itE5;sv*!Q;Hr(t4%2gUCmQrj^v*+ z@tm|01pqx&+fHC0Ab2mMH{TA|&vk5Lu5h*!;I9q{e~MJ|pMRjs$VR~)SfDkz=9 z#|VjtBw;YuZU+%_n|ozl3x|-dbcoWs82cU!CI9uSSFrzgC8C#aft6_AV_=1B^xDmH z$`==`)*aD!_#{VEVPQ0_?eAM#FF6$T^X01fRaZ6#l!cze$0#d>KQp2g{b69RG3H1M zHh5S-*fiI26tNHr9a`=+^i#3s*SY?Mh%7rN2WhiqAYGqxW6EWgAj##gx#$f-oEs~D zAPhXDM$p`1tWW8y;L+kMm9}>t_~PPw-it$JL<83d2#KCatDfCvQDb1S5~QKw>E1G3 zw{Tw+GvhFCo2zj%|Y_WOHfWo5ZY2G&UWjR&$9x@-v7GQJ5|e);GUH|zNFHmn9E#g|Dqb@SYb zx29aPycW{Ng@1bfIOib7sX3rX*opDCJzIBHaMnxxar=A|3x!3lHCOjphqIg~b8?3J zYv{gYM~|nxV>vp#ZyL*OXU_47Xj)m$p=|Mbd9ts98gUGwUu>WD*CC_5VxleLF+11Sh(sZTyDZ9H18}0RHS-H=%b^uW)k&R}# zHob;GF0>H^U=%=1Zjsd9;Ys7?dwX$c!}Yc4W)_v^rRvl92-U4$H*ZE|JI|-P$5MWt ztA1tOPp!eSITN4-ab};tkx){0gV|H0V>kgfd#r*@Z5cR;Jk0X{^G9}fjk(rSzT0c8??&d+{+ z^Sf)~F;9K-vh)P+G+D8^-aO?6_4T_cRE1e(`Hq(67jv`@j#{XpJL5w9vgV_2;O>ZYz_k!&-1`bUfBP6Yx98xxG8g#lcas&D4o5u#ymdTrB{Tgq() z8I>VIK2d<@UMKZ4w`xbhk`mk0;YMJ-Q6v^<_ujl7YSPcdQZrv{^6J%H=m`~pbZ`f_ zS>HhR)jLryLc(C5(@WeJ->M|Ov(vHud@b#6DwUs=FJZ~;Y_*MztL0a(h*0;s6v;^sJ8BIEJ5h?p@VFo zmbWL;u6Tn^Ntw8FFA>D-_b;Ew>ty_bnsrSe*YfPK_Ynt)ja+V2T$~JiHc>mQdiD^0 zE*(M7RcXQnm?n&qAkM-SQ4R{AQl&-UGV?(aQRBrec;CtN2G@ZiWya0KTqMK1F=Tyr zvMT5bsRDt;$!I7wM`ZV^JR>QYrBx3!(Klssj?$&!JPeMH$i6}hb9)@_R_!{7WLTdb zW=TsI!EHKruJ9Dy0YxZoV{_(q?HZ`NyzT58ko6@->UfYE{!p|JDw_1y>ik#-Rl$KZ zqoZuEf5{nF#CV)mIg(|pnm*-9p++>6hpbwe^Re48)VkwcOW)}!L|(nYu4q0KR%X(r z{V_Q?{k406kl+IbhMs+W8kDK2Z?YcQ1Db%b!K>HtP&eeI)VvR8yj&d7R z0`?UXMnhe4d>3gxpG@kjgg%s1%+y-AfO6yHIR!2#y~EOo$^UR4*)$Pg}l zl~F!f>rS-6zgVu?UkTauNhim@P=$I~-@hjsTyfS;yCxzcl9P+lJ0FwPKv+jOLK|Q^ zb`@bG-LXHG@@UWf%E0`6yEW2;N=8>Xm@HXZ{b|*@gjzYPlJ8mjIK4r%Z}IORo5@v6 z>cm@X)}(224USTLy)vDVt-u<$#!M?c&R;fdhW}xI?RERz#W=fs9$Sl%gR1VF+<3hb zz5|_(vN?;y-~w1QHv7eJE**e6-z#9j8pPpbC0n4ap&;L>@cz9*U!k6GZ*Nb*r0eNf zeP)dZ+5G(Y$6){MZR>%d^#}Z<^O6?h)@2H2ONe%4Z!cPP)ZWdTJb7TsTLnMod4ya&>1CeSN`!s z4vtZqM9rS%6xo>SQfv278SoFiD-S2@guF$cCr*H8XB@lSKT#6d+FCsMoY*@1c`IKDZ|2)5`%PP?GmM> zvA{01-v0qjVMIhpW0_dM!CsgAA&x;rXy>{Aj*xf zNi_NU`+R9nd};54i_2VSqGuc#kHYq93BeQM=~2^%cBmn9=90r8vWIP5!tgP4L}!3e z5qK6U7;uxpuhQ}^R!fxML9CKfPI2w1RcW8c{^+OGaRg>-mVCTsMs39*{zC;TNLik3 zcXL0WhmmQpX>wxwd`CdV+gVy^=?#oNvYW2sq5OD`UkLkbh>d9pjtZ)fhh;eR{ z35fUN;00{kt#~Uk^(}|$c+J^95}FnljQmUSYEh&n>$nzp zlwh#vR7E!U25ffd)eTJBa{*Kewzfw&vfEC0LIXjP6eRk4qsM#6MV=>4fJrq^H#{Te zVybG`2hv(Q60idE9(q)+{8CFWrK4sHYx%R zFXEK|!)5f%m0Vdqk3%*XvNjvBv%75Gh9u|pT;8{T{RZu{wLK@nf&7BWajMGk3*6K0)c{Ey09iB zB-D%AgF+(~-Yvo1yT4(0oIiBbp?CfVPegk#FE%MDxS=PyH%+p{{lLbgJE;-g+|rZ| zzZdLYySomZZoyJ=a_OesNzgGe=rL4?K_!VNL@Td%I%=An+J6Kj(X)ih=l+LN0N1X4 zy^Ir#cQ7yHkKj`nn)8IU?V`>FICn$mxnH1ZxHwM$8?o=-8I+Wjmxl}We7m7q9#qS> z7fsj#T`;|Vj!JH|&{t3P-2^lya|uryi{ zqogG+{tWq%w6c)AU&*z`v~kC%5YII3b!^t*Gnu=U0!rAPHOV@OUx?~6v=G8UE9!&U zkLitNn0}wfjeU{4KeXJ=mC?;&A|t~@?)1EO`K>i0fknhg^7#OptVE$mQzYX{how-N zEQS4$tlTmalcWc9be}_n$J)ES7F;lyhdHU~t~ssxv{2f5=#ZG66wGUeqaq729zQ-P zpwmh?JCLBdeQHW0@fsit6L5y?>tkYMwKmcY!(AJfwUsHiW^U9&Da&%C(UI$L4_e5J zsUe=$#_|YAY6`!--{-Lw-?Qgt&hSb%iSwD-^XHH0=BtYFyAsR=i50$F&JFOUWVN!2z&bXrnN9wLliJIpX*Jy#%b8u!^s8q`-_b&flZ12 zl~cO?Q)^pg6VTcs=NA@QWZ=M$PM(4~_PnCiR?x3fUX=4Ik7Kva5!fwjw5`z^Ktl@n< z#boZrQ$XYWrOs{74lS1lB0bkl4>!Y%j7~)%ndgXekE-WApxyk5Mgs@?m*zldWxtyr z{r&mwERgs~INX-Ef%{N=9a79yAY}5(JhEO=K ztyiaM!d$RnAbS?=dw%}w`St^FHo?Dh=YSbyGs%Se%+5q?c$tdJ5qD>?1w@=LLAw6C zKt}*N+qtepF$04IMpRs<*1NVx;9|E4wAALmO|qkv_JxCQ8apzKjs8yfJ<`KcE7a7( zVAZ@jGEk9FIg2Is&xZbgscdA$*pvD`gSkj5Zl@b=o=;p|k&MklBO{EflkrljLp*`R zcQj1*Ya4q~@!r73Wnh@~!=#gae?w1lW6HX%{n-Df=$A|*2Q_c6Jm@>(-E@xpIXKhb z0>?Pz%&oBz1YN$Ox)=m*a)CxYNly#|GwtaP?oiy~vDJMIolAAc z*Zvfum~CIgPss9-n)7a^0y&Halalx#_mp;?mlS7{W{%?d|8fC3c^GZh1f&*mWWZDa zNpNSz+`iM?o0)`I-5WPgw>B{O%<4);MohlkQs`RW7AVmV9{pEWl7V@&(Z%^=beFZV z;Sq43N1LCY2QU{4ZFQnD;^)twnB(iCC6aB&46Lj(kPnN7L%PdgTX*C?c@Ckctn(W{ z592zV&^<0LaoDBgz@8+(WM#$HXJ$(9)xoGNJ)IU4*DZ2jfFQ`)1|obO9PfrTk9waU zEv}B11a!vpfUA|fv2liM-1ZSAhY5>-^ZIXnw%d2_J_iLHJRUrUOY9dFF!4zKe#^vy zUp)1tmzLcO_!TTHXAu4HukUyw1Si|1)3S+L)hmjw|u>U8K{kzGA@%COU|t z1F#`Qg}K6M?QUD!%bF7#rjvsMWq; zIb4T5NzwJ^mqjUQfN?2tVi|FO4p-oXz}KF#uUi*`m!ZHmmrL0GnVuu-KhE_5|NrH< zfq|x=jI5{GU{2IZ#J+ZoS*^{>mtmd!ogqT@l|pkxOKOGSegQS@$aB$2VJ4#o} zwVRd1Lw*N!Y=Eq62C0k|`WjX4qw|@=C%m(ea%J-+*L+$tsF7VWuuC(rv4FJsf?RG% z^UvXh42+TfpM$x?Cn^62dQQB>@017hvfChK>N-1crlL*9B^Pi4OSpUI=Wg7#=Ly-$ z$-k{2coU?{;nv2&0541Y4}>kUJx>Eyh(=u8*=&$WN&`YqfM(|WT-J*oFr$~liMLN=k_*v5LCM4v-`ui;>CmgD;+vGYM9ohN$ zGrvEP8JY0&q>ghqQ}Pe=_<1cV2-DG7w>mUTSXXagVA+`LuV%ZrMbDs6-OK$*{8P3^ zda~Q;=*gb@PlVj}X_<2B2l)|7>Du@H5NXZPptB zp`(nU@}P|X6qt`M3*wN-6@~e}1_q{ya(^Kd`qY4C+O2-3quzjt>WhsSpS&>a+d5D2LK9NVQab zV%$!AZr@4AyUXTJ*>}G!#vZG>Xz9F?&D>0}(iJXPmI`=1#JrYPq8P zWacS&b5rABUcbR)-^R8+i$NnPEH_^MLfhkxFFGBzCu%549@y;iyHL)}j@uq+n%f}j zR7;{m@L-t!E=D)bchqWbHss>Di3t;Mb6@U)OE;glZZ(kHT1g3CXJ~f|T@NYdb%sg?&N9^c;C;q^+8$M(7a>V~rNXpJj}Zdctm=U=}+5uigJEzhOJF07G%{~9PM zDQ!ADJ82>!iUgdQ- zV$w+u>X0vltUb#sdepQa@w_|m1|QQDXgnZ})vc!At-m`Yb8Qm`@igdrf>{}|CSFkFvlGc$Go3`4~Fzvc69ig%V_r@2BH?zMN}-b6WWCxMZSJY#<6kEmjg|IJ z_^GJqLY)YlhN-E&@ln~!={p@=pPe~(&#gx~Im3MRm&7w;dj#g}kKE>c_d&n&jU;f@ zao)-FZ^P2&bmlR|uL}I9kIDZ?tq$sS4L}5xv#McULZw!~($ca>)!X|*y&}6|1CoWm z{dhy*>S~!UOeQ#DP&Sb!N!Z&vGWhAE6vBd;Nk%C;Esa{_f+;g#zS_oyBV z!6012$mqu(3Oy5Q`RySfqvJ zpL))>Z@bCk((g9-W>^D4@;W2Cf2~l!*8I8TvzNUMRji5eJ#?K15XNP%8n@zEZ)eO` z%Qax`et*i%64w53B7>11Ok-u$`hzW<@r-et^O|42I5RlnQtD!_miLiy<@kq&lKI#Z zRB7w!r#R^7R&E12beqB}vwpp;Cw*p>c%*nNpe-8B2lj5df{hkdMr ze6h4D)(!r_tU9YK$bK7MDLhN1k8{({6?C8MDG|Dcj@ZXUpyTnGTjo!e*x z^f(V#@-%x7Pj}|qk&1$M=EJddgfFbe-SoN1-m&0dwzl#HH=w0S?7>lM-q0TSbH!#b zBYW}NFp(z7!t7tdO5>j!ee>vmGD~QVy&Nka+yY_4-Oietl7WGVp*$6BkN78s$D7+7 z_CN_u)=M2c0y=VPG5dI>IysE2pBDz$)`K6)#Ev8OTJ1>Ho~QWE>Znddyx;kR{S)AT zX-~+u|Hc4T^SO)d=~;*N&<+d;dKNp$a%q2cI6AH8Iak9h?~N_>e|o#O>l1vyh!Ka` z8(MlsMp$B^JXCs+8iDgNL+|0khZsN}iGV2O!JinZ+^UqkKa#=C1k}{^QVI$Sz=2W` z{t_7Ys&t?V9#V6(5U(BHA~cxFoiL7Ke)2NzNYYx2Cmw10qw~TT-_6a99}H(5R!731 zT?66?x|I32UHdLHLogH11d{V36cBlve%C_T_x`<~6SeLjuQk0xWC~u50=cLiShioOav}iXN(QRoppRRQgtvaQ(tiE)wRH=k|C0 z*`R*9kR>>Nm`uC5+kcZY-_nx7SwbV0^Zc}Icsht@rN4b}JVzOFjTlKh&)mLp$-3RV zvM2Gk%u-oeAv(NgXPb7X5=MX_AO4rdRX~?&DV?X9*2HU-%Q!2g1r)6eey&Td(5c$P zR7*uxXW$W!x*j`Ai#cch7j64*k>@0^z_3v6oIjXE_|&?WWFhmCtz8}0mFqPF9Ojc_wn+4 zKm#>26l70=0f2jA*eu6wGx5_8n_%-`c&CY|4U)bOchjdmjJ&Z zSL*79vKQCJpS1)#+H$R?Cv~9OtoLk1)1NPIvSnkch4)w!48)#cY;I-$>X4Px z)qMn7e89f~(J?UXvP;3ss7zB?Lg*e)NtH<5tgX2yD0CCp1bA+Z4~-%=O#dW{#DD(m zVPTm;tua}(hnAl3@omIHC^jd^8`F>WhO0@0Adw3IxHlqZZunJsg?0WwLYj3z4r*>k zR+4e&fshJjf8wQ98X{x~0@6$6i*34z@!aIsFuBI-;yXJ?MC>5zd#OC`$rE!Niiu~v zEX*aFlNSGW#s8W=8a$z0z%oA&z%_x4&*?K}x~_-=-H6c$%7GAOg@^_QL37Mm7zoYd(zSmEPG-yuTW^#Qn9J;vveD~`k@GPx>?v~y%-T=!YBSKP1D zqp>nD!I>Q?)Wd=fy+uTIW_h{oF;EDq$^$A`>?HIRk+ zN3a}H)be(k$-Fbb|4enfGf7BN!xUOpl#Nebk*R@Bk->-U1JmTnB)3Ot3UbI&a{{z` z_x2PCRtD@z+#zw&tE$oIkg4M(fo z>NU(7Ua6^F&N;(q0(6F?K@|qYZe`ky55VLCViR(0461a%vl>^C^~rc5r=fVl>d^7d z{tfg)Sfk3zg;Wc)!K+9FMYobMu>Y+$BNXu)4{BT1co?+6@iRQByF= z0$Oc2j2G?@60Q%qs+9nvW`E-XSWLJ7U2Uo#c`jY=M!)CzJxmUyW4`$_1_or~h%7dv z){j-(!0Wog(6O^{cEbl9gCfV0gCRNlQxF%o8HBrDVNV5%-s zSvkFdjQ#Uoxd;DvkNj#ia%Nqpwc9xf{Xv>S-ukdD1Nbg)k+JFDK*JN})z;|B6P^#x zlyfRCohU@|&gZ{S2u>%7cD+$IoJnKZnNWEfT!;^&qn zugERcJ5?(j@k+(HX(HAYGQZe*4UCPB_EhdP9v%tF{Tmq)g~~16QmD@4$HFDe7+}26 zN?%qOlF!sfmNBhYtf4wiNO*3X2)P0v zVM6=xfefDLCeiuR#jZ-Uxy3976i{{Ec>{pBHDVav{PjuSw6kvm|4UD+`hc%0p)&Of zFTCeuui9FqY(g3zG-%6*C(jK2BH_L=Q7PeXB6Sjw z6H|MbgN2oL3Uiyhr^V$7evdAAWyE5p6b82&@fNK(krpY-HuzP?U+HOCXm~5m6I@+Z zL8xL=^s_fDX6vA^@TKQ{tx{ew2TmN)SAFTU4o8QXS(LQA#1PmMrE!}GedxBS{i`a}+$7j-yZUJC^OT?;|riVX6|C4R#< z<>6PXxyf9Q=J~#MN>n+Re@fOve_St!<%8KdZ_l-1XdoWxE}M>* zN7d~130hd(a9z%DT^-%YE?!F%SiF2?$lbl39lJ|nEFJCcXbFU0)Sz_Z^iWYV$%GB0{` zz?(w6Bxi-R#DwqGk^A&JtdT0mL?uJ*38gDnrZ0JNM{{Y8{1jHm^RRD64Okbl(w{76 zGoo2Eejjc%x-KS)fCGNbbE)gkCCZgJiT)2$UjY@>`n^quNC+5!lt?!c(j_2`q_jv% zNOy`Tib#h@x3qMJpn!CDDc#-m?eYHpYkh0owY z^ik=W0r2Q=YG6%xcz9~ro2Uoic1H+L_~m;!%6yZAD*&9yLn~*m$gr`op>PdM67~eo zM|PyJurMSbDo&Da%tFW`$Gw}l6OF(Xf!EESfTAAvd3+zyXqD@}^X^|MKp+r2RTHkg zqeC#GwdhpqbozjrMmxaKAdnw2qpKfZ(P9Ejh=|U#>*pO@3RB75%jj4WwX*KU!z(B z1B!>V+VrW*i-`{y8H2ujQTO*hd!~VI-aE6<9**_$<;J<-0`ZELOqK&{2Bkpay6g&9 z$WbLDRCMj$kL8Lq*J1Mc)u7&kFV|Qj`z?qRtklwZKr|uZBycXfqL@>fBfD~RR^?It zN_NGCr?Z?kwN}-9J@20Y@tNrX7HGRHnZJ4<2m7f_Hw8HH7o`6%8h9DH9=Zq|MlEB`4Dle}#LDmut zgPrE;`l0>SiG?9YPgzLyX}P*o1-=!Zwc03A47LeGsedIH1#6InAqRdNvbmLh8pJeX zHa5C88qjV5lKK{#oY%VZ-!;i6qc)?NyM;Jk6;3~Na^(^CB&=aRr@YU?%4a&;7EGd) ztu)YApPPH5;k5M<-k9^!vixWg)ZlnL-u+PlTXKoy`^BFB6NQK(BWjad#hKk63gf+mE#U`gC{v`yUQ`5x0-yrSY2PuU2{13M3nd z?^OJmwB?CjZFawblx0OUoKkPp!o;EHkNLGQb7Z5FHr5g`K%)Dv*8Ln1paHCp(AU#7 z$UtSJL;*?`J|2Zodx@zn)BDw?CNYG}S5|**vW?Pr>RVh*bwnSufJYM>w5dhK#uSyY z0fnziV*|E8+(`l)bQsaQy}Sr88`S^)f*PomrUqSu-D#sk51l;Q=?<8+3hlrTjo!+N z9;UDV^aNk6_zruZtbIspW1-nincj0vtoV;R?1qXU!$TVF-M^cxpSLyXlkmv}i2TmC zw?i8n4P@U@2sqLG`Zb^%Xg}|hwQ_M!cE#aArNH5oLA(I=w7_BA?!$wrsk1}t$i79= z1!4=We^Py3h0T~_$CbXguaSK=Jmj<zBSq zJwif3Ojc92M;Vby?HJr8L>v#|(ez|0s8YUtK3-qVnjA7MyvEn-^)f-6 zdMs@qpODCfK)iy1NiIrb9ECbyTG)g&{v&iWS-`k^!MN0*|{fYYWgMl-oGBr9O6JXuk8-V(2P*Z^tbE16_N425zj#}U_BW{G#3LGI9m=pHdOtvkNP-+m;u^tU9m*m&53-H?~LWXG<(Q@5?`74XEA z7$J9%VQZ@>JT9(hrN89n*#Uo7I8EN|xXf9HJ1Zk55|tVGH&s)>q>9OPe?nuZ4D<=9WLIYjA8s3x-qk)&8AOqG(<)fFjs?t5y=`4+QMDVz57 z>w$Zr_g7n4D>HzY*#_)S<+bQ5YeuZ;fnN4T1$EQH%C5%-&x+H*bF_O&N>c!yT09-s z7eDBGzKKf0V@V}Iu8>F?+~_NpcL6v1DE+_Gg8T0^*P-XFJNe7q(b2<95_W#D`=>|H z6T0ny0aeEJlN#s#CsN%ehik4;4twQ$dpPjZlkB(OzQvuKL@}9~jIR!!GqNi$h092P zx0w`>lVbzjBm=8(cGUW?e9O+CX^yy?@RWxPPbb)jxpMLqvdRwbt7V6@cIFXB{%)G8 z#!nmk@!d$c-=c$97)sYf;_O5hK! zt8+9lO9HV!GE?K?UC9Da#{C9wmD3ByN8;k&xZZS*cSc6)Hli`JvVJ!0oY64dAF(8( zkoK;dJa%*z^JD+sR>|C%ax@RNVr47M9?}&g(prLRSZ-XBS?3 zzcD8^mU~4hpA?0nJoGj&;ISy@@b;K2&4ZgrCbn(kX!5*V57aSw$N!?C?Cya_0`S#H z_#0o%H|@k4`Tzu}>!vF>`RxC=0IQh{5d4A-QgLI}!p4`Gj+bYL4gfwVG5*=H#nD$M(iRhM@koH>~L)U zqeX4Q!_k03fQOU_M2rp6C4S~4#TB}~*snVr(Z%bh2ekC$1HzoLiOr`du5Xi?ZOai1 zrPEBvDx-z#bAs1cO_eLPmX)R zclY+`7q$d7`tvg#oHeA!5v-S2SNOZ9%kJQc8WtPdW*2Kvum^EtdddHNr?6hX4ohlC zrcX}zk*mRZa*oO2oE!B6Bw_(4C%DkkuxJ+O{Ek$XbEgIKiw=OW!M9a#tkGB0PZa~g zFgT~2)U*Q6UNL(LjP-n*N!nPA;ljt4ZFIC@U_X>YOICTkU&c=4F)y+;ir;X~_6D4C z##l<%-PZm4OcRxq%1=(ll5SpDSo#vwco_x+92j?fu~X$41Anbh3U>CBKY`mMA{Q%gObm z4ZexjWpj6@2fqjZy}kXqy$%*90k_3y?Wow~w$Vz3+dnrygeLGz?-jAe>5X*Ce+?^> zxkErjE_iNHMJyEM!LAtpwr_g+Prr-|!zO3kO)dYvOof%qRTC zm&_dmzu%OIMctny3=r`=y6OKmHFxbnB;B;^a?e`vW}20^!!7OXY;zGXXtdy#VoIcu z!Luw^l3$=Y(6z-)tKco~7GG%#r7yAjW9=mHMevwfPv4Q4vb0n=EMnm7`8`)xL^_3& z02cPH_)NRl%#c_*qiuOl>)GOV%Lu5n1#TgFn}`1*3?3(dj1vXu5<1ZriLNsUVl(nj z3vLe3qJeR|Gr*qy((?uF$Y)2JZHOkXrlRC)#c)YVTPta?F8fj?t*5HqPzZZ4aPeb#Z%&lw(i$9Y*r^mV+*2*+ISKUqOfBFt)MD_iB*9 zZ}NFo|5H;($ISINZ){?J%a^e1?nT6yU#=S#;7Hi!gtBX1KJik4n?ZMg#BG=U%Ft`_ zZJ*6*eXy)XIhIwqGw>e^s(!)k`H(h;qKxg9jLT-`?9(U7f5nV*K;#ljtqV z*&3>YJ8hR~QAnjc;wvEyvDT}6@y5@qI8?*UH#ka{hVCOix2d^*F6vFx7Thm*8&T0J zbw}Tz(obxwl$sdxvSZxon=4`^5u=_%JE>5kqa4+3FX4=zMG4wCn7r$jXm7}+@ z^Q}Klc4;1aj)>dPllWyPC-n>}3z`K}A-R3QCXz-n6qGj4+oqj7OHbEg7?><9^S%hU zb)jxJAcvUgdWhE{k{Mi#df6l1y&GV^?tZ3ja>+ZVGrx%5&|qn3{o91U%y7glPfdGi zT|Unu=eonH<7tt|uerih3%yOx+rtq`*?U|U1Im9mAD1Z>Ra&pI7ZuS?7X<&fBIWKm zk}|GbF!y$6eZ6XWfI$gn@yy#~C9AKAx1Zxo^eetwm@W ze!ShJOv|%p*M49tT9B51GkHkOB9PCQ{Ubo#KMp_tYd-G3Pfk8~71S)jxGklm^tQ{| z0J#Y)q&2M0Cp)0|n#?puAork{&eyAs&@MIO(Jrj3yIa zxs0T&tSGoC{)8_tP@*rIiW;v_%DC}xP0Y*&AlFq|1mE-%t|;qdneVla^k>pxrfZv3 zYXxg-7PzNMCF9@w`_DM7^i}YHC&5mrFZWe)${UfF64V4!D~Lr=%&wb(Ig*ajz(6(s z$qOnmJP2^3=0D|l^X3IF`vVSwm&UP7ZD#uqz}qi=O^Aa)v)~MWeU$x~Nn9NLc;mHW zZr)%t*Is$6bK}|Cqv7fc_qCiremA>EFjr&I@a~*1YB&oX8>7`clb2)5-QXUv;bnh$ zyybjnbd59q?w>7#;5;kpaG@jNSfB%Yh$(xMVy9rv8`c(10H`zajhpOaJ`W8w63*s8okfud`@Y_8B5KTS&ED0 z3t9`(9z?S@gl)W@DAP0T9p|52qp-Q~e%|PVou_#T?8;c8dsyh`%TZP^J+>O|jpt?6 z3SnkupI@Z)9@X`rVS>B~g@5a~p4#8Pf1j7OKC#|tvnWTRwI~n!>JhYJf$HN^2wFVf zm62}BdXXCicMi@N1_pcQmY0JxadZkEy?%Y$q8#R81yPL5ohWjEnrE*>7p)#X3%Z(b zYcyROI{z5Ln=&eMi)i0hPFuOxQcs^b%CY(?Q@)X*&2d=-!h<5C*HxMgul86-6$@Ts z$`N0)9sW5&Y5#ft+qe<`xeUU08dPn5SQRGlasl?jhXX2T(Q4GCFcK=*ExU-srNj!6_Hr55tc&w3cCF$A0VfVZsB@i_+3AqTvg3 zOEbEj?!8J0D9{~c^gbGpzx9|unrH3PBlriH3zsX0&n{M#C8LT@*YZBQxex!{)Gvw( z1j$$OTWPh<_Hd)1!nqghWjc1QMd~Kr=W8EAc>i-vsvyaOgrf||8L@)cE49apGg zye8u;dBGhyIj(Q{T~c}PQYFt*;X-{qWA^YS?&-;7(j_4=j}tt`h7`o?F+AK&IemR( z8tJFr941dc{7nxGJewIx{NOA9d z#*n(6cAdq2I@wJ683WWUw~sc)QJWB*!^Li!JNRR22rP)bO7Cw16u+RP-qX#EVf4`B zt;5t7qxOoNvmgNxUvO*nzCKwBP4K$ZOA5!`boZMDv8F3us{}2JW z`bBd9=7h;|O-;qDd$f56!x@Z%@IDtlu{S(?@SxeK!qPJLdAa3nW#M5C z_o+r-%5>?^E?;nwB43fH_zs^HWfqUuxzoT$(7;qdt_YsbNl7-I(|ziqRn{2`#g1EeM(P_ohIZuNc-p_jKW6(i&Oy1M5P5ihHjlejV! zG=}k-TaaCt4;Pi6Ji)qki<;LIo^td4mzMn6qNZ6P zMQfF-m@ci6*D*Zelam`6u~$407;`yTy^sCifdp7ps!5qwzRs4F)5*$Bjxp05xAhY8 za-%*yUB9h8TA2M*E{GaVy`y6@An(Je$$<{Gb|X1H)zh&u+QYHH+HmXwKj+vv*|kpz<-*g9ibE z+bmgSPNlh@S6B0_L*A9{8^Aez5#SN4rV9-;JslWOblUcbfw#%UrI|LEXyKsH(vq5Q zjiaq?1qmjm&b9|D_Ay;u8k!C5mv*ZI^c_5%9z;O%yuRA$U>=zKbmTQ5a0>dYQPG!V22i*t#tArc{rI7WJrwg7{J?eFK(h?r zpAh+2x&C#sn0FWZ$=465nkWrtRg-*l3?iaGDrH}3G`Mq(SJ?0)BR8x#L1Mup3vBU10-o<3+#+dv(0eRbR@ zCL%ySG(7xgW8t%DF)42Dw+8{P@$h~qo&IKO3gzHTOS{gE6B$|Q=db$Si_`sr zIzH0tSU*1`A>sZ0b()W%p=~By1Ox<6^`_39wl+S8Dsu+n*-%4SJ0MD`cuRmhn9?`? zucVn7e^1YNM#lXIR4I^1f6U0Y0v+SlTnoPFg0k-o zV^A?^&O;DlwIlzEQ$!(DMz`8c+QTNXaMphfEY901!bH^_tCTZKxts4ZMY4;Qz%1bKR;eFj^-dum6Ba>Gc%bGD*Z+062xz zoSe@X=`riBz+H`oo&Bz@t?fvmJ`OjUB&D!N)FbnrZymZXNxVdCXM`Y#=JqM9;J~z@ zWoM5C=@+9j=q79y9SsZ$2`8x?|M(M&ZGv@Zzr|eja*|phzo4Mu?&bDFdczl>W%P^k zD+EK*T|lh2egG!<;s**GF;3LCL4yp*!1vM_egaKQn+11RWaL`|Ta`7xG8SfdA=s95 z4#oBL6CGF_+sIwNt#!T`h%wdE)8in;?Ou{ZeigxRJlGyiQ^cYh0e(}MFHZLsy&ye} zn3!1Q*)#EH&u&dt+M=#S@0M*y$}g!)fAiT^px{|_;fH-a$VG$2@q#9=O%@eq}piDdVXMqnl4g=b+-Lvu_;ah)0VQk zw-7U*jpk?KD@6@V=qaCU1Z-Ir^uzD41)qHuw!him|EVy(;`zYLoV^V7OEEP6b+UiC z$9j*rNf|kK=w&?GZ%sY!N@5kxU#_@lxuEnPFHMJMaMLk7y+F9a6tex>$O=h(d{kfL zwui6~T=?``JlUy&Z$r&LFs&-<8Uz_{~k_0zP?7GZ*h+UunaDwKa_Ytv| zpaiNs$Fgl;{N>91ZoCe~Z@hH*n@P-a1%TIBa2a1UMvh{Yx}#Ul2sE|2l#IRyt<JsVco(^fOTI&nwbg&73IgUgaSlqylL4vK9)(( z!IbN>{Ik+;+h>`X@m7Zw>f(qfr+^iUw+|vaJC^qhPaUr>kN5gz`sJz_)#w-wx9X31 z7axmWM>uqkWLs(ZrUZ1yYcablgqAuo_V;6mT-b#>D5mF>@4Z?b@SR+I6va>@dNODD zM1~BcZoX;5&4^xN(aS5N#L(;3WQLNiZ(iR1^STq8_zKo@nJd9p1NWACeS;1T9)bR* zZM<5qI;(#urz2=O6wX=9uKX4egdW%pkCiUxF_SctRh=%WXuP+U2YX>@7%ppY!To!O zP48R8@89V9dU{BV;geu43bf(a=x8a+HCm*Ih#tm0C}q?eo=8dAZzVWgf|;?Z*J_`* z9Mafhn}`Ie-aAkV;*noKQ~#uhPsPwMu-^h0<5!xd%E=<1l}4q8@hc8MJAsMxv$d6w zq2981JeJaHM?BJ7$fEDXusis>er16V8gZ$`{#|NG?S>1QVRsc30who`qt6|zszC`X zBwU}rwzRki1F6&qSZ9H#ktGm&-O&biNK4bMcM(Cs8YFRFzGSW(Vl0ZE1Hl5x#M~V9 zJD_iw)=!^eAwh+$;RU*+Oi4^%+Vsaw$Fshn{T5U#T`mcTb55a3rce4(*uGV>{#qk0 zQP33yP=SlLkb3|i!%e^V`1oixsNA85v{;NU*x0VF<`42}4mj7YamwL(6))tDn3cfD zgB~QPgnr=_dAXb}+0 zz02d-{XR*2WZY_XIwdcak43NWV_f{-zMU*!7ZjYN_P8%=V^dIKB(8=a;Vqhy#}4Vh zK*plH0YaeD{kVH*WJ1ccdD+=RVe`)uiR@jxM=Nu%T;seBQ7JXuR{!_r5O~ZSK}W}n zjWJQwMHaosff{*fIXS<98gpANOC_c7D&)C=Ce4OJieocg_VpY8{(Q zRW{LUma8jgF}%C%R~b=;^=FO5cjy@1MU@f}+SzY;on}j2=h^_V@bHkpR=^uQ&ED|b z^bvhvsUroTE=EJ&-rT9?>QHx=0_?==d{Yx!EI_ibrPQ2)svWayZ-Xr zwV4YuC{m3LqN0ueH1n%#WFqq;&Nm~2^2?)TY7Ilg51W%(VF_N(cjxnpL|S@_FaTx= zlb2}57#Ij)Ji@1#Qn21o&GVuuX=w09RkyL761f}eHC$cmdCSnZ{u%B0QoQ2Em{G-A zOKXkG#`9kx1Q4l671CUU7xV?miDCe$xbjZK}ade_>!*~EJjCkahh(CsX zM|M4a8BGb`lJW~G>*=$c;pc6wY{eb>CC=+NXtg?)x+wu!G4!dH1~Va-k1%xo<|K|+ zY9^er($OjScD(LsF>5RCdb+whPnpin&Nt1D+jk6F z+p?1yyla8XSE+h+IC_oAUZew{3H*mgeg^oCr4QzG z=!i<7>gkCn5_I(m`6M6bfGbBF50C@3w$j&nDJc~mJ`Bv=z?*5^Dkm;IsOu$&-VU;kg9W+jS3nr*~d>9#uwMKwO`BD*u5*JYNo^vNumPW=4Q$h6>Dq{kB@D=YK8i}B^F z`P9HxhDANSjxT)MvT(L1i?Ng|vyJgDx0QWKgCo^Q;^Jg;clq7-!a6h^_UzNrakaMI zshjn9q1B57;gRdX1*G9WMFYd9!rXdD*nN@*A-KuSuwUdfIxG^lhF%ltuqKH5s^g>g_kybI}~P>J*$TE^869qbI$4DD*g;|1}eaD|N9W^$s!58IDp zHUc$qAl@$bYQ3L^py19{gJ+oK6ce-Kc$GaZdp+@w=6AO`s=zZCgFahzcuWc|exzE? zTJ7?J`ulj@%nyfvfj46RH;E7Fw|LRyhm3H=J3A9tWN&ip70$j-_89}RBGeCSTsAE; zm3t~-t+E_60Kg&g^sx!dVDhZZ1o6uA9aI=#lMnsx^~Vxvo- z%+~|}<88?$JLGNBN4eO5g)xxK7_UB4iW)HTy=X#0itdWpie}c*S)`Sfmq(rZ`|FdY zGw7gjhEJ`E>RZ7HO$o9NAzSKwt~U}Wh*Vk&8X7`u8!sW7RYi(!u<^Qp*SoA-FCTsj z!O7tf5ozsslp+f7q@0|b+!AmO)tcr*#ki?5VddTnP6VokhBA=GjdQml!?K07aw=_r zaTI{ByC-|{ujChgfc9%z9ugMQ;dn5OV)Ukst%iB8hR>U_1o@?f-$c3R8H~ZwsAi?w z{0*BGsS8U>pvbh1Uj%(OauYl~T2Jus&>7ODeJciPy-pp(E~oQ~ij2YPO7V;a_7^Rp zV%#Dzs_!_S6@NAdOmSi3K*eOqyq-4Z`bBW-)_Cro_xViMO8>w@c3IgyTiXJCXJcbg zxUde4eG~IrX~nYg+kct%1EGDn7myB3}%A-$J?tlD+mgl|?UuQ^DfTk-X25cV7-5*w{g@a_7`s*V!rTiIjFT*eM3cyPT@^_ z<3`3l1QZPdFmxxPD4yp3xBzc`nVFb&4i40N$S_e2tL)yuM_E3;J%VwUo;EREIhg=X zFX!90rp`|Jej`TIZ@IZ?6&0EqS;b&9p#xu~C@v%e0|RvpjXzskJ{l8hT3Y7i$Oywd z;Qd$DUMlLNV%@kwM^7IQ^_;icjXLebBcK1`_!|R9nYH*ccBcMJCokfU1x zG}mLpr%HtYAP`0}LY5*Gn3>5bDcw0g-Zt-udWG~wA(_cEqmdbgbPKiHco5Ng{M~YR zG$8P}*(3=0d*9us?(XP|ikOe=&H){5B0|n# zJz0?m9pH0D@TR&2bb{vA&$`vuS8Yfq3z3UML+W{FKT60;>O7B=GBRoNCWr_JLP3iJ zU!31LYK?@X9yoM^feP_QXvM|JjLy?jQ`q>v(m8yV>W{_6-&9pq%`K0XYDI86g9Or@wwO~XbGH!K{v(ac?)xqShiC4?6t4SPxw;4nbV=61DQvY zk%>tLm|)^Vo%d;XXXnL4SzzC)SWzgoMB9TpR7s7g59@6`U=H(4#b#xF{*cuj+CYvX@BdX}#ewphhMZT!%{qT7t za>ive$SO>=zQq@@_#;l|?EES!)=(__?Vpxf`}56E`-S#fE*mHJv_>Id<_Rf&qS99{ z7VVM%VAXKh|9t|E3>}xp_~^O2drVU4;dGRZ*^9E!C+*1mH}(#+UmIfd^1cMk)D<#h zw)<(s0ko~Arl$DvR`ukUi-}qJ!QcaCF!2HPpfs=3E&HHB=XHhMSR6Z8^vjCL)u&iVaNzV zTN<4YYc@FRB4#{=YX3c1O1|+a&|^RNUVD<1m-8O6+{U^}sj5={yJaxrATFMFx>4Hu zwT^D)A0++&3(^%I2LR~v7ME=6q+puhLOhI;4gKiZbB4tYJ7QDk@(h7k&bo9AMI2pI z#B?J4U(XFKpHCa{oxeMapR18gtvw%yUj}fhnj1<0KZ?qZ_+Om^rSJBa60TQ!aHjOY zI~>I8*LE1QNugwYkoB~#{ zJSk_zhOG^~j-$I|;5T|il<4q*82lt;0jyy9?@H5jMOyy{8$I-qF;8DJGl^so)ZabtJ+~7v#GV9z zL+pDl<2DglcmAkY`B9VRmTJ|W_;8wJm9>S*_F>0@M)tp+FhsBV4=`e@CVf+DBef7g zz@5c&Y_4%TK?plKI;7Naocs$K4^P2y+p`bb@5JopA0U?3xtb?n#C-ub3}Z@DkE z2;iXQWTJeNk}Uv%2(hetTQcWbrD{Yo&)Egf>(&fP>tg-=#j;WBMIt69)Xxt0!6F2| z9cZI}|31oX1Pr%-RmG&CArtIN;vVcDS8nz?_I5uIm=JsU*XI`{L+kGxK$lQe^4npm z>RbTqL7o*Sk)Ylfo3OR0=jd&p5ZBK5-_|r&LrYDK><4#b-U5&!TZT0*QQX#sa_T_t z0-M$#Y;sapv)5OM8Ii{L#f4W-0)Kh}rO?S|Ild+^#k)U<^#ivhSA!X@re+W8wxqns zl^Z`2@N(~kq4cmDHslWh;Sem;finb9s^Z!!1rUfp{#)IFDse2kVV3Lm%z~bFqL&Ae5%nIB ztl3yD$QqG^2M8zYkD7_b3TYYkztzhRH1G|%Oifi^>@;4{Uha7b8`~0;N~0RLK4t^D z;M?pX=^aNauRe>6l8`DzDE<9k{O~`TP5x(Gx*mz`;UO{FkK6X*`Z%)yUW1YwtH!DNs_`z|SG@m$ zs`3{X8G#DLxZCC8cuX@5!q5?BG3){G0#REg8ij>DoN+rWZ>wWjOYvMV0Q@^f*mdWY zY`4!Xw~8R~UOtB9^z4{YNh##uPD=f;xf$KX_I2~|?DqWC`Ech=cD={8j)U*^9A52l zxbu2xqf9XGi+MJ($Hj3Nw_-yx2BmJnv3A9E2XkNE=;3uel>Qa}p@Y+Zm+2|&3VC{Z z76EtcTgQc(@ALQX9A!F>o!5v{Q&ausXP<(oH*jFUnojBdFVF4ENWK|2R6lTMj7Us; zS6Ye#eJa%9CYNV6T}d{={B~&2g1kIfnH;aQEz*cbzJbG@-hWeTV*A6nTKbzDH5o(f zn}Hh})-i1Q&1J7b^I~`lv`gQ^OLlbX?;LN-i&3ehjhGgRzJASvhS{>%xps7UK6|}n z>w8Xy1nw;lnB>-$OU-*#b#*(z*b!NzD~VhxTj_5tBf(VrKkg1J*-=p7Ah`kVh|CeE z0NB2sMmz+yn!qRrMnU6sGjN6yl9Je1ST&X+3SSSfz*`F)tiKxU z*RSM`U4eHJGNAkwHD=tT5O#urNSl0^QPg7n{{8zBU>7ac+1s5qc%Q?;QT1z_01_eo z+$ta~2e$uT{+-W@yAK%D`|clMaCVBHie7Rj8MigmnYoZnx-MiP73}^9KbkD*_qX<~ zY50PDmq_*|j`6pPvjwK{GSkM)qfgg-h^FZIzve;0%S%WtOW{>@%ACNjyKdy)uh3_{ zTF-eVBqS6TPh*^$?dyt#qi$6G!ju`em7gpcyLMsyGD8Eou{}xk7`$ZTe2r4x-bR8> zaNCJ;{nu_c8;1%@i;H{5`&%v=s&;nd`)ZU&X|Gk#TFGS>Sb=JIODe|Y>!7i1b(WWP zM{-SxPJ&wJ%40oA+44_oI*uZ|rpkqCni$T`rjG@a(~R3x^z=5)t82=2Cv;TRO>Dhn zNCvYC=G((<`?&WX)zmkP*^a6nciyC&xhOg*Sp76|GPj7HDA+i)b`MMUsw{KUz#wen zs_p>eA!q*DQrl6 zd0Oo7^=M5IfBUVd$Q=9w!8^7mx9c4as6}?b6_+h2X=+L>LHPWU=#^VgIE~FY?YYCL z1MRCPkXK7K^cXN19 z$5XL9&)!=ZKj-?!r=ctEWn;A?mUTCGo&~q>eCBT#@5Myv0bvXfR0IUd-l!+}0;*tZ z2u?IW!)RXVe~Wlkhs9dR^9-4o=wdeg8_fk8U8A`sHZis^$rmZy)t0~6$7Auxh3@g@ z-<1qJqT*25Td!WuVsIfO{Cm3B$pZ(*EOig>ST4}jQhDx{R0O%Hfil>@s9^xknnkoX zJ3Hd3*x0-9ip9p~#JaUE1*xvKhTz%26&KgYFb^Z{Sq2f8?X7|+*{2`0T61}9zgmA* zly1dlGZc|~K{YgN$|!F1kxwY2nsnaQ=xht`IFvdQ|234U7Tg0x`ywJ?|B;w-avJTn z>m>o%3_H4F`7v2bQJ`6m);cI{i6tMGKUosOQhLGdTAxG9$GZBepgwD2xT>Lmmru%Z z({>|IdQf2c^E%$WzWEN_7(%ER>=|Y9&;f4)p!-(A9g#~X&OJ9dk)hOKe*?;Qp`qLj z0NBBrzcT(vg>iI(S4M_xXWvme&t_+RD2Hz>pH0a1 zs5f<3!oa{G{!DLVbITwn;rg)X*29MzVtMZXEL{3XPscP*O1zMIGLWq-BZWu1Dc4}m z&kJR`f7~NVqqdMkG_)#a5zF$vT2~IhUjeT~@bG{x78dXMrXu(a>p8e;+$14%FzsAq z_(gv@zozp;S(IF*Cp{fEXtSn9BHT}fs_Mu8rdw4&9fFEPA>o7y(#v61l*g5snTZ50 ziVP*aqK38_Ju%k6MMcoEM<(MZa*eIX)H@wuZiJCROV_>&n}FkNT}ULjl#2M)e5ct=;=jJA+DiZ@*U*5)^wv$S0A( zc7FbJnTAC02zp#pfkX&9`w9H((`C`menZNkLR{6;KJ7KIY`h0}^JM4G!tyfX=-&Q5 z?6`2wrik58PNEqZB5_H$Ot9eivXK<8BB!ApGlp%4!w5w>J!*NO{y2@_R|MPdE9ono ziQCMY-_}~&+L*842-2YxgJ^Uy}vFl-&FNN3Uck zaY6KuS+)kSz5PsMW#x5R>KHCxU)f4ia_y0*p4QPtg|1!^97^vY0tG8=@H{xvRUb-eJCysG zpqaCC@eHC{(v;NHCWC>sgu1x>g?y-o=7t5=_fJ3257CnPP` zlsCq1we}=_45qZ5WY=vNGj0S-?$>m=s+v(7-dHtJYiOl@Ys_Ut1XEMJ_H=pqFd$Go zx>E(?vLQk-Qc?rFB{~H$Wo6v2YgXxyn3$LV5^WwGjRlix;78cm z+dngLQ1N#3;W_#>;N#%H1v+~5jq|fJohieCg_b>^$WR2+ER;fc!e}-z=mrBDn{?iA z?uIS}WR)`69@W*=F)%Sb;NVcv$dU{k5iXk~CF>L^9>N{lAd}ZNb!|dEe!n59sX2I* zmzS55pPx}!sHBlq?v0=xQ2s|IKwB;Nq5Znn2IVG)q_AekXf$cM&ok6%LG!VQt z6IfzTo;;+BjFX|%7jx$MqVQ>TtoRWOG)v6NChp@=Ucoe4KvgBI7aZNSs~z}zg&tM@ z-ZWjTyjMYCx4?H7!ZF$x9QG!O=;>FHe~*x1p0Wln#uHOgu6oFR)B!bvt?I&buBGL} zX$lI}OQm;BQma~X$Rc*gD-*Xp-aWOI_wpXLHG&+5v%QR;s&MU3M~ad!Ffvkug-=dp zYYE41-0bNJxV|(TYrMvxird*C$Veb~@efSTiQIvu$;F2T=xhLq_l0WtEn7Dln z(TLGvjMFv41QZlE`q<8sl0dj8K;ixnW#^YkkkQ`4)23Kq&xQv=UMzDcC#w4Tzp|6r zw9c~1hDdB}DHlh5E0+wTxYw19lc6+hf>I{h>hzQc1X2vffc+x@b9WjWKly1chU%;9 zdg^nauwX!Jan{cmAoPdp+SW&Z|84|YlxSF4nhW&}xnBN!Dj|7ZnS&3w#^Kw4jTIiv z!wh-|4=G~FX@`8^(7tsVS*0tyc7%u$>qhQ85S-p99GpEZn;@hLO`+O3Vv{H`6f;@i zroylHK@R&UtrlX?=r=bfKouFyd<~Dd3nr_?iFonJ;JP(9#KWjER-h3(PbJy!#5`1?eK+ zv{6$2f{|47pBCNCqt1c5<5y5Sot(^9LdY#r<#ZNAhS;t2ftcvA8wW)q-g~@Fh=?HL zW6P|&5DEihl6QY?JvT5h0k^GqFuG3Dzd9GGJOeZ6;#{BAnQ8rDEoy3!FA5m`Z^>G7 zg^i6@2Tyk2f@Z3t{OS^w^s^$}))qR*LemHNw`RWIk2R?04!ZbAFMaF2-X|pp`)-3w zb6OzVrONgM*z~=?h zno6mQf%oBccw}TZWQ^vuTcf8=-te%My+cWfFJ@{g$ss2%J_|}sO~f<{75B~J3qh>Q zydoFIHiw3Qg-^e`Ctfo?oedXX`K%4-3O_F??i1-AW1vcCh_5X7CW8;2F5~`~v1$(< z@F^t0q@V2^kQgxE{sSud1(0(rWX0ETxo+vfHVWd=j{uhfybO=6bKj5hRK}BVHK97n zPWH*Y&v!e3?HKo|H>b;nH(seNJn}n2?L^iJI7jZl7VyVR-80h1zf&9B4rqA!D|=(= z6rJjl((PiG{^`@F|Egc4|7u{RLQR6RZCqXC4aMIqu`jfjroKn<6tdG`j=Hk2Ed4Gb z8b7tT*LK-klCFF2_zH+)p{bhAtZ&B`8)LZGi$JBv7fACqWfNP%HqToIWKF|9`ueOr zJ!~U4SS;iTYU)MC1t|(}C2T+Ab9J9S@b5zh+Q&aW*L?|RXUUyMV*2{zJv}|$7|EUE zX}Xe*XF8JLSPEtzPOAgI*1i@Xx#)6rzHsThx%AmI=Fn7C?a|6ad1*<@D86WuHhCYe zswx#LM6aGw7v*;7EN#s+P#r8;uwm8I)g^&pYCLi~%y*co>%~_Jii>9WyJd^FH#UMp zLqj_-=a?pA=_o5EY(CPUe2>Q&s(eymsIRXGLd$snzRg4NEPKB?)075?Y=!efz@b%d z{?%P`1XEL_{>k-qO(thyA3i)~Vp0OWUEhIQ~}``_ZsGX8~gfh)>9dysv}l zg)TT3#BAJIAkY3|N=nSzCSBv%L86Wh2ka;^VESGGEcaCIEaZ12&F_v5$jt0fKBHxe=<}xs{Yvd9s6TkwmEfW^+ z-Mu}Hi^tw)TCW>U@BB~ph7F8OyL($(1Cm8i$N~{CSi)28^%8K&Z|TJcr@B=TpuvFUDY42C6453(H1_(vt}5 z?yo#g#kVk!1Y82Ty1>+nr~L-bIyi>P6oqD#l|}vhi3WdBjDHyhAvzBDLIf_EHovs| z|B}5#q{usE7T`c_4yp=01e^$zIl)+mjWM>K#6hGuH1yvh@}~85H~QD_&PB3yQxG=H z1o(=!W14k)+|y-tTu3ZUp?*58YDN-3agRaxz5t=9s8ymW(w?o4~T@_Ecab zB2Z}o8Zj(MslL}&C+C$mzm?UF8ZR7hBkA6uk~lS#l#jz8AJXiRm6Q_sou1;M#TM$1 zQ;!-Qp`!k&UZ!}qvAnPVzU*iw1F4eV9U421K7FF*tF#d*TZr6H-k#aJW2-vp=%{Sh z$*LCRkck(JR6fie(~xgKo_=D#s>&&lXnYQwNEjd@io>~F82h96WoKtI^?5FJ#dVwt zA5THula*@#atv+lxQmndP^RhvB!{q=32tXxDrV-$ogF(`hM5R3oJY*Cq=WB?YiiPg zfl=;y_iFUMLHm7CA3c6HCZ@EM6hDX(ajIcM$iBPRJiR97bGv4`$FEsISGf!ANMv-h zEO6)OB0nPd0;8~o^6>Bg6%~H}8)&cOudjQ3lMs@F)v4;z0YjWSPa}Wz#CWnAN|~H9 zYvxmdw=pcW5Mu)tjZUS8GYr zBwaX-jWekZN^453vG9y_d>)W@Oje++TcW4xsy=66t$xN{THNTP3oB8%Z@GV;jnR5i zWm`i!{Jfh@-DOYue_Q~@`?mvT?s;zG{<|T@KG1?6aT7H+o&-A!3)*+j&hF;sW~=YQ z*+kxFLLlzJjS%t9;G_6|RDE|Kl@IhcLLr$^3E49;LUuB`+$M$lmX{`u^Vc_x@AHUC(u&^PF=&E1tVYVY#=9ohPfOC)2u%eJ%Jk$Mb$F z7sj13P0TFiphv+i_o1rl+#D^HBCJy|q-i+JBX!nQ!(vkY5Qs!(-F-L*{!eE=n;ZA; zT6p(QT2YrMk=ak4jduV^H@ zT6~JbIo+H5(qn*ob$y1?bFZpo?Pu1^>zcAZme^T6@8aYL67}^#tT_LQJX^C|G7aZ6 znED!^q;AYh4<2Y)j}wAigI?@BRo4EKYEfWIN=363LLY|6oEH)X6{gpDOoaZl_F4uuDg+7bx6g=ch#jlN53LKsq2QV+6Fm<+0Z>eavxJ zq%)jT>0y3gtrPXv7u?KCF@GN7;whsiK{w>+q?|b#pE(>*;}%LRZpD4Gpy2a2xHVKR z&FK3eY%k8}0F#ecEmIMKYt?tHbejtmmK{4>-ZEaVUd6@)@jge-?P#27ecoFGYdIyD zX+=C)%E```(}WOgK6QqzPoWQ0V1)El!rz3=?8t<;Gz}98&bx|FxxvLsE@_g7Cu;L( zt-tyKp1Z2%%=X_?_ny0FkN38`Hjv>{V$c;P@odz8&}uR9TfB-qJZuIt4;kvlt^|YR z&~UHWpFRUHqI>RLebI^?>qsEZcq?MZhb(CTkT=wa<7H7dkW50t!&Uq86}?g+;+%PD zYikP(EUEp=j5ijlCtm|ho1@Fg$~wQ*nSnO<=LZi8*fFotJ`?k@qoS6I-aKz6iIL;3 zr9l_G6O6-uZ z{Gu(A6m-@jx7->m_AU9oRVDq-;tMr*Y?K`A=T9Q2H-nAGNbsHC&#MtL{E7*Y!L9FD z`lC}*+qV19o90hR1zlD#3*?qvy5Qa+p%&7XmaNdDymr#vY$Gw2Q`DO?U8`Fl@N-YQ zZ#A}gel|ylfm1Ip+)SDxex>6L79?i4Ob>|Dct_355Vot$se8tKP!?%*p_Hw67B&-`tix`JUR^|pXVx$Ar_l^y-g zY9Ehs%(vdR18fxG{h~Upfdr8Sj+5s_#GZ;13B+}hPn)B!g-FtJVVR+;pIjFORZ!6a z2T>iPCi^4&^3Ob|7fCpIaQI-+q0x+nFuP`YeLU~sCB(>f$d%wL`cLLAUL3i`dzlO| zg3ICPQjOxG#}&ub?N$NP>xrEkQ`9^R&NMg9Pn?i#P9ih1bEDy7YO~(%lcLW=$kf+D zSo>AJoJ-*}G9m-t4KTzUy=g#?mZi^|V_g)q6$T?zCAbnCuH@^zi^JNgpN;rxTjO-J zBL|eG_o3w(erGqK@@K2&b7&{!epE&fWp=JrYC`Zr$n#!Fg%j6=U97#+WN4N*ebVJc6{xp4z5;$965 zc6IR@f->`)4h8- zYX*99%h{*UPX_Jm{J_R(bXah-uBJ!5O~f9TXrpCUBexbhFMaadwN%^z`rUobM&5|# zlV6-r08rU{_LDYxV3TPv;aXwp!T1g|KqA3zv8}N(84aDI;IpR^1wAA*6diKS3`SSYUc5lre+*BQhPllop%*N*+tj$2?5>W! zFr|X*q*4CdQxw;x*d3E;;$$Vi0<_f{7w^r*KmDJRh>sdP_!yNG3I_R%1g{G$ZY5hU zu-mWIAP{(0on>c_Tu)B*+MT)X%W#H;=d(w$XnqKyDzCh3_ff1vqxcz4qstspQu_!A|b)a@tViXUwswp@2{fuTz5C_dZFmEBbQNzo1#;<2gkoJ=uqHHIpH+f(mN}w zHeI?DJj)B8VWt8t?nW)Bd&B*^vN(FQh0Wh62ty@}aMv-%LHs>jglJ?pNWTWesyiww zDll}!yMTK==$HrV_ZxYw#&nDL9T#PxCP@Lv*^`jZV>x1u*1C4-@}AS?96DGy6vqJ# zArU-2G5!3C)T{l@_hC97HSzLk#_|l9oZi2*%d_;$cbB`KaJcpBZDqwB`F;H+YtrFY zK~#j9CE6}Gb~|Y53X4cf4f-@VE9yyB@bI$aNUBP1W|s*xVPXB?wOQ4C-jWv7WTuQ= zGdrW|m67HXN9}unV#%Oa#SWykZ#)W)BqAs88O%w7oaAqJvevK;AomFa1LHo9&x|m| zqu2B!bv`~A#~;+r-vjjs7>N`UBTQLqoxhJa_J_)hWxBgD6o@|U`jl&rG6gG(CS|52 zU}1S+UJkbOVPpQrB%s+l&LuBF?gL94JObf?;Me%0e&i1x{0IuB=#TaH7w?FOg^LR9 zziSFnV-T$QFA2EY(}iJxl^Bp!W0^8;f8X$RD^(w>wh;gme=zq<-Lw~i-{zV0hz|{! zayc%hG2=q;fKdg5T1aJ%%U>sExSclT?mkX;4<`|oEu#D6q{Mu3xrSUU4reNE)X5jg zUV+CY!abx$O0HVHV^nvB@kIB{;bCpU{H{b@)Aux4YSI@?i&kagy1JMT9>`pE6veO_sAeXmxi$;Azj4Iu=}0NrynuUK5!YYx0=cu z?XD7B!M{5|4?zZE;7dc&U}=!ia`va9d9;r+T9^a8>8t7C)q%rDrTSURrD=;H%wa6+ zUFn_MO--(?9<@Hl%}+>|r|a*AVK_L@0IkL)O?DaH$j;3TGZ1=dR{zl>#ZpQge{3}W zBANH$<7MJd%(wh^h(q6BLj|sbq0VrSL3GgBjMoM#)X-`dMgG3U`=qqx74Kw|kJpKd z9~p9_kO%mB^a28HZws1$W_EINQY8pX()X(QeJH*m6pM$zRzye1-TWZ4@xz}|{W&Gz zlfNPMbm2aBo3%lI<9HB%cNRk$XFBbPK78ct4L|hor88zhD8y`TdJRC$;g>F7LyKHE z0)5R^7gNTKm;tG5Zx|qnh@#)c#{&U1W1v8Vj&m|Y4n~v*4)d5@U2+pIu~hS$B#n%S z;Tr&$0KYN-sQGK2V#*bKd=p@O^V&|0+g}^Sl8{hVP?!huV25SZm`4g4O!+(w86sYM zkmq2}($m#d7`q4Zt3sdt@81=`e?a_sd$}zt>mgQI^yl}aVbF_eq24@6)IV)J4bcM- zw)P#$qbY20TJRIThZw}9q@}O3ztdpMVw);q_z=!Dx-sm58*eUSt*UutaM0@pPu?D} zrw!K9YC%NMdLgEP260_JvQ(!gKI>7iS}i9Jy|bO_N@LuB6Q#WGVDAQ$YbG{4Bjfr@BaiQuve~+N)@2Ifi1e?^K0}1h8fE0>M*4p=30OieL9i@8prUL8pKDM?ThSz(XL(3<2ygcl1M>Y6Oqtnv0 ziK^|=GE5Ho1EAd#6Q|FQm*q&x$W$1$b7$vJY%k|TnU}km{w8WVbtM5mktC?y+Z%r8 z!M>+Q1JyQO)_fEI4CzWBILkk|mrX>%VRcebNJ&aQf|bIjNjw}pywYb9oGe=m_gy%) zwqhHJKed-V@OBp>=UjiW_>COR_~_(l*8mb%FKPdXVF(WeYcuZ~KvjiLju4GsUux}Z zrW8E#ydkivfY?=>1B#BXwwx`UOq%d1l@pN`g!8;j^08L=qFuw;(eUCDwei&F%ZZ|= zI53w&r}uBEp8^F52qYbYIkPbtehRTkOo~TPPKNWvvKZu<7)8UgGe=cPKTRsbZ{Ms8 zXFMOy%f0=e{Kw{Dsfft59t0(DmU4H0<7}XG5$4vc+~=9%s{_-gH7eM2FGgYXj zhZkqs@)e(rQAilZ=Wo?E8Rp35lfRl!H(zJBWIdt?2(L6J3V}}e*|Q{6kKq~lZ>->U zS$)=eytqhzwpZg;g+NnG=Ecgin{9es2aOwctq?~^gbwebL`<5>qT<~Fe z0hQ*`rXUWOX~&{XIdoF8>o4`7CA;dRRvpIMWLTw>J zcs+F%eKj`dn{3X)6RqFDiP+ak7vDCulSFstJzt6K+5PLjkSaXiTvQvxaRuMSTm9LK z@8}j&?gU#~(0BA_1S1UGUMTnr@|k}Bac&nku)Co0L(}{4mmrnc*{oIFv z6O<%&(2{j#v!Y(dh~0Zsi>~lRYpBt4mlX;PSe!qu8N@4Or4d(-qIa=dbU5WRN*?Np z?I3kf>7VACe>r93AUlhN6^E#pWJ~A_4;%TL{CF8-I`9?-#%-2Ah*F_FJ&M6`OSODm z6O+PIW|jbIU;9796su1$N{i^7Pu&+6pNW#4ojqC;#?jmPwUlAyrvR4*5z6q@x2OW{ z7md2qwvndB4rI|VDWA!%jjiI#YEKxUbwoxW^lPjT@j$f>udHl;LrD=et=|GLPxpA) z7U;%8p@!7k^yql#Hb*o!dlF@2*m-;28R~u|%u(&&i$VK-qoJXDZ6(8Bpl2b#%zyZP z!T{DhPRIcVZ7=0WK6mzMG8ojJZ;O@mZ0a|sD?fX;koQ!!56l+xy!NSHbDK$e*u)G> z%gyoIzJr~+V65h>uZ0E9+1Ur{dv@s&p(G@hqfNfTJM#TxM@M2BnqFr16QcT4NvX!?`W{kgIbxob$0-C)IKQ?V=;q{5 zBGshSCKrD_^r(HrOb$~;zWJ-yxAt=qn%Wip>phQ7L-06M`Ze~+eFB5l*T!pZsGf>q ztv5BhZ8<@8p2`#pS$w52?w-c#D%SHa3>Efl%!# zCv$dt)Np8u@#J`K zcfqhKY+;DdzfhHupIS>xt6{4H6OA+%f7ZJKQ%a>1M7W(0cEP4$iMZ@zkj(3_L&v{Q z3&FtiHO;5R>R_vG%WK7_z<*}{C$UcRQ9$U@>rvcC!82U|dcTsJZnDFhhE$tB6ay+LK-bjWYc zN9`v}E#FS*0ZgXcUF@qjp5&jRj*{}?DBXjSi0k00`x-yTV`orCPjs@%iV3vtjLhFw zP35mQLWA8|l=HzR70Z^3Q*XmOB%dyhAu7C3MZy%3pA$afBtlCmvZ+ATDmJOOl1lY` z-1iNB8O*GDuJ!UAA>Xb!)KEVZ_kV<2t-XKG@jb*^*);zq7Icq4yZe{_g9KxiJZdc5 z_{O4%Dgwd@K{R~oX)!%6`0DyfDJVVrUpyeF;OC z^TsaA+R=->7V)3*?isG9KZALa_gP7C$oMfTr(a5y#+1{1RG%!iFXs@B+)QV#|< z8P2x=Q`TR<(tesmg5;fSy?ORPvP}nFXNN)f_BBdRaVJ=N8f z6&EKIazP|{%3oJ?zz|S zYB=95n|X6SJO{NIE^Xw4c<9?2Y8}e0 zfcfq6tZ#kon5yOn3E|!WykG0xL6TNw0x`L}++Hu`6zw!SJvt)6Q~OcrNj1^o*YImYryjS2nZ#*@*|K)K4(>kqnuK z32lDA*-xR!@8?&n(wJ`)_g^x|i@q3oFPA(eY|>4qEw)}?inq134?P#a-x{SR7{Is6J*}R2 z^l@uBg|s86?mwSOB*?CEq5h?Jk$^c6xWqv4lZsVE=jMre8y_$2?k-SP<^YzPbgz+Z zuioohlQo?DWdqv{E}tXkgnr?;fg&~?@I8C}ZeTa2uAZAFYpsWyn;Y$5OGf6ei;LVc zpjs@mo;cHblcRE5v^dk&IC}J1{YgBR{W+UYV(QoHQXo|ep6PWq^SCu1g#u+{^)w3EJQiq0~q5=lx<>~I+X(_5M)vZOn zenUe;aKVm*oCA~#w~=UUd@565IpFTLOPp_YlAxAEJu_oeZsm2N zevdMQ_0>%kBrY$IveW#o>)9Yw&6gxTif8hCOXT>bpHxl4j?%q;&-u}g3}<_IAV36C3}Q?ysir3KFHrGARg{;r>cx-55oQ+Ygzkg-inriXt5tP>GQy3iXic>ji-@R1ZW;fU0Du6A zYf4mz*(a(0v+Zy49;JB~E=S;z#q2On*xUNzv;8^zRODPGln)C?Q9tE z;Y=gkHWlS1_J5BjLPOD8OT*wC`u>d8?qdBXApaF=P`&GASS!%ocR^Pc+2!R+frJZ8 zrikJF2m^xr# z@~6xQMeuT7Ne{+auKTGfkpmH6our5qUWbuF7Pu3}l8Hum7_L^OISmd@q=kyu$)*VK zsYKg}JEb^Zd&NrH>U!>BCnd=MOX=-H2^2*aJk>|4uP@yemy;t(;J`|b3GzMsdlQTh zv#dI|D5rfk;E;!a502Wq$w`#1kB2;$_Mw(c(vn+_t7>-4t<%ITSlIxQV8B-iAy_`s z(-@Zjn`kb!rWTs)A29C@MO9P~klb*`hfxVK)o;OnuE?*I`!Z3!JtKutIn0FAVppUB z;8)41sdTr+n$)~9l4_GWB1)Z>((byS?&cG%OfoR!|ERREXeW&f*FLpt(#rNh?XOV3 z3=PMVR@q!;Vtsr{w2_lDipSvR*SQ}a>8dC}aMk(SLYz(MEHtcit#sT&ToFL(XMQJS zM{;w8*=l@XOS|%JUgXM1iZ&6|x*#8|kItLcY$-nmE(hW;3?iZrglVy{p}q0%(=LZ$ zw7#AWfc8te!>lU4Wp`!P@>uk?$PuM#p76`w__k`Bq9>%EeNS(PVH9cjJsAwfB*hXv zT%@kFzPYS+e8lznbdL-!6}UFmZ4V00XO7ANi+C?bvQVq4^FfFYn)wuf8JKZ*)~D5r zcnn`AYi>k@Y{(tw=9)orGhrBp-^l_zqHW{ohlt>t#&@D+&%7?Cf%kpjf=-Qwny;P@ zW=lcecaFNu!gj#~z6AsW@x zyTN#C7UcbH@FmFpznWG!9Bk6GjtAB~R$Uvb`8yX#kUR!FKRlLVcj5O51F*^LgPSG- zngCte@ap+qP4oR?8-EyGNY%dcYr}k;$(SWXCt9Bb+>KOlD|__gXKS#X_A$Th)Bu?g z^kl?l|E9%xQ`zMwF6uHayOvKGiCeMaY!)``QvW^!VDtCaaEm9NH)~c|G}mJXuG_l( zsA;kp%xDqsO!aEy^+Vp`wQUGKIGA9{s&7@jSVwgD^dE`57V2TXI#|d<*^qNy&45Ma?_!ls!8?mRZE(P}0&ryfls*qbq0X4+<J#Fl5%2G8kfY98{@iVt+koXYb*)Uh42ZlmJ*tCe@v&p78N|h!iDF?z1JOwCntNutRSB}Ltb89^V1zQk}pQv(A%1}E(Yc*HM07TxDyqdX zu*K#gh1Q+rBsiJBbt3pt+t2^mEAj3SAAK@(Gp9YIuu}lnso@6tn!7t^Mv7HRztcSt6^RXn2@vs2 zX3L4%w*$)QCj^r7tWsds5UpNHY^8qRpu>sDzW^!C#JHxEJ9$_AU|^=d>`N zYM}f3jlk6j0{px8-h81x+a!fD01N$)|GnU;fU5vxsaePxadk1*T+^(cP&_reH_&92Xe))?bSsGH)Jhj2O%<6>76T3Q}*&`=niN`vA-)z zl)m}?y|vPO@Tt5+hQMGM=DG~Ek7SOt3Pf9M0AnklkhqS@p@e~n3A&gb2#fazquwXa zo=Ji^!QtVdZk=-|utpn{Ci=g915G9t2eGH4V@!PfnLLki$5qt+=*$Rt4)!OE%*-Kh zRWtZVKpeV=2!Mkk4wad@3f&HFZT>E6&#JvfzXz_m$?>3>^>PK@hnN8?L9C*3`kfE- z&V$#U@naS3$t`CJlJ#j3c&6rydprj4ZRzZ@RWk>Ga1-ahQzEY3xc901G?6B&UWo7h z1FD(F%QMxSs7tUf9pwcMCLu23`Uh0UgHc`vUZdjmRaQowbtPi!lcf|m z)7yKO$7+N0f0Pw=ZEZ?R@aOnkEL<}FTezH@(g++dNk>}uot+AyCYK}ut^g2WbyivZ zcta)f+GE>VAvLk(M}^tvUu5?mYQGCbsOHfFmP&okVV?ANZw1lq+fZwj(LVW}CM^C= zr{^b6_p&WlCzujLCpyL0@7d%Vm5TVR!;N@gGG%#x%!w&0+{C?6QKIy*M5)4mM^H04 ziuXP9&cSAD5_p1eqk)E#Pa#8I*^l58Y_~(fQyG-ESLg2+5c7&le0@=Edm8DAd}+lV z5Pk;It^|wW+s8`Eeo@QIrouY|bmP|4(Qh}|p&Kwql!!csX!?oS3NyAq>|IkpaR8qP zJv-I0=={N)RpfJcw6+WJ7~`Kf?NnQ)DN|JQl?FlTe2ec{zmOS@{)rF|9efaub!vQN zHfHuMk(}C#vJ#h}MHisp_brZyQb6_I{C}|lcpC`;o@6NS^&b5IsptyAj+ZQ)U~uq* zwUFbY9-8p!&J$=&S?Ns<_9jhsmIoiDxc=Pm!-5m@OW+3heF}w!y#y+_Mb{vZ7e+@L zadk28ja=HrFc4M@iB#ttD{9rFJoTlei%|W%v%CE_lXin3yxl#A_|~d6!lO`oP-fP; z)AdNLh`p)gm~8Udn9Ndt?_2L;b@M3!&12Ef(BV`|T?Q_$P`KJspMV`}X#vlVCpmVr z*LKzrQLt7eCW#gB^^PJJVZFmk>WZ9br*xZoXf%(9HqnIciWCgXu4Llj0Xm{YD`^IN z8hDI?w%s;U9|n4o+``4eB3~XdxdGH*NvT)m5JZFYGBYuWhLtw>%~>=Y{?D{i<> z5yqVcC39wIzQaK33lbBwPA*x6RO=flI3%yppFDqwZdoN^l`0zP{^&I|jUsu;wQy`qe8sVr@ST4dH9JRpr zCgP_VyxVAhV0jF>ikAS);L6D|^S%6><&V^OH*i;0oA*wE2{0?)5hV)?3&@h~AxsiFngz9E@DqgJf^*J8xM@#9(Ly>nLxUL+Y^T9{(PDSk7+9qe za&q`fMIPT$A2=PLB+*YfIz$*4a+P8S0IO33_zDdyq=D=Jqy}s8Mj8?yAWnaocQz9S z=a_`^yaq5Abs5tLmHgX72Zc#;o`|0fr?J|d^%LTS*wH(OvdR))Z8bG+FOy?ZRej5p zAS$vvrGP@sV;+0V$Q}I56cpr}ZgNdQJ{yTyD)6#O*!r zxZPM_m0BM*GuriMeXmgYS*apG9(`CQChNbv9HRepxqp6?A;4klFOHPA8S391$um&P zk6J54)j-UHGuZE>I9S8ZxmS??qVF*HukY~l`|RyOv9+cA?7f7ati)IP)(!Y;&M$OY zn0W2|`91d~u&q<9P_F*w&HC{QGk)079?XZk=+-(yR@y?94QAglkdKJ^g}3R^oPK+M z1Lwnj4Fex7nt8$1mjw2K4Z_r@j`j5D+R$76 zsRR0P-`8!u|F|y1zD;J#3b*n09>EhYy6)&S%_;U#6y3pELv<%~!80{MyU`)%HZ}Ev zwZ0j+L#~cVW0bP{=n6Z4R}5D3@wBn+L_+{9C1j#ZhpKIa{%76ea(sljXNBkkv*55E zx4yn6X-UcV51SB(E%lbYo$)I_z5COz+BP@lLu_Vxb+eZnwut8rru|L43w)B|A3pj1 z8A%oi36t9Q2hC5SUkiu2&3MSf4h|2SfddzTzK>d?1>umb!W&Mny@E;M?Kh8}BZ6=B zCEpKkYg?JvfOFwx;3GoS4R{0#{Z7EpFvu%icLQ9Y6N0k5^ebTj=Ng|a1?dY0t}Qk3 z#zY9i6LVww>_yukv?23tAwH~`te!rrJ{r1&Eu-t~KC?kV`YGY^B0qnwM)9b#@mjvG zj!QjZf;x5p!CE&(y#>&~waFq;oi4IH#g1`);Zjv^7T7QHTVj6s@(a4Ik9sLz@i-Ok zjkts$M7_aZhSzT9wp0KND^*J9h^XLETyS0cWHEdTSl5Px8`l|PKtWmm?O+}xNP!dc zU1eRpy=|tGxoO)lGW)Cd>)=es?tzV)ohXVLp!iyYRO4cSEOyb&uVSY3f(B6te*?LP z0WzBVqzoOO-WBO%%rI4Ky6yjoUjPl%XD-aAxvZJ8m#+#ZKUMgYNKjgb~;S-+cimHv?pK ze`fNsc>Uq0AJ*VMuRtM`(kuP!S>;dcA$Cx#ZNK=6+1VQ`fSuil@-~1)N)m)xqF#Zp zN0JljmOWDSCK4nCcdB9@UGm$ zt>`n!@Gg&m<}fEPs{+;k>uYLNTn?yxL5(|8F_^)_qi?B;mH`xXdv1 zFc5ot7qN!VZK+l`lb$^rYFM?t66S z5b*7gMf;|uizX7YzjeZ7(N_TCRbY8|wMX+(WvSTL%&qIDGu$mJI2-VU_WUNx0lUO%$me2#tdW{Ssp zZGv9RKsyFWI9cxB#aLx@erEQa3l>Mzzn)YQ=A{>?4g_d=&Z_Jjj=#Ti1g7ffeW=O* zEDz)ApYH22B{BeaE%lkK6L%KHHd(3umLsln!mZCg7z_BtZ!__t+FGlKQZ@LGj|!XW zyU2<5(r&3z4BLhvme;gP=hZ;r1i8XrqoLI?k_O0deQxk#T$Y& zP=V0R=U_X|*z|2{p~}wSd09)Ph4Rfvc|-|r80_g;$z8In2Tr@0c zKu3HCRwQULPd$Js@yOESVS9|MPPO%5_mte&I`Q}2q1t)?m4@70OeCmk*2ZoC26VPw zf0x4q3>olRpg0v-*Ym*$m0N32La1JCv(4esAo#m4O@6lN^r{Jz6F4^^T=-`3wHA~O zqmUa%v33=A@hOyM(SzsLApY3|8kb7zA2IL~REdK70)bRD@xB!q?8J?LC8WttR6xu9U z%Kpt4I}J_ZiCFTI?%=q^Z#y4TPxt@ogo+02-WZ|~yuA&qH+9~Hl5U-N_vb$kWl@ce z?qJdELoTm{GClBgX#C5fX-Vw)ZHTI&?Cgd?)#{hVVAtV>fJYJtmPQrkvC^Fdt8^O}dBpnL`0aWT^ZX%bL(2DiZ(7HseDB`lNmtwMOXJD>}hw2 zi$8y2yX$i0*ZKs}Zg&qQcl|*Fl$s0(io9yphgLi?yZ1CWNdL)`syPn*FJ-vx=^}2W?OCaZx#a<0~HCQa3=(1wkwOJVS_y~6Amu!&1ISi}U&DEYAWp>~NNz`t0HynAMokcRS(9m=+k*~-9 zye_wljy{l$bsO7u4VR|&8jc8OspA(t&h^XKf)gC<&mJ91>dee@gbLs7?Pv>yosC%3 z)&i3yYHK0R^x9x)suosJYr{3|<)whz#>-IM>>v>H?gv`f=!7~?7YIuubB@%f1(Q|H>6R`Io@X)P)@rYRj~zq@2ML9bpKNY%E_ ze@=8_s#t6H@tHKz;c-x+_1o^nM4NGc)VRq3=K|2Re2$fjD~j*E?+f%y6+O15q!i>W zayjlh@*l+ovoYg6>#7JyWd4vwaYWbzdF&*Vl!_KBTBY>vJ_b9+G#zN5{E{ar1sV&= zC<2mcNnzT!O64s!IQaYGa}k(hS7BCUtOE2VCkgKyX+pv$V8BU%@`nfwHM)M!#lauc zosS=5Ty(m|7Y&Gl$(NT=UEjXhv-p8|pRAJ7JW50X1QrOrxCK#>bI`dm!6*YisjQ2* zB?WV^Rf5k|O2O|>l%py(ao0_dtC;&>5|HVMqt^@&x89qFiZKJPf_%YhviLhJBy7cw zsw>zqSXTvc^iUhqCBj9aX@Fb87li>1k;fABNlH>KYbSZTFw` zRh*yt^jQggD_`CqJI4tp1GCKBNK(D(4F%(xklk&k15d85te7%o1wQDkt(IGU`5~sp z?lsV;=Q!egCaa6VgRZ{YrWc@W1gG-TF8G3cWO3?Zx6&M~`Uyp>ewKFabS;zbW&QT; z!|v+qyHhypak~#Q)X!E}1ynHGKG51}1{jMWO6#kUN>cqj20?5b&Z4(D<(u z6#i+nOAgZ4Y8IAb;Fp&`s17?lLhTk$r7qx9)y@6jfq{&bajw@O>xK)apR8=6!UaEt z4B*{fIKjSjb_QePpHw;e4-LhH`Dik8a<(E6%Et|mbV|WL(l4n6H^;wq5Cc|1_V!mm zb`ZPU5%D)nLlivS?BU}I345DcEV+Q!m2*=Ui}*}NB1^%`4IYm8qq=-MU#=!Q`ZzM% zAon_QCbQv0P*n6+3qE^1nzwgYXr!&UN9}@GSvFP22RNihFte6d*i1Ix6xbAP0j^Ti zc5T_eX=o8#7bK6c^2nKo6q3lC+%4X+z!aV-j_5@*xn8{S3E%?}TAm?lJ*CT0X(|4*N$mserd{g<)&Z_Pe(T48U!Q zMFyj=@MgHJGh&_I0kzw#f8D4rmHrn09s?tz{{yF(N>S^HcYUKpmy^WKIa7se)8g2c zh)GDqpONxflD3o?PvRfzmcJmotF0Ll_A)UMO}*GN1MU_Yscz?8UfxGcloh#U*lU;nj6xve++_qk+HkW>x|0FF42nUeH=64BMWD(-P3RT{`7DTKOs%zT`??1 z0+jT-le(tNbN6zk6?xy6K#Jwb8WA|K_sSX7d6fh}ARtNNk85pQRo2+8N<5!4m65c22Ls9r379TqdPI3#+3!A9W82fbE?z(=}eUZ&<;QsZH7;QkE}&#PeG0fxks{-AxSwT?|pd=GkOl-3O*46d56X_U+XhrF~B z39F`?GncWkEs=Ni8xm0uZ}?RbShwwXoDEk{Hr*Zz5&To@kgj-E^AnafH~@i+%^1|i zylS6+>tMWK#KNMI5!2Sz_Q|ZDO3-ax!NGwGIDPX5=SK;Keq{MYH2|hmB7i~Ue?-1q z_hNJI3(yuJ3+08Pvwo9q+|SGSw_X$o8Ga2CTxmVrUc%p)_1X}@#l>A7Eg}b${wFZg zfY=xWN9X`ojdGVFkCn|}0_w3Qw^IGa&8;oN(GO~%79WIPUFtIYBuLM`Jo9fs_^5AL|8XnH`t~ZfuA+L%vTGn^^9~jO{<8t)RIHNV$sLr`w*WKYMRWerqDWrA58c+M{OALqa0PwmIwegTExb zDf^Osl%AcGbP&@_wD>D@D&k%-fY|gfr~I8a67cxTbm#R)b{Q>6$;%x2&-QnxoGiVJ zl6w!g=QgOj2C|f&YJX^oia;tJ?=^OHKV3WB8CE7GdmR(^s=7GCfXB$l)7&JR`bWa( zb3!ll@j!M$AjZ4oE-g>89g(z*7TGVQ(LoGa^ucisl1}LO*5IJtx9*q0)ajWIr~?8F zb(^l%%uEcYw5~`fMY8fwA}!~Pe4Dnn{6&4Fe>y8?K1w_K&Ax|d@-gU$^l7)hhJ{^C z%U4}97Tgh0|Mwf6UX>`wr#C>3H&IoZ{~j|tTkuAcRkLr7Rs~qK#7kQ&C7Y9v>@W2T zVOsML4n4Th`Fn3N7~N9m)vLL+$u}q7yNT$!JPus<8V@)o2yk%+x$Q8wwn{CH4S(N| zrH?rm{crZPTU;C;?}`hn=i*XUr`zRY;;AsT!Ne9MZVeAhCZR|Xe~6wcdbj)bMK^(MbPoOu`eToObb{|OSOTq!V@)TgN(NV1hB z2yh%^mwkOdgk1d{(jj55-zXTjwUEIbG8_5MNloH>Z?YG}UNkfh@iQxah+=f#zgf>m zTxTwJ!IFv!3L@8ypAvCgyoa20yJzjT_>E?wX2bkLP)R~DIj1XU^QHHBzTZ`qMRIbp zFM%=y#7mLZ5)_gL`A8WfAv1K_e02RcFXX~B?p@5CrD^?7_HpME~8 zspnSVXO?Y5zgPd!@X>D7fH*B3CI6%7=+XU753zs%X&e#3I$OyF7S;5jHY=J$5F12^ z%@9O;7W*>N$@xyvzElTvLpkwkg8?4ed(3nYA{92YW{C<~5G+8h8QF53FxfaZOtB?I+og`yf zMI+}ZAX$u}6#5WXtXo^&T|FHa>flVa)(erL2r2q8`DKs~x*V~~9gEn{iMM`E{sN;r zIyCBna{|BpPIBr5#G%lKhRXe!tcd~>^E&oxbNIt~jUOASgx&8!rsYUvf?s>a-mbCB z;a`)J@4EZyoh!rn_kZdVQc!fhx#>4LLrzLMl7!i0G0bQ)%cPV#2S$_gEBP6GBdApj zEzvjn3mD)W37zkR!WWEv)XDOIDJz&A`GsOFYDNAJy4l2b-BGj*B;1L{~KW82aVhToX)8 zO)xs+8X4|sf4PR}fv*SmjH|S3eH-6EyAAZogX80$8+Kgpw2IYn@sI~cN5q7L1-n%r zKl<0NWB8pv|Klq3^QSrn#z^ho?C+LUPt{F35s1qMvv-O=R#u`F-A_!tT|ZW{Y0u{B zh0brw+hXKUX}Tqcm)7;NCHBH{VTeG@A6(fG;39B+H^8;Y=Tnv!jh-|GOQM%~wl( zty3ACQOm*CR~O=Sv=afsC2kQC9C>gfYt@kN9dni zF`_pGK|=iWYbSMcyPYoyD4qI#{`mo7#DgRK7c&iF(eZqNbW*58TF6n;$L@pKZD7cA^6&I9|=Ce$! zxZ0IhOqcrluOh*vg=6evl1!2M!|PpZUy=(buA3;Zk&_$u75)a2|X-&aSef%~L1N9%K3z4Y}}qe7bC1TW5MN&N&NnR;dw z8~qOS`#I9Pql;@Wdth74DxeDqPtl~Ubu#ie@kB>UfnQuRV-`H_7+Ju*?Ws?ib4|x} zhPv+0xwEn&%UDEM_in%Nzh1?o}$`#E&0)04yf(2j@MCRizZZ z2voccEctGAcScZj0^@uIQJT@y58^b)K4Sq321hxJ%W4OdJf?5t59>Gj#)f|Ef>Yg7 zFQ3&Bxv+3bCkqv}>|)Xe7E2VBi|jJ3mM&<=&mCEYqW~qmhF0&2be@!{xPphbusoaUv#I zne7v&zI@5jHrSaYC0#Tu)7;!A80dbgN`BAuyZK|blH}AigZlVKAmXnDf}5zQC_D%3 zFbGLsxU9t9;l?|VJ7u$9A`}Q^&EdCuQWeDU71zm$a%K4|77kuuPl6f~+V|)Iw%C?0 zjXTAD8S&MLi8o%MUs}Ip$&`h+!?G9<@awinvRu6@Xz-*H= zUl%{{uvy&y;4}*b0^r=aAOx}IrV5m$Wj*o&sy%yo1px^;c^L3BEmtSo+FxZei!$T3 zwH*+XlXu53RIolBDsJn*c3K^AH8Os51&>Wq|<&r5Xm z2tC%-Wd=&Jw9509A+77kf=S=gU0M*MM1_RoF~EH)E8R59U&QZ;3LW1ICa@dYW9x=H zR+R%)-w`=M1JXl>KjZ4~BNldH)PiDVSm=Sf{Ury7EMCiJPq(H=Hr!7R)SHfN88k|6 z4|IU3TG~g0=7BpOE@=W8f4+(S4y+DExSvj|XGBunEG!9QaFqET?+w~2XiX(Vui?q{%{lPdiVgZyolt$8mfl^|lh>mrJcqJ>5MlUX?er^KpsveM#` zxTdDS=`lfpa|%Qi-aw(Y^@{l9789NjFo?gAuaJZxuGKyj6U(Ic%gM}jW5#BDBkX!l znZ`$(BhV%F=JvwAv(9-%0D1VccH`oX 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 agkh2t4ET0krpOZ%Bn8M@d!~X+`08xbi literal 0 HcmV?d00001 diff --git a/tests/test_cli.py b/tests/test_cli.py index 2357eae..7a1a7ee 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -98,6 +98,26 @@ def test_cli_parallel(testdir): assert result.output == "Found 2 tables\n" +def test_cli_hybrid(): + with TemporaryDirectory() as tempdir: + infile = os.path.join(testdir, "budget.pdf") + outfile = os.path.join(tempdir, "budget.csv") + runner = CliRunner() + result = runner.invoke( + cli, ["--format", "csv", "--output", outfile, "hybrid", infile] + ) + assert result.exit_code == 0 + assert result.output == "Found 1 tables\n" + + result = runner.invoke(cli, ["--format", "csv", "hybrid", infile]) + output_error = "Error: Please specify output file path using --output" + assert output_error in result.output + + result = runner.invoke(cli, ["--output", outfile, "hybrid", infile]) + format_error = "Please specify output file format using --format" + assert format_error in result.output + + def test_cli_password(testdir): with TemporaryDirectory() as tempdir: infile = os.path.join(testdir, "health_protected.pdf") diff --git a/tests/test_common.py b/tests/test_common.py index c324317..1bdfab8 100644 --- a/tests/test_common.py +++ b/tests/test_common.py @@ -50,6 +50,305 @@ def test_password(testdir): assert_frame_equal(df, tables[0].df) +def test_stream(testdir): + df = pd.DataFrame(data_stream) + + filename = os.path.join(testdir, "health.pdf") + tables = camelot.read_pdf(filename, flavor="stream") + assert_frame_equal(df, tables[0].df) + + +def test_stream_table_rotated(testdir): + df = pd.DataFrame(data_stream_table_rotated) + + filename = os.path.join(testdir, "clockwise_table_2.pdf") + tables = camelot.read_pdf(filename, flavor="stream") + assert_frame_equal(df, tables[0].df) + + filename = os.path.join(testdir, "anticlockwise_table_2.pdf") + tables = camelot.read_pdf(filename, flavor="stream") + assert_frame_equal(df, tables[0].df) + + +def test_stream_two_tables(testdir): + df1 = pd.DataFrame(data_stream_two_tables_1) + df2 = pd.DataFrame(data_stream_two_tables_2) + + filename = os.path.join(testdir, "tabula/12s0324.pdf") + tables = camelot.read_pdf(filename, flavor="stream") + + assert len(tables) == 2 + assert df1.equals(tables[0].df) + assert df2.equals(tables[1].df) + + +def test_stream_table_regions(testdir): + df = pd.DataFrame(data_stream_table_areas) + + filename = os.path.join(testdir, "tabula/us-007.pdf") + tables = camelot.read_pdf( + filename, flavor="stream", table_regions=["320,460,573,335"] + ) + assert_frame_equal(df, tables[0].df) + + +def test_stream_table_areas(testdir): + df = pd.DataFrame(data_stream_table_areas) + + filename = os.path.join(testdir, "tabula/us-007.pdf") + tables = camelot.read_pdf( + filename, flavor="stream", table_areas=["320,500,573,335"] + ) + assert_frame_equal(df, tables[0].df) + + +def test_stream_columns(testdir): + df = pd.DataFrame(data_stream_columns) + + filename = os.path.join(testdir, "mexican_towns.pdf") + tables = camelot.read_pdf( + filename, flavor="stream", columns=["67,180,230,425,475"], row_tol=10 + ) + assert_frame_equal(df, tables[0].df) + + +def test_stream_split_text(testdir): + df = pd.DataFrame(data_stream_split_text) + + filename = os.path.join(testdir, "tabula/m27.pdf") + tables = camelot.read_pdf( + filename, + flavor="stream", + columns=["72,95,209,327,442,529,566,606,683"], + split_text=True, + ) + assert_frame_equal(df, tables[0].df) + + +def test_stream_flag_size(testdir): + df = pd.DataFrame(data_stream_flag_size) + + filename = os.path.join(testdir, "superscript.pdf") + tables = camelot.read_pdf(filename, flavor="stream", flag_size=True) + assert_frame_equal(df, tables[0].df) + + +def test_stream_strip_text(testdir): + df = pd.DataFrame(data_stream_strip_text) + + filename = os.path.join(testdir, "detect_vertical_false.pdf") + tables = camelot.read_pdf(filename, flavor="stream", strip_text=" ,\n") + assert_frame_equal(df, tables[0].df) + + +def test_stream_edge_tol(testdir): + df = pd.DataFrame(data_stream_edge_tol) + + filename = os.path.join(testdir, "edge_tol.pdf") + tables = camelot.read_pdf(filename, flavor="stream", edge_tol=500) + assert_frame_equal(df, tables[0].df) + + +def test_stream_layout_kwargs(testdir): + df = pd.DataFrame(data_stream_layout_kwargs) + + filename = os.path.join(testdir, "detect_vertical_false.pdf") + tables = camelot.read_pdf( + filename, flavor="stream", layout_kwargs={"detect_vertical": False} + ) + assert_frame_equal(df, tables[0].df) + + +def test_hybrid(testdir): + df = pd.DataFrame(data_stream) + + filename = os.path.join(testdir, "health.pdf") + tables = camelot.read_pdf(filename, flavor="hybrid") + assert_frame_equal(df, tables[0].df) + + +def test_hybrid_table_rotated(testdir): + df = pd.DataFrame(data_stream_table_rotated) + + filename = os.path.join(testdir, "clockwise_table_2.pdf") + tables = camelot.read_pdf(filename, flavor="hybrid") + assert_frame_equal(df, tables[0].df) + + filename = os.path.join(testdir, "anticlockwise_table_2.pdf") + tables = camelot.read_pdf(filename, flavor="hybrid") + assert_frame_equal(df, tables[0].df) + + +def test_hybrid_two_tables(testdir): + df1 = pd.DataFrame(data_stream_two_tables_1) + df2 = pd.DataFrame(data_stream_two_tables_2) + + filename = os.path.join(testdir, "tabula/12s0324.pdf") + tables = camelot.read_pdf(filename, flavor="hybrid") + + assert len(tables) == 2 + assert df1.equals(tables[0].df) + assert df2.equals(tables[1].df) + + +def test_hybrid_table_regions(testdir): + df = pd.DataFrame(data_stream_table_areas) + + filename = os.path.join(testdir, "tabula/us-007.pdf") + tables = camelot.read_pdf( + filename, flavor="hybrid", table_regions=["320,460,573,335"] + ) + assert_frame_equal(df, tables[0].df) + + +def test_hybrid_table_areas(testdir): + df = pd.DataFrame(data_stream_table_areas) + + filename = os.path.join(testdir, "tabula/us-007.pdf") + tables = camelot.read_pdf( + filename, flavor="hybrid", table_areas=["320,500,573,335"] + ) + assert_frame_equal(df, tables[0].df) + + +def test_hybrid_columns(testdir): + df = pd.DataFrame(data_stream_columns) + + filename = os.path.join(testdir, "mexican_towns.pdf") + tables = camelot.read_pdf( + filename, flavor="hybrid", columns=["67,180,230,425,475"], row_tol=10 + ) + assert_frame_equal(df, tables[0].df) + + +def test_hybrid_split_text(testdir): + df = pd.DataFrame(data_stream_split_text) + + filename = os.path.join(testdir, "tabula/m27.pdf") + tables = camelot.read_pdf( + filename, + flavor="hybrid", + columns=["72,95,209,327,442,529,566,606,683"], + split_text=True, + ) + assert_frame_equal(df, tables[0].df) + + +def test_hybrid_flag_size(testdir): + df = pd.DataFrame(data_stream_flag_size) + + filename = os.path.join(testdir, "superscript.pdf") + tables = camelot.read_pdf(filename, flavor="hybrid", flag_size=True) + assert_frame_equal(df, tables[0].df) + + +def test_hybrid_strip_text(testdir): + df = pd.DataFrame(data_stream_strip_text) + + filename = os.path.join(testdir, "detect_vertical_false.pdf") + tables = camelot.read_pdf(filename, flavor="hybrid", strip_text=" ,\n") + assert_frame_equal(df, tables[0].df) + + +def test_hybrid_edge_tol(testdir): + df = pd.DataFrame(data_stream_edge_tol) + + filename = os.path.join(testdir, "edge_tol.pdf") + tables = camelot.read_pdf(filename, flavor="hybrid", edge_tol=500) + assert_frame_equal(df, tables[0].df) + + +def test_hybrid_layout_kwargs(testdir): + df = pd.DataFrame(data_stream_layout_kwargs) + + filename = os.path.join(testdir, "detect_vertical_false.pdf") + tables = camelot.read_pdf( + filename, flavor="hybrid", layout_kwargs={"detect_vertical": False} + ) + assert_frame_equal(df, tables[0].df) + + +def test_lattice(testdir): + df = pd.DataFrame(data_lattice) + + filename = os.path.join( + testdir, "tabula/icdar2013-dataset/competition-dataset-us/us-030.pdf" + ) + tables = camelot.read_pdf(filename, pages="2") + assert_frame_equal(df, tables[0].df) + + +def test_lattice_table_rotated(testdir): + df = pd.DataFrame(data_lattice_table_rotated) + + filename = os.path.join(testdir, "clockwise_table_1.pdf") + tables = camelot.read_pdf(filename) + assert_frame_equal(df, tables[0].df) + + filename = os.path.join(testdir, "anticlockwise_table_1.pdf") + tables = camelot.read_pdf(filename) + assert_frame_equal(df, tables[0].df) + + +def test_lattice_two_tables(testdir): + df1 = pd.DataFrame(data_lattice_two_tables_1) + df2 = pd.DataFrame(data_lattice_two_tables_2) + + filename = os.path.join(testdir, "twotables_2.pdf") + tables = camelot.read_pdf(filename) + assert len(tables) == 2 + assert df1.equals(tables[0].df) + assert df2.equals(tables[1].df) + + +def test_lattice_table_regions(testdir): + df = pd.DataFrame(data_lattice_table_regions) + + filename = os.path.join(testdir, "table_region.pdf") + tables = camelot.read_pdf(filename, table_regions=["170,370,560,270"]) + assert_frame_equal(df, tables[0].df) + + +def test_lattice_table_areas(testdir): + df = pd.DataFrame(data_lattice_table_areas) + + filename = os.path.join(testdir, "twotables_2.pdf") + tables = camelot.read_pdf(filename, table_areas=["80,693,535,448"]) + assert_frame_equal(df, tables[0].df) + + +def test_lattice_process_background(testdir): + df = pd.DataFrame(data_lattice_process_background) + + filename = os.path.join(testdir, "background_lines_1.pdf") + tables = camelot.read_pdf(filename, process_background=True) + assert_frame_equal(df, tables[1].df) + + +def test_lattice_copy_text(testdir): + df = pd.DataFrame(data_lattice_copy_text) + + filename = os.path.join(testdir, "row_span_1.pdf") + tables = camelot.read_pdf(filename, line_scale=60, copy_text="v") + assert_frame_equal(df, tables[0].df) + + +def test_lattice_shift_text(testdir): + df_lt = pd.DataFrame(data_lattice_shift_text_left_top) + df_disable = pd.DataFrame(data_lattice_shift_text_disable) + df_rb = pd.DataFrame(data_lattice_shift_text_right_bottom) + + filename = os.path.join(testdir, "column_span_2.pdf") + tables = camelot.read_pdf(filename, line_scale=40) + assert df_lt.equals(tables[0].df) + + tables = camelot.read_pdf(filename, line_scale=40, shift_text=[""]) + assert df_disable.equals(tables[0].df) + + tables = camelot.read_pdf(filename, line_scale=40, shift_text=["r", "b"]) + assert df_rb.equals(tables[0].df) + + @skip_pdftopng def test_repr_poppler(testdir): filename = os.path.join(testdir, "foo.pdf") From 543aae1c3d5449b06bd5a2ef7e61068d23c01baf Mon Sep 17 00:00:00 2001 From: bosd Date: Sat, 21 Sep 2024 22:54:11 +0200 Subject: [PATCH 07/36] Refactor hybrid parser tests to own file --- tests/test_cli.py | 2 +- tests/test_common.py | 300 ------------------------------------------- tests/test_hybrid.py | 117 +++++++++++++++++ 3 files changed, 118 insertions(+), 301 deletions(-) create mode 100644 tests/test_hybrid.py diff --git a/tests/test_cli.py b/tests/test_cli.py index 7a1a7ee..f15c89d 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -98,7 +98,7 @@ def test_cli_parallel(testdir): assert result.output == "Found 2 tables\n" -def test_cli_hybrid(): +def test_cli_hybrid(testdir): with TemporaryDirectory() as tempdir: infile = os.path.join(testdir, "budget.pdf") outfile = os.path.join(tempdir, "budget.csv") diff --git a/tests/test_common.py b/tests/test_common.py index 1bdfab8..8ac196b 100644 --- a/tests/test_common.py +++ b/tests/test_common.py @@ -49,306 +49,6 @@ def test_password(testdir): tables = camelot.read_pdf(filename, password="userpass", flavor="stream") assert_frame_equal(df, tables[0].df) - -def test_stream(testdir): - df = pd.DataFrame(data_stream) - - filename = os.path.join(testdir, "health.pdf") - tables = camelot.read_pdf(filename, flavor="stream") - assert_frame_equal(df, tables[0].df) - - -def test_stream_table_rotated(testdir): - df = pd.DataFrame(data_stream_table_rotated) - - filename = os.path.join(testdir, "clockwise_table_2.pdf") - tables = camelot.read_pdf(filename, flavor="stream") - assert_frame_equal(df, tables[0].df) - - filename = os.path.join(testdir, "anticlockwise_table_2.pdf") - tables = camelot.read_pdf(filename, flavor="stream") - assert_frame_equal(df, tables[0].df) - - -def test_stream_two_tables(testdir): - df1 = pd.DataFrame(data_stream_two_tables_1) - df2 = pd.DataFrame(data_stream_two_tables_2) - - filename = os.path.join(testdir, "tabula/12s0324.pdf") - tables = camelot.read_pdf(filename, flavor="stream") - - assert len(tables) == 2 - assert df1.equals(tables[0].df) - assert df2.equals(tables[1].df) - - -def test_stream_table_regions(testdir): - df = pd.DataFrame(data_stream_table_areas) - - filename = os.path.join(testdir, "tabula/us-007.pdf") - tables = camelot.read_pdf( - filename, flavor="stream", table_regions=["320,460,573,335"] - ) - assert_frame_equal(df, tables[0].df) - - -def test_stream_table_areas(testdir): - df = pd.DataFrame(data_stream_table_areas) - - filename = os.path.join(testdir, "tabula/us-007.pdf") - tables = camelot.read_pdf( - filename, flavor="stream", table_areas=["320,500,573,335"] - ) - assert_frame_equal(df, tables[0].df) - - -def test_stream_columns(testdir): - df = pd.DataFrame(data_stream_columns) - - filename = os.path.join(testdir, "mexican_towns.pdf") - tables = camelot.read_pdf( - filename, flavor="stream", columns=["67,180,230,425,475"], row_tol=10 - ) - assert_frame_equal(df, tables[0].df) - - -def test_stream_split_text(testdir): - df = pd.DataFrame(data_stream_split_text) - - filename = os.path.join(testdir, "tabula/m27.pdf") - tables = camelot.read_pdf( - filename, - flavor="stream", - columns=["72,95,209,327,442,529,566,606,683"], - split_text=True, - ) - assert_frame_equal(df, tables[0].df) - - -def test_stream_flag_size(testdir): - df = pd.DataFrame(data_stream_flag_size) - - filename = os.path.join(testdir, "superscript.pdf") - tables = camelot.read_pdf(filename, flavor="stream", flag_size=True) - assert_frame_equal(df, tables[0].df) - - -def test_stream_strip_text(testdir): - df = pd.DataFrame(data_stream_strip_text) - - filename = os.path.join(testdir, "detect_vertical_false.pdf") - tables = camelot.read_pdf(filename, flavor="stream", strip_text=" ,\n") - assert_frame_equal(df, tables[0].df) - - -def test_stream_edge_tol(testdir): - df = pd.DataFrame(data_stream_edge_tol) - - filename = os.path.join(testdir, "edge_tol.pdf") - tables = camelot.read_pdf(filename, flavor="stream", edge_tol=500) - assert_frame_equal(df, tables[0].df) - - -def test_stream_layout_kwargs(testdir): - df = pd.DataFrame(data_stream_layout_kwargs) - - filename = os.path.join(testdir, "detect_vertical_false.pdf") - tables = camelot.read_pdf( - filename, flavor="stream", layout_kwargs={"detect_vertical": False} - ) - assert_frame_equal(df, tables[0].df) - - -def test_hybrid(testdir): - df = pd.DataFrame(data_stream) - - filename = os.path.join(testdir, "health.pdf") - tables = camelot.read_pdf(filename, flavor="hybrid") - assert_frame_equal(df, tables[0].df) - - -def test_hybrid_table_rotated(testdir): - df = pd.DataFrame(data_stream_table_rotated) - - filename = os.path.join(testdir, "clockwise_table_2.pdf") - tables = camelot.read_pdf(filename, flavor="hybrid") - assert_frame_equal(df, tables[0].df) - - filename = os.path.join(testdir, "anticlockwise_table_2.pdf") - tables = camelot.read_pdf(filename, flavor="hybrid") - assert_frame_equal(df, tables[0].df) - - -def test_hybrid_two_tables(testdir): - df1 = pd.DataFrame(data_stream_two_tables_1) - df2 = pd.DataFrame(data_stream_two_tables_2) - - filename = os.path.join(testdir, "tabula/12s0324.pdf") - tables = camelot.read_pdf(filename, flavor="hybrid") - - assert len(tables) == 2 - assert df1.equals(tables[0].df) - assert df2.equals(tables[1].df) - - -def test_hybrid_table_regions(testdir): - df = pd.DataFrame(data_stream_table_areas) - - filename = os.path.join(testdir, "tabula/us-007.pdf") - tables = camelot.read_pdf( - filename, flavor="hybrid", table_regions=["320,460,573,335"] - ) - assert_frame_equal(df, tables[0].df) - - -def test_hybrid_table_areas(testdir): - df = pd.DataFrame(data_stream_table_areas) - - filename = os.path.join(testdir, "tabula/us-007.pdf") - tables = camelot.read_pdf( - filename, flavor="hybrid", table_areas=["320,500,573,335"] - ) - assert_frame_equal(df, tables[0].df) - - -def test_hybrid_columns(testdir): - df = pd.DataFrame(data_stream_columns) - - filename = os.path.join(testdir, "mexican_towns.pdf") - tables = camelot.read_pdf( - filename, flavor="hybrid", columns=["67,180,230,425,475"], row_tol=10 - ) - assert_frame_equal(df, tables[0].df) - - -def test_hybrid_split_text(testdir): - df = pd.DataFrame(data_stream_split_text) - - filename = os.path.join(testdir, "tabula/m27.pdf") - tables = camelot.read_pdf( - filename, - flavor="hybrid", - columns=["72,95,209,327,442,529,566,606,683"], - split_text=True, - ) - assert_frame_equal(df, tables[0].df) - - -def test_hybrid_flag_size(testdir): - df = pd.DataFrame(data_stream_flag_size) - - filename = os.path.join(testdir, "superscript.pdf") - tables = camelot.read_pdf(filename, flavor="hybrid", flag_size=True) - assert_frame_equal(df, tables[0].df) - - -def test_hybrid_strip_text(testdir): - df = pd.DataFrame(data_stream_strip_text) - - filename = os.path.join(testdir, "detect_vertical_false.pdf") - tables = camelot.read_pdf(filename, flavor="hybrid", strip_text=" ,\n") - assert_frame_equal(df, tables[0].df) - - -def test_hybrid_edge_tol(testdir): - df = pd.DataFrame(data_stream_edge_tol) - - filename = os.path.join(testdir, "edge_tol.pdf") - tables = camelot.read_pdf(filename, flavor="hybrid", edge_tol=500) - assert_frame_equal(df, tables[0].df) - - -def test_hybrid_layout_kwargs(testdir): - df = pd.DataFrame(data_stream_layout_kwargs) - - filename = os.path.join(testdir, "detect_vertical_false.pdf") - tables = camelot.read_pdf( - filename, flavor="hybrid", layout_kwargs={"detect_vertical": False} - ) - assert_frame_equal(df, tables[0].df) - - -def test_lattice(testdir): - df = pd.DataFrame(data_lattice) - - filename = os.path.join( - testdir, "tabula/icdar2013-dataset/competition-dataset-us/us-030.pdf" - ) - tables = camelot.read_pdf(filename, pages="2") - assert_frame_equal(df, tables[0].df) - - -def test_lattice_table_rotated(testdir): - df = pd.DataFrame(data_lattice_table_rotated) - - filename = os.path.join(testdir, "clockwise_table_1.pdf") - tables = camelot.read_pdf(filename) - assert_frame_equal(df, tables[0].df) - - filename = os.path.join(testdir, "anticlockwise_table_1.pdf") - tables = camelot.read_pdf(filename) - assert_frame_equal(df, tables[0].df) - - -def test_lattice_two_tables(testdir): - df1 = pd.DataFrame(data_lattice_two_tables_1) - df2 = pd.DataFrame(data_lattice_two_tables_2) - - filename = os.path.join(testdir, "twotables_2.pdf") - tables = camelot.read_pdf(filename) - assert len(tables) == 2 - assert df1.equals(tables[0].df) - assert df2.equals(tables[1].df) - - -def test_lattice_table_regions(testdir): - df = pd.DataFrame(data_lattice_table_regions) - - filename = os.path.join(testdir, "table_region.pdf") - tables = camelot.read_pdf(filename, table_regions=["170,370,560,270"]) - assert_frame_equal(df, tables[0].df) - - -def test_lattice_table_areas(testdir): - df = pd.DataFrame(data_lattice_table_areas) - - filename = os.path.join(testdir, "twotables_2.pdf") - tables = camelot.read_pdf(filename, table_areas=["80,693,535,448"]) - assert_frame_equal(df, tables[0].df) - - -def test_lattice_process_background(testdir): - df = pd.DataFrame(data_lattice_process_background) - - filename = os.path.join(testdir, "background_lines_1.pdf") - tables = camelot.read_pdf(filename, process_background=True) - assert_frame_equal(df, tables[1].df) - - -def test_lattice_copy_text(testdir): - df = pd.DataFrame(data_lattice_copy_text) - - filename = os.path.join(testdir, "row_span_1.pdf") - tables = camelot.read_pdf(filename, line_scale=60, copy_text="v") - assert_frame_equal(df, tables[0].df) - - -def test_lattice_shift_text(testdir): - df_lt = pd.DataFrame(data_lattice_shift_text_left_top) - df_disable = pd.DataFrame(data_lattice_shift_text_disable) - df_rb = pd.DataFrame(data_lattice_shift_text_right_bottom) - - filename = os.path.join(testdir, "column_span_2.pdf") - tables = camelot.read_pdf(filename, line_scale=40) - assert df_lt.equals(tables[0].df) - - tables = camelot.read_pdf(filename, line_scale=40, shift_text=[""]) - assert df_disable.equals(tables[0].df) - - tables = camelot.read_pdf(filename, line_scale=40, shift_text=["r", "b"]) - assert df_rb.equals(tables[0].df) - - @skip_pdftopng def test_repr_poppler(testdir): filename = os.path.join(testdir, "foo.pdf") diff --git a/tests/test_hybrid.py b/tests/test_hybrid.py new file mode 100644 index 0000000..64021af --- /dev/null +++ b/tests/test_hybrid.py @@ -0,0 +1,117 @@ +import os + +import pandas as pd +from pandas.testing import assert_frame_equal + +import camelot + +from .data import * + + +def test_hybrid(testdir): + df = pd.DataFrame(data_stream) + + filename = os.path.join(testdir, "health.pdf") + tables = camelot.read_pdf(filename, flavor="hybrid") + assert_frame_equal(df, tables[0].df) + + +def test_hybrid_table_rotated(testdir): + df = pd.DataFrame(data_stream_table_rotated) + + filename = os.path.join(testdir, "clockwise_table_2.pdf") + tables = camelot.read_pdf(filename, flavor="hybrid") + assert_frame_equal(df, tables[0].df) + + filename = os.path.join(testdir, "anticlockwise_table_2.pdf") + tables = camelot.read_pdf(filename, flavor="hybrid") + assert_frame_equal(df, tables[0].df) + + +def test_hybrid_two_tables(testdir): + df1 = pd.DataFrame(data_stream_two_tables_1) + df2 = pd.DataFrame(data_stream_two_tables_2) + + filename = os.path.join(testdir, "tabula/12s0324.pdf") + tables = camelot.read_pdf(filename, flavor="hybrid") + + assert len(tables) == 2 + assert df1.equals(tables[0].df) + assert df2.equals(tables[1].df) + + +def test_hybrid_table_regions(testdir): + df = pd.DataFrame(data_stream_table_areas) + + filename = os.path.join(testdir, "tabula/us-007.pdf") + tables = camelot.read_pdf( + filename, flavor="hybrid", table_regions=["320,460,573,335"] + ) + assert_frame_equal(df, tables[0].df) + + +def test_hybrid_table_areas(testdir): + df = pd.DataFrame(data_stream_table_areas) + + filename = os.path.join(testdir, "tabula/us-007.pdf") + tables = camelot.read_pdf( + filename, flavor="hybrid", table_areas=["320,500,573,335"] + ) + assert_frame_equal(df, tables[0].df) + + +def test_hybrid_columns(testdir): + df = pd.DataFrame(data_stream_columns) + + filename = os.path.join(testdir, "mexican_towns.pdf") + tables = camelot.read_pdf( + filename, flavor="hybrid", columns=["67,180,230,425,475"], row_tol=10 + ) + assert_frame_equal(df, tables[0].df) + + +def test_hybrid_split_text(testdir): + df = pd.DataFrame(data_stream_split_text) + + filename = os.path.join(testdir, "tabula/m27.pdf") + tables = camelot.read_pdf( + filename, + flavor="hybrid", + columns=["72,95,209,327,442,529,566,606,683"], + split_text=True, + ) + assert_frame_equal(df, tables[0].df) + + +def test_hybrid_flag_size(testdir): + df = pd.DataFrame(data_stream_flag_size) + + filename = os.path.join(testdir, "superscript.pdf") + tables = camelot.read_pdf(filename, flavor="hybrid", flag_size=True) + assert_frame_equal(df, tables[0].df) + + +def test_hybrid_strip_text(testdir): + df = pd.DataFrame(data_stream_strip_text) + + filename = os.path.join(testdir, "detect_vertical_false.pdf") + tables = camelot.read_pdf(filename, flavor="hybrid", strip_text=" ,\n") + assert_frame_equal(df, tables[0].df) + + +def test_hybrid_edge_tol(testdir): + df = pd.DataFrame(data_stream_edge_tol) + + filename = os.path.join(testdir, "edge_tol.pdf") + tables = camelot.read_pdf(filename, flavor="hybrid", edge_tol=500) + assert_frame_equal(df, tables[0].df) + + +def test_hybrid_layout_kwargs(testdir): + df = pd.DataFrame(data_stream_layout_kwargs) + + filename = os.path.join(testdir, "detect_vertical_false.pdf") + tables = camelot.read_pdf( + filename, flavor="hybrid", layout_kwargs={"detect_vertical": False} + ) + assert_frame_equal(df, tables[0].df) From b4e3aec32477e03549ba4680aa8882aa13ad43a0 Mon Sep 17 00:00:00 2001 From: bosd Date: Sat, 21 Sep 2024 23:03:18 +0200 Subject: [PATCH 08/36] 'Merge' parsers from 'hybrid-parser' branch --- camelot/parsers/__init__.py | 2 + camelot/parsers/hybrid.py | 524 ++++++++------------------- camelot/parsers/network.py | 700 ++++++++++++++++++++++++++++++++++++ 3 files changed, 860 insertions(+), 366 deletions(-) create mode 100644 camelot/parsers/network.py diff --git a/camelot/parsers/__init__.py b/camelot/parsers/__init__.py index 9019058..4e35796 100644 --- a/camelot/parsers/__init__.py +++ b/camelot/parsers/__init__.py @@ -1,2 +1,4 @@ from .lattice import Lattice from .stream import Stream +from .network import Network +from .hybrid import Hybrid diff --git a/camelot/parsers/hybrid.py b/camelot/parsers/hybrid.py index 9d12350..baebf27 100644 --- a/camelot/parsers/hybrid.py +++ b/camelot/parsers/hybrid.py @@ -1,23 +1,15 @@ - - -# -*- coding: utf-8 -*- - -from __future__ import division -import warnings +"""Implementation of hybrid table parser.""" import numpy as np - from .base import BaseParser -from ..core import TextEdges -from ..utils import (text_in_bbox, text_in_bbox_per_axis) +from .network import Network +from .lattice import Lattice +from ..utils import bboxes_overlap +from ..utils import boundaries_to_split_lines class Hybrid(BaseParser): - """Hybrid method of parsing looks for spaces between text - to parse the table. - - If you want to specify columns when specifying multiple table - areas, make sure that the length of both lists are equal. + """Defines a hybrid parser, leveraging both network and lattice parsers. Parameters ---------- @@ -59,383 +51,183 @@ def __init__( flag_size=False, split_text=False, strip_text="", - edge_tol=50, + edge_tol=None, row_tol=2, column_tol=0, + debug=False, **kwargs ): super().__init__( "hybrid", table_regions=table_regions, table_areas=table_areas, + flag_size=flag_size, split_text=split_text, strip_text=strip_text, + debug=debug, + ) + self.columns = columns # Columns settings impacts the hybrid table + self.network_parser = Network( + table_regions=table_regions, + table_areas=table_areas, + columns=columns, flag_size=flag_size, + split_text=split_text, + strip_text=strip_text, + edge_tol=edge_tol, + row_tol=row_tol, + column_tol=column_tol, + debug=debug, + ) + self.lattice_parser = Lattice( + table_regions=table_regions, + table_areas=table_areas, + flag_size=flag_size, + split_text=split_text, + strip_text=strip_text, + edge_tol=edge_tol, + row_tol=row_tol, + column_tol=column_tol, + debug=debug, ) - self.columns = columns - self._validate_columns() - self.edge_tol = edge_tol - self.row_tol = row_tol - self.column_tol = column_tol - - @staticmethod - def _text_bbox(t_bbox): - """Returns bounding box for the text present on a page. - - Parameters - ---------- - t_bbox : dict - Dict with two keys 'horizontal' and 'vertical' with lists of - LTTextLineHorizontals and LTTextLineVerticals respectively. - - Returns - ------- - text_bbox : tuple - Tuple (x0, y0, x1, y1) in pdf coordinate space. - - """ - xmin = min(t.x0 for direction in t_bbox for t in t_bbox[direction]) - ymin = min(t.y0 for direction in t_bbox for t in t_bbox[direction]) - xmax = max(t.x1 for direction in t_bbox for t in t_bbox[direction]) - ymax = max(t.y1 for direction in t_bbox for t in t_bbox[direction]) - text_bbox = (xmin, ymin, xmax, ymax) - return text_bbox - - @staticmethod - def _group_rows(text, row_tol=2): - """Groups PDFMiner text objects into rows vertically - within a tolerance. - - Parameters - ---------- - text : list - List of PDFMiner text objects. - row_tol : int, optional (default: 2) - Returns - ------- - rows : list - Two-dimensional list of text objects grouped into rows. + def prepare_page_parse(self, filename, layout, dimensions, page_idx, layout_kwargs): + super().prepare_page_parse( + filename, layout, dimensions, page_idx, layout_kwargs + ) + self.network_parser.prepare_page_parse( + filename, layout, dimensions, page_idx, layout_kwargs + ) + self.lattice_parser.prepare_page_parse( + filename, layout, dimensions, page_idx, layout_kwargs + ) - """ - row_y = None - rows = [] - temp = [] - non_empty_text = [t for t in text if t.get_text().strip()] - for t in non_empty_text: - # is checking for upright necessary? - # if t.get_text().strip() and all([obj.upright \ - # for obj in t._objs - # if type(obj) is LTChar]): - if row_y is None: - row_y = t.y0 - elif not np.isclose(row_y, t.y0, atol=row_tol): - rows.append(sorted(temp, key=lambda t: t.x0)) - temp = [] - # We update the row's bottom as we go, to be forgiving if there - # is a gradual change across multiple columns. - row_y = t.y0 - temp.append(t) - rows.append(sorted(temp, key=lambda t: t.x0)) - return rows + def _generate_columns_and_rows(self, bbox, table_idx): + parser = self.table_bbox_parses[bbox] + return parser._generate_columns_and_rows(bbox, table_idx) + + def _generate_table(self, table_idx, bbox, cols, rows, **kwargs): + parser = self.table_bbox_parses[bbox] + table = parser._generate_table(table_idx, bbox, cols, rows, **kwargs) + # Because hybrid can inject extraneous splits from both lattice and + # network, remove lines / cols that are completely empty. + table.df = table.df.replace("", np.nan) + table.df = table.df.dropna(axis=0, how="all") + table.df = table.df.dropna(axis=1, how="all") + table.df = table.df.replace(np.nan, "") + table.shape = table.df.shape + return table @staticmethod - def _merge_columns(l, column_tol=0): - """Merges column boundaries horizontally if they overlap - or lie within a tolerance. - - Parameters - ---------- - l : list - List of column x-coordinate tuples. - column_tol : int, optional (default: 0) - - Returns - ------- - merged : list - List of merged column x-coordinate tuples. + def _augment_boundaries_with_splits(boundaries, splits, tolerance=0): + """ Augment existing boundaries using provided hard splits. + Boundaries: |---| |-| |---------| + Splits: | | | | + Augmented: |-------|-----|-------|--| """ - merged = [] - for higher in l: - if not merged: - merged.append(higher) + idx_boundaries = len(boundaries) - 1 + idx_splits = len(splits) - 1 + previous_boundary = None + while True: + if idx_splits < 0: + # No more splits to incorporate, we're done + break + split = splits[idx_splits] + + if idx_boundaries < 0: + # Need to insert remaining splits + new_boundary = [split, boundaries[0][0]] + boundaries.insert(0, new_boundary) + idx_splits = idx_splits - 1 else: - lower = merged[-1] - if column_tol >= 0: - if higher[0] <= lower[1] or np.isclose( - higher[0], lower[1], atol=column_tol - ): - upper_bound = max(lower[1], higher[1]) - lower_bound = min(lower[0], higher[0]) - merged[-1] = (lower_bound, upper_bound) - else: - merged.append(higher) - elif column_tol < 0: - if higher[0] <= lower[1]: - if np.isclose(higher[0], lower[1], - atol=abs(column_tol)): - merged.append(higher) - else: - upper_bound = max(lower[1], higher[1]) - lower_bound = min(lower[0], higher[0]) - merged[-1] = (lower_bound, upper_bound) - else: - merged.append(higher) - return merged - - @staticmethod - def _join_rows(rows_grouped, text_y_max, text_y_min): - """Makes row coordinates continuous. For the row to "touch" - we split the existing gap between them in half. - - Parameters - ---------- - rows_grouped : list - Two-dimensional list of text objects grouped into rows. - text_y_max : int - text_y_min : int - - Returns - ------- - rows : list - List of continuous row y-coordinate tuples. - - """ - row_boundaries = [ - [ - max(t.y1 for t in r), - min(t.y0 for t in r) - ] - for r in rows_grouped - ] - for i in range(0, len(row_boundaries)-1): - top_row = row_boundaries[i] - bottom_row = row_boundaries[i+1] - top_row[1] = bottom_row[0] = (top_row[1] + bottom_row[0]) / 2 - row_boundaries[0][0] = text_y_max - row_boundaries[-1][1] = text_y_min - return row_boundaries - - @staticmethod - def _add_columns(cols, text, row_tol): - """Adds columns to existing list by taking into account - the text that lies outside the current column x-coordinates. - - Parameters - ---------- - cols : list - List of column x-coordinate tuples. - text : list - List of PDFMiner text objects. - ytol : int - - Returns - ------- - cols : list - Updated list of column x-coordinate tuples. - - """ - if text: - text = Hybrid._group_rows(text, row_tol=row_tol) - elements = [len(r) for r in text] - new_cols = [ - (t.x0, t.x1) - for r in text if len(r) == max(elements) - for t in r - ] - cols.extend(Hybrid._merge_columns(sorted(new_cols))) - return cols - - @staticmethod - def _join_columns(cols, text_x_min, text_x_max): - """Makes column coordinates continuous. - - Parameters - ---------- - cols : list - List of column x-coordinate tuples. - text_x_min : int - text_y_max : int - - Returns - ------- - cols : list - Updated list of column x-coordinate tuples. - - """ - cols = sorted(cols) - cols = [(cols[i][0] + cols[i - 1][1]) / 2 for i in range(1, len(cols))] - cols.insert(0, text_x_min) - cols.append(text_x_max) - cols = [(cols[i], cols[i + 1]) for i in range(0, len(cols) - 1)] - return cols - - def _validate_columns(self): - if self.table_areas is not None and self.columns is not None: - if len(self.table_areas) != len(self.columns): - raise ValueError("Length of table_areas and columns" - " should be equal") - - def _nurminen_table_detection(self, textlines): - """A general implementation of the table detection algorithm - described by Anssi Nurminen's master's thesis. - Link: https://dspace.cc.tut.fi/dpub/bitstream/handle/123456789/21520/Nurminen.pdf?sequence=3 # noqa - - Assumes that tables are situated relatively far apart - vertically. + boundary = \ + boundaries[idx_boundaries] + if boundary[1] < \ + split + tolerance: + # The lattice column is further to the right of our + # col boundary. We move our left boundary to match. + boundary[1] = split + # And if there was another segment after, we make its + # right boundary match as well so that there's no gap + if previous_boundary is not None: + previous_boundary[0] = split + idx_splits = idx_splits - 1 + elif boundary[0] > \ + split - tolerance: + # Our boundary is fully after the split, move on + idx_boundaries = idx_boundaries - 1 + previous_boundary = boundary + if idx_boundaries < 0: + # If this is the last boundary to the left, set its + # edge at the split + boundary[0] = split + idx_splits = idx_splits - 1 + else: + # The split is inside our boundary: split it + new_boundary = [split, boundary[1]] + boundaries.insert(idx_boundaries + 1, new_boundary) + boundary[1] = split + previous_boundary = new_boundary + idx_splits = idx_splits - 1 + return boundaries + + def _merge_bbox_analysis(self, lattice_bbox, network_bbox): + """ Identify splits that were only detected by lattice or by network """ - # TODO: add support for arabic text #141 - # sort textlines in reading order - textlines.sort(key=lambda x: (-x.y0, x.x0)) - textedges = TextEdges(edge_tol=self.edge_tol) - # generate left, middle and right textedges - textedges.generate(textlines) - # select relevant edges - relevant_textedges = textedges.get_relevant() - self.textedges.extend(relevant_textedges) - # guess table areas using textlines and relevant edges - table_bbox = textedges.get_table_areas(textlines, relevant_textedges) - # treat whole page as table area if no table areas found - if not table_bbox: - table_bbox = {(0, 0, self.pdf_width, self.pdf_height): None} + lattice_parse = self.lattice_parser.table_bbox_parses[lattice_bbox] + lattice_cols = lattice_parse["col_anchors"] - return table_bbox + network_bbox_data = self.network_parser.table_bbox_parses[network_bbox] + network_cols_boundaries = network_bbox_data["cols_boundaries"] - def _generate_table_bbox(self): - self.textedges = [] - if self.table_areas is None: - hor_text = self.horizontal_text - if self.table_regions is not None: - # filter horizontal text - hor_text = [] - for region in self.table_regions: - x1, y1, x2, y2 = region.split(",") - x1 = float(x1) - y1 = float(y1) - x2 = float(x2) - y2 = float(y2) - region_text = text_in_bbox( - (x1, y2, x2, y1), self.horizontal_text) - hor_text.extend(region_text) - # find tables based on nurminen's detection algorithm - table_bbox = self._nurminen_table_detection(hor_text) + # Favor network, but complete or adjust its columns based on the + # splits identified by lattice. + if network_cols_boundaries is None: + self.table_bbox_parses[lattice_bbox] = self.lattice_parser else: - table_bbox = {} - for area in self.table_areas: - x1, y1, x2, y2 = area.split(",") - x1 = float(x1) - y1 = float(y1) - x2 = float(x2) - y2 = float(y2) - table_bbox[(x1, y2, x2, y1)] = None - self.table_bbox = table_bbox - - def _generate_columns_and_rows(self, table_idx, tk): - # select elements which lie within table_bbox - self.t_bbox = text_in_bbox_per_axis( - tk, - self.horizontal_text, - self.vertical_text - ) - - text_x_min, text_y_min, text_x_max, text_y_max = \ - self._text_bbox(self.t_bbox) - rows_grouped = self._group_rows( - self.t_bbox["horizontal"], row_tol=self.row_tol) - rows = self._join_rows(rows_grouped, text_y_max, text_y_min) - elements = [len(r) for r in rows_grouped] - - if self.columns is not None and self.columns[table_idx] != "": - # user has to input boundary columns too - # take (0, pdf_width) by default - # similar to else condition - # len can't be 1 - cols = self.columns[table_idx].split(",") - cols = [float(c) for c in cols] - cols.insert(0, text_x_min) - cols.append(text_x_max) - cols = [(cols[i], cols[i + 1]) for i in range(0, len(cols) - 1)] - else: - # calculate mode of the list of number of elements in - # each row to guess the number of columns - ncols = max(set(elements), key=elements.count) - if ncols == 1: - # if mode is 1, the page usually contains not tables - # but there can be cases where the list can be skewed, - # try to remove all 1s from list in this case and - # see if the list contains elements, if yes, then use - # the mode after removing 1s - elements = list(filter(lambda x: x != 1, elements)) - if elements: - ncols = max(set(elements), key=elements.count) - else: - warnings.warn( - "No tables found in table area {}" - .format(table_idx + 1) - ) - cols = [ - (t.x0, t.x1) - for r in rows_grouped - if len(r) == ncols - for t in r - ] - cols = self._merge_columns( - sorted(cols), - column_tol=self.column_tol + network_cols_boundaries = self._augment_boundaries_with_splits( + network_cols_boundaries, lattice_cols, self.lattice_parser.joint_tol ) - inner_text = [] - for i in range(1, len(cols)): - left = cols[i - 1][1] - right = cols[i][0] - inner_text.extend( - [ - t - for direction in self.t_bbox - for t in self.t_bbox[direction] - if t.x0 > left and t.x1 < right - ] - ) - outer_text = [ - t - for direction in self.t_bbox - for t in self.t_bbox[direction] - if t.x0 > cols[-1][1] or t.x1 < cols[0][0] - ] - inner_text.extend(outer_text) - cols = self._add_columns(cols, inner_text, self.row_tol) - cols = self._join_columns(cols, text_x_min, text_x_max) - - return cols, rows - - def _generate_table(self, table_idx, cols, rows, **kwargs): - table = self._initialize_new_table(table_idx, cols, rows) - table = table.set_all_edges() - table.record_parse_metadata(self) - - # for plotting - table._bbox = self.table_bbox - table._segments = None - table._textedges = self.textedges - - return table + augmented_bbox = ( + network_cols_boundaries[0][0], + min(lattice_bbox[1], network_bbox[1]), + network_cols_boundaries[-1][1], + max(lattice_bbox[3], network_bbox[3]), + ) + network_bbox_data["cols_anchors"] = \ + boundaries_to_split_lines(network_cols_boundaries) - def extract_tables(self, filename): - if self._document_has_no_text(): - return [] + del self.network_parser.table_bbox_parses[network_bbox] + self.network_parser.table_bbox_parses[augmented_bbox] = network_bbox_data + self.table_bbox_parses[augmented_bbox] = self.network_parser - # Identify plausible areas within the doc where tables lie, - # populate table_bbox keys with these areas. - self._generate_table_bbox() + def _generate_table_bbox(self): + # Collect bboxes from both parsers + self.lattice_parser._generate_table_bbox() + _lattice_bboxes = sorted( + self.lattice_parser.table_bbox_parses, key=lambda bbox: (bbox[0], -bbox[1]) + ) + self.network_parser._generate_table_bbox() + _network_bboxes = sorted( + self.network_parser.table_bbox_parses, key=lambda bbox: (bbox[0], -bbox[1]) + ) - _tables = [] - # sort tables based on y-coord - for table_idx, bbox in enumerate( - sorted(self.table_bbox.keys(), key=lambda x: x[1], reverse=True) - ): - cols, rows = self._generate_columns_and_rows(table_idx, bbox) - table = self._generate_table(table_idx, cols, rows) - table._bbox = bbox - _tables.append(table) + # Merge the data from both processes + for lattice_bbox in _lattice_bboxes: + merged = False + + for idx in range(len(_network_bboxes) - 1, -1, -1): + network_bbox = _network_bboxes[idx] + if not bboxes_overlap(lattice_bbox, network_bbox): + continue + self._merge_bbox_analysis(lattice_bbox, network_bbox) + # network_bbox_data["cols_boundaries"] + del _network_bboxes[idx] + merged = True + if not merged: + self.table_bbox_parses[lattice_bbox] = self.lattice_parser - return _tables + # Add the bboxes from network that haven't been merged + for network_bbox in _network_bboxes: + self.table_bbox_parses[network_bbox] = self.network_parser diff --git a/camelot/parsers/network.py b/camelot/parsers/network.py new file mode 100644 index 0000000..59432d3 --- /dev/null +++ b/camelot/parsers/network.py @@ -0,0 +1,700 @@ +"""Implementation of network table parser.""" + + +import copy +import math + +import numpy as np + +from ..core import ALL_ALIGNMENTS +from ..core import HORIZONTAL_ALIGNMENTS +from ..core import VERTICAL_ALIGNMENTS +from ..core import TextAlignments +from ..utils import bbox_from_str +from ..utils import bbox_from_textlines +from ..utils import boundaries_to_split_lines +from ..utils import find_columns_boundaries +from ..utils import text_in_bbox +from ..utils import text_in_bbox_per_axis +from ..utils import textlines_overlapping_bbox +from .base import TextBaseParser + + +# maximum number of columns over which a header can spread +MAX_COL_SPREAD_IN_HEADER = 3 + +# Minimum number of textlines in a table +MINIMUM_TEXTLINES_IN_TABLE = 6 + + +def column_spread(left, right, col_anchors): + """Get the number of columns crossed by a segment [left, right].""" + index_left = 0 + while index_left < len(col_anchors) and col_anchors[index_left] < left: + index_left += 1 + index_right = index_left + while index_right < len(col_anchors) and col_anchors[index_right] < right: + index_right += 1 + + return index_right - index_left + + +def find_closest_tls(bbox, tls): + """Search for tls that are the closest but outside in all 4 directions""" + left, right, top, bottom = None, None, None, None + (bbox_left, bbox_bottom, bbox_right, bbox_top) = bbox + for textline in tls: + if textline.x1 < bbox_left: + # Left: check it overlaps horizontally + if textline.y0 > bbox_top or textline.y1 < bbox_bottom: + continue + if left is None or left.x1 < textline.x1: + left = textline + elif bbox_right < textline.x0: + # Right: check it overlaps horizontally + if textline.y0 > bbox_top or textline.y1 < bbox_bottom: + continue + if right is None or right.x0 > textline.x0: + right = textline + else: + # Either bottom or top: must overlap vertically + if textline.x0 > bbox_right or textline.x1 < bbox_left: + continue + if textline.y1 < bbox_bottom: + # Bottom + if bottom is None or bottom.y1 < textline.y1: + bottom = textline + elif bbox_top < textline.y0: + # Top + if top is None or top.y0 > textline.y0: + top = textline + return { + "left": left, + "right": right, + "top": top, + "bottom": bottom, + } + + +def search_header_from_body_bbox(body_bbox, textlines, col_anchors, max_v_gap): + """Expand a bbox vertically up by looking for plausible headers. + + The core algorithm is based on fairly strict alignment of text. It works + for the table body, but might fail on tables' headers since they tend to be + in a different font, alignment (e.g. vertical), etc. + This method evalutes the area above the table body's bbox for + characteristics of a table header: close to the top of the body, with cells + that fit within the horizontal bounds identified. + """ + new_bbox = body_bbox + (left, bottom, right, top) = body_bbox + zones = [] + + keep_searching = True + while keep_searching: + keep_searching = False + # a/ first look for the closest text element above the bbox. + # It will be the anchor for a possible new row. + closest_above = None + all_above = [] + for textline in textlines: + # higher than the table, >50% within its bounds + textline_center = 0.5 * (textline.x0 + textline.x1) + if textline.y0 > top and left < textline_center < right: + all_above.append(textline) + if closest_above is None or closest_above.y0 > textline.y0: + closest_above = textline + + if closest_above and closest_above.y0 < top + max_v_gap: + # b/ We have a candidate cell that is within the correct + # vertical band, and directly above the table. Starting from + # this anchor, we list all the textlines within the same row. + tls_in_new_row = [] + top = closest_above.y1 + pushed_up = True + while pushed_up: + pushed_up = False + # Iterate and extract elements that fit in the row + # from our list + for i in range(len(all_above) - 1, -1, -1): + textline = all_above[i] + if textline.y0 < top: + # The bottom of this element is within our row + # so we add it. + tls_in_new_row.append(textline) + all_above.pop(i) + if textline.y1 > top: + # If the top of this element raises our row's + # band, we'll need to keep on searching for + # overlapping items + top = textline.y1 + pushed_up = True + + # Get the x-ranges for all the textlines, and merge the + # x-ranges that overlap + zones = zones + list( + map(lambda textline: [textline.x0, textline.x1], tls_in_new_row) + ) + zones.sort(key=lambda z: z[0]) # Sort by left coordinate + # Starting from the right, if two zones overlap horizontally, + # merge them + merged_something = True + while merged_something: + merged_something = False + for i in range(len(zones) - 1, 0, -1): + zone_right = zones[i] + zone_left = zones[i - 1] + if zone_left[1] >= zone_right[0]: + zone_left[1] = max(zone_right[1], zone_left[1]) + zones.pop(i) + merged_something = True + + max_spread = max( + list( + map( + lambda zone: column_spread(zone[0], zone[1], col_anchors), zones + ) + ) + ) + + # Accept textlines that cross columns boundaries, as long as they + # cross less than MAX_COL_SPREAD_IN_HEADER, and half the number of + # columns. + # This is to avoid picking unrelated paragraphs. + if max_spread <= min( + MAX_COL_SPREAD_IN_HEADER, math.ceil(len(col_anchors) / 2) + ): + # Combined, the elements we've identified don't cross more + # than the authorized number of columns. + # We're trying to avoid + # 0: + # 1: + # 2: + # if len(zones) > TEXTEDGE_REQUIRED_ELEMENTS: + new_bbox = (left, bottom, right, top) + + # At this stage we've identified a plausible row (or the + # beginning of one). + keep_searching = True + return new_bbox + + +class AlignmentCounter: + """ + For a given textline, represent all other textlines aligned with it. + + A textline can be vertically aligned with others if their bbox match on + left, right, or middle coord, and horizontally aligned if they match top, + bottom, or center coord. + + """ + + def __init__(self): + self.alignment_to_occurrences = {} + for alignment in ALL_ALIGNMENTS: + self.alignment_to_occurrences[alignment] = [] + + def __getitem__(self, key): + return self.alignment_to_occurrences[key] + + def __setitem__(self, key, value): + self.alignment_to_occurrences[key] = value + return value + + def max_alignments(self, alignment_ids=None): + """Get the alignment dimension with the max number of textlines.""" + alignment_ids = alignment_ids or self.alignment_to_occurrences.keys() + alignment_items = map( + lambda alignment_id: ( + alignment_id, + self.alignment_to_occurrences[alignment_id], + ), + alignment_ids, + ) + return max(alignment_items, key=lambda item: len(item[1])) + + def max_v(self): + """Tuple (alignment_id, textlines) of largest vertical row.""" + # Note that the horizontal alignments (left, center, right) are aligned + # vertically in a column, so max_v is calculated by looking at + # horizontal alignments. + return self.max_alignments(HORIZONTAL_ALIGNMENTS) + + def max_h(self): + """Tuple (alignment_id, textlines) of largest horizontal col.""" + return self.max_alignments(VERTICAL_ALIGNMENTS) + + def max_v_count(self): + """Returns the maximum number of alignments along + one of the vertical axis (left/right/middle). + """ + return len(self.max_v()[1]) + + def max_h_count(self): + """Returns the maximum number of alignments along + one of the horizontal axis (bottom/top/center). + """ + return len(self.max_h()[1]) + + def alignment_score(self): + """We define the alignment score of a textline as the product of the + number of aligned elements - 1. The -1 is to avoid favoring + singletons on a long line. + """ + return (self.max_v_count() - 1) * (self.max_h_count() - 1) + + +class TextNetworks(TextAlignments): + """Text elements connected by vertical AND horizontal alignments. + + The alignment dict has six keys based on the hor/vert alignments, + and each key's value is a list of camelot.core.TextAlignment objects. + """ + + def __init__(self): + super().__init__(ALL_ALIGNMENTS) + # For each textline, dictionary "alignment type" to + # "number of textlines aligned" + self._textline_to_alignments = {} + + def _update_alignment(self, alignment, coord, textline): + alignment.register_aligned_textline(textline, coord) + + def _register_all_text_lines(self, textlines): + """Add all textlines to our network repository to + identify alignments. + """ + # Identify all the alignments + for textline in textlines: + if len(textline.get_text().strip()) > 0: + self._register_textline(textline) + + def _compute_alignment_counts(self): + """Build a dictionary textline -> alignment object.""" + for align_id, textedges in self._text_alignments.items(): + for textedge in textedges: + for textline in textedge.textlines: + alignments = self._textline_to_alignments.get(textline, None) + if alignments is None: + alignments = AlignmentCounter() + self._textline_to_alignments[textline] = alignments + alignments[align_id] = textedge.textlines + + def remove_unconnected_edges(self): + """Weed out elements which are only connected to others vertically + or horizontally. There needs to be connections across both + dimensions. + """ + removed_singletons = True + while removed_singletons: + removed_singletons = False + for text_alignments in self._text_alignments.values(): + # For each alignment edge, remove items if they are singletons + # either horizontally or vertically + for text_alignment in text_alignments: + for i in range(len(text_alignment.textlines) - 1, -1, -1): + textline = text_alignment.textlines[i] + alignments = self._textline_to_alignments[textline] + if ( + alignments.max_h_count() <= 1 + or alignments.max_v_count() <= 1 + ): + del text_alignment.textlines[i] + removed_singletons = True + self._textline_to_alignments = {} + self._compute_alignment_counts() + + def most_connected_textline(self): + """Retrieve the textline that is most connected across vertical and + horizontal axis. + + """ + # Find the textline with the highest alignment score, with a tie break + # to prefer textlines further down in the table. Starting the search + # from the table's bottom allows the algo to collect data on more cells + # before going to the header, typically harder to parse. + return max( + self._textline_to_alignments.keys(), + key=lambda textline: ( + self._textline_to_alignments[textline].alignment_score(), + -textline.y0, + -textline.x0, + ), + default=None, + ) + + def compute_plausible_gaps(self): + """Evaluate plausible gaps between cells horizontally and vertically + based on the textlines aligned with the most connected textline. + + Returns + ------- + gaps_hv : tuple + (horizontal_gap, horizontal_gap) in pdf coordinate space. + + """ + # Determine the textline that has the most combined + # alignments across horizontal and vertical axis. + # It will serve as a reference axis along which to collect the average + # spacing between rows/cols. + most_aligned_tl = self.most_connected_textline() + if most_aligned_tl is None: + return None + + # Retrieve the list of textlines it's aligned with, across both + # axis + best_alignment = self._textline_to_alignments[most_aligned_tl] + __, ref_h_textlines = best_alignment.max_h() + __, ref_v_textlines = best_alignment.max_v() + if len(ref_v_textlines) <= 1 or len(ref_h_textlines) <= 1: + return None + + h_textlines = sorted( + ref_h_textlines, key=lambda textline: textline.x0, reverse=True + ) + v_textlines = sorted( + ref_v_textlines, key=lambda textline: textline.y0, reverse=True + ) + + h_gaps, v_gaps = [], [] + for i in range(1, len(v_textlines)): + v_gaps.append(v_textlines[i - 1].y0 - v_textlines[i].y0) + for i in range(1, len(h_textlines)): + h_gaps.append(h_textlines[i - 1].x0 - h_textlines[i].x0) + + if not h_gaps or not v_gaps: + return None + percentile = 75 + gaps_hv = ( + 2.0 * np.percentile(h_gaps, percentile), + 2.0 * np.percentile(v_gaps, percentile), + ) + return gaps_hv + + def search_table_body(self, gaps_hv, parse_details=None): + """Build a candidate bbox for the body of a table using network algo + + Seed the process with the textline with the highest alignment + score, then expand the bbox with textlines within threshold. + + Parameters + ---------- + gaps_hv : tuple + The maximum distance allowed to consider surrounding lines/columns + as part of the same table. + parse_details : array (optional) + Optional parameter array, in which to store extra information + to help later visualization of the table creation. + """ + # First, determine the textline that has the most combined + # alignments across horizontal and vertical axis. + # It will serve both as a starting point for the table boundary + # search, and as a way to estimate the average spacing between + # rows/cols. + most_aligned_tl = self.most_connected_textline() + + # Calculate the 75th percentile of the horizontal/vertical + # gaps between textlines. Use this as a reference for a threshold + # to not exceed while looking for table boundaries. + max_h_gap, max_v_gap = gaps_hv[0], gaps_hv[1] + + if parse_details is not None: + # Store debug info + parse_details_search = { + "max_h_gap": max_h_gap, + "max_v_gap": max_v_gap, + "iterations": [], + } + parse_details.append(parse_details_search) + else: + parse_details_search = None + + bbox = [ + most_aligned_tl.x0, + most_aligned_tl.y0, + most_aligned_tl.x1, + most_aligned_tl.y1, + ] + + # For the body of the table, we only consider cells that have + # alignments on both axis. + tls_search_space = list(self._textline_to_alignments.keys()) + # tls_search_space = [] + tls_search_space.remove(most_aligned_tl) + tls_in_bbox = [most_aligned_tl] + last_bbox = None + last_cols_bounds = [(most_aligned_tl.x0, most_aligned_tl.x1)] + while last_bbox != bbox: + if parse_details_search is not None: + # Store debug info + parse_details_search["iterations"].append(bbox) + + # Check that the closest tls are within the gaps allowed + last_bbox = bbox + cand_bbox = last_bbox.copy() + closest_tls = find_closest_tls(bbox, tls_search_space) + for direction, textline in closest_tls.items(): + if textline is None: + continue + expanded_cand_bbox = cand_bbox.copy() + + if direction == "left": + if expanded_cand_bbox[0] - textline.x1 > gaps_hv[0]: + continue + expanded_cand_bbox[0] = textline.x0 + elif direction == "right": + if textline.x0 - expanded_cand_bbox[2] > gaps_hv[0]: + continue + expanded_cand_bbox[2] = textline.x1 + elif direction == "bottom": + if expanded_cand_bbox[1] - textline.y1 > gaps_hv[1]: + continue + expanded_cand_bbox[1] = textline.y0 + elif direction == "top": + if textline.y0 - expanded_cand_bbox[3] > gaps_hv[1]: + continue + expanded_cand_bbox[3] = textline.y1 + + # If they are, see what an expanded bbox in that direction + # would contain + new_tls = text_in_bbox(expanded_cand_bbox, tls_search_space) + tls_in_new_box = new_tls + tls_in_bbox + + # And if we're expanding up or down, check that the addition + # of the new row won't reduce the number of columns. + # This happens when text covers multiple rows - that's only + # allowed in the header, treated separately. + cols_bounds = find_columns_boundaries(tls_in_new_box) + if direction in ["bottom", "top"] and len(cols_bounds) < len( + last_cols_bounds + ): + continue + + # We have an expansion candidate: register it, update the + # search space and repeat + # We use bbox_from_textlines instead of cand_bbox in case some + # overlapping textlines require a large bbox for strict fit. + bbox = cand_bbox = list(bbox_from_textlines(tls_in_new_box)) + last_cols_bounds = cols_bounds + tls_in_bbox.extend(new_tls) + for i in range(len(tls_search_space) - 1, -1, -1): + textline = tls_search_space[i] + if textline in new_tls: + del tls_search_space[i] + + if len(tls_in_bbox) >= MINIMUM_TEXTLINES_IN_TABLE: + return bbox + return None + + def generate(self, textlines): + """Generate the text edge dictionaries based on the + input textlines. + """ + self._register_all_text_lines(textlines) + self._compute_alignment_counts() + + +class Network(TextBaseParser): + """Network method of parsing looks for spaces between text + to parse the table. + + If you want to specify columns when specifying multiple table + areas, make sure that the length of both lists are equal. + + Parameters + ---------- + table_regions : list, optional (default: None) + List of page regions that may contain tables of the form x1,y1,x2,y2 + where (x1, y1) -> left-top and (x2, y2) -> right-bottom + in PDF coordinate space. + table_areas : list, optional (default: None) + List of table area strings of the form x1,y1,x2,y2 + where (x1, y1) -> left-top and (x2, y2) -> right-bottom + in PDF coordinate space. + columns : list, optional (default: None) + List of column x-coordinates strings where the coordinates + are comma-separated. + split_text : bool, optional (default: False) + Split text that spans across multiple cells. + flag_size : bool, optional (default: False) + Flag text based on font size. Useful to detect + super/subscripts. Adds around flagged text. + strip_text : str, optional (default: '') + Characters that should be stripped from a string before + assigning it to a cell. + edge_tol : int, optional (default: 50) + Tolerance parameter for extending textedges vertically. + row_tol : int, optional (default: 2) + Tolerance parameter used to combine text vertically, + to generate rows. + column_tol : int, optional (default: 0) + Tolerance parameter used to combine text horizontally, + to generate columns. + + """ + + def __init__( + self, + table_regions=None, + table_areas=None, + columns=None, + flag_size=False, + split_text=False, + strip_text="", + edge_tol=None, + row_tol=2, + column_tol=0, + debug=False, + **kwargs + ): + super().__init__( + "network", + table_regions=table_regions, + table_areas=table_areas, + columns=columns, + flag_size=flag_size, + split_text=split_text, + strip_text=strip_text, + edge_tol=edge_tol, + row_tol=row_tol, + column_tol=column_tol, + debug=debug, + ) + + def _generate_table_bbox(self): + user_provided_bboxes = None + if self.table_areas is not None: + # User gave us table areas already. We will use their coordinates + # to find column anchors. + user_provided_bboxes = [] + for area_str in self.table_areas: + user_provided_bboxes.append(bbox_from_str(area_str)) + + # Take all the textlines that are not just spaces + all_textlines = [ + t + for t in self.horizontal_text + self.vertical_text + if len(t.get_text().strip()) > 0 + ] + textlines = self._apply_regions_filter(all_textlines) + + textlines_processed = {} + self.table_bbox_parses = {} + if self.parse_details is not None: + parse_details_network_searches = [] + self.parse_details["network_searches"] = parse_details_network_searches + parse_details_bbox_searches = [] + self.parse_details["bbox_searches"] = parse_details_bbox_searches + self.parse_details["col_searches"] = [] + else: + parse_details_network_searches = None + parse_details_bbox_searches = None + + while True: + # Find a bbox: either pulling from the user's or from the network + # algorithm. + + # First look for the body of the table + bbox_body = None + if user_provided_bboxes is not None: + if len(user_provided_bboxes) > 0: + bbox_body = user_provided_bboxes.pop() + else: + text_network = TextNetworks() + text_network.generate(textlines) + text_network.remove_unconnected_edges() + gaps_hv = text_network.compute_plausible_gaps() + if gaps_hv is None: + return None + # edge_tol instructions override the calculated vertical gap + edge_tol_hv = ( + gaps_hv[0], + gaps_hv[1] if self.edge_tol is None else self.edge_tol, + ) + bbox_body = text_network.search_table_body( + edge_tol_hv, parse_details=parse_details_bbox_searches + ) + + if parse_details_network_searches is not None: + # Preserve the current edge calculation for debugging + parse_details_network_searches.append(copy.deepcopy(text_network)) + + if bbox_body is None: + break + + # Get all the textlines that overlap with the box, compute + # columns + tls_in_bbox = textlines_overlapping_bbox(bbox_body, textlines) + cols_boundaries = find_columns_boundaries(tls_in_bbox) + cols_anchors = boundaries_to_split_lines(cols_boundaries) + + # Unless the user gave us strict bbox_body, try to find a header + # above the body to build the full bbox. + if user_provided_bboxes is not None: + bbox_full = bbox_body + else: + # Expand the text box to fully contain the tls we found + bbox_body = bbox_from_textlines(tls_in_bbox) + + # Apply a heuristic to salvage headers which formatting might + # be off compared to the rest of the table. + bbox_full = search_header_from_body_bbox( + bbox_body, textlines, cols_anchors, gaps_hv[1] + ) + + table_parse = { + "bbox_body": bbox_body, + "cols_boundaries": cols_boundaries, + "cols_anchors": cols_anchors, + "bbox_full": bbox_full, + } + self.table_bbox_parses[bbox_full] = table_parse + + if self.parse_details is not None: + self.parse_details["col_searches"].append(table_parse) + + # Remember what textlines we processed, and repeat + for textline in tls_in_bbox: + textlines_processed[textline] = None + textlines = list( + filter(lambda textline: textline not in textlines_processed, textlines) + ) + + def _generate_columns_and_rows(self, bbox, user_cols): + # select elements which lie within table_bbox + self.t_bbox = text_in_bbox_per_axis( + bbox, self.horizontal_text, self.vertical_text + ) + + all_tls = list( + sorted( + filter( + lambda textline: len(textline.get_text().strip()) > 0, + self.t_bbox["horizontal"] + self.t_bbox["vertical"], + ), + key=lambda textline: (-textline.y0, textline.x0), + ) + ) + text_x_min, text_y_min, text_x_max, text_y_max = bbox_from_textlines(all_tls) + # FRHTODO: + # This algorithm takes the horizontal textlines in the bbox, and groups + # them into rows based on their bottom y0. + # That's wrong: it misses the vertical items, and misses out on all + # the alignment identification work we've done earlier. + rows_grouped = self._group_rows(all_tls, row_tol=self.row_tol) + rows = self._join_rows(rows_grouped, text_y_max, text_y_min) + + if user_cols is not None: + cols = [text_x_min] + user_cols + [text_x_max] + cols = [(cols[i], cols[i + 1]) for i in range(0, len(cols) - 1)] + else: + parse_details = self.table_bbox_parses[bbox] + col_anchors = parse_details["cols_anchors"] + cols = list( + map( + lambda idx: [col_anchors[idx], col_anchors[idx + 1]], + range(0, len(col_anchors) - 1), + ) + ) + + return cols, rows, None, None From 6f2fd7d5f500aee8d3b3b9a1cb50f5f711c33ac2 Mon Sep 17 00:00:00 2001 From: bosd Date: Sat, 21 Sep 2024 23:46:38 +0200 Subject: [PATCH 09/36] Add network parser to cli (#38) --- camelot/cli.py | 146 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 117 insertions(+), 29 deletions(-) diff --git a/camelot/cli.py b/camelot/cli.py index 2d266c6..414a44d 100644 --- a/camelot/cli.py +++ b/camelot/cli.py @@ -32,8 +32,7 @@ def set_config(self, key, value): @click.group(name="camelot") @click.version_option(version=__version__) -@click.option("-q", "--quiet", is_flag=False, - help="Suppress logs and warnings.") +@click.option("-q", "--quiet", is_flag=False, help="Suppress logs and warnings.") @click.option( "-p", "--pages", @@ -106,8 +105,7 @@ def cli(ctx, *args, **kwargs): " where x1, y1 -> left-top and x2, y2 -> right-bottom.", ) @click.option( - "-back", "--process_background", is_flag=True, - help="Process background lines." + "-back", "--process_background", is_flag=True, help="Process background lines." ) @click.option( "-scale", @@ -136,8 +134,7 @@ def cli(ctx, *args, **kwargs): "-l", "--line_tol", default=2, - help="Tolerance parameter used to merge close vertical" - " and horizontal lines.", + help="Tolerance parameter used to merge close vertical" " and horizontal lines.", ) @click.option( "-j", @@ -207,15 +204,12 @@ def lattice(c, *args, **kwargs): raise ImportError("matplotlib is required for plotting.") else: if output is None: - raise click.UsageError( - "Please specify output file path using --output") + raise click.UsageError("Please specify output file path using --output") if f is None: - raise click.UsageError( - "Please specify output file format using --format") + raise click.UsageError("Please specify output file format using --format") tables = read_pdf( - filepath, pages=pages, flavor="lattice", suppress_stdout=quiet, - **kwargs + filepath, pages=pages, flavor="lattice", suppress_stdout=quiet, **kwargs ) click.echo(f"Found {tables.n} tables") if plot_type is not None: @@ -260,8 +254,7 @@ def lattice(c, *args, **kwargs): "-r", "--row_tol", default=2, - help="Tolerance parameter" - " used to combine text vertically, to generate rows.", + help="Tolerance parameter" " used to combine text vertically, to generate rows.", ) @click.option( "-c", @@ -297,26 +290,33 @@ def stream(c, *args, **kwargs): columns = list(kwargs["columns"]) kwargs["columns"] = None if not columns else columns - margins = conf.pop('margins') + margins = conf.pop("margins") if margins is None: layout_kwargs = {} else: - layout_kwargs = {"char_margin": margins[0], "line_margin": margins[1], "word_margin": margins[2]} - + layout_kwargs = { + "char_margin": margins[0], + "line_margin": margins[1], + "word_margin": margins[2], + } + if plot_type is not None: if not _HAS_MPL: raise ImportError("matplotlib is required for plotting.") else: if output is None: - raise click.UsageError( - "Please specify output file path using --output") + raise click.UsageError("Please specify output file path using --output") if f is None: - raise click.UsageError( - "Please specify output file format using --format") + raise click.UsageError("Please specify output file format using --format") tables = read_pdf( - filepath, pages=pages, flavor="stream", suppress_stdout=quiet, layout_kwargs=layout_kwargs, **kwargs + filepath, + pages=pages, + flavor="stream", + suppress_stdout=quiet, + layout_kwargs=layout_kwargs, + **kwargs, ) click.echo(f"Found {tables.n} tables") if plot_type is not None: @@ -361,8 +361,7 @@ def stream(c, *args, **kwargs): "-r", "--row_tol", default=2, - help="Tolerance parameter" - " used to combine text vertically, to generate rows.", + help="Tolerance parameter" " used to combine text vertically, to generate rows.", ) @click.option( "-c", @@ -403,16 +402,105 @@ def hybrid(c, *args, **kwargs): raise ImportError("matplotlib is required for plotting.") else: if output is None: - raise click.UsageError( - "Please specify output file path using --output") + raise click.UsageError("Please specify output file path using --output") if f is None: - raise click.UsageError( - "Please specify output file format using --format") + raise click.UsageError("Please specify output file format using --format") tables = read_pdf( filepath, pages=pages, flavor="hybrid", suppress_stdout=quiet, **kwargs ) - click.echo("Found {} tables".format(tables.n)) + click.echo(f"Found {tables.n} tables") + if plot_type is not None: + for table in tables: + plot(table, kind=plot_type) + plt.show() + else: + tables.export(output, f=f, compress=compress) + + +@cli.command("network") +@click.option( + "-R", + "--table_regions", + default=[], + multiple=True, + help="Page regions to analyze. Example: x1,y1,x2,y2" + " where x1, y1 -> left-top and x2, y2 -> right-bottom.", +) +@click.option( + "-T", + "--table_areas", + default=[], + multiple=True, + help="Table areas to process. Example: x1,y1,x2,y2" + " where x1, y1 -> left-top and x2, y2 -> right-bottom.", +) +@click.option( + "-C", + "--columns", + default=[], + multiple=True, + help="X coordinates of column separators.", +) +@click.option( + "-e", + "--edge_tol", + default=50, + help="Tolerance parameter" " for extending textedges vertically.", +) +@click.option( + "-r", + "--row_tol", + default=2, + help="Tolerance parameter" " used to combine text vertically, to generate rows.", +) +@click.option( + "-c", + "--column_tol", + default=0, + help="Tolerance parameter" + " used to combine text horizontally, to generate columns.", +) +@click.option( + "-plot", + "--plot_type", + type=click.Choice(["text", "grid", "contour", "textedge"]), + help="Plot elements found on PDF page for visual debugging.", +) +@click.argument("filepath", type=click.Path(exists=True)) +@pass_config +def network(c, *args, **kwargs): + """Use spaces between text to parse the table.""" + conf = c.config + pages = conf.pop("pages") + output = conf.pop("output") + f = conf.pop("format") + compress = conf.pop("zip") + quiet = conf.pop("quiet") + plot_type = kwargs.pop("plot_type") + filepath = kwargs.pop("filepath") + kwargs.update(conf) + + table_regions = list(kwargs["table_regions"]) + kwargs["table_regions"] = None if not table_regions else table_regions + table_areas = list(kwargs["table_areas"]) + kwargs["table_areas"] = None if not table_areas else table_areas + columns = list(kwargs["columns"]) + kwargs["columns"] = None if not columns else columns + + if plot_type is not None: + if not _HAS_MPL: + raise ImportError("matplotlib is required for plotting.") + else: + if output is None: + raise click.UsageError("Please specify output file path using --output") + if f is None: + raise click.UsageError("Please specify output file format using --format") + + tables = read_pdf( + filepath, pages=pages, flavor="network", suppress_stdout=quiet, **kwargs + ) + click.echo(f"Found {tables.n} tables") if plot_type is not None: for table in tables: plot(table, kind=plot_type) From 0c8b0bcc9f65a2e1324f55b74b97bc6182032583 Mon Sep 17 00:00:00 2001 From: bosd Date: Sat, 21 Sep 2024 23:47:28 +0200 Subject: [PATCH 10/36] Add debug mode and support for neew parsers --- camelot/io.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/camelot/io.py b/camelot/io.py index 1271882..215839a 100644 --- a/camelot/io.py +++ b/camelot/io.py @@ -17,6 +17,7 @@ def read_pdf( suppress_stdout=False, parallel=False, layout_kwargs=None, + debug=False, **kwargs ): """Read PDF and return extracted tables. @@ -110,9 +111,10 @@ def read_pdf( """ if layout_kwargs is None: layout_kwargs = {} - if flavor not in ["lattice", "stream"]: + if flavor not in ["lattice", "stream", "network", "hybrid"]: raise NotImplementedError( - "Unknown flavor specified." " Use either 'lattice' or 'stream'" + "Unknown flavor specified." + " Use either 'lattice', 'stream', 'network' or 'hybrid'" ) with warnings.catch_warnings(): @@ -120,7 +122,7 @@ def read_pdf( warnings.simplefilter("ignore") validate_input(kwargs, flavor=flavor) - p = PDFHandler(filepath, pages=pages, password=password) + p = PDFHandler(filepath, pages=pages, password=password, debug=debug) kwargs = remove_extra(kwargs, flavor=flavor) tables = p.parse( flavor=flavor, From 3ef91c4e92967835098ddb2c51c1b75db4b38dac Mon Sep 17 00:00:00 2001 From: bosd Date: Sun, 22 Sep 2024 00:02:30 +0200 Subject: [PATCH 11/36] Handlers add support for network and hybrid parsers, todo: debug support --- camelot/handlers.py | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/camelot/handlers.py b/camelot/handlers.py index 091e225..e348ae3 100644 --- a/camelot/handlers.py +++ b/camelot/handlers.py @@ -9,7 +9,9 @@ from pypdf._utils import StrByteType from .core import TableList +from .parsers import Hybrid from .parsers import Lattice +from .parsers import Network from .parsers import Stream from .utils import TemporaryDirectory from .utils import build_file_path_in_temp_dir @@ -19,6 +21,12 @@ from .utils import get_text_objects from .utils import is_url +PARSERS = { + "lattice": Lattice, + "stream": Stream, + "network": Network, + "hybrid": Hybrid, +} class PDFHandler: """Handles all operations like temp directory creation, splitting @@ -34,10 +42,14 @@ class PDFHandler: Example: '1,3,4' or '1,4-end' or 'all'. password : str, optional (default: None) Password for decryption. - + debug : bool, optional (default: False) + Whether the parser should store debug information during parsing. """ - def __init__(self, filepath: Union[StrByteType, Path], pages="1", password=None): + def __init__( + self, filepath: Union[StrByteType, Path], pages="1", password=None, debug=False + ): + self.debug = debug if is_url(filepath): filepath = download_url(filepath) self.filepath: Union[StrByteType, Path] = filepath @@ -168,7 +180,7 @@ def parse( Parameters ---------- flavor : str (default: 'lattice') - The parsing method to use ('lattice' or 'stream'). + The parsing method to use. Lattice is used by default. suppress_stdout : bool (default: False) Suppress logs and warnings. @@ -190,7 +202,10 @@ def parse( layout_kwargs = {} tables = [] - parser = Lattice(**kwargs) if flavor == "lattice" else Stream(**kwargs) + # parser = Lattice(**kwargs) if flavor == "lattice" else Stream(**kwargs) + parser_obj = PARSERS[flavor] + parser = parser_obj(debug=self.debug, **kwargs) + with TemporaryDirectory() as tempdir: cpu_count = mp.cpu_count() # Using multiprocessing only when cpu_count > 1 to prevent a stallness issue @@ -225,8 +240,8 @@ def _parse_page(self, page, tempdir, parser, suppress_stdout, layout_kwargs): ---------- page : str Page number to parse - parser : Lattice or Stream - The parser to use (Lattice or Stream). + parser : Lattice, Stream, Network or Hybrid + The parser to use. suppress_stdout : bool Suppress logs and warnings. layout_kwargs : dict, optional (default: {}) @@ -244,7 +259,5 @@ def _parse_page(self, page, tempdir, parser, suppress_stdout, layout_kwargs): parser._generate_layout( page_path, layout, dimensions, page, layout_kwargs=layout_kwargs ) - tables = parser.extract_tables( - page_path, suppress_stdout=suppress_stdout, layout_kwargs=layout_kwargs - ) + tables = parser.extract_tables() return tables From 3764b74cde35ab5c2b4c6e21fe56f90b9c95337e Mon Sep 17 00:00:00 2001 From: bosd Date: Sun, 22 Sep 2024 12:44:08 +0200 Subject: [PATCH 12/36] Further changes to support new parsers --- camelot/utils.py | 166 +++++- tests/data.py | 962 ++++++++++++++++++++++++++++++++ tests/files/vertical_header.pdf | Bin 0 -> 83067 bytes 3 files changed, 1126 insertions(+), 2 deletions(-) create mode 100644 tests/files/vertical_header.pdf diff --git a/camelot/utils.py b/camelot/utils.py index dde4f53..665c4ba 100644 --- a/camelot/utils.py +++ b/camelot/utils.py @@ -274,8 +274,9 @@ def scale_image(tables, v_segments, h_segments, factors): j_x, j_y = zip(*tables[k]) j_x = [scale(j, scaling_factor_x) for j in j_x] j_y = [scale(abs(translate(-img_y, j)), scaling_factor_y) for j in j_y] - joints = zip(j_x, j_y) - tables_new[(x1, y1, x2, y2)] = joints + tables_new[(x1, y1, x2, y2)] = { + "joints": list(zip(j_x, j_y)) + } v_segments_new = [] for v in v_segments: @@ -366,6 +367,79 @@ def segments_in_bbox(bbox, v_segments, h_segments): return v_s, h_s +def get_textline_coords(textline): + """Calculate the coordinates of each alignment for a given textline. + """ + return { + "left": textline.x0, + "right": textline.x1, + "middle": (textline.x0 + textline.x1) / 2.0, + "bottom": textline.y0, + "top": textline.y1, + "center": (textline.y0 + textline.y1) / 2.0, + } + + +def bbox_from_str(bbox_str): + """Deserialize bbox from string ("x1,y1,x2,y2") to tuple (x1, y1, x2, y2). + + Parameters + ---------- + bbox_str : str + Serialized bbox with comma separated coordinates, "x1,y1,x2,y2". + + Returns + ------- + bbox : tuple + Tuple (x1, y1, x2, y2). + + """ + x1, y1, x2, y2 = bbox_str.split(",") + x1 = float(x1) + y1 = float(y1) + x2 = float(x2) + y2 = float(y2) + return ( + min(x1, x2), + min(y1, y2), + max(x1, x2), + max(y1, y2) + ) + + +def bboxes_overlap(bbox1, bbox2): + (left1, bottom1, right1, top1) = bbox1 + (left2, bottom2, right2, top2) = bbox2 + return ((left1 < left2 < right1) or (left1 < right2 < right1)) and ( + (bottom1 < bottom2 < top1) or (bottom1 < top2 < top1) + ) + + +def textlines_overlapping_bbox(bbox, textlines): + """Returns all text objects which overlap or are within a bounding box. + + Parameters + ---------- + bbox : tuple + Tuple (x1, y1, x2, y2) representing a bounding box where + (x1, y1) -> lb and (x2, y2) -> rt in the PDF coordinate + space. + textlines : List of PDFMiner text objects. + + Returns + ------- + t_bbox : list + List of PDFMiner text objects. + + """ + t_bbox = [ + t + for t in textlines + if bboxes_overlap(bbox, (t.x0, t.y0, t.x1, t.y1)) + ] + return t_bbox + + def text_in_bbox(bbox, text): """Returns all text objects present inside a bounding box. @@ -468,6 +542,94 @@ def bbox_intersect(ba, bb) -> bool: return ba.x1 >= bb.x0 and bb.x1 >= ba.x0 and ba.y1 >= bb.y0 and bb.y1 >= ba.y0 +def find_columns_boundaries(tls, min_gap=1.0): + """Make a list of disjunct cols boundaries for a list of text objects + + Parameters + ---------- + tls : list of PDFMiner text object. + + min_gap : minimum distance between columns. Any elements closer than + this threshold are merged together. This is to prevent spaces between + words to be misinterpreted as boundaries. + + Returns + ------- + boundaries : list + List x-coordinates for cols. + [(1st col left, 1st col right), (2nd col left, 2nd col right), ...] + + + """ + cols_bounds = [] + tls.sort(key=lambda tl: tl.x0) + for tl in tls: + if (not cols_bounds) or cols_bounds[-1][1] + min_gap < tl.x0: + cols_bounds.append([tl.x0, tl.x1]) + else: + cols_bounds[-1][1] = max(cols_bounds[-1][1], tl.x1) + return cols_bounds + + +def find_rows_boundaries(tls, min_gap=1.0): + """Make a list of disjunct rows boundaries for a list of text objects + + Parameters + ---------- + tls : list of PDFMiner text object. + + min_gap : minimum distance between rows. Any elements closer than + this threshold are merged together. + + Returns + ------- + boundaries : list + List y-coordinates for rows. + [(1st row bottom, 1st row top), (2nd row bottom, 2nd row top), ...] + + """ + rows_bounds = [] + tls.sort(key=lambda tl: tl.y0) + for tl in tls: + if (not rows_bounds) or rows_bounds[-1][1] + min_gap < tl.y0: + rows_bounds.append([tl.y0, tl.y1]) + else: + rows_bounds[-1][1] = max(rows_bounds[-1][1], tl.y1) + return rows_bounds + + +def boundaries_to_split_lines(boundaries): + """Find split lines given a list of boundaries between rows or cols. + + Boundaries: [ a ] [b] [ c ] [d] + Splits: | | | | | + + Parameters + ---------- + boundaries : list + List of tuples of x- (for columns) or y- (for rows) coord boundaries. + These are the (left, right most) or (bottom, top most) coordinates. + + Returns + ------- + anchors : list + List of coordinates representing the split points, each half way + between boundaries + + """ + # From the row boundaries, identify splits by getting the mid points + # between the boundaries. + anchors = list( + map( + lambda idx: (boundaries[idx - 1][1] + boundaries[idx][0]) / 2.0, + range(1, len(boundaries)), + ) + ) + anchors.insert(0, boundaries[0][0]) + anchors.append(boundaries[-1][1]) + return anchors + + def bbox_longer(ba, bb) -> bool: """Returns True if the bounding box of the first PDFMiner object is longer or equal to the second. diff --git a/tests/data.py b/tests/data.py index 2309ab7..a871a22 100644 --- a/tests/data.py +++ b/tests/data.py @@ -1558,6 +1558,968 @@ ["1 Except forcible rape and prostitution.", "", "", "", "", ""], ] +data_network_two_tables_b_1 = [ + ["1", "Ghfhbdhj", "1", "Hgfdhgjsdhjdsf"], + ["Vgvhgh", "Hj", "Hj", "Hj"], + ["Hj", "Hj", "Hj", "Hj"], + ["Hj", "Hj", "J", "Hj"], + ["V", "C", "D", "Gfhj"], + ["Hjb", "B", "Jhbh", "Hj"], + ["Hjdhshj", "Hjhjhh", "Ddnj", "dsxv"], +] + +data_network_two_tables_b_2 = [ + ["Trtrt", "H", "Gh"], + ["Gh", "V", "Hv"], + ["Hv", "Bhjb", "hg"], +] + +# The streaming algorithm incorrectly includes a header and a footer. +# Trimming the table for the test of network, which doesn't include it. +data_network_two_tables_2 = data_stream_two_tables_2[3:-1] + +data_network_vertical_headers = [ + [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "Congress-", + "Senator 36th", + "Rep106th", + "", + "Reg. of", + "Road", + "", + "", + "", + "Distri", + "Dist", + "", + "", + ], + [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "1st Dist", + "Dist.", + "Dist.", + "", + "Deeds", + "", + "Commission", + "", + "District #1", + "ct #2", + "#3", + "", + "Dist #4", + ], + [ + "", + "", + "", + "", + "", + "Governor", + "", + "", + "U.S. Senator", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + ], + [ + "", + "Number of Registered voters", + "Poll Book Totals", + "Brian Calley", + "Patrick Colbeck", + "Jim Hines", + "Bill Schuette", + "John James", + "Sandy Pensler", + "", + "Jack Bergman", + "", + "Jim Stamas", + "Sue Allor", + "Melissa A. Cordes", + "", + "Al Scully", + "", + "Daniel G. Gauthier", + "Craig M. Clemens", + "Craig Johnston", + "Carolyn Brummund", + "Adam Brege", + "David Bielusiak", + ], + [ + "Alcona", + "963", + "439", + "55", + "26", + "47", + "164", + "173", + "111", + "", + "268", + "", + "272", + "275", + "269", + "", + "271", + "", + "224", + "76", + "", + "", + "", + "", + ], + [ + "Caledonia", + "923", + "393", + "40", + "23", + "45", + "158", + "150", + "103", + "", + "244", + "", + "247", + "254", + "255", + "", + "244", + "", + "139", + "143", + "", + "", + "", + "", + ], + [ + "Curtis", + "1026", + "349", + "30", + "30", + "25", + "102", + "95", + "84", + "", + "159", + "", + "164", + "162", + "161", + "", + "157", + "", + "", + "", + "", + "", + "", + "", + ], + [ + "Greenbush", + "1212", + "423", + "56", + "26", + "40", + "126", + "104", + "131", + "", + "208", + "", + "213", + "214", + "215", + "", + "208", + "", + "", + "", + "", + "208", + "", + "", + ], + [ + "Gustin", + "611", + "180", + "22", + "35", + "17", + "55", + "73", + "45", + "", + "108", + "", + "104", + "111", + "111", + "", + "109", + "", + "", + "", + "", + "", + "81", + "42", + ], + [ + "Harrisville", + "1142", + "430", + "45", + "90", + "29", + "101", + "155", + "94", + "", + "226", + "", + "226", + "232", + "244", + "", + "226", + "", + "", + "", + "232", + "", + "", + "", + ], + [ + "Hawes", + "884", + "293", + "38", + "36", + "27", + "109", + "121", + "84", + "", + "192", + "", + "195", + "195", + "193", + "", + "184", + "", + "", + "", + "", + "", + "118", + "87", + ], + [ + "Haynes", + "626", + "275", + "31", + "20", + "32", + "104", + "121", + "53", + "", + "163", + "", + "163", + "173", + "161", + "", + "152", + "", + "", + "", + "76", + "", + "69", + "31", + ], + [ + "Mikado", + "781", + "208", + "19", + "39", + "17", + "81", + "90", + "63", + "", + "149", + "", + "149", + "145", + "147", + "", + "143", + "", + "", + "", + "", + "113", + "", + "", + ], + [ + "Millen", + "353", + "139", + "7", + "16", + "13", + "38", + "49", + "19", + "", + "62", + "", + "66", + "67", + "66", + "", + "62", + "", + "", + "", + "", + "", + "", + "", + ], + [ + "Mitchell", + "327", + "96", + "12", + "17", + "7", + "29", + "41", + "17", + "", + "57", + "", + "55", + "57", + "60", + "", + "56", + "", + "", + "", + "", + "", + "", + "", + ], + [ + "City Harrisville", + "389", + "171", + "16", + "15", + "18", + "35", + "49", + "31", + "", + "78", + "", + "80", + "82", + "81", + "", + "77", + "", + "", + "", + "73", + "", + "", + "", + ], + [ + "Totals", + "9237", + "3396", + "371", + "373", + "317", + "1102", + "1221", + "835", + "0", + "1914", + "0", + "1934", + "1967", + "1963", + "0", + "1889", + "0", + "363", + "219", + "381", + "321", + "268", + "160", + ], +] + +# Compared to network, hybrid detects additional sparse columns +data_hybrid_vertical_headers = [ + [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "Congress-", + "", + "", + "Senator 36th", + "", + "Rep106th", + "", + "Reg. of", + "", + "Road", + "", + "", + "Distri", + "Dist", + "", + "", + "Dist", + ], + [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "1st Dist", + "Dist.", + "", + "", + "Dist.", + "Deeds", + "", + "Commission", + "", + "District #1", + "", + "ct #2", + "#3", + "Dist #4", + "", + "#5", + ], + [ + "", + "", + "", + "", + "", + "Governor", + "", + "", + "U.S. Senator", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + ], + [ + "", + "Number of Registered voters", + "Poll Book Totals", + "Brian Calley", + "Patrick Colbeck", + "Jim Hines", + "Bill Schuette", + "John James", + "Sandy Pensler", + "", + "Jack Bergman", + "", + "Jim Stamas", + "", + "Sue Allor", + "", + "Melissa A. Cordes", + "", + "Al Scully", + "", + "Daniel G. Gauthier", + "Craig M. Clemens", + "Craig Johnston", + "Carolyn Brummund", + "Adam Brege", + "David Bielusiak", + "", + ], + [ + "Alcona", + "963", + "439", + "55", + "26", + "47", + "164", + "173", + "111", + "", + "268", + "", + "272", + "", + "275", + "", + "269", + "", + "271", + "", + "224", + "76", + "", + "", + "", + "", + "", + ], + [ + "Caledonia", + "923", + "393", + "40", + "23", + "45", + "158", + "150", + "103", + "", + "244", + "", + "247", + "", + "254", + "", + "255", + "", + "244", + "", + "139", + "143", + "", + "", + "", + "", + "", + ], + [ + "Curtis", + "1026", + "349", + "30", + "30", + "25", + "102", + "95", + "84", + "", + "159", + "", + "164", + "", + "162", + "", + "161", + "", + "157", + "", + "", + "", + "", + "", + "", + "", + "", + ], + [ + "Greenbush", + "1212", + "423", + "56", + "26", + "40", + "126", + "104", + "131", + "", + "208", + "", + "213", + "", + "214", + "", + "215", + "", + "208", + "", + "", + "", + "", + "208", + "", + "", + "", + ], + [ + "Gustin", + "611", + "180", + "22", + "35", + "17", + "55", + "73", + "45", + "", + "108", + "", + "104", + "", + "111", + "", + "111", + "", + "109", + "", + "", + "", + "", + "", + "81", + "42", + "", + ], + [ + "Harrisville", + "1142", + "430", + "45", + "90", + "29", + "101", + "155", + "94", + "", + "226", + "", + "226", + "", + "232", + "", + "244", + "", + "226", + "", + "", + "", + "232", + "", + "", + "", + "", + ], + [ + "Hawes", + "884", + "293", + "38", + "36", + "27", + "109", + "121", + "84", + "", + "192", + "", + "195", + "", + "195", + "", + "193", + "", + "184", + "", + "", + "", + "", + "", + "118", + "87", + "", + ], + [ + "Haynes", + "626", + "275", + "31", + "20", + "32", + "104", + "121", + "53", + "", + "163", + "", + "163", + "", + "173", + "", + "161", + "", + "152", + "", + "", + "", + "76", + "", + "69", + "31", + "", + ], + [ + "Mikado", + "781", + "208", + "19", + "39", + "17", + "81", + "90", + "63", + "", + "149", + "", + "149", + "", + "145", + "", + "147", + "", + "143", + "", + "", + "", + "", + "113", + "", + "", + "", + ], + [ + "Millen", + "353", + "139", + "7", + "16", + "13", + "38", + "49", + "19", + "", + "62", + "", + "66", + "", + "67", + "", + "66", + "", + "62", + "", + "", + "", + "", + "", + "", + "", + "", + ], + [ + "Mitchell", + "327", + "96", + "12", + "17", + "7", + "29", + "41", + "17", + "", + "57", + "", + "55", + "", + "57", + "", + "60", + "", + "56", + "", + "", + "", + "", + "", + "", + "", + "", + ], + [ + "City Harrisville", + "389", + "171", + "16", + "15", + "18", + "35", + "49", + "31", + "", + "78", + "", + "80", + "", + "82", + "", + "81", + "", + "77", + "", + "", + "", + "73", + "", + "", + "", + "", + ], + [ + "Totals", + "9237", + "3396", + "371", + "373", + "317", + "1102", + "1221", + "835", + "0", + "1914", + "0", + "1934", + "", + "1967", + "", + "1963", + "0", + "1889", + "0", + "363", + "219", + "381", + "321", + "268", + "160", + "0", + ], +] + data_stream_table_areas = [ ["", "One Withholding"], diff --git a/tests/files/vertical_header.pdf b/tests/files/vertical_header.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a343305effc4fc73dfbdd7b1ba7a250d8405d2f4 GIT binary patch literal 83067 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 literal 0 HcmV?d00001 From 3bd72b24bc6479225f0ce95bd75a14c2013b2b84 Mon Sep 17 00:00:00 2001 From: bosd Date: Sun, 22 Sep 2024 15:41:16 +0200 Subject: [PATCH 13/36] Refactor core.py to support textedges and alignments --- camelot/core.py | 216 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 149 insertions(+), 67 deletions(-) diff --git a/camelot/core.py b/camelot/core.py index 764b82b..e4b9f0c 100644 --- a/camelot/core.py +++ b/camelot/core.py @@ -1,3 +1,4 @@ +import math import os import sqlite3 import tempfile @@ -12,6 +13,8 @@ from .utils import build_file_path_in_temp_dir from .utils import compute_accuracy from .utils import compute_whitespace +from .utils import get_index_closest_point +from .utils import get_textline_coords # minimum number of vertical textline intersections for a textedge @@ -21,14 +24,66 @@ TABLE_AREA_PADDING = 10 -class TextEdge: +HORIZONTAL_ALIGNMENTS = ["left", "right", "middle"] +VERTICAL_ALIGNMENTS = ["top", "bottom", "center"] +ALL_ALIGNMENTS = HORIZONTAL_ALIGNMENTS + VERTICAL_ALIGNMENTS + + +class TextAlignment(object): + """Represents a list of textlines sharing an alignment on a coordinate. + The alignment can be left/right/middle or top/bottom/center. + (PDF coordinate space) + + Parameters + ---------- + coord : float + coordinate of the initial text edge. Depending on the alignment + it could be a vertical or horizontal coordinate. + textline : obj + the original textline to start the alignment + align : str + Name of the alignment (e.g. "left", "top", etc) + + Attributes + ---------- + coord : float + The coordinate aligned averaged out across textlines. It can be along + the x or y axis. + textlines : array + Array of textlines that demonstrate this alignment. + align : str + Name of the alignment (e.g. "left", "top", etc) + """ + + def __init__(self, coord, textline, align): + self.coord = coord + self.textlines = [textline] + self.align = align + + def __repr__(self): + text_inside = " | ".join( + map(lambda x: x.get_text(), self.textlines[:2])).replace("\n", "") + return f"" + + def register_aligned_textline(self, textline, coord): + """Update new textline to this alignment, adapting its average.""" + # Increase the intersections for this segment, expand it up, + # and adjust the x based on the new value + self.coord = (self.coord * len(self.textlines) + coord) / \ + float(len(self.textlines) + 1) + self.textlines.append(textline) + + +class TextEdge(TextAlignment): """Defines a text edge coordinates relative to a left-bottom origin. (PDF coordinate space) + An edge is an alignment bounded over a segment. Parameters ---------- - x : float - x-coordinate of the text edge. + coord : float + coordinate of the text edge. Can be x or y. y0 : float y-coordinate of bottommost point. y1 : float @@ -38,93 +93,114 @@ class TextEdge: Attributes ---------- - intersections: int - Number of intersections with horizontal text rows. is_valid: bool - A text edge is valid if it intersections with at least + A text edge is valid if it intersects with at least TEXTEDGE_REQUIRED_ELEMENTS horizontal text rows. """ - def __init__(self, x, y0, y1, align="left"): - self.x = x - self.y0 = y0 - self.y1 = y1 - self.align = align - self.intersections = 0 + def __init__(self, coord, textline, align): + super().__init__(coord, textline, align) + self.y0 = textline.y0 + self.y1 = textline.y1 self.is_valid = False def __repr__(self): - x = round(self.x, 2) + x = round(self.coord, 2) y0 = round(self.y0, 2) y1 = round(self.y1, 2) return ( f"" ) - def update_coords(self, x, y0, edge_tol=50): + def update_coords(self, x, textline, edge_tol=50): """Updates the text edge's x and bottom y coordinates and sets the is_valid attribute. """ - if np.isclose(self.y0, y0, atol=edge_tol): - self.x = (self.intersections * self.x + x) / float(self.intersections + 1) - self.y0 = y0 - self.intersections += 1 + if math.isclose(self.y0, textline.y0, abs_tol=edge_tol): + self.register_aligned_textline(textline, x) + self.y0 = textline.y0 # a textedge is valid only if it extends uninterrupted # over a required number of textlines - if self.intersections > TEXTEDGE_REQUIRED_ELEMENTS: + if len(self.textlines) > TEXTEDGE_REQUIRED_ELEMENTS: self.is_valid = True -class TextEdges: +class TextAlignments(): + """Defines a dict of text edges across reference alignments. + """ + + def __init__(self, alignment_names): + # For each possible alignment, list of tuples coordinate/textlines + self._text_alignments = {} + for alignment_name in alignment_names: + self._text_alignments[alignment_name] = [] + + @staticmethod + def _create_new_text_alignment(coord, textline, align): + return TextAlignment(coord, textline, align) + + def _update_alignment(self, alignment, coord, textline): + return NotImplemented + + def _register_textline(self, textline): + """Updates an existing text edge in the current dict. + """ + coords = get_textline_coords(textline) + for alignment_id, alignment_array in self._text_alignments.items(): + coord = coords[alignment_id] + + # Find the index of the closest existing element (or 0 if none) + idx_closest = get_index_closest_point( + coord, alignment_array, fn=lambda x: x.coord + ) + + # Check if the edges before/after are close enough + # that it can be considered aligned + idx_insert = None + if idx_closest is None: + idx_insert = 0 + else: + coord_closest = alignment_array[idx_closest].coord + # Note: np.isclose is slow! + if coord - 0.5 < coord_closest < coord + 0.5: + self._update_alignment( + alignment_array[idx_closest], + coord, + textline + ) + elif coord_closest < coord: + idx_insert = idx_closest + 1 + else: + idx_insert = idx_closest + if idx_insert is not None: + new_alignment = self._create_new_text_alignment( + coord, textline, alignment_id + ) + alignment_array.insert(idx_insert, new_alignment) + + +class TextEdges(TextAlignments): """Defines a dict of left, right and middle text edges found on the PDF page. The dict has three keys based on the alignments, and each key's value is a list of camelot.core.TextEdge objects. """ def __init__(self, edge_tol=50): + super().__init__(HORIZONTAL_ALIGNMENTS) self.edge_tol = edge_tol - self._textedges = {"left": [], "right": [], "middle": []} - @staticmethod - def get_x_coord(textline, align): - """Returns the x coordinate of a text row based on the - specified alignment. - """ - x_left = textline.x0 - x_right = textline.x1 - x_middle = x_left + (x_right - x_left) / 2.0 - x_coord = {"left": x_left, "middle": x_middle, "right": x_right} - return x_coord[align] - - def find(self, x_coord, align): - """Returns the index of an existing text edge using - the specified x coordinate and alignment. - """ - for i, te in enumerate(self._textedges[align]): - if np.isclose(te.x, x_coord, atol=0.5): - return i - return None + def _create_new_text_alignment(self, coord, textline, align): + # In TextEdges, each alignment is a TextEdge + return TextEdge(coord, textline, align) - def add(self, textline, align): + def add(self, coord, textline, align): """Adds a new text edge to the current dict.""" - x = self.get_x_coord(textline, align) - y0 = textline.y0 - y1 = textline.y1 - te = TextEdge(x, y0, y1, align=align) - self._textedges[align].append(te) - - def update(self, textline): - """Updates an existing text edge in the current dict.""" - for align in ["left", "right", "middle"]: - x_coord = self.get_x_coord(textline, align) - idx = self.find(x_coord, align) - if idx is None: - self.add(textline, align) - else: - self._textedges[align][idx].update_coords( - x_coord, textline.y0, edge_tol=self.edge_tol - ) + te = self._create_new_text_alignment(coord, textline, align) + self._text_alignments[align].append(te) + + def _update_alignment(self, alignment, coord, textline): + alignment.update_coords(coord, textline, self.edge_tol) def generate(self, textlines): """Generates the text edges dict based on horizontal text @@ -132,7 +208,7 @@ def generate(self, textlines): """ for tl in textlines: if len(tl.get_text().strip()) > 1: # TODO: hacky - self.update(tl) + self._register_textline(tl) def get_relevant(self): """Returns the list of relevant text edges (all share the same @@ -141,13 +217,19 @@ def get_relevant(self): """ intersections_sum = { "left": sum( - te.intersections for te in self._textedges["left"] if te.is_valid + len(te.textlines) + for te in self._text_alignments["left"] + if te.is_valid ), "right": sum( - te.intersections for te in self._textedges["right"] if te.is_valid + len(te.textlines) + for te in self._text_alignments["right"] + if te.is_valid ), "middle": sum( - te.intersections for te in self._textedges["middle"] if te.is_valid + len(te.textlines) + for te in self._text_alignments["middle"] + if te.is_valid ), } @@ -155,7 +237,7 @@ def get_relevant(self): # get vertical textedges that intersect maximum number of # times with horizontal textlines relevant_align = max(intersections_sum.items(), key=itemgetter(1))[0] - return list(filter(lambda te: te.is_valid, self._textedges[relevant_align])) + return list(filter(lambda te: te.is_valid, self._text_alignments[relevant_align])) def get_table_areas(self, textlines, relevant_textedges): """Returns a dict of interesting table areas on the PDF page @@ -171,12 +253,12 @@ def pad(area, average_row_height): return (x0, y0, x1, y1) # sort relevant textedges in reading order - relevant_textedges.sort(key=lambda te: (-te.y0, te.x)) + relevant_textedges.sort(key=lambda te: (-te.y0, te.coord)) table_areas = {} for te in relevant_textedges: if not table_areas: - table_areas[(te.x, te.y0, te.x, te.y1)] = None + table_areas[(te.coord, te.y0, te.coord, te.y1)] = None else: found = None for area in table_areas: @@ -185,13 +267,13 @@ def pad(area, average_row_height): found = area break if found is None: - table_areas[(te.x, te.y0, te.x, te.y1)] = None + table_areas[(te.coord, te.y0, te.coord, te.y1)] = None else: table_areas.pop(found) updated_area = ( found[0], min(te.y0, found[1]), - max(found[2], te.x), + max(found[2], te.coord), max(found[3], te.y1), ) table_areas[updated_area] = None From c80086328a6ad20befb33b1323d8e2312418ace1 Mon Sep 17 00:00:00 2001 From: bosd Date: Sun, 22 Sep 2024 15:50:09 +0200 Subject: [PATCH 14/36] add generic function get_index_closest_point to utils --- camelot/utils.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/camelot/utils.py b/camelot/utils.py index 665c4ba..69555df 100644 --- a/camelot/utils.py +++ b/camelot/utils.py @@ -630,6 +630,48 @@ def boundaries_to_split_lines(boundaries): return anchors +def get_index_closest_point(point, sorted_list, fn=lambda x: x): + """Return the index of the closest point in the sorted list. + Parameters + ---------- + point : the reference sortable element to search. + sorted_list : list + fn: optional accessor function + Returns + ------- + index : int + """ + + n = len(sorted_list) + if n == 0: + return None + if n == 1: + return 0 + left = 0 + right = n - 1 + mid = 0 + if point >= fn(sorted_list[n - 1]): + return n - 1 + if point <= fn(sorted_list[0]): + return 0 + while left < right: + mid = (left + right) // 2 # find the mid + mid_val = fn(sorted_list[mid]) + if point < mid_val: + right = mid + elif point > mid_val: + left = mid + 1 + else: + return mid + if mid_val > point: + if mid > 0 and (point - fn(sorted_list[mid - 1]) < mid_val - point): + return mid - 1 + elif mid_val < point: + if mid < n - 1 and (fn(sorted_list[mid + 1]) - point < point - mid_val): + return mid + 1 + return mid + + def bbox_longer(ba, bb) -> bool: """Returns True if the bounding box of the first PDFMiner object is longer or equal to the second. From a72c35032ae417f4a214f7bd8056f3c4fdbdb6ac Mon Sep 17 00:00:00 2001 From: bosd Date: Sun, 22 Sep 2024 16:37:34 +0200 Subject: [PATCH 15/36] Update utls.py --- camelot/utils.py | 66 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/camelot/utils.py b/camelot/utils.py index 69555df..760d5a7 100644 --- a/camelot/utils.py +++ b/camelot/utils.py @@ -441,7 +441,8 @@ def textlines_overlapping_bbox(bbox, textlines): def text_in_bbox(bbox, text): - """Returns all text objects present inside a bounding box. + """Returns all text objects which lie at least 80% inside a bounding box + across both dimensions. Parameters ---------- @@ -483,6 +484,69 @@ def text_in_bbox(bbox, text): return unique_boxes +def text_in_bbox_per_axis(bbox, horizontal_text, vertical_text): + """Returns all text objects present inside a bounding box, split between + horizontal and vertical text. + Parameters + ---------- + bbox : tuple + Tuple (x1, y1, x2, y2) representing a bounding box where + (x1, y1) -> lb and (x2, y2) -> rt in the PDF coordinate + space. + horizontal_text : List of PDFMiner text objects. + vertical_text : List of PDFMiner text objects. + Returns + ------- + t_bbox : dict + Dict of lists of PDFMiner text objects that lie inside table, with one + key each for "horizontal" and "vertical" + """ + t_bbox = {} + t_bbox["horizontal"] = text_in_bbox(bbox, horizontal_text) + t_bbox["vertical"] = text_in_bbox(bbox, vertical_text) + t_bbox["horizontal"].sort(key=lambda x: (-x.y0, x.x0)) + t_bbox["vertical"].sort(key=lambda x: (x.x0, -x.y0)) + return t_bbox + + +def expand_bbox_with_textline(bbox, textline): + """Expand (if needed) a bbox so that it fits the parameter textline. + """ + return ( + min(bbox[0], textline.x0), + min(bbox[1], textline.y0), + max(bbox[2], textline.x1), + max(bbox[3], textline.y1) + ) + + +def bbox_from_textlines(textlines): + """Returns the smallest bbox containing all the text objects passed as + a parameters. + Parameters + ---------- + textlines : List of PDFMiner text objects. + Returns + ------- + bbox : tuple + Tuple (x1, y1, x2, y2) representing a bounding box where + (x1, y1) -> lb and (x2, y2) -> rt in the PDF coordinate + space. + """ + if len(textlines) == 0: + return None + bbox = ( + textlines[0].x0, + textlines[0].y0, + textlines[0].x1, + textlines[0].y1 + ) + + for tl in textlines[1:]: + bbox = expand_bbox_with_textline(bbox, tl) + return bbox + + def bbox_intersection_area(ba, bb) -> float: """Returns area of the intersection of the bounding boxes of two PDFMiner objects. From c9537ad3b910e62c77db2a47c70745e01bca24a9 Mon Sep 17 00:00:00 2001 From: bosd Date: Sun, 22 Sep 2024 16:58:21 +0200 Subject: [PATCH 16/36] Refactor/move copy_spanning_text to core --- camelot/core.py | 30 ++++++++++++++++++++++++++++++ camelot/parsers/base.py | 4 ++-- camelot/parsers/lattice.py | 34 ---------------------------------- 3 files changed, 32 insertions(+), 36 deletions(-) diff --git a/camelot/core.py b/camelot/core.py index e4b9f0c..9aafd91 100644 --- a/camelot/core.py +++ b/camelot/core.py @@ -478,6 +478,8 @@ def record_metadata(self, parser): self.flavor = parser.id self.filename = parser.filename self.debug_info = parser.debug_info + if parser.copy_text is not None: + self.copy_spanning_text(parser.copy_text) data = self.data self.df = pd.DataFrame(data) self.shape = self.df.shape @@ -680,6 +682,34 @@ def set_span(self): cell.hspan = True return self + def copy_spanning_text(self, copy_text=None): + """Copies over text in empty spanning cells. + Parameters + ---------- + copy_text : list, optional (default: None) + {'h', 'v'} + Select one or more strings from above and pass them as a list + to specify the direction in which text should be copied over + when a cell spans multiple rows or columns. + Returns + ------- + t : camelot.core.Table + """ + for f in copy_text: + if f == "h": + for i in range(len(self.cells)): + for j in range(len(self.cells[i])): + if self.cells[i][j].text.strip() == "": + if self.cells[i][j].hspan and not self.cells[i][j].left: + self.cells[i][j].text = self.cells[i][j - 1].text + elif f == "v": + for i in range(len(self.cells)): + for j in range(len(self.cells[i])): + if self.cells[i][j].text.strip() == "": + if self.cells[i][j].vspan and not self.cells[i][j].top: + self.cells[i][j].text = self.cells[i - 1][j].text + return self + def to_csv(self, path, **kwargs): """Writes Table to a comma-separated values (csv) file. diff --git a/camelot/parsers/base.py b/camelot/parsers/base.py index ea69181..75389e4 100644 --- a/camelot/parsers/base.py +++ b/camelot/parsers/base.py @@ -8,9 +8,9 @@ class BaseParser: """Defines a base parser.""" - def __init__(self, parser_id): + def __init__(self, parser_id, copy_text=None): self.id = parser_id - + self.copy_text = copy_text # For plotting details of parsing algorithms self.debug_info = {} diff --git a/camelot/parsers/lattice.py b/camelot/parsers/lattice.py index 9468519..b00159f 100644 --- a/camelot/parsers/lattice.py +++ b/camelot/parsers/lattice.py @@ -115,7 +115,6 @@ def __init__( self.table_areas = table_areas self.process_background = process_background self.line_scale = line_scale - self.copy_text = copy_text self.shift_text = shift_text or ["l", "t"] self.split_text = split_text self.flag_size = flag_size @@ -201,39 +200,6 @@ def _reduce_index(table, idx, shift_text): indices.append((r_idx, c_idx, text)) return indices - @staticmethod - def _copy_spanning_text(table, copy_text=None): - """Copies over text in empty spanning cells. - - Parameters - ---------- - table : camelot.core.Table - copy_text : list, optional (default: None) - {'h', 'v'} - Select one or more strings from above and pass them as a list - to specify the direction in which text should be copied over - when a cell spans multiple rows or columns. - - Returns - ------- - table : camelot.core.Table - - """ - for f in copy_text: - if f == "h": - for i in range(len(table.cells)): - for j in range(len(table.cells[i])): - if table.cells[i][j].text.strip() == "": - if table.cells[i][j].hspan and not table.cells[i][j].left: - table.cells[i][j].text = table.cells[i][j - 1].text - elif f == "v": - for i in range(len(table.cells)): - for j in range(len(table.cells[i])): - if table.cells[i][j].text.strip() == "": - if table.cells[i][j].vspan and not table.cells[i][j].top: - table.cells[i][j].text = table.cells[i - 1][j].text - return table - def _generate_table_bbox(self): def scale_areas(areas): scaled_areas = [] From b1e21b5d7e3a455f0f8d94eb34ef5f1e3fe4d760 Mon Sep 17 00:00:00 2001 From: bosd Date: Sun, 22 Sep 2024 17:56:00 +0200 Subject: [PATCH 17/36] Finalize the base class --- camelot/parsers/base.py | 442 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 423 insertions(+), 19 deletions(-) diff --git a/camelot/parsers/base.py b/camelot/parsers/base.py index 75389e4..5c568a3 100644 --- a/camelot/parsers/base.py +++ b/camelot/parsers/base.py @@ -1,20 +1,62 @@ +"""Defines a base parser. As well as generic methods for other parsers.""" + import os +import warnings + +import numpy as np +import pandas as pd from ..core import Table -from ..utils import get_page_layout +from ..utils import bbox_from_str +from ..utils import compute_accuracy +from ..utils import compute_whitespace +from ..utils import get_table_index from ..utils import get_text_objects +from ..utils import text_in_bbox class BaseParser: """Defines a base parser.""" - def __init__(self, parser_id, copy_text=None): + def __init__( + self, + parser_id, + table_regions=None, + table_areas=None, + copy_text=None, + split_text=False, + strip_text="", + shift_text=None, + flag_size=False, + debug=False, + ): self.id = parser_id + self.table_regions = table_regions + self.table_areas = table_areas + self.table_bbox_parses = {} + + self.columns = None self.copy_text = copy_text + self.split_text = split_text + self.strip_text = strip_text + self.shift_text = shift_text + + self.flag_size = flag_size + + self.rootname = None + self.t_bbox = None + # For plotting details of parsing algorithms - self.debug_info = {} + self.resolution = 300 # default plotting resolution of the PDF. + self.parse_details = {} + if not debug: + self.parse_details = None + + def table_bboxes(self): + return sorted(self.table_bbox_parses.keys(), key=lambda x: x[1], reverse=True) - def _generate_layout(self, filename, layout, dimensions, page_idx, layout_kwargs): + def prepare_page_parse(self, filename, layout, dimensions, page_idx, layout_kwargs): + """Prepare the page for parsing.""" self.filename = filename self.layout_kwargs = layout_kwargs self.layout = layout @@ -25,27 +67,389 @@ def _generate_layout(self, filename, layout, dimensions, page_idx, layout_kwargs self.vertical_text = get_text_objects(self.layout, ltype="vertical_text") self.pdf_width, self.pdf_height = self.dimensions self.rootname, __ = os.path.splitext(self.filename) - self.imagename = "".join([self.rootname, ".png"]) - """Initialize new table object, ready to be populated + if self.parse_details is not None: + self.parse_details["table_regions"] = self.table_regions + self.parse_details["table_areas"] = self.table_areas - Parameters - ---------- - table_idx : int - Index of this table within the pdf page analyzed - cols : list - list of coordinate boundaries tuples (left, right) - rows : list - list of coordinate boundaries tuples (bottom, top) + def _apply_regions_filter(self, textlines): + """If regions have been specified, filter textlines to these regions. - Returns - ------- - table : camelot.core.Table + Parameters + ---------- + textlines : list + list of textlines to be filtered - """ + Returns + ------- + filtered_textlines : list of textlines within the regions specified - def _initialize_new_table(self, table_idx, cols, rows): + """ + filtered_textlines = [] + if self.table_regions is None: + filtered_textlines.extend(textlines) + else: + for region_str in self.table_regions: + region_text = text_in_bbox(bbox_from_str(region_str), textlines) + filtered_textlines.extend(region_text) + return filtered_textlines + + def _document_has_no_text(self): + """Detects image only documents and warns. + + Returns + ------- + has_no_text : bool + Whether the document doesn't have any text at all. + """ + if not self.horizontal_text: + rootname = os.path.basename(self.rootname) + if self.images: + warnings.warn( + "{rootname} is image-based, " + "camelot only works on text-based pages.".format(rootname=rootname) + ) + else: + warnings.warn(f"No tables found on {rootname}") + return True + return False + + def _initialize_new_table(self, table_idx, bbox, cols, rows): + """Initialize new table object, ready to be populated. + + Parameters + ---------- + table_idx : int + Index of this table within the pdf page analyzed + bbox : set + bounding box of this table within the pdf page analyzed + cols : list + list of coordinate boundaries tuples (left, right) + rows : list + list of coordinate boundaries tuples (bottom, top) + + Returns + ------- + table : camelot.core.Table + + """ table = Table(cols, rows) table.page = self.page table.order = table_idx + 1 + table._bbox = bbox + return table + + @staticmethod + def _reduce_index(t, idx, shift_text): + """ + Reduces index of a text object if it lies within a spanning + cell. Only useful for some parsers (e.g. Lattice), base method is a + noop. + """ + return idx + + def compute_parse_errors(self, table): + pos_errors = [] + # TODO: have a single list in place of two directional ones? + # sorted on x-coordinate based on reading order i.e. LTR or RTL + for direction in ["vertical", "horizontal"]: + for t in self.t_bbox[direction]: + indices, error = get_table_index( + table, + t, + direction, + split_text=self.split_text, + flag_size=self.flag_size, + strip_text=self.strip_text, + ) + if indices[:2] != (-1, -1): + pos_errors.append(error) + indices = type(self)._reduce_index( + table, indices, shift_text=self.shift_text + ) + for r_idx, c_idx, text in indices: + table.cells[r_idx][c_idx].text = text + return pos_errors + + def _generate_columns_and_rows(self, bbox, user_cols): + # Pure virtual, must be defined by the derived parser + raise NotImplementedError() + + def _generate_table(self, table_idx, bbox, cols, rows, **kwargs): + # Pure virtual, must be defined by the derived parser + raise NotImplementedError() + + def _generate_table_bbox(self): + # Pure virtual, must be defined by the derived parser + raise NotImplementedError() + + def extract_tables(self): + """Extract tables from the document.""" + if self._document_has_no_text(): + return [] + + # Identify plausible areas within the doc where tables lie, + # populate table_bbox keys with these areas. + self._generate_table_bbox() + + _tables = [] + # sort tables based on y-coord + for table_idx, bbox in enumerate(self.table_bboxes()): + if self.columns is not None and self.columns[table_idx] != "": + # user has to input boundary columns too + # take (0, pdf_width) by default + # similar to else condition + # len can't be 1 + user_cols = self.columns[table_idx].split(",") + user_cols = [float(c) for c in user_cols] + else: + user_cols = None + + cols, rows, v_s, h_s = self._generate_columns_and_rows(bbox, user_cols) + table = self._generate_table(table_idx, bbox, cols, rows, v_s=v_s, h_s=h_s) + _tables.append(table) + + return _tables + + def record_parse_metadata(self, table): + """Record data about the origin of the table.""" + table.flavor = self.id + table.filename = self.filename + table.parse = self.table_bbox_parses[table._bbox] + table.parse_details = self.parse_details + pos_errors = self.compute_parse_errors(table) + table.accuracy = compute_accuracy([[100, pos_errors]]) + + if self.copy_text is not None: + table.copy_spanning_text(self.copy_text) + + data = table.data + table.df = pd.DataFrame(data) + table.shape = table.df.shape + + table.whitespace = compute_whitespace(data) + table.pdf_size = (self.pdf_width, self.pdf_height) + + _text = [] + _text.extend([(t.x0, t.y0, t.x1, t.y1) for t in self.horizontal_text]) + _text.extend([(t.x0, t.y0, t.x1, t.y1) for t in self.vertical_text]) + table._text = _text + table.textlines = self.horizontal_text + self.vertical_text + + +class TextBaseParser(BaseParser): + """Base class for all text parsers.""" + + def __init__( + self, + parser_id, + table_regions=None, + table_areas=None, + columns=None, + flag_size=False, + split_text=False, + strip_text="", + edge_tol=50, + row_tol=2, + column_tol=0, + debug=False, + **kwargs, + ): + """Initialize the text base parser class with default values.""" + super().__init__( + parser_id, + table_regions=table_regions, + table_areas=table_areas, + split_text=split_text, + strip_text=strip_text, + flag_size=flag_size, + debug=debug, + ) + self.columns = columns + self._validate_columns() + self.edge_tol = edge_tol + self.row_tol = row_tol + self.column_tol = column_tol + + @staticmethod + def _group_rows(text, row_tol=2): + """ + Groups PDFMiner text objects into rows vertically + within a tolerance. + + Parameters + ---------- + text : list + List of PDFMiner text objects. + row_tol : int, optional (default: 2) + + Returns + ------- + rows : list + Two-dimensional list of text objects grouped into rows. + + """ + row_y = None + rows = [] + temp = [] + non_empty_text = [t for t in text if t.get_text().strip()] + for t in non_empty_text: + # is checking for upright necessary? + # if t.get_text().strip() and all([obj.upright \ + # for obj in t._objs + # if type(obj) is LTChar]): + if row_y is None: + row_y = t.y0 + elif not np.isclose(row_y, t.y0, atol=row_tol): + rows.append(sorted(temp, key=lambda t: t.x0)) + temp = [] + # We update the row's bottom as we go, to be forgiving if there + # is a gradual change across multiple columns. + row_y = t.y0 + temp.append(t) + rows.append(sorted(temp, key=lambda t: t.x0)) + return rows + + @staticmethod + def _merge_columns(cl, column_tol=0): + """Merges column boundaries horizontally if they overlap + or lie within a tolerance. + + Parameters + ---------- + cl : list + List of column x-coordinate tuples. + column_tol : int, optional (default: 0) + + Returns + ------- + merged : list + List of merged column x-coordinate tuples. + + """ + merged = [] + for higher in cl: + if not merged: + merged.append(higher) + else: + lower = merged[-1] + if column_tol >= 0: + if higher[0] <= lower[1] or np.isclose( + higher[0], lower[1], atol=column_tol + ): + upper_bound = max(lower[1], higher[1]) + lower_bound = min(lower[0], higher[0]) + merged[-1] = (lower_bound, upper_bound) + else: + merged.append(higher) + elif column_tol < 0: + if higher[0] <= lower[1]: + if np.isclose(higher[0], lower[1], atol=abs(column_tol)): + merged.append(higher) + else: + upper_bound = max(lower[1], higher[1]) + lower_bound = min(lower[0], higher[0]) + merged[-1] = (lower_bound, upper_bound) + else: + merged.append(higher) + return merged + + @staticmethod + def _join_rows(rows_grouped, text_y_max, text_y_min): + """ + Makes row coordinates continuous. For the row to "touch" + we split the existing gap between them in half. + + Parameters + ---------- + rows_grouped : list + Two-dimensional list of text objects grouped into rows. + text_y_max : int + text_y_min : int + + Returns + ------- + rows : list + List of continuous row y-coordinate tuples. + + """ + row_boundaries = [ + [max(t.y1 for t in r), min(t.y0 for t in r)] for r in rows_grouped + ] + for i in range(0, len(row_boundaries) - 1): + top_row = row_boundaries[i] + bottom_row = row_boundaries[i + 1] + top_row[1] = bottom_row[0] = (top_row[1] + bottom_row[0]) / 2 + row_boundaries[0][0] = text_y_max + row_boundaries[-1][1] = text_y_min + return row_boundaries + + @staticmethod + def _add_columns(cols, text, row_tol): + """Adds columns to existing list by taking into account + the text that lies outside the current column x-coordinates. + + Parameters + ---------- + cols : list + List of column x-coordinate tuples. + text : list + List of PDFMiner text objects. + ytol : int + + Returns + ------- + cols : list + Updated list of column x-coordinate tuples. + + """ + if text: + text = TextBaseParser._group_rows(text, row_tol=row_tol) + elements = [len(r) for r in text] + new_cols = [ + (t.x0, t.x1) for r in text if len(r) == max(elements) for t in r + ] + cols.extend(TextBaseParser._merge_columns(sorted(new_cols))) + return cols + + @staticmethod + def _join_columns(cols, text_x_min, text_x_max): + """Makes column coordinates continuous. + + Parameters + ---------- + cols : list + List of column x-coordinate tuples. + text_x_min : int + text_y_max : int + + Returns + ------- + cols : list + Updated list of column x-coordinate tuples. + + """ + cols = sorted(cols) + cols = [(cols[i][0] + cols[i - 1][1]) / 2 for i in range(1, len(cols))] + cols.insert(0, text_x_min) + cols.append(text_x_max) + cols = [(cols[i], cols[i + 1]) for i in range(0, len(cols) - 1)] + return cols + + def _validate_columns(self): + if self.table_areas is not None and self.columns is not None: + if len(self.table_areas) != len(self.columns): + raise ValueError("Length of table_areas and columns" " should be equal") + + def _generate_table(self, table_idx, bbox, cols, rows, **kwargs): + table = self._initialize_new_table(table_idx, bbox, cols, rows) + table = table.set_all_edges() + self.record_parse_metadata(table) + return table + + def record_parse_metadata(self, table): + """Record data about the origin of the table.""" + super().record_parse_metadata(table) + # for plotting + table._segments = None From fadeda71f18e787772b884b893dac32e139ec4d3 Mon Sep 17 00:00:00 2001 From: bosd Date: Sun, 22 Sep 2024 18:16:49 +0200 Subject: [PATCH 18/36] Refactor to use prepare_page_parse --- camelot/handlers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/camelot/handlers.py b/camelot/handlers.py index e348ae3..99a8c54 100644 --- a/camelot/handlers.py +++ b/camelot/handlers.py @@ -256,7 +256,7 @@ def _parse_page(self, page, tempdir, parser, suppress_stdout, layout_kwargs): self._save_page(self.filepath, page, tempdir) page_path = os.path.join(tempdir, f"page-{page}.pdf") layout, dimensions = get_page_layout(page_path, **layout_kwargs) - parser._generate_layout( + parser.prepare_page_parse( page_path, layout, dimensions, page, layout_kwargs=layout_kwargs ) tables = parser.extract_tables() From ed520bfa11bbca7ac72a886ff2beea2da452ff56 Mon Sep 17 00:00:00 2001 From: bosd Date: Sun, 22 Sep 2024 19:02:07 +0200 Subject: [PATCH 19/36] Lattice Fix rename imagename to pdf_image --- camelot/parsers/lattice.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/camelot/parsers/lattice.py b/camelot/parsers/lattice.py index b00159f..02bf884 100644 --- a/camelot/parsers/lattice.py +++ b/camelot/parsers/lattice.py @@ -374,7 +374,7 @@ def extract_tables(self, filename, suppress_stdout=False, layout_kwargs={}): warnings.warn(f"No tables found on {os.path.basename(self.rootname)}") return [] - self.backend.convert(self.filename, self.imagename) + self.backend.convert(self.filename, self.pdf_image) self._generate_table_bbox() From 61ff62d45470f66864ba7514a58a307c3e2bdd41 Mon Sep 17 00:00:00 2001 From: bosd Date: Sun, 22 Sep 2024 21:53:57 +0200 Subject: [PATCH 20/36] Further refactor lattice parser --- camelot/parsers/lattice.py | 189 ++++++++++++++++--------------------- 1 file changed, 80 insertions(+), 109 deletions(-) diff --git a/camelot/parsers/lattice.py b/camelot/parsers/lattice.py index 02bf884..a6adc26 100644 --- a/camelot/parsers/lattice.py +++ b/camelot/parsers/lattice.py @@ -1,35 +1,23 @@ import copy -import locale -import logging import os -import subprocess -import sys import warnings - import numpy as np import pandas as pd from ..backends.image_conversion import BACKENDS -from ..core import Table from ..image_processing import adaptive_threshold from ..image_processing import find_contours from ..image_processing import find_joints from ..image_processing import find_lines from ..utils import build_file_path_in_temp_dir -from ..utils import compute_accuracy -from ..utils import compute_whitespace -from ..utils import get_table_index from ..utils import merge_close_lines from ..utils import scale_image from ..utils import scale_pdf from ..utils import segments_in_bbox -from ..utils import text_in_bbox +from ..utils import text_in_bbox_per_axis from .base import BaseParser -logger = logging.getLogger("camelot") - - class Lattice(BaseParser): """Lattice method of parsing looks for lines between text to parse the table. @@ -97,7 +85,7 @@ def __init__( process_background=False, line_scale=15, copy_text=None, - shift_text=["l", "t"], + shift_text=None, split_text=False, flag_size=False, strip_text="", @@ -115,6 +103,7 @@ def __init__( self.table_areas = table_areas self.process_background = process_background self.line_scale = line_scale + self.copy_text = copy_text self.shift_text = shift_text or ["l", "t"] self.split_text = split_text self.flag_size = flag_size @@ -200,6 +189,14 @@ def _reduce_index(table, idx, shift_text): indices.append((r_idx, c_idx, text)) return indices + def record_parse_metadata(self, table): + """Record data about the origin of the table + """ + super().record_parse_metadata(table) + # for plotting + table._image = self.pdf_image # Reuse the image used for calc + table._segments = (self.vertical_segments, self.horizontal_segments) + def _generate_table_bbox(self): def scale_areas(areas): scaled_areas = [] @@ -273,46 +270,87 @@ def scale_areas(areas): areas = scale_areas(self.table_areas) table_bbox = find_joints(areas, vertical_mask, horizontal_mask) - self.table_bbox_unscaled = copy.deepcopy(table_bbox) - - self.table_bbox, self.vertical_segments, self.horizontal_segments = scale_image( + [ + self.table_bbox_parses, + self.vertical_segments, + self.horizontal_segments + ] = scale_image( table_bbox, vertical_segments, horizontal_segments, pdf_scalers ) - def _generate_columns_and_rows(self, table_idx, tk): + for bbox, parse in self.table_bbox_parses.items(): + joints = parse["joints"] + + # Merge x coordinates that are close together + line_tol = self.line_tol + # Sort the joints, make them a list of lists (instead of sets) + joints_normalized = list( + map( + lambda x: list(x), + sorted(joints, key=lambda j: - j[0]) + ) + ) + for idx in range(1, len(joints_normalized)): + x_left, x_right = \ + joints_normalized[idx - 1][0], joints_normalized[idx][0] + if x_left - line_tol <= x_right <= x_left + line_tol: + joints_normalized[idx][0] = x_left + + # Merge y coordinates that are close together + joints_normalized = sorted(joints_normalized, key=lambda j: -j[1]) + for idx in range(1, len(joints_normalized)): + y_bottom, y_top = \ + joints_normalized[idx - 1][1], joints_normalized[idx][1] + if y_bottom - line_tol <= y_top <= y_bottom + line_tol: + joints_normalized[idx][1] = y_bottom + + # TODO: check this is useful, otherwise get rid of the code + # above + parse["joints_normalized"] = joints_normalized + + cols = list(map(lambda coords: coords[0], joints)) + cols.extend([bbox[0], bbox[2]]) + rows = list(map(lambda coords: coords[1], joints)) + rows.extend([bbox[1], bbox[3]]) + + # sort horizontal and vertical segments + cols = merge_close_lines(sorted(cols), line_tol=self.line_tol) + rows = merge_close_lines( + sorted(rows, reverse=True), + line_tol=self.line_tol + ) + parse["col_anchors"] = cols + parse["row_anchors"] = rows + + def _generate_columns_and_rows(self, bbox, user_cols): # select elements which lie within table_bbox - t_bbox = {} v_s, h_s = segments_in_bbox( - tk, self.vertical_segments, self.horizontal_segments + bbox, self.vertical_segments, self.horizontal_segments ) - t_bbox["horizontal"] = text_in_bbox(tk, self.horizontal_text) - t_bbox["vertical"] = text_in_bbox(tk, self.vertical_text) - - t_bbox["horizontal"].sort(key=lambda x: (-x.y0, x.x0)) - t_bbox["vertical"].sort(key=lambda x: (x.x0, -x.y0)) - - self.t_bbox = t_bbox - - cols, rows = zip(*self.table_bbox[tk]) - cols, rows = list(cols), list(rows) - cols.extend([tk[0], tk[2]]) - rows.extend([tk[1], tk[3]]) - # sort horizontal and vertical segments - cols = merge_close_lines(sorted(cols), line_tol=self.line_tol) - rows = merge_close_lines(sorted(rows, reverse=True), line_tol=self.line_tol) - # make grid using x and y coord of shortlisted rows and cols - cols = [(cols[i], cols[i + 1]) for i in range(0, len(cols) - 1)] - rows = [(rows[i], rows[i + 1]) for i in range(0, len(rows) - 1)] - + self.t_bbox = text_in_bbox_per_axis( + bbox, + self.horizontal_text, + self.vertical_text + ) + parse = self.table_bbox_parses[bbox] + + cols = [ + (parse["col_anchors"][i], parse["col_anchors"][i + 1]) + for i in range(0, len(parse["col_anchors"]) - 1) + ] + rows = [ + (parse["row_anchors"][i], parse["row_anchors"][i + 1]) + for i in range(0, len(parse["row_anchors"]) - 1) + ] return cols, rows, v_s, h_s - def _generate_table(self, table_idx, cols, rows, **kwargs): + def _generate_table(self, table_idx, bbox, cols, rows, **kwargs): v_s = kwargs.get("v_s") h_s = kwargs.get("h_s") if v_s is None or h_s is None: raise ValueError(f"No segments found on {self.rootname}") - table = self._initialize_new_table(table_idx, cols, rows) + table = self._initialize_new_table(table_idx, bbox, cols, rows) # set table edges to True using ver+hor lines table = table.set_edges(v_s, h_s, joint_tol=self.joint_tol) # set table border edges to True @@ -320,72 +358,5 @@ def _generate_table(self, table_idx, cols, rows, **kwargs): # set spanning cells to True table = table.set_span() - pos_errors = [] - # TODO: have a single list in place of two directional ones? - # sorted on x-coordinate based on reading order i.e. LTR or RTL - for direction in ["vertical", "horizontal"]: - for t in self.t_bbox[direction]: - indices, error = get_table_index( - table, - t, - direction, - split_text=self.split_text, - flag_size=self.flag_size, - strip_text=self.strip_text, - ) - if indices[0][:2] != (-1, -1): - pos_errors.append(error) - indices = Lattice._reduce_index( - table, indices, shift_text=self.shift_text - ) - for r_idx, c_idx, text in indices: - table.cells[r_idx][c_idx].text = text - accuracy = compute_accuracy([[100, pos_errors]]) - - if self.copy_text is not None: - table = Lattice._copy_spanning_text(table, copy_text=self.copy_text) - - table.record_metadata(self) - table.accuracy = accuracy - - # for plotting - _text = [] - _text.extend([(t.x0, t.y0, t.x1, t.y1) for t in self.horizontal_text]) - _text.extend([(t.x0, t.y0, t.x1, t.y1) for t in self.vertical_text]) - table._text = _text - table._image = self.pdf_image # Reuse the image used for calc - table._bbox_unscaled = self.table_bbox_unscaled - table._segments = (self.vertical_segments, self.horizontal_segments) - table._textedges = None - + self.record_parse_metadata(table) return table - - def extract_tables(self, filename, suppress_stdout=False, layout_kwargs={}): - if not suppress_stdout: - logger.info(f"Processing {os.path.basename(self.rootname)}") - - if not self.horizontal_text: - if self.images: - warnings.warn( - "{} is image-based, camelot only works on" - " text-based pages.".format(os.path.basename(self.rootname)) - ) - else: - warnings.warn(f"No tables found on {os.path.basename(self.rootname)}") - return [] - - self.backend.convert(self.filename, self.pdf_image) - - self._generate_table_bbox() - - _tables = [] - # sort tables based on y-coord - for table_idx, tk in enumerate( - sorted(self.table_bbox.keys(), key=lambda x: x[1], reverse=True) - ): - cols, rows, v_s, h_s = self._generate_columns_and_rows(table_idx, tk) - table = self._generate_table(table_idx, cols, rows, v_s=v_s, h_s=h_s) - table._bbox = tk - _tables.append(table) - - return _tables From 92838f49e226c4f48c97e8d5527751e211e54f5e Mon Sep 17 00:00:00 2001 From: bosd Date: Sun, 22 Sep 2024 21:54:36 +0200 Subject: [PATCH 21/36] Fixup base parser/ improvement from fork --- camelot/parsers/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/camelot/parsers/base.py b/camelot/parsers/base.py index 5c568a3..ed327a1 100644 --- a/camelot/parsers/base.py +++ b/camelot/parsers/base.py @@ -162,7 +162,7 @@ def compute_parse_errors(self, table): flag_size=self.flag_size, strip_text=self.strip_text, ) - if indices[:2] != (-1, -1): + if indices[0][:2] != (-1, -1): pos_errors.append(error) indices = type(self)._reduce_index( table, indices, shift_text=self.shift_text From 73869894a6b19680acbf61f454eaac9a1328d094 Mon Sep 17 00:00:00 2001 From: bosd Date: Sun, 22 Sep 2024 23:07:01 +0200 Subject: [PATCH 22/36] Refactor Stream Parser --- camelot/parsers/stream.py | 387 ++++++-------------------------------- tests/test_errors.py | 2 +- 2 files changed, 58 insertions(+), 331 deletions(-) diff --git a/camelot/parsers/stream.py b/camelot/parsers/stream.py index 78dc5d5..449a136 100644 --- a/camelot/parsers/stream.py +++ b/camelot/parsers/stream.py @@ -1,23 +1,18 @@ -import logging -import os import warnings -import numpy as np -import pandas as pd - from ..core import Table from ..core import TextEdges from ..utils import compute_accuracy from ..utils import compute_whitespace from ..utils import get_table_index from ..utils import text_in_bbox -from .base import BaseParser - - -logger = logging.getLogger("camelot") +from ..utils import bbox_from_str +from ..utils import bbox_from_textlines +from ..utils import text_in_bbox_per_axis +from .base import TextBaseParser -class Stream(BaseParser): +class Stream(TextBaseParser): """Stream method of parsing looks for spaces between text to parse the table. @@ -69,212 +64,20 @@ def __init__( column_tol=0, **kwargs, ): - super().__init__("stream") - self.table_regions = table_regions - self.table_areas = table_areas - self.columns = columns - self._validate_columns() - self.split_text = split_text - self.flag_size = flag_size - self.strip_text = strip_text - self.edge_tol = edge_tol - self.row_tol = row_tol - self.column_tol = column_tol - - @staticmethod - def _text_bbox(t_bbox): - """Returns bounding box for the text present on a page. - - Parameters - ---------- - t_bbox : dict - Dict with two keys 'horizontal' and 'vertical' with lists of - LTTextLineHorizontals and LTTextLineVerticals respectively. - - Returns - ------- - text_bbox : tuple - Tuple (x0, y0, x1, y1) in pdf coordinate space. - - """ - xmin = 0 - ymin = 0 - xmax = 0 - ymax = 0 - if len([t.x0 for direction in t_bbox for t in t_bbox[direction]]) > 0: - xmin = min([t.x0 for direction in t_bbox for t in t_bbox[direction]]) - ymin = min([t.y0 for direction in t_bbox for t in t_bbox[direction]]) - xmax = max([t.x1 for direction in t_bbox for t in t_bbox[direction]]) - ymax = max([t.y1 for direction in t_bbox for t in t_bbox[direction]]) - text_bbox = (xmin, ymin, xmax, ymax) - return text_bbox - - @staticmethod - def _group_rows(text, row_tol=2): - """Groups PDFMiner text objects into rows vertically - within a tolerance. - - Parameters - ---------- - text : list - List of PDFMiner text objects. - row_tol : int, optional (default: 2) - - Returns - ------- - rows : list - Two-dimensional list of text objects grouped into rows. - - """ - row_y = 0 - rows = [] - temp = [] - - for t in text: - # is checking for upright necessary? - # if t.get_text().strip() and all([obj.upright for obj in t._objs if - # type(obj) is LTChar]): - if t.get_text().strip(): - if not np.isclose(row_y, t.y0, atol=row_tol): - rows.append(sorted(temp, key=lambda t: t.x0)) - temp = [] - row_y = t.y0 - temp.append(t) - - rows.append(sorted(temp, key=lambda t: t.x0)) - if len(rows) > 1: - __ = rows.pop(0) # TODO: hacky - return rows - - @staticmethod - def _merge_columns(l, column_tol=0): - """Merges column boundaries horizontally if they overlap - or lie within a tolerance. - - Parameters - ---------- - l : list - List of column x-coordinate tuples. - column_tol : int, optional (default: 0) - - Returns - ------- - merged : list - List of merged column x-coordinate tuples. - - """ - merged = [] - for higher in l: - if not merged: - merged.append(higher) - else: - lower = merged[-1] - if column_tol >= 0: - if higher[0] <= lower[1] or np.isclose( - higher[0], lower[1], atol=column_tol - ): - upper_bound = max(lower[1], higher[1]) - lower_bound = min(lower[0], higher[0]) - merged[-1] = (lower_bound, upper_bound) - else: - merged.append(higher) - elif column_tol < 0: - if higher[0] <= lower[1]: - if np.isclose(higher[0], lower[1], atol=abs(column_tol)): - merged.append(higher) - else: - upper_bound = max(lower[1], higher[1]) - lower_bound = min(lower[0], higher[0]) - merged[-1] = (lower_bound, upper_bound) - else: - merged.append(higher) - return merged - - @staticmethod - def _join_rows(rows_grouped, text_y_max, text_y_min): - """Makes row coordinates continuous. For the row to "touch" - we split the existing gap between them in half. - - Parameters - ---------- - rows_grouped : list - Two-dimensional list of text objects grouped into rows. - text_y_max : int - text_y_min : int - - Returns - ------- - rows : list - List of continuous row y-coordinate tuples. - - """ - row_boundaries = [ - [max(t.y1 for t in r), min(t.y0 for t in r)] for r in rows_grouped - ] - for i in range(0, len(row_boundaries) - 1): - top_row = row_boundaries[i] - bottom_row = row_boundaries[i + 1] - top_row[1] = bottom_row[0] = (top_row[1] + bottom_row[0]) / 2 - row_boundaries[0][0] = text_y_max - row_boundaries[-1][1] = text_y_min - return row_boundaries - - @staticmethod - def _add_columns(cols, text, row_tol): - """Adds columns to existing list by taking into account - the text that lies outside the current column x-coordinates. - - Parameters - ---------- - cols : list - List of column x-coordinate tuples. - text : list - List of PDFMiner text objects. - ytol : int - - Returns - ------- - cols : list - Updated list of column x-coordinate tuples. - - """ - if text: - text = Stream._group_rows(text, row_tol=row_tol) - elements = [len(r) for r in text] - new_cols = [ - (t.x0, t.x1) for r in text if len(r) == max(elements) for t in r - ] - cols.extend(Stream._merge_columns(sorted(new_cols))) - return cols - - @staticmethod - def _join_columns(cols, text_x_min, text_x_max): - """Makes column coordinates continuous. - - Parameters - ---------- - cols : list - List of column x-coordinate tuples. - text_x_min : int - text_y_max : int - - Returns - ------- - cols : list - Updated list of column x-coordinate tuples. - - """ - cols = sorted(cols) - cols = [(cols[i][0] + cols[i - 1][1]) / 2 for i in range(1, len(cols))] - cols.insert(0, text_x_min) - cols.append(text_x_max) - cols = [(cols[i], cols[i + 1]) for i in range(0, len(cols) - 1)] - return cols - - def _validate_columns(self): - if self.table_areas is not None and self.columns is not None: - if len(self.table_areas) != len(self.columns): - raise ValueError("Length of table_areas and columns" " should be equal") + super().__init__( + "stream", + table_regions=table_regions, + table_areas=table_areas, + columns=columns, + # _validate_columns() + split_text=split_text, + flag_size=flag_size, + strip_text=strip_text, + edge_tol=edge_tol, + row_tol=row_tol, + column_tol=column_tol, + ) + self.textedges = [] def _nurminen_table_detection(self, textlines): """A general implementation of the table detection algorithm @@ -296,65 +99,57 @@ def _nurminen_table_detection(self, textlines): # guess table areas using textlines and relevant edges table_bbox = textedges.get_table_areas(textlines, relevant_textedges) # treat whole page as table area if no table areas found - if not len(table_bbox): + if not table_bbox: table_bbox = {(0, 0, self.pdf_width, self.pdf_height): None} return table_bbox + def record_parse_metadata(self, table): + """Record data about the origin of the table + """ + super().record_parse_metadata(table) + table._textedges = self.textedges + def _generate_table_bbox(self): - self.textedges = [] if self.table_areas is None: hor_text = self.horizontal_text if self.table_regions is not None: # filter horizontal text hor_text = [] - for region in self.table_regions: - x1, y1, x2, y2 = region.split(",") - x1 = float(x1) - y1 = float(y1) - x2 = float(x2) - y2 = float(y2) - region_text = text_in_bbox((x1, y2, x2, y1), self.horizontal_text) - hor_text.extend(region_text) + for region_str in self.table_regions: + region_text = text_in_bbox(bbox_from_str(region_str), self.horizontal_text) + hor_text.extend(region_text) # find tables based on nurminen's detection algorithm - table_bbox = self._nurminen_table_detection(hor_text) + table_bbox_parses = self._nurminen_table_detection(hor_text) else: - table_bbox = {} - for area in self.table_areas: - x1, y1, x2, y2 = area.split(",") - x1 = float(x1) - y1 = float(y1) - x2 = float(x2) - y2 = float(y2) - table_bbox[(x1, y2, x2, y1)] = None - self.table_bbox = table_bbox + table_bbox_parses = {} + for area_str in self.table_areas: + table_bbox_parses[bbox_from_str(area_str)] = None + self.table_bbox_parses = table_bbox_parses - def _generate_columns_and_rows(self, table_idx, tk): + def _generate_columns_and_rows(self, bbox, user_cols): # select elements which lie within table_bbox - t_bbox = {} - t_bbox["horizontal"] = text_in_bbox(tk, self.horizontal_text) - t_bbox["vertical"] = text_in_bbox(tk, self.vertical_text) - - t_bbox["horizontal"].sort(key=lambda x: (-x.y0, x.x0)) - t_bbox["vertical"].sort(key=lambda x: (x.x0, -x.y0)) - - self.t_bbox = t_bbox - - text_x_min, text_y_min, text_x_max, text_y_max = self._text_bbox(self.t_bbox) - rows_grouped = self._group_rows(self.t_bbox["horizontal"], row_tol=self.row_tol) + self.t_bbox = text_in_bbox_per_axis( + bbox, + self.horizontal_text, + self.vertical_text + ) + + text_x_min, text_y_min, text_x_max, text_y_max = bbox_from_textlines( + self.t_bbox["horizontal"] + self.t_bbox["vertical"] + ) + + rows_grouped = self._group_rows( + self.t_bbox["horizontal"], row_tol=self.row_tol) rows = self._join_rows(rows_grouped, text_y_max, text_y_min) elements = [len(r) for r in rows_grouped] - if self.columns is not None and self.columns[table_idx] != "": - # user has to input boundary columns too - # take (0, pdf_width) by default - # similar to else condition - # len can't be 1 - cols = self.columns[table_idx].split(",") - cols = [float(c) for c in cols] - cols.insert(0, text_x_min) - cols.append(text_x_max) - cols = [(cols[i], cols[i + 1]) for i in range(0, len(cols) - 1)] + if user_cols is not None: + cols = [text_x_min] + user_cols + [text_x_max] + cols = [ + (cols[i], cols[i + 1]) + for i in range(0, len(cols) - 1) + ] else: # calculate mode of the list of number of elements in # each row to guess the number of columns @@ -369,10 +164,10 @@ def _generate_columns_and_rows(self, table_idx, tk): # see if the list contains elements, if yes, then use # the mode after removing 1s elements = list(filter(lambda x: x != 1, elements)) - if len(elements): + if elements: ncols = max(set(elements), key=elements.count) else: - warnings.warn(f"No tables found in table area {table_idx + 1}") + warnings.warn(f"No tables found in table area {bbox}") cols = [ (t.x0, t.x1) for r in rows_grouped if len(r) == ncols for t in r ] @@ -389,6 +184,7 @@ def _generate_columns_and_rows(self, table_idx, tk): if t.x0 > left and t.x1 < right ] ) + outer_text = [ t for direction in self.t_bbox @@ -398,73 +194,4 @@ def _generate_columns_and_rows(self, table_idx, tk): inner_text.extend(outer_text) cols = self._add_columns(cols, inner_text, self.row_tol) cols = self._join_columns(cols, text_x_min, text_x_max) - - return cols, rows - - def _generate_table(self, table_idx, cols, rows, **kwargs): - table = self._initialize_new_table(table_idx, cols, rows) - table = table.set_all_edges() - - pos_errors = [] - # TODO: have a single list in place of two directional ones? - # sorted on x-coordinate based on reading order i.e. LTR or RTL - for direction in ["vertical", "horizontal"]: - for t in self.t_bbox[direction]: - indices, error = get_table_index( - table, - t, - direction, - split_text=self.split_text, - flag_size=self.flag_size, - strip_text=self.strip_text, - ) - if indices[:2] != (-1, -1): - pos_errors.append(error) - for r_idx, c_idx, text in indices: - table.cells[r_idx][c_idx].text = text - accuracy = compute_accuracy([[100, pos_errors]]) - - table.record_metadata(self) - - table.accuracy = accuracy - - # for plotting - _text = [] - _text.extend([(t.x0, t.y0, t.x1, t.y1) for t in self.horizontal_text]) - _text.extend([(t.x0, t.y0, t.x1, t.y1) for t in self.vertical_text]) - table._text = _text - table._bbox = self.table_bbox - table._segments = None - table._textedges = self.textedges - - return table - - def extract_tables(self, filename, suppress_stdout=False, layout_kwargs={}): - base_filename = os.path.basename(self.rootname) - - if not suppress_stdout: - logger.info(f"Processing {base_filename}") - - if not self.horizontal_text: - if self.images: - warnings.warn( - f"{base_filename} is image-based, camelot only works on" - " text-based pages." - ) - else: - warnings.warn(f"No tables found on {base_filename}") - return [] - - self._generate_table_bbox() - - _tables = [] - # sort tables based on y-coord - for table_idx, tk in enumerate( - sorted(self.table_bbox.keys(), key=lambda x: x[1], reverse=True) - ): - cols, rows = self._generate_columns_and_rows(table_idx, tk) - table = self._generate_table(table_idx, cols, rows) - table._bbox = tk - _tables.append(table) - - return _tables + return cols, rows, None, None diff --git a/tests/test_errors.py b/tests/test_errors.py index 41262c1..7aff150 100644 --- a/tests/test_errors.py +++ b/tests/test_errors.py @@ -104,7 +104,7 @@ def test_stream_no_tables_in_area(testdir): warnings.simplefilter("error") with pytest.raises(UserWarning) as e: tables = camelot.read_pdf(filename, flavor="stream") - assert str(e.value) == "No tables found in table area 1" + assert str(e.value) == "No tables found in table area (0, 0, 792, 612)" def test_lattice_no_tables_on_page(testdir): From 10a69406e88fb5a5b767399e233c771915ec160a Mon Sep 17 00:00:00 2001 From: bosd Date: Mon, 23 Sep 2024 21:08:01 +0200 Subject: [PATCH 23/36] Plotting.py support for axes --- camelot/plotting.py | 428 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 331 insertions(+), 97 deletions(-) diff --git a/camelot/plotting.py b/camelot/plotting.py index f458a05..046098a 100644 --- a/camelot/plotting.py +++ b/camelot/plotting.py @@ -1,3 +1,5 @@ +from pdfminer.layout import LTTextLineVertical + try: import matplotlib.patches as patches import matplotlib.pyplot as plt @@ -6,9 +8,146 @@ else: _HAS_MPL = True +from .utils import (bbox_from_str, bbox_from_textlines, get_textline_coords) + + +def extend_axe_lim(ax, bbox, margin=10): + """Ensure the ax limits include the input bbox + """ + x0, x1 = ax.get_xlim() + y0, y1 = ax.get_ylim() + ax.set_xlim(min(x0, bbox[0] - margin), max(x1, bbox[2] + margin)) + ax.set_ylim(min(y0, bbox[1] - margin), max(y1, bbox[3] + margin)) + + +def draw_labeled_bbox( + ax, bbox, text, + color="black", linewidth=3, + linestyle="solid", + label_pos="top,left", + fontsize=12, +): + """Utility drawing function to draw a box with an associated text label + """ + ax.add_patch( + patches.Rectangle( + (bbox[0], bbox[1]), + bbox[2] - bbox[0], bbox[3] - bbox[1], + color=color, + linewidth=linewidth, linestyle=linestyle, + fill=False + ) + ) + + vlabel, hlabel = label_pos.split(",") + if vlabel == "top": + y = max(bbox[1], bbox[3]) + elif vlabel == "bottom": + y = min(bbox[1], bbox[3]) + else: + y = 0.5 * (bbox[1] + bbox[3]) + + # We want to draw the label outside the box (above or below) + label_align_swap = { + "top": "bottom", + "bottom": "top", + "center": "center" + } + vlabel_out_of_box = label_align_swap[vlabel] + if hlabel == "right": + x = max(bbox[0], bbox[2]) + elif hlabel == "left": + x = min(bbox[0], bbox[2]) + else: + x = 0.5 * (bbox[0] + bbox[2]) + ax.text( + x, y, + text, + fontsize=fontsize, color="black", + verticalalignment=vlabel_out_of_box, + horizontalalignment=hlabel, + bbox=dict(facecolor=color, alpha=0.1) + ) + + +def draw_pdf(table, ax): + """Draw the content of the table's source pdf into the passed subplot + Parameters + ---------- + table : camelot.core.Table + ax : matplotlib.axes.Axes (optional) + """ + img = table.get_pdf_image() + ax.imshow(img, extent=(0, table.pdf_size[0], 0, table.pdf_size[1])) + + +def draw_parse_constraints(table, ax): + """Draw any user provided constraints (area, region, columns, etc) + Parameters + ---------- + table : camelot.core.Table + ax : matplotlib.axes.Axes (optional) + """ + if table.parse_details: + zone_constraints = { + "region": "table_regions", + "area": "table_areas", + } + for zone_name, zone_id in zone_constraints.items(): + # Display a bbox per region / area + for zone_str in table.parse_details[zone_id] or []: + draw_labeled_bbox( + ax, bbox_from_str(zone_str), + "{zone_name}: ({zone_str})".format( + zone_name=zone_name, + zone_str=zone_str + ), + color="purple", + linestyle="dotted", + linewidth=1, + label_pos="bottom,right" + ) + + +def draw_text(table, ax): + """Draw text, horizontal in blue, vertical in red + Parameters + ---------- + table : camelot.core.Table + ax : matplotlib.axes.Axes (optional) + """ + bbox = bbox_from_textlines(table.textlines) + for t in table.textlines: + color = "red" if isinstance(t, LTTextLineVertical) else "blue" + ax.add_patch( + patches.Rectangle( + (t.x0, t.y0), t.x1 - t.x0, t.y1 - t.y0, color=color, alpha=0.2 + ) + ) + extend_axe_lim(ax, bbox) + + +def prepare_plot(table, ax=None): + """Initialize plot and draw common components + Parameters + ---------- + table : camelot.core.Table + ax : matplotlib.axes.Axes (optional) + + Returns + ------- + ax : matplotlib.axes.Axes + """ + if ax is None: + fig = plt.figure() + ax = fig.add_subplot(111, aspect="equal") + draw_pdf(table, ax) + draw_parse_constraints(table, ax) + return ax + class PlotMethods: - def __call__(self, table, kind="text", filename=None): + def __call__(self, table, kind="text", filename=None, ax=None): """Plot elements found on PDF page based on kind specified, useful for debugging and playing with different parameters to get the best output. @@ -18,7 +157,8 @@ def __call__(self, table, kind="text", filename=None): table: camelot.core.Table A Camelot Table. kind : str, optional (default: 'text') - {'text', 'grid', 'contour', 'joint', 'line'} + {'text', 'grid', 'contour', 'joint', 'line', + 'network_table_search'} The element type for which a plot should be generated. filepath: str, optional (default: None) Absolute path for saving the generated plot. @@ -33,61 +173,51 @@ def __call__(self, table, kind="text", filename=None): if table.flavor == "lattice" and kind in ["textedge"]: raise NotImplementedError(f"Lattice flavor does not support kind='{kind}'") - elif table.flavor == "stream" and kind in ["joint", "line"]: - raise NotImplementedError(f"Stream flavor does not support kind='{kind}'") + if table.flavor != "lattice" and kind in ["line"]: + raise NotImplementedError(f"{table.flavor} flavor does not support kind='{kind}'") plot_method = getattr(self, kind) - fig = plot_method(table) - if filename is not None: + fig = plot_method(table, ax) fig.savefig(filename) return None - return fig + return plot_method(table, ax) - def text(self, table): + def text(self, table, ax=None): """Generates a plot for all text elements present on the PDF page. Parameters ---------- table : camelot.core.Table + ax : matplotlib.axes.Axes (optional) Returns ------- fig : matplotlib.fig.Figure """ - fig = plt.figure() - ax = fig.add_subplot(111, aspect="equal") - xs, ys = [], [] - for t in table._text: - xs.extend([t[0], t[2]]) - ys.extend([t[1], t[3]]) - ax.add_patch( - patches.Rectangle((t[0], t[1]), t[2] - t[0], t[3] - t[1], alpha=0.5) - ) - ax.set_xlim(min(xs) - 10, max(xs) + 10) - ax.set_ylim(min(ys) - 10, max(ys) + 10) - img = table.get_pdf_image() - ax.imshow(img, extent=(0, table.pdf_size[0], 0, table.pdf_size[1])) - return fig + ax = prepare_plot(table, ax) + draw_text(table, ax) + return ax.get_figure() - def grid(self, table): + @staticmethod + def grid(table, ax=None): """Generates a plot for the detected table grids on the PDF page. Parameters ---------- table : camelot.core.Table + ax : matplotlib.axes.Axes (optional) Returns ------- fig : matplotlib.fig.Figure """ - fig = plt.figure() - ax = fig.add_subplot(111, aspect="equal") + ax = prepare_plot(table, ax) for row in table.cells: for cell in row: if cell.left: @@ -98,18 +228,17 @@ def grid(self, table): ax.plot([cell.lt[0], cell.rt[0]], [cell.lt[1], cell.rt[1]]) if cell.bottom: ax.plot([cell.lb[0], cell.rb[0]], [cell.lb[1], cell.rb[1]]) + return ax.get_figure() - img = table.get_pdf_image() - ax.imshow(img, extent=(0, table.pdf_size[0], 0, table.pdf_size[1])) - return fig - - def contour(self, table): + @staticmethod + def contour(table, ax=None): """Generates a plot for all table boundaries present on the PDF page. Parameters ---------- table : camelot.core.Table + ax : matplotlib.axes.Axes (optional) Returns ------- @@ -117,123 +246,228 @@ def contour(self, table): """ - img = table.get_pdf_image() _FOR_LATTICE = table.flavor == "lattice" - if _FOR_LATTICE: - table_bbox = table._bbox_unscaled - else: - table_bbox = {table._bbox: None} - fig = plt.figure() - ax = fig.add_subplot(111, aspect="equal") + ax = prepare_plot(table, ax) - xs, ys = [], [] if not _FOR_LATTICE: - for t in table._text: - xs.extend([t[0], t[2]]) - ys.extend([t[1], t[3]]) - ax.add_patch( - patches.Rectangle((t[0], t[1]), t[2] - t[0], t[3] - t[1], alpha=0.5) - ) - - for t in table_bbox.keys(): - ax.add_patch( - patches.Rectangle( - (t[0], t[1]), t[2] - t[0], t[3] - t[1], fill=False, color="red" - ) + draw_text(table, ax) + + ax.add_patch( + patches.Rectangle( + (table._bbox[0], table._bbox[1]), + table._bbox[2] - table._bbox[0], + table._bbox[3] - table._bbox[1], + fill=False, color="red" ) - if not _FOR_LATTICE: - xs.extend([t[0], t[2]]) - ys.extend([t[1], t[3]]) - ax.set_xlim(min(xs) - 10, max(xs) + 10) - ax.set_ylim(min(ys) - 10, max(ys) + 10) - - if _FOR_LATTICE: - ax.imshow(img) - else: - ax.imshow(img, extent=(0, table.pdf_size[0], 0, table.pdf_size[1])) - return fig - def textedge(self, table): + ) + + if not _FOR_LATTICE: + extend_axe_lim(ax, table._bbox) + return ax.get_figure() + + @staticmethod + def textedge(table, ax=None): """Generates a plot for relevant textedges. Parameters ---------- table : camelot.core.Table + ax : matplotlib.axes.Axes (optional) Returns ------- fig : matplotlib.fig.Figure """ - fig = plt.figure() - ax = fig.add_subplot(111, aspect="equal") - xs, ys = [], [] - for t in table._text: - xs.extend([t[0], t[2]]) - ys.extend([t[1], t[3]]) - ax.add_patch( - patches.Rectangle( - (t[0], t[1]), t[2] - t[0], t[3] - t[1], color="blue", alpha=0.5 - ) - ) - ax.set_xlim(min(xs) - 10, max(xs) + 10) - ax.set_ylim(min(ys) - 10, max(ys) + 10) + ax = prepare_plot(table, ax) + draw_text(table, ax) - for te in table._textedges: - ax.plot([te.x, te.x], [te.y0, te.y1]) + if table.flavor == "network": + for network in table.parse_details["network_searches"]: + most_connected_tl = network.most_connected_textline() - img = table.get_pdf_image() - ax.imshow(img, extent=(0, table.pdf_size[0], 0, table.pdf_size[1])) - return fig + ax.add_patch( + patches.Rectangle( + (most_connected_tl.x0, most_connected_tl.y0), + most_connected_tl.x1 - most_connected_tl.x0, + most_connected_tl.y1 - most_connected_tl.y0, + color="red", + alpha=0.5 + ) + ) + for tl in sorted( + network._textline_to_alignments.keys(), + key=lambda textline: (-textline.y0, textline.x0), + ): + alignments = network._textline_to_alignments[tl] + coords = get_textline_coords(tl) + alignment_id_h, tls_h = alignments.max_v() + alignment_id_v, tls_v = alignments.max_h() + xs = list(map(lambda tl: tl.x0, tls_v)) + ys = list(map(lambda tl: tl.y1, tls_h)) + top_h = max(ys) + ax.text( + coords[alignment_id_h], + top_h + 5, + "{max_h_count}".format(max_h_count=len(tls_h)), + verticalalignment="bottom", + horizontalalignment="center", + fontsize=8, + color="green" + ) + ax.plot( + [coords[alignment_id_h]] * len(ys), ys, + color="green", + linestyle="solid", + linewidth=1, + marker="o", + markersize=3 + ) + + left_v = min(map(lambda tl: tl.x0, tls_v)) + ax.text( + left_v - 5, + coords[alignment_id_v], + "{max_v_count}".format(max_v_count=len(tls_v)), + verticalalignment="center", + horizontalalignment="right", + fontsize=8, + color="blue" + ) + ax.plot( + xs, [coords[alignment_id_v]] * len(xs), + color="blue", + linestyle="solid", + linewidth=1, + marker="o", + markersize=3 + ) + else: + for te in table._textedges: + ax.plot([te.coord, te.coord], [te.y0, te.y1]) + return ax.get_figure() - def joint(self, table): + @staticmethod + def joint(table, ax=None): """Generates a plot for all line intersections present on the PDF page. Parameters ---------- table : camelot.core.Table + ax : matplotlib.axes.Axes (optional) Returns ------- fig : matplotlib.fig.Figure """ - img = table.get_pdf_image() - table_bbox = table._bbox_unscaled - fig = plt.figure() - ax = fig.add_subplot(111, aspect="equal") + ax = prepare_plot(table, ax) x_coord = [] y_coord = [] - for k in table_bbox.keys(): - for coord in table_bbox[k]: - x_coord.append(coord[0]) - y_coord.append(coord[1]) + for coord in table.parse["joints"]: + x_coord.append(coord[0]) + y_coord.append(coord[1]) ax.plot(x_coord, y_coord, "ro") - ax.imshow(img) - return fig + return ax.get_figure() - def line(self, table): + @staticmethod + def line(table, ax=None): """Generates a plot for all line segments present on the PDF page. Parameters ---------- table : camelot.core.Table + ax : matplotlib.axes.Axes (optional) Returns ------- fig : matplotlib.fig.Figure """ - fig = plt.figure() - ax = fig.add_subplot(111, aspect="equal") + ax = prepare_plot(table, ax) vertical, horizontal = table._segments for v in vertical: ax.plot([v[0], v[2]], [v[1], v[3]]) for h in horizontal: ax.plot([h[0], h[2]], [h[1], h[3]]) + return ax.get_figure() + + @staticmethod + def network_table_search(table, ax=None): + """Generates a plot illustrating the steps of the network table search. + Parameters + ---------- + table : camelot.core.Table + ax : matplotlib.axes.Axes (optional) + Returns + ------- + fig : matplotlib.fig.Figure + """ + ax = prepare_plot(table, ax) + if table.parse_details is None: + return ax.get_figure() + parse_details = table.parse_details + for box_id, bbox_search in enumerate(parse_details["bbox_searches"]): + max_h_gap = bbox_search["max_h_gap"] + max_v_gap = bbox_search["max_v_gap"] + iterations = bbox_search["iterations"] + for iteration, bbox in enumerate(iterations): + final = iteration == len(iterations) - 1 + + draw_labeled_bbox( + ax, bbox, + "t{box_id}/i{iteration}".format( + box_id=box_id, + iteration=iteration + ), + color="red", + linewidth=5 if final else 2, + fontsize=12 if final else 8, + label_pos="bottom,left" + ) + + ax.add_patch( + patches.Rectangle( + (bbox[0] - max_h_gap, bbox[1] - max_v_gap), + bbox[2] - bbox[0] + 2 * max_h_gap, + bbox[3] - bbox[1] + 2 * max_v_gap, + color="orange", + fill=False + ) + ) + + for box_id, col_search in enumerate(parse_details["col_searches"]): + draw_labeled_bbox( + ax, col_search["bbox_full"], + "box body + header #{box_id}".format( + box_id=box_id + ), + color="red", + linewidth=4, + label_pos="top,left" + ) + draw_labeled_bbox( + ax, col_search["bbox_body"], + "box body #{box_id}".format( + box_id=box_id + ), + color="orange", + linewidth=2, + label_pos="bottom,left" + ) + for col_anchor in col_search["cols_anchors"]: + # Display a green line at the col boundary line throughout the + # table bbox. + ax.plot( + [col_anchor, col_anchor], + [ + col_search["bbox_body"][1] - 10, + col_search["bbox_body"][3] + 10, + ], + color="green" + ) - img = table.get_pdf_image() - ax.imshow(img, extent=(0, table.pdf_size[0], 0, table.pdf_size[1])) - return fig + return ax.get_figure() From 4856cd2bc5c6087e7bf454db19847bb77690b011 Mon Sep 17 00:00:00 2001 From: bosd Date: Mon, 23 Sep 2024 21:23:08 +0200 Subject: [PATCH 24/36] Update 'test_unknown_flavor' to support new parsers --- tests/test_errors.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_errors.py b/tests/test_errors.py index 7aff150..06b7d64 100644 --- a/tests/test_errors.py +++ b/tests/test_errors.py @@ -9,7 +9,7 @@ def test_unknown_flavor(foo_pdf): - message = "Unknown flavor specified." " Use either 'lattice' or 'stream'" + message = "Unknown flavor specified." " Use either 'lattice', 'stream', 'network' or 'hybrid'" with pytest.raises(NotImplementedError, match=message): camelot.read_pdf(foo_pdf, flavor="chocolate") From 44b8d11148f6bee4a1e0c4279ff37b9922063b9f Mon Sep 17 00:00:00 2001 From: bosd Date: Mon, 23 Sep 2024 21:51:42 +0200 Subject: [PATCH 25/36] data.py - attempt fixup vertical_header test, did not work --- tests/data.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/data.py b/tests/data.py index a871a22..be856e5 100644 --- a/tests/data.py +++ b/tests/data.py @@ -2025,6 +2025,11 @@ # Compared to network, hybrid detects additional sparse columns data_hybrid_vertical_headers = [ + [ + "", "", "", "", "", "STATE", "", "", "", "CONGRESSIONAL", "", "", + "", "", "LEGISLATIVE", "", "", "COUNTY", "", "COUNTY", "", "", + "County Commissioner", "", "", "", "" + ], [ "", "", From cd35706648d5a3c9e82e75496f5bbd31835795e3 Mon Sep 17 00:00:00 2001 From: bosd Date: Wed, 25 Sep 2024 22:05:03 +0200 Subject: [PATCH 26/36] add test_cli network parser --- tests/test_cli.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/test_cli.py b/tests/test_cli.py index f15c89d..79dc0f1 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -118,6 +118,24 @@ def test_cli_hybrid(testdir): assert format_error in result.output +def test_cli_network(testdir): + with TemporaryDirectory() as tempdir: + infile = os.path.join(testdir, "budget.pdf") + outfile = os.path.join(tempdir, "budget.csv") + runner = CliRunner() + result = runner.invoke( + cli, ["--format", "csv", "--output", outfile, "network", infile] + ) + assert result.exit_code == 0 + assert result.output == "Found 1 tables\n" + result = runner.invoke(cli, ["--format", "csv", "network", infile]) + output_error = "Error: Please specify output file path using --output" + assert output_error in result.output + result = runner.invoke(cli, ["--output", outfile, "network", infile]) + format_error = "Please specify output file format using --format" + assert format_error in result.output + + def test_cli_password(testdir): with TemporaryDirectory() as tempdir: infile = os.path.join(testdir, "health_protected.pdf") From b2af27557f3f8d5e2d25ca651f247779c823e0c0 Mon Sep 17 00:00:00 2001 From: bosd Date: Sat, 28 Sep 2024 10:18:36 +0200 Subject: [PATCH 27/36] multiple table support --- tests/data.py | 81 ++++++++++++++++++ tests/files/multiple_tables.pdf | Bin 0 -> 62330 bytes tests/test_network.py | 143 ++++++++++++++++++++++++++++++++ 3 files changed, 224 insertions(+) create mode 100644 tests/files/multiple_tables.pdf create mode 100644 tests/test_network.py diff --git a/tests/data.py b/tests/data.py index be856e5..447f330 100644 --- a/tests/data.py +++ b/tests/data.py @@ -815,6 +815,10 @@ ], ] +# The streaming algorithm incorrectly includes a header in the result. +# Trimming the table for the test of network, which doesn't include it. +data_network_table_rotated = data_stream_table_rotated[1:] + data_stream_two_tables_1 = [ [ "Program. Represents arrests reported (not charged) by 12,910 agencies with a total population of 247,526,916 as estimated", @@ -1277,6 +1281,10 @@ ], ] +# The streaming algorithm incorrectly includes a header and a footer. +# Trimming the table for the test of network, which doesn't include it. +data_network_two_tables_1 = data_stream_two_tables_1[3:-1] + data_stream_two_tables_2 = [ ["Table 325. Arrests by Race: 2009", "", "", "", "", ""], @@ -1558,6 +1566,11 @@ ["1 Except forcible rape and prostitution.", "", "", "", "", ""], ] + +# The streaming algorithm incorrectly includes a header and a footer. +# Trimming the table for the test of network, which doesn't include it. +data_network_two_tables_2 = data_stream_two_tables_2[3:-1] + data_network_two_tables_b_1 = [ ["1", "Ghfhbdhj", "1", "Hgfdhgjsdhjdsf"], ["Vgvhgh", "Hj", "Hj", "Hj"], @@ -2540,6 +2553,9 @@ ["(each day of the payroll period)", ""], ] +# Network doesn't recognize the footer as belonging to the table. +data_network_table_regions = data_stream_table_areas[:-1] + data_stream_columns = [ [ "Clave", @@ -3027,6 +3043,14 @@ ] +# The stream algorithm excludes the string "Alphabetic Listing by type" +data_network_split_text = [] +data_network_split_text.extend(data_stream_split_text) +data_network_split_text[0] = [ + 'FEB', 'RUAR', 'Y 2014 M27 (BUS)', '', + 'ALPHABETIC LISTING BY T', 'YPE', '', '', '', 'ABLPDM27' +] + data_stream_flag_size = [ [ "States", @@ -3246,6 +3270,57 @@ ], ] + +# Network adds more content into the header. +data_network_flag_size = [ + ['', '', '', '', '(As at end-March)', '', '', '', '', '', ''], + ['', '', '', '', '', '', '', '', '', '', '(` Billion)'] +] +data_network_flag_size.extend(data_stream_flag_size) + +data_network_strip_text = [ + ["VinsauVerre", ""], + ["LesBlancs", "12.5CL"], + ["A.O.PCôtesduRhône", ""], + ["DomainedelaGuicharde«Autourdelachapelle»2016", "8€"], + ["A.O.PVacqueyras", ""], + ["DomainedeMontvac«Melodine»2016", "10€"], + ["A.O.PChâteauneufduPape", ""], + ["DomainedeBeaurenard2017", "13€"], + ["A.O.PCôteauxduLanguedoc", ""], + ["VillaTempora«Untempspourelle»2014", "9€"], + ["A.O.PCôtesdeProvence", ""], + ["ChâteauGrandBoise2017", "9€"], + ["LesRosés", "125CL"], + ["A.O.PCôtesduRhône", ""], + ["DomainedelaFlorane«AfleurdePampre»2016", "8€"], + ["FamilleCoulon(DomaineBeaurenard)Biotifulfox2017", "8€"], + ["A.O.PVacqueyras", ""], + ["DomainedeMontvac2017", "9€"], + ["A.O.PLanguedoc", ""], + ["DomainedeJoncas«Nébla»2015", "8€"], + ["VillaTempora«L’arroseurarrosé»2015", "9€"], + ["A.O.PCôtesdeProvence", ""], + ["ChâteauGrandBoise«SainteVictoire»2017", "9€"], + ["ChâteauLéoube2016", "10€"], + ["LesRouges", "12CL"], + ["A.O.PCôtesduRhône", ""], + ["DomainedeDionysos«LaCigalette»", "8€"], + ["ChâteauSaintEstèved’Uchaux«GrandeRéserve»2014", "9€"], + ["DomainedelaGuicharde«CuvéeMassillan»2016", "9€"], + ["DomainedelaFlorane«TerrePourpre»2014", "10€"], + ["L’OratoireStMartin«RéservedesSeigneurs»2015", "11€"], + ["A.O.PSaintJoseph", ""], + ["DomaineMonierPerréol«Châtelet»2015", "13€"], + ["A.O.PChâteauneufduPape", ""], + ["DomainedeBeaurenard2011", "15€"], + ["A.O.PCornas", ""], + ["DomaineLionnet«TerreBrûlée»2012", "15€"], +] + +# Stream only detects part of the table + + data_stream_strip_text = [ ["VinsauVerre", ""], ["LesBlancs", "12.5CL"], @@ -3309,6 +3384,12 @@ ["period.", ""], ] +# The stream algorithm ends up including a footer, which network correctly +# skips. + +data_network_edge_tol = data_stream_edge_tol[:-3] + + data_lattice = [ [ "Cycle \nName", diff --git a/tests/files/multiple_tables.pdf b/tests/files/multiple_tables.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0b9d854badde4ff4ddfd1f7f22ed67d41f07137d GIT binary patch literal 62330 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 Date: Sat, 28 Sep 2024 18:08:28 +0200 Subject: [PATCH 28/36] Fixup network_table_search --- camelot/parsers/network.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/camelot/parsers/network.py b/camelot/parsers/network.py index 59432d3..e9d43be 100644 --- a/camelot/parsers/network.py +++ b/camelot/parsers/network.py @@ -605,7 +605,8 @@ def _generate_table_bbox(self): text_network.remove_unconnected_edges() gaps_hv = text_network.compute_plausible_gaps() if gaps_hv is None: - return None + break + # return None # edge_tol instructions override the calculated vertical gap edge_tol_hv = ( gaps_hv[0], From 2e073fd5ad7df6ebeea9861379773a5c39c8c276 Mon Sep 17 00:00:00 2001 From: bosd Date: Sat, 28 Sep 2024 19:12:47 +0200 Subject: [PATCH 29/36] leftovers in core.py should fix network parser --- camelot/core.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/camelot/core.py b/camelot/core.py index 9aafd91..69469c8 100644 --- a/camelot/core.py +++ b/camelot/core.py @@ -436,7 +436,9 @@ def __init__(self, cols, rows): self.page = None self.flavor = None # Flavor of the parser that generated the table self.pdf_size = None # Dimensions of the original PDF page - self.debug_info = None # Field holding debug data + self._bbox = None # Bounding box in original document + self.parse = None # Parse information + self.parse_details = None # Field holding debug data self._image = None self._image_path = None # Temporary file to hold an image of the pdf From 915bd2bd9131739900c07410f6a298aaeea5dd2c Mon Sep 17 00:00:00 2001 From: bosd Date: Sat, 28 Sep 2024 20:24:53 +0200 Subject: [PATCH 30/36] imp network debug plot --- camelot/plotting.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/camelot/plotting.py b/camelot/plotting.py index 046098a..2c1433c 100644 --- a/camelot/plotting.py +++ b/camelot/plotting.py @@ -322,7 +322,10 @@ def textedge(table, ax=None): linestyle="solid", linewidth=1, marker="o", - markersize=3 + markeredgecolor="green", + fillstyle=None, + markersize=4, + alpha=0.8 ) left_v = min(map(lambda tl: tl.x0, tls_v)) @@ -341,7 +344,10 @@ def textedge(table, ax=None): linestyle="solid", linewidth=1, marker="o", - markersize=3 + markeredgecolor="blue", + fillstyle="full", + markersize=3, + alpha=0.8 ) else: for te in table._textedges: @@ -425,7 +431,7 @@ def network_table_search(table, ax=None): ), color="red", linewidth=5 if final else 2, - fontsize=12 if final else 8, + fontsize=14 if final else 8, label_pos="bottom,left" ) @@ -435,6 +441,7 @@ def network_table_search(table, ax=None): bbox[2] - bbox[0] + 2 * max_h_gap, bbox[3] - bbox[1] + 2 * max_v_gap, color="orange", + linestyle="dotted", fill=False ) ) @@ -454,9 +461,9 @@ def network_table_search(table, ax=None): "box body #{box_id}".format( box_id=box_id ), - color="orange", + color="cyan", linewidth=2, - label_pos="bottom,left" + label_pos="bottom,right" ) for col_anchor in col_search["cols_anchors"]: # Display a green line at the col boundary line throughout the From bd6ef52ed913a176c6e26b1bf90485b02e2b2dbf Mon Sep 17 00:00:00 2001 From: bosd Date: Sat, 28 Sep 2024 21:45:32 +0200 Subject: [PATCH 31/36] imp network table search green line --- camelot/plotting.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/camelot/plotting.py b/camelot/plotting.py index 2c1433c..b2c2775 100644 --- a/camelot/plotting.py +++ b/camelot/plotting.py @@ -471,8 +471,8 @@ def network_table_search(table, ax=None): ax.plot( [col_anchor, col_anchor], [ - col_search["bbox_body"][1] - 10, - col_search["bbox_body"][3] + 10, + col_search["bbox_body"][1], + col_search["bbox_body"][3], ], color="green" ) From 228f7b30187d1c300653c1674f18c9ec59b67fff Mon Sep 17 00:00:00 2001 From: bosd Date: Sun, 29 Sep 2024 10:26:16 +0200 Subject: [PATCH 32/36] intermediate tests hybrid --- tests/data.py | 159 ++++++++++++++++++++++++++++++++++++++++++- tests/test_hybrid.py | 52 ++++++++++---- 2 files changed, 196 insertions(+), 15 deletions(-) diff --git a/tests/data.py b/tests/data.py index 447f330..3f3f135 100644 --- a/tests/data.py +++ b/tests/data.py @@ -1,6 +1,10 @@ # noqa -data_stream = [ +data_hybrid = [ + [ + "", "Table: 5 Public Health Outlay 2012-13 (Budget" + " Estimates) (Rs. in 000)", "", "", "", "", "", "" + ], ["States-A", "Revenue", "", "Capital", "", "Total", "Others(1)", "Total"], ["", "", "", "", "", "Revenue &", "", ""], ["", "Medical &", "Family", "Medical &", "Family", "", "", ""], @@ -221,6 +225,10 @@ ], ] +# Hybrid includes the header because the boundaries of the table include it, +# but stream/network don't include it. +data_stream = data_hybrid[1:] + data_stream_table_rotated = [ [ "Table 21 Current use of contraception by background characteristics\u2014Continued", @@ -815,6 +823,109 @@ ], ] + +data_hybrid_table_rotated_footer = [ + [ + "", + " Note: If more than one method is used, only th... ", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + ], + [ + "not shown separately. ", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + ], + [ + "na = Not available ", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + ], + [ + "", + "ns = Not shown; see table 2b, footnote 1 ", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + ], + [ + "( ) Based on 25-49 unweighted cases. ", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + ] +] + +# The hybrid parser catches some additional text from the footer +data_hybrid_table_rotated = [] +data_hybrid_table_rotated.extend(data_stream_table_rotated) + # The streaming algorithm incorrectly includes a header in the result. # Trimming the table for the test of network, which doesn't include it. data_network_table_rotated = data_stream_table_rotated[1:] @@ -3641,6 +3752,52 @@ ["Total", "", "47", "92", "11.81", "22,455", "19,584", "10,644"], ] +data_hybrid_process_background = [ + [ + "State", + "Date", + "Halt", + "Halt", + "Persons", + "Persons", + "Persons", + "Persons", + ], + ["", "", "stations", "days", "directly", "trained", "counseled", "tested"], + ["", "", "", "", "reached", "", "", "for HIV"], + ["", "", "", "", "(in lakh)", "", "", ""], + ["Delhi", "1.12.2009", "8", "17", "1.29", "3,665", "2,409", "1,000"], + ["Rajasthan", "2.12.2009 to", "", "", "", "", "", ""], + ["", "19.12.2009", "", "", "", "", "", ""], + ["Gujarat", "20.12.2009 to", "6", "13", "6.03", "3,810", "2,317", "1,453"], + ["", "3.1.2010", "", "", "", "", "", ""], + [ + "Maharashtra", + "4.01.2010 to", + "13", + "26", + "1.27", + "5,680", + "9,027", + "4,153", + ], + ["", "1.2.2010", "", "", "", "", "", ""], + [ + "Karnataka", + "2.2.2010 to", + "11", + "19", + "1.80", + "5,741", + "3,658", + "3,183", + ], + ["", "22.2.2010", "", "", "", "", "", ""], + ["Kerala", "23.2.2010 to", "9", "17", "1.42", "3,559", "2,173", "855"], + ["", "11.3.2010", "", "", "", "", "", ""], + ["Total", "", "47", "92", "11.81", "22,455", "19,584", "10,644"], +] + data_lattice_copy_text = [ ["Plan Type", "County", "Plan Name", "Totals"], ["GMC", "Sacramento", "Anthem Blue Cross", "164,380"], diff --git a/tests/test_hybrid.py b/tests/test_hybrid.py index 64021af..0dad72d 100644 --- a/tests/test_hybrid.py +++ b/tests/test_hybrid.py @@ -9,7 +9,7 @@ def test_hybrid(testdir): - df = pd.DataFrame(data_stream) + df = pd.DataFrame(data_hybrid) filename = os.path.join(testdir, "health.pdf") tables = camelot.read_pdf(filename, flavor="hybrid") @@ -17,20 +17,25 @@ def test_hybrid(testdir): def test_hybrid_table_rotated(testdir): - df = pd.DataFrame(data_stream_table_rotated) + df = pd.DataFrame(data_network_table_rotated) filename = os.path.join(testdir, "clockwise_table_2.pdf") tables = camelot.read_pdf(filename, flavor="hybrid") - assert_frame_equal(df, tables[0].df) + # tables[0].df[:-5] + print(tables[0].df[:-5]) + print("\ntest\n") + print(df) + assert_frame_equal(df, tables[0].df[:-5]) - filename = os.path.join(testdir, "anticlockwise_table_2.pdf") - tables = camelot.read_pdf(filename, flavor="hybrid") - assert_frame_equal(df, tables[0].df) + # filename = os.path.join(testdir, "anticlockwise_table_2.pdf") + # tables = camelot.read_pdf(filename, flavor="hybrid") + # tables = tables[:-3] + # assert_frame_equal(df, tables[0].df) def test_hybrid_two_tables(testdir): - df1 = pd.DataFrame(data_stream_two_tables_1) - df2 = pd.DataFrame(data_stream_two_tables_2) + df1 = pd.DataFrame(data_network_two_tables_1) + df2 = pd.DataFrame(data_network_two_tables_2) filename = os.path.join(testdir, "tabula/12s0324.pdf") tables = camelot.read_pdf(filename, flavor="hybrid") @@ -39,13 +44,32 @@ def test_hybrid_two_tables(testdir): assert df1.equals(tables[0].df) assert df2.equals(tables[1].df) +def test_hybrid_vertical_header(testdir): + """Tests a complex table with a vertically text header. + """ + df = pd.DataFrame(data_hybrid_vertical_headers) + + filename = os.path.join(testdir, "vertical_header.pdf") + tables = camelot.read_pdf(filename, flavor="hybrid") + assert len(tables) == 1 + assert_frame_equal(df, tables[0].df) + + +def test_hybrid_process_background(testdir): + df = pd.DataFrame(data_hybrid_process_background) + + filename = os.path.join(testdir, "background_lines_1.pdf") + tables = camelot.read_pdf( + filename, flavor="hybrid", process_background=True) + assert_frame_equal(df, tables[1].df) + def test_hybrid_table_regions(testdir): - df = pd.DataFrame(data_stream_table_areas) + df = pd.DataFrame(data_network_table_regions) filename = os.path.join(testdir, "tabula/us-007.pdf") tables = camelot.read_pdf( - filename, flavor="hybrid", table_regions=["320,460,573,335"] + filename, flavor="hybrid", table_regions=["320,335,573,505"] ) assert_frame_equal(df, tables[0].df) @@ -71,7 +95,7 @@ def test_hybrid_columns(testdir): def test_hybrid_split_text(testdir): - df = pd.DataFrame(data_stream_split_text) + df = pd.DataFrame(data_network_split_text) filename = os.path.join(testdir, "tabula/m27.pdf") tables = camelot.read_pdf( @@ -84,7 +108,7 @@ def test_hybrid_split_text(testdir): def test_hybrid_flag_size(testdir): - df = pd.DataFrame(data_stream_flag_size) + df = pd.DataFrame(data_network_flag_size) filename = os.path.join(testdir, "superscript.pdf") tables = camelot.read_pdf(filename, flavor="hybrid", flag_size=True) @@ -92,7 +116,7 @@ def test_hybrid_flag_size(testdir): def test_hybrid_strip_text(testdir): - df = pd.DataFrame(data_stream_strip_text) + df = pd.DataFrame(data_network_strip_text) filename = os.path.join(testdir, "detect_vertical_false.pdf") tables = camelot.read_pdf(filename, flavor="hybrid", strip_text=" ,\n") @@ -100,7 +124,7 @@ def test_hybrid_strip_text(testdir): def test_hybrid_edge_tol(testdir): - df = pd.DataFrame(data_stream_edge_tol) + df = pd.DataFrame(data_network_edge_tol) filename = os.path.join(testdir, "edge_tol.pdf") tables = camelot.read_pdf(filename, flavor="hybrid", edge_tol=500) From 9c8ee92364a63918ec36be3420177228ea205570 Mon Sep 17 00:00:00 2001 From: bosd Date: Sun, 29 Sep 2024 11:25:52 +0200 Subject: [PATCH 33/36] IMP utils to support kwargs --- camelot/utils.py | 57 ++++++++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 21 deletions(-) diff --git a/camelot/utils.py b/camelot/utils.py index 760d5a7..d6d6e5c 100644 --- a/camelot/utils.py +++ b/camelot/utils.py @@ -96,8 +96,22 @@ def download_url(url): return filepath -stream_kwargs = ["columns", "edge_tol", "row_tol", "column_tol"] -lattice_kwargs = [ +common_kwargs = [ + "flag_size", + "margins", + "split_text", + "strip_text", + "table_areas", + "table_regions", + "backend" +] +text_kwargs = common_kwargs + [ + "columns", + "edge_tol", + "row_tol", + "column_tol" +] +lattice_kwargs = common_kwargs + [ "process_background", "line_scale", "copy_text", @@ -109,34 +123,35 @@ def download_url(url): "iterations", "resolution", ] +flavor_to_kwargs = { + "stream": text_kwargs, + "network": text_kwargs, + "lattice": lattice_kwargs, + "hybrid": text_kwargs + lattice_kwargs, +} def validate_input(kwargs, flavor="lattice"): - def check_intersection(parser_kwargs, input_kwargs): - isec = set(parser_kwargs).intersection(set(input_kwargs.keys())) - if isec: - raise ValueError( - f"{','.join(sorted(isec))} cannot be used with flavor='{flavor}'" + parser_kwargs = flavor_to_kwargs[flavor] + # s.difference(t): new set with elements in s but not in t + isec = set(kwargs.keys()).difference(set(parser_kwargs)) + if isec: + raise ValueError( + "{} cannot be used with flavor='{}'".format( + ",".join(sorted(isec)), flavor ) - - if flavor == "lattice": - check_intersection(stream_kwargs, kwargs) - else: - check_intersection(lattice_kwargs, kwargs) + ) def remove_extra(kwargs, flavor="lattice"): - if flavor == "lattice": - for key in kwargs.keys(): - if key in stream_kwargs: - kwargs.pop(key) - else: - for key in kwargs.keys(): - if key in lattice_kwargs: - kwargs.pop(key) + parser_kwargs = flavor_to_kwargs[flavor] + # Avoid "dictionary changed size during iteration" + kwargs_keys = list(kwargs.keys()) + for key in kwargs_keys: + if key not in parser_kwargs: + kwargs.pop(key) return kwargs - # https://stackoverflow.com/a/22726782 # and https://stackoverflow.com/questions/10965479 class TemporaryDirectory: From 99207a14f7c5164bd692c705d9794806150f928f Mon Sep 17 00:00:00 2001 From: bosd Date: Sun, 29 Sep 2024 12:44:22 +0200 Subject: [PATCH 34/36] Fixup Hybrid table rotated test --- tests/data.py | 610 ++++++++++++++++++++++++++++++++++++++++++- tests/test_hybrid.py | 17 +- 2 files changed, 606 insertions(+), 21 deletions(-) diff --git a/tests/data.py b/tests/data.py index 3f3f135..69c468e 100644 --- a/tests/data.py +++ b/tests/data.py @@ -824,10 +824,602 @@ ] -data_hybrid_table_rotated_footer = [ +# The hybrid parser catches some additional text from the footer +data_hybrid_table_rotated = [ + [ + "", + "Table 21 Current use of contraception by background characteristics—Continued", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + ], + [ + "", + "", + "", + "", + "", + "Modern method", + "", + "", + "", + "", + "", + "", + "Traditional method", + "", + "", + "", + "", + ], + [ + "", + "", + "Any", + "", + "", + "", + "", + "", + "", + "Other", + "Any", + "", + "", + "", + "Not", + "", + "Number", + ], + [ + "", + "Any", + "modern", + "Female", + "Male", + "", + "", + "", + "Condom/", + "modern", + "traditional", + "", + "With-", + "Folk", + "currently", + "", + "of", + ], + [ + "Background characteristic", + "method", + "method", + "sterilization", + "sterilization", + "Pill", + "IUD", + "Injectables", + "Nirodh", + "method", + "method", + "Rhythm", + "drawal", + "method", + "using", + "Total", + "women", + ], + ["Caste/tribe", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], + [ + "Scheduled caste", + "74.8", + "55.8", + "42.9", + "0.9", + "9.7", + "0.0", + "0.2", + "2.2", + "0.0", + "19.0", + "11.2", + "7.4", + "0.4", + "25.2", + "100.0", + "1,363", + ], + [ + "Scheduled tribe", + "59.3", + "39.0", + "26.8", + "0.6", + "6.4", + "0.6", + "1.2", + "3.5", + "0.0", + "20.3", + "10.4", + "5.8", + "4.1", + "40.7", + "100.0", + "256", + ], + [ + "Other backward class", + "71.4", + "51.1", + "34.9", + "0.0", + "8.6", + "1.4", + "0.0", + "6.2", + "0.0", + "20.4", + "12.6", + "7.8", + "0.0", + "28.6", + "100.0", + "211", + ], + [ + "Other", + "71.1", + "48.8", + "28.2", + "0.8", + "13.3", + "0.9", + "0.3", + "5.2", + "0.1", + "22.3", + "12.9", + "9.1", + "0.3", + "28.9", + "100.0", + "3,319", + ], + ["Wealth index", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], + [ + "Lowest", + "64.5", + "48.6", + "34.3", + "0.5", + "10.5", + "0.6", + "0.7", + "2.0", + "0.0", + "15.9", + "9.9", + "4.6", + "1.4", + "35.5", + "100.0", + "1,258", + ], + [ + "Second", + "68.5", + "50.4", + "36.2", + "1.1", + "11.4", + "0.5", + "0.1", + "1.1", + "0.0", + "18.1", + "11.2", + "6.7", + "0.2", + "31.5", + "100.0", + "1,317", + ], + [ + "Middle", + "75.5", + "52.8", + "33.6", + "0.6", + "14.2", + "0.4", + "0.5", + "3.4", + "0.1", + "22.7", + "13.4", + "8.9", + "0.4", + "24.5", + "100.0", + "1,018", + ], + [ + "Fourth", + "73.9", + "52.3", + "32.0", + "0.5", + "12.5", + "0.6", + "0.2", + "6.3", + "0.2", + "21.6", + "11.5", + "9.9", + "0.2", + "26.1", + "100.0", + "908", + ], + [ + "Highest", + "78.3", + "44.4", + "19.5", + "1.0", + "9.7", + "1.4", + "0.0", + "12.7", + "0.0", + "33.8", + "18.2", + "15.6", + "0.0", + "21.7", + "100.0", + "733", + ], + [ + "Number of living children", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + ], + [ + "No children", + "25.1", + "7.6", + "0.3", + "0.5", + "2.0", + "0.0", + "0.0", + "4.8", + "0.0", + "17.5", + "9.0", + "8.5", + "0.0", + "74.9", + "100.0", + "563", + ], + [ + "1 child", + "66.5", + "32.1", + "3.7", + "0.7", + "20.1", + "0.7", + "0.1", + "6.9", + "0.0", + "34.3", + "18.9", + "15.2", + "0.3", + "33.5", + "100.0", + "1,190", + ], + [ + "1 son", + "66.8", + "33.2", + "4.1", + "0.7", + "21.1", + "0.5", + "0.3", + "6.6", + "0.0", + "33.5", + "21.2", + "12.3", + "0.0", + "33.2", + "100.0", + "672", + ], + [ + "No sons", + "66.1", + "30.7", + "3.1", + "0.6", + "18.8", + "0.8", + "0.0", + "7.3", + "0.0", + "35.4", + "15.8", + "19.0", + "0.6", + "33.9", + "100.0", + "517", + ], + [ + "2 children", + "81.6", + "60.5", + "41.8", + "0.9", + "11.6", + "0.8", + "0.3", + "4.8", + "0.2", + "21.1", + "12.2", + "8.3", + "0.6", + "18.4", + "100.0", + "1,576", + ], + [ + "1 or more sons", + "83.7", + "64.2", + "46.4", + "0.9", + "10.8", + "0.8", + "0.4", + "4.8", + "0.1", + "19.5", + "11.1", + "7.6", + "0.7", + "16.3", + "100.0", + "1,268", + ], + [ + "No sons", + "73.2", + "45.5", + "23.2", + "1.0", + "15.1", + "0.9", + "0.0", + "4.8", + "0.5", + "27.7", + "16.8", + "11.0", + "0.0", + "26.8", + "100.0", + "308", + ], + [ + "3 children", + "83.9", + "71.2", + "57.7", + "0.8", + "9.8", + "0.6", + "0.5", + "1.8", + "0.0", + "12.7", + "8.7", + "3.3", + "0.8", + "16.1", + "100.0", + "961", + ], + [ + "1 or more sons", + "85.0", + "73.2", + "60.3", + "0.9", + "9.4", + "0.5", + "0.5", + "1.6", + "0.0", + "11.8", + "8.1", + "3.0", + "0.7", + "15.0", + "100.0", + "860", + ], + [ + "No sons", + "74.7", + "53.8", + "35.3", + "0.0", + "13.7", + "1.6", + "0.0", + "3.2", + "0.0", + "20.9", + "13.4", + "6.1", + "1.5", + "25.3", + "100.0", + "101", + ], + [ + "4+ children", + "74.3", + "58.1", + "45.1", + "0.6", + "8.7", + "0.6", + "0.7", + "2.4", + "0.0", + "16.1", + "9.9", + "5.4", + "0.8", + "25.7", + "100.0", + "944", + ], + [ + "1 or more sons", + "73.9", + "58.2", + "46.0", + "0.7", + "8.3", + "0.7", + "0.7", + "1.9", + "0.0", + "15.7", + "9.4", + "5.5", + "0.8", + "26.1", + "100.0", + "901", + ], + [ + "No sons", + "(82.1)", + "(57.3)", + "(25.6)", + "(0.0)", + "(17.8)", + "(0.0)", + "(0.0)", + "(13.9)", + "(0.0)", + "(24.8)", + "(21.3)", + "(3.5)", + "(0.0)", + "(17.9)", + "100.0", + "43", + ], + [ + "Total", + "71.2", + "49.9", + "32.2", + "0.7", + "11.7", + "0.6", + "0.3", + "4.3", + "0.1", + "21.3", + "12.3", + "8.4", + "0.5", + "28.8", + "100.0", + "5,234", + ], + [ + "NFHS-2 (1998-99)", + "66.6", + "47.3", + "32.0", + "1.8", + "9.2", + "1.4", + "na", + "2.9", + "na", + "na", + "8.7", + "9.8", + "na", + "33.4", + "100.0", + "4,116", + ], + [ + "NFHS-1 (1992-93)", + "57.7", + "37.6", + "26.5", + "4.3", + "3.6", + "1.3", + "0.1", + "1.9", + "na", + "na", + "11.3", + "8.3", + "na", + "42.3", + "100.0", + "3,970", + ], [ "", - " Note: If more than one method is used, only th... ", + "Note: If more than one method is used, only the most effective method is considered in this tabulation. Total includes women for whom caste/tribe was not known or is missing, who are", "", "", "", @@ -845,7 +1437,7 @@ "", ], [ - "not shown separately. ", + "not shown separately.", "", "", "", @@ -864,7 +1456,7 @@ "", ], [ - "na = Not available ", + "na = Not available", "", "", "", @@ -884,7 +1476,7 @@ ], [ "", - "ns = Not shown; see table 2b, footnote 1 ", + "ns = Not shown; see table 2b, footnote 1", "", "", "", @@ -902,7 +1494,7 @@ "", ], [ - "( ) Based on 25-49 unweighted cases. ", + "( ) Based on 25-49 unweighted cases.", "", "", "", @@ -919,17 +1511,15 @@ "", "", "", - ] + ], ] -# The hybrid parser catches some additional text from the footer -data_hybrid_table_rotated = [] -data_hybrid_table_rotated.extend(data_stream_table_rotated) # The streaming algorithm incorrectly includes a header in the result. # Trimming the table for the test of network, which doesn't include it. data_network_table_rotated = data_stream_table_rotated[1:] + data_stream_two_tables_1 = [ [ "Program. Represents arrests reported (not charged) by 12,910 agencies with a total population of 247,526,916 as estimated", diff --git a/tests/test_hybrid.py b/tests/test_hybrid.py index 0dad72d..980f9c5 100644 --- a/tests/test_hybrid.py +++ b/tests/test_hybrid.py @@ -17,20 +17,15 @@ def test_hybrid(testdir): def test_hybrid_table_rotated(testdir): - df = pd.DataFrame(data_network_table_rotated) + df = pd.DataFrame(data_hybrid_table_rotated) filename = os.path.join(testdir, "clockwise_table_2.pdf") tables = camelot.read_pdf(filename, flavor="hybrid") - # tables[0].df[:-5] - print(tables[0].df[:-5]) - print("\ntest\n") - print(df) - assert_frame_equal(df, tables[0].df[:-5]) - - # filename = os.path.join(testdir, "anticlockwise_table_2.pdf") - # tables = camelot.read_pdf(filename, flavor="hybrid") - # tables = tables[:-3] - # assert_frame_equal(df, tables[0].df) + assert_frame_equal(df, tables[0].df) + + filename = os.path.join(testdir, "anticlockwise_table_2.pdf") + tables = camelot.read_pdf(filename, flavor="hybrid") + assert_frame_equal(df, tables[0].df) def test_hybrid_two_tables(testdir): From 1daa56e7a6fb9ec536464e8c9bb1d638263188a4 Mon Sep 17 00:00:00 2001 From: bosd Date: Sun, 29 Sep 2024 13:47:50 +0200 Subject: [PATCH 35/36] Unfinished attemt to fix cli plot lattice --- tests/test_cli.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_cli.py b/tests/test_cli.py index 79dc0f1..1cb05bb 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -254,6 +254,7 @@ def test_cli_quiet(testdir): def test_cli_lattice_plot_type(): with TemporaryDirectory() as tempdir: + outfile = os.path.join(tempdir, "lattice_contour.png") runner = CliRunner() - result = runner.invoke(cli, ["--plot_type", ""]) + result = runner.invoke(cli, ["--plot_type", "contour", "--output", outfile, "--format", "--format", "png"]) assert result.exit_code != 0, f"Output: {result.output}" From 91ccf3811050415d012a6441e9bb9505f4d5815d Mon Sep 17 00:00:00 2001 From: bosd Date: Sun, 29 Sep 2024 15:12:46 +0200 Subject: [PATCH 36/36] [IMP] Plotting tests --- tests/test_plotting.py | 57 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/tests/test_plotting.py b/tests/test_plotting.py index 7841896..d44d072 100644 --- a/tests/test_plotting.py +++ b/tests/test_plotting.py @@ -44,6 +44,63 @@ def test_stream_contour_plot(testdir): tables = camelot.read_pdf(filename, flavor="stream") return camelot.plot(tables[0], kind="contour") +@skip_on_windows +@pytest.mark.mpl_image_compare(baseline_dir="files/baseline_plots", remove_text=True) +def test_stream_grid_plot(testdir): + filename = os.path.join(testdir, "foo.pdf") + tables = camelot.read_pdf(filename, flavor="stream") + return camelot.plot(tables[0], kind="grid") + +@skip_on_windows +@pytest.mark.mpl_image_compare(baseline_dir="files/baseline_plots", remove_text=True) +def test_network_grid_plot(testdir): + filename = os.path.join(testdir, "foo.pdf") + tables = camelot.read_pdf(filename, flavor="network") + return camelot.plot(tables[0], kind="grid") + +@skip_on_windows +@pytest.mark.mpl_image_compare(baseline_dir="files/baseline_plots", remove_text=True) +def test_network_contour_plot(testdir): + filename = os.path.join(testdir, "tabula/12s0324.pdf") + tables = camelot.read_pdf(filename, flavor="network") + return camelot.plot(tables[0], kind="contour") + +@skip_on_windows +@pytest.mark.mpl_image_compare(baseline_dir="files/baseline_plots", remove_text=True) +def test_network_textedge_plot(testdir): + filename = os.path.join(testdir, "tabula/12s0324.pdf") + tables = camelot.read_pdf(filename, debug=True, flavor='network') + return camelot.plot(tables[0], kind="textedge") + + +@skip_on_windows +@pytest.mark.mpl_image_compare(baseline_dir="files/baseline_plots", remove_text=True) +def test_network_table_regions_textedge_plot(testdir): + filename = os.path.join(testdir, "tabula/us-007.pdf") + tables = camelot.read_pdf( + filename, debug=True, flavor="network", table_regions=["320,505,573,330"] + ) + return camelot.plot(tables[0], kind="textedge") + + +@skip_on_windows +@pytest.mark.mpl_image_compare(baseline_dir="files/baseline_plots", remove_text=True) +def test_network_table_areas_text_plot(testdir): + filename = os.path.join(testdir, "tabula/us-007.pdf") + tables = camelot.read_pdf( + filename, debug=True, flavor="network", table_areas=["320,500,573,335"] + ) + return camelot.plot(tables[0], kind="text") + +@skip_on_windows +@pytest.mark.mpl_image_compare(baseline_dir="files/baseline_plots", remove_text=True) +def test_network_table_search_plot(testdir): + filename = os.path.join(testdir, "tabula/us-007.pdf") + tables = camelot.read_pdf( + filename, debug=True, flavor="network" + ) + return camelot.plot(tables[0], kind="network_table_search") + @skip_pdftopng @pytest.mark.mpl_image_compare(baseline_dir="files/baseline_plots", remove_text=True)