@workflow/web-shared 5.0.0-beta.34 → 5.0.0-beta.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/dist/components/new-trace-viewer/components/event-list.d.ts.map +1 -1
  2. package/dist/components/new-trace-viewer/components/event-list.js +10 -7
  3. package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +1 -1
  4. package/dist/components/new-trace-viewer/components/split-pane.js +5 -5
  5. package/dist/components/new-trace-viewer/components/timeline.d.ts +8 -2
  6. package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -1
  7. package/dist/components/new-trace-viewer/components/timeline.js +95 -26
  8. package/dist/components/new-trace-viewer/components/trace-shortcut-helper.js +2 -2
  9. package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -1
  10. package/dist/components/new-trace-viewer/trace-viewer.js +14 -11
  11. package/dist/components/new-trace-viewer/utils.d.ts +29 -0
  12. package/dist/components/new-trace-viewer/utils.d.ts.map +1 -1
  13. package/dist/components/new-trace-viewer/utils.js +49 -5
  14. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  15. package/dist/components/sidebar/attribute-panel.js +2 -1
  16. package/dist/components/sidebar/attributes-block.js +2 -2
  17. package/package.json +5 -5
  18. package/src/components/new-trace-viewer/components/event-list.tsx +21 -11
  19. package/src/components/new-trace-viewer/components/split-pane.tsx +14 -4
  20. package/src/components/new-trace-viewer/components/timeline.tsx +158 -47
  21. package/src/components/new-trace-viewer/components/trace-shortcut-helper.tsx +1 -1
  22. package/src/components/new-trace-viewer/trace-viewer.tsx +44 -38
  23. package/src/components/new-trace-viewer/utils.test.ts +211 -0
  24. package/src/components/new-trace-viewer/utils.ts +82 -4
  25. package/src/components/sidebar/attribute-panel.tsx +1 -0
  26. package/src/components/sidebar/attributes-block.tsx +1 -1
@@ -1,11 +1,11 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { ArrowLeft, ArrowRight } from 'lucide-react';
4
4
  import { Fragment, memo, useCallback, useEffect, useMemo, useRef, useState, } from 'react';
5
5
  import { cn } from '../../../lib/cn';
6
6
  import { formatDurationPrecise, getHighResInMs, } from '../../trace-viewer/util/timing';
7
7
  import { isSpanDimmedBySearch } from '../search';
8
- import { computeOffscreenMarkers, computeSpanGaps, computeSpanMarkers, computeSpanSegments, getResourceColor, getSpanDurationMs, isSpanErrored, } from '../utils';
8
+ import { computeOffscreenMarkers, computeSpanDelta, computeSpanGaps, computeSpanMarkers, computeSpanSegments, getResourceColor, getSpanDurationMs, isSpanErrored, } from '../utils';
9
9
  import { cullCollidingMarkers, MarkerLayer, OffscreenMarkerIndicator, projectMarkers, } from './span-markers';
10
10
  import styles from './timeline.module.css';
11
11
  import { ROW_HEIGHT_PX, useRowWindow } from './use-row-window';
@@ -122,6 +122,10 @@ function projectSegments(segments, spanStartMs, spanDurationMs, geometry) {
122
122
  // ---------------------------------------------------------------------------
123
123
  // Small render helpers
124
124
  // ---------------------------------------------------------------------------
125
+ /** Estimated rendered width of a 10px-mono duration label (6px/glyph + padding). */
126
+ function estimateLabelWidthPx(label) {
127
+ return label.length * 6 + 12;
128
+ }
125
129
  function DurationLabel({ label, className, }) {
126
130
  return (_jsx("span", { className: cn('pointer-events-none absolute inset-0 flex items-center justify-start overflow-hidden px-1 text-[10px] font-mono font-medium leading-none whitespace-nowrap text-left text-gray-1000 tabular-nums opacity-0 group-hover/timeline-row:opacity-100', className), children: label }));
127
131
  }
@@ -143,7 +147,7 @@ function SegmentBar({ segments, showLabels = true, }) {
143
147
  if (seg.status === 'queued') {
144
148
  const leadInLabel = formatDurationPrecise(seg.fullDurationMs);
145
149
  const showLeadInLabel = showLabels &&
146
- seg.pixelWidth >= Math.max(40, leadInLabel.length * 6 + 12);
150
+ seg.pixelWidth >= Math.max(40, estimateLabelWidthPx(leadInLabel));
147
151
  const isFullWidthQueued = segments.length === 1;
148
152
  return (_jsxs(Fragment, { children: [_jsx(LeadInConnector, { leftPct: seg.leftPct, widthPct: seg.widthPct, label: showLeadInLabel ? leadInLabel : null }), isFullWidthQueued ? (_jsx("div", { className: "absolute top-1/2 h-4 w-px -translate-y-1/2 bg-gray-500", style: {
149
153
  left: `calc(${seg.leftPct + seg.widthPct}% - 1.5px)`,
@@ -151,7 +155,8 @@ function SegmentBar({ segments, showLabels = true, }) {
151
155
  }
152
156
  const label = formatDurationPrecise(seg.fullDurationMs);
153
157
  // Only render the label when there's enough room for it without clipping.
154
- const showLabel = showLabels && seg.pixelWidth >= Math.max(40, label.length * 6 + 12);
158
+ const showLabel = showLabels &&
159
+ seg.pixelWidth >= Math.max(40, estimateLabelWidthPx(label));
155
160
  return (_jsxs("div", { className: cn('absolute h-full overflow-hidden rounded-[0.25rem]', SEGMENT_CLASSES[seg.status]), style: {
156
161
  // 1px gap between adjacent segments, distributed equally.
157
162
  left: `calc(${seg.leftPct}% + 0.5px)`,
@@ -193,7 +198,8 @@ const TimelineBar = memo(function TimelineBar({ span, viewStart, viewDuration, c
193
198
  ? (colors.errorBorder ?? 'var(--ds-red-500)')
194
199
  : colors.border;
195
200
  const totalLabel = formatDurationPrecise(totalDurationMs);
196
- const showTotalLabel = geometry.visiblePixelWidth >= Math.max(40, totalLabel.length * 6 + 12);
201
+ const showTotalLabel = geometry.visiblePixelWidth >=
202
+ Math.max(40, estimateLabelWidthPx(totalLabel));
197
203
  const handleClick = useCallback(() => {
198
204
  onSelect(span.spanId);
199
205
  }, [onSelect, span.spanId]);
@@ -203,21 +209,58 @@ const TimelineBar = memo(function TimelineBar({ span, viewStart, viewDuration, c
203
209
  });
204
210
  export { TimelineBar };
205
211
  // ---------------------------------------------------------------------------
206
- // DeltaIndicator (Alt-key gap overlay)
212
+ // DeltaMeasureLine (Alt-key measurement overlays: the selected ↔ hovered
213
+ // measurement, and the ambient consecutive-gap indicators shown without a
214
+ // selection)
207
215
  // ---------------------------------------------------------------------------
208
- const DELTA_CAP_HEIGHT_PX = 8;
209
- // Vertical offset to sit the indicator inside the gap between row N and N+1,
210
- // aligned with where the bar starts in the next row (rows center a 24px bar
211
- // inside 40px, so bars start ~8px from the top of the row).
212
- const DELTA_ROW_OFFSET_PX = 8;
213
- const DeltaIndicator = memo(function DeltaIndicator({ leftFrac, rightFrac, label, rowIndex, }) {
214
- const centerY = DELTA_ROW_OFFSET_PX + (rowIndex + 1) * ROW_HEIGHT_PX;
215
- return (_jsxs("div", { className: "absolute pointer-events-none", style: {
216
- left: `${leftFrac * 100}%`,
217
- width: `${(rightFrac - leftFrac) * 100}%`,
218
- top: centerY - DELTA_CAP_HEIGHT_PX / 2,
219
- height: DELTA_CAP_HEIGHT_PX,
220
- }, children: [_jsx("div", { className: "absolute left-0 top-0 w-px h-full bg-amber-800" }), _jsx("div", { className: "absolute left-0 right-0 top-1/2 h-px bg-amber-800" }), _jsx("div", { className: "absolute right-0 top-0 w-px h-full bg-amber-800" }), _jsx("span", { className: "absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 text-label-12 leading-none whitespace-nowrap rounded-xs px-1 py-0.5 text-gray-100 bg-amber-800", children: label })] }));
216
+ // Horizontal distance between the anchor bar's measured edge and the vertical
217
+ // guide also the width of the connector stub bridging the two.
218
+ const MEASURE_GUIDE_OUTSET_PX = 4;
219
+ const DeltaMeasureLine = memo(function DeltaMeasureLine({ delta, anchorRowIndex, hoveredRowIndex, timelineWidth, }) {
220
+ // Both ends of the measurement align with the vertical middle of the bars
221
+ // (bars are centered in their rows, so bar center == row center).
222
+ const anchorCenterY = anchorRowIndex * ROW_HEIGHT_PX + ROW_HEIGHT_PX / 2;
223
+ const lineY = hoveredRowIndex * ROW_HEIGHT_PX + ROW_HEIGHT_PX / 2;
224
+ // Guide connecting the middle of the anchor bar down/up to the line, so
225
+ // the measurement's origin stays legible when the rows are far apart.
226
+ // It sits just outside the anchor bar's measured edge (so it doesn't blend
227
+ // into the bar's border), joined to the bar by a short horizontal stub. The
228
+ // line runs from the elbow corner (the guide's x) to the hovered span's
229
+ // measured edge — pulled short of the edge arrow when the hovered span is
230
+ // fully off-screen.
231
+ const guideTop = Math.min(anchorCenterY, lineY);
232
+ const guideBottom = Math.max(anchorCenterY, lineY);
233
+ const anchorX = delta.anchorFrac * timelineWidth;
234
+ const guideX = anchorX +
235
+ (delta.anchorEdge === 'end'
236
+ ? MEASURE_GUIDE_OUTSET_PX
237
+ : -MEASURE_GUIDE_OUTSET_PX);
238
+ const arrowClearance = delta.hoveredOffscreen === 'right'
239
+ ? -(TINY_BAR_BOX_SIZE_PX + 4)
240
+ : delta.hoveredOffscreen === 'left'
241
+ ? TINY_BAR_BOX_SIZE_PX + 4
242
+ : 0;
243
+ const hoveredX = delta.hoveredFrac * timelineWidth + arrowClearance;
244
+ const startX = Math.min(guideX, hoveredX);
245
+ const endX = Math.max(guideX, hoveredX);
246
+ const label = formatDurationPrecise(delta.deltaMs);
247
+ const labelWidthPx = estimateLabelWidthPx(label);
248
+ // Center the label on the line; when the line is too short, place it beside
249
+ // the right endpoint, flipping left near the viewport's right edge.
250
+ const labelPlacement = endX - startX >= labelWidthPx
251
+ ? { left: (startX + endX) / 2, translate: '-translate-x-1/2' }
252
+ : endX + 4 + labelWidthPx <= timelineWidth
253
+ ? { left: endX + 4, translate: '' }
254
+ : { left: startX - 4, translate: '-translate-x-full' };
255
+ return (_jsxs(_Fragment, { children: [_jsx("div", { className: "absolute h-px bg-amber-800", style: {
256
+ left: Math.min(anchorX, guideX),
257
+ width: MEASURE_GUIDE_OUTSET_PX,
258
+ top: anchorCenterY,
259
+ } }), _jsx("div", { className: "absolute w-px bg-amber-800", style: {
260
+ left: guideX,
261
+ top: guideTop,
262
+ height: guideBottom - guideTop,
263
+ } }), _jsx("div", { className: "absolute h-px bg-amber-800", style: { left: startX, width: Math.max(endX - startX, 1), top: lineY } }), _jsx("span", { className: cn('absolute -translate-y-1/2 font-mono text-[10px] font-medium leading-none tabular-nums whitespace-nowrap rounded-xs bg-background-100 px-1 py-0.5 text-amber-800', labelPlacement.translate), style: { left: labelPlacement.left, top: lineY }, children: label })] }));
221
264
  });
222
265
  // ---------------------------------------------------------------------------
223
266
  // TimelineHeader
@@ -225,10 +268,7 @@ const DeltaIndicator = memo(function DeltaIndicator({ leftFrac, rightFrac, label
225
268
  export function TimelineHeader({ markers, hoverInfo, }) {
226
269
  return (_jsx("div", { className: "relative bg-background-100 border-b border-gray-alpha-400 h-10 min-h-10 flex items-end px-4 pb-1", children: _jsxs("div", { className: "relative h-full flex-1", children: [markers.map((m) => (_jsx("span", { className: "absolute bottom-1 font-mono text-xs font-normal leading-4 text-gray-900 whitespace-nowrap", style: { left: `${m.position * 100}%` }, children: m.label }, String(m.value)))), hoverInfo && (_jsx("span", { className: "absolute top-1 pointer-events-none z-10 font-mono text-[11px] leading-4 text-gray-1000 whitespace-nowrap bg-background-100 border border-gray-alpha-400 rounded px-1 -translate-x-1/2", style: { left: `${hoverInfo.fraction * 100}%` }, children: hoverInfo.label }))] }) }));
227
270
  }
228
- // ---------------------------------------------------------------------------
229
- // Timeline
230
- // ---------------------------------------------------------------------------
231
- export function Timeline({ spans, viewStart, viewEnd, markers, selectedId, searchResult, onSelect, onRevealTime, hoverFraction, altHeld = false, }) {
271
+ export function Timeline({ spans, viewStart, viewEnd, markers, selectedId, searchResult, onSelect, onRevealTime, hover, altHeld = false, }) {
232
272
  const containerRef = useRef(null);
233
273
  const [containerWidth, setContainerWidth] = useState(0);
234
274
  const viewDuration = viewEnd - viewStart;
@@ -244,9 +284,38 @@ export function Timeline({ spans, viewStart, viewEnd, markers, selectedId, searc
244
284
  ro.observe(el);
245
285
  return () => ro.disconnect();
246
286
  }, []);
247
- const gaps = useMemo(() => computeSpanGaps(spans, viewStart, viewEnd), [spans, viewStart, viewEnd]);
287
+ // Each consecutive gap renders as a measurement from the earlier span's end
288
+ // edge to the next span's start, in the same visual language as the
289
+ // selected ↔ hovered measurement.
290
+ const gapMeasurements = useMemo(() => computeSpanGaps(spans, viewStart, viewEnd).map((gap) => ({
291
+ delta: {
292
+ deltaMs: gap.gapMs,
293
+ anchorFrac: gap.leftFrac,
294
+ hoveredFrac: gap.rightFrac,
295
+ anchorEdge: 'end',
296
+ hoveredOffscreen: null,
297
+ },
298
+ anchorRowIndex: gap.rowIndex,
299
+ hoveredRowIndex: gap.rowIndex + 1,
300
+ })), [spans, viewStart, viewEnd]);
301
+ // With a span selected, Alt+hover measures selected ↔ hovered instead of
302
+ // showing the all-sibling-gaps overlay.
303
+ const anchorIndex = useMemo(() => (selectedId ? spans.findIndex((s) => s.spanId === selectedId) : -1), [spans, selectedId]);
304
+ const measurement = useMemo(() => {
305
+ if (!altHeld || hover == null || hover.rowIndex === anchorIndex) {
306
+ return null;
307
+ }
308
+ const anchorSpan = spans[anchorIndex];
309
+ const hoveredSpan = spans[hover.rowIndex];
310
+ if (!anchorSpan || !hoveredSpan)
311
+ return null;
312
+ const delta = computeSpanDelta(anchorSpan, hoveredSpan, viewStart, viewEnd);
313
+ return delta
314
+ ? { delta, anchorRowIndex: anchorIndex, hoveredRowIndex: hover.rowIndex }
315
+ : null;
316
+ }, [altHeld, anchorIndex, hover, spans, viewStart, viewEnd]);
248
317
  return (_jsxs("div", { ref: containerRef, className: "relative h-full overflow-hidden", style: { minHeight: spans.length * ROW_HEIGHT_PX }, children: [_jsx("div", { "aria-hidden": true, className: "absolute inset-y-0 pointer-events-none", style: TIMELINE_INSET_STYLE, children: markers.map((marker) =>
249
318
  // Skip the "0s" origin marker since the left edge already implies it.
250
- Math.abs(marker.value) > 0.000001 ? (_jsx("div", { className: "absolute top-0 bottom-0 w-px bg-gray-alpha-300", style: { left: `${marker.position * 100}%` } }, String(marker.value))) : null) }), hoverFraction != null && (_jsx("div", { className: "absolute inset-y-0 pointer-events-none z-10", style: TIMELINE_INSET_STYLE, children: _jsx("div", { className: "absolute top-0 bottom-0 w-px bg-gray-alpha-500", style: { left: `${hoverFraction * 100}%` } }) })), _jsx("div", { style: { transform: `translateY(${start * ROW_HEIGHT_PX}px)` }, children: spans.slice(start, end).map((span) => (_jsx(TimelineBar, { span: span, viewStart: viewStart, viewDuration: viewDuration, containerWidth: timelineWidth, isSelected: selectedId === span.spanId, isDimmed: isSpanDimmedBySearch(span.spanId, searchResult), onSelect: onSelect, onRevealTime: onRevealTime }, span.spanId))) }), altHeld && (_jsx("div", { "aria-hidden": true, className: "absolute inset-y-0 pointer-events-none", style: TIMELINE_INSET_STYLE, children: gaps.map((gap) => (_jsx(DeltaIndicator, { leftFrac: gap.leftFrac, rightFrac: gap.rightFrac, label: formatDurationPrecise(gap.gapMs), rowIndex: gap.rowIndex }, gap.rowIndex))) }))] }));
319
+ Math.abs(marker.value) > 0.000001 ? (_jsx("div", { className: "absolute top-0 bottom-0 w-px bg-gray-alpha-300", style: { left: `${marker.position * 100}%` } }, String(marker.value))) : null) }), hover != null && (_jsx("div", { className: "absolute inset-y-0 pointer-events-none z-10", style: TIMELINE_INSET_STYLE, children: _jsx("div", { className: "absolute top-0 bottom-0 w-px bg-gray-alpha-500", style: { left: `${hover.fraction * 100}%` } }) })), _jsx("div", { style: { transform: `translateY(${start * ROW_HEIGHT_PX}px)` }, children: spans.slice(start, end).map((span) => (_jsx(TimelineBar, { span: span, viewStart: viewStart, viewDuration: viewDuration, containerWidth: timelineWidth, isSelected: selectedId === span.spanId, isDimmed: isSpanDimmedBySearch(span.spanId, searchResult), onSelect: onSelect, onRevealTime: onRevealTime }, span.spanId))) }), altHeld && anchorIndex < 0 && (_jsx("div", { "aria-hidden": true, className: "absolute inset-y-0 pointer-events-none", style: TIMELINE_INSET_STYLE, children: gapMeasurements.map((gap) => (_jsx(DeltaMeasureLine, { ...gap, timelineWidth: timelineWidth }, gap.anchorRowIndex))) })), measurement && (_jsx("div", { "aria-hidden": true, className: "absolute inset-y-0 pointer-events-none z-20", style: TIMELINE_INSET_STYLE, children: _jsx(DeltaMeasureLine, { ...measurement, timelineWidth: timelineWidth }) }))] }));
251
320
  }
252
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9uZXctdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvdGltZWxpbmUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVyRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLElBQUksRUFDSixXQUFXLEVBQ1gsU0FBUyxFQUNULE9BQU8sRUFDUCxNQUFNLEVBQ04sUUFBUSxHQUNULE1BQU0sT0FBTyxDQUFDO0FBQ2YsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JDLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsY0FBYyxHQUNmLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLG9CQUFvQixFQUF5QixNQUFNLFdBQVcsQ0FBQztBQVF4RSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsYUFBYSxHQUNkLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsV0FBVyxFQUNYLHdCQUF3QixFQUN4QixjQUFjLEdBQ2YsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLE1BQU0sTUFBTSx1QkFBdUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9ELDhFQUE4RTtBQUM5RSxZQUFZO0FBQ1osOEVBQThFO0FBRTlFLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztBQUV0QyxNQUFN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QUMxQyxHQUNFLENBQ1AsRUFDRCxjQUFLLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxjQUFjLEtBQUssR0FBRyxhQUFhLEtBQUssRUFBRSxZQUNoRSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQ3JDLEtBQUMsV0FBVyxJQUVWLElBQUksRUFBRSxJQUFJLEVBQ1YsU0FBUyxFQUFFLFNBQVMsRUFDcEIsWUFBWSxFQUFFLFlBQVksRUFDMUIsY0FBYyxFQUFFLGFBQWEsRUFDN0IsVUFBVSxFQUFFLFVBQVUsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUN0QyxRQUFRLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsRUFDekQsUUFBUSxFQUFFLFFBQVEsRUFDbEIsWUFBWSxFQUFFLFlBQVksSUFSckIsSUFBSSxDQUFDLE1BQU0sQ0FTaEIsQ0FDSCxDQUFDLEdBQ0UsRUFDTCxPQUFPLElBQUksQ0FDVixtQ0FFRSxTQUFTLEVBQUMsd0NBQXdDLEVBQ2xELEtBQUssRUFBRSxvQkFBb0IsWUFFMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FDakIsS0FBQyxjQUFjLElBRWIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQ3RCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUN4QixLQUFLLEVBQUUscUJBQXFCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUN2QyxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsSUFKakIsR0FBRyxDQUFDLFFBQVEsQ0FLakIsQ0FDSCxDQUFDLEdBQ0UsQ0FDUCxJQUNHLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IEFycm93TGVmdCwgQXJyb3dSaWdodCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgdHlwZSB7IENTU1Byb3BlcnRpZXMsIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG4gIEZyYWdtZW50LFxuICBtZW1vLFxuICB1c2VDYWxsYmFjayxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4uLy4uLy4uL2xpYi9jbic7XG5pbXBvcnQge1xuICBmb3JtYXREdXJhdGlvblByZWNpc2UsXG4gIGdldEhpZ2hSZXNJbk1zLFxufSBmcm9tICcuLi8uLi90cmFjZS12aWV3ZXIvdXRpbC90aW1pbmcnO1xuaW1wb3J0IHsgaXNTcGFuRGltbWVkQnlTZWFyY2gsIHR5cGUgU3BhblNlYXJjaFJlc3VsdCB9IGZyb20gJy4uL3NlYXJjaCc7XG5pbXBvcnQgdHlwZSB7IFNwYW4gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7XG4gIE9mZnNjcmVlbk1hcmtlcnMsXG4gIFNlZ21lbnQsXG4gIFNlZ21lbnRTdGF0dXMsXG4gIFRpbWVNYXJrZXIsXG59IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7XG4gIGNvbXB1dGVPZmZzY3JlZW5NYXJrZXJzLFxuICBjb21wdXRlU3BhbkdhcHMsXG4gIGNvbXB1dGVTcGFuTWFya2VycyxcbiAgY29tcHV0ZVNwYW5TZWdtZW50cyxcbiAgZ2V0UmVzb3VyY2VDb2xvcixcbiAgZ2V0U3BhbkR1cmF0aW9uTXMsXG4gIGlzU3BhbkVycm9yZWQsXG59IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7XG4gIGN1bGxDb2xsaWRpbmdNYXJrZXJzLFxuICBNYXJrZXJMYXllcixcbiAgT2Zmc2NyZWVuTWFya2VySW5kaWNhdG9yLFxuICBwcm9qZWN0TWFya2Vycyxcbn0gZnJvbSAnLi9zcGFuLW1hcmtlcnMnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3RpbWVsaW5lLm1vZHVsZS5jc3MnO1xuaW1wb3J0IHsgUk9XX0hFSUdIVF9QWCwgdXNlUm93V2luZG93IH0gZnJvbSAnLi91c2Utcm93LXdpbmRvdyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ29uc3RhbnRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgVElOWV9CQVJfQk9YX1NJWkVfUFggPSAyNDtcbmNvbnN0IFRJTllfQkFSX1dJRFRIX1BYID0gNDtcbmV4cG9ydCBjb25zdCBUSU1FTElORV9QQURESU5HX1BYID0gMTY7XG5cbmNvbnN0IFNFR01FTlRfQ0xBU1NFUzogUmVjb3JkPFNlZ21lbnRTdGF0dXMsIHN0cmluZz4gPSB7XG4gIHF1ZXVlZDogJ2JnLWdyYXktNDAwIGJvcmRlciBib3JkZXItZ3JheS01MDAnLFxuICBwZW5kaW5nOiAnYmctZ3JheS0yMDAgYm9yZGVyIGJvcmRlci1ncmF5LTUwMCcsXG4gIHJldHJ5aW5nOiAnYmctZ3JheS00MDAgYm9yZGVyIGJvcmRlci1ncmF5LTUwMCcsXG4gIHdhaXRpbmc6ICdiZy1ncmF5LTIwMCBib3JkZXIgYm9yZGVyLWdyYXktNTAwJyxcbiAgcnVubmluZzogJ2JnLWJsdWUtMjAwIGJvcmRlciBib3JkZXItYmx1ZS01MDAnLFxuICBjb21wbGV0ZWQ6ICdiZy1ibHVlLTIwMCBib3JkZXIgYm9yZGVyLWJsdWUtNTAwJyxcbiAgZmFpbGVkOiAnYmctcmVkLTIwMCBib3JkZXIgYm9yZGVyLXJlZC01MDAnLFxuICBzdWNjZWVkZWQ6ICdiZy1ncmVlbi0yMDAgYm9yZGVyIGJvcmRlci1ncmVlbi01MDAnLFxuICBzbGVlcGluZzogJ2JnLWdyYXktNDAwIGJvcmRlciBib3JkZXItZ3JheS01MDAnLFxuICByZWNlaXZlZDogJ2JnLWJsdWUtMjAwIGJvcmRlciBib3JkZXItYmx1ZS01MDAnLFxufTtcblxuY29uc3QgVElNRUxJTkVfSU5TRVRfU1RZTEU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGxlZnQ6IFRJTUVMSU5FX1BBRERJTkdfUFgsXG4gIHJpZ2h0OiBUSU1FTElORV9QQURESU5HX1BYLFxufTtcblxuY29uc3QgU1RSSVBFRF9TRUdNRU5UX1NUQVRVU0VTOiBSZWFkb25seVNldDxTZWdtZW50U3RhdHVzPiA9IG5ldyBTZXQoW1xuICAncGVuZGluZycsXG4gICdydW5uaW5nJyxcbiAgJ3JlY2VpdmVkJyxcbl0pO1xuXG5mdW5jdGlvbiBBbmltYXRlZFN0cmlwZXMoeyBzdGF0dXMgfTogeyBzdGF0dXM6IFNlZ21lbnRTdGF0dXMgfSk6IFJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgYXJpYS1oaWRkZW5cbiAgICAgIGNsYXNzTmFtZT17XG4gICAgICAgIHN0YXR1cyA9PT0gJ3BlbmRpbmcnID8gc3R5bGVzLnBlbmRpbmdTdHJpcGVzIDogc3R5bGVzLnJ1bm5pbmdTdHJpcGVzXG4gICAgICB9XG4gICAgLz5cbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBCYXIgZ2VvbWV0cnlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50eXBlIEJhck1vZGUgPVxuICB8IHsga2luZDogJ2Fycm93JzsgZGlyZWN0aW9uOiAnbGVmdCcgfCAncmlnaHQnIH1cbiAgfCB7IGtpbmQ6ICd0aW55JyB9XG4gIHwgeyBraW5kOiAnZnVsbCcgfTtcblxuaW50ZXJmYWNlIEJhckdlb21ldHJ5IHtcbiAgbW9kZTogQmFyTW9kZTtcbiAgbGVmdFBjdDogbnVtYmVyO1xuICB3aWR0aFBjdDogbnVtYmVyO1xuICB2aXNpYmxlU3RhcnRNczogbnVtYmVyO1xuICB2aXNpYmxlRW5kTXM6IG51bWJlcjtcbiAgdmlzaWJsZVBpeGVsV2lkdGg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb21wdXRlIHRoZSBiYXIncyBnZW9tZXRyeSBpbnNpZGUgdGhlIHRpbWVsaW5lIHZpZXdwb3J0LiBQZXJjZW50YWdlcyBhcmVcbiAqIGFsd2F5cyBpbiBbMCwgMTAwXSBzbyB3ZSBuZXZlciBlbWl0IENTUyB2YWx1ZXMgdGhhdCBleGNlZWQgYnJvd3NlciBsYXlvdXRcbiAqIGxpbWl0cyBhdCBleHRyZW1lIHpvb20uXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVCYXJHZW9tZXRyeShcbiAgc3RhcnRNczogbnVtYmVyLFxuICBlbmRNczogbnVtYmVyLFxuICB2aWV3U3RhcnQ6IG51bWJlcixcbiAgdmlld0VuZDogbnVtYmVyLFxuICBjb250YWluZXJXaWR0aDogbnVtYmVyXG4pOiBCYXJHZW9tZXRyeSB7XG4gIGNvbnN0IHZpZXdEdXJhdGlvbiA9IHZpZXdFbmQgLSB2aWV3U3RhcnQ7XG4gIGNvbnN0IHZpc2libGVTdGFydE1zID0gTWF0aC5tYXgoc3RhcnRNcywgdmlld1N0YXJ0KTtcbiAgY29uc3QgdmlzaWJsZUVuZE1zID0gTWF0aC5taW4oZW5kTXMsIHZpZXdFbmQpO1xuICBjb25zdCB2aXNpYmxlRHVyYXRpb25NcyA9IE1hdGgubWF4KDAsIHZpc2libGVFbmRNcyAtIHZpc2libGVTdGFydE1zKTtcbiAgY29uc3Qgd2lkdGhGcmFjID0gdmlld0R1cmF0aW9uID4gMCA/IHZpc2libGVEdXJhdGlvbk1zIC8gdmlld0R1cmF0aW9uIDogMDtcbiAgY29uc3QgdmlzaWJsZVBpeGVsV2lkdGggPSB3aWR0aEZyYWMgKiBjb250YWluZXJXaWR0aDtcblxuICBjb25zdCBpc1RpbnkgPSBjb250YWluZXJXaWR0aCA+IDAgJiYgdmlzaWJsZVBpeGVsV2lkdGggPCBUSU5ZX0JBUl9CT1hfU0laRV9QWDtcbiAgY29uc3QgZXh0ZW5kc09mZkxlZnQgPSBzdGFydE1zIDwgdmlld1N0YXJ0O1xuICBjb25zdCBleHRlbmRzT2ZmUmlnaHQgPSBlbmRNcyA+IHZpZXdFbmQ7XG5cbiAgY29uc3QgbW9kZTogQmFyTW9kZSA9XG4gICAgaXNUaW55ICYmIChleHRlbmRzT2ZmTGVmdCB8fCBleHRlbmRzT2ZmUmlnaHQpXG4gICAgICA/IHsga2luZDogJ2Fycm93JywgZGlyZWN0aW9uOiBleHRlbmRzT2ZmUmlnaHQgPyAncmlnaHQnIDogJ2xlZnQnIH1cbiAgICAgIDogaXNUaW55XG4gICAgICAgID8geyBraW5kOiAndGlueScgfVxuICAgICAgICA6IHsga2luZDogJ2Z1bGwnIH07XG5cbiAgcmV0dXJuIHtcbiAgICBtb2RlLFxuICAgIGxlZnRQY3Q6XG4gICAgICB2aWV3RHVyYXRpb24gPiAwXG4gICAgICAgID8gKCh2aXNpYmxlU3RhcnRNcyAtIHZpZXdTdGFydCkgLyB2aWV3RHVyYXRpb24pICogMTAwXG4gICAgICAgIDogMCxcbiAgICB3aWR0aFBjdDogd2lkdGhGcmFjICogMTAwLFxuICAgIHZpc2libGVTdGFydE1zLFxuICAgIHZpc2libGVFbmRNcyxcbiAgICB2aXNpYmxlUGl4ZWxXaWR0aCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0QmFyUG9zaXRpb25TdHlsZShnZW9tZXRyeTogQmFyR2VvbWV0cnkpOiB7XG4gIGxlZnQ6IHN0cmluZztcbiAgd2lkdGg6IHN0cmluZztcbn0ge1xuICBzd2l0Y2ggKGdlb21ldHJ5Lm1vZGUua2luZCkge1xuICAgIGNhc2UgJ2Fycm93JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6XG4gICAgICAgICAgZ2VvbWV0cnkubW9kZS5kaXJlY3Rpb24gPT09ICdyaWdodCdcbiAgICAgICAgICAgID8gYGNhbGMoMTAwJSAtICR7VElOWV9CQVJfQk9YX1NJWkVfUFh9cHgpYFxuICAgICAgICAgICAgOiAnMHB4JyxcbiAgICAgICAgd2lkdGg6IGAke1RJTllfQkFSX0JPWF9TSVpFX1BYfXB4YCxcbiAgICAgIH07XG4gICAgY2FzZSAndGlueSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiBgbWluKCR7Z2VvbWV0cnkubGVmdFBjdH0lLCBjYWxjKDEwMCUgLSAke1RJTllfQkFSX1dJRFRIX1BYfXB4KSlgLFxuICAgICAgICB3aWR0aDogYCR7VElOWV9CQVJfV0lEVEhfUFh9cHhgLFxuICAgICAgfTtcbiAgICBjYXNlICdmdWxsJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IGAke2dlb21ldHJ5LmxlZnRQY3R9JWAsXG4gICAgICAgIHdpZHRoOiBgbWF4KCR7Z2VvbWV0cnkud2lkdGhQY3R9JSwgNHB4KWAsXG4gICAgICB9O1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VnbWVudCBwcm9qZWN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuaW50ZXJmYWNlIFZpc2libGVTZWdtZW50IHtcbiAgc3RhdHVzOiBTZWdtZW50U3RhdHVzO1xuICBsZWZ0UGN0OiBudW1iZXI7XG4gIHdpZHRoUGN0OiBudW1iZXI7XG4gIHBpeGVsV2lkdGg6IG51bWJlcjtcbiAgZnVsbER1cmF0aW9uTXM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQcm9qZWN0IHN0YXR1cyBzZWdtZW50cyBvbnRvIHRoZSB2aXNpYmxlIHBvcnRpb24gb2YgYSBiYXIuIFNlZ21lbnRzIGZ1bGx5XG4gKiBvdXRzaWRlIHRoZSB2aXNpYmxlIHdpbmRvdyBhcmUgZHJvcHBlZDsgc2VnbWVudHMgY3Jvc3NpbmcgdGhlIGVkZ2UgYXJlXG4gKiBjbGlwcGVkIHRvIFswJSwgMTAwJV0gb2YgdGhlIHZpc2libGUgYmFyLlxuICovXG5mdW5jdGlvbiBwcm9qZWN0U2VnbWVudHMoXG4gIHNlZ21lbnRzOiBTZWdtZW50W10sXG4gIHNwYW5TdGFydE1zOiBudW1iZXIsXG4gIHNwYW5EdXJhdGlvbk1zOiBudW1iZXIsXG4gIGdlb21ldHJ5OiBCYXJHZW9tZXRyeVxuKTogVmlzaWJsZVNlZ21lbnRbXSB7XG4gIGNvbnN0IHZpc2libGVEdXJhdGlvbk1zID0gZ2VvbWV0cnkudmlzaWJsZUVuZE1zIC0gZ2VvbWV0cnkudmlzaWJsZVN0YXJ0TXM7XG4gIGlmICh2aXNpYmxlRHVyYXRpb25NcyA8PSAwKSByZXR1cm4gW107XG5cbiAgcmV0dXJuIHNlZ21lbnRzLmZsYXRNYXAoKHNlZykgPT4ge1xuICAgIGNvbnN0IHNlZ1N0YXJ0TXMgPSBzcGFuU3RhcnRNcyArIHNlZy5zdGFydEZyYWN0aW9uICogc3BhbkR1cmF0aW9uTXM7XG4gICAgY29uc3Qgc2VnRW5kTXMgPSBzcGFuU3RhcnRNcyArIHNlZy5lbmRGcmFjdGlvbiAqIHNwYW5EdXJhdGlvbk1zO1xuICAgIGNvbnN0IHN0YXJ0TXMgPSBNYXRoLm1heChzZWdTdGFydE1zLCBnZW9tZXRyeS52aXNpYmxlU3RhcnRNcyk7XG4gICAgY29uc3QgZW5kTXMgPSBNYXRoLm1pbihzZWdFbmRNcywgZ2VvbWV0cnkudmlzaWJsZUVuZE1zKTtcbiAgICBpZiAoZW5kTXMgPD0gc3RhcnRNcykgcmV0dXJuIFtdO1xuXG4gICAgY29uc3Qgd2lkdGhGcmFjID0gKGVuZE1zIC0gc3RhcnRNcykgLyB2aXNpYmxlRHVyYXRpb25NcztcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBzdGF0dXM6IHNlZy5zdGF0dXMsXG4gICAgICAgIGxlZnRQY3Q6XG4gICAgICAgICAgKChzdGFydE1zIC0gZ2VvbWV0cnkudmlzaWJsZVN0YXJ0TXMpIC8gdmlzaWJsZUR1cmF0aW9uTXMpICogMTAwLFxuICAgICAgICB3aWR0aFBjdDogd2lkdGhGcmFjICogMTAwLFxuICAgICAgICBwaXhlbFdpZHRoOiB3aWR0aEZyYWMgKiBnZW9tZXRyeS52aXNpYmxlUGl4ZWxXaWR0aCxcbiAgICAgICAgZnVsbER1cmF0aW9uTXM6IChzZWcuZW5kRnJhY3Rpb24gLSBzZWcuc3RhcnRGcmFjdGlvbikgKiBzcGFuRHVyYXRpb25NcyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU21hbGwgcmVuZGVyIGhlbHBlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBEdXJhdGlvbkxhYmVsKHtcbiAgbGFiZWwsXG4gIGNsYXNzTmFtZSxcbn06IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufSk6IFJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGluc2V0LTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBvdmVyZmxvdy1oaWRkZW4gcHgtMSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtbGVmdCB0ZXh0LWdyYXktMTAwMCB0YWJ1bGFyLW51bXMgb3BhY2l0eS0wIGdyb3VwLWhvdmVyL3RpbWVsaW5lLXJvdzpvcGFjaXR5LTEwMCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICA+XG4gICAgICB7bGFiZWx9XG4gICAgPC9zcGFuPlxuICApO1xufVxuXG5mdW5jdGlvbiBCb3VuZGFyeUFycm93KHtcbiAgZGlyZWN0aW9uLFxufToge1xuICBkaXJlY3Rpb246ICdsZWZ0JyB8ICdyaWdodCc7XG59KTogUmVhY3ROb2RlIHtcbiAgY29uc3QgSWNvbiA9IGRpcmVjdGlvbiA9PT0gJ3JpZ2h0JyA/IEFycm93UmlnaHQgOiBBcnJvd0xlZnQ7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtNiB3LTYgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtWzAuMjVyZW1dXCI+XG4gICAgICA8SWNvbiBjbGFzc05hbWU9XCJzaXplLTMgdGV4dC1ncmF5LTkwMFwiIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFBsYWluQmFyKHtcbiAgYmcsXG4gIGJvcmRlcixcbiAgbGFiZWwsXG59OiB7XG4gIGJnOiBzdHJpbmc7XG4gIGJvcmRlcjogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nIHwgbnVsbDtcbn0pOiBSZWFjdE5vZGUge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGgtNiB3LWZ1bGwgbWluLXctMSByb3VuZGVkLVswLjI1cmVtXSBib3JkZXJcIlxuICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZDogYmcsIGJvcmRlckNvbG9yOiBib3JkZXIgfX1cbiAgICA+XG4gICAgICB7bGFiZWwgPyA8RHVyYXRpb25MYWJlbCBsYWJlbD17bGFiZWx9IC8+IDogbnVsbH1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gTGVhZEluQ29ubmVjdG9yKHtcbiAgbGVmdFBjdCxcbiAgd2lkdGhQY3QsXG4gIGxhYmVsLFxufToge1xuICBsZWZ0UGN0OiBudW1iZXI7XG4gIHdpZHRoUGN0OiBudW1iZXI7XG4gIGxhYmVsOiBzdHJpbmcgfCBudWxsO1xufSk6IFJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTEvMiBoLTYgLXRyYW5zbGF0ZS15LTEvMlwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICBsZWZ0OiBgY2FsYygke2xlZnRQY3R9JSArIDAuNXB4KWAsXG4gICAgICAgIHdpZHRoOiBgY2FsYygke3dpZHRoUGN0fSUgLSAxcHgpYCxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTAgdG9wLTEvMiBoLTQgdy1weCAtdHJhbnNsYXRlLXktMS8yIGJnLWdyYXktNTAwXCIgLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQteC0wIHRvcC0xLzIgaC1weCAtdHJhbnNsYXRlLXktMS8yIGJnLWdyYXktNTAwXCIgLz5cbiAgICAgIHtsYWJlbCA/IDxEdXJhdGlvbkxhYmVsIGxhYmVsPXtsYWJlbH0gLz4gOiBudWxsfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBTZWdtZW50QmFyKHtcbiAgc2VnbWVudHMsXG4gIHNob3dMYWJlbHMgPSB0cnVlLFxufToge1xuICBzZWdtZW50czogVmlzaWJsZVNlZ21lbnRbXTtcbiAgLyoqXG4gICAqIFdoZW4gZmFsc2UsIHNlZ21lbnQgZHVyYXRpb24gbGFiZWxzIGFyZSBzdXBwcmVzc2VkLiBVc2VkIHdoZW4gYSBzZXBhcmF0ZVxuICAgKiB0b3AgbGF5ZXIgKGUuZy4gdGhlIHJlc3VtcHRpb24tbWFya2VyIGR1cmF0aW9uIG92ZXJsYXkpIHJlbmRlcnMgdGhlIGxhYmVsXG4gICAqIGFib3ZlIHRoZSBtYXJrZXJzIGluc3RlYWQsIHNvIHdlIGRvbid0IGRyYXcgaXQgdHdpY2UuXG4gICAqL1xuICBzaG93TGFiZWxzPzogYm9vbGVhbjtcbn0pOiBSZWFjdE5vZGUge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgaC02IHctZnVsbFwiPlxuICAgICAge3NlZ21lbnRzLm1hcCgoc2VnLCBpKSA9PiB7XG4gICAgICAgIGlmIChzZWcuc3RhdHVzID09PSAncXVldWVkJykge1xuICAgICAgICAgIGNvbnN0IGxlYWRJbkxhYmVsID0gZm9ybWF0RHVyYXRpb25QcmVjaXNlKHNlZy5mdWxsRHVyYXRpb25Ncyk7XG4gICAgICAgICAgY29uc3Qgc2hvd0xlYWRJbkxhYmVsID1cbiAgICAgICAgICAgIHNob3dMYWJlbHMgJiZcbiAgICAgICAgICAgIHNlZy5waXhlbFdpZHRoID49IE1hdGgubWF4KDQwLCBsZWFkSW5MYWJlbC5sZW5ndGggKiA2ICsgMTIpO1xuICAgICAgICAgIGNvbnN0IGlzRnVsbFdpZHRoUXVldWVkID0gc2VnbWVudHMubGVuZ3RoID09PSAxO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RnJhZ21lbnQga2V5PXtpfT5cbiAgICAgICAgICAgICAgPExlYWRJbkNvbm5lY3RvclxuICAgICAgICAgICAgICAgIGxlZnRQY3Q9e3NlZy5sZWZ0UGN0fVxuICAgICAgICAgICAgICAgIHdpZHRoUGN0PXtzZWcud2lkdGhQY3R9XG4gICAgICAgICAgICAgICAgbGFiZWw9e3Nob3dMZWFkSW5MYWJlbCA/IGxlYWRJbkxhYmVsIDogbnVsbH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAge2lzRnVsbFdpZHRoUXVldWVkID8gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC0xLzIgaC00IHctcHggLXRyYW5zbGF0ZS15LTEvMiBiZy1ncmF5LTUwMFwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBsZWZ0OiBgY2FsYygke3NlZy5sZWZ0UGN0ICsgc2VnLndpZHRoUGN0fSUgLSAxLjVweClgLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhYmVsID0gZm9ybWF0RHVyYXRpb25QcmVjaXNlKHNlZy5mdWxsRHVyYXRpb25Ncyk7XG4gICAgICAgIC8vIE9ubHkgcmVuZGVyIHRoZSBsYWJlbCB3aGVuIHRoZXJlJ3MgZW5vdWdoIHJvb20gZm9yIGl0IHdpdGhvdXQgY2xpcHBpbmcuXG4gICAgICAgIGNvbnN0IHNob3dMYWJlbCA9XG4gICAgICAgICAgc2hvd0xhYmVscyAmJiBzZWcucGl4ZWxXaWR0aCA+PSBNYXRoLm1heCg0MCwgbGFiZWwubGVuZ3RoICogNiArIDEyKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17aX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICdhYnNvbHV0ZSBoLWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtWzAuMjVyZW1dJyxcbiAgICAgICAgICAgICAgU0VHTUVOVF9DTEFTU0VTW3NlZy5zdGF0dXNdXG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgLy8gMXB4IGdhcCBiZXR3ZWVuIGFkamFjZW50IHNlZ21lbnRzLCBkaXN0cmlidXRlZCBlcXVhbGx5LlxuICAgICAgICAgICAgICBsZWZ0OiBgY2FsYygke3NlZy5sZWZ0UGN0fSUgKyAwLjVweClgLFxuICAgICAgICAgICAgICB3aWR0aDogYGNhbGMoJHtzZWcud2lkdGhQY3R9JSAtIDFweClgLFxuICAgICAgICAgICAgICBtaW5XaWR0aDogMSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge1NUUklQRURfU0VHTUVOVF9TVEFUVVNFUy5oYXMoc2VnLnN0YXR1cykgPyAoXG4gICAgICAgICAgICAgIDxBbmltYXRlZFN0cmlwZXMgc3RhdHVzPXtzZWcuc3RhdHVzfSAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7c2hvd0xhYmVsID8gPER1cmF0aW9uTGFiZWwgbGFiZWw9e2xhYmVsfSAvPiA6IG51bGx9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG4gICAgICB9KX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUaW1lbGluZUJhclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IFRpbWVsaW5lQmFyID0gbWVtbyhmdW5jdGlvbiBUaW1lbGluZUJhcih7XG4gIHNwYW4sXG4gIHZpZXdTdGFydCxcbiAgdmlld0R1cmF0aW9uLFxuICBjb250YWluZXJXaWR0aCxcbiAgaXNTZWxlY3RlZCxcbiAgaXNEaW1tZWQsXG4gIG9uU2VsZWN0LFxuICBvblJldmVhbFRpbWUsXG59OiB7XG4gIHNwYW46IFNwYW47XG4gIHZpZXdTdGFydDogbnVtYmVyO1xuICB2aWV3RHVyYXRpb246IG51bWJlcjtcbiAgY29udGFpbmVyV2lkdGg6IG51bWJlcjtcbiAgaXNTZWxlY3RlZDogYm9vbGVhbjtcbiAgaXNEaW1tZWQ/OiBib29sZWFuO1xuICBvblNlbGVjdDogKHNwYW5JZDogc3RyaW5nKSA9PiB2b2lkO1xuICBvblJldmVhbFRpbWU/OiAodGltZU1zOiBudW1iZXIpID0+IHZvaWQ7XG59KTogUmVhY3ROb2RlIHtcbiAgY29uc3Qgc3RhcnRNcyA9IGdldEhpZ2hSZXNJbk1zKHNwYW4uc3RhcnRUaW1lKTtcbiAgY29uc3QgZW5kTXMgPSBnZXRIaWdoUmVzSW5NcyhzcGFuLmVuZFRpbWUpO1xuICBjb25zdCB0b3RhbER1cmF0aW9uTXMgPSBnZXRTcGFuRHVyYXRpb25NcyhzcGFuKTtcblxuICBjb25zdCBnZW9tZXRyeSA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGNvbXB1dGVCYXJHZW9tZXRyeShcbiAgICAgICAgc3RhcnRNcyxcbiAgICAgICAgZW5kTXMsXG4gICAgICAgIHZpZXdTdGFydCxcbiAgICAgICAgdmlld1N0YXJ0ICsgdmlld0R1cmF0aW9uLFxuICAgICAgICBjb250YWluZXJXaWR0aFxuICAgICAgKSxcbiAgICBbc3RhcnRNcywgZW5kTXMsIHZpZXdTdGFydCwgdmlld0R1cmF0aW9uLCBjb250YWluZXJXaWR0aF1cbiAgKTtcblxuICBjb25zdCBiYXNlU2VnbWVudHMgPSB1c2VNZW1vKCgpID0+IGNvbXB1dGVTcGFuU2VnbWVudHMoc3BhbiksIFtzcGFuXSk7XG4gIGNvbnN0IHNlZ21lbnRzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgZ2VvbWV0cnkubW9kZS5raW5kID09PSAnZnVsbCdcbiAgICAgICAgPyBwcm9qZWN0U2VnbWVudHMoYmFzZVNlZ21lbnRzLCBzdGFydE1zLCB0b3RhbER1cmF0aW9uTXMsIGdlb21ldHJ5KVxuICAgICAgICA6IFtdLFxuICAgIFtnZW9tZXRyeSwgYmFzZVNlZ21lbnRzLCBzdGFydE1zLCB0b3RhbER1cmF0aW9uTXNdXG4gICk7XG5cbiAgY29uc3QgYmFzZU1hcmtlcnMgPSB1c2VNZW1vKCgpID0+IGNvbXB1dGVTcGFuTWFya2VycyhzcGFuKSwgW3NwYW5dKTtcbiAgY29uc3QgbWFya2VycyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIGdlb21ldHJ5Lm1vZGUua2luZCA9PT0gJ2Z1bGwnXG4gICAgICAgID8gY3VsbENvbGxpZGluZ01hcmtlcnMoXG4gICAgICAgICAgICBwcm9qZWN0TWFya2VycyhcbiAgICAgICAgICAgICAgYmFzZU1hcmtlcnMsXG4gICAgICAgICAgICAgIGdlb21ldHJ5LnZpc2libGVTdGFydE1zLFxuICAgICAgICAgICAgICBnZW9tZXRyeS52aXNpYmxlRW5kTXNcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBnZW9tZXRyeS52aXNpYmxlUGl4ZWxXaWR0aFxuICAgICAgICAgIClcbiAgICAgICAgOiBbXSxcbiAgICBbZ2VvbWV0cnksIGJhc2VNYXJrZXJzXVxuICApO1xuXG4gIC8vIE1hcmtlcnMgdGhhdCBmYWxsIG91dHNpZGUgdGhlIHZpc2libGUgd2luZG93IChzY3JvbGxlZCBvZmYgd2hpbGUgem9vbWVkIGluKVxuICAvLyDigJQgc3VyZmFjZWQgYXMgZWRnZSBpbmRpY2F0b3JzIHNvIHRoZXkgYXJlbid0IHNpbGVudGx5IGxvc3QuXG4gIGNvbnN0IG9mZnNjcmVlbiA9IHVzZU1lbW88T2Zmc2NyZWVuTWFya2Vycz4oXG4gICAgKCkgPT5cbiAgICAgIGdlb21ldHJ5Lm1vZGUua2luZCA9PT0gJ2Z1bGwnXG4gICAgICAgID8gY29tcHV0ZU9mZnNjcmVlbk1hcmtlcnMoXG4gICAgICAgICAgICBiYXNlTWFya2VycyxcbiAgICAgICAgICAgIGdlb21ldHJ5LnZpc2libGVTdGFydE1zLFxuICAgICAgICAgICAgZ2VvbWV0cnkudmlzaWJsZUVuZE1zXG4gICAgICAgICAgKVxuICAgICAgICA6IHsgbGVmdDogbnVsbCwgcmlnaHQ6IG51bGwgfSxcbiAgICBbZ2VvbWV0cnksIGJhc2VNYXJrZXJzXVxuICApO1xuXG4gIC8vIE1hcmtlcnMgKHZpc2libGUgb3Igb2ZmLXNjcmVlbikgbW92ZSB0aGUgZHVyYXRpb24gbGFiZWwgaW50byB0aGUgb3ZlcmxheSxcbiAgLy8gc28gdGhlIGluLWJhciBzZWdtZW50IGxhYmVsIGlzIHN1cHByZXNzZWQuXG4gIGNvbnN0IGhhc01hcmtlcnMgPVxuICAgIG1hcmtlcnMubGVuZ3RoID4gMCB8fCBvZmZzY3JlZW4ubGVmdCAhPT0gbnVsbCB8fCBvZmZzY3JlZW4ucmlnaHQgIT09IG51bGw7XG5cbiAgY29uc3QgaXNFcnJvcmVkID0gaXNTcGFuRXJyb3JlZChzcGFuKTtcbiAgY29uc3QgY29sb3JzID0gZ2V0UmVzb3VyY2VDb2xvcihzcGFuLnJlc291cmNlKTtcbiAgY29uc3QgZmFsbGJhY2tCZyA9IGlzRXJyb3JlZFxuICAgID8gKGNvbG9ycy5lcnJvckJnID8/ICd2YXIoLS1kcy1yZWQtMjAwKScpXG4gICAgOiBjb2xvcnMuYmc7XG4gIGNvbnN0IGZhbGxiYWNrQm9yZGVyID0gaXNFcnJvcmVkXG4gICAgPyAoY29sb3JzLmVycm9yQm9yZGVyID8/ICd2YXIoLS1kcy1yZWQtNTAwKScpXG4gICAgOiBjb2xvcnMuYm9yZGVyO1xuXG4gIGNvbnN0IHRvdGFsTGFiZWwgPSBmb3JtYXREdXJhdGlvblByZWNpc2UodG90YWxEdXJhdGlvbk1zKTtcbiAgY29uc3Qgc2hvd1RvdGFsTGFiZWwgPVxuICAgIGdlb21ldHJ5LnZpc2libGVQaXhlbFdpZHRoID49IE1hdGgubWF4KDQwLCB0b3RhbExhYmVsLmxlbmd0aCAqIDYgKyAxMik7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgb25TZWxlY3Qoc3Bhbi5zcGFuSWQpO1xuICB9LCBbb25TZWxlY3QsIHNwYW4uc3BhbklkXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByb2xlPVwidHJlZWl0ZW1cIlxuICAgICAgYXJpYS1zZWxlY3RlZD17aXNTZWxlY3RlZH1cbiAgICAgIGFyaWEtZXhwYW5kZWQ9e2lzU2VsZWN0ZWR9XG4gICAgICBhcmlhLWxldmVsPXsxfVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2dyb3VwL3RpbWVsaW5lLXJvdyBoLTEwIHJlbGF0aXZlIGZsZXggaXRlbXMtY2VudGVyIGhvdmVyOmJnLWdyYXktMTAwIGFyaWEtc2VsZWN0ZWQ6YmctZ3JheS0xMDAgYXJpYS1zZWxlY3RlZDpob3ZlcjpiZy1ncmF5LTIwMCB0cmFuc2l0aW9uLW9wYWNpdHknLFxuICAgICAgICBpc0RpbW1lZCAmJiAnb3BhY2l0eS0zNSdcbiAgICAgICl9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LXktMFwiIHN0eWxlPXtUSU1FTElORV9JTlNFVF9TVFlMRX0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtMS8yIGgtNiAtdHJhbnNsYXRlLXktMS8yIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLVswLjI1cmVtXVwiXG4gICAgICAgICAgc3R5bGU9e2dldEJhclBvc2l0aW9uU3R5bGUoZ2VvbWV0cnkpfVxuICAgICAgICA+XG4gICAgICAgICAge2dlb21ldHJ5Lm1vZGUua2luZCA9PT0gJ2Fycm93JyA/IChcbiAgICAgICAgICAgIDxCb3VuZGFyeUFycm93IGRpcmVjdGlvbj17Z2VvbWV0cnkubW9kZS5kaXJlY3Rpb259IC8+XG4gICAgICAgICAgKSA6IGdlb21ldHJ5Lm1vZGUua2luZCA9PT0gJ3RpbnknID8gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTYgcm91bmRlZC1bMC4yNXJlbV0gYm9yZGVyXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZDogZmFsbGJhY2tCZywgYm9yZGVyQ29sb3I6IGZhbGxiYWNrQm9yZGVyIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBzZWdtZW50cy5sZW5ndGggPiAwID8gKFxuICAgICAgICAgICAgPFNlZ21lbnRCYXIgc2VnbWVudHM9e3NlZ21lbnRzfSBzaG93TGFiZWxzPXshaGFzTWFya2Vyc30gLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFBsYWluQmFyXG4gICAgICAgICAgICAgIGJnPXtmYWxsYmFja0JnfVxuICAgICAgICAgICAgICBib3JkZXI9e2ZhbGxiYWNrQm9yZGVyfVxuICAgICAgICAgICAgICBsYWJlbD17c2hvd1RvdGFsTGFiZWwgPyB0b3RhbExhYmVsIDogbnVsbH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHsvKiBPdmVybGF5IChub3QgY2xpcHBlZCk6IHRpY2tzLCBvZmYtc2NyZWVuIGluZGljYXRvcnMsIHRoZW4gdGhlIGR1cmF0aW9uIGxhYmVsIG9uIHRvcC4gKi99XG4gICAgICAgIHtoYXNNYXJrZXJzID8gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgdG9wLTEvMiBoLTYgLXRyYW5zbGF0ZS15LTEvMlwiXG4gICAgICAgICAgICBzdHlsZT17Z2V0QmFyUG9zaXRpb25TdHlsZShnZW9tZXRyeSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge21hcmtlcnMubGVuZ3RoID4gMCA/IDxNYXJrZXJMYXllciBtYXJrZXJzPXttYXJrZXJzfSAvPiA6IG51bGx9XG4gICAgICAgICAgICB7b2Zmc2NyZWVuLmxlZnQgPyAoXG4gICAgICAgICAgICAgIDxPZmZzY3JlZW5NYXJrZXJJbmRpY2F0b3JcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICBjb3VudD17b2Zmc2NyZWVuLmxlZnQuY291bnR9XG4gICAgICAgICAgICAgICAgdGFyZ2V0TXM9e29mZnNjcmVlbi5sZWZ0Lm5lYXJlc3RNc31cbiAgICAgICAgICAgICAgICBvblJldmVhbD17b25SZXZlYWxUaW1lfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7b2Zmc2NyZWVuLnJpZ2h0ID8gKFxuICAgICAgICAgICAgICA8T2Zmc2NyZWVuTWFya2VySW5kaWNhdG9yXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uPVwicmlnaHRcIlxuICAgICAgICAgICAgICAgIGNvdW50PXtvZmZzY3JlZW4ucmlnaHQuY291bnR9XG4gICAgICAgICAgICAgICAgdGFyZ2V0TXM9e29mZnNjcmVlbi5yaWdodC5uZWFyZXN0TXN9XG4gICAgICAgICAgICAgICAgb25SZXZlYWw9e29uUmV2ZWFsVGltZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAge3Nob3dUb3RhbExhYmVsID8gKFxuICAgICAgICAgICAgICA8RHVyYXRpb25MYWJlbFxuICAgICAgICAgICAgICAgIGxhYmVsPXt0b3RhbExhYmVsfVxuICAgICAgICAgICAgICAgIC8vIFNoaWZ0IGNsZWFyIG9mIHRoZSBsZWZ0IGVkZ2UgaW5kaWNhdG9yIHNvIGl0IGlzbid0IGNvdmVyZWQuXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtvZmZzY3JlZW4ubGVmdCA/ICdwbC0xMCcgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn0pO1xuXG5leHBvcnQgeyBUaW1lbGluZUJhciB9O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIERlbHRhSW5kaWNhdG9yIChBbHQta2V5IGdhcCBvdmVybGF5KVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IERFTFRBX0NBUF9IRUlHSFRfUFggPSA4O1xuLy8gVmVydGljYWwgb2Zmc2V0IHRvIHNpdCB0aGUgaW5kaWNhdG9yIGluc2lkZSB0aGUgZ2FwIGJldHdlZW4gcm93IE4gYW5kIE4rMSxcbi8vIGFsaWduZWQgd2l0aCB3aGVyZSB0aGUgYmFyIHN0YXJ0cyBpbiB0aGUgbmV4dCByb3cgKHJvd3MgY2VudGVyIGEgMjRweCBiYXJcbi8vIGluc2lkZSA0MHB4LCBzbyBiYXJzIHN0YXJ0IH44cHggZnJvbSB0aGUgdG9wIG9mIHRoZSByb3cpLlxuY29uc3QgREVMVEFfUk9XX09GRlNFVF9QWCA9IDg7XG5cbmNvbnN0IERlbHRhSW5kaWNhdG9yID0gbWVtbyhmdW5jdGlvbiBEZWx0YUluZGljYXRvcih7XG4gIGxlZnRGcmFjLFxuICByaWdodEZyYWMsXG4gIGxhYmVsLFxuICByb3dJbmRleCxcbn06IHtcbiAgbGVmdEZyYWM6IG51bWJlcjtcbiAgcmlnaHRGcmFjOiBudW1iZXI7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHJvd0luZGV4OiBudW1iZXI7XG59KSB7XG4gIGNvbnN0IGNlbnRlclkgPSBERUxUQV9ST1dfT0ZGU0VUX1BYICsgKHJvd0luZGV4ICsgMSkgKiBST1dfSEVJR0hUX1BYO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgcG9pbnRlci1ldmVudHMtbm9uZVwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICBsZWZ0OiBgJHtsZWZ0RnJhYyAqIDEwMH0lYCxcbiAgICAgICAgd2lkdGg6IGAkeyhyaWdodEZyYWMgLSBsZWZ0RnJhYykgKiAxMDB9JWAsXG4gICAgICAgIHRvcDogY2VudGVyWSAtIERFTFRBX0NBUF9IRUlHSFRfUFggLyAyLFxuICAgICAgICBoZWlnaHQ6IERFTFRBX0NBUF9IRUlHSFRfUFgsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgbGVmdC0wIHRvcC0wIHctcHggaC1mdWxsIGJnLWFtYmVyLTgwMFwiIC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGxlZnQtMCByaWdodC0wIHRvcC0xLzIgaC1weCBiZy1hbWJlci04MDBcIiAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0wIHRvcC0wIHctcHggaC1mdWxsIGJnLWFtYmVyLTgwMFwiIC8+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTEvMiB0b3AtMS8yIC10cmFuc2xhdGUteC0xLzIgLXRyYW5zbGF0ZS15LTEvMiB0ZXh0LWxhYmVsLTEyIGxlYWRpbmctbm9uZSB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLXhzIHB4LTEgcHktMC41IHRleHQtZ3JheS0xMDAgYmctYW1iZXItODAwXCI+XG4gICAgICAgIHtsYWJlbH1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgKTtcbn0pO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRpbWVsaW5lSGVhZGVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVsaW5lSGVhZGVyKHtcbiAgbWFya2VycyxcbiAgaG92ZXJJbmZvLFxufToge1xuICBtYXJrZXJzOiBUaW1lTWFya2VyW107XG4gIGhvdmVySW5mbz86IHsgZnJhY3Rpb246IG51bWJlcjsgbGFiZWw6IHN0cmluZyB9IHwgbnVsbDtcbn0pOiBSZWFjdE5vZGUge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgYmctYmFja2dyb3VuZC0xMDAgYm9yZGVyLWIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIGgtMTAgbWluLWgtMTAgZmxleCBpdGVtcy1lbmQgcHgtNCBwYi0xXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGgtZnVsbCBmbGV4LTFcIj5cbiAgICAgICAge21hcmtlcnMubWFwKChtKSA9PiAoXG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGtleT17U3RyaW5nKG0udmFsdWUpfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgYm90dG9tLTEgZm9udC1tb25vIHRleHQteHMgZm9udC1ub3JtYWwgbGVhZGluZy00IHRleHQtZ3JheS05MDAgd2hpdGVzcGFjZS1ub3dyYXBcIlxuICAgICAgICAgICAgc3R5bGU9e3sgbGVmdDogYCR7bS5wb3NpdGlvbiAqIDEwMH0lYCB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHttLmxhYmVsfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKSl9XG4gICAgICAgIHtob3ZlckluZm8gJiYgKFxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtMSBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgZm9udC1tb25vIHRleHQtWzExcHhdIGxlYWRpbmctNCB0ZXh0LWdyYXktMTAwMCB3aGl0ZXNwYWNlLW5vd3JhcCBiZy1iYWNrZ3JvdW5kLTEwMCBib3JkZXIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIHJvdW5kZWQgcHgtMSAtdHJhbnNsYXRlLXgtMS8yXCJcbiAgICAgICAgICAgIHN0eWxlPXt7IGxlZnQ6IGAke2hvdmVySW5mby5mcmFjdGlvbiAqIDEwMH0lYCB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtob3ZlckluZm8ubGFiZWx9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGltZWxpbmVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgZnVuY3Rpb24gVGltZWxpbmUoe1xuICBzcGFucyxcbiAgdmlld1N0YXJ0LFxuICB2aWV3RW5kLFxuICBtYXJrZXJzLFxuICBzZWxlY3RlZElkLFxuICBzZWFyY2hSZXN1bHQsXG4gIG9uU2VsZWN0LFxuICBvblJldmVhbFRpbWUsXG4gIGhvdmVyRnJhY3Rpb24sXG4gIGFsdEhlbGQgPSBmYWxzZSxcbn06IHtcbiAgc3BhbnM6IFNwYW5bXTtcbiAgdmlld1N0YXJ0OiBudW1iZXI7XG4gIHZpZXdFbmQ6IG51bWJlcjtcbiAgbWFya2VyczogVGltZU1hcmtlcltdO1xuICBzZWxlY3RlZElkOiBzdHJpbmcgfCBudWxsO1xuICBzZWFyY2hSZXN1bHQ6IFNwYW5TZWFyY2hSZXN1bHQ7XG4gIG9uU2VsZWN0OiAoc3BhbklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uUmV2ZWFsVGltZT86ICh0aW1lTXM6IG51bWJlcikgPT4gdm9pZDtcbiAgaG92ZXJGcmFjdGlvbj86IG51bWJlciB8IG51bGw7XG4gIGFsdEhlbGQ/OiBib29sZWFuO1xufSk6IFJlYWN0Tm9kZSB7XG4gIGNvbnN0IGNvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IFtjb250YWluZXJXaWR0aCwgc2V0Q29udGFpbmVyV2lkdGhdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IHZpZXdEdXJhdGlvbiA9IHZpZXdFbmQgLSB2aWV3U3RhcnQ7XG4gIGNvbnN0IHRpbWVsaW5lV2lkdGggPSBNYXRoLm1heCgwLCBjb250YWluZXJXaWR0aCAtIFRJTUVMSU5FX1BBRERJTkdfUFggKiAyKTtcbiAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB1c2VSb3dXaW5kb3coXG4gICAgY29udGFpbmVyUmVmLFxuICAgIHNwYW5zLmxlbmd0aCxcbiAgICBST1dfSEVJR0hUX1BYXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBlbCA9IGNvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBjb25zdCBybyA9IG5ldyBSZXNpemVPYnNlcnZlcigoW2VudHJ5XSkgPT4ge1xuICAgICAgc2V0Q29udGFpbmVyV2lkdGgoZW50cnkuY29udGVudFJlY3Qud2lkdGgpO1xuICAgIH0pO1xuICAgIHJvLm9ic2VydmUoZWwpO1xuICAgIHJldHVybiAoKSA9PiByby5kaXNjb25uZWN0KCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBnYXBzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBjb21wdXRlU3BhbkdhcHMoc3BhbnMsIHZpZXdTdGFydCwgdmlld0VuZCksXG4gICAgW3NwYW5zLCB2aWV3U3RhcnQsIHZpZXdFbmRdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGgtZnVsbCBvdmVyZmxvdy1oaWRkZW5cIlxuICAgICAgc3R5bGU9e3sgbWluSGVpZ2h0OiBzcGFucy5sZW5ndGggKiBST1dfSEVJR0hUX1BYIH19XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBhcmlhLWhpZGRlblxuICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC15LTAgcG9pbnRlci1ldmVudHMtbm9uZVwiXG4gICAgICAgIHN0eWxlPXtUSU1FTElORV9JTlNFVF9TVFlMRX1cbiAgICAgID5cbiAgICAgICAge21hcmtlcnMubWFwKChtYXJrZXIpID0+XG4gICAgICAgICAgLy8gU2tpcCB0aGUgXCIwc1wiIG9yaWdpbiBtYXJrZXIgc2luY2UgdGhlIGxlZnQgZWRnZSBhbHJlYWR5IGltcGxpZXMgaXQuXG4gICAgICAgICAgTWF0aC5hYnMobWFya2VyLnZhbHVlKSA+IDAuMDAwMDAxID8gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBrZXk9e1N0cmluZyhtYXJrZXIudmFsdWUpfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtMCBib3R0b20tMCB3LXB4IGJnLWdyYXktYWxwaGEtMzAwXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3sgbGVmdDogYCR7bWFya2VyLnBvc2l0aW9uICogMTAwfSVgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiBudWxsXG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIHtob3ZlckZyYWN0aW9uICE9IG51bGwgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQteS0wIHBvaW50ZXItZXZlbnRzLW5vbmUgei0xMFwiXG4gICAgICAgICAgc3R5bGU9e1RJTUVMSU5FX0lOU0VUX1NUWUxFfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTAgYm90dG9tLTAgdy1weCBiZy1ncmF5LWFscGhhLTUwMFwiXG4gICAgICAgICAgICBzdHlsZT17eyBsZWZ0OiBgJHtob3ZlckZyYWN0aW9uICogMTAwfSVgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgPGRpdiBzdHlsZT17eyB0cmFuc2Zvcm06IGB0cmFuc2xhdGVZKCR7c3RhcnQgKiBST1dfSEVJR0hUX1BYfXB4KWAgfX0+XG4gICAgICAgIHtzcGFucy5zbGljZShzdGFydCwgZW5kKS5tYXAoKHNwYW4pID0+IChcbiAgICAgICAgICA8VGltZWxpbmVCYXJcbiAgICAgICAgICAgIGtleT17c3Bhbi5zcGFuSWR9XG4gICAgICAgICAgICBzcGFuPXtzcGFufVxuICAgICAgICAgICAgdmlld1N0YXJ0PXt2aWV3U3RhcnR9XG4gICAgICAgICAgICB2aWV3RHVyYXRpb249e3ZpZXdEdXJhdGlvbn1cbiAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoPXt0aW1lbGluZVdpZHRofVxuICAgICAgICAgICAgaXNTZWxlY3RlZD17c2VsZWN0ZWRJZCA9PT0gc3Bhbi5zcGFuSWR9XG4gICAgICAgICAgICBpc0RpbW1lZD17aXNTcGFuRGltbWVkQnlTZWFyY2goc3Bhbi5zcGFuSWQsIHNlYXJjaFJlc3VsdCl9XG4gICAgICAgICAgICBvblNlbGVjdD17b25TZWxlY3R9XG4gICAgICAgICAgICBvblJldmVhbFRpbWU9e29uUmV2ZWFsVGltZX1cbiAgICAgICAgICAvPlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgICAge2FsdEhlbGQgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgYXJpYS1oaWRkZW5cbiAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC15LTAgcG9pbnRlci1ldmVudHMtbm9uZVwiXG4gICAgICAgICAgc3R5bGU9e1RJTUVMSU5FX0lOU0VUX1NUWUxFfVxuICAgICAgICA+XG4gICAgICAgICAge2dhcHMubWFwKChnYXApID0+IChcbiAgICAgICAgICAgIDxEZWx0YUluZGljYXRvclxuICAgICAgICAgICAgICBrZXk9e2dhcC5yb3dJbmRleH1cbiAgICAgICAgICAgICAgbGVmdEZyYWM9e2dhcC5sZWZ0RnJhY31cbiAgICAgICAgICAgICAgcmlnaHRGcmFjPXtnYXAucmlnaHRGcmFjfVxuICAgICAgICAgICAgICBsYWJlbD17Zm9ybWF0RHVyYXRpb25QcmVjaXNlKGdhcC5nYXBNcyl9XG4gICAgICAgICAgICAgIHJvd0luZGV4PXtnYXAucm93SW5kZXh9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXX0=
321
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9uZXctdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvdGltZWxpbmUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVyRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLElBQUksRUFDSixXQUFXLEVBQ1gsU0FBUyxFQUNULE9BQU8sRUFDUCxNQUFNLEVBQ04sUUFBUSxHQUNULE1BQU0sT0FBTyxDQUFDO0FBQ2YsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JDLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsY0FBYyxHQUNmLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLG9CQUFvQixFQUF5QixNQUFNLFdBQVcsQ0FBQztBQVN4RSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGFBQWEsR0FDZCxNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLFdBQVcsRUFDWCx3QkFBd0IsRUFDeEIsY0FBYyxHQUNmLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxNQUFNLE1BQU0sdUJBQXVCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvRCw4RUFBOEU7QUFDOUUsWUFBWTtBQUNaLDhFQUE4RTtBQUU5RSxNQUFNLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztBQUNoQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUM1QixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7QUFFdEMsTUFBTSxlQUFlLEdBQWtDO0lBQ3JELE1BQU0sRUFBRSxvQ0FBb0M7SUFDNUMsT0FBTyxFQUFFLG9DQUFvQztJQUM3QyxRQUFRLEVBQUUsb0NBQW9DO0lBQzlDLE9BQU8sRUFBRSxvQ0FBb0M7SUFDN0MsT0FBTyxFQUFFLG9DQUFvQztJQUM3QyxTQUFTLEVBQUUsb0NBQW9DO0lBQy9DLE1BQU0sRUFBRSxrQ0FBa0M7SUFDMUMsU0FBUyxFQUFFLHNDQUFzQztJQUNqRCxRQUFRLEVBQUUsb0NBQW9DO0lBQzlDLFFBQVEsRUFBRSxvQ0FBb0M7Q0FDL0MsQ0FBQztBQUVGLE1BQU0sb0JBQW9CLEdBQWtCO0lBQzFDLElBQUksRUFBRSxtQkFBbUI7SUFDekIsS0FBSyxFQUFFLG1CQUFtQjtDQUMzQixDQUFDO0FBRUYsTUFBTSx3QkFBd0IsR0FBK0IsSUFBSSxHQUFHLENBQUM7SUFDbkUsU0FBUztJQUNULFNBQVM7SUFDVCxVQUFVO0NBQ1gsQ0FBQyxDQUFDO0FBRUgsU0FBUyxlQUFlLENBQUMsRUFBRSxNQUFNLEVBQTZCO0lBQzVELE9BQU8sQ0FDTCxtQ0FFRSxTQUFTLEVBQ1AsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsR0FFdEUsQ0FDSCxDQUFDO0FBQ0osQ0FBQztBQW9CRDs7OztHQUlHO0FBQ0gsU0FBUyxrQkFBa0IsQ0FDekIsT0FBZSxFQUNmLEtBQWEsRUFDYixTQUFpQixFQUNqQixPQUFlLEVBQ2YsY0FBc0I7SUFFdEIsTUFBTSxZQUFZLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FBQztJQUN6QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNwRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFlBQVksR0FBRyxjQUFjLENBQUMsQ0FBQztJQUNyRSxNQUFNLFNBQVMsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRSxNQUFNLGlCQUFpQixHQUFHLFNBQVMsR0FBRyxjQUFjLENBQUM7SUFFckQsTUFBTSxNQUFNLEdBQUcsY0FBYyxHQUFHLENBQUMsSUFBSSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQztJQUM5RSxNQUFNLGNBQWMsR0FBRyxPQUFPLEdBQUcsU0FBUyxDQUFDO0lBQzNDLE1BQU0sZUFBZSxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUM7SUFFeEMsTUFBTSxJQUFJLEdBQ1IsTUFBTSxJQUFJLENBQUMsY0FBYyxJQUFJLGVBQWUsQ0FBQztRQUMzQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFO1FBQ2xFLENBQUMsQ0FBQyxNQUFNO1lBQ04sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUNsQixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFFekIsT0FBTztRQUNMLElBQUk7UUFDSixPQUFPLEVBQ0wsWUFBWSxHQUFHLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUMsR0FBRyxZQUFZLENBQUMsR0FBRyxHQUFHO1lBQ3JELENBQUMsQ0FBQyxDQUFDO1FBQ1AsUUFBUSxFQUFFLFNBQVMsR0FBRyxHQUFHO1FBQ3pCLGNBQWM7UUFDZCxZQUFZO1FBQ1osaUJBQWlCO0tBQ2xCLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxRQUFxQjtJQUloRCxRQUFRLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsS0FBSyxPQUFPO1lBQ1YsT0FBTztnQkFDTCxJQUFJLEVBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssT0FBTztvQkFDakMsQ0FBQyxDQUFDLGVBQWUsb0JBQW9CLEtBQUs7b0JBQzFDLENBQUMsQ0FBQyxLQUFLO2dCQUNYLEtBQUssRUFBRSxHQUFHLG9CQUFvQixJQUFJO2FBQ25DLENBQUM7UUFDSixLQUFLLE1BQU07WUFDVCxPQUFPO2dCQUNMLElBQUksRUFBRSxPQUFPLFFBQVEsQ0FBQyxPQUFPLGtCQUFrQixpQkFBaUIsTUFBTTtnQkFDdEUsS0FBSyxFQUFFLEdBQUcsaUJBQWlCLElBQUk7YUFDaEMsQ0FBQztRQUNKLEtBQUssTUFBTTtZQUNULE9BQU87Z0JBQ0wsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLE9BQU8sR0FBRztnQkFDNUIsS0FBSyxFQUFFLE9BQU8sUUFBUSxDQUFDLFFBQVEsU0FBUzthQUN6QyxDQUFDO0lBQ04sQ0FBQztBQUNILENBQUM7QUFjRDs7OztHQUlHO0FBQ0gsU0FBUyxlQUFlLENBQ3RCLFFBQW1CLEVBQ25CLFdBQW1CLEVBQ25CLGNBQXNCLEVBQ3RCLFFBQXFCO0lBRXJCLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO0lBQzFFLElBQUksaUJBQWlCLElBQUksQ0FBQztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRXRDLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQzlCLE1BQU0sVUFBVSxHQUFHLFdBQVcsR0FBRyxHQUFHLENBQUMsYUFBYSxHQUFHLGNBQWMsQ0FBQztRQUNwRSxNQUFNLFFBQVEsR0FBRyxXQUFXLEdBQUcsR0FBRyxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUM7UUFDaEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RCxJQUFJLEtBQUssSUFBSSxPQUFPO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFaEMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsaUJBQWlCLENBQUM7UUFDeEQsT0FBTztZQUNMO2dCQUNFLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtnQkFDbEIsT0FBTyxFQUNMLENBQUMsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsR0FBRztnQkFDakUsUUFBUSxFQUFFLFNBQVMsR0FBRyxHQUFHO2dCQUN6QixVQUFVLEVBQUUsU0FBUyxHQUFHLFFBQVEsQ0FBQyxpQkFBaUI7Z0JBQ2xELGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLGNBQWM7YUFDdkU7U0FDRixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsOEVBQThFO0FBQzlFLHVCQUF1QjtBQUN2Qiw4RUFBOEU7QUFFOUUsb0ZBQW9GO0FBQ3BGLFNBQVMsb0JBQW9CLENBQUMsS0FBYTtJQUN6QyxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsRUFDckIsS0FBSyxFQUNMLFNBQVMsR0FJVjtJQUNDLE9BQU8sQ0FDTCxlQUNFLFNBQVMsRUFBRSxFQUFFLENBQ1gsaVBBQWlQLEVBQ2pQLFNBQVMsQ0FDVixZQUVBLEtBQUssR0FDRCxDQUNSLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsRUFDckIsU0FBUyxHQUdWO0lBQ0MsTUFBTSxJQUFJLEdBQUcsU0FBUyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDNUQsT0FBTyxDQUNMLGNBQUssU0FBUyxFQUFDLDREQUE0RCxZQUN6RSxLQUFDLElBQUksSUFBQyxTQUFTLEVBQUMsc0JBQXNCLEdBQUcsR0FDckMsQ0FDUCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLEVBQ2hCLEVBQUUsRUFDRixNQUFNLEVBQ04sS0FBSyxHQUtOO0lBQ0MsT0FBTyxDQUNMLGNBQ0UsU0FBUyxFQUFDLHNEQUFzRCxFQUNoRSxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsWUFFN0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFDLGFBQWEsSUFBQyxLQUFLLEVBQUUsS0FBSyxHQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FDM0MsQ0FDUCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLEVBQ3ZCLE9BQU8sRUFDUCxRQUFRLEVBQ1IsS0FBSyxHQUtOO0lBQ0MsT0FBTyxDQUNMLGVBQ0UsU0FBUyxFQUFDLHVDQUF1QyxFQUNqRCxLQUFLLEVBQUU7WUFDTCxJQUFJLEVBQUUsUUFBUSxPQUFPLFlBQVk7WUFDakMsS0FBSyxFQUFFLFFBQVEsUUFBUSxVQUFVO1NBQ2xDLGFBRUQsY0FBSyxTQUFTLEVBQUMsK0RBQStELEdBQUcsRUFDakYsY0FBSyxTQUFTLEVBQUMsOERBQThELEdBQUcsRUFDL0UsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFDLGFBQWEsSUFBQyxLQUFLLEVBQUUsS0FBSyxHQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFDM0MsQ0FDUCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEVBQ2xCLFFBQVEsRUFDUixVQUFVLEdBQUcsSUFBSSxHQVNsQjtJQUNDLE9BQU8sQ0FDTCxjQUFLLFNBQVMsRUFBQyxxQkFBcUIsWUFDakMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2QixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDOUQsTUFBTSxlQUFlLEdBQ25CLFVBQVU7b0JBQ1YsR0FBRyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNwRSxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO2dCQUNoRCxPQUFPLENBQ0wsTUFBQyxRQUFRLGVBQ1AsS0FBQyxlQUFlLElBQ2QsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQ3BCLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUN0QixLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksR0FDM0MsRUFDRCxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FDbkIsY0FDRSxTQUFTLEVBQUMsd0RBQXdELEVBQ2xFLEtBQUssRUFBRTtnQ0FDTCxJQUFJLEVBQUUsUUFBUSxHQUFHLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxRQUFRLFlBQVk7NkJBQ3JELEdBQ0QsQ0FDSCxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBYkssQ0FBQyxDQWNMLENBQ1osQ0FBQztZQUNKLENBQUM7WUFFRCxNQUFNLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDeEQsMEVBQTBFO1lBQzFFLE1BQU0sU0FBUyxHQUNiLFVBQVU7Z0JBQ1YsR0FBRyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBRTlELE9BQU8sQ0FDTCxlQUVFLFNBQVMsRUFBRSxFQUFFLENBQ1gsbURBQW1ELEVBQ25ELGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQzVCLEVBQ0QsS0FBSyxFQUFFO29CQUNMLDBEQUEwRDtvQkFDMUQsSUFBSSxFQUFFLFFBQVEsR0FBRyxDQUFDLE9BQU8sWUFBWTtvQkFDckMsS0FBSyxFQUFFLFFBQVEsR0FBRyxDQUFDLFFBQVEsVUFBVTtvQkFDckMsUUFBUSxFQUFFLENBQUM7aUJBQ1osYUFFQSx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMxQyxLQUFDLGVBQWUsSUFBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sR0FBSSxDQUN4QyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQ1AsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFDLGFBQWEsSUFBQyxLQUFLLEVBQUUsS0FBSyxHQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FmOUMsQ0FBQyxDQWdCRixDQUNQLENBQUM7UUFDSixDQUFDLENBQUMsR0FDRSxDQUNQLENBQUM7QUFDSixDQUFDO0FBRUQsOEVBQThFO0FBQzlFLGNBQWM7QUFDZCw4RUFBOEU7QUFFOUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsV0FBVyxDQUFDLEVBQzVDLElBQUksRUFDSixTQUFTLEVBQ1QsWUFBWSxFQUNaLGNBQWMsRUFDZCxVQUFVLEVBQ1YsUUFBUSxFQUNSLFFBQVEsRUFDUixZQUFZLEdBVWI7SUFDQyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsTUFBTSxlQUFlLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFaEQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUN0QixHQUFHLEVBQUUsQ0FDSCxrQkFBa0IsQ0FDaEIsT0FBTyxFQUNQLEtBQUssRUFDTCxTQUFTLEVBQ1QsU0FBUyxHQUFHLFlBQVksRUFDeEIsY0FBYyxDQUNmLEVBQ0gsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQzFELENBQUM7SUFFRixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FDdEIsR0FBRyxFQUFFLENBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTTtRQUMzQixDQUFDLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsQ0FBQztRQUNuRSxDQUFDLENBQUMsRUFBRSxFQUNSLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQ25ELENBQUM7SUFFRixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FDckIsR0FBRyxFQUFFLENBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTTtRQUMzQixDQUFDLENBQUMsb0JBQW9CLENBQ2xCLGNBQWMsQ0FDWixXQUFXLEVBQ1gsUUFBUSxDQUFDLGNBQWMsRUFDdkIsUUFBUSxDQUFDLFlBQVksQ0FDdEIsRUFDRCxRQUFRLENBQUMsaUJBQWlCLENBQzNCO1FBQ0gsQ0FBQyxDQUFDLEVBQUUsRUFDUixDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FDeEIsQ0FBQztJQUVGLDhFQUE4RTtJQUM5RSw4REFBOEQ7SUFDOUQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUN2QixHQUFHLEVBQUUsQ0FDSCxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNO1FBQzNCLENBQUMsQ0FBQyx1QkFBdUIsQ0FDckIsV0FBVyxFQUNYLFFBQVEsQ0FBQyxjQUFjLEVBQ3ZCLFFBQVEsQ0FBQyxZQUFZLENBQ3RCO1FBQ0gsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQ2pDLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUN4QixDQUFDO0lBRUYsNEVBQTRFO0lBQzVFLDZDQUE2QztJQUM3QyxNQUFNLFVBQVUsR0FDZCxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxTQUFTLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQztJQUU1RSxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sVUFBVSxHQUFHLFNBQVM7UUFDMUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQztRQUN6QyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUNkLE1BQU0sY0FBYyxHQUFHLFNBQVM7UUFDOUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxtQkFBbUIsQ0FBQztRQUM3QyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUVsQixNQUFNLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMxRCxNQUFNLGNBQWMsR0FDbEIsUUFBUSxDQUFDLGlCQUFpQjtRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBRWpELE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7UUFDbkMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QixDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFFNUIsT0FBTyxDQUNMLGNBQ0UsSUFBSSxFQUFDLFVBQVUsbUJBQ0EsVUFBVSxtQkFDVixVQUFVLGdCQUNiLENBQUMsRUFDYixTQUFTLEVBQUUsRUFBRSxDQUNYLG1KQUFtSixFQUNuSixRQUFRLElBQUksWUFBWSxDQUN6QixFQUNELE9BQU8sRUFBRSxXQUFXLFlBRXBCLGVBQUssU0FBUyxFQUFDLG9CQUFvQixFQUFDLEtBQUssRUFBRSxvQkFBb0IsYUFDN0QsY0FDRSxTQUFTLEVBQUMseUVBQXlFLEVBQ25GLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsWUFFbkMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUNoQyxLQUFDLGFBQWEsSUFBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUksQ0FDdEQsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUNsQyxjQUNFLFNBQVMsRUFBQyw4QkFBOEIsRUFDeEMsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEdBQzlELENBQ0gsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3hCLEtBQUMsVUFBVSxJQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsVUFBVSxHQUFJLENBQzVELENBQUMsQ0FBQyxDQUFDLENBQ0YsS0FBQyxRQUFRLElBQ1AsRUFBRSxFQUFFLFVBQVUsRUFDZCxNQUFNLEVBQUUsY0FBYyxFQUN0QixLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksR0FDekMsQ0FDSCxHQUNHLEVBRUwsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUNaLGVBQ0UsU0FBUyxFQUFDLDJEQUEyRCxFQUNyRSxLQUFLLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxDQUFDLGFBRW5DLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFDLFdBQVcsSUFBQyxPQUFPLEVBQUUsT0FBTyxHQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFDN0QsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDaEIsS0FBQyx3QkFBd0IsSUFDdkIsU0FBUyxFQUFDLE1BQU0sRUFDaEIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUMzQixRQUFRLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQ2xDLFFBQVEsRUFBRSxZQUFZLEdBQ3RCLENBQ0gsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUNQLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ2pCLEtBQUMsd0JBQXdCLElBQ3ZCLFNBQVMsRUFBQyxPQUFPLEVBQ2pCLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssRUFDNUIsUUFBUSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUNuQyxRQUFRLEVBQUUsWUFBWSxHQUN0QixDQUNILENBQUMsQ0FBQyxDQUFDLElBQUksRUFDUCxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQ2hCLEtBQUMsYUFBYSxJQUNaLEtBQUssRUFBRSxVQUFVOzRCQUNqQiw4REFBOEQ7NEJBQzlELFNBQVMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FDL0MsQ0FDSCxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQ0osQ0FDUCxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQ0osR0FDRixDQUNQLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUV2Qiw4RUFBOEU7QUFDOUUseUVBQXlFO0FBQ3pFLDBFQUEwRTtBQUMxRSxhQUFhO0FBQ2IsOEVBQThFO0FBRTlFLDhFQUE4RTtBQUM5RSxpRUFBaUU7QUFDakUsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUM7QUFFbEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxnQkFBZ0IsQ0FBQyxFQUN0RCxLQUFLLEVBQ0wsY0FBYyxFQUNkLGVBQWUsRUFDZixhQUFhLEdBTWQ7SUFDQywwRUFBMEU7SUFDMUUsa0VBQWtFO0lBQ2xFLE1BQU0sYUFBYSxHQUFHLGNBQWMsR0FBRyxhQUFhLEdBQUcsYUFBYSxHQUFHLENBQUMsQ0FBQztJQUN6RSxNQUFNLEtBQUssR0FBRyxlQUFlLEdBQUcsYUFBYSxHQUFHLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFFbEUsd0VBQXdFO0lBQ3hFLHNFQUFzRTtJQUN0RSwyRUFBMkU7SUFDM0UsNEVBQTRFO0lBQzVFLHdFQUF3RTtJQUN4RSwwRUFBMEU7SUFDMUUsb0JBQW9CO0lBQ3BCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDO0lBQ2pELE1BQU0sTUFBTSxHQUNWLE9BQU87UUFDUCxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssS0FBSztZQUN6QixDQUFDLENBQUMsdUJBQXVCO1lBQ3pCLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDaEMsTUFBTSxjQUFjLEdBQ2xCLEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyxPQUFPO1FBQ2hDLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEtBQUssTUFBTTtZQUNqQyxDQUFDLENBQUMsb0JBQW9CLEdBQUcsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1YsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFdBQVcsR0FBRyxhQUFhLEdBQUcsY0FBYyxDQUFDO0lBQ3BFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRXhDLE1BQU0sS0FBSyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuRCxNQUFNLFlBQVksR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCw0RUFBNEU7SUFDNUUsb0VBQW9FO0lBQ3BFLE1BQU0sY0FBYyxHQUNsQixJQUFJLEdBQUcsTUFBTSxJQUFJLFlBQVk7UUFDM0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUU7UUFDOUQsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsWUFBWSxJQUFJLGFBQWE7WUFDeEMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtZQUNuQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztJQUU3RCxPQUFPLENBQ0wsOEJBQ0UsY0FDRSxTQUFTLEVBQUMsNEJBQTRCLEVBQ3RDLEtBQUssRUFBRTtvQkFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO29CQUMvQixLQUFLLEVBQUUsdUJBQXVCO29CQUM5QixHQUFHLEVBQUUsYUFBYTtpQkFDbkIsR0FDRCxFQUNGLGNBQ0UsU0FBUyxFQUFDLDRCQUE0QixFQUN0QyxLQUFLLEVBQUU7b0JBQ0wsSUFBSSxFQUFFLE1BQU07b0JBQ1osR0FBRyxFQUFFLFFBQVE7b0JBQ2IsTUFBTSxFQUFFLFdBQVcsR0FBRyxRQUFRO2lCQUMvQixHQUNELEVBQ0YsY0FDRSxTQUFTLEVBQUMsNEJBQTRCLEVBQ3RDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQ3RFLEVBQ0YsZUFDRSxTQUFTLEVBQUUsRUFBRSxDQUNYLGlLQUFpSyxFQUNqSyxjQUFjLENBQUMsU0FBUyxDQUN6QixFQUNELEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsWUFFL0MsS0FBSyxHQUNELElBQ04sQ0FDSixDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUM7QUFFSCw4RUFBOEU7QUFDOUUsaUJBQWlCO0FBQ2pCLDhFQUE4RTtBQUU5RSxNQUFNLFVBQVUsY0FBYyxDQUFDLEVBQzdCLE9BQU8sRUFDUCxTQUFTLEdBSVY7SUFDQyxPQUFPLENBQ0wsY0FBSyxTQUFTLEVBQUMsa0dBQWtHLFlBQy9HLGVBQUssU0FBUyxFQUFDLHdCQUF3QixhQUNwQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUNsQixlQUVFLFNBQVMsRUFBQywyRkFBMkYsRUFDckcsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLEdBQUcsRUFBRSxZQUV0QyxDQUFDLENBQUMsS0FBSyxJQUpILE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBS2YsQ0FDUixDQUFDLEVBQ0QsU0FBUyxJQUFJLENBQ1osZUFDRSxTQUFTLEVBQUMsdUxBQXVMLEVBQ2pNLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLEVBQUUsWUFFOUMsU0FBUyxDQUFDLEtBQUssR0FDWCxDQUNSLElBQ0csR0FDRixDQUNQLENBQUM7QUFDSixDQUFDO0FBYUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxFQUN2QixLQUFLLEVBQ0wsU0FBUyxFQUNULE9BQU8sRUFDUCxPQUFPLEVBQ1AsVUFBVSxFQUNWLFlBQVksRUFDWixRQUFRLEVBQ1IsWUFBWSxFQUNaLEtBQUssRUFDTCxPQUFPLEdBQUcsS0FBSyxHQVloQjtJQUNDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBaUIsSUFBSSxDQUFDLENBQUM7SUFDbEQsTUFBTSxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxNQUFNLFlBQVksR0FBRyxPQUFPLEdBQUcsU0FBUyxDQUFDO0lBQ3pDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLGNBQWMsR0FBRyxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1RSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLFlBQVksQ0FDakMsWUFBWSxFQUNaLEtBQUssQ0FBQyxNQUFNLEVBQ1osYUFBYSxDQUNkLENBQUM7SUFFRixTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQztRQUNoQyxJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU87UUFDaEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDeEMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDZixPQUFPLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMvQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCw0RUFBNEU7SUFDNUUsb0VBQW9FO0lBQ3BFLGtDQUFrQztJQUNsQyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQzdCLEdBQUcsRUFBRSxDQUNILGVBQWUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2RCxLQUFLLEVBQUU7WUFDTCxPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUs7WUFDbEIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1lBQ3hCLFdBQVcsRUFBRSxHQUFHLENBQUMsU0FBUztZQUMxQixVQUFVLEVBQUUsS0FBSztZQUNqQixnQkFBZ0IsRUFBRSxJQUFJO1NBQ0g7UUFDckIsY0FBYyxFQUFFLEdBQUcsQ0FBQyxRQUFRO1FBQzVCLGVBQWUsRUFBRSxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUM7S0FDbEMsQ0FBQyxDQUFDLEVBQ0wsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUM1QixDQUFDO0lBRUYseUVBQXlFO0lBQ3pFLHdDQUF3QztJQUN4QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQ3pCLEdBQUcsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN6RSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FDcEIsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFDL0IsSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDaEUsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPLElBQUksQ0FBQztRQUM3QyxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM1RSxPQUFPLEtBQUs7WUFDVixDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUN6RSxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1gsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRTdELE9BQU8sQ0FDTCxlQUNFLEdBQUcsRUFBRSxZQUFZLEVBQ2pCLFNBQVMsRUFBQyxpQ0FBaUMsRUFDM0MsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsYUFBYSxFQUFFLGFBRWxELG1DQUVFLFNBQVMsRUFBQyx3Q0FBd0MsRUFDbEQsS0FBSyxFQUFFLG9CQUFvQixZQUUxQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ3RCLHNFQUFzRTtnQkFDdEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUNsQyxjQUVFLFNBQVMsRUFBQyxnREFBZ0QsRUFDMUQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUZ2QyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUd6QixDQUNILENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDVCxHQUNHLEVBQ0wsS0FBSyxJQUFJLElBQUksSUFBSSxDQUNoQixjQUNFLFNBQVMsRUFBQyw2Q0FBNkMsRUFDdkQsS0FBSyxFQUFFLG9CQUFvQixZQUUzQixjQUNFLFNBQVMsRUFBQyxnREFBZ0QsRUFDMUQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUMzQyxHQUNFLENBQ1AsRUFDRCxjQUFLLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxjQUFjLEtBQUssR0FBRyxhQUFhLEtBQUssRUFBRSxZQUNoRSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQ3JDLEtBQUMsV0FBVyxJQUVWLElBQUksRUFBRSxJQUFJLEVBQ1YsU0FBUyxFQUFFLFNBQVMsRUFDcEIsWUFBWSxFQUFFLFlBQVksRUFDMUIsY0FBYyxFQUFFLGFBQWEsRUFDN0IsVUFBVSxFQUFFLFVBQVUsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUN0QyxRQUFRLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsRUFDekQsUUFBUSxFQUFFLFFBQVEsRUFDbEIsWUFBWSxFQUFFLFlBQVksSUFSckIsSUFBSSxDQUFDLE1BQU0sQ0FTaEIsQ0FDSCxDQUFDLEdBQ0UsRUFDTCxPQUFPLElBQUksV0FBVyxHQUFHLENBQUMsSUFBSSxDQUM3QixtQ0FFRSxTQUFTLEVBQUMsd0NBQXdDLEVBQ2xELEtBQUssRUFBRSxvQkFBb0IsWUFFMUIsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FDNUIsS0FBQyxnQkFBZ0IsT0FFWCxHQUFHLEVBQ1AsYUFBYSxFQUFFLGFBQWEsSUFGdkIsR0FBRyxDQUFDLGNBQWMsQ0FHdkIsQ0FDSCxDQUFDLEdBQ0UsQ0FDUCxFQUNBLFdBQVcsSUFBSSxDQUNkLG1DQUVFLFNBQVMsRUFBQyw2Q0FBNkMsRUFDdkQsS0FBSyxFQUFFLG9CQUFvQixZQUUzQixLQUFDLGdCQUFnQixPQUFLLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxHQUFJLEdBQy9ELENBQ1AsSUFDRyxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBBcnJvd0xlZnQsIEFycm93UmlnaHQgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBDU1NQcm9wZXJ0aWVzLCBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge1xuICBGcmFnbWVudCxcbiAgbWVtbyxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi8uLi9saWIvY24nO1xuaW1wb3J0IHtcbiAgZm9ybWF0RHVyYXRpb25QcmVjaXNlLFxuICBnZXRIaWdoUmVzSW5Ncyxcbn0gZnJvbSAnLi4vLi4vdHJhY2Utdmlld2VyL3V0aWwvdGltaW5nJztcbmltcG9ydCB7IGlzU3BhbkRpbW1lZEJ5U2VhcmNoLCB0eXBlIFNwYW5TZWFyY2hSZXN1bHQgfSBmcm9tICcuLi9zZWFyY2gnO1xuaW1wb3J0IHR5cGUgeyBTcGFuIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUge1xuICBPZmZzY3JlZW5NYXJrZXJzLFxuICBTZWdtZW50LFxuICBTZWdtZW50U3RhdHVzLFxuICBTcGFuRGVsdGEsXG4gIFRpbWVNYXJrZXIsXG59IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7XG4gIGNvbXB1dGVPZmZzY3JlZW5NYXJrZXJzLFxuICBjb21wdXRlU3BhbkRlbHRhLFxuICBjb21wdXRlU3BhbkdhcHMsXG4gIGNvbXB1dGVTcGFuTWFya2VycyxcbiAgY29tcHV0ZVNwYW5TZWdtZW50cyxcbiAgZ2V0UmVzb3VyY2VDb2xvcixcbiAgZ2V0U3BhbkR1cmF0aW9uTXMsXG4gIGlzU3BhbkVycm9yZWQsXG59IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7XG4gIGN1bGxDb2xsaWRpbmdNYXJrZXJzLFxuICBNYXJrZXJMYXllcixcbiAgT2Zmc2NyZWVuTWFya2VySW5kaWNhdG9yLFxuICBwcm9qZWN0TWFya2Vycyxcbn0gZnJvbSAnLi9zcGFuLW1hcmtlcnMnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL3RpbWVsaW5lLm1vZHVsZS5jc3MnO1xuaW1wb3J0IHsgUk9XX0hFSUdIVF9QWCwgdXNlUm93V2luZG93IH0gZnJvbSAnLi91c2Utcm93LXdpbmRvdyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ29uc3RhbnRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgVElOWV9CQVJfQk9YX1NJWkVfUFggPSAyNDtcbmNvbnN0IFRJTllfQkFSX1dJRFRIX1BYID0gNDtcbmV4cG9ydCBjb25zdCBUSU1FTElORV9QQURESU5HX1BYID0gMTY7XG5cbmNvbnN0IFNFR01FTlRfQ0xBU1NFUzogUmVjb3JkPFNlZ21lbnRTdGF0dXMsIHN0cmluZz4gPSB7XG4gIHF1ZXVlZDogJ2JnLWdyYXktNDAwIGJvcmRlciBib3JkZXItZ3JheS01MDAnLFxuICBwZW5kaW5nOiAnYmctZ3JheS0yMDAgYm9yZGVyIGJvcmRlci1ncmF5LTUwMCcsXG4gIHJldHJ5aW5nOiAnYmctZ3JheS00MDAgYm9yZGVyIGJvcmRlci1ncmF5LTUwMCcsXG4gIHdhaXRpbmc6ICdiZy1ncmF5LTIwMCBib3JkZXIgYm9yZGVyLWdyYXktNTAwJyxcbiAgcnVubmluZzogJ2JnLWJsdWUtMjAwIGJvcmRlciBib3JkZXItYmx1ZS01MDAnLFxuICBjb21wbGV0ZWQ6ICdiZy1ibHVlLTIwMCBib3JkZXIgYm9yZGVyLWJsdWUtNTAwJyxcbiAgZmFpbGVkOiAnYmctcmVkLTIwMCBib3JkZXIgYm9yZGVyLXJlZC01MDAnLFxuICBzdWNjZWVkZWQ6ICdiZy1ncmVlbi0yMDAgYm9yZGVyIGJvcmRlci1ncmVlbi01MDAnLFxuICBzbGVlcGluZzogJ2JnLWdyYXktNDAwIGJvcmRlciBib3JkZXItZ3JheS01MDAnLFxuICByZWNlaXZlZDogJ2JnLWJsdWUtMjAwIGJvcmRlciBib3JkZXItYmx1ZS01MDAnLFxufTtcblxuY29uc3QgVElNRUxJTkVfSU5TRVRfU1RZTEU6IENTU1Byb3BlcnRpZXMgPSB7XG4gIGxlZnQ6IFRJTUVMSU5FX1BBRERJTkdfUFgsXG4gIHJpZ2h0OiBUSU1FTElORV9QQURESU5HX1BYLFxufTtcblxuY29uc3QgU1RSSVBFRF9TRUdNRU5UX1NUQVRVU0VTOiBSZWFkb25seVNldDxTZWdtZW50U3RhdHVzPiA9IG5ldyBTZXQoW1xuICAncGVuZGluZycsXG4gICdydW5uaW5nJyxcbiAgJ3JlY2VpdmVkJyxcbl0pO1xuXG5mdW5jdGlvbiBBbmltYXRlZFN0cmlwZXMoeyBzdGF0dXMgfTogeyBzdGF0dXM6IFNlZ21lbnRTdGF0dXMgfSk6IFJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgYXJpYS1oaWRkZW5cbiAgICAgIGNsYXNzTmFtZT17XG4gICAgICAgIHN0YXR1cyA9PT0gJ3BlbmRpbmcnID8gc3R5bGVzLnBlbmRpbmdTdHJpcGVzIDogc3R5bGVzLnJ1bm5pbmdTdHJpcGVzXG4gICAgICB9XG4gICAgLz5cbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBCYXIgZ2VvbWV0cnlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50eXBlIEJhck1vZGUgPVxuICB8IHsga2luZDogJ2Fycm93JzsgZGlyZWN0aW9uOiAnbGVmdCcgfCAncmlnaHQnIH1cbiAgfCB7IGtpbmQ6ICd0aW55JyB9XG4gIHwgeyBraW5kOiAnZnVsbCcgfTtcblxuaW50ZXJmYWNlIEJhckdlb21ldHJ5IHtcbiAgbW9kZTogQmFyTW9kZTtcbiAgbGVmdFBjdDogbnVtYmVyO1xuICB3aWR0aFBjdDogbnVtYmVyO1xuICB2aXNpYmxlU3RhcnRNczogbnVtYmVyO1xuICB2aXNpYmxlRW5kTXM6IG51bWJlcjtcbiAgdmlzaWJsZVBpeGVsV2lkdGg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb21wdXRlIHRoZSBiYXIncyBnZW9tZXRyeSBpbnNpZGUgdGhlIHRpbWVsaW5lIHZpZXdwb3J0LiBQZXJjZW50YWdlcyBhcmVcbiAqIGFsd2F5cyBpbiBbMCwgMTAwXSBzbyB3ZSBuZXZlciBlbWl0IENTUyB2YWx1ZXMgdGhhdCBleGNlZWQgYnJvd3NlciBsYXlvdXRcbiAqIGxpbWl0cyBhdCBleHRyZW1lIHpvb20uXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVCYXJHZW9tZXRyeShcbiAgc3RhcnRNczogbnVtYmVyLFxuICBlbmRNczogbnVtYmVyLFxuICB2aWV3U3RhcnQ6IG51bWJlcixcbiAgdmlld0VuZDogbnVtYmVyLFxuICBjb250YWluZXJXaWR0aDogbnVtYmVyXG4pOiBCYXJHZW9tZXRyeSB7XG4gIGNvbnN0IHZpZXdEdXJhdGlvbiA9IHZpZXdFbmQgLSB2aWV3U3RhcnQ7XG4gIGNvbnN0IHZpc2libGVTdGFydE1zID0gTWF0aC5tYXgoc3RhcnRNcywgdmlld1N0YXJ0KTtcbiAgY29uc3QgdmlzaWJsZUVuZE1zID0gTWF0aC5taW4oZW5kTXMsIHZpZXdFbmQpO1xuICBjb25zdCB2aXNpYmxlRHVyYXRpb25NcyA9IE1hdGgubWF4KDAsIHZpc2libGVFbmRNcyAtIHZpc2libGVTdGFydE1zKTtcbiAgY29uc3Qgd2lkdGhGcmFjID0gdmlld0R1cmF0aW9uID4gMCA/IHZpc2libGVEdXJhdGlvbk1zIC8gdmlld0R1cmF0aW9uIDogMDtcbiAgY29uc3QgdmlzaWJsZVBpeGVsV2lkdGggPSB3aWR0aEZyYWMgKiBjb250YWluZXJXaWR0aDtcblxuICBjb25zdCBpc1RpbnkgPSBjb250YWluZXJXaWR0aCA+IDAgJiYgdmlzaWJsZVBpeGVsV2lkdGggPCBUSU5ZX0JBUl9CT1hfU0laRV9QWDtcbiAgY29uc3QgZXh0ZW5kc09mZkxlZnQgPSBzdGFydE1zIDwgdmlld1N0YXJ0O1xuICBjb25zdCBleHRlbmRzT2ZmUmlnaHQgPSBlbmRNcyA+IHZpZXdFbmQ7XG5cbiAgY29uc3QgbW9kZTogQmFyTW9kZSA9XG4gICAgaXNUaW55ICYmIChleHRlbmRzT2ZmTGVmdCB8fCBleHRlbmRzT2ZmUmlnaHQpXG4gICAgICA/IHsga2luZDogJ2Fycm93JywgZGlyZWN0aW9uOiBleHRlbmRzT2ZmUmlnaHQgPyAncmlnaHQnIDogJ2xlZnQnIH1cbiAgICAgIDogaXNUaW55XG4gICAgICAgID8geyBraW5kOiAndGlueScgfVxuICAgICAgICA6IHsga2luZDogJ2Z1bGwnIH07XG5cbiAgcmV0dXJuIHtcbiAgICBtb2RlLFxuICAgIGxlZnRQY3Q6XG4gICAgICB2aWV3RHVyYXRpb24gPiAwXG4gICAgICAgID8gKCh2aXNpYmxlU3RhcnRNcyAtIHZpZXdTdGFydCkgLyB2aWV3RHVyYXRpb24pICogMTAwXG4gICAgICAgIDogMCxcbiAgICB3aWR0aFBjdDogd2lkdGhGcmFjICogMTAwLFxuICAgIHZpc2libGVTdGFydE1zLFxuICAgIHZpc2libGVFbmRNcyxcbiAgICB2aXNpYmxlUGl4ZWxXaWR0aCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0QmFyUG9zaXRpb25TdHlsZShnZW9tZXRyeTogQmFyR2VvbWV0cnkpOiB7XG4gIGxlZnQ6IHN0cmluZztcbiAgd2lkdGg6IHN0cmluZztcbn0ge1xuICBzd2l0Y2ggKGdlb21ldHJ5Lm1vZGUua2luZCkge1xuICAgIGNhc2UgJ2Fycm93JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6XG4gICAgICAgICAgZ2VvbWV0cnkubW9kZS5kaXJlY3Rpb24gPT09ICdyaWdodCdcbiAgICAgICAgICAgID8gYGNhbGMoMTAwJSAtICR7VElOWV9CQVJfQk9YX1NJWkVfUFh9cHgpYFxuICAgICAgICAgICAgOiAnMHB4JyxcbiAgICAgICAgd2lkdGg6IGAke1RJTllfQkFSX0JPWF9TSVpFX1BYfXB4YCxcbiAgICAgIH07XG4gICAgY2FzZSAndGlueSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0OiBgbWluKCR7Z2VvbWV0cnkubGVmdFBjdH0lLCBjYWxjKDEwMCUgLSAke1RJTllfQkFSX1dJRFRIX1BYfXB4KSlgLFxuICAgICAgICB3aWR0aDogYCR7VElOWV9CQVJfV0lEVEhfUFh9cHhgLFxuICAgICAgfTtcbiAgICBjYXNlICdmdWxsJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQ6IGAke2dlb21ldHJ5LmxlZnRQY3R9JWAsXG4gICAgICAgIHdpZHRoOiBgbWF4KCR7Z2VvbWV0cnkud2lkdGhQY3R9JSwgNHB4KWAsXG4gICAgICB9O1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VnbWVudCBwcm9qZWN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuaW50ZXJmYWNlIFZpc2libGVTZWdtZW50IHtcbiAgc3RhdHVzOiBTZWdtZW50U3RhdHVzO1xuICBsZWZ0UGN0OiBudW1iZXI7XG4gIHdpZHRoUGN0OiBudW1iZXI7XG4gIHBpeGVsV2lkdGg6IG51bWJlcjtcbiAgZnVsbER1cmF0aW9uTXM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQcm9qZWN0IHN0YXR1cyBzZWdtZW50cyBvbnRvIHRoZSB2aXNpYmxlIHBvcnRpb24gb2YgYSBiYXIuIFNlZ21lbnRzIGZ1bGx5XG4gKiBvdXRzaWRlIHRoZSB2aXNpYmxlIHdpbmRvdyBhcmUgZHJvcHBlZDsgc2VnbWVudHMgY3Jvc3NpbmcgdGhlIGVkZ2UgYXJlXG4gKiBjbGlwcGVkIHRvIFswJSwgMTAwJV0gb2YgdGhlIHZpc2libGUgYmFyLlxuICovXG5mdW5jdGlvbiBwcm9qZWN0U2VnbWVudHMoXG4gIHNlZ21lbnRzOiBTZWdtZW50W10sXG4gIHNwYW5TdGFydE1zOiBudW1iZXIsXG4gIHNwYW5EdXJhdGlvbk1zOiBudW1iZXIsXG4gIGdlb21ldHJ5OiBCYXJHZW9tZXRyeVxuKTogVmlzaWJsZVNlZ21lbnRbXSB7XG4gIGNvbnN0IHZpc2libGVEdXJhdGlvbk1zID0gZ2VvbWV0cnkudmlzaWJsZUVuZE1zIC0gZ2VvbWV0cnkudmlzaWJsZVN0YXJ0TXM7XG4gIGlmICh2aXNpYmxlRHVyYXRpb25NcyA8PSAwKSByZXR1cm4gW107XG5cbiAgcmV0dXJuIHNlZ21lbnRzLmZsYXRNYXAoKHNlZykgPT4ge1xuICAgIGNvbnN0IHNlZ1N0YXJ0TXMgPSBzcGFuU3RhcnRNcyArIHNlZy5zdGFydEZyYWN0aW9uICogc3BhbkR1cmF0aW9uTXM7XG4gICAgY29uc3Qgc2VnRW5kTXMgPSBzcGFuU3RhcnRNcyArIHNlZy5lbmRGcmFjdGlvbiAqIHNwYW5EdXJhdGlvbk1zO1xuICAgIGNvbnN0IHN0YXJ0TXMgPSBNYXRoLm1heChzZWdTdGFydE1zLCBnZW9tZXRyeS52aXNpYmxlU3RhcnRNcyk7XG4gICAgY29uc3QgZW5kTXMgPSBNYXRoLm1pbihzZWdFbmRNcywgZ2VvbWV0cnkudmlzaWJsZUVuZE1zKTtcbiAgICBpZiAoZW5kTXMgPD0gc3RhcnRNcykgcmV0dXJuIFtdO1xuXG4gICAgY29uc3Qgd2lkdGhGcmFjID0gKGVuZE1zIC0gc3RhcnRNcykgLyB2aXNpYmxlRHVyYXRpb25NcztcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBzdGF0dXM6IHNlZy5zdGF0dXMsXG4gICAgICAgIGxlZnRQY3Q6XG4gICAgICAgICAgKChzdGFydE1zIC0gZ2VvbWV0cnkudmlzaWJsZVN0YXJ0TXMpIC8gdmlzaWJsZUR1cmF0aW9uTXMpICogMTAwLFxuICAgICAgICB3aWR0aFBjdDogd2lkdGhGcmFjICogMTAwLFxuICAgICAgICBwaXhlbFdpZHRoOiB3aWR0aEZyYWMgKiBnZW9tZXRyeS52aXNpYmxlUGl4ZWxXaWR0aCxcbiAgICAgICAgZnVsbER1cmF0aW9uTXM6IChzZWcuZW5kRnJhY3Rpb24gLSBzZWcuc3RhcnRGcmFjdGlvbikgKiBzcGFuRHVyYXRpb25NcyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU21hbGwgcmVuZGVyIGhlbHBlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogRXN0aW1hdGVkIHJlbmRlcmVkIHdpZHRoIG9mIGEgMTBweC1tb25vIGR1cmF0aW9uIGxhYmVsICg2cHgvZ2x5cGggKyBwYWRkaW5nKS4gKi9cbmZ1bmN0aW9uIGVzdGltYXRlTGFiZWxXaWR0aFB4KGxhYmVsOiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gbGFiZWwubGVuZ3RoICogNiArIDEyO1xufVxuXG5mdW5jdGlvbiBEdXJhdGlvbkxhYmVsKHtcbiAgbGFiZWwsXG4gIGNsYXNzTmFtZSxcbn06IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufSk6IFJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGluc2V0LTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBvdmVyZmxvdy1oaWRkZW4gcHgtMSB0ZXh0LVsxMHB4XSBmb250LW1vbm8gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtbGVmdCB0ZXh0LWdyYXktMTAwMCB0YWJ1bGFyLW51bXMgb3BhY2l0eS0wIGdyb3VwLWhvdmVyL3RpbWVsaW5lLXJvdzpvcGFjaXR5LTEwMCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICA+XG4gICAgICB7bGFiZWx9XG4gICAgPC9zcGFuPlxuICApO1xufVxuXG5mdW5jdGlvbiBCb3VuZGFyeUFycm93KHtcbiAgZGlyZWN0aW9uLFxufToge1xuICBkaXJlY3Rpb246ICdsZWZ0JyB8ICdyaWdodCc7XG59KTogUmVhY3ROb2RlIHtcbiAgY29uc3QgSWNvbiA9IGRpcmVjdGlvbiA9PT0gJ3JpZ2h0JyA/IEFycm93UmlnaHQgOiBBcnJvd0xlZnQ7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtNiB3LTYgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtWzAuMjVyZW1dXCI+XG4gICAgICA8SWNvbiBjbGFzc05hbWU9XCJzaXplLTMgdGV4dC1ncmF5LTkwMFwiIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFBsYWluQmFyKHtcbiAgYmcsXG4gIGJvcmRlcixcbiAgbGFiZWwsXG59OiB7XG4gIGJnOiBzdHJpbmc7XG4gIGJvcmRlcjogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nIHwgbnVsbDtcbn0pOiBSZWFjdE5vZGUge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGgtNiB3LWZ1bGwgbWluLXctMSByb3VuZGVkLVswLjI1cmVtXSBib3JkZXJcIlxuICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZDogYmcsIGJvcmRlckNvbG9yOiBib3JkZXIgfX1cbiAgICA+XG4gICAgICB7bGFiZWwgPyA8RHVyYXRpb25MYWJlbCBsYWJlbD17bGFiZWx9IC8+IDogbnVsbH1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gTGVhZEluQ29ubmVjdG9yKHtcbiAgbGVmdFBjdCxcbiAgd2lkdGhQY3QsXG4gIGxhYmVsLFxufToge1xuICBsZWZ0UGN0OiBudW1iZXI7XG4gIHdpZHRoUGN0OiBudW1iZXI7XG4gIGxhYmVsOiBzdHJpbmcgfCBudWxsO1xufSk6IFJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTEvMiBoLTYgLXRyYW5zbGF0ZS15LTEvMlwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICBsZWZ0OiBgY2FsYygke2xlZnRQY3R9JSArIDAuNXB4KWAsXG4gICAgICAgIHdpZHRoOiBgY2FsYygke3dpZHRoUGN0fSUgLSAxcHgpYCxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTAgdG9wLTEvMiBoLTQgdy1weCAtdHJhbnNsYXRlLXktMS8yIGJnLWdyYXktNTAwXCIgLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQteC0wIHRvcC0xLzIgaC1weCAtdHJhbnNsYXRlLXktMS8yIGJnLWdyYXktNTAwXCIgLz5cbiAgICAgIHtsYWJlbCA/IDxEdXJhdGlvbkxhYmVsIGxhYmVsPXtsYWJlbH0gLz4gOiBudWxsfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBTZWdtZW50QmFyKHtcbiAgc2VnbWVudHMsXG4gIHNob3dMYWJlbHMgPSB0cnVlLFxufToge1xuICBzZWdtZW50czogVmlzaWJsZVNlZ21lbnRbXTtcbiAgLyoqXG4gICAqIFdoZW4gZmFsc2UsIHNlZ21lbnQgZHVyYXRpb24gbGFiZWxzIGFyZSBzdXBwcmVzc2VkLiBVc2VkIHdoZW4gYSBzZXBhcmF0ZVxuICAgKiB0b3AgbGF5ZXIgKGUuZy4gdGhlIHJlc3VtcHRpb24tbWFya2VyIGR1cmF0aW9uIG92ZXJsYXkpIHJlbmRlcnMgdGhlIGxhYmVsXG4gICAqIGFib3ZlIHRoZSBtYXJrZXJzIGluc3RlYWQsIHNvIHdlIGRvbid0IGRyYXcgaXQgdHdpY2UuXG4gICAqL1xuICBzaG93TGFiZWxzPzogYm9vbGVhbjtcbn0pOiBSZWFjdE5vZGUge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgaC02IHctZnVsbFwiPlxuICAgICAge3NlZ21lbnRzLm1hcCgoc2VnLCBpKSA9PiB7XG4gICAgICAgIGlmIChzZWcuc3RhdHVzID09PSAncXVldWVkJykge1xuICAgICAgICAgIGNvbnN0IGxlYWRJbkxhYmVsID0gZm9ybWF0RHVyYXRpb25QcmVjaXNlKHNlZy5mdWxsRHVyYXRpb25Ncyk7XG4gICAgICAgICAgY29uc3Qgc2hvd0xlYWRJbkxhYmVsID1cbiAgICAgICAgICAgIHNob3dMYWJlbHMgJiZcbiAgICAgICAgICAgIHNlZy5waXhlbFdpZHRoID49IE1hdGgubWF4KDQwLCBlc3RpbWF0ZUxhYmVsV2lkdGhQeChsZWFkSW5MYWJlbCkpO1xuICAgICAgICAgIGNvbnN0IGlzRnVsbFdpZHRoUXVldWVkID0gc2VnbWVudHMubGVuZ3RoID09PSAxO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8RnJhZ21lbnQga2V5PXtpfT5cbiAgICAgICAgICAgICAgPExlYWRJbkNvbm5lY3RvclxuICAgICAgICAgICAgICAgIGxlZnRQY3Q9e3NlZy5sZWZ0UGN0fVxuICAgICAgICAgICAgICAgIHdpZHRoUGN0PXtzZWcud2lkdGhQY3R9XG4gICAgICAgICAgICAgICAgbGFiZWw9e3Nob3dMZWFkSW5MYWJlbCA/IGxlYWRJbkxhYmVsIDogbnVsbH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAge2lzRnVsbFdpZHRoUXVldWVkID8gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC0xLzIgaC00IHctcHggLXRyYW5zbGF0ZS15LTEvMiBiZy1ncmF5LTUwMFwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBsZWZ0OiBgY2FsYygke3NlZy5sZWZ0UGN0ICsgc2VnLndpZHRoUGN0fSUgLSAxLjVweClgLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvRnJhZ21lbnQ+XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhYmVsID0gZm9ybWF0RHVyYXRpb25QcmVjaXNlKHNlZy5mdWxsRHVyYXRpb25Ncyk7XG4gICAgICAgIC8vIE9ubHkgcmVuZGVyIHRoZSBsYWJlbCB3aGVuIHRoZXJlJ3MgZW5vdWdoIHJvb20gZm9yIGl0IHdpdGhvdXQgY2xpcHBpbmcuXG4gICAgICAgIGNvbnN0IHNob3dMYWJlbCA9XG4gICAgICAgICAgc2hvd0xhYmVscyAmJlxuICAgICAgICAgIHNlZy5waXhlbFdpZHRoID49IE1hdGgubWF4KDQwLCBlc3RpbWF0ZUxhYmVsV2lkdGhQeChsYWJlbCkpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgJ2Fic29sdXRlIGgtZnVsbCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1bMC4yNXJlbV0nLFxuICAgICAgICAgICAgICBTRUdNRU5UX0NMQVNTRVNbc2VnLnN0YXR1c11cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAvLyAxcHggZ2FwIGJldHdlZW4gYWRqYWNlbnQgc2VnbWVudHMsIGRpc3RyaWJ1dGVkIGVxdWFsbHkuXG4gICAgICAgICAgICAgIGxlZnQ6IGBjYWxjKCR7c2VnLmxlZnRQY3R9JSArIDAuNXB4KWAsXG4gICAgICAgICAgICAgIHdpZHRoOiBgY2FsYygke3NlZy53aWR0aFBjdH0lIC0gMXB4KWAsXG4gICAgICAgICAgICAgIG1pbldpZHRoOiAxLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7U1RSSVBFRF9TRUdNRU5UX1NUQVRVU0VTLmhhcyhzZWcuc3RhdHVzKSA/IChcbiAgICAgICAgICAgICAgPEFuaW1hdGVkU3RyaXBlcyBzdGF0dXM9e3NlZy5zdGF0dXN9IC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHtzaG93TGFiZWwgPyA8RHVyYXRpb25MYWJlbCBsYWJlbD17bGFiZWx9IC8+IDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRpbWVsaW5lQmFyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgVGltZWxpbmVCYXIgPSBtZW1vKGZ1bmN0aW9uIFRpbWVsaW5lQmFyKHtcbiAgc3BhbixcbiAgdmlld1N0YXJ0LFxuICB2aWV3RHVyYXRpb24sXG4gIGNvbnRhaW5lcldpZHRoLFxuICBpc1NlbGVjdGVkLFxuICBpc0RpbW1lZCxcbiAgb25TZWxlY3QsXG4gIG9uUmV2ZWFsVGltZSxcbn06IHtcbiAgc3BhbjogU3BhbjtcbiAgdmlld1N0YXJ0OiBudW1iZXI7XG4gIHZpZXdEdXJhdGlvbjogbnVtYmVyO1xuICBjb250YWluZXJXaWR0aDogbnVtYmVyO1xuICBpc1NlbGVjdGVkOiBib29sZWFuO1xuICBpc0RpbW1lZD86IGJvb2xlYW47XG4gIG9uU2VsZWN0OiAoc3BhbklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uUmV2ZWFsVGltZT86ICh0aW1lTXM6IG51bWJlcikgPT4gdm9pZDtcbn0pOiBSZWFjdE5vZGUge1xuICBjb25zdCBzdGFydE1zID0gZ2V0SGlnaFJlc0luTXMoc3Bhbi5zdGFydFRpbWUpO1xuICBjb25zdCBlbmRNcyA9IGdldEhpZ2hSZXNJbk1zKHNwYW4uZW5kVGltZSk7XG4gIGNvbnN0IHRvdGFsRHVyYXRpb25NcyA9IGdldFNwYW5EdXJhdGlvbk1zKHNwYW4pO1xuXG4gIGNvbnN0IGdlb21ldHJ5ID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgY29tcHV0ZUJhckdlb21ldHJ5KFxuICAgICAgICBzdGFydE1zLFxuICAgICAgICBlbmRNcyxcbiAgICAgICAgdmlld1N0YXJ0LFxuICAgICAgICB2aWV3U3RhcnQgKyB2aWV3RHVyYXRpb24sXG4gICAgICAgIGNvbnRhaW5lcldpZHRoXG4gICAgICApLFxuICAgIFtzdGFydE1zLCBlbmRNcywgdmlld1N0YXJ0LCB2aWV3RHVyYXRpb24sIGNvbnRhaW5lcldpZHRoXVxuICApO1xuXG4gIGNvbnN0IGJhc2VTZWdtZW50cyA9IHVzZU1lbW8oKCkgPT4gY29tcHV0ZVNwYW5TZWdtZW50cyhzcGFuKSwgW3NwYW5dKTtcbiAgY29uc3Qgc2VnbWVudHMgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBnZW9tZXRyeS5tb2RlLmtpbmQgPT09ICdmdWxsJ1xuICAgICAgICA/IHByb2plY3RTZWdtZW50cyhiYXNlU2VnbWVudHMsIHN0YXJ0TXMsIHRvdGFsRHVyYXRpb25NcywgZ2VvbWV0cnkpXG4gICAgICAgIDogW10sXG4gICAgW2dlb21ldHJ5LCBiYXNlU2VnbWVudHMsIHN0YXJ0TXMsIHRvdGFsRHVyYXRpb25Nc11cbiAgKTtcblxuICBjb25zdCBiYXNlTWFya2VycyA9IHVzZU1lbW8oKCkgPT4gY29tcHV0ZVNwYW5NYXJrZXJzKHNwYW4pLCBbc3Bhbl0pO1xuICBjb25zdCBtYXJrZXJzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgZ2VvbWV0cnkubW9kZS5raW5kID09PSAnZnVsbCdcbiAgICAgICAgPyBjdWxsQ29sbGlkaW5nTWFya2VycyhcbiAgICAgICAgICAgIHByb2plY3RNYXJrZXJzKFxuICAgICAgICAgICAgICBiYXNlTWFya2VycyxcbiAgICAgICAgICAgICAgZ2VvbWV0cnkudmlzaWJsZVN0YXJ0TXMsXG4gICAgICAgICAgICAgIGdlb21ldHJ5LnZpc2libGVFbmRNc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGdlb21ldHJ5LnZpc2libGVQaXhlbFdpZHRoXG4gICAgICAgICAgKVxuICAgICAgICA6IFtdLFxuICAgIFtnZW9tZXRyeSwgYmFzZU1hcmtlcnNdXG4gICk7XG5cbiAgLy8gTWFya2VycyB0aGF0IGZhbGwgb3V0c2lkZSB0aGUgdmlzaWJsZSB3aW5kb3cgKHNjcm9sbGVkIG9mZiB3aGlsZSB6b29tZWQgaW4pXG4gIC8vIOKAlCBzdXJmYWNlZCBhcyBlZGdlIGluZGljYXRvcnMgc28gdGhleSBhcmVuJ3Qgc2lsZW50bHkgbG9zdC5cbiAgY29uc3Qgb2Zmc2NyZWVuID0gdXNlTWVtbzxPZmZzY3JlZW5NYXJrZXJzPihcbiAgICAoKSA9PlxuICAgICAgZ2VvbWV0cnkubW9kZS5raW5kID09PSAnZnVsbCdcbiAgICAgICAgPyBjb21wdXRlT2Zmc2NyZWVuTWFya2VycyhcbiAgICAgICAgICAgIGJhc2VNYXJrZXJzLFxuICAgICAgICAgICAgZ2VvbWV0cnkudmlzaWJsZVN0YXJ0TXMsXG4gICAgICAgICAgICBnZW9tZXRyeS52aXNpYmxlRW5kTXNcbiAgICAgICAgICApXG4gICAgICAgIDogeyBsZWZ0OiBudWxsLCByaWdodDogbnVsbCB9LFxuICAgIFtnZW9tZXRyeSwgYmFzZU1hcmtlcnNdXG4gICk7XG5cbiAgLy8gTWFya2VycyAodmlzaWJsZSBvciBvZmYtc2NyZWVuKSBtb3ZlIHRoZSBkdXJhdGlvbiBsYWJlbCBpbnRvIHRoZSBvdmVybGF5LFxuICAvLyBzbyB0aGUgaW4tYmFyIHNlZ21lbnQgbGFiZWwgaXMgc3VwcHJlc3NlZC5cbiAgY29uc3QgaGFzTWFya2VycyA9XG4gICAgbWFya2Vycy5sZW5ndGggPiAwIHx8IG9mZnNjcmVlbi5sZWZ0ICE9PSBudWxsIHx8IG9mZnNjcmVlbi5yaWdodCAhPT0gbnVsbDtcblxuICBjb25zdCBpc0Vycm9yZWQgPSBpc1NwYW5FcnJvcmVkKHNwYW4pO1xuICBjb25zdCBjb2xvcnMgPSBnZXRSZXNvdXJjZUNvbG9yKHNwYW4ucmVzb3VyY2UpO1xuICBjb25zdCBmYWxsYmFja0JnID0gaXNFcnJvcmVkXG4gICAgPyAoY29sb3JzLmVycm9yQmcgPz8gJ3ZhcigtLWRzLXJlZC0yMDApJylcbiAgICA6IGNvbG9ycy5iZztcbiAgY29uc3QgZmFsbGJhY2tCb3JkZXIgPSBpc0Vycm9yZWRcbiAgICA/IChjb2xvcnMuZXJyb3JCb3JkZXIgPz8gJ3ZhcigtLWRzLXJlZC01MDApJylcbiAgICA6IGNvbG9ycy5ib3JkZXI7XG5cbiAgY29uc3QgdG90YWxMYWJlbCA9IGZvcm1hdER1cmF0aW9uUHJlY2lzZSh0b3RhbER1cmF0aW9uTXMpO1xuICBjb25zdCBzaG93VG90YWxMYWJlbCA9XG4gICAgZ2VvbWV0cnkudmlzaWJsZVBpeGVsV2lkdGggPj1cbiAgICBNYXRoLm1heCg0MCwgZXN0aW1hdGVMYWJlbFdpZHRoUHgodG90YWxMYWJlbCkpO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG9uU2VsZWN0KHNwYW4uc3BhbklkKTtcbiAgfSwgW29uU2VsZWN0LCBzcGFuLnNwYW5JZF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcm9sZT1cInRyZWVpdGVtXCJcbiAgICAgIGFyaWEtc2VsZWN0ZWQ9e2lzU2VsZWN0ZWR9XG4gICAgICBhcmlhLWV4cGFuZGVkPXtpc1NlbGVjdGVkfVxuICAgICAgYXJpYS1sZXZlbD17MX1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdncm91cC90aW1lbGluZS1yb3cgaC0xMCByZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBob3ZlcjpiZy1ncmF5LTEwMCBhcmlhLXNlbGVjdGVkOmJnLWdyYXktMTAwIGFyaWEtc2VsZWN0ZWQ6aG92ZXI6YmctZ3JheS0yMDAgdHJhbnNpdGlvbi1vcGFjaXR5JyxcbiAgICAgICAgaXNEaW1tZWQgJiYgJ29wYWNpdHktMzUnXG4gICAgICApfVxuICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC15LTBcIiBzdHlsZT17VElNRUxJTkVfSU5TRVRfU1RZTEV9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTEvMiBoLTYgLXRyYW5zbGF0ZS15LTEvMiBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1bMC4yNXJlbV1cIlxuICAgICAgICAgIHN0eWxlPXtnZXRCYXJQb3NpdGlvblN0eWxlKGdlb21ldHJ5KX1cbiAgICAgICAgPlxuICAgICAgICAgIHtnZW9tZXRyeS5tb2RlLmtpbmQgPT09ICdhcnJvdycgPyAoXG4gICAgICAgICAgICA8Qm91bmRhcnlBcnJvdyBkaXJlY3Rpb249e2dlb21ldHJ5Lm1vZGUuZGlyZWN0aW9ufSAvPlxuICAgICAgICAgICkgOiBnZW9tZXRyeS5tb2RlLmtpbmQgPT09ICd0aW55JyA/IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC02IHJvdW5kZWQtWzAuMjVyZW1dIGJvcmRlclwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmQ6IGZhbGxiYWNrQmcsIGJvcmRlckNvbG9yOiBmYWxsYmFja0JvcmRlciB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogc2VnbWVudHMubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICAgIDxTZWdtZW50QmFyIHNlZ21lbnRzPXtzZWdtZW50c30gc2hvd0xhYmVscz17IWhhc01hcmtlcnN9IC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxQbGFpbkJhclxuICAgICAgICAgICAgICBiZz17ZmFsbGJhY2tCZ31cbiAgICAgICAgICAgICAgYm9yZGVyPXtmYWxsYmFja0JvcmRlcn1cbiAgICAgICAgICAgICAgbGFiZWw9e3Nob3dUb3RhbExhYmVsID8gdG90YWxMYWJlbCA6IG51bGx9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7LyogT3ZlcmxheSAobm90IGNsaXBwZWQpOiB0aWNrcywgb2ZmLXNjcmVlbiBpbmRpY2F0b3JzLCB0aGVuIHRoZSBkdXJhdGlvbiBsYWJlbCBvbiB0b3AuICovfVxuICAgICAgICB7aGFzTWFya2VycyA/IChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIHRvcC0xLzIgaC02IC10cmFuc2xhdGUteS0xLzJcIlxuICAgICAgICAgICAgc3R5bGU9e2dldEJhclBvc2l0aW9uU3R5bGUoZ2VvbWV0cnkpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHttYXJrZXJzLmxlbmd0aCA+IDAgPyA8TWFya2VyTGF5ZXIgbWFya2Vycz17bWFya2Vyc30gLz4gOiBudWxsfVxuICAgICAgICAgICAge29mZnNjcmVlbi5sZWZ0ID8gKFxuICAgICAgICAgICAgICA8T2Zmc2NyZWVuTWFya2VySW5kaWNhdG9yXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICAgICAgY291bnQ9e29mZnNjcmVlbi5sZWZ0LmNvdW50fVxuICAgICAgICAgICAgICAgIHRhcmdldE1zPXtvZmZzY3JlZW4ubGVmdC5uZWFyZXN0TXN9XG4gICAgICAgICAgICAgICAgb25SZXZlYWw9e29uUmV2ZWFsVGltZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAge29mZnNjcmVlbi5yaWdodCA/IChcbiAgICAgICAgICAgICAgPE9mZnNjcmVlbk1hcmtlckluZGljYXRvclxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbj1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICBjb3VudD17b2Zmc2NyZWVuLnJpZ2h0LmNvdW50fVxuICAgICAgICAgICAgICAgIHRhcmdldE1zPXtvZmZzY3JlZW4ucmlnaHQubmVhcmVzdE1zfVxuICAgICAgICAgICAgICAgIG9uUmV2ZWFsPXtvblJldmVhbFRpbWV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHtzaG93VG90YWxMYWJlbCA/IChcbiAgICAgICAgICAgICAgPER1cmF0aW9uTGFiZWxcbiAgICAgICAgICAgICAgICBsYWJlbD17dG90YWxMYWJlbH1cbiAgICAgICAgICAgICAgICAvLyBTaGlmdCBjbGVhciBvZiB0aGUgbGVmdCBlZGdlIGluZGljYXRvciBzbyBpdCBpc24ndCBjb3ZlcmVkLlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17b2Zmc2NyZWVuLmxlZnQgPyAncGwtMTAnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59KTtcblxuZXhwb3J0IHsgVGltZWxpbmVCYXIgfTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBEZWx0YU1lYXN1cmVMaW5lIChBbHQta2V5IG1lYXN1cmVtZW50IG92ZXJsYXlzOiB0aGUgc2VsZWN0ZWQg4oaUIGhvdmVyZWRcbi8vIG1lYXN1cmVtZW50LCBhbmQgdGhlIGFtYmllbnQgY29uc2VjdXRpdmUtZ2FwIGluZGljYXRvcnMgc2hvd24gd2l0aG91dCBhXG4vLyBzZWxlY3Rpb24pXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gSG9yaXpvbnRhbCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBhbmNob3IgYmFyJ3MgbWVhc3VyZWQgZWRnZSBhbmQgdGhlIHZlcnRpY2FsXG4vLyBndWlkZSDigJQgYWxzbyB0aGUgd2lkdGggb2YgdGhlIGNvbm5lY3RvciBzdHViIGJyaWRnaW5nIHRoZSB0d28uXG5jb25zdCBNRUFTVVJFX0dVSURFX09VVFNFVF9QWCA9IDQ7XG5cbmNvbnN0IERlbHRhTWVhc3VyZUxpbmUgPSBtZW1vKGZ1bmN0aW9uIERlbHRhTWVhc3VyZUxpbmUoe1xuICBkZWx0YSxcbiAgYW5jaG9yUm93SW5kZXgsXG4gIGhvdmVyZWRSb3dJbmRleCxcbiAgdGltZWxpbmVXaWR0aCxcbn06IHtcbiAgZGVsdGE6IFNwYW5EZWx0YTtcbiAgYW5jaG9yUm93SW5kZXg6IG51bWJlcjtcbiAgaG92ZXJlZFJvd0luZGV4OiBudW1iZXI7XG4gIHRpbWVsaW5lV2lkdGg6IG51bWJlcjtcbn0pIHtcbiAgLy8gQm90aCBlbmRzIG9mIHRoZSBtZWFzdXJlbWVudCBhbGlnbiB3aXRoIHRoZSB2ZXJ0aWNhbCBtaWRkbGUgb2YgdGhlIGJhcnNcbiAgLy8gKGJhcnMgYXJlIGNlbnRlcmVkIGluIHRoZWlyIHJvd3MsIHNvIGJhciBjZW50ZXIgPT0gcm93IGNlbnRlcikuXG4gIGNvbnN0IGFuY2hvckNlbnRlclkgPSBhbmNob3JSb3dJbmRleCAqIFJPV19IRUlHSFRfUFggKyBST1dfSEVJR0hUX1BYIC8gMjtcbiAgY29uc3QgbGluZVkgPSBob3ZlcmVkUm93SW5kZXggKiBST1dfSEVJR0hUX1BYICsgUk9XX0hFSUdIVF9QWCAvIDI7XG5cbiAgLy8gR3VpZGUgY29ubmVjdGluZyB0aGUgbWlkZGxlIG9mIHRoZSBhbmNob3IgYmFyIGRvd24vdXAgdG8gdGhlIGxpbmUsIHNvXG4gIC8vIHRoZSBtZWFzdXJlbWVudCdzIG9yaWdpbiBzdGF5cyBsZWdpYmxlIHdoZW4gdGhlIHJvd3MgYXJlIGZhciBhcGFydC5cbiAgLy8gSXQgc2l0cyBqdXN0IG91dHNpZGUgdGhlIGFuY2hvciBiYXIncyBtZWFzdXJlZCBlZGdlIChzbyBpdCBkb2Vzbid0IGJsZW5kXG4gIC8vIGludG8gdGhlIGJhcidzIGJvcmRlciksIGpvaW5lZCB0byB0aGUgYmFyIGJ5IGEgc2hvcnQgaG9yaXpvbnRhbCBzdHViLiBUaGVcbiAgLy8gbGluZSBydW5zIGZyb20gdGhlIGVsYm93IGNvcm5lciAodGhlIGd1aWRlJ3MgeCkgdG8gdGhlIGhvdmVyZWQgc3BhbidzXG4gIC8vIG1lYXN1cmVkIGVkZ2Ug4oCUIHB1bGxlZCBzaG9ydCBvZiB0aGUgZWRnZSBhcnJvdyB3aGVuIHRoZSBob3ZlcmVkIHNwYW4gaXNcbiAgLy8gZnVsbHkgb2ZmLXNjcmVlbi5cbiAgY29uc3QgZ3VpZGVUb3AgPSBNYXRoLm1pbihhbmNob3JDZW50ZXJZLCBsaW5lWSk7XG4gIGNvbnN0IGd1aWRlQm90dG9tID0gTWF0aC5tYXgoYW5jaG9yQ2VudGVyWSwgbGluZVkpO1xuICBjb25zdCBhbmNob3JYID0gZGVsdGEuYW5jaG9yRnJhYyAqIHRpbWVsaW5lV2lkdGg7XG4gIGNvbnN0IGd1aWRlWCA9XG4gICAgYW5jaG9yWCArXG4gICAgKGRlbHRhLmFuY2hvckVkZ2UgPT09ICdlbmQnXG4gICAgICA/IE1FQVNVUkVfR1VJREVfT1VUU0VUX1BYXG4gICAgICA6IC1NRUFTVVJFX0dVSURFX09VVFNFVF9QWCk7XG4gIGNvbnN0IGFycm93Q2xlYXJhbmNlID1cbiAgICBkZWx0YS5ob3ZlcmVkT2Zmc2NyZWVuID09PSAncmlnaHQnXG4gICAgICA/IC0oVElOWV9CQVJfQk9YX1NJWkVfUFggKyA0KVxuICAgICAgOiBkZWx0YS5ob3ZlcmVkT2Zmc2NyZWVuID09PSAnbGVmdCdcbiAgICAgICAgPyBUSU5ZX0JBUl9CT1hfU0laRV9QWCArIDRcbiAgICAgICAgOiAwO1xuICBjb25zdCBob3ZlcmVkWCA9IGRlbHRhLmhvdmVyZWRGcmFjICogdGltZWxpbmVXaWR0aCArIGFycm93Q2xlYXJhbmNlO1xuICBjb25zdCBzdGFydFggPSBNYXRoLm1pbihndWlkZVgsIGhvdmVyZWRYKTtcbiAgY29uc3QgZW5kWCA9IE1hdGgubWF4KGd1aWRlWCwgaG92ZXJlZFgpO1xuXG4gIGNvbnN0IGxhYmVsID0gZm9ybWF0RHVyYXRpb25QcmVjaXNlKGRlbHRhLmRlbHRhTXMpO1xuICBjb25zdCBsYWJlbFdpZHRoUHggPSBlc3RpbWF0ZUxhYmVsV2lkdGhQeChsYWJlbCk7XG4gIC8vIENlbnRlciB0aGUgbGFiZWwgb24gdGhlIGxpbmU7IHdoZW4gdGhlIGxpbmUgaXMgdG9vIHNob3J0LCBwbGFjZSBpdCBiZXNpZGVcbiAgLy8gdGhlIHJpZ2h0IGVuZHBvaW50LCBmbGlwcGluZyBsZWZ0IG5lYXIgdGhlIHZpZXdwb3J0J3MgcmlnaHQgZWRnZS5cbiAgY29uc3QgbGFiZWxQbGFjZW1lbnQgPVxuICAgIGVuZFggLSBzdGFydFggPj0gbGFiZWxXaWR0aFB4XG4gICAgICA/IHsgbGVmdDogKHN0YXJ0WCArIGVuZFgpIC8gMiwgdHJhbnNsYXRlOiAnLXRyYW5zbGF0ZS14LTEvMicgfVxuICAgICAgOiBlbmRYICsgNCArIGxhYmVsV2lkdGhQeCA8PSB0aW1lbGluZVdpZHRoXG4gICAgICAgID8geyBsZWZ0OiBlbmRYICsgNCwgdHJhbnNsYXRlOiAnJyB9XG4gICAgICAgIDogeyBsZWZ0OiBzdGFydFggLSA0LCB0cmFuc2xhdGU6ICctdHJhbnNsYXRlLXgtZnVsbCcgfTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIGgtcHggYmctYW1iZXItODAwXCJcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBsZWZ0OiBNYXRoLm1pbihhbmNob3JYLCBndWlkZVgpLFxuICAgICAgICAgIHdpZHRoOiBNRUFTVVJFX0dVSURFX09VVFNFVF9QWCxcbiAgICAgICAgICB0b3A6IGFuY2hvckNlbnRlclksXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB3LXB4IGJnLWFtYmVyLTgwMFwiXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgbGVmdDogZ3VpZGVYLFxuICAgICAgICAgIHRvcDogZ3VpZGVUb3AsXG4gICAgICAgICAgaGVpZ2h0OiBndWlkZUJvdHRvbSAtIGd1aWRlVG9wLFxuICAgICAgICB9fVxuICAgICAgLz5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaC1weCBiZy1hbWJlci04MDBcIlxuICAgICAgICBzdHlsZT17eyBsZWZ0OiBzdGFydFgsIHdpZHRoOiBNYXRoLm1heChlbmRYIC0gc3RhcnRYLCAxKSwgdG9wOiBsaW5lWSB9fVxuICAgICAgLz5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgJ2Fic29sdXRlIC10cmFuc2xhdGUteS0xLzIgZm9udC1tb25vIHRleHQtWzEwcHhdIGZvbnQtbWVkaXVtIGxlYWRpbmctbm9uZSB0YWJ1bGFyLW51bXMgd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC14cyBiZy1iYWNrZ3JvdW5kLTEwMCBweC0xIHB5LTAuNSB0ZXh0LWFtYmVyLTgwMCcsXG4gICAgICAgICAgbGFiZWxQbGFjZW1lbnQudHJhbnNsYXRlXG4gICAgICAgICl9XG4gICAgICAgIHN0eWxlPXt7IGxlZnQ6IGxhYmVsUGxhY2VtZW50LmxlZnQsIHRvcDogbGluZVkgfX1cbiAgICAgID5cbiAgICAgICAge2xhYmVsfVxuICAgICAgPC9zcGFuPlxuICAgIDwvPlxuICApO1xufSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGltZWxpbmVIZWFkZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgZnVuY3Rpb24gVGltZWxpbmVIZWFkZXIoe1xuICBtYXJrZXJzLFxuICBob3ZlckluZm8sXG59OiB7XG4gIG1hcmtlcnM6IFRpbWVNYXJrZXJbXTtcbiAgaG92ZXJJbmZvPzogeyBmcmFjdGlvbjogbnVtYmVyOyBsYWJlbDogc3RyaW5nIH0gfCBudWxsO1xufSk6IFJlYWN0Tm9kZSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBiZy1iYWNrZ3JvdW5kLTEwMCBib3JkZXItYiBib3JkZXItZ3JheS1hbHBoYS00MDAgaC0xMCBtaW4taC0xMCBmbGV4IGl0ZW1zLWVuZCBweC00IHBiLTFcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgaC1mdWxsIGZsZXgtMVwiPlxuICAgICAgICB7bWFya2Vycy5tYXAoKG0pID0+IChcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAga2V5PXtTdHJpbmcobS52YWx1ZSl9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSBib3R0b20tMSBmb250LW1vbm8gdGV4dC14cyBmb250LW5vcm1hbCBsZWFkaW5nLTQgdGV4dC1ncmF5LTkwMCB3aGl0ZXNwYWNlLW5vd3JhcFwiXG4gICAgICAgICAgICBzdHlsZT17eyBsZWZ0OiBgJHttLnBvc2l0aW9uICogMTAwfSVgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge20ubGFiZWx9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApKX1cbiAgICAgICAge2hvdmVySW5mbyAmJiAoXG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC0xIHBvaW50ZXItZXZlbnRzLW5vbmUgei0xMCBmb250LW1vbm8gdGV4dC1bMTFweF0gbGVhZGluZy00IHRleHQtZ3JheS0xMDAwIHdoaXRlc3BhY2Utbm93cmFwIGJnLWJhY2tncm91bmQtMTAwIGJvcmRlciBib3JkZXItZ3JheS1hbHBoYS00MDAgcm91bmRlZCBweC0xIC10cmFuc2xhdGUteC0xLzJcIlxuICAgICAgICAgICAgc3R5bGU9e3sgbGVmdDogYCR7aG92ZXJJbmZvLmZyYWN0aW9uICogMTAwfSVgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2hvdmVySW5mby5sYWJlbH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUaW1lbGluZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgVGltZWxpbmVIb3ZlciB7XG4gIC8qKiBQb2ludGVyIHggYXMgYSBmcmFjdGlvbiBvZiB0aGUgdGltZWxpbmUncyBjb250ZW50IHdpZHRoLCBpbiBbMCwgMV0uICovXG4gIGZyYWN0aW9uOiBudW1iZXI7XG4gIC8qKiBSb3cgaW5kZXggdW5kZXIgdGhlIHBvaW50ZXI7IG1heSBiZSBwYXN0IHRoZSBsYXN0IHJvdyDigJQgbm90IHZhbGlkYXRlZC4gKi9cbiAgcm93SW5kZXg6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVsaW5lKHtcbiAgc3BhbnMsXG4gIHZpZXdTdGFydCxcbiAgdmlld0VuZCxcbiAgbWFya2VycyxcbiAgc2VsZWN0ZWRJZCxcbiAgc2VhcmNoUmVzdWx0LFxuICBvblNlbGVjdCxcbiAgb25SZXZlYWxUaW1lLFxuICBob3ZlcixcbiAgYWx0SGVsZCA9IGZhbHNlLFxufToge1xuICBzcGFuczogU3BhbltdO1xuICB2aWV3U3RhcnQ6IG51bWJlcjtcbiAgdmlld0VuZDogbnVtYmVyO1xuICBtYXJrZXJzOiBUaW1lTWFya2VyW107XG4gIHNlbGVjdGVkSWQ6IHN0cmluZyB8IG51bGw7XG4gIHNlYXJjaFJlc3VsdDogU3BhblNlYXJjaFJlc3VsdDtcbiAgb25TZWxlY3Q6IChzcGFuSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgb25SZXZlYWxUaW1lPzogKHRpbWVNczogbnVtYmVyKSA9PiB2b2lkO1xuICBob3Zlcj86IFRpbWVsaW5lSG92ZXIgfCBudWxsO1xuICBhbHRIZWxkPzogYm9vbGVhbjtcbn0pOiBSZWFjdE5vZGUge1xuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBbY29udGFpbmVyV2lkdGgsIHNldENvbnRhaW5lcldpZHRoXSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCB2aWV3RHVyYXRpb24gPSB2aWV3RW5kIC0gdmlld1N0YXJ0O1xuICBjb25zdCB0aW1lbGluZVdpZHRoID0gTWF0aC5tYXgoMCwgY29udGFpbmVyV2lkdGggLSBUSU1FTElORV9QQURESU5HX1BYICogMik7XG4gIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdXNlUm93V2luZG93KFxuICAgIGNvbnRhaW5lclJlZixcbiAgICBzcGFucy5sZW5ndGgsXG4gICAgUk9XX0hFSUdIVF9QWFxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBjb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgY29uc3Qgcm8gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKFtlbnRyeV0pID0+IHtcbiAgICAgIHNldENvbnRhaW5lcldpZHRoKGVudHJ5LmNvbnRlbnRSZWN0LndpZHRoKTtcbiAgICB9KTtcbiAgICByby5vYnNlcnZlKGVsKTtcbiAgICByZXR1cm4gKCkgPT4gcm8uZGlzY29ubmVjdCgpO1xuICB9LCBbXSk7XG5cbiAgLy8gRWFjaCBjb25zZWN1dGl2ZSBnYXAgcmVuZGVycyBhcyBhIG1lYXN1cmVtZW50IGZyb20gdGhlIGVhcmxpZXIgc3BhbidzIGVuZFxuICAvLyBlZGdlIHRvIHRoZSBuZXh0IHNwYW4ncyBzdGFydCwgaW4gdGhlIHNhbWUgdmlzdWFsIGxhbmd1YWdlIGFzIHRoZVxuICAvLyBzZWxlY3RlZCDihpQgaG92ZXJlZCBtZWFzdXJlbWVudC5cbiAgY29uc3QgZ2FwTWVhc3VyZW1lbnRzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgY29tcHV0ZVNwYW5HYXBzKHNwYW5zLCB2aWV3U3RhcnQsIHZpZXdFbmQpLm1hcCgoZ2FwKSA9PiAoe1xuICAgICAgICBkZWx0YToge1xuICAgICAgICAgIGRlbHRhTXM6IGdhcC5nYXBNcyxcbiAgICAgICAgICBhbmNob3JGcmFjOiBnYXAubGVmdEZyYWMsXG4gICAgICAgICAgaG92ZXJlZEZyYWM6IGdhcC5yaWdodEZyYWMsXG4gICAgICAgICAgYW5jaG9yRWRnZTogJ2VuZCcsXG4gICAgICAgICAgaG92ZXJlZE9mZnNjcmVlbjogbnVsbCxcbiAgICAgICAgfSBzYXRpc2ZpZXMgU3BhbkRlbHRhLFxuICAgICAgICBhbmNob3JSb3dJbmRleDogZ2FwLnJvd0luZGV4LFxuICAgICAgICBob3ZlcmVkUm93SW5kZXg6IGdhcC5yb3dJbmRleCArIDEsXG4gICAgICB9KSksXG4gICAgW3NwYW5zLCB2aWV3U3RhcnQsIHZpZXdFbmRdXG4gICk7XG5cbiAgLy8gV2l0aCBhIHNwYW4gc2VsZWN0ZWQsIEFsdCtob3ZlciBtZWFzdXJlcyBzZWxlY3RlZCDihpQgaG92ZXJlZCBpbnN0ZWFkIG9mXG4gIC8vIHNob3dpbmcgdGhlIGFsbC1zaWJsaW5nLWdhcHMgb3ZlcmxheS5cbiAgY29uc3QgYW5jaG9ySW5kZXggPSB1c2VNZW1vKFxuICAgICgpID0+IChzZWxlY3RlZElkID8gc3BhbnMuZmluZEluZGV4KChzKSA9PiBzLnNwYW5JZCA9PT0gc2VsZWN0ZWRJZCkgOiAtMSksXG4gICAgW3NwYW5zLCBzZWxlY3RlZElkXVxuICApO1xuXG4gIGNvbnN0IG1lYXN1cmVtZW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFhbHRIZWxkIHx8IGhvdmVyID09IG51bGwgfHwgaG92ZXIucm93SW5kZXggPT09IGFuY2hvckluZGV4KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgYW5jaG9yU3BhbiA9IHNwYW5zW2FuY2hvckluZGV4XTtcbiAgICBjb25zdCBob3ZlcmVkU3BhbiA9IHNwYW5zW2hvdmVyLnJvd0luZGV4XTtcbiAgICBpZiAoIWFuY2hvclNwYW4gfHwgIWhvdmVyZWRTcGFuKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBkZWx0YSA9IGNvbXB1dGVTcGFuRGVsdGEoYW5jaG9yU3BhbiwgaG92ZXJlZFNwYW4sIHZpZXdTdGFydCwgdmlld0VuZCk7XG4gICAgcmV0dXJuIGRlbHRhXG4gICAgICA/IHsgZGVsdGEsIGFuY2hvclJvd0luZGV4OiBhbmNob3JJbmRleCwgaG92ZXJlZFJvd0luZGV4OiBob3Zlci5yb3dJbmRleCB9XG4gICAgICA6IG51bGw7XG4gIH0sIFthbHRIZWxkLCBhbmNob3JJbmRleCwgaG92ZXIsIHNwYW5zLCB2aWV3U3RhcnQsIHZpZXdFbmRdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgaC1mdWxsIG92ZXJmbG93LWhpZGRlblwiXG4gICAgICBzdHlsZT17eyBtaW5IZWlnaHQ6IHNwYW5zLmxlbmd0aCAqIFJPV19IRUlHSFRfUFggfX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGFyaWEtaGlkZGVuXG4gICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LXktMCBwb2ludGVyLWV2ZW50cy1ub25lXCJcbiAgICAgICAgc3R5bGU9e1RJTUVMSU5FX0lOU0VUX1NUWUxFfVxuICAgICAgPlxuICAgICAgICB7bWFya2Vycy5tYXAoKG1hcmtlcikgPT5cbiAgICAgICAgICAvLyBTa2lwIHRoZSBcIjBzXCIgb3JpZ2luIG1hcmtlciBzaW5jZSB0aGUgbGVmdCBlZGdlIGFscmVhZHkgaW1wbGllcyBpdC5cbiAgICAgICAgICBNYXRoLmFicyhtYXJrZXIudmFsdWUpID4gMC4wMDAwMDEgPyAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGtleT17U3RyaW5nKG1hcmtlci52YWx1ZSl9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC0wIGJvdHRvbS0wIHctcHggYmctZ3JheS1hbHBoYS0zMDBcIlxuICAgICAgICAgICAgICBzdHlsZT17eyBsZWZ0OiBgJHttYXJrZXIucG9zaXRpb24gKiAxMDB9JWAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGxcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAge2hvdmVyICE9IG51bGwgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQteS0wIHBvaW50ZXItZXZlbnRzLW5vbmUgei0xMFwiXG4gICAgICAgICAgc3R5bGU9e1RJTUVMSU5FX0lOU0VUX1NUWUxFfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTAgYm90dG9tLTAgdy1weCBiZy1ncmF5LWFscGhhLTUwMFwiXG4gICAgICAgICAgICBzdHlsZT17eyBsZWZ0OiBgJHtob3Zlci5mcmFjdGlvbiAqIDEwMH0lYCB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDxkaXYgc3R5bGU9e3sgdHJhbnNmb3JtOiBgdHJhbnNsYXRlWSgke3N0YXJ0ICogUk9XX0hFSUdIVF9QWH1weClgIH19PlxuICAgICAgICB7c3BhbnMuc2xpY2Uoc3RhcnQsIGVuZCkubWFwKChzcGFuKSA9PiAoXG4gICAgICAgICAgPFRpbWVsaW5lQmFyXG4gICAgICAgICAgICBrZXk9e3NwYW4uc3BhbklkfVxuICAgICAgICAgICAgc3Bhbj17c3Bhbn1cbiAgICAgICAgICAgIHZpZXdTdGFydD17dmlld1N0YXJ0fVxuICAgICAgICAgICAgdmlld0R1cmF0aW9uPXt2aWV3RHVyYXRpb259XG4gICAgICAgICAgICBjb250YWluZXJXaWR0aD17dGltZWxpbmVXaWR0aH1cbiAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e3NlbGVjdGVkSWQgPT09IHNwYW4uc3BhbklkfVxuICAgICAgICAgICAgaXNEaW1tZWQ9e2lzU3BhbkRpbW1lZEJ5U2VhcmNoKHNwYW4uc3BhbklkLCBzZWFyY2hSZXN1bHQpfVxuICAgICAgICAgICAgb25TZWxlY3Q9e29uU2VsZWN0fVxuICAgICAgICAgICAgb25SZXZlYWxUaW1lPXtvblJldmVhbFRpbWV9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICAgIHthbHRIZWxkICYmIGFuY2hvckluZGV4IDwgMCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBhcmlhLWhpZGRlblxuICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LXktMCBwb2ludGVyLWV2ZW50cy1ub25lXCJcbiAgICAgICAgICBzdHlsZT17VElNRUxJTkVfSU5TRVRfU1RZTEV9XG4gICAgICAgID5cbiAgICAgICAgICB7Z2FwTWVhc3VyZW1lbnRzLm1hcCgoZ2FwKSA9PiAoXG4gICAgICAgICAgICA8RGVsdGFNZWFzdXJlTGluZVxuICAgICAgICAgICAgICBrZXk9e2dhcC5hbmNob3JSb3dJbmRleH1cbiAgICAgICAgICAgICAgey4uLmdhcH1cbiAgICAgICAgICAgICAgdGltZWxpbmVXaWR0aD17dGltZWxpbmVXaWR0aH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIHttZWFzdXJlbWVudCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBhcmlhLWhpZGRlblxuICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LXktMCBwb2ludGVyLWV2ZW50cy1ub25lIHotMjBcIlxuICAgICAgICAgIHN0eWxlPXtUSU1FTElORV9JTlNFVF9TVFlMRX1cbiAgICAgICAgPlxuICAgICAgICAgIDxEZWx0YU1lYXN1cmVMaW5lIHsuLi5tZWFzdXJlbWVudH0gdGltZWxpbmVXaWR0aD17dGltZWxpbmVXaWR0aH0gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuIl19
@@ -50,6 +50,6 @@ export function TraceShortcutHelper({ hasMultipleSpans, reducedMotion, }) {
50
50
  catch { }
51
51
  setVisible(false);
52
52
  };
53
- return (_jsxs("div", { className: "group sticky bottom-3 z-10 ml-4 mb-3 hidden h-8 w-fit items-center gap-1 text-xs leading-none text-gray-900 @min-[480px]:flex", children: [_jsx("span", { "aria-live": "polite", "aria-atomic": "true", className: "inline-flex items-center whitespace-nowrap", children: reducedMotion ? (_jsx(AltHint, {})) : (_jsx("span", { className: `inline-flex items-center ${styles.hint}`, children: index === 0 ? _jsx(AltHint, {}) : _jsx(NavHint, {}) }, index)) }), _jsx("button", { type: "button", className: "inline-flex h-5 w-5 items-center justify-center rounded text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-foreground group-hover:opacity-100 focus-visible:opacity-100 motion-reduce:transition-none", onClick: dismiss, "aria-label": "Dismiss trace shortcuts helper", children: _jsx(X, { className: "h-3 w-3" }) })] }));
53
+ return (_jsxs("div", { className: "group pointer-events-auto hidden h-8 w-fit items-center gap-1 text-xs leading-none text-gray-900 @min-[480px]:flex", children: [_jsx("span", { "aria-live": "polite", "aria-atomic": "true", className: "inline-flex items-center whitespace-nowrap", children: reducedMotion ? (_jsx(AltHint, {})) : (_jsx("span", { className: `inline-flex items-center ${styles.hint}`, children: index === 0 ? _jsx(AltHint, {}) : _jsx(NavHint, {}) }, index)) }), _jsx("button", { type: "button", className: "inline-flex h-5 w-5 items-center justify-center rounded text-muted-foreground opacity-0 transition-opacity hover:bg-accent hover:text-foreground group-hover:opacity-100 focus-visible:opacity-100 motion-reduce:transition-none", onClick: dismiss, "aria-label": "Dismiss trace shortcuts helper", children: _jsx(X, { className: "h-3 w-3" }) })] }));
54
54
  }
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2Utc2hvcnRjdXQtaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbmV3LXRyYWNlLXZpZXdlci9jb21wb25lbnRzL3RyYWNlLXNob3J0Y3V0LWhlbHBlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDakMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuQyxPQUFPLE1BQU0sTUFBTSxvQ0FBb0MsQ0FBQztBQUV4RCxNQUFNLGNBQWMsR0FBRywwQ0FBMEMsQ0FBQztBQUNsRSxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFDMUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFFOUIsU0FBUyxjQUFjO0lBQ3JCLElBQUksT0FBTyxTQUFTLEtBQUssV0FBVztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ25ELE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzdFLENBQUM7QUFFRCxTQUFTLGNBQWM7SUFDckIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FDaEMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxFQUNsRCxFQUFFLENBQ0gsQ0FBQztRQUNGLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDbkQsQ0FBQztJQUFDLE1BQU0sQ0FB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Q0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgWCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgS2JkIH0gZnJvbSAnLi4vLi4vdWkva2JkJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi90cmFjZS1zaG9ydGN1dC1oZWxwZXIubW9kdWxlLmNzcyc7XG5cbmNvbnN0IERJU01JU1NBTFNfS0VZID0gJ3dvcmtmbG93LXN0ZXAtc2hvcnRjdXQtaGVscGVyLWRpc21pc3NhbHMnO1xuY29uc3QgRElTTUlTU0FMX0xJTUlUID0gMztcbmNvbnN0IEhJTlRfUk9UQVRJT05fTVMgPSA4MDAwO1xuXG5mdW5jdGlvbiBnZXRBbHRLZXlMYWJlbCgpOiAnQWx0JyB8ICdPcHRpb24nIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gJ0FsdCc7XG4gIHJldHVybiBuYXZpZ2F0b3IucGxhdGZvcm0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnbWFjJykgPyAnT3B0aW9uJyA6ICdBbHQnO1xufVxuXG5mdW5jdGlvbiByZWFkRGlzbWlzc2FscygpOiBudW1iZXIge1xuICB0cnkge1xuICAgIGNvbnN0IGRpc21pc3NhbHMgPSBOdW1iZXIucGFyc2VJbnQoXG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oRElTTUlTU0FMU19LRVkpID8/ICcwJyxcbiAgICAgIDEwXG4gICAgKTtcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKGRpc21pc3NhbHMpID8gMCA6IGRpc21pc3NhbHM7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIEFsdEhpbnQoKSB7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIEhvbGRcbiAgICAgIDxLYmQgdmFyaWFudD1cIm91dGxpbmVcIiBzaXplPVwiY29tcGFjdFwiIGNsYXNzTmFtZT1cIm14LTFcIj5cbiAgICAgICAge2dldEFsdEtleUxhYmVsKCl9XG4gICAgICA8L0tiZD5cbiAgICAgIHRvIHNlZSBkZWx0YSBiZXR3ZWVuIHNwYW5zXG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIE5hdkhpbnQoKSB7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIFVzZVxuICAgICAgPEtiZCB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9XCJjb21wYWN0XCIgY2xhc3NOYW1lPVwibWwtMVwiPlxuICAgICAgICBKXG4gICAgICA8L0tiZD5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm14LTFcIj4vPC9zcGFuPlxuICAgICAgPEtiZCB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9XCJjb21wYWN0XCIgY2xhc3NOYW1lPVwibXItMVwiPlxuICAgICAgICBLXG4gICAgICA8L0tiZD5cbiAgICAgIHRvIG1vdmUgYmV0d2VlbiBzcGFuc1xuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVHJhY2VTaG9ydGN1dEhlbHBlcih7XG4gIGhhc011bHRpcGxlU3BhbnMsXG4gIHJlZHVjZWRNb3Rpb24sXG59OiB7XG4gIGhhc011bHRpcGxlU3BhbnM6IGJvb2xlYW47XG4gIHJlZHVjZWRNb3Rpb246IGJvb2xlYW47XG59KSB7XG4gIGNvbnN0IFt2aXNpYmxlLCBzZXRWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2luZGV4LCBzZXRJbmRleF0gPSB1c2VTdGF0ZSgwKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFZpc2libGUocmVhZERpc21pc3NhbHMoKSA8IERJU01JU1NBTF9MSU1JVCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyZWR1Y2VkTW90aW9uKSByZXR1cm47XG4gICAgY29uc3QgaWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBzZXRJbmRleCgoaSkgPT4gKGkgPT09IDAgPyAxIDogMCkpO1xuICAgIH0sIEhJTlRfUk9UQVRJT05fTVMpO1xuICAgIHJldHVybiAoKSA9PiBjbGVhckludGVydmFsKGlkKTtcbiAgfSwgW3JlZHVjZWRNb3Rpb25dKTtcblxuICBpZiAoIXZpc2libGUgfHwgIWhhc011bHRpcGxlU3BhbnMpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGRpc21pc3MgPSAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShESVNNSVNTQUxTX0tFWSwgU3RyaW5nKHJlYWREaXNtaXNzYWxzKCkgKyAxKSk7XG4gICAgfSBjYXRjaCB7fVxuICAgIHNldFZpc2libGUoZmFsc2UpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJncm91cCBzdGlja3kgYm90dG9tLTMgei0xMCBtbC00IG1iLTMgaGlkZGVuIGgtOCB3LWZpdCBpdGVtcy1jZW50ZXIgZ2FwLTEgdGV4dC14cyBsZWFkaW5nLW5vbmUgdGV4dC1ncmF5LTkwMCBAbWluLVs0ODBweF06ZmxleFwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICAgICAgYXJpYS1hdG9taWM9XCJ0cnVlXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIHdoaXRlc3BhY2Utbm93cmFwXCJcbiAgICAgID5cbiAgICAgICAge3JlZHVjZWRNb3Rpb24gPyAoXG4gICAgICAgICAgPEFsdEhpbnQgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17YGlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciAke3N0eWxlcy5oaW50fWB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2luZGV4ID09PSAwID8gPEFsdEhpbnQgLz4gOiA8TmF2SGludCAvPn1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICl9XG4gICAgICA8L3NwYW4+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBvcGFjaXR5LTAgdHJhbnNpdGlvbi1vcGFjaXR5IGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZm9jdXMtdmlzaWJsZTpvcGFjaXR5LTEwMCBtb3Rpb24tcmVkdWNlOnRyYW5zaXRpb24tbm9uZVwiXG4gICAgICAgIG9uQ2xpY2s9e2Rpc21pc3N9XG4gICAgICAgIGFyaWEtbGFiZWw9XCJEaXNtaXNzIHRyYWNlIHNob3J0Y3V0cyBoZWxwZXJcIlxuICAgICAgPlxuICAgICAgICA8WCBjbGFzc05hbWU9XCJoLTMgdy0zXCIgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICApO1xufVxuIl19
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2Utc2hvcnRjdXQtaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbmV3LXRyYWNlLXZpZXdlci9jb21wb25lbnRzL3RyYWNlLXNob3J0Y3V0LWhlbHBlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDakMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuQyxPQUFPLE1BQU0sTUFBTSxvQ0FBb0MsQ0FBQztBQUV4RCxNQUFNLGNBQWMsR0FBRywwQ0FBMEMsQ0FBQztBQUNsRSxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFDMUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFFOUIsU0FBUyxjQUFjO0lBQ3JCLElBQUksT0FBTyxTQUFTLEtBQUssV0FBVztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ25ELE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzdFLENBQUM7QUFFRCxTQUFTLGNBQWM7SUFDckIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FDaEMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxFQUNsRCxFQUFFLENBQ0gsQ0FBQztRQUNGLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDbkQsQ0FBQztJQUFDLE1BQU0sQ0FB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Q0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgWCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgS2JkIH0gZnJvbSAnLi4vLi4vdWkva2JkJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi90cmFjZS1zaG9ydGN1dC1oZWxwZXIubW9kdWxlLmNzcyc7XG5cbmNvbnN0IERJU01JU1NBTFNfS0VZID0gJ3dvcmtmbG93LXN0ZXAtc2hvcnRjdXQtaGVscGVyLWRpc21pc3NhbHMnO1xuY29uc3QgRElTTUlTU0FMX0xJTUlUID0gMztcbmNvbnN0IEhJTlRfUk9UQVRJT05fTVMgPSA4MDAwO1xuXG5mdW5jdGlvbiBnZXRBbHRLZXlMYWJlbCgpOiAnQWx0JyB8ICdPcHRpb24nIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gJ0FsdCc7XG4gIHJldHVybiBuYXZpZ2F0b3IucGxhdGZvcm0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnbWFjJykgPyAnT3B0aW9uJyA6ICdBbHQnO1xufVxuXG5mdW5jdGlvbiByZWFkRGlzbWlzc2FscygpOiBudW1iZXIge1xuICB0cnkge1xuICAgIGNvbnN0IGRpc21pc3NhbHMgPSBOdW1iZXIucGFyc2VJbnQoXG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oRElTTUlTU0FMU19LRVkpID8/ICcwJyxcbiAgICAgIDEwXG4gICAgKTtcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKGRpc21pc3NhbHMpID8gMCA6IGRpc21pc3NhbHM7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIEFsdEhpbnQoKSB7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIEhvbGRcbiAgICAgIDxLYmQgdmFyaWFudD1cIm91dGxpbmVcIiBzaXplPVwiY29tcGFjdFwiIGNsYXNzTmFtZT1cIm14LTFcIj5cbiAgICAgICAge2dldEFsdEtleUxhYmVsKCl9XG4gICAgICA8L0tiZD5cbiAgICAgIHRvIHNlZSBkZWx0YSBiZXR3ZWVuIHNwYW5zXG4gICAgPC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIE5hdkhpbnQoKSB7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIFVzZVxuICAgICAgPEtiZCB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9XCJjb21wYWN0XCIgY2xhc3NOYW1lPVwibWwtMVwiPlxuICAgICAgICBKXG4gICAgICA8L0tiZD5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm14LTFcIj4vPC9zcGFuPlxuICAgICAgPEtiZCB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9XCJjb21wYWN0XCIgY2xhc3NOYW1lPVwibXItMVwiPlxuICAgICAgICBLXG4gICAgICA8L0tiZD5cbiAgICAgIHRvIG1vdmUgYmV0d2VlbiBzcGFuc1xuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVHJhY2VTaG9ydGN1dEhlbHBlcih7XG4gIGhhc011bHRpcGxlU3BhbnMsXG4gIHJlZHVjZWRNb3Rpb24sXG59OiB7XG4gIGhhc011bHRpcGxlU3BhbnM6IGJvb2xlYW47XG4gIHJlZHVjZWRNb3Rpb246IGJvb2xlYW47XG59KSB7XG4gIGNvbnN0IFt2aXNpYmxlLCBzZXRWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2luZGV4LCBzZXRJbmRleF0gPSB1c2VTdGF0ZSgwKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFZpc2libGUocmVhZERpc21pc3NhbHMoKSA8IERJU01JU1NBTF9MSU1JVCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyZWR1Y2VkTW90aW9uKSByZXR1cm47XG4gICAgY29uc3QgaWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBzZXRJbmRleCgoaSkgPT4gKGkgPT09IDAgPyAxIDogMCkpO1xuICAgIH0sIEhJTlRfUk9UQVRJT05fTVMpO1xuICAgIHJldHVybiAoKSA9PiBjbGVhckludGVydmFsKGlkKTtcbiAgfSwgW3JlZHVjZWRNb3Rpb25dKTtcblxuICBpZiAoIXZpc2libGUgfHwgIWhhc011bHRpcGxlU3BhbnMpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGRpc21pc3MgPSAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShESVNNSVNTQUxTX0tFWSwgU3RyaW5nKHJlYWREaXNtaXNzYWxzKCkgKyAxKSk7XG4gICAgfSBjYXRjaCB7fVxuICAgIHNldFZpc2libGUoZmFsc2UpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJncm91cCBwb2ludGVyLWV2ZW50cy1hdXRvIGhpZGRlbiBoLTggdy1maXQgaXRlbXMtY2VudGVyIGdhcC0xIHRleHQteHMgbGVhZGluZy1ub25lIHRleHQtZ3JheS05MDAgQG1pbi1bNDgwcHhdOmZsZXhcIj5cbiAgICAgIDxzcGFuXG4gICAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICAgIGFyaWEtYXRvbWljPVwidHJ1ZVwiXG4gICAgICAgIGNsYXNzTmFtZT1cImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciB3aGl0ZXNwYWNlLW5vd3JhcFwiXG4gICAgICA+XG4gICAgICAgIHtyZWR1Y2VkTW90aW9uID8gKFxuICAgICAgICAgIDxBbHRIaW50IC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2BpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgJHtzdHlsZXMuaGludH1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtpbmRleCA9PT0gMCA/IDxBbHRIaW50IC8+IDogPE5hdkhpbnQgLz59XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApfVxuICAgICAgPC9zcGFuPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaC01IHctNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZCB0ZXh0LW11dGVkLWZvcmVncm91bmQgb3BhY2l0eS0wIHRyYW5zaXRpb24tb3BhY2l0eSBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwIGZvY3VzLXZpc2libGU6b3BhY2l0eS0xMDAgbW90aW9uLXJlZHVjZTp0cmFuc2l0aW9uLW5vbmVcIlxuICAgICAgICBvbkNsaWNrPXtkaXNtaXNzfVxuICAgICAgICBhcmlhLWxhYmVsPVwiRGlzbWlzcyB0cmFjZSBzaG9ydGN1dHMgaGVscGVyXCJcbiAgICAgID5cbiAgICAgICAgPFggY2xhc3NOYW1lPVwiaC0zIHctM1wiIC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"trace-viewer.d.ts","sourceRoot":"","sources":["../../../src/components/new-trace-viewer/trace-viewer.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,SAAS,EAOf,MAAM,OAAO,CAAC;AAwBf,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAU7C,UAAU,mBAAmB;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAiFD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,UAAU,EACV,OAAO,EACP,aAAa,GACd,EAAE,mBAAmB,GAAG,SAAS,CAajC"}
1
+ {"version":3,"file":"trace-viewer.d.ts","sourceRoot":"","sources":["../../../src/components/new-trace-viewer/trace-viewer.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,SAAS,EAOf,MAAM,OAAO,CAAC;AAyBf,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAU7C,UAAU,mBAAmB;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAiFD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,UAAU,EACV,OAAO,EACP,aAAa,GACd,EAAE,mBAAmB,GAAG,SAAS,CAajC"}