From 4cc3271755aee2ee915942af6cf7104c4b47d247 Mon Sep 17 00:00:00 2001 From: IgorFilimonov Date: Tue, 8 Oct 2024 21:26:45 +0300 Subject: [PATCH 01/12] Initial commit --- .../controller/AutomatonGraphController.kt | 23 +-------- .../AutomatonRepresentationController.kt | 29 ++++++++++-- .../view/AdjacencyMatrixTransitionView.kt | 4 +- .../view/AutomatonTableVertexView.kt | 23 +++------ .../constructor/view/AutomatonView.kt | 1 + .../constructor/view/TableTransitionView.kt | 12 +++-- .../view/TransitionTableTransitionView.kt | 8 ++-- .../automaton/AutomatonAdjacencyMatrixView.kt | 3 +- .../view/automaton/AutomatonGraphView.kt | 4 +- .../automaton/AutomatonRepresentationView.kt | 8 ++++ .../view/automaton/AutomatonTableView.kt | 47 ++++++++++++++----- .../automaton/AutomatonTransitionTableView.kt | 3 +- 12 files changed, 97 insertions(+), 68 deletions(-) create mode 100644 src/main/kotlin/automaton/constructor/view/automaton/AutomatonRepresentationView.kt diff --git a/src/main/kotlin/automaton/constructor/controller/AutomatonGraphController.kt b/src/main/kotlin/automaton/constructor/controller/AutomatonGraphController.kt index 604bfbb..7c9b1ce 100644 --- a/src/main/kotlin/automaton/constructor/controller/AutomatonGraphController.kt +++ b/src/main/kotlin/automaton/constructor/controller/AutomatonGraphController.kt @@ -9,7 +9,6 @@ import automaton.constructor.view.* import automaton.constructor.view.automaton.AutomatonGraphView import javafx.geometry.Point2D import javafx.scene.control.ContextMenu -import javafx.scene.input.KeyCode import javafx.scene.input.MouseButton import javafx.scene.shape.Line import tornadofx.* @@ -89,27 +88,7 @@ class AutomatonGraphController(automaton: Automaton, automatonViewContext: Autom newTransitionSource = null } graphView.focusedProperty().onChange { if (!it) newTransitionSource = null } - graphView.setOnKeyPressed { event -> - event.consume() - if (event.code == KeyCode.DELETE && automaton.allowsModificationsByUser) { - automaton.undoRedoManager.group { - selectedElementsViews.forEach { - when (it.automatonElement) { - is AutomatonVertex -> automaton.removeVertex(it.automatonElement) - is Transition -> automaton.removeTransition(it.automatonElement) - } - } - } - clearSelection() - } else if (event.code == KeyCode.A && event.isControlDown) { - clearSelection() - selectedElementsViews.addAll( - graphView.edgeViews.values.flatMap { it.transitionViews } - .onEach { it.selected = true }) - selectedElementsViews.addAll( - graphView.vertexToViewMap.values.onEach { it.selected = true }) - } - } + enableShortcuts(graphView) } fun registerVertexView(automatonVertexView: AutomatonVertexView) { diff --git a/src/main/kotlin/automaton/constructor/controller/AutomatonRepresentationController.kt b/src/main/kotlin/automaton/constructor/controller/AutomatonRepresentationController.kt index e7c6f6a..2690809 100644 --- a/src/main/kotlin/automaton/constructor/controller/AutomatonRepresentationController.kt +++ b/src/main/kotlin/automaton/constructor/controller/AutomatonRepresentationController.kt @@ -4,14 +4,13 @@ import automaton.constructor.model.action.Action import automaton.constructor.model.action.ActionAvailability import automaton.constructor.model.action.ActionFailedException import automaton.constructor.model.automaton.Automaton -import automaton.constructor.model.element.AutomatonElement -import automaton.constructor.model.element.BuildingBlock -import automaton.constructor.model.element.State -import automaton.constructor.model.element.Transition +import automaton.constructor.model.element.* import automaton.constructor.utils.I18N import automaton.constructor.view.AutomatonElementView import automaton.constructor.view.AutomatonViewContext +import automaton.constructor.view.automaton.AutomatonRepresentationView import javafx.scene.control.ContextMenu +import javafx.scene.input.KeyCode import javafx.scene.input.MouseButton import tornadofx.* @@ -118,4 +117,24 @@ open class AutomatonRepresentationController( selectedElementsViews.onEach { it.selected = false }.clear() lastSelectedElement = null } -} \ No newline at end of file + + fun enableShortcuts(automatonView: AutomatonRepresentationView) { + automatonView.setOnKeyPressed { event -> + event.consume() + if (event.code == KeyCode.DELETE && automaton.allowsModificationsByUser) { + automaton.undoRedoManager.group { + selectedElementsViews.forEach { + when (it.automatonElement) { + is AutomatonVertex -> automaton.removeVertex(it.automatonElement) + is Transition -> automaton.removeTransition(it.automatonElement) + } + } + } + clearSelection() + } else if (event.code == KeyCode.A && event.isControlDown) { + clearSelection() + selectedElementsViews.addAll(automatonView.getAllElementsViews().onEach { it.selected = true }) + } + } + } +} diff --git a/src/main/kotlin/automaton/constructor/view/AdjacencyMatrixTransitionView.kt b/src/main/kotlin/automaton/constructor/view/AdjacencyMatrixTransitionView.kt index 4a30baf..904ce26 100644 --- a/src/main/kotlin/automaton/constructor/view/AdjacencyMatrixTransitionView.kt +++ b/src/main/kotlin/automaton/constructor/view/AdjacencyMatrixTransitionView.kt @@ -8,7 +8,7 @@ class AdjacencyMatrixTransitionView(transition: Transition): TableTransitionView init { label { textProperty().bind(transition.propertiesTextBinding) - textFill = Color.BLACK + textFillProperty().bind(colorProperty) } } -} \ No newline at end of file +} diff --git a/src/main/kotlin/automaton/constructor/view/AutomatonTableVertexView.kt b/src/main/kotlin/automaton/constructor/view/AutomatonTableVertexView.kt index 4d3df1c..ba2d0de 100644 --- a/src/main/kotlin/automaton/constructor/view/AutomatonTableVertexView.kt +++ b/src/main/kotlin/automaton/constructor/view/AutomatonTableVertexView.kt @@ -4,19 +4,22 @@ import automaton.constructor.model.element.AutomatonVertex import automaton.constructor.model.element.BuildingBlock import automaton.constructor.model.module.hasProblems import automaton.constructor.model.module.hasProblemsBinding +import automaton.constructor.utils.nonNullObjectBinding +import javafx.beans.binding.Binding import javafx.beans.property.SimpleIntegerProperty import javafx.beans.property.SimpleStringProperty import javafx.scene.paint.Color import tornadofx.* class AutomatonTableVertexView(vertex: AutomatonVertex): AutomatonBasicVertexView(vertex) { - val colourProperty = SimpleStringProperty("none") - private var colour by colourProperty + private val colorBinding: Binding = selectedProperty.nonNullObjectBinding { + if (selected) Color.AQUA else Color.BLACK + } init { hbox { label { textProperty().bind(vertex.nameProperty) - textFill = Color.BLACK + textFillProperty().bind(colorBinding) } val startFinalCount = SimpleIntegerProperty(0) if (vertex.isInitial) { @@ -41,7 +44,7 @@ class AutomatonTableVertexView(vertex: AutomatonVertex): AutomatonBasicVertexVie if (startFinalCount.value == 2) { text = " (start, final)" } - textFill = Color.BLACK + textFillProperty().bind(colorBinding) isVisible = vertex.isInitial || vertex.isFinal } vertex.isInitialProperty.addListener { _, _, newValue -> @@ -76,17 +79,5 @@ class AutomatonTableVertexView(vertex: AutomatonVertex): AutomatonBasicVertexVie } } } - if (vertex is BuildingBlock) { - if (vertex.subAutomaton.hasProblems) { - colour = "red" - } - vertex.subAutomaton.hasProblemsBinding.addListener(ChangeListener { _, _, newValue -> - colour = if (newValue) { - "red" - } else { - "none" - } - }) - } } } diff --git a/src/main/kotlin/automaton/constructor/view/AutomatonView.kt b/src/main/kotlin/automaton/constructor/view/AutomatonView.kt index 0363262..b7fc52c 100644 --- a/src/main/kotlin/automaton/constructor/view/AutomatonView.kt +++ b/src/main/kotlin/automaton/constructor/view/AutomatonView.kt @@ -83,6 +83,7 @@ class AutomatonView(val automaton: Automaton, automatonViewContext: AutomatonVie }) automatonTransitionTableView.controller.lastSelectedElementProperty.addListener(ChangeListener { _, _, newValue -> settingsProperty.set(newValue?.getSettings()) + }) automatonAdjacencyMatrixView.controller.lastSelectedElementProperty.addListener(ChangeListener { _, _, newValue -> settingsProperty.set(newValue?.getSettings()) diff --git a/src/main/kotlin/automaton/constructor/view/TableTransitionView.kt b/src/main/kotlin/automaton/constructor/view/TableTransitionView.kt index 7fd1c07..65a8d66 100644 --- a/src/main/kotlin/automaton/constructor/view/TableTransitionView.kt +++ b/src/main/kotlin/automaton/constructor/view/TableTransitionView.kt @@ -1,13 +1,15 @@ package automaton.constructor.view import automaton.constructor.model.element.Transition -import automaton.constructor.utils.I18N -import automaton.constructor.utils.Setting -import automaton.constructor.utils.SettingGroup -import automaton.constructor.utils.createUnmodifiableSettingControl +import automaton.constructor.utils.* +import javafx.beans.binding.Binding +import javafx.scene.paint.Color import tornadofx.toProperty open class TableTransitionView(val transition: Transition): AutomatonElementView(transition) { + val colorProperty: Binding = selectedProperty.nonNullObjectBinding { + if (selected) Color.AQUA else Color.BLACK + } override fun getSettings() = listOf( SettingGroup( I18N.messages.getString("TransitionView.Transition").toProperty(), listOf( @@ -22,4 +24,4 @@ open class TableTransitionView(val transition: Transition): AutomatonElementView ) ) ) + super.getSettings() -} \ No newline at end of file +} diff --git a/src/main/kotlin/automaton/constructor/view/TransitionTableTransitionView.kt b/src/main/kotlin/automaton/constructor/view/TransitionTableTransitionView.kt index 199eb47..6648741 100644 --- a/src/main/kotlin/automaton/constructor/view/TransitionTableTransitionView.kt +++ b/src/main/kotlin/automaton/constructor/view/TransitionTableTransitionView.kt @@ -9,17 +9,17 @@ class TransitionTableTransitionView(transition: Transition): TableTransitionView hbox { label { textProperty().bind(transition.filtersTextBinding) - textFill = Color.BLACK + textFillProperty().bind(colorProperty) } if (transition.sideEffectsText.isNotEmpty()) { label("→") { - textFill = Color.BLACK + textFillProperty().bind(colorProperty) } label { textProperty().bind(transition.sideEffectsTextBinding) - textFill = Color.BLACK + textFillProperty().bind(colorProperty) } } } } -} \ No newline at end of file +} diff --git a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonAdjacencyMatrixView.kt b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonAdjacencyMatrixView.kt index ce1bdcb..949fab3 100644 --- a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonAdjacencyMatrixView.kt +++ b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonAdjacencyMatrixView.kt @@ -66,6 +66,7 @@ class AutomatonAdjacencyMatrixView( transitionsByVertices.removeAll { it.source == vertex } unregisterColumn( transitionsColumns.columns.find { it.text == vertex.name } as TableColumn>) + super.unregisterVertex(vertex) } override fun registerTransition(transition: Transition) { @@ -83,7 +84,7 @@ class AutomatonAdjacencyMatrixView( val list = this!!.transitions[transition.target]!!.value this.transitions[transition.target]!!.set(list - transition) } - transitionToViewMap.remove(transition) + super.unregisterTransition(transition) } private fun registerColumn(addedColumn: TableColumn>) { diff --git a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonGraphView.kt b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonGraphView.kt index 6464d90..035c9da 100644 --- a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonGraphView.kt +++ b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonGraphView.kt @@ -20,7 +20,7 @@ import tornadofx.add import tornadofx.fitToParentSize import kotlin.collections.set -class AutomatonGraphView(val automaton: Automaton, private val automatonViewContext: AutomatonViewContext) : Pane() { +class AutomatonGraphView(val automaton: Automaton, private val automatonViewContext: AutomatonViewContext) : AutomatonRepresentationView() { private val edgePane = subPane() val edgeViews = mutableMapOf, AutomatonEdgeView>() val vertexToViewMap = mutableMapOf() @@ -43,6 +43,8 @@ class AutomatonGraphView(val automaton: Automaton, private val automatonViewCont controller.clearSelection() } + override fun getAllElementsViews() = edgeViews.values.flatMap { it.transitionViews } + vertexToViewMap.values + private fun registerVertex(vertex: AutomatonVertex) { val automatonVertexView = AutomatonVertexView(vertex) controller.registerVertexView(automatonVertexView) diff --git a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonRepresentationView.kt b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonRepresentationView.kt new file mode 100644 index 0000000..cbc7295 --- /dev/null +++ b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonRepresentationView.kt @@ -0,0 +1,8 @@ +package automaton.constructor.view.automaton + +import automaton.constructor.view.AutomatonElementView +import javafx.scene.layout.Pane + +abstract class AutomatonRepresentationView: Pane() { + abstract fun getAllElementsViews(): List +} diff --git a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTableView.kt b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTableView.kt index 477d8fb..ed8c6ab 100644 --- a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTableView.kt +++ b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTableView.kt @@ -7,9 +7,12 @@ import automaton.constructor.model.data.addContent import automaton.constructor.model.element.AutomatonVertex import automaton.constructor.model.element.BuildingBlock import automaton.constructor.model.element.Transition +import automaton.constructor.model.module.hasProblems +import automaton.constructor.model.module.hasProblemsBinding import automaton.constructor.utils.I18N import automaton.constructor.utils.addOnSuccess import automaton.constructor.utils.hoverableTooltip +import automaton.constructor.view.AutomatonElementView import automaton.constructor.view.AutomatonTableVertexView import automaton.constructor.view.AutomatonViewContext import automaton.constructor.view.TableTransitionView @@ -23,6 +26,7 @@ import javafx.scene.control.TableCell import javafx.scene.control.TableColumn import javafx.scene.control.TableView import javafx.scene.control.cell.PropertyValueFactory +import javafx.scene.input.KeyCode import javafx.scene.input.MouseButton import javafx.scene.layout.Pane import javafx.scene.layout.VBox @@ -35,9 +39,6 @@ interface TransitionMap class VertexCell( private val table: AutomatonTableView ): TableCell() { - private val colourProperty = SimpleStringProperty("") - private var colour by colourProperty - private fun registerVertex(vertex: AutomatonVertex): AutomatonTableVertexView { val vertexView = AutomatonTableVertexView(vertex) table.controller.registerAutomatonElementView(vertexView) @@ -54,18 +55,27 @@ class VertexCell( } } } + table.vertexToViewMap[vertex] = vertexView return vertexView } override fun updateItem(item: AutomatonVertex?, empty: Boolean) { super.updateItem(item, empty) + this.style = "-fx-background-color: none;" if (item != null) { val vertexView = registerVertex(item) - colourProperty.bind(vertexView.colourProperty) - this.style = "-fx-background-color: ${colour};" - colourProperty.addListener(ChangeListener { _, _, newValue -> - this.style = "-fx-background-color: ${newValue};" - }) + if (item is BuildingBlock) { + if (item.subAutomaton.hasProblems) { + this.style = "-fx-background-color: red;" + } + item.subAutomaton.hasProblemsBinding.addListener { _, _, newValue -> + if (newValue) { + this.style = "-fx-background-color: red;" + } else { + this.style = "-fx-background-color: none;" + } + } + } graphic = vertexView } else { this.style = "-fx-background-color: none;" @@ -139,12 +149,13 @@ abstract class AutomatonTableView( val automatonViewContext: AutomatonViewContext, private val tablePrefWidth: ReadOnlyDoubleProperty, private val tablePrefHeight: ReadOnlyDoubleProperty -): Pane() { +): AutomatonRepresentationView() { val transitionsByVertices = observableListOf() val table = TableView(transitionsByVertices) val sourceColumn = TableColumn() val controller = AutomatonRepresentationController(automaton, automatonViewContext) val transitionToViewMap = mutableMapOf() + val vertexToViewMap = mutableMapOf() init { automaton.vertices.addListener(SetChangeListener { if (it.wasRemoved()) { @@ -226,17 +237,31 @@ abstract class AutomatonTableView( table.setOnMouseClicked { if (it.button == MouseButton.PRIMARY) controller.clearSelection() } + table.selectionModel = null + table.setOnKeyPressed { event -> + if (event.code == KeyCode.A && event.isControlDown) { // AutomatonTableView can't consume this event for some reason + controller.clearSelection() + controller.selectedElementsViews.addAll(getAllElementsViews().onEach { it.selected = true }) + } + } + controller.enableShortcuts(this) table.style { fontSize = 16.0.px } } - abstract fun unregisterVertex(vertex: AutomatonVertex) + override fun getAllElementsViews(): List = vertexToViewMap.values + transitionToViewMap.values + + open fun unregisterVertex(vertex: AutomatonVertex) { + vertexToViewMap.remove(vertex) + } abstract fun registerTransition(transition: Transition) - abstract fun unregisterTransition(transition: Transition) + open fun unregisterTransition(transition: Transition) { + transitionToViewMap.remove(transition) + } fun enableProperResizing() { table.prefWidthProperty().bind(tablePrefWidth) diff --git a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTransitionTableView.kt b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTransitionTableView.kt index 93777c1..183ff05 100644 --- a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTransitionTableView.kt +++ b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTransitionTableView.kt @@ -45,6 +45,7 @@ class AutomatonTransitionTableView( override fun unregisterVertex(vertex: AutomatonVertex) { transitionsByVertices.removeAll { it.source == vertex } + super.unregisterVertex(vertex) } override fun registerTransition(transition: Transition) { @@ -56,7 +57,7 @@ class AutomatonTransitionTableView( override fun unregisterTransition(transition: Transition) { deleteTransitionFromTable(transition) - transitionToViewMap.remove(transition) + super.unregisterTransition(transition) } private fun addTransitionToTable(transition: Transition) { From a0104e2d80cafd09cac24f99cbc7a05b348526be Mon Sep 17 00:00:00 2001 From: IgorFilimonov Date: Wed, 9 Oct 2024 19:36:24 +0300 Subject: [PATCH 02/12] Didnt come up with anything better than stash and reset --- README.md | 2 -- .../algorithms/HellingsAlgoController.kt | 16 ++++++++++------ .../constructor/view/AutomatonBasicVertexView.kt | 6 ------ .../automaton/constructor/view/AutomatonView.kt | 8 ++++++-- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 7d87d79..ca28f49 100644 --- a/README.md +++ b/README.md @@ -92,5 +92,3 @@ the following classifiers are supported: `win`, `linux`, `mac`, `win-x86`, `linu ## License The Automata Constructor is licensed under the Apache-2.0 license, as detailed in the [LICENSE](LICENSE) file. - - diff --git a/src/main/kotlin/automaton/constructor/controller/algorithms/HellingsAlgoController.kt b/src/main/kotlin/automaton/constructor/controller/algorithms/HellingsAlgoController.kt index c2f5b2f..c405358 100644 --- a/src/main/kotlin/automaton/constructor/controller/algorithms/HellingsAlgoController.kt +++ b/src/main/kotlin/automaton/constructor/controller/algorithms/HellingsAlgoController.kt @@ -43,7 +43,8 @@ class HellingsAlgoController( it.rightSide.size == 1 && it.rightSide[0] is Terminal && it.rightSide[0].getSymbol() == transition.propetiesText } productions.forEach { - val newHellingsTransition = HellingsTransition(it.leftSide, transition.source, + val newHellingsTransition = HellingsTransition( + it.leftSide, transition.source, transition.target, SimpleBooleanProperty(false) ) currentTransitions.add(newHellingsTransition) @@ -52,7 +53,8 @@ class HellingsAlgoController( } if (grammar.productions.any { it.leftSide == grammar.initialNonterminal && it.rightSide.isEmpty() }) { openedAutomaton.vertices.forEach { - val newHellingsTransition = HellingsTransition(grammar.initialNonterminal, it, it, + val newHellingsTransition = HellingsTransition( + grammar.initialNonterminal, it, it, SimpleBooleanProperty(false) ) currentTransitions.add(newHellingsTransition) @@ -66,10 +68,12 @@ class HellingsAlgoController( val allTransitions = observableListOf() prepareForExecution(currentTransitions, allTransitions) - val hellingsAlgoExecutionWindow = find(mapOf( - HellingsAlgoExecutionView::currentTransitions to currentTransitions, - HellingsAlgoExecutionView::allTransitions to allTransitions - )).apply { title = I18N.messages.getString("HellingsAlgorithm.Execution.Title") } + val hellingsAlgoExecutionWindow = find( + mapOf( + HellingsAlgoExecutionView::currentTransitions to currentTransitions, + HellingsAlgoExecutionView::allTransitions to allTransitions + ) + ).apply { title = I18N.messages.getString("HellingsAlgorithm.Execution.Title") } hellingsAlgoExecutionWindow.openWindow() find(mapOf(CFGView::grammar to grammar)).apply { title = I18N.messages.getString("CFGView.Title") diff --git a/src/main/kotlin/automaton/constructor/view/AutomatonBasicVertexView.kt b/src/main/kotlin/automaton/constructor/view/AutomatonBasicVertexView.kt index 31deb62..abe84d4 100644 --- a/src/main/kotlin/automaton/constructor/view/AutomatonBasicVertexView.kt +++ b/src/main/kotlin/automaton/constructor/view/AutomatonBasicVertexView.kt @@ -1,17 +1,11 @@ package automaton.constructor.view import automaton.constructor.model.element.AutomatonVertex -import automaton.constructor.model.element.BuildingBlock -import automaton.constructor.model.module.hasProblems -import automaton.constructor.model.module.hasProblemsBinding import automaton.constructor.utils.I18N import automaton.constructor.utils.Setting import automaton.constructor.utils.SettingGroup -import javafx.beans.property.SimpleIntegerProperty -import javafx.beans.property.SimpleStringProperty import javafx.scene.control.CheckBox import javafx.scene.control.TextField -import javafx.scene.paint.Color import tornadofx.* open class AutomatonBasicVertexView(val vertex: AutomatonVertex) : AutomatonElementView(vertex) { diff --git a/src/main/kotlin/automaton/constructor/view/AutomatonView.kt b/src/main/kotlin/automaton/constructor/view/AutomatonView.kt index 0363262..d0e6a55 100644 --- a/src/main/kotlin/automaton/constructor/view/AutomatonView.kt +++ b/src/main/kotlin/automaton/constructor/view/AutomatonView.kt @@ -95,14 +95,18 @@ class AutomatonView(val automaton: Automaton, automatonViewContext: AutomatonVie label { isWrapText = true layoutXProperty().bind(this@AutomatonView.widthProperty() - widthProperty() - 10.0) - maxWidthProperty().bind(this@AutomatonView.widthProperty() - settingsEditor.widthProperty() - 20.0) + val tabWidth = 700.0 + maxWidthProperty().bind(this@AutomatonView.widthProperty() - tabWidth - 20.0) + maxHeight = 30.0 font = Font.font(16.0) textProperty().bind(automaton.descriptionBinding) visibleWhen(automaton.isOutputOfTransformationProperty.booleanBinding { it == null }) } label { layoutXProperty().bind(this@AutomatonView.widthProperty() - widthProperty() - 10.0) - layoutYProperty().bind(this@AutomatonView.heightProperty() - heightProperty()) + layoutYProperty().bind(this@AutomatonView.heightProperty() - heightProperty() - 45.0) + val buttonsWidth = 700.0 + maxWidthProperty().bind(this@AutomatonView.widthProperty() - buttonsWidth - 20.0) font = Font.font(16.0) textFill = Color.DARKRED textAlignment = TextAlignment.RIGHT From eea411c73b7fbde3b6ec4fb5ce2496986b09f80a Mon Sep 17 00:00:00 2001 From: IgorFilimonov Date: Wed, 9 Oct 2024 22:07:59 +0300 Subject: [PATCH 03/12] Now transitions view are inherited from BasicTransitionView --- .../constructor/view/BasicTransitionView.kt | 25 +++++++++++++++++++ .../constructor/view/TableTransitionView.kt | 22 +--------------- .../constructor/view/TransitionView.kt | 19 ++------------ 3 files changed, 28 insertions(+), 38 deletions(-) create mode 100644 src/main/kotlin/automaton/constructor/view/BasicTransitionView.kt diff --git a/src/main/kotlin/automaton/constructor/view/BasicTransitionView.kt b/src/main/kotlin/automaton/constructor/view/BasicTransitionView.kt new file mode 100644 index 0000000..9e5c5f3 --- /dev/null +++ b/src/main/kotlin/automaton/constructor/view/BasicTransitionView.kt @@ -0,0 +1,25 @@ +package automaton.constructor.view + +import automaton.constructor.model.element.Transition +import automaton.constructor.utils.I18N +import automaton.constructor.utils.Setting +import automaton.constructor.utils.SettingGroup +import automaton.constructor.utils.createUnmodifiableSettingControl +import tornadofx.toProperty + +open class BasicTransitionView(val transition: Transition): AutomatonElementView(transition) { + override fun getSettings() = listOf( + SettingGroup( + I18N.messages.getString("TransitionView.Transition").toProperty(), listOf( + Setting( + I18N.messages.getString("TransitionView.Source"), + createUnmodifiableSettingControl(transition.source.nameProperty) + ), + Setting( + I18N.messages.getString("TransitionView.Target"), + createUnmodifiableSettingControl(transition.target.nameProperty) + ) + ) + ) + ) + super.getSettings() +} diff --git a/src/main/kotlin/automaton/constructor/view/TableTransitionView.kt b/src/main/kotlin/automaton/constructor/view/TableTransitionView.kt index 7fd1c07..73f203e 100644 --- a/src/main/kotlin/automaton/constructor/view/TableTransitionView.kt +++ b/src/main/kotlin/automaton/constructor/view/TableTransitionView.kt @@ -1,25 +1,5 @@ package automaton.constructor.view import automaton.constructor.model.element.Transition -import automaton.constructor.utils.I18N -import automaton.constructor.utils.Setting -import automaton.constructor.utils.SettingGroup -import automaton.constructor.utils.createUnmodifiableSettingControl -import tornadofx.toProperty -open class TableTransitionView(val transition: Transition): AutomatonElementView(transition) { - override fun getSettings() = listOf( - SettingGroup( - I18N.messages.getString("TransitionView.Transition").toProperty(), listOf( - Setting( - I18N.messages.getString("TransitionView.Source"), - createUnmodifiableSettingControl(transition.source.nameProperty) - ), - Setting( - I18N.messages.getString("TransitionView.Target"), - createUnmodifiableSettingControl(transition.target.nameProperty) - ) - ) - ) - ) + super.getSettings() -} \ No newline at end of file +open class TableTransitionView(transition: Transition): BasicTransitionView(transition) diff --git a/src/main/kotlin/automaton/constructor/view/TransitionView.kt b/src/main/kotlin/automaton/constructor/view/TransitionView.kt index 7b1e162..e85773b 100644 --- a/src/main/kotlin/automaton/constructor/view/TransitionView.kt +++ b/src/main/kotlin/automaton/constructor/view/TransitionView.kt @@ -9,9 +9,9 @@ import javafx.scene.text.Font import tornadofx.* class TransitionView( - val transition: Transition, + transition: Transition, index: Int -) : AutomatonElementView(transition) { +) : BasicTransitionView(transition) { val indexProperty = index.toProperty() var index by indexProperty val xProperty: DoubleProperty @@ -21,21 +21,6 @@ class TransitionView( if (selected) Color.BLUE else Color.BLACK } - override fun getSettings() = listOf( - SettingGroup( - I18N.messages.getString("TransitionView.Transition").toProperty(), listOf( - Setting( - I18N.messages.getString("TransitionView.Source"), - createUnmodifiableSettingControl(transition.source.nameProperty) - ), - Setting( - I18N.messages.getString("TransitionView.Target"), - createUnmodifiableSettingControl(transition.target.nameProperty) - ) - ) - ) - ) + super.getSettings() - init { val text = text { fillProperty().bind(colorProperty) From 72b4eb871d995cbaaede72a3447be1e56ceb53d6 Mon Sep 17 00:00:00 2001 From: IgorFilimonov Date: Thu, 10 Oct 2024 18:23:12 +0300 Subject: [PATCH 04/12] Separated elements views from the others --- .../constructor/controller/AutomatonGraphController.kt | 2 ++ .../automaton/constructor/view/AutomatonEdgeView.kt | 8 +++++--- .../view/automaton/AutomatonAdjacencyMatrixView.kt | 2 +- .../constructor/view/automaton/AutomatonGraphView.kt | 2 +- .../constructor/view/automaton/AutomatonTableView.kt | 4 ++-- .../view/automaton/AutomatonTransitionTableView.kt | 2 +- .../{ => elements/transition}/BasicTransitionView.kt | 3 ++- .../{ => elements/transition}/TableTransitionView.kt | 3 ++- .../transition}/TransitionTableTransitionView.kt | 4 ++-- .../view/{ => elements/transition}/TransitionView.kt | 3 ++- .../vertex}/AdjacencyMatrixTransitionView.kt | 5 +++-- .../{ => elements/vertex}/AutomatonBasicVertexView.kt | 9 ++------- .../{ => elements/vertex}/AutomatonTableVertexView.kt | 2 +- .../view/{ => elements/vertex}/AutomatonVertexView.kt | 7 ++++--- .../view/module/executor/tree/ExecutionNodeView.kt | 2 +- 15 files changed, 31 insertions(+), 27 deletions(-) rename src/main/kotlin/automaton/constructor/view/{ => elements/transition}/BasicTransitionView.kt (89%) rename src/main/kotlin/automaton/constructor/view/{ => elements/transition}/TableTransitionView.kt (52%) rename src/main/kotlin/automaton/constructor/view/{ => elements/transition}/TransitionTableTransitionView.kt (92%) rename src/main/kotlin/automaton/constructor/view/{ => elements/transition}/TransitionView.kt (88%) rename src/main/kotlin/automaton/constructor/view/{ => elements/vertex}/AdjacencyMatrixTransitionView.kt (73%) rename src/main/kotlin/automaton/constructor/view/{ => elements/vertex}/AutomatonBasicVertexView.kt (78%) rename src/main/kotlin/automaton/constructor/view/{ => elements/vertex}/AutomatonTableVertexView.kt (98%) rename src/main/kotlin/automaton/constructor/view/{ => elements/vertex}/AutomatonVertexView.kt (94%) diff --git a/src/main/kotlin/automaton/constructor/controller/AutomatonGraphController.kt b/src/main/kotlin/automaton/constructor/controller/AutomatonGraphController.kt index 604bfbb..d6cfb52 100644 --- a/src/main/kotlin/automaton/constructor/controller/AutomatonGraphController.kt +++ b/src/main/kotlin/automaton/constructor/controller/AutomatonGraphController.kt @@ -7,6 +7,8 @@ import automaton.constructor.model.element.* import automaton.constructor.utils.* import automaton.constructor.view.* import automaton.constructor.view.automaton.AutomatonGraphView +import automaton.constructor.view.elements.vertex.AutomatonVertexView +import automaton.constructor.view.elements.transition.TransitionView import javafx.geometry.Point2D import javafx.scene.control.ContextMenu import javafx.scene.input.KeyCode diff --git a/src/main/kotlin/automaton/constructor/view/AutomatonEdgeView.kt b/src/main/kotlin/automaton/constructor/view/AutomatonEdgeView.kt index 6e7812c..294831f 100644 --- a/src/main/kotlin/automaton/constructor/view/AutomatonEdgeView.kt +++ b/src/main/kotlin/automaton/constructor/view/AutomatonEdgeView.kt @@ -4,9 +4,11 @@ import automaton.constructor.model.element.AutomatonEdge import automaton.constructor.model.element.AutomatonVertex.Companion.RADIUS import automaton.constructor.model.element.Transition import automaton.constructor.utils.* -import automaton.constructor.view.AutomatonVertexView.ShapeType -import automaton.constructor.view.AutomatonVertexView.ShapeType.CIRCLE -import automaton.constructor.view.AutomatonVertexView.ShapeType.SQUARE +import automaton.constructor.view.elements.vertex.AutomatonVertexView +import automaton.constructor.view.elements.vertex.AutomatonVertexView.ShapeType +import automaton.constructor.view.elements.vertex.AutomatonVertexView.ShapeType.CIRCLE +import automaton.constructor.view.elements.vertex.AutomatonVertexView.ShapeType.SQUARE +import automaton.constructor.view.elements.transition.TransitionView import javafx.beans.binding.Bindings.isNotNull import javafx.beans.value.ObservableBooleanValue import javafx.beans.value.ObservableDoubleValue diff --git a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonAdjacencyMatrixView.kt b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonAdjacencyMatrixView.kt index ce1bdcb..b1da3a2 100644 --- a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonAdjacencyMatrixView.kt +++ b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonAdjacencyMatrixView.kt @@ -4,7 +4,7 @@ import automaton.constructor.model.automaton.Automaton import automaton.constructor.model.element.AutomatonVertex import automaton.constructor.model.element.Transition import automaton.constructor.utils.I18N -import automaton.constructor.view.AdjacencyMatrixTransitionView +import automaton.constructor.view.elements.vertex.AdjacencyMatrixTransitionView import automaton.constructor.view.AutomatonViewContext import javafx.beans.property.ReadOnlyDoubleProperty import javafx.beans.property.SimpleObjectProperty diff --git a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonGraphView.kt b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonGraphView.kt index 6464d90..97e5140 100644 --- a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonGraphView.kt +++ b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonGraphView.kt @@ -10,7 +10,7 @@ import automaton.constructor.model.element.State import automaton.constructor.utils.hoverableTooltip import automaton.constructor.utils.subPane import automaton.constructor.view.AutomatonEdgeView -import automaton.constructor.view.AutomatonVertexView +import automaton.constructor.view.elements.vertex.AutomatonVertexView import automaton.constructor.view.AutomatonViewContext import automaton.constructor.view.module.executor.executionStatesTooltip import javafx.collections.MapChangeListener diff --git a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTableView.kt b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTableView.kt index 477d8fb..0c8f240 100644 --- a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTableView.kt +++ b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTableView.kt @@ -10,9 +10,9 @@ import automaton.constructor.model.element.Transition import automaton.constructor.utils.I18N import automaton.constructor.utils.addOnSuccess import automaton.constructor.utils.hoverableTooltip -import automaton.constructor.view.AutomatonTableVertexView +import automaton.constructor.view.elements.vertex.AutomatonTableVertexView import automaton.constructor.view.AutomatonViewContext -import automaton.constructor.view.TableTransitionView +import automaton.constructor.view.elements.transition.TableTransitionView import javafx.beans.property.ReadOnlyDoubleProperty import javafx.beans.property.SimpleObjectProperty import javafx.beans.property.SimpleStringProperty diff --git a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTransitionTableView.kt b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTransitionTableView.kt index 93777c1..ea68f1f 100644 --- a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTransitionTableView.kt +++ b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTransitionTableView.kt @@ -5,7 +5,7 @@ import automaton.constructor.model.element.AutomatonVertex import automaton.constructor.model.element.Transition import automaton.constructor.utils.I18N import automaton.constructor.view.AutomatonViewContext -import automaton.constructor.view.TransitionTableTransitionView +import automaton.constructor.view.elements.transition.TransitionTableTransitionView import javafx.beans.property.ReadOnlyDoubleProperty import javafx.beans.property.SimpleObjectProperty import javafx.scene.control.* diff --git a/src/main/kotlin/automaton/constructor/view/BasicTransitionView.kt b/src/main/kotlin/automaton/constructor/view/elements/transition/BasicTransitionView.kt similarity index 89% rename from src/main/kotlin/automaton/constructor/view/BasicTransitionView.kt rename to src/main/kotlin/automaton/constructor/view/elements/transition/BasicTransitionView.kt index 9e5c5f3..80b0e70 100644 --- a/src/main/kotlin/automaton/constructor/view/BasicTransitionView.kt +++ b/src/main/kotlin/automaton/constructor/view/elements/transition/BasicTransitionView.kt @@ -1,10 +1,11 @@ -package automaton.constructor.view +package automaton.constructor.view.elements.transition import automaton.constructor.model.element.Transition import automaton.constructor.utils.I18N import automaton.constructor.utils.Setting import automaton.constructor.utils.SettingGroup import automaton.constructor.utils.createUnmodifiableSettingControl +import automaton.constructor.view.AutomatonElementView import tornadofx.toProperty open class BasicTransitionView(val transition: Transition): AutomatonElementView(transition) { diff --git a/src/main/kotlin/automaton/constructor/view/TableTransitionView.kt b/src/main/kotlin/automaton/constructor/view/elements/transition/TableTransitionView.kt similarity index 52% rename from src/main/kotlin/automaton/constructor/view/TableTransitionView.kt rename to src/main/kotlin/automaton/constructor/view/elements/transition/TableTransitionView.kt index 73f203e..9717589 100644 --- a/src/main/kotlin/automaton/constructor/view/TableTransitionView.kt +++ b/src/main/kotlin/automaton/constructor/view/elements/transition/TableTransitionView.kt @@ -1,5 +1,6 @@ -package automaton.constructor.view +package automaton.constructor.view.elements.transition import automaton.constructor.model.element.Transition +import automaton.constructor.view.elements.transition.BasicTransitionView open class TableTransitionView(transition: Transition): BasicTransitionView(transition) diff --git a/src/main/kotlin/automaton/constructor/view/TransitionTableTransitionView.kt b/src/main/kotlin/automaton/constructor/view/elements/transition/TransitionTableTransitionView.kt similarity index 92% rename from src/main/kotlin/automaton/constructor/view/TransitionTableTransitionView.kt rename to src/main/kotlin/automaton/constructor/view/elements/transition/TransitionTableTransitionView.kt index 199eb47..85a3a83 100644 --- a/src/main/kotlin/automaton/constructor/view/TransitionTableTransitionView.kt +++ b/src/main/kotlin/automaton/constructor/view/elements/transition/TransitionTableTransitionView.kt @@ -1,4 +1,4 @@ -package automaton.constructor.view +package automaton.constructor.view.elements.transition import automaton.constructor.model.element.Transition import javafx.scene.paint.Color @@ -22,4 +22,4 @@ class TransitionTableTransitionView(transition: Transition): TableTransitionView } } } -} \ No newline at end of file +} diff --git a/src/main/kotlin/automaton/constructor/view/TransitionView.kt b/src/main/kotlin/automaton/constructor/view/elements/transition/TransitionView.kt similarity index 88% rename from src/main/kotlin/automaton/constructor/view/TransitionView.kt rename to src/main/kotlin/automaton/constructor/view/elements/transition/TransitionView.kt index e85773b..76db5fe 100644 --- a/src/main/kotlin/automaton/constructor/view/TransitionView.kt +++ b/src/main/kotlin/automaton/constructor/view/elements/transition/TransitionView.kt @@ -1,7 +1,8 @@ -package automaton.constructor.view +package automaton.constructor.view.elements.transition import automaton.constructor.model.element.Transition import automaton.constructor.utils.* +import automaton.constructor.view.elements.transition.BasicTransitionView import javafx.beans.binding.Binding import javafx.beans.property.DoubleProperty import javafx.scene.paint.Color diff --git a/src/main/kotlin/automaton/constructor/view/AdjacencyMatrixTransitionView.kt b/src/main/kotlin/automaton/constructor/view/elements/vertex/AdjacencyMatrixTransitionView.kt similarity index 73% rename from src/main/kotlin/automaton/constructor/view/AdjacencyMatrixTransitionView.kt rename to src/main/kotlin/automaton/constructor/view/elements/vertex/AdjacencyMatrixTransitionView.kt index 4a30baf..628f801 100644 --- a/src/main/kotlin/automaton/constructor/view/AdjacencyMatrixTransitionView.kt +++ b/src/main/kotlin/automaton/constructor/view/elements/vertex/AdjacencyMatrixTransitionView.kt @@ -1,6 +1,7 @@ -package automaton.constructor.view +package automaton.constructor.view.elements.vertex import automaton.constructor.model.element.Transition +import automaton.constructor.view.elements.transition.TableTransitionView import javafx.scene.paint.Color import tornadofx.label @@ -11,4 +12,4 @@ class AdjacencyMatrixTransitionView(transition: Transition): TableTransitionView textFill = Color.BLACK } } -} \ No newline at end of file +} diff --git a/src/main/kotlin/automaton/constructor/view/AutomatonBasicVertexView.kt b/src/main/kotlin/automaton/constructor/view/elements/vertex/AutomatonBasicVertexView.kt similarity index 78% rename from src/main/kotlin/automaton/constructor/view/AutomatonBasicVertexView.kt rename to src/main/kotlin/automaton/constructor/view/elements/vertex/AutomatonBasicVertexView.kt index 31deb62..cafaf00 100644 --- a/src/main/kotlin/automaton/constructor/view/AutomatonBasicVertexView.kt +++ b/src/main/kotlin/automaton/constructor/view/elements/vertex/AutomatonBasicVertexView.kt @@ -1,17 +1,12 @@ -package automaton.constructor.view +package automaton.constructor.view.elements.vertex import automaton.constructor.model.element.AutomatonVertex -import automaton.constructor.model.element.BuildingBlock -import automaton.constructor.model.module.hasProblems -import automaton.constructor.model.module.hasProblemsBinding import automaton.constructor.utils.I18N import automaton.constructor.utils.Setting import automaton.constructor.utils.SettingGroup -import javafx.beans.property.SimpleIntegerProperty -import javafx.beans.property.SimpleStringProperty +import automaton.constructor.view.AutomatonElementView import javafx.scene.control.CheckBox import javafx.scene.control.TextField -import javafx.scene.paint.Color import tornadofx.* open class AutomatonBasicVertexView(val vertex: AutomatonVertex) : AutomatonElementView(vertex) { diff --git a/src/main/kotlin/automaton/constructor/view/AutomatonTableVertexView.kt b/src/main/kotlin/automaton/constructor/view/elements/vertex/AutomatonTableVertexView.kt similarity index 98% rename from src/main/kotlin/automaton/constructor/view/AutomatonTableVertexView.kt rename to src/main/kotlin/automaton/constructor/view/elements/vertex/AutomatonTableVertexView.kt index 4d3df1c..edfe375 100644 --- a/src/main/kotlin/automaton/constructor/view/AutomatonTableVertexView.kt +++ b/src/main/kotlin/automaton/constructor/view/elements/vertex/AutomatonTableVertexView.kt @@ -1,4 +1,4 @@ -package automaton.constructor.view +package automaton.constructor.view.elements.vertex import automaton.constructor.model.element.AutomatonVertex import automaton.constructor.model.element.BuildingBlock diff --git a/src/main/kotlin/automaton/constructor/view/AutomatonVertexView.kt b/src/main/kotlin/automaton/constructor/view/elements/vertex/AutomatonVertexView.kt similarity index 94% rename from src/main/kotlin/automaton/constructor/view/AutomatonVertexView.kt rename to src/main/kotlin/automaton/constructor/view/elements/vertex/AutomatonVertexView.kt index 55cfd79..af62b57 100644 --- a/src/main/kotlin/automaton/constructor/view/AutomatonVertexView.kt +++ b/src/main/kotlin/automaton/constructor/view/elements/vertex/AutomatonVertexView.kt @@ -1,4 +1,4 @@ -package automaton.constructor.view +package automaton.constructor.view.elements.vertex import automaton.constructor.model.element.AutomatonVertex import automaton.constructor.model.element.AutomatonVertex.Companion.RADIUS @@ -7,8 +7,9 @@ import automaton.constructor.model.element.State import automaton.constructor.model.module.hasProblems import automaton.constructor.model.module.hasProblemsBinding import automaton.constructor.utils.* -import automaton.constructor.view.AutomatonVertexView.ShapeType.CIRCLE -import automaton.constructor.view.AutomatonVertexView.ShapeType.SQUARE +import automaton.constructor.view.elements.vertex.AutomatonVertexView.ShapeType.CIRCLE +import automaton.constructor.view.elements.vertex.AutomatonVertexView.ShapeType.SQUARE +import automaton.constructor.view.elements.vertex.AutomatonBasicVertexView import javafx.beans.property.Property import javafx.geometry.Point2D import javafx.geometry.VPos diff --git a/src/main/kotlin/automaton/constructor/view/module/executor/tree/ExecutionNodeView.kt b/src/main/kotlin/automaton/constructor/view/module/executor/tree/ExecutionNodeView.kt index 21bfc20..364f6e2 100644 --- a/src/main/kotlin/automaton/constructor/view/module/executor/tree/ExecutionNodeView.kt +++ b/src/main/kotlin/automaton/constructor/view/module/executor/tree/ExecutionNodeView.kt @@ -6,7 +6,7 @@ import automaton.constructor.model.module.executor.SimpleExecutionState import automaton.constructor.model.module.executor.SuperExecutionState import automaton.constructor.utils.* import automaton.constructor.view.AutomatonEdgeView -import automaton.constructor.view.AutomatonVertexView +import automaton.constructor.view.elements.vertex.AutomatonVertexView import automaton.constructor.view.TransitionLabelPosition import automaton.constructor.view.module.executor.color import automaton.constructor.view.module.executor.simpleTooltipContent From 73737306169bf07c743316249f3f4faed3dfeb3b Mon Sep 17 00:00:00 2001 From: IgorFilimonov Date: Thu, 10 Oct 2024 18:43:09 +0300 Subject: [PATCH 05/12] Optimized imports --- .../constructor/view/elements/vertex/AutomatonVertexView.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/automaton/constructor/view/elements/vertex/AutomatonVertexView.kt b/src/main/kotlin/automaton/constructor/view/elements/vertex/AutomatonVertexView.kt index af62b57..a21d31a 100644 --- a/src/main/kotlin/automaton/constructor/view/elements/vertex/AutomatonVertexView.kt +++ b/src/main/kotlin/automaton/constructor/view/elements/vertex/AutomatonVertexView.kt @@ -6,10 +6,11 @@ import automaton.constructor.model.element.BuildingBlock import automaton.constructor.model.element.State import automaton.constructor.model.module.hasProblems import automaton.constructor.model.module.hasProblemsBinding -import automaton.constructor.utils.* +import automaton.constructor.utils.nonNullObjectBinding +import automaton.constructor.utils.x +import automaton.constructor.utils.y import automaton.constructor.view.elements.vertex.AutomatonVertexView.ShapeType.CIRCLE import automaton.constructor.view.elements.vertex.AutomatonVertexView.ShapeType.SQUARE -import automaton.constructor.view.elements.vertex.AutomatonBasicVertexView import javafx.beans.property.Property import javafx.geometry.Point2D import javafx.geometry.VPos From 36f0ea43e0053594dc3062e0a50cbab82036dfac Mon Sep 17 00:00:00 2001 From: IgorFilimonov Date: Thu, 10 Oct 2024 19:27:44 +0300 Subject: [PATCH 06/12] Now there's controller in AutomatonRepresentationView --- .../automaton/constructor/view/automaton/AutomatonGraphView.kt | 2 +- .../constructor/view/automaton/AutomatonRepresentationView.kt | 2 ++ .../automaton/constructor/view/automaton/AutomatonTableView.kt | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonGraphView.kt b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonGraphView.kt index 035c9da..6c92bc6 100644 --- a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonGraphView.kt +++ b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonGraphView.kt @@ -24,7 +24,7 @@ class AutomatonGraphView(val automaton: Automaton, private val automatonViewCont private val edgePane = subPane() val edgeViews = mutableMapOf, AutomatonEdgeView>() val vertexToViewMap = mutableMapOf() - val controller: AutomatonGraphController = AutomatonGraphController(automaton, automatonViewContext) + override val controller: AutomatonGraphController = AutomatonGraphController(automaton, automatonViewContext) init { minWidth = GRAPH_PANE_INIT_SIZE.x diff --git a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonRepresentationView.kt b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonRepresentationView.kt index cbc7295..d1e0da0 100644 --- a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonRepresentationView.kt +++ b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonRepresentationView.kt @@ -1,8 +1,10 @@ package automaton.constructor.view.automaton +import automaton.constructor.controller.AutomatonRepresentationController import automaton.constructor.view.AutomatonElementView import javafx.scene.layout.Pane abstract class AutomatonRepresentationView: Pane() { + abstract val controller: AutomatonRepresentationController abstract fun getAllElementsViews(): List } diff --git a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTableView.kt b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTableView.kt index ed8c6ab..a4703d0 100644 --- a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTableView.kt +++ b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTableView.kt @@ -153,7 +153,7 @@ abstract class AutomatonTableView( val transitionsByVertices = observableListOf() val table = TableView(transitionsByVertices) val sourceColumn = TableColumn() - val controller = AutomatonRepresentationController(automaton, automatonViewContext) + override val controller = AutomatonRepresentationController(automaton, automatonViewContext) val transitionToViewMap = mutableMapOf() val vertexToViewMap = mutableMapOf() init { From 8eb0409a30753b1bddc809ea68d39f88dc9fb70b Mon Sep 17 00:00:00 2001 From: IgorFilimonov Date: Thu, 10 Oct 2024 19:46:02 +0300 Subject: [PATCH 07/12] Moved AdjacencyMatrixTransitionView to other transitions views --- .../constructor/view/automaton/AutomatonAdjacencyMatrixView.kt | 2 +- .../{vertex => transition}/AdjacencyMatrixTransitionView.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename src/main/kotlin/automaton/constructor/view/elements/{vertex => transition}/AdjacencyMatrixTransitionView.kt (88%) diff --git a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonAdjacencyMatrixView.kt b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonAdjacencyMatrixView.kt index b1da3a2..81d323c 100644 --- a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonAdjacencyMatrixView.kt +++ b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonAdjacencyMatrixView.kt @@ -4,7 +4,7 @@ import automaton.constructor.model.automaton.Automaton import automaton.constructor.model.element.AutomatonVertex import automaton.constructor.model.element.Transition import automaton.constructor.utils.I18N -import automaton.constructor.view.elements.vertex.AdjacencyMatrixTransitionView +import automaton.constructor.view.elements.transition.AdjacencyMatrixTransitionView import automaton.constructor.view.AutomatonViewContext import javafx.beans.property.ReadOnlyDoubleProperty import javafx.beans.property.SimpleObjectProperty diff --git a/src/main/kotlin/automaton/constructor/view/elements/vertex/AdjacencyMatrixTransitionView.kt b/src/main/kotlin/automaton/constructor/view/elements/transition/AdjacencyMatrixTransitionView.kt similarity index 88% rename from src/main/kotlin/automaton/constructor/view/elements/vertex/AdjacencyMatrixTransitionView.kt rename to src/main/kotlin/automaton/constructor/view/elements/transition/AdjacencyMatrixTransitionView.kt index 628f801..16ad760 100644 --- a/src/main/kotlin/automaton/constructor/view/elements/vertex/AdjacencyMatrixTransitionView.kt +++ b/src/main/kotlin/automaton/constructor/view/elements/transition/AdjacencyMatrixTransitionView.kt @@ -1,4 +1,4 @@ -package automaton.constructor.view.elements.vertex +package automaton.constructor.view.elements.transition import automaton.constructor.model.element.Transition import automaton.constructor.view.elements.transition.TableTransitionView From 085d704cef281c8b4ba0bc85f20b7b3d121e8c70 Mon Sep 17 00:00:00 2001 From: IgorFilimonov Date: Sat, 12 Oct 2024 14:25:12 +0300 Subject: [PATCH 08/12] Set version to 1.3.0-SNAPSHOT --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index e7dcb04..c89ecaf 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -129,7 +129,7 @@ tasks { vendor = "spbu-se" application = appName appIdentifier = "automaton.constructor" - version = "1.2.1.0" + version = "1.3.0-SNAPSHOT" licenseFile("LICENSE") icons = icoFile bundleJre = System.getenv("JAVA_HOME") From 1b1586fdbf6c21f3af1b73fac639718c07daeb0f Mon Sep 17 00:00:00 2001 From: IgorFilimonov Date: Sat, 12 Oct 2024 14:49:26 +0300 Subject: [PATCH 09/12] Temp UI fix --- .../model/element/AutomatonVertex.kt | 2 ++ .../view/automaton/AutomatonTableView.kt | 20 ++----------------- 2 files changed, 4 insertions(+), 18 deletions(-) diff --git a/src/main/kotlin/automaton/constructor/model/element/AutomatonVertex.kt b/src/main/kotlin/automaton/constructor/model/element/AutomatonVertex.kt index 512495c..33c5914 100644 --- a/src/main/kotlin/automaton/constructor/model/element/AutomatonVertex.kt +++ b/src/main/kotlin/automaton/constructor/model/element/AutomatonVertex.kt @@ -58,6 +58,8 @@ sealed class AutomatonVertex( get() = super.undoRedoProperties + listOf(nameProperty, lastReleasePositionProperty, isInitialProperty, isFinalProperty, requiresLayoutProperty) + override fun toString() = name + companion object { const val RADIUS = 50.0 } diff --git a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTableView.kt b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTableView.kt index d3dd113..17709e5 100644 --- a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTableView.kt +++ b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTableView.kt @@ -108,29 +108,13 @@ class NewTransitionPopup: Fragment() { override val root = vbox(5.0) { label(I18N.messages.getString("NewTransitionPopup.Question")) borderpane { - class VertexCell: ListCell() { - override fun updateItem(item: AutomatonVertex?, empty: Boolean) { - super.updateItem(item, empty) - graphic = if (item != null) { - label(item.name) { - textFill = Color.BLACK - } - } else { - null - } - } - } left = hbox(5.0) { label(I18N.messages.getString("NewTransitionPopup.Source")) - val sourceBox = combobox(source, automaton.vertices.toList()) - sourceBox.setCellFactory { VertexCell() } - sourceBox.buttonCell = VertexCell() + choicebox(source, automaton.vertices.toList()) } right = hbox(2.0) { label(I18N.messages.getString("NewTransitionPopup.Target")) - val targetBox = combobox(target, automaton.vertices.toList()) - targetBox.setCellFactory { VertexCell() } - targetBox.buttonCell = VertexCell() + choicebox(target, automaton.vertices.toList()) } } button(I18N.messages.getString("NewTransitionPopup.Add")) { From fbf02f76b0e7e9c13ce7340fbaee60054b74b8f0 Mon Sep 17 00:00:00 2001 From: IgorFilimonov Date: Sat, 12 Oct 2024 14:57:07 +0300 Subject: [PATCH 10/12] Added good quality gifs for wiki --- .../view/automaton/AutomatonTableView.kt | 4 +--- wiki/examples.gif | Bin 385138 -> 15494449 bytes wiki/testing_panel.gif | Bin 373934 -> 14141128 bytes 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTableView.kt b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTableView.kt index 17709e5..7f79e09 100644 --- a/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTableView.kt +++ b/src/main/kotlin/automaton/constructor/view/automaton/AutomatonTableView.kt @@ -20,7 +20,6 @@ import javafx.beans.property.ReadOnlyDoubleProperty import javafx.beans.property.SimpleObjectProperty import javafx.collections.SetChangeListener import javafx.geometry.Insets -import javafx.scene.control.ListCell import javafx.scene.control.TableCell import javafx.scene.control.TableColumn import javafx.scene.control.TableView @@ -29,7 +28,6 @@ import javafx.scene.input.KeyCode import javafx.scene.input.MouseButton import javafx.scene.layout.Pane import javafx.scene.layout.VBox -import javafx.scene.paint.Color import tornadofx.* import kotlin.random.Random @@ -136,7 +134,7 @@ abstract class AutomatonTableView( val transitionsByVertices = observableListOf() val table = TableView(transitionsByVertices) val sourceColumn = TableColumn() - override val controller = AutomatonRepresentationController(automaton, automatonViewContext) + final override val controller = AutomatonRepresentationController(automaton, automatonViewContext) val transitionToViewMap = mutableMapOf() val vertexToViewMap = mutableMapOf() init { diff --git a/wiki/examples.gif b/wiki/examples.gif index 3e7fb8e477f576b0c85f01adedb32a47e1cf240e..483c6103a03293e154aabe97e62b30e610b9dba8 100644 GIT binary patch literal 15494449 zcmWh!c{tSH7yiu7n62!xjD2m4HAOYHl2Vh9P{tMsO@$=YjImX!`4(wWO`&XQ5|XH~ zkA3VrV~ea~-}CEt|GLj}pSwKgp7Y%IyzjY3j~y}D?*YJg;8g`Z000smK3H57^z`@C zx3v8p8)n>&uB#|7NP52BJ+ZJbTToDtmYg~>Ik_-BJ=8zEw6MtM^IIG05@T=0CnUA? z_VF@aR2F1UFU<6gFN}89_4f`ua`v5>ni(1HO9~77c<^<(c;4LpYcCOt&g_# zja>3}sp}dW=pRbY$_op=?BnYE{8d_IaYcP?<>&bDj~_lvFKzXXOod$b%gifmYw!K@ z=l8<$a`$j=U2AV!OZ_c+_@Cdu^RvHJ*48^ao&E6a!TjRl&!0axmzFL&`&2)Dva_>e zW__%nsH&^0t6Z>CS@f;CuDx$~l*8eSjg7U}xAnHS{rO&dk6pU7xDj*f#`A>xmwbI6 zB&7ED_phw1q`geKc`G_2^;LU&dm*=Va&+YWz2F}|ijSM@3%hY+b-X7oDm*>(`aplr zz1Y~9nVBDz+$5j-_Z}ofM8((Fw@&_#{rh+412(TxGtQp#{{8z;#?5<0KTDSv zmUD7)MyD66%YWR>{?XqzI6FJr($Z2>Q}gQm%c7#9^78Wf`ud^1zRJqVy1KfA_yk)k z)0xF3>e2nHg+u36wb$3zr>l#)I=d(T-N?fHzbUyL<2)X(ATe`bU|@D;_V@4KJ?*vs z)~tLI_BHqG_|ke)Q&UfOPtyIE&85kL;*#KtXM6ew2KxKw7nVmSr`9IMM@B}UW`67G z=_xBM?dFem|;C=plIXEUTC^R!S^WS#W)zvFYD@#jDYg4Q9jl9u6VSFek0t!)pVK4_X;{MXp`|65sK+t}FX?H{S>=viOic#)JeIXd<4 zgdIH-F&3wDzEzL)bTl?LE-lah{{e{;j^beM(7EEHC}#{WJDUi!%-< zPkztKDk&*hUYMU8>uIYldK45e(KE5Nv32!~T~R^7L5qVO!)^6-_0yAMy*=$yGgIBE zYK$@R&;ny(+5-jWzdIorJS<`k%+ z=K0#ZjMk6j6x-Lf`I+rm&R_leYxA=@KU2!@%N;Ms?*8i6nt8si;8X86>PYSDb(T&fXXMu5iEH)^=|!{=PWQ z^WCFoR-qxDs-t@C%b5$@>_jYjKfw{5#t94a5 zo2xSu0G!(=!L9%BmL{Z@jt|Y-?r^66)zlb@s_Q?>x`mQoQ}7oHolv|pa(hBnzstPP zIk-$Z>}{M*!Nl+bVwJ{7ykUpm$U~Fg=_8NKRwhOsD<3hT1k~J2ZzE~1#GRlsQK^bd zP!N4o{}iDRm4MtGrAo6`6Zd>%9i-_I0E<~wdRkQ(rt-wI;Lq<@)GE#KD&vDC*2}rEk(VEK6YedHFetp67QZmy@G)|Etvm12i2Qh9$Hz!pl z^V+VZ?;`kSlR8iOw;WKM#OIWpa$Ns83D- zcJ-_i;wF5eg%*-iULiiG(GrEC;gzFs@x=GBgzyQFb{bL$hcO#=9*WuH#3m9|aXRbi z066stQZ<2={eYVxR;YrpNYyVZ?IiEku>J}$hM)8%d%VkK5@=q|t zghl8K?mb=UtK~{hr}di?;yG6A9nc~L9B^sDte&N=m4jHXG@Bfm-5-oR8-Rf`yXHpFcys?f!h_O5Is4D&-MA zB2sQIvuZpq#;{tN>1~+OR%!+pR^tHyDHQr1wmIv@-eZ?x@1uI2LFr?fEZGc-b4Mn} zq*U=r6x{SVZb#>6g_6vCoXv^%yOX#TY6s@;k>lTseYC06a+$yHT>oC;+k{nw^Ng&H z2}mTMIr28%?y{p0qPUO@S0GxzE6V8lyPXc$@*xU|_q!_m$Y`=giVO%~pn~5$=*Ewn zcTtw+OQ`7&0;jNwlyhxLX#lJ(K&&^tOz|WRCGDUHg)Yd_g}T`{5_R1-En@Ci!9nN6 zG$LqE8^(d8LZ0Htqr!SsdBwzs+7wG^D-#a#lC#ZYRc3Gk=V33B8ZD0FU&vs({mlDN zC0sTw6HWuxB`(%g80iEmt~C+jNR2h8hi_ULTH@fwx{h2@Bs#n732-zDmoO_6os~-X z`Ee(9bqIo3FjSb%#9JxyPG0&_mLi}0?xcx>Io#&Ds=h3#7-}0YWb<@r=sAM?NqTSi zmm;`UAq_^PKp=?~AI<)oFL^3HCzCO8RQVgn_Tco)`8lOGb!z6|w5>P_fqE zewc!Zu(6iy`VULy(uCq8B%5V5N?~_SdRHqeU~Eo5)KB-Ij4I16bU5M9lixo{%of8b z7(J2_m`kS?l0@|JublNiA%AdU`R~7pSgg#%s9%=S-N>Lhg$Bi$LzN^Y>$<8AtbAcU z%=T74-d*dml6$sIl_2`8&e5S<;=qI@3Qj?ZPp3%fhE>Bi^cZ4G<)GbRfUenQBxEOD z$s=B4a<9>?qu$ecdsu+A(UIn;I}VmeDy3V&IMQ7!wovt|v4EJjMfZ z$Xj_&t@t^Dc8zNUHC{~A2CPu;0h6mIfe|E-!V)f4u9zjr^G=X*|tL z>Kzgyxhk{3)|GW0qR9n=FdQaSfn9pfA2kANnW)xM5j?sShEKR1Vz0@ixN93hmS68gclaQwj%CS;#=N(CD&Dn_>%O z8X|xb*!S#gIm|Owl5_(3cZMMrYr+vZfoC}SaiH5fWDYu%4??Y#)j_I^45UEgcc#nX z3q(BysjEl1=0SaXFh#uBlS}XSY){ynDr!k;T>45zVuWEcZ=0SB>*rw5IY88UCaV2#s(Iz!6Q!1<$%E3ixXP=kx z5JYaPBK!S*ncs#b74VFwn29O{iGDL$D5k!VJ;7}(hu(?%K171Xr0@>!kQUqW(Hdvhp zKE{Xn?9jk0CfbP%VX=fN0c1Q|xQU6_#s?iuKRyZ2sjvj0p@)oghAR@DumVJ!+%ktB=_Bh z>0|b&L*$aogFl7_8@L5=PzwUEGY6ARgr`tpMP1kc93-BD(c_?~0@PIs<}3y5HF2HP z8M0CMc&qF2-?hhpG!wj^2|dSz-(>EA3n9NVku`oI_prYOXfa~w1w6J_@R0fpt%FAs zSlDb1Oq~pgAi9-PVF9#z@f@bscjh+LX`kRmsZp3Q5qa4OB;SQSxr4*%krCp2*dPt9 z#e|+Df^G}o0UW>IWb}vt#Y`7InIWuQ!%W~|C(^J~7C4A>*&YYEK!LccLORJ9a~yOp z3#>?nb#q`hdEj1-hzA+ni^oVaLF;^2G8rDhfrB`(ASNhr6f}lpZNK^nJn?UpgC<05!uK?-Gfv!_T)Y!<6Cc^$?cqtBbmV=3BW7|2f}x+T>S-B4?y|g5MD$~EEP6PLYIj{Ll)8I074CS z{$vJ|*_w>u1LYx?e)C~w-ywsNkaGYsCIvl+2eU|zr^%pt4hqGG{CVcFQ6my_50y-X zQF&M~0ffatObbx*RCp;K9Kt{9#ey5-Fec8Z5iSLjZ^1((aZuxN z*f0RErh;^M$Z9Ga>kqyvKpo@w)n9rp#SeVRK1`yB_|RaXI7qWN-1R2Rm;^e8hm?;1 zdL(og3q2={)TP2tvxJOj4<`g+dTew%6?}yU9jC%R@sOKr>{j=& z2MVRpoCPQ-4m!ny?G*(1^3k6-h;1hLUL4F9xVIokXxN`P5e@SZJlqyQQYbKI93+j5 zP?5ZfXJf9=(9BkZ8}4y08+(uYsgw!2K*X4m;n%p}VHO+uGOdY&h}fZI-KN~me{uWp zOHfM)+=vV>5Wsx|sM)S#taB-QS*RiA>#r=hE`Tg${<9x6gaY$ofPeAR32dYj51s!4 z?ZZJiZ^HG65CeXk6Cd3IAd{)^OdQIbf;>+VIeIDUH}#_4Mc950TpR+`VkaEE2s=T1 zFCf`FF$?WDLT*INM8=zS_U+-9AQ=E`M~1mkkOnrdUgEKmwQv9KM*`t6oNHbhA5H;~ zFG<267f3Y);|Y8zV53niu=vX-H1^xmH;T$o@2o*oV!%Yt`CgV;UU z2a3zh`pOS&m6K#EEX*pb+$xSlROA-HUy^|oCf4B5Pr$` z*e^hh-~Z8&ku&WQ$WRw{qhfSEz@^&23q&}B1ZazZ-V)N6M)_)DiZoz%x1 zQrOB{#hp|UJw8W52O@WA7&X<|v&1nd(YeSr@PqJi}Um=S@| z(F~;FIYa}oc$3WNl$ivPtJA^Tdp_vb@rHBFOB`PJQ}7WfFI)s8S%h&9B42F zl1346!(&~yfWS0iO8k?2yT+HymODx4iznQk@GACGfAtdg6@UEfw!??L!WSD;;mIUW z2orrPnJX-UqzU>)`>=A9aA~~02L+hsL6>fPp5~xbrJ!4z55+mKY2F(<0i)CoZp;GT zr$Ch0;8G5}i4Qpsz{l}$3JvT8)ammF^7|3l)3seVMgR*E(qE%R0nf9AW!Q8zj<7!o z5GQuqb6`d+q%RfLz(bt{P=iF|6XHL2yP`(LxUoRyl#box*cO)1G1k*G9E8&V^=3Ax z$)Mb5z&z&{zkX=c%{(*=be8(wpMz4a1yE$vSss|miI^UT_X6((%-59yjNzKFAr7)n zAp91Ol_4TAm4F)w2p}0>rio1LL0sM849W38JLfzH1@Hq*$bJfDT>!7=BbR{|vfX1P z9?F~p^U28B#x*|p+b6(bQ+S9>HnxBZw-cZ=Il^X?V$J)Yz z0;wMYelk0@Z-Lur;Asjfmjer7LF!TP7T$>fUOIOIMiIc1jgeD0R0C1y60vJR&^NWG z5tdRKUyE^~fU}aYmpCvl90V?yyom?-lOf_%z?TV`CV|RN=pLg0^+3;I9;)bA*T=va zx4#QSg+=|H!;6OQi^g{sP2MgZ__b&@xOix1k)*I>ad^qfed);EC7ZWPMvqZR0^z&4 za2F!-hb79M`b!>%j^;V}0Ei(DOqU{H^aGxUS3Iu>{MnGFc&x!+%xR_ti3}F!AZ}B^ zBr;r&GObDmhXQw+aM<6J2zvlJOoQzuqcr6Zl(%b$UvQ)V^_eYPkUgVL1s~!HT`x41 zCeveCSREqrnR=Wq9_Gt7Eudni0BHIzp%4z-OcONhiXdje^~k_e;^G_!X23!GZ2{ll zJ+~GZMQ}t;v%wDpSUvVX%w`(OxwnZQv*CgFbRyWYwF5a<+4hnf~;vM4V=MP3onU zEsCxVSJWz*9vgkAomN}^HL@UJ+5=&udHjRUSc#uvhWp{07aGr2nMomu!g*&~sdLZ5IiCbGbaWvk{VCHAr%#^EI2&<>!k`i?s zgp(ZWYiN(*e*P4+8=sDNX=0P?Z6bcy`#)>(D}|-0j%8HVbNq9DH1yCKu{?QC#A$2s zu=>+JZ}H{$W?7YYbTzK&@Ps->GtJ?&bz;zS6^z~Ji>M048>nmLD7NA|Iz~;{OWZwT z9Vd@)(qlZn-6*USZ4zX{dL&(j8sQRGhDJ&@{d#u2IlTEDzY~XGbvM&7^?Ktq8n^nc zY8liE*~`0UQ#|bg*xk$;xm(^XDmLr*V{eXccKd4CFm%M;;BOU=Jj&3jaJ1N6E(B>m zruL%Q=H`lYtcbdU-bd^{(z|7h8e zONow3!GPyY{A>SODmH6w0Au(fqhXK4%07%ub({B-jJ#dSZ}!O8*^3|2$wpYBvL3SE zgxhcBj~|;%WDYz&mhAszPxyrSZ|OAX8SZ~W-Sd_<2n=LL%4iFfn<{h|T6FpIFSu#I zmuj^i0biSrmE~0fCxmjVoo=eEMJ1ld z^1fu-JMvr?bCWa+G@nlWGhX%#v*~1IH%#S#p4#LM11O?N{FSHn0UY|?&7h1qrnyA2 zD#|W0;^FMvqH*oBpD<|BSqZ<8!~oB=tr2SeXjmDl9DBELO4s+&$T7_3i?Px9FRRYn z^IGfVh@hCau$4=VjOTwwTYsU?j_u5FB=NTxl&kO zIU0nEE=o|b((dkJ{wOaGFN1#tluAFfs{ z{2vW!uiqvw0;J-lXU-lhG&jr)`Jp+MDc>AdE_VlJp+*IT?au6OJY*H=Hf&+*Bl8>q zrqU=-OV^`&B%d8p;kw-Odv;@zKI1R(&{*GIeBX{Atua-__{_yW7*|X0hH&;hxxjSC zrma!AL(;MSC*#x#)2mIVPS;)@z}tNHKMgV4fA3}K#M9$Z>V(-pM*XERRL*uv3H6|3Ev<;>CRC8$w zZ=hskN$v;HOzFmoi#Be36jAxTNeL9_sr?r*$IoSYo!WP`W>30-%|iBzCV{bIrc-<7 z*-C$>{36Gk(Dp2M*wjC(I^{lV&(62#IX4HS;BU5k3NpIvRy|om%P7mXS@iCh>~^~F zNc>V1H2dK40q&j&)R6;Oj-R-br@l=(`i3`T?Pv|8H&$Jo`E(^Q%WW{TE1ci{skms` z=fA2>?qvKi@8#4+GvO4Mv;z6fu2}y~t+S2t#$PW!3~(90)cIv$`E&HA*vsdS_nP7h z3YYofu2UJ^yp?>X%lCEM*E0>820DsL94o1&4{AT;EW_U{WnT!%avOR744Us5;P?55 zOKHJMaYFki-(wX$rqE*r$t6K|miM^r?lQJ%w^LE9>}4#>I{j#PJ#$CAm;&F|Rf>(F zMyZ;4AkTJ{Nmfx~jEX%lH@eCd;8)}J$2)V&E6~D8lFcMa8{QI z|6QrOpnkfeWIk;%;>V`XsY$7d>DxNY^CDd!$+gB@$Io#_C6`X#=xKcm4@tK^=x?9Y z(pXlyUZ#eCQWf zy8ush)9#`i$ISl(!DO+t_Xeu8zhI`y&5k1bZl8JqC|Li?0WCW z(sIE)^o(hkM8VT#@666mbJrid>Z_IC_ia-yaL4hNW6wd86}9x4xxjBl&C8gA?>_xh zr&!m{+?bit){?oqXUzDSK`U8*ia$6=vH;Q5eV;bBFQ*13_fO8QmiE^L(0W~lf8H@^ z$v!_FaWtj(XX9G6cF@&#Uk~(esm&K9{#{^Pb{op+2x(3`6q0$ifAVZ~ct`%vkenO+ zQ|^dcU6qGIbCdd~eUIMiY0n9HDjLxq7`xt<^mF!AQZWFs&}0&JGVH9VX@8_Htr{kO^C@EI{QQkUvkBALxs2Gp+5GV0exHUc z?{5Q(Fq@DvZEVD&SAXXe-u_(N0d_PCoN-^{_qV2g1GYt;ZfdljAz=Ju6D2`A9M>v&( z%;SheaX{W2TMEJg9|bINaAKvqR7!UnmWo=HiaC^udzVTCmr6#JN+py^rSAz}Z&a0ELe-_zD*wEy%N11tZB>DzRY6NtSD@8YvFfWT)z=KG zuUl0IJ5+~wSBC~ySpkd#Z0K?4$nd=CTNTw2ZPm9&tM4pT--U8%VqCh4&0Vt?h86c_ z0E~zSz(P?ZjTp}`?!8p*{XFi@g9>hZ8~5QT_t6sfF|>v$R`Z`q%@f0#r&cuy4mFA1 zHP3=;lA>y!C)B)1t$CSO^QxjIxvl2)Xw93YV~>iXNQF^W6o!+D%^u6zREOF$@7fQ+ zwI8Eu(-UelqG~BD@NqUhuB}#=Uz@X3`x#ot7OVTBQkQF3_tmN{&!H~gyRIO(?pst{ zVM5*a)ViX)x*rvF#cg#Zqjf)*>V84%Ib!vtD)nWC_2pLeUyGsU03^i>euP%fO{lL) zt*_0iudAr9Z>w(@t#4eaZ`wLRCP!!G(OdFB$Cyx6aznd!Lq~8!XH-L1LPK|ILr-2q zZ$(32TSNb7!@yF*AhdCZFV;Au(l~6`IAYZ}>d-jm-S|7WaXhMVBBAk5YU5;HV|NtH zS*o_mjO$2X*AZe0cB>9wM42l*kiK<012TB9%N;I}bg^!z}Z#ux6Zi z^Dfoq-A2u#*3Dv$&Eh_%VUCeA!6)XTnxxa3W%8T%R5q_9oZ1ir-}qiD2DFHgU=G|U zC8HK)>lPKq7FC}XwU8F|=oXE{7R|I4t^5}4$`+mWmc3&wgyj}pSSwMyRZq25->B8V zy4BFJb;ro3)i|VeUv#TUi2Yt(B#CykI=ktbM(lYK{Gb#_h!sT=rahfgc)Vfu>rK*EK zw#_!s;Yf&sExyeOeQGY=LCDWRhz!`$PB^zS>|jl{pW4j(+wA&JJDqQHwS#$}PaO8*=4QTHO9P0>L?zjT$q>6W5RqecH)Op>yGuW{+#HTYfr1M5}XINtA z&9u(&{LWjIoe}Mwx5ql~EO*|8bxPK6~KpW+gqvdM{YjI%b z-0e1-L-?q`@l}Q zMLRGn0e2rLCB(^74&-&P!~6ERiy=;eD5rx=C;yV#%X_;%M)#yA_GF~>Wajr|RrX}J z_k0@b$yx6C40DY*U;lo((E$$@CNuOk7!rJj7Ov?utjDqaO!C2=c|!+o+nHx2&X(WS=nxYmOMyOLZnQ(URYcQl8(h7^`o3?U^tN$YFmn>3L|rB#)Z)N?|8iJb zeeLUWFVGIpLY(gHZF9i6aQhrdY0&jiNLHRx0J^s)zrVM#zpuT&f2@CCxqoL6HozCZ za6r!0%*ZvAEDNT<|7jQA{4?IP-a_l1Cw8#)Y}ff>*CSzlCvKlt2p=L3J1ofnJy>d!~dv7;rrVtKEd1OW~$Y0%ba+N;-n=4oAaKK+!C z^IeJOKgtcjL-~jpzR)wi@CQD!fG^U~GknlS76-PM`X|LeI@+VDR3L%`=O!Q!6R}#% zKB`cx0}mpJag@#h+uO(^C{bEM4&0@ahoeti5VY>13|uaROLnv(Xbh|LScmjT^AHcN zn}=j50HZ*qrP{Ubc*-)Li{Fv|tr|(C4eu(1YhC;YV7-VZqj#?P0m5O3ixaU_G9c*$ z*i9gg;J~uaJ?;42r#oVBwPD;v}?WOl(&i$b<)b&Ic1Hh#eC$$T0}C#|9EpK-V&fiYW962}3AQqQMkD z6COS8P7I#{B|B4W21b)&{ycy7=f#IVFAM&>f}chI9mU8abcnQlyx2Q7^aw6on2$Nf zg{u*18Z41Rc35K!_U57{y41*sc$4Uw4 z?o@^f86Lu+i3lQtDtS_s}nff(TdED^3wj*)c+xlL`$*YWMZs=pN$a@hRp$y+2E68xQ{bTmm7(aLa1p3UI7?dHqlfj;w1lpFNfwq zW=H~XYa8$$Az;Ud3)w?vNUhOjs0{ic`T+oDFBGZ7goky3PI6}&YgRWej^jjm5)1hVL-!{9m`ceUq0C!jFyCNUA*SU5LUf*Iqh!SE$B2qbzS2fWV@jJ7 zp>%U+dI=%+G7o-+MN=Uq;!O}oIDohx2&=)^$D$dSFl42mI$>}Q%g>)lcPxyIfr1?i zqMLq38n6KIxL7HZnYQ0i!eJ0G$|#i#&nbx1PoEJd#`sDx#2?Mx)_@xcfFo4!j?o%O z*n}ZL1fdHf^(k;4O02ds2uXT|=Q79*LF!@N3oDC<5lbY=C3E#9p+j9xBzjaOog6x; zy%wcMX6R8Y_ryU?O2ta0$Jmk~p#nNU8aO8PP=X6lV}q@k@RNmLf-?wyH%6ihE>4A9 z>ViYk>1tB2|D2-4SHZeckP}S^aWY+!%qZB4P~ycLWy6fqBM}rplj0ppX2|}lBcL#@ znlKE>V}Tk_D@ybsp&(rihKCf~wJYY3$-mJk0|9tf7+iruliV@+1+QWNw*imT5*)s-D1B^9Mt7`@|4hV1ErTLUptEE zMj`5)CNWBk;=$-M8cR=)t|y#bPxM`XHa=Q)B3RZ2c0@h;^jcKk9Uw$%MhhS5C@!1x8ErD*&mE1F;)1+{;6Bt?*~cL9^hlpLn350!A_ciDd1GJt(A9Jh%7h^Y zMB9_0aGXGd1=;D~%esW{IuXB5+e|&pjb^G|CC9Bnw*x&QMVGz;hAYFFkfjE#P zX~367Lrz@sB14cG(Z2lXFd|%-5~nZ`S^6{59)4N(Gk6abvWGh(O^*5I3o~NFgdWp9 zGvM0n>(@0P0o2~}M1(exE(OF9s2j<8E7K1Ruls5dhw~zv9vg_h$>{nRFSIMnR|q#@ zAMFtD8sC__zmP8t3vlBZK`O^+ZyvALntiqZ2itYd_ND8+(@|jDj)+W1<=Iv}kkV}{ zy!7D+*i@#ewz%7O7HN8c%bdU3QfrUAm`;9uAZ<*iC(pk#H*jiYZ(rfH@s>}QR|x~f z;j0TXQ>(gsP9#E<5U@rZ-l@1RX%IBMrZ>ucqFz^`B6LDqteTpNlzc2Kx(n*fO|ObV zztT8e6|V?Pk`;D&X_?$BtLtOS&#A0OG6JhH2>W2ci)B{rPql4l@sTsu_p{-<7e>3Q z>dPNFcAwxnFTZzB{B&`H_|oHc`*%GhGOa8FnebgQe$CtK$+(W!tK5ScwWHTVZ&@j6`y|57f;)~w4&G#=`a zS{^0B!Ev}+rbJQsvlr;966Y?SUQuS6BloNPXDxG6<;gLv?yrM4pRzanXd& zb{BVayZ$io$F%3zvmIC4i8Mlya|QzHaY5NbD(=NhXA)z zfF9*K^!-89`Pp2B=a(mk(vrMp-+xHjys7!&U%|NMkP&$6*oW7ShM9;XZ=Yq18@+v5 zo1Qcj<)y0sL$Is$%G_#jbi~LIrnSj?d)1w4mv-!i%%2@3_KHrFXWJo?iK(91xZ=I-TFtEDYoB&1obEBA#Lo1p`mWSvq2A0`G*IKbL0=GZ+!$KyRr}k^Ho#2 z%AYd9Q;)uGaP&dt0{ycL&TjJhz?(xI=z6;9eP%Td{vrEtKpGAMhbvX5}^j@vA`_>;;*OM|- zx#zCgLXGw>v&DuH>ulBPt=^5vcGtTHSGq6%I=I?@>y+W49|5X|s{BXrQCi{=l_&$> z?fKZnJHERQZ~OY_-*wqp>-=?iXM5A#8&6mi_e#7Z0yo2hMbkMjeKs8vfrlz%YTAFf?^LWL@io12@3k)vE^H}D zm1|V#J^2!U(M(yUHO|^n=shm73vT+71v$n$z1y}>S$;9S`ryKs$9J}r@eoa}`R-gM zJt}&)J}BCcWG}`JmWw*1$&E3M=rg?9>13R^v#xvhNWih=_k1fAIwy>&Sca& z=GrHU;45%%NO3!`yxeC6#j1qs8Fl9u782e%1N%Lt>(p^ypI4cw=|9b=_tF3QqA^0v zFh#TBlKt109mQ(KUo#p4uYG+ru%%{FuGx6?$=Bp2S@41DUmgZ>zerUwBgH6+O*dP< zzF8?&KeU+9bbI0J+rL}tq)lldWi<<25?kGD>{#_hLobQf&ntEM)}!y)=e?IG(Kup| z+5GTYUW)v-hK;3G%YRP{Q{UmNlq~2%mI--jgxi`YytGdk%-Cbi}ko&Ae=VB5_m;?pyI^b4LD4=yWKPkxjaB#2xnXH~_0z|=9 z1FG{A$LntS_tBdXH z&QizouKn8XoqJs|_$V4AAQ1I~a7QoRE4k!+g;H9iGlSlGe84FFY{|j|2@$cyR}}ru zJ#r{F0`x@$5GfO1)3`!U(HYY`^S##Tr~b3A*<*XJf3LgnSO0mr&TqoVT1^x$QX7@= z+vw}}hM+qJ$s;=B`&+*^hW<2ovzR@8aPfQ7oxfjqw**LsR6VE+d8+qb^wY#-OIKB) zpDwdh#2f$lMvI&u3Bt_&V|Tr%b>;TbU6KEUR7bm7KO8d3JhON3=-njT#->8H*WRgf zB30rbw~uO0W?)}U{<+&d@`5AXkQ_RaNYJ8mOKzO6Mt z2=niC-A0gW(dix_q5m#Nj-d93Fy}2TcdToYt5&67GA9eMY-Eesi%1Wm%?t#bnT;oQhjtj>()63 zyp2Hz@R#RI>!t@ke(QWZcH8IX;B=iughTS!^6VyKcJSL)e*K%(hEwIvjb)pbvctDq zPB9i*dC&R`6!vy^md%{<*g8XXzoNNTKHcniNeJM(RCr&X|VXW;M z_w`GI@C55~0(o%mpkjixnIRuM+pq&0R1heD{=Si*y1P;+$YO;pG;R5XJIEiz4WMbr zg0*D9>arZrbKo)iF-S>4D2TJ_=spMHD@?erU1CYZ!?57DQ$v*PKWI?Q;NsBRzo#i1 zuXkYFE<87TaQ9z@IT-8jZH1k^?$8aP?R$eerSg&=qJ8)>^{L==4a@x$EAc4OGpK82 zUwpG)Z-e*A!h=Lw^ogLj;`I569r>K1(nCYnFFnqhs_mrg|{0k#p=JO zxt7M$2m!r6gh_pTT5)r)3|H1HJ1IOw>8JGh=4IFFtFNn;U4MD>)%>T_SZUt$+N~KT zt6kfN4ol{Wzpe@Fs~fWT)$b{r?YZ~b>%Di9tD4`BgmC04%ykz$iSIo%a+R9;WerJ| zWqU_z65m$|r!)sDmp2b<8jl#f_xyP&5@FTfc02iTO@G??WX*+MV#|92q_S!5`|7lv z_u2!prY)YO!Xx@lBj_bJLb#Xqf)^1kXYgqF@NlHrd$+Qg6#bZCGq|#8W~7#tw{d}& z&g3v*xXiFtN$a<#;fkzwuF{A7UcB}_guigMFbtSBzU@-P>?t0y0u2}6Xl z&?kLd5-PXiqg8~!q7^i8GX|!ZvgubUc8BjhIfm+Zi+NKvHP6DzTe#Hk$X^`B@5)Wv zHSl)zk37!h-DATc)FBU;zuMZm(8(6onQQO-C*KU{ut1YmSq$(K1ty7d`K-h(F$HBLdwLx#5Y**Xb?Gvn$R! z7GBkuqo-76<(o#1pToauO7G48FA|XsR{mEmGf6kt;vBOsukNQIyvsoWmV_+;R1YYu zd0KUNSv-4x7@TVHSLs*DdqR)0Y1y#lZ)JmL!#euPrWmidlYY^=Qw@4Xv}{PC)0SoZ zrE+bS2bqBI(ktD*bloU(DY8m@%Y(`C>y~t8rp12}n%1>De#}~pr)ru{Thbrd zk3L*^^>oGcaf^oV39ztV8RU5i*Qb2{7C@Bcm_8>l)LtKXpKK7W5)&@_K{&;dkiuOa zIruaA=tXamQ~J@W5z7tb*J`rX7U}nXCRbnb(uPl3_M{LAnb8(rFL(Q!w!A;A)&J9| z?_jvBaj3Fw=BTa3F|%oo28$t+0Kx@W5}^!93AKR9i|4Mrm4xF(H-uJI6#_i@7v&?b z$Se2+aU4AP>#ql$T|T(V@Lid2T_!J>r3#rkn;&9ZN>|W?!$_xpUO*gjKS#ZYG#*<{ zgncUdy{kvT{r7K8!J7eDj)ob;)U4dVkS z>?KsWD?Yy_Cs$8r4{-6I+0nd}i>|;&>V0w11iH*W4Jg5!>;U?%2-#DHX`d(!_TO`3 z)}zShW9ZAeTX)9a#*OFyH{L2l@3IjJN7BRX_uiV-nbvp|@rZU4X?Od8l76|NXXSW)lUhOi*_jEo*^!N$;roP9Ob~Wr;^6>cUY;CW552TgUO}H`cE=Ez_c&W&}{C{eZp8y&hPM`afzUb&?{JqrZA2$9;v(0K@cv~ zU6>>c$)^vvd2E9IiSZlh} z|6J9SA}{mj-?v#$(sD2#gf{%wLE5LocixHmD}FAD{(@x9mRvA$fJi#iLFsfuqUDtj z^oksXg4(R@H1}^Can9lH+4j@mCzl`FfJDxJ2AU{$Ey zv+1KB@@n5qDCSDN2h2pEeaCdq?0M-xFN>&2bh8Zh0Fr`_WK4q#ylwY;*M8s9*XKj> z`J7)wi`=|>glU;wz^kZq+rqY;h7_|$X>OKTW*<9^kMDm@mzDO&H3_(TXzU570-Skbe79Pnqh*zX=}61l!)C?eF8L zF_+QQkR!f%x_)`q<(5Yfg7KFGi}4v5@5l?KWkMr?2h%~KP>6y>UXY6&7NO)TEo37L`zU6lYpH-h*`;_)QHK(58SzWu<(CGQ`>{0@f4T_Z6P$nS2x z^T&MaSBBaX8Ua}Zvo?qri7*5w`oA(f`hY;-82f!AT+K4_`&y>UHa?X!tJF*glqCIm zV>s2AzjlN@R6rQeTDFF;ALY!RkOTsb-slChXP*Gt{28Gnwy;5sA`v9AMlxet?#iPO ziChsO3sDE!@t+)#Ee@7FrDy}9@1vuM479hUF{<3S*iwwhFqE|rlbY5{1sKpU85;oP z0IZs?Wn5%HM@dAgg|XRhIL93JoMc7?GZZZJiW!l=09iv5gNiWW5=-?$zM>5$YUdlq zW~cn4JVzvefrc`K9W0IU*W%0nN7B8=GyT4Q0Dtd%o;h!ho8ugFjvT(5^VuA8ZjK>p zN=2c~`5dAU8mTCi&XQ_#NN+qeBYQH@mzyJ2vy+8JT?0(<(b-kV!M`O4T zPXJ7Z?G=DRGgnBi_KIpiF4SfL?+R>cq_fX}H;wwqhx_wAc-B)q)nRa+h-b~^<$KU& zJTuVk=`d*j1*!Ck3vB(~-14P0j9Iq__^yl@$1K)L$*BKUYac$@#dQ9zv?VBaDkC%i zqP^OUYqW>4b(%!9TzN?KDMp3%mmT+Wp%X)tH2Vr`kZC}!OmF|$|D{_jGGGBb{3;)# z#N&Knqedgm%N$6VU?nrqz3azMNUxnXb!gx1fSP7wE@qVN?$0YsSCGkt0-F+q?k4SS z=++(b6dPx=K^e}0-t0N^9jL~L`i$ymCw4FD~CF4k4UD^N4hC60rjpNLU_O1PH#{q zM=Fi2f~39Wy4no)DR+fklA+lwZP*$0ZA<7gPq0U?I_ReHD6aOxFQ9E~S9IQ!pmg2~ zpB$eH)5-xLvZIJCGtjTK*k>*SXou6KT>A|L{kY_8g;mIoZSHi{n@M_U@8Cw#P+G1B zy?p1I9kYwsRmDWl{I;~tVh+8bk!9KXPm*T^wX1M6Axje6O~twDO&6>9?9L!yTa zeJDMZ0-Dj(%cMhPc(<)NYo{tTiVl7$$uXyi^kufAGS?)6bKhxQa&rOccG;sRcPOpe z=`8`Y-rN&v3N=QB8m{SoydP`QTWpdQwkIhnfj7S;SFeD_bCK@Bveclmz+UvlV7JH6 zL1%Q(>2I#pX&0F8bd09uU1=Y1WAsID+0(zSoRAJuInJbjrRkQ;CP525@Y$P-gze{*oF9~xp`N(Sa>mlLN2(mG-;l$UPEK)pi46dg-mr|xmrd>vAE$x{2xJ)5h;rJu`KA*rSAuXNwTtS|D3@l$L78MTwVLhRnJ!>+DpRZ6 zY!XRBBrX-v72++@Z#BGGVBK~$DLy!3pSX+e5y}?2Q$mtHcdMEmrBjRJ!+C zaEQXCX@lBw;$)Yw5;79pQqRPb5J-Kyz0n1b=Dd~qXg_8l{7{=!9!kFsIh5yVa`zx4 z>yV)WGBpjk0GJ2yLSeq|jq@=k5BK&#b*7?Pu-46q1vt4YWHwtbA;Chm{aQLCBJ71F z|MyXevBGyIS$2-)Qe6wvd0~lZ$SV7JHyA0_m81=~yC`DBD{Xsq#m@@S&5!7XG z&~vTi0BalYk_lBGkt`r*3P@6d9C@v&2bP)9dEy+*o9GMh#9sv zJQxxVIWFH;ZsRKm_- zqbCF48_fJxSqG_gBwI0*g|@JXQBCd?aio7QfVTD05t5DMYbMbZnKhvD>^CmNBSsan z?Lurwr89Qwnu~r{jH(3@c4viGayZQg$Lk)^VjF|@-eM~o564LTmV~Ai{lIE;@V0yU z<{1O(aEo-_-;y82a?5l`IN8zG`B@=zQWI`4%=5QQ%{OW1qk{yex4q;RF}DQSZJs&O z8%FfhlsOW{*FjZ7oEV(BN+Puv$QGT1#v4U7Mlc^iRzM76dyLg6H7@}@+mO)6QRWY` z;oqVmhQV~n2rjWz%XOQ?YD6dmKnv=C8(bbV67_URNY3;@wsqxW_LFmVQ|)oz>-gGpi;q-^AMuUBAcc382+NyX zu+{|EY;75rRzsKEPK{NGVdju*^5wp83;uV1B0qkMnX@~=9v3;CzncYCeoC8D$!t09 z*PeqiTcex)j<2x8sv&aHou#{?DrjzCg(xEzbBpQc2RsETR4QOS!mBXrQa>kE#5c|6 zRmgD#x6*p`w7V;ziZ&%@OsDwNZ>Mmsm$|TW;z0Aos-1~lR0Tt+=LcF8BR+Yb>Unui zav+(1RU?oMJVml`X#$v@1|Ql;a8PdWEi)?vm+TluU{)sbN_`=)ELx#r8>LvPh9aTE z>a%=B7hx^ZnKFAPKzslC7T9_T(2p$P+FI-n(KVb02P38_;w}t5asU2@F1-{?T#h^- zk7rOF*>xv|te4f+$Y5 zlgpFS`Erw89GoGuWXB>6+^EuTM;t88&xPT@i2#`3iQCKAWzYD2UMu* zP51-fd0Q9qA=0i2iD9Uzguc&ohoW1eC(L7dv z1cU`3sBD=_>CUP|O72sz15TDWWO}|;B9W>NZx4WMBNB3x@_a>d8|iIUq5tK{CFe+A zKo40qOLFXO)X{-lM@S$Ub>L5buCTk$Qr8Hc#8e0TkTvL+*KmeLpaP){TR)ly3p7$w zDg^jeN&=wuS~PIV%Sj0@>0>E)cI(Drh-#k@RMf$i@b7h&y-M^o*l$dX)E}})4l099 zfv-mv<=ExD*>SfhSr}4Z z)}bh$iyRD<39pFuSQUcmXt>F3U;5hNQ@nU^B{-Xzt3gw(WT-Y%;JsuOb~|ygP4-ne zY_>?bL9j2Fqddb@>}ASiGpm*$R^GxEFr{@or!^-EZd9Ti{oyj;tgAhB!pQ+JTnIyBL0sK4|-%LTCNg_J(eAsP1 zQI3r6{(howQTjav&gN5tInv$&L^c_&;Vr4lg(nEmZ6HNw4hGrmil-bJef(_)rKgr7J%h(-DUuo1|Qwt zLZUI1ljtx8AF;?r2|OVQWDHM$y}~AecPsUfB|P;p4FaW=r1TOF(AjeBeL|q9noAnz z#HM%h8ln(ui|B$;JdulPU<2MlrB2#oixT5!QQ+XE5EH&^>$ziHWC_7i5`(62QFt!E z2%gMQj<3dypCbhc(8L?prdr0{>l1^nz!o~k{mL-EozMdvs7?;h#*||Xr9sQ3p0MGe zEs9b&=QbKT;J>6K+Vf7PVgs$FftkG0BG*8py+Vw?I*%m+FNYHS$u|N*&l3+ZU(C-t z)iIUdJ7Y{J&u$78D<@cBwjgR>~)`%ib!cfv*gPzmShEb5qWC?G?#fBD%0UT`V z63J6QXgC3S&z$Q#hn?|)^zv{eocCJ`02F^`a%^7!?O)m>ebGT0c?bP|G*A$_Kq{dj z<~>xKPrw7XC{GHKK_;4!k=H$X8w9+qbEw{=94Zgq#>F<%rThdSM;+9+GA^EtimdQ) z2HEc#L}!v!#>sCiIm$f%9{TM+c8dfHL^{OD7^1^+C`Zm;P^c5&XdI*lP161X)Ez+1 zryT{iY>j%VTmeDshA|s}3{m*}pYS7+DJciS+!pumaWGSyB_$quSth1HDEANKb6=R! zE%^853OI+SxNLUsB3n|4Ebb%4_ppB`Y(vVmK!10lorOvPJlqOJu_g*+_zZZ?pWSMK zddIEG@F3L`#Xh>qBu$P+A%dw&x9LhEcQy=9h8KV!(OeRZFBc>{BPUe-EFkW6m0(kJ zRLC0HQEh!UOCJn>eq*ds!b6MzJ{~+d9xZF_$IJ-c&W0_!H;T|mM%aH<<<;W6nUVt( zc%wiby#H8yapYHl+>p5bA_zO{j{^^OH82A{aiL2zSTG-j=VO9ok=f$*R$zE2O0p6_ zh69SdWYr{E*K*F%Z3<8)PzqxD|M_CQ*TEr%t2!z~53})0Tt#P!>iozhPxjSt0s8kd zOgI-A>;Ya8!VfG_yi@z_&oSJ z2bN5MSQwzzcuJxnx}-p`nasm!y~K4<5E>lJ5Jh!>uiC}i668W1g)N4Z)@+KxeDvw1 zS?LlEW`!@GDJ1pMB;5g2CC#r|4_-vAxalSrXtMu$6c`!Q-Y1EoCc-WG=sNPZR`Z}i zA#Oh#_OC_x4PWlxI7W_!!}4HL^xb(camhStBpWtNj=F=gvy4)9Jr#);kaVLiHYBP} z3Zz%)I6MbK3=H1GglAL0z0`ZRp8>68#Yr~v0|4toEd)rxMi&jE$*L&H}`&*&lW1>u>Zr8fn*BmfiNup7HmIToTZUWrYkXcXPELSqH8p9 z=|p0GiSqOF*xMjGrMv@2$!D$$N$e65m%HC##ffpfFl()llkSW+ekPUjrj88@0AS*Z zT=;cT5>uII9>gJMnFHEi???=@vCi9l{wG9qvN0^|&50Iyt>m0!Hg1J#h+4u9y4J{z zD!QKX^&N$K7vSuICWvvnVkxkI>sb7Pv|x_ltgp&#!ERB4ud)4RTdw`%VE+jx47rk9 zAk>3{k8W$EJUs=r_gA{PrrISyu%m(-nP(R}u!r`x7ii;D*r1Y=3KbOGj;OPZydVa> zCXEKOtWSH)hEIvnmb$e3gV-Iy(sTSnUVMuPp5h`m`o$}$HZmY8xvlID1hSkFul6g| zaiLQkvYuqx9OnuCB;LsD`LLieMTlsloBgERyGbTYvOzg?1vL$^yrUS(2A5HG+-1u2 za4~)~8N;t(e>n;!{;wP83eb39mV)SIdo^n|_ONl;B-F}kdHkT_q+myf7H*WItdQY< zf=oX^M)Zx1kMl5oKro}F7)z5HAp-+?4!JbgYnQ*FJD8(F>4Quq_8q8P)R8-Mspgg{ zA5GXQ-zi@KiR8)zGbQuxK#TaYuQ_tJ-5^6P$lDa9A7(-M=$mpJ*xuxiNi>B>4M~uT z!-bDvZ=UW;Hm3c&!W982o{lSdbz+)L@@w!EjiqHAYRULaCbGEb_ccEkRsk7`M9D=} zDoBP#Q5~X4j~vH+W~!cF%!PxNrg-R4A>j%ehvZ=dQFoXil1!B1dp;0E0jB8Edy8Zk zr{qWI{CK8JFBg`~g*ONl9|#M&=x`zkp+xgj=8BWu5;jFLSGW>u?5i6TqP8Zyl_$?M zhGqUzqVeE5F&nZWa`M_k8XwU z5`|RRFq;T0TU>&5SEtY276rREy)zw3P`QeN1KJRp#c6t6gZiz{G4PLxj@2$z^5s3wgSZ*E;yTu zY2aZ7E})vDl#*$%X1W~f(9NkRU>IhHX3FJXQ%ws;Tly$ecwZ6Zkygk+tKi3m0F9-= zW*^_80*aOtq#Z}LQvj~xpK7KgZ-<->UQlwTocSGp@@xqh$pzM)A-MRskGhh2GIx^5 zkRS?KD7aNeXB}v<&uVda1Oi*r^_Uk3VO}3*gU(4?Y(k_fZ+gk94 z1z3Ch{ig!y+n+2#?~roH$lLq&jI&XPt_4L3ux8(9CWK1Eai@d068o8oMTeCf6R>{i z8w859s2Nu9^byRv1=jk4s(&Tq%{SP}qVyC8l+13r9i=oWK-{IFn_+S4Wa(aHRnMbG ziARCemYd(U6Gy+KNL`bNrscKL{0r#fCql{FSE^xN-26*~x15VoPJY+{Xb`Kq*_a+6 z_bD6LdV)eT6}6bk1DyZ15@m|wj{0`P>-dm?zsdtJyFLNyCr38Z_3aQ3=gG`EE0lLM zDN6abkgC#C&|S2h33;#g;^dU3CLP+zm6&ZIHVnc&X^Ne}|MlWNIYmLdh05b>jFM;B z<0-(7&fmi;SbqY+C+0x;CFe5x6ELF|;?h^#ZQrQv7h#i3Y-H3f?0-Q) zAxb4=j6Ue(_7YNo3+Aaf;Khcs?t?9gaZ@~*m6i|$?;%}~861U;CUvD>!{ZNzkf|hD7e~Tv|>Pq8v*|?W|Di*b@S)6$nyEK1X|CGFH)aTEuwtxK`FHfLNJ^4y;JM zomLk1J^XN6k0KlX=^` z8I|~Q<(bi-bEt)aZd=?)+Bn)eQ6XrugC&F#WsDbCNPzXGwj`co8U)mc{UWx4FhbAmx{P7L7n zrj{M#8#+Lvdt1BCbbJ7bc=e_)j?>I4G@JE7`1vU9Qh_R7ia&kD&;mwt?x&Nt@bm6n220T6Va zQKD#?&KfkZYNz0dJ1id!pkvZnC$~Ken9Eo5O+M=^?VZjW*}gN+-do;_MRzEn&(Gy3 z7#k@#9C+I6z@vFj4Wr}@mU8DY#sqaQRq3)+wi=c->xA(xGr?QyrE$R0J7Z5ASLiY_ z=AcJ|t0a_+ZGL*n@rf7t)RE^VBi8#&d_|tdR$abB+D!vIp{!3I1*e2%{aDgBCcb!N z)Es0!ZV}hcE08sw;^ruxs(21n+(+QWn7PYT4{JVi>Xg{%WPNagW^2RD55dU)5hI2m88t)k4TvC)?CzdmtwA>?tm9t;c{%Hh4nqt zXW@VCXw~t)Y1zEsIZG!E`)!wzBvcp2z1jCP>(BdR64`6B$9=Nb7tS2F+fYni zcG=WXQsYzMiv&+|Pnm08__vFSo<@bPEwZ@A7W~+nDrSWP7P*0Bb1eI1D^kmnKzeBS z)DU@O87te)KA?i+p}QET&X~=)(k-2hf_}qgWX@u5FM>f0Jbi;Dy7>8tw0QNbB)**j zXw`9oM=JAF98s`^bpHP`m&;7e=2*q1AcJ9`fLV7|V%F7ui%P&2w$pLcMQ6#(uHM_W zE!czNO7BEeshntuUE;-bRmkS&8{TBYBNGbDRw&n*1TWlEmOWN%%BXyVC^Hk_IOi%_ zu4@h{i|9le=N3q}Q6&y>owvVBjf%9H71)MTUF;^mEHo-~mdKX8dkyWz0Mu?D$ z0uNX`uPQm03~8zaLq-57I1*6y2v5Mp+Mm#{D#x;}tZb;J^EGFyuoeGL|5b zY+@1JK%b9Iw8@3-NU$eG8$qPEwyA708r*)8N@He0l&N+6ZEZ%S4xRe&BvvkNHnm{) z6j@r57|X5`b5wO?qujfFP(O=7!!AfiL>C9~o|BI?&OKW947>Xf2RqTumgr~)ORq@6 zwFtRHeSv+}N>08B0gu$?feD!zK-g64@v#~@c9(P+Gf}L|J}DX z6A1IA1Xa6|98A!}P6d5q#n&*fwK#`OUVACtnzZG5c<`TCHTAQ>kD`CTcIk^-6f>~{ zR^!ZbyBpcWeNzQUDi14>E|jZg^vilKU+`{ozYWC0bT3Ngstx}po&B|7xq;4;GkS_{ zpX=K$1AXZA5F z6+iMHzIZL+!brFD@0N*vv`) zDB>hPUaLZPorO_{3uRZM$`oP+z|-MeGv{Zocef?S9hxxsIop3D6FP?|sdW5x<<$LE zRMw*7ww`ClD^|Z=zMA#bIuDZ|;sFE?j#n? z(jdlfxtM;Y3o4-#95&yQt7!@O>^PN&s#zxL_21Db;eBB8j8yB_prnxrs4_H4d5mfm z;knF26PVI*!}f(!6ukTZZF-Cbkdg$B)X!BVK}s;WxhT9j`MM&FN%MGWRAOJ#A{!s> zXwbmGS@cL&>`Sn>8}Nn5#6pyLvjanR{F49mu*ue5c=_OoD*46ScQ1h?y{6PQ?V!#U-0W7leKbF_@O)vh0S7;TA!}alEg3kiBT7*MmVm^-x z={pdh;(|W{Jr*MX-(a9;1+YP;r0PLSr7F-l^%%$f0JbY(j0w&)vyT^2O`|lE*svXJ zu=9B^snS>RrLW<{|E^bpI|KZ*YyI?K(MjZ8Q~`K>8NZDN37o{rvmHDV&?Z_iyDp%0 zBK|E+CTvjJmaX6k_TIX7NWP((ePdSyVilP<%3>RLH<#2{4lh zi3KCjCIj}6QrbkR80G@oxo~T-p~@=0l~DSTTq@==q1=iZT5%n*q+>#Y$3orZ!cM*N z(g7-U7^KB>k(7h-z_gbN*Idg8umV)Icvv7Ku^y1e%TG_tr_|1Ly~Z$hhdYX+;@8Kidu?zPv_juBD|nfcVj znp(d5*B4%e%iu9NsW;Mmp{#6w;Oub$y>A8&cGJ@D9)+CZ+?WWxmmrsOF z)Rxu59o*_lr|n!b(3+3kPi52>-L12CuD4&XyIv{r)X1}OqWF0w{5q@BZ@OB0`lN9^ zm{g2zB*T3t?M`N(Yoks>*yyE7iYyBqK&|blZ_uxY8)a0hKWi9XZy3x-eEg}w+N#EA zz3O1Dt=sOV*TqfK9Zf<9Li;k{$pULK5$iDMEEzAVw3i|z&X&pITmpA0s{gUfYHSw*i{x<)(F3wto@V+d*Waz!vOg);Cq=3+qhz_ z7b%ul;gxX%6VOl!Y>ok*WkZb_AS-~gQNQb8RLH_Kk&6gaarGBNwo=Pj$SbdaR>&v= zx}k%Q;6e~w_y!AY%y7~oNT7CN-xZ@D0<6R?zo#^yNxWv9rQ${SRk1KwDY1JQqMZg? z&>=l};q~vj{3nsLc&~pgvtS zWcA=_N0mu2Pw`WuqRxYn40%Z|?B(4i#ZkWU5`XqZ(}zT{)(G)s;;fCZQcRe$A5Mx4 zvS#Q$BuQ8s5o|-ShMf=#9_`3>Y(G=8v>nFb%1-l8s8H;x2CRuID?Nfz(}nSYJ&g=& zMFw_$(rb_mD^EfgR^p^4&W8GCS(8EMswG7bL{k^U+UVgldFX}_h8B!d=(732L;12~ zfEvgTfxFiTR!nOohFiNvK`!u6(?*Z{2(VF}yCNH1NJc?~?owo!RTXZUtWA)X@MBsE-p#!_H@j`lVQXjrSm>-H^sExgU(dlFTa#l{gjw z)&*c_-H?;|+WzWS{CM8>&W{p3hh&%k_u%mpae)yvf{M{6RFg3m7`SN$NQ-r`XB3ra zgWc&@mDmdrw~SX4#(kL(DieIH3-s>hxG#_=Qioakf`p#lFSSAUZ3q?wm?F=;k%vkI z`iDFx3i+s}3Dm8hr#nUo-J_3tY@~Pr)=ix@qhw5U=C}njJn~up|3YS$Q6pQP>yr?f^SN{+UY1{(&0pjW+`iISlJGN4#ci(m?zsY<2rlPo}mFY8e zvq}?nx-NwDwZA%R89UfDJaXB#Gobp*f%jl9;D!-^;|xmhhA(v4b=|Fc2w?IF=oUiS zyA!BF0xVnrkzj}jB_zKs;?}bx#Ly;qWm>bv15vSIg@c8fuQQ>lCx=YpZM(w)i_MK894JX?|++WWpvZK?U`; zGmBz~bf#SZ{jh|-XASJJd-HbTL9y;u(E#uN;8=L?)Y++ z{M9V^AC(e^csQMkVKP$avTE}gtikl^Cx z_PFKa-iy2>82L}?ZI5gL3>68d$m+j!-1i+Pf#CNmUq3J9ex5#I>$&^hRGR$Pa`e|G zIBr~cf&1uP$Xlrn*p+ejBaOBr$#ss!!o>ADj|}AK+v?w8q#19)r*{obIAk@9emm&8{o1VSAhkWJ!v^3b`mGhp`1Y2-Y zisoLpMHH_CCtk?I*zwhy0Gmn<#;BMw;sV)=n#rH8T_owO-D7!GAYFls( z4tvsTQT+jE^``K=ii8Cj^TlCJksy(Kbw-hleo*{oHSJ{H!#BozNnad%Xd!C_yS{)U z-YV}}52g96PS)jrc&o@Dt!l(_kE3x{9_4;GZu#v`+tWWysvD=ay{q1~{DWQd`SjRz zGWz~DwC4K8F_oX0|NFq%h6$yw_xsd;YI?tL`O%NcnJKgP?*i7;B|(3hK5V|TUCoo- zJKzpYT_){aKl@=_dDq6-l+BY-r)!GeE4=?xWe6DI`2 zRTNlKRR;qzQbzjUg3UP-FXu8VSp0q`>I=^{w_3xvHk91Aygqeq2S@ldA?3f#*NzFoIr7Z7cs=(&JOyM-o|% zdCx=KRo)ekY<|g+m58fJdwcz>!>zf$#m52!xp~<;H1+agpHqT@TS# zmCorHzKz>@0p8B3fOzTON{iMik8Z2d!rh*&a+IpHnN7(>rruj718=rbHLjKM4zt?uVKac*okj%eP|HbG=@FKe3juS9hm0ptmqVg z(o|!gBREKb#(X_ZU#9tcTmM>pVS9^_L$z1y{u~hCA9ye@DD2>8swOj}KXH;iW8RE}Rc(8~{uq%yS9>_}$d_AxA~S!!JiIG=^VgqUY{>i95j(*;8dZ+W z#KTbqiig&siquc0N0;c`UW+a>eU%XD)7O~?#;yNs9hh*C&q{l4wQYX&`5EfG z?5k;4+h6wBV>Ul*lJ4C9J$>MH*5UU@|1_oap$-dWnUPU*>GQ{rWo3*N4r@w=SFQ&o zf4+1_Wyu@}QQ!P}@6W%Z%l-1lGFP5#7iF%#*m*4L_uIqAvcBFub}W12%NKa1i|AOtp$yn7F_aZS7Yxcw;MuBNt6fPy*L1}?eXgwb#k(F*sL4v@9wI~tZh2^NB za;?ZCHd^|VnIqNSxX8b8R^s6~d$}FHrD5~Y^7q%Aj0$|qVl-k%pJWCo4aUiCo~;V+ z)|^wFj7tLAT4k#^PL>P4;s9-o>fbdN8vJ=NUBlmMgzieeUR>_#8LK`>bKX5M;`Ds1w(Yvx0m}2r6Z7+GwMh4XH-u`38V#Mp!ET?<`JKGc7H5!>;Ss*z zck14JTsO0RFcR)x*RK(8T%O?>t97F8VL-fT)4FGZvwy>jws>>?py!@=|I=^h8>8a9xJKn8(rw{oz|7^P;_cp{QbHV@2=KSve{SamN922*@ zKr|ERxCRflN)_JRsi9T5yFV1|EX?M^}@-2Vk+oBTK;SrbQ z|EE6Sf^*cO$T?Ah7e;>gV9GBSAOM*A~YG?g@Lh5!78$ zemV8ro`|nUcAAdKUOoD8&o2JOoe$wbUAeZpOw`ff0WG=n1%b&i%9~SVCUVzLoJ)>F z>4rRs54v$WOFQ0bGi0J5=ybDeN}|`%H__E{w=Tt{?D6jieLWO(`-bKhWobzd(VK;! zJNJHRBxh`f3E+QfZx3E(l^+eCKlJR*s8@V?0`pWm(eOX^igErppe7N~CDSLf$7hwAG zq4*7%leL2h(GKR9Y8o2JZ!wX7?(ikgv+_Gin3&zc{n)|f0^6;qV~2RQ)qoWi4J zE=)CQ2c?!q*t|hK3?4F#q?RUT#wba=7_wSOJ)UwmMimh<+yq^zEYF;$$&ns=#IGpU z&csq()=Pa(?ytQZ?x?#f!j!!!~SJpMVBlLOo-k)s- z<+JX)LSLwgCn4FU2)&PmPDV6eQRtNAw_jc5DKpWkVbi@{zppphzK#E1*qhGs-#0Huyh+*>_O@~C_wD-; z(|eDF%~at2bdP0C?LQOtF5Bx*&%3PGhaQH#XO;iy{o3^E$cL~G(PMue{JsA&TNEac z$N%QxDwc9o!-b>XYkkW2uLb`LpPj5&8!)K&TCyvAZf1OK$QJ*t;#m0nJbr!HtKwVr znedOICGYi-2>kbx55pH$E7nI-D!w;-2>)+ue0@9%zuYVeUxXIk%q`4L+kz{9^4Qk- zy#8Mr7q0Z#-{-<)NA|(}p~_#vzMp?}_us)iN0gUhj-Q`;oP8*+LHX+*pUW?%|NSnx zsQm4KOZ(eT*@yE-l)oQ!Iro13-(l|!<>lPNZ35J>bee+7kJ1lkXGx;;`ZvleC$?Rf z(>b=Te@*OGUJPX6xU&C|$Jq za1cWS+1P;fd3QZQ18z9E{B@P4pc&)(&Q? z+s(rrvi3M^zq#GA%pv2n!;ZA=*1Zk~pE%f>ZMR!;NZoXxty<8P98>fh9d24UdO9YC zIXb6VxQH?x<4PUf%q-kH9i#3!dajy#%{WGUarC)q&cHf_C_4G2nfu!~1$sCInwbYB zJNX`U3SKn}X>{_s

((EPT|-{e)el(u0UCCufXvl%rX+zO%ixbF7S6T)6Z9_BijJ zG)*XTwmI#b)MmP;*V*!kb4r@nTXHtvbY_{ErYgCZ=(!w#nx=WW7>2nVnlw3_>7rNa zl2K!Fq|=3Z&m}X~Bx}Y+~>0nURU;5y3ws6fPT97 zv7BhsttpS*y!4o~<;J~9Z&4ai(sw^QPjB-aQ4M!LFJpfpb40Doy~EM|V&{lvuX|^j z{pFbv>XQ4_Hv2B@6Fnu5>y!33Y@Qf;dfb9K+)jRCoaxbR=5V+1iCL$|y;z6d(I?wy zJRa0IJluM+1MA5jaOl$?wYBjaSalc-AEhOGKGJX;E*o`d^c)Fre9}AWJn9M2P&}*W zP_Shh&d5z5OJ6VUpIE(-zysS8PrOL$pIkBxpMubdIY-t!4a>Z2!*XGkIk4gUMY`9x zhRu7M9Q7%PBLEfNw4>^etJ4ZTK%p~v_U}eb|Fg+4U(568)|gNl=ieI-rWNdF!7@d( z{?7xZ|CQydBcF<|^?t5;^X_@imF0UDfr16&`ZiB@oOrs9&9@!SGgv$MX@LH>&GcWu z(>Ow&4;u=))dy}e4X=aD&E&^T@(-(*sj51xz8eK zdBoscF@h@b(K>St{CXgt$a_w0daj)OZ2Q}MgDHlIFW5YoP2)Y?>U`c0ff^8{)$bc@ zd+FH;@!wHvXno)RzY%}iI77Ry{_`9DG^cKL<$!wq0Ef$Nj$Q$c;Q`K~cWy3O0cXkr z+;HyhmjhaR13Ycrz1{_!TMF<=acAHH+m!nvQ?k5NB{_2rX9>i-5N>cXR zb3dqmG$_T(bMM!np{*cRmS?K+&d2&Y4_x+4^V&HYzVpyK&%;?eU1R+-aQ;Uwzc!Z+ z$UJ!U=)0Z!mv$brbz$Rz4=M%cq`2hT2B&)l=Qp_&qy!($3@#dTDQ*hR?hG#d>ryrr z%$W(UFmOHoH#iR)QWfD^Z4gpewzKBo;E9N7(u1d!g}hJLtUgp&kpLgd4;x~@ISA)^Fr2}1LdI|fjci=esk!4XlMS;%kSP~ z7=&KUaz2fFiwq0BZmxU7Hmub>>{fZtwUoEen6U1zI(M7iHeL+7cVDM>>}|uFum|Nj z5C6VBg%0PZ==2%P)a(c!u+(ygVgb_;iVhl z6X&SUlp~6CBVHV&PI^V)pM<}Xz4|iiU2aLlv;pG<&5S8wq9U~rSD0h1Oe|gt_nukX!<6veM!-i6e`ZPzX-eA( zRTZOTgF0pQ3PX-W5wi{CnxnE|VTxKtr12;VV-3~c!u?TDXL03f0%GfW*0w)N<-sM@ ze?qd#teRc4ntSwS#O#z>wEocSeydioMQmamZG?|8#?N(4N9j4A&>x>QP~jNEgk zF@Yr()QH@z@fmlKaGJYZRf5D&b1&|)<{zn{fUPX~pZ{OE|x zf8KZkfaO8bIheHqD&wR5`B~Q|v9Hzg9cU011L{P~_oWp&uf>_V!ECuuch`I|y$U0$ zscA`@a$#w%a3(otkEI4>FzMszBvo{ z`5@VIgxJ+OU!r$+gFVwQL|Lbj7&mMzd#e_TrNd78yeWIC8{Go?;$3k$T^rb zHU=p^h5@RshzK$WN)*eiZ9Yb6A~ zn6EpL>zbZt!ODxQgoFmeY^jJ$XN3A(MD8mH$TB&t2)yVFiEkHMz6fF$J5s<- zW+mB96gV@JZ0Zn|T3{5dFoT@)?i;j0vu&`aQNI`zfxBOTpcwYt7L4p-(lp9C`(!|x@!>fCkP`Cdk zs8?6JT3MAA(OCI{Nba{}0kC&5U!txMO3r6-Vav_GB!+(lcC%-i_Z@X*@7VWU;y>8+ zpQJ$s&O#N3GBZaeVjt zn9Hyk=2oa!LP*+>+|mfSH+0c`N`=toPSRW|NcJ|krsnXijZZ&_8v(HV*uK_KUCWh?|W5y{S zFS)*5v*8z|;WCB}LsMficxNwKDE$wg*R@u9WJ&CTi$@4#mi{yD#kjq+g47@RaH{io~wPv^?Ni>!ZcoPS?W zUN_2}UNA^pl>YQ(Uj&P~1vjdHELm2DRL)dyPmofxO4SL`c#)!D5ZG59qS=+Ex-SN! zdr{)h-*TwPsp6vc%RBl<+fsEeZRyW7*^$<5W_3$7-XaGQ5U=Umc+vJHjm6Q!y8uCP zh=7jZio^GvFPY=BjZV5&fx;YWywl2FmmGsC^*`l{g>kz-wB6ixRsVg{mG9I2RaXr@ zv_@}&q*7fzzbXKS*BXLv&$$#k|srK&kdE}Wt)n0o8-{>8? z!RLzK)*fw7+i}h0>sZ5unax)<*G$~l^lRg8U$5+5p6JwNZP1f17+BD}Bp%edWU&Y^}nB=)HeezkO)GWw2@b=f`mDeKpJL`!@gm+XPEI zy5F@w(p}*i+1wbkAwp>L7OTXIlXLat#VZDuyGr)WM|g=S%j^%A2^pS6$yQUI*5a#crIjL04v6l7Hl62a%MEcFuL&cdEewX?)Ks)f- zx(83}axigs~+TNkTjm*SFXx15TlVn=6-gNenevoas=;VcN+bZ1AGoD?_L z+fTJzG>eNQP)dl0!ad&R!P_ZTL3i%I%(JrFVv}Pw#X-55igDUyz6r7Ha@*y$8~M)5 zTEV7qw{`J{E@t3-;q)4o#QvP%^~h z7QLS`4;uK!ys*nor4mbAeD#ROv(A2loXN8rBBbSq-MPP&m!|P>xG*(Km&0=-R8osT zS+<0hE2YLDw*;%pUz%U<|5B-H6MtI1u$vlRsajd@klglQe)d5==Tjx_LB$`3>TbJLbvdsd@y(L5Z-2o{Q~_HnR5$UJy%XOb(~k{;}T?{qj3tZsp+i zeoE^_h2#@H8BSQ8-}YFwh&cZkq-wCfcp@T8H^fG>MgPj1jBI z&17RdT(I8cO#m?44sPH91X=XOqIU zsV+iQctYipvQu@JG*q(1@CH{I&=qE^VvZqb2ZV!Jk$GMN-AW>Q|(Xv18BQ$p9^!jc|pzIPbeZeZWVyKCU4j2oeWp7UK z;o#h3P^msmg^DpJhmx814aqx3zq zq+UD0Rm9yl^2;>=81aEp0T2wQwj*X|VTy~wRJ~xaa<AufW|qoix#-h-9zbV=!>z+YIX@0=Q)Ghdf62&VR6zl9`Nw&PUV!50||_n;g{ zgz;WGdc?{fX#=ZTExCKgu@D~+R>t+fw40T&2vd5e8H4)HdngcJ2ThbY_Q~SPBeq)g z0ttC_&Cy6n;@20$ePbbsuRQIQKZJ0;pC-GS_$(OZcfx&hM5VbBWl&zIiTg`EqInQ`I zqZqX>oKkZV0IW&XMBPk+$XJPP+*#I8?jfsV1iV3i4qMHy&o=frJ>FmCC*QDO=gl*| zc^!8&NsD5^<8`1phSG+3y{KVvz7chek-ioAN>f*o{|&mDtDr)ntAmXAsCPwEgaHQJ zAd3z59%(?G$Of2GIqe6yKxKEzu*wZqA}JVdwg*QS*1e3T5bp!$3EsV>3<9 zq6C_geNaXyRmGS2Ip-!L%~GrmB>6&jEDEKSs$-KV!8V2-!X%zN;YJIKrP{{=T$@Xm zd1hy8S*h;iAIA!qvg4;z-0S*M6qMFOu|jN5ozm$rOT3r1ko1HNQ);=SdJJ$Jw?*VC z)#k}JDKL3lb?$4k;EUx6>H$M+cwq;roYD?x<_ly+jo zkR%(f3~rFBjTqWTNlOItt)&#it_C79RD-cQEi}6e_=BBbS3X0ywjZJqb|%4OUIt#J zlvuJ104dtgrd*jK{aPU^Ac2bl*?q)W^R;$Gf`M;XG_6n|5bBgKtL9M$1E{R*+{IE% zZ{*9AP9=u|#z7WO1m;Qo*qg7X^Z#C^wMpZk!M-~#Vp>e5&==O)?`e&L*i6;rrE^Bb zMQZFUFEcy3z5fISc=+n>-K9%O;aL>IZ>eyl1>~Z?&i(EZEF1U6;)GG@ovYFZboP8I zm%1zoQK*UPkdF?Z(%a-~5Q4i8SWdV6olKni?P1fU&M0{QwY2@VO;{)CZXJ5k{|^`` z9@aDLmDXrm_sEd#Hl9t#pu1Dwdmi|e@o36HZpcbbot`;@??caj3c}}&nHcvbNnN}` znlQF9ptc!CdaC}4*^3+0oA5K}YuC)`t>M4Y*zdDbeG(eTfSndwg(bMq@1#_;>xF@c zaV+!2BdRV$e;FarbNCut@ZzaJa|tYSES4gskln6XQ%LtE_mzG9m6=V%rDl@@YtXmYQ=X~#ETsx4} zuE_vxnFTAd+9h$~yHYdul7@7Q{K0N+mZ?^TD{Xp_w`CZh!gPi?Qy{!~__=Y6Ob0+_ z5|xcq)D310ezeAf`p6DVT7@Jp{jvhFz^Y+D#n3!Aj+JRONG80+^5+j%|S63;qQohq`!2*NV0Eq6x1npS;K#-yx&_F(QB!5i3N0Gt?E6##9 zw^n!>uvq#DbU3-_zx}*931!N~No}!43IUj7NmjZ9^LL^4Ht=^LdI!3QOlmd+ezDwxcXofP46{@?2RM6SPM(4m^uQ9s|qK zKPtts0rG+)t{+XhQ&mYZ5F@G?PH1cg^pre7Q-Q`ZM5dS~&j3SAt#?`+Phx)rE&{f0 zmkqF^nS@gHvOfatSn?z*HG~!1CYkZW3QpH{SBM3ff`N816LZ2ncB}~_0q`t|62^K` zEObj_Ln4XAVt`)vary3c;|YP%*@-y=uhg5zjval#BiJFu9gx&okB1R^$KAaU%!D{Oqdm7Z_=6w4_U`!S;aq$gn(^5pRX3n+s3#&jUf&J35IPX&S3) zqE4V-<&F^!_pZfA9P+w1XXD)R+{X4}b?s;}Oz`Gi!Q6zK3$MC&IrT-t9VB$>;Em`6 zuVRoCLZ~mczLD0Cpg6VCL6Ajzd{(>h8g`YM2|@s+whx7`BAEb?;S!{r)LZlett~>e zWW}qRvh*i(Axi^Df;AQWGy1F%Ek25RN}A0#y)^_T_QlnFbHL91~X)BbPVyHoZ7tOGP?} zA<&=!wAXS57LzZ^3XA=%n~1%@Q$Gji#~Td)aEKgYPbb0V@jPpSY4$M589qweWJI>0^5-Qjy8lD zkWOc1V_P6+T8crIVrw^&-rW`?WbKq$9|ufzIF36dYJADFv4?{0G-#X~()$|eWPk17 z?2y&DVTZ578eOklzrG1P_xALTqn=;iMtpr2b8e*8=3UCU(cG`2Mdxfd=f>*KjW^Z2 zt^GRQ`*mXIYj)?k_tWPl=WAe-UnkeUe(>KBQ(XmO1~+7ZN08LFk)6XxL20!2DapOb zur1`=YDUBzPKwWG!cGIa5;(U!w^!r1oxg@(QfE7IS(SjZj#K6OZ;#ndU$KqJgL)uX zCk4H~$aaN!FA^9Dp!eT`HflHdstEyZ3wJ@^mNg9CplZXn9Kv@O9MRGL)OtuF;M;-# z&bHM`;`2VH#Rmjm_+*ueJNpeWlI$_p``O!eE=|AUw)CS^z`XzY1qbLt(@RKC?I}U+ z;gRzJ;&1FZ{eM677uWSSK?Xqd11e+^phhGQ!QMpEvKY;gKK_kd`Ih+7a2@@ z+C(q;Mso4Iu({R1Wo>lWuU#;7+8sx$*MP1S^Le;01B)?*Z@*>-_#x@dSKf#V)_;WP_Ova)xyB2igeI$|xddX%mJwB;qhqio>A7~{gnLGuzP zWNbrN1zv6?IMd{&y}{=iS~=;r&D}!TR4YdHEp|bgH^PmJ^4O34rdc8 zVD;f3Tf=~uZZ@b_RLK_TFx)Hh%C6MX5y!x8@xYQPn#r%AiVbe!$JF3ctgUQ-x$n@J zOt#{)!w4qOSR}7WK2lNbNAY+B&Wep@Q=>GgpgvA*ir-|uG9nvH2~k#Ep_3wptV1%E za+JU;yt(6T0cT%R*H5DY2mw4l(^M^3$~IyVX)*p{Fv#l9d%c`M0|x z-(9yCUX$U$d0-HZjb2iSR($hc9j>INeaDvoLKF)fd9<%ZDYH68;iCtMK%h*qjh5Oj zWdbrvV)05ekSRc}I<~3C%21w`nTK0o7AxY|W=;Tfju1X#4RVv;M5ebvgR`#or|VO! zyl<+T3j|VwAUFwNkk_7la>%?JmqWMO|It*=P2H3+SUK9RsUd)4f(&NEVy3SCev=8G zV(;Z2?mjMS+6Pv9``WRg?>9l%O#p8H(caK+4Qk;K`P*TsjmgdHReR_qan|X-JWd~= zA%fe@mEP2>w3#nigJp*xp1HxtUCEyY^Aj}>n51t-Sc9r#9v(V^Q^M;qK}3vZNeE!K zBykx>lje$yR^Dp&($43f)Z)<0mn8p)q$=A55wtLataWIMNA6V_xuhreezrdhI%<;i z1Y=uoD>BSY>V}ls}X)Wwn#`iUs#*29MnE4C|`)i2m`&9ygROsjcx+&-I(X&9hQ` zRzap4O|~*a70cF2Bmq1UU~bV?w=d?|O*3S8o2F#GDUoz{V=fc$%029y@z@u}gPB8| zy&~b6{UNzGu(?r8^BE0QN>s6Swox24(<`g!>FAq%F)|w@L}W6i z`e_M|og5!^!VIdL9lI^WzWAc5!P!YTJ?rtdRGwSQSn_Yjn*z}hYjg53^F~2mO$>w; zOL3yU-VNH#iZJjLS}1Am6UDrlp)EW=+^6thGx)>Cckm|1C=HM;Gv(_-T0qzSHWN!sv5V3NL?a_X+@2;V$JDhO^KAVeV;06}6YI20t65t=>-!taqQihP*7kpJf z*x3$|exPUQ;m7ZihQx%9a99fT%cx1l3KW=3uL-T6|>DsF5L3NFQ_bq!w*%xO{b|7k`PqYR&P|x^*qM;}w&Q=?Q z;j@UV>W*0muMf{+k%}gfN+E$SZfp{EU)fN)c&sN=_eet|;nIozduCTxHwdA@gZJ(4 znnV#VpMF#2b*R+Fo&`83N0qOUJ>@6wKj!pQjCTh5MsF;Q9D9U<6hOol%hSg3&WF6` z@^W)H+u2(K{;OOZKDQ<5f@_}TNOcjFUEtPy<@N&mWPyxP)74KtB{y7)4_wTgLdq1~ zC8KhkpD;;tROwy%o^Ta2L0wlmjxzmuOF*h;yj*BRIuEt0rMrAzS#%L(i$kvq0Ek;P zlaBS@BIqb{EA=e9>u;GIXyYIX>aEE4_1rHF7f)-)U78h_-aS?7sjW=BP~W>45q4kN z3;ebE%2BqdzwlUWIIjd@Z_qSV)0Y=+-vCG|!805H1?JH=C@Ea*- zHshcr;bWG&f6m7{e$ks|2Uj%!aFWH6(s7Sak#Kh4m`ISL;9tu-hWB0svOPXW&}M=Q z<#J!CT7aBcis)IvQ`65Q8c!;ZF&oOtJPzxAhB-x4ZXw``5CH}E4usrLJex`t?`!B( zkI%Y9U1P{^%M0|ldopusYn)PFlP*CsD?wP`l2&t1;obonfauS0?Zw<*F8?wRE+RnR zx;O3uv+tjgJH?H%_bNFzw(c8`#I=}1Zu*vRFHemY#j%;LoxB%;yUrGnlg^rZh-Y^0 zPssW6DgV0a`dmq2!TNlS+71)fz9~jZ)KI`jMd=8;Erhc3OJbmhok%;6nZ!!G4L4yQ z1VnO|xUAqJ+NOw2QMG#x*R+FLSkMJW0n^4-BXJf=J3)RrTmU@@uuT%nS)2;ktCel@ zG(rUa)(wuT4(mD8hJ&r@kTHHu2_Tax;L^?_)Tf~vs?#Dcym(qFWDc%Pp@L-d_<(BD zj*V2;S_;W3s)B`tIEP}xKiw`ja7SL_>$_^I>ZLT$P{f?gCgMTSO)s>{tjE+a*`NXsO#vWn>%`1H_1|BEr3 zU_buyR!}4CT5r0%Mk)j1z=ODFxJoHC4BT#7v;TXAEe(weihn060i@MaO88y3Kia)G z=vrsxkE0nl1So93HSM@}4z#u1%|YvzzyZEgPg*mR(PUD!G*&Vc*}7eOH6?xOo@K|2 zEeShA=*6^II*_g|%X!&CG|H@6J1LAci zYz!{;!NF~SS2sH$rIfu|wmn*|_a^1b%-(!)4j+5nmz1gK=9BF|_h;*8rcvq6eBJKT z^M}hU@s%#O=iMqQ4I>weQ1kXs{}m9>FU+XI&{*r>-6QS~3-C3k+!wq@Pb;}^{ySC` zPJ=}Yh#rXTmz^SnUH*T@jy(T|=d-2!-k!uZ=S#&7G=Z!aFx-9u>AsBr&!+H2hVU8_Pv-R-YuPc@Ix1t6RQ3%VUN z==0&9LZcA>jhXD@JEN-jw8#D1#hh{9&zA2R`J$ThSAF~z{1ux=-+a6BblmTIv|`H? z{(D%DkN?jC#b;mKzekLY`~PlLY+b(nJ@Sjs(Z7>dn@vOyuv+TKg;#+J|3N9y$O(U4 zl9CXvzZ4_9ho&u=5YKRy;&goj&_|Wp32&DY%q9Y)4=Lf!G{(tdWPsXQ8k>r`9?L0S z6M>4)l{$CcSx!CW8>IX}smtu`a#|4PMz9#vO;h;6N%lRasYd9r_xO>KGjVL|K0>d{ zogY~hzQ?y6CA{={`{T~jiQ@*>34H+yKeICzW$#KF*SkeCT5dcP`F>7c$g3Y(bG|3d zUlIoFYvJ-%=?I!qkt*lExnL*{x&u&DPkC(x0cCDIu#Y&DerKgv*YA|$QR3^Iw=1P) z?@t}NP8{Yb{3^HiJAJs2_@=_+SEbkc(?_0<4ecI`*Y^y+d8W@hZ81Q*I^6I7WaPVN z3RgtHsKm#IWgy8KzMiisObFaBgwuj&cGU%)Ckch#}>RSf#EE2`+8#Ep0U-pzgz44k{khnqpHyjTM)I$Y{iYywaMRY zgh^)NKGHPaHbM3+?!t|uq#44y#*?4&&(R$MrL4-xO4w;sQB)cWJEBiF`1sQ!NXE=s9SviMofmeAG*_9h*T zoKaKz({tqCkDP%>-$js2QsW-|w4=wS+xJSHj_$%oU%-Z!2g+Km1pMqd8vRrAL-*$+ zo9m+=qJKX*`in0iOurnxZnC#vz3JWNzh7!F=MI+22n{>JSev}{XH6RT>((0g(0Jaf z)p_;*lDCl;hf8HYKQ5AY`N z>YHZ`aI0ik0~3u@2d$LFt|Y2}$V$0XY{Qh4X8>|HTYs3oHU~oe=3(E6z>z|v2`?p! zqmL4h`T}4qrkWl{a~Yw=+G2( zm?{^LB7~n6s|1P(BkG`4uF^$`0Z<)vkD^dDNc7uDEEj!aPOWkU_yQiJtq$^!O=`uV zvMIz)CTv7ZXqbYp@Bq^RKy!6fBMMBsNyVQh6P{8fURbQ|mR9P*u+BY#!;=#0FAscupt85jP zIyBBjGoPH4z`@tbY`x^V^=ih}YeU5SA;0J@I*A!Ngzw9%eOsgIQ|hM_7pTNyHnMX{ zaS9+6EKq;LMHfkolq`HF7u^6<8s!q58Okd{YzA33Q&tTn{8nCv4^fxz1t3^lNC6O4 zG^JP+AdO}rJ;ek*OXY+Z+5wbu@(Gm$}fe_}Q4(k;Fny5s>V$d2_`V|=tQ-`?; zwOhofD^xYWCVf||x>7EmSWCrp2zAZaDxFiP(=0$OgA_&sNffr(EZC|L`6EESGC+Qn z+V44qX#p7hnv%0+BTrDJG<9~|du>+u(~MoOQ8Dpul3%@v^PgjF_P&W)P0hG@~T4%AXJ&u2i(au9sXXZvl+>1Injjy;<-u zF2O+#B{6>MABGlB;V#x;yt&BrEwEt$;Cv?3TTG}H6CxivUYb&5sKBp-C1$<%Y|NX!y0D7=ed|b7Ep;R&F4zZ zlVJ`#&%!fFW)#W1js*h^LuyO?>=e|8fc(N_5Xa^e_`{D|9AY+d@4>%O$wx%)G^ew zsFELoig=imO~nq;z_nEHCB}ivTx9qRVVI0G1ROO`2-Z z`0IL8D8>M9e@Uz$KZSWBR1i~DCnZ|MDS)lIJSxE5jE3=EG2Hc2A(E{UCMGBWc8{{8 zr^Ql|1!y`C(6EFXrbo)qtC1v?3lS`LiKLYGx#d7Bb#&U-N*Qt1-2cxrmHU(KF@``U_y`kzmx+GIJmZFKVO5A8sc!H{8ma@elNa25^g%Tn=V5uC`dh)eRPAA8>T1>JH59Z-MD zg?1hLG)Wiaq8yO{~t~>&~ z)J4NavrhedbmX;IU3*II$5g0<>he0`!ed?kK6DOxx>s*wodnQ8vHaweoR|tS zGKA#{pmCvST`p!ifaJZo0_{|X+fa8EvH>VINh%e%5{kJfKw1dU39r#DT#rj@Y^2~s zI|DwVj?xl@<_MwLTw=BW9mtIts_9hTYe*=ct;Z#?_F^>x8k@c2X7|l>0MctTUoVUr0b2` z?u~3PuiEAMm+?{lkk$I8*;d}*JO^!4m}xpm6pb&4~7;X%8#B9QBLME6GZ;^+|u@lvd#5Jy6aWXBObdqKR$V{;mml$g?p8nWE^I_?%Mbh zIrDly^+$>K8n^AK{#(_Ux#!UVWf_b*7rqArT~z8l+#ty#9P^4ibRPs`+Rsi7NCPK9E1`_>vza7X>Wr3 z-k!{Vd*=Py3o7p}`MtC58`|~$-F3fZ6Ti_d`6Fdm-1^sVm@ji{c>@m)b>q=$5h^2P z`C|`W=RgBSZupJw#f)y#AC${?`eq@MlGfGxequo7{lnMoy8`M)G{+QM#%4DCCbymW zN*)ug7h_=$7dippfpR^mTwWh)uf zz!hs+PVFw3DManL#GVS_!OwH&xA1_G!hWVud)TR;mHP2rpZ46@kM9;g9<}`Dt*Us| ze`O2sZ(y|Sbgj(s*7<7v&ldoH<1D{%3g&pXesX{lIzWRvx}-qsiCNU~D*@AYX$wyZ z79Ok0wyG|+`!9ACEWVsv98mrG+W+f2|HZpBq#nDuY@*1ymFo2e@%`@Usc zjuu+ZALd1s`%k#R77WxCJPLpLeE4-#Z8hlV>dC^@GaptjsQo^&iO@Iu_Tl}v>uPJ4 z9ahU9tZflt&W6Au9}*13&_)2%kQ+N(EfXbFOnML-cVQ##Q2&@yf6_qW7XIG__WGVV z@Wbc*sSo-i=Qb7sKo1Moh8Mw8g^<~O|IzrWSJ*p#M;Wk?*&Rr7FO9{j<_cpGa(ceq ze4ceebCI99RbA1G8%n!QPjuJa@47{{_887MM~cA0wTlD=nh8qRjHnSr8by?6Dtc`(0D{&9T#b-WQe@#_7{)wJpMZWJC> z@cs-uT5spQB}8@50)dtUA-#Oe9(T#>R0f7qm%y`s~aXc zdF0Sg2r>&)QEV8a`m9dggT%uUlzj8pC2Pioik zz5l`RAvXVxr+MsR#z-j(S9Ut=5+1wcj2RFZo{)3hc-#X7(qlo2fiEP>nWL#iR_4{^ zZAir$t^~u7?^tS=HaZs6zw2wKoV1*WR)Ce|eLfJbNL%`ox(V^%zwUyJTL75ymX8=# zxUFl9So|Y?5LMRPGyRqkLH>)bWkzzPWN5wzAZ_s)Jt-9^>&;ISbO}VLp z)y1C!RQQe+k&WU_4nH3E`{mGcr5n}tedgmBwLjH|K?*zzxme_9v%0Ul7>vvT{Jvpf zg4`Sa&%UT?O2~^N0i>l=kh9q3$SoP0Dg78O*L<11NLk-T47XKh2U};w4W0L8RklZa4eWpSUmAG9q4Hz zCfyHivkau9sLcUl`gL9q^hNPnHuEZ1l@36D1|%vhl40xJ43mbggyeAbxD_wrPv>%; z{M%Y0Fzf(65NAzriib1_*m|fUKsbYn|5cu-r!)wZJsT)Hib)3%Dai*XxXF!5&PD(p z+@Y}qoJ9$QPcy;c!cbS^6@NhTFZMNpx7Wb!zuPg)Z z_VQz@ZUfQB*J!doY|5@e$S{2Hhp8d4_An40whLqtxMxm zyG&Vh7|Mw4gI$Q*Bp&mInYLJCF`WH?k@QkE(*V*D4i&@a#)bh7gJ2`J76m|8W1}hH zL^wd@-BR2Me_J4mV>Ne-+J7cY;%*$VAqA3e>e;oy$Acx3^QD9nd~2+S7^Fj`Su31R zKG;g>R8B!9?toZfVN0&~NNIweAMn5m9647yz8D3vREJAa;cGF4{(NyqWA zvDJpg{+s(XImweJ+V;K?+iW$ji&Y72%X~p$BU2n%f!#$)CJdM!J>d1{2xpY5=?mRr ze(Wd1SVEZ{P|v0gjKr}BZ@N1v2~%d$9o8UO5gW-r^V&N2BK(CN%_8qFU@`EwrK>nD z>f@%ew0*Y*HiKbHY-|QA+s!naeBE&&WYELqnLAKc=>=x4Hw{!yLj@>VW6T+E^=xP| zCUXZc<_J_+^)zlL7Z!At$0nbRmEGBGEyZW4;rZ4`&u*~MaA&F>lMX#ESuFDjoRkM^gdu3u>Cc6p7edxzxL-P2I;CEwlMyoX)9I~G7wsJ=CDZ__sJRmOBXcr zlD|7Y>AR$0peJrQ@q2c3Ak5=uL6q{z-y@Iu%K?uL4n&?X|LuYHE{CJwvQp5v<8}T@ z@U5OAsPTvuHlRC`*f5MGcygo-DP6&JBGhq?16WQFLktvPF6D`_7m|cqOhcfXZtohE zY#Jqg+E1AM&nnRG0WXdhoh{P!`7`>U7h*k#_;lLm@7Tzzh9!>ei4TV6{il+46@4Ln z-g7eM)fLsy9GU*lU-ZnOEd7Vvm%ejGB=3RmCm!)WEc)0vHsv_9Bv^D#K?y94*Lhr_ z$yr9Me4G%au;*<3p&hZ?QZ&RP&ajJBaDA9R^fLuU6yBt5{r;c)&tNOB@5xwaxqm$D`)O z_gw;RZ*b&4g(XO5?L2s8mZju^U>j!1B)EjOccjcE7)ElWm-t*_YnUxMYbWPum9^S> z5?od!?sOZ=q@^^&tR`~qpQ49XUtN2>V)1gnbn8;$p^fS9 zvvWBjtH}!IUk`4nEHLlJzyGRwwf>gh(R0tQjop5A<%sV-)xlf;M!x8y=CAGj9)85~ z!@cCx9d7N1>gg~khEiI{ND;=bT&Pzqg2*i#B>WKo{z~!!xQ9KtArV|OaS3P>4`ni> zrWt6-IT+`oW*G3$49F-GL}j42(?NQCtS4vd1r~_Qy7rNK&F$^A&Fwm}&kvmIRE#w= zjWx213@nXw;KZ6Y##)TTTCT-XmEx>S<7_Em(Sz`VcsgzkiA>t<2G@43z8XPK6}Pyz<0} zJa3|&axkMDiyz9#0H`w%FYlGE5T34-lTLh^P8v;D{gbYkgJ{H|il)<~()S+>yM<(D ztlHhueTueolS-vSb?(D8aT?1>sj;3M3ws%OMN;bw$I2|r#w)9KSvi4)K1!8Bi?W>m zWYGz?UCnO0dENF1zwMcG`;fg<0swKBgP>K&tGnWYk}*%=$D#P7MlN)3Pih@irgY{~ zz^SZIue(>m?^37blLZMfjI`)KcQ;vt?3hy|M>#|eC+$+Q{Bf^4C&Mop)}hag-g&up z=K$`mAn|T?PEPLA9Llu($Qs&9KDWp$x7aJUG(5LFC%5uxZt*GEMg}5gDY+(Oznc+A zZ`SEQA1CkUwOWKkSwNHax!{ ziQp{B^SBAMw0l-e!V|B1O@y3hqcP8Q6YhHDEshp^I~6OZi&*34_329g5as1^k*iM& ze<$bv`%@@su@5}OOyp!Y)}vV*BnyYW(8HBl=i-PwS#zGeH%}o#k`}=uq)5v!;s=7c z-w8z;=0#60=dFqJR!8$TRYbs50z8CM1R~xyG{67qDMqM%Z|`C094e{9FxztdzNA0> zoPTqTlZ3P{vdb-YK)JMKpjl)*eGIT@gxscAqHm7OB;!3%CB9=N{_7!o`t6LSdl|?9{o`TD?7WM@ zUmW~64|Q?~d>*J+=3Uj`P}PuI)znngGFH_ZQQ1gzcB@14GAdY2Xa`31{if=^vFc`* z${&vu49JMh^XcdpeCczCB_dyihbYC#^%^m;cG|pl*1Pr-O0lC-J+G;{XTJK|dhJrB za)v3MIR*3=p@iJiJ}%hfA_#$BxtCcB+QWzV@MnmGOdx{Sor@XgOa0~Jlo)X6*6 zrOf3o=hhLM>+E(um^}TUhKzl~gboYv8@s`PGkm?~`t5&f6kQQX9K^qNBO{-OCf6RC z-g{`?{Lo_jq2=F)ROLrjdmh=0Ka{~C&d}=|njblhKXU&2h_3wDbcl@#c-^Yyc$J^2^tgW=(h@qEp7)_u0WhU$(85<>#S_HtW0q~30OseUCHv-5- zAJpbJ89TBBx_A%13rD6i5f}GJK`7u|yI}%=r4tUiBt$NdWTYw|ytsr6CnLpE3UVO5%mBm}B~&s4 z(Rrrji%v^db4%ZN%d5XFBIRd8d!7yZJbQcX*~qrNSoPc?`j2br+rV%Qa~Lx(!_2oq{V1#WH;NFAY^ z-p52uauL7Nr6;M__k7b3Cj6WaxStBo5JQhsVBhI&$2suCC24a>8NmmckwF6jR1{h2 z2@aEy0Y1WlTF_yZteSfi!*~wbK{65=JQrrtdCa%-L}X`hUgznS&a)Gp=Qlc;q^`4= zQ=z_HS0cN@^132gx*{jKqBpu&r0y7t?l|A>gvjosyzZ2i?$n9yw2f{KsVBptC(F0z zPGnDZUQcdIPeNWKr}S!X88oXLl8htSx8FoWVo)TEs~EqF4_-J78|Q+&$XM}fqnbR) z+1v}^hT|Dh{#=+YU8_g{!ANpU`A@FVVP7?*U~~+Gg4#6VKn_w+WO`G^62_Qy#wWV$(*7Lv>;+7qFClK zna@OOg^LjRBGfYx=DkSjKM_u4PvnB#P~4jqz0M_yOisecV zaQlT!*tR8@r(j>Yp~7>KEb`QuGrhd>AMntveA$%kaW3@hS+h*VJ3_PuB6;0sjKlN`7u2dcvXn*l82 zGvP!0z2;P)o&b|5fcTNIL!B1o_dFZ;ShFR}WiHqgK>5Q(q;TNOC5#h5T9RaRe;9L& zA-zL{iGK*M7DET<7%E`jX9m>K7nVYSJz=8V`lK}GXiiMY1H!Z(x1yk-XK;t^^5HJP z5;hZghI~WIe|mFE^t4XFv|j7<_Q`39J%XY-V`w>J(DyuG&$@1Z&s%@fhQhs1fW$_CmJae1lNh}E3jdT)HV*(9`NZb z7vv}T9t0q-9q(WN@{^^*?8(@0Yk)BwrYC?HiQc!AKn{uEpaSUzanSx3lllzkeF_W) zm^v+h-h2qS-_h?vrOExnJYdY_(?JsFcoerog9^h?06WFv(*mhw?pAvN)Sm)Ya6YlM z*h0A$vXg^WmMYf_Jgu*o>= zrn0}ZWZ<}yjG$BSa$X2)?-NN?61pC9S`0hSA7N5H-1rZ(k17cgMTd57jllt9xYB=a zOHWOj^$C2uieNwrtcslx__yi#-_=qsPRmj9ASSVC(aivp?Mw{QlB;sc-; z^Zw00|F`(z-?z{}#Tl$txgyZ!FD=bn4+egBzr<~`?~ z^KNtA_xV20=flr~D)32$NGc|tV|7@kYWhtzzP`L<^UmPWzv|=b94F)}p3MrY-FV)s znQRokBV@m7muLU^dQ+g)Zw;Qn#GH0~`m)cb zo4s|~y*c#Rs|oXe zy-CM#HHFuGcZv(h^*c+J8?mO71EZCaxAe`GCg+1 zv(Qw~HL&n&qf_DwRb{m{Q&bCjuCOKZF+|NmGD^D0LMq-w?VL=qXVE#ibds8-!pE#4 z%adOk)vT1u=ZmaVzd_WkPqj!FTdVh&sGrwN`d-))YGw@)Fs{uhw9)$^%`I>?u|hgE z+fs4G91E8zu{Gv3)wpOX=v8vjTq08A(mA>8l1o;qO&XWaYcG^szHkPrX?M|Frqu58 z1yfCX`zv0h_E%K>&QVM`Ucf@zS|;G?i|o#s_k-r*sI(ncsf%1`h%tH^6L+O zG-OXHnIgOC?jDx~tD{w?!Gaa``LGKE;C<(27S0e#H2r^c+S;ynK_F{!c{2AD3 z&ll#hm7Xsz2pq>HUGc8;N_Him_I`ciL#6kdJIx2)iNTANH`1TLbba1O$yWJf#+&K- zW+!`B`F>0%>#n|szmq}(Bo81E7(fD`#DesIfB+x>fPes&AdvsM0{;KK;{U!Wz<(@I z1}KXC;b>>IwY4!fH&@x(KQ=nKzP7%;x;p=Tdv123qP{Ba&70ZD*|n|p&i1CsiRqh; zo=hfle15GgIptw^=;ZiRSy@@hNA{~xR2VUOU~qh3eB%4g;rEs*M$YSw#)i(${*M0f z?6j4tQO2bac34Zfd@=w9?b1v&6-P*{1f+ zHyNq9S#LhPiuwM1YjtIPVs_rw)2XuL)7QqE&kBp4?+_;hA75g+cv14RmW@4hLs(fm4W@Tk@U}Ekmt!|*@>m}<8 zs|#ZVy0NLLsj9Y){4jVVi#E5g*4WUv zTG>IT(~FCW*_^BO_4T5H!lzMDe|A=TztF}er-o(+Ts;U=Q&SC_tlgcx_3fR^o4EOv zg_69F8|xb(LBT(N{*1YFaeI4vb$)JZYj=EdZgq8aXJ^O2$Y5%63~#PYHnvWA^=fB( zeQkbiZf<^eXuIfBaz{tU^Ov!Ui;Gi}lZz|AT3;sI3M5xmRStFzQ1JfU-Q9&liyIpo zjR~Pc?aiI-oxgwoZfk3ceVG*!cx#t^{I`Fze`S1PY;Aq5zOHV3Y;bIJY_wLruM+q5UzgA!K@SdHS8DcME%RlD3dwP0`I(mCnw*ziC`uPXVudem=_1(RE zzHe}Ccz8HFHFv~}n7l37P|%P5GkJ4qFY)aS zv(2=8Ygw8%_{p*O=45;6r{OQSh8Qucvi#9vpZ`D;CclPkuTFN9 zf0_P90CS03r>G<~L?1nQy|bclu7x6H_0GDoXrUuT{nk`xW${uERqm+B`Ov`S{+!F7 zuCI?M{_nxt*IzetvV^U8#8d4y!>XQNKD+Ty{odm1a1ptww4d9naUWj_BmdrCk!_sf zWNj!JXbdcL<~}qu+{L?o-<<16zwoX0@1OnchT-lfzaRX2x{&#nu9~*CbF3?1?SCoBx)uK?GWvZPiL4jN$q0rYrc)#9#3T?o8_g5Q8GFn z#B{`nn-{wYr>1F;iU0N_41_KK9In#+3WYjpa~?2&wt7BW*Yy+l;7=|%6N> zK)XcX!K}8sLQ)foV$UobIWAfJ?0XTS$n4TjQ~n{&i;$Ap#ZNzK5BJu7d}GfVWak$M z|3d1Uw`M*Sm$b0uJ+(c9Q z`P_x!J$mm+TU&Ln21G4M?)7uV^2YnjhR%Z8ZDd`#enyK{oX~p?IO}%D&BpwyiuF#- z*auG=jcM&SyI!GsKQi)doVPobj})u-eR<_(4)a@{F%c||KF!_vS-5MxJL@*0pR1}VT%n~J({0MFs)puvV`S{e(LsGJS{*1+OX9~4gG^?fleCA{Q-;%e-g-3s& zuws`eME=_z5b}tV0U2eNSI#F_NU9$BK2Qva=w25hU1B#;`!gK}& zPKWH|daFc;DX0avc4?l~bBvY~AWQ1Lkx7WL$f?thE@WXKcr3|S+N_5e9x2N}rd1v# z$VB(b0qI2kw}6kRvx|lbNA4gj)rEIYD%~L0wnTB8CB(4n{Axp zMTiz*1SS@icrOk6{d%LfFBsWf^tgeMZfyVae0mqRc=|HQSdx=IbFgw0o|x3z*hoK# zM)Pa?M9KcE3xAN;^?o?;;yXG`xsc~B;y3a7yf`1PjgGsAE-__x-}|Y~tG-0_owJ=5 z@4>QYs(3u64)F?I9A%Uw^nLB!ky|i&T9?0&^wDdxRC&{ys-HzEUHRVH9i!c$d&N|q z&pzfNV;Ngp&5WHOP>xq5>4cZV{pL;XG@WIfHpdq!z5MU z^|S9yXa4cEJs3fY%L9N2X?nQc4oGMxrAevV7Vb&_z>{(2;=(u>51J}ilj7eMceQ;^ zVB0Gme^wZUhZ||+LnZKF5cw`xMh7Qe90ES6Rfj~8PVma7z!BVT;0IvBq zt2ASN9Ke(dPas|oBZzBZKRb1@Zlv7(ysnqen^#sLRHdPUh zk^q@NAY^$20P>cM4@s#528{S|h0Vm?)X=HPpaD5K+;~tOGr%~cmAIe)K=3NmXNNt$?)F9ui6 z4lUF~84(XiRN)R)qUoXHavkF^oXn`Ed^XoDiHNNH4#%Y z!=tn-268>-u0($i-^b%-^YwUnoI!AFI!13%fWMZFmM!$2(ZW_d~WlL6F zc8k6c~aK8tNR0shDevp>*uWa!BIb8bh$ymeHwmkG#O;o!z}3zfChYtQkA=woSUA|!z?PEh9r&!gaakWL}kpB^FRO@JQ9Q#cJg zsbXvA^DaR#v%#X0wcF3(lFNJ%_~jYsHo_FWLxsc1nPSQo(4%w;H~o%B9algjqQVL0 zrUQZ@DB%eILfZXS>Xysq{q83libpSBX;LB+`EUTRc`HFg4FMOd!o)l35O)2R>sTU8 zMwFe-EL4&S5WGo`EU^Oc&tSgYzRzYFDH-#J;!Q+w=r|pn2vjZus)j>UmILw$yk->e zj2sA0@J=%iw4g%`FuWuNC>b9XD1ewj!QbP76?6_M45T0XBo2dYfWk?1jx;*x94gq7 z28%)Qn9*P^46qafL8b!}WdX;^!#*V0nH@cs8_4kj3wGWFy%gjK#X-C_AKB13RB^o4 zSl(nb;1nIQPQTPNe_BwG)11l?MFskyfysF88Z@_J1CJgP5{iWd&@g^H z71&INe8+)5ECFWF+@~=hUo4m%kFgkBBrJ>t0IzNGCbLjnTo{BF*55G1dTEG*n-nSu z0BJC5Xcz8VxkjsFD(KyynNV82)F5PXP$@PGNjAL@K%Xe2X zU{WzahXS`|!1@_P!Q_DB<#$CHcjb3rGlU@0(Q_WHh%Yo)FP*cO9;(Wwp3=b9c#d^C zBm)4-#e;+C&;W*BIztCM556WCzoiqu;~2je62G4k|GOgoa3ubpeBf6Ug)LP~kfprE z!v!}%Zsy;)EQm7=92dd?KAr&b1>cp1+fbc5v*9%# z;P^7&F(0rFiq{$s6~Tf9F)$Fcz$l3mIyG)NS$}_24O>0$7x|bs8`O&1ua* zG@^acm0a(Nle5sg&H#|sCYy@Fi(nvgDF8D(k`oVQ;cmrIftyrFUM5ExpDBTE5!PKv4@FvKY4(!2jo6{j77_K4AJ5dIg8J-Kn0Cz=mMYlkf*`+@UaN8E{jDdOJ5EJAWnbybqyyIjMPhReAYic?G}oXu_Y0bU&4_lef@M75_7N zv!obRalIu#?$dY>=%5x1a=sOkhDBVaBl({q>#5-5qgMqfbVQRxrL9?Wb(LR*z^e=GaS-``R49s6dR^$>YMlmkY;_{^%kAO59Ossg_CG7 zYdZW2hRrOv>x6^bVz}O2hRxvOmT?Hua{dwxqCo{)GGD1tKtZ_Z78){+nw86Zlj8() zMgwyz-3eF0Rx}qgEG&)2bDTxz;KIax4uojnGo);J^XO>5q#kyGlSh&Hi1WKQh8ixJj`?e^Z?Gj6ag_#^ z&jcA@5-*w|@VNI6(3eS!@@+iF3>7@F@-`LyXrKymg9`n_j~t^$TL2HLQ(yUgm0Pg&zMp0&-)vz%!ycy6;c zY{(8r6N`b&In4_>$?c4O#TlFU01M7(%RREm8u#kHAJ{<-nXiHrHOi#!+MNpgPMMWhI4~fSc8sp-WwE{@w9}z0ct_EMxqJNY63vv6I|&}GRBgO8$))fbB%MoS}8C0Wc#lFqv)S2vYEnzM?O9G zB%i`1+yK-<*WDm+iDbIFVA$OZhzA7TFkI^(1sMb=bAO1O0dP<;FRkc^KK-r%=dNd1 zBk>2Y%yO_Q4lF_8ltP0(P$9W=Bp&nD8UxBe-Ix?cMiG!Fg?M~}5oI{w8`QaSEVnh4 zBLmAjj^P6OCPFKd&3r4Bo1va~6=dzV1^vJ!z1y zDF6)$XD%u@q3q*{r-_rFz*o>fEsFgnDYz+xlM=8;0xB#oT854 z?;}371i}RixKBlnFkvJ>u_$KhqYEr;qDaXbL_&Yn zz=DO@k8v1y8;a`&Iy?Z)8;9k+avC9zLV5zeIAeKt=+G!UFq8)Dr9T=(bKXZGZ`gu! zQ6NhOc@O~hrEtUFbRY6S1~+-#I(UxYGur62z1%Z{X>p!Rm@E}8yo$(RAi2<>6EvhV z285Xr2Jd?8QZ(Cas^{sRFA7@1q8+ExMl`5B^=nQQtN2 zh61-y2EL(#JoLF{e(`+J{wn6reUFlz^8j|503T!^odM6KP@u2+eq$xz@Kr7^EO-O} z&HMnL!XtMu;1A5D`kI=)YOc^pOTrkEgn?&&_R=9|u&YD{C=Lq~VFJu3(6CKV zQGSB&CO88#s)ptLJPLU6m5W_mI&o%8+I36z$(DTjmg2W9rRgmd))q!$Ta9&QTf_B# zN#4@8(oxVDy23^VyhDmdo;kt6>l8NV5*x)Ls z8Y|L3Mh>vkR8SfnQdj{x$$$?hbGG5(aa6cG6%<5+NzstUAAv7@`}L$70ipp~QCuw; zPBz2&v@J22M(!wvSOeg92)qhZc>E3S877xJ4$@J~bDznh$T;Z2L-nvPm6;GvJQTf# zuttG1aa*-Cz!3uA0RS$AMuu|$k+A?Ao~xe0eVGm+13)Ac;1T*MnK6A01GWYYn;*k9vJ z*c$>8{gr*8BBW5r0%JCtB;qSd4^@;Y^MO}-q3;KS$A5$=CVP^VVTr;$@ zE*hkDTQu`xlx_UgwhGTnbkcZXur6lo1+JBZIp!XU#=gJNa)v+k#3Uhe(Dtj^;iZM5 z?C3YKfFPYh_XN+EzB44`mr6{3GEqXQ2&ao^MX0z_pRa|_rIkOq^eRIbB>yhWN9>(^1vgDL(r$ToU zDa88wRf}U0ZD?CBwL6)?^OTrpik-ZTy-hdrti)m?M8*FflDDTPWsNxGvKTq;O8T>L zGAJEFHdshOHeTQ1fnxl{h;240(4N}{d0JN&lqfZn3q)cZu>hd-21V+qe?{9I(x3Z) zkDu=c=3bKhWBw(Wh(FRq}Z|H}4&w{}m+I}Ly8x@&ta>1Rw3euGQ zpDEUeaB$aE?>5^u(O|nGDGR<7uTNHfm_`MQC!H4?C4%|QML)_nCK>Ua1wscenmsLS z6KU*~78R|i%zUQx@4daK%o7b<5|ZOgX zlG&Y=@idQld<+e#tyR(|!v5=dc`>cX?5!tE)A2mpc4`~Lb+&|3fAmSygTx1NiRCFG zt6dEWuTt11LgLx*J}dMB>QoC-@_sMFSafEa)$;kocl?dd<%?CfzI=n}-7ajA{d&8& z$4t+!blCf=U->jy&%bi%!`F?XKbfyyfaC6N$;TH|19M+58UOTFinl$H#QRS1W_!)? zQ7D5M+ghcf+QT!%TY^+MD5 z;mCUH5YLACck|F{0_yX+zNUOH{?+=R;{|7OXOhbI=ttOtC9{jVko3Blj|4Nf^lJGQ z#Hw%Hqf?3kLPO={O#aA6wO?`HtxtUY)oaeOiX4To;?ACK|JijhZY3Qk{XQzFD! z^u}CibQf3yYrQ`IDc0mxAF1LLr{LMAPOcrJUz!owU@Cz_g87C&3&Z)T(gNAJX@2Ul zJ-5P6t0mv>B+(jju{ER6{G0IQL~fL%pjW-Aj>sIzkq(kS9`pRv=EZOM8l2v(brORy zm*nrz)D^HRR|JU0I)QSMue%D3m3*>${4pPLWU#yvIxVM5?wflfR-@olkI&e^cHL7_ ziE7*Cg1|PO)1ufoZ<9IMsK`?A=0$H4)~x|CCsS+77-E99?IOvszU8jvdsoki`D%wi zfB>XONF`%l{J`;iB0- zN$NM_ZPF=A!oXF-^9ScmgwbB3j-bR;=?k3aB;${Ae(YoqE53B%r@#pbu_LF=I?n|p z{&)tJT3~ibBwhACU3|?pQr9j+U@*tr^ya0cD!UI_gSl=mJ?ye|?em6WeC&@!#Xi9)BQpAV9ANS!rPyZrT(iLDs6vJm<{!}lj#^5^ndl~o2DG@ zwWN7hy#r@6)bG|Ek%`Xc!HQ;6We?K<=ORnDgcu(Gkft>k0ZQ5DPUiP(y)jNrds_MZ zVt2w8^jv=r4cGo^y7PGVtLwkL;cqM`p50`J0|}1M;b!>o&s7t-LosFLJbocfscl6W z$xxq1c+wTF;fnUsvir~1UA7gY3br&WtL+Q!26ylvTC@why}nC}ak&YYylNt5e^*rM z7+N(dFHV=a<7;kp<>$Lsb!9HfK1r-F$EJ1x{t``9`)h~JcbE6-Ni}LWUg%xF<)mIo zcDXGVtmruCRPm+VYa_*2$wf=>RnRz>5LcRybJ znpipm4`oCe24)COE}NT&_9fK@e$bv=xeygPkZpKB@5@MzdZOR zGj-otFYU_Jo}Hoof;HFj$+1H8!>X5mw_bFley5u04SV2M@{1#m;mmb%PpQP^znt8R zln9${;`_|J-s2ScA~_FU&`HUp9$7W{DX^S$wQDFCiNcX{K$ z$=-10jVPp1W9#5iFL=b>V)&@=zXFw7Pjwk zW`Da*0#c9Wua}grKcP`CWl}F~S1;pPFFgSip9mMzAsM3}XBqHEIrT~d^~!9V>rTBY zqyfX!EmSH45Sgu z-*{HK(MY4w*rd_KuF=%9(JZjhoYZKM*m%y`1VjhxGQ+J08qd!++Uzu5fHc|iH(iu& zx}?!`*`(>BDAC^2R9pzmZU}VUjJ#C=W2=sw8k?L4nq20auJ1ItLYi^>&2G}o?i$S= zCe5C9&0e0(-hs_GNXW?P`>uuy80|1$Z$Bb;d08tK_e z4s4AgwMHklKFw;4DQRWJHnu(+Xnj848n@FL4{4+Dx4mGSTr}EVnzSX_wIzABy$Wng zCbgv`w!O}3OHFH)Una|AT23vS^KQ4LL)xkQ?eC@AGc?*WP1>_G+5@Oy7Y2Ytvcyu_ zbF

O4>g)w&xGDf1YnI*lGU)VV6mx3Z*-WG_3Hbj$*rxLhFvwz>acKN9pa33X=|6 zNypd5j_QGqn)!~}osMsiPC9>QopfitMrVUbXQN$blV@jhpmlA2NA5Ea4h?wMNw%VQ zb`ErQ&3AV1boM~H82nwm(p`NTUH$r9PnhHn1B9UgKoAbDN$DER>KZHQ8gJ~H80eau z@0!}_nuc_y5E$ZeCJokP;DXU|?>&o5HXo^{Vb)`d&aJ%1W6{L1h7Thep5)5C(; z{@MXbuwPTzpqAz6EBORYc>>55<|QA2NMdkgGdN2bTult_K?ctP1G&rKh4!M3_43K| z9?|SQYTCOzN74?wd| z%Ct|~zE8&M5aw+oN^(VE|cGW zZvj6d-=Oul34u<8L|K*&1k3kb$Qb}C_gK2Hza*a*V_ZBo2o#GrClg^U#;{ao1V>+z z2(fcV!+7k({R|}@S}y{$GgK%pd*B1BjGY55t<`J(-F2Igzar4-yeyJ9EnaEd0I2fY7_0b zE#HHW6cq`9TZ+Nh`(u4<(B@H;o3j0-M^T;zgCKi*i5!P3yTA|>;RXUKLLIyYb#U1Y zcOJC!SRcJ1279UO;OBC|({vQ%M+n9b;r@>J{3ZE{Mch=jy}f=l<1fVj{@Cu}kQ-w7 zuAgN<_6Y6Rc%jUAk>+@@>3E6#c&XQT+5PeI$nlD#apK!fF?63TJwgBvv0;++v?;hD@t~=~^+I5E6y%ig^WsKdRgZO>mwzw!WEC5M}vf8)L|7@3UFxd1L!ccZ@ z`3uQ=bm5jvgcTu5k3hWU7%83t?$nsP0I+vkzxvj|`9;%!ZH_}H$$@pz6!1Z5IND0Xa)PmR4;{BU8lXB;#p)O_n5q}8I-^bpX|&L@9|YXJBbj8m=4!; zDa2kU!e$@RsZW-o0o{dM>}?}$g?LH$<~}c_Dj@DTcAZKW&NW$MCMy zAqZ?jFWMr33^(BBJFDocs#B2c8iGVpdKgedAjHbiO>G};M2QN`iISp*;~YU^1n`I! z9E2v@+D3X%qF4g0Q!otJ98WMNgljMW26)n02EZH#I*ul4IWCJ1^pl?uVxMbg%FVAOb7}Kmtzp^9KjGW zSkNcxst;VwhiJD6g-`DzZ>nGkWCJ)xrmI4=}_(*kN^0X1I+X=9@_eTaM` zurOSt)(BY;2T~^xxg5!fNYZf>tl=>%ga-2q3D>|Tv8g&%J_K>0a0rvc9RifXL@1?% zYdQj?XyEu}Fj9w|G+G?9h_oAl4K9MDLc+x@V6trf{wug30i;d!w9knumW8m`Mm#q{ zq+K*wWYOQ)5pHflu%ZLaDd7T`2)+~|d$Pm^6&dOSS3!{lv9E-MAXjDXh*r%1^4>8E z-Z78bu}I$GEgLz72S1C1+jZYmu_gK7Nj?-Ko(kXt22eH{ehp6w@_`umL_vij8A9P_ z31A~a_)Q921p#-f*t8P@1}=wd<-h{>fodsm10P?Zio3$pa39S5^UL9EwzB#DwboMd zqY<(g8U{lF`Kj|kc#;wxqBa5)!+)u)!$zrLKx!2bDJl?Z z5ov}B=SzVeMMR0?kSM^Qxjd220xX6i!>Dj`CNYRXVx74Ik;Sp^wDHhrXh}CzHYME0 zhh&C_u#J#HIuO~A@PG;;UT0_51RxsHq=SMgJttYD?4*_-ylFW|8$Ng|x6od_vo^S6 z&H$UD{b3dGVOf}x4#)rj@zw_1WkO6XB0Y4#f|TDJUv~BAyZT>XeAuXms7S8z{i`|f z^FAwfBS54)*x?398WH7WK@`H1etrn@s{nnd0G2d&;&Bm5gvfv#_&ND|vdcjCedtL# z$abILgANY4Lqrb&)!2qk+lVJjun;O7rVW(CGGkRjq^O)SXb96g0tSGV=0rWc0pnke zIGq#qdKv192CG$o98+!;ct<>-Co42tdpc?8x>PGKqEoq9-9z0F5}l3~E^fIb2_ZM#J10 z1T6+&_7x$N`OpDR@*Ba+0uW*|vwWd->&TB+8x3Dn8T%k#s-WA2!jm{HOZCjOoD<}@ z!?~qY1a>fXyj-vJ&6a!DjK1@|G)sOabS|l`K0>g#ekS9W>O_>As^(owQ-l#%{Z>WE zU5$_LWZ8{x133ro+;F(HsLoB}o{Ol=< z*Vg*lFI6Tz0)ABG_C98o)fgklwsY^Fnr}^zyIgSlKy9%zRXbqg`+@p0Bg6cqxF}R8 z{FHxD9apyEaZw%4<-1H2Z+DznxxZ=b;`aID&|WQO1#~g)xOeS{7wDAL(*!AbBQ&*{ zkn;Y4mg8q*EO%rfSQ*A+B&T?G=X!vS=v|!0jGVNW$~nxFEE^4||38_9y&rMlWHf_I zl(-)OfcNNU#vEVLFn^}Fg_ph%t`_#5EFzlL+i`|P1+-%t^zXsXJQa7(ekuRlD*Rd znO9eDR>~y1gq|DqW#xW`@#=FPG3I{lnP6m@>PxQpAoGfHnw!s$EMzHvw|Vr#yH^vh zKg!%_u9UU(%g93WnUGqCs9B^OSq09q)19feYTLY1Zz)zRrb!~z74&~dbKamfI_h#; zer&!fum7>iX(cr;$4J%~k@j-l`Tpdt%$J(qzfaQYIQ5hYn}i=K6}6Cag>QKoZu@*l zQOsdx$N#1*>y6g3`$I!y+doH)-s@0)H+95K<=RXwajB$7x@uW&qUcx#uVL07>zdK) z?G72YegAaV+;+LgQ9g3>7XDj$wO(g+gM6z)ok>oIDj$lsPM|rxRTuxcygBLQ%eEMO zwKkbIVQTFPpQ_b5Sk)?evig#;Y0B?L+kda4o({diM>7qj{JW1m*}^vq75`Cc5E`~( z3pVEe*wh&C0yWCjtPVRXE`yyluI*}BpL(}-?{C{TK6C3Ir7?ZyNC42X9(Va}=wFVO zEc{$yLRDF{_VlAaf3=z6T!uO`FKQ<8KPD#hm2~AX^8?0iCy7{&`9jtvj!@3+q6n0KMCZ~v^5n%dg(9s+^RE-vn3`0Yt+lG{VR;dmd7tQFRD@^(&x*cL6y z@K6#(+&2=vZj8{;KXK$`PNR%k;ZvKi6a1O-O$wI^V;rha2o&cuDc>uMy?%H?s6oE@ zR6^l1Z~e?;kpS+;0I=A4iaBCL(mW{VeOyqrl=yZ|i@{c5{NqC@G+3ea>_0xyo76_Z z!=I7+3m4<=dq!~=Fo<`bWx@^Ua6|drw)6LjUcNh&mN!;tznD;z_(5Mr@p7)EofDH+ z&Z1F5iPp}#+E?_dtXf7TAh+X^Vm;_w$im5^lAUfxic^~PWz}Bhc6zB5zwQo`)yPy} zSFDOthpJ_@igUaC?iIh8I%L;^6uR$fZ9^6Z;JOT8%l&*XR35;txG3~I=qrA=S1o6_ zo!j$ht2q7N#0~A}eNLQ7_`40#N71WBJP&P&!rvhf6Dh^sr%uL6Oh;ccB|y0;a>$?qT;~& zBc(ZJ28x$n<_%=4mFC(!Qnbrd9L&8`n&(iX=n!vt>8$h#P*#q)LE6kSS4wHVx4}uL z{=A{mB39{V|3@dC=M;y_7aJrFQ4xmpvoT?trC;3FZyDOwUnz_@Mk5<2xgY&B(xg^a z823oYQ|jbs+oiIiZ>=pVRgwr%wFrK@93>y)lViOJWhEaBls%sGa%gUXMG5?gd zkM^-gWNMWC13ryUZk3hS{#C~Np6s7FQeM$qlXL5W6yj`{YUtjocwpwq$(2jV4{x=@ zF$0dzTre45rzRU^t2?5lMBjg98Z@73{4}*&R9>_3NHuKkf`P4$qQkU ze7|jt<$~&5{vN5I!wfMIN7?hCKa%;LV6ucGPR?*#uBaEN#gNtWXLtfC8pQu$&Pa(y zUZH}8ScU|6xsJo+vEqs*m0EFyeB31*#+|;%qbfyzIOQQk2k3cYC`6@s$)g7~U(u#d z!Y`6+qOZ_x9;+p0DlI5nu55RxReM#Ozn~mY*>U|}(W_gX^JkPY5F~x|)c*WM&Em=~ z|HtZSb4p96`zyPHYSrIu=Pwy-U*+*ObJV_-_s$~EZF|Ayb{Wvxm@^dn*x9G zYagb)T>kB-Kl>RVQ|Qo;P$%+lldPIH%^_jh@K@|7IiPx0RF(Yg%)g(M;6o;yqSJT> zn}?hJm|bLT$dkrKiS%i`!a2ce^s4)YR5=$XgpG-Slbk;NdLVz1KnHa z5?@>CGyGb@yBEY!tF&1kx@W-LTQ@dz#ic)7coU%#()L$mic!1tW_JI>X6*XQbip;% zh`kp=kEM$ws&(`Mdm$XxH-dlEnjT&k=wO#Yyk`Dwy>b8ZFP-)0>GZBW!DYmB;~4ID zO}L9R5p;sOxtadM0Q(P${-JENcVG%_2L35cKV?0=&%r!FvWChxh_u#=v^K!Q=%Vv6 zzqxTg@8h8O^d0ugtpWY-gK4M=$Ymb)X2vGS(bYqDwOO|89X+f(Du zldW!|9mj~ZgR?wYvr67#%J(Lk+Gb~u6Lco%Dyy@qsk3rXA1_Qc6PR+?^m1|8_3 zW|JwpJfVDVPH}Zk^>>;Y+5L57-BkpPHR>}I zre@Vw)7U(i>{FRNUbA`c#lHxF_4bX9m&~)d*8iZ?gGh-rH#evmdec5#i8{>{Dsgbm zZF_W@chz&J4!!$AV$XMa@AdTGpQih5@Ah9$Z@#9g0*Gp@Ak4C{=y!?3UK~_FQjm<3 zW;Fe4n`Qy2$OtA-fax>_&OkJ$TIZ1y*Cex<>rKx{OdQpzRTp_h&fV^ zK5EJI3Ysn$@Z?tU5_q?`4&?4d?a6=jFFD&z$g7UA%U3 z_Jl!R=1Hx21I0P{<_xtw56rzBqEQZ3P0B$0ELSI+>z$?(P2{%#a?uF2UJ=i{LGpwM zlY-?~v$@#SYq6H|v3v5`00oMrXY7_wthmApan?%gP>xA^POVIC?aXp)5nY}}m&E{1 zKXz6f2@CjU1vX)sikigE_#N#ZmhdP#j|bw^RLg|`h0J?0oKC>L)++n z^8amm=ilO$I-r~mNQn-Tvw)r=jLT)cU!yLe4$lQyE-`ejRbE}XZ}TiD^~PAp(hxyz zV4pBTLOl3Q=*@`hT2y+-`TU{En<~t#oM^c0ZNRAsxzT9L#~U9FcRrr62p8S27e+-$ zh2%;35G41B6Tcf`+t*`;mSfuelo}%@)WGWb%Q3${Pi=iZlfOK*vCceEaOS(;lt6(F zqF~O*e@@(ANyuLbTQCbM(CJ*C6=xMp8mg#=6)bM}aVPq7e^)-qPlsn2Df$o=+t*_+ zZA=Zx&&4#v#;MF~_)P|FFlGHWj;Jgt`cJDFKX1?Z{?DKJTUp(1B`IO~G|q_1~X2^X|;6HT-ni zhzU}inJUl`ijdUUIEXQRUiM|~vHy360-aVLAnVJ&n*|FSetVo4;F~Xdt14VN_&vot zbH7y&EHU!}#4~BqAA-)Q=>SxG>UB$uB}l6|W!H04U0W^I^2?_3Vr0J7)_oc}$;!Uz zIHZVsj4OzlE`TivsLULjT6Kl6)>xC`YfZ-bB(UTmLCTIOzx+W#L+SVVTVK1=58T!Y z!WQ-lR~t?+%U3x$>ETjB;ZoA!B5B4|Dn?hm-2_~3eV<9Mj`>;L3`8zT|2ns@R}+2& ze^!Ul0L!`1Kvrrs#O1obuP0kK7`ghK*zy5o3tq|pHHq12R;psb0^3j~v(w=4kxIfU1i+j(N z*>dqAINv(fi}!Jy!aOUX69Y5>uPe+xQ9$LSc6CyF)$*2HV8k+arwo?sog=8g?d+Gx z==?;hAGD`)VVwFHNWedq(rbCd5e6242VB#!(uz{gMi}ug8=q+VEQ*hWp$R;R;o_YQ zO3y(1V+6@YfPAA7_s*S_c4cj$hz&~(brXfyK0hTI=%i=;%$BM=N%bTE^S2qq+Pd?r zC<30m@wXWe7t^qE-JiSlELa`Jdetbg=oqIe}{~yQC?pNE~Z=)@j+;5=~wYiJr9ugap zyCo#4wz*8Xi&9iuNtCoiA@$wdl2lWYYi*KLDwU+G-+q7Zzw_96pU>y@e!ZTr6xdYy z*A@ehb!MCL(!tYgVxQB_hqNHCHkZ9UE?d*JJ*?Ma%@*Lx(^g=;X=O^5V0s%{M<}u* zQ5_c8-#I--ffoL~%k%nARja0_pUV^TYoF<{KtP|W*7ly zI@6}^te6(>xL$ZpWt+#(jn62gaRR)fy$|3vnyJ*>?D zQmwbG^rHyGbwLbw4<#z{p0S;%3~Vt+1< z$yv`5I@DeLrFQUWZKpw8ws~@WJSyj+a~Id{Hl!0`(O_r}=3V+~ z^Z`&L0S=?N)M1WXBc9?yRZHQR)EzVs_EujJt?#~Xspf1o$X03uZPv}TT4k|}olS(Y z)jR}k0D*KPFoR&!FO;!?Ge`|kHc2^M;{*u@8`r6M1o&V9j)t1hqT6|D+QUkTMXA?x z?xR|XyU5`^*5i}lCP2r*1w;}EI$499`3CpcRn%W?SSsjue51vdL4wP>9(z}J!?PN9%F_y5@DXfy$fbr@Lb8)Zdhb8VchMp1mYGq?{- zT@dHuppMS7QG6!Ap+Rk$qndZ!H~J*FRH-Sa1`PwMg_~}twJ){%sEj67)$^$D zu2M~k@1^xyE;saFO=<4SC?e=!C`XHq=loRIj?t$yBo}?Ss4fere_B}iXx!)CU z>77h>MTsAEDejE6$q3(GmvJZhjkWSc0Yt9gQ}iX)MQ^_-c_!LI7o?;X0?St+QbA2> ziwEDF`DxOfueGP)XUh7@d%tokT|G=j`V{@V{rZ(dlScYg8O44B>haAZeVZoN*g$Da z+8<$w-H?To8sirEHNi3OhI4*$M9oE2-D8ViT^PQaRT^kACEaUmZ>mGaEnl2^-=B0~bsQ z^{=sU69;f@C^w?>2=gomQr*R~p;&n`UR0s#V%e|czKrCb*;3Q!R)y}H%R~9aNuW@_ zu)(Txa<&9lrC=3Sl(tfyR99mU&Qo+OnbJAyr%$odEu~nC_HgB@Joc0rV0ib(oc)+l zP(QGr$WN(eA^KcQ$AVL?$NGx=v*FI;q6#+`5xYRC-o{T`!(y$v;Fuhf)Q5{Z9gbMX z@DE{>n29UgL7P?H92reT0Yzw(4S62|ZF6ITL2F^&UiK@j;p6*qPp6wi!_fh#s z9^b&7gPxbeS+3`LyYt+~V=71bP(GwA>5P?s2xQU*yud$G|6hMPLZ3JyDZx|Z3(oC- zDW>Jy=$>=u;0tuEsxxNe?jOs%au8B#BcbfYZ8Pv|2j_$jgu*sEQQkt_^Fq52dvZqf z>x?g*+ly10^kkpd;?Lj9Rq9}#z-(YWk6Ey>8n+D!Nb}ge+tKEy%EOvh%$WR3k>{L) zlr92pgd?S>Hz#&zkFZhD!X|fw#=Vw3P)Dn`yi-j7HP3!IT)AXD#0M#nK<0NXfa%Ki-cDU{xoUpa?0aYTDosewyBAZ{)~S>dN{vm(>LnieCzC9S z8PFv}lLV|NYwrtc8?4D)@~%tag2{}8lBa2Z-gu_6Uw~8XVrO)AT$3F z4pS^)N$;@No5khoFiX-)8{r6F0?urKp-p7nm&eP)4%1z&4>GAQhQJ8NX|PtQU>5(B z#D3c@l8{_^^nN!}J~mG{VL#4CIkqvN72`A` zEXd7DB1uN^XmBTAA><{Rd_cSg-O!=7!I{NTwwgwbn;+lE+sJc;NJ&s^7gOMiHDrg8+flTzv}$;D5zaus8!Ww&Se*p0F)yuW2x=rr4BF$8AtiBRUw zX~UVZ3N)j{IG?s&rH_(0OiejjT}Ek0q4$8rjll==bmTM$qnq_ePZ=vwzCCK7buP@J zEJ3>l=_|J|Nhw^4JJr!|^J$--wII3ss=FqkS=*Wb)*!5xMNhc)E!47%nyC73vW%I( zMd3lhdLWDGtj-)MNDxHB>eO6_Oj+F1BN~Akk46T6K=^b#fQ1jb+0IGVz~5VP73W>A z-hU}Zk_b@9Oi*2^k`JSZUiSuhy%n0(A?oGjOn zEwWQ6XHmMOnnr5THZ9+`T(zqT!0Qw5dbpSvNXW`{<>6Y)FW~G!XM~Tq&#qA!`87QQ zu}lY(krMa_Y*s}Ei6%BDwj@A%a9OJbF*C61W`#~F$@fl;XD;Qsb&sGxYPp))OMrqM z6=5|lgtlei!UWW4BpNwG0x+`ic1T~E_CkjBPrG_&KwuRgXkHs z;fJa2@?8w@W&%q)A;jg}6DCOWP7~b6BUiKQ_l(k-gbf@Y%s1>1$ffu3!3~6<%>WaX2F3gM( z3hnA%hqY$q8ZKF)+%ds0GLmMrENOVx0D?}km|AV1+=PV=4O$mRGp;<>*+u94;@8vg z9NN=^b)Bj{f_z+>Aa{QaRc+!@gYRcLboYac*ux%>;C+`jzx;{I>d}dCw5CCVg$&HM z5I3FrO9)CJaHi-@4|$Ro?3g1#g0uSM{rw8On50%NvkyL8j=mtdsPSE9%h3YC%}cLG)M%KRR(Ef)#PjYQa9jV zLbRkT2&(BPDB6NdobJdoddbVTCrXi>a`v+GE7ow)6<;LyhPAjk(0xD;8Y zYgWPY$(yyS@4%(kCuymS7trIGn4D3ih>sRd_g_>FC2z&pN&(g)6z zMeGt(ppIf^^DBegxELyAlvuBmLdN?fMVGi`<~%P!PsqxXh3wJ7wux6oI+El zShSZ4K&u)MN<+xjhf0lPm^A}3#ZMUU!r$B8=@b>^CJF1IX(libkHNYRshULowFMC@ z9MBYyJtl>6<7~nbOS?^|nZQTH@a6jeoNy6aM^ZxyksVZ}_il(TI>F3DZJv)CAIcnK zYo|%C4-5u8Wof^cM1>`lEznSsLQGsU-i5BcW^1AFo<+zkCj3!Q4d?adEk_ubl>#&9y9r3-Pv}#z7(V8&!5Zko}@y$EP8w8W7)hGtR zc5kEXGut5d0-S<-Dcs~rf@qk9QlwLlS@21^*3kBpE%cYciBoe8h@tBl0xRgR9_?F2 zC=Xi>c#te6213I&V6U<71CY6+QU#*%IRMw^_3w98a=Nz=P3w zX~A?@pv3F^WlewnP>n=Q!k5{B;6sviW>Rqj%cGXBJ_cxcu$6lFTFsx3NWQn~09J#6 z9vUSM=o3djf3W4jhxy*8iqy=c$YnaLkB9k(TT0-m2h$%F((vzjh)JqqHecI>E`OA+ zPI!zDrUsbo02FxZvT4etBKczJy2tz@fgmj~9p*2A)CjQ}EYyN@-7P6{u1UQ?f^KEx z%MK1}=^PL#O2g#6=f$|=svSM?`{|K`bGV4(Y0q503`7j%^q(Ej~&*e@O;1cZ3Wf?EW^VyIwU z(m*;-{T3AlW~jtb6$g1OPkY{rX$$YEYJ~Q?4be6VRj4Eht^+{!@$mO(cx!(1g#_G7 zBSMEzE1pCk32%l`6$52J0vfS#1RqG!=pn0}WbOG5G@Pr4{mMYwuApc4K^jEwYXH^e zOolB_)t|0;l0Nbj0DYn&=m4~S2V@fPouaF>vb1_=2x}4U4_&Uc%wa8rstz?mBNKo> z43oNdCQ1z1&x%%LMcD+R(_y#h81$aoH2`<0@wE4d4(76II4L6WxW;XuLYJzI1mOm7 zT8qMfk0eMd3D&?<+Q!hFD}|c~<&TgEll(mq?Q+%m3{3rRVN ztV{=Lup)USnj%pu*F)YBS&h}D1M8{BPd-#XDpAQ6$$)-p^+KTR+e&{>~V{5)1-6u z2Vf0!IT=m`&b~CsPo#jf248TqAl9nIZk-vM@WyRvj*Wz&r z36?E;FN9E%1hT-!c9VBF2EhbBuz{^P4*^*^KJ8JUd<=`wL+;nbs6J&2aUPINUdh1I zdu`(5Cdd98CZ~O~?zN^yXYv?t7I#cv0%nCecC<((w!=$Sk2OP?BEpAf$l>(V|0SSV zbo8fTsE-JLixnEW=-E7$9Z9wNNIGU50>_DhnL_^KV~Syq8zZR_O%hKrQDFxF5g7u+Y z{s;*jb}t?~Pug;V{a_&oyS4~uLgkQ)S(-6C4gCPclZoA^AN!Xqp#3Ju?Yp(XMl|6TrVdnV!&UBQ`(2tNQjL(Upu zYx%RwZ1iwTeCG)UD3GPSN`jpMW$vVExQu9$M5iB95hPyBiJD70c@4T()%}5f`%>%` zhRd(=6a{O@ya<}c0t6!Y9%+s%N z0XQ6Vc}>=<`%k*gnuag{{mzu2vC=~QICy;u0x8A4lzmZ);a{l`6@a(}1Q&}`j|lyz z7>dCQ@7DbiLbPoQ$N*_a^!^m0gcE?`-+ zP$^_Z4@+EdJFbliagu%xUQiE_{!UVEO8@?$m8JNSr0y?0HAz;~U~9JmsxiKb+8|t= za@eKkpvLb+2hNIOo<2@oAz|FlwXRfRoeIe&DWiokyLnp0(y&1txX%rhWTA2b0Mov%k=D{Y;GzU)9EV=V zc1RG}tUBrkSS(FDfhr%uCU{eoVhok*#w=CdN57}y8&{H@PB&JWz+c{w&wCv8@CqK4 z-abf2mGZP{q&636@^?0MBb$~%2bXS!QY%yct|$WsfVKln`E6kA4;6(?imfE&I3#?Y zr}5MmRZO34nL;XwP6s>hf5(R>2!GZM$S&^6e*K_g-WP$K>U&98ou}Fm2_vRuW(YYK zK)EG52nMu}Em?=aWCb@WB^4}Xz4>5(&7Pt`ttGWKV8swx!AVn%Njgs9FktdE z-}Bzw_K1$CtO8>mSZF+wmc^Z*$vPFVl?*MGD`Z}%alGcuxkvNWeDHdaYB7oU&-nP| zRfH1xzXw$98LuKdQmw1QAigz6i`+XVMYypP-RRnL#cyWbgn4X&Txmow0qRx&6v|Tk zRH`*8!evrrhh>y#Ai*0z-pYToh7QHI$;UT)SOu_%W726Wq59|Nd^e%|1(5o*Yigk0 ziH`u7LsNB_;Jb)2&xn!pJVc#jbd#h)7OH8ZDYEjltV!zLBK}jlcDP70X#xk9YK~vR zXH8s6VQ3BTRR-xbchb6gL>ia$wrrQC;CJ2>kTtQ2P+K}8#H99AkwTZ9vT#BvjEYa- z)m>*fzjC47;eq`{sC1ILlIYFC1a7f2qB!~dwTbiB5L$t(Z|k;)%%Avo3v?~O_52$U zY?hB0lkfxRjlg=Zv&5`v0$SC*$|Uqb&tLlNT&}*)a_jSb`(OxF#<%Q0bXCt_6|E_! z1wz9Dtu=EByoa&I1-rJ}?OS^OOaJ%`Sa~^9&9Jw0ra*2qCM&m1I(-^LNO{gAACGIb zdp;YVb|KllJ;EnD@S;l-j-UDbG4f8U$OQ*ZA?7RU8J%-*x309C9d$Z=Z;Q9Y>=#A` zbaLKv{O~WAD-m~$k%jWllv32|OecIT-t8+T)Tvo&&qxE^j$PzfOiIg{@1Am;<&>Dm z-?EBFsv zWC?GZvZ@vZUQ*+Ve1Strvk!|Eku$b(2LA0{^g*}xdz+V+{j0ecX%h7b@|yv<7;cqL ztI^>O3)Y;CbOJBVXf|2MY@ofw3wc}i2`Z^FTQvxbqX_x#7%qjMYwj%*HngSV`@O6l z3@%_c=qw6djYx482wVwsUnw|mLF|RzxhU~a7uH+hteSNF5N4z{=Rw4>_ylZSvPU_f zS`s7m0HAp+O=6Er^b_xA-imlRi)l`&&NoRpV64jAw_RcPuwtpA;uz19RBGY3LGiY! z1mmbt$bl4o&D+Q!TiFZqte;m&ovhahNgN03VpguUeVdNAYKlEHb!`wcF+>)c-8yCdVf%L{Oct5Hwv z8y0xm-IMG0<>%hcBe5Oa@(3L5@a7Z8yWAF7SIewT#Nb=E$2D9xEymm^F%PY|QD9*2 zvA^FgyzMn$;*FG-0ULbw4~Dc=?0a1Mb&iyaZL;{nMqBjA`(U!`IXJnzVOoJUlcEs= ztr9X^tasN}!Z#EYM7tTacaZU_o9hC&wvH^S8+@Bs?7q3#msP6n))rlW%hc|9Kw4-M zLCFSrt8k)^&~k?ju3ljVpG&#mq3#w!a7FH4=9nrbFY|01ON(!;<&AzU$K6kk*e8P7 z-yXI^+`3V>*oXT@@n^k=bXh{^vE+8-d>L3*mh*MU{7KHY$6N7-mq&K`iXdb6zZ8sa z&13pFFsUpbm4%u^kL^-<7NhEJ;j|||4dZ4Dei{sdi{-;(PRI$ay!;BW-^i>yuD#4- zqQtotW0L9T7d^LyJZR1 zTV!f8E%OZ<$(4&!Kbd zG7p4W?!iUe7_y!B17+6tpi&yqL<$@4Tuk@$5xc;j@(@k}2uq`oi~ChxKv5DxGt2qP zHw7S>+^zV$u^@y)EBn!Jj?;*1fG-6W*c3+_$olNy)RimKk?9*ienML>D!!ccLncQZc3qF7l;<1P_+oY!UeIXr zpdsf)D18q)?yXk=q-`Ha{mPEDAXQ<$rmlsYlJ9Fdm1vI6B##}VMpo9~xj@G{v?=v; z#C~7Qt_}(K_&WjSV|l!)bvY2(%%EN{I7dfDtNG_RSvpdw28AHRb`}`-wA>Bd^F`}M zGg~n^fQB36aRQFeHKz<->(xkDaBCsTj!>X28zwhf*r>cjE;*ZzhzfMZ`-Jo&tt@e` z9eR+OLeTs_TA5qSEH1pffN^!-S)KYQx#%|#gzzF-qb@^pph6yel82&D*2C)Bdu?AX zfqa@7nmOZmgGmT4JSA5#YxTYs(lQvqptTtbk}`-JiuaL8&YJJVT&F6Q73G3U0d>R_ zOfJ4@Pb;{)2DG3jX%OW`;M(B@n(Yg5z7};aJamww-R-wCZO;L@QURcT#}A?N$3WSx z+zl?~vs4S$gRJAAn~9=)yF5B*rABG*vxn%=zFZVRvIy2lJYG>31k-8MBCl61#R#de z!y&m^{`8{pkd7Ovbi-S*49;TO1(iLh`x6I~+%>I9 zde=lL1E+!k;k?DgH=T?hOv&`9F(Fysf}w10u&6OG3OjY0kFna=gF8vUQJP(D9r~+o zQ6~&LUZu0A)^>_6c$B_iqNkmBQ0#I-)pDSvYS3_^M(6@)R_x z@9+o#IVwbesE`kI9~5j8^aix_8N=)=Xgzc9vIQcsO>f7(4VqtcN(FE-DWgXW@v`uR zW%#mvx4;O9>SbSf8$abs^isj@6aw;$1cQ@69bEAGfRq1aIjsV42^}<4zGp$G;OeU2 z&4XX3B5kO-c{cbIp~b;iZ~z6dR|wlG!MJZY`k;LK84`NGBv42~{vkj29G^i!g580y+C1| zLE$+HmP;<=QH~!$7H*M1nm}tsbrfhj1^NP1$O$Q8Aq#np=r1JjZ6U~(i7=xh`^q)y zveX`~qQE2>&I-E5M6p+o@m8^QS%}@%C7&f+PDdf14&f4DzXZtKSl4~5(tS&+BR0D+ zFqMTkS5!H=XfHODr?sDiUZBKPu}V#E5$Ft847nWg&bNVAR<%_2M-71)*$%|J!qpM< z8-%y3xfP^}R-g=TSFw!*E&)_e%>5N1Fy$o{T~3cOqTvPBri<6Ae#|eXFbx zZ?B#^b>!#Cw27!g6HzY$fHURjYr1%Dh+G35`?=VWLm)FN5RPrU~iH)Bh9SH7h0(su{HqQqaIPBBZw;o5(#n{ z0N1LbVwNCmQduGkTOk116P(-Rac$3R%>^I>89-B9gOea%FTrKZ)vdlUPc7E)&TO!~ z01Ohqyak|8!BMGULd&-$JJ2*d;tJS;}N?F;B^w@Dgot9 z02WSRzum(18DgICQW|{ynyC1da`2;0xl~17DGN&>q0i8vR!h`y0`PAD+7|6P7L9i! z$ry*oL@Mx{js>H^?wxf{#gG(w7MX>sb+@b;h3xnB#PIcHx2q-za$zs@Q9NSJR_Or` zqWiV#t1sNE3tVcUlq!UpT!FkKLE>hS6v29s0Ip8A?MbgY7wyXQ^SmpBVG@!T3c-7N z>YE92b_75MXxl7-KaWOdo&g&%kM5^q_lOlLNN5~s4IAUD{83zIYys}51TXk{ew5)q z>Ci+TvIpv{w;rEIikPCp7shcXb9P>U1UYCAEK!E1&H|#uYo?#kq!iqTDVLYTJ-#}m zsk#B9f+rxbzE<>OkeEczctwQl$YV{l#7$JDpeia4cHKO9df%PygS98r)oZI0Psv20 zwBPXZiQ9{pA=Xso`nNHcu9ipsZXdlv2;w;3s68Fx{9fwj2PFJ$ zKyl#&>;cnrqY+xx=eBdv&XNzRAmQ&41`L>(3%;JpBuuIhSC-~!$^w%|Fn0xdzbml@ z0^AUwY9Q#H*?8Y{NyjGvJqGD1>%lpP%e~!?De>$vwGb6vg=REDzfzSSSoCF?T-z(g zkeC<=u!b{ggywbYZF$yg;Je*ae_*Fczb13brKX{_-u@*+yk9fuRUlA7z~2>s_7j>K zP4GLD;MAvOJDZ{U!@%Ow@NFI_#R7r%1qD|F5HEao8F_bh>l z^qV{bV2O@u76VHxwSEDHQgoA*rDil$^kSja=#W||?dB=qc#~g|V0BcmdVC9WP3sl~ zYWR?A?gf28ZoRUEx;<4xq(VVR zQL0wy3vs*AUdMPNOtnk41pwYxE+cMZGavLn|6rg@s%^J(NdKvN_4Gum?|!^^d;X(S ze7njb(kTUheo90K6}Fy&rQ z1^v#bR3=6$Mq)|m)MKR;JnV`uXaR9mi z6zbFIdM#9TCvx<}6f`AUgJ&_|3uq8v_Mr|Y>L(fm6IVk$FMz-omS#!~C(}9!2>`Ov ze)2^?1!hD_h$!C?wm+@&RAT4EQT1yUKY`SPk|RG=d!mIH?>X0$Im;K@t zvL~Q8nE-A##Zbh zhJIs$UV%L$M#KrnaT()I2TL0!UN^|rJ%7hf*S^&0?5^$`PkvWpdYX`2bk{E)`#?CZ zWmdhV=2dVXu+^ZpCwBlVe*J*-dM2=RDYVY-!I6=VGqtjaP_>yuPr&{Q#@_TVnA}+j#Z_k-o=9cgQ8K)Dv|@3e`sAqdX_JX4{s-0i zv#=Rmnbv)x)~wc6K}xQus7*PwU{I|r1Tv4^IrkfW>z}G^k8i1=!%tIhGp$98Pesr2 z`2B8Q#LH$`FHMxZ`74XlJVLpCTQg1)0*IVXq_0hC7=}LH$|pR%pMts zEj`Uvd**EMEW;67#zUW^VChV)mXPC1Vt`wLucwakg+;qdMn5mLdHux=t)hIiihTcK z{T-o!TFb$Iae|uXw+5f5%Z;5UXxEdz*VD(mF>6Ih+h3$=X&>aF_ismAC%@nzNnT#i zBaTqkVI)WEEj|JS^92wQfb9iP>JG<@^H_Mwlrj%{$#cTfXEx*Lgf>oXG#R@g^v7tl z&en*Tqtcb)$llv2t6Tp~m%fS`nE8m6)+qay>fKvSdbKKiw8H&7#aZ|H!BXYep+fBWnB)f9|Bgk94d~^6^|Fi8hMs_t+ zbtOVlaDMX1la=1rE5JSE+0IjWI~-H~`}^C0kg-}9%EXtv+J%sD7j;fBeZI-Iautu;sgtAMXL}g7XJ0F@~V!-Ar?_R zT)gYCA+>nAh>O_lRv$Qr*E?ny)DkoC^o>`I<(|j&q0iupvV+%4-J+}k zk6J=%jH`cKLbS_SJ+jz8T5y3SA8*{+VEYT!^`V(T8Yxst>gK*tOc;QhDRn zATr#F`#n#-^Ek)uzlpjF23W4X*U^g)lm6TEC(IB{UzWZt+HofR ztEa)ms~|4q_0am8xAn8Y{o8G)(!Xt|ysp~sWB;LT zqmRvKAwWEmm(}0D8KRu->x8jc_H}s>?ov|uuMpVap;MjizsUhyO#2QBj;_uKUJFZXZ*Ry;`<}1pYOnDw_{_HV^U5@ZpPVYQ z6G54wv9%etLq2Mra~d=N1SKZje4e>0<<9q&UCdtP1L0{8ZGMEOKMOiFomjL`aDHb5 z=zduChxQ*4Ip3Zih&=N9`;SN#L?w&P!I*VuCasCncNb`8t}+UBVkuA7cRczQmHusU z;M6YJDgdU`$ajlMeZBx!%kwMkGWcf3A%D5dMet>2%nUOxFNuj%*7@6f`SI`2Qm^XK zKXV60jvV^>Z0FI#EB%|+{{E=o9zF8w^`@hWf6C(5{ft`qtbG&!i;qHd=^(i*>T8$< z>pqN1y2@LD4>I zG9i*C+6Bh}XQblUpKr?Pe~W`pBTPu~Ln zs*AdN46Ca>$!Gklug2^#-u-i1$bkRJYc6k0k`H=?&-h1t=^f`5aOPQ`-o~bb+mm7gYNzI6H*w>(rxpa%z1H1p_ekA`c`o4W zhnT&aXMXzlH7K6@R=?Nr2bzT()nXe)<_`P@J>Y zFW*A9wkm9OoU3WJUvcd6ai!;R?vB6w$_th`MCEwT?b-fS7pm$F_r!bc{^g(BqSUbQ zQvCMhZ9b=8243F$CVt1U(*ft5HGpceJRAHqLo@9ajmwH$nt z82NYd@!fwxf?PclTga}EKK@N#u>a`K_6HPaE5+jriWre;j-lE4qN|EHX? zujEeXtoF{%hr5%~PX7*HSb5$#aw#Qa%6|8U*qwJG`#)vg{XNr|soMQo@3U|Ju88G^ z+YN7nQV-1>@?W{P^WL{hiHQN8k$>i2bgw*5J^FX*+3LTYLP*PA7Al7hJ^xIIie={B z?xZ8!LwcU%E#;Z!Fb2M=_G->sI2ung2;7?Lbt?OgZU5t`a6Y8p*f!>P=$|OHt0VoE z4f{%NP@*;8hTQk)`%-%NPqgZa+Mu)kS44hzjP3^YEcf8F6K5Aq^tXl%1w8hzYRcJT zQWVr1I-hnbw|kE{H+0wy{;lRw&b;0!^+$=Z8>^mA$5QUEbq=MT+<*3C^P8;BmB)u( z-mL!l=PmNLx;WQOz(XBgSkurLDH^zbLH%#s4||QLC(N$b8y=4T9H#NCwxy-P?r;2j zw#Mj1vzA8B!wIjRsz1MqyU`T-_x+15jj@|%*P7!GCqACkcyXttx#i&B#QVQA#(T}0 z1;-92{imTh@$lZ&*3*BJI_xzkpKZC?)^s>o5T-db_4vxI&cDe`*_zX@Bd&BjIGl3f zjONS-xZujf-%lZTG+%yeY43h__;dJ_=BwYI+VB1R`et2iy}z|yyv*#l{NSJ|EkgvkvhpYw%&(mx{|dhz*ekhohIio_^c? z+4j{zvChYD{0)vb-6FF`_rF_i+WWUU_*M2ee)-Fd%Xg>uMjo1;`n%Hk_U=pkt3#3l zU%!jo|1KTdk^Oqzy5$Eux4b?5Drb1>x?feN{waw&r0Wxtj|Z+ElE|^ zw!V50d8GUNy1(f=*M3P~9{F)o>)#jm-+$ii$o&0k-Qv#|TVMQqb+q~SR-oP#%_#Q>^J-EN*}gj5C@En-J~f1uvf7(7pj+e?Z(^0u zJV3tVmh{Imd3r$WgInsbB@=sJL(@I2*mA$aeN`{_jBv}$r2C48+_Ow957yle-t2lP zW^2yy{U1~AN2<0S{d4~p#)I9rm18pace6*{^49$DK_JP4t4l2`9)#3+91o-xbq~Ua zJxcPZrHg~8KOW_6)C%GQtcmA|Ick;n1AMsWNhR8;oCgZUo~K=CXPO@WKm zWU0Gg9}n6;dQ;uyiE+S=#Xm5*Z(a`dq@<7fv%WP737*u=j~wL6m})R4)RhN*VEyQQ z-exzz*I&rpO3#B)K-&s|qvJd9i%$$|x9h7R^jA44A*|hlPhfj|KevgZ1gw2(Tyr(9 z3kl{PlJ^N}DpyT)3xTNq&6C%I(dgh8;ZC@-R?P9?C_0$B3MSnhkt05htp~%B6>OML z%mVzI!xMP&oxsU_S9+yJ{u5!&ppsmGWxJo%NBa$q0TbH-Z1PQQlb=b4{3*&Vc4wbC zH3w{Vb#Zv~%yl|oONPtVzt23dfwW65PNt(?4uLMuU0ipM`m7}dy2D&ON=E(a0=L=p zTizY5ITWzH#Kh<0=>1=TzR6}@T0s=Wpa55s!0kajVL`#lCOZ#5&wCgc`lch~+Vk$N zpzvf$*i6vzXF-wG#&o%{!Vf`Fdpa17W9{35_gteyCkJz)gX8p!Nq1nXH%De6*juQ^nq1A5$g~=1;*`YOm4Njk(D7_L|yLRn*)uYhB-q3UH z2Iv2V9z%!m^9?SThH>q~>Vpg}?GDRJ2)kTjc(No6oEvsU&fx0Z$)iJI*FJ7&`8b*L zD@<^A!wsz|aBbMlWb3x=Q$LM%-8#JC_TgQ^uw9+W*E_E5%IMnFZL{I-%&xi%yZ+O= zeornu9UR{Cw?*U_p0X{x|GEA^a(J&*_+Wd>{j<~gmEjLdT818l$4!Pm{=Rwm@AR9m z;UnAipPJ4@+wUGV)qlQwcdv2Ci#IpNN_Iz{***D2Z|d&u%b49WGuNg+&g}ZNTT*TR zQtRcULd5HQJ(;cQ>Qv}_{=n?vmz0c%cdo5(u0;fNMJ(#+eVmE7elg;wQeN`q$2dRXD z%_NnMbf{bC_-=aQawMW42w5r#O{Sw&B4PI=n5&U;wmP^^^qGfr0$UBh5WvIao*Kd@!mHy|?*c&fZEtRUTkd$soW7vFOWWN3}hR&8K-7QgG;i7zSdIl@$O`)_mZ$ zxj#Yqo0q_0gV82JPWlo!_%Xt05D^sz_5$X8kuiJYIN2<2LlY$2fUVzwFrn+NBNb$% zfTNJGD4)GYQ)0cCa4+V(jKZ7~$BD}4gLRPH9@0gO7X2wEX*lJuB@|}thtSFR$ zCK0B>e76vIR7gHb3^5gh)jINZ=mkf_Z|;6VWLm^z#U+|9!R5=}sURVyybs$y0m%zo zg+hkz68wM%H%pkGNq^@nNC+o!b+RCqtUOkMLdvaI0+}^nTS7v$*_N{z1EDZJM^=L;Qef3DbDfs< zn#6&^4WK6fqv+1#nST5@fbX))PG;ub+$2_1a-j2Q3a4>($VrDIzp;YPS>ia6 z)HB|5NxHuv_AHnU^^8wH_esN9>`f_ZBP2mP?7_~JZpKRO;g!1MVFv7Y`OFo_GFS0L zn0Z5dxM)RYG%jZO^9kH4qddt^kf5>u9CevZ?OCXVf~jKa*YG)*Y0oE&V0FostC0`z z0f4_j&qp>wsw1)oiv555{2WjN`SmP5ob|zS&j=Fp%z=(6W=ID0VLF1�D#nx z>VLni5_-Q%$&bc`n{v$nAp2yPmH^;wx)2TrcgIB7>vDcW!G8YX@~kCEQ83LEG-n7j zS%%1%a%rzub@JK9reH%D7`q1q9fjE^PoDZU9r~>zfSHJ(ax|>sSe~%R$g}6>V3u=9 z&W95;*bw(Oakicb$73J_{;3P>IIt&ds~DbiD444ukx~I*0~)8<>XY;A`XSE*?FUIg zIADatJ{?_+nS&7o+!!{5$^=}Xfm6PPgg#jBx-wa5HC0JuM=b-4l3_L;;Xvv}-RBv* zNQliI?g<>*MhDv9v9>GZ(%$`R-g`h5ZGRdr{9%4PvG-}z{yk@__S{u9o4SMl!#G^B zi+kKNaZ0s)R>d}ucx4hVh7h@$yP^{N)Dm~q&AJo^2>ttIj5h1cqBUGLf%%&nUpJq>-lRlk?^@V=t;RK#`5TZQIh1Lj(ER&VQk3_5SEVqwkYyl~YFIS9?I3!P%cq z#1Nxm4kgE^<^OXn|92u-h7Ffn7`jWbPDINl<0c%+v9W6A@Tn}Y?bgr6{r_F^H;T3T`}^m&$G)Zp8hUPa z|G>$vv47F{EA-cb?>(_k8i%B}b)vw}w65VyCf(6OFcvTU1e{4zI8e{if>KPb?!}@z zvj8Ac&;e@*`XEzRJ8}DDyu#0G0h}$zHOYDeFHIf|a=_$}EmkIeI`bPTw}j@1Tq9dt z3o?CSY~8o_TIT(7^=$fiil$pE{7@4w+mkua9|l3#9B`0a-rX%aKj?M$#;*BpHN6w@ z2jgz?G;OkJ&Q`MfZx*h(wa3B5&YqK6^6K!+7!~iCptNnOCaCn^0S^6Fpv0bjW65Sn z85Z;|GUfWsXvIErP<-To4lR+Zo~NMT0Ldf#up78`w{Xn=wnAH({~>S8klM9dAt6^Y zsTkuDdgEZiox;Yj;aT&u5f|=0{>W9TZk+73E!9%B7E5|wr{v~NtX2T^@dw*kT_xSN6i&TI{{iJ*C zzrNGK(+rhI!v_zhdo{ttUW`QE88qdu0;fkhskE z+HaZX$vu8myW;e&37MzTnOc9kw8QGJk>ekWoK53uuVS?J^-V0Vp_k3Eff(#;r)SV= zFZO=uF1dZ`nh_JhE^98a!GV-{YDihiuC%<-(@|}m<<1FT-A7d}WOj`DzMfe|*>|-> zwVXlV6@GrON&AY2oERB8=>O!$+sqN%%lpj9y?YRsUIJluo#0-GEbk$TWEWg(N10p$ zJB)SQGUnV&XLGvr6V{CBrjwmu)Ji_h%upzC;sG){=Ir*^@T{nW_Lv24ZRqGtx$3=I&1WNG6eKZwI$rCu`=jIe%#oQXV}6&Cn${2g9Ux+eu@0 zQdD?MGEgl%-k3KX&9e7on60E}xbW2`*`4}_=bpy!G*p~D{r~>n1^oWQTH3R<3wd(o zDI=F}J+EtnZpTCQx3h`!>)m@QC$F4^<1i1&i94KV88XaC_~sBuGlQM*+2+BK(Ic7~ zO7lH-Z)`5XD4<^~y7cnJN%o0yAZ0*=!EYwvG<9u^$edILrY!D1st^krh~LEnfam8D zRJCi;{36TP%A`c};DMwV5eW0xRC4bdkYYxgg3Wsp@P&N%1%qkTPQYL{kC)K-_2WJIGi zq0_WOs)qwT2nC_G{f5W|@8-n)1QROy+x0HdF~MA6Ndh~bh~vPqkzko%&u80Plc4)u zM5J@nW3Ze3nTI9<)ucAN6YMFAFR;f zX;@gxT_6M1lLNqhk&`k%*zr1T1Mzk})46u!PPNCQufyTXc+LbETIlL#ZvvE-pX=Ug zIr;KZ{h5j#`CT5TT$43KBeM0b0f`YkiHFObPgUXgluVJ7cRm_iRU^LsW>_Bk=+1Pl zQTSesLK^o%X{mC^c|TdEYw}^yk6Jq(3_=!iqB=XIW&jmCKh&Rfw2{{om8w+<7^*d9 zsIbnn2Vn4NJnI0Q8m+E2FR6KUbcGuUD7ePpEnrq{k{_fUyxNkWLk@%QEn1Dg^hv|e zgp-Jk7RWEv(5njHVRrI?Ds7|xS!B>sEd@Z#etwrFM(AR|=J>w<_Y*d@0>N77K3t-n zLwC^}og+)Yzw8rS_wcbobs*;BrMLKSp7UkFF7%W4+OK=5NOSOI?dt_ z__62Se0#3Di-zUAqkmM8g)?u_jW_IxPC#4qXIf&W0p5}Si5*1^US&Z1pU54g-@;QK zH>uY;UF<9|6K}M2S()029r&sHJF&-tl6JLrTLyDDk!yi!$#Bi*DZ(o;k#yNY5mh9W zDdidu{Lo4Lq*Sx~PBHOK)!B((=oG`Wyq&>}*EYo`oW;r%YyPtiWLQ{VSO-CFzNg!0a77f}sPSXB|Fo4%qV^-H zzPT$wX1`j#{rz@VOG9dUA+RZRM0?_BBf$cs8FM88TVvesz09x>)nI9Nz_ORhDPxl^ z+#{8~p2(*<-Hw{1NLuUYE4p}hS#9)x@nl-{iggN#O5=A%5l{}|VD!!x9 zxkp16P7HRoU^4gg3sj;6N>q+KnQPro25Wk$hj55ZWK0*coxs&emSh(=TdQ36tW$Q! zgOO}t-f*T`@#|R4GI(&iyq44TjQ~?8Hqauj=Vj`<6gHeGs5trdS2)^8kn42vkXdjX z5hO$h0F}dK|76jg#9N=Z(K+yFk|q;GR}9+cw6_>>sBxPn+V$#W!Vz;m_z}fMHJ5H) z4;CZg01G$(S#Mok5*JrPGZFx8ZNa)GZ(#zuiG7e1xU8Ddoiyx;*5V+PLNk+(|o~Dy#W6c9;QD?S>f-IB))?5J^^@^%%?c1)U8!bS` zgYd23EmTcvDBL&~h}4Xi(G>zaX$ovc?2HiBDWp<6DDHl;RJIWnY%y%DK-Jt553=+2 zj#i!tsXKm(>(3YzgbFc*o!0VGuYT;{FlN#tcW{;gs560TakUxZ@8R&pVe7VGmETH1NCufa^JK{n$7nZe&%6GN+N#SO9BX@j$YGLgY z0Q~qP>4inyxafGIg?!5fgeIx>F)adv$5< zWJbnMi<9)ua=@+GMC1ZrCPd@E@@B!9PA*z^Sn)GWng?;YNA+Zk>fzyNYd{*KNZWVa zsmG$DtsJyB`1SeYohPTz*IIj0RM9Iu(C5w6d|rEUGD>hOB&~B_Hr2tu&2fMN$vdnu zMRImmxMLTsr$=&T;NrUNk=ytS#_MS|`A$7Gy|i#{7OJDjCHqq=I1%^a>Mgj1X=k@w zCvGYDmFHZvTuAf%#b#UQXyScZ-Ko~T#n!=77X_!DOr2_5SZr%}_GESODJWEc3=LRc z6i8yx>Y?pd_6qewJIt0k7?t~}p`C7_UEWLLuHwbp0ZY%$g?6hibw-8uTv_VrOYDhu zyyMh!*UHIScd^0*a@Di5Beb)Un$pOC%VqT`^#?xPf`Y0#a6ggRw?qOdneXDeQ zHR$--^h!T2y<^zm^exPA8zlwjGT8a7{?4l~3)GtD>3dw{8<#B(1YbM;WKZeovBc2c zV(m{N7g;C7^EZ_fZPv>Y0WTC(<5czf=ZhB~LI++hy~=QWy?Q#232A^=l}A-{C2tv& zNgq6HlPlxgFX$V>2s`Y*^tzsYY0>evFfBCrOE2s6%c#?L*j1l1w%X;MR`)F*YyP_E zz0{H1snOYCa669j=7UZUWcXaKMv>4!uUKrVx!4eON~kP7omlVv`SR|y{#(^oOh-=mPJ zG*p8-%J+rAYyEHh9{ZoFlAf|qq3+jTJNK=J>?;4Cu zQ!M`MS?r(Xr-f$|Z^cPB4u<^z5rZI$xD5TsaY&ECHF9U0NOy*X_?7EWNQ(#DLNGRU znn#d?3#f58dv7FUfT)dMgUv;Q#DzU~6B=K|`WaqJc1mJb^xS%NzV@zAlpau>oWGJ< z8&#CX3cDr~ug^ZU=pJ0fUVKE9zTvybFzxiQc&q*`X(C>~Te&l%8qVdze=XT1ngA@8 zm$5nL^tvlH)RWQoi*`-4$9lKp`2h18Yl9gyG7_js1(<7Et7^vUcLI=n_O>3)ZS3~< z+Sc3iwMlFcm>LhDN<{BE17k_>9<&8;o}mBwu4G(T1JGM)mvB2RB(_00M=@VpE?n|p zw!Jb?w}z3p4%pJOs+5+j+$z*+O|?`5Y$JgN4nV+c(4}W=0}t9Ex6W;?KqNsZ&#YjO zXpDzou;4a;bY6_Yz1AsGq{;)fIK>(2#2I{~$tp`;)2fL;&q7(Kq6Yf?-|Y}mVmV* zvAc`1kt#x;gaZY1hC#vsba^H$p1zdDwdkjjEa+>K`>&tmNYKr8)~(}Lcyn}+ZjBn0 zHAs~#*Fq0G5lksKv5Bq(?<(asUcYMa0aFoui&O7WtrvaxsjW)cEJTEH9)Q$Sg$tmO zP6}1vZsh?0;D}^LW=Njm7nQ=cP^Rx$0_w=AHy6mbmx0t9ulXK8j6MQwjRX|hyhRUu z6(5)WX>y@QSLwenrC)UYEq0VQVI?#^g->|~Hgu9S;BuM1I~g1f>nh;SMX>4yb43cY z@JM=F&3F8a7i9#;MaV!m5Bof1bGL#i{p}GQoL!qEA=ZM}VBz@fIHIKbd4eO|gDr2e zM&xJzw%{Us0=Id$Yc&o#O*2U0M?7K$#={)8nvgh^IZ;Qr{MNsgLr2icev<+cpTEZ2 zyghc^&+wQjv=K~fqYQM5Hntm00 z%g2v?Re8JBgtKGR{U1|EYyc@P0Wm5Z=^zDz*c`kOvpwSMFR}Cpjlmhw z`)B9zkw9kxjVm?u`?+XA+;_QbyKn%`zl+W%e!$lS8Fprp9!Y}9JB3>JLTXcfxR+T)bv11?#&TX>j7 zwqL!Fg9o~Af!|q~Y`1dlm;GAEuD}{C#hEvPDKu`&j2GiwzK#ggJk6EoW$oGn)@_U< zjb05lQ+t0ABE$1QEJ+eu9CJ~-9>GjLkiBxqEBsK0#HcoZZ!O*>iiCEkA2E%~1}y&b}RqC%IB1ZfwI z3O_e1;~A0pVU? zg?pp-wW50T-|bB<)`Do52(;tyAKCK#;glz$)1G2VatB%zbw-RcWKO6JT;3w-Y9$G@ z!yW&IgbrKBt{r{d?-?geP_KWuo#fdetLdJh`gEH@7U^~=ic23$Iv8;z7QwvQLIxS~ z4zy(UD-_8@HowTp28kY&z2Oa10&i*oI$JP*9P1a7N*r>+cW5&?@ry*#A-hnNwOhAR zwNCNG)fQNs&z8VW>VTO#*24_b$?Jz-WGUpkmV7`{R=*ao5#A{LpJ6=}!*k3;G<{~P zud9vm$0xGOl^r?xbg+s-1SESGm04Qqkc1q_@+%%pclrf!-r`-%qPL&p_#kZlcyl(^ zP7c+$E`R;0^<#ddVt?!(;?8JNSYTJGSYcPhCh1&IZ;qZvL$t#A<1er8zVLHXAv}1X z%;DP3%ZmSnj8u3%j_@sTU)n$aldc~&V-Gu-tjVCxS(lA=|$z7+>IJ%&lZ&oE}_G$jF`h zj7d9GPqQyk433;Z`TTaUYqZUXoGl1Qj=Y7sFnAKAnU#EiN;7h+!+;_RBg=VnWWBQ_ zYB2|vtrNP>E+;Z-C9y5MK3@P0)TS-KO~~7r`Q-~{jHJu$j@>sBrzUYy``1qa@9i_( zZGF8y_}yJRRkeg3e^?c-eOqG+FXog7p#E&B5&9j;dAaj_wCpR>PenPe%)YeBzP9)= zk+Z)mFjXMCpDLhX|FH1L$1$zC1Q}{tN1w{x6|jbi(Zm2_;A~|_*A2^T10V`ptV@Wq z?P}p$P;2b(-ekPL_w|WuaaLT>!qmK7>XAa-piIUz=x828+a8`G9UeK8WmYfPi)93I zKP&7rD5<%5xR9w{mG!&iSVed{%PvzYB_YVwQrq*k6FiG758gUwUW)Un&;OR3#mg7D zNunOJY1D-%$OpgoQgRtFIH9_#(Yp1dm0net&@uLUqz%lz)h5tYzJ4yD{K6}U6Se)f za=}ctvz5Z9+(Ui^pYnWT#P43-QEiHY*r2=;ub%V_xN|cmFk1r(^;GDRIV2KJ!4H#? z6X5UK?8(sBP2eirmBa)PjwixD0S>nw?@Daj-2E&mAQ4YaG*V}NO4fd%s;)z{9Y|F; zoUvkRwg8-E0C-^>3s^9?7lS$cG?{!fl??N&{ zYp?4EWVm{)uF=m;nIR2-;%AVoi#VI(#_@-L*W^aN8F8b^_mGnfRgTWIXW zM~QHvpJ^8isIk|m7z<)>N+U@yQn`sdZrkvT9-9oaHRR<(s zfETa*wOq}Lw8>FX@^aYcCzDe!Jfpo^!5+>5y1O-}!owcQ?PJJfXG01K&E7eBw8`Yv z=6*6b=^!p};epbO3(7RMava=kS2J>gj%`ixayqIiThQx%{HEfr9M`2)*}UaZt=OhL zhwjW9-sqp*+4Ro&Y>aHtB;m7Zub0dDGv9R*=R3FmXmp8alPzA!)wxlmfIRT?ScV(- zxW@It*DI4u=-p3dY>;TFKo%aCO1`p7%&m2%tid2{R9NM2CcqR2-IDbUWaB_+j3El_!7P zvtpMVh!s;o)nQi`edfJAT0Y1h#M+cYOMwdGp50c& zx~!{9L3&5Lp8F9W7F;$k-8_JL9Yd@yk^2(taKwA4nE2@4p)Vm`rvY)dkTIy#o} z^rxJ->zt%n%KgO@;VJ3ag};kNY)bMO$b;?1^EdbGi+IKQ7bc&|gsk@;3DQtg=yhla z(y{fKBHfMb+8VQ(d(Y`;j7@;NPRxq-&e}l3^96kY#P9jNKF5uxuM$F-@!9Vtj_-P^ z@Jj#axpYp+C*$XGFT&DSZ)~96M$b+6-C)|}J$&)j=q#xEV&Y=)pNU|*J&J=DwWLhn zD4*EpuQ*ijCj8{A0sQi&Tw|xym-DqsM{EhxuRRRIeGVO&P%`}m;6FNZ@4zXKFV#QG*@#lWqrIW7Wyy0TG9aa8|Cum1EhAVckfg*2|tG- zUTTqjB3Av`*z0@dywSrUZt~BwFb|a8x;66ozn!PN2uWn&drFKqK<#d%%&`SCk( zT@b7E)$yj%B*J68U8&%VZR?Q`{I&H?J-@KjxG78_D_&zP0B&s$oT12X^f>sP%ekri zN!JLf2cf{DTaL_>Nj24-<@xxt0;Z3fLU-AQH9fzrJV%!|>vb>>FH=*QckqZBM89I) z-J`N_Ajzxw{pqj@|Mv@g9!z#@0Asf#n%-x(`%Uke|9B65a0g5ub>4Oj=lL5peG%E1 zxYe@%OH(IWo#2da6tC8aRhBvOn<9jNWSp$mLW;-cl)`K6`|^Ivl~kx{@v{Wg7gHGi zvZ;6%YUS~R+CVvj9vf63C4eabcV*VWgc`R+ZxZ+(mz_WKws7C&7gaRwDL0n+^dY`?MU zH)$ddsMHTs!+|vVPkq>`+DJy`EZN zOo3(#K}!?`1`k1FOVR{V9VIZ7kU*fwc+wFBifjZ8>bPIoijR_EDh87!2&$@u%f<%) zhDes{2f}jMP$C;)LL-O-zNX!7Mj07#SwVaJz_;-lT@;0!jxbQ0Dq<}1z!;X47qJ^{Rr3034Mg^HlT5=4#s zYb*eoFH(L*|Do@y0%8+Cm8gWXr6t%~BMm0tON{|kL;^%35N1NhPD#KiW!9t@zY z(D7>kj3y0~ZA2^`&^{}pbM_qJV3y9ML7kE_uh!_e%56Gf{ikN=u+c0)9!<4fh;JxS zndRW3Bsgpd+J=I0U_qcle6?`;D~;sG1m@N0?haF|SOFe7tNey0^@faWs|7xRYW}w$ zBP+o^`RE`3#1sfY0U;9FHiL{&DnYMqgZYV&J2B+llSo?{IGC)g%tR|s{=a*EPDpu5 zQ*9KeUE(WB^5eV30g%}eujmz+)pkiyl^mQRr_YmZ2dd?=r5iJ3$CyBg);CK7Sv@eg zG_>o|d7W4{)1(~J*sbr~&jPX!?!K0@`})xCn+H$)AG-u#uF`gNaAXOSL{o`z+K(sk zQH@L-k&nt3A#DNxZ34x5A%@6T%oFXNK4|sH7!<)#OaSaI7*Z1m@$O7z5_R_;qjib& z)<~0;IF(BRd>S39EW~+o{*O|A6~ME}@M<^Jb0TE)03MJHs%FdP(;zl{)EmjW&Bg9y zY9HmJ*7)+u9K@_(F?vO+zr<^qBIj~m`DG5SU8tEZkT2k)qi8Tw3Z{UpsLljfiO*VH zA9lD&a4d6o{Pd6ntucK-*!Pgo%gt8X3;?JDoI2c{x^tbL4?BecNHnIzXV!Qtz{a~Np?zH@yESM?7YPe2l2+US zsy?oGhq8WuQu(;Cv?36C1*_5kgk(sDGOOSDIChzwpQ+Z8a;p*!VFI0_gc9z;<*Mb17CiO9`K(4AH?){o`YBy5N3EP1TkIKB#&kH>*%-d(hEP8o`(BiZn}L=#dQ# z=1b?3adX+&Il2s;ju@LHdXtat4Zu$WF~NXeG>N24Rw!IKtwF(fdJyfe#Vo#!`6eIx zNzNDl?d+eovEsMUX6b5>U9pQEKF)OF2LYkFf186OsG1*>I%#$2SB#pcpVv-c9bZK` zM{Y_W`Fb9mf5Q=m`*oRMNFq!-2gM>wd(s*IeRuPS2=6uV>mYE?l9J9h#ykb!2IbiQ zmljCJAo=Y7*8Su;;pt)_$%&3w2*d4sll<**>n$d?EYi;zm?}RC9HfD#_<+2_M{DzA zwy=RquFzTLnMpos7Lb07o)*^FTIrebc|GRhXi@?x^Sfu}r}$*OlGcAD9@vW~p%R`~ zz%flcv8RGMMZudaM<@Z^y!7r`Y}1b9^`QR>@>AdCXBOn|kI2v3 z;9aFFWK$GIfl?-U1r_fKA9!8c=9TleF|T%mSL>;uPb)|jl~RY%+mATcQ2TgmRziel=QYMmTvLJ#j`W!cVMPO={e2pPrLkbey3-8-@jXU zUxS}?Lb2kZ_npru5*vu)<=>x|zwb<`w3AoHZ297&e|t%&`X)eS=as7Wg;gGXRqvz9 z7JgTact7}6_~4KCgEAW2&$|M4y@r!tF+xT*)2kwp6%$dlVMv@`3EYo@XP2}zD?T(n z@^IJnhvwpOpfdU4F&eZVsAALdaK94CYP|m7IPkF2BY&laqemJ}TyHov-f*&|C4zHP z`ugKbExwhO#)aRMF&rxgQ*;$_z-HA?8QMZ4nd?o7R*SXP! z>uo2#w$_R7$%ZI*Un}aBb?N?6*Z{W6?do ziry5x{FGSv>M!v56$DOQ#0IFmM7$p~QYq%Tsjan=^640#(*z7zwy=Vfyrn7VGy!mi zkbJ7y$+sz6`c1&)cP>vzfj34DJ{eA}81b(njh%h#`|@G%-#45mq?j9Ty(A5Fq1_(> zGFz}`$c>R7nmX6j97<{cf z^ik!*C$XOH$kux3XQ)0?@eEsPlq0u&GQ3OpaRxAQ=LzfT^;pN@R^a}sl!R(;0e>t|cT zru;2UA2Ot-zAfAq%rDx0yHng`lhI_TvviyM?~dwB{)f-QeqXv{zTILI%Clbm;l`OJ zC#@yHJ&(^+u)qEJ@J+0`4EA4!-CUObxQta>k$w8@wAFQ1%x5*V)mh+Hxc+fNTJ6}`wn2@Xzbp1+&i;L`=(@oZ zt!k0!J8w!~X*;r)vRTJJ62{zh{TtfFlSr;TGA;TZas2!gouDb%i2$Y^TU~4Z@7PBG zc`Bt{sPAIINetAC{BD~|iOuz_b;Rv2De;o_N;xW6*cZPG{&YPRZ(Z86pS$jRbnV`; zeZX%Y5OBGW9_lsI^9vKb5AVLdNjs9g`nKxIK$(4xzHeXsy`j6VWsWzZ!tq-ATg^E~ z73wSAiXSjLuBhy5sC@S@c<8?G^MAuI+?^`0jFTCH^aFD?K4RP3D@6odG8Qlns|Ha-j4M@ zjKP^}E_xob(Xa=WwXPkB%a_gTbw~cJe_#A49@c-e-#cu_M>d2QEaJem%SBw&&N)#W z&Q>?TBL=9EOrDnenP784Q=4OvZb^K%`^m7-MqgCE6N{ATa#K=06W<|a>0}CG7)7ns zq=`>Rc+o^9NB%NMc6*P=#;EDm>e21J0=m88`QXxS3_1QFI80hHpEW<$$i{%(J`DE2 z&kysgH573m2lG9*B!5o|-5QN+Uh-4loM2P46`W`HDB?i?v-jm%HkwWTu5S>N)7 z5D7MI%trzr2Dc}mJeJtj7GG{{$8BM;CP}(#2E0^?>0F6}Nk&fr4Q2Yuc%P}+3y!r> zyp1tPwsH<=r{J<4(2a~rzLu3-*b+tE@VG z`8JcmXBI3|?$N4B5j)P5xBHHR{&$FZCFUNh)3KIf&$3gHwh42opA>a;?Uu2j0y4-X znGEd>?v@UW%S=r>nWs`Gl!~h7J3x)tH zN_Of6XEllQjqwve{<&@6CoWO%6W%3~hFKsLN z*Q<4{(*}ZPqNQGSwf_1yr;ZQCh;C`ipWR&P(Rr}B`eN5>**pM8foI%4NU_9(PY;7y?{FCYFr`%wed=<2}OgE?nuJ z2uhP@XS;;I16rV1;N8mB=S&Tt67bY~;_}`LZTrd;SHKpNQau-0X=Tcv?Yqs!Rxky0=M3dSJ!2$jscYvL=w3@7%2M&#|?_C zk=jGE+wOM2-tI*lFbpuUM#@SiVgleG900lA#Zhe60G2rHH8>-P55dK$q|>_LaC$PT zzf2{AY-9Rw1)HMfV)C#TVz9m65$9T>l(A0NH=&^d1wtubCc}~?kYdyWAwNX4eP^zj z$1a^oC%x2t#=X1EB5JLSjJ{`Y=jaBWAJE9P*VA$exDwgZq59L6EAs{jimE({InTT2 zyoH8FOUi}nmTzr4qYotT$ue0qj#wsCA9=t=9aHCOD=k5&4|JBvZ$9?`Wp5k7y%3fc zM}v{x)FD&NqbgEN_JMRW9HGa$($5)co)&t?Z{%p@GD}EOhi2b3t*CK?Sae*2DLwJJeQT>=5 zl>xX4-8|i7&STa364h&_?fBu{(kU_A(i8RNwn_UYc1G0S>T#|=gdkCZN*M zqtERiHU2hD>b}mS#on*SJ&1ZgwrCY1hvyUJ?~87CUhs|N@z5ucT9=FlZ z=VQE@{T9CTVv$h-R%D6P;CV^1{UtzjCy)?NleGv74ZyJIuqSXk>cT*=aj+27 zJ14|A8i1qL$hhT8MX7J`U`yReTt+a%B)C77{y7qE{?#!v_C?4Csdwp}N9rn1I4^pS z|9 z-PTgE1Yu25ms;Uj>)X0!zG})>{3U={W!FNL;u&Wgdw_I$e_~{?deyX(=56E5Ei$9*zNr+%ncr-ue@IWpR7)v&z~{Y9N%Ic_a(cr=v0 z79!6X-@E*?CdcqAKgWFZ^YMu0*eB;B9xuzfCntra3Fn^OW5C8mHu60z2;;@kx{>=y z+BQr$1}APuw0m}xCIuj#)tp0<8?6BiwTXuOX}H-O`0QYRs&Y9~Nzapx?XOJ~1qsk% z`wip6Usqq5BWJDKn&#~G{~o;l!L9#&lj7mmzu&a{`%#nmWa-5IKV#$nepZVaExzq= zP;myqp9j*5!ookoe#&+w3k(y_sk#|}ltrGM0Jmk-4{+0}}(#Uj%R8^WNIVa zPENA$41hZ@fdW!myJ=ddXWFyKw4VI5zQ(i{x@it%NDEHt0WCF}k|e&#OxKrZp7%th z0#ZMe6XJoVhVxTrJTqn^Gp@T)9tbYuX$fD~GnPr2tDdCWgXmmV!gRU(o8ltALo3E-v$Ic7~c7VmPbHgaeRxs2VpHurK` zcv#{&v}8wK-AmTmHQS2i9Fmo-Kc8-}VY|KHs&~^>pLv;55b6diXZJ-^H$Ufk4I-!@ z@0eF^=)1f#8+jHR(hdcgYSzdWnuNHMI_xSH^-kiLUK6tw^0~Y7t9wP~$gqkUWZ!(jMsLyclp7#3zGOxP~Rs9d%>2=}akt20qHdDBK~f2oT?EAcsv#{hRMbkKK)F zzI~HMZJ}}$y~-1#%99JruQZpZjg_b0kKK3gPPW;-TyMS5klSY!@2&`>BFVrNQG^Wd z?u+HSx4iG)iMp*L#B!IB-beMTf8VcBtf(`qsQ0dDh^lBTtY~hoXdSC)i>ko)qtis? zo!*ttqAGg|EBl%&UyN10`d!(tST$%?B_8&!dJ|POT39t!SoIW^Wx68I*+x>7!J4q7 zKG)on+<~;EVngIkuCXw{3J4MaTI7SjP~oKjB&+{HuPf9`fN2vTSJ<_m z*_b6Bz_A~5g$iF{vJPv?%$3M6SP34w5Sn!To<9%iN9t`a)!SdMcWkM58n1WxQ}3$u z$j$tb`;kZQanaDiN8T-ue8wO7{dvSxY6vuM2s+Ym{8B^k^@fm^hEPd%@J|Cv>G3)9 z$HRJ3fip$_mW%!YsyE5i;skp2Z1cS5kKpROHw`t#D$_3KZ6w>;e(fBNsw zQ-HDnWFe3YZJ^Ntc##0vDnLyLFq;CLvQTE?>6thFK9A3*y0Sx-ksKkm+JVHrj^<6$cYc16dwRd4pyC_k^W zcwX=GydnB|W6|^G*5|Dg&+nq(sjej5LN|peESQBRP6?w4?HWGq5FE&22`+Y_!nba= zTWNIcR|oEF#pDFR5h6g5D?n9<943R@EwF9b$Rd{1832$ffCZJoTwb``t3me&qz;8* za1w%G89E@4I#z_#VWr*7cbQY3Bh?v3I&GY=-x!PZb(WBE?U<+x%Y(~ z9?*D(+P>`}IEV-Q7zl~$hZ`12d5Mfg+ucog-UCz&S5)*KCzZzJ7QKI0{P!JSWvtY4?3VA?oy%k8H^%Ni z8LNChR{eLZMrFLta=hMmyy5bA|d z(8wS!0VMGY{0k4&o&}wxfn`LagL_TI1IF({1dylmMQ>~1J$8?&s?*!8rcL~&cg9Sc z7EhbCO<*DO` zy26LM)#SWgzI=CVq59uKjp|~Z)ndKhVnfVgWAS2h+hXg7#kPNo0@bBsa#V$?H9 z1*Eq0Y_XKo*{{7dz*3%@!7;g8hVQz_@M%6YFgK^d5B1P%RXcW7_vWhp(^Z3ytA^rL zs@nJMd%m0af8QDV-Sp;nv!~xJK7O|nf7jZh`chRwM*- zY197*d-G_h9>D+m&OXLqDx`!Fve%F`$=D?{L?~$zveqPuL^F)BGx<V@yg=(uj;Q30Q{wC)lTDU z&fGPk#JY>#y6g3I_s8oVFV?-juKSFy-{!89BsTo?HvF$|+<&|g_+o=Q&Fk=vUT*vX z8iO;|DqXeYuF_t7T@cpo3>No|>rVUlPA7MVEwS6Jx7&MtxBv0(;EUbiue;yJcgMK99ErV2y}jw{dp{oU z&A!;1`?|L_592t~-I>TEPXBhsxxh;k4n7RVCobra+x*NZ?D*#2 zjhWc5E(c^oL9$WfCJAD?q0l2X(`HFBmRUw=HZ$f=m9JG(k6hyZuz0TSJ64}|>8Dke zZpa?=sO>Bv+c;j_c+Q$o4mv1nldOex*-t<>DOYm|^OxUVs|tnv6Pg$dcWKG8tcXfF zM?8>=r;3&jI#mWNjy0s)|8}kp+1-O3b66(UM(|0PWH|hBX^a=sqaAZxacxaezTTMO z_}9HNQ};1^RP(lz{Plur@B_YMSNe;ueWi(|W3`B0*_$_Q(rDFVgoN`>;L1$L3)B690DpPgh|T#Ea^D_p zuPu%@y|~T|-P_&ezWNOfrOKU%@qYX32Of6Vm8p-ApyCX8a%6Lv2E3>0afW=F(@aAF zJ*bM&0aNMsMu#pMsTd2{yS_I*e4VOda^zO-dlON0HC(MdnP)OlFN}#blZ=!uF_TI( zQavy8%(dkF@!*|0utYec#9Z-Rz3K(!^68Qbr@lf@Tc|Wif3U!X7@f9MA8`F(sX0zP zZKeG)_k)$ryxQrDx*O9UF6wciY6N|ROew)oz*x=N_^?~4wW-AJ-zIE05(!9dL7@mh z0#E|}=YX-nk^3Jjt7}suy?u?JJzcMu8|s9FN0q%UonH8xVDFI<73}HY+TJr#RQk#O zg6V8?|HQ<^&-WFN-+cMh)YFh0Y-()U@bS%X-*8G?a&AWM&f34&TlSlSg9R}ueG^k{ z_4RI79C|w1Kc=QGtnO6QRTf7F1^RpUcDGLtw8h%k1O-QU+`2XL^KacUx2&{mYiRcE z+qbWxqcl&ee*9czr)|2uy*>A9@l)yRji1BqJ#Fc^g%+BcrTw$@Z9R)~iz8F>y?rBf zb#>ngpSQI(R99E`exF)jU)M1{KVR9-VzC~D1q}}k+dI0Bj*PXpx5p)?j*X2iEUfhI zpR28H;`{fXQzHeh%jV|hDywRm>ORlT&Nft5^p$t`U9w!5oB8$Qhm^2jVPLeke`Isg ze?yZay~E!Z7ZjXfBg9I`t_UIn%e6($^Ta8mX?;L=jOi;_xZ;B;gWjIrzkmOZ zeIHx?(e-n9cBQ>7z}qA3*|X%LkNelgp8xx~p=D}jer|edY;-s^J+HmBJvuTn@A{Pg_J*3OS# z8$VaKmKK-Nv!Ca9-01H3G}6~wRaMpB()8)$M>d=N!uP)r`pc2;Q=Oe1vx5WqPh$%5 z^A{H8ouw4Ny<_$a_pPt4$C?r9>+0j9{C0PD8|oV?KUEG4&o(x-zGRQjOi#764$?`t zOWL~o`}@}i{to?^_jh+FynnB4aOM)hy0v%UV{F3O%AY$Xn)E>0L)w2Mqhnt_e<>;{ zn*KF2GBQ$_o8FOD$nx7y<9`hIwcfdVe`;##@5<8H=)}s(+TTx;(Xq)<)Q4AZy085G zGdeoj-M8>D`8ARYcq5OQF&Q=C$U_QF&CHi|kr*lS472yy4Y4Apy}r*bKW$1B*N!=M zz9hHhKe^m=C1ze)@c%F(&u<3*!-&kwiuztV zeDE4=Eqgui|3yT8eXNhlSIhnnMATOPZu~15!Ygi(`u0g()FDOZ_KNpYO?0UXSr(s4 zX4+Cudyln$`tY-hA**-P@}d81Pr;?v&WnQz^8?JAZCRF|KQ4|`+?yZk_`Km&P#lj> zp*|0k98HS*_v6uymV2Q|)S>HpgW3U&Er&0Z>{XV+y9bmtxq9bzPm?&`taAjqs;mBO zEKjw)xcIetx4mVb5xqFJ8QQRIY@g*mbG~W(e;LtZ(8>R0M5)&$w|L|vA4gs*n4qDO zo@GTGqs?L?;7g|2QT%6evQHFOG>dV8O3X!`NTK?`Q#T1@1)8(@m+hEhSm2vgUnAc zd3*e)!qJM!b_L(tS{Y9X>w#H`gqk$BEUK{A?8~SVMYI2dh-P!PgnHu*TZ68H)*PO~P>h!1c`Tg}lk@a8;6fAK-KoquKu6Xs2$DsD z7e6mID*pbm+VB0lN-w|YH)ChHF6wM-K`l!lF^<%w`*^1&QT1wpi{&|8k)6n=8)uK- zdK!7G+F?LQdNA(`|>sm3fY(vnB!Ytw&*a zK+QhsZfHug7@+q$*-)#fIQ>dXpJ>}+!ikAgr3boKPo0x(jMPf_+n@L>=RwyRS?|%; zx3^CHl)QHMWJ`P1eC+;@=Ypm^j{D4UD&zrCr7T-RzAzq)5<|Llk{;W z)_m)_mR9+GwAxLOMy6*W<|^B0$QBg#h+`1c`Y-)yc3#=DKRLIqw5Dck%e~f`K#-n7lvTjiclOoro^fWC# z%zEWOi}sOaCbGrv&B4SUMq-0U^|`Q1Z;0Sesbezohl{5@lH6XirzIAKPA?BpvOuit zyv>){!4>VK@r`vhnyA4}?w>E)ir_5HqPQ%X7Q<);ATRD3laqW8~wW zC^9x6;&|S8=}lZxg#_4Lg_k!j3>Is9ZTqtJtBHt~MOW5}96E|Fm$&x4 zeYp0T$oJY|O(?45dD)u;QoZ95N#HCF%e#az7JmbvuA?b}>rr62m;*2q;HE%`(0=y6 zKQd$V^3CpF1olmEeqau3uO)&{^} zG6=1`!y(>ENq6ZOe)od=5(Kg%H)w@o!US*tC~_9!{ei-(K$Joqrq}6;Oz>(qg9NSV zO^9hiT!-gV!NdF9DdtHG0oZ3@KqKNrdjC+Tu$^Hugx9YoN;$OzwNgPAY%OE8AtFZ`3%7B2dv6ZSUo|%_=^lg~;>~WOfM#i!7hXW>Kkhq=IC3)_^)T=0;b{t>wQ-^I#XjxY==dG_@838eP{Bf2 zEr*HjaF7=(Y7ciV({y$wFo_lQvQ~fa_|FI9m}HO%j_NvVAok!hMZx?%55b`hmCWrk z!etX8l*3p@yWndXia{nsAFGl+T!Xg8-5B@|z@I;8B+sVbvs~UebSDaW%nuU{Z@+P< z2*+yuP3bJj3jA1R$MS_SM((B>2wj{7>4m;T*|m2G*3iN5q`LxI(-VTP0&la-RlXi@ zt%2sT@F(9q0m(z-4)&8PQDk6IF~`1YA>h=>j|>4cks;Vmps82C4fA<)1L@WkDOA9O zoj~dyM2qN))1T~@tXaJJr(oB9R!6%CO8pfXe62vNx#vv|TN@-ml#q-q^lVMx+Oj79 zk70-dPg$#nD-(Pfa1t|3~vMci>HcZy{o z@N@w^4ziW>AdfDvu*{>#K=BdyK>rE6VngnbLk!A!@BpHP1hQTZFeIW*Fu^%w_!0>< zLFZ)wynJ+C5f-248Z4g-%Ubu07DE0xbUzu3XrZH#EP(J##~R>s+Xzc%@B}h>?10@{zsqp@sm%t2238_dvUga)Fs z_U&{cG1*!%xehV;fiVTCF$J^mH-j;6L}1qJ7zzRQW*K_yCx6m2fd&l97C>VOd=Ht( zK_Uvu1}a!4vUJ1?I`6(2=>2R=u?WmUP~bThMwf9s%s}O1U~T}fBnEa53&b)YZXEtM zWL~~yo_h=cLIhp_v36KMlgV?sIVO&UWFzA#9JpQ%+=d9dh;d!v@Gr5^8tP!(aC9>n zb(zGQ2%z&Bh#VqcAtte(11Pb;u^fI9358td8BP^Y!fM(9h$0R@J2_FIC5A$Gp6_!O zcLfdOKovv~3Xj_2k{`D)c^;BMN;Jqe6BbKG>^H8L=x7ZL&nph!7#&f=K{BwwRWkn` z+e?Cu1~d3BlX(?B^7N5GSNEAWL+1+;EusxxVF-L$hBvcN#&}{^MbcKFwgpD5VVx(B z1i}L-NA|;g&x|Gpoz6nWGI=5{qm=GbUyx8EKf$(i#3X_DNd!8u4%LiB7;_vw*UsRP zkBeAtb{zicKrsCox`58hbC2f@9{g$9yoLaO`wWf1f$#o;Z^%7M!U_ao5!ss1Ph=p> z5oW$WCeDCJ5fN7jC_Eb}%iyVIBHycl^O;D{AipC+V4G+rjOTwi!_SWcWf4JGE*r>V z2)uKIYA|^`fY^mkNtF!V^+1TVKT44WZQ(fDad=zk2)AXZ2afkh9kPYMD@Ed&WCK!! zaIf+dUk0DiGju-|fD!>+Hg6D%Cj&s;!AGnxcxE|#C0Jg+U+~{UG5Rz7V|3nN2fh{p zie84y=iIlz@RMc{4{^{uf-0E7Ba14A5B9r7!W2|V}d~b$v|i^`1WvMEdZ@R;9K(oS}-&fBrlQp+H(s& zMn;b_z=6vN)-m{V1#euJc_xAVq!Sj_V$Y<*!U~NQ0bc15$R{F7lgJlW$REoJ)FkjK zk-;i#tNdlYS6rOH)k5CZOndgwgnKDXZfccVc(cwb28%5Em-NV zm}+X64e!#(U8V_pNVt;P!%X%15Z@?2UtFxmP<@KEng#tEdCBNW0kl{@|*?^s4_C5pn;Q5&3DKtR(Z1 z9aBB%0#g`t0fFxn0LCx#Bp~?a_U8cT&V!7&_RToms|8WC0wkkgh*ba~Ue9CVb68QI zas15>ktgYBJUR0s0s4}O6n8Do9nOto@aj$7)4;%9;`|vL7e4mG>r}MIe|(;0uoez) z5Eh1D;hQ+XJpd{l2sWql9>NJcC-9Q<S)amr?TK*A z5nX2{&#wv|YXbiqK0!Z?cZ~U8ZzP|VqpCHq|3m~2v(guZm^lo@9|rt18$j2C_!-P? z7BioPc4qD~E%2dObX!5=6dnxP0;SVIN4Qv2O)%&xF0}=Ry0;7u320z5NsN= z+5E~5OpImlU0jB4TpkQiQLuh+RP zU;0VDODvu~V!{@NzXgwS#PTnR!0s^O&*1o5aESLxUB#PU%VM(!PUzu@WM6MoE(0z? z2elAka5C)nJV=TF+vXDa&Yc0bD@Ka|9@_-C8}4laop)NN*XUZWNl33*X0LfwuSI5+ z`*JTqtdFn=f3F0fm|!ds@Zcc%$fzL}ObvjZ#tG!JqO2Z3S_lF=ys;O>+HCmxD#;$| znykTs{b3sT9Fr%PsJY1GN#_JCv3X1bLEBh?iwp>hTqAR~$Y8fWVK?jJn)PusZw;L< z=Wt;S0sWLD;Ohyibb#kGVPHC--M1DuM44lc|Tx{Ot=O350OKf9Ys@4tO)2M+J*Wq=WKt{4eMlw~27E zV&0vQ)=E}usRuAY=f6in#}a`)HZ+9P_Q?V~MMmed+h{_4zgtG)h)Isi@H>Qv7ns1O zSOIgO;|!g5hsf8XjB+1@#sa)9 z+V#b<>(6PF9tI{9`r`RdfqVvlUWQ)g@GW8lz?CU-cwj*c9mK`Mj^I#eM&l5HFNnc& zh?RYCk-v=0-;YBSv0=tI{xd`#+0K#Mx+f(U`J_7VH2|+MVb1?RB= zV;ppw&3}3sDo#fiVG#}_{yy?2T^v7gD_uTop|yIUeQcp~Z-Fho*nMtszjEFmx;U7% zI9$E>eQa@TZ;>OuGgCy~&F^IhC? zb6eH$yO=g-5(J6|rhg*Y44(2j@H;D*7Z(5%?cs~$?rH|`I{^Vf|X4wXRXM{)kXVgZL1fPJmX3X=yt&yU^zkNbPU zj>#i>F}ae+*Kvl2jpNH9qGEp|cz)}@VQ%v437lSr*bq>j9PsTx*w1xVGZKw!vKgE11{oBu$mazL z*pov-4_h?OhfPk#Ns1&nWvG_&z>EF8e#k+J;y8q`+fl64LwU|jS4Oo@5#dI%CaA^v z(_lUJ$kS7fxXG5w0?#E7q3zFg)lDNHi1cG1ArJcO|34y1TM}wbk^i@R;|I#UBd&;v zXSAD2ytMxk_+BXD$>A&d`-rGm$@wfJj%%QjP4&5;a21K+6d25Rkh(M`zvwR;ryagu zeq_yrDAnp84)=9x3cZH)6|E#^t=lwc{^_bP`^RXA`bKhV?VG}ry@3)J>&X!IpYY9X z&6frglx0Dct05M3YA?1H?7B`)I3TgVt<3++2k0#SMPf~yaT_DM#ZHiF8cttjKstp* z$+c`v!Mjo51Q3=g#u<*(41Ozl(^d!V++BH-V|A0YTFOC}gwq(LYOCC##j(Nln% z(exvxF}77r%0~CsSy8@bhF0Bt>+d3#3~Cw&{T9pj?6pfhc%nP5N$lC_yOlHS`k7Kb zwe?BJI7yyb0({nh(Ly<3Iieyho%5~t&PradfXf27WL zIS%IJ|I)4ULN-N8eBA#J$Z+~(UWBmXsj4znhF5^4Rkqx}&Tn$V|0a2-eLmm*q8Vmq zeFS++2lL#9ri1z92J5y}^(~+Ic=gU#n5NU+CYf@ldvz&217F|P3--$){gkhEsCM|A z9Dssb5!XbtZ~P}fYtWSQ2~ery%O)pz7f|Ob!5R*HG2qkJ(EXRv`iTt#mn{l)ZX7tA zqFn>?(NNMNhRx{- z^4nnhkCao?faq+`)6}d@E=o7-?l)dyQgoU-jo8tys_1=Nljw%jfLMJdDVtv}>k(e| z>_AI>R`-cMJFMg8qf=tR2==v~%q>>Z#>JlQo3YX2d&}21b^#Y!{v*JYQrb6&~#Ur}3?Nqg+eHsGC5stS90F6L`#$!yAy^){z2 z@zs9%)YOS+HOMU9y%KrHcXNTi^pNO%T5z3E%tl0DuB6pai&bSQ_T{E;jUbNKT!LKo zdg7M=L3rLU(Do1LPGC4!a_v7$Z>1CG`ubwb{%jh6VP@6KRTK@d|Jb%t-PuEpH^K&v zj2$+3DF<~_3T?WH z*S>Taq@hHN`Bm{Qq9pGRgY+nDeUNJ@(SJLMhKP03BW&GCNM)AD+^llxxbsnM0d4@WxxQ03d5gnOPgUCkmr^t|A_ zK4DTRoi7|?r*!j&pT;QnbG|SwsLlQ4-?S?tRvR>Js~g~DzG)|S^}E{bckX`>*wcT7 zixq13t9}_QwKB6=I)r#2e#&IB_m#@mG|PY=_q2My%c>nf5om8Oz0f=(ZnU)(u@v!v z0oLu*{ztTO^(qbS_%ds(T-mL<+4hGEo1L1eKGylj;p`G#s9R`d1&K)d@X&;>4%#9(QY62d+7nY^O}^SU7x&c zi;RWbb)Gyt8+h=37R_>wtLyvZB6v})| zolprrU_o5)+vHs$p!HQsgA^UPFe#$q*mQHLBx&Q{#QMsE=T4VT#is1s6q!~a0O^<%4e+}w<;QaRmvhvKiKRkxXW0;;)xPWQH`K&jgV`Nuz$^AYK=&8&5_)i{nZE2`kG_CHDc2>{BOc}*c9&y znlQHZxLU20QLVIXt&D5!3IAGIYOP#yt$dupMP{uxhw3X5c^3oK-?zli*5U-~RHW-v z)#^?g)v4Lmsk_#3HT>%|sdZY(b=tXgXG-gI>g&$-*6B{yom;KbgVy5(>-DAU4b