From 737f66b9a6b2431e6ffc2f09eba834bd0547c85e Mon Sep 17 00:00:00 2001 From: leyoonafr Date: Wed, 22 Jul 2026 00:31:13 +0800 Subject: [PATCH] docs: migrate visualization and container documentation (#82) --- docs-nextra/app/_components/api-reference.tsx | 94 ++++ .../app/_components/controller-api.tsx | 92 +--- docs-nextra/app/_components/display-api.tsx | 506 ++++++++++++++++++ .../app/_components/display-audio-graph.ts | 286 ++++++++++ .../app/_components/display-card-demo.tsx | 58 ++ .../app/_components/display-demo-frame.tsx | 87 +++ docs-nextra/app/_components/display-demo.tsx | 179 +++++++ .../app/_components/display-docs.module.css | 324 +++++++++++ .../app/_components/display-lfo-demo.tsx | 203 +++++++ docs-nextra/content/en/_meta.ts | 2 +- docs-nextra/content/en/component/_meta.ts | 15 + docs-nextra/content/en/component/card.mdx | 43 ++ docs-nextra/content/en/component/lfo.mdx | 50 ++ docs-nextra/content/en/component/light.mdx | 39 ++ .../content/en/component/oscilloscope.mdx | 45 ++ .../content/en/component/spectrogram.mdx | 47 ++ docs-nextra/content/en/component/vumeter.mdx | 43 ++ docs-nextra/content/en/component/waveform.mdx | 48 ++ docs-nextra/content/zh/_meta.ts | 2 +- docs-nextra/content/zh/component/_meta.ts | 15 + docs-nextra/content/zh/component/card.mdx | 43 ++ docs-nextra/content/zh/component/lfo.mdx | 50 ++ docs-nextra/content/zh/component/light.mdx | 39 ++ .../content/zh/component/oscilloscope.mdx | 45 ++ .../content/zh/component/spectrogram.mdx | 47 ++ docs-nextra/content/zh/component/vumeter.mdx | 43 ++ docs-nextra/content/zh/component/waveform.mdx | 48 ++ docs-nextra/next.config.mjs | 3 + docs-nextra/public/audios/demo-loop.mp3 | Bin 0 -> 205786 bytes packages/lib/utils.ts | 2 + scripts/smoke-nextra-routes.mjs | 130 ++++- scripts/verify-nextra-output.mjs | 124 +++-- 32 files changed, 2590 insertions(+), 162 deletions(-) create mode 100644 docs-nextra/app/_components/api-reference.tsx create mode 100644 docs-nextra/app/_components/display-api.tsx create mode 100644 docs-nextra/app/_components/display-audio-graph.ts create mode 100644 docs-nextra/app/_components/display-card-demo.tsx create mode 100644 docs-nextra/app/_components/display-demo-frame.tsx create mode 100644 docs-nextra/app/_components/display-demo.tsx create mode 100644 docs-nextra/app/_components/display-docs.module.css create mode 100644 docs-nextra/app/_components/display-lfo-demo.tsx create mode 100644 docs-nextra/content/en/component/card.mdx create mode 100644 docs-nextra/content/en/component/lfo.mdx create mode 100644 docs-nextra/content/en/component/light.mdx create mode 100644 docs-nextra/content/en/component/oscilloscope.mdx create mode 100644 docs-nextra/content/en/component/spectrogram.mdx create mode 100644 docs-nextra/content/en/component/vumeter.mdx create mode 100644 docs-nextra/content/en/component/waveform.mdx create mode 100644 docs-nextra/content/zh/component/card.mdx create mode 100644 docs-nextra/content/zh/component/lfo.mdx create mode 100644 docs-nextra/content/zh/component/light.mdx create mode 100644 docs-nextra/content/zh/component/oscilloscope.mdx create mode 100644 docs-nextra/content/zh/component/spectrogram.mdx create mode 100644 docs-nextra/content/zh/component/vumeter.mdx create mode 100644 docs-nextra/content/zh/component/waveform.mdx create mode 100644 docs-nextra/public/audios/demo-loop.mp3 diff --git a/docs-nextra/app/_components/api-reference.tsx b/docs-nextra/app/_components/api-reference.tsx new file mode 100644 index 00000000..93b7fdd7 --- /dev/null +++ b/docs-nextra/app/_components/api-reference.tsx @@ -0,0 +1,94 @@ +import type { FC } from 'react' +import styles from './controller-docs.module.css' + +export type Locale = 'en' | 'zh' +export type LocalizedText = Readonly> + +export type ApiRow = Readonly<{ + name: string + type: string + defaultValue: string + description: LocalizedText + required?: boolean +}> + +export type ApiSection = Readonly<{ + name: string + inherited: LocalizedText + rows: readonly ApiRow[] +}> + +export const localizedText = (en: string, zh: string): LocalizedText => ({ en, zh }) + +const labels = { + en: { + defaultValue: 'Default', + description: 'Description', + name: 'Prop', + required: 'required', + type: 'Type', + }, + zh: { + defaultValue: '默认值', + description: '说明', + name: '属性', + required: '必填', + type: '类型', + }, +} as const + +type ApiTableProps = Readonly<{ + lang: Locale + section: ApiSection +}> + +export const ApiTable: FC = ({ lang, section }) => { + const localeLabels = labels[lang] + + return ( +
+

+ {section.name} +

+

{section.inherited[lang]}

+ {section.rows.length > 0 && ( +
+ + + + + + + + + + + + {section.rows.map((row) => ( + + + + + + + ))} + +
+ {section.name} {lang === 'zh' ? '公开属性' : 'public props'} +
{localeLabels.name}{localeLabels.type}{localeLabels.defaultValue}{localeLabels.description}
+ {row.name} + {row.required && ( + + * + + )} + + {row.type} + + {row.defaultValue} + {row.description[lang]}
+
+ )} +
+ ) +} diff --git a/docs-nextra/app/_components/controller-api.tsx b/docs-nextra/app/_components/controller-api.tsx index fc4d5ccd..050394dd 100644 --- a/docs-nextra/app/_components/controller-api.tsx +++ b/docs-nextra/app/_components/controller-api.tsx @@ -1,33 +1,14 @@ import type { FC } from 'react' -import styles from './controller-docs.module.css' +import { ApiTable, localizedText as text, type ApiSection, type Locale } from './api-reference' export type ControllerName = 'button' | 'checkbox' | 'envelope' | 'input' | 'knob' | 'radio' | 'slider' | 'switch' -type Locale = 'en' | 'zh' -type LocalizedText = Readonly> - -type ApiRow = Readonly<{ - name: string - type: string - defaultValue: string - description: LocalizedText - required?: boolean -}> - -type ApiSection = Readonly<{ - name: string - inherited: LocalizedText - rows: readonly ApiRow[] -}> - type ControllerApiDefinition = Readonly<{ main: ApiSection group?: ApiSection }> -const text = (en: string, zh: string): LocalizedText => ({ en, zh }) - const definitions: Record = { button: { main: { @@ -966,77 +947,6 @@ const definitions: Record = { }, } -const labels = { - en: { - defaultValue: 'Default', - description: 'Description', - name: 'Prop', - required: 'required', - type: 'Type', - }, - zh: { - defaultValue: '默认值', - description: '说明', - name: '属性', - required: '必填', - type: '类型', - }, -} as const - -type ApiTableProps = Readonly<{ - lang: Locale - section: ApiSection -}> - -const ApiTable: FC = ({ lang, section }) => { - const localeLabels = labels[lang] - - return ( -
-

- {section.name} -

-

{section.inherited[lang]}

-
- - - - - - - - - - - - {section.rows.map((row) => ( - - - - - - - ))} - -
- {section.name} {lang === 'zh' ? '公开属性' : 'public props'} -
{localeLabels.name}{localeLabels.type}{localeLabels.defaultValue}{localeLabels.description}
- {row.name} - {row.required && ( - - * - - )} - - {row.type} - - {row.defaultValue} - {row.description[lang]}
-
-
- ) -} - type ControllerApiProps = Readonly<{ controller: ControllerName lang: Locale diff --git a/docs-nextra/app/_components/display-api.tsx b/docs-nextra/app/_components/display-api.tsx new file mode 100644 index 00000000..43597ea4 --- /dev/null +++ b/docs-nextra/app/_components/display-api.tsx @@ -0,0 +1,506 @@ +import type { FC } from 'react' +import { ApiTable, localizedText as text, type ApiSection, type Locale } from './api-reference' + +export type DisplayName = + 'lfo' | 'light' | 'oscilloscope' | 'spectrogram' | 'vumeter' | 'waveform' | 'card' + +type DisplayApiDefinition = Readonly<{ + main: ApiSection + compound?: readonly ApiSection[] +}> + +const definitions: Record = { + lfo: { + main: { + name: 'LFO', + inherited: text( + 'Also accepts React.HTMLAttributes. The visualization fills its parent and forwards className and style.', + '同时接受 React.HTMLAttributes。可视化会填满父容器,并透传 className 与 style。', + ), + rows: [ + { + name: 'frequency', + type: 'number', + defaultValue: '1', + description: text( + 'Number of waveform cycles across the graph.', + '图表中显示的波形周期数。', + ), + }, + { + name: 'amplitude', + type: 'number', + defaultValue: '0.5', + description: text( + 'Normalized amplitude, clamped from 0 to 1.', + '归一化振幅,限制在 0 到 1。', + ), + }, + { + name: 'delay', + type: 'number', + defaultValue: '0', + description: text( + 'Flat lead-in before the waveform, clamped from 0 to 1000 milliseconds.', + '波形前的平直延迟,限制在 0 到 1000 毫秒。', + ), + }, + { + name: 'type', + type: "'sine' | 'square' | 'triangle'", + defaultValue: "'sine'", + description: text('Waveform shape.', '波形形状。'), + }, + { + name: 'lineColor', + type: 'string', + defaultValue: 'var(--echo-primary)', + description: text('CSS color used for the waveform.', '波形使用的 CSS 颜色。'), + }, + { + name: 'lineWidth', + type: 'number', + defaultValue: '3', + description: text('Waveform stroke width in pixels.', '波形描边宽度(像素)。'), + }, + ], + }, + }, + light: { + main: { + name: 'Light', + inherited: text( + 'Also accepts React.HTMLAttributes. Add an accessible text status when color or glow communicates application state.', + '同时接受 React.HTMLAttributes。当颜色或发光表示应用状态时,请提供可访问的文字状态。', + ), + rows: [ + { + name: 'on', + type: 'boolean', + defaultValue: 'false', + description: text('Controls the illuminated state.', '控制指示灯是否点亮。'), + }, + { + name: 'size', + type: 'number | string', + defaultValue: "'0.75rem'", + description: text('Sets both width and height.', '同时设置宽度和高度。'), + }, + { + name: 'color', + type: 'string', + defaultValue: 'var(--echo-primary)', + description: text( + 'CSS color for the active fill and glow.', + '点亮填充与光晕使用的 CSS 颜色。', + ), + }, + ], + }, + }, + oscilloscope: { + main: { + name: 'Oscilloscope', + inherited: text( + 'Also accepts React.HTMLAttributes. Supply indexed time-domain samples from an AnalyserNode.', + '同时接受 React.HTMLAttributes。请传入来自 AnalyserNode 的带索引时域采样。', + ), + rows: [ + { + name: 'data', + type: 'OscilloscopeDataPoint[]', + defaultValue: '—', + required: true, + description: text('Indexed amplitude samples to draw.', '要绘制的带索引振幅采样。'), + }, + { + name: 'amplitudeRange', + type: '[number, number]', + defaultValue: '[-2, 2]', + description: text( + 'Minimum and maximum values on the vertical scale.', + '纵向刻度的最小值与最大值。', + ), + }, + { + name: 'lineColor', + type: 'string', + defaultValue: 'var(--echo-primary)', + description: text('CSS color used for the trace.', '轨迹使用的 CSS 颜色。'), + }, + { + name: 'lineWidth', + type: 'number', + defaultValue: '3', + description: text('Trace width in pixels.', '轨迹宽度(像素)。'), + }, + ], + }, + }, + spectrogram: { + main: { + name: 'Spectrogram', + inherited: text( + 'Also accepts React.HTMLAttributes. The component plots one FFT frame as a logarithmic frequency spectrum.', + '同时接受 React.HTMLAttributes。组件会将一帧 FFT 数据绘制为对数频率频谱。', + ), + rows: [ + { + name: 'data', + type: 'SpectrogramDataPoint[]', + defaultValue: '—', + required: true, + description: text('Frequency-bin amplitudes to draw.', '要绘制的频率分箱振幅。'), + }, + { + name: 'fftSize', + type: 'number', + defaultValue: '1024', + description: text( + 'Number of analyser bins used to map indexes to hertz; use data.length for native AnalyserNode output.', + '用于将索引映射为赫兹的分析器分箱数量;使用原生 AnalyserNode 输出时请传入 data.length。', + ), + }, + { + name: 'amplitudeRange', + type: '[number, number]', + defaultValue: '[-100, 10]', + description: text('Displayed decibel range.', '显示的分贝范围。'), + }, + { + name: 'lineColor', + type: 'string', + defaultValue: 'var(--echo-primary)', + description: text('CSS color used for the spectrum trace.', '频谱轨迹使用的 CSS 颜色。'), + }, + { + name: 'lineWidth', + type: 'number', + defaultValue: '2', + description: text('Spectrum trace width in pixels.', '频谱轨迹宽度(像素)。'), + }, + { + name: 'axis', + type: 'boolean', + defaultValue: 'false', + description: text('Shows frequency and amplitude axes.', '显示频率轴与振幅轴。'), + }, + { + name: 'axisColor', + type: 'string', + defaultValue: 'var(--echo-muted-foreground)', + description: text('CSS color for axes and labels.', '坐标轴与标签使用的 CSS 颜色。'), + }, + { + name: 'xAxisTicks', + type: 'number[]', + defaultValue: '[50, 100, 200, 500, 1000, 2000, 5000, 10000]', + description: text('Frequency tick values in hertz.', '以赫兹为单位的频率刻度值。'), + }, + { + name: 'yAxisTicks', + type: 'number[]', + defaultValue: '[-80, -60, -20, 0]', + description: text('Amplitude tick values in decibels.', '以分贝为单位的振幅刻度值。'), + }, + { + name: 'grid', + type: 'boolean', + defaultValue: 'false', + description: text('Draws grid lines at configured ticks.', '在配置的刻度处绘制网格线。'), + }, + { + name: 'gridColor', + type: 'string', + defaultValue: 'var(--echo-background)', + description: text('CSS color for grid lines.', '网格线使用的 CSS 颜色。'), + }, + { + name: 'shadow', + type: 'boolean', + defaultValue: 'false', + description: text( + 'Fills the area above or below the spectrum.', + '填充频谱上方或下方区域。', + ), + }, + { + name: 'shadowColor', + type: 'string', + defaultValue: 'var(--echo-primary)', + description: text( + 'CSS color at the solid edge of the fill.', + '填充实色边缘使用的 CSS 颜色。', + ), + }, + { + name: 'shadowDirection', + type: "'top' | 'bottom'", + defaultValue: "'bottom'", + description: text('Chooses the fill direction.', '选择填充方向。'), + }, + { + name: 'shadowHeight', + type: 'number', + defaultValue: '20', + description: text('Gradient stop position as a percentage.', '渐变停止位置(百分比)。'), + }, + ], + }, + }, + vumeter: { + main: { + name: 'VuMeter', + inherited: text( + 'Also accepts React.HTMLAttributes except the native onChange. Pass one dB value for mono or two for stereo.', + '同时接受除原生 onChange 外的 React.HTMLAttributes。传入一个分贝值表示单声道,两个值表示立体声。', + ), + rows: [ + { + name: 'value', + type: 'number | number[]', + defaultValue: '—', + required: true, + description: text( + 'Current mono or stereo level in dB, expected between -60 and 5.', + '当前单声道或立体声音量(dB),预期范围为 -60 到 5。', + ), + }, + { + name: 'horizontal', + type: 'boolean', + defaultValue: 'false', + description: text('Lays the meter out horizontally.', '横向排列电平表。'), + }, + { + name: 'compact', + type: 'boolean', + defaultValue: 'false', + description: text('Reduces spacing between meter parts.', '减小电平表各部分之间的间距。'), + }, + { + name: 'lumpsQuantity', + type: 'number', + defaultValue: '30', + description: text( + 'Number of illuminated segments per channel.', + '每个声道的发光分段数量。', + ), + }, + { + name: 'hideAxis', + type: 'boolean', + defaultValue: 'false', + description: text('Hides the decibel axis.', '隐藏分贝坐标轴。'), + }, + { + name: 'axisProps', + type: "Omit", + defaultValue: '—', + description: text( + 'Configures ticks and orientation on the built-in axis.', + '配置内置坐标轴的刻度与方向。', + ), + }, + { + name: 'classNames', + type: '{ axis?: string; lump?: string; lumps?: string }', + defaultValue: '—', + description: text('Classes for named meter slots.', '电平表命名插槽的类名。'), + }, + { + name: 'styles', + type: '{ axis?: CSSProperties; lump?: CSSProperties; lumps?: CSSProperties }', + defaultValue: '—', + description: text('Inline styles for named meter slots.', '电平表命名插槽的行内样式。'), + }, + { + name: 'onChange', + type: '(value: number | number[]) => void', + defaultValue: '—', + description: text('Runs when the supplied value changes.', '传入值变化时调用。'), + }, + ], + }, + }, + waveform: { + main: { + name: 'Waveform', + inherited: text( + 'Also accepts React.HTMLAttributes except native onClick and onMouseMove. Mono arrays are mirrored; a two-array value draws stereo data.', + '同时接受除原生 onClick 与 onMouseMove 外的 React.HTMLAttributes。单数组会镜像绘制,双数组用于立体声数据。', + ), + rows: [ + { + name: 'data', + type: 'number[] | number[][]', + defaultValue: '—', + required: true, + description: text('Normalized waveform peak samples.', '归一化的波形峰值采样。'), + }, + { + name: 'audioDuration', + type: 'number', + defaultValue: '—', + required: true, + description: text( + 'Audio duration in seconds for cursor labels and seek events.', + '用于光标标签与定位事件的音频时长(秒)。', + ), + }, + { + name: 'percentage', + type: 'number', + defaultValue: '0', + description: text( + 'Controlled playback or selection progress from 0 to 100.', + '0 到 100 的受控播放或选区进度。', + ), + }, + { + name: 'hideCursor', + type: 'boolean', + defaultValue: 'false', + description: text('Hides the hover cursor.', '隐藏悬停光标。'), + }, + { + name: 'cursorWidth', + type: 'number', + defaultValue: '2', + description: text('Cursor width in pixels.', '光标宽度(像素)。'), + }, + { + name: 'cursorColor', + type: 'string', + defaultValue: 'var(--echo-muted-foreground)', + description: text( + 'CSS color for the hover cursor and label.', + '悬停光标与标签使用的 CSS 颜色。', + ), + }, + { + name: 'hideCursorLabel', + type: 'boolean', + defaultValue: 'false', + description: text('Hides the cursor time label.', '隐藏光标时间标签。'), + }, + { + name: 'disableAnimation', + type: 'boolean', + defaultValue: 'false', + description: text('Disables the initial waveform reveal.', '禁用波形首次显示动画。'), + }, + { + name: 'animationDuration', + type: 'number', + defaultValue: '300', + description: text( + 'Initial reveal duration in milliseconds.', + '首次显示动画时长(毫秒)。', + ), + }, + { + name: 'waveHeight', + type: 'number', + defaultValue: '100', + description: text( + 'Wave height as a percentage of the container.', + '波形高度占容器的百分比。', + ), + }, + { + name: 'waveColor', + type: 'string', + defaultValue: 'var(--echo-wave)', + description: text('CSS color for unplayed audio.', '未播放音频使用的 CSS 颜色。'), + }, + { + name: 'maskColor', + type: 'string', + defaultValue: 'var(--echo-primary)', + description: text('CSS color for the played portion.', '已播放部分使用的 CSS 颜色。'), + }, + { + name: 'onClick', + type: '(event: WaveformMouseEvent) => void', + defaultValue: '—', + description: text( + 'Reports time, percentage, and native event when seeking.', + '定位时返回时间、百分比与原生事件。', + ), + }, + { + name: 'onMouseMove', + type: '(event: WaveformMouseEvent) => void', + defaultValue: '—', + description: text( + 'Reports the hovered time and percentage.', + '返回悬停位置的时间与百分比。', + ), + }, + { + name: 'onMouseLeave', + type: '(event: React.MouseEvent) => void', + defaultValue: '—', + description: text('Runs when the pointer leaves the waveform.', '指针离开波形时调用。'), + }, + ], + }, + }, + card: { + main: { + name: 'Card', + inherited: text( + 'Also accepts React.HTMLAttributes. Card is a compound component with Header and Body layout slots.', + '同时接受 React.HTMLAttributes。Card 是包含 Header 与 Body 布局插槽的复合组件。', + ), + rows: [ + { + name: 'toggled', + type: 'boolean', + defaultValue: 'false', + description: text( + 'Controls the highlighted border and data-toggled attribute.', + '控制高亮边框与 data-toggled 属性。', + ), + }, + ], + }, + compound: [ + { + name: 'Card.Header', + inherited: text( + 'Accepts React.HTMLAttributes.', + '接受 React.HTMLAttributes。', + ), + rows: [], + }, + { + name: 'Card.Body', + inherited: text( + 'Accepts React.HTMLAttributes.', + '接受 React.HTMLAttributes。', + ), + rows: [], + }, + ], + }, +} + +type DisplayApiProps = Readonly<{ + display: DisplayName + lang: Locale +}> + +export const DisplayApi: FC = ({ display, lang }) => { + const definition = definitions[display] + + return ( +
+ + {definition.compound?.map((section) => ( + + ))} +
+ ) +} diff --git a/docs-nextra/app/_components/display-audio-graph.ts b/docs-nextra/app/_components/display-audio-graph.ts new file mode 100644 index 00000000..5649a0ea --- /dev/null +++ b/docs-nextra/app/_components/display-audio-graph.ts @@ -0,0 +1,286 @@ +'use client' + +import type { OscilloscopeDataPoint, SpectrogramDataPoint } from '@nafr/echo-ui' +import { useCallback, useEffect, useRef, useState } from 'react' +import type { DisplayName } from './display-api' +import type { AudioStatus } from './display-demo-frame' + +export type AudioDisplayName = Exclude + +export type AudioFrame = Readonly<{ + duration: number + level: number + oscilloscope: OscilloscopeDataPoint[] + percentage: number + spectrum: SpectrogramDataPoint[] + waveform: number[][] +}> + +const emptyFrame: AudioFrame = { + duration: 0, + level: -60, + oscilloscope: [], + percentage: 0, + spectrum: [], + waveform: [], +} + +const sampleModeByDisplay: Record< + AudioDisplayName, + 'level' | 'spectrum' | 'time-domain' | 'waveform' +> = { + light: 'level', + oscilloscope: 'time-domain', + spectrogram: 'spectrum', + vumeter: 'level', + waveform: 'waveform', +} + +const basePath = process.env.NEXT_PUBLIC_DOCS_BASE_PATH ?? '' +export const demoAudioUrl = `${basePath}/audios/demo-loop.mp3` + +const simplifyChannel = (data: Float32Array, samples = 320) => { + const blockSize = Math.max(1, Math.floor(data.length / samples)) + return Array.from({ length: samples }, (_, index) => { + let peak = 0 + const start = index * blockSize + const end = Math.min(start + blockSize, data.length) + for (let cursor = start; cursor < end; cursor += 1) { + peak = Math.max(peak, Math.abs(data[cursor])) + } + return peak + }) +} + +const decodeWaveform = async (context: AudioContext) => { + const response = await fetch(demoAudioUrl) + if (!response.ok) throw new Error(`Audio request failed with ${response.status}`) + const buffer = await context.decodeAudioData(await response.arrayBuffer()) + const channels = Array.from({ length: Math.min(2, buffer.numberOfChannels) }, (_, channel) => + simplifyChannel(buffer.getChannelData(channel)), + ) + if (channels.length === 1) channels.push([...channels[0]]) + return { data: channels, duration: buffer.duration } +} + +export const useAudioGraph = (display: AudioDisplayName) => { + const mode = sampleModeByDisplay[display] + const audioRef = useRef(null) + const analyserRef = useRef(null) + const contextRef = useRef(null) + const sourceRef = useRef(null) + const connectedRef = useRef(false) + const frameIdRef = useRef(0) + const lastFrameTimeRef = useRef(0) + const waveformLoadedRef = useRef(false) + const [active, setActive] = useState(false) + const [connected, setConnected] = useState(false) + const [connectionCount, setConnectionCount] = useState(0) + const [frame, setFrame] = useState(emptyFrame) + const [status, setStatus] = useState('idle') + + const cancelFrames = useCallback((reset = false) => { + if (frameIdRef.current) cancelAnimationFrame(frameIdRef.current) + frameIdRef.current = 0 + lastFrameTimeRef.current = 0 + setActive(false) + if (reset) { + setFrame((current) => ({ + ...emptyFrame, + duration: current.duration, + waveform: current.waveform, + })) + } + }, []) + + const readFrame = useCallback( + (timestamp: number) => { + const analyser = analyserRef.current + const audio = audioRef.current + if (!analyser || !audio) return + + if (timestamp - lastFrameTimeRef.current >= 32) { + lastFrameTimeRef.current = timestamp + const duration = Number.isFinite(audio.duration) ? audio.duration : frame.duration + const percentage = duration > 0 ? (audio.currentTime / duration) * 100 : 0 + + if (mode === 'spectrum') { + const values = new Float32Array(analyser.frequencyBinCount) + analyser.getFloatFrequencyData(values) + setFrame((current) => ({ + ...current, + duration, + percentage, + spectrum: Array.from(values, (amplitude, frequency) => ({ + amplitude: Number.isFinite(amplitude) ? amplitude : -100, + frequency, + })), + })) + } else if (mode === 'time-domain') { + const values = new Float32Array(analyser.fftSize) + analyser.getFloatTimeDomainData(values) + setFrame((current) => ({ + ...current, + duration, + percentage, + oscilloscope: Array.from(values, (amplitude, index) => ({ amplitude, index })), + })) + } else if (mode === 'level') { + const values = new Float32Array(analyser.fftSize) + analyser.getFloatTimeDomainData(values) + const rms = Math.sqrt( + values.reduce((sum, value) => sum + value * value, 0) / values.length, + ) + const level = Math.max(-60, Math.min(5, rms > 0 ? 20 * Math.log10(rms) : -60)) + setFrame((current) => ({ ...current, duration, level, percentage })) + } else { + setFrame((current) => ({ ...current, duration, percentage })) + } + } + + frameIdRef.current = requestAnimationFrame(readFrame) + }, + [frame.duration, mode], + ) + + const startFrames = useCallback(() => { + if (frameIdRef.current) cancelAnimationFrame(frameIdRef.current) + setActive(true) + frameIdRef.current = requestAnimationFrame(readFrame) + }, [readFrame]) + + const connect = useCallback(async () => { + const audio = audioRef.current + if (!audio) throw new Error('Audio element is unavailable') + + setStatus('connecting') + let context = contextRef.current + if (!context || context.state === 'closed') { + context = new AudioContext() + contextRef.current = context + } + + if (!sourceRef.current) sourceRef.current = context.createMediaElementSource(audio) + if (!analyserRef.current) { + analyserRef.current = context.createAnalyser() + analyserRef.current.fftSize = 1024 + analyserRef.current.smoothingTimeConstant = 0.78 + } + + if (!connectedRef.current) { + sourceRef.current.connect(analyserRef.current) + analyserRef.current.connect(context.destination) + connectedRef.current = true + setConnected(true) + setConnectionCount((count) => count + 1) + } + + await context.resume() + + if (mode === 'waveform' && !waveformLoadedRef.current) { + const waveform = await decodeWaveform(context) + waveformLoadedRef.current = true + setFrame((current) => ({ + ...current, + duration: waveform.duration, + waveform: waveform.data, + })) + } + + setStatus('ready') + }, [mode]) + + const disconnect = useCallback(async () => { + if (connectedRef.current) { + sourceRef.current?.disconnect() + analyserRef.current?.disconnect() + connectedRef.current = false + setConnected(false) + } + const context = contextRef.current + if (context?.state === 'running') { + try { + await context.suspend() + } catch { + // A concurrent teardown may have already closed the context. + } + } + }, []) + + const start = useCallback(async () => { + try { + await connect() + const audio = audioRef.current + if (!audio) return + if (audio.ended) audio.currentTime = 0 + audio.loop = true + await audio.play() + startFrames() + setStatus('playing') + } catch { + cancelFrames() + await disconnect() + setStatus('error') + } + }, [cancelFrames, connect, disconnect, startFrames]) + + const stop = useCallback(async () => { + const audio = audioRef.current + if (audio) { + audio.pause() + audio.currentTime = 0 + } + cancelFrames(true) + await disconnect() + setStatus('stopped') + }, [cancelFrames, disconnect]) + + const reconnect = useCallback(async () => { + try { + audioRef.current?.pause() + cancelFrames(true) + await disconnect() + await connect() + } catch { + cancelFrames(true) + await disconnect() + setStatus('error') + } + }, [cancelFrames, connect, disconnect]) + + const seek = useCallback((time: number) => { + const audio = audioRef.current + if (!audio || !Number.isFinite(audio.duration)) return + audio.currentTime = Math.max(0, Math.min(time, audio.duration)) + setFrame((current) => ({ + ...current, + percentage: (audio.currentTime / audio.duration) * 100, + })) + }, []) + + useEffect(() => { + const audio = audioRef.current + return () => { + audio?.pause() + if (frameIdRef.current) cancelAnimationFrame(frameIdRef.current) + sourceRef.current?.disconnect() + analyserRef.current?.disconnect() + connectedRef.current = false + const context = contextRef.current + if (context && context.state !== 'closed') void context.close() + } + }, []) + + return { + active, + audioRef, + connected, + connectionCount, + frame, + reconnect, + seek, + start, + status, + stop, + } +} diff --git a/docs-nextra/app/_components/display-card-demo.tsx b/docs-nextra/app/_components/display-card-demo.tsx new file mode 100644 index 00000000..7d29819f --- /dev/null +++ b/docs-nextra/app/_components/display-card-demo.tsx @@ -0,0 +1,58 @@ +'use client' + +import { Card, Light } from '@nafr/echo-ui' +import type { FC } from 'react' +import { useState } from 'react' +import { DemoFrame, type Locale } from './display-demo-frame' +import styles from './display-docs.module.css' + +export const CardDemo: FC<{ lang: Locale }> = ({ lang }) => { + const [enabled, setEnabled] = useState(true) + const [mix, setMix] = useState(38) + + return ( + +
+ + + + {lang === 'zh' ? '磁带延迟' : 'Tape delay'} + + + + + + +
+
+ ) +} diff --git a/docs-nextra/app/_components/display-demo-frame.tsx b/docs-nextra/app/_components/display-demo-frame.tsx new file mode 100644 index 00000000..84c73d3a --- /dev/null +++ b/docs-nextra/app/_components/display-demo-frame.tsx @@ -0,0 +1,87 @@ +'use client' + +import type { FC, ReactNode } from 'react' +import type { DisplayName } from './display-api' +import styles from './display-docs.module.css' + +export type Locale = 'en' | 'zh' +export type AudioStatus = 'idle' | 'connecting' | 'ready' | 'playing' | 'stopped' | 'error' + +export const demoCopy = { + en: { + connectError: 'The audio graph could not start. Reload the page and try again.', + connected: 'Signal graph ready', + connecting: 'Connecting signal graph', + idle: 'Signal graph idle', + live: 'Live input', + playing: 'Live signal running', + reconnect: 'Reconnect graph', + start: 'Start signal', + stop: 'Stop signal', + stopped: 'Signal stopped', + }, + zh: { + connectError: '音频图无法启动。请重新加载页面后重试。', + connected: '信号图已就绪', + connecting: '正在连接信号图', + idle: '信号图空闲', + live: '实时输入', + playing: '实时信号运行中', + reconnect: '重新连接音频图', + start: '启动信号', + stop: '停止信号', + stopped: '信号已停止', + }, +} as const + +export const getStatusText = (status: AudioStatus, lang: Locale) => { + const labels = demoCopy[lang] + if (status === 'connecting') return labels.connecting + if (status === 'ready') return labels.connected + if (status === 'playing') return labels.playing + if (status === 'stopped') return labels.stopped + if (status === 'error') return labels.connectError + return labels.idle +} + +type DemoFrameProps = Readonly<{ + active?: boolean + children: ReactNode + connected?: boolean + connectionCount?: number + display: DisplayName + lang: Locale + status: string + statusCode?: string +}> + +export const DemoFrame: FC = ({ + active = false, + children, + connected = false, + connectionCount = 0, + display, + lang, + status, + statusCode = 'not-applicable', +}) => ( +
+
+ + + {demoCopy[lang].live} + +

+ {status} +

+
+ {children} +
+) diff --git a/docs-nextra/app/_components/display-demo.tsx b/docs-nextra/app/_components/display-demo.tsx new file mode 100644 index 00000000..73c12354 --- /dev/null +++ b/docs-nextra/app/_components/display-demo.tsx @@ -0,0 +1,179 @@ +'use client' + +import { + Light, + Oscilloscope, + Spectrogram, + VuMeter, + Waveform, + type WaveformMouseEvent, +} from '@nafr/echo-ui' +import type { FC, RefObject } from 'react' +import type { DisplayName } from './display-api' +import { + demoAudioUrl, + useAudioGraph, + type AudioDisplayName, + type AudioFrame, +} from './display-audio-graph' +import { CardDemo } from './display-card-demo' +import { + DemoFrame, + demoCopy, + getStatusText, + type AudioStatus, + type Locale, +} from './display-demo-frame' +import styles from './display-docs.module.css' +import { LfoDemo } from './display-lfo-demo' + +type AudioVisualizationProps = Readonly<{ + active: boolean + frame: AudioFrame + lang: Locale + seek: (time: number) => void +}> + +const OscilloscopeVisualization: FC = ({ frame, lang }) => ( + +) + +const SpectrogramVisualization: FC = ({ frame, lang }) => ( + +) + +const VuMeterVisualization: FC = ({ frame }) => ( +
+ + {frame.level.toFixed(1)} dB +
+) + +const LightVisualization: FC = ({ active, frame }) => ( +
+ -42} size="2rem" /> + {active ? frame.level.toFixed(1) : '−∞'} dB +
+) + +const WaveformVisualization: FC = ({ frame, lang, seek }) => { + const handleClick = (event: WaveformMouseEvent) => seek(event.time) + return ( + + ) +} + +const visualizations: Record> = { + light: LightVisualization, + oscilloscope: OscilloscopeVisualization, + spectrogram: SpectrogramVisualization, + vumeter: VuMeterVisualization, + waveform: WaveformVisualization, +} + +type AudioControlsProps = Readonly<{ + audioRef: RefObject + lang: Locale + reconnect: () => Promise + start: () => Promise + status: AudioStatus + stop: () => Promise +}> + +const AudioControls: FC = ({ + audioRef, + lang, + reconnect, + start, + status, + stop, +}) => { + const labels = demoCopy[lang] + const busy = status === 'connecting' + + return ( +
+
+ ) +} + +const AudioDisplayDemo: FC<{ display: AudioDisplayName; lang: Locale }> = ({ display, lang }) => { + const graph = useAudioGraph(display) + const Visualization = visualizations[display] + + return ( + +
+
+ +
+ +
+
+ ) +} + +type DisplayDemoProps = Readonly<{ + display: DisplayName + lang: Locale +}> + +export const DisplayDemo: FC = ({ display, lang }) => { + if (display === 'lfo') return + if (display === 'card') return + return +} diff --git a/docs-nextra/app/_components/display-docs.module.css b/docs-nextra/app/_components/display-docs.module.css new file mode 100644 index 00000000..e48cb1e2 --- /dev/null +++ b/docs-nextra/app/_components/display-docs.module.css @@ -0,0 +1,324 @@ +.demo { + --lab-accent: oklch(69% 0.17 66); + --lab-border: oklch(84% 0.035 72); + --lab-ink: oklch(27% 0.03 66); + --lab-muted: oklch(45% 0.025 68); + --lab-panel: oklch(96% 0.018 76); + background: var(--lab-panel); + border: 1px solid var(--lab-border); + border-radius: 0.8rem; + container-type: inline-size; + margin-block: 1.5rem 2rem; + overflow: clip; +} + +.demoHeader { + align-items: center; + background: linear-gradient(90deg, oklch(92% 0.035 72), oklch(97% 0.014 76)), var(--lab-panel); + border-bottom: 1px solid var(--lab-border); + display: flex; + gap: 1rem; + justify-content: space-between; + min-height: 3rem; + padding: 0.65rem clamp(0.85rem, 3cqi, 1.25rem); +} + +.signalLabel { + align-items: center; + color: var(--lab-ink); + display: inline-flex; + font-size: 0.72rem; + font-weight: 800; + gap: 0.55rem; + letter-spacing: 0.11em; + text-transform: uppercase; +} + +.signalDot { + background: oklch(68% 0.035 70); + border: 1px solid oklch(55% 0.04 70); + border-radius: 50%; + display: inline-block; + height: 0.58rem; + transition: + background-color 140ms cubic-bezier(0.25, 1, 0.5, 1), + box-shadow 140ms cubic-bezier(0.25, 1, 0.5, 1); + width: 0.58rem; +} + +.signalDot[data-active='true'] { + background: oklch(72% 0.18 64); + box-shadow: 0 0 0.45rem oklch(72% 0.18 64); +} + +.demoStatus { + color: var(--lab-muted); + font-size: 0.82rem; + font-variant-numeric: tabular-nums; + line-height: 1.4; + margin: 0; + text-align: right; +} + +.instrument { + display: grid; + gap: clamp(1rem, 3cqi, 1.5rem); + padding: clamp(1rem, 5cqi, 2.25rem); +} + +.readout { + align-items: center; + background: + linear-gradient(oklch(20% 0.025 68 / 96%), oklch(20% 0.025 68 / 96%)), + repeating-linear-gradient(0deg, transparent 0, transparent 19px, oklch(78% 0.06 68 / 15%) 20px), + repeating-linear-gradient(90deg, transparent 0, transparent 19px, oklch(78% 0.06 68 / 15%) 20px); + border: 1px solid oklch(34% 0.035 68); + border-radius: 0.45rem; + box-shadow: inset 0 0 0 1px oklch(13% 0.015 68); + display: flex; + justify-content: center; + min-height: clamp(11rem, 36cqi, 17rem); + overflow: hidden; + padding: clamp(0.75rem, 3cqi, 1.25rem); + position: relative; +} + +.chart, +.waveform, +.lfo { + color: oklch(84% 0.14 82); + height: clamp(9rem, 30cqi, 14rem); + width: 100%; +} + +.waveform { + height: 9rem; +} + +.meter { + align-items: center; + color: oklch(89% 0.04 78); + display: grid; + gap: 1.25rem; + justify-items: center; + width: min(100%, 35rem); +} + +.meter > div { + max-width: 31rem; + width: 100%; +} + +.levelValue, +.lightReadout output { + color: oklch(84% 0.08 78); + font-size: 0.82rem; + font-variant-numeric: tabular-nums; + letter-spacing: 0.06em; +} + +.lightReadout { + align-items: center; + display: grid; + gap: 1rem; + justify-items: center; +} + +.controls { + align-items: center; + display: flex; + flex-wrap: wrap; + gap: 0.55rem; +} + +.controls audio { + display: none; +} + +.action, +.primaryAction, +.cardToggle { + align-items: center; + border: 1px solid oklch(68% 0.045 70); + border-radius: 0.35rem; + cursor: pointer; + display: inline-flex; + font: inherit; + font-size: 0.82rem; + font-weight: 750; + justify-content: center; + min-height: 2.75rem; + padding: 0.55rem 0.85rem; + transition: + background-color 140ms cubic-bezier(0.25, 1, 0.5, 1), + border-color 140ms cubic-bezier(0.25, 1, 0.5, 1), + transform 100ms cubic-bezier(0.65, 0, 0.35, 1); +} + +.action { + background: oklch(93% 0.018 72); + color: var(--lab-ink); +} + +.primaryAction { + background: var(--lab-accent); + border-color: oklch(58% 0.14 62); + color: oklch(20% 0.045 62); +} + +.action:active, +.primaryAction:active, +.cardToggle:active { + transform: translateY(1px); +} + +.action:focus-visible, +.primaryAction:focus-visible, +.cardToggle:focus-visible, +.parameterGrid input:focus-visible, +.parameterGrid select:focus-visible, +.mixControl input:focus-visible { + outline: 2px solid oklch(58% 0.17 60); + outline-offset: 2px; +} + +.action:disabled, +.primaryAction:disabled { + cursor: not-allowed; + opacity: 0.48; +} + +.parameterGrid { + display: grid; + gap: 0.85rem; + grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr)); +} + +.parameterGrid label, +.mixControl { + color: var(--lab-ink); + display: grid; + font-size: 0.78rem; + font-weight: 700; + gap: 0.4rem; +} + +.parameterGrid input, +.parameterGrid select, +.mixControl input { + accent-color: var(--lab-accent); + min-height: 2.25rem; + width: 100%; +} + +.parameterGrid select { + background: oklch(98% 0.01 75); + border: 1px solid oklch(70% 0.04 72); + border-radius: 0.35rem; + color: var(--lab-ink); + font: inherit; + padding: 0.4rem 0.5rem; +} + +.cardStage { + background: + radial-gradient(circle at 1px 1px, oklch(68% 0.045 72) 1px, transparent 0), oklch(93% 0.018 74); + background-size: 1rem 1rem; + padding: clamp(1.25rem, 6cqi, 3rem); +} + +.effectCard { + margin-inline: auto; + max-width: 30rem; +} + +.effectCard > div:first-child { + gap: 0.65rem; +} + +.effectCard > div:first-child > span:nth-child(2) { + flex: 1; +} + +.cardToggle { + background: transparent; + color: inherit; + margin-left: auto; + min-height: 2.5rem; +} + +.mixControl { + gap: 0.65rem; + grid-template-columns: 1fr auto; + padding-block: 0.75rem; +} + +.mixControl input { + grid-column: 1 / -1; +} + +:global(.dark) .demo { + --lab-border: oklch(34% 0.03 70); + --lab-ink: oklch(89% 0.025 75); + --lab-muted: oklch(72% 0.028 73); + --lab-panel: oklch(20% 0.015 70); +} + +:global(.dark) .demoHeader { + background: linear-gradient(90deg, oklch(24% 0.03 70), oklch(20% 0.015 70)); +} + +:global(.dark) .action, +:global(.dark) .parameterGrid select { + background: oklch(27% 0.02 70); + border-color: oklch(43% 0.035 70); + color: var(--lab-ink); +} + +:global(.dark) .cardStage { + background: + radial-gradient(circle at 1px 1px, oklch(43% 0.035 70) 1px, transparent 0), oklch(17% 0.012 70); + background-size: 1rem 1rem; +} + +@media (hover: hover) { + .action:not(:disabled):hover, + .cardToggle:hover { + background: oklch(88% 0.03 72); + border-color: oklch(55% 0.06 68); + } + + .primaryAction:not(:disabled):hover { + background: oklch(74% 0.18 66); + } + + :global(.dark) .action:not(:disabled):hover, + :global(.dark) .cardToggle:hover { + background: oklch(32% 0.035 70); + } +} + +@container (max-width: 34rem) { + .demoHeader { + align-items: flex-start; + flex-direction: column; + gap: 0.3rem; + } + + .demoStatus { + text-align: left; + } + + .controls > button { + flex: 1 1 9rem; + } +} + +@media (prefers-reduced-motion: reduce) { + .demo *, + .demo *::before, + .demo *::after { + scroll-behavior: auto !important; + transition-duration: 0.01ms !important; + } +} diff --git a/docs-nextra/app/_components/display-lfo-demo.tsx b/docs-nextra/app/_components/display-lfo-demo.tsx new file mode 100644 index 00000000..159cd8f3 --- /dev/null +++ b/docs-nextra/app/_components/display-lfo-demo.tsx @@ -0,0 +1,203 @@ +'use client' + +import { LFO, type LFOProps } from '@nafr/echo-ui' +import type { FC } from 'react' +import { useCallback, useEffect, useRef, useState } from 'react' +import { + DemoFrame, + demoCopy, + getStatusText, + type AudioStatus, + type Locale, +} from './display-demo-frame' +import styles from './display-docs.module.css' + +type LfoNodes = Readonly<{ + carrier: OscillatorNode + depth: GainNode + modulator: OscillatorNode + output: GainNode +}> + +export const LfoDemo: FC<{ lang: Locale }> = ({ lang }) => { + const [amplitude, setAmplitude] = useState(0.55) + const [connectionCount, setConnectionCount] = useState(0) + const [frequency, setFrequency] = useState(3) + const [status, setStatus] = useState('idle') + const [type, setType] = useState('sine') + const contextRef = useRef(null) + const nodesRef = useRef(null) + + const stopNodes = useCallback(() => { + const nodes = nodesRef.current + if (!nodes) return + try { + nodes.carrier.stop() + nodes.modulator.stop() + } catch { + // Oscillators may already be stopped during strict-mode cleanup. + } + nodes.carrier.disconnect() + nodes.modulator.disconnect() + nodes.depth.disconnect() + nodes.output.disconnect() + nodesRef.current = null + }, []) + + const ensureContext = useCallback(async () => { + let context = contextRef.current + if (!context || context.state === 'closed') { + context = new AudioContext() + contextRef.current = context + setConnectionCount((count) => count + 1) + } + await context.resume() + return context + }, []) + + const closeContext = useCallback(async () => { + const context = contextRef.current + contextRef.current = null + if (context && context.state !== 'closed') await context.close() + }, []) + + const createNodes = useCallback( + (context: AudioContext) => { + const carrier = context.createOscillator() + const modulator = context.createOscillator() + const depth = context.createGain() + const output = context.createGain() + carrier.frequency.value = 220 + modulator.frequency.value = frequency + modulator.type = type ?? 'sine' + depth.gain.value = amplitude * 42 + output.gain.value = 0.035 + modulator.connect(depth).connect(carrier.frequency) + carrier.connect(output).connect(context.destination) + const nodes = { carrier, depth, modulator, output } + nodesRef.current = nodes + return nodes + }, + [amplitude, frequency, type], + ) + + const start = useCallback(async () => { + try { + stopNodes() + const nodes = createNodes(await ensureContext()) + nodes.carrier.start() + nodes.modulator.start() + setStatus('playing') + } catch { + stopNodes() + setStatus('error') + } + }, [createNodes, ensureContext, stopNodes]) + + const stop = useCallback(async () => { + stopNodes() + const context = contextRef.current + if (context?.state === 'running') await context.suspend() + setStatus('stopped') + }, [stopNodes]) + + const reconnect = useCallback(async () => { + try { + stopNodes() + await closeContext() + createNodes(await ensureContext()) + setStatus('ready') + } catch { + stopNodes() + try { + await closeContext() + } catch { + // The context may already be closing after a failed resume. + } + setStatus('error') + } + }, [closeContext, createNodes, ensureContext, stopNodes]) + + useEffect(() => { + const nodes = nodesRef.current + if (!nodes) return + nodes.modulator.frequency.value = frequency + nodes.modulator.type = type ?? 'sine' + nodes.depth.gain.value = amplitude * 42 + }, [amplitude, frequency, type]) + + useEffect( + () => () => { + stopNodes() + void closeContext() + }, + [closeContext, stopNodes], + ) + + return ( + +
+
+ +
+
+ + + +
+
+ + + +
+
+
+ ) +} diff --git a/docs-nextra/content/en/_meta.ts b/docs-nextra/content/en/_meta.ts index 7095cc89..169f0836 100644 --- a/docs-nextra/content/en/_meta.ts +++ b/docs-nextra/content/en/_meta.ts @@ -21,7 +21,7 @@ const meta: MetaRecord = { }, component: { href: '/en/component/button/', - title: 'Controllers', + title: 'Components', type: 'page', }, community: { diff --git a/docs-nextra/content/en/component/_meta.ts b/docs-nextra/content/en/component/_meta.ts index 9390ac77..a36d601d 100644 --- a/docs-nextra/content/en/component/_meta.ts +++ b/docs-nextra/content/en/component/_meta.ts @@ -9,6 +9,21 @@ const meta: MetaRecord = { radio: 'Radio', slider: 'Slider', switch: 'Switch', + visualizations: { + title: 'Visualizations', + type: 'separator', + }, + lfo: 'LFO', + light: 'Light', + oscilloscope: 'Oscilloscope', + spectrogram: 'Spectrogram', + vumeter: 'VU Meter', + waveform: 'Waveform', + containers: { + title: 'Containers', + type: 'separator', + }, + card: 'Card', } export default meta diff --git a/docs-nextra/content/en/component/card.mdx b/docs-nextra/content/en/component/card.mdx new file mode 100644 index 00000000..f51dd974 --- /dev/null +++ b/docs-nextra/content/en/component/card.mdx @@ -0,0 +1,43 @@ +--- +title: Card +description: Group related audio controls and status with Echo UI's compound Card container. +--- + +import { DisplayApi } from '@/app/_components/display-api' +import { DisplayDemo } from '@/app/_components/display-demo' +import { InstallPackage } from '@/app/_components/install-package' + +# Card + +`Card` groups a titled set of controls. Its `Header` and `Body` slots provide structure, while `toggled` highlights an active processor or channel. + + + +```tsx +import '@nafr/echo-ui/style.css' +import { Card } from '@nafr/echo-ui' +``` + +## Interactive effect card + + + +## Compose the slots + +```tsx + + + + Tape delay + + + + + +``` + +`toggled` is visual state, not interaction behavior. Keep activation in an accessible button, switch, or checkbox and synchronize the card from application state. + +## API + + diff --git a/docs-nextra/content/en/component/lfo.mdx b/docs-nextra/content/en/component/lfo.mdx new file mode 100644 index 00000000..49c91a2f --- /dev/null +++ b/docs-nextra/content/en/component/lfo.mdx @@ -0,0 +1,50 @@ +--- +title: LFO +description: Preview low-frequency modulation shapes and connect them to a real Web Audio signal. +--- + +import { DisplayApi } from '@/app/_components/display-api' +import { DisplayDemo } from '@/app/_components/display-demo' +import { InstallPackage } from '@/app/_components/install-package' + +# LFO + +`LFO` draws a low-frequency modulation shape. It is a visualization rather than an audio node, so your application owns the Web Audio graph that the shape describes. + + + +```tsx +import '@nafr/echo-ui/style.css' +import { LFO } from '@nafr/echo-ui' +``` + +## Live Web Audio example + +The controls below drive both the graph and a real oscillator-modulation chain. Start, stop, and reconnect create and release restart-safe oscillator nodes. + + + +## Customize the shape + +`amplitude` is normalized from `0` to `1`; `delay` is clamped to `0–1000` milliseconds. Give the parent an explicit height because the graph fills its container. + +```tsx +
+ +
+``` + +## Lifecycle and accessibility + +Create oscillators only after a user gesture. An `OscillatorNode` cannot be restarted after `stop()`, so build a fresh node pair for each start and disconnect every node on stop or unmount. `LFO` is presentational; label the controls that change the audible modulation and expose the current values as text. + +## API + + diff --git a/docs-nextra/content/en/component/light.mdx b/docs-nextra/content/en/component/light.mdx new file mode 100644 index 00000000..08eacebd --- /dev/null +++ b/docs-nextra/content/en/component/light.mdx @@ -0,0 +1,39 @@ +--- +title: Light +description: Show audio and application state with Echo UI's compact indicator light. +--- + +import { DisplayApi } from '@/app/_components/display-api' +import { DisplayDemo } from '@/app/_components/display-demo' +import { InstallPackage } from '@/app/_components/install-package' + +# Light + +`Light` is a compact visual indicator for signal, bypass, recording, and connection states. + + + +```tsx +import '@nafr/echo-ui/style.css' +import { Light } from '@nafr/echo-ui' +``` + +## Live Web Audio example + +This indicator is driven by the RMS level of a real `AnalyserNode`, rather than a timer or random placeholder. + + + +## Color and size + +```tsx +
+ +
+``` + +Color alone should never carry the state. Pair the light with visible text or an accessible label, and choose a color with sufficient contrast against its surrounding surface. + +## API + + diff --git a/docs-nextra/content/en/component/oscilloscope.mdx b/docs-nextra/content/en/component/oscilloscope.mdx new file mode 100644 index 00000000..57e71e53 --- /dev/null +++ b/docs-nextra/content/en/component/oscilloscope.mdx @@ -0,0 +1,45 @@ +--- +title: Oscilloscope +description: Render live time-domain audio samples with Echo UI Oscilloscope. +--- + +import { DisplayApi } from '@/app/_components/display-api' +import { DisplayDemo } from '@/app/_components/display-demo' +import { InstallPackage } from '@/app/_components/install-package' + +# Oscilloscope + +`Oscilloscope` plots indexed amplitude samples, making it suitable for real-time `AnalyserNode` time-domain data. + + + +```tsx +import '@nafr/echo-ui/style.css' +import { Oscilloscope, type OscilloscopeDataPoint } from '@nafr/echo-ui' +``` + +## Live Web Audio example + +Start the bundled audio loop, stop its animation work, then reconnect the same media source through a fresh graph connection. + + + +## Convert analyser data + +```tsx +const samples = new Float32Array(analyser.fftSize) +analyser.getFloatTimeDomainData(samples) + +const data: OscilloscopeDataPoint[] = Array.from( + samples, + (amplitude, index) => ({ amplitude, index }), +) + + +``` + +Run one animation loop per graph. Cancel it before stopping or reconnecting, disconnect the source and analyser on unmount, and avoid updating React state after cleanup. + +## API + + diff --git a/docs-nextra/content/en/component/spectrogram.mdx b/docs-nextra/content/en/component/spectrogram.mdx new file mode 100644 index 00000000..b9255827 --- /dev/null +++ b/docs-nextra/content/en/component/spectrogram.mdx @@ -0,0 +1,47 @@ +--- +title: Spectrogram +description: Plot live FFT data with logarithmic frequency axes, grids, and spectrum fills. +--- + +import { DisplayApi } from '@/app/_components/display-api' +import { DisplayDemo } from '@/app/_components/display-demo' +import { InstallPackage } from '@/app/_components/install-package' + +# Spectrogram + +`Spectrogram` renders one FFT frame as a logarithmic frequency spectrum. Axis, grid, and shadow layers can be enabled independently. + + + +```tsx +import '@nafr/echo-ui/style.css' +import { Spectrogram, type SpectrogramDataPoint } from '@nafr/echo-ui' +``` + +## Live Web Audio example + +The trace below comes from `AnalyserNode.getFloatFrequencyData()` and is cleared when observation stops. + + + +## Axis, grid, and fill + +```tsx + +``` + +Pass decibel values for each frequency bin. Despite its historical name, the component's `fftSize` prop is the number of bins used for frequency mapping. For native Web Audio data, pass `analyser.frequencyBinCount` (the same value as `data.length`). + +## API + + diff --git a/docs-nextra/content/en/component/vumeter.mdx b/docs-nextra/content/en/component/vumeter.mdx new file mode 100644 index 00000000..a613f04c --- /dev/null +++ b/docs-nextra/content/en/component/vumeter.mdx @@ -0,0 +1,43 @@ +--- +title: VU Meter +description: Monitor live mono or stereo signal levels with a configurable segmented meter. +--- + +import { DisplayApi } from '@/app/_components/display-api' +import { DisplayDemo } from '@/app/_components/display-demo' +import { InstallPackage } from '@/app/_components/install-package' + +# VU Meter + +`VuMeter` maps decibel values from `-60` to `5` onto illuminated segments. Pass one number for mono or a two-value array for stereo. + + + +```tsx +import '@nafr/echo-ui/style.css' +import { VuMeter } from '@nafr/echo-ui' +``` + +## Live Web Audio example + +This meter derives its dB value from the RMS of real time-domain samples and stops sampling when playback stops. + + + +## Stereo and custom segments + +```tsx + +``` + +The segment elements expose `data-active="none|low|medium|high"` for state-specific styling. Also expose the numeric level in text for users who cannot perceive the segment colors. + +## API + + diff --git a/docs-nextra/content/en/component/waveform.mdx b/docs-nextra/content/en/component/waveform.mdx new file mode 100644 index 00000000..650d579d --- /dev/null +++ b/docs-nextra/content/en/component/waveform.mdx @@ -0,0 +1,48 @@ +--- +title: Waveform +description: Display decoded audio peaks, playback progress, hover time, and seek interactions. +--- + +import { DisplayApi } from '@/app/_components/display-api' +import { DisplayDemo } from '@/app/_components/display-demo' +import { InstallPackage } from '@/app/_components/install-package' + +# Waveform + +`Waveform` draws simplified peak data from an `AudioBuffer`. Its mask can represent playback or selection progress, while pointer events report time and percentage. + + + +```tsx +import '@nafr/echo-ui/style.css' +import { Waveform, type WaveformMouseEvent } from '@nafr/echo-ui' +``` + +## Decoded audio example + +The first start decodes the bundled audio file, extracts real channel peaks, and then tracks playback with a cancellable animation loop. + + + +## Controlled progress and seeking + +```tsx +const seek = (event: WaveformMouseEvent) => { + audio.currentTime = event.time +} + +; +``` + +The graph is pointer-oriented. Provide separate keyboard-operable play, stop, and seek controls when waveform seeking is essential. + +## API + + diff --git a/docs-nextra/content/zh/_meta.ts b/docs-nextra/content/zh/_meta.ts index 45def544..dcc217a4 100644 --- a/docs-nextra/content/zh/_meta.ts +++ b/docs-nextra/content/zh/_meta.ts @@ -21,7 +21,7 @@ const meta: MetaRecord = { }, component: { href: '/zh/component/button/', - title: '控制器', + title: '组件', type: 'page', }, community: { diff --git a/docs-nextra/content/zh/component/_meta.ts b/docs-nextra/content/zh/component/_meta.ts index d0f9646a..d77bf6d4 100644 --- a/docs-nextra/content/zh/component/_meta.ts +++ b/docs-nextra/content/zh/component/_meta.ts @@ -9,6 +9,21 @@ const meta: MetaRecord = { radio: 'Radio 单选框', slider: 'Slider 滑动条', switch: 'Switch 开关', + visualizations: { + title: '可视化', + type: 'separator', + }, + lfo: 'LFO 低频振荡器', + light: 'Light 指示灯', + oscilloscope: 'Oscilloscope 示波器', + spectrogram: 'Spectrogram 频谱图', + vumeter: 'VU Meter 电平表', + waveform: 'Waveform 波形', + containers: { + title: '容器', + type: 'separator', + }, + card: 'Card 卡片', } export default meta diff --git a/docs-nextra/content/zh/component/card.mdx b/docs-nextra/content/zh/component/card.mdx new file mode 100644 index 00000000..26f6cbb2 --- /dev/null +++ b/docs-nextra/content/zh/component/card.mdx @@ -0,0 +1,43 @@ +--- +title: Card 卡片 +description: 使用 Echo UI 复合 Card 容器组织相关音频控件与状态。 +--- + +import { DisplayApi } from '@/app/_components/display-api' +import { DisplayDemo } from '@/app/_components/display-demo' +import { InstallPackage } from '@/app/_components/install-package' + +# Card 卡片 + +`Card` 用于组织一组带标题的控件。`Header` 与 `Body` 提供结构,`toggled` 用于高亮正在工作的处理器或声道。 + + + +```tsx +import '@nafr/echo-ui/style.css' +import { Card } from '@nafr/echo-ui' +``` + +## 可交互效果器卡片 + + + +## 组合插槽 + +```tsx + + + + 磁带延迟 + + + + + +``` + +`toggled` 只表示视觉状态,不包含交互行为。请使用无障碍按钮、开关或复选框完成启用操作,并从应用状态同步卡片。 + +## API + + diff --git a/docs-nextra/content/zh/component/lfo.mdx b/docs-nextra/content/zh/component/lfo.mdx new file mode 100644 index 00000000..a347d227 --- /dev/null +++ b/docs-nextra/content/zh/component/lfo.mdx @@ -0,0 +1,50 @@ +--- +title: LFO 低频振荡器 +description: 预览低频调制波形,并将其连接到真实的 Web Audio 信号。 +--- + +import { DisplayApi } from '@/app/_components/display-api' +import { DisplayDemo } from '@/app/_components/display-demo' +import { InstallPackage } from '@/app/_components/install-package' + +# LFO 低频振荡器 + +`LFO` 用于绘制低频调制波形。它是可视化组件而不是音频节点,因此应用需要自行管理波形所描述的 Web Audio 音频图。 + + + +```tsx +import '@nafr/echo-ui/style.css' +import { LFO } from '@nafr/echo-ui' +``` + +## 实时 Web Audio 示例 + +下方控件会同时驱动图形和真实的振荡器调制链。启动、停止和重新连接都会正确创建与释放不可重复启动的振荡器节点。 + + + +## 自定义波形 + +`amplitude` 会限制在 `0` 到 `1`,`delay` 会限制在 `0–1000` 毫秒。图形会填满父容器,请为父容器设置明确高度。 + +```tsx +
+ +
+``` + +## 生命周期与无障碍 + +请仅在用户操作后创建振荡器。`OscillatorNode` 调用 `stop()` 后不能再次启动,因此每次启动都应创建新的节点,并在停止或卸载时断开所有节点。`LFO` 本身仅用于展示;请为会改变声音的控件添加标签,并用文字显示当前值。 + +## API + + diff --git a/docs-nextra/content/zh/component/light.mdx b/docs-nextra/content/zh/component/light.mdx new file mode 100644 index 00000000..4d50377a --- /dev/null +++ b/docs-nextra/content/zh/component/light.mdx @@ -0,0 +1,39 @@ +--- +title: Light 指示灯 +description: 使用紧凑的 Echo UI 指示灯显示音频与应用状态。 +--- + +import { DisplayApi } from '@/app/_components/display-api' +import { DisplayDemo } from '@/app/_components/display-demo' +import { InstallPackage } from '@/app/_components/install-package' + +# Light 指示灯 + +`Light` 是紧凑的视觉指示器,可用于信号、旁通、录音与连接状态。 + + + +```tsx +import '@nafr/echo-ui/style.css' +import { Light } from '@nafr/echo-ui' +``` + +## 实时 Web Audio 示例 + +该指示灯由真实 `AnalyserNode` 的 RMS 电平驱动,不使用定时器或随机占位数据。 + + + +## 颜色与尺寸 + +```tsx +
+ +
+``` + +不要只依靠颜色表达状态。请搭配可见文字或无障碍标签,并确保指示灯与周围表面之间具有足够对比度。 + +## API + + diff --git a/docs-nextra/content/zh/component/oscilloscope.mdx b/docs-nextra/content/zh/component/oscilloscope.mdx new file mode 100644 index 00000000..80b87a4d --- /dev/null +++ b/docs-nextra/content/zh/component/oscilloscope.mdx @@ -0,0 +1,45 @@ +--- +title: Oscilloscope 示波器 +description: 使用 Echo UI Oscilloscope 绘制实时音频时域采样。 +--- + +import { DisplayApi } from '@/app/_components/display-api' +import { DisplayDemo } from '@/app/_components/display-demo' +import { InstallPackage } from '@/app/_components/install-package' + +# Oscilloscope 示波器 + +`Oscilloscope` 绘制带索引的振幅采样,适合显示来自 `AnalyserNode` 的实时时域数据。 + + + +```tsx +import '@nafr/echo-ui/style.css' +import { Oscilloscope, type OscilloscopeDataPoint } from '@nafr/echo-ui' +``` + +## 实时 Web Audio 示例 + +启动内置音频循环,停止对应的动画任务,然后将同一媒体源重新连接到音频图。 + + + +## 转换分析器数据 + +```tsx +const samples = new Float32Array(analyser.fftSize) +analyser.getFloatTimeDomainData(samples) + +const data: OscilloscopeDataPoint[] = Array.from( + samples, + (amplitude, index) => ({ amplitude, index }), +) + + +``` + +每个音频图只运行一个动画循环。停止或重新连接前应取消该循环,卸载时断开媒体源与分析器,并避免清理后继续更新 React 状态。 + +## API + + diff --git a/docs-nextra/content/zh/component/spectrogram.mdx b/docs-nextra/content/zh/component/spectrogram.mdx new file mode 100644 index 00000000..02c7b8c9 --- /dev/null +++ b/docs-nextra/content/zh/component/spectrogram.mdx @@ -0,0 +1,47 @@ +--- +title: Spectrogram 频谱图 +description: 使用对数频率轴、网格与填充绘制实时 FFT 数据。 +--- + +import { DisplayApi } from '@/app/_components/display-api' +import { DisplayDemo } from '@/app/_components/display-demo' +import { InstallPackage } from '@/app/_components/install-package' + +# Spectrogram 频谱图 + +`Spectrogram` 会将一帧 FFT 数据绘制为对数频率频谱。坐标轴、网格与阴影填充可以分别启用。 + + + +```tsx +import '@nafr/echo-ui/style.css' +import { Spectrogram, type SpectrogramDataPoint } from '@nafr/echo-ui' +``` + +## 实时 Web Audio 示例 + +下方轨迹来自 `AnalyserNode.getFloatFrequencyData()`,停止监听时会清空实时数据。 + + + +## 坐标轴、网格与填充 + +```tsx + +``` + +请为每个频率分箱传入分贝值。虽然属性沿用 `fftSize` 这一名称,但它表示用于频率映射的分箱数量。使用原生 Web Audio 数据时,请传入 `analyser.frequencyBinCount`(与 `data.length` 相同)。 + +## API + + diff --git a/docs-nextra/content/zh/component/vumeter.mdx b/docs-nextra/content/zh/component/vumeter.mdx new file mode 100644 index 00000000..1ea9cb78 --- /dev/null +++ b/docs-nextra/content/zh/component/vumeter.mdx @@ -0,0 +1,43 @@ +--- +title: VU Meter 电平表 +description: 使用可配置的分段电平表监控实时单声道或立体声信号。 +--- + +import { DisplayApi } from '@/app/_components/display-api' +import { DisplayDemo } from '@/app/_components/display-demo' +import { InstallPackage } from '@/app/_components/install-package' + +# VU Meter 电平表 + +`VuMeter` 将 `-60` 到 `5` 的分贝值映射到发光分段。传入一个数值表示单声道,传入两个数值表示立体声。 + + + +```tsx +import '@nafr/echo-ui/style.css' +import { VuMeter } from '@nafr/echo-ui' +``` + +## 实时 Web Audio 示例 + +该电平表根据真实时域采样的 RMS 计算分贝值,并在播放停止后停止采样。 + + + +## 立体声与自定义分段 + +```tsx + +``` + +分段元素提供 `data-active="none|low|medium|high"`,可用于设置不同状态的样式。还应以文字显示数值,方便无法分辨分段颜色的用户。 + +## API + + diff --git a/docs-nextra/content/zh/component/waveform.mdx b/docs-nextra/content/zh/component/waveform.mdx new file mode 100644 index 00000000..0fd25006 --- /dev/null +++ b/docs-nextra/content/zh/component/waveform.mdx @@ -0,0 +1,48 @@ +--- +title: Waveform 波形 +description: 显示解码后的音频峰值、播放进度、悬停时间与定位交互。 +--- + +import { DisplayApi } from '@/app/_components/display-api' +import { DisplayDemo } from '@/app/_components/display-demo' +import { InstallPackage } from '@/app/_components/install-package' + +# Waveform 波形 + +`Waveform` 绘制来自 `AudioBuffer` 的简化峰值数据。遮罩可以表示播放或选区进度,指针事件会返回时间与百分比。 + + + +```tsx +import '@nafr/echo-ui/style.css' +import { Waveform, type WaveformMouseEvent } from '@nafr/echo-ui' +``` + +## 解码音频示例 + +首次启动时会解码内置音频文件、提取真实声道峰值,然后通过可取消的动画循环跟踪播放进度。 + + + +## 受控进度与定位 + +```tsx +const seek = (event: WaveformMouseEvent) => { + audio.currentTime = event.time +} + +; +``` + +图形主要面向指针操作。如果波形定位是关键功能,请另外提供可使用键盘操作的播放、停止与定位控件。 + +## API + + diff --git a/docs-nextra/next.config.mjs b/docs-nextra/next.config.mjs index d1285ff3..7ac9fcba 100644 --- a/docs-nextra/next.config.mjs +++ b/docs-nextra/next.config.mjs @@ -14,6 +14,9 @@ const withNextra = nextra({ export default withNextra({ assetPrefix: basePath || undefined, basePath, + env: { + NEXT_PUBLIC_DOCS_BASE_PATH: basePath, + }, i18n: { defaultLocale: 'en', locales: ['en', 'zh'], diff --git a/docs-nextra/public/audios/demo-loop.mp3 b/docs-nextra/public/audios/demo-loop.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..cfb57cfb2e5d0f4f7f9166bd379a63ba76382607 GIT binary patch literal 205786 zcmagF1yCG8*QmV$XyA#|kSb)G@^1lD~*R8r$ z_jc86_4M@VIdh&qy{)nm93a4ZfHKxlkz{+1&;S6?>Mjnp=9Z+&ZnoC8PNoi@Nu}JJ zKf9AMkxE&bxp|nn`H-qPi2*cpbadVYP~HV()z!oS|CRcmWR~}2b7x0KODA`LgzaZ{ zH(N6gcS{RWNpEupkI%NAmJU9oWw_ydC+pxV~>;Q2YQI+>+jDYt$*7wN2zz%@?e?dc5gZ(`L z^}R?9OGg)Heo{6rR_6B-|0_lJPwL-C{|oX2^l3d9U}`HCpYgW zK@l-28F@uzH4SZD17kA_Yg>CKm(LzPegWX%u!!i`grwB;tem{U;GbDO`Ln~mdtSC0}(kz2fg=Wi!Qha3|39&RNbxGr zbiPQD)b9L_hZ~RhBSaD@^daPE_F5EKAj{nh4h)5c*==K@#EVAj22ThQhT9@hA%g?L z;YL9EAnx7ykn#Z{U(%qV&Uq_n%**SxXFIYOs-#sx{o7Pu5<2N$NeAbzhA`EAT(NJ)%}w?dBw|0>5LA}E~fME()e>r~5T`3w|d z6^+pasq+hxAq*bD3I?;H!NNiV!B@vrQGO_R&OxG`xwDbp323mwz22lBMj@wu)ewlF zGURW8gKG@RCK(zGAMISOqy8S7L`{rV@YbF4WjE1<8_y0- z0uoceBIK0TIc}Ois*Pk4DfFAzZ85m^SMxPFgj>|qc6(>IVDk`zM_?>d7Nf*%b!^Un zDp?^x1`>th^YE^wI1)_@e=9cy)Yqfl9n+?kXn@o`x8%sg2Cii7V#*_db9IOkSF#&xsfnEfo7{M{N?L?u!;I#}`E|aOVTD zz~p_bQA0;|5*~-)S1xLoLTU_LZnh6lvD|%fgpaYljId$i*4w19$5q6F%BIGOCH5)+ z3Jo}T5bEBbU&k!5LZ7J zIREan2?L$%$i(n2W4&GzI$`ensvLIAiiBS5388}`H}E2%@W$l?FfCS4YKOb0{pO7S z2;rlGNM)z8H$<+vEc^sv$R)p4bTP76QjNSuRC0w=hOH(_*7YNVg{-RqWlpj#Lef1q%9R9n^H4GWLacp~TA21iI zLkN$`z*nfw=CB-xhp}qpqjV4vOX`9eq~AZskxjS^_tI8`$e7~|DKvfh4dIv>p@SO* zja@ zaab3Q>N`1dVto!0;&|p{k*xwgsYU zP?h!5KS5$rMSY4BIydF`Zjs-gOEycSE9p;TRD8bj4sUruURoUeYaVR5UI4&kL&R0S zJ921(L^xEOCLpU05IRGzFJ!`PVjlp)K{S$+ov?M0U)mZ;K9SQ6KTy9G|F$iTgAnqM z5D_YffqOi8Rn|=)Sa;N%4i*j2L9cWYGK!mcsF@O%!SVY8FT0?K#VjI_4x@hV(o9jG zp6TQMS6zZc{U01{XF{$kXHmZ~ESr8S`}6BBZ6E1JicQeN%XXHpBYv6v2pLZ0K0^#_ zsOvd{6hMiHkOD)<$JktejT1zvk0?Vcdxr)YiK-%Gk!b^y^$iE<9?g@AvN-gtQHdcE ziej+bjg$%@%po<^bEtU4d^rdz8RWDXyMSDzUM;KUn`~m+L2v^o9ze)$77WKDvWMyu zs69`mZXxQ27mY!rGKnl_;I{hw;;vJ3KNnCV^jSx*zUIrV7Pnocp*>;D+D~b9FI?vD zNBCI~VXm0NhEd!GG+U~kwpaYgvV^nSxsVo!uu|jIWmQz|5(wC*+Bb{03){G?isDOo zs$ToEU`Y42YffaPc9PMhTtF)z@rTix({1NLNo9F zBZP+<$}BJzvnJ~)OtyMtdZL1o5Xb547$nMEL~{}pHG}i1lAs|uiwF7p2dr7TSzTJ) zMvnc^J~!?|FuW{6ntPD!=+evQgoZ;=rqs(x!HX$+br3+Rsg&&R>-%K~UVV-<&)`lA?x@rBhS_K%fakbZd){D#^hnj;1?Eno8Ff zPU&e*xGOR>jAvtKUF}qU^esMCBNbL?mDZ3w_kAmA$vy3Izbne8Zatp5uxhj8g>0A4@$^#KX?}5Y@=4`BsKHC4-79j?XG*I1`mKy|S%*c8&=<$urpSX+~ENG}?oWMD2L+~c%!80wyd=UiA`2vhRrPbJ)Mn+lrX zpBsp#+=4(gCs02-BIuv)Ep>Fm#^wI~)SEUhC~HjarCYI9L`k0xsixz>Z%5;sx% zjA!Ddd1&jpo36Df?wH%ZD}Cw9Lr6UHAF7}1g~p%rOFufDP|hhqBZg;XI?n-SO4w{` zCP_5!&O_XIy#>qkrz_CXcy-7bjx_BtTOZH;5j!vW5xU< zL=J{J!_rVkX8)#ORW&9sU>>8hsLDub@2VbuR2h!KI9i;1F?mOs-p}FdZ%(x5-3T^l zf~t(54|{wW+KU%u^u7w#GLlp&5cn`CFh!=6j|Fe1=J>i1+DRwaV__s$4SDI*){)P4 zxnEdBia3$=z4^`VcMTz85}bu6r$a zaV5obfxSRwGBJXFUM*P8AGvSD+)OPB&wmL{As-0SA8q-aM3ntofY>ite!}5bM7$3T zx_TeTVS_;Nk+h^p;L#>R$wJqa=I9S0@f2*K?MWjR>%R80>&EK&5vGryb4Ki)F|w#E zTWK4G{BWU?CC;QcvE5qIZSW%*3H)NvO5*R!WWaOu=MWVDD>ORqAkQOjE|Lta#q>Wy zoZ$XRx_NmTVHSfI6@niPb$O!9NjA*#tS0%P!$)8dBh|3j^e8FUy@;H)A>cD~hKjNc7r>{; zkI>CpT5l}U2Y1dpY0a>SB2bO^g;9u0u4WpZM~++f)tY7syA_H$83?5unzUYVh1)fq zL~Tj4HNzFk9$Id(dj<}(cpWH2$=)Nue%G8hr0cv1hArLtWblxq_&7NlDASEyPI z2&hg$bYVmD$gkpX*y9ZU^0$`!=rH-6(+Q|D+e z4Z(#2piEV-Pl!|`A}xGAU?v0`)7}b$Jk=C5^=Uurx2^pJP(;0`|Emig0!yxojFZEF zb^Q1oyOsGDrk6AtGdYHI(RQlxT4_T41bw3bN2`B? zP#B(jiBe=5HW^vpsQDu zTqM(F?M^c-Bv=F=PJGst#4Pr`vBsDP%55?!Mi$v!a~om-b{AbVF=)YiFq_!aDs?8w zx;ycx1uH8mEmPv2Pt1*z{Vl88s;2d1Zj0aIBpM*Nd;M;9UX*3Io!aMP?)0Yf2zjhV z_cB7VJx`p8d}SHj%QyQh@G0W98(jjK%!EdKFbvHb9VwjP8R7iOA3K&O_xoqaCrB7W z{Rj?vw>Fvq;ELnb`TLQ_*FfQaLz?$coGNF1a4ORoNaGMOzy!aV`4@%lQUzM#1uU9_GSI;wvHGB%DM)em-I^5E~%}YaEx0vnJDZ!Ve+Z95O=i$(e=(0e1MjE`{tq ziygv8x0#>S_S=wc=~o~ih+FZ(gijo~&!E+9zf|t7B4=&|MZ*ZeT?>T8X&O<&ggN8w zD=@A)<`pz(g#h!>ETy^2X(TvSsMbp^HU2?Q2vx#AuTcLWwbEjy$gO!3or_|Os@C^)LFA)I@EMqAhN+s@>p+V(BOlbLgETZOlp;)KwC=PhqD&6&J zw|F3&wM=m)0w#SV%`uC|4yTBW&35-Ld;|2!A!RMCY+_j)0 zrdNH{6HO}YyiG*qy5`_YrCgoi5EiM}s>xctRLDtjEq1})MG8-zm|=ll{o;TAha#cA zGA*1zV~Hr2juBb>3`HDlkyR9s>ElkXa=*o1)1A|>>yE>|(aIUiTL1uH2h)lGLHTWz zlr2Ld2~Pd0EpFpIVP%*~d}wj~TO)S&LaN#<VOF~=t?SU5f$6DY^(6dK1+`@ zcwKFsLM>z?56wk{2o7L});YGpw1X_TlB#GYM!g>JM}pc;nf!&LeYbEM&po#Ksz{i* zWy_L4t6VEIOf>=pz2-_g-To-vI$)Ea3INO;R;6qD?JdEjm&7HZ*4-Z`V%FMwE3*q; zK~4GUX($k4ptsNd(q>F*T77x`v8t3fRC*9{!s0N&pcT=1 z&ur43keyX)g@B+PKXiN?X~y)Il@vfSxK&sDc!nK1;B%y7+Lv(0v2$27>!pm>x1o*8|~hlW5FOdO9f zA`t$oWj_T~N)?YMXg{uWZNcRi@1|N9PvhK2M!llY)#IYsnZ-ySa=r7R&^cN;tU>Ey zkM63Iq1n9F95h+Sd?HYM`^#JUlJNEZ8`cE+bit%x`3V@&L4{r=V zwiwGG6e=$q!8LcB701(iet5^Fnd{f8C`ds>S`eP7>)!GDp{^Zq*ea4pZ?L}??TZPx zFS-%w%vuI!)CKOCkeApLNNW0vY}8dmh8(c3E@xfPv15Ywfm-~T7B{@)JYD`DAzSbO zNJved@uQO*d55|)5+}-^aZbm2=g2=12a`FJ8D&=C2WobU>8!=|tOGx)qX&K+j~a-n zhvtb(L8$@ERykeS1m!5RR>ROtXEqh0bfx7Hxu(+bwSncAC82|>+48kg`fp1uCb;AP zK2kFYE8=P5aGbwvC@c6>(>Rt?;GsIc)X)Rwd`>uoWRal;OC8$Ut6>2<=rH)gVry!- z%6*(2Y@;k75&&vF1xhe#DavL7kBU(JcnGehh69ndX@%l+GXt4b#)Nj4uNJ*rSY@|9 z#WB=_0WX}-?=lRAJz=V(mO!q{LZ80$Y?b*Im5=dDn(PnW3SIs)LDz2!y`+G(0{9B7 z!D|m?SlVG6(J9ypqfpCXf-60Vs!$$x`sFtZ}fBD1Z(Zavo7kg_BW-WKXjd$uI)% ze$fW5y(}EmkxzJ`q*qo}dU;1KqY(;^+1_;ft=N}6l3w<`?)4M~+@=^GH&3_!5&8lM z9v7Hamt|;`-IdjLhUG=vNM?83?;B-Jpp@)Jp@nQhBdDPfI&9I*$e0x#P7s?y(>mEf zQ%^9XqG6gGW~%*SUCKpf^=kdtWY1UE#m2mq5I0cpC8KWsRbk?-&>$op#F<=bzCUva zgBE^p3V=NZP?n(CIM~6W2b;wf?3jb_k=dDR>IX!`3i<(XnrtMQSg?o~(mH+;h!fc=-N^`FaE3p6N`G9wttk_FV8Ic*$5xVyS<4XU~(x)^2t`J-yYHF$; zJ=8QvrQhuRglCmh{u!kJ005u?(W8K*?-2kpvNswLbi>dgfM5vL*`y$}#0=9lHi%jp zI`fZ%RfB6{7*#43S~A&$9KLh|VK5B9sjv0dT0ta~9s#-rOC=CT$Lv}Rtv9GT+(wBa zh2~dVFf1(;Jm6`nlNKN%SH=KVv28Ns5PID0qE6JXwXI{hbnHCXCsUDa6bs z0M8~v*P1j zGX!M!qzS22tG!AaVz)gU{pi)d{8;4~rwGR_aM|_x3xSx|*Sao!8WTS4dA>m-WK<~6 ziht2QgFw!1#l=khi1~4ZvLKI2M|+UUmv5*9g!4S@l$f}jH=cTGEBi_0@JhiVNWrv4 z?B%)whEx@yO%*wK-vlJkwGI_!!ZiG1XG$9)k0;JGpZOFt79Wcp)QbG1$ffzuePp^y zEc?OU0`}gWSCD5s!)XSl73Cs0taz#QC^WPk>?kJk0{POIR8>Odv96 zJh8lr>?+5|kVj#)ot~AJn#_K_+PZxa?PE-;B?8py&q&q|nh4P(vtXK62;}Z18+^z> ziiT9W^b3d;qPQ{erp1={t*Pvk>drJ-$Ft%(QOco%v$+L1J6Kn?>Yoo`fuX5IR?fs3 zRV2ym6$PeMq9@v1Yw*6!vSm7b4@F2yLRiSYf9}BN_@qj+|H~5c3j19Mx+wuG+qj@s z^X*Bg)YDQOB}yeBw(0A};=#VR(V;Reo=hb)$ZWhBps!X=AOfX?(B7Fc`qK>S&?fq% z>IXrt593A{QnV@IM@9u~@*`;0>>A58ovu4iqJ1o7;pNB5;;!u(QJc1nPTfW2EwRSH zZ;L~6vOFQk`mODT)U)1{_HDFZ`=?6BLPX8m>yC7( z^8u%BVE|UKo)jXC$o=_QVzY+vS9?hH@t=I%t5?6a*nlytv234)Vy)mIZS$T7gMiHH zts~l>00~VSD`S1ql5BFt1fv{~g^T@UZXB-~?{0%gqE(YH11j1{A)}^MpwyIlWFM*H)?KkO7h(nfeb)cq-&6mlGi9i|4lH%^)8DAd~G_nodWx)RkF#(`5h1XwT zF`Lzf?3o1mJ)>9J{EzCTZ$9ENxnD<}%2Ln(u)_*9={k_h)LA)7=^OBccBuKD5k=0! z9~Hu>LEja&UWDJ=s!s|asrr977IEJPz7|3A5&+PAW$knnQ8W_wx~=&xEc#bw^7zZ! z55iIaDjsw*-(V@q{yE->ff-aTguS!k#L<^)dWC!PJJ#!VMWU7JwI4`?#}#zKjMB;w zNKw!AR2P|0IsF+LeZ9&;FECYh<1lwPb2oLTnMM~?@jJoF45&m7Sii{B%#e<31EXv6 zW1MQEN|K~Vddd`-lGz~wK!*L^BJlB{<42wI$itt9~G)!2RF{Xk>)`aULDTLsXJf@Yi2``DJX(5gF}D^XXcS2GQdmJn`CFU zT)Gr;TMa?@#`~-@O*@vsChbY9VIH|`WiS6Dd}uLS6?5zkVBR|FU;_p?iYeb}{vPY2 zR-z|KYI-$@b;(kzW%mh|lu}=L;82))&W#r97lalmiNeMe zAp?iPpe+v_JF=@<9w3U-g`JaMWFdaD_=#jA-}~pV%&lL*G8%=L|J%C1T-{%Km9p6Z z8lW4giX(ghyv*XxKGKPA;9Vt+O6)y9XCZktC$I1vd$#qT0yrmk6A%CkpCHVyCTJd&6E$r8u`{C9WBl>Od2N5;l#5-f7EL%91YKx>w%= z-_qaEk1u{*CT^`KJ7lub8g$K*v+H*#G%ctO5EyW3_zuQCq>0Oxdt@#2f|8_Y;YK3h zU`0f47brkw_NhKDvma(DO_b)2OWZY$Ukr1ROKrGOF9ZxX&X-QB-2CjYUP)G7$tI+0 z^!m4T7_lGP7J32DBIr`^Oz^WZjkV$?d@XH-4CNE3%!DhPIuR`v9ZLTQS%RVNx%BK| zu{fnb41$8e1konrhUKx}`l!+w?;a4y<2wEGoTfED)j=MKr)|l0HISK~W99lhmg-NJ z#x}l6MJ;{u7j%**i`rc1o?|z3YFvnJmn$_nea~}1^&5^RnB(`> zDu0G;7e?2lT3}Bg<=HAy2UQm>6Ae}4N){k#%LT_|6K`>t)K*2%-{ARq@dKGn=^5H`+PL)I#m+YUI`(I)akdmyZcN8< zs+Lv+Di?J`UtUxCP@DR6b7l)$R`buy^O|==%*U6pO@#eUkf$x{={X4 zOLyRu)-^)vpW_|LqoW8@T0(2wmNc28X$m%ajF42vpz{e*kdk>be=O=|!0rs@1^a~wxqOO*M!=c?<@_09825A{@I&OF z<&z>0g3ULq#+iv!g1xai5F?~l0gT5}u_nw$>++fL?QMXL+3EdTyX$j2Yzu z?j~qGRI_H<3^oG|Q~hn?+OJyA$SElmM9)PPM1S=+D@;&ke`3@7rboYoONl<@lCC-) zb;`a)EWMsToc4NGI0%=o?hllI4O^_`m^X&p%>TBFJZ=-x9YZyEW(ZRwR9&ZNX+)r= zT$sbohY#kow(CyiGitRP+d2JK-g5*(6QZ(hy7+y2Awaa3>uYsrz%{e$u$B#Z(u72D z3v#-)VMSNxY|-~MQ*7lb{3O{bpQSX@*=o^qv$d*BkYSx5{aQ%MaxU8ImaTPDGj58R z$u$!Ceeq|<=I>uwgQVnSr~8nt=(bVSD1Fc7-w|~Qjw77SpysVlZcdi}84u-xp}d)v zPxe0TD<7;I3YdL~UYLAuUKVqIMxS^r>W}OzgQyI%}Y$JmlgL^+D1pRMq$h z61yYntW~9{`U-H79p`0FR!W}-Y(S-Em8uNcCE8ra+=~MheG9(vAI~b>0x`6#j0V$z znyMrBOX&w!t!ws)8IG+I)k&rnN(5?rXJCJ0VMX@&ZvTxQ-p z%zkuyvxFY1C(1{TI{$JKrxfy;@FJfJp`N4$g>7G`5kj6#$X~DiFi`y#aU?&x;*;IfnWT)>%Lj^vm&scczq1^^5@Dq}M8O>zpz5rct`Pc_GLujvTV9TQE^ zX)7oSEnxD?aTn;sM1K|-AuBSNMY>8~puM+rhEgFPLA9M06Mo(R?6xETV124LtrAWc zWg_27?5oC>#Yi};u`fbMbv)xsOGPCpX&uA}F=!a2bzUHI`6X?OyutW==XZ~|jj;|3 zi>Y0%Fb3&?cbIFDX)Bvbq0otwA0<+XRCds!0zH8#Mj-^JHkC5a;`@ci>1H-75_E*v zTGj|!Ypc5Gr>z#H9IYCgo>?h>CX5zXPH3+6`wyaxm1n;mzeY-zI#lVZ7bk0l{SxhY zf(PJHX4)#P*B?S9G{6qNl*5n6n_agzwzDf@C*Bs1meQs+Vc_UV=2k!7GG65#JfJ$; zoDb+b*{pfD>iC@aRml(uHSBQ1Y<_E+75n2I2{b5?O z&%)G@5$p1|XEBSW+%#4IHHfNYIC7;StZ84s`NtI?a4tdZE7}w_A%`jRpDf~NX+oE+ zPos!O5DX{K$fpmP>{=4N>cmGC)$e_mX*e-Q6aFJ|23!44+w316b!fX-Em;)Kqj2KkJ6ljcQ#EK-o)ph6Hsa}qN9Pc$ zpGt~|IR&f%fB_8HK7^J~(WEfDdMLJ;89_ANx1tR?IPq^}@q&8Sv^Z;7HG@Xqou|q6#c5$WIk0|TPbA?NB+h z=8d)R>{0O}?uS&d*A_%v&Z0$n_x&Va#TI5KF51>qDppIwAXjq5c^qJ@?VC+}mWYDJ20wo4f7=D6|9S7%SWg1`_YH~2Eas)48PEi+C zQyd+!*G9hn{b-IU5Yc?H^%ZjY{Cu9S$XTAgTz9FV-c`F+KeE+1G?j|! z6-orBjh0^?n_hcpwKaTAB-If?RZRA0wcOE8cB24*oI=B?0PrpXPISk(CZA0-#9p_ubL(|CS7>Z&f_BbODdg<>_)~$&)@6-5JiTHhrs!cWnTVS# zdU2l02i>Nd#E|~};CRXs_A{s(r&HP3qJ!)u0KiA#l?-Onhd9r{fmOms>#nFWru+TXe3=QsW#zn#x^I$e4i+%W9*rxNj>>2ckS=y>}JL-98# zwE6t@cNlQ8R1FV?Qj+9W;Y&bK-F}b3QvT^ncx5|pVV4y1qDs{v`1@J?l^jNOTn$v6 zTh#Z$I&DAG>t}`APV;{y#Xq;FQTFK}n%hWN1sY{pG(jBFI9829{k6W2dHy5x8vy;u zWX1Lb)5^Tsk4T{3H+E!Mvplvw$T8FI?k4xTilQW}o`DeF)@k*m6imD!Isi~d*DqH@FuH?GH0r^hDaFfz zCGbU0VaO{>V_>rhhCL8x%&tW5vF~YJly<2pNJonWNN4Y($a;ATTPQlP< zhB_yQSeyn(cHdboqfv6b)ZcxmPZ{^jKOE~9gPR)P^f&pRS)TIr78q(+VL3Um+*m6F zYrjFz^G%83REaj%U);YME?lm~G}RyYZsO^XcLoZ+VB5j#xAy$e7497LD2%JxBlN# zZKDcKLK{bVUndG?cMl8tB;-y|nO?mzoDVlcbDC$11Gf8wTREy&Ys_OF${4;>-cO-n zJ{M!^YxnN_%rzrmjFc~}t(N|%X6s;rrT!aPC9K4;zGjT@b|b?WAaZH0)LD;WzpjPO4c*_c*+yWSI4Twkezf zpboi~eD)Z6O^|$FO@jr-3;Ohr3RHpNwdY*n@TVSij9<>+n5l4u#y@{}MZy#Nvk$0O zf1^!@)`p7>vJM4_Hv^iK*6y@)?`o4D?dBHN7jd5`BxlQw#wzh9S68)GW&r5iVhf@Z zMo2fuVVuRFJK)Sm@z@`DNN{K-E;gJv9UMr6x*VGuU!F6?IcUEenzj+;N~r6_(s0kNI?>uTI225rf_(3KeQQ~6Gn-!gri~x`ovmHy))>;t!`MhiKw4yr zKFg1x=%q-9tcwII>4J(;>L)y-?qSpm?;jc_Rgp#bfMy|Df=0J8LOSv|a)@<)ziBKD zNtOLe>C13J80Xm-`RSxplcM=2+awzi3)z^q>bjunBJ+8gQkz4nypHDCW~~<4K7fqz zea8qI`bxWH;Lu$H9eTqZBJQpZxSw4iXs|v4jj_jcuvAynmek3#BHoQ96d?gl{GSiK zAI}ix(m2`EFfq2bt22=fKq)oUyt@S>G}Kmm)~i6li2|!Cn$sNcsa=8UK|A+W&Iw8z zy3ls>IW%M&IRlPS17?jjVn)Jf@`{QAC#-*kPy@)h%s4NEcm(Z22r1kjYMcU$_QVq_ z#giZ+*O^Agml{hyc$D*e2bx?KIqjf2xRgDe@-KC!UzC;e@J#aqwp^!%DsMC66yz$8 zExAiD?g7LL3Hz2?W;d*RoATLv_6xty`YVFK z?@My;r#V0{WMqrHKylsV&M;Y4X^|oAZbv8IzcG>Fyp{&7VyLZfgUnV=e{03=w=wX` zOMioy*qt7p2_2#)`)vK1$~O zDbc(%^NW@|GLC*^^miaxb${?3(BNikG5XpHIbj_Tc+2KfX7Wr6>9Egjn6z(snO;7E zm?Q70bywT#n1>nOX81pi_q@J%UOnbOE}|c<|FX4+eqDWOqu_R_Lk+3&DT{}^)%+v0 z3Wg)H)N`^10H)5ynI=pCSRVGS-46hShSZzSd0;pZ02lxOZ4|BUhl+-T`KIv_?5aH*=l}V-7xleK&|^ z#*sXR1S9;v;5MJp43{2TFSXx|9VxYzF%jhnoWtGd#pthToi8nW#5jDJ=Xv(h?%|(j znJ8RkNLTCp)&YBUX=HENbnj>Nr#8GA^rg9it6z^F8-=2QY~o9CBBiLV!~BQRhB_;< zRwE1rxWp{O;o0Mn5^uLW%t#3WIwJ$8Cv;NK#YvIK zC1!sIRS|TKhy~~VbCgc&)om7`$BUjBeet}3CWrBp=j2!AH+$(vr-+}KR+?l$C?K=q z1XRFBirT@1j8d|pK=K@nFMEi!#u$z~JR+TmFwht!NGc^lH7Ix<(T0?F)v0PbIMuH= zWQn|nV!u?*{r9jV)8?^56Vj?%VhDSG!s55?AlhR}lt$ZOk!lVnddR^?zSlDV**`)& z?|nHsc=|(;tc%nHh>I*z$@96HyfQem z)5uV!)Cfk@(HwZ$10XwmP%64gD0^Hg6nGZ%BaRMCu&f&OBYF9S{+gpKtOl(@tt==w zS46xW8briTX zygxJpbiV(jt=e;|o+jpZ@7<2+zV4isHJH;=(N|35j08Z*DuD)`dLJ@mNmPKr2??;+ zj{AcRG}tz=97*tQeUei=T)fCRFp|*7;2e0)NLJ6b-(ZE{!f9c})CB?+)bL8LI^7{| z5Ypf1@^A|@G$;%w{eh~t3X9txWpr-OH6T=provugIiU(+0gc8bc2vn|YMY_y0Jgpv z%%~e_u7&Azx7gOs2W9gE$RGQbpxArH2j{7znjVR6koUt=3u@=|sUA=BccN2=y%4DycM8 z&oHiZq^#0aA3sCYr}N!JnI#v>NhxHi z_q!DM#IUMgAdrj6Ls<~GqQg})lPD)lJwOd_Y)%EAkGYnSl#?@_wZE)nahVBup%U4t z4z$X|P4Q>4g__GM(CS&Azc7Ev(O)BKJa#rNvlRQb6r%I6vO@>;GUTjzISx5BQrw0- z&8e772ZlE`EP!rq_ih3caYg_b$?=^heW5>s=vCl$M3e@f{@lg5j8G%!$dTd95&P_n zEqQ&dthWCM-;MU8vkmP>r()T-t*U-IZR z|Ek%WYL4fb7G%;$!^(w`o{HG;=3G;lxwx@$^X{a5Gr)=uORDE}sYN3Lk6Iur5Okhz$JX6DvQAbzOu($It z^HOLOF5VFl8)q$`J>x2=u9Q;2&bfd4U>oRHx5)UrFWE(|N-rN$_jkz_<%jMgqvgC! zrU*S4sNAG0QDh!w)leqzTg*s@ZP}1*hB3FUxhv8+)^n~rWOtgY$1zT zBGv63YBlWaxYo_Qp0)Gn_^Yei*>8aXYk{vB={HhzHt2K?tgjvbd;k+2Co?_fq^T0( zZ1WMq_2NYsjx$ebK-szb&RK4idKPma_CFRYAPCzfxr%xl~|f% zuBUZ{cpW>EV<}NIdv~Dq<|iG9cJOlv{conR=Is2s_Cp=yt>;*AJ4SbxVW!uq+GUdD z73dTphvKdl=OwpNZS8rKzCgUBW+@LeaWxkothY2Ib4RZ@W5@c{OU;iSJxotu+VS0f zneImr)8DU6&-x!BdOeyYQ>|0AN|TE|wT;O?Vk+2wj&$2pe-xx#m?s4w@FO~j0qHr> zu0A-{w3s{csKSo&rB}_QCZN-6#ul8*$PdMRwk0E6%dMN%E10u|ltB6iR~^%w)_-h2 z`-i?5h>pOkU2O%ewtkbPCk=&zZtrCat51lr0VB;h80oW!@P!_5)L5fdXIdS-uk>?!LL*f5w+!CyURN2*iu66S0(!O~kFSH6MT-@J!M@kY ziUd{qK+@Ssy^kY1!g4r2ZKz|QB16d{57rMW;AQnG2QuUk75>h5rP=c`Ah(sp{Uam| zfZEm8IXPhprz`#DOBSCFP}iaF zso%iSOH#Vh@YvDpi7yf-b|g4p}15{YA{2^8xt-aZNFRF{t>-`A#0u{GiO`W zf6xdR*}r4Jkdvk$;%CAd1@EZI;Mff7+cC~ye@?m0Rf^5h{;^POzkS*I=7{y>fb--) z3Z1_^Q2VVFD$`j!av9KgC%a5enxqCF$yGtHaYS@Xbm6g`Zd?CDsnpM9J+?WAG7(dW zbUC2dytHxa$;#nsx^hYA?^3x!&$(vj_u!)4f+b|RRjM*G?=&{U6z#{dIWKAloX_w% zxho;@>mQRwvXz(>3pPC@xQ1*%zkmiogyLQ->nXx zFw{1)nmz2N8ELA{S5~vgsQq!p8a#zQIXv3qTkH%fs=7HEhEhJ?E@aV9#HMx+ZX$d_ z%ky-?vOUe@fF)}+aYDmv)E1Satt_0AYZ+&X@gLVhdDGYg>u0Eu1yX3*p zldpN4Cknaw@hCC8)SV!>{Y@YC_*&sEgM%oP^a*N5|D&6BIgt^8?!mSU)9G!JGbzgV z&n>I&>`9>;`H^RIgEiWYH`gyBMI+>3R(0l{Tx5|~Wt)asv#;y3iOrCl);IJplJiF= zHcs|50R)1Juas{~t*?E)xc4Uq)tukfD`Buu^}Hx+qEO8024JlnlEiN4XF%B!su$MV=I1J7Adx;&r-MCL?~6?lZf>jhxr#sWPD=6plHlC(Ti5;( z`T~He<(jjHWl&MJ?DT(M1V^%HdncsU$BIUGcZ-PEqhmHEpIw z>su+2?gb)4mS=suPViE0q2C~sPXM{Gzi5p$%Mvx*Be!+wXI=({6KSsmMrsgj?e_Sp zldrovMnawyPKACh4g$iY;YraC24?izDC9?AdLl)xpuIbGj>spzt+;MjuoLO|c{Z&3 zyD52*ZS$SGK%u3b{tabF^WWT#6p9qbPcP|v{4h_!ymfI2Sz?0=pb;vkfc&_Mx>IEY zv>&Jd;H^I!vIK#o5RMJLs!}sWCJia$XxQEFddXH8B(06He}9;e@X7xYu(`RcT@vk- z|Gd5UYjfuF(LP1(_U8PorozkO-G#*{x7-;%0IksV(e|gOg175l5jr9{I~!9h{d{Ea zS^^F!Xv zyHh%b?nXL?Zb78GyQI5wNJ;62p%D;}97`V3Lq0 zSM?vEv>@DZF>Nh)o=c_uM-$P(2-LVqqdH>MV4}Cyc2NvAtkW*9Kr_XO>~URYML3;c zYYE9~`j$D>=yhzKi4!F7ZYWYeC%UWBB%Su5gm()4c5tB|XbPuE!>iJ|YM~_>y=NS0 zJaix*m{9gNvCsO+MWIpovjK-T?CIx*(BxL_v869`UBF^ ziktiR`U~)U-?=8}!&!f?Kf#$)QUfS9;s#W|ujOsMOo#P;a&kqqlJe0G1*F zp#NHM&T1v7tXZ9D*BFj%*so2o@+4C)-r8IxrN-tKi zyO|rz&e3Nwb{&zCudKRYTRk?!5JWvD+E6xs$H|7yzRTGXJxC(u+B&XE9M@92&MQC`TQ zU0dZ>>d>_|VR{%7O!JW{bC#=b#ieFcx{GKl^dB9UwSm1|q>W}xc}jbiFlop=jcQwd9T<~LuQdys?ijjW+8i1^}2S&mV`7$VsynuNY|acLS|b}~YSjJLAn6a3~V zI0|EK7$j?xT%CsESh|`9tz2(Tb(|=Mn2b|-1Xbltrht061gwZt4`$1@vwFLSDwk!)gJgpSV^yG(*zX)x z*8vFp`&9tq!6d;pd-4-5nY*gNbthFnI`I_wiS($2&gQ2m)c2&T;G+wH61)2NlI5Aq zjO=GdpmxxS;`?(=rR*;z)^SE355`F2rM+Eox4}Tr_QnEE32%H70CCZGoW2|KPq8ez zI)Cc?y%%JVOOU&%d2FELU;X&7gJ#vUPo?mOHXhtw0sBzTHkI5p4W`P+%oo7l+M>g) zKOY>8Z)3N)>fWzbio1i9E^1R~_hrvBuqvcZPPEeU8eBjqReV47mHRm;PE(usdj&?N z6Vk`R75=2mmMY|gF5IR4wxm`qD|s?Kt|L?3hCWZXJWyXB`(2o}TQt-?88p1TPq%CC zPDnWXG-sn-h_1N-@FDb!s{p_!l6_x#TOCj(b5Uui9(PL!zm+Oa!evW(#LV_bOGg_J z5I1k-Q>UC4D~Nfr=9|&A3dzg6(m2=aZW=M!2*eT&iR9Qkdpe?b7)(Kr69$?J!;zXP zk;DHHIu1er@M#<$;}semkWz@+7Ng57Nh;HxN$S;Az0HT_o0viv5%+}bxU66QI+c2HHgC|G7RL;$zjo`tCy5!|%J$*oF!TZ{Ul5$*V zVuIfuJy9b|dlKhP;+)QzHv^_vbJA=&E1dAm5%8+T&${I5mqApTNERD+bl6cg-=CNy z7g7e-j+QKD*s3Dnhh?hWU$D=S8g^eq#f~mRe6QBDPhs-qO=vJwyQH%(w<-I-?gKE* ziwkA*fMiJ01p4rZKW*xXZ+Iu7gsfV==~=~XdYbdD)(R@RyH+UjbKhC*u}CNjM+3%j z7emp_58IO12}yU$WcAGXZA#Z$5G4b)Yw*^~{|p#Cp-u%5Cs4)JUfIV@8A6$ndvuSz zfTZnDO%yP>H9suN8e=WiIZ5_UQtJ+sDSIk5PyqaUg5L&!-#9yp`jnB>q+@C{-=m}# z9}9_HNk|4|>_+WANFJ{x*vA$h)5Tp!d$EuYQ5aV5kTA<)n%~SLCC?$XCOe=sXC4kxvbZF5Is>;(%c$ABVo!E?=9~1eaTPbQ^&}SrMSr4TJRv(@w01D%szB zsImK1dRTUo42a1^pshs(c(DMFhgM5fnScE?!;K^y8q5m&LFa<_GZOLfi}7;?O=>`T zGI+O}{V4D&qqp>zx;~EP^3!&r^MOkWznhiE4l&3auS& zw7Stpgqz50=EzYg-*l>k1j{X}JCHOjj$DXGOjG^t&p4~9X`f5z?qYKu7LT$dL5^LF z_+_*kbk(?28_6q$JtzswX)!U!{Xl1&11`ZfU?x&O)X`Rnl8D8dcMOo-=|WUVMH`}% zqkz{rrYyJ9Rwq1nbXtQqw%Yjb=dz^LhA1`5>{Idejjn3__0weFxdEy`Xmb;v^ZYTS z)Wy213_H!Nn*@N%)(ZLh)?n6*pkp+}db3UbsP?|$&4eE? z`@`GGMjm7GXG>^sq_BdP1d^SlTV$HwaE-PVD+x=}6|^pr>}EA+x0=81llgTo2brD- zV_NyIhK_;|cunTsgd~jyu@0o7){f}BE3y@(wF7393^#vc)V0Nd8s8@VAO-(kT^Nll z3?Ll8Nml%0hmC*eN9rH>uhAh(F4<9zwJ@i6WC28^-AREd$cxT+OfE$w$K-OYH5SD% z6&Dj1AzMJkhP;X9vWmqWJ~NLlxRe8yx0W9F`4*LX^Wxd(JbAnc^R6Ktmnx(k!|W~d z4}-2$4pXGSZZO*Tj~)DKG;EwRC4y^W%NDGe37FF{t!=G!MxxV?^{JwctkoH!JjB>Z z7Rp$ne{q40zLnS9$iL=){+(Y-wHu+3n^KpwCVIUQN!SpuNOvKn{rAnq2#Gcqu5H(Z zqteci#_+Hblnv`)#6b!cEUodfz}Bke&;e!Du~ZZH;Qw*w5NTQ?FgvWfMqyBUae1~K z6)Jxs+7x99Ou6rV68A$!f-42UUFiU*k!~E!@R6e^BF*0qht!_&ecCpVp?*{37ZE>n zNHGJoyy$%RMwv!4&c5r6-gAEoFsQHYzV~ABxT?0s=-pH{|Kij*zU-Y$M>!omX`I&f z)aIe_AECDi9#BsW^bW7l7HWSYY8$8YV@bYNRC<7h=*aU9`6%$zgAJlXc34oI5HPci z=YuzibxS@xt@!jWdZ{LS@oSFUwP7@@0W3)cA9hbGfekWdj*g^}S}|=^E^AnjB15x{ z?Y$`J_5HDlqztrPAcZ$?GJNzcSb%8p!0CdQ<-FKKmu$#wJ<$#dDA{E~h^Z?7>$Zb_hRdfPw>xdPiPt2b zpPEI4Ap4O#&rhMep1I@i2&i3Js+b2ygluO%ufV)!Kxms^pwbDlbgM{xMa~?{AZEgl{V}r6;%L*XJN&fQhdoigym7@>u6?_y@#&rd*1l78?3>P&# zyZ~WWeSKEp34tLw`5&d!kmJI|sT0xLUGIY`&q!u(PoM|- z3T_vPcp{0=IxUi^mGh6=3$O1Q_&p!dAGcvzHV@Gk{@b@R4LuGUe_=x{ztr>(Nr6Cf zW;M;5vV%Pt^=MaDW&=5;Y>YhEi#V*j5TM~8m<>Rzm8&1~=H%8A_I1QgqMzzFBiyGk z;f_@<%jhdarwW-L#ULo6+_BIYwyOaff+KQaXH9p_wwkTt1@U@Oroo{Y)&Ex24<%Vm zSBQ3BsEpMTRs5rw_t|lzQ>%L(I?`0(ToouKcMPjr2LEyHg9fH9GMiF@R3^eXbswuoHyf+ZO)i`>7l25dGDm01DWh27?!R? z6!@Xd%g6H(Rsnkxq`*$%!EFX|MemO*0YvMtD+vH1FVAsvRVDFa1Rx4%$9$yEklmy} z<^CTbUjRabu>OTT0AK{oH8~>(U}?CR)V8(+t0XyrBQQvbjVsWZj_B)rP_;Dg>ui(+ z&(9wlAR47jL<+rNXXlKvz#spxuU|jLr6x}j#-^DNq*0C%v)USVF-=qs%PB?Kw(;=!CE*E#hAJa+%TUbL;FX`XA?!Tu51lMxx_r0%{&&B&Gjd9pz~}hkBl%ps^U){AgpYUa zn~~ABtLN`!IZK#J1z;_E8^rER1;xaL&5zYvVz`sFaSzQ<^2pdoKTEIfy$CN50!rYO<`;WovZtNn#_ zLmieFCWu}WTYO~>4`2n^v^BTd{w~tne*O*Z6|4nozk3@2@G`d1FI=30zUUFEyCJHY zN6`NW*}@@E@~wij80oU2E^EFZ>~{tiqzosBW$4~);ze6pqAFw zCEM@A_^a!!YL#21Dh51A0_CYhBp`k@`w!q3mrXguLHH+itk#4?Tnio4-X_ysNek9 zG#B+YW_|lc`??J8wvl>xs{!!*-kEvX0028}rBW>FkDNV$xKB88p==;^j5wdT8&s%h zH4;Dv@Y7+FQ|7{GeRi8Pa{mb?9e^-EHLYh1z({hfUOM?AEui`npVUJ311?;h<@-*L zWF?dd#@00IGb`+!WBC{58i8%6T!~_H#8z$YpW{3VMAS{FM6*!&Y0&sdReCisrzW!d z(h*m9e|qx9J#5}ASFii^{(&qxWv0y}AU4+9WTmu(+J4g|9n!f~74 ziTx*+GYdxG5nA!5VU++L7&(brM8rQpjZWj$$Hj?Gy~3gmRUcbBo^4onq}?iRA8WAW ztSjGrn5hyS_`SrG?dE)Xsz%~Y>t*ft$np1!)Ho>neZqGEvihNz48ny{9#4*vJwD>R zpv|}umcef$+Z%jq-hmd-%v%w@AMI=pflydZ;f8hFss;do%sHOl{6*_3eX42*Nh?#G z{xvyPj*u??6PE&Sc5Sw@7aI)R$rfs+QdALevK~lzi|?%;&kIv8p6kzCqr8#S7LksqTAF;lKlcAnuyNadIn*tD z<8m99Y(OzF*5bk*(~_qdEoD-fPWN;MvcuPrA-1SN8&iyStJbD{U&YFcZC` zdT!p8*WK{-h5IFYTC5K{yqItt4O8ifOjuMoc75z!_w#(MzVm6p9Q zD}`a9FJ%Ev$lZY}Zz`HpEkTJy>5sO;N2;T^j4xP!1P^tR9xE?!5k=ys1$)ZR{t~Ns zpJd)gFOq5csOI$<1tL432(U(92ziVk0VD!tfkx!hAgHn28u)vk;ZlrXD3YD0KE?4mXbSG#p^`k8SA z#5!^H<_c8RJ_%3Xxtm&AI+8<-EH*GzY9jl_Zf~~rMIQ&eSP*)vRhSM{dwLSvekChi zsu70Uie*-TI>DT%kqAy%v*sXH2GyebJx+|#}i(oQWFR(f~jm+Sx%=vl5{Ozt@^`F z)1)M7ZI;d9wHWG&e(%3VsxmxXTTZ=|E(t`vZB`a)#{Vw zkX1%jzQz-H4g#R{ACJU_xL@GvWM*RGn@>mtWjijCt^_7i@Ik(r=+@SUSV_IUv{1fT zeN(Kmg5dkP*P$rPp2`P)XPg#UvFdOBE_4kX9v0B^K>FN{?bp|~6}dp?mt%p)Gnfl( zxii>i*+s>Wq*Eutf;;+c8|ECRMtq+jtTcpztXwOWNq6F z9fOa}W2T#GSi9V%K};`Ys(xDZ|Cden5V{w=&$D+TIP#;51vIrHcWwH|_ro+4L73WF zgum?w_$IbAtUv^px+$>Tb3`0>C?`7*?+>_8fT6>dwAILm!o8<`+jl49klf44?Sb#T zj8en&27MHe-n%}C8u`Pj&5?MSL-cgu#_2j@II(w%oMzApeg~X37wL@kJgp5Y(~tr& zH;TLQajJt6#Uh5hj1F<$apW9HrEK77&Smr~nbb{$;*8_xS0b>Bn>g%uG-BO5)L?vL z1FtG?J?CzxbH@;1g%zeP?sK*IVT;ri4YEwPB~oy%!eEKE`$u(1wVb3%3L|WvM_GG1 zc6<@%j9eXtKIIVX*u*=+RG!?B;$!h4_TLlT;->%du(jM-pW!@W$VrHVK1yh6ZjC*j z+kb?b0Pw4PYxa9=_)19K82@=B|4iCeWU0vHNpLfr%*D_9UF@g68@I z0C-$HKB{-Pq>RTwgd}Egu{n9wBqcIr16)ZZL0fshv9ksnQgEh~?%rf*a5q{8#qOo-|Xx3 zaBy?=fT*Z&<31SxatHt*@#hD&d6j22H%LwJoYw7KAPi=EynWl`$qc|&bf({>Of#<_ z(HK%pPL?P)5c@1X-M!dVRq(rVoYd}vUDz@_O-OcjPEgSHAD!7r=P9#Q-l8X#r6T$N z2#o^}rpZ>JzT~AmMIwPDRE+Ui?K*XTEc=h5YX0z}Zv{(L$fyM+fD6k@)Jl|F&shYZvSaJY)k$vH}| zvx1|b;)TTAHH>X1p|~4uA4X*LU}W6Q#{zR%6VssCT;5;w{EyIP z5c~+mI!Kv}Tsge^O|~5sAGf41a|SnngI~`}hg?*06SRC%Mc2g#jfx}NDgyzf1EqF;z#Sp z<<#b;M&Yzv>zS>pP@$$USRWP~(0^K9&(lO^o%mJ=2k5@LYgCkH-p;}Xykj3T_{m_) zZ3YR9A&flgPK#ZbTd)CYa;IO{ah@38JX)@9D_PVbh8 zxujJ-0{^tXcGyNwbmF%uYvNhM4i}M`&~FIi0B33v+BDoE!&>=Z%o$c<BAWBIyJ>b0dvR zw^LIgiuhqHoFj*IMA>lI4GSCou?}}Q2HfqEgNTT3IG=Ir!DmaD@{CGwgAiH-8N^M* zHS?9=fL{mZfO+SR&uB=4i}t_tGa~ZDF*@kPjC(Wf zqPtXv2U$D*f64UeLCHY>D>hjY@I*)yoDnQ42;eb^uFDhMlQ4C%t4@Ee0SI>ezF*Pj z?Vu6SYNAq9!?Iq1E$z>LAW)&2^)F1sH8^W=zL?S&Ws@WFFS4W>)>(nnJ;nfIPLooz_h&FeD*9Aw1!W2Bu# zt8Vd-ZZHhx2|bNGuV0OsUcG>M+ZS*)<$!hHZ^ZUIi=^pR$H*yhp0=8fO>UX~BXkTv z;C&l{16gELktXu~vp(D`nb&dFH2Kz5@m^CD>VoH~mrVVC!c-`6i=2U^ltFy2>$^>A z6?@OYL7#$sM$1Cs1&a{ii#ohh@vT^7zMPiHAcUl*x@Cfm7&dF3>58WFDLAW$4bm}Z z+=&BXJG7R-?_L7E)S6iw`qxlU%=eDwDDm>F3>;)XRWXL$wZcviK#sCm!*nCkir0fY zm|*K!d_Cb#at9Wup6L>zV92~<=#zF%y{yX)xjo)6`DxK`c1&!u&~~5|#GC&9g%=8y zUFwQop)ZY>BIk-P1A<8Xjc6#-n*Z76^2(MgTu5O3YEqWe@{TeU6d)So2{ zyKiQkX^$|44I~kXC7p5w_yz8tByWfc!%wW^NFuvYdmp0VP2K%s%LW?MP1#1FP@wAjM0##D&K1eO$$QoL1;B5d*LoT~dxPx{bgCZ{H9z{`xG=X%fG~%!Je-b|H7>}R+;h|ajR?j$7TWUPsQg;6sw$vBY zRnqoTt3}0SQ@kXQO5Ud@f6O$4t&2+M~rVVcJ!G&8+l@TN>w~GzqkfbAoAnLFECYt zG-Zh;%ysN}VT=E@tHjyBYkeey$>9VHZZ=af&p=SA9S~AOcs>$aH(o(+W~5CZm!c_Y zGE=D^14f|F4El00 znoxTYb)(pc0MTLZm|rU<6v$M7K{Zi%Yb7^5cK|5oK=+Q^bjuX%?7M9u@DC7Pi0n%jj}>84{;k zhA{Ne(_u|(y)v$)I48#ua^J;gSKveoT^xgS(^?{7emkIKFwD7VF?%m78*7!2*Qt6NLfN>2Oqh!mQQlGzd^UD+%+*t%*E)_|i znnj?tTM@+s<8W=Tra@SZRK{(b^r8X;36(OdHrK^{xHS%yjBH5$3IHdLz?szJYC^pj zrCHng(Fr0iBju3OQPR=%fhWKTm1stMAA(asOa2&I0Q8u)j?N{f= zax=H>zo}tVm7}a%-gaW~`Iv%pa*j{UWJ!m>z}magWnUsCe1_eE+F>DESwn*e!+WfP z#4!K_tX;`>yo|_mcCS5L&9Y*N4pgwy`gd8lH5hY4U~XvhDL%>N78z^zv`!-I9-9XWS=;RtG)iHsaYP>zyU!t+kyaay3Z1T zRU~Dx+Vj(C0(B@`g2Cz<5r%=pTr?{3q#!(emT`2DBFGN)_a!6s$6PyfV z#iGA7>!2RgAyCvh0{7RpeEbf|*jRYo527qh?BA6(!f5?8`m6(#R#dd30P9LLLP}+L61LYXQil=-4kzdRwqif zf4l!!&_=>BNI3`q`&C;FM@#sfwfH%>(Xuig^;Z8^utu5tSNI?dRCcO3rax|r0}OMD z2~rXgg2C{BGzulQQOq1#n$%oLU=N&Ewv#Mo2Hi(|B5F|uxhREoc;4>{CT4d1W&pe| zQE%$_FdFF$R%J?MPTw8=hop;ZQRAPD3x14@85BIa8MwKJsv@bkcUYEQ^!H;+Ie<}> zNf@7X*`j;;_>=n6h$;B76H-}{OdNq48Lnv{P!esV>KGHXt?lD{YC|#E{(rgLF96bC zNiAqL&!w46H-;sO_%!mGUOlIM&;f2e?@jcFuu~Y=owY7~3GQ8q;}u>MnwDZ*D6JwM z1ClhEjK_o}0YA0z!Nmu~th7(Z5>9)kr=yKNTL#|zjTdv#At|BOa+~tx3VWn2gVelk z@8letr`B#GKDSno zyEb$bnVZu=EI7m4!1X!A$Jve*I|$yVeAfP1uGCRs{4!?sxwAk}Fk1Hs^Hc!EjR*Fr zr!CV|?FfS>e`;XP_F#2M9&;?rD~4~}umbj?>g@5t44~0g$HHnVM zdXz4yt8!&4OwJQ+KVHw?tj#qX#aFmIiG1~_D~gsig;hMOBL{ew67Zb43l7tBT469U z2Ln)f3m>KVCq$PrnWK5^yn$pz6;0hZ-!IlZj~uq^n4F{-W&5*mt1%tzEOb+=(vG&j zjEc{M6vKKnsJlee6sbe^q~=$9sO<4)$o`H#$>|i-qDP$sPxmlq6=f4$fOeV)K(^IrvxG$PnzNDC`F?i7%*w+GkO^YncVgAhJdk+Q3A)F&(=z*1U&@u553+Xs1 zOAr~mxeI*qD}|;q;5ZB8sA5nslBMFAomahbEvdNYdWaM9&x=NNB%X2&goSc_o94;B z?!A6uRJAJpD8Ay6`S(Q+XZ_c->FUoZqW58Jo$=NV3!hdYJ$TMq$2dT*c90|8dr?58 zm=+x6G;$U#5nT3V$-D^mKjT$}J@|;V$zQRytoPSV)cd*h%Y9O&56pb@`zg>lUJRpu z?J$^<8TF{Dr{@v@9zg&=WrKKTXe}#=G71j;NL!3&`#^g*=a9~|ec3-t@!&r~qX2{e zOZAorkvVDei5HCH_wfS=((Ln{b;uHD3j*BW}VEEGIy~mXmp7En^K4P^#3jrH7uc5Wx8flq2Wrorv;d~ zF|UTot?uu?ddG?tzlJr)O2OWbnk-=uK<-{lU%qi4%PCg_czNy8P43K6W-5I)Nfo@l z<;O}&{<&F9DgB=GMHBa9G=`tZpO4+=^`o-*N5d@bHQHkOwMSabeR~2EiO>HLnhQd( zHJO{V6z!LNGwXBG^u_gEv(r9^? zFV%XhQHGDlPG-YF$*E3)m@eoG?t;1jf@eE6V&jXXQwxM(XF&XA!~=8d+-`0iL`P}M zGn=VgW8HB{3{OBt=<#4}=9IqHUc09pBa|2Qsbhk##t_3obmY%6K!yKTGe5inktC=E zOkbxQom0wFJ^>)bCT5v`NNGDsNZ~&o`=gwGVO?mwuEpJlWfXVPnjT^@eX>!OM{q2I znD{IhgW}@#=jB`d%x%-8cFS0sZdbE#an0lXR#iz$Sxu2TWwSjf?Tjz{;~mszJsLlQ zs(gf}h=Nh_3osVVFa5@$eIWja_hQ?gth?i zQ+zs4=s3Q5R*H#Yp$ZuGUcg#T-~b7U!_8%k>w6=E2Z7}PXS`0BQ3PUn8TM57<2W67 zs)2trncs>$Ivqjs0jM*^kC#Jdw52+{Hv~tRSE{j#qm#NNU-|UKT7MS;(>atBpD{#d zdqFBmAx~0^!B*s_DaI&r(mj*Uk~kjmO93W=w!yQcL7EXW zAOFNfHICin@l!W5+f8|$ORCbZ<_(^a58HXu*IC=SaM(yrKpG^(n?BZMYEhlfP0O+0 z_tzrZDRJP^m>ENmh^*JD1?!`1^FJSIQdgCpU$}*d9CAFRzy@!Gx-@dWIBcTT;SPCO zJcnH@!_?GXw5(c)e2c1#!q2&TP%)BhVgr9LbujEmE9z2{7dF~CO(42yUth1BD}@Q@ z9I0pHz3;@v*(W{Z1LB6=W~Z~nI|hCpyRh)P7mS;E)=u1w+8)ex$@4wa;#oiZj}SBn zfkSrz%F4X^InuB})FK=G)Lv8#No{ z4fW(8hmbk0&?Jm= zKSBJq@sZH^@l6!W3P60WhGRg3SMgUrvb&7l#V)(!mO!6sb{sLIisW`6K}M>mQ8mGB z57ATMb^7qmz>`Fu>W_xIf;hls^l8{*$=SDkwOS;!SnYK3rK zMTnE!RmTFew*WGmy1qZTatCsbf+tm6YMA1m;1&iU9xcp>T+-sK%y#QRnOUu$=)&sS z^sdU(5I|TDO%UL{VOv)SK)t6i+#(cDJuX{=>9zbkr7u#sMJ#<&h@exa~WO2#@uia*eFjiC=~{d@n$b zVHtP%JVKvXw$An-eE1n*=mp7xRj^xp{gF7T%lq^(wsR$PxtFI`gb|28Vw;Z>oBj?0F3} zeh}NBAXX@G%_38Q0vF>kj;}aO8a?Tedgo&vQK%4mR*nF`Tf1wzlvJgA%}v zi3@+Fv5BaJf4u{U1<-qI{UKM<6bXtanze4`*VpEWbSLD8k}?ZDI=W_D?N38bTO)xj zlHc0lOqz#7kb_^^m+*5LR7jUeOoW^~2?*2Qb4Mu>TetT83^`2N<}M4Torv%mm9>@k zb~>{>)zO&^++MD9PE@xP$(S{uu<$^t0%^r9_10C{Ac0R~_;Z$gd!Rn0xD%KHGHEuT99BysC;&nS%8@B#PHN6uu^lX;|y{_NnmWKdZ z7Aa=--y5rd&`1Quu$^uait_8Ms;W8C?A|n@UG?uKfE` z&CEeQN)FFF+?F3Sq3NJK#L(tvcZ=!9&|Th@;ifi16{y}W{qdLl=z$1s4^ms%e}onQ z@DprH5EPO{%>&dogI5L`{)$FzqinDYkpo|FhG8COH)##63ssD4I`Nk+w2W#)w)>nu*b^C zM~c5R)+*lYPYInWb*-+64Nq(RV{#eoWpv-`3IT8&p^0zN=%0lcR z0>QMAx)!nw5{@61qL#x%O_w`q9r!m$AFaS|iz^}GN!3ZeqqKLsW?Ivu*nA1MY8JXpUsNy#1NFwQ__iKt_PhG-|FJw%r+GXK;!Q{`zcOnOJ(h^CO^SRk z?yFG&0FV?7hyl3#Zu5n%8W_q`5v#Zbh$@H8OQ36zdZCW9PWF1SZ7VVoO0__Td3Q{zH~L5jJJ6GfBVn@ zGVTqZ1{BDmu6aNzW@ZtCA-E!`g5DJTiNx+UEZvn!08sq-vA-W#&KUAUsoXU^&8-q= zZGV;DpllwYv_%KADgG+d6hTZp%D0>B5-r1~JayCE#l&{8g#RF-S!ZzYikFb5isQJ& zzwcxu%ay!ga`8RJOa8U(HU3t#dgyY8bovjg=g}pAvhD7i5{3F#{HILIDWn}KrEhaY zP$utUCqpg>M9j=89xY0Oeq3f}^w?Ie%t|U?%P47|#q#h*%fvSX^A(RSn5=recv*|( zTUfh~mFLQbT@t}+cl|rGhuCfdr6cQ0vr59sIR1ohN0%BfjE zI-2hzPBv-1w~u)SQphG6Beh?wAvtd??s5>EC5>XKcQ6L@~%JJ$<9-%UdAqMyWssxa?%TmEmEp&8=8}w$aA#C{l7Wo zA_zg)L>>BOV>MTDP&21?MPDM2etT`hg=Sasg%TX0Bz)*0j2B3Z7^Us4AdT3HRmd*| zBzg6)+TrUm(CK2Q`o81tmsToCyHHswG1x=TF&C9ziYuMj{5rG_vFjM|wlGsvoh{U? z_L<%0gN2^HBF}F1W%~5!;BmM+b#=ZOa^6~tcGpP06g25vj$ktYb`zN;jk{6Knmc}s zU6~Pz>qctaWVUimbGD2K<|OmEq#3H)4^3KB*>m}iPi5xfy}eFK_vOva+m#yZbljd- zU;mh%`N$i>bT8gEBSDJwU(4%r>*z4IoD*H)B-mVh$0)xO4y1)ou;U^XmmHy}M|q93 zdMaZj)}frbWM@u%woFIBcC$Tg&`6`8yR{Awb{eP-#O)kEjPYa(1}}ZrFY)<+b@7)c zkIy2fDB3dBss%S=t!m;e9qD881q)*72QT5A5@7-qKwm7UFV0USvmKd-BoS(J|Jcf} zkLx;0n2Agn6G4gM*VPKObx*aYLISKb_*;{Xv+7ULpSp z8V`aI2>Iqfa(InKHGXeB1>e|c56L?8zmjfwjC^5Hm-4mE`&&Y*MWZJ2 zGECGQlgflo%{CIm#Ho{aCG0uC>MF%$R(9PuH6SGk0wz>^jVQyK(H(h;?>(w}F|u%| z@{8skZ4%I6Ro)@ce_UR_JGO~Eipd6)L)?vMfpls8+99iy!#^wv!p&(!(CqK-MMi#R zk7838b1&1baxs4~zFS!-d`%X0;2EYT4e>sECr|VOFPTpD!@`zPKYdb-;`O{PK}~za z?c*W2VKu3rmhjN&5SZCpqR52rmO%Z08S966nnOcu1Ns4gsY2FTd zs6Matp7D6Xh-%J5rNyI;2JIezc?#$xl*Ob>QV7)ZwpoNTsLar;oa2DNg@^eyDnO)dLvu9NDlZr=zjT5au zQ`O~v#;Cg?l}7iKlKeWQZ7cJUNxM_eE!{JY%1xu(~+}zB;9nEe+1%T8~6+7C1d4OV)$PB4_uB90T`|eXJzVGV4mOv~v&~(wJj2C9)2wJ2H-E461tZnJV?d zXJhRx5km(Cc0_zcEXs~~bq}(1(nWu*7T1y$)S zY*=@Ybc3;r4e;_!w!jU{=P|oLr&esUJNwbcNneLn(^Ekw%wE@enSTK}Y{70Pk@X0f zw2YMAVyO167(0)pUlKzitGz664G*pVhL`>@q&PGQOilYw-BpZ>+e~Zw3 zOK1#2kmXa=Vq|eOIY31Lz9iM_{yo|SsGZnsGSD?_uOjSh6i%y7GRy1H{)yc|BfM4rV`ITM^KeVm6 zH@XfC8~gCyPuK0|glim2_wH z<@5nbgf0oollU!krDO@s?ybc1tLLFw(l#-LT0OgS&Gx*duin2Dc_8V=! zYk5e;UGfW`oD{mOzOciNN>4OW4mN@ayjp!;zd)ltsrVC=)l>ai+BAV#0Z<7E-@hYd zOJtIm>6~U*U7b{BWHlrB6ai3bmcb1x-VwHQjo6092&zQ#B=Fu5D&SED=WDm?YY<%IcUTB z*7q837^5rAE29H01OO^i?9KoKG>C%y^&b8~T$l5O3Qx1|wR-ArMEgH8-P*$awMxmV zH(+AyHY`0+pH;P(iMjJDuS89S(z3mf%kYsnFZ!i(!YSEBCGJt;W^nf-da>i!;p04| z*a;?EE$Oh}_?a8WzBeBerBPwy1$}%koU;jBt?0;n_z1dIG7d=f=6gwLDrTB} zTf$Q^i)Cv8UT$fUS#eKAA-}yjv9sr@_ji#}AKHpl&Oyv@qs}?&sj|wXYd4$+Ac)47 z%sa_;27_qa8f|{avVp0l{b?$zuX@8MY?lOONgmEJ*iq%n#d;bKs zyzLdaF_u7V;?W9}0s#7lg8?Zs5FA^UhmE0OgYO?UJ|)(aO0tczd(CbM%p&apUaZ>w zztGq{2ro%?-5*O*LVCA5!2EzTS%t~=l*bO`t~Ne!!6xxcA1m12nt8%+p4(hGzgqgSynuSNk7a-s$Q$lC(1YPC>p$vwXd zu+zA|3#L+wL&KS=qRjZ<5IVq898?cTXtfpJWb&zp0bw{ifAwJV*bAHS4&!LVROD`L zjus@mU}dGbSe&@;rDqe4WgKdi8ZZuF#l%A_HrKY>hOM^dnf?B*=RcUaUiW?Ob3W&dftH|=LW5uHIb4u7nUM|_V(2YO z$DyAF&KtQZ!!_B%8E6e2=FUpxIIeL&cA0oAkDEk>6@SmWZz3Ajsrru~_}_t2oWTW> zWjn#t_5u5s@1+n-R9n2QB9rJs7hfRP$M19CnJOKWtDW5j6jhfh*~UnoIFOxbpOuf# zDd2klt#Y2hRM~>yN&zVu@i2uZvoM*276XU#?B);z0vCR8LgRDtd2&`=;Y_U(xC%2h z*oI<(*3t|>UZTw&U%y7dB}IkM!#49uz5jjXaNSnEY+yZI@lE`>hypy`vHtwo{70=i zp?V7DI4TrLbVxEK1($gTaJXkTpkX882MFZnoLB^UV*wwtyGAf~D>aE?>wRz^Ky`aT zLR}nJIBazBw=)5y07yq1sdNogIQ+ENQ$Z(M;vC&&owHO?y2|7sj{GV|q6jtWeK8CH zVdu#Ckkg`?QPE!BmaMZzTo$V8QGyd)&v5s3yC+@dksm+gIx~yXy>-XS4gBaPvOM3N z&f_ig3|u!le^YN#p0I(^GFiNQ{J%6dfS!+2))qfbL4<&=Vb@+vdd)xgWKH~l%Q;QT zo{t1(%#+`7Is)9*!wmes(aT@fa&o6l7`xxAghmKo;ri7BwSJI+*t;Gbo>}I)e4gc& z!R9Qf4cfNRPZ%hHLqB)KI4X{Bc;s+$r3gF^1J_x&{MxzII`s4Oy96n`e7R8y`Vaq( zs*HF1BNPIFx>elqhf-XToiGSuqpU`Ca*H}i3Z~F2pW@mA9Rc2Wd!wtYL6QxTRc;f4t?sOnL;TrNz}vtdG;{aFQ-Z!}J=6w&U>4O^~5YXss7y3Xiau+V2%> zoLNUF#xMUO%3Ndm2;%h!KZi+lHBB>x3c39{2>Me7RwjTz-97=;u?xT0t{p8QQ`zW; zB0@+cq~>zsO21tx6T@mYVb#K(ts`-H-JN} zoG@!4#FjK%@{{nNB>O)@J0a9lef>`V; z=*xzf9O#f@!JZmix9P@@;5gaxS?Fv}8OvYo&LzSRtmDozZEln`bxrT0JBu#eL0dB( zw;dVe02otInCsB$uJmO!OGkmp;hV+?8*DD&Dyd)oD?hWo+@y~k8g%R=+1*lVSLK0> zEA)v}L-ET=|G*l-`%f(j%5%$K2ED!DF5> zN9l4La|dQKg*{YqumG)JG{5qNlsk3Ivz@F?`o3)6P_a<~n#{GRls=M9zQMjUhLmR7 z?PEhR0xy+JyZN3Qu>&hMuM=H;DKv|07|QfHQmr15N3Fjsd%*?anbgt`8$w0Rx9EOe zMtKu)>7XN*xE}iL!%?ltSlu@Btc0=kYpMVrr_ygzlUy>knNg3Of9J&Iyr_{flSZqX zTobEMsE@cL$aq!ZC=(`n4Y-#bFTG8k2VYxv+9)n6q=fj3a#{|+Jmc8DhGmul4)?kUpCQM78?*v@^_MxYo%((w?5yV`Dh=%J>_DgI;Y-e_ zu9DE|$G9siPf$>W`T%4j5NIODEv`^}ve(mh4T~FYBdzGm3w56Dk?vB0wy$h<81l%p zONBEB*L949joU%1uR)Y#oDV`_6{jP28CH(9Gr!S)bwpEZg*E4^e@=unHX)-;wEkw) zFN%vjBTkO|y~LJ=E+}#w>9=(p{04Lx-srhh6n|CQ?(wfReuO(c?MF}0;q;;Opx@TI z-qA6c9y)!oS85AO2opv9&Eqx~H7!4l>6dSp-Ua?4s`Pw56YV8&K;yL2m}+seXU#NSaf}=dp{3X~|&) zNc!#xetPeh`O>Wxd#}Cu6;yYK2GJY@kUbJcKe+k0rEZ|O;sP&dB%0V%rhAl%ygy`i z0+25xxun7MPK4yis#4*3h4f#gmq}f6N*0h|5H{g|CT644#ln1Av#^!Ga_5Y==f=3H zl8L?iPwF!O?$9*SyF9~^lK;*W#C}2;YdP<54zA_kNnvh(LSbA3T`~^p^i{c6QIK>9 zj-Y&cz(R&QkUPaLjRU=+eYI~=p#KE4euGa2gx!B0C$FX~C@645h6h*rS^1w7572Gb zQE_7NzK>@QIvc-!-2lDn{Gr0?pnPoe4$cdv>O}hiQsLA(LK3dUSpatJ%q#;^h4=_n z`=F`T2~vcJX?D0F6T~?On@=iu6h?-_%OIkQ*#;B^qP~|(Al4|N<8axS=^+B#i~BAa zs|zCAR?-~jpVi}=E+Dfng!Sl2{gkvh?Y!$|YBj6t$f3hZQe}{lVVrmF_gj>zMODwc zN(*=WT^<{f0SppH--@wP=LduqA&N;9v(KpwSc1qdu9++|C|xZd1V4GeR`yKENXe3j z8jNw?1!c$b1`cAhEN1P4UPV6&do)DaYh$_24s}xisqY!^{B$)Rj06f~ZuJ+h7(kX} zDF!q7(B-hPvjuaJ2IIhi{W86JS(mmxqGdSe$8K&wVlwu(&Z+5I+CLOKgR6K zIBphZ{;hJ`V1pO0-pd&_wk!KSAQK^jOANKoAD)kleRtgY*Ub zKF27nC-z%ewIWN1X&x`3zCPRT6ue>}*ow{GUcc%A78?lwQ8Qfnv6YnWM$a3xA=Gn(2yMyRy zqM#%FST8fCauPGyc5Y70@-)rOBKu?tUwhq2TKAYw+LVN$B!0ZsZ`T%LsivK1x+REF zgd%kINT`A!DDQWDP z=jO*MZv?#Ji}bfG^aQx@K5Cg$YidV2=!;>>9Ao0PFfz~5Fa#TEUSTu$ipD;&6^r7h z%6mf!obIlV_rx!%RdEE?!hLs&o!Qa-5&w`v_9y!ab?h=f1v?v2_%vbxReC|LGy#Cz zVH<-h|Bnzjkwgo)d5z5Qq*+enVn%5lZ@F$(RotScg6#;-(7exr_ZH$02vLi6?&0w6 z1--V5Q6Htywko6tD_2KV_x1$>he6k$Zkjl;6r#8;qljcWWH#Q6BL9pu3WhdXzptv2`(4H|9?3MRfp zVn<{MrNBKq>_`y^cz1aGco~-;S{;&M3lZ07 z3JC0O;`#}n3RO20e-{%SLW*@rHDkl@dqe>~Z3aOizF)PP-vF#EgcQ}+h-Z%fVah9s#%y_mp)CmNDn-Dv=T31AOtG>%DQh^y%> zCPyj-a ziE=zr3Bukt9LT79Z|sGKUTJi^$=gui)pF+z+S!6my{~9vOJVXK=9!lgL(0x4MZwF% zRfDrWxn80*KFu?Ko%z9c&yf?$TvRghvr5(nvn&u)0m`>$@`kV1B8i&h^{!6Oyh*=2 z)$!Lr|3?TcQ;_9e2isU543YeUz_RVQ=5-UWkOU)`gz@1CyJxz>sj~ptIDoM_zKQLZ zgDs}EPR^2yKnc7bF?`v(Sh0*S6J*#DF9(~Q-|3%sbxAb#>T`wJ{YJq-S#Lh3vQ_QB z{z1sQcypDnSeu}#*H56Jx4Wy|s~*k{Vw!v3N%Kd(G+C#^TL)lezqmJlf?j4hw$fLI z^B)=Zk{O$AV8>=5gXJXOy{Xf0Cg%OVl^cW?q#(#|?G6U=wbtjdAJ~5Ue+f~dZ3~T9 zsFfL#W)>K$o>HCR3 z-rjuli{8GaSy$2~nO#|>sOV?dbj5Wy<&XnRQMmZlXpS}%DQZW(nfBUkXEo@^+1RcG zyxZG85zSImp>sU6N&CHVx1S8g<2^8wC)Sb%Zj8O$S=AOPdGD6xKKm;h(N!+&JG|!V z_utt6XHL0_tFu&-Au=Nwqgdrdjt6Co@dU}i;uV;V zt^9$*DxPP9ZJ;09)HxU!MYnNyljjElfu-XL-h`@bq6z~^poO;xD?i)l08I+&95*Hn z6?QG!HrLF4)DUzW#P9^HXv_21kcta(LZo*C zf>{ShvugI?x^u3fzjn|eOeCtdY)0*%+{tSf)F2lMd?Dwo7-3{5j7A`}R%cMS8Z*(G zt}#R&Ea}&W#3wez%aW>75gV!&ALOsuT$-CTsftVZOR2eEx@OJ3sN>bqvzY?NlW;8_ zT`m4Fo;tAt*BGdDc%iLr?d#*8Czf7yfIG5=q`Mgor7Y98wnzI?4BRVcaLVSQWWlYc z4uOtzeDnb8hXqKgEDfsNi_OT1! zu*T3OepjOcUyDKFqaDegeJ10MZsGvGSF++Q5MXB ztkpcs<`+2J3~E{qZ6`k<2i#nUlaf*lbj1onT&MT~W|*8%?DM*r+9;g7g}--Qln)wy zmjZ|ddL)(Ad>Nr=xCq<(_GwZ#A!$Er5@U_@lSPiG*XI!mybmpk{(f*LY}Ex+1xz4~ zD~@T}>kKVTLiFz@R7*gpQ#nK!$QY|tQ>ASJ?UpFyC3|;{ zCsdmew`!S+W@3nvZ>H!Q7#6tXbMW-T!&t}0PHN}s!X!qTo zBD??<23GEQNumz?6jl=3Bg`$6Ui-SdgS^ZaeuKh-vxCEhA)u+DsT7VS9 z56_*C4rl#N>wEhcT5FUVwGIT{o#*{_`y&NfKrdVKLE!E^RD5l0@el;^5IFK`2}~5| zQ1NKmWd0M?2zdiaD!PbzK6Fy9a8pXTrN{Q)x+iR=p5*YBWV+CSj6!=8fXYI1<+9RxXXsE_daLNfj6_E8&S`o2^43gLBl9O5 zyf&ieAO_{u7eiAnd;KYN`O z+r6KiC-nC6I(!Hfwp@sx|GYOfWYF;!_P)+$n`t*F@XZ;01nm8)oGe&(Fi8YG4!(N` ze+2y_bP)^}ZLJmPVG6jYk3F2b0A$aXIrK*bL&Q+B@fNZ{7C9yRfagrbRsVVg004Ch zW<_P+td$AgZ&O_F`p&B`%(^I2nI}_bpNK<>B;@Ai97-|-w&qpfR4>9$li6Bq4 z$+;vV%E^JB_oP)Dl*R#lF{nrZt2eF{m3u~WC;pQM#yaw_CKIt{ieq%13+omLM&W$PR7;HmrnB8{6(*OlQvm2dWjR`k&l8r-snBf? zeqM=$zIvY*RI}&!JjLcVR>;XIP(4?uvx(5f(E;&q{I=23g=#SCrjkZ6dhZuLSZ5J#tHltWvaU#%N3?5*|}yQrx9K z?EeVS0-!Wm4(!f|#mvVI>V;|jP`(v;%(2Z4GbA|weZqHT3vdptX6epZ9T`K&mR`iR zGaueeMdcQ$`KkSJ*EvuRLk=J#Q$xonC5R)lBqjz7l19^WuvQ^zVnfntGvEqv zA&5gv8$-msCpU;OV#Alw#E*`2D6C3k@vW+GV(Q$|7E`(n5^k<9Ve51?Iq|7~8J|}K zukaFq)*n3m$TQHvEqMUE$=D7zdld2d!T9bBsRCY-S{Yn?Sb&f>OLm5_BE2~QOUH!T zd2)z$K|Rdkk*pm~YMYR>J?wnnPF@D-n@?-VH~MB~EFOY*VDejp%@nq+X(-qqt&tv` zjREL;X)4Ybnc8rCZw! z*1CD z!!JK>2t5U5qRe6;)zJ|EKeY`uae`%HcXg% z`d@y&IFPtUw5Ip)M{#$r8+6#DesfFeXua+@GqZ_{@PvplHz_;W$OO4CvET4g~0xEA= zWooZuZN`XG_h1QThSqZs!bU`->)NGgP{zxXQVy2~OGy5u$soMI0WI-+(}=ClB>|SS zrSt)qK)1E~aJ%M+B2^5FA%k!=36rr1$cUm_XW7~4)T>d5SOw%XnOwVY7{@P8Wm>AS zr5?12p5)lcE$GbOv}UoHrbe3rP@j!JL7m3RC{ zhz0?;$lDm@pEvvoquCi+CX5rw-Pq!w-L;)trAXy-I8^s zU8Z*lo>(||-_=^!ZQjX1+Zzuw!D29tWK$Jh=xA_a-yotCzRVNuu9d{s*tKPfJp)UV z9Nn!wVh+XKvXGj;I8vZKihw_r{aum6hXS@b=3)EkbQC`>R zz>FZc^}TI-0_kX%Y>L|jtr%cPv_Wc zSV3_HFskIma7Jl4h2T6;E}GO9_z$}3UQ2lA0(aN1p6;vCKLzizs^J7f4)6j1INCrA zb*yQ5?%*_7Vs=-KhY_{Y9IjJ_K%%~ex9r-76>WSNxL|u>d25$Q5oYQ}y|*a$F+8?Y z1>>NTT0Ia_1AK~c6}l@PF6HM4bBKgs+{PZRbKM{@%;!q__D`LMwZU%gKBXfZZWzXIcr3{u{Eq7iNz%qJH8y z7Pn7DD!$^cQ_TAqL|AzK z_7bxCLZ30th=MwDISumkgXuR?FDU_#A~*#M zJ8qp`P=o}Xb0#_>6lf9^&Se6gK4@!iES$4&;zB3T2yAY~hdf+uU$|Y&h13X6qz$`z zCV4HvnGTXIx5t-XpJUAW>k2SazCqLGI$6apyPA(Fp)dD3Swc>y%o14!XKM0K*=FM2 z%Zm-4lv1eg;6sKhHZSbhQza_PD>u-_reRj(VrhlL1Je&wW`yaiyx#^vpf~U;mu#sP z0!78G;~>MVC}FPO4|53{>$z?Oo+-FVCf{=5#XBFm*i--vybY)=qdRCd#l!T2EHNS- zjTs1Vks;D;9^^yMG)TR&!IAp=NVr>b** zOgKL-zGxhpvAJv%)|#lkoaV#{N}!NnZ`o=+2c;cV@S>n$Mwec-B*4{*!QQ;QxFKY6 z6R2K@KOxaeN&QOQRqr?$)mxc!H%+R8o2abIRt-fmL4IO225qMWe9gARDYfnx3|cq% zqwn;K8n@)-!NEqhbzPQ)KP4cK&IR=NnsIX{O+A`L1^dup2dFM@*`;EDZpoIBkmEyh ziQ~-t|vP>okxg z4HYDROnqqxH1ci)X&(ltcn+Eb%uLwjZBqPb+)n>;<~O3w_q~$`Q3)bjF<5~y;`|q( zcjBVE!mA$Fap_XKrKSK z5O)+cI9Z~4Zo6?0cKeS{^l~+7HB>4NmCG<8W{?36r;%KA{A<5*xB!A<_wvr$)1_e1 zq3iS@zZ(8II@BlhN@}=JR%*qt6~@oZM$E<;TUl+`*U2lv(6sZpr2vXG&tN3jnt4un zdB_=V?Z{r%B-}{Xy1J8yeY-$uuw{BOr|jE%k4DwU@+&I*q5`G+;rQ-HSC!Fnk-IC$ z7EOQM&Q=WhpsG^U?S~B_AR7w6i2@Z4Xv2tBe6{CYV_P38qfed#sB$Fhu8%O|7My1+ zu4q|YIfp?G!KVMf_S7#{%W9~DH`7xC5EWoi$OjsV2~y?CpE%{4cdOVF@jw2js}Bc2 zK67h2AYcwjTM2-@DSlWmFb<7oiNEk-ZXWW5jzLfEnbshbx&oMo<4ygbjVj+Sd|8yC zT%1XIes3v{uLl(x4&3i$*)5Rs5YiC7^=Bqm@6f@(R0B&G0J^x$D)f9TWzz^}jyk0N zb2?@^3C9x+p@dLFKrLm8*hp~<`Y0TKqC1lkx7|i3TG+8$1yTqU`vf`&v>LM>jZN%+ z=>cGD+tb$EEdELD(9sJ=!jyy0cD|5=lOeNn{k54nr~);I)iPSMhwws;6hlN><`?F) zZlH7qJWP0>7MkQ(^dyG72N9nfiapSRuiX zvzXfsd_Xy+WB&v*W{-FTBjp=pH3%AHX09jXoic{~&Q=Hjbwwvfc3z{21dt0{mnrCp9;Bw83sKLj&CRg`I8JWY>v_I{Nq3ddAlK6*q!pMHic zMF#m$o0zDor0@$FmJ-IRu59r ztgY`@`wM(Gis7}Kb)o;MmCeUQq(!@>V+9{G=JfTdVbPtf_HO4#R6!dFQMcB=jY2j6 zGKqB)9EYw6o}!@$M_R?wZ>lL$D`CiIF?NK<)b_5meH14^o+yE>NXii`6(8%<{i5&b zs@IQPJ@$|VKKvbYsL1g1QHqaltNYj^Qt{bK$DHRI<#qfc z2!OLAB2NZRMwK=~g}+GIp=;fL&=4`F#?O>S)t>gMQ=?NVpoZF85HkP9bP(Y`Z27yE zh~sxrfvd%<0s<9X9t;Ho;D2s9$^oN7_=!T)Ps)JMtMTF})|@De{Pl~l4hvXFN3Ean z_VW*x)+x(yEZra4<=4v3Ji2b*a6r){vYt{!(R+`DLJ#`2aMVjZHCQ>U7D%!C^x-5S z*V2!C==cz=lZR{;p|FZDx?hs#)~sowX~mG<2yUfgkU=fcX14(&u)|BjcX&8)bUPA@ z`T`eTPM2DnO6}|IH$7Wb$tOQXSSo@_a7&q;T!AB`a+9t|G)~miRC|A@Tq*=S>pvMdsPuRS{zffhAUI=;<<@4$ z;$emm?>7ek9R16iH_}C%CB}5qq4z_sqSsP~NigA^+T{gyaHjK++BnK*GYgz9c7nbS z{tQj$C6dbfE>QEa+bg^y%-vR#nx_q9wgsTW!n;#LPXmDx)%>V!%~ibD?(Q5rsdxyN z&RG{3=zBS_-OJcA{-Yy<6ow@PZ;s9;cVME?~dVW_7opOOD2vT-PTC;Xe*~%2MiOYf~`}^sQ@@#*LvM7Bcn2KgLub!a>TG5Ho^*gk}Ix zxTfmYuuNjoFf-tEIZs4*7jW*9vzu&=UHi{i-M86D8SZM7!Ox|^GZCxsq!xCVKKq84 zBhS4~YV;)#<%$q|o<*0BpQx~x>rl{(xYWLSgk)%boo%7A)h|+}p|@bekPOR&v@Sfv zD|3j|uvZVI=Y#aS(T~#rJ$MDfLyTIt0Ah`kUj}99li=aYyIE%WQX6H9O`A_M=dFpC zFv713%J;uwfjzC@b+&AGZ4eXTFr9W^q;M}$` za{Dwj<{IU9SkKs0=s9O#^TD3O`!qlT{I{t9A<`VNvM@u^%H$U8Htt%Ti_529+IiG~ z_#@85b6a}~Sl=e>?be&%`zo!>uU|8&;d5#0E14LyLX(3!F>s4dUNGv7gP2&`TB(q- z1MD>7THd=DKN?mfxop8}2YF!Y9YNQ#VC*>$!2)I!HLOS{AVN9a2M z@*SLa0WN)z4U1zzIUz}i@e!}bZxa7pY;zfsNskdX<-m`a*5Bl7aZL|P%C#>n2JpJ2 zf}n}WQp|BJXOzdk=CWqzV-Yj4D~B4-(OS?X(un67%1}}OuFYg^SbyTRQ!hyWjo)9Q zB>E97Z>g`GKzH zqxu#ug51g<9%rf+I}V~Si|nykML(?$V!(WMp3P!#k)Td)Li8QPW^p-QW3AI|l*5)oTC=+%Hwg&`ga+>>`6%=s()jGLk*5 zhB%7l0QPL~pu#%DU#NeTEZ9y2?WG9*cp^Yf74FJ0t@t2HN`gM8$iUs@W8D0Fb5VzY z_&IknZd}i^R@XyZYaIY--vE#wDg{PqVp(GAnnv?|=A#sbkerCePyLxy3hkYT1p_xs zVAc)6c5!sfFj^y{Lsp{D+C9(noa@I9BhAU*?jzw`#VwaeoA@=>NV6s7MNRO(?+`e< zOj1nMffk!hFQNz0jLID8W?fj3+ELsk>!KqPAz5as)`Ah7V*%_fYpc^@DtK#Svr;2eQWgA0dM8wxw`I4|PVjyGSuTec z;dwk^IwGwOJ+93RIF36mqJu_6B_rET6#RXPRbu|dHK8F{+~miRs>&h1h$5j3kI=_a zZ1`dafJ!u=tz~!*VPx zegGm7V`W$ z&HWm5^x~l#^eNEb@HdIwW~>>r`(E#L|7N`4^Urt%NHd<(-Jrk&c}+w(2s70GCv;|{ zG;jM2V18}SQjZNF&d5>f&Ie#=w=wc^rb6zN#3E|tfWnfsbula`FW{jfaXy&SF=vPX z3EzKfr~6+$@u}!q_5z}tS<%tC1tTf4zYE+A);})UHN8clEsCwx@@*6&GH?r(tfX^C zVKUIi%#?U~YS+%`5BB-)WKwxPS_lP`%4)w~38Yrd5Kaz8y({1wbVXii|7Be~msIc@ z6k)fxGJ63rFzS6b-?Q)JT<$;5NVGrGwE`7>RySi^{0TY-aSwtHUZRc~0tG$-LC>JS zivo)Lg}%SPDqMnh#D9tTf+@W^w`nrFh@H4f)yiW?5tg9fTcI2Jf~VSYm~=}>2_R9X zrWH#Rs_BQaC4V9V<4-{Xumc6Qfgh%HyI1n8EAjZnDn4V;{no#CUu z7oshjezvr%_ip*6^V(OQ*%dpMMibJwhhrqHlUVmwNEaoyZx$ac=G1#$mo{`LuYOIi zlYLU4S(yi|KccMGyxI5AWxYQ(5r$^hvwqUEF#)}S-qpm84FHIr=(-CU3ec+D>VY$;K*;_^rPu>q5?Z2O}W7Nw`UTVcvEr@P2D=H%tr+FC{( zIIsk1krQUqcH6E^IY~uI6=rk5NLK#!&-sr}{WdO}cfD^W#}A+tXPqLEOfm%%(xCwi z3(J{S_Jqqh(8#`m$;08Z~NQ z`?~5FFz>w}!1HQgj2mo``$q^h7|PN> z=LDP?qZQG|Dl`(2kO5&)U#zw)NZ{E11Yc`U80VHh(2AD1qT(Eh?W60*jj6!1TSs_3 zMfflk1lpum-BqJU&yt(~5(v19u;va*+bv{Ds>^R2xR+UXkX_E*WrOM`H#6gM8TCez zjLV?CW$nD5He!{l%JYO1)sV!{R3G|JUiu{(axYFQG1FBwP846H%FjO~=JXe=XS~^I zrCpeOjTwyMll$A%@}*ryJ4drxgYb-az;alN-{x?qw<)F;K;O`)y8=iR(`9I}0nVB! z&noz3E6{Yl3NwbtItC z$1OJnuLk4nKAXiWY@C&~k78E`-RRNZXsPuvn72%1H2IKwI9ojRmx<2qS>hY1mDue_ zj5>3g7Ou4JcWFGsESSJ0qXmtJkGAcZh5r%40xLYg zyKOF`>pbvGA#*-^)8Ljy1%d^op+74A_@Q&bJ^#+ti*fCdeK8@cu-v^tjxwIZ&n_W1K2tyZn0A*Izr!HWIEfYV zOK?DMRO!a7{r;vAZ!Rr$^u1a!#IB35FAhhaU{Xh|8hzgHl{~NX47kSh1J2j$b)VE}fxQ&Xl}V;jD;tSDj7X)=!6KSCG)C^6G5 z2Y9SAv7=cfu)!Na(GUuGV*2TtcEQ)d?8*VGUuF6rD*6h1xcrvlPE z02EqS7V(kzXOzm8%T$6G^>!1>p>TlG%9N~~6ll%vJEs;cEsVFXJuj2bAbY2^9J+`1 z$5+ucNM|MQj%EaEdPa`;&!~?C_R31@5}JqHi}FP>8bC;icE?l*iDd4T-*%N@hB7Uj zZRd6x5mRNmc7vdX!3Y|)w`fL-EpZAd163{NKEN;%i-5x2VCX`b1{+Ja}af zx~y|}0=c{g)O?`qpfL-WMe^xGOr3V=?m(y3a@Eu7CZaaWj+`hVyrB)*S&YRM1|+5x z){8_S)`&E{ zk`Rm9k=7{HpXg&b6GbVafpb=8@+FP!AL}4}C;M3atz5JZY;kg6bH2opP6sKY#yja^ z>Ue!=dT?%*gOhDC-ua9{CYKwEYTZKWN!WHqf<2>{Dm1?{wgRlj75u)#BC8kG*sCZL zIFKy}$q&aDXt!Uub26D?RK5h75t3>;oYFHG$80TJD^5?{f|d&wrfgRIEl?usV>1TwipsHCVxyCUJZ~t(9J)AfT0Iwt zX5YzrzL%<)=0t0%odG|q6|p(tD*|f5&T%- zN@S1_n9IhLc(cYvdh&cq)D)qJ<&LlZ#t|l5Tx>^^4?0gfv?362>s?94^Td3_SLNp;hH`R<1Phb3(Lu(X_+0C(Kcga+) zJPz*VF!zqlpa0K3#E){r^($kh*;)J(#-fbW5oZdie`V{5K^gxxukT!r!;@v~Ivhr{ zR$x}~tw7Zu6Jp0-f@3VS<&?x*T44{%vUPRa0nQW^Joy>ZWm0=e@cOR0GM66g(=~!L zW5j`_JM*-_X=V)LjuxuY;LtFWR4eXIF6FKzs@8pKerp5c$0~1$64&4QSqlS)m$zNiO~K$8${SZqZZ%gvu>swv`m0Z{3TL>yJg}dUlgCF&53pKwk`U$* zKn{J{VddkR(m`hHBy61@G#B0%oCCt_cF+{q?7x96M1%JuYvZ|$mu2~Ssc~xC6yyK^ z8YHBmK@O7bA})>w|KBKLL`LN>b-P`g1O_%*1KdqU>_+!1m0OiZO3|~w)xv^D7S(0+ z*tVDK4blkex{E#1`#mn_Un8Z^A^eo?gCWtYFUu;63b&`R34Om^T&QXmvyF}Ah%ua7 zHIIG6oC&r@y&1;92p0>BzzB|*F<;dH_F2wVY^h(cnCWwp8gBf1hdu)!7r6CbPO$k@ zU=jC)#yu0NyY(8r1BZ4Y>mSg|5f8UH^|J;$DJnV2GU6}pyOx7MoI#P;#SW;;R3Awo z(5_F1@QLkkys0IM3;lAt1Am{i_8*$@lM>$JQ$DsNXi=cj`*w-NjDSd>Yv}$okRs>0WdN}}^LeSX~n&1K8sa9Zi<-JcUu=u4@2UO@Tl}!G41^O5~ zhi4KtxO<+lS0|DMt)9(hyFx+(7zya$q03M`&;g`&_^9;eXvna%QM9mOVgRPiyf{=> zRcka?O}qnX{5hKFM+B7br7Bq3RR+Qbww9n+kzl{L8nE#Q;n9-O)_rYV?XhIiB4YTo zR-Iv*^P1^6yCh0(^lI|Vzqpn~NWwg4CIfHebb`29n*D^%@%P=66SP~SUX$WPE@*P+ z@MK0i+@i{!{4*I5a6&9g;rV&OmbG*k5@y0UBP$v^?9PEXvxHhlfv`ZZc;-{iyhu0i z#_pa(mtWz{ah@dKBX1pI-;Yx?lPfU@u2Su-DQGIB*HLkW60_kwF(zs&J19Ln#v2m6S1vRJt*k~ZR~QBl^Y7{lR!q82iNGh(yWi2#x3y{Nhi_l%+A8} zdmH`@YSZ4)#^NWlShSqw0H=-q21j(&R~WX5sOf|w9MUiyAk}2g&irt_g(fOu9Q&{a zBwf!Lf2P&}#gz{PANmM)5csy@BAt$%!!jB({~ds-nR-YF2)6x4s5%(3jZNp8nP5y= zN+1DT3XV*@4s4A71pybu@bH9e3nI!Z6(=ZLSq~Sps&KY8*ik(i&@J;C zVk=kaEz9rY{}2xS6Ony2<@H-Y8<00`9YuU#G~oi{HW?f4^|D^(CPBzgh;f_h7dM9f+t8C47KNK;gD~ z0hog&k;=fDXARJAVYm=ZzdJ38NyClZdNF`vWTllYA-ea#P!orqAx2y;v|?NJyrP^# zDyv$8aS!Uvl6h#QOI3`LInNxjR|B6p+G~!d4PnDy*7Wxzrs5sq{asyBCtD_WCvyQj zM>X7@Cz7g5DD3oB#~c8}s}3)jI4xRuheM8wKk>kKFYKYR6K#0IUAT+7v}5A}QRbpa zL-DJ5egooa@m;gu%=B<@za@WEd03r;;PboQ61hhE# zsL8q!XSoykJ*R2mzzu@r(N=ayD@zF@`3t(#{gej-l!FM^gKLX_ghqp*&;(W-6d7E_ zBW4nWDC6VO*Db)4Q#WM1%l4sIdS=&6=!ympZ~HEz`%F)l&Wz&TZLs|Chb=T=U(-`E z04>_@veb-26~MH=`H4D%J09q(c1eYlgiW5q+9tC3e7R}w-zPUZDAr!u70=+lce+=n z{mfVx<<}$d*Qy$D_S_ag$xRADSNhO?si1D+QciOm`aA5zmCQkQ8Fqz6hWD@=RS9>oUI*9OUcjNdAwbb8v{m55xFnx9paU z-9OIo`;S*~`jOwjsT6 zw_pDR1iJ%kDeWXw_kRJG0(Kpo4>0ZGLva`g8KBruG$CiWaQTENI=FRL?z4RzD1$N1 z=(qRixN0PFzObA_&T@=4u-qtQK+&a=`@ zo~b)<3Ep)&daShkWO$OI?RBhjcExImRh+>Gb|<&#a(K5f-YPq(Oy3_>G?B3jb!fMQkX2N!-t zo-k5LyBu7@cKOS+W+eJ=429V+ns{__4A815G7RQ^lO&1tIvRN!gM01?JH_%)W2az;}fq^wGM8(L-XvoSU=N z(7NE2%QXO&9SOq~Mi4umo8uSC%;XaWx5!X_XP>3WP?qXYX;p&{)pH^Tx>6Z}QhfLo zW*Fd(1+kYNqAbF?&6ka51C_q!CVI_e<@h!~o_`8m0bsBV7a?RURl^H= zARApdD$c4>9r+DZ5bJsCL)5}|GMD3^A}h)RN&_Nj`-vOGoOS?>SA^-8S`yfhpZ4;s znTQrx9Br2Fi}6+-Ze=kuOXO9FbOAdiP7wtvuYv`?Y7{9iCQ7zjy&9CX_-hKv`!84Z zO9BKq>)X4V;w0^CbWM4hS1)p8z3kd|E$7?_)iY`oFzh}Iogea7Sjd_3%L~-G;8TuafWf>FFhPA?{NdMqd2fLjOLzmRo>)&C(T7b>-`J-}6oXRa-l+ zN6m4`Cu{osD`~M?Tx~s79U1hFRRDlg-ZuG|;z3JSTj_CyUlZ93W&`i zI)#>(U6(vHWjA(^E2-+&!J6gd2tdz}*wYdvv82PoQD<6^SLV3Oy;c8iYFV|IYri`B%fV8@+Ud%e8ale7%WFK}6teay{UUupj* z(j~F9nJb{M&9eD37CDyu^Z03a(rw4c2{a&SOhLJVyI@oqNl`T$ehX_@vI3HKoXy&M z+3QH!*G%l^-^Uy2hq=p(1LP)t#}pp9uRj3yGS*i~#`*vDN}g4U2^h&9&sLt1xFyIg z=NqJ2A?~OnQxvPK^y>FzX|%8_m2; zL)y$u8jXZNDWN1_Ou5-dP(uVH&N&cyHK;KkxO1i5H8t*dF8|fg2>_&G1-tpn#I}J?%@IKlqEbwn8CsDvD}hVL#ShHsTgz9W8#28ctkD>5ULRR zF~7WpnW-s!ahg>HG$<%&_cRy_pL7y5*BFijA|N9}V55babl&?O>c!@2rPJ_mu{#pW z419>`*wpghE$Y4A8fbp8XZy*>$3{K^jSiDtn%#m2EBKvw(g4Tbc%rHnO4t~9A&NnE zcL@*fKZh^0P7DshQMhH!?`;8zDu~2~f@~4c&<8*mn0Uda@Gz5(gcp+1*eDXcDRlPO z-&8RW5uxBh_JVI-FRyV!8NrYw?=$O)C{Z>D;Ss=U{S@yKH{nS6Zu>LR6yyXTP?i~T zX#CO4J{hEx!$1zgpymN)qH1StM(8k_w`HvyHsxlm+3j#hM=X8DQn8iCjIcN=7h|KQ z5f+T1WnH%4;-De38>g2SzE8o%?VRKu&5)^mZ*JSL$}zI~XK0)U;mv$jzt}W?&<>IB zH4E3rPF6yI%GbQ!0c}Q@S z!HT*NqXtdOAkrTg!I8qs;^!MzQozT?YNQ4BM-RcS03RZ9Z4WAb1uvjIYDoFI7rsvJsM zQGO|2T92h0*7Oyk?%$eOdCrXUV`Z96>s!IO`^?PDr}39;{EQ1}d20|E7_Ya?Y!)nwim6c@I<3nYSY-^u@>_|oL*9x zql+Ad?v~#*zNh|yYePR;Onm0po5OSP9XF^W-cX|pu4xJ`_UxQ&-utUAB%iOUyh7tF zbkBvNHNOU&XHB=9_PTtMMn8oL3c`y`5GPCt!**gj`#sK7l9GpO4*X-HaJ5i19W^#8 ze_615BxBI9ZIu3)Mtp(3L!iRXvkkuS_G~QT;_ceKye?w9p7@T4+DVAIN-m$k0(&Vc zUKUOZFOCX}sZZ0W47WuIuadS$+wfs=)I82s-EoBDd!66JH4C+n#~Pj6gbJN&>i!Lr zwpY2~&afFAV zk1a>^v8z0J8h{kvCGlBW?{S?XGPA*&)D~{lL}lvv)t+fBWdyVG`w z&#Tb%S^{&@3`bfoQmCUA7GIUWleySVDKbe&){NkU;#37ZMzQeNm%391 zfD4BOpv4Lv)+v&>WEl=XrM&Vnn5i*<4IHs|d7HKpM@raz*O<;~R^t^MHS8)3&ypV= z?>t!Jzf9VGl<#9Z(r>*YSLh@sg=^`T9npuRM{pKuu&PPl1qIp z^JHSux_%4p7`P zoSb-u>eV_;26KGwCweGs+n{&~FUePYc^yx@#)mvkf;C0eQzJU~53Q+2`J<$K$N0zy zpb-j3J!Rv@gAb8pMt>Ti0=uZlp%Vm^;6$PTQ-%>iIK8p3UH`XO{QBxvN@a>{}hpy$|{2bu2}cL&Ja7or7)pc81zV%cjei*;~7ht_yF5u29PM(C5Nlb4hJfjG@jImEhg1 zF}$Mx*;JZ}`sTrMsWPrv{Y*UnsX;V?b_{}uZ=3ykoky>=&_=7|v3LUx@J-5c<7PcT zFK%TD0AT?N`+s3_;v?;4?js=+be7)X2qz*_{V=W5FmyWcaOi~WGp zm`3JJucDd}ZRO2cl$kB^;A+3Cec=sx_jpw6s0OTxJO@%Uw0lm7r?6uD=DiAwlyGQk zjY#7J?M*2zGd{FX>p?qy!RMHz*&y+d6k2@0{!{vR^Gw}yraQZ5G_kw$mt3ItPwQNC zrzEp+-nG%LzxN0#cK09VtVa?GdhWY;zXWWlUGY^%QwFJk=raIyo8-~yDG9x+3&Zfb z5rYpF^jak})Vi5mDU-fAD%T;m=o~#30VXT`=c`7oKX39t4r~McEIL__bud_;D|~$4 zqNyhovvLlt*`F0G4y}j|a;3F%L&k-vWuMvm`w0<|s)@iw0q&^X%;j__p>2{2%DlpS zw3Dup5RX9T%kR*dH!5(B)7C2;&mud{j7Uf zzm^CfU~Fv`is*CvD*wwZ+3H!5)qbeS2&LEUnA?}eya%W{X?#NI%VrN2e1Nah5xA7+-@+5X-<2_Lm8$ZKpS5uT;Ar4lPRbP(H zdPef}M;pQjCOg~#!t&ip{j6fNMUh@ThBrTFgn3WXsZc|C^7*D;S`u!IJu+cMjZHh3 zrJQv zm-rP3h0vq0t?FE|NfilaGIEEbu9?o%gahS3ccuJ*t+|~qt%6?9>vOey>@895N*i@d-MllK>0t2V*vLqjc z!s{{Wr8_~3eR>=O(ab{7E#@P63IcAN#*CLxnx5^_q`E`)=I4U`I&28o$%{gm?@5|v z7RTK@%`re(z@>A8|Iybf?;#j~Os)w80ko6MzAzl3wYng__&Tc8Rm5a>pKD8EQsg>Z z#_?9kMxRxuSvpkPZkBxdj1)-S;;*S2Dmw4|#V@`!&2dMo;j+Yw!Q}SsM-{j>Ipz1H zaQ}8*RpGjAdpsM?Cr&7=Qb)>0d>o%@qk2q`?HzzGuDlX@3(J5}K4<7qlcIDy0$aI+v>%KKi(BcQR6^&SCBq^cFZ#L3p+^Go{osC?av>FYl3D<$Fg+vJeZP(SzdEJZoDh|p zOR9CW+2(T5FVh(@=>M3lJ8MYDIbIKW%(h=!Y2R|ih^(LzTS<)_J3-60f$SsTp?y*7 z=o{9lS&SZ`5OXo|MESDw!%!BIUl^8LiyPnLF)}4(YVt5F!xRBU$EH?A86%Dy`^g^& zDljmeF$zntKowqplRig zLw$>8mo!Ty6{0>Hd%VzGr*WQ4rJJ69WF#gow+~1+1{ZWGQ9iZQag#r2x^xB|n}9{v z_Sfo|Pggw%o zujb{YAqLA2>!j>2Z#k?W(Um?}4q}kD$T7cVeMsn|TK{(PewAO-RolDkxHQFDUCmUy zV<1QL<+M|&YU0!=lxREVSXBFAtm{Kn+@I741_ojC?y_T(Ix3rse+r2}!5NyY-I#&k zWvvYYP6`2WbrN=U}S%{ePAXl#5h^;m4 zy5s%ls_Z}vT3Rqco` zJ$3%tu)L&kbmp$CW5Sjes7&~`m&_rm`ITtt9ATfXAGJ;)jtvfyD>f$16Jcpy)9&Wm zQ}ouQE!9mdxV(KytGvk4dDep8Mo+VjE9tAFSKq#7hv$s7)@J{IA7X@}vQ%DoKw`3# z8mVD19dwNS(q_~a3LqrOa=6Y1LHmh#-Rrj6EGK8#juOpa58ARJM}wRMoC+_i6@X2N zvc!*NfLNRlw;(_e)!ic5-?Ys@)3fNCRd5 zD2Sm>Gb?0RtaS?@%T-XP^Mr5>9aX_j5%@D0%M%S<^IErvDCAn7iFS&F!zf+z1k)-C zmgXO5rsZV6>D3cGXXvi@o~%%A5WhEd&FuHWNp(NXt7Z%^y*lY^fxfN2c9G(>v)^5V zeYOJo`ufgs=A$pzKUh9S;z~O1*>;aFt%;a!yPV#`QLOoppcU=gI_O$-X?B_D2P<~b z*oC(*PjkgOI{yK`eEH$J!nU3r+H)`G$dR)QXm3rQc50hQrcTC`qd3}jEvrPz@K&1- z!O!|8Zw;W^^q|)>tnzOpjsm3meH0`2L};ocLBBWatM%tJY~yg7BzLm(zB)O(aYLid zH}a{nY~Cg9`X)Z_E?Yv^0R&FsMRAM4T5U;sqz*Z6*S^2MMLhrCeBcMbMw+Z#TbaT~ zN7&a*2?7#4H3GUq0ho9nT>Ht`pee3*)=u8RThATcS;7}@{ekzGBd=fD-urkJvR?r_ z7WqBK?HeiNSaJ-E1elF$0VkNYE94hgg|b+p>n$81LqAVA%Y4j{LSVvT#udD@GCnhH zO$*SG=^Ztdzpuc)a#IEa4q_$c_n2%r7E?7(Mi=Id_fbAO>Oo_=bP$`&1qtJ{8_!P5gniURlZ8ie6;$&W)UIY)ac_<6h^>KX~0ap#>+(OWE)f)j*RwU8bkOd z;Ud2X?$4%zW%P^V2gD%LCQ5!po3xv^t*zVD--+QI{M&(s;BB4v9R|1r|0Uxe5pjx$ zIpd7AQ_CyUOQHgCBZX`be1evPRYoN|rYWU4V&)~W0$gOJf+PGOjSV(FeFCcXl=T@A z;adxCUH^_xp{1ky42~-N?7}>w(hr-Jl`#Mo(w?+&O!^p`8>vER<-b)983a?OxPBu9 zfS0gfDmaM+#PQvjT%s$lNj`h&AWM8z}n&BS#x)C`K~UZG$sZJ;d9!dS9woVgFCcbggZ%7 zyV+j!U(#nXtgqj<(yFdE7^_<(I5r7kdqUhJVUx zS$t3-!6>HFub1+zzL&A~8hQ4fXf&!(qerEvasv|W2}5VX#TH)}16yQh)eLY`UEG^g z)OqJHXLs*v%lfZ~XLtoEoP2>W=&QA}mO-G|u0;upqmSm_kiu0S0c3pi+)<1=CK`=3*T5o~_ z0C{Qq-HJlM2RnANt}qa$P69J8+W_=dbiMJ{<@cL(nTkU3%+&UeIYG z!S9`B+AcHelYgh*)|#l?S0qD9bl10CZamT1ZpL&!+f`m)RkZxk^K$q{kxTKVdiVDB z)Ttn5CTEz_f{YzZ_7(`f)f;OhC-xtN>mJDwDit1|3GnQ@YHMppf&~H4#Yr}(3Y6f2 zd_wBJ6@~s-Qt~duN=uzIAt?Z=tDy?g)_Dz&y>V|GQ1wp5gO|pZS-iI=R)mK;d&}l*Pfb@=`TQOQ0bpSzCAEt7ZXeM;-X=3;|5FGZ0Mjb4{SHw` zYA84GM=c=Uj@|tYvdZDaT?aOrLX#Z7`A(Zd{Io&h$gmWtMn8o2w`n^(%Rzh;a`*E0 zWxO_$Ls#WxJm6Qi#-6#JzneC_7k7)J+;z{ub2e9%x% zvFWZn1N6O_?1Hv%l-}_Y*uyAPQnMI@ickWsu+<0YjOV=d>7F_J_#}EyItVW z{vD}{LnPNhWOSt?d`0!K`Z%2>(Nk(Ds?eEBDueOQ}Jw)E7hJ`0CEI8HJ_m z0xd6xug@E6fKohu6l@Hq9u(}b4~8e`0$_)PBq6v6^w^>A!JIJBD5 zRuIbRU}P-wwo&T?0Fx+#sV^S{uum|!Qox=TTan>eY-SRI8w5Yh)nuqGEa$+@HX5OY zyK-C%OUfXTsiQVi=8Z*;+cc}odGG2G0RS9!pOJqx3^N#|!Bi@mgt;U$Eq{gDs&JKO z;i&py5#N7SRJ}{JXW-*`axb8fnqt3O(%xR67N>rcx20rPQ&&OKFGEQUkflMWnnI+? zrM5ChgRc9GeqT>j5_>8j<|B@RHbe5wam5?C?e_fFF8-~_mxbHMTaA&et6|c+wy`)G zkvu~sj@c&_OayV!IjxnPwoplZxDHaLtVZtfnDy9epyV@bKVRxqPE@!zw-d?K2(N-x99&EnyesLQ&H_}v!C#g zes2M!hR`&JJRv6qC=cQW?~f36nUEmCW&*3Xv%dq2&h($#euRt7R|EE3;JENiOB-H- z#U19OviFXZtpD8CjoDQV1kFjmiRy3Jo0T8{2ms&=)*U5cO0%UOY{QUG3>U?M=E#;I zy^t=^{RIVWDuhm;oI)M;h?@Oh;t<2+Zk{?~(l5#1$@?v47 zBdw5M*J|(k?N>`fOwGmYtBfZTo%eF0se?zlk#-8#cS~tbtTQGTdzerxmaYKKX#%e^ zUZiNACTe0)LD1{{uK`Iu&5efdot*=BesR}#sJ@@~+9bxhx%}7%)6`@Dxl%D(fC7Ti;oWq$G=&zF zHdH!Bgo>#=3#!OeX`&(oa{Wg9JI#uc+MaOK$W}Z@ZVjcYhfEceEox0Gz2L0+$^O`~ znM@!nJ>a!r{SDSw`b!>b@K4oK3xuv}h2x&O{><$qA%>XEC%-aq3p`mr!g1b?w+h(1 z0k%F6u6-#H&1KJ^yE&`{g}I84c8>)$reh-MjBv77!&Yv)sBlY)?Yf!ORuvoF2kb*x)d{ULr zqpk9txrtvJ%G;J3;Y|1ee*W~=YdFPWZVW~%FafP_Zr=KuJNuLL)^maQ=A;xlQ?Dt4 z)$^MJpx6wbqw?eV6TPWg%Q=adICFb)o~YBaZ_XBuT7m4rYB1p<7xH z3`5ip5DP8UoqJ+bok_`vTUMJZ_)UYTe-FQC_4mlP+#XE|eE$D41*kyKbKH6t5=_JL zmID2Pl&R6W;J}ki6?VC-+J}3jeYXrOuAcbDbjpCA66IWaxW&&*7?L)TcED0AuFc&~ zy4;ix*56p|HE0aKP!*X)p*6G{6FRae-%U{ZwY;}I1gc%;)pq-xc_LhvRCVMKwG}p{ zt=)iKpRF7Gb4y?mXXe!~UoD|ke`B4dTsjpL>4&CUE6-Ek%HDpk)L9F~w7W)WSm(X` zy*96T+_6mg{00W6nLLrXe_e|sTkdPqf;YS8ZEwL3ph!=Szn?Hu`3=g+xM;Hl$teyn zTNM5=guNq(3*H$B?pdw!Sc1aDo^p45so2n5U(AtO;kOxMbiS|d%l`1B)gR(l{MXr_ zHqiqFD9|t{z!K0f0JgSZu*LfNVQ72%LCop1AXWql(3uN3u7DYSCpTv&=jpvwTCWaw zV~d03kQrMPdaf+sXrpw6zm-P;3qwpxBQ!;R@KMjG2tj@aQF(c7>ty@`%8$&5 z8Uoq8-@bpdP}4rv&EtBv3OBscb{?Er2$nFKj*tSQaS8Uh*RvOHikjNY9x(;$G|3M; z9O~=-<@-kirnOszCU1P-vVILgJ^g zGw?!bo;babvW0@3T*v0h91Rs}HjHJPWQ;ntf=o0LXzK4%r3OJ?s%3VwXSfYHn^9kD z5hqXk`kQdKXYpSPZ}YtQmA)S2Ms^{C%RJR&JQ@EWCAqR>Y5@5^g>*pBkC4#^cpORD zVgn$gKNLf8=rG74hog4*(gNKg?WCpxBhs>~I^UV*kja7DLJhCnrJ&(J!=9XB7 zfg#U&=O4CM2Nx$6@o9drtZZe%rv5`1G=$(tC}RLIN&;Mb$&mS_?e&UU5RQ6B2K^K6 z7!rKaTVDh>aObs*0>Qga$>k!dI#K$Yk}G#Qfo|Y_HOiqf5(;~asMfqGXia53OGyAg zK~WeSutET$FK;XjnwzI}HPJ#VIb#DuMjSL>Zz|vv~aB ziL^INKV{EiA%O9hLqOQcK#{k0fH{#)VDjv9#*uj zeiNdRjjrtiR>W#xvf$J{+(u*Br@Xy9(HV~!jVgGlrno89HMK%f-_Qhagk!sr7t?%) z`?BO$w!=Bx-aHIh3IU`_B6QluP~K^cGunUSUPZ_+lHV zsAhb)tSnc*=|BvJlNSYtij8V}URtVqw;YfpkA*{b>q-Nhlq}wVq!_FG4h$HIO^U1O z=GL4!4^wrblDeJ7zqscl9HnYZi`Sn>@lcKFc_Yo`8rIzNMnR!HVOOx?1-7qc0gswxAV3ahpE==cMpNZiRss!VxMRuB#2?2|;Q@DaWTNbe zk1q}SQ_ilH7d3*Ox)PZOH=0VD(>m`s-*qN=0=Eij)UxL~47Z(~%GT9CKbAZfDUDM# zmrG%V<@s;)TH9AB;^|Lo4;|rEV8N#HiERpsk|@~8E2}LNdH+)=8H6?WQU3y!aaf7* zg5}@nLukkUqYpgzj-EkL)fd&Plo1%D!sXA<880X``ZneL;Dd_8Wz2b}FD3xem z7`$xq*ZPN*Z7x{0u$c%rL zSy_jNqc*#WizgVW<4RH--mj#EJ!6~JZFS8@8F;ncMKmM=$GBQyAz^lI7JA;#fy33B z;mOe~V~0^mTOW?a-GEh-u0OM-8C45o+fkF@KhuR$kxuc?#2$uS*FAfcJ?pBSpcCov zn_QZ#oBUNgZB$mnu6~PG&HABc#~t|2xC74!Q)ttBM4i%XfJ}~|S%YG+@Jiq$Hf70} zzJ##9x$NMVPpa)86+`Skzj1?poeFNx;W-!2xPPBe*^7ZTZ(UR&|7<51THBJ_8n`>H z+lD7?;6S!IXJQgIzAXkH2`!$!)2M%aJq; z+JMkl6wOb#meR3Q&Rn}sK^2%6dwpBB@ zBDb@PcJ}+4?d0vp+;%nhXkERVQx5bL+HB`4*ioRH6%qd_GzEfgrr$WbB(zjK6fhDT z@`(An?NHmOI!}ZF1`nW;m-*x#{7#dxY*>o|Y71sQ`K@lyxKO`{}jZlvh4v_V7$@i@dRx-9%WjTrW$f zHjJ#iTmO{t;$$?qc~we=4HmR<3S+zy-6eMkHit$59>nLBs*nG2^odXj( zJaAnUKpzpioz-ICYMh~2`FT_@D7-hqmMmYAhdM}OM|D;L&cV2cx=0PV?jDcy_|eL; z%<<;Sn8>zi@sX+VO&{qp-2955sDd39GUN^0L3SrXK%wgYxLgp{{-+HGRLlpxNTLZr zo5Hdo1DdFZbOP&<}V&W*n~0${x~JTs{w9B_^1kL(MU#U!x8 zu+Ulhw_(8xp3=+7lQv-#LLIyQLMv_x#7Y z4TnlM0#hDlBF^7g6e-9xCXa;xM$BBrOfM&K*3w|wcKgI=tSH}p1q*YiZfrP6@31nQoX#N=zYxnT@ zx4z0E{^7L;XjKlqr70|{RMY_R^<=*YYB5eCsqM@x>>?DJX5$OsNk&)cs1&C66W5FK z=D~%C&5p-Ux_)_{x~M;Sa;N7S>Gb;QZXV109x9r>B6;nn=wE30?2!Hnem*5N7Lz7h zv@Tyw0TKcLMa1S~MOukLxT@GE#Q4~6L9)urc7uLJXR%}G>aucI4LxS3?c90xE6~@} z>C9>}yt5ZXY<}+_N%`3N=BsaTYBO;df0E=2dLAy}{~w%k34kHy*Y-zc_@zIpKPxDe zjfS(UchZC+=2Cj$agTJKA~DAqvq2XUGj<=TH$# z4sn$a=>GKhY4x(KU*Lh>6A8}3DEB(!L#wU$-NUH}Z*wl!XvGMnVD^f% z)2&i5d69dx&pFfHIXW*IoH}Z0v`yE3zim9{54$-JeKylakRJk3Jym7Qj;cW%Ve$Hq z*OR(WmT#6lRjO8d>SZMAxf4~XoNV@3+*9O+!QbAZh8L!iNpE%}D%K4)#LA6S=sERo zD}fWJxYy@D3JafBL0#Q^8AbGj;s(8VF5czYH09|A*_YIhYu{{qh#NKPkss3jpLn_YVye9H@$7V+|~L zQRupjkl8w*&I);Z+|!JZ9iIf_i%+eXWE+v0{LppZMafYg*;puQWJrrpr*_X$?J2&M z8^uK>pZTezJ!AaDCqGi2s&mjb?X*3BNSjuLjMfpPXLa1ZxG9TeH5qy2Miz;|CBvg! z%xNq?YPXePJ6rW`bZ5Pe$~+wCyiE3pOzo1zVi-fn=UIj#jKTK6T7yjSXoVrY3~zoh zp&2_v2HD3C{>(e&jkYDQ2(YmUfD{1*j~q`W_(K8N z!53U&zg#6wWo^M!5jafQuj@esDwUVSIkYa_Xl9uQuFJiFFZ0q!1MAw`n!7#l{BsTW zMK-9TIG&bAv~{A^F#&+r3T6C~-!2h}c=uINww*G5iQ4qp4n8wxb4*#6XiBg*9ur<) zOF@>{B_vXClyUvYU(|6I!(P_yryz?+qDsw?bP+mSx+PY zx)&2EL$W9wtCBX)*8x4M7N!n8Avu?1dk~@9QYeo}!%D5@B|Ten5uHU#Vw?F&(kLm4 zg7-Nnik?>z+d+JSH-2TgYpp{<`}fOyp|Jx}9Iw&W&$PR52cj5S=EMFR*k>E);Z(h< z?iH!Aj9#%*Q)L<|Qk6vmu10 z1>w-A%;X5fRT-M69+mnmmAV%grUN^ulSjv>sWfj{&-4_kO&~_jH+@rjJ=k6(zSR3= zdzRn6{u%f(=?Q&e_9EtWVki*PJPO@CkH8tSn-P7+bdLUW^BeQZO9zA%8|K)oiu>-7NIJqm+zNF<7>%uwRPIeU999cyinB{u)yf}PUCy506j}-o z1kcN4R!&6AeX0r92}=5L-@--O8P8)`j-)Glmh)EB{wZ_}g3&NqI@@P9HH3TaH>0ye z8C%t>h;0sXWVv{_M=E*teiZJapLoyDq4~pq@#ph!1oH(dmmWG2WocWRji8$XODwd! zt6HLDTDU?P6SN1R)UT_@EubEEWf_+(UurnB`C^`RVA{OHZ2nB%deoeDsoTTUOI=+c zWd0uh(Rvw*!G=*S&%eI3>+I8$$hK`{`k#$Fzan*3%P0|>ZL@ft#{!YW)A-2nsvcVa z%+_=$1X1_x!k_pr-oeu5atlR8W_igw90mb-_-kNOJm)9C$?o`INeju-0Y`O7%0)6g zxRQP`HNrfyONQH=f^+?2lbtqwf&!wH!^-iuru$m;eeK?Kp*ya1>V+;(C4iiSJOE!x z^_5d03uF_y;3$EDnYg8*dU!tVT%yxz!9Ht>45H+GA(p{<+j!9Q4;Ay!&l>j#2!SMm z_W3)Hy>EYQ&T*L6vng}TAG^}m&+#jM-jBnV&huvsrIysx5P*~ydSOy>;t1Wm6wR$U zH%c@?jJusCr#LKIWHy&ZQ5t5~J`tM#LJ^h9S6r$8X$nUm7&RR&-%Ey{HVS@krh{Lm ze3rE?QE$aSbv3Q`$V5^;@xq-2UVnYUkUqZLfY$al5d(b|SZcMO^1~IfgqBsBKZmf? z`<}>u?fc}Q%m4lqRsXfxn%?Ezslsjv2r29~N|QWDZRJ{L{H>1_aOr=YIqEh{^z4qK-}jb*`u?e)t3T%D>GfigDYIUR${UCA zWo;x+$A;gx_|LGnM!WwX?uDzVgT4Z#E`dk4zg>|%mDLGV*A-Swq(FW_r+r!73*;+h zawu8LISK$MZe)n*S+tq~k4M;7QcwYdKw2)5FCAk~RW)QNO1`zlIQ*C>@`UoQXcoYO znI92NORBWRG>S74Irqbd8qTR;ul+G%?cBZ3=!eI|j>^QiDdJeSe?#=`{ZHf~_I|nF zVrE4yw*K8FeX4b-sOY!wI=XKCOjPP-a{3XQX`6H+dv)~eepc7ZiKskIREM_edV29~ za{GO8@g$tUX162Py{Y=kv4sX!wI88U73`b6e9p|Sd(*!fS_i>w8)>`=0igX*>;r3= z0mOA_b`UZaig*Ka2RjHLH~BK_{|;W;>N|ORSz(*ly`I`WS3JsT+Vn9qU%5&OZ6t>U zKt7_NQfmE5({IV^0+n)-@XS!L4L<7|MAjna6!C=O>0@Fm1AoJ&`ghYRjeGVbxW<)m z8u_XYJ}F9Z1>pwS&@xJwGiHmbUioZyNwN))R`_n_IvYiC|J78_FKCJ!9PFL9>0`k4 z&)V5f@?G8URUk7!_-!PV-?+TFw$UK88TgQCmLI5;Tan(QAhy*uvp2=P@pf`?4{i!~ ztuoeXt7RXo=d+NTe9#H>>f7#lI}v#?@BJo%3RJcD{q<^WI+v-CA3a704Gh*A{`YMF z>(VLpM9L$ITt(&haPoPbaKi+s@+hfsN^DAE#0q((7zTMLs>67PdQLdO5A6*qSaYpJ z3;jw{+$_U9&@ zEz&QskJ0+QEq~KvBA?$I-`jk++x7?AY?kOcwz>be`bdM|#tigr%zi@q$#1co6auC~ z%K}a^m4eLTogU~i+4#5H5)R%st=BSK1K^qEICE_9A6to>d1m|FgOE{E&aQ&Q=TX8Y zcx@J~7?#S{B|*tf@)@L)lKfM0ZDNw)4#f+NJ$etneV6-3O4DR|Qm|K#2?_34&m(AjYLYe zStgx&?3f@~LTC_YWu1mf?U2%!_z;4?0wDI7&fBYp1t8EU%$LD-RK~%$Zd928*vF{M z)cu-PFwo7(sifEvQ*8S+YR^SdO zCvCeZL-GIrgdK$|k0uP?mm-)ebl%vMu+Cg~mwz>c77EkAy194BMXprb(=T?6iemWU zJVl@e<%JFue8@&jVJ5X*4GVIW#pKuiX8V<9Iy;A0Q;nP}i4_S|j&bkjVPDM|-;!Abfx5;6#W?#v!;0S1Y_q`_5F|dJT~6_8$s5V1+_ToRJ_F{ z>r!%Z0JK6u%z!aMWOzw06w%t)a zh__ew_N1N#%iuS}U)KMALO`0}5<6bhn#@?H>|$F0;}?0dP*`rIi!yTpW@Vo0646se zxiHhj(AaStxt%C``ShWQAVc+mpA_*3l7%e^D|n?uzVoVCP()HDG&7lQp$s|@!IiiE$2YwO+{)K{GvEP*S}(A(N!<}_thxJ77IXKy45iDGdy^PUUS6$ zdx9jv%(DKzY$yjtur5}lR42(F=(?gBa4*_4(GYq?m!s2bmJjt*q zbV1!HiYxj1QoFYT@V0gm3kVV)!%H*n{?oN7vhfj_qcp#2;RhDZ=!#y;XQ+Htvp6|x z%nYs6M*a2S%U-H7oZ{*Qt(QJVtygsiGp)IkOj{IUem)LObvQYeGlk3r;eF}sEO<{& zwV>wJ4%THssg>4Y02DPH?(@Y+ocfh;ILr|vyG8_&i&Gn;+_^c!L={lER)rlaA(~p& zuSJOppZV^IbC;+Two0*=RA;q;$%xxRRlZuk;Mt2+&b&e4xJ4FtH``^wnj<+~0D@&H z{m#ldEJVboN!_)7cmUKSZ6_jk)!%l5ao41QC?tsifZpNK8owl_*9hyL7J~LiQC-zJ zX_TXI%&uYxK_+)(qb?jj&tYfJwLmzMoA9wP562_c`gA99$W3pPI}pAQd0#YUPmwAd zOtsk=Y2t8I@%UBz`6Dx3G^3D^DnL9fHaOEOZ*ZlKf|2r}XfSJPzB)BKlQC-0qH=Hs zkHJcVefP-OF0G9GUTN~$`*h^vWBCYUj-A0TkE9x>GP?smU$F$*k$w$^pvr-Z=5tY` zqR7OB@l5*WE;fyt_(yfVj4aC30YY}X(2@&THM~p_&&t2U8k(HdAwi)O{zwLXq_Q;I zsI|RkBHfVJYv=A41JXlhQ@D%D_t6fc`pc24855MqS$2QNQVam4xn;6kX-PCbB)K6= zZhz(h>x!$gN63}TvqtcGqD}+d7OCgM4p+SL)y(fZ2dACX=k#8z^9#WV&$J{JFcirI zxk`i+q13*|ycL3$9ol~7<+(H6yhF_nIiHM8~Jqq`% z!E&Vc3NHrtYpbFtYBqr9P_i9DC8#IIJnD!OGG=fe9Y2b#|KPTtu%*uW3N2^E6d(0{NaA-*C#dId>JkrcbgBmiRLjEk-S5bQwz15{myMI+(b1c z4E>>GBqo@?T2XNtUsK=o`QN@?8{IxL0%)u49zlRL!t=(@)1JmH;otrv=`0wU;My=e zx{+?AyJH|F-8p)cba#m;-Q5k+HM#`^1nH7a>Fx%l_RaVE3%jD`PlYUv z*}5~N|1COtxGcM-`qz*HHX^tY8p0OgBoNJ)d~6Wxa*n3;%4?kd_IE)b9JOR$o>P3U z1qLp8+L<5b&tF7g9JKyRIiKtPaBeVMbqvi3(_hOp(>i9`E^>l5$N_ru&Xv>eLK%JA=}GR*QU+kiZmz* z>3g*a!3V?HG(uc~+7i7&!Hu zTKrqViXNX?)K#DCo!pTKwG+`VLUUOW8~mtu8B9^t1lSlun^#EF9|s!-i_Kb6l_TN# zKb^Jp@xH!kLMHimPqj^m-1e<*J$1PCx1qUMUU!OcLW5~P0I|}DI#9_?g{YNwTOG6i zxZ*^HNymP$O<)x9XIY^}yij>*^yzN9)!l|X|3LRYLiU01-#BKUFmb0;Ez$kNLKHA; z??C0Tzk2zJkG|Za9;yMNP&#N##@5q6UzqDt_!9iM0v?;5M-n z<6(0H3KQW%QUZQ+hx4gmnyciM#Q^fMZ(5U%87vL9sQ9!*USCdJWHRJkw5uu!OKlaR zC3RbADI1zeg!VE~3S{g!??0X|q{i>>wn``>wAmfZei`XUj6{rz`3r&amSP z!4((jZEwwtm!GMi^MgVl0N-8@04u#TS15`l4l4QK$CgszibGmBXv~&&n8~J|Y4MKRoniI_P@w9* zgG+8R@i~2_(SJp=S+NG0`GMr0$!0{i#Tv{d@PB~ zWlV~*X)WBi$^Do@lU_3D%x=j_*}Oa>z(ui{rVO>$9FP=8sN91C@phd6LvWniqi18p z+zW!ph1y>1a(6Tx#8_OVp^%m=8|pw)CLKb6O)Fp+)8H+fJ~H(r3%E`j$OkKOI#ue2 zBnmV1cTLi>k@Z~bFmM&toIDCEpK0tkiw)nOH*5bRlna3OGBXysJNHJeJd4f{HGb7Yfkbr;4&P|4QB>wDMae5maL=r*9U3e5tpjeb~#w!)%e* z`KhvKyroTE?ggq%^+yX5uWkr4AYVhFg<39)(3j3zHvTV7*teO~@R~e|u*;T;Tx{cJ zk*g(^>W^&GKj=yDbc<*aH*kBKnqs_W$WrOYsO1RQ21a2GwbK|H8NS%M&jHi&F9>)c zz@ks!@~`VdtA0b}-#VL6pRYjG&6&vhnmG%}8o?RqGH@u02zWfP91*_X`9~QZti|ql znW@;dc75Se8K?3-Xhvj4b)08plq(n8Lhn=lNNUPkk$bWA)G%_u7UMfytEvFpbAe$1 zd=pn=eZ8IZ05V_efi z)!fp({AhbeV>`CgN|>p&J-j z;?@Kx@-m=lyx7Z)m|LAo+jt1*d5&-*j8HpXTL_d=p|y$&wob?HCdSKa9NfGCHTnwl zJ#Jl$Yx4et!wyQF3L~W1h&QaQ__$C#rTMBC@U zV)Lk3{2ZTOtivAP_1cV>4a%LRI#`WbGE@fn*D>uf7}__`mg`nh$}oPi$owf_qA|_x z`mwgUHlj^->DIB|aBm73+FL`?^9XSlIMPBpZ=p(8)oeH``nn$rV2qa6Ujo3Cx(apK z5iCjuMaid3+Zq&cA#e)Enw(-C?HoFF!b%YVYeQj3N*N4^xg%tER4v;18&~;V5|TFs zFkxpnq8+PSIHrJZ=mU$I6LAtHbGZ)f+t10n9sdYT!@*AjHD(b+C1lKf<2d$7&=uyT zt1;`~REb$UZ_sfbb6b_T1Q=Vn(WLggb>U2|2AqIOMf+9UEP|?F;VwC^eoSSI|DG7K)W$e(U9nek=DyJ*U+pJ>FGX0kSW% z--`C_WQ~IwTw2AS1X@UNvO^bZ#u3q)w|T~baeUHuWWMoJC`dX>u)iyq(=$HhC1G>} zCL)b#a`Q;*N(J4drkcuASU-~@imbZD9P33u|CqgHNTdDalsZfz$_nqskEZLW0zGY9 z>iSvi5+EB_vL3h55>)bY#F5A}mW+}!NJMS!WBYTyTM%js`b;XQA05jvrA&aoG9C}T zy<%qWq{=DVfySOJyrk`wDy`Wp{wCDuj-{furg^sV{qaIi4s2X58JpL#R=s@-u`TU~ z00<1il(qqQeY`PrxuYgbO7smsj0j-)de=4(TPLiECCJe+HjU1@yxVUHTs>hwT4UPu zOXuMIajE?hR^qe1vK_XitTI*%lh%BD-pBigf7xX+=KusmZVgxtt*M=|FQplhukvk= zYpa@t^%lGI&B|8%^ei84R%y_ni3 z*3RPRR0l`tk2PLNIKl&NWD-Fqa)Bd+PJqSb)Hda5{7M(IiB|R23kHo;4 z7cY-hmjtID@!y~=#Z|F$Cn1(v4i>wTH2%J(mH69Yz3jJsE4r{h4giF`d!M8dD29&X zPSP6~>n>t6&!aBun-^@=7MhT3RIf2iwB9z(3d@ku77_1#TUbv2 zvl{znl~Hlwv|P42{Yo7Yh^m7^e_%O4S|oMyF6y>C7Ey|M9k21c#@<@8Q+AD&R0xLig?$3iEiHuVU~Kng*K2pz1_ z`0>tlC~@48f((FzGS^hN-1Po4<{Y|enAyr~x7E{>O6zT7Z=s+YE zkC&KEa3Go@(P8UX4S+u8jqTJfc2Kl3H&%&iY^~mP^)OFF0df}{?#vEjmUoT*7jptU zPG#r=Tc#h4>rN-OPN3f)o}lQGI^4=Ynkseb&C1~K^VP?bDHW4RH~$cjI{mB8e)c` zJ-;HsgdE~H067K&=K-qaoY}-AV|t}cDqEhG+%s8?xGH0yGRQl6FDqSuSDz}z4Nm=} z^4`~~b8RQguPmTbUpdV{$S)_mmT8&B;qMl?V$8n%+kb?10Vr>cmd;%eku%sGD2FBh z6H7;SFC_pP3sQ%VFhbQPAoSVxxBBp6EUq2J+V7jS8bA0?Gv_*lbBA2lV@6Zi0vO0^ z4VIjMzNb7Rmj(m<3_Q*1G09)jEApAZ=Gbol(sR9AP6k$w8C5{49%wO;6xT~fx5K|u z@5|3%$=;w|*Tc<|0b61%WF2ZU!>+gS?7JpFnYLLSSW~i*UB@yY)n+)VP0BhHHM4-$ z{Bjs|Uqc|=Sl4~w#%*Ji+||?hG#FZGp`P+};fOkuMj?u<#^dvCqOf64d8f+`6xv3r z{tG1G@t%pIee|#ebx2yw{;=Fi&RQx~uZnkVqwPb_Yl2G{*o6(jHEh#U=#5FiCX(Sf zxg7|x(zV+r>MgTmF*L7msvOytRY{x!8j zXaxZMW2a{zA}Fs;jztjnO{@|pC4e>gUERFznHb)6fr6=q?ofXp?S$e&{F{`--z0w# z<5@I+%XEOp*;Dw#6waUz+K)ztq#EL%bopdV07Mej{|E&IB6JyQpF|S43ekwvknR9u zzxC?W(kllkaoY3W5HcTD^qP-Yop%!Xo8oOUrirz1$rS)pL~m*W0d$#2^<&Hm$+-rm zH1dbL1~yo-5+xe<7fC4@kiz57&{6HZqG0b<5WRk<8AYuI+N6q5)ouQ$+!H3gJbL{+=z#c74j?X0@i|x!>jI~Q* zG>jDIKa7|?*ng}&RZ%1_zXnc#(EW19w2QkFFSjUGJVNk;If!8Be z_}jWPW7*=x@lg_X5P8?eL(io{{E_ymI%Ra_erv{_(?V>roSdQs!M+NJ2!L3#dO-pJ zShHI$=y~ma%X2r66Dk#C9uInP-zG@%9Evl^w2{Xe^c(8i9qyQjTKoN5Ei7O_uG@I$ zB_MW`NZDur8PD~%b0;3FzM)d}8pZ(a&(K~0cxP6Htu(|Pyt^R|miG;;1j}K`mh8pJ z*+6Q1_Sv&)$3y~JMQ?ve=kPz=sj1^R@6Tsw>OZ*wC=e0Z_eANRmP`v2_V+4A6A%`Y zJ>FSa-28&wwV;1J-LHv?3jjDE<9+eKywXE*BgE+6Fp-Fy{Sm0U?mIl-yFNNr0*wyE zqCk~bjE~N$pnshcyHeG87YEJB!_$G^5IRxmVc>V(Jvq6A1}}qnDxHEy<&xdN+&~}w zzdv}sbGtdnrLT0zIJsjOc!RY%0%^#08%h8G2c&<3#?&B$c;VR-My*XLI0s6?Q{*_; zBhXpNNiPoh@$GG72VHQ@RjYcaw>dWh^X!BJQ}Te*$)4k=oHhjN|ImefofpKJ*CQ-= z*}weEasB7wzVS7NXJe!3-sou_fFNWOkq_&+R9&whlZuGeQe-M@&mbX|f_Xx;f3rvx zM<$mK?F)mRnp25B#ZBg%jtf*_3p>B&{~b1*HUoW5qt+!6=7!(Tb`yA8X+zeQ?qG~N z{JRWnL+rPYg@IMf{axFZqtbg;I}tHYf?RQP>Q?{O5y@fqbySH{k%bpRk!6!&r18zT zU+;K>ehi7suT<@-LPeD>4xd<{zfu*aJsto3NoA02V_YDcqeCoWrv1yw!3 zrht)^duck-$<~()<#`VEg{G5ghYBv`{?vyQcR-kq38T$%AOJlo2pn0!O82HHh`IIY zlT6&-4Ip{_3NAJ^+{M}HaxuUV%Ku^LHQw@>_P^D3Apn7rTj#T#(4~U8@EOdT63b$2 zQO#Y0%ah6a{YSbf?!Y{Xxir>i%t>B2_FA-)r>@|9h*qa2l5*|J8XjWu8?<#3w?8~& znKM9DCJPJ8H>rwrNBrLiG5<`q|^+D#nDJAdp|i@NF;Zq7e^%~#x-n1))X9-~| zXe}SCX0MX$A)hHPC*@svcwIMo&E-ctaSgT$^mLY2O{@Ldle%#>qGa}#+XEQ48P_-g zBspbnb*mCg!{Mwj>3@m=jFKvM!H<XIirq+;i+Ae26Ige5e!-_gL^dry?#j@5gWOFtsr4V~fufVbLsUJax7 z^aO~GT>=V@6!g+UnL_r2>0@3}Up=Lr>i6b zW>}utm_$tU?~tRdkkWXw@cZOIEsUr_-+O^h19W6`?SU}Gp|sfQRq`4k_eyvpo*O<` zZ`_8zB$@M*s}O61gR&^^k;Ru4PC)KE22)YArSek9M(^M z1JJH;b)(Y%^i_mCEM4wod!lBkA1T%Kp5hIOf~<>0N2lW-csgX=#!fEZ_*ZMWSKO

${*l+7xd?ulnROMl#k0+Dar#lE4}%@K-XnHv|xO-cb0G zCKmzl@(&j6BEo>4v(r40SE7yH+-_#60Y-2S<~TL>Ni$cZ z&=&Whz4A%j;LsQEVRHwEjwl+B2kl8+yCSs=!ey$*bPthrsRmMYx``r~Tp zY5$OW<;ri}cZoj=BhJA3i1|!zxE|hWav=71eSY}c-Z#uLj_v~B3htWU z#ke!esL#S~9(GlU7Q&dHaBbz1hcHXG5ym(ASKm5s0l&zYrheLGVbxwzS*oHcQDji@ zD10>vzRkt&NNLGe!f?NMg(?Ioe!{?bIB@$N`CjSD9u&ncb9LMPSB42cA)a0u{22tPe}F-1VMsfH0{I`wh#YD2qrmI2kJW@v(xJ{qSuJgddDfu z8&=cT;TqwbdS0cI4V;XwwfR9a(xfAJRA#;h-b71{K=0~ow6W{dQ3=oZD1+i5QYzsR zUhwwDHTj^_kDTWz>h`UB0GT)wvmJ>a0Icys*e=xPM`%!Qx#4xdH|u>9M>gxpU{h1M z93~3J73%Gk)yZtwUQ04IaU7)Shy$|30gO=%II`#TaQWnlKQ`lNrr5D7z-o5+<1sE% z4~mDD!&v|iq-0VuTTR_hjZ%N}9D zmXn>H$bsgGCh5D2H7YZs=B;=sKdQ(OFJ9yJ5|A5+jzpETz}`{R@T6f_df^oyx8KIH zy+quC9u|{O-jxuZ`E=CC0VV`{iD3yz4Gisg6{|PNN^j62ZrXp1o9A8OAV(T3{D$GnDJ)=#G+HBO5<&J%X*L<;?iE@TsnQS~ zBwQ9=8rT}BNd+SNvbGJTo&I_uxN!tbev!xy`$y;)K;ZsP-yw^DUupYu9m*$`SVu#P z>Ko=HljzgC?meklk^Q%KF7MMjA?-;SbJcY^#Sb+jPs0ljXeaxsFuOz$UyCQzxVD}{s60}!y)6W^(1P8R`MEaSq0D>d#Pb6+UywldFt)tX75@n?7?FO`sJmnMEp2_|9KGVO^M_$r^=V z!ACu#+u3S(@Ci(ngQ9;|9HqmYx9gR<^c z28PKt4$_?p0I+{m8jA#1(_HPRc|~g_y_rc*u>3VspCi|UzBBBnrzFWlseI!7S;uFD z8Qip|o!3~}9!y%-UMFc*Z3|i(&CqQgR+Vo}y++`K0#J!z%r3(cPoI2GA^VI@iL|>h zxg!1h3Qs_)lANWk#pzi{)qV~lmw|m8M{T$3-O6WPiLEWrODr9=t&i#ss4>I;Bj&|; zbwaIg(;;nfR~kIsl8T{0%$Oua3Q8tNg|^>E55#|j)&mi+_4KsR@M&cWm5!12(J^-0 z%&O_tL4Mf~yJEB@jVos*?Y`bvad)0uc_0t0xm=M2RqWr1%#cyI}Kb-Ib=m)7) zlJTN+=o9mfqH*$KB0?lwe2#Dsk{5me;O-=CA6qwMtD9%%+qrH2%F5~1TsR2y#0__0 zF*8tpPBZ%RE2GU3@^qfz{v}RhkKK%G+(nKR>|cnm^XAKJtfIdg0sk?DRGZ+NuD@ZN z#k^DA$pLXSu4!_o;$ z7sEM1I@{4JI!ReM$?J-Joj=S#`?_^+o%3EdUUHz1KuZ%nW!Ck%$JVd7^l^G!+B)8Y zAvuP$0QgvU{yWp#l3-l)0$XHdY2KKn*fy3=9a6`#Duh=aZ5Z&0MT1iIN4vumY=xZ^ z+NKWo(mm#wy07%hL$*7(N`=t`ZU<@yxiW0Vr>lRFESe|k}z5co@=h~QnKf_O+3C_0EX8$(S9Nl1l9l2!7P{cL$I^3%~b zgf0vdvnMaz>v#5ae`d#`1$}kF%t-XzH~_d3c3ta}POLD)tWFbe@~i$pl{uUGFI-7@ z5`Kv+n=PaneyGE01ToZc?=M_@)$5k2u3uXC+h%arvsuC z7nMpawZSnueiv_E_{YR(KlI#%1~0m&DU@-_e9Ilf!XupGvXr5bq{Ab3`q^CQ?(V_^ zR=`4Ha_Tjicg**$yPV+yYbl79CunUq1ji>=Il+P*hGm@$5OLs=m!<&#BqWw^+d1^1 zBRZCfE))eiK*C8S@Dkxvo+256XS}rtufTHO;A;iVpsoHc)k?{{I~L^=poWY&I}yP|d@&Uk zVT3LuS&2@XucDS>E$pf>a>L|8)qM8km=) zyX(7g+~OK*w6JHqsQ!C;fBl4H{kxvZpzbSYtIIxo=05Fd>J~-=!mUf&*n~l#<{-nhkK|}taS@Jr)QU=a?Q+Lih zSzUyYB>*d17P0$|jH_sKN7gG;xn+>y;nH%XLUd^BH^iQ?EQ?tGA`razDyp)F+^<| zEKsn7l0GOG+q}`*n`fT5d#Dg`%EQ{9=c26Uf%3x^%Fp-G9KV!-!~u^1s}FL%;!x<- zUxzp?z(+Ak@0e3*m)FEVMP_U@$1Y6-C4M3)rg}VniO-0GQKdQ+@_#~~*x_j}Nunuy6A3q!xU&%g{>~Ul?I@-a$r}$|da{=%4cD`Wqu6@-0&1jUF_ohdf zi_h%2K9V0NB-20{3;=v|d&ic#N%bvw^1m^Lj2z?0W)-`EjkjRyyoR_-w!}%=XRYgjNx#8JPdJ9B(aSvQe zd*ji84hM4po@ka9r6$);a?L@{YEHTux=`&gRwfgY*a!SfyZP=r>rcT9c1=%;ov%IC z=!!CQhYbdrf~vi3-SA=>E?!ecx!P%h%*Dioq@n*#xkFfOyYAcx0z0>UjQuZI#TsVC zq7E$YqBo2K!hf00TqRX!PzRz@0m;^ZIY`7y)5Herqkd-6mBg(J%a5UFQ|u zm1Q-m{w2z5w47Fl9z4VS13 zNH74=iQv)V#VD4*3s2y5yy$4fiA7|pC3n1k+qyv6MbO4hg6&q4rf@#cT(0@G5(rLD zE(WgxXVn^)hqH1V| zpBZE;X2nxSi?%}~n&t{*IEVc`@#uBh100@J$tId`wcM>3@Eh6M15BQNs-CI@__MuNEdYR z7$i$%q-P04#3G}mreTzbB>D0)lNavi+i+z*I86PP&3ZN=PP{Iy;^1=m(2p9sHHr+7 zFl+Tp=hjs&f2FRuf^~J47V=#3R0FscQ|byC)VbV^LY8K!@zuP%rCDgnT#~(UOJX95 zJ^DBbH6V2!M9s~L_t@~TWziJnr=)sy8@xuJCH0TcJ^(=nsPlx(Hub?8Jx+AUp4?~8 zxaJ6m`7Uvc(I|mamfCN zi`&xV8>E?Z?{?5)1uv1WWaiOM?$94|m4WD~!$-!WwCI1y03FPIAVOqbmmbhGjZ`Hk z+hG7fz8n%@kXSNYDFhiISUJ}dgBu5d+Xo&1haiz{A0Eun4E44p8U)9ubK86!zCTPn zEXUk>^sAzL3yC;J_Ea3tqZ|$qeKyR>@9#9!f}1d<-oc=wt1eTk8RdL0C-J*4-T4oL z`)$xteF4Fz%|>tWY_qT^XTNtD+6DLNaQHb1UNgcgr;n@EGJt}D0>JvBaJ%VvA#&iV zBoE^rA{rWEVyV~Wg3ZKs%9sxn#9VJLP*li0a_b=0Zrtrf1>37aUjPU*PJ6zByt8k} zloXIcI7pOD(t(dB9Y4=FPHHGC{fnc;vZ*l8q+5S^THlx{%UkEata*R?zE-;~(BSqw zK6AZZnA5V4I3_)Qy8nBOp>rit&-qdOzAouy{vV;_KtwHp1&2DaO9=$!7b`}gST|#1 z4iZohX2uyT8LOFS1MQEcFZ%fmX3B_Xv~ILIn`IaUh$K)56xkm;mi6S*^pItYv2Xx2 zwp(7A;K;d{&G26|@ENos7$TOm0irL~s2_Fu$8^5WgC4^5tc{Q=HfV%k14hfxF(+9? zxmRg3-qn)dFz&G>v;PDk%T%(0{Jvi(K^0Z{38wu{ww$Vx7g<_c-sX}T1Lwe4blnjh zsygPzz zzN`dkOpH@a2!p;(d}feu=FVn6k9eor2AwAV1F~mc*LH%oz3_X#_&&gntrwNyj_n)= zJq0*Owp8}#Cf?!J#8?lf&d^0lhVI$zMY5aXJW)cWM=S5IoG;PndF5ER8HQ>XB97GO zjr6lKH8FM9uZypOJ?BP*5N}STC_=mhisD0uGtH-_Xh*fR#AE!m5)8On{B?L%?``9jF&BA<21Z||I-JhPw<&P6LI6l59Y8+fm;k!jn^frM2!5&>x)fd?V%#M_(AA)}z;{?t-P zJ5w?@6la~Pn&H)78Jg*j=WRf$bC?oKK{qQr^p#Npa~G(EaTtP2s|u9Q6)P$4CSC?t zkPx%T0%IF$k$N*bn#YUZ&DkRpQM8K6iMdHP^rc}=I7~dOdqF1uEG|MBpuuOi-78fA zADY;5s-XXBBA^c@Je!u~o!`ZBx5f{1kfxl#vnNQev+6e#ITrXp(9NP z%;oS88$6_WHU`2a@v*W##hp=v-g-#m*BAl8J(piDj=pS^Ewue@X5za4Qe$82qGs9T z(0X$cLfWCU!yucbVe$_6BOjX%jh;E(H~b3&exM zy3v1M<1t+g7Np-i-9e2xAa}RW09fM>?6UN2_k10$z%c3~D-wY%JPR#5{3%;9Ub6c) zos=0^Ys0wiJy^w>g0h4CBP`V?=IEpGKSE43 zkh{RBKQ;A3JUV!*k2dN*i=ntxZ5F9I;nQeR*HyX(?On_jtBiH!P?Lb-;N@9GgDGS? z!PCZlJhYl^vq-n#@pTbmd)uVE>fsG}Jm2O=wqsH2Xl*ayHeXI<(b(c2352~{ z30rAFt$Nn$^)V{ZLV1zzzl{Q`46w{a2X_}y5u%O&D2PnE<^G9>{qxrYTBRrv22I+z z%`d{-6Oas+9cEteP~^mr4ubZc{B+}8Ogqi{_w64#_g1^#1%;qIw~@TZ(eKrM_PC5G zg?p%K>T+~nv`O-EsG@_gzI?vWo?f2$M`!^itk=`A+ri(2?Y1XGY17dGi-xddEI2J( zR+trhbAGA<=krjJboacAWV(*x;VKg1m(;LWCQGMm>ggfWO3R`3v%)$hjo~ytvxgBLZRpL8f*re^Y0zaw8mrSWbEZean zKpKMwNn|3{4^2+rr$BOy+L!P3ci)JB!I}C9hzSIb$0}^`mYy*c=EoRAt9i~y$e&;I z@(^E`IFN~6;L8F^~O_S*RL#vq7BYA(Keddmn0pkRT?_dTM z$H1Vd%kr)TLu;R*gs-KVE%fNhuv=#&9zoi*11C)qB+H7`CLQN_aFt&u$JK;@|JI=V z?{}Bwzxe&!BbMD76m+iBpRx0DQ5h>pMEuN|-jd*XsG38*6A!W2?&=7`f1|fIYF6fs8|v?s^6^LXD>-jQHlJwY7UKE`bk3rN z^`eFW&~9Z|DNNpkTv(;aTtF{Ml?Y`2{f15g5jc%zVcBJyA2595Os&$f2xIiBF+q}= zup29E>%%`v1uwKqAQ_DTtEU41IAc0t#BgdzOK< zd_~@-L`Bl7ZyTD|1f!+z`pI&p+n?CDX{o7Ybf_&`O|+E7w)Xv*Azn5YOmO95$xBvz z!zxo-lw|t*Yh&})F(03tCa(vRv(peUSXdpAi}`4QruO@ji0W8k())@cocnPKmcJ(4 ztYK0%7^uyov5)bStE`A{^C-uW2mD_Pk6L^-*d>sWM9UDgxuQ@DMU!Kv_jl&rbm%z{ z5j4HL6?=~$yVhr6l2>^>&Ul%QPed4sc0;`t8m7t0(@zD4k7s#}HcLL2i$r2EU=VR= zBvqSf5H66(R>ncxQ|r%})bpxW!?gde>hmZt1deav1e4TKR}S4tEKHc-1q`a;_Ue@- zh1_1o0}L%2Is#PR@Z^_gL9Z`vbGS}9l@B)ei!6vpXWB$TGCx?7;VjJbG_V6D80z5D z4JISd5&m>!Pml*A!gWFQ0dQt!pfbKYs*cn^mG<<*&II%D2B(Yj0YR0P<4 zd4^0_t$i!?^np7-uTfl0X+KE7Padk4SHTyqcC{4QQu5w#(?liDCW^~oqP7%4)Y$J;q0@Rk@dJdEv zjlF3K?f3C#dpa*KR%xs&xL5M)oMc^FE4ghd^8rfQb$1^Hla;%4Fq``tFDemB2DPlB zd6zz!W#UYyR2rI+>4yAeq(v%{pud+}X)LW0TjRRIxB4e+1518v)k-4VoI6Jtp96Du8Yid;vpX2#4 zSS3vsLed(VYbawA-m!jFS~Z>!RE0;&Y8lcYC6k4}apVs0K^xU9y<@CuZ)GiIw=<{m z=tU*EUR4OBFFF3iM}MTr8CfY4dkkS;Kuh93tdKb@Q4XCuYMi<-Q7+6KlIbj~9gaMp z*NSpc_2Q5fCkgvdVOW@OPPcPI8D$c@syUfy9H)~kn3!-1RNNPhpZF1+EUbP8z%htR z)Cn|@?vuc1P!O8f>#cXqY_a3NV$@=2O%^xNO79qN>NdRL(P%u4HYhk2htA80PhCjT znKrEHmIYTtZ~skG5?p=MnfWw1RJVQy0N}fg&Hw=K5`(zrzmCaRVHCnmxTz^y+gQ`{ zI9KZ`82AV$x0pkQDBI66YgDXr9KP%LPN%9%wn5$=O_?Up58+W9?MO(gVH+|eaqo7Z zt|KN>f};rXcze(E<7}k|))w07?f)w@hACJ#f!Zg?_!=g%qxq)h(HJH3s@3$>z1o>9 z%{OQjt7MOsEr384V@~!!NoOBixbN;5Xl!`HGf9av0!CX~A^7!8(|$(bRV0vy30*AJ z%7BfB2fee6eZ47w89%L@e}s5B7FDJ4K5zw$z3O225zvCQ#lLL} z4|&-?bmf$0t$EqEkfxt#RS%arM&v+Vt8;+IpUDROh2%4Pt(0)7!HiKLWJ zFya|r*qdFB&D>Yji?at^Bae^fXZ_pH^Eq|%)e9fxYt-xJJ1ctvqld|OOv-T#1zY!= z3}tzeR*f(6Qjg>7{D{Wx<;q!3tJU#Q7hGs8%H<&d0HOVcIUu>H#z`pq&ty8>eK5gY4Nz+I6;Pvj7E{-0(%#q#gIz8sO-BWN&s5&kGOddgae;0 z5?8UL!NVaXx||`w^qc)QZRjXD)_<=L*OB;Uz-ie3kgJBZfw8DfDrSq9{J-F(SdNO@ z+q4Rc80U5XKr(Te8~||T+!=3(Qfn zf7A02Ft^|$-QCq=Mfi#!QW?_nv*O4PTnSoC@wC^fu`B=FRaezIGTmh<*ZgehR`nL_ z*=-j{lKkPjEdaI9V4IO1kB?5|{PRENU zLNzWRzGN?jT&KW$E<08GmM`Z0Y7N;*|5=j~~>? zw8QhSkp#qz0@$KgW_)R%9N7tpWUb~O^|`k9YmDFhYn~`R9)S6 zOrRX4dbGQjF_rYQpQ+9;LfocC=bv2eJP?5#sOf;rR&U{8&mn3Rjj25^U(Ky7`LX86 zFPz{HH%jQK8ciuzXAwZjd+j9>M`aUR2G>(cCa|Z2XkqShpN-s{@=)nWaeabflfdG~ z4OfnroIB@%Z+?oU6JyI;NSo)HfPIMeEB)V*3xY#K1c$13+i|~r)}i=9vj#ctVAbSt zB}40SmOywuJ^olc4KZ1kFd~BDc0|QQ`A0HGVk`2ZIDBradwB!e1@QbdR(IRL z6^1QPx66@+D=V!hnpK9X-m@dv4)ZAom|-%y`r6aF#wx#%cGhSo{RQXzUhC+!lNSJh z)2C^#2f%kwF$0kHFwm3UncfG%Pbp^4x|gPagfGWBF4t|)U8wd;^~d8fc^|G5%sw%t zv3Z_7kr}SyV3a2dqJ1Ajs=;RxW+i+`?o>h|&85AyYt&h{2LwCAYH1Mok5IYssE36l zy_IEKJO@LQWjK!&R|BKHuF9#6?_ZA5>^yLNmQwGdn{WbTM*xKw zg@bgObn|4z;j+}EOsv>`C$t0v{2S$9;?{d0=mc5h#|IQ8F){crn4})^55~TY~54 z(2AZ~(fz}b1fUjFVdtSu0j@a{8U0eKsdeMZA%99F^ln5gsOD)cpQdKrf; zA%qo9PTt;Dvjr^^__d^=@Uj7E#PhmBvr)Hl&r9Wog1$Dft!d( zatI{-@ir)?n6kWFVB&1aBMfd2JW!~2RGj?Sq(>x_JaOKJL~yEv=5iN- zwp8ILa8Af5eDjb#V(SlQ$ZZS)l85d=1AnMsQ~UIn68iA1@y1A+#3cJUo)j0x_QC5W zJRhV>X9Op2_sVqIHM%=lMCI8(ZjWyluI6`oO(M`!2c7Qd#g#Pk$Dytp#m0>#;O%(t z|FLuyY;AO17YEqVyX!-75AIfqI~0mrzVyAmUoe^6 zv(KE_XYI8PXy_(fZK}>)9$HycEImZ#$45M){4)OwDw>oxH$F;J!R%?2XOk|*HSVyevE2#KCEkg{TyK>OM(HUL$biAs6<3k`WEV7+_4WD#eQ}eQQ|W~%6yfC z?s&th0^cNjnGDw627fqkSA463p76d^QXrR8>5QNDU4+|qMnmF07ejvh+&nRH`1u4o z1>r_nk0i?%ZtYlKzU-uy)X@JJn*bmf(qcMzj2M_2M21i+c*1vkpqhSAm}!?MX;ioX zHxn$R8rd@qL|W8uos1t;%~Y+155FQ*hw49Q%#ULmchEC*1~I?I_i%bs;cNTY1r?jq zo?s;6Z6fQeRgO6tC=uym3qywNH3zgR_v6svsbg&#e{_8#OR_m}CCh}4^ifnl`arN% zQq=>ai`XANlH7SE^_U!1 zv3i+gyHPM@ngyM%Kh4ShRAY-lr-;YL$a}(C;5%mpUwe-ILB3Byi%NR4Nvm~2TmKW5 znO^U3gWs<8Wq@v+Yuh<#wP&ZXs@7Y;DZd5+1ycooCo;4w_?v;RPmYl^ZT?aSJqe&XhM8d5wJ$f);6CYDadBa|dl;jMGWSMng6$RiQ9U5<7M z_>x$Nif9q;rq4d!MPI4?m9}5~`!4Iaeda=&jD=*csu)w9hIYw+)7+5L`C~`5V|Ob zYxW&6c!4Sc9Xt4nN^QQZ^SqslJ7J!cv^QMx1g!hqGx$^`69sIrc-k#Pm3#`7E+p}! zbnWbd3;{{?Ogl%)QOBR~>3IZr{2TJmprS?fIgQYF{P&~ee7=@ATF&XA8ENSOL+>JE+CmALncZgaUm zB?SU_rU$9nlC|vj2MEPM3iQafPG3Qw7L!-|G%e#QsIpwes!ip`%_KH8&r?I)?AxBZ z87N*1Bh+sTHl)AV)gAN-&ZO_sM+3t9jbZ)o5ZoAyz-?mic+AqOfNUsg9?AwY+lIw* zXk?1AJ9`bFCWV31X&KAWNXLeo?cax;9JG6Cc7B!h{zVsuWmaC2h_%yW6T9!$W&F&1 z@Te{KEI#@>o~??Sf;dKQ-Z6O=1gOWB0S!3bXM2 z+Fm4LMc5US@)=_BX9Xl&(1{j0?+6i0=*XcOgqHxsr>J>ld8_Ujeu>`d^L+~Na_)Im z_r8WI27h^T4xBRVni?=4SI5AY;Zj?clD3J8j4Ku|uEL_#7q(4EOUAdyB__FV?>0l0 z!Kf!86sh&e&mrW%IZh#<7pP8T4%(FX6+$&$URzQ3W(XxyOQYwSdB@8AyTZs=;E&GhN881{*mVfbsVVbJ!|^fW6l5P_kVT~19ix(1!Ma_Z+{`M61NX{{W;AYIOnBcU8BL3+#{U6USp^#w(a`DW{F5ir7{U0 z8z2kJ_7*gSPTZ%oUhFe#Y3h9Q3o14%tV|%G{k;$#BlO~BVCeW!>)24WzL#L^JggLL zDCn2C`zpHSR}Nt|NWK?X_><6Q{ZqD>H&kZ1zbuExHNveI23V4b7D|?Q&(JT0Ou3wd z?jcA)GLAl50UAJ@Pc&_)#5=g^E=D-q4@p!bG+8y%X$WKiwteLjwauZDxz$#0>379v z#ZP53)MeLVrU93;J(m;6B@F`bm(Z%|{^B<0YG(i(7zgP6*9`f09L}!0Td(_fr3Wo% zjrLZC6RVQ=QfJNCanmb(D3Q&V`@Gs#C@OWYjX}@}%5OsFysp%yQNR z2jA$66f=EyKub{0rs0N2ZLFcvwjyWM(F5xc{=J7H0r0!xhR?|Ov~nZQqOj427|?`e zSw@38De{HL9dV&7M6wahoM1=JrM#ecwvmP24&|<}mesRJN1=Pw%iEiZ1x21o>r=tm z6Tkiw^$el^(54KbwzQtDzaQ**E-WB4n`6(%lIUaxP?FQ_Z~x@L9U6S|_z)YTo~wAR zJN|hjT>TM|z>=1H6~8O9FB#8k;WJF>6x=s=EIai^S}Ur9&ENBu+toVjW@Smk%{`zT zxQ>J*pjk=*&~W~)z$#2Dv>hM1F=6@V&+3x0oxtw4Ezzv08cR_Z`}5YTzP*0JjRCRR z=0dg&|LK4zKNRY}mZmP$#MEv5tgiutcQcRm)_bArWk%2kmFuaN<-Di<-NBoo+x!GG z5rfRMD=P+Yg|@YlF(vtbIhP2!W`W{}%3vR~iljxf)l{7ZNY$+fE+ckGkZ;NjF!_64 zrdm6ULoPpJHb>Ix%rOj8jQGFs zAPMM&b?7e$drMYK-hO7lhef+6#xsN&54}SdmhiPIxs{4-eD_I}82+of8`*GxzR*q0{|3pz) z{Vrfb=ZFW#pS_TKekeZtQ$RC0Mf9l=M*{K;2ih6fAOF@bJ&x>%okH44N{l^5UYG)E zd**w5ZYzn?*4EyBaRx{RveL^(XqV1?3FXJ>|5B-z9Ua2JK7v3ca@+W*u9v1}E`s9P z%BoTM+uGFt^>gK|3-s9qHei`mhoXNDsyvaQNt4e6BtcUfq!z|LAYxM%N7>LR5K3E# z<25j%o0H%r(}2RnX|SzpF3OP7mpn3J%1laV{}Ji|!%uVT+n+JrC>1%fn+;gR*tx@M z$P1S&%K1P3dXEApPdc1+?x2MtmKPz*{AWAcV*~!K0Os04SYH7NBgumt?b)PurF8uy zV0~783UcvhYi$m$JJ{Fqw+jiq{)QMTE+6_Lno|RsM)g6EHd;w)`luwnJ*~aIe2>cQ z!|3IkTu?CVQ|Hy|(geSei<-u12QfuhoDb`7Y#=%lEsy#k=h}~izupvm;>&3IEZ6~G zxsK-%%JZvn(XxwBxYBc_20$5cN}*ryN&2M>EylEee^<9B%BqTX6g9_T_ zw7TQ~961z@J`5$83eYdoz^;R88sa+;QV@Z`#E^?WQgeYp!ZaDen4Ppw1Wn?IOu>l9 zOD=;d{yHv-WGw#VeeFmPprAZPD>57B{}kP@|Buib7~zBX>M1IV^rt~Gn2;nb&Th;6 zFt!CwHo@uTPc*Q?CcA@8hnkFPnYA8LJ=(#&1EPyr^oWdP z(%m%G8DtZ8r!^>^OqGyH>W%|oM~$2b)LQ7p30HV9#6rHqdn>(6y(*RY)o`O;Ryry= ze7d2QR`scn)XzxPb|rQs*s@cNx)6JcFSHutQ-QBoCu3PTfyI zdUM^@weR%PqRsQ%vDq{K-7GTesHI1!Y!$%Iafz+*12p zaq!D|(q5k>5%aBq6m}e}NG!)6jK8+>l@2>&ghWCeS*M4)=R`tcR$0@nz zr<>=xSXN<45AfDYdLQ*&B+}U>4|6Oy5OX&vM1)cEqZfKe6sVE#NiyM)dowc@Qqa|z zj}p5-HU_`7yl;D(vyD6YG{;);|DOG^`N4U z9tWk*qhyj*$rpvyu_Kn32rsRxV-h%es1DI#RGQDrWqC3YyG~LnP#0{s#_TYCGYZm< z$x)$|?l$&~3Ci|*6k+1~GagH@E?<4Kgc1`z^}j&lBLD&w`|{%%=WiWEbTN_9F!Ys0 z8X_rO8LCi4X*3`5d;Fh)u-sS%A;yG42h$}*sa(o;Noi%-Yr$?2; zGp!i-{ki92Pw;c??F4rw4hn)m+|UQiLhs2jw&^Jw@ZN*!sHYnE-p<-OBr3rX^-3f8$nvT`76;fk7ky6`D}HQ zM1)V8CFEo%&6Zo3W_&KAWmu+*I)a|lH=~r9f>F&BwlHr&w_cx)rWV}Ncc;FvYsP7} z`_RDp=O8?C;4^&~2+H|w73fz^g?VVmIj3DhM1&|aOf!!?>X91YuNWT`gbRsppt}#? z5C0pjhJPv^@9*%Seq{D(HZtl|5tM{RAS5^f`d35eV1zx+rR`&04uz5lY>|Ew4B(>W zNU;lC*vD#t0W^~Lm%;(gkFv6Ka*-P};1~E$5DbZi(vzI;@^kvgRX= z3x`C;B#3T@QskD_t+TM|<4+xTAM?&26D8h#3~k%m!c}mkl}|Sv-#>7F;nh{mT4@8~ z^Sp^QPlY9y$}yFVt0b+Y`SQc*Wkg2idj7;Z;2$Aa4Uw?xULBCtYsordo9{4VrL>tt zL`Fiy-k%5lMg60(C?i8%`C5y?_AQ<@KYw31T5+N=1lGF*0{E#Eu4jpaFb4%Cf5z%I z70H`}l?GDIL3ERZ^P1x!IcR)Q8XU5{s+<)#Mk`BydZvv%^?Vi=G8QrhYlln1%tSHa zw}BP22kYzgm~R)*=f`Jvqh0_2Kmbre%b_jV?f;qVox+sOXb0J^>eorCFImg@hBdvx z&Yx3QM?~y~ZrVY^R3X4=5v3IN1Ari*PYB{T zdJIvP9SseuTKWDmDgI=)UQ+8UTm|?u(Pd&(SV7r^41a$dMGjhU`&oP!Y}cZu=o9^EW@kpSDh|@RFv^kTr0b#c<%rncTMX1Fnx{CR}HoxZH1kAnu+cP zG-~howm`_QVg4_Fm&F#(Vsxzk+mIGqtNrf9`@i=PKuS<&4JJ9AF`( z6wivkrnCAHq4?E)6V7y&>Ug_cjw1v4RjGBoV%NPlVBr;XghI*h(6T4{PqMb4=9!UU zh`33FXFqhxRPhlv*sMp3ICV(hG4n|3ieDlA@r*ARr5&@Lbo!m{KBt2&Lk%l0#LbN-5 zt?LPTt^r$QPLH4B|Ev5NlOn?jM@=iKDNGpEy62&QDb6}*_=5`l8JSBCY$t^VhY%Vz zS%I>nsLiEol8`oBwO5o+U~*gNRC(!POPRy8><>P`*mZ4(|b#=2b`WL zd=hs{`{ncD#||cgqT?u4d(cpSn)T%ZwuZ;+gZWdmX73NM^>Y)$QeY3Hdbx$;&Ou#= z|9y?xq-|QmfZt+EFy)~`sNOREu^U@^@jGnYCBtrLw`E%3lHmP+2QVxA<=iYy8t?u1 zjn>dt$j8kC!tvy z(Za-@*?4Ks9DoRThtidWXa3H`0%(OOME$u=hl*A~v)vvoJ1u0;CT1Iwn*kn1qE~K< zL%rER$8Y;4T(%uhFJGk^Gx5=8fA}_7$FoFnc=phjx-QS6-l+1%r0QAJ@YuXmMhONRLl~72=X9~cuUnVrUmA-Kx!<7s6U4?< z8dKcwgY$ev>>Ccf4VHI%UR|L^)4_R%>sAyn)JKx3RMfE2fmb!`WeP>sp(9eJQ3U{4 ztQA)^%U4&Wnpm@)Tm*7v$JU4wgu>!cFtBB#g%J1gP#Yzcs)!r<$ZHk#+#Wp;xs&wm z{(PcOiK*)k?Dj$&)hl)rI4Jj*MsM%!tsgvo!Sbmyv86z4dN9)q$G`kF5;rGMfAw%> zG3wy!p})R1(izX-TK7_2oy+0>VDsf^)O3aEA0cHh(v;0cur(Ooc{B&}Far=Lsy!()+sl+4baVPGqY4fF|OLuU0OPU#_4~ zwN|_3fY@KQU6&V^t+Ef$4~Bt$dC>25B-Z%u0N^$YN;AsfiSZN;JmOdtT!QGYIzyNN z2p~OS=cybE8B~FA94tIBE-LM$E^D8uW2LeBRn%LWOR$hQxiq9+#*Qxp*INM#Rr`}Q zyrK$@dL*hhjx|VI(#aD%kDkCfgh?6HSmS=K!`ck8FH?{Hh0Irvv;G>xqS}m05(&GE zdb>Yd)`2Zu3kmEgM^nVAug z1w2_1enpDMV`8St040;s^HTkbnZ%$zC=Btov*fR3j%#CH|Zq=rR8Y5r7dC7=8s{kcuk}IQED}SYU!3UCZhr zeKy$V|NTWvz!1;>OogD!4ZlS|JeVzV<4kB$m9pdd_B*s!-E5_!9%4PX(Q%DLDlT3i zGFPsd5-o*b61aSnNu)kReOIK2zB}HD0{{bXaz}x!Y6OgCVUdkQCIEf0LwYq8@!8#V z5~Ae9&W~|PX?lqE4Sq6Q$~t3*QbEPJ`1wMl8Tse$f=rihs!gG@MMrJ(Y4Nbz0-z;O zjvCqvv417TKswKCPs>pt{C!FC?yEb=&2OdDAhe-bx?G_9KxCNY&X>t~0A=T~=;f*Oj$Op1EcB{Nn zLlEYEuM^R#78V+tlN5{j21_s`5_eSz50eI{rV3v(hX}xSd;oYRCfQ_~Vx6dl*-YjQ z`(HNo*_8ke3f2g?j6LD^m{Dl7eKnaL4Mcjr!;X1?D&I~|UnU}xkc)A!V24$h887&{ z$QVBNEo7pB8M)TV4>^QAei#LSm!zm|ux{_>EIcy)9lNty&l76XKz#;k&zvO%o z0>+w`iY5vQ#rL>ohe}*6g-jmLatj5(6@L;SZ4=ujBO`9 zC4ph&h)MG7R2WZ%A*56yKFza2G75!Sd&WN1Ob%0CGsl~r(2zRSn@;1N-u0%EHq-G- zh1G-zhZ{b;9I3by+Hg3L&n?jExcH$`9-Yov{i0yUhK-h)b%a5j@LDUj7#@HKpQO}? zj4Z>3ngwejQeV6KH6u<~Yfzn*+@mrgUNUfWl+?!(YI4gubO@lAeq8|W5GrVKomq}_Z-B>Db~NyIXQET& z^|PN=>)b=(U=d_OK!dfT+5%W41bxpnzq5!9LYd@-Gg>I}7Sf7}v(;2~q^o*WGiDs2@c4~2P4%3CfQJ|&@%p;IFIFF6haKJ zOy+KG(wy6thet&0Px;wwy~JE$tn}q?{oT5QO2Lwn*fyE_D@6mT&$@lG@xaGV9!J1}23Lv3hJfy_>Lb@j)TwFp_Y$9V|;y&SE2GYx*RP z!Rl(1+qXb#%Z2V3jii}T-lwp*@o$L!Rvx0tg|;V>VBOodP7hRpi});nS1&wm;1mX; z*27s`by#mS28Xd@WhFcT32Al_C;<~OjY@#E#sboTyf#gxRqZy6S=qh(Q)ybo(cy^y zq9_=i%$&?*0edZ}B`5A_vpj_*;Mcm?|Ah4{00c&3P?HlrheQ}@jYKFpCd#Z#O~xf0 z;2YCz1V;XCwoO&>vyeT8I6;Z+$7}!+iL+q~JmZ&0D!9a1WO@)bTm~`RK*RjBKUAAq!Sg)dHUNlYB?zLc?_nhlSNu-9)uUf> z-uQwX^ZU$uajFnL@T!iUNI)~4;97T8Q4iWqn(Vs~LC`T4~&4OM?~eq%hlgBm}JT+-L?TcOu@szB!T z_b~`w+ts)Hrq47M-kQ2|%U(;hn`fr8izP|{q&6L$-63lhBsxq5gYdZO6WZp~HM04H zF}Oj%6TwnDYhtxr{RpD=#mcDh@!FSouabW?BngIp)>(AlC0LO~8V?es7Q+4mvm_DG zb4SBDZN{J_?b$MwE0TTfp@x3#CHBzxHio+t#$BZ7(7E|#$!^lc*)CbLbKOcDplMmx zNh-()o;hjRW**<2Ehk+Ndh1!hhEiV$6YIBb@rRP74IE|M63eEcxM`~s=e}$iaKzFi z7jvfDv~L?V@nhQj&FNq{DiKrJ+s5(8#~fS%;|_#rpo3z!m8+lKRPiy1^`rRM=8Bs6 z>XVTIYE6(%b=ZT%jxSSeQfhI4W|ZM?F|8 z_{$>Kf$F}*XzR`BwO)lRKDK;^V+1~XF@BwqW3Jta*c!@`+h8;1O;!WMpW zN5I#q2g~q;%&e0EBp!iDWVclnmdyfNDLm4O&(^ifS4XLyiecsR6WO!nH8Jd)U9Y0!+XXv2EdKBrIjG)DJArntgag;f$dGX}9Sxc}t#WayBH9>DANM=E9-VZbF+7!}< zs4%r~Dsm%Pm(rnYv>E(0(B}E|t*#w*5aBoMQUIn&+B~lpSS$KA3Xkglaji%)vB_2? zUmIN5R+QBUj}%9P5`r*dKIpDaN6oAd`LBc=zzE`&+ORNI1JR);ClTr_nBr8uB?%0N zi~jLvt{Jju?09jrCl^J6^MbaocD$N!-NWF^8Spkb9l4(%O-Ptl`Rf^SiczYvlBsd`h11!HF`O^>B%8tUaK(_LSdAmZ zBI|YfLS2N|UHaoXh3T70X=`CbaPc)Oy+}}%O|rga;)HSSB0mNX79x<&3(?t@C9Iye zA8rybBxyrTB};+Q;Esdv$&4d3j6dh61IB+@U-s=jV9y{l{~n_dphUEvkH)%O_s*xM z!O=3T3-qYk~vf zKR3KS`(0{14;*!*d+W5Acz(QWw|%_K^SI|6KQI>o;4qRSzJm{ewPeHrBz`kDjQ@q= zYC7_|fY8KV7hwa?m{pX z53(bFy&2*h7Mwk8iG%y#%&n|>^g&ZxQ%}dMUP7)^4b{u$K@)OYwXg%__|><|8+V{2dz6&4_U;ZNoHr9V20yJVk${u_bXxQB{ zM;O;yW73#BMT1Qtk|(NDF)xz+VR?Q33%Mdhj&_q>ivNb^GhfsDUrV>M2^;bNM4jXX zMOAdV740$D%&3QIl!}(NgG2wadEU^|Lb-kMXXcEI!fI0dNebE`yCZmCM^knpG4F4 zg_^Qfk+R+LDMK`t=q}#1*P~Y;L%k0{$ zJ~1pw^c`not*AtkcN<@|RG;eZEQ-bY-`7F*2b-7-jVj4K1kR=9NG?N2lXdY8`fEpmh?ykx)hF*=B!IU zf}32=H!P_hwTdc11J~u?WmpsK@zvSc0RT{Bz-GBX3pb z{=w4RtO0PPF8u?)$`UI`NVhFk;G8JhQHUks2tqLkXqVa~xkwSH6XD>5#!r8zMmKJq+GxxWP`PZ?gzRn8SV7d@1Jpf zUu2T|&=Dfa>H0vBoC8Ln{fgiyitLnbFSxh-yPh;i-M|A7Eop2MZ!*h*gV7Vxr+9Qq zBCcUnh+~Zh&fg6YC!kAEau!Ru-x`;!Bx!S+u< z%;T+M0I}K)V6+^Va@H$|z=(wtRb4J06;ijmDr;lBjsrx&3AG_f_sPar2|+OvFxhhQ zuwS!6f&Wk;%BHzr2|z5go&*OF;y@%3m;>Q)x=|YMCfn-BD(Ck(8|X7xJBq3Y+plre z^{D}~6Lbuk>cw_MpDl_C(yJF_s3pQ~a50dFL;D;5I;J}Tt9tXP7V^0mKT6~ik6v~` z} zl?ii_O?tThXonKxyg!tWfrj+w4k@WA{t?mwAb{vJEfw(HG-#P)Md_6>?0PH@GhBW@ zVzF@iMK$8_E?wXGOWe~PSyZz5`r*VU?FK!hNK|F;Q{#loUoyVW zWQklwl*6C*i`6oMx=l8}3_9*CW)}(N!Y)P!a`{JlZW3G>y4(O4-Nk(B-`n{K%1KDy z!hRH`Xz-jCl=_164yXoW0_y^EB z2(lvHfokNug1LO~8`nJOc|W+2fHoWx9rr%vL7_$S#sHPzM$hrCa$$g9?-+=uLAQ2( zlTGhRf8_^1<8vv#{tVIDN0ty>K`F10DK9Xwj~1ogGPkImMFD02Jy1?8L_%K zDb9(=O{^P%PDO1QhRQEF5*HcfjX#R3*=*^iT}^Z**Y+%TA{GBtL;J7Lp(M1O8MDOs zV#?$^%4``PkW= z*w82qoMG{z%+Ed0IriAIrbVP=q&h9r<<4f`%LAMM-7V<7hoU$Fw`@c{;H3bO!v9hIXWzh0r785*B@s4IhQv?f z3_vAB)b@}iU>1QbK-=aXGj7DvZh?V0C^_Rvnz;6&#R^8YTn*@^TwOt`CCnO|_lrrl zv(N~7rmoNqE#aOjxj=R2XNE4HCjg>*dgZXrj#i$OsG*e$ zQTrEdgZeuOfM~O$&a4r7A#C0<@Q5BdHu)sd9 zU9J_)RnSG)ZR)s5#&CjHu)dKeLs+izGFPD;S}y$A!IA=hD&WZh05nRPph1LB78l3w zM5hFB=9>YOPH2$_f9p}018>LVB@I?)bo{yY4=|{GxkHORl#Q#!mxF0MqW1Rto5Xse zHl9t;_xJke>5<}VnGabO>Q13o#!dNvL>C1zYl1Ee0;Ki)kQb5>-MO6f+ zL>5$&0IiQHsua);Iw~-1HVLu+#<2L+tQsb?u%{6T~5Mz)K z2gu&m(_*SM>ySb$TM~Yx;zY+I@ZOvAmk-t~UPIFa)72sL z)bw@Y!~W$`+gflP=FpM#>(3*Bm|D}jzrXzclDk0<_a7Y}YaN4OTZlG(_MD)tHkI@( zkHbGHQm~ct4FpfnYH<5LZf|U`!i@-BM1&%)+dWo%h)|F->2aKxvv|;UA`5V##pXvv z_gg|YKs2v@ndF_W|BbOp=9AEn_;U2p4VyGHO!b_MUiW^*^FkMF*Gg`(z*Ns0@ z<<*m0t#%@`_sa(T>hsz@#hB(krscPPgsK7Wh-`E&ENKyIqR22O&2dsNHElD?!0;>$ z=e`_ZIJehREW@@4Zx&bdKc77G;s|Po336UI-k=K|w!1{T+6}qsmm<}kx?G4ILAY@- zU^FyTy@R@({TTo%wL%HalQxc|f)y7K=pK(mP9a_qpN!GXgGi-QJuj#iH>=r$_0Ay) za{i6D8BCq3(tb%ACXmg^C;EA!!b}4#o}9#7ar~~q#8IH>>!+hy*AmZa>F3fGg|g^h z!#$^DAZ<|DpvsthS~KyC_j~&u>qTs{wTP1KHG7%_Fyx z3SA4jg*)w>6qVd9PY4kIi+kDu^cJWjT^A`w$M-yZpJ<*@J?@ zT}-wGeQ;_Kr{)hs0%L{cMUD;ySJ)c&jBDaWUSTLDqhDM- z5%MUsu09>koJ2lVI(0>i$bVfDUr6)XQmQ(B&sNr@-obzkt!N*X4j%lq-)}u5ZP2&t zQ~nC%YC|O99vUyhVewS;A-?GI!n7dyM+g%(O7U^y&>VpBX#l5A!iOG zyLkDF3d!)^SsKU>ApGFqoas`E7G@E8&5@k?O_YA7sH!5>d2QM<$?JgCk!I$B)~XO% z;i7O|R?D%&f{8iRf<4nRoiD+a@Yp~~D}y%|rEjY&LC0lt6h-H0vmzwv)Y{+2$e#g`nyw;Q0#k3o0{<; z1Lx&Ugi*;JjnoC4C~t6n3LhU{da86f6>X;%O#s`y2Dq;gf}Ohg4Uk`!#5kw6pMLrFs}2g4eTjA59@F?R#K4baQaqY^q}aZhJ{M*zc5b}M ziz65_(WZYFE{B&&Fwv>Qb!OH<5Y6o^9l^~Q&x9Fc*@I#&D;h8pL3FXo{Gq5-Z7cjefhfNWASO`a;d?BpmsMV_57|g5v z#Q57m?Ul>~nzgmu*5Bxp=fwthpoO);nCg_QO(dhYC-dHDXZ8k6-X$YN+K`ZF^-Z!s z5qpKm@56_IS|bw{0%BD=S$DDuyB+-npgR$jaU4$gsWp{>Nla6wF7)?o_n*n8D6jofORNK?Q|2%F=8GUynoTV@TRMd{`qj`LXX~!) zY4(P@?$&^NS?i@dc;{Wg#18&trC4jrd`a^0+ukCyVAPR3M5Z@FH*PL`2svuCj# zW?9Nq#^FpnF;XA_=qiSM^>ZoLOk$w>R&9dzohB_QZ z`bUvJXnLRdPf6XfQ9pPh|H^#m+*>sqQ0TYNEJhc|viF{VmoERWT&6~bZ`PMno5hmF zj|$hZl1Yik%T&~a}h^_|BCu*VpF?; zmsj4cR^F&-P;cpz(9@UX60kLn!ge?+KM+-qs#@oZ9)O;%jSlWBCGvr-HLtEhs=j=l zSZUZHk8jrS?Q-GVC^`m(_KjmOvUZce&E<0qy?tjg?G3f?)mx`Tx z!s*nXBbhB{HI~^m4u%a0O3r<;x+ z0RTA^#DcE$(orpusIE#x;s^*>;MAAD{v%`xfG_1;g}IzctJ6PSiu7BdGxnLEaa4ye zemwWGjpXXM4ZI#3k}Hnc*-dkQnmUS-S&S{O5ZgGSYTq}``^*NFG~A+O-p8QGb62zG zi9!C=Lxwl&z3ey4B3rV09Q1Zm13{PLNTP4OC z=B4$<%T?#&<4XGQ<1(*lw?Z|E#v%UbroCgWm5E0^df+{+dVE1DGiCMU`_uo4>hhXR01`ToTsBg+otzuNr}l1sdOZ7dCW-~S>u_PGN? zhr3-S4k1ZA6cJG&%d^=406>wxoTw4{9hHHW{vLxp#be8a#lv1@3%XQ3=P7tdJ=ON< z=V$tcdJxDOFP6=Fm>c)^`Seq++L- z9pRP+iMn_OZqBW}k{2}W6_==emvgkN*jL}0797_ZCnlT<$oId|kLJ}D5z;T$lTS{P znJrVG7WyR8l>=4jM%b=ntJq9(Zdd>IzX7lBU<7HVwP$QnH}N5sICE-)II|MxGmf#| z0&OLHoINGYl;U?yuM76ZX{kt%jCgL*9E?g6Iq2vvK`yVth$ zm9Gp3oG5glXjEl*T&mxTR*wskx#!tUoU7iBI?oNe7;3}Ck;3sSY9oqj#LA9qm71)( zfR=A}61`G0Vz^ktW;T5X?#f z+(#LPqA>27vo~{2D1jAfL4b@>rT6YF;=@&{?uehpe{}4QYhhYPO}g(hxWUH@)A*_l6p4UN?VBx2m< zvaH2^E?B*Y_n)B&2iW>LN_PX+^Oy6l4~9aEakVifZM$l3J$i38Re;AuKU5v#a< z7`?H`3X(zZ;qf%n2S4gSh7)Y!T36OJJ7Zoe-m1Spzl}osS}Rs@U9!5E&)05zc|WuS zbqWWYZUt}f5>k*ql%~W~=D!2fBO;v5|Er-200IJs!7~D@nbbB5JKX^?%tO=oTZRf8 z1B;WuA2ed^NR)>7{%Z=GD+UHs?kE(sip1}$a9$ywS61x9^0-nW=DQaZ(%mAKUf)Kz zRv+irjx_XRUHn3>JRh!qN=gTDRoZ(XsW@4xd$Qbl;di;equ^rJtOCyivyw^T^Zlj+ z_yLeebA8Sv;(CUV8c)tyqdaI)@TE!hdhFM?t+Lm=y4l->^H<>-h}T`4OS~)e6>2$W zwG%ym1R`4D(pAXJtdXkER7ZS=^xkb4sfh4hUqO>(ibQCAe;T6lY(n(>BoMFY>2q^@W+&f zYL+rbk1Pj;SvatdL#5Nf@V-Mm@MbdpAE5yN-Wcrtdmucc8WX^79?FQ>>}q>q%?jR* zXm}AR<||XsHC|}BS+-2u>Z|4NAdGffBS>u^@|mt`%&Qu`v9Ai?J2(8i`sLfEL03M@ z$Y@{iSTtNEkky`kJ>P*`D7U4G9Ru>t%`PS?Sl~*K<~UWZXls7%v{LP|fR5n3CtjGY zcTeef-Ut&V7$^y5*2tH|MdN@8v6egrsNfSPQA~7n#>sW*sigG~8uanINXyK>s#r=9 z?R-o*({%WT#rvz%PcQZ;G5Ig2u)#cikDbTJmwfOLF}v+hW`l{&9CM3zX9?cT-=~wo z!gZ?~1O5~Ko7hN|3fg1k!qZ4}U;>;aVoC(_Jiesfj9t-A&Y|Vxp%n2M@c4L>?aXKI zS2gtZ;`M8C9x4uNn=j*I>`v$cXV!w+pQ^R4l-o*iG!ztWAcClQBy)2Fq7C{=CJudb z*2e#Fbk5OnbYU3Z*tTukwz;wGq+y$+v2EM7ZQD-UpmCZ;O`2rC?YDo=**j;R^WM4h z;`z<}I5%>cYor7aP1!-%xe4{&v&db1#Hv7ZKHf4EV&*aa6?WOSOII+tHu@36^E|Xn zMM_7arN%_fDb%ew+}|n9Ub>)I{ZFA?0F;ig-l`O~Cg0HCc!VqT1P*7N1@h)# zK(;G)5u(mwL1$;%_QpPaSrd{Bs?IXflDqp{$YvF$IL_`UyI^IKjK_DA8V`w6*4NnrJIYjYrm&wn=5Lgw6dw`yo(Jq$+%Q zw>LM}AWKS$M$utFQ4l>$Ul2XLxg><7a3N@8>VZ;xj1xEW5tp;^_~!BWUbTSNd-PfF z1ArD(ImY+bG#k`SwP3Qz^idok)>Sc~>K-Ijhnd9^+!s-d5et!)VExs(L>rAGV4s=) z@+BTT*z}unDE_1~(+)Ju?IId&`p`O<`ot5M?HxLt>U*oHbwiEXSlNdRF%x6ln^Wp%mKeC50Cy zal?ojRa}lP9f6dVaciELmvYWjkP%&T_D`YPAgDzx?V|{-Z_=;^@63>8=n8)Fel(Q@67F6NY<}nk5wd56 zsuv@vZwsAEsdBBRoV3HcncI3>4;D=gn1VLhK(9}dWEBFRU^g0eZ*;FfuY;W+)AzyM zSDjuNG6w0icedjusGO1{1TzLYgaExg0S5H+gvXc9XZBTOFI@=+CYS_$7n9MRj)Ja`kbkU{7#ObxM%N5L%=ofuRcJktU6GF)NKS&{d$YR1`7<)5M z?RX9N;e0;BPSb#<|Hc0hljFFf91IxxZimSY-?2(Knbjsc)487jxH*eLQ&#{`2SbQG zrj^A^S=u;{ zsY#8i5JyzZd`@OCS7IJ_c;u-1sc&@2z4cF_YXCHX!lt2`#Bb?XhZ|u^7j?UH$18T{ zA+Y0A*RSX%or0-EmO_OZ$C7pwht~AogLGsP$Zi#EgISDxY$0n$$%l?tCn&-k$RQ*g zc4NfzBw!sRj-9f~t@c=$`^%UK>EQFQ|Yi*PYtJ&0}HcIFoR-MY(RF zYejk)H#69|2mpL*%3Do{S96G>od;BiN$Pe=X_92nfCdAOP^x@XTlqTWNzU*xviB4WB%;J2|^X3rriW zogdXePud?idPMkjrZSH5Rk_g{*M-mS$X+OU?tz+P@U!v&<`XAA*|5K<-AHtqRBo~2 zO|ZJ>6xF;Q>D3i^C>P1NywGjKloc(;Fs&D+Ul-RGUpB1TZ4C4Dykv#Ek4n;h^|pV$ zYzW>|8iziK5-P)#h&Ve+3$yZRsL1#3<@(<#_$mbIRYix20cS{@=5-IO5Nf{%a30)@ z43Wvy_X}6gLeyJZvzc)&s_t+7qPNALvyrZX3i`<{t&0tA9~&S$KLqt?(jIn97b{6a znJjK9JY0s9Qo^I$E(m08?Gu!Q2i_)F-mW!BEh+u18#_C-)z)&KbT>Z^KeW*^$|F;} z)*k*K^0uJE1REoh=#gU4=__Bh?eFi=@WnAKn=K3bAF6~q>!Qj_taXtN_Ge)4Qt1z zKz`mM6tK)yAc{EQ9z!=^mC>S$*Q|303E$;-Z*+fS(Ai*HSi1D%nO7NB7h`{9g=#$th>X+PetM?g~r}AdwJcRDDY=C+bEB zT9&%6VNq^KfHhw2P#gHzeDs?}5diky+CTTq%mYi5JPdL~yuX;2Hr-A5 z9$KNR$;@6I zxD0acr&Auugu3dXpzWnOUfGIm3Igf<2#>-!U`8BQh1aVn&<&B9 z*lm3Uui$m+52qoO>s&KPJsk0;eouTP{jqA!k;Z8@-lFGf8tHTZ)v|M-cJZ%03 zT|KK7#NZK|1mK8b43%oZrh?1o&XWWz08bnarU#0{}j4`fN~YozK4}+vS4z^x26$9(!K=7AvX@I z*4KQBAkkYFH1M1{RN~vu2WnhbD(EEs3H8q(lXlEXHbyIm&*lx?e|pG?_Tn|v1OOP* zk3`xr~SB=(GIq2;+_Xvm>+_(AN=e;8h)Eou?Vg42@ zgz#JaDEifrz{7YIn?_F45Y31v-#uW zm&8{y0#$oLZTTEg6Owove7B%%2SNNT(yRssLV5-QVJ^ZgFnUga&;vh+miumk-X1`- zerhifuWG{x=LX5l2OG<7F zxt84up$~UqL0a%feQwDxx0vKYfDW>wM1Tp8%R+z@4>B{?CyiD@#pitQ85b}F&Uz~1 z>$T7tzg1d`f?fpvx=zvl<-NMPP}8ks(SLc#yFIvSTRb%gbTrsLTdmEgcJftLG5z9^ z?}S5@FoQ`CFvl?ZRI?t3i!$`ehsbAv^{-v-Iv5(sY~>P3+TCsP^{WV+g8_-F9P4@X z)HWgu_b7+vf<$;M*rnIV7AiP6IAlEW5El}L1QdFE9k?r0U;rEf_lN^nM)hX7TK%zj z(YSa3!B+$m)*)FG>iQ$9_DA0+;jl;~Fb-Q1xI6c-o8qDjoH>z@Xr?=Og)IICga^3T1{?X`r|dO)(-y#6lKTIsS=$ zPtrd8R-2$ej{DWTSPcZy`h7TS4*}S2hx>F!JzY5xoFK~)C-EH}F-1n4MpQgVf*!s# zr?%uAet0NAh>1E;rijz7zCPT;f+_D(F#wP6$YgN6aL~ukyUIZxLwHgIYZGu`)>0so{g6vtXucA;vhbxakjt+c@6LZDPRG9)342g$@Y>Jx52X8k z1*YB}c9Bz(y"d|D2oU$*93k5=y2{}F4AkkBlgYg%1qP5kCa`!uvTNned67n+=- zPQq^5u;Vh=n&&jJ3o40*=#>t_E6R!$P#D?TL7t`*&&i zo-+ADhsoI%V+~3#flPv2HYNtB@@n@`hcW9r>nXL_y=Mnil(aV2fFu z>&p1-O5W6h4CN1A?BdgDT4^n@GmNi(;si3>!rvbQcGZO*|D2_3R^bXb@gPZ0xnu zs`Zz`zhYRlfqZOleHLGqJ8nT=uagR`K^=*5o~6#ogDg+|qoNIx>sf;zy@C+@haKDA zEIlp-KfCzNEr)}yOEH{MI^Uxtsnnp67%SpO+2!>lcxtnH3tT1$w0@RF%<$y@Xl|`l zsf|mmv^YUhjw~El9K1p3bOm}~)5wR&-)tHlSYXM$r1*F%s`ZyCvbEr_l@_HLlrU%Q z-4Gt{aaeo9s|N#GYK=mdIFPpX(eK^4CUs+%+W_1*nPnD)jEycEd@{l2+ZR1}OJ!UX!jJ6qxpGy!+R7{Kwu?WFB8O4@-q^rpq zkAent&7icWv;&@vZq3)`nZ)!>wx!CQ{}ZRRK~R;(+Ltz1uQo{b8&>0XYS}(Q@nsFu zG?7kk#AUc=n2Ln0jN8;SaIPvB9O8@N3vKdxQ&{~N!PgbBF?1r9n9Y>vP!{FRk~m%V z)Ky5lK}k3y+5;8FwdG#0iWWRHg`oXW7<;YuL@3cJNS|U0TRU`Rl#*d_Su=J>DoCyG z?7JHm(|XJb{i06s5)?w4vMmf8KkMnbRH&=F7oOyL_A@3tOgW4R)~`j*Y*x_ZF&EfP2Rl0zJ?6 z8JiU=fQC4RIW!U}F+$9I_XE_M;WJXDy(mhOYLXS%OhpWKVw8DNym1p0NYm?JTx~!u(-%F?L zDyI5_{q}ln)19ZiX!#%9$WN_a%8`uOD*s|A2LKglyu?*4q%Ivkqath(fqd;F!noATWwPCv74aXKXU4U);MSDt?y(YOJky*5dhP@^cEn*y~SdH zWm-J`kewXk$qRcQOP|`gdAe|ZtYF4h#7RBF9imuS%}zWX|MW~zZSwI7VU33ERqSXA zRAgLZVZ3zWU#5IKn;ZmP0+mSpJuP>aU{cKyW0i$6a%4MO`c{Z<0sj;#1wdsPFDZoz56M~2pW| zW@t6s_b5|s<#$1CA&br?JX{BvQyf1HI$InFP%V(-h_bCMBkAD>U+z=608q@`pTmJE z1e^;UKL$3oLZV)>JvH7%hRHxbT%>T>m{@FvGjVK%Hp&opcy;{Qv5`0SE7}pEf)JEks%tCfcTtZ$Lb+9X#PG-l2V|2x)?w{p)K!wC1#ff? zgmL?E#h`DGQhzqabixqX>I`ohTnHsycLQyF0w027{s7>$pSZ_4$fDyBIg1?bhP8Nf zi~WvR%=cO|cnZvlW{7L12-CTzUXuPj3kr+9g>?Fz&f8p zqiBjoP1zHy(oAJg)zF^R_8zxVmGqeUbo_nP*(vxo>dW+26`xM2xJ%C5h1iadH=5K$ zi~_ke9kmK~%S`+9!bjaXmmfjFo`zbHNc>Ns@*qeMyQU*E!IHLY&%3ZiY<#na{)(D}YG-lEu1-whj9j}zMXi`oq2qxlRRI^C;}Z=I0`B$s zr57TvD(t!iL#lu&npDdw#fI-W?`K%6RtTvi7`f@R-Hyo(%@;O-n??_+{!83UPYRcs zMTc^9&cG07!-H+^WFMbolKg!Lc=b8KPj|KC8HQ7P-HJi>ii2(FK^mPragZ8H#WVf$ z-oHJWG)o6I35f1tXYEg#<{70D7#OfuLJzLhwrLnj<_+6!GrLzy31-%{*?f^r(^1}j zF!Fy`AKB$xZ}r;;z8l)z^s{c3z~^bEh|7Kth2mtU)l37gV0g2EDM>fNK9<`mUFOK? zli&Z91P|dMtv}`5E1sV%qwOpNhR1+E1BWR3RIxQ$ABku!B@?l8OO~xbdL{54iXq|e zDb3n9-6Tip6?~^1w>19{`e!Cr+@dz)+dbFvB7kDDkd=6nqI#lCiPcTW5cfFCu6_`1 z-PhBux4E%0HEIJ|{vnG|_H6$wACqECoNll}(zReOXR$R$SS)c%dqEYe5ipE(9Smc2 zrSK%I<|)n~$I4Ao2~*zM&K&^7$$sE=6boG^&2*S&te+_5okKfp6J~R|OP&fdO z;ehczhLkkeq-h)uK(>{wV#Cu4t01$^=~3sR%e4)vD|KXnR@ycU_GplY60bvUKK0bP zd_QS?Yw0`Q8b9szkV?lBjQ!7w&Q#9V2tvgai2j=vIFmuxgrYolqjA?V07gb{dmJXv z+VLx?%#-3oS7Kdp&Ug{69A3`+T0|A|oC$K4+nDl<6IK(fe^X7i`$YZhyy51pfAU}? zmKIj}ZIAs^;G$CHi)OCr;KOY|eme5c-*LyAb)4!b`VDuKZi>>HuW<~I0h+JZ#AdHC(X~iO&`9)SP*+TF! z!XJrpg$$?CPH2w-fFx{N0_?%ZbgL2MNpP9RcyG<{2X+}*>7PJwHf6v7(1fj{)@Cmt z-G%QMwh8eYAtssw8aBBs2@Zm;-ZS|W3VD~}-NoL@%6fNv zd62S{N`GAubbYQg-4BIZJV!RcTMkAnWoiC24sT-vRvOmk^sJ@exO3~PmHM~3@vp0; zJYIeSH7j%Z$24*UEm5o&Yn^sW;^-)ve}-T^sXWuSVCk^kZdk+FLIxi;mGIO25&R~_(QKzt*{U12 zZH|iRpLUiRnv-A_tNaS?*YmcYgWwPodNxs0ektc-ePgvc zFa!@3`QpqrixI$P9Tx)0OrM{d9JVx|A-NZh=21=rkMC}|D0iaS3YrPnRf(fbs1v(c z$*NkNp;tU8qe^oBWV1ElitD4AI?#wX}Dmd$0nV~R}{0s;PGqw4rP<{~PJlnSY5p$i|DIz$AVi1|vO~LRX z4H;~EFgS(&(qP$*?}`{YV*SZ9{@5huc^y2BUA;>Qo#r_Lm68+|Rx97+M!zAM5ihCz ztw~?mOdUQc9~viTq5(~cgF-w@DnS<4FjFDA`8G*CX#zc;4SqBNi+7yIkEDCCwx z_xi8-(fIlfdA(CQdpdSL%Zxiq>!huxm2cp+X;!31zEq{6Nn#gpW~%EO>N4k^oJqV%&(!@MJN4B%ZtaJ#FvSD7{fj`Wj=!*4%-$FD=;;LXrrpuEtMi`=-AfVywBiXc7{X)Dk=;b}bR*UOSIv zKhShvE6J9z_Ey>4^<-u631YAQqMv(nugz@s0pLmh4qWl(8wN|VtGYSE7;qPqf6tC! z@jeJ}){`x+{}lSuW13(pzW5CfUs^$2CLR&y%^ba zoJY=MUdA*HfC=q)R)s?U02ZU`aKNy^RDrZr#*bQoSZqet4TZW;H$zLna{6iV1hkPAn5!fk#XHO z6c@?o@0*l!u$hYZ0PU1K-IO?kK8pEsG?6eb>r+S>a}8Y04Bn_`)WRfH`)qc6FH>-9 z*23Nx-|g$}AJ#)9^B)j>sdzW8)n9AmM;0dv^6S6n@~pEEpFaJR?47yh)vVPS7XtK5SwX~8KKU z0Qb6m5JhK#EzO+ten!oV4|I_(jDU$c^-4sByw5BnkXj?>BX~&HWqShLv!GwrKMqQ! zqI70T?}*ec7>w=L;yE9+x2DVcj5Npr$?cBy;z@E_ZloRC6Ns3FtU@!_MghD1EN6tk zxJm(4T=q&_Vhp0SMr+*whS9$Hy=J-}P60W-1Yzle;T5(wN=GG-S~8fYEOi5Gpr=g( z{@UEvAOMqN<}QSNaxx@W$uVb9*QGlw0zO*I(b+O4R-`PS&e%v~C?ofM-Icu;W2cmW z{^{RY;18GAz!OsZ5mhFqWNre(Eer_2ao(T2)YNAiCZucnrzc~JYXBfFoG}Lg5KEr+ z*MvbFT1SY?EP+s^v!8~sme5JV%F}*edGgf$`n!WwM&RO^1Y`ny;d$Lh-FecgaQQjoR z3}J~!|Cj;)tz)`=?7V`N19oW88X8h-n#?)~(~}aT38D=5cMMu^Y+I!PbtR!~%Jcq5 z3y`x;g+h9|feh#;@@pLR1S`NIf`)5c4!~=cN+`hNAH0sR{l(A+-^qYVdGFp;wNj zxk(Lg%AL)bKr7oj-?n0`m<9wxm~`omUBe|Y3Q|>8_=I&z(zhX?+#dZBLh)|e@A6B0 z4jym@&-{!}rQH_*jb+iXF$8UuE-Ns8X(K)b%peWU`t?c$SJxIY9n1Ml#2_wc=Ljh;rMHUDs|eO`TKB}bQv@1_KVh=e(H z(3&VpFHv;y>B#TOlE8(ORcOvpmJAL5`V-aU#xHs|?n#xFLb4FSe=L_ViakMi7Hf{% zy-ULMq}j0|HAV?vUQ@YM4}9|LG0x{D9Mk(3Lzlr&Ogw6i3X)BF)-xz()&VF@>jEnH zw-R!AXFM4Q_!B(ZJX&Ivl-~_trh5d$A?)>%0FcVV%5xGL7V-rO+IA&Gm2)}Ty<}&& zu?VCP)9X{s>{@bO&T!?5IBad3rsKRxJSmetcy|GVAL57lw?mzG`1`b*_Qfr$c7Aap zKjqNy9g~NuaLrBbb?UbM*pTXJBLf?ht}Q1Sz^W`-$YoEK_Ar3W4Z(ycuQdP98DYOPCDZVxjfE`e^7xmPnO@)pbz4MH8iPBNu_ zo@SsaPQPqLz{-v6AAEOb+plD7Oa+PYD!#(w1mE``1DGmTXZwKzI*d8FdQa@RM&Wjtx)QE)D7#>b#ajB!eHx7o{9`NzG7fn5zvGat`UE)@EWj<>{V#{?WZNoW*0_&39O>}k@V|{>jZ~D4^?(!I3Y4)5%yOG zfe)Po1IYOAHpERM?q3f3cmnPL0gvdz#2#FaJ4u-N3j5w zyZ9Emjcx2Gi{ktbvK?AVUA+MxdCr#gm0wEm|6<4z04r>`6X5&}w#vz|aGo8o2sktq zX%B)xgS!Q%aUlaTINgwZ(iLPpO)Wo_t=PA%AxlRvD#Fkpv%eq&SiiK@!bqILXS4r> z>q=##!$wAca|^R!T7>rC81tsEn5228|8Do)eLMn#6%%=zj`=ZBtzd3ZEFUG`B26va zTUV2p0diq?V?ivbpDzGS$n;B&7^n8%okOLW=hL~9k6gcv-=M|$pR|Qs3K?SM*Ow|r zxrevhGhVv^OpE^Sv_v)^%A581@A68B@c_iSEkGuU+`sQ<&h?+-oEsw|I?rC*GC1~*xh#|`wA7Ed?VVTTt zQ;9WqtrZ5eg7$}nH8bk&)MS;vkjZI{c;qSjJT&|~>Oh~9IdGc06k@J;oFc1^Iw=(* z`N_^5Gp}czN@0dQ%Sf3)@a?0C_Jo}nhupIifpvu;U833CUTBdV=TU?()iV?PF>>L{ zVSiGq34kRS8vML`E1L(^V?o2%{!<7U097EkspTYTrfi{PEJCG&;<;{J zhyQC?i16m&F1qHs`^eVT8!4AT((8`beM}?FWxp%OObu|mqy0&nKfA<%sF`%IpbJ!I z7O`jAfjHlW7{jfZzX@?YcQ{xGBl*1*@<)vWrh6t#gTpQxWo6gbF)+nVMxH#r*R>vk zI`i_Q2zDpSJHdh`xao*PV-jOkqs$F`5`J#%J0c4Zzh5~Co{$BA#ZJuW0dr~i;7xLj zttPhlTwU5Bay^Z1z;ft*ZplD@{Qd;C!_#M00Vq&=h>1x+*yp^kPnsvO;X(mMFCMq^ zBl4=_XjZh+Qt?#Zwr42e209pKO-qZhlQH9bbkTB4i+4yr%`oYH;CM@IK22+-2JIBX zcP}S&D@7C1eOel3mVWs~v5HN}fa8w&fL=%W_&4w|u4DfQ^K;#D@*kR0Cz^IAT=5yG zT|gwkx+1rUzeqL7N7X>SgJ|ABD`>O#^W?XDtF-YL-g`@(HeAkLWY;Mp4dt$PF5UhG zjTm%UpXkiQGIGqw)@9hDQxoPhx?>7hQP@{ik$(!I1VIt#n!KE13+ql8HVRur#eZ@& zy~?^p5Xxflzl*+Dt$D8E_4J?XQngZi*3*BiTW`=eU8np5>|lBYF%JGp>>hN4cOWZC z*>|YH$v!k+H>ulc)o!zG^z=wxo3u2-lP3sCO?HimBIN3u9em=>b?>Is-_*xA9bWn7 zCV(`4U0ksf+$={~ixuvko5!RYwnYT5Kly-t{o$p%DiN4&_=js9?R#H35TMCEBy&5i zo2h51URCdPl&UVFrlht6NN5&dBkKUbAdj`qy+`&do^+zH)sb{~FBaz5cDI!!JV>f2 z+*hpUrg!C#vK$ho?l?sRbjGdvp6j0N4!j&XDsu|R96T&%}u|pK4t4S zDm2u6tnshc-&M1?c=b-Vcz~>6V;Yg?o$Mghd$RQzq791tS{NerX~ne9BpB@Js)ih} znX#*ctTqCgfA)*o$)79jYBlj)dwexHT#aAo?cGkg?7e)S-_myKi^=J8y{FhOa+hf! zqc>EECw)?DD`)U_tR#{$LC^eLL`bpij;Iv4tFsJW0{P9&X@v4uolaH3?_!bf?@G1A zA{yv3Zc!8U#A!Y>hp+R?ImHgIH+-vNzvj_<$^tjcC1V&hnsE{@UwH>=v40VdX8>Z| zr=6rRH6$l^H0<--5NA1?@77rFrx?z{CIfG9}HZVb8pKlrJ^8t3Iu%=y^maBs4*$i zhG?ofyHpn`hQFknvi4@DM-e=y%q!due+8!dMtaVwQky*NKKhSZ<`YZnfn?-F2s~dZJ-Iius$*gY8DorCa{1g@ zluWHbwiC|OC9)MGIs%SNUJ7S?XIHit?en_cZK)Z~&h@F*%hV>+^vuj|dl|W9=7C~U(O#K^Cx5bRZ6wSd2`dR7M!_vh2PG3e= z?voV79Y6~9QsS>PJaGO z(U=3|vez>C5D9Z*q-X)yxX`&A;XiX39LS3QdzTr7K_;+l{~I4thuH@CbTH$6%%`jq}dx4C#PGC;7?}=IZC`>F&%x&{&OjL=Jp8+w;c-AcS?=JH-Dh z9~C_dE-kML999FrKSqTsxtCXI2QcI8DWB%q{nP>n*4#h*F9G0^td!xa}I}{D_u^Jni(~fdOn&Jju?U5yQF9X0k|q zf`BRyI;CWcWs3Pki9cM_1hatdr|#5a1E)0p){cP!ai*+^=&~H!lyjYg3NsZJzFgH) zP{Y)ChV`O`aYQIJ6C7TV?O%?T6wwZaA~sdOGByiym3wx zp`zOZlFRo-OS5#^l*Gi0P|!3&08U_3L}-Lx%qx15IBG%08iEUC`~v6s53FREZowI+ z=kO3iy;2jMj;3B{X_aFthGOTFCOY1oN1;944K=kD!^?B7#9G#1r_J{bed2C>WJ-?N|Dn+K)^6T_z>%ehTd~8eBX@1fU)PM0BO*zBz7- zHmB`1BX#@3C6`IspE;8?wsX2)h9f62rfUBb$^k&0;qE!=DYc3H$c=YIwv2Ha26GBk zgXQpDdD5Z}mJ`q3qvXn+Y77Mhcj)1Xj?=45`Dy6icr~EoksdRv$L;D}=-{ z3U22#Cdma1vPfJ!E8P5eZee6>y^#ZLyO3ygES)T6ONZs9mnlFGVGjGl#*%lVS&DEM zGR>X`93-v_71?7;NTTa6Xt^WFJI-!@i#DCp^T}P9+0j{eo(uhG((pE$+dpw27NLYR zluy#}tpMFzorswJ_L<62Yr!f`U>>4#l8UWzP%n)_+m5ipNGrlDo?$#{$xE-z_^yHX zeC|oYo{IBS70;Og8cvDfWncrT_Ykn0J%N(V#sG3r%3_-d+>)zcOf{qn{Bofbv{?>J zUnfNj6|=Y+!o*kx57y5{p5~lDDb_YGL2zC!$*K#0dB(DN2_>v9_k#%0oJuyvZP>E1 zs1bt`pPBw1VPBmnUI{x?2la*L!;LEZE}OI6ulaFZVw?=+9zPV+=tD0;t}wG!9cuN7q603 zh_|3Gd(?AdSnD+ng?-@=~>iBcDc?xXC&36Fglp_v{^}fNW8$D7j!yNtD zh&R;_1~On|ij*gLYg31Z4N;1nxAjN)PPwzzEFs4=&8}oPC`!p<1y|JkYDzS^pA0-{ z^V(>fY>b(sH6PHo^EW4Tf8(~;QojXB>0bz~0U&*OHtnyN{yCC>+Y};V&o)gfn`)E6 zMX`r_gpz1x9z(l%P z;7+yB+SRU9!AlVBg9Of#c;I4E0!E?TP8c&tGU!J%1eN$AJzU-H5yy9P8UD;(q}_cb zSw_PYoha&jc_-P~x0rEeHV#it2k*PKs=ATA%Sh!2tL-{PAtey7&AqnE>!O0NBEI$ybVk8l* zNGzS^;gdfxaKfrL%j<-Bd2u=W&kAdJf`GOvoZ2$u#1BD4?&%RI6_2tb%IEW+|@77&TVVJ z&E*r$Y2>zIo2cBOtsLW2ZA-=<=Ao~e%!v1}pVO*wWk}qb6m<1qi^;k79!183DMHcZ6(-Z9 zh~f0sRC6AC%9_$7J9e5BxawZ?cjoHL;Z^qtxVtMuXxhlcKmB>FHnv+ZBH%RU0Z#2! zd%8_Utt7+f194Us)?{`@ra&VpA%AE$!qZ$y>T5lkT_WnQpC6Fs%{eMA>(@6n+Gh!2 zsH>wgN?TTZM+m+(%Tmol`*JsEZhAN1o-c4-yEY`A=rsx)bld9qiBF^w9t6T zvFvPH21n7Z#u|*CHmdKp+wJ&1&VhFXVzG$d7R#iMdoKQcg$Ukrp#Ar!niibgjZnEH7>F{uc*;KnVN8E&G zPiBI^vs?%D>ktes#sr}AbJyR2J)n=Z%QNi)t7zdInVlnU79eB0m6QyRp`kbc5*oi* zy_3fQDOgvCU8#kc3@TF217>1rJe{~j8Ucv?ZepDiS?ae)!g<_gk!=IiPQ6T_2UXFp zrbSvrb<6QsP;hONHrpFSJv4=QJjVGxufn$S%DSy{$}E=HJzOa7;CtEZuF~u-`R_nH5cM3Ai>e z$n`A&QQP%!UvBH#PgAFlMb8P$+7f%-GJuRYoWO5R*usA%yG23z?;X$cm_a|YD7k7W6 zrLm#yP4&6eWq`Hjs(im+d(9ZI7yw|0#BhT`hlX}xB`{sam8Fj*A`>nlr9;P;RY>B` zK>rb6(L-75tKTSvPR@?%PBH>%1!$)Erx3V2M8*U3Ll6|Vn0070r&B~ZG1h3i4?-xe zuNf$C14N$%t!o=7@xq4|hMbR|T+H2*=XbThu2=G_N_7iF>|#ZXTP=n41(0v#6uhjM z|M4e&leV$oz82+^3veW6IKSQ6@Aj)lm8~YueEAzT^DO6H(SFzCf4@PJ8&O@Vjx$~3 z*Xjv!fAYN+5&di)@%8VQNg=|@1sfg?#>(Qfog}r5vg*F;XCdso!M^9g+xPg{o4~_< zOXO;hx6Q4lE%ScD?kEy&r&9t$aF94U*k>LEhQr};3L>UFwIeJ?4yH(-ug}lra|^y8 zygZ;QYf9jPUc|hf>$8^<6dah)uTw6P38>R8b!W; zb^2alFq09=+`jOAj%O#}d%uV1J5Ai-xe2h{eS#l2iEJ+r5OaIWYSr#+o`4J zvJU&PxWCr1fb)P$q_vUNMh*f0k2~>CpDSFUEGc$engJ{EAmy)B00VvXKlEMhf?g^p#>#<9CAe zxJn#wm4x7Ju5V}N9h9G}Lu*~GZ_d=wPTqa2o+Oi>6kRqs*IHAYMr! zL>#(eFNS?bDl$JSs^nLU4hvhB<=I0tWGpy?%z;UEzq@}=#D`NpfldP#m0~w8Y&$(s z=QKY6;v_Srw>jtjrj8zjO=`qSQT3~N$je4MTCUkK)()P$J1aQ&j>6ZHg#72$H_}+W z_DCB|Oz@*(n2mvYds9kT35(*CvPQWF3aw-aV;(FPMW^PN%1UZ^XSH?Gh$7$wBYvw1vyi^uX9VYakya`6yW~{ z5UG*fH%Hke=Ip1XqE~1hGzh>^Zjb*{NDN>JPjL9>FuwfVx^Ri$2jyDHLaT-N&y6$$cPIMPPo z28|@lacL&zlG^y0M&Zw3xMTp^=l(QjImx!UR0)x6iizRU^P=;iB4n&xQt@T-4)I`$ z${I+7Qb@#1g=iiLl4AaB0{NyXgrQLRaMYQ>G)OBPRKN3T4Jg2EEr^MfU7GM38i7m1LK?+bLUqjt$QiLZNj zLZ~qh(k`ECwwd6?4Vjzf{~3_6A!OZ#Q<8xa6oCRKUDTS`MJt$O|5HZN38PHc)jqTa zRdcwV^hu~gXlTwn+ zevauxA`yY{qts^Bn^I`n5kjBHocu0OEj{>XGyFU{%^iAT~=7oO*H7S z_GrStP8@|M*VfxVtQ!w(!!eDE^E`#Vn4P2BR~D7*J5I03>m?nHN2QRiHKJftf|I;n z2HuQ!Pf0Q@$0@2vkEPg=slv30)UPO6zkwX>jXUl)uu?jw7@4v&dMr+t?dK#63M~eT zga5H~4GwiaUjJsd?ApzBv$0yXZQHhO+qP{kw^}w9mRq$|Yw5ms-`{)xg!_5UdCqgr z2VUa}{*z4hpk9*SXi#QWQt+~|A}gtT={*UQTL<)&m61Wus!*J@)1?$MB3nK&2l z<5g`$Tgq`RtZdldVWi+zlJrvCe>Ef!41LM0YjZ-}t!Ng9#zyIi@?c<6PoPj@OlVtv zmuXHaAO2+rhLkW{$D0+0D@Rr1Tv8b$MP`$1Z`YWilQZdViV+D*Cpd*Ouc{~LI6Kzx z_;Vf+RBdG|ADiS4S*p2o2!AzoYCD4a*J|%o_)!RsWdgkg-puH)eL=%j$Dg?trH&st zZ|CpX91}GSzv)la7c9B{RPs~tXrO!8??P`_Nm}n};0nOJzuCcd7p#(sW;>XIMyMWq z!~7zFtVyG4tw#@%sfy@V`oOIoS1sF-jd{pQ<9pLMH~@&&iKzCpQD-aAQ`B&dXQ7S)i4Z+e z0=^-MM?+GeXQ?I)xx~I|+9Aq31lMv-Q6lTyp*U03XQ-`L~xG4y>ghr|ND1{+-PJr@i zuH!=V6kJZ~1H!BXRoB~he+{S8_J0V;1VfMOui3$4O=-;f?y{QZp(^M>qCS-mNVDi! zf8#EA-J$CnmX8y8iZ0&nrE8B(AT$uPb|kBMNn z_+n{Nw@r{cvf{@r4Du7Q4#r9zY`kn+A}s3(5}aCfY$Tz+*(uTIEl>}oJO;^`1qj-{ zX{PaS^LK3yE$tP6l`Y~b4lp&jePwDYMF7&QxB`HxEop@Bw}o2~idV1FyPtUEN}8n; zL>v40pgZD9aw^Of_WjVC0y{f%!4g8Z3HIs_Dh_xoO5lOgMboCWm>5X~P)LuX$20{n z90uxeNi~&qHJ@%pq<4^S`U)2mA^UwItpxhR?@RPKM55XV^)RMY(sbWL+WsNKPpc%? zuT=c8d%xP>eFLu&XUxSrFUkW4`XEB_?$9862ip(Eg&op_B_-LMIm5~(>723TzJaOM zap8Q5Z_+{g&mfTxfsfuTt}=paUu*eDH;frT_Y`ri$Un%Uw0gleL7RPV189;TE84^e z-aC;TR!%aD^TfQJrF@lv$}q!RN&gVi2SA@2Xxp4I>`0kD2MK(!ME*XcRL?3lB9cwd z`iOW&9~(_sWQM{Zh3C;>cZ}{ffNahN$j4%KS=loCv}~KIwEn9u2)+AxTyq>-We#>U z)~<#D&n%MNhOR;*&DGI-Ykx3QoJl=n2XV}o*)-xJnSEMTWucQQ2DIx_{MOF9-)pv9 z!JmWvI*&9};lSirt7NOvSex}y+jYA|_jj7#kTVIy8ngQ859ox$NDn~hBo@66b4exv zNi}jF3!byTJTDNKKUO)5Q4_DO?fBrD>(d^ioo~2uEkRUi+n>30Dit%N=^zkv#q&zR z*lY(+ZJ#>zClxXoF%`S%)J#p{kkuS0leR{yXFncL503W}2NHlP? zEv2L0*wE}PY@2Ijuv&)ikc~^|6NQ>>n(Hg;pHHhScd!}G@3S=>JAS1LAY-*Fi?v3e z-TK>_77)r1gtUDy<*!zKuG709SoIGf56ISsSyc_5L0L^oH%VaB7KLtIrJhwPgq47v z^EZ-pnqh@{m}h}oyXA-4Y_yB3^>T_b-3&8(08B$X)?*QMv`TaF=lM5OL=niSt4su1 zYWn%3RL1K9m7h}OPr%;bT8c`Y(A&v7&I3-nA!R06+l2Ys;Ox7~ehtj!pbiFX z@@_W>0f0r(%mOzl8=+5|Kmb$Rp+e8a@t}Tt{jiTlXY1dvoAvXqGcd|hw$0CUsP{cN zi)EZ8)+4FfL&Rjaz(kMORjZ2BkVxmpzC4tJnd7WB5+}MI1u>gy*^WI~B!Cf~~yt#zRTij-*EpJ^t|3zW$jTC zWFQm5=Mbx41Bb(GiJ=^od}N0ax(gTG7hQ7k>wCF1I!vMqbs8*b=4*HyKngatOg7FP zsXA^@?j4+A^yEd$RHU=A12n5v$?5@m(Z4v0PuVA5+#0kN;uL3F^`6>U3sWX;97ar*_mwUMNI4k3dn5%z)kf z=+Dt&gjwYye?BZzGVfjg1h26n1k!%4q681##N2D*GNw1W0|0^jO4Fk_`3{8Qbovy< zV?eL`FT%zlrX|M-w073Le@;+2b022jdUiJ!%2LR2c$D7Ep8JV=(fwb;J^EgHeffvp z3#tLtEz%7y(a@>({W!N8#m3}O@S(v-A!9(|b?P{j$A`m3CTW+0A_ui7($DN*5hx&67Z?$acP;aqG@)z(_4J4!Q+RmlgmjxU z^dS}uyg6`$pT*AK2j2xvpXnyf;5ogL*pt!+lUi5%|(JAs7Qnj59e{ z8b`sHxeP6MfZ9f#_b(ZFy_HRRN{PD9`Dy92#%Jj|G7X~EdoHJ>HpIG4r!^;CGzrsL z0=(G69}0=AI!TVX#T(1B@n%^si-t8Ul>jKjEVE#MOjo;XjXMeyB>CEXEfL^d+L!0L z{77_G$qZYIlU55~`UQN~%9o>{pxl;`_ITfbWhW9VIKl5T-BMoX;oe~Q?%1??b+EJ= zuo}*OROe(v&yA^#X+}1>e> zTtC;o2Y>x}pPJMg&N=U5 z=^||^zKmm1O;u(ZxN4V3?*F+hi`yJp!&+urMpGpYL;S^`F8QlKU1OkS#p$#8Xp~HS z0G>!v{l0ZL6>$mk`urTHYoquCPbyN~>6tP=}Uy)k9H|fGrt(zpe8lACE=-8fBZ72Y-t05d9t25!j zs!?zo(IV+Lj-osf(7Ty)tR&C&5$VKuB9gU~K$%C4Tcd$!>Wt_QgEt86<-HR3IRdYi zPk?0mVqoAs$1e~pTDH}&epN8I`;43WStrU@9u$Kk;c;#Qn=UjHqFig9VDnXCB5+OC z1P3+mVsZFe5q~W1m${G;WL^|S*fKFv8l3S$LA2sLZ5iQ zj}DjoIAH?%GnJ^6r?Cm<`q{Amk%A8a&^=u0HYeD@@)O7j0;8U&`TJ7!R1G37jb{*X ziZLo(`(9_PI3M#GtF(HuqI{TmJ1^#sanXnY_J@R;zDFxTotR$%zXebxhq6bxP#i!O ziVjV;P4uISFZ>LXGOs`;DovJlo8SY^Kw6juh z^t@V!XSt{lp6$3U8FXb6;Z`jcmgdA=EqRK)zxAlITH`MK$zp#cDNZWpZ-b zRp{cySU`)w?@xEd(jmth^Ot2pH>r)PunVHpFVcenc2qIk8TbjAAF4zz1{=%E=X}AB z&ADlAJKs4c30Voo$L>v-PR$U^^`v_!)H$9hN<}Pc1m~81jwanW#RcRv-LEB7IX%2v zZoXpr+z)s)ZMSHxz16RSjqaURUp!E=KBu=G>W#mCT?N3;fTXhl07-%c1BJO~-OCmu zR!_3rx&RFWy~V%gT}a|~!Y0Z9y2Ejl-(bfB+^Jq1@ehpzga(nNaacN+Q`? zN@3|2XqBvD>GApY)VMJCDAtcU|7z$b00svlPC>;I){58?6tJj7OI{U{7es)vY^Z7f zjZ7#9k|AimP*r~Flu(j&?0{memKW3&2GBJuw&FbHRT?Y6f6!LO8kXU*`vJ7~w-yS# zjHhz_JE!Fn_sZO|^47Z+wOv&tIdA{Ei#Qz^;^D5kM+<6zGz_*Wi(d6nFa8xTiw@bz z&S>C|>*Qc0{Dy3oG*SGoH4PFkggGAOST)hF2NSmTEVZ!&d0*a7e^>AN^;UzIZH6Ac zW#!F13;naaWRiBubI?*?sieQZ%FwE~TB|@-0jw&%+-Fwib z86u;Q`lOqXf=6ocHa3*c3TwQi;Y7FJVJD?r5l<;YbM^B%&Ov~yhii$Y@4?hheV0}9 zowa^)G5Xk{aLbIdV@;jt{pA;z%FS-{O&b@n#hGA+?qQC#s*^-}EhCjBy$l5a8f8To zz3fS%n5?8cg2cWOgLP3lJ*U`NnZbeY$h;*;q$OBf%H7 zERH87jJG6p(4l+Y`zS7G$nrGF<@Z5mrNlPG;uf>jZDf}4=AhBF94 z1ViulXK4(!XiQZLz71ur#VMGpIO}iO3M0OrD5W)2N&JiO7ij(Gs9v9D0ih~2y>f>J zZ6C=9+EJPaP6hueCn`L*a`*Q!pT8q@261)$cvQdY-7HA!8mhCnQTi1WxPF9?pXX3B zqYntzMc}~zK#j5j24RF(35xeIuvaO7J4AI!cxhSn>OsS@9vEE5e#e3pNtvBJicdGV z5HUwD_4l`dm>YKXC^5}1igglXVJCBIHeZbL;xK5 z_CM6f+I7`%P0gRK13E1me95JqL*YZx*cX{db_{-%GBMQbu8l5TTjD%0{J!~(vKJ=; zPS@nMDACw7of|52kx`cD4|=ZClixb-}6@1SmhCRr`I+ z#<<5>V1~qtesEtAYb&G5!FSAindxR#U-9b}SlL-W{_tez;N}k$Kj&#g2pFNL4J~R8 z{|@w6ZfCrvjwe`Ya(|^L-Ufwd3*XdfZRFR-n_%}lO zS?INEX!0|WtNbS(^aj_&Co;PTe_w?d74?qi zb{UIN^Rj#h(ByEKK#>(5W~z#Hwl`;OT=8dJbke)jw}i{a+IRjmpP!PMK&Ho)Xv*l$ zP|G$Ou~KYck0wa-rTwJz{ocIuA3~=97wPv`Q9D;HVZke^x@OTz*jw|MdPh z9zkyPp3igj>1J0*my1Bjn-rUys!*V*ONX_7grkJ3rU-MA-sQli60@k(|3^j zul`e-SaJXT}T=!3lt&(MWBchLCmRB=8wNE0BmdpZ)#$?>%R`QfleKa5**+5 zo*RiAGvE1iA9+k%w_W?2PlA*(B7k4Bjy5AGE0=Q0ZByMy>cF&IQGd|gG+8|I=J?~; zbwqcyUNgMASNXpF37_zvy?y0VBimlX6GHbC!-<;$@(eU`j5}YCv_9=1NCkDat?~D% zu8~tL${3R+WN(=kyk|`1vsbUg{O>&k`@ukd&H?~!9*HzpRSzI3Nb%^&ry$ZSVGUx# z5v%4T8f)Z=$b%)uiO>|_|0yFIS@eWnl0+_#6WxZI6y_J^J$+z>$w4j_jE<%YtPjS7 zeod#AITHQroUGEKZh5Rar;yCSqo7VWcV!-nTmQ?oY`HjpBy&v$-|EW8rUrShKS6}Y zQs(42v4}b78_mvdfts43^*>Er7iG=e-njEAN2!O!fKYmaV&tqGU7B%ilQ3IW7jHoC zo2JCs`4F1#9un#w`QT=FM)k7DL^_kP`jHv?COb8wdLyPH>{yvLPS;s+-&d_O*1aYj z<6Fs=P?dy>>bJPB*L=%crWf=+we9??U169TL2~LmBg$EG8wc= zzzC8&?FAtFZ4MVdeXmmfkxufvKz-%H73W$}V|cMGh(fZ8%=!!)(FIFc7dQM!l49cl zsajNLDe^wO#XShUui1Fm~UBZ zJp~{0A&gha{n|VfD7B3B4+T*R**1fBe}YU>uSK4#Mw+E3zdH_Xgduk5@}XUFSY&&eDm^OssOSDjoK zOEZ5Qf4W_-uWk+X3J!`k+OjYx+i%O`b2#Ft(QkY7u1z6Un&az;Z_O|=T5MvG%s@>C z&*~r=5Q)Y0UO#b2nQBvf-7nClFZ}F%8G~^%OIx>e*?2$M8&l zyZ#WD1OST5D>i5w0H7Re5jBMwMw4IDgXyd5w)+f<8pAE#7;Htid8nbf>V5p7~W=<=)nlk$yb%SL3aBvBNg)$G_+$ zyk=ls7CP-GOJ5e9H>&-$$9=u$fS~hn^LMQn@egCcuz4w)SU`X^B8?-An2Dr2jQD#i z4b5D!XO5Uo?hs*QLq_YAxcK2t}^ z+wbq1#7Cg#T6mrA_gP#8y+=DI>MNU@an*l+9PPnh+xCa6gJ(cQaNIsygiQmUSp%F% zxQ546wPAMTq!kzi0wU|Kj!-nsF6|a{eQ~_8sOKL^^Pb5Pnuzbg1=U)28wyLDaOt*} z_zfNUE$_Xni4yp=d8>dbnm);B0F-ku>jK2_0R$&|rDyqd4fMAgV>yS(fs7|)u`s^{ z-&mwh0D1!Jvc2NB@=R_apQ!(kZ=ln7codgi2#ob;omR~ip&TX736;tL#ijPh!@Q0O zKXvzBE21;_y)w4#rL&<}g}r1nN#sYLCh1XlTD)xTM=ztvhsc-AFAMym7Y)?qG}HOq z=e>r5(ai~UJ3$3EZ<=ARGIr)(iT)a5VX0`$I_#bAiFIC}`49k{U3KnTN!ln%1TGd= zQ;Sb$?l)r|%z&BOO5Yrke{?w;C>Rp1^-FrjbY*xwh*;k{(fCsDszOOdH0#R!Hnucr zIQzf_6|;5q$V2APrTUxez}wc2lbkD+M_uc>#5)U}4wD=3ZaMPEVXEr8NUcq8)^$G$68T$=rGY%2N#M9#z5I~4X}yOT3I~G3%11JuhUiVBn$C+M^2gSQ>^BXnZ|D5}g z6>UFs-HvS^I7x!Fr*Ttu>f^X?i9qunveZbPr3PN$hlFAk?W$j^@pOn{sV+c6wC?LR z3}feEQh#;R5rM{In=%pmeU* z4C5q9H@PcK=sH;U-N!1Yl7?4?mAEpzH3qGV^B_rjTsez{x5wq>st2vMfoxB8 zi$hG-UO36llB@uC8$kr;A9M(8-ikWcoV3KclhxKz6A~TGM!Ry_%W=5Sy`4ZC(Y)gv z<1(f88Zv_^5542nAV|Mf<0_KNx${Npaaz~i1Z1dfa3%>0F~mKKNCsk`)_gVj{E&PH zCG=~t>*)5PbdWgjMkn&w0LlZ!R$^BOtQUkKukpGz2X<3Ao6tx&*5exr@~) z``v#by7AK8yP8)0)X>Qe0Gzukl$Eq=WtD%n?d40yNK4YrJ`|{jJ=bg@|N5=1D(FT< z0lZeUf1mfHRaUg?Yv=3K1%4X>Lwvw029aptRTN^^%B^GP6rU$TsKqM1fPO#2=zlA2 z4JV-_Y(6FE$X~GuOz&Hm2?9iGqBRgtv2n^Sda~+M#a_5gXjr4WMWbE+$Lnts9dP{Hf{Dfgbw$2a2+K!GZaI?80QNbimcW{41lE=P8z#|4O{XRO<9v8-z#h7=l1(|{p*t&%U^|R z3t*dceFcK7dY^|zJj+*7+=>&Fs4ZlAy7srW0BPky>ZHC&e=0R?43XnqjvxjC)7~MBH+&DmFU5y*8 z)J6Kf=&okHmhd4I{$SvLi_`32=p&X*h&E+K?3h78VAMU%7^0D6m09FvaB#nmzTg7a zfg3vhJc4h);72gH$ylDH0Cy#p3fJZ`aN8P^>T_it3Kw5O0xZCEMNO+kq@>Z-qP%q+ z(OGgC)g%aQTD%%F4bU+#==A4}9-+3u-SnFmeEpj6DsngWE9dTk#LUnDx8uZ4mnZk7 zRp5i=Lr4K82UV9{J6*6yfsfvlDTx!aqWhNpjYPFxy40aN#dJm5{n%&HYE_ccArLsI z&4ZBN>y>FJ%;Qc{yL@F=fe5}agYRbm_~~@w3y<8nZmq9F7vxVTryR~E#ifC*781+l zh~ZVrf@PuAIAUX2msvpuPGxX?`hq+^Gj8ft`BB)i1Q*aoKX?Fd&mKntTuCu7eQIrh_Wu{D;>~YQ|u3w5*Vv9jS=Dm4Mz8h-P=9bn0dcb7m zl`qCB!AS9nCu%e)m%mOMgTpy<|{_9oLcVKFs}fEytr66-O`+p#EFdg_jhpCVl!hT7J z5=M${MOt#9(tUO`N7Vx#s`5uH>yYXB*We0@X9TUkIf9iy5+2=hv3ns{+Oq7b!T4c6 z(S-~s0|Yo+(g;v6Lh)jZ7t)iJ06;)TFn}7?v{tfE3|5V6P4DyD;60)2_bp2?UI7(U zsle?*B~wQ6s8rwHhfiTmYh*7=!TX${fi`GVKqvivwxPw7uc1_k&066`Y2;8e;S!SN z=70|*IO)k>2B{3n@_0_+yy1YIC?U@Ln{U{WAqxlRPzO`M53k*yKSWZ0=MmVBL)G!? zp@-K1K!KRyzAiU!s=@z&!vx4syBgHAam#Dca|dhV)ufJ;Gakz#2PeUf6=P^AgLHz4 zmG!*2+%BC&li*_u{&OUm1;9+=ZNB7gadJcDF###L6U=8d6ynu~@1q(7NCgVT%An1^ zg+_}eKXd+M4g(Ecoca=ge6uTO016fLkF$glVDKj+*DRB(6s~OQ)v*=zal2qe4kWo> zbkHJ|Etcitvb3t#U?*St+=`M`!Wh$1CiKJ~Q0yS6O7LRAiHzeac&PLbT`K8MA^^6r zM;I3Zw!Cr}n~WKBBsLJi`4jwe#EY15*aQ?Eb*)@UH#9CNdfXD`l$f!4eOF>+reAz6 z4YpgkG-N(Kf)F*1!zJyEN&1HZgDem&*!U@o1#tYC>m1VyR!(0da*LG8m& z2Y9rl-yJL~FLX>DD4JXp8r|;s0Y>0Rl6CPid7X^C2mmyU?VFoSrTy-d0B`5W2u_Ym zmOIUd9+0-?0Z%Q$7FmcQdZkkSINll6Ov7(DW-E`9qp~#lYA-re4?* z01YUq935qOurdD-*SgmU>k>@9kbEni&MGN61Gj!LYbr%pg$8nz$@<-WP0GPQ`T8&z z+wcsRWKucyL)|m_H?oHa=EE?qJoN`W$*8g>*Oj)HBVp8FbMRC!u$!IecRN<+gJNm? zcz5s7ble7=DaO(6Ud5#cs9kb7rS@LEH3!{uuY4`7^lgD}i}f9?s~#*VKP+xq z%rPvbD45av>=et}VCqt-D(|K)m#m z))5&zIyhI3&8_HFxmKyJ4ou+<--e5+jzG)V`s1o8D?{|Bnu~%%Zy>&M^GrJ_RMOB& zh6*D$?79q)7qa)F7kSP_=H1*(6RU?)Q{BoOzIgWeue8{fD-D z1Bt22mTr+|pq(U~hTT=Dt`pL}a1bE_cH&*s&9CWR^&^4pL+AZ501$cGAEIgfY=ire zBe*4X(&E;uZ!Q1Vueo%usF}dpw7E|)1s1e@w}GF+}9 zN3N|!9!43jiJH=!ftR@zxiv>^L)EJ)z{`6=@Z-)4SNYdZu1?KBsuwt?=+)II)Q`(( zz8t){U3Z_Ve_x%7^?y#M`-jji0EUHY$xf1yQ|k=0D=-?JU;<;%K+wFI*-(9dkIrk} zM+g%RE#$W*$S_y|TI;3Kt-J9KI)^{U>2oln$9?CP|DrAy7d|J|?HuP}Wp5Jsh+ZRE zwWLBS-^r9#8}Hkifq@Q1b4c{P$+lCed-a`2;u2)*qXe^$8;|3jq2~mC_$RE$mkglgpGsZbd2Xt-d~8P$`J#PE-976tFW!Wnj`2xVc7I3oAg)QEXS3saK`h$3 zGwE9MHFkfLcZoLTn~Fs4)Bxz^g(k0sXXw1jNSC=`#j%Hr$`<1w-T~AoL)>M(37f&e zfzum}hRa937W9E4`*2L6vJWe=7RYh6^(`&co7}d3_sthXch}Wc5W>>rG-C7=cwLXh z;VyRZry)o*u;AmWps(kHQ;VY~cQj690Vq#phv5l?dNsQ5M+g9T6-PWf;j4}QW_{dy z&S3AF!eI4_;`PNGZqAitY^isvFWXt#TC0D{B3*H+>#+=QXR3_Cbvh8WwJ~Yx!=D+; zz;932C~pL&w727ZLJzl5{fE$LFpMzQ%B3}8!3P*2}+jGE(A>`6Elf;wWXu^Rr$9t^?9}83b}7eqr0bjgGwJp)j`<4dck$qo?i6I+92c$;tPFl)n}I4sRY1mGO0l1FY(v(MDgs zMGu9{Qlzu>hsEbctt#w`aJDSiITXg07y^yMMSQ7wm($ZS5b9=8XplmXOWiB>kw0M8 ztyEf;8GH}!`Wf%bU$mOH*th(V$snY<6y{7}x8ee=cfZJg0{|cZ%HrCjoQo$?BW=0U zp_KUejutFA)46Phg;7ySqO_m`(f6a}hvGz|FF9g}zm4teFZNtoc6VoCQyka%Z z$@*A9%OE{a4BMVc!TSNJ;2%Pl!7yZ8s+ZRM-;HK{4Fn^!<2ctXAauDF|AtG>-^f_Z z%o9{31+vPt;wfu?LO6TN1%ws>h(dkXWAqp*kxYnTt7)HY+%tBi%Ujmf&{+^y7*fn7 zBWO**yrczh&xFfLRWV{gQQT;=y*BueZ+pit z<6r+=o#1s4_c8|16IU7CVqS##HHN+iRXXj1`5Yk`(-%r}fw|*>rNfUD4YnB8L^)MM zWXBI)k+sq>Y;5zMCdRRNH9hgKT?#$i|Oo&`X z-iuGcubx&v@hRg6)-;szx9W^|YS&AL6wv+*tm5`&x0iNsb*W+fkv@+!45{_~S&Kw> z@?skU05BiurOjP=6l&#@j^G;K(y`fy-aUa%hyt%YPYp5(e-t=w(>{vszVR&cz7bj? zy?CKkxY7wF{b$dL!8N8Hl3r)m{K4k7Fh<(Nk?sEdj!A?^>)!B)JPJUJFa2TBrmM z@gKAeKGs*4FO#Y|&Xh+o&zDnYKTRsX1wO9U8vdaI&j`xD%iYv$?{6P_Sq>KDe^Uzr zgJ*gN?1?Ctd~G!sAiLI4AaXhzSzd-`01_xun5gt>XD3IRV5-Cq ze;dvDe3P;M9R$y2j7mVs_OFJHpkRQSOPBI|&f0Od1p=eN=_VW!2?t11Q*ia}Bdn^z z7MuzMZfrK$!G*?VP+4M?La1R`G)lw-82nZXsV%E-19f zgTI#=2}G+>f;f&w`!g226AZ{KmL(!2(XPa`1~wf|suu}%o~W|^esgR*Kw>~Fc~f!1 z^A$UEu?C@1`?mfTfT@phS00 zctZ2z88_(y41QZWPXY@=Z-IDc9SL>n^DV_9F#*7_VIZ2g`hgF1-zzTM1RP>WMJ95- z=7#S%&>`-^Np?-ehpNg@QIcW7M^h~))A_7|iAbt6Bg3d6-Bmg9Z{Z_%gN_4#MtL1p z?#m}ap7U+$t@UkPX%7ofCvNoN-f=L1fw@w@b5R2l3Hdefjh}>t!rh_P6H`P)c z5LJ(WBd$|w>FU|v6a=mq3aw2$kXJZ&+znV3%NoG#ScI%;z;0ZDl(x3#03ebK9BNpK zH2KrKJ;qvmytD>p>W}}X?Vey5RrclOc+6WKi@pQ`YKKG_4=KfRnGs;a+3{`6ZQTVPM#Yk6gB$ z!aE#QnG^;UAT3RaN$%vw03Nj?R`Y52qji3IUl>#=i~EMz4v8mh=~r26z&c570z(`z zR)vcZF;M6ztYgpIaG;oM^agidB-aFpz~g3ngsKJM83V zM<_JZP+tswGkBO$%c|1Gy;O(By_YQ7Cb2sf5@${&e46^YLZ5wT|LwR(1t-?cq3z|_ zO0P8qS8;IT?G8dCY=tk0<;${>9=xPhM{R~>9=jVXu(~pf)s~kU!y_DhthX&-W zk9oa3dil_Jc=>_&9vXY|I=43Oumk1D9jfonX!GuMQnNJE2L<0t6S zCwk7pLB9^e-I&T>T_U)fNJ$=?_{)u4sTI1b^Om>3V8Nlb6@OXM0qd_9v3VE!YD4c1 z%WH%4@=zp(XP8`{f3REAalCz;)Hf<40D3}y@5kf)`Kg70Wll!}&IRbA0tHn;i9}a3 zrg2D>sGZ{FiaYLiq4xE1iI2m;>^*sLW(?nOJzGg}PQ1s?YR9BT!;M_4gF#6*VAtb{ zb0Do%VmSHQNpoAchGrpEcElue0y!3n{s^;HVN*STC}P-0dtU6O23iAstkYemsqaQ@ zRer|_d^~g;x&6JVvvz+~Fh_sa=%sHTQaE+Hwvdo>S%Ju(&rrc|u#!0tYlT&KT{2Wi zrfhO}n3(y6=30K%U2NMwgeCznx@KyS z7MP@sWMdO^6ss<8fy)jthr&qGngkEkw*p*E757s7pmb5g4Up}0YG;=8Hivkh&UWwb zc86YRiZk}Qh;oMu6Fj~WjbMoo8IQZ5 zVdyLz22&>^Wd}BpF;!{b3*+m!S@sR`EYbURv;OAZS+_n1$)M0+UX;85LCJV_8r&mwdgbR{qKVIH050gEfW;&NG%@AE4ZcVt&u*`LijRD@ zI;(^rb2@>MMTz7iWwd_?%>!VZ3>GdeKMl)X+7<|g(xKWIC^ZnsPgCPvKzx@deq~7(~sYn*~;*6 zApsvLK{7w4MJPGg4#h@h=4yvLR*|MhCDS>r=h0XNZyxcr8i%bj_>`Oh@p3M_Y;oB^ zQZ9Tq`CQpoI)J*yMoUWYsaIf$Fiy(Xkk~c@vgD4np@&U+<&7Ynobf!D+k&xEK`c&H z7S}df_U@q3u}zFr&FoQJ*7oSJcikj+5GwU&3Z{rIsdmhfS;C7T197~Se=n4ti0*Zk&WBv$~we$?4Mmq0|Z)WLuQZX;xAOB>@5 zQ&=X-tu1{#k@+CfG|S(z#jRKphdxEU+ma2Y_6q;aB$j=Rx#GZw%XRdwP7ripW(_8) zX{@;%+)`0!wcJ)zHUG~KeG34+!L?$?i0Q0@2=POQkg-;J^y*m^RDgtb5QoMsT@A-= z1N7<#41pQrc7r-+OT}2R8hWZ!X+%AjD7XE<6fMxNww3WFR3rR_p zaRC{n_|uP;Wk}{-dJY|_at!)ksxtvQK#*JWJ&)8zYWkG8=_#q3CSvS;GsP%Em`WFK zZMdYZ)-QV=c?zX90}mye<=3R4Q9axyg^nO`BgiQ%ND2I>$D-3J^z&yQ8TC5#)J2V_ zy{+bKCv+(PsK^=;pX7GnElZ8K?2TmJ5f0rvAM}j2b_Sect2QJXMSiZO+v_IXV1deZl_`-Ym;zB_s4FD9I-Pz`d7Ov2cFv2U^pOP`|uoa{7 z{j}#VWSEXyfyygHi0O=vO{3{MAymo+eTm(NkN>Tsnw zCq9mDEc0HSd9~aITmNbZvQwbYTvDT97&f`|y*3`TnRRfpsft%|5yLx&Aaq-Pe(gmm zC>U9A=5?Gi%@tD{X9j1a670#%8$!(hTS7-(R*!O8L&bEHwGbx0XF6`-WA&>H86h56 zDLE^@kUy>0VNi{k@c=edI>uL#XwWc{+Fso2vtF|e^lH3+8~D8Msb0X(+dKmG{2qd$ z!WXzq0d3r0x`Yl4U5e$w(bV>$V?vsgw4Wvo{c_FJ`XEKeJG!7)R5)gl@}q*sTOz!p zT7(D_|MaCVTl^_HA{hHjTAjD``_tzddFAe)2QBBI&m)q2PDQ~>1T~{!RCa#G0Bltm zL_l~xMd>wO?U+f;)bG%nxQJ1=b}?#t<#*lJr3Gk`tTOJO=Td^3a-L%S*CoK`_X5)Z z=dtRLeY17V0tt1Eu0K?1*(Ypl$FTvwLdwYjaPwos5bAEaO}mlINU4&=&XK)TM>QC5{2SS5Y9@wzhO6c)%iraGdv=Po@w}&L`Cw7EVeew2 ziAVdJuI>BST*Em$gr@K>E*B=jOnKIt(OKitR#t!_8Z~?lA|JAWQqHD(h(tU?__>b6 zy`EAAa+X}8|LwlxUu&)Bu8InO{E$(FTt=PCt}p9GYsY;QS0kS`f-=MJ5$$CdP*Bcl zFsXjB8rvf$w@l>k#$(mRzMyHDqkGNc0Cjx^r*kq6%S7ndDjf_k4c&uAfj)L*quDvn zGEPjx3AfRYndsBB>kzZt#obDh2ydg*ifqL>6#xjJ<94HCehM%9jOu$nZ34UJPp8|; zl7oOsoy(g7M>w93C`Q)D+;I*YiIciX1Y0R+;R5ezgEji6)YiF$bku~t`6VQIszz0n ztqsu#nkrj#2b5~e=3~EX2CMqA-D~Di1HYdg9TV)A z)pqp?DFbrz-@?gMu2YKuay&+I7-oAU*uUvE*l8UhXzJbBld&roOp@j9u4BhRewSRN2A&VB%mERj#ZnGJ+a*jy zMLh>AY)>@nb+_qIZ2uv21%OM{UsO{vch;ToBNd{QiEFnqs4BO^q{pv=NFOL>vgpbs zEkNLJ@|{(8J@+*O^fsKjD*Xhe&?59pU)@F#b@v}A#eDta*6m4=LYz8go}r*Z--gaa z6nVI?!;*WlmXp_Ls&ZSdF!Tx@`DO2Pbi=en+XqHUa1(|t%u(`e(#`a$Y!*^4P)B;l z8fC?mqRp!VV*X6EfHl&KhjfA&a?CcG^IW=rv~uQ|PL@P>nA=DYKsoZ-b|klz59IU< z>&3KVI!~Olr|9eC5LWT)`B`oBo(`QnXo#OZz;lEsKlXY?sPQY@g@G7^G*{Z7w;m;k z*XqV^^aj{8TMV5ZL#QTQoYA4TctW0O4`Jt76GQiiSeSHIrjw8{)Y{X1-Y>po$+Vuf z%}iZc1R{T1+xnUHhDZ~&5Qj0-=%D;@aDqMP-aWB(0?Ybl832H(*vkO`0=|aD^iLm; zXEw8%HmGze35O^Yyw^}RC`g1Aa?c8X&M}01mZk9(wH0yk{mu9DwX0Ji|0^1bj7 z^-4oYHb3)1uGoTFsZNxdVn8F0aF5*o4SG$q<_ zevc;~QX)7j^t1C@F zw$l04ta=QE;Rmku7iEw5;C7)(<=@jk!UvIT!exEp%-+DDgnQ)}3+4Bt+(|#Jf$MWi zF9Q#UyavTKiq0vY-v56Ok@75DN`4yF3g=G{q%@7!AChQ*bU7nJYmYF}?52z9HV;dB z9zdz#^Dr!?t{V3+xuI+|oy?hnSv_gAm|VRCYzURj6ng%$lUKguiA~d{&ipCs&|rD% zpG&m`hZ@cL3#aeY$=>6>`FT8@KODChdOz6>{619=e6t@icdA*b9UG*`q48F|_=!s$S<1|nv5kH=9kWcupn~F#mCoi=p~qbkP$pPm5KGTp? zpiy0_r7Mm(6u$K(ueMBG2ijC$I97o=E)QdRTrG97S)a=VQ`7=2GMsI^OTHKu5Nv|U za|e)(bu0U_fbha>E@Q^D?ZC*`AW!prk35=5#oPL6Gi5m8?3qs-y)-AA1P1I;;C$2M z@R4Z$i-EFIgrdw>YI;&L?lxH?-v{-J84S^jL@u*g=KLi94r=7C4gi`v0#O37P8Tf# zz_}XEGOPblcw=+NKiNFIhXuzG0fpBGBSL0v%Bv)O=2RZ_9>d7%o#CDxebw9DFoGp> zqXE{wW^KZSQ91kIA3~SWFdzfvf6@mN6kAf02x(O3RjGQ&^}#8px*sARx?Hqg_I|Q= zF@4UrwK!{!xsZm_0OUMnAzG0hxNNQn65}!06gbN}co4NVE6zxzd}>B4d!6mcm+UloO9sHvkEb)?OR{2SSt& zQ_Vyb#XJ%cTZf2=F?KX&h2>Ja5%W@0?TA(f|N(TfQDaPT{?WOv(ObEV#FaZ{ zEMh7N^1w*TT|e+qLDo?7D1Y8C$k(+t$)rcFX3L z&9!*%?f3o%clX@a&+~keNo0mlqX($XnI1lo*#q-~TbdWKV6CXorJwu}kW(by#17oB z>4jK?c~_R{+W#3Ep?f(To*6p@Ms}THT@m3SuNVPWv0Aii7}s37`@qPfP2rclZQ-;labo(YdG=JgRMwjo75#Sa(E9~QH`aCjAjjIzy2(=l z;M5%Ju7On%mKRY7hpxYsdW0?(J-@%5aA@bDSy8g`nc{OR2Hdnl7Hh%#DR`&q)ORDwDw^brQ!)vDbd3 zpw5cSaJv3sHe`0PFA65v$B;IxX)dp2M5CBz)1-GFHg`MWi|W|5RJ`@Z^0TeCDc>h9 zBkl06&i`vtHN1!Jo;;?>WanRS{GfkPz4Gf-{e6zOzZwAZ`(6Y9E&v~1JXA3=p&%rW zp8gk&X}nrCHW0f|!cJ>CXF#aB^NS^K*9- zX#E$ID~m>i^=}A4vngymKTkm<6o#j^nuFQiom5|g4YS>a+{SV>q!CZA=hGOgYf?~onIddHAzn1#jZM~)Om3h4i-I|_4+ zwYdfJESw8ezo{WWnsNuu6P|DZ@#NdTKpcf=|7MtT>p9QnLI=?DhjO;Xs8$rK6hQU)355 z{Rmp)HTgnW^{24Gv&sirQ-yD9?pki1=WC}v3fWKoU9Sp1tCq+vHYZ<&+G-eS5fg2> zgKe}d=Gx|vLguUoq+39f`u?SY+zpfI#BWLX|mJHM`I|Ij|VPR)B!;=Sy z^VTLVZ^=f={Zr^50M498NnM)hhte<#sjx*ztfK3uf6Z9wwdEcSDli@7a0SWHH(&%g zqYL&gIUb>9*L=yh4FjScE@8mqO95SP3l6awl>oeBNw(Pm%_Eg*=O0 zAI!c^AeqY3+qdtlWf}gS+Mj*^+mS=^OAb8voY1%$AwLss^#qtUOgU)!wf%+yjX}8X zGVrNZzOD#Z0irnXk&_Y471HX^bzB3v1(W7r)08`m6aLOz^NSFwPUgOoJUUE7b*xIz zHFx49T-r*XpT6Gv_7_{yUV>tm+k&e|Zu;#91RH>i3DZ;Ir%D=R3=8Z=7rwyCcP<6#sfKnt3|#x^&8wn8jo;U*ogy1$(Q z^&I27e%^BZr_gr5J3NauKRYD&Jee=#QzC$PRVRm@5CDt_vXf`i6|6sp`>U%0FKtm8 z2*cWDsT^}mui}{Eb1*iOV2wfv&s5XM?dz>S(>00I;MbdZ5y;Ett?JPyAD$@6fTUVS z1CLH=QRHn7YMwyuMIaAM-+-JI5$Y-&<*A~Q=E<&rbiglqd1ME0Q|2EQAylfPmF6{^ z(Q67fvQugn16Udf>n)z3Ny zz;sJYz9Int%L!g5?=%rJZns@HpM|*kb{oSpaeMo4v$Ve;j=-O|uRvLYhlbtSX(j_T ziX;ZfelPzN@&>>KORYm&eU_xfyLwCxh!gSYEY4`6fBcSQxlbEV{*cPZ5 zKeRX-uIzC-URfH1ALjNtB7a!KLe!}$i-n#vz=0STWm5bu@i*c|czfScv%`yBeWn!; zCo>O91Pi`xB#SCaR(fYpZk*q+J+l0j`7}yxzSg4zwh$|WmmJRg!ZT>?!fs(&J?K$g z>J@FdS=xBDs(Ehom{fjX+NXsq4$q6=K&q2^jf>jkW>FU;kI8=7Y7PIPQEr^>o#p*P zCH829tf|0jN9ybrXRyS3ly{9#7D*<5>Fzj^I#JY{&w2CK9^@q=-3kIpqdXVIPHA({ z_!`lm7U|YE=S`;nonq&#vv9vvda2ZEePvFZ1WWXo#GKFs|Iu^9-)fEGx%X1W7x%lv zQ)bF_nACsk(3e2CX4zHm-wMWJ64Bcxzdyuw=vf^WH1?qoISF4!CYjTtc9MBJpg{ws zC|<+t*%$?Z1Q8)7e9}ZllG)u^dQY{;8lG!Sk@?miZ}&tjLuzI&cI~Zc^UxFO1WQ5` zGa{Y8(yj`o%QaAXHl|P;JtaSs9UVg!*;XA+p|C})v`x-}4NbFe?d7kAzaRHI(p3Po zQJWolCIG-^in6Nid`U`_7V6CaA3D(3^uBs-M{J_py6s?9N{wxTAQ+>pB6ae;-M*XW zl9?sh=D0H+3ze#lnINXg99C%6{Fyb52}xHHOR@T?jIJv|BkmL3ufs$1YM>WA#$*DH3^j{xDJI!d zV8eMFSf15wHcrW@<{)OvO6D@UsfOgF|3+0`2y)KU{^tKOyuDbz(N0m)bxtKIkBn1Z zNo?B|7<2@-Qc6*6N!rdx7SJl@h+61QkuI!?tt#c=ar6*Bxv?b?`qKLtmLF}GA6^z) z6bAeSF#Ruq7ZwP2qp%NOk!j>WS2E!ikVPdAZ zeXQRvE{vNKnX9UFC9KNz=vnp6^ta2*(?3FsK)&}yikRZSIxjKCdd~|2ULz|KmZ>wa zi427_EBz3s=k7q-srq7(9itId{kr@5LinROww(3ntA{Q6f~r4sI+&ez%&W3F?S0mn z0pR?J`yhvYGa`*38(%f$oYoDBR+Qz>ij?1FLT4Zq7Y-P-#6y{_;5R}VdMy?3U%AMZ z9MsulWbWZ4{G?Otm*n~PZz$1{&ykZWb=7l1sl9?+yszNWu502p8$lfd#4gTaL8zRICb zAkx+$B(9dIh^Tyn5+a1O#`Cp4jf6shE-9=AZTyJm7B^Voj9 z#E`89M~5;w3btrrx~3BUhN-OG&F8}G6XdPe=Oj|G_h}^ofF}$}^w$3{m%c!KOj100 zA&yQxnifcLa$ZfM%gCkbYbmd=-#8xe^HLz;E9EKhWq+vhEFt35iHQK2ISYjKl-i#cM|>Qj(PcZ(OGoQyx4(N_Ha zMys0xcS)}&d;<6=EZ6VL<3G+)(Ah)d>i%%!Qa zNSj0u{8K0afV07}c6^L0DN9YFC~RsQUFmL9-XOC|l2G$`QSkJEyp?ZqBS#g(7OtuQ$%MTRq!z3@ban0R zfBYt1^jki<0}Gcp;c&}DL^xzqlzcZBommiZt3{U`A-q&!r$TURsML_OYIj`!lqmOO zKq*8#A_>>iVs^q?aSr8@o&LRPiwJBw_z|gvpq{_IGYW`Mald|9Yaak=88!(Woz7@z zN%oy^58LbSD-cJYC^-3gnv`&m7N6I6hiBdcvoV@;VMQzxmGAt%{A?T8d)1!qrrO*a zRvnMmXgS125?Q?@{dBP|)t4B#?g4pK6HW39-76;$5|u6gAWsxrq?D1YC^O$I^=ENe zO451pLp(d@>}LAwWRe2T`fAP-zO5}`7WI%<6G!TthNR_v!Q zuOs1Dx%{0xYrxS3GtQn51-Io~UGdj~4g4_P)MnuxnGx|Mje}~POc`-T3ZO(IC{;~%wqrxNy9q2!t=%gj)i?X% z4mJK8+HZF172h+A)${H4__eKa^eREORu2zs$1P*{;KJ2=2Uw6U1?^mSC`Z^hfeEHO zhX@~7FWTm*`W-)E)SrDkBllN4@9U;>S>3zb4Z-QcP5beDbyZ&E?Z4_8&VooAYRi1~!}-G%g2S0VuVUrDLM_ z-9PWIMXNmiK_$q2lveZGu8Lj50^1>eTS%Ufi!Jw%CptB%+J8!=N;d9hT{6Hc&hzO>u72^7VWV*=SUhQ@kqc6=y&DDu};uzU~v0L(*@fE0b9)jc?W z5A&OCy*$0ca9$TQ85erpJ*=ASd9}*;I-Q~<5u5RbQ|W&V}A;W@ZA&W32Yp@4YRH)SW+nqTThH-k-ggn#rrD(Eu7p zAwKDOlBgvw!kyhgA}KiQ^w*N8)>%q95&NJ>CB~l8phq=xtGgl#p+eG4+ei*EJhkXW zqr`0^$Sc|9-ThqVb>$snAq{EUXd(c%K2)pt#$CnpJzPw@VO{;ln-05HOzBeoeT`Oi z1p*m@?^{2$9e^WWZ_@t88XzI%TxMTyZfNLEtj^Xfiy@ql+i)-DD2x(4_gpNUO|)xC z{8I?ZE!g1$Lua`X=?Oa#VNtaIP+)GU%FzQvPmgYpM>o~@WAcB!Uo z-1oldZ_mX|+i$HcFpSJ4ccP&ydf~g$ar`ON-AksnrrDTuA=8i9BV3^3S!NBj)xvx* z*o`nGpmL~yRK{R>wpHj3h%*zI+v6`!L3BSrf%PaIt*S8qD)m_6i~ykF8OtKpXd?yw zHDgq(^crZyRN<$bwk1U2O|%7!6NnRiHs{-K{t2ND;#A?}7n4*a_ADYyYC06u89|^I zWOmT;IeuTGdXBCzSV_IebGTN5WT>0QF_u##pBfQ1>i*Q-*!4Eyug@*Wq*^9%?m)h~ zYeGHxt|%aZ1~X3QmcA81OZu5M^AWH124mB;wOw1!pX6+q_3XLE1@Ekz2+n8RC$f ze+r!fsQmSpPLc3DR0l~|gn?->cZ=Zim}^xdJbRWfv|owx7xfzHSZ7`?k6895TBpS_ zmfNo-k~oU;N4aQPITP>&%HgU}t}g4P`iw)PxlI;a2~ak%`6~38V4STsomXiE za^kdL25(g=9wi71Ea&ek@<10}`uVV~mRV{eDmD70AC-GLYZE&$i}d&2sANeYHWI7! zk?4E;ATbzD&XXqM)?ahq{+bTde<;pQ{w46c=9yoLsCmPM{?jEL!Q`2iYVTVFr0@0x za44%+CuVFknaogc_Sw8&g2F2n1NHyj<9ybGyUIt7{Oa`) zRMk(y7&>-4ahy$(<$Zl{#E5^*Cwq?-IZil(^%t8|H*s`LE1~P7C%G+0twJ77a z|0#4F0LLo2Y;(Xgs2kdaE)uF0{bSqWj9q5dg}NI0JVadXti=h=rd9iSDn_m05ef~8 zVtr*cL);-+9+Z8BeqSw1*n48;Zxz+Ah_00YxTIjeN9@Y7^pY z7s2>M;OX{xNh?GXj0d(%Cdn081rLF*Xuk* z(yL7SRuXEW3H^$Dzszqz}$ zG(%lyUlBdV72wiAH-at1uB4H)yGL_?FkZ>Qe0C8L!t$m>G8Ox!b;R@NVg$j>$96m3 zX*b*S5gMWOfnMQAZC^rsU-f*or9Fy6zAFp-?NOq3myz=Fv{Mts(T08IM6)|(z?Bwd zu6oZ9%>C=R{!c@|K@9{+RAmVn17V7#T}6+_z>v6Ru3HSkhp@IZuQ4?p|3ZHPckV3j zHlxJgFaknd|LAe$$2_!k6Vt&cEdA@qFqgE~|GpASRzOl0ezLYPRFNFa;x4MI+xFd6 zp7>7Z7NCk{2AcPI5U}k0U;!Uj`;x?@`Q#+&(6uxFBBW9_0i(ftAV`+f)KtqRA@ZaZ zv9=0bPhZE@2Z~qRU4eO>X51du7CN&O0P<9~s;G`6E}nTBERFsp?yD}PWMLZz?7C=N zB&kYVz7LgLD1*nb0@!x)+)B}BOY^ZWSiLn=2m>uZKfl)cjTjftcQqdeiEDkC^p4e+ z{+s2XMiL(FQ#3|N@Pr+?uxZL9dxy~(wKDcsHm25)$hjjstecCaHZkf&O@?U9-w6q= z^BZfag5LSVZA;Pdh!yYfY?4~urD0d6DA+X_5E<2DtEX9#YY?7o_s)nz1`UIsG8pX7 zrL?`dph1X_ZT^eNwx`<;U1uB>(;Qq3Wiry;KKa1_EMm}64iVf!2|b>&ORkr5Egims z?YVS5o`06wV^4fx&HYj(v}j}RWdM`q@sp$&SMlssGff!!ZiF79N6lcvgxck#t3rE+ zRp39t}LD zahP%Q^}kvEYx;{^hNUj&r;yen%es1gv1+GQlsVH`oSRTnCvB8cxlK(%i zt!itMlS3mA24;(bosfc=jM1?5JdSlTN%FdW$-Ya2h#e4!{o&g)88jhmj225j@_5rRhOaE6&>j9{U}46>OsZkyUF>OC6=J6;pVc@yI6+<+o{&os z{HQ}aY$ZqqdROC4{by;l3ZZ+{(`681HdfWRwK=?K2AHaW1$M6t01ptQEN7u#)94(= zq82591?&`n^O1)Oi97fa!lXZ<68AHk4t@Z3ewCl952?#o0xjg18} z-}|zkEEkLR-cy$>{t!nUe-bN>k(}&Sr~D1R*X2{MQ~&K(*FCkB?;6e5U$8s%pbo(e zp+_hE3xlnuizdj(_44U;SNbjH%O{8si4pYYfD6Nq)i8x!V1SJg#*ah`llHEBPk0{@*{-n6tqXTvIj^Ab-hEHDvH@`r-i1a%6Y%jRe8@2>4 zuZNfIESL|umi^J{{YW+yyw&}GZh6gX?!RiK`w2lNzP`GOy!q!l94iDsd-nmb8$V_P z|Ba!&fOkMkO+Qy-z?wp~^3)Ds<+|9eCmecXUUbFRU-TVCIO+xl;Y5av#2of#xnYC|;z@6y9s73mZ;*t0;=@(`0nE1ni z(WE8PmECpj4e&wq*O6^+111uDk|N(cA?n6ks&Sv$eKN;(|1Y}Q=~_$#A9gE%3UAj> zyZzr0O=W7Vv)it}IbX|kj%J2wjmwztXr2oE=x9tfl`TyP= z27@|OC_blXM9ZmHI=F^F$yu4sFczsjr8vsb7f~Ik?}83MM`5qRh+Rd<4_{{OrjiJX3aLhxmm`T2qZ0#h&iEAl zcXLV~0B23N@f(?I#yspx4g0_hdO*JS8N2Nm9eUl%UFMI_9J~Zt%qvY;TKyqiZ%O2g z&6XzF?gZyv&2p#gpbP*2)2L4WohSfEMT9F6z^e{0#zG1g8-qE`#jIA&q?FQz&nq%j z3^&y~I43|k9A0El{gs%O(|H|EXi<(IS=@|}28tO5eKQ+k@b_6FhY!M_@(H1!i*-H2 zc<{gX?IDW_(-HgkkJ3xYL=yZSB9o;PM`g&84AiwfQ_w*V3B-KWU8on;5BfELMNbwX zx;XixeF%|*_NQ>Rly=oVe>UVBaLo3-?l0fiVhnfQj|z0yaEY&uJ{z7q&sY;b^`OJi zuvVWdtNF72^;FPCOAUYpfW=*1l^b--3GxAsbN%>GE|kdWV@raWX&#~A7CUQipVIV$ zN-?^hA<48&S&-zM`YMl9h(l}*|q=S%QpJ2w&l{nQBKq)|MhVkyBd)bDbv z#VAST(+V%rq-pzDSOHynutO3Y{qH{T$F?TMLf^?3cd4)56PKX3R3>s6(lBOW{3Q6# zE=Lsxr$oGAbIetsO_hT#JYW|)nQk`8?hGT3&Eg(L6a{ZDKAg#9z4Kc%R0|oU)arwz zS9L%p!0xzTiyJ@Q_6eI-`jkpEDUu?nltwmYITAJu&I~ayi>ROaE zJViW~M(uL;qc7ZCR>od0I*Gy+DV>1{F|)zHLd5O2XFz+>tS8gg@n4i`Xl{h;#f;A8 z0rV6I;rl;x#7DUU7}PCuqxn&3{)*xlcUA7>*>3b?7f&K#^Ai(CG?H_-;^b=FB!|?S zWA=NUq-zT&b}?1O{EqQPuFjuByVAH$nBit-E*emX%EU8Oxh9a-poZ*AcOrQyX9EPq=-N(*gBm;gFOw>FGrr8m(S2Hk3=8`78Dbbv^f|L(*x>N z_2qc{cAN5*ne4|^lpc1BHVbvFN4#VW(rzV+Yg|cxH4!eq0Z5}~Ec=x)l2&)S%FrV3 z-z-NN0H?_V{(?pjoS_!Tk-^NJ5Vb+bkBl$A(xh&}Y^`dgOs0mY zl%*V1640czNOnR-Yr2mT%`rBE@HG`j01ANtlq8+;ip)5MprFAPi`L|*>BDbhg&>1T zj2W4UXXYZ(#54LdxwtK>lLI=fMZ_^EHBu#5mo-n--cT%z{+OXrUlpiA-KfbWzRF2f z(2ANx=pPYwIl640eV~Q*1@IXUA!l?3b~9b5C74qD9ctQyRSCzk%~X=~eufJ|N&>qk zwg?IG?Q=K_S&ex`(phL)DfHYuT5g(}$zI<%Gm0Of>Fx?P*knv))YY+I+kUJ|^-$;3 zjR)Iqc|yFH^0bP-(3fgq!Q%XOm~hc3;AKRGE$9zQ7)?zoMb1)fVFlU9G0JIXg=WnZ z;Vm2_WOzqWs%k*&);gIyFpi0jXc^g(fU%LS5Gm6BJHP4nLY|NSw6+z+zQcLy;JB-A z);RFiOq0g&eJP?xS{Rt42th%TRaz|-k5w#!`h+T4x~N>KDB_V!+|}MTjKcFiilyfN z6ru=#lhmJ|SHRv;0It2F2V(y?bmsWi#KSmqpSM*FeQ%O<3x`4sO!7XekhCp zRl{#8iOjW0gmdN^R@mAHVHW|4q8pCka9k_a16au=7v9k`b#1 zIN4DFASrv#m6`bUt<1g+Qxn1SrD4UsP3l)W8%X{eO7555&w9vfclSO$ z-Ie>O1$^=gsn8;Q-X8#@WD0nW438$R49bicB4DO&Dub?DMYH_~`H6S+X9u}{4cRO- zEIY(0)uBBt4bz0faIFMKUp+(r-(_iEyvVddWa}B7-tXJG+X<<7?y&PTJ~91 z9pj5Cb{Q)SCC=s?42js9A7kFhCMY?@epuKx9#>UN+@p76U-7p7Qim?5^jH4TQ!nH} zo;M2#fB?vP?~ut*SPFzk%T*1>OH82Z-*0dhrJm{Y3iX1%Io_2CUsX-Q=EU1fzjDC_grka7#FHd;On7#!15C!` z$dV*|(T*UH)+{2Pj@Bvw0MTUv2uM&>EL@Yo;0Ap>gQf?BIJ~gc2UzX-@065GA(IXp zD%Jo(qQ-e~lyL%-7||+efq?Re<)dW7N6WJa&E5zkW$KBaN`^FHcK|EN!aRVuT1qLp zS;oY;KH)>cY?n0vha~TTkb-#Ufg6421d+z{^Gu08MaIG($={|Pp-Qn@U(k95%~AB#aih+sUeiP^nQ4>rD6-c@BnhCaZ=*T%lY!#T&P&Qr=S4 z6MCHfv)T($z?o|8vLm7{yxY|bE94HT(trJiGmJ_Zl%4JAWYMIC^e!zk%lO;w2(Rj3 zl;(K(SuAYYY(wGV(E8lckqCeDNvA1;KyfX;gOf6WXImqTI(Mk_+LFGjVZ3*i+~Q@j ztZAbKifYw-@UZk6317f+5c}CNwOw&;)z2lF@!Lrn#8;b>(tFIj%xEETGB;K4Lha2r z<*<|uZeclKbk#67SpY%(yni zMmHD8&=~lTavDoX0H87tf$t}bzXkKFX)2kXdE1sqdp0IH_NyoxR8>KGPpV%Seqp*q zRJ?Yj*BA(PVohXqy<(qlxHVv!cY(@6W^lWp2Qz|oxnSGHNc7DH_@c%UNSIOxUzci8X&89h>GyK;N0zMPL@V{kf`I~fRT3dUn ztV!i7bFy;3XJE<6d#?RRR?2Tcg59gL)<_adC=>|j@`RmTAy6$O;_z%)^BNyIa*t{5 zKt77fOOxF1jc$K+QtB%HxVK|b;J$5cog&}8s<)$}GYS)qOjz)_0j8)WJ0UP6Ap<$E zQ-)-Ar{XUL)vag|a2!?)d{^bTLB2vHM$ARZvR2QPB#yIP5CAWZI+{DmGZH|_`fB!X zlKTRHqvn}EMI+kzSeO+nLQ9NW`yQ;g&!UPMd44A>d>|R<;w`M*?4Oiy*UDI_C-CY{CN3^A!{FP+OaaF>91G?FGzz9?)TTQseEGkq2wltNz2DIs79#1_ zra^HDKd^8EVFy$&?*qw4dfWqY9&>vGdrrA z#p?3NEiJ%8BB85*rH;*MqGmF&q_igu%Sa3$;-uujq;cCr7bjhEIVO_QZPo*B>7oRv zV|1!(YQGvssz(v-ZdhIn=QcV~clI0jHT^qHE4}_Pg>DNy|0Wp_yI8kq%*d5_tx$09 zhc+%2?S5Q3o$pOLCEkcwg3G8vI#8Gp9A$7-Ba2h!nt1lHJsJNAFWIsW(oBjc@%v99 z&j8qAmL+u%uBft^T#p648|tfpQ4N~PE@dnueNKU~h2t8ens!U8mVCRdXFM58)p{Y9 ze%zJB4gg~|Jqj-(&Pn_^kOvnqlMIrI?$+R7#BbdsK+gq^dP}oGn0cf~fN@1=P$CJjukg-LA|_(PsDA9PM; z006mcM={W$tx1g#5*0CwHY*-1)8`5?njeYt&ZYZGhZ$6X+RXfT7#*QhwArpD=P25- zdHplWzHUwgwwqUP@vM2-IH^gjkC}#n^3%*%{2X$7R7> zx#i3EJvY_F(X~y!DFdkkfXl_VX!-8#R_YqDDa} zl%@39K|gyQvMPnqt4RTXQF5w4;O?Ujfg!7Y2OFAR;$p^Ov9uZ1x!cE{&1+*_^NU+4 zk9vroUzXkD_m+c7LIJ_Ax;QJ3*IrHk8FJI7Pvjr`<+5`-1`=3jQxYif@L82R7oX5( zqAv>o02D z&gs{%l-QO|ZoA>WJ*eWO_ifr}TOJ9EqzR0p*jU69=0(r#Z-6$PJZqB&rh}$q}+>YicBkwdZk!l^F>dU zl!1=zFF$NJo(CY%y~ncet!uRXg};?|9VgUSl{TH+e$P%j z|9#Wpg+%3KeXhDL+osxP)xA-fa%3|^PYxoEAAly81hGSE!`MMX$^O6$55LCnPobIs z*d1uA4;-GTOc}9=3D6XUy8~Q9sEjR2aNHV(oS@eo##r)DgpK5aaxLKZV<5FY?zSTT zypge(3vnZ~-94%+%%609j_m{mGQj&*s2yBWm+ryUJ6yD6R^_{g$9vl^!z0@{s6k$A z9R%a8{?{Kqg9>h`mTj*f7$1PCJW-c&fr3U)A1eAS%p-NGb4xR!CpS%pwO7O8(~Z$1 zdeh(F@v)we_s3AriU?10MF19KyL${!g$N5P&~gY4qvZXW9?x3iS}=t#xv6n0dq`!a zZO5p1ZWPv`S=Mw^%UHw$@iOmJ4WC;cWZ=Z?k@boO*6e*^{i$5aFFc54^Re(`l8)xN zhYkP>q06rVh=)Qw7Q~!O4a9k{D|yV_`RLn(b^6WXL)^50JhMQOFZ1<&zI+R_>3RF9 z@@}@P6B@A`o6e6LqV0MJq~o9*Us+rfE4$gD8KI?~a)0OZ2f!#}JO63-;4f517mfki zpbA_~xA}x7rP(Nn#3f5!6m#jup)?iHSJn7OztY~DYjXD{`$M8BpxG2^g+QuI8*XTdwg22F)5x;`fXfJ?woXZ_S@GrS4jFXD zE0};&5x^uj9|9GZ*G-|l9(FvKXPia3H&eIL3{rNrYw;QSJx#m_Io6Us|E7Q^Yc)9G zt&*$Gx~&}38WIK|ep>?oP_GHl2>fFa;)3woiVG4f)|K!;w1_vuh&2GrQCw;hEWaUA z)3Pt7RHbt+O!~(I5{#ctWnOw~ir&wrrXZosWcvNCYJZkrlV?>O|6u*?^_FvAF-7dUOPbZR8!pv4`UZL5Q%6ARh^V~A?f5-nRv>yPQ z$2ND0j7y=6(CI4@q!U-^E~H3!4r4)T4F#vrN1(8eJw&~KpRnZOm3#hWf*dT$eqDBa zQmC;tw@yWoDwFBSZ-khESZk{;?&@nHs;~BIs3JV5EU_^b%auASW6xgFcOu<#W~~v- zt^I8iyUDMR8Z5{5U=SjnUpmWyd`&0D|9ua|>7*E_` zH?}DbPfNTHDKK6h#GpCxx?~=IG6`moY0qhjaJq`5L%rS+7`2dUn?`Bf5)x$W7tf<@ z{B^Bmz?k-7M$--;UiS*GB4V4Fc4%_Vf!C<|?lnLV>&Fa*G4)QkeK*_K4=-jS5_Fjn z>4E>=iOn2373MZ>8fV zC4W!5+btfmKhXGi$9O73gzk{micMejM|_S<)pC~g#^ruGkUQu};5UC^-R_-5%grs+ z{8^KAk;4p7C^=0xsB0QrvFF8MG?Yd+wZw@HAW-Q?TZ$PJh8MGhkMv%?hY7Jmgb6@| z<;;Us(Ekbh8svr`YJ`l%v9UBtYy!)25RCK)tFo>hL5yRBf)6$T?zW743{n;N0r$-$Bp$-hG8uwx&pO^sYsHOh!qjm`sGFIn{JGgNN%5;BKE#} zA|I~HaKY4^siSjWRxf+WU)PxRTB)G|%agaCurypBj#MOBtqgx}bDUQ7l|TJi`n2@% zHoxk3@giPCc&=+g%NJn0n--@(bov&PBBEX2etWVv$BBe9bu?+{9uq{;M8_);{7)eO zT!(>@qV*1}#e~gyc@BW&JX5A4Jpfm~nc;y8N@|^+00-RK8`L5r;=rZknN8qed-e_H zpeE(=E|wAP>Tg-1A{)8L4uW>k#w&IM^KM>OA+cb=G z6(dh96schn+q%!Sc_z)CJ)AD6E(tO$7VvJhRs0!VRZeVkrl}pY2fu(e}JW0{1fMSt~s0#2?Wf!{G+(m~kjC#~pz*mh$8 z!lkyso5>Dh71|fJNnrp6#j=4&3jhWq{L(Wo0TBkxN&2Mf($f|P0H1=_$~{kE7gZ8E z>tRT3KJ8ziTD(Bt3bI@I`C%O<6M1;MF?U?krhj~h%--u{gtvtjd85%YwmqgK-eS-T zP3N<=noMS_KdSnvP+OVj7nz0n%`KUgAu{o&EmFs``{!vM=)$s<`uzRA>NokaZu|G^ zcwS@3ajup3^7nhlTh`Tm?xlP9&T#%A}#(hK$88QjLEBqaSp)qbvVyAWT8#rS==MdYaHSEJC44U#M z7jf|8Htqj}4G?z2qZ7GIx7^v#0OEy=p`zKollw?T7C537>P&5_W|T=Q@Mcw!VTOu6SW(J-f-OI)p-U zF@JX?)iC}5J!-^V0$Ty_xKd$4%TSvr+B#n#-xyr z!+#bpdAw5{kAD=)nw-l0gJ1i{ds`RVk2#B__pnuIX!*(Nzg$j^wjo9ouR%@=0*oWq zps7ABTLBKWmYGy0;)4&2kI4v*;D; z)gp(q_`P5I-V8o<0)GY-$B5c$h?^JV*j8F?m4zl1?V&DOoZy=T7F8`U`%*EqnS@wy z`O>R0-VTXxt#t&wG$4yhc8^a(axoB>!?`Y-<^A1Xwj$OpK9wxJ^?b)qZh0>JjLBKx zu`5|g0IG@x*0=zp>zpk=rUG~@Z9HT5ELxU_u0Do{x|GP_MzSY-!fFnrYo;;&H_KrH zU~k3r9}k$h^`o;OCZVi~`pbIfM9MIX=ym^$^<^PH-GfjB`khfS{YEzmR)$C0A3^xP z-|MtOtd5b3{h=o`TN_v>RTfRDls#J^HDReU@aqj4fKIobKUIzkBy?*V_Nlh2|vs`-=q>Nnpc}<2n$Xr%L%&E3aZ;_MTY_HA|t_f`?FQgtKs5!|( zn`Pj#2mnfWdi;d4c#u&sa@6LQ%8PY19DH=2)Vf$tADOvHo6vX(IHl02XKep7lHdox z=?X4A(+e3(npZ=a0xr=3P^N%z@vIcd+1)MjT8wl2RVSmnbKy$lC{@ke#q-@04!wAN z4G3pZLc(xgvxd4Fc+B0RH7CBG2OMsQLHAL=%Vmb64^l>>2Xz4CMqQ@b+RA=V&l<0| zd{jC>D4YA?$}CDvKcCc?MEwvEuU7wvT-2HU)?-I$Jq3T&H#EX9{p<9QeEYSsUClgy z{$cqDqKe$%-Znf+o!A$zC}H6IEr!4xjPRKiIbofOhEq|z$k-S8JijktTufR?SU)B8 z5QlbDOGP+JqVJ>+Qbhutfu*r@6Ugk4p&Y*Y;?h69&1Yx z)TtaF_@KCSF_nH@P(Q#YIR&%cyU%nHIj4{0>c-5I=vv_Fu>**6MNs}8aL8$+}( zQ1}oSN`2UqlmFr%4D^fiYPYIEtH+igu4(y$bYi{<>}#(d9;}zNSoRuba2Lt6&vMCb z>9U+*pqrrdBLsd27FO_9kE~v`m3qQ}%XCJI8!8hT5*jo8)t9G@vR*u)wbb=Yo^{)c z_#j2defyJ#gHL-E4^M3Ow(^3cBeY+s=)3l<@npiTSpDM3n9&1x$Cfu!p*M*(*fc_kH?1zpJAN8g9x*&gSh{t9(PEtUP7n)tJ zx}1=g4ftEx+On(7g(9B^V{9sD$Y5!01(4Dt_W>XNrcf%vx%7vRBifwR9lNM8F%lxu zmW8)z!cHWGIy{~~VJV^$9BD=Zhz|!y}nj(}A z=u3ovk93W-`=SUk@e&6u&dGB1-Nq5Vk3sy%TKdR5s`#EObzEZnByx(5_dlzTSO9DS z>FOym&Y&_qi2;=Q5M9w{R9F5pT0npubRzRa&5kV6+)^)*Dp&&cs)GAqnB>N(!l7SaikQ6_g5!$ zMR9Op?9cEd4?TH_0_?3Eoy#Cz}f;PrMSUG6DW;fz@UJX>c=Q_E{BvZ|m z{jPke9wd~=b2xuzq}R2`(!twwvQ7!#1spVfLt6dFiDL!+Arw6tUJiZbf8B*a!HtJ+ zcrWX-izMY*m29*{lD~MC)P)y6i%s%k5#lV@%eYU3gIgO|rU|);w5)np3BRr+U$Vq2 zM#G6Nxr@O38CmR?D&0Z}B`S|H9>?ugS@(wPJBw^e%~Xc2=iAZFk3WW$&!G``T*s23 z35BjVtJfu;FBUrBQ&xKqtyYwRw)Hd+lR1tYvsR92Km`HzhZG;$=x7s;%lv<1$N&JF z#Hwra8+TAKv`Yj^PKo?GWl`Qxs>%U>+I<&_#jRH~Y9{hOj?OYH%C3vT4<(KCOG^yh z9fEXsmvncxbayw>-8FPccXx<%gCZdy%r}0&=ijVrpYxo(*S=RInl>k=+J%iyRe;ur zh3K#;p3yV!dBNTnmzLoh%!w+bNFF@nS1y(7`UZ>pj)*i6wRpJpTQPtjB7pq#fMPC` zbs&yjVOq0pU4r%j6OBcT1VliSf{a7J0gJWzOlZ+1<2qfCZgC-Z?SaQz_K*M;t^kj$ zpg7|2WEqeHelX+b@L^0p%8|(5H~PQ??O`@|@GnbK4(`cSSSd*dW2?H5=ns0z{o3O% z629_^@x@5RQ|q_V|7pED+>5dE&TFiknLLa#;*$*zmDih&URH~w0he1WevaA%lXZw} z@gRIVsfis~Qk3#oL?vq#gP3p4Z^siGnk8c-IIFpv=!)m$55EI60)K2Wi}tg+~%!&irT`4-#_Ih`VVqYTtc#xkO= z0sx$pW5)d&1BW>eWgxII?i-K~}g%CjMiAaCDfjs27SHSkwXTEqh6 z?y32h1PG>~Tqehk6P=NP`RSfO!4@5%jxFv6FFFJSNk92=ceBg+D4z0c*PSG&A$pc{ zmMwM*QcJwEm|WtF7X2njAGxK!CgGaDN%a|Vnn89h8&7qq>@!#O1<^w(iFYBPO%`p} zFfU7AvP7+0m^YLIgr+Qmf=~%hz=S9x=_V=72J*bqzD)73yc-u)3ABjvb=zQ+`trD!aajL1SLG6+ zM~Eck?A~;PQQ8ytN91Sk!5Xqt{11sHa8!-2?(E*P4UT1U<&v$Z00NDcwG%j~bk-d- z!lAQ|0mD=|t&$3xBuIyu3?CBLPE2k1qZ!sT$ReBW=M2g)eYtD%_bwxSrWb#_fR}@XI=A*3Q`HuZz`S%k#8fl)be=FgzAnsh>XeDkTOU%?l8j^u#c=g)>~_Rfs$&j$DtSui ztu=fK%QBrD+c-qEQ(_Q;Hm^hh6eOffkO)#lbkbh4V-i9nlun@_N3~(AfxRg{6y;uG z{;2`d|H`W^bx(}4;ke~wClSUpbou=4BeIAr@)G@YKnfg`JmiwBuwtfOn8nEY_)no$ zXm6WM%T5NzTB@k4Kq!I(EpJV}KC4OO8sUm7sdO|U_V81*W2SFyIFea{qTd3vQxh(Pdm5 z3p44w2QA3xHQPq3&$I0Q_3`v9irwh(bsjPZ*EBM=!06yhV1D@ZQT@^u!a47a!&`r^ z2BXl+{CyY({@Gi)v|TyvBDQ4dc3!u8h3j-ktKeM!bNYe3NIQjlR}Ci>JnWdkq|RqS z|%U7E6n5J_q_0^?L(r#AFXSK4hMBBA^Omt#nLi(PHO?(_1TZTo-0|2H%) zLVL0TdN#+n3ev|Y4r~^-sOu|=P^ypU2j;WCnNjPwIwkLuMfaV+^m?eh*~IC6$3ZAt z7pzr)=rsAKNsoE#_!yYy{R7&Ari)Xh4Uf+w|j4rJ%q53VGbw{`pw>b4mTx~AT$7xxlz5+`znbfTF zLH=oX)*szI#b>EHt!<0J}vzIx9($75R^auHIZYGdK8)vXz36vLRU!m zY%{%uj#!kPo_66`D;aZ>eaOqPK-AR+i7a@)vOZb#w7NIIUfW$T=$ESYk9VrCt;);J z<=5v=C()k(g@sV*b)lc%EdFHxQk;(K#a0+5+_apwWcY(bXVD04wXWq(6PsiV@^$@B zJT#Q38165!A(kB|+o$X!c4NCDwmV$^RSy2G{sVc7?`yRxF_=sTV@o++=1Z(e|EnQr z>Vqz~nq4jZPc=qce>RIKv>i9ax~!XE2Ph!!H?p&TD%isco*VUpgGf#5i^HJ^COG|L z=n~Q-zZ8c*$hp^QQET#Bs1$YBl~vV|&dnAc*M=@$+xU51Z~6z@{-q4{{wQvcm+Sb% zg7%f|>S?t{uX2t5hu41pw%>%zJt4hFjP3O(Mjw7Sp1*cmuLC%@DH=P*nayO**@N+1 z9sX`Y!q(hW5d;Qp^Nn#XzYjQPp-94e5Sb<%$MLhr7*P zD~uIRrv8&5Q6*I-=b-%|>MmPc4XH?TgF^sTKG}p?;*SeYQ}$^qwKMC)1h1n(r8xrA zU3-n#S7J*Au`Yx<)vUm+vv<40DEqpPR)zjpDXUknS7#2No~Ni$QvN9f zHP)kkUb>LN88DEa^cNiSR`|T8SO>Zi4P~x!|BW}VUQ%Zm-zdG!U%qGI1`6vmx^Hg< zfD5>J-f$Fbx%#Y)zIcty3R!+7o(ciU!fY8q)NKDhwDx#Yfnij`VJsa{7XvvJ;z~5$ zimNpmb+T2ZPAuW7iejN|(^P_r_nMYl_1xreN{L&nSBFnv*ZlV`m2K57TlQBGF( zPZ-o$N`3Bk;{7}2sS!)WMC?1@buGsLyM4a`jba3(Oh|}pF+$>=1W2WIqdU|xzOg3s z3lqkFb2G@f>WacMY>N6q&1INs~L_g4mx3M z>QZ9}h7vtuBGr7#*i;2zZh14eqt7vjj!=X2C)iCxoEs^VD%}I6%R=Sqfz&yQauD8ot zaxzd^xxw6{kW($Wg458j)-);;p^WipZPX-r@Syp!VWtpyQdSS2U&i??Q)rFY5l@?T z#6143dXDG5FTpap4fpgMB>f>b#(ml8kHnSf)0zw9dur7RU2;Rf?4s@l5A&nv%hus9 zf}C=`L8?{KJ_q#V^u6?cX8>ht(Q=mgG}O?lYGc-1Pf?{%qyN7J6ds=U6NBdok~pp` zhTx~_M9=B-3;e5ww@TLf;NfMMp6cgQtrC6O`-MO!IS;uKwfOGxaKjkWkm72rJdi6fDOOy*<;+7P z@MTNBnXG^qikD-? z=$iAkVk;;zfF!`MzsfPk1dC7*1ruKAT+2f&fdtdI4}&C`s)#i6cE!apk*ZJKU6UuY+7$YVP4F}xA~Cm+=*lkWc@QV zt^x>ayo)c{Tmw8IM4bpU?{MZ1q-M_!zR{%6ABDwRGj*ci``UiP#*$?+$494(q0(gG zWJp6B(~QrpuJ+K>HXc)4s>K8NOQY%J5{>|CSXfsgHWQK@v21I~C@FE|FgRFfl%2~g zGXsVImZWh=@sW6ukGr@=I|rl1qJ$iCNKGi(sP2lIy{x%(_LlZ|^O--N z)pO#TkIF2rtQ4sA_V&5d)ssij$x6to-;gcAzJ_kz_#k z9u0Q_nD}8ot%<-iJRmU58R9+&5JMv~E!ce2#@>ODhSB;C| zPK@U2)E4gh?J8(!rRDQ&ZW0WHzoA(0m?#o(VlQ@i^U}A|@iplr+FFqpM2w-wS1)Sn zej&vB+oAH5>G!tfwB3>_Jg!JIo*;X!P6PEwZZKiB#;^>fms?MmH`>EU-#+XV{yXF< zqTtrF)jrk|i|`hq`XihnCe0WKva&ge?Ec5p8iW!Na5?p&a*^xU|Mq4Uxb_r>KAyaO z&f-+HSJd(B9{Bg`xgG!uLxewlG5e-Rd6$mjItHpcPN64#Hx4s>&Ao$S_D6k<3fT5zG&K3akKeo=N^a>B<(tT1bC8V_`mK?+^5y7 z$E}+?#HJNJd-=S_k6pDnY-)m|-TGvZ+Ahc}WQrsS($VFLlD+u!qxBMVm~!sf6v>fG zk*|QvpAQ*D0(sCaMP2qQw7n5u>}+0sY#yC8Nu-KDn!}L`;=sL-f6J>(d%^(piKQH&f~7 z;eTb&pAH~=GY8Nu!cHrv?ZcLXhec*qkTNJAbti?H9rn(|pD=`PPhs=tr{xA(RCgRK z$9nJEw!1@CF!Ta)+yD5He15A-_s`9xLXleYy-MoziT)B`Jz=LTf>7(FD39zJzJ4EB zH_di_TTQ3+EzrRtz)SeU!>{Q{MbmQjZkxC4j1T3Cu71ZhXpg|(;*v*L)VqP7sC3AF&ND>)`+1)OzAWW@BXry5awm;`k3Uu$ zjeu%u^`GiYmk4%w0ww^zPpL53h@`DSMTEq!60*U_8`k5*bSOoR1Q(-9(d7Hzf5e%n zPL!7nR_TMEG~!cdbV>y3UulT?t84N(1hlURPi3fA(@J@Z%n+{^`NN1dSM@5N(@#$R zDU=1k`)DgqS(=-Q)95J(QpI3^aU_+FU_{Q|F>>*samd$Gk+I!XVJqNqDM@^W`9N}C zZ%RzkrUuI_aFD_!gN#UT$?%+2DA2WUF@Px!sxz)7;X?nQlb6&a6(mopBa@oEW>giw zN`}4j>FraJgEfitL~9(WFxkNT@ux#=azwV?ou!QspT_R+H><6 za-qCT`0!-F1=e3u%z9=u;^*Lm0*j1p8Lupnq?C1_FhqDQ;9X^5b|Dc0A|=P?QeO$` zYCPc?c3arJfm@s(2It?(kP~OU!bGH9t(!~e1%0pD7LyKuEN22PsA&RZc+Ux0 zx!+m9_@LnsFknhD?vqF#zzkvPj9t|gf~|1*nh}YWT(xf>k=YGd%P`Gj`=aA6!o3)U zGyM@@^gA6NaZ`%x9KR7-B;$<~H2n(}WAyd3qWKnz!~gIraBCYnlO+(7&85* zP%!`({7L;nL1bP&q}o9!R0drVPWL2jMf4+~&D{gqdMY>N;QS8uIQgh%PP;e}dE#$Y z)&O0ciyG{~0&fyRw#Dq9q}Qm$e_Qek`=M)RmPhD3c@7hl)F38MD;zmczDc6Q6iQ}F zOyPY?9qO_D+iuP6hUI;jLk152R-a!9S*f)X0ornSB*3zaP{S% zLghiQ-E{P;$U~;}f>2j#|`UVwQ%2+G}^zOfrjW1S#Vf%WcX8LkC4OvOS%er>b zPg}V^2T#eh^$@}MO-z_D^QZq6z{N6U8VcCtvXm{L=(jcG&2l$#LBAo)~~KP)NU zU7OO84sWBVO4za`jT)}J4%EW%#V@^Fks!;ok&r&7)fi? zPF#r;Q3n!6-NM3eqTf37NAux<-gO~NH=l~XW=CokS0XZi}a@cjnJyY>39G1FNoM-R4Rj% zY42*tC*4=Q9a=9pL5RWN1H|{3xXJWGZs7rDs`$@~{s@8t;r=l}{^!?|o_6i09`?F= zw|@%t0kFp`8V(i!po;M9P!R=?_-AW(<^k9XEVaU%Y_Kg#Ett)hvR@yYmzx86`tF6H zcS)vqG*%v`f}r>?&F>@f#_>8;@9C!IHhjLm&0)S<3cnxT0!7G`-wlk|lBp#fUgUH&h)vC1E=|zjWA(MDZW1(~?v6eT<43 z<2!SZ znsx9xE5sor;usj`BXH~#HqZs@7Pa#f=CVZhTiiaIfp)%I&0;dmj@6o`lo_u@`XrC( zZ^z>@>=tIVMKo-o+q|`HmD|i*O#9dCEiQ9e4Gp%AxrSL|j7|<;Y*OH#29hS-u$|X) z|0$#gAmAHqI0=!zlYXaPcT51pcM_Y`qGLs4<1*jPkZ)oTXuj;;UUBpZZj4@fZFLMS zA<`cUU*|jYzZSGy`$2A?ytmDzw9~G_5cqML(b|GzSJ^uuv9D{&_vFB5MaS9^h)6l( zGe5qYHs1l_p+Op6T7UQCWkswzHl0e*)L_|>jE(WAs5B*n6~bMh7*|n}DkiB5Hpxwi zy!F|Nsz^9re`4sGm9>(OxJm20d6L!PZMW$J9}j1UAdIMRoBJ_prdYZ zg)IP2HN0jzwSUizC@}OtapD5FIcf57JvLy8-||0%X(2M}93T}o*i57MwV=WgD1N*LMM zZ02z_x%~W-UU`wN{jB+J2P54wzND{?POZC}ZYH06LZ&ruDg@w05s-0>CXWUB1mv5_g_u|~dTD$BkK`DZr`Kk4gAw(A z3dutQyp*8uIwlE;k;zxVLEE^z5lt}k^M#$z_AOrp5L6Gvt}a((Y)D7&GFmu)l(wcw zY7S11cD?lbPXw8y-s^N6C~9gVAnoza`e>@>T0sQ5X^H!&DEl6+NSmZoU_&*<{?S2g ziDbC;w^0rEkdZp~2f^PLSPqDi%<2(descKfA%&pWDw86t=AczlrsX6Ajkst_WNk*H zNVzqhsLmiuCK&BeFIF$Z{9asL5;h)8gF7($$FOX6fgTYB|o zTLY(-Em1EdSEEahO;a-|;ZGHFgu1^)K!d2!U0^3B42713hfjLsZX0xkSsaA$s{XFo z2T;wr{jM4n)hNj*CeosFrzj7c5hQ(A#=tlG)G(YXwsW^xHpOFPi$*MuwaPL1E4ZC!l|9ZTmM_%a zbVX5k*}>5Fd-7XVt>O2d=Jo#l-+#R})P3J95BMNmFR1t8_r(hL&-XqdPJIYpc%j&M{WzaizHg`PM_z93fxsI@9 z?lfc!m?Bs7sc>P;&V{1q9mu~$4regOPHfaLO^<8DDeEXcifOQa;6H{tCjJ!edr-N; zV0I$#rR8;}vV0?705GFZsVfPeof)2G6D z)&Ez|3Bk+ScbB*&joq=C{_k$TaukKYkIKE?Mw;K>zH~>|Y^tByHU0^V{ZM(B3Aujp zVRTM`gGoikz8SVfsxCLCa%b11K6;_l)oLaUy`4e9M8bHFl8gXgGLaGDA!BbCfB)90 z%js4+LO{nQ%q4PslX#I|gmCq+xIx*s1vf~p!z7asLU`miw=*+G8fYD5Mpd_VKON{{ z^x|ELFLa~oM@Gh7F~LB^sWBr6+X06xA_85`2i9?vv}4y)`7B&I)I&{3|NGIV?V1!h zP{5+jL++)Y{a#G@Z?fLj>qi{4_=JGOKlfiDMUonxwrz>fbx1L^gIk#OV5+xrKPild9=NqGno^Q$j;n#vgQ7F&tw+RFWd~xU*KhmAz6AzED z)TBFXY9iCyb=yHsDt^U!xeVdov7L7ExyPZRzn9D^(I;RKyr?$5)L|2nFPF|^2h3OW`4+t5qQ;KHnnHhUQQYT+X@S*@`2Xb+AbOQ(kcAEBCh@X4I**? zsT>6>3>Gu&zr}R)w9kt_$0~E0lgvs}bxr)7Q<^;0BzeCfc~)6@;3qW6*T!D;{{B+D z@?v)5q_GxP+{Q@v|Xhe$cf*DXxh`} zt&Ix+9IN$k`3K#hp$WRV0V9PpieEvw|INx$7cY*|t_40`fECyi1il|kQO=dRLN29x9BvVqepSr5M1~I6msQW?5 z)BhC034%)&(R>vg0A$N;cPi3=#CuMo&hQ{C>G+yt>6>gs?N&4wr^`k*(byg zJy*Mszofn3){+`)1{;#S2Dx=Z&dz$Z)0AVIUkrgSc%~9uWFShOLLIS_G?XB#qALnD zFdD`##(k-|>lPz)PM5xypcK1L(fDypCYE7=Mz%zQrdoAxp}3L>7n@x-eBBQ|&Q({6=a$crJnhmlT!h|2Xw2#e1vRRpN%>sq%cAGc1cuBL{I__vF0Q{e z*OYUZwf6TZYqDi!KWg^x^WE_(kDMs(6E-DgCH#5IHGn|y@{0EX2{fG&*xoL0k`-nI zvUdI2Zdq&*XvF|au=qI+QdFcqH%%Q5KZBQH3b~%-(flVEU%?M6Op8t5afKYJyO&OW ztyA&N+5S~JGH^6e6Rk{3!Pcb$$8?q^?&ZF$MEb?tJWW;Ac>k6f0N@p6$dH<R+1*~l0Ic`u*TRi#u&LJ76`%{)ig$*FqWYk53bcO00t?XS~eY zlCkEdH#L-*D|!sH6p=I-&h*i*y64*=+nro?rO+E|F` z&++=$=8_sFDD)WmBrtsy_?XB6mP5m6RDXY?xdxAV32MA-yhZv1@)?F{Sy^RStQMmv z=&>-STvEhbTGydWaVLx!WhpoLDLeBSJKHVhV$KNL3Z*mrIFx+90PGFfFjhnM>pn3E zKUdX%`tR5C8m}PH)nh_(N_(r=K;fcd$Ks7`=c5h5y*5{q{m`&nl?2aB5s-|Fn#|;% z-o??w)ykc@k(s9ZWOv)$Zhm7QCBq(0Mdw={vJsyxH%o7U@=mu= zt#)MaR&NBep4w%(SK7T|S#ra%OA1PA#%Z7p%k{;JE0=)(b^h~P;}8m|zHY89=3-mM zzZ${{f`e6BKRaVsmO6r3eFp90fE|lg=siT4$<)>u1bcj$8DKi+?opC!vw@c%@{4TC zj=&esik<#?^f@7l7n7 zeCl2qQR!G5@u!D^BX!?!Hg6migFmOWX~V4j+1j=}>IdT|ki@P*v>(#*qRt>S~+B^h_Q+s6ZIzy8L`ChHpdEB`lm4NcQ&K|yQjNQj@ z-D@F3;{89iFUOgQ4KevFCyqQ%IfnsjkDnDe=AM+X5XD61HCJ=NVG?=>ssAzEljZNJ zb16RA_d^`wQh*Zw96fqmyuzLoIkdeoi%mTqn%+%>dXUH;2_}{rEISfB_PH6Isl9|N z?XvxYbnUl(NY2AKO(#jYJnC#;`gA!ZqM4V5o(LQ>M~#d(pwGGJ3RE zYg)k9K2viQ*G-={V>r8 zkOKfkG^Y`s*;k(herbYMn{V|OQ^h&@O(x`ONQE8l!!ja~wj~HMEvbs!IaGoD587+A2ku^KZNA}OLdj*)syg$s z#qeX=CT*mc;P~^Fn9tpr70Aq*X+2;0oWEMFO^b-4z+wU-J&Z&cRHBX!-l8M@;@Pp? zwjqN^_&-H0(seVR@}|PN3gV2d_^k$|YRazjV1^LBN1;B${Rkp|Umle086}H@Cy4|k z6T$>xYA%A3K}j-{`I}O~iER7gEW2C5hibN8UjpC}zLU}Q7kd}2Ri(t#5sNhhI2_Si= z4@Sz9R}$%5D1VxO4U$DDR77b1`sOzx>&wUwem!cD<*7I9%dbkTfuM9#9BE&rRM7rY zh%y*<3(8%h`6wcP+#SzG84`orZgZJczrdeT2OWYF!7Nk!Cr~%}S!Si#RjTvX@H!*HB_+HLhi4> zv;Se3ppR8|;^DRvi>n_Ze)wF&BCN1-;|8S|&fpX3O9dNCQlZ-P@UXhSr+q zm9LHoyo;H?+-wyAfm`DjolpTA4kGjj*j95ft%RX;R>qjC*5D{yaIi*hw~jq&O!*5D zqFSzoDsJj$3s$Mpg_9-+fRQ>o+FM*&lUhl=xEvH04dR;tgJ3LMimHND*P%W z!h*Bpb`Fckk@Lk8;az$I`9!SuS*PP2hBO)1Itc}Vkkf|0oSqj_b0s$M73P=H4mrDT zyKnucmTSXZIARdl7)DO{kFRD3M0=GJK+YblocS0DH!I4Zat{oAA?HACTcuWToFuA5JO4y5vFKp_?JzFz=8D7 zEbQ6tXXqe@>he^2$NWFIz40?`tuxJsNbR=|O|S83xat)9VNr~>t=-&zHi<1*RhvLMHjU2j-^{Mt0lO>V!^xwhsA9=rxEAsXHI>{e9PG`Iw**gAgQEj zjboge&c`A&2X$mQm4BQl2sDBe_x~)qqj5^_Gq_r^&t{{)y-|poaJ;$4buAl`lpc7%OWNu;uXdI_LNocv(hmJEXT#+J-*f)m(WR%P!;nGL^zOldCA*>wJ`MmP)M5p?7 zS+r8q%*|O}gjabDWV_yZh`xlc>-p%J-Xm17tm);#r>St|MHU$J8`h8K)=-jUJd4EZj4S8Fth0N;@*Etm1`7ri(27G;v z#wVrQLsbb=EWNM<6oymicmD(d2p@0jjJ5KAbQUz;1w58gGGi-l+@>WOs2^ErTRbi} zw6E4xI8A8$CBLWmG7csd4@dt#t-3wg>T~s<{uZM}+Bwiky$WUer-;xprCOK78_MfP zE~#_o=FPfwMyJ20u{-8;G2A>heJr5JfV(6}Vg3M7UI`qWY<%}$#<~4h1+ISz zxdYgXoKQm}ajEQRHAEkrN!!X5>}J2 z4%K63_2Hb=Lgr*O@f-nvI{}*G1KZh@PBP*k9=+%PQMGhO79Y^r{AMBl=TFCPf$M(? zCH*tj>z*Cpfs`gMn2k+sW5U{@3N>L#X4^pxjnyAn3I8rJjE$4xd7P72DDR%e(7vGh zej&0dujDULez}3z2j7lLBO-O)Y5lZdU@k3dmdl0@Nm)9Z&KR*$AmW|X}>`^VA6*0ETQZuH=_!Pxb8M&yNsq7hb(%S5pVyT%xVCB?W z`+5EAH74%|@~tEr%Md*$(oXi;4g(CWR2ug$a%D0$$mGk8QprGwLdvmB0jf+hZkqs! zGp-FIA`x!3xP9%FPZ*Pw>G0PZfBRl~@{&WY`m@(?kIRO?H10Yy3$V1BWAvBKfC2$} zQ5}uGGz8DqnO%h_2JNwDH6=rr(i&UAt0*3yGruhOltiTHDd-32E8&0n)3F*A!65<; zCE%{W&8ikhR|H0lCkUazP)b(q4x_w4Muz(i`CDQjw}sJnC_9ekC{>>VJ`J__pF))Y zY$_*o!3)b>wVdcih*AdSPrFG)X+<)1S}iyNso7CA3d@zOjnhZWNb`K*?-XE(@%eZjV}!0(;CR>&EVag92|~$nk9Uf0h~~T{#^qnnKUoX2lHjTRJnb)b@>%)P(u^jHTb#sqk%aC`IHc~1J4*%zW&3UOha zjwW@gK?4ZxoHYCY>~GmRxF9eq9der+^XJL>#U^etO3XW&$F#WY_dn*|@m;8E8-8d7_Md1GjyJPd3k2GgG9^?$MF_pF+a` z<(|RD*)fj0^tUYop$LXp+$m_bjY={uvP0uvLZUjB+O4nub&Cp>nd+N);KER}Gg${A zr<(_*bvd=T;u^)KM!Pd99TZHgX!vv|XPM{`Bq8G3w(e3^-I$@($$hb8H5YqJ2}I~& zp``a0mJ%*`pdd?cuCh={P}IXO>w^Bp@O~(by!eA^*eW=RuX;AC7BsZq8`jnvKOAUtW8Qf#Nv)ZtoL>3D)(PRo%RWlWSCh)dw%E6J z*<74?1nd+%Xe=$SX?m1CkzF*QxVg_f4dSsJllZCibR8NO93-&LVHo?BcooKfByM z09(YS168P0iG~KNORD~tN&dkL@FUU_3l48i9trb&uZi4OzE!IQfu*# z=Y#2oCo0sI3 zvn2bP4bAj2*lUm-p6I&>&gOk5Xc$50+RvY7-@+f_wY|&C2a2?TRb?`PTibsnbRLBL zDxhU^%tUTXqcMbV@jK7T=L`&6%%}+;P~vJ`bv} z7b9UlT$Wm}C7HX1VMe(@gJtP)#8yoQX{@ew*z)bCG>pkKI4` z>Fm&Js;(;VG^fSBU~RXdOsEagZCHs%jybvYeuHQ-DsMZv8JSv58!N+1urD0>opI3u zUcJySKB$WG*$K4+FiVgiuxj?l)!i43SG#~(HW>g zj9LFdEwj9pQ(#iRSeGARX|%S({v+M20bfqf%c8&Q)LWxN<1=n-$;BUC;Yhuft9MC^ z8Kg4Fv&$@}J!)qvgQUZ@m%FscI<1Q_KU~U)976zLM1!zIHb*9nVGNDuu+z!SiySoQX*OCryA2Zk>zn>xLjW8) z_sZD;6PtFqKDx1~XY9QPlwEd%70z7!_gDJQ2+L`44h~&iS!Iq1Q@xYQBZ;#bLkm}? z$??gb6ThMP*U>7<+p=9Cs6Xk|npf72(T;A42MO8wJVkM=B~BwvR8)M8t6K6Tfkf4vJ` z8|7{*CnHFzOT04(RTtBsR@4IkxJoDF4HQ!F_z1w5}t-y7WejS}8Hi?zC{685Bx;+$X zu>5quM6QqU+%IUAg$nKAon$oz>($kK`Hh$5uP4Xxbv3M8-Mnl2B3@XUe>jrq0*y-- z1DUcE45m>{R>i~Pu?7GYjpKLZ`gW5hp@Q?AVB&mp4786dErclW#mfRx)a9{cLrm>x z6}Nk4$h7ka+z?)O{D(Rd+S{CJ`iV zJdauy;wja0;%Z+GQwsFQqUR&GS9J;L=8!HcccmgReg9KEryjp^p=BP!N$vri`Do0d zGk_J4ma{DqslK*&W-83w2(5BLI!zUd8hXV#p8L>p+V9jKfT$H z3T$KRa2|UR!(~9^aXCs;=jaQ-k}#j+lyVWxBXW=!;xde24f|z`IqYMJuK&M=VBpHN zHGGa42YeW96OC=Zpe?Uxo@D)k31F^)5*jy`9=jCf(W96||l;6ZYu_JK4eH>cFZfFZb0(kJ0UKjB{mz zBN!iM7KfBdY_dP{`-oRr_s-C0XMbOC&wb zbZDRDIugh+9BZmC?G~sODBDTS7T9TF$jFhqzh14uS`q_*Vt7#DJ8~qXZ4!?DV$7)0 zWa1Bk#bne`XjGta5_u%&N;=WK;W9nl266JB0k`BY=+qk6;gO;+)s?Lo_E5qR!iVbF`klx|?)`N8g_Rw()cR+K^r_ZESvg?z zYHG*Ym0RYpf58W>;pPI}?!f)&r1m2(y1G;$W2(lZ<=NZO<^87bm!CsuFAu-}DKrPb z{WV>(5CUL5>}(S&DgomAbepFZshjL=Cyc!bR5NJcHAJ4g9V@i5&#|vMNG0fj}_GR-UFGg zES`K+yT|_O*;3e)B7smWV_bA~;7|B;|89DvVfVf`*MuT&BVW}4tAZp~FkY|~4TDrU zLym~bmG@4k1ls^C;=h4*66PC9t z|8B3B*}#VpKkop7&BC$E*RAASK5Y>mjH=^Y$Xi+Izwrr_^3oYSiin5~I{4e4d4O)L z+^cIQRA*Q{=cS6eD(w5twEprQ5U;a9A`K&ckcjK{9*PzAR^jl%~rR$$UA43ob z&9)&HL9i}Ic60xR59<~FCs~ToLD<*+Vc9==pEfwj6nNy0t9+aIbKAC`>S~1b?RW7S z|HslWHwPv3) z&)$2jdy!2>tG&(%6;J1S(Q!6`@+x^+A}A>l@))@LGt_IE615{ank17W80#@28Ax!H zF!CvJN!XSlq>&5B9D?X_GtE}}Kct}PSk#bs%orm+$I?62&J-j}hoA4oI+r-x!jcIH zbsD9y>HhMwk`)DBa63E9A#g2xQcM2>p1BOwXQF0nv#{G+)E6@9sp7tFWes-pT$;H2 z1|4t4SQvmeHxB2d^DZpFU_J-JsmioP=_zTyv?Wp!rTd!Q){EW0lq0IGFFp$z+}O zP-qj))Nd!a#d@Uoi;)pg3F$D@!}vu|a;rez!K+`Z$JQhQ|4{TlEGI?;;k?HMj;(Xs zBax_0LwIUt&93lAm-H1S>JYT(akQ|cC7sPJSC^_PTDyI@ljLXz>09zjBJi|7>h2Rb zai8UXpE~@@y|E#za9>ccWm0SmE#&`s{i~79T_9MTsR?pS%nDD~I6D3?Do}!yX%-U= zLU(>FHGBE){MSE5eCyS5Foo493P{OZ<&w>eT@=fCgrf_=&U&V<=-*+ARrS7~BCDec z9aSm@#ZfdQA1d;TSLr~!`2K`)I{)^Apq-{b<-=@^qz94kuyOSz zR6P=WN8ZG@>S0*#Yf72!+i0&m%Q?k_1o3=%`39`x_%WF`V);tJl*09iXH`yO~Omk^- z8vY7pzz(fKrMNAdw)?PxsKm{Ia$-FUW7XhnRQ)NYc1;w(oM}HF;>nStRaE1bkU{KJ zniY*`Ag1v1mtwAnewvK+K8lhV#iSC}D^H3^zv1UR&@Y9pa_l9&d(-Z%9xF`KY!kU{ z8W_+T38HA=dAT)swP4ASoH0R%#ZHMEXb}lvb~lid3#&2AS2!dOHHE-@T_6fcq5;s~ zIYDZ>*o7+lJ)~wK%*b3TIu(slzr*Y8A&K>+R<8C2dd?n>rgCB_ptY#jwOEoh{qaS? zyKaU1FOeq`{-taS^g@CtOx^^sXfaRT%h?Z?OLJ8d)3w^=>ND8ZWQyK_`pK!n3sRl% zSz#fjTe3(4aq0vEwcZ7gO47^Z_swWHv0iy5)i~Fu zvha%Af)sGUC)cMfWpL)w0{7$CxOQjFlPo{Lp}?kd&P&R-#T|#pGqx%4 z%n7b~y`^ry0x}$tSik>r(=I)nS2TIvy7)1)HKYXCMuX~od{!_*#hEMW$k(`|Ph0Kf z1u{lj8uu9yvzo=TCZ@5Yv10kyC=f!>+WC@Nq}xga8!0~*#(!7e#Y5S*v-!_HL_kVTnqGPdW*Q2q2poX&lBjm{AhcKt`5cjg4v&TnF&RyXgt+@V%sjn!pd z56pEz>Qg5Y`yuB#Fa7oPz@v&c+;*Gl7)yF%$U5V89TqwaO>8hBN#eqkDnPb}q5fgn zC`-B6&@3^7;(%YZyp0oC6+J_7bt6JtrAbpb^>-tlyh!v%op1erwmJj@5z&fMBz^T+ z4~w%lcXZ_f{}BUr_tO5qT{`QQ(BOWT3ZNeWbo$reUlnyc|w0+oJS{yXq6Fbd~?!a$G?$ zaQ~8m8Ggya$_G#l>mrYINyWzgfr6lIxF8C-R$9)Z$gMDu;~>$!GY`4F`^%KF#4(E| zyh*GwlTh|id96Q5Jk+70?dNsWA=Po5is%rn*6U!5< zV;>pflJgS#kyfpAZrDZW!{utSjDT2W1uBheT#Svu#}Ms3yXRJf(@j-6fPh*2xyc@!nx zoWDdFX;ouwLWTQ$l_PKdp+h-OlCV}FeM`X$UH}hv(K2f8#4UrtM&P$?+%}N~K--*J zh7f=jPA*D|8#9`FPBN#U+qR`4&mi3q|DL`S&b>S3tz}r*&WNt!k%PWxb!Ib@S`dlq z@*95bn<7?zp3&X8aKlsYR_x%N22`(6YTa!J5vM|R$F{hfeqw@M?5`}jBI|4{Ak{Ga zJrs-z!2+sGv8ogC>?Mzuzurb?r|^9I0t0T_dHYQul3%o=9XBa4iS7E-@_#F*N&s{g z$ASY2{eZ^)bH6aO9n!ZIjfz+`F-5%NZ?}j)@*}jLciw0!s(*dIcVaMUbw2M!;!#he z5c=_s}^Cf#D)=xSTJ^Wp-C8zMXZdBH6#^>PzxFU(l4(XAN&A>tL zC)T*-k45ujx^&Naji0n4$1< zzo^|Ke_oqFCV1fCE`G=7*$cYw_DT~x``#Nmr&g&Myv=E_GIpAhVDB7dx+$SEJK7(^ zsfW}J2}56uF%{LzN3*~E5Vb$~eCV)O^2tm3Rl<+6Lt@%=IUmMV8Ix z=40ql7<-nV;)ljp4vzDSt;<&nbe|oM6L*o9i^l>nO5&vCY9oHK@Rp?@DzP<=&NW<9 zqQsC33*_J}B1d#Ybj%zY8gW&J5S>#beuT-lpAVX$*pgxJaFAEs3j9TA!RK%Yq6`eK zuul_{`51SS1z^@`7pYhz+9;I`2IFAC2gwe!B$5MNKj{Gi~<@aK&9)4g~?j(y_HiwQt&d>iZ` z+n7ErC*vcArn3t=l(==&WJ!bRbxP4tzhU`KrKaa~c1EtaUUhJ`IGhw3yDes&D7Oq_ zF3IlN*~HsvuyG;@AXU5Q0p*gmcCwmQwoonyDeD}FI0JgnXyQDK4B_KAx>b~%`wN)E z8M)?vR$>ak-^>0a^jp2S$TlkO!N*6L#C%ntj)q<@dJZqFla3FUMp4#kQzmwQ|4*Sn z0CSv2+d+bfOaaDk#*wBtrnUpZwy_;V%c$nMjj9f!c|`}Hlxi?xDnm#8$Ha-R?#uIj&2}cgmN~te4NqS?efVoFR<*RdlRY3X18J zE-w^NRH)|T5$O*Y-wc)K?@eUpMTr=9trfH!?vJabYNjgcvBMLwGBN!KYXZ)u+6!v8 zS~d085s1;ePJa3_UN$y>r>&^4I88{~^a`6KlM z?pr>ZT)hYKoCI{-c!shnwP=$2pyk&CxvC}RM11x;EsL-@u}$Hgl0EG@ylq~clT#$u zV{7`i-*}|^t^gu?2BPHr5BS`lZs{ZcNX2T#r^z2kArMVgN z@};`JknQL*Nl2XAvw;F#fXWZfzS|4knVh3yfwINhXh(Y)o@VTgN3ueYUm3&&D-}|i zRW|O`T%=N4kz+EnzQ>CeC5LpYYs!W8txle$l;ixCyG>&H=p^fqhh3IBV^;A!$>T`-FC*B0p^H$OX|_1K4u-$;v47 zo2yj3aZW-wI8=v%;gzPo5{@5jZQZ|uHIUx0PfBv@c)^Fxic(>HiZmZM!F7t0RCqa`hZG5`TeD9S@ zO}w6QBN%{EI+`_n06k zd?5ztGUyxoz)P!WM^@LP72)T3E49|0q`JCbs)^_^)%>gz>#GP!)z7|^x!GLL-iVdU znLTw}RS2s(-DHWAsT730dEv%JEym;e5k*zZ;II46(>~)pAmiwh4JCo(S5V!T2=HzKxHh+p;azci!kDC2kg=z{2Vdl`)8V^#3N40rIhY#s4 zC0%CFaldvMF+c{bek>W;oc?Gt#UbIU%IxqHNCpHK>U3_VPG z9k&6mSRUJp+iCdqz3&$)`yCSTJPvTBqWN2yPfbMTTFl0m`gI9evS~cjt137=80BaD zJzQ((e!f#;OzWpZB8&Yki)X{?bMVphWUOv$P56Lq2KP*dIDW>DaDg*_d&p1lD2$UN zx=qGPB1ZkO1WU(0<;QwepgW2-xd1xX8c{sCiO(6(getB{&)56W> z*XNHUSRsf36c6WN_(PFou%p#D(C^q8BeJY?H$wcYwE8u)p2_<|oREKFR1balFR}g@ zfZ;b%Io=ieVQ7nZE*v6+;^ZX(siBFOJi4|}oFmJqE-L24HKCi0uefy&o8rc|)G8P` zfdOpA6cbaoWSDwU1nS1BA+SQ0`jWVqo(UdS>Txh|rxrB}(C#RaOm&>~K~7=J(+T#S z+(K_=RL9^taO~qDJ;Y8_=N_Mr-9KUf&7Sga_*C;-L_iSYpzJE-T4JSK9`EQ>OnvRs z_%0goHi7@Jva?J-4Fia>{c4QN9xE(t+?T{)>kJx`8-JixJB`z(mz{og+g4+berZPk zR2!N%rAB23yBuMBp_FoD>A|S(_2TgAocCeEV9nUC7?k&}>Un{8I|YbhOU{c83jPw9 z$n!^<46@@-t3utPdFw841EoogZ)!Uf5`rtasfU!1P-HFRttnYVBdEZ^p(vvAN)w1o zs{YO%{(@`tXNF`oCj(O}>?*^>9PRfNJV7m`HU%;+r!sn%4sh$;DNm2&5Zge=1d2VI zwAi7AEUFvXJp7}tPt29J*sUmHWwt{BzA75E=Ds-ol2G=O9`67q8JQ6%x&`?^ljJS{ z1H-L)ih|jw3HSVOkp%V0i(e}w2+<|uusz=u(7(G48U%_XnZDVTvZghBBD8!@r{2hb znMRs|Dn`b82hyHZxO+*PDjfF>k*F_oNL-rfj8(=nHk$IbX_&AssTXQMoK$G?&AHWY zi@?8p;$*k>{?;6!#g93p$LY|0$N}znw0YEf{8(BnENsjxV@zp3Qan=coGtgoyFmZ& ztpf~x^tkgOY)$uKN{2v?`+Qz9oNPRZS)TNz3dzx%v9O{dqUbc7Iq@SwUVj~|Rv50( z6#Pw2)ym4h{}~TflxgQv8f<4Fa&2K!#4dyyhjvZ;Gi&%!A$C}oJ|vnHQ|xcI;Lz4c z(&xVO%OWk#a{4a(p>{D&vm@K~Z41kV;#LhYB_dkw`o=o5YjJ-CD}GtAHqd}Fz{XL!i@aNl#dWz z6mZ31(5{IDOVRIs07`(ssUw*UUV&}2{=(L@Fd&i3Z0_{^YIiaA#ODMU zK0momg*aS8d;05_$5f+P{Gs=gW8;aR0E%6AJq&;jx-y)?h?9Y3+B^oMD={+4-o{gb*h9JwemS}(8I7LHtrAs%VGu@I zhttM|S@y#D`SJ6`8!h;4%S@&JcVV;2^s-~0<9(QztJ-S?WA$Dcwv{g}6{>_ziic*? zi2T03*9Bh0Oxw~%WLuD8`WiP*>rYu?ig&S`qLJ_fx&(Om3|xB%OPcPDQO_gHQ1de! zj5j)bG#>p-`H(p1v=<|@Ra{3F6j?*CaO*d_f=4xDUg{eds24W!G4h{6kmny1 zUDSvnb`^sb3?QH+jxz+Q)!P;g!e&+9UPX2O+KuHh&G~$aVZovL4d92$DK3GFq0Z#3JeR{i; zKjGl*R>F2(^}DlkJua`*cX^%1-^jHFM~pjPzidVQEh_0@+Pz=o@5Ad6nVv|8s|Z&V z_q&fS+XQ)69-Zj~5(dHw>r;AZXaTt=9pJf_?#KSe)v4&t-0N7c^Gv^Q>dc&YeMpli zcu>5o?epeTu-8Pye)DQO_lSH=p=}NP>7_T|T*|bvsg&fo20oE<*{!BkrFrZDT@A>u ziA0`Ni#G^h$gOUx4FcdTopJ{#xCo38LK)RDG?RVJI+{gj(+1i}6I=28oa!kVk*gwS zy|`ohKJ8=ezbxMPOAL}vPo4%rwGuP52}{j~^5QR<r<)<+Sz^6!v>vB=Lz^@OcNId5njM_;lw$s@wT{EEQIAKrxeJpi!wglzl)bXaR z;ethfK_RQtO}9>U;;g zFWQ^76I7O#>FmmuqZn2IG?#Zo!Y(AOFqUupger~o#!wYco8_{DrUyZ@q34MzdGwd< z+VNfg!trhovAJLqqO%5ut2-z67B^;_;lKvyZ zK$SZ0;?aGxWY1zv(cT>`xKhpQxyQNTaC5F|N-YXG6=3e7PJ#x213FRA@QB^tRK!i_ z*8Mw{m|iA<2(S9@wIbR(4`JCk^T`=sf1+H*r60=W^_^_U-o3ou^zBCKXZ*%*Te1v2 zJ82{KtM^kVJ)k9%)ptd4LE-nbJ1v!7A#1BopFM$vElrk%j6pk9;pbvlO8zZ0CIK+c z0!#kznxZ1)`mfZ-(6J-O8g-d}FwhCAZy^eO{eFm-aLA~Io7B~%{?2Ur(N^0hz@*=Q z>#MKwK!);m9?_$@;~VaESHFJM1EYe7asx=*4ob@9L4O?%+hHFnj-H>wsxq~$0^KbUmpgfhm))oSH8kEhgPwJ=PcwZ!>u$~tUC3k`IMuP3=3FLs=|>>!Hi zd~vV_r?j0#NOKmvZL&h9Kl*d^P4$Jnte6^GO5-p%Ha?jJCjh{OyZSrQ@Vd-*Auw(5k~~_c52xiFvQKiXA-yKu9P2 zKO>D6K1-h4i;)#eOZ$w@tV~X zrGdhYez@%CB6~?D(MBtb@!8L%QRkfff_?V3Ka*P+(ZfymV8L-?q`xP5yKpw{D;@$L z>{Qgrx}3Y$Ayz9T!tjcBQNrBFH+t`Ji3%`jDXP_YFtNlRtm+tVmkcDjx&Dho?}k{3 zxwRbR1oq^lCLs{Kh*-8Mi(0Y<420yG)*HlZhAICK?+W#6jMtV^o=J!vb*A6ki3kV1 zf2x?lyP))i@lv&VNBbO=9aWBET3egok;&l2aE#4I z>O!G-Md`^)zdgiK{9$fALJT}K`}FEmAN#iXauay}e1Ei+M`W;S#XoN(TP!--w&Gx6 zn~U<4T}p)kB@ro(Uk)t|2lE@CqjO(Y!o_i}ZpE+4qn3Ko0=;|$A_voI8;tLKZa8?a z5@J>83qF){+!pstzulPZ`TFzLq8y_eW*9j|p(A{h()_OHMrkeQ!Z==*o|=M86`f`w zu(XUn9#I;x!{g^{^3Y*@!r^)O1mUJOM01SNl%LoSfEFr*x53131l=a`AZRF_n5@8c zG63;P6*eH7aDq0bOg55*2q6R=11hW;{SZt4bh_DFKF7+k#!C{!ar$MVxgX?%atV&I zFJM2SR^H)}EmJS5IUydZGO;T`pfh6&pkDpK|L59P_mGC5(Q0Irz)mdQU-4fJEd@iD zL!b{wSR<-P>vR9yL-;EuwQO=2^y#ON5i2Gik6W;}lZBRY>9o6nXA}Ss7(tZ_lH*g> z>AR80dj!0Xt`}E#i+BeoN0J>*VQz4U2RFf3VcCVQZaC9462^P}O#a#!a!;5h+OC^z zfxRfZG9gfderrWPA%5gjzuJRdPEI#Vdode2IzR0ng^t? zFoF9Rk4$lY=B?9Qdvp6Pc5d>gO;T-sVV{w(!8LDXazi5xAAD2Bj{XqKwP!`l^0-;| z{15^ZmZr_uKm#CIA7zQ_FH#UeP$g<6Z-`#7E_5au%>36QpG=~Vq_1S9gm@&s(|+~f z!^6|ZBG_h1A(_RXJLB`CtEEC=;O78;Lg~=6s|O2|jT(6@JRdoZ|yf zRj}%~03NzdusVn9PtH#}ybI0(6lC1CL7ZI5-HX7$K?S~|a}FUO*9Qe{CX=N>-S4g@ z4D1gxt%I%58EAup=q+c6#o4WC-^Xc$f<=RKMkOU*&0)i_QbcAORXI-+WBnOoJZxHAO)IaBY-|F>;HB9Sw2yXEude0 z+WsoLp8(&4``g_;<5>j!=Cj(WrfcIBaV?vO_Hn1fs%4x$2Vuman|E+i3G5T!sUG(7OpS4x?(&k>`7}1&;2v@%?`aT?E0Q z^6I{z~;Y%-p?&wr8;X#i1oJ*#o#xv-xToP z7)PP-Wv}7Qal-m#z8)K?U{RxhN5|rGoI!!nvfH6#G1u0?HuyTyxTWrC-Ko$ytsRL@ z>2ir&l&n-tUW-ok-swFv4qMyzd*o&z=X|UhUS2`@2MW>pKWQSZUwAp1KejQdaS8W- z-L@cB@8ISjl510PtNu~o($i8tf2$k55IPM|(_9xuiB!QRbD6Bb@tZ63-Z`4-$nRbu z$i~Bb`@8A6jkpQC0IvaxUqPIV#1Nm6YaQqaz)pxUL z&pU}9u^7{6H^3+_ilSxiC2cF^4`uAVs`P~}*U7R=$|>-bU>bhll~Y2&(L^Rftft*z zx7%6WChsV*b`u}$#6@Bd{3aCu;OQ0APuy{QRPxJ=`Su#yLI$uAg z~ym7Isvq96bCRxFh< zVvnyUsL+V+s&2Vyet1p1Tn&YfekEf&4j<-ni!4){#CAJWKFpP5G;!^HjBEc_LstL{ zEC=Wmo{7x>Ucc8Y)bc$>u##dEO0Y74!#~7Y+jwd3vwk$!zJn!TnKLE|=$6GTj)Gje zbjQf7Gcoy=&&LDALc}b(s^x#3L`@v5sRlGlqWiSiWKQ{cbXy!5bRZC#S*)aJ*w)B^ zV!7uGE=w4HY`)|zp1g8?obdI-{Agn-t1tZPuChAxYG1_x4vO{5fNN_sz7}>hZyCYMvuqcdhgUAYn!DmnJujkqB{{+{>3<4A%qd9R zn#aeCY{tm;d8Rg>P{LL;Al3&cH4^*Q>v&i8)+#+c<*AZL?DR%q%1obRC`?2orKpeA zp>ZfKEHv@KL9$QJa&V|ZUGMM{UzxS8Z$bN-{`h;aehyRHsDZy0)kvWw| zo^Ae|R`6b0W$;#)NGi$A-6M0E@*}iuzmXU`qE((Za{XO?1<&_qyk?1j&!0fco59q? zibK@GT8NUt-iq@8ptNaV|DK7h8;^2Zj>JVzINppH0W-B&dM?oC@!UJu?rKQ!Q&o|PiLjU_f5BUVIvVIj zM4&EN2&c;?rQNPBiDkoegXiQij~n-3TDk^XNjuKXzjE8_5qkxOk&;{!IQz*i8G(<% zU}-<$FWVh~q-}21rf7$6^YTG*Tul_Vd!XNkjM3?M@FMTSBknIQpk+ubb%%4+Bk7Wj z%66z;7&mA9E`#-_y(2+@n!^N4B@GpyxTR8M$LJj> zc`+J|5VwY1C+8dPIkd-yJ>u=0qXYOQru#lt0Uh zZAGs$Vyr(8tVjDuB`hS(l<$6d^bAn-={{nuIjY{gUyximcd_pMxKwkh^iQF4C>U&^ zB?ov$Rb6EJO`*|t=^>ctknIzPtSA6u9H)vSw3`UNNE#>XUVBf?<{2b7&Rp$dsxDLMJVbwd1M;8%awyMT5VyGg<WimX$Q+E&v81;w(Qc=o_Pb{S8&&?wo}&H6%Zb`lKI5>R0*MmrxPaSy zZKDLV__I)Pr0e)VU@;2;JfSqQh!5mIs)t3<4*5 z{a_L0?Xbgf2BS~lw&aTkKh>T9a0?ni5?!FHw#}l?$y_0aETi0y9nOCWod7WOI$92h z3=5Vu_5~385Q>(8Rz>N#7-z=68Y;9?Ey<$fspCcaj4we+;i4t;cA+6@YP% zYP_YM$h_7-*I=#a5WVOzGEOD=2nPuPA%k(Ew=Ru7(p}y;|&&AIc zqd(@1ieTJ9eQ?o=87e9&U(isCe1;+U9U2vM`4M)EZETP}Wz9=X3L;?11*pOTL2T$K zIo7E+mh+lvjY$LC2|H$e5U;#mx9Ok)Jf7sPBzhG)V&*GJSSIEYK^3F_dszTsI>X-Y z>z8nVzIng$s8dm1=lNW7j@6t`Cb`H?{AXrLn*+1QhGaweSAG=vpL7IkY0~`x7u|2% zk6&2+^xWP#h%CA1p5MIivTp0;yV-`Z`{{i6_M$P!(_=$~bL6|xvn9N=Ifc#o=1%A& zaer9szV6`uyj)=+P}<>7%vR;o#w}P`+I(BjDhKI@R=Ovg9nS9OnY2y!6Ze@2o0qZr zn-F=utv3RdfCe1^z`2Q5(xG!kQHdTR@UdZ;5}|U3g-V87^b!A;cX0+uIpx(1faL#K z(ICZD6avIbX=V^}3erk*^&!U<;C1ekg%vX)A{abw3kzF7{y2>lbQ(KOM!#cNm*X`l z%vY$)fVNLa_{Ya(uOq~xdKGl3vxAR>yZ+cdY7=y$Rfms%Ri^VX5Z94c*vsZ+@#B}v zwafzb&;I8c-^4R6{a<=-dbP95h0n8scf}S8U^7O$0LbW+e zp+;MwRcp;Y{ZZ*`VY_nv9^JMCKd&fIIW)Ji@i+5G119`2-JwsX<~@bV8|G84RNwN z2~xCuSGbRGxfNfh*Sd1uwsO8X%^(tFUVT=V5-DDw*kITK8%4YSt06A{#*`P--~`G4 z+wcB+Mhu`<8EMYoYXoCtoKoE&lC={S2#VDAzx8P>+O-%q>0RR(h$=N52)|^#__U^h zWv-p-*B^>Eev{bFz>6i9`5+Z>0~qM>&~=u!q~aWgQ&22g5*$HnfH<41gqC}#tI`zetiVR^n6as!8z=r&AwUmTJX%w!UNe;{tC65jNqJI> zYIL`xhl+kV8=qnia%!_a87c3Z9nU#d;xMWUXft|W7SzKtZn|C@ae~PAcYo zP$W&|qhR{VcY3;DEnPXBOzujQc z54njdf>tovxZMX3tT+LnvZ^E$pV-uV=tB)`T}sotLnZ!*0bfKofdtbqXj%8B6D@)b z=e!C5N9WIzsokmkS*4ZV?s-qfGVX=LXlL>IH&q9z9mC+qQvOpY6oAo!Fa;DbO%0S5y1#gl=SGt$AW%gO1wK=)I^~>AwgY<%@$U>eLPcYR}_8$^AW{B6%8kv!Lyf{xt$ z(qMkSW?2J&?B}J;uAF*&CssPPO-|qP-%J)Eaa-)%@cu-j`n?M8}!Z&Z# zU4x|#Ij&m=^ezhp>x9t|vSwA$Rn_6~7jE5rNputbyQz!|@JFz+Gr69ka~8^$cR$N^ zaQKO?MVAS=9M~gy_L3vP$Dcvqc|OikaB=?mEneJ#Ab&p#@m~$a0Wicyni@2Wjp{Le z=R)Srar<#9Oqu5s_^@YOyp2eCo?M~T{GQ$izv9D+m0EY>utP$CRiz|4i^9SRG_uYw zL7y%g&`EB=}AOI7E z%4aC3SgM_$Cx4hsL)8&0Y#Dx!dvC{g4}~Szsi+P^H{GL!LiOa_Q^$cb%J6TEc-`aA z_3v+jjOcF$(;upd=`y&c-43|c;D3&t>X16R9Q>?UKyaE;*wRMEgb~%fNx(%lMgM|< zF6kC>=WW$CYZqAT*XF@5Da=`O>DR06W04F7Q-eczwiV8+JMLaMy1M%xd?2OpR_#!y zDyvEW5R!KZ4pdSjYV(LvBN6MWp6J9vv1gcDvf#J!jBfI;H#6X49pQ_OjSgPoN6WT4 z7uKf4-fCZrZZq8^sa_V7K1s6vm6*so{(M>N2u|=6yc;(&y{31()iv7>b!+ZEeWMM-@Ee_Dq&)9UW)YshS|({Y;a+F~RZrOFU2s z%efclduQl2#+v@~CpBm5muC znO~?THSWSu42i$XpXlMC7mF8QTvtX;4ASS?F3?y?t(3aJ%=#wN{zY>%Mm9?0t=(0O z=Ff}#*g45vqmODXG`6=4Ybl{^8FyDowL-J@gwb~2b-3ZvG@4>%FqAWN!E=ec9UHK1a_tVWnWVbb9Z}S|IgnubZEVbt8|B~? zI_Xy%_vg3*^z7}TuoX{yX=97RTBxEgzdX^=XD6j4^H1k1FBa8yzE?=nac|=1uo#@j z?ds;Gwe5n%zTOXw%|DM-J5&k#Y$z!`2TraLv{s)(c&R(@zA3HTsuQTnl=Vm>DN7c% z<9STqi(%V};~%Sgd|+275Lea1LXP5eKUlb1S?ViF9v(Jqrj~pB*3IundU5In8u*a^ zB7zk#8C)yuylem)ilNPE&>ly%LC8+4F=VER<`$}+JlJI$sLP$3ka>gtl2PmO&}E{v znOJ6L(r_cldy~d*Jdw^9bA5rZq zL>-GXVW6hSRyIh53bEj!W?nKTX}mJPpi7d;5W$9up76}#$4{AwrFKoYONXJ2jY#6q z)DWMl5Lebm{OF-NXUHPx_`FMClJPnb_=AN~D4qTLY;xtv(opDtK)gvmMcZe6&OwI2 zBkQJi2$}9%1LJC=MD`$~c{Q4VW%eh%l3o$q0mOY``??bb?3^po;Jnfb07Bn^wp|MiR~=@ z={yT=b=^UoB?^Ep`(77G=~D!D5L?Jk4p4EjZ*}ry^2OvXN#17Z(14!dcpe!KJZ9X3 zgr4%MUSEAC4g9geE3TbLqLCC{^|s7g{M~xw>}Za?@>yvwk5h-_JoALNhH~@`Uo#5F zm*tgwd^TE~2Cy9&F8-qqGY~XuiDUoULA_p?J3?HMs6L zGiqtn*Esnz{PV#?NQ~>BsH1Y1J{Vc^3M2;UMp>ZUyBQsLH&{82LB0=ZURI_R-Lgmy zNRTe0QFU0s`DT|F(SyI&A4Zd%T4B6!SManOC~uh1>{9i;|y=6AAKSzXuPMU}T& z@Uo9W4sllBIa!foVg_JjM0<2#X=$<;yTdLikpVmVsSGjF%?FZjIr97RlLa8$@gOKu zIt*kJu1P9xw?GGnmG~?l%gNd`AMqcNNzH_PxvW;l{8hZAM!Jq!zn+#XsW9zkmeiSu zQkJ!Ig{7@+C)`r91U;O!ywYY4z8xy>aklpeZe$!9Wz{k4e{>Q-gqNpGmN>$X^u*o+mxX+d zGwgkNRoBxrSLs-|IAMr4WWU40)fw1FNcEuO>EEK&a5d^3%;9)SPFD%b`d(>jTzpd} zLk3NWIbu@}(Nk?7N|CjmKd=4#RK9I;%WG?OD7&%VgilNLuZE6-pwA$ng!lNass~5` z5OWG!+k1tUKVAcoGbw8j~^s6{nl9q)f_bf z@ava)kad)iJ*YK7M}{~qdP4&ZYA7#Oc1;=iwuz{}Zl*~=nB|M=k3XtO{qd_^T4 z5uJjiXU<8~?eCdojdc7Xux z+1lA^^(6hfq_fF|P?PN`rYh}01WqYrIW@*)Ny*0u*%MMU8b0HPB(o0V=h`f>FC9>Z zQ%puEBZk*tcX~eh`UyK(*YtT}+IMPhd6^R1%gDl-XYXlY8{>&mh%oU>*6!Qyo37!s zv~uTOoG61X`<$G}!+sv;jbm6RkTSa&Re>b~)>5)vuu$yBybJp7KNZ6=s(D*A z;au7cudeyrDhee9a%u&{$i&{^n%){hYjZ-F;0IQyAt)WY3k>S|1{?!$H9cT(YjOpl zJLq$ndZV8R7$hn3<5G;$w53fy8>yHv=0J;X+vQkC?ojYUzdvM$48~o04M69+3uED9 zQ~7}qZJ1Vzqdyz|eLe$*r$9OLPHdt~b!lLwmvdZ8TPnXb-9GAwQc4rA;K+E9FY!=? z5Sq|+VT~#3EAC&D~0vU+u2-UAH@Fw!3z*12{Izg4mPaRZ*5AJebyI2U7ED=9z%t^Lj zs2uY^$Sa!T8#(hvcc7uGv{1p3Lbl_@XT|Az z!|l@!%D%zNSJ0DA=w5BBFXBo3jYwuVLD)ZpuEX&4`4(Z;SQ>hAMlP20 zb{Lc1s#S?iLp}{Pe9?qdzqTqh04NERy;5*2Rl>1i=s5|POA4WJ_*~u++6sf*HoQq- zEj{Ooo_UX1!>Q|D_F0UOFNfj=x%ZcQ4%a^!y(Nu)F+aCzHTVn2RS2);={*LT>$?_` zugN&6kI9oYA7(2b!AxKAeA-~s*xDcLOzAG$=y+M2NU@Oj$N?u3Sl@)mtFUA-1;<$R zbc6_&;%nnx{8rC$0@DI}p@f~%RP1$4XdJTaEn7$+IV|0wI3sLZwJe-`n6LB4!;<`s zG>^)S+b6^Y*TZVe`!K@fsexJeh{J7%u6I;(qRXX~plpQpQDf3iI3NWQ7F6tKjUO$M z4qI-Df^)@Z)7Jw*>u>lB^ZN)btUt?l*_lQ7HXrYyHA|e^J-Rs^hOm`G!^95&yo7uX zaRLcK7@!1HM9)HZq=>L4Z~wgtjTm#Uldp+WNvI1riXin#zez~#d`KY7u3JQNAi#;0 z?W+c7#dmAXn<9ar{p2A=xwZ9Fbmkdb#+ zARfc96&nq>TdPrA_Z~!?XsQsO%m^ivUz#kl+9fi`fV_A`g?@KpkG^f83ZJ?DJF$@j zA0d)a9M9IW7SgK6(M3e&T**QiGd)Yx0Mg8Xcy_AS&lM~93ijKO`kn{9z5CaWQ>~9} zUtPW^k^hMC?pCjQzW4!;j6E&zLy7QP;GWY9w zhv`_|6{_(c{*f=b$}5UlVsSYjiJw-M@GOeN-A*onrpo_QK3oG3ysQ>r%7;ONvVc&F zVLOabPx)$5$w|8$rr@+9Drr?ZL3S3KPmf!R5{T9JTN`l5RL+|161+7?gnGnN1P|@w zlcmy}UV70+9CRN)Al3t&4EH?0*M|me=Uq5r;#k=_8kT#3m-Vr>XIAI`a;{qYv0h#p z8XKRNoR*P$_VkHr9&rdp!idGl=mxO>6c^@*=zN}7Icf}rwfcU7eu-Jg2&&SPQkSAg zA7|Zrq0%IYw%SJa{~*PVA|g|PnEJv*Aq8fQ>yo9#!#y&KzrP5ll5kUNV&dH)%Yx@Q z*$N1B*ZW8m5EVyj2yrm{T^z*JDrP1id54s-vP{1hILjx}IGcX9 zQ&mj8x9Xu3Qq!w76Se#7`t^S0QmF27N_e{9RC^Y-@mR0=cgdZFAz<@q!k(cfGbS=N zOZX5>gHdb6c(n;vz-A`h3|`sI@YRZn|ocEQR9f!)2i&%Q1OQjv-1$O~@D zcmu|Cjuqr-t?yhqY=7#cm}36?LAt0qA?eOIrJ}(xbYB{yN_Wgg_e17=8xEHrSRt(X zXG9~`==s;O^rbw1pM9-yIFyyrZ+Y?C&WlCExC-Updu?Y{2nBBQ$Jz^ouvF*g|4XZ8 z;i*dhW(1uca>z7x za<1LHIS%}cCJEjBy7}pAnxir2`P`l_zK= z-lv`+?^}x7%SFpo(BWKANr>XkrsTa#LT2#ks@e@&7Wf$S$kp!aKiRpXtD~c=k_;}r zs(6JBi|!tjgV%in^9jx#_naZartYXJD|^EtU*E*9L*BY70}`aRa>^_H2t{CR`0@yV zjQs@G?L{5srIMbs@i3w6XAve$pZOy#LU zqRYMhBCh&5GoWWj#>=K*Ly^F8tLTj_40Ts8dDkse)v%fv4_c;$L09)xtXIBt22YKe%` zyu~k^3fwI%@-PWXkqBNhtP{Ccl(!Y7H=p>Kxm#VWRUZl(TV%!dbSF9JIX#%I4SALo0%&Fs3Gzwz67-$l? zVcLYFh?kklP5lv`UhN*v_a^Pq*VEEnd&lx%>GMkH(HW&}w;*Ctt;zsvF71_ScQ;v* zeD;Y$+Hnx%V)6#|B>;Aac9=^eQjD_Ry*E`Ao8_S2w`Gcy-5HJ-UnrQossLC)3$3W27JYKS-lf2pEU?Xz*Kfenz0D_qwBoIM|)0VXk z+cHWAYlzMKg2FQnNb33xW)y68RXE;RnS9#wt(V;tq?hkL@#|ti0^afFo(v2CD4}1G z3-I=r0aTsIwk1b11ez|~pS^4r>+Xg00!g#jWz%D8MOP}VUU#N$KlpHbmEloiz)x70 zm5#8q%D^TPmi~_(J_Fed1a#~^O2(_QbJOLyWD*s`))V-%s+v+pJGwen8Ta}u{AN1^ zeXv1Hyjc98Fr?_be-u37$Y zaTuhnfH5YlQJ7AoDy~`#A7GqisWg3T)Mp*(Sm{~8{!qj^>iVU(3IfH7?QzmWBC?7{ zH#LZ43)idBwNB9WS2>Z6t>fu7{Q{}a+*yAS{`l7X)k7cHooJU{snU#eU-6+=(|{bJ>~6j5 z@Yr#ArFQLMH6Iw|>OuxRbzM;moO9?86Uqy$cV>G%vJf2j4TgfnIAE9sY(C-P!l=XMxw~prx&kgTSijI38Y$u^m zGfNr~ENNlP;PE%cq<1?@O5545Z4O~@T~aFd|D|by0mUCFXA3*+J3k;ho1dOTb*w-a%w&#`ghCeh9Que89f~V`Q@a@ zRV`uChgo|2s>GHwL842T-$mXPbW2+T&reW7;{Bmwd4z@71DI+|i>y?$Q7dKjYyu0* z(Xa4;7=t<-7>@Nr>1~$ckW=2qQ=`73re9M8id|MZU!Of$cG{5~8yoGbc1ugTQ6#7n zHC1|Lr_(VMgC2F_GQA=O%M!bGkbzgn!^yy0UKwcL|H&SOwZf(K@oH48&|OcR9RerddS>Qw9b6LN9%&8$|W5AO{(B)A>*WlWoD?GxSY1 zA_e&Cn4tDDKX=l}_2q2Q63-cARK}KcM*E*7^3gHvabr@@_rB~7w%W}ids4@=jKZhw z{vF3ncPM)3Pfrr6|Il0=2FH;UoAybIST=&_E9Zx$>C2jfmod+9 zw2<))s>>rBLg6yrx9kUSVMd-~u|&d~JXGv)k^Jo;3scsh0L};cS6k&7c`IadYyt4z zlJM^~XIKQor|&wIa*THNx>;)p%sB=-$q*BgMsQa8Y}(vej0h5u`$eTlLfPU6n>D54 zKPvi!>SRg*ht*4eH&1fb2L_&jMOp;o?MMprinwN!JD1K8>HlgdG7NrIV&n8kWJLAd z3k;!*1jK1;*hoQ>Et>6{9hKEeSP&xaU_xXCyh61+rF2+aZn^GQssfXVDL-<#*cJsZ z!s71Lyyv9O5lCW)q&-3?ODMLsP*=#AB|uF}mAp}NY_&$Y<7HzL5K&2LWjJ^!tX(4! zL|qQlSK&P$cK$q+5OA>`KRbjc(2B-?=j)~B%acSStCp7nRxznKi`0K3`qNuMF7n5* z>)t?g7y2At2b3Nj3TA3tF!?u*L+iT}{hh;g^qv8V2RY?Z*2y&AUYy3@W?E`j)yDC&@m zXF5b-N-+B?AJZJd8s831%6CpJAJ-B$**`E#5 z%~*f!A;!GPvk}!JLZ~MtTI=R`k7WvynG5;3dy1pLism0cuQFtSCp6tnpq}C`+(ft^ zIf}BjoYrDHaEyXWoX^|stHc!~)t_H+=m|rOAVu!#~<6)TGw>Zi;#20 z4jys6ZQU-t&f+jKz7BmhX!vGOGEvlqX`S%#wQFs!78%T^lI5PV1BVq>K^&KJ$p zF{Z5A02=uok}ARsbp#wFZR^SQwbUh9grZ-!#P=q))Jp~MJT8qS0LU}=7FYC9Wi57t z2I~qo((F<9@2$|?H@+}BSl-wG`=t>X&Lp{PvD(xM5)UimL1HSgNhw#d=Y&=~SP0&Sa{q}amNf?HGk-y8 zzJO9X56=TWMC1|ZbsD%ctK?RfSmwJf2M!%_T@212fI^=g=RzBgd`In!LJuVHz`urA z5*uqIny8Cpm(v`%gb-OQS+X4Y82$Z~v;1Vt75?ICGQ?5-L#P`7-^gPKqnyepBPnBw zes_q!bBEn>I=J*%SE3K7U<|&^Ioah#UG`zaXVq4L9VPC85;W_Qdz%vf3sD83y!CV& zutbe?8tO~PMkVAqMy!uun5Bh=m2HViLf86IQUwCfz@c5FTGzpyEip=qmTD%aW0OKibG=32&!=0)HPwM`V&oGj$>?8!E ze$3b@tsWy&zex)IN4zkgGtuD=NXQ)Ki$hC1{_xL1h`zb|3OiUq81Erl=A1aM;R zqNU@Ed?b}Oa@zhm_EmkJTYmCBSFob~7osf0_Tb@82MlH0SBAX`R0{{U#*FOZ%SzK_ z6^WmOaJ&pw#A4EJoCy579PJdTj}o2cS9GLqR$30`H2)#A4nQE~h6Iu`FG$IVq*zAi zCDQGf*VEMuks~#Hvu{G7pBj<25q{N+J#kb>a+CoetO~XYqJi4V*{UuV-&1}?NuZ-` z<%v2%gIHFk6HhbF-*x@B!oI(-w0W+IQO7=As?ll`C3i)}21P9yxi7RHZB<0d0xk{5Fi;E#aWr-)y zKI@Y*#mWh>vGZ+ZW!+*;Owj*_uF3fe=o;n&DGG#-+=fRaoI7Q4F)lZ7cNM$E0YLt3{-JUF@888=- z^2&hg4q05TIH>KIL1FXrbN)RV4^`I}O9sMt%{*XJ3*xl#^r~v0*kuOYGBW^0F|jqc zebruoi%(EK?WLlCAtCW}hi;xx1I3mJJ%MWiKaW z$RVQCjskZ}GYNz70_C(4rY?qoB=O03_xts`}-Yv4o4=XveJ+TNi zj34JP$NFYCYZBIPLs?Wt>JC(6bxL?^3p;Mg?JfKx<$ue}rPExP?4%^PjsSpDRS~9L zlTyd10J<}sUO|#0#n!qXs;mRGy=NYn%{~pnieU~^k>A0*F=vRTl&m+*b$8dR1K~-& z_)*O9A}^HAkMif2a}ahFA}*`1y0u)TfK;6@G+vSt7ohFa8N`A#HzHh+7jZ&LVWK<^ z)fio$#vIaXKwdTjBy2AttfAhneWB-KbTf!EH7&ro-vYeX2sgY{X;x#(DF4q57&BUi zUjgcmj?9cAF+ohnMgW<;IJ|UwOKThUQIE2V%=7l?e^x{q^2BOLyqwn_ZpuSxQ2s9? zol27{f8Ro7#!(5WI#Y}`z}N=*8hX|{5Yx}C)!y4{Uw7i+VAh_$^|p8UlGf{vX^H== zn`ws!0ML~I;N=Y7jfUmF^Rq+xq*FMC%M4O6B#jB@l;X>;c#o?^oNR@Ntu$7fCK|Uv z5#l<~0I!vX=@DY;5o}>0) z6bEOUl-?&J(cNjN%oZ8k zne6VENod9(p05fuX`#U_RoVoSRB}!)^pYP=W}KQ9o?{iD<7 z-0dTULxpUkXIsOLK_e)wLg?KtJ+vU>OrDEG?GKK!9o~?^O!$C0RIr_^IsX+;C~f)h zF(Aj!T(JDVk8LP#M*RfmZcukzTv54GU7!C)Xo6ec|APCstaYHe7%e{r zET(Wq)K=0v8~FDYOXFd*Uo)FtK6cv_zQ?1MQUOJ#0!{+RK3MQ^kRQupIZQQm%{@7tBf zsaHv0u6^Tbq7DFntARr1)u+ug71T;v`E3b;$MAi>Zi>`~%R4QTuPljey^HRO{O7BugL6{=%^YznJkGg*R}G5;ra2}UVM*R>PL83(Bc<7 zOUXJ{@NTee71R1sdmaw5G7^{eF;iU~g(5+GWaO8LuE8AAhz&{E8HK?%+UWN<3};K0 zpWPS@sO4&uJn%+zX#aaG+W_|{8}Pmx4KEQOvWm%Z*ees6T%7--KQ3$j?72~pZ7^L2 zC6)6iWa+Gw#sMIdx~WB1(3UK55+IR564S*Ygh;b0iOJ6db{819=(Tz#>^2T<#fT#8 zo=&#PyW?(s$Dq_0+VyBk&L}k6s~v@we3nMS?qr9i{~;8HfW~X!i9tH36YYd8N|S{R zm^YuHn;X*0zVy07V@WmbvtD?W`rLT-6b)0%A!W#_fN9aw47dTm6)?)^p5%B2bn;?K zvy`=fNlXs7n)C&-Wb_I{rB@P@@%85?~fB7TjL#eK%YU=dLNp zBn+b$s*)qQB2pgg)72~l-nr>KUe;d}KMn*L53gewN7C~nNO3{3v z7(v02L{A~@nnI6>Mx^)@aSV6xk?&ySU@QfDU?J_RqZaKnamTDSvIHyz;rmM1XCx^J z1p~&|{q7c2h)#*WY=%Giy_e+SnXHxipRC@u*kec!O{marY@!^kKs06?-*YIe$GKmQ zcJ1@V!-0ddU=@ha!CAN#)oG+(^3t3!r(#iETk`OPL%F0L-^Xtd{;b6wtgHBInRdFb z8I8s}xie^HcT6DUc3ph+B0q+Dqes$`-uh?ISjad1FoS;yO2ekaz?`L^?P$NPK z2>^x!pe3Vh>SNmms9xmv?b^`<-Sij|#|5Iwg8DnbGm7vr(KH1xy`&e?Hz8!ZIIsx= zVLq|JEJDSwR3J$n*s+7p2pG>)2F^?K@ltWMuyf}rgwScp((=A{@@B)QFKJ8Ek}H3B zFn7E@hql8AtkADjXTmqN&+jp2!T^X0Q7C0>8R;PYEyu9{hkAxMkH*9nPCSxQnBUrM zh?+1y@0f%)z9SX9A!ij4En*%6!>^g%%)^W&>!I}D@LnVS`fb}E2d-rY(=nGY!%2R1 zag>ccwD_-w_(p)`SH47w-~4GLSxwvaK4Rq93;s}zS9s6~82zsz%}Hea_tb2lHkKWj z(Aqt~F~qUoXdH82Z}o3r!TmJ$zVngb?H8}r`>gBGYlFjLKD++lW1x3OsA&L51#4@R zY`Y`kb%t%{u>RbQb!Dyhxgm2BHn^TWzwdV5arsw6#{h&{QOLcR1$;2N<6Av1fFd*3 z_URh{--R1Ez!wJCXinDS8NZyf-^~Tspjj&53=Pg0aEPDj!*nmxmzm$ANfl#cGFfcTt!46V?{ zO1D-WqyVP^UEBF7==BZ>k$*~UWfC8lQa~3hCx;}1oqZ#-W_#tL@Q@~zJqa6_S3nM@(?RUGclDR}%&LY_c3$|?qJ@NjXkuTK(%^afi0fxKzE1tbI-Hs!NoyyB(KV2R4Ori zf5HGKj8COtSc-($GnQ%%OzU1MI&t$;T##jN1!Hpcf^5?K zX=mSp2$QeAa7k0cVi`~cu)yBY5APT<-Q9_##=6BbVnN?r!DKnrqzRg2-c8ICKxwcQ z|Lnw&mmJswTQH$?Rx%dFE>TTRWBN$WRsf!xps_6{?SxQhb&^4_bw?iN(s6ao`B_Wy zU*>~38Ov+!0vSRe=QaDOX1{lq3jDSdis-{Xgs{U9A{n=DvAH$Wt&P8m9SLG8IC)-( z4h<=#T=71TF6h?j)K8Z!wwTpLl@b7NV2k93CSvg@%5puWng0l@$@y;`8+G`gyHoGN zz=KUH8+Kd_(pQAVRGOs`X!r{aYFacFgEY5C#W(usOuy0s12pn7rD2pS006&hk2IRI zi8&6Xl@@{yf>IJ@EZRI}O&xd|k}GuZD;bvHR_6N2a;qS<_>U1jq=WRz@!pw$7O-?f z=0)1kuZ`_s`>ommN~W9#T3YGu|FGF9KX0as9ls|}XvO%{j7GFVa2D%~dy>cVmX zPNy>T){=T~M*0L&bQ9xeGO%|FpJRoB6a1M(gP2}fi0!??2@~x~nO?TOj-Y9BF;TIo z$+_+n(MHAMj8OY#olkvQ=rG9sl1`n4zQ&TY?vW={k}*x|>g&pjZ)nE|&8V#m6*WA( zDs#+oqO+go82g;#x_=RJpk*B2n*6&#i+>2gIu9v@oj_D_CRG{ZLd(xOiFfO6iJXq^ zy2QY5BS|?9rR7*BD2fzXWchg7#~QIYhjX?3w$H23-hes>N0oWt(Wt^9Z92cB{Ma<4 zmEOP?`Ud@z*62qdco&Qi(;bz8sa6yv!HeqeK_vmmNdH8u?DBZ@MWsH8hM|?BN)iO5 zB#GTG;2_vRS4+g;0WI>WP*M4O*KLJ>~1@)Dn=p2&}N@JwnWVqERy7_fwe8;#TecUa3_NT*D1qO7sJ*6d*R zEmH>!d9L`|3K>b$dSFs=W&o-%(F2W!;k0TzpYw#A1Fbj|x_BQF3Q*$-`|znd*j6;) z<4^!NsFUo&c-Lh7=4#wBv|*N<6G-{7Qi%0QO@u_44j>t2Y88v}+&muL$w5=z_oeSh zbuz7vz0KM=epKp0?Kr=yqha|sOVXWw(EeE&>IQw)4TCjYUnkc#wwlc9x8=M&fljCB zNOZk&pQOS_KF~5P;Ea?+QA3V+j|O2>pL83-Fa$|S9c2viCMnroAx^8n#C8N#HafK- z)&xhByQGQ5`>YN|eEr$=m?h96>mlKKT_~il!b6unT2g*v-7Z`qtGL6={-d`gQ8`(3 zy8EMnkb}ZhaT)dt#NQ}s^dh>g+Pteeo}Y(43LO=^G+BD;H>o9@VSOU0iZUoOtYdfT zTdT3=%{$g&G|(GZ2Yz{129Fe3UPtm63hR#i#eSf`@mc#zI>mt{Yd)djVZ0mtb=@3* zSfs*lvGBtX@X5kvnoce*FM=?Q24r#<(``}>RvNWB&dQX}d(m>DUQ-tTN$&ni*-YlM z1xjlCk#*YHq1!-Y6)nh&qdwId9tFUXK6p9LVNqCeRril5?egYtr=0bol!+@BjGRQW zR%l|ewM*Z~)QV<5Q6eobLz~M}R}o1k`31-IKaYv1rk>)y zw-oe}wQ%iUAwRJt|AVuIZyTtA-A+%J{0|{U6a-e2MP+LO39)D+N!vpT44XyShVrXH z=({s7`*MJsdTn8K2CIwzYjNlE>`TQ%Na~!JcONT8k?k8*V(bSgpHJlI*>+N4p%mjh z_ylt6rV3{hSJS8YFkMpsvFB>o3FJz=@Fy1N@pl`d)_-)Fxpv!OT5 z%v{L!N;yTu97q&H%3mbMCl=jIO7d5%j@G4yg;Vr4g zGq~|nzNuaxaeG{ep7zIGo#Sw^S~IIMZ%6+jBn=aI@#({)4;#|9Q!r9+M#@O1Vbu?9 zoJU;d1L7PedF_4p8W-+?XXs^}%aizz-^dghr8hF(r5G^J|MoobH3{Y#$}Bl81)%dF z(7}QLZtZtZp8bF6VAaloq!TY>0BW>amwuGh0h~^cr084qey$^%-&CG_?RSyas2oo%}sIx z#n+ujXit?_%~mzwbN*idZWCH%lL4Ls%7He#>Zis?XEwS(KWYJDAC;0s(S;5lAaWP8 z4uHQLSkV(|h!sGj^#NKC?%BQw2IwzI)6jDEBwom2eZxI7fd_^m<0HWj|Hw&F8TXvf zwC{lL+(a^70kitp^WWOUi`Ymiofv82vOSXG+$=HTtRTZTtkfcYX(n$ezG`WIxlg^n ztQI_O?lQn)anuRoRl*1lFZ-!T9o;UelOBj_fJ{M&f!K^@6LK-fXY#G-?6i68KEl@5tzMNGfOdS%Y?k$&8tdPA3<748?4Mi3r4 zO8g%_t5e);(NZ@fTnb&WpS|1jhvvV7dxl9*dOx(cmO)H)q?U6DJM9J7H$UFBL=hpT^+?|-2>DFG` z;ES()4|*HZZM=g;zwVZY)^4D%=?lSnuAy_1AHDfc^_F|&*#C5Pd4~kJeBvBA06*NSU4t0;^Ki)d|DygVqCNPPR%STEx8&vR+ zXs#mpXR92B{2hXWM($UAR!wx2sD`% z2!m56I{(=83GpDHRVQ|iMQ^h+(YmnU9Xh; z@K2R&z2&-<13R+hCG*`Zo~3B)o2$fc=8}}lR354*gm^oQp)K}d){jnzXie9~WOkQA z%3HLLtf4X4>>~nJJOSC*t!5mRGeb+bvg8dt>lHpN%|e^Xq(HAEMLL<7J*9UZ<;dTE zK0#XxfkyK-&CeK|MFZWk0r$YrLq(?IZu5Y7a+3k;o9mxXwvX;>LYBLa9P9gy$2YUq zZu&016c?8L$3>#eu5V<`bJrLib=!>XyFZI=>t>+ENwdb6{*g%-q*ywpxe)Js5n!Gw z!{?1(^GcIif=COc@l#=)?xtNs?@i9@b4Kfh{~;6_h77h@53!~~UQVoYo3TipAsAI7 z9SegCAZ`*M`2;_dUm|wmb{K``V=?ZoOqHftR{MG2j#FB#DyZ_t9TFIx09B0KD)p#u zBv!Q2XUa58Qgcl=#feuslVvQ^x!L&EvRl{FC6no-(ydIj5+ZN3mWL#>`d+q zyqRWO>9fDk-Sc)cFXodBc(~pkhwak)-g)de@GU33Ix5zQO z^i!gkp<4f)+muR35k%w8$V^Pkx*i)TfgRH!uWIeg=c;7AUu@zkYRx-qNQY&}7u8jr z1Zt@N2J_OiJ%)BX58MY^M5u0_L$^Xtwp<>eP!CcSvW}*_rI*|%pd?0eMEWTcZz=U} z_;)e~U=g9Ra!1#K!_uv1bKbq@XFd!gc1N46s7<4xh_bAhE9nh<(pH_;LdjnST+3luoC#7^D% zaz#mXvYPg^xE~W%eOlA-zexry_h+QzGindWuA-VXU&`>LYqRN16}itxW!Z>B;iP?| zSU>6VZQO|peT*IHPk}~*PM!g9M@P`NINRwJU77_!(8!TOWx=7OYPlU;?8+D84ICUv zITR!b+ZtVkE1oZ%@*4@gt;{1OndV!MdT+R=UX>v$o?h<(jP*D2(AVpu#yckf059L= zo?Y+-WmZIoqpK|q;ECn*tyQuEa5Fm-zpa#3KdNOZ=zJ#Y%PQQm8vwpq^$nmd-0ax9 z2_4d!^qM!$&u1b~C|sxJaC=KGHEl?`G>56l&_L&vmNdBq;gf52mXd9^>LyG-KsU*Z$(SDJJjdFcy8= z7sp9@9VO%WTkKEUO7)W{CL4GGrXkeq?u?AwwLf^Hy0IC&@On+h zpV29On!*vn3_oy&TQGHwjxomBXKip&A5jQ7;vari`Npz6sh>{6HA<>Wm}rA&Clz-B zM#P}zWoFKH_AhRVDukohGfaslN-c?&0iFh0&ug(*iN z)%p{6IfRv=&7d?V$L>i<_4=mSawuYajYM!@%RFH(Z1ASac3@z+J@C=2*%nLQR9bYE z1yIG8F1Sh0C{%knw(z- z(cB}f!Pzysth4vzys5b$dqtLI(Jj=l&S55plm)zR4tr^YR!@kyJpoZkwNlimP3_uIfF1YTbX4JS1?9`2!+~n=#)9=X^hyGG2U=K4!H`ya zHbr@+HX6M0MANu=2Gqo(vr$~Hb zIS&?mkA+Nk`QPDcUZR2h6KqnlFfXDax?PpYbkhn&AL01x_?n3nTYS}Cjrp8`tizsD zdc>c`7`z&W3g1@wLoXw2aHQtIS^ZEqTj2Wd{ykch)#c!qEEkR6GdPV)kz<-40|xGz z%1sh4TF6RT@`vX>y=V-4cN%w+Iegj6k-RkLuhnaG+L?siOG;WJxp0W9(Mkekh$vPo zU;!%rk;iFk@))*t35Kc8FyCJ+d#olkZqjx^TP;F*bCCY^d$9QLl)_j20du##3jG0? zHWLc1X{&P^^WHHxMqqk-JGG=^&|qa+N3~cXm0e>#@S(0#@(M_O0GB4O!dX;)nu)PC z`&RB(ey*Z((-!aSm6MC*1Pe`~g`%;N{4GWNACW{E0H0*Kc+P+?p(FboENYd2CNnLq zN&<_AB06D?Od|1r(yYEfz+S2egzl~O$gcxZwp=+CHQPGy>q#WWaT$oxJ^c7=MO*x2 zXu^^Z5K%H8_{sJtyXozjeRbVxR+W@nwV=q8q4IC2&8pknL~@o!!THsyx=?*nzD-iB zbmi*{0N$=X31UsLdR5vNWRrf6hs3@u_*oi$Oi|g`26Pc8S@7OH)pK>@QN@E*l4k$C z*2dQy$T9jd^h6;kBWGaeT&)iiOrb2HQh!92g}NYjdps65xj7Qp`k6``a`c34o@^2bJ1S z2&z-=$WRb1CFlC48vrB#V}CC-C_n!hQJ3V<{9fqy2tbnZLiduvu!ifV6}c4DsV9jq6fnm7F|qa=_+s*_hcq5M|S zGUVzRWXa%kQVxLAnC`D;F!?CuLB*M|+p=uWPz=FvIV;YXra)E1up&V;1D0n@eZFAQU zILJJ(kCDSA*HD2--ZU{0kOyta7*a6n`y|{x+%DS~Z0{IOQ5EY_Hm8bGkw61}5)(?z_#CbuUm(b05T_!%y z)24%CF;yznDVB|^x}VQwbyQ=c3{Sla+h)5#`5wRi+!n)>Y~7}B*7faB^PewSe9@l{ zT9b{TTmDzOqGOF8{{9^>|GN$=E9m?*Gb8m=sQJ@hX6Rvdm`rTJEX0g(M?9YyBU)<1 znFnp7#HCeMHS&qAF6U|}n#e$!&M37nSVrOBEf)+x4zSaGvj!l}%=8q`+5nPBW?h6b z0B~Np90Kn-;eX)3p(>CpApuOhlS@~1r$N|S4d4a%B5(kp3-r}mG;VEO=RJ42R) z0o>RTZPXsrrwcZ%5w^Wc?5&(Eard56<3x)kF$C1Q7+`?#<#1M?#4*E5r{$V%W?4`wlns1-r>R_oW9_0uFcdk^D z7qKFXrp+LNt=$CrlD9m-`CZ(9JyDG4{OeOqkVDsAucnB&iLQv^5F?R9un?ogCxbzP zFi+k~Qw50<6hG6rPk3@vlW7rU>58;2bnyyw3H<~WL3p>61(8DBK-Xx~g0%t8I<1(I zCe2n8P0CYT9MKi((Hwq4hRX|{5Ss?tO!qSZ8ue6rFiiCN=y8P19nBYOQl|ad)ie9w z6v6#E4i5szRZ-rD zcSdf0o=ZMeV~MgN+Gr!S^HwipW9h$VnV}I|x?=e6w4!E;${`!V-V}|Xk3YCSqSt!x zQD-p|O}`F!vY{THfE)idrZyQA6`v=}TCS)Egsv4=F;OQBv(Ce?xC;5jdPOBy(f;Cr zC4|JxjU8L7;)`op0E*UnQt#rXfXuXNDPFjuk)XCmmvNVrnDa#|WBNGNq$6*fVueB% z#YfB>mHfH_ zr3dP`3Ma(3wz)-5mxIEIEQw=0+BQ(CG`xco$VthF*sg7O({6#fAVg_lrL-Shs9WW+1aR6{=SCKx>e(y}f>^DGM_X#w zx5}lj(4#xKb$2M=K(^$U?=3#XUhHs3I>cR?ED(lTV0`mLJbU+O*(na6gQ1U08GZRd z6gD-QU)c&XXK@ByTee(!t;km~v~wA56Jr0T0?4M2Qe|qhfH^Zw-$y8PmHa8+epy=q zKOoMr7RV?h%eDi3==0AyVC_k%MzqPBW|aY8;632fPRnGs6&p1vHS>kiaWnUfX8$EO zO*6{Uk>=&pdZ#BpVa?HBQRY+|QXTpeTRQu@TIcGAEh89r=LNRizkjEDr~5e&iR{iQ z9!EbmE+^$uCcV4SqAU5k4nr(pgnDElDm&{U-yIxG3*a=1owo15IH@_gM52qly zxEs#^cS1~Ma0?xGll@=u1I?12FPgrXl85YgwRGmFEj3z#c$d2^P_%yEa{P@1D1X=b z)M^l5FFgy-eJ%(7EfO~`qw+=T-O>;qRy#?9yeuof9DN}jk);}wy`g;WqBjq&7(J0ntQ&ep>Rj65eDQKB%4eGY9mSBs&{OX%@5iqlT{@4 zps~|v12MhgT`ChCkgQ{9%8r;0k_ak2W2EiJTM3g%PtRE)$IUzH0d@LiS=lj4wS*tQ zUV7+T#~VSW{1sJAiX~zcu8X8j%WnikVB0B2{~OxVg9xO;rsHzU$w(sI#EejZI_I4@ z+UH>^ivpexD!NS-!^91DA?36N>Fqc%JmPnGZ?Hf|Raurlc3xs++VKd}y`Dse9SH*7 z9G-+<=Yh95S0zZg^3n0Tya2ea7{PxC83Evz`TmiDM^x#_#rPuLCk(EdUT{{0(`Q|@ ze?|q{q?InzSEx0FnS=zj!LQ?Ek$?7%I@f2uk8#nxBP!foqu?h~7e!hbO1MpVEeO}fD= z#{7TXodsKz@6(2t?hZjxI;6XlZX}mjSds1!kw!vdNmm*~T6$@alzHw-9rgjysz2)4;LqWyRt4d$t>1p)^EX z6?DVW<{QlwfO4essE;sQ6yOzVTSMZela^5tCVio?j=D?OHNK4yWO`P z3R_qbcy6vV=v~!ICTRE(I$beuuvH`-XUgk%D-I$^^viSInT#2-4OB{yp=N6^6SZs{ zxS^4GLC&oGEzS4q(9`}%8p{6m)QCM2ISS7s+$=LrD*z?&-=XpINbE9sD-S|JGkrWk zB@B@yiFVQMr>IUp#=xuPf@tR^CR(=M-_!L|?u6GB=D}=_8U5tD=I842sD;NQ#s!f+ zTgZqTYfN`=r&`f@gOh8giOQcHCzfn{@tNI!W6qlomf7>U&P}e>p^_H`7~TT?aTR6; zwo;5vXaHb1NQkx4l7SeEa&=le5XRb>8Rz2-1?1vQXUcZHI?f%oQ_sYAk7|@>q-sra z#Kx6+lnl{@SBj)sq}7;-BpnXPG~_Pn&9$8HjTv*jFx$!uen@Z*VPMpjC2bdAyfn2k zW(EX;p_nd)YF0qf1QN;ojrgdDfLhCpVE3-q?Ewjje0xC;3r?1QWw zOnXL#a^%rQ;-}I_ix`-e4e=oO7pc<9OqeR@9@O#`hyBZ;3Ub1n5!?FA@FM}<+e0}L@1t-H(~36o74l!-GN%R@oDjjKCoih}!{rt)pgxAy~?Uj@8E zjVp)Do=BP#WEw>LT1vR0r!BU#W+mXUcChsbRt4cbCHelmn>amYgqLUmc@}AD*3s50 z@0ddFK>LP##AkYetwrx~S5T=Wt0$dZI%-jok?AJ8h{^x{&DricdkjaM(r&uF%&R&} zR;%`AHS#>Uh26BH%C(X7Cjz1=oN?`HI%4>W)aB9i?doln-F?tW+sTFMJ*Uu@VFn6U zCY)%Wi8p_l{4Wfb>o)7PUKrn5tZxHA#D)|d3-e8RPUn9d+6oYMlZ2()fk2T_nE*;` z=YA6VqV+%9b_qdm$n+q#@O+s=at>Tf= zVf$c1wS3X>14q#vuaZ@!CxB>dZ|ozbzdE+Gu+h2d8ul1ZC!!aEXDqmTGL!+Iby9dG zn=QwMD8yW67@1l2<$jJwtZkKNNfs;joe8{>V$!$(vApLz7><^9`p zpaL;hcoz-;!1;MldEvHa6qK9Grb(|91mcBz9vsLPC7aE!sk3mc<%*VRQx}5cgQ@b> zK%HvEacyLZKgUOwD4!|zX(tEKE=3(yUE7Nbzz;}NLhg{n(-C0My2I7(vxr_S}nyvC2* z=02*R9Aj~a@?wauVzN-)$-7ue^{q^Lgul2RIUGL;oBbe;uAq4} zJ6ie}iw5p=jYYx57znoM!NU>@)XcI`ZODxz9g`>hkI>i~NsW-Q{PRt)Pj@m@Nhz8& zH7MQ%;e(m|koZW(=e&aT8FNs3J#T|1cdUBHjid7qY1`5Yd(9VwdS637Z4PSab4hWB z;~oV$nNF9y>FVLiX6BcUiVA_Jmo%1O<9BDl=_6<1w%m{b%LL+OKi8gwuLO80iLA!v z`}pBRzYeaU7APXVqHZvsMg*`uD!32Q@;=7)m{G^YxU#BB>jT|3A|;@{$8gAexPgr{l~E+jOUGnC8OyUh7>XP^9V6RQl_ zG>Pe|==#*z$oFX+#k5r%l1cf_nA*QQHV5<&SyIp1w-Jq{iN!?CuA{A-R7J6b4f-|; zQ#GKM1XdUw%ZJYM!u>zBZQEy`^sLjaF-*Jj-hhuciVurOxiUcPvqou*4~%0#1%^S2 zPV||_I8f)K)s4Wf8E99@25@%^JbhW^IA_i*eM-7!q-vG>LG z?Hig@Ey*)R9t8^lE5f&Q8P{$5akRnXV7Y7S^)=6bRcpzh=%*Wp+C9oHih%w4-tFwosHZx?4Cf~nv+x8tX|NvLonaC*4A#Kc z8?j08mtB4^b#8Ta@pwebA6ak+?NzD6=JRQlR=WI&Z|`#KfJff}#Z=$gQq1Qj{oHG; z{dTZULMcC4`gqIO+np&%gL6MWbKI8`d+y%RXSd^|K7q^@$W)@OaPq_fTTn(W;7f~K z=!Nk85pA6Ch3WENv&&m=l4Sa92)TlrOIF9E-u_eQG!m!J)NIn(Oj&)zeM6DMlcG4v zRG7iEA3OWV_jhKyRgHrn^?q#t!&%i_Qk9-}ZRj@Y!$q+WBGW}ZvEF|b&swN3+>gsB z?bR3cmi^N;{LwG=uzbiviW)1Stl)d_19*;V)8okMoiMHab^l4jZ*^)RT|QlpUC?=5 zu7HoQVR*C3?wINS$PyN0wSO{$(fBTu6~-7Vk>&ZzA$|9OV@z08 zj5swz*hWIqad73j_+*K^dfXEJjZ=J260Mx;GoK%ki&q z#kcS04=#G06)246bW4r4mTXkh8LjTFQy>t!bJ+INEsK`nn(pmKc~dKefUUM{`A1Z7 zJ5Yb*H$hfhlj~UerLtrNC)Kc+rs-F_gz1f+&Oe3DLAY+vWe-i^G|kD74N(qnvOiJa z6s~&Z3r6p--$YAt>pAO{f$`=p7e{xjO`FYofn%>vZ#BY$fk`ypUGtwm)9#~ld2Y&l z(66>haGf@)mkNfg1v7Or)XYtDtfe~0Aaibl6PI&$CE}`gK9dzCc}c~Wtrm~#(PH<% zXFgV9J-IVUq_Sbh&C^hRoz_QL(0f0K4cWS`jT*_h9W=>tmZM6v%eOvwe)s)D#_s5x z+{5&1iBq(Eh_p)!OY6A}+x2fr*TWsbNHl{kNBk+P-kX(&8&WoA1GB?g3R^T852y4` zjCo?LMVm5yXl50}y<(TChOCGsQ`w}ZKJ3KP@$c}$da;&N2BP#JEJxyh{9T)0gn$J` zj~du}jVioa+KiXB`JU*UiG=q8A7p+bwB9k)+G=<-7!095-*w>2$IZw|6%je`ucd)N zhfN=27mYayEI%$;;V3wf8?oqy9>QwZ$(r(+?w4DaEAhrXYWEg7I{%gS38AHZlXg2% zzBlVuxZ#PPH(T;%OQXe}SB>dv)P!4YTY}kU`sL<-ITVEpv7guTk@Quz3uRN}QKkrv zGOR6n(T~d@=--#+3bx(Pwmv6r$zN0x!Z6rSi-sr%@)Air`|QPM)E*C8n@sq%>8Obw zZ*w)e)-Dk7vqoufx;o5FJ%?oO*Lax$XULZq0H7D4V5Z4Iy8#ZZtTjy#=>X9FJ2D6= z5J_Y8965#M(WiNR?)yFv!3JZsduoie_!V9}W&>OP&q*YO)rvV!wn~($LSXyTUkX3Q z6a$;Pr-v&U3q9VRiX>qKtzMi95m+1gv{ia^OFn-MpbNIf^+QmZSGRM%jpYT6FQ$Jt zBJbUr6IXC%%?xTx??ERbb#l^TB0=0SDR?TLk)7{6hF2F?%>uiA;2YU%0UaY4cp$--1BO8i=#2 z$WBUi<35{$T*o1T}+qgEh;NVEcc>`;HzkDe`D}FAHrg1^m z9o!q8T>V_Z?B&zaIUJQ!W)g+?tn3e=a2WoFe+vD?!l|%X@X%LawebVdyoYFr-ef-SV>#;=^dytZk~UKeO<# zdYdh>J`IR(Ro(M#@H)cU?ht>b>gkL?cv6By2I30vn{p&(aNR90)l!T7=2@OiNKrw8 zhmXXqw07Y(9*W<*T$V3?_wk(A-mPEUwMnJT+~t>^17{35KEf8qaW^81K28c-`Z>qDO33vb+Zl$T14g9dPk(y9JHmO9!C zM_+q?a5m&iY)O~b)Fh}SNoiC7%az+oH#Q78{{i|f)vjL-{!ko0f|^Wo+OILWlE7xY z@O|>l7Z*!4yLmb#9z1vN9wh4O7|p%=*3myd;r5YS^!lrWN@%72Yz;KRQ*9K}$Nvjd z<#hyF0CRs13Wx)PErZ%x`amERo=VOoW;>ejC(+0Kj?2%b%8l})iYQm@vjj_>o=FUU z6{DwO6U#Cx9Uiv!pmg;6KCV3yEthIh?c`U@IYiVq(UAHmslfe%y~R_eor_|5f!!ZO z=F?E`H_z%)v!(mKK|MVm>aYBE_J zWJ8J0!!ty`wLgknTHD6E;tX4AKmg#TuhXhShqPhpu(ngnmA*3M=E=;Y)t4oL*i&MX zO&9tZp`7M0%ozXw0)8?M4}udWvm+>7NJfiT zK^!1)XtK~kpmkPsFV6|Me%7XJgeM#%^O literal 0 HcmV?d00001 diff --git a/packages/lib/utils.ts b/packages/lib/utils.ts index 519d541c..c58f13a3 100644 --- a/packages/lib/utils.ts +++ b/packages/lib/utils.ts @@ -45,6 +45,8 @@ export const validScaledNaN = (scale: ScaleType, data: number, specify: number) * @returns {string} - The resulting RGBA color string. */ export function convertColorToRGBA(color: string, opacity: number) { + if (typeof document === 'undefined' || typeof window === 'undefined') return color + // Create a temporary element to apply the style and read the computed color const dummyElement = document.createElement('div') dummyElement.style.display = 'none' diff --git a/scripts/smoke-nextra-routes.mjs b/scripts/smoke-nextra-routes.mjs index 63fa1ae8..da06ccd0 100644 --- a/scripts/smoke-nextra-routes.mjs +++ b/scripts/smoke-nextra-routes.mjs @@ -9,8 +9,28 @@ import { chromium } from '@playwright/test' const repositoryRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..') const outputRoot = resolve(repositoryRoot, 'docs-nextra', 'out') const basePath = process.env.DOCS_BASE_PATH ?? '' -const controllers = ['button', 'checkbox', 'envelope', 'input', 'knob', 'radio', 'slider', 'switch'] -const locales = ['en', 'zh'] +const allControllers = [ + 'button', + 'checkbox', + 'envelope', + 'input', + 'knob', + 'radio', + 'slider', + 'switch', +] +const allDisplays = ['lfo', 'light', 'oscilloscope', 'spectrogram', 'vumeter', 'waveform', 'card'] +const selectedDisplay = process.env.SMOKE_DISPLAY +const selectedLocale = process.env.SMOKE_LOCALE +const controllers = selectedDisplay ? [] : allControllers +const displays = selectedDisplay ? [selectedDisplay] : allDisplays +const locales = selectedLocale ? [selectedLocale] : ['en', 'zh'] + +assert.ok( + !selectedDisplay || allDisplays.includes(selectedDisplay), + 'SMOKE_DISPLAY must name a display', +) +assert.ok(!selectedLocale || ['en', 'zh'].includes(selectedLocale), 'SMOKE_LOCALE must be en or zh') assert.ok(!basePath || (basePath.startsWith('/') && !basePath.endsWith('/'))) @@ -19,6 +39,7 @@ const contentTypes = { '.html': 'text/html; charset=utf-8', '.js': 'text/javascript; charset=utf-8', '.json': 'application/json; charset=utf-8', + '.mp3': 'audio/mpeg', '.svg': 'image/svg+xml', '.woff2': 'font/woff2', } @@ -140,6 +161,59 @@ const exerciseDemo = async (page, controller, locale) => { } } +const waitForDisplayState = (page, display, state) => + page.waitForFunction( + ({ displayName, expectedState }) => + document + .querySelector(`[data-display-demo="${displayName}"]`) + ?.getAttribute('data-audio-state') === expectedState, + { displayName: display, expectedState: state }, + { timeout: 10_000 }, + ) + +const exerciseDisplay = async (page, display, locale) => { + const demo = page.locator(`[data-display-demo="${display}"]`) + + if (display === 'card') { + const toggleName = locale === 'zh' ? '旁通' : 'Bypass' + await demo.getByRole('button', { name: toggleName }).click() + assert.equal(await demo.getAttribute('data-audio-state'), 'not-applicable') + return + } + + const labels = + locale === 'zh' + ? { reconnect: '重新连接音频图', start: '启动信号', stop: '停止信号' } + : { reconnect: 'Reconnect graph', start: 'Start signal', stop: 'Stop signal' } + + await demo.getByRole('button', { name: labels.start }).click() + await waitForDisplayState(page, display, 'playing') + assert.equal(await demo.getAttribute('data-animation-active'), 'true') + assert.equal(await demo.getAttribute('data-graph-connected'), 'true') + const initialConnections = Number(await demo.getAttribute('data-connection-count')) + assert.ok(initialConnections >= 1, `${display} should connect a real audio graph`) + + await demo.getByRole('button', { name: labels.stop }).click() + await waitForDisplayState(page, display, 'stopped') + assert.equal(await demo.getAttribute('data-animation-active'), 'false') + assert.equal(await demo.getAttribute('data-graph-connected'), 'false') + + await demo.getByRole('button', { name: labels.reconnect }).click() + await waitForDisplayState(page, display, 'ready') + assert.equal(await demo.getAttribute('data-animation-active'), 'false') + assert.equal(await demo.getAttribute('data-graph-connected'), 'true') + assert.ok( + Number(await demo.getAttribute('data-connection-count')) > initialConnections, + `${display} should establish a new graph connection`, + ) + + await demo.getByRole('button', { name: labels.start }).click() + await waitForDisplayState(page, display, 'playing') + await demo.getByRole('button', { name: labels.stop }).click() + await waitForDisplayState(page, display, 'stopped') + assert.equal(await demo.getAttribute('data-graph-connected'), 'false') +} + const address = await listen() assert.ok(address && typeof address === 'object') @@ -149,30 +223,54 @@ let browser try { browser = await launchBrowser() - for (const locale of locales) { - for (const controller of controllers) { - const route = `${basePath}/${locale}/component/${controller}/` - const page = await browser.newPage() - const browserErrors = [] + const runComponentRoute = async ({ apiSelector, demoSelector, exercise, route }) => { + console.log(`Smoke: ${route}`) + const page = await browser.newPage() + const browserErrors = [] - page.on('pageerror', (error) => browserErrors.push(error.message)) - page.on('console', (message) => { - if (message.type() === 'error') browserErrors.push(message.text()) - }) + page.on('pageerror', (error) => browserErrors.push(error.message)) + page.on('console', (message) => { + if (message.type() === 'error') browserErrors.push(message.text()) + }) + try { const response = await page.goto(`${origin}${route}`, { waitUntil: 'networkidle' }) assert.ok(response?.ok(), `${route} should return a successful browser response`) - await page.locator(`[data-controller-demo="${controller}"]`).waitFor({ state: 'visible' }) - await page.locator(`[data-controller-api="${controller}"]`).waitFor({ state: 'visible' }) - await exerciseDemo(page, controller, locale) + await page.locator(demoSelector).waitFor({ state: 'visible' }) + await page.locator(apiSelector).waitFor({ state: 'visible' }) + await exercise(page) assert.deepEqual(browserErrors, [], `${route} should hydrate without browser errors`) - + } finally { await page.close() } } + + for (const locale of locales) { + for (const controller of controllers) { + const route = `${basePath}/${locale}/component/${controller}/` + await runComponentRoute({ + apiSelector: `[data-controller-api="${controller}"]`, + demoSelector: `[data-controller-demo="${controller}"]`, + exercise: (page) => exerciseDemo(page, controller, locale), + route, + }) + } + + for (const display of displays) { + const route = `${basePath}/${locale}/component/${display}/` + await runComponentRoute({ + apiSelector: `[data-display-api="${display}"]`, + demoSelector: `[data-display-demo="${display}"]`, + exercise: (page) => exerciseDisplay(page, display, locale), + route, + }) + } + } } finally { await browser?.close() await closeServer() } -console.log('Nextra browser smoke loaded and exercised all bilingual controller routes.') +console.log( + 'Nextra browser smoke exercised all bilingual component routes and audio lifecycle controls.', +) diff --git a/scripts/verify-nextra-output.mjs b/scripts/verify-nextra-output.mjs index b95fe69b..5af6078a 100644 --- a/scripts/verify-nextra-output.mjs +++ b/scripts/verify-nextra-output.mjs @@ -133,7 +133,7 @@ const pages = [ const locales = { en: { counterpart: 'zh', - controllerLabel: 'Controllers', + componentLabel: 'Components', editLink: 'Edit this page on GitHub', footer: 'Released under the MIT License.', guideLabel: 'Guide', @@ -141,7 +141,7 @@ const locales = { }, zh: { counterpart: 'en', - controllerLabel: '控制器', + componentLabel: '组件', editLink: '在 GitHub 上编辑此页', footer: '基于 MIT 许可证发布。', guideLabel: '指南', @@ -150,6 +150,7 @@ const locales = { } const controllers = ['button', 'checkbox', 'envelope', 'input', 'knob', 'radio', 'slider', 'switch'] +const displays = ['lfo', 'light', 'oscilloscope', 'spectrogram', 'vumeter', 'waveform', 'card'] for (const page of pages) { for (const [locale, labels] of Object.entries(locales)) { @@ -213,59 +214,76 @@ for (const locale of Object.keys(locales)) { assert.ok(!installationPage.includes('Tailwind CSS 3 或更高')) } +const verifyComponentRoute = async ({ component, kind, labels, locale, navigationAnchor }) => { + const html = await readFile( + resolve(outputRoot, locale, 'component', component, 'index.html'), + 'utf8', + ) + const localizedRoute = `/${locale}/component/${component}/` + const sourcePath = `content/${locale}/component/${component}.mdx` + + assert.match(html, new RegExp(`]+lang="${locale}"`)) + assert.ok( + html.includes(`data-${kind}-demo="${component}"`), + `${localizedRoute} should render its live local-package demo`, + ) + assert.ok( + html.includes(`data-${kind}-api="${component}"`), + `${localizedRoute} should render its public API reference`, + ) + assert.ok( + html.includes('pnpm add @nafr/echo-ui'), + `${localizedRoute} should include installation guidance`, + ) + assert.ok( + html.includes(`href="${withBasePath(localizedRoute)}"`), + `${localizedRoute} navigation should expose the localized route`, + ) + assert.ok( + html.includes(`href="${withBasePath(`/${locale}/component/${navigationAnchor}/`)}"`), + `${localizedRoute} should expose localized component navigation`, + ) + assert.ok( + html.includes(labels.componentLabel), + `${localizedRoute} should label component navigation`, + ) + assert.ok(html.includes('title="Change theme"'), `${localizedRoute} should switch themes`) + assert.ok(html.includes('title="Change language"'), `${localizedRoute} should switch locales`) + assert.ok(html.includes(labels.tocLabel), `${localizedRoute} should label its table of contents`) + assert.ok(html.includes(labels.editLink), `${localizedRoute} should expose its edit link`) + assert.ok(html.includes(labels.footer), `${localizedRoute} should include a localized footer`) + assert.ok( + html.includes(`https://github.com/codeacme17/echo-ui/tree/main/docs-nextra/${sourcePath}`), + `${localizedRoute} should edit the matching source file`, + ) + await access(resolve(outputRoot, labels.counterpart, 'component', component, 'index.html')) + await assertInternalLinksResolve(html, localizedRoute) + + for (const assetPath of html.matchAll(/(?:href|src)="([^"?]*\/_next\/[^"?]+)(?:\?[^"?]*)?"/g)) { + assert.ok(assetPath[1].startsWith(`${basePath}/_next/`)) + await access(resolve(outputRoot, decodeURIComponent(assetPath[1].slice(basePath.length + 1)))) + } +} + for (const [locale, labels] of Object.entries(locales)) { for (const controller of controllers) { - const html = await readFile( - resolve(outputRoot, locale, 'component', controller, 'index.html'), - 'utf8', - ) - const localizedRoute = `/${locale}/component/${controller}/` - const sourcePath = `content/${locale}/component/${controller}.mdx` - - assert.match(html, new RegExp(`]+lang="${locale}"`)) - assert.ok( - html.includes(`data-controller-demo="${controller}"`), - `${localizedRoute} should render its interactive local-package demo`, - ) - assert.ok( - html.includes(`data-controller-api="${controller}"`), - `${localizedRoute} should render its public API reference`, - ) - assert.ok( - html.includes('pnpm add @nafr/echo-ui'), - `${localizedRoute} should include installation guidance`, - ) - assert.ok( - html.includes(`href="${withBasePath(localizedRoute)}"`), - `${localizedRoute} navigation should expose the localized route`, - ) - assert.ok( - html.includes(`href="${withBasePath(`/${locale}/component/button/`)}"`), - `${localizedRoute} should expose localized controller navigation`, - ) - assert.ok( - html.includes(labels.controllerLabel), - `${localizedRoute} should label controller navigation`, - ) - assert.ok(html.includes('title="Change theme"'), `${localizedRoute} should switch themes`) - assert.ok(html.includes('title="Change language"'), `${localizedRoute} should switch locales`) - assert.ok( - html.includes(labels.tocLabel), - `${localizedRoute} should label its table of contents`, - ) - assert.ok(html.includes(labels.editLink), `${localizedRoute} should expose its edit link`) - assert.ok(html.includes(labels.footer), `${localizedRoute} should include a localized footer`) - assert.ok( - html.includes(`https://github.com/codeacme17/echo-ui/tree/main/docs-nextra/${sourcePath}`), - `${localizedRoute} should edit the matching source file`, - ) - await access(resolve(outputRoot, labels.counterpart, 'component', controller, 'index.html')) - await assertInternalLinksResolve(html, localizedRoute) + await verifyComponentRoute({ + component: controller, + kind: 'controller', + labels, + locale, + navigationAnchor: 'button', + }) + } - for (const assetPath of html.matchAll(/(?:href|src)="([^"?]*\/_next\/[^"?]+)(?:\?[^"?]*)?"/g)) { - assert.ok(assetPath[1].startsWith(`${basePath}/_next/`)) - await access(resolve(outputRoot, decodeURIComponent(assetPath[1].slice(basePath.length + 1)))) - } + for (const display of displays) { + await verifyComponentRoute({ + component: display, + kind: 'display', + labels, + locale, + navigationAnchor: 'lfo', + }) } } @@ -287,5 +305,5 @@ const css = ( assert.ok(css.includes('--echo-primary'), 'static CSS should include Echo UI styles') console.log( - 'Nextra static output exposes bilingual guides, controller routes, API references, and live Echo UI demos.', + 'Nextra static output exposes bilingual guides, component routes, API references, and live Echo UI demos.', )