From 01d87e504f06fbfe180ef9d7d570648f74e6094c Mon Sep 17 00:00:00 2001 From: Giorgio Gilestro Date: Thu, 9 Jul 2026 00:19:04 +0100 Subject: [PATCH] =?UTF-8?q?E13:=20real-weight=20model=20speciation=20?= =?UTF-8?q?=E2=80=94=20the=20Git=20Re-Basin=20residual=20confirms=20E12?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The real-weight image of E12, and the answer to the mode-connectivity reviewer. Small no-BN MLPs on MNIST, forked from a shared base and trained independently, are weight-averaged; we measure the linear-mode-connectivity barrier before and after in-house deterministic Git Re-Basin permutation alignment (neural/rebasin.py, scipy linear_sum_assignment), decomposing it into removable (coordinate artefact) and residual (reproductive isolation). kind: speciation_real. Result (3 reps): - shared (same task, shared fork): no barrier — trivially mergeable. - independent (same task, different init): naive 0.056, alignment removes 98% (residual 0.001) — the incompatibility is a coordinate artefact. - conflict (conflicting label maps): naive 0.496, alignment removes 0% (residual 0.496) — genuine reproductive isolation. Because alignment demonstrably works on the independent case, the conflict residual is real, not a failure to align. - Isolation cliff (speciation_real_cliff): residual rises 0.00->0.13->0.19->0.28-> 0.40->0.49 with the fraction of conflicting classes — the real-weight mirror of E12's cliff; residual==naive throughout (functional, not coordinate). rebasin.py sanity-gated (recovers a known permutation exactly). plot_speciation_real.py (2-panel), +4 pure-NumPy tests (142 green), README with honest positioning vs Git Re-Basin / Entezari / Frankle / Pari 2024 / Zhou 2026. Wired into make mnist (needs torchvision). Co-Authored-By: Claude Opus 4.8 --- Makefile | 8 +- configs/neural/speciation_real.yaml | 28 +++ configs/neural/speciation_real_cliff.yaml | 24 +++ figures/plot_speciation_real.py | 67 +++++++ results/speciation_real/README.md | 54 ++++++ results/speciation_real/manifest.json | 18 ++ results/speciation_real/resolved_config.yaml | 31 ++++ results/speciation_real/speciation_real.pdf | Bin 0 -> 20555 bytes results/speciation_real/speciation_real.png | Bin 0 -> 139235 bytes results/speciation_real_cliff/manifest.json | 18 ++ .../resolved_config.yaml | 29 +++ src/neural/experiment.py | 5 + src/neural/rebasin.py | 110 ++++++++++++ src/neural/speciation_real.py | 165 ++++++++++++++++++ tests/test_rebasin.py | 66 +++++++ 15 files changed, 620 insertions(+), 3 deletions(-) create mode 100644 configs/neural/speciation_real.yaml create mode 100644 configs/neural/speciation_real_cliff.yaml create mode 100644 figures/plot_speciation_real.py create mode 100644 results/speciation_real/README.md create mode 100644 results/speciation_real/manifest.json create mode 100644 results/speciation_real/resolved_config.yaml create mode 100644 results/speciation_real/speciation_real.pdf create mode 100644 results/speciation_real/speciation_real.png create mode 100644 results/speciation_real_cliff/manifest.json create mode 100644 results/speciation_real_cliff/resolved_config.yaml create mode 100644 src/neural/rebasin.py create mode 100644 src/neural/speciation_real.py create mode 100644 tests/test_rebasin.py diff --git a/Makefile b/Makefile index 6b01304..4b1d027 100644 --- a/Makefile +++ b/Makefile @@ -18,12 +18,14 @@ test: ## correctness tests + scientific-validation tests (the spine layer1: ## run experiments E1-E6 + the learning-kernel bridge (analytic) for e in E1 E2 E3 E4 E5 E6 E7 E8 E9 E10 E11 E12 E12_nk kernel_sharpen kernel_smooth; do uv run python -m knowledge.experiment configs/layer1/$$e.yaml; done -neural: ## run Layer 1.5 synthetic neural experiments (excludes the heavy MNIST tier) - for c in configs/neural/*.yaml; do case "$$c" in *mnist*) ;; \ +neural: ## run Layer 1.5 synthetic neural experiments (excludes the MNIST/torchvision tiers) + for c in configs/neural/*.yaml; do case "$$c" in *mnist*|*speciation_real*) ;; \ *) uv run python -m neural.experiment "$$c" ;; esac; done -mnist: ## run the real-MNIST confirmation tier (needs env-mnist; downloads MNIST) +mnist: ## run the torchvision tiers: MNIST collapse + E13 real-weight speciation (needs env-mnist) uv run python -m neural.experiment configs/neural/mnist_collapse.yaml + uv run python -m neural.experiment configs/neural/speciation_real.yaml + uv run python -m neural.experiment configs/neural/speciation_real_cliff.yaml env-llm: ## add the LLM stack for the Layer-2 prototype (GPU; transformers/peft) uv sync --extra dev --extra neural --extra llm diff --git a/configs/neural/speciation_real.yaml b/configs/neural/speciation_real.yaml new file mode 100644 index 0000000..d533ac4 --- /dev/null +++ b/configs/neural/speciation_real.yaml @@ -0,0 +1,28 @@ +experiment: speciation_real +kind: speciation_real +seed: 13 +n_replicates: 3 + +# E13 — REAL-WEIGHT model speciation (the real-weight image of E12). Two small no-BN MLPs are forked +# from a shared MNIST base and trained independently; we merge them (weight averaging) and measure the +# linear-mode-connectivity barrier BEFORE and AFTER Git Re-Basin permutation alignment. The barrier +# alignment removes is a coordinate artefact; the RESIDUAL it cannot remove is the reproductive-isolation +# signal. Three conditions decompose it: `shared` (same task, shared fork — no barrier, trivially +# mergeable), `independent` (same task, different init — large barrier that alignment REMOVES: coordinate +# artefact, residual ~0), `conflict` (conflicting label maps — large barrier alignment CANNOT remove: +# residual = real speciation). The residual after alignment is the discriminator. Falsifier: alignment +# fails to remove the independent-init barrier (then residual isn't meaningful), or conflict shows no +# residual. In-house deterministic weight-matching (scipy); statistically reproducible (seeded torch). + +speciation_real: + sizes: [784, 512, 512, 10] + conditions: [shared, independent, conflict] + t_div: [100, 200, 400, 800, 1600] + base_steps: 500 + lr: 0.05 + batch: 128 + n_eval: 2000 + data_root: data + +output: + dir: results/speciation_real diff --git a/configs/neural/speciation_real_cliff.yaml b/configs/neural/speciation_real_cliff.yaml new file mode 100644 index 0000000..14bdb64 --- /dev/null +++ b/configs/neural/speciation_real_cliff.yaml @@ -0,0 +1,24 @@ +experiment: speciation_real_cliff +kind: speciation_real +seed: 13 +n_replicates: 3 + +# E13 (cliff) — the real-weight reproductive-isolation curve, mirroring E12's isolation cliff. Two MLPs +# forked from a shared MNIST base; child B learns a CONFLICTING label map on a fraction `conflict_frac` +# of the classes (the rest agree). Sweeping the conflict fraction traces the residual (after-alignment) +# barrier from 0 (no conflict = same species) to its maximum (full conflict = fully isolated) — the +# real-weight image of "the isolation cliff rises with epistasis". Alignment is applied throughout, so +# the curve is the residual that permutation cannot explain away. + +speciation_real: + sizes: [784, 512, 512, 10] + conflict_fracs: [0.0, 0.2, 0.4, 0.6, 0.8, 1.0] + t_div_fixed: 800 + base_steps: 500 + lr: 0.05 + batch: 128 + n_eval: 2000 + data_root: data + +output: + dir: results/speciation_real_cliff diff --git a/figures/plot_speciation_real.py b/figures/plot_speciation_real.py new file mode 100644 index 0000000..82bd8b5 --- /dev/null +++ b/figures/plot_speciation_real.py @@ -0,0 +1,67 @@ +"""E13 figure — real-weight model speciation with Git Re-Basin. + +(A) The barrier decomposition per condition: the linear-mode-connectivity error barrier between two +merged MLPs, split into the part permutation alignment REMOVES (coordinate artefact) and the RESIDUAL it +cannot (reproductive isolation). `shared` ≈ 0; `independent` (same task, different init) is almost all +removable (residual ≈ 0 — same species, different basis); `conflict` (conflicting tasks) is almost all +residual (real isolation). (B) The isolation cliff: residual barrier vs the fraction of conflicting +classes — the real-weight image of E12's cliff, after alignment (so it is not a coordinate artefact). + +Usage: python figures/plot_speciation_real.py +""" + +from __future__ import annotations + +import sys +from pathlib import Path + +import matplotlib.pyplot as plt +import numpy as np + +sys.path.insert(0, str(Path(__file__).parent)) +from _figlib import load_bundle, savefig # noqa: E402 + + +def main() -> None: + dec, _ = load_bundle("results/speciation_real") + cliff, _ = load_bundle("results/speciation_real_cliff") + + fig, axes = plt.subplots(1, 2, figsize=(13, 5)) + + # Panel A: removable (coordinate artefact) vs residual (isolation), stacked, per condition. + ax = axes[0] + order = [c for c in ["shared", "independent", "conflict"] if c in set(dec["condition"])] + g = dec.groupby("condition").agg(removable=("removable", "mean"), + residual=("residual", "mean")).reindex(order) + x = np.arange(len(order)) + ax.bar(x, g["removable"], 0.6, label="removable by alignment\n(coordinate artefact)", color="#9ecae1") + ax.bar(x, g["residual"], 0.6, bottom=g["removable"], label="residual after alignment\n(reproductive isolation)", + color="#d62728") + ax.set_xticks(x); ax.set_xticklabels(order) + ax.set(ylabel="linear-mode-connectivity error barrier", + title="Merge barrier = coordinate artefact + residual isolation\n" + "(same task even across inits is coordinate; conflict is real)") + ax.legend(frameon=False, fontsize=8) + + # Panel B: the isolation cliff — residual barrier vs conflict fraction. + ax = axes[1] + cg = cliff.groupby("conflict_frac").agg(res_m=("residual", "mean"), res_s=("residual", "std"), + nai_m=("barrier_naive", "mean")).reset_index() + ax.plot(cg["conflict_frac"], cg["nai_m"], "--o", color="#999", lw=1.4, label="naive barrier") + ax.plot(cg["conflict_frac"], cg["res_m"], "-o", color="#d62728", lw=2, label="residual (after alignment)") + ax.fill_between(cg["conflict_frac"], cg["res_m"] - cg["res_s"], cg["res_m"] + cg["res_s"], + color="#d62728", alpha=0.15) + ax.set(xlabel="fraction of classes with conflicting labels", ylabel="error barrier", + ylim=(-0.02, None), + title="The reproductive-isolation cliff, in real weights\n" + "(residual rises with task conflict — not removable by alignment)") + ax.legend(frameon=False, fontsize=9) + + fig.suptitle("E13 — real-weight model speciation: what permutation alignment can and cannot merge", + y=1.02, fontsize=13) + fig.tight_layout() + savefig(fig, "results/speciation_real", "speciation_real") + + +if __name__ == "__main__": + main() diff --git a/results/speciation_real/README.md b/results/speciation_real/README.md new file mode 100644 index 0000000..74993d3 --- /dev/null +++ b/results/speciation_real/README.md @@ -0,0 +1,54 @@ +# E13 — Real-weight model speciation (Git Re-Basin residual) + +**Claim tested.** E12 predicts model *speciation* analytically: as two lineages diverge, recombination +(merging) fails, via Bateson–Dobzhansky–Muller incompatibilities. E13 confirms it in **real trained +weights**, and — decisively — separates the part of the incompatibility that is a mere **coordinate +artefact** (removable by permuting hidden units; Git Re-Basin, Ainsworth et al. 2022) from the +**residual** that permutation *cannot* remove, which is the true reproductive-isolation signal. This is +the experiment that answers the mode-connectivity reviewer: if alignment removes the barrier, it was a +coordinate artefact; the barrier that *survives* alignment is real speciation. + +**Setup.** Small no-BatchNorm MLPs (784–512–512–10) on MNIST — the clean Re-Basin regime. Two children +are forked from a shared base and trained independently; we weight-average them and measure the +**linear-mode-connectivity error barrier** before (`naive`) and after (`aligned`) in-house, deterministic +Git Re-Basin weight-matching (`neural/rebasin.py`, scipy `linear_sum_assignment`). Statistically +reproducible (seeded torch; NumPy/scipy alignment is deterministic). 3 replicates. + +### Results — the decomposition (mean over divergence, reps) +| condition | naive barrier | removable (coordinate) | **residual (isolation)** | +|---|---|---|---| +| `shared` (same task, shared fork) | 0.00 | 0.00 | **0.00** | +| `independent` (same task, different init) | 0.056 | 0.055 | **0.001** | +| `conflict` (conflicting label maps) | 0.496 | 0.000 | **0.496** | + +- **`independent`**: two nets trained *from different random inits* on the *same task* have a real naive + barrier — which alignment **removes ~98%** of (residual 0.001). Same species, different basis: the + incompatibility is a coordinate artefact. (This reproduces the canonical Git Re-Basin result and + proves our alignment works.) +- **`conflict`**: two nets that learned *conflicting* functions have a large barrier that alignment + **removes none** of (residual 0.496). Different species: genuine reproductive isolation. Because + alignment demonstrably works on `independent`, this residual cannot be dismissed as a failure to align. +- The **residual after alignment** is therefore the clean discriminator: ~0 for compatible models (even + independently trained), large only for functionally incompatible ones. + +### Results — the isolation cliff (`speciation_real_cliff/`) +Sweeping the fraction of classes on which child B learns a *conflicting* label map, the residual +(after-alignment) barrier rises monotonically — the real-weight image of E12's cliff: + +| conflict fraction | 0.0 | 0.2 | 0.4 | 0.6 | 0.8 | 1.0 | +|---|---|---|---|---|---|---| +| residual barrier | 0.00 | 0.13 | 0.19 | 0.28 | 0.40 | 0.49 | + +residual = naive at every point (alignment removes nothing in the conflict condition), so the cliff is +genuinely functional isolation, not a coordinate artefact. + +### Positioning +The incumbents each hold one piece: Git Re-Basin / Entezari (barriers are coordinate artefacts), +Frankle (the fork-instability protocol), Pari et al. 2024 (specialisation diverges representations, +route don't fuse), Zhou et al. 2026 (predict mergeability from divergence metrics). E13's contribution +is the synthesis they lack: a controlled decomposition where alignment cleanly partitions the merge +barrier into a **removable coordinate artefact** and a **residual reproductive-isolation** term that +rises with task conflict — the real-weight confirmation of E12's speciation prediction, and the direct +answer to "isn't this just a loss barrier / permutation artefact?" **Falsifier (not triggered):** +alignment failing to remove the independent-init barrier (then residual is meaningless), or conflict +showing no residual — instead alignment removed 98% of the former and 0% of the latter. diff --git a/results/speciation_real/manifest.json b/results/speciation_real/manifest.json new file mode 100644 index 0000000..8c6b8c6 --- /dev/null +++ b/results/speciation_real/manifest.json @@ -0,0 +1,18 @@ +{ + "experiment": "speciation_real", + "master_seed": 13, + "git_commit": "56f642e7f9ae01fe01d863bdffe98b226b9dbb7b", + "python": "3.14.5", + "libraries": { + "numpy": "2.5.0", + "scipy": "1.18.0", + "pandas": "3.0.3", + "pyarrow": "24.0.0", + "torch": "2.12.1", + "torchvision": "0.27.1" + }, + "rows": 45, + "results_sha256": "14b15c16ea8a43523fdc929641b8ad5741445435203d1511ecb698097da0a806", + "layer": "1.5", + "tier": "speciation_real" +} \ No newline at end of file diff --git a/results/speciation_real/resolved_config.yaml b/results/speciation_real/resolved_config.yaml new file mode 100644 index 0000000..a36b267 --- /dev/null +++ b/results/speciation_real/resolved_config.yaml @@ -0,0 +1,31 @@ +experiment: speciation_real +seed: 13 +n_replicates: 3 +source_config: + experiment: speciation_real + kind: speciation_real + seed: 13 + n_replicates: 3 + speciation_real: + sizes: + - 784 + - 512 + - 512 + - 10 + conditions: + - shared + - independent + - conflict + t_div: + - 100 + - 200 + - 400 + - 800 + - 1600 + base_steps: 500 + lr: 0.05 + batch: 128 + n_eval: 2000 + data_root: data + output: + dir: results/speciation_real diff --git a/results/speciation_real/speciation_real.pdf b/results/speciation_real/speciation_real.pdf new file mode 100644 index 0000000000000000000000000000000000000000..80c8800d7d1c199e87f86eb84072a179e09c5e64 GIT binary patch literal 20555 zcmd_SbzD^66E_YL(k0Tdh)A=&EZrrYl1hhkw<4|5NQXfqjUpu?f+Er&2#5lLNJ)nx z^1F-r3Ec1V@%PvB$AhnR&z^f?X3m_s@0ok%a%ssc3PObtBwS^0LH8R;pdbjy)$%fl zxHt%`=kI0%0?S!=Sva}cfxuc8b~c_M7|=imBq>Q^<6@0zi2g?hMOPOu5d5eC*ih5* zvW=A&NchK31wSt(T`vnS8xZ10g_ebvmyL%D2#NVg0@k&+uy$~<1EGFi^>DS)webR( z0Mp7V0;JgZd4a$x&HxFrKfmREeyf1Y{y`4(cLp$YW2pDA0jT>yK3K=b)79I<3g8Dr zKQO<#jkSY?tg9a|BLw&-0z(TSVQ3f{3PXb6!Vn>ZurLaV0)ChQ5&_r*#_|M-{2*4w z#l;o)1;upKA^BT0n9ILpsb=G1=VcFq{+wUY!3p3V1XgqcL?UlvCgu(#ue5p z(=l5{cmBE414`a>B3B*QNY?U$g?FaHoJ|iC&oE>-#~8)8Ii%U3gxZ#5&>9@<b8cqlFUtBT6Wt0}~6HDc*`JrG6570QpD zJX`nUY52x)a|!NxMHEhlRfy~L_by#5cCdbg(qXZP9FHu^5R4nvRBaTgZ8U?)$ZrpZ z+v|Z+uXo-~&8B>yekxgSt=hLd0<{$uZg)FF^6VwK^uvd(p?4^88@0j>WI~r1Tqy{{ zc{CKK&Pqld%sk#>{ciGzXtF>cC-kaURRi3B(59?*z<2)9%%!Lk8e8HG_@|(g__dJDCVbaPws66 z1aNiUKTzxJ+}D-yw(v|qUCUwJF;g=dj3Ag8c$b+THWKKCTZ*nU^x8S#dt4enM1wbc zTeQ_@Cxub+_0&y$N4%2)FE3H#y|^BV=&?tfHp35{y)qT?pe>m?otgUMiktzr8_73= zB7L*skq{flmCNK>B!f%Y-ZwAb6OvUWOyVw23gfYge_l9RA`EA zYoxYSVpp3NyZM@}pI-KSP#qzhm^R%Z;EW^5YjZm;(r$E$QR^CByhp<|pvPLwb;!;0 zip%j$f!W|>fhEAJRg_F^LU#o876h=XJp^>Q1OvdJwZxX)jC z{f1*D{zqn-Q>YW(%m%k_lhhnaU$zL6T6mc(Y7iT(;bOu&-pW1FCOr3mNtU3aneRmW zHT!c{$v33W zB=gt!7_r?^+q^(O?B}XiGcv;UzKyq&o9y|MF(s!?|7v)5zOcP`xNh_fp>$cIy)-q^ z(zyN0pY2J6z+sYkI=4VFqS=W%~HC~p>?Cgv~IC06|X6e zi9__U`K9KZ0T2Ej^;eJB*@%2M_1dBsixd@OK{HBsenP(g=&?7Mlw=tJZ99%5G}0Ha$fCB;Tyq; zfS1`RWah>>8J3fBbO@IF3BkPRl&W+k-Hs9Py)ut@$-0*4 zz_$4pLTADcdd$xwHQGkvi_nWPcHaZzEh%%N0*D^&7GEHujCf&qSK7nw^80CnaI{>D zL+8c9#Fz}wMt`%tMi)Yq`&r`aE{HphU>&308R*0ClbvHxU*~2wQj2%=?~nWHZA-m> zVA5)%bTa4;ZA$?8NlWPH<7d+|g*|(jyZ6{Cx<8|nFUm@|o@pZ2C!28UHDQs5&L+-= z(bvk%wmRD0R_F`mPnkbY{v@z8@4i9D*5>ARAN@Cn`7hA*qMZ4mSg8h{6n8E0hu;y2 z%vU!QBNJoN%{Sb? z-oKk6)J&2$7{$ciOjGA$`hoMj?#nz^|NW*1UObyU6|cwaQX_9|e|-J)k}mMm0^H%U`wS2mD&iOlcj9~a|1f=GnVZp}yf*dmIFJFh?H^uCX-%=x`&8XR#LyLxf z(>5YHo8TMjbMN{b14CUv39OyFb3`Uk@`Yi&osD_JeqAPbUQeS#?GscbEic|DBJPa| ze+n2H8p8V}Qb_d7l=H0wU#{emssyukYyN$L$!4DU+AMX+t#$L8={3XD8%#Q*gTQ^j zq_&o8YYIg~7SP2c#`E^<@oSu~~xhYU3u3bV?6`GkpXNpsb@0` zgqQCvbM)y;`t7DSNhmUy=Y@M2Yloi-Ca_rJ624Ac24TOtU{T_{YKi}XeI_DtmJ9uMiAcXfGbBt?bxAvP#3 zhoaLu4K;Qis0Tc_bB!|r&g6I>bDM=98a(CFY>>+cf?3$3@w%3bdA^6Z#lH|k>PktE z6x=|!8jRfHnal~!YXo0pjg*VEK84Rwb@r4PyET6KixZ}98ha=vwiP$*`f}mV#hvHSsE4lUy z@r~jS#wRjNs<&U^EDv^``#gp;-PQVdDd_2&lrUC$zs`{Nb>!(^W^rcz!qPR(>s7YijzcmD|*llS4M5(|2R|=W;VYYu~*#`C-OAW%cB8=?P|;RUxNK zIMLZ02G&6x+sz*?G9N}8DNP8K6-e_!y6{JCfB(NguY1Xk<6WxXM$OqQ-dl!)}EY? zA6MdGCfSBq2wcB_3J(Z*w~6le6gkna;Y&VGmJ)*07Djhz(=ap&r@X)yO?k$syxkR( z9HOFmLSr$#I3g-hB(OkEjLD#X@fOki;GJ#*D2wss)A!s3FC+Qy8uv$KzGj<=K}by7 zkJ`w_(z(-6RqkecXYUFs>6^S;=8Jm7h-PgW*hVSWn%UKuJSh{(qdEI^OhmY`W}{bH zg;u6j@|=|{dvpw;w@h`i#{qOQk-i)H-lKqMQFcj2u+S?it`%VW5SKJ`(Ce*> zWs>e0*ePVOoprTR!D*tb7`{n9kF&%g(?X||U~WFwnHS5I;L~bXu=!q@ftxr{^2~E+ z0~4EsKi5a`FK#!jHvD3Yd(IcrZQZqf7=`9k=Va+=1P$AtP7Dt)U=L`k7ETY>A#N3( zRZ2%>ZbfxGzcyxE%(4{|STlUfAMxbQHy<(ONi87(2U~AqI}d%=^Yi)TJukA#hZ`&R4W?m&-CQd7Ubm^m4Oi2a9E86bDpa=r;@Ghg^?uUW^%b}`N(iU) zyVFG7Ud;u?EtwLQ2khf(8YZj{HlQQlHC63({3b4Kq^g&!hIv;Z#jI2aUH9XJUQVsA zN$$pxhtU}8X!z3Ix}v0sBjH{`{awInDHMHB$L;3J3R|_h~u7davZst zF-!<%TfdhotZcOFm3g_tFVjTS^)a|e@tp16ifC>@Up6%2`io&7CF08a5b_Iru7V>V zuXBc`^om)}hqkVS@T!^bkSA9*;u?%gmC$7%oT@Ksu?^$frp-+A`Ri8Rzii`4^jPD~ z*T)4~Z`#GGpt@NDUQLVZWFzB(&>LQhg|F^3eD}?DmQHAgWtTbYy*J z7VY)ciW6!dwld3GmTK}kmPR_yGxD{#;&$rz{`eaNp2D?>~a3o+_A@x)TC<8p&8&&)A3%C$e45 z_QP|$#B@it^Ng-ywVlgBk%8DNu(~Q!_=B@gO>Q+lD(Kp7^;@N=p9;d+0JF|vp%LSc z9}}N2{p#~E>IYtc}g8pxEB(zmste|8Q`?Sr{I7{<= z{xF_K<<%#GC5T!`C%2St{sRF>^*J^J9^YZuw_0k(HM2d&7CX4_%y`w(TBaX`32}VL z`YSu+INxOSLS!3?a+#rbEzL1wDipaY^ zdbOx>U4j>{0RM!Zh7xKjnu7&GOI~RVW`95c7!BcIiMAj`o-Gm8M%GuXj@IO5 z^N!fi=^0FRjqXmr(AdFhmos7z*Qb+f+CK`$JM<#NB796>>X`6hh(Fj$3ff{G1RP{b zA`##<+ckQ0pDm0Rwd>01e<`W!gtZZDj#sz$R$Ae#fe~^}PHCB|&a{QOft@(}Te1AD zaOVa^9+&&=19W0fZ&Zvzwy2E6$>4#zpI#bhZ)v5Zc&^DJ(h}}wOy)Hf6Q)Q++$)eE zm}6ogm8SPAD38*}qy0qW`O@{4W6*X&v9v(eClNnr8X`s`dF%2f-}Pii6-(w^%?Mb7 zbTwT)M+x)dR+7J{xyy#;sNK25He5y$$w0n|b2T1}K2C7nb zCIcsSE>7GE%zo0w-n{>v9l9C&?Y7kWYSX7!WQU339hV*a5B8Cu_RH9I2-$uU2?`S8 zBDQT^_2z}k;rqL{a8D%EStshj2tw7G5!CY_)%6kNFv;PwGh|o!yQqzb-bbG)JyZAL z;uSy96JQR)w^nNx>m1WX0{QRK7mZmch&%;H3|@;O8&_jK7xB42#y_tykf|u!h5uG8 z$+eAJD{wQdd(JB@F1Pn(Ct9rAN*)y17QUArZMQHYsLU4Vwc!a$Z4;mi)0?NuTzIGT z!B=Y~jj3y;`chx(sj&8iQr5j8R=b&X|G`FrtcAB`guFTP4H?kDB#<-F7bePiOkBdK|K8?s6zT#*3xdE;R8)*4DU77USRD|q9OtPBQz1@H zJP7~EZWzuWRfmWhQpA+eypESjZaB=4YWsQWbFCC2I(bwWKRHhE9r|i4G+_d@$7%Wl z?H7FYlsp7NCN~gRxOPIhnm7C!)lC2At6UBZ^5B~9y`*tOPS(VnLlP3U97^by?%bgE)m>OgCwvLeRZ~1#mA~lg7uZ*Xn<%0 zZyFg79!Jg!gsYQ9Ogo@DFIt3*8=BH`^8Lyqqq3Dfkups~MmfITb^WdOd#5ADHeF6I zdC08lFB0PAtVg#HSaUv&-RFV&erM$VR`WP-vsfXK=Q}gfY7Rv`m|bB>a+kP6RE&i0 zG(p;;=Z)U4Ury%8m=a-;8kV3l4EYClT?s9bI6NrX(gDd8P>8qDMxZUVQ{ur@=B{KX zD2RhxT}SoADQdrjcG#6rcE)PjM*8nAbT>w+-e00496Oan;vUu;(%BAdQKNnmExXU; zqg8L!O=%sUiu6vsfopGNGjEa5w^(Ki58cytZJ$=5wz;8H8BDjSVJJFaQAatLyPl~6 zWw-=yIB?8O8`C|{!|KOB5dUTZPYlO%x5z7JP70}IP@orvnt5UP!WzCNo zZ+2_cg1~;Umv&~=QbxCEUB1|9y$E+H&n%*4t|0#~-=VX3(umKsa3n3g+2{RCugdd_ zZ8WK|kNUP(_wMa)k~{GloBl3Dz;gYz7vO&aT_kkWds(4G6Mek((gkZ-v*MLsht*e~ zl#{zQGCV!|oFRK7iRBp6fL-@#Imo&cYT=bd8-r00HcX_F4pJpa1 z(2#I(M?A?3%9V=e)tWaKP+)&zPCk6%Zrxc+JnsRQG?rz#ayiksMB4A(DS9U;oy=B{ z=8maa$!~JKr4-d7fCUeW_I!d|xNih|XvA2gZYRDz0i$V&si+@0&*{ofIVnNvd(8o= zDP$NCoNr;tjQS+2BpDu5dOJCOd@Z2Qc{s0K9+pd~EzWov3r$#{ClrqOZ~LYm z52bh}O@zN6NT3~vq_x3Wa!G&Z|9$-82V^dL|6_y_7Iv^;R~Yh7*wGeq>41<;c#>S4!W|ji z@YkVby}0@$Rmb>_oU~%9f{uo&z;bLFej8<-U{EL5{i^M${f$%4-aQ*kR?|4J%FR;i zm@>KBc%9grgYL5`=QLOU%?Qvt-&OEbf>XvFd=t*3PpCDF&t_t?A+Ko|szqk<`Y<63!O~Eu5ix{z>P?0}?2I{dg6o5a6zuIhh z8+1qda0nss>9A7Y(FzQ)K$Vqna44~JF;oz9CkM3F+@pSl%ggBf4sb>n&Iz7a%}^Y3 z*2&pAr<%`R{i-Hw@ayi1O&qzUSlCR4$`sA7A%03g8@CCNW!D8Spnm7}UZ%C}8r%b`ibHY!B5@*)H@+BN;j@ zZPnkRNUV96Zt3z6kB7EYD}6KdLera4zfDd0=rQyf)_{CIah3l-&mElba0SQyTBGMj z^1?T6p{SE0k3Nr8NLSyDHdQbpm)SDqzG)yBt<`a5hp=i2hx25o;MijS#U&iW9npUJ zsJZ{0a#GqW*_uNZ7mpngMKNKW`-=;4IG!-xUFR^ z+~sj6W<0ga$fnCqw^qAaKP$hF_tq_DCm%OqPJA|oq2#2ym+aYx`I4c%W1$nGr`&=d_U zwB?PNW*PCp3A$9R{;nmLEB3w0yk|^}OoqGm`f!INUc-U2 zkF^Kg2PLC95n&JGp`Lqi8oh!z9hKb`6S3m4&*dyDL+_+G7ex=SFpCAbB9Z^CiEtDg z@ZllVS`Zk@0D{7|I2A!FCv-{`!k_l)O+QgL;KRqn$Ozmyn~j_JYU(^54*mcI6wCBj zaH{Yh04_M}krqU&3V}-#Nmoen(e`Huq2zjltWerrg76ePTSgoQRWt#09}ZMz9CSlQ zAleds3LY(r#ygYtG=&i7oE%*j7J9HCK=dChy+rpb>JSJKet%%;8yZ=BgRkx^l;el` z8v~@xMv~8^6@~>ALod236EgsDo7kt@kEBIln?`XEF#PugV zeHTP7HPJIp{!SYL3$Q|n{J~OTm6c?4$}1atT#LC7BhWaFhDK;yHYa^PMNw1J+HWFC$+R!V;X9zYgTlxMa|0x@T6+By%JfA0;x)LHqlmj_*`8( zYafaK`Yugm{D17)>CL$gx)8wqM5Y=<>hH(fsZH zcgTyZT`ff^FCFz#XNTe2H94$-GISy)Rq4AIo!CDr8)a>_#^$zId2qaee6XAISv_Q` zT;HeMGPj+@B2H}B1@#AeP9Z^z<{5}gK2W1tsXwjHKl^3A+voST5ii_v_xnjy`XxYy zZGu)DO)~}M{bp;EXVE6Jc`hFctEsw)a)|hSSOmk1E(&=w@tXx8vK*5OU{4{V8wG6VS_v4{HJn1aiOpQ% z8yCMGIw~-}RH>17U(dGyodVmY#Adf=rNv)=bM48i%f-D;AluMK98S{>XuK!M#zpFk$PfYCI z;zz5`?;@h}LWJPXn26zh;>Gt_;3p@_4NVxSz8VfT$SZIU-DbG4wMn`3P8XX>U;!?F z5{Ooa0U$OI?G4miSDdo5Ts@_Lx#i&K%n)jbQd~HB&Efg7E&7(52N2%u7_#09*Pjv% zODERY8F)~Wc-}a6Nj>G`dv+eNv8MLP3i=aCOtx6o4+~a-A^u?Vt80n4;Q#Q6&2dyy zgPQF^K?*yE&dNQ6DqQ3D{QctOUo6x&v(KVt5kZFVwiUnAQyw3hat?W{sO|ToEC~~L zOj*KqAYENI^)C&9_e&s&F>$z<{1YzwLS`VUD$e`a`n_akj{&C-2|9)JaUyL*CYi5dDyBk+J>UNhOxARAazl4z?{(!=**y za(d}5e=&Zk?4`Z(d&ak=qzBEmv4{>EkoXgeEus0891lvgZ$|=l(;*8_@Ym4~Hr+j> z6Vkb4_~wn_1tldiQ@v|R=~mMnh0B!RQ0v5$VZ~29`Sr+h-o&b!yO>ikEvXqpugiNT zlN8=_fjK;aP0RaVw7RF0J8L=HDprXc!!_m;;|bNT;2#vAqJWN|EeI^n7;WaUm2QWN zG;7|1vx;Ge*j{UnhgMV7??y)bf>Ql5g!KXusK8} zflHLr&jc#qknSoK-RWfh)ha{b8)<`T zX8jbrSM6#dgtQfXf&1(wkyEIH7p7+~b5+oA=bH--zg17tw$bkxK#kDu#H}R@K`2uw%2~sJd+u~8c{-Nau>p}k*>yeD7>j`43OxV8l_LY3 zZr-);&M|@+h;J(3b)mTM*ssm!V!9%I!&DvI1yoiU61=a+7S#w2s6nL~vJ}4#eNS-a zO`CBdY+ehxQ^{)hJ7q{LFa(PFgLPNX5~GmgAe#`0h?j0j*laFcTnjjSNKraYU{dW) zCKP%-Q{0p`F*J&7et2k&O)~3r4BaI{ldSamNSh>W;;>cXT2Vjp$$iMSC~qmrBZK@< z71ElB-H%UwbjKz?ux*E}DGY8(ZR){tmfOziEAi~gg9Q3)YqZjLbl>oP08Lb^hR0HV z&aXA*<+S>sq9m|25q5oamHzWOQy-;Litq#$PO;z~IQ$R%Nn}!kGhq4@JoTRvl0~P* z1w4nayg4YkGFuUbi@dc5=2f>j9~oqS-YLzL@3!a}!^SSx$}_3oV){7~FMKO)7oFi} zQ1Or4Peq@T6mi#adSB58iN9b6tBvQm1lc9)A;`Qz*e-d=J7A^CqaVQ<$JIF1os0YO zS-aQGyk5FP)XjMzcW=F~nU?h5iI+0WJtb9D9fZ>@!+O3{@R%1FBh1{v5+rx8=bS-dc}%I`vePv^2R6Gl>qC<^1&*ZVjuM?K59lZ^ za*=PA*k|(yy<0E%TA>YjT$+6zs+ODLALwSv+4^$CNv2w5`oYbws`(B!sZAY>!U46M zLCX1FeVsNLsr1zFqG zC(U+2@s(0)HbK!?76uD~LjS>&K809S3IL@O>`HVrg%IDa`xG4Ges}kMSJ8FS&V&~s zrPs_OW5+;k49y>A={~FlWD#*ms00-2=1b`ZaMy0l;inAo(mmc!UNBt!Si^62IlDnp z(v>9`3w>BH4;=O<(RZC6_ssdz-+)Jv4-Rt4>3EY4A8|N4am5N~=c8F;uf5x=k?m>k zZha&{jVD5LHNH|ZBaLGuGLYl)^!A%~M3*2wdzr$DixC-uVWI*rGODY;oVle!h4PX$ zF~)n^qn0EQ)U)@%ZUR@ig;Z<30?n9KDt8v)=|C(mAHh4r&RaP@&+Dp2+NCqXwikSv zA#+Hi<2pS54Kh4GHz`Oz{0(ZY=w%i07!*QOpN?bO5(iI`wvde+AHFJvdP9E{9 zqcWcFE(L@JdWbOYUcYd&#)+4eCwQo2RJWtWVM_pny0HuEim6v%ZN5sbBS!CdvPh|a zDe$y{OP^$hd;EZUmywPvM=ELZP62Ow_2sVESarP$;lWSnGxc_H3c7?>&m?Z1@)y|Q zQ@s%J;pJ+v)fxVpC~7~98Lcb*AmB*K+Xi;F|Ic)&PN~8dgmdKn2A+72hwR!n>s8x zoY^=+NySUmDQC8iW1RBsd?RaT(a7p!1^UNNioBteSlGdWSm201@P7q=D((SEFz^6m zVs#9pT>a%LvrcV?G)oTc+(we1*+v0xh9IlZ`$o&OJ?}3ji9%OQXI$1{Dhln7nhnmp z{w!m3eJ;3+iBp=%WKds2nI&0y@0r=<#vq62hjGDza-aQnBJ{OsEUzgNU0GmCeg3(s zRB*LmVp@sJx$ks&QeIi(1*W&?l^d_``U}<&uDKKv*exa~P3}OTcu9glk?L?*ymwCL?EWL% zFC>grJh-5gR5Z^A?lLWxy(FcId*oL&tJF4{W~p{(+gxt4MDv{`(4lx8KHjna>GT`- zbZUtPrqri5wy)hbA`!la7B8GJUMtDu@blFU_JMX2^rJI^*?U>@{AR*XI) zB(v$6CnLqe$CnM9-&CzG^X8u|ENWqhmn)cWNFnyQ*WDTIB<7Wo*WE~mAGaXz-v3+uIJd6#aH8f zkSJGg<>j?2?if|}`R4z8_ltkaA@0Q-6D+4|kXW!CRQL~EaP_}p{X;u!1GJKe0QFFC<21ira+GWa3l4y{eWmg-uM>`6xo zCf$W=+Zn3V^jZy^8?s)A?0dyTfMk5WOp}tG8GJ1emlxyj z5K@;J;2{3+_*AOD62w8rkIh;|``x}A`(vr}W}3a<2|{53ljuK)X(3~PV@|+hoXz{8 zG!%wxyH-XN%ine1ThSQyC?{tR6N_tvCv$w7B{W)cE(?@U$FW?nD*4hkWh2-XkXruE zycCh6QWk%ODxo%D?M!x^I>D+>Fb)yxG8O`{U_j^}h3flMDS%)Ne!oOfIw@!x`g~8k z40vbm zk43F!lDiyy_e${?_M^S!;8UHM)8Gt_5!e8%J0H~{?o?(NaH)o%>&C?c-s6Z z$;&FLsLJ!p+g!FV@Yc0(@x(~Z!_!O7-ogU}2jr+`@$&~11|w!doGBCF# z&AC8=0K@>Phfs`B{byF^(fa;64fMAH{X+we zmg|2kH?WpY7IvP1!2f9BWjw7gshJ`$Kn|E0Fh2xg7%x@M!cF;y2q7e3!(T-p@e@c% zb+D3gv2(Hk2nXwW**F_u3hEYqM?3-oMEo-;^cTbhbO6vB6a?}=KX4HU2=l?TLBr8U z?cqRZ;IDoFStvM)1o&XS|NX&?i>U*?;lN2H%;(oQ|A#q&v0(p`o}>Q2PWhkxfrQt8 zTmz2L{cqm>x&{TtgCjvmAP$20Mga-|2hIo`m4OooFySK^ksyUdj>;HeqJVl7U|x^f z0COOKd69r_VUERMt|5VM^iSDh%6}bDKH8_hG)Vz;bY2|v1~E6;HcHnb_MLuj~|#F3@~%_!w!(ikCHtISk$AspT+=KSKucJuoVFf zIlABo2;xV{31eK2>YM=~{V2JBfN1kkoh!z`{3rqD18_@#GG_B4eopnbQ9}Hj@~Gyg zZTiXWU#95CNJr)hh{+xeahvI=yM{r?9&hq{EK{70(6LLQ8XPu5FUwhpsf$Tl^5s)&-HH0X zKjuE7BG;zre+7(szEE$PU#Q~m9*TDG)>8S+w!zA)7q)3K*z>$LY6Cqz_U zzBNrd{bGDuS0|M(IB&M*>-}-@Hzm)SE`G0>-Jz46bqR)F% z!fbcAw{InykNl&vGp|(HsNmRl+SO4;eYW0=2iE6qzIw~FRW4?w^Z8SW-q?^X*Qezt zK?c#~OL>xZ$SBPknk&@aeZx?lAP_oI?FC~@h6YTrl?1f36STl4PfvlLAuUuz&x22K zf~wmzQ4aF{WT{Q*O+Ee@A?td9sDx^@(?N_U3yCr;^{Mq0v{>t5z>n)EK2y#3hCLu1 z6jE*it%N=x1>GUA)}kUL5NBpBB7yNF$Xp{M(Yix<=h+mJ9>_#8=5s75E2v5BGUiLZ zWv1lQQHM+`djEa@sz08end_2`(7Peqh#U(3j#mhDbNPXI&+^Rf$&+J4`M<*r6c%6P zPr|8i1Ox~(|9Avn2RsT#>OfEkEoJB|tXdC(s?zJ6t3e>~Ydu;8IIXBid5G<#XEEVs z`e2G1Sct%A;xWB~0=x1*^-4Wnl>&%k$nA;{C{3LLiS+5c78u`mT}m)mczz{GCLMC_ zoPM;44&jhoW*kqD@FVrgdvlN3`~VQ)|w5F1cRo9y=3Rq5QqY?WNWI`;#kQaFK?> zSRPOSsR+OE1cUs+UQtgJqrl_9JZGKeG!MHvKgM&uy5TDGgcCmbX1$c5Hry;tf8d&wg6!YF#n#cik~V%P%{NQxYTi65HwcKOByJ z-f>uEA1gDi!?MsA1NCd6|HdYue}Y>%O<6_7{{e0RobVU6h5d$Xfm1R^2Je3$+v5ZO z5y1KXhip+tCink{Yyq6~FJud_WDB4{Zx;teS>WajwsE$$@U;K&VvJv?4*(HIjQx%J zP(SSX-=_J9_unP^KTzLsQT*RWeNYI%{6E;iaExKc1b`?2)B(KmqZWT*lOsw0;`gV_ zj%*olYXjs7;PNAh{SxcZZv5x1>_~vW`u}xA{STtDW?D^`+aXlT+ow$~-jJ&U&g#q5 zBZQJz+;t*oYaYNt4QXmj_f~6@z!cUNX~8`ZvL`#5k86qd1Ot%fC#-Vf>i3X*;ndtq zhLa(6e3L~wuLbZv;Iq|nO}`cUU^I$*HSa^x3}KPdic*j{PV1$-=k}BMMe$2jm66DB z*X#kV;&iGz15}f>WMB`)DT1KS$Vun%Ui|%izxO9(bw38A^{zIkyVS4^160=`_68U!}hN)ka zt3yBlyIFbNtfnm-9{J>#m$iU;mn`+Q%7{Zz ziiM&wJdjTAoGCAqFzP)ic;eY1b?(LCR`z?bSFDWX4u02$BXRsc%RL4i|C{+AuUP`C zI#^?37Dw+h()sb$A#cDhKGN}@Nut6Soc*h_9Ps8KOk{=!2%)$+xq3M{Sb}`uLQtp> zL;z&(<>lrn3I;p>bxp|C!;Y5(48&5by{&*Z5&g59o3$;-(!$CSnC90IK+~fM99&)G zF)wlAkr#yl$0i}d5D_3w12~WT5GXeU!p-}Sz2fI#V@m=73ByPLv;6Z9*x^XPt+ECE zRfmZ*VE#ZZKkJ}qG?qFD#sxdp4g&b6$LnAi7xGv;7{<>!UWYL?|EdFiV5x&60Brm3 zb_fV2JNMsp5EziAd8`gDA_6SXzuH03m~_tLb-;V2j@Ka}Kse}FI|LfD;Qt;E0Rudz zV|7Rb#!>rsJEREuxcq?Q9T+G0U+o|WDEfF`2m+3AB#*U2h#Z$Q1fcIYEf6FWh@~9s zi^S3wiNg5G|DFRW{5#Dk2yhtwSUVH~6H54ZUljWHzQPcUYyaien@9}_;(QooYBQYlKSUVKPg+5k?#?np%6NLD8I}sQLh#ad!{-#$D5i}-( zdaRuY#-aaL9T1KEU9TX&uMrS+#N4Tm^+jXi8OQ2Gfbiw9Iv~b-oE9i>ApJNWP$(L( z1jqWqVA$$@(<>+p@%y|mk>6wrh5x?h!1HbZ93Gn&I3Ip|-Joz`k>l$D1)SL5`U;~k z0V&Mi-*!#-cRhs)Lx4wi$J?PW0hD8Xg)w2Uf7hW9m=MmfI^=J94@C)!{6-5J4WvK) z)z{0z!okVLqT*uf3Oc&o9Kl~tFAEQ^Bl8YyZ#a^K Li%UUMk>vja^t;ZH literal 0 HcmV?d00001 diff --git a/results/speciation_real/speciation_real.png b/results/speciation_real/speciation_real.png new file mode 100644 index 0000000000000000000000000000000000000000..68f52335e54aa2b9a70277ec1979befc1f86c91f GIT binary patch literal 139235 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�tk8k)A61niHhuGPs4>O(c`O5 zPd!<@nsSJxbXsAU=2fMg?p#r@_1Q6Re0}~r0)e-(Z4Kp4DLU}+W1ke{tXK0b!N^(B zS@80c^8Ni0=c$rC)9I;o>Dus2_HAY|X{9eD(;bR{kWj&RSvW{^(+8OS#~AC+q=6XjY~1RO+i=GFPKcg;XCU|E4P`|R5 z<5+R9xDGGh-zjy#UYK#9={r`L966~`e@ICPDOX*y(DerYD9Uo5U|QcFHLAAZj2QZ| z9fmzetRxP4`uYZqEF=3=tN3iJekp1z?`mY$h46OOkk=Uxt(2V>^I_p5j4`= zhK6oJ!_FVE#3_DA8wrX8Pt4dxkz7zLUx>i-;fPmXM@J!j=_s)bMD`IxX^X67cXrPe>Nm9wz<&a zd~!OtuGe6!uz)+Zvr1ACS(g1L4|k*IF`IPaz>M$VzYU=80BHb(ld7`| zBr+92CbzGdLN(AIe1IK@@!fU zt>RI^^V`0lH!)?u5g87*^0d- z)vu0Mb&F#GPa}5NAACY09NnS*DP>VN**YC#Q>Gkg8#iub#|w1`A6F4r2bhcgbvh5h zTIY^++pC!YLlp4|&46mQrQZFKGfgW{`2!2vUbTQ7?j9I;`};TQ7^&S8ukBeVZ-=g@ zj#&da>_NK@(`jB!6X5gyxt@61(ozuJ$!q%E#Fm|$?qE!>@`pn40PVQ5_jWu^J85D? zz5NW|Nq1kMO;HTk3t8Bb2m&3_4-HrN9GE3+w-K{Ry6TD7A7Z*47O|VaR+O3AutY8H zZD@5ge02dc$4vFrLNZ;JZ1X3E_SR$84|CM)n2bT|n7M!8(eb-KsE7|v zzfBj-_WDxd9T;-(Kp%y*5x@5H)4lcLT>~Adcl?#@xk3;8or75b@E{2EjQ2e}JUYeE zqn;!?V3TZ2i+7EDJ%9INVj`Q`Qk+`csBr0t+h&p)-;I=F)PACHf}B752sbZFbq|66 zxuc__PdIw>FQ^F>)Vb_fwT%SyQU*;e(sSrm2%Q5$4F-H4aT&Iz#eFW+hK_vjk@fehpgi<%cYjmy60a}-1fv3*DhCG&`Mcoj*YK_c z3Rz_ZeQ;hRaeKa0mCIi#pfU^YHTb7q_c%5Nr(~mI0K@6def!?+AyBvRA~;HF+u$H( z8CPc6)2<-sKXr@4utvImi4O5widRj}Ijl_gD}s{S=swl^x!IRt;OX#5eN^=ZPZfQf z$gBB|$HlD&-NA8x0b7X|RZUOr>kp`#x_KUq8%$UmKiU7uhcxi^JR?y#cg<6($803! z>8_y-35rG#PrimrZQY0Q-CWYj7aJDjiq4#Z0DfiCOu7>98}42G=2C&0h6apDKww;t zM1C~lEmmyA2h$F5=Y^jhaGEgG)zu~VMg7Piy+&r8d6Z3D>PgH96#Y5rYP1LsRiqcm zAxaPUuwWzWv$X#eW=C9Y+I_VMoU-3NVACp*Cwc=zLtJKUbxfikdE7>W_+n-@Ocq)_ zd^59wj!rE2_*m+Z6$VAlxhPC+`hsX*f3$P$h-%~psDZHzo8WCN3E{iU9n?;9Njx(< zH@7!2vr{nZytrFqyt)djQ+Wb8hhP&wFCFbBf^nlM%6b5mSH~aeQV+FeA!_h;FS~MS zpMb*;n(zjmV?WoCLkwGqeFqQ9n|(a_{`tSGf6sg7O%k6!IQVD$XffW#(r+IXXhA0TQ- zy9W+IHAIO%&u}znI+NX>iET}H45buX*EMwG1!g{Ik!+dMA7CHas!z{LgRO-;Jf6uWoA{hI#L3$CgARy+xoSh@hjJy5S9UL6k z@$w6^5Ufxcn3MCR4$vB!@$N6O@gyB@kRKi;C-cJ}PIjl{a3(n_f6F-Tz*|yUBwxJ) zmBscqi*HO7olDthQk&SzsHNe7v|nIi1J_K(Q=ITF2J#hZcpZue<0hxZ-^j#p9US1} z+YXZPB)F@-SkIWV{a83%+!ZuGH)CMGtNF4OAc zTd2rigAk|scB$tQvtIDm;-)*31SlRK=FHa?OB_=UoqJ{sY4$l^*R{s$$T@3 zS2G|#?RCEKn7!_lItGHCK6?g&&IhOs!|UZLj&I+-t>o~=xA)rwe%Ty-r1ksu-Iwzn z?=S;!y7ygvc#Kbpl9R)L#CeZxjQ_x+u&}Uj6K%UFBm&g7e_($WGkr@rUgHwvm!8}n zFnw4`s>5LQ>@%*6KnvylK|ygJ(}hFd{7ve9;^E9D5NDe)eTIw(YoR^q27m!u055py z%Q-A%VnRLEs~J_xkoZll^Lia?^MTd*awmmY`VZ2Htv15B!;A#x)2g~dHe+mT>%LyY zvoV=_MqBX~rIo#ksfi|INUBrlVk1EYVLF`(Ej~GUfVZEKW(BxD^KSGSeYG^|$g)@u zP3GxHEr7cP-ur~+w$g!oDTT*q8-wCZvzCdYeoL5)-#IjL`8lIDH3nXFHh%d@ODqm7 z`u;O_Z0Bkc@`W>=Lp3B7WcTrr_cY9+?ja&(7{F!>70uAgJNG{Mk?R1u!BUuNCsF4k zLA#NjVp0*rq{dCs?FxTj!P2-y*ipY>-7t(xAsSA@h5%&$5VT)6dI(Tk&t^z)s&7)Y zS1fztMTd=q$gx$Xb^B7P_4-8px}3-(ZSGTa1pl@m(f-@94;kmv3y$7 zQa`ey{z~-gvbfPuAwu?tgLiDA!_D|mb4d)zvqIWl7)||lA^q-UywfaH#*Gz6oqQ|D z1;`t`PD=~{?9M$eEFZ#y+znrM;HIJ)msW;y`#NDk!5wJE%iw)9v2;;Xk#0@)$_6#n z!*eXCAn5(d-F`gv%em`HfSlevRJSF6#?~6_jQALM_yC&dzQU4{l3SSPAp{GGcwH`@ z)^K#pX|U66^A7X?0tS3vzGdm6U~`o0&VBIWiQ!2=%uCCSLG0ix*F6!CHQOBLGtr){ zYb`azB{in5*0!UOxwWhwEbA^aT7h&og=;_x?mlMzzRY5E-QrNGQyiCC7t?{!QVX(8 zDyV7v{0g&~!<0Y$NdtXC3zRKK1=6=@pvh80F)plW)#*yXPhvq^qwTE{Q|jTBZRzP4 zmy|iWMkdXRIYmx*X%)8R zG*rG6t6$3ZyBMpJtfCG%jJ^|=%AF~z{RMNd<6LtTo38)LdfD5z4}wBE|485mn=_ob z0B*Y?q6MvQnDIGja_k)miHVIJk&Jn(l$&g()K%STr0X<{iLngR4lmpriAPcOrj6c% zb2FP{daXwKxlyd96rL@8PkIhIhLYpxk!(}7xJw3I1yXnqD9yg!v*i%=NpG>J<18mR z#&#+3`sLNpmr;MNVruFh?K&XJ5|l#fx9pkoELL(Ihi|lwEy8ZGtL$F-*|9|gL4T~X z+tQfG{bXI`^XKI?HABO6;^V-aMS^{p}w8$WD_q7e%OKC>bglLPaT3k)+6wp@d}4 zn07^oCS#HYl*pKQO2*J&$Q;R(Ohrhhv+nkHf1l@f&Ohh6&UN;+zx#Q1yZCs&U$1*u z_gd>7Ja4bnb8Izm2F=N}5u@*`4m6Nw2=n8rFf9)OStdDlWo(VzeT~?Sqofu?*-?2UY9cod6^ouO^ zJ6LTxWxEmbIUt)XK?f|(qt9VIKf5_;raNQJK+=fz|!HIJ`xMw1>MMpiDq_&4X>{C)|2UN+h zeIH(xH`dqiMDm9-#s)=+%&_;6%29Sr#z$>KZHJH0=?r2v2ExssrIpS59rgpyB9vjn z#*O6m24?#mOYb!KmCWlK-e9PMusQu|QQc9?OhG}-hg%0wo5BTUGc@7(S5_!r#bC?g{~ zb{^MacK7jF0F|r{vKz9?0*K|p4@r6nJL(_Alj<0WZ-PgK!ZpLRc>_K^YU*VazR|oil(mh-(Qr<6ZTo)T`U;{s0K%KA3+X929|Z?d}tAfKlZpw|@A+ zbM+N)>F4zsHEthoC1yoN?hqnjJ0^@T`O2itee*JsWWwD0O#>P`pePVX{p1lGI(qyV zQp)G0!Dr5g=D&5 z829@ynKR$_Kz~_alEbtnru^@yC|}V`ngun{2g*m81h>W&Jn< zwjjpZNj>K_M45dJ2q1H5x~}+0?Q%o8nMoTATypYY+Nm>b5;baj5hx>~FSQH|wgHglm;NUPm7&0>OX$@f;pf+@RdE6((DWp2g51SlbM*6X@ zAK`+;gLO+Qe3eHBKE<%N)Qa0`WcK9;W~%xTT?BJZIKgxwON2BSsQM;v+^|7wWFEiG z$A6q&ka7q|VSJTW-K@IwaHs^aJK{&%+{mw2h+hkv_omxK4 znph&W+i9JQtZZ1xW@DJv9F61su9g!nIe>`YH;-;+WG*SfJp{QlcPEz~M zOb*{HvI>>7T8GzofeK<=4-5_9otck;UZQoUGOSz=O>gw&UAFNc@gyNT<QxR;FW>O#rK%m*_WI46N&pCf#QzQSo)n|fTn}Eo z+C}0ZMgmxn@G)hti#w%&6h!{EI zgWC%HJLI%B)Q^O25VH=lx0>fK^PYo{B?jvN#w#!`=p~So!+A4c<0Q~MjpIsX1WnsL z`#)vvAjTpRbQ>@VJT6bXdYo-BwAZBmel=6})*l=vgVI~PaP(s+!7!PUA3g`(#y&Jg ziGWz1G~JTROMuGj2FF$wP@VRnaY5(j0Z2vhM;AL|DB~9*KCzOZ;JS)iPkI{?&EX{` zPrf^CHk1yw)vu1bhZzhI!itgA|NMAQpSC0SqM2ijIutgaaS`Gu@KG#-SFA#iaQZfb z(zXyIx`k|hYucaLE?H6;Q;vB=&JDN@qpm0-gPj~FyNb{qiy&m$g%5?wjM@i0kYxz9 ziWpw6NVCC+6L>xD?JS&BBK09~`6Avg-c`I%qjski7|f2@U=uLhNkE8_zZkCob|-#_ z>juP0$|X71&?Z}^&%QfaZnd(G!45$m=F?#K@B($Z02Qn4*AMw$3%S4N3gU8Q(8 zHrT3!j|4)LJ7U`!*Tp;_#SCOk4V8<4nHdzmR#jPfkA}u_FbYq9pC=#PO59G2Z7ciM za4f`6y@){s(jmnQI4~>p+E=r))3}nk^cgoQ!$RD@#j93%VxmW2G<*Y!F-)sWGFC~} zO+Ft7@jofUkN`_iX23-CIyy?ly?YHnEd!53lJP0`iSVDKjGL>*3Q4ux77X(|!DP6X zz2xwgm(>Fe`2%mg-}ANG{?q zSP<}B01+$1dH`xY;gimVIv0h*YrJr^JU3Sy-C~0uwGaN1Lm|hQ@-pn1iR=W%dpRa1 zrX@A@E%Q-I0^`p4h(aYGs@=i`LL$=#T~G59yYakeSx4x{G0QXhp3+9%Q`Dn@ISftO zELhS(yj_CJkl;4uG=B0W;(~YhjSbe4yML~p_ebqLGd(3de+N2Vrd=sz{$9 z6EuY|mV_+{u3ydfU=iPkQP;VPNz}XBj zMC&KL+yCXeX&%HQh!-pkG1Dgd~!Ngf3E3#j{KgkqUE^kI!@dF^O zL?w#|HX{s*g#k z0Owul{8QF|fJEDn$IELQcOHU4F-pfBtK)!3gC+Ftv2FbwdDJtj2#Ed-gK|k3nFaWn zU`uo=nV1^~Q$#@cO0(2s+V!))>9`damNN*${8r8~^z_ZqhI<%#R(ORj-UD<)Wk8R8 z!gy`dFHFn+x+V7D13ZI^E}-rtpWw=-_~p8$6^cv2;(&tNVB7h@>|s9`CRZ+)0CnPt zsoBTp0WPxXs1tL(lU*?EJ;fTwwvc}+4=(=WRb;k}My$-J#UvGcn6O^cem5mhzOo-^ z6i3Aws{{x|Cg62!6NP7S&6N;colx8o>Ada^HzaR zc%{Yf-@m<4#V>gE{ns7YvJZi_AdQA><~D6YRjQ_=S?+#>T}2DNN`1*3{*dY z2J{PP)9i;kr+Ix>9FUKe4cTrMcxcjh3jF(Zh%mA2bJi)f!vM?#`jlT^d_*ol%t84a zq5m3W#-J{P;-rQIKnn@#Q_NO@C~W#sj(QKAL8{|P=MJwBxNP45GKUo$vv8^y4<}A8 zwZNpN5OC`c&=nt{m4>*({qEgmpza;PhyqjE`GCN4KDHjT1z?1)D2CM@0En0oC%}Y- zJU^dk&iFQEttV?W5zjc~T-cE|JONrlxdFdkvcA*@3tKDYT!3ophs39NCor{}Pk9N- z0UFp~UH}T%V#u%Zkr7EnosBB1f$LZnI5?b$WZ!8k1Qs&@#=nNn9B3Nk4 z`t<6=3ruz-t-kyP3X~ThG(b)y5`h^SB z^E%8$_zyx*PToBDv?p!lNI(XB&x4jQz$(UHPfZtJg5U~dQJ@=7PhSKNftpC#E`S9j zpZoe)aV`PMp2mQHy!3B@YEkr^yZ|u>Ah`)R@i6jvtmw6rY+9_QCmpFS?0Z>%CB?B1 zHlBd*^wAZcZAjw#XB)?C@|{F6NnZoU$YPtw!bHAHmeOGkro#cHL1Dta16ftgdbq%1&aEEm^vB z-B>SZuYTZ0oJP^Muk~do>T`fdhTy9UoO~%jhX%_!0HV`J{DtPvH}~=(j6P%Hb6?{- zdE$aSf(it;b*9X2Rd zWE4kJYm{N>Sy|Rg30LTn-`8( z>SM^62O~6A+JgZg2Xy&GzzY5tBm@fkNLV!LBeP>TaraO<>MAn80|Czis2M$z?r#3N zWX$0tx3x63ZaNQgRLjUC#2m2KEH6w|{3&F>m?u>}^qB7Sr^3S2BK9vKdLOuwn?e3t zw9E0vCr!lGqB-0y?y&oWqN%*!>!(B|+DUyJT-w^x;?ye)MI<_*e6S$!3QHgey^JEe zJY1irj7`WuRm4NU^NzF~fiVl$;;55M2hNvYj-Lo!!;kETYaNre6>o*+#<pY&wt^?mF22Re5t{uD~?I4Q@U_TDcyY7(r<%6L6_6k;bvTs!Vp)g^BaPx{h$ zD!SERAUCC;`>NZXL#qcbXtbU*J@qP6{H4Yri_jZI<@Mq=Lya}T2T;o;x{O=HuXQoZ z_REseRm|TE-oH>$Fa7SEw}zYY`1($6{ZHw^f~iqYz%U|~8+|+4y70w9J9Fm#5&r9& zjc3*e39LEcTxDZaQoeT8F?hulfso1wo|)R`d^hHscV1IY7E+P%XUyb`_sVVR z49J*xC+H~r=73$bnyZ;j-P?C!k$q?B0n}7aMBxbxq4t5^b_H5^(X|IQQQm$xujI!1 zV&j(~jUG>WV}yH%lslQ@pkUb7W!_XZ)qPcZw^8){>SerTooI)d5oRdmAtx##f0MN| z5iNs74Q63t1B=UN!;Q#B|M}~29W{_-bv~XltQdIb+aa*;)vy`}^}uIzIuxlj(- zzva|wP`lp^JX_kS1*^$2UTQLsZVfPYVhKWpMy6m_($XAOmfZNS`9f);a^PkV6bhbh zdvk7wWlJF?Aq0cfI=YyqA=h&wAHMw(yd*~&_KE%qE+Ze0!>5E5CNF-tL~W>C>GH$( z!WWdgHkeiI!v#*3x%WSMb^D-d-MT~Z4?yc;0&q}_0?P-@(t2s>)nM(A`wp@S>4*OM z>n|gRZC=*f{%HipukmK z+TS`BFoMDhO$x{jTq~^ILEhX06*Y$9_}6tYNbYliW#Vt-&iIN{i`z%rN2FK7Sq13< zGllr{%{zDQTyuI~!|u74Ax$Pr zA1JAK+& zxVAuyp}a=iXulsPJKoaWON#MAyjOK@_RHR~G;cz;bXUd?A2X@f&BAL{Lr|i<_|w!! zNOs+?{H`1XD2D}AuRsJODjIgfv4w&rCwm#QrBV;&^4vz=5#LvEl>TeeHS2BK- zo{Kfh1ep296^@3|uw*d^GM&KVNmBNOpT*P7^eLf?c5mEA%?|QzNbH#t(AA~KLHdD#U3+*gbslGm~-6BwY0PXi@ipQ<$`Z2{>)4= zY98?s$z?DwH(ZTr_K77qo3W~<%nBg}%y)T4=~s=VOFA`BIouJkFAvx>R%YI`Qfj+y z##^9HP>+8{w{XTmLtsHOR*kr=r~}*t;mNbHbMgVok?eB(bwT$z)9!bXuoEIJ0y5?7 z4jRoNya`AERSzIR;Xzc4f<6fHw?5FJ2CjhPY{T!wD@2k!f%af1&BPEjsbF6Y3$=J| zGuB?-C7mYVBHb?ej0!7RM%svYZbvZ40F{&rv8#OGYyCnTz>*Ug)_kD3Q~wIrYa<6+ zP-w-wPw(JA|IZIW1qv?W{rmL+FEP~iU} z8Y6BeilaFo$dU$={E^qf*kPNw3GiRA42uCjFfqt2D=X&cM9*67p*acJI}gIfb`<~@ z{%&XVz9fbHk1i7 z!au+K&*DBTg5ZUbI4arKh@H#Ze}c$CFeF)L+`PF6h%AW{iF-ij4gc#~S{#gd+MAN2 z;K0920v)%s9NrJ!Fn@fAUq?y(?EVZMb`koP&5iarv33uBE@We?m5K`mY1G2hzHs`b z1rS>N7X_ebBp(GEtLBCFDuR@8wOKt9Q{7Iik+8{tqHHm62Q~m?YFIG{*D{29kbqi&V)G?P1tA0|}T7KuOx73*b80 zFFgUX0ZG6Bm?>B_5}=jx3})fJQMk*I zw@4PWbL!o1g7-n!u^r_`IFO&2JZi;_Jn$NgUgh&+o8SOOlX^&cFECMFn1{m*Z2Ab^b-k1=mneFC4TfCRDX0K%Z9(4`Ukg zwJ9yW*>45BBjEq}io7HA;-g(%PN;jRhn&sxXl!k5H9A#MabMzn^JGHgbeBeL;9--% znuX5YPckghjmY5+yeyZU5Gk|c;vd`T2lP&`WYfltENBV#;_)p0$AE;4G~m2=r}g_^ zMnF#gW3>RCI4~OmJvrW%z^Q;rPVzfIQ0(||1;|c2f|gV7O=!na2LT)uzb9W@yxFoj z{W2jD==^s5XJsQsO<3$hHw5VH_DqX6z{4r}l20UhcHo2gnBjV(G!9*%>lJBiEU5BD z*6NEQo>VqwBm2@qFpY(9kt#uaq?JV_x}A?yv*e#|bGwL}Mr2q4csRmP;!l$~HQGeh z!H0gKFz&fp?qW{FY&_XIjxc$<3b{ z>1#O3Af@jz6xo`r@_>S9JfoImbl^%k^g&R(^Ro`nAdiq}t0s6Ckkg7ucPGXh2csN- zMA*OKHY-yot46i^&B79A{vW{+UeQwUj!m9w&+Q!=${A~cgDc7(-}71c5wI5#wdSeO zn6OoV>3-G;Ypp(eNATu>Y93CUr>mT566{vE+lfQ!5l9lyPR#pis;qfj0$1DV3R z=~&E15`Q^a!B*)G>HI4tNpvdVDb|TMZe5Qk|827jEJ?G?p~HSnR8Bcq%RXIITThD` zZ$v%99cu_QQR+K9mlxV2Mbrzv=W(Q>oZ4bv=%rr$xMd7dB#C zyjUNSD#s1Nffj~}mZE+jf|F*9ZrNw+qa=pINjwKdXx{IrWEEa}0xr+!fT;L_*Z&tEG)eJ4}Eb%@TEy%|adK7>ZF4ZG=1Hh-98UNj9*p z3p?u|COuf}40vkjw|WCn5y0&`C3X<(<%&Zw+kYfPox)NNR}VAzT1dk=^&ns9lV$uMA3;oT<=rYc{`G zq|*B~=GEGg;7GfImhrRa*Gz+#f46-W3X`fe3K+YlXS+bX=55dlw2|b_WY~C+P*0|EWw0|du zjD76sU*PC^BVYGis~cE<3VSszGg6F=y@h||!rr(!Nao`AhhOC2O|r%P#*ga=k3L_{ zSU9qmA3o~n3Io(4s}-oww{Ee+Qk}4b#&J{g<|DfVoLlIQ#nRsaWbR;7Me?B$d=V=9Li!&jqeTD* z$(~_kqfn5r_D0ki>xn0gW}6qx*mWqrgh-4j_vD-`01Hk{^5ETryaAg8R3}BqUV`+E z(9aYiT6MfB1C&mZ_~hZEkeVW*&F6WtEV}Znty`n-^OSKz3r7J}&P%w1;Hb`n29UC5 za`ibgU1cskJTQlK0f6QA#?1+l;Yjs=WIttXWwiv~Bm?I0&q-l@=H2~Dj`S8t4T~I4 zt9+7&+a?S=aio!`3o(V>08;KI`ZNd?g=nMqBK{QNiY>41fL#aRd45b;He-ihM`jRa zaNIH&Zk&cHnJnu`U<=GrTTYDx!x%V!HP1uQXMKjcuvPymU-3o10JL6#Imk+ILlfT` z929fF&OWleAkrHNqUra-t$PUyt6A=6F%D~JI;5()0#(?Zpi@{4*qx4leVe*X=JX|u z=V?>r(2w!_Io#K20VPNjKhR84^CE_}jQnfEE~M6oXumeuGKLAX7vej@u{Bpq& z@Ijg?v!Hg7GE*TYYgb_#!g#pDDz5TuA#@c2*s1pd3$L)UM+9gJ=79~F7=Dlu06l0t zI08yK4`n}M+Kj0J6Z_g5TRTy{49z|TfWHtnCuDWdVUNPz4njs9%LGG&KkHobU-`4k z5u#r3BfV+EXNw8EGjzF&8^sSCKD-LM4uLY2mV**t_WdGusny?`Oo)h8RrA&+vAP@d z#z7e2T!nLN$VJ>^plOSdK9|8^h7O9Dv)-Psfi%Y^>il(Y?gcg287C}Y8EoI7!b)rm^%&m@sQms{Bp+{1z;z% zIGhx7pd3rHXW06eoH~S z4kj;+{7$2JbE@OQi43gXq&h1&bj#6*19KRZ1F_+L_h4f|y;WW}N;h}=1`L6`L9U`eNZ*_Si=I4V zFJz?+b|B^O{TysL{2K%F6dG*XJ+n&d1vI2W{fF7sF_$%6pC6R!5_kML{=j z-V#(uP6o@CE~WVV7lY!NPZi&(`ZcTB6RxUHYiX|y;rFYqt}epTLj;!nW@kn7IcvL& zLBSWmgq^{I*_6qJrn?(ev7i%Fz5Y}^URzMg^QND#lHlXpJD@M{X|}}zLp#0IeY64Q zoxZ1Fqv^e^XZ-T*$cZ5S?zopRulRrvcsXM1J9;|erfRYUYp;qGHG8$ACqc6vy9$o{ z889-)Ce>_1Q*Ex-?w);fc$4Jb`qhWqH<4RkazTT7p833(Qv(Rq+w0fDn6tbMl!4f- zXV--wa%6L9Z}i*R`f;;jaYXnwN8>&VW@S(Vqc6s-6*s!hIJoFH1i>(DK#5IB#?ldH zO|Zs)2}cA7+0&W>K?T~AfM-OTR!puT_65yhey;iA`B;SC;!L~k!%`Ks;!+L+_c>cW zC}u9MJk*d>>tfXXpRR5W%Q!7b1mTxybJz?n>hPb|3ryFGsd^tWJ z!7*!?xasE?7(VdMWovN8vJ&;ya{SddwX|{uyi>bAD){vpPj%> zTC%IS(7J1$46k^LKF`8$rfHQ`%Whd_|M1xR8-22_{f3bet0jshg8B`+N^T5@K0a?sC);)?in$Mw6(u3?5oD8rE6$(4uR% zwV`np;F;uam+c!SvC@;JUHB9~oF!^1YEG_QbkzS_RElwc;}=Pw#kr1Tw|ch8@W#*D z+wd3@NIeh&htxNgMKLFmqw;&JFbOa1dotJ|$e8*v6hm+iM=B&w#=AgG{sTEu{|F(>0d z(x%ACL?uU@EyCJRUwB|_4+l4qyRGRGg@M@`(Hf-dW9XxhWJ#MrES$w~LdTjmb#4_2vmlM!VGsj-<1fzPJf;{MwSfy^tU&>ye@;63P@PEaSWBn1?UnOui$n8 zYe9X@^y}B>j%U@PVz}FznToQmto4F+j#CO2p*%krYi!|WG`oMNz2cfc`Acr(?D{zg zgG>g49COANiUVS1r&S6lB?%id8LVq<<;EHRiy<{A%r|nEw3^)9mLDaqTPH)zRNA_1 zyZxtV3#yHD4F6S8d8YXQD&@zU?C@+n z@7|rh@E#A=1Jd}$Y!R~qu2jbEdQw^MI)NthH8P+u+Zojp9T7=$h(tpSVMd2r;PUri zdJ~z@dfH56jyr}qvl!R|WE7OnP8N?)8mbNsg2F!JP@J5!$Uj8=(@UijrZ`RCJ}v-l zMwk#@6hDtpnyj?s2h|6F)+`1oB~A1;(Hbc5V;PJJPzgWVnPS#(1i(F`YzjVg9<^O1 zy=C`?5|4jMSY>FDULz0fv=l9jy%2_~g&;gyMu1I#h8M!Hn4J~$uff4a!&LlSHQEE9 zzaTBma&H+^iTrVeZba|dazK7C;ACY;g4&5yNrEE14axjCFw{p~sasB4pU#~Vg5J#b z%UM4%ScFK6aYN7H2D{j-+4Glwm~cir`vKHH#*E4nslH>HQCiCe0n@A#5SUA9sp^;H zbimPmI4W1xLeQqXU@3m?*|-|Ds@wp~&dA{8QA{5V)#3R48rl?d&w=n&Zjt-k8$l2Ms{7O3-ZvPoKpwSGDg~s@S zmZyoR?$gV0T7f#iySL%>y~)JLoe24IYw_la!0l3dxQnUpQ`RbgT**Sysa=uVg1Mnv zCqEsF2~6e~Kl%Ook9ib-I}S{U>1!>Qiq_Fob)|h1dkWNnak0p-?JC|Y#mG=NbA43Y z)Ro6jl$$~1Z^)P0fHH1uKds8{EM~iP-mOZnyDTHI!rF#O(v;XW7RlIt)mM|${uU%` zkOHYf$=PO_XkZp_r59Ci*{U-gh-BTe^qhox+#wT)N;X( z^R&wfm&Crk8G8g=FrXx~)Qv{0z^fizGzM=14OroZ z?o*?UBZgr4cJ^*pI5=WxvxnncvV^?u@ml|zIo~{T*v$$e*Vx?{d4KBEsm?cB6{c)< zIX0`Vt_H9n0zQSQEmyzG@;#rC>lim~a-Ti?z_i;C-=z{xH4G2#)8lYyXE2Dp3ac`_ zm>(!PAm7p&%rr!UL${N?{HSRNpRr{;it&3FWn^TCdH^S=1Di2HyIrmit)6Dlyo8*c z6?|834aY&hu70wJ$?dG7qiVqqSW#uo^2Ak%-w2 zMeaVvAX+8Odex&7K)@!^1&;1s47g!6FC3n*RR;P(=rBb=Rlr`f#n73PR|y#S9pM|q z#40~auzuRR`L^_quGlA29Tk5lUOEqHngv16WjIPh4Ee@gECqBc%pnsWXt^eLbLe5^c3N7f5JDHC3 z^n~Ixm)|Wws2^IB9MOqd_~o~SN4v@fmCC^as zxvn`{?l*=Hqim{-KFUu=k(%*ibzH^2XIF_w_BK`Yoj?*?Gswiu@~WYM1Fi!l&;@no zSvJ0$2ekuu&f9j*~Ja3P@8Jv92J87N}mx19lZ;81`Z-G)OGO z7c~ix9ynOCBSp^v)d07cb|MnNfi_jfh-3!%9qzYD0XltBDRQzpE*!OY0rGVlOd-HN zH9%tk6&w=)n2rPwIp@>!`a|DaSM?To>8@yu-@a|EQ6c(m!icnfUwxva0F!n8OP7|Grf0!`I14ytJ#@r)8=m;xJ=x-~mmL0aPeIv+zURL8 zH6nlu;;a&srnS`9HWF(cr8k-413ujaZ0v#W{ZqkNvAd zK`km}*_XbTXBTd`wTtK3`)@PPQ*?pwCMH*Ct$8V+2ca*+iLhQD)7NT`f^Eo z8)7&6_H)Z|``MN)TXxpWET(fNvO~7IwpO!etm2NG{c~fM_ zMDdPB+RK-d8_$1GZd}_L4Tu)~6SHofn=eQhkb1FTdpDD3!EUUlrafV`zhSf7FfI=u zQ!g^^{c9Twl`gkXFdK-S4gjtI-|JlZSYctIdXa$R!qux+mxU>XEmq&AqN0*|M!{6+ z<*muXaG=rred!(m`WiVBhojI*9#cc(^BQJBjO9BkGO>vy^7QS=cyDiSp(Gu(aFGpq zjjImXyQx;r_yCEZ_|@3hNb4@(mDSg1> zQ2^_)E$>lA*PEq1GpKOfxfU`VQ5de8(uYcI!YXK_?*`PzNT0Z-k^CxSn!g?C8r zgyDm-T~OC=_3o4t8s^{%h!01r%>8SY?@#xj>@)R^jY$f3Twgq!nNv3T{`UQ90Qy(2 zT?^=Sj*2*cd6zqQ^_z0SI_3>dPP*Xz9yQ1S#KU}K>fQ(cJE?OXHfLz=*t&HqTo-4P zE*cfaoQGfEuj1n~4Fb@y$29viaz$dUULrPpvuQ+5Ya_gx9j(3*K99hT3@{eo&(N!IXxG zIq5p*Zx4r-J@I;r@9Qr?`&AKp-$)g`7IM6M>+1iPdstrMBjx6 zLoPAlhQ}-x?UJn%2`U%9`{=of_+jS*0i%rq@ncMEo>#yUVhA*J4=4GlieEaX*2=v+ zcVA~t@dgF8R(SfLG)c#DX1Pn#tXqQ0?aRhbT8(j`5K~qiJX$jmZWNZi_Wh85cZQH^ zGa9d}ph!X|PV+lro1IQ%2jFGgU4ASe^POi>y3Q7`ESNvfC@s3(jltu&nB<+NzwPwy z44%qMo3Q76lIlhcdS}qW~2JhwpNUOzE4j%lQr`> z#}gm5S1Q|_hrF-It@NIhjY+h}$2&?@&J!r;`tA-~>+I+t)d)V#cY6ni(=h~_oWKl+SD5#T`yNT(8PRXKqrXLSYFS+5S1wF!_Q1fk8>68Dh;hx z_ty#mR$bF<%*T6R=fv;df#>9}PL^&M3yXBUMaw$-Ruy9gq29ar$@ARz+fA#kx*o9w z=h8Z_0~;ywpwoSRf&0!9Il^tnv_R*6<0d$YjDb%O-Z^baVjsLcA6Y-|{Vjh^tLT9{ zzi=`7Y*qBeHja*r%q|e^d&UJ}Tfl_7t=hIJsa*k*WkZb`qdL*;2IHs_lNRM5?p@)U zdM1g1mPxm6*bd7F&1R6-J~7|Zu077FT{X%OdN&ed8kr+emdwQ${vK6@FNie(j;_yd zxm+T_cE%W6LqkKKzzy)p^z#-7#NzB+u(tkNYjZK~Y6IJ5aFOPB4+#(Cf^a&0MAAav z00An%nQgE&@4cMPX3L*@_m=e{z@Fa{TbMt*G(8GlB@g(`tOY#Vx37rT%PWSYLKODt5XYU0bgct5c2|CA9njZ~>AOOz z6aF180$)(UB2hj@VRUio_jYjgm#kS6Q}yHd6JbpDX4%--baZu{hB|NY+`kf%lJjSCLrP$EY@F)W&k%+4oL&Q5>D~ylnftm9Gwo#1P2RiVK+HgM>&%f4p zq@KPcrfw0bn|el$HChDZ<6C0X#h87VZw!{CK=O=QWmZ8RhEE=ot!H-@5b4jKKY3RA zRAM$jpB0XFrKP2>a1bi-s59z9uXbE|hoDZ{*=sxY;URkD=E~8MVnoc(IH|veIv22e z>_%-)RT7vYq}PY5%;YZ7r>07@^@0ppbF__< zZ4MNMj3eJ?Ucwg;bI*BK_wbU@1{`Yb(_hm~$-A^bxoWNZPm^a_TU1=4So2~vjv7AbeY$yx>;hkCph z{xh?{uXToa&9GH*-@oBC@}n4xwAJ}l#kXz+`*c17LKTJR(Y>WN4-Wmten7Qo?%&W; zZ?d(uy@0t4_^dRPP#52)FMts~lQXrzl2OPi z@GO2vw*_V;C@x3=fpb|{Ekb1(A{EfqnV6X9vty~sPIr{!6=y6DtQ!Zh zgP|;um)K$R3Rj%g@}^v3J936IGDG5{W88fC%`=dSkhgQEXD57}|B?&8iHu7-(Fg-~ zzBJua%}>-|9Md~azXD3y$vT1Ij_LjrL>1s(mvPBaWa7NOm)p?#Ol|$B>u2pFcm9t! zHU$Pgn4%rs-A^E)(n`O;3(e(h6f3AvT&5>E5afzL)H;G?NC9g%2)qz8EPnO&?Ly>H zuuTf^{_qpC;J2fjd4$YL4-iS!`SAF5Byv1#W`X^84s=Ot)?A+bYi7a^VdFIF+5HC( zUd8K0K_mwK3OqxOMgPLgt>47QHybBr)_1N?Pq$vx5XIFpVTd9T1ZKg{w1?Gw-6c$Z z-UG+jZ!rdZY}4lVZ5M)1B%35&Qc_ghZy|%9f`zfwyk7L06@1UGGrfWkP{)7+y$%b* z2FEnS4%$Cs#19|Y)W@f9@e2$4BH`X{oO83p@Z!$3Hnvhj>9Xy6cq21LIXny~EwZz-FLykM z3Dc4BV0I4!q|gF*unIP#&@zUUb#scUxw(0wMQmhb5#fB1jr%yRjiDhii?&0r*O!Ts z@Y=-Z9~W5}T|g$32SW|mX&a2VMN#{YU?`%^I)cle%Xt_CqehOxf!RBdg|{x=6wvWo zs6Vyrfdl@N;L#|7=De^lu4)J(Ss2w|(T7;@#Wx{omB!NKjM<$7RNB{>0J2LN`d}3s z<144dm8Nc)eDGr=CFJ(){Q9OQm4Kkh_t;Y9uh9S|fGBF6BHbNBehNbmAcGdTR-)yP z#$&68hsWMpXKXJG=|?cq?2y1l<_bVr#;Ke7r5v$wTbq^uHTQ$0|As+(@YW~CJ?o8( z=zmm}vBmpw{d~PM-fqZ~>igX0^78R7^919lsoNg7F zpEuz1o0DhUv_66NF189C3o^>W{VDe~21YY~to!TNQcT`_m|g*5&>k2?uGUC*1s)WP zwp*MLjLT4No&`4XwI*vxP80kjeXZPbE=PLOy=kN$DYr`C`ICt5zYWU9nm5IuF6nba zYBjE<^ZD`EFJ~s>Mjr!q7{cxCvbm3tgPdG%U3NbdFHvk){us-1bqT*ax}kis$Manhrd{I{IE;L?3mU@kKnkRAxe556CqLHCh z`t^o#%rLbuE(2&8z%*ZOnTyD?60ztDAP&s}kU|L?n4Wkq78a1)f_AcD72H)XuX&Q3 zY!ww1WE~7S6bHWVU5<062rJ|d0VEu-MSlAa{WE7gkxGe86f9|VT8itDi$&wh-HM8T zQIbW1Pbe`yf1V8lKn#%bVb{?4KnT4yfPb!C`VB$YdAUEy^J(+TeA03(6JojM=$H#@R`85_QTY7A>JwKyDKOW z(6=CiF5;ATyWhX$xe&evb=oMN_QB`&;nSyc*4{*)J_n0o{sQlYj8|(UQd3g_S-d9O zAk2U?o@>l=k>ds)@(lesZF9m`ICyUVy*uVdD}}Lt6N`!V&=-q|S&*nzk(+vXNWLp6 z_I*VKD@mo1J_v}+uc}(Avt<=FaRGQNMlvG1*N}c?Yu9K)ZDT|ZHk|go(40Jsk6$D# zER5me>7kA{fLN~i_^3pW>Zzjy$_H{!uD_${78Vw?xE0!n)9C%?r)}T1jaN(CX26tTO8fnwrAZLLRK z+!pu-e8A7Q84k`E=k(28yer?ijl`Ougw;1RTrOyP_2I*R(m|$nCBIe!j_08|J#`R;uv7>K?MMSsm4H#g=Lw=t` z4GEcehVw}|9S!GI10Iv?h@_U(2PHD?X+|mkx1S#y z;y>vU$=wU!f2W^5IQtzkE)=K#AG_7)20VSMf% zpEN_|1f3E)Hd6SZq1gW^oJ{?&BkGpS!7dzOC_%5|O1>^GX2JPmVPT~*}q$*xcq zb;{`2mv@J)YV71RK7t=lP9;!3^!3&?H*;e8Rty0ltu(;wrbe%J+jyoPI!Mhp9WV5W z=*b%i^bSFwg{H?R)c$;D`dNkGo z_mXy;LjUxGj<-0UKDQD$7k=kRlq!-*>y7P|CfB+h)JnuQJyzDfAjyf_l2Y>Uoy`IP zhl8y?j~fq#*b9Gi-5oHz&U82_bD#3+x|{n?^&hS2eHPKXL3!fA<1(?ppO^gB;oa>* z9S4__8@QQgO-%!w!i`nAx+Bshg0h4Bf8IOddFOub(DWs>CDZaNRw$@-OF`fXCV;!I z??PA+=wPtPI!A%I-&wj9A;jnxkP^0f7JD0byHB+gRGZg$F9yWb?y$C zIQypCOK7OO-uvM?mv9ZOy*bU}uJIAGcP9NY1ws7AuX@tlE;?-V|4S$a+QbrVwt@Vv>CA=AjXVwm`e-_FT{oxt^5`2d} z^PhOWDZP2UpzTBV={;q0WpC~N^NpvL`4lboQlx+nJ0z?)n^NWXWuj#bpNGe3%12E- z&^%lq%De!Zz`7TL_%XUiG*7#A*j0K&a^s(m_&@(>jU3Ey5a9i`&&%-78~)$_7|*Y~ zc<_II>wo^gp({@c#pqMgXZr6yCO->U9sECjh5nnoq%!BS|Nfr;{O;04eoIUK*B|}o zmxr#jn@PKKd!a4E86z&4s^`CdvNZ)O84F&$Vu0mzkL{ZKfakn_zIQ~nf0tXZ6KBwq z*x1d$;Z;5VJSqISR#}`S{33p3+Vg*YzsrAq|N1v~KjIA6T-fmMPvtuN^Jk6i+=#`Q z-2Zt-w}#a2O&EOp|N3M7|Max}fBLd`2@E?NGFV!&6o_89aDfpX|JxukB7z5t>e`%8 z=t|1S1g%s4_tpIOJw^xT_7qyVxyg|Y7si=9f`aoH`sdDh12G`W@eeQ*cG81Tp7tHC zh_kGYS{SFBbMjm8e_rK(zYuT4gu9t3r6>yx(<%F99+K1by=z*-eY2Q z0gK}Py(gs(f-*8|P>RDHjT2yi7yY;!Hv9!h`X1YhgWz!J!;lpb^5MRA1kVDHGcKT4 z^(}r>ikd|X#ay=Qgl6@lf9~UBvDS_wAAxwmnw5nCi##opDKJfcfLhUpj8R%v_BWWz z$`glSI0}#{HZ~R&YE&Rzr#EQDJovuwjJn6R*U;M9ntl{G_x#TX-7B#C3-S^ash(P! z15aXH=nH}+;`0+gsGo=P-ozj9HadO!Z{Ti^P%__Ri`+vLN_e&XwQ19)f4|Q4VwbzJ zeuU2ftO^bZd84}Rgtm48z#rhzn>Qbfbd5(EqrTz$cX!MgiF<;M@`?ew-L=DW$GuT} z;t_t`z3`tGbN%GJYkP>q0kZ1t1FKblJArY_0x-oL(Z73c`2%1Yc+cn*7^Fp-phi!Wm9TPGLU(S-E<28>I!B#?kTXg|q07hqj- z?}GOqow1x1#xKjzG8CYMXt0Luz#f!8A7Ixx)0$^Xh~I!}SiszqN@w&~XPeW-{#XWw%L#t+ zC`wVY@_sG@^dEAt0yNFWshA`NNS}99u3EX&yG!z2MMWXHwGU_nX2E>z{JzB6f4(dd|g^|oed|j z1CaH(kxhcM<<_rf#_OZK=@pr1Puk#PPo~Hy7F0%VO(AT+k7gdcbJf~pS3R7xDl;nq z;M9&0HNzc;6=8$C&=`xc0uF5!-Oyc?Hk>|1r(uoL2DTHqztM8Y;v+g-{{%M;+tv>D zgLevV;7Gm}zhjq?k)hn53f`9U+o7`T<&$IX(y-E98lu^OkKSVlZB5 zVUUO(S&rg&%>k~cfOT4At_7rrQ_dyWcelXu#{~WZ(k4?xNE$x_pd+>t%^J`iP)D?H z-#)GXi>&Vs$hmLZzuHL)MbgyJmaL2@4H~EvQK4ldEtOPKT1shXh)}7>Xi*C7J*;Fz zXbOdjkdfbUmivA0`~5wCJooe5$aQ_cpU*jt^Ei$ZBsU^N^M+MBA3-FU=+f3&?${xY zH{|g2Vpdi+`UP^~AXiC<9}NmCfvFCSeclZ}C0^{mfhcR5@DitEAgV)5SJLoxQ&v=j zsntt>eR)Mib)YEG0-5aJH~~jY>y@J~?>9MhXBlmTeTYsK;c6y^6#-yjVyW*juo1z( z6hMvOw6(F2dN9CJ)9`Nekd>&%gJ!T3z2{)ef%nBH;x)vZ>ddi`8f&kG0R0mIAKS(l zoqxmw{$`R(Dl1l;DeX7gjDZuV%W1i}JM>H%<3Iw1zOx%8vjqx0j0+eQ4Go+)N^hTB zn`60MPQVrlM(n>SH>)C09*Ym36*wGk`z8~&>;!`h?> z-;_qwU??)ULcfTi!vhIP+PnyWygEp#Bv<+}ti~M#e03+@np1asO${s75z=NW1HY7z z7jU9|32BH%jqL&`n+ZB6UqNsO>haW7eZM*pM#UI{RxK5EH5H5)9fmReO3SCf*@#PrGr^E6wiz86iCeA*^ALLn z2ZA@$8e0*sq@WG3a@N}Y2M`C&=WH16&?aGlqBEEGOGm4Df-EeCFF>?On%Q~102pN; zdUNIFB3(E1S0O+_IuS)7P!^o?86;!@=K~-D;4K7{vcqul0n$DOIHxsUPtPnlVWuHo zTkBwJ%M7560pHk@Mk}UICML5jZ9{DlNJk)(kgUN$Ai);L4LKYxcS{M|zPFN36Y*t?a;yK+{Ox?n8Uwy^r4Fe{Y!WtX=6-P@;564bo!VEwXFz4L5dk* z@iXOHC>7?Yn!i{l=J5VwYvxqIdBj&=;wCbE`cZ^OTM$3EdKC371^N-SQJ3#LSr-!B zgBy@|JL>%T^KFYC0LNjl?GQSAZPC-%%l+C3#edte2sRFm9^?RngoH@htjo|NN#L=g zAc))Mj~2J&d>2;EWPChe_#W)`V!tsp1Z|E~iEs_nIpqCHlPmGi$E~eZD2{`GMByIK zq9q9kt3a`XASLd^3{hA1#6&MjIg}1RPQmqN^b6Aj1cH&>uZMRc3IStbhCYink)~d| z#*>=bKSbaM=He8pkaWy{s6zLkMzlb4QGJ2rI z3gwxeY?{)2loyy5xFTJ9e0ZK&i(h^=xMs-?;;a3G zjpb+y0Fyw6pMigRdiqWq8%gu=fjRRRF1$WBY1X;(a%eJu$s`(dGX-R4%L7J5US>;8 z-SQJG!XdmfQmSL-u`A3*C50aWR}!O|hZuf>ax<#l%7UqRfy(U@26Cp0%fj2ES=U37K5n#Chaklr4o9{o~4X$HDX=CC+k%%Yn z1_rd(uI0esO3lIWfM~YQDzot8e=Ge{C@YNR%r0Lo=qsyJzu9Dytn$W9(#Jqz3G^*U?URzG|=4f$K`=QK{%+9z-tSV8M`QHom>*iZSXISy$M zlYn%h4F1W1K`<_37v}PVrF=twzHLOoYrfpA1NkX?S`I!iwn{`|B-D)>GIP~EphpTu z!Ymbdx$y>X>uPE`adrXE%tTK_8oq41ToCvHV^h^&AR4XUIq@}OT&A8p&u8PVR)hQ2 z|K{lZF5~Xvbh=(p!AAjho`d6Xa@);`&4DnA$ncT6IMLM#1K0%-*CuHpcM!(JAiy-W zN%3>$q0nY%0!wc0T<5Rk~a4;wD3%isuIi7P{)-Ymx|S@}BJNg-ij@;EX*p!nf+`3`3#kk{Ok z+|*O%_CGK!j565tjs86FKrEu?A=)>@g7oK0^#4?u;jJR(qPf=3?ujveBP^G5Rqdzo z)5VJORgf%R-+cP`^1kJ)YuYaVIP>&0Z{V+;#a200_n+?ARMhcQUF1YZ>|KG!)*TH- zO>s*%=Jjel!8i75$6LyWn>=9KMNZH73AG0Lj;R$^pj55;wOs(GY?_oFanB%UUrBQh z{4t`8V(y`XI_6mcT58Z6@IOt9S0DQ39MN#5?)d%w>gsA1(3Esg_J0{2HS|lt?^h}q z?|x#qPD}}#M3+HHmYSDx$8Jjz??kE_*}t>K_L%7=NrUx4a#Et*k=(9jkM3o?cIx)V zz!NpqYRvNqAE#Ih4B*-AgY$Vs)EW4I7{=@G|4eSzU=UD>$K0z?<$iN>P-&?KRm|kV z+}Jn;9WC*cz1(;D?87SmYSit5JQ_f@9~`9D1ecd z2KlQrD}$I(rclWa=?~Tualjef)RBBfP_iZ(#3OJ4CfM%$8;x_K4;Lor@Rpo|KjJQK z6=S@1j=befP_rm-!U3fM5C-~lU4Jc!G)GH;i}*{4=u zZ9K*<^FeSj_ccV*Qb+^7sYriUP1kIKBG>YxNIfR;x(F=hug({giOn`drE(&mx~mh; zLTdX-n`723!~p#>9O2szhEy;&QiOTU33TRUd3`x0Elm=D1I=4PewsS)z6O0Yq#4Xu z-y_>vdz9Y4+Lk;zJ&vRK3S1c$wp!ajIx3SBG;#UN{3x!P#!2352vAk#5m8olU2jy; z`^Itk4Yjm$^|p&Ea1wy5@L{9_%a3S`LTEQQJw)7p)L^UtS2DlW_PNI*1;@rtLsSoj7(U^H*6&o>?t+L+y)l*~4UVLwh)_QRuC}SAH45va_&Nlh z7xlkKO|$@x6+o`+fPk3x(Lx&ZcReUI!$LwrT81`J3ym(9NI2-g$`NrCQw#^dfU|YvZ+iAD5AD9I z#vd@evD#DN_`V`&1%T6%jl^>8Nu;CX?OP&G^}tgQCOy>%k;tCP2X+kh^soTu1WZB`;WxVxE!18J$Vf;qz>+m> zrmhJ0FBLW8;Id6m-4f%08!IU(NeFO}<6cSqDr^b)4mRc?rOE34*MhMz{+e1Xp&2|{ zek+6b?(IxIebmK<=|sx3h_YF@hC&QnoKQSFJ4~kt4t7dFbEOsKf=ONfHGq@IC-8TyO?qwzRagD)+Z`yyVD$H5)&sAH%3`X&jBe*mMAn zDO+e}DZ1Q46Cn-rbq=tr3CME(O`{FGnXb-G2KeH?U_Ae<*iGsOrUv#M@ApWVzjwy; zlh~7ZxBw{>7nk2e>nQ>$XbQGSK^L2smluF-2|smK8jslYx255Nvaqnw@D<95P!zZX zb07tba=@ky&$fYY4ccPZKr8I;`S@{r@1iw=fl%ugT)$51b>M$G4MT%U>^yjI`=Co^ z)&d15p!(nuQiDuQH>~k0K%u|fLQ=-u+-P(!7f^rFifl@680_1?AQyG(mc90JvFn0C zYqAAz2QUN&I{SuIS62eeP+N8{4t4aY6$e#7ZlQ~0gE=`_Yfo&*O#~;?^eIntEl^MP5>Vy7xBB{g&%! z*|1`jZvEiEz;P^DA|nV~Wj(+!!|xv}G6GY)D z4Gh#!O^E=Eom;#n!5;p;#Q@ci6`)yEF1mX5taUQ4?ll!uYL&p6$-)aemX2Akf(;v< z0+3Y>gHKlg0V0X)65l4O;d8@iHk8n$bAfZTCPXeP;u3;UDztrBQ=1GIb-LW}Bv_{` z4#Nc8%DVAu_j*uEY`QoXtXPb=Cos7usNPFk>?XVSzO^X{Y&Ii*LNhmPYMIzrG+N}@x5xE*XZbI-`CzY_)qLD3C5K4Op8*4 z+Qv%&IIEvMJN5fTYpbb3{+Q?B%$YOQ^tGpmik_X@qjDL=X{PfO+#Z-Jkz*m5Ewy?w z)!q!b)1&zQ)G`rXB+qB%@UmoL>;cwz+vs5-lcub{=Z>{9CA<1+Wo+#2SwT7o8J#xS z1IO3*e}0&6x0ZOh2>0ly)EtmH25A8kA}B|cEO+;;=>)EQ7*_w zX~++%&jaWnNehi0Ga>oFQ=lgpGOR&~=kPT*GcyE?C~^{d@bu|gh$j2$o?+KCYI7zU zAi#bnCN`D{2ea+!))}BaZu%Zme8+AtQWVV*VNo&*{5j0WqhDm;G0SJKw>59OmZ3&y+%KEesDL*|bV z)w`{<9~-g|{&xEQd^JgDUV}W>UJ?%=HO8fJz_D#%xZjS;<%h1l;}=l)@Ozd?ZiMS9 z#3WiZ2QU!OF-GW>z|-*`L4R+@$yagg#{zB^6Gz9&jXuk3l9M}yg^%vDH|yP#+npkE z?0P}!hfapF?@#wgi)EQ5f6~P;>U)Cc69(f?;?SZfY1`8(!~nf47;U2Dym=fb$*{^A zMK1?Q^B?}xx4ss`l_qau(DomD$o;)mJTrDX2!2tUC^W9^v~W~ZbcHvh=xIHSz4@yg zF;)U<$c}fP89J=84`8Jp-bgI`O>1g&XetWa@-*+?&S&!bplp`VlaM=AudX3lb;Cn- z>=3fvcucivvo;My2L{HDDRN=#kbEfX{|q?eB@bFSvak%bI8}7HFBaV%qV>O1)ZRI= zGmlp)*Ul1U4rI)YUDxFUYSNJRo#~&>Pqtla7U`#)wSLfSp{BGrDKv9)u<6^34(mJK z)6mvD@eq<3fwgWITB5<%X!`z=h87Dw{?-E&n(AJnW5C=y-m(;&WD7Wj!{EF5+J?#R zWFUp-3PhhWUutG182GV%f#F+H?HN-r`1G_R`jXwj1@r~Umn>)LHunK`@5HTh?- zXj!ccmY46GJv-3FL0{jF4YS=QbA)18)1r1*ENT!=dSaS0{XD3r$Bt2S6moUK-crOn z`l#?l+?F*OAAHO9HZ-*~cR?JG1j!aXX6JZ@5 z?i}*&eDN&cN^b7EA%#Uy@VFO3vS+bv8xe>xk5VQG2yF;h|K&ylkhfQ&YJ?wPklMA2 z(rtn-&_VD}+*NmD2DVIWk~RUG!1V53_Yy3}Sxs#r`rj*s+b17%+kT`7+E;h=+BKRc zVm8wQ%tB~|my%FuCGs!)GIK}#QNKoZbXX;y$B!@NK5_K#GjH3Na+XKSV-c&H8-LA_ zK=q}3eu|1iM(g*e*vS}AjdeeXIR>q4Mo*A=`pA{J3&2%_tt>%3>%&Iw;+c!0HoBVs z1OJN$#5QzAtA&pTPW<$kZcqW8pyg%^L5-6NYz4U=f{H4DnVs0f6B)@(W{lObe^JJD zV>ZE6f5a1)uM(^3wI7P)-fQ6~_|SV(Mh86$pja5yL|3WtiLcUebyY=oNWeWBd;M$o z@87Qn+`&I>8WV0Tu~@*UiD{2k>qBwCi%fx9h9z1|qYCvjEncIOsHrvgGfZRA!@b3N zTA*F_?;D$%s&L*ZdMH7C(O?nUESmbhDnG&pREj22NN`*)wzdB#UzG)7 z7`of3v?U49x*M8J)7qKSrUhd72FJWW8=)oVP~nnCRQh-8Q$a4aE$%*KvXs_t%V1` zL~e@LRRB7X_d5uhLw{M5NPS09@ng8a#J~yE!S#BqD*&r@K*aB3fC(}3eK9e7e zoZ%|Wj~*P4wHC0pDr~Biz!W`#&E~QFnZ-Y*ik}2HK~_LW#whrZKGWOsK?};r%7St! zznq0lLq0x=k3oS0RTa@jz=VOA$O0U;@$Wr+H}DrfQ)ePY6A3BM;D;d@3A8&;W|%!y zc!CVZt5>ho_%fL_0rX`yWs}W42y!ftc%W$rK;p8&!aRtK=377bo0v@5YnCnJmzB{@ zNoKNf6jrz5{hqkFbI&Hep1Aay1@cQ#9{`I!-I6qiyE+xbBh-cDG>gRFl5-n;q=2K+ zwum+r{hz5g#GVTVgG`{n_Dw^jern17)2)5d&J|K`I?*r=CMjVoQ3s@gY_d`RoL1gay!M(7z&e_<&?&}6I0e=vKaZFe0(BXP8|to|j2q)id#i}e1g`m_Jr4pt=qhh?8=VCq&2pd}=RTC4MT$k7 zPFP+9GYoQj0EQoGw6dw@8zQ*}M&)#naEH>s^<^~Ny-VLcV!!qj6nP9y1QeMQ6XV@= zAz%8MXE6dwOG`UOF{fYz0G>b~!+Fa5hEi=G$W5x;K@AP-X!{jXWgSiv8C>9qjT!x3 z?4y2iGPb6xL>hDcg#)uP0~_zM+^=D^VmZ7%?CaeNtDa|cU_lofs1<6>pYTknqs0L> z)wg3fMYm!QLBmyyd+bkEGUzL}k?JwjqTQXC$cPYje~J)E0qjvI@(}{n%nr>zs!{`S z7u>pxb1mYkI~fR)XSnAN;sQ`3M%HXsE%KSUt2+U-qq&)1bPjX`sf7z?plRGS<2r+& z7vKQo4^{h7yZwh{p`*;=Ucg1>$@N)AeyB>dkrAP1uaJ#m(%iBo>4RGucjIWb(d|i+ zRr(Z+loSFaXFzN7tM7{P@BS*ELo$}5xa+~0g; zfJk?&wKZlUo35m6>RQtI;<<6F#d>hv<(G0-H;5W2)2O@BcwYon*9_x}8$^>m2@wO) z4%Z_=D|_#AqF8QV6x)16(mKn zt--)P4FQY2y`}itnFVN4AGv>yck@*KtcNy^Fg%fI(Ffv=c`GHm|*+__1y-F^5yIJO8MVR#N% z)fDpmKgTU8&A;N7I5-3Im_UKKoaQwK|4+OS>s_uBRNUCEbgXmKT z6g|-IW?qKn^+{rkwf}6#WA4HK^TxOYSWn-oyzM5VV84J&;r-*w-q_}bKbt(x;d#ytK?zY#AKh5su>|DZUc=r6+s3G$!sXyN?@F){Y2JGXv%7^<9 ztbt0Lm2dR*hL*|D6V5`IC;!%#5sa&t87OKm=RM80Z|KMINCyCGIzaR;y!p3p-^y9% z$e}tRVkyK!HhcCos3d*awfQ2T$Lh*Tt*m)2#>O#iuXSZ~Q6*3yrUDuxAeECpj+<`I z&z`;mtr_jFuBof5x_56wpSp~6|EY7ulUzi>1bgWW#Hi-O0V5z^G0eo3*G+2-DjN~Y z`MvqrfdkXZJ!YG3Oko7C$@bg|c8tv<*;8NNvz=LXB*3!eclWm%Y;psyz~GzFpP8ht z#TXr8$djjc>6<4fCkriemxgq+6Wc?(7yb5@<60Mql0$EAv$4j9J6&h4BM0}i;Q+TZ*4r8 z3mHt{g$q*1w?QCudi_S9PRpR+F=UYGt~(oR3{gcO_0+0>A4@~x=jBQufoS>ptpxw( znFHpDmB1A3!V>fDpYSaM zz#2t*n5s29Si^PZ7M)1%jwi>R!4DsRKbY8C{jC-Z00!9X+jktvm=;qyo`u*OiIl;Z z7_iRc=ZraXMsf5|i8>y%I%ph>QJM7SGwMrc#jcLldjIf(n!a74@v%0kwfxI|>^|0< zzw}zxdH_ne4;b=3@Q`!74)KYOo*tPUXFk6VkUAzV?kK2`g5))Xz1b+vva;k9LlI)^ zAVxdQ+jB-*UjY@F)g+bgwX&PDO7MaOgzNIp;c)X>LUl><>BN2L!mGAiJ33w;E$4jH zkUikl&u`wt12;xEue2CP+nG9pk`x8UHJaQ}d2l(*ow`ioII2_z1Qa zx!YdYPts>r!t{_Or!N9_+*>2dnPZU&J2J~m^?(Fj}t{{1YZH@yjUPrX6H zUC3gFn-i;@htt(g7;HlYjiQ4cF$Z1GT(rxCg>i+bN$stzt;I^x>G;N|GPlK6$JW=> z(3~ItxnxyRVD#xr`WwD`&CS(F$f*}Duz+O}GD;j*ums)vHT*G+L*ROd&NA5(hy|pD zn$VGph>GHHUl~$2BRWHINl6+eRPIj|H+{l0bp!wK>!*qeO$Jf0Kt7*3sh#&)#+aC2 zIL-^TK~oqA(G(m*CY(rnN-$Cb6i1efUT1J;P)pLBpjONUI0F3$m87YV43%u!C2!g$ zQjd8xEKH=pq$G$Jz&5d!obMG$%A2U@eC=cFUMD#@aqo}4w4VYZ? zv~UT74JvPKT6hijbLWJH9=R8JJm}+vqd&vDZwVSa8R#fI9@)^~;&sms{O~4dc^80j z5P|AN|L#I=0q$5NriEm?iD5qa(pu~h2m}I>??62>=7O{lfmC*A&IsK{mkFRP+sYZ0 z_gic{@324xcpM}{aA$-7Sdm_X9JBxqrlD4GT80Lex+`>QyOXwBSnNb>bf1xqq1PJx z!S-_8!(o)l=&?A!-l9$lA)Un4^oPK$b85#;;TYZN+W1aFxTe#HlZt|u{zeRb89466SoetVfUy`5tz5I|SLE;pF`Ta=?huX$ zs>VvBE?S+4hSdg)VBERNmX@oL(FP0jltNXPZS6bXaqQU9u59xdpI_?kugjE84!1l# za8~{uDjTv?z}PGdolphvCU{L(f`IW%4Lmt*Ttkdl!vLJ819v61AqK?uUk~DzlB5Q$ z2h@h4$B$3Nyo~NJdXSZ;Qk?q@?`xFUh zgX30Er^p4$&dv^HeO^60%rsVRR;$cyz%d3dM*7ix1uO$+!7G?&qBmqEQz+|)- zG#uK%2xt?Pdp_K6T~reGyuxT0(~!=tu8IB2m}cWNB>4JKe+TCo3ZuB9m6)}nm^e8* z>cc*~P(2IRnYP69JgAn>K zXq@vqzJvI}ji7<=Ac|s`#uRH;8++WrSOqdy9YnOwj~`FO#PBnS+(T+s%%HF?fCbas zIuuO3V%qx8Zxvg})NkuJl<0T!KySme%;#sQ@zAvsVo(3#!I_>eaqM`QgbFV=2a1P% zN_)8(vGvhGSGxQCax5bGRvb(;(Q$~b_B&fCeFRXUm}b?i zT%Cz;OFPWTDSM*69uf7mzIH21TSDjBU%>mvt54-99MDZMz|g;QF zyh7`v-S8oag#;$O1Mx%f8oF^b$rgkBhal2~?^=YnSh7&^&Qy z^RyR&qf!B`4WihfHUl6Wfe`rADA%B^;9`)#hx|z3W{o$`#K17{?uKE^LU@3VK*@>u ze+BS+xHGSDPV2e@c#c+|WIKdBrIm^(Nd^nhRLy}WI}l+pnyMmp=;-Qp;kqGkQC9?D zvwdX5)=X#mZE%ukU3%e$1Rq$n97StHd|GUB4FSK9u@hCL1?J?WFh!2WEed=22N)mS z7&4ouVI_l{CQ-3NhOC473|K5w6Oq8L3SPW>|DI9=`rH$MdM1zf;pkzDC%gHXBwX&{sdAG`eb*Etxb zasn8`J?RFmvZ1lD5;WlaeNR=g?G*Ga6=w_pk$@~V2Fb4ry zurcM#R1?$bI>}qn=`lnC_BnFpOqa@wFPt@Fp4Ok2D-v!tdmUW+`_aXS`4)Nx2ma`4 zoX{`9NTwQB6;?bs?*MA(u3g)MeQs5-ELC5i zqr@ABA0BFc1DPl$oQ718%dtgg9-5g5V64(IG9)JjkvVx=T%FD`s+EZv0}O`9!Vu>( zGl;7VTNr{hagX^y=fmtCgV=O1*DdmPGT~(~F;Isf7n2t`&02_K2ml53JjISS*NPo8 zK%N;TQWVNLDTqT*pc4}S0mATbBwltk`eFK$ps?DYHm5oc5e>#q5s3H+-ml|WFWs>T zGS7zO@j4AV7@Zi8=%V~(W?`YZAg#K?Ko2G0pu2uI?Gm-PzKaK(=?L)oXo^S1zHmIE zNw>X&gALZ3s^#lK6OUmaC>7cmJ>w@G2l0$;Qy?IBZqyN#sN;!*Ni$f4JP`Vg@--6s zO3>rMh$;X#SW;bG2nUf|PtXdQ*w24Mw1&a z(ohUgU9-a4+{lO*|Ed7Tv;M0{qW9-FJgDPCP%={5z(a!SYw!yQ-Ct&qaT4M=+%`DzSXI^3 zn5$JA?%xkXpa?jceF2$ji~VnKvth8IgcWH@i$kJ8xuFLPL{RLI%&%@En#NOz0{=?s z;11N3a>HdZr51fWkG3a{8qi#UyPAv=8t&bzBWq=WFYf_?E=L@id$7R;oLVPLFk$gw z@U#zec`O~6jhGXEdmOz^t?c=7FQ}gw6>&0#89wdsSLQ)cZ>s({34BiAl1&?U>bhK2 z?drIR)dhGWLEgo|A%wyz-vV^(6A(Nw29m^p6>>`15)p(Z6(m%FHxcX)nBwnTGmk1% zM_2}zM|=BrF$|x~UJ+V078~CBNYX$*P!90?7Y|nt&&r$m>|ynfJoYHrteN|L?_Qbb zi4PxdI~fxK)BQKJ zT^`5;uX5U76qtq}rZ&Sy>rF;qStr~ye07^oe}&hjJ7;U>+wENCbgJpa@c7b$uKI8w zZBRNXtp&uBsOBLrPS3o28)O(T)OUsba5*k*1GV zGWK6{yjqK0EhxUj@Qj;Y&;V|=u%5KSTbq)^x3v4S z%_{qK;qMivqV{Eqt`7o^LhH6}*1N*E5zKZ5)fA}S8Td8uBmr(b1i9Md?E|Lurx#TM zTF66NTjKc`qz9w`s5c4YGnP57Ogui5m*NIyXp45nC=+LfgH{mmcFD!j`c=*e?q3IaL zja^`e4yryvcB}*HK@fID*kZ&%hSkfx206iyz}4@>43Y@@iEYPBrLC}ju5 z!+pPMeks5Ih$uZmH})UTc$%9wYxdUOadn2fm9@!%m(SIX75y>>!Gmfj`mfhAz&0g- zDB7>~w{qJ0o1JIp!v1LYV+M->pin}hfQkk>c@*`I!;z&67HA>S(l*IW_fQX`!cZ*8 zfj)*BX6p$Y;dx*$pI(7a}JY|$XZ;z0*nXMur-m9#7v z6xN~1ZtvT+Z5wI9fF_#QJJk{^2z+PQhsZsiYW{NcEA0L-{Uc7m?LkcHi0Oh|fyc@H z90ij)6uB)$=;2fcVqxQql zSE_Q2WQhgYuCrW;r&QhNWc(1(xMLd35 zAPSG$SJ5H>HLOG@PMr*36SAE<1wI_Qc$v?-=OOCF3k<`Yx)XCZB69&xAeAK6BkS(k zGk~Tr4Zjs@4OvO5jkO)bFUAcgJsfg=W>fQVlW7>5{Iywf{QfbnZ6BPMu#_8A#^yF! z!d4Ag6@DxUpCPteQSOf6<}m2w#EFNinI>ABmb-UN3LVYCaSao--C9*&zt+)WzXLw6 zq^c@E@_H?ZS};qT(CWeo18m6&!{wCQC{WBC+fgodp`XTV9$gP#USVM^)}F(jBmfml zb4#?f*)QPvgF{bi6Xw5P+}Yd9ijOBWd$zvvmfe=k#|tlg=4PN32}NmvPFUvPdEA8`Z6Y<-dUs$Nv^hBS^vg`=Y;2P*yS>*}ROzPlaU zUdHTxfJsAR&*NMUq@D72UD;E6RJp77EI%e5a`ECk1{sP9pP0Cm!F#F(93L+hWtMa_ z|9yAg`mj{~mq*N%1iSn=XUvH8QDU@5i)n#@m=nnKWzLe|z2{#EI(j>rx8jVogxhn1CWmVKSIb8tS4CgNiWMxe=7p`#!aggl^dtq=RMei?9l0*}F> ztpGfQ^+DK&%?~XZA8L47zWzvZGbcE2OX259)yJe@eUFIL%voPlHyHl>W0M^fS+Q`@ zRsL$zd{J!(I-apH+_SIW$#&<6-Rq-VP?03%uRre(x2o~h~S5360;UFo4g_e8B zQQreZZ++P3_2dbKKAfgU*?qTe-J*T7rrM!LK4FGBL`ekv=DdtpE<}W1ojS?M{4(=q zfiiWD_e7BwJ+73KL2W(t^nx1hhTIWYa=(Q;i-n`&I}vR*-7;JAL7Bj9=no;4wRm~^ zuRR8ZVI4_OqN%oeWaD=dA6QO`X;fr#^w?k0aJvH@ z7f`r=C2S-Xp1lxPj<(TfI%b6v@Ryf(3h|DcN3jM4fJNlh7YAdC56-U{9v*2P8dH7O zF?*N4KPDjY2ZCSo7S1~X$OFq($yFY#i%Y)WCJ*!f-%`nFEtTfZp*@>V-F-B6y(eIbCzp3p6@F`qsIsUMDF?N zbd2p`ggG>l#dwB3{qb$e)O3Ir=2ZOGg8Z}+_Y)v?%l=b7Tx2Sx^{4IHUH9sIaL|?Cm<2s z|BCg@>~fP<3w;MQvr(KCau^_}5VYQx=KSf#7^Gl}MofIXnbTIF?8uzZj+x)O=Vv8y17-|7-iHpQ zVg3p>0CSS!i;^)gDBkCs`_+kGCZ!(IkK^)qHBV^%XwU=X-607M7ZOnHf@~QSEAN8& z3y|*+7=&hNKRo5~A>}WVc=FSYm4&NamoU&D$6YMEQE{_~JuLTYe7Zp}wv8-vWxSg; zKTv9BvvRekYrx}%X%Adlb$X_JbV+!A-yPxT=WQqe!C67${@9vF(jCwhNpK$7#Fqe# z#3$doJkk{A1c5v}JpUNd{Ed(z|0_}hD`gs2<-)~mzz{FEgwD%ktXj@f3j21azTyk|H!M1?>L2s`@`9TT-_-{p6A9>#srYzz<}&K_A`EQ~F^k4%b*xC`0@nfXQ8B6e{=u za@s>Bm6-^idD`~}s^-b9vSWyJmB>uQkDFc?t@d*TxFoEU@eO?2pyKsO0}MveOHmhhrI3@EXU zPA{4QFhJp}x8Pm3Umy|v!bMB?pT++jgWAE;{q3|)nP?~rq* z$^k0~1A+ceFqq(p#z6N;RWa#7Fgp~u=X=d@&P>6lfDa-xcK_$juiI){W6Qb8G)7#M zbTF)>eApM{Vt3(TMm}y`HdFnu+jq{4-v?P6?kCAtFJ2Tpb}81iqi{x@=yGsnc-mg| zfMrql{*}zw1{$#e*~P01gLMP8@`hvn!_2@E=^*?&J3L7t@b`f|k{b*mO<)Yb6*dT1 zD@F$=P@mcWlxTpL1_m_LTELG{B;eOraL5`-dSx)0A-g_sN$OFG4}n+MRC5Zeb#R4& zbLlJ3;tGKyBbj~QHiGK_I7D`TupGMPy?n2pGFYaG&E`OIJB6&J(4^C-~LkpBP1S9!xYo9x=zv-z{kBW<#0$8sh=&6OH{ z{d?#18GT6)TaWII{-}yIL3hNxm$ww8wlg(0^7SLR5kp`_$_)V62onT_QA-C*)1lc1 z@eBn&Og-u$^P$}t+4k}bkB=R*!HL#=Qi6McM9M)`B`zBi1KnIDhV6!)N-M=S?y?vJ z7CDzV-Lq88mbqPR8OK-(x?`qQ=lP&u${s;q$Oxc`3*b)2)u^NEQT`1nDhJR=2&P zG(s`lBcDR9o72K|h~qtH0E84mbbo=KqxN|oao{l0cWMWIW(T??X|mu2HMh_Y!zj~m zyNRa_qHn~?|9jbXhGmZLs5&)`bI~fL#pnqAzjGp~Y75MkFXs+px$yOa%_?vH?}>?h zB3;p1AGFO4$%hp0wicm?tUSHOaFft&apoTlztZ^aZgsV`LVF_w;ng*uo1a%}!SI8=J6!~nm@ zk7ZE1BZ>-9=+Q@DAyU$Q-z8w!}O+QCuZ2iv!e%C!NAR9G$dQo7{*Zq0t zmWRaEIb1UG5t(m&O8~<_G~H?gq*}oMm<(EUzuHT`o(Jz@h}&2B1wafAQ`&%|7Y(FW zLq!PWi(%|)t*fV35MB%PgNWo<_YN&Ix4@Ix*inCSkVWEPvI0_fB=Dki1T6Yx5C=eb z3n4fkuOIks;=3rzb3ad#MLh|*zkRgEaQoC@Yc+0`*mbN7Q*Bq4k^3iCVgXtWApT)& zeMpD3zUtDY2!_>Qpk#(7Y}SLAix{||TfxQoz^Lb;#?iQ#7-OfckcNdcV`~ot*w8uz zO)pGSaQjcbmvqoiNf`Z88u{o^W!Eqcn&ThYF?U{7LOV{BdW?>Hou%F#eh+Ri z4w@vE03phgB?(1!vfMy4d|*DbC=!Ffwv_tmz*sI)S>gwx$TU*U{4hLwIdgRYIW@?3PBVWFFg!Er1 zR)5smYX78h#g^%QY=7E%HHylx2tCwHp}gLUNPl+@IA6&3`P#oEG*Mt)a z1ulf#O+O%l#7_n7&ET$Dv zupctGy}HqBO`5S|2^^N;{1`++S0Lh!zCnUqA;_25{Bp8wBri{uoR2ZzQ21~k+#ER9>KE<|9hhr355pAEiUYwry<(iV&uxhU9oWKQ;WHq*cAu+SqUe~ej(hjS5@N|}lbMoC{LjhyoMmw32dFj zG5Fq#%t3w6+0!j?ESlqF5?@(@ptr27u)gr|0|#OO zGOgkf5B$PC-?&JC86>jysLWR!j_3d~}e6JWzR{%YMA#s4|O@Dv0^#*?{ z%tJ_AgY!dshu|@hhS3N@QU%x+v`UttiNcY#-k&;snpj()CFs#mkeNBdXZn%5XwLCC zv@qO*(+%M%5Cqtbjr6HGlvt_Id<*3|9CB0fLr*Q*J00;$c9R$QEaXate-KFuqh6Bk zB7iHJtcdqIf_`l+g6KmSG7wJ$?Ho=27^x_o$#Dy9xy|0a;eaT}hYs`%HaPtEzczA$~ zJAY3r^&VyhO~Pru;UPqEazB7Cdo_qCC{nVFz)qu|1po&K-nwhBgCjKxtw%+Lk?o0T z3&zA`Ukd3oa5J<|5K~B;^qv{6148%i9ylxzBM@quo%{AFnlFKl6wtw%{y{5Tu9M>qSt%e2J@QA*iS34g zH*X%ycQcrj5Wvbi6;s?vf&O3filPm9C6h3OZtp4$Pi>`M6q=!OG!6t7DM>jooo!PU&nGV=zpAmcRHZTUo zA(iRh1_RZXZ1$fm##bl0qROe0F?6>DfjAD#neHzhKu&ImilkzV?z zSlB!9ex8*bUV&bN1zzoNSeHG4s_+Erm9C^6{xsfh+v*vz<@ubxh#_4&-ErGve&sZy zAd^kZuYrI81d&gO7&>%<-}7?AH;(vAS1sQ9O(G+vOKRHN!F7S&Wy*x!Ma4TyR`{I_ zH)9#r@Ep3oy;tzzA+vIasW3ZaSN5&F(71UK02;T=Gf6Z$G}bwLPS9>=UgdoN3S}=W z`nJPS{F^5(-Nb&%`{#IYQ;KH2#`uUkmY zfz3qsKt1!s)&760BmA#*wH2JK{IVA{Q(}4XAy55UIb>v1@%X{9#6vExB@cbt-pk4+ zuXJJ4O%fWMpZ6e^2Ed2@#5DSH)K5e zP~>1t^4g@^M7_Z{h}J2+f1G`jO;Tqw?gG{(!Y?KYQv<+OBw|8ceI-j<>OY@wQN%w= zFL|Q<&#=-sJmloGNKL6wLUyM9pO4yKuf5=E9(vg^nSt*#&CfHn4X!#G3?gswEuRMk z1+`fM;SI=rddzQO_-5H143k~#r&2`lc~TwhSaQnzwOpK8SbzY&X_CfAL*%XphrQYH zTX4)LAwD{}LsqY4=ukP4!%HtE1QO+fGTTHt6(oVbt%9X{6Z2_O3L5bE$M?!t zekX15MHkNtj}nE?KL0M{gZ;!wJ*HEy$v=xj>({Jf2iz-e-eA7pmSJ_W4iIMKz| zFMFi-zff7aw*?^P$Hy}^_Oh+_OY(%&g#7jmxJTtmqwrE!oJvJkvDHvy zWaYv|jHeBpEA4t*c3FHVFuOdH_7|HrbH>sK!FYvM2ayVPIVvf@6Z4i%dyWMN*gRI+ zVb^L_+H{HY!(*&AYRj>nL#_)*{mpk){pTpWo*8N*v0-DF++xA>FJJ!f7+&K$w||Tp zsW&`v2R~_j{M^sg{C0^GXLGDn>W5yl6R`>0!0@Fb7phf0e8T*?p=%HP?ln4fU`wNDREv``bqy`txml!fXBQrQ^OKD3tngHSdAY{R+C4fp=Rc zKG}3Fgkr>3_2suZEw>%rXDnya(zR!K4cA4pa662UGZUvVGsq$z#BTTxNnLk_3lLRI z_y^JOkQ=IAz7z%Wz{H@$hu-k}mv=LajErc(8S13G7szfzfTRf~Iy~TjvmuWqS}74u zFJE!p3Ur9rKSUo#k&CXHg8?!|9fkq``;1YsVWoxD8=hbrA*)g!K`^)h@Y0I6KCy3b zu809}1*fTX%13^DktYEsEpsA7<0VirqMO5+jnt3;c2QSVBNvmUp(?l3;-#PPnXot` zg6cB8$Q^j%^2$b|64`W{zBpL!B0tUhQ@AfZzC|aKaV??sF2ezSwD(GXr zzMplj4p=ZKA#sfVHp3^7K&MI?S|WqbS9T}OcZR|Zd+0pKT)>&1!*-s?ZFoRrsVj+vTr`3POi z(gH#7T=;@w_p-I~4XbK&q<@NQ)`8@6tk%7GNJP{ITAeR*7GE8jvPDlWSWb$?Xan#6 zO#=#kzfNa-t-J;2VorPn)L>V9pRT_1-evo~<-w*USWSypYFz5$ne2&jDGVkqq~;4W6*pDmDElg zDUybe-9P4J*#$rj$;^{nHmPm{APN}~5wKmyMjQzE0uVd|g1_L}AGNy%) zA`QemTF4DjwBpi3cd+th!tKvZ1WP%nR=$5fdcDYTow-I3j{(KPSXY^N(U`Z`;GXHbu^t(^hUEmCIECDXq_j5A}SIt(ljGVGGp+bW8~Wm(SB_aX%N7I zAm|guN1fQZi7Hd!W|G2!vtYe}OBn*bJScP=Fur2t;IKnatPZnDAi5HQxrK#`L4i98 zB!NsV{uQ$PceWyNX~v&p&na8=eaVx)Wu-P7{1IGFQNPGcPGMi_(|imw@dSlm*!05@swH3=9pP!zw4$*%^>HgG{TL zt^VJPf25|QgkMHRD?XXc#DJ@U$vZKz({W$Y4(>yT)~z_qF8}8@hrL6ia`j@hquD!- z2pxQ9nvFN8TDrnIk%@xkH$YSrZv zYC|&muP&HQ6W$L95-;pp+nolKi6J;_2vRbI(RhK^p?{{^j~93xZ>PEK8=M64wXb~k zUWt{{JMrykqvjb^R<6(;;-IsT3J`UJ6qLmPt+f&H+cOq0V6CxZmxYr#R&HWPml(X$ zVhw~@G;ySC92_!7R>A#;dBRHsU~nn2jH>9K`PfHTbw$?q1OPNG3@l zl#hZ7E>=E8Qk8_FE;d%Oumc{{5cx10$9R}$l^(y+5A>X@tjIJIA-Jlg#VFHa>ZZk6 zur~+wgU!#sa-lk8uq0|38_DeWrU~2}q=Ge9cV6QA*A)Y|Xr7+*QB_GMf-<_hC5?<& zpFUtvjbhlMHg{Ug$ua&evD~`q>(s zLfB*3SR<8h_Kws=E6;-Tmf>T3r5erPf+OR8B%4QQWiwX2=m9DL;TR0I&%)3dNX(zl zN1$G{Due6!3bYIi{+TngJZ$0AB!YKS1x&*Yk^9$|M;noUbwRd$R+5;o-v#5#5>LwJ zc(lN4!*KG!EUf5r$2K)kY~r2ISD8hH*Y`AXcPS^&TcM!91x=difb_8b^Q3$*Ej~^#2+Y#p; zw?tVDv14yY0F@E&z#x!{P@!Tu>;bd+K=CPnk$(2@bhqB?U2ob z9JB0>Zd1W(Rg{-nDX~nv(Hv#@3n)Q=bh_J~^+d|2(eU?euObj=!yp7kb-;u)MTIor zDffOo4X?pdx30_+v_L*2)0>2%;V)lmFfY#c8*|?yKOElxywE!4|dk3g94Y8U(?8X(U^rQq-c`&Jsb%|-Fs z78?yCJd#ZexA>|%&u)Rw{SbZ>B<@g z#JF}BV9BxA)N_}xdXSVM za<5;FfL22m`Dtlsrp+ki`M|ErcDQ_F%U)ZB4IukM1OhhT!1Vo-UWtFRWJdQ42m40o`MttC@rWfg@zP#*kzu;qc+80`$T{WPnQEl{u&_aYv361 zCSY?>X*om{c~0$W!V{vg3O%1_vi`lRg4p2_ci47%f^9>BOo6@S+0Ui-a;}==x@V%%AL^y7C<~ijXt8!buAI9kqcQ0@tla`+~(l^UR+>--VL07IHj(lzd0V$2f3%5{2(Q z1B#DVm$afc4|X0OUzbN?Y|;r@E~;i?1)?%#I=jZ@BjOxr7UYnFq#255XNR3fRJcHB znHgI9=JOaeGZg7@_R^5*NyLPbd%@u!9%v==9XvfeXng?^H<=I;))fV z0Zk$Wj|O@H1i(R&CaTZDE$u5JrU`hYNVoW^e95CgNr@bc3=%@~UEFlys?+v&3~w7= zUaWaK3g@`lm>OVdUF+z&4;_dqz5wEbf%0oqEVn$~&0RQu>HmaMynBE^RW{i?+)Xl#^7k6G z-Ve`Mr{Trja5v$M>YL=#RUVxTp+8?{s2dnfy*#D+m*264Y8AbG!0#AkQ9P8Ak};Ab zFE@W7GClPC_+WDTGzNrQ`kl+CLVU}RI5^%Wu8W=d4jN zB6Jfh=dj2%Wcl?3K|M@ZYLBn`x|$)Yyxw2Z+8Wj-ERVKpRQ|p!wOv>8-rW#&sTq;R z3<3*7L;svteKJvxZ2W#Fducf~12!8`oF?Cf)1g$VRj6ZYfk{pb` zqvGoRo!v)7L6W%F5-gWVKw6Eh{mYV|8Vz5`6VXXKLhFOvlJ2Q~o5MJlJ=l;e7>JaW z8nyseYbR$;pp3U(Xy<7>#B0~^5G@=xirl_^TM7^*LN*wE$8R0nSjK{@@YI7dI9~DA zn@P`{$v4>h0+|p&b^K3WTYGz_@a(|ddn{DYfg)ZIz+Zk?arG)*4)!u-n*|Nj>}W&p$obF}G`=1&%|>na3pL6m;xrrW@64xBFCT^G7&p zjq2T*M}#eH2Te}P$vt^yd)(rJg&nutC5dAd1^eHBymzmq6r>r3f!EBUmV)@FpNBiA zmGrkPJHMcy`J?as{$l&@chn3F?0@`L`#sK66!rCu^ry;U&;>mkWs=^eg^9JAZ?R7J z)EAiY#LHy?rc6W+iC{terfBw z8yi-Q+3){EAx+c+dSl-@DeEwPya9#pIlvv#)*a{VV$_rG|11v|}M%7CiV-T1CVH|xVsrMx^^F_*7-N|%-_IX?|r`&5#cXiSp<`xvbZ zW=u&$&WI{k79afQQgrTr=UVHI*cI{P_%5a-$qHnOA=$1&yQ%X?NGgq(s@oogP&Z ze*STZ?pGrH>U9qt7*Ez`WX;n;8=W2VKLp6cO?Id#5Q80R(oJQbHL6I-R)U@7lb)o+ zR6&NTzOoQ^LWxea>ZJjE8Q-}MOn(nG?!*!six1`fv%w!<{qA|Aa+0ygwMPHCke7F< zI-wtL#P$rROArg<1tqhSnF8*;yfcsD zXrOT+p+M7AH|+K2&y@nl4Bo7LI`iZEfdDSz=RMxA<6C2V{W|D_-AVj~M!NDJ-3^X* zBsZ8ps+X!8RqOlhMf%p)QIic%l9qx?Z$sj&>n-Jr{2enPza443L~A?}Y;8AkP5i~b zzBq!Dw~dc?kc0OWf$>!%b+MlHFwKJbQJsC~())uJ;X>%Cnpci3_N8MI_kH%Oh@t1x z8nNj~60@PFbQeoFOz213<-@SqAM=Dt4WLh8jah3X%g#mRr zlNzJE6E9)Ch!=jvh$u&;b@$~|^2+Gob@^>yThZ{29WWj0Au zODl9C6SOPeK93_EijuOj=DRxb!ZzGRq*vY?-}O|=VqnlLD;`u2F^kFkY;c!m;Ywlj zH)&AjK;9=>=aP%;v)B0JVcu0oVpIgGCufeg{kpWnHS(OFC9Og}0>l8Jx9 zxX-r2QH|tAY!TlYOZA)GH&4;tOAQVL!kRp*feBYo-@D#CV|S7e4^Li7F1gY8+G(#_;8>^L`0ZDC5=KuJ6)ey=Yx}V6_BwYP@abda_*M zPyamR*fmlAAZrwfZ9u(vXF>)tiLCW<)vTRzL$pWQ=hq$7DJYFBCJ)!yj};U(`qpul z8oMjxr@Zo#h9#iCf4`T(`3;?+r=tl0(t5xK7wznC{SuI-jp ztRg?VYKtlue)+*4(mP*`{xJII#vdOIrVK_(nXm-#p72|B$4nRP|Fu&X2b=9i32e49 zJGne9Vwh*u&uQ{U4Ms%$zwfsKx0739j{0fuuO+Q49Ab{C*d^FCa;H23FC%0LeBvv? zN*$lw&0$(Lyh3e#`)3^HAo$!EW#8>h@IvN$aWkLX{i2yWywG#>`e1DJF&TX*=ocL9 zA{&f_;V8zVa1^7@*J^gBu|T=iRONr}mToL&R5b4_vx)5a#yjU7)QJ!**s_T02AK5P zgDFI+-*xfGQ8sZ+H0=GKqr3-sMVy`)4fMSejee83?!g$L!4U+$RklcKT>^ zk{r926Kw$sFIp|L?PQ->Oc(GPfSAf4(Xh0+O&Pkt7GMeUfgDQp#lL=fI^f4{_ii80 zrAw_KFD``k?b)q3ONbZ&qBsW-K)2;2~E$rH{U4F z#97m~`O2$OI{O%N7R_OGaL##VG9jROz#XPazu}-Q3>!+vWK&!pJct8rWColQtquhU zF6HSc9K$z>q%o+#MBwpPbb*Nc+vo9C&he&3;ZCye9pmf8^+yhvtbBNIqdZAAFeO@R ztbr@ZSiSVKR(^#(H6@a7_{qUlH?kR5P#`1h?`E;hopvXqNz z4oC8d#R%%;oD*DN|L5lJJC2I_XCz3-_6QZ2-a(yaNYniSl`a2|l zei*{;lF{fdo~C_kCd*FUT=!*3q_H}r*ugl}B2L`7a|wxwDwfr?N!ovm!dcIHAg`!| zPOQtuD#mNI4T_)PnSE)aq6XnIFiw}W+HdLp`6XBP*?aUq?qb`aeagymT1PP~`63f1 zr_k0;MRYvQ3e#j;NqkN`)|iz}ma3c6>U;2lxb^o5U*kgc zOjA+fxVV6z_nyH`&tSha6*EE9|1Vl0sJkE;xarHv%8f7H-#VQ~ILwn&J-{E<%|55ihC zIeRwv}uBQ=+C^Q;fHXd%-eP(lGCYuwbBDwe{ zwAd*z+p}i<@PNwD*Z+C^bmDdPEV?6K)-s9K5(}Bcpyi2l^QDuVGMgFIVzTA)@s0V- z>hC|jcN-{9XQ>P9Xy@VmjWC9vS~eX}+w>G7H;yg2Ze(1u5{F&3>g(rM_(VvYMt-e2 zc%aD=B^D|)z_GA9?M8uVEy5rVZ;F!87Oeal?+@eRlb;SYB?SMkjZ4-QYmU zY+xi!+$_WQ?y7;DZk;_+3@LMr2^}fj_GU^-658?(laA4!$CieiiXc|(_MF7Hp}q=~ z&*B|DdkkC*jIb_Io=XiIlm+jU^sF*@xbLb)GFdx&b6|K!3-1IOIAbw9KzidIK!_Dc z3b@)L=}23?5Fn}kRN^al;0tzd9Y__eSL#?202P@wliAb_nEr9=H|l1)yR9BU_v2e< z5=tOn5@;s(ht=K{k&-l6)W!yqiyWI5kDN{Xq-&ODTufPVf8n4l8p;XD!ddcn?I&{c zOG~qdjH+Zjit`_=pbUBosL+)N8UKa6SQr@M%%8|fjElR8FX+<3!2V^pvqW%*;1LD} z#E(Txy^hTzLtlUZ6&^RgZr&ZF|Ai>;c5Q<6oCt-d7M$Bu=v-{5E{vWtYPxufmqnmmNdYpR=Msz}EI%RCM3~kBRLC2OZMs58#khV>h&16|# zM+S&ejM*X{tKuFSaLPauniA!Cg*9z*aR@u_mdV^yBkm`CY;9|^e`qTPm?v!A=W5^Q*YGtZry)PiXF%)*RU_3diQ$C~T>U9m^`W_{vD&U7s(vaJ37MOimtTK7BHEw*CU6=)6uC);4+= zJpo<*?44Ukr(2*ouX+!53TWtQgT42>Z|B1bt zT1@AkO1D)icc$B3jslFjI!4`l__41pD!z?{+huhbw0DPX#5k+MV-AY;9uVx%;J|_z z=mI+`H|Gbag$tz&!by#&p&wC|1>IrqwQJbloir5?&#xrnNJde>sK~SHnv%#a}IPDv+b|jyPx~p>z|$; zGae{%9&$5-Qmcyc^}!3)WaLg3NNZR^PvvC%D@|3^Sokke$3l=bT&kP0>-PE_P*O#FYMF^T9(!!`VAkY}ubeZ$ibBjE zy78An@+*A@_8flx%Q=+;PHtxPY z6S%yN%svCdCmW0!r+e&2h?3823-AB34lSC2UNy91nWXZ~vUxi`1=udi#eUbe&mBaE z^t~&|P<-A~KBOW^Zy@`vAAEQ5!`Jr>`|Iq*Y2mzCCASt`_17S;*oN$fFK&9v7{J@n z`o>x*O0h8`^^KZpD-{>{;e*ZGFr^1)9^j;>B`Lra7ObYvr*erSA@R;#-5bd+b1v8E znU8;Oe6Agrj#0s%^tKj=i2KeR>Ys4tER;fuV@rxd=}b&N=Z*oE+3=Qvh;n&zgH>l24+Zd0T>MvaU@$C zlFRd+2&o5yFRKFRna}>XczVASjOdb?_?k8mW&Nv^&7deW)!b|WGmuIRjXvh_q1xw) zhXt~G(xJrA#aI`jT@(O1d}sPMDk(TCoxu8v=LCZpMk9Oc_xdb(K}>Rggl*s^S+IOd zZ{TtP><2EE!-ZK9ijDqUW5(@5BrMbW*w^aWA8&-crrCX9n&kiaTS!}RI8$)iOwZ#~ zq}T7jkZ!2Ubd3<_Ab|s-%qB`N8w#}sWAz?=N2M2zHf2*6QSCtd?uBEHvex-UFUx5t z7%Zo4{v`U3UfNkATWk$%JK!6#NLqLWb%!1U>d|Lq6)tk$@v{a#TH_b3Mt!#ryZf4h+MZ9UFXoH~@w!l_^&D#}8-Eu2M7PQVWSWQ9!EC>_4f!xot_MoXq?XB|1TQEi`n9XDM zN|e`X-^Q2fW3-VM>{)CBfWL_V^dX&r1Qf=LbyA|JL`?H0-?tldPfALekF&l$cM2BXRVWIyLgfy#=%}5s@EmgIVHzVNm%Xt zzXE}If>s~kCT;VZu5GmV>?D9n(h^Ma>sU6p1z7n*fpTm_*o-iO6<_{vh(0=R1SiMiy$tOI@TY7xlvf0G(}!SOf|yg1G-OfF*}PV51})Nm3lyK-ZCK6o#OJq~K{ z91brdqVC$id@bZds73=O=k1jI;i_qUNWz>`n?QN$hBl$W02`g%KG5?R!_+uUVCDH zZ2s62a z&yVU_djBG=YTFsun(`|bPO3Nkd5EXqX23JJB79WTK~K-PX4IkdNSJh$qAl??`iXrs zy~TZ_x|m=7`A)h5BS5Qw+37eL8iXPn=yDV4I+8?Yjn$QcE^@DK{VG;RI>?sVxZFaX zA$|C^d|6fM(Vqg#EA;Q88rGiVnvYux-q*PGAFT9o7YkWEIqs$wN19>@D(jCwX1!_+ ztduCLRDzy&M^hew-}1U?a0qcaPXS%FIls<>`PY);a4|`GjsHB$ZJwC8pui6E#g^74Mpx6XO5j{48QdVyd4B}F@ zUa*A|T6>i*hUn%3J9R-t$xm{7qv5JutmO9QiL>;S;I$KVE<Duq;k2@<9dzbG zlg;(<5`7+-DP$$!_2;AO)FA?VYsNT&gvdV$ZA(LE@!{dQV@uwjzXIlr=P>YGtP!gd z1cVvY4k*Ffe-S*bC@sF^l{^!uwSpL5HDqMWIy@R&8hNp?`p2)1&ui~qO59gWN&94; zLgf@L!eBy(=|SW`c-E34zq=hca!&Zb62}6Ue?&wCr-{m$iM(mI^MUni-TypGI-UPi ztFS@_O^ZYd&7IwkN`z^4j5YX55jHK<7oHqUUD{fPzICkvOU5(4tOq71JPO-aAV*hc=h(kqUdFR1fMSdDL~z3At7k%{ zmT~5OMcI|=6#il!k}+!YW{gT4SpYpX*|ttBF4ff%=0V!T`_DcuJ^py(oZuPCblG|@NBoN!d%O#9eMarw@7U>sdIJMWQg`Q6 zzh2jnXMVfkN6YKuJbaopy|7Z;?*-g8fR(~^Ja5zgon`@6WM;JP8Vz zENEesQz9LF;biy>X4?vTKR6C>a|U+gHYjAG{uMA^=n>Y_3o^t-me7%9++1+(=%vLL zpR}E5k0j$fit9)>CVjeR6n)w5et>161~=TI{`21fNj_3#IPZJ7R5F?^`{;cNR00a^ z2(bYZXr`eQ>_Kp#N5W}&c|za`m4CtN{Pys#zj_#9emwIGW6tmp^HhM<0W=R}0v4EO zdTYk$N*85EyRdQ%yLq!(_0ylDdn{6^$EoX3&r6&lP}=$OGZd4DW2_VAXseG5=nR0r z|GMC_TW&S5N5CK$6M$1zmBl}H0u~ELO zr-wK2UcJJvd*ujnYhqgQyH!ZA~xGN6eSVQ7q+_dtGTG$yR9g{<`tLc$(_9H6Z@i%?Sv+Lq=jdUA@g#l@# zX8qF0dKfa|{UQ;OxGSv_OFJoF0B6&H(-*uU`|+Oj8~6Cny2=FKrI*N)HeG zAOoyU0Y(bjZQx%}RhR;!^!c+gsoS1~b7wvL>^wy_WR2yQ@LXJprn}FfQW>;-@gt75zxCp zhDRERo}XLGVId8BERfc*$A7#lJvS9QFH*)Mpfv859{x2yE|=Uz?13PD2|=8`7sTbs zce_TjRNMagO)9Moe3zPYHgQnKVN3`l!LY+O7 z=w?(PevuVdWIaPniEdnL|8dix-Z-uXa8p=vPNbr^hl(8+2371uy74W37y6I6lMWj= z6Xn->6Xa-shr!M$pz=gAPW757!vU&L6I9*%cI z%q{Tb(LgBnL6^{Jc>zHFWbt7t>OC?Ro^ zi?DCS4_+wfE8CF@223qPpWU7BtqXFU`}y~a3%ND4x#0hVWeY!Bt-rLWWr~rv;PW^p zcw@_Pdtt85zb>IMccR{>_d!%8vzVFJw`ExK&oX>+BjuJg9dmTWZi5tH%^WCTDjrr6 zeqi6dd^)*r+Z70K9YJ0;LU~@AMqKWwsBhJ3cxCyQ^GVXX6_gT>^vr@91DCYfFV*F& zXS1dEL%nJ6TQJv2yxBWCh?`qR_b-G(S%L)T3gEUDFgfV(&p(MzrzRMGx%q?iz8}Rh zpp{&C(^)v)Nkc~<00YBOmG|dqNoGBlSkPP^SST>;p{jo>83mLwSb5kl(lG#FS4jbF zpys@*2B}n`#zuE12c~z=e}_IwSz<0x@nV9VXa@4~Wo2diAHL#ucwPr{9ms3{k<>7A zN`&Yoh!l=2!(x)4^@plRt8K^Zo=?xsrMy)`CxsjC>d9V^b1J{a6&1?Jpn(6_C=WXt z09+u1a)S6`4u!V_MtZ~1HGnn@y=dsl;vXrp*H~xKwP@Q>lusfoSXb@$gcETYlRLFeQQyRUqbllBn6%3%J#f1&NcgBR2 z+|trbzLLivK~kGNDt^9C|7K05Z%DaF@t?S*>x~p62DjsAc}8l8cEWO6IdTlgrx3^$ zqYfYnkjmwY05IM`6L#h2eSPP8{z3j7?clQwQM?E>wiz+!1UoVc z=iBERqyOkutOzb)Y+B#a0yY%aZCuwduDG+mA8Kmjzbq~)s=g0>TBc2adiE|gQ5}&n zLAK-NF+O?P#Zrn6#0UrL{6{Ad&H<$34*peNKKzPMx+f1mbLv!+qyDE?eS8$U2wr4G zo+1||3-E_btz|FcAb!grerJ&Q?ST00HDZ*U(}beLrpp8vazK=WPm*E7I`VT~%4>sN zk7TBI$r&DAhr1sFMG}6+=y_3}DYMtcRLWefiWv1IsvQdK@PCy@*Y1H3ubmvqO=*o) z)X*_?b4$538tSu)88&cLYi{jDqlr7$hZBACTc))h%_5uK^?G@Zv8;?YDP?-m`{>6Q z4jl4((xf`1!lD8bx$#Z|*2M@gZgpK6*h^G9Oln#t!N`nnpLYjp5cYJB4+{^6UZu4R zqcK1X{-BY4@eUzQ-y}CcslR1ecxgUK$kX9i7h!WnV9@s`_7aPmM5@6 z94L?3T)E~&V1DKC7M7O(b(QJ{<4Rj4N+$xiJ|C`Xwkxt8xz$DSeAWKybTK<0Kbn?Q z6}&bfvw&417G&Jh!H;F70Y?i(%kR*S7kAU=Ox1hXMam~}plWyp6N&*c?Lr6mbv*3_97usNl7uthz{Q!U? zAmpL_+!Nb;+*_#BLOQE(Sg6NXL{&jM-U;&t3uxV#V&+{a`*=}jg^cf27XL`9lNzwp zeeb~UvmS8J)+ST29vnf$bd5P^8AQzdch)5H$fIgsBJ-&-d&_|=0=-$@`QJ(hZ9r&d zytjh0@-Naw5VCxnbYIXjh~B`j^cn@A+Rx6Nf*O;*c+Hawxo zSz1{TRCz?XdF^qN%8(2XIE0mt$!z6hmCu)T&82Zpg_%XS0g{%kjdhcyQmJJt?F#>T zpEqKFrwJiu6JVo)92XkWaEV)Y#u7>%nhPZ}w0Ov3ufLR7J%f&P4+nXhO&6dX4veQ7 zPaJN5osH>;^UU8ukDCy=1Mp7Mpd;)$C}VE)5zd^G;#FF&t+bbGfLk{V{=Q$f?HOkXAX|9aBlX3=GHMxAcZK;u(@<_Dq zrTLi(Lnb=+q+{>*9b}0G#7!OsD7FL3pYZ(of&D-2L*!B7yIaekKj>l}__3E|T>s8z z9YX0-^(ISCJ(zJ@D$kt}RW(Zt=I z;_cYF1VjTc``3l;vb)WC>Qh!8Rs@CUG#)0{*BKdSDlklR;{U>{au}R380ZIud3cZS zNn71}Hp2gAwoRRHE>8>%bvD|Mu}*@C<(ijW?FiF$EOO3#7Xfchu7a+ND?k2WR3Y8F zvj6#38n@mCP8D3oxxTMniIlt={tBh}yXP&wHNoaq!Cfaqqb!1SbxXT9pJpP#I-D7L zeb_=~(t$YpHUaYZN?}oPbItdbY_A#6sC^%+Z}XXrPO47sTYc<433{|ntjAo^6{Ffo zzw1MjGYIAR28I#??{rQAZ>_{%%>N;(2s|5;~0b@N?j;ycHkEB)z_V&W2Q6$obwkXU#KKTJh?)& zMj`HYwig`4l*s=3Ml>I)_w*$94?nQuKo`k%sE7r2;6ty;5$n=83(p` z^2G8~dUhq=dO+ywMF7v=-EETR$XjEQJD&&q>w%|2hkuobjM*4x=C7JE)qQoEOsjgz z$(go8PR{Z!m~Y;WekLBBg+6w{GO1SI%E3_o%rtyh7HlMZEwuxw=9wP_JW%^ zBR>8-z#mv8C8e_M)q%}27WnT@pa=k1gE!x^6iAJ})}peqY9vR=M!U-^c)JlZYF-Wa zou2)2;b_@HrNE0?*cFA~)CJ%zG+6P_d_?ctKIFG=B@G~uXmMN`9PpS11chAHMpw2I zSO^-a7HiAjwmB=I>6saX7_}&-ICmgY4Fomohn5Geq0wPugGPtcIxRB4fSa21QsxN( zxuYL2XrL?a?hhA-MzU;RCu7WKr(+(F3g`6C8CTKHV}S-1+;fQ?kj5LFVe!CT)tHeH z3}hqe`hGe@uI>tRkpNsRhpF~_2yZoDmG37&T2YU(uVvz);+>I4^X}p!Pz{R13Fq3o zJJ8LvYp6(tIL^b^h80j6W~4O2-?TDm#RIhxl1YrfKxx?HPHo~H0)28p`o$@P= zt>l18%K``C|pc{U_=x=DX1dQzgC!=Z{6_5w)>a$_{0p(a1S z66}UO%>%$Aw~eaZO_`%CqL+uiCB9ZOIKVI!#9Rd$j&L4dH@ORLCpLc%+2G)1(SlYB zKgNJ2n}mx^U|#+?y-n&OUNz5S&ntV8&e;hzMw1+J+6FS_G9$N47VOcP@`CKq{pjFaz};K2PQ) zB(}#*EvE-;dU`nN+zKfbf*WOjGAz=1o&>mKuA2g}z2QqnSB&~c4G-HJ%NgZi!c8{F#-Zy-#FK_>s<`MT8+r_*Y%_+Hp4_;B zL=vJsB7v|T6pE>AZezdA0q}q@dTj2Kznch!4GH{c{BPhvt;I{S3Tvm)8ik)B`Y1kL zGSgWwJ)FI$+@8nl6LeL0b-s{rV93#haLWh)Ow*dfVp?~jRqxHK0;YH1f6mfRYPi{= zqZB~mj$Dl5wMGe-@u}nh65YAoXJ?r`%6nr9(Vf$vLp6sH3Ns1FN}{84SKh)xL!sQD)Ky}O#kfd-=o1VSS2E00*cR@%xorqel5G#ahnfy`eBYN2$3 z?Q6Kr8wVp5?}qj30dEtM1@Q1(pe{P(s<5*aCNL$Y8?WHaZP^y@Ji1?IBk%yl#TK3( zXv)GEaSjcfK;f$>-Gj3C7r%X0mjSQtEwUzoif=E#+Z6;G>{(#wvH`9OT?YCKsPVO0 zjy}5;4haK}vy6qH=NeAhyV;x}Nm{3dIQ)ZFSC2WUEeQI(I zFgwL68vHpRISb`~(xRTO}`DeKxF4n7Y~(A0p$G-=Qoq1vlRHk}EnD z#t1|%1KKZ$vaqpfcH!Q;(~Rp-IJ^m#!m<4FbN4U)oKvw+8QNh020}xeKsLb)xiC8& zEsY>#*H^qdKW$MuSUMW`H^!DY?=O)!4*ThN?9H@NNE$C7X$%3UEpZBr4m?2oe7teP z^xT_e0Ta4OOTcvr03joqa{|_#xC$|+Od2nph$g!*eZLW;Hb&441nGrr(g|AKKAUDZ zpOpgzeK}^B3VoYZC=0nUTFAc^u)pB+oXgB-Cw{S>8#fghbPPD2k8LRp-A%m!vSvll zp+yZyKv(|qUeN^?lMvAUfT+1teBGUH@>jSSBnqJv&Qr)<2gy|6g3#Vg=-5K5!Rf`$ zFtK5pIJ`jMC@d(DAwf_*-pUJV=*lF{x#~lqaMygk{7;O`X7;pgIXbLt1M0;4sv@Ix z#IJQS^PQD@i8IgR2QtRHEAR^)a~`}Gu1LE-ILtw~&f44u>#;`+los&iezGXkYQ&qD zcjBwX5PJ^?NM9b3I>BC*Qwn>6Nq9I?A2lTAb9qTcJ1>K^!|#}q#%x0hN1gd~tdOY+ z+Q2hcF(zAMvmZ=lcHq!^lLGv)ZWz=@tVJ~k9v@X2lF=idWhR(LE>O1-QxFb||WNf&%pidBZDIk%FF3sP(k(RHV3QE6amQ~f4_$ZLqvClmlO!3AM+uy zwOkbF0VKLELL}<%pF5TfU1h=NqJhrUDW8?9?FTHy7)G<`xV!}aMz>q*KCrC+3-RMv zlWL^Pxl*rSCu#TTowAg|#UKkSt6&aR5Hd;)xd0R(zEH7jtlK?p#_qKe2v+Q5#IJGM z(9=GpXV1!o(0!C;I1$$pM!SlSzP>7K(ij{$SGyPWFs8*F=I0}J$qX9>N^fs!ZS7r{ z(g!k^ju0Y2CF=V<486Qr?!MzmwiTNe`jhj)5`VSSKkf$^V zI5*vzn$pTQ*$OLm+?#P*a%^$Xi9l5i_2i362T6awH%Z*CH$0^9cK^!o~ zAdAuq3h0&A+sCG!oyNW~(G>#VaE5x=Pn${7HHV{NVa+95XYX0UzgjN*{iMOazt3 z-^x;sR6X$6PYJqq81gpm(clbIaMPf1W`xlu;NzI9b?JR@5Ly@6^S|-yhi$0#1zxagD4&<;upNCX1KW#$t?Adfv}daQ()rDzYjwj1aV zGR%JQPrdo{0N737Gz}Aj!~QT{mHZ;seOaO@DzH(>7va73$`^*uG@6w4IWNUaa6aT=eecdcq;O@N>PLo_sCWZHF}y`O1iftc51 zb`}GW3T;4Y<~4g|mV{8)YX+GuJEW{ij}Z|Tezf?x#vRe613u%z{dUN)MM?yQS&Kx& zLPcIXI1ExjnW2YNT~cXKE5u5$)UDsNoW9#&g3!!aBDmySHC_-=TJP>?&Ncs5PB|QH zUxs*eC^P+YW`IHGT8WaTgYA(GNw~`P2;DVRsl)yk0`H|nQ!(!w%jw(2ye%GuX!3BP zczAfG+xtOF9gheElRC`#4aziIB$r>qvA?M>F;^GyYC!gg!DU_fFB43!s}-0wHntah zs+!G6R7gxcU`tB{_Lu?^V)4n?r-(?~GOP41xGdi)%WOM&ZPR+9cJ@so)eh*mJ7BP8 z3e<)T6U*jM0VC>n5g4ps;MgQ04%|xtC^TqG5)jW{qyGy=ZtA-zzPKupRzAwWUH7|C zODHDIeM^+lIsQZ{06;2Cr%yF%81Mt-Y2#PBzlWYjWQ2yE;)m0q zYHDiEO1j!*&w+UgEEZLexFt%dgXwFok^EELnen-OKvq>4~{*x_7nb*Y>|>E&)6+EjISXh@B41p|-hR2`(s@Ot1L- z!6T@Dq=pv2(G#AV7LW@+@r!XaSgV2~CQCuuarexnZp90|acx zW`#5F#PA4;`b5R$QU>Ec`ijFCa<^N*ms(nkO%2Dio_S}=3-~u8FNaDPNS`r}sjfkr zVk8<-?I2X`_mhDP4FWeA*gCX_af2t)=OtI&NmAH7lU>e~ZdYkqak(9`#o-en1<5{d z+fmqvf&CSqh&U*u`psbcIpT&|0RgZjJO%MjkLjTYh5oKgH0-qynE)h33c_~p-!H_= z+w+JKfC-C8AvD=r>ZY@oSGkC<&+65q8v|ZEedZ~+1@!Pa-oQ8IdAFeT{6-j18y8*p z=z8_Xwl91FQltP(#E&3rcLTVU3KoP3k6%&ku)|zJm4O9&1)!ZQ?;R-nroc0(Yt+nh z)vUP_O0jgPN4@+eK#dK~B)aCUR zq~|Z1!w#5r6)Hly{wP*ia|&}04?@{8{W`#*xk2ds#~(i-_Qm2shgZl-gi;LyrSNR$ zS+JYcuUjHw_cX|0R#<@llL-78WtCVkCWSqDjCk?&v$`DBhrQF22!?T!Mga}9s)Ieg zuh1gikrv*Y%wfC|$xeU!)*-^A^qd>fs<_oe``sNO@%1%Uy53;$D8XE-GI%-c{Q4!T zRoip6A}||*)&B3_+#&TF>uL?HiY?V&z5Jslp5js#F;hY%nDMDd{azncz24NiKkit&@i2=ZRrxN?!hcdfGd=Sgyv z(7axFWK*oolc{JB71^y-nw~aB%+i8UMF@sn$v}6FYu;1P6<#Xh!s)&~?3nG~z-)^zf4quo7MpmKo>?@#h&?8?@&-ag0>L!W($j-D0H%n7AvFjjAhG>^ zXkl#zWX0Vu9)~s_VQT>!b$T7x-P3}U#ZmB^3BwBu_J{}?mb;3V7paKij6tgZGLTBI zASPnSM8y^s7X3|`kfNaMDl2SBdsmW~$v^S+7{>8vihFVVEKeVl}k+uZIOS_KCeEwyBi@0N^ z%W(-9C<2NNMMQT2auZh2hVeITZti=m)Zo6E8y+CDqXR>UI>9QLw^7M~1R~wF{ZKs3 zbd~#Q_d&sc*3~6Ks+@r|*$M+}%4)wttZ|~Cr?JDXVi@meYif>}NI~7Z4z?O9_vl-p zk&C5=507PKVG~4f4$b~3~r!#VppFOMc}JzH}rC?*5P4iDd>u_Q+oX09-^5D3|Y zQ6hBb$dgSqP{o1vRA8>4Lm41|V9;Sm_Z4NrJGKC@f>inq`ksMS#xr4fd)@_cQo7^V ziw81a36$N#JHgVNMBKzIb!w1L1WLz_lK`6M;pgvyT8UIU(+r4=8wvYOck8oGCE#kA z%-|?DU6}3=GAat7O9xB?!PPKoPr^D3;$ZdJS|n{$B6+F_)U12${{fS;(2@R&9O)(}+@h*PMq135GYArQ6+0?IxBM2n|z-@?p=3)hmHGyexh`WTt z+^kwF20^7P4&el-z;JQ0GQV#89=7t~nZq`W2=LX!E!Hf} zm$#hd3fd)52G2uOsj2e;7Xu!7({nl9J#=*aAV#f#9SqsF@QL>?r$XhZ0`kfEX^*#i zk=5G?C(o$hJ7K)?j0Xa`Aa*-MP!ENUjzTD(8aVioytO@Y%%>Hx;Y}4Xh)s7djlt+W+GpIkkv`mmc)qkU5*WII52fB9i?VP-{(D8d=) zB2E@3nk%Gfn$P+xWI6@KlC?wgOMwQX=xQ$mMp4550*-XP{QPr<#a?A-xtnC^@;0ZtJ1$V4i2AcWofTnyrJIiTBho<3MknXmAP zfZt_x7XZ%ZHK4Rk&Y9K3ly`SF?Ye8zTm}JFwOn&|{6yEKSfc){TDyL;Ka~z)p(QFqSG))87CE{@b@2qio`EyQl80>;f zjM|I^!|CH8Feb+@kDIr367!^Y_2r8ixcP!T{{F?<{$tzH^ILfsy-vH~;b2!HU zd>~B|V(7+#1D`@>Vd2JSmn!YHgY2oTMLm%@c5xPlt~ZGgHfjb@nufzRN3WjI?4nkw zH#AGQlmtNG0iq>9B?0D3c@56h$@a^Wq zWU2-7kjd85O{ntMI}$#L_NbtigF29}e%$2OGSLAxwQs--mI_0{boe}8*vIQG+g7M? z0@)cjHvK_7>+?f2)-|qTbB>q5yT&`$tpzI0*B{O!Y(DIQaQ{ax2rlfWYsCiqF={N- zM>Ipe9r@fJEfBx#UxTQnAKG)Cokqi$Bz)Pav&^?&SiD>C;ZiwBQDFW5Ay6+JTlkqS z=bHYvZ$bXuZx0%mLqXK~4pBi{%GFg=y;0oPLD-vMM(q>Vs`Kj?MS0r{A6Dx*XqJ_5ul`*a#Eh>TL` zTl@-c9$}ukB9o0RhmezGSacg(uWT}-W^j=Bc#nrzVdfio!lbhi2yOp*auvgl2c>|V%$nN*HU_RcNMUQ=SP89bl*-C3F7n~oE|6O+z+oSI~^2`GKAP}QO z$atVPMpVZzq{$B^A_y^_Jc*Es?$i+NjS`@v9*cko>wz76X@b0)dbeUbxW6uy$i#RPa#>+Y>Gmp!to!(zgtkqD$XgI}fN-h|GtkAp zSUS!!VUZs)qbn4qX=IeZF$IMkx$c{7Vx@Es&@O@@M^G_l?p#dYei|f-IKOsau8{@8 zwNgVd8;Q#BSkM`Fme=@+qgTYNxtXMGUp&bLpi8L#0< zeAnMA=BL;mqG|;y1jia2N+nh zqdQ=P5~>}h=X5*bAl`;CtY<*t>sv!DD1_;0OAe*4SBo*?VXq(Vx~lmdlj7h!Zo$s2 z0A}&^UH{^pF|MU!ee$6BK*ocG__+K;XLSZ1goJC zI|q#?L@!-LExCt)3F3XDassP8%A(If!PdT3KRx*_=6rV` zv!X&DDV=v96d%DbQ6vbERt1iEQvv=q1_z_jAr9v89LOL5FMa4SdLw%QbpJ3SLT{9< zZK|a7V#L~_?R?knoUO&?ii}ttYcU4oTXCOITs)%=Q)EzBLc*>8`d)-JeeL=YP8X&m zYoFbNjJ8))@2aU`huP`Q`RFsqJ?;5_+I$h?{ET+hMhKi;mJOS*?jF>IU?$_5nwpbj z!79zmXY_4x*1vppKLZAV78`2=)-#ygl3C+)Ad;A{wl7=`V*>vQXLG-|c-jyz{uhI< zT!0p}*KusB$JTEGjyx;?Kf7_$w!ZvD>d8~}q`9L0&tFH;*E~zWEi*xB0Ge(ZICm)Z zB9&8+%?`xxV4kqMQ4W4UH(6+753;#_nwE%#_XQ8D7w{32ve`Vc)-H%90tj`Zdnz@c zz5UKyxdqG^&GhtHdbm@vjWvwa0Wnj}XdWj2Nv_1n>C2akG`MSac3yu7kmgA#6q#T_ zbogbTJQ)L6!W;*g51S7-)`GB!V<1o$E6_0!0=RcV>^Vai>(=@T#DFaTi~+)w+$=i! zI`aJ@w5o`$UJAe+gf(6!L2(Zs=GO`S;_`B=I88$WMB_DjXQ6ek`z)^@yzzwx!3LJP z9_7+0?3O1~$m`H-A3{i9n$4$D%oZ3h7-&LZt{SENJizUc5ugcK*<4=Tp`#-qPSU-8 z0;c~riFrc@X#w&Q=wHu&Q)b-{0_AM5;zhty9+82AbN8ckhr+Z1OHtvJ9!nR;&(x}uXV5%au7CK8-^_kl2-6o z_bE<_>!@EDc%wFv^q+GjAMp|WHG4;r`3#IV3<(Axn$)dP2}AknM+115{ti;-32{^g z;xJ8gL7&kkze&$B=lG$%+}>$$Un8t|>jPd(04aZ8V6Q3eeF%UUGQccyG(8$bqL+s; zdwXoF8MIX_2nG(W{1B|?qHJMN5f2N4C9?BEH^G70!;d^xXQi`FLgn~+R#Se85hpLG z8}BsdkYs6z&{J`5K>N=6ycXnSP?hR=cK7*ybmcI6WTmN{zTr}ZuEN-0Ex{Dlj!<9b z=7<#`dfLM6!2d_rdxu4JeNn?iqehGp6|9I+LFp(0ic)MyQ~H2(MG)!Ir3f~nB6VQE zLQ_CG$S5G)Mi)?uG!dmr69H+`zI6u8FYo((-~5p$Pc(P#+s~^72xN5(3$JniY_AiYKy7?Pt3u zuETZ<%ECpm?4a+KSo|xbg6N}mD2QyYp`kK7Gt1N1ScV=`U4)VG(Y0S-uyB6v7Y|8= zG}cLtOW?i{*ZfWUto42!|H}Lf&nRTq^M^bClzzHRg>Y+n|p-C-67~=Q2Kf_?n z0~I+WJwt953nDDB4QMN&ZTcQXQzBfBR0#SFj{EWC`+nGCJq zdO}xwgvTZ0r57H*nCbCw#~M`X_~e{M+O=ga>N^GoeJ6k-1_BfNAwWySwvkIQq_ktW z)Rvt=3_>~8U|)~K{U{Q7y3ro(cVF&Zv4wW)&1h?<4XU|N1y`@x#F#pBtc zUE$od{rYYKL?0N0c+JoU3ZcRWH8UK<@J6{Y1+)GyoXbsOrH_H zTc>Rr9{W zmV*lP@r>mL$nK!O>vzv*yOr4c;0CK(FITqZ!Je>om`BmhRtLs;&O4@>!kYkLm6ty_ z?$OT8o0eU(yL&FQZ8M6Lkcm%?w(Q~XONA)mc-8QFgNuiW%^E-hKS+6gx|tqIBL>g3 zb|zR|=^Yl&13bOp1s9OV?_i7%r0eIoy2j7SRCztL+iNOejO!@1+lgHi_8sPT_REiZ zvx)aSTl5|3=_}Z#mdTk;mtc{c4xh~_fO&K z2cG-Je}2~Ys1li(bG}ufs87TxX0Pe7s0H#RJ3k^UplW~*@ju}QR0LM0ui8(YaN52N z{=>CJ&-d59je3;8!aLk-v89Tq$xVn7;TVFpeSfN%$$d*$*Z}rGrT`r)q)yYB_>wF5 z5~NI2jl7YyQ59X(j{Qj`XVdR+CR~m@y|6J5zPGcNKyUvpozZhu4<%-FIiD7>t=#%CTlBuJF$zs@@6J_T^cUD0dXJiVC$P{Zhy}y` z3sJ;v1G|cJjjZ?0waw3IQALbP1O6vCe(nnEtbvP+P4d6x9-RM)Nu?)gC3(l5t$A)3SOW*WX!IVm2+WA^PkfKM|EDH*1yb4+R1|n~AjER>c|}FR$8+- zh!}kg@F7Wy91Un*;_ zwI&<%FM_Q7UF`zDJPKUmS_{9jx4H{J@Z-anHJM=j?DJAkHHd@I<&!sQr%-B}bZse4 zTGS!9^ohV$&xgg!I8Z#4<)*)=SVO`#@c{=RJxUT4j`ODO;o?-SM_WX$h<4!qz zns78Eh;AtfghL%1czQ=ohV~Hl{Dkw5U@#f8zbjn82mz=HL=kv&SAxdJ&)1U&IZo2P zOa|rfbUq;=6a6u<5+cn#Zq~kjDw2$Sj0*BhQ)OlO>kd1rJiIL4j2sGGbQXYh?JE|( zasTyQ^uaKD1*bNBHXID5&o5Usg#Lo#NYXEasNC4A4!U_VXovT&zdEzUu5{ZyNw@I> zza+OneW(%l?srR>)gNhHKg0%zR4=5c- z`SPSX!L0btgjlW~$zr17@U|~WB$UgUoL?M(@1bR29Iskx5*z|w2UO);*xWQNg9K3D zh)#j3DEMyG!GWkFUo{veF4*@~pN3edskHelbFa3sKIP z91{8me_P3P$P_Wo11&->Okg=#V_UK%bchgJaU_2d`Tqw=zuXKzk!me(Rb)go6~V!< zw6Bd-(V{jN7)1RjoIRN!Zg1yzki&lwESyI={DVNa?sW`@1vn=tSGjbBN7a1DZjK*5 z9NM=Stb63i`^3Z)sH-HtJ^yJ5@O-Hmw%~g-1sW5w;p`ilguB|J?I`;gI&WBXW<5=o zDr>37IZ_t`i7M^lplCMxuAVUJp0gS*yTGg~q(EYd8)2YI=Pgc#2CsB62brn5$VV>-WUDAEe`^q(XTBUqgS zn1WsZQ}Z7vQi`PuBzXR{A(zZFNd0QJp}#S6jZI#{BOY~QQIXEDj>Ke*dhwok2Vhj$ zb~5E#lC8ACzlBp4iYQP5v#-4n%*b5I6ctAb4VNyOE4X}P{ZIkx!Xg7CjWl-~#=CsJ z6cS-ow1vV7CfiqV1CeB@wm8NhbyQ00$AJe$GwKidTOVF9-|hPC?v+EKR{<1{5Jj`U z$M+rDA+f+N2BEZLUV051s$AR|R=HCjk?$e2NZF$TGW+n%7EOKYePZX{Y>-4|h;`n3 z4O_KQ0yH^cX-oNh-ra=h+tEAX3blCMZdY8kYTAH)8h$)MSudU0AM z(sM2w9?=gF-qlGbS8DRp;_U3WznCuP*{ShB@|Jv2Lg)(N%6xls*IQ!tsovcaRpK)6 z{PG^HqI}lWbxhH02_aF?EU;Gy&DJuQO8;&2t;FGr5^Y4hfTZii^q`F=pFAm@ z9kA5Pcl*?z1^N9g;UJOnn>aEkiFXAT@ZyJ@^!{(jclgQ&8pV#yL2|bfzv6JHq3Ww^ zEDGs&>_l&i{TNfPcj+M(wK*S@nsFOAZ838I%|{05iaXTIDO(dS3AV=R4gHl9h_U!s zz9l&hkk!)uu|Bjsb$5t_#6U}B0rfj!k);8z@*>9#2V9-&cll^##5%c1K<(nhw>u<; z2zbXPW>3D)YU_?r(Mj}HR}P$idoSE4BFeLI)J2h``v#|8H0cNHtE zlo-oHdKwzR_Eo6Rxrveflxxxo{AyoN!xnd(8kk;NZ0+p-b*U1H=6f7>;zL-ZO7r8+ zl+NEi$_8nJU{(-eN`mXp5sLX5gRoTi9WhQ{D&L;6@QLtGPg(LHd+>A$Tw-;uV*F&zO!mqc2DBzPtOI@Y<}w2i4aILQrO9H?fq3a^<0aX9;>1r!Pbn%;^~=v;z@;D zW2FG-`#)_}7}<`q1wi8WSxD?b%1Y)Wi5FoPj^s-)Zf$c6LEL`;`ygGNe(0rY;c=K* zd{I?3kR+U+M4eNpP!;Ouj5ylot@wtYx1=B%a!1u zZMhV@sAQ`U(1(7g$1m)1TM5D5;iF5>m?LyEmaO>Je~LiQId(*oUr-j6oZ)d>+pLC+mS)yV zeLP;KQadv;c(ktfqiaGjyinks*;e2N9XDP__6hZWwX3j*X-(Y>?BBT4?FGq%sNc)^ z(mH?I+=$89$tVIh=Z)I@gcZU7VjazrRmt;yRi3A#HFa+P}|f+5&7D;&Am05;Zx9M4*lr+%aVO6oj%N zY#K8%_r64htPlz#ox#jNi@^YeqAi@dP?z^TAuUE@{ca+B>_zTbAqdpAG zt;-_bI|^?k2A*7?*ZK^Gtn=FHcH&)JL`Y3$nZ@)Hd{h6?reVZa_ z>g23s;ufaMD^)=;zbFwg#I=wLMgi&VBbp78ovJH|%aC)5Je7O*?m5|Gc7*8Z=a;48 z*Pu56)g!6NI;TVGdY{5e>ztXH{}C-RbY+Yps&q+3N#q_jqo*e&%sx}W<43La5Qdo` zsmYe$U^spd`of2^e=;>1BXojE`qQ}Q^2%n=ebbOjxQz{^<@6=4>hasS_qa{oaItGV zGnVX`lmllzfRVxxR2zak3?0WW!#u6;m8B`IZC^t(&Z}10zUrrZ>I~8tzisGn@RK7f z#)S{isN|G3bSZ~Mc^M5L+h+s-21np|_fE`j!2S-uH;vI9&zx`n#uVj$>K1L6kFI9K zZfnJ|Z!VBlO0M!zZ@U!t&$6AoQ!kdGqxDLq>A{V}ncyH82ROP#QYM5pb8(SI?62~! z)d0u2uMFxf(Bc|E$N9fZ2T|unJfW;-yzR|NppTV=ZC}b{Nv3_7yhMrjEG#n^QKliF_f1uYxt30e5-x1jVDouFDisB@hfQ@`--#jEgVJD zAWtWvcrh2$XJWgRI15;Ou!AtvhJ_SCmjhyW0` zO1pRhNWQ+%5UO1159);aN9n~M-A60SjfD?D@<0Rt6_YOvSsA<^$2wI)0ClWAxvv+Q z<1bg9WM|aq)EEqVAm#E~w*fFIK3@RGmS6B-6EV*_$6XiAK?DAWb?XNgW}m&E zAK&8$do;(nL zW7#Zb`P1jmasbTpl&p`5&~%<8zQs^k^Xz45lUoKdREl|*C83C<=PfISydPuN_-4MG z;JN$8#ov}V;I-$CYKYh!^PiyaSS?SwEU-UaC1VqpFBMB;z?Do^H9EW!?h`IY`zLxuMJ_8)U5R@Z^bO@I_qvSQD|2(Je46ZF-QT?d>5*i!1?9Gt z)|rKVjUn6!1)V<@3ao;ne%nywwzOyM%mh2f$bg)_zCNN#vq~>oN2W6oSqS>X6zB<% zxc{^kxh%EEee!}N5}NRPEop{@2B}M#E~lpdY8kpMyRbcQrB71Q=sNnjzW(~%W^^5} zHKD1Q{u&L5Z!j8|vThhA0ShOzF+pVfxkhbm7v5DU)+iJU+34GH=tH&a3ZeTLx^t;} zz7Ag`T*M3Q;5eb+Df#=@>>&u3s37A+*CFHU+kff)B%r@$9!j7S{t zveoSEpAd~c8bK996Fu4HkiZiYaLjZmLD9UPt&G@nlmvxJV%N!Vc=B4miuS z#L;RkEVPO9LcgpX2}0sg$j|`)9m?0R5=G{x8?LdtO5m=T26m`2A*=(D|BuTeVftq_ zn7-j{LEh=!Xf%(tP@sDmc zgday{RG$MI!=R* zI#Qp@KRif3Q|b&6sojY25!=1 zFiIfAbN4S)35g*&8X1aL5AiG%T^2Am@IJOZXR7-?8BGV{O{El6)((($oJUHBKZ3;_ z7J5qO@Wt<4p@w}3U+*ErZ0T@ioH6%P3+KktpuU}pfd((!zDnG}2O0;W_l5Ac4lWvX zgOZyzZyxjaoH>eKJB}!|GiN^crDN}=eRKw!BV5M@UCIM^Qz*4_itS(R{yvXR3gmg& zaIVLU@mzg8q#+EltZ{TyxRk}a+dwck<>WaT8H2@V`2tm5&9Z!H8LiT?8y^U>_m&+@ zzB2J4I&nVt)VZi+*=a;4;jxvZ_~W~ZTnqkBkyaU2_at>t%v5UQNkP~61yye?!xT+9 zQc9obR?xs~ioQff?nq+w@CpjPUm=ti6{{H9M~ZTYD0v~yAy1Kn`hyuE6rCdVHc(gM% zlwXzb977s-^>z75=s-}DMmB6X=%*t!snTX};lU;}tQ0t#l}DyDT!xD_U94{9-6)z^ z;?}${6a^X%co9Gxwgf>F4)dd}tIKwqA%Uy+j9jJsw`ChaIw?q?hm&mYBNbOaRw@E!8vg;xfhObdUn zHWqIExNDQILe0GCP(ep@VvV$)=g=GDb2V;9me(BqlbM;hMoY%QGuPYuvA4;fzC%%t zX0pW#!Ay##?UKVhIhy<;hksjrEMYm<_mBW%wVijx3#E;Ycl`cGS&Zk$wDoC@L*f%* zJ*%Amx$Dv`Av-)gOv?=2I^miR0VxK2q`sHH$oSgWPy^n$TJ5f_CW?iZy62;PeExJC zXiV2hXJT6QX2TA3mA?%QB4(B>8F7;sabf1{2o(@k8-Laq5NbVc{UN?JE$?Cb)=({u zpw`sJ&!)U{Hl9JV4dra2XWXTx?Cedvy^Z~SX_5zY#;;!w@IkMGm)WKL83=DRSET<4 z-CA8%mN3rV-;fsC&`)u9cmK4$r7)CAeW;nDW7hvZMd!&mU&78YuSR@GB-UkAhrWb3 zO*clZeW;dVke?`VMei7-*a58iQ_eGYSy-}%`ipWX|S1LW`c{kj#log zk5i5`_g%~sFIn6ZBrTN2e@5>Vx2H$JjF%TZOsVPYS>vQ`mK&>zLxZ9(*%YSaDN6^f z`et+DVxfmZ&VaC2hWSRS_-w?Ysqvvufe!+*=H}Y%`=uf-`TWKd&$UgNJf-aCkDqzgYOQtb*y}U? zku+K?WTfV;IgURj3g?O9<;&x$d1Ntsk{(gjARWHy5aOi@?bGt`mz}$MWJ+>Mm@Aep zbG$T=y1iocNSd2T9#^xp{Xg_w%7Igk@7`_|Kj5G;Qm@66=iL^`VOK?6Gi5hkF*$3; z$yLt5#^q*Yl*0M?H>T${M+!=YF$jcHexl9O^KIJwSr5(cs&9+EjA77C5^)hl9J#gU8>#wj9Vwd%%Eq8^{|C?rKp*SvLFNnW0WJ_beq0Kb|R z5DS!ZL67$Jqrm-^*vECOUa^nL-zBoipJig|J5=gmKEoNAKf4M@4SX_B~d)Gj-lO!oSmG)@Gs&6Z@+OlLQ_G!1_klr7nYpsge_M{kK ze=n3V<;5tjMWji^gkx_E!aZ^XQ)3WVm2Ta-1%r>k+TJ>1h*b3YwT7D?X@!TFnDy4g zHs?C0ty#O4@2Mx`iC6Gg;0JPG_IoYu{{1B2BFd)Wj+z-~e`mV>&#-G(MRn+WgI!&L zyZ;H*2gx^Y((AL7Oj9cLpPox`Dje}v&`e2u+G>~0da#|n$alkP`t{Vpc)5bvX_KZw zW<~ixft|riLTl%3hYJmF)VQVcJUnaPI?b>L#VI&fJpNMG3 z{`b@vsF_Q9M#~J!BG%m(v!ZflnAi6`E-8cnh&VYU*t8Y=fUa_p8-=kVF8uxZ^XDHB z{*J*BvKP`m70g%0<224{afHK3FPJ%+Z3UMsL}am#>OrrrjFdKw-PM;M!+tKMx+^l~`t5l^SvxhkZV{ zi~01D*X0~*1>D@P4yXoh+lYCc8sR2BdouQXs|trFuSHrfJn1P;PMK@gtRZ7m^=*sT z6y)U-h9}F)%9@{;`lHjb;rk0WuqOMOp2T6ORB%v`x|vb7a2HpR0mkXA+$17LY*QXa zM_aI4WRI|wEYk@@QgQi_RefM<-@)Jij>$<$b!SsM`t~m=&%xGQEe?NKT$`DNg{A2k z4%`Ot!a7H%9I#3(kaUsnBrwik(-YanOaFX}h0HhbWF`x3T2k^rvl>T?NiMiU=g&y- z+S`o?;TRq0REH{DHR8`F| zc+_O55fcV$+r5LAdK;`3&2uN~?&C6aqD7_uS{0r@TAt5)u-Kio?R8PecC~jo;1?wqKPp40S_=Y7vZvjYgHB9>1rxwYGfU{~1r! zqA%SZb^faHetM{4qJmeus7P2abf8x@p|Z)8k5`nU)-;DXJ07u;HU&IE;rhM%H5I(6 zLWO#Pi+^ZMwS^wt^Ks48c#oXN4p}uiRug>}S6R26m$5q&lZs?U$o^C-Lfaw&3?flt zGzuX}ET!|Gg!e5P0DhKY_la1Vx#tAD3^1w6my|{r&%E(?xbuvuvC93P0_Lo=^C4eQn*>`MKnQ`Mg-_SU=y^(m~A`mmVIc$-CQHl$$oF zJGJ6Eva%KHwg||&=UMLAvrSO}g!jIr47K{M)Pf)8@`;a!)Z!5U=HKDd%{VQ+yNKv6wkK z#zIo~=Q7wcgxYqf>v2{L3i8Qrx!ReW6?MqMW@FM#UjVRiCOqgs1w)WSFDa_u|Hy9c z;r1yzJ7X`eveldUbWbF+-&!uJLqWoGRkRehX@H@r@)<$<(P_V3A1%v5%2W_q0`?ql z&2?@-{RzI-{({eLW1F){tM$#w^5MGQa840{DY#Z(8JOn?94BZL+-f|Jp@KCU>7mP5ymR zxr3KmGAFlLdPGj{>|X2*J35!VUyN~6bhNRu0&|l=8HAQj0l((WUN#pl4o=~&suXC+ zZR`jvj5-ujxl`9TIQizcfYf%$zuJV75*;J5qIMh0pY52ah`hhc^NQ^Fol{L`ADa04 zhf40;$=QL`)lBKX)$#iE>*k1GEW*BE9v&V(nea#<&%;;Tr#SAmZ`ZcY8d$#EF*E0V zmS>>^`s5iViWyZ|-nWmgxl#C7r67!5TPgIVn!3sDTY)>aJM9!@%o=$U9`|yqXE10!I-K$sI z%2f~ke02@3e`@(mw!f*P zy)Q-t9jHI@b>!JMpM@_ME1A1~_wHSg)OGS*GdRs49z|VI11bG>t(BgYzpSD&iWpHc z)qQGeWIb#7P+2Gs4^3eE5x?MI9idkPLXa9cxA9Ee7w6T>(au9VkIYpSZ-`zY`0Nl!*q(e=^B`Zwnbkhx5f!D7 zbSFOU=Z?8-&Sxm!UtPh+r>I|$(|9gOKv+TZ*u|98__6hD38#mRx-RXN^}4-Yk&BBO zbFK1xwx0JF`>W$tZQB}h9EERuG5lx%G{jrsWQv_-@ldGrKCQW{i%=z)_}>bYlrk9q z@`cwQ=gFp2IN<{GT{(-?n*xCtqZBl)j$mt+g%}xkMrOrwF3hZCViNh|QA`X{jhUH4 zFB@6e%ItDYl;z^<>z{h0X?ZDzaNAVrvAIu#Yv{Ru33~aG)plmsdy|OD>PtVc-}nmt z4MHrgiChU$`UkhTw4_k{)1wZNJ)W({4C6?Cv#GC_IJp5yAG zW&NYZzkhd-uK`wmL~^00!^FhC&hzkL?U&duZR#PrLl)MbrDY1&@sskmnBgum_aS?P zUyoB=<-!;H0Vl7m&S4L4{HbXiS%6TYao+j(vG@vgW%I$c%H`;-)2C(+pPjT4V++4< z)h};QQ~c#C7D-dH1b1<9VW~(){E?{$yz{p%TNT2AuVU%i5jbQdY zdq|ApSg(~7i&p!g+2tMW%z?o-4{K6sJ=5i#0-ZzGak2&9y_=An z%UM>I`HBp=3$%9lCH`cJ`J0+q3^Ues8!hNg1A|d>^eYkKC&T zs)Br>;3IMF3Tm#Kv&^bZ@wk<)oBk|jCn*0Ph5OM|J8b8ZNAaHGB3u(mI!aouWE8FT znWA*)Lcm+!CjSExK=!@_MuLSqK^^|GATN(@SAj#rB;mHVadsw5&pGFI`^m)URK+UDDPVG@yWuubTG%daZC;QjbT+{H>|+yx|I z^)d26BGwUK$vjSB!qV`IS1 zBffih4RVztTt++Z?$e6Rb<*mUkd0IFhK0N;=1m1s*U&E}z6uU54SiyW-M@oJHM2CH zKA#eMDFVym72C*b+Y-MmW2jLr-~>kmri)527D`YaKHRm?%GJ|NDpZtzo}p12vGivU z1QE?=3fMDhd2}sL$OT0eZ*bYWmnLnRYS;57uqh)+p{J=OOKTutn>YLZLuXcg%2hq< zGgFvankgewwtDRj66({_w+Xf4vYT!o?8MUT>IvjPM7X350-s1#PcQ7p#84Um$58=f z>=9Tv3ND{}{eQ$_!%u<3t|qr{2JhgK3EAOb=;^x8N^LGoynObY-wbY|m)-5YnDg7X9VRzJuVzsQ8<6+49TdLmaP(&a&Y> z>(4{z-o~>hv^VyB_&}%E6{ZS?n3MrS;M=punD1OZYQw#zspHjmcX(=Q(yEp#Dynxz z9Y)BLtICwU&grMJXQ9Z#jBbw2yWAXt2bSNW%gVfWK96(%xA=_Lzl_?id*gs^$=%PW zKc+@T3HY?IXRaof(I9<4t=LgcQ;dwy=X^UcU|O_p~UYOR|dl@#`fMAd`T zsGQznAtBqFs$U*?P&p#oo|0#+Ppe9&Qd#$2eEe`J3-yV5+|s-JVp5SORMTgcaFp3} z$|(d(@+yqSa5m|s{#b>UrpRtl1@<;*QAF>B{rZuYrT?>xQrR=ux`PFF>STWVwy9b* z$JAe9wA*5SUt7GxU^8#{S+3W7u5bUAS-FY7Ay9v_9=&nWUDzP)1oEw-B5L(6s3im> zj%3EmiLY5>eEXK!1zVgK|2#N;tAh~RYdX+vV~hy^sL@9>S2{ZPGA)}PqP91m9v>v0 z(5RDigMMvzkv((mMpO3o73C`MbL$x{MO7?wtUNG`pN~KJct_|t(~7;G1$KpZcMK&` z=sx1#<IYd<6U0Yh=sFAgl(%dvTYjUgoq0!Xs+c7n2s37@675yeB>Bn+gxcDUU zEa!VRNqOL+ULCubeEc7IEuVZ@RZ!PAxOY-xHM<<@PrtV{vefr^aJ{O#Y_xy~%| z;sYwXi+|T-z29!MF-=SJ)E)jTUB74hk>K&isb^luvb4@h{`PGt?F$J~y1r{lXxWI7 zU1P2wEGSdtHYut(I6Nh71!De)KS_f>R*;G^qjinnv>G+lNLNoqWauu>GiRE3J0AYb zF6rXo^&Bmsp}VTHR?sFY_wnka9|>s_>itw^By*hC^^hmRcg!~q$xTZ1M&0e6wyJ-t z^5-5E3w^?$@b!nN>Wl@ovD>M_?)nU$Axel7*Jt!!)NG>`eg5n%F?@_{ zqHky2#BQopJ$fqgST>!9H^ef;QYqAO^=f)iNhs~1Q?3c0GV8v}cMvyg|3ch^ZkE#w z=yM-n2bJkes}@dqgS37Bo?_=O`&91&EDIPbO?O#>8tLwrvxLlUIKc} z2b=Er3%zREg*$Jvln-hiiNP{qi$=jOra(zdm$Of5zfrBeYZmiR{Z^vRm zr_zt5v#|->ub9%M@0Z9MC`<~}z<2G}19aSmIfe(o-(Xl~HKgk2kU}xX(SpDk1ZV^p z^S>K2+fy9Ot4L*D3oyAXU~;m{a$xo_kCWkv1%^ae^7PHbRTE1nKB=qQ;q}(t5d)BHbpOC*r68)a8GQ(5c zh8_hcR0FY1#wRCV8FX1FC}=#hygPykl%}7zCp`Z4wx@B>`%Ar|>a}G&bY;V)?K=|P z#Ou%b1mb=a*Q{r&xOm${{H1ZWKESo$l)s&FjO}xcvtOC4aMp4&G$l8OUcxD=b-~oR z*)Ac^cTkIGp!MC=*~u*^sFd$IR)e}=LSaJcS1K?$iPE{EVnuNDc#oU$j8xOZhv-g7 zCdb6{2v9zcu%X1_tIldGkBs#EVs9yy?e<;eO~4E9{lmvlYg*We*Be16G2fbK)HH}) ziOjb==_S4Bn8l;e;Q zNw=H2?tDRZMEMZfFzL?wqjy(V<=rHpzp;s&w*?eaqy07Ce0t$M(55`z*m%#N=FFbh z*ejCWm1!nV1VRW8|i8|PIqSFlnbjm;ER16bzstrVK$4$!#nJjZ{oJTrzbQ; zWc;FWo|_rx6Ad^rMTZQ$tIQ0RUJikz_Elk!-yV`#wc&4BHMNsMaSA?dLLFn}tZWsAdYrV7xe#tYA8Oa1eA7cC zHMKX=N!ujqK_cz-FwqKEU}huu%WQti_r*@aLYM*Z`Lc`C#UA}!3x6$o6myIu?V}@| z*hHu-9>vRrv;e?$r)k!2I@_tAr8H&V!{c1Vepk{hQN;OFPZgresfEN)tyWQ-6B*6J zXYP?k|L0*~DQH@B%$AMXg&*xJk6aa&p6_MW>&Mj8sEvJX)rIan8+#}kIeb1;xTK*; ze7(_fQ^ks99{c_?V={kEc969JPJ%`L|Bc0f;+ILbZP+pN&q}P7 zi?~MVm8zZ3uP|FQ3IDETcVTYin5}BMPu3~B>p&1gQXbAZ8n)9pZJP{=ZseenzFaH_ z2%k8~z$usEw+%DbCXb1VTudc8f=ZeQzhlYd5LdK*k4P@qJ)o7ufP=_d4(0h)s-^OG zVaX1@H$1v09B2xA+v~1CCaEIpETq+iT;8o;>1*oH5-CD~_jbc|3EMp9Ap?1}o~m#@t07Ei z^Fsc?`1JYhd6fL8qjf4;hm6*!1l5E_GgFe=|79+pt0k*quT8|b=d7>$=6#xGO0u`t zfq)ioX<|D)enT%`Z%c8{iUIWj)Q;{2I20kI^ z!P3qV2)L?cKgKBcsudJ?b+sifM1_SPydfcP;WL#n04GTWg>vc(!BA{?6O+u=RC@hu zYiC-y74lmVQyfeaNLPs4DWSMS4Ynjh8iJfFzaE2mD8act8v zfcYfT9EJ>Bx+{SmxbPZeBr4czFCRwAC#OnMKI4Xfo#wuKuCNt7LP6e7>-r<8%c+cG z?GEInT@GdIzRn4#x?cv}km=B46goE9UF$A^azSQNJhf;L)Q5$FdF>-#43#G)vHhTc z22`G_1@~~%zcr|wut(vHiwkP53f7CAeB1$T9Xz^To7Y}?UY`}))HL!YG7U*YX|6eq z|LiJBZOi0`@FT7Jbl7gIW8L8jy{+Sp7Zn$|v2IS&q8~K2|EFx-MlRiliXpXAEgV=e zq`?1*M%a0=BXdgTpPpZFg%s8SetcgD9TmRzst+Xj`A@)|V-4R=?C0`dqd#MEg`vvd zktI72(g<2$M^AqIILe-sR!=_Zc6p5YdTXWr$$6V4M|1xH9aW^EuHR0RG_-gky^*_y$& zLc{d*^uE^IEHaqK5q95Vk8o&_&%G_EG*Kgu+I7u4nxv;iVZICLfov;)Ir&FN!Gyeo=vVD4tRBOybO*=Ttj5|T* z8!wunnH!7p9mKL5<`x$hzBx*JZ)_|nj2X$VDoK8i5NH*kakd`Yk7+;w{5tV7;w1HC zp}R}T-#Des&XHQ`G0Q4>KH#PQpmwi!*DLR)A)%JIXYr@z+P5P=4XL1Hy6zWNKqhRN z)^4c9rYoo=HzALkczz|l_h*Xt_U7b@6ZhvUZl6ki$0~s;^gQe+F+;qNW6yIhaP{N^8(HD+E#Cso0~RH*=4b;L)MG z3=IlSoIwKxSfjSz?xu&)#$Gp;X?FjB)8gZcNbBCHer_+S`K{o7((_)8$>9>RHe}e_ zbj7lAo6~>fe?)|5ME#H*Cqi1d+)kWmVm68!ZQ!(hX8HMRz@R_r8r}oAwI975G-)a4 z&Yg?D@$+1~$5zI3E{fEV%?=(Z0on$S$16D z&T|$j`jg|~O{ra_>o^QjHk_1~KkaX%uE+nM6zQ8T&Phu8we2_Yx>u@}w#BwO)SfJV z^F{;ki6dq@^v6g0QJ*aBvRqgWm%CqY*ijgFXf98W1ojEW&gDdUNbq@+CuPCG@t>xP z0I31IUJ?89on;e8b~_!xt!w=Ha|!J1$GOD{cgFw9l}>3ZnVuF+uN(|1 za=wNy@;!nhhPZw+1V()=SvK)Ee!U1zfa-+xg3z&k9W6yzkT)2`2gmwd_ba$MMiVYH z`IDnJZ^;Ty|DLxU&6ai(UmkpUagD8Mh-8W^LV}UXkDl#+oOsH^Q~P0K7nN;`!2MdD ziorQ6N_qvQ^#=K!W89s$&fc%wDc=V=-2a|GI}#-KY!`B*tiRY=0B6spYy~p}j|SroVkPo`T30Qu_eoxVO(HA_6|l`It@m zfP;fPAw*V@ys0T2m(fZ)fl19X9)&MG+MYS3WGY8Kc-i5n9@?KuIc4-PZ{ywa`A>_x zD#Q7n2<0l+@6U0f3?OZ1-+jn0CI&D_9v9MP-v+*>E%fX#l62Z-FLGNKIz+K-8oc2- zOuk10$1R7L4o!(hS-Jf3>>PskYqc|OBda+SL{B`?w+O*Xt<>YPdUEn!m{oIW(<5K@vNEjIKoPQOeZ6M3bP+)Vp#wpM{6r_yG6DSV>#ocTk09#s z@cQ*h4h@2|bEX#aaLdcT%j`XsFzuC70?tOOb#CC4-^PnZ7G?PUcoY>wYQP+rlFHr-c@ z7Ylh$&`0{E+bMlM$c32L3vl6vWNr1&^Fu9J$^Z&ii~$@bpF{b=#id!M{_agp<%V>P zTqH>6hCY7ss5!j0tZT4ncA9Ul@vH?8DH%U~!h5MgsXi9K_+Ob0T|@0%uAtu2$!*#! z(v`Q5GBS1b2kmt+ujTyQH9r%1-hsD=TO(a^LLQQIW|aU6oA~&66_(`-|G&rvgf8+5 zhTf+%kG{OkJM;O*CnZ%?bK7Yvx^rK0288_Iwt56q4zX}loKuGze&5`iTD#-N-ybFw z*`Y4n&#xmgv1Y(>YJ5=r1;|&kGb=_0KW?epmE00&?$V=Af7v?H)6EM2oN`JdUSO|j zf^iYEwv3nX*9%@-TGR(Y^LS^~T=$AW!)L2^ZJz`QKZG+M1ceMqwuO6D;q$4EtC4im zxECHxm@|?t^kfAE^^yp;)OJ~PpK&lnEE1;%nfUus+|{US{Gg8?C*X7d9GHVJWu-s+6)=czP7}LnGIRAVVH2zQ;~SXH{zyzpRcaytgfW- z@Ti_r@Fv;buASxdxo3iypTczh*}s=4Jj;0XHf^cl)e=b$i*8?2Q0Eg?OE_D?JM$&F ztGX&g0JwSMDRC-ESd;x9lOM1tf%Y1msnE)EL7ZGWcfK$F*@`$+I<;a2CC4p`Ib=3I zTv?K9K2`tlrI$Glntf2)1KtRY+$C#79oU0@`mPGQ$4c1SOup)+ZDk>$pY{~XQDHT{ zwh!`J^0^!^+SM6vT+K0v18C5#-ztG#Q)jwTYv#*4U|{lU+Gc%|7scB<`VZ*gZ~q;G zMdau0t>)oT0J31$r}ZI>t1zAa1T?0m)lGwbHrGjd)`xkW0P|PY)eq{@vr1d@b8*;{ zjshwp)Crc>&aKNxPwDy{fx5*Uki=1Ae0+RVSjc}P|2ep=pHh}-#d|8}m~P1j4KN$u zB?Q$(xM`*;g_|%lvxNk6;xaFFGPawML~!R0>=el6O7 zHMb%%Qb_iQdz45cKS&2*sN;&?zqm1V9WkbRN0@qIU*s<%x28>LK zBCI?P_iu;Ez)~201;0--O#1?sfv*<$&(N7MX1Kq7a1;aZxJ^t=8%8KhW3NE4Bc=Y{ zv;U0ejpsm?9wqe-mf&lSGngs^fq`W81O{{J9y=y^jND3HIAS!I$+f@2qsJJWMHR^k zaM4E*ON{|((E_a#BD+V+SlR;Q4l)NNQRE}W(Iq{8{P_8Nnq?AC6wf#GXh}#Foik&5 z6S-C6p3djb3XtG_jn1tw9H8wG&qlORqmokj2zl+B*rir7e*RlIe!~L2`}=G(-QDv* zR({BAr4*;$VBnU**^6Pr$s>0Pl{YOu8HlDe-6E8EozVO4{#30OGgF5zu@AN+jZMaN z_SI;I@O#C^aPx~&&IsrPFpkP6FAk#5LB8o0Mo7p}i5fwiSN_I^kfz`? z_@mMaK)DF6&9|8g7tv!l5cJjyjA5j zUri%uJ@;*{9(>lSP%wPl%UL;e#sfc~6qSXW(L;WPOgy5fjReIc8Y=8c22*@cc7ZK* zIgyW>JAl*c#tp4zj@7GGAK1XLHvIJx5zgWbQ}id4XYScfQZqLdGA)<)owaFD62Ml< zym>(z-`;mA*)PaQl zvw?jmsQX8TLuwY)E|;pIr^h~NlhvZXYtQUQvO{}^7pELsdZZF4Ha5kyX;sbF^@hn$ zMI68P#_?I#$(3zD3^eiQ;X7%S-Ub#C)4l9~hE^9$Gw7U{9;^18Q^z(~&h7~}9O70S zezE-)nNx@bxb`QMbH0X3rE%PR?W(Nfcm`d9du4zCuD#Ei!s)i>=1MIUAQt6 zlPIOY&KZnsqOy?gi;wQ(-x;;-TUU4Dr;@H_DeEwITJR&MOpCaf`_@#+0}A7%+)W)u zU2+Q4K_-(na%Od-BPGX5Twwgnw$7j#TU{mz$UQ_diQ6afPz6Jxqk-7)oTSXPba*z65zu06{ zK`jnxHTb!Vv`Q5zS?Av!p+5DT_mEe^PUbX2?~2NLYB_MzkDDrkA|untELpG#&Fd3s zKP}3RTQxs@2VYSlx+x+X@P^48bd~5!Qocao6(cJtg>Ro3NpTWn|uz2ZW07b zUJW)MFtM{H>l6;SWI~G9C=m_-!#0D|(vf4YiZ1$4d7Jl{PhVp(ZwOLevdcGIiOY9m z^mVYC$8Y|D1<{GSK9i8ZN#+k+RshcXAw_qee9e!selB^UYveSWo0($Bkq|=mx8K}U zIZ6f)gP-5moROrNs+WM}qC|$Sk$(qDYk_VinfjC@VNe|*IfjWMJO>Zz;_Pzy8%R4o zo2XDC%a*X)`-s_mOooxF0eJm{DS~Ln&md=Am9ifKZ(BFZnga8qw-;d&8wyj5fJ%66gnE593=l(yD%#!}&NiF@9nd)mv%}p&&Rg+}5s$TRz+j;YL&<=5#Gby?i z9Bb8C-jQhQOZI#8abGIq?4yccII(;UnXX}xmaiGAXNP7i1XZHnE_s*)qel2YAFQ2y+ZjPTN=!ypmN?M96K&9ozH?{8AX0v~!2;5_ zK}3(Z{P^QyK1^_ZpQ5|i6ABMbGhjYf&UR6XF8>oHa!|Kv=wy92q_8%l-BIJELCTsH zZeK&dM>)g8V=~{8L$g#el{`j#UPU;zwRKzsMU~)2mX^t!y$}TFlKFx}cS#KKV(5~0 ziQBuTn;+yOv(RnP`4tJlUu7CDztA`(oV+h)1|(nMR0XfAe?OXQ_*^co2n~%3!>}~B znOb2lufv0@kN(3wXA^Dg?-#NIbV%g79$6_Qd%v8RQ2*NY@Zl>UjBJNq5*wtUTjQ|L z9>)XdDwEHVk`2*d7N_PPDrNIe)eoP@;wAC)12Gn8YsJ_m1a!f8&Rh%BfSdG-RBjMdOe? zvRV|$Ohu=RM2e7+k(N#w^$DGfQ1)#25QR=UgpACxOLj=e=6+t{+~@nd?|<$;Z;vzc z;q(5y->=v8x~}K-yq?d5qv(HcKY9$|SLLbsV=?;7CAHVa>iWUVhLQ;jvF*)~b81{v zRlP~F3a|={z*yJ4i}kpI@87>)u7>6b)4FMoie{90aO_W20t^iKqeb#j3k20>J?#Kd z?^Ti-n<0vz=keowc=+4*Pa|GyYVL!AI}VWL-|frEN)l*9G%P0d;`EZ(&G{hYAaHu5 zzrErCzqIrbJQPIia4EV*Tn_F*(AFcq38H5!RQ=2Je?}%Xt+#`c(0_X-5Q8Bdzm$#Z;cvPB zTjd*^OVP*%)hsIG4-IzLiJg4&3+B_I%B_HnNM{Ko1CD+Qf&gn9DMXWR49K?`N`Y0K z6$n&IhbBS#za>B}=G9Y(5t6hL%sL)Y21Dl%T4h1^3qllk4g>e?+FH9#PvH-C{B2u$nMOau^EMTLcplXQAkNYHs zo^UKp69NavLKEGpJuC9G_lw+JgvZ3c$1l+uLV)GTR*(&r)a9!DpEvhz5Yb144V zL?ibMBKUF@S48YzNe+?(Z|lY%UTfr;Zr?-d(`ZqgP#j0DkU%=J2r$2z+ein~_%6G2 z!;-z+hnhgqp|1cLBhQHF*S700A2AYq62!o)Yt9=W%+QnQ?JY7r|D@lHMHK zN_pwBsdr@&Jf*sy=~lU=%lXS8uqCckXOI3k^m^{fP4Ol|;2{xv0lb>&x20tZX0ss$ zRLYlK$4BPst~rjG40I@cFhBKZr_0EkF5&5&A6ba#6$}CMajmGi64Kl^`CKv|!fWpY zD7N7JKKN@>foa^R0(~M=O2oc>vvPq_0}XOxy#L*+UUWZI7$n_@L7OL~nx#K4*(~5@ zWnzVY%~`Fyj>gh*?-g5p9h&{lNAa!Si-D#;RRH2uD*NKK3Vi@xp9mmwoknJRB+E5} zlqNBJL2Q-r(ZMRrdh4&znmSlPY((qwhg<)h6rYP4vGJkvuv8mI|%6s&)&s1Ltz#&O-bO#M6+)r=AIYlCf=myD;7c+I0~>SM6vqnG7? z7)*~EF*h8a0KxkF`N2CNXIu@suEG?x72#Ds3{Gc`Hg zxz$J~`Q&bmKtJDb-?${rFV?wvE0ziERed^@ZP4#(R8V^G-r%`am_R#(AKs&1vZmwH z&z({7>WgddwUh=IpRv(FHfEZ4SIn2VM8=M-YBVUZY?+C^?$7IK`~xSyIDi#z+3#;> zfR#)0-W)#?YXF&Vmvb3gJF9xG&i;DgpI{lKC#QlrH>p_yzY3ux$il7pR)Vh^d6WPR zLWlAGJc3yk?E9z_Z9Lg_Z<;rxt z;1vw0{BR^Vnr2*?XHYPGe`rsyRNC^Tr@Dq|5e4rS zb@HLZEIJwJZIY5oE6oIVkYk3a61_gBwJfpspheG`b8`|z#Ki+Y7fJ24ezYeaxZqw* z1^_F$-2_uNT3wU1c7}u#+r%i%0;5Up@G7&#=VAlBAudi)@MD^mzC>O4XA}AS5#>Nm zzNB)rc)rZv`1XfI>4&G+UY79Sb(fAT$AZDgv638=eCVs=5R&z3ksrGEgMvcEPYrgf zuC{p;bow-wSspKs!Qd>~Q_)ZU576V1(;s85U9R0yU5?EatiF*ukM_0(Z`_O34&*(k z$mu2_h6-x9=;;8GlLVyC^2IQp;Nh2&(W1=HpM9OO2X1!M=ppkVv`1etgDyvO-OQ+m zhWn{cN|rnqIe>xd>haI}t7T4H{xYa{CV9(0K`tpvx4l#V^OWFDsl#`t-jP$x$zI;7Q9*?< zT*oWXoE!Uk?8G^4`WDb0pHi1mU%RqGL5x#}iXS}_&p7u|@y^B{$Ws+TEpxiD7_U;W zj6L+(0a6V*(mxOKOVpanRM3_mSiBZLb*Y-J z9aQ{S+n+ayWsy(sC?PA%(cxB;@i0*)bgqM4{FlOk5u?MjKR%urSUweds&n>;(gm`x z6l$ElkdiXiw1RWnu}z&mUc$oW)@7@95AvUt99dxkb@Brqe(4^Fj6xUO=opC*}<{0@DBDx64qe+Nk^TBfv_MT|9>g2XQ{ z6XM`f!xFl7?exMfd9xe|aiK)*rpcmUMax8fA8laaZ!2Q%Vz}*Td?*jiII)N-&#dZz zUyM9|fbVx<=fu@`dEZEJ|A^<$t_$_v6k1M00mjC1yQkvu+I2H;FlXqz4YS!>M(10F z-hv~_+?)|BaL}}^z0!;Wy}40{mJ$nR?`C=*T-hC=vC|Ra4Gxbmg}}zVX4n4E-+of7 zdz*o=&#k!8MtY6tf|;w~+Kj6~`XB5wE`&`f@K2D~F%`^HK3=ia*d}dyi+RnR$+Pyn zMHbLy-vA%QogCZLcvi=(Kp&yw%UybUCeJGN5=nuDYY8f@OM5yC{|W4*(dund6E{ZK zae1OkugOowCrH%AGvebzQyv!umwyM#ySq{i(?(7=FjL8*VD#@Yz4Lp{rqMckX6O4{ zutzRe8x?USeu+!cJzU^V5$5N{Gul0~s+W9gZndbX8{9NmcJN9y1_^*;@!ec4egN@B zUst1dsv{%0X{Nce=-B&MooeT7ukV&0mzKA5l+Z+I{npXL|zAJy*;u)K|3h_U5VRaA#ZYYHN=TK)=4)R)PQ>1XD{#H$7Qhdl#l#vy+FQY)l@u~IyhP` z&HQ4ye8)*vT!iBNhYv$j+Oj5eHXEIzF4UHSSdTW`3l`CpGYhQ49W$ggybcPEJ5C`n z0=k%H7yr3PdO!M})1S}g-<#ph3B(>-DY|qKO7I{anb_tl9D*-%g`a-?G4tYoZw7nw zfsnAS!G`UeE7_R%T-#OC#xGo3zrMod54wZ^v6&}r2Qp}M7l)@-x994=z0Rg;LJHox z)%$i~dwkyqdg;F(Y^zYw+f71h!S`2}x0qF_Crl3f_1Z^jkH1NUvMs&vH;l8;zwslH zXC~wI^JP!%ico24%Nh%*o*d-a-QT8Ix(eS_$T;~A;idSmt>0F1o(7V(d2oF2${K@h z5%m`WKkxPOZEozOQlDkO=imnVH%Pv^L1~Id&!wyUV^KAa`LQNNCvYRL-jHx^xw0{R zUqeb&=Vu~vwPeC)BFc+@4;92CeeE6J>X$Qe=rvs2y3-ly)l1Nxkl}URH5#S9$oyID zwg}G*o!-`vjRiS9LsJn+cIFY8zkOl-NW8)7k!ocEDjHy{x(9cLee164Tq{DqG@8rx z^UqGX25TCuVm+S~C5oQrwi#(RmoO1gnJU2+@y?L+V*fsVES|?lHg;Sqa*l*_uqteV z(bx0W8T^~x_SK1*xMua&%Rq^HevyXHHbfWJM|xF5`up{ZsH*8tE9V>g^C*>Em=@w1 z>G|oD4n8fH_yHbyhma{W`qCZ`&go9APUD~xv+s%9W?*oO&e}@*IgMJXu98ddW~DoJ zY4LBqPO>HFOLq#9lAONGmY4vxnkpQ=Yh?yDcTuT z8g5THX=R0`s_~q)?)yaoCPd(6eaB`CSsh-cg zGQH)z-oa2h8adx#jJ^NDO}H)rkVHOa&;8_5%Q4{KrD&+@FaGjJfU4`UZE?{WIXsDv zjV{KHH{aWDQDt7xWxsEDSh00Chm6ivm;z75+o?}#ez0ux%TyarVOa{uvcb;Z^Qu$N zg`j0XQX8aj0XL#@sPd35FGTp4)#=GYH+;@bdF*n^TBF4<(~-5e?NoV z70U}87S-hkp3`+OjTF>B=&W!@`QRZCqCXT*ZP>drU7|goL4m&uJtZfn^z;i|T;;CF z+ow#4k8W=gGoE4hXzElgTvMP~n~(}UAN`B&Q;UaHak|yC=On-ZMmTUgy=p_(moJYS z_*C7tbQm9C^^e-QxL}p#*kG2$X3EM~%noz^dvgM&x);#ai0Eq0MZXNKB6wEmL^Vb5 zg$CK|*>hd`!dHh98;hfPJ_Ve*!F~SYt2#93mxLVy#UC{`&FCm#BV8 zH?IBk|NJqtnv{g_r=`Vy`dO|np&=&vb~_D~S5!XRJ5VH(a>|UA?!~2fGslqEE?^bw zRfxzB)x0a!q>QMd3HhE5lb6@yu{;ahE-`A^h!F#MnSbxf^kG`E4{T+1LOfsz3VrfV z3oK>qyQ%tto;UZ0OsZ zzKe2pANg*lWN*sj?&#$bIi>BJo+YvS8Y>&`<1@?#Q>{<0+&gv-$Vu_@cS*!ldQ+tYuG(YvseABs1^qoVdRTqlNGoxJC; z1YDO`c`mVM@ul18UxxT0kyHLuXYYkL`h$)XCmk0LD+T8X^TR`9UAW#j(5rram6V8eyy;zY z?qwJWmhTMNZgmDh0b;qS{b(b#r*|gCRT1%U`YTk}EIA@pFUc^0W_Ho^qn-?*Ll6;% zAY~#0Bi00nqFqo?^WV2QELzQ(i@^FEO#nMct#;s5zi@+im4te|pXBk$&;ob5!$fxG z&9Gy)aCO~mBCTZxbYee*rhGRdrh}kwaALuKuj+}J@1IQxU=E?91&uzi#_csm(Jz3R znWUpEuZgj7`S5?Q<}cBF%?h-y`~=X8%QKCW9mG=JyJ_Rby=abUK^LLJ_GN#6zp4-R z&JiGyY-iZ89)eyokXru|voSk+>KT1rbbo+n_F~P%d1D_p@bfF5IPo%3d^s@%R8;1N zc+fTo^{@ESXZ7d+_e#Qx)~#E|{$V4IC5CTE$nn-Do*O3m&era)Vh5liP-!Ee(6n+d zBSHOJ`rNDDaavI$>|y$icE2)~uUN5Sh}&ail|M|PpwtuGUfk|S2M^gb034(@yik*dO}uXI3z1TK0O|GFm1C|WE-K(7+zY=`0ujVY*lX0 zQb8(Ou*Fd&wJ0*A_Vr!<@l47q!#6Z9WQW_LC%F+FP{Qvq38o}6-JGCn6`kuZoKtSU zxI#x$^C5K@A&&a+LQnlx71e$FN_6xLATs>oARHH!CdsDrKN3cfIsg3#S|!oTa+}dr zOgY!E&Bzm^$jvY63{Pj_5bFByL>an8(w}eeo6G*sTdU1vZ&Psnp@;J!FYK zK9f_@AB5iLpH91`zFo*YU2IJKpIHl?dnJp9$KgL#upRab9T*UD@mO}AJ~Jjzt zgt2(#v=j!C8k>5sbY9nms%lyE5YQRWF*XiInsVHtPt;g;9*cQ4=p#)0$nf~Yg4`y6 zOaA^Vh9-}uoH?Yf?k#QG7JB2xjdb>(KzV5W;ha@k4T>y_)bLI87yKSPNc0oZtF)I~ zd(YoL5}WpBl)Q!=$=#A!?U|1v17ANrt8Br6mmzK69slUSZt=jnWi%!b z2&7dOIcsS6U;;fH6$VyzEIb3n1)3iA78Dj%037y1)eh>{wJ$I3;OSCt!_m>P2{qP0=?G7Y-)l?Emp1t`hEz8S_m;PbYbQq@&rQS3fh4?5tL%UEx76J&3@vI*;hnJ zQMU3Q+M0IjOGq#wkMPH3K2qN5&( zU;3&SO-Y<4^_rtbaqug+iA58sJ)8h-qyeC|bE;xiPeXhH>HQ>-o>dOw8K)B!2Y z67-9xUTl zzxcrj>V{e*!GUuH4|J(yeT>#dZ2HMkupW3AAKp8V_OjErzu9y&G!{!%X1ZJ)$MI4b zGSMHE&1F#$tCNo4#43MtGeU0+(e2SIYT9vh#~>!<+rf;eygc{U*-17oBmFTL^oJc& z354z=UcP+!>IquFozVEIB)vDT++%@keSDHq@hpNslq5-BlV=~xp*{${!)bId^Yij3(9sUi zmikzOTY~cuaJfDnp$5JIPlpZTpxH6PaVnXAd}+PD3P|x>y}?Vn1*{M6nK>w2@;NHC>iEqOUCn7@7A%cP3hfDbPm_eL~X(weihmL`9 zR2selJodHLG+gJu%^((=?QPcu3p{jb41C9lRwC(v@xk8Hlodz^V{#^mnB#ZugoU_{ zs4&P3s2#pV(acW8?3J9H>rrzd$HS#r`in<5N|svrUI*G>_694T~TmZB&gCS8#G5hXg#2{F`dUZ!d+&$z!VfbcJ zeiNA~xEsHNID)8A&cdnoDF`@7F6g77i^5!y^vj|;Xu9+x+83Nn?ZiZ6DLpQde#R)( zm3fOaA@JA@V+wPxt^p@IsPYkejI4l^xTUz_#4IXFfFHeM7~)ny`!xyz)MnY&7ja?o z1Yv}7v23nBFi~_(O(VfN`h`|6l^twwuGoER#c9-Jl+jnsG z6;QFJE5!q)2yB$&8S~u%dpHriDi}(LCK$ZXMH}-yN=zn#J(hqPLlpDACMG5o`2(TW zt7I<3n-)Jv0KIOm>n1G&V(yO}9V4AZ5aGyHfI|8HZE3p@M~Mu|)&Fqk(p)otSzaFm zSdy!3w)x)I$2?mnjqurX+r>+`I@9F^z9;BgHpHLRkc0!ue0*ep^CWV_U@${8+odpe zRRxYq9QQ@sI&AK!v9U410XB`a!axZNu*RV05o_g)dvql2yh&&>8LmU$)9O|0H$F>@ zor9>zsp`oCCCxt(TS0_g$hl$#@8bqOBcW~E=q}=x9*XM|{gT`G#}gWLz^`<#DnP+O zzua9uYx}|Zjjt$!fUwECckdRgm*IHR)N6*TgrkmhTi=h(SwtqJsEqxr!jMR{I`1(HosFBv&vZCpM2}Se*K!wI||v< zN|5eoSQd<|ExsonEg>z-=DuOklW%S;m|us6H`$>*t?3&1`m8wFvL;2)3xXpJZ4fza8jR9>xXfMCyQUHbob^f~~1@ylc8H$bs8}cv}Th z!$T59&#|fCVio0w5{Bqr9y{MV%ZKg;1)YJ+<%MV1VhUNvkNNXZ{RQ&KT=)xHV3kMq z63J7T$u-5JRBUpCC_xKkEJSdT?wRmj3&K#WDa4o*$KB))LS9x1wJvL)C%2SHNpVx} zUl6q{fHB~_9OjmS{_eUOXLu|58Ft3%#JyA57;L}C>1j3HE?6`Y2 z`0=N>R7?@vIlTva8XESAK-yY@ltll$b?aBzgFe{PJ8-P2=8hsd9Y94i+vU;2hwpHZ zo1>CA#h~QLDThQmpD_6Zw1k?I)m16!`Su!Od@$vCoaz!lcTh^}qd!GoH z=2{wo#jU@}+Pi^J;k24Vjpl+lhR$6V&cU&mvrhyn@0MPzFp8Kk5x5UdM`n&uSTFek zcnS28+;26dD{E9*kR0rcx5oK<3N{CYY7%wEp296S*mp4C$z){CCBl{F&dSE6!dY)I zS&wl7GlBagwWHc(aIuTIhXLP2Ev3~P0&YWxI%yB%{_iK0BD#<&q~9?%gaE9dmxM*- z7XG~c&Z^=e=gb9`ICI3+qskxy`4{36SFU&DCnN{Li~~5uV(li7ncxkGE?W8nB*fx< zA}GZj)LzHy7<-qTd5I*)efw7&AO}DPI{;Q%;|CN7tS$vv-@q14Xoq_09b-s0s~tIV zfPWl7%IsCsCC+$94B^wI{kTC3WRrNB0*&{1mGVcJ2;TKer3ZZu4D-a#G7}u{}M~Ced;dw-)|AIEyfJEjSjX3YL0iitr z&u!k)jRM|>5}lXqH<5oRlJghDG+yr$fq$@uUycld9M&`v-PJ~(d2iqTjzs2nH~k8$VP@@j&1{)`70$yYE#wP}h4ei*XH8z-lGZL8nptES9XsvhZ+?sZ5Tb)(* zB2LxgWMWR3Jr-32QAIE#@-x4 zUxHh=F7l1Jo1Y(L2)SRXT^cX{N);bnF6t^Lpb=uHih@F)cnQ;xj~}W}V*P`v?!GkU zg?&#Y@o|HKf)+F%bUlY$o*2O}JxKtFd-vASz6QY&J zA$2H`wSD^<9v*}C4=mxNOp4!16gSGoflqHnen`UuQZ}a7mL?Iv2MJh0`ZQ4~Av7 z3bYf^oW_l)t|9{(B5xX?4AeS&_%FaEQ7BWhB2Tc+Vp?-lp$%##e$vQjy$Wr$AoWv? z4xm4S{}~4qL(i!mM~L9pRBN0NoycwO2_OxNS85=cebf*zYb4MbVj(LD6M}vGwc4|( znIj!>tT}^JGNWvYwu(nK1BL8JASvW>lHWN1im49HKEKLDgSaMd8Fe}(D3b;vt14KN zeGa@*6hEYkQx0#KR}Lsf&Nu$5!xA>oc!i?_{RfV(dskrEg3vIAV5Y7!Y?5f(5VirV ze#f_JlCwuVVf(RdGy}FLZFmP{b;038{G|>7l8t`MY0!{9iF~7gkHoNz?Bl`K9{l_~4phkH6>{GR=cbgC%yGyGs=6t(S17AB zoVCH;<6^Pp$EUkdZ{6DieOy>)CA26$%#$j&sQXlJ(=30?4cGwzA#sq;C0(NO7xw1> zv(fdr^Ep0pTrePqAstb0!6|%** zi2Ysh*7&`14OGkq?)5gkhK(m3S7&V!K+y$%>@dO)~AFvuo!`@F6TF9h;> z2HCt5(4Iiqa5uNX<&Rw!h(WSRuR((rNB@#?SINOzLRY9oM3M#+IdsjAqTm%E3?e|* z@hReoEy7jB*zA%vl#04iQd0O0zl;ry46+Z}VQ}yQ?ou#ZGHVy87^zSP!Vbqq2Zn*G zkg@IKme9g`Rsg4=*aI+=jmg(7H;6sIpTXUp>XZ3Y9hKJe^FJ#6 z0Yn5c3?1*o9z1G3$LpFj#{2{4tGmQY4{|i3LZ+b~FjIXk5(KvTEm{|f z<|!UU334Zxqf9QaL~Tt*I_v%F0zIArg;Xj1l6M!5;*d6>>XEEhL><2Uu{5_(n=%$m zVA8v7dVlor;b;=Aj;)s4sIoE0>N1%ZyzRhlq7Xr)%btGkeNQgA zP@szPLoXTY_4nu=Xq#}zu(O2i_~R9eib;|ba>=+7Q_q;>T_13AZ7Fz4u-De(nPZoX z_}c7RfED`-N4|bSh!YM0#`2-pVUc~>Ixe#FJhIzuRizzHtFmORh6m!;3oocaaT@8F z-wzZd3&!lTT*n1ekiW-Z%wkFTAj)Ronbq2v+Z|nGYAt*nw$AFvhGm|R3e~op(aSZu zk&gRmr|3Xu$_g-81s=r!jz|wF1o&$YZ21^_eY4jl6HgwovR!CL69EcgB50F^WpRpDr%q$s6TpkG20 z@7Oj8C0Y0<=E}7rFjM%;drXPovE2-}-l6MSOlpMHFCA^JrC{f4V$DDq=o#w!C6W(9 zLimOhU-M<%S|xQp{O3pw4&-a%KDo=D9~?fU+oyvcM*$4GF12eZXd{@Ryf?>PYJ9Oi z=Bvj%Tp6F6t;U4Y5T2ooSt3D)O4#IR)+BLoIFb4wjF5SrpKarD9vvOWG=Fs64}n+V zLoG9eA-X-KK-4w_7GC(!yliVhDZJWjKbqVl{HzkVZUiBws9(N2$l~$eB@7e{9KpxA zPar2p93?hz|1dmRN=*o4oEU%C;B)@wPKbf|KeKD{@kJ{NQ%Jl?iW2f>72r{ zD?=_9g&wSUThKOx^fqdy!3HQn@yfh*?1EA_^7sY>#3HjNo0YPtgL*hN>M>9i+6S0F z4kvjB0CFt?^^uB@SF0dKDJe%Z@|M~lFa>K``QE#^8j~1ML2Y?;Gxw3VbZn`}2L&4# z7+8=*o)eBa+TDb1(;PFsAsPXMfD;zR_czUsP?9=;M8f>-?X~IHdv>sZq_#bkS`%p9 zs4{>zxs|t?=vY0k+BE*-2xWJhWo2a_$9_hOINsLHo<+V zrt5_Ipf4T;9-ClLA2Q-LAnaP^=CS1FyTEdC&}}k`W}i?Lmr~J!H54j!_wHSS7pq!K z!e+^I#y=~M)7wsHI+DWo^i0FU1zb=Sy6a?9U4G4mkX^c_ZTEz3-@ZdmnGvN+0~ofX zPKFt{N(6~Ssy-?c*%mb*bD?$&0>(j_$b}826FRJ#G;Kvyt;*knwMcYkn?&yQTy^ME zMh~TgR1;!QNfR;O4j@<@mTh&qT^w035vgwTW|ftO4kzji1h{+&;@!EOebw&@@GpKe z)dx8I__y0*JQ8P*{V^&W6aN|ZZ3JB`I2uHc*nQNFng{?}sSkrN=ms_i^>>IwCU36L zhhpuu!g}xTbA|9j2^x2rCMS9(XE!VvfvkZXQqJ@R5o0gxI#&#__n~4cC8i0k-yC2e z&D9FDV@2yaI5-3!JIY)YdY|UVJ;PNe;XT)f$i+5ddg{~~6<|^srB5Q&g8^KC;WNh@ zeTDnw<>jimS-`>6a10jmg`D>Yh^j?{?9A5-qqCaMp~Sj2f%cgxj#IxM6o7=h=Dzwn z7`?4M4E>Zd`q!F}h)XcuT?d)AX!DjWqKpG*hzW7y30ygi{Z-Oeb~ZK8gV*WpJ`pme zvQkG{E``UjDzw!QiXV;y>W`ortJ^1n zjj$-s!ORu4rUjzbVp|`{VD&zjhRq$AL`CZr9_seYQ#hyjJWqc{qCgoA_4MakME@Xk z5@5J?NyaBD$#*z8u8eFyn(}TR+@|94ZEDeAVsqxW)C4)`^PZ&j~ombOIzRLGeYp+v8p5+{#G02A`?I;hI=UEoHeF zzE#Yc*I5#F1#s@{^(t<~rq4E`qraEide^lkq{d~`A4FBx1`t~pH58Tm)XqU-L@nbA zfMW|PWJi zpW7v*9Xtg@1%Dv7GLqqdYic^R(BM|K+DLFLfKy>NrpW22+6e?6)5^OsPwX$ehk%0P zlOt6N;*JVzUcVlV#jT|}n7FmW5gCK^sc1v|MSO4&T>NrM@PtAK zB><4p+J~_teR?pHVys@`2vt3JkV9~h)AK3^_z6?ns1)Hk9td76I+8i7kOK33v!0`2 zBj?m#LY*BfQ9ZOSb%-p38wJouzHNA$pNsbzWEBnx z!3=poJy6k!R+V4IvyTRhp{PS$@34hDUfMWZGAAc4x&VeCT|%OGq*xw>fV3vgYK{&* z9v+?#fhkX84L~s(K~H}G^K5Xlm#@I$;e=`eBDfg}@I@Cnc{_H&je`&^C>OV5Q4oa` z1$iVgxTw;q_4f)mpSKe4ag?$Wgc6e7AwwmYN|W;?y7lcSx!L2_?e5dbjHvt@y@)vz zHKxzzcBkcchoHopI>xHf(Ey_jgpQORuyo~>4qKmi4rlKHoh(#^OzwzHxM+>|9Mwn~ z^`I|})#4rhVVjwHPcyZrzA0++70f4vWpzK4hoQw=pN*FStif`d{!(g9sX1E)>7%0!CmQXCWE5?LFMK^rQk4Td^H@Ryz(V=? zO3@{*S;q-T1g1_B0U!#lHtMIr^i1Vn9lk!vHP)}3b$7o+o$Xyu;q>;%zz*@pM@m;s zsB4I^rAu(w9h6v!UqJ2L%iVTH1R)5?ZPYFvZ26Hsn}vC8W>`RB8F~Zk%`Gjl1dt)C z>yY8Tk+n>e56wtDLqpy{X%^9w(9q>?~fZ zX9#Vf^Kaa`h2kJsK;_pJTW~kQQb0JnD?k7k{+o&oVk}UA1;_zZm6Xc`Vt@?uxekR9 zybtg@+(F1Fbcz}I{+IR;>VRn+(J2b9{7rMNfh2K9Vyp(6@npu z+cTB@FI1uDhDv~9=$yhss6f$P(ByyLVCRPn>Yn+a zpMa4k`kV$-NUI(=;0p`~B0RQv>+hL?P$G7-Splry-*92bceN!m0XDsA$V0uQ9cGCf z6?Z5q=)7vCE&xHH{bXd-<~&LFV2sJXxd+o)l0{ z%9e>B0{F!DyK5>dO(7-U{7miq`KNK+NT-}DQ4ffse;E>TPT)TBgw#=x zS+YI(OH~(;d<I+Q$*Oiz_j*zKO(b+es0R z&snwF2nOIyx;Bm<>Na7$AjYIEl-PtO@FC-{JpgWbZ z;G)%z6ciMc0WcfDLL{~cj#iER`)>&f2{9e}Od)lc-htFrmyUXYgyUKDoR5U}fM0vk zqc|1G6OJB1?9jP$=cb=;zG-e@0sK;YpuKD_NIldhs7gUrNyHg+q{?e+<6~n5q0sc= z^WeRTRb#=+&c%CL?2Ruvt)}M1&Mg^=0*yL)0M_VYVHe6YDOlmPddG&)bVf4h$>`f1 zZOZl0Ln4%TENvZViTU}eTlJsrQd3i-gSEP*hP9*N-qovf)(Z%&9iCjhLpe;(7OAm%aW;^o95N(J!%angaMs5JHl&Ed!As|7NcAIz^mss(# zfBoU%1);a>Ms!Kd5?`0t9zK0qx=#dS8b3DKJlM7WzyZT;@2k;y8{QIVXwnyt6a2v$QqswoR@~2$JlMA5{IV_;hNG8e;JL z`SXQ09(>UMycpQ6!NxP=obk08qmI|vc{=Rmu!vTxY}mfNc-6AQh9ftn{=!}Cw3;3i zWog@k^9&ER<=Ge@e^8P9J5yzXvpCa9)~giNb93xbL&LfIC~Y;^tl!qv2r@QCXk$pToFb9z3hXNHCWs>BWGY+b*8osIVj=ij_~LN?Ms zJ}B{}*(x+Pqd+C9@AB=gi!V>WwsCRE;99c=$-u_I!pM>mjceDh(}B8R{`~hi%#htr z3`gNk{^NN5gCk=IJvJ>%%LIVUviU@R784Ugqh#x*ES=8f@pfh=ma+@ejC4+A=ykXB z*!bVO7sq5Gu~nfGdape2G)03Qy5|Sa;u!%I`SyGQ@RKT|)4q!}5ApRr;w$@_=~+Mp z2@za(hzW{jEkN=JrFNfQ&#lXJsd?mGch-KqChh)rWSwmCB`=O;xf(D;%}Ra?u?sTs z^77&}0VLg5y+Ky?7^8c5e&ru;{@DF{Zbe7X^{ZFgz-R>>nEK9yfc}${BPc9%W{y%oD zgKu5ujtbqmMm$Fh)^I3yAFj~v@p~~m8dTKljC|*1rH`j4!OB;b-mR$32uylnV`yJw z_nTw;{@?pJ6{=1&(eN6++V)I1#ukASa}*TxYZz~!#w(DY=(MztO!vott$oCc7BR4? zWlR1tLNhq8%U)_SPai$j!6cuxhnu+G2C0(87LxUTY|7}wM0GX}UTtu@$nBU&wm2A= z$Eu_@fY)?3OR=--98@D_{Zo1e%n+hlV`56j&W_2>D;qsD4EAdE%ryGnW3+>R|ZN;k|{Ug@uKN`U$px7wVZgMUHh+Rqibj+yBnj zV=?gXGWz)eS<)SPAD*p$8AHqiQpyoNc@?~vV}z94!(TSw)?R12v~y#(|C8)%_7gWx2*>@+?E=T!gXT{o(8T$ zqeh5&>p}LYI$!tYi!q*d?8Apj@F!$%bBurU*{g3(FJgo3*AK!dvR~vNw^GLJ2uOOG z`ug|54G{yvl{K=+SdA^equOEB`P|qdr=&US092vq5!}9A4=>y6h_W?TrB0#tTsM)z z5#zo;&$R2*RXOisDznP5ySXkHyViOZD6B8B1^VP>SJ0S^U zx=p(JKtDu{5@-Q*iww^Piz2A%;20-o@M8s3x|$9S&(Fhubguus%sDd0XW33kdE&M< zx+$5MMBFh(hv4g>6tr*n^Ula34zQ z61b0bkvhU;GB=2bls+;(xkjQ0k*2P6$H5@U z_xnUzi$eybHVm#&-fL63B(AB$q82#;#v6+-s)}IxNO)jiz`v8r=pAsh1M2GP9+qHl zu-^QK&%V1>82Rr7W)}9s(P50395cb9=k0Rw>dmOMeOwh*!F;cuR`&isnONc|R~fCm z??HBUcBa5a44Xiy6(wL06ez>dz72=dE)MqLy{fKWzwVU02nQ5$>+=>yV%uH*;r{A8 zw?s^Gran_(OmWKz$wMYe^#rw?&@GU59eWN!Pe#g}EX;Zw!_F%Q zFFg5FF>mS!aRZRh0P2iwYctC-y7lLu?~$?6gbH;|Fx&xBOgZR?{m48pqGE*3Vp>wG z+g~RiODAR?4lbjh;_JH!uocm;=pulYd-2HV5~u}tMFP(Y?AC7<71bsQNYXf@t{4}p zc=W1if2Ha~|=3HMkeGuZ;x&jKjfz!B^xdmrE@Ww;? z_U+racP`7I&wpP9K2MV9sUmK#Rl-V$Pq^h%c5ujbu&o2tj94cB@01+B_0n1I|NJyd sN#T>36+)k+j(g@LrvLl@+c(GgV&_QZ-r%{LN>{J4TYXoe(jS-qFZZQr$^ZZW literal 0 HcmV?d00001 diff --git a/results/speciation_real_cliff/manifest.json b/results/speciation_real_cliff/manifest.json new file mode 100644 index 0000000..d3fe0df --- /dev/null +++ b/results/speciation_real_cliff/manifest.json @@ -0,0 +1,18 @@ +{ + "experiment": "speciation_real_cliff", + "master_seed": 13, + "git_commit": "56f642e7f9ae01fe01d863bdffe98b226b9dbb7b", + "python": "3.14.5", + "libraries": { + "numpy": "2.5.0", + "scipy": "1.18.0", + "pandas": "3.0.3", + "pyarrow": "24.0.0", + "torch": "2.12.1", + "torchvision": "0.27.1" + }, + "rows": 18, + "results_sha256": "0252581d848376ad698f56d4e69edbcae40cf5a0f090203d6f723cfc5e25303c", + "layer": "1.5", + "tier": "speciation_real" +} \ No newline at end of file diff --git a/results/speciation_real_cliff/resolved_config.yaml b/results/speciation_real_cliff/resolved_config.yaml new file mode 100644 index 0000000..b8ec6f1 --- /dev/null +++ b/results/speciation_real_cliff/resolved_config.yaml @@ -0,0 +1,29 @@ +experiment: speciation_real_cliff +seed: 13 +n_replicates: 3 +source_config: + experiment: speciation_real_cliff + kind: speciation_real + seed: 13 + n_replicates: 3 + speciation_real: + sizes: + - 784 + - 512 + - 512 + - 10 + conflict_fracs: + - 0.0 + - 0.2 + - 0.4 + - 0.6 + - 0.8 + - 1.0 + t_div_fixed: 800 + base_steps: 500 + lr: 0.05 + batch: 128 + n_eval: 2000 + data_root: data + output: + dir: results/speciation_real_cliff diff --git a/src/neural/experiment.py b/src/neural/experiment.py index cc33547..542e2c9 100644 --- a/src/neural/experiment.py +++ b/src/neural/experiment.py @@ -188,6 +188,11 @@ def run_and_save(config_path: str | Path) -> Path: elif kind == "mnist_lineage": df, extra_manifest = run_mnist_experiment(cfg) # oracle provenance + confusion matrix grid = [{"label": label, "lineage_cfg": c} for label, c in _expand_mnist(cfg)] + elif kind == "speciation_real": + from .speciation_real import run_speciation_real # E13: real-weight speciation + Git Re-Basin + df = run_speciation_real(cfg, int(cfg["seed"])) + grid = None + extra_manifest = {"layer": "1.5", "tier": "speciation_real"} else: raise ValueError(f"unknown neural experiment kind {kind!r}") save_artifacts(cfg, df, out_dir, extra_libs=_EXTRA_LIBS, diff --git a/src/neural/rebasin.py b/src/neural/rebasin.py new file mode 100644 index 0000000..a6e4e67 --- /dev/null +++ b/src/neural/rebasin.py @@ -0,0 +1,110 @@ +"""Git Re-Basin weight-matching + linear-mode-connectivity barrier for small MLPs (in-house, deterministic). + +The real-weight speciation experiment (E13) needs to separate the part of two models' merge-incompatibility +that is a mere *coordinate artefact* (removable by permuting hidden units — Ainsworth et al., Git Re-Basin, +arXiv:2209.04836) from the *residual* incompatibility that permutation cannot fix (the true reproductive- +isolation / Dobzhansky–Muller signal). This module implements, for a plain MLP with no BatchNorm/residuals +(the clean Re-Basin regime): + +- ``weight_matching`` — align model B's hidden units to model A by per-layer coordinate descent, each layer + an exact linear-assignment problem (``scipy.optimize.linear_sum_assignment``). Deterministic given the two + weight sets and a seeded layer-visiting order; no data, no gradient — so the "coordinate artefact" claim is + not confounded with data. +- ``barrier`` — the linear-mode-connectivity loss/error barrier along the interpolation between two models. + +Weights are handled as a list of ``(W, b)`` numpy arrays, one per ``nn.Linear`` (``W`` is ``[out, in]``). +Permutations act on the *hidden* layers (outputs of all but the last linear), permuting rows of layer ``k`` +(and its bias) and columns of layer ``k+1``. +""" + +from __future__ import annotations + +import numpy as np +from scipy.optimize import linear_sum_assignment + + +def weight_matching(params_a: list, params_b: list, rng: np.random.Generator, + max_iter: int = 30) -> list: + """Permutations aligning B's hidden units to A (Git Re-Basin weight matching). + + Args: + params_a, params_b (list[tuple[np.ndarray, np.ndarray]]): ``(W, b)`` per linear layer; ``W`` is + ``[out, in]``. Both models must share architecture. + rng (np.random.Generator): seeds the (order-only) layer-visiting schedule — deterministic result. + max_iter (int): coordinate-descent sweeps; stops early at a fixed point. + + Returns: + list[np.ndarray]: permutation index arrays, one per hidden layer (length = #linear − 1). + """ + n_layers = len(params_a) + hidden = n_layers - 1 # permutable layers (not the output) + sizes = [params_a[k][0].shape[0] for k in range(hidden)] + perms = [np.arange(s) for s in sizes] # identity to start + + for _ in range(max_iter): + changed = False + for k in rng.permutation(hidden): + Wa_in, _ = params_a[k] + Wb_in, _ = params_b[k] + # incoming weights: B's columns already permuted by the previous hidden layer's perm + if k > 0: + Wb_in = Wb_in[:, perms[k - 1]] + cost = Wa_in @ Wb_in.T # (out_k, out_k): align A row i with B row j + # outgoing weights: layer k+1 columns correspond to these units; B's rows permuted by next perm + Wa_out = params_a[k + 1][0] + Wb_out = params_b[k + 1][0] + if k + 1 < hidden: + Wb_out = Wb_out[perms[k + 1], :] + cost = cost + Wa_out.T @ Wb_out # (in_{k+1}=out_k, out_k) + ri, ci = linear_sum_assignment(cost, maximize=True) + new_perm = ci[np.argsort(ri)] + if not np.array_equal(new_perm, perms[k]): + changed = True + perms[k] = new_perm + if not changed: + break + return perms + + +def apply_perms(params: list, perms: list) -> list: + """Return a copy of ``params`` with hidden-unit permutations applied (rows of k, columns of k+1).""" + out = [(W.copy(), b.copy()) for W, b in params] + hidden = len(params) - 1 + for k in range(hidden): + p = perms[k] + W, b = out[k] + out[k] = (W[p, :], b[p]) # permute this layer's output units + Wn, bn = out[k + 1] + out[k + 1] = (Wn[:, p], bn) # and the next layer's matching inputs + return out + + +def interpolate(params_a: list, params_b: list, alpha: float) -> list: + """Linear interpolation ``(1-alpha)*A + alpha*B`` of two parameter lists.""" + return [((1 - alpha) * Wa + alpha * Wb, (1 - alpha) * ba + alpha * bb) + for (Wa, ba), (Wb, bb) in zip(params_a, params_b)] + + +def barrier(params_a: list, params_b: list, loss_fn, alphas=None) -> dict: + """Linear-mode-connectivity barrier: worst-case excess loss on the interpolation path above the chord. + + Args: + params_a, params_b (list): endpoint parameter lists. + loss_fn (Callable): ``loss_fn(params) -> (loss, error)`` on a fixed eval set. + alphas (Sequence[float] | None): interpolation grid (default 21 points on [0, 1]). + + Returns: + dict: ``{loss_barrier, error_barrier, midpoint_loss_barrier}`` (excess over the endpoint chord). + """ + alphas = np.linspace(0, 1, 21) if alphas is None else np.asarray(alphas) + losses, errors = [], [] + for a in alphas: + L, E = loss_fn(interpolate(params_a, params_b, float(a))) + losses.append(L); errors.append(E) + losses, errors = np.array(losses), np.array(errors) + chord_L = (1 - alphas) * losses[0] + alphas * losses[-1] + chord_E = (1 - alphas) * errors[0] + alphas * errors[-1] + mid = len(alphas) // 2 + return {"loss_barrier": float(np.max(losses - chord_L)), + "error_barrier": float(np.max(errors - chord_E)), + "midpoint_loss_barrier": float(losses[mid] - chord_L[mid])} diff --git a/src/neural/speciation_real.py b/src/neural/speciation_real.py new file mode 100644 index 0000000..68bf7bf --- /dev/null +++ b/src/neural/speciation_real.py @@ -0,0 +1,165 @@ +"""E13 — real-weight model speciation: the merge-compatibility cliff in trained MLPs, with Git Re-Basin. + +The real-weight image of E12. Two small MLPs are forked from a shared base and trained independently; +we merge them (weight averaging) and measure the linear-mode-connectivity **barrier** — before and after +**permutation alignment** (:mod:`neural.rebasin`). The barrier alignment *removes* is a coordinate +artefact (Git Re-Basin); the barrier it *cannot* remove — the **residual** — is the true reproductive- +isolation / Dobzhansky–Muller signal. A ``condition`` knob sets how the children diverge, which is the +empirical question this experiment answers: + +- ``shared`` — both children keep training on the *same* task from the shared fork: they never leave the + basin, so there is ~no barrier at all (trivially mergeable — the low-divergence anchor). +- ``independent`` — same task, but each child trained from its *own random init* (the canonical Git + Re-Basin setting): a large naive barrier that alignment *removes* (residual ≈ 0) — the coordinate + artefact. "Same species, different basis." +- ``conflict`` — the children learn *conflicting* label maps (B's labels cyclically shifted): + genuinely incompatible functions on shared capacity. A large barrier that alignment *cannot* remove + (residual stays high) — true reproductive isolation. "Different species." + +The discriminating metric is the **residual** (barrier after alignment): ~0 for ``shared`` and +``independent`` (compatible — the incompatibility, if any, is coordinate), large for ``conflict``. + +Divergence is swept via post-fork training steps ``t_div``. Small no-BatchNorm MLPs on MNIST — the clean +Re-Basin regime. Statistically reproducible (seeded); NumPy/scipy alignment is deterministic. +""" + +from __future__ import annotations + +from typing import Any, Mapping + +import numpy as np +import pandas as pd + +from .rebasin import apply_perms, barrier, weight_matching +from .train import seed_everything + + +def _mlp(sizes, device): + import torch.nn as nn + layers = [] + for i in range(len(sizes) - 1): + layers.append(nn.Linear(sizes[i], sizes[i + 1])) + if i < len(sizes) - 2: + layers.append(nn.ReLU()) + return nn.Sequential(*layers).to(device) + + +def _get_params(model): + import torch.nn as nn + return [(m.weight.detach().cpu().numpy().copy(), m.bias.detach().cpu().numpy().copy()) + for m in model if isinstance(m, nn.Linear)] + + +def _set_params(model, params, device): + import torch + import torch.nn as nn + it = iter(params) + for m in model: + if isinstance(m, nn.Linear): + W, b = next(it) + m.weight.data = torch.tensor(W, dtype=torch.float32, device=device) + m.bias.data = torch.tensor(b, dtype=torch.float32, device=device) + + +def _train(model, X, y, steps, lr, batch, rng, device): + import torch + opt = torch.optim.SGD(model.parameters(), lr=lr, momentum=0.9) + lossf = torch.nn.CrossEntropyLoss() + model.train() + for _ in range(steps): + idx = rng.integers(0, len(X), size=batch) + xb = X[idx]; yb = y[idx] + opt.zero_grad(); loss = lossf(model(xb), yb); loss.backward(); opt.step() + + +def run_speciation_real(cfg: Mapping[str, Any], seed: int) -> pd.DataFrame: + """Fork-and-merge sweep over (condition x divergence x replicate); returns barrier decompositions.""" + import torch + import torchvision + + spec = dict(cfg["speciation_real"]) + sizes = list(spec.get("sizes", [784, 512, 512, 10])) + conditions = list(spec.get("conditions", ["shared", "independent", "conflict"])) + t_divs = list(spec.get("t_div", [50, 100, 200, 400, 800])) + base_steps = int(spec.get("base_steps", 300)) + lr, batch = float(spec.get("lr", 0.05)), int(spec.get("batch", 128)) + n_eval = int(spec.get("n_eval", 2000)) + reps = int(cfg.get("n_replicates", spec.get("reps", 3))) + device = "cuda" if __import__("torch").cuda.is_available() else "cpu" + + root = spec.get("data_root", "data") + tr = torchvision.datasets.MNIST(root, train=True, download=True) + te = torchvision.datasets.MNIST(root, train=False, download=True) + Xtr = (tr.data.float().reshape(-1, 784) / 255.0).to(device); ytr = tr.targets.to(device) + Xte = (te.data.float().reshape(-1, 784) / 255.0)[:n_eval].to(device); yte = te.targets[:n_eval].to(device) + lossf = torch.nn.CrossEntropyLoss() + + def make_loss_fn(model): + def loss_fn(params): + _set_params(model, params, device); model.eval() + with torch.no_grad(): + out = model(Xte) + L = float(lossf(out, yte)); E = float((out.argmax(1) != yte).float().mean()) + return L, E + return loss_fn + + def _conflict_labels(frac): + """B's labels: cyclically shift the first round(frac*10) classes (systematic conflict on them).""" + k = int(round(frac * 10)) + if k == 0: + return ytr + sel = np.arange(k); shifted = np.roll(sel, 1) + y2 = ytr.clone() + for c, c2 in zip(sel, shifted): + y2[ytr == int(c)] = int(c2) + return y2 + + def subset(cond, child, conflict_frac): + """(X, y) the child trains on for a given condition.""" + if cond == "conflict" and child == 1: + return Xtr, _conflict_labels(conflict_frac) # B learns a conflicting label map + return Xtr, ytr # shared / independent / conflict-A: normal task + + # Two modes: (1) conditions x t_div decomposition; (2) a conflict-fraction isolation cliff. + conflict_fracs = spec.get("conflict_fracs") + if conflict_fracs is not None: + sweep = [("conflict", int(spec.get("t_div_fixed", 800)), float(f)) for f in conflict_fracs] + else: + sweep = [(c, int(t), 1.0) for c in conditions for t in t_divs] + + rows: list[dict] = [] + for rep in range(reps): + for cond, t_div, conflict_frac in sweep: + ss = seed + 1000 * rep + hash((cond, t_div, conflict_frac)) % 997 + seed_everything(np.random.SeedSequence(ss)) + base = _mlp(sizes, device) + _train(base, Xtr, ytr, base_steps, lr, batch, np.random.default_rng(ss), device) + base_params = _get_params(base) + children = [] + for child in (0, 1): + Xc, yc = subset(cond, child, conflict_frac) + if cond == "independent": # each child from its OWN init (Git Re-Basin regime) + seed_everything(np.random.SeedSequence(ss + 100 * (child + 1))) + m = _mlp(sizes, device) + _train(m, Xc, yc, base_steps + t_div, lr, batch, + np.random.default_rng(ss + 17 * (child + 1)), device) + else: # shared fork, then independent divergence + m = _mlp(sizes, device); _set_params(m, base_params, device) + _train(m, Xc, yc, t_div, lr, batch, np.random.default_rng(ss + 17 * (child + 1)), device) + children.append(_get_params(m)) + pA, pB = children + probe = _mlp(sizes, device); loss_fn = make_loss_fn(probe) + b_naive = barrier(pA, pB, loss_fn) + perms = weight_matching(pA, pB, np.random.default_rng(ss + 5)) + b_aligned = barrier(pA, apply_perms(pB, perms), loss_fn) + accA, accB = 1 - loss_fn(pA)[1], 1 - loss_fn(pB)[1] + rows.append({ + "condition": cond, "t_div": t_div, "conflict_frac": conflict_frac, "replicate": rep, + "barrier_naive": b_naive["error_barrier"], + "barrier_aligned": b_aligned["error_barrier"], + "removable": b_naive["error_barrier"] - b_aligned["error_barrier"], + "residual": b_aligned["error_barrier"], + "loss_barrier_naive": b_naive["loss_barrier"], + "loss_barrier_aligned": b_aligned["loss_barrier"], + "parent_acc": (accA + accB) / 2.0}) + return pd.DataFrame(rows) diff --git a/tests/test_rebasin.py b/tests/test_rebasin.py new file mode 100644 index 0000000..2605492 --- /dev/null +++ b/tests/test_rebasin.py @@ -0,0 +1,66 @@ +"""Tests for E13's Git Re-Basin weight-matching + barrier (pure NumPy, always runnable).""" + +from __future__ import annotations + +import numpy as np +import pytest + +from neural.rebasin import apply_perms, barrier, interpolate, weight_matching + + +def _mlp(sizes, rng): + return [(rng.standard_normal((sizes[i + 1], sizes[i])), rng.standard_normal(sizes[i + 1])) + for i in range(len(sizes) - 1)] + + +def _forward(params, X): + h = X + for i, (W, b) in enumerate(params): + h = h @ W.T + b + if i < len(params) - 1: + h = np.maximum(h, 0) + return h + + +def test_weight_matching_recovers_a_known_permutation(): + # A random-but-functionally-identical permuted copy is in a different "basis"; weight matching must + # recover the permutation, so realigning makes the copy functionally identical to the original again. + rng = np.random.default_rng(0) + A = _mlp([8, 16, 16, 3], rng) + p1, p2 = rng.permutation(16), rng.permutation(16) + B = apply_perms(A, [p1, p2]) # functionally identical to A, permuted basis + X = rng.standard_normal((32, 8)) + assert np.allclose(_forward(A, X), _forward(B, X)) # permutation preserves the function + perms = weight_matching(A, B, np.random.default_rng(1)) + B_realigned = apply_perms(B, perms) + assert np.allclose(_forward(A, X), _forward(B_realigned, X), atol=1e-6) # recovered -> function matches + + +def test_weight_matching_is_deterministic(): + rng = np.random.default_rng(2) + A, B = _mlp([6, 10, 4], rng), _mlp([6, 10, 4], rng) + p1 = weight_matching(A, B, np.random.default_rng(3)) + p2 = weight_matching(A, B, np.random.default_rng(3)) + assert all(np.array_equal(a, b) for a, b in zip(p1, p2)) # deterministic given inputs + seed + + +def test_interpolate_endpoints_and_barrier_zero_for_identical(): + rng = np.random.default_rng(4) + A = _mlp([5, 8, 2], rng) + B = _mlp([5, 8, 2], rng) + assert np.allclose(interpolate(A, B, 0.0)[0][0], A[0][0]) + assert np.allclose(interpolate(A, B, 1.0)[0][0], B[0][0]) + X = rng.standard_normal((20, 5)); tgt = rng.standard_normal((20, 2)) + + def loss_fn(P): + L = float(((_forward(P, X) - tgt) ** 2).mean()); return L, L + b = barrier(A, A, loss_fn) # a model with itself: no barrier + assert b["loss_barrier"] == pytest.approx(0.0, abs=1e-9) + + +def test_apply_perms_preserves_function(): + rng = np.random.default_rng(5) + A = _mlp([4, 7, 7, 3], rng) + perms = [rng.permutation(7), rng.permutation(7)] + X = rng.standard_normal((16, 4)) + assert np.allclose(_forward(A, X), _forward(apply_perms(A, perms), X))