genassist-chat-react 1.0.8 → 1.0.9

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.
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import type { ChatTheme } from '../types';
2
3
  import { ChatMessage } from '../types';
3
4
  interface AttachmentPreviewProps {
4
5
  file: File;
@@ -8,14 +9,7 @@ interface AttachmentPreviewProps {
8
9
  export declare const AttachmentPreview: React.FC<AttachmentPreviewProps>;
9
10
  interface ChatMessageProps {
10
11
  message: ChatMessage;
11
- theme?: {
12
- primaryColor?: string;
13
- secondaryColor?: string;
14
- fontFamily?: string;
15
- fontSize?: string;
16
- backgroundColor?: string;
17
- textColor?: string;
18
- };
12
+ theme?: Partial<ChatTheme>;
19
13
  onPlayAudio?: (text: string) => Promise<void>;
20
14
  isPlayingAudio?: boolean;
21
15
  isFirstMessage?: boolean;
@@ -11,7 +11,10 @@ var __assign = (this && this.__assign) || function () {
11
11
  };
12
12
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
13
13
  import React from 'react';
14
- import { User, UserX, AlertCircle, FileText, FileJson, FileImage, Loader2, ThumbsUp, ThumbsDown } from 'lucide-react';
14
+ import { User, UserX, AlertCircle, ThumbsUp, ThumbsDown } from 'lucide-react';
15
+ import { getFileIcon } from '../utils/fileIcons';
16
+ import { formatTimestamp } from '../utils/time';
17
+ import { Spinner } from './Spinner';
15
18
  export var AttachmentPreview = function (_a) {
16
19
  var file = _a.file, onRemove = _a.onRemove, _b = _a.uploading, uploading = _b === void 0 ? false : _b;
17
20
  var fileType = file.type;
@@ -26,15 +29,6 @@ export var AttachmentPreview = function (_a) {
26
29
  reader_1.readAsDataURL(file);
27
30
  }
28
31
  }, [file, isImage]);
29
- var getFileIcon = function (type) {
30
- if (type.startsWith('image/'))
31
- return _jsx(FileImage, { size: 24, color: "#6D28D9" });
32
- if (type === 'application/pdf')
33
- return _jsx(FileText, { size: 24, color: "#B91C1C" });
34
- if (type === 'application/json')
35
- return _jsx(FileJson, { size: 24, color: "#1D4ED8" });
36
- return _jsx(FileText, { size: 24, color: "#4B5563" });
37
- };
38
32
  var containerStyle = {
39
33
  display: 'flex',
40
34
  alignItems: 'center',
@@ -86,10 +80,7 @@ export var AttachmentPreview = function (_a) {
86
80
  justifyContent: 'center',
87
81
  borderRadius: '8px',
88
82
  };
89
- var loaderSpinStyle = {
90
- animation: 'spin 1s linear infinite',
91
- };
92
- return (_jsxs("div", { style: containerStyle, children: [isImage && imagePreview ? (_jsx("img", { src: imagePreview, alt: file.name, style: imageStyle })) : (_jsx("div", { style: { marginRight: '10px' }, children: getFileIcon(fileType) })), _jsxs("div", { style: fileInfoStyle, children: [_jsx("div", { style: fileNameStyle, title: file.name, children: file.name }), _jsxs("div", { style: fileSizeStyle, children: [(file.size / 1024).toFixed(2), " KB"] })] }), !uploading && (_jsx("button", { onClick: onRemove, style: removeButtonStyle, title: "Remove file", children: "\u2715" })), uploading && (_jsx("div", { style: uploadingOverlayStyle, children: _jsx(Loader2, { size: 24, color: "#000", style: loaderSpinStyle }) })), _jsx("style", { children: "\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n " })] }));
83
+ return (_jsxs("div", { style: containerStyle, children: [isImage && imagePreview ? (_jsx("img", { src: imagePreview, alt: file.name, style: imageStyle })) : (_jsx("div", { style: { marginRight: '10px' }, children: getFileIcon(fileType) })), _jsxs("div", { style: fileInfoStyle, children: [_jsx("div", { style: fileNameStyle, title: file.name, children: file.name }), _jsxs("div", { style: fileSizeStyle, children: [(file.size / 1024).toFixed(2), " KB"] })] }), !uploading && (_jsx("button", { onClick: onRemove, style: removeButtonStyle, title: "Remove file", children: "\u2715" })), uploading && (_jsx("div", { style: uploadingOverlayStyle, children: _jsx(Spinner, { size: 24, color: "#000" }) }))] }));
93
84
  };
94
85
  export var ChatMessageComponent = function (_a) {
95
86
  var message = _a.message, theme = _a.theme, onPlayAudio = _a.onPlayAudio, isPlayingAudio = _a.isPlayingAudio, _b = _a.isFirstMessage, isFirstMessage = _b === void 0 ? false : _b, _c = _a.isNextSameSpeaker, isNextSameSpeaker = _c === void 0 ? false : _c, _d = _a.isPrevSameSpeaker, isPrevSameSpeaker = _d === void 0 ? false : _d, onFeedback = _a.onFeedback, _e = _a.enableTypewriter, enableTypewriter = _e === void 0 ? false : _e, welcomeImageUrl = _a.welcomeImageUrl, welcomeTitleProp = _a.welcomeTitle, possibleQueries = _a.possibleQueries, onQuickQuery = _a.onQuickQuery;
@@ -101,42 +92,6 @@ export var ChatMessageComponent = function (_a) {
101
92
  var _h = React.useState(message.text), displayText = _h[0], setDisplayText = _h[1];
102
93
  var _j = React.useState(false), isTypewriting = _j[0], setIsTypewriting = _j[1];
103
94
  var lastAnimatedRef = React.useRef('');
104
- var formatTimestamp = function (timestamp) {
105
- try {
106
- if (!timestamp || isNaN(timestamp)) {
107
- return 'Just now';
108
- }
109
- var timestampMs = timestamp < 1000000000000 ? timestamp * 1000 : timestamp;
110
- var date = new Date(timestampMs);
111
- // Quick check if date is valid
112
- if (isNaN(date.getTime())) {
113
- return 'Just now';
114
- }
115
- var today = new Date();
116
- var yesterday = new Date(today);
117
- yesterday.setDate(yesterday.getDate() - 1);
118
- // Format time as HH:MM AM/PM
119
- var timeOptions = { hour: 'numeric', minute: '2-digit', hour12: true };
120
- var timeStr = date.toLocaleTimeString(undefined, timeOptions);
121
- // Check if date is today, yesterday, or another day
122
- if (date.toDateString() === today.toDateString()) {
123
- return "Today, ".concat(timeStr);
124
- }
125
- else if (date.toDateString() === yesterday.toDateString()) {
126
- return "Yesterday, ".concat(timeStr);
127
- }
128
- else {
129
- // Format date as Month DD, YYYY
130
- var dateOptions = { month: 'short', day: 'numeric', year: 'numeric' };
131
- var dateStr = date.toLocaleDateString(undefined, dateOptions);
132
- return "".concat(dateStr, ", ").concat(timeStr);
133
- }
134
- }
135
- catch (error) {
136
- console.error('Error formatting timestamp:', error);
137
- return 'Just now';
138
- }
139
- };
140
95
  var timestamp = formatTimestamp(message.create_time);
141
96
  // Fast typewriter effect for newly displayed agent messages, fix later
142
97
  // React.useEffect(() => {
@@ -244,15 +199,6 @@ export var ChatMessageComponent = function (_a) {
244
199
  flexDirection: 'column',
245
200
  gap: '8px',
246
201
  };
247
- var getFileIcon = function (fileType) {
248
- if (fileType.startsWith('image/'))
249
- return _jsx(FileImage, { size: 24, color: "#6D28D9" });
250
- if (fileType === 'application/pdf')
251
- return _jsx(FileText, { size: 24, color: "#B91C1C" });
252
- if (fileType === 'application/json')
253
- return _jsx(FileJson, { size: 24, color: "#1D4ED8" });
254
- return _jsx(FileText, { size: 24, color: "#4B5563" });
255
- };
256
202
  var attachmentContainerStyle = {
257
203
  display: 'flex',
258
204
  alignItems: 'center',
@@ -446,4 +392,4 @@ export var ChatMessageComponent = function (_a) {
446
392
  }
447
393
  }, children: _jsx(ThumbsDown, { size: 18 }) })] })) }))] }));
448
394
  };
449
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhdE1lc3NhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9DaGF0TWVzc2FnZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQVF0SCxNQUFNLENBQUMsSUFBTSxpQkFBaUIsR0FBcUMsVUFBQyxFQUFxQztRQUFuQyxJQUFJLFVBQUEsRUFBRSxRQUFRLGNBQUEsRUFBRSxpQkFBaUIsRUFBakIsU0FBUyxtQkFBRyxLQUFLLEtBQUE7SUFDckcsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUMzQixJQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLElBQUEsS0FBa0MsS0FBSyxDQUFDLFFBQVEsQ0FBZ0IsSUFBSSxDQUFDLEVBQXBFLFlBQVksUUFBQSxFQUFFLGVBQWUsUUFBdUMsQ0FBQztJQUU1RSxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLElBQU0sUUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7WUFDaEMsUUFBTSxDQUFDLFNBQVMsR0FBRztnQkFDakIsZUFBZSxDQUFDLFFBQU0sQ0FBQyxNQUFnQixDQUFDLENBQUM7WUFDM0MsQ0FBQyxDQUFDO1lBQ0YsUUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFcEIsSUFBTSxXQUFXLEdBQUcsVUFBQyxJQUFZO1FBQy9C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LGdCQUFnQixZQUN6QixhQUFhLENBQUMsQ0FBQyxDQUFDLENBQ2YsY0FBSyxLQUFLLEVBQUUsZUFBZSxZQUN4QixhQUFhLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUMxQixLQUFDLFFBQVEsSUFBQyxJQUFJLEVBQUUsRUFBRSxHQUFJLENBQ3ZCLENBQUMsQ0FBQyxDQUFDLENBQ0YsS0FBQyxVQUFVLElBQUMsSUFBSSxFQUFFLEVBQUUsR0FBSSxDQUN6QixHQUNHLENBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FDRiw4QkFDRSxpQkFDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLEtBQUssRUFBRSxlQUFlLEVBQ3RCLEtBQUssRUFBQyxXQUFXLEVBQ2pCLE9BQU8sRUFBRTtnQ0FDUCxJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksVUFBVSxFQUFFLENBQUM7b0NBQ3JDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dDQUN6QyxDQUFDOzRCQUNILENBQUMsWUFFRCxLQUFDLFFBQVEsSUFBQyxJQUFJLEVBQUUsRUFBRSxHQUFJLEdBQ2YsRUFDVCxjQUFLLEtBQUssRUFBRSxjQUFjLEdBQUksRUFDOUIsaUJBQ0UsSUFBSSxFQUFDLFFBQVEsRUFDYixLQUFLLEVBQUUsZUFBZSxFQUN0QixLQUFLLEVBQUMsYUFBYSxFQUNuQixPQUFPLEVBQUU7Z0NBQ1AsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLFVBQVUsRUFBRSxDQUFDO29DQUNyQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQ0FDeEMsQ0FBQzs0QkFDSCxDQUFDLFlBRUQsS0FBQyxVQUFVLElBQUMsSUFBSSxFQUFFLEVBQUUsR0FBSSxHQUNqQixJQUNSLENBQ0osR0FDRyxDQUNQLElBQ0csQ0FDUCxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENoYXRNZXNzYWdlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgVXNlciwgVXNlclgsIEFsZXJ0Q2lyY2xlLCBGaWxlVGV4dCwgRmlsZUpzb24sIEZpbGVJbWFnZSwgTG9hZGVyMiwgVGh1bWJzVXAsIFRodW1ic0Rvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuXG5pbnRlcmZhY2UgQXR0YWNobWVudFByZXZpZXdQcm9wcyB7XG4gIGZpbGU6IEZpbGU7XG4gIG9uUmVtb3ZlOiAoKSA9PiB2b2lkO1xuICB1cGxvYWRpbmc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgQXR0YWNobWVudFByZXZpZXc6IFJlYWN0LkZDPEF0dGFjaG1lbnRQcmV2aWV3UHJvcHM+ID0gKHsgZmlsZSwgb25SZW1vdmUsIHVwbG9hZGluZyA9IGZhbHNlIH0pID0+IHtcbiAgY29uc3QgZmlsZVR5cGUgPSBmaWxlLnR5cGU7XG4gIGNvbnN0IGlzSW1hZ2UgPSBmaWxlVHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKTtcbiAgY29uc3QgW2ltYWdlUHJldmlldywgc2V0SW1hZ2VQcmV2aWV3XSA9IFJlYWN0LnVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzSW1hZ2UpIHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICBzZXRJbWFnZVByZXZpZXcocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpO1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgIH1cbiAgfSwgW2ZpbGUsIGlzSW1hZ2VdKTtcblxuICBjb25zdCBnZXRGaWxlSWNvbiA9ICh0eXBlOiBzdHJpbmcpID0+IHtcbiAgICBpZiAodHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkgcmV0dXJuIDxGaWxlSW1hZ2Ugc2l6ZT17MjR9IGNvbG9yPVwiIzZEMjhEOVwiIC8+O1xuICAgIGlmICh0eXBlID09PSAnYXBwbGljYXRpb24vcGRmJykgcmV0dXJuIDxGaWxlVGV4dCBzaXplPXsyNH0gY29sb3I9XCIjQjkxQzFDXCIgLz47XG4gICAgaWYgKHR5cGUgPT09ICdhcHBsaWNhdGlvbi9qc29uJykgcmV0dXJuIDxGaWxlSnNvbiBzaXplPXsyNH0gY29sb3I9XCIjMUQ0RUQ4XCIgLz47XG4gICAgcmV0dXJuIDxGaWxlVGV4dCBzaXplPXsyNH0gY29sb3I9XCIjNEI1NTYzXCIgLz47XG4gIH07XG5cbiAgY29uc3QgY29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHBhZGRpbmc6ICc4cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmMGYwZjAnLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgbWF4V2lkdGg6ICcyNTBweCcsXG4gIH07XG5cbiAgY29uc3QgaW1hZ2VTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogJzQwcHgnLFxuICAgIGhlaWdodDogJzQwcHgnLFxuICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgb2JqZWN0Rml0OiAnY292ZXInLFxuICAgIG1hcmdpblJpZ2h0OiAnMTBweCcsXG4gIH07XG5cbiAgY29uc3QgZmlsZUluZm9TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmbGV4OiAxLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICB0ZXh0T3ZlcmZsb3c6ICdlbGxpcHNpcycsXG4gIH07XG5cbiAgY29uc3QgZmlsZU5hbWVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgfTtcblxuICBjb25zdCBmaWxlU2l6ZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTJweCcsXG4gICAgY29sb3I6ICcjNjY2JyxcbiAgfTtcblxuICBjb25zdCByZW1vdmVCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kOiAnbm9uZScsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgcGFkZGluZzogJzRweCcsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAnNHB4JyxcbiAgICByaWdodDogJzRweCcsXG4gIH07XG5cbiAgY29uc3QgdXBsb2FkaW5nT3ZlcmxheVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogMCxcbiAgICBsZWZ0OiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgfTtcblxuICBjb25zdCBsb2FkZXJTcGluU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYW5pbWF0aW9uOiAnc3BpbiAxcyBsaW5lYXIgaW5maW5pdGUnLFxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBzdHlsZT17Y29udGFpbmVyU3R5bGV9PlxuICAgICAge2lzSW1hZ2UgJiYgaW1hZ2VQcmV2aWV3ID8gKFxuICAgICAgICA8aW1nIHNyYz17aW1hZ2VQcmV2aWV3fSBhbHQ9e2ZpbGUubmFtZX0gc3R5bGU9e2ltYWdlU3R5bGV9IC8+XG4gICAgICApIDogKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblJpZ2h0OiAnMTBweCcgfX0+e2dldEZpbGVJY29uKGZpbGVUeXBlKX08L2Rpdj5cbiAgICAgICl9XG4gICAgICA8ZGl2IHN0eWxlPXtmaWxlSW5mb1N0eWxlfT5cbiAgICAgICAgPGRpdiBzdHlsZT17ZmlsZU5hbWVTdHlsZX0gdGl0bGU9e2ZpbGUubmFtZX0+e2ZpbGUubmFtZX08L2Rpdj5cbiAgICAgICAgPGRpdiBzdHlsZT17ZmlsZVNpemVTdHlsZX0+eyhmaWxlLnNpemUgLyAxMDI0KS50b0ZpeGVkKDIpfSBLQjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7IXVwbG9hZGluZyAmJiAoXG4gICAgICAgIDxidXR0b24gb25DbGljaz17b25SZW1vdmV9IHN0eWxlPXtyZW1vdmVCdXR0b25TdHlsZX0gdGl0bGU9XCJSZW1vdmUgZmlsZVwiPlxuICAgICAgICAgICYjeDI3MTU7XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKX1cbiAgICAgIHt1cGxvYWRpbmcgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXt1cGxvYWRpbmdPdmVybGF5U3R5bGV9PlxuICAgICAgICAgIDxMb2FkZXIyIHNpemU9ezI0fSBjb2xvcj1cIiMwMDBcIiBzdHlsZT17bG9hZGVyU3BpblN0eWxlfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICA8c3R5bGU+e2BcbiAgICAgICAgQGtleWZyYW1lcyBzcGluIHtcbiAgICAgICAgICAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9XG4gICAgICAgICAgMTAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH1cbiAgICAgICAgfVxuICAgICAgYH08L3N0eWxlPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuXG5pbnRlcmZhY2UgQ2hhdE1lc3NhZ2VQcm9wcyB7XG4gIG1lc3NhZ2U6IENoYXRNZXNzYWdlO1xuICB0aGVtZT86IHtcbiAgICBwcmltYXJ5Q29sb3I/OiBzdHJpbmc7XG4gICAgc2Vjb25kYXJ5Q29sb3I/OiBzdHJpbmc7XG4gICAgZm9udEZhbWlseT86IHN0cmluZztcbiAgICBmb250U2l6ZT86IHN0cmluZztcbiAgICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gICAgdGV4dENvbG9yPzogc3RyaW5nO1xuICB9O1xuICBvblBsYXlBdWRpbz86ICh0ZXh0OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIGlzUGxheWluZ0F1ZGlvPzogYm9vbGVhbjtcbiAgaXNGaXJzdE1lc3NhZ2U/OiBib29sZWFuO1xuICBpc05leHRTYW1lU3BlYWtlcj86IGJvb2xlYW47XG4gIGlzUHJldlNhbWVTcGVha2VyPzogYm9vbGVhbjtcbiAgb25GZWVkYmFjaz86IChtZXNzYWdlSWQ6IHN0cmluZywgdmFsdWU6ICdnb29kJyB8ICdiYWQnKSA9PiB2b2lkO1xuICBlbmFibGVUeXBld3JpdGVyPzogYm9vbGVhbjtcbiAgd2VsY29tZUltYWdlVXJsPzogc3RyaW5nO1xuICB3ZWxjb21lVGl0bGU/OiBzdHJpbmc7XG4gIHBvc3NpYmxlUXVlcmllcz86IHN0cmluZ1tdO1xuICBvblF1aWNrUXVlcnk/OiAocXVlcnk6IHN0cmluZykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRNZXNzYWdlQ29tcG9uZW50OiBSZWFjdC5GQzxDaGF0TWVzc2FnZVByb3BzPiA9ICh7XG4gIG1lc3NhZ2UsXG4gIHRoZW1lLFxuICBvblBsYXlBdWRpbyxcbiAgaXNQbGF5aW5nQXVkaW8sXG4gIGlzRmlyc3RNZXNzYWdlID0gZmFsc2UsXG4gIGlzTmV4dFNhbWVTcGVha2VyID0gZmFsc2UsXG4gIGlzUHJldlNhbWVTcGVha2VyID0gZmFsc2UsXG4gIG9uRmVlZGJhY2ssXG4gIGVuYWJsZVR5cGV3cml0ZXIgPSBmYWxzZSxcbiAgd2VsY29tZUltYWdlVXJsLFxuICB3ZWxjb21lVGl0bGU6IHdlbGNvbWVUaXRsZVByb3AsXG4gIHBvc3NpYmxlUXVlcmllcyxcbiAgb25RdWlja1F1ZXJ5LFxufSkgPT4ge1xuICBjb25zdCBpc1VzZXIgPSBtZXNzYWdlLnNwZWFrZXIgPT09ICdjdXN0b21lcic7XG4gIGNvbnN0IGlzU3BlY2lhbCA9IG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ3NwZWNpYWwnO1xuICBjb25zdCBpc1dlbGNvbWVNZXNzYWdlID0gIWlzVXNlciAmJiAhaXNTcGVjaWFsICYmIGlzRmlyc3RNZXNzYWdlO1xuICBjb25zdCBbaXNIb3ZlcmVkLCBzZXRJc0hvdmVyZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZWRpdGluZ0ZlZWRiYWNrLCBzZXRFZGl0aW5nRmVlZGJhY2tdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZGlzcGxheVRleHQsIHNldERpc3BsYXlUZXh0XSA9IFJlYWN0LnVzZVN0YXRlPHN0cmluZz4obWVzc2FnZS50ZXh0KTtcbiAgY29uc3QgW2lzVHlwZXdyaXRpbmcsIHNldElzVHlwZXdyaXRpbmddID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBsYXN0QW5pbWF0ZWRSZWYgPSBSZWFjdC51c2VSZWY8c3RyaW5nPignJyk7XG5cbiAgY29uc3QgZm9ybWF0VGltZXN0YW1wID0gKHRpbWVzdGFtcDogbnVtYmVyKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghdGltZXN0YW1wIHx8IGlzTmFOKHRpbWVzdGFtcCkpIHtcbiAgICAgICAgcmV0dXJuICdKdXN0IG5vdyc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IHRpbWVzdGFtcE1zID0gdGltZXN0YW1wIDwgMTAwMDAwMDAwMDAwMCA/IHRpbWVzdGFtcCAqIDEwMDAgOiB0aW1lc3RhbXA7XG4gICAgICBcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXBNcyk7XG4gICAgICAvLyBRdWljayBjaGVjayBpZiBkYXRlIGlzIHZhbGlkXG4gICAgICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgIHJldHVybiAnSnVzdCBub3cnO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCB5ZXN0ZXJkYXkgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgICB5ZXN0ZXJkYXkuc2V0RGF0ZSh5ZXN0ZXJkYXkuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICBcbiAgICAgIC8vIEZvcm1hdCB0aW1lIGFzIEhIOk1NIEFNL1BNXG4gICAgICBjb25zdCB0aW1lT3B0aW9uczogSW50bC5EYXRlVGltZUZvcm1hdE9wdGlvbnMgPSB7IGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnMi1kaWdpdCcsIGhvdXIxMjogdHJ1ZSB9O1xuICAgICAgY29uc3QgdGltZVN0ciA9IGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKHVuZGVmaW5lZCwgdGltZU9wdGlvbnMpO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBkYXRlIGlzIHRvZGF5LCB5ZXN0ZXJkYXksIG9yIGFub3RoZXIgZGF5XG4gICAgICBpZiAoZGF0ZS50b0RhdGVTdHJpbmcoKSA9PT0gdG9kYXkudG9EYXRlU3RyaW5nKCkpIHtcbiAgICAgICAgcmV0dXJuIGBUb2RheSwgJHt0aW1lU3RyfWA7XG4gICAgICB9IGVsc2UgaWYgKGRhdGUudG9EYXRlU3RyaW5nKCkgPT09IHllc3RlcmRheS50b0RhdGVTdHJpbmcoKSkge1xuICAgICAgICByZXR1cm4gYFllc3RlcmRheSwgJHt0aW1lU3RyfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3JtYXQgZGF0ZSBhcyBNb250aCBERCwgWVlZWVxuICAgICAgICBjb25zdCBkYXRlT3B0aW9uczogSW50bC5EYXRlVGltZUZvcm1hdE9wdGlvbnMgPSB7IG1vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgeWVhcjogJ251bWVyaWMnIH07XG4gICAgICAgIGNvbnN0IGRhdGVTdHIgPSBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyh1bmRlZmluZWQsIGRhdGVPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGAke2RhdGVTdHJ9LCAke3RpbWVTdHJ9YDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZm9ybWF0dGluZyB0aW1lc3RhbXA6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuICdKdXN0IG5vdyc7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHRpbWVzdGFtcCA9IGZvcm1hdFRpbWVzdGFtcChtZXNzYWdlLmNyZWF0ZV90aW1lKTtcblxuICAvLyBGYXN0IHR5cGV3cml0ZXIgZWZmZWN0IGZvciBuZXdseSBkaXNwbGF5ZWQgYWdlbnQgbWVzc2FnZXMsIGZpeCBsYXRlclxuICAvLyBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAvLyAgIGlmICghaXNVc2VyICYmICFpc1NwZWNpYWwgJiYgZW5hYmxlVHlwZXdyaXRlciAmJiBtZXNzYWdlLnRleHQgIT09IGxhc3RBbmltYXRlZFJlZi5jdXJyZW50KSB7XG4gIC8vICAgICBsYXN0QW5pbWF0ZWRSZWYuY3VycmVudCA9IG1lc3NhZ2UudGV4dDtcbiAgLy8gICAgIHNldElzVHlwZXdyaXRpbmcodHJ1ZSk7XG4gIC8vICAgICBzZXREaXNwbGF5VGV4dCgnJyk7XG4gIC8vICAgICBsZXQgaSA9IDA7XG4gIC8vICAgICBjb25zdCB0b3RhbCA9IG1lc3NhZ2UudGV4dC5sZW5ndGg7XG4gIC8vICAgICBjb25zdCB0aWNrTXMgPSAxNjtcbiAgLy8gICAgIGNvbnN0IHRhcmdldE1zID0gMTIwMDtcbiAgLy8gICAgIGNvbnN0IGNoYXJzUGVyVGljayA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQodG90YWwgLyAodGFyZ2V0TXMgLyB0aWNrTXMpKSk7XG4gIC8vICAgICBjb25zdCBpbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gIC8vICAgICAgIGkgKz0gY2hhcnNQZXJUaWNrO1xuICAvLyAgICAgICBpZiAoaSA+PSB0b3RhbCkge1xuICAvLyAgICAgICAgIHNldERpc3BsYXlUZXh0KG1lc3NhZ2UudGV4dCk7XG4gIC8vICAgICAgICAgc2V0SXNUeXBld3JpdGluZyhmYWxzZSk7XG4gIC8vICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAvLyAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgIHNldERpc3BsYXlUZXh0KG1lc3NhZ2UudGV4dC5zbGljZSgwLCBpKSk7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0sIHRpY2tNcyk7XG4gIC8vICAgICByZXR1cm4gKCkgPT4gd2luZG93LmNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAvLyAgIH0gZWxzZSB7XG4gIC8vICAgICBzZXREaXNwbGF5VGV4dChtZXNzYWdlLnRleHQpO1xuICAvLyAgICAgc2V0SXNUeXBld3JpdGluZyhmYWxzZSk7XG4gIC8vICAgfVxuICAvLyB9LCBbbWVzc2FnZS50ZXh0LCBlbmFibGVUeXBld3JpdGVyLCBpc1VzZXIsIGlzU3BlY2lhbF0pO1xuXG4gIC8vIFVwZGF0ZWQgZGVzaWduIGNvbG9yc1xuICBjb25zdCB1c2VyQnViYmxlQmdDb2xvciA9ICcjRTRFNEU3JzsgLy8gZ3JleSBmb3IgdXNlclxuICBjb25zdCB1c2VyVGV4dENvbG9yID0gJyMwMDAwMDAnO1xuICBjb25zdCBhZ2VudFRleHRDb2xvciA9ICcjMDAwMDAwJztcbiAgY29uc3QgZm9udEZhbWlseSA9IHRoZW1lPy5mb250RmFtaWx5IHx8ICdSb2JvdG8sIEFyaWFsLCBzYW5zLXNlcmlmJztcbiAgY29uc3QgZm9udFNpemUgPSB0aGVtZT8uZm9udFNpemUgfHwgJzE1cHgnO1xuXG4gIGNvbnN0IG1lc3NhZ2VDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBtYXJnaW5Cb3R0b206IGlzUHJldlNhbWVTcGVha2VyID8gJzhweCcgOiAnOHB4JyxcbiAgICBtYXJnaW5Ub3A6IGlzUHJldlNhbWVTcGVha2VyID8gJzBweCcgOiAnMTZweCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgYWxpZ25JdGVtczogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyxcbiAgfTtcblxuICBjb25zdCBtZXNzYWdlUm93U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAganVzdGlmeUNvbnRlbnQ6IGlzVXNlciA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCcsXG4gIH07XG5cbiAgY29uc3QgbGFiZWxSb3dTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiBpc1ByZXZTYW1lU3BlYWtlciA/ICdub25lJyA6ICdmbGV4JyxcbiAgICB3aWR0aDogJzgwJScsXG4gICAganVzdGlmeUNvbnRlbnQ6IGlzVXNlciA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCcsXG4gICAgYWxpZ25JdGVtczogJ2Jhc2VsaW5lJyxcbiAgICBnYXA6ICc4cHgnLFxuICAgIG1hcmdpbkJvdHRvbTogJzZweCcsXG4gIH07XG5cbiAgY29uc3QgbWVzc2FnZUxhYmVsU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICBjb2xvcjogJyMwMDAwMDAnLFxuICAgIGxpbmVIZWlnaHQ6IDEsXG4gICAgZm9udFdlaWdodDogNjAwLFxuICB9O1xuXG4gIGNvbnN0IHRvcFRpbWVzdGFtcFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTNweCcsXG4gICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICBsaW5lSGVpZ2h0OiAxLFxuICB9O1xuXG4gIGNvbnN0IG1lc3NhZ2VCdWJibGVDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgbWF4V2lkdGg6ICc4MCUnLFxuICB9O1xuXG4gIC8vIE9ubHkgdXNlcidzIG1lc3NhZ2VzIHNob3VsZCByZW5kZXIgYXMgYnViYmxlcy5cbiAgLy8gQWdlbnQgbWVzc2FnZXMgYXJlIHBsYWluIHRleHQgd2l0aCBubyBjb250YWluZXIgYmFja2dyb3VuZC5cbiAgY29uc3QgYnViYmxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSBpc1VzZXJcbiAgICA/IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB1c2VyQnViYmxlQmdDb2xvcixcbiAgICAgICAgY29sb3I6IHVzZXJUZXh0Q29sb3IsXG4gICAgICAgIHBhZGRpbmc6ICcxMnB4IDE2cHgnLFxuICAgICAgICBib3JkZXJSYWRpdXM6ICcxMnB4IDAgMTJweCAxMnB4JyxcbiAgICAgICAgZm9udFNpemUsXG4gICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxuICAgICAgICBsaW5lSGVpZ2h0OiAxLjQsXG4gICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICBib3hTaGFkb3c6ICcwIDFweCAycHggcmdiYSgwLDAsMCwwLjA4KSdcbiAgICAgIH1cbiAgICA6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICBjb2xvcjogYWdlbnRUZXh0Q29sb3IsXG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgIGJvcmRlclJhZGl1czogMCxcbiAgICAgICAgZm9udFNpemUsXG4gICAgICAgIGZvbnRGYW1pbHksXG4gICAgICAgIHdvcmRCcmVhazogJ2JyZWFrLXdvcmQnLFxuICAgICAgICBsaW5lSGVpZ2h0OiAxLjQsXG4gICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICBib3hTaGFkb3c6ICdub25lJ1xuICAgICAgfTtcblxuICBjb25zdCBhdHRhY2htZW50c0NvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIG1hcmdpblRvcDogJzhweCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGdhcDogJzhweCcsXG4gIH07XG5cbiAgY29uc3QgZ2V0RmlsZUljb24gPSAoZmlsZVR5cGU6IHN0cmluZykgPT4ge1xuICAgIGlmIChmaWxlVHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkgcmV0dXJuIDxGaWxlSW1hZ2Ugc2l6ZT17MjR9IGNvbG9yPVwiIzZEMjhEOVwiIC8+O1xuICAgIGlmIChmaWxlVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3BkZicpIHJldHVybiA8RmlsZVRleHQgc2l6ZT17MjR9IGNvbG9yPVwiI0I5MUMxQ1wiIC8+O1xuICAgIGlmIChmaWxlVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSByZXR1cm4gPEZpbGVKc29uIHNpemU9ezI0fSBjb2xvcj1cIiMxRDRFRDhcIiAvPjtcbiAgICByZXR1cm4gPEZpbGVUZXh0IHNpemU9ezI0fSBjb2xvcj1cIiM0QjU1NjNcIiAvPjtcbiAgfTtcblxuICBjb25zdCBhdHRhY2htZW50Q29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHBhZGRpbmc6ICcxMHB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzVXNlciA/ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSknIDogJ3JnYmEoMCwgMCwgMCwgMC4wNSknLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gIH07XG5cbiAgY29uc3QgaW1hZ2VBdHRhY2htZW50U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICB9O1xuXG4gIGNvbnN0IGZpbGVBdHRhY2htZW50U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHBhZGRpbmc6ICcxMHB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzVXNlciA/ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSknIDogJ3JnYmEoMCwgMCwgMCwgMC4wNSknLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gIH07XG5cbiAgY29uc3QgZmlsZUluZm9TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBtYXJnaW5MZWZ0OiAnMTBweCcsXG4gICAgZmxleDogMSxcbiAgfTtcbiAgXG4gIGNvbnN0IGZpbGVOYW1lU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICB9O1xuICBcbiAgY29uc3QgZmlsZVNpemVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogJzEycHgnLFxuICAgIG9wYWNpdHk6IDAuOCxcbiAgfTtcblxuICAvLyBObyBib3R0b20gdGltZXN0YW1wIGluIHRoZSBuZXcgZGVzaWduXG4gIGNvbnN0IHRpbWVzdGFtcFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0geyBkaXNwbGF5OiAnbm9uZScgfTtcbiAgY29uc3Qgc3BlYWtlckxhYmVsID0gaXNVc2VyID8gJ1lvdScgOiBpc1NwZWNpYWwgPyAnU3lzdGVtJyA6ICdBZ2VudCc7XG5cbiAgLy8gRmVlZGJhY2sgc3RhdGUgYW5kIFVJICh0aHVtYnMgdXAvZG93bikgZm9yIGFnZW50IG1lc3NhZ2VzXG4gIGNvbnN0IGZlZWRiYWNrVmFsdWUgPSAobWVzc2FnZS5mZWVkYmFjayAmJiBtZXNzYWdlLmZlZWRiYWNrLmxlbmd0aCA+IDApXG4gICAgPyBtZXNzYWdlLmZlZWRiYWNrW21lc3NhZ2UuZmVlZGJhY2subGVuZ3RoIC0gMV0uZmVlZGJhY2tcbiAgICA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBwcmltYXJ5Q29sb3IgPSB0aGVtZT8ucHJpbWFyeUNvbG9yIHx8ICcjMjk2MkZGJztcbiAgY29uc3QgdGh1bWJzU2hvdWxkU2hvdyA9ICFpc1VzZXIgJiYgIWlzU3BlY2lhbCAmJiBpc0hvdmVyZWQgJiYgIWZlZWRiYWNrVmFsdWU7XG4gIGNvbnN0IHNob3dUaHVtYnNBcmVhID0gIWlzVXNlciAmJiAhaXNTcGVjaWFsOyAvLyBPbmx5IGFnZW50cyBoYXZlIHRodW1icyBhcmVhXG5cbiAgY29uc3QgZmVlZGJhY2tSb3dTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiBzaG93VGh1bWJzQXJlYSA/ICdmbGV4JyA6ICdub25lJyxcbiAgICBtYXJnaW5Ub3A6IDgsXG4gICAgYWxpZ25TZWxmOiAnZmxleC1zdGFydCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgaGVpZ2h0OiAyMCxcbiAgICBnYXA6IDgsXG4gICAgdmlzaWJpbGl0eTogdGh1bWJzU2hvdWxkU2hvdyB8fCAhIWZlZWRiYWNrVmFsdWUgPyAndmlzaWJsZScgOiAnaGlkZGVuJyxcbiAgfTtcblxuICBjb25zdCBpY29uQnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBwYWRkaW5nOiAwLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGNvbG9yOiAnIzljYTNhZicsXG4gICAgZGlzcGxheTogdGh1bWJzU2hvdWxkU2hvdyA/ICdmbGV4JyA6ICdub25lJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfTtcblxuICBjb25zdCBzZXBhcmF0b3JTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogMSxcbiAgICBoZWlnaHQ6IDE0LFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNlNWU3ZWInLFxuICAgIGRpc3BsYXk6IHRodW1ic1Nob3VsZFNob3cgPyAnYmxvY2snIDogJ25vbmUnLFxuICB9O1xuXG4gIGNvbnN0IHNpbmdsZUljb25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBjb2xvcjogJyMwMDAwMDAnLFxuICAgIGRpc3BsYXk6IGZlZWRiYWNrVmFsdWUgPyAnZmxleCcgOiAnbm9uZScsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH07XG5cbiAgbGV0IHdlbGNvbWVUaXRsZSA9IHdlbGNvbWVUaXRsZVByb3AgfHwgJyc7XG4gIGxldCB3ZWxjb21lQ29udGVudCA9ICcnO1xuICBcbiAgaWYgKGlzV2VsY29tZU1lc3NhZ2UpIHtcbiAgICBjb25zdCBtZXNzYWdlVGV4dCA9IG1lc3NhZ2UudGV4dDtcbiAgICBpZiAoIXdlbGNvbWVUaXRsZVByb3ApIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gbWVzc2FnZVRleHQuc3BsaXQoL1tcXG5cXC4hP10vKTtcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAwKSB3ZWxjb21lVGl0bGUgPSAocGFydHNbMF0gfHwgJycpLnRyaW0oKTtcbiAgICAgIHdlbGNvbWVDb250ZW50ID0gbWVzc2FnZVRleHQuc3Vic3RyaW5nKHdlbGNvbWVUaXRsZS5sZW5ndGgpLnRyaW0oKTtcbiAgICAgIHdlbGNvbWVDb250ZW50ID0gd2VsY29tZUNvbnRlbnQucmVwbGFjZSgvXlssLiE/XFxzXSsvLCAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdlbGNvbWVDb250ZW50ID0gbWVzc2FnZVRleHQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVzc2FnZUxpbmVzID0gIWlzV2VsY29tZU1lc3NhZ2UgPyBkaXNwbGF5VGV4dC5zcGxpdCgnXFxuJykubWFwKChsaW5lLCBpKSA9PiAoXG4gICAgPFJlYWN0LkZyYWdtZW50IGtleT17aX0+XG4gICAgICB7bGluZX1cbiAgICAgIHtpIDwgZGlzcGxheVRleHQuc3BsaXQoJ1xcbicpLmxlbmd0aCAtIDEgJiYgPGJyIC8+fVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICkpIDogbnVsbDtcblxuICAvLyBIYW5kbGUgc3BlY2lhbCBtZXNzYWdlcyAobGlrZSB0YWtlb3ZlciBpbmRpY2F0b3JzKVxuICBpZiAoaXNTcGVjaWFsKSB7XG4gICAgY29uc3Qgc3BlY2lhbE1lc3NhZ2VTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgbWFyZ2luOiAnMTZweCAwJyxcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgfTtcblxuICAgIC8vIERldGVybWluZSBpY29uIGFuZCBzdHlsZSBiYXNlZCBvbiBtZXNzYWdlIGNvbnRlbnRcbiAgICBsZXQgaWNvbjtcbiAgICBsZXQgYmFja2dyb3VuZENvbG9yID0gJyNFM0YyRkQnO1xuICAgIGxldCB0ZXh0Q29sb3IgPSAnIzE5NzZEMic7XG4gICAgXG4gICAgaWYgKG1lc3NhZ2UudGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdvZmZsaW5lJykgfHwgbWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2luYWN0aXZlJykpIHtcbiAgICAgIGljb24gPSA8QWxlcnRDaXJjbGUgc2l6ZT17MTh9IC8+O1xuICAgICAgYmFja2dyb3VuZENvbG9yID0gJyNGRkYzRTAnO1xuICAgICAgdGV4dENvbG9yID0gJyNGNTdDMDAnO1xuICAgIH0gZWxzZSBpZiAobWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3Rvb2sgb3ZlcicpIHx8IG1lc3NhZ2UudGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCd0YWtlb3ZlcicpKSB7XG4gICAgICBpY29uID0gPFVzZXJYIHNpemU9ezE4fSAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWNvbiA9IDxVc2VyIHNpemU9ezE4fSAvPjtcbiAgICB9XG5cbiAgICBjb25zdCBzcGVjaWFsQnViYmxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgICAgcGFkZGluZzogJzhweCAxNnB4JyxcbiAgICAgIGJvcmRlclJhZGl1czogJzE2cHgnLFxuICAgICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICAgIGZvbnRGYW1pbHksXG4gICAgICBmb250V2VpZ2h0OiAnNTAwJyxcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgZ2FwOiAnOHB4JyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e3NwZWNpYWxNZXNzYWdlU3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtzcGVjaWFsQnViYmxlU3R5bGV9PlxuICAgICAgICAgIHtpY29ufVxuICAgICAgICAgIHttZXNzYWdlLnRleHR9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGlmIChpc1dlbGNvbWVNZXNzYWdlKSB7XG4gICAgY29uc3QgcHJpbWFyeUNvbG9yID0gdGhlbWU/LnByaW1hcnlDb2xvciB8fCAnIzVCM0RGNSc7XG4gICAgY29uc3QgY2hpcFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHByaW1hcnlDb2xvcixcbiAgICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgICBwYWRkaW5nOiAnOHB4IDEycHgnLFxuICAgICAgYm9yZGVyUmFkaXVzOiAxMixcbiAgICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgICBtYXJnaW5SaWdodDogOCxcbiAgICAgIG1hcmdpbkJvdHRvbTogOCxcbiAgICAgIGN1cnNvcjogb25RdWlja1F1ZXJ5ID8gJ3BvaW50ZXInIDogJ2RlZmF1bHQnLFxuICAgICAgdXNlclNlbGVjdDogJ25vbmUnLFxuICAgIH07XG4gICAgY29uc3QgY2hpcENvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICAgIG1hcmdpblRvcDogOCxcbiAgICB9O1xuICAgIGNvbnN0IGltYWdlQm94U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICB3aWR0aDogMTIwLFxuICAgICAgaGVpZ2h0OiAxMjAsXG4gICAgICBib3JkZXJSYWRpdXM6IDEyLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2U1ZTdlYicsXG4gICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgIGNvbG9yOiAnIzZiNzI4MCcsXG4gICAgICBmb250U2l6ZTogMTIsXG4gICAgICBmb250V2VpZ2h0OiA2MDAsXG4gICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgfTtcbiAgICBjb25zdCB3ZWxjb21lVGl0bGVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIGZvbnRTaXplOiAnMjJweCcsXG4gICAgICBmb250V2VpZ2h0OiA3MDAsXG4gICAgICBtYXJnaW46ICc4cHggMCA0cHggMCcsXG4gICAgICBjb2xvcjogYWdlbnRUZXh0Q29sb3IsXG4gICAgICBmb250RmFtaWx5LFxuICAgIH07XG4gICAgY29uc3Qgd2VsY29tZVN1YnRpdGxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICAgIG1hcmdpbjogMCxcbiAgICAgIGZvbnRGYW1pbHksXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlQnViYmxlQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiA4IH19PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogMTYgfX0+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e2ltYWdlQm94U3R5bGV9PlxuICAgICAgICAgICAgICAgIHt3ZWxjb21lSW1hZ2VVcmwgPyAoXG4gICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUganN4LWExMXkvYWx0LXRleHRcbiAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPXt3ZWxjb21lSW1hZ2VVcmx9IHN0eWxlPXt7IHdpZHRoOiAnMTAwJScsIGhlaWdodDogJzEwMCUnLCBvYmplY3RGaXQ6ICdjb3ZlcicgfX0gLz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPGRpdj5JTUFHRSAxMjAgw5cgMTIwIHB4PC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHt3ZWxjb21lVGl0bGUgJiYgPGRpdiBzdHlsZT17d2VsY29tZVRpdGxlU3R5bGV9Pnt3ZWxjb21lVGl0bGV9PC9kaXY+fVxuICAgICAgICAgICAge3dlbGNvbWVDb250ZW50ICYmIDxkaXYgc3R5bGU9e3dlbGNvbWVTdWJ0aXRsZVN0eWxlfT57d2VsY29tZUNvbnRlbnR9PC9kaXY+fVxuICAgICAgICAgICAge3Bvc3NpYmxlUXVlcmllcyAmJiBwb3NzaWJsZVF1ZXJpZXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e2NoaXBDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICAgICAge3Bvc3NpYmxlUXVlcmllcy5tYXAoKHEsIGlkeCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPHNwYW4ga2V5PXtpZHh9IHN0eWxlPXtjaGlwU3R5bGV9IG9uQ2xpY2s9eygpID0+IG9uUXVpY2tRdWVyeSAmJiBvblF1aWNrUXVlcnkocSl9PlxuICAgICAgICAgICAgICAgICAgICB7cX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgXG4gICAgICBzdHlsZT17bWVzc2FnZUNvbnRhaW5lclN0eWxlfVxuICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRJc0hvdmVyZWQodHJ1ZSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHsgaWYgKCFlZGl0aW5nRmVlZGJhY2spIHNldElzSG92ZXJlZChmYWxzZSk7IH19XG4gICAgPlxuICAgICAgPGRpdiBzdHlsZT17bGFiZWxSb3dTdHlsZX0+XG4gICAgICAgIHtpc1VzZXIgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3RvcFRpbWVzdGFtcFN0eWxlfT57dGltZXN0YW1wfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17bWVzc2FnZUxhYmVsU3R5bGV9PllvdTwvZGl2PlxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlTGFiZWxTdHlsZX0+QWdlbnQ8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3RvcFRpbWVzdGFtcFN0eWxlfT57dGltZXN0YW1wfTwvZGl2PlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHttZXNzYWdlLmF0dGFjaG1lbnRzICYmIG1lc3NhZ2UuYXR0YWNobWVudHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgLi4uYXR0YWNobWVudHNDb250YWluZXJTdHlsZSwgYWxpZ25JdGVtczogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyB9fT5cbiAgICAgICAgICB7bWVzc2FnZS5hdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGdhcDogJzEycHgnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcxMnB4IDE0cHgnLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogaXNVc2VyID8gJ3JnYmEoMjU1LDI1NSwyNTUsMC4xMiknIDogJyNmNWY1ZjUnLFxuICAgICAgICAgICAgICAgIGJvcmRlcjogaXNVc2VyID8gJzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTgpJyA6ICcxcHggc29saWQgI2U1ZTVlNScsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTJweCcsXG4gICAgICAgICAgICAgICAgbWluV2lkdGg6ICcyNjBweCcsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6ICczNjBweCcsXG4gICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7YXR0YWNobWVudC50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpID8gKFxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIHNyYz17YXR0YWNobWVudC51cmx9XG4gICAgICAgICAgICAgICAgICBhbHQ9e2F0dGFjaG1lbnQubmFtZX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiA1NiwgaGVpZ2h0OiA1NiwgYm9yZGVyUmFkaXVzOiA4LCBvYmplY3RGaXQ6ICdjb3ZlcicgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDQwLCBoZWlnaHQ6IDQwLCBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICB7Z2V0RmlsZUljb24oYXR0YWNobWVudC50eXBlKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFdlaWdodDogNjAwLCBmb250U2l6ZTogMTQgfX0+e2F0dGFjaG1lbnQubmFtZX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgb3BhY2l0eTogMC44IH19PlxuICAgICAgICAgICAgICAgICAge2F0dGFjaG1lbnQudHlwZS5pbmNsdWRlcygnLycpID8gYXR0YWNobWVudC50eXBlLnNwbGl0KCcvJylbMV0udG9VcHBlckNhc2UoKSA6IGF0dGFjaG1lbnQudHlwZX1cbiAgICAgICAgICAgICAgICAgIHthdHRhY2htZW50LnNpemUgPyBgIMK3ICR7KGF0dGFjaG1lbnQuc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCYCA6ICcnfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHttZXNzYWdlLnRleHQgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzhweCcsIGFsaWduU2VsZjogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyB9fT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IC4uLmJ1YmJsZVN0eWxlLCBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9fT5cbiAgICAgICAgICAgIHttZXNzYWdlTGluZXN9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAgey8qIEZlZWRiYWNrIHJvdyBiZWxvdyBhZ2VudCBtZXNzYWdlICovfVxuICAgICAge3Nob3dUaHVtYnNBcmVhICYmIChcbiAgICAgICAgPGRpdiBzdHlsZT17ZmVlZGJhY2tSb3dTdHlsZX0+XG4gICAgICAgICAge2ZlZWRiYWNrVmFsdWUgPyAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtzaW5nbGVJY29uU3R5bGV9PlxuICAgICAgICAgICAgICB7ZmVlZGJhY2tWYWx1ZSA9PT0gJ2dvb2QnID8gKFxuICAgICAgICAgICAgICAgIDxUaHVtYnNVcCBzaXplPXsxOH0gLz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8VGh1bWJzRG93biBzaXplPXsxOH0gLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e2ljb25CdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICB0aXRsZT1cIlRodW1icyB1cFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWVzc2FnZV9pZCAmJiBvbkZlZWRiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRmVlZGJhY2sobWVzc2FnZS5tZXNzYWdlX2lkLCAnZ29vZCcpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8VGh1bWJzVXAgc2l6ZT17MTh9IC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtzZXBhcmF0b3JTdHlsZX0gLz5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHN0eWxlPXtpY29uQnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgdGl0bGU9XCJUaHVtYnMgZG93blwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UubWVzc2FnZV9pZCAmJiBvbkZlZWRiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRmVlZGJhY2sobWVzc2FnZS5tZXNzYWdlX2lkLCAnYmFkJyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxUaHVtYnNEb3duIHNpemU9ezE4fSAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iXX0=
395
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhdE1lc3NhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9DaGF0TWVzc2FnZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRzFCLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFRcEMsTUFBTSxDQUFDLElBQU0saUJBQWlCLEdBQXFDLFVBQUMsRUFBcUM7UUFBbkMsSUFBSSxVQUFBLEVBQUUsUUFBUSxjQUFBLEVBQUUsaUJBQWlCLEVBQWpCLFNBQVMsbUJBQUcsS0FBSyxLQUFBO0lBQ3JHLElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDM0IsSUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QyxJQUFBLEtBQWtDLEtBQUssQ0FBQyxRQUFRLENBQWdCLElBQUksQ0FBQyxFQUFwRSxZQUFZLFFBQUEsRUFBRSxlQUFlLFFBQXVDLENBQUM7SUFFNUUsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNkLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixJQUFNLFFBQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2hDLFFBQU0sQ0FBQyxTQUFTLEdBQUc7Z0JBQ2pCLGVBQWUsQ0FBQyxRQUFNLENBQUMsTUFBZ0IsQ0FBQyxDQUFDO1lBQzNDLENBQUMsQ0FBQztZQUNGLFFBQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQztJ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Q0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dDQUN6QyxDQUFDOzRCQUNILENBQUMsWUFFRCxLQUFDLFFBQVEsSUFBQyxJQUFJLEVBQUUsRUFBRSxHQUFJLEdBQ2YsRUFDVCxjQUFLLEtBQUssRUFBRSxjQUFjLEdBQUksRUFDOUIsaUJBQ0UsSUFBSSxFQUFDLFFBQVEsRUFDYixLQUFLLEVBQUUsZUFBZSxFQUN0QixLQUFLLEVBQUMsYUFBYSxFQUNuQixPQUFPLEVBQUU7Z0NBQ1AsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLFVBQVUsRUFBRSxDQUFDO29DQUNyQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQ0FDeEMsQ0FBQzs0QkFDSCxDQUFDLFlBRUQsS0FBQyxVQUFVLElBQUMsSUFBSSxFQUFFLEVBQUUsR0FBSSxHQUNqQixJQUNSLENBQ0osR0FDRyxDQUNQLElBQ0csQ0FDUCxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgQ2hhdFRoZW1lIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBVc2VyLCBVc2VyWCwgQWxlcnRDaXJjbGUsIFRodW1ic1VwLCBUaHVtYnNEb3duIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7IGdldEZpbGVJY29uIH0gZnJvbSAnLi4vdXRpbHMvZmlsZUljb25zJztcbmltcG9ydCB7IGZvcm1hdFRpbWVzdGFtcCB9IGZyb20gJy4uL3V0aWxzL3RpbWUnO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJy4vU3Bpbm5lcic7XG5cbmludGVyZmFjZSBBdHRhY2htZW50UHJldmlld1Byb3BzIHtcbiAgZmlsZTogRmlsZTtcbiAgb25SZW1vdmU6ICgpID0+IHZvaWQ7XG4gIHVwbG9hZGluZz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBBdHRhY2htZW50UHJldmlldzogUmVhY3QuRkM8QXR0YWNobWVudFByZXZpZXdQcm9wcz4gPSAoeyBmaWxlLCBvblJlbW92ZSwgdXBsb2FkaW5nID0gZmFsc2UgfSkgPT4ge1xuICBjb25zdCBmaWxlVHlwZSA9IGZpbGUudHlwZTtcbiAgY29uc3QgaXNJbWFnZSA9IGZpbGVUeXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpO1xuICBjb25zdCBbaW1hZ2VQcmV2aWV3LCBzZXRJbWFnZVByZXZpZXddID0gUmVhY3QudXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNJbWFnZSkge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG4gICAgICAgIHNldEltYWdlUHJldmlldyhyZWFkZXIucmVzdWx0IGFzIHN0cmluZyk7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgfVxuICB9LCBbZmlsZSwgaXNJbWFnZV0pO1xuXG4gIGNvbnN0IGNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBwYWRkaW5nOiAnOHB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZjBmMGYwJyxcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIG1heFdpZHRoOiAnMjUwcHgnLFxuICB9O1xuXG4gIGNvbnN0IGltYWdlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgd2lkdGg6ICc0MHB4JyxcbiAgICBoZWlnaHQ6ICc0MHB4JyxcbiAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgIG9iamVjdEZpdDogJ2NvdmVyJyxcbiAgICBtYXJnaW5SaWdodDogJzEwcHgnLFxuICB9O1xuXG4gIGNvbnN0IGZpbGVJbmZvU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogMSxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICB9O1xuXG4gIGNvbnN0IGZpbGVOYW1lU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIGZvbnRTaXplOiAnMTRweCcsXG4gIH07XG5cbiAgY29uc3QgZmlsZVNpemVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogJzEycHgnLFxuICAgIGNvbG9yOiAnIzY2NicsXG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlQnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZDogJ25vbmUnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIHBhZGRpbmc6ICc0cHgnLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogJzRweCcsXG4gICAgcmlnaHQ6ICc0cHgnLFxuICB9O1xuXG4gIGNvbnN0IHVwbG9hZGluZ092ZXJsYXlTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDAsXG4gICAgbGVmdDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHN0eWxlPXtjb250YWluZXJTdHlsZX0+XG4gICAgICB7aXNJbWFnZSAmJiBpbWFnZVByZXZpZXcgPyAoXG4gICAgICAgIDxpbWcgc3JjPXtpbWFnZVByZXZpZXd9IGFsdD17ZmlsZS5uYW1lfSBzdHlsZT17aW1hZ2VTdHlsZX0gLz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luUmlnaHQ6ICcxMHB4JyB9fT57Z2V0RmlsZUljb24oZmlsZVR5cGUpfTwvZGl2PlxuICAgICAgKX1cbiAgICAgIDxkaXYgc3R5bGU9e2ZpbGVJbmZvU3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtmaWxlTmFtZVN0eWxlfSB0aXRsZT17ZmlsZS5uYW1lfT57ZmlsZS5uYW1lfTwvZGl2PlxuICAgICAgICA8ZGl2IHN0eWxlPXtmaWxlU2l6ZVN0eWxlfT57KGZpbGUuc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMil9IEtCPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIHshdXBsb2FkaW5nICYmIChcbiAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXtvblJlbW92ZX0gc3R5bGU9e3JlbW92ZUJ1dHRvblN0eWxlfSB0aXRsZT1cIlJlbW92ZSBmaWxlXCI+XG4gICAgICAgICAgJiN4MjcxNTtcbiAgICAgICAgPC9idXR0b24+XG4gICAgICApfVxuICAgICAge3VwbG9hZGluZyAmJiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3VwbG9hZGluZ092ZXJsYXlTdHlsZX0+XG4gICAgICAgICAgPFNwaW5uZXIgc2l6ZT17MjR9IGNvbG9yPVwiIzAwMFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cblxuaW50ZXJmYWNlIENoYXRNZXNzYWdlUHJvcHMge1xuICBtZXNzYWdlOiBDaGF0TWVzc2FnZTtcbiAgdGhlbWU/OiBQYXJ0aWFsPENoYXRUaGVtZT47XG4gIG9uUGxheUF1ZGlvPzogKHRleHQ6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbiAgaXNQbGF5aW5nQXVkaW8/OiBib29sZWFuO1xuICBpc0ZpcnN0TWVzc2FnZT86IGJvb2xlYW47XG4gIGlzTmV4dFNhbWVTcGVha2VyPzogYm9vbGVhbjtcbiAgaXNQcmV2U2FtZVNwZWFrZXI/OiBib29sZWFuO1xuICBvbkZlZWRiYWNrPzogKG1lc3NhZ2VJZDogc3RyaW5nLCB2YWx1ZTogJ2dvb2QnIHwgJ2JhZCcpID0+IHZvaWQ7XG4gIGVuYWJsZVR5cGV3cml0ZXI/OiBib29sZWFuO1xuICB3ZWxjb21lSW1hZ2VVcmw/OiBzdHJpbmc7XG4gIHdlbGNvbWVUaXRsZT86IHN0cmluZztcbiAgcG9zc2libGVRdWVyaWVzPzogc3RyaW5nW107XG4gIG9uUXVpY2tRdWVyeT86IChxdWVyeTogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgQ2hhdE1lc3NhZ2VDb21wb25lbnQ6IFJlYWN0LkZDPENoYXRNZXNzYWdlUHJvcHM+ID0gKHtcbiAgbWVzc2FnZSxcbiAgdGhlbWUsXG4gIG9uUGxheUF1ZGlvLFxuICBpc1BsYXlpbmdBdWRpbyxcbiAgaXNGaXJzdE1lc3NhZ2UgPSBmYWxzZSxcbiAgaXNOZXh0U2FtZVNwZWFrZXIgPSBmYWxzZSxcbiAgaXNQcmV2U2FtZVNwZWFrZXIgPSBmYWxzZSxcbiAgb25GZWVkYmFjayxcbiAgZW5hYmxlVHlwZXdyaXRlciA9IGZhbHNlLFxuICB3ZWxjb21lSW1hZ2VVcmwsXG4gIHdlbGNvbWVUaXRsZTogd2VsY29tZVRpdGxlUHJvcCxcbiAgcG9zc2libGVRdWVyaWVzLFxuICBvblF1aWNrUXVlcnksXG59KSA9PiB7XG4gIGNvbnN0IGlzVXNlciA9IG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2N1c3RvbWVyJztcbiAgY29uc3QgaXNTcGVjaWFsID0gbWVzc2FnZS5zcGVha2VyID09PSAnc3BlY2lhbCc7XG4gIGNvbnN0IGlzV2VsY29tZU1lc3NhZ2UgPSAhaXNVc2VyICYmICFpc1NwZWNpYWwgJiYgaXNGaXJzdE1lc3NhZ2U7XG4gIGNvbnN0IFtpc0hvdmVyZWQsIHNldElzSG92ZXJlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtlZGl0aW5nRmVlZGJhY2ssIHNldEVkaXRpbmdGZWVkYmFja10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtkaXNwbGF5VGV4dCwgc2V0RGlzcGxheVRleHRdID0gUmVhY3QudXNlU3RhdGU8c3RyaW5nPihtZXNzYWdlLnRleHQpO1xuICBjb25zdCBbaXNUeXBld3JpdGluZywgc2V0SXNUeXBld3JpdGluZ10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGxhc3RBbmltYXRlZFJlZiA9IFJlYWN0LnVzZVJlZjxzdHJpbmc+KCcnKTtcblxuICBjb25zdCB0aW1lc3RhbXAgPSBmb3JtYXRUaW1lc3RhbXAobWVzc2FnZS5jcmVhdGVfdGltZSk7XG5cbiAgLy8gRmFzdCB0eXBld3JpdGVyIGVmZmVjdCBmb3IgbmV3bHkgZGlzcGxheWVkIGFnZW50IG1lc3NhZ2VzLCBmaXggbGF0ZXJcbiAgLy8gUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgLy8gICBpZiAoIWlzVXNlciAmJiAhaXNTcGVjaWFsICYmIGVuYWJsZVR5cGV3cml0ZXIgJiYgbWVzc2FnZS50ZXh0ICE9PSBsYXN0QW5pbWF0ZWRSZWYuY3VycmVudCkge1xuICAvLyAgICAgbGFzdEFuaW1hdGVkUmVmLmN1cnJlbnQgPSBtZXNzYWdlLnRleHQ7XG4gIC8vICAgICBzZXRJc1R5cGV3cml0aW5nKHRydWUpO1xuICAvLyAgICAgc2V0RGlzcGxheVRleHQoJycpO1xuICAvLyAgICAgbGV0IGkgPSAwO1xuICAvLyAgICAgY29uc3QgdG90YWwgPSBtZXNzYWdlLnRleHQubGVuZ3RoO1xuICAvLyAgICAgY29uc3QgdGlja01zID0gMTY7XG4gIC8vICAgICBjb25zdCB0YXJnZXRNcyA9IDEyMDA7XG4gIC8vICAgICBjb25zdCBjaGFyc1BlclRpY2sgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHRvdGFsIC8gKHRhcmdldE1zIC8gdGlja01zKSkpO1xuICAvLyAgICAgY29uc3QgaW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAvLyAgICAgICBpICs9IGNoYXJzUGVyVGljaztcbiAgLy8gICAgICAgaWYgKGkgPj0gdG90YWwpIHtcbiAgLy8gICAgICAgICBzZXREaXNwbGF5VGV4dChtZXNzYWdlLnRleHQpO1xuICAvLyAgICAgICAgIHNldElzVHlwZXdyaXRpbmcoZmFsc2UpO1xuICAvLyAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKGludGVydmFsKTtcbiAgLy8gICAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgICBzZXREaXNwbGF5VGV4dChtZXNzYWdlLnRleHQuc2xpY2UoMCwgaSkpO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9LCB0aWNrTXMpO1xuICAvLyAgICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhckludGVydmFsKGludGVydmFsKTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgc2V0RGlzcGxheVRleHQobWVzc2FnZS50ZXh0KTtcbiAgLy8gICAgIHNldElzVHlwZXdyaXRpbmcoZmFsc2UpO1xuICAvLyAgIH1cbiAgLy8gfSwgW21lc3NhZ2UudGV4dCwgZW5hYmxlVHlwZXdyaXRlciwgaXNVc2VyLCBpc1NwZWNpYWxdKTtcblxuICAvLyBVcGRhdGVkIGRlc2lnbiBjb2xvcnNcbiAgY29uc3QgdXNlckJ1YmJsZUJnQ29sb3IgPSAnI0U0RTRFNyc7IC8vIGdyZXkgZm9yIHVzZXJcbiAgY29uc3QgdXNlclRleHRDb2xvciA9ICcjMDAwMDAwJztcbiAgY29uc3QgYWdlbnRUZXh0Q29sb3IgPSAnIzAwMDAwMCc7XG4gIGNvbnN0IGZvbnRGYW1pbHkgPSB0aGVtZT8uZm9udEZhbWlseSB8fCAnUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZic7XG4gIGNvbnN0IGZvbnRTaXplID0gdGhlbWU/LmZvbnRTaXplIHx8ICcxNXB4JztcblxuICBjb25zdCBtZXNzYWdlQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgbWFyZ2luQm90dG9tOiBpc1ByZXZTYW1lU3BlYWtlciA/ICc4cHgnIDogJzhweCcsXG4gICAgbWFyZ2luVG9wOiBpc1ByZXZTYW1lU3BlYWtlciA/ICcwcHgnIDogJzE2cHgnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIGFsaWduSXRlbXM6IGlzVXNlciA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCcsXG4gIH07XG5cbiAgY29uc3QgbWVzc2FnZVJvd1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGp1c3RpZnlDb250ZW50OiBpc1VzZXIgPyAnZmxleC1lbmQnIDogJ2ZsZXgtc3RhcnQnLFxuICB9O1xuXG4gIGNvbnN0IGxhYmVsUm93U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogaXNQcmV2U2FtZVNwZWFrZXIgPyAnbm9uZScgOiAnZmxleCcsXG4gICAgd2lkdGg6ICc4MCUnLFxuICAgIGp1c3RpZnlDb250ZW50OiBpc1VzZXIgPyAnZmxleC1lbmQnIDogJ2ZsZXgtc3RhcnQnLFxuICAgIGFsaWduSXRlbXM6ICdiYXNlbGluZScsXG4gICAgZ2FwOiAnOHB4JyxcbiAgICBtYXJnaW5Cb3R0b206ICc2cHgnLFxuICB9O1xuXG4gIGNvbnN0IG1lc3NhZ2VMYWJlbFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgY29sb3I6ICcjMDAwMDAwJyxcbiAgICBsaW5lSGVpZ2h0OiAxLFxuICAgIGZvbnRXZWlnaHQ6IDYwMCxcbiAgfTtcblxuICBjb25zdCB0b3BUaW1lc3RhbXBTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogJzEzcHgnLFxuICAgIGNvbG9yOiAnIzZiNzI4MCcsXG4gICAgbGluZUhlaWdodDogMSxcbiAgfTtcblxuICBjb25zdCBtZXNzYWdlQnViYmxlQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIG1heFdpZHRoOiAnODAlJyxcbiAgfTtcblxuICAvLyBPbmx5IHVzZXIncyBtZXNzYWdlcyBzaG91bGQgcmVuZGVyIGFzIGJ1YmJsZXMuXG4gIC8vIEFnZW50IG1lc3NhZ2VzIGFyZSBwbGFpbiB0ZXh0IHdpdGggbm8gY29udGFpbmVyIGJhY2tncm91bmQuXG4gIGNvbnN0IGJ1YmJsZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0gaXNVc2VyXG4gICAgPyB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdXNlckJ1YmJsZUJnQ29sb3IsXG4gICAgICAgIGNvbG9yOiB1c2VyVGV4dENvbG9yLFxuICAgICAgICBwYWRkaW5nOiAnMTJweCAxNnB4JyxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTJweCAwIDEycHggMTJweCcsXG4gICAgICAgIGZvbnRTaXplLFxuICAgICAgICBmb250RmFtaWx5LFxuICAgICAgICB3b3JkQnJlYWs6ICdicmVhay13b3JkJyxcbiAgICAgICAgbGluZUhlaWdodDogMS40LFxuICAgICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgICAgYm94U2hhZG93OiAnMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wOCknXG4gICAgICB9XG4gICAgOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgY29sb3I6IGFnZW50VGV4dENvbG9yLFxuICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICBib3JkZXJSYWRpdXM6IDAsXG4gICAgICAgIGZvbnRTaXplLFxuICAgICAgICBmb250RmFtaWx5LFxuICAgICAgICB3b3JkQnJlYWs6ICdicmVhay13b3JkJyxcbiAgICAgICAgbGluZUhlaWdodDogMS40LFxuICAgICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgICAgYm94U2hhZG93OiAnbm9uZSdcbiAgICAgIH07XG5cbiAgY29uc3QgYXR0YWNobWVudHNDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBtYXJnaW5Ub3A6ICc4cHgnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBnYXA6ICc4cHgnLFxuICB9O1xuXG4gIGNvbnN0IGF0dGFjaG1lbnRDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgcGFkZGluZzogJzEwcHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogaXNVc2VyID8gJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKScgOiAncmdiYSgwLCAwLCAwLCAwLjA1KScsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgfTtcblxuICBjb25zdCBpbWFnZUF0dGFjaG1lbnRTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gIH07XG5cbiAgY29uc3QgZmlsZUF0dGFjaG1lbnRTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgcGFkZGluZzogJzEwcHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogaXNVc2VyID8gJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKScgOiAncmdiYSgwLCAwLCAwLCAwLjA1KScsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgfTtcblxuICBjb25zdCBmaWxlSW5mb1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIG1hcmdpbkxlZnQ6ICcxMHB4JyxcbiAgICBmbGV4OiAxLFxuICB9O1xuICBcbiAgY29uc3QgZmlsZU5hbWVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gIH07XG4gIFxuICBjb25zdCBmaWxlU2l6ZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTJweCcsXG4gICAgb3BhY2l0eTogMC44LFxuICB9O1xuXG4gIC8vIE5vIGJvdHRvbSB0aW1lc3RhbXAgaW4gdGhlIG5ldyBkZXNpZ25cbiAgY29uc3QgdGltZXN0YW1wU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7IGRpc3BsYXk6ICdub25lJyB9O1xuICBjb25zdCBzcGVha2VyTGFiZWwgPSBpc1VzZXIgPyAnWW91JyA6IGlzU3BlY2lhbCA/ICdTeXN0ZW0nIDogJ0FnZW50JztcblxuICAvLyBGZWVkYmFjayBzdGF0ZSBhbmQgVUkgKHRodW1icyB1cC9kb3duKSBmb3IgYWdlbnQgbWVzc2FnZXNcbiAgY29uc3QgZmVlZGJhY2tWYWx1ZSA9IChtZXNzYWdlLmZlZWRiYWNrICYmIG1lc3NhZ2UuZmVlZGJhY2subGVuZ3RoID4gMClcbiAgICA/IG1lc3NhZ2UuZmVlZGJhY2tbbWVzc2FnZS5mZWVkYmFjay5sZW5ndGggLSAxXS5mZWVkYmFja1xuICAgIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHByaW1hcnlDb2xvciA9IHRoZW1lPy5wcmltYXJ5Q29sb3IgfHwgJyMyOTYyRkYnO1xuICBjb25zdCB0aHVtYnNTaG91bGRTaG93ID0gIWlzVXNlciAmJiAhaXNTcGVjaWFsICYmIGlzSG92ZXJlZCAmJiAhZmVlZGJhY2tWYWx1ZTtcbiAgY29uc3Qgc2hvd1RodW1ic0FyZWEgPSAhaXNVc2VyICYmICFpc1NwZWNpYWw7IC8vIE9ubHkgYWdlbnRzIGhhdmUgdGh1bWJzIGFyZWFcblxuICBjb25zdCBmZWVkYmFja1Jvd1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6IHNob3dUaHVtYnNBcmVhID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgIG1hcmdpblRvcDogOCxcbiAgICBhbGlnblNlbGY6ICdmbGV4LXN0YXJ0JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBoZWlnaHQ6IDIwLFxuICAgIGdhcDogOCxcbiAgICB2aXNpYmlsaXR5OiB0aHVtYnNTaG91bGRTaG93IHx8ICEhZmVlZGJhY2tWYWx1ZSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nLFxuICB9O1xuXG4gIGNvbnN0IGljb25CdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgY29sb3I6ICcjOWNhM2FmJyxcbiAgICBkaXNwbGF5OiB0aHVtYnNTaG91bGRTaG93ID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9O1xuXG4gIGNvbnN0IHNlcGFyYXRvclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHdpZHRoOiAxLFxuICAgIGhlaWdodDogMTQsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2U1ZTdlYicsXG4gICAgZGlzcGxheTogdGh1bWJzU2hvdWxkU2hvdyA/ICdibG9jaycgOiAnbm9uZScsXG4gIH07XG5cbiAgY29uc3Qgc2luZ2xlSWNvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGNvbG9yOiAnIzAwMDAwMCcsXG4gICAgZGlzcGxheTogZmVlZGJhY2tWYWx1ZSA/ICdmbGV4JyA6ICdub25lJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfTtcblxuICBsZXQgd2VsY29tZVRpdGxlID0gd2VsY29tZVRpdGxlUHJvcCB8fCAnJztcbiAgbGV0IHdlbGNvbWVDb250ZW50ID0gJyc7XG4gIFxuICBpZiAoaXNXZWxjb21lTWVzc2FnZSkge1xuICAgIGNvbnN0IG1lc3NhZ2VUZXh0ID0gbWVzc2FnZS50ZXh0O1xuICAgIGlmICghd2VsY29tZVRpdGxlUHJvcCkge1xuICAgICAgY29uc3QgcGFydHMgPSBtZXNzYWdlVGV4dC5zcGxpdCgvW1xcblxcLiE/XS8pO1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDApIHdlbGNvbWVUaXRsZSA9IChwYXJ0c1swXSB8fCAnJykudHJpbSgpO1xuICAgICAgd2VsY29tZUNvbnRlbnQgPSBtZXNzYWdlVGV4dC5zdWJzdHJpbmcod2VsY29tZVRpdGxlLmxlbmd0aCkudHJpbSgpO1xuICAgICAgd2VsY29tZUNvbnRlbnQgPSB3ZWxjb21lQ29udGVudC5yZXBsYWNlKC9eWywuIT9cXHNdKy8sICcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2VsY29tZUNvbnRlbnQgPSBtZXNzYWdlVGV4dDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXNzYWdlTGluZXMgPSAhaXNXZWxjb21lTWVzc2FnZSA/IGRpc3BsYXlUZXh0LnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUsIGkpID0+IChcbiAgICA8UmVhY3QuRnJhZ21lbnQga2V5PXtpfT5cbiAgICAgIHtsaW5lfVxuICAgICAge2kgPCBkaXNwbGF5VGV4dC5zcGxpdCgnXFxuJykubGVuZ3RoIC0gMSAmJiA8YnIgLz59XG4gICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgKSkgOiBudWxsO1xuXG4gIC8vIEhhbmRsZSBzcGVjaWFsIG1lc3NhZ2VzIChsaWtlIHRha2VvdmVyIGluZGljYXRvcnMpXG4gIGlmIChpc1NwZWNpYWwpIHtcbiAgICBjb25zdCBzcGVjaWFsTWVzc2FnZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICBtYXJnaW46ICcxNnB4IDAnLFxuICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICB9O1xuXG4gICAgLy8gRGV0ZXJtaW5lIGljb24gYW5kIHN0eWxlIGJhc2VkIG9uIG1lc3NhZ2UgY29udGVudFxuICAgIGxldCBpY29uO1xuICAgIGxldCBiYWNrZ3JvdW5kQ29sb3IgPSAnI0UzRjJGRCc7XG4gICAgbGV0IHRleHRDb2xvciA9ICcjMTk3NkQyJztcbiAgICBcbiAgICBpZiAobWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ29mZmxpbmUnKSB8fCBtZXNzYWdlLnRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnaW5hY3RpdmUnKSkge1xuICAgICAgaWNvbiA9IDxBbGVydENpcmNsZSBzaXplPXsxOH0gLz47XG4gICAgICBiYWNrZ3JvdW5kQ29sb3IgPSAnI0ZGRjNFMCc7XG4gICAgICB0ZXh0Q29sb3IgPSAnI0Y1N0MwMCc7XG4gICAgfSBlbHNlIGlmIChtZXNzYWdlLnRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygndG9vayBvdmVyJykgfHwgbWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3Rha2VvdmVyJykpIHtcbiAgICAgIGljb24gPSA8VXNlclggc2l6ZT17MTh9IC8+O1xuICAgIH0gZWxzZSB7XG4gICAgICBpY29uID0gPFVzZXIgc2l6ZT17MTh9IC8+O1xuICAgIH1cblxuICAgIGNvbnN0IHNwZWNpYWxCdWJibGVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcixcbiAgICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gICAgICBwYWRkaW5nOiAnOHB4IDE2cHgnLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMTZweCcsXG4gICAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgICAgZm9udEZhbWlseSxcbiAgICAgIGZvbnRXZWlnaHQ6ICc1MDAnLFxuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICBnYXA6ICc4cHgnLFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17c3BlY2lhbE1lc3NhZ2VTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e3NwZWNpYWxCdWJibGVTdHlsZX0+XG4gICAgICAgICAge2ljb259XG4gICAgICAgICAge21lc3NhZ2UudGV4dH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgaWYgKGlzV2VsY29tZU1lc3NhZ2UpIHtcbiAgICBjb25zdCBwcmltYXJ5Q29sb3IgPSB0aGVtZT8ucHJpbWFyeUNvbG9yIHx8ICcjNUIzREY1JztcbiAgICBjb25zdCBjaGlwU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogcHJpbWFyeUNvbG9yLFxuICAgICAgY29sb3I6ICcjZmZmJyxcbiAgICAgIHBhZGRpbmc6ICc4cHggMTJweCcsXG4gICAgICBib3JkZXJSYWRpdXM6IDEyLFxuICAgICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICAgIG1hcmdpblJpZ2h0OiA4LFxuICAgICAgbWFyZ2luQm90dG9tOiA4LFxuICAgICAgY3Vyc29yOiBvblF1aWNrUXVlcnkgPyAncG9pbnRlcicgOiAnZGVmYXVsdCcsXG4gICAgICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gICAgfTtcbiAgICBjb25zdCBjaGlwQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICBmbGV4V3JhcDogJ3dyYXAnLFxuICAgICAgbWFyZ2luVG9wOiA4LFxuICAgIH07XG4gICAgY29uc3QgaW1hZ2VCb3hTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIHdpZHRoOiAxMjAsXG4gICAgICBoZWlnaHQ6IDEyMCxcbiAgICAgIGJvcmRlclJhZGl1czogMTIsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZTVlN2ViJyxcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICAgIGZvbnRTaXplOiAxMixcbiAgICAgIGZvbnRXZWlnaHQ6IDYwMCxcbiAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICB9O1xuICAgIGNvbnN0IHdlbGNvbWVUaXRsZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgZm9udFNpemU6ICcyMnB4JyxcbiAgICAgIGZvbnRXZWlnaHQ6IDcwMCxcbiAgICAgIG1hcmdpbjogJzhweCAwIDRweCAwJyxcbiAgICAgIGNvbG9yOiBhZ2VudFRleHRDb2xvcixcbiAgICAgIGZvbnRGYW1pbHksXG4gICAgfTtcbiAgICBjb25zdCB3ZWxjb21lU3VidGl0bGVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgICBjb2xvcjogJyM2YjcyODAnLFxuICAgICAgbWFyZ2luOiAwLFxuICAgICAgZm9udEZhbWlseSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e21lc3NhZ2VDb250YWluZXJTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e21lc3NhZ2VCdWJibGVDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDggfX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAxNiB9fT5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17aW1hZ2VCb3hTdHlsZX0+XG4gICAgICAgICAgICAgICAge3dlbGNvbWVJbWFnZVVybCA/IChcbiAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc3gtYTExeS9hbHQtdGV4dFxuICAgICAgICAgICAgICAgICAgPGltZyBzcmM9e3dlbGNvbWVJbWFnZVVybH0gc3R5bGU9e3sgd2lkdGg6ICcxMDAlJywgaGVpZ2h0OiAnMTAwJScsIG9iamVjdEZpdDogJ2NvdmVyJyB9fSAvPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2PklNQUdFIDEyMCDDlyAxMjAgcHg8L2Rpdj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge3dlbGNvbWVUaXRsZSAmJiA8ZGl2IHN0eWxlPXt3ZWxjb21lVGl0bGVTdHlsZX0+e3dlbGNvbWVUaXRsZX08L2Rpdj59XG4gICAgICAgICAgICB7d2VsY29tZUNvbnRlbnQgJiYgPGRpdiBzdHlsZT17d2VsY29tZVN1YnRpdGxlU3R5bGV9Pnt3ZWxjb21lQ29udGVudH08L2Rpdj59XG4gICAgICAgICAgICB7cG9zc2libGVRdWVyaWVzICYmIHBvc3NpYmxlUXVlcmllcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17Y2hpcENvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgICAgICB7cG9zc2libGVRdWVyaWVzLm1hcCgocSwgaWR4KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8c3BhbiBrZXk9e2lkeH0gc3R5bGU9e2NoaXBTdHlsZX0gb25DbGljaz17KCkgPT4gb25RdWlja1F1ZXJ5ICYmIG9uUXVpY2tRdWVyeShxKX0+XG4gICAgICAgICAgICAgICAgICAgIHtxfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBcbiAgICAgIHN0eWxlPXttZXNzYWdlQ29udGFpbmVyU3R5bGV9XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldElzSG92ZXJlZCh0cnVlKX1cbiAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4geyBpZiAoIWVkaXRpbmdGZWVkYmFjaykgc2V0SXNIb3ZlcmVkKGZhbHNlKTsgfX1cbiAgICA+XG4gICAgICA8ZGl2IHN0eWxlPXtsYWJlbFJvd1N0eWxlfT5cbiAgICAgICAge2lzVXNlciA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17dG9wVGltZXN0YW1wU3R5bGV9Pnt0aW1lc3RhbXB9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlTGFiZWxTdHlsZX0+WW91PC9kaXY+XG4gICAgICAgICAgPC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e21lc3NhZ2VMYWJlbFN0eWxlfT5BZ2VudDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17dG9wVGltZXN0YW1wU3R5bGV9Pnt0aW1lc3RhbXB9PC9kaXY+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cblxuICAgICAge21lc3NhZ2UuYXR0YWNobWVudHMgJiYgbWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgPGRpdiBzdHlsZT17eyAuLi5hdHRhY2htZW50c0NvbnRhaW5lclN0eWxlLCBhbGlnbkl0ZW1zOiBpc1VzZXIgPyAnZmxleC1lbmQnIDogJ2ZsZXgtc3RhcnQnIH19PlxuICAgICAgICAgIHttZXNzYWdlLmF0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgZ2FwOiAnMTJweCcsXG4gICAgICAgICAgICAgICAgcGFkZGluZzogJzEycHggMTRweCcsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBpc1VzZXIgPyAncmdiYSgyNTUsMjU1LDI1NSwwLjEyKScgOiAnI2Y1ZjVmNScsXG4gICAgICAgICAgICAgICAgYm9yZGVyOiBpc1VzZXIgPyAnMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xOCknIDogJzFweCBzb2xpZCAjZTVlNWU1JyxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICcxMnB4JyxcbiAgICAgICAgICAgICAgICBtaW5XaWR0aDogJzI2MHB4JyxcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogJzM2MHB4JyxcbiAgICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHthdHRhY2htZW50LnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJykgPyAoXG4gICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgc3JjPXthdHRhY2htZW50LnVybH1cbiAgICAgICAgICAgICAgICAgIGFsdD17YXR0YWNobWVudC5uYW1lfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IDU2LCBoZWlnaHQ6IDU2LCBib3JkZXJSYWRpdXM6IDgsIG9iamVjdEZpdDogJ2NvdmVyJyB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogNDAsIGhlaWdodDogNDAsIGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgICAgICAgIHtnZXRGaWxlSWNvbihhdHRhY2htZW50LnR5cGUpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250V2VpZ2h0OiA2MDAsIGZvbnRTaXplOiAxNCB9fT57YXR0YWNobWVudC5uYW1lfTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6IDEyLCBvcGFjaXR5OiAwLjggfX0+XG4gICAgICAgICAgICAgICAgICB7YXR0YWNobWVudC50eXBlLmluY2x1ZGVzKCcvJykgPyBhdHRhY2htZW50LnR5cGUuc3BsaXQoJy8nKVsxXS50b1VwcGVyQ2FzZSgpIDogYXR0YWNobWVudC50eXBlfVxuICAgICAgICAgICAgICAgICAge2F0dGFjaG1lbnQuc2l6ZSA/IGAgwrcgJHsoYXR0YWNobWVudC5zaXplIC8gMTAyNCkudG9GaXhlZCgxKX0gS0JgIDogJyd9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAge21lc3NhZ2UudGV4dCAmJiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnOHB4JywgYWxpZ25TZWxmOiBpc1VzZXIgPyAnZmxleC1lbmQnIDogJ2ZsZXgtc3RhcnQnIH19PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgLi4uYnViYmxlU3R5bGUsIHBvc2l0aW9uOiAncmVsYXRpdmUnIH19PlxuICAgICAgICAgICAge21lc3NhZ2VMaW5lc31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7LyogRmVlZGJhY2sgcm93IGJlbG93IGFnZW50IG1lc3NhZ2UgKi99XG4gICAgICB7c2hvd1RodW1ic0FyZWEgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXtmZWVkYmFja1Jvd1N0eWxlfT5cbiAgICAgICAgICB7ZmVlZGJhY2tWYWx1ZSA/IChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3NpbmdsZUljb25TdHlsZX0+XG4gICAgICAgICAgICAgIHtmZWVkYmFja1ZhbHVlID09PSAnZ29vZCcgPyAoXG4gICAgICAgICAgICAgICAgPFRodW1ic1VwIHNpemU9ezE4fSAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxUaHVtYnNEb3duIHNpemU9ezE4fSAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17aWNvbkJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgICAgIHRpdGxlPVwiVGh1bWJzIHVwXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5tZXNzYWdlX2lkICYmIG9uRmVlZGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgb25GZWVkYmFjayhtZXNzYWdlLm1lc3NhZ2VfaWQsICdnb29kJyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxUaHVtYnNVcCBzaXplPXsxOH0gLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3NlcGFyYXRvclN0eWxlfSAvPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e2ljb25CdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICB0aXRsZT1cIlRodW1icyBkb3duXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5tZXNzYWdlX2lkICYmIG9uRmVlZGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgb25GZWVkYmFjayhtZXNzYWdlLm1lc3NhZ2VfaWQsICdiYWQnKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFRodW1ic0Rvd24gc2l6ZT17MTh9IC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufTtcbiJdfQ==