genassist-chat-react 1.0.22 → 1.0.23
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.
- package/README.md +13 -0
- package/dist/components/ChatMessage.d.ts +1 -1
- package/dist/components/ChatMessage.js +1 -2
- package/dist/components/GenAgentChat.js +44 -29
- package/dist/components/common/AttachmentPreview.d.ts +8 -0
- package/dist/components/common/AttachmentPreview.js +77 -0
- package/dist/components/common/UploadFilePreview.js +6 -2
- package/dist/hooks/useChat.js +41 -3
- package/dist/services/chatService.d.ts +1 -0
- package/dist/services/chatService.js +27 -1
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.js +1 -1
- package/package.json +1 -1
|
@@ -56,7 +56,8 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
56
56
|
};
|
|
57
57
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
58
58
|
import { useState, useRef, useEffect, useLayoutEffect, useMemo, useCallback } from 'react';
|
|
59
|
-
import { ChatMessageComponent
|
|
59
|
+
import { ChatMessageComponent } from './ChatMessage';
|
|
60
|
+
import { AttachmentPreview } from './common/AttachmentPreview';
|
|
60
61
|
import { useChat } from '../hooks/useChat';
|
|
61
62
|
import { VoiceInput } from './VoiceInput';
|
|
62
63
|
import { AudioService } from '../services/audioService';
|
|
@@ -68,16 +69,16 @@ import chatLogo from '../assets/chat-logo.png';
|
|
|
68
69
|
import { resolveLanguage, mergeTranslations, getTranslationString, getTranslationArray, getTranslationsForLanguage, } from '../utils/i18n';
|
|
69
70
|
import { GoogleReCaptcha, GoogleReCaptchaProvider } from 'react-google-recaptcha-v3';
|
|
70
71
|
export var GenAgentChat = function (_a) {
|
|
71
|
-
var baseUrl = _a.baseUrl, apiKey = _a.apiKey, tenant = _a.tenant, metadata = _a.metadata, _b = _a.useWs, useWs = _b === void 0 ? true : _b, onError = _a.onError, onTakeover = _a.onTakeover, onFinalize = _a.onFinalize, theme = _a.theme, _c = _a.headerTitle, headerTitle = _c === void 0 ? 'Genassist' : _c, placeholder = _a.placeholder, agentName = _a.agentName, logoUrl = _a.logoUrl, _d = _a.mode, mode = _d === void 0 ? 'embedded' : _d, _e = _a.floatingConfig, floatingConfig = _e === void 0 ? {} : _e, language = _a.language, customTranslations = _a.translations, reCaptchaKey = _a.reCaptchaKey, _f = _a.widget, widget = _f === void 0 ? false : _f;
|
|
72
|
+
var baseUrl = _a.baseUrl, apiKey = _a.apiKey, tenant = _a.tenant, metadata = _a.metadata, _b = _a.useWs, useWs = _b === void 0 ? true : _b, onError = _a.onError, onTakeover = _a.onTakeover, onFinalize = _a.onFinalize, theme = _a.theme, _c = _a.headerTitle, headerTitle = _c === void 0 ? 'Genassist' : _c, description = _a.description, placeholder = _a.placeholder, agentName = _a.agentName, logoUrl = _a.logoUrl, _d = _a.mode, mode = _d === void 0 ? 'embedded' : _d, _e = _a.floatingConfig, floatingConfig = _e === void 0 ? {} : _e, language = _a.language, customTranslations = _a.translations, reCaptchaKey = _a.reCaptchaKey, _f = _a.widget, widget = _f === void 0 ? false : _f, _g = _a.useAudio, useAudio = _g === void 0 ? false : _g, _h = _a.useFile, useFile = _h === void 0 ? false : _h, _j = _a.noColorAnimation, noColorAnimation = _j === void 0 ? false : _j, _k = _a.showWelcomeBeforeStart, showWelcomeBeforeStart = _k === void 0 ? true : _k, _l = _a.allowedExtensions, allowedExtensions = _l === void 0 ? [] : _l;
|
|
72
73
|
// Language selection state (with localStorage persistence)
|
|
73
|
-
var
|
|
74
|
+
var _m = useState(function () {
|
|
74
75
|
if (language)
|
|
75
76
|
return language;
|
|
76
77
|
var stored = typeof window !== 'undefined' ? localStorage.getItem('genassist_language') : null;
|
|
77
78
|
if (stored)
|
|
78
79
|
return stored;
|
|
79
80
|
return resolveLanguage();
|
|
80
|
-
}), selectedLanguage =
|
|
81
|
+
}), selectedLanguage = _m[0], setSelectedLanguage = _m[1];
|
|
81
82
|
// Save language to localStorage when it changes
|
|
82
83
|
useEffect(function () {
|
|
83
84
|
if (typeof window !== 'undefined' && !language) {
|
|
@@ -85,7 +86,7 @@ export var GenAgentChat = function (_a) {
|
|
|
85
86
|
}
|
|
86
87
|
}, [selectedLanguage, language]);
|
|
87
88
|
// State for tracking selected FAQ query
|
|
88
|
-
var
|
|
89
|
+
var _o = useState(null), selectedFaqQuery = _o[0], setSelectedFaqQuery = _o[1];
|
|
89
90
|
// Resolve language: prop > selected > browser > 'en'
|
|
90
91
|
var resolvedLanguage = useMemo(function () {
|
|
91
92
|
if (language)
|
|
@@ -114,21 +115,21 @@ export var GenAgentChat = function (_a) {
|
|
|
114
115
|
// Otherwise, use the translation which will update with language changes
|
|
115
116
|
return placeholder || t('input.placeholder', 'Ask a question');
|
|
116
117
|
}, [placeholder, translations]);
|
|
117
|
-
var
|
|
118
|
-
var
|
|
119
|
-
var
|
|
120
|
-
var
|
|
121
|
-
var
|
|
122
|
-
var
|
|
123
|
-
var
|
|
124
|
-
var
|
|
118
|
+
var _p = useState(''), inputValue = _p[0], setInputValue = _p[1];
|
|
119
|
+
var _q = useState(false), showResetConfirm = _q[0], setShowResetConfirm = _q[1];
|
|
120
|
+
var _r = useState(false), showMenu = _r[0], setShowMenu = _r[1];
|
|
121
|
+
var _s = useState(false), showLanguageDropdown = _s[0], setShowLanguageDropdown = _s[1];
|
|
122
|
+
var _t = useState(false), isPlayingAudio = _t[0], setIsPlayingAudio = _t[1];
|
|
123
|
+
var _u = useState(false), isFloatingOpen = _u[0], setIsFloatingOpen = _u[1];
|
|
124
|
+
var _v = useState([]), attachments = _v[0], setAttachments = _v[1];
|
|
125
|
+
var _w = useState(new Set()), uploadingFiles = _w[0], setUploadingFiles = _w[1];
|
|
125
126
|
var menuRef = useRef(null);
|
|
126
127
|
var fileInputRef = useRef(null);
|
|
127
128
|
var textAreaRef = useRef(null);
|
|
128
129
|
var headerRef = useRef(null);
|
|
129
|
-
var
|
|
130
|
-
var
|
|
131
|
-
var
|
|
130
|
+
var _x = useState(56), headerHeight = _x[0], setHeaderHeight = _x[1];
|
|
131
|
+
var _y = useState(false), showBacklight = _y[0], setShowBacklight = _y[1];
|
|
132
|
+
var _z = useState(false), isFullscreenToggled = _z[0], setIsFullscreenToggled = _z[1];
|
|
132
133
|
// default thinking messages if none provided by workflow
|
|
133
134
|
var DEFAULT_THINKING_MESSAGES = useMemo(function () { return getTranslationArray('thinking.messages', translations, [
|
|
134
135
|
"Thinking…",
|
|
@@ -140,9 +141,9 @@ export var GenAgentChat = function (_a) {
|
|
|
140
141
|
"Tying it together…",
|
|
141
142
|
"Almost there…",
|
|
142
143
|
]); }, [translations]);
|
|
143
|
-
var
|
|
144
|
-
var
|
|
145
|
-
var
|
|
144
|
+
var _0 = useState([]), currentThinkingParts = _0[0], setCurrentThinkingParts = _0[1];
|
|
145
|
+
var _1 = useState(0), currentThinkingPartIndex = _1[0], setCurrentThinkingPartIndex = _1[1];
|
|
146
|
+
var _2 = useChat({
|
|
146
147
|
baseUrl: baseUrl,
|
|
147
148
|
apiKey: apiKey,
|
|
148
149
|
tenant: tenant,
|
|
@@ -152,7 +153,7 @@ export var GenAgentChat = function (_a) {
|
|
|
152
153
|
onError: onError,
|
|
153
154
|
onTakeover: onTakeover,
|
|
154
155
|
onFinalize: onFinalize
|
|
155
|
-
}), messages =
|
|
156
|
+
}), messages = _2.messages, isLoading = _2.isLoading, sendMessage = _2.sendMessage, uploadFile = _2.uploadFile, resetConversation = _2.resetConversation, startConversation = _2.startConversation, connectionState = _2.connectionState, conversationId = _2.conversationId, possibleQueries = _2.possibleQueries, isFinalized = _2.isFinalized, isAgentTyping = _2.isAgentTyping, addFeedback = _2.addFeedback, welcomeTitle = _2.welcomeTitle, welcomeImageUrl = _2.welcomeImageUrl, welcomeMessage = _2.welcomeMessage, thinkingPhrases = _2.thinkingPhrases, thinkingDelayMs = _2.thinkingDelayMs;
|
|
156
157
|
var messagesEndRef = useRef(null);
|
|
157
158
|
var audioService = useRef(null);
|
|
158
159
|
var hasAnchoredHistory = useRef(false);
|
|
@@ -588,6 +589,12 @@ export var GenAgentChat = function (_a) {
|
|
|
588
589
|
case 0:
|
|
589
590
|
if (isLoading)
|
|
590
591
|
return [2 /*return*/];
|
|
592
|
+
// Clear input text and file attachments when starting a conversation
|
|
593
|
+
setInputValue('');
|
|
594
|
+
setAttachments([]);
|
|
595
|
+
if (fileInputRef.current) {
|
|
596
|
+
fileInputRef.current.value = '';
|
|
597
|
+
}
|
|
591
598
|
_a.label = 1;
|
|
592
599
|
case 1:
|
|
593
600
|
_a.trys.push([1, 3, , 4]);
|
|
@@ -613,7 +620,14 @@ export var GenAgentChat = function (_a) {
|
|
|
613
620
|
var handleConfirmReset = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
614
621
|
return __generator(this, function (_a) {
|
|
615
622
|
switch (_a.label) {
|
|
616
|
-
case 0:
|
|
623
|
+
case 0:
|
|
624
|
+
// Clear input text and file attachments when restarting
|
|
625
|
+
setInputValue('');
|
|
626
|
+
setAttachments([]);
|
|
627
|
+
if (fileInputRef.current) {
|
|
628
|
+
fileInputRef.current.value = '';
|
|
629
|
+
}
|
|
630
|
+
return [4 /*yield*/, resetConversation(reCaptchaTokenRef.current)];
|
|
617
631
|
case 1:
|
|
618
632
|
_a.sent();
|
|
619
633
|
setSelectedFaqQuery(null); // Clear FAQ query on reset
|
|
@@ -633,7 +647,7 @@ export var GenAgentChat = function (_a) {
|
|
|
633
647
|
setShowMenu(false);
|
|
634
648
|
};
|
|
635
649
|
// Track window resize to update mobile detection
|
|
636
|
-
var
|
|
650
|
+
var _3 = useState(typeof window !== 'undefined' ? window.innerWidth : 1024), windowWidth = _3[0], setWindowWidth = _3[1];
|
|
637
651
|
// Automatically determine if should be fullscreen (mobile devices or widget mode or manual toggle or fullscreen mode)
|
|
638
652
|
var isFullscreen = useMemo(function () {
|
|
639
653
|
// If mode is fullscreen, always fullscreen
|
|
@@ -1060,7 +1074,7 @@ export var GenAgentChat = function (_a) {
|
|
|
1060
1074
|
}
|
|
1061
1075
|
return function (children) { return (_jsxs(GoogleReCaptchaProvider, { reCaptchaKey: reCaptchaKey || '', children: [_jsx(GoogleReCaptcha, { action: "genassist_chat", onVerify: handleReCaptchaVerify, refreshReCaptcha: false }), _jsx(_Fragment, { children: children })] })); };
|
|
1062
1076
|
}, [reCaptchaKey, handleReCaptchaVerify]);
|
|
1063
|
-
var renderChatComponent = function () { return (_jsxs("div", { style: containerStyle, "data-genassist-root": "true", children: [_jsx("style", { children: "\n @keyframes blink { 0% { opacity: 0.2; } 20% { opacity: 1; } 100% { opacity: 0.2; } }\n /* Hide scrollbars for the expanding textarea but keep scrolling */\n .ga-textarea-nosb { \n scrollbar-width: none; \n -ms-overflow-style: none; \n max-width: 100%;\n box-sizing: border-box;\n }\n .ga-textarea-nosb::-webkit-scrollbar { width: 0; height: 0; }\n /* Prevent zoom on mobile - ensure minimum 16px font size */\n @media (max-width: 768px) {\n .ga-textarea-nosb {\n font-size: 16px !important;\n }\n }\n /* Backlight sweep under content edge (GPU-friendly).\n Wider travel to fully reach both corners. */\n @keyframes ga-backlight-sweep2 { 0% { transform: translateX(-35%); } 100% { transform: translateX(105%); } }\n @keyframes ga-backlight-pulse { 0%,100% { opacity: 0.7; } 50% { opacity: 1; } }\n @keyframes ga-think-change { 0% { opacity: 0; transform: translateY(4px); } 100% { opacity: 1; transform: translateY(0); } }\n /* Hide reCAPTCHA badge */\n /* Ensure reCAPTCHA container is always hidden */\n .grecaptcha-badge {\n display: none !important;\n visibility: hidden !important;\n position: absolute !important;\n width: 0 !important;\n height: 0 !important;\n overflow: hidden !important;\n opacity: 0 !important;\n pointer-events: none !important;\n }\n /* Support for safe area insets - handled via inline styles on input container */\n " }), _jsxs("div", { style: headerStyle, ref: headerRef, children: [_jsxs("div", { style: logoContainerStyle, children: [_jsx("img", { src: (logoUrl === null || logoUrl === void 0 ? void 0 : logoUrl.trim()) || chatLogo, alt: "Logo", style: logoStyle }), _jsxs("div", { style: headerTitleContainerStyle, children: [_jsx("div", { style: headerTitleStyle, children: headerTitle }), _jsx("div", { style: headerSubtitleStyle, children: t('header.subtitle') })] })] }), _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '8px' }, children: [_jsx("button", { style: menuButtonStyle, onClick: handleMenuClick, title: t('menu.title'), children: _jsx(MoreVertical, { size: 24, color: "#111111" }) }), mode === 'floating' && (_jsx("button", { style: menuButtonStyle, onClick: function () { return setIsFloatingOpen(false); }, title: "Close chat", children: _jsx(X, { size: 24, color: "#111111" }) }))] })] }), showBacklight && (_jsx("div", { style: {
|
|
1077
|
+
var renderChatComponent = function () { return (_jsxs("div", { style: containerStyle, "data-genassist-root": "true", children: [_jsx("style", { children: "\n @keyframes blink { 0% { opacity: 0.2; } 20% { opacity: 1; } 100% { opacity: 0.2; } }\n /* Hide scrollbars for the expanding textarea but keep scrolling */\n .ga-textarea-nosb { \n scrollbar-width: none; \n -ms-overflow-style: none; \n max-width: 100%;\n box-sizing: border-box;\n }\n .ga-textarea-nosb::-webkit-scrollbar { width: 0; height: 0; }\n /* Prevent zoom on mobile - ensure minimum 16px font size */\n @media (max-width: 768px) {\n .ga-textarea-nosb {\n font-size: 16px !important;\n }\n }\n /* Backlight sweep under content edge (GPU-friendly).\n Wider travel to fully reach both corners. */\n @keyframes ga-backlight-sweep2 { 0% { transform: translateX(-35%); } 100% { transform: translateX(105%); } }\n @keyframes ga-backlight-pulse { 0%,100% { opacity: 0.7; } 50% { opacity: 1; } }\n @keyframes ga-think-change { 0% { opacity: 0; transform: translateY(4px); } 100% { opacity: 1; transform: translateY(0); } }\n /* Hide reCAPTCHA badge */\n /* Ensure reCAPTCHA container is always hidden */\n .grecaptcha-badge {\n display: none !important;\n visibility: hidden !important;\n position: absolute !important;\n width: 0 !important;\n height: 0 !important;\n overflow: hidden !important;\n opacity: 0 !important;\n pointer-events: none !important;\n }\n /* Support for safe area insets - handled via inline styles on input container */\n " }), _jsxs("div", { style: headerStyle, ref: headerRef, children: [_jsxs("div", { style: logoContainerStyle, children: [_jsx("img", { src: (logoUrl === null || logoUrl === void 0 ? void 0 : logoUrl.trim()) || chatLogo, alt: "Logo", style: logoStyle }), _jsxs("div", { style: headerTitleContainerStyle, children: [_jsx("div", { style: headerTitleStyle, children: headerTitle }), _jsx("div", { style: headerSubtitleStyle, children: description !== null && description !== void 0 ? description : t('header.subtitle') })] })] }), _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '8px' }, children: [_jsx("button", { style: menuButtonStyle, onClick: handleMenuClick, title: t('menu.title'), children: _jsx(MoreVertical, { size: 24, color: "#111111" }) }), mode === 'floating' && (_jsx("button", { style: menuButtonStyle, onClick: function () { return setIsFloatingOpen(false); }, title: "Close chat", children: _jsx(X, { size: 24, color: "#111111" }) }))] })] }), !noColorAnimation && showBacklight && (_jsx("div", { style: {
|
|
1064
1078
|
position: 'absolute',
|
|
1065
1079
|
left: 0,
|
|
1066
1080
|
right: 0,
|
|
@@ -1126,8 +1140,9 @@ export var GenAgentChat = function (_a) {
|
|
|
1126
1140
|
}, children: lang.name }, lang.code)); }) }))] })] })), _jsxs("div", { style: contentCardStyle, children: [_jsxs("div", { style: chatContainerStyle, ref: chatContainerRef, children: [(!conversationId || isFinalized) && messages.length === 0 && !hasUserMessages && (_jsx(LanguageSelector, { availableLanguages: availableLanguages, selectedLanguage: resolvedLanguage, onLanguageChange: handleLanguageChange, translations: translations, theme: theme })), (function () {
|
|
1127
1141
|
return null;
|
|
1128
1142
|
})(), (function () {
|
|
1129
|
-
// show welcome card
|
|
1130
|
-
var shouldShowSyntheticWelcome =
|
|
1143
|
+
// show welcome card (only when showWelcomeBeforeStart is true)
|
|
1144
|
+
var shouldShowSyntheticWelcome = showWelcomeBeforeStart &&
|
|
1145
|
+
!hasUserMessages &&
|
|
1131
1146
|
(messages.length === 0 || messages[0].speaker !== 'agent') &&
|
|
1132
1147
|
(Boolean(welcomeTitle) || Boolean(welcomeImageUrl) || Boolean(welcomeMessage));
|
|
1133
1148
|
if (!shouldShowSyntheticWelcome)
|
|
@@ -1163,7 +1178,7 @@ export var GenAgentChat = function (_a) {
|
|
|
1163
1178
|
willChange: 'transform, opacity',
|
|
1164
1179
|
color: '#6b7280',
|
|
1165
1180
|
fontSize: '13px',
|
|
1166
|
-
}, children: currentThinkingParts[currentThinkingPartIndex] || currentThinkingParts[currentThinkingParts.length - 1] }, "".concat(currentThinkingPartIndex, "-").concat(currentThinkingParts.join('|'))) })] })), _jsx("div", { ref: messagesEndRef })] }), (function () {
|
|
1181
|
+
}, children: currentThinkingParts[currentThinkingPartIndex] || currentThinkingParts[currentThinkingParts.length - 1] }, "".concat(currentThinkingPartIndex, "-").concat(currentThinkingParts.join('|'))) })] })), _jsx("div", { ref: messagesEndRef })] }), showWelcomeBeforeStart && (function () {
|
|
1167
1182
|
var showingSyntheticWelcome = !hasUserMessages &&
|
|
1168
1183
|
(messages.length === 0 || messages[0].speaker !== 'agent') &&
|
|
1169
1184
|
(Boolean(welcomeTitle) || Boolean(welcomeImageUrl) || Boolean(welcomeMessage));
|
|
@@ -1171,14 +1186,14 @@ export var GenAgentChat = function (_a) {
|
|
|
1171
1186
|
!hasUserMessages &&
|
|
1172
1187
|
(messages.length === 0 || messages[0].speaker !== 'agent') &&
|
|
1173
1188
|
!showingSyntheticWelcome);
|
|
1174
|
-
})() && (_jsx("div", { style: possibleQueriesContainerStyle, children: possibleQueries.map(function (query, index) { return (_jsx("button", { style: queryButtonStyle, onClick: function () { return handleQueryClick(query); }, disabled: isLoading || isAgentTyping, children: query }, index)); }) })), attachments.length > 0 && (_jsx("div", { style: { padding: '0 16px', marginBottom: '8px', display: 'flex', gap: '8px', flexWrap: 'wrap' }, children: attachments.map(function (att, index) { return (_jsx(AttachmentPreview, { file: att.file, onRemove: function () { return handleRemoveAttachment(att.file.name); }, uploading: uploadingFiles.has(att.file.name) }, index)); }) })), !conversationId || isFinalized ? (_jsx("div", { style: inputContainerStyle, children: _jsx("button", { type: "button", style: __assign(__assign({}, sendButtonStyle), { width: '100%', height: '48px', borderRadius: '16px', cursor: 'pointer', fontFamily: fontFamily, fontSize: fontSize }), onClick: handleStartConversation, disabled: isLoading, children: t('buttons.startConversation') }) })) : (_jsx("form", { onSubmit: handleSubmit, style: inputContainerStyle, children: _jsxs("div", { style: inputWrapperStyle, children: [_jsx("button", { type: "button", style: attachButtonStyle, title: "Attach", onClick: function () { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, disabled: isAgentTyping, children: _jsx(Paperclip, { size: 22, color: isAgentTyping ? "#b0b0b0" : "#757575" }) }), _jsx("input", { type: "file", multiple: true, ref: fileInputRef, style: { display: 'none' }, onChange: handleFileChange }), _jsx("textarea", { ref: textAreaRef, style: textAreaStyle, className: "ga-textarea-nosb", value: inputValue, onChange: function (e) { return setInputValue(e.target.value); }, onKeyDown: function (e) {
|
|
1189
|
+
})() && (_jsx("div", { style: possibleQueriesContainerStyle, children: possibleQueries.map(function (query, index) { return (_jsx("button", { style: queryButtonStyle, onClick: function () { return handleQueryClick(query); }, disabled: isLoading || isAgentTyping, children: query }, index)); }) })), useFile && attachments.length > 0 && (_jsx("div", { style: { padding: '0 16px', marginBottom: '8px', display: 'flex', gap: '8px', flexWrap: 'wrap' }, children: attachments.map(function (att, index) { return (_jsx(AttachmentPreview, { file: att.file, onRemove: function () { return handleRemoveAttachment(att.file.name); }, uploading: uploadingFiles.has(att.file.name) }, index)); }) })), !conversationId || isFinalized ? (_jsx("div", { style: inputContainerStyle, children: _jsx("button", { type: "button", style: __assign(__assign({}, sendButtonStyle), { width: '100%', height: '48px', borderRadius: '16px', cursor: 'pointer', fontFamily: fontFamily, fontSize: fontSize }), onClick: handleStartConversation, disabled: isLoading, children: t('buttons.startConversation') }) })) : (_jsx("form", { onSubmit: handleSubmit, style: inputContainerStyle, children: _jsxs("div", { style: inputWrapperStyle, children: [useFile && (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", style: attachButtonStyle, title: "Attach", onClick: function () { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, disabled: isAgentTyping, children: _jsx(Paperclip, { size: 22, color: isAgentTyping ? "#b0b0b0" : "#757575" }) }), _jsx("input", { type: "file", multiple: true, ref: fileInputRef, style: { display: 'none' }, onChange: handleFileChange, accept: allowedExtensions.join(',') || '*/*' })] })), _jsx("textarea", { ref: textAreaRef, style: textAreaStyle, className: "ga-textarea-nosb", value: inputValue, onChange: function (e) { return setInputValue(e.target.value); }, onKeyDown: function (e) {
|
|
1175
1190
|
if (e.key === 'Enter' && !e.shiftKey) {
|
|
1176
1191
|
e.preventDefault();
|
|
1177
1192
|
if ((inputValue.trim() !== '' || attachments.length > 0) && connectionState === 'connected' && !isAgentTyping) {
|
|
1178
1193
|
submitMessage();
|
|
1179
1194
|
}
|
|
1180
1195
|
}
|
|
1181
|
-
}, placeholder: inputPlaceholder, disabled: !conversationId || isFinalized || isAgentTyping, rows: 1 }), _jsx("div", { style: rightActionContainerStyle, children: inputValue.trim() === '' && attachments.length === 0 ? (_jsx(VoiceInput, { onTranscription: function (text) { return setInputValue(text); }, onError: handleVoiceError, baseUrl: baseUrl, apiKey: apiKey, theme: theme, disabled: isAgentTyping })) : (_jsx("button", { type: "submit", style: sendButtonStyle, disabled: (inputValue.trim() === '' && attachments.length === 0) || connectionState !== 'connected' || isAgentTyping, children: _jsx(ArrowUp, { size: 18, strokeWidth: 3, color: "#ffffff" }) })) })] }) }))] }), _jsx("div", { style: confirmOverlayStyle, children: _jsxs("div", { style: confirmDialogStyle, children: [_jsx("h3", { style: { fontFamily: fontFamily, marginTop: 0 }, children: t('dialog.resetConversation.title') }), _jsx("p", { style: { fontFamily: fontFamily, fontSize: fontSize }, children: t('dialog.resetConversation.message') }), _jsxs("div", { style: confirmButtonsStyle, children: [_jsx("button", { style: __assign(__assign({}, confirmButtonStyle(false)), { color: textColor }), onClick: handleCancelReset, children: t('buttons.cancel') }), _jsx("button", { style: confirmButtonStyle(true), onClick: handleConfirmReset, children: t('buttons.reset') })] })] }) })] })); };
|
|
1196
|
+
}, placeholder: inputPlaceholder, disabled: !conversationId || isFinalized || isAgentTyping, rows: 1 }), _jsx("div", { style: rightActionContainerStyle, children: useAudio && inputValue.trim() === '' && attachments.length === 0 ? (_jsx(VoiceInput, { onTranscription: function (text) { return setInputValue(text); }, onError: handleVoiceError, baseUrl: baseUrl, apiKey: apiKey, theme: theme, disabled: isAgentTyping })) : (_jsx("button", { type: "submit", style: sendButtonStyle, disabled: (inputValue.trim() === '' && attachments.length === 0) || connectionState !== 'connected' || isAgentTyping, children: _jsx(ArrowUp, { size: 18, strokeWidth: 3, color: "#ffffff" }) })) })] }) }))] }), _jsx("div", { style: confirmOverlayStyle, children: _jsxs("div", { style: confirmDialogStyle, children: [_jsx("h3", { style: { fontFamily: fontFamily, marginTop: 0 }, children: t('dialog.resetConversation.title') }), _jsx("p", { style: { fontFamily: fontFamily, fontSize: fontSize }, children: t('dialog.resetConversation.message') }), _jsxs("div", { style: confirmButtonsStyle, children: [_jsx("button", { style: __assign(__assign({}, confirmButtonStyle(false)), { color: textColor }), onClick: handleCancelReset, children: t('buttons.cancel') }), _jsx("button", { style: confirmButtonStyle(true), onClick: handleConfirmReset, children: t('buttons.reset') })] })] }) })] })); };
|
|
1182
1197
|
if (mode === 'floating') {
|
|
1183
1198
|
return (_jsxs(_Fragment, { children: [!isFloatingOpen && (_jsx(ChatBubble, { showChat: isFloatingOpen, onClick: function () { return setIsFloatingOpen(function (prev) { return !prev; }); }, primaryColor: primaryColor, style: getPositionStyles() })), isFloatingOpen && (_jsx("div", { style: floatingContainerStyle, "data-genassist-container": "floating", children: renderWithReCaptcha(renderChatComponent()) }))] }));
|
|
1184
1199
|
}
|
|
@@ -1187,4 +1202,4 @@ export var GenAgentChat = function (_a) {
|
|
|
1187
1202
|
}
|
|
1188
1203
|
return renderWithReCaptcha(renderChatComponent());
|
|
1189
1204
|
};
|
|
1190
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuQWdlbnRDaGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvR2VuQWdlbnRDaGF0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDbEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQVEsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNqSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sUUFBUSxNQUFNLHlCQUF5QixDQUFDO0FBRS9DLDBDQUEwQztBQUUxQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLDBCQUEwQixHQUMzQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFckYsTUFBTSxDQUFDLElBQU0sWUFBWSxHQUFnQyxVQUFDLEVBb0J6RDtRQW5CQyxP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Q0osQ0FBQztJQUVELElBQUksSUFBSSxLQUFLLFlBQVksRUFBRSxDQUFDO1FBQzFCLE9BQU8sQ0FDTCxjQUFLLEtBQUssRUFBRSxzQkFBc0IsOEJBQTJCLFlBQVksWUFDdEUsbUJBQW1CLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxHQUN2QyxDQUNQLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VNZW1vLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IENoYXRNZXNzYWdlQ29tcG9uZW50LCBBdHRhY2htZW50UHJldmlldyB9IGZyb20gJy4vQ2hhdE1lc3NhZ2UnO1xuaW1wb3J0IHsgdXNlQ2hhdCB9IGZyb20gJy4uL2hvb2tzL3VzZUNoYXQnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIEdlbkFnZW50Q2hhdFByb3BzLCBTY2hlZHVsZUl0ZW0sIEF0dGFjaG1lbnQsIEF0dGFjaG1lbnRXaXRoRmlsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFZvaWNlSW5wdXQgfSBmcm9tICcuL1ZvaWNlSW5wdXQnO1xuaW1wb3J0IHsgQXVkaW9TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXVkaW9TZXJ2aWNlJztcbmltcG9ydCB7IFNlbmQsIFBhcGVyY2xpcCwgTW9yZVZlcnRpY2FsLCBSZWZyZXNoQ3csIEdsb2JlLCBYLCBBcnJvd1VwLCBNYXhpbWl6ZTIsIE1pbmltaXplMiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyBDaGF0QnViYmxlIH0gZnJvbSAnLi9DaGF0QnViYmxlJztcbmltcG9ydCB7IExhbmd1YWdlU2VsZWN0b3IgfSBmcm9tICcuL0xhbmd1YWdlU2VsZWN0b3InO1xuaW1wb3J0IGNoYXRMb2dvIGZyb20gJy4uL2Fzc2V0cy9jaGF0LWxvZ28ucG5nJztcblxuLy8gVHlwZSBmb3IgYXR0YWNobWVudCB3aXRoIGZpbGUgcmVmZXJlbmNlXG5cbmltcG9ydCB7XG4gIHJlc29sdmVMYW5ndWFnZSxcbiAgbWVyZ2VUcmFuc2xhdGlvbnMsXG4gIGdldFRyYW5zbGF0aW9uU3RyaW5nLFxuICBnZXRUcmFuc2xhdGlvbkFycmF5LFxuICBnZXRUcmFuc2xhdGlvbnNGb3JMYW5ndWFnZSxcbn0gZnJvbSAnLi4vdXRpbHMvaTE4bic7XG5pbXBvcnQgeyBHb29nbGVSZUNhcHRjaGEsIEdvb2dsZVJlQ2FwdGNoYVByb3ZpZGVyIH0gZnJvbSAncmVhY3QtZ29vZ2xlLXJlY2FwdGNoYS12Myc7XG5cbmV4cG9ydCBjb25zdCBHZW5BZ2VudENoYXQ6IFJlYWN0LkZDPEdlbkFnZW50Q2hhdFByb3BzPiA9ICh7XG4gIGJhc2VVcmwsXG4gIGFwaUtleSxcbiAgdGVuYW50LFxuICBtZXRhZGF0YSxcbiAgdXNlV3MgPSB0cnVlLFxuICBvbkVycm9yLFxuICBvblRha2VvdmVyLFxuICBvbkZpbmFsaXplLFxuICB0aGVtZSxcbiAgaGVhZGVyVGl0bGUgPSAnR2VuYXNzaXN0JyxcbiAgcGxhY2Vob2xkZXIsXG4gIGFnZW50TmFtZSxcbiAgbG9nb1VybCxcbiAgbW9kZSA9ICdlbWJlZGRlZCcsXG4gIGZsb2F0aW5nQ29uZmlnID0ge30sXG4gIGxhbmd1YWdlLFxuICB0cmFuc2xhdGlvbnM6IGN1c3RvbVRyYW5zbGF0aW9ucyxcbiAgcmVDYXB0Y2hhS2V5LFxuICB3aWRnZXQgPSBmYWxzZSxcbn0pOiBSZWFjdC5SZWFjdEVsZW1lbnQgPT4ge1xuICAvLyBMYW5ndWFnZSBzZWxlY3Rpb24gc3RhdGUgKHdpdGggbG9jYWxTdG9yYWdlIHBlcnNpc3RlbmNlKVxuICBjb25zdCBbc2VsZWN0ZWRMYW5ndWFnZSwgc2V0U2VsZWN0ZWRMYW5ndWFnZV0gPSB1c2VTdGF0ZTxzdHJpbmc+KCgpID0+IHtcbiAgICBpZiAobGFuZ3VhZ2UpIHJldHVybiBsYW5ndWFnZTtcbiAgICBjb25zdCBzdG9yZWQgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdnZW5hc3Npc3RfbGFuZ3VhZ2UnKSA6IG51bGw7XG4gICAgaWYgKHN0b3JlZCkgcmV0dXJuIHN0b3JlZDtcbiAgICByZXR1cm4gcmVzb2x2ZUxhbmd1YWdlKCk7XG4gIH0pO1xuXG4gIC8vIFNhdmUgbGFuZ3VhZ2UgdG8gbG9jYWxTdG9yYWdlIHdoZW4gaXQgY2hhbmdlc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAhbGFuZ3VhZ2UpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdnZW5hc3Npc3RfbGFuZ3VhZ2UnLCBzZWxlY3RlZExhbmd1YWdlKTtcbiAgICB9XG4gIH0sIFtzZWxlY3RlZExhbmd1YWdlLCBsYW5ndWFnZV0pO1xuXG4gIC8vIFN0YXRlIGZvciB0cmFja2luZyBzZWxlY3RlZCBGQVEgcXVlcnlcbiAgY29uc3QgW3NlbGVjdGVkRmFxUXVlcnksIHNldFNlbGVjdGVkRmFxUXVlcnldID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gUmVzb2x2ZSBsYW5ndWFnZTogcHJvcCA+IHNlbGVjdGVkID4gYnJvd3NlciA+ICdlbidcbiAgY29uc3QgcmVzb2x2ZWRMYW5ndWFnZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChsYW5ndWFnZSkgcmV0dXJuIGxhbmd1YWdlO1xuICAgIHJldHVybiBzZWxlY3RlZExhbmd1YWdlIHx8IHJlc29sdmVMYW5ndWFnZSgpIHx8ICdlbic7XG4gIH0sIFtsYW5ndWFnZSwgc2VsZWN0ZWRMYW5ndWFnZV0pO1xuXG4gIC8vIE1lcmdlIGxhbmd1YWdlIGFuZCBGQVEgcXVlcnkgaW50byBtZXRhZGF0YVxuICBjb25zdCBtZXRhZGF0YVdpdGhMYW5ndWFnZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi4obWV0YWRhdGEgfHwge30pLFxuICAgICAgbGFuZ3VhZ2U6IHJlc29sdmVkTGFuZ3VhZ2UsXG4gICAgICAuLi4oc2VsZWN0ZWRGYXFRdWVyeSA/IHsgZmFxX3F1ZXJ5OiBzZWxlY3RlZEZhcVF1ZXJ5IH0gOiB7fSksXG4gICAgfTtcbiAgfSwgW21ldGFkYXRhLCByZXNvbHZlZExhbmd1YWdlLCBzZWxlY3RlZEZhcVF1ZXJ5XSk7XG5cbiAgLy8gR2V0IHRyYW5zbGF0aW9ucyBiYXNlZCBvbiByZXNvbHZlZCBsYW5ndWFnZSwgdGhlbiBtZXJnZSB3aXRoIGN1c3RvbSB0cmFuc2xhdGlvbnNcbiAgY29uc3QgdHJhbnNsYXRpb25zID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gRmlyc3QgZ2V0IGJhc2UgdHJhbnNsYXRpb25zIGZvciB0aGUgbGFuZ3VhZ2VcbiAgICBjb25zdCBiYXNlVHJhbnNsYXRpb25zID0gZ2V0VHJhbnNsYXRpb25zRm9yTGFuZ3VhZ2UocmVzb2x2ZWRMYW5ndWFnZSk7XG4gICAgLy8gVGhlbiBtZXJnZSB3aXRoIGFueSBjdXN0b20gdHJhbnNsYXRpb25zIHByb3ZpZGVkXG4gICAgcmV0dXJuIG1lcmdlVHJhbnNsYXRpb25zKGN1c3RvbVRyYW5zbGF0aW9ucywgYmFzZVRyYW5zbGF0aW9ucyk7XG4gIH0sIFtyZXNvbHZlZExhbmd1YWdlLCBjdXN0b21UcmFuc2xhdGlvbnNdKTtcblxuICAvLyBUcmFuc2xhdGlvbiBoZWxwZXIgZnVuY3Rpb25cbiAgY29uc3QgdCA9IChrZXk6IHN0cmluZywgZmFsbGJhY2s/OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIHJldHVybiBnZXRUcmFuc2xhdGlvblN0cmluZyhrZXksIHRyYW5zbGF0aW9ucywgZmFsbGJhY2spO1xuICB9O1xuXG4gIC8vIEdldCB0cmFuc2xhdGVkIHBsYWNlaG9sZGVyIG9yIHVzZSBwcm92aWRlZC9kZWZhdWx0XG4gIC8vIE1ha2UgaXQgcmVhY3RpdmUgdG8gbGFuZ3VhZ2UgY2hhbmdlc1xuICBjb25zdCBpbnB1dFBsYWNlaG9sZGVyID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gSWYgcGxhY2Vob2xkZXIgcHJvcCBpcyBleHBsaWNpdGx5IHByb3ZpZGVkLCB1c2UgaXRcbiAgICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgdHJhbnNsYXRpb24gd2hpY2ggd2lsbCB1cGRhdGUgd2l0aCBsYW5ndWFnZSBjaGFuZ2VzXG4gICAgcmV0dXJuIHBsYWNlaG9sZGVyIHx8IHQoJ2lucHV0LnBsYWNlaG9sZGVyJywgJ0FzayBhIHF1ZXN0aW9uJyk7XG4gIH0sIFtwbGFjZWhvbGRlciwgdHJhbnNsYXRpb25zXSk7XG4gIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3Nob3dSZXNldENvbmZpcm0sIHNldFNob3dSZXNldENvbmZpcm1dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd01lbnUsIHNldFNob3dNZW51XSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Nob3dMYW5ndWFnZURyb3Bkb3duLCBzZXRTaG93TGFuZ3VhZ2VEcm9wZG93bl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc1BsYXlpbmdBdWRpbywgc2V0SXNQbGF5aW5nQXVkaW9dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNGbG9hdGluZ09wZW4sIHNldElzRmxvYXRpbmdPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2F0dGFjaG1lbnRzLCBzZXRBdHRhY2htZW50c10gPSB1c2VTdGF0ZTxBdHRhY2htZW50V2l0aEZpbGVbXT4oW10pO1xuICBjb25zdCBbdXBsb2FkaW5nRmlsZXMsIHNldFVwbG9hZGluZ0ZpbGVzXSA9IHVzZVN0YXRlPFNldDxzdHJpbmc+PihuZXcgU2V0KCkpO1xuICBjb25zdCBtZW51UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCB0ZXh0QXJlYVJlZiA9IHVzZVJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PihudWxsKTtcbiAgY29uc3QgaGVhZGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgW2hlYWRlckhlaWdodCwgc2V0SGVhZGVySGVpZ2h0XSA9IHVzZVN0YXRlKDU2KTtcbiAgY29uc3QgW3Nob3dCYWNrbGlnaHQsIHNldFNob3dCYWNrbGlnaHRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNGdWxsc2NyZWVuVG9nZ2xlZCwgc2V0SXNGdWxsc2NyZWVuVG9nZ2xlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgLy8gZGVmYXVsdCB0aGlua2luZyBtZXNzYWdlcyBpZiBub25lIHByb3ZpZGVkIGJ5IHdvcmtmbG93XG4gIGNvbnN0IERFRkFVTFRfVEhJTktJTkdfTUVTU0FHRVMgPSB1c2VNZW1vKFxuICAgICgpID0+IGdldFRyYW5zbGF0aW9uQXJyYXkoJ3RoaW5raW5nLm1lc3NhZ2VzJywgdHJhbnNsYXRpb25zLCBbXG4gICAgICBcIlRoaW5raW5n4oCmXCIsXG4gICAgICBcIkFuYWx5emluZyB5b3VyIHF1ZXN0aW9u4oCmXCIsXG4gICAgICBcIlNlYXJjaGluZyBrbm93bGVkZ2XigKZcIixcbiAgICAgIFwiUHVsbGluZyByZWxldmFudCBpbmZv4oCmXCIsXG4gICAgICBcIkRyYWZ0aW5nIHRoZSBhbnN3ZXLigKZcIixcbiAgICAgIFwiRG91Ymxl4oCRY2hlY2tpbmcgZGV0YWlsc+KAplwiLFxuICAgICAgXCJUeWluZyBpdCB0b2dldGhlcuKAplwiLFxuICAgICAgXCJBbG1vc3QgdGhlcmXigKZcIixcbiAgICBdKSxcbiAgICBbdHJhbnNsYXRpb25zXVxuICApO1xuICBjb25zdCBbY3VycmVudFRoaW5raW5nUGFydHMsIHNldEN1cnJlbnRUaGlua2luZ1BhcnRzXSA9IHVzZVN0YXRlPHN0cmluZ1tdPihbXSk7XG4gIGNvbnN0IFtjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgsIHNldEN1cnJlbnRUaGlua2luZ1BhcnRJbmRleF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGlzTG9hZGluZyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICB1cGxvYWRGaWxlLFxuICAgIHJlc2V0Q29udmVyc2F0aW9uLFxuICAgIHN0YXJ0Q29udmVyc2F0aW9uLFxuICAgIGNvbm5lY3Rpb25TdGF0ZSxcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBwb3NzaWJsZVF1ZXJpZXMsXG4gICAgaXNGaW5hbGl6ZWQsXG4gICAgaXNBZ2VudFR5cGluZyxcbiAgICBhZGRGZWVkYmFjayxcbiAgICB3ZWxjb21lVGl0bGUsXG4gICAgd2VsY29tZUltYWdlVXJsLFxuICAgIHdlbGNvbWVNZXNzYWdlLFxuICAgIHRoaW5raW5nUGhyYXNlcyxcbiAgICB0aGlua2luZ0RlbGF5TXMsXG4gIH0gPSB1c2VDaGF0KHtcbiAgICBiYXNlVXJsLFxuICAgIGFwaUtleSxcbiAgICB0ZW5hbnQsXG4gICAgbWV0YWRhdGE6IG1ldGFkYXRhV2l0aExhbmd1YWdlLFxuICAgIHVzZVdzLFxuICAgIGxhbmd1YWdlOiByZXNvbHZlZExhbmd1YWdlLFxuICAgIG9uRXJyb3IsXG4gICAgb25UYWtlb3ZlcixcbiAgICBvbkZpbmFsaXplXG4gIH0pO1xuICBjb25zdCBtZXNzYWdlc0VuZFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGF1ZGlvU2VydmljZSA9IHVzZVJlZjxBdWRpb1NlcnZpY2UgfCBudWxsPihudWxsKTtcbiAgY29uc3QgaGFzQW5jaG9yZWRIaXN0b3J5ID0gdXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgY2hhdENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHJlQ2FwdGNoYVRva2VuUmVmID0gdXNlUmVmPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY29uc3QgaXNVc2VyQXRCb3R0b21SZWYgPSB1c2VSZWYodHJ1ZSk7XG5cbiAgY29uc3QgYW5jaG9ySGlzdG9yeSA9ICgpID0+IHtcbiAgICBjb25zdCBlbCA9IGNoYXRDb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsIHx8ICFtZXNzYWdlcy5sZW5ndGggfHwgaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQpIHJldHVybjtcbiAgICBpZiAoZWwuY2xpZW50SGVpZ2h0ID09PSAwKSByZXR1cm47IC8vIGhpZGRlbiwgd2FpdCBmb3IgdmlzaWJpbGl0eS9zaXplXG4gICAgZWwuc2Nyb2xsVG9wID0gZWwuc2Nyb2xsSGVpZ2h0O1xuICAgIGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50ID0gdHJ1ZTtcbiAgICBpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBzY3JvbGxUb0JvdHRvbSA9IChiZWhhdmlvcjogU2Nyb2xsQmVoYXZpb3IgPSAnc21vb3RoJywgZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNoYXRDb250YWluZXJSZWYuY3VycmVudDtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzRW5kUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWVsKSByZXR1cm47XG4gICAgXG4gICAgLy8gT25seSBzY3JvbGwgaWYgdXNlciBpcyBhdCBib3R0b20gb3IgaWYgZm9yY2VkIChlLmcuLCBmb3IgYWdlbnQgdHlwaW5nKVxuICAgIGlmICghZm9yY2UgJiYgIWlzVXNlckF0Qm90dG9tUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZG9TY3JvbGwgPSAoKSA9PiB7XG4gICAgICBjb250YWluZXIuc2Nyb2xsVG8oeyB0b3A6IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQsIGJlaGF2aW9yIH0pO1xuICAgICAgaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCA9IHRydWU7XG4gICAgfTtcbiAgICBpZiAoYmVoYXZpb3IgPT09ICdhdXRvJykge1xuICAgICAgZG9TY3JvbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGRvU2Nyb2xsKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFzVXNlck1lc3NhZ2VzID0gbWVzc2FnZXMuc29tZShtZXNzYWdlID0+IG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2N1c3RvbWVyJyk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhdWRpb1NlcnZpY2UuY3VycmVudCA9IG5ldyBBdWRpb1NlcnZpY2UoeyBiYXNlVXJsLCBhcGlLZXkgfSk7XG4gIH0sIFtiYXNlVXJsLCBhcGlLZXldKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXMubGVuZ3RoKSByZXR1cm47XG4gICAgaWYgKGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50KSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbSgnc21vb3RoJywgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbmNob3JIaXN0b3J5KCk7XG4gICAgfVxuICB9LCBbbWVzc2FnZXNdKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNBZ2VudFR5cGluZykgcmV0dXJuO1xuICAgIC8vIEZvcmNlIHNjcm9sbCB3aGVuIGFnZW50IGlzIHR5cGluZ1xuICAgIHNjcm9sbFRvQm90dG9tKCdhdXRvJywgdHJ1ZSk7XG4gIH0sIFtpc0FnZW50VHlwaW5nLCBjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgsIGN1cnJlbnRUaGlua2luZ1BhcnRzLmxlbmd0aF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQgPSBmYWxzZTtcbiAgfSwgW2NvbnZlcnNhdGlvbklkXSk7XG5cbiAgLy8gRW5zdXJlIGNoYXQgaXMgYWx3YXlzIG9wZW4gd2hlbiBtb2RlIGlzIGZ1bGxzY3JlZW5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobW9kZSA9PT0gJ2Z1bGxzY3JlZW4nICYmICFpc0Zsb2F0aW5nT3Blbikge1xuICAgICAgc2V0SXNGbG9hdGluZ09wZW4odHJ1ZSk7XG4gICAgfVxuICB9LCBbbW9kZSwgaXNGbG9hdGluZ09wZW5dKTtcblxuICAvLyBTY3JvbGwgdG8gYm90dG9tIHdoZW4gY2hhdCBpcyByZW9wZW5lZCBpbiBmbG9hdGluZyBtb2RlXG4gIGNvbnN0IHByZXZJc0Zsb2F0aW5nT3BlblJlZiA9IHVzZVJlZihpc0Zsb2F0aW5nT3Blbik7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gT25seSB0cmlnZ2VyIHdoZW4gY2hhdCB0cmFuc2l0aW9ucyBmcm9tIGNsb3NlZCB0byBvcGVuXG4gICAgaWYgKChtb2RlID09PSAnZmxvYXRpbmcnIHx8IG1vZGUgPT09ICdmdWxsc2NyZWVuJykgJiYgaXNGbG9hdGluZ09wZW4gJiYgIXByZXZJc0Zsb2F0aW5nT3BlblJlZi5jdXJyZW50ICYmIG1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIFJlc2V0IHRoZSBhbmNob3IgZmxhZyBzbyBpdCBjYW4gc2Nyb2xsIHRvIGJvdHRvbVxuICAgICAgaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIGlzVXNlckF0Qm90dG9tUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgXG4gICAgICAvLyBXYWl0IGZvciBjb250YWluZXIgdG8gYmUgdmlzaWJsZSBhbmQgdGhlbiBzY3JvbGxcbiAgICAgIGNvbnN0IHNjcm9sbFdoZW5WaXNpYmxlID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBjaGF0Q29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHNjcm9sbFdoZW5WaXNpYmxlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIGlmIGNvbnRhaW5lciBpcyB2aXNpYmxlXG4gICAgICAgIGlmIChjb250YWluZXIuY2xpZW50SGVpZ2h0ID09PSAwKSB7XG4gICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHNjcm9sbFdoZW5WaXNpYmxlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFNjcm9sbCB0byBib3R0b21cbiAgICAgICAgY29udGFpbmVyLnNjcm9sbFRvcCA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQ7XG4gICAgICAgIGhhc0FuY2hvcmVkSGlzdG9yeS5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCA9IHRydWU7XG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBVc2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHRvIHdhaXQgZm9yIHJlbmRlclxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHNjcm9sbFdoZW5WaXNpYmxlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBwcmV2SXNGbG9hdGluZ09wZW5SZWYuY3VycmVudCA9IGlzRmxvYXRpbmdPcGVuO1xuICB9LCBbaXNGbG9hdGluZ09wZW4sIG1vZGVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXMubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgZWwgPSBjaGF0Q29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuXG4gICAgLy8gT2JzZXJ2ZSBzaXplL3Zpc2liaWxpdHkgY2hhbmdlcyB0byBhbmNob3IgY2hhdCB2aWV3LlxuICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIGlmIChpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGFuY2hvckhpc3RvcnkoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGVsKTtcblxuICAgIGFuY2hvckhpc3RvcnkoKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICByZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfTtcbiAgfSwgW21lc3NhZ2VzXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBjaGF0Q29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICAgIGNvbnN0IGlzQXRCb3R0b20gPSAodGhyZXNob2xkOiBudW1iZXIgPSAxMDApOiBib29sZWFuID0+IHtcbiAgICAgIGlmICghY29udGFpbmVyKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyO1xuICAgICAgcmV0dXJuIHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodCA8PSB0aHJlc2hvbGQ7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVTY3JvbGwgPSAoKSA9PiB7XG4gICAgICBpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50ID0gaXNBdEJvdHRvbSgpO1xuICAgIH07XG4gICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbCwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgIGhhbmRsZVNjcm9sbCgpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpO1xuICAgIH07XG4gIH0sIFtdKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZUhlYWRlckhlaWdodCA9ICgpID0+IHtcbiAgICAgIHNldEhlYWRlckhlaWdodChoZWFkZXJSZWYuY3VycmVudD8ub2Zmc2V0SGVpZ2h0IHx8IDU2KTtcbiAgICB9O1xuICAgIHVwZGF0ZUhlYWRlckhlaWdodCgpO1xuICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHVwZGF0ZUhlYWRlckhlaWdodCgpKTtcbiAgICBpZiAoaGVhZGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoaGVhZGVyUmVmLmN1cnJlbnQpO1xuICAgIH1cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlSGVhZGVySGVpZ2h0KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZUhlYWRlckhlaWdodCk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIC8vIFNtb290aGx5IHNob3cvaGlkZSB0aGUgYmFja2xpZ2h0IHdoaWxlIHRoZSBhZ2VudCBpcyB0eXBpbmdcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNBZ2VudFR5cGluZykge1xuICAgICAgc2V0U2hvd0JhY2tsaWdodCh0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdCA9IHNldFRpbWVvdXQoKCkgPT4gc2V0U2hvd0JhY2tsaWdodChmYWxzZSksIDQyMCk7IC8vIGFsbG93IGZhZGUtb3V0XG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0KTtcbiAgfSwgW2lzQWdlbnRUeXBpbmddKTtcblxuICAvLyBTaG93IFwidGhpbmtpbmdcIiBwaHJhc2VzIHdoaWxlIGFnZW50IGlzIHR5cGluZ1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNBZ2VudFR5cGluZykge1xuICAgICAgc2V0Q3VycmVudFRoaW5raW5nUGFydHMoW10pO1xuICAgICAgc2V0Q3VycmVudFRoaW5raW5nUGFydEluZGV4KDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJhbmRvbWx5IHNlbGVjdCBhIHBocmFzZSBmcm9tIHRoZSBsaXN0XG4gICAgY29uc3QgbGlzdCA9ICh0aGlua2luZ1BocmFzZXMgJiYgdGhpbmtpbmdQaHJhc2VzLmxlbmd0aCA+IDApID8gdGhpbmtpbmdQaHJhc2VzIDogREVGQVVMVF9USElOS0lOR19NRVNTQUdFUztcbiAgICBjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGxpc3QubGVuZ3RoKTtcbiAgICBjb25zdCBzZWxlY3RlZFBocmFzZSA9IGxpc3RbcmFuZG9tSW5kZXhdO1xuXG4gICAgLy8gU3BsaXQgYnkgfCB0byBnZXQgcGFydHMsIG9yIHVzZSB0aGUgcGhyYXNlIGFzIGEgc2luZ2xlIHBhcnQgaWYgbm8gfCBmb3VuZFxuICAgIGNvbnN0IHBhcnRzID0gc2VsZWN0ZWRQaHJhc2UuaW5jbHVkZXMoJ3wnKSBcbiAgICAgID8gc2VsZWN0ZWRQaHJhc2Uuc3BsaXQoJ3wnKS5tYXAocGFydCA9PiBwYXJ0LnRyaW0oKSkuZmlsdGVyKHBhcnQgPT4gcGFydC5sZW5ndGggPiAwKVxuICAgICAgOiBbc2VsZWN0ZWRQaHJhc2UudHJpbSgpXTtcblxuICAgIC8vIEluaXRpYWxpemUgd2l0aCBmaXJzdCBwYXJ0XG4gICAgc2V0Q3VycmVudFRoaW5raW5nUGFydHMocGFydHMpO1xuICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRJbmRleCgwKTtcblxuICAgIC8vIElmIHRoZXJlJ3Mgb25seSBvbmUgcGFydCwgbm8gbmVlZCB0byBwcm9ncmVzc1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPD0gMSkgcmV0dXJuO1xuXG4gICAgLy8gUHJvZ3Jlc3MgdGhyb3VnaCBwYXJ0cyB3aXRoIGRlbGF5LCBidXQgc3RvcCBhdCB0aGUgbGFzdCBvbmVcbiAgICBjb25zdCByb3REZWxheSA9IE1hdGgubWF4KDI1MCwgdGhpbmtpbmdEZWxheU1zIHx8IDEwMDApO1xuICAgIGNvbnN0IHRpbWVvdXRJZHM6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+W10gPSBbXTtcblxuICAgIC8vIFNldCB1cCB0aW1lb3V0cyBmb3IgZWFjaCBwYXJ0IHRyYW5zaXRpb25cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgc2V0Q3VycmVudFRoaW5raW5nUGFydEluZGV4KGkpO1xuICAgICAgfSwgcm90RGVsYXkgKiBpKTtcbiAgICAgIHRpbWVvdXRJZHMucHVzaCh0aW1lb3V0SWQpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB0aW1lb3V0SWRzLmZvckVhY2goaWQgPT4gY2xlYXJUaW1lb3V0KGlkKSk7XG4gICAgfTtcbiAgfSwgW2lzQWdlbnRUeXBpbmcsIHRoaW5raW5nUGhyYXNlcywgdGhpbmtpbmdEZWxheU1zXSk7XG5cbiAgY29uc3Qgc3VibWl0TWVzc2FnZSA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoaW5wdXRWYWx1ZS50cmltKCkgPT09ICcnICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGlmIChpc0FnZW50VHlwaW5nKSByZXR1cm47IC8vIFByZXZlbnQgc2VuZGluZyB3aGlsZSBhZ2VudCBpcyB0aGlua2luZy90eXBpbmdcbiAgICBjb25zdCB0ZXh0VG9TZW5kID0gaW5wdXRWYWx1ZTtcbiAgICAvLyBOT1RFUzogd2UgZG9uJ3QgdXBsb2FkIGZpbGVzIGFueW1vcmUsIHdlIGp1c3Qgc2VuZCB0aGUgY29udGVudCBibG9ja3NcbiAgICBjb25zdCBmaWxlc1RvVXBsb2FkID0gYXR0YWNobWVudHMubWFwKGEgPT4gYS5maWxlKTtcbiAgICAvLyBjb25zdCBmaWxlQXR0YWNobWVudHMgPSBhdHRhY2htZW50cy5tYXAoYSA9PiBhLmF0dGFjaG1lbnQpO1xuXG4gICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgc2V0QXR0YWNobWVudHMoW10pO1xuICAgIC8vIFJlc2V0IHRoZSBmaWxlIGlucHV0IHZhbHVlIHNvIHRoZSBzYW1lIGZpbGUgY2FuIGJlIHNlbGVjdGVkIGFnYWluXG4gICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBJbmNsdWRlIEZBUSBxdWVyeSBpbiBtZXRhZGF0YSBpZiBvbmUgd2FzIHByZXZpb3VzbHkgc2VsZWN0ZWRcbiAgICAgIGNvbnN0IGV4dHJhTWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgICAgaWYgKHNlbGVjdGVkRmFxUXVlcnkpIHtcbiAgICAgICAgZXh0cmFNZXRhZGF0YS5mYXFfcXVlcnkgPSBzZWxlY3RlZEZhcVF1ZXJ5O1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZXNUb1VwbG9hZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGV4dHJhTWV0YWRhdGEuYXR0YWNobWVudHMgPSBhdHRhY2htZW50cy5tYXAoYSA9PiBhLmF0dGFjaG1lbnQpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBzZW5kIG1lc3NhZ2Ugd2l0aCBhdHRhY2htZW50c1xuICAgICAgYXdhaXQgc2VuZE1lc3NhZ2UodGV4dFRvU2VuZCwgZmlsZXNUb1VwbG9hZCwgZXh0cmFNZXRhZGF0YSwgcmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSBhc3luYyAoZTogUmVhY3QuRm9ybUV2ZW50KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGF3YWl0IHN1Ym1pdE1lc3NhZ2UoKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVRdWlja0FjdGlvbiA9IGFzeW5jICh0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIXRleHQudHJpbSgpKSByZXR1cm47XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcpIHJldHVybjsgLy8gUHJldmVudCBzZW5kaW5nIHdoaWxlIGFnZW50IGlzIHRoaW5raW5nL3R5cGluZ1xuICAgIHRyeSB7XG4gICAgICAvLyBJbmNsdWRlIEZBUSBxdWVyeSBpbiBtZXRhZGF0YSBpZiBvbmUgd2FzIHByZXZpb3VzbHkgc2VsZWN0ZWRcbiAgICAgIGNvbnN0IGV4dHJhTWV0YWRhdGEgPSBzZWxlY3RlZEZhcVF1ZXJ5ID8geyBmYXFfcXVlcnk6IHNlbGVjdGVkRmFxUXVlcnkgfSA6IHVuZGVmaW5lZDtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHRleHQsIFtdLCBleHRyYU1ldGFkYXRhLCByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlIHF1aWNrIGFjdGlvbiBlcnJvcnMgdG8gYXZvaWQgaW50ZXJydXB0aW5nIHRoZSBmbG93XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVNjaGVkdWxlQ29uZmlybSA9IGFzeW5jIChzY2hlZHVsZTogU2NoZWR1bGVJdGVtKSA9PiB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IGBTY2hlZHVsZSBjb25maXJtZWQgd2l0aCAke3NjaGVkdWxlLnJlc3RhdXJhbnRzLmxlbmd0aH0gcmVzdGF1cmFudHNgO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZShzdW1tYXJ5LCBbXSwgeyBjb25maXJtU2NoZWR1bGU6IEpTT04uc3RyaW5naWZ5KHNjaGVkdWxlKSB9LCByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZpbGVDaGFuZ2UgPSBhc3luYyAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBpZiAoZS50YXJnZXQuZmlsZXMgJiYgZS50YXJnZXQuZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbmV3RmlsZXMgPSBBcnJheS5mcm9tKGUudGFyZ2V0LmZpbGVzKTtcbiAgICAgIFxuICAgICAgLy8gSW5pdGlhbGl6ZSBhdHRhY2htZW50cyB3aXRoIGZpbGVzIChhdHRhY2htZW50IHJlZmVyZW5jZSB3aWxsIGJlIG51bGwgaW5pdGlhbGx5KVxuICAgICAgY29uc3QgbmV3QXR0YWNobWVudHM6IEF0dGFjaG1lbnRXaXRoRmlsZVtdID0gbmV3RmlsZXMubWFwKGZpbGUgPT4gKHtmaWxlLCBhdHRhY2htZW50OiBudWxsfSkpO1xuICAgICAgc2V0QXR0YWNobWVudHMocHJldiA9PiBbLi4ucHJldiwgLi4ubmV3QXR0YWNobWVudHNdKTtcblxuICAgICAgY29uc3QgbmV3VXBsb2FkaW5nRmlsZXMgPSBuZXcgU2V0KHVwbG9hZGluZ0ZpbGVzKTtcbiAgICAgIG5ld0ZpbGVzLmZvckVhY2goZmlsZSA9PiBuZXdVcGxvYWRpbmdGaWxlcy5hZGQoZmlsZS5uYW1lKSk7XG4gICAgICBzZXRVcGxvYWRpbmdGaWxlcyhuZXdVcGxvYWRpbmdGaWxlcyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFVwbG9hZCBmaWxlcyBhbmQgZ2V0IGF0dGFjaG1lbnQgcmVmZXJlbmNlc1xuICAgICAgICBjb25zdCB1cGxvYWRSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgbmV3RmlsZXMubWFwKGFzeW5jIChmaWxlLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGF0dGFjaG1lbnQ6IGF3YWl0IHVwbG9hZEZpbGUoZmlsZSksXG4gICAgICAgICAgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGEgbWFwIG9mIGZpbGUgcmVmZXJlbmNlIChuYW1lICsgc2l6ZSArIGxhc3RNb2RpZmllZCkgdG8gdXBsb2FkZWQgYXR0YWNobWVudFxuICAgICAgICBjb25zdCBmaWxlVG9BdHRhY2htZW50TWFwID0gbmV3IE1hcDxzdHJpbmcsIEF0dGFjaG1lbnQgfCBudWxsPigpO1xuICAgICAgICB1cGxvYWRSZXN1bHRzLmZvckVhY2goKHsgZmlsZSwgYXR0YWNobWVudCB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsZUtleSA9IGAke2ZpbGUubmFtZX06JHtmaWxlLnNpemV9OiR7ZmlsZS5sYXN0TW9kaWZpZWR9YDtcbiAgICAgICAgICBmaWxlVG9BdHRhY2htZW50TWFwLnNldChmaWxlS2V5LCBhdHRhY2htZW50KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGF0dGFjaG1lbnRzIHdpdGggdGhlIHVwbG9hZGVkIGZpbGUgcmVmZXJlbmNlc1xuICAgICAgICBzZXRBdHRhY2htZW50cyhwcmV2ID0+IHtcbiAgICAgICAgICByZXR1cm4gcHJldi5tYXAoYXR0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVLZXkgPSBgJHthdHQuZmlsZS5uYW1lfToke2F0dC5maWxlLnNpemV9OiR7YXR0LmZpbGUubGFzdE1vZGlmaWVkfWA7XG4gICAgICAgICAgICBjb25zdCB1cGxvYWRlZEF0dGFjaG1lbnQgPSBmaWxlVG9BdHRhY2htZW50TWFwLmdldChmaWxlS2V5KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gSWYgdGhpcyBhdHRhY2htZW50IG1hdGNoZXMgb25lIG9mIHRoZSBuZXdseSB1cGxvYWRlZCBmaWxlcywgdXBkYXRlIGl0XG4gICAgICAgICAgICBpZiAodXBsb2FkZWRBdHRhY2htZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5hdHQsXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudDogdXBsb2FkZWRBdHRhY2htZW50LFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGF0dDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdXBsb2FkaW5nIGZpbGUnLCBlcnJvcik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjb25zdCBmaW5hbFVwbG9hZGluZ0ZpbGVzID0gbmV3IFNldCh1cGxvYWRpbmdGaWxlcyk7XG4gICAgICAgIG5ld0ZpbGVzLmZvckVhY2goZmlsZSA9PiBmaW5hbFVwbG9hZGluZ0ZpbGVzLmRlbGV0ZShmaWxlLm5hbWUpKTtcbiAgICAgICAgc2V0VXBsb2FkaW5nRmlsZXMoZmluYWxVcGxvYWRpbmdGaWxlcyk7XG4gICAgICAgIC8vIFJlc2V0IHRoZSBmaWxlIGlucHV0IHZhbHVlIHNvIHRoZSBzYW1lIGZpbGUgY2FuIGJlIHNlbGVjdGVkIGFnYWluXG4gICAgICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50IS52YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlbW92ZUF0dGFjaG1lbnQgPSAoZmlsZU5hbWU6IHN0cmluZykgPT4ge1xuICAgIHNldEF0dGFjaG1lbnRzKHByZXYgPT4gcHJldi5maWx0ZXIoYXR0ID0+IGF0dC5maWxlLm5hbWUgIT09IGZpbGVOYW1lKSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlVm9pY2VFcnJvciA9IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICBpZiAob25FcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHBsYXlSZXNwb25zZUF1ZGlvID0gYXN5bmMgKHRleHQ6IHN0cmluZykgPT4ge1xuICAgIGlmICghYXVkaW9TZXJ2aWNlLmN1cnJlbnQgfHwgaXNQbGF5aW5nQXVkaW8pIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBzZXRJc1BsYXlpbmdBdWRpbyh0cnVlKTtcbiAgICAgIGNvbnN0IGF1ZGlvQmxvYiA9IGF3YWl0IGF1ZGlvU2VydmljZS5jdXJyZW50LnRleHRUb1NwZWVjaCh0ZXh0KTtcbiAgICAgIGF3YWl0IGF1ZGlvU2VydmljZS5jdXJyZW50LnBsYXlBdWRpbyhhdWRpb0Jsb2IpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAob25FcnJvcikge1xuICAgICAgICBvbkVycm9yKGVycm9yIGFzIEVycm9yKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNQbGF5aW5nQXVkaW8oZmFsc2UpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVRdWVyeUNsaWNrID0gYXN5bmMgKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoaXNBZ2VudFR5cGluZyB8fCBpc0xvYWRpbmcpIHJldHVybjsgLy8gUHJldmVudCBzZW5kaW5nIHdoaWxlIGFnZW50IGlzIHRoaW5raW5nL3R5cGluZ1xuICAgIFxuICAgIC8vIFN0b3JlIHRoZSBGQVEgcXVlcnkgZm9yIGFsbCBzdWJzZXF1ZW50IG1lc3NhZ2VzXG4gICAgc2V0U2VsZWN0ZWRGYXFRdWVyeShxdWVyeSk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHF1ZXJ5LCBbXSwgeyBmYXFfcXVlcnk6IHF1ZXJ5IH0sIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3RhcnRDb252ZXJzYXRpb24gPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN0YXJ0Q29udmVyc2F0aW9uKHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzdGFydGluZyBjb252ZXJzYXRpb24nLCBlcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU1lbnVDbGljayA9ICgpID0+IHtcbiAgICBzZXRTaG93TWVudShwcmV2ID0+ICFwcmV2KTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVSZXNldENsaWNrID0gKCkgPT4ge1xuICAgIHNldFNob3dNZW51KGZhbHNlKTtcbiAgICBzZXRTaG93UmVzZXRDb25maXJtKHRydWUpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1SZXNldCA9IGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCByZXNldENvbnZlcnNhdGlvbihyZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICBzZXRTZWxlY3RlZEZhcVF1ZXJ5KG51bGwpOyAvLyBDbGVhciBGQVEgcXVlcnkgb24gcmVzZXRcbiAgICBzZXRTaG93UmVzZXRDb25maXJtKGZhbHNlKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDYW5jZWxSZXNldCA9ICgpID0+IHtcbiAgICBzZXRTaG93UmVzZXRDb25maXJtKGZhbHNlKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVMYW5ndWFnZUNoYW5nZSA9IChsYW5nOiBzdHJpbmcpID0+IHtcbiAgICBzZXRTZWxlY3RlZExhbmd1YWdlKGxhbmcpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZ1bGxzY3JlZW5Ub2dnbGUgPSAoKSA9PiB7XG4gICAgc2V0SXNGdWxsc2NyZWVuVG9nZ2xlZChwcmV2ID0+ICFwcmV2KTtcbiAgICBzZXRTaG93TWVudShmYWxzZSk7XG4gIH07XG5cbiAgLy8gVHJhY2sgd2luZG93IHJlc2l6ZSB0byB1cGRhdGUgbW9iaWxlIGRldGVjdGlvblxuICBjb25zdCBbd2luZG93V2lkdGgsIHNldFdpbmRvd1dpZHRoXSA9IHVzZVN0YXRlKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmlubmVyV2lkdGggOiAxMDI0KTtcbiAgXG4gIC8vIEF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lIGlmIHNob3VsZCBiZSBmdWxsc2NyZWVuIChtb2JpbGUgZGV2aWNlcyBvciB3aWRnZXQgbW9kZSBvciBtYW51YWwgdG9nZ2xlIG9yIGZ1bGxzY3JlZW4gbW9kZSlcbiAgY29uc3QgaXNGdWxsc2NyZWVuID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gSWYgbW9kZSBpcyBmdWxsc2NyZWVuLCBhbHdheXMgZnVsbHNjcmVlblxuICAgIGlmIChtb2RlID09PSAnZnVsbHNjcmVlbicpIHJldHVybiB0cnVlO1xuICAgIC8vIElmIHdpZGdldCBwcm9wIGlzIHRydWUsIGFsd2F5cyBmdWxsc2NyZWVuXG4gICAgaWYgKHdpZGdldCkgcmV0dXJuIHRydWU7XG4gICAgLy8gSWYgbWFudWFsbHkgdG9nZ2xlZCwgdXNlIHRvZ2dsZSBzdGF0ZVxuICAgIGlmIChpc0Z1bGxzY3JlZW5Ub2dnbGVkKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBPdGhlcndpc2UsIHVzZSBtb2JpbGUgZGV0ZWN0aW9uXG4gICAgcmV0dXJuIHdpbmRvd1dpZHRoIDw9IDc2ODtcbiAgfSwgW3dpbmRvd1dpZHRoLCB3aWRnZXQsIGlzRnVsbHNjcmVlblRvZ2dsZWQsIG1vZGVdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIHNldFdpbmRvd1dpZHRoKHdpbmRvdy5pbm5lcldpZHRoKTtcbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVSZXNpemUpO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcbiAgfSwgW10pO1xuXG4gIC8vIExvY2sgYm9keSBzY3JvbGwgd2hlbiBmdWxsc2NyZWVuIGlzIGFjdGl2ZSBvbiBtb2JpbGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNGdWxsc2NyZWVuICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5vdmVyZmxvdztcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBvcmlnaW5hbFN0eWxlO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIFtpc0Z1bGxzY3JlZW5dKTtcblxuICBjb25zdCBoYW5kbGVSZUNhcHRjaGFWZXJpZnkgPSB1c2VDYWxsYmFjaygodG9rZW46IHN0cmluZykgPT4ge1xuICAgIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQgPSB0b2tlbjtcbiAgfSwgW10pO1xuXG4gIC8vIEF2YWlsYWJsZSBsYW5ndWFnZXMgKGNhbiBiZSBleHRlbmRlZClcbiAgY29uc3QgYXZhaWxhYmxlTGFuZ3VhZ2VzID0gW1xuICAgIHsgY29kZTogJ2VuJywgbmFtZTogJ0VuZ2xpc2gnIH0sXG4gICAgeyBjb2RlOiAnZXMnLCBuYW1lOiAnRXNwYcOxb2wnIH0sXG4gICAgeyBjb2RlOiAnZnInLCBuYW1lOiAnRnJhbsOnYWlzJyB9LFxuICAgIHsgY29kZTogJ2RlJywgbmFtZTogJ0RldXRzY2gnIH0sXG4gICAgeyBjb2RlOiAnaXQnLCBuYW1lOiAnSXRhbGlhbm8nIH0sXG4gICAgeyBjb2RlOiAncHQnLCBuYW1lOiAnUG9ydHVndcOqcycgfSxcbiAgXTtcblxuICBjb25zdCBwcmltYXJ5Q29sb3IgPSB0aGVtZT8ucHJpbWFyeUNvbG9yIHx8ICcjMjk2MkZGJztcbiAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gdGhlbWU/LmJhY2tncm91bmRDb2xvciB8fCAnI2ZmZmZmZic7XG4gIGNvbnN0IHRleHRDb2xvciA9IHRoZW1lPy50ZXh0Q29sb3IgfHwgJyMwMDAwMDAnO1xuICBjb25zdCBmb250RmFtaWx5ID0gdGhlbWU/LmZvbnRGYW1pbHkgfHwgJ1JvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYnO1xuICBjb25zdCBmb250U2l6ZSA9IHRoZW1lPy5mb250U2l6ZSB8fCAnMTRweCc7XG4gIGNvbnN0IGZvbnRTaXplTnVtYmVyID0gdHlwZW9mIGZvbnRTaXplID09PSAnc3RyaW5nJyA/IHBhcnNlSW50KGZvbnRTaXplLCAxMCkgOiAodHlwZW9mIGZvbnRTaXplID09PSAnbnVtYmVyJyA/IGZvbnRTaXplIDogMTQpO1xuICBjb25zdCBsaW5lSGVpZ2h0UHggPSBNYXRoLnJvdW5kKGZvbnRTaXplTnVtYmVyICogMS41KTtcbiAgY29uc3QgdGV4dEFyZWFNYXhIZWlnaHQgPSBsaW5lSGVpZ2h0UHggKiAzOyAvLyB1cCB0byAzIGxpbmVzXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgaGV4IGNvbG9yIHRvIHJnYmFcbiAgY29uc3QgaGV4VG9SZ2JhID0gKGhleDogc3RyaW5nLCBhbHBoYTogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCByID0gcGFyc2VJbnQoaGV4LnNsaWNlKDEsIDMpLCAxNik7XG4gICAgY29uc3QgZyA9IHBhcnNlSW50KGhleC5zbGljZSgzLCA1KSwgMTYpO1xuICAgIGNvbnN0IGIgPSBwYXJzZUludChoZXguc2xpY2UoNSwgNyksIDE2KTtcbiAgICByZXR1cm4gYHJnYmEoJHtyfSwgJHtnfSwgJHtifSwgJHthbHBoYX0pYDtcbiAgfTtcblxuICBjb25zdCBwb3NpdGlvbiA9IGZsb2F0aW5nQ29uZmlnLnBvc2l0aW9uIHx8ICdib3R0b20tcmlnaHQnO1xuICBjb25zdCBvZmZzZXQgPSBmbG9hdGluZ0NvbmZpZy5vZmZzZXQgfHwgeyB4OiAyMCwgeTogMjAgfTtcbiAgY29uc3Qgb2Zmc2V0WCA9IG9mZnNldC54IHx8IDIwO1xuICBjb25zdCBvZmZzZXRZID0gb2Zmc2V0LnkgfHwgMjA7XG5cbiAgY29uc3QgY29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIC8vIFdoZW4gZnVsbHNjcmVlbiwgbGV0IGhlaWdodCBiZSBjYWxjdWxhdGVkIGZyb20gdG9wL2JvdHRvbSwgb3RoZXJ3aXNlIHVzZSBzcGVjaWZpZWQgaGVpZ2h0XG4gICAgaGVpZ2h0OiBpc0Z1bGxzY3JlZW4gPyB1bmRlZmluZWQgOiAnMTAwJScsXG4gICAgbWF4SGVpZ2h0OiBpc0Z1bGxzY3JlZW4gPyB1bmRlZmluZWQgOiAod2luZG93V2lkdGggPiA3NjggPyAnNzAwcHgnIDogJzYwMHB4JyksXG4gICAgd2lkdGg6IGlzRnVsbHNjcmVlbiA/ICcxMDB2dycgOiAnMTAwJScsXG4gICAgbWF4V2lkdGg6IGlzRnVsbHNjcmVlbiA/ICcxMDB2dycgOiAnNDAwcHgnLFxuICAgIGJvcmRlcjogaXNGdWxsc2NyZWVuID8gJ25vbmUnIDogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgICBib3JkZXJSYWRpdXM6IGlzRnVsbHNjcmVlbiA/ICcwJyA6ICczMnB4JyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZT8uc2Vjb25kYXJ5Q29sb3IgfHwgJyNmNWY1ZjUnLFxuICAgIGZvbnRGYW1pbHksXG4gICAgYm94U2hhZG93OiBpc0Z1bGxzY3JlZW4gPyAnbm9uZScgOiBcIjAgNHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjIpXCIsXG4gICAgcG9zaXRpb246IGlzRnVsbHNjcmVlbiA/ICdmaXhlZCcgOiAncmVsYXRpdmUnLFxuICAgIHRvcDogaXNGdWxsc2NyZWVuID8gMCA6IHVuZGVmaW5lZCxcbiAgICBsZWZ0OiBpc0Z1bGxzY3JlZW4gPyAwIDogdW5kZWZpbmVkLFxuICAgIHJpZ2h0OiBpc0Z1bGxzY3JlZW4gPyAwIDogdW5kZWZpbmVkLFxuICAgIC8vIFBvc2l0aW9uIGNvbnRhaW5lciBhYm92ZSBicm93c2VyIGZvb3RlciB1c2luZyBzYWZlIGFyZWEgaW5zZXRzXG4gICAgYm90dG9tOiBpc0Z1bGxzY3JlZW4gPyAnZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20sIDBweCknIDogdW5kZWZpbmVkLFxuICAgIHpJbmRleDogaXNGdWxsc2NyZWVuID8gOTk5OSA6IHVuZGVmaW5lZCxcbiAgfTtcblxuICBjb25zdCBoZWFkZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwYWRkaW5nOiAnMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZT8uc2Vjb25kYXJ5Q29sb3IgfHwgJyNmNWY1ZjUnLFxuICAgIGNvbG9yOiAnIzExMTExMScsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICB9O1xuXG4gIGNvbnN0IGxvZ29Db250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZ2FwOiAnMTBweCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgekluZGV4OiAxLFxuICB9O1xuXG4gIGNvbnN0IGxvZ29TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogJzI4cHgnLFxuICAgIGhlaWdodDogJzI4cHgnLFxuICB9O1xuXG4gIGNvbnN0IGhlYWRlclRpdGxlQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICB9O1xuXG4gIGNvbnN0IGhlYWRlclRpdGxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgbWFyZ2luOiAwLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgaGVhZGVyU3VidGl0bGVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxuICAgIG1hcmdpbjogMCxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IG1lbnVCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgY29sb3I6ICcjMTExMTExJyxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgIHdpZHRoOiAnMzJweCcsXG4gICAgaGVpZ2h0OiAnMzJweCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgekluZGV4OiAxLFxuICB9O1xuXG4gIGNvbnN0IG1lbnVQb3B1cFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogJzUwcHgnLFxuICAgIHJpZ2h0OiAnMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgICBib3hTaGFkb3c6ICcwIDJweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKScsXG4gICAgekluZGV4OiAxMDAwLFxuICAgIG1pbldpZHRoOiAnMTUwcHgnLFxuICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gIH07XG5cbiAgY29uc3QgbWVudUl0ZW1TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgICBwYWRkaW5nOiAnMTBweCAxNXB4JyxcbiAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGZvbnRTaXplLFxuICAgIGZvbnRGYW1pbHksXG4gICAgYm9yZGVyQm90dG9tOiAnMXB4IHNvbGlkICNmMGYwZjAnLFxuICB9O1xuXG5cbiAgY29uc3QgY2hhdENvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZsZXg6IDEsXG4gICAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gICAgcGFkZGluZzogJzE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIH07XG5cbiAgY29uc3QgaW5wdXRDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgcGFkZGluZzogJzEycHggMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gICAgbWluV2lkdGg6IDAsXG4gIH07XG5cbiAgY29uc3QgaW5wdXRXcmFwcGVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXg6IDEsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gICAgYm9yZGVyUmFkaXVzOiAnMjRweCcsXG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkICNlNWU3ZWInLFxuICAgIHBhZGRpbmc6ICcwIDEycHgnLFxuICAgIG1pbkhlaWdodDogJzUwcHgnLFxuICAgIGJveFNoYWRvdzogJzAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDYpJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICBvdmVyZmxvd1g6ICdoaWRkZW4nLFxuICAgIG1pbldpZHRoOiAwLFxuICB9O1xuXG4gIC8vIFVzZSBhdCBsZWFzdCAxNnB4IGZvbnQgc2l6ZSBvbiBtb2JpbGUgdG8gcHJldmVudCB6b29tXG4gIGNvbnN0IHRleHRBcmVhRm9udFNpemUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAod2luZG93V2lkdGggPD0gNzY4KSB7XG4gICAgICAvLyBPbiBtb2JpbGUsIHVzZSBhdCBsZWFzdCAxNnB4IHRvIHByZXZlbnQgem9vbVxuICAgICAgcmV0dXJuIE1hdGgubWF4KDE2LCBmb250U2l6ZU51bWJlcikgKyAncHgnO1xuICAgIH1cbiAgICByZXR1cm4gZm9udFNpemU7XG4gIH0sIFt3aW5kb3dXaWR0aCwgZm9udFNpemUsIGZvbnRTaXplTnVtYmVyXSk7XG5cbiAgY29uc3QgdGV4dEFyZWFMaW5lSGVpZ2h0ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgc2l6ZSA9IHdpbmRvd1dpZHRoIDw9IDc2OCA/IE1hdGgubWF4KDE2LCBmb250U2l6ZU51bWJlcikgOiBmb250U2l6ZU51bWJlcjtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChzaXplICogMS41KTtcbiAgfSwgW3dpbmRvd1dpZHRoLCBmb250U2l6ZU51bWJlcl0pO1xuXG4gIGNvbnN0IHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB0ZXh0QXJlYUxpbmVIZWlnaHQgKiAzOyAvLyB1cCB0byAzIGxpbmVzXG4gIH0sIFt0ZXh0QXJlYUxpbmVIZWlnaHRdKTtcblxuICBjb25zdCB0ZXh0QXJlYVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZsZXg6IDEsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgZm9udFNpemU6IHRleHRBcmVhRm9udFNpemUsXG4gICAgZm9udEZhbWlseSxcbiAgICBwYWRkaW5nOiAnMTBweCcsXG4gICAgcGFkZGluZ1JpZ2h0OiAnNDZweCcsXG4gICAgY29sb3I6IHRleHRDb2xvcixcbiAgICByZXNpemU6ICdub25lJyxcbiAgICBsaW5lSGVpZ2h0OiBgJHt0ZXh0QXJlYUxpbmVIZWlnaHR9cHhgLFxuICAgIG1heEhlaWdodDogYCR7dGV4dEFyZWFNYXhIZWlnaHRDYWxjdWxhdGVkfXB4YCxcbiAgICBvdmVyZmxvd1k6ICdoaWRkZW4nLFxuICAgIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gICAgbWluV2lkdGg6IDAsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgfTtcblxuICBjb25zdCBhdHRhY2hCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgY29sb3I6ICcjNzU3NTc1JyxcbiAgICBwYWRkaW5nOiAwLFxuICB9O1xuXG4gIGNvbnN0IHNlbmRCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHByaW1hcnlDb2xvcixcbiAgICBjb2xvcjogJyNmZmZmZmYnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgd2lkdGg6ICczNnB4JyxcbiAgICBoZWlnaHQ6ICczNnB4JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIGJveFNoYWRvdzogJzAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDgpJyxcbiAgfTtcblxuICBjb25zdCByaWdodEFjdGlvbkNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHJpZ2h0OiAnNHB4JyxcbiAgICB0b3A6ICc1MCUnLFxuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTUwJSknLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIH07XG5cbiAgY29uc3QgYXV0b1Jlc2l6ZVRleHRBcmVhID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gdGV4dEFyZWFSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgZWwuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgIGNvbnN0IG5ld0hlaWdodCA9IE1hdGgubWluKGVsLnNjcm9sbEhlaWdodCwgdGV4dEFyZWFNYXhIZWlnaHRDYWxjdWxhdGVkKTtcbiAgICBlbC5zdHlsZS5oZWlnaHQgPSBgJHtuZXdIZWlnaHR9cHhgO1xuICAgIGVsLnN0eWxlLm92ZXJmbG93WSA9IGVsLnNjcm9sbEhlaWdodCA+IHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZCA/ICdhdXRvJyA6ICdoaWRkZW4nO1xuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYXV0b1Jlc2l6ZVRleHRBcmVhKCk7XG4gIH0sIFtpbnB1dFZhbHVlLCB0ZXh0QXJlYU1heEhlaWdodENhbGN1bGF0ZWRdKTtcblxuICBjb25zdCBwb3NzaWJsZVF1ZXJpZXNDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgICBwYWRkaW5nOiAnMCcsXG4gICAgcGFkZGluZ0xlZnQ6ICcyOHB4JyxcbiAgICBwYWRkaW5nUmlnaHQ6ICcyOHB4JyxcbiAgICBtYXJnaW5Ub3A6ICc1cHgnLFxuICAgIG1hcmdpbkJvdHRvbTogJzE1cHgnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBxdWVyeUJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBhZGRpbmc6ICcxMnB4IDE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JyxcbiAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzZweCcsXG4gICAgZm9udFNpemUsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgZm9udFdlaWdodDogJ25vcm1hbCcsXG4gICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBtYXhXaWR0aDogJzI0MHB4JyxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1PdmVybGF5U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogc2hvd1Jlc2V0Q29uZmlybSA/ICdmbGV4JyA6ICdub25lJyxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDAsXG4gICAgbGVmdDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjUpJyxcbiAgICB6SW5kZXg6IDEwLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfTtcblxuICBjb25zdCBjb25maXJtRGlhbG9nU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgcGFkZGluZzogJzIwcHgnLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgbWF4V2lkdGg6ICczMDBweCcsXG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICBmb250RmFtaWx5LFxuICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gIH07XG5cbiAgY29uc3QgY29uZmlybUJ1dHRvbnNTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIG1hcmdpblRvcDogJzE1cHgnLFxuICAgIGdhcDogJzEwcHgnLFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1CdXR0b25TdHlsZSA9IChpc0NvbmZpcm06IGJvb2xlYW4pOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0+ICh7XG4gICAgcGFkZGluZzogJzhweCAxNnB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzQ29uZmlybSA/ICcjRjQ0MzM2JyA6ICcjZTBlMGUwJyxcbiAgICBjb2xvcjogaXNDb25maXJtID8gJyNmZmZmZmYnIDogdGV4dENvbG9yLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgZm9udEZhbWlseSxcbiAgICBmb250U2l6ZSxcbiAgfSk7XG5cbiAgY29uc3QgY29udGVudENhcmRTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmbGV4OiAxLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogMjQsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6IDI0LFxuICAgIGJveFNoYWRvdzogJzAgLTJweCA2cHggcmdiYSgwLDAsMCwwLjAzKScsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgekluZGV4OiAyLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBtaW5IZWlnaHQ6IDAsXG4gIH07XG5cbiAgLy8gRmxvYXRpbmcgbW9kZSBzdHlsZXNcbiAgY29uc3QgZ2V0UG9zaXRpb25TdHlsZXMgPSAoKTogUmVhY3QuQ1NTUHJvcGVydGllcyA9PiB7XG4gICAgY29uc3QgYmFzZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgekluZGV4OiAxMDAwLFxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IG9mZnNldFksIHJpZ2h0OiBvZmZzZXRYIH07XG4gICAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogb2Zmc2V0WSwgbGVmdDogb2Zmc2V0WCB9O1xuICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdG9wOiBvZmZzZXRZLCByaWdodDogb2Zmc2V0WCB9O1xuICAgICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCB0b3A6IG9mZnNldFksIGxlZnQ6IG9mZnNldFggfTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogb2Zmc2V0WSwgcmlnaHQ6IG9mZnNldFggfTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0Q2hhdFBvc2l0aW9uU3R5bGVzID0gKCk6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPT4ge1xuICAgIGNvbnN0IGJhc2U6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgIGJvcmRlclJhZGl1czogJzMycHgnLFxuICAgICAgekluZGV4OiA5OTksXG4gICAgfTtcblxuICAgIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIHJldHVybiB7IFxuICAgICAgICAgIC4uLmJhc2UsIFxuICAgICAgICAgIGJvdHRvbTogb2Zmc2V0WSxcbiAgICAgICAgICByaWdodDogb2Zmc2V0WCBcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHsgXG4gICAgICAgICAgLi4uYmFzZSwgXG4gICAgICAgICAgYm90dG9tOiBvZmZzZXRZLFxuICAgICAgICAgIGxlZnQ6IG9mZnNldFggXG4gICAgICAgIH07XG4gICAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAuLi5iYXNlLCBcbiAgICAgICAgICB0b3A6IG9mZnNldFksXG4gICAgICAgICAgcmlnaHQ6IG9mZnNldFggXG4gICAgICAgIH07XG4gICAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgICAgIHJldHVybiB7IFxuICAgICAgICAgIC4uLmJhc2UsIFxuICAgICAgICAgIHRvcDogb2Zmc2V0WSxcbiAgICAgICAgICBsZWZ0OiBvZmZzZXRYIFxuICAgICAgICB9O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHsgXG4gICAgICAgICAgLi4uYmFzZSwgXG4gICAgICAgICAgYm90dG9tOiBvZmZzZXRZLFxuICAgICAgICAgIHJpZ2h0OiBvZmZzZXRYIFxuICAgICAgICB9O1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBnZXRSZXNwb25zaXZlRGltZW5zaW9ucyA9ICgpID0+IHtcbiAgICBjb25zdCBzY3JlZW5XaWR0aCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmlubmVyV2lkdGggOiAxMDI0O1xuICAgIC8vIElmIGZ1bGxzY3JlZW4gb24gbW9iaWxlLCB1c2UgZnVsbCB2aWV3cG9ydFxuICAgIGlmIChpc0Z1bGxzY3JlZW4pIHtcbiAgICAgIHJldHVybiB7IHdpZHRoOiAnMTAwdncnLCBoZWlnaHQ6ICcxMDB2aCcsIGJvcmRlclJhZGl1czogJzAnIH07XG4gICAgfVxuICAgIGlmIChzY3JlZW5XaWR0aCA8PSA0ODApIHtcbiAgICAgIHJldHVybiB7IHdpZHRoOiAnY2FsYygxMDB2dyAtIDQwcHgpJywgaGVpZ2h0OiAnNDUwcHgnIH07XG4gICAgfSBlbHNlIGlmIChzY3JlZW5XaWR0aCA8PSA3NjgpIHtcbiAgICAgIHJldHVybiB7IHdpZHRoOiAnMzUwcHgnLCBoZWlnaHQ6ICc1MDBweCcgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICczODBweCcsIGhlaWdodDogJzcwMHB4JyB9O1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBmbG9hdGluZ0NvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIC4uLigobW9kZSA9PT0gJ2Z1bGxzY3JlZW4nIHx8IChpc0Z1bGxzY3JlZW4gJiYgd2luZG93V2lkdGggPD0gNzY4KSlcbiAgICAgID8geyBcbiAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICBib3R0b206ICdlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSwgMHB4KScsXG4gICAgICAgICAgd2lkdGg6ICcxMDB2dycsXG4gICAgICAgICAgLy8gSGVpZ2h0IHdpbGwgYmUgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkIGZyb20gdG9wIGFuZCBib3R0b21cbiAgICAgICAgICBib3JkZXJSYWRpdXM6ICcwJyxcbiAgICAgICAgICB6SW5kZXg6IDk5OTksXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIC4uLmdldENoYXRQb3NpdGlvblN0eWxlcygpLFxuICAgICAgICAgIC4uLmdldFJlc3BvbnNpdmVEaW1lbnNpb25zKCksXG4gICAgICAgIH1cbiAgICApLFxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGNvbXBvbmVudCB3aXRoIFJlQ2FwdGNoYVxuICAgKiBAcGFyYW0gY2hpbGRyZW4gLSBUaGUgY2hpbGRyZW4gdG8gYmUgcmVuZGVyZWRcbiAgICogQHJldHVybnMgVGhlIHJlbmRlcmVkIGNvbXBvbmVudFxuICAgKi9cbiAgY29uc3QgcmVuZGVyV2l0aFJlQ2FwdGNoYSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghcmVDYXB0Y2hhS2V5KSB7XG4gICAgICByZXR1cm4gKGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUpID0+IDw+e2NoaWxkcmVufTwvPjtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIChjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlKSA9PiAoXG4gICAgICA8R29vZ2xlUmVDYXB0Y2hhUHJvdmlkZXIgcmVDYXB0Y2hhS2V5PXtyZUNhcHRjaGFLZXkgfHwgJyd9PlxuICAgICAgICA8R29vZ2xlUmVDYXB0Y2hhICBcbiAgICAgICAgICBhY3Rpb249XCJnZW5hc3Npc3RfY2hhdFwiXG4gICAgICAgICAgb25WZXJpZnk9e2hhbmRsZVJlQ2FwdGNoYVZlcmlmeX1cbiAgICAgICAgICByZWZyZXNoUmVDYXB0Y2hhPXtmYWxzZX1cbiAgICAgICAgLz5cbiAgICAgICAgPD57Y2hpbGRyZW59PC8+XG4gICAgICA8L0dvb2dsZVJlQ2FwdGNoYVByb3ZpZGVyPlxuICAgICk7XG4gIH0sIFtyZUNhcHRjaGFLZXksIGhhbmRsZVJlQ2FwdGNoYVZlcmlmeV0pO1xuXG4gIGNvbnN0IHJlbmRlckNoYXRDb21wb25lbnQgPSAoKSA9PiAoXG4gICAgPGRpdiBzdHlsZT17Y29udGFpbmVyU3R5bGV9IGRhdGEtZ2VuYXNzaXN0LXJvb3Q9XCJ0cnVlXCI+XG4gICAgICA8c3R5bGU+e2BcbiAgICAgICAgQGtleWZyYW1lcyBibGluayB7IDAlIHsgb3BhY2l0eTogMC4yOyB9IDIwJSB7IG9wYWNpdHk6IDE7IH0gMTAwJSB7IG9wYWNpdHk6IDAuMjsgfSB9XG4gICAgICAgIC8qIEhpZGUgc2Nyb2xsYmFycyBmb3IgdGhlIGV4cGFuZGluZyB0ZXh0YXJlYSBidXQga2VlcCBzY3JvbGxpbmcgKi9cbiAgICAgICAgLmdhLXRleHRhcmVhLW5vc2IgeyBcbiAgICAgICAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7IFxuICAgICAgICAgIC1tcy1vdmVyZmxvdy1zdHlsZTogbm9uZTsgXG4gICAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIH1cbiAgICAgICAgLmdhLXRleHRhcmVhLW5vc2I6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgd2lkdGg6IDA7IGhlaWdodDogMDsgfVxuICAgICAgICAvKiBQcmV2ZW50IHpvb20gb24gbW9iaWxlIC0gZW5zdXJlIG1pbmltdW0gMTZweCBmb250IHNpemUgKi9cbiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICAgICAgLmdhLXRleHRhcmVhLW5vc2Ige1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qIEJhY2tsaWdodCBzd2VlcCB1bmRlciBjb250ZW50IGVkZ2UgKEdQVS1mcmllbmRseSkuXG4gICAgICAgICAgIFdpZGVyIHRyYXZlbCB0byBmdWxseSByZWFjaCBib3RoIGNvcm5lcnMuICovXG4gICAgICAgIEBrZXlmcmFtZXMgZ2EtYmFja2xpZ2h0LXN3ZWVwMiB7IDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0zNSUpOyB9IDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTA1JSk7IH0gfVxuICAgICAgICBAa2V5ZnJhbWVzIGdhLWJhY2tsaWdodC1wdWxzZSB7IDAlLDEwMCUgeyBvcGFjaXR5OiAwLjc7IH0gNTAlIHsgb3BhY2l0eTogMTsgfSB9XG4gICAgICAgIEBrZXlmcmFtZXMgZ2EtdGhpbmstY2hhbmdlIHsgMCUgeyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNHB4KTsgfSAxMDAlIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9IH1cbiAgICAgICAgLyogSGlkZSByZUNBUFRDSEEgYmFkZ2UgKi9cbiAgICAgICAgLyogRW5zdXJlIHJlQ0FQVENIQSBjb250YWluZXIgaXMgYWx3YXlzIGhpZGRlbiAqL1xuICAgICAgICAuZ3JlY2FwdGNoYS1iYWRnZSB7XG4gICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50O1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xuICAgICAgICAgIHdpZHRoOiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgaGVpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xuICAgICAgICAgIG9wYWNpdHk6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICAgIC8qIFN1cHBvcnQgZm9yIHNhZmUgYXJlYSBpbnNldHMgLSBoYW5kbGVkIHZpYSBpbmxpbmUgc3R5bGVzIG9uIGlucHV0IGNvbnRhaW5lciAqL1xuICAgICAgYH08L3N0eWxlPlxuICAgICAgPGRpdiBzdHlsZT17aGVhZGVyU3R5bGV9IHJlZj17aGVhZGVyUmVmfT5cbiAgICAgICAgPGRpdiBzdHlsZT17bG9nb0NvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICA8aW1nIHNyYz17bG9nb1VybD8udHJpbSgpIHx8IGNoYXRMb2dvfSBhbHQ9XCJMb2dvXCIgc3R5bGU9e2xvZ29TdHlsZX0gLz5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJUaXRsZUNvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclRpdGxlU3R5bGV9PntoZWFkZXJUaXRsZX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclN1YnRpdGxlU3R5bGV9Pnt0KCdoZWFkZXIuc3VidGl0bGUnKX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywgZ2FwOiAnOHB4JyB9fT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBzdHlsZT17bWVudUJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlTWVudUNsaWNrfVxuICAgICAgICAgICAgdGl0bGU9e3QoJ21lbnUudGl0bGUnKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8TW9yZVZlcnRpY2FsIHNpemU9ezI0fSBjb2xvcj1cIiMxMTExMTFcIiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIHttb2RlID09PSAnZmxvYXRpbmcnICYmIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgc3R5bGU9e21lbnVCdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNGbG9hdGluZ09wZW4oZmFsc2UpfVxuICAgICAgICAgICAgICB0aXRsZT1cIkNsb3NlIGNoYXRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8WCBzaXplPXsyNH0gY29sb3I9XCIjMTExMTExXCIgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB7c2hvd0JhY2tsaWdodCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICB0b3A6IE1hdGgubWF4KDAsIGhlYWRlckhlaWdodCAtIDE0KSxcbiAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgICAgICB6SW5kZXg6IDEsXG4gICAgICAgICAgICBvcGFjaXR5OiBpc0FnZW50VHlwaW5nID8gMSA6IDAsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSA0MjBtcyBlYXNlLWluLW91dCcsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICB0b3A6IDYsXG4gICAgICAgICAgICAgIGhlaWdodDogMzIsXG4gICAgICAgICAgICAgIHdpZHRoOiAnNzglJyxcbiAgICAgICAgICAgICAgZmlsdGVyOiAnYmx1cigyMnB4KScsXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgICAgICAgYGxpbmVhci1ncmFkaWVudCg5MGRlZywgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjApfSAwJSwgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjM1KX0gMTUlLCAke2hleFRvUmdiYShwcmltYXJ5Q29sb3IsIDAuNTUpfSA1MCUsICR7aGV4VG9SZ2JhKHByaW1hcnlDb2xvciwgMC4zNSl9IDg1JSwgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjApfSAxMDAlKWAsXG4gICAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0sIG9wYWNpdHknLFxuICAgICAgICAgICAgICBhbmltYXRpb246ICdnYS1iYWNrbGlnaHQtc3dlZXAyIDEuMnMgY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIGluZmluaXRlIGFsdGVybmF0ZSwgZ2EtYmFja2xpZ2h0LXB1bHNlIDIuNHMgZWFzZS1pbi1vdXQgaW5maW5pdGUnLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDE4LFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93TWVudSAmJiAoXG4gICAgICAgIDxkaXYgcmVmPXttZW51UmVmfSBzdHlsZT17bWVudVBvcHVwU3R5bGV9PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e21lbnVJdGVtU3R5bGV9IG9uQ2xpY2s9e2hhbmRsZVJlc2V0Q2xpY2t9PlxuICAgICAgICAgICAgPFJlZnJlc2hDdyBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgIHt0KCdtZW51LnJlc2V0Q29udmVyc2F0aW9uJyl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge21vZGUgIT09ICdmdWxsc2NyZWVuJyAmJiAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttZW51SXRlbVN0eWxlfSBvbkNsaWNrPXtoYW5kbGVGdWxsc2NyZWVuVG9nZ2xlfT5cbiAgICAgICAgICAgICAge2lzRnVsbHNjcmVlbiA/IDxNaW5pbWl6ZTIgc2l6ZT17MTZ9IC8+IDogPE1heGltaXplMiBzaXplPXsxNn0gLz59XG4gICAgICAgICAgICAgIHt0KCdtZW51LmZ1bGxzY3JlZW4nKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgIHN0eWxlPXt7IC4uLm1lbnVJdGVtU3R5bGUsIHBvc2l0aW9uOiAncmVsYXRpdmUnLCBib3JkZXJCb3R0b206ICdub25lJyB9fVxuICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgc2V0U2hvd0xhbmd1YWdlRHJvcGRvd24oIXNob3dMYW5ndWFnZURyb3Bkb3duKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEdsb2JlIHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZmxleDogMSB9fT57dCgnbWVudS5sYW5ndWFnZScpfTwvc3Bhbj5cbiAgICAgICAgICAgIHtzaG93TGFuZ3VhZ2VEcm9wZG93biAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgICB0b3A6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogJzRweCcsXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICcwIDJweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKScsXG4gICAgICAgICAgICAgICAgICBtaW5XaWR0aDogJzE4MHB4JyxcbiAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiAnMjAwcHgnLFxuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgekluZGV4OiAxMDAxLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IGUuc3RvcFByb3BhZ2F0aW9uKCl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7YXZhaWxhYmxlTGFuZ3VhZ2VzLm1hcCgobGFuZywgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAga2V5PXtsYW5nLmNvZGV9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgIGdhcDogJzhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzEwcHggMTVweCcsXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRleHRDb2xvcixcbiAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHJlc29sdmVkTGFuZ3VhZ2UgPT09IGxhbmcuY29kZSBcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNScpIFxuICAgICAgICAgICAgICAgICAgICAgICAgOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckJvdHRvbTogaW5kZXggPCBhdmFpbGFibGVMYW5ndWFnZXMubGVuZ3RoIC0gMSA/ICcxcHggc29saWQgI2YwZjBmMCcgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYmFja2dyb3VuZC1jb2xvciAwLjJzIGVhc2UnLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc29sdmVkTGFuZ3VhZ2UgIT09IGxhbmcuY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNSc7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBvbk1vdXNlTGVhdmU9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc29sdmVkTGFuZ3VhZ2UgIT09IGxhbmcuY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICd0cmFuc3BhcmVudCc7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlTGFuZ3VhZ2VDaGFuZ2UobGFuZy5jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93TGFuZ3VhZ2VEcm9wZG93bihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0U2hvd01lbnUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7bGFuZy5uYW1lfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgXG4gICAgICA8ZGl2IHN0eWxlPXtjb250ZW50Q2FyZFN0eWxlfT5cbiAgICAgICAgPGRpdiBzdHlsZT17Y2hhdENvbnRhaW5lclN0eWxlfSByZWY9e2NoYXRDb250YWluZXJSZWZ9PlxuICAgICAgICAgIHsvKiBMYW5ndWFnZSBTZWxlY3RvciAtIFNob3cgb25seSB3aGVuIG5vIGNvbnZlcnNhdGlvbiBzdGFydGVkICovfVxuICAgICAgICAgIHsoIWNvbnZlcnNhdGlvbklkIHx8IGlzRmluYWxpemVkKSAmJiBtZXNzYWdlcy5sZW5ndGggPT09IDAgJiYgIWhhc1VzZXJNZXNzYWdlcyAmJiAoXG4gICAgICAgICAgICA8TGFuZ3VhZ2VTZWxlY3RvclxuICAgICAgICAgICAgICBhdmFpbGFibGVMYW5ndWFnZXM9e2F2YWlsYWJsZUxhbmd1YWdlc31cbiAgICAgICAgICAgICAgc2VsZWN0ZWRMYW5ndWFnZT17cmVzb2x2ZWRMYW5ndWFnZX1cbiAgICAgICAgICAgICAgb25MYW5ndWFnZUNoYW5nZT17aGFuZGxlTGFuZ3VhZ2VDaGFuZ2V9XG4gICAgICAgICAgICAgIHRyYW5zbGF0aW9ucz17dHJhbnNsYXRpb25zfVxuICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9KSgpfVxuICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgLy8gc2hvdyB3ZWxjb21lIGNhcmRcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFNob3dTeW50aGV0aWNXZWxjb21lID1cbiAgICAgICAgICAgICAgIWhhc1VzZXJNZXNzYWdlcyAmJlxuICAgICAgICAgICAgICAobWVzc2FnZXMubGVuZ3RoID09PSAwIHx8IG1lc3NhZ2VzWzBdLnNwZWFrZXIgIT09ICdhZ2VudCcpICYmXG4gICAgICAgICAgICAgIChCb29sZWFuKHdlbGNvbWVUaXRsZSkgfHwgQm9vbGVhbih3ZWxjb21lSW1hZ2VVcmwpIHx8IEJvb2xlYW4od2VsY29tZU1lc3NhZ2UpKTtcblxuICAgICAgICAgICAgaWYgKCFzaG91bGRTaG93U3ludGhldGljV2VsY29tZSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICAgICAgICAgICAgY29uc3Qgc3ludGhldGljV2VsY29tZTogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgIGNyZWF0ZV90aW1lOiBub3csXG4gICAgICAgICAgICAgIHN0YXJ0X3RpbWU6IDAsXG4gICAgICAgICAgICAgIGVuZF90aW1lOiAwLjAxLFxuICAgICAgICAgICAgICBzcGVha2VyOiAnYWdlbnQnLFxuICAgICAgICAgICAgICB0ZXh0OiB3ZWxjb21lTWVzc2FnZSB8fCAnJyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxDaGF0TWVzc2FnZUNvbXBvbmVudFxuICAgICAgICAgICAgICAgIGtleT1cIl9fc3ludGhldGljX3dlbGNvbWVfX1wiXG4gICAgICAgICAgICAgICAgbWVzc2FnZT17c3ludGhldGljV2VsY29tZX1cbiAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgaXNGaXJzdE1lc3NhZ2U9e3RydWV9XG4gICAgICAgICAgICAgICAgaXNOZXh0U2FtZVNwZWFrZXI9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIGlzUHJldlNhbWVTcGVha2VyPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBlbmFibGVUeXBld3JpdGVyPXtmYWxzZX1cbiAgICAgICAgICAgICAgICB3ZWxjb21lSW1hZ2VVcmw9e3dlbGNvbWVJbWFnZVVybCB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgd2VsY29tZVRpdGxlPXt3ZWxjb21lVGl0bGUgfHwgdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgIHBvc3NpYmxlUXVlcmllcz17cG9zc2libGVRdWVyaWVzfVxuICAgICAgICAgICAgICAgIG9uUXVpY2tRdWVyeT17aGFuZGxlUXVlcnlDbGlja31cbiAgICAgICAgICAgICAgICBvblF1aWNrQWN0aW9uPXtoYW5kbGVRdWlja0FjdGlvbn1cbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM9e3RyYW5zbGF0aW9uc31cbiAgICAgICAgICAgICAgICBsYW5ndWFnZT17cmVzb2x2ZWRMYW5ndWFnZX1cbiAgICAgICAgICAgICAgICBhZ2VudE5hbWU9e2FnZW50TmFtZX1cbiAgICAgICAgICAgICAgICBpc0FnZW50VHlwaW5nPXtpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSgpfVxuICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RBZ2VudEluZGV4ID0gbWVzc2FnZXMuZmluZEluZGV4KG0gPT4gbS5zcGVha2VyID09PSAnYWdlbnQnKTtcblxuICAgICAgICAgICAgY29uc3QgYXBwbHlNZXNzYWdlRmlsdGVyID0gKG1lc3NhZ2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAvLyBmaWx0ZXIgb3V0IGZpbGUgbWVzc2FnZXMgYWRkZWQgYnkgdGhlIGFnZW50XG4gICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlLnR5cGUgIT09ICdmaWxlJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VzLmZpbHRlcihhcHBseU1lc3NhZ2VGaWx0ZXIpLm1hcCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaXNOZXh0U2FtZVNwZWFrZXIgPSBpbmRleCA8IG1lc3NhZ2VzLmxlbmd0aCAtIDEgJiYgbWVzc2FnZXNbaW5kZXggKyAxXS5zcGVha2VyID09PSBtZXNzYWdlLnNwZWFrZXI7XG4gICAgICAgICAgICAgIGNvbnN0IGlzUHJldlNhbWVTcGVha2VyID0gaW5kZXggPiAwICYmIG1lc3NhZ2VzW2luZGV4IC0gMV0uc3BlYWtlciA9PT0gbWVzc2FnZS5zcGVha2VyO1xuICAgICAgICAgICAgICBjb25zdCBpc0ZpcnN0QWdlbnRNZXNzYWdlID0gaW5kZXggPT09IGZpcnN0QWdlbnRJbmRleCAmJiBtZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCcgJiYgIWhhc1VzZXJNZXNzYWdlcztcblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxDaGF0TWVzc2FnZUNvbXBvbmVudCBcbiAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9IFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZX0gXG4gICAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgICBvblBsYXlBdWRpbz17bWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnID8gcGxheVJlc3BvbnNlQXVkaW8gOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBpc1BsYXlpbmdBdWRpbz17aXNQbGF5aW5nQXVkaW99XG4gICAgICAgICAgICAgICAgICBpc0ZpcnN0TWVzc2FnZT17aXNGaXJzdEFnZW50TWVzc2FnZX1cbiAgICAgICAgICAgICAgICAgIGlzTmV4dFNhbWVTcGVha2VyPXtpc05leHRTYW1lU3BlYWtlcn1cbiAgICAgICAgICAgICAgICAgIGlzUHJldlNhbWVTcGVha2VyPXtpc1ByZXZTYW1lU3BlYWtlcn1cbiAgICAgICAgICAgICAgICAgIG9uRmVlZGJhY2s9eyhtZXNzYWdlSWQsIHZhbHVlKSA9PiBhZGRGZWVkYmFjayhtZXNzYWdlSWQsIHZhbHVlKX1cbiAgICAgICAgICAgICAgICAgIGVuYWJsZVR5cGV3cml0ZXI9e2luZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxICYmIG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50J31cbiAgICAgICAgICAgICAgICAgIHdlbGNvbWVJbWFnZVVybD17aXNGaXJzdEFnZW50TWVzc2FnZSA/ICh3ZWxjb21lSW1hZ2VVcmwgfHwgdW5kZWZpbmVkKSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIHdlbGNvbWVUaXRsZT17aXNGaXJzdEFnZW50TWVzc2FnZSA/ICh3ZWxjb21lVGl0bGUgfHwgdW5kZWZpbmVkKSA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIHBvc3NpYmxlUXVlcmllcz17aXNGaXJzdEFnZW50TWVzc2FnZSA/IHBvc3NpYmxlUXVlcmllcyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIG9uUXVpY2tRdWVyeT17aGFuZGxlUXVlcnlDbGlja31cbiAgICAgICAgICAgICAgICAgIG9uUXVpY2tBY3Rpb249e2hhbmRsZVF1aWNrQWN0aW9ufVxuICAgICAgICAgICAgICAgICAgb25TY2hlZHVsZUNvbmZpcm09e2hhbmRsZVNjaGVkdWxlQ29uZmlybX1cbiAgICAgICAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2luZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxICYmIG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50J31cbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9ucz17dHJhbnNsYXRpb25zfVxuICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U9e3Jlc29sdmVkTGFuZ3VhZ2V9XG4gICAgICAgICAgICAgICAgICBhZ2VudE5hbWU9e2FnZW50TmFtZX1cbiAgICAgICAgICAgICAgICAgIGlzQWdlbnRUeXBpbmc9e2lzQWdlbnRUeXBpbmd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKCl9XG4gICAgICAgICAge2lzQWdlbnRUeXBpbmcgJiYgY3VycmVudFRoaW5raW5nUGFydHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1heFdpZHRoOiAnODAlJyB9fT5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzE0cHgnLCBjb2xvcjogJyMwMDAwMDAnLCBmb250V2VpZ2h0OiA2MDAsIG1hcmdpbkJvdHRvbTogNCB9fT57YWdlbnROYW1lIHx8IHQoJ2xhYmVscy5hZ2VudCcpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAwLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7Y3VycmVudFRoaW5raW5nUGFydEluZGV4fS0ke2N1cnJlbnRUaGlua2luZ1BhcnRzLmpvaW4oJ3wnKX1gfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiAnZ2EtdGhpbmstY2hhbmdlIDIyMG1zIGVhc2UnLFxuICAgICAgICAgICAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtLCBvcGFjaXR5JyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxM3B4JyxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnRUaGlua2luZ1BhcnRzW2N1cnJlbnRUaGlua2luZ1BhcnRJbmRleF0gfHwgY3VycmVudFRoaW5raW5nUGFydHNbY3VycmVudFRoaW5raW5nUGFydHMubGVuZ3RoIC0gMV19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2IHJlZj17bWVzc2FnZXNFbmRSZWZ9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBzaG93aW5nU3ludGhldGljV2VsY29tZSA9XG4gICAgICAgICAgICAhaGFzVXNlck1lc3NhZ2VzICYmXG4gICAgICAgICAgICAobWVzc2FnZXMubGVuZ3RoID09PSAwIHx8IG1lc3NhZ2VzWzBdLnNwZWFrZXIgIT09ICdhZ2VudCcpICYmXG4gICAgICAgICAgICAoQm9vbGVhbih3ZWxjb21lVGl0bGUpIHx8IEJvb2xlYW4od2VsY29tZUltYWdlVXJsKSB8fCBCb29sZWFuKHdlbGNvbWVNZXNzYWdlKSk7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBvc3NpYmxlUXVlcmllcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAhaGFzVXNlck1lc3NhZ2VzICYmXG4gICAgICAgICAgICAobWVzc2FnZXMubGVuZ3RoID09PSAwIHx8IG1lc3NhZ2VzWzBdLnNwZWFrZXIgIT09ICdhZ2VudCcpICYmXG4gICAgICAgICAgICAhc2hvd2luZ1N5bnRoZXRpY1dlbGNvbWVcbiAgICAgICAgICApO1xuICAgICAgICB9KSgpICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXtwb3NzaWJsZVF1ZXJpZXNDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICB7cG9zc2libGVRdWVyaWVzLm1hcCgocXVlcnksIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBzdHlsZT17cXVlcnlCdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVRdWVyeUNsaWNrKHF1ZXJ5KX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nIHx8IGlzQWdlbnRUeXBpbmd9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7cXVlcnl9XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIFxuICAgICAgICB7YXR0YWNobWVudHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiAnMCAxNnB4JywgbWFyZ2luQm90dG9tOiAnOHB4JywgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICc4cHgnLCBmbGV4V3JhcDogJ3dyYXAnIH19PlxuICAgICAgICAgICAge2F0dGFjaG1lbnRzLm1hcCgoYXR0LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICA8QXR0YWNobWVudFByZXZpZXcgXG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH0gXG4gICAgICAgICAgICAgICAgZmlsZT17YXR0LmZpbGV9IFxuICAgICAgICAgICAgICAgIG9uUmVtb3ZlPXsoKSA9PiBoYW5kbGVSZW1vdmVBdHRhY2htZW50KGF0dC5maWxlLm5hbWUpfVxuICAgICAgICAgICAgICAgIHVwbG9hZGluZz17dXBsb2FkaW5nRmlsZXMuaGFzKGF0dC5maWxlLm5hbWUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG5cbiAgICAgICAgeyFjb252ZXJzYXRpb25JZCB8fCBpc0ZpbmFsaXplZCA/IChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXtpbnB1dENvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7Li4uc2VuZEJ1dHRvblN0eWxlLCB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICc0OHB4JywgYm9yZGVyUmFkaXVzOiAnMTZweCcsIGN1cnNvcjogJ3BvaW50ZXInLCBmb250RmFtaWx5LCBmb250U2l6ZX19XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVN0YXJ0Q29udmVyc2F0aW9ufVxuICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dCgnYnV0dG9ucy5zdGFydENvbnZlcnNhdGlvbicpfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gc3R5bGU9e2lucHV0Q29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17aW5wdXRXcmFwcGVyU3R5bGV9PlxuICAgICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgICAgICBzdHlsZT17YXR0YWNoQnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgdGl0bGU9XCJBdHRhY2hcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFBhcGVyY2xpcCBzaXplPXsyMn0gY29sb3I9e2lzQWdlbnRUeXBpbmcgPyBcIiNiMGIwYjBcIiA6IFwiIzc1NzU3NVwifSAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgcmVmPXtmaWxlSW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUZpbGVDaGFuZ2V9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgIHJlZj17dGV4dEFyZWFSZWZ9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3RleHRBcmVhU3R5bGV9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZ2EtdGV4dGFyZWEtbm9zYlwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWV9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRJbnB1dFZhbHVlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGlucHV0VmFsdWUudHJpbSgpICE9PSAnJyB8fCBhdHRhY2htZW50cy5sZW5ndGggPiAwKSAmJiBjb25uZWN0aW9uU3RhdGUgPT09ICdjb25uZWN0ZWQnICYmICFpc0FnZW50VHlwaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3VibWl0TWVzc2FnZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17aW5wdXRQbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNvbnZlcnNhdGlvbklkIHx8IGlzRmluYWxpemVkIHx8IGlzQWdlbnRUeXBpbmd9XG4gICAgICAgICAgICAgICAgcm93cz17MX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17cmlnaHRBY3Rpb25Db250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICAgICAge2lucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgICA8Vm9pY2VJbnB1dFxuICAgICAgICAgICAgICAgICAgICBvblRyYW5zY3JpcHRpb249eyh0ZXh0OiBzdHJpbmcpID0+IHNldElucHV0VmFsdWUodGV4dCl9XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3I9e2hhbmRsZVZvaWNlRXJyb3J9XG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmw9e2Jhc2VVcmx9XG4gICAgICAgICAgICAgICAgICAgIGFwaUtleT17YXBpS2V5fVxuICAgICAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiIFxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17c2VuZEJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17KGlucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDApIHx8IGNvbm5lY3Rpb25TdGF0ZSAhPT0gJ2Nvbm5lY3RlZCcgfHwgaXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEFycm93VXAgc2l6ZT17MTh9IHN0cm9rZVdpZHRoPXszfSBjb2xvcj1cIiNmZmZmZmZcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBzdHlsZT17Y29uZmlybU92ZXJsYXlTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e2NvbmZpcm1EaWFsb2dTdHlsZX0+XG4gICAgICAgICAgPGgzIHN0eWxlPXt7Zm9udEZhbWlseSwgbWFyZ2luVG9wOiAwfX0+e3QoJ2RpYWxvZy5yZXNldENvbnZlcnNhdGlvbi50aXRsZScpfTwvaDM+XG4gICAgICAgICAgPHAgc3R5bGU9e3tmb250RmFtaWx5LCBmb250U2l6ZX19Pnt0KCdkaWFsb2cucmVzZXRDb252ZXJzYXRpb24ubWVzc2FnZScpfTwvcD5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXtjb25maXJtQnV0dG9uc1N0eWxlfT5cbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3suLi5jb25maXJtQnV0dG9uU3R5bGUoZmFsc2UpLCBjb2xvcjogdGV4dENvbG9yfX0gb25DbGljaz17aGFuZGxlQ2FuY2VsUmVzZXR9Pnt0KCdidXR0b25zLmNhbmNlbCcpfTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17Y29uZmlybUJ1dHRvblN0eWxlKHRydWUpfSBvbkNsaWNrPXtoYW5kbGVDb25maXJtUmVzZXR9Pnt0KCdidXR0b25zLnJlc2V0Jyl9PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG5cbiAgaWYgKG1vZGUgPT09ICdmbG9hdGluZycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgeyFpc0Zsb2F0aW5nT3BlbiAmJiAoXG4gICAgICAgICAgPENoYXRCdWJibGVcbiAgICAgICAgICAgIHNob3dDaGF0PXtpc0Zsb2F0aW5nT3Blbn1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldElzRmxvYXRpbmdPcGVuKHByZXYgPT4gIXByZXYpfVxuICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICBzdHlsZT17Z2V0UG9zaXRpb25TdHlsZXMoKX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICBcbiAgICAgICAge2lzRmxvYXRpbmdPcGVuICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXtmbG9hdGluZ0NvbnRhaW5lclN0eWxlfSBkYXRhLWdlbmFzc2lzdC1jb250YWluZXI9XCJmbG9hdGluZ1wiPlxuICAgICAgICAgICAge3JlbmRlcldpdGhSZUNhcHRjaGEocmVuZGVyQ2hhdENvbXBvbmVudCgpKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBpZiAobW9kZSA9PT0gJ2Z1bGxzY3JlZW4nKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e2Zsb2F0aW5nQ29udGFpbmVyU3R5bGV9IGRhdGEtZ2VuYXNzaXN0LWNvbnRhaW5lcj1cImZ1bGxzY3JlZW5cIj5cbiAgICAgICAge3JlbmRlcldpdGhSZUNhcHRjaGEocmVuZGVyQ2hhdENvbXBvbmVudCgpKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcmVuZGVyV2l0aFJlQ2FwdGNoYShyZW5kZXJDaGF0Q29tcG9uZW50KCkpO1xufTtcbiJdfQ==
|
|
1205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuQWdlbnRDaGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvR2VuQWdlbnRDaGF0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDbEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMzRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sUUFBUSxNQUFNLHlCQUF5QixDQUFDO0FBRS9DLDBDQUEwQztBQUUxQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLDBCQUEwQixHQUMzQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHckYsTUFBTSxDQUFDLElBQU0sWUFBWSxHQUFnQyxVQUFDLEVBMEJ6RDtRQXpCQyxPQUFPLGFBQUEsRUFDUCxNQUFNLFlBQUEsRUFDTixNQUFNLFlBQUEsRUFDTixRQUFRLGNBQUEsRUFDUixhQUFZLEVBQVosS0FBSyxtQkFBRyxJQUFJLEtBQUEsRUFDWixPQUFPLGFBQUEsRUFDUCxVQUFVLGdCQUFBLEVBQ1YsVUFBVSxnQkFBQSxFQUNWLEtBQUssV0FBQSxFQUNMLG1CQUF5QixFQUF6QixXQUFXLG1CQUFHLFdBQVcsS0FBQSxFQUN6QixXQUFXLGlCQUFBLEVBQ1gsV0FBVyxpQkFBQSxFQUNYLFNBQVMsZUFBQSxFQUNULE9BQU8sYUFBQSxFQUNQLFlBQWlCLEVBQWpCLElBQUksbUJBQUcsVUFBVSxLQUFBLEVBQ2pCLHNCQUFtQixFQUFuQixjQUFjLG1CQUFHLEVBQUUsS0FBQSxFQUNuQixRQUFRLGNBQUEsRUFDTSxrQkFBa0Isa0JBQUEsRUFDaEMsWUFBWSxrQkFBQSxFQUNaLGNBQWMsRUFBZCxNQUFNLG1CQUFHLEtBQUssS0FBQSxFQUNkLGdCQUFnQixFQUFoQixRQUFRLG1CQUFHLEtBQUssS0FBQSxFQUNoQixlQUFlLEVBQWYsT0FBTyxtQkFBRyxLQUFLLEtBQUEsRUFDZix3QkFBd0IsRUFBeEIsZ0JBQWdCLG1CQUFHLEtBQUssS0FBQSxFQUN4Qiw4QkFBNkIsRUFBN0Isc0JBQXNCLG1CQUFHLElBQUksS0FBQSxFQUM3Qix5QkFBc0IsRUFBdEIsaUJBQWlCLG1CQUFHLEVBQUUsS0FBQTtJQUV0QiwyREFBMkQ7SUFDckQsSUFBQSxLQUEwQyxRQUFRLENBQVM7UUFDL0QsSUFBSSxRQUFRO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFDOUIsSUFBTSxNQUFNLEdBQUcsT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNqRyxJQUFJLE1BQU07WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUMxQixPQUFPLGVBQWUsRUFBRSxDQUFDO0lBQzNCLENBQUMsQ0FBQyxFQUxLLGdCQUFnQixRQUFBLEVBQUUsbUJBQW1CLFFBSzFDLENBQUM7SUFFSCxnREFBZ0Q7SUFDaEQsU0FBUyxDQUFDO1FBQ1IsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMvQyxZQUFZLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDL0QsQ0FBQztJQUNILENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFakMsd0NBQXdDO0lBQ2xDLElBQUEsS0FBMEMsUUFBUSxDQUFnQixJQUFJLENBQUMsRUFBdEUsZ0JBQWdCLFFBQUEsRUFBRSxtQkFBbUIsUUFBaUMsQ0FBQztJQUU5RSxxREFBcUQ7SUFDckQsSUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7UUFDL0IsSUFBSSxRQUFRO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFDOUIsT0FBTyxnQkFBZ0IsSUFBSSxlQUFlLEVBQUUsSUFBSSxJQUFJLENBQUM7SUFDdkQsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUVqQyw2Q0FBNkM7SUFDN0MsSUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUM7UUFDbkMsc0NBQ0ssQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLEtBQ25CLFFBQVEsRUFBRSxnQkFBZ0IsS0FDdkIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQzVEO0lBQ0osQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUVuRCxtRkFBbUY7SUFDbkYsSUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDO1FBQzNCLCtDQUErQztRQUMvQyxJQUFNLGdCQUFnQixHQUFHLDBCQUEwQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdEUsbURBQW1EO1FBQ25ELE9BQU8saUJBQWlCLENBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUNqRSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7SUFFM0MsOEJBQThCO0lBQzlCLElBQU0sQ0FBQyxHQUFHLFVBQUMsR0FBVyxFQUFFLFFBQWlCO1FBQ3ZDLE9BQU8sb0JBQW9CLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzRCxDQUFDLENBQUM7SUFFRixxREFBcUQ7SUFDckQsdUNBQXVDO0lBQ3ZDLElBQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO1FBQy9CLHFEQUFxRDtRQUNyRCx5RUFBeUU7UUFDekUsT0FBTyxXQUFXLElBQUksQ0FBQyxDQUFDLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDakUsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDMUIsSUFBQSxLQUE4QixRQUFRLENBQUMsRUFBRSxDQUFDLEVBQXpDLFVBQVUsUUFBQSxFQUFFLGFBQWEsUUFBZ0IsQ0FBQztJQUMzQyxJQUFBLEtBQTBDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBeEQsZ0JBQWdCLFFBQUEsRUFBRSxtQkFBbUIsUUFBbUIsQ0FBQztJQUMxRCxJQUFBLEtBQTBCLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBeEMsUUFBUSxRQUFBLEVBQUUsV0FBVyxRQUFtQixDQUFDO0lBQzFDLElBQUEsS0FBa0QsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFoRSxvQkFBb0IsUUFBQSxFQUFFLHVCQUF1QixRQUFtQixDQUFDO0lBQ2xFLElBQUEsS0FBc0MsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFwRCxjQUFjLFFBQUEsRUFBRSxpQkFBaUIsUUFBbUIsQ0FBQztJQUN0RCxJQUFBLEtBQXNDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBcEQsY0FBYyxRQUFBLEVBQUUsaUJBQWlCLFFBQW1CLENBQUM7SUFDdEQsSUFBQSxLQUFnQyxRQUFRLENBQXVCLEVBQUUsQ0FBQyxFQUFqRSxXQUFXLFFBQUEsRUFBRSxjQUFjLFFBQXNDLENBQUM7SUFDbkUsSUFBQSxLQUFzQyxRQUFRLENBQWMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFyRSxjQUFjLFFBQUEsRUFBRSxpQkFBaUIsUUFBb0MsQ0FBQztJQUM3RSxJQUFNLE9BQU8sR0FBRyxNQUFNLENBQWlCLElBQUksQ0FBQyxDQUFDO0lBQzdDLElBQU0sWUFBWSxHQUFHLE1BQU0sQ0FBbUIsSUFBSSxDQUFDLENBQUM7SUFDcEQsSUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFzQixJQUFJLENBQUMsQ0FBQztJQUN0RCxJQUFNLFNBQVMsR0FBRyxNQUFNLENBQWlCLElBQUksQ0FBQyxDQUFDO0lBQ3pDLElBQUEsS0FBa0MsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUE3QyxZQUFZLFFBQUEsRUFBRSxlQUFlLFFBQWdCLENBQUM7SUFDL0MsSUFBQSxLQUFvQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQWxELGFBQWEsUUFBQSxFQUFFLGdCQUFnQixRQUFtQixDQUFDO0lBQ3BELElBQUEsS0FBZ0QsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUE5RCxtQkFBbUIsUUFBQSxFQUFFLHNCQUFzQixRQUFtQixDQUFDO0lBRXRFLHlEQUF5RDtJQUN6RCxJQUFNLHlCQUF5QixHQUFHLE9BQU8sQ0FDdkMsY0FBTSxPQUFBLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFLFlBQVksRUFBRTtRQUMzRCxXQUFXO1FBQ1gsMEJBQTBCO1FBQzFCLHNCQUFzQjtRQUN0Qix3QkFBd0I7UUFDeEIsc0JBQXNCO1FBQ3RCLDBCQUEwQjtRQUMxQixvQkFBb0I7UUFDcEIsZUFBZTtLQUNoQixDQUFDLEVBVEksQ0FTSixFQUNGLENBQUMsWUFBWSxDQUFDLENBQ2YsQ0FBQztJQUNJLElBQUEsS0FBa0QsUUFBUSxDQUFXLEVBQUUsQ0FBQyxFQUF2RSxvQkFBb0IsUUFBQSxFQUFFLHVCQUF1QixRQUEwQixDQUFDO0lBQ3pFLElBQUEsS0FBMEQsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFwRSx3QkFBd0IsUUFBQSxFQUFFLDJCQUEyQixRQUFlLENBQUM7SUFDdEUsSUFBQSxLQWtCRixPQUFPLENBQUM7UUFDVixPQUFPLFNBQUE7UUFDUCxNQUFNLFFBQUE7UUFDTixNQUFNLFFBQUE7UUFDTixRQUFRLEVBQUUsb0JBQW9CO1FBQzlCLEtBQUssT0FBQTtRQUNMLFFBQVEsRUFBRSxnQkFBZ0I7UUFDMUIsT0FBTyxTQUFBO1FBQ1AsVUFBVSxZQUFBO1FBQ1YsVUFBVSxZQUFBO0tBQ1gsQ0FBQyxFQTNCQSxRQUFRLGNBQUEsRUFDUixTQUFTLGVBQUEsRUFDVCxXQUFXLGlCQUFBLEVBQ1gsVUFBVSxnQkFBQSxFQUNWLGlCQUFpQix1QkFBQSxFQUNqQixpQkFBaUIsdUJBQUEsRUFDakIsZUFBZSxxQkFBQSxFQUNmLGNBQWMsb0JBQUEsRUFDZCxlQUFlLHFCQUFBLEVBQ2YsV0FBVyxpQkFBQSxFQUNYLGFBQWEsbUJBQUEsRUFDYixXQUFXLGlCQUFBLEVBQ1gsWUFBWSxrQkFBQSxFQUNaLGVBQWUscUJBQUEsRUFDZixjQUFjLG9CQUFBLEVBQ2QsZUFBZSxxQkFBQSxFQUNmLGVBQWUscUJBV2YsQ0FBQztJQUNILElBQU0sY0FBYyxHQUFHLE1BQU0sQ0FBaUIsSUFBSSxDQUFDLENBQUM7SUFDcEQsSUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFzQixJQUFJLENBQUMsQ0FBQztJQUN2RCxJQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxJQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBaUIsSUFBSSxDQUFDLENBQUM7SUFDdEQsSUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQXFCLFNBQVMsQ0FBQyxDQUFDO0lBQ2hFLElBQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXZDLElBQU0sYUFBYSxHQUFHO1FBQ3BCLElBQU0sRUFBRSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUNwQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUNsRSxJQUFJLEVBQUUsQ0FBQyxZQUFZLEtBQUssQ0FBQztZQUFFLE9BQU8sQ0FBQyxtQ0FBbUM7UUFDdEUsRUFBRSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDO1FBQy9CLGtCQUFrQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbEMsaUJBQWlCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUNuQyxDQUFDLENBQUM7SUFFRixJQUFNLGNBQWMsR0FBRyxVQUFDLFFBQW1DLEVBQUUsS0FBc0I7UUFBM0QseUJBQUEsRUFBQSxtQkFBbUM7UUFBRSxzQkFBQSxFQUFBLGFBQXNCO1FBQ2pGLElBQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUMzQyxJQUFNLEVBQUUsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxFQUFFO1lBQUUsT0FBTztRQUU5Qix5RUFBeUU7UUFDekUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBTSxRQUFRLEdBQUc7WUFDZixTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxZQUFZLEVBQUUsUUFBUSxVQUFBLEVBQUUsQ0FBQyxDQUFDO1lBQzlELGlCQUFpQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkMsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxRQUFRLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDeEIsUUFBUSxFQUFFLENBQUM7UUFDYixDQUFDO2FBQU0sQ0FBQztZQUNOLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRixJQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQUEsT0FBTyxJQUFJLE9BQUEsT0FBTyxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQTlCLENBQThCLENBQUMsQ0FBQztJQUVqRixTQUFTLENBQUM7UUFDUixZQUFZLENBQUMsT0FBTyxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsT0FBTyxTQUFBLEVBQUUsTUFBTSxRQUFBLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRXRCLGVBQWUsQ0FBQztRQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDN0IsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMvQixjQUFjLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLENBQUM7YUFBTSxDQUFDO1lBQ04sYUFBYSxFQUFFLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFZixlQUFlLENBQUM7UUFDZCxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFDM0Isb0NBQW9DO1FBQ3BDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLHdCQUF3QixFQUFFLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFFM0UsU0FBUyxDQUFDO1FBQ1Isa0JBQWtCLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNyQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBRXJCLHFEQUFxRDtJQUNyRCxTQUFTLENBQUM7UUFDUixJQUFJLElBQUksS0FBSyxZQUFZLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM3QyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFFM0IsMERBQTBEO0lBQzFELElBQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JELFNBQVMsQ0FBQztRQUNSLHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxJQUFJLEtBQUssWUFBWSxDQUFDLElBQUksY0FBYyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUgsbURBQW1EO1lBQ25ELGtCQUFrQixDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDbkMsaUJBQWlCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUVqQyxtREFBbUQ7WUFDbkQsSUFBTSxtQkFBaUIsR0FBRztnQkFDeEIsSUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ2YscUJBQXFCLENBQUMsbUJBQWlCLENBQUMsQ0FBQztvQkFDekMsT0FBTztnQkFDVCxDQUFDO2dCQUVELGdDQUFnQztnQkFDaEMsSUFBSSxTQUFTLENBQUMsWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUNqQyxxQkFBcUIsQ0FBQyxtQkFBaUIsQ0FBQyxDQUFDO29CQUN6QyxPQUFPO2dCQUNULENBQUM7Z0JBRUQsbUJBQW1CO2dCQUNuQixTQUFTLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUM7Z0JBQzdDLGtCQUFrQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ2xDLGlCQUFpQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDbkMsQ0FBQyxDQUFDO1lBRUYsK0NBQStDO1lBQy9DLHFCQUFxQixDQUFDO2dCQUNwQixxQkFBcUIsQ0FBQyxtQkFBaUIsQ0FBQyxDQUFDO1lBQzNDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELHFCQUFxQixDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUM7SUFDakQsQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFM0IsU0FBUyxDQUFDO1FBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUM3QixJQUFNLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7UUFDcEMsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFPO1FBRWhCLHVEQUF1RDtRQUN2RCxJQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQztZQUN4QyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM5QixhQUFhLEVBQUUsQ0FBQztZQUNsQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTNCLGFBQWEsRUFBRSxDQUFDO1FBRWhCLE9BQU87WUFDTCxjQUFjLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUIsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUVmLFNBQVMsQ0FBQztRQUNSLElBQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUMzQyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFFdkIsSUFBTSxVQUFVLEdBQUcsVUFBQyxTQUF1QjtZQUF2QiwwQkFBQSxFQUFBLGVBQXVCO1lBQ3pDLElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3BCLElBQUEsU0FBUyxHQUFpQyxTQUFTLFVBQTFDLEVBQUUsWUFBWSxHQUFtQixTQUFTLGFBQTVCLEVBQUUsWUFBWSxHQUFLLFNBQVMsYUFBZCxDQUFlO1lBQzVELE9BQU8sWUFBWSxHQUFHLFNBQVMsR0FBRyxZQUFZLElBQUksU0FBUyxDQUFDO1FBQzlELENBQUMsQ0FBQztRQUNGLElBQU0sWUFBWSxHQUFHO1lBQ25CLGlCQUFpQixDQUFDLE9BQU8sR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUMzQyxDQUFDLENBQUM7UUFDRixTQUFTLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLFlBQVksRUFBRSxDQUFDO1FBRWYsT0FBTztZQUNMLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRVAsZUFBZSxDQUFDO1FBQ2QsSUFBTSxrQkFBa0IsR0FBRzs7WUFDekIsZUFBZSxDQUFDLENBQUEsTUFBQSxTQUFTLENBQUMsT0FBTywwQ0FBRSxZQUFZLEtBQUksRUFBRSxDQUFDLENBQUM7UUFDekQsQ0FBQyxDQUFDO1FBQ0Ysa0JBQWtCLEVBQUUsQ0FBQztRQUNyQixJQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxjQUFNLE9BQUEsa0JBQWtCLEVBQUUsRUFBcEIsQ0FBb0IsQ0FBQyxDQUFDO1FBQ3RFLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLGNBQWMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFDRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDdEQsT0FBTztZQUNMLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM1QixNQUFNLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRVAsNkRBQTZEO0lBQzdELFNBQVMsQ0FBQztRQUNSLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsY0FBTSxPQUFBLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUF2QixDQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsaUJBQWlCO1FBQzNFLE9BQU8sY0FBTSxPQUFBLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBZixDQUFlLENBQUM7SUFDL0IsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUVwQixnREFBZ0Q7SUFDaEQsU0FBUyxDQUFDO1FBQ1IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLE9BQU87UUFDVCxDQUFDO1FBRUQseUNBQXlDO1FBQ3pDLElBQU0sSUFBSSxHQUFHLENBQUMsZUFBZSxJQUFJLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUM7UUFDM0csSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVELElBQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV6Qyw0RUFBNEU7UUFDNUUsSUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFDeEMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFYLENBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFBLElBQUksSUFBSSxPQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFmLENBQWUsQ0FBQztZQUNwRixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUU1Qiw2QkFBNkI7UUFDN0IsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFL0IsZ0RBQWdEO1FBQ2hELElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQUUsT0FBTztRQUU5Qiw4REFBOEQ7UUFDOUQsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsZUFBZSxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ3hELElBQU0sVUFBVSxHQUFvQyxFQUFFLENBQUM7Z0NBRzlDLENBQUM7WUFDUixJQUFNLFNBQVMsR0FBRyxVQUFVLENBQUM7Z0JBQzNCLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDakIsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzs7UUFMN0IsMkNBQTJDO1FBQzNDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtvQkFBNUIsQ0FBQztTQUtUO1FBRUQsT0FBTztZQUNMLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBQSxFQUFFLElBQUksT0FBQSxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQWhCLENBQWdCLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUM7SUFDSixDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFFdEQsSUFBTSxhQUFhLEdBQUc7Ozs7O29CQUNwQixJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDO3dCQUFFLHNCQUFPO29CQUNqRSxJQUFJLGFBQWE7d0JBQUUsc0JBQU8sQ0FBQyxpREFBaUQ7b0JBQ3RFLFVBQVUsR0FBRyxVQUFVLENBQUM7b0JBRXhCLGFBQWEsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLElBQUksRUFBTixDQUFNLENBQUMsQ0FBQztvQkFDbkQsOERBQThEO29CQUU5RCxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2xCLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDbkIsb0VBQW9FO29CQUNwRSxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDekIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO29CQUNsQyxDQUFDOzs7O29CQUlPLGFBQWEsR0FBd0IsRUFBRSxDQUFDO29CQUU5QyxJQUFJLGdCQUFnQixFQUFFLENBQUM7d0JBQ3JCLGFBQWEsQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUM7b0JBQzdDLENBQUM7b0JBRUQsSUFBSSxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUM3QixhQUFhLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsVUFBVSxFQUFaLENBQVksQ0FBQyxDQUFDO29CQUNqRSxDQUFDO29CQUVELGdDQUFnQztvQkFDaEMscUJBQU0sV0FBVyxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFBOztvQkFEdEYsZ0NBQWdDO29CQUNoQyxTQUFzRixDQUFDOzs7Ozs7OztTQUkxRixDQUFDO0lBRUYsSUFBTSxZQUFZLEdBQUcsVUFBTyxDQUFrQjs7OztvQkFDNUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUNuQixxQkFBTSxhQUFhLEVBQUUsRUFBQTs7b0JBQXJCLFNBQXFCLENBQUM7Ozs7U0FDdkIsQ0FBQztJQUVGLElBQU0saUJBQWlCLEdBQUcsVUFBTyxJQUFZOzs7OztvQkFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7d0JBQUUsc0JBQU87b0JBQ3pCLElBQUksYUFBYTt3QkFBRSxzQkFBTyxDQUFDLGlEQUFpRDs7OztvQkFHcEUsYUFBYSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQ3JGLHFCQUFNLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBQTs7b0JBQXJFLFNBQXFFLENBQUM7Ozs7Ozs7O1NBSXpFLENBQUM7SUFFRixJQUFNLHFCQUFxQixHQUFHLFVBQU8sUUFBc0I7Ozs7O29CQUNuRCxPQUFPLEdBQUcsa0NBQTJCLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxpQkFBYyxDQUFDOzs7O29CQUVuRixxQkFBTSxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUE7O29CQUF4RyxTQUF3RyxDQUFDOzs7Ozs7OztTQUk1RyxDQUFDO0lBRUYsSUFBTSxnQkFBZ0IsR0FBRyxVQUFPLENBQXNDOzs7Ozt5QkFDaEUsQ0FBQSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBLEVBQTNDLHdCQUEyQztvQkFDdkMsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFHdEMsbUJBQXVDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBQSxJQUFJLElBQUksT0FBQSxDQUFDLEVBQUMsSUFBSSxNQUFBLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLEVBQTFCLENBQTBCLENBQUMsQ0FBQztvQkFDOUYsY0FBYyxDQUFDLFVBQUEsSUFBSSxJQUFJLHVDQUFJLElBQUksU0FBSyxnQkFBYyxTQUEzQixDQUE0QixDQUFDLENBQUM7b0JBRS9DLHNCQUFvQixJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDbEQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFBLElBQUksSUFBSSxPQUFBLG1CQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQWhDLENBQWdDLENBQUMsQ0FBQztvQkFDM0QsaUJBQWlCLENBQUMsbUJBQWlCLENBQUMsQ0FBQzs7OztvQkFJYixxQkFBTSxPQUFPLENBQUMsR0FBRyxDQUNyQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQU8sSUFBSSxFQUFFLEtBQUs7Ozs7Ozs0Q0FDN0IsSUFBSSxNQUFBOzRDQUNKLEtBQUssT0FBQTs7d0NBQ08scUJBQU0sVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFBOzRDQUhBLHNCQUFBLENBR2xDLGFBQVUsR0FBRSxTQUFzQjsrQ0FDbEMsRUFBQTs7OzZCQUFBLENBQUMsQ0FDSixFQUFBOztvQkFOSyxhQUFhLEdBQUcsU0FNckI7b0JBR0ssd0JBQXNCLElBQUksR0FBRyxFQUE2QixDQUFDO29CQUNqRSxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQUMsRUFBb0I7NEJBQWxCLElBQUksVUFBQSxFQUFFLFVBQVUsZ0JBQUE7d0JBQ3ZDLElBQU0sT0FBTyxHQUFHLFVBQUcsSUFBSSxDQUFDLElBQUksY0FBSSxJQUFJLENBQUMsSUFBSSxjQUFJLElBQUksQ0FBQyxZQUFZLENBQUUsQ0FBQzt3QkFDakUscUJBQW1CLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztvQkFDL0MsQ0FBQyxDQUFDLENBQUM7b0JBRUgsdURBQXVEO29CQUN2RCxjQUFjLENBQUMsVUFBQSxJQUFJO3dCQUNqQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBQSxHQUFHOzRCQUNqQixJQUFNLE9BQU8sR0FBRyxVQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxjQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxjQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFFLENBQUM7NEJBQzdFLElBQU0sa0JBQWtCLEdBQUcscUJBQW1CLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDOzRCQUU1RCx3RUFBd0U7NEJBQ3hFLElBQUksa0JBQWtCLEtBQUssU0FBUyxFQUFFLENBQUM7Z0NBQ3JDLDZCQUNLLEdBQUcsS0FDTixVQUFVLEVBQUUsa0JBQWtCLElBQzlCOzRCQUNKLENBQUM7NEJBQ0QsT0FBTyxHQUFHLENBQUM7d0JBQ2IsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7Ozs7b0JBRUgsU0FBUztvQkFDVCxPQUFPLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLE9BQUssQ0FBQyxDQUFDOzs7b0JBRXZDLHdCQUFzQixJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDcEQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFBLElBQUksSUFBSSxPQUFBLHFCQUFtQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQXJDLENBQXFDLENBQUMsQ0FBQztvQkFDaEUsaUJBQWlCLENBQUMscUJBQW1CLENBQUMsQ0FBQztvQkFDdkMsb0VBQW9FO29CQUNwRSxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDekIsWUFBWSxDQUFDLE9BQVEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO29CQUNuQyxDQUFDOzs7OztTQUdOLENBQUM7SUFFRixJQUFNLHNCQUFzQixHQUFHLFVBQUMsUUFBZ0I7UUFDOUMsY0FBYyxDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFBLEdBQUcsSUFBSSxPQUFBLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBMUIsQ0FBMEIsQ0FBQyxFQUE5QyxDQUE4QyxDQUFDLENBQUM7SUFDekUsQ0FBQyxDQUFDO0lBRUYsSUFBTSxnQkFBZ0IsR0FBRyxVQUFDLEtBQVk7UUFDcEMsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsSUFBTSxpQkFBaUIsR0FBRyxVQUFPLElBQVk7Ozs7O29CQUMzQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sSUFBSSxjQUFjO3dCQUFFLHNCQUFPOzs7O29CQUdsRCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDTixxQkFBTSxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBQTs7b0JBQXpELFNBQVMsR0FBRyxTQUE2QztvQkFDL0QscUJBQU0sWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUE7O29CQUEvQyxTQUErQyxDQUFDOzs7O29CQUVoRCxJQUFJLE9BQU8sRUFBRSxDQUFDO3dCQUNaLE9BQU8sQ0FBQyxPQUFjLENBQUMsQ0FBQztvQkFDMUIsQ0FBQzs7O29CQUVELGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDOzs7OztTQUU1QixDQUFDO0lBRUYsSUFBTSxnQkFBZ0IsR0FBRyxVQUFPLEtBQWE7Ozs7O29CQUMzQyxJQUFJLGFBQWEsSUFBSSxTQUFTO3dCQUFFLHNCQUFPLENBQUMsaURBQWlEO29CQUV6RixrREFBa0Q7b0JBQ2xELG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDOzs7O29CQUd6QixxQkFBTSxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBQTs7b0JBQTdFLFNBQTZFLENBQUM7Ozs7Ozs7O1NBSWpGLENBQUM7SUFFRixJQUFNLHVCQUF1QixHQUFHOzs7OztvQkFDOUIsSUFBSSxTQUFTO3dCQUFFLHNCQUFPO29CQUV0QixxRUFBcUU7b0JBQ3JFLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDbEIsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNuQixJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDekIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO29CQUNsQyxDQUFDOzs7O29CQUdDLHFCQUFNLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFBOztvQkFBbEQsU0FBa0QsQ0FBQzs7OztvQkFFbkQsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxPQUFLLENBQUMsQ0FBQzs7Ozs7U0FFdkQsQ0FBQztJQUVGLElBQU0sZUFBZSxHQUFHO1FBQ3RCLFdBQVcsQ0FBQyxVQUFBLElBQUksSUFBSSxPQUFBLENBQUMsSUFBSSxFQUFMLENBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUMsQ0FBQztJQUVGLElBQU0sZ0JBQWdCLEdBQUc7UUFDdkIsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUMsQ0FBQztJQUVGLElBQU0sa0JBQWtCLEdBQUc7Ozs7b0JBQ3pCLHdEQUF3RDtvQkFDeEQsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNsQixjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ25CLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUN6QixZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7b0JBQ2xDLENBQUM7b0JBRUQscUJBQU0saUJBQWlCLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUE7O29CQUFsRCxTQUFrRCxDQUFDO29CQUNuRCxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtvQkFDdEQsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7Ozs7U0FDNUIsQ0FBQztJQUVGLElBQU0saUJBQWlCLEdBQUc7UUFDeEIsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQyxDQUFDO0lBRUYsSUFBTSxvQkFBb0IsR0FBRyxVQUFDLElBQVk7UUFDeEMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDO0lBRUYsSUFBTSxzQkFBc0IsR0FBRztRQUM3QixzQkFBc0IsQ0FBQyxVQUFBLElBQUksSUFBSSxPQUFBLENBQUMsSUFBSSxFQUFMLENBQUssQ0FBQyxDQUFDO1FBQ3RDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUM7SUFFRixpREFBaUQ7SUFDM0MsSUFBQSxLQUFnQyxRQUFRLENBQUMsT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBakcsV0FBVyxRQUFBLEVBQUUsY0FBYyxRQUFzRSxDQUFDO0lBRXpHLHNIQUFzSDtJQUN0SCxJQUFNLFlBQVksR0FBRyxPQUFPLENBQUM7UUFDM0IsMkNBQTJDO1FBQzNDLElBQUksSUFBSSxLQUFLLFlBQVk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN2Qyw0Q0FBNEM7UUFDNUMsSUFBSSxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEIsd0NBQXdDO1FBQ3hDLElBQUksbUJBQW1CO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDckMsa0NBQWtDO1FBQ2xDLE9BQU8sV0FBVyxJQUFJLEdBQUcsQ0FBQztJQUM1QixDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFckQsU0FBUyxDQUFDO1FBQ1IsSUFBTSxZQUFZLEdBQUc7WUFDbkIsY0FBYyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUM7UUFDRixNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2hELE9BQU8sY0FBTSxPQUFBLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQWxELENBQWtELENBQUM7SUFDbEUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRVAsdURBQXVEO0lBQ3ZELFNBQVMsQ0FBQztRQUNSLElBQUksWUFBWSxJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3BELElBQU0sZUFBYSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ3RFLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDeEMsT0FBTztnQkFDTCxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsZUFBYSxDQUFDO1lBQy9DLENBQUMsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBRW5CLElBQU0scUJBQXFCLEdBQUcsV0FBVyxDQUFDLFVBQUMsS0FBYTtRQUN0RCxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3BDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVQLHdDQUF3QztJQUN4QyxJQUFNLGtCQUFrQixHQUFHO1FBQ3pCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO1FBQy9CLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO1FBQy9CLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO1FBQ2hDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO1FBQy9CLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO1FBQ2hDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO0tBQ2xDLENBQUM7SUFFRixJQUFNLFlBQVksR0FBRyxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxZQUFZLEtBQUksU0FBUyxDQUFDO0lBQ3RELElBQU0sZUFBZSxHQUFHLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLGVBQWUsS0FBSSxTQUFTLENBQUM7SUFDNUQsSUFBTSxTQUFTLEdBQUcsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsU0FBUyxLQUFJLFNBQVMsQ0FBQztJQUNoRCxJQUFNLFVBQVUsR0FBRyxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxVQUFVLEtBQUksMkJBQTJCLENBQUM7SUFDcEUsSUFBTSxRQUFRLEdBQUcsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsUUFBUSxLQUFJLE1BQU0sQ0FBQztJQUMzQyxJQUFNLGNBQWMsR0FBRyxPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzlILElBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELElBQU0saUJBQWlCLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtJQUU1RCwrQ0FBK0M7SUFDL0MsSUFBTSxTQUFTLEdBQUcsVUFBQyxHQUFXLEVBQUUsS0FBYTtRQUMzQyxJQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEMsSUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLElBQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4QyxPQUFPLGVBQVEsQ0FBQyxlQUFLLENBQUMsZUFBSyxDQUFDLGVBQUssS0FBSyxNQUFHLENBQUM7SUFDNUMsQ0FBQyxDQUFDO0lBRUYsSUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLFFBQVEsSUFBSSxjQUFjLENBQUM7SUFDM0QsSUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3pELElBQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQy9CLElBQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBRS9CLElBQU0sY0FBYyxHQUF3QjtRQUMxQyxPQUFPLEVBQUUsTUFBTTtRQUNmLGFBQWEsRUFBRSxRQUFRO1FBQ3ZCLDRGQUE0RjtRQUM1RixNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU07UUFDekMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQzdFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUN0QyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU87UUFDMUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxtQkFBbUI7UUFDbkQsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNO1FBQ3pDLFFBQVEsRUFBRSxRQUFRO1FBQ2xCLGVBQWUsRUFBRSxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxjQUFjLEtBQUksU0FBUztRQUNuRCxVQUFVLFlBQUE7UUFDVixTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtRQUNsRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVU7UUFDN0MsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQ2pDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNsQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDbkMsaUVBQWlFO1FBQ2pFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQ3JFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUztLQUN4QyxDQUFDO0lBRUYsSUFBTSxXQUFXLEdBQXdCO1FBQ3ZDLE9BQU8sRUFBRSxNQUFNO1FBQ2YsZUFBZSxFQUFFLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLGNBQWMsS0FBSSxTQUFTO1FBQ25ELEtBQUssRUFBRSxTQUFTO1FBQ2hCLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLE9BQU8sRUFBRSxNQUFNO1FBQ2YsY0FBYyxFQUFFLGVBQWU7UUFDL0IsVUFBVSxFQUFFLFFBQVE7UUFDcEIsUUFBUSxFQUFFLFVBQVU7S0FDckIsQ0FBQztJQUVGLElBQU0sa0JBQWtCLEdBQXdCO1FBQzlDLE9BQU8sRUFBRSxNQUFNO1FBQ2YsVUFBVSxFQUFFLFFBQVE7UUFDcEIsR0FBRyxFQUFFLE1BQU07UUFDWCxRQUFRLEVBQUUsVUFBVTtRQUNwQixNQUFNLEVBQUUsQ0FBQztLQUNWLENBQUM7SUFFRixJQUFNLFNBQVMsR0FBd0I7UUFDckMsS0FBSyxFQUFFLE1BQU07UUFDYixNQUFNLEVBQUUsTUFBTTtLQUNmLENBQUM7SUFFRixJQUFNLHlCQUF5QixHQUF3QjtRQUNyRCxPQUFPLEVBQUUsTUFBTTtRQUNmLGFBQWEsRUFBRSxRQUFRO0tBQ3hCLENBQUM7SUFFRixJQUFNLGdCQUFnQixHQUF3QjtRQUM1QyxRQUFRLEVBQUUsTUFBTTtRQUNoQixVQUFVLEVBQUUsTUFBTTtRQUNsQixNQUFNLEVBQUUsQ0FBQztRQUNULFVBQVUsWUFBQTtLQUNYLENBQUM7SUFFRixJQUFNLG1CQUFtQixHQUF3QjtRQUMvQyxRQUFRLEVBQUUsTUFBTTtRQUNoQixVQUFVLEVBQUUsUUFBUTtRQUNwQixNQUFNLEVBQUUsQ0FBQztRQUNULFVBQVUsWUFBQTtLQUNYLENBQUM7SUFFRixJQUFNLGVBQWUsR0FBd0I7UUFDM0MsZUFBZSxFQUFFLGFBQWE7UUFDOUIsS0FBSyxFQUFFLFNBQVM7UUFDaEIsTUFBTSxFQUFFLE1BQU07UUFDZCxZQUFZLEVBQUUsS0FBSztRQUNuQixLQUFLLEVBQUUsTUFBTTtRQUNiLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFLE1BQU07UUFDZixVQUFVLEVBQUUsUUFBUTtRQUNwQixjQUFjLEVBQUUsUUFBUTtRQUN4QixNQUFNLEVBQUUsU0FBUztRQUNqQixPQUFPLEVBQUUsTUFBTTtRQUNmLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLE1BQU0sRUFBRSxDQUFDO0tBQ1YsQ0FBQztJQUVGLElBQU0sY0FBYyxHQUF3QjtRQUMxQyxRQUFRLEVBQUUsVUFBVTtRQUNwQixHQUFHLEVBQUUsTUFBTTtRQUNYLEtBQUssRUFBRSxNQUFNO1FBQ2IsZUFBZSxFQUFFLGVBQWU7UUFDaEMsWUFBWSxFQUFFLEtBQUs7UUFDbkIsU0FBUyxFQUFFLCtCQUErQjtRQUMxQyxNQUFNLEVBQUUsSUFBSTtRQUNaLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLFFBQVEsRUFBRSxTQUFTO0tBQ3BCLENBQUM7SUFFRixJQUFNLGFBQWEsR0FBd0I7UUFDekMsT0FBTyxFQUFFLE1BQU07UUFDZixVQUFVLEVBQUUsUUFBUTtRQUNwQixHQUFHLEVBQUUsS0FBSztRQUNWLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLEtBQUssRUFBRSxTQUFTO1FBQ2hCLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLFFBQVEsVUFBQTtRQUNSLFVBQVUsWUFBQTtRQUNWLFlBQVksRUFBRSxtQkFBbUI7S0FDbEMsQ0FBQztJQUdGLElBQU0sa0JBQWtCLEdBQXdCO1FBQzlDLElBQUksRUFBRSxDQUFDO1FBQ1AsU0FBUyxFQUFFLE1BQU07UUFDakIsT0FBTyxFQUFFLE1BQU07UUFDZixlQUFlLEVBQUUsYUFBYTtRQUM5QixPQUFPLEVBQUUsTUFBTTtRQUNmLGFBQWEsRUFBRSxRQUFRO0tBQ3hCLENBQUM7SUFFRixJQUFNLG1CQUFtQixHQUF3QjtRQUMvQyxPQUFPLEVBQUUsTUFBTTtRQUNmLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLGVBQWUsRUFBRSxTQUFTO1FBQzFCLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLEdBQUcsRUFBRSxLQUFLO1FBQ1YsVUFBVSxFQUFFLENBQUM7UUFDYixTQUFTLEVBQUUsUUFBUTtRQUNuQixRQUFRLEVBQUUsQ0FBQztLQUNaLENBQUM7SUFFRixJQUFNLGlCQUFpQixHQUF3QjtRQUM3QyxPQUFPLEVBQUUsTUFBTTtRQUNmLElBQUksRUFBRSxDQUFDO1FBQ1AsVUFBVSxFQUFFLFFBQVE7UUFDcEIsZUFBZSxFQUFFLFNBQVM7UUFDMUIsWUFBWSxFQUFFLE1BQU07UUFDcEIsTUFBTSxFQUFFLG1CQUFtQjtRQUMzQixPQUFPLEVBQUUsUUFBUTtRQUNqQixTQUFTLEVBQUUsTUFBTTtRQUNqQixTQUFTLEVBQUUsK0JBQStCO1FBQzFDLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLFNBQVMsRUFBRSxRQUFRO1FBQ25CLFFBQVEsRUFBRSxDQUFDO0tBQ1osQ0FBQztJQUVGLHdEQUF3RDtJQUN4RCxJQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQztRQUMvQixJQUFJLFdBQVcsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUN2QiwrQ0FBK0M7WUFDL0MsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDN0MsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUU1QyxJQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQztRQUNqQyxJQUFNLElBQUksR0FBRyxXQUFXLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO1FBQ2hGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFFbEMsSUFBTSwyQkFBMkIsR0FBRyxPQUFPLENBQUM7UUFDMUMsT0FBTyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7SUFDakQsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO0lBRXpCLElBQU0sYUFBYSxHQUF3QjtRQUN6QyxJQUFJLEVBQUUsQ0FBQztRQUNQLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFLE1BQU07UUFDZixVQUFVLEVBQUUsYUFBYTtRQUN6QixRQUFRLEVBQUUsZ0JBQWdCO1FBQzFCLFVBQVUsWUFBQTtRQUNWLE9BQU8sRUFBRSxNQUFNO1FBQ2YsWUFBWSxFQUFFLE1BQU07UUFDcEIsS0FBSyxFQUFFLFNBQVM7UUFDaEIsTUFBTSxFQUFFLE1BQU07UUFDZCxVQUFVLEVBQUUsVUFBRyxrQkFBa0IsT0FBSTtRQUNyQyxTQUFTLEVBQUUsVUFBRywyQkFBMkIsT0FBSTtRQUM3QyxTQUFTLEVBQUUsUUFBUTtRQUNuQixTQUFTLEVBQUUsUUFBUTtRQUNuQixRQUFRLEVBQUUsQ0FBQztRQUNYLEtBQUssRUFBRSxNQUFNO1FBQ2IsU0FBUyxFQUFFLFlBQVk7S0FDeEIsQ0FBQztJQUVGLElBQU0saUJBQWlCLEdBQXdCO1FBQzdDLGVBQWUsRUFBRSxhQUFhO1FBQzlCLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFLE1BQU07UUFDZixVQUFVLEVBQUUsUUFBUTtRQUNwQixjQUFjLEVBQUUsUUFBUTtRQUN4QixNQUFNLEVBQUUsU0FBUztRQUNqQixPQUFPLEVBQUUsTUFBTTtRQUNmLEtBQUssRUFBRSxTQUFTO1FBQ2hCLE9BQU8sRUFBRSxDQUFDO0tBQ1gsQ0FBQztJQUVGLElBQU0sZUFBZSxHQUF3QjtRQUMzQyxlQUFlLEVBQUUsWUFBWTtRQUM3QixLQUFLLEVBQUUsU0FBUztRQUNoQixNQUFNLEVBQUUsTUFBTTtRQUNkLFlBQVksRUFBRSxLQUFLO1FBQ25CLEtBQUssRUFBRSxNQUFNO1FBQ2IsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUUsTUFBTTtRQUNmLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLGNBQWMsRUFBRSxRQUFRO1FBQ3hCLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLE9BQU8sRUFBRSxNQUFNO1FBQ2YsVUFBVSxFQUFFLENBQUM7UUFDYixTQUFTLEVBQUUsK0JBQStCO0tBQzNDLENBQUM7SUFFRixJQUFNLHlCQUF5QixHQUF3QjtRQUNyRCxRQUFRLEVBQUUsVUFBVTtRQUNwQixLQUFLLEVBQUUsS0FBSztRQUNaLEdBQUcsRUFBRSxLQUFLO1FBQ1YsU0FBUyxFQUFFLGtCQUFrQjtRQUM3QixPQUFPLEVBQUUsTUFBTTtRQUNmLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLGNBQWMsRUFBRSxRQUFRO0tBQ3pCLENBQUM7SUFFRixJQUFNLGtCQUFrQixHQUFHO1FBQ3pCLElBQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFPO1FBQ2hCLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN6QixJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztRQUN6RSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxVQUFHLFNBQVMsT0FBSSxDQUFDO1FBQ25DLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxZQUFZLEdBQUcsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ3pGLENBQUMsQ0FBQztJQUVGLFNBQVMsQ0FBQztRQUNSLGtCQUFrQixFQUFFLENBQUM7SUFDdkIsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLDJCQUEyQixDQUFDLENBQUMsQ0FBQztJQUU5QyxJQUFNLDZCQUE2QixHQUF3QjtRQUN6RCxPQUFPLEVBQUUsTUFBTTtRQUNmLGFBQWEsRUFBRSxRQUFRO1FBQ3ZCLEdBQUcsRUFBRSxLQUFLO1FBQ1YsT0FBTyxFQUFFLEdBQUc7UUFDWixXQUFXLEVBQUUsTUFBTTtRQUNuQixZQUFZLEVBQUUsTUFBTTtRQUNwQixTQUFTLEVBQUUsS0FBSztRQUNoQixZQUFZLEVBQUUsTUFBTTtRQUNwQixLQUFLLEVBQUUsTUFBTTtRQUNiLFVBQVUsWUFBQTtLQUNYLENBQUM7SUFFRixJQUFNLGdCQUFnQixHQUF3QjtRQUM1QyxPQUFPLEVBQUUsV0FBVztRQUNwQixlQUFlLEVBQUUsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsY0FBYyxLQUFJLFNBQVM7UUFDbkQsS0FBSyxFQUFFLFNBQVM7UUFDaEIsTUFBTSxFQUFFLE1BQU07UUFDZCxZQUFZLEVBQUUsS0FBSztRQUNuQixRQUFRLFVBQUE7UUFDUixNQUFNLEVBQUUsU0FBUztRQUNqQixTQUFTLEVBQUUsTUFBTTtRQUNqQixVQUFVLEVBQUUsUUFBUTtRQUNwQixTQUFTLEVBQUUsTUFBTTtRQUNqQixLQUFLLEVBQUUsTUFBTTtRQUNiLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLFVBQVUsWUFBQTtLQUNYLENBQUM7SUFFRixJQUFNLG1CQUFtQixHQUF3QjtRQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUMzQyxRQUFRLEVBQUUsVUFBVTtRQUNwQixHQUFHLEVBQUUsQ0FBQztRQUNOLElBQUksRUFBRSxDQUFDO1FBQ1AsS0FBSyxFQUFFLENBQUM7UUFDUixNQUFNLEVBQUUsQ0FBQztRQUNULGVBQWUsRUFBRSxvQkFBb0I7UUFDckMsTUFBTSxFQUFFLEVBQUU7UUFDVixjQUFjLEVBQUUsUUFBUTtRQUN4QixVQUFVLEVBQUUsUUFBUTtLQUNyQixDQUFDO0lBRUYsSUFBTSxrQkFBa0IsR0FBd0I7UUFDOUMsZUFBZSxFQUFFLGVBQWU7UUFDaEMsT0FBTyxFQUFFLE1BQU07UUFDZixZQUFZLEVBQUUsS0FBSztRQUNuQixRQUFRLEVBQUUsT0FBTztRQUNqQixTQUFTLEVBQUUsUUFBUTtRQUNuQixVQUFVLFlBQUE7UUFDVixLQUFLLEVBQUUsU0FBUztLQUNqQixDQUFDO0lBRUYsSUFBTSxtQkFBbUIsR0FBd0I7UUFDL0MsT0FBTyxFQUFFLE1BQU07UUFDZixjQUFjLEVBQUUsUUFBUTtRQUN4QixTQUFTLEVBQUUsTUFBTTtRQUNqQixHQUFHLEVBQUUsTUFBTTtLQUNaLENBQUM7SUFFRixJQUFNLGtCQUFrQixHQUFHLFVBQUMsU0FBa0IsSUFBMEIsT0FBQSxDQUFDO1FBQ3ZFLE9BQU8sRUFBRSxVQUFVO1FBQ25CLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNsRCxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDeEMsTUFBTSxFQUFFLE1BQU07UUFDZCxZQUFZLEVBQUUsS0FBSztRQUNuQixNQUFNLEVBQUUsU0FBUztRQUNqQixVQUFVLFlBQUE7UUFDVixRQUFRLFVBQUE7S0FDVCxDQUFDLEVBVHNFLENBU3RFLENBQUM7SUFFSCxJQUFNLGdCQUFnQixHQUF3QjtRQUM1QyxJQUFJLEVBQUUsQ0FBQztRQUNQLE9BQU8sRUFBRSxNQUFNO1FBQ2YsYUFBYSxFQUFFLFFBQVE7UUFDdkIsZUFBZSxpQkFBQTtRQUNmLG1CQUFtQixFQUFFLEVBQUU7UUFDdkIsb0JBQW9CLEVBQUUsRUFBRTtRQUN4QixTQUFTLEVBQUUsNkJBQTZCO1FBQ3hDLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLE1BQU0sRUFBRSxDQUFDO1FBQ1QsUUFBUSxFQUFFLFFBQVE7UUFDbEIsU0FBUyxFQUFFLENBQUM7S0FDYixDQUFDO0lBRUYsdUJBQXVCO0lBQ3ZCLElBQU0saUJBQWlCLEdBQUc7UUFDeEIsSUFBTSxJQUFJLEdBQXdCO1lBQ2hDLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLE1BQU0sRUFBRSxJQUFJO1NBQ2IsQ0FBQztRQUVGLFFBQVEsUUFBUSxFQUFFLENBQUM7WUFDakIsS0FBSyxjQUFjO2dCQUNqQiw2QkFBWSxJQUFJLEtBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFHO1lBQ3RELEtBQUssYUFBYTtnQkFDaEIsNkJBQVksSUFBSSxLQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sSUFBRztZQUNyRCxLQUFLLFdBQVc7Z0JBQ2QsNkJBQVksSUFBSSxLQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBRztZQUNuRCxLQUFLLFVBQVU7Z0JBQ2IsNkJBQVksSUFBSSxLQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sSUFBRztZQUNsRDtnQkFDRSw2QkFBWSxJQUFJLEtBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFHO1FBQ3hELENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRixJQUFNLHFCQUFxQixHQUFHO1FBQzVCLElBQU0sSUFBSSxHQUF3QjtZQUNoQyxRQUFRLEVBQUUsT0FBTztZQUNqQixZQUFZLEVBQUUsTUFBTTtZQUNwQixNQUFNLEVBQUUsR0FBRztTQUNaLENBQUM7UUFFRixRQUFRLFFBQVEsRUFBRSxDQUFDO1lBQ2pCLEtBQUssY0FBYztnQkFDakIsNkJBQ0ssSUFBSSxLQUNQLE1BQU0sRUFBRSxPQUFPLEVBQ2YsS0FBSyxFQUFFLE9BQU8sSUFDZDtZQUNKLEtBQUssYUFBYTtnQkFDaEIsNkJBQ0ssSUFBSSxLQUNQLE1BQU0sRUFBRSxPQUFPLEVBQ2YsSUFBSSxFQUFFLE9BQU8sSUFDYjtZQUNKLEtBQUssV0FBVztnQkFDZCw2QkFDSyxJQUFJLEtBQ1AsR0FBRyxFQUFFLE9BQU8sRUFDWixLQUFLLEVBQUUsT0FBTyxJQUNkO1lBQ0osS0FBSyxVQUFVO2dCQUNiLDZCQUNLLElBQUksS0FDUCxHQUFHLEVBQUUsT0FBTyxFQUNaLElBQUksRUFBRSxPQUFPLElBQ2I7WUFDSjtnQkFDRSw2QkFDSyxJQUFJLEtBQ1AsTUFBTSxFQUFFLE9BQU8sRUFDZixLQUFLLEVBQUUsT0FBTyxJQUNkO1FBQ04sQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLElBQU0sdUJBQXVCLEdBQUc7UUFDOUIsSUFBTSxXQUFXLEdBQUcsT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDN0UsNkNBQTZDO1FBQzdDLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDaEUsQ0FBQztRQUNELElBQUksV0FBVyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzFELENBQUM7YUFBTSxJQUFJLFdBQVcsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUM5QixPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDN0MsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLElBQU0sc0JBQXNCLGdCQUN2QixDQUFDLENBQUMsSUFBSSxLQUFLLFlBQVksSUFBSSxDQUFDLFlBQVksSUFBSSxXQUFXLElBQUksR0FBRyxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDO1lBQ0UsUUFBUSxFQUFFLE9BQU87WUFDakIsR0FBRyxFQUFFLENBQUM7WUFDTixJQUFJLEVBQUUsQ0FBQztZQUNQLEtBQUssRUFBRSxDQUFDO1lBQ1IsTUFBTSxFQUFFLGtDQUFrQztZQUMxQyxLQUFLLEVBQUUsT0FBTztZQUNkLDhEQUE4RDtZQUM5RCxZQUFZLEVBQUUsR0FBRztZQUNqQixNQUFNLEVBQUUsSUFBSTtTQUNiO1FBQ0gsQ0FBQyx1QkFDTSxxQkFBcUIsRUFBRSxHQUN2Qix1QkFBdUIsRUFBRSxDQUM3QixDQUNKLENBQ0YsQ0FBQztJQUVGOzs7O09BSUc7SUFDSCxJQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQztRQUNsQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsT0FBTyxVQUFDLFFBQXlCLElBQUssT0FBQSw0QkFBRyxRQUFRLEdBQUksRUFBZixDQUFlLENBQUM7UUFDeEQsQ0FBQztRQUVELE9BQU8sVUFBQyxRQUF5QixJQUFLLE9BQUEsQ0FDcEMsTUFBQyx1QkFBdUIsSUFBQyxZQUFZLEVBQUUsWUFBWSxJQUFJLEVBQUUsYUFDdkQsS0FBQyxlQUFlLElBQ2QsTUFBTSxFQUFDLGdCQUFnQixFQUN2QixRQUFRLEVBQUUscUJBQXFCLEVBQy9CLGdCQUFnQixFQUFFLEtBQUssR0FDdkIsRUFDRiw0QkFBRyxRQUFRLEdBQUksSUFDUyxDQUMzQixFQVRxQyxDQVNyQyxDQUFDO0lBQ0osQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQztJQUUxQyxJQUFNLG1CQUFtQixHQUFHLGNBQU0sT0FBQSxDQUNoQyxlQUFLLEtBQUssRUFBRSxjQUFjLHlCQUFzQixNQUFNLGFBQ3BELDBCQUFRLHVsREFrQ1AsR0FBUyxFQUNWLGVBQUssS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUyxhQUNyQyxlQUFLLEtBQUssRUFBRSxrQkFBa0IsYUFDNUIsY0FBSyxHQUFHLEVBQUUsQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsSUFBSSxFQUFFLEtBQUksUUFBUSxFQUFFLEdBQUcsRUFBQyxNQUFNLEVBQUMsS0FBSyxFQUFFLFNBQVMsR0FBSSxFQUN0RSxlQUFLLEtBQUssRUFBRSx5QkFBeUIsYUFDbkMsY0FBSyxLQUFLLEVBQUUsZ0JBQWdCLFlBQUcsV0FBVyxHQUFPLEVBQ2pELGNBQUssS0FBSyxFQUFFLG1CQUFtQixZQUM1QixXQUFXLGFBQVgsV0FBVyxjQUFYLFdBQVcsR0FBSSxDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FDaEMsSUFDRixJQUNGLEVBQ04sZUFBSyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxhQUMvRCxpQkFDRSxLQUFLLEVBQUUsZUFBZSxFQUN0QixPQUFPLEVBQUUsZUFBZSxFQUN4QixLQUFLLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxZQUV0QixLQUFDLFlBQVksSUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBQyxTQUFTLEdBQUcsR0FDbkMsRUFDUixJQUFJLEtBQUssVUFBVSxJQUFJLENBQ3RCLGlCQUNFLEtBQUssRUFBRSxlQUFlLEVBQ3RCLE9BQU8sRUFBRSxjQUFNLE9BQUEsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEVBQXhCLENBQXdCLEVBQ3ZDLEtBQUssRUFBQyxZQUFZLFlBRWxCLEtBQUMsQ0FBQyxJQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFDLFNBQVMsR0FBRyxHQUN4QixDQUNWLElBQ0csSUFDRixFQUNMLENBQUMsZ0JBQWdCLElBQUksYUFBYSxJQUFJLENBQ3JDLGNBQ0UsS0FBSyxFQUFFO29CQUNMLFFBQVEsRUFBRSxVQUFVO29CQUNwQixJQUFJLEVBQUUsQ0FBQztvQkFDUCxLQUFLLEVBQUUsQ0FBQztvQkFDUixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsWUFBWSxHQUFHLEVBQUUsQ0FBQztvQkFDbkMsTUFBTSxFQUFFLEVBQUU7b0JBQ1YsYUFBYSxFQUFFLE1BQU07b0JBQ3JCLE1BQU0sRUFBRSxDQUFDO29CQUNULE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUIsVUFBVSxFQUFFLDJCQUEyQjtpQkFDeEMsWUFFRCxjQUNFLEtBQUssRUFBRTt3QkFDTCxRQUFRLEVBQUUsVUFBVTt3QkFDcEIsSUFBSSxFQUFFLENBQUM7d0JBQ1AsR0FBRyxFQUFFLENBQUM7d0JBQ04sTUFBTSxFQUFFLEVBQUU7d0JBQ1YsS0FBSyxFQUFFLEtBQUs7d0JBQ1osTUFBTSxFQUFFLFlBQVk7d0JBQ3BCLFVBQVUsRUFDUixpQ0FBMEIsU0FBUyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsa0JBQVEsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsbUJBQVMsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsbUJBQVMsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsbUJBQVMsU0FBUyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsV0FBUTt3QkFDdE4sVUFBVSxFQUFFLG9CQUFvQjt3QkFDaEMsU0FBUyxFQUFFLHVIQUF1SDt3QkFDbEksWUFBWSxFQUFFLEVBQUU7cUJBQ2pCLEdBQ0QsR0FDRSxDQUNQLEVBRUEsUUFBUSxJQUFJLENBQ1gsZUFBSyxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLGFBQ3RDLGVBQUssS0FBSyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLGFBQ2xELEtBQUMsU0FBUyxJQUFDLElBQUksRUFBRSxFQUFFLEdBQUksRUFDdEIsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLElBQ3hCLEVBQ0wsSUFBSSxLQUFLLFlBQVksSUFBSSxDQUN4QixlQUFLLEtBQUssRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixhQUN2RCxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUMsU0FBUyxJQUFDLElBQUksRUFBRSxFQUFFLEdBQUksQ0FBQyxDQUFDLENBQUMsS0FBQyxTQUFTLElBQUMsSUFBSSxFQUFFLEVBQUUsR0FBSSxFQUNoRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFDakIsQ0FDUCxFQUNELGVBQ0UsS0FBSyx3QkFBTyxhQUFhLEtBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxLQUNyRSxPQUFPLEVBQUUsVUFBQyxDQUFDOzRCQUNULENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQzs0QkFDcEIsdUJBQXVCLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO3dCQUNqRCxDQUFDLGFBRUQsS0FBQyxLQUFLLElBQUMsSUFBSSxFQUFFLEVBQUUsR0FBSSxFQUNuQixlQUFNLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsWUFBRyxDQUFDLENBQUMsZUFBZSxDQUFDLEdBQVEsRUFDcEQsb0JBQW9CLElBQUksQ0FDdkIsY0FDRSxLQUFLLEVBQUU7b0NBQ0wsUUFBUSxFQUFFLFVBQVU7b0NBQ3BCLEtBQUssRUFBRSxDQUFDO29DQUNSLEdBQUcsRUFBRSxNQUFNO29DQUNYLFNBQVMsRUFBRSxLQUFLO29DQUNoQixlQUFlLEVBQUUsZUFBZTtvQ0FDaEMsWUFBWSxFQUFFLEtBQUs7b0NBQ25CLFNBQVMsRUFBRSwrQkFBK0I7b0NBQzFDLFFBQVEsRUFBRSxPQUFPO29DQUNqQixRQUFRLEVBQUUsT0FBTztvQ0FDakIsUUFBUSxFQUFFLFFBQVE7b0NBQ2xCLE1BQU0sRUFBRSxJQUFJO2lDQUNiLEVBQ0QsT0FBTyxFQUFFLFVBQUMsQ0FBQyxJQUFLLE9BQUEsQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFuQixDQUFtQixZQUVsQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsVUFBQyxJQUFJLEVBQUUsS0FBSyxJQUFLLE9BQUEsQ0FDdkMsY0FFRSxLQUFLLEVBQUU7d0NBQ0wsT0FBTyxFQUFFLE1BQU07d0NBQ2YsVUFBVSxFQUFFLFFBQVE7d0NBQ3BCLEdBQUcsRUFBRSxLQUFLO3dDQUNWLE9BQU8sRUFBRSxXQUFXO3dDQUNwQixLQUFLLEVBQUUsU0FBUzt3Q0FDaEIsZUFBZSxFQUFFLGdCQUFnQixLQUFLLElBQUksQ0FBQyxJQUFJOzRDQUM3QyxDQUFDLENBQUMsQ0FBQyxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxjQUFjLEtBQUksU0FBUyxDQUFDOzRDQUN0QyxDQUFDLENBQUMsYUFBYTt3Q0FDakIsWUFBWSxFQUFFLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsTUFBTTt3Q0FDbEYsTUFBTSxFQUFFLFNBQVM7d0NBQ2pCLFFBQVEsVUFBQTt3Q0FDUixVQUFVLFlBQUE7d0NBQ1YsVUFBVSxFQUFFLDRCQUE0QjtxQ0FDekMsRUFDRCxZQUFZLEVBQUUsVUFBQyxDQUFDO3dDQUNkLElBQUksZ0JBQWdCLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDOzRDQUNuQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsY0FBYyxLQUFJLFNBQVMsQ0FBQzt3Q0FDN0UsQ0FBQztvQ0FDSCxDQUFDLEVBQ0QsWUFBWSxFQUFFLFVBQUMsQ0FBQzt3Q0FDZCxJQUFJLGdCQUFnQixLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzs0Q0FDbkMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQzt3Q0FDeEQsQ0FBQztvQ0FDSCxDQUFDLEVBQ0QsT0FBTyxFQUFFLFVBQUMsQ0FBQzt3Q0FDVCxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7d0NBQ3BCLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3Q0FDaEMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7d0NBQy9CLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQ0FDckIsQ0FBQyxZQUVBLElBQUksQ0FBQyxJQUFJLElBakNMLElBQUksQ0FBQyxJQUFJLENBa0NWLENBQ1AsRUFyQ3dDLENBcUN4QyxDQUFDLEdBQ0UsQ0FDUCxJQUNHLElBQ0YsQ0FDUCxFQUVELGVBQUssS0FBSyxFQUFFLGdCQUFnQixhQUMxQixlQUFLLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLGFBRWxELENBQUMsQ0FBQyxjQUFjLElBQUksV0FBVyxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksQ0FDaEYsS0FBQyxnQkFBZ0IsSUFDZixrQkFBa0IsRUFBRSxrQkFBa0IsRUFDdEMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQ2xDLGdCQUFnQixFQUFFLG9CQUFvQixFQUN0QyxZQUFZLEVBQUUsWUFBWSxFQUMxQixLQUFLLEVBQUUsS0FBSyxHQUNaLENBQ0gsRUFDQSxDQUFDO2dDQUNBLE9BQU8sSUFBSSxDQUFDOzRCQUNkLENBQUMsQ0FBQyxFQUFFLEVBQ0gsQ0FBQztnQ0FDQSwrREFBK0Q7Z0NBQy9ELElBQU0sMEJBQTBCLEdBQzlCLHNCQUFzQjtvQ0FDdEIsQ0FBQyxlQUFlO29DQUNoQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDO29DQUMxRCxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0NBRWpGLElBQUksQ0FBQywwQkFBMEI7b0NBQUUsT0FBTyxJQUFJLENBQUM7Z0NBRTdDLElBQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO2dDQUMxQyxJQUFNLGdCQUFnQixHQUFnQjtvQ0FDcEMsV0FBVyxFQUFFLEdBQUc7b0NBQ2hCLFVBQVUsRUFBRSxDQUFDO29DQUNiLFFBQVEsRUFBRSxJQUFJO29DQUNkLE9BQU8sRUFBRSxPQUFPO29DQUNoQixJQUFJLEVBQUUsY0FBYyxJQUFJLEVBQUU7aUNBQzNCLENBQUM7Z0NBRUYsT0FBTyxDQUNMLEtBQUMsb0JBQW9CLElBRW5CLE9BQU8sRUFBRSxnQkFBZ0IsRUFDekIsS0FBSyxFQUFFLEtBQUssRUFDWixjQUFjLEVBQUUsSUFBSSxFQUNwQixpQkFBaUIsRUFBRSxLQUFLLEVBQ3hCLGlCQUFpQixFQUFFLEtBQUssRUFDeEIsZ0JBQWdCLEVBQUUsS0FBSyxFQUN2QixlQUFlLEVBQUUsZUFBZSxJQUFJLFNBQVMsRUFDN0MsWUFBWSxFQUFFLFlBQVksSUFBSSxTQUFTLEVBQ3ZDLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLFlBQVksRUFBRSxnQkFBZ0IsRUFDOUIsYUFBYSxFQUFFLGlCQUFpQixFQUNoQyxZQUFZLEVBQUUsWUFBWSxFQUMxQixRQUFRLEVBQUUsZ0JBQWdCLEVBQzFCLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLGFBQWEsRUFBRSxhQUFhLElBZnhCLHVCQUF1QixDQWdCM0IsQ0FDSCxDQUFDOzRCQUNKLENBQUMsQ0FBQyxFQUFFLEVBQ0gsQ0FBQztnQ0FDQSxJQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQXJCLENBQXFCLENBQUMsQ0FBQztnQ0FFdkUsSUFBTSxrQkFBa0IsR0FBRyxVQUFDLE9BQVk7b0NBQ3RDLDhDQUE4QztvQ0FDOUMsT0FBTyxPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQztnQ0FDakMsQ0FBQyxDQUFBO2dDQUVELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFDLE9BQU8sRUFBRSxLQUFLO29DQUM1RCxJQUFNLGlCQUFpQixHQUFHLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDO29DQUN6RyxJQUFNLGlCQUFpQixHQUFHLEtBQUssR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQztvQ0FDdkYsSUFBTSxtQkFBbUIsR0FBRyxLQUFLLEtBQUssZUFBZSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO29DQUV6RyxPQUFPLENBQ0wsS0FBQyxvQkFBb0IsSUFFbkIsT0FBTyxFQUFFLE9BQU8sRUFDaEIsS0FBSyxFQUFFLEtBQUssRUFDWixXQUFXLEVBQUUsT0FBTyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQ3hFLGNBQWMsRUFBRSxjQUFjLEVBQzlCLGNBQWMsRUFBRSxtQkFBbUIsRUFDbkMsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQ3BDLGlCQUFpQixFQUFFLGlCQUFpQixFQUNwQyxVQUFVLEVBQUUsVUFBQyxTQUFTLEVBQUUsS0FBSyxJQUFLLE9BQUEsV0FBVyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBN0IsQ0FBNkIsRUFDL0QsZ0JBQWdCLEVBQUUsS0FBSyxLQUFLLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssT0FBTyxFQUM5RSxlQUFlLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQ2pGLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFDM0UsZUFBZSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFDbEUsWUFBWSxFQUFFLGdCQUFnQixFQUM5QixhQUFhLEVBQUUsaUJBQWlCLEVBQ2hDLGlCQUFpQixFQUFFLHFCQUFxQixFQUN4QyxhQUFhLEVBQUUsS0FBSyxLQUFLLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssT0FBTyxFQUMzRSxZQUFZLEVBQUUsWUFBWSxFQUMxQixRQUFRLEVBQUUsZ0JBQWdCLEVBQzFCLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLGFBQWEsRUFBRSxhQUFhLElBcEJ2QixLQUFLLENBcUJWLENBQ0gsQ0FBQztnQ0FDSixDQUFDLENBQUMsQ0FBQzs0QkFDTCxDQUFDLENBQUMsRUFBRSxFQUNILGFBQWEsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQ25ELGVBQUssS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsYUFDdkUsY0FBSyxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLFlBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBTyxFQUM1SCxjQUFLLEtBQUssRUFBRTs0Q0FDVixlQUFlLEVBQUUsYUFBYTs0Q0FDOUIsT0FBTyxFQUFFLENBQUM7NENBQ1YsWUFBWSxFQUFFLENBQUM7NENBQ2YsUUFBUSxFQUFFLE1BQU07eUNBQ2pCLFlBQ0MsY0FFRSxLQUFLLEVBQUU7Z0RBQ0wsU0FBUyxFQUFFLDRCQUE0QjtnREFDdkMsVUFBVSxFQUFFLG9CQUFvQjtnREFDaEMsS0FBSyxFQUFFLFNBQVM7Z0RBQ2hCLFFBQVEsRUFBRSxNQUFNOzZDQUNqQixZQUVBLG9CQUFvQixDQUFDLHdCQUF3QixDQUFDLElBQUksb0JBQW9CLENBQUMsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQVJuRyxVQUFHLHdCQUF3QixjQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBRSxDQVNoRSxHQUNGLElBQ0YsQ0FDUCxFQUNELGNBQUssR0FBRyxFQUFFLGNBQWMsR0FBSSxJQUN4QixFQUNMLHNCQUFzQixJQUFJLENBQUM7d0JBQzFCLElBQU0sdUJBQXVCLEdBQzNCLENBQUMsZUFBZTs0QkFDaEIsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQzs0QkFDMUQsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO3dCQUNqRixPQUFPLENBQ0wsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDOzRCQUMxQixDQUFDLGVBQWU7NEJBQ2hCLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUM7NEJBQzFELENBQUMsdUJBQXVCLENBQ3pCLENBQUM7b0JBQ0osQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUNOLGNBQUssS0FBSyxFQUFFLDZCQUE2QixZQUN0QyxlQUFlLENBQUMsR0FBRyxDQUFDLFVBQUMsS0FBSyxFQUFFLEtBQUssSUFBSyxPQUFBLENBQ3JDLGlCQUVFLEtBQUssRUFBRSxnQkFBZ0IsRUFDdkIsT0FBTyxFQUFFLGNBQU0sT0FBQSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBdkIsQ0FBdUIsRUFDdEMsUUFBUSxFQUFFLFNBQVMsSUFBSSxhQUFhLFlBRW5DLEtBQUssSUFMRCxLQUFLLENBTUgsQ0FDVixFQVRzQyxDQVN0QyxDQUFDLEdBQ0UsQ0FDUCxFQUVBLE9BQU8sSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUNwQyxjQUFLLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUNsRyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQUMsR0FBRyxFQUFFLEtBQUssSUFBSyxPQUFBLENBQy9CLEtBQUMsaUJBQWlCLElBRWhCLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUNkLFFBQVEsRUFBRSxjQUFNLE9BQUEsc0JBQXNCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBckMsQ0FBcUMsRUFDckQsU0FBUyxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFIdkMsS0FBSyxDQUlWLENBQ0gsRUFQZ0MsQ0FPaEMsQ0FBQyxHQUNFLENBQ1AsRUFFQSxDQUFDLGNBQWMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2hDLGNBQUssS0FBSyxFQUFFLG1CQUFtQixZQUM3QixpQkFDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLEtBQUssd0JBQU0sZUFBZSxLQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxZQUFBLEVBQUUsUUFBUSxVQUFBLEtBQ3hILE9BQU8sRUFBRSx1QkFBdUIsRUFDaEMsUUFBUSxFQUFFLFNBQVMsWUFFbEIsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLEdBQ3hCLEdBQ0wsQ0FDUCxDQUFDLENBQUMsQ0FBQyxDQUNGLGVBQU0sUUFBUSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsbUJBQW1CLFlBQ3RELGVBQUssS0FBSyxFQUFFLGlCQUFpQixhQUMxQixPQUFPLElBQUksQ0FDViw4QkFDRSxpQkFDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLEtBQUssRUFBRSxpQkFBaUIsRUFDeEIsS0FBSyxFQUFDLFFBQVEsRUFDZCxPQUFPLEVBQUUsc0JBQU0sT0FBQSxNQUFBLFlBQVksQ0FBQyxPQUFPLDBDQUFFLEtBQUssRUFBRSxDQUFBLEVBQUEsRUFDNUMsUUFBUSxFQUFFLGFBQWEsWUFFdkIsS0FBQyxTQUFTLElBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBSSxHQUM5RCxFQUNULGdCQUNFLElBQUksRUFBQyxNQUFNLEVBQ1gsUUFBUSxRQUNSLEdBQUcsRUFBRSxZQUFZLEVBQ2pCLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFDMUIsUUFBUSxFQUFFLGdCQUFnQixFQUMxQixNQUFNLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FDNUMsSUFDRCxDQUNKLEVBQ0QsbUJBQ0UsR0FBRyxFQUFFLFdBQVcsRUFDaEIsS0FBSyxFQUFFLGFBQWEsRUFDcEIsU0FBUyxFQUFDLGtCQUFrQixFQUM1QixLQUFLLEVBQUUsVUFBVSxFQUNqQixRQUFRLEVBQUUsVUFBQyxDQUFDLElBQUssT0FBQSxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBN0IsQ0FBNkIsRUFDOUMsU0FBUyxFQUFFLFVBQUMsQ0FBQzt3Q0FDWCxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDOzRDQUNyQyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7NENBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksZUFBZSxLQUFLLFdBQVcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dEQUM5RyxhQUFhLEVBQUUsQ0FBQzs0Q0FDbEIsQ0FBQzt3Q0FDSCxDQUFDO29DQUNILENBQUMsRUFDRCxXQUFXLEVBQUUsZ0JBQWdCLEVBQzdCLFFBQVEsRUFBRSxDQUFDLGNBQWMsSUFBSSxXQUFXLElBQUksYUFBYSxFQUN6RCxJQUFJLEVBQUUsQ0FBQyxHQUNQLEVBQ0YsY0FBSyxLQUFLLEVBQUUseUJBQXlCLFlBQ2xDLFFBQVEsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNsRSxLQUFDLFVBQVUsSUFDVCxlQUFlLEVBQUUsVUFBQyxJQUFZLElBQUssT0FBQSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQW5CLENBQW1CLEVBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFDekIsT0FBTyxFQUFFLE9BQU8sRUFDaEIsTUFBTSxFQUFFLE1BQU0sRUFDZCxLQUFLLEVBQUUsS0FBSyxFQUNaLFFBQVEsRUFBRSxhQUFhLEdBQ3ZCLENBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FDRixpQkFDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLEtBQUssRUFBRSxlQUFlLEVBQ3RCLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsSUFBSSxlQUFlLEtBQUssV0FBVyxJQUFJLGFBQWEsWUFFcEgsS0FBQyxPQUFPLElBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBQyxTQUFTLEdBQUcsR0FDOUMsQ0FDVixHQUNHLElBQ0YsR0FDRCxDQUNSLElBQ0csRUFFTixjQUFLLEtBQUssRUFBRSxtQkFBbUIsWUFDN0IsZUFBSyxLQUFLLEVBQUUsa0JBQWtCLGFBQzVCLGFBQUksS0FBSyxFQUFFLEVBQUMsVUFBVSxZQUFBLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBQyxZQUFHLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQyxHQUFNLEVBQ2pGLFlBQUcsS0FBSyxFQUFFLEVBQUMsVUFBVSxZQUFBLEVBQUUsUUFBUSxVQUFBLEVBQUMsWUFBRyxDQUFDLENBQUMsa0NBQWtDLENBQUMsR0FBSyxFQUM3RSxlQUFLLEtBQUssRUFBRSxtQkFBbUIsYUFDN0IsaUJBQVEsS0FBSyx3QkFBTSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsS0FBRSxLQUFLLEVBQUUsU0FBUyxLQUFHLE9BQU8sRUFBRSxpQkFBaUIsWUFBRyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBVSxFQUMzSCxpQkFBUSxLQUFLLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixZQUFHLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBVSxJQUMvRixJQUNGLEdBQ0YsSUFDRixDQUNQLEVBNWFpQyxDQTRhakMsQ0FBQztJQUVGLElBQUksSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sQ0FDTCw4QkFDRyxDQUFDLGNBQWMsSUFBSSxDQUNsQixLQUFDLFVBQVUsSUFDVCxRQUFRLEVBQUUsY0FBYyxFQUN4QixPQUFPLEVBQUUsY0FBTSxPQUFBLGlCQUFpQixDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsQ0FBQyxJQUFJLEVBQUwsQ0FBSyxDQUFDLEVBQWhDLENBQWdDLEVBQy9DLFlBQVksRUFBRSxZQUFZLEVBQzFCLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxHQUMxQixDQUNILEVBRUEsY0FBYyxJQUFJLENBQ2pCLGNBQUssS0FBSyxFQUFFLHNCQUFzQiw4QkFBMkIsVUFBVSxZQUNwRSxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQ3ZDLENBQ1AsSUFDQSxDQUNKLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7UUFDMUIsT0FBTyxDQUNMLGNBQUssS0FBSyxFQUFFLHNCQUFzQiw4QkFBMkIsWUFBWSxZQUN0RSxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQ3ZDLENBQ1AsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZU1lbW8sIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuL0NoYXRNZXNzYWdlJztcbmltcG9ydCB7IEF0dGFjaG1lbnRQcmV2aWV3IH0gZnJvbSAnLi9jb21tb24vQXR0YWNobWVudFByZXZpZXcnO1xuaW1wb3J0IHsgdXNlQ2hhdCB9IGZyb20gJy4uL2hvb2tzL3VzZUNoYXQnO1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIEdlbkFnZW50Q2hhdFByb3BzLCBTY2hlZHVsZUl0ZW0sIEF0dGFjaG1lbnQsIEF0dGFjaG1lbnRXaXRoRmlsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFZvaWNlSW5wdXQgfSBmcm9tICcuL1ZvaWNlSW5wdXQnO1xuaW1wb3J0IHsgQXVkaW9TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXVkaW9TZXJ2aWNlJztcbmltcG9ydCB7IFBhcGVyY2xpcCwgTW9yZVZlcnRpY2FsLCBSZWZyZXNoQ3csIEdsb2JlLCBYLCBBcnJvd1VwLCBNYXhpbWl6ZTIsIE1pbmltaXplMiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyBDaGF0QnViYmxlIH0gZnJvbSAnLi9DaGF0QnViYmxlJztcbmltcG9ydCB7IExhbmd1YWdlU2VsZWN0b3IgfSBmcm9tICcuL0xhbmd1YWdlU2VsZWN0b3InO1xuaW1wb3J0IGNoYXRMb2dvIGZyb20gJy4uL2Fzc2V0cy9jaGF0LWxvZ28ucG5nJztcblxuLy8gVHlwZSBmb3IgYXR0YWNobWVudCB3aXRoIGZpbGUgcmVmZXJlbmNlXG5cbmltcG9ydCB7XG4gIHJlc29sdmVMYW5ndWFnZSxcbiAgbWVyZ2VUcmFuc2xhdGlvbnMsXG4gIGdldFRyYW5zbGF0aW9uU3RyaW5nLFxuICBnZXRUcmFuc2xhdGlvbkFycmF5LFxuICBnZXRUcmFuc2xhdGlvbnNGb3JMYW5ndWFnZSxcbn0gZnJvbSAnLi4vdXRpbHMvaTE4bic7XG5pbXBvcnQgeyBHb29nbGVSZUNhcHRjaGEsIEdvb2dsZVJlQ2FwdGNoYVByb3ZpZGVyIH0gZnJvbSAncmVhY3QtZ29vZ2xlLXJlY2FwdGNoYS12Myc7XG5cblxuZXhwb3J0IGNvbnN0IEdlbkFnZW50Q2hhdDogUmVhY3QuRkM8R2VuQWdlbnRDaGF0UHJvcHM+ID0gKHtcbiAgYmFzZVVybCxcbiAgYXBpS2V5LFxuICB0ZW5hbnQsXG4gIG1ldGFkYXRhLFxuICB1c2VXcyA9IHRydWUsXG4gIG9uRXJyb3IsXG4gIG9uVGFrZW92ZXIsXG4gIG9uRmluYWxpemUsXG4gIHRoZW1lLFxuICBoZWFkZXJUaXRsZSA9ICdHZW5hc3Npc3QnLFxuICBkZXNjcmlwdGlvbixcbiAgcGxhY2Vob2xkZXIsXG4gIGFnZW50TmFtZSxcbiAgbG9nb1VybCxcbiAgbW9kZSA9ICdlbWJlZGRlZCcsXG4gIGZsb2F0aW5nQ29uZmlnID0ge30sXG4gIGxhbmd1YWdlLFxuICB0cmFuc2xhdGlvbnM6IGN1c3RvbVRyYW5zbGF0aW9ucyxcbiAgcmVDYXB0Y2hhS2V5LFxuICB3aWRnZXQgPSBmYWxzZSxcbiAgdXNlQXVkaW8gPSBmYWxzZSxcbiAgdXNlRmlsZSA9IGZhbHNlLFxuICBub0NvbG9yQW5pbWF0aW9uID0gZmFsc2UsXG4gIHNob3dXZWxjb21lQmVmb3JlU3RhcnQgPSB0cnVlLFxuICBhbGxvd2VkRXh0ZW5zaW9ucyA9IFtdLFxufSk6IFJlYWN0LlJlYWN0RWxlbWVudCA9PiB7XG4gIC8vIExhbmd1YWdlIHNlbGVjdGlvbiBzdGF0ZSAod2l0aCBsb2NhbFN0b3JhZ2UgcGVyc2lzdGVuY2UpXG4gIGNvbnN0IFtzZWxlY3RlZExhbmd1YWdlLCBzZXRTZWxlY3RlZExhbmd1YWdlXSA9IHVzZVN0YXRlPHN0cmluZz4oKCkgPT4ge1xuICAgIGlmIChsYW5ndWFnZSkgcmV0dXJuIGxhbmd1YWdlO1xuICAgIGNvbnN0IHN0b3JlZCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2dlbmFzc2lzdF9sYW5ndWFnZScpIDogbnVsbDtcbiAgICBpZiAoc3RvcmVkKSByZXR1cm4gc3RvcmVkO1xuICAgIHJldHVybiByZXNvbHZlTGFuZ3VhZ2UoKTtcbiAgfSk7XG5cbiAgLy8gU2F2ZSBsYW5ndWFnZSB0byBsb2NhbFN0b3JhZ2Ugd2hlbiBpdCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICFsYW5ndWFnZSkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2dlbmFzc2lzdF9sYW5ndWFnZScsIHNlbGVjdGVkTGFuZ3VhZ2UpO1xuICAgIH1cbiAgfSwgW3NlbGVjdGVkTGFuZ3VhZ2UsIGxhbmd1YWdlXSk7XG5cbiAgLy8gU3RhdGUgZm9yIHRyYWNraW5nIHNlbGVjdGVkIEZBUSBxdWVyeVxuICBjb25zdCBbc2VsZWN0ZWRGYXFRdWVyeSwgc2V0U2VsZWN0ZWRGYXFRdWVyeV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvLyBSZXNvbHZlIGxhbmd1YWdlOiBwcm9wID4gc2VsZWN0ZWQgPiBicm93c2VyID4gJ2VuJ1xuICBjb25zdCByZXNvbHZlZExhbmd1YWdlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGxhbmd1YWdlKSByZXR1cm4gbGFuZ3VhZ2U7XG4gICAgcmV0dXJuIHNlbGVjdGVkTGFuZ3VhZ2UgfHwgcmVzb2x2ZUxhbmd1YWdlKCkgfHwgJ2VuJztcbiAgfSwgW2xhbmd1YWdlLCBzZWxlY3RlZExhbmd1YWdlXSk7XG5cbiAgLy8gTWVyZ2UgbGFuZ3VhZ2UgYW5kIEZBUSBxdWVyeSBpbnRvIG1ldGFkYXRhXG4gIGNvbnN0IG1ldGFkYXRhV2l0aExhbmd1YWdlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihtZXRhZGF0YSB8fCB7fSksXG4gICAgICBsYW5ndWFnZTogcmVzb2x2ZWRMYW5ndWFnZSxcbiAgICAgIC4uLihzZWxlY3RlZEZhcVF1ZXJ5ID8geyBmYXFfcXVlcnk6IHNlbGVjdGVkRmFxUXVlcnkgfSA6IHt9KSxcbiAgICB9O1xuICB9LCBbbWV0YWRhdGEsIHJlc29sdmVkTGFuZ3VhZ2UsIHNlbGVjdGVkRmFxUXVlcnldKTtcblxuICAvLyBHZXQgdHJhbnNsYXRpb25zIGJhc2VkIG9uIHJlc29sdmVkIGxhbmd1YWdlLCB0aGVuIG1lcmdlIHdpdGggY3VzdG9tIHRyYW5zbGF0aW9uc1xuICBjb25zdCB0cmFuc2xhdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBGaXJzdCBnZXQgYmFzZSB0cmFuc2xhdGlvbnMgZm9yIHRoZSBsYW5ndWFnZVxuICAgIGNvbnN0IGJhc2VUcmFuc2xhdGlvbnMgPSBnZXRUcmFuc2xhdGlvbnNGb3JMYW5ndWFnZShyZXNvbHZlZExhbmd1YWdlKTtcbiAgICAvLyBUaGVuIG1lcmdlIHdpdGggYW55IGN1c3RvbSB0cmFuc2xhdGlvbnMgcHJvdmlkZWRcbiAgICByZXR1cm4gbWVyZ2VUcmFuc2xhdGlvbnMoY3VzdG9tVHJhbnNsYXRpb25zLCBiYXNlVHJhbnNsYXRpb25zKTtcbiAgfSwgW3Jlc29sdmVkTGFuZ3VhZ2UsIGN1c3RvbVRyYW5zbGF0aW9uc10pO1xuXG4gIC8vIFRyYW5zbGF0aW9uIGhlbHBlciBmdW5jdGlvblxuICBjb25zdCB0ID0gKGtleTogc3RyaW5nLCBmYWxsYmFjaz86IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIGdldFRyYW5zbGF0aW9uU3RyaW5nKGtleSwgdHJhbnNsYXRpb25zLCBmYWxsYmFjayk7XG4gIH07XG5cbiAgLy8gR2V0IHRyYW5zbGF0ZWQgcGxhY2Vob2xkZXIgb3IgdXNlIHByb3ZpZGVkL2RlZmF1bHRcbiAgLy8gTWFrZSBpdCByZWFjdGl2ZSB0byBsYW5ndWFnZSBjaGFuZ2VzXG4gIGNvbnN0IGlucHV0UGxhY2Vob2xkZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBJZiBwbGFjZWhvbGRlciBwcm9wIGlzIGV4cGxpY2l0bHkgcHJvdmlkZWQsIHVzZSBpdFxuICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSB0cmFuc2xhdGlvbiB3aGljaCB3aWxsIHVwZGF0ZSB3aXRoIGxhbmd1YWdlIGNoYW5nZXNcbiAgICByZXR1cm4gcGxhY2Vob2xkZXIgfHwgdCgnaW5wdXQucGxhY2Vob2xkZXInLCAnQXNrIGEgcXVlc3Rpb24nKTtcbiAgfSwgW3BsYWNlaG9sZGVyLCB0cmFuc2xhdGlvbnNdKTtcbiAgY29uc3QgW2lucHV0VmFsdWUsIHNldElucHV0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbc2hvd1Jlc2V0Q29uZmlybSwgc2V0U2hvd1Jlc2V0Q29uZmlybV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93TWVudSwgc2V0U2hvd01lbnVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd0xhbmd1YWdlRHJvcGRvd24sIHNldFNob3dMYW5ndWFnZURyb3Bkb3duXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzUGxheWluZ0F1ZGlvLCBzZXRJc1BsYXlpbmdBdWRpb10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc0Zsb2F0aW5nT3Blbiwgc2V0SXNGbG9hdGluZ09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYXR0YWNobWVudHMsIHNldEF0dGFjaG1lbnRzXSA9IHVzZVN0YXRlPEF0dGFjaG1lbnRXaXRoRmlsZVtdPihbXSk7XG4gIGNvbnN0IFt1cGxvYWRpbmdGaWxlcywgc2V0VXBsb2FkaW5nRmlsZXNdID0gdXNlU3RhdGU8U2V0PHN0cmluZz4+KG5ldyBTZXQoKSk7XG4gIGNvbnN0IG1lbnVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBmaWxlSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHRleHRBcmVhUmVmID0gdXNlUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBoZWFkZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBbaGVhZGVySGVpZ2h0LCBzZXRIZWFkZXJIZWlnaHRdID0gdXNlU3RhdGUoNTYpO1xuICBjb25zdCBbc2hvd0JhY2tsaWdodCwgc2V0U2hvd0JhY2tsaWdodF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc0Z1bGxzY3JlZW5Ub2dnbGVkLCBzZXRJc0Z1bGxzY3JlZW5Ub2dnbGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAvLyBkZWZhdWx0IHRoaW5raW5nIG1lc3NhZ2VzIGlmIG5vbmUgcHJvdmlkZWQgYnkgd29ya2Zsb3dcbiAgY29uc3QgREVGQVVMVF9USElOS0lOR19NRVNTQUdFUyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZ2V0VHJhbnNsYXRpb25BcnJheSgndGhpbmtpbmcubWVzc2FnZXMnLCB0cmFuc2xhdGlvbnMsIFtcbiAgICAgIFwiVGhpbmtpbmfigKZcIixcbiAgICAgIFwiQW5hbHl6aW5nIHlvdXIgcXVlc3Rpb27igKZcIixcbiAgICAgIFwiU2VhcmNoaW5nIGtub3dsZWRnZeKAplwiLFxuICAgICAgXCJQdWxsaW5nIHJlbGV2YW50IGluZm/igKZcIixcbiAgICAgIFwiRHJhZnRpbmcgdGhlIGFuc3dlcuKAplwiLFxuICAgICAgXCJEb3VibGXigJFjaGVja2luZyBkZXRhaWxz4oCmXCIsXG4gICAgICBcIlR5aW5nIGl0IHRvZ2V0aGVy4oCmXCIsXG4gICAgICBcIkFsbW9zdCB0aGVyZeKAplwiLFxuICAgIF0pLFxuICAgIFt0cmFuc2xhdGlvbnNdXG4gICk7XG4gIGNvbnN0IFtjdXJyZW50VGhpbmtpbmdQYXJ0cywgc2V0Q3VycmVudFRoaW5raW5nUGFydHNdID0gdXNlU3RhdGU8c3RyaW5nW10+KFtdKTtcbiAgY29uc3QgW2N1cnJlbnRUaGlua2luZ1BhcnRJbmRleCwgc2V0Q3VycmVudFRoaW5raW5nUGFydEluZGV4XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCB7XG4gICAgbWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nLFxuICAgIHNlbmRNZXNzYWdlLFxuICAgIHVwbG9hZEZpbGUsXG4gICAgcmVzZXRDb252ZXJzYXRpb24sXG4gICAgc3RhcnRDb252ZXJzYXRpb24sXG4gICAgY29ubmVjdGlvblN0YXRlLFxuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIHBvc3NpYmxlUXVlcmllcyxcbiAgICBpc0ZpbmFsaXplZCxcbiAgICBpc0FnZW50VHlwaW5nLFxuICAgIGFkZEZlZWRiYWNrLFxuICAgIHdlbGNvbWVUaXRsZSxcbiAgICB3ZWxjb21lSW1hZ2VVcmwsXG4gICAgd2VsY29tZU1lc3NhZ2UsXG4gICAgdGhpbmtpbmdQaHJhc2VzLFxuICAgIHRoaW5raW5nRGVsYXlNcyxcbiAgfSA9IHVzZUNoYXQoe1xuICAgIGJhc2VVcmwsXG4gICAgYXBpS2V5LFxuICAgIHRlbmFudCxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGFXaXRoTGFuZ3VhZ2UsXG4gICAgdXNlV3MsXG4gICAgbGFuZ3VhZ2U6IHJlc29sdmVkTGFuZ3VhZ2UsXG4gICAgb25FcnJvcixcbiAgICBvblRha2VvdmVyLFxuICAgIG9uRmluYWxpemVcbiAgfSk7XG4gIGNvbnN0IG1lc3NhZ2VzRW5kUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgYXVkaW9TZXJ2aWNlID0gdXNlUmVmPEF1ZGlvU2VydmljZSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBoYXNBbmNob3JlZEhpc3RvcnkgPSB1c2VSZWYoZmFsc2UpO1xuICBjb25zdCBjaGF0Q29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgcmVDYXB0Y2hhVG9rZW5SZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBjb25zdCBpc1VzZXJBdEJvdHRvbVJlZiA9IHVzZVJlZih0cnVlKTtcblxuICBjb25zdCBhbmNob3JIaXN0b3J5ID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gY2hhdENvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgIGlmICghZWwgfHwgIW1lc3NhZ2VzLmxlbmd0aCB8fCBoYXNBbmNob3JlZEhpc3RvcnkuY3VycmVudCkgcmV0dXJuO1xuICAgIGlmIChlbC5jbGllbnRIZWlnaHQgPT09IDApIHJldHVybjsgLy8gaGlkZGVuLCB3YWl0IGZvciB2aXNpYmlsaXR5L3NpemVcbiAgICBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHQ7XG4gICAgaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQgPSB0cnVlO1xuICAgIGlzVXNlckF0Qm90dG9tUmVmLmN1cnJlbnQgPSB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IHNjcm9sbFRvQm90dG9tID0gKGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9ICdzbW9vdGgnLCBmb3JjZTogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gY2hhdENvbnRhaW5lclJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNFbmRSZWYuY3VycmVudDtcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhZWwpIHJldHVybjtcbiAgICBcbiAgICAvLyBPbmx5IHNjcm9sbCBpZiB1c2VyIGlzIGF0IGJvdHRvbSBvciBpZiBmb3JjZWQgKGUuZy4sIGZvciBhZ2VudCB0eXBpbmcpXG4gICAgaWYgKCFmb3JjZSAmJiAhaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBkb1Njcm9sbCA9ICgpID0+IHtcbiAgICAgIGNvbnRhaW5lci5zY3JvbGxUbyh7IHRvcDogY29udGFpbmVyLnNjcm9sbEhlaWdodCwgYmVoYXZpb3IgfSk7XG4gICAgICBpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9O1xuICAgIGlmIChiZWhhdmlvciA9PT0gJ2F1dG8nKSB7XG4gICAgICBkb1Njcm9sbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZG9TY3JvbGwpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYXNVc2VyTWVzc2FnZXMgPSBtZXNzYWdlcy5zb21lKG1lc3NhZ2UgPT4gbWVzc2FnZS5zcGVha2VyID09PSAnY3VzdG9tZXInKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGF1ZGlvU2VydmljZS5jdXJyZW50ID0gbmV3IEF1ZGlvU2VydmljZSh7IGJhc2VVcmwsIGFwaUtleSB9KTtcbiAgfSwgW2Jhc2VVcmwsIGFwaUtleV0pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlcy5sZW5ndGgpIHJldHVybjtcbiAgICBpZiAoaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQpIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tKCdzbW9vdGgnLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFuY2hvckhpc3RvcnkoKTtcbiAgICB9XG4gIH0sIFttZXNzYWdlc10pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0FnZW50VHlwaW5nKSByZXR1cm47XG4gICAgLy8gRm9yY2Ugc2Nyb2xsIHdoZW4gYWdlbnQgaXMgdHlwaW5nXG4gICAgc2Nyb2xsVG9Cb3R0b20oJ2F1dG8nLCB0cnVlKTtcbiAgfSwgW2lzQWdlbnRUeXBpbmcsIGN1cnJlbnRUaGlua2luZ1BhcnRJbmRleCwgY3VycmVudFRoaW5raW5nUGFydHMubGVuZ3RoXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBoYXNBbmNob3JlZEhpc3RvcnkuY3VycmVudCA9IGZhbHNlO1xuICB9LCBbY29udmVyc2F0aW9uSWRdKTtcblxuICAvLyBFbnN1cmUgY2hhdCBpcyBhbHdheXMgb3BlbiB3aGVuIG1vZGUgaXMgZnVsbHNjcmVlblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtb2RlID09PSAnZnVsbHNjcmVlbicgJiYgIWlzRmxvYXRpbmdPcGVuKSB7XG4gICAgICBzZXRJc0Zsb2F0aW5nT3Blbih0cnVlKTtcbiAgICB9XG4gIH0sIFttb2RlLCBpc0Zsb2F0aW5nT3Blbl0pO1xuXG4gIC8vIFNjcm9sbCB0byBib3R0b20gd2hlbiBjaGF0IGlzIHJlb3BlbmVkIGluIGZsb2F0aW5nIG1vZGVcbiAgY29uc3QgcHJldklzRmxvYXRpbmdPcGVuUmVmID0gdXNlUmVmKGlzRmxvYXRpbmdPcGVuKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBPbmx5IHRyaWdnZXIgd2hlbiBjaGF0IHRyYW5zaXRpb25zIGZyb20gY2xvc2VkIHRvIG9wZW5cbiAgICBpZiAoKG1vZGUgPT09ICdmbG9hdGluZycgfHwgbW9kZSA9PT0gJ2Z1bGxzY3JlZW4nKSAmJiBpc0Zsb2F0aW5nT3BlbiAmJiAhcHJldklzRmxvYXRpbmdPcGVuUmVmLmN1cnJlbnQgJiYgbWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gUmVzZXQgdGhlIGFuY2hvciBmbGFnIHNvIGl0IGNhbiBzY3JvbGwgdG8gYm90dG9tXG4gICAgICBoYXNBbmNob3JlZEhpc3RvcnkuY3VycmVudCA9IGZhbHNlO1xuICAgICAgaXNVc2VyQXRCb3R0b21SZWYuY3VycmVudCA9IHRydWU7XG4gICAgICBcbiAgICAgIC8vIFdhaXQgZm9yIGNvbnRhaW5lciB0byBiZSB2aXNpYmxlIGFuZCB0aGVuIHNjcm9sbFxuICAgICAgY29uc3Qgc2Nyb2xsV2hlblZpc2libGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGNoYXRDb250YWluZXJSZWYuY3VycmVudDtcbiAgICAgICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc2Nyb2xsV2hlblZpc2libGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgaWYgY29udGFpbmVyIGlzIHZpc2libGVcbiAgICAgICAgaWYgKGNvbnRhaW5lci5jbGllbnRIZWlnaHQgPT09IDApIHtcbiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc2Nyb2xsV2hlblZpc2libGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gU2Nyb2xsIHRvIGJvdHRvbVxuICAgICAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gY29udGFpbmVyLnNjcm9sbEhlaWdodDtcbiAgICAgICAgaGFzQW5jaG9yZWRIaXN0b3J5LmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBpc1VzZXJBdEJvdHRvbVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIH07XG4gICAgICBcbiAgICAgIC8vIFVzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgdG8gd2FpdCBmb3IgcmVuZGVyXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc2Nyb2xsV2hlblZpc2libGUpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHByZXZJc0Zsb2F0aW5nT3BlblJlZi5jdXJyZW50ID0gaXNGbG9hdGluZ09wZW47XG4gIH0sIFtpc0Zsb2F0aW5nT3BlbiwgbW9kZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlcy5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBlbCA9IGNoYXRDb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG5cbiAgICAvLyBPYnNlcnZlIHNpemUvdmlzaWJpbGl0eSBjaGFuZ2VzIHRvIGFuY2hvciBjaGF0IHZpZXcuXG4gICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgaWYgKGlzVXNlckF0Qm90dG9tUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgYW5jaG9ySGlzdG9yeSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoZWwpO1xuXG4gICAgYW5jaG9ySGlzdG9yeSgpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9O1xuICB9LCBbbWVzc2FnZXNdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNoYXRDb250YWluZXJSZWYuY3VycmVudDtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgY29uc3QgaXNBdEJvdHRvbSA9ICh0aHJlc2hvbGQ6IG51bWJlciA9IDEwMCk6IGJvb2xlYW4gPT4ge1xuICAgICAgaWYgKCFjb250YWluZXIpIHJldHVybiB0cnVlO1xuICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBjb250YWluZXI7XG4gICAgICByZXR1cm4gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0IDw9IHRocmVzaG9sZDtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZVNjcm9sbCA9ICgpID0+IHtcbiAgICAgIGlzVXNlckF0Qm90dG9tUmVmLmN1cnJlbnQgPSBpc0F0Qm90dG9tKCk7XG4gICAgfTtcbiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgaGFuZGxlU2Nyb2xsKCk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbCk7XG4gICAgfTtcbiAgfSwgW10pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlSGVhZGVySGVpZ2h0ID0gKCkgPT4ge1xuICAgICAgc2V0SGVhZGVySGVpZ2h0KGhlYWRlclJlZi5jdXJyZW50Py5vZmZzZXRIZWlnaHQgfHwgNTYpO1xuICAgIH07XG4gICAgdXBkYXRlSGVhZGVySGVpZ2h0KCk7XG4gICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gdXBkYXRlSGVhZGVySGVpZ2h0KCkpO1xuICAgIGlmIChoZWFkZXJSZWYuY3VycmVudCkge1xuICAgICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShoZWFkZXJSZWYuY3VycmVudCk7XG4gICAgfVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGVIZWFkZXJIZWlnaHQpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICByZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlSGVhZGVySGVpZ2h0KTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgLy8gU21vb3RobHkgc2hvdy9oaWRlIHRoZSBiYWNrbGlnaHQgd2hpbGUgdGhlIGFnZW50IGlzIHR5cGluZ1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0FnZW50VHlwaW5nKSB7XG4gICAgICBzZXRTaG93QmFja2xpZ2h0KHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0ID0gc2V0VGltZW91dCgoKSA9PiBzZXRTaG93QmFja2xpZ2h0KGZhbHNlKSwgNDIwKTsgLy8gYWxsb3cgZmFkZS1vdXRcbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHQpO1xuICB9LCBbaXNBZ2VudFR5cGluZ10pO1xuXG4gIC8vIFNob3cgXCJ0aGlua2luZ1wiIHBocmFzZXMgd2hpbGUgYWdlbnQgaXMgdHlwaW5nXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0FnZW50VHlwaW5nKSB7XG4gICAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0cyhbXSk7XG4gICAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgoMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmFuZG9tbHkgc2VsZWN0IGEgcGhyYXNlIGZyb20gdGhlIGxpc3RcbiAgICBjb25zdCBsaXN0ID0gKHRoaW5raW5nUGhyYXNlcyAmJiB0aGlua2luZ1BocmFzZXMubGVuZ3RoID4gMCkgPyB0aGlua2luZ1BocmFzZXMgOiBERUZBVUxUX1RISU5LSU5HX01FU1NBR0VTO1xuICAgIGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbGlzdC5sZW5ndGgpO1xuICAgIGNvbnN0IHNlbGVjdGVkUGhyYXNlID0gbGlzdFtyYW5kb21JbmRleF07XG5cbiAgICAvLyBTcGxpdCBieSB8IHRvIGdldCBwYXJ0cywgb3IgdXNlIHRoZSBwaHJhc2UgYXMgYSBzaW5nbGUgcGFydCBpZiBubyB8IGZvdW5kXG4gICAgY29uc3QgcGFydHMgPSBzZWxlY3RlZFBocmFzZS5pbmNsdWRlcygnfCcpIFxuICAgICAgPyBzZWxlY3RlZFBocmFzZS5zcGxpdCgnfCcpLm1hcChwYXJ0ID0+IHBhcnQudHJpbSgpKS5maWx0ZXIocGFydCA9PiBwYXJ0Lmxlbmd0aCA+IDApXG4gICAgICA6IFtzZWxlY3RlZFBocmFzZS50cmltKCldO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB3aXRoIGZpcnN0IHBhcnRcbiAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0cyhwYXJ0cyk7XG4gICAgc2V0Q3VycmVudFRoaW5raW5nUGFydEluZGV4KDApO1xuXG4gICAgLy8gSWYgdGhlcmUncyBvbmx5IG9uZSBwYXJ0LCBubyBuZWVkIHRvIHByb2dyZXNzXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8PSAxKSByZXR1cm47XG5cbiAgICAvLyBQcm9ncmVzcyB0aHJvdWdoIHBhcnRzIHdpdGggZGVsYXksIGJ1dCBzdG9wIGF0IHRoZSBsYXN0IG9uZVxuICAgIGNvbnN0IHJvdERlbGF5ID0gTWF0aC5tYXgoMjUwLCB0aGlua2luZ0RlbGF5TXMgfHwgMTAwMCk7XG4gICAgY29uc3QgdGltZW91dElkczogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD5bXSA9IFtdO1xuXG4gICAgLy8gU2V0IHVwIHRpbWVvdXRzIGZvciBlYWNoIHBhcnQgdHJhbnNpdGlvblxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgoaSk7XG4gICAgICB9LCByb3REZWxheSAqIGkpO1xuICAgICAgdGltZW91dElkcy5wdXNoKHRpbWVvdXRJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRpbWVvdXRJZHMuZm9yRWFjaChpZCA9PiBjbGVhclRpbWVvdXQoaWQpKTtcbiAgICB9O1xuICB9LCBbaXNBZ2VudFR5cGluZywgdGhpbmtpbmdQaHJhc2VzLCB0aGlua2luZ0RlbGF5TXNdKTtcblxuICBjb25zdCBzdWJtaXRNZXNzYWdlID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcpIHJldHVybjsgLy8gUHJldmVudCBzZW5kaW5nIHdoaWxlIGFnZW50IGlzIHRoaW5raW5nL3R5cGluZ1xuICAgIGNvbnN0IHRleHRUb1NlbmQgPSBpbnB1dFZhbHVlO1xuICAgIC8vIE5PVEVTOiB3ZSBkb24ndCB1cGxvYWQgZmlsZXMgYW55bW9yZSwgd2UganVzdCBzZW5kIHRoZSBjb250ZW50IGJsb2Nrc1xuICAgIGNvbnN0IGZpbGVzVG9VcGxvYWQgPSBhdHRhY2htZW50cy5tYXAoYSA9PiBhLmZpbGUpO1xuICAgIC8vIGNvbnN0IGZpbGVBdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzLm1hcChhID0+IGEuYXR0YWNobWVudCk7XG5cbiAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICBzZXRBdHRhY2htZW50cyhbXSk7XG4gICAgLy8gUmVzZXQgdGhlIGZpbGUgaW5wdXQgdmFsdWUgc28gdGhlIHNhbWUgZmlsZSBjYW4gYmUgc2VsZWN0ZWQgYWdhaW5cbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEluY2x1ZGUgRkFRIHF1ZXJ5IGluIG1ldGFkYXRhIGlmIG9uZSB3YXMgcHJldmlvdXNseSBzZWxlY3RlZFxuICAgICAgY29uc3QgZXh0cmFNZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gICAgICBpZiAoc2VsZWN0ZWRGYXFRdWVyeSkge1xuICAgICAgICBleHRyYU1ldGFkYXRhLmZhcV9xdWVyeSA9IHNlbGVjdGVkRmFxUXVlcnk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWxlc1RvVXBsb2FkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZXh0cmFNZXRhZGF0YS5hdHRhY2htZW50cyA9IGF0dGFjaG1lbnRzLm1hcChhID0+IGEuYXR0YWNobWVudCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIHNlbmQgbWVzc2FnZSB3aXRoIGF0dGFjaG1lbnRzXG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZSh0ZXh0VG9TZW5kLCBmaWxlc1RvVXBsb2FkLCBleHRyYU1ldGFkYXRhLCByZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IGFzeW5jIChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgYXdhaXQgc3VibWl0TWVzc2FnZSgpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVF1aWNrQWN0aW9uID0gYXN5bmMgKHRleHQ6IHN0cmluZykgPT4ge1xuICAgIGlmICghdGV4dC50cmltKCkpIHJldHVybjtcbiAgICBpZiAoaXNBZ2VudFR5cGluZykgcmV0dXJuOyAvLyBQcmV2ZW50IHNlbmRpbmcgd2hpbGUgYWdlbnQgaXMgdGhpbmtpbmcvdHlwaW5nXG4gICAgdHJ5IHtcbiAgICAgIC8vIEluY2x1ZGUgRkFRIHF1ZXJ5IGluIG1ldGFkYXRhIGlmIG9uZSB3YXMgcHJldmlvdXNseSBzZWxlY3RlZFxuICAgICAgY29uc3QgZXh0cmFNZXRhZGF0YSA9IHNlbGVjdGVkRmFxUXVlcnkgPyB7IGZhcV9xdWVyeTogc2VsZWN0ZWRGYXFRdWVyeSB9IDogdW5kZWZpbmVkO1xuICAgICAgYXdhaXQgc2VuZE1lc3NhZ2UodGV4dCwgW10sIGV4dHJhTWV0YWRhdGEsIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmUgcXVpY2sgYWN0aW9uIGVycm9ycyB0byBhdm9pZCBpbnRlcnJ1cHRpbmcgdGhlIGZsb3dcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU2NoZWR1bGVDb25maXJtID0gYXN5bmMgKHNjaGVkdWxlOiBTY2hlZHVsZUl0ZW0pID0+IHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gYFNjaGVkdWxlIGNvbmZpcm1lZCB3aXRoICR7c2NoZWR1bGUucmVzdGF1cmFudHMubGVuZ3RofSByZXN0YXVyYW50c2A7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHN1bW1hcnksIFtdLCB7IGNvbmZpcm1TY2hlZHVsZTogSlNPTi5zdHJpbmdpZnkoc2NoZWR1bGUpIH0sIHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRmlsZUNoYW5nZSA9IGFzeW5jIChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGlmIChlLnRhcmdldC5maWxlcyAmJiBlLnRhcmdldC5maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBuZXdGaWxlcyA9IEFycmF5LmZyb20oZS50YXJnZXQuZmlsZXMpO1xuICAgICAgXG4gICAgICAvLyBJbml0aWFsaXplIGF0dGFjaG1lbnRzIHdpdGggZmlsZXMgKGF0dGFjaG1lbnQgcmVmZXJlbmNlIHdpbGwgYmUgbnVsbCBpbml0aWFsbHkpXG4gICAgICBjb25zdCBuZXdBdHRhY2htZW50czogQXR0YWNobWVudFdpdGhGaWxlW10gPSBuZXdGaWxlcy5tYXAoZmlsZSA9PiAoe2ZpbGUsIGF0dGFjaG1lbnQ6IG51bGx9KSk7XG4gICAgICBzZXRBdHRhY2htZW50cyhwcmV2ID0+IFsuLi5wcmV2LCAuLi5uZXdBdHRhY2htZW50c10pO1xuXG4gICAgICBjb25zdCBuZXdVcGxvYWRpbmdGaWxlcyA9IG5ldyBTZXQodXBsb2FkaW5nRmlsZXMpO1xuICAgICAgbmV3RmlsZXMuZm9yRWFjaChmaWxlID0+IG5ld1VwbG9hZGluZ0ZpbGVzLmFkZChmaWxlLm5hbWUpKTtcbiAgICAgIHNldFVwbG9hZGluZ0ZpbGVzKG5ld1VwbG9hZGluZ0ZpbGVzKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVXBsb2FkIGZpbGVzIGFuZCBnZXQgYXR0YWNobWVudCByZWZlcmVuY2VzXG4gICAgICAgIGNvbnN0IHVwbG9hZFJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBuZXdGaWxlcy5tYXAoYXN5bmMgKGZpbGUsIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgZmlsZSxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgYXR0YWNobWVudDogYXdhaXQgdXBsb2FkRmlsZShmaWxlKSxcbiAgICAgICAgICB9KSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBDcmVhdGUgYSBtYXAgb2YgZmlsZSByZWZlcmVuY2UgKG5hbWUgKyBzaXplICsgbGFzdE1vZGlmaWVkKSB0byB1cGxvYWRlZCBhdHRhY2htZW50XG4gICAgICAgIGNvbnN0IGZpbGVUb0F0dGFjaG1lbnRNYXAgPSBuZXcgTWFwPHN0cmluZywgQXR0YWNobWVudCB8IG51bGw+KCk7XG4gICAgICAgIHVwbG9hZFJlc3VsdHMuZm9yRWFjaCgoeyBmaWxlLCBhdHRhY2htZW50IH0pID0+IHtcbiAgICAgICAgICBjb25zdCBmaWxlS2V5ID0gYCR7ZmlsZS5uYW1lfToke2ZpbGUuc2l6ZX06JHtmaWxlLmxhc3RNb2RpZmllZH1gO1xuICAgICAgICAgIGZpbGVUb0F0dGFjaG1lbnRNYXAuc2V0KGZpbGVLZXksIGF0dGFjaG1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBVcGRhdGUgYXR0YWNobWVudHMgd2l0aCB0aGUgdXBsb2FkZWQgZmlsZSByZWZlcmVuY2VzXG4gICAgICAgIHNldEF0dGFjaG1lbnRzKHByZXYgPT4ge1xuICAgICAgICAgIHJldHVybiBwcmV2Lm1hcChhdHQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsZUtleSA9IGAke2F0dC5maWxlLm5hbWV9OiR7YXR0LmZpbGUuc2l6ZX06JHthdHQuZmlsZS5sYXN0TW9kaWZpZWR9YDtcbiAgICAgICAgICAgIGNvbnN0IHVwbG9hZGVkQXR0YWNobWVudCA9IGZpbGVUb0F0dGFjaG1lbnRNYXAuZ2V0KGZpbGVLZXkpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBJZiB0aGlzIGF0dGFjaG1lbnQgbWF0Y2hlcyBvbmUgb2YgdGhlIG5ld2x5IHVwbG9hZGVkIGZpbGVzLCB1cGRhdGUgaXRcbiAgICAgICAgICAgIGlmICh1cGxvYWRlZEF0dGFjaG1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmF0dCxcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50OiB1cGxvYWRlZEF0dGFjaG1lbnQsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXR0O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIGlnbm9yZVxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB1cGxvYWRpbmcgZmlsZScsIGVycm9yKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNvbnN0IGZpbmFsVXBsb2FkaW5nRmlsZXMgPSBuZXcgU2V0KHVwbG9hZGluZ0ZpbGVzKTtcbiAgICAgICAgbmV3RmlsZXMuZm9yRWFjaChmaWxlID0+IGZpbmFsVXBsb2FkaW5nRmlsZXMuZGVsZXRlKGZpbGUubmFtZSkpO1xuICAgICAgICBzZXRVcGxvYWRpbmdGaWxlcyhmaW5hbFVwbG9hZGluZ0ZpbGVzKTtcbiAgICAgICAgLy8gUmVzZXQgdGhlIGZpbGUgaW5wdXQgdmFsdWUgc28gdGhlIHNhbWUgZmlsZSBjYW4gYmUgc2VsZWN0ZWQgYWdhaW5cbiAgICAgICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQhLnZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUmVtb3ZlQXR0YWNobWVudCA9IChmaWxlTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0QXR0YWNobWVudHMocHJldiA9PiBwcmV2LmZpbHRlcihhdHQgPT4gYXR0LmZpbGUubmFtZSAhPT0gZmlsZU5hbWUpKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVWb2ljZUVycm9yID0gKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIGlmIChvbkVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcGxheVJlc3BvbnNlQXVkaW8gPSBhc3luYyAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFhdWRpb1NlcnZpY2UuY3VycmVudCB8fCBpc1BsYXlpbmdBdWRpbykgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldElzUGxheWluZ0F1ZGlvKHRydWUpO1xuICAgICAgY29uc3QgYXVkaW9CbG9iID0gYXdhaXQgYXVkaW9TZXJ2aWNlLmN1cnJlbnQudGV4dFRvU3BlZWNoKHRleHQpO1xuICAgICAgYXdhaXQgYXVkaW9TZXJ2aWNlLmN1cnJlbnQucGxheUF1ZGlvKGF1ZGlvQmxvYik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgIG9uRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc1BsYXlpbmdBdWRpbyhmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVF1ZXJ5Q2xpY2sgPSBhc3luYyAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgIGlmIChpc0FnZW50VHlwaW5nIHx8IGlzTG9hZGluZykgcmV0dXJuOyAvLyBQcmV2ZW50IHNlbmRpbmcgd2hpbGUgYWdlbnQgaXMgdGhpbmtpbmcvdHlwaW5nXG4gICAgXG4gICAgLy8gU3RvcmUgdGhlIEZBUSBxdWVyeSBmb3IgYWxsIHN1YnNlcXVlbnQgbWVzc2FnZXNcbiAgICBzZXRTZWxlY3RlZEZhcVF1ZXJ5KHF1ZXJ5KTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VuZE1lc3NhZ2UocXVlcnksIFtdLCB7IGZhcV9xdWVyeTogcXVlcnkgfSwgcmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTdGFydENvbnZlcnNhdGlvbiA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoaXNMb2FkaW5nKSByZXR1cm47XG5cbiAgICAvLyBDbGVhciBpbnB1dCB0ZXh0IGFuZCBmaWxlIGF0dGFjaG1lbnRzIHdoZW4gc3RhcnRpbmcgYSBjb252ZXJzYXRpb25cbiAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICBzZXRBdHRhY2htZW50cyhbXSk7XG4gICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzdGFydENvbnZlcnNhdGlvbihyZUNhcHRjaGFUb2tlblJlZi5jdXJyZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3RhcnRpbmcgY29udmVyc2F0aW9uJywgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVNZW51Q2xpY2sgPSAoKSA9PiB7XG4gICAgc2V0U2hvd01lbnUocHJldiA9PiAhcHJldik7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUmVzZXRDbGljayA9ICgpID0+IHtcbiAgICBzZXRTaG93TWVudShmYWxzZSk7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybSh0cnVlKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDb25maXJtUmVzZXQgPSBhc3luYyAoKSA9PiB7XG4gICAgLy8gQ2xlYXIgaW5wdXQgdGV4dCBhbmQgZmlsZSBhdHRhY2htZW50cyB3aGVuIHJlc3RhcnRpbmdcbiAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICBzZXRBdHRhY2htZW50cyhbXSk7XG4gICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIGF3YWl0IHJlc2V0Q29udmVyc2F0aW9uKHJlQ2FwdGNoYVRva2VuUmVmLmN1cnJlbnQpO1xuICAgIHNldFNlbGVjdGVkRmFxUXVlcnkobnVsbCk7IC8vIENsZWFyIEZBUSBxdWVyeSBvbiByZXNldFxuICAgIHNldFNob3dSZXNldENvbmZpcm0oZmFsc2UpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNhbmNlbFJlc2V0ID0gKCkgPT4ge1xuICAgIHNldFNob3dSZXNldENvbmZpcm0oZmFsc2UpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUxhbmd1YWdlQ2hhbmdlID0gKGxhbmc6IHN0cmluZykgPT4ge1xuICAgIHNldFNlbGVjdGVkTGFuZ3VhZ2UobGFuZyk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRnVsbHNjcmVlblRvZ2dsZSA9ICgpID0+IHtcbiAgICBzZXRJc0Z1bGxzY3JlZW5Ub2dnbGVkKHByZXYgPT4gIXByZXYpO1xuICAgIHNldFNob3dNZW51KGZhbHNlKTtcbiAgfTtcblxuICAvLyBUcmFjayB3aW5kb3cgcmVzaXplIHRvIHVwZGF0ZSBtb2JpbGUgZGV0ZWN0aW9uXG4gIGNvbnN0IFt3aW5kb3dXaWR0aCwgc2V0V2luZG93V2lkdGhdID0gdXNlU3RhdGUodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IDEwMjQpO1xuICBcbiAgLy8gQXV0b21hdGljYWxseSBkZXRlcm1pbmUgaWYgc2hvdWxkIGJlIGZ1bGxzY3JlZW4gKG1vYmlsZSBkZXZpY2VzIG9yIHdpZGdldCBtb2RlIG9yIG1hbnVhbCB0b2dnbGUgb3IgZnVsbHNjcmVlbiBtb2RlKVxuICBjb25zdCBpc0Z1bGxzY3JlZW4gPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBJZiBtb2RlIGlzIGZ1bGxzY3JlZW4sIGFsd2F5cyBmdWxsc2NyZWVuXG4gICAgaWYgKG1vZGUgPT09ICdmdWxsc2NyZWVuJykgcmV0dXJuIHRydWU7XG4gICAgLy8gSWYgd2lkZ2V0IHByb3AgaXMgdHJ1ZSwgYWx3YXlzIGZ1bGxzY3JlZW5cbiAgICBpZiAod2lkZ2V0KSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBJZiBtYW51YWxseSB0b2dnbGVkLCB1c2UgdG9nZ2xlIHN0YXRlXG4gICAgaWYgKGlzRnVsbHNjcmVlblRvZ2dsZWQpIHJldHVybiB0cnVlO1xuICAgIC8vIE90aGVyd2lzZSwgdXNlIG1vYmlsZSBkZXRlY3Rpb25cbiAgICByZXR1cm4gd2luZG93V2lkdGggPD0gNzY4O1xuICB9LCBbd2luZG93V2lkdGgsIHdpZGdldCwgaXNGdWxsc2NyZWVuVG9nZ2xlZCwgbW9kZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlUmVzaXplID0gKCkgPT4ge1xuICAgICAgc2V0V2luZG93V2lkdGgod2luZG93LmlubmVyV2lkdGgpO1xuICAgIH07XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVSZXNpemUpO1xuICB9LCBbXSk7XG5cbiAgLy8gTG9jayBib2R5IHNjcm9sbCB3aGVuIGZ1bGxzY3JlZW4gaXMgYWN0aXZlIG9uIG1vYmlsZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0Z1bGxzY3JlZW4gJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLm92ZXJmbG93O1xuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IG9yaWdpbmFsU3R5bGU7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW2lzRnVsbHNjcmVlbl0pO1xuXG4gIGNvbnN0IGhhbmRsZVJlQ2FwdGNoYVZlcmlmeSA9IHVzZUNhbGxiYWNrKCh0b2tlbjogc3RyaW5nKSA9PiB7XG4gICAgcmVDYXB0Y2hhVG9rZW5SZWYuY3VycmVudCA9IHRva2VuO1xuICB9LCBbXSk7XG5cbiAgLy8gQXZhaWxhYmxlIGxhbmd1YWdlcyAoY2FuIGJlIGV4dGVuZGVkKVxuICBjb25zdCBhdmFpbGFibGVMYW5ndWFnZXMgPSBbXG4gICAgeyBjb2RlOiAnZW4nLCBuYW1lOiAnRW5nbGlzaCcgfSxcbiAgICB7IGNvZGU6ICdlcycsIG5hbWU6ICdFc3Bhw7FvbCcgfSxcbiAgICB7IGNvZGU6ICdmcicsIG5hbWU6ICdGcmFuw6dhaXMnIH0sXG4gICAgeyBjb2RlOiAnZGUnLCBuYW1lOiAnRGV1dHNjaCcgfSxcbiAgICB7IGNvZGU6ICdpdCcsIG5hbWU6ICdJdGFsaWFubycgfSxcbiAgICB7IGNvZGU6ICdwdCcsIG5hbWU6ICdQb3J0dWd1w6pzJyB9LFxuICBdO1xuXG4gIGNvbnN0IHByaW1hcnlDb2xvciA9IHRoZW1lPy5wcmltYXJ5Q29sb3IgfHwgJyMyOTYyRkYnO1xuICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSB0aGVtZT8uYmFja2dyb3VuZENvbG9yIHx8ICcjZmZmZmZmJztcbiAgY29uc3QgdGV4dENvbG9yID0gdGhlbWU/LnRleHRDb2xvciB8fCAnIzAwMDAwMCc7XG4gIGNvbnN0IGZvbnRGYW1pbHkgPSB0aGVtZT8uZm9udEZhbWlseSB8fCAnUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZic7XG4gIGNvbnN0IGZvbnRTaXplID0gdGhlbWU/LmZvbnRTaXplIHx8ICcxNHB4JztcbiAgY29uc3QgZm9udFNpemVOdW1iZXIgPSB0eXBlb2YgZm9udFNpemUgPT09ICdzdHJpbmcnID8gcGFyc2VJbnQoZm9udFNpemUsIDEwKSA6ICh0eXBlb2YgZm9udFNpemUgPT09ICdudW1iZXInID8gZm9udFNpemUgOiAxNCk7XG4gIGNvbnN0IGxpbmVIZWlnaHRQeCA9IE1hdGgucm91bmQoZm9udFNpemVOdW1iZXIgKiAxLjUpO1xuICBjb25zdCB0ZXh0QXJlYU1heEhlaWdodCA9IGxpbmVIZWlnaHRQeCAqIDM7IC8vIHVwIHRvIDMgbGluZXNcblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBoZXggY29sb3IgdG8gcmdiYVxuICBjb25zdCBoZXhUb1JnYmEgPSAoaGV4OiBzdHJpbmcsIGFscGhhOiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IHIgPSBwYXJzZUludChoZXguc2xpY2UoMSwgMyksIDE2KTtcbiAgICBjb25zdCBnID0gcGFyc2VJbnQoaGV4LnNsaWNlKDMsIDUpLCAxNik7XG4gICAgY29uc3QgYiA9IHBhcnNlSW50KGhleC5zbGljZSg1LCA3KSwgMTYpO1xuICAgIHJldHVybiBgcmdiYSgke3J9LCAke2d9LCAke2J9LCAke2FscGhhfSlgO1xuICB9O1xuXG4gIGNvbnN0IHBvc2l0aW9uID0gZmxvYXRpbmdDb25maWcucG9zaXRpb24gfHwgJ2JvdHRvbS1yaWdodCc7XG4gIGNvbnN0IG9mZnNldCA9IGZsb2F0aW5nQ29uZmlnLm9mZnNldCB8fCB7IHg6IDIwLCB5OiAyMCB9O1xuICBjb25zdCBvZmZzZXRYID0gb2Zmc2V0LnggfHwgMjA7XG4gIGNvbnN0IG9mZnNldFkgPSBvZmZzZXQueSB8fCAyMDtcblxuICBjb25zdCBjb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgLy8gV2hlbiBmdWxsc2NyZWVuLCBsZXQgaGVpZ2h0IGJlIGNhbGN1bGF0ZWQgZnJvbSB0b3AvYm90dG9tLCBvdGhlcndpc2UgdXNlIHNwZWNpZmllZCBoZWlnaHRcbiAgICBoZWlnaHQ6IGlzRnVsbHNjcmVlbiA/IHVuZGVmaW5lZCA6ICcxMDAlJyxcbiAgICBtYXhIZWlnaHQ6IGlzRnVsbHNjcmVlbiA/IHVuZGVmaW5lZCA6ICh3aW5kb3dXaWR0aCA+IDc2OCA/ICc3MDBweCcgOiAnNjAwcHgnKSxcbiAgICB3aWR0aDogaXNGdWxsc2NyZWVuID8gJzEwMHZ3JyA6ICcxMDAlJyxcbiAgICBtYXhXaWR0aDogaXNGdWxsc2NyZWVuID8gJzEwMHZ3JyA6ICc0MDBweCcsXG4gICAgYm9yZGVyOiBpc0Z1bGxzY3JlZW4gPyAnbm9uZScgOiAnMXB4IHNvbGlkICNlMGUwZTAnLFxuICAgIGJvcmRlclJhZGl1czogaXNGdWxsc2NyZWVuID8gJzAnIDogJzMycHgnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNScsXG4gICAgZm9udEZhbWlseSxcbiAgICBib3hTaGFkb3c6IGlzRnVsbHNjcmVlbiA/ICdub25lJyA6IFwiMCA0cHggMjBweCByZ2JhKDAsIDAsIDAsIDAuMilcIixcbiAgICBwb3NpdGlvbjogaXNGdWxsc2NyZWVuID8gJ2ZpeGVkJyA6ICdyZWxhdGl2ZScsXG4gICAgdG9wOiBpc0Z1bGxzY3JlZW4gPyAwIDogdW5kZWZpbmVkLFxuICAgIGxlZnQ6IGlzRnVsbHNjcmVlbiA/IDAgOiB1bmRlZmluZWQsXG4gICAgcmlnaHQ6IGlzRnVsbHNjcmVlbiA/IDAgOiB1bmRlZmluZWQsXG4gICAgLy8gUG9zaXRpb24gY29udGFpbmVyIGFib3ZlIGJyb3dzZXIgZm9vdGVyIHVzaW5nIHNhZmUgYXJlYSBpbnNldHNcbiAgICBib3R0b206IGlzRnVsbHNjcmVlbiA/ICdlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSwgMHB4KScgOiB1bmRlZmluZWQsXG4gICAgekluZGV4OiBpc0Z1bGxzY3JlZW4gPyA5OTk5IDogdW5kZWZpbmVkLFxuICB9O1xuXG4gIGNvbnN0IGhlYWRlclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBhZGRpbmc6ICcxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNScsXG4gICAgY29sb3I6ICcjMTExMTExJyxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIH07XG5cbiAgY29uc3QgbG9nb0NvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBnYXA6ICcxMHB4JyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB6SW5kZXg6IDEsXG4gIH07XG5cbiAgY29uc3QgbG9nb1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHdpZHRoOiAnMjhweCcsXG4gICAgaGVpZ2h0OiAnMjhweCcsXG4gIH07XG5cbiAgY29uc3QgaGVhZGVyVGl0bGVDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIH07XG5cbiAgY29uc3QgaGVhZGVyVGl0bGVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogJzE2cHgnLFxuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICBtYXJnaW46IDAsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBoZWFkZXJTdWJ0aXRsZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgZm9udFdlaWdodDogJ25vcm1hbCcsXG4gICAgbWFyZ2luOiAwLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgbWVudUJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBjb2xvcjogJyMxMTExMTEnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgd2lkdGg6ICczMnB4JyxcbiAgICBoZWlnaHQ6ICczMnB4JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB6SW5kZXg6IDEsXG4gIH07XG5cbiAgY29uc3QgbWVudVBvcHVwU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgdG9wOiAnNTBweCcsXG4gICAgcmlnaHQ6ICcxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvcixcbiAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgIGJveFNoYWRvdzogJzAgMnB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpJyxcbiAgICB6SW5kZXg6IDEwMDAsXG4gICAgbWluV2lkdGg6ICcxNTBweCcsXG4gICAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgfTtcblxuICBjb25zdCBtZW51SXRlbVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBnYXA6ICc4cHgnLFxuICAgIHBhZGRpbmc6ICcxMHB4IDE1cHgnLFxuICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgZm9udFNpemUsXG4gICAgZm9udEZhbWlseSxcbiAgICBib3JkZXJCb3R0b206ICcxcHggc29saWQgI2YwZjBmMCcsXG4gIH07XG5cblxuICBjb25zdCBjaGF0Q29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogMSxcbiAgICBvdmVyZmxvd1k6ICdhdXRvJyxcbiAgICBwYWRkaW5nOiAnMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgfTtcblxuICBjb25zdCBpbnB1dENvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBwYWRkaW5nOiAnMTJweCAxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmZmZmJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBnYXA6ICc4cHgnLFxuICAgIGZsZXhTaHJpbms6IDAsXG4gICAgb3ZlcmZsb3dYOiAnaGlkZGVuJyxcbiAgICBtaW5XaWR0aDogMCxcbiAgfTtcblxuICBjb25zdCBpbnB1dFdyYXBwZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleDogMSxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmZmZmJyxcbiAgICBib3JkZXJSYWRpdXM6ICcyNHB4JyxcbiAgICBib3JkZXI6ICcxcHggc29saWQgI2U1ZTdlYicsXG4gICAgcGFkZGluZzogJzAgMTJweCcsXG4gICAgbWluSGVpZ2h0OiAnNTBweCcsXG4gICAgYm94U2hhZG93OiAnMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wNiknLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gICAgbWluV2lkdGg6IDAsXG4gIH07XG5cbiAgLy8gVXNlIGF0IGxlYXN0IDE2cHggZm9udCBzaXplIG9uIG1vYmlsZSB0byBwcmV2ZW50IHpvb21cbiAgY29uc3QgdGV4dEFyZWFGb250U2l6ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICh3aW5kb3dXaWR0aCA8PSA3NjgpIHtcbiAgICAgIC8vIE9uIG1vYmlsZSwgdXNlIGF0IGxlYXN0IDE2cHggdG8gcHJldmVudCB6b29tXG4gICAgICByZXR1cm4gTWF0aC5tYXgoMTYsIGZvbnRTaXplTnVtYmVyKSArICdweCc7XG4gICAgfVxuICAgIHJldHVybiBmb250U2l6ZTtcbiAgfSwgW3dpbmRvd1dpZHRoLCBmb250U2l6ZSwgZm9udFNpemVOdW1iZXJdKTtcblxuICBjb25zdCB0ZXh0QXJlYUxpbmVIZWlnaHQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBzaXplID0gd2luZG93V2lkdGggPD0gNzY4ID8gTWF0aC5tYXgoMTYsIGZvbnRTaXplTnVtYmVyKSA6IGZvbnRTaXplTnVtYmVyO1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHNpemUgKiAxLjUpO1xuICB9LCBbd2luZG93V2lkdGgsIGZvbnRTaXplTnVtYmVyXSk7XG5cbiAgY29uc3QgdGV4dEFyZWFNYXhIZWlnaHRDYWxjdWxhdGVkID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHRleHRBcmVhTGluZUhlaWdodCAqIDM7IC8vIHVwIHRvIDMgbGluZXNcbiAgfSwgW3RleHRBcmVhTGluZUhlaWdodF0pO1xuXG4gIGNvbnN0IHRleHRBcmVhU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogMSxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICBmb250U2l6ZTogdGV4dEFyZWFGb250U2l6ZSxcbiAgICBmb250RmFtaWx5LFxuICAgIHBhZGRpbmc6ICcxMHB4JyxcbiAgICBwYWRkaW5nUmlnaHQ6ICc0NnB4JyxcbiAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgIHJlc2l6ZTogJ25vbmUnLFxuICAgIGxpbmVIZWlnaHQ6IGAke3RleHRBcmVhTGluZUhlaWdodH1weGAsXG4gICAgbWF4SGVpZ2h0OiBgJHt0ZXh0QXJlYU1heEhlaWdodENhbGN1bGF0ZWR9cHhgLFxuICAgIG92ZXJmbG93WTogJ2hpZGRlbicsXG4gICAgb3ZlcmZsb3dYOiAnaGlkZGVuJyxcbiAgICBtaW5XaWR0aDogMCxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICB9O1xuXG4gIGNvbnN0IGF0dGFjaEJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBjb2xvcjogJyM3NTc1NzUnLFxuICAgIHBhZGRpbmc6IDAsXG4gIH07XG5cbiAgY29uc3Qgc2VuZEJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogcHJpbWFyeUNvbG9yLFxuICAgIGNvbG9yOiAnI2ZmZmZmZicsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICB3aWR0aDogJzM2cHgnLFxuICAgIGhlaWdodDogJzM2cHgnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIGZsZXhTaHJpbms6IDAsXG4gICAgYm94U2hhZG93OiAnMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wOCknLFxuICB9O1xuXG4gIGNvbnN0IHJpZ2h0QWN0aW9uQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgcmlnaHQ6ICc0cHgnLFxuICAgIHRvcDogJzUwJScsXG4gICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtNTAlKScsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgfTtcblxuICBjb25zdCBhdXRvUmVzaXplVGV4dEFyZWEgPSAoKSA9PiB7XG4gICAgY29uc3QgZWwgPSB0ZXh0QXJlYVJlZi5jdXJyZW50O1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBlbC5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgY29uc3QgbmV3SGVpZ2h0ID0gTWF0aC5taW4oZWwuc2Nyb2xsSGVpZ2h0LCB0ZXh0QXJlYU1heEhlaWdodENhbGN1bGF0ZWQpO1xuICAgIGVsLnN0eWxlLmhlaWdodCA9IGAke25ld0hlaWdodH1weGA7XG4gICAgZWwuc3R5bGUub3ZlcmZsb3dZID0gZWwuc2Nyb2xsSGVpZ2h0ID4gdGV4dEFyZWFNYXhIZWlnaHRDYWxjdWxhdGVkID8gJ2F1dG8nIDogJ2hpZGRlbic7XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhdXRvUmVzaXplVGV4dEFyZWEoKTtcbiAgfSwgW2lucHV0VmFsdWUsIHRleHRBcmVhTWF4SGVpZ2h0Q2FsY3VsYXRlZF0pO1xuXG4gIGNvbnN0IHBvc3NpYmxlUXVlcmllc0NvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBnYXA6ICc4cHgnLFxuICAgIHBhZGRpbmc6ICcwJyxcbiAgICBwYWRkaW5nTGVmdDogJzI4cHgnLFxuICAgIHBhZGRpbmdSaWdodDogJzI4cHgnLFxuICAgIG1hcmdpblRvcDogJzVweCcsXG4gICAgbWFyZ2luQm90dG9tOiAnMTVweCcsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IHF1ZXJ5QnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcGFkZGluZzogJzEycHggMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZT8uc2Vjb25kYXJ5Q29sb3IgfHwgJyNmNWY1ZjUnLFxuICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNnB4JyxcbiAgICBmb250U2l6ZSxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcbiAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIG1heFdpZHRoOiAnMjQwcHgnLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgY29uZmlybU92ZXJsYXlTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiBzaG93UmVzZXRDb25maXJtID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogMCxcbiAgICBsZWZ0OiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuNSknLFxuICAgIHpJbmRleDogMTAsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1EaWFsb2dTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvcixcbiAgICBwYWRkaW5nOiAnMjBweCcsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgICBtYXhXaWR0aDogJzMwMHB4JyxcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgIGZvbnRGYW1pbHksXG4gICAgY29sb3I6IHRleHRDb2xvcixcbiAgfTtcblxuICBjb25zdCBjb25maXJtQnV0dG9uc1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgbWFyZ2luVG9wOiAnMTVweCcsXG4gICAgZ2FwOiAnMTBweCcsXG4gIH07XG5cbiAgY29uc3QgY29uZmlybUJ1dHRvblN0eWxlID0gKGlzQ29uZmlybTogYm9vbGVhbik6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPT4gKHtcbiAgICBwYWRkaW5nOiAnOHB4IDE2cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogaXNDb25maXJtID8gJyNGNDQzMzYnIDogJyNlMGUwZTAnLFxuICAgIGNvbG9yOiBpc0NvbmZpcm0gPyAnI2ZmZmZmZicgOiB0ZXh0Q29sb3IsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBmb250RmFtaWx5LFxuICAgIGZvbnRTaXplLFxuICB9KTtcblxuICBjb25zdCBjb250ZW50Q2FyZFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZsZXg6IDEsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGJhY2tncm91bmRDb2xvcixcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAyNCxcbiAgICBib3JkZXJUb3BSaWdodFJhZGl1czogMjQsXG4gICAgYm94U2hhZG93OiAnMCAtMnB4IDZweCByZ2JhKDAsMCwwLDAuMDMpJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB6SW5kZXg6IDIsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIG1pbkhlaWdodDogMCxcbiAgfTtcblxuICAvLyBGbG9hdGluZyBtb2RlIHN0eWxlc1xuICBjb25zdCBnZXRQb3NpdGlvblN0eWxlcyA9ICgpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0+IHtcbiAgICBjb25zdCBiYXNlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICB6SW5kZXg6IDEwMDAsXG4gICAgfTtcblxuICAgIHN3aXRjaCAocG9zaXRpb24pIHtcbiAgICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogb2Zmc2V0WSwgcmlnaHQ6IG9mZnNldFggfTtcbiAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYm90dG9tOiBvZmZzZXRZLCBsZWZ0OiBvZmZzZXRYIH07XG4gICAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCB0b3A6IG9mZnNldFksIHJpZ2h0OiBvZmZzZXRYIH07XG4gICAgICBjYXNlICd0b3AtbGVmdCc6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogb2Zmc2V0WSwgbGVmdDogb2Zmc2V0WCB9O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYm90dG9tOiBvZmZzZXRZLCByaWdodDogb2Zmc2V0WCB9O1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBnZXRDaGF0UG9zaXRpb25TdHlsZXMgPSAoKTogUmVhY3QuQ1NTUHJvcGVydGllcyA9PiB7XG4gICAgY29uc3QgYmFzZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMzJweCcsXG4gICAgICB6SW5kZXg6IDk5OSxcbiAgICB9O1xuXG4gICAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHsgXG4gICAgICAgICAgLi4uYmFzZSwgXG4gICAgICAgICAgYm90dG9tOiBvZmZzZXRZLFxuICAgICAgICAgIHJpZ2h0OiBvZmZzZXRYIFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAuLi5iYXNlLCBcbiAgICAgICAgICBib3R0b206IG9mZnNldFksXG4gICAgICAgICAgbGVmdDogb2Zmc2V0WCBcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICAgIHJldHVybiB7IFxuICAgICAgICAgIC4uLmJhc2UsIFxuICAgICAgICAgIHRvcDogb2Zmc2V0WSxcbiAgICAgICAgICByaWdodDogb2Zmc2V0WCBcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHsgXG4gICAgICAgICAgLi4uYmFzZSwgXG4gICAgICAgICAgdG9wOiBvZmZzZXRZLFxuICAgICAgICAgIGxlZnQ6IG9mZnNldFggXG4gICAgICAgIH07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAuLi5iYXNlLCBcbiAgICAgICAgICBib3R0b206IG9mZnNldFksXG4gICAgICAgICAgcmlnaHQ6IG9mZnNldFggXG4gICAgICAgIH07XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldFJlc3BvbnNpdmVEaW1lbnNpb25zID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjcmVlbldpZHRoID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IDEwMjQ7XG4gICAgLy8gSWYgZnVsbHNjcmVlbiBvbiBtb2JpbGUsIHVzZSBmdWxsIHZpZXdwb3J0XG4gICAgaWYgKGlzRnVsbHNjcmVlbikge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICcxMDB2dycsIGhlaWdodDogJzEwMHZoJywgYm9yZGVyUmFkaXVzOiAnMCcgfTtcbiAgICB9XG4gICAgaWYgKHNjcmVlbldpZHRoIDw9IDQ4MCkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICdjYWxjKDEwMHZ3IC0gNDBweCknLCBoZWlnaHQ6ICc0NTBweCcgfTtcbiAgICB9IGVsc2UgaWYgKHNjcmVlbldpZHRoIDw9IDc2OCkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICczNTBweCcsIGhlaWdodDogJzUwMHB4JyB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogJzM4MHB4JywgaGVpZ2h0OiAnNzAwcHgnIH07XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGZsb2F0aW5nQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgLi4uKChtb2RlID09PSAnZnVsbHNjcmVlbicgfHwgKGlzRnVsbHNjcmVlbiAmJiB3aW5kb3dXaWR0aCA8PSA3NjgpKVxuICAgICAgPyB7IFxuICAgICAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgIGJvdHRvbTogJ2VudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tLCAwcHgpJyxcbiAgICAgICAgICB3aWR0aDogJzEwMHZ3JyxcbiAgICAgICAgICAvLyBIZWlnaHQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQgZnJvbSB0b3AgYW5kIGJvdHRvbVxuICAgICAgICAgIGJvcmRlclJhZGl1czogJzAnLFxuICAgICAgICAgIHpJbmRleDogOTk5OSxcbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgLi4uZ2V0Q2hhdFBvc2l0aW9uU3R5bGVzKCksXG4gICAgICAgICAgLi4uZ2V0UmVzcG9uc2l2ZURpbWVuc2lvbnMoKSxcbiAgICAgICAgfVxuICAgICksXG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgY29tcG9uZW50IHdpdGggUmVDYXB0Y2hhXG4gICAqIEBwYXJhbSBjaGlsZHJlbiAtIFRoZSBjaGlsZHJlbiB0byBiZSByZW5kZXJlZFxuICAgKiBAcmV0dXJucyBUaGUgcmVuZGVyZWQgY29tcG9uZW50XG4gICAqL1xuICBjb25zdCByZW5kZXJXaXRoUmVDYXB0Y2hhID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFyZUNhcHRjaGFLZXkpIHtcbiAgICAgIHJldHVybiAoY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSkgPT4gPD57Y2hpbGRyZW59PC8+O1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gKGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUpID0+IChcbiAgICAgIDxHb29nbGVSZUNhcHRjaGFQcm92aWRlciByZUNhcHRjaGFLZXk9e3JlQ2FwdGNoYUtleSB8fCAnJ30+XG4gICAgICAgIDxHb29nbGVSZUNhcHRjaGEgIFxuICAgICAgICAgIGFjdGlvbj1cImdlbmFzc2lzdF9jaGF0XCJcbiAgICAgICAgICBvblZlcmlmeT17aGFuZGxlUmVDYXB0Y2hhVmVyaWZ5fVxuICAgICAgICAgIHJlZnJlc2hSZUNhcHRjaGE9e2ZhbHNlfVxuICAgICAgICAvPlxuICAgICAgICA8PntjaGlsZHJlbn08Lz5cbiAgICAgIDwvR29vZ2xlUmVDYXB0Y2hhUHJvdmlkZXI+XG4gICAgKTtcbiAgfSwgW3JlQ2FwdGNoYUtleSwgaGFuZGxlUmVDYXB0Y2hhVmVyaWZ5XSk7XG5cbiAgY29uc3QgcmVuZGVyQ2hhdENvbXBvbmVudCA9ICgpID0+IChcbiAgICA8ZGl2IHN0eWxlPXtjb250YWluZXJTdHlsZX0gZGF0YS1nZW5hc3Npc3Qtcm9vdD1cInRydWVcIj5cbiAgICAgIDxzdHlsZT57YFxuICAgICAgICBAa2V5ZnJhbWVzIGJsaW5rIHsgMCUgeyBvcGFjaXR5OiAwLjI7IH0gMjAlIHsgb3BhY2l0eTogMTsgfSAxMDAlIHsgb3BhY2l0eTogMC4yOyB9IH1cbiAgICAgICAgLyogSGlkZSBzY3JvbGxiYXJzIGZvciB0aGUgZXhwYW5kaW5nIHRleHRhcmVhIGJ1dCBrZWVwIHNjcm9sbGluZyAqL1xuICAgICAgICAuZ2EtdGV4dGFyZWEtbm9zYiB7IFxuICAgICAgICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTsgXG4gICAgICAgICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lOyBcbiAgICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgfVxuICAgICAgICAuZ2EtdGV4dGFyZWEtbm9zYjo6LXdlYmtpdC1zY3JvbGxiYXIgeyB3aWR0aDogMDsgaGVpZ2h0OiAwOyB9XG4gICAgICAgIC8qIFByZXZlbnQgem9vbSBvbiBtb2JpbGUgLSBlbnN1cmUgbWluaW11bSAxNnB4IGZvbnQgc2l6ZSAqL1xuICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAgICAgICAuZ2EtdGV4dGFyZWEtbm9zYiB7XG4gICAgICAgICAgICBmb250LXNpemU6IDE2cHggIWltcG9ydGFudDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLyogQmFja2xpZ2h0IHN3ZWVwIHVuZGVyIGNvbnRlbnQgZWRnZSAoR1BVLWZyaWVuZGx5KS5cbiAgICAgICAgICAgV2lkZXIgdHJhdmVsIHRvIGZ1bGx5IHJlYWNoIGJvdGggY29ybmVycy4gKi9cbiAgICAgICAgQGtleWZyYW1lcyBnYS1iYWNrbGlnaHQtc3dlZXAyIHsgMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTM1JSk7IH0gMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDUlKTsgfSB9XG4gICAgICAgIEBrZXlmcmFtZXMgZ2EtYmFja2xpZ2h0LXB1bHNlIHsgMCUsMTAwJSB7IG9wYWNpdHk6IDAuNzsgfSA1MCUgeyBvcGFjaXR5OiAxOyB9IH1cbiAgICAgICAgQGtleWZyYW1lcyBnYS10aGluay1jaGFuZ2UgeyAwJSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpOyB9IDEwMCUgeyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH0gfVxuICAgICAgICAvKiBIaWRlIHJlQ0FQVENIQSBiYWRnZSAqL1xuICAgICAgICAvKiBFbnN1cmUgcmVDQVBUQ0hBIGNvbnRhaW5lciBpcyBhbHdheXMgaGlkZGVuICovXG4gICAgICAgIC5ncmVjYXB0Y2hhLWJhZGdlIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gICAgICAgICAgd2lkdGg6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICBoZWlnaHQ6IDAgIWltcG9ydGFudDtcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7XG4gICAgICAgICAgb3BhY2l0eTogMCAhaW1wb3J0YW50O1xuICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLyogU3VwcG9ydCBmb3Igc2FmZSBhcmVhIGluc2V0cyAtIGhhbmRsZWQgdmlhIGlubGluZSBzdHlsZXMgb24gaW5wdXQgY29udGFpbmVyICovXG4gICAgICBgfTwvc3R5bGU+XG4gICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJTdHlsZX0gcmVmPXtoZWFkZXJSZWZ9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtsb2dvQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgIDxpbWcgc3JjPXtsb2dvVXJsPy50cmltKCkgfHwgY2hhdExvZ299IGFsdD1cIkxvZ29cIiBzdHlsZT17bG9nb1N0eWxlfSAvPlxuICAgICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclRpdGxlQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17aGVhZGVyVGl0bGVTdHlsZX0+e2hlYWRlclRpdGxlfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17aGVhZGVyU3VidGl0bGVTdHlsZX0+XG4gICAgICAgICAgICAgIHtkZXNjcmlwdGlvbiA/PyB0KCdoZWFkZXIuc3VidGl0bGUnKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc4cHgnIH19PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHN0eWxlPXttZW51QnV0dG9uU3R5bGV9XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVNZW51Q2xpY2t9XG4gICAgICAgICAgICB0aXRsZT17dCgnbWVudS50aXRsZScpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxNb3JlVmVydGljYWwgc2l6ZT17MjR9IGNvbG9yPVwiIzExMTExMVwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAge21vZGUgPT09ICdmbG9hdGluZycgJiYgKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBzdHlsZT17bWVudUJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRJc0Zsb2F0aW5nT3BlbihmYWxzZSl9XG4gICAgICAgICAgICAgIHRpdGxlPVwiQ2xvc2UgY2hhdFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxYIHNpemU9ezI0fSBjb2xvcj1cIiMxMTExMTFcIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIHshbm9Db2xvckFuaW1hdGlvbiAmJiBzaG93QmFja2xpZ2h0ICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgIHRvcDogTWF0aC5tYXgoMCwgaGVhZGVySGVpZ2h0IC0gMTQpLFxuICAgICAgICAgICAgaGVpZ2h0OiA0MixcbiAgICAgICAgICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICAgICAgICAgIHpJbmRleDogMSxcbiAgICAgICAgICAgIG9wYWNpdHk6IGlzQWdlbnRUeXBpbmcgPyAxIDogMCxcbiAgICAgICAgICAgIHRyYW5zaXRpb246ICdvcGFjaXR5IDQyMG1zIGVhc2UtaW4tb3V0JyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgIHRvcDogNixcbiAgICAgICAgICAgICAgaGVpZ2h0OiAzMixcbiAgICAgICAgICAgICAgd2lkdGg6ICc3OCUnLFxuICAgICAgICAgICAgICBmaWx0ZXI6ICdibHVyKDIycHgpJyxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICAgICAgICBgbGluZWFyLWdyYWRpZW50KDkwZGVnLCAke2hleFRvUmdiYShwcmltYXJ5Q29sb3IsIDAuMCl9IDAlLCAke2hleFRvUmdiYShwcmltYXJ5Q29sb3IsIDAuMzUpfSAxNSUsICR7aGV4VG9SZ2JhKHByaW1hcnlDb2xvciwgMC41NSl9IDUwJSwgJHtoZXhUb1JnYmEocHJpbWFyeUNvbG9yLCAwLjM1KX0gODUlLCAke2hleFRvUmdiYShwcmltYXJ5Q29sb3IsIDAuMCl9IDEwMCUpYCxcbiAgICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybSwgb3BhY2l0eScsXG4gICAgICAgICAgICAgIGFuaW1hdGlvbjogJ2dhLWJhY2tsaWdodC1zd2VlcDIgMS4ycyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkgaW5maW5pdGUgYWx0ZXJuYXRlLCBnYS1iYWNrbGlnaHQtcHVsc2UgMi40cyBlYXNlLWluLW91dCBpbmZpbml0ZScsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMTgsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAge3Nob3dNZW51ICYmIChcbiAgICAgICAgPGRpdiByZWY9e21lbnVSZWZ9IHN0eWxlPXttZW51UG9wdXBTdHlsZX0+XG4gICAgICAgICAgPGRpdiBzdHlsZT17bWVudUl0ZW1TdHlsZX0gb25DbGljaz17aGFuZGxlUmVzZXRDbGlja30+XG4gICAgICAgICAgICA8UmVmcmVzaEN3IHNpemU9ezE2fSAvPlxuICAgICAgICAgICAge3QoJ21lbnUucmVzZXRDb252ZXJzYXRpb24nKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7bW9kZSAhPT0gJ2Z1bGxzY3JlZW4nICYmIChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e21lbnVJdGVtU3R5bGV9IG9uQ2xpY2s9e2hhbmRsZUZ1bGxzY3JlZW5Ub2dnbGV9PlxuICAgICAgICAgICAgICB7aXNGdWxsc2NyZWVuID8gPE1pbmltaXplMiBzaXplPXsxNn0gLz4gOiA8TWF4aW1pemUyIHNpemU9ezE2fSAvPn1cbiAgICAgICAgICAgICAge3QoJ21lbnUuZnVsbHNjcmVlbicpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2IFxuICAgICAgICAgICAgc3R5bGU9e3sgLi4ubWVudUl0ZW1TdHlsZSwgcG9zaXRpb246ICdyZWxhdGl2ZScsIGJvcmRlckJvdHRvbTogJ25vbmUnIH19XG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICBzZXRTaG93TGFuZ3VhZ2VEcm9wZG93bighc2hvd0xhbmd1YWdlRHJvcGRvd24pO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8R2xvYmUgc2l6ZT17MTZ9IC8+XG4gICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBmbGV4OiAxIH19Pnt0KCdtZW51Lmxhbmd1YWdlJyl9PC9zcGFuPlxuICAgICAgICAgICAge3Nob3dMYW5ndWFnZURyb3Bkb3duICYmIChcbiAgICAgICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICAgICAgICAgIHRvcDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnNHB4JyxcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogJzAgMnB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpJyxcbiAgICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnMTgwcHgnLFxuICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6ICcyMDBweCcsXG4gICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgICB6SW5kZXg6IDEwMDEsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gZS5zdG9wUHJvcGFnYXRpb24oKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHthdmFpbGFibGVMYW5ndWFnZXMubWFwKChsYW5nLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e2xhbmcuY29kZX1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgZ2FwOiAnOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTBweCAxNXB4JyxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcmVzb2x2ZWRMYW5ndWFnZSA9PT0gbGFuZy5jb2RlIFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAodGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JykgXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQm90dG9tOiBpbmRleCA8IGF2YWlsYWJsZUxhbmd1YWdlcy5sZW5ndGggLSAxID8gJzFweCBzb2xpZCAjZjBmMGYwJyA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5LFxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICdiYWNrZ3JvdW5kLWNvbG9yIDAuMnMgZWFzZScsXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWRMYW5ndWFnZSAhPT0gbGFuZy5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JztcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWRMYW5ndWFnZSAhPT0gbGFuZy5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3RyYW5zcGFyZW50JztcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVMYW5ndWFnZUNoYW5nZShsYW5nLmNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dMYW5ndWFnZURyb3Bkb3duKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93TWVudShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtsYW5nLm5hbWV9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICBcbiAgICAgIDxkaXYgc3R5bGU9e2NvbnRlbnRDYXJkU3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtjaGF0Q29udGFpbmVyU3R5bGV9IHJlZj17Y2hhdENvbnRhaW5lclJlZn0+XG4gICAgICAgICAgey8qIExhbmd1YWdlIFNlbGVjdG9yIC0gU2hvdyBvbmx5IHdoZW4gbm8gY29udmVyc2F0aW9uIHN0YXJ0ZWQgKi99XG4gICAgICAgICAgeyghY29udmVyc2F0aW9uSWQgfHwgaXNGaW5hbGl6ZWQpICYmIG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCAmJiAhaGFzVXNlck1lc3NhZ2VzICYmIChcbiAgICAgICAgICAgIDxMYW5ndWFnZVNlbGVjdG9yXG4gICAgICAgICAgICAgIGF2YWlsYWJsZUxhbmd1YWdlcz17YXZhaWxhYmxlTGFuZ3VhZ2VzfVxuICAgICAgICAgICAgICBzZWxlY3RlZExhbmd1YWdlPXtyZXNvbHZlZExhbmd1YWdlfVxuICAgICAgICAgICAgICBvbkxhbmd1YWdlQ2hhbmdlPXtoYW5kbGVMYW5ndWFnZUNoYW5nZX1cbiAgICAgICAgICAgICAgdHJhbnNsYXRpb25zPXt0cmFuc2xhdGlvbnN9XG4gICAgICAgICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICAvLyBzaG93IHdlbGNvbWUgY2FyZCAob25seSB3aGVuIHNob3dXZWxjb21lQmVmb3JlU3RhcnQgaXMgdHJ1ZSlcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFNob3dTeW50aGV0aWNXZWxjb21lID1cbiAgICAgICAgICAgICAgc2hvd1dlbGNvbWVCZWZvcmVTdGFydCAmJlxuICAgICAgICAgICAgICAhaGFzVXNlck1lc3NhZ2VzICYmXG4gICAgICAgICAgICAgIChtZXNzYWdlcy5sZW5ndGggPT09IDAgfHwgbWVzc2FnZXNbMF0uc3BlYWtlciAhPT0gJ2FnZW50JykgJiZcbiAgICAgICAgICAgICAgKEJvb2xlYW4od2VsY29tZVRpdGxlKSB8fCBCb29sZWFuKHdlbGNvbWVJbWFnZVVybCkgfHwgQm9vbGVhbih3ZWxjb21lTWVzc2FnZSkpO1xuXG4gICAgICAgICAgICBpZiAoIXNob3VsZFNob3dTeW50aGV0aWNXZWxjb21lKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgY29uc3Qgbm93ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gICAgICAgICAgICBjb25zdCBzeW50aGV0aWNXZWxjb21lOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgY3JlYXRlX3RpbWU6IG5vdyxcbiAgICAgICAgICAgICAgc3RhcnRfdGltZTogMCxcbiAgICAgICAgICAgICAgZW5kX3RpbWU6IDAuMDEsXG4gICAgICAgICAgICAgIHNwZWFrZXI6ICdhZ2VudCcsXG4gICAgICAgICAgICAgIHRleHQ6IHdlbGNvbWVNZXNzYWdlIHx8ICcnLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPENoYXRNZXNzYWdlQ29tcG9uZW50XG4gICAgICAgICAgICAgICAga2V5PVwiX19zeW50aGV0aWNfd2VsY29tZV9fXCJcbiAgICAgICAgICAgICAgICBtZXNzYWdlPXtzeW50aGV0aWNXZWxjb21lfVxuICAgICAgICAgICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgICAgICAgICAgICBpc0ZpcnN0TWVzc2FnZT17dHJ1ZX1cbiAgICAgICAgICAgICAgICBpc05leHRTYW1lU3BlYWtlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgaXNQcmV2U2FtZVNwZWFrZXI9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIGVuYWJsZVR5cGV3cml0ZXI9e2ZhbHNlfVxuICAgICAgICAgICAgICAgIHdlbGNvbWVJbWFnZVVybD17d2VsY29tZUltYWdlVXJsIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICB3ZWxjb21lVGl0bGU9e3dlbGNvbWVUaXRsZSB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgcG9zc2libGVRdWVyaWVzPXtwb3NzaWJsZVF1ZXJpZXN9XG4gICAgICAgICAgICAgICAgb25RdWlja1F1ZXJ5PXtoYW5kbGVRdWVyeUNsaWNrfVxuICAgICAgICAgICAgICAgIG9uUXVpY2tBY3Rpb249e2hhbmRsZVF1aWNrQWN0aW9ufVxuICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9ucz17dHJhbnNsYXRpb25zfVxuICAgICAgICAgICAgICAgIGxhbmd1YWdlPXtyZXNvbHZlZExhbmd1YWdlfVxuICAgICAgICAgICAgICAgIGFnZW50TmFtZT17YWdlbnROYW1lfVxuICAgICAgICAgICAgICAgIGlzQWdlbnRUeXBpbmc9e2lzQWdlbnRUeXBpbmd9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEFnZW50SW5kZXggPSBtZXNzYWdlcy5maW5kSW5kZXgobSA9PiBtLnNwZWFrZXIgPT09ICdhZ2VudCcpO1xuXG4gICAgICAgICAgICBjb25zdCBhcHBseU1lc3NhZ2VGaWx0ZXIgPSAobWVzc2FnZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIC8vIGZpbHRlciBvdXQgZmlsZSBtZXNzYWdlcyBhZGRlZCBieSB0aGUgYWdlbnRcbiAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UudHlwZSAhPT0gJ2ZpbGUnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZXMuZmlsdGVyKGFwcGx5TWVzc2FnZUZpbHRlcikubWFwKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpc05leHRTYW1lU3BlYWtlciA9IGluZGV4IDwgbWVzc2FnZXMubGVuZ3RoIC0gMSAmJiBtZXNzYWdlc1tpbmRleCArIDFdLnNwZWFrZXIgPT09IG1lc3NhZ2Uuc3BlYWtlcjtcbiAgICAgICAgICAgICAgY29uc3QgaXNQcmV2U2FtZVNwZWFrZXIgPSBpbmRleCA+IDAgJiYgbWVzc2FnZXNbaW5kZXggLSAxXS5zcGVha2VyID09PSBtZXNzYWdlLnNwZWFrZXI7XG4gICAgICAgICAgICAgIGNvbnN0IGlzRmlyc3RBZ2VudE1lc3NhZ2UgPSBpbmRleCA9PT0gZmlyc3RBZ2VudEluZGV4ICYmIG1lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50JyAmJiAhaGFzVXNlck1lc3NhZ2VzO1xuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPENoYXRNZXNzYWdlQ29tcG9uZW50IFxuICAgICAgICAgICAgICAgICAga2V5PXtpbmRleH0gXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlfSBcbiAgICAgICAgICAgICAgICAgIHRoZW1lPXt0aGVtZX1cbiAgICAgICAgICAgICAgICAgIG9uUGxheUF1ZGlvPXttZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCcgPyBwbGF5UmVzcG9uc2VBdWRpbyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICAgIGlzUGxheWluZ0F1ZGlvPXtpc1BsYXlpbmdBdWRpb31cbiAgICAgICAgICAgICAgICAgIGlzRmlyc3RNZXNzYWdlPXtpc0ZpcnN0QWdlbnRNZXNzYWdlfVxuICAgICAgICAgICAgICAgICAgaXNOZXh0U2FtZVNwZWFrZXI9e2lzTmV4dFNhbWVTcGVha2VyfVxuICAgICAgICAgICAgICAgICAgaXNQcmV2U2FtZVNwZWFrZXI9e2lzUHJldlNhbWVTcGVha2VyfVxuICAgICAgICAgICAgICAgICAgb25GZWVkYmFjaz17KG1lc3NhZ2VJZCwgdmFsdWUpID0+IGFkZEZlZWRiYWNrKG1lc3NhZ2VJZCwgdmFsdWUpfVxuICAgICAgICAgICAgICAgICAgZW5hYmxlVHlwZXdyaXRlcj17aW5kZXggPT09IG1lc3NhZ2VzLmxlbmd0aCAtIDEgJiYgbWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnfVxuICAgICAgICAgICAgICAgICAgd2VsY29tZUltYWdlVXJsPXtpc0ZpcnN0QWdlbnRNZXNzYWdlID8gKHdlbGNvbWVJbWFnZVVybCB8fCB1bmRlZmluZWQpIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgd2VsY29tZVRpdGxlPXtpc0ZpcnN0QWdlbnRNZXNzYWdlID8gKHdlbGNvbWVUaXRsZSB8fCB1bmRlZmluZWQpIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgcG9zc2libGVRdWVyaWVzPXtpc0ZpcnN0QWdlbnRNZXNzYWdlID8gcG9zc2libGVRdWVyaWVzIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgb25RdWlja1F1ZXJ5PXtoYW5kbGVRdWVyeUNsaWNrfVxuICAgICAgICAgICAgICAgICAgb25RdWlja0FjdGlvbj17aGFuZGxlUXVpY2tBY3Rpb259XG4gICAgICAgICAgICAgICAgICBvblNjaGVkdWxlQ29uZmlybT17aGFuZGxlU2NoZWR1bGVDb25maXJtfVxuICAgICAgICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aW5kZXggPT09IG1lc3NhZ2VzLmxlbmd0aCAtIDEgJiYgbWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnfVxuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25zPXt0cmFuc2xhdGlvbnN9XG4gICAgICAgICAgICAgICAgICBsYW5ndWFnZT17cmVzb2x2ZWRMYW5ndWFnZX1cbiAgICAgICAgICAgICAgICAgIGFnZW50TmFtZT17YWdlbnROYW1lfVxuICAgICAgICAgICAgICAgICAgaXNBZ2VudFR5cGluZz17aXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkoKX1cbiAgICAgICAgICB7aXNBZ2VudFR5cGluZyAmJiBjdXJyZW50VGhpbmtpbmdQYXJ0cy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgbWF4V2lkdGg6ICc4MCUnIH19PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAnMTRweCcsIGNvbG9yOiAnIzAwMDAwMCcsIGZvbnRXZWlnaHQ6IDYwMCwgbWFyZ2luQm90dG9tOiA0IH19PnthZ2VudE5hbWUgfHwgdCgnbGFiZWxzLmFnZW50Jyl9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDAsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtgJHtjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXh9LSR7Y3VycmVudFRoaW5raW5nUGFydHMuam9pbignfCcpfWB9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICBhbmltYXRpb246ICdnYS10aGluay1jaGFuZ2UgMjIwbXMgZWFzZScsXG4gICAgICAgICAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0sIG9wYWNpdHknLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJyM2YjcyODAnLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzEzcHgnLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7Y3VycmVudFRoaW5raW5nUGFydHNbY3VycmVudFRoaW5raW5nUGFydEluZGV4XSB8fCBjdXJyZW50VGhpbmtpbmdQYXJ0c1tjdXJyZW50VGhpbmtpbmdQYXJ0cy5sZW5ndGggLSAxXX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxkaXYgcmVmPXttZXNzYWdlc0VuZFJlZn0gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtzaG93V2VsY29tZUJlZm9yZVN0YXJ0ICYmICgoKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc2hvd2luZ1N5bnRoZXRpY1dlbGNvbWUgPVxuICAgICAgICAgICAgIWhhc1VzZXJNZXNzYWdlcyAmJlxuICAgICAgICAgICAgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCB8fCBtZXNzYWdlc1swXS5zcGVha2VyICE9PSAnYWdlbnQnKSAmJlxuICAgICAgICAgICAgKEJvb2xlYW4od2VsY29tZVRpdGxlKSB8fCBCb29sZWFuKHdlbGNvbWVJbWFnZVVybCkgfHwgQm9vbGVhbih3ZWxjb21lTWVzc2FnZSkpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgIWhhc1VzZXJNZXNzYWdlcyAmJlxuICAgICAgICAgICAgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCB8fCBtZXNzYWdlc1swXS5zcGVha2VyICE9PSAnYWdlbnQnKSAmJlxuICAgICAgICAgICAgIXNob3dpbmdTeW50aGV0aWNXZWxjb21lXG4gICAgICAgICAgKTtcbiAgICAgICAgfSkoKSAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17cG9zc2libGVRdWVyaWVzQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAge3Bvc3NpYmxlUXVlcmllcy5tYXAoKHF1ZXJ5LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3F1ZXJ5QnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUXVlcnlDbGljayhxdWVyeSl9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZyB8fCBpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3F1ZXJ5fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICBcbiAgICAgICAge3VzZUZpbGUgJiYgYXR0YWNobWVudHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiAnMCAxNnB4JywgbWFyZ2luQm90dG9tOiAnOHB4JywgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICc4cHgnLCBmbGV4V3JhcDogJ3dyYXAnIH19PlxuICAgICAgICAgICAge2F0dGFjaG1lbnRzLm1hcCgoYXR0LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICA8QXR0YWNobWVudFByZXZpZXcgXG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH0gXG4gICAgICAgICAgICAgICAgZmlsZT17YXR0LmZpbGV9IFxuICAgICAgICAgICAgICAgIG9uUmVtb3ZlPXsoKSA9PiBoYW5kbGVSZW1vdmVBdHRhY2htZW50KGF0dC5maWxlLm5hbWUpfVxuICAgICAgICAgICAgICAgIHVwbG9hZGluZz17dXBsb2FkaW5nRmlsZXMuaGFzKGF0dC5maWxlLm5hbWUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG5cbiAgICAgICAgeyFjb252ZXJzYXRpb25JZCB8fCBpc0ZpbmFsaXplZCA/IChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXtpbnB1dENvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7Li4uc2VuZEJ1dHRvblN0eWxlLCB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICc0OHB4JywgYm9yZGVyUmFkaXVzOiAnMTZweCcsIGN1cnNvcjogJ3BvaW50ZXInLCBmb250RmFtaWx5LCBmb250U2l6ZX19XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVN0YXJ0Q29udmVyc2F0aW9ufVxuICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dCgnYnV0dG9ucy5zdGFydENvbnZlcnNhdGlvbicpfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gc3R5bGU9e2lucHV0Q29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17aW5wdXRXcmFwcGVyU3R5bGV9PlxuICAgICAgICAgICAgICB7dXNlRmlsZSAmJiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e2F0dGFjaEJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkF0dGFjaFwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFBhcGVyY2xpcCBzaXplPXsyMn0gY29sb3I9e2lzQWdlbnRUeXBpbmcgPyBcIiNiMGIwYjBcIiA6IFwiIzc1NzU3NVwifSAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBhY2NlcHQ9e2FsbG93ZWRFeHRlbnNpb25zLmpvaW4oJywnKSB8fCAnKi8qJ31cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgIHJlZj17dGV4dEFyZWFSZWZ9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3RleHRBcmVhU3R5bGV9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZ2EtdGV4dGFyZWEtbm9zYlwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e2lucHV0VmFsdWV9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRJbnB1dFZhbHVlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGlucHV0VmFsdWUudHJpbSgpICE9PSAnJyB8fCBhdHRhY2htZW50cy5sZW5ndGggPiAwKSAmJiBjb25uZWN0aW9uU3RhdGUgPT09ICdjb25uZWN0ZWQnICYmICFpc0FnZW50VHlwaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3VibWl0TWVzc2FnZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17aW5wdXRQbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWNvbnZlcnNhdGlvbklkIHx8IGlzRmluYWxpemVkIHx8IGlzQWdlbnRUeXBpbmd9XG4gICAgICAgICAgICAgICAgcm93cz17MX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17cmlnaHRBY3Rpb25Db250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICAgICAge3VzZUF1ZGlvICYmIGlucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgICA8Vm9pY2VJbnB1dFxuICAgICAgICAgICAgICAgICAgICBvblRyYW5zY3JpcHRpb249eyh0ZXh0OiBzdHJpbmcpID0+IHNldElucHV0VmFsdWUodGV4dCl9XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3I9e2hhbmRsZVZvaWNlRXJyb3J9XG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmw9e2Jhc2VVcmx9XG4gICAgICAgICAgICAgICAgICAgIGFwaUtleT17YXBpS2V5fVxuICAgICAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0FnZW50VHlwaW5nfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiIFxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17c2VuZEJ1dHRvblN0eWxlfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17KGlucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDApIHx8IGNvbm5lY3Rpb25TdGF0ZSAhPT0gJ2Nvbm5lY3RlZCcgfHwgaXNBZ2VudFR5cGluZ31cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEFycm93VXAgc2l6ZT17MTh9IHN0cm9rZVdpZHRoPXszfSBjb2xvcj1cIiNmZmZmZmZcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBzdHlsZT17Y29uZmlybU92ZXJsYXlTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e2NvbmZpcm1EaWFsb2dTdHlsZX0+XG4gICAgICAgICAgPGgzIHN0eWxlPXt7Zm9udEZhbWlseSwgbWFyZ2luVG9wOiAwfX0+e3QoJ2RpYWxvZy5yZXNldENvbnZlcnNhdGlvbi50aXRsZScpfTwvaDM+XG4gICAgICAgICAgPHAgc3R5bGU9e3tmb250RmFtaWx5LCBmb250U2l6ZX19Pnt0KCdkaWFsb2cucmVzZXRDb252ZXJzYXRpb24ubWVzc2FnZScpfTwvcD5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXtjb25maXJtQnV0dG9uc1N0eWxlfT5cbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3suLi5jb25maXJtQnV0dG9uU3R5bGUoZmFsc2UpLCBjb2xvcjogdGV4dENvbG9yfX0gb25DbGljaz17aGFuZGxlQ2FuY2VsUmVzZXR9Pnt0KCdidXR0b25zLmNhbmNlbCcpfTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17Y29uZmlybUJ1dHRvblN0eWxlKHRydWUpfSBvbkNsaWNrPXtoYW5kbGVDb25maXJtUmVzZXR9Pnt0KCdidXR0b25zLnJlc2V0Jyl9PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG5cbiAgaWYgKG1vZGUgPT09ICdmbG9hdGluZycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgeyFpc0Zsb2F0aW5nT3BlbiAmJiAoXG4gICAgICAgICAgPENoYXRCdWJibGVcbiAgICAgICAgICAgIHNob3dDaGF0PXtpc0Zsb2F0aW5nT3Blbn1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldElzRmxvYXRpbmdPcGVuKHByZXYgPT4gIXByZXYpfVxuICAgICAgICAgICAgcHJpbWFyeUNvbG9yPXtwcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICBzdHlsZT17Z2V0UG9zaXRpb25TdHlsZXMoKX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICBcbiAgICAgICAge2lzRmxvYXRpbmdPcGVuICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXtmbG9hdGluZ0NvbnRhaW5lclN0eWxlfSBkYXRhLWdlbmFzc2lzdC1jb250YWluZXI9XCJmbG9hdGluZ1wiPlxuICAgICAgICAgICAge3JlbmRlcldpdGhSZUNhcHRjaGEocmVuZGVyQ2hhdENvbXBvbmVudCgpKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICBpZiAobW9kZSA9PT0gJ2Z1bGxzY3JlZW4nKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e2Zsb2F0aW5nQ29udGFpbmVyU3R5bGV9IGRhdGEtZ2VuYXNzaXN0LWNvbnRhaW5lcj1cImZ1bGxzY3JlZW5cIj5cbiAgICAgICAge3JlbmRlcldpdGhSZUNhcHRjaGEocmVuZGVyQ2hhdENvbXBvbmVudCgpKX1cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcmVuZGVyV2l0aFJlQ2FwdGNoYShyZW5kZXJDaGF0Q29tcG9uZW50KCkpO1xufTtcbiJdfQ==
|