From 5ab9e438e07733fe08a77a0ea8d3d03368b7c6fd Mon Sep 17 00:00:00 2001 From: Erwan Bousse Date: Mon, 31 Mar 2014 11:37:20 +0200 Subject: [PATCH] Working version for the paper, and working plugin UI --- AB/src/somemmdeep/ADeepPImpl.java | 278 --- AB/src/somemmdeep/BDeepPImpl.java | 157 -- .../somemmdeep/SomeMMDeepCloningMaterial.java | 28 - AB/src/somemmdeep/SomeMMDeepLightCopier.java | 18 - AB/src/somemmdeep/SomeMMDeepTags.java | 52 - .../AMutClassOnlyPImpl.java | 264 --- .../SomeMMMutClassOnlyCloningMaterial.java | 29 - .../SomeMMMutClassOnlyLightCopier.java | 18 - .../SomeMMMutClassOnlyTags.java | 52 - AB/src/yayabdeep/ADeepPImpl.java | 278 --- AB/src/yayabdeep/BDeepPImpl.java | 157 -- .../yayabdeep/YayABDeepCloningMaterial.java | 22 - AB/src/yayabdeep/YayABDeepLightCopier.java | 19 - AB/src/yayabdeep/YayABDeepTags.java | 49 - .../yayabmutclassonly/AMutClassOnlyPImpl.java | 264 --- .../YayABMutClassOnlyCloningMaterial.java | 22 - .../YayABMutClassOnlyLightCopier.java | 19 - .../YayABMutClassOnlyTags.java | 49 - .../main.product | 6 +- .../materialgenerator/main/Application.java | 61 +- .../META-INF/MANIFEST.MF | 4 +- .../main.product | 217 +++ .../plugin.xml | 13 + .../runtime-BenchmarkTool/.metadata/.log | 10 + .../.root/.indexes/properties.version | 0 .../org.eclipse.core.resources.prefs | 0 .../runtime-data/.metadata/.log | 10 - .../src/benchmark/Benchmark.java | 44 +- .../src/benchmark/BenchmarkResults.java | 9 - .../src/benchmark/Performance.java | 8 +- .../src/main/Application.java | 87 +- .../src/main/BundleLoader.java | 9 +- .../src/memoryanalysis/MemoryAnalyzer.java | 3 + .../target/classes/benchmark/Benchmark.class | Bin 4897 -> 5386 bytes .../classes/benchmark/BenchmarkResults.class | Bin 2433 -> 2433 bytes .../target/classes/main/Application.class | Bin 8635 -> 11266 bytes .../target/classes/main/BundleLoader.class | Bin 1789 -> 1864 bytes .../memoryanalysis/MemoryAnalyzer.class | Bin 2538 -> 2628 bytes .../META-INF/MANIFEST.MF | 10 +- .../materialgenerator/main/Application.class | Bin 8516 -> 0 bytes .../metrics/CloningMetrics.class | Bin 3664 -> 3664 bytes .../tagger/impl/MutClassesOnlyTagger.class | Bin 7412 -> 7279 bytes .../plugin.xml | 24 +- .../runtime-data/.metadata/.log | 33 +- .../.location | Bin 0 -> 227 bytes .../.markers.snap | Bin 0 -> 16 bytes .../.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/AB/.location | Bin 0 -> 95 bytes .../.projects/AB/.markers.snap | Bin 0 -> 2286 bytes .../.projects/AB/.syncinfo.snap | Bin 0 -> 16 bytes .../.root/.indexes/properties.index | Bin 0 -> 61 bytes .../.root/.indexes/properties.version | 1 - .../.root/.markers.snap | Bin 0 -> 32 bytes .../.safetable/org.eclipse.core.resources | Bin 0 -> 348 bytes .../.plugins/org.eclipse.core.resources/.snap | Bin 0 -> 8497 bytes .../.settings/org.eclipse.jdt.core.prefs | 7 + .../.settings/org.eclipse.jdt.launching.prefs | 2 + .../.settings/org.eclipse.pde.core.prefs | 2 + .../.project | 23 + .../org.eclipse.jdt.core/2369791033.index | Bin 0 -> 25 bytes .../org.eclipse.jdt.core/3185608247.index | Bin 0 -> 10230 bytes .../org.eclipse.jdt.core/3765020915.index | Bin 0 -> 12000 bytes .../externalLibsTimeStamps | Bin 0 -> 2453 bytes .../org.eclipse.jdt.core/javaLikeNames.txt | 1 + .../org.eclipse.jdt.core/savedIndexNames.txt | 3 + .../variablesAndContainers.dat | Bin 0 -> 32982 bytes .../org.eclipse.jdt.launching/.install.xml | 4 + .../libraryInfos.xml | 25 + .../-1355312039518.target/.lazy | Bin 0 -> 1708039 bytes .../-1355312039518.target/.pluginInfo | 1702 +++++++++++++++++ .../-1355312039518.target/.state | Bin 0 -> 143620 bytes .../-1746579760.workspace/.lazy | Bin 0 -> 723 bytes .../-1746579760.workspace/.pluginInfo | 6 + .../-1746579760.workspace/.state | Bin 0 -> 586 bytes .../.extensions/.manager/.fileTableLock | 0 .../.local_targets/1395999341423.target | 15 + .../application/Application.java | 95 + .../generators}/EMFCodeGenerator.java | 2 +- .../generators/ManifestEditor.java | 139 ++ .../materialgenerator/main/Application.java | 146 -- .../materialgenerator/main/TestTagger.java | 57 - .../metrics/CloningMetrics.java | 1 - .../materialgenerator/plugin/Activator.java | 61 + .../CloningMaterialGenerationLaunch.java | 39 + .../CloningMaterialGenerationLaunchTab.java | 252 +++ ...oningMaterialGenerationLaunchTabGroup.java | 20 + .../plugin/EcoreFileFilter.java | 12 + .../materialgenerator/start/Start.java | 113 ++ .../tagger/impl/MutClassesOnlyTagger.java | 67 +- .../META-INF/MANIFEST.MF | 6 +- .../diverse/cloning/runtime/util/Log.java | 80 +- 91 files changed, 3061 insertions(+), 2143 deletions(-) delete mode 100644 AB/src/somemmdeep/ADeepPImpl.java delete mode 100644 AB/src/somemmdeep/BDeepPImpl.java delete mode 100644 AB/src/somemmdeep/SomeMMDeepCloningMaterial.java delete mode 100644 AB/src/somemmdeep/SomeMMDeepLightCopier.java delete mode 100644 AB/src/somemmdeep/SomeMMDeepTags.java delete mode 100644 AB/src/somemmmutclassonly/AMutClassOnlyPImpl.java delete mode 100644 AB/src/somemmmutclassonly/SomeMMMutClassOnlyCloningMaterial.java delete mode 100644 AB/src/somemmmutclassonly/SomeMMMutClassOnlyLightCopier.java delete mode 100644 AB/src/somemmmutclassonly/SomeMMMutClassOnlyTags.java delete mode 100644 AB/src/yayabdeep/ADeepPImpl.java delete mode 100644 AB/src/yayabdeep/BDeepPImpl.java delete mode 100644 AB/src/yayabdeep/YayABDeepCloningMaterial.java delete mode 100644 AB/src/yayabdeep/YayABDeepLightCopier.java delete mode 100644 AB/src/yayabdeep/YayABDeepTags.java delete mode 100644 AB/src/yayabmutclassonly/AMutClassOnlyPImpl.java delete mode 100644 AB/src/yayabmutclassonly/YayABMutClassOnlyCloningMaterial.java delete mode 100644 AB/src/yayabmutclassonly/YayABMutClassOnlyLightCopier.java delete mode 100644 AB/src/yayabmutclassonly/YayABMutClassOnlyTags.java create mode 100644 fr.inria.diverse.cloning.benchmark.tool/main.product create mode 100644 fr.inria.diverse.cloning.benchmark.tool/runtime-BenchmarkTool/.metadata/.log rename fr.inria.diverse.cloning.benchmark.tool/{runtime-data => runtime-BenchmarkTool}/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version (100%) rename fr.inria.diverse.cloning.benchmark.tool/{runtime-data => runtime-BenchmarkTool}/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs (100%) delete mode 100644 fr.inria.diverse.cloning.benchmark.tool/runtime-data/.metadata/.log delete mode 100644 fr.inria.diverse.cloning.materialgenerator/bin/fr/inria/diverse/cloning/materialgenerator/main/Application.class create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.projects/.org.eclipse.jdt.core.external.folders/.location create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.projects/.org.eclipse.jdt.core.external.folders/.markers.snap create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.projects/.org.eclipse.jdt.core.external.folders/.syncinfo.snap create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.projects/AB/.location create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.projects/AB/.markers.snap create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.projects/AB/.syncinfo.snap create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index delete mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.snap create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.core.prefs create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.launching.prefs create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.pde.core.prefs create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/.org.eclipse.jdt.core.external.folders/.project create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/2369791033.index create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/3185608247.index create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/3765020915.index create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/externalLibsTimeStamps create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/javaLikeNames.txt create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/savedIndexNames.txt create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.launching/.install.xml create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.launching/libraryInfos.xml create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/-1355312039518.target/.lazy create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/-1355312039518.target/.pluginInfo create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/-1355312039518.target/.state create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/-1746579760.workspace/.lazy create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/-1746579760.workspace/.pluginInfo create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/-1746579760.workspace/.state create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/.extensions/.manager/.fileTableLock create mode 100644 fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/.local_targets/1395999341423.target create mode 100644 fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/application/Application.java rename {fr.inria.diverse.cloning.benchmark.materialgenerator/src/fr/inria/diverse/cloning/benchmark/materialgenerator/generator => fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/generators}/EMFCodeGenerator.java (98%) create mode 100644 fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/generators/ManifestEditor.java delete mode 100644 fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/main/Application.java delete mode 100644 fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/main/TestTagger.java create mode 100644 fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/plugin/Activator.java create mode 100644 fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunch.java create mode 100644 fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTab.java create mode 100644 fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTabGroup.java create mode 100644 fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/plugin/EcoreFileFilter.java create mode 100644 fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/start/Start.java diff --git a/AB/src/somemmdeep/ADeepPImpl.java b/AB/src/somemmdeep/ADeepPImpl.java deleted file mode 100644 index 35081eb..0000000 --- a/AB/src/somemmdeep/ADeepPImpl.java +++ /dev/null @@ -1,278 +0,0 @@ -/** - */ - -package somemmdeep; - -import ab.A; -import ab.AbPackage; -import ab.B; -import java.util.Collection; -import org.eclipse.emf.common.notify.Notification; -import org.eclipse.emf.common.notify.NotificationChain; -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.InternalEObject; -import org.eclipse.emf.ecore.impl.ENotificationImpl; -import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; -import org.eclipse.emf.ecore.util.EObjectContainmentEList; -import org.eclipse.emf.ecore.util.InternalEList; - -/** - * - * An implementation of the model object 'A'. - * - *

- * The following features are implemented: - *

- *

- * @generated - */ -public class ADeepPImpl extends MinimalEObjectImpl.Container implements A { - protected A cloned; - /** - * The default value of the ' - * { @link #getI() I} - * ' attribute. - * - * - * @see #getI() - * @generated - * @ordered - */ - protected static final int I_EDEFAULT = 0; - /** - * The default value of the ' - * { @link #getJ_m() Jm} - * ' attribute. - * - * - * @see #getJ_m() - * @generated - * @ordered - */ - protected static final int JM_EDEFAULT = 0; - /** - * The cached value of the ' - * { @link #getJ_m() Jm} - * ' attribute. - * - * - * @see #getJ_m() - * @generated - * @ordered - */ - protected int j_m = JM_EDEFAULT; - /** - * The cached value of the ' - * { @link #getB() B} - * ' containment reference list. - * - * - * @see #getB() - * @generated - * @ordered - */ - protected EList b; - - /** - * - * - * @generated - */ - protected ADeepPImpl(A clonedParam) { - super(); - cloned = clonedParam; - } - - /** - * - * - * @generated - */ - @Override - protected EClass eStaticClass() { - return AbPackage.Literals.A; - } - - /** - * - * - * @generated - */ - public int getI() { - return cloned.getI(); - } - - /** - * - * - * @generated - */ - public void setI(int newI) { - System.out - .println("[Info] ADeepPImpl: i is readonly and cannot be set."); - } - - /** - * - * - * @generated - */ - public int getJ_m() { - return j_m; - } - - /** - * - * - * @generated - */ - public void setJ_m(int newJ_m) { - int oldJ_m = j_m; - j_m = newJ_m; - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, - AbPackage.A__JM, oldJ_m, j_m)); - - } - - /** - * - * - * @generated - */ - public EList getB() { - if (b == null) { - b = new EObjectContainmentEList(B.class, this, AbPackage.A__B); - } - - return b; - } - - /** - * - * - * @generated - */ - @Override - public NotificationChain eInverseRemove(InternalEObject otherEnd, - int featureID, NotificationChain msgs) { - switch (featureID) { - case AbPackage.A__B: - return ((InternalEList) getB()).basicRemove(otherEnd, msgs); - } - return super.eInverseRemove(otherEnd, featureID, msgs); - } - - /** - * - * - * @generated - */ - @Override - public Object eGet(int featureID, boolean resolve, boolean coreType) { - switch (featureID) { - case AbPackage.A__I: - return getI(); - case AbPackage.A__JM: - return getJ_m(); - case AbPackage.A__B: - return getB(); - } - return super.eGet(featureID, resolve, coreType); - } - - /** - * - * - * @generated - */ - @SuppressWarnings("unchecked") - @Override - public void eSet(int featureID, Object newValue) { - switch (featureID) { - case AbPackage.A__I: - setI((Integer) newValue); - return; - case AbPackage.A__JM: - setJ_m((Integer) newValue); - return; - case AbPackage.A__B: - getB().clear(); - getB().addAll((Collection) newValue); - return; - } - super.eSet(featureID, newValue); - } - - /** - * - * - * @generated - */ - @Override - public void eUnset(int featureID) { - switch (featureID) { - case AbPackage.A__I: - setI(I_EDEFAULT); - return; - case AbPackage.A__JM: - setJ_m(JM_EDEFAULT); - return; - case AbPackage.A__B: - getB().clear(); - return; - } - super.eUnset(featureID); - } - - /** - * - * - * @generated - */ - @Override - public boolean eIsSet(int featureID) { - switch (featureID) { - case AbPackage.A__I: - return cloned.getI() != I_EDEFAULT; - case AbPackage.A__JM: - return j_m != JM_EDEFAULT; - case AbPackage.A__B: - return b != null && !b.isEmpty(); - } - return super.eIsSet(featureID); - } - - /** - * - * - * @generated - */ - @Override - public String toString() { - if (eIsProxy()) - return super.toString(); - - StringBuffer result = new StringBuffer(super.toString()); - result.append(" (i: "); - result.append(cloned.getI()); - result.append(", j_m: "); - result.append(j_m); - result.append(')'); - return result.toString(); - } - -} -//AImpl - diff --git a/AB/src/somemmdeep/BDeepPImpl.java b/AB/src/somemmdeep/BDeepPImpl.java deleted file mode 100644 index 4b42c8e..0000000 --- a/AB/src/somemmdeep/BDeepPImpl.java +++ /dev/null @@ -1,157 +0,0 @@ -/** - */ - -package somemmdeep; - -import ab.AbPackage; -import ab.B; -import org.eclipse.emf.common.notify.Notification; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.impl.ENotificationImpl; -import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; - -/** - * - * An implementation of the model object 'B'. - * - *

- * The following features are implemented: - *

    - *
  • - * { @link ab.impl.BDeepPImpl#getX X} - *
  • - *
- *

- * @generated - */ -public class BDeepPImpl extends MinimalEObjectImpl.Container implements B { - protected B cloned; - /** - * The default value of the ' - * { @link #getX() X} - * ' attribute. - * - * - * @see #getX() - * @generated - * @ordered - */ - protected static final int X_EDEFAULT = 0; - - /** - * - * - * @generated - */ - protected BDeepPImpl(B clonedParam) { - super(); - cloned = clonedParam; - } - - /** - * - * - * @generated - */ - @Override - protected EClass eStaticClass() { - return AbPackage.Literals.B; - } - - /** - * - * - * @generated - */ - public int getX() { - return cloned.getX(); - } - - /** - * - * - * @generated - */ - public void setX(int newX) { - System.out - .println("[Info] BDeepPImpl: x is readonly and cannot be set."); - } - - /** - * - * - * @generated - */ - @Override - public Object eGet(int featureID, boolean resolve, boolean coreType) { - switch (featureID) { - case AbPackage.B__X: - return getX(); - } - return super.eGet(featureID, resolve, coreType); - } - - /** - * - * - * @generated - */ - @Override - public void eSet(int featureID, Object newValue) { - switch (featureID) { - case AbPackage.B__X: - setX((Integer) newValue); - return; - } - super.eSet(featureID, newValue); - } - - /** - * - * - * @generated - */ - @Override - public void eUnset(int featureID) { - switch (featureID) { - case AbPackage.B__X: - setX(X_EDEFAULT); - return; - } - super.eUnset(featureID); - } - - /** - * - * - * @generated - */ - @Override - public boolean eIsSet(int featureID) { - switch (featureID) { - case AbPackage.B__X: - return cloned.getX() != X_EDEFAULT; - } - return super.eIsSet(featureID); - } - - /** - * - * - * @generated - */ - @Override - public String toString() { - if (eIsProxy()) - return super.toString(); - - StringBuffer result = new StringBuffer(super.toString()); - result.append(" (x: "); - result.append(cloned.getX()); - result.append(')'); - return result.toString(); - } - -} -//BImpl - diff --git a/AB/src/somemmdeep/SomeMMDeepCloningMaterial.java b/AB/src/somemmdeep/SomeMMDeepCloningMaterial.java deleted file mode 100644 index 072e1e2..0000000 --- a/AB/src/somemmdeep/SomeMMDeepCloningMaterial.java +++ /dev/null @@ -1,28 +0,0 @@ -package somemmdeep; - -import fr.inria.diverse.cloning.cloner.common.CloningMaterial; -import fr.inria.diverse.cloning.cloner.emfextension.impl.LooseCopier; -import fr.inria.diverse.cloning.cloner.common.MetamodelTags; - -public class SomeMMDeepCloningMaterial implements CloningMaterial { - private static SomeMMDeepCloningMaterial instance; - private SomeMMDeepTags tags; - - private SomeMMDeepCloningMaterial(SomeMMDeepTags tags) { - this.tags = tags; - }; - - public static SomeMMDeepCloningMaterial getInstance() { - if (instance == null) - instance = new SomeMMDeepCloningMaterial(new SomeMMDeepTags()); - return instance; - } - - public MetamodelTags getTags() { - return tags; - } - - public LooseCopier createLightCopier() { - return new SomeMMDeepLightCopier(); - } -} diff --git a/AB/src/somemmdeep/SomeMMDeepLightCopier.java b/AB/src/somemmdeep/SomeMMDeepLightCopier.java deleted file mode 100644 index c682adf..0000000 --- a/AB/src/somemmdeep/SomeMMDeepLightCopier.java +++ /dev/null @@ -1,18 +0,0 @@ -package somemmdeep; - -import org.eclipse.emf.ecore.EObject; -import fr.inria.diverse.cloning.cloner.emfextension.impl.LooseCopier; -import ab.B; -import ab.A; - -@SuppressWarnings("serial") -public class SomeMMDeepLightCopier extends LooseCopier { - protected EObject createCopy(EObject eObject) { - if (eObject instanceof B) - return new BDeepPImpl((B) eObject); - if (eObject instanceof A) - return new ADeepPImpl((A) eObject); - else - return super.createCopy(eObject); - } -} diff --git a/AB/src/somemmdeep/SomeMMDeepTags.java b/AB/src/somemmdeep/SomeMMDeepTags.java deleted file mode 100644 index d5e5bc9..0000000 --- a/AB/src/somemmdeep/SomeMMDeepTags.java +++ /dev/null @@ -1,52 +0,0 @@ -package somemmdeep; - -import org.eclipse.emf.ecore.EClass; -import fr.inria.diverse.cloning.cloner.common.ClassTag; -import fr.inria.diverse.cloning.cloner.common.MetamodelTags; -import org.eclipse.emf.ecore.EStructuralFeature; -import ab.B; -import ab.A; - -public class SomeMMDeepTags implements MetamodelTags { - public ClassTag getTagOf(EClass eClass) { - if (eClass.equals(ab.AbPackage.eINSTANCE.getB())) - return ClassTag.PARTIALLY_SHAREABLE; - if (eClass.equals(ab.AbPackage.eINSTANCE.getA())) - return ClassTag.PARTIALLY_SHAREABLE; - else - return null; - } - - public boolean mayTagClassesShareable() { - return false; - } - - public boolean isPropertyShareable(EStructuralFeature prop) { - if (prop.equals(ab.AbPackage.eINSTANCE.getB_X())) - return true; - if (prop.equals(ab.AbPackage.eINSTANCE.getA_I())) - return true; - if (prop.equals(ab.AbPackage.eINSTANCE.getA_J_m())) - return false; - if (prop.equals(ab.AbPackage.eINSTANCE.getA_B())) - return false; - else - return false; - } - - public double getCompShareableClassesRatio() { - return 0.0; - } - - public double getPartShareableClassesRatio() { - return 1.0; - } - - public double getShareablePropertiesInShareableClassesRatio() { - return 0.5; - } - - public double getMeanShareablePropertiesInShareableClasses() { - return 1.0; - } -} diff --git a/AB/src/somemmmutclassonly/AMutClassOnlyPImpl.java b/AB/src/somemmmutclassonly/AMutClassOnlyPImpl.java deleted file mode 100644 index 07ebee2..0000000 --- a/AB/src/somemmmutclassonly/AMutClassOnlyPImpl.java +++ /dev/null @@ -1,264 +0,0 @@ -/** - */ - -package somemmmutclassonly; - -import ab.A; -import ab.AbPackage; -import ab.B; -import java.util.Collection; -import org.eclipse.emf.common.notify.Notification; -import org.eclipse.emf.common.notify.NotificationChain; -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.InternalEObject; -import org.eclipse.emf.ecore.impl.ENotificationImpl; -import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; -import org.eclipse.emf.ecore.util.EObjectContainmentEList; -import org.eclipse.emf.ecore.util.InternalEList; - -/** - * - * An implementation of the model object 'A'. - * - *

- * The following features are implemented: - *

    - *
  • - * { @link ab.impl.AMutClassOnlyPImpl#getI I} - *
  • - *
  • - * { @link ab.impl.AMutClassOnlyPImpl#getJ_m Jm} - *
  • - *
  • - * { @link ab.impl.AMutClassOnlyPImpl#getB B} - *
  • - *
- *

- * @generated - */ -public class AMutClassOnlyPImpl extends MinimalEObjectImpl.Container implements - A { - protected A cloned; - /** - * The default value of the ' - * { @link #getI() I} - * ' attribute. - * - * - * @see #getI() - * @generated - * @ordered - */ - protected static final int I_EDEFAULT = 0; - /** - * The default value of the ' - * { @link #getJ_m() Jm} - * ' attribute. - * - * - * @see #getJ_m() - * @generated - * @ordered - */ - protected static final int JM_EDEFAULT = 0; - /** - * The cached value of the ' - * { @link #getJ_m() Jm} - * ' attribute. - * - * - * @see #getJ_m() - * @generated - * @ordered - */ - protected int j_m = JM_EDEFAULT; - - /** - * - * - * @generated - */ - protected AMutClassOnlyPImpl(A clonedParam) { - super(); - cloned = clonedParam; - } - - /** - * - * - * @generated - */ - @Override - protected EClass eStaticClass() { - return AbPackage.Literals.A; - } - - /** - * - * - * @generated - */ - public int getI() { - return cloned.getI(); - } - - /** - * - * - * @generated - */ - public void setI(int newI) { - System.out - .println("[Info] AMutClassOnlyPImpl: i is readonly and cannot be set."); - } - - /** - * - * - * @generated - */ - public int getJ_m() { - return j_m; - } - - /** - * - * - * @generated - */ - public void setJ_m(int newJ_m) { - int oldJ_m = j_m; - j_m = newJ_m; - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, - AbPackage.A__JM, oldJ_m, j_m)); - - } - - /** - * - * - * @generated - */ - public EList getB() { - return cloned.getB(); - } - - /** - * - * - * @generated - */ - @Override - public NotificationChain eInverseRemove(InternalEObject otherEnd, - int featureID, NotificationChain msgs) { - switch (featureID) { - case AbPackage.A__B: - return ((InternalEList) getB()).basicRemove(otherEnd, msgs); - } - return super.eInverseRemove(otherEnd, featureID, msgs); - } - - /** - * - * - * @generated - */ - @Override - public Object eGet(int featureID, boolean resolve, boolean coreType) { - switch (featureID) { - case AbPackage.A__I: - return getI(); - case AbPackage.A__JM: - return getJ_m(); - case AbPackage.A__B: - return getB(); - } - return super.eGet(featureID, resolve, coreType); - } - - /** - * - * - * @generated - */ - @SuppressWarnings("unchecked") - @Override - public void eSet(int featureID, Object newValue) { - switch (featureID) { - case AbPackage.A__I: - setI((Integer) newValue); - return; - case AbPackage.A__JM: - setJ_m((Integer) newValue); - return; - case AbPackage.A__B: - getB().clear(); - getB().addAll((Collection) newValue); - return; - } - super.eSet(featureID, newValue); - } - - /** - * - * - * @generated - */ - @Override - public void eUnset(int featureID) { - switch (featureID) { - case AbPackage.A__I: - setI(I_EDEFAULT); - return; - case AbPackage.A__JM: - setJ_m(JM_EDEFAULT); - return; - case AbPackage.A__B: - getB().clear(); - return; - } - super.eUnset(featureID); - } - - /** - * - * - * @generated - */ - @Override - public boolean eIsSet(int featureID) { - switch (featureID) { - case AbPackage.A__I: - return cloned.getI() != I_EDEFAULT; - case AbPackage.A__JM: - return j_m != JM_EDEFAULT; - case AbPackage.A__B: - return cloned.getB() != null && !cloned.getB().isEmpty(); - } - return super.eIsSet(featureID); - } - - /** - * - * - * @generated - */ - @Override - public String toString() { - if (eIsProxy()) - return super.toString(); - - StringBuffer result = new StringBuffer(super.toString()); - result.append(" (i: "); - result.append(cloned.getI()); - result.append(", j_m: "); - result.append(j_m); - result.append(')'); - return result.toString(); - } - -} -//AImpl - diff --git a/AB/src/somemmmutclassonly/SomeMMMutClassOnlyCloningMaterial.java b/AB/src/somemmmutclassonly/SomeMMMutClassOnlyCloningMaterial.java deleted file mode 100644 index 051c0a9..0000000 --- a/AB/src/somemmmutclassonly/SomeMMMutClassOnlyCloningMaterial.java +++ /dev/null @@ -1,29 +0,0 @@ -package somemmmutclassonly; - -import fr.inria.diverse.cloning.cloner.common.CloningMaterial; -import fr.inria.diverse.cloning.cloner.emfextension.impl.LooseCopier; -import fr.inria.diverse.cloning.cloner.common.MetamodelTags; - -public class SomeMMMutClassOnlyCloningMaterial implements CloningMaterial { - private static SomeMMMutClassOnlyCloningMaterial instance; - private SomeMMMutClassOnlyTags tags; - - private SomeMMMutClassOnlyCloningMaterial(SomeMMMutClassOnlyTags tags) { - this.tags = tags; - }; - - public static SomeMMMutClassOnlyCloningMaterial getInstance() { - if (instance == null) - instance = new SomeMMMutClassOnlyCloningMaterial( - new SomeMMMutClassOnlyTags()); - return instance; - } - - public MetamodelTags getTags() { - return tags; - } - - public LooseCopier createLightCopier() { - return new SomeMMMutClassOnlyLightCopier(); - } -} diff --git a/AB/src/somemmmutclassonly/SomeMMMutClassOnlyLightCopier.java b/AB/src/somemmmutclassonly/SomeMMMutClassOnlyLightCopier.java deleted file mode 100644 index c428889..0000000 --- a/AB/src/somemmmutclassonly/SomeMMMutClassOnlyLightCopier.java +++ /dev/null @@ -1,18 +0,0 @@ -package somemmmutclassonly; - -import org.eclipse.emf.ecore.EObject; -import fr.inria.diverse.cloning.cloner.emfextension.impl.LooseCopier; -import ab.B; -import ab.A; - -@SuppressWarnings("serial") -public class SomeMMMutClassOnlyLightCopier extends LooseCopier { - protected EObject createCopy(EObject eObject) { - if (eObject instanceof B) - return eObject; - if (eObject instanceof A) - return new AMutClassOnlyPImpl((A) eObject); - else - return super.createCopy(eObject); - } -} diff --git a/AB/src/somemmmutclassonly/SomeMMMutClassOnlyTags.java b/AB/src/somemmmutclassonly/SomeMMMutClassOnlyTags.java deleted file mode 100644 index 1add411..0000000 --- a/AB/src/somemmmutclassonly/SomeMMMutClassOnlyTags.java +++ /dev/null @@ -1,52 +0,0 @@ -package somemmmutclassonly; - -import org.eclipse.emf.ecore.EClass; -import fr.inria.diverse.cloning.cloner.common.ClassTag; -import fr.inria.diverse.cloning.cloner.common.MetamodelTags; -import org.eclipse.emf.ecore.EStructuralFeature; -import ab.B; -import ab.A; - -public class SomeMMMutClassOnlyTags implements MetamodelTags { - public ClassTag getTagOf(EClass eClass) { - if (eClass.equals(ab.AbPackage.eINSTANCE.getB())) - return ClassTag.COMPLETELY_SHAREABLE; - if (eClass.equals(ab.AbPackage.eINSTANCE.getA())) - return ClassTag.PARTIALLY_SHAREABLE; - else - return null; - } - - public boolean mayTagClassesShareable() { - return true; - } - - public boolean isPropertyShareable(EStructuralFeature prop) { - if (prop.equals(ab.AbPackage.eINSTANCE.getB_X())) - return true; - if (prop.equals(ab.AbPackage.eINSTANCE.getA_I())) - return true; - if (prop.equals(ab.AbPackage.eINSTANCE.getA_J_m())) - return false; - if (prop.equals(ab.AbPackage.eINSTANCE.getA_B())) - return true; - else - return false; - } - - public double getCompShareableClassesRatio() { - return 0.5; - } - - public double getPartShareableClassesRatio() { - return 0.5; - } - - public double getShareablePropertiesInShareableClassesRatio() { - return 0.25; - } - - public double getMeanShareablePropertiesInShareableClasses() { - return 1.0; - } -} diff --git a/AB/src/yayabdeep/ADeepPImpl.java b/AB/src/yayabdeep/ADeepPImpl.java deleted file mode 100644 index 5597512..0000000 --- a/AB/src/yayabdeep/ADeepPImpl.java +++ /dev/null @@ -1,278 +0,0 @@ -/** - */ - -package yayabdeep; - -import ab.A; -import ab.AbPackage; -import ab.B; -import java.util.Collection; -import org.eclipse.emf.common.notify.Notification; -import org.eclipse.emf.common.notify.NotificationChain; -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.InternalEObject; -import org.eclipse.emf.ecore.impl.ENotificationImpl; -import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; -import org.eclipse.emf.ecore.util.EObjectContainmentEList; -import org.eclipse.emf.ecore.util.InternalEList; - -/** - * - * An implementation of the model object 'A'. - * - *

- * The following features are implemented: - *

    - *
  • - * { @link ab.impl.ADeepPImpl#getI I} - *
  • - *
  • - * { @link ab.impl.ADeepPImpl#getJ_m Jm} - *
  • - *
  • - * { @link ab.impl.ADeepPImpl#getB B} - *
  • - *
- *

- * @generated - */ -public class ADeepPImpl extends MinimalEObjectImpl.Container implements A { - protected A cloned; - /** - * The default value of the ' - * { @link #getI() I} - * ' attribute. - * - * - * @see #getI() - * @generated - * @ordered - */ - protected static final int I_EDEFAULT = 0; - /** - * The default value of the ' - * { @link #getJ_m() Jm} - * ' attribute. - * - * - * @see #getJ_m() - * @generated - * @ordered - */ - protected static final int JM_EDEFAULT = 0; - /** - * The cached value of the ' - * { @link #getJ_m() Jm} - * ' attribute. - * - * - * @see #getJ_m() - * @generated - * @ordered - */ - protected int j_m = JM_EDEFAULT; - /** - * The cached value of the ' - * { @link #getB() B} - * ' containment reference list. - * - * - * @see #getB() - * @generated - * @ordered - */ - protected EList b; - - /** - * - * - * @generated - */ - protected ADeepPImpl(A clonedParam) { - super(); - cloned = clonedParam; - } - - /** - * - * - * @generated - */ - @Override - protected EClass eStaticClass() { - return AbPackage.Literals.A; - } - - /** - * - * - * @generated - */ - public int getI() { - return cloned.getI(); - } - - /** - * - * - * @generated - */ - public void setI(int newI) { - System.out - .println("[Info] ADeepPImpl: i is readonly and cannot be set."); - } - - /** - * - * - * @generated - */ - public int getJ_m() { - return j_m; - } - - /** - * - * - * @generated - */ - public void setJ_m(int newJ_m) { - int oldJ_m = j_m; - j_m = newJ_m; - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, - AbPackage.A__JM, oldJ_m, j_m)); - - } - - /** - * - * - * @generated - */ - public EList getB() { - if (b == null) { - b = new EObjectContainmentEList(B.class, this, AbPackage.A__B); - } - - return b; - } - - /** - * - * - * @generated - */ - @Override - public NotificationChain eInverseRemove(InternalEObject otherEnd, - int featureID, NotificationChain msgs) { - switch (featureID) { - case AbPackage.A__B: - return ((InternalEList) getB()).basicRemove(otherEnd, msgs); - } - return super.eInverseRemove(otherEnd, featureID, msgs); - } - - /** - * - * - * @generated - */ - @Override - public Object eGet(int featureID, boolean resolve, boolean coreType) { - switch (featureID) { - case AbPackage.A__I: - return getI(); - case AbPackage.A__JM: - return getJ_m(); - case AbPackage.A__B: - return getB(); - } - return super.eGet(featureID, resolve, coreType); - } - - /** - * - * - * @generated - */ - @SuppressWarnings("unchecked") - @Override - public void eSet(int featureID, Object newValue) { - switch (featureID) { - case AbPackage.A__I: - setI((Integer) newValue); - return; - case AbPackage.A__JM: - setJ_m((Integer) newValue); - return; - case AbPackage.A__B: - getB().clear(); - getB().addAll((Collection) newValue); - return; - } - super.eSet(featureID, newValue); - } - - /** - * - * - * @generated - */ - @Override - public void eUnset(int featureID) { - switch (featureID) { - case AbPackage.A__I: - setI(I_EDEFAULT); - return; - case AbPackage.A__JM: - setJ_m(JM_EDEFAULT); - return; - case AbPackage.A__B: - getB().clear(); - return; - } - super.eUnset(featureID); - } - - /** - * - * - * @generated - */ - @Override - public boolean eIsSet(int featureID) { - switch (featureID) { - case AbPackage.A__I: - return cloned.getI() != I_EDEFAULT; - case AbPackage.A__JM: - return j_m != JM_EDEFAULT; - case AbPackage.A__B: - return b != null && !b.isEmpty(); - } - return super.eIsSet(featureID); - } - - /** - * - * - * @generated - */ - @Override - public String toString() { - if (eIsProxy()) - return super.toString(); - - StringBuffer result = new StringBuffer(super.toString()); - result.append(" (i: "); - result.append(cloned.getI()); - result.append(", j_m: "); - result.append(j_m); - result.append(')'); - return result.toString(); - } - -} -//AImpl - diff --git a/AB/src/yayabdeep/BDeepPImpl.java b/AB/src/yayabdeep/BDeepPImpl.java deleted file mode 100644 index e14c765..0000000 --- a/AB/src/yayabdeep/BDeepPImpl.java +++ /dev/null @@ -1,157 +0,0 @@ -/** - */ - -package yayabdeep; - -import ab.AbPackage; -import ab.B; -import org.eclipse.emf.common.notify.Notification; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.impl.ENotificationImpl; -import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; - -/** - * - * An implementation of the model object 'B'. - * - *

- * The following features are implemented: - *

    - *
  • - * { @link ab.impl.BDeepPImpl#getX X} - *
  • - *
- *

- * @generated - */ -public class BDeepPImpl extends MinimalEObjectImpl.Container implements B { - protected B cloned; - /** - * The default value of the ' - * { @link #getX() X} - * ' attribute. - * - * - * @see #getX() - * @generated - * @ordered - */ - protected static final int X_EDEFAULT = 0; - - /** - * - * - * @generated - */ - protected BDeepPImpl(B clonedParam) { - super(); - cloned = clonedParam; - } - - /** - * - * - * @generated - */ - @Override - protected EClass eStaticClass() { - return AbPackage.Literals.B; - } - - /** - * - * - * @generated - */ - public int getX() { - return cloned.getX(); - } - - /** - * - * - * @generated - */ - public void setX(int newX) { - System.out - .println("[Info] BDeepPImpl: x is readonly and cannot be set."); - } - - /** - * - * - * @generated - */ - @Override - public Object eGet(int featureID, boolean resolve, boolean coreType) { - switch (featureID) { - case AbPackage.B__X: - return getX(); - } - return super.eGet(featureID, resolve, coreType); - } - - /** - * - * - * @generated - */ - @Override - public void eSet(int featureID, Object newValue) { - switch (featureID) { - case AbPackage.B__X: - setX((Integer) newValue); - return; - } - super.eSet(featureID, newValue); - } - - /** - * - * - * @generated - */ - @Override - public void eUnset(int featureID) { - switch (featureID) { - case AbPackage.B__X: - setX(X_EDEFAULT); - return; - } - super.eUnset(featureID); - } - - /** - * - * - * @generated - */ - @Override - public boolean eIsSet(int featureID) { - switch (featureID) { - case AbPackage.B__X: - return cloned.getX() != X_EDEFAULT; - } - return super.eIsSet(featureID); - } - - /** - * - * - * @generated - */ - @Override - public String toString() { - if (eIsProxy()) - return super.toString(); - - StringBuffer result = new StringBuffer(super.toString()); - result.append(" (x: "); - result.append(cloned.getX()); - result.append(')'); - return result.toString(); - } - -} -//BImpl - diff --git a/AB/src/yayabdeep/YayABDeepCloningMaterial.java b/AB/src/yayabdeep/YayABDeepCloningMaterial.java deleted file mode 100644 index 7440b01..0000000 --- a/AB/src/yayabdeep/YayABDeepCloningMaterial.java +++ /dev/null @@ -1,22 +0,0 @@ -package yayabdeep; - -import fr.inria.diverse.cloning.runtime.common.CloningMaterial; -import fr.inria.diverse.cloning.runtime.emfextension.impl.LooseCopier; -import fr.inria.diverse.cloning.runtime.common.MetamodelTags; - -public class YayABDeepCloningMaterial implements CloningMaterial { -private static YayABDeepCloningMaterial instance; -private YayABDeepTags tags; -private YayABDeepCloningMaterial(YayABDeepTags tags){this.tags = tags; -}; -public static YayABDeepCloningMaterial getInstance() { -if (instance == null) -instance = new YayABDeepCloningMaterial(new YayABDeepTags()); -return instance; -} -public MetamodelTags getTags() { -return tags;} -public LooseCopier createLightCopier() { -return new YayABDeepLightCopier();} -} - diff --git a/AB/src/yayabdeep/YayABDeepLightCopier.java b/AB/src/yayabdeep/YayABDeepLightCopier.java deleted file mode 100644 index 3758eb7..0000000 --- a/AB/src/yayabdeep/YayABDeepLightCopier.java +++ /dev/null @@ -1,19 +0,0 @@ -package yayabdeep; - -import org.eclipse.emf.ecore.EObject; -import fr.inria.diverse.cloning.runtime.emfextension.impl.LooseCopier; -import ab.A; -import ab.B; - -@SuppressWarnings("serial") -public class YayABDeepLightCopier extends LooseCopier { -protected EObject createCopy(EObject eObject) { -if (eObject instanceof A) -return new ADeepPImpl((A)eObject); -if (eObject instanceof B) -return new BDeepPImpl((B)eObject); -else -return super.createCopy(eObject); -} -} - diff --git a/AB/src/yayabdeep/YayABDeepTags.java b/AB/src/yayabdeep/YayABDeepTags.java deleted file mode 100644 index ffc230b..0000000 --- a/AB/src/yayabdeep/YayABDeepTags.java +++ /dev/null @@ -1,49 +0,0 @@ -package yayabdeep; - -import org.eclipse.emf.ecore.EClass; -import fr.inria.diverse.cloning.runtime.common.ClassTag; -import fr.inria.diverse.cloning.runtime.common.MetamodelTags; -import org.eclipse.emf.ecore.EStructuralFeature; -import ab.A; -import ab.B; - -public class YayABDeepTags implements MetamodelTags { -public ClassTag getTagOf(EClass eClass) { -if (eClass.equals(ab.AbPackage.eINSTANCE.getA())) -return ClassTag.PARTIALLY_SHAREABLE; -if (eClass.equals(ab.AbPackage.eINSTANCE.getB())) -return ClassTag.PARTIALLY_SHAREABLE; -else -return null; -} -public boolean mayTagClassesShareable() { -return false;} -public boolean isPropertyShareable(EStructuralFeature prop) { -if (prop.equals(ab.AbPackage.eINSTANCE.getA_I())) -return true; -if (prop.equals(ab.AbPackage.eINSTANCE.getA_J_m())) -return false; -if (prop.equals(ab.AbPackage.eINSTANCE.getA_B())) -return false; -if (prop.equals(ab.AbPackage.eINSTANCE.getB_X())) -return true; -else -return false; -} -public double getShareableClassesRatio() { -return 0.0; -} -public double getPartShareableClassesRatio() { -return 1.0; -} -public double getIsolatedShareablePropertiesRatio() { -return 0.5; -} -public double getShareablePropertiesInPartShareableClassesDensity() { -return 1.0; -} -public double getShareablePropertiesInShareableClassesDensity() { -return 0.0; -} -} - diff --git a/AB/src/yayabmutclassonly/AMutClassOnlyPImpl.java b/AB/src/yayabmutclassonly/AMutClassOnlyPImpl.java deleted file mode 100644 index 8262639..0000000 --- a/AB/src/yayabmutclassonly/AMutClassOnlyPImpl.java +++ /dev/null @@ -1,264 +0,0 @@ -/** - */ - -package yayabmutclassonly; - -import ab.A; -import ab.AbPackage; -import ab.B; -import java.util.Collection; -import org.eclipse.emf.common.notify.Notification; -import org.eclipse.emf.common.notify.NotificationChain; -import org.eclipse.emf.common.util.EList; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.InternalEObject; -import org.eclipse.emf.ecore.impl.ENotificationImpl; -import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; -import org.eclipse.emf.ecore.util.EObjectContainmentEList; -import org.eclipse.emf.ecore.util.InternalEList; - -/** - * - * An implementation of the model object 'A'. - * - *

- * The following features are implemented: - *

    - *
  • - * { @link ab.impl.AMutClassOnlyPImpl#getI I} - *
  • - *
  • - * { @link ab.impl.AMutClassOnlyPImpl#getJ_m Jm} - *
  • - *
  • - * { @link ab.impl.AMutClassOnlyPImpl#getB B} - *
  • - *
- *

- * @generated - */ -public class AMutClassOnlyPImpl extends MinimalEObjectImpl.Container implements - A { - protected A cloned; - /** - * The default value of the ' - * { @link #getI() I} - * ' attribute. - * - * - * @see #getI() - * @generated - * @ordered - */ - protected static final int I_EDEFAULT = 0; - /** - * The default value of the ' - * { @link #getJ_m() Jm} - * ' attribute. - * - * - * @see #getJ_m() - * @generated - * @ordered - */ - protected static final int JM_EDEFAULT = 0; - /** - * The cached value of the ' - * { @link #getJ_m() Jm} - * ' attribute. - * - * - * @see #getJ_m() - * @generated - * @ordered - */ - protected int j_m = JM_EDEFAULT; - - /** - * - * - * @generated - */ - protected AMutClassOnlyPImpl(A clonedParam) { - super(); - cloned = clonedParam; - } - - /** - * - * - * @generated - */ - @Override - protected EClass eStaticClass() { - return AbPackage.Literals.A; - } - - /** - * - * - * @generated - */ - public int getI() { - return cloned.getI(); - } - - /** - * - * - * @generated - */ - public void setI(int newI) { - System.out - .println("[Info] AMutClassOnlyPImpl: i is readonly and cannot be set."); - } - - /** - * - * - * @generated - */ - public int getJ_m() { - return j_m; - } - - /** - * - * - * @generated - */ - public void setJ_m(int newJ_m) { - int oldJ_m = j_m; - j_m = newJ_m; - if (eNotificationRequired()) - eNotify(new ENotificationImpl(this, Notification.SET, - AbPackage.A__JM, oldJ_m, j_m)); - - } - - /** - * - * - * @generated - */ - public EList getB() { - return cloned.getB(); - } - - /** - * - * - * @generated - */ - @Override - public NotificationChain eInverseRemove(InternalEObject otherEnd, - int featureID, NotificationChain msgs) { - switch (featureID) { - case AbPackage.A__B: - return ((InternalEList) getB()).basicRemove(otherEnd, msgs); - } - return super.eInverseRemove(otherEnd, featureID, msgs); - } - - /** - * - * - * @generated - */ - @Override - public Object eGet(int featureID, boolean resolve, boolean coreType) { - switch (featureID) { - case AbPackage.A__I: - return getI(); - case AbPackage.A__JM: - return getJ_m(); - case AbPackage.A__B: - return getB(); - } - return super.eGet(featureID, resolve, coreType); - } - - /** - * - * - * @generated - */ - @SuppressWarnings("unchecked") - @Override - public void eSet(int featureID, Object newValue) { - switch (featureID) { - case AbPackage.A__I: - setI((Integer) newValue); - return; - case AbPackage.A__JM: - setJ_m((Integer) newValue); - return; - case AbPackage.A__B: - getB().clear(); - getB().addAll((Collection) newValue); - return; - } - super.eSet(featureID, newValue); - } - - /** - * - * - * @generated - */ - @Override - public void eUnset(int featureID) { - switch (featureID) { - case AbPackage.A__I: - setI(I_EDEFAULT); - return; - case AbPackage.A__JM: - setJ_m(JM_EDEFAULT); - return; - case AbPackage.A__B: - getB().clear(); - return; - } - super.eUnset(featureID); - } - - /** - * - * - * @generated - */ - @Override - public boolean eIsSet(int featureID) { - switch (featureID) { - case AbPackage.A__I: - return cloned.getI() != I_EDEFAULT; - case AbPackage.A__JM: - return j_m != JM_EDEFAULT; - case AbPackage.A__B: - return cloned.getB() != null && !cloned.getB().isEmpty(); - } - return super.eIsSet(featureID); - } - - /** - * - * - * @generated - */ - @Override - public String toString() { - if (eIsProxy()) - return super.toString(); - - StringBuffer result = new StringBuffer(super.toString()); - result.append(" (i: "); - result.append(cloned.getI()); - result.append(", j_m: "); - result.append(j_m); - result.append(')'); - return result.toString(); - } - -} -//AImpl - diff --git a/AB/src/yayabmutclassonly/YayABMutClassOnlyCloningMaterial.java b/AB/src/yayabmutclassonly/YayABMutClassOnlyCloningMaterial.java deleted file mode 100644 index d99e479..0000000 --- a/AB/src/yayabmutclassonly/YayABMutClassOnlyCloningMaterial.java +++ /dev/null @@ -1,22 +0,0 @@ -package yayabmutclassonly; - -import fr.inria.diverse.cloning.runtime.common.CloningMaterial; -import fr.inria.diverse.cloning.runtime.emfextension.impl.LooseCopier; -import fr.inria.diverse.cloning.runtime.common.MetamodelTags; - -public class YayABMutClassOnlyCloningMaterial implements CloningMaterial { -private static YayABMutClassOnlyCloningMaterial instance; -private YayABMutClassOnlyTags tags; -private YayABMutClassOnlyCloningMaterial(YayABMutClassOnlyTags tags){this.tags = tags; -}; -public static YayABMutClassOnlyCloningMaterial getInstance() { -if (instance == null) -instance = new YayABMutClassOnlyCloningMaterial(new YayABMutClassOnlyTags()); -return instance; -} -public MetamodelTags getTags() { -return tags;} -public LooseCopier createLightCopier() { -return new YayABMutClassOnlyLightCopier();} -} - diff --git a/AB/src/yayabmutclassonly/YayABMutClassOnlyLightCopier.java b/AB/src/yayabmutclassonly/YayABMutClassOnlyLightCopier.java deleted file mode 100644 index 0f3ef33..0000000 --- a/AB/src/yayabmutclassonly/YayABMutClassOnlyLightCopier.java +++ /dev/null @@ -1,19 +0,0 @@ -package yayabmutclassonly; - -import org.eclipse.emf.ecore.EObject; -import fr.inria.diverse.cloning.runtime.emfextension.impl.LooseCopier; -import ab.A; -import ab.B; - -@SuppressWarnings("serial") -public class YayABMutClassOnlyLightCopier extends LooseCopier { -protected EObject createCopy(EObject eObject) { -if (eObject instanceof A) -return new AMutClassOnlyPImpl((A)eObject); -if (eObject instanceof B) -return eObject; -else -return super.createCopy(eObject); -} -} - diff --git a/AB/src/yayabmutclassonly/YayABMutClassOnlyTags.java b/AB/src/yayabmutclassonly/YayABMutClassOnlyTags.java deleted file mode 100644 index 27e7b32..0000000 --- a/AB/src/yayabmutclassonly/YayABMutClassOnlyTags.java +++ /dev/null @@ -1,49 +0,0 @@ -package yayabmutclassonly; - -import org.eclipse.emf.ecore.EClass; -import fr.inria.diverse.cloning.runtime.common.ClassTag; -import fr.inria.diverse.cloning.runtime.common.MetamodelTags; -import org.eclipse.emf.ecore.EStructuralFeature; -import ab.A; -import ab.B; - -public class YayABMutClassOnlyTags implements MetamodelTags { -public ClassTag getTagOf(EClass eClass) { -if (eClass.equals(ab.AbPackage.eINSTANCE.getA())) -return ClassTag.PARTIALLY_SHAREABLE; -if (eClass.equals(ab.AbPackage.eINSTANCE.getB())) -return ClassTag.COMPLETELY_SHAREABLE; -else -return null; -} -public boolean mayTagClassesShareable() { -return true;} -public boolean isPropertyShareable(EStructuralFeature prop) { -if (prop.equals(ab.AbPackage.eINSTANCE.getA_I())) -return true; -if (prop.equals(ab.AbPackage.eINSTANCE.getA_J_m())) -return false; -if (prop.equals(ab.AbPackage.eINSTANCE.getA_B())) -return true; -if (prop.equals(ab.AbPackage.eINSTANCE.getB_X())) -return true; -else -return false; -} -public double getShareableClassesRatio() { -return 0.5; -} -public double getPartShareableClassesRatio() { -return 0.5; -} -public double getIsolatedShareablePropertiesRatio() { -return 0.5; -} -public double getShareablePropertiesInPartShareableClassesDensity() { -return 2.0; -} -public double getShareablePropertiesInShareableClassesDensity() { -return 1.0; -} -} - diff --git a/fr.inria.diverse.cloning.benchmark.materialgenerator/main.product b/fr.inria.diverse.cloning.benchmark.materialgenerator/main.product index 79d24d2..c100783 100644 --- a/fr.inria.diverse.cloning.benchmark.materialgenerator/main.product +++ b/fr.inria.diverse.cloning.benchmark.materialgenerator/main.product @@ -3,18 +3,16 @@ - - -Xms128m -Xmx3072m + -Xms128m -Xmx4096m -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts - @@ -22,12 +20,10 @@ - org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7 - diff --git a/fr.inria.diverse.cloning.benchmark.materialgenerator/src/fr/inria/diverse/cloning/benchmark/materialgenerator/main/Application.java b/fr.inria.diverse.cloning.benchmark.materialgenerator/src/fr/inria/diverse/cloning/benchmark/materialgenerator/main/Application.java index 91a6b54..46b23dd 100644 --- a/fr.inria.diverse.cloning.benchmark.materialgenerator/src/fr/inria/diverse/cloning/benchmark/materialgenerator/main/Application.java +++ b/fr.inria.diverse.cloning.benchmark.materialgenerator/src/fr/inria/diverse/cloning/benchmark/materialgenerator/main/Application.java @@ -29,9 +29,9 @@ import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.internal.core.ClasspathEntry; import fr.inria.diverse.cloning.benchmark.materialgenerator.generator.BenchmarkMaterialGenerator; -import fr.inria.diverse.cloning.benchmark.materialgenerator.generator.EMFCodeGenerator; import fr.inria.diverse.cloning.benchmark.materialgenerator.generator.ModelCreatorGenerator; import fr.inria.diverse.cloning.benchmark.materialgenerator.generator.OsgiBundleGenerator; +import fr.inria.diverse.cloning.materialgenerator.generators.EMFCodeGenerator; import fr.inria.diverse.cloning.materialgenerator.generators.PImplGenerator; import fr.inria.diverse.cloning.materialgenerator.tagger.Tagger; import fr.inria.diverse.cloning.materialgenerator.tagger.impl.DeepTagger; @@ -50,7 +50,7 @@ public class Application implements IApplication { * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext) */ public Object start(IApplicationContext context) throws Exception { - + Log.info("Starting cloning benchmark material generator."); String[] args = (String[]) context.getArguments().get(IApplicationContext.APPLICATION_ARGS); @@ -62,6 +62,10 @@ public class Application implements IApplication { .required().describedAs("path").ofType(File.class).required(); OptionSpec outputFileOption = parser.accepts("outputFile", "The OSGI jar bundle to create.") .withRequiredArg().required().describedAs("path").ofType(File.class).required(); + OptionSpec outputProjectFolderOption = parser + .accepts("outputProjectFolder", + "The folder in which all the code is generated, as a complete eclipse project. NO SPACE CHARACTERS /!\\.") + .withRequiredArg().describedAs("path").ofType(File.class); try { @@ -69,57 +73,64 @@ public class Application implements IApplication { OptionSet options = parser.parse(args); File metamodelsFolder = options.valueOf(metamodelsFolderOption); File outputFile = options.valueOf(outputFileOption); - - + File outputProjectFolder; + + // Creating the java project in which we put everything + if (options.has(outputProjectFolderOption)) { + outputProjectFolder = options.valueOf(outputProjectFolderOption); + } else { + outputProjectFolder = File.createTempFile("cloningBenchmarkMaterial", ""); + } + + File tmpDir = outputProjectFolder; + // Getting ecore files List> metamodelsFiles = new ArrayList<>(); List names = new ArrayList(); - for (File file : metamodelsFolder.listFiles()){ + for (File file : metamodelsFolder.listFiles()) { if (file.getName().endsWith(".ecore")) { - Log.info("Found "+file.getAbsolutePath()); + Log.info("Found " + file.getAbsolutePath()); Set files = new HashSet(); files.add(file); metamodelsFiles.add(files); names.add(file.getName().replace(".ecore", "")); } } - - - - // Creating the java project in which we put everything - File tmpDir = File.createTempFile("cloningBenchmarkMaterial", ""); - Log.info("Creating temporary project folder: "+tmpDir.getAbsolutePath()); + Log.info("Creating temporary project folder: " + tmpDir.getAbsolutePath()); tmpDir.delete(); tmpDir.mkdir(); IProjectDescription description = ResourcesPlugin.getWorkspace().newProjectDescription("yayProject"); + + // Problem with spaces? + + description.setLocationURI(java.net.URI.create(tmpDir.getAbsolutePath())); IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(description.getName()); project.delete(true, true, null); // to make sure that there is nothing there already project.create(description, null); project.open(null); - List metamodels = new ArrayList(); File srcFolder = new File(tmpDir, "src"); File binFolder = new File(tmpDir, "bin"); Log.enableProgress(metamodelsFiles.size()); - + // Iterating through metamodels an generating everything Iterator namesIt = names.iterator(); for (Set metamodel : metamodelsFiles) { - + String name = namesIt.next(); - - Log.info("Generating material for metamodel \""+name+"\""); + + Log.info("Generating material for metamodel \"" + name + "\""); Log.plusLevel(); Log.plusLevel(); - + Log.info("Calling EMF code generator..."); ResourceSet rs = EMFCodeGenerator.generate(metamodel, name, project); - + // Tagging Set taggers = new HashSet(); Tagger tagger = new MutClassesOnlyTagger(rs, name); @@ -128,17 +139,17 @@ public class Application implements IApplication { taggers.add(tagger2); metamodels.add(rs); - + PImplGenerator.generate(name, project, taggers, false); ModelCreatorGenerator.generateModelCreator(rs, name, srcFolder.getAbsolutePath()); Log.minusLevel(); Log.minusLevel(); - + Log.incProgress(); - + } Log.info("All metamodels have been processed."); - + Log.disableProgress(); Log.info("Generating benchmark material class."); @@ -165,12 +176,12 @@ public class Application implements IApplication { project.refreshLocal(IResource.DEPTH_INFINITE, null); project.build(IncrementalProjectBuilder.FULL_BUILD, null); - // Generating files a second time, in order to use the bin folder a a basis for the jar + // Generating files a second time, in order to use the bin folder as a basis for the jar OsgiBundleGenerator.generateComponentConf(binFolder); OsgiBundleGenerator.generateManifest(binFolder); // Creating the jar using the content of the bin folder - Log.info("Creating OSGI jar bundle: "+outputFile.getAbsolutePath()); + Log.info("Creating OSGI jar bundle: " + outputFile.getAbsolutePath()); OsgiBundleGenerator.createJar(binFolder, outputFile); Log.info("Done!"); diff --git a/fr.inria.diverse.cloning.benchmark.tool/META-INF/MANIFEST.MF b/fr.inria.diverse.cloning.benchmark.tool/META-INF/MANIFEST.MF index 4c27f51..e92a3e5 100644 --- a/fr.inria.diverse.cloning.benchmark.tool/META-INF/MANIFEST.MF +++ b/fr.inria.diverse.cloning.benchmark.tool/META-INF/MANIFEST.MF @@ -10,9 +10,7 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.mat.api;bundle-version="1.3.0", org.eclipse.mat.parser;bundle-version="1.3.0", org.eclipse.mat.hprof;bundle-version="1.3.0", - org.eclipse.mat.jdt;bundle-version="1.3.0", - org.eclipse.equinox.launcher;bundle-version="1.3.0" + org.eclipse.mat.jdt;bundle-version="1.3.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-ClassPath: ., lib/jopt-simple-4.6.jar -Bundle-ActivationPolicy: lazy diff --git a/fr.inria.diverse.cloning.benchmark.tool/main.product b/fr.inria.diverse.cloning.benchmark.tool/main.product new file mode 100644 index 0000000..7d6a9f3 --- /dev/null +++ b/fr.inria.diverse.cloning.benchmark.tool/main.product @@ -0,0 +1,217 @@ + + + + + + + + + + -Xms128m -Xmx2048m +-agentlib:jdwp=transport=dt_socket,server=y,suspend=n + -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fr.inria.diverse.cloning.benchmark.tool/plugin.xml b/fr.inria.diverse.cloning.benchmark.tool/plugin.xml index 4b0cdeb..a99cb2c 100644 --- a/fr.inria.diverse.cloning.benchmark.tool/plugin.xml +++ b/fr.inria.diverse.cloning.benchmark.tool/plugin.xml @@ -11,5 +11,18 @@ + + + + + + + diff --git a/fr.inria.diverse.cloning.benchmark.tool/runtime-BenchmarkTool/.metadata/.log b/fr.inria.diverse.cloning.benchmark.tool/runtime-BenchmarkTool/.metadata/.log new file mode 100644 index 0000000..44ceab4 --- /dev/null +++ b/fr.inria.diverse.cloning.benchmark.tool/runtime-BenchmarkTool/.metadata/.log @@ -0,0 +1,10 @@ +!SESSION 2014-03-10 21:15:31.638 ----------------------------------------------- +eclipse.buildId=unknown +java.version=1.7.0_51 +java.vendor=Oracle Corporation +BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=fr_FR +Framework arguments: -application fr.inria.diverse.cloning.benchmark.tool.application --benchmarkMetamodels=/home/ebousse/Documents/Thèse/2014-02 Models paper/benchmarks/big1/bundle9.jar --metamodels=mm8 --nbClones 1000 --nbtries 50 --outputFile=/tmp/results.csv +Command-line arguments: -application fr.inria.diverse.cloning.benchmark.tool.application -data /home/ebousse/Dev/modelCloning/emf/fr.inria.diverse.cloning.benchmark.tool/runtime-BenchmarkTool -dev file:/home/ebousse/Dev/modelCloning/emf/.metadata/.plugins/org.eclipse.pde.core/BenchmarkTool/dev.properties -os linux -ws gtk -arch x86_64 -consoleLog --benchmarkMetamodels=/home/ebousse/Documents/Thèse/2014-02 Models paper/benchmarks/big1/bundle9.jar --metamodels=mm8 --nbClones 1000 --nbtries 50 --outputFile=/tmp/results.csv + +!ENTRY org.eclipse.osgi 2 1 2014-03-10 21:15:32.803 +!MESSAGE NLS unused message: line_separator_platform_mac_os_9 in: org.eclipse.core.internal.runtime.messages diff --git a/fr.inria.diverse.cloning.benchmark.tool/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version b/fr.inria.diverse.cloning.benchmark.tool/runtime-BenchmarkTool/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version similarity index 100% rename from fr.inria.diverse.cloning.benchmark.tool/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version rename to fr.inria.diverse.cloning.benchmark.tool/runtime-BenchmarkTool/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version diff --git a/fr.inria.diverse.cloning.benchmark.tool/runtime-data/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs b/fr.inria.diverse.cloning.benchmark.tool/runtime-BenchmarkTool/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from fr.inria.diverse.cloning.benchmark.tool/runtime-data/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs rename to fr.inria.diverse.cloning.benchmark.tool/runtime-BenchmarkTool/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs diff --git a/fr.inria.diverse.cloning.benchmark.tool/runtime-data/.metadata/.log b/fr.inria.diverse.cloning.benchmark.tool/runtime-data/.metadata/.log deleted file mode 100644 index fb0e17d..0000000 --- a/fr.inria.diverse.cloning.benchmark.tool/runtime-data/.metadata/.log +++ /dev/null @@ -1,10 +0,0 @@ -!SESSION 2014-03-10 08:42:50.380 ----------------------------------------------- -eclipse.buildId=unknown -java.version=1.7.0_51 -java.vendor=Oracle Corporation -BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=fr_FR -Framework arguments: -application fr.inria.diverse.cloning.benchmark.tool.application --benchmarkMetamodels=/home/ebousse/Documents/Thèse/2014-02 Models paper/benchmarks/4/bundle.jar --outputFile=/home/ebousse/Documents/Thèse/2014-02 Models paper/benchmarks/4/results.csv --nbtries=5 --nbClones=1,10,100 -Command-line arguments: -application fr.inria.diverse.cloning.benchmark.tool.application -data /home/ebousse/Dev/modelCloning/emf/fr.inria.diverse.cloning.benchmark.tool/runtime-data -dev file:/home/ebousse/Dev/modelCloning/emf/.metadata/.plugins/org.eclipse.pde.core/Run BenchmarkTool/dev.properties -os linux -ws gtk -arch x86_64 -consoleLog --benchmarkMetamodels=/home/ebousse/Documents/Thèse/2014-02 Models paper/benchmarks/4/bundle.jar --outputFile=/home/ebousse/Documents/Thèse/2014-02 Models paper/benchmarks/4/results.csv --nbtries=5 --nbClones=1,10,100 - -!ENTRY org.eclipse.osgi 2 1 2014-03-10 08:42:53.234 -!MESSAGE NLS unused message: line_separator_platform_mac_os_9 in: org.eclipse.core.internal.runtime.messages diff --git a/fr.inria.diverse.cloning.benchmark.tool/src/benchmark/Benchmark.java b/fr.inria.diverse.cloning.benchmark.tool/src/benchmark/Benchmark.java index ec8c846..accc243 100644 --- a/fr.inria.diverse.cloning.benchmark.tool/src/benchmark/Benchmark.java +++ b/fr.inria.diverse.cloning.benchmark.tool/src/benchmark/Benchmark.java @@ -1,6 +1,7 @@ package benchmark; import java.io.File; +import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -24,14 +25,31 @@ public class Benchmark { private static int counter = 2; // starts at two to match the CSV lines private double originalModelPerformance; + private File dumpsfolder; + private boolean keepDumps; ModelCreator modelCreator; + + /** + * https://stackoverflow.com/a/779529 + * @param f + * @throws IOException + */ + private static void delete(File f){ + if (f.isDirectory()) { + for (File c : f.listFiles()) + delete(c); + } + f.delete(); + } - public Benchmark(ModelCreator modelCreator) { + public Benchmark(ModelCreator modelCreator, File dumpsfolder, boolean keepDumps) { originalModelPerformance = -1; this.modelCreator = modelCreator; + this.dumpsfolder = dumpsfolder; + this.keepDumps = keepDumps; } - private static int computeSizeModels(File folder) { + private static int computeSizeModels(File folder, boolean keepDumps) { Log.info("Dumping memory..."); File dumpFile = new File(folder, "dump_" + dateFormat.format(new Date()) + ".bin"); dumpFile.delete(); @@ -50,8 +68,8 @@ public class Benchmark { Cloner cloner = new ClonerImpl(cloningMaterial); // Preparing "output folder", just for the URI of the clones - File tmpFolder = new File("/tmp/bleh"); - tmpFolder = new File("/tmp2/clone" + (counter++)); // TODO change this hardcoded path!! +// File tmpFolder = new File("/tmp/bleh"); + File tmpFolder = new File(dumpsfolder,"clone" + (counter++)); // TODO change this hardcoded path!! tmpFolder.delete(); tmpFolder.mkdirs(); @@ -72,17 +90,19 @@ public class Benchmark { } // Echauffement - // for (int i = 0; i < numberOfClones; i++) - // cloner.clone(model, tmpFolder, light); + for (int i = 0; i < 1000; i++) + cloner.clone(model, tmpFolder, light); // Cloning "numberOfClones" times and computing time Log.info("Cloning (" + numberOfClones + " clones)..."); List clones = new ArrayList<>(); - long timeBegin = System.currentTimeMillis(); + + long timeBegin = System.nanoTime(); for (int i = 0; i < numberOfClones; i++) clones.add(cloner.clone(model, tmpFolder, light)); - long timeEnd = System.currentTimeMillis(); - + long timeEnd = System.nanoTime(); + long timeSpent = (timeEnd - timeBegin)/1000000; + // Computing read performance for a clone long cloneModelPerformance = -1; if (computePerformance) { @@ -95,14 +115,16 @@ public class Benchmark { int size = -1; if (computeMemory) { //Log.info("Computing memory footprint... "); - size = computeSizeModels(tmpFolder); + size = computeSizeModels(tmpFolder, keepDumps); } // Preparing results object - long timeSpent = (timeEnd - timeBegin); BenchmarkResults benchmarkResults = new BenchmarkResults(size, timeSpent, originalModelPerformance, cloneModelPerformance); + if (!keepDumps) + delete(tmpFolder); + return benchmarkResults; } diff --git a/fr.inria.diverse.cloning.benchmark.tool/src/benchmark/BenchmarkResults.java b/fr.inria.diverse.cloning.benchmark.tool/src/benchmark/BenchmarkResults.java index e4463b2..4cc611a 100644 --- a/fr.inria.diverse.cloning.benchmark.tool/src/benchmark/BenchmarkResults.java +++ b/fr.inria.diverse.cloning.benchmark.tool/src/benchmark/BenchmarkResults.java @@ -5,21 +5,18 @@ import java.util.Collection; public class BenchmarkResults { private int usedMemory; - // private double originalModelSize; private double timeSpent; private double originalModelPerformance; private double cloneModelPerformance; public static BenchmarkResults combineResults(Collection results) { int memory = 0; - // double originalModelMemory = 0; double meanTime = 0; int nbPerformanceMeasures = 0; double meanOriginPerformance = 0; double meanClonePerformance = 0; for (BenchmarkResults aResult : results) { memory = Math.max(memory, aResult.getUsedMemory()); - // originalModelMemory = Math.max(originalModelMemory,aResult.getOriginalModelSize()); meanTime += aResult.getTimeSpent(); if (aResult.getOriginalModelPerformance() != -1) { nbPerformanceMeasures++; @@ -28,8 +25,6 @@ public class BenchmarkResults { } } - - if (nbPerformanceMeasures == 0) nbPerformanceMeasures = 1; @@ -42,7 +37,6 @@ public class BenchmarkResults { super(); this.usedMemory = usedMemory; this.timeSpent = timeSpent2; - // this.originalModelSize = originalModelSize; this.originalModelPerformance = originalModelPerformance; this.cloneModelPerformance = cloneModelPerformance; } @@ -51,9 +45,6 @@ public class BenchmarkResults { return usedMemory; } - // public double getOriginalModelSize() { - // return originalModelSize; - // } public double getTimeSpent() { return timeSpent; diff --git a/fr.inria.diverse.cloning.benchmark.tool/src/benchmark/Performance.java b/fr.inria.diverse.cloning.benchmark.tool/src/benchmark/Performance.java index d65706f..750fa31 100644 --- a/fr.inria.diverse.cloning.benchmark.tool/src/benchmark/Performance.java +++ b/fr.inria.diverse.cloning.benchmark.tool/src/benchmark/Performance.java @@ -22,17 +22,17 @@ public class Performance { } - long timeBegin = System.currentTimeMillis(); + long timeBegin = System.nanoTime(); // We find each "root" of each resource, and start the read operation - for (int i = 0; i < 10000; i++) { + for (int i = 0; i < 20000; i++) { for (Resource r : model.getResources()) { for (EObject o : r.getContents()) { readAllAndPropagate(o); } } } - long timeEnd = System.currentTimeMillis(); - long timeSpent = (timeEnd - timeBegin); + long timeEnd = System.nanoTime(); + long timeSpent = (timeEnd - timeBegin)/1000000; return timeSpent; } diff --git a/fr.inria.diverse.cloning.benchmark.tool/src/main/Application.java b/fr.inria.diverse.cloning.benchmark.tool/src/main/Application.java index 3557e88..88e5950 100644 --- a/fr.inria.diverse.cloning.benchmark.tool/src/main/Application.java +++ b/fr.inria.diverse.cloning.benchmark.tool/src/main/Application.java @@ -12,6 +12,7 @@ import joptsimple.OptionSpec; import org.eclipse.equinox.app.IApplication; import org.eclipse.equinox.app.IApplicationContext; +import org.osgi.framework.BundleException; import benchmark.Benchmark; import benchmark.BenchmarkResults; @@ -49,35 +50,76 @@ public class Application implements IApplication { .withValuesSeparatedBy(",").required(); OptionSpec outputFileOption = parser.accepts("outputFile", "The CSV file to write.").withRequiredArg() .required().describedAs("path").ofType(File.class).required(); + OptionSpec keepDumpsOption = parser.accepts("keepDumps", "To keep memory dumps."); + OptionSpec dumpsFolderOption = parser + .accepts("dumpsFolder", "A folder in which memory dumps will be written.").withRequiredArg() + .describedAs("path").ofType(File.class); OptionSpec nbtriesOption = parser .accepts("nbtries", "The number of tries, for better time/performance results").withRequiredArg() .required().ofType(Integer.class).required(); OptionSpec nbClonesOption = parser.accepts("nbClones", "Series of numbers of clones to create.") .withRequiredArg().required().describedAs("1,10,100...").ofType(Integer.class) .withValuesSeparatedBy(",").required(); + OptionSpec metamodelsOption = parser.accepts("metamodels", "Specific metamodels to use.") + .withRequiredArg().ofType(String.class).withValuesSeparatedBy(","); + OptionSpec shareFieldsOption = parser.accepts("shareFields", "Enforces shareFields.") + .withRequiredArg().ofType(Boolean.class); + OptionSpec shareObjectsOption = parser.accepts("shareObjects", "Enforces shareObjects.") + .withRequiredArg().ofType(Boolean.class); try { // Parsing arguments (throws an error if problem) OptionSet options = parser.parse(args); - // In both cases, we need the benchmark material List bundles = options.valuesOf(benchmarkMetamodelsOption); File outputFile = options.valueOf(outputFileOption); List nbClones = options.valuesOf(nbClonesOption); Integer nbtries = options.valueOf(nbtriesOption); + + boolean enforceMetamodels = options.has(metamodelsOption); + List enforcedMetamodels = null; + if (enforceMetamodels) + enforcedMetamodels = options.valuesOf(metamodelsOption); + + boolean enforceShareFields = options.has(shareFieldsOption); + boolean shareFields = true; + if (enforceShareFields) + shareFields = options.valueOf(shareFieldsOption); + + boolean enforceShareObjects = options.has(shareObjectsOption); + boolean shareObjects = true; + if (enforceShareObjects) + shareObjects = options.valueOf(shareObjectsOption); + + File dumpsFolder; + if (options.has(dumpsFolderOption)) { + dumpsFolder = options.valueOf(dumpsFolderOption); + } else { + dumpsFolder = File.createTempFile("cloneDumps", ""); + dumpsFolder.delete(); + dumpsFolder.mkdirs(); + } + + boolean keepDumps = options.has(keepDumpsOption); Log.info("Starting benchmark tool"); CSVFile csv = new CSVFile(outputFile); boolean[] lightNot = { false, true }; // ne pas toucher à l'ordre pour le plot R + + if (enforceShareFields) { + lightNot = new boolean[1]; + lightNot[0] = shareFields; + } // To display numbers consistently with CSV line numbers int counter = 2; boolean progressSetUp = false; + int bundleCounter = 1; for (File bundle : bundles) { BenchmarkMaterial material = BundleLoader.loadBundle(bundle); @@ -90,12 +132,33 @@ public class Application implements IApplication { progressSetUp = true; } - for (String name : material.getMetamodelsName()) { + //Processing argument that enforces specific metamodels + List metamodels = new ArrayList(); + metamodels.addAll(material.getMetamodelsName()); + if(enforceMetamodels) + metamodels.retainAll(enforcedMetamodels); + + + for (String name : metamodels) { - Benchmark benchmark = new Benchmark(material.getModelCreator(name)); + Benchmark benchmark = new Benchmark(material.getModelCreator(name), dumpsFolder, keepDumps); benchmark.computeOriginalModelPerformance(material.getCloningMaterial(name, "Deep"), nbtries); - for (String cloning : material.getCloningNames()) { + + + //Processing argument that enforces specific clonings (shareobject) + List clonings = new ArrayList(); + clonings.addAll(material.getCloningNames()); + if(enforceShareObjects) { + clonings.clear(); + if (shareObjects) + clonings.add("MutClassOnly"); + else + clonings.add("Deep"); + } + + + for (String cloning : clonings) { for (boolean light : lightNot) { boolean computePerformance = true; @@ -137,10 +200,10 @@ public class Application implements IApplication { MetamodelTags tags = cloningMaterial.getTags(); MetamodelTags tags2 = cloningMaterial2.getTags(); - csv.addLine(number, name, results.getUsedMemory(), results.getTimeSpent(), cloning, - "default", lightString, results.getOriginalModelPerformance(), - results.getCloneModelPerformance(), tags.getShareableClassesRatio(), - tags.getPartShareableClassesRatio(), + csv.addLine(number, "bundle" + bundleCounter + "-" + name, results.getUsedMemory(), + results.getTimeSpent(), cloning, "default", lightString, + results.getOriginalModelPerformance(), results.getCloneModelPerformance(), + tags.getShareableClassesRatio(), tags.getPartShareableClassesRatio(), tags.getIsolatedShareablePropertiesRatio(), tags.getShareablePropertiesInPartShareableClassesDensity(), tags.getShareablePropertiesInShareableClassesDensity(), @@ -156,6 +219,8 @@ public class Application implements IApplication { } } } + bundleCounter++; + BundleLoader.uninstallBundle(); } // csv.writeToFile(outputFile); Log.info("Exiting benchmark tool"); @@ -174,6 +239,12 @@ public class Application implements IApplication { * @see org.eclipse.equinox.app.IApplication#stop() */ public void stop() { + try { + BundleLoader.uninstallBundle(); + } catch (BundleException e) { + // TODO Bloc catch généré automatiquement + e.printStackTrace(); + } // nothing to do } diff --git a/fr.inria.diverse.cloning.benchmark.tool/src/main/BundleLoader.java b/fr.inria.diverse.cloning.benchmark.tool/src/main/BundleLoader.java index 6292c4a..897b2e6 100644 --- a/fr.inria.diverse.cloning.benchmark.tool/src/main/BundleLoader.java +++ b/fr.inria.diverse.cloning.benchmark.tool/src/main/BundleLoader.java @@ -18,9 +18,7 @@ public class BundleLoader { public static BenchmarkMaterial loadBundle(File bundleJar) throws BundleException { - if (currentBundle != null) - currentBundle.uninstall(); - + // Getting bundlecontext, to install other bundles BundleContext bundleContext = InternalPlatform.getDefault().getBundleContext(); @@ -35,4 +33,9 @@ public class BundleLoader { return material; } + public static void uninstallBundle() throws BundleException { + if (currentBundle != null) + currentBundle.uninstall(); + } + } diff --git a/fr.inria.diverse.cloning.benchmark.tool/src/memoryanalysis/MemoryAnalyzer.java b/fr.inria.diverse.cloning.benchmark.tool/src/memoryanalysis/MemoryAnalyzer.java index 33c6c9f..fe169ef 100644 --- a/fr.inria.diverse.cloning.benchmark.tool/src/memoryanalysis/MemoryAnalyzer.java +++ b/fr.inria.diverse.cloning.benchmark.tool/src/memoryanalysis/MemoryAnalyzer.java @@ -39,6 +39,9 @@ public class MemoryAnalyzer { // estimations } } + + SnapshotFactory.dispose(snapshot); + } catch (SnapshotException e) { System.err.println("Error while computing memory consumption!"); e.printStackTrace(); diff --git a/fr.inria.diverse.cloning.benchmark.tool/target/classes/benchmark/Benchmark.class b/fr.inria.diverse.cloning.benchmark.tool/target/classes/benchmark/Benchmark.class index 11836e6e94afe59666c7c8f6fd6ceb19e374adfc..394e594f1677c3bd00a9d3c08909b3664b7d9eab 100644 GIT binary patch literal 5386 zcmbVQ30Pd!89kR7c*Eln!myZ$U}-dwnUI+n70iHW0!E+^Vu*?0`WPPYl38$OP!reM z)FoDJ?P6osw6^JDTbBfgw8rk$E?>Vc+S+~5+G<;CH`_+(xp&?$OcK-xAMf3Fm;e6D z`Op0?kH7NpBLGenLPLQ-#h?|BjK<95w$R#aOM_cr;a2ksGZZ!BBca~GtyUy0pbwd8 zYh5B4Gx<^7ttO&%b=oDC#NZKQI+>G`lhOFoYD>*FJ$0HVp z+XYI7#$#it;Y4&uE?AI}X(vMK?5IUq#oH`vtX)pw^Z@}QCZ)6`Ei;|q{4=_TlOa2v zw9U|veT9`wS)oWY5x1#x&a6lx7E8oKYJX=XC3{*TQ9Ev@TLoP8{>=jJHj36zC9pVW zSf3pmi&{DJJUEU^J33axVk=T99hLAISd8NZidr0LRrMJol;`@=Nh;Iq-&_oVS_6eB zlC3ux(BKg$>$c<8`tjJHmE2?wM(Go8cOqg&H=8tx-%e){ZMM=JEq7#R9pvAvV<}G7 zu#B!zT00{K>fxt%?Nqy+Wb6{j?aIypIe)o<2CSfSqjoAS9Zlz!*ZVKbcfL+NLk5=M zM7ib^*`h=-%)f|0XTXgUR!k0hN zk!Kow>9Tc}fif(Vtu+QpV8~XRfl@4BXw#!MZLI3ffnpZxghDwHGB%#J`s^K+LJ8-3 z5A*bZztaQ4xm<#gA+3v9F*-FE4C;6bdNgzk_~!*z>%((6N za6-cdf#Y(?mVwOLaa*Q@2O9+nWsY2`qZd96=QB&xWF<=?Q^zK()^Py_H1rEp=FpqN zt$_=15kabwkI8$IW8SQgX8)0>l{;Qy;8I-1mFC!(6(15|DM*r9>BS$mjr zJqliHq^>)xq=Bn(4T;GC>P9PVk~oGWV0(w#qGpPS%{po>@8qYEpZFyLGE}R~mC4We zq$r2!1urY>zoM&tJ7<5sv%64?6;+>Q4WYQ(4$ zwTe9atIlQ}_uzvXK0q+%Xh97b_z*tKbC~Nlkbcb(hOH`3g40bIAH~Ns>>*?2WH^Hc zJ}xswqm=b#jK25;_G|l5rlgf&QGp;;V^)NmtOzkH z*k)FQvRM(DlMp0}&+^D=Q)DbNY%EtS)Fp;h!extzI^}7m9{u_`d_lwK>4=rBLB^86QB4rEbV@4+Li9qLr3r2O=_1%Vg|l}ZxZlvGoIMQ6HpZ)T_t!7-`4PW-ccsS8Tbyq%Q@x{Pnx_! zDpP_s`v(fu*?zUN?;)TLs{Q*Pz!P+=|4)v1~EkdYEo4$6{wI&%poW=ZU%@X!xH%(`&QD zQPIJ}$BB8Cua0!UnQ#2y?37^E;)7IF;!W>U^-QL8STLIkLCFqyGjqnp3@u_Z@UFv_ zE^j(~7sx_gy;+>AH%oKAAyesA?87CnTT!iR9e0~{Y(MBL3DNfr%(37oVWOZW=(hux2~y3X8-GM~FBG*%CO7W3_P2 zpbCW=YX^DDJ{>5T;S4sHa+p+tCP&FDxt*JR#|I{HMxYYm{b&g+-;dTn!+x9{sNIjX zIg2wot>A(nZ#W^kZ6&ukh2mBzodOwAXvaAeNukQMLbasRrH77}HzIDTOI~x7c#u{~ zCAz#FQ|Ow;(*D3Sdi%ZSO``8X)J$Vj|0Fg~V9Nw9_L_W5ATo)Oo(AbMKDN525c8(E z);r!Xg)3WY@1wL#l$J5wDoyUfNo=y*_Y#`Vvqz`&Tk&W7g{`Nt6Mw}EOwniQBRN`1J1)ZC*jGwx&clmrmC>ed{GF|G zT6CI%bp`Dx!$0s({$J@|v_cX}M()2US5nJX6u%)C{xQ55vG`)I;Au5}HirY;O9D-LILY>BnM)2e1Op4)g`b3gxH-R9bzh1%J z)#%=f%0NGXvO?lMLg4Roiz;``o|)%Wcg@X-d6OYWwoB+E;3htAVao4f>~3Qecaaco zC!+4)KUnTmQ9UiALpG}PpA%KKUg7Ej{i_@% literal 4897 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%0AM2#%IwHR9tZpHMsr(^ad92 diff --git a/fr.inria.diverse.cloning.benchmark.tool/target/classes/main/Application.class b/fr.inria.diverse.cloning.benchmark.tool/target/classes/main/Application.class index 64d50f218bbe67af2e137aa7d0eb089cb5e0544d..aedc901cb15fa26716db301242ed5e7eb8fd54f3 100644 GIT binary patch literal 11266 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 VGw~75wNjVIc@HCBV%H^4{T1JA^85e* literal 8635 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 diff --git a/fr.inria.diverse.cloning.benchmark.tool/target/classes/main/BundleLoader.class b/fr.inria.diverse.cloning.benchmark.tool/target/classes/main/BundleLoader.class index a27990f027668be27e8a29b460e52e7c478b3373..80c907548be0083e00bc53df6500731e47389612 100644 GIT binary patch delta 612 zcmX|-%T7~K6o$WjdO5vpT0;XBP%a7udWy$Vtkt4IK?E(;Vo^sXO>CN)V@Ygr$}^DT zGdLDW8tcF~GRCPR6Q96|PvB)yke%$c*8cy0t@UUB?)wr6ef{&{Baq?AL8z?4AqF{X z5?9Q-ztp@>GsLj_L#+n}Ij1?#sGBkt%i~-ynNaBG)mK%!v16|_oSNn$lL}vZXM1Zy zab{+=*rS`Zwk=3LM1mQU>HlpfxMr55+chSGDK44JDaKvpjqN}6yMK+K$L6vd_7nz! zh$oE?f0zZbCRY?gC&HNKDgjyDYFA&jO|B{O`#?NaqcEli3f%`ye|o2L>;v8uVv+M(^Ot3-6S*=WjS$0_VKpE)94;Gw2+v@v+f zxvzbz%Hw|bRrcOs;FV9!y=S1qNYP4m80#?A#WFY~{f=~(jKb>Ab-3Q;mcgc#>at?+ ziCk&!t@L`(5{L0ijAKd_XM{0Eu_R`hpih|O@gDB5E-#Zb8{FNKpR$C$M^TJqlJjWyA*(HP@DG5!RNFB5ffPu`sKew>{9HTi2a{_XdNPe74JZ{rO$7DF+vaTrN( zk_nfz$=K5qr-&+I&$^v%ukQyzoGDJbOe+dzUlklph8go(ZA7P-)6BDAeyWwmS(aQD z75cIN-1jTeOPXs(ULEoIwC}QFYW8aW2CFVN701F$f!}R=Yk}YE zX>O5Mxb0TI?muZIB!)H3I=9V7yBRHVN3+4^K|0b_=8aQPmigf{Uw+0SBAHd+k@`YH zaL5V8dnO0W*0Re3&I~v=q+oGCDwMA(vSZ}|*N0RrwzHyEEef)<=5Dwtw~ zagwB^nq)ze&Plo@X2jPVqtK85!}Hu_D;&sEV_QD1Byyd5VsBmEed)B>kq-S|dmwyM O7#o!oa#u==hkpQ)99(n& diff --git a/fr.inria.diverse.cloning.benchmark.tool/target/classes/memoryanalysis/MemoryAnalyzer.class b/fr.inria.diverse.cloning.benchmark.tool/target/classes/memoryanalysis/MemoryAnalyzer.class index 5be8032c4bcda6de079ede202bf9d401453e5729..72ed8e23020c50c1cf141a69777087dd1bc4825f 100644 GIT binary patch delta 396 zcmY+9J1>J_7>2L6{l32as!m1X7^y@Mr4bv^K@1EcAt5n2w3MRNQs-l_7{5s(5(@(c zBqAav3zHw<7x)paM>?6_JlAtS*PZvL?7iIcnSFT!Iyt%bgw0A1wM==LCalomxl|&a ziYS_z?Mqj6{lLi5WFi%fuXMMJS~N4`WtM=#8A&GH%-IKKyA@+mv!L+XUoOAX%hKbw znNjM%p3oI4W2g0p^@yGM=NC+@L8;F-y5d|k!^5nuF)P?hn-eBCVy2WOlU z!=O}-dMU9@E4bGxw2ceexgy979r$G1pBED+A(K?FOi~=BoRVTiTn@>ulEz65yR5M; z-ffE6U=ve(g>1=eup`%Axy+|_h3p9#L}v+U8itgnuQ5jfTC=Y?6!wRte;BHBSeXA8 Ud27^FKbZCfzoPwHbXuhT0G_$&ym09)z^#LwHG)0R9 zExq8-P>V}_ls<%Zz^23bo!|4E_Rw!E_|y6L1g5!s3Fdq;lO$^))=4S6dB+KmcfWjT z)25)=R3zL1o$!VzzQz4lYWP$!ShT8Ereu}v%u2;6lx+_1y0cs$bG!@2ve&9faw5qr{tj8qxY8`l hOmyi(YwDV_|4jZbL%b`j(L0Dk%JzWFb1`_h_yZS&Kj8oX diff --git a/fr.inria.diverse.cloning.materialgenerator/META-INF/MANIFEST.MF b/fr.inria.diverse.cloning.materialgenerator/META-INF/MANIFEST.MF index b632d48..97ad9ff 100644 --- a/fr.inria.diverse.cloning.materialgenerator/META-INF/MANIFEST.MF +++ b/fr.inria.diverse.cloning.materialgenerator/META-INF/MANIFEST.MF @@ -18,7 +18,15 @@ Require-Bundle: org.eclipse.core.runtime, fr.inria.diverse.cloning.runtime;bundle-version="0.1.0", org.eclipse.emf.codegen;bundle-version="2.9.0", org.eclipse.emf.codegen.ecore;bundle-version="2.9.1", - org.eclipse.jface.text;bundle-version="3.8.101" + org.eclipse.jface.text;bundle-version="3.8.101", + org.eclipse.ui;bundle-version="3.105.0", + org.eclipse.core.variables;bundle-version="3.2.700", + org.eclipse.debug.core;bundle-version="3.8.0", + org.eclipse.jdt.launching;bundle-version="3.7.0", + org.eclipse.debug.ui;bundle-version="3.9.0", + org.eclipse.jdt.debug.ui;bundle-version="3.6.200", + org.eclipse.ui.ide;bundle-version="3.9.1", + org.eclipse.ui.console Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Export-Package: fr.inria.diverse.cloning.materialgenerator.generators, fr.inria.diverse.cloning.materialgenerator.metrics, diff --git a/fr.inria.diverse.cloning.materialgenerator/bin/fr/inria/diverse/cloning/materialgenerator/main/Application.class b/fr.inria.diverse.cloning.materialgenerator/bin/fr/inria/diverse/cloning/materialgenerator/main/Application.class deleted file mode 100644 index 1862cbb45c616bbd3bdb82f06152eb557024ba01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8516 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 Lf1qdRIr{q_tF0`h diff --git a/fr.inria.diverse.cloning.materialgenerator/bin/fr/inria/diverse/cloning/materialgenerator/tagger/impl/MutClassesOnlyTagger.class b/fr.inria.diverse.cloning.materialgenerator/bin/fr/inria/diverse/cloning/materialgenerator/tagger/impl/MutClassesOnlyTagger.class index 3b53e2aca4f8605e18208c23cab8f9c8870f38a6..c1f76fe02c2258388c42dc4d0debf04a27347867 100644 GIT binary patch delta 2065 zcmZuy2~d<}7=GS=mp%UlmgQPN*#I#V!Lbn(5?T?{T7{5A#l%%sW@}-IL#i3wN~@{S zDdw+9%p7wj858LKWmsP8=onU;?KHHw^vR9O)j&!?S4ts?T+ptr_E))>N89ls- zc2})K2f}UfX4A2!reG zW@)e?qK_7xI3nUGju8yw^9oBQjIkEvT1VP)2}7iIiejzEQd#R;5hr9VQ@*vJaIDp4 zn|xnamY))FT9$|A?BDA}&aVpo0Q# zN@s%-b-0B;)%b&u)RU*CZ*7g!m1=XBiTDf42uf$gEVmw`aa+V4+?DczEl;9bL@X>C zBJN3!yS%ct#!+f1udT7qaJrmw+cVfPDMV5tku#`t)mGaavmGuqsiXz^D4h=Vq~WHL zR@$wKi=R+a<*X>n)KLKGMTB6Ph71HD!yqna@Jb=6NJwB2rLEh03Yi+j*4Mv4=?_=rKU2+{Zio&+pKCYB=$D`3S+jKV6|u?B9e#XN?> z+YEwt83qgZ!@rLfe2mRlj4fD#t*qI~nr&!CJ8!n_ID;Ly%AN1VE)vkev$&f=v4`hm zFU4XX#bG}U!2ueIL-aHb(=#|Sm25alQ+c_R-~^T8B*XO-)!{U~hI0(p3-mfJ(L7ux z39IN+T%qN-N~`c2HQ_pS;0AT#CSBmsyMd*27q14{Neqxm1EmX z0h0&%@E+@ux|wt)5}PPcwqP!gMiYfJQ5gGS6B$6=yS(I#l<}hQFQP=Q6r=<1Mud>a zeKH`L0y$6+rt|G2Bd?ke|00pACkxQJ=MZ3;sk@GLQQC1Ia5!-jqFoi1G9YTg(4#Qy*a~P@Eir S;)5xHAM$_iXPj6+2>$>GdE~hO delta 2207 zcmZuydr*{B6#xCcUH16_3(JBF7G#QO7HT6BOxULM&{ce3rdGD(O5_3tC{r`d_I{1M z<~9|kGv-V&HJYJ@yV^r5AKAOC%+j>9vMeg?X=3N@vX#~M$GzvCbM86!ocp`Kuc!Rz zIi4N88(si#Hiz0_5EIl*?g?G9_qk4Wf>>i>Eo_AQsz|7{HQZVos&BR9Sz`DDA-@V{ zI#g47rp1o+>dnmj0S?3oMgwu6DL6e4;DJSkThEAl%Z{kSby?k#$XIQK&Q$YN{_izqvUQ z4mG*32m4Iy$5g_sOX@BOMHYr#(u~hd9Kb=f$($73gD*{7j<1N^l37E7|A|xS#5#O! z;v2k8q))1;oipvCz|`u%`N3*!`PRgD+TxuYm|A;rAQ+r^vi*A#KWKZ-*qVuxgVnXw z|8$Ugl_$fNf7HZJ*hx5B!i~*~!huLccj6ZlzpCLG?-+C_OJ=d1E}C|_)$q(S$1oks z32Q^syk<8pV5UhArMtHI;p?V_+oT^QeWfgHYlxJJs#40P*F+(T9Q3KBa>o)c&tyLo zOX3BQg{{HxqHx582beDnVF6LBZtx6pR=ULT6qBc_ZJsg?P`#eP9JIDLYcpA+zRJGB zWhp`$>;Si|o$M_oJJgLi6QgIw@MIjLi8#(BHeqZ<+R%0A@~6eoZpeCFg>4PgMs&~2 zj;+TAt-qTBoaeGP$>6tjBgg70%00DKCRlmj^%cWu>KBOcxl9;hoqH4-844j#nj@MUvl)*D$>t775>u z*YSo(voT*QVU^HjcvGY_Nl=Wp@HT9?L}Hq$aB7KfE*Gg2zCnCP4azOQ;(gu1`9y`; z$$;PNYv-;Cx3qJ&-yKJ_A%&ivS|yshryHMkz-cXWb~4>s=IEr|?~dWK4iw1BT9tIR z#PEgMm|HZj%b(sCrao~;vXU@cG4mfQePbE^j5Rp)INW+Z{KS8P#WBZ%8J&n~d(RVS zmjfhIS#_#Fo-g>LKJ32_k=i%fXYGLhq)jPPe@mIG6S*hZ)QY@e(JsH>=y1yIET5wT z`99|o_!4Iq+o6;#JEiGKYW(&%YKSGhqlRhp9WgM&T4o&<$In`6{*Akzajx9ZlW^cE zc(DpTJT0*3LV>*h=s>JTB{rf8FCu`KFb-P~5>zw`9&Qmt+%6Y?m%w1LT>E`OZ4YB7 zmf(FX#Rpi453w2_Nrc^aS@`Nx>_v}^C$NtO_S1^bn1j!mhXX9cK@Pwd9En35g~PlM z-*P;@i!z8FUWV^E2S+#;M+MA3v0ZAo9={8ikMl-?w~$oW!ez8`1sz-|Pr93KZl}q2 zna%^uIH>lDG$B znI?}UBk@RbC08=-43QEU)DC}R)-JoWA8CchQDetgJJzX-^4p`d$qN(amAl&|N3+P> z=%qbI=TMD=I5Q|EXM33=su*+sQYL6?Vkbrk7Lwc*)I4=Yf}vvc3tc5hN^cOQJe4F_ zNf_CoA$4MVjM4rYL6!t_6( + class="fr.inria.diverse.cloning.materialgenerator.application.Application"> + + + + + + + + + + + + + + + diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.log b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.log index faa8d7a..2f39d8c 100644 --- a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.log +++ b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.log @@ -1,10 +1,37 @@ -!SESSION 2014-03-10 00:10:36.072 ----------------------------------------------- +!SESSION 2014-03-28 10:35:37.216 ----------------------------------------------- eclipse.buildId=unknown java.version=1.7.0_51 java.vendor=Oracle Corporation BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=fr_FR Framework arguments: -application fr.inria.diverse.cloning.materialgenerator.application --ecoreFiles=/home/ebousse/Dev/modelCloning/emf/AB/model/AB.ecore --emfProjectFolder=/home/ebousse/Dev/modelCloning/emf/AB --metamodelName=yayAB -Command-line arguments: -application fr.inria.diverse.cloning.materialgenerator.application -data /home/ebousse/Dev/modelCloning/emf/fr.inria.diverse.cloning.materialgenerator/runtime-data -dev file:/home/ebousse/Dev/modelCloning/emf/.metadata/.plugins/org.eclipse.pde.core/Run CloningMaterialGenerator/dev.properties -os linux -ws gtk -arch x86_64 -consoleLog --ecoreFiles=/home/ebousse/Dev/modelCloning/emf/AB/model/AB.ecore --emfProjectFolder=/home/ebousse/Dev/modelCloning/emf/AB --metamodelName=yayAB +Command-line arguments: -application fr.inria.diverse.cloning.materialgenerator.application -data /home/ebousse/Dev/modelCloning/emf/fr.inria.diverse.cloning.materialgenerator/runtime-data -dev file:/home/ebousse/Dev/modelCloning/emf/.metadata/.plugins/org.eclipse.pde.core/Run CloningMaterialGenerator AB/dev.properties -os linux -ws gtk -arch x86_64 -consoleLog --ecoreFiles=/home/ebousse/Dev/modelCloning/emf/AB/model/AB.ecore --emfProjectFolder=/home/ebousse/Dev/modelCloning/emf/AB --metamodelName=yayAB -!ENTRY org.eclipse.osgi 2 1 2014-03-10 00:10:37.078 +!ENTRY org.eclipse.osgi 2 1 2014-03-28 10:35:39.977 !MESSAGE NLS unused message: line_separator_platform_mac_os_9 in: org.eclipse.core.internal.runtime.messages + +!ENTRY org.eclipse.osgi 2 1 2014-03-28 10:35:40.259 +!MESSAGE NLS unused message: LaunchConfigurationWorkingCopy_6 in: org.eclipse.debug.internal.core.DebugCoreMessages + +!ENTRY org.eclipse.osgi 2 1 2014-03-28 10:35:40.259 +!MESSAGE NLS unused message: LaunchConfigurationWorkingCopy_7 in: org.eclipse.debug.internal.core.DebugCoreMessages + +!ENTRY org.eclipse.osgi 2 1 2014-03-28 10:35:40.260 +!MESSAGE NLS unused message: LaunchConfigurationWorkingCopy_8 in: org.eclipse.debug.internal.core.DebugCoreMessages + +!ENTRY org.eclipse.osgi 2 1 2014-03-28 10:35:40.260 +!MESSAGE NLS unused message: LaunchConfigurationType_0 in: org.eclipse.debug.internal.core.DebugCoreMessages + +!ENTRY org.eclipse.osgi 2 1 2014-03-28 10:35:40.260 +!MESSAGE NLS unused message: LaunchConfigurationType_1 in: org.eclipse.debug.internal.core.DebugCoreMessages + +!ENTRY org.eclipse.osgi 2 1 2014-03-28 10:35:40.401 +!MESSAGE NLS unused message: TargetPlatformResetJob_resetTarget in: org.eclipse.pde.internal.core.pderesources + +!ENTRY org.eclipse.osgi 2 1 2014-03-28 10:35:40.595 +!MESSAGE NLS unused message: StandardVMType_Standard_VM_not_supported_on_MacOS__1 in: org.eclipse.jdt.internal.launching.LaunchingMessages + +!ENTRY org.apache.ivyde.eclipse 1 0 2014-03-28 10:35:43.052 +!MESSAGE starting IvyDE plugin + +!ENTRY org.apache.ivyde.eclipse 1 0 2014-03-28 10:35:43.100 +!MESSAGE IvyDE plugin started diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.projects/.org.eclipse.jdt.core.external.folders/.location b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.projects/.org.eclipse.jdt.core.external.folders/.location new file mode 100644 index 0000000000000000000000000000000000000000..2d206690093ceb5d54ee30e3d770aefbabb64cd6 GIT binary patch literal 227 zcmZvXzYYOG7{u=(R0@qKeP6GV&?reH+I2g3R`!qV?IBUA=_Fpj6Nr+C%By&QD>W{z zl9*~Tll&&rJ@2;7TU4vJj<3_<-iR*a(SSKo8XcZF1IEg%Uv=A>HbXXNLm>Zc~bsF4IB lq~eL_vo~iDLI#@17fX4;oqP+oaNQ53<6$8f^;-FRxK%7wLOG?s%&RXo+z?h1ui(g1 zUGy-}X~r8CI35WESWQ=24&z`2oYg(>Q5G4*HO5eC9c6qF0yiLyF3#nMA22SlB#fH4 zZWT?M10l^O_AwD=D2YeJ)&`&~=8ez?Dn%L%7bf*oH0odp4aQq#*HBwnMOo)Q=8F<@ zso%e#QIAllhJGEm{*XZ<0#<+%+0w5ml+p8T8d-l;KUv5fD7$Hto}I3#3HHd*M?cj} zJyNOYHlQD+!Tl)p^W#_CkC6mF)He6`!?D={V9680P#DwZ#+jB%E!vHBUQJ6gV!hOJ}KE%NvO9KCUfADKp zBkd)qb%b;)wL zwPCuL3e!`+?}JaM>8dAv2mrCeFuB1zpfh zHwUX*8;+{?DnE0xmly5vf^{Vq2b7Hi>ge@pWPmyl?3^s3-amG{-K`&QzPMX literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.projects/AB/.syncinfo.snap b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.projects/AB/.syncinfo.snap new file mode 100644 index 0000000000000000000000000000000000000000..91d6c541512db06197e1b732473d567ce4b92d6a GIT binary patch literal 16 YcmZ?R*xjhShe1S2b=vdAllRF105-b@zW@LL literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index new file mode 100644 index 0000000000000000000000000000000000000000..79c168abc074267d242f416d381a1df47c46316f GIT binary patch literal 61 zcmV~$(FuSs3NOe literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version deleted file mode 100644 index 6b2aaa7..0000000 --- a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap new file mode 100644 index 0000000000000000000000000000000000000000..0b368ce14fbcdffc79d020bc00b88646cda52674 GIT binary patch literal 32 acmZ?R*xjhShe1S2b=vdAllRFvpz#6ORtR=88Jk*} z7$`WqhA0>r7@BY$i1_^(tT*s;PxbEdV-BR6WsEQ@IVUx-$R#zWBr!g}C|xhHATc>3 zRWGxwG9^_nH904!+GbR9wwdUyZ;!(4x- literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.snap b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.resources/.snap new file mode 100644 index 0000000000000000000000000000000000000000..34f057a48572d2f1570fb98f4770dc7cef5cec72 GIT binary patch literal 8497 zcmb`NU2GKB701th_zMRxF%Xgp%SjE1C|OL~wB(Ile>84vW3baeVhFRlRdXLojH z*G>N~Mw;LM+%sop?z#6a+uuBK{PXY9>f1J){l|qf?{`Ea;V_jHRe#I=gor|+5QXCj z3Q=1WY^Zm3{H|sN+1}89ltR=T%NNW8dddP!p-MO+B1h@k?oX~ene4oN^5{E<|G3>h zv-gD2{--m#lUbNH#>_${rl+z-zNp6zq^(%WEa)-)h@}^DS~fOeX4871h=e+$?MSMx zx%JqBiq|jWMyN5CHF5{Lfrjj&gnB>yP-|1j4+Z)J>M>EUZ_$H2A+RSy)L`TahE|n) zQjkxDs3~n6LYjJ2_9?-h0GrC1IU|>;%AOGHNw9_KoMlW^k9$(EPd8Ab9ak^AvGfgv zJT1^?LUdD)gT_)>t!US_t@N-z{g4f_!f=KV+nky*b24Q{pAqP@5n9n>2OZNg0nrhW z^&_G+b~>oYkcOvj;HmrP1)B9^qV^%((x%L`p2dL003TS^S)!ZtsR{cX%M}fuyLy&! zqElg7J36TqbS;_H`*tMlPb6S0#AnSBMUAO^wrb^Yk#(+tV)10rDrhOIa;&ahx|TL` z*_j?QXCdu?vCnfrqMs6V_=OAz0UPTjqE&;YS=4*XyrCBYTp(FLBiiV=cIicPx{%Vl zR19RFvx7CV!vG#rK=gCM^cW&A5>P~Wtvvs zk(8dd@S+FAf}iyw9=eDX-~!3|2~o?SS>>zeNf-nR?`dhi-ij|n&DXELeQ&n{?qiT> zpqZAHa>#4e9LlkXpPAYGk-~tm?ngfoZBNaFXFpDC zQwRXoAmE|CvH0Bs!~Oh4_dNEOJ3ded0M<~5T8HAp1O0uYW3eHdSHb5N`ae?CPNs== z5k-G3Tqklat*zp?uYp-DU1^2H<1iHVT z{$&Wmf#CkNU!Yoj{RJxzVq4o7woL>E}?&cWqmKG?n%aoQuX#PQ<(BW{VOHF^pg4) z!m=K%-M@ga3ZJom!Otqz-M>JxteX7`1Z$e8Ejevu({}Gb!?g@uETp$w-rJ_oVYU$M zzzkn3q_}hRZkT`0-E!a>Youa^-!Q+~?R29I5si6gctP$KdO5|rSVU0{|C%ELUeQa_N3f)sVn?f1p{Tx_|EQg z^E}Q3<3yP-t*P8G#L9=7oBzH0J|aBpo1RH#)A-0g)n!~{9gWa>-DAqC5N3OYjO#oTn!gADJa+kxG z?mzJ_g#ciovo>RQS)7z>%$~p9e6?F4Ba9O5jL^znUC&qh3VW`8{HR;aG2wZD=+>cW z%lW$W;tqSeS~_JYORwh-7jHbSTyU_yLA3rsT{~DugoV?8cXNe{g(aGTRuc})zuC_A#8;OCcbu&AZ*?e@t;Li5IB78piyLgO=N;jBk7!*yIijTwY8jko7&xiYvWq89Ui0sS8G~a$We!O4 zx59(Ln-T%6{nXtX!dN`xd8%{?psQD-)EX~4=+DdbP z^_RkmWLLzKqlXPEH5p)eQ&=!^%ZxUoCDWLI?HoKe_Og3d_uk9tKwYIYkytXkxe_>%MN_K zzAM6q6jnJEotn0sMD4TGs+GL}m#defcxBvnWVf?g6@Cp)_mx4~8=X{TfclGeS%ku! z+~EmTU-5n+!XUfPdBW5v;;X`slmd1G>cBfD_g(CnX5)DA&(GC-^~m{(xP=s7nV=K04kFs!v`#tu^S8u&7g68;I{GAkzfo#!TTk+mgC%S!#uH-+sC6UDLNC~tSZHlVD8W0T#^*9Mf; zgXdprcD^_eRV)a)xEA^3gMD{CY9kbXU zG+-UH*mrzK=oX%>SUZVc<$6kMOYy>jV|@{u31_ae$Euul-3XxP5%WxNpVcIH^u=1ChU>mI*8rHZ=#lT(Vll|AUFQM#o{pYk0Mqp-e0w87I9>Mj`E ftgjN??uk@a;oxL#a~BA*Z3Y(*7S_F<|CaDy(qqOc literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.core.prefs b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..f42de36 --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.launching.prefs b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.launching.prefs new file mode 100644 index 0000000..c8547b9 --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.launching.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.launching.PREF_VM_XML=\n\n\n\n\n\n diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.pde.core.prefs b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.pde.core.prefs new file mode 100644 index 0000000..1720dc5 --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.pde.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +platform_path=/usr/lib64/eclipse diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/.org.eclipse.jdt.core.external.folders/.project b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/.org.eclipse.jdt.core.external.folders/.project new file mode 100644 index 0000000..b3223cb --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/.org.eclipse.jdt.core.external.folders/.project @@ -0,0 +1,23 @@ + + + .org.eclipse.jdt.core.external.folders + + + + + + + + + + .link0 + 2 + /home/ebousse/Dev/modelCloning/emf/fr.inria.diverse.cloning.runtime/bin + + + .link1 + 2 + /home/ebousse/Dev/modelCloning/emf/fr.inria.diverse.cloning.runtime + + + diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/2369791033.index b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/2369791033.index new file mode 100644 index 0000000000000000000000000000000000000000..5fe1ed0fed44f6c6328d6b8534d7fee6f502e60d GIT binary patch literal 25 ecmZP&_VjacjZg@44GQ-3_fs&`Gc+>$4+H>G^$6ww literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/3185608247.index b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/3185608247.index new file mode 100644 index 0000000000000000000000000000000000000000..5a305c27afc386a4b7eaa7b3b19a2a69566e8e5d GIT binary patch literal 10230 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 literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/3765020915.index b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/3765020915.index new file mode 100644 index 0000000000000000000000000000000000000000..c388b3a19d65becdb5104019ca2381be068020ec GIT binary patch literal 12000 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 Zl`)DZ0ZUSnr0FIn$`_^4F}Zwu=`U}x0gnIx literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/javaLikeNames.txt b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/javaLikeNames.txt new file mode 100644 index 0000000..8586397 --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/javaLikeNames.txt @@ -0,0 +1 @@ +java \ No newline at end of file diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/savedIndexNames.txt b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/savedIndexNames.txt new file mode 100644 index 0000000..2530855 --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/savedIndexNames.txt @@ -0,0 +1,3 @@ +INDEX VERSION 1.126+/home/ebousse/Dev/modelCloning/emf/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core +3185608247.index +3765020915.index diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat new file mode 100644 index 0000000000000000000000000000000000000000..74a12777ad5d00817b2ba7f161dd7ba128bd7414 GIT binary patch literal 32982 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 literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.launching/.install.xml b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.launching/.install.xml new file mode 100644 index 0000000..40d990b --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.launching/.install.xml @@ -0,0 +1,4 @@ + + + + diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.launching/libraryInfos.xml b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.launching/libraryInfos.xml new file mode 100644 index 0000000..ae8ad35 --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.jdt.launching/libraryInfos.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/-1355312039518.target/.lazy b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/-1355312039518.target/.lazy new file mode 100644 index 0000000000000000000000000000000000000000..680194646f35dbf17fd142ab119ef85fcea9736d GIT binary patch literal 1708039 zcmd3P1%Mp4_4iDh*mvhpA!SIKLXy_&Bil*av`y2L>0f4dZ*P6K_TKJg!9J(V%*@Qp z%*@Qp%*@~KX+|?6>1jZk-F%ze?Rh~Deos$NPft=11VI=)V%K_qqrI!W(jO0p?Oly_ ztJ~ScAN|3a{JXK)ZI1T$2OInLp1HJp&tCk$uiNR3xAv`#4({7JW6!=l%eywazpy;NIKMQ%cVW44pg90Lr5<4z z1V=wU46c-Aktc;u1{cE5(fGmFj#X&V8&JTp{oz`t(OGTxMxD_Syma9(IBIlcvyJz5 zi1${;z142p_+&{AwjXK_hMj(ITP`yZgR{d`%N^?M+G)Mzkn6OYCNqC9xAu=Q3K z>qhJeVQ_g3F_lWLeh4f=&>gHI;uFB>LSgXGN#oQQj+(vIX1CvK=kzbbge)(JzV*Z~ zIK@E9q*I6&#P`6f919ab4gLQ?6GyFPcle|*xSR=DN~91g2R|ow~3h9Qc2ifp$yt&#OwZUC)e`jqxXpZ^=*tE{>qj)%JQX&b8M*|4g5 zE(|t&RK1DeqCFUO+QY`Exw6t;%_`qp_0J50ovi9@WV2vkHqF>R1oi-gp>^f0>ttFL3cnVeMRkdRw5pm-^VyR zpwXb&N+MHIc?}Ne*`@=^lF6vs;(#EIhq`qKq|)Y8&9K2JIeO{XFu0?e15yT7Z&&l2 zFgQ_jHRfgS)yZw$~n|PGhl-kp8)0aA{4s zDG_PEq)I-DhbSHj&ZDd-nHb@jU=>U+9`Ed*d(A_gHFfs1yRqc&pPy&?XPp$uNd|=k zd3X)hKSL}Jh3o#=q_3#m&I)OmeVh;m2OVuYQTw1B_3uo$xZK$755V)o;56OVtwbdh zM*)gIvrs@(4=Ac|Vt~Rk#R5VvUL*|G+(7B{MuUE1-0RS)NwX`R53&i3J^p~aAPlae z0m2iMV891l=uRvc5YYpSvRoKI@C;djxTtgV66qxwSeNVY{Vz15mn<2nbQqh(`$HTL zrR&j)O50F1&xTdi7YlrO?bttgtJ8=ehD z#nDTb2!pnpQ=t^_px5k<`u%Q3;kCr@FVz-^$DIa8PO6>{r0G?N=b?IKh1kl20RhjB z6@p8K!9GU_L<&Bme9FOl&rV;atxu8Q3L&X>N^tX8NQmU2c4dKzp>8OgXT+-TOF1hX zD^bIKH_5pyq0Xp=MW~mX3Rek9g;SLgKWl|ZH7Z=EZYZ2*#H#R1he6BD!dvU@=4iOy zZjUlnUQ4L>iZD1?i_}eGQt^DGM*SS3c__XN2Zr)_W~|D;jI*_`4El$M?aY$vavkpF zm8P|;gtAKK-3vtWP`d73bn2|aO-8H=zpPuFE=n1b=};~CnOB9uC9^i3At9A)&&xmz z4<*~_8tUa)u&VcRVQ?1*XEJIxHyRjB5)JS5j|^WO2A5Iwo24ODyd9$OfgwckP;oA4 zL(4oDRxMvX4DRWw<<_C0qUohNGApkMgDV)iRwzk*BMP>pR3Maxz6;44I_EjD>ih~} zu;Qch;c$I1weQ6`GQ6)1gOgaTXJ|>iV>q;=cp;dF-b*lGXrAZAs`)E=YCc;cMwLl5 zq;_9t(|m@O)I99WlF@}=wQF8sz|cI;i&gU{g~8pNZ9Y?&x765+1yIkK{_C~+Nik+9 z;zp@0@}=hL7=?on$3x#rm8(hI&^6D8Ro5qnLB~PY!^5Kn_F z`VXXU2!pF--AoQiY4iID0yc3DF+DIS&xZjA&yp36E4jsq!*+9k61*giIn&?n->Btt z6%tb6luG4|9)fr%T*>EZlnoX0OjuQXidz~{Zbys-_=$;%hG;kcX<3 zaK$99Xxq+5#31wgYHm}|n2}7_wy!3AzfGHhnv{w)4xv0Wu1rBW^1eDh)m`U>ZSqO*cbj8u$H11}bl{{i zbTw9S*cS5+ZSu*{l6t2FM}G4K1oP0lGVSLXFf`BeV%7ZVVX)uPpC3R4(Ws%C!oH;j zB1QiNxOaxZmGzK;qbCtSpkVRu5YPjGl1vyV@cdX&xVrnOx|&Ti*5u{i#f++1I>kO7 z0(ofN7*$o`infUtJQ(z&H<;fD1Y8ok)B(ZB1V+_&Gag>0RIG6b<)Lw7RMpA*>U^i; zG!#0|D!i83t@r5DP?d=EDSY7+O+z7!hpyFWs7_l^G!3OZ8;n^;FE!j<$;!CX&1@*D zrIO;kj4R2~k;>-l7f9I<$V1tND^ZCX+UEJNYI~Raq`$d|S-&V8N|)rKS~>67<$cVg zpCOlZDmXcW**FC8JalhN`dJLI29&ZAXfu{ zJT$Jj8k4x9ZF1~9A69KIy6xN&j3lY88Y-VZs8v*C2uKa{Ll$WmLU?Fcsi;us8p`Ea zuqt=S&51-jvNmDFx{cL-OC|}hQFH<88FYZf{FyjAW6xss9ZtrRB8cd*13zIH z9FrwU06~5afRyvuYz!z6*?6JX*~jiMc+v!qYEqacsIVys1$SvoR0mWa34?27(+NdH zi$H@;JV2|+iXVJ?!r<}Khc6y*>cH-!+6F%hb`ixQ;Ghi;;FRrs1$_9Swl@qOGX>P> zIGg?5{^6Rt+sCvcg`}!Xaz%JS4<2|a2MXme;Rn_kVerUlf>mSZLMgp6OEZ*Iu3JF^ z9x#>Tzz?G{!{Bk##3-Azs>2I@A`DLDMzEwyWe65^D(J!ktqN@TL3YjQKqh9Q%~4m$ zGu8pwCoPb11dAYpF6xGiXTuM&YfUGZ?{8qWZ)2m*VE$8CnVj#WCbB9Nd150I1isw;t)0sP)`m8ZT{H$f}Y$IBPAavq^ zAUk)qv*HKeb;IBpQ|g8hU}B4Rk500$xhH-u3>LZYku+x~T?8fc;{l};LwFAQFA z0RpOSv)orlkooyAxMme#RThc>hQ2%i_F~Kr=(DFcfEwMWM&J8|oB`BAw+K>b#sgC8 z0BYsN56A0=!851ZVa0O6By!MS41=YDp32cK!V? z%HhEesdJ~}NHe103NWW@vqXx(KtK4`8xjkS~s+Kw8exTfVI*YJmSLcn} z13J{dMsU7vS%fvo74;?P!2=|A5td`Z53HL^XX$|$KQOE{4*7;<=|Lq`1QO);0Eu0C z&>8Rp=%!)tYva14%t54eq+7nJ-H?%WIxN*9*q{{;*p&M*O7P-`;LWBN zZ;&o07C?S0C*H6TF2WJI@xajq*1= zag9!L3rQUV<##QM^*XU4=%51+=-9=2lLbGRZZ*9mSo^>VF7d8&mhiotB$z_22qarV;j;|*0d(8x6uKX1 z9%|OTS?foZLU)Z;5k$~{2SjY4yTO4UMz@>N%uZl5sr_0%w$1EpREuzfRy=UyXLfd8 z{1Ci-7(8JbGdqp{8ppDqXjfP#nJJcJ5q8jr2X@K@)8IIW(T6`)2R`tvZjy0sgcG>hPaMm*rF#)%(xcMgN+Ul7<$Y^wf?FgUXmk{ky` zxI$YVxcczrhw@#*;5ipC$~AV@UxvY+st`xyi|~b>Jn(g9$`9PThQZ4(2ypY(2x=)k z`&Ag6T?*$sPKqFh_B3zoXs5S-fGviDaceXl;AF;n4|n;sWd>@cT7)XJ z;(;nV1I^*Z55c=nXXmxxzd_qKYX zF16q0bvlk}5qQvw2YB{Q$MfQc;J)dkeInzNq2`e~GY7x3qS{y@1N0JmQHpU(J4t!~0fkhD)nBGN@=tL!bO65cj7YYn^hS(zj>BW}Y&1uAu@Kh`mbW?-(L79KjZcfV~DZ!vi5_m8mrUw|x z&1t!O7;x|`S>XWpE|&%#7~N!(Z4``s?;K0xJ*xI%3!DPde{ z(CPKw2dV#6yQteBMEWLYO2@`Sv&<3d5XnQ|%0=A_bw%NJMy%$&76x~6xc(*LBu=2# zawo&z!r)Tb%vzR$R5E|2GaaG}F+7xu%TUMAEM|N6nQ^Z#5IWEHw7u z&|>c)^Y2=9u8p2_Cp0*HoHcI<=%IO~KG)8Kf&%fx^J7J!<909Lfz?rFtgOY%|DoLr zsE{bOa|q(0ZRK7-jk2O*awHWE{eat@I>ZHYgI5g~8UHg>ukGe2Nrm&52$N%hSRM*j zj!)+qF!avzVm0l9Zu28zM%<^htY6?ofl3XRG5kxLA6W@X7lUWZtqc&+0|RA#l*5Gr zM9dV!kQIooW1uL3kcl|D#k&R%|8G4|)aYbQpZDw#$V2UFplA?Rv@K_&CLdO9Z#a&t z2_ww4bu~M#DdT3uASFKDKDDeDPQRsz1%O!eD7|PC&YBK!) zhQY~7AjuJv`X^^=S{*rlh~}aHG8`Dn=b5o8zaIuoN9C`!SH^2fXj4m6`M)r@qON+4 zlvF$)z>(r1mWSet=^JY2S+S~p(=qV^GmLbR%$oeKncjxHis5LpRHVB3OP)#H5XVE^ z1;hhDt*_T^!|1cMHm(lJ2$h4=T4^mT9I3Jpl`Zj01vL9sn4jzCmA6yX*@lD~!UU zm$p3A-s|;8S~x_#;1FH^hx-PXcP=b0FEntNgO$4W2I9|P+YB?gZR(_?v99+L(B^_v&VdcK-uG{9cf&!HWX&RX-@j$m=JPSne(6mxe zpp#a#Z090o&wRR<+cmy|jU;uj$KRFg(5~^#5Xf4x*=Na;A%us1m1}$zx{7k837agK zT8&@1w_9>X@UYSxw&i?@j97KnOM5Fj>tnR!j7}wM#=4A4dr8d@$3x9Za>gXC=vo@G z$%j?f_nGWz9cvq-hTN`Am-oiDU&Gl{+m6*v>)=TdJoK<#+za_Vz)?=?urZ)OWaC9J z$^E+TWVZz9Ov{pTq#kO->NssnKq1v4*q{{;*pw{+C3x{e@P3m$<4@;5Z_`>GCFa|X z*UtE>!axzO(3Johz-l921S@njDOl|+`N8_|$)3cT zbvWXD(i%~`lvclBp;ZJLG~fZ6QoUg1zz?HGOmC_vFslC!sco0enJO|gi!g&mJTS9P z6p<};g<+~jwFpCK#RJ2FFxBA255cESJ4}uEuQ5!$YGIg~C0T?W^x=VBL71vC z;s@N*rXAQs%qzorEqS=B6$Um8+YKQx~{?Ex{Bq0YeO)WQMLpj(6_ zG~ujE*Km$LwYTJ^0bmTX6P2-2+d3yM}-?d9G@8m&z@=$KrS{M!ATm; zwR-DsP7j0K`H27v^&(86B@awpdGbT{S<_pEjFK!kh+(7O%ba~sN6dQloK;AkY!Q~w ziwBn0rDPj3ejq-3dWDXP02vQci=VwlPNAcXa1oHujR%m{LPtA0eo#JV+9PJ%A8THR z+*vqc8gz?*gl0T|EQovz|c&22Z*`psz8{w-5%`CS zgu$yXkfBx=Nz|PlSUp%L{=38A+;U@Z0XIcP04;hLL0vrhS;9-h-~|_`CDdMnv?mO% zSq=Uy3q_biUmloyG3E#K%cgfOP?Uw!!n3+(%zJar1u9~o2xREW17z#DK*enNLHzRR z?UG2w?ivHLGjeuGX!MEzgeE)ywC<8HxbVa46>ew6w$B@Pdi|}&c+^SaCORj!h9i2< z)Q;$7NRjGe^@o3E57LBK9?Dma=w<0EO1HDZ9d9RIdu15(9nLJ3ybL>(AZqn{`#Wpn zK{Hc9Tho!%*VIbA3JGT+K?OT=wkbsRfJ7K7W+ zbvzFxKTA8%!9q+*D=d)30K$1-a7uQfVCBI8fM-YQ+jxGh+npeipFw-AGaO;#TMPgW z>05L4^3igW)N9gZcf2FxaRAk=A;< zbucXpq#?V88>G(G4wNx;p^}xj(DTPxhXrvxa8ZtwDdfd~hG&ZbC3@+NZkJkQ`Rd4l zV-fcmd5_%J57j%8IZ7lWbpUeIm@G152E_7!K)EBCXF$=rofl$|eZ0x-HZ_fzG_g$% zs)oCy&e3jDv(b~C0J2%Gl!AaB2q?Fy*_lvKAf9-BqBoe|Zw`Z=r(=Tk6AJJVt7E$2 zuFfd-23mnDqX>Q^vYrb9d*H*SQgXO4;Ncmw!t++QtJyM^Ga58|Ljg>?l~hF0 z$nFi!4ejGPN3<9k2VKDIXY@`0TwZ7T!^hS*yZVfw>PEBe`mE1_H z`_3ALjdm6!GetqZ1%i8kq*Q*FV~9n{?8G=t1DV-q&DLZdgq~75jEezV5eM~F+NVd=^_({n&;pFY_ZeouXEOfIN@o_Xn z_Q1#%Em+xM5i&WmBJ@trG|XZn!&)54)iSHOseR&aP?V_HXEzYj0~OoEpJBwngXhVL z$Gg0J+kjTWTH^BP)j@x=(@XkHO|$=-*?pUpHX$T`c;5!WJrJ^uLOBd6NZEO_BK7Vt zSn-P&&Px`HDSux>>hk9HOh7_Q_7#%L9COLXLog2{Y?*)z1B&K}B0WrAqSu+$T0pr8~?W*dFjGyX;EwW5C3-W`*f}-s60KvyIw{PCp$_ zY8mHmWgq7aiX=1j4c}I@4uR=r*EcnGQh7AJ=o+B#~9|(h?p94!YW5k1SVVJ1+U)278+UC-X z%ditCgd|Gl=t^3G=pG0u+e=Gwq=02-&I;BC!=UR27A|Yw9Q3hlJWMN(YFY}ojdr9| zMkfqa2@j!!4gJiL421Q7M>$lgh!q1Do+~RZ9}0s_KU~(DgB6@$(&~3n%BPj^)v#oF zTl-YsLOFwvB?f@d9{AX%`c`&0j2Oh@bA6p&+2O>XXX_DIb}TB1bm zjCXPn+XE$Aq-N*GfQe_#3e!izVAZcHwR>xwUQ&orOO$qd`zohGO}cb@ga+|E;IOT7 zYD_2?kp6jotQdUM+nud;kb0oB<>BTCD~_2}&RSNT?_hUl7Rs`tKxWHu1ED>TvAHuV zI|@d`9nV?x2J`!4-VwB9O?t6fddeN`5wu3HxUWD&4@7Jcw84ggghOw^4B0a%OIT`d zZb~$23d-(e56T#-#k~Z=dSGG;%2-wuTpW7HC%iM1*)3wV^o~1+!IiiQUo5z1XchMi zh~|MpDHas%JM@ZAdS@w-#~=2)$v|FHhqy}^T*V4OmSAyTfQTL_l;uJJ!l4^{%6o#} z9E>_R^K-d0R+!bq;=-^XZ%9o3`g450p!GL z34!l!34!gDv(WGv7YOYE4I2XIvBP3ya>k$&z4X~I=y*&O*GD5nTkXN2Zd)nxtD(Ex z!?F~{kd&z4+0tPkrUxqQQW(pJ0SC{L6^_sOZKDu8nVn^!jw#tDOLzc807#e8I2kb^oBb(LUTC9Bi&`bb1nunyMz6VQ?B35VJ%H5b6T--~oZC9)MKg zL;=OlRKzUv`-^^ov8Ern#E_Kp*K+>BiX|}4B`!S}WVW1$0MR`_Vgus>jufznL7utj z4d(Zk{I(sn54BO2oM2N!wM)xVY?P%Wf#B1xWU>&;0|>U*NM*p#JI@QF@#v*5hrvFN z7;80CeYcFIVDC-Ba5|Ugyj4O->ij71-)7epA(DsAi>Mn4=NYjo{40LzA57Auh6Q*i zl1&<^)THW3Hhyq`a2~2J#e$)Ko*S$Fzv_25L3~1Z5-;tkW5enGFgTerdW9HipE~z8 z{P5`zh~}aFG8`z%w=-i^{@47x{7Ppv*;`71s(*?6n&teV3?u?~Ihu+!q zhZOpX*6pm&JM81@ep*)+Etcx2_gN2vD{%InQj)HQY>am`5XwX8h2#~T%dTf~!s?q| z{6-i&VuHsUwm0@SHlVIfZ!L2U@nU0->=N^5&M)qq-!s1(`NDyfOYMyif^O^R&WIyL z8lm`xoKey#5}Nc56ySl6>Wp{}6o~B15QAYbJA|r`2BSVlAi4)&YKLOT8))&I5O<}~`qpF*aL;x!RBjF0 zi(5E2IK5`GmhN^?-;|os9Ya*&XzzGXiU*GBrqm){3{ZKtDuMd#FnIiwx?rl`Iy+-m zPe!s@EZZ%i4i7lhWMnQQ29`B+(C>u76Q_!$Kvd=dYH_U_dVz(Z#4JtOJ$c>HAO)3p z;Hef^6tFT0M86vb&$s{(RWDer#qsv^)SE?{3TcTi@8<|#D98g}HT71GBLilhxk^s> zdtvaf3Bw$p!I7+FFE-Bb4}|*qd=4tq2uTQMpb$P1g76*?s`ELHz5y7|N+rO)9|n(} z7GQ&Z_CSFe!q-i`{5Gq#3^fUz-Mc~!9?+@fw^k+${CIvU;rD|n;wSDvs59a@FAu*A zwPO6BhKb;(Ffj@Iei#OinO6VH1|0ip333Mdf^F9Jv*d~qgd#i;R2OXRTucJOA5DJD zi%y(MtG8+aZ^(>!8lhs?AiM``#+YZ&p9Ek(o_w-~f>-cnb%CmHRtXm224#5Qrd9>!^Wg{DFDHAgsAhAko#q-!J1Kzd zk4N3iuH_nBa0Ip?7UR!e1Dk+W*Zy*p0b`=L)7^Y7BiKS z#Eg&gNP`f+Ud(g`49s|5Dq;55FnGv>hdN~s8e)|i5-1PV_jtlRDP$yC_Us7+_drYC z<7rYipyC;+1l8XrKdWo?SKDiCwSU#%6CcLR>I_m6GP_fR0z4oyW_1h)25dYtm0`Cx%GS*ir&KPO)ftICt6HG9JOKyp#~2KjdEt5iAmu1ugTBBaqMt&giCJPqhwXQmQ2c{m^rvfOJc|8E2#TH z1s>QLb8wCY138|XNE@=ZH zo{LHd{m1bHk!6~A(J50a?OtnrNhYpvkOI|`cwT(_7(Ii`QzJ0waSZ*Et2PS@^UFII z7MB+Y3`pkzhMGaP@t~kWobc?>JM81Xj_0na{4|D#lOu}+2;PV1JXSxP+e$EtLo!q= zI6y`Z9Mr?PbJ$>^Fgapjpcnt=cnGx4Qhz*XwZ++;-Y7gyA3#`Ign&fBl$Uw}MDsvE z9Y8EBDB8DkLyG1eAtX4@<@6|xok6>|+8&7VHl<6@>BF9W>GAq)jwMJ-MeKmgEHosy z2Q=z!j-?nRKiUCPci4^CyN{jT1vD3j#ZqhY-sH1T_!NGQjHH zX=NBYLI~!ec{SO_bHJ+JWX7uc zqa1H+6x?he)7ed9*;)~Jvc8g@L$MeLi0J`@x{{vDh%X*ThrwN)yFz*_TP@z_Df+f6 zA$dY1t97%pllem!53Q@)u5{Y0qD?lehQH0n@LNN;8;riA_4Yh~D8I;dUSYFIkFHhlqp7_&wv*r?CUCN=mAq zVnEaI$o?Uhhx(a;S7*RbJkJZKbiwqDPY#2ap`9_(?L+hQzqjt6&W^nrHK}|$4wAQh z$mXGZX6!XMFtpDzW7YnwkM`rbrzGr&weLL%cm}I|japXwZPxQZwtBU1aKLKcWX7uf zImZ)dmt&(h!p<7p&NI#QUDU%=Vx)fg!+RbG=b?T*eaG{l0AOdw3c!vqxVu}ZBlt<; z5TuKeqOl}*R(ZAPS$Z`@jB`RpN~o0kCG^PMLm&^OtJM%Dbwk}eBUW`E<9Inj%1Lq? zY1Zi=Ippv1pKS*F5@UlX;Xn@>>Uhr&Nj-4TgZ&&v6iDnm(L3BDJl4+zp&)Gp^(1Ie zKk)Yd&#|~5jaarfnA1(_4G_))g;SK3q}T=x9uxqGCF&C6WL&C08B-o~O-sH6qf!lmeNA8YvvYcqm+%?;5lfMU$EHY;a1Z*TNIrM%#!F zVeRn*Ybo8Lln7s0)z8;PTZ4>Lwz5#0&?99-AP;3Lqb)<-P&dzrRoxeHbL~RWhnj;< zbETW6G?yAUp~`=heSsF*v&5w0q2dd@n{_J?%|r3Z#LB{fp?sbhtMV`EcAJXeW-#uJ zI%!g;7RT~J?PxHDkW@S0tI6IWl!w}tqrq7EhSGUftV+LF81x;&d4(4YsGH4EXQk8a zWN$-TtmAf%7ip_og@h#}P(FXtM+lKUAW>GgN^oNU#4~0E=;C3pRWCsLHG)gnLbvGe zr(PTed$QqQj&3v#BxF>8^>NmDK?xp^IkRP8$8%`K?nIB_WYCUA?qr@oBX|vWM7@L? zPIO`t5gIdr7|Q3Fu`2%(ZlRMf+g|q4(^~x4OSLFfBSQ+OAKp2T z!Xb`_!j&l1pslFd&W2Uhmkfh@xcaCA{gsS~@2=xQ)0b&yRtR}Bbfk5oH;30?{S5^2 zP_}Yrg-Kk|Hq8lmKCIfllv~x7U<3zKwTDNBqxOc(|1UI_{TE(du2pUEw4{;KrEh!! z6ry?PU8&l#v7l(5IO4gnYX8z<&~~+T(*DYL|NhKbWHk6L`47IY(6SGS^eVYx%ZGR# z2%KUB0H(-cpg`cz0WRZKK`L}YiOE5)*^N%Jj3>vm22eu;^h)g@Xe&Y45y;5+fCnOa zz@Quiox_C!1TjSqlcDH!^LKbzkG_CIjxpvBJE9~mDj;2gE86Yf7hc8n1(TfY3+Vs+ zMX)5E2MA_g;CN6VpuWJfV=6y-CA^$Rh?(8apY#M=MCzLgeKiMwNlf+va=>Qxmtr0W zS1SM<4+;Rp63>nmfXjzL&viV=@)Mu-ncOB$<8lo?={4FJqrw~H(9MEkdIACk0(*d> zoHAO>42zD*mld5W)PxR#R4nFFdM_I{dH0mphC#y^GPCFybhG&IodzO%;8U3$79o=} zD?(RvTi`TIXQkcjB@+ocA+(0h^E&Nl$y}lm8T%9tqIw{s94=YFi2(}FlogbdJO*~L z+}9h8j%+4M$bzSJbu_VC z_P^5ojoS81k!w$=NNrOF0sBCh)no|cp>1V*rcT<>GtY%p&!@Q6k4iQK_{r*KEwku1 z87n>!q#06Kjq|x9h~=SiZN-P7&#K*I#j5rzyRF^Rp5XMrhRC|Ti$>oZ2A9ryQ-w%Y z)!2!~7&k=mP<0+>w4RwZA>&3lvl-R2lOjFrRj=Icliy+!lh94%5g{m_$XQZ#fz zFb|b0-kWDY(Y&3Ph)MHzcvZKwKQWW(=KE;zzJ^@HTeY;mMn;-AY4*>oi9;L@eJg2y zgSMh-3Q>4AOeIIJgjbu)0b0$?CeCY!549SiKcweGrgxVv&hMu4#~n@}e_MRIkDUym z0#(Q}>W-xvt%M%w2!eZnA`bV-qpsj$WyA{0sbO%xnh&ACnA=$E_i+b&V{P0#)J!J9 zv|BQo1up`Q-3$1ya#hjW!{Cw@0)zyWrqLsW(jz2dLWBfl^+3W-R)N6ELByE(J3K86 zuFr&!o89qRr#IY1L*C(~R$~=v9UfXkDRf+gK7R)8Y+9b5$7YxV%|R@6u% z(v19xI__yPAE+ukW@~5rym6=3$8-C_|HC5;=C*crPjl_(Z`vWhu2_``v`Z_Wp3K(`dJocY=eb z-uu+6o*KV=)=klCZhP)&r{dU6%6Xp!^_+HE?)yv1`_NuSbJ=$0PdiOQFNw?N@boY^ zT(c|4SW08K(dnkgKENBpBQNY(+^ZPxd&1xZ{Y!~r1*e4L>G+Gx4QbFr?OwCjYD1|P zzT?t4c)f~68C(LWOCq_o0FKf)X7%?kW_9ex{guX|6xZx8#urpU{V zj0&v!4iqi)TLzO^eSb3`L`d z_$RELc@V`SsGZLnDOcoMllsIg@66w@ z?YSt{Lv*_*`;Wcxr-_+uUx;}%Z5;24hhSCSq8fKia*S{d9s#dV5Jyz;kHi2+A1{M@ z{<fcjsi15Q&bGPS+eDD~Ir%_KVS-BO)oV7qQjC zVlw9yO88QI4z0Zj)pza`cvlN^=_^N*A$>X5Sc#uxEsVgE&X1mBve6T@^_3hCSFNS5 z7Py+2CUIwXe_zwQg5g9t9&w}db9@kIxt;%;#CrA4zq_FG!#P;zw~a6uPa;mD;Gxmn z>>#|~i$t(UJ7F8!88~QjcM>2W)(N(KONloGdXewEkcf*K1SlS`6D}??lQPuix5MBf zG?0lHMvv*qFMG889kQgP?crvJOpks%+QqkRk4*na=L!p%Oa?~Dh4{;&uY6bG4-hE) z#VPW|1PkgMFanRxk=pxxc*w`D6 z22IQ(qFF($)P5K*yl~W@i~7a;k?gdw0;6~zGS#caAIBqWB3FNa(?2Jmz@O-Z2JI#& z)vvgp#woW%B2k)MFP+$4MQ8mP`f_UNG>ePhwLRfmGT*T~+tAM|br~-wrFBikN3r%L zWf2np0*U)5sAdP~lXBD07@lQg+H*J`24|J>J)~rt_c;MbZ~LVjMXB@TLN6B#D!HCt z8Iadc~+WT$1xhLwN49P~TIasY<)ZfKB6?5qJ z_SaAL_i}2kX?W1CpVlAZ*_$e2x7{4{PykXty+0~ru!OS25aMJwe`2LWCS}wd6pZ;! z^iV+&MRNkV{^kU_-(TVtmk6*DL!y%)e~lC75tZR)yOlq{I}!PtLZo=mbt3Y2#o(e% zSGYi-PnUnzZ{Gh_<=^p;t9*_m zq)7|?gklaZ=a-d2hX2I*Yo%?Bvve_`=!`Yc_-{N%QE3c2YgnZjN5f4GR8adNvc4*n z(V#8HGk*fxp=MFFY7%HPQEhT$*r`cj+hLrHC@4ZauK8{GP6e}AyCZ||8)yZ7wH|NFX~-gs-@+UVfEtuyxQ+p}EgOem?b zfMxrIg+05KbjWt3JUG4Ru4OT1zKUzv4ks+?G8I%CIo;lg3OuAJa8{{U9hei18MZ(2 zuEmMKtcz=LqBO^f!n+nH0z1mPmdfpGT`2ocn`=3y(7@qTl>R}9KlDwHR4dn`cu%9# zmJ$iabL@m1&r%rNX9A9Aqkn#<+ifCpIn*4s2A$1OW>sMxWz1(##itBxE<%3)xY$pu&2N#yyTfS(1 z%e&oMzE~LTj$^cesc2`TbAEf^-ulJkybselPSe840`5(pXlERoo;%GhICpRT5_W}) z37UJ$IHX4$bit@3n)(SNT=UU7&Z7}QMj$X-^r?Wad+!?jj-AUkB z5wQiwD$jvo%e{4+mm!Yev9^v2N4s73_Hi79*pSGyj}YCxU7Tnjj*sTsZFDv^yA2Q! zJIvjwU|+sii07#g5x2H6He$R8wqtks4)W?-xZ?!b6**+$8Kb6J-8MrG3AKP-`Vf8h zB&@+?zS~$4DZxrjoQ!}X+k~i`uGGSnP|%uffd)L3DfZ!nDz$Tp#!1vI({+wR1W;f2xtR9V{WYo7I{^iFerzFGf$fM*Lk8X4u>+ zEkfpl**{^6+}h%H6#R%xhv_V6`cFTiUL%f^lPHp6bcC@UF}jti5~y1lkg`FpV0*(S zP|sO+T*kGO%(|mYBcjwanfV_W_c|jPTVs3*wxeL;gy_}ujsg;gDsrQZUZlk3SddCF zHr7LrkDA^;K#!%{f@^9SiPK}EmQnfJi&o)lU>MW6xLNXWV^M2UL$k0zQG+cwu1N#H zT$rYW4%-}X-g9r%6sfrym`3@YIF-~SfaT3md##W9^;aeW*NIXhXNS=gP=h5V(h!$}(x+>{=KAr3)UB29SU$lNuqF|1#L?;XN1gp044(DTxpADe&dO643^$4QQz~uO&>te8X z^y@W+$i{xktRd;*R^n1Xp{AQpX!?LiZxWj;53KZYwI)uEA03HKk7?YngA~h7QEt6^ zX<_H$QhGQBavj0;TgWIQ{U%lNjZm-B9yB&OtwBHeC&5n(v498Xg%e1!7PZn8<(6S^ zbz0!gFxyziWmsJhL{(0^)sQLQq}$d&^;U6W&`uTgV4F3Gc-iR3qunPua^`Q6S+ zP1NotXXzR9NJf_i9aB>ip}WV0Cs}{B((jLGuTNdx;~p|r%Lvo$ui{rGOrla6+vqn2WZbg)Na@rdX#j=HG%z}{tMYz~Rw!4t-a;U1Hd+@*Vs zje*<+sGQw%wBQ2tqsecEr|8c-&WsO7FJQ`C;*gf@$SjG2q%sI9W{A~sW{NN7=3WUD zlc4Xlb=qRxPI1G*+Vr7MjJn;3xlNw;Bbc1+v)E|gJDrtvwPvj4=8NTRE zk;X}Rps!R);T(>8niMUWF7PszY@fcI`+$sWiV@3|qOLb#hZL%?5*H~XKv4&Qk$4m- za0HbuLiDMd01Q#YoY0mcip~M-CbBOYE3Y?Z>JzeCo7SR=-r+h$i=s3bWm|B(U1W0( z3^%b^nvOb-H#^NjobBhwdX5hcKG4LrKse0EDN>4Qo5%{vQ>H9teAIXtty^q^X5td3 zh-^G-Q<_iC8H<*y)%PfafeJ0~Aci^hO_aw(1xMKbr;s7(8lxsERx#fY8x+(p#!7&L zHqNUhE!-0PW14Ur)m;Qs1( zvcMY{S#H#gZ3cSp(%-k4YNf&8KKbTkqfz7?jxoK1hE=v3%ev3he_^ah4f*1x10eer z6)?P-(`wYX$tYtW+`jS+wv`k~v6nA(wZyYH<0rpsX_98Gl6Ok?EnveH1q@Q0$UGDG zV=W29o>DQz z)HMt-#*M`Mj)vvxLo;9(=@GSgDO^g&=7JtjGF4dVlKtG^tj-g zTzFd2i_&1VLYMCcTxl|_HS#uUi!z50yCQn?5cai1$I#pK_`o>OW*msC1_5o3X`0ps z`?(~AJrBw{)NIfv<}h)riw`Rg5X+tQKiF{c)UpVhMLYO@R0gE9O8+Qo`5}gw87Ep7 zk%#i5L|x54EHT(@ z&Q;;t&p;og*(Vt^w#vwZOiQ+q`55;n4Nlvi8LyzHBQ%>$$-28ZOM;mRxE+qF>T!~csthhdh`#Nfm`g9KvUEMzJh_urgu}CE*uY?9A z=7R0d4uj=vdLqlBN<);z(QXf17(X1jQ+!SsT+@Xj4zd|_qutw1l0G*K&T*%kQ(4>p`8vIMbV6V;Kd0I6X`AcKhY*FKCzcr@q2JZO3 zOpA)Lh7GCOs~xNexi|mvc)i`ie{ukbQ%8A47%b%=67dcr*gSIH7*pf@o%SkiJ9d}m zm2n!wBF#GXG0~L@N8BmAD!ypJN?~oi+gV#5c{#IJhf&3VjR>wQ^ML#{as85|b({*& zM`^UXie8)FCFG)kJAv25HBlA;4jjUPd8?>Y-rwo14%+)YM0tI_`${PFnuj`TB06!G z>J24n^;=jp7~nulkACvTxFo+wgWf~sn{tLqc&|i(fT`JnBlGGuZ_al&9I*!GS?-X% zCEwEhqnfwo`?K_NBgFcllZ$?vHkZ|gmpTml?fL%3+s59JkAi;)_RgGn35>WF+kKZd z|JQIB9>GLptJUv%c9D1I!<{Cm-8uy(S(uFl+usv!FN~KHP}Y^X7>(wo$0IpqyBDY^ zkN4hqt$}l1s9mR-Ui`>w2_LxxvHHHabdqTeUym}cR1U^m1&Lt$2jUuV*-8@Pr5A$A;xwE7L^~gh>+>@0Anzb}p=^7pHa-+*fYLUqegDJp z@}T^FWYh6x>}qQH2pa`s83;$?HYkHaS%GRzev~yM=zF-{9JE)fHTE&NTtsvBq=bc# zmz8rF_SYxkxhZ)`)XPk;}O!9soBrOi+R%iNh4yXui&nX&P7-LES6QWvnXmN zx@Rzh9_@1_6VshSS$%#^vp$1>RHQ3`&ui94_bq1lFKS+B;tN_ELtI+WS})XQf(n81 z#klNSg3=uw1RvQ!JZaBYr(cSPmUtA5ywwoNF6KYWzE<{`4dgehew7m zPtjP~U`}I6tLY#3GFxN$mE63Oq(-oz1yS&rBy}NIh|IE*F;7KIiPAvF|Y4wh$` zh#0fq8@c_f6RN~KGYlR$rJOn(U0zaM6zYFX3n-w?-s)n50wu!f%-9l2B+;W!QXl%d zW{+8fyc+&S&U^+ zjkPh(NTfI7)4qrm@y`?DFVR!PW9EhIpZGM}OTV3u1hpwgK{R1@Qy8m9Hx-psTsMU# zEA&$#DCuMScP7*)uNejpo>HF_1AJbuM0H!R{kx&v3}tbXFvDxcR#2jUMg~N!e@|PL z&-PEjU)81~CaCG}=PVmUrOhF_rj%TZOQ7L$C0l8DwDZ$!JJI-3L8_FWpJC#d z@Dtq>)uvn6JBMi5oQAE+&7yI1pv)_*+3LRl4RuH;@JrOGxNYZ)|xqd z>{w#^mj!;F8c!TOXlYS8y&XNMv0r(OPSnD$G2P9KZ=D`pnj<8P=5<7?fQjE|@ui4q zlN-;Iwk-1k@qR=lf71I~Z4TDn*pICVv|UK5Y*r}7>0iEuUbYXYAKqA@<}tskkTfZzrYV0mj10M z0Fj-Kow^AJ?-iJet?EjLjH{4@8l6JZzfUMMy;d09cRHbIUQoIOK(_zG?h3@9d#%_4 zP_@QwSDoG3xgQ7C_Ev`i-C`54qC{gq8Zm3riOYZHEcaw8xT^Bu5if22 zuOxCP$B*tLiOMcqgqpzwU!3H^xg|v?>;}SF2vOC76D1gOqYP@=^u~!6j91z2X|qSr z@SJ4Hr$wpLb2l?bhr#YL@MhT)7m6r6R`EJB+gwN{sWc}L zwudD%B(n8VqmrwSpP9+YNXUdu1Ema`l}Zl!-TmGEVRsyndlKhl zaXttH;u~At+uxBhgr?VXIqBw@oYe6Cwz#|$r}A|@+$JX4;sP*EIY}L)6Yt06sJ(`u zVCMK7&XY@ioH#!rr#v)UDCpGqMRLqtR0-m=N}1u41SZ?dFPf7Q%y49S)5)@Ru^eA0 ztJ;)KJ6U!vo?{fKtUu^A(4Uyo&ua;4XHfRD(>8u)DfkDnGndQ(PUgB4;3^Flm&(C` z3ymjh6_;j zrI0e0{Dm)btIjjm#4 z?81qUw5ZU0WckGXxomnzaIZ}BDmM-VQU9B{;iRG_5Wpf;FmofV`;#YDi?3+#;EH7; z42e-Rb7Pl!HGEM#AZf1eyopmOTiMocO1B-O_sV5 zB9C($Z7LEG;I_s3P`RxpM%{IaGq=+=;}L-h8~Td0bbEGi&CZP^wZy%c?zC<{cZdAG zQ|RpA3Ot;hG6|AqDYq-*0tj5#j7`6&)yQ$Vcn_M-i8SvxAuot&#pI8ggR>FwMV=Fc z_`%GbwBa++rue$>f!C?(10&T2Gk2b#heB0MFmo4#G}#5r61^^#C5or+>N6)*TDqHm zGVAV|pOQ!rOljo6bZv!^d$3bKHP*Dueu+->Al>dO=;4*Px~G;?P2%79*serInFi6K zLCF~Vj4!jXSTonO75=$+4E@x@MKK$9WuL4NlR>l`54AEO4~1mKqbENXHV+lZb5m&}aH4>b@m7Lc9kD?qbEsApRTP0C2@|8e^ z-54{|Wh)&xRcDV}n;Lr??8(aFYvk}EZaPN^sL!(dNYY5J6FY_D<}EG3eU8E%&DCd$ctl~nG--+86^8?@JO^7kOB za+(@{gVG}uRgiXR)<4~l3Onb@siB4Bi57!{m7Y0hkCfoT%Bo!z8^h^vn_4006aw}L03ECaOQ}XfJ8f0 zk2st;zru9CP_TP>=4I|(Ix$?x%6+u070}J${@~yWjtyQH#aEHW1^l!IN4XJd)S7@G z;O?uXGej*zdkcdnu1LVe3`uKL)U{gF+WoXF6j+Q;n~h7Dh%ai1%Yx(O=s|qlzigRC zT5Kl2Zh3|zY;NTNWoP2lZ<4$;mu5k-!6VJ0+{Bs8*7bBiZ5fvbPAKDYy)byh)H5!5 z=@x8v3T7Tu%5#b__jHK~4=y+GY8&|^kCj5_hm<3wZC-OC^-y+i0K9=} z&PjQrqWDTeJ&fJmWl&195>lS&!29qpIHN>>FSaP%4yU@F1D87*j9cQQS2&wcvRg?h zk6`Ql4W&dIquh1>$Z}C_cK?+-u}4+VOw;A?apl}katg3wmD5q;A|b46XC7WX~fwu6DbD_SUS;~7)iqwq{^{udXn zYkL$Tw#}(pS$UqN={_xw7uEEM?n(co9eqkzmd>-aX?{FS(KjOq0P=PbJg2aTRIZ+b zU79nR53oG*T#X$P+hsGt^QJc0e155U2*Dw{3a~Se_{Aj4W2VU*7ov~ewM{c$FrjJY z*5xF?E_+l;blgT)2 zAYzX;KvrlOT;f5zzJ#xFr^z2KyumGvadNvtu8)^#*)^@<2ClNA ze3(0dm)lBdBhDMm@u*LKx>IP$c~61WN z_YFx!)SY-M?|lU(pw|>RiS&M3u}Umbh6t{^ZFg5a%^_>>#zA*;>QXwOfuaHhLyDS@d8vv$h#uK#RZeNz1>4?pC~|ua_1h+ zf3l!QX<2h8!}^rXFC_We#t5@Tk1W8aZ5?ZEjC1YWLH>-bT~VOx-tK2@p!WJB++yEK zZ$ENU_~&fVSH{~{Wj;*icAvMkuHR!^f%mlaFW9`; zvjUH%4X%|O^VhURkVN^(Dx;I)zivx3*5M()Ve>PGI_<+A-u;_4C=YkeZw}O~NNFX* zQV{I~GvBIpJu`FC88!axct57Tnn?$uqz?pCxl5Vfnc!09rHIY%YBh-L=}b}8ps^5! z@5c{n>3f<9L@l8}n>w{x8ObcFscn7VUPoGrmmg?LUCFexA|F50+BvWvqr9jd1#r6Z6vDnj#TtfCV z0&1v`ou6sL7}&`z(JiH>pKFlC-m~(e>n}82)qZ-!FSRA5+*)F$$EcwEO0%$%7ehY3k$!Nsx_hggcF z<-8(MXyr~kibVOHwsb#gH#dahYNPObO#(ro#CZs1CHR9j0t?hD+`L_u&L6d?hx%J| zx?u^^DvigVG-)F55FOF3AIc{THLsxJ&)SGbESEngur$wq(L52{B&{{5LmA_2V-w|{ zV1I0V|6es?GWaAIbBip__A0Wtc(xO!G;2E13 z=&NG3bN$!|N`%O=zw%~-S8bN_4=W3WwgWwS6zDJ~ppoDeigJXkLXZEPkfoe6jkAA{ zccesB@Z}k3 z^d96}qg<)+*?iK9kCR=+;3CpS&Y3X(osi|88wU5Ac+=x`7A7wInW?(J~qIr%%`nG(yLmTM<|Of zhYO@S=f@Q!P7)wla*CCPcD0KWfuq*X< z$CEV*Jv0X6Zk$}A?7;S_ZR__a%% zBDR?mSx+)`a^Frcdr@uli}Ek!E_W|G*_^$YmPdjUD|4g($w&`?l9xxCy||{Ny0dDt zCu+ggMA8VemvBkTOC1pwvzKItBt8+r&Fz!MBE2iW0RlI-pGCr7xfUWDK2dv#k#Zq0 z;=sHRc!vn_SH@JIXnZo4t`h%RS&#x!ub;j2gks$rPUD>Fq-G#5+}%TBUWT=i`vfvY)G9FNY9vc;{Wn&;hEO_qA+iF8Lq%CRA-26ZT4|W zSA4&LlN?uMgZGq#R#NOl#H5^7a76?q`C)05c^4oSm}HOxXbnuD`jSO<*Of}JF} zQh`y47{OhNQ`p+cR0^>%UpaLkJ{ZwSm@BiT1RAw?XMR#>#3b2 zx+;6lXdW$*#%_-M`q0(F;0EU8G?%Q2q^#F)68zLKxRwhC-sqm@C^~!KgOli|hr!;8 zqAORmIuX5k7+kX|Q7Wr$pG}uoxp$^(uqVCdTG}wBo0fbz3BA*gc#?>4BHpOpwY40A z6WLvCalS?2?Jaj?=c~BM_Ew|Sbf>kzo^ERu3X8=X8*w$6lM)vz$~K7dY)-V6*z>UM zvK=0teOPXubt1T2#s6&fhof5$`V@qCMQyvQAUNFYc05No%mvOW?e7wLwG6I%s|;-^ zY2_ee2`sY6$87CvV-H2IkLUJ<|Az-Mgj+lJ4?4IMZ%6?prgtLWquwN!cfRuM8DVf^ z2ldn(1e{sLKc|`!TzCfp*Yr?9eZj!B+>FIPAh>pwI4IS9G&rA|p5Ey0)Xxfon>g5@ z!GULxaGko?@Cz5N>*lcP2pO)&ZfY?`piOM;$4$Xi0Z*sAXBUJfvQGYnqBt%(KUq4$ zN~xOb7o=*k2b(z&z|uCefS77bTi=s3CgsgH zYE&e7tBR1C-i@^C$S8}8Jbgl;YTK!LZp^AD+cw3c7__1-NzxcfSaiz&O>D=_CH#Yi zI0oiy1ZwfJZv{%JG&g0_go-rEJq1ogZdR_%HB8aFRi+2%l;cz?%qTZ9v(TNJBI z*#zrE zh|r3XcpSwnFUD_CXsxcRXV<>*X70M(ZCn<-tduibW$+oSAP2LzWvd4%4iN$->q3lx zQurbnZfCCX_EtsfsS1s<1lf30%X53ZiA@~HQLTwPghn|KE(90D+L0m5v4QOrNsFXG zX7x{H>W*5ONOZ2-Y8(DkyK7h;6Q><$C&&p>1y*n;UHnmdYb3s12R?VU9aWf6ARcLs z=*s_Hv}$~@bA^`C6ABg$MT7-$*y>$1Ta6S>X_{*7+$~mTlk$?NWa*7M8|l^qQYi_G zU$mQs{+Z&Af6%{X@2)Ma5-S^r+l$H#^RgvZwcUeVhb+BTEkqCu7ns*RcJg293PWl> zdXQG`so{(e34Khj?`JxeY=nJ=9PF}slT}X=%@Alw_uy965ifeItTSgNWk{D^T!(P> z;?mib2`#uImc8%9i%W$88^tzJBGyf;M>M=T!J!k(1hc5OP|7+g z)di)zqNV*#{yk}e`2!kY`^=hM+lBoFM&r?6nDk=gVQRWQcy@h4eFbx~hfln(M5_%^ zID-A0dA(+aY_G#E{VT0B#j<|`g;=5=-8i|{%)b>6rgU%=%=WP?33Q759$wQd&CJRE$SBU6;BbKo(qMML=8v+H5FcsC z!o=H=2@}U?59>BQcX7{Rzs!kQ%{m6 zNI&=1+F&-j=LYxG#(lJI;IPSD;px6w)>l?GoAv#m9-q=)U`hAW=9!Vg#ok70Bbii~ zJ(Tbg4`7p<*SSBtypVMU;*{bdh{gLvu!!CRw9f7@Gb8XG80XvKZn`#Z9%>36<|45n zzxd|~@julkYT-fbq>Z1`MxNPnvcB51_!mgCLGOb#6N&Itl#QN%CK6=1=_2AlkMNgS znJ^eAJ!zEE2D1;DP|%CTf+tQl=#7tZLib%dBQN|V*~Rqhp_3Z0$xI)nc{)V7*p4Ce z9{qx?saah$w<@yJ57!2P$nGLrk6mwKaf~lXs1ZYtU>OpfjYh~B@nO@ikyXZ=TW@?6yM(KBhO8|V_Dh&*UcZdq%h@A*^=uHtxCWJ((tQ--=OlI> zJ)wS!Rk2535dAi<$C8oGK87uaXHXYW{LNxhDlu7=7B0RqN2DHGTNL*=EmkqDgJesG zjiOHc_)-H=r6!+HOK|u^c2tJbi;TaTluy#Of<;=3_qJ4P>dBgPGPo11kl&*K`a(r& ze~K2*iGurDPXn5Ls>WzUqC|Wx%@-2oI_Rfq0UT*U5K&Y?j$T`BC>4^5&ZGW9yKFG^ z^s*gUF=H;Eg0ISR+yy(^mwG1PQw9!9o zJ?pt8=Y(h_2^+b71(WjVSEm$&Lu5X+^{VGhs8^w!<{?wOs6nvC`=^<79gU4MbxnY2Zcd9ztb2 zP$)H;!;R|704P^3=pAvzyt~d`%+_dek|Z})NR3S%(3cdiX~b&Ax&~c#py;@SO{a*y zw0M@d+8(wBoz3*ZGpUG5gkDzcbq!5dBJlEJ0!i7ol%On><(xI&J6}<3%_4Gl!w`Oq zhTGX!PAW?S0^5netF*w_zKnryq>Bl$pA}Ek%&WCI0yPu$IwNYxZRa)q3mLC1T*xSl zfL^D?E+kFa@}yD|22$DUwe%KENy;C?Db$*%{|&Ls{S{jHIow_$4=p}IkVUYGe@15! zi|^(C!l&8!%Nq*^V#r1|FXonL#k|)P(S=8Vb%p#Pq_)`VO%sZ(ZW#uTns{s#XA2s` z5ehwVu}iO=7h%C42eWTx{h8U2@MpJ-ji-_)e+xVOnG{5=esY&kWl~^`OnvsP6Lg(N z6M?s}Ss#8arf^;F?S)>eu!(mRcTJ^lGRck@R%j6Ny;B<+Fq~B_N2F%nrA;SGC!vU0 z+r#Fb-d)m)6-97P3fi0~@En(Ba{io%Y@_f2nE3g&qvj~uCRBk&WU55t{cPaP(MUH_q5; zxm~K&9i#l8&e5-mORBREv5rgXESWwyasOdO|!exu%pHEbi3yC)t~bqy*_rYEF%RDz}%3#yuUzr%O<9_Z0B5Vto3{1f#A?l7s!M zf1va^ZL%7zu$9`h6%RX6fb@ASK(f!BwMC`K^-)_S(HEdH%#~&FUa6`ewS_N2Cz%#p z%KyHk%|%FVit!x{6B46F!}+e}9;zj)O6SDB=QpL6%8LBz_qCg<689`>L;KPB*xB{W zxc`!077y86kU<_?L~-03l#3H{vvPFmHnVDCkcL;S5Xol$CW)E zr~;9wZ;{r26$T5Y;YMnrO;0#f2T$S*B0B73INoRvqLXo*$o)ERpjXbLCkbe1+D&==7aIq4JH3N4Yg?h&l-+-`skXRTC-tUn|0lQYZu9); zXgVjp|Eop1k(#l*U)ADLcK^qQ7ro|&kAmkgYhq5x==E3I;vyMmcIOZ0%^vN3r2nEiqjx0#=cg6EGr6jN&YJbhoj6 zCyw64nLX}pqhyHLPM&RBy?L&J?o+kQu#rkk#LLCb&9X)lH|-lf&!JNFbkp+H)@z8H z=XS6IoJPklT%0?G?Zp}m<-lYotdA{2W}`W3tvk5V)TEBfvs*c%8R5ddo_pLehox&~ z-Cw9|G-$UQ102}W8;+ui{|eel#+kVj?AlT&czW=Q@Es6EsqI0#hl9wgI*=5Ii?T6} zT>Y!sZmOA!u?v{8UFvkBW(RlTRc1XUadCEqHz6US<4((6gcI3WRMNhm zL!FlUq+;$Q)>VRUYPPZ;OZ9OwJ9YI7m#@V3Rqa&j3LPo+x~H%Pn6~WcWUkDn+C(7k z-f6DFT6GlNi$mLP(u+q@HyY4R2t4PmI>A~C!~ntE)ildaSJ1XL(luktcEHHu2uW({ zRBhIsG)0n-8f?1?)n-o9@Sk-b)FeDw_7uyNmK^S?a>D9$&^ve?bXOkpd3T=N%a?c54X@hcZO-t zIA1&Nj#LeWFPhtcu+HqUz?A?ZVg6MtHb_a@$4HW+ZdWGaw7*u5EgWSY&D=x10mY_pr80Xx5fc zEnUmOh=hJ|n=p9Tq)kFQq<`N+W4STkIJ7vwur$ACVPSrGeh*6E2gIN-inGGv@k7L| zw~1xKx450~?6%pt>zJ{zF*-F`>+RM-HyTn3RFPbUK;v(ph&iVx7?$-UGP1er<%I+# z+rh`MToKHjZ92-{YNibucIU3o5EQe927+$=!{_7-YWOU53wl6EYsedYLivr4vyT1- zVXC6`kIenJlZf|Wrf(x9R|*w&@gb@Fu32u`+WY!&n(zj z(h25n$T`+Dv`#!LRHld4Nn6y;jWlzN!a;Gv^)j@b@zF&s-56b^a!ET;h#thuO|rwa0;dg0Ju%OumAPA(2_5vb)T*eZ z#46%mzC6D;zcjyhVVQb4tlXoQU(OhB722Mo?(M?h-V^VE8;iMnuBGC!&>YO&QZo#E zH#LkDG^6t+{#^_ls8|(4p1g##;@m@WB-%o7u3!+~e~LA%HQa4BI3l_ZnXIi~S7{Bw z*TpqNv3ae^8JFSmh1o?#^OF zXHip-a)%i05>ACM#W&F8JVpo$u$~_C7OYjoXg5t++RRPqVxr+w^90 zwC>(`(_E#C8>ht?Z{A_trsJ0u|O*nD9W)|7RKoH0MK_e}Ft!^i(-bPmkvgFRRz0nE*4DfD8Oee zyNbGY#*b{a2idB0C&o9d-dQPDbZWb2ZCkmI*{SWm)$?bsVRmYI)5^ATC$dx9=UE-U zel?d<^8>4+iSEvEx5J@zIE-sce7qPIzbtzY#I!X37scB*>EHiyGfD9a1*HPudaTx|L0Q>_i#{j+D!H zipJ#mi4lp&1=HWu&iPudK1wmlEyna&nIvPHiW-zn-K$KFq_CBHvvr3!ZGhsi z?2;b#U^^j1Y3G63i4JH7aSHlL{wX6$8xPWqs%*wNX+&80gEda5l@e!5B#n?(9ufu@ z%Z9#y8Up`Dp^H{2?!?63xG0G;DI{v9`nmDNqgy__A3SgWO5I$szI@<DJKj4 zxCteUkn4QF#Fu2+Tg{ElZhM%QHIfL6favj_L%|cY<7Og*p^+@2a5LPJ416F2HM-ZI=qF8U3c!ix< zn9YL}TV{f}r)mRN)RCzFi`n0uV{j@Zo}b1}S%pubXev1|+o|!Vn-d2le3Zr;E3^-@ zD*utBq?2cuaeqoe9-UIPc`{xRvCTcxuAbG-5c%!uyr+#n%g%e6+H>dq*;-(hnhWi3 z!NIiA%-#vv=h*df;1G5-thS?LX`LE>uAT90D$l9y=dsBjVUp?cty9a-H_xJ#mMB^_ z)^DAtynxNt2>vriLpU}4LVMHE7HxM^d=b0WBDjusf2WHePQ1UEO_Cb~)a4H+N-wcn zzT8&puBVsUJ;I>VT1SzLOu#$w{xWv)UuY?9KHdE0MC0Y9Xe2uWooKwm?jW+ekDc0n zr5%EFd#5|XudXA|ixk)qoT?t(vE|hKYwQjJ&3jqqYwet;+cMp?{yMwY z7o(zk%dfXH9*wujUS=nizoDpk_l|@J2a#eh_r^(P*x!_&X%cZ(^b6C8ybSwAh}AdO zHuZgrHgBP+uc(I?QzM%8mfC>&R?`t_S?8oZv1Q53|3%RtselB0n^uMk6Ot+CY7M>J z+!TP_Q$#FD6Pdga7tw=wd51aM054^B;mKAanck_HK)lBin~Iv_UTZyJiWtK;j0CCF z5I&fj9DJ8%94Q^tF-ggNiM(4ACIToq#4e#@L7PApk0N2--Uk5rb;(yAvWY<;3Av;Alo-e?JQN=`B0n-j28|N z1PeZhm+koBQrYw#J@CQY?(kuAu$Hc*QEHrRwDt>rQ_N;H{3;%?YZf?FplpV5xG&Z81-I2Cca6RpqYTb_`Jq!AZ4xs&-^80^Zf zNOK|yGX3UZRP&?4G&94I(3M+jW zO>M(gRUB#`f8r==?0fvAQ^cNvT>N4B?DzfWbU)C->vY9FWjm7chheaTwmQdUmqq#$ z?^7H2!#b_V(un`Y$Ju$nkGLLA7}Aeeb&jV1$}WBc!yZ!r{qzRa47zkBx?5~QQa(tZlvW`jilEJl^P#~fFhTK$Yss>o=%H~Did zgG2_HMEp)n{z9ubk}Znp-ks53GK?nCZ)HYP?FVze()@e0R%R)-!WW~08r|Xu>|bm6 z*fY-fb~aB&z0vxx`QP7|rbX>g&!NONzIL2AtS2!{>eT2HMyI}T+NpPlt>7!;-YP03 z^-ps2jA9&~bi@zeZ-t}!?Swq?Jtmxc*=*+LUUraO{7%cFrtvm?eNl9Zdq73>sN@iS zZ=D^AhLbsuQ{#WoqD+lzJz3;L zi?;M+v>)xKb87pqTDgYVwpa&px6QwWwkdyPn<9)Lm*m9$-?gm;Tb@1XANr^jF^N5N zo8u@;S(#0AX5rfYS<_@h#1sGGf^OkB;$P%%{;iE@@iJLFV-fK=eVRsyt(^!#N6l_G zI&%VEcnwz$tRA6e{-X`Ka&?KmDybDT@n5YnHQpIk_Ur%in@+_{W}hH4H<{T1iPX6T z;ZJPRk99JG(Zypl``9S0w^6;!Ajn9q`d7^Rx!-sR|7!b`~;X94R1Wo)8k-we^M+ ziHvp{S}~a9sS*w|VX#~*eo6_2LEX;gFetw& zU6Quq&937?hYC@FlK^TDiQj0qmd;*Gy4^Kz_96V9|L6qkP0kr`p%-U=fPyC++G<7ol?v zEP=ZVnpUm0;IHJ0*tn@nb2E0=vV+CdE4zYfH??XXqJu^5Rg4=pol4N{;ikp3_2$7M z^{N5-iW}OXt_Rlu9Bm{JT`X;il8=MM%c~h>J5CzAE3+L6|HaJ#2aDEYjC8w;R^AWh zpqiwXOeiTS~9nk%f3c{tJ#HgT}NKiDY2}!2}i7N zr#=kc?2_H;4yqK73sAPDKFRT*l6lR5`3n{6FO%Kg%UAEEgpbvZ6`$?z)B3^}pB*1U zl5yj0DUya5OP&zm^)N|yuK}-jtuRu_p0vd!mIsTgCkAOicW=9oARRSnv^qRkv|<@` za*?%W%^Y1pS}7yFCBR6_O8^ckOST4>KBY z3agZUoow_OafL_y!2!{A{$NS%lmMv>8i+UP+Vz7v4e9~Qj6nkhiu3%sgM-DpOXgDn!9ccEa8QLlT}yTrIoOO;z7^i; z^}1;CagZn0Of8u#q#Rv``{*ja)TOF;Gv!#yes42c*t=#2H978sN7+WPCfic@wg=cZ zwfXVE()H8)(WJ(X$^qIAKSMYov0OL9>tL=U$Bt){bvuo-9b`^uSBdT2$t^fvi&Q+Q zpY2c%WDxM{8o(7d?s`UHnWuX$9=|lc>=(hfzEL;@7>va!q5PxlS3i`~ zjkW3S`Nmv}_0~?|$bP^e!w=^MMxqYX?CbXS%(l>(fq~=cnsPvIXb?x!x!=cy*Zg{S zDejB-CO7?R6G*JOkz*T`;Lr{(qli9=uiBq8NbsM=iy++?rD&=>6O_=tZxEYq61ImN z1nUfARL&xRAV@bIK@q^226fUDm*@FeM%5%ik|he6B9Qo=P$a&a8SE!end3}Vfn?vz zV7bcyZf^8N&|yJGRrMj=xrMR+%jA`v1I#K2NQnh{Tb~IkK|9+h_h!)OLaaVJIhT%w z6VHCNRazxcd5@=^KaHH!cuEVmTlRwF7!Xbq*h5o2Z29cD4YtzFfP8X^)WsUOoCRP;CwZ((?q$`S19 zMuUP?D@a&ah3ZBzHc{P}l_X3|Y@bN08xb%k>uzJToltG37P;~Zhwi)5>K$M~tUPrZ z98M9o+q%jLr6A<4um(P8%i}T*2S8N`%mLU5aapk7o$5ISN%m(@BjwMo-_EnzXOm10 zxUO#3OTPY>5B&C?Z8hh>QMak5mk$vp+#yW*9h_`mSw581{+v9klBs=nk&fCT=}SKj zrSab}O#8L*XU9|z5$(TI3=`5^-66t+JA3Mi3_ED1hz^m_-^G(n^p9Ri&K*hy;jXUw zeKYXU<1O^65{;G)5oNerE!nOnG_+7taSBn8CQj!ZPZ?eSo zp)@zpm*cEhjh%wiq0a|p z6`1Q62MG=(mB$W>vj|wXa#`SWD2;uWr#Mv~yV9uX5Yc#?UzjMK?0npHs>_zeU5Ci{ zcL#+v%f>;CLuBxKf-F7Ndo>nNHhU<|_fDYP56S(r#aeRRfJvWi9%>oXLrD#mf-)e= zHmc;rp|-;51|^YIMjVQ(o#mkI1eFUs3_g^m#C<&l*hVCz7>D$*!Xe@odqHd7LogUZ zdj}ci_J`)$f4}F%i#`Jejs6~faPSbZdg$GIVzIS9)SUZyK}jweb-lNOQv5?H zw7XwWPFtL&IHZ>Q=LbnWJ4bRTN&Wso4n7+@mbkq`O85^5TI3rHsH1Tfy9A1kz8oSJ z|AL_9t-=Vk+wCF3g9p}<8y0&#l?QYRdv2va=q|R;#@ek+Vm=^`u;_JvX)5VXHZkA;xGKAfqI-{6_}Bg z9R;Vd*@Ygngym>`ym8)@cqkB%GONInPdElHsiq^U>z-f?oLxxOZ}s-J)lS|tcy@AB z@*sube*-$4M`v*+)jq%`OeHZ=d|m1|2!*;7ex$=KssN z1@U+@C~*whbpYDv<(@-jo(_;6sIMCK#UD1pI}t5D<4EmPeMVduGBq(XwS8g|zwK`H zh%6RMJjIc(P?(ff^W)e)&A8oSJOMEaiI>gabx(C1;5G zO@0Xn&h3558}Wu%^lZa=a~2taSP*^BaU8a`=qpFua}D|F(<6nYcr*V%pJ&87u$Z(- znZ%lkRq#_%{uB-3uHm z6J;vW*>Em?V5%V+V7F(amV^EX8)lj0aG!fju0b};F45wogAXvr@xHK%|CDO*q>lY4*K1*CH`pUxak%72sg`g9P^_`2m-7;u-?X*`WKrtm_+u!J@w6 zeRZ|wxl-e$j_q&7;z-)E{HWx>Y7zLd!04ojqyJQ}$2Tt|l>u_1Nym)px|cibzl#@a zM^KYiDKxKe6kNN|P=k1-v!EQ(YBBzmj*Sx+nMzE!+9bZpv3hrsm=*5Ci|y5pL~;Q# zd)5Rf3bz~LJG#*%>t18nr7Dr`Ylk1my>4hx=Ib33us8rKY!ya4e1j|d=j&nyb3j&s zN5+~w+`r&yXE^spLvXs!ClvHWG1Q+$EH^zN925N!{?YRFnEiqIldJkYy(f^fh#&%8 z@c?mwIJE9fBMRhDqFVhfG~RM?sHu}T8(KsHRnbVT$qC>vG)t&u0yyg~G#$SkbsNIY zi7)fSO(IucHI$8x`Ytp+G6ZhZ^{Fgyo7ypX+P2eV;C2$J;aeOH{`iO48avb8YI-`y7F=$$#oho!!X2=49}G$IgXo z2wi^p*_xyO1CDco7X3^7B>bASMIQ{&BdwFmnv=ta0`y2ZkhJFL|F9#$X6li4LEoAi z!AAm=NWZyn%?;tB0ZN3xVo9_!T66S&EWj9<=e5_|AU+-tt}26AvqtrzfB;YI7s~!v zYfcuQ2pfZXrQn(y!zUfbcTLNx9$QUYmhmluH8-A5)sh>VIlHj&)MtCG#-8Oa(gtfY zp8a$!Ijzjl6f>|k2lSbMC9A4?+U<^OPV+wNI4zNHK$Ks4A3Y2s?jw!gf9iGK(sqZ*W3uc9FWgZ z@8eu^1Ne%6GeM^M*==KM(;$7-an`{!NNY74`?Ubhr)^8uoZfsrVBJTz=ha(#aqGnz zjcdQ*S07)TS8Av3n~w4-p`O>+Z$mv>_k9ESFwfR)BVU-s@hc$V(F z6O11k8@!I2FArxQpaKm~2@Apbkx??uwsUCHmp(=%H9^$;*r0|(N$aD7;rzsag92`T z^JZ4U?V*Rrf+4dqVJUl`)DD%^RoQi0Ha zX+w#)eDzmG!I!LpNySbw!PjB$;dNB>E31gf_{1Mr_iFE z3T%-XBF`Z(Pv|6g^;PSS{^CqIHsj*V((`DYbwuH%b=p;aoCTJBL42ve z@-L23UkSC|UTU`X%iuB!{9p6I4_dvY2Jen9!3PyiUDm;inEN+rq-3Wo#>!3)4%;R# z1-3tfdN`VruFvF_%KgogK4SAbUHZ={w>Dmane}(irj*Vstq1ERm|On{;+A$XEfJ-33QJC z_H0ZT48uY02H)4d1S{8n91UCT$=Dg};diU6H?>@Xxpr}o2_vp4x13yZ`89^Djdh^d z*0SvU>m`^~$RpHUB`vz~Vyyb#WTb517#6Qqr*&Jo{x=bcSBM5qDb_A?`|J`t9g&6# zVwirn%_W#&I9YDppzWBA*~$6({}$dzfnshR?y3FLEx%g*r|iyOf;A4Ay&WMoEuEsc zWcYt;ORjTAcxnRuI`_XI4O8{V(rn9aJh%kU)T4qHo2rFNyCz?PxwbB7@$^3h!@L~x zR0Zqi?0-s?jI9sKU=XL2t2-{ilW;?jX00qWyO;3n>)3c0rv~jy`X=reYWJ*b(e0&@ z=mo|Pm0W^n;3iK!E3@sENiS2;Ft$0bh=oc)c?Gm&eks_O^W^igP5Lf+z%LCD^{A&J zC9X@@_6_P$z};l*@}?v2GN6^#|ytI47P#u$GKn(J1s|DoP((NiV%1R3Sx!V^;#P>grY_)&l`Fh!;_F zIo;MhV?0~3Nkd7T^D5I<( zC8iM9#Fuh;gQ$-KOQ=ZCDmR3k4Xh!xinyf9HcAS;BoKLdRitCr98neNpqBJ2x3RXT z)-XFEjvepV%<-Wl4(AkZlBh9cOVnj5ORbG1KP{_PW4gDNJbJ|Kt?f~=HrI5E#NMe1 zYH>X|Gr1#ca}AazV_kUbfgD72 zC1F)|bQ#iX*OCdk<1tK*QYn5Pg{ z3N(A;a{|{1QaEBUeUUS4!W?J{Of~}Z$+8jQ?%HG&7acLSQ1{7PtWn&=PSOH*gJ~kW&&?&H5jxB@bRD>)&Qa48+|A6FVm- zCwESqHl5yWfPJ@Q?3A22*w$_F0mzA70Y;xh%58Dokt50EFKvCj*>2#DQNB!%!gH!4 zYvsbT#5+4i;h1pbTpc);8hhKgaX@t5D1nJFjfMAzyum@d%CL)^Q_oMY)>k=l`7&x|lffKAtAY@2bS6bCQcO@415`_rg)8k{lC+6Im6y2fHziKf^R5qRVpF=-WL1FmOe0~|-AgNV9*$pgHF zK>5_rzWZXO(~Tv%!jSCLCAcDQ49Ltqg-CEZmj4V7k*?zPo{q@KNdrkMH!`}xh$5r& zYRP%Sij1&KFz)&q>dN_sj*}?D82d2OEFdMLXcW_7oI>NN$w@TDpP8PSm?Fu80hZ*; zL{6uAWbY?w)gr0$Ysr&VCz7%Ui^yuGJ}s8h2&^WiaZO`-c#}DZ8~J^>4Uajy^GS?& z1q4|9LCAmX#{PAujYjPU6NT+2jtUUJlFIN-8y)OU@eNjBfmLws#6!lfgpRW7uWIf) zug1>sheHllii@kYv6YhCO&xV_&M~Ts`pObKvzA;pd`^o&>I(s>IYE+y-4B=KQTtDk zI>T%lS+!*BEXNj{pHXRIMUq)cC^z%xjvP8bxGL}lhB%xz<+WUcy*tZC=>wq|v{lsz z?~^R@a?BlWj1s6rGIsN!g`~F_Vn}*+ne7r5tH=mmj4khn60)h6c8=ZB;Hwg{=@Q_4 zWx7u8yoQ_!%W|cDg&aA&o#n{E@xVRM8!W=nd~wG3|6`M~4@Sg>Vi`r&*fDaU(fbda3w#8CuwI zSARmgwY0b0>n<&#S}UcF2yjqGf95Z;1$PU~M)8=H!4~1GgrWeudzn}yw{*h*PQL=T zthdl&k$X7WomwJeeQ~(Zi2P58FeJ5)6o$ZHTW%;k3^}2A-cvYgMIcUc_;77kCHRnx z-E%|{$OCIhZv+v@5Zii<-OInSP|Uix*t;-^gaKPZFB5xc3lX=6S?xQ*bgtu=r)>~YL{uZ8mbXUX zyiZU}ETfyUW8)5m#?~ko(=_G=?Y-?mTU-%dVrUu4*^+^qj27buIah9wt)<3nr$w$W z9%ZwZT(8)GOZlN`l0;d@1xg~2isCLx0?P!cX~f9)5Tj7e`*VTHL`=u3Ty|a>9iNm5 zjt?he3quU^b`342f=kx+fLKD3tVLs~nN=YdZgo|P zNlMQhhA)LQ+MKmt1g0~rD9;A(jms8;LTLb$Be^II%7pvC@M>^omVXWp%8o0X)1HXT zqJ`+p-R4^wQABp(5G!MqRl-m+LS27ltc8-KO*%`u3(>na_Aq2i=4E0sUuCR=7CXc? z6e5RIqTi%CS%jpyq_W8vs`RHkgK{ENTxba< zX82GlK2ru?uhqf1pS}ECUKGZak{BVsIvx0k%gF+@wCWgO$N z>U2<&6$%Zj<`5rIODUB4mKfu`$(BhhgvAM{1HNH0~{is zr=^j*a1`UrqlgTWq!~{x<3rsM}d~q+faaKBf{ovT_Ch{KO-$T&Iqw;_(u^{OS z=7iuJ+m1rsRa=6QHZmIP`xp7$EHov8);SOK4?SDjk`-cxlYSN^$R9K`e}tvX(EQPb zfeShs;wQLQVs-_;7QVnAr&oH2LBDQ5BvT2ETs@^T4S%d*!du2G+#6|}Gcj9U$VmhU z!_aI4M+_mI7=ynYiD!CbE$Ix)GqE6Mn63#v#b+%tTqN9_l@N&+gS5n3#y5o!Vaskr ztF=e3+DR7TG4oC=bw05Z8}{3fKTkL8*-4g%`{O|-BjvEfqe+|b3b4fdK~j87&67Mn zNrA6-LySTMB?&1yf(V6c2W z2e`Ko0f`t}-Veo}YK;P(Sm46}lN6eK8QxIYTxK4~;zIWFzs-rt9tg6g~by{VnsVV}1nk=C0&Z9hL@K814#Gie?T zrZyRSvRQ>Nn->0-GfBS@F)#n`Vl_{&$nmp5-vbv(s zM4>Ns8zoNZnHod07OFe6S!-gq;$R;kL}%{AeO8r;o0Fu0lX=LhOk5Us zbglMmAyD;BW1dZw#|mu;j<3Y?M-Z~-gemQF1C*A)J57+`P5Gn{B+h&#nBGa&8hogr1jnfQ zoN8c(KTr>*capm1+Uu8B(Ssa&jUaoZwPdMGP&G7*3mOr0IaMKxw%CIB73TR9%W6}3 zmjKA@_Tz=V1lw)0n6ESs;N_uF;;ATPuQDrvijmc4Ta6`N2^59$)#fq15R_a>6|la> zJf;_b6`Li?-6fQGRlxgN^VmZG-i6jutA`GXWDBBL{5tatYc5jdCYaLLgn}PQiu?M) zSo;k|;{bSZar<~`Sjp%B)*DOs@Hd48IByONaNc5e*qPw3p_)uxwadP}I(h z%oBvVgr)}c`=zCU@zP>omlZz8}7s^j>3L zr_oo+nmXhaGMA{df)ym72hP%3t)bO~_R~VpV5T$V_^F z;o3bFHq+}T3MDEP1Af5V5Vst7ibRP3OQRB`9ZnPCgN5GvLnVCjhl8gV;r>XN2mffG z2me^mH1thw@ps=G|G3#3-I`t@^BbyNVSX3d-{H;ei$*lJk)(g*YRv7kaI0;ht0a+M zh7|D=P+RhiyBE6MCJwOF=kf7=eRieYX|{T7K0it5N2&SzNlYCF+-7TbWg#Bwrx12J zpw8m}PPZqI-$c>-X;jBJAS)q56xh$yk}EmDrki}Ffo5|x8T)Lo$q}DYfB0tm=ZqF* zsYloKDrCw-<10-0fsz}4yKURNY{q7Z+%Fu9X4l7=V|QyL(iv0o`n z?zpik_AF|&U#%sl8}m|Dk%;|QH{N~=^^okk3`+4tq5hiL!zoX~*&T&ZxV~RqP}IGn8=fid5dvr;Ru_@ zmJ8o5TrPa4#B$-g!M>ZU_4mS-3*Qf1F8mu{(TE}kl$bnV6;=!d;leFQ0e@^{Vi6VUcAw4sr^LhvKPgNv%&qhX z-Np8K+~!3g`KeicYto-aA5q|cW*)zDfv;oRfxG-D96v8CIHKr+aMWkJ`{U*Di^9l| z;pukTa|hzF{IbxwWLQLy7LV*#=0QTYc-WBW$_>5;7LV`OW^0TfeAUGEn=%Yl!oVn9 z{H=KuG;e?$S$$!a-&PWZ@OQQ3Ci!uvqAnRi8EmUjeiZ)S*OD7nz@G;DQON&LOKw~N zc~xQmv6kGl0(w34k7B@|3X{W%^wFVYC4TDuxt3h3aIkmm;V307WTHm%mk>ivC@MOP zzZNdO!8MMjqA~wlp?8&aeNhbidtn(0z_Y88&`l&>F8?T$3!$MFg1x0i1zYxig#i!Y z$yTsYJo{&1p)?^8Ep?(W{L5ZM=pkX%A^f{A5aI1IsX8ZK>i;RUEgZ`b!h(wnOOFgx zP`2f6zZI|3>ruj>w@|PgwTZGL8ydtY#d@p>OX90!uGeEvVlv-co8udFm!p+sJ@PF2 z>17W)E4tkEsN|mx8J3828nf&++IXL|9(zIc5(ulra_f;z*4_3L zRg5BG>?yFIy;9ffye;qogFFZ%VgI!#_r8-;$8+3dPt(ux98WD{uE zSVJs`wvCJZIv0pjTYzyq2c0WFgyZ$PLi7dB*3FQ6d z_7Y0v;|G7$YOKd;57B)rO3{z5#`-~(yvzEl1qNkQoKx?w^l-SZLONmnF@>2VbtgB9 zomVeh#tRqU!sXxA+S2JaDwh@pV#PBiQTSUxZn~f z>W$@Ply$^Qe@mfpQ!%yY(73XS2j3bzFn%v{{J^eb_Oh|UUpX+=dMqB%Nx_Jg8%wSD z{O|gcQ6|DB2c=6FundGGkm+kILIdK+SISh@pHft&vc4W(rn3IjGG!|3CwyfpRPVuG zc(;DiI24Cs0(KY$85iU$<%^!2GDwwA(&=*bS@{{|r>8n){j{e>h7i-2ua^Vc?x|Fg zVisR99dPu3@liko=AH3cKQp2_l&98`2adK5MP3pq&vs4Ldo$C#3(U@mol|I3PLf3u zFIm40y%Xq2RUbP(3wXZX=r6Ka^Hh2SuTnXq?YLM;gO=qeqTro|?g|<_QtWv0c9`TL zrLvzd_oB$#DbAy%%)-+cz+ z`i9Aa%~8}-H4}ia(bQ8i6PPa*D%Z@G78-JA(VB}63_0IeoIWCB@wC-47OZT|HWX$r z3z&ms{S6F1!rYButg0OJ>hmN8KdL5WG#Nc3Ee}EuxPCP=#veutb*hFakO-tzXnFdK#(;vclR$=6L zGhckCjLv@Rn-e$3*(gIbr8Gh&1$3jrr0`=N-mF07>_{5jKBJc0Z`89QXFiaGnWCR< zXcbp<@_^3}S`ZwIWzQ$;Z&|2^w+d8!0ag9sQ^s4n#uB225Jm+x)LL;d{&^MzpxcTy zFfRPr?$%4=Wdgd*h!pUdBkv0-_u;9*no|{Lwn;~iT8U)+ZF6dcR9I=5_cMi31ZyZ^ zxm`~AhlYh^>sbICh3EF7oE(8QTaQpB6&lL(!?~i3MYGk%Ms7TgJBXBPF%IOymzTSu zbiMR=1fQ8#JI4sEco^ntK|$QUW8f^OXYXW8U#Ek+bFup(Sa&h-Vp=jndD20Q$Nj@+ zUGAFSLJ(Nf+=D&QXSR_^#hj~PXY@9-vqFb>1H)j8Gqa88%(Xao8dzkeT9Qrd zm9|spQ@V?}XO4?uV3h3@W|p5VbfuJwxtD!-F0HB+#Kr@^cTU!x0hg(C^}IyXFwPCd zr0#*1#v~ZbB7pl8MvV=_uCoz)k^r+|u42vrIRsbHv@-=l?)kQ2ig^jlmt?aBIi9F?S&A84qu&}mVz$|Cl68cR!ETII`L z1J8*u4hzr?8}w|W&r{4%Fn7V=xM8LzJek3X0^SzwPjp_)HRg6zpm?`v)nWkccG66C z6s>y@oZ5_F`~R~me49B6ZpSIKU5);(c)l(ok8ji3=0#CaR4zHGTx<*~P}xNbKATD` zIN}GsEE)jmvPb#!B5ujrD+(Q>7;s;wR;l|VQDA$>9@;!$B}OQrL%Cv4)|W(q?~6X1 zjb)ls!q}jF6OP1W)e%vU2jY~H4>E9xitP$>W2Fd5b~#AA&g>P1B;Jv9x^w8M5szS> zSV|Wl7z)Ssi)L&FE|lAf1}hb$aX@sD^TV#sHuy1xD3v--q&4#3x0~(720x(_h2wsr zs3#A{%KW@2p^QRtzNm@IL6M0gUaRgel1;g27E$0w=LjlD{Q>Sdm<<7GrxSCBjkq_2A-ZSZRt}SggOpaHtOv zM*(w0o}sBXnvG>BKm`?hs5o6&4qv@W(DX3Tj3^9clWyCrsNoMU){TCZ`05cNQE7~* z*~TFfc{nRdsUPVkTmq(}?y`SW6#PfIXJrPzvw}X*71Zm|ZYOUdsP|C-gR(x^j52C4 zk8xYe6jy&`wvQIceE*nIgi%-?D@u4hvc|QrogVEv#JjM^iR-)#3{|Gw<7>Qiy9JVB zU*Qbn34VeXI^DXCuS#>^iSEhO?qa3AEEWFvU`C6n$b$V z646f)S#g8tPD7l8jp77KuUO|V2T-l2Z4_{n;jpV_T)@$EWU<0bK`{fnnbiq;|6FT1 zE!U2s9Glea;zbwuYHNIKOL-Z-xRMh`bUuSQoGcDkBOZZ9$sVFS3w~v*2vDA@=7boeX zaJ|8^72HC)iP_R9sBaXZgeeEs?@qQ8je`6p`&JLeo2-*wJk@WuPgWYR)w`IY$bXAR zfim*zdgH+;EN`t@7lp}z=neX!pubIcHdDA+^c!zy9 zm+^(8nC*2N&AEnXlMsdAownXXpdvmH^ReV+Pyf5bhNgGeS*P`Oosd}foz{A0)!M#7H(SeF|aiue8 z$1BGN0+pk(gZ*GmGc0vH0uhU+W%tY|27V~#0*)Mnb$)jbKhqe6_`@Yf$`7PhP?e9A z9H~H9eWV`^oETE3+!|MmYd)6K$xW3j^4=?Rv~sG;wqNnHL8pxsp2~_Ez^8JWr7%gzK(xMua*%d^rAn~- zX|a8)#6ynpWW9=`M)aASMj6?Ncq{lJjOnvEHv^>T2Hmb`WD+%`&l!0zEY>W(QMekf zX`e6hj!=Uk1jJt`@{TE*ic0XsoLgk1RQPzfA~a_^SP0MUiRa*#icA_iT|#?#Q7Z6d zd%do!K*cr1SBgv~_cfF)nC+rxPCTQ&TBHL4Q?FHV4fD04xIsr$-F<)E&PF(7RL8-t zxn4Wl@QKogZxnfLJ~#ze_3?ePJkDLM&a%u~M~(AaMIn(rPRa9l75#R3q;%eUr8if> z1b?TmFx{v_6Y6)d~*ihdDh)i%`#Z8WjfpqY9Wijq@rj4S!seu~0M^ z{THIW?@x-tBaVk35spXm)1vs8qe(mJN6q@5g?aiRgvLL&Q@GMLBOQT-Bp*)Jy*X+; zzbIP4a4fJVeN63&cI=m7!AtcO@~^_YfkebwjwA8Q_nf2n`0Jcb!HTp}j5r=J-(Fbh zr43`Fu>K~@F{oITHu6y@e_NDRl?u~E=rTA^IbZy{oL1K^#)|YYmAiFXyuW7DIDenh z**ga>@;tKCBns^xO6rjqZhvq<9MOov`p2BM$GL+AR_*qQDC~aph~_`1dfUMM$cz+x}4k z84HK2gi8Mx7GAKCrB@L}@$jEvdciQk`!}g4ZiV&PzjE3yD;9>K)0&G%4esAzfyUlO zuU*Xn|0isjBoPfKdvS45+I*=(x^zQQG=l*h#llO?3JzyOt!PqZNa`Zr9lbEva9C01 z#YV=0>mKhP6r+I~E>)C1bKvZD;uC`#E?s0f6okvNf-h=lmnktc!c=dzd$NgY6vD%c zLQZ37{7#v8eYtGWdX?}|g(Y@`<2On-98t7CMQAA2i66<4McXTcf`vHoIF2f+7$F?u zwy-GiuPaJZa0H^}HGUvtMFUX|VMPsOebI{EY>^X%WkXS3Qo#bAiMt}AP>mO*>{V3R zRS{9RHWsNeg${kxZ&jEsn~KJh;;7HImzq@;dK)$u*=vrgrJZhx;@stmf+3D+cXPn< zO7Rou@&omaAy?6~i-lDn-!&$FkB!SkR!NG_2rp2U|SCs}?0{+z3(mA#Z+*;^xssDU&?3b<}|F6K#p2 zuwSi~oNY7*)|0~l*z0p0RJ$(A9yU>Q98*iqs!T`40OaaL^&O&ZTbzoC;{ov9$%bp> zo-d&%jy1~M+0xeCL~X-y;v|f$=V{{L*8(@e${7`cdQIa}4*n$F2a>($x#NxF4jj9u zf#`-44E&gqJhP^DJ6(c5fR_G#=wej$0XxDBl3IYa63U9S{9iyy&?tMoox( zu8z37y^J$*?9iwD1b)(owu-Z4lBx6|>*ACR*D*@V>8VZwZ9I07Pgh<9@+4!q-5Km* zQbK8MX8o1VINoBp>pEw&;bcQymfpeuY+ zq~dayk|4pFY&g9zxV=Gez<5I=#6xIFcU~c|q=<&U2z?H^=JDM2bSp<&TiUa*FUrNXIj*6Aacg5kw%Hyu&T_WV`p zLhO#y(iZjiCoMVCK0wKIZx+|HrFp&Q3mqvHo1Nu>OrEAE&oM+nzL}k$W;9F4_4!VE zX>AmOo7sC``BZFi2ohj;Th0zl}$k1bEMRxF}S&^>piy zr^ljz-p*t6=|q><`-|6}+vju_U}b?k9~wpY9dcmrYBdn$#?yU{$G8zw(vx&iRNv8~ zjS_M_E!&L(f2SO#EN7>sqF~?I-j85YmXXd6NT~-oqHx^B-YYh7DCN^pDDG-+L%31E z&vg08f+#$9^B4w&UGlOhIyxb$siIKbJ$Oh9y*97Ch{AIZd!^uE-Ey~&PVC}p@hDvP zv@=X5F1@oy6qb7xW5M~~HX>kAG#!QI-nGE~AyLrJwGaJCPAP{MWzEv;HTF$am}gDf{cw==*{p0eirAJH zGAmo)%j+n}^S0*^G%vKei!IqyDGK(29r%zHB`u6s>s>a%5-1M+BUx5~8Et#Qr?8nD zmVJSv*s(hYdJm~}1pF0f-y_nJL+f7v~a2C^qW6kqP^Rz?C^ug;R5tub17g%m<43Ymlrq*44P#Bcw!M$0EojRn4zF&~~QQ5Gp2G9#k}sX&jWx zshDwja0tJurd}>An!IcCj#eG)T8TC}U*?l@uOn!FQ%%@VX_&M^NqF{i|ie0-BUC8 zNPsQIkKx5d(E!ImR~l`fiAVF2qToiLQI2OuvFxQqjzz6tY(pnOcraKg=72>D8f_ zT64fzrO@CtMNy+16E1yRs2}c~7ou;s{I>iZ>UzbBRKpOOBV#TZ%FE zx0XHv%@88%B#%HxvGi?W6Bifd#`E&+VPXRg%Av_SlB0(6j-n`xI_g#kDBo!pR-{o_ z)ykN6&#DTeCR3m?oe94VR#MIGYY#u%OS_>kjR6P?uIFM8s`!N;0D zVjM2Vu_l}vG!Hd>)Hs2}iUK`{nm%S6BjC?wC-!wpKWtdIEA{$ZR zSl8u@LW}cLnlVy)dZ7UH6(=Y#H5EAvwfzloX(xDPuC$BCZp-e$%&a$ zCZ}d5rHC#??Eivse8$0k<_KRTXgjP-|AQ|YixL4mjiywk(y)LuSC@q&_n$J~Yq!wN zkCXvy)UM!7NvE0VZpiQ@BLSL65PJV8XAI@|M?o3J0xeB8d>Pi4+IsA-XJNAHD=^@r z=mrjyMNq~77K4^^ICw$Kz~{eGOV-iU-8Vf~Z*~{y&*D||$*+n}65f7ezx)_}7Jc$- z!XS%JqOyixg_42DgMg=?P|1d`8}3!~*MQZb>#+eLNiIdtGN|lVnql^fV0{BUSX2Yn z?Ju;$A=oezh+H;>nStv&tFqoU^lSFav;aXkH+-{rddb1j01*gm zAiI`LRx)d_0*0vqJ2JDjjz%aty;@I(;Mcquk>Mr<|G=1R+ehPNgZ&nMCYNQ@Abb|D zTC!)$`CCrhBK~~(*--Fv&fK~M{p~3hI(@P}vvsTTf3R0!t@_-A_M8o8dh6D$607mE z_TpM{;Rw6XtSok>>i8z|%W#cQ32t^Lc1}#4GO=T7yEMCOs()Kt+b#nw0{}CIFBXF+ zWpck`27WqaT47TZg6|d}5Z&V9NANwriNyW*nsFa%!@rwRJ~oJBxtH7>(G z!G87IogWxBOkW}t!6GZbUqsapjk83WdZcvl&#+%Pg((09)Q=2Mt;KnCYNmTh_Ahd~ zNLKYo_KB28@p}2-lB|`G0Eaorr3>w`6t8^SHjX)5@Z2m8YW@>(A<_m<0WHTt$ zBj%J7zh(Hf0Yy${1|@hd|HjC5Fsbmkjd?=`jiwi^&6y(0IF9|Um>B-M_8lK~&g$Rh zse(GE0e}Zo+MI@7SD4dR@y=<_jJAp3jK~S4em9~S{nA?U=vA4~%)_*CK%s|i$8)FZ zr+MQcM6$_--+L#a28hk_mkJdrHOv2C?8j!tLqkv>H2Qm*t$DtE5QXWFM$*)WNo; z1QAVR3du@GNI?EiWY8PS4b)_$pQmRo%LbByONW(yKK)Df22VR}??1z)DuE`BGSp5h z3|mye3Lo#b!rE*$?6IF5(23#Z*yDeV$R4Ad==@c%$GO4PWl4Gd?U}R8;=W91MJbE> zA7h(VT7m3RZ_GZv30VR@*I1(XV&6J3O)pZJG+QQeYaWAT9P{)3P?C?l8Ni5rCj zs&|YNM=WSAE-+~v5_5+uRN4?N+j018tKvR}!w*e`-~8KcDoi*yMb`y81C#e=AJA0HMk0)vEs#>^B<>812I2B_z* zDS}tBorGBNMMR=}=`xT2*ywBONZW21-p2hyRs;T&o7b)vB?@`GF4*-jzDo5E21 ziJx6Z86gFM%=9BAkBcn@osyT0Q~oLYiKkt@X?&f>iV-Xsc;K^+B>@a^1!r`5O9Yq^ zhWGK~2XP?E?|sIxL4G*TcS4wUg7sJ>eQKvgxB0W8FRvvJ7`69dx`_@ELPG|i;t%lP=vOx4EWn5s>~urJwsOW*k>-e#}( zh*|OrZyZw(T3BJ~`K+IwT=P>vFci%{m!Kxm<4ymQr|ST(^k^@q=j9Bq)#47Q>l zauy#>z?`-Old6I(xtit1HRM{lo@jB?LA2#sl&g)%qTndS1*>CGU`%$vqqD8*G_xu< zIGH~`#y>sS+a49EQ*yV^77I6u4Pq#*+Wy>vKW z=uL%5<6Xzt9@tF+rzju=%x2E}cC|hbnNCyjMky}f~w+=7SaGfD$(Nh|;H{g_WA%0SbT9K^ii-k5$%Y+$P z!7?4^aOe7LG?wUoVu;dQpMLU)Y}Bi3$-_qP(-p43K<)JI)gjxIjGt1dQp_B^T4+fr z4_`Nq_B+gxG=A|&PBp7Q`6@wS0yW*?78Y+Pi7ZZiMU4ryfhQMeVu~(JiI>1cTFdRm zWC=`Zyi@`cmniALlyTh4A*VqL>3x)rD|cg;K$Q(@+Gxp>i;4-YtY&1mP~SOIAgXLw zTtVo13ckNkdUTwf>{g%gZ9{XA+lS~NPaB>i+F@*R(9%@fG-XaVI2XTjD6adu{HzmZJTz`1|5&6T{)RIB9 z^DOR@P{TaaGJd*oJkN9bisK}a)7}8v<8hyB!JsXfBMB9Ju4Stx^*jc+WNIiy4y}1w zf&Xc*+Ush`-9pc{xJkzO7GxnNL>|IA--2C}Wc&tZ%AgIa!|oE~SMxAm@j5|SsZiyH z=KeMg83Hi%SWr*cL98``kLhxha`3K}T&BO=X%FxpNYb@lvktrHneOxwVB@R{B#3)= z*@X`Wm^IPy(nyIfH!?#7C-rsQb2_)D*`DVu9ZK+tP;*Q-HZI_%!@C>rQ-0E~>FU%-JH#Iym5Gh(!tZc~i zyOd2!4g{*unWi^WNvUI)d*Ub8S>{fG20L0SnNl+SzgbORv}=6CdDa+p$e`ccwhft- z>akjo!M{Z=d(sd!j{h`o$wZuugH)J{_4X{j=2n=VaT3^fGHAZjXm|iM7s>c7hZfb| z%7Vm=L|VlWTnut+!y~W+l5#kk#?DSak)vxeRxtm}2CaRg5#Gj#AhRRcDI8_zhCtdc zf^%C0d%BlSKVO*2vLO=HGA~1CkLgA5#&2gUj_X{wWC4-hl3{4-V40P1ge0&nG9)QD zlXkp5ROi`rBkUmgy2;^V%gG<#zDg{L(`i89devTEOWMPWMTdB(di)NyY0kvV5Rrs) zA~_NSa+`=y6Y=Hb#5TFlm8!qo=YkPV z#?P_lEi<}rNH?s*qp=bVcQn?*K-!q?uJEo^LoTYSr1yuV?)#o^%A{+l&z3^U0by1VpOx%E$V^je!Vw^T>#Vd;&ZBXv;75Y zH&mQS&<9Qvhy2f+k=lhAB-b2{$m9B~bce+wZH-E}8Sa=hcr5bVkk!WM>R~(OZpl_ z0s>+u35B-PZ3Gt0Mgz(eG(B=CeIBoHtYK^%4!}+0l6hoGp|Lf?6R(5zY#Vv$1F63Y zW+-Nrc2o)w;R({^PrcD>VgXU_?;9A7hA=Q&4v%*&V{GYc;|=TjE6a4GSR*cAWs_N% z&IwPJ?Ww2aIldpV>viKf2{q9Rausde z(>kDAol;7$l4I2fay=^}i1L+t9TAue2$bvJCG1cQ2$=UCi{aLaeL1qDYjboC2T=(d zVCktF`TiW~F1Gt~n%;!sE-@vrIi?@FRJ5z2_|MBxFXK$ARDn|Jd%qmk(T#u_>qP{4y|{ml{X{dC1#CG);0G6+x)JH@A7ETspxRT`F@{>3VISC+Q5u0h zUtkusDf+CEqy-D{n)1LLO<~(}jX5YvgrveP$b)h;rPo?$xO~l^HtN*J|wPw2W+LkeL{=X?sMDb4hDPCHI2}#6#AM3J7IN zOu9$rD9yh1d5vEA)N~f%J}RfQLjcFILbq=$rTUMy({fP}G+R!w_0(hR{Af(zoB@2S zO`;tr1`Ilb_&5hdw9?_dDM-!W5A@WGl5X{=pJthZQ$3Hj_nG2@wQPV-uw|gdXsb59 zCmKiFV7+<2@3Iad8{3oY&4LOuA%pv5+Xht%TQbN`u@n5xpt6(>Kh*~6boHfxKFtpr2vK*U0n4Yt}RE(K{S;DTY4FwlvvAG18%xg7|EEA28C}a7N<$ z72$WrpA%nrMIV2z@p0z0Qw(HKy>(mk@#o>=yIB|V#?n%k_u0i~ScXnOsnssH_~MJ@ zR|c9{>s;W^hc)NG+e^D!bNqNa0q3uHz%QuQJAM3xhRI>+P!yr2Nq$LU@fcrZWHC)p z>E>7lvQQ{5HhMGg+-jN}O_Qu8K)%F?YkVL@-nInfml}66dLbj5&_qh1$CAP&5WLLD zV|x*h4a#0cn*VacopG?KDGvwq3S%#T1BwySE1hyrA@M{dt%Mw%yX80p@Q;7B}*hi=$RI(m#{k64kF>W+l<(Y*9j}-NDQ0=DZpi7WGKWpV#?bMAH#~66=>Ax2Hg(_ z2U4&Kr~F{wVI04;z;w z_HHALgF)ou=3VV+jP#W^!x>fYF|rV*VU;>Vph)RzIVOVve6JC)a)3=vmV{DB*87aK z6NkbNucnTKaZG|NB<%gpk;3@U=5Cz@>Ked88b4rKYqoVP3iY@+C2@tYK4`4t`FI6! z8d-(o{E(9@0!0dt*E8RF|zEW%N%!GZ^l7_^>>UpkB@}{xQQzs0<;p$-1`jh0pW0HE9ht zD5=3gS@r422n8NN&{~V?h_yaXei}Go?h_zq&!(6l^@|==?k~xNM$^6op%=!OvZg|rhF|_Li^w`23(Fp~FD0dG( zq2Qq!=M}cg)*b0gk*5{FrDXgQIs29#pe%>;7D$F(0qGGEA_N6wpER2(DEl2AWcAME z1aJQrh4E7n7>SbjF@D;x!!RVCp_RqK*vME(y!?!j)1k`v^a*Aly=fOb#$^9lBborI zbcH(iu4Luti-FSPST0cZFA(xM8wwjR^A7|;2?y1PT!->`drOEO2&Uo-hT~xInz_30 zP(mZ|zM$ZxE_fUNVz2_p0cuSH(`ib^4MxB+Zs871tG)B&?>z(g*cb!`ig+u}E%2JKcq$1|(mx_x}wAveAQThLNU|Cbvk(F9^WbS2u9DisEZ5b%_9X>4Ad^6(jObFjLIGCC#Xj3-cq=tQS z$C?i+YfZjz7iq5fQtdM=q2R5928;xwuxBWZkPYuURn~ktXU&oFI=kcofh`9ny>s(2 zq&VL-(vsHPWb^V}LV%^h|L@tWKV#a9Mm#vFjAkLNcue0nwu7ueDC^u53+boSJt%US zli8#J=JBBn7E=YV_6K%_B-giU!{(wO+5OPS!pYGLd9+|o!DxkcU>+vpKQg9wTx3p= zeq1^4{}aDe9A;0ApZbMBO2~PW;k? z-U{2yz(11lpN+_pA>Cd%b|3T_bFHC{@H!UkUb9);xBw(~GXLfhDp2n1`Hz5b11Woet6rhjU=cwCdSyZYM@ ziyySp`#ZnAF8sWv#{3ryLq?$5uEXzbd(C)Dqoyx*QeqHGF=R7oV}l1{3gNO>a-dGv%GeV`Ib7JW9eKP)6zb&Vjw9u>k%}^`n zIwAaI}hRUH011vlOaP=sjwA9jX? zXuu=%MR>7W>PUD%x2*XQ?sBvQ8K0R(;ONIrq~$IU{*P$4ZzI(6|Mq=^NOCCm75euF zCb#-K?|rzI^eY>}#@_YhPC@_>5vZV-ReAgCZZy<-3 zRWqEZHo0pF!)bF5DXy9NHm@N)9DE)Bmr>`e8B!Z0GprwlJm^)*u>QN2OdCwj46BVu z>!=rn@IOYKb-~Eg<33UNF0Lip$_y|qZi?pVMp&3ricu0G{qh1_KO&EgaOGJbp(y+$nd%VIo2Qwp##UO z?8aErX;#mAOsB&RB6eL(4+%SiJ-h@K$6C?AtlPunN+AZ3IcDs%5=4+11 zsLiari=WQIVFp$k#|_<5r#nYP0xk%rFg#1bWx^?Q7vC7FOJs)3a|p~6ItgBV)v#_T z(cCzt6QR?#`m{H6g8fQ1Zp_)aPXRHHc#$9plcad(9$wIF?36;Qvp$PKGe|q;&F~Y= zn~dX4&<;lwrgk%4JG5^$PIb6xm)+#n4&9f_+3L+Ci;~6G5;ex*Y3sE^{^f&I2DKTu z-6eu{%!y&ByJ>OQ#bZjK<0yQg`EZ4xoF=doc^q7j209K^w1b9FgW0z(z+R&WX8@f~{ew zmW;~;g(ny*Gv}~ZF*L+^h}(td*9>YAAWqe{TLB`?KJX;jcny0WJPouAP|S3Fiav=~ zP>6^*tZ%k8u(-uVo38RsBIekf)RaLCR<`KHxio0D253MrdeV-|364zC*x7W_M9HiG zJ5PFzPk;&6v=>GO0&TPbuo-Cj2B9SzkFVBaW8(?2=iE15EA}ip)6^3U!yoVWu5DCH zXlK!b5+hqGdd{up#9+%C+!a7-AkqkU$A0C`lf+l>!qZNVd7VOql31a$huzibH(`S; zn;Pyn&7jxNXJbiC<9Abne_)U~-t(jpc~2Y=t6c5I2R%%mi4aFi0H;1Pw2}hDvZPwZ zQ|4l~#bn4i$BpL++MES79EmGYRL#V|cAWfM_eek{8&9#bkoYXW8I;R1z2^I~f~Fv+ z2!mZXA4+-6dZ7y^LhHK*i@YD7q&C2FkYV6n=~R0k)WHp<<+j8U$`j9!3t8pPA5G*O zk1*1 zGL&(cTjVY^rQVG^2NX4=ZM9^=UL=^N0TukMK0;JhNupy5niOz#o=M@>`R(>*m22$O zO^brlsF9x*W@{{s8OeZmIE$;WX2jZHzP(U(l-!7u>EG$h;BvsU=+H}pOE8k7z;|qx zCL6C?F%rKXnv(K1eAL|ug{Vt?It!j6VbPNJL^)A#ee}F^K&UsnWuTmnIK%}7t-D)| zGJtLny|lPt?9ze>;zmPTTHLtu(&8pY?-p8|)Mp!gevU6&48S_DBvU4B`U88BWY4I$ zLb<7Fe9S%rLF=S5%VY>ILU141k48P4xbZBTbmr2CKXPq_JfLI47?GqE55sZ=_M*{^ zwOrBJnL(1FjURu^U)$VlL~9%Lf~Z`MjP1UmW&>|-Oh{VUNE9T-oTUS~HVny+qL@5~43ReR;8tzXrLTng@~%2%)tCDQvNVkX#%ecTMKN}^rWauwx?E2$MT~+zms83~^DsLUFTsyk zXw3qKYB#t^no7-uRslmT(=*}`&)1T=FZatk!_0QOdlnnLJ*b50pusTTScn??LQb5| zap@I*QAl<i-PF-1Hy+EL94p1K3>y7C zX$@u+yE-}BK=Q6KYJtHszEu=#F{i9lVp?kLlSeD#*|uaXKVTMZTNPjzvY@e>b0b#? zu4e$3?RmfjT6I2WDDG=JM~)(T8fUP3MyeGY=CC7YZw9&VV~l{DR_4d6$H2#!XuFV+ zzY^GBD@tkh+M#weE0EE>&koV#l&muOGX(qX0tbnp!kp*u@g0$1vhhHroX!}5IL}xm zd9o<7qdhQZng3?0|u$JQtCFNm) zHfk;~7z68(9!N|f`B5)Zseuz{`&G%y|uJ}u7`}MOui|NDJ|(6BI+TAMN+^mwgwHF-Q@s2 z)R3M8INMgP8IdgDEIc2A(Rd>l^yEt%_9t>iutY}Awd>wv0+%2B+G2EnWcjoc3Vt_ zoO6iF6Eq21ebv5Js^<@*5vkGb-qa}Dgm|RK=CJVSYXX0%Socwevq`1ZYPJVmzQBwE z{Ae%Wy(n|x%cLm4kFldsF5!Lc=7MbS5C!?MhAjp!(&QUMQI^f5>?};!_&7Vz)j`)? z)Q9F9OpWI!{}{=x^AMm3^C{W*`1lBlKK_J?HAYX2F3EXPY)K9nnrwWs;nH~2x3V;7 zFJ>LBgW4iIrFv_Nr~0ESy4Z+&5Kq|2{;z-YdDW+R3pmt$jI^ywq=qF=8ii&c-W(aGiBQlm5Ib~{6D61DLe_DafujKrAZxDb@p zFicC1WxT4nso|tz)x7IBYsnqLw;eTF*|9Z$fj;xI&#WcaH8QapjLa`|8Y@e4yUt)$ zp({P59`~C*j7BrB7brfQ5b4vRR- ze&s}_4EDdl)6QJM%k8CrjuarJ&Ryh;Zs12OuZW2l7~Pm%I}GGjltTly>A)W`K-+Z^ zKZs8oUooP{=UcU8p>pKImWjiSd0y!dtBQuys36+G&@8!@iFPc>>iBJ8jVO!oomz6M z5^)Zv5)sahy1&Uji*R0LFVFdk9~XT>jhScq4rw4>0d9alNXq(Zd!?%a26UVlY+!{N zkK#2sy;dYHq*3SgG~4s@WzldOMI(7_P62{M6T_VELNrsIZDG};C{xPeAbGvRB`>NWoL!lp zM+2A?nrEnd1`+wBNAGk6c(Sgb5Ef$s=LBHA%P@;flN?pZN_&g)67wRUr0GG;8fiA=Q2{rrd&60cJ3=hL>?%Upy90j6GYBV|k({pff>m%Pu|8Gjcc+A$P4 z;*k*a*;=yQ&@LxIIJUCf?Y9T5x>g!LQrbS3bDf8x7IdUW(3WkJjFhm?*OHlXOheO} zz9{w{DP>jI8^001dZLeG18Gy%porViK8pbOH+bOOHc8m1SVw%>H$7LfHPW|Zi=Zw` zbR%(8=}H}>DfGx9s)^6{zL*wueYqBJE zX0!Dh)Iyfe3uU1{uop=OQLMHDmAlX!R&%2t=SH_g-=*+HV{k7JLA14ufU^$VOEqg4 z6+>Vw75r3yG%(g)YvAvEk@%AlEfT@H$~&pEz3x5)VMARY{?yPTELb!&B-EUQA1(Va zG)t;5oKmX%e>h~efLf!0^=u)2TUds)bI8jRH;G(*)xe4pJE?+8Y*FanNd+I0jX$$< zD&o`3f&ElaQEEZ>^PHTa3;0N4;$P&%#8QjIPrjL3VyL8eP%g0VmpP|iC6>j;T(`f! zEIT<4LPL0d74PQ(0@6!1{(5M><~J3*FEP$|VSqB-r(R^f@wZ;pB;H6n+H~$LVZK=N zKHQp{SwdCq0#n9Vm0F1Ubsn4H*FpQ!JhnwXrPoSc|BWpZj} zvc9{~BMC9R`@N&B$r7&?W(xf?dJ?Yy`;aO$J%1U}$UlT=WMKlCApNoYrgugT0r*pH zEj*pu;tXN_hW$o=kZ+hN__Hw@cq{v)prS4DIbsk#5W&DSz7ijbv7IrL+Ia<_Ya; z=d&Ao8|R$4bqn43g4N&YllAGGE1lsJ8e+B<8+$>p5Jbsf=*d8Y!?5!rteoNB7pKPonamAaB zO-+W$h#tzUmo{C_SZoV`b(bqC1^DtFz%Kh<3h)(-Eg4C%Z=MGONAQJblTBAN7HcfY zA(sR!U*TP>(Z{c3e7xLR4?aHGbY(-Y5#*!uFReycvXT;(j1C@-v)|ZX$JfFgMeDwv*BeX=(o z!kHSlrXdS4pCu|f$A*tO8scD?X00{Dvjdk?lPM`qD?#8!&uOw3q%>M$_NL=Ulr+Fb z;;!mR19DA6P8^(IBsCdFRXilmg5&`PX9=`S^57Utq&fk%yo_zo9QyJkPEuE2HEcEB zx=aFrlZhk(`p#L`xXVpU<{7SKq^230(=@^y2gCxH-wTQY+#iVsdJDBZ(Wq5)g4d$Y zC^Xj&LZhC^ibAu+XwTywjR;71&N&LtR-^T~2T!-z;Np<5lAg=ad#4xDL1b;uvnp2p`xqZ4g%? zj?v)E7!g{0^t)|{G5Pk2A@FH7cjQq(8a;71D5Bp{7}5KL1q}Q}!rJMH0wpa$K(6b{ zduuC1EzyGVP!Se2$IfWmBnT} z{u#=ZZkukHx6hESV-LHlGqgtlWkrJFq5YLqQ^LF#kBf|GkMsav4ifMW@Wc)mNnKfZ zf1?qF_b4OVJ)H0!n?O@T-5I>GEA2vj%`izdVmgR2HY&!Onw&(7$C>Gwi7EWKh5=fF zEfeBj!zo&o1Y2r`*oPJ5qt5QOWrKVo6k+~U-Cusg^y?;uKXim(1d0Xve%^S zkF)E^H=SWvsCeIY)8X0PGl%0+&N9Z9S^}_+xSZ?b=>P16H=Aw-WhQ&Md#=}*AJljE z=Qsd*fF3-WSq0%Q*{76m1mNbzhzLTK_977U#f^&x4Ew+S4TErIRBquD1?dbSBFjg! z5mC4!uL8xk=4iO_wRiBPkuc_=p9oNgq1h9eM$e|l*&{N)sCylf`DOEHn1va)^qJob z6G=A5xRJmyKufgM&96#=Ej2^zITYr}on)`RYN+KcZGMSRmSx$NpJlmKvH2xXY!3ZZ zP=y&%+y(#-tAzA?_rdMu)$@P zl&#Askfkpk?b9T7yogixthz3{moX@NUB)ppvix-1+eoIfK`piTJ$8H~1g8MXxkipp zmgV>mUAksyajFt|LwIZT$Ye7+Ut;jK3JMkdI zK?Eqo(Ck$Q4W1absWGCp;@@h?{18%g;POz@bhF0%N~bBuLK4kcfst*-z$}rLStA~8 zxoAEeI_J*!T#_2m`tTpMy)4xD2WcH%0jW6tAc1Te zMmhyqPrIf^!Nu%7-Yp7(TW7s~nqp@)3cbD==m_ z+GrEk8=wfCW8n>vGyw-K_MrvZ7VC1e#dCi8K`t(DB+?1D?+6CYW;m)_h}UY|9>we3 zUS12(L*VruSJ?{Vb+*ON7wl0(==i}K#otlj7mcRG*$ib(V&x@@QLvX>u(LG{BwSwc zE|c%mwcs+FEe*!?Yb^))5hzx9zhdsEsuLSe~CmhIW;?) z!~=W@IdwR0aQD8&+;!QD|9b8susG53b-Gsd2R)o+)Q!x4{kZ%2SzgjApMm|a9y?Qb zM6#sw10#N7ZY50t(HcOmVQ7-juM_~=FM_o)w59i6BMxU&#jbPrS!A(t^=t=`7HO=zno5UTK7f; zu`QPot^Lqp(W~J*-WVkln&v0|ZTQ`{jQU;SMNm+Bad6cZ0*wIfU^e$Q#y;%KE zPE1+H_~YezC6d|sm}6>a0?aJF`;U-vKzzraBw+V9mVq>k#vG0r_uI2=wBX@KzoS4u zz$kcRpsUb&fl&ZR07dt?cm_Pss9GhUb1OLYz8DYlL5`6(mzwbaAM7BqwHMp$Jo=0h z&xJ+^Km*6sy34!Ta}}UI#6fANaiF_WK}R3zfQe%XOAGw)L)7RW<{15Q4*|aH6c7dV z;SLQIHx|bW{}B$L``XO~TsaaC^pTG7%jJy*H7KfwFR}X4xmW9tGO`n-brLVutBnPo zohZS5a!h=!`sh5^gI%q~3a}qztcx_dHG@h1Q{!NOJGJgOI#x>Y#;ggmM%@%o81y=R%mkHzkJ?M{c^2oc5YCmGpt4LUbp^@R>^ zeOnpl0tDfR$cmPJx8$%CCngXLkvRDzCV(@P!jwLox+nN|J`K2vY; za@ppArN&}=j{Z&1UM6~Mi?E}G8QYs-b)IBA zNr~wdV7~Z+1o_oQD?Pz8X_eVd4Liur>~jeeBy4VTUSnD?PJD`jcL6Iyeg^xs=IY0S zU6J_L6(f+v!Eqyay}94PM^K(AnM~hchSw6L+5n{twHfF)8he&PU2s0Uni{^zI3>p6 zPGvcp^8Cn@h07or$GWf=ZyW2)Fcu>!?cNjY7*(VQz_0GWEZEom@7gA*_C;;QSGyj6Qm&0-fbs034QSA-;>{5C5VRi8rH6;ok<%#rkAR|bv36D!2R-(-kY5J+onOC?GxW9G(A6y?U!A0ADS z!(oUZD;7C4_Y5^k{)p-HC43TJP8>>M9tLB{uS|%n7dd2zS1mq1yq4V3k(_Myy6B(X zKegZ7bLw(uWr5yn`_Iii=gy$f++-1$z2W?eDiNiwLfjBHULXjlYW^_ zm#a1iwKyHA+67?aOV?YtvQ1$yWh6U7-NX~ndiL45SWwE}D zl4~~(nb>VT9g(IZ4YV{I;WWE*^_3xC6TIoO#=;@xla4JwTo`C2aUHM53|=x;O>P@% z$?XFzltrw=US(H6mRrOAC{G;S=wRBb|6(G7?NCol?I3c?X7A;tij7+QnZs@=;8? z&EdBvOM<+sLT0?a>@!|+|AB36Y!=oqVDE&Op1#u{`E~wCyM{hpG9u@Y7Ljwr9)vMb|tk{~yV<%ZFXA zvL{8B0<$5#;B}~;^xLKMIB`gDo|o_^#3C-iv}VV)1CcXH;+d z(a>SScs$<^9uATPacBgWnSg%a_X8~Q$XiH1_fer{~l(*|7e?0>gR=VUO1r~O;T3Ym}54>#vQ2!S+~ty{wOH96x_!l>hi~U@u@VJBkyB=(h#jQf_LFL-0FC ztg1{2aoe3Hji8xISKY9K)G5Bk1FP`@vTjrdJ{T7{aNJwanAt=oSv8rzs^ zAqc8Cng3Xzd;$yhUt0^}2JAT9_>*xBuV*;8DhFMr2Mrv&?z6M9aoEsQafgs*;M{CkWy4w?_f~75!+h_m7=#A}}9()A#UU#4FUQ2NcZAh*Y zFgb8Wr@1nxt7$1b{|u7~uIy+n>TWG)Hn=RR@Ct4o|I4^e(8J??dr(0Y|6NO_1DHE# z^l);$*_v-JwW+j4Q_50Y#);EwhahYnREu-5(PG@g`@M}$yUA*Oq8YLoiN+Ih8PdTK zc+oQ=HETf{2f37uL!6qp8LFF0VyCgPgjvyxX97sou5>c_z0`>}Ae+Igeq(XDQ)LuK6f7fnS#SIRQ0$~tZkm$d z@axSMnyWOSC6z>i@}690E0MJuoi4vBHJvo2q_VDvX}fR_d;F?@GwNQp=FRy&gJ0)< zEnYV3YkK*+DVy{#lZ+FC<}4m6n6tyN>nJ0s=P`+$-x-o(p)w)>7dt(y_5+Z7E2Uf; zYst3aajCfKXvsLJ;=oWDaJ`Z!>E>hvZ#W`R#rj|yHCNHO3`GfNyrN?}ZcFj_s!pfN z7uag$>g3ey1kET{@ST^c+l(E8lk>(aD5+P@G;Buh`lJv{xaAey$n^-I)U3EtK};)$ zgvh(KM9t3QwFSBCpfOclv2VUgAR^vVxdQX9THqHY^BimTQbIa9a6qorZs<&~e2ZEQ z;7K@czFL6+kPN7_9Nm0OAe*ZinyUxSg|tW_elA?2z(7mJv4A`t&9TnC+_Lca{txzx zHXrBMFM^)LF7-0N*EHJ8Q^-UL$TAG^^d9esnN+=wgAB4UeUr^6#Gl}$k6+8!B;VZ} zAgr2QSzu=+Id9l^_$j^P$l?6~@(Xj~kx2q}qFHhU2GXuOKFjy)J$vo+Z~h`E*EV)s z`M$kzpqPJz0j3>T`$dqp7@7yJqwFK4hHcvx)HH0~YK#dmSm06)%5{p5#^wM6(5A$NoVVS4vOyexaxmG6+aOk*Vz7$qky5r11f_03A&u0O zCqt3Lw)v}$g4B1rp)gS2uo~FZXppTq&0t7lNs~>Gz1d+fgyg$>1$pUm z4B2T9sC=36=Ia`k9c+m`QM&nhMiO*o8M$S$?Mw6Rg_T|dOT~1EL7YP2hqkc{;`nk9 zxf=$FLm>&VU%5`F0uygYZl~AuJV)*^|DdUH1A}qQ|FC;>W|566H_jUxM~p=sMG7Q{ zpc@$h4Hp0l#i+91hNDVh}{!O^oP<5r-8a?zf%+xX&&QRQD}-O1%KZEGDQgF73t%od}mEIm45vq!eMt|L)e)!A7R7@gcE%CbxG%-oe*i@{`;qN}Qs zZDVm``?9*k6|ErL4JIftNjC5H=Q)F->^(-#jAdG6^|XvwgCKR>L2oG-i(xT;5IswF z!c))S@)ZyT>@1cOTvdJ$f4jy_2Ez8Ii4XcTe=$JWB3S;JeiEQ%gFOgX)or7oA>G$l z#yEPR2EpkWv>00kK`{D;s4$*vuIkA&kpbgiRlZ2x3`%Z51rfMnFbf2l8&E-T_8QDG zHZ_7^>pa0%wOB$}E1~dJtyTIb>X@{Jt)BosBzw6;6tjVyS7l*4<6qdKfMi#-4p3Am&|tfi zLtWb5&&Uod7LDT}W|AHL7Vt4QxKF#82c^6j&cwlX$16)v-W;V zAvJJJbi_er#%@=-a9D}0_9KtJ4JC0w@^gM^2b)`?*eY8i3H|FicN;E^0h|M2c5 zw&U1I9N$T&bI6Gk$98gi(vj^X4ml1u9EaYJvyxWQo>#l_?&`n+hnbm~nVFfHnVFgM z|5d|GcTM+9PtUBJ?|Hs`?zDp0>gwXEuI~1uK!~{l6@f8H$Rj5dSfatUdSIzC{8|Ic zM>zsZYaAkGL12l=Wtdtiuw)2i69LBX9Q^V)PFy!%o30!mSSpmo;b*(OD|7D&)bO{N=fM@nvm@$ zg?Lz5Z-XJutKmJ_Un4E_W`xO8n1@CsDWa12R0f5LZb5#YCMRBm%hRfPX$#iVS!Iir z0e!TwU_67t5Y>d@GxaPO&t$QSb^drE7MeQ7JLJI`Z#>HpZzw$>glH((|0ZmNql^WM zo^eeT;*DfntB~bK0k~mWS^q`TCiy@1*%OL4u2S{R5)z4i@7$#!j#}QSPHo#cH@9gbU9NDOVPdv==->?;%FqsS!%fuI%G*}Is<;#TPimNso`zn_ela9Dr z`SM)W+DUw8BL#2>6RgCc%()sF6gG@k*tvAq$l_vxG@`)0t+`qI+N!jF2C~~Y_Ia#H zlL(*m&m@q9^FNWy1zs>*#YY~(tXMlslx=UgYd+7<+sc_>VehD$AUZF|iz-ueWb=1# zFgR~rHX>-0N=3>q%xgQf2p<4ea!7qWiWvMN=Jb;-Aa(#z*uqG#Ud&J>SP41Ekq9>! z6j!~3t*|+|Dudv>G$hg^%%rCiHeUQ>eWA&{tSH6`!sq3T+@cZ^xmV*A4rdjyv+9*> zVx)>z@EA0)S21LW_kwBV`2Om^^+(Ab0b8PH@e4l?%UYi{WZ@Bewh-_A4yYQDvEDL(#}`a6&=j$<4;O zk%5RsKT(qMH}jIFANvNj-GP{p1S1wS;TKOPp~Wk}FB0FxON{eI=6sNpQ$r@U&+5nU zjwkK?<(C+&(RqIDo_a{cPj6y{%hbKD;!_$;Rwt8=i+<2CWyd~JfL#O{9(2p6=6h${X&^Y%XoD8f`;Qy~^?DoJkN zm3KXgB&qC*iyz|Md1tDcLm*=9v*V+q=JcMtVzf1&Sz?bG>b-fb!`4t%;X7)q_vI~3 z$g$F+JEKN;f1YoaBdF%&IB8GNSLY73(Lmh13vy>aXpn>mdg3Xbs6J3xAR;Zwy0eMF8v z<;b+kVvyVoj$g`a4$;gJl}_DwaFL<<<$@SkSi_`$@FGD|GO=+u@%}5dMNVIJZ95^e zKfk_&Bi2jq()n7AaoE?HYb57T-Zg%sa>(#ahDXLllUb7`0MD|6;+**g_u(v-d@Cnp zqd_DLk57c%$r#XZpO|TPR2o{JSN!&byy9%L(XG7Ty@&?k^-*V7t6ThzBWdU9Md`sP?hWWmyROi_5GW#h4PbC1v5sJEx z#D6^OSlz)iG7JgVv#c9U2F~>PxN(q(Wx0mmXI`6jH5;AE$|2leoeetQV~#=_cd2~= zN`Yx*cu+M*=herYa5sPqAz{9~lw4%n7;>SLejgyFbK`_~c;qEc| zsbgu?qMdPjs%B0Q1@VxRfcnV z58+dsRB+GsSB0}R@6MPYBEK#~#Juogf{6U45RvZudYphF>~ONCz({8712l}zO33^^ z*KYi_&~9|2DeTj{JiFnR$KMrWX-$WSp?F8*357aOC;e=EkL(;hCYSaC%V4a>Rwzvp%MivVXM%*j6rso}_t zf~euMCK-t`at*gd`DY=el0ttedxu6HXB?2R8%Zdg`HSD86a)v^qEfOpllc<{$z8Vj zSKdJ(LXwC+v1wE}ss4A~5|W8aT9^B;4t7;cOL&2)?0$OA_Em)@MpW3*}g36I0At&EiMc6bk&ElSt@?3td`#7@|FN^ zd?85C9;=KhA!RPh@HG=B&S(v>C!@?Gdbc?aXGlhGWdx zS&d6Uv_}2T5^jBUwRIu+6pP8wBl=E+I&yorE@Aps%HVUB1t$xD;d(nQGQRDq7CvY zrd;ST?0YT*kYJdXVXbM7Eq8@Gr3klUSP@#|hRY)&u87%uSyn7Jz$Ls1p5w7hK@DK~ z)|GNZ+w2Dzb?40HE$onA1H-C!&TO8leu;~zIK=E}=D-YeE8P^bd8?lenp4JIB!X!g zx1yU|HqZExUTzQP+sn8*rHA`d^o2pefVZ)T&7j73u)eUeHb7ms)mi9u*GA=TO4H=9HYb+sa8AF zFe?_NXVX~JefGoVE3;6CK4c@^LY!tH9zYb5QyKJKC2xsAikA4Q7T-z`J{{wPyy})5 zW2rM%wZ5nkuF71RgGy`dh4bLrh8C%Ucnmw|;jufby&7|aE@Xyu6WzGmk?R9db3U=z z*lPyCu3^^adtF?-GejJ}x`vDI=DWS_Sf0QZHRjdxR$nA1lX9sZAc)40Sr3h!dgLbj zNqL99rr6a%3}_Ex-^S*X;|mM)@l%*~>xd~bk%6Ro>lifLHP``qdbq@(AW0Fi5SHI24co(jw$@hKBWP3lDuUf&#n8+Wrdu87x|H zR!WO5a@~Ag<}!unRVxa1j3Uq>Z6ed?f=j;_FPi7|Sk;{B0|^AFlLhm;J`3{<@!Z!Q zqRj%AdXLm~(t7BowA87HYLw`m(7Hj>-gsvKUDI)@z>6SCsQG8QY`!6j`VEMN7L5mk zUh#F$dKv=NGyU_|WzAN5Z7so;rbxF6>(giGoqm_RX#O|y1ROBj$^5P2Sb|a>+>w+-3BWskgyatg~ zh2%KHUr;#*ojdtYf(kta>*jDAG!%r(T^L#1{X-;FuC$DJCtf5q zcXf6AWRK$wLhEi!Zk&f@6=HOEMrd|eRuCrlU@+MER6#J#Wy}H|{B)@xIQMMY8D?*M zo-Ah@hFpj;B|AY7+ib~@AOgE+c=N1^mfOZa{PUS9k)|%N3_$0P8qy&#)M$SBEI4xRKP#ycqB%#W8D zb1V}m_L!wc@bS(x8M#L$lL}9ht@>(qaI0fO&Apk$0~5srv*{KQfOx-oWkT69%4^l{ z&qza-8jnrb+|A9VLT@<11T)+%lPBjSbQ^uw2}+N#_h%#=5*hLyZ-$Is!^Y-)%tF~x ztrJlZ^9t^He$=2erG7!QaxQ6=dmKX{c$}n*%_o-4ob}r zidulZdj-6g8=NP2iEaQf!SbY!MQxQWd3Z>+*cmMhyKBh0WR6mbY)E7(i-nu8eOA2n zV4q&0_dkO7AWTrr&8iynQd!|zZu*%B9#a1KUS~CqwFMec%y~C!&kqw!psts`%PY-A zZLfxoUZKR0rv*V{j`6l@a!NRAHcs~&ZBxiJr{pqPq@|nOM8?g=wMtIpf7C9nHygW4 z&g6g2M($@_FCN=&D#!n#9Xn87$43k8J|dm+_H1&haj@CgQ&OO0$>D!#5{GhYzKNmw z-$VQYwxaG)g=BB4jurkt5wzbccV!~s3QevB1s8{STT&Gq5$RO>-i}JNN^|H9p>$rY z8N1vXo9~m?%n?*Wxo>UN>I+#lhNOckSX5RJ4FptITM|`m5y~!**^NIHjde;F`Qhw;s-_6Lr*2AK?xfQ;oZH`Ekm`B_BesdwaA#?8sXp z6B7qhN7THb!YUwOlTXqZSV|EqU+EZY1MHwc{}J(z{?n_%08h|fl=kZi89ca(f^B8k zfN&U1;E8G}R!ksS1BAViBgh%}m&)*76KSn72Yh{H@D)E6o*ntX+=1>pJ?o6bb4xn~lvPWg=s*KG<5oBA7JB zGUz9Io~1;ml&^Z0$}&v)iCXudFRo3NgGkdEJ;<}w{uK8h*mm9@jD^ubUA~q9pQCPZ zu?Af1kS6F6=p96hrQ35&-=MkD*>BK{3}J-XF4}1?u6C1%lqOSQke9j!InW(;tU+jqNRh=SMIXq^;520H zNNh(}KfzS5OgwkQ;-P+fwYxxn#{@UO9C5An;T9>B{y06vBUcXL6=0Tx0IN%fp|+f3=I()CeM7h8{+$ zMKX-k_!7gsCdY>BG3Z@zP4HKy#l{d>ezK{&)^El25EAcX8j^U%82C$WvhzBZdJ8+Q zM<7BOX-a8Az23!dSaJrtx8)0+zId0ivD*~M~U z(d!!FEiM&IZMq(Y-m9p`TV2DXR$UJx21)a5IjR_1ekoFsx0SK!nOeZxOB;0ygn_5| zEt1m8dGb4yT&r{HT4p36B3)7(`oHKbrz5GzMOp+ad=Wt+a=o9g65X7O^+1+aK+iZ_jsn$#1=N#5#+)?^52y;(ut5Fs75?ewpmp z>b)2I-{{t0Y-+txiKH00u>WGg8<7aU+eJ?+=aLc&PqFEyN_a~p!|!3sc!F$6{S#?% ze>9+@5oNR??OgO=?`1~=u))N~uS8Vx9i}?r_jI zmnkaF>%)0;BpUX*7g%(xC>bANy-e2hq(PSVb5W61^RA+-e3YF5WQ|E%=6WdV>ak?v z6)h(pW1Zd3v2dai_8ld4uI%*S;fpT`hex)0n03EFIwN<7^2c+@vEJ{u(NwL;QIXxB z$Qx_aSy&(906{%gmJX#1_b1r_I2P&GhrQb6>Qhde&|U6#7BSY?C<9iU*{7YQc5G_E z36wbXoX(-FiH4t1S&J2|(Bh(oUr`=D%N&E2S;O^Iq}Au#brnD*)Q=F*qqY0wy1Ce`_p58pSH%At${-7N=->>dco7GKtXf5AIbgIM_@=8Sk}#&yY$SQ{b@R7; zB{xuso~ju6ecKc&O)Pb+u|+FT39o2ceaBSCWE?Q0I}%5KnhOvWhx)E+oU-_z)e=eK z=m~w##TUdE1XhBsM6d6gg+tNTLwnS5G?0c*wR*XL5|v>5K=DJnc+vB!&k1ZVwrR7Z z#qH2w)PJ9mXWQ!!SuS8H+pnX4vZ!tV{*i)x#Z=2fW){M}+o~hh!A2g^vfg;3a;fUpE`4 zWjZ+>^U)(I8Af(Blt<4;$-r-#jcZ4Yssonz>He1Ot1BWboem=pUW*^|cWkSYZ_Ht* z*QMmYntk}aD_cz&N-iyaDt~a*s}gB6tVH|}e{|WOWC*dwo!m+gC3}Bz*@t9+s@4tL zGOVNX1+y7+=+NR~1?~Au?hLRccfE>(`KzmFl*~ZwrHkk9-(2QD0k8Akc=&&3VU5iI z6#)-B%iU2W3-*s(F-*L_f z8`wM%^S>DsdwQG=7VCqi)?}tzV;MmC|F}ZWL|R5>Rn)?(ROI$wb}opRzn*q7SalP< z1qs&iW_X|pfjVV!zD3+LC^z)HKz+R<&%Enx3x03iTS~L0^o9xmN8&&JerehSv}J$LW!9nQ{xg&yD`s22U&>ZY;TJv(PX@tr$$xArB#m@Oc)y-PuVREW&Y zh!S`ONWOfKKw{P3x@~NrLADk8t*RD1 zLM@cNIW3_>-YM2wj$no@o#J3k?8{Qe8b{3&Jhv9&Qs8o1lQqjyTtCvwnIwvi!uXP2 zau8g!v&ND`3M`3sW6M#@8=7?&m@H|(WaFv$G1FBkfDxpl*=AM{I02wkgy5L~=x6T> zA9fnrOZoIxV=GFo+S(?%Pu3R3C)24DZf)Jxg6*oL!QBYp513Mp$-VT1Ozzpu#(gJj za^cKZ2Ys9lIM+&S?ykA*vwL>$);1T)-Pm#&-WLSJAU`YA?`$OurPS{jhnh&3w$+US zepz0}Nf1sV4EHEOb`t)=CsbKKa{ZRUNSHeP@q=_cMJv}1 z9~&@fteuUpq%DiFQKa3>V^Ifb2W!-{Uty3fJQj5f!cWbQn#~l?SJQzi!%wxMv1Ph8 zd%cwjUuShmhEBq2(;|;thi68dmNjx-KC3O3|IxTZMRn@ zY+-iWj{%{VYqz&e$Zp@f**Gv+yKM!@r_Y|geQwX5BuECw8e5LbI(1>GZ>~h3l%>9$ z+WugMunQx3k!=*f%QIylLkEDZBqEN2dIb;EB$|tYdPSGXJ_y?&7FeZ;ivoP5rkw># zYo7qFNQ~oop%Nrcudp1o=sFL%Av9htu3RvKYJ|Uv!}7?xPUA5?ftU3_6`d}%I{Vwb zbwLwrfS`x~5BVa3t9xBK#2t5*pvA0r=mJ`S7MqYwC0nO6C!DpoEmw6!PsvOiWD1%^ zPF&;0%{ozt1Q;0W7$rlG+}P!6s$s&Melnll+^oD*Qymrisr zwYMg3sL^vNWs0xP%A-VcGuVm(dXhuajO02B=E)9ClQ3KJXt)qv7y7QAr~yuKXdLZL zu3(X`;V1|QkQHt5H63@l6&#pD0{OlH!t*iArAD(npvIPK zvnXADHi>)4z8GEU2`xo@dJ82GL9q~wjTP;rNQ(7dYsppqEjL=b4qJtH;Z3_V+Fcx3 zZAoBx)FC8R7-yiq*jXC+La#GenaYKtyfX06MT6jVS>?%v;9&Kl!R>kh#DmwO3fV=2 z;Pu%?J{R#wf~#X!RyA(GEPg7keq2hW05@a{V(9>_h4#V<+9V8vZ>d|UVa{ZILgp}o zUJqvrt38Bnt5j;N8|97F$38aPjhe&CQe&Ofw978myb3K=siAJ{w35Q8C&n>Zg{X;b zH}OkHvX8q4j@^{S#Re4%jcO?xV(ITVvw&g_gmbOyk#!WRecn-?*Hr_>5M^0SFUCZA z-KEaLp#`}ww1%M&;P|GK=TJ)V<(8~oV@wB*LG3uKVJ^4wn+A-7#mg>sRMaE}xAqHl zp|dMRyxXwiolQKdjnrkuZ<{kExkgtL?QZAi6B+~6-O)9Tb&lUA@`cAhPv%fA#1@PDqoX=Li^8{#gi1|kTh86) z2`y-BxoefG4WS}l1nF)p;1Km6W2H$DhiETLPU6S3`h?#n&?HRjE1q`NIqn`7WGAcA zI{Bt@2fSm2a)-4lo!affs)xpaCY)RKxW|O59&p$fPHLRm<#`V6UT zxUe|DqN(iPVbyTO`mV41a8I_CCObu=u;ZR-fV+~qLnLkIXY3#;j^UTBKYrSl8gbs~ zOiU)WMkAC1D=`w>uAhV7%84<#WC|VwBaw04g3$3; z%9w-;Np^5J88Ds|e1^4VY>1WB^Pkv&3<8)Nrj*lw3L`X;o`2+C z_nx@RSe%E)*a@E@Hd)M`x@&g(?CG;fH`7rhBm11jcM%py8W#!}<)-~xDM1L<8UlYF z6K2Vx#rf9aVq(844gok;XQ(*@m4L?Wn&yI%h^3h6K=S?)60?eP={r;Z#PC;S3(-MX zsx5>38ZY=WkE=9f)g*da>2QcSuAHqj8PlpP4(V9u=X+}@dNs&JIwEQ$MYF3YAn90G zlX1x4Xsz3-C>ugFgfm4o*oxMqn9Ct5^GOb)z6y7@&Sn(9$i3g6xex)Rcc!6*&r4mP zPzi;SAMAX`IMC9)d?Jr=)&n76`$P!M0`2XqZG);MH z?Ds07tJ^(mc?}5Ch$%7}xVJM;z#rYZ5CB_%7T)AOOyQ(AX)i2v=)5MsV3ZoLmx1~m<#9SbVmyVaS`U?VBy@^7JBe-zaUO@m^~e5I_%w< zY;{#~C(CG$$PqmKV8J`d)s{yxd&%(8B6^gh|IsF1BoClY1$nR<=Q1N((KyY;g@nY* z9gEXv%-1F?H$Q5lcu8EvIWwIhIv7K^is-nplOk7x0No4jIy>~>0Ag54~^e*)WQ?S`N1 zkt;ip7CeEPDCIt}gnB)Rna<_aF*<${bFS5c-f1pRW-+4-6>tN=`ViN%@~5AomPxd? z#BoyH#SVY!sfG69X>6mDMv&Qna05V7c{CUT)^A;`~QJ&7hwCCcgy zhVr1F8Eg$Xm7m297Rw@~&DkM+B7dn#Kb!H0)^^dR*cr>Ky~R?mNl6L39wYsnAPv^j z@mXkCrwSJOD#aF>)#ivpE?n?y$eTMF5a#*06Ee@}`Fh9(nCAmHQEsU>I1m_9pqSR! z^1MPD@%$1-?**)4E4rj~1VKqk(dCuG7QT?x$F%{`^DAdGUc?eh4lTkCy?AnV=p~GT z`xeJ3g25Dgsnb6Qx&^@?4Pq~R*cr#Yj5Ppe$cy+uR;`ub-SLenTy$_>HWrO$J@w3PklxVhK@>`hyk` zo%k+w7Jl(fEJvUkf3JfsKOwIPEWzG9Sn>hutIxW>Im8ZVx$@a}Shx!I-CFr~DsWxl z-&-bR;n5@izzwwUdBz=9qOs+z>;(S|QPnTB@e!8r4oY4E?2HmXjP$l5v&KeB4?NJr zg&N)vDao4NbWV*eZ!cjB-@z6Tl5P4TnYT2{`oX7W?<}&33W`s|AYm0W%xXsA!cdoT zy=y|sg>4}l5k86S4DB(U9GM?Jks03dZclt;K}p=X(62ix76%DD9y-AlF3=edM)lNF zVm)thmCicaiFHp@c*oQ|u-63*H-<0Z?wQtzjyCIvO*V8qvOIYU3$tA`(|L7D#24== zp;PZ=$3H-)giAw)5SBK+&!?2-z`UOwd$hW9wFSltAmpm0w<~bfA7B$#KvM2w??b0d7%SrPGieQSyfwm3-x(n z$?l{Cp;V;sF)rq+RIUK0fk71Xj~75E_Q&C#&b6`S6HMtv6045iv6KUZ{G`uVX#-<^ z!1&&$Sf9#gOp!`K%qpmqbEQ^suCDmu(-TrKY`lEX1_b9sjpg=eT&!ZBVLgtfiU|lp zQ16@yp6fp7tXn4S{j8^)pCFg2Srq)w6~a#xtu%Z!UtxtlUqaEo5Ta;AoG-FOJ&Eb* z=&eYt{8AAwi}VuGSwSzY7S@a$)uowVo{(l@$MR!0Kr=JZaNzQZki@SPE}wk0gsgro zcoC9f4)H2nH&xG>Z$2OLbFsw!nig-8D#B5SdRt$a(T8R4{l!?c02vW5s4tU zT7T+#89?6h?Gk$Xoiase)0NOb-({-?X8!;=W{}HLUVP+xtPreoLgR2o$_C{tlc{Re z6^Ly4e#vam15}SDf&PH)7)%iyc3@sxM#>rl?}sdHr0NB7>BY`+r!Vgh(2LA8IlXl^ zx0wDTHg5rvPJk9?B2yqV5Ty|UNF@kK&C=_=Wc%iag9EsjFwaA4nK+zO;WvdL=5I^5s^77-AJf}NwN>~5 zRjOZTROp?s`Moclg6K*^8PwwQ2PV*7H2C;`^z?ihx@b~cU_~$r72O<2eecu8KQ$Y> zd;w|>$BT3ma#=w)<1nfxdj9i-H1%%H#uF|&P0iC#k^KFoq#Vc-%H$dUcT+M}Dx&_Y zC))K0zl^J?SG2;IfAcKi`o<(b8#$aJiLiQqFSL69sMzC1*6g1pEa$&G!H$a%;bw=h z_&4jUfs^QncyT1)P{0^uRR6=`l&n#WYL8ZIG2eWa@xLXlvx4c1R-peCEaEjv*yx&K zmMQqiiJWG0_l>KCaSv8x2B#nl-g*rOCaMW{S8NZ;@L>(gG19uySBL6iVI0ygZgizU zO!wr|;KcUMW8} zb>w9H6A|;0nQ)<$>zu;&E^+Rhy`icc42X)eDTi^U9L+A}F|G_~`4Y?2r5QK0Ije!u zD4<$r=#<~Yprzh;2i;sPB~!BDqxJgF^iEG~E@8R11lJtHRoKKweeaXwDOQ=u)ki9KD|kLx z1`{jD@-~zY0RO)fcSDTPLw>QQqJIPb%luz_nFefzOl-n^* z`RbnHx^tM8xqeW3I2|oQLZ?nDRMC@5sOTxY*+aE%r;|`)i#Hno8mzNH)>HIhC&Fij z7QLsgSwrT&J-)7T2|20Ujhj;~CQV^}JqYv;cE^BrwIF`E*kg8LVba_LOgKr=P8Kav z!|nzhj54*0anvAt)_Ve3@$yADu!I$yf-}NNb^l58=YXmM&VEp}NL zmZHUJ!L-Ut$Y$?JzMp4}jHvkqZ!LuUSJ3cu7O%{LfY=NiSCg&{KV6fa+l z0N+?4MzF4L$;K*m1qL^oP++jIG3TdIU~v9=2fGVKd65BJZe!}KX2acRkiux;B51_(4q<^ z#OhUWj$Ti>>6R0+A&bq%qc%r`K`8DgW|!CT|V5TQsS!JrBfSq6_#p~STP+n1-XMmiBe zUD{ZunF?y2(}c@wOkp9-DNow^q@YA#x}-!X*j>^XZMH1Htg5M3=F&{*u@r7-$ZJf^ z7it~CxL~b=WsPkZEeu`>Tj+^(*;|!`9LQSb7R=?k{2)zkg;^BS`TM&ug6M|kEpgjT zyFcy?Tk41)ayi!SVD%&Y+I|ss`zkkd5R~&6!OS_94sd#GK}PEfv+-h{G@-(1gfLuX zd7KBRoyP@1?t4rKLzi0ZGz)^@4j36Wa$Rc8GpDRs)Kl^WWl+ZoE-=tG*Hw5re?tBb z_T*_Bm^3{(aD1%Wr3VjP!{LO-&$im_|y|O9+;5cz;$lK zsfCJ0c^X0jIdzc9853F&A+9L7362oe^Fs9wm59kM@T-~@GpUpJsxi2_H=}@0(+Z=P z5}I}&HYTIGo~+LSL53>ml=DbJZKUjL1!+nyB=BoUPfpf#-wA0CqQi|il8~q&`epL; zNAp`GT^AN6C-)0f1P#`B_ZjT_d(O~H&@U1skh6jyInU5D#;(T@KVU+lge+krcJdHC zu)?*kJv5Wz62+zm7E0EG0ws&={ewMGaFxj3kW~GxPhuaEQ_y!&sYrmq#0moJZ5no? zQja`8bVBlse03vs@;K!=&rAyQ_%K#5Fdbfo*dpjSPl-}+&_UAu@SF%XGmO(+jcF9-B*%woft}$48ObwN&$4`5Umf)3@3~(O!El4C$cQp12m!@^rQ)R4Z`@zj0_uD4|)m{6HP6r zfzt}-3Wn+2eHh;ge#pBjlCfEJRfV29At!`7=SKA@OWNdlo=cL5JuRp2P?7hnee-9x zhjVkn@91UmQhw*@#bJ#eB<(xYBcW+3=rq?dQsVAYenu!QcFG=1jbSNTJTsIQJB=Pp zJ<`U};#tA8s2~^54yMK2MJX5038jVV&DGp0B^S>PrG?p>t4G>6xp-bMEh@;x^Mh$| zk;#RMFhvdT1tp@_7lzjGUc`EnlDay-RDi7bir0BGas|d0BfvLS zh!MPf%F>C|6&Sp9LV*F+DmSX^y*OCNiwZQeDYl+^S)gR=4>{fioR{Ymbb(J%_z3D$ z5DjlZSBzY_YQg8c39G~R-I%4nJU+ttG^SqRPsl_x*H_4w@>H+PX(%?kSxN&}$cVV~ zRqMbX%vqm8uSJo=DY!8y)-%sdFw{zr}9@itH{dSp~bh)zjl!moI+ngnTi&a5m!7 zU3ueX31|Ga9Fygc2iLEJGk!bUg`&k=BUB_6pic#Bec?5Pa==U+Nl7jXZ#e;BuzsIXcneUDk2Dm#FhY3qyfxV3% zsKt|hkoj~vZBseT;8RpS#8~3>#?;|kZjv9qs9onrJgUT47jUE^j8Fxe>F$Zl7@WEs z>qjT#SkY_wn2kt`7-1F`2YHE-@QEK|+Hd>BL`hqKB@(CemF)~Fydk@?4oCI@pYQY+ zR#w|Xtd;~l4`lpDcq;@i1+y~s@r;8Jiby&ha^uz1Cs@Q_>Nx2_qSi-WpG!fm_3Q})K@3u ziDgdH(G%n(o)a^&=0u3}{JDLy&*W&`pzRahawFGR$;PPPTwo zKVjtw?HJ?l=bZW}6LbyIU|8yE!ik%bIr$DBb~@XiF-mC+Sc<8o!RKh#Ir+GzGe)~Gf(bO+Ihw2Ny z+pt=rG0ubOEaPw~VcJJZsDg4&3|8N@P-y7FtmbLJFi#F1ON=7dL;Zm6O!=tX5%Rrt%T>5LWFYv*LNf)CG>8s5nUOWs#Y{u3?iQ*MB@k<1zXr+K2>7gb!$feh9r_sP?d2CZWd0txz zWfZ4k52XsCGrBRXg*Ov%L&##-sMu}3d0f>r42JuFV84OVRP=>kFv}JERC#P_aZ=Nl zo{*E;-)ubpqHt2q16lI?m6jHmmd5mDN;rsPm@P5|S?V_&-6}4#Cgs+n&^rxuS!Nir zA5K#v{@G($aX$N5n+Q$>HrJWSPH&lrFPdURa#;I_B7sRx^}WwZOjo=tT!Qx*45&y2 zgHh=g^LlK@)(P2;1I@-GF9O? zsw^`KE{*Bkg$o{gO1S;KEIF~=W-8z1Yt^TgsgzMTDPBR<*Vf#R|FStg!dT?ZyGV-dNAJCWtn%{ zpO_`5diPP6-B9MZ%1Rx;-ktzu18+cZgm`N%p^fzPyc8YD% z`Duu15T0i;JRKm*PyR+M>U04`V1P&{nST(nXQ9~=GSuqMBIS@GS%WHv-A!D3bL2{Z;tJtecLHrGDWkK`a$|S}(wBTAgQ<{p z`IB!e#i$|qCXP(sY(kZtdo>%6-LOR7_N#d%XspaPrq3?nq(vZgFU9dvsoc#2LpL%B z=53?#Bi_Q(I>hXxa6_%m!G+G+xI5^_k9W&vMt)YYBYH+|>SodkE z7*a*n&h8~nlVnS)bkd%1{8r7z>E&mP1q`y!MY^`2}F_vEp3R-VhOMG<>qYFi8?KKvuAzEubuAr-V`u5EE zdnD6zN5q&ru#cslGzmj2+Tb&I6$E*AWOCyIS~g}d5m(>)T#`c)~A~Og5u3+X)2vCi>5{88dS-AUb%wd#)>wO4D8`Fy=j6lb+ z-j`@zP^`413X$!#_QDEf1ahwoNe&&gk(-m35ZGnUDSP6KQ3=PF*n&kBgw%P;o*1?A zA|erbdSya_dEaK^K9kI3+jNvwi+TmloonrC&9!#U&h4I^n>}@I_uNkG(AQ@VG=#@R z^}%X;mkWWzfgu5)#wCZH(V&M266qbtG8&_WYJnahLhWPj0w5r8?eS=(gLBRT0pT%` zOP`mcBZ>Tz_gO3oT6=jKL=XzY-c{y^iKeaj_9)%T83d-^Y-~0SssLjYoP&T2n3@S7 z2RifUXtT(YJ1H?~_ZK1ZYiy9!RF=qW(0@V}&mL_G6~)z%>e_VK9M#fg9|965cfS$- zX1z9D*lZk}xc=p+o`?s}XX^)&(jue3P@x-IzpysX5S)dT_D~#W*O)fNPBC+c^yY8MOxI_fU`Ok30SG4MroZMMt4F#Rtk=az;nB-4!8;)`3D2o9DfjyDCuf&*!z?G`CCavr&8p+J+@^jP$9Bt8}oEJ{cdQwU=m9I2?}$9pubfaR9;wj1CtL~~cGd>NaZWk#D4O7_SSSbb ziOS6V6zfr0a9stP?a?7%uV%J_c(E|R?H~&kfWC&A4gxApLx{)owX9<{0h#Guiz378 z*qJ6y@U6wpXkpl08xN2OP#rsJsMqs5AT@D7BCNZ0FOWN#qF}#)#p&rZkY~ftF2u%RG=(lO@+AZ5}%Av++y@wb*nu%{_Q6ZrtwKpE- zTUh)-Fq7J%rfaZrH$=43n11V|%7S`;w=vGdIZ{C5FQ319yO;JwJ_{zig3rnn*(JkS zZv)}r@|pNGCgfgr5`OC)6Y^X4pS<5fjEnn3a{QJE+urHmoBX8EnfojL2TM4)uXnL@ zh;&B6#1_@X&cS%d?`CBn6SBPBCJN#A_z{-L2AQPNkW%`QYc~CfKry6eKgrT5 z5n=5c%$wC50rXS3l?XjedMB`-W{an6-Ag?485W_-t*ac;XIbQ`x0~|kKF5rFx)5bP z>G_m)MPx0al6VkB>q9GQ*m}LOt^$u>%t-h@G{ZZx36K z?0scIvWL~|drjEBub{rYlp}Z~Pt#vz+u4bR;)B?Zh$g3z-j4WSB@mF(;27mF8sKXz zwwLBDti|CH1F;{nEmj){*w9a95ohDx{p{@w|ubm!F{m?B7Q%J&`qku47++>_cS zRgQZRwm<7nY|V^<#n?{2KQnVhuu3;P{e@ANfJ8LM{WZ=}FzWox=O&1@83)Zi{CDO; z5$MV$uz+CP0ELl6u<#E@kSCN0c$A29|H&#mWSZ1|GlC;uSsSkZLKbuSUu<*rd>4C) zq+&02_IGjnT9RQ2Pw#NX0!W6XMFAC6)ovj6bO zFWEqBawMO^!L65o_GTo%KUzcY8nhQ17;&AmkpG7(IS7@1XH!yE@(Bm58QG^~L2SAV zhgQ0>KS4|`>7)h@PVTpR2;t6O@8S|8TK$+H4q%IYaJ!&}!a;B1oHPv4bnlBzc#1@LNN5^1BrD%QPET;kuPTPolYa?2mD*nJ4hG`cew_ z%jUsO`%twWl!AS%L&6ihtxm|&;9;bML*H!FRB$+IeH(c(0Os1*x`oMObZL9*6wC0) zfvK)I3?!;4()4CrKKa-`k03d?r3sB*$DtKsTKx3cS<{O;w%Io>tx^+VS z`4JOt58AofYL9y@l`!pJJ$F}YcWbt_9|wKxn%%Q=Zf?(Pa(WB`tH#!uX5(s>Ik6$Y zpbSxW(S6mAP?AwfGq8=_(G^&VodMnIW5eTU93f9cZ ztn`c$J!WflUOWi3T*G#iDu!*hKk0sCv+ zsedFf7_VR>Cm)wC{Hjfs`Zy3bL|@4B)p%H>J|izRAiYr|_}(y0r&~TTeCCDH4F*?` zZu{ax2Tc?+Ym@Va!bLTHkZa_J2+9&D=T~|finzl0U9*Hc+g{+#NHyh)nB8KF71~t@ z_lg;q#zlY5c=wr#9RV^_Xd|E;6>NlEGIH36+Kj{Ogp9+Zn~nQ#m~qH63#imKw$6Fv zN(L1|iyo~cBiPju+?^hGrGl0ANJgkpuy?V2=~}uKY(#i#*mEuIOw<6o`PtOAoaq55 zi`qFmyEmRndw4y<9>~~VReBzZX|&k5buVLbCdy89pPoLogjqU`LDsCuM%e`UbOu>J zy*TQbt%4%nxmF1iMzF6PV4IR@;v4$RbxQaX^RwCS4U1_d3}<-gBSjTBc-XPO9*jX5+#Qu#zNsc{Wn0&-L=emO`e-D1j(tA+PVrB?%>T!>Dq9 z6zCi9Wevr90eZZEgKKofMwqUsF>dIo2_<9bN=N(p+uy8CoX1h1s6+gYRJZ?-<5G+zBs6|Pbl1Nd$yD>9D`R4y7Oxoqs>p0tB)k-nR zfZnv(xGWV01u1ZNoOlSfP&bGW7RitFYkKK-X@hUZkkdZF?Lp3FC2Pd8+0HRx+izaz zKO{DuuReo*3q~D{E-_8d+gtpBQLA9i?OqE*K5H}Px15kMe{8ey$c-@OLzE?lqt^Or zZ|82rW_gC4q;l)6JgMFy10;0(u}V^cjl6nZWZ$=DQl77Zw_!q-r-HZjSrIh{Xb925 z6my#T?HEE@j5M2^+#yij$ZI`L$xE=xkYwJm*_g{?pc3d-HjarJ?oQ3dZ0K-0-VpYn^k|A0BJI9& z2@U^0_N-P_ayi_a-o+DCs?-?kLd^Z%mGv!?LrrdM;}73$5=P_hVFFcXGoUXOY{m%z zGEkezxW|M{#^alf2XBO*756BUQ_8azQ2NH!b3J7sW7UET#p7cP#XWt3lc3jXFCJJE z%368=g^+OGZ5DJI$TMx4XR4a#xEF$zi3qvKAZsH)BbaKc@HXEJZ@owTUPM2gLf#bW z90aa{&eOMXIl7-J8EI&*ls>OA9Bh5I zA@_ZT&JNwu4+(>?b>N8w+PJ7xQquSY&0x(VJ*K@gK9c>`XKBv&08Uw3XlbBpbz2&9 zbgN-IzHwqWAxrbbX5)by;MfI45CP`7b>TWt>bSfsVA24Djy_QdNU)Vr&kIX7E~QQD zx!Od+C0``v`$HpM{UPJsC*TJP=us%%U~mQT&gDgIZuH=Ug!@SwQ|c$#%oA)Oc8Br= zi6Ye}DQO56Y7)5%_}L|<>oo42)xd#@tM%gI>!S`d57s>gOY9ImxLr5Q17ms-4)xKDVff)5Xjp*XS!w1TGhQ@ zE*gch1e#Vb_RdvZNx#}m{r#&*Q_iaHQ#K}Jq6k;s7MLedN0UT7z{5%cu`c(YJ*BKf z5!?rQvLy*Oxe|pWHVXcOJj<^NKAB5g=Y%_Qg-wqd;=!Kg6g7l#9b**uhj^N7EbwBF zeS56C2BQXgXg(|SEf&$Nc$jCkT}>oCK};@BN6i77V4OQJk}>E~w{aKOdqhtIo#|I{ z#q??jalT|Ua5M&=Pyn2|sp7FmS79E3#EoPt11t~54}oSJd$XvD;uL|z)hO$0bO%J- z7|P6ChRg?6imjNz4u4XYMbBcf%sQS%rt2_X#*3aqf!w<2kd^w=r|Dr-_N)`r<#{HK zLq@kEGrzRS+U&qcZY)@+Wl7_aY5GDcVC~+;llGNFB9w*yv?ffoF1D=r3T0sHBmN{G9}Lhzr#cFh3`v;}55F`mh2 zBAB}<4)IHHAaKue2!Wg!xx4(AFR*^LXHujXlEfG}KfDI3DuhJNLb5q}O+of^s)R*3 zg=9$FM9%{^43!YHyr>9qb7Sjs3rmOO37)FNB{;)^^s!EHfa?0MR4L0(d5ZePmq^qbq41)1BI$C=Sr6j}v? zzQQ=Z((?(oaWp@zzV{iZR~3mf*qd*kprIA)lXKf%BJj0kZLgk?d4h|Z=oy>RJmncB z2d^`~0`nVNU&Fkms__)^7gMajUwf0eoK78F<#XJG@L{r?=(I))t2nuZ_JfP<;CpB1 zw$JXGJGHg1JtTAvBPzc(LuK(f5%xY^Asyfph%2%<`MON~TmZx|AM*5(c*w8MtSZ`& ztxP-$_cs)caG*=K{mRTNYJ@kk)9+Sy$~lbIWPzeIP{ksVX}pPfADL&g)?{yyWfD01F|3#V)It!*NJR2I{}5} zCHiz_e=_|@Q?y_B?bf%klcfZG==z2P83I#u%Kg^2GYQwE(T9$dgZ7S`@FsyI=TpG4 zcV^F80djQc*dO(lcJH(9T|FGnxIV5v z?0kcfzoa~NZ~I(puld8N>UqL$>j&Nbf)Jzsx?kRMIFtgw-PPxnh0SDM**iL6mU~3P zhY0oTd4y-4bnn~~3HP3Sa_-+xJ=uSH0xAIym}nC~2dDomiGy6a{pGwMKrr>gEG;1O zYJ47hj23$9xKElG`3xlu!9js~{<0)JA7O$YXU9Lvd=o(tCsm0Og;1hI8j5_v$Lcj$ zA7^$(x?uN?n@_N5$Y-^?R%8=zM7mEhuOptO3yJ5~mzHS1l<}hHKgBRHEuQhHaL}K2 z8GioIXIL)k&zV2VOeC2%yCOvhevVlZPc`iGOk}jJWyD)+9iwL_&gCv znBvYMe~IO?^cg@m6hzuS`8k@}m+Nv{U%4nu{8!o4*UTDVg88N%#;t;>znocs&J1l; z{|FPO!yycFP5#$5-sGdIJK3`WOdFVI@kJl>*O^S)CbYFSkbC-{DP=n3XdGgO5R9$g zaCno{JQM5|9g8cxNz?$}%v+sshs zxs30Wav9%c`A)J*Bo$a9LH6o~69EBgUrw@$i z`g6KRpoI_er+>s~Mo*8Bu@LR}vp;q`i-YH!&;G>q>}b*X>`xgT_H|a}Ez!a{ro{bO zvvCw=LYI@ZaEhb|Ph`$QnC9ekN=VGNz##qSjF`4|6PxJ2({xgZ2UAtSfU~9+Q#ES~ z*?&PZ*w~OAt8J5A*a4x;MAYS$bT6Ai zQ8gr4&{IaVdY$F=LVBli{6K$FNs%>>;CnpGKdbXoEtu=0_IwvN`5kJl_0~b0>Kyos zDt24Lj5^~nC_ifLZ}+-TXMGi8lvw@M#RZpGsVjQO_e2f!H|6iFsr0%_orOaSRkZr= zE{kMLK;Fn5&*^`-ltA;>TrY{D%0FGE+oc5BhR09jUoMeN2({AgFX9j{_%||DGA56j z(Z5~%Ncar+YipIv#(!MXQ2a=TscifH>$2tvwPe}uP&6}U5E_XS<1KB-@I4+rB3RK~ zXu(edkA1k}B_23}6S2f@0hgXmG9n)I#awu6?pE|TGsvpNnWq-s3OKcmb`RPspfU14 zgB9B>XVoB!ozcRuy9W0ePocwIg2_EkJoqDAG+G$+m%7XAL*Z*`pwT5YD<)o&g-KDIo4SLn0l$lGrEDjO^F~(YZyb>?)Sd|xtoLcComQoNZ9{Mq^ ze8y6zc-UC25uKP8=8~~h-QUcysoX4>q~=v zJh4x7m0waW>LOTmeYm>IZ|O=>JpL!S$eu(`@o-OeW%-iqus~#bL?`L~igD#B9rPi8T*zWPs=Hj#wzey+ zh2bGoJK~}5c4Y}kAabxm%Du;xQA)__*7ev*_Y4{{#rmqHm1xiFtW^`bQ(aFF#~j5N-05y(Kl@&d!mb#p`d#m-u9aHzt{!p!wtuGDrO@s{TLE=!Zxu`0R2 z4P1mzTq;)RyH%r@8@g1>z`a^~!OWSibQ2R0#kV?i_eL)K6VX&FQ}L`l%f$d`8idKL zUY@+MKVPPR1MB`>SkFp{!cAPlpYXV1$?T?T^N;DV;^}>}Ty|DnV4OMI6>&(gq;n8&NndM}l%J!#oeOGfv0b5Fa(k8GambdXZ4KthdBjuw4tew3nc-uI)xJKQk!f>k$V>jO z**GJAymY|}jbr!$#tkv@s6}(_wkweHE*@^B16HEsUGv1OQk~^)s$lHrQ91>SX7M_6 zcjXKCkX0M`X6~U{1~_0_oG3Lh-EQ zn+f$$2&-DTDQw9*gxP*m$-OPB4SkFs@m6KUP6^k&_;Gq38i~jS-EF<9am8x0aZT4mY!h6^NPQJl zb8d*K!0)z3E1fD)*uW>Wi7uyQ)p&-id4dy*Uh&}1Z#MS2*g+RF4*Do~iavCaEF?=3 zt+kc*sDhddn~m$Z#!S>ifF@j%3tqTrX~9?XxRPd+Z6FggjQM z4X&%I4i|L8dd3ULexH;ZzE_@xUZpB~KvmcH6f7xk4JvrvgC6R`=qIP7M#==s2+T!018g`wCiR3$UISF^E; z^o0*mFt>PVySHaf#()dmH4rg=i2JC`62WtdAL_nJF_WR%9n^7$qU=(6iRVI9JmbI@ z258%=nEc;QMFCmZ{XSsBD2q~QJZ0{$yc!<>r(==vmxIKEe}GCRIe1}emvQg#3UrdF zRHcXhfgT3b;q@Qnft^kuo;VLy#XuKv;-Nl7S#TFrV(G&AaMZH171P7~@BI-WcU;lfCN4N#r)!TNT>G7OWcPgyYJu46I z>STGg2Rtcd4IQ4(@i-sZWK`*(g_-B7w3%zZZ5GK3RT1~+LEMoVwU!5iWi&I(tF9Bu zR9xPDKF*5E0Jn~miC3i;pougCyVY;6qCjq(Srb3N3vnV+b^r)`P4Hg?f02bh-|gcl zs+xv)v6Dt5Ks62U5_qTV97M?lmA`n}zZ9Wp7VfI7e$<5f%W&Hs?LVi@*44TIUd}zg zJe;Rug8K>_(R<6YZhwRAH@nr1RYfR{py^RQjhR;}hV{|!FMaU#mGO9OJBry@kZ)?z z(xI@2rN?2?kMuu%;lY_#T?7XX&b(SJkmz%V#c@^USx9;c)`?a6P$bbyUFpOscBa2R zOG#Z(SafKW#zPa52tMM^K3=1 zP3{{qomXGZyiWOk)xV`+jymn(!b)pty`NUNqQJji9fWFu7aAG`?hW=1O@*zXUp&w^ z+FfBb30AtxD?R*|@oW^*Z*n3%LQzbvazp`ra~|K;+J}0BwmMcn3jAB_9T$ow=dX8$ zhi=nOf~hFbZ?${o6=>YXx1NN8QE=a;(gsV^WDR(M4s?qbkhiNu&4!G#cY23LT`W7` z7_~**Vh}&TJ5+>h51^C~>luByAQMHFcRFDUl|jv86(`Nb(_MJSLw&bXKs34I z;l9U~X&HY=Lg2)|^HhQmMdbI|Cd35I7l@+Zzt3i(2_MT($zGo**zZ@lykepWdpzuP z==QjHnt#9#+{#;{F#n+IFcZm8r8~>R!FqCnRn!Wop_>r*cNaDW=r=eM&bIA zrsH%JNe^=89a=Vx$NHmw88oY#QJ8ozg_S07x`sm?=v4_m;ZIcg3YaN+kLc1PF)jH8f4rozJdEoTk>_A*q<-S&JB=Oh>}g8cP>3sh#lp<*))(tCl*%r{kTsGkH8aRq#5 zh!l>_KgkULEe09S!>Nm|WrpatvroG3Z=U%MBNkvLH!d4M$r{XjH{|Y>neQ=s=((JA z=KJh9&y6oLKTwg9rV>3TMVJmgFJkRKW6iZ^8-JL zy+(j$|5Jx85z=4s9<`aDk$I=qzw&pE5gtEhH&P^AFt{Zo>K88cBmG_B|#2^aW0C6fXERX#}of6FYliq;YzSQat~m-O7fQ=N3$+HuI%?WfNZAA{@_ z*VfY!ey{3=-Vu!WAZma=ID!wd07-y=OTtKDqJaNVRad;&!+{y+r<5K;QS@ly@}HP9 z$qOX@91{7w)$IQ_a==w+@$UGD>|P=CZb7p6n`XnKqgfa5*a&<_gZr zJ!Cy@Y8$w>(QfMblfSf0hTpXPKhIlT9FyM$)@LqPN<~ZHVGcK7%!Q6w=}^bHI_s`9 zy%c>fOLRjBF=I|E#|>;dqS?5#`E16#Zo35If@xk`v>8cGLm?pE2#F(^>+oik+b+qT zq)XH2)QK!AM>(FP>(#PP!W~*9urFduaV1PI<#?9Hcet-@mu95|<2tzYVOJ#j=#op} zOF_O&9fp6~F|~T5Z4ebpYo(NUQkiYXGFJ>K$X;W*ZL@0K)WME`Nhg<%4x#scmD6Pl zqYH&XIJl125w@X9vegt)?Kr{sQoeKBbiD60aaZ35y1cE7(1d-e`j9{}cK*sGY<&gK zXR(-%T$2Nw*?0%|f@b4B6RwC#78N=_xc_M`o5~_m&hUa%R>B?MajGjttC7JstO$uy z3zeUU0)IKR=H>vuh@)u+%d(Ig1^e=TVb?c$l!mKF2y4;Ub_Hgv^L*PC87}!2?n=zU z$+d4aws@oQk7rN0?ckLI4ck?i@c5nN32feZ4(+N8s(v=>Ca>mz>T`W3vS-aWfK%z} zZ2sC{m$TL<)$8z1X5wII73N$HwNvWyNY{w>NF&}Iv#hY1T()aI==eU+wazg_QkG)6`EC^+q=H-ZnEaxi zTwQ)8IJc>ogmun(S7!n^YUucBTqRUI6EYbmf(>=^$k7az{CX z>APzbD|{&ecwI(lH$Y%6s%3Q&Omf1h_tnbu?H|x6{YHx@IB0 z2*n$)^$Y`6vO61hM$zVC3rXR@UL1I=JoV>FaS8ryEfic}V?R6bMW zWVCZuQ?`0?W|}h1KXYSd|BRs$$K=%mib=NJq_F08Qx(#?ai zpj)ss)}U14hcdOETe1?8@gc&AbK_Q}WL=Q|)^)}1x2YDp-1Rp1OOXscKS^Uw}qf*7OK$I*@zMw$;%Ni&tzLNx(aOM8x!99TP=NJxiJ z%XWVm)?rDlvYSh^kg43#!AM7q+cC1zh@MoUOi(u@i` z8jXwLKW!7*gaq_Lv|8x@_*MEM?*(IJEtpGK>$t@Shn$#@5boqdT47j`!pSp4$vO*I z1n=Tv{NzVM(tZ(E-FidheNCH_gj)P&D?;$R3f<4!dfwUTZBIm~U}CK@pNa(<6$K;= z)I`@}K<^gSX-<7-a+kme5~l&n;)FP*jQ|PT5jbFi1roK!npXv|^ooE{f*MV)Qv~gN zrhB^Sz=BeU)393ZhXB+HDf|n6joJ|!E`T`$ly~EI# z9``96LhQiq%QIU_2v0i1eSPt6GK)?mr_(VmWTjs%@=5&x-{4@Ncvjqx6~H|Mm|gr) z#Jay@!>iDSgjixCtv=mv5I>ycxl>4ao_ zthDqPKf?#BI}QB?ATz354x%zi)I1-e?w}|;qIGP4)W{DlG!o|0b<_|KE0lX)oQN9c z;e|6X?^}!-;t|cpY`!?^D`a6=%`=^&MtfwTqUq6won@STt&S*)8tYNMR6kKPV~rtN z%pdJ5q1K~MX;AYRmQf@&DpCYe$dC02v*rajzoajVDQkk#VIJp;L5yJ{1uPxp@oa4^ zp;A1rC2;li2srU=Psk}em`~HQPh_P9;T^LD4|#lKK~ni7M}Syi_3g>cx=RaB@gf*i z9e8TBg!O44J!)yKKI+<44)Ziws=g0QSfB1mZ733?|Dv{mNs5DMbfcXxMU}GEEiQvz zTc6)EHa=B-Nwe|L38$(_YDnu{IKaqETlG;rt$l4#gxyMt{Y+)}tyZNJitbvm!kL$( z;#1W3C!eH&o~4q7f`No#jvC81xo#yu)Z=*j>}NxkL@~92LZShQZD2)YlY0 zjpwQ|x(B{}gKpFeo|n&Z9kNts`SbHRA|_vJQZ`531;l!nlo-xwsWntJp&{HLpsF7Z(!eY-za@nIh zXdPTz+ZE6Gm#MJFJxV;>m#d7(4Y##8IMAo_Z>tdK75R2#neO9B&fSb+!7EkH<(Y&! z*Rut~TZi3!m3>~Y3>Z^KC5=fuM_!!|ULG?O5B@c-!xmHQL8ExsuPyLM#`&sIe14ru z+4!A{`#U%`6Zd|`WBz*2F_ERwQ~^no0*yC#qxaIyeG07k78o+WF(fGg+)VhagER`C zVNEM6_8iZ{=TzLJvJ{2V8WlZ#LESfPeAoTl?3|n1IXk<1*Y4S!Iy~0X z&U+Umc{6K#@C~PV4b~D7FT=(qj$^7Bj$gdlxVSj@R{w2j*j}cS#`VwG4UT33=wUD( zM~;w7_B!K1AD_ASc({(P2x|q9GCB{Mgu8D86-~^1ZGxY>ywoFSSRg*j^qa@z%W~+Ev*s%haj`5!2F(TzG9pk;lrYX&$N^l_^;e8H6U~>WX z--zN$4}zhDwSRxJaSZ%tt2>YX3+v(>7Kw)Vif6nnZFt~l;_3%-3a>Oq(mN)HR1I6k zAaW!?`XH;O%O(7SShX3A=vdeU8X5FOF@YRtA96vX)}i@z>fTGC9VQVVR7LGi{Ahlm zS$?=gBa)h^a5*L%@jU_iNLc+j2(gbg?Se5Wm8xf_4aAxahf5Ulr}{B(Pf@~vAk03V z={PF)`A;yxf&%p0`@74O=OvJ+G4W$XqVP#}SQsRJ4Z&9eBxpLHVq4J1o%X7rbOI(w zEI-X~5n$B$Gc=h(AcBSV7hrISvv;0z*7mv9ZuJ*JYTIWDjky+#Bk-|B@Qb3jG&rFk z4na>Qh`U%C#2qylEq7b<>;1(Z!Y=k?!0=X}M)P-LfBN%+rk&0i^0AXoQtMi0fM_S5On@A(O(;B^UpZXo`dDkg{yB%oa}TK1 z-V+NGw=rGDLr7%GZTYvHkX_W|ba#Qv6v?T(SUI7f9hH_lmI&H8-%?aC&BsKed zv)BZSQ1ewv!UE!T`6NOA0$Vb7Qq_!UqDJ{*h!mw!P1G1)a>VDH-Ypnr9BbaiElXqB zJQOw5m)Y{UlW0~56*bIP9K$5J6rY+U0x+Sjlr6Kf?27rRe+bvcozWP5!tU)*U(HKo z_zYSuG5cSc$=8~Vot#)+UfAKY=KcT5RKDJ9oKb!%EjZx;-3p-g;^H>3cknoN(=H+ zofKE&l}voT4`DE6kxuF)DG5vKq*Pg7@nL7M`h#Y%7uDlZ9^(#I;qEg5OnA6zRheBr zg9RxRu)1-PFRXbWw=@< zEVcIUv%#}GVoc7#Esx9ioAug+m93ivMxqKu^t&KA@z#tX*NtsIW=2SSH1T^l0ENQ( z*D6ecT>(M<2`fTz$i~r3@q_%7rNe6GWdT~0hGaCh{VY>`FrT3(exBo___M!Y$-h98 ztSW!-mskp+g4#ax1T2kP^ql#K<9nYy{FR$Bz#JK__}@hLrXypAoMn_H+yq)joGWfH zh42qgc;#BXUr)&DVO4jjy44eIvQE4A8y0RPVx!aGLd%DVWtdsU@>%B!WQN}`+lOWB zo0qYD#EAmy2V2(I_FJ!BlG%HMQnvuJC!ZvczhhM^LA1o63Y|A$L$it#IVgo&ud+#* zLRr}M-{)8;fRr&9#UMiM@}lTJWX+NQAU=vOmlstuVOZ!__KT?UN7gkfRi%^e!LAZay)6P)vPd={FoYjAi@q?gc^d;Q*O_`ByqAm5AzdujN{GmZ(k{A2!Tkej< zX2kCP4hmw_W+3XsJLgVAqrsl-L%oVk?BDhmCbj0LiFqWjQbb6P-l#;wqemBCA9YZ? zfNV1X6i~4c@A`Fnt!uZWQR;&QBx)lTt4Vq?SOsbvOFS2~VbnEOJ9G)0t5^aQM6vI$ z!H|`ps@&GE8TgBLk&Wp2H@orFKbIDcuN1=wdI`G5kNWrEQ7`DO)i&xsREbb^;brEk z88{e@TJsoqXKf?@({A?69eKIVDgVpvn9Uvd;03kK_uoFnA>m0?RE$SIN;e~fN`Ap# za>e#Pt^r74>l)y{ZrvsDdI;qgoen7ve`A{FxA=(mS9{d&X*S1UJnPUCuf;>WZW~Tv z0V}zzoPjfIYl03L9P|vuRPZH!9c_<)9qmoc#=!~h79on~dZsH9pAZLH+i)bG$XS>o zPdq_mpm-H|rK4S(A9nU1X!qbnta6eVY&`6A=x=J1H;;43&(h&SuHRE%4_}$5=lcT` ze0hCE0vax~anC%@LFjMrkgd*e2s7#;iEyiS&4fOrk#}J+--GXD6-+hbc7L=s7^1Xo)wB*!eluHXV6a8a& zd}wB=J1f_;a_y3bmGO8Dt%~$VH@V@KuV$t4q$L{DmKL|gCFq8a_CZ)f418F-5xW#y zuy^YLtsz##3>M3WS=M9iTkqpUJ%_gye`pc8`6>euRIp*x8KRNO`C+tUovPTBRhG5o zRUh{*9YiE)EGn@NJoXa9N4-)rxs2CLl*BtJgTR_)4N0{ypvZgVncM)QE`>P@Bz0)H z2H&km$GAABqRCj&BIL<3w=fjW;YL=3WB`?=MUfA?tP8b%FUNe9GVI5?sHyUbSZc<_ zHaXPHYHDuwu-P>y6>Y}O$)7m*SnZbHEgmIa>kVLr>&GsKs%`|QJP69PHWtA+1*?!m zUnvsQ~haXu%%F9b|=*1N>bJXEYR1}donliGUhvG~g zicvm1L9uKQzReX&j@IYV*18@Ma3y#kjEHa?0dnn@&f{Fu7~^1SRc475Oe7E|WP~Y! zD>^27BGk(f-+*{P@|-tGxWZK_R@u?$_c%c!C`yz{;9-wH{q<{=MBmMs%Y{-fmPLN0 zjEJEw?@H&=s4Nyozm?B&vW~#Dd^B~1pvr9Q{9%={D5Yd|OAgA@KFc4AhhJ9w!Y#GM zjpCJDek)N$AC|zv)gF-@0$~p%r*YizSYz3T%n@bs6_8TCXoJ?_IV}o!FmEmDxGMt- z0(!8uFg%14lN4BbEBfeFusS0@+V6~8qfxKKXHUSX?qpHvD%?@~V2Mv&RW*#LPqtP% zJ>0lxUUHR(x13hvxT_U(eOyhFl<;yckr@b!Z!xBG{p&>5BTVs<6~|`QoWvSSrFAc> zDOnB}v)*;}39WbG7=`6(4QbfD*%AA3>+Hlm?j&BwVZ#vHavENVZ)36_GPMoum?v&IGFbK#S$DPd62k~ij2zDELnMd*{ z?6)fY3bv61{1hJcWP!K3tEi^S-BVFxT*Enmq<%_U07Qds3E(7GVqN~YYqH(*^2!1W zI4X;)@=_l?LQpjp3mR4cizfC1=;oR4^wH5yNYlk3*gI?&{qU6hJ*p{ogtCamSnL*G zMmIdW%3>e>l=&rgtchP1ZrKtYM|zXw+G0n1D(ex6+uPZuCKs`K-9Byk?vJt96DM6M zb6RXen`=A-ZC$Y+KVAlQIEC1j0poZBEd>FJl1^oo@!7ZV2Jgiu{uUA3jbYx=qra1V2~)4#GQ(jYPVIuESK~^UpX#T~`Rm<<^WxMtrTl5^&Q4>g!k9!is3Naoi19 zI3POS%|rL7BQoUVkmGL1(xZ?ql+urpyb&&EB9Swr=Fx$44`#@jF2~)d*|@9;Kv173 zRrfZ|?WsRZ6Y7MsidAA8>c7{^gH zyc?$g36PLLz?LmJfsg>XShnLNKp-IrkU;3YnUl1V&pzE9cPAHm@4ffldoLfo_uhN& zy?64zH*IHTr|#~_j{iN7B}KdQ-n@D9`n=f&hgfXw7@>eDS$m<;+Ls1_T3yi|{XI;2 z1o$XS%m9RojP8~UVX>2S7bNqr6quVCjTIS8elrfyyQQGq+-QW#P(W>!AO2#a4J{9k z!RYei-$Jh$BeF;yA1}MbAS}9%r6_buFGJB=Zp%ZsRhn!o==r?zO`Z+dr__&cLvT8N zVNl#qo(cH=&@2O?n%{54PHY+>&qptW~3I?NLJILXlI_=M4h2c=xF zF~V(lH8rVAV9k_AWXy=LIZMuBDp!>rc+Llo+~yF+;WQj z)YE&@F)a}On z0UcEiQuN1xz2T+S8=$0pDbp>=6Q&SY3TI-|A9JpkZlDef{iXJUoq~GJrIlQ?@?q=lx?)zGU~nC!wR_W zF`60F@2|vbVE&Q3#a^%wX~7y6k3lHay~d+E(=e>Q-+3g;00B12@QEG^?Dy9q8T`!C_(-~A#PyNy@Oni*GNHMw%pNHwrgm|Mh-T{~0f#+pgMIUWJ z9jJ#)@}WVh4f;JOZ1E6xqoTI+_hlxFobbc#tP55bp34V)RcX@dS%@5I!Y%<6VfEg` zC&FVUMRjUh%tr)Kyux~htcP>@{>>J-oR73ihkOH zh{sZ}eAL!F#MkYUETat`<5-EZ+yL})GOZfp&czcK_kPl`<-kM++-|1ARnnkjDzXV3Lv<7x)eIpwmZqoOn0>RL$ezYz&_;H9rVrL_mLnfX+#Xy94cJ z?k7Cpl1nb(U(&$dc|Fm*7#|1{u+d~lTBeC%q7i}|TP z;A}4qui!v84Y^|qqTDx z;xx6udA1&0lc~_^l5$#X&{G*0jBrIH-g71Z9AhPhZwn^y-bT-m@t>jw0H1?xu5X33gSt0fW& zUxv@8hHJF;H4`#$K9D9ii8gSuq0PPl?=xBZT9?#=S&7*a^X3C=o>At_>-3DQATG!} zqjggX%n`NkFbQ7ctlnspK$^m+XJ&75f#T|-9#C&~5s`taiHLyk zvB>Ce5sf{1?PaW-%0DQKTvpUug&7+kf_Pgo1kqj@%Qrpwpub%}=UxYLavk<99HN@M z5&h1|8qx0pDa;&!d&M+dfdeiEf3{ZR``wc^zM+6tDSe_AYp0LBXMn46aaYBKfRwD- zZ)gG*KEx#qi&4#X)I1?D4gzABbrB6TwLhp@7qAab$ZFIm_@PPKj2f&D+ox0~Z-2zT zOnHX4u4VeDG0H=Xdlt{H15&Qll%GHxSnTbO8HETnFl2-vbEO6ofyXPD+XlhKVMc}% zKRzLA8@5&OC7jF#q&Wtgy$wclvKEd)7*akWm>~&mT8HsLwv4_E{uK&Vf=M@U65A3- zIUWXiOq+Xa7K7w=o0ChYV8EQWu;DQkmW)A52(tK{c~*p?Cu{KU0aC|AQQ;kYBdA6&XIww2l_Glxk*n@FE`V&Cp7C>RG$$ik8NirAG(1hz zcjD(X0~Yz>8MG){0O63BnWnf5u#rem`csuH@=q5>z6j%`=W8LF@_YL9JVJ7aiOFC8<`Tpnk-mOTuXr|WM)afV2 zyjBhd`4o=?q4$u$!6vNu+B^%lZExDTW$UKR@ShKXsTGzDUbxaAD((nOtS&YwL8cAH>63ID4ap2)`~rX;`zXTFH}4*{OQ2h zb$su>^5p-A);@2iiZ>mecGxKoLgX8xF(5mPy3mpM}I0TebLDhoD=f1M1 zv$zGOVjWq*BU)g#ji5Ra4r`M09EXmFD;fNELX~y!*TboC2>2KK6wXNPC+K5xcf!-{ zC#N7KI$zCdBDdVsX)~<@S*>bN2?Q>l$6|sh6_zo^VsgMPE|69s?m*48#JJ4z=Mcye z-^Souabp&)7COyn!V*e38$>SQ7AeFj;5}}Zkd4XiZu$&ED%9{%%LQRjc4@rP>RAVi zqLzphv1rY$bh-<0Bl8X-@HsvK+8h~$?DcgJ{Z`w!8Nkf9yWJff=s-4{-$6BFDNu)} z$tK06FoEhXWYB1_GgyJkGWdlt9NJ_EeFUV3V$o`i`=jv?rlRL9g^h!cIpT9z45649K zt$U>=cyuH==Rw+(U%X?|h$LapJd-s8LRRP$Q)8vep=>f1-Wj?)1nw%K}6j~5MF=%H1_aj!A>hY1=ADqAQ3JkkGQuK^ghC}SpU!KMrA~n{yy#$f+3QRklCfAFh@EGox ztcA8SkxQ!qZsG40mUd&BoL^zy6ns{NxlTxv>sP>Fb9p8^G15xGWOaFHR}V1$`SpR2 z3)tOOK!v(og|I+=?XTIry@r0$)u7}H6A#5E&eJ|g3&Y{n#KPZS>BQ3m(6nKormX=` zdqA%|jwawWU7i-SL#IvG)h#+1`km}rO2A}p*x!S(JB5%@9`Y%!SO`F8&qOdb zD=vX3rBJW!Sv0KRhWu=KN?peTfL-9A00`v@EAN_j_^Eomin^^@3sn?#%QMf#P8XY? zD)WqDxzjw@R|;Zm(r!Z1Bo0WQMYvfk+fxDmSq})v`a%=9KAg@e9ah@x3dO*#1Q3HZ z+|10gb)|O97X8{6jf*58i|q=N+3FE7ET)w0twyuc^=sP;)7jn57CI1DQr0DCivoY! z)K0W^+2-=y$l7u|LA*nY<@w>t@|=Ql)NVUNzjV(^me#1fJCpq3@-WYIdH(7YM-WCK z7dn}gYScu}(v#2HM3*5(RKeK0u4mWx+Pgat57M|RY6jQy?0UB4QG6+D6U4%h$ctvx z>-!LbkS5$_0~cbe;xrVYNVRviD<%MJmEVg3fut^!zN`!sIz=tU4LsXa2DaEAF1N>^ z70ZLWq04h2b0Zh{b+QrY-^?J#q9%8aXJMsKb@?fs>sc-dh|#2un$eB)>nXL}F9U;{ z%_;@o&(m*v*r`Npo` zY7tOtlwmftJm22L<<@KPDh5_>8bQNK5zY(s$~BE;tJ3VERBK$IjgL3+m0yvYdB}vL zWBI_4niAy!-Q2U^G(cE!Ht3JqRk9=(>(^f!Cs`d?R^Uk@%$QUeD2^8vE@R# zU>n%fzSTO9UX(j}%uN!ISs4`k{~*H!mQWE^s|TSqQhz*v;8giNbyts6$^EDSvi%=yjv#&$MJoz%tSjO02rPhgK(!F;Q5(k`b4D-0kLZOS<0q zxc4-VYYMPO(V?v$XQOnG;+(Mzo8vrZ9$RwI%8xy-71gu#D`&IkC@<)j>{4=|3NMdq zW(e*BuMxYTq!pWEyr`cG&oM6MSEE=1s*|r-+;S9cVse)EE^_pD7@ROpoAP#TK0a91 z>Zv=)fSsx;EiHjkOdE7 zv2A5%ntkkYERKpqksz|(Tf+n7B^GJ*yZL-5aDtW{kNaqrJ&c34+8iV=b`UX7L+Wvp zyRWvZV9?G&j#$tH@2Bks7=yS&0uy8&?~32QNG3X=T-pR-^8hWFL#5yf^iNpM=M^L^ z9+;{T!R~k$ky~=iTFfyBw+Cq^7LEwil1!|)@g7{HJSK8-iUl#&Lo|v3Mj{m`@WD0o zO8SRt=7BsC%(Bd}&UFtnBt^-Z$|r#cnkamw2~(X3|4sRzqI|gFTqeGVUx$D;bDhgv z_Xv$zQP+hlsA#{y9E^uDAE|9oYCCgHgSr#mG+Yb*8N*>d@F@e&WE$Kz?Z6&#gc&+T zsd(ZKCyXn#?oksulKI&*xo71gnZ54z#o_j?t<7*hxYibmw?n{*_&#K!kJhvyt{oYl z^D1FdbN?xrOr^t^g^&^hTwE7zVd*x2`4#cP|7bgGs}tmq&!@@G%Bvv^qFT?%KE~kV zX^;X|2qsu*h17;uz#0Vg?vNvwX`Oj{E+x znts6TAc|?lIK*}TB4ekZC>Z#HjzFo}`%xkDa(li%0z=UpsC=9&{V&jkjKuEFu;0Tr za5RF)aSw1&k;`zSCF>sV@&*)=1Pn`whr>R>P*YY9>N$)jI$=<)-|hEzv0|18^5ig{ zWGH6I=OM#D>v{}_OL&E6G&o!kB;AuCSOAU`Z{I*{Y>E*17oKtTsk#gf@f4FAT{MJ( zjK`;H#$LgV4)SK6rkU9W7dU8~ryDdI84F2A`h1~{?X~)!VIq(@&Old%S$NVq(8T~^ zKU0$eM$4byKn-tEThTPqv$QY~wm=s13L?+5W5Ptvnd$h!?|_QYQhbg}gviSR0>@x5 zf(|ICvv7k^y$Vp4vYL5;b|dk>3P{kY6?Gnx0Lj1Zxf8M*zmz8Z%9aXg*s!(5`ry=R zt~}3h_P_)V*Vtjbfw6fAOtrAchvr@Z{Tn~)UwAeckK!U~T;M>{#RkX<^5>ARaFf5= zncKEibg2tz_n}g7JG4J*ZD9@2iuMcPzvmkiov>f>;Xw5eh5Z$VX@J7Ul@lL$K3Vqy zu(L6wM}{TB2T8^Q7fu)Tg?jU3*o|Zu&YWa8+=n=%)2kOauIvRr1zxkOYoq!wy^CY#vO_> zh{%PPy6WJ>Xj}w+9o7OrL2eX0RLH*35z&+i*xpJPek_#}_|WZdcC%jQDn=F~z>Mf{ zTZn9pniy)~97E>kI+DN=xzP zlno68!o&*88Y3*%nT6$QhXcQrCcA1{AL7~7xk#^0)l^TuNI9qgwFXnHv{HpgRW5yb z*toc{w4LeDysoW@+f)7=@|`rfTP2-_lp`TQxKzQS&`6BrH3s3V8r4MLe}`cgq{%?g z6vE$xmbOseYh4A^bQRQodWa4{ITU9J2JK;^LAQgK*}=v%RVNl29S5NYaum;$wNPA9bAUy1&6-(rT!Ps^kNMcyF|^wz5kC zTu$U6%0+K7>_E!%G{Wj(9?OnY3@R@tzuBrLi>welIXXqsy?otUVj^p3k1&D)2c}GYTm4_iPgw(sd#xWlb z(eYCJ|4gfAjygM|BRI=r&`L>=%Zm4K?MGU zmx#^!F{><>%e8$rkS05H7(T~ z_-FcopVom1TDXP<*B-wrMDLZGQ^3}zBMUJR!iI5KBh3qyf~-VciFb%01wyfX&C6+y{PPLdh@P3zyGtK>wAEwEUS~f>#w7b^50f-gSgt*EAPQccHF$yaYvo(AO6lpx6o$+J0e?MB- zWxZ*L(Tr@2Sxa)n#2Na31C~nG{m5_%ngNja1w3oW8N(zBs}a60j+f1LE~bDPG>Y@B zSwtafTl}OJosrG0Ea9oEI&}t6u_&<>Kmi*ArdL>sn2q7ZVAXcU&(h>BWpxIl8f=Yi zEqmsWxcNY^qF`q4li0`4*nSBJcF`wsJN-0O4Q;~Kd@bdU6QxE6(paeZ9gxUA19 za`iys!z&#}`09YT3`+SbUN_varG<{pys>Kl~G(K zH^G_zHfR~x0qXLr{X0MBf{MVCBx*xSKJx&Hl9TxNL33K@Kn+2g-l$ay%pZc7W=GZ@ z>}hwg$4`0k{m~VJ7EH4f5~2!>3G9?Vxv~ZV6D5z$i8}#o{v3o2+~JB%yj9vnanxUe z*cW>{W<$7)1sYjZ0QOf`j!BSM>gB@;95toC1x;xLw?7WDvD7`d6tKU$T9D;aB5lB= zlWV15{UZq0cn5Y$UxF)&1{Id-pFzT0#Q2oW8N6E5RHB)de`&#F5Sr1MmVawO_OdyW z|4brB@?Qg%&7~ zU#-FNDfn}E_J%}397Q8jz=iG{N67KJDG=?-D11wcnFWmk&Q~G4N=6dHU{u!^{+~K5 zD8+$8d8u=_w%yP-k+N+;vpPcanrMDZYmgGeMNqz3Z%Sh7vc=uTOg%wz%82AwJ5OHD z;46@MiV_@fe8?D_)fwsYk{q%e>>qe&>PU_BTK}maf*qx1B6JX!*SHpBO?*3-sVkWF zwkS>0VO~+AINd2qR`GE1j)UUznCxeGnwJyFd6KE4HRh9@YrYf+&s zrHM6GV2DSJP@RU>~)1%+qt)oMod1 zTwB;v;QBzgXxMAhJDT{YK|2(*hhv8-rSxP@IHh%|YJTCAI0ognWEo7R3h56Clag#+ z29NcH^rVEx&V@bnGNp+x%m&xOl-^!t2r{ktW(tdp1~k|>aeB;X7HMwup`EEnz^E;_ z(K>FnTib+DSO>Fs2_Qy~W znO1u=mM@5zIFU|qT|!UUO5oMOOYc|6O_8g>RbVB+K1rsoRjG*?gszgQYinYbaH0q( zAe7+ZscH*$XjQb*VGn+ zSwq;N2oa^CBf5k&!Z6`V%T~DV!-~qPts#_Ev`fap3dlo4w$lqSF}a=W)YgzFKe5t( zhoS{OQEtHLsqSA>9aAW0DmD5xL)Rlh1L=@sYatuW4?6=Lh_hVgd|_@jDu$Y?O5qmDM|0s8;)cjwx01;PDZXUtdbJrQ z*VmK_BaYsRKgj4hTiX!MBS_w?5zg}lwU}`?j4{5v>DqI&=C8_)AznHW7FGWNrr_qA z-0^Gb+z{~vR6>rYZ4!*89LU^)8VNV$HmVU;CgEg#rm1^7GKi_uth-Sav(C}^3+n4` zYS21^?h0HLIy%iXLuchZxCP17c^1|rLhJWzg`@Pz`Gx2tqc$W322jaCgVCjizQEwD zlbz0oZq2pF>_+KQ0B)=aBw-~k^q0$1EPXm#&_VKpaIPwM%YkFzO5dAXI_PVd9xPhjc4fQD#1s7IvYDC0GvS z)^2-_6AUh_hgLT=}3!MKH*V+n7% zqcJ5*7W}rZPOJh9gd`RE9{`Bo&fvxtsBO>~2LS4~cQYhqlomOyu((`;@G!+%I7Z3k zU?<%60Im=PjvHByd`#WJl>!jlggbjF>&0`_{+rkxgSH7=q7px;$?oqvxehsq6{mIDC!dj##-f?XYiIXrZN?gg9d9G~io*J|4h`c&d8 zR{asXiGwB+kL*3&nhGv@COv>l?%oL@-FBPKfOHAhG4}xG+-;w|fadO8KujfJHBr%ESrs@s|vT)74cd z7cj^n>@egaOb{rg_!-qwtI-Js1wk8f<+h@eqZWRrs}4&Fw6s9?%;QDz?Cfo+dF}Et zK{+J>GoFx$0yn#$S;V4O+th-qAtT{2 z%F({jI9rDN1x>fmnUG)YN5aOgOcCQD{AMonfxk?xXcau;ti7z(G1-Qp|D6$B`vzzm z6HdD=DGeOU-l7Lf6(GY>A;+W~#pJPEEv;mS56HoUiX{v_EXVzd~Xa(YwD(sVnFSdu6WrpdG^{)pXTGcTB-{E;_^j1Jz zMKou5q}H_pN0J(bP~V0OX?Ic{Wpf*%FnM&f1~^lX(P(1y0fXlA*f7sDXspL+v?;Xg z@Q%XPUH%5^!TmR-dB)?l!!w*MupE{01b9)Fo0Vao7vvS}&Az z{s5CI3N@THa^KVws%RiboAJM=$*2|$q?Ux#s*Rp#FvU==m_Xt}J48Ql+aWOJ!b-7#x*fVj-DGBCm<8Uku4WwgBU4@#&9JV6sk}ZB1&sBHuzti3h{YW6rv-7 z^shR4s3YGK`>Rf;?D>YeY86m`@`LFWRyaoa6?&-a7_6Gg`%n2E>Ktd{nw@TS&8~n_ z^abD`fIK6uoR&MoAzV`luM>UtAHuvr`iwq_#opt|Z*aO; zaag^P#bn!q_WTYwqtY9b_i<)8tHZ!YdB7!?T*ANLKRG|}vN3M?CT;Ru&m$2y6)|oI zITb?=4GiIeNe^5b7`ZI;TjT7ZMXGr0vWNpr875Y=`;in#uBkUyan&5L%m1dyuIjPN zUayZ~lYXz(nB`m2VsDJL1`3zf6RU(N7S=Y#T~peR6SgYgP+T}|e{i8W|&O9eKLD^4NU%)~*2uafZ-KnY) z$?GC#MAsF?^BUwg`~;caKzOBmcBS2N#y8%hdAlYoS_|!Qd-ABfR|~ZmQOS=(3c3WS zE#z3DVW!@vB~Oh&SV8UNr~Ljm@CKpWxxw%FCjY>L&OF|SK_c#i zI_JHlTpQMtj12pmh*DG>Wk>!9gyfZxTRX<%L2bi-l$|-~kCr;T)I5iPqIXG3{gnS=71qh}JKmwxJ&~E!tI!|0n((hxxeXIvV}vAP*c0%9VzRaLYlb*WcUP zIU0afHG+%s;1uIh2YU4GBRC-;@PiJyZ6(1hNv1xjMbP=cxM=1fKj9nlQ(Cy6%-YsX z);SuTgYqxTj$8CfJF-vPw;|F3_Y4x+SeTD$wO}8>e+zWdm20G>?QbyD%qRd}Fs-5y z0skHUkW781ihXZyJ+=nq3@uCictQSLdoJsW|7tZdz}Buallob$ zD-)q8hk?N$P08i)*AUvI95QD&tDapEZZ4$xUJmy_L@P zt>AgvZeu?Zx#)A+B_eEYM3Yk?6qzmkymlOo6KihR-^02@tSL3{7c>dN2j=#ug7QSP z`WLloSsjCxX^s=YspDb!9vRMADib<%(5c`A_socV0{zzr2oJ( zR{I*BAV%c3${LY$A0Qyag%_f;_uzi-xkGUb4b#YitI;(|2+9LcSTBZ(g}w}R5B@T3i<62IflL=il$ zq|+??!Gz302nf+W=#|XEI&H!qYV|ZkY!Co^1&P-O!CA~bY@VInylKfg`Rz)szff3&{^CHR{i_qC_$(cLJcrCvD;;h!A8cfNDNguD~N>;u$2n8*d3) zs{ffB286VgdPiDFH1p>sV^^6a1Y(x^wBK&rWPu_omLmRcpRJiXMN0{n{TC)rKt+8t z-=~GH(U{v&w9F|6^Iw__a}{%85p&)R;xBl}j7Riz%q0Jn$&k+xH*C2ev_XKF(YDaq zjNGqHPL+;aYq>q&ACX4baXbOmP!u-5ajr3Rvl{p3p{K1P^@4~6)`N11l+ZjjBG$C_ zzfE09I?0thpg8t-+L<9$ic_pxi`fFL=8RvBdRX`O9@-9f({p5#Wm#wubM=CD5*rAP zko6YY-F}bMyG|C9KRPji>k2!Nhh>K%;xK{rvTWn%L?CpiaFAp)s0xT@_^bD zf7Y4`sGDMM!N3cZOHo2xT?S#n*rki@-LJQ<`>fRUP8lz%l3TG)nBgTguTqRU{} zRlx%T&hTt9_4o22BYgcInz5^7;&x`^@jgl%@-L`DHU6acih;OAG6g3Fl_iD}S+zeK zdd;Q`9K1|FI0~FfQ#PhEi|I@@{#$D~hfEJMq3JnG@JOISf>}^btMnf629IEH9${fq zV&8CPP{2u|hN_3vhK@V?MxDHB%z{}y9**@t7NStcLi~I)%*QeO1TXV^r_xOUDiCcZ zh%{p@q(#foz*{Xi-5_29Ls~Yd#-J9gnG#dmat2Hhrc{ia;M9>&>*1Bd={Z{X=?D^D z%Q8-wG?_X1q?6fyJexjt%E_RaN1%z$hAa21&BxXpl_uv$_~@i&N_EfkQr62MqJZtu zx~e9|%TWy5U;%=o!NbMGBUk*&utAytVqUg|GHVFC%vU4`O^~3QtNv%$-HI~0Io{Q5p_wS-)(2S5BtV;x%&`B ziD*W3&OoJy*s|t{fdn~G7jNQ7Z40(t)RKg=5&8NXSupZv@OMu^1tHvxS_Fg)I5UHGOyr zea-d9#`t9LlGO)V52>a~9u;6?|A4IL-pf|-kIp;)JZP)D>9ia7Az@CUNBC?0%oa8h zP#{@ zQ3fTv45yAo{3dwljT+0^kY4HFko<#GKEc6=8Xe(=>-JJML^(-5LF7D9Tcd1wv9;Kq z&!DF&9F>9k(M5H-ba2laU0ri&`E=Ed9*!s{i1Zy^=1N2kfvvxWMrnBwHSlaS%mBb> zN6GRAl?DjF3QFT7SxCB&P(oygk_jJ*qC=6KG@$?)*k;dMMJ>Pzs9W#wPa2AS-1uiR@T8}1_vO<(i=OU6A}YcDB}i#%n-n(so>aw2;HWh=1P ztc$%Y_*CXJomy+a=6>+%afgc!z^zNxpW;!9NcJnTNkmx#*V1AKIs<@|B&J5G!LO~Q zD-DB-E3eC;f1Lmb!kaENhf}rl2>KjEXoBCCq>w8pJPQjJEK`+uszv#jZ@^yP^3cjS zfna80%m)#?Wc_Io<{r31O4I_?awg0W;A?1XgP($4=2D27Y_p{-9N)20V(V=N-&cxJ zpxhK^veF`61Y6rb@Ul_2Z*lK$K3AK>1!+}5;wmX(jlVUA5a(q=0{$~h&7sA?9iB*< z3ql%?StU8W2g)n({^-{7p3Eh%Nnq=AhuDw@YVlu)*f^T;P4KS6-L@@Fu4mJke00QF zfNJ&O=1l0?n0NVHQws1IX>v{lz{CtMKkYNq@W6M=!Cunb-!V!&#%t@MmJy-5^3y z-Y`{*A!R|$w|NeoYQ=NBfsAvtlO_w<+{#kHjX*JTBQ0Yu6g337Iw1UMCjyJI&Jn|* z&YO&~&Vh)Z057AyJ>Ovqablv(#A)Hjr1Q|`2K7@x@hY`^ruC#KRQ7Igb=F@nAq@$X>V^cHaGX?*y$+QaSn`K+7u3-^8y$L@Ao>VQ9-^`N_00gu~jj%t4% zV#vZ#1>hu8hil^u^50><>%Kb%2uGX_er$RVgnk9Rr!)dJ?Txy;&O1#==Rs2Y1*@d< z@J`~^ayA}z=103bqZK%aKx4<`k^*;5k*=ZpUm{BGoF-@5bbt>5AFBYZDzHigv_j1$ zBYoCD#lgc@X^H#GORdrJvdgN0IAXH?E{<3&8-r++W7&+Nq6l|&Sj24bTo0FmaJK*m zLhVLF$mg7_zk7s2yN4#$gIC{V^-Kt%FUj#=w)kM zm*lXPZ5R?K0e)~0S`ixUeT=KJ~6o^HKd!~S>NVBD2IMqnD!y}!M3FiAy zD}z2uDT;L*mM^CmLa0cvouOc=(Q8-0y1;>r`D`!-o2@+6y4vM1rp=kdsYtu!IAGN% z*bCw~a0p9tTtA2vhE+Lk5DKOmz3vr2FVQQy)D9g6OaviRMI2PlDTHyl|h z&tNM7LV$p%NU`0)aH^4Pk0WlyMRX-|X0Ic3DgmfSu6=<}suAnn0Z@1iad{TIk0X)H zDaN5xB-?#sKvkpN{Q}HdTEbhNa`z9gHYtpXbbCNJplVcmV1VF+wEoKcc%_Qke2}9s zm$RGzQ;~KLj)GN60Vz+Z+)GW?Kin1^A?aoI zB>KRQ(BkeQih{{uIWS`Q*%m8#q~EXh#Y!MrFsWDxsKL5oC6Ag=tOQOJJ#m#nnCKm@ zEO$49Cjuv3;8?denE7ajEGvvgl)#m9&NN+VTRdcljQJQxfpY>d&57|4`TCV&AjDfEey#CRy-226~^`r%7-NMS^pI6C@&urQ-jdF zxV3vZZoH>zO$KmVk;n_=`f0+Ew?xLt1=ZU;O`A6v68>Ss0UP#l&k{T_;*H1t48$b= zmHr8c`E;#hH6L`LGw##D=s*F3J;SofG!+|1z-MZHGG7qB%8014%#=wAypvDY@Dre9 z4Ddh8vB3%gfODrU%L)R#g8Dke76CQj5t=K5X*-I1pFJT(c9k@F>MANS<`jgT+a#H} z=Qunkq;_FMqR`-oEcrww1fJ`tW-)?Nlv*i}&r6f7E?z3ku0@Z<#!ixN2SOB5neu#Z zwaE)K!9k=hKgl2$!jOuO7e=Vc7r9JYB9R=)LAJ8+4JNhz#etf?A>l*X z$F_-H@7Y9!h4F17V4O*9A_Fe<7$R?&&?dU->YX;ihA%BV)Z58MuDt`sL$dyj4iPO6 zgmsXe#SXtn=&FpTq70BXIdq8vOZ2LX29u+etbem3%1$>`e)5@UWqjGYp^#{A(K^A% z;X0g%7>!>$W3B6C_{!gG+w-lObD{&~OYYm1z=;)hrS;%}ynuCSw6{%YGhQuC9=}Rn z0U-;kwTF%EV2Zkzwq2 z*~7s3qlm=+xoqbAQL16zt=%mS1=ac^@6iB@nrr>R_iBK7DL2TwtT5{PG@pS#Y_9u$ zzeC;?Y-b@ejvyF1VhTvE4+Q!JAJi)ScVZh8(ko4;!-pJ-fFjGi+I^*Zs(e@@o!i~| zh$B})wgE>*YVG0`-SU*#&o*KEQ6Kz#OT%)IkIj_;VN*fgDtFlyM81qgJ@(JXCM0s# zrpc36Q{?9S(VAcAd&Ta@9f??t-*7x4bl0+lhd7QYt8m%9r!ImC)?0w071E2&+MYxQ zFqgp*mF4yj3dMro0i^5~#xq2ZM#=Gs^7|Yk#?H0{IQ}PnJ11Y6IFa|Mf_F#W$3SsV zDEre+0TegZXDs43Zj{e@lxZA&KBsBCUN+vkvo)U2Zxp9&;L$9f*Se@;J{Fk^uBnCm zTx(&DV1)s!py9rd+RsxGzK5~n=K00RY1J<|EFpqqFtdGGo3=(pvNmGGAVPkHHF;!R z^WhGdIoc%da_~BlFvT1eTO#_v`mbu14#%kkGGFt$R=g{mw7OpXjN;?#+Q__7jTE33 zfg!;+-llFjA;eGcvM~+wjW|t!l*f-v`-9%Ap#86H3kvBf19wppY5@?0k$CIBIU#Mo zZj~LZT&K7+{bg{<-|`4uqT1IH5)rL!Qtjq~fp7a9bopR+DG1;3IftU9RAo@#b<~X# z<`baMkS|ZP@A-(<=|i8>-L%zzDWZMf5nH7*p%7Yg(C-{BK`K9&ANWikm`k@aH*630 zl?U=eN1;8R4g*qcMr;cli<{<04#mixqe2Cq{jt-|(x3iGj5gO_{%N!=tB>$Aiy@~! z_j8}rkX}H7{i0y3N)MpAUjNIWjNPxar|<}S@j(2qHInnXg|JGO95cl0H}Tnv-)co7 z96T?ZC{-NuyPAt*ey^<{N0P)L07GI-1XrE>L5r(EwN6HgR|<*aKZd4}2m-hkL3Yxg z9I{44^X{(>x)Jf2n-Y9{ zn`s9|PQkQ0H28KXcVI`xqF6Q)Zt4LUimxN3kSW&xZ9?YX)ao_%A!`QKugmU(08O&~ z?~Z-Q2gwVprx-T{2h>(wZZ5$kq}!M})c-V{p~qhdVn{P@%$^Ze{su1_ zCDbKpK*WR%WD`xW0SlrDc0u69b=D>;e4o@Le>Q+2G?CVx>(k^}s~K$O8Zo*7Al9(d< z32iWM-W>4&DRl*T2xjR7zkj%PZ3B_T4iOnQ5`-qKMYoDM7r$Jg$91!oOn5UY~1bJmGawSyC9T=XLv5~wr)F9U*#PpxknM#^Jv^GD>Hy35oSwxXG}}y|T9XaOI8>7? zyz$v9m9^gUfp8dz6e<_<3MU}M@K%R9P9ufPzKYHw!RP#4(@!?NbY+i#f+>-YO#^|z zt)PLNvav4v8mibQVqZ_M-Zf}+wP~T|O2?&jFuSwicyC0Q52YM#nPzJprH7!9Qjs7< zCKa&o{^eo6ON;e5upmJT7+KYkA`a7Ji!64E$f#x(3s*vq*S)9mR1R~ok&aNb1ik*3 zz=`j61|YSH!-=`^&av?JnoGmfAS3H>U&PczrdeIM04|}z11Skn!ca<5t)RjRWs-7> zAIe&0CV?nJ=myx)?k#kA@i^y_C^~|{Z@sHR6%wu8oovsDltb^kU~e`L77n|8IRY>h z2)KYC=g$w^3MRn9(jq2l1O}9am|!A-0uZ~(b-^Tc!LO!Z58^k(ddBPiQ!dvPD89R~ ztoFs1PY8E6C6o!yCx#@uHe5X{Ww+rP4ii{r7@D`yaXHCU1_dR-;wUwk6|~7`P^{vb zT2>8hBOZSt*C$HOHx7&e`Wg-mY&hA`Ek`B-8lUuIGk1XbDwsRgTdH&<>T$A9nULWF zyXr}+is_TM#jhPG_bHs*SuO?aI*v;Q ziZr59zx>orjhmWqo};J6=uSc?{BIeHfg@B#l9mCGgNWqXDeux&CESy z1&p*d0lap?+eDfoiqrL2IwV70!89@Meq56krf;a1aE(L z2Tm~%p?d;jr=VyDJQSo&`GR^LrfwL2I4Eb151S%qY!;AMPBvT+p$cwX&KkRkCWE*z zCi~eT$@pfYlI*7SSd<`g|8q6h{h>LY`;Bu327;K$2Co*;lHUn|b-@;MqAlv!G)XVl_hkqWL zECuhDfdZGn<57Mha5=ajfeU*mIDTV}6yGY)C|3|AcfitU_$s4&Ye#mwu#T88R%jZ` zGK|Hbo*~(An+SDr+j=DS?aFDL+iQZJteMm|P1P=UsAB)#vDoK<=r#nghEUHDC_t*- zNu!kL0ueXNoi#or!pw2Fp5+@)2>G8>?- z($k}o4@Cv1DF1Np=RY?2CMA{dE!B*kb#lH#P*PQ%IU=(5C!w1D`i zQU+aA2=Z{nG~7vy;X@6K;6*K(7Yq_{!&f3C$8OD^Bi@SD5#AFhXE4&IC-C;xm%!Us zR|4F!uJ7zlR#$DW&Q)J zsGA3Q0n-hMfXTWb^g2z%2S@2Up9%o!S3w0trG)BH0}q*y8i2~e)s4F6a@(r}9_o!x z=Yy#U!D}+!4;BAW3u;vXN1$Eyum~0KaIf1#Ca6oJM`+P9B8@Poh+H2m4Sq`@*Yc4;El5$4fK~<61IdS1n}fSf<%!LK#HeC z$oZ#gGLkH)Wa{T*Baxq0#ZG&=SA-IZ#UrV0| z1=%ra5sEXdtCaRx6B40tPGNP^C}f3P(i6l`vf)S^NQ+1$!f zvD@#4H(4U@Y?AN|4VX8_D60Hb<4-n^;4RVe$)}Y-CRfl(o<<8gZ`I`;ymdkf>e{Q< zMW0p`u}d4=#Q;Pzz0E5@#aN;Nf+DxC%@{2}M^TrN<%c|Feqn+ zof!mP6teTbgtN)J(&YMXi^V`mC=_1IhR{!q#a1~XqlC==Ij%|92$hRA5vbrGg9HrN zBc82CgA9~Iybr7Uw04oAtf;M?17(l$VEod*yNra`)46whxKLvMfNfK%8)#7gFpWm) zNZ#W$GT$3vWWKMgEr$a4{Xyp92ehaR#++K#2=@myQjqeP&E@Y(8smKp!a!@ zI8pF9l24?`kucv@XAZvRSIEnFNCOkc&g=PP+OVJDWn;SZli?LEuq5PjB>W4*9kqGW z?3PVu&CYJxws|WCh{1}jVA6-{ta^e?pPG;@f1NaW;;IIl*p9$`?20oTg*)og4jHJZ zJR%j8gM`;%s~@EApcK;DTYe$iO-~FZ>uh>|p+BD{CpiAv8ueF(^I&|0>ON0Fvudb& zi&@mi*=#(4Cc`^o7Ui6e>)HrJS5gB=O$!0Ca_ij-;-Krjdj%q%mV5dv3ge8k(HPjx z6J4|ov$EVxlXJ>V1>P02xMBGr*aYHufb+lAqA~IS0~PPJZi|{8=yQ%=;J)LJd$M_4 z)Zrb7o)A#}C^TQj8#I&C-E+`i5L56_OL~vbBBH^6vMCHJG}8F+fe7I%Y{A2IYZz6f z1@^ok0tNgkao;lNFNj%hbQ6lG3=jLjGh(=~yq0G`>a?M*^mdcW9~CHgR)xMn=H(%> zcv1`*>HtQP*@+5CFa#Je!RIVEaJvS6z;+wdFk(t8`Fl7kIdd z`0L(E2v~pY`Wc$0 zO{BlTcIQ@`L1KJf%*E;#)7Q}R^)QKK#kik@7S`F2ZBI8j@+SqJZgNO3FmhNuaWb!7 ze`VBO%D_>x3P9z#7GV~vaa?#-plx+H)K~bT2VNlK=5ds-c(Dr~)T$5&4*Y3GH>>GD z9_B+@S7X=0GJ~t6Ypl#^d|qH~T^xK3{N2rvW8Iw%p+v;dPonUw7=GHeW%|oYEqG1K zD99EXdm?P8(XwwSctQ-d-i8%hA!}e~-0yc=P%ty>%#U_=Mk~D4^oZ}2GA3d)*YcfC=j#?2JLya=vG!GkE4{fIuq;(0ofYJ z#0NQ5idiO%*M25VJaIN2en4-Z$7^jTP?`|#Xuc0rS{$}psukOWa19s#Xe1I6hbShv zeogRh6T+o2=q7{o;X1C|;zVjfxMRFVv6GAKCWOoMR~|TRLbwut@W`w; zCdMBWO3dnqQG0>J(7e)(M%tPXuCiw-QD}_c5!aIF%<6B zs+L_7!Y$lj>*p^Huit^APUx z9=JGZ07r61?CPW@dYgvATm(v+v0=xx3@P4u>j-Zs(O9u&5#(c90ZiRYNT93T+UTUG#0T1ZC4 zZCyv2n#KuZXoiCBnGp1G6_>mO#j~P3CdPtk^eq9hX`BG(4@P(x#GBaA3CVjmG>sE1 zRp?Scqlw$fr+;X8ND{S<<41*O#nx@&woTktsZ69{L^&$$iL~X>(x&RRsk+rtMKt&s z!A*Iz)XPozqe7Zlom?sa^EaBft#P3O(hQV_l2&dSCy3YB)S#-5YUED}2j0aa-s=Jroz+E?fS)jL5 zvHpUXb<-l(%7RU#H}lY@snDg-zNSJ~s@bB#j}oS-&}}Mon+jc%7$p%hu9YDuBs%hP z{bKrB(;}C&(rsGg(r7mK^Q_%2Fsw=+YFgwH6^23MrbTYi zTji~4n-;m6xF#KKk#(T=Gw3(wDp->etO0J_Epj6xy~9?zu!I4OphkfK~ z#uIJ#B+w`k39)+5*wa8P&Bc16^!cNL**#Hu5#{wp>BW;`Xb&Oi3qfb>^GC(to?6ZP zjeuHB`QbPK+*9%-Unqbk9^Ax(E&04A9xR!v7?bi!GRqZ7P48E7RCHLLM@1u1rgl)s6=% z6?Z(q%WujXb+CMJJZ$$yi~Zp;xdn4HzoXshrHQ!)_={=cIor=;Dau`IgJHG^0--mb zjpBp8(AmbC>}-mFns0ds%L0?J~sTAImLLh-fZwi5iAA?c|`J-Z0tl=cN*0m`DmLi-oVVWY~rUei z+Y<9+XA`(>0=G@zc9=Q3T@~drH{v{Xp|U7vK87c#!`^7RH{>^HlF*zt)J6k%L7}$% zQQ^XQR)xM15^57qilLjpEpH)CY135e(ok;*H;E@hxrx3IRQsJjDhBtY0rEEjYQN=& z;{Y^)+a_?^1a3pZmQDADCUDzs*Oo6 zy0x0J3EVb;Td9$WU>Iu||AEoH!5p~#a=F0mFr%@8_`q$`cDGR3p+z#$+ZRj~*K)PF zU=40Y69HgmMxAA|8{Bc^=7P221z;MdVmwbd1Q76s;B2e7RF{RvBs~Eq9+PY;ZjDLR zVyw3b+|ud=N*TE()l(x$;(blvw%wwEPgFT#PkTab`5OVDHu>Q=09<5P9YMP06hITW zr7_JWa9gm;C}EnwZ45^rwZ0Fq0 z_ApJX5A4b2+Jk|u-@;eYkd zgcRbgiTe)cq2BW#yKXHoOw6yBY{JBvkdb9LHyNAyUM2G{LcrdrZWAVM$+6R*ip)HY zE0mkn3(^N~!o-Z;BoygoPa3ccsus^56|3T@7N>7CVd5rC3`WM3&2c~@%wdBN8%;If zgnw$y)7xJXynBWVpOz6IDJyh1B?Kz8=}Z&r#^8?#G~D-$sr_|*R8pT7Al%60m!LJ> zc;yzWO*dZYtiEi;xY;Q$!gVzCC%YhjQgEs@FsZ-5!ktZhuOOY(Kq90=O^iY1CQO`1 zR9N+{8}&rvQ&lcTTf2_X(nuvs_w zpb~y7flt2=nuz97GJRN^jqfMF^pCYrBnNsP1 z%*QgJxtxu6^cUva-R?+Q-84}G$9w<{O!0zTWiNQ&($3h}o@YyKECNxJ8zrR=KKvbR(7{4x9Q3=|b7WpnG${>7fPYV; z6#{P$%!qzJO^$>GYjx(}Yknm~;v5QJaOowCm8K7Xwc%ef9MjM6@?|dCeA^37oo$`Y z{*L2q_<^>|iySJk3?hJ^BjF3)K5Fx(*)5ySnw{OWZSz)g6K9%SzCT*(v^onJtp0c( zJhvuI4ju0sWPtIJLuq^s!S;W^m62GM;h@05E;loSG(2 zIBiFNIXf+z>#vMP*=f97ThVHRZhMSf^S7UI)|S(^odN&f-tF{O_HJJq@7lii%x&AZ zZ9Q$!U4e^EN6LHlHCpIz-_)9&ZOyjirGc{&L&THJ`9}`bs!HUAeruEsVZuZPpUP$m z>uHh@m)(2nBDgEP1yJ2da)iT?EC5-^hI9KIlFO>rQcuBNu5sxxP^*EUL%^5<6W_5a zQ}MKIDwD*Uf<~4wDT;iyBA3H`{Npsaf-L-2K$zwqeBvjXa-T@S!Mw#*OuhG*RwVQO9a6%*74&%QU&NOe!+F z)_8spH_We6^@<7&s}eN(b(BQKmBr6x$iJSI{f)L9s$LcoKioGK`MdfLylm7{zxA3& zTu)&vmws$&3dFOfd}7p;$DotZs7FivZbDkBl_pPGT`kofwC6hA&KSa4E671$yQk;;sr6J^b5Y4XBVT}|;vbI;m_4|WY zY5g%mY5hri78>IB+PgbT?Qx%&Kb&R=`Oh^;FdXYIng&48O&g3PK#_uW6!0 zYl>E$N^&wf&M8P_|IJ}w(XGNqr}d=ND+avCCkVvfgC{^i#7*EIX>ui5&%)}0mqErr zizJA||4b8W`avN=9BTh^Bo7s97f#YfQS{$lr6h zDB)3gZ?|}xf|1|`^perv;odQRC;!Ru54>!&JRtmG%~>l<(=v!cz9=?R1jKd)ol^y` z$|?wnJq>>IL_FwCY4Vi)sLos(3`1ViF!?B9O5v10{fP_P2lGEgg+uQZ&7 zh;tmBIIgYs0>u6xlC>X@hRE4@r3l_!=ZfC|@h-B>PrlrXlY?Q;bNVzykSr-Ezx=XHMc5251pFO-~e+)1OTf z`<~QA7$*6TL;^v)&K;_ohQ~q^D$_>=YoZcX_w?nxb|Oh&p)Ei@A&$cI6}*GS8=uqQ zPe3sC^HsekI14yK^rkl+_Sp%}{e?WE8Hmqh z`f6UKw>CoQtxJbZKqQE#N&T)7P#bH?N~vt5`ycb)-ZXhSoGp zL+aR*|K+=5C<=*i3Wz=A7mtyZ)=qp>fDcJvOhdR>a~y?xEkoEzrjIw7-aKPWd%RVUtldB+w0t5a=yy}rhTPGxsfaovVpT2{T zN2C@EE|v=sN?3U{eY#g9 zoWZ?24ly~ay2!h3MUi*CG&x$9x>(Q|Cy%aQn`AqCa^m*}`&nq-FgORI3n#weIAhuD zH;@n&BxhiP#*SP);`5vdiBAyA&)%=%6C!r~VTjBm(SUOco0A%66T3i*VVigT1BWd>}0@p_DF^b5GwYm>Xk53NnuD zXPc>f>#~tfI<8IBgEXrk>dVDm>yhubnUH)3BlDU2Q@&$`w@bRCMKyifQjtC^5#dLY zg2L-i8Zxhd&ky)H#-kfbS66Cm@S2x~1LO0$aSWK9e)*Y*e^E*Z9*E@$vZeqM6 z!Gb)HyF|$KxRLMb9XVH$;UhCnkiWsp#yG{@%4|2El?{TXg6OrLuu=;pnU#$~rLLUj z-6te?!9(9ag@}|!E}08uXUX(EV)r+S+ii@!ASG%#%U6_72x+_bl5s5!3AqB2J1qt6 zp278hjF~VqAqt2}fo#X_rvkVj^#u==vrs~nUS(~Bt38({)^1zI&8!{S=PM9I5|D6Z zBu9}?8DEpQ+S|RixJD}^O1Q|JePXVb{eyEc|ROA_qg8~#X zWex-}@Sc7Y3KqHcS_zE7;yY2!WenPbeZ!RzJx0(U@}AI+aFo{Rz_G%rl4soz zltZq(yMg*-uRR{O=di(tlEgJX?CKpfJqlhQM$i@k9M9;$2vHL=bL=>{?ma(-(CT(Z za3q1B0O9N#AO@(wz@4%ZY&;Ey*R5XNij0E>+83$H`GoL0PU_x)f&2S-4I#S)cHb%%*!_aJNpj-# zS>9ihQ$^uzjKM#^JL%l|(?LGa8%U?`76a)I(ippltSC3pfj-y^l&(?{=tCl$lZOWL zTx_HtIr3rJ9N=W_?oPI6)EW%?1L&_uT9CHq=CTE{<CuF!u`UZ@t|s2Oqlh z#>uXMik*i~bZHiOXTVmkKPD|6x6iiDXlp($}wl294fNboCd{lG>L-;j@<6ddGZql&j(KL8F! zh4JJ7u0{0m>j(tE`zf+5Ksc>VSy5yLEx2RD1aV6fdmF{+r%XsqKA#?Hqu+fN=<^E& zQ+A7K2v;s-qsCxzn)EM-V9zmxI2ujl(nK%xvnP|8qT`z?J%im^YE9s!0Lk==3N=d* zTZjnayjaT}E)3gyHs`4ceu^4~lmkHsf_@N(muO{LAll-Pcxi1hsh4Rf4cP}^X(y4= zz)4Wcj9|-*G(ItDelOQjFNQ%`(~RIDU*Q;%E&=ZZ;TRJCWc|RLjB&JArpX4kmxROO zmlj1M;Tw#iK^Un*#N7*AiMQME;M2yHn|{@V;$?8ub+Xrv*1}@)&u2Vj^NuWC~kG6w?|YI0rb4V4AoVL5T)5W z9Fjv6o{)=}I#9PINnAo$M9N|lsQA7!)l=6hpT%1l?{XwgQKEC9n%^YgK$eh$`~we7 z|DQwWQ)S_sd_JDxCwSRtYP{PsBPfl@i(+sx_+_&?Kp9uCI;`oEg0A!@@rWUW*gBJV z@0pNMa{bjy;!)Z-ERoA1bG_G*yJpm-`5>Z1uFv=<%KCVpBTvXc$W_awV7%XvCuA_V z4pt@-6!QXB(W5m!G;5?6?>s(4u*a}q82dUYQJGd|(nbR?D z>`!GwM6CE|fTzhxWPP znJKE6Q!z*t1F5xBSb80fGB2&h4Yi>2kj>`{r&d&{pDzxdLQ9WcL`?_8OWbtKcEuMw zaRCF`qPTK@;QPgRd_~}7f8hJ2V9r)DR~*$~`2g|+o=v8|tVIrL4NH7Q8@$f21gTK| zYK5>uu78mZU(?zzqFWAkD}v<;mKKz#5sLwX2{fWYe$9g``B>B@{<6_^r#n`SyhDn;Wd&xdG&2 z+!qehhB*4)N&O)&qWf>a_D!(V!kzkEho#RkY|VE&gSmctxKJL>_dJrANC=^uh0=(a z6Wu&Gr|)~LClwaGnm%@BIkX>mbfOAPT=J*@3^JiWN_xEqvzhV3DB_FgJSToAcA+A` zjO33Tb)KMvu2^MVDyp}P_J@h2V$O*o`L^SySMC;c+9_FGuGNgiI|E4x8PR5%33^XzZXnvde)g6)(zigHaXz>b` zjCMFtwPbLw)@8)}ZbC-P4Oh2-LNRe2*36;EQ@{5VP$+}(ND2}0H)MkPzv53qu_CE7CS%WeJYjyOx5;W=sY z#8nJf3s1@C+JQ}-O#d@Vc@rsd4&$0ADflm+i=r3_EiNV$fT2!+(t=3NUh;GDSbX3< z^Z4(=O@W#YHlv$MwFn~Nh9w_jLjOmza%(lA|EmpNrwL8scmJzR9$!*6;>M{-B;gE* z!>h?fuOe{Q+Ph4frl72}1n<CL2D0uA;@>J<%`vdaa*%5kWO)=Kp_Rcfar^1|8L$`*zo@;tecKCw zvPaE>xj- zXb6>~*DFWE&T@N+o_UEP-~r4}kn`8>kdr9u0lwq<lKb zpbR!Q>?|zNn`iOqAgr#;+z4f$h5oV+9gYn3Yp!CV5{%LUnHo3J@urEvC`(x{ZlJ3& zk4>4F@Gyhvb2Srv_Ok1RgGX6w8fCCRkEaHYvW}f^-LqxBr4ttifwjPI)JG$~yZ?cw zO&N!oDMxX)*r1Zhk3jLu=9-;b$u-mZ+Pm$V@JJg>-r=0BpOABQqcnN^esaznjv1c8 zn%NK`LrEa)MvS{+B5yO(j#7jIZ$WEcI7_*&JhYi8Xi|%}QghqrNaYmfropcPKfbhI00KGF8TkQkS98-f32LTh8Ch&62ckLp@jpDB@5-t z!hjU56CqMhBNKtm5zVomt23@MlxY^*>hjxDJC4PG`{r`L|KQ#gE^WeVn4g``2a%bC=ZGPur! ztkUx)-M8Ifv^&gE2xKHPr@F%I!ljp6J)Xz7C(0geIg(I09|B>_5-kPiG{>=C z2@VGLiMd+}$fmH#$QguEaAt$xa05-5Pmo~-(QM^T8gbgGn7D}&20_UkYe_Nfl;>j0 z+)&`gvE9hYpOw=8rEKXq!^LcqY<84si0%Vlbe|EYlJkztQ9Bm= z=OBC6%zbCZao@1NGKPlU4fh@R+;^7CgAr=SBu=6n>+3ptW#w84>xmVn35EgAK0KSu zKtHyLH9nky);7xEB7dA$VU+8t2-stV@(dg?zk*zx!)htk;NM9&gM`p>Xym`KfAD=c z*mWiOeM(vK5{@C20NBTXQxG*(pqw*_;N`iFNMniMrA$FiNK2&gMh?h=g<%yE{IZ1@ zA+}Z_#Hd`gsdyuNr-o;|$!w7|W&o#&lpdd-CeK@~>~8=B2KqKhPH z0GQgV1l>bJ>BaoYa>jb2ozHkESZ*QxFK|`=dZ1%}qdx6zR0{TuE6kin35djwfR6iv z?2?(Aq{#)cyi!=&Gjk3-Kh{zTg`1|y^~<7w@;`R+ltFOWFHDmgmW8~hb8l!jK@F^k zX;a|rU#J94W-h9zac-t*9H^a#{U$U{kk-0+Z5rodhlnnr9FRb_sOPB9EmQlkZGQ5L zPz^W7A!LQfuk=S{-QX8Q>{gBuc|VA_5pNylA|QsrSl-4Jm$L70AL0m~evlNmO_Qt0 zI|-PO%0+J@rFl)qilCN`VTGeq$UPiA z1*BAG0c?T9!B9cb!L!NCb}gt@XHS8dduoH%8L@*LSTfVD=s(TX=KIXo@B1v&THE1+wDUtR~0S&8yDFwKqLN~fd;#!#_&DqxdW@Km;xP~>%a zDLW_Rr9dccweDq8Bytaq3p#ugIF*{r>~ft&k+ljArrgVRW5#2_avi~SLwSyX6HS4L zMOq5rauh&RnYl$&3SiHb5G@c?akL`fp)8=$o_?r{M<~kSX`N|HK_0mJDp+UAThq}H zWhub-a-CYS1BSiP?Jre;J1j?PGgAe5(;&JdylJyfJPLKQRR$5|Kc$vvT#i)S1Ff(~ zD^VN1G(al+P^9fPoM|!~31anG!Yqy;D}}}WCBgYU6^+ZiwHcTDCXvd$_XKRN`xv&8 zSSFq%<>h%OUh&IoZXpBQ*HI`zZBBZ-Xk>>h9QuB)6V|z;6I=}PA_DRIyGGYYqVzEc zBFh896d^wVgdhmoyX2}0Oef0zTVjp=*13-5tGY<)i$0%cp_FTlEy$NHl01F!VhT3}%O_TEi zd?Yj2yoF?W1RfSD$YDUlEaDox+&wV0KrY4L`Y9? zHMBHfuIdU7GSqFfpBTwO!D-dej`kn}57F#8J~3L<^URX)9y#6tq{2-_b=;HEwFFq~sMy)k<;O*RaWsWT+58wU<17#JC1C|D(nL8-XbU>X+RzPj zo*v0m-kK}hmkbMx<*G|sRdY%8uNyG)eEHgzqIVkMs-2BAXm&~K>4`c~0> zBkMq$@nfzTZDAXHUhz#1OHX}&qynP6*cGd01!s$goK8f6gF6(D-c zglx@=(&U-@!`7rJA(nP>7@Qic7%*#HI*zL9fi3dGR-MJd)X zCw@L28eh}!&f`CvT>Am}PlN_nbmR**%YK~1C(EvYut4@B@}F{eZ%Pu3t$=E;am1r` z+NVP^`3z)%Ou^7V4#2a?%xAPnOs!#_&uW9$8RoeRV*j~{Cg$gBGcmv5u-I}}pNir* zBjbyXvkm#kJV(WxwKx!8(#$yX+4{IKzwEM&^4y}>G``Vcx!DI7{wou->b~k&O3?@@ zy3mtjFMWq88!fu8MY#5^Y2IP zbrj?-VGd%gf-tvU{9P0};Q@C+tC=56NS0rmCXZZof7~I%x1wzQVbI1QvioAjF;TMn zM^SuJ9?p-$tPQ?r%LDpJm_G%qhzA^7Be;PHbtumiq8mtGy0jT^^uu`-6RT!g#Yn?~0IG`XS z=(2`s*t9CIpBPak45<<3_Un~jZg3qp{QEV!Uf-ch>D93cF4n0d@OLP>-+oFUl^ zz(}lwC2Wt0bW3u8a>j4MLf(QijM}jg8frmLa!?43-$n`zX3r?vzTu36ku!c5*63OY z4UeVUFv-ElB)<>yf&`P8eUpYa4o2SiLs*Pb{76QKckpBq3+={-lkdk?3>K1ycVOb}l*R3lT|fB#q&M^-F7%y+%p%_sG!v zFuT`EHX5tx*2dU97>(V3L|QfCx`%jK)8u+pJLQ1S=>0R&KpC!dGkWo4W1t+&2Fky} z&O{3Xh46*i{=H$4gPB489hub=CovW>I1bz9*Vi^oaxgQ=f5Lh_3MnF(gs1l!3*;d3 zcFfgg{|&nk*}@~3=G)hB$wAL0{|oDtQsk0udtZNL+;GT2&motDwUa4whVT*&AEg(s9%>XS@C>e=4=C~0KAs5O63}?T(?YXS07`IVSp#5P;Wr4wl zjsgQ00fbCuIqR*c>NW}rbb$(iQcST&L4gJ#-w2s`Hl?BMTtO=Ia(M6@~E)Pr~qk`_pT2@~!G3or`EmBN4&?1?BK$A&pO*u%92y(A$Z zU*+)i#^b_znyKJg{Q)=^?UEV{+6Mqdl8sl^`f1hKtZU;{w886a)&+c!Y&!{G8bR5!32{Ud{ z#B34Iq&{ooz$((2wij zIUL(l;jE&dLm)!Wn}d=aKg99Y-S(*81JXy02J3Co2hzTc*BaBgMYm}rkDTziMWk$= zlZz0{CL6CEsI)B0x(#s&kEoFBIssQrFvqK$n@|eW)_~d-14Y@+zIGQKv^-HQ1+5uM zm?)ttJPhhO#fOaS-hGNpRN5RktF6n|8@C1IdW_M6bhSxJu>1dO9?S>io+=Nr;@JNQ z`WK>gpxYUa+P$=s^8W-6wuhPkE9p^YbVsOd(~EF|(NWNFs$F5hk14lWhARbYS11!j zSw*pWVYM4MT$r4*P` z1FB(+n`-@|ocMU;k)W!cY`ktGnRZ3mY4SsGi?WGyNIcP?*Q+NBxPGJVH0QM1lKLBX za0^Z9Ri@prk<7XzK_gPhFz94gNWlGoAZ>?ZZ@f`p@JfTzk1IJrY+fNb2}}CwxgU4q zjmMOpoZU#CHKFt*FHdCVF5l|t$ycy$mu$R=XDP)yFta*mr#cp8y-)YtzTpLFT+v$! z{288}b3gd@VT4=DZGO9HDcEP0hAjgBShjOJK$5;`BRSn=TKsei*!g+g5yW!@ay>~l z-YmMxoR2|-+`QiEUy7RipuE!Sv7Rh&!u1a~iC{h-6#lz68gv#BEcSbyQG1om>D#6X7-dRvV)-fY@THTV zOF>2Lu>{nWZhtXdq$>p#LB)0BX%)6BmdD)Wkh#I!yk&W~m4%%nf(dcs3W!*w9#k*F z>_1rttJcgc-XmQoNz8Irs^%>CxLrk0aQoUK`E$mR0o|bvN0ssmPo#`@^qd-QiUFeI ze#fz(n2&9F<#K{|^0Wk)D2O|gQbb%15V~E#0XqA!J^0kKx^d?*IX}#d$6sj9&*Syb z29<2QOPmJK;y|Bo_r6`KXHib>uAW^x76G@rZS(++hIn2g56dinDZqF0+&f?a+<{*& z5A5!q;*SlOe3E_yb-6paMpW36)f&R_X|q@*z{+$xp6uW?x)H z#hK_#y~1EZ7nFY&&LzD1U02%(mAPSMa|4}gJz}# zxGKOwP^2OO6cHdZ1`#xJV}Rcqhe08y1!P|5kA|Ddf)z(c(Sb(#Z9EbF>$TV*8tI_c zOOEb%C})vHE0nsC!67zyHwM{Qkr0_t_5*nkHEz4p*TfpUqW7;bi`Y%dF+|=H-Ds#?v~R+aEO1(!JE>!8|qy3}1<=0OoN)RSIFc6>@^s z+95~dR1n8nyC;DaEy+l8vdyiXWS}9_l7Gx-CgMrw~7Y!!$Nh~>hddYJMC|KbSn(WWe zHYUTc!95N8-Moh5INv}W=b73#`*CDNyP2KzKx6QdI7J@H*#zo1&(fB_fX|`+;J_kI z>eHU#q>EfE*w5r+t4v;w^kvCbYBS386d)*#c<&HKVJh1=*Fd&FeJZPH9n zzRP-Yjr5ut zLxk5hk}J!uiis*UovWq9|t{ zNr26$OAFdOcmZS3WsYED!Ui-$ZnHZ%?k_ zd><9%&XTL(`A+>vI!H_4$r{Xgl~`aKps-|FxbuIP?pEZnQ7e#7F)an)-Fo0>2T)%9 za$4S_pKGLnVpq0R;MIFAN?4LV+_sSUd7s4yvyQ#;=HmSpy;cq~ju2#y=m)fd6xob& z9L>l4poRGSJlj%een<-u2~FrRU)+oqevayg?c=7kz4F5PNJBd_gyWlzTW)&iSbx-x zb!Dynn11>O$2uLixwJkU^;bLR@x2SBN+J9ii$Ru0uBzRiwa*(wGSGGw~FTLQvR)X!^2-4@SurF$zZ# z15sYQ@hgqwGIA8gmQ})s$i~WF;L9Rm-Z%Q*>Ub4Z4a zY!0!f$mUMy4_7+P#r57Y7L)W(+Mp>tp)SCLiYr}XgnX?^BEECW79!U2*nlmool1!~ zE_Cno`iI#`X0>MIU)KU|6A($#lLC`4L7pMZnABWJ7Hk-p8TOcRbnL#p4HHziv$%Vw zw>BcB|nxlP$_Zlv@ zW4^l-$nR>c<3%8Gg&f~3TngIvf|P?Os;C@byHy8BZ>?{Ta@d9ceeFCzJBM&hP(_qs zM6H;4QMP`ggFRj46#WN5iau;Ftq-WsDw~riMgO6;7Hj8euHO||8*jya6l7uPLPhK< zt7OLFH5Jk|H5Euefs&0sPQzptQ=vk>+NOw-0v_fDC|bg+Qjs_f|C6+2%Z5)^8k2+4uSGO)S7t#+A*o{Be@&GX%*pek7!#~{kGx~ODwIq)^*bKBpWZ~iUmE^QR1+2u` zZX5);jFev>{+CGw?#D7-x7mFJ^jY|T&2yX6e>_e8@RrR7(ej4X+|$4ycZ7Yq>`wW^8w>tq;)6biLl@+6n95XubAg5I?e{ zW!#++!sIIi<^j=KN+ZfTgurjLnx{Y@3o&>Cr9vc+kanbIqwyDb$64_saKF>`RtRvJ zlvKFQ^nD3R5rp4sU1miP$QKVI#{Yx1yV4k+Z5SnI*Xm*|J$FHpHb;Q_qqZs63r=NT z1e8B%`zQ=3ranfDj_^h~M>k+}RwRoN%U`r?P6;%ZTO(|OT4MKhMd1C{@x|Q0f+o?% zziA6zf;H5Hk=_kPp}ja*##LySh{|440&@Bpr&CP2?WTQHVHx@Kr=tS=_v*ID8ppOQ z4lg{8-ENCxO?7Na(@U!>W|q>xj!VJxio`=Eo_|nOYsR^^+RY+-?6w?czp`PYz+H?!=Eu(Nq7p}Uz_PblWhD?k!o3ha({dwatpY#4GjO) zA|vKeG7p<6AyLaIW>kk)V2-1^bty_<-vhV)7wW>uG}Qxh3d1NHU=+8>y0DSCXYe2u zf?S@)DGbG~o>iHd0jOBUnu2z+0;xjA8tOo;m2@RQur8VuwF`X;_U@`=JrqdjK^Tm> zxQB^1q?b|)4Gv5+YkFmHtaYs_JY(`Sf5nClQ!wmvHd|`WZ^3`kqsJQ#nN9mj;X*JP z)*_gR5z}`^cQC2#)G;&_FPsozsgbPJQ(Q?4|I~R_W2^WS?5J|(l5oFbp&^4uT2W9T z1F@CLCZUL!(V!Midhqlq3*J*68_*MR$JhWbmlGm8{O649$b(HCr)@bC?9Y;IIkJ;v zBF#~tOmkAyc!Q!mObcJoWsOg!P>fK{Ix%pS@KaEV2}q_c=BV6e9Fd@4Ch-1CL3|V> zvk3P4UVjh`pw~5dr6waP;_6hYwFTi{^8%xSl?P7 z?Q0%Jmr2Ahm(k9)Vxd5$N9r6N9PD7*y#SZRRU8`olLtN$czRhx$z`?mV-*FlUMRpy zgBJ~aIW5am!l~u<;<~v)h|x>YaQRZ9Zdqto@Ie!ds!cv8YK`exw3tC4o6h81l6zOQ z2JUQ7{;NpRR|*PbH;^ipKoQ@eV#d^!wdP>qMxr@R`PI}_TqOc@g|r7alA@jOyd<6c zILDqM1oJ@yUKJ6q>=jUiAaW^$=U-xfy1#!lZ9&=E=vp|Ei5uZ<>k6H^x`P9PpR9~R z5itK*wnp@bbd1mqkwjphsI^F=z&Ap9LdQgfaP)PKPF-V6oulX=TCF!uuQN!$rdH?B zrwq>sh^3@h%=FqfcY;hq%$Sry%=|qRP+Xfkr{tO8!eV0KIocR+TQWRHY%Vt1<{cfP zj}&2AGIf&XPX)D^SI_jD0tOZ`?E~}a5fz1QELsdx;PB2;9`u$1Hx(QdvN#Brem1-P z)^gf;SPJB{cKf%VlUYn(3f4?8H@e~_zqBK!&DdAL2GzxL;-oehG-(x432-@hGDP~D-UU%&I{q?N*eI^_!rz|C$ z>!+I_6i$&6^8{M(sS1xy8+U<$$x!>CvoPYdE^FP$kuj^lh^++~GsrY#TsdRbv6xuKe4vrs zJ~Cq#xZ=>GUCkZy3+!+zGiPS2SvU3u2Ce1R+9*vVMeq|4_>z#=Oq{xjCR8o%5WxT@ z>;^G@Xo{n3#gN^&qrYhCbZwWC9T(Pnz;dp!BXowgzVASYB0ZTwQ35#A6PA&f@*=4K zLB>~TkQ}8sV-DWHiHZi1u z0+>J_<63w#&2Pxsg5@U|3>zcp+reP)SuAWNQ#a3Yn8T}G96v$V#m2;^x2O{9>djA6 zXKB-q1qyj+Dq7KqQvQIz)D+Da@|K|?s2CE@#;965&aDcA%!t8m9T-OXhBT(O=M;6OMT~U^SEL&;#vO46DAn6(?hjjsBffd3bgO9k&1Px<14qEe zNb#ob9M<^G;$!xWbb(9)<9Z287}fYbbr;R(ig;Q07GZRc2JWc*Sb}wgK1Lu{F<8%m zE6ZEtW9)cv&YIC4v5B!9XChr#ood~>I@P4QN39|K-88EyRKS2ox=;|+gIGfuVxoF$ zrCx%I3CY!7JnP#8tQT?r@|$B34DXe&}qTAJ;{OE?rX z?ZS#83iH{6w;eBRF;Y)QEy6J}DkWal*YdB~;>=a$CrzS~digqNKnM&qW9>Y7$fsl**0~LoU@2 z8!cCjjWCt`UHcIPp$Wm>FCQ_+id%Jay(RsHz_=RoFeMNKK8Bf;OrgT3SSI0fw7q|Y zArOs)#L!yu%c2OvlxDPRG$E_Cayi~jM}vZRtSca`{*)NFd>o(dO{Y` z2@qT#VoM#_jR#yXeu8xMT{;)l1UQrp^Y zZ@>|s*r=w)SeOUO$^2`}ZJhhq>B2MEV-ZA@JLI5DXhpWpt02_GuBs016XPea3Cseb z5pL9o15lh8fUE5h3d*CF!ir#kU>iC|lc}|e6*j1ba*Dj*QfqB3^E@eurHeOcsJL#C zBn10$<>gu*76K*HCg0h`RD}NmMru7ytDqp%wjNR=i=2g|arFe^^QfpV3)-}{zS!*y z_hEZ+dLl;z>gxg1CudE>zz5S!gegkmw2LP2B~~yYbB9fXvOjrLF2P9O@$&wV%O7uV z3QeyK)?o*;K$C!l#0Q=jx8J5k$T~Lg)FVM1R0TD3B@Mex8pVee}z1HHv z+O$v-bFl)#2*`;jzuxi?E!twx*pY%Xy7(b~QFcY=q1KE(BY^v$^20wYU3)mRW2w2^ zUyWe&!%MGPJfiBV1q-Af8J4mO27xk4Xv_zMH1#O=T+e1&Zsr*CX&{oXPqy@dsYkoV zwghwGV>8(5FYrZlK%rw%yhJ0UV+|(#Ho=^Fj5cq?RKzsQ(@`Rr6YV-N0CBRB6#^}> z@uc7!dgc5J2L?*5z>N%H>a7(#mPj!V3pk*hCv=u^PSCC`TZ+yRlHT{8N8~(j2#LUY zy|o0iM$iGQwU!ee=T>a4F$z$UR6#`nWE;AJB?+NB{5{X6rE58YPAfJOD=Hu(x?9|SO+ zQd$(Suna*J4QH(gcg-vxXbv$p?Yn>inKcej$JQsFIKHI!NfXK)pX|;ZS-M_lX!aDX zrAV^I>6#nO=sFUar@E;U&X;+`I$%9bTLY4)TI;rYz4U;kIzT;rQiq6ca^lwYhc= zLK6$5P&vJOi9kx@qjy6%i=>`cba;=287!(flvZlpYsEbgFSD_;Yf0^U#Q+aU9A?swRoJ>JU*QN~WO^{+#I3J6r-~Hlm5v1kZD6(vkdIoZm#>PBb1!?N z#q}5+eYJM9mC0x|tIMOk2x49nNsJP^M8J9Ngfg<%O)N`#y>{ES5D%OY&&O(BUV6g> zv$8k3GZ^XkXx*Yf9ZIdhzG+g4*_*wGFV;oQTQuhR7d!|m`NFd1_^o4K@OYbl!2@T! zRwCf-MGcNH^OV^L?^TXf`1;WpW9l8oA!B$ad(bD|>1iL%K8P3e*>?qIn)>(N?Ndbk z!|&1bNisCK$!AO=_b!%KT>2!BE?(oyVr^nq`foJe)O$VsX<8JIkLNP7=F-R(j5H`b zmkuvD8p{zZ=rK?te7))P`>Jf;#-fB^uJ*hEJs`cBbKyEqJbS;}t)*EHgGTZ$$a_Jk zA@G>IciNx#rf5to+eO#QIc2k5)`z&mzh3ZxfEW+kP-01x%$(?ZEuB zvuH@b?2=?YK2)*A@5AY`wCDgs?>BbhiW6&ze#~Gsg*0}2eniUw(lK!A?qGdsv_5F# zGRu`VU1RRwHfap}(Fp~#ADdV}ixQ}7%8ezU{lo+V+E2QD=okXpPsJ~4xZJg&;acbD zrzaIVe`f4)=4ZznXMV19W6kGFHP*m9A-qYZzFx?PC>bCR{P-r{}0u2p`i6`y5p4h_9q+?063fFU)FJJk?nf# z%MqI2EG)508#D4^OS98wEabn6LbPu+l55*iSwS*utfni#ha);QKVsx>*S!?;ov@{t zQ)E=7zG z-VY)Z$g&y258bhuqi?J%q#u<`Aj`u0u{*2~i>pu|Q8y;hl&c++rT9sy1hOn;Kb>3x z`LoyrvMfzMcXKeethLGO7Y@sSxtc@E_9@i{_Lq)@e>+&~W}&kD{Z$afwNH#+2T?4* z)FUCV7lW@7o~gBr=Bw(aY$wzstx`|HDDdz;w2zfHCSXrdpH zA=q>BsXKP2`YShxe?E4(vI6%I-b8cWztjuH($Eq4GTup!0c>@tiGWr3vc% zuKDd-=XdPbDQ@p!2Klc6398IEmhe3&wL4LZS$_-2F=a?NHei*GwdJc?r9l3@=%R3q zUD9Ri<>~xKEYLi_DG&6Y0mnut%%xV<^5Fhem~Sz+k?CQRUtw8Nl+ZS4S~B%-t=$$S zG_n7R6cSOPy1J;Xz5Hh~Q93X=fw28=L?H9OqOfQhF3NQ#M8;(n7BeSE>>z$fo|^rW z_=R_-@%D+b>4ADI4*G|1pquyPJ~d-9I#3ErAM8(S;~GO2p2BluFTs_Eaz*cKD0CpXiqIlJj>8QW*R?~p z#Ih#C@mTkexm}6F^0?><1ej_Uh>)4|3|z8xtMs1i zv>V`Qjqo8n`V7Ot2tDoS;9o(T8Dr3=8POLTQ`6D~jpWv4nqT&8Z|-Qi3ffS$WE!T; zdbgok8DyU20>+fU$~C5jYpy~3t>x8DFI{gIR)P-Z!kwf1xJB`glIg(Lu(#Fw{$Ob> zBJBz9X|opDr!Vfv_*K?rjq{|-Q7nX+E@oj>A}$d|geW;j69MyGClQyG{g%*};0)6) zM>I?MuXpEBB`=OgGXPGfaQT5|M6cC7f;EVG*;TYIUy*Z{3gaB#;StR_=zrauvn#-* z!{&fk#)u{a-m1R}R>7mxsqC7=D$)VurNY3m3lZ?X0Y0$7#&2#ObR>?)7526Tfk78nbV=>?TDF zmB%F#E%0qQ<02$-^_p_LqDgiQx9w#7squ)9>1(=!OUF_z7-mhBil{otog9s$*LQlO zn~P#%0%h6svp-AGHs$c9&@=&S42Nt^PrDQ661jMh0B7QBPi1vwHg<)$ETB0z2Xhlq zo0@ELt4R*cy+T};$jw1ug`(C*?Ur%3Z%0wa}l;ZhwkCfpL0k*+y|BsmXNHsM#{3N>Gef(J^8^k9*j5|w0c92bk|GRQVc!kELA4@R_NV`_$WW|Rk6pKjqj<+0(RjpQ!zMP3DGZv!)#gy~%Yr@AOZ zveNHEQ%nPj03<&4U`BQK*!|wg^LnWiRR>!UvrN3y6f( z`>)$bE~O-gOMBV)WE;8Y+@71cqU&j{i;TtIPPfgJW^aluO$q)e814G{5!)Dz_4Y2~ za8_g3U?fkA$WE8xE4|BxH;9UhgP3^3u#@|O;*J|>Q;fwD`}>P(@0piMAuQ<`Gu;*u zWKxAGxv~571;v68N5l_aSQ^Y=`3!rGkVM$?fnwW=w zL?hW#!o&C1m-emoQNC-YQeF+>)FGQyy; z>BAi<6|wPbf0)iiQ*LbChx6SLQ)Y?aCX#e5T~|Ya`8` zyHxD5xvQgn6t~i>wh#3O2lBO{9Aom<<<`ybHoidr?g6UEL)naj%yl{|Zp7YujP;!B z>3cd%i#&bAQf36!_bS}+A~lexl8%6~XA*5H_iiNDQ_7v^u6KI0PmMM^6)* zlsaqc*tiwd-P4*-PPgdJeT;?}nrA#XE;rqlCYC=UFm>&u7(@QpcJok77iOdCFj;%u z8J&PNj&_)p$u+3#YdE(u1zlLFpY1r^ahNrPLD_&}x24bE7z6Lu*Dg|PfPrhhi*_2@ z6kO_@r}4F^Sl6v$IW)6qAaZW7uvBGa)xC|(0@ix;Kv~e(JK|bVmOzX7RU4!Gj$DIZ zIPP*HwSmXxmRZ@EDZMy!CA>K9fI;NOpXNuovI@m7=W0tl3dDBrU}wR{d+5jR< zRwj-Du=;JahDAVfb_Ii_*|jgkLg7PQON1cZ8v>5TSNI|ct*5&_6-KecgEN_MD#|Ot z!IVb~1o6gLnC8p9x0qNy|1GK2SJD(E-|{GmI&evHHfJty6!l0AvCc{;^Ru)ai*iq>WHpwu*Z-kxSwPH z2ZWL()6%H?7;}~(Vk&HS93(`Kfbt6olg*v!`#a8DaDZIx3um01gzeJ1CjHppjfr4tvBFq1M_O#3zCtLb$wB ze{jIAuxcCd9uiQ(wm?X0K15ym0L|VQ4*f~ib8j=#0Ku{1%f5DZ4M&NJaq(OTF?A4fG4iK=jTj6){#WZq8E${(9)MF1&i^vx6uWlc6?7KSvAo zvkDP|kOz|GgUILlt7laTPjG0+*OKYyg%yEBwcJ$)WP$zj9TRHMUV;A~9Fd%;?IqY| zEgHSReG#Cf&@5FUrjv1_XZ*4>+rv8>wSw@Hk*nRo#KT%JGEpKly#=Eej;UaTAYxEg zqrF6ZosDNN3X*&11uh`i5PVFLC_wa+zQ_g9(;ed*>T_v%&quo$S%()#hWAtxcp}X` zJc7z4N4rh8C3h{17M<&2!uU&Bjw44zP!Zg1mb0>%njd?O=Oqp*^N3w8eXycV6cY?^E zTEBrbZzb8%#-8f%Fv5wXyRWU-kor2!L$b2$V7)i$thSr9E0zm`{YKpBE&IM+>wZwi zqBZvRfNqS+H`;OyE1&JWK?5ilE_+ErB7%lDj<0n6CPz_1##U%$1jcVJ=fZLbMPhx6 zW4$TITdf{4v6nc9?X43kA->IBYGbI^x%2MrZdgLpV83i@*`KBAYwvIyTLEhvos;i$ zunNzmt(ePhx!cBfsEsoa?LJWO?tOhl2p2amfMT#D-naeXYAFT_xh_lMaLf$ zP4xGrzChu^SkA0^e{mNUXMB0z@PV;+VSTVvFBLiM52ZK7(@Cwv*5Sw%9Woa*%7?v$ zI7xA-xHbI|$21kCw#@Dn7VhMc)7Qw{vqD_{a%ae8%+nu@iM|T4Bh}Q&5j>p6)}1GV^nCoXr7OSHLuzZ(=a#o)q0o)`ukibSGXX9 z`9+OkV1S`TF*Uz=2JCNH~Fyvt9~U8(=d6-4%2XNGG!|MiJ+KN-}uSO zSWiij4#?n1p6qdDnpU5jK#$I+0@@=)?k*J$1)g{Yd%QW+r^lCnd?q0OD6#VY*?_hS zW8-cFM?M$8^DMs2?R5l%&pQgcd4huq?;17?#Dtb#aCAuKgGyPGycHq>@h>)#>-!r= zBp8Utg>=Op+Xzr!nox4~Wvw0|QhH#YR&r_9=cOq!H|4hDd}YFCN`G~Nso>YNyhh?8 zs>i)vdhA>sZ2Y<-uB<)%`$kZlSeJHu)16G`Hpc9U;4`YcQhqC_cA2@DI!hJb4x(6C zT1H|W`tzM2iUrtOcg1~ItJf-d?^yPSeNQW4C=hM?!$_SeXmE8=6onJtAA3#W2ji_t z{BR;Q3Gf)XVlw?BZ%Um_>%t9AG}e!!b}o^ixv>2LXSw`Oid_kf;(1g_*njFK%*+-9 zUG!|n5%~opc+IfTWv$5Wg9mU%G>a%w^ZyN-RMCD%@5#JRUToM|x4kI{rG8 z^UKyUCX~X^?{I7A>d7FPE7nhl-$a75*PH~z9wzeNTy(7;+NRH~%lhSg;&pZ?{?<`y zK(?d-46ubD*U*(1Tj;tN&%ngg22GtjM%$-Pq*L-^16sn5)Gt7B7F(Ty{GB^($=Rm> z4iG5FuOv{{E!9qpCMH;PzTYd}*BN*h)Sl7Rm`wk^@H8%Yt|`}cvjX&UQjHAog(On4 zhRO6F0*aspH3~Qw`QmdFk9Ids>a{&bv6t#-hez!m?d-{pKZ)r2b1js~y`6E}ng8g< z^dihLSKeVe3L=DO;r+1ozR5pnT%=v(S*e+AC(j*Byxzg_#|ib%T5(lDCl#yMn=d9@ z&arZ6j{<~7|23jQ^| zwYq<6(^*J6o6@TdMY!MXJE}-u!N{It7dDaC)Zox~h=gnMNV~GNB3=4=em(l#W z0&uOnzS8NTdF3D-*peO5R@SJOJ=U3nJM8a>}dzd=DGA;Jc6nYQFXVN(vWM{GB%VCmk(%GP!I** zCzsnI^u$^_nz?EtAbgJI8RX(BYMHgl7@oOeTbUvk<()IaY$gt82l7&?h6Fik3CZbqIAP<1qo@ypow~L{!j%otJ)k z^~^N`${&?VLNg~#=!nIcjbp1l%}hBaf|xTDdyC|TnNa= zSAg0eUTadtool;IZLW2-k#!xn{BmgZ7k9QgW-?UN0=CxTPBVyNp}e&*dYdLzC6zNW zULLlT&#&jlp7AdDGv10@m1nk3BIAV(B>B$ln0y|Jt+Ry{ZL-ny!>R|?W-_E*74pvj z1dP1Xjtgg`*=&M;=N#TOro8icHJ(|QpORE(TkOnkcbcR_Bw>3xtte^-!G^?2a$ z{5{k=SJ*8y`e$QMF{L@Cp0F2`Im64fdWz-=q}U}#f>a^RUHPjG0;7QD1wx!XQ20z{P90w+aovDSLev5TPIv~t zyqU!H9MOR+FX5p186**dU*ECjArCIaAkin-&zv^?jiEC)n9PwqGdCRj!QwMFnow4B z<4J8iow4_|4`B;A*>6Dj{jpUCygpvWF>m^2fmyg3zWV`KFDfM}ABe{3{vZ)1gETC@p zY#GF)NoH%+ZUdHoG-q}Gquxad1;g&V48{qVMp>DM=!b@(D#wd+@adR zwljAeUs`*ofV5UjLN+b@RgHFc~pI5G{X7W0y!s zuuXY2?c*gLh-4fuc_jfaln0H4Gasz`O~i@6$`{N(Fh#7%`>K1Q38O3prevP!hmvPZ zQOo^WNOFt>EpI{%VJvQ~RKUuO>AcblAy;S3%zw;*u` zv4-4_%BwepOO>uGa&$x{maV_6k(^ULTgNgbo$F)oaXudWoLP%WJ18rE8H7NOpsXBw zSzL1|Yl-Zy;aZRm?)4r9e0Xip$6X)8e$a<=hvg3W#7d!i`9yr8N%wLW=C-aPL#Hmam9oRV8!lLDn`=Nr`Ty0+S+oL6UhnDec<)*1}k zgLwAA<+;?0j*qe<2}58Ff2~OJnnko_!k#_XJhaNywcA<9wOF3hHohYf6eDo^;+jO_ zQ{npKA}vufBv!f*Q`| zO3C-Ti~zQsWuc8bSP@g#tv})uO0pC(11lN;*9^6JbeFVqdsGxB*yg{~sE zo8p`uwGS-4i)5J+mA=%Nc^#YbeA!7@*~Ogd%`4n2Je` z0(vMQ7iAGgP4Eso$|>-DykCoRkW*ETEPNNaS~7D)BTXq+(W!0S&Uxy_ZVt74VeC9t zWiKU%o)92<*RSs5uiX{(q41B;6{ghkr zEJz&j(%IXo0`kF)OAVbfM5 zA$AkLAEH$qD4J`A-m|Q1WEUeo)awfgC|d|GS~A1Oj0e7Kb#4!HN7S;g2sHiB6E=`q z930GoVe25Uz|KuqRIlQoI5{^ugrwKWJ$y_~?p2NCa9vJLPjG8>bdP8xTjhBxO;I~s zVs?SE1M!9e#5lWHgeKf)Am>j;u92gEmWjz!VkWWad%Y=_QHy`? zn=n%1calAJLj7xxt0|8v6364+xfA11ovkcSaKp;-B(h^HGh*5V>>c@G5nWF#svOh> z=t=I&=`Ac~u$7}etEPBmf;zWfL zPe0@ItqaYCZ8z;>QxGel(Vyus1Z3t}?qy-!my&|f4?R9^jdBqS7(q^Wli|qjR1hwMd_$9B!e#3k zy$>T(OUAUt>Gh>9hA}u!Yu;npwz-$c6BIeiA6u~1XVn!Lp6*1eE*eWc7 z1EVXD(ZZo0g`FanDpivo`}5WT#S#9#VZ^Q zo-ou^6cfcZ*Mf6Ck;p>U!V^?>Ty@tRTK!qUtKDwb0=CwD7zpzMD6T!LL`>jv>k`ER zY^@Z(PFtUr;(ZBpo#{Hl1f^d{P5N5s*Tt%Mtw)`|L7O!S#M%$!d!sAUj4&T>8ec9+ zwt*szH;1h`1Z_`wOK}B8BHs40N}~5xx2-i|Kr)TOJT6-^J*cM>f8eJcJ~^X42|@qAgKePhSJ0&b*^PF6^)5yaxg!) zi(mQR$a>G{JDM!dI|71VJ{HT^-URm3BPe4#CZ_1)%I(b1-kk?ZpUoN_UF9CL$69*k%d_NPRBZ*oL{86wYIM{Y!Bl(4RN@%Rx~2}d+SYFTvVHUvs3-9 z!fXL*L{^q34EVi4C|5wk1?eDj9y9NDlb$lw(M4Da+IzIFS&A}z z@0z4L@2z-R$NRMSj;;6PiZ^KQZ4cT#>?b2k(+519w_5T3`WFm8FunrF2OR-P&V>Bn z7r_BM7ct>Ojx518Z1kD+*>iJQ!u+~DLG7c%{0 z6Iz(XvcqnFMN{gmLKUGDF`t-F+2)h(e4zH#-%q(=iG&$yDO*SOXQ_ilKJCyl$V0&L z9f=7nN`d{1W>F;%kb&jx@pTdUS;wLt2(9-()6cn`Tdv`?$?x-S`Q^~+FKB%s2&@og zZPb3z;V%^Hkt=SUHJ&fIHCAG@4Pu$KYl>RFtU*+2Jl6Xgxf3Y2T22tZ65hN((~|sq zS>nE`%@T#UVS8zP&>0Y@T7$TjpOrhw>bJuomawP8%%AgIcpU%voxc-9&ghZZ|sc)VK0`6I{u2Z}f?-~)sU zR#X!1PFrGFjMv0OjXL_%x9#h%wzstx`|HDDdz?$uc%#RJlUn7@pPB-cD8%4_I;A>9@xp-nw_tY4?^GL@qvAQRI~rzD#Lps2 z6|TsL4fgYfv$-Re1(RD!3`x*C;xDv_TxgS$TQQ2sJ=4&IL;g~$aY{oX9PAC(`hyYX z)m}C#AF*Im237rqFK1y<`VNgZ^DB3*m~jZl7D&cdW>;IpK-tt|3TQEV;W3b_A;O7{ z5)=vkn3#cTP;A;p;s#^IugA1W49i}RoUoNt_a0@!5q1&6NM?THSlhDNMP>=#kt$A* zCB%oKB^hQquPqxIX|m)Bl9w7>hW59O#Oi9S#5Y&_%kA#}H5UBNAs{;oC_DYX#DP?m zS%mQW+ML%P>T+Hwdh(OYg8#7*;Nvimu#DM0hs-RH&4!UOLe+4a?dqV+rlgi@xN#vw zy;k~9W3tj%Ij?OiuUH2cr^nTrul(7u#Lw~qbf@ENEEO&>yP%B)#2eC&$wFOQdF_m_ z$yZYl557JP!F$SM16J%yY~|I_X71E|eg%sj{!$patLu0=3}#&4onjy4VPU&mjV!iJ z3K1P@W|sxf^cvTKd*^8aU~ZvnnM z;gS%imqp0`Yl7>l|86*aSJo{rpB+dMD}AqBM3i@i+vbS+Etv#^G)d?QZ>vL)U+Tj^(Etpg~odzp6@4q6eb zvN&jTxATz8UEL^{TeB$hC{2smnpODxoJEr+yF{6N7dKe1wh#3O2bcJ& z-OsbfyBlHkkV9~TD7ucQLvLd831y#<2NAQH zH>NxSy{)yKW|&D2HyqR|!Hc^S0uyF{6hU+)DY~)~8!{7<x2gr`$fl$V_(j;ePBt7;x5wB)1={^HVd=AgBkiM*C_EG^jvvr;5Q;udY?TDb| zgh;R>0^`d}rbl-csjqb@Hb>u{+eeUcxe2rZ&t85qDda3pG;keY%M?iN|KplW-n&$~ zI*SQV&^1Ft!zrbY@{q0=xcj3ncvo_BvG!cz%I*|K!16UXmyOu3qIDcft{zPTJ)Dlp z#8rp%t~#k~`)XQRCef59qP3BAb+_PhXj$4@8`x_EffcG#8`x`V`l2S1&2E21OmjQ~ zs@LD0q^-LvX=A&0uruiQR?+ktG33S?lH@6Wl3e8oc37s_>7pb#kX+8-WOgPj4KCbH zE`b#SxVy3*gdi*EY+!BQ9N2{w86 z79+7tW;ew|m?YN^rdkGB+JbGhtqX-KrPL`=HYymu*#Um+^sihI%h zm)>XNS}T{XEwT&dT5du_ummZBKj}l}RDf*6*Af&qli6#JFBwFsahI)y$C^!H;R*<3Buv?jX^G+^jpS@5v2JG( z8!FO%grbcVgsL~XX148mTBMojyc8F%wbvD^$LfCua>OjawmU&ee z5EmP;XzyLgqkSf^~n zC!|9?+`29&nl7xQDdXZs_7SmF%Y8p5T^Svdk-E&Gta&cZ=bsU`k-8K*|712-+-ORt zbY=IOxJZ&do1N(8OR`;Z&r?0u!UR9p%3(J!hxq#?E+usdUAeoI&rFxFi;T`oEEWXU~}X>MFt2}|K7QhZ_@w#20? z`BePBKLcGnkmpO7PpmYnZctFzK-`r^Km1h|%LG?|C~CT)+aI&oRyuf&!fXaJ9umHX z!fG;mBdy$^t?IN7Vi9I_g)apXI8I>sV!(~HLYf8-t4NeuQNo%&%7eOz4b-qbIM`Wg zH`R-7IIQxZPS`lYUGy)X9 zW-rsEsv$pNie&|fpkB?Jg-vEw>#_h>@8yp7dZ<7-C3=sp>I`o?JXR{tqUw0X>=Z^ke#qsjf+URO<`G}E=Xs)Ln0A+ zGcxL+>b6?cAj)k}NwLyb7g@KPR9n>T-IWa~ji`&PbKHqi4z2#Ss5=CKtzBR4*hr>i zU#WrPitPAk`aKXYcF^ZUr@XF0vJO8E^P{ z*TV3X2a*wdmzcomOJ?sD7QV7r4IFVr$`aeMm+)*-_$pq8?K--<+hPgrBMLYyN2e8B zz7fKN2eXAGZDqyHjR~RYjc4ycbeQq%fv9-ajCXg|5bu7Xk=&=Qc-K-it2Oq$r{n5t z_&6tMlA0&LgzMb^78ptt69>=Bc2x4a9-Jl?6Mw3a+&exdwqTC)sY4Jd73g{&07K}iU(n>1rvF-nsMV)3+LRXSh|%(c=J+fM0Pv@%x$ zT%XKo70X+8&0MT@z6M#qsL6*d(=H}S%VF8l+0|?c42wN#4@a17F6vD_g;di61ngSx zvRwb=!Yx!XOO50#8}<40Rri2pQ&|E~#Z1B|k8d^?j+_(WUM{A_;{ch3h~AtW@F>_1 zmCT|K;4=GBEIiyiyxMK9wFbyKBF^%dMPXA}tz*j>=|PoE>aa^)7d;^k^wv@Kj;}9omDEf)4n|cS)x^PtcQOuQ0@qOv62)~&bks;rk*8d4BqaAN<#nM()F^?iYosY9 zFzdY|q9y}n&BYpFt`2H777lS7*K^Dsa+TYdQqpvzAM%i{0#lLiJnS#V30{>Q{)qE> z4uyh71q#kfuhuxUW2w2^UuFE@zlvzTPxz%AirQgxB!0>4eZy*ig-h5p*8Lpyf5)XA zv-fvfXG_o^F(rEm?ugpruJj*CCbQ?et)noBl9?p^6F(>%S~~bqEio!V;pN1rh}bAC z5@se=gtE7^_<%7r^MAULtkzN&?6%f>OZ(b`S}TDM)K)Kqbyk59OABg$Ak&a|Ozlru zLvdj-v1;FE8_E6a6&kKvXtIkJn*7p*A}L~-c=Oyzyhr2E@HBjVOZr!Tcp4i>{M{NX z?K_PR>g>jV{FDcq^bc|rj568VaSl)hu&dKQ?@^k=(YVa3RYb z&3S$wN_Lc=eD443gS83{OR5CJSta(1DMC@@?T2Xbu$VGg0A3x$Lmjb7wUKr1OMk;e zUHa^EZr0g$>rSt;y1u#Ux`0{-GX*VJKrN6s}Gjp z#H{2qnP%Zv_{)%k_tHHXs{VfZQlH63-^{9;n7s#NK*A>1DiAt)m^_l-ttWCmH$rpoX%1c7*h!*C08 zC8-RhxU*06ru*`zEw2IbL^MysbInT))bwYbhVMwf$Bg}xN=+n3OAqG1Vc4W#tiZil zm+bPXmDzXAc#*8|u%N`>NWI#V@oe#9YG1m$?|feA*D?Efc6j>Izgkycy2Ok+_t!r~ zYwt778c!XG(*-#>NHsJd#@?wP!P)O?i{Mx|P8Q-PToTftAp<{WyaCH|%#3vsp8gwk-DXXC-xSuNPGA2b$6ZAxK;pK?jglh*xrXp#yuI}{ zYa1pL%V59NNbVF_ij(nWrPTtD|Kf(dZAu=8crSjq&;M4c;xRs-HTJ&5>GMTahLKD8 z{FfTecq~5uWd@kB`23gqeSTGDy<)u1^Ods0@jA~`vp7AeQqhwytdKq?zl?S`uZmNB zi=ij0gE?wgop6_9ZCO<3o>54}RJ7nCSizjmt1mpK^X*15sAc7laY2+NidG8+^+nH& zJFjt687vS3+ztpf6d=a!SPKnSR3_$kzS~IdT*mJRX)(v+zp`@nwT|vLh4S3%kYH)L zeK(bGwC8zUq30fGai^i-um6U{m!lG z@b75^q@OvH2>o(ZD&o?6)4tqvM_H3kI1&gMlH~Y|IqXkd=V(5P*!4c7hjQ;02SF)N zdYe!kK;Ex0O$O53*P?z6UVp9w*atNKr2y-7`ixg~0Q#Vhs$qLbM>Ew1>_b`~Qcjgv z&#i-`4_g&3I~J`D5FfE}jm17o{nfR8j~dPD((aFHkq_q@118R`tAnPGxxoyF{6x7r zz@SIkcOkH-v6KyaKha1oN2Wk&d01Ly!XSYl%EF_(HTz_`B}y58I6}L67rVIXIe3qu zX#N5X7vqc0Sj#^-eV+)MMc=!%imrM+QSMnbqCE;de_#nU!b8tO@Jih2#zauf$U<}X zF`Qs)G5;i~{mfj9KiS=Q_QOUptfg3@o%da5js7!^Et@uwq}QGZjid{bD+Q9)UDtM8 zCKgQoxUQp5G&)4#VJJ>82z&2kUJJpD)^wY^SVA@x@S~52)Mdlfjb8vd6`Vsb6sH@=+m@sZZT9eU<$w z90VIn{K7llr0I)|WI@gX#5{J%kW(l|XOO+)qh*H1CKQ;p93^Lf{F+vuQ$P;d zICoW~ilmKPjjND|mI&oGCkBrcj;VJk7}Cjb`2H-`-NzY6f3uOW3kwxSiFAYTuNtUh z1&N$lYnu=bQMZSSqRE^wB$+H9%O^7{T`n(&fhSsX~XV<+OWHj zH|*|Azs;awrO3KjRkZ@m6bX_R{m|2&t+78`tr13q$No{MD0zSzE5g-VfBqiPRKCFn zM@W0K2OQ0}g>lUMwc%%t z0sBEI&nbfoihb~*C|#Lsp!CB!+o8NxO-LCx4bPARn1*cOGvymnjax?`~#o?`W*H=0{1dHh@_+;LNv8Gq0 z`&@rA_5cJ+1ydvk#mss4q!bglpw9ox{v_W3B`dZLb!Pi>P zD^R_QwseP?${r>*_-DV5{l$gnW5MnHwUp@C(OR`G@BY$p9Et>qCUHSQ4g?x%0LL$` z@!;=4u&zDp)?1?#6ed=v0Yh#b84oc;QI~P=TgUuNW`E_Fb6G~u#$j>KFS(Y7?B^uu zFe5wrYt1x^s9hZ&RhBjEEiMNJkl^}~+23f_LohFpP246UM85DSMY6R0|LxfA|L^?v zU#wA=UC8-;x{9Z`OU9cPNC;9%{Ikeo%P$S#o*^-q z_PhZWXQdXuvplTT>HJ0O2N1#&U`Tca9tWfu0*vuE)`Ng^_!DzCu%x$&bT`XG_?n&Q z9a?all5#xh)L$KrJ@W?3ydM6WRB7O%!s_8P_}{derx2htc$4b;%*&L5@OQ0}YlE=b zUv5_b@sFY-YM~B8tVOg|+ReS4Zo51&|14q`Yk%nU%R~5A5xW=!oH$$_#J?RmZzgjA zqN3#g<5(+J;ow*laaeyT{rYd}Ez>=vd)wX4Vcb`Xg(vPhxWlKyK*aEw{k;rLlK(lj z2&japK>#1Yo%|I90dsJB)-7l%%zdrlK5{&D8!*?Y8>sA$o>xDTha0_p2n zbI2)_mKzPAyiik>wqtFe#P+gU?=zh{PP6)I?B6@s8T5PX3^&0@Ufd`@`Qi8N%XC5| z@LXg-F6PgJM3Pb_!UvgiCyckDZ4N8-tj4DBT5Vz!+-AJsCXiDV!KF)#IoF!IWMQsV zRT7tSIY7Z5k@Aw#;OAJ0J?y1Vll0G~f5VCz$I(Tu7S5qp{Y0B3ULFd>DRXFBvpxjd zM$!mX){;-A zE~L(+a_+KPQ-lZ#6j-Dq1(_v?G?XMJv$XD8(vUEfK&x|maP+AWsgnHIfV$J|BGbzh zRn}+b-k*YLlgwRC3lwygr~LvHMgKlUD%+XlmMYwjgJ1osu}BnC`A(}qgJxH6C1p3PE9`217ZjO_Fs@iV2|V2Z+ldL53xoX zT(*HD*`VfL98PcOr(ovNop`w=No;BF4K)4H42+ ztr1cL5?8awK)w--i23Si7^^S@B3njjf3>xY>EIhqZN8ejM$zWlh_SAjsn9$=_EMf!Ib@L=`xO^fCD*W|^%%JvWsiE>_kx(@2wBOz>rEtOCnzxS{Y^g*Br& zVH*JpQDmYa=md?)-1L}g)L6Et=Zbr1|I+$kfW1n!h7~iKRg(m%fFo&oyf*m@kZOoD zCbCf4Ox<`)EV#fL%sZe@P-9sx?^BM%%um@$7_wr0%G;=KuuW{ zg{HMyziT(_8$8m;n{6s0))iPjkZ4FV#`0PF=TsafX7#YJ7JIh=#}qsMcY7`^20xOy z>u6Jl*`KV|yV&oKSd#Nsrj^WQ*%s}NKfHDCpwsU0nh2(i(s#yf8g>b+50=`fnkdzK z+2B#GvxWmt7dx_w8C}q-0z2KBtH=ci7NZRz@NQ+v!8F+h1yRJLj>Zlq1I6rI{*)==DJt zQ$FoGju>>eW*yj|w0syb#>v*`EnV;C{oQ+Ys~PkYeN?7m#`{A=X&Fb zM-lBu?L3;hzQg=*e@&B=R#|8vn-_(#3;QUIdSfk$l}By1mJhZNCoY#C{w9tfl*wjk9qnhU z_JuT{MhZfe^Be-f(@jwU~C?MTm`N z5_>R(I8(#Z6OZw4*(*BqUXeq)X=u2EfyhYm9~#$ILkfX-GgsVF8-$x%qnd2^D!tw` zv2Njt0Wt`_GFuUg@IIn}WbQ1#hbKu0=jxLNiEQqcj%+MT2gPVbtRdv}2dFk$Bht?h zL*{Pfv2FyH9_+L^YoG$FYxs}wKt(x?PBws=k8tCFcR+>dWat}=yjvrolRF!%fked{ z`p|{Dua+1A8)#|`5pI)4=lXh028RS(5Fvm#L&7l;!qw#nPsmt8z?7XPd=Gv;>5~S? zj}2%uj@^F+G}-Q}f^LPg9W?-aofs^BScD?JV&djH(li5iUtY-@bTj6X#`wvpaVANUycpS)wlzjB_gY zDi|y1cPNYwIM(bpY?Qb3b4Q>5FIkVdlMTVL^_V+rtC)&j*bb?o*+90rYKWdA^ACcS1nNHahlio=_Z-74HGtf!sLVvZo*7zR#VW5}dtA{Y<2wK4Qv!T~#fSF}jp;-%iZAk) z5+L@H%v38Z+7!e)$I{2f-|!Shd>C8qS}b;eq_xY|5E6db2r$A!NNe$(IbNmEMe1Qk z0dGK_W)y;d=Mf})g{}B>(P^H=zNYiH?dz|$x3w4h>%(DtTQd##w#l*A8qUAl+aIj% zIr-EbyLO+9|Mzq|z4gO;Rz?T*96n|Dp4~gQ@pCqY%J_P3aYWT`PktnOizzsw?({}5yGh>CyOn#)pf%D07;8hfu60%&7n zwQnF=K*ji>(Up4ofXoWCmU_w=EBf9X<*QlH*Ik(JDLfrFUi-XaV2c}6y%uZ=7BSa| zglSMm%SV-A2|_z9*1n?Lh2lyig{L07#_@ z3~+JTQhqz_{46Da}plJ}Rou+%$I z*UtFAW9Ndf)GRSTwPr;1wpeTK88ZNXl%P-8MWx zG6?j{?n7gm-Pn=+fQij+%!37VY9P{ zpQUx=`G@%xM|sRxzBu^^ZSZcZw}OC2t{j#h{E^z=#OGQD2YxKGf0Py*lU(!InBsFO zHs&w!Z+H-e{6QRkblN7EEo#y*%N@>T&nRLHHs0K0wE8Sd=-Y=eLD+V}!kk_m?Xk7Q z>qOn-wBW65(IUq$dj(-yWBlAOoJuvN9bE2?)PPGiBZ9|;XvqlWBw+^={Ph%vk+=9@SkmcQpY&sy1VMuJQMn{v^_N_xfA85PchC<8u?cAx9v7c+P3-SQW zafo0t*b-tk&OJ|Sy&-PPBeO-(z1{wyav(U@ley<3?4}w;dSnYWbM4&EEUGX-mqL6~ zrddV+ctIn%3}qxM{r*a~4Uf9Ny~KlM!4@)cE(p2;(BDAMYT{m4APYfJx-fGIMXF@v zpj^i6z`u#vQE+&&x}{Q+mNp$|Dp=7F^pXhXUNk0?h8aKZ6?>+s-Ogg+1bVT>6|yh0 z)Qsu2h$Nz>&r2+;glya_K8YR{vVk@vb1y}IilouB42w0d#n!Mbq=#n+(A%l?GT>(p zvefV5?m#+OK|G4adHERUFQfJqMYBpwE0H}rr!w*Gm3Fc4dkjhGS#(3sUaLSuy-M#c z#*|ya$;m72o|f0sOtTEf!0~sIOVX{3xYw+UE)}d`0*hl-2JQCp5%yK}7rtk;Kd;te z*34pK9uP&&Nl&&1bFzZ%QTk|AxJnl5L_ttUJehmVnCuS9Fb|r9^X|6RdrSKa({u8! ztXYVW`C7|@61Q9I`yvKlHi)YbWQf@K@Yb}Cd~3VC;eUA8nw7y&2IO^PoS&>s`Sq4* zkW$fGSx5gUp^@nx$11IKaiP=O*{iuXgid!csqod@kz;r<7`>W%Bb>jy0&+O3M+!|W zMCeUg#gq+^o>teSV-R?)%rjnw5ku+CX~Sq5@NnxrY%X;>j8TGFDPA6ubXqTh^0t&mwt6YggMk?aQJ2g~^=e6?UU7E`8-;2J*I7Yl1 z5|w97EF<5eF_LIBL_%uWfbzK1id0K~fDEhWd#|OqAX!q<0x>@^gcNwgB;$>v;20`6 zKcl*!fDZ6~zycToGc%1P4v_HX-Zv(nc+B`4vlMUO^NP%$yuZkwFn`DoQI7D3#KRA` zQd(L_B3ISKT%ki=%7gfzWnEXHzezpFt@@Mj8_uU7q!qlo!(lVf)kOE$6zu# z(pN?Fd`Sz`1e7cw6^!FS2;*TikS~WPP=X#UCKTcU77+GVw0wdKJ8RbocCDR7Z(RSE9>l-%FPZwCW9(t#Cm%ubBwNM2CzqGlV7rO=oo;pJ9dX@7rfb zUM&zBX*13O5VLeYu<(Ofy5`|kUL&E2Ch9x{Kl{4;f>`@Q%QUfjK-X}BJz#;;*UC`S z*Z8<~-u}o!Tc#-li++e63?R)}tfMkLs5EDd?N}0ECGB_OkP=78C38O>)7(66BFk+| zFEKT@yQb!qiN>FJl$y;|)8IN}>F7OP4RH z4=Xz2ID);MmGW5s!d@T91|PLL2#w2+|4aMIMLIq^T`fzYN^$2`mcF=*JG_*bb&8kc z|F11AZW;t!`+~EIha%%FMaXY_V#d`S>usI{mKyxGKD9>-RbIfqYnWY+8F#SS+(A}V ze)Qk_)Ke4^D)8kGmMsi~eb%-}lT1M$4%fDA-V8Lqf(+yg-2(G!_Va?gdK^;f; z{n1|aP;sqh!~PToVyK$QP?o5-xADLgWczt#KgRIS`Z0#-Xo}pLt>LK2Yg?s6SR=lF zu@@J0*#Y0Ih$-gzg}~jvHji^iQ@S3?RXPBc69M3l&taxUTs4DtTcDA{3Pv8rmU6a*3wAMZj(*;H0vrz zOD9On*!O7+UXC%#B?1-ts;fbckQC-ntI7oQ)CdTyPOu5H%-=;zAE#Og|C)htJ{mrw zKR|@7g0TsmcM6B)6q5$bVA={8$n7f>9X)W3`UN9fM}g4uwJmIdDjsuI>tO4gGeL)W zg#Ag<)w=v+TQ;Y6O`L|Kwzg!);A_l0>iEicJCTpWL21bDC`hkygTy8jf{pVWbWkKz znkvLqa7N#gK(#55XowcNBD%r(d!D@#0XUfbCR(A{gCgPW5gcU@6SvhRLKKx6B02HZI-44l|a%!j@3C8BeW(JcvHtP z0xyQyrb}7k_SnV3e8lV(XtBDMOKWmvt|gl%f&r}m1Rj?5qwL5g3{y{w34)IlCa7RT zim|y_OfjksDE@`SV8;S)fH>1m5$PnsO_v#ygMkWGJk&hb*;>8JWi2Z(g0Z37@IYK8 z*J75sQl*;oc05eW^~#$g1@~BVyd6hi)Ey99&Q>Q%Ic5T-Y3cF1G%rDRCHY-THqf$B zuwi3PK5h1Tko8Spn!@tqC|IjUk9&KDh3npM0RdOC>GHN_D`O-naJY0zS5)9|1o~ueQbQRl5 zgswSRBoY+TTvgjZK+{(_|HToAkXhjmV%OEm#xv?LSJ!yOkYNl{P~uf@MyK3bppJD7 zOVya^h|;AHMBO#(3j0o~A(-80TP#&{fKeH)1wxL}GrnvM0H*@yA4$R;gptdEaW-5| zcqr)1h-4$6xfM4)Ko$g>eu)@DY}_i^`z`f&ofJ9w$z_wT6(VY3kXcAz&CQ|5#?%Zq z$i~@F#>BK(V>>dS*>8=nJtk|6uzXarHRka~o%Z-Twmu_e=1DL~>Yi+h{4j_%#2#aj zxA;>(1sT)BYD(e3)u$EmETPv&AsxBTSR_eNXn#;^{bj3df`6q{g`=GCwm{7>Qv7IWDR#6DylK8R zSGiDkB17nHw`7pQ7fD5WzDJURd!;#@{^k!FYe%}mEKV9ozfUQrW9dSC8!imr-)UL? zl~sv>r?kY8gyy4JUb(`7U4h!iwV4QZCr0ETFxd=45*`;6R0b7p)KeVQXJTfRf~sscs3+ecb9qBcl`S>h8BT>I%?L|*qp)csOr$+q zArlF^P{Bk_2Sm_XoJitqHIphf{oGuFc&nzA6fk`(=MjfTy{go!1O ziLQ92bb3=FvOGl(W|__?T3bk=343gB@F3xW4Tf;TLstLVLWV>Q4JSHVj>0lPJ&EI}#7lCv7_MqDK+DK+{nJ$Pq{ zNc70L=#x#isx1+@b>*gk6fgM+UckEOd>glV3(H~;hRGLTo>s6dMzg2LN6cD<9R<(_ zvdjR0=w@E;>@mgT8|#S2FS@wwJfeKe?JYZrm7$x9>z%IX7%K(h97|NGf{^z9 zmV$5x%R03RVbmHPSZ?p-Ti8m$xMRcgJSvR!PB}4fsU<9qxKnNZ;m%rxDX!-&#R*Ro z-P}dPih9BX?PNlU?!-~6Qb)S0g^S8zGXZV!i{mH#ttYQ15;$0%smMD zgieB&A4j1(sd_Ck!+t-u8`c{8?D54uIkW(gfzV1KGis3*qHR-cOmagP*0{?b3W46( z2dbZJy0_0}lBk%|-JEJ)RP598#Xd|6K>+MZsfY5f55oA3ElR1C>Ir z>%^2vHuZclDdQ6Jo!2I{#v{si_AQ$dRQ#HXXDbC{&C*w`0ZCn3^zfWyo^+q9ng8;x zZBV0Y8){gUcS@t$ozi+mr*v?FPU%qLEGYI$nB0c33inFxw2V!{`rOjtF}Wplygy(< zwhdP86z9GgRt!DjnHS8ST_>H}QTFUS%c-!LsY#7Yse$ifX>^kYrbGEggU%wBmvBcQ zImS{@?rS;k%>{+uD_I)U{d_@Qwn`RFMJhCw^W9$)ae0G$evJnC0hT_y>_|ll3t4Cz z)YkmKS}k(QI{69cSSyeZ(m1O)m6U?xXdoDPb#EKfmr7<(IoU=9Y_td1aUi_Barp&f zGJx12@{}i$mN7!R*df5<4EjW|M!Mhfohm1A@FyKYf=y5rPlZG*6z>`ez?j z*kmhanSM`2HWGn+xMic3lPAPQ_TbOPL2%i~wEVE?5f&q;3>`PzBQ2dCd^j?w>=5qo z0dq{VSNO8k96YL#Y>U(y!KMuu9K&8*)=07um?{-QrFd)<(?JB=5aYO-xgdR>7`y4w zV=^4ri1fG%%W!y1#tB68V`8QUGZ9VV7aqYTg1|hsk(?f`W6UgMhN(GduXKipkJ1x$ zOCj($%UP|;Tve>CIGI`@7_q+XxH$DNaVXN9pU@s|32ZHPQ2@0cH23&Max?!3vR@FG z=61XSyZE#wc|D<#oLmZt^Z<4tqY3fsiH+pOCDF|prwBVhyK`(iTi1l zU}xEpfE_wVn&B!&QKQYiaQ-EiAPzn~A{KjwD;7%!WKT5cGjZmrjOOqVKMk1taZtGS zta@XrXKR-bs<$QwVe}l0PdNDUP=9b>v5mXnDQsY|M$kyl)z+yf{b7=#Q4ltTap-ye zvx|Z-d48RtCdvH;VJUVHaxZkc&^DjptL;&X&1lAc@QpE#f;ev`@FL54KOd0A*CY)J zJmLm@v86h#4VrFO4#JZ@q&#vlv$n!3&NYn=lwv0J?ah9oFr zTA?j{ozv{41IAfW22%ayGJCHt3=qu60{ShDUl!%#@b`{1#{0?&fiNu}gWNZ!IC% z(V*RKuC{yY<-xwqnT5G&W$$E#rSh=fUP8bOc2&)KMim8Ja75>jT6Nz~;z z{jRc7W*SD9T$hLa?n}|Y8a0T%M<-xXQh@&(`ql-I~*{X>}*eJDI4~_Msj8; z70(e^>-TUSM|mE+zmeRo78IIT$LkN42JKe5zE+AOA7~`Etp^?Kj$Om$f1<`%3Y!l$ zk~`OpO>?oo-dpAyvq~ZLp+<7Y+L7wDRx4Pp4?AnpVH4@x_4eRMc^&>pc>{7@YryxE zmlDNCO9Wh1jn>B+$xUL#pPGwWX6VOD(OiwspYWHnV5mvYO3tY?(ms|V=ubxEt1Li51U8VQ@Gz0);Wg8}k(&^zcOqN#mdsL@3uVIuwmtt1* zF&132(XMG1XkHgj9G^%RBMBqBCHuB>?M61c^qNKa(HfbWX119Box)X>?`pA&Z&l@c zHO5Tew>C_#u5w{g*bux*^Mm4B7K4^oept_<(T{3ai2t!O+@(57&LfgF53vdsxqnhQ zDx`?vr**Al{mh@FknvDL`XCyA?qpgT1W1ecK?DAxFuLW#@bz==;#fK< znq(hjz!=Erv_-sGA+9#A3o#6P_=*;=^DNl^YE1F=_VHi)qw$3F)w9;c%<-?o)SlV> z?WwLr1%z5IdNKGZo{~w%fq$&?G zh$0J9L=vUYe{3YDL=lPGH1@U!Xu?ao!Uds0iU8Cc^2i9JxGqK!>@nbv2DN2?cm4f@1Msm|A2`X@#;;;6AXAh-t_-i9s2*E)B zD@8K5*I@XjzxkJ{M0AtU#=tdM>!SK^<>$@c8_8MG6x&e9d!nN`pE@vBEdEDCn(@!V zI6SBq>0eGOoK5D`A|gb|gohVKC@tP*vG%5aJB>sdn=_*=zQdo5Aya?^4GQz0x+B;B z)|jdNuX5^;6Pvwq1izcXj_Cls72I`|l@b0`2!F#c2rVvq1K`bg_n5PA{>(XNg7jni z!<9}GeG%!Sk({)7ZgcvNr}2+%*?bVT5F5fzTWIduvPFDUdp>H%_|KZxgD@Umcw%7C znrw#Cas)^Ev}D$AM@m?LuTxln&nKJV^p%ap%)t%#xm5C}>9Ys|ub^ulKLRoH`Is^3^Um=fJ}2ojDT+stp;yUf_%%lfkSQ_^!8CYh zsx!eFOoO8*db6&L8h+VghXN%i&b@e$3v8qJGW$mttS_La_s_ZZW$!4rF2Af~(I=;NjUIHXHA5y~I48^{R zJPM<1&>r^J2S^CX{{(N#+Kh^gf{}52U=T)^Y$PWjE^Kxd@w2qfQ22lBy#-)n$F(qg z^`19rnzU(C=Co;3du?lNuQ!{tP1`g{A?2n_TiLqyYS)$=N#6CQ%*@Qp%<#(0%*@Q( z*VmW-oHKBT?_7}6@BLD;E3b7m2j|e7nGvU-HSAE6vk%^ofyYDb49PjL*@caJh&_Il z4gd~)H5)|!#{i2Tx?M)HJhS=d*MoZRRZ za8al&lP7qayS}1){@(D+}!k&vp{|GO~A`JuFhh_xJ1M#^3O%k#tL)Mx-~0= zNIl^qYylZb`g6+Y?*g@$gU%)}BPk=ff_FVz5jPG*bMF+cLDAk9r^gk&9r*?b)#dXZ z2v%b&43?vbT}6{u^2U}*^dqN|XNn3vXKwJyd8^oyS1Dj;uG+AVL^frahhH|ck>slt zo5O;*Tr+}WpBUkw#enQR$KG9i1ojRQy++-Lp5*ffB%IjpfXQpddW&3fWI~re0V>Yq z|5~xrT!_vWT!9^{V9-4|kYNYv3b9TekuBdl`qOjG`JZRTuN^bv^*CxTSDHe$eA0Uc zmm)(6hdR5-aR^{h)c{c9d_~DQI)tLVsRCAbr*C%4xdlI zvkSA02;alU@R9~OTuMUR{}->>JG^y>>!_W zbJrS5hF&yVPZbi6>85^wI=_fktp~JtdJF>Jk>EW0ZrxwqYOQaqr2|T_ zn+Mtly_+iIzAlmQ>~e}6g;z{HC%c6Q*<4@qZimhNro{hrx5DNRz)>$EbD`zIxyrSi z>#r!*&K5uu8$~?*IZm=*(~!W-lZWeH6AydVci6*XMY`SdmaxqSn{c1s(ve28J49nyAL#(*VVWB1hv5p_FI15f93Mc`Yi@3z>Q1P<3FU zCdgFo4HbtLB%VFa;@b#(>Es@PuV;-;#aFl(&*`=Hqf)35g9|)@(})qswcNTIg?*}` zflBV_BGn(0mlQ3}a0k5NeWWUfMr$0VlOB4C!~V5aO1((%Kl z?)Q1~qxbY2|5qd?d)#g`@J-~4H^!&$Eu%a4sJ(bVBH(FOWzXRj#LjZsTRM;~15i&$ ze{=bChU=6b6Sk+CNM@P0$06k@pxln4MqoKn6=+z)X|e^#Ou z$pIK%Ams6KCI`fv^Vn?jaX#-B0*a|nKu=2=tlMgs_h29}y9}y>;*mqot)|_yPd%~T zV2c1|&q@43EKnZjEI28^f^Khf01?^1ag~)qvv{gWO5q7n30d_?iLNKm*S{dd>**As zhtUAS=`G$48TBCv-Q$R~XE~=l4xSzr_<4ALu)WS9HZ!&I?mTxsEiv|lIrt^WLl?3O zR}zmXtS9Bro&)@P>#I%pl6QA0|2$@x!FqTY_*@QiCAVgBX?QH-u-99|o#p+`^59Ts zuqm7O`AwzXlFjBIU2Y9h)@IV&pRU1SK;EQYJWTECP|VnZh9O?nV8tHkG(E-wPf1=` z>mBw+dg6g*yWfG_sM%VElkHP*d7gCI^SorH$F5sn8$u<+W7i$e%HbowqALGhw|Gq` z*;gbmkHs**i4)V?^W}P20*GYRfz%%^SmVRpHNr@ERM-3pgluGG#qS%5r$Qti5V~T1 zQ38%++3>Dw+S%Sb}1RtEcrY7OAm^0lohb4!izJx^`xs9pSZf(Fpo&)&J zVAzuT!p1dsD&va+CriCOvy*XGPmQR+Bjr`3{wfM0TN%2(uZF z|1dZ-uDLg}Vux-MA*&R|)e}YQ&r>PR6GdB3%AtexQ`J0kkK*x*8h~-l9WMXNsh_fx zG@^c*Jt$=slmUA_zkVv8lfwqpOeD|b%s42p)=Woa^RrO zWY6d7jQVJi!N)ascbr27B;AS2@_{Eb@_$7NBvb%)0;7WKxaK~txrYnRj(UtI+a@Jd z9_Nl=TyyvB?k9$c8u_^9jzGE1fk7C#?)U#U2Gtbhr^E*66 z3080oFynH&5>D#oa9nN|6I^7$;}&;3gT~t-$JB>adGkxB@;N!xgQZjUctq(mdr%G> zES+Z0=ax>@M~e(DqVV9V6&rk9ZVyFjtac5$CAlBenXJ_9ZPa2qn>{E84(d$ye6G%@ zj}{qxTyA$O0tHpN6Can`DfuGK(2YE@9bPJ&XR(XEBD~wU#T|XyxW!$ut|7I_deOrx z4%u^38$Bgo(njTR?h8)}7=m%R9ed`*W{YvT-P5KpZgC&CxVx>0Spip_p=b5p{}pNA z#^rXs!eg>*+~V$WfkpvcB#s_^GM?uC^1^O$U&uL&MD3xJE$)1OPw_(g1HC;j7=ufoT>U+{ALBZIe%#kS?rVqR$7I|aESjp-b8nr6sh9d_k->!#7#G?-i>#~~ zoxeCEpOf4V+SRPcJubBKZC#8dQ3}Z(=(J(;`FLOdpgH$F>7vcj|F*-?*RV6%uK207`>6iNBIpBaEMgurLOJ;nQ z%=j#s?CcpiaXcQ-tkJf{XURmIkiz#GjL(u8pCu#Cp{J^Ry=TdI9HU+V+w8EGZ1=%4 zyS?{lX%!v42|nE#rd_~+8WD};N&!q%ikP!*2n^3CApEfOZ|&w8t~V8tE-*vYVijA@nx>=vvH&; z9M}2Bb$)(Coo*M{T{BWoJgJ)VJKWHXPrBjVmZE=MEDK1c205gBOZb^!=dgHwe6T!c zyQnsZgK;F=$CtS(YgVib9erv^*8HB+Or1R_`5vsvW#EQm^U`sp>}27Kpn ziNq=4d0A6^m{a<*QV`=h|F{8v+<@PM>pAh{E6=?K&Q$?9g*@2;erbG}Yjb>=t9JRT z)EbWmG;8DI27Ek^Es|N|2K-!3jW2WMp*(NUm-DgoWv+V~$@SblIxN#v>P6YX@*Dkh z1zgVf7FS+F600P<8p;+n#<#dydk5@xcu{N_A1m+7lbnTf!LxC(T`5osJ0+^;jbwL> zSrd;-Lpm=hm36S@S}0DeOzoG7u#JM8OBZZ zl%Ya=<`?RiX=jgOW0>?L_C#IlV#}Z#>dx; zkFWWE_4pchrG0OiN_#(L1;65z_6Lm*inmJ8*aa_*QIV>vIFa>KcW~~m^g^kn*O%ae zTN?BhsirIvQ`CQ;4f({GMIdjr);HE5S`%NFNQ`^h$35-(9pYMnn3BU_bM?5=?kinr zj2u_m$CdVRrF~p!&kE??e399W>_O?P$CdVRrJY4^dUVJe=&5tNA5gS;#O~o z4AqbI>Up?+tUoKYIfO=5avoROqd9=GuX-}npK*TO?NIwELESB?DW*l^e>3cpz#f^$@l=7!4OV6_B0`m50DujAR{hV9aq}f za!#J9HJ2#PJ2ZrKbdRZ(55w6o`A6-H50EK;fQ-3EpJki}(zKZ#SUS*x1IYYO98Q;7 z8ymjU-cR+KPp!~H73EHMnD)D^wI-e;U*b;JhkC>Kc6zAEj&8YvJ7%B_f}WFh)ZO|g zxxdb6;rT@)@x&S0Q%!cFj5khoJSZ|TWR|sFAToo!5n|^8%@!S? zGrf^qzvMTi%siWm!uXGy;_+~{sA(v!zc@K0sH|My@ZF`w1d=^Cz5q6`Kr*iDkL&v5 zy8gJXpOx#!b$x!|AY+LrLU}4M%-M|V`s2Dj&-u(U^0XaLmHb+n(Rk z>~h$3XRN2dCZ6rKhQrp<8kFtaZU3h=lIzBl=&&_iE+iakt##V1VW-zE-uS;Z<=nT_OFP=aP>3H~f^66q805OTed(%W z0}H37I1|mc2{6Qu*|op7p6*JQdYgkmx=Um$+TQk!wbpQ@*I(ba_q5%6PT33p?_2A1 zH@Eh!4iE0zI`x!&r!4N;SlfhKy$9O&vdwBKGg<5Du(jT6r)&G>n!B6xO;svT|LG%w z7eh(kq>(JD8tfmbd1!9m0u09>kZU-N(-~pJ*pmqHrj6tVWgx;D;V|tEI^gcg1HV}# zIjbV@W(W2+mB-+m8Zf}guVDZa%H>6l*_vJHchYVf`mtzsdg3!vX~<6NPAHS#&AnR* ztzk5cvH2E@wZ}#C+hwGx`w+fGBe_l~nNvWa@wt$q-?FTtvq0uT74ogT*C6ExSwtad z`b(LITQ`z3N=b`Dral-=Xt8Qm$K<$8Bk^o=%;DQ0?ROyVK0k}QOL6bEjpQb!xTnFt zaCvyUvIgctoiXQnQ?0P%ms`UYBnFzsMw=P#e?h~O$=er53hvNIE@P?*B?Wvydc#5Q z*ho$?A7l{*1)vx$j4TMfllMYzlcVU}@a2m^A^I{R%OWwT$Nkty)Dwcm;UTVEPB&z^qZFXKdGC2r z0m%wWy0y{k57V|rS(KZa@OFl_R#*G!YHOG_WkA&I_J+Ltl(xN-Nz{_4kc7#()war0 zPEHCw;n`4?;lS%P?wZNn8;R#E11GmS-Q~?C@QdBm)<&l|%OJ1wv`TYmL0s?Q-Eii_ zH47Pq9z}^2wA$GizJM>nJUhO^axb5! zqG7P+5ml&Zc}v)Wdgg{{RHTHt6swxTe$5}4Tq@`tqXu2}>H@i3&E0wiMEuwb9+-rw zuhq{)A+8t)p*j=m2nCaJD^iHvO0cL%I7XM_RvXEc-O&n@vXrg|Gl4jXe{#RqImy_E zmokyph$QCNqI!z&^sB&MfRD5M1{OBoEed3PK@a%*3PDc{{CeV@10#xeph*6xZH;%B z1qp;asD6`hoQ`K#t8R&SolQ*-uFF-as7c;|aG|X}dd*^D*gFC2EHaAPhcpsT3l_Br3Ci zn3quAdQ$|mOu+IdpSyUtAMWO02n`=tCu1+4#{jcg!DDy|Msjx6VyVU%cvc$?jxDc^mEIg~o7H_c?&KIUX*1L*q4WlUqUp^Ko zH)bwH(f8DSINVTy`Eg$1g^?~kdzf8C7yS4}aziyn$hwz&Fy$J|u%D(I{od9QZ6-yj zG)Ot$_`3D+3EqVw7s9*2RAm);A<9Db<%xO0qnvx#-z5QN9RLNO3V%m-kizgM6^PKD z9FxzX(4P`r3KC^}L%faypkpAnO0kj1$H*O)@H`I&kC1#vVMv`Ybc zR-T3MNv;4GWlOydv`FaN7!(z4i587it0l2SO3k%lx%PF+^5dT<&#;{T@H{?S`aW)Yul)3$8^0uvefn zSnl!TG{hdaBUHq2N3t((B%TAlWZfl0RQQMHp-y_39a2{aU2u~5Uc&PPw>4OfaZ~b& zM&j8#@1UeS0iM|+BTq!Iyl;Y;KKV*-uabih-u6YYNKLX(I2}W*Ee)>0)EfAzTnGE= z0uJ^yerw656=k-+90K1i(-eD%2@FvAtxkZ0a2(CcwRZyb>mI%C`Nm`v3JZU}5` zGWjO&L4cgCTKrE&I?e&$!A?5DNoCEe5iZ z&JsjH`~-xS>Ag_b`!2b_k&2`qv{_z{CH@j^)Kg+skRF5vW`B?rT? zKG3kc(w1QZI_y7zo$gqbQ=-7$oNq?@Be6(0Gs`2#%d3_m|;a8^}w#1P>fje|ix zfhH}RgJ{vf4p0IAs9X;bk#g^uXoEV(l z@W_!nF+;-p=HWaE7LH^yNq95lKEA+DC6ga<8Y*4}qq&dLx(I!N{;3)&`YrnihWe};P}qt=hRJhKW18IUvafjCPfMJB%0^~Mh|VuZSQJfi7-P9wShsHZ#QErhJ6 zc_;bN!1KvZ_}lj=usnzBSfPmZldcSbOS`o!!^u)(f6B27R0wi81>Xg5dMw&5HU6hv z(Kg4u-DNv{OAY*)h83eSjH?b%+Ccz#v*#Tk-1u31a(N%+dO=7vl3p10NU#FJq!prR7MTU|JvPO9nm^ zT7ojsDCjjk?oJ=&%T*k(KGaug%oM&FE=_wFM1GfejjaA!Be|@af*!y#Dd66jEyf}g zS?)MYaN6I%UuTZ-b-%SkK1qo>ASrAC;)yymK~EK;iylO-xyJb zaq~u!))Q3JSqJ;3p~+%u32&YoP5@b!IE#c6+6js#bX!a#iY0E@Nba)@u|zPCI0m)v zTOLzK?%|fGr0^;fMSR=mc(9J#;;y*V$lvk#_;zo-)nTWlmKylGzA#sF@TG?So}*!i z9K0C1DOMQEbNu@bM?)~M$F}^iKk$WvIBeF9UWzS0^o4^ow%|>9+HdH2u~8atoW38-tmQ1?eZTwEj@lgmFGl3} zZ`DYiIBMU5+JILH51Mdn(Nfxm8M^@$@J>2_0u`>8QKk2kxxMp?3-h8pMGohejuu)f zP`igC6L2f8DTVyduN*sj0)S+*R8fdb*>T?d+Hq2S48-OjrRB#? zKR8YV4KY_hY^sfB1#~Ne{6|MiWC(I8Y4RD)-gY31{}gbq>eKk_pN%L>6cA9<+%9oL z#R|w7aewi-O!L9N`g2h8(Z9KJ9P*zSm8nmwbnu^jPVn!=>?WE9{DW>9eqfy<+#bX4 zCcsHl@Ql_byMR6z8I%txL^GHt|6@e%^45*y(c9-PGldK|N(fPs$^Uk=#VTyh2GTv( ztx@3citv>v3eu9ve>$3p!?5U-L%5})Med>$(Elk8R2a2#K#5#x&`u`*1@WTlGwjn1 z{ypssvs%i6y(dh)!Al5XeOX0TWwkb=yD&%)r?yuiy*lBtUt z-EXTQDn?Ps5-xR|TFmSsd- zH*mV(AD3N5HvuNHf}5~5gWB`2rqFQe;v@1Aw{0X3**+i9?kxvmLLqk$c`|i;Be{fX zPxq&58{z@ayH8av;i{Bossc#msR?kYf|^`arNi(G1iYRw;*uj$k=r$rCvT&QFvpLk zr?)wTtBKNp#$b_p>IB1(nH;tTBqx76u0(~RiA#mOgJL#0?wXq~1@hA26v6?rjaH~7 zT1`p;y^Q0a6~(qWfC}$al(#tZ)Ri6E${e$b);0M`G7Fy1ZHAOJ3i zsQ~P%1%Rz|RySepkfkU^+0_aF!>~bA{7V5lF>acY&^B8AVPU$MY*9b1UO+!KdTX6! zSc}rQ2ywk@^Nw{#n{~Laq8HwyNf5(pgbQ}UPQcCJOe%|z2V5S1wtfzzS&4Fsm^U`t~3YTSOxz8)WL2k?R5=z zoA-UZUf5*%^#XiThyVkKJ@m>8)$DYmp6WqB&N@2Z-p)_1Z)Av(!??(~flu)viD8LH zOk4QW4GrTV=MPc9vKYn-WWyPT@z9?}dJ%Z`{EZAGos~o!_)KHNmByHU>+nJwsto4n zXBqcxucj;JBWD}>u9_0r>u9OljSYR5WcqR}K{LK1IX5wuGBk3sBF9D_a&h}Q@~N8| zx5DIn9SCvh?9Cja&5j{6IR%aB+8Hrz;=1~jN+kaobj{TxHwA6cp@J))Zm28x$Co8T zW>_IhjzXZGa^5XQlp5cD8_p$=5mO)~reY6tFP@|Z0>-4!s!F%#`Vk%b;G}^jkkI;{ z0HD?BN&$ieXYIH%4<%@EFeNGl16C`ngRYfCMG}*pAXXR*=P@nSLe)FmKrjU*CvAf| zg+AhbWbi=5cO8+11Fbkv zeOnO88N&EFcNw(*`xYPvx z(pI5)I_GHj+^GwDXXoI20nxb)wX`5H<9=-)g#46inQflmb z2FI4$KnjnY(V0x`3z&Jz3_`mh`9RDG+{@<#Xc&yyauW7TYE?a4y@@YQyOZZj1%@l}x4H!i#bg#@)H%6>@khUJby7Avn2@ z?UX|!TX=kq5A+5mQ>(Q(ru{~!P19Od-q6@apPx1b241UrupA(73%wP+ z+hDFhJA+LO#C+~SgEW0Q5?VNx=a?iNtu=pcCI`y(;7H%Pu^+U+@d_Dr_D_I>vv$<= zsyefO8bf6;AdXTbJ$2Zk_+Y@gdo#;Ydws)6NWofo0KGtbe`gwi?|w)hPB2apUY04jm{nt;5whNDF(#^V%F|5ly3>Xxqw zr)fcq5FZd+NqqLvqHf|{Q*cBwge-C7M~j+7g0I>W_EkrG8xV!qG?&%pT3OU(!QQQ8 z>ipVV*1f&aEz>n}fM|Q8Li77n_FPEaed}?f_X~SAoI28}kfYENA^h0;@;TG{8*Kww zK&i}J0hrE!bNW=!Z)?iN`&9d!R#TUaX^C8LBLg3VUF!ozaRH<xGmrOme#45L0-z#$o)8J88nd40)gYv0 zcx0mjpPm#H1dd&iMNjr7P6B!TG?-HA^pt!m%8P)TDXL37wKkXfG^1jUVQGmI6sMkU z%utFeg=NX^0Hj!wMbwzJ%NP1m-^=HppW!p>s$+&PJJ#UAH&t-V?uIi*^YXa8x?mgmI3CMy-$$z1jz=t&O*^Xlp@B>PN*~F!PYI9hO5PGN4pVLS# zWwx;ZdScr8FFgV_S+b5#e%&y&wrWgw-QeK^z};2|7qJtt%(_;6qQMzqOPy{Tn(k|z zaL;vQeRv+31}kFX0g;w4icCDK7U4j`=J$vuAgn;2SF6NoulzpG(Fv|{ECU!JJ0Q1` z?5v)2A12!-Kv;?&^{Hegjj#*Bf1?x`y5~3SMPzdn$}PIwj6~<4{CSvf$LC=M;Ac;QFvg=oE~mV)n#jmkO2l?qPcB&j13IffDaQ$4HryDh5)K&2jMyEo_R+OVY1M%7s83^dMs=l`duJ2`+$<`V!zs|9@#(;#f4P=5STp-XAZjoTw z+FN6xV4HPA>;Vh`f3IWU6HLBMKu^@D_tr?_AY(nnyRyCmC;jUkr z2E#J3vY5~>zT2|Y$ZvG)wv-6t`E>9P{TAv{VBX|7NW}{#yN0?HtT#If!wM{M8(-nE zxz3UAdP{A->#dGEi?j=$$?HV>u(#Dz_(WxXd&3SlHPk>q@~|U+DQBzk1AN&T=e{E} zi_p9wJC4G^oURK@f@R&}16->DCw0fLV16VJv0!BT&Jj5-XzQ%Qaq-KAYjs@jayl*z zQiS6I0xi*2bX*1s+vd2Soptn%ixUTq%iq3yG|u(^a!xt^b#h#rIN#t^$Z@^fX+i|c zl^r;xMt_eZzhSFIJ(x}NBi~Am{{GrKLox)O@_Je3he4dd&FLd$%jiXO^Q({ zd7S!4jUM`=r8Z$@J{jrym_b*8O-dPqG7`m44UcdCc*xM;faq3fo0ikJgVnSgKqcSK zZIQ#byO99wfHd1nAl>jmGWCfO`F7YFuv&RdfZMJ*d%!>G%uR@`u^X0wG)t&Oyt>tz zrjqFrmLcuBa#3i9zu$-pi;S{hlNs5~PZ_g1Yos7&zJ=-vuR_lJ)6T?-B;D#S@9!L9 z9XF-M{)~TYBw5@yTWajjI#VpBp}k>e3+{caKY!o{QSb)+~V%VxdqWlu1eDPGkLo&H~cjM z0SW~hFtI3EAkmU+5f5OkN}1$tqZfdUDx=<*no$=lNrH7xroQ5|tnG9)?eYWR$o$=# zi@A_T_^LAjV`E!~AQXncF}es+@wHm)6pr+D$L@a4Pt<6NKRwGu93gnafxb~Kke7qu zSl={Orw_D;bc8Ko6i89zAcWDkjMy4SS!-=}!8dnTiw*Vd!r79J%6H0TCUOvD%6AQN zGMlXy9z91o$dOz>056<{$L|>;We}M@L%s+@p?mOG9%1TRW-Q)8SzC;=Y3^`RZY%&j zATE%ee1Akv3O3a3uOU5Qyspzj{lFRhDR5A%IqnIFv*cRDJzYgDJg7>=GbCGHhQI^( zg(ME2X|D;`X;{6nOsFM09zl5dngWU+IvUH|03+lEwbQ=j!wAlO*%wbL~<;&=d8%|a2!kB#HR)yc&4QG&7pkWv7D;<$&! zLz}j1x)iXVHvG}Fm~9lT6&{`Qnri(&t1XuLx#2GhZnNM>v2f}awS+*wEERX4DPb>E z=U)Xp21x-tY%osLhx@f7;H380{MA!^px+qWM%`yxL49`uDNjI@jU{MR-hm=#K=j)P zg%oi0tXUWe%^eiF-#a#n={AnXDY=0X5Nb)fNT76*FHlm5c1h4sfx5z_2RD+3j=Z4DLQx_x=xQ&D z8v2Jk+eGf+!Kl&jD&$)K=-88}YXP{{G`n=M6p%mVhIhh$mnY=U#+@gD7@-D={^B@% z-(njJe&lBCQmp%HJRn&cE(Pds#+@@Z|Ar}?^w5G^)ad-H@{;0`(`V@q8ydZFQY7hldAg=M2T=4{z|`PO$jejnYH7E}lmC zPk6w$-8mb={t3S9iVSx`{N}A{5bi44FbLoFEJ8613&Fcu!9sjkm;zQRlP{waz^o7<_bZu-a*+;s6@>&54sIPx4=$&K{eZguZXQH23uR=ANl3 zo2B%diH9_j`)^NdK~cqA6PJ46E`Yg(*|}5Z_J{=j7^D$;mwlQ{R`4O5h$8XCPFRPw zwgCvoc!1w5SZZKMVy)Z8<-qG{f0eC6ml_+)sC5dU7@LL$z8z|nX9}>}y4}VeA1_2~ z!9{F1OG=Rev7&X?u@_9UHDLEVmI8Hbz=vlX;}kUyw0rC2$vVz)vWQL=)L`H$+@ZKi zvJ^!Zb9S__s6<9qg-7O72rDoN;{ z=4?b9>BmX z5?m*~zZf=GZ{)8Y(TLJ`Q--5O1v+lmsKt|?3`QECflKXZb|<1dW|#x#P24JCjnTwSD-e8x6n@$n&p%>^yly zuK5w$uxj1zH3w-QQtxIr9WEY#c7%EOk0rgQ&d<%x&(F<^q!;*}?7X(COq`7(FB+xc znoFDA_F9T!MvIB>4e|$%fS>Rc;Scaj^wph{#x=!MVfBKBoMzZt?ydQO13gh^Hds}r zWdKUG$3|iw)&TH!PBk1hCBu|>n1&o@E?~E-Z03fWE3FHSd5ewYG;75^NJMjguirTz z&Xj0LcV;v4LZfGotJ%v#PdXU1R?|VHImFa~bOI7H_}9);syIJB5L2+dM(obQ7?=nG zWA-%t)9tempHpjcp%S(12Y~GKf2S2PlZwM(CKuFc0&IT;=Vz}hWh#J%#PWQk!4@Jw zY1s2!XGEUwQQNQqMRG)Udkd$6+uJSgo5q%vo!500Kj8b)FEIZn)G{*%kK(!#We#@a zYfVH@6LK$3wZK%J4rO=kgpo{Y?(Zz6{VsG&_}tL-8p%$VB{i7j^+AGH5rG0Snwf~x zU5y^LWSZ&vQrd2(?TR9T*%0EdI{~@At1HQY<9fP&VW4+|NEX7;{T_EwN^&=J^#VD# zGC0y*b_RL^YSi2+CAc%fo&!`+4?P7&5gJSiOj+5DJhp|0)cJ~A2-=yhh39ON2UV~T zptF2{Haa|8@auXsAjUHpE1*Hm%w0kQf1B*QsjFK; zHA7Z?i1jo)n(IlF^?~KBklWC1L=~xSJ6(au+}`mGxZyrNXQr5LwVgnhxY9=JI0Cs{!@a)1 z4>@VI*E`*sK%MJq!2tWsK`r%LxZ+w5S+@_vLXdb;dMzxxgU2s%x)`kHemFvB4HoX} zfq6$yw#{L79I0X{^|+HK5aw{!dP_ACbZ6J`l$mm@^_CCT1nDkeji;>#HG#UTCp+TY zGhK34c_}5UyM>|k(?cEXimr*ayN9)2Kx@LL<6)~NnD+=%I7pW_`<>yDnxNe?tdiJ? zS`(yw9=c@li7AX9T2vel#Xx8BB?foa*SM-;+10u*2@_Ozn9Lo%6P&0vMpOg6`GXTx zr4;ClLijqnbt8ka1ejYUyjNbCkn=0gnMDZ<9QnuyfhifTcM3wZwu@303e}dSDxgGB zKoNGxJx6ixBL8>PJ){NhRCL+1By3oeW++gI;`09?qY~n>^D`bChYT5i#4RKU(k6pz z4tx$)4t}y32QgdbEynKklzSS`I z7-JJ!AcK0Fwmwy)mzhOPB6ophDbGdU_#DPZY+<&6|781n@T-*gupda)P;|5wzt~X& z%TOU)&Gt@2jkf8?5bc8tqJ}zTEZ32%Yf_Ozr-%r|%CmT7d=kG=-r;HIBJ|;$>`bZ5 z$^`;ZB?o3tK&`&QDuuH!A&kGZOhLh~g@qsz`LT0rL`xEn9sNz+_{J_aKk@4WJPYl%Uy9*L&CwSx(P|=v=+H@u}3%pdW{qM_QI^(RfrD|3V2HcZoHsT-b$i0y!?eYfmwv7MRj5o z_($dOp|^A(U3RRD3usaLaMZt%J~%@?*yG)4gYk0<1v+4?N|7d%^ET7IW0mp$Ssqy` zh)ZHL2b)YEI)`Xk)y*yl#jW&JV;6ThexnwpR7d|CDV5VO4bv9XD6H%bc?tR!TnT_M zf7+}!xLBC$wWB!s?{BUj=LlytenbTp|3{edct_z&V@5dk`9H#iC**M<9G*pS;s0^J z^+d<1RaDfgC7`4jg3eh;c0S3lb5vGKxA4S&OfCjk6QLp)s}s>b)shjG!q^Lb*!g5n zCdmsj!f)^|;6E$xfp|(pJwvJZu!;!QoxoC8s5`l9D7ghE1|H}JMh130Jat4xD6q!u z%BQEdy2Dxz^m>{j9FQ=C%3vH1y5>5_3y87=3C-;jSiOL+u+LWdt=09k3-Pe=Y#6vL zBhS_r2W}xLBQ@%40*vClM|_4U@DvX2^50$!!9=q2>5l0HU!;oQ6F9~Zc?x?H2YiNM zU@-YZ=?+_igO~u8ANiS%XjL5<)&S|G$?_1M<>+#9L11@Bl!xQeUbl!-+!L5ksfJ8Y^0N6 zU$vc#91TZ#zAHC}J~L>DMNDuEJfN6ttiFIlzhxi6I4^KGS*|k026~~Z=*@JGX-4jF zh_~+rUv{p$yvRLM1qC8l0tMm>F%=Q0 z4bKv$8#EB)6{bn-1jLym^>3>kFqfTuyXh)cJf0iwVm%cuW8E{`7h7?5p@O~C)L`~S zWHK)GqUzG$6HlU_h>@;Fkz=-ISNff_+lJL-;)7oO#8KCetR3mnCP{a-;?<+7KX9@W4|oUZA|EFv_(F9XLw7Oya?b0)Z@wHEeq`9xC)*elI? zsRc~#T5>BwA!x74BW-ytZ9#8JEu_6VA6Tzj7aw0^*11hSVy*`}q-b8$z{%H|eULtQ z&B6XwpPj5x1K8K)sY})o<%SkjrU3g{+-|(yEHSz`0&|@Uq9!GKgW37xfVu%{)*aR* z`8S%SLkl8^8{l9fYF*&oV(um|c?#Dh0CjNa ze@$xh);!y^k`CEkQTH?|WOd(`H)&VXK5Q$iiL|%piB8!lS_5(K$OYFKfaqv7s|IlI z%(J`u8MvCw%)9awltnQ7B%T`R{I5I(rJFZuQki$>*%!QWgIas)nt$)fBX6Ts-~4-T zp2dc;@(MIEb(d?iFYhyt9ySdcG{CamvaPk|;m-N3er=J-`^|L>3-sn1v{u&=;(Z_= z)&Mpj)B@{+c~-QaF16rn@Oq$qC?DDiIKY~qeK;?60tE$VH5;{$wrJxMc@7y9lKLFgCv(9KTdVbf z`&6Fe7(fNTE|c@=Jg-04T!M`go9x*58od5z@;ntD_qV^_>vqnsYi@kjJQ3HN8wyBX zXsOBQeJ;;Os*oXT+<-i~CeWWR0$Mqpxdst`!8{f^#BaGP#|?ON$@~}drWy3du&#MG zW`**jFXc_MLtwC4OLTHu^QBf|~5(>2%xaR=cyZBB8LNvixUZ zpkH(8hz|4s9N!~|stWGwt_q(Hjz@rXLHveGFLj8R+QK2>wGsJESE!(aq-LzTNc@(u z2%AbB?QPUX)VIxrNC^b8AnFFLi=6Lx*+)nBz#Yu>itD?s{D;J)_^#Uc_&x6oP@py2 zLw2ew&gZIg?)%2d_yLq$YlB@`TnB(37+X~YfF@MLu$ozyV*JopoF_PJ9j7i3KQbH& zfvDBs{@5tXa|r!qYortC)YalIoe;k<_aq})>Ib1D%VwN&FU}+d*MibH$oyB2|dW*$Y2O}V4&KHKh)wQ z!aOmEc*nv1Vdy49i*I_*jIFPWUJOO~?0*}MhsJ^(n8h&qrwgMj!AHsrE8}O?|M14o zba}0_F-WngNqk>9lEVM}e;N9R8?5vi0JfO5sRxkGLYDlHKOmF;*J$3NVH8|&kdNmL za)IfuV97g$J#t%_1&NW;G>Ga1wbspdA_~4ljR9Od$rwZ4SW76SZCn+Q%#IoqNL4=shs&HfZz*j413WOj!%!U>1ZRXc8*+z%PH1gI zFG!2=w%FX9J{lS{fuYR<%l+2Mu!-0ZB8V~4b1kNR_)nWAq~{`r{Q^X~twWtvY$}m* z#)-*Ij(1W`A7hva7-^-~U(X1N8s(x!7a|#(A{&4RRYDi2JJuL2J#Vwq?QOx)Z2Ul9 zRi4k>mKe>_IXOvytScGZ!mV;fzLatyilj%zu;XP{sKHNFjLI09@JRwd#$F&)N zpV12kJi$0_(-?3aY*-72FER9`jQ9Y|N2v?$1-g!RoZi!yHl`107jRYZz^zlL(jeXn zDt&3ya%4bj&}oy>iKjG@`;J-<(JluS5lme&eHp`B65Zr20ckmdaUM@Rg_8k_o8RCL z54lZ*zJDGk4CoOaIAA1Egh)7jmkRVTMM86sdYyn=TrDB}~O z76YrHdtB%vxG{PQ& zQ|FT4^tFt5hC`@#NpSjPBN8Df^)3lcU)u?z)+NE|NyB{-9nuMnVhv(?%B9OSuGUTO zG%83$Q?09Y)6*^xwJxPi&lpaOsNf4wU_n$fF8_&^U3)g#2e=O;~7b-zwMiZkHFRbCqj) z(KUN&Ugd&MrvGArS zANx^a#D74p292E}()X|H22RR-{y1+@yLRCcLU)Y1>G7g?ckCXtN9Ed&@z zflBRlM^veOY9rYiafK{c9COIl`W0Ha>FXIw4k+1tp#pgoDwWzA2Ll*irL@SvUrao$ zk=%q1`hp1Pl*L_q-FDZ;+9qrf8SK(ZqsuGJ!C-CQJltU`&M!Fy&dr$LyLhTNI)hkq zx;fL}i&;!JU?&wljpGwtNr2~}xR^{|A65_!v<|hl@XmBT2)+U6V61TiV7>ev5>nv1 zH#8DSI{5}K2s3}yuv=Hd9Dxy9X!a|^-@3KB!_q*OOHx0!~a zqP#H*qbSFH$RQAJ2^{(>#Gzfe(_TN6I1e2=LNG#%0JcB}@W39y#k7g%G?Gr`xxRlm z+GQaP zM8`P@_nbyDZ^F$5rzufU*c{6wffkHp`sVy}Ieva4(u4|5wg=ytOVrNfrQh;Tf^pa_ zcEs`9uE?|jl= zuvXkUhQF31;N5x7@2wt#0qoTUnN>gNi#C zHBhx$)PyDdft(@JI!?tj4r7l=O!fZUAjPFyo-WXM$3Q|x&q zt-;}0jj_=XL*sjq;qT13ttE4Kf(Q;?2Y|b{0BrV|zSO~>yK)go*257Ut>uGoxsOW1 ze*mM)@Cdj7O{~fE-HeK!Xw}4H<6xJy^1`R@ZmwebLP+I%$nEKSaGxVu$06}CAGxQa zuz=-2k<6LT@8f+A%A~~}XLk5pGxOBZhKLZomr?ma?wgQXoM#*|W7VJu+Jz@?s82h7 z26RMfsD+nH6{CU%tmz!5#yVIgfS@WASmqq^TP8|zg_IU*z!qSGJ2^mcO)rlq$b3Gw zif#`2yW$FB&Zvx67;iUwyA)3E9HjehdiEJ-%?{cJ_pPL@;buRb-Me=m2x0+lU7Vet z+c$sO>>~UuV^3)PPNv)Du@o?o!m%gCe9z|!RVdy}qbDt@i~s@ohpP$5I`LM&!GgF@bxIdxr;UQ4TO(A-7i>$?mv_JEaxy=AZ|LmMXsRb;0uz z%$bXWsu(Nx6;{*x9s1(bPP_+;;_dR>f=0+@9NxXn;c5>}o~k$zx|vDlKs2mAID!s{ zr#!5K<~jaeeZxSf92}sG=J%T6Rw)*Pk~UWRwvGsuf_E@?dLVX@-Ugm;(xM7BD(`xY zVO_W6M8H{)%>*>j$R7J;QKO&HGTj?_SPAWYv}0*RVdZ(QsIShjvhM;=XIMEHbyx}Y z$YdI9r{22C9fLcp+{}*-4;73K51Y?(1p2VDHW>ERDQK%PXg4ICXP$NDEG&oZx^Zu_ z%Wm4me`evER@vW*b+R~jl%?7E!f^!I+DdVqem$Vi3L3TEN;m_}U>X7eAIJmX(WFgN zA&^FL^U3>6o;=BaeL4t45ysTyp|p>;Q=JY{nVM3bI|mjJ&pliH9M+k<3r#O*B=@Sk zm{8}k!TE-f#6=<+A5{kn1!Q{N3j{!n74R2XAkaGtGQhUz4D|@$6%xJ>wRoR+kyr|# zbKK>Ub-Ul&z$NRY)>67Af9qSw7BNtr7gSB(+uW7{+|dC=$Op))B%iCAftiWHwh8Jb zjpP;uQYnEa&z|%ZZLzWjIY%;mA0ysD^{4Pj453+23e#S~)u&MCd0(UTO~Rov7mO$^ zUU?YzGdf@qhD`J7BMLb}FY>+jHx!l3r|4&(ZL1W($uE_xAfc=tFxqJAfv#Yv&S>jF zqYj2ZBa`U|7Yc?RvdxjpLyaaw(ovp7qK?REV6F9IBm!o@GH5W3#nNR?g-PE=p%_%d zyZCVc1jCWV!!EqY;-!sby>eusmOyLuXAd{`0RsDNV5k8B-;OE(WLhc!hDfLY`z+9l zr0+)bV6km}?d6T+HU<2e%CUWWV9D9nJV({`N0@Wlpcc8E-Gz$GeL4IFUxi%TBhCF< z2AC!*bJYaxQI5Kb$`%fd7uCp_7N81|gc&aC%8(}fC#>wlTQdDr}${l=7dnz38_c>MfkU7~q` zPyCzU*lVKXg|Kh!?#mV0f`He3gI!QdhkaF4ri! za7-E8Pc>|=Y~q4G7*a945t9N9H|k;@jB@dn}uJEGHS_*hQsvc9h32SI|_bX9&0lq_@@=|E7ex+BMzC0(qcvYYlqN)HXr2bdo zIOElJD5K3m%cawttQ1<9p;MMtQ8ZDZ%JLfI&V{pn12V2yWm&}2s^p2AyKAkoyw2lcw$pWq=NPavJx8RcW zn@7}x_?kwtQLQShliUQYsnuk?#f*!5@Pu+x$mm{=24XEq7qMD;faXVJ+YA?&mfM#z zTqq}IyXKp;{3)k|uwCecr{8LxDM&=i5L&t^9FAh?*P)KX3noy0!zMg*vX%iFEN!*h zz3u?VHg~ET4?=hhyKSKXgFUM)M8BPp`yDbLn7=G^e zN>38_;+0X)K4M1RMmd96h1rJ?3jFBLK0az30VuY9wKmv(U{o9&i~?mU3DQ6GzYwjD znH5sqZW31bt&7rE{p_W{;NvEZi>%nr*EbnMnNH(yIir2T%+?4sZ7dok2D48#l1r*i z_yArRQjF!FGKiz{CG-}zmf*fn@QIeL174Z(5R&{ayAC6 z#BXGjh%Mkpzg~UAs5=ur=0Sf^BYo4LOt2g`UbMRHf;##wW9l%*AMUhQQ?8&uRuZLB z-!>O%Nrqe#aFnP?^Bq&8xCd;jo7-vDf7e8vKS_(W2v58~1E;@dKD@rtOi2h^>r7YC zJc#?mg4X8y#%W@VWt8+}HD+nR7!m>X7g#Fq@MULR?g!3Uq9tE!wz1M248sl1~RVA0H%)6aP|)jx7&fnEJeX&3H%Ld!4vxM;xviNY$OjSBmvUDd&Fz|+a} z4@Xp;gYxeAwN~e}LP@Q4x*s(X{RlsrQJK6QkWv0=EGi)@uT)<@YREyVH1yRXjW=(Ot!ZDn&B=<3_Sz&jnec@d$~kHgDvJM-`r6 zE)*`k{iH~xr#MPLe{_kl5bnSi;7Kz5(^1wUem1IF#Lty5w&vXM(#VxxL?&TTZuXa+ zD8fpdqDK3bXS8yW?yt=dfXB^6gUa7HWBGCv{+0_@#LFVdiH?+iS3S4mL%GE6FXmW0@??9TF?yj4Dk_}+t3hS8MCETz z6{(O%{oN#0CT55zks7TV|EQcr{dX-X#y^eRHx;=6krSN<{EwmPEE+Z|Ai1d%vd?${ z9?tmxUq$@7ump$z4Cu%NAX>5l!T3y|$Xb%MV(&(ZVd{?cP&U*5JEEKb8Xnea%?aw< zEq;O1N@oFP?9Oo@(h_%(xL-d9$Vf#v61MC{6zRXEksPj7V%fTQohjT5R4QidG$9k7 z2^MEowpSU%P=9R1bZ+@OC^ ziu5*aq#^rpbz!K><;?UVFnCx$k=d9w99SEUAHlwi@_@i@2Msa@1gmZ9t*!E4fP;~# zUpW}4{m3_H1s~aJ^bAy{MzR_`bF{NL!ch}|?15_&zJW&SCq(J1=Q9^E;uVUi=?nu@ zH1P+=@zpIu5MYQ)Aj^+&x|z~tO&k)s7WBPNt_2X}KuoqWb8I**j2`E>0(o?(qXIcU zb1@Hz&MY%`w2K=dr9XRWQ<2oa;4pK1jzQ4sT^L-^3k8vjC8*0496qhYn!(H^okN*1 zbQD%6)R(EuTq=<5i!}n^ly|vj1`0NTmE@=)E@Kq_oGV6ABV9HxYl>O6pShfqznY#4 zEee?;nl+a<#V#_iW}(#>rnB1LpvkV(Y32&ijthwpgurNyya@soD*%hnnHKRYzT$xb~-bf7L6dtPIdf%r+I2*iP4if6A`e>{6F(*?TgzAP*N&W0j{lS9SOs1dGh zVney5=8yq{xY&Bq3}ZQE;xJ7j2K6Zlvng{lSBGCTZaY1rm0DbynGRMp8!MnbtrR#j05&5~5+WR-V`urkSQOls|c(h(XAbh*kbV;&ypiUSjEGX3iW< zMtjTPQdZe20+!uHQ)`g%^Tuezv9g_AGYfgKaa3x$+hDz1Q5ab~yBPMQnHrO<9YHKa zZxw=A{k#Ods8wI&x@Sa@D{QtoP)G5YWxTc4i%)S!8!9A}E!vhqiw_WJ2^Rui(c{HF z%OYLl*%%bIttt##c5YcL%V4~s93!-ccxJCTX_*?cuTz}(E^Zd1V_g0`ddrzp12u%) zm0>=R`UZnKGuzWbWT>=(OLp-C?=4OSL_ z8_CS|%##yo*2`>H3`Fz)JzO`V@MLVk99auJ25c1Oxb) zjzxz@MWqOO<_6}Wky?6^ZDwU>Y?XrppkSpanYrO8v(z(2k)m<-LuhUqj4dtl-ufy4m0Xs z24sv6uu*xf!#37y#1x8iZsTmhvH*aqV8yNSkZ$Wd^286RiMJYS;G(1ibHcHR$iQTs zWof%Jyb#2ByP`ah=WPg0jSw#L8L0l}Hj+i31yZ!9*-i(`{m#a)*KaPh2AyS%>k$yy zEJBF4ZzQLcfml-57siylLs=55$?}fQ_9=V%{QJ)u$Mno5CU3=~&64hn?@oaUt}69r zr@R{9+1UnZGaI&Hx7vqV-Q~1h9@t$XXQ=|L7VvtC8qe2WMe>Q#bKV1XOaiK!L@f<|CagMPyJ(*lq!~3i7qu#9E41 zmui5PBSWKVP}&XGN(56Ev07MOlCjtUx3;Ma0V2M}u1AN(8d+j8-;W8?= zN(FaJafzyLz*eVKJ?v2plt(5LmmvjBwdPyAA-%LA0Z62Q|E0QYwnk(pKU~kj_u6q4 zwVKQ$&VbJW4+WWHJ%LzDnnkRq4^h8&~Rcb zHsBgdjKFz-sX=Hf4{~efLC&BMheA)QjfK&)Pi{2UgUzwr+g+ksVIHE$fCwvi#_!BS z&D_wpLq(`0aLb?2Jzx&oJ8z-mVpJO~904*2kxlo~f<1-VY2>wkgBoMFf# zObV!gs98CjLHI(&X**LpF!`1bi;qYgd(xhg7S?$^9KmD1Y9IY35a;RPyG2r(Vk!~6?T@VFD`-e8E-Pjv1u z7Q@4(zcBo;lj;y+HLY+f*OQz*1vWMii*yeGVwFgLvNIxg0UHb!%5(TB&Ltifn9ae^ zn9_wr`BY~goB-5M2ffWcgeB!Ed0J50p<>@@t#!_?B$KB*ZH!FpI5Fi&0P9P!z%!Ic zvgTuUDaU%I8THD*s(1wbtUzXf!6}CG@aB(GpREu}+$$P3KPM(G&5hszNAm@UJLA&l zhJ2}rNa;{aXG98K-U?XaBT~n9G_G?-p$w^UBLN=(X@OYuc_WHNKUvQfHKdn{s&xjV z&u{pAdj?7mp78#@o0m_9O}Ro zuNCz272fQI^ioOs3Q6@SXFHE#5<=RVFY^nrkdLPx(-5BCZsAlG)CUPkQ z_9}1ULHJ-tC|WTMn?ly>)!r0J1JJB&CSMbtwt|vMwz3q9UmNxjgjm_hl4D04(;=!h z^12AE7_`_v8Zo&GX~pZkr3=yuJ>eA)MmG!I5RNA*k^084_|4RN^u)d?JW;UakvcJ( z6{G;l;LtrZ;!vdISNgf0h|%Mh6P-s}!L{L)TbK&`XH z^llS*y+X$c#Y2tT&KeV>?p7HBW_)BrtE1}?1&LG}r3OUAjRkxF@(L80;Mjws&S@QL zoqIOO^k{1HNK+gSUybC%$&)AfFHdKWO-({U9sB1_pKtD&nqm)He@}d-o+6XDHmTO; zEZF|1ZiI#LL7MV;OY{40l51@$h^NHS+*TmC^5T6G~a`2Mh6zvQztU@iysr(cT9^(V~X83 z&9&ZYHX7QUAd1i|qB%Eq+q_Vz0t0>A&`o`yCh2B2Tpn7mB(zhlYB@%0uJrort>LiK zEkZ9WM`%$#8@LV2puJV~w&^?sKV<|!Y@EZLZo79lBQux%5SE;PbdqC-?RM)aPCNik z)+_gL+z^&91Q_RJ27Kf3Dl4&F1jmnx&~Sjy8Z6UPSPm5xHiB=09hP8a3_99@i*BxTf%D6q$XIPtT~36f`+M_HsvyU$N_x8eMQK zN^1jJn6?$EuNuD4QViTG+wUwvp-3zs6yjHI2(LNJY|WMW4(nZ4aZBZEb_}meMLAAX zP##g1W;%t+`1M9aOobC%j2@+ju%e}fR;Isjd?=JYFSn?d>xF`Q1cd5-$L<7beJGXwd#XV}bbC|1FlgFsAYMX2#Ph%{9;5|2*mlTwPYdU#Djf{%>^FjF3is_%*`$CUYuKK9%%KE@R%3Q!I@ur#45lb z8*?%bAkC6%k<7y>*$n=+vt}gH)_&io45SUvJj{xGrzXG&}`Bv@cbH|htcsJ4*wfZ&IO3d3^mg)4Ng>U z0Q25+wu7Al0schtZ%0{9|J^8pS+rZo&ELnIsvmT{f2cbo_@mdCqe-S0ZlOh26-4Y$ zMsZY)=d$g@7{lRNB;KJ2l>Qgs;S2))9HaSy2Hfw^wmdMVvM@_6!xJ9~m?u2hbI({E zMcUlRzz0C8ZJqEND2tiDj3^v{tpA+Cb_yz6yS z({6ku>!3my>~Hn?+0uom21IhGj+qZOX8?6_vHvql7yGXfxmYri|69hzGNF;=tiNDX zr~A3UYu<1){6nP?r_TY4Tfyh}jw7>=!*XLFNJM_k0;VHrwt~`VJu6+p#Mha-%mV4o zH6|Sx3Na_&1Trm27RfiGu&`qSBd7=(GA9(MpbDz_kMJCH83z6be8ARdQrd&}l9Jo<`R2=+V{iKD>q zfG1(W^AhUHF6Ib`pVop=LuxP!%Mv;6F|*KsfKivjtN><$HLpQoB6}2afLrxJw9_^o zf_=!M*<(gzr(unyE<4TI!fLhC7xhjt6&R{ezyzW^flN!DHP~q#i*2*huy%CYf*G4= zwPVe(3(Z3dbMw3B=jRq@=NA^|MX8o1H1sTb6qq;uAw$2*wKK|!g8gwU@@8#2;l!-S zB5z;`w`4EG>~S9NA~-4wVdPy3@del&;Vx;+1sX2hf}`>VbYO2bQZ8mE7()q% zFZ_Igp)O?*DTWeDP{n#*XD=OIiq2aT4Dk?%BAapZ}xItxiNDnU}CEw(CP>#z+79-r*beMfNQ}7(&EMgJ^%u34~5@Aw#{CC zL;(ggA}m*0Y;5;ihZowlh80&ZnwC`%D9)T<0!XstStOXy%(@QS7SM=Ny&p7^tzG+j z>*=m^skb>8q`R8w@>*vDeo#a74QLR;{_=f$Pusocl)do(zO_zwb8Fw~@Zi3!Q%~7< z%Hpn#wawK|cc6WbQMGS3oQpiy#86}I)cMoq_U@h&kp{V{D{{lbAvf8#$dCR26%$@C zqg)3R+wKo__)2cMuJ&6S`^%4dWups?OKdd-?hX4#$`5=M!{_mVJL}N@2~b<;^ByiXTuKi^trC4l0HRz440xa8h8W0>s|@F|tzhFZ_l0!SxO> zg=bsjpA#Y1bWT4(3HeZ%ed_GR$o~fp>lg3MXqSgR-wg|g$*>Eypo~zzRuylx=-(sy z!>YHPP|c?aJMwC5%%45k)MhL!Ngyb&9FGNLRq|L`mZFpB3MveV29N{PL7ukP6T(*C zCw?4%+lj!DdmwkV+XT+dUfVdRmVHwgOJFh?p&xTZV$)sC#UE%7;SOFVG6UM-!LWH? zpna|-!`WAP#qn~gcV>g~Pp)Erl5Vx&0Go6GRDjuW?F*fqG_qTZ{AO!8Tfh`-i15nH zA|Z#T8p$a(ZVHD5h~`p1Z5`a`!ACdg_ck|}Qz->=r*X-omn;Ql1#r{R;MCj^t!XLh zW{k6D{nQ<5!O5mepaPl}7ZTrWBiS1#J_!u8eb^GGb(EqIrske7&`ehbcx1+*4(8)6 zc80S689Q6^rcPisYo+gHoXCR}nr@oO6d$a%m*_+PEOyV*UB;O;w!lTHM9ih~@}7%; z)y0@+t+m-*-jCZ(ODpocu}1Eqi(pmI--X=ClCGt2&**R_W?$)K5i_iiCE3$R7Q(<8yfgjqVuew3 zf}LWtgV>6=p04+JvR8`uy~gFNJ_uf8R*2Q78h2kip!M1*9A(5+Uz@^FOooRlm`&}g zjv&ZAV@@-U(Xgpf?l93vD#X0&7)!G@7l#N^hT(t#=pBX%uWp?R z5q7;?9UQ<0%I@l5b7?T_3~3{!MqZR=l(B`U=Z2w&I_Y7P_*ir_ZDU-H2#v3w%Po!* zndbI#e{+3F<5nTr+`!mNXe)z&MpuYxfTH*S5BaTPIO!QTjv7T?!xu#zbRh&I zE^nNcN1LB#0f(;*8g1Ur$ju@I!zu;5P^umYQ5wo=OnCxzTP7(^86`hg$8T zJk!{!?VimQO!-;4Q7y7<;EfuiCKXt6zoxid^x08n43CWK4ti@PqzO1_HN;kT7$|St zI5(MLY|7GdO}`3R@SEg@4Gb0wa?8WHX(XJg5$nxzb8tovgTv1-!|0(rY3D?054gb1 zN=1#EH%r>mWTysM{F;D3uqP_lZWu`g<#f||x!uxPt{%Sh=qf(%RQ+TRo zNZ-y}WfW@?<;+et@VUmmF3IOANmn-f?Tu}#+3?}iCz|g73Z6}7@8DP_WN6Ue;K#fR zf%x@18cG2|!-e=kQ>|Dxkd)yu3tSqQI zn$uuW)mj<`uN~Rxu5ADmrqo#e^}`3`fFSqkFS2Pi9nmuXPpY1PkxlJd7y4HWD{X>7 zaiZNI-GeR>T-R1k+<;$C0BM#yA>$YFWS_wao2$6wVLh7*-xii3?Ercqal>cYYXXjr ziQSc)aS4|DPxbCfhRp=Y?5bgUvhPyZ{WFe4w717G_Zu5qvoWdRxYcd5IIGm)uyU_; z<12$_g}_oHA28g5GO`tFl>%_knS7IJRRK^i+Uj&gb+;6(HKz<@lK}$N1RR@~cnn<8 zvdFq|8XM!ahMrqjqVNP;>A}-or0IrhZkB|KbFL^xy>PAA!pNsHBVpG@c-e`NlfiFs zUV*LgNH37o+kyqlMLzSq@_7dgu>%cSzfu5$PKv#7EZ8Nf7v?LZ3gE9amJsJl#e17| z#(Reh6HRDk6~!#5&CNpu~&cM^Z3O0D8fJ>g>fDbW67{coOc;D=az)I z(+ng=C z_adhOQH#^@vqd{|p5SRacKo0bFPAu6^iBM#>fJWF6RTCr@7-{0$&>z)ff8&8BsM^z zC59pjuiX~mBG<+25$XPK;tyKTF@*$Yp}E(4e=-#w?_bX<-Bd!t!;zZf@<{)J`;vy|-XIe)|GPG5TeAVEktLId6Wk9Rx$DTvcj z&3FqD3Xk+NUHn)8dR}8eJbl23eClr-NvE1m#dwg%aJ8D92O6hG(=^ZkMHn3*&ys8r zqjOcw%UYyvqsjSwBWcCDTNO`eEZ%^|&!x^gW4>H;uG$FcC6Vnyzz8`l^S73!DRAsud z&jKYfZKq=tMw-jVS?oqmu#e36g9BC&0u_q_`ZAOm*yVUolZQ(PheuBLDd3a<2K<_R z2pV?#s=b>}-bcA?4+N(OO}%t)ZfZ(-&c2jy_mqFf)gK$l;ra}St`c?b!Fs4sGYQC@ zz(yDsAl;H;5#uuBlP#8#lu66+*|yT{pBu^DE1MdMbZiSFLVoD?OJ*Nt=1*w2mU=z5 zarDnz!y{rF_9PDZaF^GR!Bd&BQ4v_&^ax|=nN&!Qt;vjnr~(9JKptrnLUkZn$+*UgcFRb+sLy|*u_?%JX%QtJ6MI}em?F!> zDz5%mI;MCD0uksIFrO@dhUMQekF|pj_$9E>w!_Fg4G z5EQgUIMy>=VS#qd36+^bCJl#qmQmIhD2W^hd8&wp{^>T5INGxfiz`M`6uj7g&oR&= zGf91Y-Qn=aM%I#p+QaNifd9`mI&b|(w}}cOQT1>VoeX;+?awp%$OY}K4c1{L9|n;a z=Ram2i2;>&z(RPLJpvrUdw#@x;zvw4R!6|nRqz@91uDCiFO6FIYsDn1W9} zwK+fMJFWKwoI)=$%#|MLw}<_d^;7(v&$|d`#HKP1{$iIfr6W>qF)TIuON_m|I_h+p z+h7QpB6<2!5MCOD0GqQQwjXx*p$nxTyv*nq(P`iij^N23{93_MP+lGmh|(2M8Fp}1 zso`G{T!@hBSY8gVbU7`lM-o7D9UP4~r=S!iuWBTVR5jMMu@<&cw7fPr-4C~h1AYZ%snK6&M2^HM$)KVvVde~t z)a#9|AAQ^=GzY`ngNxUf_lw500_bO8-e4SYY=9}Ly4m<|43E$Cr#ze9yUiZi`jRMC?Nkw)zj$6m~_)&t)ck4TmqFq zP@p+MIFMyYv`7$c%T$4Gi^-640J)H$QP}Eh;-6KoXq3XC6IGk+G}SywK?!H_xk+yWXaffIpM|{+DZE0(oj<79n0>OeOJZS2+fl39*6+8FMoGUSoqUeOD$HphgrsU4Z1l zE4Cc19gqN<>tGz;`H%1O8FNTwwpguQK#xfA8Jhg>9Z2B&jYvq8{s!stW*_lR-C=~WSGgHKzt%TTa-(3^GZhtwBgM2r;(GhA2C8AMhgtf#oAolHM6MdZLf%Loq!QTz;Nr$*;S zYxy9Y$=_-s=UZ~uLAwcQ75r7W>f7_BE zZA91?;62wZ_**N$>?htL_%E(+X;J4qtTT5GE`XevXR(A}#3` zaS?VBVIyIS*U*mujzED|K@?%pk2}CL9;sDgcA~v+5wZu?IHTHT9s|#on{<3RH(SsMt7XP42 zan=NO00S)1D#o0B7N`kK#){UM!G5d|WuJwI&$QQ$V;ae=%gN8N5iz?z5e!-~`xRF> zoiUn1J?i`blp;bshByxVRoAj}HZVItwapfUca(zgH5UXKsAiyw(tuJUjhg+sad;uw z83zQo!fu(J=3j&o28VHswfuggrq~Jj|IOI+JU0@<(Y_Tb7vzq>X;j}p`(=X9e@~|U z+hKh~p5Y&g8J&R}OqS4G&k5Y@+%D52$K-aSfjIgmHxc=r(bWBRT(s)_xYCg>ZLX}q z5@oHy*>_!wyU1P*n2;_hm9sAj$+SdVBs$aXF?W;f5}zUey27*L8p-X7T6fN|oOB*s zTr>!w#7Al65?ePr*VK{`;<;167{ut!`&y6E5Y0ZFA+p{J=PE-8RCU8%05&rqPS$ zNNk8IPKQT;q@uT^Enq!j@ zKK@bs0Q-@n6M6&WoqphFIckgW{0TIG-vRT=vJy(rm*WVuW30?MV^{(|9)KheXb1Yp z5z@M!kH`~TtdaDp=X`MJYTAc;iiW-3TD`vD7p~aN0S?6+FtjLVAk~s{5pQr!E4X*! zVGGgFf&iK!H9%ERUptO(B)2c(4>W8c;KwUWeS28QO#RZefUb?A-4edzc#a-Sp8WkK z@X!@hhGI*SynD%*(|D4ms$s@qo#DgM;e?IrseovXYQsq?I09$N{bJycSP{DrY2X|y zkmlY@^K0Y0?GP1mPvO6*M1EsjK@y@xEE1B>E+hpoo0@I5mB{8aS76e9I3&Tp>p}4< z@Ex?!x?|-7k-MAy9h9S04OC8-65~W&5e_^2?It17Ets9hrFd6LJ0vdR2LL+z2iI8f zfrA*z^$y%{dg?zKi!Qd{_M)zEMUmifD1%V4P;tUF5;=}yv>1yEj~m30VG2TfJ&gg zcAQW!Z&PrEylt_$C+wwRW0z*<__TtCj{#mD$^6#|9HT;c8*D4OmTI?XWLecx&?Mtr z00f&^I8pu<+=8Hhz%n52Kl%Tf`wGCuj^l5sJqJs{avN%Lm-e0|!`-EA+J-qzlN8hT zD$CEd?qtak_f63R~2@0o1}i~UtaD)8sj4O{u?e-&{+w4~tJQXCNb zyZ#RhW@MnFozjA>YfuK6DQz^hG$trd9rnOt!l4cc7}v0+`5Ttg8-8 z#-DOjv^ub_QDM*%eyVtYQ*;zsq(g(U4@feJxEUO5k81QH;mK5k9a*n!_>Ed(N%0xC z1lSGG?$Bd)L=^-RujDb|Ji zU>5xbLhQ>#FTr(e$8u9VT?eSyYL{7>H5fUj$r;$R^YKz(~EQX^NDwk>5 z>xA);5~N9g=!6K%$iiw7J3=Q^Sa>AsG*vD}nF1&9hZhdZWcyQXdf-~}cUzzc$(6H0 zLUHexOq!E|!sj)Lg?q7RYg81_R5G+YxP(1Tc7U}8moYXdQi^;RVj%qIu_}S`_PXI{ z7-)P<@&|(kidt~}>>7Xa-yn~uw1zqOi=Hw%pua{16R0Pn&jA6fF{>v}ROU0F1eijp zYgWQ>LnDc=A6P(r+j4}AhUHF>_-Jq=PthkEjQ&sQAo0e<-4Jn`zGzm#5lbEnvy})6 ziie3s-Jy}wP9KtF4NYHg6B>NpX|l-#iV(0>zk#C1e#ya2ZCf0Q{_{{&aycU;1euB1 zFB1|bw>T`L*k^Gd6l3Uj(iXy2&ub+~a5Gz_xXLsIWq}C<$(1HBSt_17mVGvjknX#= zrXm^l5Xt8q4i9dgr$P)83l457j8cK%fImsL>nK|UY7GvY5Rqs^FXq>e_T-^x@W+(! zFfAGBHCFJOk)1zxI%L-F%uQ`)CvSNp>)N4X12{_ z(qM6y_R$FHSS%IXVnW;fFj*Hl>SN}b8oA3_aD2{^fN9{(1f8Wc@Ps@eMn6~TYbC3F zosewKLxM$L2PU-=k}Wo^vDp%hS&+#56&duRkUS>W6Et}z7G7_q@Ve+2T^Btx$Xga3 zWXfDkdXNxqY#Y>qTNx$Y=zo{lEIP6B+G+rx(rIZS@Q%6Gmu~tA@*tS>%5ZugtPC6b zaAgR=s0B@res?C%n#73&a%jx&rZ`CYGk?(_XKfZljr5{@g&eRFsP(<{N_H;C_{+hh zFJIxCD!AgDWR!Jt1B^G8(UKQ5B>{S6|6i?H5z=~CvnpNAz3ymivw4~XGMaIkZ5Be> zw=qCwV#=$nSuLa3XN#SqOP1v+V`XJ|>E#yC##*r5mNbq+2LX(Q4Mz(xE)ZkUBr)R? z?5Nv1hmUbP)@sPEk;X+?Wuc34pkX8ta8k8vWrADV`~hw5cG_Xt9xK6Zj0PQ1ij!2I zSz|u<^k!CgFw+O$*6M>JmHIk1?KdtD}rnd`lvDs^O(%<$*jDz$TyEFkknwA9)(xgh$X$^AsQ@&t6hFObeIic=g?98Y(4(L&Ze$k>j{QU?sU_C2MO(}*MakaGXeEEJr^fz zr-`V*9D%$_b7UN=OpaimO%(F=7Z%qQkMVXzzvY|82cb7znz{fsl^_IiM4mAi0du`Fds|0sA z2K)<7)`GiQa_nryCoOv&7TmExYH&9LIC*I=z-fAE^mi|Em@ju38*wE52GFCWr}!;H zc#j0aSl&tOh->zyqU4mJNC}fr+$kI9=2gUr<)nQKl0HVtWfR(7#U|Q0<*WrW6mzL} z%&}F(Jw+}hYTe&u~1lV{|7ZTM-oGruA zVB8*!2Vv!D1ukYc+ZNNt$HD%EhGphO5wu?qA{=xU@YNpU>Z`(;MZiCp1UN+8uVxU& z9a3v)f$$yskpju&i$1?(EOuBFmF!i)0p!41#_C2Li>%|_7)4{E>ymQEv|{w2L3a^U zXGbu|y5_>@7*`Ph2I+CRP9DK7qcRy#sCW1RTCknfJvhqFOLCE}Mux8PMHhoppZXdaD?Gsn~5~ z#BK@DEIjOwdy6ara>6lA6{rPyq4AUx;B~`v$Ad>&d8xDPKIA=yM~@*>X^cDE4P(0` zh8u3QLv~!o9r)fbQsPL1(RkFh0;Y z1{;r?Lk^b4y*8EAidqhL8Xjca2Azi~=&Y{sqp40){a_iEg|vbwY9i~a&w5A65(I*+?;mfkb+c8%%$SzV@igI z_&pEiA6+Gw-l8|)dzCiFIH@Zwg!Ew#!J^-7vd0*U@DyxvZkhbpi!4ECVs^^} z_s6QSbLudXGdQ6jA64Pi`hFxypq`yQIy~ZaS@u|?QXm&^fw=_nmF7}wa8O`C`)pQG zF8{cRFWppKjpjUSF*ika^>Nnl#R@BkLdO}hUwD;T+dbascBW2HB%-b5WmGH5*un|V z6O1-wRy?$BS_(tHjC4YS%#C)a+=>PpdGabACnQg@F16Y0DDie_(3mXyt=8?IT%we+v(K`wtvK{Gp0;p;`)p(9P%(Iv;~vu`uc9*33I218gXnhn!Jf`& zrL__A0!k-D&ovqdWgzNB^-iHJzZp*qRh!<6dgDv2VDS<#(K5za)L+R9CQ!%Haw# z`qK13PgX6k5V} zCb>J&QN29f5l5q{Jms%2j=S1OkFO`$Cv?9u-F={2mAiDmDqZ7~6qa&$ueRpXnNBju zL2EP`bQZ={wC6SH&dIO%i|h3^?t9CEq;9-F%gc6Tzf-t zMAf+VMx(4%QCKbq(T1GUq`WC_QV4uSUcI>xj%sXrOCFn|tqCVKy)`|3$Y-J3+KbT5 z-B`UX-6g3AD$c~)3u37@7w^cM3wG|2GUZNl@y3+ak;KAYn_c=sf2ipp@;Dbiu z$?NXohYa9e^KlYKoH+QYV7}ot4k<xG^Fg3aBIEsM(0r%wRksIWpxPPp4!CKasABA|nYf z$(=}%fMWK&QaE%@g|@kwi~ z)m~xed~lF|h@8`6*rpM%jTEvOd_cmUv!9iJh~u9Z&0FM=A?P6kKp$pe#wcR?p?p$& zO8~x*Yf5Q61d86pcvKV4ew+3W#*$*fzgR?62xZcY3(3QnNDC5*4If#se~H$bUs=A! z!emii-IR;5aK_kGmxX zXu%2m*U}Rwf{@N?YniXToDh87T0PCyUIKx#+I7P4ja(9jdvHr5bGS|jzL~!DB}j-? zk)`2tg{TGJnxL~~LCLqhIot32ANk7f<_5!&&6ZZv>ZQnL!n7o8W^s?169_BA@Kgx# zy$SivTi0vtN=u+tZxrANq0f#S-#1EwzskT5-g_!Ov?on~k}x&6&BTtT#D=+}96`gcyA? z+QS_4l91aL_f|A5EHVy$XxL%{Fk<`OurE@1P6&QvWXMefv>h@+-;5!8W-yEIgyqME zsYzf77sks0OZ>Yd`H4{pl0Y)ze%*U`uUq;&~4#l*ve__Z0J~R3+P1C z?~Rp%iLIjf`a{mV#E0}MaO{scNCqLVxRLR_6Qll=!zk8M!d)f*Y?Pmy^T5DYw=sV) zw$BI+LNhK?4*U`BpXa)QzZ&b4a$QVrL_x>jvO9jTn9h=?Aw9v7{ zv}RwFVP5JB3%$b=ne zFq#IXO;;h(4l;JJM`3H#0nEX5{YXQ1w3|T*6qg;5S7>0@GPH~_%C!;F^tBB#iCMeG zy-vJwl;#37)xVA*2xKL7LEsjIKE%l7q((5rH+X3Jx<)0rpwF};h2WX+Id)r1r0MG! zipApw!a|k;OsGG>+7Ss!ibSHNcnVF^Wryo32h$TzFxb`F^3lM z4R-)Gg4sq|Dh)2FHhoxDiXwuCEJ_Y-f+ISzUfW(^M0{+P<@W@KcKs~>p-D~QT|-D1d79}PR9dnj z45&@tut;oD$WLMg=p~rEvB58U;8kcyHz~FPC={FA)Cj#u=F5j(H%ni#Q2?0LpP80y z(>M1RK@hy7AVI3$Xa%B$czm?MmqbWf2+A?GnM$tva$%A2HD1sZYgBZsA!nL118<1m z^s3*=8XUpY1%}@JQH~MYi8H}`Y77LSu1z0r zXu13>^IxZu$l+Dke-XqJj2Z)i7{w4I9UACD0Tu9D1F9@#vjquW4my==y zQxMpM+7-8>TG~kprJ-8s_%XO_6AIJ6AMZ^DZ?HeRQ85f9L+Z7oHXpxP{PJY}*p|)W z*6x#=LB=xkw0iA96D(?OwcBAg><73wmlCl9X!so3yRz=CCpBi#<8`|%7J!ATO>Z^w zF6QT%DxN0jE~Vvxx$$C*EIuSw0zB6p8u+xi2W|r&4A;VTSrTF#jXV;f4e$~qNEu@9 z;Am~SX=JOSQz}s)f@kT$86$3q9;D+e8r8GKsJY6-=TYvZ^}a%O0LGA$xd6z4m~8 zU=R86#|(pry`WwVB&Pg2~@$O$?`=N1{zm&2a8 zQPiCP%#xnL6(S}Gh*1Q%Z3jJwmU)jOCvwg-PQ*wxO5)lx=wL657ZW+5I?F7?(aDO| zmuyQ|<6co`Wwl_q)`oVf?Y)ks&#u?BTNe!aqd|qe_0FK*Tb1osBnJu&4G(2Wq;RCx zM=-(du(i=Yp0o((v+pj5@RgOaoYMuq$c zcckZ~gaJZN)L!x>;KxSm{A@iG@M+PA8;eIB(QeNP)dkto=)@>ai1?T7U0j$VtumnC ztffzo&AwxnH#Z}oi;U<)>a1K*o6p}VJqXfAaj`LG9;SrD{&>&^#}&9V=1a1Jng}#K zd#RDiXBSo&@a}9Z5GVqq!?>{bMrVahjM0e#vbu)yF3Cf=CIxpDTU5*a{&F`Amd9us z&ww1n5YYG%NW@?4Z}_lG=W9#YyBUm?Gsd-thMg6y!5>zL)~senBG%IRX=A|fKv>4| z_3jf2*WjG@MYzUQG9z3=jZ|&=9w~Du6q+&(X9}q(U|IQ-1oyHO1J2>bY3JB3Ni>Cg zFLG#^5@7u!zwIUElhWU2Ed%Vn>YnCCxQKwPq(b*`8{4SEeLstbN)e7pv(hF--|BIN zI};I!_4AT9*3a`l;xqtjFKPX}WS=#$6mGO|l?e(!Ygybq-WGtXkrJd!0E+~nS7vGuugwxFM<>ryG(0XcToUU4$6`t z@p=dr!6H|kJECP{M2YH$lsJkQ!(T+#N~Iu)AYk#SU0KLzii_}x5Q)(84w|ho)h>fm ziv2*wjv%JRGt5={kEyu0`$~cBo={AMEW{*YDsjwXW3?M#t=4IEJ6B+9Zzk9-ZfsOb);i)5>zg9u^6m@?GA_E5UmIY&9}3<`2JHcM&VpCl*&-g^-c(1U59`2u|Azma*8jvtd~YyGS7U zq6ZVqHVAE)24M?V?fAm9Mbw)8$<%ejpAkdewvhCi=7UTaw7Wv;BOR@l z_lPvq9D!g6H|tkS$bcb1y)i)p7EDx|)sVOtZPI85P-_0P?5rTdy5*!5NpH zvh|z`&m;#y9MZumJHUN7Z^;KehBGsAAl1KOtFzk5*KVaK`zNYqpMtl;XnGIULa6Cwq?(3|g ze(jzn`oUr$kwg$Ij<7!TB25nwg<5tbJYVCBV-K~?3UMr0WFd(MrGA*F9422iIJyz^-T6C15!P(*E5P^{wWRFW11aHFj_zZ%E0TR)@5!+VxLJ*GW zvXr=udqckl?uqF}VPhEd*G9-Vd7Sm zSfzVm+*6H(5jWd}fZd!$HFBOXJCS<$FH99K&pK0|D8=YRe zJ6`lPE6=jVw;MfQiur7-rT~6`Tj^F;TYTN^K_#DKbv=Yg?gM(!m*?6iWv$QZlRT-) z^Td9DZq2-To9El-WEg3@FBN%#*t3yzs5xg(ta_nHf9#oU)2b|>MXLwUFs}5%o_uZk zML8K3dgjF_yV!-Ilnv~0@#{-y5PV;Q(ljhTP7vuuKl2xT^d%Wt7kV=ObPk}G8b(j$ z_8|JKJRl6nd~Zq&CF>0zmODFI*862hMyTmd<~-zh*{WV7YNA{Q%S}{D71 zn7Ac{#ER*cPbf)*D!=jMl0^MM9~q)Xu*06*-j67Ig+3|xNDwbrhzAF-4dinLJ4$7U zUa4n@2sS(G4Oql>dR2h_DqRyK^q{o|du(1XyjnL%5e8(MBdbx7h}Y;^7@^RXBo%SI zHaQJy+))8KeKh5jW&~cR=k-9aHd$t>mMj32q(ZWoH9Zq9g<(smKT&XiiCB`w)c^Gp zQvdVnwcF$zoE9VRj@zifXN3nSXxoMzE3w~t2r2O!bS35w6JN<@?}x8zFeN@u5LHTv z->8Q$VjwLvq1!v`FxT$^$(uyWL!DZQ1m^)-y~WmmCG9+5d$TCb%fSY;i?dBnY%LHw=Wfy zNI$JdCJorj>5o_iM1CM>S&ZuWg2+-)%15*DEU@j7n2!`zI^p?P4jy0hd^{UZyOnfC zPV{`jYEh&4Y42idDG!YMWDY@WPsszGPi04vDCS)2k9!uopD1fFO_dXcpUuXz=t~ekmxIURcb(|@d^VntE$lta&lhs=_>%W8 z=HRhJL{5DBQVt#z=XsI0FK6Rf@+EIy$-%>RG(5<`S99?Aau{FB#-RacwYS&r?e*nA{*X-+uMG7d>VM3^<10A-Q?>)K zXMLSa`k(d6M$;ng>Fn;T;nu;H2b)BZD!@$trCvLj$~xE?(bfijEnjtXD$r802T%=X zA6tj?1bz0e*tm=eVMOT_HKdWRd-a!5^qi|2;kDtMZEHqFGN; z1x5O|KrU-xv=s9{tl4=Pjj0&<*6sO~(#)(|gFV(X4t>T-C20Z$wdsFODAjzyL=Q=I z`^$5?*zwNhJTHN1&NQ|+cHk$mdwv)Z_b*YgB^gAYq8Xqss#Ccx+dRKOFr-vk`rmqa z2OCh(UTNXJ<<=fgIR0boRnhRN!^BdDCA~dR@n2)dl3}o%xU9ga|LKLLoKd?L7uuef zbhTb1Dd4Ye_yOO5tgx=&st5($rFl=_p@ZtNZ9aN{52WX)KFJNpHS6YJk`T~Mn0)iw z0~UCUTPZbwF(n*J(5AkR{lQ*bz}CfPD|5ge&~6glQc{Q$>N4iLyB_dO+2o-YvL%iO z@TlB7EWt%yYT*I;{x;}+UsHifEA{*?mw^5t*tN<6a1Y}@Fa^V~$er9g##b=y<#wnMuPMlELTI0I<0+2%yt)OUEwHva!3!0k?1((W%N{#F3 zYa|UmexSZWEDm!5eu%y%H-Qhs(FoZF-UQeQ!J+y}QbWMnw!4oVF)C{^F2t3C7Srbr z^>E$YYfyvsnmgblY;q!o%kD4k4XHlISx%1BBM3h5xZN)oYr3KwAut-eI0}uBU~s9{ zxV~OpyTQ*bNE5-^5s*F5Pe{-&*o#2iKvX?TJ}6fV%Vu48mVYZg7QNBuZzyCyexA1v zGj8)O1nEY?w@65qOUetuxv>Gqa-Vo1I5!cRDaQjid(fG1A?&qR*l7V|D^PY9@wX7r zn~K%71j^YZ8{U?Kbu;6FCkzlLY|Fv8x$w7gJbv3SbY|=V{?ioDm5d%4;NFq*}Ky&TG-Sw%iDg zHqRMVG(XW5spW{M0A`+dIk?2l#*Aqg~=G@Ho`B|B*y94RS)}+46 znZ!Gr)2TbM@9@3-N@Qz)*hZi?27)08aJicl6%LWa!3p@ZzNRMNywFz&Ap`FW9i_Hv zen>(`Hl@A7cF;(;_{$jw4#L=Rtc2~|p13rV2uc~3aKUu9gRN9gSY}fwVJ(zA;h0NA z!JHC?14obd^yplKCuB%7vX;y73PDA-HeTp0?T7TfnE!<8ozt@nU_y&n^PjYbk6rTB2SU704 z-Kav2S5-YFWoqIxbRMMa)D&7|uE^8GoR$bvxq=S;3EAmM6zl?7H2~r3Be2aayg5Tp zxzofm6#a$BkX6KRW>Qlm24pY0=-MwQq#~lTlA01B5-D<$u8LUB7Arl)Wiu>mGoHve zCuP#fe0f4~ZpxI5*U%*{g!zhGb46yImy81#vtmT7kBab^6_KIR!dS9#QI=b+9wr}q z7wW-3(iU-7x}2Gcu{u_)YX4#dLD23D+T$)icjv)MVp*7q2_*>KPTQBOyeJvT2&N&m zK^L=l;@zE+`XAxxdt2#ToYWnOWwkZJsx2~S6-D8ax>okBibAio8nPQ;JaO*Q^cm8d zYE>lZ&gmp^Ji%&YMJuAZOERpL(yQZ_xYs`7Kbeaf{*Rb>M;?5n#%}M^n zxX6D;uA(9n?~z@4HTVySgpQt+?a`UaW06EpDy3piEY-rH^sN3kudh!i&Q zW+_OqoL=@fX-nyd=m3j2wC+LKP>^a)7rW#FiFRry6;D@1u|Tp@t&bzI@F;XB^HM9= zB=i8K2U6TBjvwX6=FHRhdHKX*Yate~iinW7S8Kx~QuGydMIv=~J8a?b4@uLXs!Cquwvp%e}mLb$wP#?@cI^2UY zqO4DvCmx*m`up#`hqXr;fH z$@0Xsqxk~`&q(si3I`i$pd6)67xIH zhWFqLHd+b{hnXI|q)&T}zU50JM&1&Oik$&rid` zSHYgJyuik@et&l-q_hcE+n(^e(BkGe&xV>EufVVu>FWn|`pHQ7qU6OEcfqC16RTd5 zX32?Po^ZU>#w!xxK_9&8At@b)1{J2{WqKk(of2D&QvuVopcdVK&8#Nh-+IYg1X}lakk2C}9&qbMJ{; zuh%zFR9zI=T2F}HU{QK5U1VTJ!*(0{5?;*98!gJ{iDMYxp%`W3P3~JDZ;m!0`0h!7 zuBmMiZ_pb8M!gl35)TsUw?sFhA(kxhxwksTpoH^naML_~9fpXzab;@2%+JPrqfufA zZ`VaYCVbod#jqVL;9&h=ZwYAc(ANbL8rozm=WHz*9DQdp_AfDvcUkNiUniCT@@|XB zl5&&)@t*XYLOwHfsG3NCH7N*j&x5PL;Xo*i{h*AQ~ zhb$u@Z&U)rhiSQn-f^99v=r=G9%iPO6-Fp1Y~Qlw=|}YK4e|lz5|YJC7W-Uj5vlI$ zWgxXKBd2WCu-{ExT(4bLY#E8dkbbYT+GjR+7|0*D#%UPzL~HIO3yp6Y_)m00+eB9J zqtP`h@$iaGo#=qmB(z~G86LIdTpDM5|Wx! zK(S&WAmFs40R2szBF98*qC2ypTnDog4GXxMgo=BNCo2pic~sokr{Vf0SOBV%AF#1! z>XLfxlw#&+35Rz#g5~})3=%fKx;q;|Q!zROoeAXU>RP2b{}^h*);n#w_z<^0f3hf1pR;^V!)|;@UrU-ozzM9?_&kz+K%fk%XZ>Xh>WA98Fo{d^wKQUm)-rbX ztEo%twbM!q_kg$KF~l2ozt;G2y?|(o(Zn3N6u$v4Q)M~DrD!G}`b>J$l1E7uc!ZAz z_Z9s-fUb9=6%=1B@(n=xz&;<{SM_XxGPf<>Z!bA2`b`RNB6kZu9Hm%xooH!nY8opE zEWP$4rhP4QSh{or7Z0D<$JKxEmrQH)^&+Dzf((dK#VBJC_){!C5EcQ081RikQuBW^ zwr@_>h<{5g<1{1An@7l*=FS1^W4>RVa{hgS=ZONrZ~vcL@bBnZW<~RarPC*uY&h&@ z1skrGhTE`}wc>YnvEoAa$%<2BM6oiWnQVMltar6}M`A`!dVG}V&SJ(3SfNA73NeUr zv|+b92hte6XHz>KHO2?36nRSs+Ww1saqf>_i%9^#uh;8wzMBAp6U%`7LA`)&C8p7f zI~3wCIV1gr-?~^W=GA^USsU;pVgL1+3-)vdvg-geHC>ZZ&?MYB{6Gf`9N@ z?2RlZY?Xh@8DUFUPL4P+dhv^?yVPq}Os?4%DykRu?!+2!2kP`@cCMq@*Gv=tH@3}3 z2A6hC8o$sp>+EwZMNgS%bP5**MPxz_z!!2+^%-L3T?8Gal2gCblcF3MkhFw__k-nE z`o@%oC7@IQO9uJD^=mz8EpSCSPd`Y0qwiO!NCJMLm>)d9)w8(-idOD^5dB_XOK?P3vb7dk{PHM2X#ODVq9_IvXgVzxzxYA%M=Oc}za-WVia*)Z zw1c%^u(&`z(GQkC+vc8O2?qn-oXZcQzu44=A(EG0_`&m6n<-^@2H{eOlEXH#j=s3} zH=B`T$kb%NAHx1_vkL+jOC1j5E{J|G{zE@i&GpE@*li7mva5j~tpC){savt4KoXr4 z2L2}UU;2SEJJQ|=2O|98{I`DA$%>O5(DaA$KlvyZTj44%U-mPd|J9dWHY#yTmq*k5 zzkGz9<_=bJ=ZC_p3n1(*v9k+a5H_*wQ@dc=SjzL5e$XM(SIdQM=yvh@h5X<{FnbFn zV`;-jEk!-5e-r5obu-(Jvdu3}^g|>zg7S!5g(C8{h<;E`<=Z%DKI=j6%Rx4gLOvm9 zF0pO377j*xy;-^D{`tHevZL1iP#%ykK%>s8Pmx8E?ARR6j>o*~sUPt<$QHcwXn+?T z_(5}Ux^cU_OS_}w`Tb4YwbCOvhK|=}`yuVxbuC?}S{dM44A(;J`+8Ho>!gb$VMD(< z+A8*GV6K}vb>RkT4|%6VKkU3-dUy%~1-by&tKkwte{4M@-5X--F$`L5s*v%A@6dW} zIz`VFd{7MBA>4@_I4CR1dC+SCoj!4%Li7cS}gg^3* zOgGyRMxS}O=JgAZxY6RxEB!F_2K8EyC9&APLAOkn)C^Y9M#`sGykWhzwJ7dkx5ay^ z`yu;Asn(r$1Ms@&Xx=zAZ{s(&+Pq0>-bS9s@WZ~FTGL&qq4t^XYTnFB4a4FydDpyo zDm6Y=W=C0r7ow)q57w8kfbeIyj!xyA*Zf`cn0jqXQiF*m!ZWE&k>;_fF5h+fRyTTR5#mp9PRth^bYt?F7rA9VmEMySx5~$fy@PJ(Gf3K+uOPm26hZ!E zdd^WyTZ3IqWc}tS8rB>IL+CR{(X=jf1sb~9+v`?(b0!;|@07@FYE&`wo)Vd}2F;R_ zzEdLenT+(FpxBnK<4S^JF!Go!*q-i`lm)v#2eHGNgJJWh;0qRzZuRJvPO`2r?O20O zZ!z5PNAaz#`IrRm$>d{hlO8>)>|P05YyK#{Z84-2i< zmiAS%$eJoSH=iY4%`>bCH$_hs#GVswXQui(o^V@S=%Sm4zxh2YH7*hfzFq!sot^4e zIWBB!^ui6gpUs9sa03H`OX~{KLICdhD~3;yk_IuGo?D zSgLWptxnKy!t4TD@$2eBi0o7_PPI^WUn4FiNO zJ7;m0q7l$pirL0|bFMkxjQT}l@3_{)NYwLn%16<1yeICGp~FP{m=8_OT?I9$JiFG$ z*6{Lir`N}Oc+IQv!pYT*tsT^U4sfuZe+I0pHSebHz^QmTt9`YgeQP>r01rOBRC!Ly}KN)MK3-ZFymwYW`2y$yL<gv_sD!cZq^gAr*_JC$3UC7#qA(ul|)8+vY z0x7kcT%`wBqEL%cab1}QTv#Ei{Yz9_BXM(NMJzDAn;=e2tot1=xoUQ+b$D!|=;A=$ zqzcwkL>Bah_$#XiMiUe2v&%Tp9dPcTX}GACBZ3vb5B%k{Zngv$Bf<0?AtQa=XnFA0TGS zuWPctS$7i@mWo1=zf`ZKHb%v+{*YMc-4PQ$$+QZ_O^7H}t8~K=O$H03>79u<4}I8A z>OXi;7k;w=Ky#$0^RPzgVuc*_iomr`>>@})L@k{-H4MM}af22I~(gV&!;{6tuqd&u;RJ@!Tp&}xgfLid2? zfqEi5a)l6Y4`MA8JL`>E-Uk&Ng$QpV!vhA8>8sEiMZJ1fCtfqb5vR=&q>(m-?9c-y zZ;^LxtU(qKN6m7Z+&HP(M1pU}Y}6{{dSsIyY+tSNPt!cp7k4kj(t8N1N*Uyb=y`O> zOpYU1!u{7|SeRM%fbF4n^$^$wEYa-&&BN@*GC~uyHuzqi2V4)=E1wJo4m$E2AM-aJ z@I6A09h3N0QBRF^ofqkNq`o(sf-H!3;5^XxsCw;ImK04qcZ@zd1UAB9H}1wgpnbGn z7@J1vVxL7q9uPjJ7@gGF%_n;wt6zGbN+)k9=Shqnr`N}%A>HMVyN}N_YtYI#*W+O> zpO9&9ZViDP^QQrAlUJHhqHqdTacPqy?_v&X-@)7;dD`ixVI!w8eP$mQXRx#L^kWDu9bsz?+AAHZO$%C4 z8lfV}SLtWZfr?d~Sx}-|x+kW-+P?O*;B2q)atuOTkJ{*bW^a7+D-|LgiWY9 z3P~kn+}o=pEHWypQD1s;xl$As^CEuOfxLsb&SO8C+IM8d{Gf&Cq_*-r$#5_B9lkG9 z4E@f$C>%gNpm~>l70iQu+V&l{mcw8nN=H|u>fLFoPZ!=wbVQa1(%zG`W?JkZu41VK z518JYg^6F|>wzXAMOkl5eco42I4kM?4J>;oOm>VVNzCN5;ZLDBdmo&4z|HN@XL;TM z+oAg15sZQFx7YLGqjDDc8lFt&y#+mmbvu5(*8D)m&NiXqXy_9(F0ltoKdLYMrTM|) zD`^2M2Cc%%_?~g*L&Z2Ftb4>=#;8hiW~+2$^O0~bj4*QmX>?7YR{y?}TZt|pt*|@5 z9tK2C)o}q_%pQ=*sj$4K zN!%w3({Ii@i5;e;g4n6Mb~;lmzA#_*J~biPYt?IKmzBLNxtk)H__SV|%g9ekK+8qk zK4UXk^2{yah{f3n{%39Q<<5u)_@C3GF-0=s+*3soKCg$L3JR^GKt*E2(u6CZdqWEB2U)g&Z3BK; zPez!Zm(mc+{DP3IQeNmQ`a;sgf@2z3w|c_$RlOCA9arS}qRdrA3cps@dfO+k?hg0* zLiP0=X0G98%4n@zk*sg%TOJ9rhU?2S`0_M$-?W*=SeS!7t2pAQS}TeJoCNY)`UXIP zE?^2qeLs{5g<N@h%KHix7XEwCKlVP>%(2FAD6J_HvbFvRKfqM$z@ZgoZ{-AOvnqjCwj<=lg?!}%L88% zQ{Mb(hP*=zNGf6@-WGyU%KQFIPfn|&3zkqaEd{S4nxEU2nw$v?O%NRtsz_7JgIePk&W#)@?cp;jN&f>Mv=Dd%r=b7~&SrJV27Vl0ovyXX8?-^non;~Je&XT3Ap>yF`f`u=|c0}e|pb(Y7t zFb8LO+|m4AkECp9_?ZlM6o1e)6T6kHETz+rKtju=m@LCwP7QIr3iTa;bUV0e=9u3AJUCrYT`d_*hD4+qh=??eb$w_1R2zQA8Niu;!3|eTRwiic# z+(G}hUOUtfSokq_c>hbv7w(8g<|wEH_G&#Wqq&k`-IZYm2H7MY@uf5IGqCoD8O)@7 zp&LLLi)+JS%)tI6L#&cZd<;ylH_{8tXW-h@y?h?Vnaj$&)pj0|O}c2rNJ?!%=3&8( zM3R)UiGw^OC<9U(S#VMWl3;me5uaCATG5Y*3`HKI{dHTy5iPG5Pl4niKo&`@E{_lh z^}^9tU!)vpn|_cIuv@@=VL3>5M4X;D<>!r>gL9ImJOk~Es%zB?WP^PngVjmd_wa=Q zb@vA=$twzr#4Af&rA(q3@VvVi8DlLbT^#=@R=8jQ> zUXn&)I&-}$YvH-{^B33{nP5X8u5tY2v$7nHDm>J}mzhIszD++h9Vd}wTiwC|x!@-J zPHpB;A8vsba5INhRu2Z|aGQ9RO#{yyv2W7AGe}+}gAmI^+0sjpH?Qd>i8fQEB6-tP z>iShwDx;(aM&+tW7m|taB1@;>CTcS`$dYt$1J5W4;3dJI!b(LbZm72h;3_Y}pLW07 z9}p4`h;C$yP9!3Gs@aL48|TGye#p5=7CFmd-1Z|jdQRlrG;4l%Wa5XQo9S6cT@d&Z zRn!A}5r>=WDacfG!KkyO`+2qmbK>Pu`8fGXRCX-$AofS=CxL8qa-1RZ+Fm$&jBT$) zDjJ{2;aXGxT~R!b)e|o962((-+V+2d8_&gq$uUW#Ud(18K{k^HMdHQ?2`!sWn<0ae zdo^ScUI#-4s<5e@xZ~wCt!F~A7Xp^znY|LQu1LKGW@R7jTZ1K8_Khu{F}KOY20kc7 zCyoeKgv^z)ZS%IQ9ZglZ9%8%86P9hZu$ZtQKS+%aT3t_ww%dXQLd2_w6_ICgX=#=T z7PFbzVVjxK_Vy${2JY6j!IVyF+(xlcrOl+^jrvx=M%~sna8tf*_6Z7F!9Jzvl!I+L zdEeV6ECo*m#;=4U~cqo3@^&?R4A9 z+hitHGut9=CkoF<6GxfmtSpW~NwCLTn>o{uojklsPG{IO6N zil=25s>Pn?*z7vyQvy$oJ7L_s+I5E0!LFY>p~dsAeXt3{ixjeKJ}YoI&$dbv1r8(# z_=>~JT_hWLl?pGd)OVb#}Dm47a z@SSbSK5P#iItVD70$XCc@&jZL4NP9~GjjWF>+`>kwcq zOenzGUAWy?t2aW7v;%EQsY&S!Zq3@(+&0e|&>~!~&9rr~VAp}8@|T|!*v(Bxxp-(% zH<1y<0QUyt(wO!NGhp4BV*7!eBcJs2{N{{)O$4(kXdrgec)I@s;3QO@GD_= zO;lJrjT;#v^**;4aHl7adpNM-j zMbcaBM5nf#n6#!Bg4mF(54)WO_Zhxi?;K#k5U#dFt-TWo2-T0z=2M^Df7jym{7yKK zcQ~;aj-cIMb!Qf0=|)jJ-4LChaZ1M>+gNXyYnd9!xnMC|!)XwARO|KHtqT&yQPCYv z!x6mYTEAam;;<$yI&tBy3R1pNeBuy2hrOXZYw0A8dy8{3!p1tCbZNWHeHO3KTdHIU z4E1_)M|5Ak|8FKDY8m5>>B{0H?V1TIAi7_1Wusdy+HH55?q8gHgsMWwaaFw*6jbY7 zRZYkPN>J79^me=R?}5dQ#;)O-JDvyCYjZ`pH(c`(Q#`l?563;6o~D8%ClmFMdTq8K zZ9SYkUk_(m!*-|Rj_{$yCylP7cP8v%`n3~TrU?P;Qh(5{U^E_H+&ZnTw<}ooM-;bC zJSFGOz(*FJsA0bXNslTn>qELs#+{-^mtfvnw>7L_a352Gc~$T{wzy#*p(8iSf8E*l zxZ*+%o3!DM=<&sww?3>Oc~2y%D_ID@e>Dm0EmZY?J za7XZr)Jy}TBkFnTj^UZ9YcL%H3#3};cZ1tQ+_60?Rmlx(!>}8+tKoWfHt#%Ocuu`G zZx7cPH4%mY7c6&{I^m-HjXMLMt5RPG#knZ6UsVOC3~zTCEFg}cby2l)ycL|obA22t#q)oFk2mEurEh$|)5 zhG9Sj{^IXxZ}^-nH`96!yh>d9)WSu9DZfQ@;<7@Tg|6U8sj{-y${lbOHq7_J7@LV+FuYD`yM|%4GsK>-7X+`j zA{Y%q?BiBOAb4tfQxr(6*L*|nba5SuXPeDlB^}}o+f)u4tt%r@F>y=Em>RvYiW+6~ z7Qp`FzEGq1Ql#c=v)P=Dt~_IE^rozN!4%*{6R|2dQc8{9oUcX|F}%ep<*FK0MDSKC z0#%JFAP_vYy``zq+j6Iii!yE_60^-_Z}Muy*kIz8lrc4W`-Id8d+ol}sJpf-{SbW4 zdTS@?P;)yg<7qVJX0|uC%|&X&h6@lQ16SJ zc_-o>We{xW+DOFwL?n=GfPEDzwk-IxKqX>=iCU7yxc9CqqLFbkBq}6sn{kkdrglTz z<25U)v>NE{yQ4AJh^7}UH)=EQjxM36sy&RIzPR@w9`*$_g(sI_z6U)DqY(t?EZd@t znJ3`yMZ>}vc(1h@qW-Jx3;O$Dg<|NuMiUhfUfA+}2yqO12vggFqx1s$1Mo*CXyYJi z#X0>T7F-Do>eH2)cSiuj2SWl7eB_LVbjnIsPc>k>eSN zX+WunFBBg`#@mju$Q6- zv0{=5c?Y20n=3(TY6|HXN z$m4_c9)N$&XiKp&;_lA_=+BFciX1n;8r%cmFBlBL6<4?u*wZ|IQ7mcXsE4Dy-Eg=P zhP;=7hv9$8kVFV!+`_;E{4a|Ygrs1-6YlZFov#?MBfH{Z++P)X4}*d;*36d6;PM*o zdjB<{mjY^lYB-V<50JkuT1HFAyxN>`x*~Kkba=7I`5To|oa`uq1oh3d7*}RDqtKXz zyp@&>2S&cf$jC@FP2glC%b|X&%6efYy(tT<{kGio0-Xr!hNA$LU04^+1W{V@ni%}d zx1-Qlc}|KHO?;gR>zbekpRrv%v1vTyCTj|8=DZT%qD6xQzcLzO*az^3LM%>1*dYIo zVFvVT5f!Pw9-%OjfP99MFJb_{{ z9e*>SB9?3LSac>8EXN2F>X+ zsdAIeKK+=oyZdXK8X41A$po3+Ofx?*B1sIhjlZE-A=#AfJgq4m$W%z&vYD0&ko1#5 zYff`I?C)-o_>A`{oS3>zuC?p*cA;zu2VCVo?MY2+)XF_tM#66q-SEJKKTLu}U;IUa z#Y`lAENu1Uhb`|wDfjNRwD|9`MuDIghjSZj>})`l=GmZDo92jc6{RGDvFrC$!rF{9 zI2IjSbEh-xvS?PHz(1(b3{8{xV&6>-#pugS9wYRR#N@#;uBKwu6ew7VUwA-|h4x?E zi~Kc8RMTIGyyVQ!MY`Wm6a%{7h@a6mrvH>pVkL1uowVm3;e7+d~q*ZAF<#-EE# zi%ZT>HC=B*nQjppITj(ST_sitea|HyWEjFdt(BdPU_RK!_SR+_+h?$I8E?L@koqrT zhUj6bL{nhgerzR07x>Yuun+>o%wI(aLLh^M5T~kFTZ7%6fd35=EQy<)@c@()X#E#* zBPCz6d4Esi8RVIo5k#COn}^A*um#A3oX?FW$TH#fjvE3 zpGI+N*gdV=@8LYcbhx@Sy)+0qy+Nmi1_|Uk!=TOoD7SxUtoxC~{1b<*^B!g&7A4SQ zL1ihi{8u3)>{d%A`%Xyy4R4T333wA740T8KAFP^6p^EQ^bRzA)D3Hy?*I8ZT1+q>k z{#OJ=R76}FMJzS7nX5%6Se7qhPJ*!AAIR%+*t3w$S;SN~BzKy45PRFag*`c(1MyWy zs^O}uufAG-33RD%ov09ow_Kv9M@-eotP#ZoVqXPx4U~~%L zP8g%aFo+=-))2-32|e6xTd!@R+b4-mMkJJXKTbaWlnlj>%IyBUJw3i&uh%Z9Vw_f6 z$kugQUEFjZvSSJ~Vx$Udvv8R6sne49SP%i==N#4v4qj!9)-1Am=}MkNxf+fJ9dQ!T z2_NWemLL&H&ShbfozTJhZ!3*1wqs5>_s0>^5;!AsQyLkc?%MT9bPhnyLA4@eX;e2T zo`ojVW|7oltw*HASzaBngCE0opH&@6!J?!KQ#*Y4V0>lT9|C-ksJD}V$>#C>V~L*L z>B)oBtRq8M$lwu}Yl&k`5+NO5iKt-TA}$b@B@*gFR9w4W+pMxu0`2sc1{7)l0if;$ zWrMIBf371=+sWbbNy6EyF^&=QR&tb1pxW>-%hnU=*A<2L64tK8Q9L4olIt-D%JoEF zCn-@o z1#HtZng|x?y2g9*czq*-CRYBhD+sAsE~{^Bh$yKU@8m^yBGI(dkO~RZO$?3YLsFPT z8k;*HR5WUao(7bFL>ma7$YasXu#8rxecTB;i`=3SO}X}i25Y>)kd%n?<~UEAs!fSF zgZRo-ihZNUo`}CH#Ga)_p+%wA0nzv}qtK%!6ou}o*UqgHg+_UkfDV?a^N3KQHhZ)o zW?AvXF*w7VI=3+%9tkj=iCCE@qsP|sjj%d)8v1d5VvAdd5)f(4Af!ln#+Qnbj^t|V z@rD^9AVyczLU2wnXd*Z(Xri|iv9l1E%@&$qK#BuVc`d%jhf{QZOIAW8mJ5b>REr~ z9(z261yODGRwWF|RzupO+zAuZ!f{O?jucA`j==Dvw2PhA@&M)OQuYXLu0l_Xehm_) z8fOZC0URmsGai916dz!Z<0#c1tDvJza5>mQ5V2!=Od7;^u;oUHlz15zD#y!sn`Q0! z1KPhBSc+wt&05ySYHg8qZ9Jx-ftFP;H0gyc+t%P;jZd<0r}ZRw9d6 zE|*NRa%*F?;+9{y4QyKK+&V3yZ#yCTLo}Z}nLt)EYW#jVn|GNBC(?{ z_A(6{)VP9Sa~zKcvv&IlnYAnGwe$U$wK%=WY}p;kND$kayFyG^8MDPuostz@%hXpq zJSiFQsjS-*(#~wpL=V+4irVa{Y2lZEAw;Y;ds^M6cB{~p(b{*gPA|jgOx=JiRM3qQ z3*Y1=&4Q6}dPA~+P4F2L68`(vYY)~{=Mxa7BKH++DXby{_AH#O(7;xLb~Y?3 zhgJ#9Iaq&3VA#zFXz(uj>^V_+ZbW6wcz2$ihwOf0Dy1o@MELpW;+_Q=nOU{jy%R4k zK+CpbIHbJ0bLv8LA1#Or=gYdhWWkB5J7PVaiAf&*(1^iKvh8Hbfg30u>7dm+Kgk61 zodAt#mYRzIdkOKW{Sm5VfVRS&*v_BKUWBfni4Q8Ggu)$uW+hm zzl}OR+Vjj+;412KR}{(>n+3XEsoUCHoU8zmtNfG<$rHJeMDNG#BW?_rmQkPPDRK0p+D~lJj=&!miR-8JX*pEQ?3oSR9JSO!d`lX zs?yvMwa{L>7>y_rL6c9a1lF(>bqaYpVVC-a!hB%WOWMdvF}z(IQFMihv>c@nEf)51 z-9CbQvCAP*72-CEdp(%koZuqOAKB+IEWG*>R0ouU;sws7XvbXSNm{v)V<}v4-6%(% zl*B@_=6&SLg(XecElqn0jk$_-UCGPaL?MVYtL4WBo~F%q0S&Q>GNSW>D~wefSuz#4 zl&#oRcyUhGY9=!Qh2}7WN6B@9n#Wjewfn;jEbH2Rco93Za6E5wG4~=a1(M2MichE` zDws1_8-z&>uJkAiL1v|;P zQ6Wj<soA!LS1B8dg2L==Lb+6M z%oD`c9NS3QRzqS+E~iRSgldUmc#?~sQg~3LaCGL}B#d8S@SJI^wb$&GqJyMNxkI|e zpV=Gv$@`(pnOYaY2~(b;hwh(QKgf+ceT1I9Dzko2sp4W!KOk|aii6<;Ab1ZnD)mr) z%qLj^MbACRcurRIneZMATGCjrfMlb42yXdGJUfI%idyjVai;zYrM0!dn0;tkh%GiK zh^4$u8XNxg%<>WzXjZE1vAe$ry;j|pH4+*hsz=h#sXweroli#NAjtNE_eq_PC>@acRMgjv$Erm=hh3x5dLTwmNU%p=n|*SocNR~QoyN0I$#FdK)BO3T)@wJn44rvE zDWn8gya>h9?3_$-n)HdMXS!qw+xnj7V4sn{I?wX3bKA+o!o^gmoz2S*6m+r7#bmqK zXHLk)A~xJ7rL>}ACd0!XLSphPM6)D|&>S>1?JT3e3^OP96OvKNt3KN%b7COwP@iKn zQUYqw8V~*B_$w5%8M|*zC-}`hMe?D44NRn(ZJ7}pv2GcQNGD& zrPP)`i=$u}FkAv0ln?k&c1z{~5i6o53ow;Gt)a)kBfQ66N0>)VW8Sb!KUD%b~j zt(*C=x7#cQNtMWSn9sk%rb6ubDB6ubLKM8yX6AgPh~AYpa-nfRo{=Kr0W1Qz3IVJ= zMHHd;7r(xHLh&oomJgYHibz@5SR+_|80^|4Ebp=HDM$4mMiC(5T!3a4@BTvON=3Nu zwRs#9Sw$T0vn>xJ92J4T-xlrazyoy;!--2DD1bz*8*)PO!6HbMDjFvwA1Z)ET0II) zosfLk76%w}5=9zL7(S9Iw$VAjN~-Zuo6#1$sj7A#vjy)OY>M?zm@NxNoVfIHTjEW} z63xo4Xszai>JzpJ(NR^>LSfrbbyS=EWd4TLr;2P?eL6FuBG<`Zg!41DOn{(IK9};I zmVNrHO}@0CfQFE@t-=(vlK0NpxH9fG%Nh%Ynw@|8+=To$wh|w@kNkK3CeMvYRz6>^ zO~ofVuM%QW$}N8ZXIJ?lX%Vr~R69ZXB7$rcQh;3v7!|$-bAtFK6QX*6#0lb;QMI6r zQEmyaxW)ord;}h)8}P zl>3Oj8BG9(BwGGekh^c$Hb|;V%C~LNsRYaO3hrF^jx7?>fd|x~%N@ga3t+%qj65mg zBop7WoxbOOO5Z1RC*u3IIS{T;E~%X@;1A%%!i^R#P2dHbPE7bA6l}RSrl!#02G6HD z!TAw#87$PIi(11TU3E27j{iHs{4wfBs5)oYVt>_r4t^p+CV~>Q7F%n`q*c(?pNb%j zfm`ZyWnRvS!k>wJ90S(rt&Mr|)(O_n)q(ZLqe{SjAyQ{-V9{Oe?vwCKl~8v1up2B9 zbFgsvS0%#SUt1ENdLaCpf`KpvLch(8aK$*&-qJ$n-{sqj?AV!Sz7RTA$b98(c^3|z z3vAy0enP?X1M0Q=Pda!OtE7yy*J&gyf6$`l2MCcU6*d1cie8iu%?Z+ckbh2w zXijkc5)r9{Xikv+niZlsLHt`ZHlBiE#>)xP-y?2Ci6SRB|FBt#DCrSzB0B;9r)@VX z0*=wz1|a19LT7^MMRZ;@$_boN$?^Ir#MCQOX2L zHCgC{296_n*fN0z$CPkb)L9UvSBBy;XuLaHQ0bB^ zP>X@9yH8G2dp%qDBH_y^b{{^fJ(I@D1drQF^uB;jlpJdF#|c!3VcO#X&eK;A)x&Jj zk`0rxH7H4fFUs$C3GZvK*bqn%cH4Sc&K+(uqKSd2M;_#`%BR4ZJ66phE6HsqV8^LB-#EGL1nU;+z?9^+6R_jc zliN=4PEZMrliNAhS;b<@Js9XtUM++yQfiNKwC~Q5JOT#J)z-giU z5@g&2(rJVZA$sK4Dp~fX5Iq5ib_Cr;Wky_UCxM~kI$|V8S+4OHZ6D3e;@~#hU1SAf zNEpc%{c$dHZ%IDM3drZ?1-a>c2IjVjnUaqr`V7Pnqwf&W+D^~UZO>Sd5fNF%Ol-kc zX>%xbF<5w4h*boGxb#!=b2}!qEA+s6?ScDXR|rS*?3+T{a0T}unqYjx1o0$Y5aYj- zAl_Q|77=;0un1FL^u%rQ#qYKSrCEV2zfF_ElVKwhr@#=ZgZ3OD+(tr(nW(TsnU1+& zS^n%c(3dTPx0{d*KB!)M>ZD~*ni(7u8Lus(!B>Dg23c2Et6a`)H{}uu)7sqa3rY<= zdk4$@x)dR9B~LL943Qm=pWx4&ij6xm$;$X;x0C2m!iIg-8>!FHUI8jt#9iyrqxNso zB>Hq)ib5HQ!O3hX=lk%O>k3kyykjG4GzBF;e@}kyj0s8pgZF{;jX9Je=_C_a&erD6 zgxMqmhT~1zdFlrXskw$d>txR&on<>X8IOfUKTd$pwzbNL0c%CCP6*Di<&aebIJS+9 zlq{@u!f|d65lAp16y`Ca6N2+>DSd?qfdI$e#E!2Mmh*GSz^$v@zUbQMgx~^OL83wi zZsS_RR*vWv?S$e&Tccwe3gI#M%`-gOc0zbZTc%$@h%=$?+HsLBRjvaMTG(UTJM0YO z1Kmz^+{spss-Wt&#yz^(%$=BvbNr9Q5Ga)kPNZCtqb+o-RU&gI=TckQg2FI!x7CT1 zJLjn6FdWh@t2-5UvF#-(RE$~!G`e($f7cuWXh|0)mZ_XHJOdM%1vt71ZMXNZ8r-UwP~K;u0X61^YhmW(^C zsY3*JJ#@lVc@fZMV?9a_rvYBE*$wJsAP(>=pege=*D(f6uq~|}=62ciKs(!LLf)M= z60xsoKHs(NfoAkzm|Hbwgod8vbkBH-wYV{Ram@8|m+@$RiQQFqaoS|lTQ$$&+S_dtZq&wyIg zX|cYF#wS$q5Z|XIFg9$KM^Z@l&1L0=dBOrq^a=@!WCu_cyT1g*-U%fr9)~#m?-7RTr9~`{G#tM@Jb0Ax z6e(yjtb4Sv)r32w6=Ilmc}%^$M|>=HM-wtY(m@c}*CuS%Ty^!;SIaLItL=My*t&Q6 zxKwGAnCN{I7rjbWAw{SSb0D#9A|f#8j6KoEPe}P8sKbdXf4e(OGXPJ3;w2_OkRM<( z@h~yPPDbE~xvKi45@zDbrOd=r^7ZAZhMh6-!=6TP~MY^?kA zzASZm*~kN`jqBj(5-vY@7- zYk2*}G>eR3D6u@bNcfEkE;1#CsA)MSiL^j){iX?dM=a8IP1-x^p0P(FyWf?dCFqta?Ky1aA{16^12?5#U0ea9Lh~>4f6#c{D6`uy@7x zh@B9;BM*V%&7BauQ`9!3GD-F1P8i+=o12WQ6ff=s_1#uC#i646Sa0ku^6wEn*>sj5 zXhLf%?){ub{9aKttAmYW4kw`Rvj(j^9B8$13Gz@>3^_r6zbN3b3|Wh2oPd8oln>Z| zFNSD05jTo;g8#vc!J}MjdC=lVyq$o5$SQuE?{Pa0C(s|ZT3imggNASJg8dP(fobD7 zBGcA#1?m2%)ll(Kn{lZVTRxT{>2m+foi!h~>bx59It}_0R@;Z;)Qh58%n9lztr?K0 z7QhMSr$nugE*k_BnvQGySc6q}{(jo3FAO~E8OT>fP9y(}RnHmd<*<)Nl;XNNC*Ys8 zstf~;de3Fqi`xnI=d9BhErpz5eqIRNXr(`1UK!Cg`Y_l~j@3Fr{es|v4QkNpc3Qkt z$_e%tMF3)l-NWI9R$PMYgyBoVG+8l-@?cqK=Y-(PqK`lhf?%OF?6lo==qut5g*-H| zzE+r)uNI^Uk=AMjG+z_F5%Or_Mk1_WCca(}6YW(lge_h->Ld=|5Vd)EG>Ps!vPRVj z*EfY-O~HkGY-qvl1o~SdK1&51SD!h-|F+1(S>bp3?gRf$*1$XcV4>4%Rq+Ym6_H5F zz~L{&m6=X#`Cbn6T|-gR>;(P$IndWyqZN0~|3J9nG|u20uRHJ`iqk3?z=MsoHQDUK zi9J8cB0%Y@<^=r5S)Q(Pj4YBnH=v}=PmCO*JsJ7a{AA?MO65R*ULw2t3#6&kDvHFZ zXrkkng*Qll1-Vwi6)DF1wNd2MA1)_~B7bA>2*sE(5lZhg$ln@ZEVrS}{Vq2%{dt{v(RV>D%AzPNQHS#n(P%(>Fj?61Pk37zsyL8M8#>hL zd}TCRYj-=;BujY_zy2lk$M}F;Iv7v?TX4;In#z{j%A>Y#>nU0J|Jbs@7#VS%eerr1 z3d%}gq*19Jwo5VsrfraW1$E%PlPl%?{$Qe?KGW3LHzcehoJ(VXc`-?SHf@xj0 zna-P95Uy%kIDddxmn87SO22Dyw5}iiA!Ra25*}yvrwg-FHM(Qa9_>O~Ei(>dAtep{H;8f%YnK-=YqlX|yQa=h- zYw=dz=i$)>>RxMAKf;su(Zf*o%TZ&JX*}YU_c@S!?dWsCaM+a}#CzUnkBG>nwp#F@ zX!0;D@%bYuRzwio2}eu8u4S~Ai(h%TuP@I0?ONy$MTiqD^!ps{HxjE23yxrU&>#C_ z*o|TBOoj<+f?>bCI~;i<>Lzf4*{Bde_PwFIX+FBXM|3x{po3K4vWWrGf>_3}wW2rb zZjSiKWTr$1qu>qCQ5N}#@QemwYt@Qq$##XEl)gQKt=ZNC@ z{aET&Sj@8ubQTv_Fehs4SV(LRLek8LxdqMO{*+q_!YJ=jubsB}%FV}b7Qa53GiA$W zIu8gReKNSSWlQGYw{O|9MdC5uryhk1K&HpT!F0E?ux)NyBz30Ox?^nE4yS3Ax2rv9 zEscU*!}iL~1`ejpH{|*pOQ_oX@ksj_j}hDHMej3gDgG$-GX%3lx2X9OkZCd?V=!#N z=#CVgL`|1vhPP5F}Z1Iw$_lWb4F2(^N?vl479g zKs;x1+-zXCtdhl=OPB0N*K2zwP*bYRrqqUYGAqqSV@GptR@aSN6=C|L1v^UV#@3>` zQ384_x+U&6Uh)1Y>hv8Z+%Y2TI zV-%W(kl%%JR`9z;4ULIelEdr{Vv7B^FSR<|qcUA;hTVBgy>^=%kJ?#S4La@dPIyu} z>CL#)m}|~Rzlv3MZGO9uU-2;dz4VqzLuc?s?{(%_AA|2;I5sVfyIuTh(`Yb;gWSY6 zZp4rL3ER~m)+UYfI}F6Qy^1BlCXVa7S=zK7zqQZ^<3OY5CKPOSNTXm(w(# zE)M%;Of!;ZyT*Zh{Vub1aB<9bl z5+=;2FHas@uWd|Vd9vK^FLy)4o77Wg=WNixf5hII#%yETOk*zETgOgbZT?(Q@}PZ+ zW{18gy$q9%DS0g3!KG`q`fK>h)KaU<%0dcQdj^7_&7X&Y4H5wj71bAF2Y)gc&ljm7 z9i!})=o2TwVmzC_K>3M;_v#hQCYJokE!3{BXZrO8O4j!l#kCBK#28Aq`OQP zE15@Dex%Ku(JCVqx1@+M=#mK;#m7z5C@zm#Z!I#3e9=XWop0hlx$wd!eQo|yQR5)k z1fzw@HT1`hj#rS-9VGa{S7DD6Kb5kGch)6a;Gvb9Cj@s9yUIEtgn;KGkn5;~i9XED z-d#nEp<`;(C2*B6aJB-({M~fJDwrjXZ+OCScimwK9PEhV!kATOc$oEjh|HJHD(tI) zRuAAW)2*|h0XycN;NMf6xYUQgHt4M42%VDc z``%*BE{4X8iZ&9(YBS?PRvU(`LQu={m^wZ!vW?`%L@fzpMtkRkjP~QPz|$ky)5G;? zcAWJzbkjza$8@;5G=0jcG#b?Q)#mR5tJ&h2gU5>@ma?2JIIY$~5M@i8fGltzBvUNN zEe%ABoKe&^inudcD9$e$mDXSmZt}s^Jj|8~sKh4N&ZCwFu+@W3D_CR=KtmM2GM3_w zj^3z)7>`7cUi{rl`@i`m%+D#O5=03d-yC@P7{?cvI^lo>8k1f@pc!;cgsq5Z0GW$3 NBt+eFxM_>C{|71%9J>Gj literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/-1355312039518.target/.pluginInfo b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/-1355312039518.target/.pluginInfo new file mode 100644 index 0000000..01aaeb2 --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/-1355312039518.target/.pluginInfo @@ -0,0 +1,1702 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/-1355312039518.target/.state b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/-1355312039518.target/.state new file mode 100644 index 0000000000000000000000000000000000000000..124e10b7ac20021343d46b2e14363cdc34e0c12f GIT binary patch literal 143620 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�hHa{1W6lqmj^Ca7CX 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 bU%v$mN6(`sIjv#iQ8RSPlE-5naC&|Ki`13y literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/-1746579760.workspace/.pluginInfo b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/-1746579760.workspace/.pluginInfo new file mode 100644 index 0000000..4858642 --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/-1746579760.workspace/.pluginInfo @@ -0,0 +1,6 @@ + + + + + + diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/-1746579760.workspace/.state b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/-1746579760.workspace/.state new file mode 100644 index 0000000000000000000000000000000000000000..af3bb9566b587d5057052cb88e01f098bd5ede8d GIT binary patch literal 586 zcma)3OHKnZ47DpH7_lm_;kys+m;HK^nHIod^%(NVU3ve|qgfr8k3bMe9 z#Gm(`?PP`kPypc5$>~Rtf+@mrh?OlvM7Ru6siVZ zhP|7rA+x56Y5 literal 0 HcmV?d00001 diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/.extensions/.manager/.fileTableLock b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/.extensions/.manager/.fileTableLock new file mode 100644 index 0000000..e69de29 diff --git a/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/.local_targets/1395999341423.target b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/.local_targets/1395999341423.target new file mode 100644 index 0000000..9b05a1e --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/runtime-data/.metadata/.plugins/org.eclipse.pde.core/.local_targets/1395999341423.target @@ -0,0 +1,15 @@ + + + + + + +linux +gtk +x86_64 +fr_FR + + +-Xms128m -Xmx256m -Dorg.eclipse.swt.browser.UseWebKitGTK=true -Dhelp.lucene.tokenizer=standard -XX:CompileCommand=exclude,org/eclipse/core/internal/dtree/DataTreeNode,forwardDeltaWith -XX:CompileCommand=exclude,org/eclipse/jdt/internal/compiler/lookup/ParameterizedMethodBinding,<init> -XX:CompileCommand=exclude,org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates,instantiateTemplate -XX:CompileCommand=exclude,org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage,addBinding -XX:CompileCommand=exclude,org/python/pydev/editor/codecompletion/revisited/PythonPathHelper,isValidSourceFile -XX:CompileCommand=exclude,org/eclipse/tycho/core/osgitools/EquinoxResolver,newState -Dorg.eclipse.equinox.p2.reconciler.dropins.directory=/usr/share/eclipse/dropins -Dorg.eclipse.swt.browser.DefaultType=mozilla -Declipse.p2.skipMovedInstallDetection=true + + diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/application/Application.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/application/Application.java new file mode 100644 index 0000000..9b55d31 --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/application/Application.java @@ -0,0 +1,95 @@ +package fr.inria.diverse.cloning.materialgenerator.application; + +import java.io.File; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import joptsimple.OptionException; +import joptsimple.OptionParser; +import joptsimple.OptionSet; +import joptsimple.OptionSpec; + +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IProjectDescription; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.Path; +import org.eclipse.equinox.app.IApplication; +import org.eclipse.equinox.app.IApplicationContext; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.JavaCore; + +import fr.inria.diverse.cloning.materialgenerator.start.Start; + +/** + * This class controls all aspects of the application's execution + */ +public class Application implements IApplication { + + /* + * + * + * (non-Javadoc) + * + * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app. IApplicationContext) + */ + public Object start(IApplicationContext context) throws Exception { + + String[] args = (String[]) context.getArguments().get(IApplicationContext.APPLICATION_ARGS); + + // Specifying arguments + OptionParser parser = new OptionParser(); + + OptionSpec ecoreFilesOption = parser.accepts("ecoreFiles", "The ecore files describing the metamodel.") + .withRequiredArg().required().describedAs("path1,path2,...").ofType(File.class) + .withValuesSeparatedBy(",").required(); + + OptionSpec emfProjectFolderOption = parser + .accepts("emfProjectFolder", "The folder of the eclipse java project with generated emf code.") + .withRequiredArg().required().describedAs("path").ofType(File.class).required(); + + OptionSpec metamodelNameOption = parser.accepts("metamodelName", "The name of the metamodel.") + .withRequiredArg().required().ofType(String.class).required(); + + OptionSpec emfGenerationOption = parser.accepts("generateEMFcode", + "Whether the EMF model code should be generated, with appropriate super types for classes."); + + try { + + // Parsing arguments (throws an error if problem) + OptionSet options = parser.parse(args); + List ecoreFiles = options.valuesOf(ecoreFilesOption); + Set ecoreFilesSet = new HashSet(ecoreFiles); + File emfProjectFolder = options.valueOf(emfProjectFolderOption); + String metamodelName = options.valueOf(metamodelNameOption); + boolean emfGen = options.has(emfGenerationOption); + + // Creating a "fake" java project from a real existing eclipse java // project on the filesystem + IProjectDescription description = ResourcesPlugin.getWorkspace().loadProjectDescription( + new Path(new File(emfProjectFolder, ".project").getAbsolutePath())); + IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(description.getName()); + project.delete(false, true, null); + project.create(description, null); + project.open(null); + IJavaProject javaProject = JavaCore.create(project); + + Start.start(ecoreFilesSet, metamodelName, javaProject, emfGen); + + } catch (OptionException e) { + System.out.println("Invalid options: " + e.getMessage()); + parser.printHelpOn(System.out); + } + + return IApplication.EXIT_OK; + + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.equinox.app.IApplication#stop() + */ + public void stop() { + // nothing to do + } +} diff --git a/fr.inria.diverse.cloning.benchmark.materialgenerator/src/fr/inria/diverse/cloning/benchmark/materialgenerator/generator/EMFCodeGenerator.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/generators/EMFCodeGenerator.java similarity index 98% rename from fr.inria.diverse.cloning.benchmark.materialgenerator/src/fr/inria/diverse/cloning/benchmark/materialgenerator/generator/EMFCodeGenerator.java rename to fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/generators/EMFCodeGenerator.java index 60059fe..12ee029 100644 --- a/fr.inria.diverse.cloning.benchmark.materialgenerator/src/fr/inria/diverse/cloning/benchmark/materialgenerator/generator/EMFCodeGenerator.java +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/generators/EMFCodeGenerator.java @@ -1,4 +1,4 @@ -package fr.inria.diverse.cloning.benchmark.materialgenerator.generator; +package fr.inria.diverse.cloning.materialgenerator.generators; import java.io.File; import java.util.HashSet; diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/generators/ManifestEditor.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/generators/ManifestEditor.java new file mode 100644 index 0000000..e010321 --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/generators/ManifestEditor.java @@ -0,0 +1,139 @@ +package fr.inria.diverse.cloning.materialgenerator.generators; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.StringReader; +import java.util.jar.Attributes.Name; +import java.util.jar.Manifest; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.CoreException; + +/***************************************************************************** + * Copyright (c) 2011 CEA LIST. + * + * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse + * Public License v1.0 which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation + * + * + * from http://dev.eclipse.org/svnroot/modeling/org.eclipse.mdt.papyrus/branches/0.8.X-EYY/plugins/configurationTK/org. + * eclipse.papyrus.customization/src/org/eclipse/papyrus/customization/plugin/ManifestEditor.java + * + *****************************************************************************/ +public class ManifestEditor { + + private IProject project; + + private IFile manifestFile; + + private Manifest manifest; + + public ManifestEditor(IProject project) throws IOException, CoreException { + this.project = project; + manifestFile = getManifestFile(); + + manifest = new Manifest(manifestFile.getContents()); + } + + public void addDependency(String dependency) { + addDependency(dependency, null); + } + + public void addDependency(String dependency, String version) { + Name rqBundle = new Name("Require-Bundle"); //$NON-NLS-1$ + String requireBundle = manifest.getMainAttributes().getValue(rqBundle); + + // TODO : Improve the detection of existing dependency + // If a.b.c exists, then a.b cannot be added (Because it is already contained) + // Moreover, the Manifest allows newlines anywhere (Including in the + // middle of a word) : check if these newlines appear in this map, + // or if they have already been parsed. If the manifest value is copied as-is in the map, + // then we need to take care of newlines when parsing it + + if (requireBundle == null) { + requireBundle = dependency; + if (version != null) { + requireBundle += ";" + version; //$NON-NLS-1$ + } + } else if (!requireBundle.contains(dependency)) { + requireBundle += "," + dependency; //$NON-NLS-1$ + if (version != null) { + requireBundle += ";" + version; //$NON-NLS-1$ + } + } + + manifest.getMainAttributes().put(rqBundle, requireBundle); + } + + public void setValue(String key, String value) { + setValue(key, "", value); //$NON-NLS-1$ + } + + public void setSingleton(boolean singleton) { + String value = manifest.getMainAttributes().getValue("bundle-symbolicName"); + String[] directives = value.split(";"); + + if (directives.length == 0) { + return; // This should not happen if the Manifest is well-formed + } else { + value = directives[0]; + boolean isDefined = false; + for (int i = 1; i < directives.length; i++) { + String directive = directives[i]; + if (directive.startsWith("singleton:=")) { + directive = "singleton:=" + singleton; + isDefined = true; + } + value += ";" + directive; + } + if (!isDefined) { + value += ";singleton:=" + singleton; + } + } + + manifest.getMainAttributes().putValue("bundle-symbolicName", value); + } + + public void setValue(String key, String name, String value) { + manifest.getAttributes(key).put(name, value); + } + + public void removeValue(String key, String value) { + + } + + public void removeValue(String key) { + manifest.getAttributes(key).remove(key); + } + + private IFile getManifestFile() { + IFile manifest = project.getFile("META-INF/MANIFEST.MF"); //$NON-NLS-1$ + if (manifest.exists()) { + return manifest; + } + + // TODO : Manifest creation not supported + return null; + } + + public void save() throws IOException, CoreException { + + ByteArrayOutputStream os = new ByteArrayOutputStream(); + + manifest.write(os); + + final StringReader reader = new StringReader(os.toString("UTF-8")); //$NON-NLS-1$ + manifestFile.setContents(new InputStream() { + + @Override + public int read() throws IOException { + return reader.read(); + } + }, true, true, null); + } +} \ No newline at end of file diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/main/Application.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/main/Application.java deleted file mode 100644 index 6ed97a7..0000000 --- a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/main/Application.java +++ /dev/null @@ -1,146 +0,0 @@ -package fr.inria.diverse.cloning.materialgenerator.main; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import joptsimple.OptionException; -import joptsimple.OptionParser; -import joptsimple.OptionSet; -import joptsimple.OptionSpec; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IProjectDescription; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.Path; -import org.eclipse.emf.common.util.URI; -import org.eclipse.emf.ecore.EPackage; -import org.eclipse.emf.ecore.EcorePackage; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.emf.ecore.resource.ResourceSet; -import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; -import org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl; -import org.eclipse.equinox.app.IApplication; -import org.eclipse.equinox.app.IApplicationContext; -import org.eclipse.gmt.modisco.java.Model; -import org.eclipse.gmt.modisco.java.generation.files.GenerateJavaExtended; -import org.eclipse.jdt.core.IJavaProject; -import org.eclipse.jdt.core.JavaCore; -import org.eclipse.modisco.java.discoverer.DiscoverJavaModelFromJavaProject; - -import fr.inria.diverse.cloning.materialgenerator.generators.EMFImpl2PImpl; -import fr.inria.diverse.cloning.materialgenerator.tagger.Tagger; -import fr.inria.diverse.cloning.materialgenerator.tagger.impl.DeepTagger; -import fr.inria.diverse.cloning.materialgenerator.tagger.impl.MutClassesOnlyTagger; - -/** - * This class controls all aspects of the application's execution - */ -public class Application implements IApplication { - - /* - * - * - * (non-Javadoc) - * - * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app. IApplicationContext) - */ - public Object start(IApplicationContext context) throws Exception { - - String[] args = (String[]) context.getArguments().get(IApplicationContext.APPLICATION_ARGS); - - // Specifying arguments - OptionParser parser = new OptionParser(); - - OptionSpec ecoreFilesOption = parser.accepts("ecoreFiles", "The ecore files describing the metamodel.") - .withRequiredArg().required().describedAs("path1,path2,...").ofType(File.class).withValuesSeparatedBy(",") - .required(); - - OptionSpec emfProjectFolderOption = parser - .accepts("emfProjectFolder", "The folder of the eclipse java project with generated emf code.") - .withRequiredArg().required().describedAs("path").ofType(File.class).required(); - - OptionSpec metamodelNameOption = parser.accepts("metamodelName", "The name one the metamodel.") - .withRequiredArg().required().ofType(String.class).required(); - - try { - - // Parsing arguments (throws an error if problem) - OptionSet options = parser.parse(args); - List ecoreFiles = options.valuesOf(ecoreFilesOption); - File emfProjectFolder = options.valueOf(emfProjectFolderOption); - String metamodelName = options.valueOf(metamodelNameOption); - - System.out.println("Starting Cloning material generator"); - - // Loading some ecore files in a resource set (= considered metamodel) - EcoreResourceFactoryImpl fact = new EcoreResourceFactoryImpl(); - if (!EPackage.Registry.INSTANCE.containsKey(EcorePackage.eNS_URI)) { - EPackage.Registry.INSTANCE.put(EcorePackage.eNS_URI, EcorePackage.eINSTANCE); - } - Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("ecore", fact); - ResourceSet rs = new ResourceSetImpl(); - - for (File f : ecoreFiles) - rs.getResource(URI.createFileURI(f.getAbsolutePath()), true); - - // Tagging - Tagger tagger = new MutClassesOnlyTagger(rs, metamodelName); - Tagger tagger2 = new DeepTagger(rs, metamodelName); - - // Creating a "fake" java project from a real existing eclipse java // project on the filesystem - IProjectDescription description = ResourcesPlugin.getWorkspace().loadProjectDescription( - new Path(new File(emfProjectFolder, ".project").getAbsolutePath())); - IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(description.getName()); - project.delete(false, true, null); - project.create(description, null); - project.open(null); - IJavaProject javaProject = JavaCore.create(project); - - // Discovering the model from the project - DiscoverJavaModelFromJavaProject discoverer = new DiscoverJavaModelFromJavaProject(); - discoverer.discoverElement(javaProject, new NullProgressMonitor()); - - // Accessing the obtained model - Resource result = discoverer.getTargetModel(); - Model javaModel = (Model) result.getContents().get(0); - - // String srcOutputFolder = "/home/ebousse/Dev/modelCloning/emf/SomeMetamodel/src"; - String srcOutputFolder = new File(emfProjectFolder, "src").getAbsolutePath(); - - // Calling the partial implementations transformer with one tagger - Model originalModel = new EMFImpl2PImpl(javaModel, tagger, true).transform2PImpl(srcOutputFolder); - new EMFImpl2PImpl(originalModel, tagger2, true).transform2PImpl(srcOutputFolder); - - // Generating the code from the obtained model - GenerateJavaExtended javaGenerator = new GenerateJavaExtended(javaModel, new File(srcOutputFolder), - new ArrayList()); - javaGenerator.doGenerate(null); - - // Generating the code from the obtained model - GenerateJavaExtended javaGenerator2 = new GenerateJavaExtended(originalModel, new File(srcOutputFolder), - new ArrayList()); - javaGenerator2.doGenerate(null); - - // Done - System.out.println("Done !"); - - } catch (OptionException e) { - System.out.println("Invalid options: " + e.getMessage()); - parser.printHelpOn(System.out); - } - - return IApplication.EXIT_OK; - - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.equinox.app.IApplication#stop() - */ - public void stop() { - // nothing to do - } -} diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/main/TestTagger.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/main/TestTagger.java deleted file mode 100644 index a33f744..0000000 --- a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/main/TestTagger.java +++ /dev/null @@ -1,57 +0,0 @@ -package fr.inria.diverse.cloning.materialgenerator.main; - -import java.io.File; - -import org.eclipse.emf.common.util.URI; -import org.eclipse.emf.ecore.EPackage; -import org.eclipse.emf.ecore.EcorePackage; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.emf.ecore.resource.ResourceSet; -import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; -import org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl; -import org.eclipse.equinox.app.IApplication; -import org.eclipse.equinox.app.IApplicationContext; - -import fr.inria.diverse.cloning.materialgenerator.tagger.impl.MutClassesOnlyTagger; - -/** - * This class controls all aspects of the application's execution - */ -public class TestTagger implements IApplication { - - /* - * - * - * (non-Javadoc) - * - * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app. IApplicationContext) - */ - public Object start(IApplicationContext context) throws Exception { - - // Loading some ecore files in a resource set (= considered metamodel) - EcoreResourceFactoryImpl fact = new EcoreResourceFactoryImpl(); - if (!EPackage.Registry.INSTANCE.containsKey(EcorePackage.eNS_URI)) { - EPackage.Registry.INSTANCE.put(EcorePackage.eNS_URI, EcorePackage.eINSTANCE); - } - Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("ecore", fact); - ResourceSet rs = new ResourceSetImpl(); - - rs.getResource(URI.createFileURI("/home/ebousse/Dev/modelCloning/emf/fr.inria.diverse.cloning.materialgenerator/testdata/mm8.ecore"), true); - - MutClassesOnlyTagger t = new MutClassesOnlyTagger(rs, "mm8"); - - - - return IApplication.EXIT_OK; - - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.equinox.app.IApplication#stop() - */ - public void stop() { - // nothing to do - } -} diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/metrics/CloningMetrics.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/metrics/CloningMetrics.java index 1a8c02b..5da7fb7 100644 --- a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/metrics/CloningMetrics.java +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/metrics/CloningMetrics.java @@ -1,6 +1,5 @@ package fr.inria.diverse.cloning.materialgenerator.metrics; -import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.resource.ResourceSet; diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/plugin/Activator.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/plugin/Activator.java new file mode 100644 index 0000000..457ebd7 --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/plugin/Activator.java @@ -0,0 +1,61 @@ +package fr.inria.diverse.cloning.materialgenerator.plugin; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.BundleContext; + +/** + * The activator class controls the plug-in life cycle + */ +public class Activator extends AbstractUIPlugin { + + // The plug-in ID + public static final String PLUGIN_ID = "APlugin"; //$NON-NLS-1$ + + // The shared instance + private static Activator plugin; + + /** + * The constructor + */ + public Activator() { + } + + /* + * (non-Javadoc) + * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) + */ + public void start(BundleContext context) throws Exception { + super.start(context); + plugin = this; + } + + /* + * (non-Javadoc) + * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) + */ + public void stop(BundleContext context) throws Exception { + plugin = null; + super.stop(context); + } + + /** + * Returns the shared instance + * + * @return the shared instance + */ + public static Activator getDefault() { + return plugin; + } + + /** + * Returns an image descriptor for the image file at the given + * plug-in relative path + * + * @param path the path + * @return the image descriptor + */ + public static ImageDescriptor getImageDescriptor(String path) { + return imageDescriptorFromPlugin(PLUGIN_ID, path); + } +} diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunch.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunch.java new file mode 100644 index 0000000..1d4279c --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunch.java @@ -0,0 +1,39 @@ +package fr.inria.diverse.cloning.materialgenerator.plugin; + +import java.io.File; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.debug.core.ILaunch; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.launching.AbstractJavaLaunchConfigurationDelegate; + +import fr.inria.diverse.cloning.materialgenerator.start.Start; +import fr.inria.diverse.cloning.runtime.util.Log; + +public class CloningMaterialGenerationLaunch extends AbstractJavaLaunchConfigurationDelegate { + + @Override + public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) + throws CoreException { + // TODO Stub de la méthode généré automatiquement + + String mmName = configuration.getAttribute("mmName", ""); + boolean emf = configuration.getAttribute("emf", false); + IJavaProject project = getJavaProject(configuration); + File ecoreFolder = getWorkingDirectory(configuration); + + List files = Arrays.asList((ecoreFolder.listFiles(new EcoreFileFilter()))); + Set filesSet = new HashSet(files); + + Log.enableEclipseConsole("Cloning material generator console."); + Start.start(filesSet, mmName, project, emf); + + } + +} diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTab.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTab.java new file mode 100644 index 0000000..a398a5b --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTab.java @@ -0,0 +1,252 @@ +package fr.inria.diverse.cloning.materialgenerator.plugin; + +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.variables.VariablesPlugin; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; +import org.eclipse.debug.internal.ui.DebugUIPlugin; +import org.eclipse.debug.internal.ui.SWTFactory; +import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsMessages; +import org.eclipse.debug.ui.IDebugUIConstants; +import org.eclipse.debug.ui.StringVariableSelectionDialog; +import org.eclipse.jdt.internal.debug.ui.IJavaDebugHelpContextIds; +import org.eclipse.jdt.internal.debug.ui.launcher.AbstractJavaMainTab; +import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.dialogs.IDialogSettings; +import org.eclipse.swt.SWT; +import org.eclipse.swt.accessibility.AccessibleAdapter; +import org.eclipse.swt.accessibility.AccessibleEvent; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.FileDialog; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.dialogs.ContainerSelectionDialog; +import org.eclipse.ui.dialogs.ElementTreeSelectionDialog; +import org.eclipse.ui.model.WorkbenchContentProvider; +import org.eclipse.ui.model.WorkbenchLabelProvider; +import org.eclipse.ui.views.navigator.ResourceComparator; + +@SuppressWarnings("restriction") +public class CloningMaterialGenerationLaunchTab extends AbstractJavaMainTab { + + // Local/shared UI widgets + private Button fEcoreFolderBrowse; + private Text fEcoreFolderText; + private Button fVariables; + private Button fWorkspaceBrowse; + private Text fMetamodelNameText; + private Button fEMFCheckButton; + + private void createEMFCheckbox(Composite parent) { + fEMFCheckButton = SWTFactory.createCheckButton(parent, "Generate EMF model code with appropriate supertypes.", + null, false, 1); + fEMFCheckButton.addSelectionListener(getDefaultListener()); + } + + @Override + public void createControl(Composite parent) { + Composite comp = SWTFactory.createComposite(parent, parent.getFont(), 1, 1, GridData.FILL_BOTH); + ((GridLayout) comp.getLayout()).verticalSpacing = 0; + createEcoreFolderComponent(comp); + createVerticalSpacer(comp, 1); + createProjectEditor(comp); + ((Group) fProjText.getParent()).setText("Plug-in/EMF project with EMF model code of the metamodel."); + createVerticalSpacer(comp, 1); + createMetamodelNameComponent(comp); + createEMFCheckbox(comp); + setControl(comp); + PlatformUI.getWorkbench().getHelpSystem() + .setHelp(getControl(), IJavaDebugHelpContextIds.LAUNCH_CONFIGURATION_DIALOG_MAIN_TAB); + } + + /** + * Modify listener that simply updates the owning launch configuration dialog. + */ + private ModifyListener fBasicModifyListener = new ModifyListener() { + public void modifyText(ModifyEvent evt) { + scheduleUpdateJob(); + } + }; + + /** + * Constant representing the id of the {@link IDialogSettings} location for the {@link ContainerSelectionDialog} + * used on this tab + * + * @since 3.6 + */ + private final String WORKSPACE_SELECTION_DIALOG = IDebugUIConstants.PLUGIN_ID + ".WORKSPACE_SELECTION_DIALOG"; //$NON-NLS-1$ + + /** + * Returns the {@link IDialogSettings} for the given id + * + * @param id + * the id of the dialog settings to get + * @return the {@link IDialogSettings} to pass into the {@link ContainerSelectionDialog} + * @since 3.6 + */ + IDialogSettings getDialogBoundsSettings(String id) { + IDialogSettings settings = DebugUIPlugin.getDefault().getDialogSettings(); + IDialogSettings section = settings.getSection(id); + if (section == null) { + section = settings.addNewSection(id); + } + return section; + } + + /** + * Creates the component set for the ecore folder + * + * @param parent + * the parent to add this component to + */ + private void createEcoreFolderComponent(Composite parent) { + Group group = SWTFactory.createGroup(parent, "Folder with ecore models defining the metamodel", 5, 2, + GridData.FILL_HORIZONTAL); + Composite comp = SWTFactory.createComposite(group, 5, 5, GridData.FILL_BOTH); + GridLayout ld = (GridLayout) comp.getLayout(); + ld.marginWidth = 1; + ld.marginHeight = 1; + GridData gd = new GridData(SWT.BEGINNING, SWT.NORMAL, true, false); + gd.horizontalSpan = 5; + + fEcoreFolderText = SWTFactory.createSingleText(comp, 4); + fEcoreFolderText.getAccessible().addAccessibleListener(new AccessibleAdapter() { + public void getName(AccessibleEvent e) { + e.result = LaunchConfigurationsMessages.CommonTab_6; + } + }); + fEcoreFolderText.addModifyListener(fBasicModifyListener); + + Composite bcomp = SWTFactory.createComposite(comp, 3, 5, GridData.HORIZONTAL_ALIGN_END); + ld = (GridLayout) bcomp.getLayout(); + ld.marginHeight = 1; + ld.marginWidth = 0; + fWorkspaceBrowse = createPushButton(bcomp, LaunchConfigurationsMessages.CommonTab_12, null); + fWorkspaceBrowse.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(getShell(), + new WorkbenchLabelProvider(), new WorkbenchContentProvider()); + dialog.setTitle(LaunchConfigurationsMessages.CommonTab_13); + dialog.setMessage("Select a folder containing all the ecore models defining the metamodel."); + dialog.setInput(ResourcesPlugin.getWorkspace().getRoot()); + dialog.setComparator(new ResourceComparator(ResourceComparator.NAME)); + dialog.setDialogBoundsSettings(getDialogBoundsSettings(WORKSPACE_SELECTION_DIALOG), + Dialog.DIALOG_PERSISTSIZE); + if (dialog.open() == IDialogConstants.OK_ID) { + IResource resource = (IResource) dialog.getFirstResult(); + if (resource != null) { + String arg = resource.getFullPath().toString(); + String fileLoc = VariablesPlugin.getDefault().getStringVariableManager() + .generateVariableExpression("workspace_loc", arg); //$NON-NLS-1$ + fEcoreFolderText.setText(fileLoc); + } + } + } + }); + fEcoreFolderBrowse = createPushButton(bcomp, LaunchConfigurationsMessages.CommonTab_7, null); + fEcoreFolderBrowse.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + String filePath = fEcoreFolderText.getText(); + FileDialog dialog = new FileDialog(getShell(), SWT.SAVE); + filePath = dialog.open(); + if (filePath != null) { + fEcoreFolderText.setText(filePath); + } + } + }); + fVariables = createPushButton(bcomp, LaunchConfigurationsMessages.CommonTab_9, null); + fVariables.addSelectionListener(new SelectionListener() { + public void widgetSelected(SelectionEvent e) { + StringVariableSelectionDialog dialog = new StringVariableSelectionDialog(getShell()); + dialog.open(); + String variable = dialog.getVariableExpression(); + if (variable != null) { + fEcoreFolderText.insert(variable); + } + } + + public void widgetDefaultSelected(SelectionEvent e) { + } + }); + + } + + /** + * Creates the component set for the ecore folder + * + * @param parent + * the parent to add this component to + */ + private void createMetamodelNameComponent(Composite parent) { + Group group = SWTFactory.createGroup(parent, "Metamodel name", 5, 2, GridData.FILL_HORIZONTAL); + Composite comp = SWTFactory.createComposite(group, 5, 5, GridData.FILL_BOTH); + GridLayout ld = (GridLayout) comp.getLayout(); + ld.marginWidth = 1; + ld.marginHeight = 1; + GridData gd = new GridData(SWT.BEGINNING, SWT.NORMAL, true, false); + gd.horizontalSpan = 5; + + fMetamodelNameText = SWTFactory.createSingleText(comp, 4); + fMetamodelNameText.getAccessible().addAccessibleListener(new AccessibleAdapter() { + public void getName(AccessibleEvent e) { + e.result = LaunchConfigurationsMessages.CommonTab_6; + } + }); + fMetamodelNameText.addModifyListener(fBasicModifyListener); + + } + + @Override + public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { + // TODO Stub de la méthode généré automatiquement + + } + + @Override + public void performApply(ILaunchConfigurationWorkingCopy configuration) { + configuration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, fProjText.getText().trim()); + configuration + .setAttribute(IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, fEcoreFolderText.getText()); + configuration.setAttribute("mmName", fMetamodelNameText.getText()); + configuration.setAttribute("emf", fEMFCheckButton.getSelection()); + } + + public void initializeFrom(ILaunchConfiguration configuration) { + super.initializeFrom(configuration); + try { + String ecoreFolder = configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY, + ""); + fEcoreFolderText.setText(ecoreFolder); + + String mmName = configuration.getAttribute("mmName", ""); + fMetamodelNameText.setText(mmName); + + boolean emf = configuration.getAttribute("emf", false); + fEMFCheckButton.setSelection(emf); + + } catch (CoreException e) { + // TODO Bloc catch généré automatiquement + e.printStackTrace(); + } + } + + @Override + public String getName() { + // TODO Stub de la méthode généré automatiquement + return "Configuration"; + } + +} diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTabGroup.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTabGroup.java new file mode 100644 index 0000000..0c93ea0 --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/plugin/CloningMaterialGenerationLaunchTabGroup.java @@ -0,0 +1,20 @@ +package fr.inria.diverse.cloning.materialgenerator.plugin; + +import org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup; +import org.eclipse.debug.ui.ILaunchConfigurationDialog; +import org.eclipse.debug.ui.ILaunchConfigurationTab; + +public class CloningMaterialGenerationLaunchTabGroup extends AbstractLaunchConfigurationTabGroup { + + private ILaunchConfigurationTab[] tabs; + + @Override + public void createTabs(ILaunchConfigurationDialog dialog, String mode) { + tabs = new ILaunchConfigurationTab[] { + // new CommonTab(), // working, but not required + new CloningMaterialGenerationLaunchTab() }; + setTabs(tabs); + + } + +} diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/plugin/EcoreFileFilter.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/plugin/EcoreFileFilter.java new file mode 100644 index 0000000..50bf582 --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/plugin/EcoreFileFilter.java @@ -0,0 +1,12 @@ +package fr.inria.diverse.cloning.materialgenerator.plugin; + +import java.io.File; +import java.io.FileFilter; + + + +public class EcoreFileFilter implements FileFilter { + public boolean accept(File file) { + return file.getName().toLowerCase().endsWith(".ecore"); + } +} \ No newline at end of file diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/start/Start.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/start/Start.java new file mode 100644 index 0000000..5e1368a --- /dev/null +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/start/Start.java @@ -0,0 +1,113 @@ +package fr.inria.diverse.cloning.materialgenerator.start; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Set; + +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.emf.common.util.URI; +import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.ecore.EcorePackage; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; +import org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl; +import org.eclipse.gmt.modisco.java.Model; +import org.eclipse.gmt.modisco.java.generation.files.GenerateJavaExtended; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.modisco.infra.discovery.core.exception.DiscoveryException; +import org.eclipse.modisco.java.discoverer.DiscoverJavaModelFromJavaProject; + +import fr.inria.diverse.cloning.materialgenerator.generators.EMFCodeGenerator; +import fr.inria.diverse.cloning.materialgenerator.generators.EMFCodeGenerator.EMFGenerationException; +import fr.inria.diverse.cloning.materialgenerator.generators.EMFImpl2PImpl; +import fr.inria.diverse.cloning.materialgenerator.generators.ManifestEditor; +import fr.inria.diverse.cloning.materialgenerator.tagger.Tagger; +import fr.inria.diverse.cloning.materialgenerator.tagger.impl.DeepTagger; +import fr.inria.diverse.cloning.materialgenerator.tagger.impl.MutClassesOnlyTagger; +import fr.inria.diverse.cloning.runtime.util.Log; + +public class Start { + + public static void start(Set ecoreFiles, String metamodelName, IJavaProject javaProject, boolean emf) { + Log.info("Starting Cloning material generator"); + + try { + + ResourceSet rs; + if (emf) + rs = EMFCodeGenerator.generate(ecoreFiles, metamodelName, javaProject.getProject()); + else { + + // Loading some ecore files in a resource set (= considered metamodel) + EcoreResourceFactoryImpl fact = new EcoreResourceFactoryImpl(); + if (!EPackage.Registry.INSTANCE.containsKey(EcorePackage.eNS_URI)) { + EPackage.Registry.INSTANCE.put(EcorePackage.eNS_URI, EcorePackage.eINSTANCE); + } + Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("ecore", fact); + rs = new ResourceSetImpl(); + } + for (File f : ecoreFiles) + rs.getResource(URI.createFileURI(f.getAbsolutePath()), true); + + // Tagging + Tagger tagger = new MutClassesOnlyTagger(rs, metamodelName); + Tagger tagger2 = new DeepTagger(rs, metamodelName); + + // Discovering the model from the project + DiscoverJavaModelFromJavaProject discoverer = new DiscoverJavaModelFromJavaProject(); + + discoverer.discoverElement(javaProject, new NullProgressMonitor()); + + // Accessing the obtained model + Resource result = discoverer.getTargetModel(); + Model javaModel = (Model) result.getContents().get(0); + + // Getting the absolute path of the folder + File emfProjectFolder = javaProject.getProject().getLocation().toFile(); + + // String srcOutputFolder = "/home/ebousse/Dev/modelCloning/emf/SomeMetamodel/src"; + String srcOutputFolder = new File(emfProjectFolder, "src").getAbsolutePath(); + + // Calling the partial implementations transformer with one tagger + Model originalModel = new EMFImpl2PImpl(javaModel, tagger, true).transform2PImpl(srcOutputFolder); + new EMFImpl2PImpl(originalModel, tagger2, true).transform2PImpl(srcOutputFolder); + + // Generating the code from the obtained model + GenerateJavaExtended javaGenerator = new GenerateJavaExtended(javaModel, new File(srcOutputFolder), + new ArrayList()); + javaGenerator.doGenerate(null); + + // Generating the code from the obtained model + GenerateJavaExtended javaGenerator2 = new GenerateJavaExtended(originalModel, new File(srcOutputFolder), + new ArrayList()); + javaGenerator2.doGenerate(null); + + // Adding a dependency in the manifest + ManifestEditor manEdit= new ManifestEditor(javaProject.getProject()); + manEdit.addDependency("fr.inria.diverse.cloning.runtime"); + manEdit.save(); + + javaProject.getProject().refreshLocal(IResource.DEPTH_INFINITE, null); + + // Done + Log.info("Done !"); + } catch (DiscoveryException e) { + // TODO Bloc catch généré automatiquement + e.printStackTrace(); + } catch (IOException e) { + // TODO Bloc catch généré automatiquement + e.printStackTrace(); + } catch (EMFGenerationException e) { + // TODO Bloc catch généré automatiquement + e.printStackTrace(); + } catch (CoreException e) { + // TODO Bloc catch généré automatiquement + e.printStackTrace(); + } + } + +} diff --git a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/MutClassesOnlyTagger.java b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/MutClassesOnlyTagger.java index 47298f6..c62a95f 100644 --- a/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/MutClassesOnlyTagger.java +++ b/fr.inria.diverse.cloning.materialgenerator/src/fr/inria/diverse/cloning/materialgenerator/tagger/impl/MutClassesOnlyTagger.java @@ -69,12 +69,6 @@ public class MutClassesOnlyTagger extends AbstractTagger { } } -// System.err.println("nb classes: "+vertices.size()); -// int bla = 0; -// for (StronglyConnectedComponent scc : tarjanResult) { -// bla += scc.classes.size(); -// } -// System.err.println("nb processes classes: "+bla); } @@ -85,14 +79,6 @@ public class MutClassesOnlyTagger extends AbstractTagger { */ private void tarjanWithTaggingOnVertex(EClass v) { -// System.out.println("BBBBBBBB "+v.getName()); -// -// if (v.getName().equals("Class701")) { -// System.out.println("xxxxxxxxxxx"); -// System.out.println(v.getEAllReferences().size()); -// } - - // Set the depth index for v to the smallest unused index tarjanIndexes.put(v, tarjanIndex); @@ -118,13 +104,6 @@ public class MutClassesOnlyTagger extends AbstractTagger { } -// if (v.getName().equals("Class701")) { -// System.out.println("yyyyyyyyy"); -// //System.out.println(v.getEAllReferences().size()); -// System.out.println(tarjanLowlinks.get(v)); -// System.out.println(tarjanIndexes.get(v)); -// } - // If v is a root node, pop the stack and generate an SCC if (tarjanLowlinks.get(v).equals(tarjanIndexes.get(v))) { //System.out.println("PLAP"); @@ -148,11 +127,7 @@ public class MutClassesOnlyTagger extends AbstractTagger { // End BONUS tarjanResult.add(scc); - - EClass debug = scc.classes.iterator().next(); - ClassTag bbb = this.classesTags.get(debug); - - System.out.println("AAAAAAA "+debug.getName()+": "+bbb); + } } @@ -278,45 +253,7 @@ public class MutClassesOnlyTagger extends AbstractTagger { } - /* - * - * EClass reachableClass = ref.getEReferenceType(); // If the reached class is not from the current scc AND // - * is mutable, then our scc can reach a mutable if (!scc.classes.contains(reachableClass)) hasReachableMutable = - * isMutable(reachableClass); // If we found that we reach a mutable, no need to // search more if - * (hasReachableMutable) break; } - * - * - * - * } - * - * } - * - * - * - * - * Set roWaitingForResult = new HashSet(); // Do we know yet if we can reach a mutable somewhere - * from th scc ? boolean hasReachableMutable = false; // We look at all classes if the scc for (EClass c : - * scc.classes) { - * - * // First, if still no mutable found, we look for outgoing edges of the scc // Valid because tarjan computes - * the deppest Sccs first. if (!hasReachableMutable) { for (EReference ref : c.getEAllReferences()) { EClass - * reachableClass = ref.getEReferenceType(); // If the reached class is not from the current scc AND // is - * mutable, then our scc can reach a mutable if (!scc.classes.contains(reachableClass)) hasReachableMutable = - * isMutable(reachableClass); // If we found that we reach a mutable, no need to // search more if - * (hasReachableMutable) break; } - * - * } - * - * // Then we compute locally what we can PropertiesMutability localMut = findLocalMutability(c); switch - * (localMut) { case someMutable: hasReachableMutable = true; tags.put(c, ClassTag.partiallyMutable); break; - * case allMutable: hasReachableMutable = true; tags.put(c, ClassTag.completelyMutable); break; case - * noneMutable: if (hasReachableMutable) tags.put(c, ClassTag.canReachMutable); else roWaitingForResult.add(c); - * break; } } - * - * // And finally we compute the readonlys waiting to know if a mut can // be reached for (EClass c : - * roWaitingForResult) { if (hasReachableMutable) tags.put(c, ClassTag.canReachMutable); else tags.put(c, - * ClassTag.completelyReadonly); } - */ + } /* diff --git a/fr.inria.diverse.cloning.runtime/META-INF/MANIFEST.MF b/fr.inria.diverse.cloning.runtime/META-INF/MANIFEST.MF index 1222795..1635a8a 100644 --- a/fr.inria.diverse.cloning.runtime/META-INF/MANIFEST.MF +++ b/fr.inria.diverse.cloning.runtime/META-INF/MANIFEST.MF @@ -4,7 +4,9 @@ Bundle-Name: fr.inria.diverse.cloning.base Bundle-SymbolicName: fr.inria.diverse.cloning.runtime;singleton:=true Bundle-Version: 0.1.0.qualifier Require-Bundle: org.eclipse.emf.ecore, - org.eclipse.emf.ecore.xmi;bundle-version="2.9.1" + org.eclipse.emf.ecore.xmi;bundle-version="2.9.1", + org.eclipse.ui.console, + org.eclipse.jface;bundle-version="3.9.1" Export-Package: fr.inria.diverse.cloning.runtime.cloner, fr.inria.diverse.cloning.runtime.common, fr.inria.diverse.cloning.runtime.emfextension, @@ -13,3 +15,5 @@ Export-Package: fr.inria.diverse.cloning.runtime.cloner, fr.inria.diverse.cloning.runtime.util Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-ClassPath: . +Import-Package: org.eclipse.ui, + org.eclipse.ui.handlers diff --git a/fr.inria.diverse.cloning.runtime/src/fr/inria/diverse/cloning/runtime/util/Log.java b/fr.inria.diverse.cloning.runtime/src/fr/inria/diverse/cloning/runtime/util/Log.java index 26ffcaf..181c657 100644 --- a/fr.inria.diverse.cloning.runtime/src/fr/inria/diverse/cloning/runtime/util/Log.java +++ b/fr.inria.diverse.cloning.runtime/src/fr/inria/diverse/cloning/runtime/util/Log.java @@ -1,5 +1,14 @@ package fr.inria.diverse.cloning.runtime.util; +import java.io.IOException; +import java.io.PrintStream; + +import org.eclipse.ui.console.ConsolePlugin; +import org.eclipse.ui.console.IConsole; +import org.eclipse.ui.console.IConsoleManager; +import org.eclipse.ui.console.MessageConsole; +import org.eclipse.ui.console.MessageConsoleStream; + public class Log { private static int level = 0; private static final String INFO = "INFO."; @@ -7,7 +16,7 @@ public class Log { private static final String DEBUG = "DEBUG"; private static final String ESCCHAR = "\u001b"; private static final int GREEN = 32; - //private static final int RED = 31 + // private static final int RED = 31 private static final int BRIGHTRED = 91; private static final int RESET = 0; private static boolean ansiColoring = false; @@ -16,10 +25,56 @@ public class Log { private static int progress = 0; private static int maxProgress = 0; + private static MessageConsole console; + public static void enableAnsiColoring() { ansiColoring = true; } + private static MessageConsole findConsole(String name) { + ConsolePlugin plugin = ConsolePlugin.getDefault(); + IConsoleManager conMan = plugin.getConsoleManager(); + IConsole[] existing = conMan.getConsoles(); + for (int i = 0; i < existing.length; i++) + if (name.equals(existing[i].getName())) + return (MessageConsole) existing[i]; + // no console found, so create a new one + MessageConsole myConsole = new MessageConsole(name, null); + conMan.addConsoles(new IConsole[] { myConsole }); + return myConsole; + } + + public static void enableEclipseConsole(String consoleName) { + if (console == null) + console = findConsole(consoleName); + } + + private static void printlnStream(PrintStream p, String s) { + if (console == null) { + p.println(s); + } else { + MessageConsoleStream consoleStream = console.newMessageStream(); + try { + + consoleStream.println(s); + consoleStream.close(); + + } catch (IOException e) { + // TODO Bloc catch généré automatiquement + e.printStackTrace(); + } + + } + } + + private static void printlnOut(String s) { + printlnStream(System.out, s); + } + + private static void printlnErr(String s) { + printlnStream(System.err, s); + } + private static String shift() { String shift = ""; int i = 0; @@ -31,8 +86,7 @@ public class Log { private static String color(String str, int color) { if (ansiColoring) { return ESCCHAR + "[" + color + "m" + str + ESCCHAR + "[" + RESET + "m"; - } - else + } else return str; } @@ -42,17 +96,17 @@ public class Log { public static void info(String msg) { if (useProgress) - System.out.println(formatMessage(INFO+computeProgress(), msg)); + printlnOut(formatMessage(INFO + computeProgress(), msg)); else - System.out.println(formatMessage(INFO, msg)); + printlnOut(formatMessage(INFO, msg)); } public static void debug(String msg) { - System.out.println(color(formatMessage(DEBUG, msg), GREEN)); + printlnOut(color(formatMessage(DEBUG, msg), GREEN)); } public static void error(String msg) { - System.err.println(color(formatMessage(ERROR, msg), BRIGHTRED)); + printlnErr(color(formatMessage(ERROR, msg), BRIGHTRED)); } public static void plusLevel() { @@ -62,22 +116,22 @@ public class Log { public static void minusLevel() { level = level - 1; } - + private static String computeProgress() { - double ratio = ((double)progress) / ((double)maxProgress); - return String.valueOf(String.format("%03d", (int)(ratio*100)))+"%"; + double ratio = ((double) progress) / ((double) maxProgress); + return String.valueOf(String.format("%03d", (int) (ratio * 100))) + "%"; } - + public static void enableProgress(int maxValue) { useProgress = true; progress = 0; maxProgress = maxValue; } - + public static void disableProgress() { useProgress = false; } - + public static void incProgress() { progress++; } -- GitLab