From dd0f9168d7e38f2e0c3264d78eaff018ad587c21 Mon Sep 17 00:00:00 2001 From: Conglei Shi Date: Mon, 20 May 2019 13:43:30 -0700 Subject: [PATCH] feat(tablevis): this pr is to add a new tablevis plguin to the system --- .../superset-ui-plugin-chart-table/README.md | 34 +++ .../package.json | 40 +++ .../src/Table.tsx | 276 ++++++++++++++++++ .../src/TableFormData.ts | 10 + .../src/buildQuery.ts | 34 +++ .../src/createMetadata.ts | 13 + .../src/images/thumbnail.png | Bin 0 -> 22572 bytes .../src/images/thumbnailLarge.png | Bin 0 -> 109326 bytes .../src/index.ts | 36 +++ .../src/legacy/index.ts | 34 +++ .../src/legacy/transformProps.ts | 76 +++++ .../src/transformProps.ts | 124 ++++++++ .../types/external.d.ts | 1 + .../.storybook/webpack.config.js | 2 +- .../stories/plugin-chart-table/Stories.jsx | 76 +++++ .../stories/plugin-chart-table/data.js | 46 +++ .../stories/plugin-chart-table/dataLegacy.js | 66 +++++ .../stories/plugin-chart-table/index.js | 10 + 18 files changed, 877 insertions(+), 1 deletion(-) create mode 100644 packages/superset-ui-plugin-chart-table/README.md create mode 100644 packages/superset-ui-plugin-chart-table/package.json create mode 100644 packages/superset-ui-plugin-chart-table/src/Table.tsx create mode 100644 packages/superset-ui-plugin-chart-table/src/TableFormData.ts create mode 100644 packages/superset-ui-plugin-chart-table/src/buildQuery.ts create mode 100644 packages/superset-ui-plugin-chart-table/src/createMetadata.ts create mode 100644 packages/superset-ui-plugin-chart-table/src/images/thumbnail.png create mode 100644 packages/superset-ui-plugin-chart-table/src/images/thumbnailLarge.png create mode 100644 packages/superset-ui-plugin-chart-table/src/index.ts create mode 100644 packages/superset-ui-plugin-chart-table/src/legacy/index.ts create mode 100644 packages/superset-ui-plugin-chart-table/src/legacy/transformProps.ts create mode 100644 packages/superset-ui-plugin-chart-table/src/transformProps.ts create mode 100644 packages/superset-ui-plugin-chart-table/types/external.d.ts create mode 100644 packages/superset-ui-plugins-demo/storybook/stories/plugin-chart-table/Stories.jsx create mode 100644 packages/superset-ui-plugins-demo/storybook/stories/plugin-chart-table/data.js create mode 100644 packages/superset-ui-plugins-demo/storybook/stories/plugin-chart-table/dataLegacy.js create mode 100644 packages/superset-ui-plugins-demo/storybook/stories/plugin-chart-table/index.js diff --git a/packages/superset-ui-plugin-chart-table/README.md b/packages/superset-ui-plugin-chart-table/README.md new file mode 100644 index 000000000..533068e1d --- /dev/null +++ b/packages/superset-ui-plugin-chart-table/README.md @@ -0,0 +1,34 @@ +## @superset-ui/plugin-chart-table + +[![Version](https://img.shields.io/npm/v/@superset-ui/plugin-chart-table.svg?style=flat-square)](https://img.shields.io/npm/v/@superset-ui/plugin-chart-table.svg?style=flat-square) +[![David (path)](https://img.shields.io/david/apache-superset/superset-ui-plugins.svg?path=packages%2Fsuperset-ui-plugin-chart-table&style=flat-square)](https://david-dm.org/apache-superset/superset-ui-plugins?path=packages/superset-ui-plugin-chart-table) + +This plugin provides Table for Superset. + +### Usage + +Configure `key`, which can be any `string`, and register the plugin. This `key` will be used to lookup this chart throughout the app. + +```js +import TableChartPlugin from '@superset-ui/plugin-chart-table'; + +new TableChartPlugin() + .configure({ key: 'table' }) + .register(); +``` + +Then use it via `SuperChart`. See [storybook](https://apache-superset.github.io/superset-ui-plugins/?selectedKind=plugin-chart-table) for more details. + +```js + +``` \ No newline at end of file diff --git a/packages/superset-ui-plugin-chart-table/package.json b/packages/superset-ui-plugin-chart-table/package.json new file mode 100644 index 000000000..ed3b27844 --- /dev/null +++ b/packages/superset-ui-plugin-chart-table/package.json @@ -0,0 +1,40 @@ +{ + "name": "@superset-ui/plugin-chart-table", + "version": "0.10.0", + "description": "Superset Chart - Table", + "sideEffects": false, + "main": "lib/index.js", + "module": "esm/index.js", + "files": [ + "esm", + "lib" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/apache-superset/superset-ui-plugins.git" + }, + "keywords": [ + "superset" + ], + "author": "Superset", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/apache-superset/superset-ui-plugins/issues" + }, + "homepage": "https://github.com/apache-superset/superset-ui-plugins#readme", + "publishConfig": { + "access": "public" + }, + "dependencies": { + "@airbnb/lunar": "^1.8.1", + "@airbnb/lunar-icons": "^1.1.1", + "core-js": "^3.0.1", + "dompurify": "^1.0.3" + }, + "peerDependencies": { + "@superset-ui/chart": "^0.10.0", + "@superset-ui/number-format": "^0.10.0", + "@superset-ui/time-format": "^0.10.0", + "@superset-ui/translation": "^0.10.0" + } +} diff --git a/packages/superset-ui-plugin-chart-table/src/Table.tsx b/packages/superset-ui-plugin-chart-table/src/Table.tsx new file mode 100644 index 000000000..9a41c5e75 --- /dev/null +++ b/packages/superset-ui-plugin-chart-table/src/Table.tsx @@ -0,0 +1,276 @@ +import React, { CSSProperties } from 'react'; +import DataTable from '@airbnb/lunar/lib/components/DataTable'; +import { Renderers, RendererProps } from '@airbnb/lunar/lib/components/DataTable/types'; +import { HEIGHT_TO_PX } from '@airbnb/lunar/lib/components/DataTable/constants'; +import { FormDataMetric, Metric } from '@superset-ui/chart'; +import { getNumberFormatter, NumberFormats } from '@superset-ui/number-format'; +import { getTimeFormatter } from '@superset-ui/time-format'; + +type ColumnType = { + key: string; + label: string; + format: string; +}; + +type Props = { + data: any[]; + height: number; + alignPositiveNegative?: boolean; + colorPositiveNegative?: boolean; + columns: ColumnType[]; + filters?: { + [key: string]: any[]; + }; + includeSearch?: boolean; + metrics: FormDataMetric[]; + onAddFilter?: (key: string, value: number[]) => void; + onRemoveFilter?: (key: string, value: number[]) => void; + orderDesc: boolean; + pageLength: number | string; + percentMetrics: string[]; + tableFilter: boolean; + tableTimestampFormat: string; + timeseriesLimitMetric: FormDataMetric; +}; + +function NOOP(key: string, value: []) {} + +const defaultProps = { + alignPositiveNegative: false, + colorPositiveNegative: false, + filters: {}, + includeSearch: false, + onAddFilter: NOOP, + onRemoveFilter: NOOP, +}; + +export type TableProps = Props & Readonly; + +type Cell = { + key: string; + value: any; +}; + +type TableState = { + selectedCells: Set; +}; + +const NEGATIVE_COLOR = '#ff8787'; +const POSITIVE_COLOR = '#ced4da'; + +const formatPercent = getNumberFormatter(NumberFormats.PERCENT_3_POINT); + +class TableVis extends React.Component { + static defaultProps = defaultProps; + + constructor(props: TableProps) { + super(props); + this.state = { + selectedCells: new Set(), + }; + } + + handleCellSelected = (cell: Cell) => () => { + const { selectedCells } = this.state; + const { tableFilter, onRemoveFilter, onAddFilter } = this.props; + + if (!tableFilter) { + return; + } + const newSelectedCells = new Set(Array.from(selectedCells)); + const cellHash = `${cell.key}#${cell.value}`; + if (newSelectedCells.has(cellHash)) { + newSelectedCells.delete(cellHash); + onRemoveFilter(cell.key, [cell.value]); + } else { + newSelectedCells.add(cellHash); + onAddFilter(cell.key, [cell.value]); + } + this.setState({ + selectedCells: newSelectedCells, + }); + }; + + static getDerivedStateFromProps(props: TableProps, state: TableState) { + const { filters } = props; + const { selectedCells } = state; + const newSelectedCells = new Set(Array.from(selectedCells)); + Object.keys(filters).forEach(key => { + filters[key].forEach(value => { + newSelectedCells.add(`${key}#${value}`); + }); + }); + return { + ...state, + selectedCells: newSelectedCells, + }; + } + + render() { + const { + metrics: rawMetrics, + timeseriesLimitMetric, + orderDesc, + percentMetrics, + data, + alignPositiveNegative, + colorPositiveNegative, + columns, + tableTimestampFormat, + tableFilter, + } = this.props; + const { selectedCells } = this.state; + const metrics = (rawMetrics || []) + .map(m => (m as Metric).label || (m as string)) + // Add percent metrics + .concat((percentMetrics || []).map(m => `%${m}`)) + // Removing metrics (aggregates) that are strings + .filter(m => typeof data[0][m as string] === 'number'); + const dataArray: { + [key: string]: any; + } = {}; + + const sortByKey = + timeseriesLimitMetric && + ((timeseriesLimitMetric as Metric).label || (timeseriesLimitMetric as string)); + + metrics.forEach(metric => { + const arr = []; + for (let i = 0; i < data.length; i += 1) { + arr.push(data[i][metric]); + } + + dataArray[metric] = arr; + }); + + const maxes: { + [key: string]: number; + } = {}; + const mins: { + [key: string]: number; + } = {}; + + for (let i = 0; i < metrics.length; i += 1) { + if (alignPositiveNegative) { + maxes[metrics[i]] = Math.max(...dataArray[metrics[i]].map(Math.abs)); + } else { + maxes[metrics[i]] = Math.max(...dataArray[metrics[i]]); + mins[metrics[i]] = Math.min(...dataArray[metrics[i]]); + } + } + + // const tsFormatter = getTimeFormatter(tableTimestampFormat); + let formattedData = data.map(row => ({ + data: row, + })); + + if (sortByKey) { + formattedData = formattedData.sort((a, b) => { + const delta = a.data[sortByKey] - b.data[sortByKey]; + if (orderDesc) { + return -delta; + } + return delta; + }); + if (metrics.indexOf(sortByKey) < 0) { + formattedData = formattedData.map(row => { + const data = { ...row.data }; + delete data[sortByKey]; + return { + data, + }; + }); + } + } + + const tsFormatter = getTimeFormatter(tableTimestampFormat); + + const heightType = 'small'; + const getRenderer = (column: ColumnType) => (props: RendererProps) => { + const { key } = props; + let value = props.row.rowData.data[key]; + const cellHash = `${key}#${value}`; + const isMetric = metrics.indexOf(key) >= 0; + let Parent; + + if (isMetric) { + let left = 0; + let width = 0; + if (alignPositiveNegative) { + width = Math.abs(Math.round((value / maxes[key]) * 100)); + } else { + const posExtent = Math.abs(Math.max(maxes[key], 0)); + const negExtent = Math.abs(Math.min(mins[key], 0)); + const tot = posExtent + negExtent; + left = Math.round((Math.min(negExtent + value, negExtent) / tot) * 100); + width = Math.round((Math.abs(value) / tot) * 100); + } + const color = colorPositiveNegative && value < 0 ? NEGATIVE_COLOR : POSITIVE_COLOR; + Parent = ({ children }: { children: React.ReactNode }) => { + const boxStyle: CSSProperties = { + margin: '0px -16px', + backgroundColor: tableFilter && selectedCells.has(cellHash) ? '#ffec99' : undefined, + }; + const boxContainerStyle: CSSProperties = { + position: 'relative', + height: HEIGHT_TO_PX[heightType], + textAlign: isMetric ? 'right' : 'left', + display: 'flex', + alignItems: 'center', + margin: '0px 16px', + }; + const barStyle: CSSProperties = { + background: color, + width: `${width}%`, + left: `${left}%`, + position: 'absolute', + height: 24, + }; + + return ( +
+
+
+
{children}
+
+
+ ); + }; + + if (key[0] === '%') { + value = formatPercent(value); + } else { + value = getNumberFormatter(column.format)(value); + } + } else { + if (key === '__timestamp') { + value = tsFormatter(value); + } + Parent = ({ children }: { children: React.ReactNode }) => ( + {children} + ); + } + + return ( +
+ {value} +
+ ); + }; + + const renderers: Renderers = {}; + + columns.forEach(column => { + renderers[column.key] = getRenderer(column); + }); + + return ; + } +} + +export default TableVis; diff --git a/packages/superset-ui-plugin-chart-table/src/TableFormData.ts b/packages/superset-ui-plugin-chart-table/src/TableFormData.ts new file mode 100644 index 000000000..45e42e128 --- /dev/null +++ b/packages/superset-ui-plugin-chart-table/src/TableFormData.ts @@ -0,0 +1,10 @@ +import { ChartFormData, FormDataMetric } from '@superset-ui/chart'; + +type TableFormData = ChartFormData & { + all_columns: string[]; + percent_metrics: FormDataMetric[]; + include_time: boolean; + order_by_cols: string[]; +}; + +export default TableFormData; diff --git a/packages/superset-ui-plugin-chart-table/src/buildQuery.ts b/packages/superset-ui-plugin-chart-table/src/buildQuery.ts new file mode 100644 index 000000000..d227a396d --- /dev/null +++ b/packages/superset-ui-plugin-chart-table/src/buildQuery.ts @@ -0,0 +1,34 @@ +import { buildQueryContext, FormDataMetric, Metric } from '@superset-ui/chart'; +import Metrics from '@superset-ui/chart/lib/query/Metrics'; +import TableFormData from './TableFormData'; + +export default function buildQuery(formData: TableFormData) { + // Set the single QueryObject's groupby field with series in formData + return buildQueryContext(formData, baseQueryObject => { + const isTimeseries = formData.include_time; + let columns: string[] = []; + let groupby = baseQueryObject.groupby; + let orderby: [Metric, boolean][] = []; + const sortby = formData.timeseries_limit_metric; + if (formData.all_columns && formData.all_columns.length > 0) { + columns = [...formData.all_columns]; + const orderByColumns = formData.order_by_cols || []; + orderByColumns.forEach(columnOrder => { + const parsedColumnOrder: [FormDataMetric, boolean] = JSON.parse(columnOrder); + orderby.push([Metrics.formatMetric(parsedColumnOrder[0]), parsedColumnOrder[1]]); + }); + groupby = []; + } else if (sortby) { + orderby.push([Metrics.formatMetric(sortby), !formData.order_desc]); + } + return [ + { + ...baseQueryObject, + columns, + is_timeseries: isTimeseries, + orderby, + groupby, + }, + ]; + }); +} diff --git a/packages/superset-ui-plugin-chart-table/src/createMetadata.ts b/packages/superset-ui-plugin-chart-table/src/createMetadata.ts new file mode 100644 index 000000000..1adcd18c6 --- /dev/null +++ b/packages/superset-ui-plugin-chart-table/src/createMetadata.ts @@ -0,0 +1,13 @@ +import { t } from '@superset-ui/translation'; +import { ChartMetadata } from '@superset-ui/chart'; +import thumbnail from './images/thumbnail.png'; + +export default function createMetadata(useLegacyApi = false) { + return new ChartMetadata({ + canBeAnnotationTypes: ['EVENT', 'INTERVAL'], + description: '', + name: t('Table'), + thumbnail, + useLegacyApi, + }); +} diff --git a/packages/superset-ui-plugin-chart-table/src/images/thumbnail.png b/packages/superset-ui-plugin-chart-table/src/images/thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..0561210b9f97f1dfc0acff2b4d262c3699331fb9 GIT binary patch literal 22572 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¥#c&spanu~j!nB$50)00IV9M)B&vUo545*CuYAY@q=msy=apDoe+Z}O zgB)INg=x=~Kwzp;Jqm6<-iuB`b8AF%r5!dz7;iEs9~$+Z)?C5jYmc&dyOzL?jic1< zpJrh2VZ-t*rwItb&Ip-(l0?Q}x(vF_S_}g)Yq5vAR0VV;j;Ws^_wMXw&KO)LL+)O~JaA3}&wC zAJuYNjp@Yx>Au!JC*O?zSRxKho9DD!jV*FLxX#3beE;H6-mfD(T<+IF71)Bv-qWl> zKSKQA_(v7Jg;S{04l8%}4~k-c_+Imy$=iD5T*yIK+0p*Z$fN43(F(0Df8^p5;{JU{ zd13VJgC{Fi6yJ&fNUi3Xy+q&_vuLSHRO* zfOlT&3$wc`))76MWpT3H2R2k4xiWNCY$jxO%;wE3+Y-QQn^%U^4(>YQHbw*ir?!@c z;lx-8@>zkFcoNov*X0R{`hq1B!oe?x0sM(9Xy2_si}p&Uo8@m46s!Yw0s5 zX2eCbyp<4jF-y|sI8<*ED}d+Oe>HqWXjnClfx1_R^E?f@T{|8NjT_W}?)1;|X-R}k z*|hP)=Ra?AuXX)1`B`mL0*}f8u7-wJ(H{N5YWgF;L4zwvluD;gO$4z<%4n9gl<$AX zjmW}Rh6R5%H};sH#VtNXBwkdt9eJE#Inv(UuVSGVGL%6`h9$Aq)1Koh&?YQQYz1sj z_!?_2XuMK6$ojd&G#wfL&mGc9TnIs%qg=^S%r4Wt-6394<}0paCSI%Fr?d|Vh9L}%osZnFN>e~5PgnM5h03HWyWXo{ps$nBEFqu`<0Gb!d}im|Dx;Xo_j7c{76h2 zZ#DP5OSZvdIPp^fj#MpFv;`H(dFJ0_@~lR2xM3A-OFoqaF7Ln-NU!k+5d9hm>70MN z@9idXV0G%29e1$pTJVe;14#PZy%mQVAA-K()ni4nttTxaEHnHR=skDgzNRE%I%l}; zX8B>mwa>?gla*^N+(N2n1Z%Cf!HrKqN^D3j#M1e)_K{x-I5gg>dH1zA%>Lz1WXsoA z=+LM3Mx7oDUuK?6!tg@P-qt>~Vfw%a^hj)l5FNsvNIzbxk}h@matPi`_)T{ZBO*!K zO;*dWMDTD%^NnxO4m!lLf03Bl9+zqZc-@?KpKPIMFp_@v=>9K&&hg?TA~|D$@oS52 zO0!udE>=q3iy>C9vDM&F^31{3?RceNL`4|~5p$eBF1~Ej$ z%SNe5HBRpl%D+UlR2Q6R`Som69|=xxUa)-5Y><#z9TLDK)4fZgecT91;RaU78FCC> z%%p-MUN&t;rPwPs!vV}(X3OHp6?AZ()(@=wv~7TIwVpW_@8HKJYY`-8y|4r||EN=b zy36}LXWcui)+LabyGQG|LT!V!WGEv_OQXoSPV0x|858=4Lt$t}=#YvL&adR1pdcy5 zBPhmu-vtW}No*cWF{0_to_oCgi7y7Gb!1j2(pV8ib)~gikae^9ZQZ=E5v>AvisQ)| zJ#^$J;Yp(w`SP`&@5NK|{L4_;?#FD1c1@od@y)V5*V2tq=)a`-?wkN<+Yghc38-|lg)A! zLgx{eWRI^R+kpA|tSMIeCq0r<0gJM2Ja%$kDm<5IJSffcmt^7|guDbia-!pW2#-DD zZhjO(x1?yiESpv|a&aodcAb<9dSX`I%FBJn zOyY5YQjExz@oFA7@$$!0%w!p~KOBN#iwFlGi}IN#m?vqp7_FGdJ?xzl=wuH#8j+FQcld zc<#M4eH_zRy?O4ciQ>Td!)jiMyffryq)SF?5qkV2)qX;Ti-|Cugmd!eD|-Ty1zj{uMp=+%$KyMp%CzK;3NRWU2c_C?Y0K);6h_`Nn zLO)cC9G!!O8w_#c{R0mGG3M&Fy%TG(y)N9Y4MWiD6zPqJ&uNC2>59V*S9e7@;jJ(DEIS7qpNEc4i&T+RM|=X=5$_#9Pyz z<$M<5(|2y?=AY9F(m$qjF3jf6tKIr@{-kxp)i)1S&oe5XG(TZ;ydR0B#7gNzHS?d9 zxIOp$Y=g8{s@l>OH1LKV!pv+G>E#rZ)zxjzN22L%gWjj;ijGk`m|Fy!3$~o_y?gW* z0g!lQ82OWEFO8Xp%jA~9H$vN)qgOud0kl`Oz76>%soNaaMjd?Be0u<(ZAv}v*=4vt z)_2kS4VT8ano;-vhK;Br4GQ$D2D_MDys3M$gEw%b4D@>e)REx*zp(HA7p~lZlNOOXUWCG-R!()a`gjqfzSq1403;0pI9FgPJYN3E8>3=> z0xxSbx6@F$bibMZ69RmCXaX#R%3*y3R7CtwKf&=IQuhDlj~o4k4K@}}K6Clc*V^zG zAxnR57sf;90XhpCU!c9PCIpSmB}im#0RFM32#borf=&6i66n+TF8Z^3bK2d4Mk>Gt~kj9|BesNv3ZqM`lnD-WjeMwfw!wwU=Az!E50j~yIUU&f?u5%4e7l-Vf z|NQ=@+fabf!V`d2X25^O58Z~lp?#o-+l0aA3v8RSirgXmCJA8wV~2d492PIx0H(ox zSh9-9&h4Z9W*>DCWeSb*iHwM*T%}a)r_yz5aYPnpJRl%Q7S3C_JWR8#0Tu8KDu#<2 zzgrow>&X(AmVQ3y3SH5?Gsl5IjeUg{PFsU1S(cxtn(=izOHhziBh_`Jd7&Bjqq}En zXy?Kzp>1GVXb`@oe%ZA)Ok0H4K>u)So->`Z4x@dVcgVF!CzuCjr~~d6%~CcQ=N5`sq0kWPb!1K@vez53oIh-O=h{3*q2?KacK94Sa|d|I9HV)rvs@Zgm*=PKRO6_Z-2kJf zMG}E3K^?SFr15{rj5Ja3!PhHuBLs$S<;EVF*%_?~MH<{egDWCM@M>*mDA6quGZK0j;V% zd~8v8VH!(?4c+KUw<0vI%v&R<$Sk^I{gWN$x_AiW1SzL7ghkXT9e8r1_z&P)`P*$V zbWt(gq*VyU%EucOYbf!bXYQP9PBW$yi-Jp<{8uwJZOF(2c(kwKy_9*5g(2tmG@HS|H zUA<*B!RI*N*O8ka+gcVb7=G-XO7bEWHL^uK_I}%~eZi6nn-bO1^FBKhw&fKc)+<*) zWZ&xRr12vY!g0P4tF^bRk;UPfg<%gWO=r28(NaXpN-I;_n@H&`w|d0$jW zK(tTTo-k>7aV?ud1AY1jFn+J-kuU2_pJQ0`*Zj?4Jc;KxoBR`IvMXn~3kluN#K(5O z19hz%T?2hxR(HnANhPR8cG|nH?O7>jzQNTkM~1aFS9B-goWa@NT<;6n^F#9k0Y-yw zri=sMAj)HAob!1gnsir^{w^;LFNhl0|Ej4MThX54m!Ld~-8!_{l;KzA;(6Yu2}k&J z*1~hnqm=+nk`f|SMirg_ufjS_TzWsRw}%1g zapVo09Svx0?{qX(8CByzl+&}CNoRc4*2wtWLlYEG453~DoO_kpSbCSgv%+UogBu9a zGHWe*c4Q|hq7f4N7S9jwTJS3WjfV$k>VfsB;SrX}cIa0Pj3do3R^nZH2)>!_B7bKJ zX%l4g-~u{`fJW|(JRAwHtSRr+Zi;J4?;n-4E*{)#eNwzu_6P%$i9ht8yhGEreGW-; z&6&9zc%>V(RjBAP4%t$zH#O)sX!+~wi9VVHGQM>i9S4(4$AU|`=#6X9mx8;N+J|cl zaZ>$$6<={&KU00BB`jqvOaj|yaj0l*@v$mp?-wRzgkEW?O}Yjr%%1!vCAHGlIyR#% z)>qhFe}1PTvu&t=Q79(@#mLRlt!+CGY#L9zY>ZIhuG(#R$4BPJ!Vo*jIA1|ouK7Ir zKNx!xaH`t2Z~WSWSqPb@Oc_HWB(`LV%#|c$7ez7_GHq1Gj3raiq>>?_D4{ZDZlEL? zwzg8SDMQ5nT)Lm3&GroGAhoTTEA^Y9wSi;323gb zp-jMV5yk<^BD9d@t&~v%k;zrOTGV`mGNZO+DkcR)AtRy;QCAzhb!^(ze{Iw`L)V~u zc=Fh=?Yp2kj?sx}#fV>3TV4;!NB$u?M{3Sb2+7i9>S@2*Ox6Y?2rGzLAAJs(SoU_1 zT1h$lG1!>=LLs^@UW=)`MQhr@V$c!s+PSfucwRS-3gRSrJsgincYu?Z3?liqmMIT> z^unQN76xrXcwFYDE;c`EIP>{D{YG-$Wis==4mhvG)K8ZWEP2x61>+DJ&xR)MrD^>$ zPXamscj}3+T$R>YtkF&mXrghV;pOqsIMKt}u^hz%Qc#AID7=_)C5xf>v@^HFsC^w# zLI=f(E?b-^>BEt1#y**_AWs6)`P#Y(&C(s<3k4wtiv>qGPg>nx0#l=zElS}xR7ZX# zO~M@MgOE#ui@*(m)z%tC<+P)ttokpf^nR79X_d*`;Rz1^CeDW_UN=bzov5v;&4+I8 zZ-4U7+O^Jk~f_j6hm$!T$ z3$qjFk^3NLF4=)h`Q-9gY^66rcZg9<*IFwLsN)cAyIy=VTGUmmaAraG4~w&`f0h<0 zRGQ6^FwcPUGUipLbh>E9{Lf(>1rOJgIArd;P_Oc7cap$X@ck6g7@TLqBA(ce;>+bu zGQ_#Ow#=>%Qc_OXjDs5uh7tn{<;pGJq~l>JXp}0|VLM9ZT}kp=5Ng6FJPmgE%Bbs_ z)V@tqcC+thlE|3wlxVI9$WOpyq1lo2BS&{tnx95rc1j9*!$`d{mGh^iB`a9L>I7X& zuk$8Z5H-Hio|{P!(RzF)Zrz$%V`K-CJL6}1dgwxn95K7M+eMskl*pLSsvE}@ob}y} zlKkr-dvkd?^OX2Jg4CsBmo}mM$F1~Y`alj)V3?}#iB&0|E)`G9s;y3*g!=6j;`pBC znOWfGp&pa_yw-cw5Ij%^+kW4j8Sr3MDd~m_Sq6}QS3>Me>2f90<;xo`ZIgYjKl{OZ zG`~0?>6V?eRbz#2v#Qt57Tj=WeF`_SXF^I=skII{B64Am`QOY?4b zMS1D!%$X|}v^cUFb}SjS41X^P>=TB2AGEn~5&{z$0xBt|aOujetN#>(-gX9vw@1ZV>7z;@o@t zN@n(EMqln>x#9PIx%me?Nj7Gx*UZsgJR&AkXP|QmB+BGbuGu2q@`b{iE7D7E+{wXJyZ@32WJjonE!w9B67Q(*KfFefZu(XTors~LSp=*I_ z_f!X08*3X|{sykXSCDjbWpufm6Bo(9l3AxsgG z0)hCW+t+R`O8kz5@L?e`Z-~4e>Br?Iw9>I)>}_4Q*Tn+=>V58~@Wk2;a+b-$+WPII z)7$+=fHhIe%By4lyfzQPmRnl1>dD!t*;mO{z1?))@4U;}XqaD`q?*d3D{<}w;x^L6 zMPE<9E*9PGCp{F>&O1N zkIYNPaZk^DKr`D4T89Ptm|t%&NLxR32qaY^QQ6(OpK{N}N}tOg+e|FCLMeXU#QrUa zMD#1o?N0L=chb#Y75h8rG~ye1Mp;*<7UWa6xQhiV*X>bicVXfk_H&L&Nf#JzzY^>- zkVV%HOPR%Q@cMZ00IbC)5vBU=<{G0Pk6;%dB>Z%P?YwTfUxIGxa<#6d+IqgAr$t26 zx`Qsfys5iN(45RJJ++CJvONfHfW~z*HqCuuoN8-oKq<74dL-w)M_&y@Cx(P>SMLnT z4LuOXHGbhsQM?3Rx%gCFCT}j0zGSZ`Ihq-}cxHIF+ZRH8P)T>GQo>KiDbbItylPd+ z@%3yiPrH{C-wxqO93P7oH7s`AB{lw9trvf(KR+!`pIjFE(_W%l~ENFdKDLhfU+O68obzfm`3M6&M5okd}C3NAZsyz;VAf z9s#3j4~3JrxqrY_D$lqAIYAKuIeiJ|yQ>EP_ z`hQhV{+3t%viobC{r~oc|KFla0X)hunjUM=iSfw0uWIahJ)n+;v!E1k8-+uyU=+~Q z9z3InA&ItJ3ryB+pC*gZFIeWO8gNJEZCQSMq1cR72NEy_Rm-1h+C;-rfUypfO~Aj~ zMquq2HEX+pw{r%?^^GFHd6~&CS{4^U7qPc&5d_{%P&v*OA#8<58fv}^g`ZnvrOr(y5KjzmWa>;Yv+LMZDJ02@9yWR z98ZB0$p<-3KuhQJmEurJ3cx-AAmVc5j}#sTN?QI}4Y>B-&f1Cu!m(pbQ**vZw1J>0 zXREx7y@0w1mU~LaBC8^o=_YhgWn5IHJ5=F!z5WVI1@Hi1eTI4go!SSkbv1=Lk&vjN z2^u~D-4MSlLH^CA>E?19(s0EBd2^WH{T?_^jB+iLSZT#oq$2*3TN7~puhe)+z1juG zzY8Mk)-f^^TfC!3I;iThqniTz?bVyxV36=(g@UmUpb2?hUE@3QoNB%h`Ci3_Qa$}_ zPp+m+K3VscaKVX%ZT-z^E)k2jBCVm~I)Kn7s#C|Y-j_L#zNVsCfv)yYwflygA+;y` zlw!2K4HrYQ{BAH@=G&1zUg6Qr2PX1j0bWqX=qJTSGw=?k7h@JfWH7-1r1yzDhnL4>(w6ba$(Nztx zYBfc)TV6~qEW;O8d$bK7S?YZrZyv*XI!Wke(h))|fvCi(W~QXydTZ|`Xvr$K#&qmK zq%9p0sIoMDa7H8w$CQlEuQJr~={TvD3TR$iTd^sOcd;XGy~Jav)A@?IcR1IDy`R>N ziZjUVfAym!BumuwV}9Xr#{fKXUmx#NN_OQV)*LDanKF=_l_QfRLIX*t1Tj%KO&hlKntd#x@}w>zNs|5UhVr(9;3#L z%jhX-NKCngL?O~We$-&08)0x&{QM{SJ4hxgx_VhH-A%uFpQ~1c*|n=FAvJ1harw0N zVF9+bC2jGk1I}jxz)^3n@@=5Xd`&&U11ea#SMT{L??a;7K)_?W-LfMGL^#^Vd!#W4ovnecB9kex!D0NKT5?6J+yTxjPk_++Iofpvi(3o-_ zS7Q_5I>VrK+Mya`pYpJ5u)oPNe90o)rrsjb>l(S550B!|$J0 zTBhj0?1DBz!VA>%@Tkj(btN7P#B{ZNTNrh^KGT^~ryvEI>aH;uB| zxIPpUP=+vG(dN}gx^BcKrfxMumONmBLG-e)dRuj5RiDTn*EQ%!R%{O%)p$c(@X$Ec zVCyV9`!aXfmu%(!%2d;E2*>z4r!3vM73sYhZT^=^sVt zn`e?5o7o^NX}TARU`|e+E?Fw>1vuEl$VaepBE=K zs6Dim8%acg%U9Z7K#?7EbvTk29wh{w9&VHu+`7nM8kmbm!9I5+Xv0n*zc9na@QMGR zwMleM!gIN>3KZIQc9{xk3slB$MC*O(+=8QSbxg=S)1j_WTg_4G{j?kt`u2cbdiVzp zyCg!Wpkx7y15j>WY|cHJ=ycYt-svn672Ll);US1?7nC<$&~v=pwvD*PZ@JTFJC{`x z{C?oM+5;2?MYq=E(=Yj5IO<#LaWao{wfWP_2th=7%IrpPP6(fSb6A&Q>$KLdb8GZ4 z4|44}H#7d|cY~kb8;4cHgB(Vo#ah#ns@7?tOnLe!hP6QO!s` zm^PAi2IjS|a#TMUM~JL$>B%70?PDZ|UHVRDWa?lR@!mB>`Vvl6^D{Y9j18quu{21u zlO7*wOaB>w(CO7AgABA&!c}z~nv#|WXr|zp5lb(JBIqGYG;l~gN_xYhm{jFP+tz^g zI#o^0&V&5%9wIyy=lwYS+~vofPWVbPexAN4$ek(j=5hT4SY)j1=apMnU&FG5?A7~} zDx9;T>(T)eABwXe_23$l$X9)s*CzSOACQ8Xyox+CY0Y{vPu%^?+rVC8AyQZGS zbh@NdWHaRD{_(xznk*Mv>tnC=C1W?@e@S`&eq!yT{}THCFN7?gDtsMG5sb-!{{v3^ zC3*jY>IJmI`G2aKu?C&ss#Lh8w;oJ}#Rd^#;-#>zx+xG0nwg@R0NbL)4eBXXVN-@w zk9+p7jaFRRIYI6`OuK2%HVMu;Zvy)9son)vg~sx?zV3$P%LotQ2l*Mcon^49zG0M! z7Tzno4crktT~H`~b$d`(x7l63eQO$LIlyUrynxjHs<8nbuF1In!EFC;oBtgVzFmj3 zfU?3`hOBD-#e|r4iUbfRGiewfm#4S$Ht7K@MQ(5`pF9!`hRuPK12Ja?2CJ{I~&A z>tg*&c-6s->I~}12P0Wnhe#|i)aM2ft?u{e%9CHiQec#80*P`WEQX(+Vqa{5&L0T| zF^n4^KuJ;7GA}Fa;%rOk2pKE~R(hAc0A+m<(mFpsQVzZAWL-)EI|q5fpPyxE0$X23 z_fnAkcTt2T(H#G_g!L}jXn6i6-Mja?5eCCP>GT7sl>lZ^UI@TauERQ7LgdiYDWJzr znCS%r?R&lj(8*=7gMcTb^1DufxgoFv;-uGXmXNssP>@elC(tzB`xY64dW<&7*+AS@ zgbT1YfI)Y67no{x!=q7xegIa_yTh>dEW9*@&Yldebpomd7=rWz(e7G%3-HS(!g$jZ z2>=`Hbsz@sa$QT6cnDuYal^K?3Zc?+Twe6`IyjeY^ZQC1fAy*HN@K7lnt;*CIa(NX zi?usBKY!-ugpCdc_S!!Ae|#FcO|$|o!cVb0fJO&5kQvG;K0aBwK(S+61^03gc@FotbDqfc%^(tDU4g&u@t%TcDK7!&rm)~3S;SIEDQ1YS6|a_Jz&?8*QY@w~ zfc@-KZUbr+3<%4ZGcuB`QN=nb$bX|J!@Bu;;#$kh7$tJQga$&#czAGZ@Qv`(G2R@~i9riDUv$oFs zq(JWUGoZ(0nOEw_8~RD~43=EH0y+A6P{lS@OUojfwx(RW zzp>`pxpF9^dQpN+U@3d&3@l~Ew23ZlJPJ6J*`wrCtt!f&lD4UbBS~evZNs_kb&hOE z_5HKSR^^x7vtqo0O6HiA2!}|XbA@d#G5YwS>((v&ZejQO3SG>FHBXqH!gKA=hvNTo z`tKO}wkaKw(mldJ`8TK`!7_y%3H-#G7jVB7-ga`U2kr*cxjj8OW?()eFt z#P!jPExV#iz${h4M2a{8+(hv;t&OtdDRy#L&!2VrJSKqYTZ~)o@5|2S3k12Rh?j%y05xVWWT%N?y4BkB ztbMHOl^kyH$9Tfn6?6YNJMS^=?h`Fqg8gV*3c;BtM-nm%jzn6I9U9 zQL!Lc)EuV^7%`NW>SpY8lJR>9#FvInR;_s=2s+jwYmrp4HI+8D!#BA8SLywpSPyPRi&1*riTlEJou^tJ5IhP0@>YlIdv6QtwnYhkBB=)4n`ohoeF){H zxHiz)voOIgfMmis6m?i=}ILxm*dG*LlPv^{xDM<}GvIMT&fMer95~BiF zjCuJ2ci<$=9OWeak+t&!aA2Wzaw};)wqV6#M3z@|vrj9ubek5woPu6zXH|SYJXBs3 z6V(NVSnk?HK}?#UMJYCcw&lN%jKl9j1z$mMq5h4~?7!`?&+PW2sh`HSkC?}i1)1c3 z-2494h@WFjwml-Gm=6``xpE@eb+~U%oQF;)Wh{4ayI}_ia$VP9vilW-to|Oc*nk$< z{k$NYJGQtKXU6W z`v90!Zl6i=BE%@QG2Nq>eR&U{&wjh7FfPaB)qhuy6NWbs@Lyv{-lK_P-7!zH>8 z9}tuI{_GCfp8K^qNiURLA|ZSxEKE7`4Feh$!U3{ub}hhte2RjG694g-;?Z)_Y=xqV zcOchH!B=fqVhWnRe-}e*PdJ-7C1|0oZ?E=gqyld5vt}1#c=vG&6Zbtn$JgH!GIP)$ zJYVn_48AH5kMNC^)h$|*jJ+FE>(Aq390ccgFe2+lRj!^L4La@1BCwnp8dBn_KYT+~ z6Mv7`k#)Z{T-#la{`B2tDJGN`lWfE)#>z9a-Cqlz3734+y>L4O!cGik5_9+A(HM7_N6_KI(akfGeP3zj%F!Y?oIE9Qv@$)ZHB(sp=_z7 zUX5{Eu-DxIjt19bWLZlPXMzP3pH=7>rY<9`9s9S$HHo5o6s`dcmT-iCg0E}9L z@=gk8szKipmv8k$W_IbeO5B#7*ZX#vAR3X|{(2_x1SCL{Zk%fI((%`$s*N7ma)`!< zz|dozQ#|Z`)?q^sk|R(|ugCc*DRQ|&)C3tK9@aJCQuAvm97g^W>%knJEMq?sN3_bu z<%?rvGk7Sc&Zfp#r`~VN0ya~{ zbE)bJo8y^j)rQ3zoy$w>2cAM|^y92JmxjF^IBK`|G>vlAXw5W2du2esuaR>EBEf23O$j#`vm#APPn+Vf+0L93yuNWC+z@1@Qax`_!$AMT+YK zDEB=yxy*ehr2Zn0nriwV%7`iI3I$*r4w3B-NPb$H;05#gO>lfI z*2ukOted|!Q(^!0#VIKMbIut$(>(6HX}Q;l8o<)X3dr+J1?03ovRRVyZi5m*?H@oQ zoezj06y|({C9~WYf3>6F_(03Sf167Gt^554e*OnWUDNsg^^E=toUWNrF_iijVE#|0 z(uPgYfa2qm%U!?pPJ@E;r%<{twht0H6f9SMP`zHY25|d#-(ddIMGLU7OMnMHUm~Bf zXAhKY699PLjMjeyP-ugcanhYd=gXT9DPR=Lga+thE#gUGD3M>q(#$77xPPUNvJ-ZX z{H8HEZIYmR0!HOP=!GH#yLKD5U?I0nP`(yw+Fc1{qnxQ#%yf#;L+)L92e6JET4#P9 zGt_PDf|L|Y+_`eC@-YzsB-spkF18k6m=w^D2*bK%JW771U*=Sk?w<(umWNoHi}nms+G2Q0j~DYE1ny(jWQpcsla?s$Z?^Uw+U;e;vq zdg%Vg>$`dydBww-k9g>&x)nMhx1w0?lw&MR|TD>c4$vRwSqzJ z1Guc~Tc@*wMmE z3!$kGgUw5f!Qixp2z$&;oDhJ;ASXmNrb5c(%_9?!K1FzG{eTm4m$~4WL?5-tz4rVl z)<;wR^Tvd1NFTaM!^&rbwcM&jri$qf{Ai-$zGBme(?E9wvKxg#vac;Y%E!M8LWpno zr&;e+U*@&G59aAW%dlc0um<|ByM(z-zl7i@ea<*kXL8t5lyvwin+w}P=xGprJWoY@ z^^RcCTYk`Qo7K%vkGudY)5mbH% zxzAANa0FTU_HZjjv64_?jA}GPiQZd;x(#RC+%G)4l5bXh{6$P(25-*~o)Qw*F2=)| z{Ju)+sFo>(_I)S7x09yK3#r*h$No5sPQT#Pm;Q~-PsY398ZQ`>REykfNVdr%807(X# zi!9B3H!ovo^mGL2W#vy>Yt%H;0$?+v*{iN)8@;La9TTxf`94sHMN@m2P==6zYE*W+ zCs=4PQTR|!I8`K&kR}CO+#D-HJ{@1x2`=88sM%&_7LfF|5G$3LBRbJ-R|3f2Kr9i< zi71h_)EoXDoaUTyJb|y*7yt;{x#Pk++u;Op$oubdxlcFAZ;V~f^=><*1uC6aJxCX- zf-6_k>{GzK>G0^}A)%jU=a1u(G(w1*q6yx+bgk67esMF;5VOh9inrg`Orz}ZAr)WB zlpu9u+F=os2jDk59~F@9uq%y3xqkGrMDt_UzFld|srRePuN8*>Mg{3OR(WP${7r9^|9a>S>LK+>a)yIfgRAsZuxZ78+gl(^+>Q zy>)(slTxAUbNDVtMckh9AV9(#w(ll1Z)vaywE;cbDWmiYz5eFcMa_knE!kH>CdIkV&dWA5{mKaI`9)EiMa77cmFMNS zghNDkog9?Y$o=@jjEqqr_xe~AO|oWXOt|d0eIditrWNFc?=*n7-&w^@GUTrCl7}A6d2s~dYDcZ3cJ`=H8}Bj zY}xMzLb_f4;*X=q%b_4Bd66z5I|7B@HHm4wa>=&h&TAXuh?nuXrF!nM>D^o^vxo$rx;hlt}e^xM3+VJZbjIvl>NKI!ZOgJ@4+w;<{IKWfuI5-m8eA zuCAMdmNR!3NUm_!IIJ@06g7UHD%Q&&Ak463*7V0SdOajG4BQbAZ>q$e7l29 zZ+e8&()~vfi6l=znW)iwkHb{=B+D-A7N<(#bLAXbadP$g`s&*u`J!?Tl&Lp6We|(2lT3GV9#A!7Cj&?DOj#!g%jL0XOiR=dR#TW`tl$-ByuJ3Ih9sn14YO?j z9`1%yCL344>6__Xdg)VCL&m+Zd|Ui_gG8_Es;+;^pk%KXjz~+A^m}1UX%3v(Oj9$) zQ5{0uobS{N(${aAkbB7^r^5_Mvg)6qDE)ryEH$WNg zHHT%&kH%0HlExPg>3|?&mnF)(@ja_7O%WKZIe6Tyx`&4^cA*8-w1da_&MPezs=G?^ z%-N02UK0xLDtUtrZsxIm-^w!xDCviDvrDtV@@D_YHTEhNNpO3mJ9GPUj|wahP>&`r zV~IzLtt0Nm5I^eq(d}ibCHeldA}+c6oR@61--TY*j@dzFisoUSz&%Sp;nFbCWll?f z4sQHxbizW&ScJ?^)!o-KU|O7@kxCy>Wo1MLVh80NueYW+Y{*6aA{EJv{8Oj^Vzc5x z(+FS~C#kzj1fbL<{^|VdQlF~ozlFm66TG9H2<7zbWz}UzR8ZvsIa*{9!sC%xUE`Bh zhq$yg&4=D8CULx*R$orxi_~mME`2x1NspZIa9<*b?BckP-!gRgD0C*Z-G5&s`{c0d z+M#+NN>p|k`wH)L<+5tE3EpD8m9M10wC)k^>!zv+H~$zS6cs19tu%Hrfn?ecFSz55 zoO0}m)26P}kO+O}O)xyI#L@k^{P)a#JOsi44~wX0#3dEh$hJza@v zCr5eEmYJi?%6*fB>brz#QE*kSGbDMmTVf&7I#KIKo!BNGJ@sN{`YT)x-cQqDB#UTo zE!!BxL>)J0d5I|VZk$}6QOgfMuHC#zz|<>$B2XyS$AkWaae_j5pm^5I$;mkI|YQJhVm-X>-P%rztF#TAr~Okod9Irso;&j1Mbd2mqo1SrKDFnp#VC0 zg8p%M{u3WWvDyIm?f=Rr{tMduZ`|Sk2p3_|zGiuxp~hp@OUXrTkiETv>i4qKMNbAb zdg{_p?8|Q3yPW+%uIRnvtoidW|C+71O4wa!ZS&vdl>Y~bcrsIy>WT4cfATIBNo0Q5 z8auUkK;hTO^~n;MW|IEFTREkg2k{tMUqj?;9OA@fj7tOqC-&<#WL|HN{U0=;Yr;@~ z>A!Em2A2Nx513z5pkkXc=zh=N4-NA$BI!OL1x;Q4j48lprutyzZa4T7Bk=fyus;Fi zQXMca>cPR%pds8-Q>p>O_9ngon)mPY=gUF6EZz7d$ z*;gP6s0eu>9%eHZT?>6ehD&I`zU?n|tXgYIxn`#XZ0mzVZXbcCO9b`l2J8vVx}Yun z5n6-OVHLjc$OfiG+I|q(sqBM%S*%m!yQiT+H)uiM-q~pA8&u7t08-oleK-#S8+!Gp z7#4ck&)W@hr%H^Ednr{Er7H$ofpk!(6z+Uke-Cm?hoQRP1f=f0g!0tYRjsRj-asKV zVX7*Qt4nqoS9DH&RjzNE!UC(T1?cYp_7+*nZ7KC<@1Oi9L~OVgj!sDjn0Xs8cUiTl zk&QM+g4FSRKd`G6m}k@TG(TbiJz>u`%l1><+3L3^-rUVluHJn&g%NGC%#$-t5&Ous z1Tx*hiABu93WvXkUJMBOOBU8XZ^L@JGo%{HV`jpulfc0J)&Y&@D6Fg2wLl{ci6}da z`JGZd3N<$e}5VkC^8G(d~TOP3jlN9&B>Ui60Tax z&jsk2qHvYgd_lO0f+M6)*)cB$?fuSztmDQ4-Zl!D;8OIVY@olmK19DeEz)PGcJa#8 zCjkDBmig+RK;MTmS9M}qFuJSY(5(QBlM|hV9OBpSwMctd%5!UP)KZ8WsZDSR=4;$m+I5;06G$=ZD8-1 zW5^;r7Z3#wNZ4*T3FtXFC;U_9z=3s;N}#ZZ4QFqP*)dy1y4#43P9NuXVmilRXb z-3~wyw*_Cn9C+w`@OS=g#Z6%wBJt_!Vx#vEF6@SouHk~{m~@>9lV#lC6&fB{yC6Kh zZ8r@S&pN}5Fy{jzuTB;O+TD-GWEJ_#Hf?M+FiU3P&^p3_eBHSZ4|vR;j&!GOOd1c! zxcE9}9&);F$uJ)!ks7Ww&|X|0Xa0S;`#SwhYoz7unBSdIFj8kZ276U8VYg^prm>qu zxq`b`d$+o|>307WtqLh#CAzb;e4y<3)E=iJpQD2hK=P3kVdvIua(lnlvm*%eNn1`> zmh>?zl=HZ|r>d$sX_BJZ1x%2<>qK1}?irLNUf0OGLPTbPuwGbj)9myD5SL)EDV;-E z(02&$*Re7?3%*;sb*W1V+PX&D$J|ObyM84umk+4*;z)k^DfuBIjSETntOz6s8*oVZ zOo!XZveqZK$zCs-9`hS8O61#s37pr+(peTB*{vu18Sc`u^1j*>L_*J0tRoK3vngP# z)S#))8@*i4$I`E*-?7(;SP6>}f}OVgEC+$|1^l}H=0z=)ijdYdOV3+wQErh07H-aT z5qI|ZkYcuEvO_!P*_&EzF6O!&2PGD>Z{Zi02uATy>!0{Tbjgt`G8O6I;&m#Fr+HOM$IAJ(9-sCD9s|^% zjY4E@%4RY0&UNC4S92-UZ}EnHE?$Nt*{=et6k;Huh3YJb?pwq&CsuhShkDp z0UZA#*HX!vSEaY@;&P?Pm>mUzqlbe@Zuk^JVpt~|g}Q4q>$%)IBY{8E6UjO)Q5qkx zp4ayz<1Z0p{nM^CfJ0BqF%Y+o5)Fj4K@Msv&%4}@7lhlGrVop4N%B0ro`(2z3C>23mY-GlZUei9efJ?idCa}61xHz7o-eotu zACHnIzdbXkvz_GF1@*5zHD)22=?C^CWQm~EGGE;YK^k=+`>d-Q0YSDnNGn^rvrXHd ziRkStp@t+uLUc$cIh{A}-S`?{<&z8b)rMW4u5C0hXF__4@{X zoAEhp0rD3qa5d@o?{c#&kSy4G^tSCS`#(73z7+2*EfZ#Cg4EA8N+tZ-{Up;ajH|y6 z8od}l`Z=Z%xSl%IE##hjv=bcG39QLde6NJQl-Tcu`(0K@;I#)R*b~;B{(75-DUw>g z1r3K$85Y*X+n3B29?A-!rqFZb9Q_d`W%PBePqBxr$u;$Kx3kYNN)nWU^Ne~1Kk}wl zx~p4=5@Zn&40oRo!^+{>5%fCBR!{s)=uFT|C?bez10yH?WmFVuuZG_ZXt-fiPleD@ zc+@_ZrF2ZhlDD1WAtju2f8}O)1p>qliTiGhWsEyzWc}yZvwK9uY)oWvf1`jyct(Ts zGK5O52P-Mmo!BCv!11|Zv1IbNSMqw{6&t0CDIS`s$ugNnmwX7Oqr_cz-r%^DSKz=| zb}hfWtS1kq8;RwV<(O#7^Jr@RX!M`+uu{xByBziL&!=BQ3qDmGNLB=n*D9kWRk7#2 zVFyHH2)zqs4&DT@@}eL^9}`a6KmNh*fe&LH;V0u88@Ayml-ZeA*}KWU94ytDwThb& zN+ArjeptNvw0UA!Mivd!Y=_iYFg*BiVvh+eFnTte5I`u$VI3lU0kb6c)Ui#{!{yib z=0EUZOO-osaU_u&cUr|g*7+6tK%(zX%4q&mGq=+aFGMlv`$?O!8r{WyM!Fg<)>A7wTrKKFylTh07u}+v_s)8BIr6YtFRPXb4sa)75kF4^$BS!mq^g^|sDQT;>PN^Xh{J zN977OA&|`UieIrJnXm3Ea>kLIDfb^{N$Y<)n-P$f-y@SsW2kDJ!Oz4jcL^;hozta( zpHS}NgmFPeYS{@_*|l5MA=y|gdFo<*V%YY`q#qirfz4f>5Q>-IsWof4?PN->N+M+M zIKMcBMsPpMJ1p0@SA=}sxa}QJ`Zsm(#>f$d;c=X!UMfW|? zVuXytUXDgJC94K{h%!qM)HSg7820Rfx=agdN%+4nNh}b+T}3^ z8s#h;a!tdoIk;wS*(H)FDW$14D$=Ozwq9Lf(UCgijj~VOWWKiJ{ZkM$;8249a-8J$ zAHObGQCo)j16gc&8$WJ+>E=P7kVv{7%OR}8(#AAxqJs~R15&n@vySyXndf<{Fg(Ye z641&c+zHZ;nU5#AazAW&SiUuuw!VPUf_EL88q}8hG@fr}xXe;b5#QqM->;I%W6cH5 zL*1_6j>!pPLIA9TQ2_%a1L_!Q#gI#D*X36klyBGMShddnjyABc2zB#y{f8J4EC|ip*_fq?{9SwYqyC8!bO~&iJnGTB3%ml2Dx)Imi@ZP8 z)OT*#c|yL$G&$whAL(t4W+WUvR%@3{hK~an&KpfBa^;Ge279s8{5qz0w;ftk-ci&) zg(l<&v8R?1-vXw03TUxm-y-ZYk5mQgZEn9S%zJqb~P; z+~-{Q;+@f9OAnEi#{CI16VYVu_2M@QgeQUltDF^X1mf9>ft zYFZt75NL^PJ>8?C=;JdUnwR!ISY&J8JoVi66k1s#d4?}cY%HXY6UQFBTDwOD(0W2J zM-KuQv`kmpRD&pZ>oQDd!$iioF&|u&`^NWw^8Xl(^4(b$iRX%s)SGlEAxN-tx^qM& z)1Abmq=xn-JZqNUn<9$TZe%Sv)ez9?ovQte-RdtKA|k~$ZIYl%inoTVb>%Mk)XL5q zUG3N38#;wtbroMc+Wk>SDT+1A;}Qc}zKA z&J1X3@%B0zhKA-5UAy;k`4(%3bz_K=pNFEX#`qi4p8n7FJ&<<-VW_`be((O@;NZ*E zT^ga?vY-6|9-kAL*(PwjdQQMw{XV8&8~7z1zP|W1%}Ick|MvXtv5WxPNH0`;q0q(C zvHcymd~zA!<++hQ_t3TABp&2&?4OjS{}DdJFaMhq`2T@zB?%KKn64H}7=GKo0%Yfx z#p+w#AQSzg=n0-N)PVW+Fs&y9+bCYu3m@Q`^}Lcnj!Ox1*?cBAdA2r~F4@$%oP}BY zfX2LsS>jR`hX7jT1VZd<0+N{FTxP8w8+^Mw~ z^&=DsPQD|4fT>17#Oi~iK);XMe%vMp6?7Ed1A+KTt>{e=TOhFg^a-qWjC7a>%sh9w;>lNaLu|3Oiwh7Hli_j!`qN@_pixB46`oILk3NT3W4x^`slJh$OQLJCW3#hkX&ea<*T?o zRLPl8H3r21eiHF7PlFg1<9V9^-M;SDQsNp8Pa0jV=+?`~^U9gahg@B4K;p2}J;DGy zS{Wus^#fn$qb`$P1Dj7EOt$BxPX7e9_sgk{X`b1*$VO}KTuK2}<(k%a`&FnhG4m)Z##f z-VVURc}Hu|da5dh&yC^=tF}R!_5%FzR}M|9i|~~aApwaOQm#Cy_ma}EOd?XUpMP_b z;PG$8TcZTXAbALV?NH;^l(2PUHGHG%pm=Bk5wuW3_;MO~x=AFH=0{Y0rba@blHW=| zl#7O+vO5*JPpc7{8-hS3{ZsuA0;n1>DWc0Ec*OU@oCu@q#BboyUk$(1#&VeOcyC>3 z>*}rb8H^Wunf#MwSZK>(`AmG#T(ptLI6PeB?$WH^>x47hVoqrTfczuosXp@t3# z9tU$!x&Q(DkZP}Tiu*>BshgVv}Uhk43f`e;+qWw?QuBi=eo({*+HmC z*_B&Tu61TU6lZiv-bf-b29W=($Hn(cIunk>O}g)+xHg;+Wg*bO$3FqJ0ZSV7l&*=j zT1_8_Iu0~m19$7qQzPuwARNNQLQr@GeI zubmks3H2qYcb)vH)wY5q2G!l3_F&fsX~T;U!FJ5$=btjK=B^rWhaaJdRKv%$)5G*N zZ&u}LHuNquMu?(z$CjQVFg5)sEa|z+w2RJQ(W1U+qlGkt&DOQ23uO|CybYV^70|*% z+C?RZ*E+QE*BY;@jziy|QEi*Ste|T0?ciqmb4+``)!}^ajs^SVn}$-~Q7c3{oS>$s(7D2M8*mBbsF;bG`~J8n)Cs7O zxp$u#y*ossWC$R4Owugn;j-UAQZ{KgbXY_$U8UvO?f&8e8O^JOn^mO6(NOOx2W;`C z&78qvGdz9imY#(tqJ!=L7<1k}Y9~pfd0VsI-21rABE(dJFRghC^7mq$_vAT|6v{ib zpx93-o1g4gSv<7>(Ea%;Oh$M4aLmmCtFcd)hLdju57e)oY}2OY1#}5oVE<|VQF}K` z7LV~xj@NX3rP47Q_PNeH$g5Tn;<#S?*h_OVdG+n)$GxZahd+7T60%qrda%YHxH~1} zDvv`<8I@q@9asNg&me%ys7xWCy_Wlr>RK2cwoLVUVB>|DQ@s^`xAb0kew<>#nUzflkA9G3TyWjpuk4Aazue{skUM9(Q~)FACW9r>b{u1 z?PJF^-1%jn$B*te*s`HKleQa+nV*fD-Ci@Iiz|r?N!$-#;~Tklr~gs*OHH-6u+j6@ z|MNR6tVOSgm3?2O-bXyeL_EB*zBGzW)?H`r9eF79WJ2R=V_E z|2i43pM7Cws5skm?Mz7q)H-ZVr;?aTdL^Ef7!%rZ+0ZefBag_3eFoJWVs{^@#y7Ks zzgeiR+Z}^P_#b^2**sH;lipGqCk@IRl)&L^D?>b6biz|Sr6{a7@Xo_Ge!Qq>E-Jf3 z{x0vbz;_i?@X@}6>cOB>{;m>7*{wue*vH@BqNx7aq=-;^Qg!F3DzuoJkx?GI`lk2C z_9T__h~kqVxNukCxmpqb$Jm>VlQ>jv#(>Qu+tK=2#jw2S>!!N@Q!0G~$`8AfD0rp+f=mNAyJ`|Ckr zkbXMVq;AoU^1GK)_UImJIQBF>(vEfOZsVT}gYXH56F~?iUWm#`PZeS~f){Q(|Ik?Y z<{!zucKGbuSI>BUwlU>Cb2OtwyR7kgQ7%I9iD?|)vu!SP{7KmZK8Bp`SW?8w(P`4H z3*3jxLigZ%^-dP|p$Fj}buS`ivMq+OZ5zeK`4~BxU{}p?+_9cG32ioH)E5QSwc~>avA={qnW+Yj`wzdMW#~6u%k+ zCs(oFD_8Q`H3s_S_SkUVd;A%lzLA|GhM;GWnRvln`*7pCy@r+i_1t<~%o@FI_(x>}DDNAuRuZo&+^LBjFa6n0O z4{}}5+7e%{wX61UE}SldJ=g9^@6@ip8KKw4DXxgNaUfL!=Su0@&dDrLLr4=4OZBSH zAJ-?U1rCn+`@H;G*#;6cUVH7O1$$q-oA-J@$NstbYN!4R*Lg0a`r5A&S14Is*c%C5 zGGVe^2T~N@sG^3<8|%E85m!j$Bev7k$;}0PgLciF=op0$FmC;sFo}wRJLgTw)&agC zyC{DL3i2;j#!E@3+4IlZw#4K`XYb>ac_5emu;gVbgObEfnWbnMSA#D{40`6|kwTf$ z>CeAxy7iNr3K^i$jy0|zWt&^8O1u8v4^Dnf8`Slr>DIDJb8 zbJ=>!vg%;T;!$B!j_CdR(6`nt>^r5d@(Pd;*ztn#9yzAW3RkVd$&hkLwqYr_F@9g? ztHS(xt%JS$$D;B6D~lk_r*Jq&m(BJGEPSZ4hI){L5_Enq*vGSNRH9d)D4d(*b)ygU zoZKx!vX{D8sCJx3WBKTd7S!iPCOzx=tlr|50i06*vcYPZKGT@OqKcpz)x?1Hu5 z{>qi>Ng)eaZV@ey_VOkx*oZ-;{kOHu5m6q*m3ssg%rx6O`#osdQu4T)|4(ta{fl77 z3(E~>L`VNP-n-FpeS|wO=G4(&SqEQ_*$eiMMjJ1FxD8@{Qb(!JDNf~!oG6X~eS=a* zyws*18TYhn7Bs=sgBCsf7HcTFZfHuU(d~& zg`4MfWyIbUtt6&};p#e<;^(UeTU#O*uPelCDHC=&mY=|z2%Vngm?ehhN8tgc+2@iM8-?#qj@4%+C5PV12 zGiZ^qKL?*!+r+*GJP+U#kxD4;x?I9P{~ZgdGC>Vc<9>qm>r1$Ptmr4mI)8Z&gJdzc zTPh*bCM90ab3wtDSy1E=CwgWhtAUhY;+;46dG6=Zi5NUZ<>z9E-TxEo6g`NW99 z$wl4k#{`>bnQpA4wU2Eee%kOUz)A0goMY|WJ6;N+$R*&R9pNq;MB>Fx%GwV`*p?9v z+3;fDe(i^~e;EFG8GGe_{>8uF4?j#l>c{eNpUw?ykECKm>7j)^3JQaHFlci5eL&5#I6p5cw=U8tP2|X&|to(nh{dqK$|NlRZ zKgPaBl4LJLL@J78XtB0Ph(biNB}ukygG$PlC>SIXIY5z$1r2S2U8C(r4nJLaV7%W> z)R@bErwY>pYI~p3T#fLDJQ!$WNyf>qfJoX`K3}iMjJ;g#J&~I10$;SjFMP3w7G=Rz zx()L3>lNdfa#HU!6p!QE6sK}5=_O$i$Y5XX>YsNEta+}D{Z%L|7UyPO2mn%{p&WFd z>7>`UCqg4*=aCZG6 zRd}zO&*@zDv0gWe%XjZCG^vxmGc>xi>ZmUUo_T#HD809IFhsFLI7B|7ug^?<5)VPX zv2EDp{tCP|jAm7j8-ydD+;)5{e!7a9ZOTio&ra3`p<9DKt9!hgZ2>-$6_!~yx8vsn zD9bOSAus&&WB0|-?6Ns6*A5d`=Kz8G)_uF$v2@>JW|jv-1r?T)`HR=4OV_*>@GBP* zq3!{0tFyp@ZTv#KL)@C2hB!p5i8rfB`E5K(x3~nU%P^sHfUmp^Ah*wwK_>`g4Jkm?JVWoT!-HpDAJPYZeX1q;}8JZ93M%80+y8N}NNe_XDX}1q=b8_Bk?iQL&g`6GZ)VcMAYcCI zvqHqSH;;E+bGxq1`E*%nV|kFwP;9n5^jv#7)I=lo#Cx}1_tC|VMcW_#j`6}{m{OZc z=4vI^NG6FiY)T6kl`pxDys}yfEG0p)pteW$X001>?Gy9CAb#H{X2ftq)vzc%tM}*@V!>tR7 z#JnrSs0%9b`lHa@jrgYE(m?JJabDHU8!#@i-(#cCj@PHrVRbXR$%pJ<t&b zn0#&Ca(kEJr0Li8Hf^nqVH$~4FA=6|e^6MMfeGpR8;=PUpnChgsu>Bz^P-bg}W6aA&;#e2`I@oivIMYRa8%=>u!W zjI!d)ZZ{c&TJo~hpVec1o-H#oPKP80oM?~VGMe7cqXV~B)g%Y4Q)ocqg455H$Yn|5 zt{CgnBCAxdc*cb$pQUKnX8*+Vi;eGw9(*szwCV)>Lp>GMCS_JMHWRUQ7HiAPot;fx zM7Hnsetn?TU3Am)c6a{Q9ct4nuhSF*A3nhy{eBQt^+gIkWh6K)cac+RnEsyA*^l&O zhEf{i_gTsd&rO3Ss7IO6!b4BkGX!JvO}=6((`yyTNl^y3G7i#+JktMQJ{^7P<%}#7 zGCYNZI(NF=eII_~IrXGW@NuUhiC>P!KVRqn^v<__OfHxHNV+dt0u6#4wCAKW+lxD_ zi@xS{pZ%#Aoz1Q~PbF#1WnAiFbl(V}8`kQ7XlU)--+a@wxKV$b8HtQJ&-7Y|vJ&si0FjlGd5^_zoO1mF6u$Jt*I zad3S=I1tvVY${SYHRIE>smx7JGse7V_4$V99&ig}WbHKu1><(Y)BQ_{*5bVcwPxBp=b);q zD?T1xE!1^g*~Olv(7p4s9|k3A1?Y*$hpHvA&e0O&-e3Ff+kmPX8}|hDCgT!QEHTJe z%fp1R_?xx-r#>na{I;RpqqTpfOKt*7dw5#&4i#raU0~iFEeu-IU?Qw#x$DvzCWsT{ zP<(8^L)9Bv#o$%VUiB3h#=PeztUuVs?yzT2&bGlY!we8L`-f?9D&^K!Vbi<3$>2t9 zqkW(rAXhb^?5u*`2OCALb+Ff*k>wNCsK<#Reu+}MDXC?E_y*qu05%O z5ne`-o2p_QhN zxwF}Slmi0>%jt6=g#&BJth)qxe!bUnU9|gD65@_|-X9uGW%dPl!|A3&1NK?uB!n9UcI}ua?P&922DzD1R^_j|k z2dBfh-HKVM$uLXUWuKRVlV?R4Bv?L@-ZT`vuM*1XyY1vDx^f!zJ9uTx&spp|S+DcY z8Bp1KFwVYk#dK6MzUz)o#lr(s^0v7b+VVcDBAB7s#fco>*YcT_rMdiPi?4NSTw2QI ze;nUjz6a$*F{lgV$8SUNgPGsHXg~EBdn-B`$NjlNi)R^rSDVlKq2r?i2IzvmYZf78yipy;Sd z?4NyQZ5Vv1z2N=>Gd`&&BWx&w#B`X@w!X4G%m(YjTbH*n9J6i|uZI=CL&YyC^L{Dd z%bQpik){qhy}4#-D)Hi`c0Y!EX)R9RR&qifRd6lastW{{@w(r_sKjblrmU)cHRavW zYH_a%8*$LjW_T^_&#m-ja|X1WOLMwecx5|GsyXv~8^TFD$|&na+P;=Mmcb}v{Lx1m zRr!2L8h*LRtwJ_AuRol;s_*Dw&r5~VS|8@~EUyt|g~^;HN?th=$)Y6msf6uB7{OA>kRdUSoBO>%Lh2_m_HplhgUE{l_o! z?7_Vem^lLVr?E&Am*O99(E$#RV53O>onWqs(Vi9hldV&#Bkb&?M5|)+M(8b-XX6)- zc5#VGgKgt+6O7dGH7tIsu32*i;B(h#EeEW1WPPBup5{@Nvra+z=SN8Mg=yzFYOL1? z59Pn>o}wb#gb~*MdG*FLpZ;^AD`L2ak+nz^E?k?ADf(9 zW;eaGJ^t>+%@m33r9t)hVr)4630uZo-%>dpA3+YYu(^7b{C1q$^QEb#gzcM3z+{{0 zm2#wF30EqVph<_~Ut`1i#@CkjDF0Dbj=6sv%=@n6T?Bbfnq8zxdZ`Tid!}{0+pJkZ z(Q38w;}{qOu!qc!fkiP(m;c>TuJ;IWOhxoZyzhG@O-JBdweQ-}*e#zkfsTPJvJ8F- zb29N+%}Uv&A^pbv#!qo9q_!vqCUBk)8)pgYywF(ll7D~mqYCEXmH7F>TFR9)Mb}&L0jVwjpuK&>9iTS*wP?w_!LbTd}R?*Y)iN<$DwJ?$XL8#(0!;@jD?$J7i~n<)9W}W4~E_@ zYWq{Ijvf8pAL^NXerfWM&0^DJUrPcam#tACX=)CEuxNfs@IIsyszijvl;lN#a*KhS?>6F>CV9 zjro><(G)q9cFsDhDf520T4T_opNkqqnez+M|yhQh;+{t>)@>3oF`oiplM?zy9~7oaqZ zalqN)+S$}GxY(6-<3lc7MZsX|ypB``LVDfLMAGP8so)TLhuz8TbUV*Pzba+OyLB&4 z@wtvq*qe5SD79b@CP4XTnGrlxA=e{4{2?fzhYhLOyg@=w5*T6P_(;TJ48UP8g^IiK zJ{@}ndZXqpYkDg+JBT-Y7LaC<7d*dq!Z30dwyRD#2ntzosMrz!-%!4rB1)+@9xuIn z+?Lw5Qqp&EwdnA@Y-0W44b2N?kMOSlVHdWT2DrWHyw`yq? z=wMUt1&>SPuX9RW^Rxj<5?GbRU^qcdvW)8o7@{d0OdpBT4$9=x7JUM&AIcHoVq zLW#Ni;TZn%Q~x5F{!2*xF9Pb{{Lw#T(qCTb-z?St!8uV*5q$jr!FW~O#h{aOpj(z$ z;k^ne(Fs(hLckk36q z()wbDsc^&fHTXvarNvg=9ttmZQ10k6K&E92&1cIudw{7SPbRMJ-+t zg2Fq+p|I1dxMkDLRfCFRAR2R#%Ed%7Ajg&xr+S5C#f8SxrIOiY?}3o$8#ys^{#Z{d zzf0$J@}XqB_kEw3g1qxMnzO(InYqIJWLFA2t84&Oe*WthxJ!Ki?0NNI==mD?om+K! zfNAR6^lramwHSEnwUC>M@u!Y;?h>kdZb4Iho2EgpVhR6i7oiT88pBcabC2K%UiE55UoP;MET&n&gvVkxUhO!9QNPYp%b_x@z& zG>}*`k~Shtp}N)T=THU%gc|#*X-f^u&AZWq#p;;(;fU ztC$d5W+pTR%fM^zky<@5Hzg!=G!<2;^f8LXG_LvIxMup!_SGoU;7-noje+z}kw zHe3q)q}6t8S7c4EOP76*U3Pi9YleP-Znk@3?X}2n2~T-=V@u-=5-~>^vUKiOcXqV; z!(w+2XvPKyKhhE&mXEz-l$G3cw;ssOrH+fyLk^?+sm2|G&3L02*sFpa-}%7KF^9p? zTmEOff6Mc7t4<+DukS}@%HGHMzTeyA5Vk)F zU0E(+s(|V2STnP${qs?w#j)0PS*7dcD~`lV+Y{LxZP&5%4;N>13H<;wR-W6WT# z3c4?zd8>5FaDIB zr}5rBH?2W_rD?p*fU!R&f2l1Dj!%;YT{~8bo!X^O$7^V@emBZfQSF4Zn&47CXgM;kVFj3=-$E_0=ogFybF`qyiu)?5Vb-7bqOBiljo$WIXhkB_g zx60ZxT!tUd)APrWOyNbpTu6Cb=@R7@`Yr!l!}>E}p6cz$ZpnEo4&IY6A(_$@dZWxq zf7ciD7K9#WGi-eH@yD!g!Z2dDeY-nIPY)5A&9Iq!8!HCeF*$}p%kBI2t$I~RKZCQd zCR2p!BC|_esrjZEQ$QjCV8G2Ic+n)$M{RNisR4V94K_rQ-JQY{@Vt2RX?F+IVb;3?;{uDz9Ta*o`034@t#13 z+`Fc7xVw`ezuji=PV!fWfs`2P51nJ~&y?WM>#N!SWpfFzK5*>YQGb8!qQae5A==@Y zQ%SW;3W+yN#U3}VTnYD_EQsYydgOlg z*ke@IJ~F{fpm*L$9AjgVi?%7Ud-ct^pHkK^?B2{us8PP~rqp)E@A576j1h$Wh#>Sm zNNe9srik(L_IE_MsS%+z+3*$*1}AoNtYzidb|0$El|&l+FS>$!-FwS<+^Xv`(tmRJ zjoEqiy5l8O>Mm(hfm8c1n4FGQ;Vqw7S*^k)g*XLSPMHo?eFZ4`qh ze;=Sl7grq!S$!+wc)h@Qwze0uD^O{mDh>?VmUJ#eH+b)OOg6&tc3hd@7VXQtSI^@Q zqPTULS=HlcQv7yy*#l6#&SSQpi!H*LbI(?r=Z;e&HR_LF)5LAN4(P^xd*!05qTBK$ zN{1=uy+p8zUgB;LV03F^)3t=SUSCFLdOGH;QTbgfFN*v%nM7#X`V8(mToqI%yb84Y zLOsCZ`0#B77Z14i2A|U%DZ6biEE)9ygygr>NXY1w5bvuQV_V#++E;89(W8Kkl z6_B&QM~^mrgGKfPiF;|lP5!-_?0g>G+eUeZ7o?EPr-qdSRmaj2t#dlni^JO<$VLSfEQAEZTZEbNTRafg4yBv6T-i+_KE}F_Yo4J+ixszRNd;5 zzo>gy=j8bVM>C-wM-{tM9SWcB6zPww>Pk+tmAH}{mgBxQFISzXNft-_S5cf6M)%BpchrJM6t5lVy^y~%yJLMFe7k1;l^8dD`Zm|Uw-bom-^(8?M_Gi7 zQ(r!ox~}Grn|?K#X3;7xPTkCK$L;B?jY{M3knfr=c|cg0FPv;YfgS$fH^pQ5`XDm% zqwA2J1BH|dMP2e5-dNi40GGglX^D#}(0+Y+-v3p>x$t>Lq#x?Mz2eE3|Ooi>IcytN?p~|bzSfs)?HVf zy8Vav6_ORZBGl1*B=goo7pN37HIfv~B?}JUwD$wR2(bA1z-k9@fzgcWF74 zQ@Ix2Kbb;{kt1n4SDnJ(EclECg1qu0vJUF4gUGvegm)-~o8zHPUZ$Am>+`gXL1|`Q zyI)=ElCIw$iVA&w;Q+leSsM!r$TnNX*z&H{aCK%zm&+7iOWEeIOqhyrfniHy zYxgHg8Q*wSiFl*+NHFm2iFFJb%!kz}wQSkv4=*foZRnAxX3=&}YU+G@>w#bw%emN< zQO~&Z0#DB?f^*r2iD9fk?bqF58o&ru9Mm|?3sjA&XL6Ia{Uc@_ykC|*R5Q9m z^+zJiGMRzp2Uzo;|256o0@kB+gj)NTdS0C|R}JEx0{$$gls~1eRXvZXvEo*J+5vUz zv1YbP(DyvCI(g>^7P=tjCjjz=$KhWH{LhOgl%D_zZvo=1*Z*(7_&+{r3sWPCPEP^X zFkv2{*GKIqAoAHlIc$%0YQlTVvm}sqU7;HLQ5Nbx^h~{kB5z)qZm`M+=@*-GrB2zG zWO%jI#eP$JJAGinFfF>)1sydH`0&|6yPhL!wsv%+NZ4|438gQB-j(05nXaI%Re;Pi! z>tpDb%2fhbV@c$xA}77Fm@PqPFSt47ZjpW->zn$+HulOYZhV`FQXwfk3Y?{k3H;&|vFb zcb?yg!fNn<1$%ty1>`Tc32Gg!KQUi7-S5vfT{vG39yI$~&At0J94c0By8eE+%LNY8 zjjfB&5lf=%*=zSSH{{2BC_=nCzq4K%M?xSCT0bLDrJjc8cur~Tthjt+*$ey)q>Wi< zX*|6^0LQ-b%&2Gk%F3)wa%{WU>HG$OtWBn*iS%rN$(Hp_ECpt6QB$c17ZPFd#=&Ei z`aU$8Ev4w-mj`E|m(Wg`_^79;s0h|@DXjU*%`#14Pry*FU&u~Ws6fm{@RHJD}Jdg-nsMa%~obaFVRU@*-aXW9`gK|JMiTC_Yb~wjDZ!T z)Z{oG_c(xd-H)4LrDvdGT?Yrp91)=!6^#0evXDIFfMG%!e ze0Zq*-Z14Ts?i2-v}+6X`!P#LjXxCxDq+LZ^Om060hKp1ZQ5~nJ~3`d`(StIj{kPD z@#)f@#mHGg(x5lAiCPPfJ9=g3l*G*MRu0SHK#N_M>Xo;l4AaUAkKssz`vdX^6v185 z?eF1;@BI-b!SmCp68jRMNxBEz0#<6Pvfk5OWVZCZG%O+faSc{CeefOiBT%G$4mV|e zXHSK9In!h%Ha6QEAj~?Wyl!cgBJb-67lh&-1Ib`-etS9>&A|Q{@2YN zy*fN$-@dw8y-7IwJK8R5{7uY6G!vfk`zM)C&}`d-YjVsPIE z7Fx7t&Q9_>Rbl8CST8W|y|;R-`_AdUez${5I_Ba+jlUG@{}lLB(;mNFGM;qB@*|bU z=ytxMgZP*8b#k%hoJdF?)!6>DZ*?Oycok`r%<=aHDg4mpl|31~)U^^dxdNa1t}6wI zuZlsJh$l@x!kkX$zc)>98GnF#8I8Fnnrkij2wFaOu6>BNVnE&L=0~8H4N^b$_hao*wdn31F}FzI^!F z;m)JAVjAa82%`AS@MC)UMvIQCM;%=-x4quj1!k{|%a~%=hjygFa6s6=EfMlF3x3cf zu9-~pa?qB2Dt$gOg2@`(!<-^RJe+Ie@}e{ICPTLwP*9m>n#tKq_Gh+b-aELnh7AY+ zqelBL-Of*M6kr}+=qtkpKVLJTz3AkDhu!*BvuDR4s*4>w&=KQt$VpAFZ)w7HfAlNl zv*xaYs<@kZ)oX<3JnM+Qfk~Sf_w?uD;Ky!)a(4|862d5rg(yys&4@YeOtc2=s7SnX z*FBcxLHWzC_q^#(R}%>es>|;UxKs;q)prq%hT3nzFl71chzwg!ou5Th9e1dTgR{w3Mr%9!hc*e5QjmKKq$g$DuiR_)<`#=;qpKxAKcf<~C1e zQFQ3b?45|cYfhJ_Qoc{%#R7%5@VX^Hk%10Sqy7}B?>oYHuI&3RHO?uyr;S@)yDLTh z8`kM(8GQy5x?+of~j3QTz##@itQ56Z!U4yyY0~b-eXkqUM zi9p!04sP3}3T5chu%Zwlg}j`+q+z+Euj|*2lOmgDrlp|;(Ao3_7&XI^K52bw3W++? zBn#7_l+C_XiVR788F_k*x~hCS+5N}7$x|yV3=?VkCNLlU>y2s6&@5td_OW5iPW8p*zYVPKVB5&<})cZ&dOZU%Hkh{Ng~O z|M50()DIci+$Vmxh|DS~_tWwSYi_{f{P>ZBuHBr-Qk84rke1N)LMofc2C(pRSdBKy z}bCt$4Qaom2Q)v<3VjC7xSM<=Vh3K;?KNYb)BUyW-63I85ieMJqw) z+V0F)@ZOsh|EM||l~N=522cMmE@a&*TQKCbq|hE?_TKFo$ws!>!+zKcxC-&UC!bZD zK0y*#JQc6KQaP7hE;-$UQ3bwx7atO*D;&iM3El}RD?mm1qd zHi;U0aY?48Oh^d(yP>`1ceY9&1rzwwcP$oUP!r(MT=6k|_FLU6F0?30S~B~h{gD&! z7$%L$=_3^(A)yiaq4eViDK0s~n0vJP%ntpa#ol!JTbp zKa`;(bcmoq^wW9ryM}&j|H<8#RW-RYG!IV`)VBY0y|rt&6^p!uOqtQdxFi9?9A~+w z0n8IB!N(`MR-oZN!e|DLAI;RBY|yW(vwBkpOn{%$sw+7Qzt{@pGnmkjPuerrLk>o9 zm4+yuHN`s&A4*83MYPPzc=>kOn5#j@Cb!QZb))n@QynoPTt0BYcWtxBo*UO^l!&){1+1JZn3DK12MV z-AQHAlv7Kig0`1yZ|RqKjsPlzJyIREpNA^aCGX7lA!Fu9)uud9G9r}oLs#v*G+rAf zF3BCXX{|5`jKN=N{6O|73jG?Cr|c|9)J4lVN43o@c8+-Zz*WQf*=>w2eka-upAM(? zvM8+&&3D&p&eyDGZJUplV;GJ{xl|DU-al{lfr7+dtbb)M6qh_CGsvtTLPkhV;Nx3j!_OC>7$79-gYV zdwV{4hOm_WZ1y)NI$5%vxpyz)_tV2w8-;j$m#u&y`{%US6F{}VpQaAV_)+$ zkrYZ?XFe7)GqkR!Y8g%qMtk2k6*?Ko{`$C1s9nsA9|)!P6iB-`R_W+%eqTlDw(f9f zKMjrjk41wF!={&{LdLKr7Vq!Mkq7LAuelFLzVfWjp4A^NfuR2VtjORWIcNq$WF#s`{f0!+ipMjm8HbQMwB=L8l21MpVGKT<0kXr6cuub%eTupPt?){*LEeF zxP9@m%i8~Izo)f$# zsuf}{X=BejItapO4l^<<7CEF!{cJV%=b(yhYFn&Qm}qFKEEY z)1fU*zw|BT5ZzLdz;FP>(=4%g@vHkXVOUWE!a?2t1_Y^Gn-7~Cq)OlgW_&gk1=S7| z1brLjIzmekUVFU(5k2!}pt$mfbCr(L!V&&23gcfs{{N__|F9(gCkyhQn85$a1#G?P zugian5;6OP!95y%6Cg0LF^}II>I(gvMEDy$*op^C?MJiSP7Tf=$S%cPg=WzSy|cX@ zGd<)<)6LpK!KYt0UZ8#ujm8Ds`hBMY)$KO6*?Sn|Ne746jT-nks0UFv`l~Tmy zcDw9~RofXnMGorxc#7nJ2Py5SsWs5H`w?={4Z1&+06$UtJmEb?(dH(W7DS~l`vL+d@@5|8^R2c ziaA~ajSgk%0GP+7;@n4G@qe)r;f`d{IJ`}1p>Z07)~Rc5zaL)VvGOE!T7(jJJc6&8 z<^fjQQvYqoQ#{}VTP^)6b9ZtDtLher-dq)@SnEq*@n$Q|R#BJgr(YgE8+;yY!O8Q% zpfn~oFfQl{A?|oK3kWyZvDHHTU9=(Z)%$SQwN8GZaE`169od*PUah8Z9Ran}T|)xu ze2!mgoNVZCmoK(^3yuZ?ar*+HyhjC2If^r7PFxRL0{szCV)*<@d$oF+&ZX?i?MpyC zByB1%p`s8vN-KnzUrPY57X?}JJ5s&6`g;~{wFs>!L4*a|i5i?DDD4daN6ju{eyBdq zXJZA+-MlRl(f}S?IyEpv+T=b78k)C8KJ2m z@_XRvO7x(9cis{ZJtRh-6$|Jd7_;8WgBy=#>Ww+h3m8V-|R zS4@G*FX&aNh%_e2C8#Q^YOX|xeKbB{gu_+Ftl zl$M?~adt5TXbNm2KV%deywy6NEEH$y9Lb9d3bQe!nXdOeQ}E7pT3uKOCZ@n$`xJv< zr?@Wog?rrY{Hgd@9xJued6rT&vdwOt*8>)J>ea1^sU7LE^G~GOJzPWKOm7A5p;^&?1`P`Xp1?Z-=((OsAZeqv%$KtO*rSu=_Q(_Nq1G8(R|4w z4Pi;oh$ZYeMM<0W2|w_7Pf$rAxs=F3?eqX6=lH;WAi(kFnRz&vnEanAeh(ft6r!s9 z<&rZ=11!p!%zKv{fobS`ONDdPEbc5_J>PcZ^An!Hk_m2dcS`YE!T6}kA80k`LSd@# zV(>7OsLxk%)AjqZ)NeW&V5Vq#bZjflxBQw4J-yfZNonyBJcw_owaRjZuiw2bOs+9i z+}x&rMnDMuNHpU1dC^Nda)Zj{x;M;J7yh1%e+fzEJa9cgd zI?l}2Pew5cj@V7wc|Kj{yK`sP#{7MqnO(WMsYezYxb_dtY^mjy`;iPm&hs-wOpOwh zZ{3LlqVZL89A!gS^Rtc!gFD{HON?kJdS657Fgy&*OLw5UowpED6IH|DqNU|_fv`vM zXl!opZ#ejcGf{xLb9J{*c+^t^J*JSuxqc5+{mdmo(lA&_fz&h5y_my-H10XTX0LXh z^^#nFF9@UH(_HT}$_d50T|IBq1KQw6hx1d)yO7MR)f<&jJF=b}&VD)-aDOI2ZD*{9 z%Y|b9?o*Zf#enUmMeF`BS?uoZGdic6>R;`o@i-qgm47*DyG%r5x3JUA%oAz9xk)u~ z@FX>2Kq+&*(UXQZH*(y+44zv{PD^DC7vUr*jNS<6#5Cq8$<=Ouyc@&?WzFWuQRg$%6B*cYsX5&5dKN=o7KUu1F3ZkoU40^xffR7~` zukSI`)j4vm;_Hao{7P-g3fbIic&)zUs#KW~_8O`>j`7sqG;DdCo}IB@Ve1k=2qUKc zNLE+9{wHNqgiDybp^v$b^BXlwCT(ZxR%*tuBO-tm(sm7bh{$_3@rK}(<5X2Ex)HW|HYg}(iW z%B%#o@wEq)0=|~5=U>I9qBfPHqt)5PZu$6-UkM@_H^8l>nU z`KCXw+@KO))1w+V4h9_SKD9RQa4+HwQI5KrM>ot3j{6zjYKAobW*Rf?Du?e<{$X7k zk$w6~V`c4qInpYb-3_B^O8df03AcYMYpQzmg74WuN{_Bve_;ETK33(b_rcc!Y6Kql zZRAMrOFPdG(^tiuslXlE++Ju9*YBWfJG4^>Upb87@Ql1my9h+Z$`EZ5)$IKHzZ)bq zx{&VwqK5Zj$Hg(X%=S`tRJGpv%IVgZrs7QL3FBJgbjf7a#)+7+a;tZmS(zUM4CZ#h z-NQ_a?1d8T=e}$YEMH2xEa8$dbaJgV&VUv&D4v=-sr|U^m?GNtYSc@G>FAgV3dx4b z1j8b4==PCZqqYiv0A^K%AlbQ(@XSsOfS#RN5>dp@s*3soJVpJ91MJ^5c)NliV7}ck z%q4yaxYP58QJCR88~K%bUjfJ3)0ss}E%Kt}s;pPs$zqpa-b0E$ExTU$Vv^ctO{=@` zGshkH!RV}l7xQQBVBIntK;*Y-Ts}p??Q?&`4oRyvAqI2epo3+`arf%z&mDA?=K{l4 zT0t__dm(=&H)eS84o{K6y|5(&n~*2;$`r{<`rUsp#|Ic|^av z>*oc|>-SGoFIagybSzLYoomUIyF+kMsffq7R&R4+5ejX{cdw-+EJ>OAzdtWjuKoro z(JT;CPNUeP_salJ<>wQ+97IVk0mBdHjD~D(NBe( zY$AN9Zp|+?=>7U)&g{d|U%%Q?y!ze|TUa_DK>5&PR5+#UHHlW?dpAc$^79VCN4?;n zl#rDNDTRRt7v(h&wTIFlMt4}*`xcx#_^*)f-$MT!JLRqLuKy7{|CiVDAGAOLJQQF7 z#S5HGiX{3s5)6xw@*@O@{|8S{d@KKxCEohsf4|8`8L2>2YfJKU_e@!8XrMr%^@>91 zV6){(C6s$dQM{qHg|-rnQ4`*a}Oc^=_|*Ln~7W z*5eCp2BuP-Z1cscP0dV?yM$4HmqR6yGJXfb$*IjyW#|5|tf4si!1hW|B}1y1c}b~y z=)=>5cP$`?7Mdy7jdH1;P5+CdD7xo=)yjWf{2O-ubqN1g75$H8`2YS33WoX@UVM^7 zhuk>p05rUq+4nCf+vx<%>pJx2buln;)_483+v*+#`j8+Zw%E0qDp=4@`PMU8P-|bK z*vUwcBBW?mYeqez(9wxNi6$N)X;K`lBrr6(KvieNC-%hU2wJ8Hl?4NNEf*%Y#KA|r zx5u#H^SuK6)Eq^0g{Yj%UUbNkZNX@Z0bA>2X_Bv7eIp+ z2M+*4)gyd&qn-rM#{w&O7TQwg_iz1WiZWW^G;B?gI5$f>HUkBh;7D32#>XCtWJf=+ zmDmN>m}>yPi(%hmvPrE6hB0{jBt3s?pO^`>c<6!C+_R;yKt^@&gihXT=#vO{ax6dy zuhJ^EgXIg&(~pHi#=NvGOh(Q`8TBe_QDBINrS8@D4w&Y>y9)`{az`u+XU-%4~2H6 zE(fpjfdI?igv}` zYt}3er3Au1aLhV2C>4^--d&;Aj@bG~8HtX^zX4!h5oASSJ~Q++GJ9v?=$2+W*47lk#+S7w()Srk z$v%ESu|0r1`9=d1dT3CPh%FlpcR0t%ile7;bTmIw67+=+DNSf*@Ep%5z!UCHatTHB z8o3&JVot-g?ojmtmRQ2U?c4l2KoCoPX)AHG+2IAav^<;jtG0@4+x^UVEU@ zoICh?7kv@inwBwcF^x|gY;q^dbw&@#4=e(c+YH_w*|Fs8BSLLd(A;W)>*bsnb^(yL z3urQ~h2SS}*Ds-Bs4oRWZx9VCNN4A!onJ29IJ(7O??pl?sy)t6_&f~nS{%n+_)zO9 zf9RAOMO>yhUIkBh=-M|+F?fT_P(smpwJV;v#yT3^&wgGQ+H|{xRaUw_{iMy=Cv`7( z-s3IrIGISAe+Q4=AaNE`CllW@9@2NVFwabNO{|DYziGA|OZf)S2&B=4iXgQVkuVzZ zwZ&K6uqk=n&AEth-rGz|DRoa%z|nY)2i^Bt&U;1T>{iy(Z`Eof;=VTUET*ijh-r^L zP5@1KIp>*%chBvY+_NMJqoIH#ls7t3$g#d^Wb+o;Mm=V@oo5NvD45bclr?0gy>ng3Px$`R-W&tRxG9W&U{~g&!CzGgKCmCBb->$Lsle}BcDQmYU^&5W#Q2N zK9o|wMzKkberHS|li^}I)AQX?!3UisC>*G*0E@*d1!t}4Ah-SLUf?MxVU{k6Pkul} z)HR6lWrCrVff?w#$or;1z3nZvIfBEbiIq-ZY7i%!{ zgW(A&agX}>ND;Ol`x7A@lc%Cid_EX+IzMd5Mn1ss^^L1KqblZvY|l zZA{M0{T7b~yB|9auUQiy!y-ie`wP!J26@_ck_;4l^yRqF9TT#W;jy$QDpMRFA3`-% z_p~RtnY#BhlF>4^{4-MD&OMlHegl0hR>z>Obv}Kas?Y}5`MfVeei399Se73RE?AxM zu{w5ej{((A>(J7xLQB2f^P?NyzPoWaqlwTY6PfBujzy_H1$@_?l8LDX+tFZ}EF z4x63yJV`4DhK>Ok3Kx5&eu8ZOpj(NF#uiU8qhC(tKr%6jG*sL@cHd#n@yT-^AFfa# z)-JH?daS5#e_N!U^M*^9BZI-4z_hJPHmEJ^coM5##-4b`$j4t86A`Xyz=0rcPgnUe zrDN|6u1%_Dg3al5oi&l1RC_|$Xq?CG_QmtU?5z=-(AmL-3cp^FMx9`N6@%NZ7AfPY zoq!F}{X(7gYkA%iAt49Z+#dC|>ywGFoW-N89=va-o7)jXy)1PJ>Iu+Y`#tC)7aYxA z+5;=^b}2}bYvkbPhg9mKn{>_REQfXVRj`MooHuSX!V+=lB$Y&C(=9?D#t^cC_Br}RiKXRaYhq&TPoZ(%? zx9d`^MJ``$ zQBnEL%#(&K?O{a_17Ck0AE&k?S*7z#i2ZPnnOkTQYaK0$5u|y%18STPU$cYEH5$8! z1b>&3^DE&;FI@aGD#~DQ^mfQ?ImUb=EjVTWNrWpnFGN#Y9HN!sY0#8Mg)|>m5K_EL z5x1ajIbFR`oRJVcuv{0XP6x z@JlErqRQ$0@4;gt6PZp%=xlQOj*RW;(dh>j+EeT4(bzpXD!)ky{!`qUj2BTAnNUrj zqTOe#t3D+lp)q?^spJk8rm%Sm)L)M%FJS)WJe%Kto%SG4eFDCe3B@#!LwJXI3mM{7 zH#`sK3q4umV%UBCRs*ehtJT{*v>F73uh&RQ1y7&1CDsi@P;MG0pOsfCDI=$uPKfZO z#i@zPt(%nYy>6o}lyAeaYI|foFMfBWRA;9&l_Az1uZKC)0(sxp*z=JrZtY8FJx^8L zcv~4cF2CxMdnR~qd*XMsl}ciKY*d0*SwB1K?7%MGcuNKAx9Keva;#i-6_0$ks*Dx# zmeWY;v-PS|;jc`QOR4QhJJ>SH>a~k~m(P4^?ODM6cB`r#)ItPb5XC96OAPMJ6~?fy z8CA$>ULkMWi}^NVzWJGZWgO>3Oc+DY^ci~vGbH2LP@{_B(CO-Q-=@w^Q`Cs1t*YUp zvhh8oneWk}PSXj=pw&Ll)Gi zA;B+DDBdrR`kiLoFP_|H8Hn|{_)Uq29QJ^-ELC663(s>E|7P%62UCRS#$x9Oc}rO$ z^m@-ddd}!g48HI6r6a~Q&--TWPd;|pE_AWCZ{M`1$?JDYgQgt38-xqY+*rCs@jyGx zb5xiF8!$P)-q2EwtMb8`-EZYVYBK>(cb~oXg?0Uz>BMH2>O*+M$y~rsH~BbkP?UFw zkiPrPgOZZw_9!6J9l8d}hVelTzHYQMYBpJNhzZpgq%pnm`eOEXv7vaixyV&s#^)+` zPe^(dBpS(uXFks)M~tViq*OU$Q9KoOeb8L-3$?HJAXVMEuFU$(ZohE&azSiGcvpdz z88j(;^?aMLS@w;>cM;A~Yl<&D?kZJBOB${b!PZlci93i=EbJ`XwN8nUdCrc?YM&K0 z(JPQZo&`&e4jZ>Ch4JML@4cc=b3(U287jv6bCtG|%RAXS3w*q@B}BcI)8=aW*1P|# zKW9rTvw0p3Z4i1>_w|nwqXl)KaRF{db7O_pv|ArtOy4M68=qWB@a`g{lA zoEW!!2dK4(@WvFT7f}YvjNNT56%)rt*3;9BSWv&K#64Ey{FcG3y{HGFt6~m6dPk!T z3?eb5d#kmgY1=p)PUbXU5gz`GR4mLE?z?GE>n0!IHcfkWWK?H7CyI1bi&*yU9aDyE z*=JG@bS0SQAz}IO`zal9LK^na&)SL(U3K;}Sbsi4%-|1B$iT=Ll@boJK3|(7d$Pfs zK4Gei$*C3g-2<=3=M%;Rnb3>V;n#(UT2tKy!M5o%GHk9Du>~qU8cUbNCO2;cU!{=& zm6eNYJpv?}Ga!#rvbm7brC5#)Bf52!RxbpWycf`A=Hj?x@XLE6cSE~&^}I=rtsOS> zAItE6(RbxT+lLoJcO7aF8@~Var41&0^IhECzwN#Lf9ve^--zx1Es6V2gqPAv>~8?~ zKdr=|!=&VAe@g4HmbVlp-o76i$nVMklkX@PwJjI^;S`=P`@8`jL+Z(k%aiSyT}LPf z{NFZd!)*c}$*<3zrto+zH#f;MKCbReD(OJ`%dA1@w%n|5t-)vGIh!<>(Wx~^RgMw^ zfc7GF3cRMGG-3nM49M<(cpI|uU(N++7RI3e{PG_i_+QQ1{@=s4&~`9hcLR8c5{jz# zo%%tKW3S`VWOk)=S3c!asv0R?^4s9KUNMJ1`j-)c?~t>O%%JC954;nbTmh3jZUZ^d zLvi?0K-|-9-jo)s*zH#Jly+dQ6y5W^Cx+5ji3HGgNcj+uNZhHQn&y{@aj2}JmZLyn|odkWxoZ)kpI(;!4#JFA=H2THJ*6&Nt9|x-85VW3`OIrmW-_?ASx`jA+|n>y>sSggwGSZ8 z#iwp++Ds8$-pMzK85Lf~a=z7dL)wQkxNo_KO`pF5s~lW5iH7Oa+a-+UM*4SQDU0Al zZCccpC(ya`>K*oVg^$KuXS~fqSAlu&d4b8se?6`L26%C*P3zCEAR+16c(?#@{thb(05nMCM?Z2=ir3#tzA%jL)&ra-fl9{ZVxDIaL2Z zvT_^1HhOtl5`^*{4H)T;)hk~HPDoO09bK{2e+4}A=w&V|_x=3~;6DgmJDMd24J9%@ zG?VKwgQq_y#xF^4JZ`TeeIK)3Swr1#Ii5$7POwHWdT3cBb1z~_Y-9MJm=;{OlT z5a^~^q9SnkuIe|>$knz;-Bu|866=zc7Ya@4roN!)ZQ(=C+dwE#Rds0#FN9#DU&=j( zn5n+}lrOVaQkl$|_GGE?Uo?{VI(5)g7MjKl` z?%iU`kKQ3EodCEDUSSEXPp+UnpJ-97-1qSL+u0k#?*g&L+lw#*3*r^L*_-)T+jLnh z43&~50*pvawM`<5}bAuPgwHpxCz$e11wk~ zjHTZa-{QnXh7ynp!N*Ayx%!=Oq*_-bwRa|nH{xl1ye-G;sF~@g;!0uZqqhq;5SqACBnWzjwX*cB zJCqcl4(U6+nqE-|mi2^zweBwxx@NQ?J?$Q?R~P(2GTrO1wPl^cFz@wu>&`r6W8cq9Hn)*M zAEt2ksyt$jo|VkMXuPWPgdv3mnW{Z0ee)*t_6m;~o;F_zim~N*w_9-h$_Y#E-S#e( z+~=PeyzqHl>sO8uNeE6{$iSB>tX#D0e{^H72^{}KLf379umr$bXLEb%6h=EI%k{w1 zORnb>^{ib^w-OBsR_&K}&fbu{@@FVB$*x8|_?2qS5GNzwIV|Ni)w$zlDWbf#0-fBN zb7+PI<5||Lh3B{arBRoXPNd64RD|EI_*6F_mp`!76oe!DS=%%%HsVl-jmN8N)vKo3 zF49-I`(NT=oDf-)7KwE{I|*H)PiMSl+e1TNY4#+*^Vd%mUjq8cf7NaA>4i_0XuoHN z|Nbz&`w!;}M%R^Od6|!Hd%bi02aXMM9pY}C z^Nv$~E`=#M4>s1zw0zJZUi;&2g3anyH0UT~Rk^34(8bl*>f%?XkEMfN&lQnra3Qx% z@5EGvG+N3T+aewM#KwnTJ4xd+plq1aa72lxlYUYS?f{PK$=zvrIl2ZF0#PR-mmzOa zQut4BY=KhpEPQj!3!;UX%Um8C%S-$a!F`mw?J;m@u+rZ!j2P%ky4Ryji+UI>GR5d2 zA4fiWVC<~xQJheP6fzaf=y~oTno*3^fQoPA)3vr1y4kZBHasHr_lACnk(909sM(^W zVx^c3os^CrmMm~LnXDlmrO99*cY|CzzNdDkB5Z@80oUym4p zUvlro)^vv^ea#gJw?k4FWwPHNI~u>aK$(7moPu&U4SJF=`{Le72fB#UZ+b%)DWP8) zRAG#Hk+IK}1yb+*x&D4&m!OuEVnGCrGA|l*tpZWGc4Wr<@sAq`Mgm_jg_l6STk1iI z>qL>7-bTK*(pwvoK4%lnXZ}f->IKR~ZyqJKE=Yvc{DItgEOs>^2s;Uh#ZRd0| ze0{@37?HnXTK&3?OlsgidtgMiA)$6vPD`i}xNWO{|DIb(RCU5u(W}pB<)zcbh#xsm z)^x9qEc7Juxmnzn!6VWYHl~S8+BeHU-GS0SWh1mE1U@fgdFh$q+vPNc_3J4Qz9!-D z4C;6!&G>7#@JvZ2fM%?IR48__8#6`v4StK=8woC6nY6aNUmjgo7oV$h(AYw132oP0 zYqdj8J8YK6l%a^lX|n7-Y4o!{<`|5SP62sQc!Z5{j1RkYceX`Ar6 z8}GjcvfOQiPx<%T@VeX{B_^A^o&23f%`MqwW)`SLJoz2n1zO!6(x}1#bLAk$Y%{&1 z<~_Afx3H$|LL_#UrsrjfVtk}fO_!W`yQZ)Sx3OvY)JqODx#pyYu@%iZ`2;|dR`6(+S2fjiCe`fKt0{wV?-i<=R*F;GwRx72vr?W+ZCJOoa2>w>`SS)e%qou! z+3pUQD?Sv3t+ZbjuHB^UFVdhx=hU2O-Gyi8^lIp0tGn5V)bZgb*EUN?e?@WH({MMf z+V@Z}Ngj#5a_eIFwnf?DQ*~EvLe=%gLHKfIDc4=7xR=XOU9mP?Zabae<5;#NO4TY-pjw&9?eQU{`FK`1++ z3<0!TZ+Y=0xzSq@-J?JiPQ`ir!dS;FSLlif)vfb@NhXU-IG}JDbBlcm0eI&dIgUTW#t4-fql<7^ebAw_=?s@W4LG8ItQ+%`3(^=qo4je30IR!s|**ha{ydgA$)mtd`P`2l7*6XXG-s)Uw+2Y!i> zsp>x;<-Ek)Wz?64Z@mKH+5)b{YBU6j0$*B~XqIVDVx^q26~l=ap^HsP!5YlEydqNqir-`~}lN{^G8K6@Zi z2!zWL-f$L$Vi?35N+6HF0HMRlQLJz|&?eylSnV-ak8tJFG{*G2S}?`%tuNrzHmeQb zOD7A*R&zX=N5PldbtSmh>94IDj)GCC&mSCde+32wRdolOe4akvv4fVuyN5SAxzC^J zpm(}gA+&hTn^GGz+y9b9Z|jqLJO^z)m0 z)pDbVq_UAdI^SoDtz%ZdaO_L|8V&QWv?+7$#EGF|^?C5dY3Ig?EW9e1FZ5y`>C93g%PwM~(725}u|7j_!?#F;k8?q#hbK>vevA3Co+R zf_Y5JT!?3&T(z}2c!f?18K%(Gii&+eM*Z*wlcT3~w0?`v&XdHIn*!qZ`E z^|2{1EPE+<@4VDnp{!oQH2~tIvu%NV&K(^vPB=~ zVED>MVU9b{FyzycyPGO$Jp2>1ZCv>BCuHv?2WpS9w|{E-Nj??vnx%v-YdsS{-x`pz-@eR8-@SHhxI&l;ORYEo@&AHl>xX(b zyTp6|4xRI?qnx5X9^#}seeg>N=eRSDJj*=#p~7*GOzq65(J-4%Mk)EE=@Cv^8W|=2 zWhz|0$3d?SvU$4IEuuqhyHibZki6W15^tQJE%gy11-i}d!J(T{BYz@uc@Q^${DtYV zp6}fB4E@>;|QZl2M#^bY970DMF6oQJ~M9 zak@x0nw7apnjMt0(!aa1`J@@@y`3(D&osS;LU} znU&YyPSK1&&3zhyR({$<^~ORCk-)ckw3>|QIT*?g`tWk0*y}xuFPK}|A!-;XQd3>g&fWL(~cLAkH1cX z6sF!qgk9F>dvFH7@5y0WX>o?SD6}oJr%NN0K1?}(Pq=qF(z||TM@!kso)_0;tT_(? z!Jf}R>SswxU2Jb(y)e3C+g(P6?(oo`8{#x>Rt|^JNbUSSZi)4QJ0#NXKffn{F!?|e z#+Mj#6xL;RbZbKaB%eb)icFZ1CO#Vfj1>K7?cFK;R<)$(;?qXSN|I)Sfk#w*I_h-CBQ*`ypZT#;G8xq{~}sAIZc680`;CmGb?IV)!x z`GSA(&?Sw2ErzI%&TI zNAo^+rBQvcS{It^RXiL9CJ% zHJuCRf{a2{tW2o9HlEi#)-nT!Y}~S34--evcTGHU`>R4joBRqh@I#oV>m!KBCshBn zRox_J4*pBoz-(`YclCkz{FuiN-}{#B0- zF3NE4tNuX1YT-h7L^SD$U7y7fa3_T}=>}Y$z~CJ7kQC80Dcpm5hgjK|5L*Xgg@4$i z|8IXWA=qW}9~1dVF|^JcgwWRSaltZl)NE+WP`?R1EctLEya@hn{(#@`H8ld}9)VrI zPcazUDz|$~z1y;llLH)p4u$uRgY>8YzP(Mlnoqv?a>&xOo%wNjXshb|x-2nfuj?lc zNPWvda9Mb43k5)mRZE8Y3l+~{gOz3IB{(*kX`n1?U3sDsD3%7W`HVpcTJW=*?;N@!hTWd!SQ)X)UYP{*PEg?(6jZXWP~@7Klt>d;UkXfu^p06TQf4j+UA zHyN#aRCv{IS0hk<2~GJ z-p)oxnE6#qTT+NQ-1{zC8KwW+v2Ut!_J~??mnj7rgFZR|=1a{)lPs;nH-7x+$gv-*4@cS^0>1#VMDja3UHSH-uW={Ur6=;~B&0Mvr%Js`^j2~T2A8FqrwkthsRMx88)CIXu`W5~*(5qyL6YZ0$ z3Nv`RRPnP+GvXCd^Q&&%3YIZioJ1#O@=0MaQ)pqooBp}{UEQ8HA$9PbLV z%72V-S@PJKI8m8$?yig|9(p(%j|%U1N-D@9pbYhxEromHhA{`PF|{z@Nu^_Ce)W{? zKC|t}4=7qq(lQBIhrY9V*Y|;I6=t9Nrkv zPBnN`9`74aa7&q06pxZJxg}w8BrD8y*f;WYbCQE~vu_fY@aEXE8L-E3?_hKu;*_;I zFFc6E;A zB^Xk_-**E_+-gzwhM>GHN#UaxH)UW3TE@B}gF0R`{Cws`yG)rhUP${!Z&e8aHP%M3 ziN2RnU-|M6jx0s0((oL9qg;Z1q(xeIIx?XS^kWO2tecvhC)x`Iw5ML^$eZ^z-aV%G zYD`|L$i@4|2Pt#It5Qo2mKjnZ8gUG18eH`$TVJ2 z;LgTzagOv`?VP4Xv#NSAytkuPp$I~(OM4%EcNbZY0gpPv9th_iYDf%+%OQ`zm_sA6 zJugWw&Y>0!s1K}_Yw_wNiyCLB?Tumh{VHlIe0=B?RtI6Bb11RiS6AoF=-EqzC^~EE zZvxv`C62_%K0dHaO&N$Bqz?|OAN(v33NBPw6eXI`I@vHJZCdI4-#K+tCM=|i~)ZMW-f1=LNo3fh*qf97~nUVbaj9Nr! z)at2soJ2PjZ8;B<8rBKs656+EG3?azJ2A<+cRwTB6>Zfm!Mg~H_YdAQuObO%UMknW z7n`ti8Tt|+z1>ZUKaLXz{g_6x$&^R!OsL>`<<*qf&)%!eLbL>$XFpg+c(5? z-<9Y^P~z&dD-|#4FF+AzbOH5uSpL`GCyXd@p5H38ZHMcs)L?3(<;N3xGo=0Tp~oaI z(Y!GyXodQR;yxX-i<(xgMYg#It>3&`BA!aDW5=^|Vc~)QNk-(@(?QjfC957upd`Mi z)ONfR!r}3O4KK9N9jO`Vx2I$&;&k+UFA{oT=bh*px%Ul+G$Wc;QC#2r#$E(Oe4}tO zR{YaaMJA5&TV=(;@lC^1d;5&_-=Ir(`Sfh_*o$$b#8Wp2*%v@ym7x>fa}qDqcF1(- z-ROPRJd`{AutQQ}LV$?;LZj&&8Rbt|m!Ih^G5X04Nth9 zZzQ}~y@(TOJ&)p-I@=o@>KPnW)&z?WWgQB7uWha*l>D7|g5=Q_qAGCx#E1{^mK-BW z7O9u1Kk=zfOP%|-70Yt;=8?3a>`9?^r?B>jGYmmL=^UFIziPqK6Jom|>xewYFBYVA zIncc0Ec$R1Pf|iJ-yqunX3>!g0mp9y1}P{kKzl&%$2itBTedmliuQ(i)*r>qKT29q z_K&z%4DY%L8gD^_^%&l5KZpHtg1VQLr*X$8YJmb9XNpd&~a{IIh<{id~%jg5JlDG;izPC*DJs;HZoYripb@Z<^%%WC-H&{Si_GTm;oh=5@`9 zoc`$b)T>(6Wpd-Ik&01CDOYr4by|||Al-ZIe>$j%S*FhQE&H*9b?%2op4@M4K2#n4 zHq!mD|Lo9td+miUl61>?d=_bvssN z2&hoJc-H{Ww_Mx+(UGgZQCo(1qQvoVz()7=JA`YLQC{w&qYHvc1SN)yy~rPZqX6y}l}o(peO*=w54Y4Y14Q{mmP~ zwR{G_b@>t;(;OFAb)q#`y-J0nIU3y#`S0Q5Dc$} zY^T)TbKhe=aoomw`=M`#*aR&mmfS0qt1Xblz?fg^UBR4lGb-2j#d$IFUJ26NGj*7) zb#DUy0KfTa^1i|5TTE&b-EKhiENHEO}I9(>u3v2 z*OB-89a1HB2X&?3gJctVs`RV&6=-i<5YtM}YS*8MpRypcQ5I9;NHmM$a{ZslF2|y? zBi@woAPwrC8}d^TrxUq9&5n-RZvUtJwaw1FXv^QcJt~Y>J-^h+NHFmAFxm?!DhfX4 zaB;+wwQg5sao5V^$*FsNH$D>8S4J zDb}1V+-T&QR>7;+QwdY*SE_XnYm$GR1Ppx-t(A&a@%1Qz`VlEaJ ze~Cs?L@o~}1R#)Ut7w>vw(VP?7rX3U%8y?csNwn-fC8Gt9>M<(P)}j7bo2NB;fYPm zx`{&n!qETO4F3EdXu1he{}-@LxSnVf3wv#k($#$n%H6+RH8fq-t0750h3D_$+<{OV9P7+8lKN;F0PyoXUQj#a*Wx`(mZ+5RAMB`F?%_*)@RE5H zt>cJaT9f>!__ItLFtU*p6N2xegp%IF;hP%aNmAG!=J1LO7#Ly?H=o00ClSbhAO1hQ zj2-;n_i&cSlTY7-__WjJ`R3;T>m|PqMlyaYGY4>0k{A1{)_Miq2Pjt>0J^W8+x^g* z7f*ILlBsd>srBoZCrX{oih;izgcm0={{ZfmxeS55jCE!C5;&{e1Xl^ojNRJbJ96|N zAGZ4EtYI-o?FKPGP7K{=gdf=8@~B&T8<}_NI{m2no|%z&FJSack?nrs**EcX zyw-m(`2EUv>f+JWLaT~@en1w02*|`9&}owxhL6_1N-~i*Iuk_o&1;BuwbwZKFksD_ zBq?zu#S=iP9EOoCgGv|shBW~C$lhS$J5~v-;@E1v#Au|*(CYH6lyX1V$XZ^r%ouG+ zRUCVXsaCz8ty>?>;Xxb=tCfHZ?I~oORHNi%vmW<#?Xucv9>pjri(HPdtt_&j)V%XD zSj@vfqdh}?-^Z=Db{#&i*!>2HO{sbe)_dZ`R({vRNk=Hk9$3R#rd4pM?N8#?9 z2;u8>AcReBL5X~N@+$E~V@KKI9+55Nxqt!#9?zS4izytviC#{UN6^;HmCrV)1C zU=i#ShI35{kX?EF;NAOSG&lUB&qdiG$QiuA?tLTv^5cHic+%c{ocqjR!-uWxVJ(*9 zkg(yylS5*;2Yl)!a+b{0-PcbA%PBgk>?0mx>{3LSpR7_{-uYuR1a*%`xNL~AnvgBi z2Dm&&LHVZUmfaaPmC3{Nkc@G8*$d0Sty^tg%SjpXNG18PmdYRh!NcLrNtLIVZkQX* zKft*!O@B-BlV6h$O*acp#(z+og30NO2+_(&xE3|I(~F$tGTs=?)0vGUnY`Zax%ct}TANwkl(yDLL4FY0^_ zPe#ly1bm5^PRD8>uXDQXagzCK7ZgAJ?nuYNNSuSG!cWujN+`KMB)V%k=^z7xo+19FGYhKOSt(1xK@Aa~;E9-Qsjm@LB^hPA44xwvu1ue67x=0&&> zQC#~HRb=eZoeS^u6g*R2oHJg|EAKD&a9HsN=W(gArv9|&DIJYYC+#0vit?an{={hu zUDhy0c~fVHf}^eML7aH<~@b|{F3)>?68oP5&q$<0eI>qn+ zmyN+aWu}<~zCPm6vz(c3fHixsv#|#6D%)C2jaFTN?5Zg*(!79Jqm9E~1ukCfdAv_~ z%5KGE@-Enbj@!D(rw~c(ZLV*ryB}h!d8-quZ?t|o6Zg25-=xp9Y}W<`x;Wvh*~&jD zev53E+o5^(`!d}G6P#}JY=APc6Nd2uD!M};2n6qhTfaOtA~nc%+Mf|Ih&kekJ%UvC zi;knyR=>u-OkO{ zfrQUKm7n|#jZWN3iHndIPh5zVs#{$JVZpBLLZO#Fow7$o(QjeqA*_*F9;QA0{DO-^ z6`TGUJH)ynoXj1cQ~yr`WCH9?a8lM$y?9saQ=Ia$n6F(VnLx&NTC!tdBFu;^#+|E5 z!NFecF&b3%v&qB60fWl$$Rn%g5v-g$AtXO#=%<=&CL86)ORM$<&JHFPY7syAa9O6$ zM5eisPdJV;*O&i=OcYN!&Gk`D?!^HSV$+mho8viS#n>+?#M=p{`9?};?Zvj}eAxWD zXg22ltI8WG30e#{M~O&s(!rsGHI18kcjF%%rJbAYmzg)D?@P}LUFn0it3&wp*>6H4Uh@53GFZj|_PJulF z1)+3CkGUF9_F;R0-;j|$t=Tr&Kd-z`#N}IxMyj1OaWv|13-eBml%6+1IhN6c9`jEE zfBu-kw6e;Ht+zaAvY~42=U`}eKt;>DIwNPPekKf2@;}}Z5S~wFhwW#PjYdM_<|WcY z>tslJt?s9B6V5~VZRGtrlZ>pvFE&>L7;#$%Cgv+fqBTnVYDQ|Li@^sa48ofN)Dpi2 zt(kmA*>;o>r6$*3xFhOLuh>J|Z_4(){V8lriM%~s0bMzkirgq-$u3#QP}}1g8?`;f36_HL9MZ+X zVi%rKyEvA?*!x-CqHQ@yiVqrVFb2gJ%Dc0b1VS7`plqxt4koHN~tcD;t7Z$;()vyQw?LQQ#l9t7twML+&incTW2Px#$sM<>5c=rYl%iImAY(?;)jwSl#A-Uixp6pp5m~C6e2P6W)@GY)AW^~>*bD*aeq99 zUx*hdAW3WPV6p1Rgu@Vb;ijwo>>~Msxeuz3w(4&zrv`idIFv<21L?oyNd0fWXK&6{ z8YB6Xy%ci&@f$fAY2#8a1%0&s-TH>>NM=T!`Okw&=s@&R$FXCFU54k&+OAw-UF0kj z|FlCL4`HC?O$XNoYyJKw(psv5hR3TI^`)4|=kWvnA3J(T@Q|w;{b2Yu2enCZhj+Z) z*KEEy3Z_Q$vABW7haZ|RZ3dF>PYLC+7Z3UP@3Vdg!6p`JLa@0RH}ck_fx3S#q46_W zKBuzGHzQ97I5#&M5I;ea{ck*q#R!{$C>Dxh;pu-i!rtj`{Av2{^YF@l#jt;4+rJ<7 zH_*)=V)q)QL z3?MF>5WqeUB4g}_<`ZioavwaXdp8E7yy`mRZ=0Wa65E&=;mtzaR>1Gof>;wW?{y_3 zXA}|fH;C57jvapJ!hflUIHCKSAVma#3Koz53mpJkU`GR_2e#YhuK$bGf?Nx>HN1?y zMj)B+AdDGOn}i_vv0Zt<{P`J(n&-N?N&*)r?c35-8z4oVsoJFNF{pd~$N3tk70?Ps z5gi&iU=&QUDxxrED4bb9dZ%W2YDTPcsniJ`Y@lx+&8OpZ|Fn zgSEy=c8KLyHUHIHQ351_4o0row`XdO1rPf7+yyViU1QVV>TXZfsh00*Yn?xNB43Y) z2B$V4{&}YRkLB)6?A|;GJYoZU(CK{({_7CnjA=$xK>gFhuB|4S8d3lUQrnL2?*Hb| zcXRb>FX=%76B$#4s$f(Uy!l(d`{aAtY5{Z3YL|AJlnJ#(i~+!Spdvl`sjJY&r2SS- zmzqub5X7oM4Nc%FKZg^Uwt9EacffqO8pa&09X-qr#Avp-f zWuodkhB2^)O3EwXV{(e|I(S+>oSjjb7^hsp--Oznmm~b#OriGa^6`&*3zqpO zF1y|i_{@ZimDUR)6Ra?4YirPr(WaA<$A0eE0JlmxOmpcSvN8uKBu_*{kb@i89-`m$ zz+mn5ZMR2-k8?xp6?Hm_D?v{QMTmR$H{FuROR1riT+DfOdBVtpb!HBbOzz<8o%P*N zZDih}mtGBew}uRL-&3(Q-QQ;b9({bOx-iwB75hyS)`XW7lr3-l(%Xf>PcK&<@4imw z&2GouUT~xKB_O2+pfX<7qwE|TfNMrY%lt=6=$s#jJigRkJUlz(4&>B_>JtgO41|;K4S`E6bs4*XD3GxNUIr<4_0#@IvVa>lpSqvH3fkS&M%WN(Gk@f0N&^E3DXAakWM zv3@giY6O1hf|#R3#~Q{0+80B-AXZ>E1NN=QGQ;^JMk6~MsIi~3jp}&Nhpj0NIeIZh z4J#mFO>}%c%o-O)V3Gzkv5iK^s>+UOU=Q!v2*(93X2%~76=ynEluj9)nL$_PkzuKUaGLv$gzOSXFM7xc5s^Kz(fY?GqLuBo=DECILF z`Gb!t??Zo!tap85R^y_CVIY6|sHDlFsLK)@)q99a9-D}X8jBCVRw*Q0eba1*OvU6G z+MU6h&-zdbfkUh;(+0o|FY(^j2r9^mlJyQi;N0~V2_=Z&o}403BAVVLi0(y}FeDrt z^#=MvT0Ail`&`;lwqWj~CVh@3sR+%M7riJ&D>#67?rqZBSq!YEsCe85y5%X3RB%Yp z2duM_0&ivAVM4!sTCQkh`Z4+YJp265Fl8I3jDZK=^vdTFr#vsS&}%r7hsnD2-kWz$ z(he`xKiC*UZ~`}Q|T9@7$+;JqFcz|x>bWqYuCC>)lvpT{NzbEcIzD(vJ#*H=GW zF(=JhmtQFlP7kM51#W_!cbl4czy~jD)dDWgtB$Bq!Nlkdv=~~?EOK^p_>4xOL zg!`QVNL38UW@>5YoWT4l5{2FceNek|rbh%9G3Gt35!68lOaBiL^Cd44zW8%m< zJO!+1><48}$V8o2!rMXvNU7L2+OlU}CarkraW}`Sm_6ODE%OA%b|3|kIL`y3L+*A^ zxy9)4Lb+Tvm43w^XE^o`bEfUP^a;fSGV`==JOsgizs$neTf1XurUa;1W}9uqLssV7 zbSKC-Qa?3tx^ENUZd)Xa;$I+!P0x!b+VjbbwKZRelG1ue7Pb6b=l>Eb381$2NV=c z^p7OAmUYt2WZ3GOmd|QL>fgpuDo&iDj1C75^cbud(isSmv!qsCSXH&@wF`w)xe~a# zP`2j%iAbNSQo(vzLxwcYkGrj%Hw=uI?kpg$TeYH@PL>JJ<)9s-43X8P-xF^Om)qk< z-_-0mX*T}(lsc>60Qbthci|WX#;>Mc*U_-MJdze~M;EVO6hyFiElNP6=MH-?i>B9` zGiqGJQGALvwvNX2hWAEvnWV_yTY?H>CG_AiEUStwzy7(Ww;EslV(WL_ioGSi-0{s0 z^my_re`khPY^Ca8JdX4et!O&7!)=v7;^INLHuYHk8e{aHM`2J(oj=wf$8Zrepq&tMo4QCUtvhFd03gEm2OV!P`kk5Bu}W$BIrwjnW@7WVrm zD8{zRBn=aFQ)MLSnIfFThkC`ynnvZEdTRF1(RUif9C{}9s>)du`eV%C{Vs2eAuh>}WjjkD;D$k%W7`7!6jir=g+giE&sa7ev)`>i2` zcRSX01X~0G9T&VmCSEQfh6mO2H^+|gIdGbOz{xOu58kBKAY(51se+VvTJB$RWc$d_PhPQ^Z`E$sbKftNpmwrkx0IHB961&U zuCF2$_nFQe+ddj|Il-a)2ow6~Od!>pGH=leT^wea>--gSMJgHY-HNFEkp4w*?|S1^ zis#@d1l`H&ev+r}jag3q5SCE!@Z>u^I?zJ>OiHascCruHk z4XeFgtF;fvqZ85%N+BVRqxS3l37V)oB0h^qko0ptlww9o+@W_J785bNP~1KKs7ou3 zjyr$+|+i8qx}W@ zsAXzA_w5g!Rr(kYXd_M|ZLM;)Hx3DWEs>5yu%~SFL|+u7{kA3Xb>>cO&Z(PplkW=zeQw zad_oZx9^h+=-rFPJ{o?mX58l4y^RUwwkW>UjXy}_VjKQQNauhJv2KVj)&T3vel@>UcE}A9TI!l9Sj&n1nofHp)jYA}=PaTps8CnSHj-Pv}Su_eI%Dh5M_Qv5u)z-q4pEp7a|ViQZ$-u(KsfG(@xtfd2-2UcKGU>djHSPCx^-2}rRa>wtg` zdH4?1-c8%IsKi1JXJD%M{$Op|t5EMB#>Jw3s>~g!kac20Q&&1O`w2yg1QaVYWwTS2 zZYj|)IkoQ(Tpa{_4C_Iy7|tdJrW0aJWL3&&^C}}lDoWzK$Mo+>Acm&!9~zvt~wdVsz-CsG-Vq$FpFTR zma(2hL*{OT--+chn zm3J%CR2=-}XX4w7g!3FPGneVqZ|6I=J+z+3M`tyyeU~gBs+Yx|FWoXcxj80>2_zLC zjz7Oj4JitIWD#|nS9Kd63n!FGbv3HZIa9Q4H7`1UoNv>QfEQ4hxJ_k~h4po(1VVFk?jaSE@JiE7b?D zs|=QVM(Z8PnA*`u9IpGoG#6O!A9B-VVA->v-J$-X^>$NR# zc@unZzQfy+J{KwuK>uVnf0E|m>S2L4-27GOB&<(0D4Uv(OC#I&mYH9{>*Z?=|ATA zf!;%nOhcxRt&eSrVKIE4GWTy%!{gB=#r7}lh9y6+hnvqqmH-kZ|EHIEQDgSsWXBw& z?LE_=|GQ;zHv3a@J*72iyK7mAU2h1j1#o^)m@zP{rXgIg`z-R@w&)u z^O&S?h+kkz@7=%QE9Oj~s>~I;RikKpI zgnM#+1>8gOMpbS&bU{~)$?%<+^zD%=f?|CTnt%AIf%*2PsT`d1nC}aPl!=?QPA?`1JsMmL zuEBSS!64@KW-R`JrMA5jaPpV>DhF>Lw>A{8`bY$TaJb#01&F{Oa^_MW<>AKI3PpTp zFm|m03L(vfNoiP_Bxl}{jPt7PK)gk*ul>n8I|jvw4ZvL81TU98J0$!QYsU@Fs(goo z8|xK2zL~juCf@=C->sHXE6i$FZR@UH47>l{0G=^-cF(EOM?WChkw)_{S!MFsi#{XO z7A)(_v#ov(k{WmWN`98r2liJ5TUgD8h8E@n2MfIF!)gx(pQzuEED^Jat<)Cu*nn!e zO_r+Fw%K7GM4fy4`NGmee#7)!n&)L)03`B!?pghJG7gVrijF@Q#e{oQ+apWrM*-|Q zBdi?YvCcWMr$H@n=39)aUg$15i{1&bmY0uKoTd(GG#Z?Ql8sgexIT^uYFskr-ZP}i z8v#j;yzxrE8T&K`gSRdmpcuZ*o3|Rwb24YUHkRZ8TJ)H*me^c+nwU_vb>@&&de~IB zO>F1`qrG=(>F^(01 zChqDflm_0Yf{lA~ zKfS?nD>sF8Zv5rQmcHcmzg%>4fmN#gqkMxx@$*|4l?N+75dn5PVHvX4 z+2Lu9b)tGr|6^dsK$0|k`Fl&Mi?r1;w_b_+0GG^(clMZyU)3kdzoTUXQg5gD)x0Iw zTIjfQ&ht~3>HDBC(ERTkt`}woAv;#e<$-4L&B21p~=xNB!1Wbap zsA1tZ5B|ngulEKWGhT;1E+)(C4mA{Oya43v?N%B0cfd&Z>mqcu4hwcD&+uE-3(TZ`EJK8^NU}9uIPRACQ$N^K6&3C z`pk><4kL{`cRY*CyTwaArH{Y5QdF`jPKexl53&gh+_dz!WOe^(gfIhc#AZz7wLgn_ zsqPiHX{c^|a1vK<&6r|_msiYIT;uTB|C&eH4!x^3x3Q&3+B#eQTz(jqVgO%!sC-Q2 zQn`Dv>{hl24SkUok78PK>j4#IlT#-J4=EVu8RZ?`-_|bH+JY#C5^P$K*Hp`#_omg% zP|Q#em=|2- zcQWz4cHqJ<2vOTo*?g=IQH^U%w!W32$<$F|Tu!8k^0%r?Vc;O3N$X0%Em{|a8xLGW z!+Lmn(l7n^eHu#aN(M8EQ(2dK>YUDPzt{ano{^j{rEm23yAt$tGrZV+O(u#}PsjO{ zbJlMMmu6=j`vsJ9eOX4L{*+_S(VmK4ldok;ayz{?rf*PZ$j&tLe3Pu511j8KD-{zC!^2U*ahJYN`sM z;~e9avVx5DtU{TR-H|3OYOxPPpU(HC-*J#6yEhc5U~bYi4v*CVLt+iqJEld zj});JY9BW$9~LXVP+D_Jbv@2~TyjwAA9Z8@_KXt<=B?*|p!1k4Ltg@_|=|ud)#mx3W+7 zf?dAdhRW^tD7)2OH&IM95!8#4X=>b}~F&RPY+?B7Z3SZjOq@IBwSb%h%s<^ekM^jrLj2V=V$3^)z^Ro7$!4xm}j4;%$B8_RdGaA7_V! z>xtBNQ{fRWpnrzsv;V8TFAs;Z|Np(mWJLCL>}#QHgKXJpB#P2P3qqDkLb7BTDF$QD zR z=kZvVQ(spXuQ&k`CrZN+k=$y-9BvWap zEiZ!=hv>cAL@zWPbjV4=Q^llunmG_hsuF@T*wyX#(gx0R0BDXvXTIkG!eFWnRPvHt zRl7sip@c;4*fgi5GjRblHps9 zlJMHpo2=Ge0=K>oNPX3akKub-jPD+mcHXS!Ox@^6Lw0|Or|14KeYG-3aHRT{#~T?@ zM+O==jrgv2GdCQ^_nibCI7hvL{Qabk8w{~cCqnMLR|T^Grr$C!#@PCDor#5u=Ts8q ze>mKsI$|`pSYJ7*iiljA(gYdnuRnA|l!(sIRhd#4pyLuUU ze%lq~`Afl+#>2xF(f-m?mU`}}@yCkL%g;hZjUCOF;;Z}jBk#^wA!={3j+?bPx2FYi zd-!V0xLnGPZcr$vy1Ve)ul8y>t@z{Hahtmah#&0kPv^cuvIP{ann61LiHu#H67KXE zQC;(JH?9*k61_~<*{Nf7I##}zX2)_)tP&e0W931s-O(#a85|qbFsrB27Y?A2Eraku^Eg$pLjs9u0Kr}qY$6*&N`W94Q_sMb-+xgNSc-N1nS1p z_dCCt8jik$&ak-cX1n-5r)+yb50ucD9d6TV(3hQSmZg0nOVc7lwf3e5eVG}g9u*++ z3j}i-FZ*$nyRppZYX}9m_uYZ}qg3%Yb-!cA@B?9|U{@pBg}Fz61k+9pC{9<9?c95> zvbU`YouKfO1@ts=uAI0$I+T8_`t2ShMEYVsKXP{zprrHx5+i;+wBb` zVo^<+r_GkN+J)8Kw=!M%>f8CZKT`Zj{8seE*W3x7o@eOgi9>AqPT%qd8?Mb19~k8z z9h+>FA{@HURVEM>ta3JID+ejF7b!3~p_yB0=6l^Z;`#1dL~VeN$9<6bFvWLEI8t9G z{N(_FZzr-J_8hO+v@W6i6Tpces?EHB<^IBVe^S^ezSBe~ChIIVdReY-0kJ282LBfs zZZ*#IQ-&zFe9Zyuezz1+=30IZnx~lEyk-LW(qlD2glZCiU2B&)KJR{*vpa<>EFDM? zxft%WJ0J=0kek@ncddFC=gv&yk;iAhY&HLz;FfecA6sLMuE8OmXuvZr0b)*XvA9|F z+TS;zw6-QH^k#fh%up&D{{1D5Mdh;a?=PM0Uk=d!`E3ql?RVfG*V}?u>vohaXKZ-# z37H2d7k_1w(EE4Q{-ch!RTn@9+6d;#c$jG}3CV+_=PZp5rcR+4E=d*8y4aT;fBJhb zc&19&{2fsnn+t?%j`uD5wl9G4kRR1Z&Hyngc<1na6<~26XSkv|#sL67s=!F@TLxui z`snC9JeEp9nc8X9BN2}?uI*g_f-fGWZ(4SsYou?D*6l%!fRyiFYoD6=+NhurF#@Q} zve+iy@%xvjkLLlh9T6Z}Whg0vX(%J{?xkPH9-lp49yBvBFwhvkZb)2Iqz%Ji34(NT z_X>~EXgQO-OX)MaY4+z7fLIqn@&~N6{v0=x#w7Wt^M_BVK;NoG5efE-cUQ&(of(p zD|A>MrWo}=fQ)RYKPv`f%jtPZkeXL=^?~5{nS`&A{&RV$h^(LA*@tTj~-#0Z5KgM8OhdF?K8b^n!w|yrh%mu=Dh&7 zL_f@e+*y*3mCH#P8F`CpY|OHR>Ry67@@9=oRI6+%`0VGZ6hGd@8F*F%HX~Ad$(f<% zDPospF70dijP!?6NEsHAEt~PIn|<;0h>N%dKNh`uUzQ=BU>#CBW?kTfhPY0}VB){wBbZJ8rr`+NeT> zWpBP=ZfXyRk{?^M78VtEHAJ%L9sj(_ovYGrWEV9Se znm%yars#b`!6c|jXy~BUjAv<+dQ$scLO41-iqOjgO%Oj zl8Xyq+hDzK)kzD%cb0^`f@ywuu}oL-2-rgvM_q3Ftx7ziK8nQSfXed3AuBoy8&(Xi zXa$?h{yM4WiX_vM(}udz2&=J`_MgPS0@p}m!m;`VDHAO7zzdTAQ*UpkU6d4As-LjS zNEDahF4>s|)+nFv_xGvB6iwsR8d!0>x3!*rr(lf3 zjh`D^^TzOV;(daBd2mP%6#A7cOkO^#5h7T&dBI0T5&qc*%oQWwAP^m8_&*TdQsLqH zhO_H>I7Jv!$^Miq>yAwWT?ThlgR5iOWz0D!-CUifs=M{;xFm(AMVc`PK@+Uh`);~^ z(Slr=Ccl{IR0tliUf{~ottVKk!oaQCq;$*#tBX!Y@fh#3sjnE{nCn;8u?bZ=Mvh0y zu~#h}#2ME`ojYdKqREjh${Yt%m3WNtQbYNplZ1n7ph5g-X>I-fcsRJ{$90J|L5cpv z)Zbtb-H;!@Y;LSVZLBz(G&{3+>DMDd;;C}xMGE{^O)#9B{mihB#}z~< zQu<^~rvevylQuihjz@CR?CU`I-0GTjzJa?3&Kwp_v0cm@<${5%1wRV72i9u#!l%9< z&4b+ZY%$%w4G-9gM=B0z&&_P58fk>lhkx&8Zp$gkAol`47gmigEy^fRZQ^&siD?9l zQ)4av9Cy+l<1xH&0yTY5w-{#tgC=XjvX^#r>a*{fVq5iQp#;tZmYzNG%lbHDO$E8} zV@9J19WZh*F#&(6yK$%B38liSO$alyCEFE)Z`TQIepuus$t$t^y^%IDpDh=2+POu5 z+UOp+ew7zZes4|d5ZkbL(nXPo$p>+-r*p6gXT_#wfo4lU;A#Uc$c8JdYfTRUU3j@c z-7?Rl4sMM>i_+|;or$WltK|{I`jJX@wx+~Y-J!4e{sm=&NFAA}EE?Qr5Wd7ny?ZfK z#T=NuX(A!Lh;u_;f^ODBGj(yjU|jC2x8ooc7}ewl%!LjI^?qomV$9YF|A9Lpdsawel0SrrdK`+qc1^~ zA}>Z#v&2a}5*1;((R;SXzEt?$3ir-!lT0(M>`{Lmb^oOgV_5m5#5A6eOUbSuD)UKG zAf9-mag*FGFi08@CCEe%?tN(@YaaFDh@7JZw*Hzu1=~JT24aKo_Sc@+o{lo6_SUtX zaQJx`W0!_&D9J%g2x?(z$!oO!2?^lHZX@5xr*oNES0(TNzhU6u|k zaHi_Wa+04fYt_NLpjlOolPQjs#x%9Np*joGoGRu*z)9U^N80y%FJIo$hFu?KrW_q9 zL$!x3wcru;p^YkxIDE4?L(?a`R1#$iSX6L{nQuVkJ2*ACimqdHwC1-YmP(VYte<5u zAJamz7Hy1LzR?n%Fo=Fp4&+iYr>H?Xj(E9m~5wVxE zk|Hc3NVrOTPvbRx5yXAt4;>DUT)h_cLg@kjA3-`XP{_UIA6{==uS3pvZOG@jQWah- z_O?E~WFzP#L3{20C~}zU<%(|s8AvkwiMWv@yY2^xDWe09)biE{eVgk$DWS7mu?}~>tsRD`1t}SO9 zq{GB~n@;!Ir_I0i7s6n}o`BONdA14h9y7i@uSt}dt3LPq$Plm~Rf z1zhCubjrD}w;N0WluX3F*x}UL=df>9)hVK%@onE`U#jcREBx6p811ASM+qy5pgXYw~gws5YfT%8dA8HXY9t<8?x-Mo5g zt3fbLt}-%7(r9kU_BPATwt({!<$#gD$Py*#Is5#~Q z=lIp(sSgzlzuys{ON|78xukR1C~}aV;1FsKaDnq+Vu^>zP08gU1vZ=7g#y5 z5preh&=jFPM;G8$gt`$ML5~^_OCbtSlO%g6U?W(|C!?7{k0ze-_@?K71Hp46C^7ek zuA*EisBrZHl*KxN={Y1SpuKcjK47#1b%|7%)aUz2r)mR#2P3?A3l%xnQR;3Nt#pHK zJst&HsPk|!^VjV-gT-zDxHlspZ@=SEN0$%pbpSkf98Q}rPknma!62j9z=)Nv?c+!Q z|K$Kko|TjOfYHu^ES8XEn7XPqX6^vb#Q-dIu8L#FCwBu1V}L6l!j6V%0S#@ek}CdD zPZKDJD!TffYLk|WBJl_ zbO~sYVw`Myrc*2Ujl1YI8KkHsc5{OMrZjRpE> zNmbmF4OkLh5>)hhPP&}8bk#lu!+eoJs+|LA^8s!Ry~dEm+lfIF-M1RyBDX_q;5p7b z10{r`i4Kr3HsPily;qw_@>ddP1}>_H79KCCyt^3bpx;#cMv5MU7}u>^_FTKF=l=dn z!1y6)>Dn;@b)k~nS#rk+b{@vK|5WG)vrpoTrLP)NqQ#v?mG^taBmh; z`yhM(aCQ$*g?`L@8=c+dTBn8I<&Y-*>5ejEnqXWC&~D#STQ0t0Hr&bG;X34nlmd=M z{jq+Zm!~hnp|>EVk0a;73Dfm3r+H8}L*EE4zS3Q7>92o+ok8z4e-)7UUZo@hE}(dzF+>7vhg{r0 ze8m#DMoW4VsrUfb30qBeO)bic8J&(n3EnZNqMh|Rrgs`?=r%IsYtb_5>Q4^U2&w-` zcPyh0*9xE5h$VH@AJ}Y-H5BFGi$z+<5zV`|Ct~W=rQZ){mPqi@f2MMoV_4fwBon3cRW0O-$GgT$ zzD;&L$3^9&MFj5wAE`q;yRog?tu3uB=5842YY^O;eS??O8bPZMn!(1+2gjEr# z&Jrs_An`~`q4pp7E=oMZ+d3Sn%N8<$BhL9_Njh??3%Xx3Ps^?n{wU>x=M{tahPWZ& zqQh0g!-dx`<;Y}<`?qrHMq055opR8EFU5QVB7iDLst=EG^kn9~ClBcmfrvLBp<_OB(U zpArKua0!6f$A=*;xXF_+ubxz2VttUIZrz3FX!*no&ri$`Bf<}objL$smna8>pM^(~ z(heCgHTPhq+x|jnr#s$!8D_R>8}S?aLkWE3Ia1^%qIioas!SF^8d!XVMno$DvvrT2 zc5UO{A|58?+vqGlqD?d%`ZSyH`Hv__d(j$5(20M2p%uas@}$W{J!)PFQ7kt^^)jiMm6EAnBTN~(KtQ-($FnEiM+>mv6~tqP_AJslQi zqb3B?vBdNJr}t;rHAVVngn%V!CFKhrEZYuIJuTqqyZ}QVp%5Xyq9pr^on6f;Sxi=y zNcJKMjJMu#-zH}6ab#tTt|O`8HRh@-X|*9J?}Ju(H;9VwMSZ{ytQ3S~ zgAG=cCND7<-00271_SYJ;*z;M5cF#D>7u4F#mA;vu(`L4~w(IC5jU89G&;=f*`j+XR`|kW}C1@`E3%-B`RG+kkh~|ra8EE>B}1% z9w+PC`vHyv@doE<)E7GB&K2&8@DFmCg%Wl-s~U6NP)!L(1#5O|@#8{)AOG+j*vGgn z4|*f4Z&3S?fnbqK)x`~-W!@a+4pLWkJYDNiN6!5ir?hhH{LGAaBxNI6+zXx}kGX;+ zuq6M^&aUScuI3i)nk9Y~5=09?H)$QD{)_z@2fPzYuZ9G3AQ_^a(dn7m1m=hD?>?6i zzL8a6Po}zXxKge)EDnd#ZHx6>w~Rc!w(T7ShgfZNP=6UNIxLI~iO#kTZN?)Dv>g&2 zd``5hw|{N!`v9{|(UeWL_O?Ix9)lTx+H6MlUTu5>Zt8@yNV2?La^@aQwuO)i$82UH z(XY{^Jmg&aJ}1GQ1{EAKBY^tY>wA+(hFaDa7?;9poN-wTmDMA}=1h}WGVhP?O|3Bn zkp;aTSC!btptd%Y>1AYH(x}j1dA_VFRPOm7BWXGs>K*)2Y~HDE#a*e^{_J+YTr{2~ z;*pKi6nfJmLlM(^Q60p69p{gM8dX-fMH@3jcQH(sJ9n4zaVA?=wNHT6vUVJNl0tou zP0B~9^a)Qr53)O&^I*47L2Mqxo0qc&7#Am%w0%PFh* z`(D`_7BI+RXD)WOvjb9dO)r+)r|V4GTcsS&2HEZ4emWaZI2v;)cLkw^$Yijn*=31b z`k=G0gnEz8oZ=l&OFGQxE-cQNa^R0{f}V|xRll9s;8aSz`btayeIYs$aybf1OI(L5 zYdCxId!noBHyV5k%__9OKF5Va@)f4gSK6V;vpH~l5|ZaeU2}OyDX%y9ZV}e)C)~Tz zVfyg-C_Hv}OtiQP%bzn3XQ^$|VXU{c^;etBqO7z`Us)

sD zw=Xs>c$VJ2utE)WzMQzX?v5eLRCt?8^L^<)(9Yp2?`)Nr_!7QL@h1(B1Y7r<`VlMv-f>bZ$X-iEzoXILW(Cx&pHPRY^t0B$M2~#fZX2gV34V`r$Gp-i8$&I z{0nN#P2i1n8}K^1BjGfVkcalpnQyD^-dK;Q0ra?TwEd@HHvfpE`FD6$&(p{;0FB_f zj6}nEruv@cf2;>Mvk<26E=p#ETnoCn-?uUHcKF4E#TIiF-qH0y%Lp_o11qC16Apln z&w=mX)cm&(^FSbNEs@sHFgAaZ6tTKc^3n=1|LtN`*wTeNI{YblC4XCo|B^cYDTiLS z{{AJ7{$Ku&p@05wI%q}Sgr-2xeDO7V>w0KR}yyw-NEZqo9-|{AYh*xt(&b8gN%8Y{yR6)Ki)(YT_?Hkbt5BQ!*5pUT^ zxyg1wutzql^KXRF+=gO`#2a56z%qEp+zS9z<4{Z5N+Wc03sR6Ip>@U{<$5!!j?{$) z#}yqZd~pBZZ_d9bNEkdp19MR)vI`ml46^1U!v?NR6ib)n0=775ziX(l8URwvvjbkc zuq3AIqk_suuDal`Pq!A6C0+cWXBr{&M=wmdLCe=FLgY+eoq@scfLgoV5BLK1J#TIE zPEdy91kxYg2YE&#bjosC^4peN!!W&o8Xa#CXe$@*&Hbp@bKO7X$6NC31}Hoz74Ny8 zk@GTy8I2=3KfUu>H>_|b7u+FGv@9ov8jUQuEDiO}^&4L|bq9K+5sjx|$Ao{aJbhSi z4iv<9tuKMRS`cD`tyu*cS$9%lXpaJ)&<&`0xp9{r9ywTkcyl5YU;^T9oovmh#3K!g zgv|KWJcnqQxR&Ky!Qw-QREK0KBKzM!2F(ruZh|P}=f6zqRi%a+KaVm|3tyhUDj8dI z=5y`E#|Om@H9}#db4@x?Rnp8cUlL6X+IyTuqusx^ z{gYq&S2z8=tN(eU|9K1l*m*{B!hbf7|7h&*9sB!-fAZeHy6OLD$D#I^|39>75B$5` m`v2_E_V@hX9NM>P%g>^{)7bsI9UT$)vfR1X{GO@vrT+pHYDV1v literal 0 HcmV?d00001 diff --git a/packages/superset-ui-plugin-chart-table/src/index.ts b/packages/superset-ui-plugin-chart-table/src/index.ts new file mode 100644 index 000000000..8f0233950 --- /dev/null +++ b/packages/superset-ui-plugin-chart-table/src/index.ts @@ -0,0 +1,36 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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. + */ +import { ChartPlugin } from '@superset-ui/chart'; +import transformProps from './transformProps'; +import createMetadata from './createMetadata'; +import buildQuery from './buildQuery'; +import Core from '@airbnb/lunar/lib'; + +Core.initialize({ name: 'superset-datatable' }); + +export default class TableChartPlugin extends ChartPlugin { + constructor() { + super({ + buildQuery, + loadChart: () => import('./Table'), + metadata: createMetadata(), + transformProps, + }); + } +} diff --git a/packages/superset-ui-plugin-chart-table/src/legacy/index.ts b/packages/superset-ui-plugin-chart-table/src/legacy/index.ts new file mode 100644 index 000000000..8adc7fd86 --- /dev/null +++ b/packages/superset-ui-plugin-chart-table/src/legacy/index.ts @@ -0,0 +1,34 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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. + */ +import { ChartPlugin } from '@superset-ui/chart'; +import transformProps from './transformProps'; +import createMetadata from '../createMetadata'; +import Core from '@airbnb/lunar/lib'; + +Core.initialize({ name: 'superset-datatable' }); + +export default class TableChartPlugin extends ChartPlugin { + constructor() { + super({ + loadChart: () => import('../Table'), + metadata: createMetadata(true), + transformProps, + }); + } +} diff --git a/packages/superset-ui-plugin-chart-table/src/legacy/transformProps.ts b/packages/superset-ui-plugin-chart-table/src/legacy/transformProps.ts new file mode 100644 index 000000000..3b6e8314d --- /dev/null +++ b/packages/superset-ui-plugin-chart-table/src/legacy/transformProps.ts @@ -0,0 +1,76 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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. + */ +/* eslint-disable sort-keys */ + +import { ChartProps } from '@superset-ui/chart'; + +export default function transformProps(chartProps: ChartProps) { + const { height, datasource, filters, formData, onAddFilter, payload } = chartProps; + const { + alignPn, + colorPn, + includeSearch, + metrics, + orderDesc, + pageLength, + percentMetrics, + tableFilter, + tableTimestampFormat, + timeseriesLimitMetric, + } = formData; + const { columnFormats, verboseMap } = datasource; + const { records, columns } = payload.data; + + const processedColumns = columns.map((key: string) => { + let label = verboseMap[key]; + // Handle verbose names for percents + if (!label) { + if (key[0] === '%') { + const cleanedKey = key.substring(1); + label = `% ${verboseMap[cleanedKey] || cleanedKey}`; + } else { + label = key; + } + } + + return { + key, + label, + format: columnFormats && columnFormats[key], + }; + }); + + return { + height, + data: records, + alignPositiveNegative: alignPn, + colorPositiveNegative: colorPn, + columns: processedColumns, + filters, + includeSearch, + metrics, + onAddFilter, + orderDesc, + pageLength: pageLength && parseInt(pageLength, 10), + percentMetrics, + tableFilter, + tableTimestampFormat, + timeseriesLimitMetric, + }; +} diff --git a/packages/superset-ui-plugin-chart-table/src/transformProps.ts b/packages/superset-ui-plugin-chart-table/src/transformProps.ts new file mode 100644 index 000000000..29a346526 --- /dev/null +++ b/packages/superset-ui-plugin-chart-table/src/transformProps.ts @@ -0,0 +1,124 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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. + */ +/* eslint-disable sort-keys */ + +import { ChartProps, Metric, FormDataMetric } from '@superset-ui/chart'; + +const DTTM_ALIAS = '__timestamp'; + +function transformData(data: ChartProps['payload'][], formData: ChartProps['formData']) { + const columns = new Set( + [...formData.groupby, ...formData.metrics, ...formData.allColumns].map( + column => column.label || column, + ), + ); + + let records = data; + + // handle timestamp columns + if (formData.includeTime) { + columns.add(DTTM_ALIAS); + } + + // handle percentage columns. + const percentMetrics: string[] = (formData.percentMetrics || []).map( + (metric: FormDataMetric) => (metric as Metric).label || (metric as string), + ); + if (percentMetrics.length > 0) { + const sumPercentMetrics = data.reduce((sumMetrics, item) => { + const newSumMetrics = { ...sumMetrics }; + percentMetrics.forEach(metric => { + newSumMetrics[metric] = (sumMetrics[metric] || 0) + (item[metric] || 0); + }); + return newSumMetrics; + }, {}); + records = data.map(item => { + const newItem = { ...item }; + percentMetrics.forEach(metric => { + newItem[`%${metric}`] = + sumPercentMetrics[metric] !== 0 ? newItem[metric] / sumPercentMetrics[metric] : null; + }); + return newItem; + }); + percentMetrics.forEach(metric => { + columns.add(`%${metric}`); + }); + } + + // handle sortedby column + if (formData.timeseriesLimitMetric) { + const metric = formData.timeseriesLimitMetric.label || formData.timeseriesLimitMetric; + columns.add(metric); + } + + return { + records, + columns: [...columns], + }; +} + +export default function transformProps(chartProps: ChartProps) { + const { height, datasource, filters, formData, onAddFilter, payload } = chartProps; + const { + alignPn, + colorPn, + includeSearch, + metrics, + orderDesc, + pageLength, + percentMetrics, + tableFilter, + tableTimestampFormat, + timeseriesLimitMetric, + } = formData; + const { columnFormats, verboseMap } = datasource; + const data = payload.data || payload[0].data; + const { records, columns } = transformData(data, formData); + + const processedColumns = columns.map((key: string) => { + let label = verboseMap[key]; + // Handle verbose names for percents + if (!label) { + label = key; + } + return { + key, + label, + format: columnFormats && columnFormats[key], + }; + }); + + return { + height, + data: records, + alignPositiveNegative: alignPn, + colorPositiveNegative: colorPn, + columns: processedColumns, + filters, + includeSearch, + metrics, + onAddFilter, + orderDesc, + pageLength: pageLength && parseInt(pageLength, 10), + percentMetrics, + tableFilter, + tableTimestampFormat, + timeseriesLimitMetric, + }; +} diff --git a/packages/superset-ui-plugin-chart-table/types/external.d.ts b/packages/superset-ui-plugin-chart-table/types/external.d.ts new file mode 100644 index 000000000..e2937d470 --- /dev/null +++ b/packages/superset-ui-plugin-chart-table/types/external.d.ts @@ -0,0 +1 @@ +declare module '*.png'; diff --git a/packages/superset-ui-plugins-demo/.storybook/webpack.config.js b/packages/superset-ui-plugins-demo/.storybook/webpack.config.js index 8fbfe00c5..0aab98261 100644 --- a/packages/superset-ui-plugins-demo/.storybook/webpack.config.js +++ b/packages/superset-ui-plugins-demo/.storybook/webpack.config.js @@ -4,7 +4,7 @@ const webpack = require('webpack'); const BABEL_TYPESCRIPT_OPTIONS = { presets: [ - ['@babel/preset-env', { useBuiltIns: 'entry' }], + ['@babel/preset-env', { useBuiltIns: 'entry', corejs: 3 }], '@babel/preset-react', '@babel/preset-typescript', ], diff --git a/packages/superset-ui-plugins-demo/storybook/stories/plugin-chart-table/Stories.jsx b/packages/superset-ui-plugins-demo/storybook/stories/plugin-chart-table/Stories.jsx new file mode 100644 index 000000000..411e1ba95 --- /dev/null +++ b/packages/superset-ui-plugins-demo/storybook/stories/plugin-chart-table/Stories.jsx @@ -0,0 +1,76 @@ +/* eslint-disable no-magic-numbers */ +import React from 'react'; +import { SuperChart } from '@superset-ui/chart'; +import dataLegacy from './dataLegacy'; + +export default [ + { + renderStory: () => ( + + ), + storyName: 'Legacy', + storyPath: 'plugin-chart-table|TableChartPlugin', + }, + { + renderStory: () => ( + + ), + storyName: 'Legacy-TableFilter', + storyPath: 'plugin-chart-table|TableChartPlugin', + }, +]; diff --git a/packages/superset-ui-plugins-demo/storybook/stories/plugin-chart-table/data.js b/packages/superset-ui-plugins-demo/storybook/stories/plugin-chart-table/data.js new file mode 100644 index 000000000..da1c722c2 --- /dev/null +++ b/packages/superset-ui-plugins-demo/storybook/stories/plugin-chart-table/data.js @@ -0,0 +1,46 @@ +/* eslint-disable sort-keys */ +export default { + columns: ['name', 'sum__num'], + records: [ + { + name: 'Michael', + sum__num: 2467063, + }, + { + name: 'Christopher', + sum__num: 1725265, + }, + { + name: 'David', + sum__num: 1570516, + }, + { + name: 'James', + sum__num: 1506025, + }, + { + name: 'John', + sum__num: 1426074, + }, + { + name: 'Matthew', + sum__num: 1355803, + }, + { + name: 'Robert', + sum__num: 1314800, + }, + { + name: 'Daniel', + sum__num: 1159354, + }, + { + name: 'Joseph', + sum__num: 1114098, + }, + { + name: 'William', + sum__num: 1113701, + }, + ], +}; diff --git a/packages/superset-ui-plugins-demo/storybook/stories/plugin-chart-table/dataLegacy.js b/packages/superset-ui-plugins-demo/storybook/stories/plugin-chart-table/dataLegacy.js new file mode 100644 index 000000000..bf2528849 --- /dev/null +++ b/packages/superset-ui-plugins-demo/storybook/stories/plugin-chart-table/dataLegacy.js @@ -0,0 +1,66 @@ +/* eslint-disable sort-keys */ +export default { + columns: ['name', 'sum__num', '%sum__num', 'trend'], + records: [ + { + name: 'Michael', + sum__num: 2467063, + '%sum__num': 0.2, + trend: 10, + }, + { + name: 'Christopher', + sum__num: 1725265, + '%sum__num': 0.2, + trend: 17, + }, + { + name: 'David', + sum__num: 1570516, + '%sum__num': 0.15, + trend: 21, + }, + { + name: 'James', + sum__num: 1506025, + '%sum__num': 0.14, + trend: 1, + }, + { + name: 'John', + sum__num: 1426074, + '%sum__num': 0.12, + trend: -2, + }, + { + name: 'Matthew', + sum__num: 1355803, + '%sum__num': 0.1, + trend: -10, + }, + { + name: 'Robert', + sum__num: 1314800, + '%sum__num': 0.03, + trend: 24, + }, + { + name: 'Daniel', + sum__num: 1159354, + '%sum__num': 0.02, + trend: 25, + }, + { + name: 'Joseph', + sum__num: 1114098, + '%sum__num': 0.02, + trend: 10, + }, + { + name: 'William', + sum__num: 1113701, + '%sum__num': 0.02, + trend: 10, + }, + ], +}; diff --git a/packages/superset-ui-plugins-demo/storybook/stories/plugin-chart-table/index.js b/packages/superset-ui-plugins-demo/storybook/stories/plugin-chart-table/index.js new file mode 100644 index 000000000..2a5769070 --- /dev/null +++ b/packages/superset-ui-plugins-demo/storybook/stories/plugin-chart-table/index.js @@ -0,0 +1,10 @@ +import TableChartPlugin from '../../../../superset-ui-plugin-chart-table/src'; +import TableChartPluginLegacy from '../../../../superset-ui-plugin-chart-table/src/legacy'; +import Stories from './Stories'; + +new TableChartPlugin().configure({ key: 'table2' }).register(); +new TableChartPluginLegacy().configure({ key: 'table2-legacy' }).register(); + +export default { + examples: [...Stories], +};