genassist-chat-react 1.0.15 → 1.0.16

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,5 +1,5 @@
1
1
  import React from 'react';
2
- import { ChatMessage, ScheduleItem } from '../types';
2
+ import { ChatMessage, ScheduleItem, Translations } from '../types';
3
3
  export { AttachmentPreview } from './AttachmentPreview';
4
4
  interface ChatMessageProps {
5
5
  message: ChatMessage;
@@ -25,5 +25,8 @@ interface ChatMessageProps {
25
25
  isLastMessage?: boolean;
26
26
  onQuickAction?: (text: string) => void;
27
27
  onScheduleConfirm?: (schedule: ScheduleItem) => void;
28
+ translations?: Translations;
29
+ language?: string;
30
+ agentName?: string;
28
31
  }
29
32
  export declare const ChatMessageComponent: React.FC<ChatMessageProps>;
@@ -17,9 +17,16 @@ import { formatTimestamp } from '../utils/time';
17
17
  import { getFileIcon } from './FileTypeIcon';
18
18
  import { InteractiveContent } from './InteractiveContent';
19
19
  import { parseInteractiveContentBlocks } from '../utils/interactiveContent';
20
+ import { defaultTranslations, getTranslationString, mergeTranslations } from '../utils/i18n';
20
21
  export { AttachmentPreview } from './AttachmentPreview';
21
22
  export var ChatMessageComponent = function (_a) {
22
- var message = _a.message, theme = _a.theme, onPlayAudio = _a.onPlayAudio, _b = _a.isFirstMessage, isFirstMessage = _b === void 0 ? false : _b, _c = _a.isPrevSameSpeaker, isPrevSameSpeaker = _c === void 0 ? false : _c, onFeedback = _a.onFeedback, welcomeImageUrl = _a.welcomeImageUrl, welcomeTitleProp = _a.welcomeTitle, possibleQueries = _a.possibleQueries, onQuickQuery = _a.onQuickQuery, _d = _a.isLastMessage, isLastMessage = _d === void 0 ? false : _d, onQuickAction = _a.onQuickAction, onScheduleConfirm = _a.onScheduleConfirm;
23
+ var message = _a.message, theme = _a.theme, onPlayAudio = _a.onPlayAudio, _b = _a.isFirstMessage, isFirstMessage = _b === void 0 ? false : _b, _c = _a.isPrevSameSpeaker, isPrevSameSpeaker = _c === void 0 ? false : _c, onFeedback = _a.onFeedback, welcomeImageUrl = _a.welcomeImageUrl, welcomeTitleProp = _a.welcomeTitle, possibleQueries = _a.possibleQueries, onQuickQuery = _a.onQuickQuery, _d = _a.isLastMessage, isLastMessage = _d === void 0 ? false : _d, onQuickAction = _a.onQuickAction, onScheduleConfirm = _a.onScheduleConfirm, customTranslations = _a.translations, language = _a.language, agentName = _a.agentName;
24
+ // Merge translations with defaults
25
+ var translations = React.useMemo(function () { return mergeTranslations(customTranslations, defaultTranslations); }, [customTranslations]);
26
+ // Translation helper
27
+ var t = function (key, fallback) {
28
+ return getTranslationString(key, translations, fallback);
29
+ };
23
30
  var isUser = message.speaker === 'customer';
24
31
  var isSpecial = message.speaker === 'special';
25
32
  var isWelcomeMessage = !isUser && !isSpecial && isFirstMessage;
@@ -27,7 +34,15 @@ export var ChatMessageComponent = function (_a) {
27
34
  var editingFeedback = React.useState(false)[0];
28
35
  var displayText = React.useState(message.text)[0];
29
36
  var contentBlocks = React.useMemo(function () { return parseInteractiveContentBlocks(displayText); }, [displayText]);
30
- var timestamp = formatTimestamp(message.create_time);
37
+ // Format timestamp with translations
38
+ var timestamp = React.useMemo(function () {
39
+ var timeTranslations = (translations === null || translations === void 0 ? void 0 : translations.time) ? {
40
+ justNow: translations.time.justNow,
41
+ today: translations.time.today,
42
+ yesterday: translations.time.yesterday,
43
+ } : undefined;
44
+ return formatTimestamp(message.create_time, language, timeTranslations);
45
+ }, [message.create_time, language, translations]);
31
46
  // Fast typewriter effect for newly displayed agent messages, fix later
32
47
  // React.useEffect(() => {
33
48
  // if (!isUser && !isSpecial && enableTypewriter && message.text !== lastAnimatedRef.current) {
@@ -223,7 +238,7 @@ export var ChatMessageComponent = function (_a) {
223
238
  return (_jsx("div", { style: messageContainerStyle, children: _jsx("div", { style: __assign({}, messageBubbleContainerStyle), children: _jsx(WelcomeCard, { theme: theme, imageUrl: welcomeImageUrl, title: welcomeTitle, content: welcomeContent, possibleQueries: possibleQueries, onQuickQuery: onQuickQuery }) }) }));
224
239
  }
225
240
  return (_jsxs("div", { style: messageContainerStyle, onMouseEnter: function () { return setIsHovered(true); }, onMouseLeave: function () { if (!editingFeedback)
226
- setIsHovered(false); }, children: [_jsx("div", { style: labelRowStyle, children: isUser ? (_jsxs(_Fragment, { children: [_jsx("div", { style: topTimestampStyle, children: timestamp }), _jsx("div", { style: messageLabelStyle, children: "You" })] })) : (_jsxs(_Fragment, { children: [_jsx("div", { style: messageLabelStyle, children: "Agent" }), _jsx("div", { style: topTimestampStyle, children: timestamp })] })) }), message.attachments && message.attachments.length > 0 && (_jsx("div", { style: __assign(__assign({}, attachmentsContainerStyle), { alignItems: isUser ? 'flex-end' : 'flex-start' }), children: message.attachments.map(function (attachment, index) { return (_jsxs("div", { style: {
241
+ setIsHovered(false); }, children: [_jsx("div", { style: labelRowStyle, children: isUser ? (_jsxs(_Fragment, { children: [_jsx("div", { style: topTimestampStyle, children: timestamp }), _jsx("div", { style: messageLabelStyle, children: t('labels.you') })] })) : (_jsxs(_Fragment, { children: [_jsx("div", { style: messageLabelStyle, children: agentName || t('labels.agent') }), _jsx("div", { style: topTimestampStyle, children: timestamp })] })) }), message.attachments && message.attachments.length > 0 && (_jsx("div", { style: __assign(__assign({}, attachmentsContainerStyle), { alignItems: isUser ? 'flex-end' : 'flex-start' }), children: message.attachments.map(function (attachment, index) { return (_jsxs("div", { style: {
227
242
  display: 'flex',
228
243
  alignItems: 'center',
229
244
  gap: '12px',
@@ -234,14 +249,24 @@ export var ChatMessageComponent = function (_a) {
234
249
  minWidth: '260px',
235
250
  maxWidth: '360px',
236
251
  pointerEvents: 'none',
237
- }, children: [attachment.type.startsWith('image/') ? (_jsx("img", { src: attachment.url, alt: attachment.name, style: { width: 56, height: 56, borderRadius: 8, objectFit: 'cover' } })) : (_jsx("div", { style: { width: 40, height: 40, display: 'flex', alignItems: 'center', justifyContent: 'center' }, children: getFileIcon(attachment.type) })), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx("div", { style: { fontWeight: 600, fontSize: 14 }, children: attachment.name }), _jsxs("div", { style: { fontSize: 12, opacity: 0.8 }, children: [attachment.type.includes('/') ? attachment.type.split('/')[1].toUpperCase() : attachment.type, attachment.size ? " \u00B7 ".concat((attachment.size / 1024).toFixed(1), " KB") : ''] })] })] }, index)); }) })), message.text && (_jsx("div", { style: { display: 'flex', alignItems: 'center', gap: '8px', alignSelf: isUser ? 'flex-end' : 'flex-start' }, children: _jsx("div", { style: __assign(__assign({}, bubbleStyle), { position: 'relative' }), children: _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 12 }, children: _jsx(InteractiveContent, { blocks: contentBlocks, primaryColor: primaryColor, textColor: bubbleTextColor, isActionable: !isUser && isLastMessage, onQuickAction: onQuickAction, onScheduleConfirm: onScheduleConfirm }) }) }) })), showThumbsArea && (_jsx("div", { style: feedbackRowStyle, children: feedbackValue ? (_jsx("div", { style: singleIconStyle, children: feedbackValue === 'good' ? (_jsx(ThumbsUp, { size: 18 })) : (_jsx(ThumbsDown, { size: 18 })) })) : (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", style: iconButtonStyle, title: "Thumbs up", onClick: function () {
238
- if (message.message_id && onFeedback) {
239
- onFeedback(message.message_id, 'good');
252
+ }, children: [attachment.type.startsWith('image/') ? (_jsx("img", { src: attachment.url, alt: attachment.name, style: { width: 56, height: 56, borderRadius: 8, objectFit: 'cover' } })) : (_jsx("div", { style: { width: 40, height: 40, display: 'flex', alignItems: 'center', justifyContent: 'center' }, children: getFileIcon(attachment.type) })), _jsxs("div", { style: { display: 'flex', flexDirection: 'column' }, children: [_jsx("div", { style: { fontWeight: 600, fontSize: 14 }, children: attachment.name }), _jsxs("div", { style: { fontSize: 12, opacity: 0.8 }, children: [attachment.type.includes('/') ? attachment.type.split('/')[1].toUpperCase() : attachment.type, attachment.size ? " \u00B7 ".concat((attachment.size / 1024).toFixed(1), " KB") : ''] })] })] }, index)); }) })), message.text && (_jsx("div", { style: { display: 'flex', alignItems: 'center', gap: '8px', alignSelf: isUser ? 'flex-end' : 'flex-start' }, children: _jsx("div", { style: __assign(__assign({}, bubbleStyle), { position: 'relative' }), children: _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 12 }, children: _jsx(InteractiveContent, { blocks: contentBlocks, primaryColor: primaryColor, textColor: bubbleTextColor, isActionable: !isUser && isLastMessage, onQuickAction: onQuickAction, onScheduleConfirm: onScheduleConfirm }) }) }) })), showThumbsArea && (_jsx("div", { style: feedbackRowStyle, children: feedbackValue ? (_jsx("div", { style: singleIconStyle, children: feedbackValue === 'good' ? (_jsx(ThumbsUp, { size: 18 })) : (_jsx(ThumbsDown, { size: 18 })) })) : (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", style: iconButtonStyle, title: t('feedback.thumbsUp'), onClick: function () {
253
+ // Use message_id from socket, fallback to id if message_id doesn't exist
254
+ var msgId = message.message_id || message.id;
255
+ if (msgId && onFeedback) {
256
+ onFeedback(msgId, 'good');
257
+ }
258
+ else {
259
+ // ignore
260
+ }
261
+ }, children: _jsx(ThumbsUp, { size: 18 }) }), _jsx("div", { style: separatorStyle }), _jsx("button", { type: "button", style: iconButtonStyle, title: t('feedback.thumbsDown'), onClick: function () {
262
+ // Use message_id from socket, fallback to id if message_id doesn't exist
263
+ var msgId = message.message_id || message.id;
264
+ if (msgId && onFeedback) {
265
+ onFeedback(msgId, 'bad');
240
266
  }
241
- }, children: _jsx(ThumbsUp, { size: 18 }) }), _jsx("div", { style: separatorStyle }), _jsx("button", { type: "button", style: iconButtonStyle, title: "Thumbs down", onClick: function () {
242
- if (message.message_id && onFeedback) {
243
- onFeedback(message.message_id, 'bad');
267
+ else {
268
+ // ignore
244
269
  }
245
270
  }, children: _jsx(ThumbsDown, { size: 18 }) })] })) }))] }));
246
271
  };
247
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhdE1lc3NhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9DaGF0TWVzc2FnZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUE0QnhELE1BQU0sQ0FBQyxJQUFNLG9CQUFvQixHQUErQixVQUFDLEVBY2hFO1FBYkMsT0FBTyxhQUFBLEVBQ1AsS0FBSyxXQUFBLEVBQ0wsV0FBVyxpQkFBQSxFQUNYLHNCQUFzQixFQUF0QixjQUFjLG1CQUFHLEtBQUssS0FBQSxFQUN0Qix5QkFBeUIsRUFBekIsaUJBQWlCLG1CQUFHLEtBQUssS0FBQSxFQUN6QixVQUFVLGdCQUFBLEVBQ1YsZUFBZSxxQkFBQSxFQUNELGdCQUFnQixrQkFBQSxFQUM5QixlQUFlLHFCQUFBLEVBQ2YsWUFBWSxrQkFBQSxFQUNaLHFCQUFxQixFQUFyQixhQUFhLG1CQUFHLEtBQUssS0FBQSxFQUNyQixhQUFhLG1CQUFBLEVBQ2IsaUJBQWlCLHVCQUFBO0lBRWpCLElBQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDO0lBQzlDLElB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QUN0QixLQUFLLEVBQUMsYUFBYSxFQUNuQixPQUFPLEVBQUU7Z0NBQ1AsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLFVBQVUsRUFBRSxDQUFDO29DQUNyQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQ0FDeEMsQ0FBQzs0QkFDSCxDQUFDLFlBRUQsS0FBQyxVQUFVLElBQUMsSUFBSSxFQUFFLEVBQUUsR0FBSSxHQUNqQixJQUNSLENBQ0osR0FDRyxDQUNQLElBQ0csQ0FDUCxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFdlbGNvbWVDYXJkIH0gZnJvbSAnLi9XZWxjb21lQ2FyZCc7XG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgU2NoZWR1bGVJdGVtIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgVXNlciwgVXNlclgsIEFsZXJ0Q2lyY2xlLCBUaHVtYnNVcCwgVGh1bWJzRG93biB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyBmb3JtYXRUaW1lc3RhbXAgfSBmcm9tICcuLi91dGlscy90aW1lJztcbmltcG9ydCB7IGdldEZpbGVJY29uIH0gZnJvbSAnLi9GaWxlVHlwZUljb24nO1xuaW1wb3J0IHsgSW50ZXJhY3RpdmVDb250ZW50IH0gZnJvbSAnLi9JbnRlcmFjdGl2ZUNvbnRlbnQnO1xuaW1wb3J0IHsgcGFyc2VJbnRlcmFjdGl2ZUNvbnRlbnRCbG9ja3MgfSBmcm9tICcuLi91dGlscy9pbnRlcmFjdGl2ZUNvbnRlbnQnO1xuZXhwb3J0IHsgQXR0YWNobWVudFByZXZpZXcgfSBmcm9tICcuL0F0dGFjaG1lbnRQcmV2aWV3JztcblxuaW50ZXJmYWNlIENoYXRNZXNzYWdlUHJvcHMge1xuICBtZXNzYWdlOiBDaGF0TWVzc2FnZTtcbiAgdGhlbWU/OiB7XG4gICAgcHJpbWFyeUNvbG9yPzogc3RyaW5nO1xuICAgIHNlY29uZGFyeUNvbG9yPzogc3RyaW5nO1xuICAgIGZvbnRGYW1pbHk/OiBzdHJpbmc7XG4gICAgZm9udFNpemU/OiBzdHJpbmc7XG4gICAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICAgIHRleHRDb2xvcj86IHN0cmluZztcbiAgfTtcbiAgb25QbGF5QXVkaW8/OiAodGV4dDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBpc1BsYXlpbmdBdWRpbz86IGJvb2xlYW47XG4gIGlzRmlyc3RNZXNzYWdlPzogYm9vbGVhbjtcbiAgaXNOZXh0U2FtZVNwZWFrZXI/OiBib29sZWFuO1xuICBpc1ByZXZTYW1lU3BlYWtlcj86IGJvb2xlYW47XG4gIG9uRmVlZGJhY2s/OiAobWVzc2FnZUlkOiBzdHJpbmcsIHZhbHVlOiAnZ29vZCcgfCAnYmFkJykgPT4gdm9pZDtcbiAgZW5hYmxlVHlwZXdyaXRlcj86IGJvb2xlYW47XG4gIHdlbGNvbWVJbWFnZVVybD86IHN0cmluZztcbiAgd2VsY29tZVRpdGxlPzogc3RyaW5nO1xuICBwb3NzaWJsZVF1ZXJpZXM/OiBzdHJpbmdbXTtcbiAgb25RdWlja1F1ZXJ5PzogKHF1ZXJ5OiBzdHJpbmcpID0+IHZvaWQ7XG4gIGlzTGFzdE1lc3NhZ2U/OiBib29sZWFuO1xuICBvblF1aWNrQWN0aW9uPzogKHRleHQ6IHN0cmluZykgPT4gdm9pZDtcbiAgb25TY2hlZHVsZUNvbmZpcm0/OiAoc2NoZWR1bGU6IFNjaGVkdWxlSXRlbSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRNZXNzYWdlQ29tcG9uZW50OiBSZWFjdC5GQzxDaGF0TWVzc2FnZVByb3BzPiA9ICh7XG4gIG1lc3NhZ2UsXG4gIHRoZW1lLFxuICBvblBsYXlBdWRpbyxcbiAgaXNGaXJzdE1lc3NhZ2UgPSBmYWxzZSxcbiAgaXNQcmV2U2FtZVNwZWFrZXIgPSBmYWxzZSxcbiAgb25GZWVkYmFjayxcbiAgd2VsY29tZUltYWdlVXJsLFxuICB3ZWxjb21lVGl0bGU6IHdlbGNvbWVUaXRsZVByb3AsXG4gIHBvc3NpYmxlUXVlcmllcyxcbiAgb25RdWlja1F1ZXJ5LFxuICBpc0xhc3RNZXNzYWdlID0gZmFsc2UsXG4gIG9uUXVpY2tBY3Rpb24sXG4gIG9uU2NoZWR1bGVDb25maXJtLFxufSkgPT4ge1xuICBjb25zdCBpc1VzZXIgPSBtZXNzYWdlLnNwZWFrZXIgPT09ICdjdXN0b21lcic7XG4gIGNvbnN0IGlzU3BlY2lhbCA9IG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ3NwZWNpYWwnO1xuICBjb25zdCBpc1dlbGNvbWVNZXNzYWdlID0gIWlzVXNlciAmJiAhaXNTcGVjaWFsICYmIGlzRmlyc3RNZXNzYWdlO1xuICBjb25zdCBbaXNIb3ZlcmVkLCBzZXRJc0hvdmVyZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZWRpdGluZ0ZlZWRiYWNrXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Rpc3BsYXlUZXh0XSA9IFJlYWN0LnVzZVN0YXRlPHN0cmluZz4obWVzc2FnZS50ZXh0KTtcbiAgY29uc3QgY29udGVudEJsb2NrcyA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gcGFyc2VJbnRlcmFjdGl2ZUNvbnRlbnRCbG9ja3MoZGlzcGxheVRleHQpLFxuICAgIFtkaXNwbGF5VGV4dF1cbiAgKTtcblxuICBjb25zdCB0aW1lc3RhbXAgPSBmb3JtYXRUaW1lc3RhbXAobWVzc2FnZS5jcmVhdGVfdGltZSk7XG5cbiAgLy8gRmFzdCB0eXBld3JpdGVyIGVmZmVjdCBmb3IgbmV3bHkgZGlzcGxheWVkIGFnZW50IG1lc3NhZ2VzLCBmaXggbGF0ZXJcbiAgLy8gUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgLy8gICBpZiAoIWlzVXNlciAmJiAhaXNTcGVjaWFsICYmIGVuYWJsZVR5cGV3cml0ZXIgJiYgbWVzc2FnZS50ZXh0ICE9PSBsYXN0QW5pbWF0ZWRSZWYuY3VycmVudCkge1xuICAvLyAgICAgbGFzdEFuaW1hdGVkUmVmLmN1cnJlbnQgPSBtZXNzYWdlLnRleHQ7XG4gIC8vICAgICBzZXRJc1R5cGV3cml0aW5nKHRydWUpO1xuICAvLyAgICAgc2V0RGlzcGxheVRleHQoJycpO1xuICAvLyAgICAgbGV0IGkgPSAwO1xuICAvLyAgICAgY29uc3QgdG90YWwgPSBtZXNzYWdlLnRleHQubGVuZ3RoO1xuICAvLyAgICAgY29uc3QgdGlja01zID0gMTY7XG4gIC8vICAgICBjb25zdCB0YXJnZXRNcyA9IDEyMDA7XG4gIC8vICAgICBjb25zdCBjaGFyc1BlclRpY2sgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHRvdGFsIC8gKHRhcmdldE1zIC8gdGlja01zKSkpO1xuICAvLyAgICAgY29uc3QgaW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAvLyAgICAgICBpICs9IGNoYXJzUGVyVGljaztcbiAgLy8gICAgICAgaWYgKGkgPj0gdG90YWwpIHtcbiAgLy8gICAgICAgICBzZXREaXNwbGF5VGV4dChtZXNzYWdlLnRleHQpO1xuICAvLyAgICAgICAgIHNldElzVHlwZXdyaXRpbmcoZmFsc2UpO1xuICAvLyAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKGludGVydmFsKTtcbiAgLy8gICAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgICBzZXREaXNwbGF5VGV4dChtZXNzYWdlLnRleHQuc2xpY2UoMCwgaSkpO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9LCB0aWNrTXMpO1xuICAvLyAgICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhckludGVydmFsKGludGVydmFsKTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgc2V0RGlzcGxheVRleHQobWVzc2FnZS50ZXh0KTtcbiAgLy8gICAgIHNldElzVHlwZXdyaXRpbmcoZmFsc2UpO1xuICAvLyAgIH1cbiAgLy8gfSwgW21lc3NhZ2UudGV4dCwgZW5hYmxlVHlwZXdyaXRlciwgaXNVc2VyLCBpc1NwZWNpYWxdKTtcblxuICAvLyBVcGRhdGVkIGRlc2lnbiBjb2xvcnNcbiAgY29uc3QgdXNlckJ1YmJsZUJnQ29sb3IgPSAnI0U0RTRFNyc7IC8vIGdyZXkgZm9yIHVzZXJcbiAgY29uc3QgdXNlclRleHRDb2xvciA9ICcjMDAwMDAwJztcbiAgY29uc3QgYWdlbnRUZXh0Q29sb3IgPSB0aGVtZT8udGV4dENvbG9yIHx8ICcjMDAwMDAwJztcbiAgY29uc3QgcHJpbWFyeUNvbG9yID0gdGhlbWU/LnByaW1hcnlDb2xvciB8fCAnIzRmNDZlNSc7XG4gIGNvbnN0IGZvbnRGYW1pbHkgPSB0aGVtZT8uZm9udEZhbWlseSB8fCAnUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZic7XG4gIGNvbnN0IGZvbnRTaXplID0gdGhlbWU/LmZvbnRTaXplIHx8ICcxNXB4JztcbiAgY29uc3QgYnViYmxlVGV4dENvbG9yID0gaXNVc2VyID8gdXNlclRleHRDb2xvciA6IGFnZW50VGV4dENvbG9yO1xuXG4gIGNvbnN0IG1lc3NhZ2VDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBtYXJnaW5Cb3R0b206IGlzUHJldlNhbWVTcGVha2VyID8gJzhweCcgOiAnOHB4JyxcbiAgICBtYXJnaW5Ub3A6IGlzUHJldlNhbWVTcGVha2VyID8gJzBweCcgOiAnMTZweCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgYWxpZ25JdGVtczogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyxcbiAgfTtcblxuICBjb25zdCBsYWJlbFJvd1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6IGlzUHJldlNhbWVTcGVha2VyID8gJ25vbmUnIDogJ2ZsZXgnLFxuICAgIHdpZHRoOiAnODAlJyxcbiAgICBqdXN0aWZ5Q29udGVudDogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyxcbiAgICBhbGlnbkl0ZW1zOiAnYmFzZWxpbmUnLFxuICAgIGdhcDogJzhweCcsXG4gICAgbWFyZ2luQm90dG9tOiAnNnB4JyxcbiAgfTtcblxuICBjb25zdCBtZXNzYWdlTGFiZWxTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgIGNvbG9yOiAnIzAwMDAwMCcsXG4gICAgbGluZUhlaWdodDogMSxcbiAgICBmb250V2VpZ2h0OiA2MDAsXG4gIH07XG5cbiAgY29uc3QgdG9wVGltZXN0YW1wU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxM3B4JyxcbiAgICBjb2xvcjogJyM2YjcyODAnLFxuICAgIGxpbmVIZWlnaHQ6IDEsXG4gIH07XG5cbiAgY29uc3QgbWVzc2FnZUJ1YmJsZUNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBtYXhXaWR0aDogJzgwJScsXG4gIH07XG5cbiAgLy8gT25seSB1c2VyJ3MgbWVzc2FnZXMgc2hvdWxkIHJlbmRlciBhcyBidWJibGVzLlxuICAvLyBBZ2VudCBtZXNzYWdlcyBhcmUgcGxhaW4gdGV4dCB3aXRoIG5vIGNvbnRhaW5lciBiYWNrZ3JvdW5kLlxuICBjb25zdCBidWJibGVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IGlzVXNlclxuICAgID8ge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHVzZXJCdWJibGVCZ0NvbG9yLFxuICAgICAgICBjb2xvcjogdXNlclRleHRDb2xvcixcbiAgICAgICAgcGFkZGluZzogJzEycHggMTZweCcsXG4gICAgICAgIGJvcmRlclJhZGl1czogJzEycHggMCAxMnB4IDEycHgnLFxuICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgd29yZEJyZWFrOiAnYnJlYWstd29yZCcsXG4gICAgICAgIGxpbmVIZWlnaHQ6IDEuNCxcbiAgICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgIGJveFNoYWRvdzogJzAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDgpJ1xuICAgICAgfVxuICAgIDoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIGNvbG9yOiBhZ2VudFRleHRDb2xvcixcbiAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiAwLFxuICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgd29yZEJyZWFrOiAnYnJlYWstd29yZCcsXG4gICAgICAgIGxpbmVIZWlnaHQ6IDEuNCxcbiAgICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgIGJveFNoYWRvdzogJ25vbmUnXG4gICAgICB9O1xuXG4gIGNvbnN0IGF0dGFjaG1lbnRzQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgbWFyZ2luVG9wOiAnOHB4JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgfTtcblxuICAvLyBGZWVkYmFjayBzdGF0ZSBhbmQgVUkgKHRodW1icyB1cC9kb3duKSBmb3IgYWdlbnQgbWVzc2FnZXNcbiAgY29uc3QgZmVlZGJhY2tWYWx1ZSA9IChtZXNzYWdlLmZlZWRiYWNrICYmIG1lc3NhZ2UuZmVlZGJhY2subGVuZ3RoID4gMClcbiAgICA/IG1lc3NhZ2UuZmVlZGJhY2tbbWVzc2FnZS5mZWVkYmFjay5sZW5ndGggLSAxXS5mZWVkYmFja1xuICAgIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHRodW1ic1Nob3VsZFNob3cgPSAhaXNVc2VyICYmICFpc1NwZWNpYWwgJiYgaXNIb3ZlcmVkICYmICFmZWVkYmFja1ZhbHVlO1xuICBjb25zdCBzaG93VGh1bWJzQXJlYSA9ICFpc1VzZXIgJiYgIWlzU3BlY2lhbDsgLy8gT25seSBhZ2VudHMgaGF2ZSB0aHVtYnMgYXJlYVxuXG4gIGNvbnN0IGZlZWRiYWNrUm93U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogc2hvd1RodW1ic0FyZWEgPyAnZmxleCcgOiAnbm9uZScsXG4gICAgbWFyZ2luVG9wOiA4LFxuICAgIGFsaWduU2VsZjogJ2ZsZXgtc3RhcnQnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGhlaWdodDogMjAsXG4gICAgZ2FwOiA4LFxuICAgIHZpc2liaWxpdHk6IHRodW1ic1Nob3VsZFNob3cgfHwgISFmZWVkYmFja1ZhbHVlID8gJ3Zpc2libGUnIDogJ2hpZGRlbicsXG4gIH07XG5cbiAgY29uc3QgaWNvbkJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgcGFkZGluZzogMCxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBjb2xvcjogJyM5Y2EzYWYnLFxuICAgIGRpc3BsYXk6IHRodW1ic1Nob3VsZFNob3cgPyAnZmxleCcgOiAnbm9uZScsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH07XG5cbiAgY29uc3Qgc2VwYXJhdG9yU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgd2lkdGg6IDEsXG4gICAgaGVpZ2h0OiAxNCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZTVlN2ViJyxcbiAgICBkaXNwbGF5OiB0aHVtYnNTaG91bGRTaG93ID8gJ2Jsb2NrJyA6ICdub25lJyxcbiAgfTtcblxuICBjb25zdCBzaW5nbGVJY29uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgY29sb3I6ICcjMDAwMDAwJyxcbiAgICBkaXNwbGF5OiBmZWVkYmFja1ZhbHVlID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9O1xuXG4gIGxldCB3ZWxjb21lVGl0bGUgPSB3ZWxjb21lVGl0bGVQcm9wIHx8ICcnO1xuICBsZXQgd2VsY29tZUNvbnRlbnQgPSAnJztcbiAgXG4gIGlmIChpc1dlbGNvbWVNZXNzYWdlKSB7XG4gICAgY29uc3QgbWVzc2FnZVRleHQgPSBtZXNzYWdlLnRleHQ7XG4gICAgaWYgKCF3ZWxjb21lVGl0bGVQcm9wKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IG1lc3NhZ2VUZXh0LnNwbGl0KC9bXFxuXFwuIT9dLyk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID4gMCkgd2VsY29tZVRpdGxlID0gKHBhcnRzWzBdIHx8ICcnKS50cmltKCk7XG4gICAgICB3ZWxjb21lQ29udGVudCA9IG1lc3NhZ2VUZXh0LnN1YnN0cmluZyh3ZWxjb21lVGl0bGUubGVuZ3RoKS50cmltKCk7XG4gICAgICB3ZWxjb21lQ29udGVudCA9IHdlbGNvbWVDb250ZW50LnJlcGxhY2UoL15bLC4hP1xcc10rLywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3ZWxjb21lQ29udGVudCA9IG1lc3NhZ2VUZXh0O1xuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBzcGVjaWFsIG1lc3NhZ2VzIChsaWtlIHRha2VvdmVyIGluZGljYXRvcnMpXG4gIGlmIChpc1NwZWNpYWwpIHtcbiAgICBjb25zdCBzcGVjaWFsTWVzc2FnZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICBtYXJnaW46ICcxNnB4IDAnLFxuICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICB9O1xuXG4gICAgLy8gRGV0ZXJtaW5lIGljb24gYW5kIHN0eWxlIGJhc2VkIG9uIG1lc3NhZ2UgY29udGVudFxuICAgIGxldCBpY29uO1xuICAgIGxldCBiYWNrZ3JvdW5kQ29sb3IgPSAnI0UzRjJGRCc7XG4gICAgbGV0IHRleHRDb2xvciA9ICcjMTk3NkQyJztcbiAgICBcbiAgICBpZiAobWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ29mZmxpbmUnKSB8fCBtZXNzYWdlLnRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnaW5hY3RpdmUnKSkge1xuICAgICAgaWNvbiA9IDxBbGVydENpcmNsZSBzaXplPXsxOH0gLz47XG4gICAgICBiYWNrZ3JvdW5kQ29sb3IgPSAnI0ZGRjNFMCc7XG4gICAgICB0ZXh0Q29sb3IgPSAnI0Y1N0MwMCc7XG4gICAgfSBlbHNlIGlmIChtZXNzYWdlLnRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygndG9vayBvdmVyJykgfHwgbWVzc2FnZS50ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3Rha2VvdmVyJykpIHtcbiAgICAgIGljb24gPSA8VXNlclggc2l6ZT17MTh9IC8+O1xuICAgIH0gZWxzZSB7XG4gICAgICBpY29uID0gPFVzZXIgc2l6ZT17MTh9IC8+O1xuICAgIH1cblxuICAgIGNvbnN0IHNwZWNpYWxCdWJibGVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcixcbiAgICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gICAgICBwYWRkaW5nOiAnOHB4IDE2cHgnLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMTZweCcsXG4gICAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgICAgZm9udEZhbWlseSxcbiAgICAgIGZvbnRXZWlnaHQ6ICc1MDAnLFxuICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICBnYXA6ICc4cHgnLFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17c3BlY2lhbE1lc3NhZ2VTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e3NwZWNpYWxCdWJibGVTdHlsZX0+XG4gICAgICAgICAge2ljb259XG4gICAgICAgICAge21lc3NhZ2UudGV4dH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgaWYgKGlzV2VsY29tZU1lc3NhZ2UpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBzdHlsZT17bWVzc2FnZUNvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgPGRpdiBzdHlsZT17eyAuLi5tZXNzYWdlQnViYmxlQ29udGFpbmVyU3R5bGUgfX0+XG4gICAgICAgICAgPFdlbGNvbWVDYXJkXG4gICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICBpbWFnZVVybD17d2VsY29tZUltYWdlVXJsfVxuICAgICAgICAgICAgdGl0bGU9e3dlbGNvbWVUaXRsZX1cbiAgICAgICAgICAgIGNvbnRlbnQ9e3dlbGNvbWVDb250ZW50fVxuICAgICAgICAgICAgcG9zc2libGVRdWVyaWVzPXtwb3NzaWJsZVF1ZXJpZXN9XG4gICAgICAgICAgICBvblF1aWNrUXVlcnk9e29uUXVpY2tRdWVyeX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgXG4gICAgICBzdHlsZT17bWVzc2FnZUNvbnRhaW5lclN0eWxlfVxuICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRJc0hvdmVyZWQodHJ1ZSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHsgaWYgKCFlZGl0aW5nRmVlZGJhY2spIHNldElzSG92ZXJlZChmYWxzZSk7IH19XG4gICAgPlxuICAgICAgPGRpdiBzdHlsZT17bGFiZWxSb3dTdHlsZX0+XG4gICAgICAgIHtpc1VzZXIgPyAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3RvcFRpbWVzdGFtcFN0eWxlfT57dGltZXN0YW1wfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17bWVzc2FnZUxhYmVsU3R5bGV9PllvdTwvZGl2PlxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlTGFiZWxTdHlsZX0+QWdlbnQ8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3RvcFRpbWVzdGFtcFN0eWxlfT57dGltZXN0YW1wfTwvZGl2PlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHttZXNzYWdlLmF0dGFjaG1lbnRzICYmIG1lc3NhZ2UuYXR0YWNobWVudHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgLi4uYXR0YWNobWVudHNDb250YWluZXJTdHlsZSwgYWxpZ25JdGVtczogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyB9fT5cbiAgICAgICAgICB7bWVzc2FnZS5hdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGdhcDogJzEycHgnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6ICcxMnB4IDE0cHgnLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogaXNVc2VyID8gJ3JnYmEoMjU1LDI1NSwyNTUsMC4xMiknIDogJyNmNWY1ZjUnLFxuICAgICAgICAgICAgICAgIGJvcmRlcjogaXNVc2VyID8gJzFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTgpJyA6ICcxcHggc29saWQgI2U1ZTVlNScsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTJweCcsXG4gICAgICAgICAgICAgICAgbWluV2lkdGg6ICcyNjBweCcsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6ICczNjBweCcsXG4gICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7YXR0YWNobWVudC50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpID8gKFxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIHNyYz17YXR0YWNobWVudC51cmx9XG4gICAgICAgICAgICAgICAgICBhbHQ9e2F0dGFjaG1lbnQubmFtZX1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiA1NiwgaGVpZ2h0OiA1NiwgYm9yZGVyUmFkaXVzOiA4LCBvYmplY3RGaXQ6ICdjb3ZlcicgfX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDQwLCBoZWlnaHQ6IDQwLCBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICB7Z2V0RmlsZUljb24oYXR0YWNobWVudC50eXBlKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFdlaWdodDogNjAwLCBmb250U2l6ZTogMTQgfX0+e2F0dGFjaG1lbnQubmFtZX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgb3BhY2l0eTogMC44IH19PlxuICAgICAgICAgICAgICAgICAge2F0dGFjaG1lbnQudHlwZS5pbmNsdWRlcygnLycpID8gYXR0YWNobWVudC50eXBlLnNwbGl0KCcvJylbMV0udG9VcHBlckNhc2UoKSA6IGF0dGFjaG1lbnQudHlwZX1cbiAgICAgICAgICAgICAgICAgIHthdHRhY2htZW50LnNpemUgPyBgIMK3ICR7KGF0dGFjaG1lbnQuc2l6ZSAvIDEwMjQpLnRvRml4ZWQoMSl9IEtCYCA6ICcnfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHttZXNzYWdlLnRleHQgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzhweCcsIGFsaWduU2VsZjogaXNVc2VyID8gJ2ZsZXgtZW5kJyA6ICdmbGV4LXN0YXJ0JyB9fT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IC4uLmJ1YmJsZVN0eWxlLCBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9fT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiAxMiB9fT5cbiAgICAgICAgICAgICAgPEludGVyYWN0aXZlQ29udGVudFxuICAgICAgICAgICAgICAgIGJsb2Nrcz17Y29udGVudEJsb2Nrc31cbiAgICAgICAgICAgICAgICBwcmltYXJ5Q29sb3I9e3ByaW1hcnlDb2xvcn1cbiAgICAgICAgICAgICAgICB0ZXh0Q29sb3I9e2J1YmJsZVRleHRDb2xvcn1cbiAgICAgICAgICAgICAgICBpc0FjdGlvbmFibGU9eyFpc1VzZXIgJiYgaXNMYXN0TWVzc2FnZX1cbiAgICAgICAgICAgICAgICBvblF1aWNrQWN0aW9uPXtvblF1aWNrQWN0aW9ufVxuICAgICAgICAgICAgICAgIG9uU2NoZWR1bGVDb25maXJtPXtvblNjaGVkdWxlQ29uZmlybX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHsvKiBGZWVkYmFjayByb3cgYmVsb3cgYWdlbnQgbWVzc2FnZSAqL31cbiAgICAgIHtzaG93VGh1bWJzQXJlYSAmJiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e2ZlZWRiYWNrUm93U3R5bGV9PlxuICAgICAgICAgIHtmZWVkYmFja1ZhbHVlID8gKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17c2luZ2xlSWNvblN0eWxlfT5cbiAgICAgICAgICAgICAge2ZlZWRiYWNrVmFsdWUgPT09ICdnb29kJyA/IChcbiAgICAgICAgICAgICAgICA8VGh1bWJzVXAgc2l6ZT17MTh9IC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPFRodW1ic0Rvd24gc2l6ZT17MTh9IC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHN0eWxlPXtpY29uQnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgdGl0bGU9XCJUaHVtYnMgdXBcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm1lc3NhZ2VfaWQgJiYgb25GZWVkYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBvbkZlZWRiYWNrKG1lc3NhZ2UubWVzc2FnZV9pZCwgJ2dvb2QnKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFRodW1ic1VwIHNpemU9ezE4fSAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17c2VwYXJhdG9yU3R5bGV9IC8+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17aWNvbkJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgICAgIHRpdGxlPVwiVGh1bWJzIGRvd25cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLm1lc3NhZ2VfaWQgJiYgb25GZWVkYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBvbkZlZWRiYWNrKG1lc3NhZ2UubWVzc2FnZV9pZCwgJ2JhZCcpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8VGh1bWJzRG93biBzaXplPXsxOH0gLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIl19
272
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhdE1lc3NhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9DaGF0TWVzc2FnZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBK0J4RCxNQUFNLENBQUMsSUFBTSxvQkFBb0IsR0FBK0IsVUFBQyxFQWlCaEU7UUFoQkMsT0FBTyxhQUFBLEVBQ1AsS0FBSyxXQUFBLEVBQ0wsV0FBVyxpQkFBQSxFQUNYLHNCQUFzQixFQUF0QixjQUFjLG1CQUFHLEtBQUssS0FBQSxFQUN0Qix5QkFBeUIsRUFBekIsaUJBQWlCLG1CQUFHLEtBQUssS0FBQSxFQUN6QixVQUFVLGdCQUFBLEVBQ1YsZUFBZSxxQkFBQSxFQUNELGdCQUFnQixrQkFBQSxFQUM5QixlQUFlLHFCQUFBLEVBQ2YsWUFBWSxrQkFBQSxFQUNaLHFCQUFxQixFQUFyQixhQUFhLG1CQUFHLEtBQUssS0FBQSxFQUNyQixhQUFhLG1CQUFBLEVBQ2IsaUJB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QVEsRUFDYixLQUFLLEVBQUUsZUFBZSxFQUN0QixLQUFLLEVBQUUsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEVBQy9CLE9BQU8sRUFBRTtnQ0FDUCx5RUFBeUU7Z0NBQ3pFLElBQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUssT0FBZSxDQUFDLEVBQUUsQ0FBQztnQ0FDeEQsSUFBSSxLQUFLLElBQUksVUFBVSxFQUFFLENBQUM7b0NBQ3hCLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0NBQzNCLENBQUM7cUNBQU0sQ0FBQztvQ0FDTixTQUFTO2dDQUNYLENBQUM7NEJBQ0gsQ0FBQyxZQUVELEtBQUMsVUFBVSxJQUFDLElBQUksRUFBRSxFQUFFLEdBQUksR0FDakIsSUFDUixDQUNKLEdBQ0csQ0FDUCxJQUNHLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBXZWxjb21lQ2FyZCB9IGZyb20gJy4vV2VsY29tZUNhcmQnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIFNjaGVkdWxlSXRlbSwgVHJhbnNsYXRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgVXNlciwgVXNlclgsIEFsZXJ0Q2lyY2xlLCBUaHVtYnNVcCwgVGh1bWJzRG93biB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyBmb3JtYXRUaW1lc3RhbXAgfSBmcm9tICcuLi91dGlscy90aW1lJztcbmltcG9ydCB7IGdldEZpbGVJY29uIH0gZnJvbSAnLi9GaWxlVHlwZUljb24nO1xuaW1wb3J0IHsgSW50ZXJhY3RpdmVDb250ZW50IH0gZnJvbSAnLi9JbnRlcmFjdGl2ZUNvbnRlbnQnO1xuaW1wb3J0IHsgcGFyc2VJbnRlcmFjdGl2ZUNvbnRlbnRCbG9ja3MgfSBmcm9tICcuLi91dGlscy9pbnRlcmFjdGl2ZUNvbnRlbnQnO1xuaW1wb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9ucywgZ2V0VHJhbnNsYXRpb25TdHJpbmcsIG1lcmdlVHJhbnNsYXRpb25zIH0gZnJvbSAnLi4vdXRpbHMvaTE4bic7XG5leHBvcnQgeyBBdHRhY2htZW50UHJldmlldyB9IGZyb20gJy4vQXR0YWNobWVudFByZXZpZXcnO1xuXG5pbnRlcmZhY2UgQ2hhdE1lc3NhZ2VQcm9wcyB7XG4gIG1lc3NhZ2U6IENoYXRNZXNzYWdlO1xuICB0aGVtZT86IHtcbiAgICBwcmltYXJ5Q29sb3I/OiBzdHJpbmc7XG4gICAgc2Vjb25kYXJ5Q29sb3I/OiBzdHJpbmc7XG4gICAgZm9udEZhbWlseT86IHN0cmluZztcbiAgICBmb250U2l6ZT86IHN0cmluZztcbiAgICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gICAgdGV4dENvbG9yPzogc3RyaW5nO1xuICB9O1xuICBvblBsYXlBdWRpbz86ICh0ZXh0OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIGlzUGxheWluZ0F1ZGlvPzogYm9vbGVhbjtcbiAgaXNGaXJzdE1lc3NhZ2U/OiBib29sZWFuO1xuICBpc05leHRTYW1lU3BlYWtlcj86IGJvb2xlYW47XG4gIGlzUHJldlNhbWVTcGVha2VyPzogYm9vbGVhbjtcbiAgb25GZWVkYmFjaz86IChtZXNzYWdlSWQ6IHN0cmluZywgdmFsdWU6ICdnb29kJyB8ICdiYWQnKSA9PiB2b2lkO1xuICBlbmFibGVUeXBld3JpdGVyPzogYm9vbGVhbjtcbiAgd2VsY29tZUltYWdlVXJsPzogc3RyaW5nO1xuICB3ZWxjb21lVGl0bGU/OiBzdHJpbmc7XG4gIHBvc3NpYmxlUXVlcmllcz86IHN0cmluZ1tdO1xuICBvblF1aWNrUXVlcnk/OiAocXVlcnk6IHN0cmluZykgPT4gdm9pZDtcbiAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW47XG4gIG9uUXVpY2tBY3Rpb24/OiAodGV4dDogc3RyaW5nKSA9PiB2b2lkO1xuICBvblNjaGVkdWxlQ29uZmlybT86IChzY2hlZHVsZTogU2NoZWR1bGVJdGVtKSA9PiB2b2lkO1xuICB0cmFuc2xhdGlvbnM/OiBUcmFuc2xhdGlvbnM7XG4gIGxhbmd1YWdlPzogc3RyaW5nO1xuICBhZ2VudE5hbWU/OiBzdHJpbmc7IC8vIEN1c3RvbSBhZ2VudCBuYW1lIHRvIGRpc3BsYXkgaW5zdGVhZCBvZiB0cmFuc2xhdGlvblxufVxuXG5leHBvcnQgY29uc3QgQ2hhdE1lc3NhZ2VDb21wb25lbnQ6IFJlYWN0LkZDPENoYXRNZXNzYWdlUHJvcHM+ID0gKHtcbiAgbWVzc2FnZSxcbiAgdGhlbWUsXG4gIG9uUGxheUF1ZGlvLFxuICBpc0ZpcnN0TWVzc2FnZSA9IGZhbHNlLFxuICBpc1ByZXZTYW1lU3BlYWtlciA9IGZhbHNlLFxuICBvbkZlZWRiYWNrLFxuICB3ZWxjb21lSW1hZ2VVcmwsXG4gIHdlbGNvbWVUaXRsZTogd2VsY29tZVRpdGxlUHJvcCxcbiAgcG9zc2libGVRdWVyaWVzLFxuICBvblF1aWNrUXVlcnksXG4gIGlzTGFzdE1lc3NhZ2UgPSBmYWxzZSxcbiAgb25RdWlja0FjdGlvbixcbiAgb25TY2hlZHVsZUNvbmZpcm0sXG4gIHRyYW5zbGF0aW9uczogY3VzdG9tVHJhbnNsYXRpb25zLFxuICBsYW5ndWFnZSxcbiAgYWdlbnROYW1lLFxufSkgPT4ge1xuICAvLyBNZXJnZSB0cmFuc2xhdGlvbnMgd2l0aCBkZWZhdWx0c1xuICBjb25zdCB0cmFuc2xhdGlvbnMgPSBSZWFjdC51c2VNZW1vKFxuICAgICgpID0+IG1lcmdlVHJhbnNsYXRpb25zKGN1c3RvbVRyYW5zbGF0aW9ucywgZGVmYXVsdFRyYW5zbGF0aW9ucyksXG4gICAgW2N1c3RvbVRyYW5zbGF0aW9uc11cbiAgKTtcblxuICAvLyBUcmFuc2xhdGlvbiBoZWxwZXJcbiAgY29uc3QgdCA9IChrZXk6IHN0cmluZywgZmFsbGJhY2s/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIHJldHVybiBnZXRUcmFuc2xhdGlvblN0cmluZyhrZXksIHRyYW5zbGF0aW9ucywgZmFsbGJhY2spO1xuICB9O1xuICBjb25zdCBpc1VzZXIgPSBtZXNzYWdlLnNwZWFrZXIgPT09ICdjdXN0b21lcic7XG4gIGNvbnN0IGlzU3BlY2lhbCA9IG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ3NwZWNpYWwnO1xuICBjb25zdCBpc1dlbGNvbWVNZXNzYWdlID0gIWlzVXNlciAmJiAhaXNTcGVjaWFsICYmIGlzRmlyc3RNZXNzYWdlO1xuICBjb25zdCBbaXNIb3ZlcmVkLCBzZXRJc0hvdmVyZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZWRpdGluZ0ZlZWRiYWNrXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2Rpc3BsYXlUZXh0XSA9IFJlYWN0LnVzZVN0YXRlPHN0cmluZz4obWVzc2FnZS50ZXh0KTtcbiAgY29uc3QgY29udGVudEJsb2NrcyA9IFJlYWN0LnVzZU1lbW8oXG4gICAgKCkgPT4gcGFyc2VJbnRlcmFjdGl2ZUNvbnRlbnRCbG9ja3MoZGlzcGxheVRleHQpLFxuICAgIFtkaXNwbGF5VGV4dF1cbiAgKTtcblxuICAvLyBGb3JtYXQgdGltZXN0YW1wIHdpdGggdHJhbnNsYXRpb25zXG4gIGNvbnN0IHRpbWVzdGFtcCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHRpbWVUcmFuc2xhdGlvbnMgPSB0cmFuc2xhdGlvbnM/LnRpbWUgPyB7XG4gICAgICBqdXN0Tm93OiB0cmFuc2xhdGlvbnMudGltZS5qdXN0Tm93LFxuICAgICAgdG9kYXk6IHRyYW5zbGF0aW9ucy50aW1lLnRvZGF5LFxuICAgICAgeWVzdGVyZGF5OiB0cmFuc2xhdGlvbnMudGltZS55ZXN0ZXJkYXksXG4gICAgfSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZm9ybWF0VGltZXN0YW1wKG1lc3NhZ2UuY3JlYXRlX3RpbWUsIGxhbmd1YWdlLCB0aW1lVHJhbnNsYXRpb25zKTtcbiAgfSwgW21lc3NhZ2UuY3JlYXRlX3RpbWUsIGxhbmd1YWdlLCB0cmFuc2xhdGlvbnNdKTtcblxuICAvLyBGYXN0IHR5cGV3cml0ZXIgZWZmZWN0IGZvciBuZXdseSBkaXNwbGF5ZWQgYWdlbnQgbWVzc2FnZXMsIGZpeCBsYXRlclxuICAvLyBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAvLyAgIGlmICghaXNVc2VyICYmICFpc1NwZWNpYWwgJiYgZW5hYmxlVHlwZXdyaXRlciAmJiBtZXNzYWdlLnRleHQgIT09IGxhc3RBbmltYXRlZFJlZi5jdXJyZW50KSB7XG4gIC8vICAgICBsYXN0QW5pbWF0ZWRSZWYuY3VycmVudCA9IG1lc3NhZ2UudGV4dDtcbiAgLy8gICAgIHNldElzVHlwZXdyaXRpbmcodHJ1ZSk7XG4gIC8vICAgICBzZXREaXNwbGF5VGV4dCgnJyk7XG4gIC8vICAgICBsZXQgaSA9IDA7XG4gIC8vICAgICBjb25zdCB0b3RhbCA9IG1lc3NhZ2UudGV4dC5sZW5ndGg7XG4gIC8vICAgICBjb25zdCB0aWNrTXMgPSAxNjtcbiAgLy8gICAgIGNvbnN0IHRhcmdldE1zID0gMTIwMDtcbiAgLy8gICAgIGNvbnN0IGNoYXJzUGVyVGljayA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQodG90YWwgLyAodGFyZ2V0TXMgLyB0aWNrTXMpKSk7XG4gIC8vICAgICBjb25zdCBpbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gIC8vICAgICAgIGkgKz0gY2hhcnNQZXJUaWNrO1xuICAvLyAgICAgICBpZiAoaSA+PSB0b3RhbCkge1xuICAvLyAgICAgICAgIHNldERpc3BsYXlUZXh0KG1lc3NhZ2UudGV4dCk7XG4gIC8vICAgICAgICAgc2V0SXNUeXBld3JpdGluZyhmYWxzZSk7XG4gIC8vICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAvLyAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgIHNldERpc3BsYXlUZXh0KG1lc3NhZ2UudGV4dC5zbGljZSgwLCBpKSk7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0sIHRpY2tNcyk7XG4gIC8vICAgICByZXR1cm4gKCkgPT4gd2luZG93LmNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAvLyAgIH0gZWxzZSB7XG4gIC8vICAgICBzZXREaXNwbGF5VGV4dChtZXNzYWdlLnRleHQpO1xuICAvLyAgICAgc2V0SXNUeXBld3JpdGluZyhmYWxzZSk7XG4gIC8vICAgfVxuICAvLyB9LCBbbWVzc2FnZS50ZXh0LCBlbmFibGVUeXBld3JpdGVyLCBpc1VzZXIsIGlzU3BlY2lhbF0pO1xuXG4gIC8vIFVwZGF0ZWQgZGVzaWduIGNvbG9yc1xuICBjb25zdCB1c2VyQnViYmxlQmdDb2xvciA9ICcjRTRFNEU3JzsgLy8gZ3JleSBmb3IgdXNlclxuICBjb25zdCB1c2VyVGV4dENvbG9yID0gJyMwMDAwMDAnO1xuICBjb25zdCBhZ2VudFRleHRDb2xvciA9IHRoZW1lPy50ZXh0Q29sb3IgfHwgJyMwMDAwMDAnO1xuICBjb25zdCBwcmltYXJ5Q29sb3IgPSB0aGVtZT8ucHJpbWFyeUNvbG9yIHx8ICcjNGY0NmU1JztcbiAgY29uc3QgZm9udEZhbWlseSA9IHRoZW1lPy5mb250RmFtaWx5IHx8ICdSb2JvdG8sIEFyaWFsLCBzYW5zLXNlcmlmJztcbiAgY29uc3QgZm9udFNpemUgPSB0aGVtZT8uZm9udFNpemUgfHwgJzE1cHgnO1xuICBjb25zdCBidWJibGVUZXh0Q29sb3IgPSBpc1VzZXIgPyB1c2VyVGV4dENvbG9yIDogYWdlbnRUZXh0Q29sb3I7XG5cbiAgY29uc3QgbWVzc2FnZUNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIG1hcmdpbkJvdHRvbTogaXNQcmV2U2FtZVNwZWFrZXIgPyAnOHB4JyA6ICc4cHgnLFxuICAgIG1hcmdpblRvcDogaXNQcmV2U2FtZVNwZWFrZXIgPyAnMHB4JyA6ICcxNnB4JyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICBhbGlnbkl0ZW1zOiBpc1VzZXIgPyAnZmxleC1lbmQnIDogJ2ZsZXgtc3RhcnQnLFxuICB9O1xuXG4gIGNvbnN0IGxhYmVsUm93U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogaXNQcmV2U2FtZVNwZWFrZXIgPyAnbm9uZScgOiAnZmxleCcsXG4gICAgd2lkdGg6ICc4MCUnLFxuICAgIGp1c3RpZnlDb250ZW50OiBpc1VzZXIgPyAnZmxleC1lbmQnIDogJ2ZsZXgtc3RhcnQnLFxuICAgIGFsaWduSXRlbXM6ICdiYXNlbGluZScsXG4gICAgZ2FwOiAnOHB4JyxcbiAgICBtYXJnaW5Cb3R0b206ICc2cHgnLFxuICB9O1xuXG4gIGNvbnN0IG1lc3NhZ2VMYWJlbFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgY29sb3I6ICcjMDAwMDAwJyxcbiAgICBsaW5lSGVpZ2h0OiAxLFxuICAgIGZvbnRXZWlnaHQ6IDYwMCxcbiAgfTtcblxuICBjb25zdCB0b3BUaW1lc3RhbXBTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogJzEzcHgnLFxuICAgIGNvbG9yOiAnIzZiNzI4MCcsXG4gICAgbGluZUhlaWdodDogMSxcbiAgfTtcblxuICBjb25zdCBtZXNzYWdlQnViYmxlQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIG1heFdpZHRoOiAnODAlJyxcbiAgfTtcblxuICAvLyBPbmx5IHVzZXIncyBtZXNzYWdlcyBzaG91bGQgcmVuZGVyIGFzIGJ1YmJsZXMuXG4gIC8vIEFnZW50IG1lc3NhZ2VzIGFyZSBwbGFpbiB0ZXh0IHdpdGggbm8gY29udGFpbmVyIGJhY2tncm91bmQuXG4gIGNvbnN0IGJ1YmJsZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0gaXNVc2VyXG4gICAgPyB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdXNlckJ1YmJsZUJnQ29sb3IsXG4gICAgICAgIGNvbG9yOiB1c2VyVGV4dENvbG9yLFxuICAgICAgICBwYWRkaW5nOiAnMTJweCAxNnB4JyxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiAnMTJweCAwIDEycHggMTJweCcsXG4gICAgICAgIGZvbnRTaXplLFxuICAgICAgICBmb250RmFtaWx5LFxuICAgICAgICB3b3JkQnJlYWs6ICdicmVhay13b3JkJyxcbiAgICAgICAgbGluZUhlaWdodDogMS40LFxuICAgICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgICAgYm94U2hhZG93OiAnMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wOCknXG4gICAgICB9XG4gICAgOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgY29sb3I6IGFnZW50VGV4dENvbG9yLFxuICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICBib3JkZXJSYWRpdXM6IDAsXG4gICAgICAgIGZvbnRTaXplLFxuICAgICAgICBmb250RmFtaWx5LFxuICAgICAgICB3b3JkQnJlYWs6ICdicmVhay13b3JkJyxcbiAgICAgICAgbGluZUhlaWdodDogMS40LFxuICAgICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgICAgYm94U2hhZG93OiAnbm9uZSdcbiAgICAgIH07XG5cbiAgY29uc3QgYXR0YWNobWVudHNDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBtYXJnaW5Ub3A6ICc4cHgnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBnYXA6ICc4cHgnLFxuICB9O1xuXG4gIC8vIEZlZWRiYWNrIHN0YXRlIGFuZCBVSSAodGh1bWJzIHVwL2Rvd24pIGZvciBhZ2VudCBtZXNzYWdlc1xuICBjb25zdCBmZWVkYmFja1ZhbHVlID0gKG1lc3NhZ2UuZmVlZGJhY2sgJiYgbWVzc2FnZS5mZWVkYmFjay5sZW5ndGggPiAwKVxuICAgID8gbWVzc2FnZS5mZWVkYmFja1ttZXNzYWdlLmZlZWRiYWNrLmxlbmd0aCAtIDFdLmZlZWRiYWNrXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgdGh1bWJzU2hvdWxkU2hvdyA9ICFpc1VzZXIgJiYgIWlzU3BlY2lhbCAmJiBpc0hvdmVyZWQgJiYgIWZlZWRiYWNrVmFsdWU7XG4gIGNvbnN0IHNob3dUaHVtYnNBcmVhID0gIWlzVXNlciAmJiAhaXNTcGVjaWFsOyAvLyBPbmx5IGFnZW50cyBoYXZlIHRodW1icyBhcmVhXG5cbiAgY29uc3QgZmVlZGJhY2tSb3dTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiBzaG93VGh1bWJzQXJlYSA/ICdmbGV4JyA6ICdub25lJyxcbiAgICBtYXJnaW5Ub3A6IDgsXG4gICAgYWxpZ25TZWxmOiAnZmxleC1zdGFydCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgaGVpZ2h0OiAyMCxcbiAgICBnYXA6IDgsXG4gICAgdmlzaWJpbGl0eTogdGh1bWJzU2hvdWxkU2hvdyB8fCAhIWZlZWRiYWNrVmFsdWUgPyAndmlzaWJsZScgOiAnaGlkZGVuJyxcbiAgfTtcblxuICBjb25zdCBpY29uQnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBwYWRkaW5nOiAwLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGNvbG9yOiAnIzljYTNhZicsXG4gICAgZGlzcGxheTogdGh1bWJzU2hvdWxkU2hvdyA/ICdmbGV4JyA6ICdub25lJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfTtcblxuICBjb25zdCBzZXBhcmF0b3JTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogMSxcbiAgICBoZWlnaHQ6IDE0LFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNlNWU3ZWInLFxuICAgIGRpc3BsYXk6IHRodW1ic1Nob3VsZFNob3cgPyAnYmxvY2snIDogJ25vbmUnLFxuICB9O1xuXG4gIGNvbnN0IHNpbmdsZUljb25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBjb2xvcjogJyMwMDAwMDAnLFxuICAgIGRpc3BsYXk6IGZlZWRiYWNrVmFsdWUgPyAnZmxleCcgOiAnbm9uZScsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH07XG5cbiAgbGV0IHdlbGNvbWVUaXRsZSA9IHdlbGNvbWVUaXRsZVByb3AgfHwgJyc7XG4gIGxldCB3ZWxjb21lQ29udGVudCA9ICcnO1xuICBcbiAgaWYgKGlzV2VsY29tZU1lc3NhZ2UpIHtcbiAgICBjb25zdCBtZXNzYWdlVGV4dCA9IG1lc3NhZ2UudGV4dDtcbiAgICBpZiAoIXdlbGNvbWVUaXRsZVByb3ApIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gbWVzc2FnZVRleHQuc3BsaXQoL1tcXG5cXC4hP10vKTtcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAwKSB3ZWxjb21lVGl0bGUgPSAocGFydHNbMF0gfHwgJycpLnRyaW0oKTtcbiAgICAgIHdlbGNvbWVDb250ZW50ID0gbWVzc2FnZVRleHQuc3Vic3RyaW5nKHdlbGNvbWVUaXRsZS5sZW5ndGgpLnRyaW0oKTtcbiAgICAgIHdlbGNvbWVDb250ZW50ID0gd2VsY29tZUNvbnRlbnQucmVwbGFjZSgvXlssLiE/XFxzXSsvLCAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdlbGNvbWVDb250ZW50ID0gbWVzc2FnZVRleHQ7XG4gICAgfVxuICB9XG5cbiAgLy8gSGFuZGxlIHNwZWNpYWwgbWVzc2FnZXMgKGxpa2UgdGFrZW92ZXIgaW5kaWNhdG9ycylcbiAgaWYgKGlzU3BlY2lhbCkge1xuICAgIGNvbnN0IHNwZWNpYWxNZXNzYWdlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgIG1hcmdpbjogJzE2cHggMCcsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgIH07XG5cbiAgICAvLyBEZXRlcm1pbmUgaWNvbiBhbmQgc3R5bGUgYmFzZWQgb24gbWVzc2FnZSBjb250ZW50XG4gICAgbGV0IGljb247XG4gICAgbGV0IGJhY2tncm91bmRDb2xvciA9ICcjRTNGMkZEJztcbiAgICBsZXQgdGV4dENvbG9yID0gJyMxOTc2RDInO1xuICAgIFxuICAgIGlmIChtZXNzYWdlLnRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnb2ZmbGluZScpIHx8IG1lc3NhZ2UudGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdpbmFjdGl2ZScpKSB7XG4gICAgICBpY29uID0gPEFsZXJ0Q2lyY2xlIHNpemU9ezE4fSAvPjtcbiAgICAgIGJhY2tncm91bmRDb2xvciA9ICcjRkZGM0UwJztcbiAgICAgIHRleHRDb2xvciA9ICcjRjU3QzAwJztcbiAgICB9IGVsc2UgaWYgKG1lc3NhZ2UudGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCd0b29rIG92ZXInKSB8fCBtZXNzYWdlLnRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygndGFrZW92ZXInKSkge1xuICAgICAgaWNvbiA9IDxVc2VyWCBzaXplPXsxOH0gLz47XG4gICAgfSBlbHNlIHtcbiAgICAgIGljb24gPSA8VXNlciBzaXplPXsxOH0gLz47XG4gICAgfVxuXG4gICAgY29uc3Qgc3BlY2lhbEJ1YmJsZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgYmFja2dyb3VuZENvbG9yLFxuICAgICAgY29sb3I6IHRleHRDb2xvcixcbiAgICAgIHBhZGRpbmc6ICc4cHggMTZweCcsXG4gICAgICBib3JkZXJSYWRpdXM6ICcxNnB4JyxcbiAgICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgICBmb250RmFtaWx5LFxuICAgICAgZm9udFdlaWdodDogJzUwMCcsXG4gICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgIGdhcDogJzhweCcsXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXtzcGVjaWFsTWVzc2FnZVN0eWxlfT5cbiAgICAgICAgPGRpdiBzdHlsZT17c3BlY2lhbEJ1YmJsZVN0eWxlfT5cbiAgICAgICAgICB7aWNvbn1cbiAgICAgICAgICB7bWVzc2FnZS50ZXh0fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBpZiAoaXNXZWxjb21lTWVzc2FnZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXt7IC4uLm1lc3NhZ2VCdWJibGVDb250YWluZXJTdHlsZSB9fT5cbiAgICAgICAgICA8V2VsY29tZUNhcmRcbiAgICAgICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgICAgICAgIGltYWdlVXJsPXt3ZWxjb21lSW1hZ2VVcmx9XG4gICAgICAgICAgICB0aXRsZT17d2VsY29tZVRpdGxlfVxuICAgICAgICAgICAgY29udGVudD17d2VsY29tZUNvbnRlbnR9XG4gICAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXM9e3Bvc3NpYmxlUXVlcmllc31cbiAgICAgICAgICAgIG9uUXVpY2tRdWVyeT17b25RdWlja1F1ZXJ5fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBcbiAgICAgIHN0eWxlPXttZXNzYWdlQ29udGFpbmVyU3R5bGV9XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldElzSG92ZXJlZCh0cnVlKX1cbiAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4geyBpZiAoIWVkaXRpbmdGZWVkYmFjaykgc2V0SXNIb3ZlcmVkKGZhbHNlKTsgfX1cbiAgICA+XG4gICAgICA8ZGl2IHN0eWxlPXtsYWJlbFJvd1N0eWxlfT5cbiAgICAgICAge2lzVXNlciA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17dG9wVGltZXN0YW1wU3R5bGV9Pnt0aW1lc3RhbXB9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttZXNzYWdlTGFiZWxTdHlsZX0+e3QoJ2xhYmVscy55b3UnKX08L2Rpdj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17bWVzc2FnZUxhYmVsU3R5bGV9PnthZ2VudE5hbWUgfHwgdCgnbGFiZWxzLmFnZW50Jyl9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt0b3BUaW1lc3RhbXBTdHlsZX0+e3RpbWVzdGFtcH08L2Rpdj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7bWVzc2FnZS5hdHRhY2htZW50cyAmJiBtZXNzYWdlLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IC4uLmF0dGFjaG1lbnRzQ29udGFpbmVyU3R5bGUsIGFsaWduSXRlbXM6IGlzVXNlciA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCcgfX0+XG4gICAgICAgICAge21lc3NhZ2UuYXR0YWNobWVudHMubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBnYXA6ICcxMnB4JyxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCAxNHB4JyxcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzVXNlciA/ICdyZ2JhKDI1NSwyNTUsMjU1LDAuMTIpJyA6ICcjZjVmNWY1JyxcbiAgICAgICAgICAgICAgICBib3JkZXI6IGlzVXNlciA/ICcxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjE4KScgOiAnMXB4IHNvbGlkICNlNWU1ZTUnLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzEycHgnLFxuICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnMjYwcHgnLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiAnMzYwcHgnLFxuICAgICAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2F0dGFjaG1lbnQudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSA/IChcbiAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICBzcmM9e2F0dGFjaG1lbnQudXJsfVxuICAgICAgICAgICAgICAgICAgYWx0PXthdHRhY2htZW50Lm5hbWV9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogNTYsIGhlaWdodDogNTYsIGJvcmRlclJhZGl1czogOCwgb2JqZWN0Rml0OiAnY292ZXInIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiA0MCwgaGVpZ2h0OiA0MCwgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInIH19PlxuICAgICAgICAgICAgICAgICAge2dldEZpbGVJY29uKGF0dGFjaG1lbnQudHlwZSl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9fT5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRXZWlnaHQ6IDYwMCwgZm9udFNpemU6IDE0IH19PnthdHRhY2htZW50Lm5hbWV9PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogMTIsIG9wYWNpdHk6IDAuOCB9fT5cbiAgICAgICAgICAgICAgICAgIHthdHRhY2htZW50LnR5cGUuaW5jbHVkZXMoJy8nKSA/IGF0dGFjaG1lbnQudHlwZS5zcGxpdCgnLycpWzFdLnRvVXBwZXJDYXNlKCkgOiBhdHRhY2htZW50LnR5cGV9XG4gICAgICAgICAgICAgICAgICB7YXR0YWNobWVudC5zaXplID8gYCDCtyAkeyhhdHRhY2htZW50LnNpemUgLyAxMDI0KS50b0ZpeGVkKDEpfSBLQmAgOiAnJ31cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7bWVzc2FnZS50ZXh0ICYmIChcbiAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc4cHgnLCBhbGlnblNlbGY6IGlzVXNlciA/ICdmbGV4LWVuZCcgOiAnZmxleC1zdGFydCcgfX0+XG4gICAgICAgICAgPGRpdiBzdHlsZT17eyAuLi5idWJibGVTdHlsZSwgcG9zaXRpb246ICdyZWxhdGl2ZScgfX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogMTIgfX0+XG4gICAgICAgICAgICAgIDxJbnRlcmFjdGl2ZUNvbnRlbnRcbiAgICAgICAgICAgICAgICBibG9ja3M9e2NvbnRlbnRCbG9ja3N9XG4gICAgICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICAgICAgdGV4dENvbG9yPXtidWJibGVUZXh0Q29sb3J9XG4gICAgICAgICAgICAgICAgaXNBY3Rpb25hYmxlPXshaXNVc2VyICYmIGlzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgb25RdWlja0FjdGlvbj17b25RdWlja0FjdGlvbn1cbiAgICAgICAgICAgICAgICBvblNjaGVkdWxlQ29uZmlybT17b25TY2hlZHVsZUNvbmZpcm19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7LyogRmVlZGJhY2sgcm93IGJlbG93IGFnZW50IG1lc3NhZ2UgKi99XG4gICAgICB7c2hvd1RodW1ic0FyZWEgJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXtmZWVkYmFja1Jvd1N0eWxlfT5cbiAgICAgICAgICB7ZmVlZGJhY2tWYWx1ZSA/IChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3NpbmdsZUljb25TdHlsZX0+XG4gICAgICAgICAgICAgIHtmZWVkYmFja1ZhbHVlID09PSAnZ29vZCcgPyAoXG4gICAgICAgICAgICAgICAgPFRodW1ic1VwIHNpemU9ezE4fSAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxUaHVtYnNEb3duIHNpemU9ezE4fSAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17aWNvbkJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgICAgIHRpdGxlPXt0KCdmZWVkYmFjay50aHVtYnNVcCcpfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFVzZSBtZXNzYWdlX2lkIGZyb20gc29ja2V0LCBmYWxsYmFjayB0byBpZCBpZiBtZXNzYWdlX2lkIGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ0lkID0gbWVzc2FnZS5tZXNzYWdlX2lkIHx8IChtZXNzYWdlIGFzIGFueSkuaWQ7XG4gICAgICAgICAgICAgICAgICBpZiAobXNnSWQgJiYgb25GZWVkYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBvbkZlZWRiYWNrKG1zZ0lkLCAnZ29vZCcpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxUaHVtYnNVcCBzaXplPXsxOH0gLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3NlcGFyYXRvclN0eWxlfSAvPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e2ljb25CdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICB0aXRsZT17dCgnZmVlZGJhY2sudGh1bWJzRG93bicpfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFVzZSBtZXNzYWdlX2lkIGZyb20gc29ja2V0LCBmYWxsYmFjayB0byBpZCBpZiBtZXNzYWdlX2lkIGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ0lkID0gbWVzc2FnZS5tZXNzYWdlX2lkIHx8IChtZXNzYWdlIGFzIGFueSkuaWQ7XG4gICAgICAgICAgICAgICAgICBpZiAobXNnSWQgJiYgb25GZWVkYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBvbkZlZWRiYWNrKG1zZ0lkLCAnYmFkJyk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFRodW1ic0Rvd24gc2l6ZT17MTh9IC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufTtcbiJdfQ==