From ee1cac3136da6a1901fcefa71d76ffe2cefe9b44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Wieiw=C3=B3rka?= Date: Sat, 8 Mar 2025 18:25:08 +0100 Subject: [PATCH 1/5] feat: Coverage --- polars_bio/__init__.py | 3 +- polars_bio/range_op.py | 61 ++++++++++++++++++- polars_bio/range_op_helpers.py | 4 ++ src/operation.rs | 22 +++++-- src/udtf.rs | 104 ++++++++++++++++++--------------- 5 files changed, 139 insertions(+), 55 deletions(-) diff --git a/polars_bio/__init__.py b/polars_bio/__init__.py index 4b172b3a..01d66d58 100644 --- a/polars_bio/__init__.py +++ b/polars_bio/__init__.py @@ -14,7 +14,7 @@ sql, ) from .polars_ext import PolarsRangesOperations as LazyFrame -from .range_op import FilterOp, count_overlaps, merge, nearest, overlap +from .range_op import FilterOp, count_overlaps, coverage, merge, nearest, overlap from .range_viz import visualize_intervals POLARS_BIO_MAX_THREADS = "datafusion.execution.target_partitions" @@ -26,6 +26,7 @@ "nearest", "merge", "count_overlaps", + "coverage", "ctx", "FilterOp", "visualize_intervals", diff --git a/polars_bio/range_op.py b/polars_bio/range_op.py index 48d123d4..49969954 100644 --- a/polars_bio/range_op.py +++ b/polars_bio/range_op.py @@ -127,7 +127,7 @@ def nearest( read_options: Union[ReadOptions, None] = None, ) -> Union[pl.LazyFrame, pl.DataFrame, pd.DataFrame]: """ - Find pairs of overlapping genomic intervals. + Find pairs of closest genomic intervals. Bioframe inspired API. Parameters: @@ -173,6 +173,65 @@ def nearest( return range_operation(df1, df2, range_options, output_type, ctx, read_options) +def coverage( + df1: Union[str, pl.DataFrame, pl.LazyFrame, pd.DataFrame], + df2: Union[str, pl.DataFrame, pl.LazyFrame, pd.DataFrame], + overlap_filter: FilterOp = FilterOp.Strict, + suffixes: tuple[str, str] = ("_1", "_2"), + on_cols: Union[list[str], None] = None, + cols1: Union[list[str], None] = ["chrom", "start", "end"], + cols2: Union[list[str], None] = ["chrom", "start", "end"], + output_type: str = "polars.LazyFrame", + streaming: bool = False, + read_options: Union[ReadOptions, None] = None, +) -> Union[pl.LazyFrame, pl.DataFrame, pd.DataFrame]: + """ + Calculate intervals coverage. + Bioframe inspired API. + + Parameters: + df1: Can be a path to a file, a polars DataFrame, or a pandas DataFrame or a registered table (see [register_vcf](api.md#polars_bio.register_vcf)). CSV with a header, BED and Parquet are supported. + df2: Can be a path to a file, a polars DataFrame, or a pandas DataFrame or a registered table. CSV with a header, BED and Parquet are supported. + overlap_filter: FilterOp, optional. The type of overlap to consider(Weak or Strict). + cols1: The names of columns containing the chromosome, start and end of the + genomic intervals, provided separately for each set. + cols2: The names of columns containing the chromosome, start and end of the + genomic intervals, provided separately for each set. + suffixes: Suffixes for the columns of the two overlapped sets. + on_cols: List of additional column names to join on. default is None. + output_type: Type of the output. default is "polars.LazyFrame", "polars.DataFrame", or "pandas.DataFrame" are also supported. + streaming: **EXPERIMENTAL** If True, use Polars [streaming](features.md#streaming-out-of-core-processing) engine. + read_options: Additional options for reading the input files. + + + Returns: + **polars.LazyFrame** or polars.DataFrame or pandas.DataFrame of the overlapping intervals. + + Note: + The default output format, i.e. [LazyFrame](https://docs.pola.rs/api/python/stable/reference/lazyframe/index.html), is recommended for large datasets as it supports output streaming and lazy evaluation. + This enables efficient processing of large datasets without loading the entire output dataset into memory. + + Example: + + Todo: + Support for on_cols. + """ + + _validate_overlap_input(cols1, cols2, on_cols, suffixes, output_type, how="inner") + + cols1 = DEFAULT_INTERVAL_COLUMNS if cols1 is None else cols1 + cols2 = DEFAULT_INTERVAL_COLUMNS if cols2 is None else cols2 + range_options = RangeOptions( + range_op=RangeOp.Coverage, + filter_op=overlap_filter, + suffixes=suffixes, + columns_1=cols1, + columns_2=cols2, + streaming=streaming, + ) + return range_operation(df2, df1, range_options, output_type, ctx, read_options) + + def count_overlaps( df1: Union[str, pl.DataFrame, pl.LazyFrame, pd.DataFrame], df2: Union[str, pl.DataFrame, pl.LazyFrame, pd.DataFrame], diff --git a/polars_bio/range_op_helpers.py b/polars_bio/range_op_helpers.py index a59d899e..7f0261d9 100644 --- a/polars_bio/range_op_helpers.py +++ b/polars_bio/range_op_helpers.py @@ -58,6 +58,10 @@ def range_operation( merged_schema = pl.Schema( {**_get_schema(df1, ctx, None, read_options1), **{"count": pl.Int32}} ) + elif range_options.range_op == RangeOp.Coverage: + merged_schema = pl.Schema( + {**_get_schema(df1, ctx, None, read_options1), **{"coverage": pl.Int32}} + ) else: df_schema1 = _get_schema(df1, ctx, range_options.suffixes[0], read_options1) df_schema2 = _get_schema(df2, ctx, range_options.suffixes[1], read_options2) diff --git a/src/operation.rs b/src/operation.rs index 70190a78..13ff545f 100644 --- a/src/operation.rs +++ b/src/operation.rs @@ -80,11 +80,19 @@ pub(crate) fn do_range_operation( left_table, right_table, )), - RangeOp::CountOverlapsNaive => rt.block_on(do_count_overlaps_naive( + RangeOp::CountOverlapsNaive => rt.block_on(do_count_overlaps_coverage_naive( ctx, range_options, left_table, right_table, + false, + )), + RangeOp::Coverage => rt.block_on(do_count_overlaps_coverage_naive( + ctx, + range_options, + left_table, + right_table, + true, )), _ => panic!("Unsupported operation"), @@ -145,11 +153,12 @@ async fn do_count_overlaps( ctx.sql(&query).await.unwrap() } -async fn do_count_overlaps_naive( +async fn do_count_overlaps_coverage_naive( ctx: &ExonSession, range_opts: RangeOptions, left_table: String, right_table: String, + coverage: bool, ) -> datafusion::dataframe::DataFrame { let columns_1 = range_opts.columns_1.unwrap(); let columns_2 = range_opts.columns_2.unwrap(); @@ -170,13 +179,14 @@ async fn do_count_overlaps_naive( columns_1, columns_2, range_opts.filter_op.unwrap(), - false, + coverage, ); - session.deregister_table("count_overlaps").unwrap(); + let table_name = "count_overlaps_coverage".to_string(); + session.deregister_table(table_name.clone()).unwrap(); session - .register_table("count_overlaps", Arc::new(count_overlaps_provider)) + .register_table(table_name.clone(), Arc::new(count_overlaps_provider)) .unwrap(); - let query = "SELECT * FROM count_overlaps"; + let query = format!("SELECT * FROM {}", table_name); debug!("Query: {}", query); ctx.sql(&query).await.unwrap() } diff --git a/src/udtf.rs b/src/udtf.rs index badacff6..dd627421 100644 --- a/src/udtf.rs +++ b/src/udtf.rs @@ -1,4 +1,5 @@ use std::any::Any; +use std::cmp::{max, min}; use std::fmt::{Debug, Formatter}; use std::sync::Arc; @@ -53,7 +54,8 @@ impl CountOverlapsProvider { right_table, schema: { let mut fields = right_table_schema.fields().to_vec(); - let new_field = Field::new("count", DataType::Int64, false); + let name = if coverage { "coverage" } else { "count" }; + let new_field = Field::new(name, DataType::Int64, false); fields.push(FieldRef::new(new_field)); let new_schema = Arc::new(Schema::new(fields).clone()); SchemaRef::from(new_schema.clone()) @@ -117,6 +119,7 @@ impl TableProvider for CountOverlapsProvider { let trees = Arc::new(build_coitree_from_batches( left_table, self.columns_1.clone(), + self.coverage, )); Ok(Arc::new(CountOverlapsExec { schema: self.schema().clone(), @@ -212,9 +215,40 @@ impl ExecutionPlan for CountOverlapsExec { type IntervalHashMap = FnvHashMap>>; +fn merge_intervals(mut intervals: Vec>) -> Vec> { + // Return early if there are no intervals. + if intervals.is_empty() { + return vec![]; + } + + // Sort intervals by their start time. + intervals.sort_by(|a, b| a.first.cmp(&b.first)); + + // Initialize merged intervals with the first interval. + let mut merged = Vec::new(); + let mut current = intervals[0]; + + // Iterate over the rest of the intervals. + for interval in intervals.into_iter().skip(1) { + if interval.first <= current.last { + // Overlapping intervals; merge them by extending the current interval. + current.last = current.last.max(interval.last); + } else { + // No overlap: push the current interval and update it. + merged.push(current); + current = interval; + } + } + // Push the last interval. + merged.push(current); + + merged +} + fn build_coitree_from_batches( batches: Vec, columns: (String, String, String), + coverage: bool, ) -> FnvHashMap> { let mut nodes = IntervalHashMap::default(); @@ -235,7 +269,11 @@ fn build_coitree_from_batches( } let mut trees = FnvHashMap::>::default(); for (seqname, seqname_nodes) in nodes { - trees.insert(seqname, COITree::new(&seqname_nodes)); + if !coverage { + trees.insert(seqname, COITree::new(&seqname_nodes)); + } else { + trees.insert(seqname, COITree::new(&merge_intervals(seqname_nodes))); + } } trees } @@ -349,51 +387,17 @@ fn get_join_col_arrays( _ => todo!(), }; - //Utf8View -> StringViewArray - //LargeUtf8 -> LargeStringArray - // println!("{:?}", batch.schema()); - // let contig_arr = batch - // .column_by_name(&columns.0) - // .unwrap() - // .as_any() - // .downcast_ref::>() - // .unwrap(); - // let start_arr = batch - // .column_by_name(&columns.1) - // .unwrap() - // .as_any() - // .downcast_ref::() - // .unwrap(); - // let end_arr = batch - // .column_by_name(&columns.2) - // .unwrap() - // .as_any() - // .downcast_ref::() - // .unwrap(); (contig_arr, start_arr, end_arr) } -// fn get_coverage(tree: &COITree<(), u32>, start: i32, end: i32) -> i64 { -// let mut max_coverage = 0; -// let start = start + 1; -// let end = end - 1; -// // tree.query(start, end, |node| -// // { -// // if end < node.last() { -// // let coverage = node.last() - start; -// // if coverage > max_coverage { -// // max_coverage = coverage; -// // } -// // } -// // else { -// // let coverage = end - start; -// // if coverage > max_coverage { -// // max_coverage = coverage; -// // } -// // } -// // }); -// max_coverage -// } +fn get_coverage(tree: &COITree<(), u32>, start: i32, end: i32) -> i32 { + let mut coverage = 0; + tree.query(start, end, |node| { + let overlap = max(1, min(end + 1, node.last) - max(start - 1, node.first)); + coverage += overlap; + }); + coverage +} async fn get_stream( session: Arc, @@ -432,12 +436,18 @@ async fn get_stream( continue; } let count = match coverage { - true => todo!("coverage"), + true => { + if filter_op == FilterOp::Strict { + get_coverage(tree.unwrap(), pos_start + 1, pos_end - 1) + } else { + get_coverage(tree.unwrap(), pos_start, pos_end) + } + }, false => { if filter_op == FilterOp::Strict { - tree.unwrap().query_count(pos_start + 1, pos_end - 1) + tree.unwrap().query_count(pos_start + 1, pos_end - 1) as i32 } else { - tree.unwrap().query_count(pos_start, pos_end) + tree.unwrap().query_count(pos_start, pos_end) as i32 } }, }; From 46a7e2fccb48fd654fbce762084d91f1f6ad8cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Wieiw=C3=B3rka?= Date: Sat, 8 Mar 2025 18:31:59 +0100 Subject: [PATCH 2/5] Add coverage tests --- tests/test_bioframe.py | 42 ++++++++++++++++++++++++++++++++++++++++++ tests/test_native.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/tests/test_bioframe.py b/tests/test_bioframe.py index 757cab96..7b791b5d 100644 --- a/tests/test_bioframe.py +++ b/tests/test_bioframe.py @@ -170,3 +170,45 @@ def test_merge_schema_rows(self): by=list(self.result_merge.columns) ).reset_index(drop=True) pd.testing.assert_frame_equal(result, expected) + + def test_coverage_count(self): + result = pb.coverage( + BIO_PD_DF1, + BIO_PD_DF2, + cols1=("contig", "pos_start", "pos_end"), + cols2=("contig", "pos_start", "pos_end"), + output_type="pandas.DataFrame", + overlap_filter=FilterOp.Strict, + ) + result_bio = bf.coverage( + BIO_PD_DF1, + BIO_PD_DF2, + cols1=("contig", "pos_start", "pos_end"), + cols2=("contig", "pos_start", "pos_end"), + suffixes=("_1", "_2"), + ) + assert len(result) == len(result_bio) + + def test_coverage_schema_rows(self): + result = pb.coverage( + BIO_PD_DF1, + BIO_PD_DF2, + cols1=("contig", "pos_start", "pos_end"), + cols2=("contig", "pos_start", "pos_end"), + output_type="pandas.DataFrame", + overlap_filter=FilterOp.Strict, + ) + result_bio = bf.coverage( + BIO_PD_DF1, + BIO_PD_DF2, + cols1=("contig", "pos_start", "pos_end"), + cols2=("contig", "pos_start", "pos_end"), + suffixes=("_1", "_2"), + ) + expected = ( + result_bio.sort_values(by=list(result.columns)) + .reset_index(drop=True) + .astype({"coverage": "int64"}) + ) + result = result.sort_values(by=list(result.columns)).reset_index(drop=True) + pd.testing.assert_frame_equal(result, expected) diff --git a/tests/test_native.py b/tests/test_native.py index dadcddb8..d4b1c397 100644 --- a/tests/test_native.py +++ b/tests/test_native.py @@ -1,5 +1,10 @@ +import bioframe as bf import pandas as pd from _expected import ( + BIO_DF_PATH1, + BIO_DF_PATH2, + BIO_PD_DF1, + BIO_PD_DF2, DF_COUNT_OVERLAPS_PATH1, DF_COUNT_OVERLAPS_PATH2, DF_MERGE_PATH, @@ -101,3 +106,32 @@ def test_merge_schema_rows(self): ) expected = PD_DF_MERGE pd.testing.assert_frame_equal(result, expected) + + +class TestCoverageNative: + result = pb.coverage( + BIO_DF_PATH1, + BIO_DF_PATH2, + cols1=("contig", "pos_start", "pos_end"), + cols2=("contig", "pos_start", "pos_end"), + output_type="pandas.DataFrame", + overlap_filter=FilterOp.Strict, + ) + result_bio = bf.coverage( + BIO_PD_DF1, + BIO_PD_DF2, + cols1=("contig", "pos_start", "pos_end"), + cols2=("contig", "pos_start", "pos_end"), + suffixes=("_1", "_2"), + ) + + def test_coverage_count(self): + print(self.result) + assert len(self.result) == len(self.result_bio) + + def test_coverage_schema_rows(self): + result = self.result.sort_values(by=list(self.result.columns)).reset_index( + drop=True + ) + expected = self.result_bio.astype({"coverage": "int64"}) + pd.testing.assert_frame_equal(result, expected) From 0ebc9958b1bfbf4c3e4914e9a467ac1ef4028024 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Wieiw=C3=B3rka?= Date: Sat, 8 Mar 2025 18:34:59 +0100 Subject: [PATCH 3/5] LaztFrame alias --- polars_bio/polars_ext.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/polars_bio/polars_ext.py b/polars_bio/polars_ext.py index 9d8f11ad..2c4f29ff 100644 --- a/polars_bio/polars_ext.py +++ b/polars_bio/polars_ext.py @@ -222,3 +222,18 @@ def expand( if midsk in schema: df = df.drop(midsk) return df + + def coverage( + self, + other_df: pl.LazyFrame, + cols1=["chrom", "start", "end"], + cols2=["chrom", "start", "end"], + suffixes: tuple[str, str] = ("_1", "_2"), + ) -> pl.LazyFrame: + """ + !!! note + Alias for [coverage](api.md#polars_bio.coverage) + """ + return pb.coverage( + self._ldf, other_df, cols1=cols1, cols2=cols2, suffixes=suffixes + ) From f8dbdc6eec5bacc71d090e26d5aa8e6e5f54fedb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Wieiw=C3=B3rka?= Date: Sat, 8 Mar 2025 18:39:38 +0100 Subject: [PATCH 4/5] chore: Version bump --- Cargo.lock | 2 +- Cargo.toml | 2 +- pyproject.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6582e837..64f31798 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5398,7 +5398,7 @@ dependencies = [ [[package]] name = "polars_bio" -version = "0.7.4" +version = "0.8.0" dependencies = [ "arrow", "arrow-array", diff --git a/Cargo.toml b/Cargo.toml index ef2d71d3..2baea9d0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polars_bio" -version = "0.7.4" +version = "0.8.0" edition = "2021" [lib] diff --git a/pyproject.toml b/pyproject.toml index d680f57d..b44e1b11 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "maturin" [project] name = "polars-bio" -version = "0.7.4" +version = "0.8.0" description = "Blazing fast genomic operations on large Python dataframes" authors = [] requires-python = ">=3.9" From 99bc3a2dfb017e412b895dab5701f67ff8a4ea2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Wieiw=C3=B3rka?= Date: Sat, 8 Mar 2025 19:26:45 +0100 Subject: [PATCH 5/5] chore: Docs update --- README.md | 4 ++++ docs/assets/coverage-parallel.png | Bin 0 -> 66170 bytes docs/assets/coverage-single.png | Bin 0 -> 53119 bytes docs/features.md | 2 +- docs/notebooks/cookbook.ipynb | 36 ++++++++++++------------------ docs/performance.md | 4 ++++ 6 files changed, 23 insertions(+), 23 deletions(-) create mode 100644 docs/assets/coverage-parallel.png create mode 100644 docs/assets/coverage-single.png diff --git a/README.md b/README.md index 948a1989..26543074 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,8 @@ It provides a DataFrame API for genomics data and is designed to be blazing fast ![count-overlaps-single.png](docs/assets/count-overlaps-single.png) +![coverage-single.png](docs/assets/coverage-single.png) + ## Parallel performance πŸƒβ€πŸƒβ€ ![overlap-parallel.png](docs/assets/overlap-parallel.png) @@ -38,6 +40,8 @@ It provides a DataFrame API for genomics data and is designed to be blazing fast ![count-overlaps-parallel.png](docs/assets/count-overlaps-parallel.png) +![coverage-parallel.png](docs/assets/coverage-parallel.png) + Read the [documentation](https://biodatageeks.github.io/polars-bio/) \ No newline at end of file diff --git a/docs/assets/coverage-parallel.png b/docs/assets/coverage-parallel.png new file mode 100644 index 0000000000000000000000000000000000000000..5f7f016317bc0183792736136d7c012f715eb5d8 GIT binary patch literal 66170 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
FeWUuS4tu@ur)i z5hH=$j;Ss-#;aPk#0LaC3pQq=n8^v-KHj%x^ZMO#bs5>DF3(10FyYT4BC*RuS4 z%rhTZbUo6Lqftj$-rHXvbJ`4jIb&r)@F5Q&LZ`Kqj5kiNN_oy(h9kocAqDQTvAG`P z+lHG0l%14PixjRmN-f*YE=@ev(qiEs*8MCO)}S%d>3l2k-r8G6(r9QWF83h!=7wH7 zh3mF6^F9V|1C`##<#tH3+Tl&(GzvYZNTdKAjDp0jL0*66-NzPXQKL=i`CBrkj_XZ= zwTdS3{rcYNVaT~j)zq(xV&L!P_s>Iu1n%oZM9$1Z?x`nzIIy0QAMy{pG8D<)pB3)B zpl~HL%bCh`wtg#j=~0G348c#StRBMv=Qj3_`A$0qn9Uyr?lK_DER3;kOJMtIl}YGx z(>OF`bTDD)VF}hYc0NL^qF%4L)G7*G@iIq^NN+MKDW}aUKgeB+lwb^*?5$c# z`-+kj;>Z>tz_XPmKn`&Q<|uwz?|uktzDMO<>)ajb9OF!spTFvE73K!}uA#16A|~ZX z;`+@whS&_2b<1`8xT)2(6URzV>&azVfqQ1}J=^xOp*LMO1#k`;SC22NUa#4%Q{$}r z^hC;BpO`YZ;^W))qh76Mg7f*7$}FvftMMP@JJwJZiHmiIXG=?|7N@UC;kw(6YRQI^ zw7RDV_98fchhz9^N_p?=>%NTLBz2w=I($;tiHc_i3#Mv1+JhutiOx3@A2JrgaP^6%K=*Lb56q%Ny|OE&)4 zr{l#QBs-PCK11kTz4uH9M}6BfndXp$a>X<1V)*u#R{}ARYm+M@KmF*9SuG9TA!nW= zw@+y{xZbBdgHC<;aO`BzPaR~Y8)5lh(O6G({J^>CQ~M zv&$7G5TX*eoboB_^Yb4q89XH_G_Yn7`$`r zeXhe8`sQ;3-_c<8y_4IT^HTa*Wy$SirWB{FZkt7)vKAYA6<$Bn@5CLh3VDFaI+#Ba zJytxFyC38+6(4NE40G(?MjfKIxxcPC?>yn=xL*LzI)K0r1;5P8yDB!_jA?vL>b@u3 zbf})n;ffJbkex#vd$&^sqx&8|GatR~FOtUS=zd23*bb9sQ|$H1S7OJ^pGh!bQfT6Y zmI}iMp2{u2FxB9GU`_cQTg~V1R22H!$ns|7T{BB%^#nlFSQ55^BCncL7PbpeP!>J& zikS_*bN@Hua=;q{H=Zrqdw{JZj_?mEvRW3fP}R(krkd-fc$f2J9H|aUCHb_=wF;RT ze!ocw!>*7bnX9TTmvqRttSCQk2C~3@a#$yoTtBsZENTboO=Zx`U5Kweix=RXE`+Jj z3f%hR;gs~W60+eqid}zEa(*t?pZ6A5k#d}LKo(0ZH8(_NwUNA;HseaQT$_zGryW_d zLf`C9Ts14Hv5KOWHL|R|g~Sy9XeOt3fWfJ|&z7V9tKGyfonE(gDoKswGEAio&iyQH z$FHChf3wi33z(kY>DnJ6xa`;O0+l<{%=1w!c&Ovd10@l)=S@EXa{Vn_n(Q0sMshw% zWm$)$)_xSQ=VFYl`uQSa#s3#?B({HRz`u7r`km_Ujaa&XnJumD^rpx5`n+gysl6mL zdFPCzxADu7%&>ZQMW5%omAF9m!)-wDD(Vu*lQB@6;-ru~fZYBYEBObBCV`=vU3s@R z=hk!m;IPR!$&|z!(S6U*rPFzFGO&a$IJ^cFLrZtZ$m7U4hWwL=dMie8KXT^UjCKj@ zAEfl(**b8|b{DjLNa+gQpRC&7F8r#c#pJxkKMd{l|LZpJu}+TmNbx$GSBXoz{5jkE zxG$+DN-|OJO)%7)0AKj8!3U_&aqU#G8Pq>x#!B3C29LUI$JG9OR@ciPR`Nn z62id8*jIt25g0d!=7=_zdV+$tyxsUh>TKyQ^)9BV|9%DAxK}4XEXn(|vppj6g;9$` zjV{gPYi)8=I^;4v#vIy((!l*Nyb0AW2uww|*CuL8Y=H-whMrzZ`^Q+9zctjaSG(z_ z#}FAC91|RjBM3wWVKZSogW_K$O0m z@x5pgKKv1YMt3KG4ai1Klib9mylIp1>F+X-!fQ)+s^gi%`+k zy)t#}tvFv6*oV&+lsGmT`sDOc-W(g1HJ*o-P1I?s5P4V8q@AV1FcHL#3C(JMh-&NCTx=elQ8&JS9LvQ0_60Tcn^m0CZAm2aOoUn(jH-2dlw}n5!8{ew`$_hQ5cynAb zspX@Vq6%qaemGiV(iusI$1$8Kjx}!&91rmj%C$yKoUW_SSr{2DYSZMf)(%({>SUC* z8vA*wEaqcMBtD(0BVkPKJYU5{^T zt{zy-fU56LwefLW>r8ol@1QH1fdLw1)1a*-j2Lk?6HXLgstU9o9Xhq^YCPIWh4nTN zICAE-<~d9S5$Wn1Fq74JX4N+gKQD?C;zs0-xLDewLR14a&7mPD4+yMhr;?JAQlcS= zu@jzWYCYahzK!!dwilDde=HFQD{|l6QCh0&=~i4av+VSy@Ag>5S5{ExD9o2;No8wVDrzv(q6Ek+K+GZ1FA#2czEm`>B>^iB|zRIM%y zOG5P|sEUK)y>>npvUus*s^cUQzU~oO6lOwpp;Vsuc&(`==q#a-a5#VB0c*Z26UuYk zm8aOlM2Z&Q4<|PW0Gukc&9jnB4qf|xxVjjqFq8mTQ zYUBI8P zbu&*l?0v1JPeHx1B};MTdwo#*EyBd8r(8rtO#JvzTf@?(*ke#4{X@~w0=MQ{xqH1X zwb{Wn{992WCyUuE&RW$E3SHXTm7EXfMX3<0Ti=2!R#vioWzL2WrTJaCbI$}+g9iDk zzU_nCz)ALi zSADYYojW8JVl-Az^fW`pC%Iij=3&T`)$l=Q**@i+mFks4TXhZ0gf^Karb|^ns?F<{ zTVm+4-}7J2X2~15!D7~Sk9zQ3jrLYlz@pHPR)?&jqF&FvRbuwX#|lb;!^=@QUjDAw z-BCL`9b7z&isMz*h?@`@8JT;9v2Q2@{tzntx%&Nn;g|CaEt6uD*3dG(3N#j5Z!8X5G^YQg+G2!!u8Ly~wI8kh)0ke}2Ua)+cDBmbaGe(JvOv0!7Cy7?DV}o;%Qslc>6R3y6BkXwkVCRA+1mM1wq-9Fi-{2df*4hD%&Umk)* z*%nlFRfA&`tJc}}o?PG|x!mG2aa8S94rtWP{Hfm}>3ED(KLBZ`@a9~qSHE`-` znMGTNqP_x4U+1S6^$Am$55+~m9<1(7?-T*$5KdG)T6IhPuVD0=SnoINeuuuDAhGd|JzCRyTBCmAZ#1h zjwCBD-AGw+_;!dkWAk~p2)+#Rpm2_B*QxG_5%84S2d1!72{B@q>w!FD0#v9Y*Ib)l zk-B@+MaTrBH{gp8+~#aQflb_e``Z%)WdF9nxKDk~s6F6L;6F=VZm3L{@UvD_9&#v?>~gNP?S6^>{C zUWiSn!x24ri4}XFN{!naF^C}FeZQW8VQR1hJ?1`FZU?S%XQnGaA2Qb?AR7y+68jOT zjfn~>m|iuZ*b*oYOxge?|9H0Cvd=p@89TH--Es{@?2lV>q$@EZht|kTB(ST_9Y@$U zW{Gj9G{py!viNhf;($d{d~K7i zpKFE}^Z2ogODus+S4w5~;Y>GvX!}(IV&w!$+SdjsqO&D~_3dLajnkBml z4uOJ~^2nOmK6F};Zh5`+F)Li>_}%jx#j=+cdE%~irZt5nKyA8J;u6DrHmVTo83Fh^ zTqBhy@p?`&Y7xtxafC+x0nKB;gwEn7ULxlyN7|ppE~c0>#~$Q&nT%Uc#|2`a%}+c$fi~1rOA95O}g)S-K(WL zm#>XD#!D}C3P;TxRtUg-FghO@j1YDSHDbpxvThr3b(fmU*5=Jj(!B~ri*@XCTATTb z^37YRR`)-ek@>8+l;!J#1i~3fAFDbO$MyXb(23*fn))D$G&?8fl<06wbf%(bvR+sD zSeizSx&ZT2bL0(wLV6^_$@RPKz?*9fvG-&@v*>#oiqsx!4#|IbY|Giz8PAi{rCg-q zpohD&L<+(BO3i1ZDtB(w4q3%H?E%Agq3gBuOf&RM)k`%^ddd44ri7eJV~3BHe2nyx zoYZu=w6=g=g}`%Gya6LPC?}vx)%sX!gT++}qzr|bx2J)@b%0!GDoocU2VK^!)4 z><*eKC9)=|o1|}z*I9msg%)MCbEl9I2+SInU^dSMoSKE*mR{W4%1ifIrC9uV&83tP z(JPO7%&@O*RADS&xN3tXTZfX%3&DFfcHl3NLQkVbp<=EEbF^U$`4D=XT;69x+S71< zYck4NnyDgUXqa^?qoTK$%S+GL?CHcAa20`+Bpg<_KG5Vy6L zSmFi2Ui=f-18mb^ioJVdLK7%BMJlY-?>CQ2Q#rMsNl1D0I;^wonI!f-@J}NtY!7L` zp*`2e%3=b1C`Tmty4^-YNvvO-m$K&=w9@qWsA`ul;72Wr=CC%I?Id-DKV15-)sK1I zRWv*-FMndpBIyjTOwpu7aNM1hWK7GztZ5GwOvF?S=Ux-fb|}-lmRkH{S?{~w%Q}2K z>w%XQ)8S-RY1j|4o;N4F<;)6P5+qu^8Rz31(i#lJdM%qbRr}tUGLDr#d-09{?_nzY zh$@#C84=5;79Zz`OBLkat}J}lbUPE27|UBahBXbR7IaR2hWdcH;PmWP$Ai~eH#r^f zsa`gFOC5Dc#C|AgIj^5d;5pAB*iyMLdwhA^R>Yk$Zt<>f%nL1&N4kAQk6ne>Z&X^= zWO;oUSgL@f39BuD<;HM6^Wx1QE8`RG@^;cYD-E-ekI#h1olWI0!h~882Ff1-kxpxU z6LwZAZ^NhrN0dA<$I5s~u2?PvXGKKNw}Ei~1z77tYaZrOWfVmdd}LT~3c7TXvi)_i zh}L=4l?N{(95G55R7UR95x7m>bMbV#Gqt8aEJil!J%y9i@N?DciID89z9M>J_HkJe zui!X=g0k%LFQ@TMj~`;?-c!s9v!ty^%q*?8!XO^yq<^)C?GzyZ%UtQW5p$W>dh?qn z3Y({Hl0i&LfZ4g5|7DiVvtEXNmC91ROJ7;t?z~+*Pv*F=Zw~AZzjifro+q_E{`w%VC(^vM>UU1aVTz=&$>8FGT0kIx;0OfVM4$&y_pRm za4g2;?o%f4B=?)r9TVuAy(dFaG^2WPi-ua9Mme8-+>c)<#i-g*W^tQgaIITP7O12d z1JK%g1AS1|4i4!i6qK#{)G-*^-{{`^=u2hJaXH4kGZ{Pb$8ug!j{fX8n0znMPU4Lc z09r_WWSDS+z-Mnl0N`SlRN?%jIB^W%pr4u38{Dy+FV7OLO2slZ63LR{FneW} zZf?Gzu=`2HO>T%+;Hf^}~`eQ+2`vx`1d)>9RVnn3P%J5PVlDC?j$nS4#h zx0*VT18e&B=u80EPF;5+muu#DK1<7tcg#jVUPr~5351#5$sn+IbB@VkRq6N`>ld?($bjwk#J#eqUY4ukK&mBjgtW! zCy@?0+`HXG;H^MY*k9=4e}j6}j7ZFy&*R^>|8KAmbYwcEfZAXABK#TqzmVC#)F^+# zUn8lA8=#VkrSwl2l2IKaVB;31U<>h^%QF%{t#6`E0x4uPT zqD;vA4UF~N0cXl}M_=Ple!RFI-Tp>i^sE9?hAD#F+}_^xJ^HD(ZYOY=!b9{gB}GL= zx-Vs;DXk4XPu^JrPcCh3?a2}gy$Vezk#&MbnzdV%85+c zy?^4>NCZ9B$iUh{%o_0f57~VQjX~Io%i!aw=@g61SHPAdkHY)+nToS*y?K9M8y=Nx_p@J< zwYG-8r^*b)Iv%V6SGZc|N!@Nrk9`RQpZI}DL?!(tNmK6$027~ETU)oANvVjC;L)9j z8$?qEUtM=mOo2F=shF;f8`EK#n@yd+ZVYuT22fMft`>~{dHGr$Qh&4vIXFn*>{#aa$XxYlwv%D98ZJ{O16$H1++0GCq zQpTbs?g;Or zt6xnbK)O0W$1tlfQ|Zs(IFbD8SwsV0u;3nsZW-)Pbb3bhj*MJ`%kB=S0*@ytVEn+g z#sb{$b({k9K3oV9;I5W~R!`2$arSg~PESI@_qWO3yOkB=GHC(e*R|`1&Bg(t&?(Nw zfnN-Q5^T;$zyTCBGh(*~cw|B@C2}32Ou}d21RrP9X5O4FF0#B(AHrV{SWo}aQCd{= zG9;-$erH$m0Y4yZCVA>0DkwZ`8GNiHfUx%z7SbS7{97loN{^(QznVXt@bb^+UFQ~~ ze7FbnsZCtq22oZ33i=EP*fa6GJU+k*;al|hhAX&1U1p^VEUOS5S`|~4$JkZFemnLj zfHj>Wx+G9KS%3h6+})~SQG@07F)|1grf}XVxe8j>Dq!d|#KKoDE}`KFl=3s+QY@Vb zw#5b9JP$!4ci$JNo^5&6H(9RhYJv>9I@yPi{)F-pa0jf|5 zNbzHZY1P?wv46iX`e4kkTDp_q@YmNV#VAieGrMcJh%i)blDw-F-Pfn+?Fn$#h1>v7 z4ZBe_#$Yv=NoQpTu8`|*ol1PlC{JCC-~v&YX1&YqYhZI(ir~P12CCcV3JRfy4YK@V*Ot0V8wDp<-T*we)RcYoM%o z84|Uwz(mZXQxU-P*wqeQXE0`=pS@*XtO0O--TR3l!e43rKDjx>$yr}8pZs-lFYwQ| zipv^}k!7$ZsXTBmfMrq@aPb)gj>&iQK-be$p!iS*wf~JOP@R@-AQZn%E64@i2q@v1 zp{FwnOEaMpSQKY=W~y!+s1q^ZcaH$na3!Ll{&`>5?DTmX7Q?Ud7w}M3H#fKIL9&+&Od|aV9GYJVOpyG-? z4-IdZp}bi#Zhm6{_src-cQ#vyzZNDTCRDaK?oz4E|vVAtC@heVyToBUtojdt&K4-|A92fyZ zbrNms7#-~UWZxTM6( zl;IS2^6UE?3zs}?7{Zj$Eu4T=<6IDzY%q7HH8;S*ZU^q?V2V)n02oa7_wCIt@TELB z(rkO3^D+4I7)o{)vb@YaQbY~ zdoRo6H%THgVtMkKA;_}&YXA&3)c?6Y^gxketke9wTk32^6z$LK%EwzP>G%_fb@H=c z!iR#*9$U={y6ot*@C38(E~(cWUHGnH!m~LfLfd7l0(?8M`u%h=k3dKC_`FRJRR(i8 zXN1P4d8fncAsj__#mr;|Xs+G*Ng+%gXi&3zo4B~!kg>3KQ{eV{oF&{f7RVFB24QNX z+r)zhTb!``HQbDGN4$h0Da@UJzJ&jN@c;M$N}DaB$%Se#`akq~|60^nDM7X3pk}UE z@z<^U&$>%I2m|O=Y4*dk|JtAbbIM75hWM>JmsZ$67Ij?GV1AC{`>gsOPpeK2{B}M* zMe`qrv@tYbWj4iV%>8G%tq5Y>&KyWE{=4k@8<+RRA&8-6kXpL`=^ww+FT`)pOy5KP z=h*m_+w z^86pa(mWmb?XO;C=Knn!24B1fA5n7tzgzrgog)7KZt=e>HpCC$EryuG4F2_43dk*i z8nFuG>*i|I9~~Ydx&UB*V2MD3Pr$A_dZU~%J~1%^Y!TqVgE@B>*mHf~R4<%Dn{Wxq0~-uk7aBHil*rS;0nswgVu)YG7yHTK{G*(|HpcGq=$Lz~-L; zdtq*WxuavP)2p`%1davVfFi;LOn5FE8fBg|K+~^yy@c<+C}E8(}qF4v({)g{*0yR)&MsV}=2*Ko)S9!Z8~` zL3O(1kH_ouHrN09`r1PeXd!k$r0+4xk#Y+f3d&d|*ysL$6&M&8PJxDd4#aD*gV>b` zuJ`gOyw<51-nSQ@w>}m>2SXO(4(Z^N03y|LL$8ZYyyM&mlB33bWE8Ne2@Pd>-?|ll z_;B!Sa|vOA;Q}@koic-_2b93JH0+Nd-(CwK4&!$F*n(ItFs5oK(WNlS+#M?j&v0D{ zJq3-9*@<{swJLj-4WGA%qxM5hucpH?>%ttNI=IQ(Fzy8lUH$~3ggh`|6DeNnzq1Rh z9=Xt5dm+pmQZ&~fLtq+g!E+z6a3M7yD5!A|xMQ$zhlV@IQ#gU?fU6nXROMLR<>4Uu zZHA|UW7sNzJC#xCXm4|MO)O*($b_NT zdOcmMWppAmZ8ns8fc?OK?)2h8nAys30X%OU*~_y%Tj0nUlZEL8ia|o$t_u9n-wbaf zzfcVk)j8eBWPJyAyNzpTRg-OjcKmqVDxFYo#&f(Wts7%&2QbH+19qAg+oO4M{%61< zZW>H&_udJ!4sK3<((7n?f<8c;iz-2kCUZ zxma}&Hqr~m=mmUC0&f!$iyFb@|Udy)XM#!SGE{kbO}+i&*g5?Z9E zI=Dv{zqD*L*^yrd9BtTssikij-RF-IOz>WPR#K!BN9=sCzA`L((-lqSbq+5sDXI3y z6P<>=Nq{GwWS2|Z_d7I$R#)IQc_@j%ms&3uyL*{0H9&f*{RZ)wH}`JOBMtDnN3S%* zMt{7&4zlR*^vW9!yc%6BT3ix)D@M+A6r6htR*_Tf_p4@!`-gHDo8KF14QU0zpa%a* z`y$Z)^}Zxi|6(%31$Qd1vhBuo*xbha=Hsrnz#qE?c)Bg_Wwd)j*hmaLDi+tXX^h{93xc>BViQ?1?~*-p z-h0LA8}8CsnBDo<+xX_|)7&&$It~GTfk-4ucXGori&~_+_sw|IIr7|fvUiMIdu~7` zhj+6{bZ&t279yYH#vv1*Qjy|R9i|at9CxnJ!Mw6O$B5HzctHfj(G&hu_Ml z4^K34d&*ePfZMC{H8u8Ho7nFQH3S)M%K&w3!C44Af_7&qIZV_Zh_U-kz9tx08 z0n>a-FxCn+G{)b8l#~?ZX%2oNLQ_<5J+c}f!!c6GBByHDa+F}mrdQ5b2HwfoJ}aoqx`++{d>Eg93D3XGh}_r zpbyLntoBte@;~Ja1iFNsCVJN8x}})ChwI*hYc87fl4jt*nQ{9iq$sFp;mCoffg)PD zyN+L|eiwYAA4~{bf-zN#uwttgL|_hYJOles1IEkfgq^rxO*&-S7&_GUR@BZr6psYm ztg1t3=>=oNIejqMQ68S+8MO|M5uu%cu#8g*Ex~8NfHH*w#3FlT-51O$X^^duw1{mZ zP{eOHBa&lf2P6%ts}8E$rFT%AW)88RvmlJ?hftz@L_XhT_l=$EbM?~eO*QYs18yN% zIY=O~zxYbQw+p}x>9D0&C_D_Ii`vha0v4a&3NxI>Fm3xdUGup`jau*64w0V(BL}+b zFm`0p4cfC7O12@A6xmO8TD)!=3ot1*5ZSl}_FoM+{pV$??Snl?rHLph9MNi6{r!Y8 zj85Mg`ABr9wxOr>qjeh*6c95mI*rdb%Gk^hQHyc+Acn)%R(UBL~lAA{9^N*$99q*R#xGArE7hu_j!?!X z1>-F>{UJBisP!tOl=%+_L0%#M|J` z@(@zS+JK2g0SVAR$A*aI`&LS(jV5$(g|D@0FyMN@TdVT#vXK01Rm@&6_@l}3EnyTd z420?nYC2Vt@&`Z-%pXD30i@wLU_}(=C`g7QYq#@yIGbl6o$HHun-4N_H|JElfHp>Q z!nY53@$CZeL*a}^QBZmI(7bO_as+Y~SaL7O_W%Rh>ke^K)S(Y9w1}AL6^~XIi{9Nwv+`zIV4!e9Q<$61qBdK~OAX}UQXS~NRqPx}5p=LPT-Z}o1 z*X2B6V&o35qwa0UgO@>B(9@|fjg!YT?yOWlGB`|d5J2MNs4h4C|BJL*~SCK77GC{Pl*8@i3 zmCDW0LWi90+Z-KHk_-uA<}I8P7I%86d0?77!vhN@C-<)_qw)GQ67Y1K>?vfhTN3Kj znZEu|T_-nV^q1I@?c+sJCwa>yBn9itrXb#nBDA~0kYt(S&H=u#q)HK^A3 zSb|#;nH{5_7Xdr?9+qHfUd)dq;hv;r$;|HOF~T9n#sK}Zc9noot*SxN&kGty(3jj8 z$<@2E_uD?kpKBDwu&rbd=4FHl_Ax3#SYPxE(|GkUno)&6IDEW@$3O!g$sA>;R!&gR z34_;3iKs35ozgbrMDfqOpd`7Zx~1>+KB$xv2^b5hM^<|L-&-+w=zPYIWiS*`SRavo z<>C&@J0ce87ET<};pi`@^4ny$4711a+cXVuM4NMZ-7cU=Bq+X|z8>nYt1oCu4!9^r zfyk(VopBE}H*iL2unoJik7VTHht`47$1kBgCsO~h0F%>E>hI^BoFm3d(f1YA$+JyY zzEioa68s(-xWi3q{1acSk!+Z|VQAJ0O;CbHCfO+jN}9Vb-aAGf?BMSyBUu=K?11}h zwc}2R>LV07!Ot)cKe|YqCz~5%%LP?wJv1g`LOr_vU(sJ^{HD1#YS|m5K*SdNA~aac zG`fTRPzi$Wc8|of_Kz8Wth!(9R8LuQ$kC8}_Z{LCZu}s*T>h2e4UbKH@!0$NqO!VD zNIhfsAv9J2eOyFn>f;1$8dDq`Qq1xK(!B(460}%llg+v`7%%9eW7&JeMpG;fk%(1B zuf;`a%hcbKCReihadlHCAelLZJ{P_dn~!a!_bu*Af-OatHz4^_WUK?F$G;^*dNw-Y%UYUIMeSPIgg#qXt?HVa$vW9}vQEsZG#yP&{9t!lxx!S7w4=@(>E(^tI09-a zuGTOivo;GZ?~`uWk5&ajH>XXv+YzlX0C-T=SB$!I0Uw_ zOj_e?s5fh%$Eaq$3eB6ZREBMl^5n_WX5@30%IB!&c;!Z|UKIH=DB`1Kty*qD5=R3M zJ3PlI%f3N%j5`Af&0@&ZO^|$%71^p#W1cm7zQ3jSF24@C_HF#oap4D5yr0?j8u=oy zUaTj}CG|=}Zca|Ww~`8yxYHuJfO*1g#<5itFGWFF`t20oMqPf)oRDdfZuFdA_CUfN zN`8?pOmWul*}jAqNUP+go?sm4Zw7UvD!@D7@bHhz`DV$zTNi(EMe>K;`5Q#ERLI8wSg3enh$}9k~wHTL_7}3cQUANH(V?2DH)GJ z&Vo-%7d3J?8X67j0UTe}A`;3hnAXNQZDABddzbsQU_dfV3`{5ua{M-(?FLX8w>=)$ zY9$V}Mz#@T^uIriqPB*+smfa%C*d+ujB$jMG}Y2~=WtVfU*!&vORYHcCBf}~aGDY7 z;^Mz(bpJjT2Dd*J)!2|vibWp9kA2~Rx+w3u0m6`n9g>Qq`#)l+E@(@6Fm5GvRTJd) z{Uz~PIF*0*?(JOoPoSBRVMlzSYjnNH#o=feE)h$#Vl9Sun6*piw0U7Y(nXVc5xNk* zts@R1@>Mjx^MH1Io`k`>^^6N)*bSaztf5NQj!4On;#paQ$L0mZPfj zWUs3%R!zgDQo8JeaO6{Ld*gy2V@wvw5(D+i7{i&fRWL&QOkmR<@Y%oq&YJRk1rK^K z)hr&PntB|n9J!8rPIX(`oq}NyrLq*Qt10s!RnY=Nt_7e1GfDt|-gy_P$q4FR6I9aH z(K=IE+~CT9Av$6ntIBQ>G$))A9c_GPCsU2j*{1MKd~VkOsczgg979N}V4wskg+z(r z3dIOV>+)OvsICh7?g2rQd;XO$QFVq=*XJwtqswbe9j%YNS_;+&&fD&-5hc>K#WD)k zd?hK7pDy-mGWs%fhh}TqC>EFhY6DeHF6HsXz!o>@sxAbM!?O}4fuWdozVmuMYbc2g zX_Yd;cr@8B5Hk#KHQMZMKTh6Zmlz6TpMe%JL`Ro{)R^int2}HtM>+nPUpwQ2H`mEL zD|p4chlCescklT>$FkrHeeUY2uyV}#W0ll;~S zIIX>2We|*Eut5vfp)J4Qs=5hXv4Z%hCPI-8DcnRqvNG;fc*M7PloRJ?nr>qEaqwys z*hK5OF)H#bmkUP<#tcq%XudcUBtm`UEI}}ISiPZ1+a8|ed|JPfG0h=Z%CmA~UoEwq zd`Z5>uomDD?GVpS5F3pk;FaO5LU~s^U$gRO%3&(r1{1u>-$7$ZU1DdIX%{1+^AN$z zv~n2~RkmlabX7&%zB-9)v(vn~0~^Hx1j^6KjqH?=JRx}@AqVMRN{_nFJ&AJ)Egv~B z9%&z-h?-%$-tRZ1C2@ztN!{1uSd`#wmM z3rbO1>1<3vVz|-_fYwVN9NjjO{QRM`vNT|5XJ@QUu0+(licemZoLtCFZQg=2h9v}% z)WHeVRlVjeH{b8pj2^l8Nue7R2<2B~8EApxbHqg9X=C~i2~pUa!`HZ!?(|0$MW{!W z*WxP@nP)@sH4>BE%aZ%u{V3;hN9RZ*43;$VW3YXcd zz=`@yB;!)uXnaCAJGzwB)G=Kcx%Tp_4D@I8b?DQ3{qaRt6?gJP#9v9)VG=>Ab6_(E z{)Cjo=~V)c;i$oqSe+Pae!PJW(q7St_o7}M$)oo@W0d*Q^{iYy`!E8KbAXklI`hz< z<7OyzYj#Q-v}*R6bIC{-H-k$sx@|UKh$(|#d4)4xHgx~vl{8z`44h7+Jx8jOnzHJA zKUDvki$Cv3UM`}ned)X%sVZ>bO9eA!8YuT4PYDlS{wi3;NK#!wU|2~HV@1&n^HD7E z&9gfO;JHB5X>s2S-G4BVpC4gbor!c+v6Os6Z|&rbBw(mKX5?deR)#L0{3Cuv_xJX;KM2~1crj!PNokx}taPkMzt-;2luen-PI~jD( zm2NWQ<#_8SmG58pp9Z{*yd(>xyYPF9En{y7>sE(l8+Cmow1hzHKaiVYGte298kceO z-M>mJUlzQ;l7og$WqfEaC>cvMrjfdmN|W>Kzm*(6;qN2zhMh1Qva(BR^r50Ct)Hih zoFHL&&mx^-Noq(Y>-glL=89zRsC#E`U?^&`N_?Q2CQsxVzNz{?Ml~ieN0bn%(u8hJ zxhojv+TMy4bcp|m>JN5Dj|lSf+4w&PlU(vXLnOplZKG~d1d{6!QS|ee?ZFMIj>i#Hn zLs)ACu1)a9XYMTM3pAp9z_(2nBQ3?f#BhV&qL_t+wd%yZY_X)VqGZ9WfQ==E468=b zX{WbUJk~?P&FnpCAgMny+Idf?850azu4=q54K)@Is1s2n=rf>w1GqYuzR<9gay0@h ztUeAh>o~FYq*6kW;m2r!t9+-b#?<|+LI)Z_7xNt4`;Y7cd}*V7xv*#t857yY2}a9E zJ3AOfbUIp*3TP9b;)E=Jy?TGi!-Ari0D~#&1oarsYn(!-HJQwd$;vOE>n8CS(x#K^ zbpW=daw5Y^SX?hVYfBF6*R$GO3b^jWur^nU*(c9qIN_tJBccIiQyNoR#3@#-uVX(y z($yot%c>{uylb|mT3DX9E7dEJCMgmz#-8vj@ibeShGNy?beo2)J=>~^=e}I3deB(n zSmrX7x3cE`U8*rEazjB$8fl8?%8b*%$}r7L7mJ}+)Y z8P1MQVW0E_y&p%%Gk*0(>5lx_F1#xHf!73Jdv5-WFPLx+*B7LaM>~5Vr_sUf^!{LY zfSYkBA4x_f#2<-(dv!pz3YBKy3jyPv1b8iD(FuVC(U4o>jI?0;b>O{ofOm(B zB{JcQR?SIh5d1Q^k*qI&7{W%eBp}#ex16jhqR0e!W*>ZlmB^xV_h3k;p92Heo-@Ah zibxctC0m~6h54&kg7@37B-bE2^^ZGXLSRsLzdf`&?cTZ#JfW&=I4I%k*iu)R(noo? zSTw=VR=_=SjVJpx_~vglFk(pjYBWMp3iuOL`jEmPkk_n(VLzd(Dqa??U7D2Sx4o9a zYPUHa`{Ztky0(2JW)FqK;}~o{$r$9aYG%byF>m7_V=^Ty#|$}nr7+7Og=nH;lk_27 z#0Z8KVA9|b5u*q}RLW@$$T#8Td|k}Y4^>7!lF64$>%=71(UBWtR1c;lIz)5UebH5o1f$X*EkBbx7EOQIfWgFSa&P{N zT(cZp)m`>BSB0JuLYcq~$+!moe{xrlnnYSE&8YKK!}C7Ka&C5hW98SNQ#7UfkSiVd zD6d>UpPA2F!32$2<}FtUM;ig-+8qXAvm~BT8+9}(T|6%h7tNoTN$arU@!!JneH!m! zS;A8Zd0rSdKJTwL>cKvBir^SrndU+ew$H5&3O-Sf{rPxHtX`Y5O&O#QacbXl+NeM_ z;?-i~M$HXNDF0w$u9>SNL+y?seV=*!=?B)#qHpSw#yQ<_R3#6So}^UK^QdPU={xvT zVMr@L$0Xg`E0rKKI)1%>e10Wkc7aHL>X#J+vCWrP(I@2;gbwtuzY$lg=kS{gX0~|SSU_WUC3gw&hi`r>v|6SiSvOwg zUyNrch+}p<{R(gr19x`+MM+Bm&ee*HMJ%can!?LG)br{iA~oUVPkhO{15Qky3Y|U* z0^ILmTDeM+i99bv7F{qovdz9JH($PsGV!K`B-9xsj=4R%(5*+E7GhvE6annaYp$dM zGLx+l-36%zdoYDP7in!LN+3E#%`HL9twO{Z5lt25*1r_svoNH|`Kn%~t8AmeHo>bG zE&~yjo3_((j7f_OQ{RSUW36s`n(x(>K3TG)-uV>QcaRCE+j`>V++s~g9bL|j8Ma_* zxY$Nz_|jO7`V$#Y52fh4Mb8VsKQ6K^M*0q|5_VLlcCkpF)&RQ~nz2qVHKow2ht z=^wc!FEM@F6NU3F5Jco`X5_iwM|a;8mwuRoHY_wK2{l}W3?{*D!Ps;fVC2>a@gzcA zrv2ne0!QP=j}L_a>Dd|#XgvD zuk02zc z(IThGH(*3n`|0!S!xsiSwWXy)Agsc}9Y8HR;G}A7zSlqcSy;p70UVNDK;rN$AoPOR z%+I=(cN?7A?PZLw1NT@n%9A+8n+vV1N)HX&)sN5P@Im7B=kK8MI|Y(E9YDghuIy!W z8P|||JcBNOpJewEA$Jo6^rJY~Ds zB7>#u<3UF^!)BB=5V0aC1D;o>&U?w%3`{Dirht}UOMs3>ZINytbh7!a8zCx2h(W{K zN2O@-8PuO?yuxn&y|AefxBh*DyMOD8)AatOli7?7BeC`7Eg)R*%~%diHJI# z6&{rS{L0W0PH+xvvzx|DOSGi%Cu?1Fd7YNc;{m5d%VK1mih95j{mT&q>yJQ*2Lwi4TcBU(Wz|aERv&2ua#I714xH(134c~GF~dpN z;9ch5;F^UKvdN}wOuVbdvZ z-H-;M9!+h+No`n+M>^%wNhc%r#&vky)$=B=)PY@giAi@9WQ zHZjN7$8UbU@E&-axh}B65Ct;OW=eFct~IGwXjE_#B&VfYJp9B8Z(A0Et=>I-ep zR2AZ(i(PY)uDp$=6lr93e4-8f1I~uIl+@=i6ZT z{4B~LdOJa)R4WR@M4^x1RZawYe*!Lr;CW>z7cc(`b@RsKU$MkvIC7*hlv{;A^MlV3 zy|+7H%ph>c&lZ_(jMBx6IE1anm=~wO+IwoRnxyC5wW1d_yZW9MrH)Oz;rMcvOXzj0 zNC|fj)hf{;Cp>m|uGV&M4)>5?_x@URxfC=a@lnY;yK1>}Cfq~3$oI*aMuB~ z-2_a|-tU!+LJ_a5Cpsp#pIHkx}R8yqEqgP`OhOyEaH^E$o&7R@YpzMhdS zpN4=Cq1;`dm0lpv#9g!XIwC7uGAc^|QMH|!t}B==a@g<@Bvb8_8+1{iOGn7ycM)9E z48a8I01=OKJA_WwD#Lm5AQ`06Dl`B(_%0aR9a}cFTyC*s;U?l!fKcYofc$f%%U61Y z`$FtzvWXQ)WU?ex=1g+|WLRi_^v3m=8-=iI`OWQFOD#|~)aIb1V%EWiKCAfnE<_3a zdWj&4c!K#FBB=GE4T{2cx?%JIvztHh^9w)=N05cCknW){p-BmQBWO=ZCbX#u{Rqx5 zVCD!SBpM!|9cmZ12JEEfMnpj0t;XrIwnZ?JUw?<4K!R48U;@DzP>hChci~OCdc{Jm!DzjSG zoUhuhzR7ADz|edqn=@2YaKl2ksQiIg6l>PRiaz*-ms@>Wzd zR!`kwe~{(N2QUy+wLc^f3O0@dNd|9w!LInm9f&Y?0bA`13s=x_Ia=C2LNYK4mI32+ zU%l?3i$3McM{agRdUJmvRM*6;Im#6U@`HK*zgU~OMT z(PO0`WG!zJX7H2lG0X(S>DI(h3I@XTNnr%U{lTP5qY~!+^9Td*mN|qofY4{F%HAV> zK|fY(BYfEhq1(U$qk$fu?;n89q_63{(XC!VT6cWF%B&mcV#uIJo%eQBN5Z5Hos|rk`<1Cjngic-uwxN0l7x^1Vq8#) zVeb_|g0XM&QzhgFjnm9+_=TkJpfY#Hh^5v2xp=tFnNcG`A zNLbZ`t^`S=Xwbfp>Z1QPX!nlGB9oT876$Ej%+RYI6t};)cydO*-TVfyFGMUB9Z&17 z+(fe+PZ#zK_MUIw?4C64z4h95%QUO-r#2Hd0j#v`!@Aq`<`pl0;T^f9*BYxnD7Y_y zwM6hiXQR@1We-RF)X0)BPk5VuS>CJiSn8}Jw!p2IZQM}ocjDjazUg9cb zW8Ck#C_R(UDQy_TYTV#fq9ef*Y8H?(Uq?J;dV(uq`ZV?pmP9>92FC}PdX8z=1|73B zK3fA$?QKlg>Xfq3R%Kdh`bbfPZH8GPMZGvv$#Xg`0?H6#O2Y`z;)w{_{A|aVhY^`J zeooY2Y1cWRB+x7ef}zB>0rD8nj0Pqufe}m6eHTi@My-<4Z*Dp4F4H+e+7}GT<`JrL zDiP7Cn=%2OTcdEJyogFPNHg6NRu-MC|L4+2&Y5py|@+N=nzaKGIVUiMOQa zAfv>RhEPP#)o8+`w@S&|)%alY&}wx?K8CN4_8~q`=F?1(W=dePhkjh3;5Ov>v zc>M#)5D`^d#Hor0QdPCLoIFb{!CKEgEHEs5v-Z6b_-Wi1(JotuMn9OEO`JaXNVO7A z5_uQ0@LK-q@L7U1H9_(f#bw7|h$-1Q#ntw3!i7^i3m-Ws`RIm5hBV^R%&c6W{l_EY)(Plb zJ*{Sme9!<0j(HJ3tbO?Dkdye+5GQfqopY&k#4Z*n&jnXjKs6^qddoP#_%-?d0_|@U zIwex)2nz1%I*0$S`mm8?LG8mK^T_1V&?xB&090&w>)ftWl5&7SrF>!t{ zO5=Sur$bnxT|8Xy(sRQ0EO?d(HOH@2V&My3jm&Sirn;;;l8F^zv`YPOKk<((WsBJ8 zrm%KfP{IT z!$QvY`I_dCAei0(t5d)Ui2$1GwHjPOzW#F25p71&R6Sb3Ns;l905XRQ^<*)3~>HRR!X?tZ4;G zDvwCvjI%N9PC#-bYi&(-BF z(lw28AU}Gim8X1FqenKX-CU}VY9uyEL-m?-@+K(46BQ+Heh->cEGh2BC}2QDxwVmq zukCplmJX8fG=6*dLtsl& z+p|X{05e)W;C&;flejC9Ll7HbIBG~-D)}Qrr&~8hLNj49x5iG+?i00Jl5V)4w7uozJp$9N%jh%SrYX@9T;lQEZTG|Sy-2+~O z8OY)n7tf6#r6&TT&geFMG|>SE6MlCb#KckQj03d-sMAB{ArS{anqL{9-g$N*c!Yua zit^Fb_nXf1{fABoBq8>p;>%{QtZKXMH#EoBp2|my1z>#_SER;e5Ieo9mC4wBJ7?DZ zBabqCm+N4rhFU(bR^>STC}NBe@BS*jac50mA#F6aE%`E^Ls5it2-EHxY~6c)=t%wn zl6}%P_iskgL}bT$-qEXRt-iyYcXL-L**2gpamf|!K3TIwTtpINg?yZ;z1Swi^DW?W zhtDFu_$@7S)ZEuliHS_o)QFVURGym7RrPj}Up=>z(#l<=%<>Qc{8hP-&nojJJZe9e z$86oTzn7Hgxj9DGulG4VokzOzK>)QJ32|c0O%7%*q#InQhNc9$Bj?Y ze~s5sZ|%87b7Z?3_0T~syRQ1(toPzC=UtBogCCv^%3hfQsMpQH zm0J~$>OR^jf0c9Pra^Q2Kuv;=A}s6rL76c#{P0K7qE2ZOlfP4PNtDgvH(gq_aA8K8 z?@r&V61$ObZ^<*8uo<0;RiaC#$L`#1w7cy zvdG<^{|s9fqEV>{$aITrxxDho!k|ZXMDhLY-8UH7Y|c*P3l?)yEL2i6d4hO)V@>m# z-h9QezR$@z4h)}j^%}Z_7Pm+UgE;TU7oT1!FvBMfa!d9bxv6Tng)Yypg7te9g8k4o9_EgVPa}+PVH184owbr-py+yd+$9 z-Xi`Lyz2CQmjmO*A#&CkFRqCD^2dD%V?Lt%R{?CF%Q`LS!`@w=Qk9X>)&@OFnaiPB z>%Zp9!TpVyv@<)dbdu%)j`|A zT$s+4$uV>OVn*S`cFObc5w1FUe40x_2f%nwTKy&bo;-==u7)v9E~9{}&ZZbeK3P|j zh2VGfV3!*jcnw9qR`oZpr|6p1pUC=?*x66MDK!wgxxD97Bx|}($G{Oo-i+nCZqYd9 zAV}uMD4E)PW#L(HWII7l(_x2n$qVBoFvFPHY?YRG5GlRD;hFo8`f|dUtJ8XFGB@r? z>Ocy);^9k&o>uIs&C@z(k?#w0y-PrKz^=z>*9jxB9da9yKIy6`zaP*pfle_#(IL6M^TK%IIe)mLn+InRK1T%mSx|3;OdaKM zzjm*KR!_GNehms17Xp3D;KB{T!xV!iG-8s5t%630#qDAJcf(c7*zUHQ2>XZC9b01T zd{g<&2CGqvrD+7DU9go8b7xx3JvGiNMnQ{9?tIx^7rO+vUU)*M`<44-N79^`QZW(D zN!0H~(!3fOYIj_94kS5U0_x;jqjcmTuCfG_G?yC3P2?%pR1O_gPjzrIPD`X0`t2oc z6(SxFQ|AZs);wx_ENq4^A}?Y>fV83;xU?+uzU&yGKY1j$q)S3s_zT@BBXi_#cWk+n zzQdY}O~vVb8IhBNR%)ki+qgKyyMyOTulaMqHc>qd-F=O_E&MlEMB9@y>ZsWP(|%7s1>6RV@3q=oQOk)t&+%0$)cP8B$`K1=<&Er z0iERGAl4q|kXxy1qQbRu(xzV^?wn6BwY}A-Rl^!^Z>VNf9vKB0#Lf7s8f=DOtus2t z*D31=!(EJcee4z7xFT(oAz_qk3;UK4Rj+^ei=+2wy{hH>h1zYxk-iG6v|CyJoLf|P zT}2;pcVm~pLa_3avb~A>C$MMUrNdbpUmVj7`=xg$rVNvY&!hrcy}K9iPd2>uH#f$e zq^AdSWx~Vwum}T5i*vYl4`zn>wS#Pq^SWn?Phdm$ZjL-3^*tow(h&P`Wl*+7yA`q> zHf((p32FiR%&FFo`tNzh)&XD3_1Nt>F&PK4@FUkGYPA@$kc#t2lYyGFs z+4rGc7uKQOr?w3(C+nBjp;2!dx(s$@GA;!3F_hy=NXLqwf6}{&81?F}cFvn}bJktk z8s1es9oux7=@p%FepQ<^Zno{vR9eh7wRhE9+Oqhza^8p_dE;zK5g*TCS3bn5f5GO* ztA{`8^?^O*%V@F-WmoV0h-GG?b$#F*fpDJC`wX#}+I76r;e(*-m+FxbQG{;q`H3Q<o*R#DEJ3{^h^_7-2##w&@&M zSI}ksqs9C4?Ed=?4QcAo1dZ#7qtySrK!05Qe|;HgBSl1c%rJeJ|KI=f@4u1CpvK8V zI}Jt31pfaH^gaOGT`j*yYKnhfroTS`ak&4h6DbiZsQU9f7$t!KBV{9PMyz?^ZPjA% zjsz`78iv!jBkAMnm*yYWt)e1gZLh?nE_a@@XX(+2@e=uf1CpvDPIYLJ!TlY^fIe#C z?o`Ei(8!a9HglD#Da&BOXGG_99J-k-H{^X(ZWw~joo3H?v)tALrF!$NDhA&Ves@U| zLxq`1;+?B)nVVEF8`{Sx(ho&G7UIn z3QcxZinI|A{sulw?0npgkeLslq)O`*cT;OR~pt z9@V28VKDzpWl%~y-dV?FN>`7F1GaZZgT#7Pqg7U30*)9jJSQFx4mUe)svoA4*`$Aq zO(Dblu2&DhVcp%6^K0QE>@YuW<1V2sBB6-cP-V_x$u~fLtA0gF#?*h%g=@^5l?%L zZ0nZx^*u+qlL{)h)AtQozCHzWF{44dlv}Sh=&vV*b@1J(0Xj~hM*xidZ3R&2FF$L_ zJgpt48Ww8YwzRTl=PxH~Z455Ql6cGBP86FLYRzn=yRt>}4NJ@6M*>Zt<}F*^Vcxnk zBXT@-jFNc#odiR08sfC-bm|SqlV2sv-gS8OPwalZ>K)ph%&KRP&!E~Z>D@MU2BX59 z$d-C4jo+s0vUOn9c<(VgzI3IjjVgFOk?Pv zh_BD%CwJDXA>pHepO|W{l8%T0-cpsGDe}jOWrBT)o|xw_(VB|wTP+%m zMzufIr#qleTIK)ab<0*my#;7KAJDorqyed9LJPa+rqUq7&(8dt3ZL~a@b4tg&g&np zwE(prFOd3{rFjF;aS$v>sqPC$nS+tG9zW`JrhrK4W-krY3bl2saY_$Z;NW_nqzcV1 z;|}Woa!5MpT|hiUKOM8KUQ~f09UlTKC(A1HzS&N~&jIG_MRfo#P6PAPt3hBqo3xVJ zGNG;a7~H)d)xt6_f(3^GR=`!)IPuA5V*Ur^8Em&J(BlW$;!CzKOMd2{aP3LHSJmd0;j+OjE5CQn-EI!y3R*7 zqx0JaXRmEsJIE4e7f(vxJnmXV@S&btW?haKrh+lbmw;-IH5S8HUYFmpcmV>Sb@cx= zcillved`tlDT0!KKu}t!B2p5i_YeXo5I_w|6+#hdg0xUY0wfT+iqeaM3WCyvNKu3U z7D5q0szB%xWBn~-pqafzx%>0oP3wA8zk#e@ z_UK>WmY3d9j5yeH8E=k$cCy@0mef#EMt=FA0dPFN^dobaCi!*bSHN4}2LJ5A-m=}~ z@X?JTW!bGr>(RAG&mJq;ZUMd7!x}4*oae>kpQ30YKjWVF=nbqEXn3 z33P-W)HC^)!_iwV)VLE$19^48#f}YccLvHW3;rGKZ^TeyTrbJWSeBiiWOy>o@2H{D zzn^`wwCP~yYr}HbvWtgDX&u0gX43Bz{lHmLz-*qY{l13IFh7So`&Z>)?d>GU@@@x2r4p&hv0 zYMkXo&Y<^&2Jy12SJKpZ<{QUO=r#53#G;nLA>ghHar<&ve{rxSg9W#85E77T9 z(W|#6N{3ywcYjPr%ZECw1FqIDZWd{iZlw7J;ZxLa>~4pNDu9oY@}FH!=PmeETG@H7 zoTAk*1T;BkIA;$FzpeY~8TaNEY4q>GmbX_xW#%i3k$C&P3B-!g3Q;HdBjE$#!PR~s zu00|aS=75x(AX>mN{STaoq+ByFr{|&SB~!1D6sAE_ULPV5{29S-RbAEP*NMeAog(d zWm@Nj(N2{~(likr>IfC;D=}H>mD%ER9*O<7J+0hSr~4kc3lN||P>TtzrvlB_+B-Yd zmu*Of;>9(Ptm^k)HIL!u4`%8g)J5N0jX8UF?6)zjC_#Rb5hqDnFhU1g)D^$u3qb{G z)xG7$E=&sl4XQ(j6oDpBy+~rv{q}<8g=teF;JP}E72dtRPB-G7C9Ta5`hJ$peA~3Y z^z|!1by^hD8gsmJ|FlR^+KOvtk8_@NaE7vSP71>&1h9}NzGJ(iZ*7wH94STXO@CVD zl?()YT57$>rv5!6>Gd>;Nvbr{m&%;YQbcmIp(<6pe_3ndg6?oFrN7~q|J02@z;8{S z{IHy!SWVCqE3hyFZW|cAc42+|+^FEw&ETP-Q4Fa9o2Xi3{0k(7X*S+49xy)O4dj4R z5{-r&Vg)ghC9KDYg71ivlGPj+@hs(h+#l&BgfYX|R^t|rZ;_UzI_aFuEJ=}Bg36yG zPlD58ulWec+WdJHguYgKF@v^-Pr0+4k`(GRSIG7Ud6c`~1OBzWYF-*ATcDpi<$M!T zB!0A4_nz0zh3N!;S`^P>vBs2iD+G}$!U(8Wl6pwVJX3nJ%*$LzCx|(R=}eb!a3~6>e&I$e|ledOWZYga(Om{+ATE&xix4O0Qf|EV*)VSeP^6Q0|D=$Q)r&B z;xk<4)Bi69?pw{Vy}jBow``$##6*XJ4Qj(6CCb*oIO zr4h-JDnUIunI@+?wmt{wVI$c{ec)v1!e zop)Rn6W%uLF1C2Rp2U~vuA3<8G%*Sqo1p`TBsn_1LT(DP!vP~>@DWN(-;0417r@Iy z&TAbrV65`09%{N6uu5{(z=k?g<1((<8wqLyd+w<~S^!_IytRoEPR{~KxJQOq4L=8b zM0$EqS?-%%=Tv>$kk@Y=jp{U0b?I>LzOQD6eg zZ=`vNnk_xn!?$&BDL1YrOjSnsQ5tl1NfRqvKAbu`T}J+50V$>PE-PgFZp|$j&*Q7Q zUZN4Ap|3r~cSdv7nhTxl#kO5Kp+BFj4YX<11o^FSte&5kB0!M5toyL<$wKu~#E>mO zpkq()#!?2LInI>a8B<`Ph4ABdbJnxqjSmW0C<2aMTb)ThE*`6|X|f0nKA}~D!2?*C z36(u;^#GQHGlnu{>%GMV&&k7Mp7WWD;!l9}lBx?A*K@Y&C$33sP!Y$n3uFM!$rE~S z_L*DFmy!eUJhc2Ir%Y4InKzQ zHR`g4%JK;z{t5C>v!<1WI*J|M;zW(h>wt=NIi;NOl_gav6bTp@Dr`XfBoi<{>lS5P zCm?A9V{pRyel6#$%H?kFa4 zN`wuD!g+}Zlgwi>?x^HIF=JDLx``szrM0m~=0bOdgnE5<6_jxPcwLmiR1mA)8xu8= zi|$chfTq_A8oiMC4clE(9|+2UV7o1P%tv|)zXO6*Kc}i{?{p^}S8cwmqbej#x-sxP zf(~zx7i`q# zmWWHLqOIZpvyoE;-Id@vJm`dPm6rC{VXoYT0>ZB(y8W-x%n0;z(;SWB;dE@B&+c%9 zTv~dWEC;|^cSrEBD1z!XE$#E|3Zv(Jo=D!e9=!~LnemIS(oIlO1te>RBZGd`0 zEV$O9$m7}KPpL~>?OOemStKj@v-#*oNA=rQr!0{;8_O`kr3&B=A9Ea;EY5!4r|M%2 zIWiK~6(w|aO+`esREIrK&q@y96lcAvKIXk-1GObwL7kRAU#CBN)-mb`B*xL&z}-=5 zzKAowHx^vtA}g zf6d94A9EYY#m|81ZWd+2MdlJObiJG`+?c-psTQ%g+N01ZD0;RTQRJ12CAkvj>DaXv6|^DueXbAZO4~O@ zuAk=}@GsjZl@E1n9hTlYH#cv1PS7z%VA#cdWK!I;%~=t(>N> ziof6I$gNe<7I5axOON|f#)j=?*7IzI%c0ZX&;QPhl*E6yl#NeGWrP#({3iN?GE4J! zG|NhUUnP=F9&E;r_fw4dna{eNDVe%?aG9y-o=!6N<_kkEE+)sIR|*h`0N&pp^Fmgl zgl%#$qi;9k`Qp2dk?$ot1Px9xjYC5XOk--Q7H&nL(X6(Pr0*z!kFR-SigtonYo)59 zbE0AM>N(z+_03GFEO%7%%KH>Fb4Le(ru%+nQwtw1>Wud}n+|^qzO@kZX8Q3eO=$69 z|5JhMT$E3W`12RT2eGw6STpnVdNIo5b&a;!XwXIcK_rV%?dhN;HA|T;RS=S05ViNM z=lh8bq@QWMl*NWsPD=9fzwT3c zmxapfwTH=(V5~a#Drxvhv1r*;toGjcxqhd$Qo#y9l30$B?LnQzFP!XoDkr`e+kLBI zg!+`Mr3^ejo=hZjikWpX3kSSIG2z1UR2-ot!vBUyZ5Iw+(}aK(M(IH=vtD( z=r{K)v_3^G-`nrXfGPeWQj@jIik6aRi8wu*yFP(7JtcIc`OyYXhPx-AqrGERfMKs$YX8~fHd=%&f1 znK}2wX;tI1jc|{_NqJSw?EM8oYYO?`kWV7&Bmn4);^}Rz!~I$d1Y#C>;bA<#$RJWD z807?1Lz70^i$d>z#`(5`Vn|f5_o$Z~rZa_I_xxFJ{bj&k_UsHiCzu%Efp*(UK3gJ} zhP8uBCSKu@`5~FVL-Tfyy;=dV_J-WEHMjb!n?H1NbVBV?(09_*pDihkmPu(#9o-kb zsUa%tSPEMK5ixmUEp4?<8nBAR*Ak=;akyEV@|qyeDt&88g$*~}wIhRI#)x|aQd>K( zKgLhyYWptQ6mO=v#T4W8K>run6nVV4x4O%ch@7)}FsaH*k?>`DA)XaE!zPcfbv+va zD0&}tH3vLLj^u`FD}z=-E-eZ|ZM4=kbju6}PuoSVxkEcidJgieywvKBmOn%oZ!oR$ z7=t)73|08WX|r{UR}kMDT*Ov*w^1Aa;vn``THurL6$pEhne!CK+G2Gf2+hNk-z7w2 z6O32W6k}U!v%hqR%r$`8yK?MiX@T^FHU{91q{p_`;eKmljVJQ#34~(JB{ye@j3Z9h zK07_&Gcs1G8@7J+$oOGNRmac|!9o<`(oBqQ|F4tS+uLhX66X!pw7J!Z3fQSH$R6aI z^x3p*?x44<<8LwudE@&Z7$%D}uQ}Y4r305%4rYUMx*;}Cv1`L+L!FXkBj<956)@6M zsSYa{B16>PSF`sj9p z=F1;nzO${E7cVz2+P_T_6BM5W$}8@87M5(pt?M7svG%r za12Tt+OgqZg)rxbe3~m3Fbvqzy)%FsR$O3|SJ}TiX8x!@0b4er8974=;X(6EQ7Dv4 zBYqG16BitvM3qwzsrbRZW4OvP_WBre=05pNk$G{;O=E>JQj~r?FHePfnXT%iRC_p9 zs@c83_^oA5ESEBS+Ff+<6~p7f;8DRGe#3ah6j^nq=PMVPpcPkgvo#4|8Pv+FXgq+W1oT}J#8LDCbi*ik53Ln5+~_H5_F8F`jpt!*oc#q%32W-^F|q4 ztFHHDyd$qUp%T~%h%~T)fO$K!j3)=Qj^EH0t=hHi+I-91K_(vav(&~K_q|L!cm#20 zVwh-G7}1P}SaE?ef-YgC z2g_0yvvn=}Fee31E&H*5Jl{b|;AyOn{Q|qD?mTR-K7iep=wmNdUb@GYstWi}&FLFN zpQ>e9sV@jgwS;$)v&+j=gvt}4Ca=gPEOpq;(VEwWJZxC8q_~RqA8$^wiE?tub1}LbbP|9-(Oc;q&neD zQ-f?pilk=&Q{6-(39pcI`$d~aSQd)`$sQRqlL#{r2IF%CHJ*_cR%)}Jm+jOxLiy&r zzsb8kUTRLk*B9L92{9bp+n9yP9n>OGI^Us;^hrb8K} zBKN*IF$~V9!&(RCBnUc8@t&Vk(n;k%xURs2L^NDLqPp$#oJa8=;*C{j^P*fz;(z=S z(AOcb`z`~WQ!-2{qIcjUKQ{?2lhyc(S*3e}c;;;>4Ro0T&2=NX^EyO_gKeES>0T*+ zBk*ujP(1p#$?1T`@{)ve4^B`6zuc|!)-SZMgbok#01 znQdT=?Mi4*5c4Rt+@AaWEO$Lxgw0^WfvX@FVUKHADacsTLN%??b8r-U=#f^z(n|)t5E09Bx!@s=K_4(q~YGZY73VA>QFje!yI7^i4$^3=x})wI2(a>zdO@E8j2u zHv;CdK9lidKss*~ps~`JetnMnoDXp95$&bDeBRo-e4V`9hi*jqB^096kCRb1e~imb z6dlAU5dLRee@r}OZX`rSE*@%qm%)s9jJy^YaCBBQupOX+C7{nBlJmK z3vlWOI0ygd0rs+xIGgj7_P@EHb^+{8@KWbbC)8!p|JRX*cVCN#i7~iz+8rhfWE4w(v2Ta8h6Ov-M?RN z!gl_JSe&NwB&VD1+BqMt>|vz;SWH`gLx)C-xoB@h?Jx;n!InC9%d!<{ho;WZvbk zk!E6?K3bZ?^9jCU!NwF=WVL24#K*&%PY^`y^*uuFSdg0wKf+ST_F6;vQ{8n&#yn4o zv*G4gHj!_>FG{+vFqS)bx-Q z9x1=6)b?<~d4qYZbk3!)v@m(s7bZVuU2Tm{I_d|&I=tnwlBzPnB2i>-S-WrFA&F2l zyS#U?ac4q`@Iie69)lexoFJO7sm+X2j!j)IBv>i*B`blp#-7Oq`op@;TKxvyY;IMm zA4udW*K)}EYX+Qisrsc$(eA4&#i?<4m)@8oL9 zEXpUqC%^(BVrFKRc71FmsdeYxpUr_!GAuUk?#`0@{GOhke4fI5POjGcf)WxE`~pJ! zLPEU26TEKTj_zh&ypC?He{}MzpF5Ur7Ou9=?zT>j%$R=7%$+>kWms4+1O4^$$2={) zZ2um~(e2OI0$z|GbBAA$Pk{fgzJaFFm~SODZM`h*_3zj^0OSG2fQX2TOaFZSw>y82 z_>Y!)f43AA6cG7m(|_Fh-=;clmag(n4#1f1kiVDa&&L0}`Da6Ee$1=?gA{+z`RBI) zp&>-l{C_PPgox|=dqNOM7Nm4X?tvH9#uPaD#@(^wUF##)a2Zdjf z!@{G~l>OJAA9w3P%KWnaIsela@R20$=cA@$MDCv1S!HEqmepn>(`49{u*Ji-CebHn z#`2Vp10M^aZUq~S)hxTK46vV?GvIsuZQiNy)42)H zX>aR}^%clbrE&Sw20ZGf)Af8N>lBZN`L=cx?(XhQw?+&pE>6-eXz844T9p^KdE49TE*IxVt#_%7C`XJujr@+k zF};x|l@Y-wEt4|7HzWYpMFDRl%7-{ZdhI36BqQ4sXTE<@X#K1dtz|&lmni0T&Msiy z^m35>-Wz)TBT*B--DdH|ClbD%-E|(&>_jcxXN>t+yJ*gV1=NTGzVbou#H*d%1tmKNT^eQ*~y% z>4`+0RF|f$995(AmrPFC9DHU z#b*P1&X%{4#ZOa)*0a&l2$K{DLbtYV%Re8@Xj^sa*yH3ep4Y$R@E~*DG36j5*T@>} zf6$wpA?jpQYjSRkt}U;5=wzo9kU#xUcfxn1ditvGR;6|MfoAR0nrqQ?rQ1r2aIbW< z)fK;;5GK`i=1XZyCElnL4`UO5C}L}KFRx!G|I;B#LI&EIk&RYI*Pd3N)aI4xB;{p` zoS=-(4ac{Od)7SmOU~Ea{qn0zEC+^)9r}y>P6yK7SVYPkE>Y*7rEMea#p+68C2PTPuIi& z*$s0)X;BlKqBL-=o))lPI}J38un4ZRux9CBhWV=8aR}eT@z_lPJA)yO9n0PQ!@9al6bQG!uH~#qkRCf>zk7>*WXe7cGzMa<4l1PE7REZq~s3 zAxD#LF3neUKcA6a6XEQx^X|4YrkFY3@?3Z;e>rTV?yxkaUGQVh1^Ngv;A=R4M_*UZ z>{*Y9%sFz@BCs1Is3k6?4zs!>(E;io2NCEb%%i4NMeMd-!z;wtg;peeD+a&J!o6$fKGS znN_Xav104Y&9eoj3&n}Y%j8Q|%*o}R=#!O96|OI7ZoM*M=>1G+`eA(;FxX6HXN_}b zCl0Cf+kWWjk5552<1J=;_2+90VFyDEIdPEzXA8E=6!Br-joCF)lY_mo^Xq)n$2T>` zXDs85;;eWyjq9pg8GS!LO+YkR-XrNE#GVg8ZI*+JS)Y!Yy%=?AWssV1RoAG#VNyQr zWA{WQh8VSmTq+q{;cPi^N7B>eY573Uk;*)AS~Z@egS@oLF_gziM*6 zraPd&AL+NqDrdB`B!)Oq6PmG3gY|nRahR_|0JEbhxKmOIJ@Y`}JXK-RWUDLgt~d_fpLB zs)m$6m3KIK!oi_3rZZv=~ngI#Nw5A zqv1>r&!5(la3haf#OefLN5Gcx?qFKya5B98ptgW_ZFf1zNgZoNN7v}qkXXEVtiG|& zYC4>6yJ|fT9`NbSD!Ae?*S1~Gi^E39;Su6OW)ynzs;q-8*3t?DK_4&dR?nRC9q5$6 z4y8KUHVTDiI7k;`&(T}e+v+Eizyg@B=aw7i7`bGT9^6AbCq2K8dgx%>PT`?CBP&w? zy{~ZA{l)nBmH#vS$c>17+r=c6r#50!yzz#vN@tr+0TJ5j5^QWAQtq!PFnT{Oa4K{d zrz(Cwz5B+Kr@wp;?^J&+R;6t;zU37yh16!rfcer7M^s%tMhe~uD*LEyv@fzE+m-IE z1u*$*ih*ztxRAc>qW9vg*Bo42$?1-uZxa^i!V$jwG7(mfB{H)DyZnGw5j_irDh5&E zN06L~+o0D?F5W{r*B_HL%tpxKfh+0#()^I^wt+oQY1)KMtp#=yd;QoUJ3*wM8^pma zUn-nHoQ@#+XI~!agK_p=i;i=4e{9DhMQS|S+OBU9BAze@ zoffB^^Y|m9(>{k-Pg^_J*GJ5%)rkZZ2@zPmZIJW!Bz_tbizQtQJBFM*4!pgy*a}6v zNG7b*rU9qK5T7eV;Toa@z3N>@#pX{@iWgFN9(`kcxTTWD<*K`re-fA~D z=L2vz0Vb6%veS-5Tqcj!6AOaG0WuzDD|;uEmLy6v{+;CcU?wECOzjcAy5ZM2@asXs z9=~`L4!MZM^)!+aP7WNc;dT(u$bfBT%CNTt*33mCb=_OO0Q34cg4^$)*jBh4SvbKk zlI2X*#Hg}o0mjbr{c%oy3v^s;@ji6NNfxI^GfxI!HxP4JO`^mb>c{D8aJQ((4 z+IL%RDV^Rv(i99+m}YcH=){7av}?39fSHol($3$VX>F~E%AvWaH=|{#H^X4>gM^lt zZR(FkXKd4G3U?&rD8^9=(9`cF0ZWISz9l%p`il`qwjsD|V-R(K=W47$6%~B2D{yrP zF6+cch^9^4Jo%Vw=(|~(W{xK8Z zckeRE%EGHu_YwQi`|%~6c~l)rZ4kCcXUJ7LJo(GASV!qw?g+dy6{<;V^MRT zA|aBSOf-e0vmt~If$qTeEaLaujWBryJDL)++{?;LRX*nk0J~l&NcIn0kSCa3k2E^4 z9VDN)ZgX$?gc0lNS_0(RGs(|0%iB1_0ZzwBa*4LOi{xU5_mQnf1l+rf4;MquX;2W0rh5Y4PsJ6+shM1uO^K7%;X8wxRu&|OZLo!@Xt7iX<%JB@%VrdJ^3 zR-Q({RnlqTI^hlS=`{4Z;l+`$=5Rf(VES0|Kpn2j!vjYVScZ=R1QT*8ah8+?3$iG& z-YC1&8*n)q>T~t{co>eQmQJwo+2d{Gd_8n&u3v?JvrFFPd9_yZTplI3hwGx57D?n? z|4CfRn5*Y=X35>Y&svjug6B7TN*;#G-92rs3NOxSe{)o25RRptUa`+rNh#KpQ^0^W z@|t_ro-aON#APM)IiFfCDW;cY^gb7U!__jQF3~TPA=xn_ECNv-`Xt8O&9eo;a)KVU z!AgPxUnT)L6N}L@^C-oz@+d?0h*rPgbjULlsFxX$yu8_Lnyy9CHXs>}<@3ys%DVYx zGf9%N;BhWxF&+2aw`@zXK({Exc z+DZ+|2@V)7DQ!eku++bVDvm?!RoJCU9!qbwhGO)0b1yY&Y>t7 zhbn@t2jR>XU%#0Lru0*Vln|Zp^>k$R+Ga1NY+ntjQg$hxsyR^>^ipvsBH(@yPIoKw zP+7_x`oXwJaH8=`MVQ+Pc+PLmGt6KY34fyA1+a2wU^M2JG)rSl{g{sQP*L21!vV(+c_NI6=~|}2{O^+ zz!nSHAH;9>6_om_MPfYQTaslCPa21A#`|ywlV=%Ow3gYl4qiIY#6@s#aFlqCU)_ue zXf}nUPx)@w-fZ6ZI5?cee|Y^g$Q+b94q5uha6fWG#rp%(r`m%20@z_WpzEbKp0+Vf zY&x2unlE{2LtFeKuA&~1>nR^}`($ayv49eh`nXe3;H4#Dq=xYrwA$dui?Jh{^%6Y8 zG5&B`hOFFvv1QT8A;~rlbcxFN^#G<(i1A$z_fiDxwECRN!h# zacI|;=`~U7ql%`$;^+}7YsZL?z7n6FDxr`d;mBlL{>#WuG>1LEu zgR5+1x&-E4IT$}QbZHjxeJ(s?Sk<6^zoS9>hPZaeD{#*&GKPi^Y|3@HWk3Vjdg;EK ze>-%2LDe(0^6eF>3k!B!>kNscj-@+`@d1WgO(los&e2vii~FU}${R0)3v!ZB?Z8nL z6b@FAcU~lc84E0QNr@qsuHg3cQ-_?pZ`1N2xbU4;NqDRcxR|W%BZ3?xiw#H$=Iu;S zk9-g`C5t*4X)*6;sqK^8lPxXp;ac}dNcHBB8oQk+2ok8IiWdq<;m({%9q3n6wq9B7 zzuaRiY!|2!=KPVQgfL@H80Wc)#aHTnLE`W+@t9az6~D;U<0;-`hKz30yL2BmcNwgd z1RT1SqUu~?)(za?SKxq1pvksT& zTG{L$H1bfSHpxpAw4*>8J0BgZAK6TFQJIT^fMXMHsj1r)H6K;MLX$X7y%|o6U$G-q zERDRaUzrSs@}Zb79jK=W35TehegRt*@4QbxT-Dr%8h&l-!aF6hG7wM+IVcFA3JQ6^ zH-2ONlUl)!j8(C-yuq+qz&BMQD-Xet44MQ5axyjBY7`R+3)be3+KeA3LR~8^vk~sv zsedb(zBS5tPE~Bu#u0ztm1{B5fBzGsb#)=5l}-V4?*>E8N$ZkGiQTxw`nJOd`>r4G zfEGG_tJ6NPGvSqWGc$ZTVRJpP%^+C9=`2LQ z$$Ub8YRFX*Ng6|;1T(S@EG{`hd_r6zJx0!qr@}_>1L$*vDtc9VsKGV#k5`_B_zmmS z3dqiZ5=%(Xw4-D-rp~Rip{___Xm~tM05X}{f2BTE<)&U6tEDAZk7@?9hR^-8$O8dI z=3a@ux6n@L2?Xm3zAb&ih+{;9sMrb{!M9lf{sbL5ftTi{ikd-OYq(O!VK)Z`vPUAQ zJ>=oRSUPzNT+M;-vOF4rx2e8QoL4Uy50W?VPxl^5n8=*psA!fA^D*nwt}QUacOR7U z=niH&=?R%jPCc7{X6H#Pin~nHCD=BXN=!0N@IXK>=Mw&W6LZOUnDiCZ#&@o+P>OL~ z7j_x7m3;N2J=I5RF`YN`Y;+B`v{T}OsMfzl%L%McWL4Y=k!&YkrL}Rj?TO;c36X<@ zoUGyDoY9<7e9rDMP**^6DjeKqSYp;cKn)=%409ahao-ZqSbkdD9~3-dpX0!a9!?yTd&hP1gWr)0a2Z!BK$1N5^@(c)$eGL|oZtm68tW-XcYH&VOc z&m~gGw(Wfr`v@T!JzTFN*6V;Z)ZGD?P+}w(@=TDUb@ujHv2IgEfvDt7%TqX21 zwumcYqRzuWs$oh1#X~CdJq<9GH0z?n<6|qlb!(>b5@u_6?5{ z77k};HU4BBHjzjQ2uBe=hlEm`PFLpT7d{^Fdy)zoX_p-(AAf62?dnB3vE|}OdS>Cb z7WZ&N9`qc#3Uqt!QNWP1p&?HAu|wdR94ONrH`yd=d`PMAb(#d{jJPB$A@~YBStOY& z*O&v`?T09<`E0fmMP1f&BaFc4$P(I)vRM~8- z4|a%R!sn(R6;9yd^Va`tFJa=xq>KN8hlI+G`c(yj@Q4_W-u-B77jmt1W_|6}j3r!N zzuj&#s#AG7JAT|0oI2#8lOlT2v(lVSk!4?Ua|`F23=bzOPWAki_jj$Xn3*uto66*b zU`eDVe9t&(XRWOyf8xPd#O0xsA~b8h$_={xs7~ctPg(Ko{aVPhMOk-0-y%X1-f%iP zV>97>kv)Zfa+5Ds@o4l5I;Y|>YqwQax3$On$+)jG*;6yw&;?KYot)?f*ye5HtoSYD zqm zqYwz}x4C8Ie^t}8o><^&nj9mJOEBq>wO6)qul~JM<%TW-$CB0{9&r3gm#N1%JqhzA zV(>sRo7GpT_-+BR*$qx>9SQl~#sgF+oDnaRH03iz}rCzdUU>{=DKD_lO_)ty?8=sL|&sx0TXtbD~*lU_<)#10L_d zB=GIhnQqHmhQ7h&>_gwF+LlALz6#L;ohZ)jfk!$ix#qp>ut^U}fTL`W za?;9rmqIp(4MiVLdU82Llr>)pO;n4bJ|sVVjQ)Nk+!;bExRGtB)x4B+#=w$ruOLa^ zV~W>uJ*Rqmq^?(#ixh=Z%;c7KKPfN2+@RXuRIWWid|P7TA;CsAGKXVbI(jn;daq(!(W=1cC$t`d zqdU#PPolL4Wt3^RyoO6ub*+BMVJDhv)NrkFOg(kyTZ!jzCn%I{C6;TEL}>59#s1vQ zi-lKC#%(yof;1o*y=1v%X33R^8UCstAKf)@`LusL`QWD=u3}BYDdYilf@WGWH~18M zg~;~ChcCL5lvV2Df=^W!TBB)6k}qX4x~3j0Rno)=RIJ*X2{cuex7nW&NRplj>Q^$k^f3xU1{Cb|=C+l80Lad2+EO3dh;jYFjg$g(l( zrGTxt7we6U!SOgdkkp)zGBtztc%}zQLN}lJ?vjBX&-LG0i;;8iko4zw{P-T(d^iTU zXRat_F}xM>>MF~L4kTm8RrxxAeD62R=NAtvdU}Yz#NuS=`aMNZnAS_{;QLJPq@93Vx8DTcnS~7FcMklU>pE*a6O0rY zPhHK*n2PNPGKA!de5yAL2Jwo|p2(aEk>;rYUU$8RfY&`PHfLQ&HYo1uY+zjRrm8pM zcs^nvh~?;tsb+nBa>zZ#OmD~CwpOmY%z<)LGjsLv#YK~-KpYr09m)Q2N(sre%BN{1 z-ez$);H)mwIoTv%^TlV(cmowDkb&wkzKNCk!~-LPNsd4qhs#C2k47267oV3`> z758~gmW??`yiWKo#6vpMIY=fel`M=$MMKnvH6%M^HD3f#SX;XlJS*OcxvEh^qc__O zPY}+kB=N2-g}O~STP2Pu3^Gl8y!=HMe>X=s|3w31h;+aEt(RuAa{BrebL?_7!(r4R z_Q3|pE-UvdV1={a*l5uZ^be|pTmo=|U-idRKdLzefeJp6YjBWYpG6A-L zz+w(`=K2NhL4`NRCQCWALy2ttm}RHQRIvOOwr$rHxZ@Zk#Ji_QSpIoE5spy5P(r%Q zV*_LxJO=BA^%kMf{5?j3D3>rDU1BT(t8szZ&$$9*Y-Alg{NoNL{G$c@%bVo5AB|mD zO|`3MJ9!8?nm@(T(yxfhO%qBAgak3mIYySQ|5&{>lQlInmZkwjtM+fHo|=DvenPMi z1oNNkIVu2#%)O?P$}K8nJA$5hxw=G$XRq7Z&DfUJa9K;5;cGF|XNJDa!Wo_N_3_O@ z(xL)VO$GZGbwMhmtMWEZH6s(jTuYCk*JV)Mc+`e(PjOFO4&x0?aG&p$9Wx3a*lhE} zggNv(31#CVl0}cCDt6054|``o)7E7yFxrV_j&pJt+huR2ja(8-D2HP6Q^LW4))gVQ zEV2Vx*$7zF*`I2^K*e_^<~fl@Y= ze;Xm(Hfa%j*bEor|D0(!cx$3HOpZ~Ep(h9*|6~x)Iyp;wTx9)mU>hhrvxH3i@dsnC zezK6esp^e(8(&CsM&prz@5>Yo=6FPd1o7>=1m>fjjl%-Zp9`PT^e^vPrJ1u6qjWZJ z8!(eK`Ly432xq3ASX+Zgmd@lK-8wO4zbsra$|%P(4wegD^9AeV$3K-%6fn!c#u7m) zCYgTN){hbmVu-&g^dsHaws#N03|;*FCz|;@*~vy{>FxSUuKGzrXZg@ z;ZrRc?uUHV{Eci}8p6Dy0>)s56{;W$><9ZsF%jqQ&%*)@9je!L!s6~Pj0Jn0h~x?Avp-&GgbyHJ!HE^@a`G!ToK2i zN{4ziJFmw#|AzBI8;X6gjhh>pF)60RmK zY1x8h{TPULU|s$}dxI=z?h5B+bhQB|hxMogPNyiXb0IJOg9@SO8%_}(Z&PPM>ujS< z@X-28)|T1Z*Bb(3C0WUuWRn`GtUYOexU^qQ^)?Hav_8$I#y?ff2BITJyYoCea*Q>! z$IkZ>gBXcDT4WO(1e~pyTj0SSD@g6j_+HXkp$(#|j67D?$Ud7sB(dx{NJXf?^L)%0 zlHXp_Ai4d7XXmCu4Z8FN$EWi|1(O1R^ZeZC8Yw7}>1{&rszALFTEV<;U z*_r5PRVB#T8mduVkT&3K74 zZ-z?#tSPW!D}($UOj4umr0QiGrMQnq55J+c4knkdjweb4_Qwo*OF8s zk(SRFqxCIuZ)FAaU$JMd2-MXO*8CA|6EFx4f{wGDu(Zj+-@!$KUT+0|9ZM_H>a~x6 z1wNA|ckV&mba-vbT|ECqWBit!;%NZditMcI9_|OiaDj*yrZ?n>#=()tE&RP(%(5D3 z%C%R{GSpo@YOFZnpj3>%l&`_!J^Hp>&yhzQ+a@QqXGZ-x7w5CL;%UimaPThUrV4OC zHzG0N1X)(1lB*2pPR~ZWrpY904E!Ysi?yEC$Pv;WDB1hK} zX#6p!>-CoSlVtH+yQ(KE&x;I2o4T13k-Zc~;?+N`^gmi*UWZ23w&{^@FVIgt=<2MG z|JGiErSN1xV3NOUBo(7@$Lq`4+hKh(cXy&*)lsw-(aI#18p3q<@|1qUeu9RnY}$O` z0&K}i0BC5h5*iLSLG+GDPX zXIXzvzn0ipwcZ6JW|VJq%@v=>Q*&i&v2#z=iuZFqAmVgWx??msp=_`w=yUrtIITOrk=i4>2bjZhn~2! zoxlRh;y{sKmR$y=KaNGe%hfq5O)u5>a@Dqb#b#cSI5??bl0DXeN z(k$RG9m`%jj+S#2@fx#?Z^qyR&~1nnneEjx9_qjb(1jPI7Aq!Rhlb}8t|(-# zt}MxuRZvine6zeA()ucQ;xcC??6%!V0G|vDyWs&Ul;?_V5q>$z>Jxp(NI`aa008hb z*{w%nccZvBqozAWN~~@_oxhpXe4Ax_gu{4Ag1E~(3)|cQZ~0_Vo9_u; z0O*W$r|4c;A8YxW;WPcI%l5>%WB9IFZs#j@Q+p`1Juen2bolG`w6cmXT%+w=-f8u` zMgq_Ed?Lkrv&QtnQBUKiL5nH#F=IbY1)t~oV8fHg3`^T{l33H7uhSII+9n*Hc5@@i0O&NU$HR8jH zso5P*lYX?F>bs@CxT#-k)qK3WK8kzP*a^7~vJXO-%gz+?h+0W8^+qlPgL63;}W6a;GwC8Y2p z($F4p-F{{P_<$Kao7j`==fm2jE8j~#gWcBFby{r{6by>aKP1eL+I>qmPiDl6!yeeE z8g)r*QotX*m&PBZ!DwBxnvukZH1=-*eV3c>yheY6;=z1cv8yYwZEad5Lxod`@zh9M zLYb_IDU<%qfk*k-6G09iO4sVL`(0nn&b-Kb{Aj(_FImx`4N)E!nBEQ0ME_%HKtJiC z#XVGL`~)`Yo~O!Dn)}gf%VYFnd-Oo5uC9@Xjx-SS7W7yfJO)q+f|c~fNq&mO?&=mdvB~tqhA~L?*TDQs)*mvh!>h+JQsiR?mw>T zWv|d^9?8-w3M~J`0RG(ybA>^E6@@~7V~4Uqj<|8_Y|>MU?d5;pTqEaXH2SH7VP@X> zupZP=bl|c1YrOiRtH=9IFW*4lEmPD z52$C&?TI`Hgx|UMd$=L9496I)*jO%ZP{7VZ8s=G?#j1}X(w+tXw zcOxohgNep^tF` z*P!^)qSge*FcLn+i>VgQhiz}&<)3ck&EnxI{Q|CduFI5rm| zp^PE;m)899V*@@!VUY4(``;BV!AqRw;d=|qod7N$aPTy427a92DDlGaN)W0%~Cw>>K82I96WEn z@!kR8_?5@tW+@!*Kq2d%<07}`S=_R?Ewkxp~0u++Ik`@4AxG8Q|>5s5F#g`MYI+@@Q(as$5H4jBBLV2KC-`xm_pv4#J~HMWc0fMdeUf~v)UL$2Pk2bo+s{|UWtA5&aa&B5 z_pode-ppMSF+a}X9@PKM03gNf`bF5buL-@+j}I>MVH_>P22KnkRATRzv{ItgC9__b zAHVyjCbG}1nQZU!%R&Hl@b%MXZ7)9Hw21>c;ljrVzHqK)Hm);6yWG;aoKSy^m;X;Q zCCG}}Yc=s@=GJCy3B z-u55i)?e!1pHIPO@bEX-q|f;THO0KPZ;@+E>MXuF@tWe_^pie;R%^_1{Bw3cH9;U7 z1PGKQaN7;{XMHc zuhu990<}02+JEDs@B>^Dc!_a}f%#v{_N(z1?Rt=MiYdG9|GbTC&@d*j?Bn4W_Ir2g z0ARr*IMMJ|Cx2P2k2HYZ)`u$DezzGU@kro(m=Sm)_a51+ylSaoPb4jU6VVo|ND1xVe6h(#QZe^e3gq)7!gg) zHCbTx%^b+6iIl%AaYJ<4Yk@|(V(ND8RizNfLTGL0NK3YgC!?eldaOv4T5vU(hnR}zB__qJxEDf) zNiL-KoOE%S@)&6j<4Cn3OLx~v(EN={;eVAa7kkGh;M#p_qzTBOIl%}y3jnqp;j++z z7r!pBcZ1)-!GQ}dfqb#V#E!HNVlOID+z=$TGvW&1`5DTF37 z)#u5|O4ozy1Phqh(7!c*B9SWDNUWH(MzthS-pfG#hxoUqPY&t9^uQdHl{Gm2>}RrBy}_z0%zz+@myNym*yf3OCq_!^Uk(Ic7l zY_Ih98Pv$Gf;yVQC>CA`_qTq=2XmwUm`Wf z`j0L2D5xKcvaX_$=w=hJJ(&1wc5eFtd14wzQWEnoS?517o!gLH6Z!IVO6B~0XNX=+ ze212HRq%6a&ckOcreo`k5N)n^c_UZe{Qo{!+}Aj`SNXD)l)VyzgZA4pw=TJ*{s zy?V#0&@yJ7#vnH3u8mQT3OCCp9_IUo1*|aM95D%iN$>Z`bJ^@=h}CjcgtpxU01V6m z$V77{FSakEDe_egdxsqN>j*hCGZ1PalSZ~~qcO5FG^Sb{* zs=K(#&}T2494eRMTrl48iRr^K8cBB>62KK+HfEJXIr%ej)#^1*(IK1HF5trx%&R+H zJ02gYi`&X|MYeOa0<7Wm@s!G22E>2th&!vaoOXGYR+vm6!KWLecSkFr?bqyb$W2Z< zbo&RqsZI)dsJkF1dubQ+Nsd*vm|Pq|r|B9!+w|D^k^yzML#33s|Ij1qD1L|r-WFIu zcJgZot7071A`7AV98D2}n%Yy;QDCK%SkOh-H4BoGVQ(KnC_=AmOv=EJ2LWa#s`UJMxht;Fk>^Tb% zKCLYxR&*r9w(X$xDG!2w^K*vg& zX+e4Uu##5T-1xpVpBks8w7&JZWVi>A`{!AiHe5&)efdGqN0T3~;tt=ozG0c#7<1D~ z81w;D6DBy25xYgP3>Z<^>P-5+OKR$Unw8INuxbxm9Z`mkIOC(d;uw36Fz_tmuj9fQMM_PjMh<{27Oj_T)NXC?M z?KO@DGW3_dCWc_PMYDq;-AGIt^AvTuWZ>;_F71rZiGt}5r(cGJUoJQ=yUU-rmPNDB z@|u{h6d7rzp?v97KP8gg7%(uTWgYvzZb?iu>!+L0GdPHye_na)H$Kd$4L#IFg-)lx zm&D@`+X9%C9*~J;(Fd1PGa4S|Gdv;aSR8PYeDp;b+$m=>w{?INEjtl`$DiLfPBfVQ6M!-ihpVKNr+6X7?7{&-b=x^ zVD_AFVsauoW5DandC4m@9TUcVeS9XJfSrHAD~UzU!5a zyr_gN!N1&*&HW*voi>}e3|Vxl*Vz?|L8Pf&92H@$XJ{0672a+aj1FKrec*4Jn=?AH zu5UxkC_KzM%xt?(0w3iNQLG(K>7I|g%>aZZ?rl&Q-`(Oqd<)$a42+_1A*E!zUjw)^ zGV1Z;djzKJfDC1>*#pz_y zf0+tDIa~)(%w@QHX=8e#L;ujJSEN4Y3nqWB_q#%#Taz?^j8{z%xPHE|CG|58^nWBE zk4jKF5u7Lc75SaHdqsa_uKi0&*2|K8*>=>%x!$_`Uu74p0d4=BWNZ01Rtw+7jT8Ur zOz_%mrXH|(PM1Hr{JXV9$;q#&3$g@c?&@x%wAQglzORuzz?=(#{H^9Apbo;m;sP@1 zR{C#(le148JKc#zWoHoxD89kOSqi`3qicqsHlkBs?E%^8O~9t37Mt;NOLl3Y6$EsU z7Oq-}f5h{CnQF=e0QJZ?D}Q{92p;1wIh&^*0D`lxT!7dnCPmFp^yw;20wUhR4?Cxh1Ej2sj<606t350vab%3ns7K1odBYdx@Fb-g39fk*q$z ze6%DoHPWW_r*{`x!57AW>#FDIxS5tS!uk02zr{VU2-hB9w2Y1zE|+$;_(2_20Fg}{ z|GT+t8i?8DJ54DKA-?MB@8^Il^uCYpdH=9K-z&kpU@hSy(~&ue+*3t=u1>uxb<%=#d5iP zTeZK}xUU${(ulGFCt(AN-GY+zB=Hi)PyoWbLdK}^5k6$)FU{UmpMWyxUA6|FRs4S4 zR@o+E(wF6@Bj*p=11=)Tz{YM1V8QzNbiKY^5^Dkk^v`M`@oA`xKR4EXx-7W_7tB^Y zj8nzLs@vl)wO)<8&sd|fqE$)vq72Z6Mr}U5p6?Rw&9U~#_>Y}^?KV6Qr0mHy@6rs| z54*ryd&D;#{brZT20g#Z2_x*?7%N@?a)FI<;FHu#7&&~l#2*mG0GI-Wy)gOT){W8z zaFb!hV6t|nQPW3H^^F;w0Mq4WE1N( zI9e^Zm8SZCj}$=tZgzlLLYN8=fC6020~L$&_;bPjIh*%7@K#UWcV z@Aj?(e^Kr4190hjp9AO_$GYDfvB^syf&RwT(2*gPR1d9lG~ioiKmc!COR9V;2Jx4@ zhjRyhTHz4*xZVDb`Sl54PvL8FHehtnUg(7%w;{qg!Oe&q@BIhyi!dD~nBA7Wk(T8J=$8wC&(+B9Alu}1is!V%a}wJA z%GaK?>qah30BW**^KNGtYxL^U^I| z$i;R{IhmHt@|n~v*lhufvpIt4;<$AeV4JL%z2Sp1W@Sqo_xm1_#H*?WD_e)_`UA+s z+w|Ux?|!E5`+mwP>fjc%>4ST1Rj%}ZdP6Gt1CCJ<>=4U#zilc__#7T!GgO3H14sc? zv8dWJWarNUJ4DGCUwR=>Dy9jDI;?I)KXs57R^>T6WbJ-jyr? z)JI7mS73s855(1I} zC>8^h6jCYH;Hx{H-`@k6l2Stqrlv<7YHGU$fNRiYZ7l2jK6_3!42K@C=xwJ)95?UZ zNCjAr*m8FgHBj?KF@6hxTxAU6tNo5N0AQyW@-7CueA2V})CJ(1*wvG1oV>o#nICS9 zLF&YDPB67}{;j#aR|hzB2XI)a0DD%oikb*o`C(%)OB?v+@Fk|~%M?ZWYADa!-w0Lm z(`}HWUpx<##CZc4oa~Uj#NH-+I{UXfnCd#CK$(bnATk#TJzv%6xnq06&i0%4qniWs zrrMrpprA@Kt#vXv;IT4!#V8|byR+w(hBC}Spif=C-=)5l_Ll88turW&8nYDv_>s?@ z-9sQwH~J|YqXg>#;Hm|T*T@?P{r&r80k`o9#<=&wCY7Ufq%o-GF{}^(Orc5|F-OBq zg}Ohz-9by7nqg&26&_+TeYjpUfhxsB50t69o@&1D2n9HKJl1lH$ zcBMg~MrFlA4-GJ?sKw4>_;At5@6=2G$#V?G9IH3`?J2fiG%iWWKPL$Tv>F9p-_`6O zcsDqoD6hdBuVuQGTagnU0z!#<6SD{m5=u&1zSd1d?Zc9PQX zlZG>5{6tnshOX^wE#=CdDtGd1C^Pg9a%6%ftp4TXb=8{EQOhpe+>Mm>?8Y0 zdheC9z23-!5fiAosD{I+aSw=s7WJxe$11O|Mx*?e@_zR{QgU9$?A$*AR5~c*50ky-!;E_LR(VGz3l1}(=eAYS zUrvp0*1~%KOE6nvUQ-BI(PIFZcrBVkL;a)z@Zd`A6$6S^<_xAJ(OpO8YSV_`9+87H zSKt6=Islb0W|YO!b62W)lgj#w*ve;#O5Oybyw?Xy*)U3CTp@@@7=+Yq4UuPJMo^G!)CCs@n_A~b@Kf_?w^{24Jd{>6LGtUFQxlgd;D zpFUmbns%|h9i*&4^7WHmcdf}F*7s1Q^;HV)yJ@BdHjVdW-)&I5FENkL0W$tz1txkz zD?#YovU!?309jfly5s7-wocIq`S6u?UnGN%;U^$f^}R^e zlhSv9Z0sO(C%N{ZH*Ndw!-13Fq`p+3=ujc1?ii*%RDzh3@!Du&dm|M2mby#|fZy3T z@uMGzJI^(=fFLlvE_d5SnFQv zy5=?KyqpWOY3tj(R~0UPtbIj zhtZAB)R1skyv$c(Cuw2h>Ifxa;MD(+J7V2~ua`CuYB9gU9_D_1pk8lq0Co(sG(|%R z(wY_|?T8kgFliO{kC)>YM{6CUYC0(ng}x8?Xq^`O0OA`1Lkvk%k*v%C0BJpC|Czt*3KmG^B_Ly7BRvDomCaK{*7Y<#AC8Uf`lc9H15)S(bWXI3yO ztYOP=!=R{^hJK28qsiZ`XJ)weSu(%=bczk2h%1p&+%-M-SMd}Ivgl$EGWHF6!HeJ6 zsqlo^_Q1Qwn-AtQc9W2v?u(_Nwa@Dat3Q-o9=8TOC{xHCaygwe#&fljzpd^76?*}B z;hSTgy}F~caOC~N6usPj})3@1_-WSeGlRSG{sxD{Z&)vo47ti$a^_+?S zo4wLd`*MG^OFw3{r4LM0x@iN;qtB`oUk`-(SbPkghJp8?!kdDop}5%iNp*dub$7Bo zC!q#;8<>vqMHX^Oeo~4-h7IAYWYg?`XaXRw5nz4pfD~WsUTi_Y9k)&8w0Co0{{;41 zb^5{l`h7tV>;kYiyu?I|qMvce3=a08{l{DJe~%&8rMxZQl8Nmvg5@V1Vy5Ohno>7dj!%998(?o6T+>*SEPwTGU@iYIYvLw4K!{uTNWev_ z+x9-jt9fw>iM^8aO2=Qh+FJ%}2+iF2UBw=+h*2YpZ=Hy*Q8qu?czyx<*-@ z?bZnZQu+o)@K%1AyhnH1A6r7Y$S?wciuG1I;Dyhd=at$ZOz|0;Zl;4Ddmh}q($2#l zX0d(Y8{O_Sc4KWI7MPH&T5D`6^nH#g5$=;ef~r>->j!iK0(=Q%U7#dHdV$df;Tx?* zJ6P6ko^rbP(e){Q;a4n3!cmz5|lBxRQ4_W~9{Vt%VpkpxnGg2|p00146 z<_YefG=u*+=6{|WBsTh=dGPmTT_I`l}SWKHtO^1L~sf?sTAA3GrE-aB9KU7gs(WX}<+ylIq<-@M6 zHH!+;-^&@#{tA}8Z?X0)BGa~gTDV67ETLlCDAxF7~*2=#QxJ=8In}x10)lY zBDL)=w03@ky4G~LW!8DD@DxEcg1OX8%LiZ1n_Qgj;e zPV+Bl3OKV0l)sw=2>BqKj8F53Wr~ohE^bsL^e=pdEcNlOnN5Hk;b9*n9`<$G;IoanLqUP^%W zbL*G)QDeh2G4yH&@D5YurWhQu*<6EA7`dMm=JC6P^t@DN*t^=3>>tvWHKGAJ3c<>^ zQDz12_X-LTGE^L_pe}CLV*-^;sV+|SO zymP%%ffzXgA| z5W1BgGK`c>(2Qh`ikOBt4BYl0WpkLP71QFVH30`*<3Vm6=g0Gs>aYqBrt>*q>k#~O zv0mj!3kHN|<~U~`SXk9sqYNfgKdkz$|aFJtFLN!-y5M8~_<}R)M_JcKoeib{W%1rr}G# z))s5h-(psDlk>*KEmojayMPdmLDdXWWP%WH4(zOZ$H2=pqw%hwYL?FduxI+l|HiyI zj&A~|w^A;HytoPO&%Z)ogo?Kpf59Wy@qV(&3F`_fr#|Z-?MnWEONn@w!hj2T&NZB) z{GT}8+Xlun;Wn^({*uPEK7QgI#fwmiDxuOD*=O0m0<-dTuu9?P+lBm;&kpdxR5e&> z&RC5L*5f*LRnx&Kx~Q^y!}O9j-6Q;u8gUbk_AYeha(svTFBg!54pvy~Q4{h%{!Lc{ z#C95SwS}60M7l|0O;EDRDw+QO2gCsiT84DGP=*?twU&P@A|^;6B7CM4hWlqJE-o9~ zl40If?XUIw_ZidaAcRke$1f57_&)VG2>mv@aO;n-)H??qe+E0d82#U?=fD>cs_fh+ zQrQ$!A$KlXQ;(+J-DxE$>u%=fS#Mbghm(s39KUReFh9VU7AumaHn|V3wm`8vPU-ix zh(N=>L+B!}dPwN|cE=rmKe#{`V{dX_u=a6YQ$5Qpk@1X;WKp)6nOTT0moV-5Mux~2 zSUa_e8>R*qo3&{yBru6yG zsh0FS9n*2IPOgWRIdIQ{pzMc3$*J?&XO7wp-56(=l_{Xbu% zSR`T{{31J(Vyerns6e_+__rK4-5(C2W1+K4ayRXJgVSZg#dLm>xDO4vab#w zEr?4Ie`Dh$$ixNq;_r942R{?SgAE0fmHf4M6pd`DS1Jo&>fM ztA&K2=@x%I$mP($t)uWoq-#)bHYR=2xTC3&QoTu1w$)*y=m=gc$4FUAmbt(t3Ot zzHm{rCTRD$K#oE*%tA4bW@k|^Cab6J2e7r4%d^y<7We&h6h&+wggrf`;5OKLomU^P zxNm^aZY`_h253d3i}K*dLa@346BbfYG$pEAb=}B*LURA~WillQqll&xDNo2I5)hi#xU-RndWf*7CY{idh}Fqxl#-`BwFs(87(|+ z>`zT0w31ce@42D`Mi%y^y0SOX@NobF`g9ttGmLAa+1Z!xySE1JM>=hqzsP#czRy;^ zpNkgjq7yvC9qKcR^2c3s+Nq}9%M9_}l_CvabkLd;>zyN= z*~ahs9rN!8<v!FurkrG5El!ZD0iM-7A{aPnB!}d`NT6 z$Qz5(uT2K2)mJNqSLxaEmsTn{8r?nKTk6$uzIN)-LTAgO-7C%@buKYkV-!dFiXlPD zRhCN{SD6v&w08Q8_(c`*tKnI;rU#C%%7pd0&8FaXe8#grk!U+~trQ3dyG0>cn4#T_*_)aoJqu6fB?0PwTmshb6CVHoWhr6W=9r?sc@ClP2io z@T5?GbM#bLOtW+6L#0US(N=iI0|p7l)3Vq%VkK%%207Z( z7wd7})ut(3XU{*D8?4ngI;b_dX>)lel(VjE0`JSfayOaw*y#nzF8<6U*D6Xzzd6HZ z?YieXL;NcTr2t-kn(l!NH{W-S8fAg?*B6l)y^FpShHWYCG3?8y;rC8j%q~@v59fYN zRkm{3XzJCw34u^f1x@`ZY41p5x8FMZ!I4l1xm+Rq6x@m2kM|uj{fgstIV9h0cN@Xn zPn_nq*SX;i6j;6$IAf^GNi{|06`WprykYCwZ{dIXRI}5aqUd0wFl_^$vpn~XT!Oe^ zhDBv65cX~gug*943^jA)Xv^6JGdv8ZNgx| zf>SS*z0MJG$7A_W;~}?@@EMePl8*#T za|)g2zVmjZ8eI?ff4j16IjCLSBP-ggm!UQXr{O;3+cE;x!mfIK{hd*$gskUBl1D#t?2uK87?0EKuKPi|zNpnBdSce50*!``^ zvQHPz@yy!!Z|53L0WS;g4*MIRTq{}2>%9fVH!e_v8<2*ozrEa=280}9LjSY~Qeh!Z zEke7y+ncbXjp0v$th{Ml7D?_{^?p_~0$gn`C9$Rr3FDBR+gY~J?Trk_>Xn=W1+qCe z)w_}=2A>&EC!xAb9-bE1hrIGld%3so#%T}|o}-d{lwpp;mT=gH_fcuk6k>7#caM*> z4`Oc-X+#ej8_4+{zOQo$P>n2f+)q^7{c~lTawE&4L%EExi{BCkyUDo@n7#1y=VGwqZ z@L^)IS^!oQsWoWsOtsRENZPZKeRp47a*Wz%o><12Ydi9wUk(s<3j>|HB5TVKcs zx-~5rK1;P)_O`Q;*Wa0~ca`Q?v#aK`X*sTavc{v^YM_$}A6+0KbF8w)` z;hn8pd$;c9Zn?YKZ>Bn5m|t5Q%QBL3hTT?_#d0Q@J|l`zFqgcUYI|VGKF(!2!hrIY zyM)F3&GF?2UG0`{d7df^MiMNdn{bcfaR;-I^`=UX;!#a=NLbM~*^A_O(gw`~n1bLW z=AO9E*HsS6(bLa`4I);`hqi8b*Jh3! z(GLc72Gka49TyKc2aCRKA=#(7S>5dv-Ky@|$iD90gm zH}1`>W#x9^e)_I&&tg`P@bbw$@7z05U7cy#EsS7g3U4#)wM(v+hVtD(#k}mtDRVP~ zRmlcBc;!`qO-&{$igaLLsQpw>lP|LAw`@@B11#;1ie z9m25>fF!3r@S8xfu>ro*NvfZVan)V5SVAJLv{l?}%F8ji795{llPW+jf?id*NsImf-e? zIw@9GX6E~zwDc3`+lO3Y3xC?n47+rVl|jBZy-hYYRi4$kavj}MJ}uWEC5oip9I6Jr zhn9m&pk_8)rHL$3Ih7rfhpDaoycvQw;r6(MKUqdHZz3%{o4wIGx=j{1kl(jGgoW=y zy^C3J*(y*QRKQqkCwi-OApZyr!YGrNlh$q)4$UJPdAx~qgXCO&Tl4<(q;701S2WMw zRQ-1F%^NzgvVburLgD!wi8Y4D32!>MG{`p}6G}dw|6roR`a`HJ%4&A9A)*~EI^$?| zkdm9wu_xp*_C+*9I~>B(_9|l1S+r-eAN&xHzqMm+fB70Xd4xq;wfcVF?nedO#P^^D zM-HQaTesezW9 zhivaV*t+b$v*X!2^<<|(O4^n*kurUD%~6-l`5FiN8E(5^Bg{m+69NnY_NCER3qILgNNo!Y9L ztvy+?yd-!VU3X=gIbt!JGUABODs|a5%*~W zowPra2A{2clbLk+@v(k*wT@X)t&a5IHo5eyhS)x^R`RkgjU4U#q~ZNlD1%$LXzKT` z<2XZ4-S=%TG1`MYQXg(T=VlML&n(#yCUNOEVx~>wI1XwL?xDNzV&_T{KQ_S+8_g^s zDb$&S<S?-eT=I5#Ana69c zzVxx^#U-CBa;AT|q|0iH=c<`LwLEqi5x&_?%$!sHekQ}rS!&%;XGTR;FP1*q**f%H zU;4>*nwIs*H}{MqH>_8OGkg9-atmpjtKO8Xw6)v8hltLqGOu+7Dle4Y<2|8V=`(wB zc)f2)yd8$S61DQVcNUD3&H9T4-L~RQiMjnwdNzt+h{t4 z`V66uBgl{C&PO+}CPE!fW>fS9rB+2QlI(gd2GiZf_UswT6w1a14NCg89RsEl51Ybx z)Pz@EhJ?r8Oi?YV6M`W2Na9>I#kQ!{^n0TM?M;C~&=A&hrCT&Q*;G=D6U3smK^nUd z?54t+0=EGiWcDLH&Y%t9HwNEHNsuCi?ilSm3# zuMX4jz|W$sqfmAWISUzP3u^@46ro}@@!UhBx&2U=*6(b87&PbB^3*23&sjkDvAvdR zQcd6&c|s0&)B@@f2+ctjJRQ=$TSVV_o`W6P9Uypo~@-ap^~tG=uG&Hxp2ge?#2-W8tbn z*Gy83%nw(laB?xX?_@Jh+`gr6wW`*-{f6S`EZ#Vex{dCq z?k@|(`5Nt%Tk9-+8R1_y5!lHZvg205f$Pd@n@StnWg&Pf-A3LJ<-7ER?e;~HO`s}< z$zt2()ycM0;?e%sJFPR%GYwm*n#KH`tL6MD>lgQ=N@v8~g4Z}MWSlhemC?8p8zTcI zq=K@o8`Kfy1+WzyuX)mrSC>B3>KUD)tz1u+#0MKcp04RwY1|dQ_)w=ay!K6PSdY3@ zZZ(g(FWUNB|568u+Tlz4{%$Fx&Y|N0&pW0fy2LHH!;R&Oy^jV$p9}ALK3;oN)S^V) zBGNe*@1Rw+9eIp_l+-bZ16kFt0xv3hGg=2l=&-RjW1~}b@-(S^xH9Q7|ZmV z@hQ{{B|Ejfz_{6?I=xb=ISXAIlrUasRE2%DquI%7o1(_=gMzmFj$-@lS=}PsQ9@yFb6PGFJB&ZRUrg<{qZ9*3!CK~#ZB*w{re8Qk1_EDjmzt= znk&Yttw&phE9C^8Tca~Qqd#cpaPP_1{PQIvu->2N(jQ~^w*33cD z_~fVNv#!6CpmQsWc-$jD)zvIv*qkDKC@1<|)jH#K+kqu`0ayupIe@4mP&kL5;K8uWr za5?4x@4@HqD&@%Gc|t?qfjn7;;%vT#s?$ynsvxc{Y^I4@(uaeb=j&avh*Y9 zE-Fo}*V>x)&ukrH9e(}x@5cmAyqp`(Zv(M1xFAG$aj;|IVU+ zJ*WTc!QX?-1!)ZomHzUgM8S6D_b?M%=T)SRP&BaqVq%4uD;nOTQ++b?+N<3t_xofS_r-?l zuQ%lj9(kT<0+Q@sF6&9UB_wI_~$c_d&t(xt6!>P$kx4t}}=qN~*KGr)WVgJ#zk9C@xn_&xkH2L9)m)GhOivrQ5j7?^n zRTc{pzKS;{*}Ry~(gtWZu~r|y~92439lbV!JiZ$&?A} zNeNex*fG<4B7{6152=&W3{xEpe7sNE`I&@45$z?Hx#iJ^W$-b-j?{*?#eA%?M>d|W zm)D5%1hK}7`QS#!BQ!2YGeGBQoZS6@%W0rS64f%RcY(Y!N6Hva>aP(FWr6Vs(kNGFEonq9KRKBG} z?9~}O((`)g(@P^g>i-T?Jqf<%T}H;uDjV&g-72vWa|CRz%e;F0=G#{i7|$ak`VX^K zmpDd>+ypSQHpO@+vajFHwqXptPup{IQ$2oMBk+ZUafNW-b)PpRqs5FlZH46MKvfCN ziE{kjXJj0zVoo$0oO{-HuPiUl`?SkrTY4a;&DOY2-_oaw-8g=aq;ut~z=T!w%B%A>^9jLWRhF_~6rpOg{$g*wyi5SK5~9Iq=zUz7pIuNF_^2BmQ78IjV5W1LjrB}bnBm18IEg8xi7pvT8hWa!Qgbl9EVp7g*&N3S zD8(_sl(fI0NgH?mL6+{K$lYZvW4mzTWp%hC9>*y!sN)J-=VlvQa24{2ah$`tkxw2T zx{Ei>=HxOmV$N<^E6>j>-YiN|b!EF>Wrc8vj%Qf|A100-R67oi>90hzAg6bPe$M z*|clzN&rhoW4h9UL&$dw!ZJ4iNFyt(viZFqUmf>CJ?z<1VB5opj6ppT^@L2bqrGw- zNZCFEb*$Q0gS+eW>kuX%>s7ne)E)nqzq|m{^ZK56c`N|U4Dv}jK-LoL@Zo9!ty}r( zd?^A|QyF|S_od3VTxWI~)XfbLhU%ty-a3CralZlfy|14oacWT70(p>{JuXlpuwq;G`1sMc~p1QMJ%ARA2GpN&}aVWV)rg@9d+ z55p5Z>w#)Qk7O)U3T+y2f7u)4aGe$L-X)1t3Vk%}j&lGaM&==!eGexfuQ5MfA6$3^ z@L`K4FKE4NX(i+GI7~GaK?+nCP&-BOw*};|$@;TdGtd`Y#{%H8oJfU2{M3RIfi*zx z;UlsE$n90yK>1A2$jWL3y7Yu>*B$jCPYJxOI|v{KqQ8Zj%bsH9l^cMQltA({!X`JP?S7VE~ofR;pm;!`2Qy_pu!CGs5z@HxlXEjq4J}lvd7B$;` zVMrig4gcnR;QTpo5-I~M@WBQ^hLd1# z(OSyQ3@?Rfh0RAqNv*d_I*gLd7!Qk?u^)SzySH5JH8x7u5@-qm=9>f1q{Dy6JVqSx zb)0oJ#%Me_6@$%Np8*~(nhs!k#!IlAmIA$c8RHaU&iau0G@=W*{O(8O&o#=4lr$*G z=t4M=x*nm%ltR2m-e*C49%n)tIN=)i`RBdvbrk~bm&Em^*d=J(u^ep(u}_+mB(hM! zMI`L@xH%aQO-wI@kckW-HS%2e_XFA65Cb3$O26)P9lT))vLR-M5ZG+PLA9mQb%y5} zoUDBb(3c@5HrfuLY#!j!#B1++32_1l?O%WGg78GFxO5#^ZxWE!)s!0g1&*Fh0_nCU zm;2>$D8a`E``o}bd?5Y_)=sH(anfKBb54XvR^YjBD%hxolstlN5tgy_WoDMDAEdRU%6mhFKw-;@WXF4~f%=PKA=(e_aLR)(H6 zb;rzgM$-hkpd(6l<>JZUnU)1yy;po(NAalnrN&%?ds#S3RR308HKLPt`gWp@+9=Hv zn3Gb7q16ahs(x~ldX#=mX=%ogh&3JVsXUN;QHH=>ixwc9WL$1%yn7>k2YQxDY=N4L zVzyX8VOG|+R3LGZplp>UQ2J`e&-UHb>}8XwnlY<2_)2 z>@^ORM1ZHuqTw*mmHS0;pifyoE zQGOn7gxFmJ3@*Qi%CT_)w|XCU!Fw)YnDS<6IpyksxLW)W-J@;O5Uli0Ie2-=eo z+GrRz+?w%1Qe37mSwv}4MCqdebrUj5#Z{EF?jlZNGc%kcg+;UkNygGN;DY$PBk|QY z&q>b-n`#hl{4QP_NeEL1rBM`4&wMY>7ex(;B?f^EJ4;x!A#lipSIj8cO@!)7;K(fI(>6o?jQnxZyU3}$frwJYFq zw!p`LBG%)juQ0+R#CPkGTo+cI=P=~%fe(nEC)iT)%8(67qvT+m^YlJXeHvc68gZbX zbwSdOgfRTbqVnmiJ(E8ydVt{NdS-K+QC4qiiGpr;b0D`+-@b?L!%p}sX$py>?{i%O zSGoNDu^ENb1kgy)sRn^k_xmYPlLcKX-NAdgu!5JjshL%Z2d82eWV1no&W)lGD-znQ zP};Z8=u36GJoF6eS=r|A~3 z)B%!fjf$RJ{_8g4J=|ONFt(*zyJV1t>;bbDqaU^Q$N?g@*-0L{*XIX%D4oeLkVAc; zNEJ7*&;tyH1q{QRuHU4=SGi<`eZmx-Cu5EIBIiYb1CWrnukA)L& z>p{SH6bm&fr}kCiF`75x=Slp9wiYf_Z_&pA209)WD-zVB6{+MB>PxWe=mfA|lc;pi zb2+vL7VQJ1d8LA)3WoC!{OFoq(lk9m2z%U>Vq>I++LcV@w%yc%$%@jo3pVgk+@=v1 zBW%4_u(W2J2nm!WUyxoRF#ZrfLT~0h!-)GB>!axJ@#y89d9GPzFd2B|5PH~9AU?hU zwflgc>Bptu=~c^R5A_l8!2;5We^F#8YA*bYRI%)w2=Qx1a&SP5pifCP95fb17pauC zt{PW+thE$r^905-W3Wl3*J+#*O}2lgRYnPb@8G5ep%NM)`9#!59{Nk*9)LZtc%=z@PJ#6a|56>vH15{gp^z$5&&=_e~g4@L8MQ zZg8)_Cag<-Emd9iaq-3&009`kn|)#R!8EiE`Jir?!w*(-{dv-_FBz{GgZ&D@`_}}- zxrV?OLMz)*NOFBC+!|)@K1%OlpnjCU1=SwM;;ntM5X@k>*~j{`&CxH94q}|IiA6N@ zy$JbTfnY6s0Z)|3_8su<%6Lxv8Q}?h-Xjs=et{^a;EU?;%$aC+7{YE73c-^RG%7bNkkHhe0up;2iQL*)E|^Xmg;WkD zNt|dy?FnJgpv7I_fAnC=!lQ8R7(=9c8MyMH>L4l=*$19tv^?(;+&IS!mV7sI6m2l% zo@#!Te5J!~jN+5Y6yn>99e2&nx{9Xv#f+RXZP2+EA>G+;Rire9W(%?VY9bp|bQ=ie z9#X$B$t!)xxWTOr8v~XU_{Y@WWa1fh9QImn5%ur2NA^6N?rh|0I08ZvSjOe4i=jAgN=*xST_u)Dd zM+!EOO9>*4ys|DMXG>{T$}PHtH}Llr8xm(Rp5`kK8`T(BHc)`%3dF7rq@n~qvEcEp^3Wx(8_nxaV`>5tK%RmowtRuNapMg$4lmJ{hsy zigihnGa8>%(UZMi$_9=SO+qRi+~^*>`5J5ce8R1lNAqK~cg(gG$z+I%ZwRV0u>J<} zNRvWa=qER@E5G|IjPoWDK%EsRT7$vAk-~p{$cg~}y1~Gat^QX8D-MERcQ@gr`~?mS z61hY$AzC_)O?>_fbj_piqPjDe|LSf)k@;UpyzL198DG<*W=s5Yj!iOeAT*xn1CDQz z9C&fX64aVZZ$UEc0DL*ruTFQqq}ckg1N&3Pb=;k-1px4rH@IKD;J?Y z&6%#^AA~WI4+eoiR!+_W*z{GU3c3ay-+@?_OTQfjqLAuTk4YL}euI^?%mCfQR&%C({LdK` zjS$;AL^z$G@k7pa?wB z4S`y;5=c|vcVf9LreGTpo}z2jfs};HaaZdK_yg=fb}t~No&)YL7`tHv9PNOo^V%ec z({g5_)_%(fLjK`_W1V7M>WDy_Vlas)HyLb!=!^EofRx7?ep?`2AcheV*ryMTd@)K>r}?u2pA7K3$mTIlZDmWbUT=vfNi=*voT0$3{G z8e0r}FD8NUE#}r##g`wRcQ>c4Xu`12?Vt~jZo$in(v>*PK469CISEo+lk>M@`5NfO z#dYxHz25L7_;CpJz{FPX0u3f=tUxo+3L)C?Ng=tf;xgDVsuYASD6^pTq`^+$TZv+N z4P44vhREZ{$(QvI`ym;~tLy-ZPoP|N9GCK(`Jabx?*rw7VIHg-ilf&F78NW%V#YSnNN-}y zN~Cu3GagT)ag#&PIO{en_ zPNgA%rDDXf3EYVRBtH1B)CdOblbm1;arbe@^<&ENPw@wFWEELZGs(N;Uk^*f1+0}( zv!%*i|Ge1g^5{+L^zFJDF1}-M-B#$YAnq{DyPZHRmkX`@-sFAHx6vSZXSxc_ zhXj^hrV7|qOaNUIp&#vp0t7zUfnaGHHNddSS9EfjgAec5z99_{>R3Zc^0L{#CbA5S zNgBkoRL>ciOOkc_9WjO2MqWu2GY>M5_)3Yd;<92k5Y*Z+Q1h%g8^*J$2AMhUPfa!nB6`V8Fjh8t(Y4%vqm zg(IW_-UAljg{L2UZDmGWJJ&bUPi+-mD60!_#gCJ)@^0l}gdubotXX`=&{9gS6VQ4{ zSS~-nEE?I`CkSaO;Xfb1!((jvV2bTqD`|gmav+a2c(HO)Ku2c1$;dfl4a|=1MGBf< zC7;MwFhe3TZzt(ie(g5&Fx$z#UNC{Da8r-w+>V}2U<77!Y=7ebYp^DOB6mP8gW{mD zFAUTdy1JF1Vj>E)n7BJ#^>!kA4Rq%~fYTYo)vJ0KcX_-u-fz^GOpt0Aq7O@q@OnZp zP}_-hyX%m+QpkvZ8N>-w5Z}ehN0PZ>FCpUs?^`L*>hSGc&vXFdixcG~JQNza3Q#bl zX|ibCMVkC5lSFheqU|c(P=`QbhyAQAwO>0snLjLH3TX{?j;74-aBS=}9#HK^HU=oyb4WQ`Z5eG03^VuQ5#5McE2fBVRFO@<6 zmQFkbEE#pD{Zd>9Bt@@aGs^)OXQeLh3zel=Wf?Hw-v}&=m=L(7(E<#BPuIYF{JAy4 z3pfcl-5Ld_EHwRMV5I%I!gQGWT(k^!0V#8ybY?aWD9=1#Q%znf<&MZK+zF8ok8~3!t?7bg4EZ%?Jz)v zT6-mX0J}5##LJg?ejNie> ze+zoh82{Ic1`!+7`n%`9M*Vlp1U~!`HvR9ch5L{V;D2uTpQrslBmA%V3}_+$pPbSr z$%V`GKa&Ws$V0Z<*w|RrE|Jy%)B<3?HU^>wNCf)WQtRQ5!=lF9H>94|CHA{BlW_nq zi`<38$)EsY4mQTIbWvZ~i`?F5Q10qV;(lu>=yI%1IW;u&oJi26ytx8s2tsE19rXH= zdAY0?pDe|*lg)v08sY+F+69Q(Er9J@rEW6}!1ojF_htoSbcS>aZPlaj&MVEvnd2P+ zW7r$`WKDtGfnZYw)Q>`PENIwHy2!Z;mDToWIUe&v(Zj7f5 z79ot_z|`q90Fi>?9!MyZ)k?G7z+kFGi}1bT zQ3y-|i<+JF%n0UOs}@_JrDg<($H{inJ+yL&3H8DuxM)&8EC`I%JjCO$tfG8G%39D!oZR&z-fjk0I59|e9x}MrWR2Dxe3E&s=k7*Bp zRG;$cqqV*iGbYW-azKWk1gZ;5h`|q4V~xDW^??*WKswAplvdGrv-1{`cxXjnpWc4q zP6%`TRBZYk_o^>Gp<*j_$5OOVIX?FbNLlhgvBPW(w0iK#qEO2^mLakze-CWDI!S;j zD4BHUX%9`B+iL)r6anCW0upjB7L`r1V>XhkcxsJ22pN1FI*ZyZmAvxK7pmogBAlmX z3^-?f1>cE$O2YVnP}Uz|L#e=fOr<82X#?9k?&E3c{*0Z0X@6`~^SB46GS)kYAKDFwf}-D3P5rRP zNNKd$V3YYb6-$v6k@L;S_XM7+Z>jomA^Y~1!2PZgj7C6b`5X(bWERBpkHy4h*5k_J z3QRVi;ynAUF&tApjb_lQ!UEENL7f?T$&I)>hQ#yQdK!3d`{E*Y=czvzKQ}48hNRk{ z&^d{4ba%UVXAaDsMa>L=$0foz#P_N=c>!Qpl@PBzNVxv4w3i0e?ZQ}Q#1nLK-B)d# z=n_m5_^xn6-c;%jQtVH+2I{;8XRzv}&ft0eEW!%kU6;ibj9w9vLp{=^rYQY<|L6V; z3yYowvgStv7#KXgu&3`|4EUV(~N@kr~^_}d*UV1LRlR-?Cc&!QNdbewC(N}M0$sM`S2 z$&DeSeh${oGT=W#9Ybe-ne)LC$>K{?2MWyym7fixXr|D>3pAd2FI`*OSD?61njc}v z!I=2*rp!Em@B4H1xCCp|ut*3hFbl3v_Jm1%gqNjcd;L2_1j6^|3mudwJ)PKhAHYXL@aX~nRHpHdu3@pRluGTb)C zooE!R7Q^|RAr)2D;+x|ZWR?ktkufaN$h~lkhsrDma-Pn>6gIHZ_gM-cIWZo0A8`2z zb6!EfhWlZ{vjpY$%lFZ#JEoyc$;~;hD}kYy;+!ebvfYGkF7FW;DUX$I(1*+LbV?25qUuE?@ow~9sa<_fIeGBDctH4m9`TJfEFkvl zhQ-Hkzf16Aop)RR80d2f8*Mr+rrXph5@Se*GKG)8?v>1@FInBL+t>OU5s47XuS3KM zv{^*LvPpFY5I?<5CoBRq$^jcMXsmaK4~rlWLiUK)s=$erZ=S@ryE+Z*TU3npHK4Cb z%lwC9HfTe!zyfSXlsXN54?s@{@a8dXvf2f%t$Gj_;qPCsdXKv)q4eN4p7EJS7B8=Y z#Ig*)Yt(Oz1&tqtNFs`bF58-b1f7=yIg<_KXjkr<{c*03l!qQ4nL8U_1FL|6rwwEi_EP4H{T=Hb&8TaanF!}un2_X zl>-;wrZm3qhrIy7Vm>Z7?k>lhBGjw-0Bow!=PC9@f_4rv1!eG$8+kUDfj`_^i1QtK zOcea3RorWvl>Hy?-xkh+x2{<}QfIsfAxPwgDxFH;q-s0X7NjIF=(^)L4WTvq`yI?$!v_;qa9;}jbRm!wPQ21>)G+D-^n~<36wAd?py`i$f~D_Z z`Wmxa0%| z(jXYEzr{%Yn%SRun|>pzNfu@jJFtrWvb2>z?7^+{FmPJN9gi(kp_ki1faD-d*W@U5=6yn_f(jam`d%b@!7bv!({142tD);2_5l$J;f3eu!XO+rVyfR!RBHb9Js zfOJ7XX`+N8NS7u>5fH?0ZSOtjcfWD3BY#8~nw`D(TKiq^eCC=w6N{O_Xv3I3DkgcF zKHc5VL=5(PTaQw#obhyj|KN?50O>{2Db9>|**2QtYkTfF9{~Y|eAALaPt@H?ai3|8 zV?P~@9%Y{4LvYX$O@@{;T4jl+w)#C1sZj(*y27ZJvuB&Uf{VhBfk$P))jD`)RV>~C zd9bmoz3SYoGhoa|%sz{@Ri|+9bnZw?%^2$ubu)Rdat!r+u7BA2*A9CSQsTt%Hm6$* z;xuf_unbI2#^r3Qop!~?IT>}oB7V2^j99B)!UljGF&H&>uRKO)B}QAQ&7-FE8J_zM zcLtTG`E8GG+Igc<%u^5LZNM}oGKg?0_M~|-k@?4X-1^vcu+GaBDZ> zMX?7C9x87$MQz@XeqYI64SbHKPLi2$)SzWaRlckoHB4Ae)~LmTf0GsGBkf77zEhvP zP`WcxmaoG`&A84BTNyqY_C0VotSxAEW_9cbwEaDPIKriTQjAMNj-(dYrOE2Y=g&my z5?xnb7LHXky^%C*4&$GkRQG;)!8w<$gi%0#SmPk__sN4frjxp%UgE-Y+(`?(?lhIQ z-bz9lYEtKxb4Fl{l@@cGdS+|{(;c2~qWKq!L#AnMw^F^} zG<0H_gp==}5}A%UX zk{-rLU_$N0P-fr7Og*%`lgDW##lZ@uPu{T z3v8_noTDDvW!eMYb$4B#4ii$uI8Qg#6&Q_KP_QLW#LZG(D8?!jxuKtR|4ex&ITWX- znd@#~*&MHzA1M@8cC%aV7psBG2v_p{VBi|N9%efFSy!r!U=lK2hq**^jD(Lu8hL2& zhTQSa)$ErjP_|olR5pwb2Zaq0nYhD+`^MTHQ6ykh8XMj$xgxvnG}LzGX06Hi=U)~A zGZ{NV2D<(#-`_P}4A0oXX*thG3VpTZ{nW&M<0h0af$xQzpN;I!8Q6WcsUGr2!2_NP z<87#d$HS2lID}|ew?1cXLY>8=^_{ykLSa!)Q)8c>56T+85I~)#TcEYGlJ>2)CEYwU zDlXB6$}rT@z>%(HL=Ps-{N0hUeTy4rc#zFQR~zN$j!hMp^F?9ZiD2aOH1Vlq&!#EM z>`i!Md#RLj5i~z64-2`_^eT5i;n^t+3ZNGB&0)PNeUPO)WOAURmwEqMtImAuQQjtYo(OjWfhwWfGiZw=GgDn! zu&J(xJ6|s8Zk!vFHDP~=i6xBioI`#Y1O3iNVxTvu#J8R1Wu|gtL*NR z&J}^3!87{Bshtc22a=N9h~ayNo91%10s5}WjSu^}PYn%DA|4_qN@CE$2G*7D)p9a^ zS|7*%23_Kz2fu=s18Q7%lc;|R_hcV3>hl_K!rbuQ$N+B*o_YST?w@Vn@PfE@l3LtG z`p>Jy3H5z7x5|3IE2O@VC5a7-R!SyZ(XxnXyu_{>lcF-}wb7+{4HM40Dc8IDH95a= zC^Woa2(1L`3liJP65^G3UkN?=e_DWs;!md^J-~RQ$Igx|C0vW8i?;+=pM(>m5rYe90g4+_S6>tB(-Y zuI*B3OsVs2_` zaxEgQTw}*5g{a@8>z6y|_va)em#h~pil{7Ra|q6=^3tMBg{NYouHT=?^)%O>Ik#1R z|HhX0OOyfEs@1?9cFKTG;oJF@Lgw@9B*{c_h^i5O1#Y=VuyT4-X=rxc*B#EoE@3zI z%0D@2C7O}&x@=Zs`6#C!dOavXQtzx7C7DUALRX!1WLTekuR@d0*5o4WB-huH>)8(u zW;IH$BJm|w?%x<$Br@15af=eURFa2L_uPk0d@8v#v@p|lax%B^zLv}P!N!aD28!0^ zipZsdU!6ynRRxNmWQ#Yld-Jp~&56xy8u91d7%jP9p!+-QPjhWse&ra`yerg5VKj+T z^rJZA5MPK!zEzl)-pH=GI}BR1C(s+SG0&d1jHouzJWHdp2oJ!2!fs@Ka@{R`Q(%Nv zA@#=P%LnsEbqYHb*DzBF3U`~^PfX1SeLIp9FYh+R{d}2%L1|x++SZ=CE9^o&@DMmIi^>{4d>lTIeS*U3e4?du^+6xlsFE zJm2dgNrk@a$c@KMkp^Ye87Z!f3K;WtHO_6m5_+1WFfR%+MKd2>{al7qW$Y|EY4gOg zaw3lXv2AmO6F!aIT5Hm>|9!^Uw)QQ|jQE}BBd(ehV#_W%WVFD-BeLn?MZACw+b3H^ zK!m0W)^6_~#Ou0u$_hZMI;+3P-&WY4HZ)=K(bm5<38xop|YPrK2X=g)Q z5a;rZZlr&oZ*tGyzkjm2gXN~;@F~(L-g7ANtiTDUIi1c+(*(WhdY|pO@1Wssvjag5 zJH3t?pua9HM#J30*Rm%{V5Ymm=kGbn!YM-%Re!-Bhh`+uqs1SOETr+%Itxu>>OAeb z>VwleIYiX>D4Vo*%iyksEgNb1j6}oGPtziY$pwle<`{mXdIZwQhW0ly4(q42$kT32OEB-d-fw3Ox7boc~n4?uwHPL+?uVIM{an93l zn^1i8)78|ia)n~~Haogy8cqXrvZc|e47VT0PFE$8d@8+f=%cd6*s<-bjRzOWA8_r7 z35q{DT&^LqHxNcc`96mD$H=+6EGnbM)m?T8b?DRgR6QC@#tpulxU)N!X+siDsu%~I zr5=i+jhl}l+>J5_vnpGhf3qQFks3f|A{l`p7#Al}q7ag#ytQ*=Jp%|u4ic<5nvi7S zkS|h$7v6TEFePm6{A`JNKD?^~og8*E9eY<~i#9fhR04h$Kg~!YjVka0NfQc(xaijb zdt8#r*dVmocK+Pwf^v<*8aq(*dII1b+sQ>+HR6KaK%~Z4Qh~ zk}@}1gxWOKTnyFi)WjEcSp;fPw~W29&bf)T+Ty{MxUZmP!jdbQlR!mx4G&{ot!Rfa z6QANUu*KKPH7aZy-00$cTYC!53yrI8Npc7>!o8x}GMfQ_8oBsR3O zT#0_%!r_L6b|))ChNv3D%qCZ zQOLM!t&b$eC2M6Xz?3QHa0V%}krPTjo&?MBdU1{~)wz5b-g`BfHm_e0uj)En?n;T` zcKLY$sgI{A@kz#h>gB}=t<#XTW-^2?Rowq>-dL3bn60`@|;=#8WJn82%^ zCmO@>y6}B1oym5J*thRjA`f_D4;M%N4C&vHx$t+7vjz}0r4iKmftai`O}ZFMgF0&Cg<4=-6@3$X{l4IO5<1P|Li-p{K` zqAN?-7_1A7-3*xNf~V}tq;5#QB-%`fx}D-b$ldWMjL9^o-3#tgh8JQsOpysP>H>=0 zewqxKiqGZR<5dJS;jeZLm^6hrO?~?@j;1S#`mZ#%GBz0HX-Vb^dMK-=#F}BL>t3<7 z(x6@H^HJv8P#)oamGQoS1A;TiV0`*eK6P8rcQ#g!QO1oQ2 z@x!+YtpW|~?{b0HGjx;4hlWSz2T~0vuY&|sC#%ES8YCXb8%GR=ox1;^zk4649Y7n0+;#`14@k#AQ`m^;5hi1AvDjJg?8e?bt#Bz0AfP`Ez z4ihjU&h*^ftH13w51Mb#;~MD@cGGVlKdSFn;HOOOQ=_s;hXocy< z=<4ukz&hnDtu7BQS>1A9~Zp2Wof8?IPI}TYg(RrNY{p_0f&ej9^>uqno-*Wr5 zn*-2*u$ZZ;z2F$v+iq-Wn1jMam4xnJmLr=*D`yY5%4NqQUwMQGe1u1`SE2%11~3Hn zu-vxe`&+TCQe1IP{nAoRtatf>vp66T`N&G>LrPLP8{dTv zlM}TE60-_lBJvfV9Xa{lF1hhxBuAz~L9_3Uii@?Y#htF%dG+yVbT~eKZWc~^GAG<| zbJh}PAJY8r%Jnvx8yC0BT-!CB_-*|i4+$;``4*+PYwzw@)nXnp>h4)?X}R(qh%{4H z>&4HBbSfEek>27xbU>RzKi3}!O6j`i0#|YN&ToRUs&r!;>kofv{3+Iifw(?=yT;xM z66A}mII-_EWyUGtxZ)!F-&RfwXZ`z)5~7qC23i`cB^@1hpE)tqnrrS7fB2gq@E-HMHTd&-un+7R!#VDT9v8!(w`^bnJ9DpZXA{Dd)|+ZMlj$P@v$D zg6!+ z6jze9uQgVRaN8nCza$=a74h@Ll%$js>le2{bzFh8s&+N*6f^6UGn9G# zZ-|?QzG>;G!1RflN4Lh&GKpjv7VtRSCdT;|4`&9QQ2-a$sJIWY!QkeyyKLsVY@oAj zF#k|?yXRZB|MiN)c?+3WhmBTqG8cDDt%CQS_z7&1x!r$WxS2Eq29UH6KqeTwT$TQ( z+p&zKx9580FZ0JafBntQ{QrbO0z?>~DrBwxCsJV#Ar+@zmv{Vcq=EpDiiF}yb?6KH z*UJt36h(CS; zoVMfVs(bR`W!WuXe4ec}`)A7blvRl`Sm)cvDFZthk^*IMJ>gT`gjla7WcY+JVXY&%=P?lBn`U7E@YG&fW06b?Pvy<<7Qlt)n(UZ zV<%5f?7h1;nGrV+bUn40M=QX-?k;YUUJX)_=uwu?R(&8P@dJy=p)pcC{=92ju2O5g zqbv+WI+;V!iQWK+DqL&+eW;(j1$iKW5NiELT6J&~68pm{MgOm3j82@~+=Da(i&5Qj(&1CX$46q0mzZ!bvP=!#~`4*uja!>RM<(4-S z@yh5-vTmlX^SuD&J=vWnvBt%r@bFh}?F(kNRlX`-SN{6aZHISfcBd|XNoQm>=Hb>0 z^1*^&^S-z!{?*{rEnwRGSYa!k<3%qN5C`or_ycT^KMKTu9|#p3+0Oj;xhlIJ7dmYo zy!6)^IO+!y7!c`IjH>})^&f4qVXfB5Cb|e@SiNC$3vzIcfLw{aGFwSr-GK4({v$oA z;O|4xl%elW9vcN>0|M<1lJ3#~Oc>cp*9zI~!QS>YV3+>aAY|O1NY7Ra8NMNMyLhzb zR1RUiy9^`<5lNa}(_8saBl6ra{f!RB0se51f<2!+$;tbzUKQNp12 z78)K3tgt@-lIu{GxzdrK%@YO>Oa2DnxM~(P3UV$G9ME$R@GfOpU2{_USH!Q>mLUnf z==JdzRoWmKAr$0Uje_(|A95}jCjG9!y@VZ^1(2}n*c!X3knNzF)=5yNgl_x>Nk>O_ zKLMl58W4wGfK3FZ=$QEsZSLkw8KD6{>Kg|pO%Dj5z*~?P1uxaLLYx8Hkd@{dc|*?P zCo6!~5ITObV6(-es-UjbnSt(_YE6UY8gN=6)D z-US&Jk#QlJa+(Jqdz1Yq+fO{#1>B4_hfGv8<{OEc(Ly};H_2RN@nj#44ej6OgGH-A=a6= zFbcF2&Ps7Dln^NMJrMBM!al~*TNL-qBh>T+t1$^0$9z_?4Rv5!CL)p>#Ron?+P%^R zm?Xq4Lyl|U@6JS0fmnhngALio)dpHOfPdMoxrL7SG3ejZh7B*Y4&gmv8v$kwGj3|M znI$Qzt#xDxTxM-cEakb_5+Vy(hOM~_f#D#DR1l4Ky7bZ$VTO&RdWUGjs{D0vur#6M zok5-D+<;yyN@6-qZA`RsE#8I}_ZEQtc*v8#(O(eURCD*K0R_qgHqI%0i>d%27iNWD z06QUHv1AQG_u$S0&L}IgW1+{Ev7jJa9i5EtodAPgKb)xBl%vvp9Jn0Xc|)3NdQ
#bR)3j8ZnOl>= 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 literal 0 HcmV?d00001 diff --git a/docs/features.md b/docs/features.md index 10c16d26..d69f2499 100644 --- a/docs/features.md +++ b/docs/features.md @@ -10,7 +10,7 @@ | cluster | :white_check_mark: | | :white_check_mark: | :white_check_mark: | | | | [merge](api.md#polars_bio.merge) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | | complement | :white_check_mark: | :construction: | | :white_check_mark: | :white_check_mark: | | -| coverage | :white_check_mark: | | :white_check_mark: | :white_check_mark: | | :white_check_mark: | +| [coverage](api.md#polars_bio.coverage) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | | [expand](api.md#polars_bio.LazyFrame.expand) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | | [sort](api.md#polars_bio.LazyFrame.sort_bedframe) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | | [read_table](api.md#polars_bio.read_table) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | diff --git a/docs/notebooks/cookbook.ipynb b/docs/notebooks/cookbook.ipynb index 9a7a41c9..007cf002 100644 --- a/docs/notebooks/cookbook.ipynb +++ b/docs/notebooks/cookbook.ipynb @@ -21,24 +21,16 @@ "id": "62a7b57c30bf54e2", "metadata": { "ExecuteTime": { - "end_time": "2025-03-05T16:41:54.268168Z", - "start_time": "2025-03-05T16:41:53.664194Z" + "end_time": "2025-03-07T10:02:23.527490Z", + "start_time": "2025-03-07T10:02:23.525921Z" } }, "source": [ "import polars_bio as pb\n", "import polars as pl" ], - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:polars_bio:Creating BioSessionContext\n" - ] - } - ], - "execution_count": 2 + "outputs": [], + "execution_count": 8 }, { "cell_type": "code", @@ -646,34 +638,34 @@ { "metadata": { "ExecuteTime": { - "end_time": "2025-02-28T11:52:12.169029Z", - "start_time": "2025-02-28T11:52:12.167384Z" + "end_time": "2025-03-07T10:02:16.509828Z", + "start_time": "2025-03-07T10:02:16.507744Z" } }, "cell_type": "code", "source": "gcs_vcf_path = \"gs://genomics-public-data/platinum-genomes/vcf/NA12878_S1.genome.vcf\"", "id": "31f0f3d0974245bd", "outputs": [], - "execution_count": 16 + "execution_count": 5 }, { "metadata": { "ExecuteTime": { - "end_time": "2025-02-28T11:52:13.441345Z", - "start_time": "2025-02-28T11:52:13.439461Z" + "end_time": "2025-03-07T10:02:19.374881Z", + "start_time": "2025-03-07T10:02:19.372753Z" } }, "cell_type": "code", "source": "info_fields=[\"AC\", \"AF\"]", "id": "816c419b3b45ee44", "outputs": [], - "execution_count": 17 + "execution_count": 6 }, { "metadata": { "ExecuteTime": { - "end_time": "2025-02-28T11:52:17.666747Z", - "start_time": "2025-02-28T11:52:16.365292Z" + "end_time": "2025-03-07T10:02:52.904221Z", + "start_time": "2025-03-07T10:02:41.364349Z" } }, "cell_type": "code", @@ -713,12 +705,12 @@ "shape: (3, 10)
chromstartendidrefaltqualfilteracaf
stru32u32strstrstrf64strlist[i32]list[f32]
"chrM"11"""G"""0.0"PASS"nullnull
"chrM"272"""A"""0.0"PASS"nullnull
"chrM"7373"""G""A"8752.780273"TruthSensitivityTranche99.90to…[2][1.0]
" ] }, - "execution_count": 18, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 18 + "execution_count": 9 }, { "metadata": {}, diff --git a/docs/performance.md b/docs/performance.md index a8e86743..50dde7a9 100644 --- a/docs/performance.md +++ b/docs/performance.md @@ -7,12 +7,16 @@ ![count-overlaps-single.png](assets/count-overlaps-single.png) +![coverage-single.png](assets/coverage-single.png) + ## Parallel performance πŸƒβ€πŸƒβ€ ![overlap-parallel.png](assets/overlap-parallel.png) ![overlap-parallel.png](assets/nearest-parallel.png) ![count-overlaps-parallel.png](assets/count-overlaps-parallel.png) + +![coverage-parallel.png](assets/coverage-parallel.png) ## Benchmarks πŸ§ͺ ### Detailed results shortcuts πŸ‘¨β€πŸ”¬ - [Binary operations](#binary-operations)