From e206483f86ca235953f43e3bbc686f4cc83fab96 Mon Sep 17 00:00:00 2001 From: Nathan Reese Date: Tue, 11 Sep 2018 15:16:07 -0600 Subject: [PATCH] backport --- .../kibana/public/dashboard/dashboard_app.js | 16 +- .../dashboard/dashboard_state_manager.js | 8 +- .../public/discover/controllers/discover.js | 27 +-- src/core_plugins/kibana/public/kibana.js | 1 + .../kibana/public/visualize/editor/editor.js | 26 +-- src/ui/public/chrome/index.d.ts | 1 + .../share_context_menu.test.js.snap | 10 +- ...js.snap => url_panel_content.test.js.snap} | 6 +- .../share/components/share_context_menu.tsx | 69 ++++++- .../share/components/share_panel_content.less | 11 + .../share/components/share_url_content.less | 3 - ...tent.test.js => url_panel_content.test.js} | 8 +- ..._url_content.tsx => url_panel_content.tsx} | 28 +-- src/ui/public/share/index.js | 1 + src/ui/public/share/share_action.ts | 59 ++++++ src/ui/public/share/share_action_registry.ts | 26 +++ .../public/share/show_share_context_menu.tsx | 11 + src/ui/public/utils/query_string.d.ts | 26 +++ src/ui/ui_exports/ui_export_types/index.js | 1 + .../ui_export_types/ui_app_extensions.js | 1 + test/functional/page_objects/share_page.js | 23 ++- x-pack/package.json | 1 + .../dashboard_mode/public/dashboard_viewer.js | 1 + .../export_types/csv/public/index.js | 15 -- .../csv/public/job_params_provider.js | 19 -- .../printable_pdf/public/index.js | 17 -- .../public/job_params_provider.js | 41 ---- .../printable_pdf/public/layouts/index.js | 20 -- .../public/layouts/preserve_layout.js | 22 -- .../printable_pdf/public/options.html | 10 - .../printable_pdf/public/options.js | 22 -- x-pack/plugins/reporting/index.js | 7 +- .../components/reporting_panel_content.tsx | 190 ++++++++++++++++++ .../screen_capture_panel_content.tsx | 86 ++++++++ .../reporting/public/controls/dashboard.js | 31 --- .../reporting/public/controls/discover.js | 27 --- .../reporting/public/controls/visualize.js | 38 ---- .../export_config/export_config.html | 55 ----- .../directives/export_config/export_config.js | 141 ------------- .../export_config/export_config.less | 19 -- .../public/directives/export_config/index.js | 7 - .../reporting/public/lib/reporting_client.ts | 35 ++++ .../public/services/document_control.js | 38 ---- .../reporting/public/services/export_types.js | 20 -- .../job_completion_notifications.d.ts} | 14 +- .../register_csv_reporting.tsx | 71 +++++++ .../share_context_menu/register_reporting.tsx | 95 +++++++++ .../apps/security/secure_roles_perm.js | 2 +- .../functional/page_objects/reporting_page.js | 46 +---- x-pack/test/reporting/functional/reporting.js | 44 ++-- .../reports/baseline/visualize_print.pdf | Bin 80886 -> 132989 bytes x-pack/yarn.lock | 10 + yarn.lock | 10 + 53 files changed, 831 insertions(+), 685 deletions(-) rename src/ui/public/share/components/__snapshots__/{share_url_content.test.js.snap => url_panel_content.test.js.snap} (97%) create mode 100644 src/ui/public/share/components/share_panel_content.less delete mode 100644 src/ui/public/share/components/share_url_content.less rename src/ui/public/share/components/{share_url_content.test.js => url_panel_content.test.js} (90%) rename src/ui/public/share/components/{share_url_content.tsx => url_panel_content.tsx} (93%) create mode 100644 src/ui/public/share/share_action.ts create mode 100644 src/ui/public/share/share_action_registry.ts create mode 100644 src/ui/public/utils/query_string.d.ts delete mode 100644 x-pack/plugins/reporting/export_types/csv/public/index.js delete mode 100644 x-pack/plugins/reporting/export_types/csv/public/job_params_provider.js delete mode 100644 x-pack/plugins/reporting/export_types/printable_pdf/public/index.js delete mode 100644 x-pack/plugins/reporting/export_types/printable_pdf/public/job_params_provider.js delete mode 100644 x-pack/plugins/reporting/export_types/printable_pdf/public/layouts/index.js delete mode 100644 x-pack/plugins/reporting/export_types/printable_pdf/public/layouts/preserve_layout.js delete mode 100644 x-pack/plugins/reporting/export_types/printable_pdf/public/options.html delete mode 100644 x-pack/plugins/reporting/export_types/printable_pdf/public/options.js create mode 100644 x-pack/plugins/reporting/public/components/reporting_panel_content.tsx create mode 100644 x-pack/plugins/reporting/public/components/screen_capture_panel_content.tsx delete mode 100644 x-pack/plugins/reporting/public/controls/dashboard.js delete mode 100644 x-pack/plugins/reporting/public/controls/discover.js delete mode 100644 x-pack/plugins/reporting/public/controls/visualize.js delete mode 100644 x-pack/plugins/reporting/public/directives/export_config/export_config.html delete mode 100644 x-pack/plugins/reporting/public/directives/export_config/export_config.js delete mode 100644 x-pack/plugins/reporting/public/directives/export_config/export_config.less delete mode 100644 x-pack/plugins/reporting/public/directives/export_config/index.js create mode 100644 x-pack/plugins/reporting/public/lib/reporting_client.ts delete mode 100644 x-pack/plugins/reporting/public/services/document_control.js delete mode 100644 x-pack/plugins/reporting/public/services/export_types.js rename x-pack/plugins/reporting/{export_types/printable_pdf/public/layouts/print.js => public/services/job_completion_notifications.d.ts} (56%) create mode 100644 x-pack/plugins/reporting/public/share_context_menu/register_csv_reporting.tsx create mode 100644 x-pack/plugins/reporting/public/share_context_menu/register_reporting.tsx diff --git a/src/core_plugins/kibana/public/dashboard/dashboard_app.js b/src/core_plugins/kibana/public/dashboard/dashboard_app.js index 9f65e52997440f..ce6ac9e7d48e47 100644 --- a/src/core_plugins/kibana/public/dashboard/dashboard_app.js +++ b/src/core_plugins/kibana/public/dashboard/dashboard_app.js @@ -43,7 +43,7 @@ import { showCloneModal } from './top_nav/show_clone_modal'; import { showSaveModal } from './top_nav/show_save_modal'; import { showAddPanel } from './top_nav/show_add_panel'; import { showOptionsPopover } from './top_nav/show_options_popover'; -import { showShareContextMenu } from 'ui/share'; +import { showShareContextMenu, ShareContextMenuExtensionsRegistryProvider } from 'ui/share'; import { migrateLegacyQuery } from 'ui/utils/migrateLegacyQuery'; import * as filterActions from 'ui/doc_table/actions/filter'; import { FilterManagerProvider } from 'ui/filter_manager'; @@ -86,6 +86,7 @@ app.directive('dashboardApp', function ($injector) { const embeddableFactories = Private(EmbeddableFactoriesRegistryProvider); const panelActionsRegistry = Private(ContextMenuActionsRegistryProvider); const getUnhashableStates = Private(getUnhashableStatesProvider); + const shareContextMenuExtensions = Private(ShareContextMenuExtensionsRegistryProvider); panelActionsStore.initializeFromRegistry(panelActionsRegistry); @@ -133,14 +134,6 @@ app.directive('dashboardApp', function ($injector) { dirty: !dash.id }; - this.getSharingTitle = () => { - return dash.title; - }; - - this.getSharingType = () => { - return 'dashboard'; - }; - dashboardStateManager.registerChangeListener(status => { this.appStatus.dirty = status.dirty || !dash.id; updateState(); @@ -409,6 +402,11 @@ app.directive('dashboardApp', function ($injector) { getUnhashableStates, objectId: dash.id, objectType: 'dashboard', + shareContextMenuExtensions, + sharingData: { + title: dash.title, + }, + isDirty: dashboardStateManager.getIsDirty(), }); }; diff --git a/src/core_plugins/kibana/public/dashboard/dashboard_state_manager.js b/src/core_plugins/kibana/public/dashboard/dashboard_state_manager.js index 4f208a63656b63..3b7c759967ec09 100644 --- a/src/core_plugins/kibana/public/dashboard/dashboard_state_manager.js +++ b/src/core_plugins/kibana/public/dashboard/dashboard_state_manager.js @@ -470,10 +470,10 @@ export class DashboardStateManager { * @returns {boolean} True if the dashboard has changed since the last save (or, is new). */ getIsDirty(timeFilter) { - return this.isDirty || - // Filter bar comparison is done manually (see cleanFiltersForComparison for the reason) and time picker - // changes are not tracked by the state monitor. - this.getFiltersChanged(timeFilter); + // Filter bar comparison is done manually (see cleanFiltersForComparison for the reason) and time picker + // changes are not tracked by the state monitor. + const hasTimeFilterChanged = timeFilter ? this.getFiltersChanged(timeFilter) : false; + return this.isDirty || hasTimeFilterChanged; } getPanels() { diff --git a/src/core_plugins/kibana/public/discover/controllers/discover.js b/src/core_plugins/kibana/public/discover/controllers/discover.js index fee5c13ff5304a..434e26b8c49348 100644 --- a/src/core_plugins/kibana/public/discover/controllers/discover.js +++ b/src/core_plugins/kibana/public/discover/controllers/discover.js @@ -53,7 +53,7 @@ import { recentlyAccessed } from 'ui/persisted_log'; import { getDocLink } from 'ui/documentation_links'; import '../components/fetch_error'; import { getPainlessError } from './get_painless_error'; -import { showShareContextMenu } from 'ui/share'; +import { showShareContextMenu, ShareContextMenuExtensionsRegistryProvider } from 'ui/share'; import { getUnhashableStatesProvider } from 'ui/state_management/state_hashing'; import { Inspector } from 'ui/inspector'; import { RequestAdapter } from 'ui/inspector/adapters'; @@ -162,6 +162,7 @@ function discoverController( location: 'Discover' }); const getUnhashableStates = Private(getUnhashableStatesProvider); + const shareContextMenuExtensions = Private(ShareContextMenuExtensionsRegistryProvider); const inspectorAdapters = { requests: new RequestAdapter() }; @@ -179,6 +180,10 @@ function discoverController( const savedSearch = $route.current.locals.savedSearch; $scope.$on('$destroy', savedSearch.destroy); + const $appStatus = $scope.appStatus = this.appStatus = { + dirty: !savedSearch.id + }; + $scope.topNavMenu = [{ key: 'new', description: 'New Search', @@ -198,13 +203,20 @@ function discoverController( key: 'share', description: 'Share Search', testId: 'shareTopNavButton', - run: (menuItem, navController, anchorElement) => { + run: async (menuItem, navController, anchorElement) => { + const sharingData = await this.getSharingData(); showShareContextMenu({ anchorElement, allowEmbed: false, getUnhashableStates, objectId: savedSearch.id, objectType: 'search', + shareContextMenuExtensions, + sharingData: { + ...sharingData, + title: savedSearch.title, + }, + isDirty: $appStatus.dirty, }); } }, { @@ -239,9 +251,6 @@ function discoverController( docTitle.change(`Discover${pageTitleSuffix}`); let stateMonitor; - const $appStatus = $scope.appStatus = this.appStatus = { - dirty: !savedSearch.id - }; const $state = $scope.state = new AppState(getStateDefaults()); @@ -306,14 +315,6 @@ function discoverController( }; }; - this.getSharingType = () => { - return 'search'; - }; - - this.getSharingTitle = () => { - return savedSearch.title; - }; - $scope.uiState = $state.makeStateful('uiState'); function getStateDefaults() { diff --git a/src/core_plugins/kibana/public/kibana.js b/src/core_plugins/kibana/public/kibana.js index 5ebd66b5492bc7..7daafbf6411a94 100644 --- a/src/core_plugins/kibana/public/kibana.js +++ b/src/core_plugins/kibana/public/kibana.js @@ -43,6 +43,7 @@ import 'uiExports/embeddableFactories'; import 'uiExports/inspectorViews'; import 'uiExports/search'; import 'uiExports/autocompleteProviders'; +import 'uiExports/shareContextMenuExtensions'; import 'ui/autoload/all'; import './home'; diff --git a/src/core_plugins/kibana/public/visualize/editor/editor.js b/src/core_plugins/kibana/public/visualize/editor/editor.js index 42017d2c4da039..07eef274f47956 100644 --- a/src/core_plugins/kibana/public/visualize/editor/editor.js +++ b/src/core_plugins/kibana/public/visualize/editor/editor.js @@ -42,7 +42,7 @@ import { migrateLegacyQuery } from 'ui/utils/migrateLegacyQuery'; import { recentlyAccessed } from 'ui/persisted_log'; import { timefilter } from 'ui/timefilter'; import { getVisualizeLoader } from '../../../../../ui/public/visualize/loader'; -import { showShareContextMenu } from 'ui/share'; +import { showShareContextMenu, ShareContextMenuExtensionsRegistryProvider } from 'ui/share'; import { getUnhashableStatesProvider } from 'ui/state_management/state_hashing'; uiRoutes @@ -117,6 +117,7 @@ function VisEditor( const docTitle = Private(DocTitleProvider); const queryFilter = Private(FilterBarQueryFilterProvider); const getUnhashableStates = Private(getUnhashableStatesProvider); + const shareContextMenuExtensions = Private(ShareContextMenuExtensionsRegistryProvider); // Retrieve the resolved SavedVis instance. const savedVis = $route.current.locals.savedVis; @@ -138,6 +139,10 @@ function VisEditor( $scope.vis = vis; + const $appStatus = this.appStatus = { + dirty: !savedVis.id + }; + $scope.topNavMenu = [{ key: 'save', description: 'Save Visualization', @@ -156,12 +161,19 @@ function VisEditor( description: 'Share Visualization', testId: 'shareTopNavButton', run: (menuItem, navController, anchorElement) => { + const hasUnappliedChanges = vis.dirty; + const hasUnsavedChanges = $appStatus.dirty; showShareContextMenu({ anchorElement, allowEmbed: true, getUnhashableStates, objectId: savedVis.id, objectType: 'visualization', + shareContextMenuExtensions, + sharingData: { + title: savedVis.title, + }, + isDirty: hasUnappliedChanges || hasUnsavedChanges, }); } }, { @@ -190,18 +202,6 @@ function VisEditor( let stateMonitor; - const $appStatus = this.appStatus = { - dirty: !savedVis.id - }; - - this.getSharingTitle = () => { - return savedVis.title; - }; - - this.getSharingType = () => { - return 'visualization'; - }; - if (savedVis.id) { docTitle.change(savedVis.title); } diff --git a/src/ui/public/chrome/index.d.ts b/src/ui/public/chrome/index.d.ts index caadd5f09828bb..6b7835a26f90b1 100644 --- a/src/ui/public/chrome/index.d.ts +++ b/src/ui/public/chrome/index.d.ts @@ -27,6 +27,7 @@ declare class Chrome { public getBasePath(): string; public getXsrfToken(): string; public getKibanaVersion(): string; + public getUiSettingsClient(): any; } declare const chrome: Chrome; diff --git a/src/ui/public/share/components/__snapshots__/share_context_menu.test.js.snap b/src/ui/public/share/components/__snapshots__/share_context_menu.test.js.snap index 5708a29a93db48..815661b15213b3 100644 --- a/src/ui/public/share/components/__snapshots__/share_context_menu.test.js.snap +++ b/src/ui/public/share/components/__snapshots__/share_context_menu.test.js.snap @@ -2,11 +2,12 @@ exports[`should only render permalink panel when there are no other panels 1`] = ` , @@ -20,11 +21,12 @@ exports[`should only render permalink panel when there are no other panels 1`] = exports[`should render context menu panel when there are more than one panel 1`] = ` , @@ -32,7 +34,7 @@ exports[`should render context menu panel when there are more than one panel 1`] "title": "Permalink", }, Object { - "content": @@ -135,7 +136,7 @@ exports[`render 1`] = ` exports[`should enable saved object export option when objectId is provided 1`] = ` diff --git a/src/ui/public/share/components/share_context_menu.tsx b/src/ui/public/share/components/share_context_menu.tsx index 6846632ba63dad..74b221509b6ff5 100644 --- a/src/ui/public/share/components/share_context_menu.tsx +++ b/src/ui/public/share/components/share_context_menu.tsx @@ -18,33 +18,46 @@ */ import React, { Component } from 'react'; +import './share_panel_content.less'; +import { EuiContextMenuPanelDescriptor, EuiContextMenuPanelItemDescriptor } from '@elastic/eui'; import { EuiContextMenu } from '@elastic/eui'; -import { ShareUrlContent } from './share_url_content'; +import { ShareAction, ShareActionProvider } from 'ui/share/share_action'; +import { UrlPanelContent } from './url_panel_content'; interface Props { allowEmbed: boolean; objectId?: string; objectType: string; getUnhashableStates: () => object[]; + shareContextMenuExtensions?: ShareActionProvider[]; + sharingData: any; + isDirty: boolean; + onClose: () => void; } export class ShareContextMenu extends Component { public render() { const { panels, initialPanelId } = this.getPanels(); - return ; + return ( + + ); } private getPanels = () => { - const panels = []; - const menuItems = []; + const panels: EuiContextMenuPanelDescriptor[] = []; + const menuItems: EuiContextMenuPanelItemDescriptor[] = []; const permalinkPanel = { id: panels.length + 1, title: 'Permalink', content: ( - { id: panels.length + 1, title: 'Embed Code', content: ( - { }); } - // TODO add plugable panels here + if (this.props.shareContextMenuExtensions) { + const { + objectType, + objectId, + getUnhashableStates, + sharingData, + isDirty, + onClose, + } = this.props; + this.props.shareContextMenuExtensions.forEach((provider: ShareActionProvider) => { + provider + .getShareActions({ + objectType, + objectId, + getUnhashableStates, + sharingData, + isDirty, + onClose, + }) + .forEach(({ shareMenuItem, panel }: ShareAction) => { + const panelId = panels.length + 1; + panels.push({ + ...panel, + id: panelId, + }); + menuItems.push({ + ...shareMenuItem, + panel: panelId, + }); + }); + }); + } if (menuItems.length > 1) { const topLevelMenuPanel = { id: panels.length + 1, title: `Share this ${this.props.objectType}`, - items: menuItems.sort((a, b) => { - return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); - }), + items: menuItems + .map(menuItem => { + menuItem['data-test-subj'] = `sharePanel-${menuItem.name.replace(' ', '')}`; + return menuItem; + }) + .sort((a, b) => { + return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); + }), }; panels.push(topLevelMenuPanel); } diff --git a/src/ui/public/share/components/share_panel_content.less b/src/ui/public/share/components/share_panel_content.less new file mode 100644 index 00000000000000..23ffd1015d14ce --- /dev/null +++ b/src/ui/public/share/components/share_panel_content.less @@ -0,0 +1,11 @@ +.sharePanelContent{ + padding: 16px; +} + +.sharePanel__copyAnchor { + width: 100%; +} + +.sharePanel__button { + width: 100%; +} diff --git a/src/ui/public/share/components/share_url_content.less b/src/ui/public/share/components/share_url_content.less deleted file mode 100644 index 95b950e5b0e940..00000000000000 --- a/src/ui/public/share/components/share_url_content.less +++ /dev/null @@ -1,3 +0,0 @@ -.shareUrlContentForm{ - padding: 16px; -} diff --git a/src/ui/public/share/components/share_url_content.test.js b/src/ui/public/share/components/url_panel_content.test.js similarity index 90% rename from src/ui/public/share/components/share_url_content.test.js rename to src/ui/public/share/components/url_panel_content.test.js index 3ee722041eca44..025c282c83bc89 100644 --- a/src/ui/public/share/components/share_url_content.test.js +++ b/src/ui/public/share/components/url_panel_content.test.js @@ -23,11 +23,11 @@ import React from 'react'; import { shallow } from 'enzyme'; import { - ShareUrlContent, -} from './share_url_content'; + UrlPanelContent, +} from './url_panel_content'; test('render', () => { - const component = shallow( {}} />); @@ -35,7 +35,7 @@ test('render', () => { }); test('should enable saved object export option when objectId is provided', () => { - const component = shallow( {}} diff --git a/src/ui/public/share/components/share_url_content.tsx b/src/ui/public/share/components/url_panel_content.tsx similarity index 93% rename from src/ui/public/share/components/share_url_content.tsx rename to src/ui/public/share/components/url_panel_content.tsx index 4c3f1812dff4a0..932ea0887ccac3 100644 --- a/src/ui/public/share/components/share_url_content.tsx +++ b/src/ui/public/share/components/url_panel_content.tsx @@ -24,7 +24,6 @@ declare module '@elastic/eui' { } import React, { Component } from 'react'; -import './share_url_content.less'; import { EuiButton, @@ -67,7 +66,7 @@ interface State { shortUrlErrorMsg?: string; } -export class ShareUrlContent extends Component { +export class UrlPanelContent extends Component { private mounted?: boolean; private shortUrlCache?: string; @@ -99,22 +98,25 @@ export class ShareUrlContent extends Component { public render() { return ( - + {this.renderExportAsRadioGroup()} {this.renderShortUrlSwitch()} - + {(copy: () => void) => ( - - Copy {this.props.isEmbedded ? 'iFrame code' : 'link'} - + + + Copy {this.props.isEmbedded ? 'iFrame code' : 'link'} + + )} diff --git a/src/ui/public/share/index.js b/src/ui/public/share/index.js index 99728720d526b3..3a1264541cdea6 100644 --- a/src/ui/public/share/index.js +++ b/src/ui/public/share/index.js @@ -18,3 +18,4 @@ */ export { showShareContextMenu } from './show_share_context_menu'; +export { ShareContextMenuExtensionsRegistryProvider } from './share_action_registry'; diff --git a/src/ui/public/share/share_action.ts b/src/ui/public/share/share_action.ts new file mode 100644 index 00000000000000..abd5c56d57770b --- /dev/null +++ b/src/ui/public/share/share_action.ts @@ -0,0 +1,59 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you mayexport + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { EuiContextMenuPanelDescriptor, EuiContextMenuPanelItemDescriptor } from '@elastic/eui'; + +export interface ShareActionProps { + objectType: string; + objectId?: string; + getUnhashableStates: () => object[]; + sharingData: any; + isDirty: boolean; + onClose: () => void; +} + +export interface ShareAction { + shareMenuItem: EuiContextMenuPanelItemDescriptor; + panel: EuiContextMenuPanelDescriptor; +} + +export interface ShareActionProvider { + readonly id: string; + + getShareActions: (actionProps: ShareActionProps) => ShareAction[]; +} diff --git a/src/ui/public/share/share_action_registry.ts b/src/ui/public/share/share_action_registry.ts new file mode 100644 index 00000000000000..b6f828bbf56f96 --- /dev/null +++ b/src/ui/public/share/share_action_registry.ts @@ -0,0 +1,26 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +// @ts-ignore: implicit any for JS file +import { uiRegistry } from 'ui/registry/_registry'; + +export const ShareContextMenuExtensionsRegistryProvider = uiRegistry({ + name: 'shareContextMenuExtensions', + index: ['id'], +}); diff --git a/src/ui/public/share/show_share_context_menu.tsx b/src/ui/public/share/show_share_context_menu.tsx index 4adefcad539ea0..58a103015a1a9c 100644 --- a/src/ui/public/share/show_share_context_menu.tsx +++ b/src/ui/public/share/show_share_context_menu.tsx @@ -26,6 +26,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import { ShareContextMenu } from './components/share_context_menu'; +import { ShareActionProvider } from './share_action'; import { EuiWrappingPopover } from '@elastic/eui'; @@ -44,6 +45,9 @@ interface ShowProps { getUnhashableStates: () => object[]; objectId?: string; objectType: string; + shareContextMenuExtensions?: ShareActionProvider[]; + sharingData: any; + isDirty: boolean; } export function showShareContextMenu({ @@ -52,6 +56,9 @@ export function showShareContextMenu({ getUnhashableStates, objectId, objectType, + shareContextMenuExtensions, + sharingData, + isDirty, }: ShowProps) { if (isOpen) { onClose(); @@ -76,6 +83,10 @@ export function showShareContextMenu({ getUnhashableStates={getUnhashableStates} objectId={objectId} objectType={objectType} + shareContextMenuExtensions={shareContextMenuExtensions} + sharingData={sharingData} + isDirty={isDirty} + onClose={onClose} /> ); diff --git a/src/ui/public/utils/query_string.d.ts b/src/ui/public/utils/query_string.d.ts new file mode 100644 index 00000000000000..3f3c1752d38b29 --- /dev/null +++ b/src/ui/public/utils/query_string.d.ts @@ -0,0 +1,26 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +declare class QueryStringClass { + public param(key: string, value: string): string; +} + +declare const QueryString: QueryStringClass; + +export { QueryString }; diff --git a/src/ui/ui_exports/ui_export_types/index.js b/src/ui/ui_exports/ui_export_types/index.js index b9122d7735bdbb..d6ebaa649adf8f 100644 --- a/src/ui/ui_exports/ui_export_types/index.js +++ b/src/ui/ui_exports/ui_export_types/index.js @@ -54,6 +54,7 @@ export { visualize, search, autocompleteProviders, + shareContextMenuExtensions, } from './ui_app_extensions'; export { diff --git a/src/ui/ui_exports/ui_export_types/ui_app_extensions.js b/src/ui/ui_exports/ui_export_types/ui_app_extensions.js index 66b6f43b3497a4..d2d91efb4be832 100644 --- a/src/ui/ui_exports/ui_export_types/ui_app_extensions.js +++ b/src/ui/ui_exports/ui_export_types/ui_app_extensions.js @@ -52,6 +52,7 @@ export const hacks = appExtension; export const home = appExtension; export const inspectorViews = appExtension; export const search = appExtension; +export const shareContextMenuExtensions = appExtension; // Add a visualize app extension that should be used for visualize specific stuff export const visualize = appExtension; diff --git a/test/functional/page_objects/share_page.js b/test/functional/page_objects/share_page.js index 07951ebf2cae58..b94d5c2de3ee44 100644 --- a/test/functional/page_objects/share_page.js +++ b/test/functional/page_objects/share_page.js @@ -19,13 +19,34 @@ export function SharePageProvider({ getService, getPageObjects }) { const testSubjects = getService('testSubjects'); - const PageObjects = getPageObjects(['visualize']); + const PageObjects = getPageObjects(['visualize', 'common']); + const log = getService('log'); class SharePage { + async isShareMenuOpen() { + return await testSubjects.exists('shareContextMenu'); + } + async clickShareTopNavButton() { return testSubjects.click('shareTopNavButton'); } + async openShareMenuItem(itemTitle) { + log.debug(`openShareMenuItem title:${itemTitle}`); + const isShareMenuOpen = await this.isShareMenuOpen(); + if (!isShareMenuOpen) { + await this.clickShareTopNavButton(); + } else { + // there is no easy way to ensure the menu is at the top level + // so just close the existing menu + await this.clickShareTopNavButton(); + // and then re-open the menu + await this.clickShareTopNavButton(); + } + + return testSubjects.click(`sharePanel-${itemTitle.replace(' ', '')}`); + } + async getSharedUrl() { return await testSubjects.getAttribute('copyShareUrlButton', 'data-share-url'); } diff --git a/x-pack/package.json b/x-pack/package.json index c4f520240351e0..df9969e1256718 100644 --- a/x-pack/package.json +++ b/x-pack/package.json @@ -89,6 +89,7 @@ "@kbn/ui-framework": "link:../packages/kbn-ui-framework", "@samverschueren/stream-to-observable": "^0.3.0", "@slack/client": "^4.2.2", + "@types/moment-timezone": "^0.5.8", "angular-paging": "2.2.1", "angular-resource": "1.4.9", "angular-sanitize": "1.4.9", diff --git a/x-pack/plugins/dashboard_mode/public/dashboard_viewer.js b/x-pack/plugins/dashboard_mode/public/dashboard_viewer.js index 4cdae56cd0b773..454afaf884a785 100644 --- a/x-pack/plugins/dashboard_mode/public/dashboard_viewer.js +++ b/x-pack/plugins/dashboard_mode/public/dashboard_viewer.js @@ -27,6 +27,7 @@ import 'uiExports/docViews'; import 'uiExports/fieldFormats'; import 'uiExports/search'; import 'uiExports/autocompleteProviders'; +import 'uiExports/shareContextMenuExtensions'; import _ from 'lodash'; import 'ui/autoload/all'; import 'plugins/kibana/dashboard'; diff --git a/x-pack/plugins/reporting/export_types/csv/public/index.js b/x-pack/plugins/reporting/export_types/csv/public/index.js deleted file mode 100644 index 1fd1483e658fc3..00000000000000 --- a/x-pack/plugins/reporting/export_types/csv/public/index.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { JobParamsProvider } from './job_params_provider'; -import { metadata } from '../metadata'; - -export function register(registry) { - registry.register({ - ...metadata, - JobParamsProvider - }); -} diff --git a/x-pack/plugins/reporting/export_types/csv/public/job_params_provider.js b/x-pack/plugins/reporting/export_types/csv/public/job_params_provider.js deleted file mode 100644 index ea626a14dc4961..00000000000000 --- a/x-pack/plugins/reporting/export_types/csv/public/job_params_provider.js +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -export function JobParamsProvider() { - return async function (controller) { - const title = controller.getSharingTitle(); - const type = controller.getSharingType(); - const sharingData = await controller.getSharingData(); - - return { - title, - type, - ...sharingData - }; - }; -} diff --git a/x-pack/plugins/reporting/export_types/printable_pdf/public/index.js b/x-pack/plugins/reporting/export_types/printable_pdf/public/index.js deleted file mode 100644 index 823e59cc1ffe77..00000000000000 --- a/x-pack/plugins/reporting/export_types/printable_pdf/public/index.js +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import './options'; -import { JobParamsProvider } from './job_params_provider'; -import { metadata } from '../metadata'; - -export function register(registry) { - registry.register({ - ...metadata, - JobParamsProvider, - optionsTemplate: `` - }); -} diff --git a/x-pack/plugins/reporting/export_types/printable_pdf/public/job_params_provider.js b/x-pack/plugins/reporting/export_types/printable_pdf/public/job_params_provider.js deleted file mode 100644 index 4b8d9064b5a5c0..00000000000000 --- a/x-pack/plugins/reporting/export_types/printable_pdf/public/job_params_provider.js +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import chrome from 'ui/chrome'; -import { - getUnhashableStatesProvider, - unhashUrl, -} from 'ui/state_management/state_hashing'; -import moment from 'moment-timezone'; -import { getLayout } from './layouts'; - - -export function JobParamsProvider(Private, config) { - const getUnhashableStates = Private(getUnhashableStatesProvider); - - function parseRelativeUrl(location) { - // We need to convert the hashed states in the URL back into their original RISON values, - // because this URL will be sent to the API. - const unhashedUrl = unhashUrl(location.href, getUnhashableStates()); - - const relativeUrl = unhashedUrl.replace(location.origin + chrome.getBasePath(), ''); - return relativeUrl; - } - - return function jobParams(controller, options) { - const layout = getLayout(options.layoutId); - const browserTimezone = config.get('dateFormat:tz') === 'Browser' ? moment.tz.guess() : config.get('dateFormat:tz'); - const relativeUrl = parseRelativeUrl(window.location); - - return { - title: controller.getSharingTitle(), - objectType: controller.getSharingType(), - browserTimezone: browserTimezone, - relativeUrls: [ relativeUrl ], - layout: layout.getJobParams(), - }; - }; -} diff --git a/x-pack/plugins/reporting/export_types/printable_pdf/public/layouts/index.js b/x-pack/plugins/reporting/export_types/printable_pdf/public/layouts/index.js deleted file mode 100644 index 5a32d086b07237..00000000000000 --- a/x-pack/plugins/reporting/export_types/printable_pdf/public/layouts/index.js +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { print } from './print'; -import { preserveLayout } from './preserve_layout'; -import { LayoutTypes } from '../../common/constants'; - -export function getLayout(name) { - switch (name) { - case LayoutTypes.PRINT: - return print; - case LayoutTypes.PRESERVE_LAYOUT: - return preserveLayout; - default: - throw new Error(`Unexpected layout of ${name}`); - } -} \ No newline at end of file diff --git a/x-pack/plugins/reporting/export_types/printable_pdf/public/layouts/preserve_layout.js b/x-pack/plugins/reporting/export_types/printable_pdf/public/layouts/preserve_layout.js deleted file mode 100644 index a8bb3e3c8c5dc6..00000000000000 --- a/x-pack/plugins/reporting/export_types/printable_pdf/public/layouts/preserve_layout.js +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { LayoutTypes } from '../../common/constants'; - -export const preserveLayout = { - getJobParams() { - const el = document.querySelector('[data-shared-items-container]'); - const bounds = el.getBoundingClientRect(); - - return { - id: LayoutTypes.PRESERVE_LAYOUT, - dimensions: { - height: bounds.height, - width: bounds.width, - } - }; - } -}; diff --git a/x-pack/plugins/reporting/export_types/printable_pdf/public/options.html b/x-pack/plugins/reporting/export_types/printable_pdf/public/options.html deleted file mode 100644 index 7c50941f1cd17c..00000000000000 --- a/x-pack/plugins/reporting/export_types/printable_pdf/public/options.html +++ /dev/null @@ -1,10 +0,0 @@ -
- - -
diff --git a/x-pack/plugins/reporting/export_types/printable_pdf/public/options.js b/x-pack/plugins/reporting/export_types/printable_pdf/public/options.js deleted file mode 100644 index 804185ca0b508d..00000000000000 --- a/x-pack/plugins/reporting/export_types/printable_pdf/public/options.js +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { uiModules } from 'ui/modules'; -import template from './options.html'; - -const module = uiModules.get('xpack/reporting'); - -module.directive('pdfOptions', () => { - return { - restrict: 'E', - template, - link: function ($scope) { - if (!$scope.options.layoutId) { - $scope.options.layoutId = 'print'; - } - } - }; -}); diff --git a/x-pack/plugins/reporting/index.js b/x-pack/plugins/reporting/index.js index fdf4948fb408d0..ee1514e9bf9246 100644 --- a/x-pack/plugins/reporting/index.js +++ b/x-pack/plugins/reporting/index.js @@ -32,10 +32,9 @@ export const reporting = (kibana) => { require: ['kibana', 'elasticsearch', 'xpack_main'], uiExports: { - navbarExtensions: [ - 'plugins/reporting/controls/discover', - 'plugins/reporting/controls/visualize', - 'plugins/reporting/controls/dashboard', + shareContextMenuExtensions: [ + 'plugins/reporting/share_context_menu/register_csv_reporting', + 'plugins/reporting/share_context_menu/register_reporting', ], hacks: ['plugins/reporting/hacks/job_completion_notifier'], home: ['plugins/reporting/register_feature'], diff --git a/x-pack/plugins/reporting/public/components/reporting_panel_content.tsx b/x-pack/plugins/reporting/public/components/reporting_panel_content.tsx new file mode 100644 index 00000000000000..7aa49e0e6680f8 --- /dev/null +++ b/x-pack/plugins/reporting/public/components/reporting_panel_content.tsx @@ -0,0 +1,190 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +// TODO: Remove once typescript definitions are in EUI +declare module '@elastic/eui' { + export const EuiCopy: React.SFC; + export const EuiForm: React.SFC; +} + +import { EuiButton, EuiCopy, EuiForm, EuiFormRow, EuiSpacer, EuiText } from '@elastic/eui'; +import React, { Component, ReactElement } from 'react'; +import { KFetchError } from 'ui/kfetch/kfetch_error'; +import { toastNotifications } from 'ui/notify'; +import url from 'url'; +import { reportingClient } from '../lib/reporting_client'; + +interface Props { + reportType: string; + objectId?: string; + objectType: string; + getJobParams: () => any; + options?: ReactElement; + isDirty: boolean; + onClose: () => void; +} + +interface State { + isStale: boolean; + absoluteUrl: string; +} + +export class ReportingPanelContent extends Component { + private mounted?: boolean; + + constructor(props: Props) { + super(props); + + this.state = { + isStale: false, + absoluteUrl: '', + }; + } + + public componentWillUnmount() { + window.removeEventListener('hashchange', this.markAsStale); + window.removeEventListener('resize', this.setAbsoluteReportGenerationUrl); + + this.mounted = false; + } + + public componentDidMount() { + this.mounted = true; + this.setAbsoluteReportGenerationUrl(); + + window.addEventListener('hashchange', this.markAsStale, false); + window.addEventListener('resize', this.setAbsoluteReportGenerationUrl); + } + + public render() { + if (this.isNotSaved() || this.props.isDirty || this.state.isStale) { + return ( + + + {this.renderGenerateReportButton(true)} + + + ); + } + + const reportMsg = `${this.prettyPrintReportingType()}s can take a minute or two to generate based upon the size of your ${ + this.props.objectType + }.`; + + return ( + + +

{reportMsg}

+
+ + + {this.props.options} + + {this.renderGenerateReportButton(false)} + + + +

+ Alternatively, copy this POST URL to call generation from outside Kibana or from + Watcher. +

+
+ + + + {(copy: () => void) => ( + + Copy POST URL + + )} + +
+ ); + } + + private renderGenerateReportButton = (isDisabled: boolean) => { + return ( + + Generate {this.prettyPrintReportingType()} + + ); + }; + + private prettyPrintReportingType = () => { + switch (this.props.reportType) { + case 'printablePdf': + return 'PDF'; + case 'csv': + return 'CSV'; + default: + return this.props.reportType; + } + }; + + private markAsStale = () => { + if (!this.mounted) { + return; + } + + this.setState({ isStale: true }); + }; + + private isNotSaved = () => { + return this.props.objectId === undefined || this.props.objectId === ''; + }; + + private setAbsoluteReportGenerationUrl = () => { + if (!this.mounted) { + return; + } + + const relativePath = reportingClient.getReportingJobPath( + this.props.reportType, + this.props.getJobParams() + ); + const absoluteUrl = url.resolve(window.location.href, relativePath); + this.setState({ absoluteUrl }); + }; + + private createReportingJob = () => { + return reportingClient + .createReportingJob(this.props.reportType, this.props.getJobParams()) + .then(() => { + toastNotifications.addSuccess({ + title: `Queued report for ${this.props.objectType}`, + text: 'Track its progress in Management', + 'data-test-subj': 'queueReportSuccess', + }); + this.props.onClose(); + }) + .catch((kfetchError: KFetchError) => { + if (kfetchError.message === 'not exportable') { + return toastNotifications.addWarning({ + title: `Only saved ${this.props.objectType} can be exported`, + text: 'Please save your work first', + }); + } + + const defaultMessage = + kfetchError.res.status === 403 + ? `You don't have permission to generate this report.` + : `Can't reach the server. Please try again.`; + + toastNotifications.addDanger({ + title: 'Reporting error', + text: kfetchError.message || defaultMessage, + 'data-test-subj': 'queueReportError', + }); + }); + }; +} diff --git a/x-pack/plugins/reporting/public/components/screen_capture_panel_content.tsx b/x-pack/plugins/reporting/public/components/screen_capture_panel_content.tsx new file mode 100644 index 00000000000000..c18f1bbbc5160a --- /dev/null +++ b/x-pack/plugins/reporting/public/components/screen_capture_panel_content.tsx @@ -0,0 +1,86 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { EuiSpacer, EuiSwitch } from '@elastic/eui'; +import React, { Component, Fragment } from 'react'; +import { ReportingPanelContent } from './reporting_panel_content'; + +interface Props { + reportType: string; + objectId?: string; + objectType: string; + getJobParams: () => any; + isDirty: boolean; + onClose: () => void; +} + +interface State { + usePrintLayout: boolean; +} + +export class ScreenCapturePanelContent extends Component { + constructor(props: Props) { + super(props); + + this.state = { + usePrintLayout: false, + }; + } + + public render() { + return ( + + ); + } + + private renderOptions = () => { + return ( + + + + + ); + }; + + private handlePrintLayoutChange = (evt: any) => { + this.setState({ usePrintLayout: evt.target.checked }); + }; + + private getLayout = () => { + if (this.state.usePrintLayout) { + return { id: 'print' }; + } + + const el = document.querySelector('[data-shared-items-container]'); + const bounds = el ? el.getBoundingClientRect() : { height: 768, width: 1024 }; + return { + id: 'preserve_layout', + dimensions: { + height: bounds.height, + width: bounds.width, + }, + }; + }; + + private getJobParams = () => { + const jobParams = this.props.getJobParams(); + jobParams.layout = this.getLayout(); + return jobParams; + }; +} diff --git a/x-pack/plugins/reporting/public/controls/dashboard.js b/x-pack/plugins/reporting/public/controls/dashboard.js deleted file mode 100644 index ea0d9adfaffb48..00000000000000 --- a/x-pack/plugins/reporting/public/controls/dashboard.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import 'plugins/reporting/directives/export_config'; -import { XPackInfoProvider } from 'plugins/xpack_main/services/xpack_info'; -import { NavBarExtensionsRegistryProvider } from 'ui/registry/navbar_extensions'; -import { DashboardConstants } from 'plugins/kibana/dashboard/dashboard_constants'; - -function dashboardReportProvider(Private, $location, dashboardConfig) { - const xpackInfo = Private(XPackInfoProvider); - return { - appName: 'dashboard', - key: 'reporting-dashboard', - label: 'Reporting', - template: ``, - description: 'Dashboard Report', - hideButton: () => ( - dashboardConfig.getHideWriteControls() - || $location.path() === DashboardConstants.LANDING_PAGE_PATH - || !xpackInfo.get('features.reporting.printablePdf.showLinks', false) - ), - disableButton: () => !xpackInfo.get('features.reporting.printablePdf.enableLinks', false), - tooltip: () => xpackInfo.get('features.reporting.printablePdf.message'), - testId: 'topNavReportingLink', - }; -} - -NavBarExtensionsRegistryProvider.register(dashboardReportProvider); diff --git a/x-pack/plugins/reporting/public/controls/discover.js b/x-pack/plugins/reporting/public/controls/discover.js deleted file mode 100644 index 605474278e4c7e..00000000000000 --- a/x-pack/plugins/reporting/public/controls/discover.js +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import 'plugins/reporting/directives/export_config'; -import { XPackInfoProvider } from 'plugins/xpack_main/services/xpack_info'; -import { NavBarExtensionsRegistryProvider } from 'ui/registry/navbar_extensions'; - -function discoverReportProvider(Private) { - const xpackInfo = Private(XPackInfoProvider); - return { - appName: 'discover', - - key: 'reporting-discover', - label: 'Reporting', - template: '', - description: 'Search Report', - hideButton: () => !xpackInfo.get('features.reporting.csv.showLinks', false), - disableButton: () => !xpackInfo.get('features.reporting.csv.enableLinks', false), - tooltip: () => xpackInfo.get('features.reporting.csv.message'), - testId: 'topNavReportingLink', - }; -} - -NavBarExtensionsRegistryProvider.register(discoverReportProvider); diff --git a/x-pack/plugins/reporting/public/controls/visualize.js b/x-pack/plugins/reporting/public/controls/visualize.js deleted file mode 100644 index a5dfde62d23653..00000000000000 --- a/x-pack/plugins/reporting/public/controls/visualize.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import 'plugins/reporting/directives/export_config'; -import { XPackInfoProvider } from 'plugins/xpack_main/services/xpack_info'; -import { NavBarExtensionsRegistryProvider } from 'ui/registry/navbar_extensions'; -import { VisualizeConstants } from 'plugins/kibana/visualize/visualize_constants'; - -function visualizeReportProvider(Private, $location) { - const xpackInfo = Private(XPackInfoProvider); - return { - appName: 'visualize', - - key: 'reporting-visualize', - label: 'Reporting', - template: ` - `, - description: 'Visualization Report', - hideButton: () => ( - $location.path() === VisualizeConstants.LANDING_PAGE_PATH - || $location.path() === VisualizeConstants.WIZARD_STEP_1_PAGE_PATH - || $location.path() === VisualizeConstants.WIZARD_STEP_2_PAGE_PATH - || !xpackInfo.get('features.reporting.printablePdf.showLinks', false) - ), - disableButton: () => !xpackInfo.get('features.reporting.printablePdf.enableLinks', false), - tooltip: () => xpackInfo.get('features.reporting.printablePdf.message'), - testId: 'topNavReportingLink', - }; -} - -NavBarExtensionsRegistryProvider.register(visualizeReportProvider); diff --git a/x-pack/plugins/reporting/public/directives/export_config/export_config.html b/x-pack/plugins/reporting/public/directives/export_config/export_config.html deleted file mode 100644 index c02d0225586b0c..00000000000000 --- a/x-pack/plugins/reporting/public/directives/export_config/export_config.html +++ /dev/null @@ -1,55 +0,0 @@ -
-
-

- Reporting -

- -
-
- -
-
- -
- - -
- - -
- - - -
-
- -
- Please save your work before generating a report. -
diff --git a/x-pack/plugins/reporting/public/directives/export_config/export_config.js b/x-pack/plugins/reporting/public/directives/export_config/export_config.js deleted file mode 100644 index ea15487893bcc3..00000000000000 --- a/x-pack/plugins/reporting/public/directives/export_config/export_config.js +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import angular from 'angular'; -import { debounce } from 'lodash'; -import 'plugins/reporting/services/document_control'; -import 'plugins/reporting/services/export_types'; -import './export_config.less'; -import template from 'plugins/reporting/directives/export_config/export_config.html'; -import { toastNotifications } from 'ui/notify'; -import { uiModules } from 'ui/modules'; -import { stateMonitorFactory } from 'ui/state_management/state_monitor_factory'; -import url from 'url'; - -const module = uiModules.get('xpack/reporting'); - -module.directive('exportConfig', ($rootScope, reportingDocumentControl, reportingExportTypes, $location, $compile) => { - const createAbsoluteUrl = relativePath => { - return url.resolve($location.absUrl(), relativePath); - }; - - return { - restrict: 'E', - scope: {}, - require: ['?^dashboardApp', '?^visualizeApp', '?^discoverApp'], - controllerAs: 'exportConfig', - template, - transclude: true, - async link($scope, $el, $attr, controllers) { - const actualControllers = controllers.filter(c => c !== null); - if (actualControllers.length !== 1) { - throw new Error(`Expected there to be 1 controller, but there are ${actualControllers.length}`); - } - const controller = actualControllers[0]; - $scope.exportConfig.isDirty = () => controller.appStatus.dirty; - if (controller.appStatus.dirty) { - return; - } - - const exportTypeId = $attr.enabledExportType; - $scope.exportConfig.exportType = reportingExportTypes.getById(exportTypeId); - $scope.exportConfig.objectType = $attr.objectType; - - $scope.options = $attr.options ? $scope.$eval($attr.options) : {}; - if ($scope.exportConfig.exportType.optionsTemplate) { - $el.find('.options').append($compile($scope.exportConfig.exportType.optionsTemplate)($scope)); - } - - $scope.getRelativePath = (options) => { - return reportingDocumentControl.getPath($scope.exportConfig.exportType, controller, options || $scope.options); - }; - - $scope.updateUrl = (options) => { - return $scope.getRelativePath(options) - .then(relativePath => { - $scope.exportConfig.absoluteUrl = createAbsoluteUrl(relativePath); - }); - }; - - $scope.$watch('options', newOptions => $scope.updateUrl(newOptions), true); - - await $scope.updateUrl(); - }, - controller($scope, $document, $window, $timeout, globalState) { - const stateMonitor = stateMonitorFactory.create(globalState); - stateMonitor.onChange(() => { - if ($scope.exportConfig.isDirty()) { - return; - } - - $scope.updateUrl(); - }); - - const onResize = debounce(() => { - $scope.updateUrl(); - }, 200); - - angular.element($window).on('resize', onResize); - $scope.$on('$destroy', () => { - angular.element($window).off('resize', onResize); - stateMonitor.destroy(); - }); - - this.export = () => { - return $scope.getRelativePath() - .then(relativePath => { - return reportingDocumentControl.create(relativePath); - }) - .then(() => { - toastNotifications.addSuccess({ - title: `Queued report for ${this.objectType}`, - text: 'Track its progress in Management', - 'data-test-subj': 'queueReportSuccess', - }); - }) - .catch((err) => { - if (err.message === 'not exportable') { - return toastNotifications.addWarning({ - title: 'Only saved dashboards can be exported', - text: 'Please save your work first', - }); - } - - toastNotifications.addDanger({ - title: 'Reporting error', - text: err.message || `Can't reach the server. Please try again.`, - 'data-test-subj': 'queueReportError', - }); - }); - }; - - this.copyToClipboard = selector => { - // updating the URL in the input because it could have potentially changed and we missed the update - $scope.updateUrl() - .then(() => { - - // we're using $timeout to make sure the URL has been updated in the HTML as this is where - // we're copying the ext from - $timeout(() => { - const copyTextarea = $document.find(selector)[0]; - copyTextarea.select(); - - try { - const isCopied = document.execCommand('copy'); - if (isCopied) { - toastNotifications.add('URL copied to clipboard'); - } else { - toastNotifications.add('Press Ctrl+C to copy URL'); - } - } catch (err) { - toastNotifications.add('Press Ctrl+C to copy URL'); - } - }); - }); - }; - } - }; -}); diff --git a/x-pack/plugins/reporting/public/directives/export_config/export_config.less b/x-pack/plugins/reporting/public/directives/export_config/export_config.less deleted file mode 100644 index d304ca9fb01500..00000000000000 --- a/x-pack/plugins/reporting/public/directives/export_config/export_config.less +++ /dev/null @@ -1,19 +0,0 @@ -export-config { - .generate-controls { - button { - margin-right: 10px; - } - } - - .input-group { - - .clipboard-button { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - - .form-control.url { - cursor: text; - } - } -} diff --git a/x-pack/plugins/reporting/public/directives/export_config/index.js b/x-pack/plugins/reporting/public/directives/export_config/index.js deleted file mode 100644 index 06c257934cacdc..00000000000000 --- a/x-pack/plugins/reporting/public/directives/export_config/index.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import './export_config'; diff --git a/x-pack/plugins/reporting/public/lib/reporting_client.ts b/x-pack/plugins/reporting/public/lib/reporting_client.ts new file mode 100644 index 00000000000000..80af64706cba06 --- /dev/null +++ b/x-pack/plugins/reporting/public/lib/reporting_client.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import { kfetch } from 'ui/kfetch'; + +// @ts-ignore +import rison from 'rison-node'; +import chrome from 'ui/chrome'; +import { QueryString } from 'ui/utils/query_string'; +import { jobCompletionNotifications } from '../services/job_completion_notifications'; + +const API_BASE_URL = '/api/reporting/generate'; + +class ReportingClient { + public getReportingJobPath = (exportType: string, jobParams: object) => { + return `${chrome.addBasePath(API_BASE_URL)}/${exportType}?${QueryString.param( + 'jobParams', + rison.encode(jobParams) + )}`; + }; + + public createReportingJob = async (exportType: string, jobParams: any) => { + const query = { + jobParams: rison.encode(jobParams), + }; + const resp = await kfetch({ method: 'POST', pathname: `${API_BASE_URL}/${exportType}`, query }); + jobCompletionNotifications.add(resp.job.id); + return resp; + }; +} + +export const reportingClient = new ReportingClient(); diff --git a/x-pack/plugins/reporting/public/services/document_control.js b/x-pack/plugins/reporting/public/services/document_control.js deleted file mode 100644 index 74086fdc0dd6eb..00000000000000 --- a/x-pack/plugins/reporting/public/services/document_control.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import 'plugins/reporting/services/job_completion_notifications'; -import chrome from 'ui/chrome'; -import rison from 'rison-node'; -import { uiModules } from 'ui/modules'; -import { QueryString } from 'ui/utils/query_string'; - -uiModules.get('xpack/reporting') - .service('reportingDocumentControl', function (Private, $http, reportingJobCompletionNotifications, $injector) { - const $Promise = $injector.get('Promise'); - const mainEntry = '/api/reporting/generate'; - const reportPrefix = chrome.addBasePath(mainEntry); - - const getJobParams = (exportType, controller, options) => { - const jobParamsProvider = Private(exportType.JobParamsProvider); - return $Promise.resolve(jobParamsProvider(controller, options)); - }; - - this.getPath = (exportType, controller, options) => { - return getJobParams(exportType, controller, options) - .then(jobParams => { - return `${reportPrefix}/${exportType.id}?${QueryString.param('jobParams', rison.encode(jobParams))}`; - }); - }; - - this.create = (relativePath) => { - return $http.post(relativePath, {}) - .then(({ data }) => { - reportingJobCompletionNotifications.add(data.job.id); - return data; - }); - }; - }); diff --git a/x-pack/plugins/reporting/public/services/export_types.js b/x-pack/plugins/reporting/public/services/export_types.js deleted file mode 100644 index 09c78296ba0139..00000000000000 --- a/x-pack/plugins/reporting/public/services/export_types.js +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License; - * you may not use this file except in compliance with the Elastic License. - */ - -import { uiModules } from 'ui/modules'; -import { ExportTypesRegistry } from '../../common/export_types_registry'; - -export const exportTypesRegistry = new ExportTypesRegistry(); - -const context = require.context('../../export_types', true, /public\/index.js/); -context.keys().forEach(key => context(key).register(exportTypesRegistry)); - -uiModules.get('xpack/reporting') - .service('reportingExportTypes', function () { - this.getById = (exportTypeId) => { - return exportTypesRegistry.getById(exportTypeId); - }; - }); diff --git a/x-pack/plugins/reporting/export_types/printable_pdf/public/layouts/print.js b/x-pack/plugins/reporting/public/services/job_completion_notifications.d.ts similarity index 56% rename from x-pack/plugins/reporting/export_types/printable_pdf/public/layouts/print.js rename to x-pack/plugins/reporting/public/services/job_completion_notifications.d.ts index 64ba1035747848..3eacc3046e15a1 100644 --- a/x-pack/plugins/reporting/export_types/printable_pdf/public/layouts/print.js +++ b/x-pack/plugins/reporting/public/services/job_completion_notifications.d.ts @@ -4,12 +4,10 @@ * you may not use this file except in compliance with the Elastic License. */ -import { LayoutTypes } from '../../common/constants'; +declare class JobCompletionNotifications { + public add(jobId: string): void; +} -export const print = { - getJobParams() { - return { - id: LayoutTypes.PRINT - }; - } -}; +declare const jobCompletionNotifications: JobCompletionNotifications; + +export { jobCompletionNotifications }; diff --git a/x-pack/plugins/reporting/public/share_context_menu/register_csv_reporting.tsx b/x-pack/plugins/reporting/public/share_context_menu/register_csv_reporting.tsx new file mode 100644 index 00000000000000..15d9d1d86fc346 --- /dev/null +++ b/x-pack/plugins/reporting/public/share_context_menu/register_csv_reporting.tsx @@ -0,0 +1,71 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +// @ts-ignore: implicit any for JS file +import { XPackInfoProvider } from 'plugins/xpack_main/services/xpack_info'; +import React from 'react'; +import { ShareActionProps } from 'ui/share/share_action'; +import { ShareContextMenuExtensionsRegistryProvider } from 'ui/share/share_action_registry'; +import { ReportingPanelContent } from '../components/reporting_panel_content'; + +function reportingProvider(Private: any) { + const xpackInfo = Private(XPackInfoProvider); + const getShareActions = ({ + objectType, + objectId, + sharingData, + isDirty, + onClose, + }: ShareActionProps) => { + if ('search' !== objectType) { + return []; + } + + const getJobParams = () => { + return { + ...sharingData, + type: objectType, + }; + }; + + const shareActions = []; + if (xpackInfo.get('features.reporting.csv.showLinks', false)) { + const panelTitle = 'CSV Reports'; + + shareActions.push({ + shareMenuItem: { + name: panelTitle, + icon: 'document', + toolTipContent: xpackInfo.get('features.reporting.csv.message'), + disabled: !xpackInfo.get('features.reporting.csv.enableLinks', false) ? true : false, + ['data-test-subj']: 'csvReportMenuItem', + }, + panel: { + title: panelTitle, + content: ( + + ), + }, + }); + } + + return shareActions; + }; + + return { + id: 'csvReports', + getShareActions, + }; +} + +ShareContextMenuExtensionsRegistryProvider.register(reportingProvider); diff --git a/x-pack/plugins/reporting/public/share_context_menu/register_reporting.tsx b/x-pack/plugins/reporting/public/share_context_menu/register_reporting.tsx new file mode 100644 index 00000000000000..de4b5500316da4 --- /dev/null +++ b/x-pack/plugins/reporting/public/share_context_menu/register_reporting.tsx @@ -0,0 +1,95 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License; + * you may not use this file except in compliance with the Elastic License. + */ + +import moment from 'moment-timezone'; +// @ts-ignore: implicit any for JS file +import { XPackInfoProvider } from 'plugins/xpack_main/services/xpack_info'; +import React from 'react'; +import chrome from 'ui/chrome'; +import { ShareActionProps } from 'ui/share/share_action'; +import { ShareContextMenuExtensionsRegistryProvider } from 'ui/share/share_action_registry'; +import { unhashUrl } from 'ui/state_management/state_hashing'; +import { ScreenCapturePanelContent } from '../components/screen_capture_panel_content'; + +function reportingProvider(Private: any, dashboardConfig: any) { + const xpackInfo = Private(XPackInfoProvider); + const getShareActions = ({ + objectType, + objectId, + getUnhashableStates, + sharingData, + isDirty, + onClose, + }: ShareActionProps) => { + if (!['dashboard', 'visualization'].includes(objectType)) { + return []; + } + // Dashboard only mode does not currently support reporting + // https://github.com/elastic/kibana/issues/18286 + if (objectType === 'dashboard' && dashboardConfig.getHideWriteControls()) { + return []; + } + + const getReportingJobParams = () => { + // Replace hashes with original RISON values. + const unhashedUrl = unhashUrl(window.location.href, getUnhashableStates()); + const relativeUrl = unhashedUrl.replace(window.location.origin + chrome.getBasePath(), ''); + + const browserTimezone = + chrome.getUiSettingsClient().get('dateFormat:tz') === 'Browser' + ? moment.tz.guess() + : chrome.getUiSettingsClient().get('dateFormat:tz'); + + return { + ...sharingData, + objectType, + browserTimezone, + relativeUrls: [relativeUrl], + }; + }; + + const shareActions = []; + if (xpackInfo.get('features.reporting.printablePdf.showLinks', false)) { + const panelTitle = 'PDF Reports'; + + shareActions.push({ + shareMenuItem: { + name: panelTitle, + icon: 'document', + toolTipContent: xpackInfo.get('features.reporting.printablePdf.message'), + disabled: !xpackInfo.get('features.reporting.printablePdf.enableLinks', false) + ? true + : false, + ['data-test-subj']: 'pdfReportMenuItem', + }, + panel: { + title: panelTitle, + content: ( + + ), + }, + }); + } + + // TODO register PNG menu item once PNG is supported on server side + + return shareActions; + }; + + return { + id: 'screenCaptureReports', + getShareActions, + }; +} + +ShareContextMenuExtensionsRegistryProvider.register(reportingProvider); diff --git a/x-pack/test/functional/apps/security/secure_roles_perm.js b/x-pack/test/functional/apps/security/secure_roles_perm.js index 5a693e74b9327a..97f6b35f258714 100644 --- a/x-pack/test/functional/apps/security/secure_roles_perm.js +++ b/x-pack/test/functional/apps/security/secure_roles_perm.js @@ -78,7 +78,7 @@ export default function ({ getService, getPageObjects }) { await PageObjects.common.navigateToApp('discover'); await PageObjects.discover.loadSavedSearch('A Saved Search'); log.debug('click Reporting button'); - await PageObjects.reporting.openReportingPanel(); + await PageObjects.reporting.openCsvReportingPanel(); await PageObjects.reporting.clickGenerateReportButton(); const queueReportError = await PageObjects.reporting.getQueueReportError(); expect(queueReportError).to.be(true); diff --git a/x-pack/test/functional/page_objects/reporting_page.js b/x-pack/test/functional/page_objects/reporting_page.js index 4108668605f1e5..eab5d0603c73ec 100644 --- a/x-pack/test/functional/page_objects/reporting_page.js +++ b/x-pack/test/functional/page_objects/reporting_page.js @@ -15,7 +15,7 @@ export function ReportingPageProvider({ getService, getPageObjects }) { const esArchiver = getService('esArchiver'); const remote = getService('remote'); const kibanaServer = getService('kibanaServer'); - const PageObjects = getPageObjects(['common', 'security', 'header', 'settings']); + const PageObjects = getPageObjects(['common', 'security', 'header', 'settings', 'share']); class ReportingPage { async initTests() { @@ -31,18 +31,6 @@ export function ReportingPageProvider({ getService, getPageObjects }) { await remote.setWindowSize(1600, 850); } - async clickTopNavReportingLink() { - await retry.try(() => testSubjects.click('topNavReportingLink')); - } - - async isReportingPanelOpen() { - const generateReportButtonExists = await this.getGenerateReportButtonExists(); - const unsavedChangesWarningExists = await this.getUnsavedChangesWarningExists(); - const isOpen = generateReportButtonExists || unsavedChangesWarningExists; - log.debug('isReportingPanelOpen: ' + isOpen); - return isOpen; - } - async getUrlOfTab(tabIndex) { return await retry.try(async () => { log.debug(`reportingPage.getUrlOfTab(${tabIndex}`); @@ -118,20 +106,14 @@ export function ReportingPageProvider({ getService, getPageObjects }) { }); } - async openReportingPanel() { - log.debug('openReportingPanel'); - await retry.try(async () => { - const isOpen = await this.isReportingPanelOpen(); - - if (!isOpen) { - await this.clickTopNavReportingLink(); - } + async openCsvReportingPanel() { + log.debug('openCsvReportingPanel'); + await PageObjects.share.openShareMenuItem('CSV Reports'); + } - const wasOpened = await this.isReportingPanelOpen(); - if (!wasOpened) { - throw new Error('Reporting panel was not opened successfully'); - } - }); + async openPdfReportingPanel() { + log.debug('openPdfReportingPanel'); + await PageObjects.share.openShareMenuItem('PDF Reports'); } async clickDownloadReportButton(timeout) { @@ -143,14 +125,6 @@ export function ReportingPageProvider({ getService, getPageObjects }) { await Promise.all(toasts.map(t => t.click())); } - async getUnsavedChangesWarningExists() { - return await testSubjects.exists('unsavedChangesReportingWarning'); - } - - async getGenerateReportButtonExists() { - return await testSubjects.exists('generateReportButton'); - } - async getQueueReportError() { return await testSubjects.exists('queueReportError'); } @@ -159,8 +133,8 @@ export function ReportingPageProvider({ getService, getPageObjects }) { return await retry.try(() => testSubjects.find('generateReportButton')); } - async clickPreserveLayoutOption() { - await retry.try(() => testSubjects.click('preserveLayoutOption')); + async checkUsePrintLayout() { + await retry.try(() => testSubjects.click('usePrintLayout')); } async clickGenerateReportButton() { diff --git a/x-pack/test/reporting/functional/reporting.js b/x-pack/test/reporting/functional/reporting.js index 3621b1c518dd3d..515347c45965c0 100644 --- a/x-pack/test/reporting/functional/reporting.js +++ b/x-pack/test/reporting/functional/reporting.js @@ -29,19 +29,18 @@ export default function ({ getService, getPageObjects }) { await PageObjects.reporting.initTests(); }); - const expectUnsavedChangesWarning = async () => { - await PageObjects.reporting.openReportingPanel(); - const warningExists = await PageObjects.reporting.getUnsavedChangesWarningExists(); - expect(warningExists).to.be(true); - const buttonExists = await PageObjects.reporting.getGenerateReportButtonExists(); - expect(buttonExists).to.be(false); + const expectDisabledGenerateReportButton = async () => { + const generateReportButton = await PageObjects.reporting.getGenerateReportButton(); + await retry.try(async () => { + const isDisabled = await generateReportButton.getProperty('disabled'); + expect(isDisabled).to.be(true); + }); }; const expectEnabledGenerateReportButton = async () => { - await PageObjects.reporting.openReportingPanel(); - const printPdfButton = await PageObjects.reporting.getGenerateReportButton(); + const generateReportButton = await PageObjects.reporting.getGenerateReportButton(); await retry.try(async () => { - const isDisabled = await printPdfButton.getProperty('disabled'); + const isDisabled = await generateReportButton.getProperty('disabled'); expect(isDisabled).to.be(false); }); }; @@ -72,11 +71,13 @@ export default function ({ getService, getPageObjects }) { it('is not available if new', async () => { await PageObjects.common.navigateToApp('dashboard'); await PageObjects.dashboard.clickNewDashboard(); - await expectUnsavedChangesWarning(); + await PageObjects.reporting.openPdfReportingPanel(); + await expectDisabledGenerateReportButton(); }); it('becomes available when saved', async () => { await PageObjects.dashboard.saveDashboard('mydash'); + await PageObjects.reporting.openPdfReportingPanel(); await expectEnabledGenerateReportButton(); }); }); @@ -101,7 +102,8 @@ export default function ({ getService, getPageObjects }) { await PageObjects.dashboard.saveDashboard('report test'); - await PageObjects.reporting.openReportingPanel(); + await PageObjects.reporting.openPdfReportingPanel(); + await PageObjects.reporting.checkUsePrintLayout(); await PageObjects.reporting.clickGenerateReportButton(); await PageObjects.reporting.clickDownloadReportButton(60000); @@ -128,7 +130,8 @@ export default function ({ getService, getPageObjects }) { await PageObjects.dashboard.switchToEditMode(); await PageObjects.dashboard.useMargins(true); await PageObjects.dashboard.saveDashboard('report test'); - await PageObjects.reporting.openReportingPanel(); + await PageObjects.reporting.openPdfReportingPanel(); + await PageObjects.reporting.checkUsePrintLayout(); await PageObjects.reporting.clickGenerateReportButton(); await PageObjects.reporting.clickDownloadReportButton(60000); @@ -156,9 +159,8 @@ export default function ({ getService, getPageObjects }) { // report than phantom. this.timeout(360000); - await PageObjects.reporting.openReportingPanel(); + await PageObjects.reporting.openPdfReportingPanel(); await PageObjects.reporting.forceSharedItemsContainerSize({ width: 1405 }); - await PageObjects.reporting.clickPreserveLayoutOption(); await PageObjects.reporting.clickGenerateReportButton(); await PageObjects.reporting.removeForceSharedItemsContainerSize(); @@ -190,23 +192,25 @@ export default function ({ getService, getPageObjects }) { describe('Generate CSV button', () => { it('is not available if new', async () => { await PageObjects.common.navigateToApp('discover'); - await expectUnsavedChangesWarning(); + await PageObjects.reporting.openCsvReportingPanel(); + await expectDisabledGenerateReportButton(); }); it('becomes available when saved', async () => { await PageObjects.discover.saveSearch('my search'); + await PageObjects.reporting.openCsvReportingPanel(); await expectEnabledGenerateReportButton(); }); it('generates a report with data', async () => { await PageObjects.reporting.setTimepickerInDataRange(); - await PageObjects.reporting.clickTopNavReportingLink(); + await PageObjects.reporting.openCsvReportingPanel(); await expectReportCanBeCreated(); }); it('generates a report with no data', async () => { await PageObjects.reporting.setTimepickerInNoDataRange(); - await PageObjects.reporting.clickTopNavReportingLink(); + await PageObjects.reporting.openCsvReportingPanel(); await expectReportCanBeCreated(); }); }); @@ -218,7 +222,8 @@ export default function ({ getService, getPageObjects }) { await PageObjects.common.navigateToUrl('visualize', 'new'); await PageObjects.visualize.clickAreaChart(); await PageObjects.visualize.clickNewSearch(); - await expectUnsavedChangesWarning(); + await PageObjects.reporting.openPdfReportingPanel(); + await expectDisabledGenerateReportButton(); }); it('becomes available when saved', async () => { @@ -227,6 +232,7 @@ export default function ({ getService, getPageObjects }) { await PageObjects.visualize.selectAggregation('Date Histogram'); await PageObjects.visualize.clickGo(); await PageObjects.visualize.saveVisualizationExpectSuccess('my viz'); + await PageObjects.reporting.openPdfReportingPanel(); await expectEnabledGenerateReportButton(); }); @@ -235,7 +241,7 @@ export default function ({ getService, getPageObjects }) { // function is taking about 15 seconds per comparison in jenkins. this.timeout(180000); - await PageObjects.reporting.openReportingPanel(); + await PageObjects.reporting.openPdfReportingPanel(); await PageObjects.reporting.clickGenerateReportButton(); await PageObjects.reporting.clickDownloadReportButton(60000); diff --git a/x-pack/test/reporting/functional/reports/baseline/visualize_print.pdf b/x-pack/test/reporting/functional/reports/baseline/visualize_print.pdf index e42145c9fb293f138c75170e0a2d8fb9ad08e987..0337757ecb5f55c968298a82f7fca89cf6e4532f 100644 GIT binary patch delta 107470 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 lT)HO267qk;%)w@$eVI?J{tF||9a{hZ delta 55887 zcma&O1yGf37dE;96;u=yX(8|E$@RFn^)AL$UN(-$>|C5|ToKC{ zd{@-fpNquc!GA|J9%qomU(^7 zcQFu!$H7yNTYJ1e|C&oOs@6z((f>9ff1}jK2fDI|%F5c!DFWt(dqMh`{ZQDRljC+@ zOxcJEXfCDY?1oj$e1% z5WP+!GS&)Ra&TEF`7!!9gs^5#zh^lf?{y(`hBqkragK16ZDI5Ame_ZG{6Ud%lH4zb z9|k16hRe<>yIRQES6lM?6QUtO%jKe1c&lnp0@Suz)A5z;Nw@pLA&PBHeNQEY7Y5rO z6)htQ2);ea_v>fYk&5HqOZWbHnYYw5?s4{eJmaJDfYYaRllf#0oB{yVXr^YC3CYcb3P-IP^nv&$m?kBglN{b*joaR zr9M#iJ^$Rf)>})ZF3`&Hx%pb+$#Y^+uKPEw1XCY>qYX(JI$Jl$CLGY6_|9$mk!zKK zEHl|U;5{xK&YG*hkB_@fYp+7Xl-%yk*|*&IE-P93{lkoR3(L`OgAOCzeL*GL@szyi z$UW^=(c3=pUk`|=bj6w@>6i;;nA`K&P5BxAD7fK8CzCuW?772jLZ)uZev542*{fcb zKKsZFiaoZOoO_i|Tgf+TEevkh%ZN(%H{%N~PjnMHHdPePm+_P%&N1oS{4pa2)I~A5 zpG4f%Frs4Tsj`q&6Sd`8c~<8c=4=i1(ifp zzkZFy{e&ABBvHf@BNm8@i<9@s|Mlh7$*azUi!MvHL?tfz9BpkRLF!fw+@Gu^Bg)KT z?IrDOkmL5!<7qq$GN|X{y|mWW(G}Jb9}HDxXv%15d*7-g*nOwGO7rwe%RT((64dHm z_|Nm6lS|-O%z1L$zlx$x2LF@rWbxc>DpM|O@y6Y*8r}MAUUke+Eb zwzw+~d;;)qcdl(RiYhwsczI?*cPwE)c6w*LQXR58eRVva6Vfe<(#GYy(u2FlA6FP<)Mo8r*WY%7oI6jqUI*P195?0cW?^Y< ztGr@*7Yh-Dxl9J6K;S>G(LXx%+wnZf(*a@|huiPsHLaeh&=&AbO?~&&)4WbDcJRq3 zt&;Ikc~OqKD-R;(w!@9T)^AX9)UM_1qZBliZ}tl{I$n4Dj<+Al6-K@h&Bkpt75gPF zIxZq20yT2HPk!7p#W~2*#Ml#;!BmQ1yK%8PyuO!RVgu*b4s=EsY{v$UavZTp5Ox&4k%K zArV_0W6M7(+G+IV6&s6j*E!0`_)jyAOFw>ei8Zhr)JFKF6#T8Cn3hq^;5lENfmd5c z6M66IN_ZR9%*@f_PgFmQ2M*PYbfN8kj}%oFWgHlHg}EN-HxD&6JThgSAQ>r1wV3NF zF1Fd<8MOK1xTayZ+U5zJl^oN#+~G#pr~Yq&3<7Z<`GHsLjYP_$_SN-;ma6|dAz-H>s(Npcz(%y&ZFZOdRXm_nO>SluT zuigy3za5g$46}o&r=h7<@S<=Cn?%^1S*V`Wu4xoK}EUD z>@`(lzb)?P8(m$&;$B~zL%gB--!$m01C7Iwj8i1T87D+JnBqcx9NXWK~kM zVcL%@p;yBQ>JL>{{@StL?WEBN@HH_h2O~&#v=*TR73$%B-}3Q0TPDkI6|1C44g!BG zIl%Sz2_p_YZ5uZO$Ra4l3(F@^8%&xMHuhYrj`38x!NCO%S=^T0tBb-aM%Flv6gdXK za>eleceH{Dvqb21D5aS89Ny0U&E13>E}GTX$Zhzpuvosfp6a!6+HliQpIh70-moCi z<=9M7en`!tYtOc)#D-2ga(~BT<*Dvr0_vhEelEQ|=h+cW&&yox4v*zW!zIApXQi=}&f{ z3Miftan)@$7KC(nKdUdv=qd38vI+@oun07$mqxt>oZI7zU)I@JNNniZe`p7Ng zCM;=b2Od(nCB@3Dtrs1 zRL|Tx{0pf@&-qWB&OI7u{Jw>MYx8LozKWm;_{V4wh@xx%d<}tUVEoqy5QyBrZyDCC zPk#QqwX~+DwDh>w^2tt zPG2U5?OBFOVd6f{cPeveb?czFpvtr6TudKXx7m@k6qB5kxcRRSArLeL^C@e!1wWgN zA|K)@PPNB=LzE8J zN0w)UTn43#VylVaCG&Jf+P2@)YBJJIBC1LIv_A$7gj+06v#17C{kq%1HA$W@PGNJ3 z%*s<(OJy0HT9>1+B3YOLj{WyPYNb-Gk$&YqKZ)+~XzsKspZqkJ1{N|Y?iF1Nh{?R> zyqO6*h$)4cY>|T(Rlw_ftO8e4y4SCC3HT1uMAMtd_{AKXezKXqLSFM|s3A%BR zD>k?_)sik4%St{XDJ@z$KGMT;V()f)HEMpW-u!ydsW<=G z)!hl!>t#^E%vjFg{Tl5;?cKRFahrx)5cO9XXUVGlly=R&N|xo}$h1AxlZs)5sQmK@ z74E#IEB^!#0C}EmIs_LOPv0umENg3XiPyZBlB(qz-~=^>ug7upuiOS$NH%6EKRj`e9f9Vwe^w_#SH^x z6)9rq>0oa3ec_Irr9Hvmg8cF0wI`Ic|MN)i5AT-AShR1{l~?|Z9TXln4>YhGrBe;P@Y7c)m5FQizsWo`=;+X$-R zlm5rmF9b)PSZd#Rq_Nv26&{TIu&*NeVmHdqO7Q$tQl(IArc_k33aXp09Z9sB-7efa zUgsMgS}z8S-?OBRh0%xacg9xMH1?|pweSs%R6`fvxmYlOf=Uull0w?OaA{0aWlEu z0<3)8*3+UWG!D`Kbfic4Z@5QzDgV#A5Gwx$W&}d*^8e=-pns#p|KD#6Bk(b=Et?mV zPJ~Te|JxH%L#nQL;co_~o@DYFaNp&3Ee45c-lu(GI+}% z=KgYlF0M(!amC+<`4f4~T*K*3_n%>Nq*NH z^7`tNJ%nM^ECN-j3x4o_Wm)mDjm-5=>lB>&$h z)q8QVk)$qUtj{B9yUPPyL23zMob(KyH7v+1>n!MjO5)1W>gTC{AYe04gIBtPy(5`S z^YCFUdWb8?nX8#&m_RuBWHOj88w&Yhm!3~SfvmLQ22px;+b@@!*cCp_xRP0z2#LDk)dAuB;P!>1E$u6hE>WuJP0ef#F8&Z>@f|Ez3&J?oI~R zrxuOUjxk7@^8T994c*@5U^=-x)z#P-$g|U)_Ph5TTwx{Pn9iHmL(bT zHP#24AW)G)ut!?%yEsH=W20{PVOJg#=NXk&{c*eR{@!QB%qIpqo1;2Z6)&pqb!BsF zep!#2vPIlCczIO%W$d+X1j>VbbgExcy!FwV?6|zVXJ)PTUq)U63af^y+1-p84qqgv zK#W?{f-916yrd3Id|;9UWmPkHG*EOgp>@h}>c}Ds|n!0f7xwxHM z-0m|3$%DN`@7N!T3G5gI?#iynl0@(JRqaBXmriSH;6lUVhSLv-!O_?r!PjVE*hrIa zR^jwRrulw}PRsJgp1QKdh*xhmv^FIZRbY+pTSHKop%{R!64#yG-;0JR~fZ zWcq~NvV1fXyp%^%ysdI0 z$xKy;))SV=%c7E^gdQN8zt4<3%dhn5+28CqbM-Ot{FZN$P$jv)bZ)0te!P>KTB3M- z5w%L-h*cG&L$bUL?fxAvCRdI+fQdUPU*;i3;HCjPf-0A#PfFZ~qFkCtPYk|IswqLv z?7B7-XM6Wg((!IKu%Vj@?m%3D(b#B#wgCI#__Ra+{Q_a(g_GO$s`h!`P-VNe;CP5_ z*jTav>=hs9bnpEu+|*@OZN06sFcEd($CJZcNFH@)kvWih~~b&(I=9R>~EIVWtZuGwuHX9S-sqI`ce1?N^95Um3D&{^5y`lWB#e) zBC9>w^Jasjq{`=3p^@`~>+J{jsysyLBju4vmE(=Im#OngonUP43FrrdgX?5+m5w!^ zm(>oIWQ8nthh`#H`{01)dtL8G0QvI3oy1ujOERI)i%bGNF1H^zl%wP!Ob?Fp-^F8O zsQVDC!Ao$AlAq?YeW5+jL!OW^^Pz3UbHgstJ29PR!G&OoRd8@%=s^M@!Z1Il66Ge^ zo_IhA-C#{a0xnbLVE6_@*cSo={y+KAuo-K zz`MF9J$O@KJt$1}s#mgn=B>HC0(OX3z9x3&%c4xY!G`%GpB8Pmr(zcDG4qv)GdkkQCPbDDOl>>yThYNXb zQ1uh)y$>=G7|S_1cgc|8lLV1`+!d|VswCd|{`Gk5%Xh?_ltHAfE1NAp?T{!8wo7rc zcjY+_Ty$qgk~oJBYp+MFh4LFzPxFqSVPhYx)@jJt!H%Uy2C|q6r{>1UNsh4ODdpUU z;)kOJ`)eRNq(c#x^j>&6$oZ%U%do4W?Gx#rtqlVHE3F?(4<~4+L!ob{uNc-BGfw6^+Jw-{^2s5@UXMNG zIik>EmbJ~QJ+_yvvUf$`HZr4Sa)-NYh1BDhW1zlCozo{a@9nLDIIkJ_Hr@&-6Awfl z+7I8{;>W^jec{2f5|E*Z%*JGUNi~IxJ(aZ$5sjFpXIrV9H%HEU9 z;&sl`jwhLU4Mb9pMt!b8-ObUK9(uesMb~-G?40L7fA6>3I^4NT7F{mK`rz#^N~Mgk zJ5)t49DIU9#6Qn0^b=E3a!O^~}U&YCoqkYT*FtrUHD^rz8zh@fzP zElHL#LiV=T*VAL2HJ2c|>3iN*_Yy)0VBiF73AE*s0%@s>J&{8pH&L`O z*D3<%wbC>t)f|h>%$F0K6MospGJRM)1yc054WAOMvs8Cfy9~BCB>z(RhC0wHC}83C1WT43Zbybl{vQ>jNsdQB??tp_SE>>G#Z* z!8h%-#prz#X;>z@YfB`W z5U6JgTXGaYY|EJLk^ZnY6m%aN!)C0H@L8Q3WiUT0U^D7}b3bv5HcQaGegtS^{{v+)ZNc#hW2bba`iL-C|`IniNmPg8zr}tmc!{OuOryosi zrxSx>OUx>6wUO)V{t0Gl*bQ1_SBWb$bCx4n85^9i3X>%Sdt;Il&bP%oVNnlA`h&1TGq1(l2Dp!00d z65tN5ycP)E`ur;m*p;)2?(lkW#1V27hT}e7z&oxV&7N60plTnEuEK^FwXEcJVyE7L zG{a)ML>@w+#NqVpn+v?d3PraT*MmWGls5)RZ+)~W)MF^HB7-k%C_o#P25iQik6xQk z6NqiVhi!)Ddbrgx(#@z!6FxL39hBYpJ18f|`e+iKAR3P=^Imh=>B@500KF{Gwq~PG zdpJaqSFzZ>K0@^v*1R49hp1UU$V!M`2tt9fNR|Xh#%G2zM@sVE{p(yeARdF9`(kT5 zjpV~=5!loZ1wol~G%rVu7y8jP;Q;UEdRRB97e;N2rRt8oaus|8_R%`+H4|{-_Dw*T zmmc74^$68fS+fJz>EknW()g$oWdl@CYCdA;U+8b#lOjz%7sUJ9E(J<9WY+I? zI{E5tv{HunYAS1GfUb_iKqcALOW!pKe3RIH>_iuG{DXyxhaIF5&}I#co(E4uK;bqK zsD$0}(|+yU@{>ef)E^9-pPu{Vnxv?(Rfa`wHTTo!Zv#B26g@Tw zs#fF^IF7yt?2ngn&F9&oSN)rbF{Xhk)gGY4wm(DQT5D&hg3Sf*bXwLrIKNQ$2L`!2 zcW_f|4h};A{TrLF6%3-)2nUw2A5MbPsgAv_DQHzWUX@No{2`o>R%Q3 zpiA2+Fd??6kfY@pEmSAQQae&9b6-F#b`-WBZzh#Bt9@WU-{Dg}gHhCN!1E5p`LqY< z9^!EUxHg!0uHC4Qx`Rpb!gK8gmnKztw~KLQoqeZ;XQ=%G;*zU4Y|Pe(6o<+%nsK8?n0; zSyLP3Mmfjs_I+$|TQeBh0ju%~V2QkrNCTBLi$UO#gXqn8C?T*YUl`)bz*rx98%ig4RpnU|1b`g9Hy|j*=oZvTlzxmox^fXu z&!+`H-A|A}VDV|$O$ID}F#>X6#J7mo;6da;Ip>n3LO=Ot^((L&U<{40=RlqtpNTYc zzt}v@8=xAC-;n++OY4P!{?mNhirqao!DQ&Qqr>Kf>(Y3!V%uo-ucWchX8O^zzO9w5 zV(n)FTl{A)NyQR-&!t%uDDVla#$pGfW8>27u6~7d1>-F$TQ`GaR(myklX40pWr3vg z{9#F!1A(?N=;d@p%a5yNS)h3U^bB7R%$UFzRBxGWT!*ps*}|9a(s1iFlosaFbPn#C zKne2wBB`O|DFw4XUQFBYE?+ibQhUrokg{9dd7Cn@J0Ro(3}pVe5@qWwM%PbKId=BD zoty!XfU?J2YERgAWa7TDAyiA7)erq@doO}iztlU=Ro|Y{W7sJfpz3y(3ZmHmHq!w% zBUhrqG3})mo06}N-deqLA?F>r>L9L1lTpV`=WX=vHh|?o&{wmyr5L?HvS`zeMRuK+ zWw|>Y8>`bS38L^l;ln!9dhvx0PDos51ygkpTq==X#$THJW>9P9{Qj`gfMmCD`4yvZyXbH@g&)=;R{RS@)Kq94$!ze7V7dvKdrC;N_ZVww!1?jtr)-T zzU>cGrUe@Y9t^6!Sg{COp+s}Ap1VN@Ekw$8<)VCri1qQe84@y`a8_1qDKd1ZD$|*M zc_0hEH?#g?Qih8(Qv=2d7N$NAo*X#TD;~!Vt}_nhU3vNE z0B>EMU?=^K?;(Q$?Xz6n2HcdM$m}n?EXX>X)lr3}Kb{%4tpN6J!}1UMEK*?sGBpl~QVKZ7hq ztDF#Xm@JH_*r;Kh=4P55j=d~AG^W-LR5m*`2*oO-oV2~iDp20CymZk)puqLIDu!L>&L4qDaTc(+QjAa@e&qQEr z`3<0=Uhx$^jXD0at^{#mN2l|(_FTCi+RAX#ffy=aX1ZkS>>-2Ijg+xUh#0MP^)rhS8J`%>D7~6bT97 zSMXiI5%r0cuxx;cP20Z`b34;>Z`XVM# z3o^>vunxlSWb%F2?Uaq|X2)L#tmpTP8Peol&Iuet(s&O*7-tgU@WZ8d$;Qzq5E8s? zeNK&SNo}cL!}okE*#kLxxv3lXAmo!72vmH~Fw!wNKOcMuE)5g5jOTyx@H7tf#ZH~F z0gBipki5#h1T$)PkNS$IGR=!MG)Q12gxO;|gG~J{bz~%pi#F59sTSPIMfRZdHAmh2 zC|Q_&!S@3Zmf(1N&Ue6J*WG4`8D!lyjzQ?nn^60Vcbj`3@f@?wDro8KiGq(}&fNDd za_qyXO02f<>YV2Za>f-Rpt3U&xC$*-oYnsEwto+w`6+C2z4T6*IV(#>G~Zz(4qs5g zu6WqW3h%LNP!o_flzc$xF*(Az9&oyO|BmgV#@<-?ICP@Rs3T>YHFxZ89rYi9pNiL? zJ!DZp>wy`KY{R_D@p}oD)OWS(`tu(AHiY&~w-g)i;~9Rb&Y#arx5M=g>sj0LodU8{ zGU-tsevT6KaM6GR2ieij+(Ws6OC2=jU~2*>Bw3K_BkfP!Joq6BIZUN-4m9PaK>@_> z+zzJGyj8lux=Gk$ed=RpZV6)vY&&;S=HFaf%@;#~=`RGr1GYNus}ON_4%5EdV#66~2ao<{F4NMYNI8fX(hA?*LIH*FAi;+EE_$J^^OF{*SSyIceBUMaO*MS6 z4DTN){HQyJ(x0ORGeXt@>m`{<3S=$8g9If<^YNSxmuorg;W%A2oqE$QmLmi3&wTSw zN7#viT?FqC2g|d!CYL^B%&TTdFs5cc{lx&vnZ@T@=tqRVc2yfdK%-AE1_Hmr17n>J z?!q3~TC7chf_c}^STpkmJ63DKkWa7GEQho%kMYUTW7JD5{h6Igb@MhBSqHx!be~`8 zmpWVjuo_HwKBxo+`$|7;xP11}ZBrN7W);ph-F)~uFl96lcPk~ZEh}cjaFRrCwX>hx zxHdM7R_H*SA!8XY{%(z}3|~JG)8GMHS-{-vQE%P!2*giBJ3i2OCO@Tv$^)AMWo`0g zOS>A+!UY$3<@q#d2ANmMd>8kZJM9a6lIZLZWD}hjF3Sx>UCc>kYy+-T&w8zAOT+--&b#L3)fa7BDJ4^$IlzR`a- z_0wekwKq7N7XWYy?V2zw*m_EGbqxgDm)|Vb+`2i3r0L0VY|nMxKJO|u5lkNaJ7Wbs zI`Vj&-U}*n9g#D*ia;@xybTOKlM8SC3`+( z<}76jz^Ff9U=qFqRQZ|pg$i4&QWWXuJrN;KL zt~OWCj?Xqgb{A&pLbm4du6R4wl_1F|d8%b`aF=$j^bYW!Wabm|(pXcus^{k}LFw5V z*}D zyIxh#TzQ%Dju4V9f8i^DuZh^(d?&v*kM+bns`kz@9K--jv>U?ViVb$UmrYLD3fhn4@G{|S9lyY>G96BdLA{G^_HQcRsZSuu!Nwr{=S zY@zNYF#qK2%379}z)_2-)!lICLh;rjWZ_!xD|}+kS)#a-M6Pc`ny0^$kuJD|@nqKJSI1umEeyx9Zpgjv!yr};cG-X3L(c&@Gm zx;dsL6a1~2r!gPpA9=#eA1vo>m2_8Oq?vvn46F7Of1We(J@|K1iW0eXSp}byuGPa= z4;ZNCq`w#_%4^iG(Q8{G<|(zmOZ?@IAof5}aAA+udZK`PnFnRe%vpua_PaA17JEt^ zl?sv~Q81kVBlC|N#Kfj(E5Vr&up;O^F=Ej#TT9_x#{VW1mXKmRx~-H6Y@kH#3*ea` z_EFXZH|ha6>RFJj2M{JL7?QRblJslyr}g6jfv}TbJ74(#Y3q*zaq5z`j98k#G?rQzg*cqs&U>+n|M(E{=sGQ@kjwq-g2L%XNcimbA8K z17?sz5%>x^UA;suZgi7$LhbFmpno~|?)<0^{aRWh1)>ZAylOL_Zg^c~$QE2#c z@Hq(RY9PTpjq2lcf6tQlH#ksW?;`E*8)Xn=ek$S5r<(C#xL?wCwqJ`jQ5I?a{OrJ& z4mk(9at>c~xH5HQuUEq^Ce=sTeAt9t4f?D*4}S4&liqDXF&G z30|EYMj895uO~2)!yJUGn%Ae42hmgf<1CO+yXbR@3cl0fQ%d;YjaNOitIa~#w1>N4 z#y-*;G%+PZ;mq1Z3@rSc=Z0QL6{pUfeb~x>_fzJcDN^QMp`@TJ(1}AS`wD~hg#wKr znb*9i??IKLSm&FKSCSHW0`!9L)EgFxo~1u` zwT21PJfPxv3kOF*-lu+ts8J39EkRA)xph$VB2zKcrg}D{hK5R|Z}h_&kaozSJ+*|Q z=`Wq%Z^K3pXVBHra% zuloYM0$;TN<3IUAqB27L9Pzi8f2AsEPteO#@+udT9-*xLkEe3erY^iQrX6 zdN7>x0Nx?^(=6!8-dk5SVXaz$uJrItxMct~stFg~Qi=)sfY`=~yc8Kw6KjDq1cBO% z4JM+$3jZ9J?%(uMi%;RYdo&1QAhtFA8**T+Haoq=54 z)Bzd=#F8>2OtFGrfHP-gSwP^>&mnJTqgc(;?FoUcsx!+YP7~a6s&`@hZ+9+Ajn$C? z1^J0r^nwq(K3;@w%3Ay>Sb6ND1qxdrpZ{lTcT&v`LC8ETtsHHtK&vSM^L^npkCrJH!127@58-pO)@0f(L%_&*ruCF+(1*v^mSIGw4M+7AS*qk>5$lz(K z^|p~2Gw8Owv;;rdix{388&|C& zg*BDBCW%n`z`LIE!ZF|{6iEnB*j($Q&MqQ=7a2Kp`Qw=&SYUp)ghB}_aueKL3n1I2 z;29pUi-w$^WaI<1v9lwrLJ2ar!I(vsw=*bsDB(K6`#!wC(~e}1<+q2TiK(8{Iz!_j zc@lP#c(?SdKtQ8k3Y`4t0^nWH0v@^fm^>*V$SmZU>(M zsYprM5MBrPsn};bwf?hqqqN1eAIlqnENYkmyw$a4MPN!M^hRJN0LYGt8XN*@wvsw|9C(+tabH6%`2^7gyK84Pmk!3Zh^PA0r=43;N=pxNyT~-_Ug<`EW;|-j2XuXYY0R@C7 zDhwlU@pMho{P-nUb{fFDOysxx)1ci$_>8Ntcg^;MxPN8!Cf>fghuDg(D{BUQ^C3rs z&!Vi`2`^Fg3VETiDSgzJ^#tG~YN6FRO))~V1fxpD)T0^5?Mz?DF1;NF82WIJ`&L_Q z=c9g3_unzEhld<_m4WrDc+t)4)TbEt5->Xs^8hwiStAD!>+RS@F&l}Us&S>*!iU!9>;BrqVT-m6Dfs9tS2eVDk$2&iEUUVZ2{qb za?e(9bw>mqP3Y9e@=F7ziD!W7EkHqx958ty0w_+e&F9)!4I{q_Ym-^uWj--%DQxe$ z`{?j{DaG094{T)fWi=$#!kRLNseFKlJ8K+c;vQ|*_tTYZOw<+zbDJp{7^V_;CyHZ9 zeAAlKdH6^bm?*5&>p-cH;YOxOPnPuWOqY=3`7DExAXl?Cgh!=68N}6)?BA^0 z3J0?(*Qr*+DXAKy!0`uKzPt`4N@{u#R5|4w84o>i&~p6@B;xCUAWGr}dD_=kUD5&6 zbUg`=T~Qepn(FVAt@_+@f+EIW&YsayMD6qsYI1pP)Em1tFhpe?YltigSX_lihmTxhXq;?UT!V z_^uxYQOV+%5tmbY zsCV%B^fXw1w6##K%^r!Dd4 zuUx+Z^=z`0_fU=?b2EyJHmlkugO&>Ji9+TbTzeZ)Orn!?L4RUtEbTTX)}7~~#f&1$ zOv#nqs)ZfC>&N&4(!PNt5I`HA8=(aCxI7T7Q~@!WH-y0W14TO=BjX=Y{RjgWO;%7o zA+Knhk^s)z=AI;zZi?>1LK*@F&I{u|uONt&v{RE`mz>>#H09^eR60-ePTBTWC-urJ zhfM?77#Zkl>uUMLrWYouqnlk3z)lTUAMN0Q@ySEBA;*ViBz@r@o~k9A9X1<+*0`oT z{U8m9Y+Px&1;`}!5e6X_8S-EKT8yHFM}mK??Q8mfznmE0GT)BaRq!i;zV(Dw>-0MF z)C&BtS|21LF$&T4P|2urVwHyc4J{mh6@`Gv;KjZVQuFexlPDvYs0{eB&Kp^fWoLw( zyQ0=skQ)s=Y?H($P>I3Z8Y&7U_j(GR;k??Je*%VH?pkno%-z0EKa#Tky<8d(9?`tw zRLz`K)g~D_bxq(5dfJd~DCwHFzq2$E^}DQ6JA6oYZB9p8z3j|RbF}ChImih?>EPuh zNUU%l!Ki|6_OgeS@3|Z3bSGmm&k0Li8_aVVYL@wdF?UrpPfC7$j|rSvtpR3&kG{ot z3gQK~C$KY0yA^`UgB7fg%le~AOfoFOh}xnMPVs#Xayv$Tq&6l@?PTH>KmO}8U>+rYNoe+Co2hL>X!`U-vFk;RnP z)lviJXVjXmE&nVu74T^JU=FTwZjQ;loMX`v4VQneFph+(Ry`WU`!{L4 ziw#}^avzzBt%l&C`QRVj|9xmC_p$RWToUiT!bJu!jb&!BtrnS>cAKl6fL_o5tU)p% zF`UeJ-GCzJ8}@MWHgmY~JU%Ox^S)0=;m>&Cywa~=D%C#He=eFCmq%ff-*D}YIbSCS`twO^1} zIBE@Xt@PjHKIs5!yxqTBvNaRCg1mnvW-J=-&k`DP1pvVrOcB4T{HB^1K?!4F+jN{x&FCTMnEDr9EX1z@+SxgAg2dsf!XZ%2%kDRR~as6(Y zN=!m8$A^j*uDy2dnUP$YU7orA3Jp~xYSil-VnU~1j-c+UubU0 z6Lkx#GZ*wlWFoF|L&tlU2!AOgFlr0eGpV~yz?S3ppZ79*R1;l(QyJ&9bzfB;Ieu3f zFLOkv<>ej&(>>@W{iTp?!&+tR&e%h6GW6kcSn|b0Bfi$SQMi?HWOz zRUlv4Gc>rFl71o%-qK952izGis~J}I@6~DfQSW$e*l1~2*gdGcI#T9hVcD}Er!8uA z-~-;Rc(Lzn6=clFZb{qxYIR57vQNyrLdjZsoKkEWcNotFfvMLJ>7e-6Q0O|C3!>y{ zNCQ*8>9P!VwZQ4PGmsSk6g6A}PoEgxIRp!gpJ-Il@Rd8|C+C-OG8$;gmCoinfeFE3 zOd%3*5$l8LZQ=)G#+pj59Yuj;2e3*+6e-3A*U5xsntkswA+_6(d`Lr_n6dgq##bCh zl;94o&&9ictAiXjJ2CZ9q1*d8Prf}IWfjuQzb!VG==3Wf-4{ll&95#V@=)!S4(AkR zWm&jv*55FSi}K;~h_l$k8-2(N$H(AsA3k8+{6j|`Fm8GW>u_@5)63~D2pPOBRt5h48Fes;RFGY@fXvJXj)!_;U+V~+TA6LjGe*e%C>N+ z*_{E6Eie{5zsCPjJRKV*g=pYsNbIl1)CyVO((@a%JSu0Q2pvtW#JY<6$IcCH{+?M9 z939`l7%3b19iHJ$#fD4q7a)mWr|s;8v{4 zm%o`uF(A|XF?`ep;dtIW*0)Iq#X?Z0pFv$u2J&!G{6IRCUXPDB);fE1D@IVmJyC-x zD#H}ODli?qi@;oX`)9$S_5>H)5kVWK(?spx#iso|Xd^P>fUUZWsxcIm55MKH^=pdokFTMOj zE`E^fQq1;6@#hmo&);K=_WTHqu2~0okgAtUp|DCmOp~87eZSlqF zbN)-Sq;l`27C?eY6DMRNo?AFw0qMuJvtQE}0zG*U@r?T}P_iH^``ZLvPah3-rKz^@ zdxQSz#gW6(!0{k94LDj@ovS%3X;QTTT0`prT9+-rGn=VeQFB``BKqmQr$gVcTlU)*eV zuHEGUxB*B>1!cIGyfS#Xq)YWcBDO%?Zb%aBDy&73HUBu? zvr@{H7DMq6jNFNhTWnRDO{yhyucQMxB-*emFghuJtSU;FnWFLZr+5sWvTUCaA7Q7# zg3Q490R!l_gM*}O<*912FHB3zN`%r<7lMZ{ret;85sE+k-e24}TMm5T$~N(xs;Z?s z5U7ZThiM3YDQYvOU%=(-G0%ac$KHxCBNKYhrV@07JhMbKUiy=eQ>fgppYtJO=6>*( zBHNdsE49x{==lWt)R?HEk=6rw7I3V(xw(pz`-D%d&3OyPKHXpjSH>>q8H` z{IFO`mwlo2b@i?u=C&iG^f?#B#t*{Z{Tp+8NSg(!&y)&4sP_X{jgftvr=X>^wX*Um zpnXr-XtcU||!#NqB8)KLUv*w|^pliHGi0M)b zZ!i@MYkBqAfq~7cv;@=8+w~PUi=EpD3U8mNNJ7cGI9S_oB$e?s0=BCzkX?SWCs`w) z$Ru7N%1(;ZcGHys$Pj~H!lkymp_%|OZ6E6+ysY-wQq>;~TJ1nU6M$Z3WM>ip8*OYI(^MSYJLNc?W@Uh5`2<`~LG zotKs@+x3y*CO82n5$G?Tv)L2^QQ=bLE2WA7K!>URPr%i~13RvIzw@#C)i$CdZG=mgWe(m>#iSD@4w))l+piorXkAjpxn{}l0JPGg?(;k)feSdR+}!m+vig} z&2Ir?q|ZvzW+`TeORbQ*Zi>_fc>O6A%0Z1Hc1-V`IgoFi>sE{G{J>Kn8Olh#(EkKw zPQ)w?x@+y9{DIT$A;EhKq#<|_s>fO`eQHA*8HfX+Kb%*lpH3E3wQ*}+WpdaJg>5oi z!$V%XLuekXl+^;-LsAP0Yh zB~H}8_nD9NZ7mpq>lK$)chWY@t*;kz+EPo36t5yGZ zGsBnclkK;;^xQ@nFu&qViG9Su7o86v+nwY5Yb@p?pq^W;V6sM24<4K} zypD6Y-r)}VLQ`=Mg-Au<5X6`ZhV$ZKqvDiF*Yr^veiO+hz42WVhAbECKy)#ICD?hZ zTG}JB9SHp23n5c){5br=oHTS{Vyr>s4I#rr5}_>AzX51iK0k}j;A=H8@M~2v36fgv zi{nWXCjl7fk_MwEUs_e$(5h!ufC%WBHJJXW&`K}RPf9a8G;IUjkjOvqxOd-`OWz&s z;dI&#+A@skVT)>Ygfo5_GpViy{tqFhFiL%}*9g;GAx(oo52z?b%w9|7|1kC4@mROf z|E1w+NR+Jz@nnYVS+YrGg^bKHlRZCLMu-T>%Fbs;r&&-+|Ag?wlL>ZdoVfgWwx(6!MVY^)yODw#1cAmx>P&$Iq{ zp=))S!ama>ENc74*>se%r?+o;a1%dyqItM!_ON?A!B5d;+-<^YqO+E^fPdH8tS9P* z9g$rl2e_vkEugnJ!q^w zbN(N;S4U1A|EJ&;{6~SZ+o$UbZ9$K?;Gv*ZZPJ3<%rnLzZI{EYPl8+VyAwH=Vj6q? zh?++qd|jKXDpTSEWZ5t4hWW%u-9LpM-$fQ}jsymD+w$GtDkxrGoN_~Y`@2N9#5bI} zq&2VA{FF`ECu)hwHJByJ-;5z<`I^Wj64pq9W@U_X+hpD*Pdc_lgd6PJ&K+mO1;Yhr z!poECnr1a5a4ek%H=!J13eWFI(lQYZsa=C7)D0vAy@#J}<}>|l=u;9i9x6ACI(*{q z|Lq3XnPv5DyOrPJMvoBY8M%h(h?`~38`CwzZ9EcS6H|X5vLpNh?sLL& z4HqI`-^`RYuIH$kl}({rspm6&?4BbynykJp)j!Bw^HuhikF`y*^+EL!R1AL}_r^5Y z4;|Hfpa=QkZ#&%3N)Xp{DVycbvU{t71Y0)Mp7i^`RqbwsFwrMo^<}c#$>IJ(-eM@# z678FvtL{1Uys@%(JkN(H;wFS@;}r3g@ttxxOzeE;y-tL8g4LHyU!b>op)YL9IBYS- z$O@J#7}P&AQiP4Wd|>HHC#Ws)4gJP${&YZT@}!Z!KL-nI!f-%#FrV>zBUfg}%^Dy1 zKHoItW%6WUw_2SmcFav>6U-GZO5-r5Rmx;LC)Vq3VI=ESO>h%=ogM@IvwF#o53{jD z->;jR8Bg;M!b1Q~Nh5{#80arQ4V+NSyv4r2#P74SO@X%{rJM_Go5pNLR-Yvc^PzrK z@_mwNoHoM9oZ0a!O;^@%m`g5I-I3gnbF7Gwo#1e6>mpii$~noWam3Lt+BiQ)6)(c^ z^R8RIDjj`dct=-pcG4!3-3W8dqU@Bn$BMAsWB1FTm?SFV&xm_nYIymRlyfp+m+qG$ zxN@UCl9H$XLj#|gp5aS9@qK_`Tz_38+uX2AQ|CJq8nQJzqbn#JZx?l7sgAsXPZe66 zC1ZMQz~f7rz@kUJ`I%|k+@Xxnb}VT9VXe+?6YN35U#z5@NyBhX?xqq|(hy9U$i&R4 zO~;(*CDY#X$9?u%-KN~Z+PEDq z8=f08Ijy)XlfSBPFPI<_nTG1#Kt}8yX4xR~`VGnFbaO`8zOxJ6i4jKL%oMJMxq@9! z01(OfNJsqrXXVlmU(F9$7TWGufg6(JdKZ6KZgHQgN~d82lOh-MqGoH>tNjBq0mwmh zvGF<~uFq#d(8G0A;`fiBRrX&Z=NA9U)zN;Bx5_W{pwI6h7w^;9e$7LHPd`cds3CnF z^G5^L(WM-`O**WT&E(RXAc3=i`q_kpCn~?r>0DpCm_fF~_1mcff0y3OV5)lSESbhb zYUH=fdI?DqVd_}WpY*XN%%5Uf`pf0qVeWkz?$urig!}OKwN+NkpI-R;VTh|m7So2m z>RkE&y7-IM!FJ@K=ZvE^JQccFJ(hSz{GDt)oZq6}<6O+s*7K*)%Hla9yF7ohj9_4A zhod?&Wv@J#OHO9Be&a2j^+3iZ5?|*b=UMu^VmItC~LQK&KNuF8n3` z{+a@*+-JN9B3{MmTt^yX3O$HwiH3VA#jYV?+A=fc%6y{djhme^G>16VwVLr(qq!0g z-`7B$N}lK)KxOuL+wWml4HDC861Pd$A}ErlN^>+Y_4Sp^`5j7OjSCwQ&z8FE@Is_h zErXm1ojreUTV%-S?$_7(nqhoXO-+(QeIrO6hw`fa6o>xkK>9w3thQF_(x=8MaaEqO1ve^WSRs+pgj_0N4rt z@sI*PS?ix0;uG5SR|(NGRehoJDW6pLqQ!(7te78pAXujhaBD@w6Oqo_d!IDnMse5E zzL#Mazyvk_{qCfJKiZ@3AtL^@uwyZgcwq7*jt<}QOEA2k zpptmuc>JrRg2(yua6_)~)~v}s+?z?vg~dtFljiv@CXLnJ^W29-l1-j3+G5VV$j~F~ zmo6P0sXs#;pL}bwt?|C+x%#}q zUD(*`-zTRG(t|p21)J_GXecIvy+3G|JbJlsu1-szxjx=J$hnVO zHbsRxtc(mhWu&@yX|b3Y+Vqi6XgeujQLcAJpSgjHgE4Dy+D&2{|26a^Hm(Kg!bSP) z%>;L*dq}rzVvVCAmO?fJ@p0W%=vx{BHPmx|FIS0~fxyfZSR=xv@jL0bNwyYqug`F? z$)Wq>FlY1)8nvwSC&q)WNMm#R_%pmi3wjmwAkB}?%~QKrJlEK>6l)Uf&-FQpGcvqt zc$&F6#EO)bKJn+-l3X3Wm3et1&;94LyCXg$eX4Cal8J&;NXwp|=Kdd<2N%Qb!Fqll zqBY}~;>pM5Z9~o>Xbd4t)RyOe-tC<{cg`t13`|Euz8uYa;=JlvvY57iGlj*yS4Lvc z5HQ$Ak~F_Lb>1MIM33UT@3!0$-C``s5x@6+f4x=VU`Pk=(EtC|dzMT@j{0~h(k)wC z*TV-(jXuqrsM~aTTA#}|C|w_QPz|G+7FFFNf$10_rp&I=}u>!j&Rar``AS9_l)xFPQ-an%?Vf2{^{i^?k^ zAoqS@$C?dmWNn2_@ZZIzl^A6^R1gPm6sCShSBnsOYZ@47>FqzNZCcMYS3gV9!qUrj zbP(n+I(%om8uRnDRP`HWnB7V}-#I|WYJc>+pz%nZW=)!8XV240?o*Y0lpSQEX;q*I zKXWv#^c8=AXfx5*D(qd3rS)Lf*ggBps@&my-pTU}F$VVhHy&PRy)?{fqL|l*23#a| z;@=L#57w!>$;Sl)-~Aqmj%MKOXr5r?wfKf35Bt!>AL@mrmNZ;9j8|=!@(my zanY{C@+AD!rH|mQqW0^ZSei(-SG6KOYjOy0-9KCQ zgyUu3sBN@8>G@+aqWURB$xcY|+Eh9vmj)C9ko9_A2>FGM1pOKe;U9m0RmB=i_Ur9( zR?;*EuqSg`AtB0MA;2o?h6)nN-i&I<6G=86i{|}DyvYH9FNC<{Y6eezo}9U)^Cv6! zHH4^+ui?Vtd*#6|AUd0xEyb#6+NRE;SfJ+256Fk~v)TZ$ONoj7W0f)P>N*wOR%KVt#sbbn7#OfWt8 zNF&l5OzM`cA~R$4xZ-Idq&>GnoGmfN?CB^t8UC2ZN<^mm^}AIrgBGel^SMDIUw0eU zL+)Z>aWuO>5KUp4z24E)^VG@WW=~fC%rS+T!w* z2aX0lpWr=>k>)!KP9QC}F%WGQN`~N2d{3#QNVb1JA(#*v^*!L=TYrRX*ZyIjj;rQx zuNxAmO}>5XrJDD5u8vEdoNap(xVbZ*ycvRyY+gD_Y(i=wznzNx+5fhzSX=k+hae^I zn~ORjX~oGjU3wJ`0~Q6sf;N|Hn=yB-itpLKNPBh?^(z()d_E6S z>{jK>2VbFFdhQddG_Xsb|C;N~7I?pxw`@gw^i8UdRafo?cu zPHa3=P;BJtq~W_R;Sp> znp1d_Vd|&J;|jXs8;d&Gft4;-WX-0vm9vN{d=cel&$kN*L)!4aWi~Q zt&`Ghw6$5a6xW9uxd6Kuu*D~?(cDjsclc3)-W*nlO}7@t;JYJ)W1EvBC7DmU{z$V$ zL~o7iEy?>QPqMeT?|-42*eM1#AvU?wB!JAwYvUW%^1fQGN?4Rs8PxyG+R1H~UQE$m z35of8z@)uaf7-ini6=BLc6@YPcCmggppo?6{&bJxghUb8m%a6@ah`tgO3dYOg!e>` z8%)(;nj74^eyGJ>c=}m>=STl7yeo+Q=dqaX$Ae}wVWIIg#wYI&4mv_nU2KlX-vsGl z$&;3yn!a)RpX!E-wXxS^nf4E6z4y^&uf^trqp+<=vBXwdcm0kug#eo($*}oZo^C;( zYYc7d@t0<{tsP57)Z#dLqhgj$p9ogvMKS&^h zPm3cVyyL&ICk7tGJfCiq+jL{X6Mz4RkCh~e@XI+h_2?_EOM@Mn195N!(O~=)yt+24 z8lHWQ6a0~Q#aBWN+rsQcJYqm>GO#7E?$B~HpPfYHn{Uuz!p_zGc%}-0pK1R~bm06S zZ}ey8_dIEWFmxv+DIoeDifop6z8i6j@V*-n)= zqy=~Uv00(=c9}SbuRT(;*$oc9d1uSfG(>ML&7nsB9aGe$2>1?-kVu^N^8kSxquzR- z!dC7fSH>Xt`)yn21y)N?Ba$|XgjHibL))suC!+G|h7IRjI zO-+5~4tGJyzq(Byz27ez5HbfFCeM=fWW{2R+PN!?p-j1?POigzxTvJ@Y4#akcoSzSpd-AJC4w6bpgOtZ(|m2*LTAk7AB zeqNCrzzfHJqVftCque%yid1O}zl))o`;tBL?c^Yiga08b-P$W(w%XlMI(+|;n!CvN zA1y)r>>VaPNrd5q5x6Nlm&nVhL0cuUQ?2*1*Qbjba6)hw1g1h9v+XlPo~X{)tSs78 zFLJ7Ol*c%ur@ z&YE{u_YJcUvt{X`YuttiG@JZH#VK3dt&FE3W>yi~epg=F>P{v?a89ZH!iM_R_@STV#ibGigtbWn#?@RdQBT^g5p;wj~Y0m8IM_haQUd9 zqXJ$q>J4w7N(^M-%=YuDM!p+kWWh1xe-xuEn5M^q1 za18RDxQUV{P_%t2HyWh8CxRq8(dNCA^uT3@4sL&w^Gd5aMrc`Ww!suOxc}Sno-R%1 z(50AXc>fkj#wrx>nDTY^;~kB9pP1ryYH!v3_c^@6j?KzgwY#@){B+ksA?gua-`~E4 zoB!;9QXcm|l|LeClD1BVvlT(CZ+<)1NUJ$}O1EEh3mf5&0Nn%32&vAz_DrR>uM59} z4)ylQ-y<2JZuY8Ms2<;@(5M>Whcf)LOYRWkgoIFkZtLQ5nU8jQC8)V~5JQmUVm&xo znN7-XdQ5rBfYc4b&3-(sS+m+e_nV!`LQ4F{BU0LZqiHfE&H22R-L$&V`q$7qB?_JY z4J>9T-7zwtk)Y47D$|(=KVVl6gD78P8h=;n^(1{OwHc$;m!@?b83}gFK>n!qz=@mS z)@Ic6R!!cI&6Ke0vKqO0oVw`=zb18Qimm)LB!t%)NL`h60rq3Ql9Jn(*(P$)Ve@L_x2VL*VV3>StEXTm2%&Ao{&coMS0(7GOl^Jk^XuIKc%P5qxN~Yvs@Z2L zz(+IGKT4aL1xlrs)~I8-Wy8E5%~{UAxGGPL|7OX1t}2ZSs#8BUG>J*Hv2zggx5+W7 zP$&ZIbT@E=G?)Z;l>~dwGdJ;qnOY*ps7)U|)!H6SMC0)-aS(#Y6YMnYjH~iyqMgw< zLrq-KxKzpGLi3|@R>>-QJAn^xr=#Ev#SeL*RY}Pzh0TXyG#PWTB#~=SkB{|T%K5Nz zd7Q(L`jgi;dWH{YqHoh>I>gP!OI+{+dUvy;5K>J?v!veN8^peg0d&!D|#Or@E z!chmB6Mdbt)yy1P92Ob#tirxeOKxKoWp&4me?u<2BRH5S-4i{|Si?F-^N9iKq()Ry zM1eu>0D5mufuQ=u!2#q*k6iAOogCp&Ef?KvTzo9e4+UFqXQx`{D8D>f2W!Z!e$nNV zbGJws^MD|(OKvM~9WD52xGM!7FcseOs8PmBqig!>m3Jqb*5`$tE;a~72zM)b57SM* z?Rcyh;2h`IWmjQd-Sw2Rc4)oCSEr-=+;Vi@*`BEV4MZ0-<{bO8ODB6XTazPg0c?3h z6OBaV`|XoH&85{_+2OVc3P*Faa=3$uMk=0!vq*XV*S^q#(bWi?nLzrYz z_UFGo4NZf>+HQpKHx&f1=12xwa$FWTSCiD8yww`tN(>BTin$bRf1#&R{)!#KTuRhf z4Swy+FrD)O8*PBgJ$iWofYl}4m?L#qHqAsbuOAror}@*9Xjl3#FfR3-u|}{bLp?~H z>u1j{TUWfFnIF$S3dY_#n((>CMQ+2XK+14W<%(46ai2#2T*v}MW#>{ZU23>wb5ekY z`;=futwK#TqqVyM_BP7Dxz2|k>Dy42jhVc4b-d;B%*vy70IsgCK(Y_rhgz2hWK!dJ zeAB}df5l2xfhP=A8KNS~3~L+nd6ns>S8=*`-mAo*50lKIC1~O{>A9M66@Q76ZrSDh zI+n3(Kkp?C>wj(&lYmNDO-aKvo=TA8XE^V<9;A|qk!MmjhOIN+ugs3PIz@t~gxjvZ z8jWHXxLAhg_Gqp@WZe;LjqC(m>sI;5NB}<0zT3%EZLLw1D`VEO*xASL4jKtIoUVYz z9)%c71W5GX_NYcHj<7GV9DAWr`%Cpt$+FGMq)n#}$I5PEb?W7WAByLH6hqotgZNu7 znkC&xg(5||K2?8Y#D7rmd%?wK-H1yvIY^5S_!jT#nO6kK_KjlGjGcbf0aEuLZsaSPGx3w% zRG`EO0lrWB$$t)Q&#LI6&!n)Unz!d6t17*K@u>UG8T*;(QZXh)4FpP+mfL^6bFM5i z*!WUfIo;%st~X-i?&{dv^>WC#?(cyzm6v<-5jlEvt65Zxrri}3p(^F5NXteLnJ0Dq zq1*v`Od}iQeb(wSohV{e;1 zz-^{N$CRK{Gv*anuifk4=(StsSfy80VS!u(3I?->dY5qWB+F=ZqTQakCk*;U2pnhR zcuU{T%Pah^W!m}PjT@=>FiGFvcD!4>G^bA7d!=ro#BTCSFe>amVH>H8oASeSt^E=+XzQo-4yLNrFtitGYiGlxn9j^ud z%~tEnr&VXusJ2fIMU?da1<@4&aOoeaqhwR+Ubj}4~CgSMb^}-SR z4~Le4!1UN~U}#4#2lU|IZxUMt`WjBzOY0?!(oMJBU#LK_>|00O=8zMYFrn>V_vTIC z0no$L@Y$yF>KHc&`)~&Ct;=)H>n@mQn`>!5=FnOfvktaY9!&3dyHkI~ z@J3qR$P%*Dz-XgIo)os-nEwwh2|5G$98ANs5z80v8_wb*F>fwN4NcLU2+~gM>Xr6i zt#h?|$BTlF9j_rr30rS6G!RW59;P$b&{g$b?N`U=U6H3UlFX+UZHv9?%M{4bGaX9pg%o$BlFe6VjDumSa- z8`-t_k*ihO$1-=HHRYec9RggXon1MJ^T6w0NvEsBO46(b8dI?OLq98VQ35^J#<0Na z6zF-wRO9Izgt(JpYaf=jp_aqiE8ROIcc-sj{)(_h?)hnC<5yL{mh!;qtn8Gmdr?n6 zyqu)hX}_&eraxqy$Q_vnOotD2VXZoif_jc6jaByLd=)8k(Mu-Kay7>Z-{6$>AOIHto zdb8rbS&1^SpNP=;30kviJW09O^s-8OAp<;z?OS31C z_$l3^L5e!RS%v*2`b)~n!QVh;2Aa((I*-;!G)JW){z(@wnk;4zLOmFR!j9{oe}?Jj zIbGSbt6>^>O3n+a1m_F;#r-=p24}Gwz&qj`AI>#kdGOG zR)xP!no1%eSC{J`ECAV5(k0JI!Bi@1+e6k;y~j3-LTS`n4qJ9H_H_5#m$PHUhP&2c zGY+w94vOcL2LAu@_6WDLuy*l{Peb3gzWB7+>ajtC>yyK{gZp4cj~kiie1O~8+7Ts- z@W@$vWGxnOjzjLbs_NIs*PPGAG#Jidh={;$KailYW;JMv#AQSjO;Mg-4Qg!*6gD*r z=cy6%RK)ryol5!<_9dzFI8(6Y2Wit(H0}5ve#_Uvsn&XIkGVl8Cmy=kL>KuPg&Uk> zXqMapIb{9I<)phcl8_W$Ysv%ffD9s3UyGDpC~l8vIto}vvx_qm&6`v6EY#`+c1z6hS% zF#99eWTP?lUhHUq{uJNxFw2-w+8e0(wPq9~2HwOZHA)EXRa)m7OI8?Qok3POiXD^g zKaffGEJC2>?T=y;SlT|T-3zi;@HfrMG%k=k~4tb?M)nR`9 z6&HNVzO=u6Z48%=8dnls+wWB3sXnxnHH9pK42Ud^iQjSk>|-|{jJ^mj3o85fH)Xz5 zkg_%wLp3`@j#m?$r#~aLJZD!iru%TokPZp_cs2muxr~l3zk(Y1XYFIfZ%_9} zcd4K_s|mqP1dM9A-NgDA6k%rBwTr)OItgw8;p~yp6;Al@{AYHI|J5FcXO`AqG z5bhwYEZbZO;1TMb^KklPX~E3PBc9N^*Jk`uxpgfz%LuV+Y(5n8yo(BjfTt-G_p_Cn zPcp~`+T#=qe_M)<1+{x;=Cp^8-<*fX-OvqvHmA}!fj`vD> z6HC)`hm@G0eg#kewN3io!%x=2agob8iBw=_{=A%X__i-=2dh1owae&y{cVsmm1roQ zEN6z&ve9bc5d@x!l?Dd6c^yZi`fI+uDwIi(!z?|yq-a_4(v5|J=5GefF_u*nM3dMk zks7aOolD+t9JPFjyKC^aLC4cjtu_;%#%BEN0&WR44;z?=_P?wa%+toNuy2oMv>^o< z;5*vL7X?S0p|$x(4T<4p=m)2Jk#gBojA5*W1K&wqi#`S5?U=4^lqwC%uaAJ}WisfV z6PnVBh*b`H13Xc3k5Vu_IVirunb1KfbAXP^8~;t@RD)vlgcc>&QZ+WWz#5gJ_^=lMsafgiP7_SMS|8} zg21s+CMaQc!vjmfTl(_8Fw#V-&`s-SQ~QuAj$E;)e*F+*riy&EUoDF~ZuLPdYEoi^Wd4!Vm}rDuH*I|`nfSw^igfLg*7 zEb(b?J-KFn^N;fEPKLK7zR0G@|z8{|oT5jvm9bRN`0Ke$ms;H>(zP!0e(~Khb4~_&2iSb}33YD`(#n|U zusWD4l*3s7`du&eJ-R>oaY_2s;Tf7I#yvRP@Zlkf-~LI;@0Urb)7hhr`fvs8fg!K^ zY(mXpYH4&=V#3z3<*JcG#82*Xm3=rFrd1WU^E$;?%tLL}{pVMWp0Pwh+B#p4tl0jy ze@3CCVd5|*WMI6_^Ir$^G@3+@-wXCXDvAV*JU2SMJh)br_PyLh?3Yguj_-feEnaJ< zC$86^L8{4%Dc!Q-IC`HHP7`V`YtA+CcofhO2$wrq2ze7qZ7qu+(nraxYWmgYBJ5<$Q z7hJY8Ki*z4WW__HIx#fcQbp{d(YEX07Z$*sX)i@e()+i%WJ>c3!zLJZ>1E$Qv=IL} z{*-KISJN~CEn{^U(fF?M;LEq*GbLf#;MYy;EFSty%X?_qAwtoA4;~g&5gPphp{g5! z<7535>e|RWHqe0u-7bAuQC!&mo93dJ4YD%^PkO76^{I2y4ktC}G?qn%bekD z)U3kPui|kQuUv94J&7c79h!*AwWQa?Kr%=jqENM9;+iM#l@(=t^J(hazr0^~#%e7?YdzMzS12$T#eH-P3*wQ z81Gw2h^P)+Q099!89$Hv*DBgQJILfDo>h2W-(Go(g8DC>i`;V}fmpSXmK8&@pFDk% zeH)HXW0U#-!?5qGl^C<0}?&h<4dhn}#)9E3(JZ>w(F|Wl(b}L5i-%C66 zF_2FZ7KVs$e>5fB#*fG6UJH+}lS)Tq`js$#6(dv+6XF#HE0hwM*Ak#Li8%>PKb0*C zogT+6WSQ0n^Yyg9O*qNngP6^=DJeG{><3swwDXEbXpD|U&6S#&*mhV48qf}$;5 zV3x=JkYnC4L>43cWi>j^h-!(**sht;v7?a@Z~u%8*>Lp7T`6O zEo%ESGYh1yDm2ihsDG1UWmF|{bnknbL$%1o>2VWB-67V)-!HxBwhoAW)r#LL%HA&= z9^|k}LM0H>pCpxTfASlaF7M{$PItHw0X4;4m8Z!uaS-4$mqjQxW>bo zd7|oYTS5>VCYGicF>kgK<)}Oej2N$7`h+Ao6#L=rI7O@2c>Uo^$&Xiwq|8>Ni|BTD z-5sCzr$}1vQXU@PrzkK^5Wg~}!d8wZR^RCR(vc{NB=AdRQ^`lzx2I4jHRzcGpWMX2 z^;!QqTQ7n~=$o(cZr#aP5fRD!&B^>HVip}_-Qr)p0inO=lR8A3cg0surGu`ItS>yc z++IbON*Rx0FZ)a1sH*psPVW`3l_=Ir*O^5+^S>J{Gp@ z+7!NS#;LA#-v*1_w?ndi`{#(PAf01G%6%K(n(TvQJ`AtxIFgY{j{1}il;!inPZ<>( z!@rrwd*xaybq#6awB_%=c_{jAB$`GwJiwBVp$n+;}Hn{%jFRW7VIx_dnO zd()--u*mmZA1ltJZ#U{k!qQJCTKjCN+S8J%)x;VOryXvw#~p-K8@bOuM>HZALPaDJ z#Kut$+qDH%sNL;;YMvcn4r^6I@~m4XmPdFEwb{}gE)S*?1;=8z#?8?fXw$vIXbGvgtK_j;XU{_ivV6*$jbns)XcDIV*XSyN3so zx>n(=3^@;XdL?)Fpl44a=0VhI8%AX1aA4pJ(+7JUV`7^Gau`)!w2Y{49$-liEXeXi z#&>jU-nkqu7`sL(Ospg20q9aRXExYfj)@LNU-9Kq>4?86Y}cr;za(v+z-lq(_4*Mk zhZ#8k7%G5*|25QL%O;EI%0^CyIyz!6dE97jZ%1iLyfEzKmwua}y;x9Sc|~)youP}2 ziY(06!pDP%A+6(X(AD2cM2zLG&m|)Uo)tOWarACO@a;Z>%sZbM>Q|R-R}Jo&&W5-E zQW!6^$NzjBWj%fre77p~>p9ShLq*b4VQ_>@{ys6LVOMkvdFxC+J!A30>k=ROHbEhc zot?ccR)6BISK;JvXrA=8XKroYW{Qej`*dAKdg0B(k60T+?|a>l;G|{nEso~cA4%#m zt2l}06om5FSf)S|Tc9L>Qc5~w;htZ)&aVwHxZoc*;~MU=!Or zLi-Hqn>N|k#wP+y$b1u3VlP0dE?eaxlk{or+^5B~H4;0wlxV11fBko=7N{t?>N&_Q zpyr{PRNYu%5b`Fqc${j-U{-AVX168s}~LXgo%!!sOTyMf_3yj!G* zEmNXjCy;mYo^$NDglA*j5d0(3XBfVGEusUO@kS4n2Iyuw?q3~(a?aTR960i9!t6#(3yem#G{swH(DG7?#)@qxRaR zbd6`u;03@7>tZgy=S2}nN|-`m?t?Z-9PDxq%36k0{kT-OwDw@O0?aL$*{+&9e`V!6 zM4@vk&f4$P7=<#m?V4A=-ol2gDu<9$pGZ3cq)oruCdS8kUFmB2Wz>*%->%NEGF}<_FtNMUi>sSCAPvWHkZZI-}72ZD%8&>gv2@{tpkytQF4BgC+%j-k#SvuIS*GprG zq!u&*qFnyYQU4+E7?p-49efwdDeot4h1Tskl91(Gwg~5W`FDLhtfz>rQ zwc)4HQ>$2#YE~hQi-ARz^IMi3bY+A)2S54?^r;BE`}ReN+%*3A;a}LD8h&^*&F;gw z(tHX&9%Uq2a;7}1%iD#C59O{=12hvZ?)tDY&7PnjirVy&U86r*!Lh<`t{9qs_yLgq zA5mKTBQ(^{k|y9vUk}yjdAuOg#AW}@Z)Z-leD)eNnz}_`s!@p#Ip$V z4kgHgHo0Qbg3k(K$Ht}A5QNcIzL8^GJK`dp`GA5g3J&t}sVzbGGApsevf({}{U!Jm zP$01QP`Tr{C z(OUh~y&_ad&TFSVA2wN(D`ityGMS+cRzz zzOd88wM#Pechx8TG~yUD{qQ}k{hZC56_FMMMo>{Ki9~s*m>8g8lMl+gKj5Y`Y6i?=zU+f&d{j zbN;6!YSFnZdp%M*a1nM1R)B&SYui07?p8#mk zRsYR!f3E`)>YKwmv1^@d)Gcat>NVBg3qS4g*66u!hI7xIlQ+{Z(IE6|g)1m(t>l3B z3mV4U7)?1p(uX3&FB?acxWfUA!t{~~KRqeEoRB0Iy)LL6QpA=MI{1LzRaKV(R>luB z5|c*&WrHbK16LV)U_cN5R;~jMgBB?}w31LMB_tEFJ~Xu`*f)HBbK{sqpG~{kxeC_8 zc9S?)cT1?o@vi8yqS0k7a_yGcAP(oQdqg%~dAW$k7{cV|`#dpoNcB=qUx%TFe3n85 zXdz$}PT1Ih*E|Z|&=|-*ytu+vsMhRNLcxFz9NMD|6jQ)n>%YR)6YmRs2uJ%R!xxK! zQ8=LhzmcWC4c4PNx4oyd+4@_+sro)U#5_Iet0LId&1jBj(D1Pp-nZOY!sr^0SE*xv zqEDu0%vyGxr}#}!x4)!waDN; z4x)*8a1HRVzHC4y@h|>oqdC@Nu`2tWMAh2U81)ySD|4vt*v&8o3HQnjdQ;e)FkjDPs+@F9y|$sDEGV|94VcR7_TynL`5b9 zkVc-6K_xxG{mOVpMN^=64F{4blGVjzMa&K_V`-XWR#}3AkASy0}C?>>0Lt6s{uxm1MdN9p9;Zz9yVUO$qua(5~F|0oO@9f zF`!Y$yjraOmpbLZe|;UT-uc+|ID!BAroFnl;0$DJ{p~RLjr8T^07n3<+q@GCwp+bS zsfspqs1~he6yeXHuR%1}jqd36wX-D{ zFY-p)i&N$TTb^ehB?3@VW?LH7XNhk@a}QsHx&#W8W%WE`G2Bsj)cVIV^&YL~hn>ye9;+?xifiKn&rWNo-tjW^FHA=a=w&08Imha); zBH!T6Hy_lPXHjEz&$-!}uCXht=_u?Sv%|l%#dm&}z%?n3qV6#O4D-Yjtd1SWHOeqU z3{l_Gci%SR|D)#S?!tgs_4CHB9`}(JLclkbG<15?j~3M(OplLhqpNFl7vu!8tn(^` zTYfZ?rj69Qmx!s7EIS zBZHtX6)B?3V&+X;MVSL`OpaTm1}xUObI0AOLmK&^_9EVUvmkm@#s#IZ=o4B2QX^8> z0J~a537IcIIg}gValcX0S+EC^`+{66@>TOTVVYF<7f4$Lx~q6cp+fG)n?Q|fm&Rcj zZTRSl<_=&X>9Ta$-0e|-#=IKW(BaOg+@Dh(_-HF<=lvP7HtV!gEhbADbMH>B3j<%DiZRTp<}(du>3I0d=vF&4uA!3)MLsDNvS9jG zm*D3JXD;K-yWg|11i#?zE02O<)2aViWzH`@X%D9lteSge?~pXD41k2u#DI8Oma+4P z%rsW?7xfB5p*I{*j4h;o-_QBmKA1olx$d<~^;H>FyR*p)v_$g*x$tKW+lGJNXRr{ZH!ei!o89MiT`eV=2@r!j$8ESHOv z5}j^WyMRb2XSKV0mP4Gk(0%iv`(9f$wOgA-owd=@qR}d35FS#{*|6T>-xwBvM8`-t zf(0e1N9}f-1*BDlZCl$pXdWk;dvL@kDy~HvEP~{@cPgn^d~~Sc9N&7o7*k7fo)6AE9DdFx zCnV1(P=2&pTb!Sn0qilI59-Y$1StFcgg}k{6B7UWPtxCJXJv#EOiGte)tD@>F!tbK zX;HA8{p#Cy@7rMTmuf}i^mh$r!puEo|X5Pg10cpXye;Yw!cq=i0A0-(QTtK9sG!&i%{^WLNv#N?cjzSJ( zs+YJTbm!s|t49CVd$rOPR_9)N1>VlsEfMUgH7qiK^(~^b&!-L*{@%Sxrxo@qGw8Pg zXiDQl33LPsP~r)w6cDmPtIt)%Q55VBl&xn66m8$%coVE786$oV8_0rhX6FaC{uvxyzy9LEikn44G^qSs*>yWML&ugdVQMuI-xm#M0<7!`- z_$r%U5YP!4 zKO?l9bUk!_oR4MoLZ1m44?mAYSwSHK)AEsosOJa7{mvchYd{#9N@uy2xM~joHgp?s z1IJA*;ehJ*rayv~>!jL1_VzyR82lOb?g{-^=Am5fKUoq*C*Y&AEdmO*559Jm{WjTG zDx_k3s+hK30<>dfX_&=Fk6HMRk%QJ5@xf*~x7*TZUh*P+%|L@uGNuMmzk$T=m)8HZ z$_2dRYOdeb`|C;hmrYcerl)EYO;gmKLKhU5&6$=@P8gd&RwlBj z9nm}N&a2O7OY`r&mi+FlPHdAsi>8^@LRJ7*eqc32xtw?HLJ2Ujal~&N5?Cc`w52!} ztiH86&dPre*pcT#cY?>7a08@7`wSUfo~eieRaB-L;c->^p{B<}RHj-FX$Fkp1#Z1L zPc_|Lweo%uc~>iddXNNokn+-y_mcD5*Eh$#*x1`}1qKuL(>))|T~hEL^}k$ky;H|w z*$P!pUu(Dh#J@g{pX%N|%+^&E12%iL)+<^)N}TT#4|p2K#}Nd6a)WdrLbqY5|LB&# zP0Iuo<(f$d1%s8t!D_dTtr_iJUi$_u!5w^+u_QEELaV z8W>|S(O1cI(?Q4WOh7(d5RHqWG0g}Wn0qmloeio-Z3C<`S!9h^wJ%Zfr51Iac1>S6 z+Y^gpygpH%2JFk^Nf*LKQ2aLdcFVrn=Im$v1E9PSuD+;U_`g}-G@A9@do|k4?ZZ1b zu{<3Ee)MUy_QLRhWfJS3x7A5t#c)&Rb~H-uPd1&p`M0V-u1v(cLl* z-cb|cw}E~&CPlTu{{PhV)?raLasMbLDiVT%l7a%#0@9^)gM@%|ceun-%dHXyk`e+^ z(%m2|A<`j8F0w30=Pups?ztDA_q^wKopa`|)k|mQp83qTW7YXe(-vqkbQ)vxtL!+R zR128j27|VSX>Oc+JK9mG34D+WUZ`C^1e*;9W2nHt2WRvLOKaS}r$6H$9OnFf<|^gR z_v||WA?!`>`MP@@Se0;vV?OSS*jGw9^(4?OyDjFTue z*>Er}75p%8#yx^_N8lxBQAPPhc$QJM5I@WgmjrWFw$dcHU>zAs1Pmbs_jIiS=N6f> zN5Bv|U+xAyE?9jAf?zgs76D{dZoA)NPPO}}B(aJC^~T}zxNv_k@B{Xb_7H4zPYEA z+92b;2<=|f)E|-|aQ=G2ohuRUeCSE~LFa%DNJ>5J0fNG$(0;yITo7Kf#!N7E`eb&zozFXAJSUe z_cKJ4!`{O;{vWy%g0w+I7ihM-PM6!>4jPUM4C3E37CuY?q^k{@8YO{MTX37=U>IFt zKD^8>10pa&S{|OA0LDxlBc8@BlLqbj&!EdI& zGhm=*{$wQ-bkBU=A_0>&a1_G|X`@W9YN2OP+Fx5m&Nz1{NB_n%l1KF zYWE2tlKAN%;UotL&ceYO?tUZwhu5td6}H}x`VE6$ygdZ+u^cc=crKMWd!73R=nMr* z#N_bN?!|$b-8DAWCe9sw;PzFxfGyHtCQ}#C0@>_F_;OP4%NHQU6_#Ka2^foYRKf(N z5%qRA-J;`hZB(!@1I40XuoMSqjSNgq{vy@+mvLXolHg`hBbM5UxC9^d|Fs3OjEB$C zJWBMvc?eiTf%9e%i~>E2#7b(TsBw8vR$l123%jwbI1R8ot^kt+YP57Es@jpV%31=N z!2A$cyacwIp_CAUa%!Ru1z{h1UvRg2SFiEk+F%g4J0pYKO-RVr5ow*v`NrqMam3F z^;DL39ofPOdgOTorYV8DQL`tPMvTiG;=Ix{&T^xo)9izuO5DWDflnMkA^vL3f5aDN zGw3A)1|ekk#FqEnC4KgOU zbFO4JKJ$r+HnX*D2Sn~e_bCFdJ`nC#Y$})hY;VBFO(i-R`Ox?(Qb5n!4>5E`h#jfX z5&R>@suKU|Bogm=oR;GHeAStdZj}lm>v0R{*9ZN|5hI%;EIWt(A$!7EcPlKV>n10s z^IFRD$3Xm;h^kb6g4!1y zb~6a!bxVirpc{y;2-KyxSj@KRq-0N`9nC;`Oen+#OOzsp_3{A`t=VSR{ZP@3s}i@bb+utq+8psFT>A)-cdr_%e%-A5=>*T&I4xNGsSr z2o?*1Nf9oR89bR>@9(qdm;rUzB%Av+3ND-H-BQ~4DQg@U-<@c%HtBynXMz2bB=+o` zFYC2cEjB;UR$7+M{kget%TVxaGT^6L8^|40zJjq>KpyR-e=j^8<9F*)DBY;!P=|Ii)`p{L=y#Ek9#`dT>prR{vq z%T;HR)CsVVSIGcHK$x#Sxb%zLM~b4=wt)FkICL$M65IO@OHBTdna9{uYjq2kEhzzzZN}KGM{=hxq6Fca$PI* zVGU<%`lj*WcF)))1u2)?90_-nAgjv4*8H*Dj(1)b8IFHu<*7+C-3}9!gM`uR$mqyL zFi!IYYCjPWqbEB)MQ=H*S!NNUOooZ9TP6c@AZ~sQi4TsXAjvXoK7E?u z7vwyG$@Qt^-h9{`IP`$&>@;aTjXp8I&Sh%RJF+Cu0ZJ0wx}wB1jrQ(IA6PzfL$$1%t+B!OoSUA?>cVq_@_NgD%8+>prMxq8Xk_?TX=V9vW&_79h0F`SM z4~v;W^Q6ZF*vo+|g{g%q1`t6_4exn%yPrmh%5vVaeI($`uo(_xK)6kn!+$XV@SX)| zm_JzfdUy6U+MGz1yMJ{H=+NRgydvqfT|-{#hD1$9CvRc|Rku&l^zMw|+^;de2o-7v zQAc)XjrK?899*(!fEwqUhd4-g57FbzYipH=|5Mn4_s5r_(3pwSA!Lg(*xl)sF0?jF&8D+;YREIu876oSA#T+ik@ZZWni04l1jdY)SlAAap@=$xGBXK&`OoczPY{ zBLd#d>(7x5z*P@rZZj0lYD+(1kCmO1aCclJuY@(VCQ+B8@^D<+De-ed2nl0X{P*hx z4r!}oQ{MuSc!zSO$wle%V7Bzmz@{vHX&lr)HP49Q6a7rKrs+$a!x#7&^9Uqr1AJ7P zPr#$I^w>YyUv9gwNU6lGb`nb!&)zVp$wBhU2LQ?~pmLIK(?~Hx(6 z1f7y8eEel*!11OS|M8r{I0a}9E(a^8|L_4MwqLA$D@(}DlM6xuxwov;7{8LvGV zba$OZu|x%fZwK$Tsc;+}G`Z~mCMTfhdY^Ubv~F3`LjaGTHE5}Z^DqJ_!|Xf!1|Mk$ z?BSPcfs+t=!}GiTVFnh11_F+G2XT=Q+tsX8GbE64%gUN@O9b@w>`z9b&^r!D4Yn4+ z(IPVmtRzD7GgZ<%r12n%Wm8rn52Gyj>U&4PP#LzwR!=l7tYfL?Ts z_O&T>nVZaAk3N}Dj62-obW=chOMV%t5%%sAXq7vNK;3BClXkcO)sTRxwAHgUyTsZl3lb}j7f zU+iUZ#*ziC$DOMxaJu#9JJX$$sOeF8GjdZKGYQ%1M^sZe;|JKlt+762ijT<1{NGLt zCcT;e2h1{LC99MfC!ZMgk9yqnCjI*tTee-NbLk?_&1)2(rwR_@KiCchFmX?y%%Z}$ zJ`|ZZuf#|s5TE_31p-6p3%`B!3_-6rl{lo3=+qG3!DGIJ79Tj z=;!%6AO?$Fd;ADYv|lur>Lm(C9GF{%&`(MhsvE-IA?_KO*22daeGJOXffq>#%!o7s zB%dB3^gjvIDGLx1YDEd6a8Ws08*Y_K6X{XSyiA?CX}Mhzuv(xP+=tCL1^%5mSaUA{ z)S*0B2-J3XqW4`LmmC-Qm83^u(Na6C`&UDr?w(Osb=~%|h8{}DH5Jfm7w!5j)jY_4 znuaEuDm*(q<>T`cs>;v##51r*AN`k5bP4e#x8uVB ztSgNReo>)2rrRFtw!f4+<}Be;_g8N1oqG!h(>LRn^fPN@6F9$HkT1Jlb>?mykbq;% z;ECG?W)kHS^#$YxDtCm;0zSYsu5(bHKWNd%qe8EPUx8#OPu6vZFBSeWm2b~O0}x{V z2C|g5Qyyj;>whWN0|yR)Ush5f@0Sar@ocu7-T1R`1lp}xNo7BPYVCG1Ikb8L$4m+7 z{zrm{!EWImME~Ii7vbp~K5tZ7z?L2N6;tn45Da?Zfr_m!n6t3Z$}^|GUuhS#isJO7*$P(UrR<1iU+0ot@*|S(=+b zERpN6Q9X&gm4@WZIg23fy)$s>xk0v2UFnTv`@B)>{dk`!G!s3u5^IuBJ6^i?94YZ& zAG!P|hf~$!Y(L^gL*i2HfpdrlP|@bGquoXh;IZFNY`vd*10b~|Wme)hM>{-E{BdBK zRs(;=WLACsa7v(C%c{urcfI7uuz zHuQ{)Vq4#$c#xU|{0Y-X2gC;imNi-&zLV`9`b8652K1s=5~!61=iE2k#@`Kf%=8xt zqF~a0Yq4!C3y;FipAYB9hO63QBuHcOt5Z9C$)}TM71+8v%w6}RI1OZ`XT23)B%!;PV1=ZY^YWi5A6t@w zhAQB7FW8h&uRC|IM;GJ*b^WF#10z28LY9Sz1-0I>DDun6%XPwNw?*NjqVAL(WJ^uQ zb_wP+I{gZ`{#yP#%$3H9Zr!JDvu)14r3qr}?4*)4C@{jnd`j}~aKO%q8I&L{gHH3L z*0$!WZpu(vIZCfXi%7p2U%Q7*y5OZ0y0`n9 zTxk~A4y??(YUo5Z+%Ux1cvTaOj%L%rurz8}bhV~8p^E|6DmeeGa2@1Ref7(^i%fhF##M`>nCOoSUZ8CDac;9^y2Tm#S%!$p znG5Qt8yo@BunO#7D#+Q633TfqVYFWjT*Ell1{z-XZfbA}dGN8apC1G|H`)2=7)AmO zS1n3Jq)i(1jhuE#2+W^Up__lebM}X8ujqog!gMtpWiTG!u3s+`GqW1Z{Z~!7V+Xu| z2Au<@n_g;g_DnOU$NSrz_Hp{7o7?q|oG5fYfD~&cPPzi#L10hB;O0qqT-;G*>QSEN zNUmDEKX|vxNzr&}EhqX);FbR{X55_PA3U|M(yi)WD{x7>aqRv=l@1U%`%I-j@db5q z6t23xr)!2-EyprlX6_OoyeZ%EE{q~*Nc5lwX<~6D2W&?#UjtVIF(}%tM#-dJ6Jz$P zEJDXsCTJWIllUB77>Az&)U4j1eq>#efow9U`nni!;3qKZ^I3-n+iLv42TDY2V;Qi{ zg=Spb=5Ms$T?3%l#*-!uXvxSaFa9HD zFTj^zI0sVLV~Jjcc`X8xI^?@m`alVaS2*bYZ^@P#N2t9;5(rn0rjPRl(K81R)Vn`? z6d&d5;-{*Dv*%~TJ4-}CIlO0IEPLJ-x+a!?PTOCzf|AJTa$3p@;-`$OTa!5B57D2K z22W5Bx=Y1=R*H|NN*Ux*bDS9mPIi7&r10A5p2!CUufeT%)Md$}&tYE&1t zFDD>&BCjz+(nyHioc)a4;_=>I6Bx#C^v1E-12;X(qI5Wz50(ic+@p~W$-nMte?aBt zUHQ|wll_^NQP!3$V;u!j%;^300q_}+6Qt`IP*nEV12Nj`2{LD-4Enj!)#i?FBIb8& zgCW3Kov)5=+gST_4Lto(#8lB)N_yC$RLh83L0oiO?8t0*`tVZdE;noGBuZ-|yc&M` z?hl@ETL0a$}RLxOum8UkyX zL}cGP5>%tYvvs^uuoSp|G)7qU{^oi*Hc*?xNi;1Z|5^8}njPtOOF-f|Pm>3AZ&d;K zKClf+Itw!lhex~lji~-`F8L%Si@Vg2mMscGaR-oz4-0E=kQZFF~OA1HoIOLk{4;(sJD*dn zV^?C@O@0v}W+jfn(BL{QE=X_55z)yj zAde2b9fO>AOX3&PI%b{>YGUUXBmhC_19L@lJXB^KPlIKcS=pJM@tKV?Y@K7%8gb>} zn;Bbc=z`7)y3$C~c*uAS?T#HJD2W@VuQ&yWF94ArHh^nl)PBD=UnEY^VprNO$?$V1 zV%kS>Yak0kMo}_nkN%_J*Fetmp1mP(XEWUXZp6cdM@kHjzBi2>2iGa$+Pbw`up?_u=(3u&{{ zK&`>Fsd>%Wl(kxH0+cebPJ~@#eA*1V5<#8_s&x``yF9yspiGX{(rq~bHZ{&Rp$}w& zx}sY?HWnNhkeg}6S!`#9rQ1Cf;wdu6HIgu*|9}Tf(!k#^rxV6wI_K34lrRCXEYo4+v;Y{ z+^yZu@wFRKKX~_R~yVX)_sNPeH;5ubHd9|Gd`gD{qoTcfSU-ixyF3j19L5C zR=`ki;O>E5Z3_++)rSik8-N=4+HQ@4oK)EFd(&bO15cEff6LHf0OtabkirfAzwXtv zzbG?=bRUHR^;~_;{vy&i6)fp)F}fsmHt)~CD6m)vr0&Z@*Si@#*V zIKZ;oPQU0_!$4^Wq+Y9T__~HmgWkkihaSOq0p^7{9v;3vnWvykg2bwUMs*9k@LSSl zF9lMbU)I}|b;|#{ZU_a$0+dmRh$17B)ZA*KhejnpIS$Ig=#`%n(K!S`P=T%U-e;6P zyT%*>?o+HB1OX9IS4UW$uzp8AnY=gfNg`fVNn_K+k1prmzXblzf7-5^t;%7!$D?{8 zGq}eo@@n*uy?2rmBny|lNx=^XXYGCy3U&%75@i(5GVP7io%Wlbp{fX4+)Ohx3MB0BwUkMNMM?ft|3KT`t#$DGv-oqrB$zT%_5 z6surSLIYUZrybge`~N1SHv}mJ(d&6;Q^XeE@)>bS>1<^3n9ww#Yy~(xj_BK?S%@Y$ zrO5R~p^Tg*rIym<@hB7_@SZTJi21Xx5!I@e(M>ao;H3CVO6f4P_5h4D!^(k!h+C=a z;tz-y_xTUKYY`+rR4OQ+uhB$2;0lu&B=^?^%1D<>;ml!Xw<(^fU9b=nrzT3svOfQj zA?sj5r1^4*KXqq*3xHSIwn z3Vb)-XXO0vUJ0AlW`4p;G(qnF{OM($E3X$<42cXQBhP=lzLELr!jGWe;TKu{zYdY; zAo&09yvmu*cTV;HaWtPZU$OyDdmeJcL|0ia^FH)>=*Z6e2kfG`C>nQCECq#c@N6Cz z@6_I;rw~toTo*!DlDRK}e~KGT6dbEYPX#|Xj&i?}($ZbEV(5`SR1sGM`DMOhbO3mO zFvx$6?zZ?|iknKRdRb^{Iv;*)ABKFukk)TK@YUN}$$-Sg!@j!B7%)Xnj7p@m#JJTJ zHMHtmt9v(zBu@k=i7c}$J6D|=&EI=D5YQiJlfirXMbZ9ICASxj(}$v#_tYeEpl2FS>fQip_6Iq2r>YZuS|k6`Qjn`#EwySc{Qpe zy!t_FaE5X_jMp!n0bn`($}(ErLB9FM<=#Zy@rPM9rGrx={ms=#-bEP~J8qLyY*3n~ zSu*!;E3UDM_tjYt3F^$?`@R{y6KKf4Z?_;Xl1NxMGyI<0TrnwCophKkocGSji9w7( zO{1x;nx>c4XK7~jmHmubFks_vy~#tu5Rz(W)4l4kN(&UoZREXJOm6vI)h+|t%8BTi zQ#{**8b%~xZ~3u<2N4#*J=V!xbM?mRCI{I}Mt8pSpO$?dTjE2AHrI5OmMWZTq!}Wm z)1~<16=7sm5vR-HX^kHlL-u>btE8BWxNE)Npm;s|WCuCj`+nf)y}Dwj4#rYizOpxT zZDlEwL;z7WDF-iM3doqPXWG;0nAWuXA4kF3Bh=E3#8tKy>9uw#znXm^PO`cu#F6i& zj-v{8XFtBX=*QR^ zt4Wf3*Q>Q1`K?ZL`@{^Z89vZoUacJ2xS)C_2y~p3^a=r)_Ser*BWg9y)(}@E@y^`? z;^(ZSs@hl4zx6U;>DywG+T?Xh-A$Xd=8y7{E58SFln_1qZkV?uEeB0h?_ zRuu*L$tyNqZe=8p>_2-+jnF_=?;6iQS-Obg9Sw&vMiS?;^?Q--=!cZZii$n+i$eg6 zDI^uMXN=L~HB;r*99?9{7x01i^N>gtHS%0K_5RJE29e0WDU-ID`d%YXB4J{|cVma~ z@Xd#6?Gl7IG`ATR_{vyyqdo84`i&@qIDZP8if1jjy4t6va`}!VjMKrB0_E=O&uh3u zXZR(nDtYP(e#IAfS$=zEqY$8H<@OYC?!aU&j?#EZ#4?ULMcQZyb58s(%6u|<|NJk? z)Fcx0-aIuYFCkx^DZ7PM)|V|ow!_^U^v}%l~~H6EM~OXhqa$VBLH~#G4>yV2v1ft*^Z5EDdJG| zVJ>ksl?8f}E^YE`?WswVLmnG!#A~T>Tix}v+rprtL9wJqCFoVsEm>@js|npruPz;$ zDPO$+dUHjDsJL`rK z)E^{)qGH%p?pGNM;RkZkRkqJrc)WssJ3EvY#=oD8OlJQ$cKs z&4A9cz9n{zC5pqkE;I$N8R+I?$6s}cW$>Hz8^E=A&CrWRO|;=bZ~V>Bb=rWLgLt`& zP*svPdv(p78h`otvI%`N+0@Q)CrS6x##>s}Z+P`=EqD2{tZ$wE1y9Z6tFo@pNle`y zIr?k;t?JqDC%8SaS;f5hse4NJ%EmXV<*OVRJN0_%hP{T)e8@mxr z9FU(T_d#bHI5^R?b&?WW`l&Ol?G4Z|W}AxZJ6I9FK~YaZmQJ|J{Ilx1t9p_489JQf z6%VN<6Ar%)@V-+fVK7(<&+mmVJDVKmm>j(eydXyWtTvujB%dUwmT8@$(D|B>Yi66V zW*5s@>jh%#ysBsTvNN43|6@#sU=C*o`__wfdi(u^$F$ZE{Zd$hFOF>#0dZEdIdbbs{~ zt-?^KabVwv64##Zp>ufR>W<$UbqvRq~4tS0L9}l({`3)M>5V|f-wx4j0t53 z?|JrUoqt>y;HXHA{$%{Dmr$VhfWMFNi4=^}oNusWz zr|Z>YYR@y}oN{ytfB=V6{ARwl~A79>%FbX7L`*7GfB)xpqf@>R8b;}zL?MLM0NlA3jSFA)`bek{G?5p*K!M(X5m zSJ!Wh3w;zp3y`@h)ZH}XlftVkg=O7F2l%>W|9JF5`+I2&ca`<6vo1t(WXIY4xa}{h z!XV=r0xJHNm*-n^1hyy&REP=*2;WK#=PPqBF5!+KKd|RyK=oEDpRO1R82IH}JxGz9 zZt#a)_-2~qqbqP)!0JIU>|Q@I=9@eI+!Xl*1u0>#w34f5sMA=pjTcQX6}zxY0pw0>y%grH;ZEN=Yt|^khuGS#pNZLTYFE`Z zcly|s7H<50hP!e93Ylyxyk#s{cTQ681jXz8PoR2Tv$1AKxr)#~r2vm-vf^P*4%oaC zzvrX{)D6aS=&Xd@8f7~2Q}dw~y_Q>MjFZ%B$TjVpEm=vp5bmmxig@|;70}J)nd62z z)OOxv?U%Dv%m9gI7j%X}tuIN(6Z4}9Ms1-cc-;8R4tY;qVY zeZg(e$XKL_$PHHySUF~0Ud<6>mtxgOf<6g@Bi?4l|#y~_jk*s5I zQ|K}?gkp3ylv4|%uQN&Ov*am$9qnUeOzr=|&-g00jeVEZ(U8;Rf!ewu<$6&;q^+f+ zE7w@nUj4vo;b*b7sIYIAF`)S^+q*6N|Aq;N1hBD0`>S5rP$Jxc-iTkCwTY;d@8wS{ zt=++fq3UT@-9}{2#Ir}M{Eq*f#2YL(+EBH~`7UpMd4{zLoA6vgBx`eH+GNF1h7wv% zSaAK-?Lz0cVMhnP9G*18j1%pOCBD640qJwuS}0{iZnDQ!uBE3#m@7umZaD;)G}*RG z#3mXdz6_g3JV-*(OMNTNP6`lUa_=4I?k}-@(fheyxKzTDFNk8!dToOW-D#5b@Ehhe@N7(6WY{M0C_^2|Eu1dr+il9%L|EX6N ze4vV&n{j1EJ&{Zfk92$wS(fF-*&~h2A1 z{AVkFxvlABe?vI1SL^ib%0?_}BqeuL&88o}nLiM!0aZ8u@VitLa$E8+fwyRRS-*Lz zCXx5)C*=e#(7{$%Y>$FxH#(P@{Qx$Qz)(Z(eWN^Q4R|f8}NG}S%3%h{5%sIa{ zx(C<^<`_;_#GOW!Idri=C_)%@2i(Gi0qjn*6+u3OasIA|Gej8bsF5F!sN2Q|ypYL? z+)XJ?O|5Fnfzp25F#3F4RqTSxfpY)%)#Bh++hZ&C(ZBY`7UNxnNAg|^Hciq_HDCAs znUEUux^}v5c0;_%X!rR=4oWBBkW{n87OcK(Wo_w7Y|_?&@ky{-A4W)a#don%vrK-{ zZxGa1feOt}ddUZT3}kDus_da8{|S~=f?faYZ|=i_85-YteDh;MGm^!4dexH)=ozqn zuvZK@0JX_rv|(%?6?P!9`^?|x%PT*BQPf$}u7ZzVv9-#YIJF~eJP!~m^8DpT5}Ejl zVo(13#Qtt2AS&WOX>EL>_a;1bJq0;2HTk=)poRwxPy8}s7gV(VzHsKxF~6(yF>Tvc zV&_Su!WPp^r8q$?1r-LQYs^xaDIaV+zJM%TGCcCiLB4vIPJStKiMps1b|^GL{Zy;i zCIy(WimCE!1*-gEgO&W0zmvxp6Me7Khx}T7L#u>X@e0&EytqqsiOpU^@r4k6M?4|+ zpL)trU!=2?E$k`Wyrx!05HfnX-!P{?Oi2T1?y^p7*@#RVn$F}0lr-^?zD(;b_Cy$t zME`N^Qa)gRY9~9{nY^(!8vz>$P*3Ibr+C380Jt|cw8r~A^~5ZkUYr<$L za`$=$wGT}679ScH-8^Gcudv2C!fGNnj-R?>o@`9oas4J}Ry&~T8hk$p)Zf8_Vgl62 zh1W`%X;z=C7+M71@aBGL`e1YBnGCeoDG%v!6?yw3^+`@a z1f|!)blI(@QM33%P7Q{(J}Vic#4O-an0|+I)2+5xA7rzCTY~cxR`4QJC!FcBqitnR zc|!UF(F*7ri!v1TpUPTo$2HpLDrZKEn}X#`#K?+=iPm!7HT7jWXfmaagvP0=(52F8 zvysE*bxlMbC?M;e*NMJP8b%;PnyaLt$_Ne9Ci%0_5kplawS*;h zcmwhe4>~?h=g0eU@*uH9?Am&jbY0H}jZ}9FJJ_I|)3e4TWgDZT{yGOi-e)m#lkG=s0S4V6vfdF*K(}K1b6K z@gk1F(1gc!Ih+6wD!M){I%i`xcU2nz6ng)@HXN={{@|K(+?OJdzF3ey$D^lX9}_E) zu(;nQ#PCshgxAOS5K&>c(|RF3c0#)){nWAcblvb{UDiCvCZ*QId)Fo#RFV|4M>0Sz zYp2k~g17i%GNUb#@Kd+#j$Wg+ic5j9X6mrs-@52ptUyo~8h*T4WL>cod8!#V(l@mxiJExMupvbjZ+bDWw@;u0?Tq;umib9!;(ZkkczN10cG zv`busTr|SyuHvWNu?Mb3Yv`gGzlhLv=7{%3 zH>1?s5AV9Z`(9!cl~vJw*eiCIZ)f9|VQuMi4b%VG-hH)x@m=Dt&J1Jw$8AH?hAhiH z$X0)Ji?Ei1%P zk6${Kj*$w89G!l91w&i8S`IG{-w~xf5!oL!`(T6n%x5QH5MNzW(O3z#LLn9Vq$p5j zH+IMrij@+uESXaN108>#F_Vv>8Vt!B3!OrY++K2 z*trMGg$&b}Zrk}^S0%DC57-v#Q6tD5<~6dTkus#={LZ05JgI8YgUo||e=2>_Y0UNc ziRRnn{*48}s|UGm_R;t}WW3Q{c7e5TnS^R3d{#xDbOFCQNS{Ls6|HqU0J2Mb&6Vuj zbq_b5TnU3D{OAq}d^6gWXp&CqKc!zoc5LLGS#VLJYG@U5+G*!aH@WJy5_yo*7djo* zT>6|US)*7!mGn=C`M_y^%blKf9rJGU&$#Rbl*HyblX-Vjxqgj3)^VwFi2;@1Lm?-^=BH1-(YEbz7SVmp8YA7T@oS1ILqnn*AI4;wDjmEQD6&j zr9uX>&v^)ccz_19jlaQa0;}AuYe8&sV!5XLuINXbj;<>wXyVz$bZKgs>lb<@^6Yc;qeD`@=+4@b&j|AF?YQKg9UBSF5^#Nz=K zQ+LVwG!7e4MFi>MhqFw(n$lZi5vKN_;VDXwCQ>5y&#_?{d?gsgZ(9vNIw2D(Fuo}) zsZg6WE)+YgJUgl6FHyMh_JQp~3HkId+ya1dX@`)BFU&IrwKb5(l=_A75$^AR*RAaC zE_O47VdN?a3+P$7!o;!XS}-^ek?;jMAF(3MvAb!HX)Pno6ERze7H2WmiCHsT3nR-F z{*M&A#(osBCH96s#1cVDpbve-nja_Cm;9hXYDVA@cEoRTI(h~oeXxIBcxveP%5~Ci_lFa=Fe#ek(4zgAmvwniQOcCm4;rF$ z{XX2l9()`rCF(W3aFx^m@bH*8YG|lI?5@!YrIlJJ!MCqcc;ht|(Tc$`cW;P{EjNB` z_;RY5H{0a9nDs=4#&sM@!)YddM9F)69_Ao(gZwJqLLP+`QPRV82DytETB1Lbg; zdjH_tFU1;H-v>L;r+yxp!FHyma=5)ZSOfkg;#N{pO2j8pF$UFDK)WdNf6#qk$(78w z>D?6@i?NG1*eiZ2k@Uty%gb1%6e(6>*2L$%)(P1~kkS-5KT#UZ^v13Y_jY@17M~o} zT!%Tz(X~cK9ajOx9jGz&0n(w;h#D*1NkN5cr@1SEIG^Fj+RbpXMwVX z=7gW3C#C>0rz!18!1QBEjEeb>^b+dSp_v_vVrQF3MF{IRrW|Nw3H6az1U#lxb%C48 zd@)J8u0Te9{*Op{NnonjI_-?W@zFvHl#Aq-+Hj=a5hliFtHD4r($`b$;7Uc z6MNg~kA(E6!zEEcx|!rrgVwd-KEI8s(&zJZ$>u;}%dQR!Gi!u*gp-!fY*c&iFs%sa zJv<*jnr)Rnt)J#BXxixsOVECu+PahP{HV_Tp{Jt%t^ox_zVnfwZJ4}zOLH)ngnLv_ zMQ~N*c4NFm9Fps2+SA0m2OHZf{VKNjge@zT9ZCMEA9v!zpBSBt5zG|%7y zYAF4kunu*9bZ>UaLm!g@h{3QYrF2_-+KBF{sOU)&te2(!mAoL%qoHGqPp^MQDm_{;}7Hls5~kUt-)AZypw=$=fc z%p>?FEsuVFf8cb*PR2WeQ|qCl1w=#%h>)O9;?na4Ljlf59Gird37zJO+b@USsf*EH z3VR|?+}4$1PpL=W%)$^tUUx3H&8&OJUzxv#_nq!#xRT}i5bE|#J(<}4b8cChIYQaw zpuRsrbjEqlSj>$LteO-CnNfSw5T@25F89Rd;K(E_kz~zmKwCzjJ|{<;9$-6kzWs7&v+7z4Iddt!CK^lnarb>Z)-8!caZpo2$>0)oLD$e~2ZVNf$Jbyi0kA%4RulT3Na zxBTS-T(}7Rp9o_jZ|YQNc!bI}tao3owb>C{tu{$fcg33&;lTm`5XJJoQfC{bT9K2B zOW~i=wfHdFUf+ZAfbNfL9ZD_mWdTpmJCZM0ydz$retbWk_q@ZMwSb7aYycT-G0*B1 zdH#3ouzF~De5QGbk#Fm}>#4{6(FD5T>P)&5uVn~U5Nri(lFiC=w4fjktE5rv_*x5=PZZ2ib@SrINyz(V8?dy>`17IhL{3`%^d=sR8yqY2t?Qt>>2)9q2Y-n)HL`voDiCt~}^ zoyR)Y05F&kNO`9!Vr_`=QD3K>zvA8+y_D59&}ba;k*|=T4-m#giko4xpOu9DUbDxr z^OHQ6Bd>7n<-z_csHvRDV>2Dow#VwG&RSD3%uc3blm^?U!AmJLwP=2#;NfY7EMWy;Wx!pFp`zn_RPM ziDmbeZZZ`6w{4;f6N!dU_Ok+&fEV91I%}e&tgD8eVI$~Dn;qMpHsGe;2m+B?M^lSQ zt3AzXF}Aky^$_of1=V(K*Hiv)d1Le#Sw}!;E3s0vBT1pd6IOCK~yypXz5h zO-&!LInosmw`{leB!%|PTera~^c`D8UoxsS#njZlx9rTkfe>0a>a7)yRb)M ze|M4B+7xl?LmBt}m7BZJoJ4@n971c>CneCt$#h3$(#ZIO($!OEFF~XDmk4bVMNp#p zYw=K=CaSD>U{J&76b0%hU3?#uHX8=IE<*B(hW0Y<8Ki45%>LS+ zl6zU6HU};xHrE4~!sw6JpMA-GX6)2ju2(JH?9ht$D)%O> zO64;o>n?Nt!V0H9-Z8}8G!5H0-oC?9>8s>vqrb3v5j@gKc?2V0o`l18tJHMO1bY$I zzso16Ev4LV#~-B zv0~h>m$rj8ML5uo@{RK-i1#PHK&X;aErJGLfDu1>%ZHq%bl`T8^KJ38`Hu0pLq*d4 z_g_yX`eptIeKvSfK=jPr0S}A0IeSpS0>p`1|EgoYgx&)1`=qjmm?0iVK0iEeuVN-gD~S|Wg+ zdff|Uf2&8XPMS3fWEPaq`T~v;Wts_*v zaU@l6JFZBgmUeLJN97@VQ7j9yyZ&@Q9C^*MPTV&_&NyKhaxpR#3f_wy%lq3qaKq8> z6-OGVmL`zyqFqYM2Kcy3O3J9GE;uR$soSxOkhIV^I_vxO5AXCU4ggu%?O_M$q8~l19eM0;F94}+ z`lg!%jaPIESVjezZ+h5>n*|!)9TyxIQf>L$a%4sE-+v(@8b6Pt`uE4k8*79Dljq}a z{zP)|_?XbRY7nlL53UDo6(Uqw`!~4nn;wWxdGikX9pn8$)@N>=H@K`)54+fP5;c0)mhE1roW5FUsE(eJm&-e1nx$K}+$*{{^0s#ohn_ diff --git a/x-pack/yarn.lock b/x-pack/yarn.lock index d2f0b8def23acc..ce6e22c94efb93 100644 --- a/x-pack/yarn.lock +++ b/x-pack/yarn.lock @@ -158,6 +158,12 @@ version "1.5.3" resolved "https://registry.yarnpkg.com/@types/loglevel/-/loglevel-1.5.3.tgz#adfce55383edc5998a2170ad581b3e23d6adb5b8" +"@types/moment-timezone@^0.5.8": + version "0.5.8" + resolved "https://registry.yarnpkg.com/@types/moment-timezone/-/moment-timezone-0.5.8.tgz#92aba9bc238cabf69a27a1a4f52e0ebb8f10f896" + dependencies: + moment ">=2.14.0" + "@types/node@*": version "9.3.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-9.3.0.tgz#3a129cda7c4e5df2409702626892cb4b96546dd5" @@ -5211,6 +5217,10 @@ moment@2.x.x, "moment@>= 2.9.0", moment@^2.13.0, moment@^2.20.1: version "2.20.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd" +moment@>=2.14.0: + version "2.22.2" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66" + ms@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" diff --git a/yarn.lock b/yarn.lock index ec3fa7aa6be4ae..b5090364fbb0d8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -454,6 +454,12 @@ version "2.0.29" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-2.0.29.tgz#5002e14f75e2d71e564281df0431c8c1b4a2a36a" +"@types/moment-timezone@^0.5.8": + version "0.5.8" + resolved "https://registry.yarnpkg.com/@types/moment-timezone/-/moment-timezone-0.5.8.tgz#92aba9bc238cabf69a27a1a4f52e0ebb8f10f896" + dependencies: + moment ">=2.14.0" + "@types/node@*": version "9.4.7" resolved "https://registry.yarnpkg.com/@types/node/-/node-9.4.7.tgz#57d81cd98719df2c9de118f2d5f3b1120dcd7275" @@ -8995,6 +9001,10 @@ moment@2.x.x, "moment@>= 2.9.0", moment@^2.10.6, moment@^2.13.0, moment@^2.20.1: version "2.21.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.21.0.tgz#2a114b51d2a6ec9e6d83cf803f838a878d8a023a" +moment@>=2.14.0: + version "2.22.2" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66" + move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"