From 1a02a40decf7105fe4edcd431ed3e5ed887064f7 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 18 Aug 2016 10:58:30 +0300 Subject: [PATCH 1/7] [DE][PE] Table Settings: Change border color when theme colors are changed. --- apps/common/main/lib/component/ThemeColorPalette.js | 6 ++++++ apps/common/main/resources/less/asc-mixins.less | 2 +- apps/documenteditor/main/app/view/TableSettings.js | 4 +++- apps/presentationeditor/main/app/view/TableSettings.js | 4 +++- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/apps/common/main/lib/component/ThemeColorPalette.js b/apps/common/main/lib/component/ThemeColorPalette.js index 7a6361078..cedc96e69 100644 --- a/apps/common/main/lib/component/ThemeColorPalette.js +++ b/apps/common/main/lib/component/ThemeColorPalette.js @@ -365,6 +365,12 @@ define([ aEffectIdx++; } } + + var selected = $(this.el).find('a.' + this.selectedCls); + if (selected.length && selected.hasClass('palette-color-effect')) { + this.value = selected[0].className.match(this.colorRe)[1].toUpperCase(); + } + this.options.updateColorsArr = undefined; }, diff --git a/apps/common/main/resources/less/asc-mixins.less b/apps/common/main/resources/less/asc-mixins.less index 69a4fcedc..382d03dbf 100644 --- a/apps/common/main/resources/less/asc-mixins.less +++ b/apps/common/main/resources/less/asc-mixins.less @@ -74,7 +74,7 @@ } .options-btn-icon(@icon-class, @index, @icon-size) { - .@{icon-class} {background-position: -@icon-size -@index*@icon-size;} + .@{icon-class} {background-position: 0 -@index*@icon-size;} button.over > .@{icon-class} {background-position: -1*@icon-size -@index*@icon-size;} // .btn-group.open > .@{icon-class}, button.active > .@{icon-class}, diff --git a/apps/documenteditor/main/app/view/TableSettings.js b/apps/documenteditor/main/app/view/TableSettings.js index fb360ef6b..7600349a1 100644 --- a/apps/documenteditor/main/app/view/TableSettings.js +++ b/apps/documenteditor/main/app/view/TableSettings.js @@ -687,8 +687,10 @@ define([ UpdateThemeColors: function() { if (this.colorsBack) this.colorsBack.updateColors(Common.Utils.ThemeColor.getEffectColors(), Common.Utils.ThemeColor.getStandartColors()); - if (this.borderColor) + if (this.borderColor) { this.borderColor.updateColors(Common.Utils.ThemeColor.getEffectColors(), Common.Utils.ThemeColor.getStandartColors()); + this.btnBorderColor.setColor(this.borderColor.getColor()); + } }, _onInitTemplates: function(Templates){ diff --git a/apps/presentationeditor/main/app/view/TableSettings.js b/apps/presentationeditor/main/app/view/TableSettings.js index 9f9b2220d..138a59e38 100644 --- a/apps/presentationeditor/main/app/view/TableSettings.js +++ b/apps/presentationeditor/main/app/view/TableSettings.js @@ -583,8 +583,10 @@ define([ UpdateThemeColors: function() { if (this.colorsBack) this.colorsBack.updateColors(Common.Utils.ThemeColor.getEffectColors(), Common.Utils.ThemeColor.getStandartColors()); - if (this.borderColor) + if (this.borderColor) { this.borderColor.updateColors(Common.Utils.ThemeColor.getEffectColors(), Common.Utils.ThemeColor.getStandartColors()); + this.btnBorderColor.setColor(this.borderColor.getColor()); + } }, _onInitTemplates: function(Templates){ From 3dd444be6c991d95ab0a7d6dfaf951f858cd379a Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 18 Aug 2016 11:34:00 +0300 Subject: [PATCH 2/7] Fix Bug 32938. --- apps/common/main/lib/controller/ExternalDiagramEditor.js | 5 ++++- apps/spreadsheeteditor/main/app/controller/Main.js | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/apps/common/main/lib/controller/ExternalDiagramEditor.js b/apps/common/main/lib/controller/ExternalDiagramEditor.js index 876c5f6a5..4ce21da3d 100644 --- a/apps/common/main/lib/controller/ExternalDiagramEditor.js +++ b/apps/common/main/lib/controller/ExternalDiagramEditor.js @@ -182,7 +182,6 @@ define([ if (this.diagramEditorView) { if (eventData.type == 'documentReady') { this.diagramEditorView._isExternalDocReady = true; - this.diagramEditorView.setControlsDisabled(false); if (this.diagramEditorView._chartData) { externalEditor && externalEditor.serviceCommand('setChartData', this.diagramEditorView._chartData); this.diagramEditorView._chartData = null; @@ -191,6 +190,10 @@ define([ this.onDiagrammEditingDisabled(); } } else + if (eventData.type == 'chartDataReady') { + if (this.needDisableEditing===undefined) + this.diagramEditorView.setControlsDisabled(false); + } else if (eventData.type == "shortcut") { if (eventData.data.key == 'escape') this.diagramEditorView.hide(); diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index dfe11889f..1a6141a88 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -369,6 +369,13 @@ define([ } }, + onSelectionChanged: function(info){ + if (!this._isChartDataReady){ + this._isChartDataReady = true; + Common.Gateway.internalMessage('chartDataReady'); + } + }, + onLongActionBegin: function(type, id) { var action = {id: id, type: type}; this.stackLongActions.push(action); @@ -908,6 +915,8 @@ define([ me.api.asc_registerCallback('asc_onAuthParticipantsChanged', _.bind(me.onAuthParticipantsChanged, me)); me.api.asc_registerCallback('asc_onParticipantsChanged', _.bind(me.onAuthParticipantsChanged, me)); /** coauthoring end **/ + if (me.appOptions.isEditDiagram) + me.api.asc_registerCallback('asc_onSelectionChanged', _.bind(me.onSelectionChanged, me)); if (me.stackLongActions.exist({id: ApplyEditRights, type: Asc.c_oAscAsyncActionType['BlockInteraction']})) { me.onLongActionEnd(Asc.c_oAscAsyncActionType['BlockInteraction'], ApplyEditRights); From 2a8147b2d5599b7c7ee0d4b92926484d7e0e3939 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 18 Aug 2016 11:39:21 +0300 Subject: [PATCH 3/7] Fix Bug 32964. --- apps/common/main/lib/component/DataView.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/common/main/lib/component/DataView.js b/apps/common/main/lib/component/DataView.js index 5d1f5824e..32e054b3f 100644 --- a/apps/common/main/lib/component/DataView.js +++ b/apps/common/main/lib/component/DataView.js @@ -536,7 +536,7 @@ define([ var innerEl = $(this.el).find('.inner'), inner_top = innerEl.offset().top, idx = _.indexOf(this.store.models, record), - div = (idx>=0 && this.dataViewItems.length>0) ? $(this.dataViewItems[idx].el) : innerEl.find('#' + record.get('id')); + div = (idx>=0 && this.dataViewItems.length>idx) ? $(this.dataViewItems[idx].el) : innerEl.find('#' + record.get('id')); if (div.length<=0) return; var div_top = div.offset().top; From d242ff887d6056215f4b0999c2caa97b2ffba144 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 18 Aug 2016 14:17:05 +0300 Subject: [PATCH 4/7] [SSE] Fix Bug 32854. --- .../main/app/view/ChartSettingsDlg.js | 52 +++++++++++++++++-- apps/spreadsheeteditor/main/locale/en.json | 5 ++ 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/apps/spreadsheeteditor/main/app/view/ChartSettingsDlg.js b/apps/spreadsheeteditor/main/app/view/ChartSettingsDlg.js index e32358a51..5200a82ae 100644 --- a/apps/spreadsheeteditor/main/app/view/ChartSettingsDlg.js +++ b/apps/spreadsheeteditor/main/app/view/ChartSettingsDlg.js @@ -90,6 +90,7 @@ define([ 'text!spreadsheeteditor/main/app/template/ChartSettingsDlg.template' this.horAxisProps = null; this.currentAxisProps = null; this.dataRangeValid = ''; + this.currentChartType = this._state.ChartType; }, render: function() { @@ -839,6 +840,8 @@ define([ 'text!spreadsheeteditor/main/app/template/ChartSettingsDlg.template' this.updateAxisProps(rawData.type, true); this.vertAxisProps = this.chartSettings.getVertAxisProps(); this.horAxisProps = this.chartSettings.getHorAxisProps(); + this.updateDataLabels(rawData.type, this.cmbDataLabels.getValue()); + this.currentChartType = rawData.type; }, updateAxisProps: function(type, isDefault) { @@ -881,6 +884,44 @@ define([ 'text!spreadsheeteditor/main/app/template/ChartSettingsDlg.template' this.btnsCategory[3].options.contentTarget = (value || type == Asc.c_oAscChartTypeSettings.scatter) ? 'id-chart-settings-dlg-vert' : 'id-chart-settings-dlg-hor'; }, + updateDataLabels: function(chartType, labelPos) { + if (chartType !== this.currentChartType) { + var data = [{ value: Asc.c_oAscChartDataLabelsPos.none, displayValue: this.textNone }, + { value: Asc.c_oAscChartDataLabelsPos.ctr, displayValue: this.textCenter }]; + + if (chartType == Asc.c_oAscChartTypeSettings.barNormal || chartType == Asc.c_oAscChartTypeSettings.hBarNormal) + data.push({ value: Asc.c_oAscChartDataLabelsPos.inBase, displayValue: this.textInnerBottom }, + { value: Asc.c_oAscChartDataLabelsPos.inEnd, displayValue: this.textInnerTop }, + { value: Asc.c_oAscChartDataLabelsPos.outEnd, displayValue: this.textOuterTop }); + else if ( chartType == Asc.c_oAscChartTypeSettings.barStacked || chartType == Asc.c_oAscChartTypeSettings.barStackedPer || + chartType == Asc.c_oAscChartTypeSettings.hBarStacked || chartType == Asc.c_oAscChartTypeSettings.hBarStackedPer ) + data.push({ value: Asc.c_oAscChartDataLabelsPos.inBase, displayValue: this.textInnerBottom }, + { value: Asc.c_oAscChartDataLabelsPos.inEnd, displayValue: this.textInnerTop }); + else if (chartType == Asc.c_oAscChartTypeSettings.lineNormal || chartType == Asc.c_oAscChartTypeSettings.lineStacked || chartType == Asc.c_oAscChartTypeSettings.lineStackedPer || + chartType == Asc.c_oAscChartTypeSettings.stock || chartType == Asc.c_oAscChartTypeSettings.scatter) + data.push({ value: Asc.c_oAscChartDataLabelsPos.l, displayValue: this.textLeft }, + { value: Asc.c_oAscChartDataLabelsPos.r, displayValue: this.textRight }, + { value: Asc.c_oAscChartDataLabelsPos.t, displayValue: this.textTop }, + { value: Asc.c_oAscChartDataLabelsPos.b, displayValue: this.textBottom }); + else if (chartType == Asc.c_oAscChartTypeSettings.pie || chartType == Asc.c_oAscChartTypeSettings.pie3d) + data.push({ value: Asc.c_oAscChartDataLabelsPos.bestFit, displayValue: this.textFit }, + { value: Asc.c_oAscChartDataLabelsPos.inEnd, displayValue: this.textInnerTop }, + { value: Asc.c_oAscChartDataLabelsPos.outEnd, displayValue: this.textOuterTop }); + + this.cmbDataLabels.setData(data); + } + + if (labelPos!==undefined) { + var rec = this.cmbDataLabels.store.findWhere({value: labelPos}); + if (!rec) + labelPos = Asc.c_oAscChartDataLabelsPos.ctr; + } else + labelPos = Asc.c_oAscChartDataLabelsPos.none; + + this.cmbDataLabels.setValue(labelPos); + this.onSelectDataLabels(this.cmbDataLabels, {value:labelPos}); + }, + onVCategoryClick: function() { (this.vertAxisProps.getAxisType()==Asc.c_oAscAxisType.val) ? this.fillVProps(this.vertAxisProps) : this.fillHProps(this.vertAxisProps); }, @@ -1083,8 +1124,7 @@ define([ 'text!spreadsheeteditor/main/app/template/ChartSettingsDlg.template' this.cmbChartTitle.setValue(props.getTitle()); this.cmbLegendPos.setValue(props.getLegendPos()); - this.cmbDataLabels.setValue(props.getDataLabelsPos()); - this.onSelectDataLabels(this.cmbDataLabels, {value:props.getDataLabelsPos()}); + this.updateDataLabels(this._state.ChartType, props.getDataLabelsPos()); this.chSeriesName.setValue(this.chartSettings.getShowSerName(), true); this.chCategoryName.setValue(this.chartSettings.getShowCatName(), true); @@ -1100,6 +1140,7 @@ define([ 'text!spreadsheeteditor/main/app/template/ChartSettingsDlg.template' this.horAxisProps = props.getHorAxisProps(); this.updateAxisProps(this._state.ChartType); + this.currentChartType = this._state.ChartType; } }, @@ -1330,6 +1371,11 @@ define([ 'text!spreadsheeteditor/main/app/template/ChartSettingsDlg.template' textAxisSettings: 'Axis Settings', textGridLines: 'Gridlines', textShow: 'Show', - textHide: 'Hide' + textHide: 'Hide', + textLeft: 'Left', + textRight: 'Right', + textTop: 'Top', + textBottom: 'Bottom', + textFit: 'Fit Width' }, SSE.Views.ChartSettingsDlg || {})); }); diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 35bbe540b..7cfa3161f 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -411,6 +411,11 @@ "SSE.Views.ChartSettingsDlg.textXAxisTitle": "X Axis Title", "SSE.Views.ChartSettingsDlg.textYAxisTitle": "Y Axis Title", "SSE.Views.ChartSettingsDlg.txtEmpty": "This field is required", + "SSE.Views.ChartSettingsDlg.textLeft": "Left", + "SSE.Views.ChartSettingsDlg.textRight": "Right", + "SSE.Views.ChartSettingsDlg.textTop": "Top", + "SSE.Views.ChartSettingsDlg.textBottom": "Bottom", + "SSE.Views.ChartSettingsDlg.textFit": "Fit Width", "SSE.Views.DigitalFilterDialog.cancelButtonText": "Cancel", "SSE.Views.DigitalFilterDialog.capAnd": "And", "SSE.Views.DigitalFilterDialog.capCondition1": "equals", From 6777a487c428833adef6a3d209cb73244ad042c3 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Thu, 18 Aug 2016 17:46:21 +0300 Subject: [PATCH 5/7] [SSE] Bug 32861. --- apps/spreadsheeteditor/main/app/controller/LeftMenu.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js index c5ecf1497..cd30c1fda 100644 --- a/apps/spreadsheeteditor/main/app/controller/LeftMenu.js +++ b/apps/spreadsheeteditor/main/app/controller/LeftMenu.js @@ -621,7 +621,7 @@ define([ } } if (this.leftMenu.btnFile.pressed || this.leftMenu.btnAbout.pressed || - ($(e.target).parents('#left-menu').length || this.leftMenu.btnPlugins.pressed) && this.api.isCellEdited!==true) { + ($(e.target).parents('#left-menu').length || this.leftMenu.btnPlugins.pressed || this.leftMenu.btnComments.pressed) && this.api.isCellEdited!==true) { this.leftMenu.close(); Common.NotificationCenter.trigger('layout:changed', 'leftmenu'); return false; From 35e67155b392ad218657d0eb790c79876ce6f665 Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 19 Aug 2016 09:18:45 +0300 Subject: [PATCH 6/7] [PE] Fix Bug 32497. --- apps/presentationeditor/main/app/view/DocumentHolder.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/presentationeditor/main/app/view/DocumentHolder.js b/apps/presentationeditor/main/app/view/DocumentHolder.js index b9c9fea48..00b3f7d00 100644 --- a/apps/presentationeditor/main/app/view/DocumentHolder.js +++ b/apps/presentationeditor/main/app/view/DocumentHolder.js @@ -685,6 +685,11 @@ define([ me.slidesCount = count; }; + var onApiCurrentPages = function(number) { + if (me.currentMenu && me.currentMenu.isVisible()) + me.currentMenu.hide(); + }; + this.setApi = function(o) { me.api = o; @@ -695,6 +700,7 @@ define([ me.api.asc_registerCallback('asc_onPaintSlideNum', _.bind(onPaintSlideNum, me)); me.api.asc_registerCallback('asc_onEndPaintSlideNum', _.bind(onEndPaintSlideNum, me)); me.api.asc_registerCallback('asc_onCountPages', _.bind(onApiCountPages, me)); + me.api.asc_registerCallback('asc_onCurrentPage', _.bind(onApiCurrentPages, me)); me.slidesCount = me.api.getCountPages(); //hyperlink From de773f86186d2c51b150f4f62d6114ed28fa0d6e Mon Sep 17 00:00:00 2001 From: Julia Radzhabova Date: Fri, 19 Aug 2016 16:41:48 +0300 Subject: [PATCH 7/7] Debug opening/moving/resizing menus, dialogs, tips and others (using mouse events), when browser zoom != 100%. --- apps/common/main/lib/component/DataView.js | 2 +- .../main/lib/component/DimensionPicker.js | 4 +- .../main/lib/component/HSBColorPicker.js | 6 +-- apps/common/main/lib/component/Layout.js | 14 +++--- apps/common/main/lib/component/Menu.js | 4 +- apps/common/main/lib/component/Slider.js | 16 +++--- apps/common/main/lib/component/Switcher.js | 6 +-- .../main/lib/component/SynchronizeTip.js | 2 +- apps/common/main/lib/component/TabBar.js | 13 ++--- apps/common/main/lib/component/TableStyler.js | 4 +- apps/common/main/lib/component/Window.js | 47 ++++++++++-------- .../lib/controller/ExternalDiagramEditor.js | 7 +-- .../lib/controller/ExternalMergeEditor.js | 7 +-- apps/common/main/lib/controller/Plugins.js | 8 +-- apps/common/main/lib/util/Tip.js | 9 ++-- apps/common/main/lib/util/utils.js | 19 ++++++- .../main/lib/view/ExternalDiagramEditor.js | 6 +-- .../main/lib/view/ExternalMergeEditor.js | 6 +-- apps/common/main/lib/view/Header.js | 2 +- apps/common/main/lib/view/Plugins.js | 8 +-- .../main/app/controller/Toolbar.js | 4 +- apps/documenteditor/main/app/view/Toolbar.js | 2 +- .../main/app/view/Toolbar.js | 2 +- .../main/resources/img/toolbar-menu@2x.png | Bin 30043 -> 37975 bytes .../main/app/controller/DocumentHolder.js | 7 ++- .../main/app/controller/Main.js | 2 +- .../main/app/view/AutoFilterDialog.js | 6 ++- .../main/app/view/FormulaDialog.js | 4 +- .../main/app/view/Toolbar.js | 2 +- 29 files changed, 124 insertions(+), 95 deletions(-) diff --git a/apps/common/main/lib/component/DataView.js b/apps/common/main/lib/component/DataView.js index 32e054b3f..b9e68a11f 100644 --- a/apps/common/main/lib/component/DataView.js +++ b/apps/common/main/lib/component/DataView.js @@ -676,7 +676,7 @@ define([ ? this.parentMenu.cmpEl : this.parentMenu.cmpEl.find('[role=menu]'), innerEl = $(this.el).find('.inner').andSelf().filter('.inner'), - docH = $(document).height(), + docH = Common.Utils.innerHeight(), menuH = menuRoot.outerHeight(), top = parseInt(menuRoot.css('top')); diff --git a/apps/common/main/lib/component/DimensionPicker.js b/apps/common/main/lib/component/DimensionPicker.js index 7e5a475b5..22fb1bd98 100644 --- a/apps/common/main/lib/component/DimensionPicker.js +++ b/apps/common/main/lib/component/DimensionPicker.js @@ -58,8 +58,8 @@ define([ var onMouseMove = function(event){ me.setTableSize( - Math.ceil((event.offsetX === undefined ? event.originalEvent.layerX : event.offsetX) / me.itemSize), - Math.ceil((event.offsetY === undefined ? event.originalEvent.layerY : event.offsetY) / me.itemSize), + Math.ceil((event.offsetX === undefined ? event.originalEvent.layerX : event.offsetX*Common.Utils.zoom()) / me.itemSize), + Math.ceil((event.offsetY === undefined ? event.originalEvent.layerY : event.offsetY*Common.Utils.zoom()) / me.itemSize), event ); }; diff --git a/apps/common/main/lib/component/HSBColorPicker.js b/apps/common/main/lib/component/HSBColorPicker.js index e943b62f2..d704f0a2b 100644 --- a/apps/common/main/lib/component/HSBColorPicker.js +++ b/apps/common/main/lib/component/HSBColorPicker.js @@ -134,8 +134,8 @@ define([ var onSBAreaMouseMove = function(event, element, eOpts){ if (arrowSatBrightness.length>0 && areaSatBrightness.length>0) { var pos = [ - Math.max(0, Math.min(100, (parseInt((event.pageX - areaSatBrightness.offset().left) / areaSatBrightness.width() * 100)))), - Math.max(0, Math.min(100, (parseInt((event.pageY - areaSatBrightness.offset().top) / areaSatBrightness.height() * 100)))) + Math.max(0, Math.min(100, (parseInt((event.pageX*Common.Utils.zoom() - areaSatBrightness.offset().left) / areaSatBrightness.width() * 100)))), + Math.max(0, Math.min(100, (parseInt((event.pageY*Common.Utils.zoom() - areaSatBrightness.offset().top) / areaSatBrightness.height() * 100)))) ]; arrowSatBrightness.css('left', pos[0] + '%'); @@ -154,7 +154,7 @@ define([ var onHueAreaMouseMove = function(event, element, eOpts){ if (arrowHue&& areaHue) { - var pos = Math.max(0, Math.min(100, (parseInt((event.pageY - areaHue.offset().top) / areaHue.height() * 100)))); + var pos = Math.max(0, Math.min(100, (parseInt((event.pageY*Common.Utils.zoom() - areaHue.offset().top) / areaHue.height() * 100)))); arrowHue.css('top', pos + '%'); hueVal = parseInt(360 * pos / 100.0); diff --git a/apps/common/main/lib/component/Layout.js b/apps/common/main/lib/component/Layout.js index 3c874347b..1243aed97 100644 --- a/apps/common/main/lib/component/Layout.js +++ b/apps/common/main/lib/component/Layout.js @@ -249,24 +249,25 @@ define([ if (e.data.type == 'vertical') { this.resize.height = parseInt(this.resize.$el.css('height')); this.resize.max = (panel.maxpos > 0 ? panel.maxpos : this.resize.$el.parent().height() + panel.maxpos) - this.resize.height; - this.resize.inity = e.pageY - parseInt(e.currentTarget.style.top); + this.resize.inity = e.pageY*Common.Utils.zoom() - parseInt(e.currentTarget.style.top); } else if (e.data.type == 'horizontal') { this.resize.width = parseInt(this.resize.$el.css('width')); this.resize.max = (panel.maxpos > 0 ? panel.maxpos : this.resize.$el.parent().height() + panel.maxpos) - this.resize.width; - this.resize.initx = e.pageX - parseInt(e.currentTarget.style.left); + this.resize.initx = e.pageX*Common.Utils.zoom() - parseInt(e.currentTarget.style.left); } Common.NotificationCenter.trigger('layout:resizestart'); }, resizeMove: function(e) { + var zoom = (e instanceof jQuery.Event) ? Common.Utils.zoom() : 1; if (this.resize.type == 'vertical') { var prop = 'top', - value = e.pageY - this.resize.inity; + value = e.pageY*zoom - this.resize.inity; } else if (this.resize.type == 'horizontal') { prop = 'left'; - value = e.pageX - this.resize.initx; + value = e.pageX*zoom - this.resize.initx; } if (this.resize.fmin && this.resize.fmax) { @@ -296,13 +297,14 @@ define([ if (!this.resize.$el) return; + var zoom = (e instanceof jQuery.Event) ? Common.Utils.zoom() : 1; if (this.resize.type == 'vertical') { var prop = 'height'; - var value = e.pageY - this.resize.inity; + var value = e.pageY*zoom - this.resize.inity; } else if (this.resize.type == 'horizontal') { prop = 'width'; - value = e.pageX - this.resize.initx; + value = e.pageX*zoom - this.resize.initx; } if (this.resize.fmin && this.resize.fmax) { diff --git a/apps/common/main/lib/component/Menu.js b/apps/common/main/lib/component/Menu.js index e84794244..61bd4b5a4 100644 --- a/apps/common/main/lib/component/Menu.js +++ b/apps/common/main/lib/component/Menu.js @@ -531,8 +531,8 @@ define([ menuParent = this.menuAlignEl || menuRoot.parent(), m = this.menuAlign.match(/^([a-z]+)-([a-z]+)/), offset = menuParent.offset(), - docW = Math.min($(document).width(), $('body').width()), - docH = $(document).height() - 10, // Yep, it's magic number + docW = Common.Utils.innerWidth(), + docH = Common.Utils.innerHeight() - 10, // Yep, it's magic number menuW = menuRoot.outerWidth(), menuH = menuRoot.outerHeight(), parentW = menuParent.outerWidth(), diff --git a/apps/common/main/lib/component/Slider.js b/apps/common/main/lib/component/Slider.js index 3279c75cb..0dd1faeb5 100644 --- a/apps/common/main/lib/component/Slider.js +++ b/apps/common/main/lib/component/Slider.js @@ -146,7 +146,7 @@ define([ e.preventDefault(); e.stopPropagation(); - var pos = Math.max(0, Math.min(100, (Math.round((e.pageX - me.cmpEl.offset().left - me._dragstart) / me.width * 100)))); + var pos = Math.max(0, Math.min(100, (Math.round((e.pageX*Common.Utils.zoom() - me.cmpEl.offset().left - me._dragstart) / me.width * 100)))); me.setThumbPosition(pos); me.lastValue = me.value; @@ -167,7 +167,7 @@ define([ e.preventDefault(); e.stopPropagation(); - var pos = Math.max(0, Math.min(100, (Math.round((e.pageX - me.cmpEl.offset().left - me._dragstart) / me.width * 100)))); + var pos = Math.max(0, Math.min(100, (Math.round((e.pageX*Common.Utils.zoom() - me.cmpEl.offset().left - me._dragstart) / me.width * 100)))); me.setThumbPosition(pos); me.lastValue = me.value; @@ -179,7 +179,7 @@ define([ var onMouseDown = function (e) { if ( me.disabled ) return; - me._dragstart = e.pageX - me.thumb.offset().left - 7; + me._dragstart = e.pageX*Common.Utils.zoom() - me.thumb.offset().left - 7; me.thumb.addClass('active'); $(document).on('mouseup', onMouseUp); @@ -192,7 +192,7 @@ define([ var onTrackMouseDown = function (e) { if ( me.disabled ) return; - var pos = Math.max(0, Math.min(100, (Math.round((e.pageX - me.cmpEl.offset().left) / me.width * 100)))); + var pos = Math.max(0, Math.min(100, (Math.round((e.pageX*Common.Utils.zoom() - me.cmpEl.offset().left) / me.width * 100)))); me.setThumbPosition(pos); me.lastValue = me.value; @@ -342,7 +342,7 @@ define([ lastValue = me.thumbs[index].value, minValue = (index-1<0) ? 0 : me.thumbs[index-1].position, maxValue = (index+1 -me.delta) : (pos > me.delta); me.cmpEl.toggleClass('on', me.value); me.thumb.css({left: '', right: ''}); @@ -127,7 +127,7 @@ define([ e.preventDefault(); e.stopPropagation(); - var pos = Math.round((e.pageX - me._dragstart)); + var pos = Math.round((e.pageX*Common.Utils.zoom() - me._dragstart)); if (me.value) { me.thumb.css({right: (pos<1) ? Math.min(me.width-me.thumbWidth - 2, -pos) : 0, left: 'auto'}); } else { @@ -138,7 +138,7 @@ define([ var onMouseDown = function (e) { if ( me.disabled ) return; - me._dragstart = e.pageX; + me._dragstart = e.pageX*Common.Utils.zoom(); me._isMouseMove = false; $(document).on('mouseup.switcher', onMouseUp); diff --git a/apps/common/main/lib/component/SynchronizeTip.js b/apps/common/main/lib/component/SynchronizeTip.js index 4c20654a4..756196099 100644 --- a/apps/common/main/lib/component/SynchronizeTip.js +++ b/apps/common/main/lib/component/SynchronizeTip.js @@ -95,7 +95,7 @@ define([ applyPlacement: function () { var showxy = this.target.offset(); - (this.placement == 'top') ? tipEl.css({bottom : $(document).height() - showxy.top + 'px', right: $(document).width() - showxy.left - this.target.width()/2 + 'px'}) + (this.placement == 'top') ? tipEl.css({bottom : Common.Utils.innerHeight() - showxy.top + 'px', right: Common.Utils.innerWidth() - showxy.left - this.target.width()/2 + 'px'}) : tipEl.css({top : showxy.top + this.target.height()/2 + 'px', left: showxy.left + this.target.width() + 'px'}); }, diff --git a/apps/common/main/lib/component/TabBar.js b/apps/common/main/lib/component/TabBar.js index 5487891c0..5ef92ba98 100644 --- a/apps/common/main/lib/component/TabBar.js +++ b/apps/common/main/lib/component/TabBar.js @@ -234,8 +234,8 @@ define([ function dragMove (e) { if (!_.isUndefined(me.drag)) { - me.drag.moveX = e.clientX; - var leftPos = Math.max(e.clientX - me.drag.anchorX - me.tabBarLeft - me.scrollLeft, 0); + me.drag.moveX = e.clientX*Common.Utils.zoom(); + var leftPos = Math.max(me.drag.moveX - me.drag.anchorX - me.tabBarLeft - me.scrollLeft, 0); leftPos = Math.min(leftPos, me.tabBarRight - me.tabBarLeft - me.drag.tabWidth - me.scrollLeft); me.drag.tab.$el.css('left', leftPos + 'px'); @@ -250,16 +250,17 @@ define([ } if (!_.isUndefined(bar) && !_.isUndefined(tab) && bar.tabs.length > 1) { - var index = bar.tabs.indexOf(tab); + var index = bar.tabs.indexOf(tab), + _clientX = e.clientX*Common.Utils.zoom(); me.bar = bar; me.drag = {tab: tab, index: index}; this.calculateBounds(); this.setAbsTabs(); - me.drag.moveX = e.clientX; - me.drag.mouseX = e.clientX; - me.drag.anchorX = e.clientX - this.bounds[index].left; + me.drag.moveX = _clientX; + me.drag.mouseX = _clientX; + me.drag.anchorX = _clientX - this.bounds[index].left; me.drag.tabWidth = this.bounds[index].width; document.addEventListener('dragstart',dragDropText); diff --git a/apps/common/main/lib/component/TableStyler.js b/apps/common/main/lib/component/TableStyler.js index 4736d4e1e..0541e169a 100644 --- a/apps/common/main/lib/component/TableStyler.js +++ b/apps/common/main/lib/component/TableStyler.js @@ -144,8 +144,8 @@ define([ this.cmpEl.on('click', function(event){ var pos = { - x: event.pageX - me.cmpEl.offset().left, - y: event.pageY - me.cmpEl.offset().top + x: event.pageX*Common.Utils.zoom() - me.cmpEl.offset().left, + y: event.pageY*Common.Utils.zoom() - me.cmpEl.offset().top }; var ptInPoly = function(npol, xp, yp, x, y) { diff --git a/apps/common/main/lib/component/Window.js b/apps/common/main/lib/component/Window.js index 68c6cf7a4..4459ec1bd 100644 --- a/apps/common/main/lib/component/Window.js +++ b/apps/common/main/lib/component/Window.js @@ -211,8 +211,8 @@ define([ var main_width = document.documentElement.offsetWidth; var main_height = document.documentElement.offsetHeight; } else { - main_width = window.innerWidth; - main_height = window.innerHeight; + main_width = Common.Utils.innerWidth(); + main_height = Common.Utils.innerHeight(); } if (this.initConfig.height == 'auto') { @@ -244,16 +244,17 @@ define([ function _dragstart(event) { if ( $(event.target).hasClass('close') ) return; Common.UI.Menu.Manager.hideAll(); + var zoom = (event instanceof jQuery.Event) ? Common.Utils.zoom() : 1; this.dragging.enabled = true; - this.dragging.initx = event.pageX - parseInt(this.$window.css('left')); - this.dragging.inity = event.pageY - parseInt(this.$window.css('top')); + this.dragging.initx = event.pageX*zoom - parseInt(this.$window.css('left')); + this.dragging.inity = event.pageY*zoom - parseInt(this.$window.css('top')); if (window.innerHeight == undefined) { var main_width = document.documentElement.offsetWidth; var main_height = document.documentElement.offsetHeight; } else { - main_width = window.innerWidth; - main_height = window.innerHeight; + main_width = Common.Utils.innerWidth(); + main_height = Common.Utils.innerHeight(); } this.dragging.maxx = main_width - parseInt(this.$window.css("width")); @@ -280,8 +281,9 @@ define([ function _mousemove(event) { if (this.dragging.enabled) { - var left = event.pageX - this.dragging.initx, - top = event.pageY - this.dragging.inity; + var zoom = (event instanceof jQuery.Event) ? Common.Utils.zoom() : 1, + left = event.pageX*zoom - this.dragging.initx, + top = event.pageY*zoom - this.dragging.inity; left < 0 ? (left = 0) : left > this.dragging.maxx && (left = this.dragging.maxx); top < 0 ? (top = 0) : top > this.dragging.maxy && (top = this.dragging.maxy); @@ -298,16 +300,16 @@ define([ top = parseInt(this.$window.css('top')); this.resizing.enabled = true; - this.resizing.initpage_x = event.pageX; - this.resizing.initpage_y = event.pageY; - this.resizing.initx = event.pageX - left; - this.resizing.inity = event.pageY - top; + this.resizing.initpage_x = event.pageX*Common.Utils.zoom(); + this.resizing.initpage_y = event.pageY*Common.Utils.zoom(); + this.resizing.initx = this.resizing.initpage_x - left; + this.resizing.inity = this.resizing.initpage_y - top; this.resizing.initw = parseInt(this.$window.css("width")); this.resizing.inith = parseInt(this.$window.css("height")); this.resizing.type = [el.hasClass('left') ? -1 : (el.hasClass('right') ? 1 : 0), el.hasClass('top') ? -1 : (el.hasClass('bottom') ? 1 : 0)]; - var main_width = (window.innerHeight == undefined) ? document.documentElement.offsetWidth : window.innerWidth, - main_height = (window.innerHeight == undefined) ? document.documentElement.offsetHeight : window.innerHeight, + var main_width = (window.innerHeight == undefined) ? document.documentElement.offsetWidth : Common.Utils.innerWidth(), + main_height = (window.innerHeight == undefined) ? document.documentElement.offsetHeight : Common.Utils.innerHeight(), maxwidth = (this.initConfig.maxwidth) ? this.initConfig.maxwidth : main_width, maxheight = (this.initConfig.maxheight) ? this.initConfig.maxheight : main_height; @@ -337,17 +339,20 @@ define([ function _resize(event) { if (this.resizing.enabled) { - var resized = false; - if (this.resizing.type[0] && event.pageXthis.resizing.minx) { + var resized = false, + zoom = (event instanceof jQuery.Event) ? Common.Utils.zoom() : 1, + pageX = event.pageX*zoom, + pageY = event.pageY*zoom; + if (this.resizing.type[0] && pageXthis.resizing.minx) { if (this.resizing.type[0]<0) - this.$window.css({left: event.pageX - this.resizing.initx}); - this.setWidth(this.resizing.initw + (event.pageX - this.resizing.initpage_x) * this.resizing.type[0]); + this.$window.css({left: pageX - this.resizing.initx}); + this.setWidth(this.resizing.initw + (pageX - this.resizing.initpage_x) * this.resizing.type[0]); resized = true; } - if (this.resizing.type[1] && event.pageYthis.resizing.miny) { + if (this.resizing.type[1] && pageYthis.resizing.miny) { if (this.resizing.type[1]<0) - this.$window.css({top: event.pageY - this.resizing.inity}); - this.setHeight(this.resizing.inith + (event.pageY - this.resizing.initpage_y) * this.resizing.type[1]); + this.$window.css({top: pageY - this.resizing.inity}); + this.setHeight(this.resizing.inith + (pageY - this.resizing.initpage_y) * this.resizing.type[1]); resized = true; } if (resized) this.fireEvent('resizing'); diff --git a/apps/common/main/lib/controller/ExternalDiagramEditor.js b/apps/common/main/lib/controller/ExternalDiagramEditor.js index 4ce21da3d..62810e19e 100644 --- a/apps/common/main/lib/controller/ExternalDiagramEditor.js +++ b/apps/common/main/lib/controller/ExternalDiagramEditor.js @@ -97,9 +97,10 @@ define([ externalEditor.serviceCommand('window:drag', state == 'start'); },this), 'show': _.bind(function(cmp){ - var h = this.diagramEditorView.getHeight(); - if (window.innerHeight>h && h<700 || window.innerHeighth && h<700 || innerHeighth && h<700 || window.innerHeighth && h<700 || innerHeight window.innerWidth) { - tp.left = window.innerWidth - $tip.width() - 30; + if (tp.left + $tip.width() > innerWidth) { + tp.left = innerWidth - $tip.width() - 30; } $tip.offset(tp).addClass('in'); diff --git a/apps/common/main/lib/util/utils.js b/apps/common/main/lib/util/utils.js index 406f230c8..00be00ea2 100644 --- a/apps/common/main/lib/util/utils.js +++ b/apps/common/main/lib/util/utils.js @@ -101,7 +101,21 @@ Common.Utils = _.extend(new(function() { Chart : 6, MailMerge : 7, TextArt : 8 + }, + me = this, + checkSize = function() { + if (isChrome && !isOpera && document && document.firstElementChild && document.body) { + document.firstElementChild.style.zoom = "reset"; + me.zoom = document.body.clientWidth / window.innerWidth; + } + me.innerWidth = window.innerWidth * me.zoom; + me.innerHeight = window.innerHeight * me.zoom; }; + me.zoom = 1; + me.innerWidth = window.innerWidth; + me.innerHeight = window.innerHeight; + checkSize(); + $(window).on('resize', checkSize); return { userAgent: userAgent, @@ -162,7 +176,10 @@ Common.Utils = _.extend(new(function() { emailStrongRe: emailStrongRe, ipStrongRe: ipStrongRe, hostnameStrongRe: hostnameStrongRe, - documentSettingsType: documentSettingsType + documentSettingsType: documentSettingsType, + zoom: function() {return me.zoom;}, + innerWidth: function() {return me.innerWidth;}, + innerHeight: function() {return me.innerHeight;} } })(), Common.Utils || {}); diff --git a/apps/common/main/lib/view/ExternalDiagramEditor.js b/apps/common/main/lib/view/ExternalDiagramEditor.js index eeb341695..f1dc2ccc5 100644 --- a/apps/common/main/lib/view/ExternalDiagramEditor.js +++ b/apps/common/main/lib/view/ExternalDiagramEditor.js @@ -48,7 +48,7 @@ define([ _.extend(_options, { title: this.textTitle, width: 910, - height: (window.innerHeight-700)<0 ? window.innerHeight: 700, + height: (Common.Utils.innerHeight()-700)<0 ? Common.Utils.innerHeight(): 700, cls: 'advanced-settings-dlg', header: true, toolclose: 'hide', @@ -134,8 +134,8 @@ define([ this.$window.find('> .body').css('height', height-header_height); this.$window.find('> .body > .box').css('height', height-85); - var top = ((parseInt(window.innerHeight) - parseInt(height)) / 2) * 0.9; - var left = (parseInt(window.innerWidth) - parseInt(this.initConfig.width)) / 2; + var top = ((Common.Utils.innerHeight() - parseInt(height)) / 2) * 0.9; + var left = (Common.Utils.innerWidth() - parseInt(this.initConfig.width)) / 2; this.$window.css('left',left); this.$window.css('top',top); diff --git a/apps/common/main/lib/view/ExternalMergeEditor.js b/apps/common/main/lib/view/ExternalMergeEditor.js index 6e693f21d..417379bc1 100644 --- a/apps/common/main/lib/view/ExternalMergeEditor.js +++ b/apps/common/main/lib/view/ExternalMergeEditor.js @@ -48,7 +48,7 @@ define([ _.extend(_options, { title: this.textTitle, width: 910, - height: (window.innerHeight-700)<0 ? window.innerHeight: 700, + height: (Common.Utils.innerHeight()-700)<0 ? Common.Utils.innerHeight(): 700, cls: 'advanced-settings-dlg', header: true, toolclose: 'hide', @@ -134,8 +134,8 @@ define([ this.$window.find('> .body').css('height', height-header_height); this.$window.find('> .body > .box').css('height', height-85); - var top = ((parseInt(window.innerHeight) - parseInt(height)) / 2) * 0.9; - var left = (parseInt(window.innerWidth) - parseInt(this.initConfig.width)) / 2; + var top = ((Common.Utils.innerHeight() - parseInt(height)) / 2) * 0.9; + var left = (Common.Utils.innerWidth() - parseInt(this.initConfig.width)) / 2; this.$window.css('left',left); this.$window.css('top',top); diff --git a/apps/common/main/lib/view/Header.js b/apps/common/main/lib/view/Header.js index ed8360c4f..676738275 100644 --- a/apps/common/main/lib/view/Header.js +++ b/apps/common/main/lib/view/Header.js @@ -194,7 +194,7 @@ define([ if (e.which == 3) { // right button click Common.UI.Menu.Manager.hideAll(); var me = this, - showPoint = [e.pageX, e.pageY], + showPoint = [e.pageX*Common.Utils.zoom(), e.pageY*Common.Utils.zoom()], menuContainer = $(this.el).find(Common.Utils.String.format('#menu-container-{0}', this.gotoDocsMenu.id)); if (!this.gotoDocsMenu.rendered) { // Prepare menu container diff --git a/apps/common/main/lib/view/Plugins.js b/apps/common/main/lib/view/Plugins.js index 4f82c5c78..3289dbba2 100644 --- a/apps/common/main/lib/view/Plugins.js +++ b/apps/common/main/lib/view/Plugins.js @@ -202,9 +202,9 @@ define([ }, options); var header_footer = (_options.buttons && _.size(_options.buttons)>0) ? 85 : 34; - _options.width = (window.innerWidth-_options.width)<0 ? window.innerWidth: _options.width, + _options.width = (Common.Utils.innerWidth()-_options.width)<0 ? Common.Utils.innerWidth(): _options.width, _options.height += header_footer; - _options.height = (window.innerHeight-_options.height)<0 ? window.innerHeight: _options.height; + _options.height = (Common.Utils.innerHeight()-_options.height)<0 ? Common.Utils.innerHeight(): _options.height; this.template = [ '
', @@ -268,8 +268,8 @@ define([ }, setInnerSize: function(width, height) { - var maxHeight = parseInt(window.innerHeight), - maxWidth = parseInt(window.innerWidth), + var maxHeight = Common.Utils.innerHeight(), + maxWidth = Common.Utils.innerWidth(), borders_width = (parseInt(this.$window.css('border-left-width')) + parseInt(this.$window.css('border-right-width'))); if (maxHeight}WphWx<%yk*j?ELW?^C3WBo0pEvC2ca z$39b=0R)*8W7R*?E|HOG-O`rT`a=Db@X{f1Fj1ot(sS^UIdd$VqxpD|uaO{sl&|lx zo#r!g=+P3?9z;u#f*|g=eRx$w>y3hf+znjZRSO#fiLlilt*x1(W`_fZSO}*1e(UT9 z%=4^L&y&pc!q`}nD}ub~PcGjedTEJ+d*u!_4g%*Io-E(R3n%E+{;<@U_1V!L@hOX2 zD@NakZ|M0o=^(JQic(gu|1r-U(I6Gj6}p86;y3d_)TRi&=tA*xm)pc1`OJ90z5a4P zoS;iLi1}CxY+)~fI#PI8R!GC)uPLLem(2zSn<*fGZF?Dk&{;ykvBPOkwv+>)5 zfg4{r!jc**0xw$-FVDPKgtI zF|ecPlusnf$dFk?}UKKt9R8%l^;NG&&(Z8$MG) ztXXf;UWn}m(H%Uys0behBGO-r1f2Mf@ogJ(Si6vSW-tD>mKSpU*X+J&JAk61>^-wq zV)2dw2p17_R#w5(whYK`W?2iWtk_E(e_NE_6yeXo0Au`9NB${q4m`$6by^vSfBVmF z6Sr0h1|q>md=qMUf%JCAn(MMNa_}8+E=D5@F#+jjj$)wF3*2X8`Gf`6^Q;+ zx_>>(^3C2r=y>yg&G<03)OSJ}@D zWj(}^{WOE9%K016VYXDK?JJU>k6ob#HJz3@o%cPqRKx~Ql{uOoF{Xac7)VKCP-qoI zY$mP)>K+JX-~t_Y6uDu=_dx|1(1%-y+swvq&EWdW?l$a_)W2;rK%;kGN{-n|2yDA? zer<3-RS7Ns6!zg;=m^em^ikAB!quB0E<%zh3$BbPOz%o6q+yS#N$hxl#x zby!{+BwRHLk+zfL?t5D4g^etRw=&1!YxW&qae9(Xz?N(m;)V4`%~u*zNkrgl@!ctC;j(Lq!%xjm zZO?JB#{^#xDQ0nhLH1k)Uie>-oHWIWSMU60DE_*gE}ms}8<@dzSKK|*G(hj`o)DFN zhU_j>t|KV5*a@G*JT5(l?E^2>ank27oM(xE6u>bEy=vE4@$6kpL5XgWbTazr>2fCp zmQH3U4$U8f8;^}Gh@%0+8~i5*L+}~Z1UxqvXdpC6_oIGctQSl(3 zbW`fbE|4sHzcMr!(k#HQ0v$^udB31eo8{XBiWz~&j6)^mJ%lEA3O?bBJHAXztxB}I z$AyUmW;t9sPY*psLV985AE^+UX_n76GzvmbWo5`KPFmGH?oGNu<_MeEeE5;xD!fc9 z;~auBVJ8XpU)(5=?Vv#@cD$)Emn+DK1~PZN_0GEV>hc4uvfz3b!Iv5}-buHDUc%-( zqW%-RjU%hP{u8-+@T(*AeocEGH)m#M&JfQM$g{~=KihvcW2~Pimfi|mLlBbyhW6D9 zymjy~3Rp;@b@0lib#M~V7v$x5@TChq_=ja&sEj4<%rh}IRy8PXZEbZWF73Zii&X?c zd;_oE+y`AurN!I_BfSl)rf`JshR#Zbgx=1{N=1fV9d9xr>3~TJr`v4F3)DTg+46Bg zk!!#2@pXZy%A}aptc}rx`+j4U78TB7JKVkFpvmVoUCv*;f0UZZ%j%zK0{)K*e$jlVx(FYj3|Lt0p@-m{$ zU_dFsi?tQl{#BcCc}uG2jtuk-9&PQ~(Y(8b%h4IuDaSG8S9mr^1{Y@18m1X0fJr)tg87u6~KN4T&YUo>EQK9^& zPx>v+czOA8z=Rf9yXplmq;L|VlFbGP^s`S88ho?m$*556MoI%OW$-+^WD+WP%fHp}FE@TIzqHLHSiN>EpV^H#8>A8RYm)9~&2Of&@AuckF`WzmKAr81{=WIkE+ z;o*4*ni$G3VoW@g3~qhkA&Mm8U#eh;p6EWQ5JrGPL*(}p9F$#ohr<02XRT?TGTMNg z#@*^_c}rAyVHve*(W2_nJ}gM#$mn7-_+be8s{H<{aPI_X1rKe4 z(2+`uvWT3gG*HQ$ckD=WT6}RI#YOG?L-^gzHb;~jF_LHhkfaGu+%flV5m`IYI92Ti zDmf9%qFyIXigz9N596vuvJW11K(*Xz)i7v=I2cgn^^oKiF`D9jIOu@@3k=vhe!y}9 zx}zwd)vxl5z(n0wD(+rJY~P2a>P-Hv47mJKNP=ctp`CnxnX3S7q_ z1w?C6f~ki3yf+K%QJj(3&Oh~iE}23*F^F5k+i2g7B_S?0lWCStju}tg8pa0lXN^6J zy>WYf=#7HXhGsRt5UOjW(4z9hP=VE`I4&s%o$)>1^dV);iQ#d4iL^eH+LX|N%`*g3 zI5gWkX~^5)pcBK z?Ooz~I>>q7N5EA)7Ifca z5XJYf#-m`AFQ)zb0$$i5HR@OGoA(t91RxLM^69e$Y1*jLLk$nzjNcQZ1%> z%KxiDe{jusj(80C0|A3h(bb&xQ9BKF_i`^RY`n{()Ix}Kz&LQ7e^iXJ$D2>{)$zlS zWmAm1v2Mw=Z`VVRw(aW%U=fFez0+L!6TNlu+&53GuUxtPZ>I1yaVTeR@g6vT zZo|f*hEcMy%=i6Os^`VjlHY?Y_@38T&jPzJPlGa;k!DVPzjT9o^OKKaB|oygzr;+2 z3QgP8Y0t<&ZxF`GBOaY2k_fC&rG~z7?P`UUM+#Q}BuC$nfcvLuv9a&)6IGp_-R#aO?5RyiJO&?t-Bf`8DUb@jzC;38jo zSh>%ohVeT#V686%Sbdsf$Vl`tm<;%N^#k|eHC{-trk1id0nO--#YkPH%y!T(On?8a*sF4yYLAN|4f1Y zDHLxbaQ5)<$O!a6ZeIIBGOWD@0+QRb^9=(D`-P8L` zosxwHA-7+1kKpZT8`%qJBH#{uiS}nlhh`MLY;E==?6vrwivc!L%f=06$GM%u= zu=iCVil#D5Xa7eK)!tf{A|q=}okUtUgO zmZf+1KmkI}6YJx*yhPBF3bP<}VE3_^0pXtONSB~5pWQo|2oP_&VpQ!$7tMF;gbv3> zwxBvMsdaU@p05UP(8BFEbXv`jfc?yw*+d=sK}D5BJ36gLGP=zWdbiU@iO%f$j;9DF zNM0?YX+5Ow1i{2GI;DO+#ye)1aO))CNX_uUO&8KTY8372diH`_Cwn+ulEa?n$%K|6 zfx%ZiVSi7k|1CBGBJ95c4&=;-wUf!o$&F@i8J1TO>{HXzJ32?xGGF4}31Ukpc52uR z7u{JV-P(jnS8bRwQgijk1VYe2SOQ=1FMEVppw7G#*=qG{thJa5>(lzhxapX3r78X% z>8gTRi~YK{>Vrfttk19!Db!Ao&B!monKN)u%U*Kp#6txOnQn)|{r+_*8I;1|@)KA-5lc-JGN+8~#T)AQry(P& zMl}$ux}8`Nm8tne5`I{c@w~y*8DJ30LCpg;-#15s;mmv1u#r_j!TgjrvzAXj@m^b9 z-BCV1rBc0^%G2+XkAFgRSP<<6)^qQEO*ky>eexJHib@IC#rUh>SAT;5{*E8~d!P$? zSm;m#Byfw5`wCwd`Mdl3`T6O}!MPG4cVh>y!Ysmj4fBcjvfnv5*^Q;r_Ae?wb?cVhXa&kS8Uf2!hz#^kPLff~uf{ zj0w)>D~XXJ&|5qo5UkLiEMD{xAJ{g^v)AlT%2z&xcp^GUC)3AG)u)5L?h?nl4Q-uB9;!; zdj&)(jESe-&~|k#^Xh`0YPD@1w&Gil?J4^yv`OzAlOrEkJ)ZtZifjvrX>6;Rk5$71+5uP+a{Vm@PJe#PEStYj-zU?NK}GWhD&S#v&!x zMO~dA2x$GZW1VL;Qr!P=`HCYdF0mL6J%FD3R_vZK?@*|`-?^&hYk&ceju3wE@6`W?-@dw@&=i)NL-9;Iy<VA6_46xuin{u?Y&bRMEuSS9>XdeSl{`y23-?4jC(IxLzK?L`O|XL_7x!1 zPx9foDJ8nN7jhU})MHmCy-JW^9ktEoFz%K;77*1=l3-29dc^LrRufjM^x?{;n5pUJ z5`9FdgFBXiY7k5+t%@hP$#!Nrdd!zMByZ2uNFb?8B&7dN=d-A^tu4WY9*PW)hIAvC z@eM>{*+mOyGbW@JIoyENn9~(bmF7( ze@UGF1!VmVN0gNZr&Hb5J&Zu%U=rcJFV-oCuUsz<(<2tba9!vBu`HxY*E=s6@I!#= zhvy2S#XTxT!Yka_D$=4)Z}0>YCu-uI__R9hUXX79Db+1sb8y|=B5v*0^{$P$BZ}=u z565Yh^a4%E`kWw*eS

PiW6=2x(Ph%oD!^qiGTtY_ZQ(KX)!%^ZC|QxPM6GbXo}8 zS%k&_p;m?38t2cD@gFhZ`3#$z{;33j;9{gQdGanW4L2^S&@I9!Fknk=awW`k=|09BHywbDr8;k?L7?*p>$#qDx28Yxcj z!g|G58uJ_oiYeB?Uc5JB3aH}rKIhoWzKPz+YkAlV@w$45)N84M`y7(&ALivriu!YY zhY;uYy|Lc(j06IfPeqCwj`8)%zuCzuW#=QmAnSA9E=Ykau$A0Mp+amv%a3?kKwaAj zD^XfDMTl24{|xB=;lKYV82k&n1yC`Zh?L5XFJ4yfN@Ro*(Eehp!q6JPv8VX_jA=T! zj}Tv)DYk;AW2(7#BhSe^&YVD_NJv@03-|OBT~pF!QZ~bSj;s z&}7YZMFOv=L+*$W@+DryXtQ@u>E(>&yIiC6FPzn^^@vzZ6(~{LVUX{2IuxzI2Hj zUV~^!PC1F(b-|WIzyeBru6H$R`nm$XKBZoIoL7EZat|DfX!rMZA34#z&%%IVK)zyr zt7Nuu*KfSsV&udyikV?><8=ciffOW`G^qVVcPFg}Qv~-E;jB4YnR4BFB@S-BVZFjc4P>t(gL4-jMayL{=6x>_YLissITw}~kVZuW&5$AJ z^wWu9Q#>nP7^dh&_pSx~2V^zsmb2{ENeHGoT^-}t(C@Li$t(rjV2lM(Ev06MEn&V0 z7%mRq^r(3-XDeQTKaDAJqqo&(kU7`o*oI${a5*dRK1Bw`jD6ZsAT-EVE+|u|K%i=!_&Fw=*PMu75w~~ ztL9f9!du)QGji2nVZW5i28bja)~%C99s+{MrZVE0uDysY0?JvLonnd#%8dv#bOTF? z>{0jB1GwS*jhFL)eET(~h=F&~X9^QF-gTX9yz51cb5PBf98N$pdvzGghSX zq*YK6r^kU%+0aZ%lX4or=MYdna*bp|lZQWPL$g9~B}H?j+`^F2sjkG7(W!!7mlFZN z7WaNq>RgD8cU|-8Yy_3fn}|otuG@{i0d(`{sL6ZrHo?6k|XZ)gYaWirfKiaa>+p2_(&!Y5_fe&Gn0$hAdb5ADTPQ=syOs zJm8LH3ZaiiGmDq}bbypFa9xKi_9;*2FqhN1tc(GsnuKzZ+CT9dw^U}7r2(eMU+?0o zvJ=BO&Ne_|>1rQNbQhcMSAaT|6rOLLU}~Ukf|%-0o>WFE`sW%8n8!aGt*Q6JP0=HhfRcSjU7!P(YuWe7 zt(5yq1r(a`Gio0B1j%8Iz$TPd-8W6bw$OU`L0_>M?o6B1@9oo?^E5@Hd7uU=tLc`< zk-9-ZCrnWHgcH_Po>!_f_eo&j3sKnz+-Fs|Mo>1@ZW z1l_#V{-E*on*#U@hv~yrGH8)HMq#@o-Cn=4zZ}kqoma_b7L)4qdAcBRU;t`JvlMD0 zv_}mpZ#+riJPRk#zqf5QqGz;l{Stnvr43lqfPtQNkGzTLB-K*LpZ;hd@D=*`&GP7F ziRThcy3I)b7HC|}E6w z69axJIPHIBZXL!r1D;h7u8e21helMsMmqeBCBGWpd|bm%q5{|@`o?FYW8_5! zo%A)v#@QRn+c!wsRkJOv(1KA1C~ChItiJz#ETa|BspUm6^0Cd}7oX$Fz@KHbh3QIhJ+2SW3d zqGyY$$fH*BGf!yMs%Q>j_6);K33aL=w?L?rXXfBlqt#fU{5)tcyeX>|YN{I3lb z8c>S^b-v{y(0S6{OkJl8kTih;xtE)6`<@`w6-5AORDU&P*+D1x%5xYk{qFyCUjIoq zBf02$iub;7V5(~;Nf~A+q#E%W^*gkgS=6+aOX8f@3ZkpxB_Dd+L&~UOnAuD}d>xDp z1hUSFlF&%^teE$_ly0O>-g_UwyiEMlkMF^B%J2+0Nms20`Q-Q$k!&2=9hidpTUTiU zRDSTuJr$@lsr!igoIg~*(cCBcQM$>JtQQp>$I(fxj zb*+e*2d1n>&Z%^2?{!?YA{pxZR8U#2Ff z+M>R3zfW$CunlqLN2ng$Fm+mIz4_+Mh|PNmM>`Ly{o;{sLzYiJYv(LXbL*r!ChpGU z)YLfBV$gFxiBzQi=7%$19-Zyg#WyV_V zlH0++I8@0PTsF-sEXO+St()1!%CZgJt*NL=C~pS|-%cO#@ya|dz3}L6?>h$Qbf8Yl z(o|+qqH1@<<~mY-J__RRw0KUtbwYe!j<_sItdhT*9U*yR_i?OKj&;yTOIzeSAP2#4 zHp!B^4-a1nAosV4-GCr#_SWU#RGyj5&4eCKWSMnK$0;h1Cub=l0DeDSn4>gB;$HAN zj_>y&kK6ftae`%tAXP<&JTY3r{^)|8H+V}*5}k-s!^F%-`=hvPZFjSm zM#HBtH5n`Lgq9~kdLgH*pyN&uNJN5!mlUCEt z=kGu9kAZGRFEqYhxy`?n=+Wm(P=#7dGj%!n%=-8V5eWg^;!kl-Gcdi>Kgb6wR9tm}MrrSLn2JH9kvVEwZclTm-Fza@ zlob}n9uHc$K%U>^D<3rl$NSYjJ9dQje%(g;FqyykUYKC20UN>{o9|(3;K0J5bXFyq zT?`V6-P>7jW{ep!Q9ewK*?V>cEL9Pv^Cv5;BDn0P-UJ3E-4zP&377dBZ_QVs-3&U* z@Uf=xy%S%a>CdVtxI)>)-5A}&J8Ey=rmHeP=#82q_dK;_YDmWaPP$q>?Dfs5;3~?z zZ90Dsu&H48EJuhT{HdZx9P+`%rDbFdDUJMn`F4QAv?YO_UTX^2kI#6Q@#b@Qdxy_7 z)zBsoKNBJcy49yhHLN>s1K&|lj{@j!D7sDF)r|^WNP|?h>bU*c=YjejL6jF38b4z| z&S{5cL+0fxnzDB`wd3CV^!{o3GqIi?MF6+ah5c-O-EF{fD#L8XY=B0XF2c!$S&NQa8 z8_;#RI+h-7D?y%%!SxaiMp_j;hFltE3y}y!^6n0l#brBk}>CM`NWLsKJPCeqmOWEadeXhn@rFm@zC^Le`ciX9Hy$dNLiN5)XN>Or( z5OHSH!nghqD#vE%)SFY){Zs0*kHxL!S$1{Cs?}5YWukXxGO>H6>Xu4OE+PJHT&E2; zJa))D;u5X5nSG@VMDAWPzMBLWBLY3SidcYQy%Rqwc)=;XJB zaO{h4>?hw@Z4W#4J!2|d3r;++O`D?X9Jg7N4Mi+ZyAR{K(h+ThFt(Aq-MxAq3zn%A z{%AutSLN<(>rq4QANTC8Z8z1u(x+zu2UoIl8Fk+5>1@~q1=%Tl^DckpOR2h43+vqL zO2E#sovQcm+c;d?zSlW%*HMz;d5Mt3=p5sH)kLc5le==7!zFHSOmlubQstvsain6= zU`{i1v9Ab%P3wJIZjx2UI$BB$qW3vN^IwB2hlO|wurKWDETE8GJMQHyU4##||HKBu z`J`=4n*+doof9PTFE>e5pzo1z!63doq(3cGbf_6cRXAixiMi6K=)M5F|e0uy-vu88$QHK3nLPn!COKhSq3n5aip43ci%} zl|AruXovV%a_;(7$(MVKY=%=kdMj(=-5(Bbp0;iWFJM21Z<3kbKMn((LmNNd-Y0aT z-Vr}ORjc_a+r$O9K5?d|W;Bjp6bjaV{0iGgiw?bySJ- z=K>Q$Y)gcIIam4F_{`fU^Y|XfsWekW1MfjL1%KPM`WWh^4WZ~mB`46gzRP$wYB#*I z#!SQB7SJ|@8M2s-euwya;<1?91}Qlwxz~e)P0`=)=+f72*d_WG6EIxTzlB*B-LuvlM3XEs!s1H?%Y2e_G+^t@>44Kr~6 z&5i#HU_;Aq_Jjg;j!$pw-Q3(n+a0SJC8^a9@OveEj+Mf?{YRV753T@~c8B9}FqbPP#?PbI`@vb)Xrpf?wljf7~;c`aJ zqv>d{64XpR)}Zc`Idxv@Jld)Xhzk`xzJH5CT!!2}Hs3!qyADtU;D_qFa}PWDX$j09 z35=dJllPd40h9WFM@%qXA#dAWrq)S8uK-tyMKSJ4!(1k?r;SXY1k22FnT0^Q$ULhLA! z!`ap3?rS@eNs1H__!>oo0Yb9Nlr(vAD!{`aiTujBY2tOTKneK!6G0^2NiKNPqa@)2%Sr_8jnmhhKV=dQqH4{s5|p zb(F*8AAuTvct3_dV-Y9;yJ6K)425R!aRFnTUxbK;?9+CjGW>^%vakWVc?XXL58w%R zSaw+EKJw*T1yj&DW!2+eoMz=B)iGtb{EI-O{y#^ok<6Z}L8(=VZ}Ks-+#dila!pA) zGr8j!Lb+)#$TFb-9r>b&{p(QxU-p7T^BaxkzaPQ70bH=bj+d{YAAIHiZ3tR)!BP9% zfRvKI9simf-$kkXy;2-NHgHPgxeV|=FDMLu>{T2q;JD;3md~$20L6E_ID~@lomDX6 zLdFPU+F)(=GQ=x3+J7d#e=}vWl3MJ&H-V}<2P&AyQbS+b@|TRPHIkJ`A5aqe99qs- z-*8IZ|LoWSu)0v;A!Y*l7etJ?)2!l*5D1^vJA9V$acwxjN+ng4p~hO`U@bdr0dsM& zV82W8s}4i7n9)jyK0t7Y!Dp%GjIM}?2^KesAr>6|PnE;pi(<08j{{5%AKuMXW-lY2v2Rc&p=jz_bBUhCw(Y8134sy=0kqYS!O{2Bm<$&UMy!7K}NdPue4%&ywhtLIA^G;I+*aZ3tbYD4E2MiRCiCM&w z!Mb}(noy!KSw4}NdC)Pw%Am5YrxenF;#rR1Mi;f*r*^Yh<|m$#$ZVUNk`ZVn&?9Ay z+Iq$ZupqP@2!3}M02JxeVWdb-Xvz2w6Xo&vO(hS@G+Yb0{ag-@<~pn`6sy9(d~EWo z_7(+li#Jsg7@Yc9>g<<@E?|az6@5SaBMB}NwdrTPJsEp&k&beQP>?o-<=cwUb6r!Zja#&VYXLY-1*u;6)N8}c)U zo80ehAKbQek@R?QKc4!ds44^B6qyROk*hK zh1R>SakYskeJcDAx$|T6#;>pJ4E!5%yxuPP1%EX#pqS4e(%&=7hkR%5n3DbMeWBuw zd&9Gfb-Q2gGEOZZWKWuDKPv;)=kLq(8$_-p4Qx^t+7b;)RN9bf7_i8acW(f+la9q5Evq=HJMl)nni$(2yB)ln{I`ho}k1|AVe@9hH9ynQ=T)6)3 z{-eYjlCRL-Bjxse;y~47A;=bAWrnAAerEG4^}))9Xw<5>u6O*|2=2FubIwJzF4OC~xB^oU};tJlyjzQsVXPh$yjuDBnqqR;S_ zJ5zC=8hPpZ^JQZ*_Vmk+Rx1$*)55P+Aoj#eo6-~&4z5mOmZl6eK1c>+l&=hrQP+}p zP=bB~_11MRSfMpTbDQ1P!hQZ&`~BB~sJ=D-LZntNnF@)eO;0trTw^6#lVkoj(|a(#{COPrIZ zr0l*k8NVnGLL}<4v6J>wD+~)XsuW~ov!n-g5Q3KLNTw3T1Q-c8#9%Eudzb3&-&$`_ zHBO?6+{R~T@_`XCx40fGsj3twbAE|w?~uBSCw~2KL9?L6mWF>@@bgJQR%KAN{YN*- z3L!j^NC?nh(1@|@1G)`>dKa)gIvy+V3)MZYDIgEE_xsBgh5^eI9?Lrp3n5!4Kk6hA8f5kY7~rhe4;QmRq}z zolbe!3|rb5k*{pX{jVZ}^SZajy(%ximq9)N1#%4oguhAZF&5V z@;1KkRNMZcZ9;%%@2n9UV9N)Y>y^OsR?tAlp1ey1e=>~L<1TzsMvsk$cVYm3($O@K zS6MH2>2>e^>5;yLzJE(nQ_uJ$Xi;{~TlK=pGS2&4dEJc||G~sYU5O5mNK)DT2AYR9 zZ#g=h5`$XRwFdV$$uB6$42)|C%1TzL@hONXQqjYDPL~aFmYWrJ*_YbApe`%y(lN68 zJeeK>Jk{q5Zu=Xj3KvN=U%(;pwtZB{;%4Yu^9Yc9IT*aUtepM$%>{y1PoT=Te+3UB zEASb&PEOBe_$)p>?B~=Q8UUCx0SCQB8u234*AWhDk^v%%Pi^{s z2WU~b?BmU}u(z$mRNIO7-_T{*OIA5-6xy<&NJY->yg&L>eA4e$)!jB+ZUhi!q>m@! zBHfWBPDWimEPYC^iHA;0uA;mhoJc*`&7Y{+r~;H}UYoLXMf0`?KUf}17aL9(8ma_> zkN6qm`x3@C=dN|F?fX7>;WkWs#7FUW9>;#Csb!h|I73LQ)9$>iENqn=}7LVP2QeP*< zJ0LHA?%Zg8;3?omOsYsU5PfwdP;H6TMv@!IE3bc>uV<62cPG_2c@t*AM51K$X0L=vRK<; zAuDsr+z%RdY6C$)^VQ#3b%5os<`wB)mth2#pKts<)rHco~R8%hthxAvU$nTLgAU*-0g9>BNTnYg?q&}A5AKnp*Lf?YU zs=Ppn{xpLYDOWN#y$08<%>$dl3udO`#r#bPrX909&u*l)&y2he+VCfrOhqd~$?gt3 zxw6B)F9yw5S@jhFkWgV(u}pC9t+icZK3Q}=s3D&FP|lsS*XLe*rlvp=*dgZo2{f9u z$#9@G0&D@*V~{kcf%H>0?ZiuRh>Wb`!lT?~0??*yozFo|W?c*SKjRGcrl@OJO0smR zC3|MG9H;K-(yKK?nvKyv6Tupv+}|6=u6QPQ3x%F4!!(ix-Fm1BuI7B7PjG4i%Ew;N zLHzrjzS3)NyX!K^C3U2WRvQ(M-kdBm5CQPQ&;2y^HaJ_3$;q9@u(5YGp9PL*CUk$4 z8^LXRZ`LdY9B+m~+^H03gYtK-nY!3y84XXb`>g`KZ+Sa>rc@3NFw6XKb_vXa657)_ z)+su1ut;*IWeQ^g#*EcinH-yD7BSL`2>T@w;hlw}V~Nt%S3O*PD$0i{EoLV6q67@9 zy+8eQE1?gYVLlPIp1BUat0es8cy6Nx^gU zQ@f7^oA1P9nwxd+O=GdJXv$;SwF-RfQM1p(b#thQ$~Z{WE{5K(D$@ib@-~|MS5w|! z_`ZLVGhVuNNUJ+KINUW&qfhesBKJo{pI%NN0-Vc!n=(FA!^5-lJFwqhg9TOYX`WO7 zITm`XoPVNdFWS^kCl)xgmT1a?V#w+OEX}d8$aF&D9iXO!K6w$S<5Wj?jh}iJ1Ze8> zECquobtA3E#6%bLduSx>?U!_s>=1wUr<379`~{K3@|d=K>5)owY# zN(A;^&S5&MMH3M-AU?y3p5yrR+G*JB*5tbV$xMv1NJ? z<4!{!WdG3nR($U}Uf7SldD1AXVzQk3n;BJ078q5WwybM8WW+Q@-IbLOx%oL*fZeFF zyWm`A=B~HdB!2^ClTFtQrn}!!hLJ&%?bRCO=z(%

?2%dwu4c8KB|st`1y|KvLvk zAoT6C%~1vNGoGgQ&CTz4y1vF6As%)byhAVNVJ(e?kbR?f5SGsnQj_T;irS>Y*=^Pz z8Os$B^%=244?6tXU$5Y4tl4D5xSt-r8#H={UsaUj^9}C==~Z>2_kRA)-W=as@yu8n z&S~e@({`Z&i_D4T?*nZU{nUt>Y!2?rd>LduOr`ed9daucgbOz{bi_;4#8db6M|PKZ z7?>BonbECSH6U(E#%|v@-AYO^wP5g1BC>pqHn(Txwn;pF1(A1D-hOeCwAmC*WrM>4 zI()+QR#m~(JV-2gmKRCTdv`dM>wyDl)FK0K>Wm?l+XFRPW$A&BJgke{ycN@Q<`A^^ zR0GELj#Y#du{g0$O=GeOUhJ{&BhGMQIw3hZe;*X>{We~rQ#HG?{D!Ayos|H)j>0#p zSRPVnwGB(K)W+wT_f3>}Yf4bm!>`#1Glb=nZc%hn?F7&*Z4<5$x72G$V&wA6L#8Rt@SF=qbW&|*gLa8MS zdxC?333Me#F{DM(nZ$O^XzR=C-NMuJb-xkQ1WfXbnIK#1iL=;4-K&~w11F?}f(y94 zQBLdZIST6{<)0=z!tIgoT00Ly28Eq3O>UgcVk>yK^n%lG&; zWKdGZ(!JwxVbpf2Y*Js=@rWr-eOW~AA{6oXCgSH45;*lY8$gMK8pWlUV40yo=H#MD z`(Zb>$w*YikF-ciFC^Se_Vj%aAXf5_m z8u+Yr@-<`ro|BX7fKQtjHZ(q37}1>Q|I%X8Qv_LNWc^-qnWpK-y9*07$ljz_DJ33< zAJ+NkWPBi&sEf2u<)tlF-XpP1uU4piuQgsFKLZzN4P~nNYQMSv+#eu7RgHb$1F%K+ z=SO`yW&k}-y2jpz56TVL+U~pr1(qnhc;HQuk~lX4Fr`*}FnjPY&cz#$YX54DhjmzH zQ%MeaCV$}Tas!wdgC^T6Vo~M^UBT?DXRqq`27xx38X#vLEhSsP>0OZ!@Y}t$>}}-> zJUWhR+RS`BCI1HPujl>RfgUW%?Pt z%1VvqWCzT`od%NbepSBi3V@YKUOwrA$(`?Gh7-jR($PzAfD7bkp2H$X?v*EE7#T1R zvdYOX-ZB9ZasDEnK>s5*PmA&Q*cHIK>wzpE$mD?z{3O!iL_HXUsmUe#;6WC5$AZ<3 zETf@!eUtzZQvVWg#ozxS$Fqar;d!37a6(eWn?Qt|`{=V}hp|F6B}4R|5Th2m(X+(- ztu`Qp7gm}Eu>FN~;5H)9Va8JHK#M=?#hVy_G>nmx0ZS`F@bAcEF0a&)wlKT85@flvLRf$UBBUEcoPC|# z`%8;uru%c)s{@c z3E$;(Jw*o+USt=Baai;YmHJxnwbeCamHJIrhBZ>Da?cj>J_`YbZD|diHrFjb({xEX z|2~nG9bGgp2B3vMRa<$BR9De|1f^Qy*#iT|f|F5hrdvzA*Wb=MT|L`LUynl^g`SW) z{G{&X0ykZxz02irM&U6O|K85TByRpwMc0A4HUd}Ji6^|mV`gy#y=5CSv3v8)q2xt# zLVbg@uFd%khnN$iS-1m*@trl?`{JOD@&g-2s`i+K^ZCSwt4dHF%1c`(lM#Biuptw2 z$taIJOtB!U@LJG0XqJd>26M!ZM2;L(?;9vLfL#%@q(I0Cb&V(9rrlzBS`QG6G(Ivw ze?Db?=KZBM(@n@TtjDZN(^WWO%R9keZ(F?6mdyv+-qoM5jdYAt&#}eo8>`$DX>Yle z%zkMTym#LMTBWcbNJ15~CyOMTR>1DmbUAWme$aV0`)d!O@5FmO*mc z+g9b)%%><7az1S+xrX6Si;&I4^K%FAw4BvPbq{LgW=K`{4eP{O+-W^!9DL=(X5*7p zO?~BSsBUSx>2A!2HJY!Y505!Yt7s31LQg8f-8U@ROb(*<9gfN?tC-^=L>3zdYVivK+nPR`G-PUNxOfY!b+3B1-DysG-j^7GXs;(OZB0hJ0ohdfLH2D7D zPU@zng?W#AtQR&_6w=nKYo%E-gx_FtI~LBO{(~m_QB8*>K01=@WqYDg zXKJAUG$8Weq_~cLW4@!N2HGn!l4T@$mju5>`p z?f(^0zr#Q$Ny=Lm&z4UXnc($JvW?N+ELAu#mHa7c_bcD@K`co6w9jW5KrAKG z{9|F^L`e{va1SySADn`$+wZkq`r?E@fAPL6`yQPhXbV45kx1_|L+|Y_9e&eY#h{nI zL9h3mrD|8k#S&nPUYb-ABbUw7CmR4uG_&~j_OY%WCp={~q=>BE@;h*= zOO+q_`)pxiY+DHkCj755$)GFgUA=eYwV-F86v74nX-&K}#-@*IaSQ}NohBVcqQ+?u zfk!-4W4Cj%-^Q=fj;xUg5Rq*QVnl(wooLiO@^-; zGx1_;m8AvoT;AMf-BX)a)BbMb0$A65rx)l21I=Hc{d?aIe}wbsKkT8TT}h0~s8iTh zS;7Ggo5NX^k-0oI-nnr+t0UDn-?35e*3u!*Dw&TaI+Do-T!3%QKdvVKDwgL`zAs2C zl84DU{qn;ni3MDY3htA?pNtr{QiLs+4YF3XP7{DzP>#Z}Y7#sG`KGS;IhY;R4t26} z{-abEt8E4}O#?!$0+U>(>RhV!=;aApa9|fhSMi&1$)l<-xt(j3Z|g3|MK=80aZCZ^ z!!+r~8eez$G3@d12!5kj71zE|5o(@mFgX#NF+=0nai*=vU($l=TFDAtv6g)>ATV-q z{}WUS$Mi`BYaYQ)Gz@uOwM_tB5F|GuF(lB53<+cpG^Ne+FPfLDsz%-=c=}&njJOYp zBzgqy{suUxmNIc^?FZ0N9tK;zvSGHVqYAyU0dn`!fc+z7B^ULv-LT$k30RS``twH3 z%m&)31I(T5!vk9PA!7z6SYvyA%x1m_Fe+)H=fu`PSC3%qN%4tJwAUu}Bbav!GI1G< z8%DI#7|Q!Q!HZma-WQ~62Z8;@o)2Mz$BiSRwmJOX9;+vW47!7DTn4$vkJ0Zb89}KR z#%zI7oHNJmN(;%OUm??jZ98kf`>f%$sZ2Dl_M)e=sx+;?I&;Guk1sGSTEs7f03e6# z2M^ciD{I=TNg3knvy=w=Zfu&-VtC)@85^V!Y+U%7@odq@9i4noHh+=JKYdjqF#`no zW(NkE*a9XwJAJ5gw1G5~9zzfYQzk@X|8!xN7Uq(`J_gJ)(JIF=m^@}KIbd+MjS2== z`|jXEq^yyc$dESBW?Z_`PCuPaH~kK-F}Bo0XP8F`Z$BY#q!^fzh7wj+6=om};I7EyJLO}92m+W$zcGjz zIf*%51N5zUB~!126b>5ZX&Xw_Dj^s)!-R5f;vNm7h}=03XLR>mXA;d&nukfh47cei zA8}py<0>YDUNPm&fv3CV^)O?ve5+!oMJcGiY1K4s(srQy2OO!aaUjVO698dm(&k+Q zXrajXoO?Dz9U==JYNg9d-p#ZYYJ~Y*r`Tt0Ld)4xI21Pbqm)P&~Q)&aWD0Oe85fdJ3-kJsPywaa-1pB;WbGc;p-U$D~9 zz0!rI$Puh-s5VEQ1pd7dirM*EyWFkDUy=&3AhDX+9`AqudDqxUA-IM@kJHV%uAM|a z1|RY<{!Lw?WA0N#xt7`~oFP(#t?H(kphQ^m=Jk2K?j|4Z_p4-Q9ii209(W3n-21&s zD%~`ET}~Px+=dIiyz&ndo-^dNx9nLaQLbVQ&~*rwV$0Yb8^@WEA3qt5d?;c_#iYMk zYw;@1UR+$z#A2nB7Zt4hnSxhid6012vyuMZWyiaa3?dX+AMzRQ_x|b7^#|2dq)(Dx zsgA8JZJHF#H*Wq$J%jg%@vD|}px+sOw&FtY=yqoI&h*&FVyJ&`GBGIpJH;_L_6r{i zkk#f}Bl$uX{mO3ck~Ba*MOYhBR%i3ElWLi4KXMx_zT-el1~iQKi4HK1qE30323{>< zC5Eq|=MXhEbMoeB_(1l!^8mmfbpoOFRbpJb`Q_CNa?vscXQ)L_>*J}D5CEm(&Go=n7i=>l!WTcvHUsiQyoA+&+teX#(*ta&J3mL50R zrMvFSiI2T-yZvX+-M+OG7KFI&RS-PQv4P(N5GjWu>)-iZdbnH3IYxNyF7{(gt@bz8 zGaaQSSM`{MZClJe}yuWzA$d&B{e zP5imn$AXxAlQRHXNO&!x!cP-tr*Cf(D0|Of8i^anD`o5duz&4xu(5?x+cTV zLIR$R_SZ7437Z1g2u#3zZ_Gzrm_K*);s*C0a3!GCv!-?yCzLG4g#fV9Y#PZg>G{IW zyp1ytNCvMsfBa*>mwX3gY_-HkjQ?VC{b%$B;`d)Itp8%ubk8HZr^Nk5bHjajZ<@Ku zlRmxvWGFEO^di?c0nqZ-%C@>&4J)_PSEFn2yI{HZ2B~gr6q^NAt)p z;!>gxxtr1#ir51gX>7A5)vI2q0m|s#s9c|(z*C5H`t@l=-CEfoY0Ka8G1t>X0(wwg zPv%;>ZfWU|xO5QcZw+OL`mxE24*+dVh_EHbF|-)jbh$t$t9A%sf|yT1LF+xE<(LZ# zs1+}8;3U0V_RFLoIH$J}9uIYUbeiePKt&~j7RJKRm(a3%UnTEY244`n(%y}da;=Se zGisfuPT43Dw(!}zBCd6ktR*qmy|0fZupnbZ?Tj&|s6M)@WRS;0?D!DX=}#cAz|}qo zymj;mwEnmk7od)UF7%SrlvDdJhT|!#)z3NbsSuBi(P2298w+L*EnS?BLXlamJKbQX z?f_P@3WEJ4%Oco3xXfr!u^Q+Kxhywkso=gfe(cT`6ptv%{;?4Ubp(ju{>oapX<{tH z#x*ZTeALU2tnVGL;21|;-k*z&bC%~W*0LGhVCVGvkHpDdl|amO+U7cIyBwXClNJxPizq}?gkSc`6_}hErhP9; z`cPEMiHVyP)`?3*$&iOldC%`!(wb4DGAhws%~Z#LC`ev-k#XgD-HQM@;z9{Xm+UH4 zgYOvgibP)>P9!=uz4y8?NgU0gG}@t0bQGn%^d*crKb+XP@nEj6Fj}E%{BqAkw}ugd z$vk%`r^%mB>pAm^6BR3P-!0zR2HO@R4KfzUE&KA;o{2ZKcYgw6PG6`vZD9OJ`jg`y zA7#rDYGxTbW1{6@OAJDp?__<%dEY^^2ZaaSq^hY;{f1ESj`S;js5O1+rFK`p%<}S_ z$FnJA5K+I1^e0_#Wn`G-R*94NHQO7d?&$>3zTE29b+-C&iHxBP#y4xfU*LDetE;*v zNzPIdiZgG_Jf>mv`H4Epgy=*(75Px~$%*UFEo0yAn@7mt%-fmENuSeOIG0P zl7T+hBwb^nQ!qK67SFQH{S0043?{+<)Mz*&jf@J&?qc#sKs+ zjG-bS_mS;7-r64eHTUxK0#YC;Pa@Rb@7(S}Lmyxk5dQDxD5c@Q6H9p=Bm`t)*`5D! zR_!?Z0$!-B__i(nb+lyn?-?AtOf!193(Vk<%?@JJ|9b|n5Q_9%WdN`Q+QznpcT)y? zXfl6SV$#O8W0Mw|B#SqlIhB0ahqwRDjCf!RU5Mq*dG^c^uplk;jZ*mlp7`$U!rx}JOn zn;k~2cqN2ioP z=Z;3eXv`wb9Ux)ROS^ybD5~qtxr9f7wn1dp1V|s9luT5?R#*}6z#{qz?_k$|SAjx2 z$M8dB_KfW~M{9meO-6`C`{h6goy8ZMo8yt)j%}IedFYms?}Dh)N&j1@`~}c=XA6K* z*x+;DJ>mF1X1+JjqQ9I+In&F%uk>3@KSCU;QPmQU{Dlj|){r0%(sx(-=b`g|H?OT>w8swzII17jcrWwrJ(02f?} zBqf6Mu7q_V%-9<5npK|=_iz)oFuN)4Tnb~RX&-wJ4Vc}}bF>*RkAp*@+H{5(L9J}r z6XC05wBFh{KDy-+`fY5QBsaXUcE!3JwPQz~UwTPtR@Wm8n#y&IB5AAjkNJUsYN+6D zYefNnkB*fnlwo!bvgAuD2)!f+UB4Wen`aOl@=My+Afy+JJVHyzHa~7Hbj}Hz^2RzUH`6}nLCRF3v!jAbP0luv9zCwng zN#RqhBtEsUt)kq_%{gDdX=A1mte{vH8HgN8w*{BN9P0N)l2-?u@94-agMH-FB6LGN zK6()yh^Rgp_W0DB@lhsA!)}tTh9bP@hcX(>Tasu`{=3Z2CLPV8yqFMq$$Hhd zyIzSN{xT&dUS3XpcMKw3RlFFu;Rto^oFDH~xaH!^hnPFw8=PU`<4Wzn3Rzunj|otB zL#?l`m!ivYb6GF1SRRyr%Uu_ytc?E{iiXJt(L1~l3uU%Z_FSS zob7{)&ozB|7HF*DP!L=UOd((Kw52A6H24JNNM&+Waj>m^?Kf~9{Ds_m2UZ%8rz^je zEco>5j@n4rnmJH_UD)f*I3?N&bR|`85KM7yIRHUDV&;03rer2W7=(vrsc$9vgu%O$ z(!Mh@@6yH3D(fyP2}-IB0WIdAL>;dvT;%QOBNb z2KlYgWgWAhc*`)IacLALE5!xt_OdwSB5N;1^SRV0F!?l}sVoUnroQml=(U1*54J7H z9GC02^GzmGW%RgV!Gx40S+nkvKb9OZ4gQ?lXi;jh%PC+H8#!}VE5)?2ed}1+=mg<> zL26fX=0~DTlczW@nl#IS-}(9ZboTNV$A+F;G~4h^@al)q_7g2a@ld$N?FK@jodF@n za&4pV$7eEnbvV2GoW#PretFA(E0Bqb8fO%*Z#ZoL!Ie0#vrd;zB(Bo3{GbHW@{tK+ z$YcFO?MSKc{yWDt^;>e5?3y{5Prez+*3Y|X71Ga4U4=|ta!VPL&XW@e+Ir(64W*A! zXPjLef|X&i-F8cSn$)w+U4WCPTT=f~>I*zZ>w{u96Bb`(BMli&!nZY^E3M4S-$?r6 z=>8bW!KJ+n(*ac;`Ntb{6wgo@-{pXWG!rvn1_T1<^teOrYgUK-XJCbWQGGq*uYX*aL#GxyCK&#= zS&BIn4X<29H@WBJJ77-z^}PN6 z_}ql4V?@ISkkq#GY5x8yEZOzQ17HNVoS&I1+ceN2#Mv5s)NW}eZ>tsOl38c@JoB@Z zq)xh1t+$G1Lt;x6%M8K?$Qx%~HLItxxl??PERTF)SiXE#+v1WI{z&Z2fS>#RQ`dI? zGs^iZ5t-cSZLKodvq|W>J1i)c&m@;-hsr#7dMO45j@|aGGPxeDI-A((RNl7StGj8Y z5c_$M5VJ8^4y{Fg;ys(#>OB6QM^hPKx_|pyRBOK3v!P$KsZd<967t2;ll*FnLD)Hf zU8Q_sVey$MMFzXi^$fi}M6pR!U&Bei1|o{-rA0HyRI^hAHKRGJq=X}8&n8sA|LSX6 zxGa%fqpKV%&GW^p+j-@dsLoUvMcFI7cU61N#VC+6)yWhf-d-`5rLKWLXyLjB_PXET(5bX<^}@vTN+4B8 z%gB(3EaAGSo%aRRdh8pM)GTud_IV?9V6)dvi@;d>N;$I^f}Uy5cpytW*O8@~$5r*|C2dzy*RPD{R1!1on8lu_o!SenKXC z5m2YZ3cZMpZdKz}6Yv*;6C}+r;2o*SyO&^oxQqgZ$?wiO;-#}UNR^qlOQLu+ZyBFM zS{EGYcB1IgW4o(K+nJ-ZyQb)_vle^a%-vj;VXmuk9615!ktfnGedJg@<$EN?PCr-M z@;DLl{i-r_x%NOGLsCEHdoA)#9OelEQ;?=HV$sAL6QV;5_(o7Gl;$&5QIe{=F9T2R zl~G5ITe#dg0&?KDYt~0Ud%jfnVi3YLTKxP7wb;oRMNbm8Rm(Bg?Rnb;JNe1c+8d6< z7$z*^OrN_qV{X4WS`=?@OWApIv?@%!xlzR9NJS24E|3Y!(i4aX_n^@5FrL1Or%RDn z;?!-iq2v%DKt&DP$rLks2mKA!jXu&DFusjs?JWu2av#xmkLBtYXcnOZh@&s}^=Q4z z{HJlW`^!SZ+(+Iu_LjR3gGf<5pnY6UtC%Y-BpYv_d#(Od?)zkoB&H{6xc3Z6mn0u; zdff-h=wv=1EOEAJJ;rJA=Uko0{#{CY&P)5j09?pnfICOq`phwvKF|!NV$4{6qb3Ax z(5t#?GI9jgZ0IXR^$@&bLtIP6{;@5<>lcXi?^`FYwjRDZ`z{_sNS`+8zrdX{T7k#S z4h?ayh#jdrVvyl0pRxJZw^%!Iys_7 z#FedzL4oSwkBaGeS@Mi~mQv>K6$hf+d4gal-KZnM_>yWxlK{Xme*X5r`pJciqqWDN zwm-w05OlQ98njP5cnLIm&g#Y4amKsN2oZ6&_81E@SgUPE+5QlQ9w3Xarg6AbxTMM| zq!ku#h>#a@?P1aDy9&dc89+HTBu9*BJ))APDtOjuKEK9+{nK)=-x~y=oL!2(64*a0 zY*)ny@sYv)`)}R{)5QAQ5&%_yjuQKMQe{@vs&czph7tQyO zC2w{W*+b`JkxvgEOA#YR7=Sb8cq~%-;O2vT8y`<+wghAdwa`0Y={W+oZN*hh`Mb@H z33S&>b=0IK)*n4^y2Ku1{rwFE;u^iTr)vkNbGk+8_BKbEXZkDd=?bR1#vt6!j{(eu z@SoL6Pu4BT>c$&KR1#@eiqMC>PI{JA;qw*T$Hj{T?xG`9k@A;=6OJF4#F>Wm_)R?$ zzz0zKX5}ReSla4A9&~r-aO96}x&5kGRm`Q`bi9P5zs+E^5W4U$*Y`$H9{O@mW!|4h z-h?li_N;@2Jok6{!9p+r#H^1EHy}}Fw3qY=URjD$qJBQT%{dKW8I%sk$(`ZW4;D!i z73Q-Xa!m3#NN`jW%&7()10Cz#9uF(&QnGV4|GxLR}!;JKG>Ta=RVZTGx0MJvQM3Q_b zcRWJ8B#0*G<_!Ub%QeD&~}Yvvgt~px=WE*U-N}1;W9Tdr;xU#_@O)5g-j^!2X{EtiPK0hcOOe zKNZIMCRr+knt|mlzG9hWoUY{Qgt}X`-=6XauGtUvLxhNBzFQ}#d{`qjJiPWJRXpe5 zyhNKUhgV_!Ne4rY(AsyrwXNW+(^#J&nR4Fig&;6^UdH>6R#@41_*KSY&+Bi}=PRU! zN7tDybl1bOPtaNf$Mg@z2{%_zt8c}k%0G#nKVxif&WF%FYsrQm)P(5YQK@9ZhdAd$ zlpDR2Azle&jlwS@?BG3EyQC#FupX>_36-SkHU`zOIXnWv*?Ns)>X%sAOanP&XF9We zXyWmbGf>-9t9HDzlEpIJ!COa$7i=L$kk)y#5vu$Jm215N{8LzN%U5Nayu2e# zdM+5IYHy`95w9&80wr$f`aY1?k=}f6oKJ_`jk8{(8>*d&U+c}@z4*W(6zUfobcI4q zDk$vW1&souo6@&dzskC4+Bo#bJq=IVRp!;Q(wwP}v%-Px00`m`U8Cvpd{VFhX!y#l zxac8Buc3`m*)?&$itFWrM&6F*{0RyMz!>aYxLbd6gPL zFns(-uhE==zB>!denympId0uJ^y%I>Y32aT=C^TV4f(X1#c&W&UrsRUOyDAzdQwN^ zYCEI+E*B`3F*_xcZW(+1;#S!h>eIJVoJmxn$EdI~1~~nUPRoi1Lm=;qn0IJo>OabCWB&p^I*%&h9JFizIdnO97d`){L<-|G(#lSO@E5EZr}O>o)d)%Sl6t z@AoizB@lU_tKd>GKXNuRi!ZmrxSbZ19xyftg@{jvGd*m{6hOP?&rNjH7;ppNCI2MH z)!Bj*@LM}^Q`fWIe&qzO8yWZi?5mL(9mSP@_>$a*I20bfnluQXOFb4o1pvUApUFQx zGT->71MPwej!(Arg-#Cvp%dnP|Ib(e&0AQqeAB7P>BfMH1|2}5YzNh&_Z6oA+E844 z2%zhp?-h)(T8l0QP}(S1K2Oq`Ac-Xdw)Fk#Io)QuGY(@sWecZ2lt^C1p<6NxI-h4> z2;VPnAPP1)lpd{gFpu*9qTWfWA9?#hsNR1to;$3!HAe4`>Wemg$HUYtR@axR%bl7r z@W?fvdt#BdkB`1-oQxd~E`$ERQJ()2dEXbQA0+`&?!V->o>jnd2&BM+2GECE-2mz@ z>3`TlfT_VQy6yn0@yAl)TkD+-2ME8;XETZy(h8vL=9Yqtid)$hH7Q%<*cYxoumuw+W;UAqyN#dVoPdckg$R~Bo#6M zDo;>VIdkxgk|_w0&#Z%K7`>};%$Ow4(9VbmBbx>a!#;-n7gZF>qv@7{_~umJO!~^l z{4l6Yn^3R@3B41?os@<<70j7oG@*s@Pd&p-iWMcyjX?}*B<-F`cITQK14vM*lyRRP zlN}_quv0hbMexh`OC9a+DGSn*Gm64hkCPmOn-h_ltJudwB^n$WD%wu1(B$?uX8v28N4)NQnZ zVh1 zr3&m!|2XDWk6C#86;9zk{5@2_KgnTLV>aUIU*NsnJ_ymaK>?LEZ2HT#R_|>cU>(GOa&K1e+H ztnog8Bu1vt0*6KyAH_mk^n31u-@Fivim2>vWH3~ftwT) zbnpyRpcU%slkUnM<8MnB>|KY_=qk>XN2BZpa4C1gpS9sb`fSFiCO@$L2!X34L?8pt z%OB6ieG@e5@%(fcioVy(?T_?IBJ}sd-&-vMK)+km zQ0>4RqC7q6QeD?>Lx_&vFj<>XVuF~0v29`|geG}q=$T86u_k;AWe=(INQdPj_Qu7F3bC(F=BA9P1iQsh0F~f7HmaP*VfdahtH|v3!nBLcRpBswE@h;70C@IVp6F6 ztxoxene!-zvN;poeg|9cWO6(7Xc3`E|2U3niKHwJ&u54@UN*^DMCZziZC%8|+$?>2 zS)uykm(r;o>rX2LgkexR%^~947-7ThS-I_Ug3hlw@E_y;7Q;(Q8g#B4o;WJ=8ThH? zZ2A#S4O*fnd9%l#k^)SCf>?dK=~s-RnpTh(}$-ZGmq0rLk zSecBkiC1&-<6_P{zi#%QV>oB^^v&CSu+|q4hh7+qZS}9=bgLN1y3-^hY z_9Ngyl;%^#iZLXvKiMI!PrPlB%f1eCh@m;LA_v}y0=!Nzg|EY&vDxi5omfrwR5<09 z(rWG+{}_T!J_Wu^<-JeUw;-RYXN%JpK2^PqWA^|B}~wM02TW z7K}ppZzqQZI6;_LFPWv+e|!*yI-I*7zur49K(CJE#1S7-_?DN?Lbx651p&JRB(vm> zca}w#KiK7!l2yWC<6-sDGG#5^SoyAh|+wh-S#dU3x--N;%~kQ9^{*g2v)=oCima#m@Ji2d>CQUFi=ay%N^J9tf($WDK)F+SRls45L~a zN8;1;rt6uX$ZzM>d%@JkdS*`5!qN~0(;%ux(XrHa8{rc2M{zPv6)!lqmqa&Ad@eJ= zFlS!Oa9d>b6C!?TvG!}Lfe1JXNSO($>j!`J*@NNooe*C?u99eU`CcYHm&2)eE^*+4fBqzz$o6Y zj8qjGBKefu{+8B~=aY5;e(ecG%KDYi@~~m%=9-bW$~3RRySAN)5NLxMXwNhyYwh4A z0AOoI)&oZxL^>`v$7Zn0G+bAI8ZJpK_PCqyrs z6=2UI%y-|046ThFI~A!dlIiw$tP>Ov0$W+nBv#Vx3NeEowp<^yegPkkHhs*YS>Kz^ zT!tx6=RV^OlMM_pul~284h-{GX7`VOzXKkFt_Y1+@^=Q#e#QG#)%>oALhsuOZ?nwr zaCZJV!lfR6D#&-sN|mCn)ZaCsMF+fAoToF+In}K4)H1Tgl2~=7tY~-0~(ER(m_Vuy=cU zAQZdkUDO|ERK$U+y1IY)X)g2#W7#;= z;|IgY4_I}A4O`1<%Val9LXq);Tb;^g9(;8&xz_o{kMgS5ya@N2rXTDf6B=-`x&v8| z-+idEx{E>&7s=%7z0G!dY(LK+zK|Vw9VJ)C-o<##B8cZ9$KMV+Q>SI+<`By;??zt_ zD%BJ+S~|6dCK++NE~W`KZn}&M`8jZRLT5H(R^L5WEGL2rM~*9Rkjj!@3|PGd(@?ce zcMmz$ujX9{_G(e~$KybuAm@KBrO?72zP@22fAV?{$t|Sdo^iH%QPk7ide&(T_1tF< znDs|cRcPNOKcU+uQ*&I>WzF~+sk4xP<%W)+%KDv%b@Un@QkpMKb0h>(0pJ;-)x1kZ z!nG8C{UAlV4Rm$aq+&{gSzRlw0FA_lAEP_up`N${^HF1)TI74i%)S1+?`dmJ*fL)d zS&Ssx&nX-SA_wH`({#eJL5&Zv*G+j>4k#NIQZ=m>iXYA*)Y8_$Rmj^={ysLDa;ru& zZ=SitV=;IBJd%$zJGv04{O>L6tC^oDfx|KF`Dpr+iN;iseG18B8e;8_hA-LPDOmY> zRU9SH!oxcPS#l&zUVHeatTQ~VIr(GU-7SMg&0l)1--s8KII*R*vP2~n1l%$!P@i+ukb1 z6ywYyXfp|lpRGs#-bU^Huo_)R-lAj<{hCALrHeGk+-hvgax!&&aQ8l08!Jn05BW4X zur*l#*qB#f2ZlNIsO8^hFf^AgRRJ2%eeDGXhmDKu1CUs^xNwQ`oNOd851q_fg&S=u z0d#6M*Q(m1lX0tX6PN{b{w>tF?+s(tE?U;E=yd*!mC#SC>6`Blm0J{IO@J%w5>^+2 zJEerXa44_^->+YrA4hk%PnV`14TD*u96!gq7%i%GzhwetcEx8Bumpja+h5>&rO9aq z6u1qg5F41WqnpqL%(C*#^+dJEh)F&9yZ{Pt$*wq_HpsLSgyHbRJTZnqjh!HonhvKV z3YR2VtRay83n-g|?^Hf4 zllY4Z&Km1N4#gRF)dy|@Cw~;S=cS$6KQEqDe~#(DYn=0@@sA)Iji6QMG8d=!q$KDN zt2xO6ErWVkS<4eezl4!lC%H@Z9m8HJtBK0)^7T_WlDSX)JOGm`SXI!u*b2# zVPNb>=WeqI4i;v2Cbyid^Pmoe(m&wVu2Jn(m1UhA^bPV#mX$NCcJV~EXhR#Kc~}I< zydjM0b}ID9Hw>N>n*JrEBc=O{_H8bH7Qacw;SR{1(XB*qY(7(#qj!fGqEDwoFkRHq zk-lQ928`I}hm40?l3(>tT8rviXY~gcE7wj67`a>SZ)N`L*tahwF zdA#hfyg}!3-0)c)Z-j55>w|>6Si87eEBILY`HFxuFj9?3d03;xpZ)}^k-rve&u7z0 zk>g}Nv{h>){-~~ibb7F2zfoVoQZF;9yc!^jf#f5Uc*0e!l)%5NQamVBbK*BHhqp7x zZovSo-PY6+pYK|?W@m_7wN^@S_dMpZibE=`$sY*sa%Rs7EX52V`pdo;$ZrwN;-MXt z_$9~_+l=o&M_e0AgvpuTS#l4m=Y_b9{lCPpFgnro;jA>jk$m~+?9nVcyDrG7neSUg zs~$v+O6~^5EFvf82w~4ST7d46ppDDX*W7BI>5~RTnj#V375gt%=aRnM691Vr|8K$a zFjRih>a%6;=n2jqa^&2fS|Xi#_e1K&32;E|6XJPkH+Z}nB`Qu~~JI#M?Ruv>ySOzYO@8C$78ET|2@ z>ip+Zf%_(<1n;k@Kam1hBZA2#RQb(0QKD<5bu3!MB+oz19pl;4~P3%7`N8!D{u*r-;mp}b z{P0pD>k8Ksn`&p!t$Q=n3-TyZ#N9rKCUGST<>{PeTzm1Wa4!f~znjBHc|xd=VgF7@ zMUpyF!|K`6xOd}nfP2dq87iRYJX&tMWK1SfsZF+;PfVjklZ1yG{$zF6Y^Y zncFPeB6aHOczdW%p9~0ie8&BC7Wym4&zxGp%9_b!NJ?L&9${6F*!T+WMbV(w+C#pA zr`RCPf8<6!G}6hNbB2h6a{Z!V`r(3)_vw%YG}UY3hLX&~!xRLXk>X~1r>~D{uvrED zTKn;2<`~!vHpS}G5G6bO#2T?C$*GG$EjEoY9Xy8&t58PW58Lm(AfwIvCB%S&^seA# z*Erm)ANT(!fWHiiybaZqQzR5&8sA)_q*j}aryc^$iao{ith2}h#`n+^D|b^UwljjQ z$2ipn^3$=L<$JW{cLjHfKgY&~aheW5@%3@?kCRX9#fwyQvqw{Fb(HBx7gDurdv)UW zgSIj4yMi}ec#$?wcUql$;kFTnB`<6EEY)(2Ft3R3F8^?8W9!zGG=&}k<@|oQ zce5?>t>_#bNh-CSy4H}s-H*34<3ZA^}Q<9i~uePmN1?|Xa={xL~|79CG`NAJXl z>$iyL81Qeqb4x=VZxI?gQ?7Y*G;>WEEdK}&sak6a!ZlCPSvfz);|GuK%J_p!F@P0N zkqM7>^vEwI9P)=9Ielt%R8@aPwKnuWFBzgHeJS$cr5APN+2_daso{{djc6wkV>Dv1 znd7&4hZL-xcohAvo5$_7-GlW>FP1gkhuI0O;WOe^gf|+X0iH7l_38^Ad*wFPP#(R@ zIDf%Fl#^yvv_MM{p)<8EM_>bM2&aFYY=(W(L5`2zoA1tq*mZqMrXg^RMCBXO>lo8N zd{R%^KB(0&o_X^AGypy7vp1N^Z)fYf=;v9;YbHgA(C&l0k}R`bz^WW5T#1$~sP#s1 ze-iQtm&XFLA6cbP3Qf@+Zg+nK?JK@NgNL;lEwj5W@PVyyERt>{Eu;f6`NkVrro3a8^(`lf#rvq_4M=H8v6pc|r?gVj z2yTODL#mN11{5i#Xu1x^wM#7}Jjuz_Xb%$2WuwteF-f|BKhj;6<(VDG^Hlra(j&=- zz)CaBLXK=pWAT9hxK3Oj!`-ckVVn72p7PycZg)SYgs`yi8952w;UzXpc=--JWREgl z{g!HiioIx`?uKQ3-jVmVeo!-S&n*8!#OzxQdosG^0$IfYH5+REy9QkHxsjwi(oFZk z_?r&AlUeW$!n3NQ>eCO;x4&m##m4=hD+7Cr?~+mMuHb9|iH%H;)%}|n7SepL5gddE zMvN!U;)DzQ8_(EvT{r`d=s!J1ONhLQe_10K#Sank6d}dF?0@4OA4xqp`EU>U{e6&a z2UmZ8gQ4&kJNZ+K@18d_pe})g?wnA&NU>(Ab9qIOn4v%D!suuk4#EW=a z(TR(W>;SLB7|2D!pVN6ju{@t6(H;i11S)n*&^=vn$`^95R793h;{e$fyNjrSCG*P3DV$62wcWwgxIxg$ zM5e+RTaR6Y)|^a?$e&Fh6{n|T?eY~;iYRl)ta-EFM$r?2VI(G<(VvNUvC38wVbsTb zCC{^rV<9Jp?o!ep0h}~CIw|{Jz6FtsJ?-HAsP3y41_e2~%0`e1!+B@Nhp`dYuc7@< zNm)|Q`QpSVcCyjw2@c5+2-Gl51)#D_Kbntm#n|dBi&EGH2l$>9bq(k|g;0-`1NPGq zHw{UX8(--Usj`~XlWyr<45$;=*HH-fs+|b{kYN;GFvZ;3sk*!4(2dZ#FQAPjh-dk_ zD$=XB$S`XDbGFmqw6nfhCakkGgGRVj-lgMRJ&*E0F5NN5mlL!jGZfe7^y5FQIKA6A z?h+5t5)_j5@UocI4xW(r#QkC}w}Cu54(P89+GD+#IX3GuWWp|*UsITqA(2aga`XxQ~1VpR9_C zlRYA_Dta+H&xpIRl8wEV33WKc-9y@_bA*{^nf(zS$=8$4U$rkJgh$4-R%x#u$?Mu(rJITqvmPf%NqT$G6l_*z6MxnT z69wQC0A3ou{dxiF?o(IxxA2%S{qZ2a*CD~UC;%>hRbJm9*iJbHl zi7(iDsGXAFe|{>r%=7uAby&_P?+~{@BQ<^0Vck1~B>|`JwcckR85cFV?B{w<@zeVA z5TT_`8FbW0LQM&FVsHt#d+ygpQ9ss`@iR_l9+}CJgUVo!J@&=GY(^BO%K93U^!<4Y z(NftoDl6iiuUkkLI`+dn$0jb~XUB%N#R9$Kr8bTGFG%P}@Su_$8Kww&te9zRet+ge`Fi=;9`YA-uw2{!erdr4^1&R^wYv9o-nI7<#3u`x~r2U=k zzDRi9)tB1QRzH;u!VAchRA=eI_Gzon#)rkCRy_3x-6Gw_i_Vqh+RaWz9?R=HxLJ6b z>2Au(n!WjV=T$kw{U<7iYt7Bas$dsBB>zPx-NN|G6;JeXgodWSVq3G2!t&&B#eu?@ z_7iR>vdf1%DF_^3L3ja^M6;FX&}i*Y54x-wX8oW$T8JmfA=|-OeifUCfpnQB^N?M0P!szi&jH_9b6^~wsQc?Pg7)nbGuKVYzPWFM z7Trx>?|j~#Abo#@Sc(@Q*8_V`AEq;vjCOt$`!BErXi5fH<5&JzA5pF$#y@kPkot01 zwLbh@zT=l;dS(5yv!V!nA_N$Rr&G+LlT2aTY*0I&Z;BM{pQMrFXLVbhr;Bl$;0@d- zPttu()*CM#og>G_##nP-MdamQ&F1b+b0YCld=^bZjbh}ZNyc)XeK(!_I#BsRyukDl z0rBC#HaqWxTyt_fG@V7%%EoqWbq3)62Y8ZSuQ)ba4}g9`a(JMDVLXqj-FIzlXi;#| zs?^NLNFu0q(T$40*d;Igg(V@T=WNC9i5Yy<^}4pLw5`@yH()n}>5{pL*p7b|ODkRw zvL{_&y+QJxdT!%m2T}UwhU9N=IFYD3P@s9uPxE17XW9KbzWgHSpAO3_Gdg}=8bNMy z0|C2A8q2D#slIgf{7<0S394+}QMt$?2lQ`DLcP({FY(mpaEc?4`56}PTQF|ga;x~w zq0{hN-?ViL0)O+e zeNu>LGp{{&zO*E^%AMu+gF5*e7g^AT5gu^1>@wPC-pV=qp`P2bsFLLp3ywTqcPV@C zUAgkgo|9QMx>msZlCLl7zIEPIZM7)y*dfu^m(S^oZTb+rpzG`O>_wN$`8VGcbr$~i zSfP7yMv_v`BK1?d*_=NX*Ii%mKG58@qN)0WOZD{x-S>KHHrqWr`ADG~d1MP^EZ#-6 zq;}R6Q8l6VSvU62&*a~nW2v;b>*zL}jnC`PE#1dZ@F@NCbEle}&42kew6ENjGe7X? z23_qpKetcc8Xw9(@9E1q0l=>Bs^!I}DmO6qO|V`uwUFKXua42TnEN|zY7(nA##id?wFXP+6 zqrax?u|B_*KYq=V|Ldp5bN){K`tWdX&m!wT%$uj&f3WID>4y7PqHK5M$j^K?S#(X{ z^REx1ew4mB+`T4nGk===oBfm`$6cb`Hr$W?X0g4 z7G3PG^zRfo)Bbs$Q03F`Lv`Dq-{{Z2_@-I**NTRD+iqO`8ugQRcU9EXU#lw$WNWWX y0(&{^%7OK-%ME&i<~P?GAoXAuY5enVU}RWpyy{J7rK1`H5O})!xvX&+9R@P$UzxO| zA|)x>5vH2LgR-CPO=*#k_%)|Z8)i=k3!7}6YhMyyuzLq2-Ke`WB1fvgkrY`yk&1~W zlff5}D!^h@KnP&!N({jHU<_)$p+xof)#OjgcVgAsFZ$jNDwXK zz*zYYfss#GgcWgvf)sI+z{UUSHxYb6H{K<3OXdG=9)(5DKJ%wg|6C!JXR>ouH^j?&62)+JyrzVAae>TN`fFx?3W(sqx3*lyjf$^w2cuVi!1xKj1 zsJ8snqw#lktMP3r<1aL5(tCOLD>SI(uHSpP%$AnwLZ^Wat8>ONC{K05ec@tjk`42h z=%M@j`>nRs-y&?Q<7Dir_IC9>YA|@M zc}36DxD46-_C96r)bsOCB?3GHJbx=fPkDL0+f~1n81(6nwLjufDAXx-!QMb8s#^3U3%I6v{jg7pmnxaaQ|nQB=jb!N!oc^;+=A zV*b!RSo?#wd(7=II}FY516|dfmi9$Pr=N}$W|b*04EMrdK3ZUmw`|jPvELP zm1KF8$#eKYs7(-1*o~C{_AyEPq*KN-z9aD4WP6tL-6ylb@N=uG#3<(rDxv6_HN)$G zXG8VpXWvQmHkT_!L0?hRe`SGGQ{*eZoZIbl8{TVO;5P;= z!tk?{DHGT~e55zI0bI#_MNmR|!Sp^Ylenfut&z6z)5or_^H8C(>cg)T=my30=J=Y6p+2yRPl&%*}>s2g9uINx6C9 z8-`YH$L@TI)lBjfw(NbBl5EKT>8u;5%=J@LPtjv#yVrb@^vW(Okaw8(fu5KQ*+md~ zUyHtnhzcI6fyO6`#Dx?xJ|DT-lprR-Xlg2F(cBlT+Tv|u4eKfL7x1N1RNf=Da`pz_N zr3!1%(ZnAExrE6EyeTg93%mDwMlW6&%vmp|evxd1YK9K{2li_E!CCD{m*XRd9>ltP zW`sfUlK#@5p1NZqSL$4UEkER5PvBDnO}2fFbi9oUB8>% zvjQi+!bfp?4XYpY9{9A(xiD&ZvbT5MPKcLC%_|@N0#1?pt?*&LuwMx>S^3ulHI_)k zZ*t^NOqMCv+NM$9$A2ZO2CBA{nn2>cJ*C>FOUQTO-kyl5S_|a)Bv>brT8HOIa8Dx7 zh5765LkI=S(i1WuGbkSz`0zijkHG?013Q!r0LSmtRev(18%rZd5rCV8<|IM+VMK6! z6%fovL5zPnz*3^nZKy8{r^Johys`9yoF>fkVblS}gX@vxJ&BkkQxH;`cZNVjUa4|* zKh+mHR+l<8W|9QSB2rf*oSlm++b$G7eEBnxl!QS06z|YVShrCTNj=uwiB;P(I7l9m zI#N3U@EW=6l@hTfbM#qE-1+`(y~YxH7;B2NGS>oR7mj$i=wWL=u^blyQxo`*i6NZb zWQmT-kP-Sb+o#-q$XL~(eG#;W0u|uXCva{BaM#Js@@1MaRxm0drs5(C{pM-wbDWh+ z_XL^tqoW0ukjh0Fbl0GZfdYVE<&n<@nC#<^4a$JW8()NJYP9~b+sA_XOy!Ma;($S# zgi(5>)5K>B5;YU2iOBO|1p<96pM)^1V}j)*Lm28L_}vj1QDICePImavx6$0jFwBeYD~>)EBG zfrUZ&gxkIW4H`?%=6_H4iq+^a9D`9$MMdm9TTrG=VNF3_7$`j)kCB8ai@S9m`xFv? zYNa7J__VQvI@vk4gj{Cbdu3w<8kTkCAjSV-3S<7=qQrCgh80`y2Z2F#My^T(&uVi2 zQ5R7oK!FLq0V;3hqWbkKbV(2i)1l>{qH2aeaxZ#J^q4>x8)d{|n}`bH z>FFZN$M^?88DOq&5KA*P6!=hHn1vPLa2TrXs_YsI>I;x-`utaHl?wBTVc>3 zfJ4-#$4@h+CxiG?N!*qy_*z3(%Et-37V{2~So3oK+P-lCwL0)ATm~0;T zF2t7B|8H0j<8?PKO5SMTlR*eo1e?QjGW!w0j0@l(0S`MY!W@iP%6?T8GZ?`@L+C&4 z2o4PPKDp5XaidLaZQbALmsX_+-#qqc!tQ9(Uo7f(QpJ(X@Xjdeubxl@o2?a^yWNdr z+<=d^;mkW1jJ8xb{#XI2S9ZK`%@4OP<;IB=v6v(OuUUA@i0whQ2ga%sh#>uH2x?7w zPB_Law!+pCh9B_<4!K|lj}>KcW5S~B4!*$W7k`1n0IZhPX`>g=fI;YK!C`Z!y~MhR zc=T&Xb0@|SQMM!0XLXOeahI$sid|)D^A|_~0|Cv! zO*c!fQ0JaABDnokO7pJI!Hg?37*h+sW!I_VN3%@moa-_WjOvT8xyOh(EgeBv)v`P8 z3&kjhdJEz@wc{`M;Fj8X&~}AUs-yt$y;qWdG{a)7&gDuK&Q_^%7Q62wwI3|oL+zpW z8Iq_w1pP(Diq}Trhn0fsX4_6zLSsl+GkN#EY0*-?^w0kjo(*(Jx#ju^06;6p)ORf#I+)W^f2u7x_4qc#d z0A%=HcUk(Lq1f-&pH@;S>B+&{dqs7^;7QjX72bwED}Jgb9bAdG{{mvP zJ8PKU^O;IvIeH84fP88}s`ZD|;%U4{ci#m`L>K;4@!DU+x&e`)TGy_RYiD8~`jNU< zjjkR$-;g?AMT=;y0IUcUuF!3jLFF{hX>`bMQE;DYiVTkQA*Hhzc}SgZeJbqRUr|4Y z-ZQK0RL&)8HHAXxCm_(!*D}cu|!YtbkOLK?OlD1+5TI+S&ttvQ3DfoAY~I0|hSlC*#W?!wSc&@?Wt0G=-;A@Wr>{-Niojy52mV z>nwxW)2R@@CSnIn3hEV(6&~5yS2Qauo{1<+n099GhFl7eozXi8C)>WbgoK9{#Skyw zI%1&7B%Ytzi7>$@vK7v*n;pMtl1I)(B!>-%JzJz@3pNqGD94$ah1_$@_O0&36k3Qq zIa~*lh-!4qE=7>iyp%0i%!$M|=$P#yAZ;VNvr>yTvmm*!8YSjtiSq~X@1PiLa`!Z} zNU&X+`E+#qW%?JxwVs@5)D;D9ox_q6xrA`9{4%(=Kv~$1pAQMa0`-M>J5a z1tvP?6p#W6%5{JS%m@g6X*S@5wp6Fitz@r?0tcNOFci%rtl&U!B6JpyuDjheYn2xg z3EeZsk&JR#ee4XyZYfi-P3nwdZ*^i{%%piO(u^+E>O}8cX@c;eF4y!M&Bb9wF$Wml z?oi3a&3(YQQPEhd)7WD3i*NQe(T%;;r>=?m<#0jwc@vex&_xc48teZ#aFMXcta@&XIH`8m|6**DP&I6&yUc{T80Q4F2 z`ey3qPtKmn?~*&@B1rofGkc(B8dkWHF99KnJ)vQMp(QxxfQ|uehN14X4&fB2_Igy2 zn^Fv~e0kCS%Xac>pUL4HY$q^3b_ov0&D>0Q9z@x-xqOXA$vr{Yf7!iq|85i4cWg0G zV9yXEfPZ6Zif5eCYL^lWiQx2_UHIyZFq1U518ggi|q4`ZRu|&w2I<$EtzE&=H~Ma z($n=Ko7RZ}@EoxJE^)cyI`^2|-%2>VkXUO&bc5J#-%$KQSKB5K=o?#CBC%qL2Iq=E-Z8S%Kysr zz=8D%;W@ad#{;}L_PluGlu*vM^N>J+2}-V7rx>6`mmxF8W&-*9zZ>cIefIVZ%B$Qx zxD+>l+SYXWkt6n?arCeDFDfF75E~K3eqm)m#lcZY~C{ErSKR z4Qb8^yA2tBW{f|x{{y8u=j%57E4%x<^o!R0zoP$pWvRckLV(bE4@!RLH7AClvGGJb zTT|cVe4BDkA^ZqRbKB=qL*s!4;v|y-LYc3rZC|u?M3t88JA8BD^tWbvkr#6G$Upd# zs-BhE9nH|`y=Fsh3U%hkmtUK+Wr@7LM6aErFgvdb(S7u;Qg9(mX#kE31TlTD!yh_C zFInuf6OY|Bj96kgT~4H%4zQ3c7_gsVl^6P6_enE1(OEX3D`hkCko-&hokDg+%AtrS zrzPYJlE>eLVsa=qEXKIzz_D=J`pNcw;(m-BIF?DPDLY|OHlDx@5D4wU5F?_17xFi9 zD3cm^rwY_yh-m|Fv6T{@H43Q*9@Zc$gi#b{rIf6JmOq}kXZRA@9qyl7U3b!UacxQ^ zhABUgk~ z{qP#R9~eut{fRPPC?vMPuclT=bXDo0kwJI~KzaO>#|Q%{C2`3)i5xW|8Jg@3X% zcc|nJ*$mfkpNekK&-2*OlU$OrZb{ZK&I_&^U$Rve_~y{9>csG*gKV22dCl-!J)D_y z7KU3X@QzG5qydZ27`j>ye+nHsO0Vy?f*kAabtC&u20$iT5)Se*CK;AXyUilE-guts zGz!V>dgyjg@C1qtEJH+;u`kM3c1iaSzr~+wHwV5v=cSSU(ee?Sk^8opF9@>ouA3rZ zz_K2(4*tIZ2<;hn5@L=c&dFMczDg!r(dO{;54F)q2Y#!;)VJUw_^P+4n6WLM>;&xV zq1(1UsJm;kU@7QTn<=42{$5WrWqIF!Juv!p1-@f1Cf4zZT+K=R8_dtE=ES&r;S_

<|5(JB5j|p*j^=OT4qTjg(TI~OYVr=2#N@lK+=Kb*p#Vs2JXZO!N_3^DAN$3v3@&SOPTOMvdVR3tV3!V z2;0<#za?g$scvQmmX53vYukFOsn(ACbXGs|PtDP{S(K zTC!~_)A*7QdJnytwaO3s@8E!;#f+HS+OJ&|C53&d8CNb(IOA(hjomLxDmydty5KL& z)lRiNv&hDR%`$h2;k=xgH*FmAs*rp=ZmAY)I~b?vQErJfpK=AqMQ+V{hi>$Z7-3jj z3D5uAdT|51#m(ngXr2lx=AER7y4oj3n`B*3m)-dQ`ur;JiRk*el= z$vSg#4oG=KhThC(EKO*TaNy+!M;d*{)lT=0C)*Z> ziROrV*K={2tm-0biDiDeq%nPMP%@$ufCW(6TnW)9A5%+hl}$q0_JDz-R|bz-R}@iq z-j;j6+qfNqYZ7}j=Eo~WHx!u3qvos<%6?>8L#dxt;^_CGAXEnHPzYxmEwmxY~Dnc%fjf+YCKs8H-tjS1hoJO*5H&FIU*`8lM%6ss9#C@s$ zL+BOoakeZ;g_J(#71_C}Lh)^X7+3*_4MtG%j1%L+AHuQjU zeLNkd#n$!7)aO_&2g%WC1CkiU7!zOK)>zlq%n{i?Fsj-XA(CNB@Jc#6ZU4rSDNV4Y zm&L97F>Poy@OzqayrDawipzhb1g=Dtb`PX4>M65fR9A}3?a@xRc02Q+S>R8`>BgE=r(*cEp zY(|Yi+$Kl5p#S1I{Vq1Lpx`j?ou}tJ^`f3d^it$|-C5d6Nrvy6*7LC-6n92?^E&lR z8N0Vt?{?lAqSfr2PpLP(GNsMpj(0K8b$2oaaderD+~zVM2+MD);mMCaJvV&}p?~?N z|3li10sUjiM27$XfzE6G8qJX__l(grZZva(!3+uaGU(b$9Mqq#a{&iln2w$M;SsTs8hARz zoi2+@hc~^QI&YOs({^8pFEAgyb3!JO!~c$>`JlBrvUV1!l||i|YxOoa>Z4YKAVVBm z_tWo6qb|&zT@!;7iXjpJYV}*5j~Al0%x+hsPmiXt@-Ftq_Fx-<8$1$gG*taZ*>Z^l zYc?Mkmg4fDlqBv|cys;g5UxU2J5MS;o8Ep`1;h-&-##@>Wpm(^d_cZ!Gx9!ulg}hp zi^$Re8Su7yvvob{98KqFL00EPWa`R=!=8BMHA-yCj1Ih9&j?2capG=Q5^KVqyrSPUM^;@IJ$-c;MR^ZIF_O2y!2-!(PYy8q78?yK7NGXr7TgCVT^=h)MguH;rAM>sd27C3rg^^rQ0zZ1tm z;QpAT?S;Q`x5lHD6SZvfF#D5{LpW!5Ej%%8>)tir^^3^2qxH!y0fEtv^CT<-8Lx#) zo^BWpwFCu?36`$+S_X}GygcbCa3&wAPJrUXtzO4)GBWMF#WpO?4Su*0Y%rD)(?NXNGS zFjoG_+0)aMV)|mPcCF+zAC~x*T~eD6Y+B+Ep!N+8KTeeKwCSKMdI!})X_xocnR%P_ zJL0?W^es*DS}6NyveUyB1YMe^;uUD;v&1IM`1|scIFP|swvWTR5Gl6Nf;_7wyV3J+ z#C}v-yt#(}g;?A&nB*TML)WEHI*~nd;#>l&&isj z9X0TN^x9HXH_3yxk{dCG&scf(iE{>xTt;y1r=FPBGmZdLkal%FoIftxyzWGqT~&im zT=`3g0*OGUg?=NsS%%WtvyGTNl;$Y{*s~AuU_ZuZ@$of%&p!SvoC2aa0!SZ78X=Bc zW~xxHMl;ncS#Nr$ECWQQ{0sk;nf$~5iJQ-RHIh5cK@gRGW&i7ujpH`(tk$w}b{Dt* zz@Yxw;cWoP6cF}-H#=(LL&DuteP_z?KHJ5CkO$C^d;u)NQgrnu3K^p38qXo9FR7iB z&*X`wO+5{yzb-yC{0%PS88(H7OPVr+HOb6Q2@euJ)v}S(munE80Xn&jKVzO(1G$W! zSwluy;`NER7UFM}1GU^B-Ld`zP|6N5bL%$W zsaR5fuOlI+QD=zTK1Y&^IdjDn%E*u=nL9)dCfHvku;rK!>C{QFe`-mZBk*Xg2@t#C z>?@<#@$L=W|Dn-d^c?GGuG;CcCt5ZZ;bI=d3*|Bz%KK)7%Oa*&IPk!}WBIl5!4Jb`b8|`h{Pm1FbK%gX5vx*&cRZA&a z!oVs5FuoyDT3l7Vq5W!se@qaP@H& zq=_w3!go_k^x6D){YXS7w|W6Fh8^@DBAy&Dv1&u_{=5NNtmKKElYT;m6{b#xL{iYK zc)qDMlq`vO$=e7<`keDQ<-2PJrb8xJ5!JAE2Vw&(Mox4tH31d}gysrVJXFNR|I^Wv zxI7YU9#6sp6(b8X5 zObydqlELIL2;S8}xzSZM;?_T`+{)+RzIbqLmUgz0N9USk`mzEfANjx~-1s^VC zFQ$`HNB_pFnapX^1Ke5qkHzlUS(_I)#3ax0jt02%Z#`56N=Yh0A;b&BiljN<$os;@ z*iJab*qXpUDDt1R@dsYl!_>&cUD(u;dzcWlf7Wcnb#c_y-+1)o%{5V1&LQC{yUnxY z^@pQ`tCj97Yn)Gn1Pe(y%bN*XkD`E{)Mfb-k_EyZII|xd17IX zsAR|-0ypzu;F!ZP!yH9#M%~ElL#}CS{chXFrvyMqh~yeE1;Z7usNg}i0If3OvKjCPynTF_HSx=DJD=xB=Sx2FFY8grU*~7FWYZ1HOWemKp+O2Q%bfx$9#jAQ z)c%58~+m@yo!~~lKDEVxp49W#|b2%*o zG+5fUJA}{1*g>2=c&NXj#?-3KMYXAWl4<4@h|m8kPf1g+ zo%mEOC(cyJhAI)IpMrd$fni>})?u0oU}rUoN`CIfr>jKG4HMwri_)+fvSzz}G+7bl zp3AyP=bs6NnY9(>^1-G8EWX_idVkyVCDq%cw9=Dt70_?&q*AAzzn(cieZW`f9`G3^ zFqx9Xn5{87v`MIO-)|O%?u&-dsvV&xwG|g}G4}tkK#x94GYN4H7!kF0FJ{@CctN7^ z_RG|f`y|zm^T($qHLi*sb6o0&FY_Akc|HP;Jo=AY?lBG%UxBehUNL^)fmO?2vxcPZ zw{gSh)pxUwg67KFKd;7_W&}AGlU{SmdE(Mfj-|kq*l)}TXnA1y9U057xnVDY+4xTS zc0Vy5wfVs%j=?vR#emT=2E(?Pq^v!y#jL$${}oHe{&UN!onQg)d);E)otGv{lQ(uB zIxou*Au&5ta{L#4*J0Qx@_w_3b%Yv<>d0n^SaI`0e|y+JQ*6;1#i4*<63hKdO_v)$ zutE*(onyuS?`|mleD}na<%GPIXsCr=F>Aes?$w1i+}BBCZzK*+={K%VRGTy+Bk^+e zf;LS^kZ-C1Q~}&c~j))%#X1=2UdvT z3l0onHB@>1xqB({=`P-)8|q0fN~gBwGx$WxlO~scAYhF|h^8MCVN!RwbZShX=6rra z0{(FlChaCIp>w@mV)ervYF6Pt)9@RHa@Gg6+&6KlyFW(lNc>sSh}10=kw3j7KUx)oBA(U&r=FK9OJg zel*o0UtpOvl~{IK2Bp7wcbmI1(-l~xFqef{6m@rx6B% zLxkQ+dv5mJBg~iK|ArTIS5+!-a?_AJ2yO{8L!#$E&F90--xn)Zh?rdR-zaWqG53RC zR2$gA!(bHt7A;W>Uu25er(U4T_&wo*k9f#O{OWbCs3{D?32g+61PG=~!DgHoiX^n^ zlWH;F{vmlrA)jJW8xoKofZNp#y?j>;A_c?<3t@4nq~IrmC|p<5`FwZN`DR5*VZYV+#iwaRCB?k|vv~7aUj0wkkKZ%W z=NQOIHrAZMiGX0U!mQ{xrI_dc(Q_NFFc9^6X$A@Za-xQMn*-~ijxa==>_Kq_Xv=ER zt+Z*cxyMe|u*bW{MZOre^p%3N!Hu0?tUh&JxNB(QBkAzC-V7dxJUYgyoRx(Oa-y#A zHU?P{3hMbj%@-4-QnHCl6l)8@$(@kF*PYac!^#br;W;vTZx!AXO&H_Y^Z$7Nv$Q}% z_eCfQ)lgme_;HQVei(Yas`>a*!I>x%4o{Aj`-D3ocdX2j<>_fh3$l(jBruJBguM=R zkaeo=Y<<}Lf$~R&3zwm$(n@lC6c9=R#S91k2#@B2uhS z!BUdg8bgo}h)3u_7+l7ooqAr%cIQ>ee${{wsAc>E_QPePcspyC*KVY-x3&}G!{!2O z>YO=+Tt}#}n`Lrc7YP(}?f2I^l)IJN(Sp5PvIQb9xpYOFjIs-*KB>3;Bcdij~Ba-OfYN-(Y&em$Z+GFDca)vt@+iImpkNzBfSBMOJtry>^(uX zfl#|IYj~#Bfjz}Yu{;Eh?jBaa8grm2c;$HEl)9=!mBZ<;gwC>RBXFClT_|ZhS1odk zcxX*#&vZR>B$oXO941T~RNu8?!In!mP51YvL0#Rsxi#`$d5i<<)dcHJ??6egsY6Lm&{ouits|rq3Uh3i83a?`NqyN3h>O;M^*Za6 zFzfl$LC;$5S*z6AvkfPje^yJS?tEXyOxnm|9ZnHig`6|}LwVQ{b}{+wlEu1tFL28< zh*;3%j1IYts^g^EULdhrESwjEFR0QO&uTmA>`c^my5&7S{h;AdTDB!>AT{64VSb= zJ7Md-llzYYRFrb=6LgR01I@Gb{7 zHKtLALdl95>iSoF61M%EeyZm~zH{B(+qbthW24^ciP8l%N?h$ou3eI5m^=cTA*XwA z;bbbDez-i-2kiE^T_zVHa>o}d1ghQ6O} z+>D&&WSly>U`hOB2N{2%0$M?f*t&`oq`agOC+NUML2W^8KQ{)NM!lB)Y&|hxg>#|v zUFk29=j-jR{ejx6uH}BOvDRs{D_zt90(8rDUihb#HqUV&YM z=chyw!8`;v#&nlk2I7gkP7DhjWHNul{DnY=hG)@BS?XbCsQv(6bZ>n4v^!@Vt~{o@ zB_j^~a9j|FCljVOHC&!xXG^IVRidttFp6Nk$2=vfE1B-gadCSpYJjXKrMm?qW)QtZ z-IkIMGv;X^oOiuP7RSH#sB{p?{e-bt>siPQ*19D)%oI;Dl}i!RT>vi6i$OokR*c$8 z<;g@DL9qV*H#0#2)BV|R=8qz+8j@BuG#W(2-$=G|e#X{)vgk2YT{AvcHHvrJuVd3>Ix{pB6-{@m!-SNovSUD2{a`;JBeW)s>LX?ifY}e z^4U7|SP3p^h8B!INs4?e!jzhA&RS}A!+&q@2v1NzO!%dpu7Ql3C` z&FY5n7Lc(Lw<6{@+7~hoFMrSoueF`eZ8E&{44-yRuAiwQ)VsN=nDdZ+qkiBY+D z$=|(xotaSqI(CecJNCF!AY9u8hpTK3TCqobu3b=8JzBs2+5NQYIey4@hA_enqlNc$ zSLQr+Q#7*&6??YXW-skHWnk+&M)kEtxVm!fi9s0RPi|dZCEi2g&v>3CHx2l38z3UhPHU%n{8bg z9?L_|#dUQ|XTGc(E)x*0#da{tg?bbJ2aY5m>!Oh2QB@m3_ax(NE$%JpXHGB=kcDrm z#e($c(;Y9yXwKz_9)B&B_ZSgN;rEY@0&zu|`F8g$i>ltG;8vYkzp>|se||JJcFdpH z@AgTKR8z6A?gy*kPHa5n-ZE`XC8L1x)XDh0VJ`H>@{&5xDi{(k?d_G$t!gmr?cCU))cjl0z;>*%vs^(L>VSg$G_ z!F)vmInXJZ#^5Yo3n^aJ^1L$vl~aTHq6(%YymBD;(#*I^mGGgC#C~biUhR7Yu`FYU zAtA}IDYx#f6koiy))`}|0tj|s@)h$>J15TAw--RN6CnO0V(~>LkE^RcAvb#X?h3Q=*(@Q|v$&!=yZvN08jKQ- zcwV$#Mc}((6kySC4d)A%_6Y)%?pRYprZK+@nqrSP!o(UZ0O7cocGpM8=L-kbSI6$T zmp5DVL;I_>pJ^)PVsBDfHUgf~{dsAfxo@|6rTaw0*43b7?jVS>f=0;qnxVht!8Mkn z@@Ma32q#rr-?z#;mM%|XQpA?uGp@6nrV;}$x@Ie-cg+W{Dh2VkIzX`VwkM3-zcbN0 zw;Wtq2$eKL{1NRPbOv!6E_c>Db1jY%^~!CFqVRu@q?sZS!l^Tp*PQ{(3khR*Ag{Ep z*EyREj==#FT|BLAT055!83+b6`~UTsB;fV>ocYF?;7D!fXl;{PbtlaVN+f4@*5jFs z<*|FT0UtJMz8y}FnN6>4Wwmb({dIT;7MDg65J`HedDVimQUju%nf2#a&*S&JL1c>Udubgr}N)`$V(M&qs(+=m zrmd!JBQ3x1;ixb1Gy48^E&D9<$2V`_EozmG@!t$`TzU$b5?7AJ{4Toq@w$;iqPYVn zC(aHH-lDGX#}!np^9<`?Cl#$T4b%6S7Ht&W$y&Q=2A+omJw@I@EBJCM_?E5y6%fiL zn&O2^5MhiY6~^A&iD&=Vk!|5Le!>bC-hUf_aq`foKFLCRD9(w_iB-eP4AT!4D@v&` z>w+QHMc(A~ehi71m^juEM$rb*u1y!_S6Z`4gI3}!q>*p^O8byr4XW6c z@?^%zMJ2U6eaqZ6W~%G_su5P4@@@}9RpItYK|n9P?A6!(Y3~@>@-|vJbia6MObg1w z&W}4j*~Y25EwBMk`n1x<2x;0v?Y(}EDVOP$&aDxZiPj9 zqa;>%Kixscy*X<{v%_;zu8R~+gUdnSCT~PlcBa1IolN=)(=jOuh_JKgk`Fe@Q&ZA5Bf z6L`t+#Z&_kd``iX=2mtR!|jlp%_8P8L@_{_omKLs2E7&p)s_5Or6$aevulX$b%XA` z*OCP#m@5y?lT1+u_tQC-7tS6FHr-QZ#F-5Zy64Z3`L+FFn#7fI+WQI10NQIjMba5r z$hW*xbLcYrUqvxs^Z&2lyA+v_0f zxmSi+Ooga=y$#kV;^den*Ia2yS@Yg@sJ*-ElC9kHUTm{$!&^O154c|=JsIewxQn-5 zvuTFSuh=nMd&~L{cjjN*tl!+yyVD^l za|@~ilAD$s|2x@x=G!DUTlEueGiOp4sN&zd!CM1(h3ssp`gdSn>k)8B@mK=2td<&6 z^=+}4^n&1t%!waM|CY|>PUZ3P3-mT};PDK7D4$;W-ZyF|jiM>9eE%={7H;1Oda^k6 z&Q20V?}NA6p1>Tr>cqVW(W5fn1z6DQ`Gh$kJb@fFR4s^Lc?xw(`;L61gHl-Fe-gIe z$Y$?z>890J+&gC2UqG@u={w$bMWYU0e9^J4ZNGs+OG-P*pX&Ih^9rv$USCgzMHx68M8)Iqj~nj^CN|H zu|EY-4HSBah+}pK@C!e-rAb4J{8lK}3MGlm)C7bAPUnh#tyr?vDzSh6JQ5BwU3R%rbaxumuXc+{Rh%9` zcf3VPQa*{6XGUP2(67N)!tBI-`Txdxg`y)c0bv6obkebb-5}S4o=cq)7AGGM|BSbf zps+kfwgsmP4xMdRi*47Uix2zTMnge1{dg?@ycps&N*2hZso#U)A*SRx`Uplt~Sl9AY z^FbL)D2?cQYl~E-M?@H*!G$J2t`DoK{IS2*FcoK~T^Ny%zg zL_5`~#1*TRkx=syKN7kGs@o9$n>C>@)x;Im zo|30D24u=Q|GFWKy7&d%8Pg~d)HIUI^HXVO7_@y z9*-`2Udy`Phmi36ybI|drhAI|C9Ff%EIDIlsld3|8k2VCxJ=+~Thn$XkiN8Odse`> z#48a&A3|^ijQ_>`S@{o)2+_(bF%yVr9+wF(G9Q_zJ?D}Lki)KBA4d+5QCmXY zyhkL1xr5#X!W@5GcN6WO8AMB!Gt+=Lcl_%$x`--^q+?Jw-dSW29Uc%K(1Tet z_8WuN(o$h&Mg$_5zS=LF)}OD4upUX&;oxDy6kPbz#zb@7p*?kY_XtsIsb5ZoJ+lyp z6Zl8GG;N;GfMP`3)ZOqR9VZQ|IM>P+(LD`)z?>ywm<9w?6l^~Pif zvnohUe;H&>HNNBcMxgdy6a1uFLSgKJsB;({+GGAHI#~UGb;F#`WaF&j? z)u(0z-A4A|UAB8ys-lSxsM=1K?8a*JLJ`LaHqu=1*zL+pRlZRG&UNQiFRs>VsGhkTqGj>}iAn!UJ{A*!4ef>F)> z_0?9K&fVl0dM_1C$Q>QZ2q7`@8DG1HvFM)YoG_1m%l#B*#{BNb)FSd&nY-l>sUTyC zPbkNLl?Ix38HYdS#!MM_mZSNV@!hzMju(#8v-;{NS*^iL1eK(@3DQ6E1w^)B+}AAX zFHWt#O~+1HbL{8$V~lL!vTSIq^5YFxPrYUL4Sahj{q})-N?jRD=sPyD%*=4uAcApabCKqMrp3uDaN-y;Rx0K*VycFs|8#(j}g&Ay2 zPUu`ugwTpn9TDE@B?ET@(KT5fM*aqq%@v(5KP?{SR_^jO?uQ+WI-GT>=hQZccosOb z>#$MtUGYQ0Fr`V*4Ix_&N@n}Wshs$MovA@TD4ovwijMAFsHXDy{NrQ}N6kt`sA<1S7&`!MkPD`I?>%krf`2{yzZ^kch2H>; zbcjJIy6`<;B*@A|I}J|}bMGnb*JC|g$ACxYj9SGzJ#qz~NN$JpP9*LH5j-woGyZx1 zxB&*~8!o5(<%E8_qQ7z&KO|oujzG218@Ax3-uUo;+%>`Snc%vcvb9#5Oqzr9y{$-%MTRCqs=+UtJD0MBq} zVQFu}3jZUinE6w9WT8)YH&6R<#31<7tGF_96#%=1p1X~pU=`-q)7{x&Wmw9uO4lAR!=mR67~ zNGT127Za1S4}?Ecupt6zkta)!uy_*@I@YTImW9eYQT~VyZ;@Z5Lt~|H29O)75NBQ# zffD?;BJQWAj0kGKIsuIFA1ECVh(DSPHM0O>Ztx+8Sig?2TcvN7;qG;T{x8hacBFBX zgkC|`U}o{|^rJ#Cly*x2Xjji%%~xL6Xhqfkr?T%3Ybx8`1_Fd0kS<7-CcXDwR6vT1 z0wWNltCRrJYe1w)k&b{s6w#3;U}yq~C`cz3S|~wUlwLzken-c-cV_PQ&-Xle&RJ{i zoqhH>*;)Ht?=GicF&`e%vR<=e%9hkZUtB)I;&JGXbF685`A+!G4%=jp)P`ADn4Ct= zO_U@`VpB|x?lYW2=7#-uqW%IMjP8W?0Yy+*Lci&ZE+2<29IMa%e2G;1^`=zuCUo}l z2;IKT_E)PTaCs{FmlBJdttjJ`A~%yb{AdL}n5CHfAYHx(aq%PfIp0j&Dt=bzaOMch z8;F{+I_~N9rdZ>zy{eaT<-$K(5zr-i>C}gBQXYW3gxgxGI__E4d`Gk5AZ2N*OZ7)& zNGzEgND1!o@tr%!;LH@y2~SdMoO`&Zc(dw(>WI7Dvk+S34XS49g|;~N3#QWQ;Kzy$ zWI8n8^&nS!+!O7W!ZQ2y0+_TsJxCGEpW%E@)BBkk26hDU=Yl1{X&(EXy=7{6n7$ZtHtM*^ZMEzQkF#daZ)( zRA|wW^T}$E)UgXS0{Zk#!~RRF`|i*ISX)&3woJP9zDwSz0}Z0GM_jX=^3T&f#2we1 zYDWFtC86jio(-$A3e4>-NwfF~spC|JChQboO{`ljzM3*)6c*@8TokI40AY&6{d^zP z2igbQ+{gN;EHb94!{i_y`B!%{#Qppq)c4!%gSnH4EQ`|V*1_EU^-!X#%uAUx>wSg1 z5_?k&#Cm47NBo!|b!Q-nV+mu=bc`qMsym5 z@wntnqw1j-&~3J#TyjdTZ-=}J)#id8W4+jiQH+1`M zPz>qzuQZt1A)zle(oYL0pp7N+E3yjtH+6?LIq(@0o5nz>x5w%4D9CrjKHothTckJ4 zG)hp)zd4owt8J4Ft?sg?AE=_0`lM=zi9+8wH+0?E!_2v`L!>oItFvo@Zor#XDw}>0 zZ6ZBxSROyPjTZRYN-h!_aE*T73h&$yDVNmjt4G^(L!>#)AfhS4DrdRXsb=lC(`+eP zb%5lkKxn%;vyqkHuWF7EdDMp24MMIgwd#vxYH^*sXmC^=W4y4{aDvsu1_e60i)V?& zg-Gn`YTA)X9SAC1`Q;1AI7d3=)34!D^Q}$j<}=<+sRNNBVAnn{nsjP3ySVm=s|Jn*_*^Ob;sqhsq^gO%N!sz{SDrZ5|px_ zHa(-q53DyLo}Fx<2g|hF(fueHW_io*=LBsVA_3=NwSIZi-C6KM_VBys1a2E5ha5xB z;p6BzzCbCNP2K|Ag#{Jaq9ea8mG8#1ln^RHfvdmZFg(oI;`UDc3lfLllh*y0r_7TXRcn4ar1T4knqY8uLN{$m+ zW9Xga)=FH80v)2|2e@CeYbl_E+s+Iqu2s7f8D^VyJUSz^{Ulf+3)xAd^~oZ%*jmum z#^Bw_b3^X+x14a#N!n7Uce8f{M8+Q$8`@0y3ZwSc?v07w+Pp;b)Q_^NlnllF1Vr8X_vI~;4lODQq0dXS>P99*|v% z8N=%g7X(i`EphIMO-4PIPu`d7Ea-70T+URR3^Kerf?!Ez5+A3*>gQyhnG7wZueNr9Zr2Obt6#U&^MaYn{S!W?Omsj1`owzht`OfgLUi7 zPaFOd;mxw{eC9a3IY+H|+}=)F^Et2lqCu`{<}O*?t^y~?(CgVYsF#?^sR^k=roqCTWhogmduUH>bQ zebV_xg7>Al4b3!{JUF>TqiU?rBDzsYm&5~qBJkR?AptoKOu`m9VSou<)V~cx0q<4l z?Q=E@ioue4B(^4K46+a`{86pVx8i{Zr03K_k>50Tej-TH{pn1nL6L_}&V~GjJAq%7 zKX&c&+_D%6xP10^AB#7ADclZRgmHI^k?WdCc7VZUPuArtU&A2nYRk+X+`!UO> z=0!licYZAVcrA5(9pO62*~-6=5*ZlK8HJg?eD~zgfDrE>uWC3D6i|H;^Lk06ZOZtr zFx8tZ^y@=O0g5zZ8n34S9F#oaF3ao|f?5s4-%uQnZi>_5`hGR6z3`6aOLY{#w99<0 zYM_s&GWg($arAv5NKK#1y6Unbtm6td++IeOjLqItbj1hA)=5cslXSA$3g|C=q`z+L zs%L`Zn?Ll|6a`Vgnn^QGRq0uVb0_hA2tS@5mH#E*es%1bKAg*)RO8lOA%no`Q3h}) z4ZU)@!NSwY$d=WwcQ^gZWXhYn1M%AoM)?g+J7SKFMt8=l9SNf-%Wfofv_i1!ftc%h zzHJR+!z?;%@!D=wp@S1Q#@@+kf=5)x7|SEN6FDoF%+&)3Z)W7=5$F60BK!6@@NkqL zoDbGc^~a5}3Ej`*XATV0q~W@sz1&J@Z)raph-ePVSM40U%y0AT$4|A?r2fsd&zcW8 zE53s*K2~GU@}i5x>3?dG-xMH@`7%8fEXsmBRm<@LCGcJ{R1x9dl*{qD`ZhioK}q+x*qh_T!=G6N%B>(kN+g=l7+f4%bArTwG)v;0@ z;Xk)2Oju5iXoC8+hlD+rPzmN5!{=nJ0c{NF9VVx-nwQezb1qhTp(bMOwKKxW* z$BfkT8Um0<8unuwZ>$V3MZ@$;Z0Ed5;^FII9 z1#4Om%~-sDjt;Go{~<0b)k91e7IJY<{5YiIjAQ19pmX~f^)a>=FjUD7sx_$_aWiM) z@M6t1tuOmupGijMyRJfeR?Ni1smJ#4-vgxa+44F3Ou?SA8o?!V&LR5<*RgM)M{z7y z%0uD@*&>*Y7Mx!g+u*0272oqwG7vl8Atdhd7MQ)#5(J%)tkN-HY{>&@GFH7HvbOc% ztIxE#Z;*+`ekTi_j+glK_yHsMR1YF2%!cWFf}ex)J&C!9=>ln+%o<>#;&e;`4_O^Q zOMa7o)UUY)eUX82(0P&?ex*EV=E@&!YQnM=`01yusfs}0;47rvswNCExI3e>S*L3D z;ViTN^yZnQAuO10--Fg3BvixWM1gs-3W7v5+%u;Lt68!6-mp%!zhBAX;3NAAb?;0` zkZfI(ZW``(L~??;IL4j;i#Yy7vwlTiwYS>KXAPgkCJmTZxF}C1H!Ofm{V-XVDjgPZapG0&zj6 zlT>H*>|d=}5eef%x8x*6det{IMAj%6%kV_&U$$z)l80|b_Eze0NZgr~yZX0MeG$dF zu^keP1WWIYmK-Bh>mh!bzF(kpk6zg}dd79_jwx<6@_e^tt>MZ~m z4qspq7Qp1(?e2;qQ0q*EY>3@#-r%hpd$OSIY(aqmTnbJy0#yuD?z!hg6TE!+e;f%w zNiA`I(sF&|X}LGD0&7hsHjY0k8Em-Aru+Wk5C1~7Iz#{GD4(TxU+ zYt(TsQMc>(-whsD+2o@4`{A_C5+8cpB!Ka|tSQQUZn$4882#E=;KM_>!@fYjksH6) zws;Hesv^ZK86@rwS}#)=)WWc0b^qqHXa?4g($0lah9Vp7Y(?95StS38N1>KIg~`ER zFwcX{I)-}1Xu*F(+V~e56bL5Kx!Wh|-|$j=zh+DQjOXT#o)6339eXj$XYoMWR=qkR z4-*p)Jn5h5RS`l?NQ?CHNZ`4e{|)`v_0h@xl z&t~*fPd>KwiuYl!7fk5fP)f0{3g*V6xZ&$B2@PAIKm<$9mjK5WX*16y6zx3$`ut8jG#T7CsN zP4|bxP|aZS*d++o?ht-f_(X9S}V7>AtHe|J0Z>$N5QyM^ldlC3dsc>ChR zmcvri^^0(k)t)ukl@Y7>yUbg|ee8mQfZD!SJE9`)ru%_CQ1P9E*jV^f^iRlF0XLxw z6^XyIW2;AbHkEng68X%r?SZ16V45-0&fwo6pLP=Jl>6>(G&B5S>iEHmz97L<;3(Sa z(kgLl)Sb@(_|4n;4jFiJohVoea`i8I#?g5H3Hu6j;rPO`%xdG45*_fivlTVgkNHD9 zPil>K`Y=clkJn>{pZc#9%r_8-Tfw&ke?dO)PSZ@Vnd5~fIL*S)RhbmS2dtemjqI{LXG=1EG>c#y8?O&HEP<8OlPQ#mzQ!a3f8_dft$tz?s% z)>KnR($Su?8Q@#MZ0Z7an5gDjEE(~-u(y~U$OHcSNXh4biL-ghm+nx54sN8?l{hmN zP~FxKx!Ui3$L_xVv^RKDmNFYv#zegd`P!P$3*KxiO^f-$>p2gL4XO_pS$>HlODY0Y zWq*-WXFccCTSya75!vgj9m?Gp$NDt4f3(58=AP_CHCQ(OIxMa+U?M!PH}^oKtq65y z#2ond@5@g7%bSIDD-9PI|JT(3+CO~TPyh1|<0}ic?^>=btiYiv8xs9kUQz=H& zhjmxs%a*wt5QfE`QZ5E1o&zaN;XjjmZwra$^xoz*0^;c_x)ovF=YgTZwbmv8=OdLj zvtRLa>2miIx4(CwWNX(oD`jdanr|w|ZUWHWG@#4q|EF?*HwJ3_k0HaqU?AF2Qs+xzxA|DH~72p^LUe)*}J)>x*@2h4ZB6*RDp^`4m z{U)TkbcwBf9_mMWkCkF?AAfXwL6zaBdM`w?VC^Wl0*s!=GR{pinUhQQdhAE-%W`2{QFMyO#P<&DIbNEwyME%! z40ezUhRjzagwcNZr9TxPr<<*`3zxN@(^x3+)Q}M#B`?iT+5nm4*>O&an5iP?+hmBf z`^KUw84qp~WNVGu?YD$*R zyHJFGj(80SMnDmP`esQWh&*gdVI5A>dX9wS&WpN=ZcBuabV5F2Xy56KhW)Dtf9Shm%EvwYGF7P zU4}DiDmt^>wB&vmRA&3a_%b{{BL8-KAJ6j8z(>vddza*DfmcxG*Z%m_Pn zt5%`*lMLl)1M4J}qdBZ$(475HIdez2apkT&dQe62+QOLLP|=7C-X*T+a4BfAlVY(v z8CjcCMP6yQ&n~AziK!X`{ZMv)Dob6f*#l1lo8su(Q!T7w{wOT1Vw|GC@R6gWjQE?P zu02mP=WkD?HS|x(%X&|OGr)`JWDlNp^!%DrUZ)l%#`}qC=$q;O?fgW6$>L*kKT>_9 z7sBTTBTfygMYm3;*XZ+-oYyn^BHEEW3F*TqpMO&lg~u5^Nh{Q{xadaD#h>D(B%j^$ zEop+HJ5lhFq7Y0)_#@3x?upyL=T0^)*YB&;s`*F1ls^E)Gf06WkRy5JN{OhP)YFFb z3!8O?vFkJk7e^#B|E=*BxYWGZAe+}W?)57uU`>>bBiJt~g`Q!M+G1pl__UCUi{emc zd`t;4i|l$gqx1q~HuyBKlss2(n!AV*smY&sI{QOt1B8^N-cbs|e4Qs||I@_<=?Gq# z*IvipgqQv!{Y+caiP|MUQ20Q#yW1Ciga>W9XVT-p<(}?h0$?KIkRTlTGTjCz9u=R> zHX}O%2M@B%DB|GYlU-})Z@5nv^(&rO^8c%s_anv2EN&B2rQnA&Dj! zVsm*g?9R^;9b1~dRp!M%8EOk4eX^7WUn~h(BvzKTGE{BWNfNfRrVEUK6xoTi%Z-u* zQkLTtSX+SPq-c&~3%d_%U(Hksa;rg-AkdoXc!*~PW(rF3pNsSAYzu%OPB;3djgMz@ z+fw&CfgF>hnkmOdl4DDo7wLbK&;K)77jY5pL!Qbdr5k8M7|sT5khxOK{5r}~ zDr*2Ch22uVZIJT~)L+Lh&e0?Jw#1Mx>%i6jC@})py&U}kQTATH-2YL5N&UuI$Jb!Y zUpc0Y6JNg^MS&Q#$gmXrrj62@Ox=`PYA{VM)=eCWs?4M-N_oomuW0Ju z0f99IFNGp|q=^1$ZL9=eBJ&lhp;O7vR5n_^o#f8maYwHDB&qZK6fB{raw15;g~vww zvJNGkL~Bff#-ExK)3$S*;VJD>{8vz9N(ZOWeQ-*yck@_0J_0@nGB!oFi~(FGWcxnt zdsCGMgwq@Ct?l06USRTZt8G*Mn!rR$4AWcDgXi;5WK8dR{i#`S{u;DicY-L=)(@Z# zN2G2qpWAW%stmT%Eo6dtJ|eTkp&mNXD{`E>cBLNtQ}}6_yNs+i%<*;#R6l*br+sL2@ft&K zulsQ>uMN_-;N8PjD6(yVt3HTcslyG(B66I+Mk>D#?Ipa+ zp1&Gtu0B+W4~IQ(cLPr(>a~M0dpN6zUZ#2o{K#?@1rk19r`+2>W@+~ZuS3gga#t_! zH{Xj$xGN(07s&YgALWJjm54vZlE}N{8Y^V;!ZWNtkX)DgZ)ClaUKk>Slka173 zW-&6^m(*aWUi$E#;o)Dw>p!B)Uya`96z*v(V<#KQNt$b z9!O83R60Q672;}OmDo=x(L666lEQX24)C;VjXy|FDZT48aPhOSe$X8_VS@UYV&`ekf5zTy+ zt)Q_AWm7EqT=MqI(CK_(0N?J0Ta*q{$>+7N3Yo42cdR%uAN7uFAlp?& zvR?&xNB96y(B3U273yM&9`rbyW>`hbo3q(^-CQs_Ua+f8PUKG=w_y*u4$qZnQ?PK=4)sC^MydgQgUP||d#fjyvM zq(@Tqj9Gkst4p7kw$lDQVwfi5n_NTHhDsJPB2m2=YIW7pdB)2)8s~^JVnL87oII!H zAM@Lc#wV1u&|oA{6r=Cu?f>59{w=?K1g>D9JXS`Er}UvzL9_R>4f7qyJ0J)>5!={} zc<~XS6?w!(e#nY|m&QKVi~VsnGB4{quNoT(w-T|1b84Oi4egnsJ~^MmU!&-~hI{|v z>GY8Z?p7U>+l+39-d0O`cWmHkrM}=^8REAraGb3~sHYgB4ZaaDZK>bHAOfMR{kSn? zVH5(IUHqdo&X?P_(^RfBjx$)OmBC>!NHw;;N(4$r%%_NENvd49-VK&0*nodw+g zu?UoEzmW60j2hNDhf^y!7vUr^B2Rhd=6hK zylOhL-J_SRx20eO7Nz8?&@n^{(SqZ!uxCw`Mym4j%367qB*sBE#oeQgIQI}_IcYH& zJg|PGieoGAu+aJ)bxTeNsnw)K+ZyyaeZr9hG@4HXMMcs$rKB-kx&WMFS=Eyt`9*UIt3Di-o3{qRsortSR@q|4n_ zBUMNCriS_oQC7xpVVLnG%;q72l~9}Auul5=)r2^ODs?5uR*8okK5Yf6XY&(-=FvpG=`a?`xf8Ml@@QOO?BWEX}4x)!Klbmq(T z0h^+!jw@zLg|vOc0bOp7+i$*gPqp){d-2`fcFIjOJ%Zym4uAUH>vFLRkI6O2;i4MeQ%%R@U#NN6c1}3vDq=&0B(Fq_dyjg+9mdoRAwKpWFfl z<|ZI5M`LB8-G*s1IEd6+VukD^ujdBth(|wz3!;2MkF}p+*q|{g?)BKoeI|9Y!*Q#&t#2(mFM^3`MAIlAqwA&2wqY{{xcPjMc~9s-C@} zmlJD?7Prh`1;)58W!b{>iT;tiJrU}P{J$M?T*U=qN5fZMFABiU%(>$iy7FS^rRbqKCP>xqmG@3#7_DaoWW?xR-O9m3!`?hm$NE0vh(VeW&gR>?&l!yY z50kNy7uV-))Kiwty@`aKc80T_Q#|+iCFPCgBWQa{y1rN~Rw>~03pz!mUU*aA3vg2g zIy7dD4+kBa!5G2rBqk*|q!Ac~3-+u0(cuFN37KSGO1}0|vIciB2FK33f%CuQ{;o9n zoZ1F$P?sgOQ2#wEbx9dV4LfUe4jnX0-d@i!IOYfR`DI_A%DvHN`GLo1at$ZJ) z_;47@a{*3&`-Z~PrZ;Q|e%DiNT#8JeBU*uFJhL3%V;2R%H^w9c0h6QdGZDE#a6Bnc9IP4315Wd}y-MfICl{%H+89&FzpM z9lm~N!A`hpgGEptf`6`FEajk~qe~;hP2h+{CS_WeuaZ9OJP2dc;%&kbGs-Yp_-LXA z8>#xFAl<^Vq@*KcdZ~?DG3B{pNl@_7OiuJ-vJJo4O2BTWaLzidImjsRsM%A;>HEo0Xy9rf+=i?ni0x2*dZX%QG zt(BUqtx$s0f20c4)h z0$?q`@8{bp&w#-km~~~GG0@3tBe$A|(QxC&2*yy%lw4TG6|MC^nDfI@(<2A4s`;}v zqFEtm|Cz`m#V;Ms-y`WG-;qeUUD6}!&VIimtldOI(LlRDpkdpVOuSKMnELRX&8C*- zprYLzjQ+Ewn(iXUa^hKH$e?Y!bT9wy&{L$R>s!FkrTCq+uD7kbqZ4}hhfKY;GhDWC zI?uf~#dO{>L`~FF^rXcKtYmc%SkB~CwrK(p3yTg}EZ@&)+ZH(X3|YL@Sn&_M{HPHB z$yr#90g8I5`C7o9YBauXWyL}`c{(4E7nH{v^u;{pZv6h2aWy`v6+2-s0;G95!o2NO3 zeAg23~OQS>ia4u-1Gk!b1dVxYG##PPNTlj!^{0-Al zh*fl5?t{>8vn@g~$|AmC(Bze8+tg##GGFAGzhAeR3zkDk@l(#=G$5y%P3{|Hz>v+j z`}zD`E-$yglohTufe5izS!?$rIgQd+-4!ppZJbXCU7u}{Z8Pkh$^^Ee!!abe1l$ku zXeczQ=iWHgB)G>Hlm4Q`96#on(HIA2YV1w;SZO)$2as^4SG^FifePuS`OV%6pz_k6TmhU5F? zjTObApVm8xBf>P=DdiWL!`VtZ6=|aO4TsCN{B=+Hy{Y;#e!buE?veXyLGYm$x=RDSS;M{gfX~sC>RlMIUv;8Any7uv0KA+Zqh;(> z4w@cmiN+TLuW4M_AN{c|*7lk0*wKhgK{Ms|GtWm1miu$&#HDPO==yWez}czafK!EU kK?7h5tjBQ>GBOl@FmtP7_Qe^=ACLdCv4v5Mfpgsd0UVM;S^xk5 diff --git a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js index d90ec45e8..88ddb8a58 100644 --- a/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js +++ b/apps/spreadsheeteditor/main/app/controller/DocumentHolder.js @@ -1001,9 +1001,8 @@ define([ rect = config.asc_getCellCoord(), x = rect.asc_getX() + rect.asc_getWidth() +offset.left, y = rect.asc_getY() + rect.asc_getHeight() + offset.top; - var doc = $(document), - docwidth = doc.width(), - docheight = doc.height(); + var docwidth = Common.Utils.innerWidth(), + docheight = Common.Utils.innerHeight(); if (x+me.dlgFilter.options.width > docwidth) x = docwidth - me.dlgFilter.options.width - 5; if (y+me.dlgFilter.options.height > docheight) @@ -1339,7 +1338,7 @@ define([ var me = this, documentHolderView = me.documentHolder, - showPoint = [event.pageX - documentHolderView.cmpEl.offset().left, event.pageY - documentHolderView.cmpEl.offset().top], + showPoint = [event.pageX*Common.Utils.zoom() - documentHolderView.cmpEl.offset().left, event.pageY*Common.Utils.zoom() - documentHolderView.cmpEl.offset().top], menuContainer = documentHolderView.cmpEl.find(Common.Utils.String.format('#menu-container-{0}', menu.id)); if (!menu.rendered) { diff --git a/apps/spreadsheeteditor/main/app/controller/Main.js b/apps/spreadsheeteditor/main/app/controller/Main.js index 1a6141a88..e5decace2 100644 --- a/apps/spreadsheeteditor/main/app/controller/Main.js +++ b/apps/spreadsheeteditor/main/app/controller/Main.js @@ -806,7 +806,7 @@ define([ }) .mousemove($.proxy(function(e){ if (this.isDiagramDrag) { - Common.Gateway.internalMessage('processMouse', {event: 'mouse:move', pagex: e.pageX, pagey: e.pageY}); + Common.Gateway.internalMessage('processMouse', {event: 'mouse:move', pagex: e.pageX*Common.Utils.zoom(), pagey: e.pageY*Common.Utils.zoom()}); } },this)); } diff --git a/apps/spreadsheeteditor/main/app/view/AutoFilterDialog.js b/apps/spreadsheeteditor/main/app/view/AutoFilterDialog.js index c72f8d68e..de1452a3e 100644 --- a/apps/spreadsheeteditor/main/app/view/AutoFilterDialog.js +++ b/apps/spreadsheeteditor/main/app/view/AutoFilterDialog.js @@ -976,8 +976,10 @@ define([ if (target.length) { bound = target.get(0).getBoundingClientRect(); - if (bound.left < event.clientX && event.clientX < bound.right && - bound.top < event.clientY && event.clientY < bound.bottom) { + var _clientX = event.clientX*Common.Utils.zoom(), + _clientY = event.clientY*Common.Utils.zoom(); + if (bound.left < _clientX && _clientX < bound.right && + bound.top < _clientY && _clientY < bound.bottom) { isLabel = true; } } diff --git a/apps/spreadsheeteditor/main/app/view/FormulaDialog.js b/apps/spreadsheeteditor/main/app/view/FormulaDialog.js index 14153458d..0ba1f53fc 100644 --- a/apps/spreadsheeteditor/main/app/view/FormulaDialog.js +++ b/apps/spreadsheeteditor/main/app/view/FormulaDialog.js @@ -130,8 +130,8 @@ define([ main_width = document.documentElement.offsetWidth; main_height = document.documentElement.offsetHeight; } else { - main_width = window.innerWidth; - main_height = window.innerHeight; + main_width = Common.Utils.innerWidth(); + main_height = Common.Utils.innerHeight(); } top = ((parseInt(main_height, 10) - parseInt(win_height, 10)) / 2) * 0.9; diff --git a/apps/spreadsheeteditor/main/app/view/Toolbar.js b/apps/spreadsheeteditor/main/app/view/Toolbar.js index 26b8d8cdc..c1a815423 100644 --- a/apps/spreadsheeteditor/main/app/view/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/view/Toolbar.js @@ -1204,7 +1204,7 @@ define([ }); }).on('show:after', function(btn, e) { var mnu = $(this.el).find('.dropdown-menu '), - docH = $(document).height(), + docH = Common.Utils.innerHeight(), menuH = mnu.outerHeight(), top = parseInt(mnu.css('top'));