@projectcor/maia-components 2.35.9 → 2.37.0
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 +2 -0
- package/lib/components/atoms/ActionableButton.js +1 -6
- package/lib/components/atoms/ApprovalBox/ApprovalBox.js +63 -4
- package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +16 -4
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +12 -1
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +127 -5
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +2 -29
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +24 -33
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +2 -19
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.js +4 -14
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.styles.js +3 -12
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +4 -20
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +7 -18
- package/lib/components/atoms/MAIAInput/MAIAInput.js +243 -42
- package/lib/components/atoms/MAIAInput/styles.js +41 -44
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +208 -0
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +77 -0
- package/lib/components/atoms/SkillsDropdown/index.js +2 -0
- package/lib/components/atoms/icons/PlusIcon.js +29 -0
- package/lib/components/atoms/icons/SkillCreatedByIcon.js +20 -0
- package/lib/components/atoms/icons/SkillVisibilityEveryoneIcon.js +23 -0
- package/lib/components/atoms/icons/SkillVisibilityOnlyMeIcon.js +23 -0
- package/lib/components/atoms/icons/SkillsNavIcon.js +4 -7
- package/lib/components/atoms/icons/index.js +5 -1
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +34 -11
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +5 -3
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +5 -16
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +2 -23
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +5 -33
- package/lib/components/molecules/ChatAIHome/styles.js +2 -11
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.js +20 -31
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +4 -9
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +61 -21
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +1 -8
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.styles.js +9 -15
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +3 -14
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +11 -17
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +5 -14
- package/lib/components/molecules/ChatAIModal/layout.js +2 -2
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +2 -12
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +3 -3
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +334 -272
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +132 -109
- package/lib/components/molecules/ChatFooter/ChatFooter.js +57 -63
- package/lib/components/molecules/ChatFooter/styles.js +6 -12
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +1 -3
- package/lib/components/molecules/MessageFeedback/MessageFeedback.js +5 -15
- package/lib/components/molecules/Sidebar/Sidebar.js +15 -7
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +3 -3
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +30 -40
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +25 -31
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +430 -203
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +131 -74
- package/lib/components/organisms/ChatAI/ChatAI.js +1 -6
- package/lib/constants/config.js +1 -4
- package/lib/constants/permissions/utils.js +3 -3
- package/lib/hooks/useAgentModel/useCreateAgent.js +6 -6
- package/lib/hooks/useAgentModel/useUpdateAgent.js +6 -6
- package/lib/hooks/useChatManager/useChatManager.js +38 -58
- package/lib/hooks/useContextMentions.js +96 -56
- package/lib/hooks/useEntitySearch.js +92 -278
- package/lib/hooks/useEvent.js +15 -2
- package/lib/hooks/useMentionAllowedTypes.js +9 -25
- package/lib/hooks/useMentionPopover.js +9 -33
- package/lib/hooks/useSkillsCatalog.js +66 -0
- package/lib/lang/br/index.js +39 -12
- package/lib/lang/en/index.js +39 -12
- package/lib/lang/es/index.js +40 -13
- package/lib/lang/fr/index.js +40 -13
- package/lib/services/maia/Agents/setAgentToolGroups.js +2 -2
- package/lib/services/maia/Chats/getChatsByUserId.js +1 -1
- package/lib/services/maia/Orchestrator/orchestrator.js +16 -7
- package/lib/services/maia/Skills/createSkill.js +1 -1
- package/lib/services/maia/Skills/getSkills.js +70 -40
- package/lib/services/maia/Skills/updateSkill.js +1 -1
- package/lib/services/maia/index.js +2 -4
- package/lib/services/utils/fetchCOR.js +57 -106
- package/lib/services/utils/index.js +1 -2
- package/lib/store/faqsStore.types.js +1 -1
- package/lib/store/index.js +1 -2
- package/lib/store/sessions/sessionStreamManager.js +35 -61
- package/lib/store/sessions/sessions.types.js +1 -1
- package/lib/store/useChatsStore.js +3 -3
- package/lib/test/buttonMock.js +22 -0
- package/lib/test/fetchPolyfill.js +160 -0
- package/lib/test/fileMock.js +2 -0
- package/lib/test/global-context.js +49 -0
- package/lib/test/iconMock.js +19 -0
- package/lib/test/mockFetch.js +49 -0
- package/lib/test/portalRoot.js +13 -0
- package/lib/test/styleMock.js +2 -0
- package/lib/test/test-utils.js +26 -0
- package/lib/test/tooltipMock.js +11 -0
- package/lib/types/Chat.js +1 -1
- package/lib/types/FrequentlyAskedQuestion.js +1 -1
- package/lib/types/agentModal.js +1 -1
- package/lib/types/skill.js +1 -1
- package/lib/utils/contextMentionTriggers.js +2 -5
- package/lib/utils/normalizeAgentConnectors.js +44 -16
- package/lib/utils/renderContextMentions.js +39 -18
- package/package.json +9 -6
- package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.js +0 -28
- package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.styles.js +0 -47
- package/lib/components/molecules/UsageBlockedBanner/index.js +0 -2
- package/lib/services/maia/Usage/getUsage.js +0 -45
- package/lib/services/maia/Usage/index.js +0 -6
- package/lib/services/utils/MaiaApiError.js +0 -34
- package/lib/store/useUsageStore.js +0 -111
- package/lib/types/usage.js +0 -9
- package/lib/utils/usageBlockedMessage.js +0 -11
|
@@ -2,6 +2,9 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
|
2
2
|
import { useCallback, useRef, useState } from 'react';
|
|
3
3
|
import { serializeMention } from '../utils/renderContextMentions';
|
|
4
4
|
import { serializeSlashCommand } from '../utils/slashCommandMarker';
|
|
5
|
+
|
|
6
|
+
/** Trigger `#` que abre el listado de skills. Misma forma que el de slash. */
|
|
7
|
+
|
|
5
8
|
/**
|
|
6
9
|
* Inspecciona la selección actual. Formato: [límite de palabra] @+ query hasta el caret.
|
|
7
10
|
* Permite espacios simples dentro del query (p. ej. "@Juan Perez") y cierra
|
|
@@ -91,7 +94,9 @@ var detectMentionTrigger = function detectMentionTrigger(editorEl, range) {
|
|
|
91
94
|
}
|
|
92
95
|
};
|
|
93
96
|
};
|
|
94
|
-
|
|
97
|
+
|
|
98
|
+
/** Detecta un trigger de un solo caracter (`/` o `#`) en límite de palabra, con query hasta el caret. */
|
|
99
|
+
var detectCharTrigger = function detectCharTrigger(editorEl, range, _char) {
|
|
95
100
|
if (!editorEl || !editorEl.contains(range.startContainer)) {
|
|
96
101
|
return {
|
|
97
102
|
active: false,
|
|
@@ -117,16 +122,16 @@ var detectSlashTrigger = function detectSlashTrigger(editorEl, range) {
|
|
|
117
122
|
anchor: null
|
|
118
123
|
};
|
|
119
124
|
}
|
|
120
|
-
while (i >= 0 && text[i] !==
|
|
121
|
-
if (i < 0 || text[i] !==
|
|
125
|
+
while (i >= 0 && text[i] !== _char) i -= 1;
|
|
126
|
+
if (i < 0 || text[i] !== _char) {
|
|
122
127
|
return {
|
|
123
128
|
active: false,
|
|
124
129
|
query: '',
|
|
125
130
|
anchor: null
|
|
126
131
|
};
|
|
127
132
|
}
|
|
128
|
-
var
|
|
129
|
-
var prev =
|
|
133
|
+
var triggerIndex = i;
|
|
134
|
+
var prev = triggerIndex > 0 ? text.charAt(triggerIndex - 1) : '';
|
|
130
135
|
var isBoundary = !prev || /[\s([{]/.test(prev);
|
|
131
136
|
if (!isBoundary) {
|
|
132
137
|
return {
|
|
@@ -135,7 +140,7 @@ var detectSlashTrigger = function detectSlashTrigger(editorEl, range) {
|
|
|
135
140
|
anchor: null
|
|
136
141
|
};
|
|
137
142
|
}
|
|
138
|
-
var query = text.slice(
|
|
143
|
+
var query = text.slice(triggerIndex + 1, caret);
|
|
139
144
|
if (/\n|\r/.test(query)) {
|
|
140
145
|
return {
|
|
141
146
|
active: false,
|
|
@@ -155,7 +160,7 @@ var detectSlashTrigger = function detectSlashTrigger(editorEl, range) {
|
|
|
155
160
|
query: query,
|
|
156
161
|
anchor: {
|
|
157
162
|
node: node,
|
|
158
|
-
offset:
|
|
163
|
+
offset: triggerIndex
|
|
159
164
|
}
|
|
160
165
|
};
|
|
161
166
|
};
|
|
@@ -178,6 +183,14 @@ export var useContextMentions = function useContextMentions() {
|
|
|
178
183
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
179
184
|
slashTrigger = _useState4[0],
|
|
180
185
|
setSlashTrigger = _useState4[1];
|
|
186
|
+
var _useState5 = useState({
|
|
187
|
+
active: false,
|
|
188
|
+
query: '',
|
|
189
|
+
anchor: null
|
|
190
|
+
}),
|
|
191
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
192
|
+
hashTrigger = _useState6[0],
|
|
193
|
+
setHashTrigger = _useState6[1];
|
|
181
194
|
var detectTrigger = useCallback(function () {
|
|
182
195
|
var selection = window.getSelection();
|
|
183
196
|
if (!selection || selection.rangeCount === 0 || !editorRef.current) {
|
|
@@ -199,7 +212,18 @@ export var useContextMentions = function useContextMentions() {
|
|
|
199
212
|
anchor: null
|
|
200
213
|
};
|
|
201
214
|
}
|
|
202
|
-
return
|
|
215
|
+
return detectCharTrigger(editorRef.current, selection.getRangeAt(0), '/');
|
|
216
|
+
}, []);
|
|
217
|
+
var detectHash = useCallback(function () {
|
|
218
|
+
var selection = window.getSelection();
|
|
219
|
+
if (!selection || selection.rangeCount === 0 || !editorRef.current) {
|
|
220
|
+
return {
|
|
221
|
+
active: false,
|
|
222
|
+
query: '',
|
|
223
|
+
anchor: null
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
return detectCharTrigger(editorRef.current, selection.getRangeAt(0), '#');
|
|
203
227
|
}, []);
|
|
204
228
|
var updateTrigger = useCallback(function () {
|
|
205
229
|
var next = detectTrigger();
|
|
@@ -226,6 +250,18 @@ export var useContextMentions = function useContextMentions() {
|
|
|
226
250
|
anchor: null
|
|
227
251
|
});
|
|
228
252
|
}, []);
|
|
253
|
+
var updateHashTrigger = useCallback(function () {
|
|
254
|
+
var next = detectHash();
|
|
255
|
+
setHashTrigger(next);
|
|
256
|
+
return next;
|
|
257
|
+
}, [detectHash]);
|
|
258
|
+
var closeHashTrigger = useCallback(function () {
|
|
259
|
+
setHashTrigger({
|
|
260
|
+
active: false,
|
|
261
|
+
query: '',
|
|
262
|
+
anchor: null
|
|
263
|
+
});
|
|
264
|
+
}, []);
|
|
229
265
|
|
|
230
266
|
/**
|
|
231
267
|
* Ajusta la cantidad de `@` del trigger activo sin perder el query actual.
|
|
@@ -267,45 +303,6 @@ export var useContextMentions = function useContextMentions() {
|
|
|
267
303
|
setTrigger(updated);
|
|
268
304
|
}, [detectTrigger]);
|
|
269
305
|
|
|
270
|
-
/**
|
|
271
|
-
* Convierte el trigger `@{n}query` activo en `@/query`.
|
|
272
|
-
* Se usa al cambiar a la tab de skills (cuyo trigger es `@/`).
|
|
273
|
-
*/
|
|
274
|
-
var syncSkillTrigger = useCallback(function () {
|
|
275
|
-
var current = detectTrigger();
|
|
276
|
-
if (!current.active || !current.anchor) return;
|
|
277
|
-
// Ya es @/ (skill) — no reescribir
|
|
278
|
-
if (current.atRunLength === -1) return;
|
|
279
|
-
var _current$anchor2 = current.anchor,
|
|
280
|
-
node = _current$anchor2.node,
|
|
281
|
-
offset = _current$anchor2.offset;
|
|
282
|
-
if (node.nodeType !== Node.TEXT_NODE) return;
|
|
283
|
-
var textNode = node;
|
|
284
|
-
var full = textNode.data;
|
|
285
|
-
// atRunLength negativo (@@/) incluye el slash; usar abs + 1 como en replaceTriggerWithChip
|
|
286
|
-
var currentRunLen = Math.abs(current.atRunLength);
|
|
287
|
-
var currentHasSlash = current.atRunLength < 0;
|
|
288
|
-
var queryLen = currentRunLen + (currentHasSlash ? 1 : 0) + current.query.length;
|
|
289
|
-
var before = full.slice(0, offset);
|
|
290
|
-
var after = full.slice(offset + queryLen);
|
|
291
|
-
var cleanQuery = current.query.startsWith('/') ? current.query.slice(1) : current.query;
|
|
292
|
-
var nextValue = "".concat(before, "@/").concat(cleanQuery).concat(after);
|
|
293
|
-
|
|
294
|
-
// eslint-disable-next-line no-param-reassign
|
|
295
|
-
textNode.data = nextValue;
|
|
296
|
-
var selection = window.getSelection();
|
|
297
|
-
if (selection) {
|
|
298
|
-
var range = document.createRange();
|
|
299
|
-
var caretOffset = before.length + 2 + cleanQuery.length;
|
|
300
|
-
range.setStart(textNode, Math.min(caretOffset, textNode.data.length));
|
|
301
|
-
range.collapse(true);
|
|
302
|
-
selection.removeAllRanges();
|
|
303
|
-
selection.addRange(range);
|
|
304
|
-
}
|
|
305
|
-
var updated = detectTrigger();
|
|
306
|
-
setTrigger(updated);
|
|
307
|
-
}, [detectTrigger]);
|
|
308
|
-
|
|
309
306
|
/**
|
|
310
307
|
* Reemplaza el `@query` pendiente por un chip atómico con la mention.
|
|
311
308
|
* Requiere que el caller provea el DOM del chip (se inserta tal cual).
|
|
@@ -313,9 +310,9 @@ export var useContextMentions = function useContextMentions() {
|
|
|
313
310
|
var replaceTriggerWithChip = useCallback(function (chipNode, mention) {
|
|
314
311
|
var current = detectTrigger();
|
|
315
312
|
if (!current.active || !current.anchor) return;
|
|
316
|
-
var _current$
|
|
317
|
-
node = _current$
|
|
318
|
-
offset = _current$
|
|
313
|
+
var _current$anchor2 = current.anchor,
|
|
314
|
+
node = _current$anchor2.node,
|
|
315
|
+
offset = _current$anchor2.offset;
|
|
319
316
|
var textNode = node;
|
|
320
317
|
var full = textNode.data;
|
|
321
318
|
var currentRunLen = Math.abs(current.atRunLength);
|
|
@@ -348,14 +345,15 @@ export var useContextMentions = function useContextMentions() {
|
|
|
348
345
|
selection.removeAllRanges();
|
|
349
346
|
selection.addRange(range);
|
|
350
347
|
}
|
|
348
|
+
if (textNode.data === '') textNode.remove();
|
|
351
349
|
closeTrigger();
|
|
352
350
|
}, [detectTrigger, closeTrigger]);
|
|
353
351
|
var replaceTriggerWithSlashChip = useCallback(function (chipNode, slashCommand) {
|
|
354
352
|
var current = detectSlash();
|
|
355
353
|
if (!current.active || !current.anchor) return;
|
|
356
|
-
var _current$
|
|
357
|
-
node = _current$
|
|
358
|
-
offset = _current$
|
|
354
|
+
var _current$anchor3 = current.anchor,
|
|
355
|
+
node = _current$anchor3.node,
|
|
356
|
+
offset = _current$anchor3.offset;
|
|
359
357
|
var textNode = node;
|
|
360
358
|
var full = textNode.data;
|
|
361
359
|
var triggerLen = 1 + current.query.length;
|
|
@@ -378,8 +376,46 @@ export var useContextMentions = function useContextMentions() {
|
|
|
378
376
|
selection.removeAllRanges();
|
|
379
377
|
selection.addRange(range);
|
|
380
378
|
}
|
|
379
|
+
if (textNode.data === '') textNode.remove();
|
|
381
380
|
closeSlashTrigger();
|
|
382
381
|
}, [detectSlash, closeSlashTrigger]);
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Reemplaza el `#query` pendiente por un chip de skill. La skill sigue viajando
|
|
385
|
+
* como mention (`data-mention*`) para que el backend la resuelva por id.
|
|
386
|
+
*/
|
|
387
|
+
var replaceTriggerWithSkillChip = useCallback(function (chipNode, mention) {
|
|
388
|
+
var current = detectHash();
|
|
389
|
+
if (!current.active || !current.anchor) return;
|
|
390
|
+
var _current$anchor4 = current.anchor,
|
|
391
|
+
node = _current$anchor4.node,
|
|
392
|
+
offset = _current$anchor4.offset;
|
|
393
|
+
var textNode = node;
|
|
394
|
+
var full = textNode.data;
|
|
395
|
+
var triggerLen = 1 + current.query.length;
|
|
396
|
+
var after = full.slice(offset + triggerLen);
|
|
397
|
+
textNode.data = full.slice(0, offset);
|
|
398
|
+
chipNode.setAttribute('data-mention', 'true');
|
|
399
|
+
chipNode.setAttribute('data-mention-id', String(mention.id));
|
|
400
|
+
chipNode.setAttribute('data-mention-type', mention.type);
|
|
401
|
+
chipNode.setAttribute('data-mention-label', mention.label);
|
|
402
|
+
chipNode.setAttribute('contenteditable', 'false');
|
|
403
|
+
var parent = textNode.parentNode;
|
|
404
|
+
if (!parent) return;
|
|
405
|
+
var spaceNode = document.createTextNode("\xA0".concat(after));
|
|
406
|
+
parent.insertBefore(chipNode, textNode.nextSibling);
|
|
407
|
+
parent.insertBefore(spaceNode, chipNode.nextSibling);
|
|
408
|
+
var selection = window.getSelection();
|
|
409
|
+
if (selection) {
|
|
410
|
+
var range = document.createRange();
|
|
411
|
+
range.setStart(spaceNode, 1);
|
|
412
|
+
range.collapse(true);
|
|
413
|
+
selection.removeAllRanges();
|
|
414
|
+
selection.addRange(range);
|
|
415
|
+
}
|
|
416
|
+
if (textNode.data === '') textNode.remove();
|
|
417
|
+
closeHashTrigger();
|
|
418
|
+
}, [detectHash, closeHashTrigger]);
|
|
383
419
|
var serialize = useCallback(function () {
|
|
384
420
|
var el = editorRef.current;
|
|
385
421
|
if (!el) return {
|
|
@@ -438,7 +474,8 @@ export var useContextMentions = function useContextMentions() {
|
|
|
438
474
|
if (editorRef.current) editorRef.current.innerHTML = '';
|
|
439
475
|
closeTrigger();
|
|
440
476
|
closeSlashTrigger();
|
|
441
|
-
|
|
477
|
+
closeHashTrigger();
|
|
478
|
+
}, [closeTrigger, closeSlashTrigger, closeHashTrigger]);
|
|
442
479
|
var focus = useCallback(function () {
|
|
443
480
|
var _editorRef$current;
|
|
444
481
|
(_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 || _editorRef$current.focus();
|
|
@@ -449,15 +486,18 @@ export var useContextMentions = function useContextMentions() {
|
|
|
449
486
|
updateTrigger: updateTrigger,
|
|
450
487
|
closeTrigger: closeTrigger,
|
|
451
488
|
syncTriggerAtRunLength: syncTriggerAtRunLength,
|
|
452
|
-
syncSkillTrigger: syncSkillTrigger,
|
|
453
489
|
replaceTriggerWithChip: replaceTriggerWithChip,
|
|
454
490
|
slashTrigger: slashTrigger,
|
|
455
491
|
updateSlashTrigger: updateSlashTrigger,
|
|
456
492
|
closeSlashTrigger: closeSlashTrigger,
|
|
457
493
|
replaceTriggerWithSlashChip: replaceTriggerWithSlashChip,
|
|
494
|
+
hashTrigger: hashTrigger,
|
|
495
|
+
updateHashTrigger: updateHashTrigger,
|
|
496
|
+
closeHashTrigger: closeHashTrigger,
|
|
497
|
+
replaceTriggerWithSkillChip: replaceTriggerWithSkillChip,
|
|
458
498
|
serialize: serialize,
|
|
459
499
|
clear: clear,
|
|
460
500
|
focus: focus
|
|
461
501
|
};
|
|
462
502
|
};
|
|
463
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZVN0YXRlIiwic2VyaWFsaXplTWVudGlvbiIsInNlcmlhbGl6ZVNsYXNoQ29tbWFuZCIsImRldGVjdE1lbnRpb25UcmlnZ2VyIiwiZWRpdG9yRWwiLCJyYW5nZSIsImNvbnRhaW5zIiwic3RhcnRDb250YWluZXIiLCJhY3RpdmUiLCJxdWVyeSIsImF0UnVuTGVuZ3RoIiwiYW5jaG9yIiwibm9kZSIsIm5vZGVUeXBlIiwiTm9kZSIsIlRFWFRfTk9ERSIsInRleHQiLCJkYXRhIiwiY2FyZXQiLCJzdGFydE9mZnNldCIsImkiLCJydW5FbmQiLCJydW5TdGFydCIsInByZXYiLCJjaGFyQXQiLCJpc0JvdW5kYXJ5IiwidGVzdCIsImhhc1NsYXNoU3VmZml4IiwicXVlcnlTdGFydCIsInNsaWNlIiwiaW5jbHVkZXMiLCJvZmZzZXQiLCJkZXRlY3RTbGFzaFRyaWdnZXIiLCJzbGFzaEluZGV4IiwidXNlQ29udGV4dE1lbnRpb25zIiwiZWRpdG9yUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwidHJpZ2dlciIsInNldFRyaWdnZXIiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInNsYXNoVHJpZ2dlciIsInNldFNsYXNoVHJpZ2dlciIsImRldGVjdFRyaWdnZXIiLCJzZWxlY3Rpb24iLCJ3aW5kb3ciLCJnZXRTZWxlY3Rpb24iLCJyYW5nZUNvdW50IiwiY3VycmVudCIsImdldFJhbmdlQXQiLCJkZXRlY3RTbGFzaCIsInVwZGF0ZVRyaWdnZXIiLCJuZXh0IiwiY2xvc2VUcmlnZ2VyIiwidXBkYXRlU2xhc2hUcmlnZ2VyIiwiY2xvc2VTbGFzaFRyaWdnZXIiLCJzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoIiwibmV4dEF0UnVuTGVuZ3RoIiwibmV4dEhhc1NsYXNoIiwic2FmZU5leHQiLCJNYXRoIiwibWF4IiwiZmxvb3IiLCJhYnMiLCJfY3VycmVudCRhbmNob3IiLCJ0ZXh0Tm9kZSIsImZ1bGwiLCJjdXJyZW50UnVuTGVuIiwiY3VycmVudEhhc1NsYXNoIiwicXVlcnlMZW4iLCJsZW5ndGgiLCJiZWZvcmUiLCJhZnRlciIsIm5leHRSdW4iLCJjb25jYXQiLCJyZXBlYXQiLCJjbGVhblF1ZXJ5Iiwic3RhcnRzV2l0aCIsIm5leHRWYWx1ZSIsImRvY3VtZW50IiwiY3JlYXRlUmFuZ2UiLCJjYXJldE9mZnNldCIsInNldFN0YXJ0IiwibWluIiwiY29sbGFwc2UiLCJyZW1vdmVBbGxSYW5nZXMiLCJhZGRSYW5nZSIsInVwZGF0ZWQiLCJzeW5jU2tpbGxUcmlnZ2VyIiwiX2N1cnJlbnQkYW5jaG9yMiIsInJlcGxhY2VUcmlnZ2VyV2l0aENoaXAiLCJjaGlwTm9kZSIsIm1lbnRpb24iLCJfY3VycmVudCRhbmNob3IzIiwic2V0QXR0cmlidXRlIiwiU3RyaW5nIiwiaWQiLCJ0eXBlIiwibGFiZWwiLCJwYXJlbnQiLCJwYXJlbnROb2RlIiwic3BhY2VOb2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJpbnNlcnRCZWZvcmUiLCJuZXh0U2libGluZyIsInJlcGxhY2VUcmlnZ2VyV2l0aFNsYXNoQ2hpcCIsInNsYXNoQ29tbWFuZCIsIl9jdXJyZW50JGFuY2hvcjQiLCJ0cmlnZ2VyTGVuIiwic2VyaWFsaXplIiwiZWwiLCJtZW50aW9ucyIsInNsYXNoQ29tbWFuZHMiLCJ3YWxrIiwiRUxFTUVOVF9OT0RFIiwiX2VsTm9kZSRkYXRhc2V0IiwiX2VsTm9kZSRkYXRhc2V0MiIsImVsTm9kZSIsImRhdGFzZXQiLCJfZWxOb2RlJGRhdGFzZXQkbWVudGkiLCJfcmVmIiwiX3JlZjIiLCJfZWxOb2RlJGRhdGFzZXQkbWVudGkyIiwibWVudGlvbklkIiwibWVudGlvblR5cGUiLCJtZW50aW9uTGFiZWwiLCJ0ZXh0Q29udGVudCIsInB1c2giLCJfZWxOb2RlJGRhdGFzZXQkc2xhc2giLCJfcmVmMyIsIl9lbE5vZGUkZGF0YXNldCRzbGFzaDIiLCJfZWxOb2RlJHRleHRDb250ZW50Iiwic2xhc2giLCJzbGFzaElkIiwic2xhc2hMYWJlbCIsInJlcGxhY2UiLCJ0YWdOYW1lIiwiY2hpbGROb2RlcyIsImZvckVhY2giLCJjbGVhciIsImlubmVySFRNTCIsImZvY3VzIiwiX2VkaXRvclJlZiRjdXJyZW50Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZUNvbnRleHRNZW50aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb24gfSBmcm9tICcuLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IHNlcmlhbGl6ZU1lbnRpb24gfSBmcm9tICcuLi91dGlscy9yZW5kZXJDb250ZXh0TWVudGlvbnMnXG5pbXBvcnQgeyBzZXJpYWxpemVTbGFzaENvbW1hbmQgfSBmcm9tICcuLi91dGlscy9zbGFzaENvbW1hbmRNYXJrZXInXG5pbXBvcnQgdHlwZSB7IFNsYXNoQ29tbWFuZENoaXBEYXRhIH0gZnJvbSAnLi4vY29tcG9uZW50cy9hdG9tcy9TbGFzaENvbW1hbmRDaGlwL2J1aWxkU2xhc2hDaGlwRWxlbWVudCdcblxuZXhwb3J0IHR5cGUgTWVudGlvblRyaWdnZXJTdGF0ZSA9IHtcbiAgYWN0aXZlOiBib29sZWFuXG4gIHF1ZXJ5OiBzdHJpbmdcbiAgLyoqIENhbnRpZGFkIGRlIGBAYCBjb25zZWN1dGl2b3MgZGVsIHRyaWdnZXIgKGBAYCDihpIgMSwgYEBAYCDihpIgMikuIE1hcGVhIGEgbGEgdGFiIGVuIG9yZGVuLiAqL1xuICBhdFJ1bkxlbmd0aDogbnVtYmVyXG4gIC8qKiBQb3NpY2nDs24gZGVsIHByaW1lciBgQGAgZGVsIHJ1biAocmVlbXBsYXpvIGRlbCBjaGlwKS4gKi9cbiAgYW5jaG9yOiB7IG5vZGU6IE5vZGU7IG9mZnNldDogbnVtYmVyIH0gfCBudWxsXG59XG5cbmV4cG9ydCB0eXBlIFNsYXNoVHJpZ2dlclN0YXRlID0ge1xuICBhY3RpdmU6IGJvb2xlYW5cbiAgcXVlcnk6IHN0cmluZ1xuICBhbmNob3I6IHsgbm9kZTogTm9kZTsgb2Zmc2V0OiBudW1iZXIgfSB8IG51bGxcbn1cblxuLyoqXG4gKiBJbnNwZWNjaW9uYSBsYSBzZWxlY2Npw7NuIGFjdHVhbC4gRm9ybWF0bzogW2zDrW1pdGUgZGUgcGFsYWJyYV0gQCsgcXVlcnkgaGFzdGEgZWwgY2FyZXQuXG4gKiBQZXJtaXRlIGVzcGFjaW9zIHNpbXBsZXMgZGVudHJvIGRlbCBxdWVyeSAocC4gZWouIFwiQEp1YW4gUGVyZXpcIikgeSBjaWVycmFcbiAqIGVsIHRyaWdnZXIgY3VhbmRvIGRldGVjdGEgZG9zIGVzcGFjaW9zIGNvbnNlY3V0aXZvcy5cbiAqIExhIHRhYiBvYmpldGl2byBlcyBsYSBxdWUgY29ycmVzcG9uZGUgYWwgbsO6bWVybyBkZSBgQGAgKDEgPSBwcmltZXJhIHRhYiB2aXNpYmxlLCBldGMuKS5cbiAqL1xuY29uc3QgZGV0ZWN0TWVudGlvblRyaWdnZXIgPSAoZWRpdG9yRWw6IEhUTUxFbGVtZW50IHwgbnVsbCwgcmFuZ2U6IFJhbmdlKTogTWVudGlvblRyaWdnZXJTdGF0ZSA9PiB7XG4gIGlmICghZWRpdG9yRWwgfHwgIWVkaXRvckVsLmNvbnRhaW5zKHJhbmdlLnN0YXJ0Q29udGFpbmVyKSkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYXRSdW5MZW5ndGg6IDAsIGFuY2hvcjogbnVsbCB9XG4gIH1cbiAgY29uc3Qgbm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYXRSdW5MZW5ndGg6IDAsIGFuY2hvcjogbnVsbCB9XG4gIH1cbiAgY29uc3QgdGV4dCA9IChub2RlIGFzIFRleHQpLmRhdGFcbiAgY29uc3QgY2FyZXQgPSByYW5nZS5zdGFydE9mZnNldFxuICBsZXQgaSA9IGNhcmV0IC0gMVxuICBpZiAoaSA8IDApIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwLCBhbmNob3I6IG51bGwgfVxuICB9XG5cbiAgd2hpbGUgKGkgPj0gMCAmJiB0ZXh0W2ldICE9PSAnQCcpIGkgLT0gMVxuICBpZiAoaSA8IDAgfHwgdGV4dFtpXSAhPT0gJ0AnKSB7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCwgYW5jaG9yOiBudWxsIH1cbiAgfVxuXG4gIGNvbnN0IHJ1bkVuZCA9IGlcbiAgd2hpbGUgKGkgPj0gMCAmJiB0ZXh0W2ldID09PSAnQCcpIHtcbiAgICBpIC09IDFcbiAgfVxuICBjb25zdCBydW5TdGFydCA9IGkgKyAxXG4gIGNvbnN0IGF0UnVuTGVuZ3RoID0gcnVuRW5kIC0gcnVuU3RhcnQgKyAxXG4gIGNvbnN0IHByZXYgPSBydW5TdGFydCA+IDAgPyB0ZXh0LmNoYXJBdChydW5TdGFydCAtIDEpIDogJydcbiAgY29uc3QgaXNCb3VuZGFyeSA9ICFwcmV2IHx8IC9bXFxzKFt7XS8udGVzdChwcmV2KVxuICBpZiAoIWlzQm91bmRhcnkpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwLCBhbmNob3I6IG51bGwgfVxuICB9XG5cbiAgY29uc3QgaGFzU2xhc2hTdWZmaXggPSB0ZXh0W3J1bkVuZCArIDFdID09PSAnLydcbiAgY29uc3QgcXVlcnlTdGFydCA9IGhhc1NsYXNoU3VmZml4ID8gcnVuRW5kICsgMiA6IHJ1bkVuZCArIDFcbiAgY29uc3QgcXVlcnkgPSB0ZXh0LnNsaWNlKHF1ZXJ5U3RhcnQsIGNhcmV0KVxuICBpZiAoL1xcbnxcXHIvLnRlc3QocXVlcnkpKSB7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCwgYW5jaG9yOiBudWxsIH1cbiAgfVxuICBpZiAocXVlcnkuaW5jbHVkZXMoJyAgJykpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwLCBhbmNob3I6IG51bGwgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RpdmU6IHRydWUsXG4gICAgcXVlcnksXG4gICAgYXRSdW5MZW5ndGg6IGhhc1NsYXNoU3VmZml4ID8gLWF0UnVuTGVuZ3RoIDogYXRSdW5MZW5ndGgsXG4gICAgYW5jaG9yOiB7IG5vZGUsIG9mZnNldDogcnVuU3RhcnQgfSxcbiAgfVxufVxuXG5jb25zdCBkZXRlY3RTbGFzaFRyaWdnZXIgPSAoZWRpdG9yRWw6IEhUTUxFbGVtZW50IHwgbnVsbCwgcmFuZ2U6IFJhbmdlKTogU2xhc2hUcmlnZ2VyU3RhdGUgPT4ge1xuICBpZiAoIWVkaXRvckVsIHx8ICFlZGl0b3JFbC5jb250YWlucyhyYW5nZS5zdGFydENvbnRhaW5lcikpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9XG4gIH1cbiAgY29uc3Qgbm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYW5jaG9yOiBudWxsIH1cbiAgfVxuICBjb25zdCB0ZXh0ID0gKG5vZGUgYXMgVGV4dCkuZGF0YVxuICBjb25zdCBjYXJldCA9IHJhbmdlLnN0YXJ0T2Zmc2V0XG4gIGxldCBpID0gY2FyZXQgLSAxXG4gIGlmIChpIDwgMCkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYW5jaG9yOiBudWxsIH1cbiAgfVxuXG4gIHdoaWxlIChpID49IDAgJiYgdGV4dFtpXSAhPT0gJy8nKSBpIC09IDFcbiAgaWYgKGkgPCAwIHx8IHRleHRbaV0gIT09ICcvJykge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYW5jaG9yOiBudWxsIH1cbiAgfVxuXG4gIGNvbnN0IHNsYXNoSW5kZXggPSBpXG4gIGNvbnN0IHByZXYgPSBzbGFzaEluZGV4ID4gMCA/IHRleHQuY2hhckF0KHNsYXNoSW5kZXggLSAxKSA6ICcnXG4gIGNvbnN0IGlzQm91bmRhcnkgPSAhcHJldiB8fCAvW1xccyhbe10vLnRlc3QocHJldilcbiAgaWYgKCFpc0JvdW5kYXJ5KSB7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhbmNob3I6IG51bGwgfVxuICB9XG5cbiAgY29uc3QgcXVlcnkgPSB0ZXh0LnNsaWNlKHNsYXNoSW5kZXggKyAxLCBjYXJldClcbiAgaWYgKC9cXG58XFxyLy50ZXN0KHF1ZXJ5KSkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYW5jaG9yOiBudWxsIH1cbiAgfVxuICBpZiAocXVlcnkuaW5jbHVkZXMoJyAgJykpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9XG4gIH1cblxuICByZXR1cm4geyBhY3RpdmU6IHRydWUsIHF1ZXJ5LCBhbmNob3I6IHsgbm9kZSwgb2Zmc2V0OiBzbGFzaEluZGV4IH0gfVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ29udGV4dE1lbnRpb25zID0gKCkgPT4ge1xuICBjb25zdCBlZGl0b3JSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKVxuICBjb25zdCBbdHJpZ2dlciwgc2V0VHJpZ2dlcl0gPSB1c2VTdGF0ZTxNZW50aW9uVHJpZ2dlclN0YXRlPih7XG4gICAgYWN0aXZlOiBmYWxzZSxcbiAgICBxdWVyeTogJycsXG4gICAgYXRSdW5MZW5ndGg6IDAsXG4gICAgYW5jaG9yOiBudWxsLFxuICB9KVxuICBjb25zdCBbc2xhc2hUcmlnZ2VyLCBzZXRTbGFzaFRyaWdnZXJdID0gdXNlU3RhdGU8U2xhc2hUcmlnZ2VyU3RhdGU+KHtcbiAgICBhY3RpdmU6IGZhbHNlLFxuICAgIHF1ZXJ5OiAnJyxcbiAgICBhbmNob3I6IG51bGwsXG4gIH0pXG5cbiAgY29uc3QgZGV0ZWN0VHJpZ2dlciA9IHVzZUNhbGxiYWNrKCgpOiBNZW50aW9uVHJpZ2dlclN0YXRlID0+IHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCB8fCAhZWRpdG9yUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYXRSdW5MZW5ndGg6IDAsIGFuY2hvcjogbnVsbCB9XG4gICAgfVxuICAgIHJldHVybiBkZXRlY3RNZW50aW9uVHJpZ2dlcihlZGl0b3JSZWYuY3VycmVudCwgc2VsZWN0aW9uLmdldFJhbmdlQXQoMCkpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGRldGVjdFNsYXNoID0gdXNlQ2FsbGJhY2soKCk6IFNsYXNoVHJpZ2dlclN0YXRlID0+IHtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCB8fCAhZWRpdG9yUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYW5jaG9yOiBudWxsIH1cbiAgICB9XG4gICAgcmV0dXJuIGRldGVjdFNsYXNoVHJpZ2dlcihlZGl0b3JSZWYuY3VycmVudCwgc2VsZWN0aW9uLmdldFJhbmdlQXQoMCkpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHVwZGF0ZVRyaWdnZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgbmV4dCA9IGRldGVjdFRyaWdnZXIoKVxuICAgIHNldFRyaWdnZXIobmV4dClcbiAgICByZXR1cm4gbmV4dFxuICB9LCBbZGV0ZWN0VHJpZ2dlcl0pXG5cbiAgY29uc3QgY2xvc2VUcmlnZ2VyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFRyaWdnZXIoeyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwLCBhbmNob3I6IG51bGwgfSlcbiAgfSwgW10pXG5cbiAgY29uc3QgdXBkYXRlU2xhc2hUcmlnZ2VyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IG5leHQgPSBkZXRlY3RTbGFzaCgpXG4gICAgc2V0U2xhc2hUcmlnZ2VyKG5leHQpXG4gICAgcmV0dXJuIG5leHRcbiAgfSwgW2RldGVjdFNsYXNoXSlcblxuICBjb25zdCBjbG9zZVNsYXNoVHJpZ2dlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRTbGFzaFRyaWdnZXIoeyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9KVxuICB9LCBbXSlcblxuICAvKipcbiAgICogQWp1c3RhIGxhIGNhbnRpZGFkIGRlIGBAYCBkZWwgdHJpZ2dlciBhY3Rpdm8gc2luIHBlcmRlciBlbCBxdWVyeSBhY3R1YWwuXG4gICAqIEVqLjogYEBAYWJjYCAtPiBgQGFiY2AgYWwgY2FtYmlhciBkZSB0YWIuXG4gICAqL1xuICBjb25zdCBzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoID0gdXNlQ2FsbGJhY2soXG4gICAgKG5leHRBdFJ1bkxlbmd0aDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBuZXh0SGFzU2xhc2ggPSBuZXh0QXRSdW5MZW5ndGggPCAwXG4gICAgICBjb25zdCBzYWZlTmV4dCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoTWF0aC5hYnMobmV4dEF0UnVuTGVuZ3RoKSkpXG4gICAgICBjb25zdCBjdXJyZW50ID0gZGV0ZWN0VHJpZ2dlcigpXG4gICAgICBpZiAoIWN1cnJlbnQuYWN0aXZlIHx8ICFjdXJyZW50LmFuY2hvcikgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHsgbm9kZSwgb2Zmc2V0IH0gPSBjdXJyZW50LmFuY2hvclxuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSByZXR1cm5cbiAgICAgIGNvbnN0IHRleHROb2RlID0gbm9kZSBhcyBUZXh0XG4gICAgICBjb25zdCBmdWxsID0gdGV4dE5vZGUuZGF0YVxuICAgICAgY29uc3QgY3VycmVudFJ1bkxlbiA9IE1hdGguYWJzKGN1cnJlbnQuYXRSdW5MZW5ndGgpXG4gICAgICBjb25zdCBjdXJyZW50SGFzU2xhc2ggPSBjdXJyZW50LmF0UnVuTGVuZ3RoIDwgMFxuICAgICAgY29uc3QgcXVlcnlMZW4gPSBjdXJyZW50UnVuTGVuICsgKGN1cnJlbnRIYXNTbGFzaCA/IDEgOiAwKSArIGN1cnJlbnQucXVlcnkubGVuZ3RoXG4gICAgICBjb25zdCBiZWZvcmUgPSBmdWxsLnNsaWNlKDAsIG9mZnNldClcbiAgICAgIGNvbnN0IGFmdGVyID0gZnVsbC5zbGljZShvZmZzZXQgKyBxdWVyeUxlbilcbiAgICAgIGNvbnN0IG5leHRSdW4gPSBuZXh0SGFzU2xhc2ggPyBgJHsnQCcucmVwZWF0KHNhZmVOZXh0KX0vYCA6ICdAJy5yZXBlYXQoc2FmZU5leHQpXG4gICAgICAvLyBTaSB2ZW5pbW9zIGRlbCB0YWIgc2tpbGwsIGVsIHF1ZXJ5IHRpZW5lICcvJyBjb21vIHByZWZpam8g4oCUIGxpbXBpYXJsbyBhbCBjYW1iaWFyIGRlIHRhYi5cbiAgICAgIGNvbnN0IGNsZWFuUXVlcnkgPSBjdXJyZW50LnF1ZXJ5LnN0YXJ0c1dpdGgoJy8nKSA/IGN1cnJlbnQucXVlcnkuc2xpY2UoMSkgOiBjdXJyZW50LnF1ZXJ5XG4gICAgICBjb25zdCBuZXh0VmFsdWUgPSBgJHtiZWZvcmV9JHtuZXh0UnVufSR7Y2xlYW5RdWVyeX0ke2FmdGVyfWBcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICB0ZXh0Tm9kZS5kYXRhID0gbmV4dFZhbHVlXG5cbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKClcbiAgICAgICAgY29uc3QgY2FyZXRPZmZzZXQgPSBiZWZvcmUubGVuZ3RoICsgbmV4dFJ1bi5sZW5ndGggKyBjbGVhblF1ZXJ5Lmxlbmd0aFxuICAgICAgICByYW5nZS5zZXRTdGFydCh0ZXh0Tm9kZSwgTWF0aC5taW4oY2FyZXRPZmZzZXQsIHRleHROb2RlLmRhdGEubGVuZ3RoKSlcbiAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpXG4gICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXBkYXRlZCA9IGRldGVjdFRyaWdnZXIoKVxuICAgICAgc2V0VHJpZ2dlcih1cGRhdGVkKVxuICAgIH0sXG4gICAgW2RldGVjdFRyaWdnZXJdXG4gIClcblxuICAvKipcbiAgICogQ29udmllcnRlIGVsIHRyaWdnZXIgYEB7bn1xdWVyeWAgYWN0aXZvIGVuIGBAL3F1ZXJ5YC5cbiAgICogU2UgdXNhIGFsIGNhbWJpYXIgYSBsYSB0YWIgZGUgc2tpbGxzIChjdXlvIHRyaWdnZXIgZXMgYEAvYCkuXG4gICAqL1xuICBjb25zdCBzeW5jU2tpbGxUcmlnZ2VyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBkZXRlY3RUcmlnZ2VyKClcbiAgICBpZiAoIWN1cnJlbnQuYWN0aXZlIHx8ICFjdXJyZW50LmFuY2hvcikgcmV0dXJuXG4gICAgLy8gWWEgZXMgQC8gKHNraWxsKSDigJQgbm8gcmVlc2NyaWJpclxuICAgIGlmIChjdXJyZW50LmF0UnVuTGVuZ3RoID09PSAtMSkgcmV0dXJuXG5cbiAgICBjb25zdCB7IG5vZGUsIG9mZnNldCB9ID0gY3VycmVudC5hbmNob3JcbiAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUpIHJldHVyblxuICAgIGNvbnN0IHRleHROb2RlID0gbm9kZSBhcyBUZXh0XG4gICAgY29uc3QgZnVsbCA9IHRleHROb2RlLmRhdGFcbiAgICAvLyBhdFJ1bkxlbmd0aCBuZWdhdGl2byAoQEAvKSBpbmNsdXllIGVsIHNsYXNoOyB1c2FyIGFicyArIDEgY29tbyBlbiByZXBsYWNlVHJpZ2dlcldpdGhDaGlwXG4gICAgY29uc3QgY3VycmVudFJ1bkxlbiA9IE1hdGguYWJzKGN1cnJlbnQuYXRSdW5MZW5ndGgpXG4gICAgY29uc3QgY3VycmVudEhhc1NsYXNoID0gY3VycmVudC5hdFJ1bkxlbmd0aCA8IDBcbiAgICBjb25zdCBxdWVyeUxlbiA9IGN1cnJlbnRSdW5MZW4gKyAoY3VycmVudEhhc1NsYXNoID8gMSA6IDApICsgY3VycmVudC5xdWVyeS5sZW5ndGhcbiAgICBjb25zdCBiZWZvcmUgPSBmdWxsLnNsaWNlKDAsIG9mZnNldClcbiAgICBjb25zdCBhZnRlciA9IGZ1bGwuc2xpY2Uob2Zmc2V0ICsgcXVlcnlMZW4pXG4gICAgY29uc3QgY2xlYW5RdWVyeSA9IGN1cnJlbnQucXVlcnkuc3RhcnRzV2l0aCgnLycpID8gY3VycmVudC5xdWVyeS5zbGljZSgxKSA6IGN1cnJlbnQucXVlcnlcbiAgICBjb25zdCBuZXh0VmFsdWUgPSBgJHtiZWZvcmV9QC8ke2NsZWFuUXVlcnl9JHthZnRlcn1gXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB0ZXh0Tm9kZS5kYXRhID0gbmV4dFZhbHVlXG5cbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKClcbiAgICAgIGNvbnN0IGNhcmV0T2Zmc2V0ID0gYmVmb3JlLmxlbmd0aCArIDIgKyBjbGVhblF1ZXJ5Lmxlbmd0aFxuICAgICAgcmFuZ2Uuc2V0U3RhcnQodGV4dE5vZGUsIE1hdGgubWluKGNhcmV0T2Zmc2V0LCB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCkpXG4gICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpXG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlZCA9IGRldGVjdFRyaWdnZXIoKVxuICAgIHNldFRyaWdnZXIodXBkYXRlZClcbiAgfSwgW2RldGVjdFRyaWdnZXJdKVxuXG4gIC8qKlxuICAgKiBSZWVtcGxhemEgZWwgYEBxdWVyeWAgcGVuZGllbnRlIHBvciB1biBjaGlwIGF0w7NtaWNvIGNvbiBsYSBtZW50aW9uLlxuICAgKiBSZXF1aWVyZSBxdWUgZWwgY2FsbGVyIHByb3ZlYSBlbCBET00gZGVsIGNoaXAgKHNlIGluc2VydGEgdGFsIGN1YWwpLlxuICAgKi9cbiAgY29uc3QgcmVwbGFjZVRyaWdnZXJXaXRoQ2hpcCA9IHVzZUNhbGxiYWNrKFxuICAgIChjaGlwTm9kZTogSFRNTEVsZW1lbnQsIG1lbnRpb246IENvbnRleHRNZW50aW9uKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gZGV0ZWN0VHJpZ2dlcigpXG4gICAgICBpZiAoIWN1cnJlbnQuYWN0aXZlIHx8ICFjdXJyZW50LmFuY2hvcikgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHsgbm9kZSwgb2Zmc2V0IH0gPSBjdXJyZW50LmFuY2hvclxuICAgICAgY29uc3QgdGV4dE5vZGUgPSBub2RlIGFzIFRleHRcbiAgICAgIGNvbnN0IGZ1bGwgPSB0ZXh0Tm9kZS5kYXRhXG4gICAgICBjb25zdCBjdXJyZW50UnVuTGVuID0gTWF0aC5hYnMoY3VycmVudC5hdFJ1bkxlbmd0aClcbiAgICAgIGNvbnN0IGN1cnJlbnRIYXNTbGFzaCA9IGN1cnJlbnQuYXRSdW5MZW5ndGggPCAwXG4gICAgICBjb25zdCBxdWVyeUxlbiA9IGN1cnJlbnRSdW5MZW4gKyAoY3VycmVudEhhc1NsYXNoID8gMSA6IDApICsgY3VycmVudC5xdWVyeS5sZW5ndGhcbiAgICAgIGNvbnN0IGFmdGVyID0gZnVsbC5zbGljZShvZmZzZXQgKyBxdWVyeUxlbilcblxuICAgICAgLy8gVHJ1bmNhciBlbCB0ZXh0byBoYXN0YSBhbnRlcyBkZWwgcnVuIGRlIGBA4oCmYFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICB0ZXh0Tm9kZS5kYXRhID0gZnVsbC5zbGljZSgwLCBvZmZzZXQpXG5cbiAgICAgIC8vIEluc2VydGFyIGVsIGNoaXAganVzdG8gZGVzcHXDqXMgZGVsIG5vZG8gZGUgdGV4dG9cbiAgICAgIGNoaXBOb2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uJywgJ3RydWUnKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24taWQnLCBTdHJpbmcobWVudGlvbi5pZCkpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi10eXBlJywgbWVudGlvbi50eXBlKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24tbGFiZWwnLCBtZW50aW9uLmxhYmVsKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAnZmFsc2UnKVxuXG4gICAgICBjb25zdCBwYXJlbnQgPSB0ZXh0Tm9kZS5wYXJlbnROb2RlXG4gICAgICBpZiAoIXBhcmVudCkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHNwYWNlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGBcXHUwMGEwJHthZnRlcn1gKVxuICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShjaGlwTm9kZSwgdGV4dE5vZGUubmV4dFNpYmxpbmcpXG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKHNwYWNlTm9kZSwgY2hpcE5vZGUubmV4dFNpYmxpbmcpXG5cbiAgICAgIC8vIFJlcG9zaWNpb25hciBjYXJldCBkZXNwdcOpcyBkZWwgY2hpcCAoYW50ZXMgZGVsIGVzcGFjaW8gbm9uLWJyZWFraW5nKVxuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgICByYW5nZS5zZXRTdGFydChzcGFjZU5vZGUsIDEpXG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG4gICAgICB9XG5cbiAgICAgIGNsb3NlVHJpZ2dlcigpXG4gICAgfSxcbiAgICBbZGV0ZWN0VHJpZ2dlciwgY2xvc2VUcmlnZ2VyXVxuICApXG5cbiAgY29uc3QgcmVwbGFjZVRyaWdnZXJXaXRoU2xhc2hDaGlwID0gdXNlQ2FsbGJhY2soXG4gICAgKGNoaXBOb2RlOiBIVE1MRWxlbWVudCwgc2xhc2hDb21tYW5kOiBTbGFzaENvbW1hbmRDaGlwRGF0YSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IGRldGVjdFNsYXNoKClcbiAgICAgIGlmICghY3VycmVudC5hY3RpdmUgfHwgIWN1cnJlbnQuYW5jaG9yKSByZXR1cm5cblxuICAgICAgY29uc3QgeyBub2RlLCBvZmZzZXQgfSA9IGN1cnJlbnQuYW5jaG9yXG4gICAgICBjb25zdCB0ZXh0Tm9kZSA9IG5vZGUgYXMgVGV4dFxuICAgICAgY29uc3QgZnVsbCA9IHRleHROb2RlLmRhdGFcbiAgICAgIGNvbnN0IHRyaWdnZXJMZW4gPSAxICsgY3VycmVudC5xdWVyeS5sZW5ndGhcbiAgICAgIGNvbnN0IGFmdGVyID0gZnVsbC5zbGljZShvZmZzZXQgKyB0cmlnZ2VyTGVuKVxuXG4gICAgICB0ZXh0Tm9kZS5kYXRhID0gZnVsbC5zbGljZSgwLCBvZmZzZXQpXG5cbiAgICAgIGNoaXBOb2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1zbGFzaC1jb21tYW5kJywgJ3RydWUnKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXNsYXNoLWlkJywgU3RyaW5nKHNsYXNoQ29tbWFuZC5pZCkpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2xhc2gtbGFiZWwnLCBzbGFzaENvbW1hbmQubGFiZWwpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsICdmYWxzZScpXG5cbiAgICAgIGNvbnN0IHBhcmVudCA9IHRleHROb2RlLnBhcmVudE5vZGVcbiAgICAgIGlmICghcGFyZW50KSByZXR1cm5cblxuICAgICAgY29uc3Qgc3BhY2VOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYCAke2FmdGVyfWApXG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaXBOb2RlLCB0ZXh0Tm9kZS5uZXh0U2libGluZylcbiAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoc3BhY2VOb2RlLCBjaGlwTm9kZS5uZXh0U2libGluZylcblxuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKVxuICAgICAgICByYW5nZS5zZXRTdGFydChzcGFjZU5vZGUsIDEpXG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG4gICAgICB9XG5cbiAgICAgIGNsb3NlU2xhc2hUcmlnZ2VyKClcbiAgICB9LFxuICAgIFtkZXRlY3RTbGFzaCwgY2xvc2VTbGFzaFRyaWdnZXJdXG4gIClcblxuICBjb25zdCBzZXJpYWxpemUgPSB1c2VDYWxsYmFjaygoKToge1xuICAgIHRleHQ6IHN0cmluZ1xuICAgIG1lbnRpb25zOiBDb250ZXh0TWVudGlvbltdXG4gICAgc2xhc2hDb21tYW5kczogU2xhc2hDb21tYW5kQ2hpcERhdGFbXVxuICB9ID0+IHtcbiAgICBjb25zdCBlbCA9IGVkaXRvclJlZi5jdXJyZW50XG4gICAgaWYgKCFlbCkgcmV0dXJuIHsgdGV4dDogJycsIG1lbnRpb25zOiBbXSwgc2xhc2hDb21tYW5kczogW10gfVxuICAgIGNvbnN0IG1lbnRpb25zOiBDb250ZXh0TWVudGlvbltdID0gW11cbiAgICBjb25zdCBzbGFzaENvbW1hbmRzOiBTbGFzaENvbW1hbmRDaGlwRGF0YVtdID0gW11cbiAgICBsZXQgdGV4dCA9ICcnXG5cbiAgICBjb25zdCB3YWxrID0gKG5vZGU6IE5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICB0ZXh0ICs9IChub2RlIGFzIFRleHQpLmRhdGFcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgY29uc3QgZWxOb2RlID0gbm9kZSBhcyBIVE1MRWxlbWVudFxuICAgICAgICBpZiAoZWxOb2RlLmRhdGFzZXQ/Lm1lbnRpb24gPT09ICd0cnVlJykge1xuICAgICAgICAgIGNvbnN0IG1lbnRpb246IENvbnRleHRNZW50aW9uID0ge1xuICAgICAgICAgICAgaWQ6IGVsTm9kZS5kYXRhc2V0Lm1lbnRpb25JZCA/PyAnJyxcbiAgICAgICAgICAgIHR5cGU6IChlbE5vZGUuZGF0YXNldC5tZW50aW9uVHlwZSBhcyBDb250ZXh0TWVudGlvblsndHlwZSddKSA/PyAndXNlcicsXG4gICAgICAgICAgICBsYWJlbDogZWxOb2RlLmRhdGFzZXQubWVudGlvbkxhYmVsID8/IGVsTm9kZS50ZXh0Q29udGVudCA/PyAnJyxcbiAgICAgICAgICB9XG4gICAgICAgICAgbWVudGlvbnMucHVzaChtZW50aW9uKVxuICAgICAgICAgIHRleHQgKz0gc2VyaWFsaXplTWVudGlvbihtZW50aW9uKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChlbE5vZGUuZGF0YXNldD8uc2xhc2hDb21tYW5kID09PSAndHJ1ZScpIHtcbiAgICAgICAgICBjb25zdCBzbGFzaDogU2xhc2hDb21tYW5kQ2hpcERhdGEgPSB7XG4gICAgICAgICAgICBpZDogZWxOb2RlLmRhdGFzZXQuc2xhc2hJZCA/PyAnJyxcbiAgICAgICAgICAgIGxhYmVsOiBlbE5vZGUuZGF0YXNldC5zbGFzaExhYmVsID8/IGVsTm9kZS50ZXh0Q29udGVudD8ucmVwbGFjZSgvXlxcLy8sICcnKSA/PyAnJyxcbiAgICAgICAgICB9XG4gICAgICAgICAgc2xhc2hDb21tYW5kcy5wdXNoKHNsYXNoKVxuICAgICAgICAgIHRleHQgKz0gc2VyaWFsaXplU2xhc2hDb21tYW5kKHNsYXNoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChlbE5vZGUudGFnTmFtZSA9PT0gJ0JSJykge1xuICAgICAgICAgIHRleHQgKz0gJ1xcbidcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBlbE5vZGUuY2hpbGROb2Rlcy5mb3JFYWNoKHdhbGspXG4gICAgICAgIGlmIChlbE5vZGUudGFnTmFtZSA9PT0gJ0RJVicgfHwgZWxOb2RlLnRhZ05hbWUgPT09ICdQJykgdGV4dCArPSAnXFxuJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGVsLmNoaWxkTm9kZXMuZm9yRWFjaCh3YWxrKVxuICAgIHJldHVybiB7IHRleHQ6IHRleHQucmVwbGFjZSgvXFxuKyQvLCAnJyksIG1lbnRpb25zLCBzbGFzaENvbW1hbmRzIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgY2xlYXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGVkaXRvclJlZi5jdXJyZW50KSBlZGl0b3JSZWYuY3VycmVudC5pbm5lckhUTUwgPSAnJ1xuICAgIGNsb3NlVHJpZ2dlcigpXG4gICAgY2xvc2VTbGFzaFRyaWdnZXIoKVxuICB9LCBbY2xvc2VUcmlnZ2VyLCBjbG9zZVNsYXNoVHJpZ2dlcl0pXG5cbiAgY29uc3QgZm9jdXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgfSwgW10pXG5cbiAgcmV0dXJuIHtcbiAgICBlZGl0b3JSZWYsXG4gICAgdHJpZ2dlcixcbiAgICB1cGRhdGVUcmlnZ2VyLFxuICAgIGNsb3NlVHJpZ2dlcixcbiAgICBzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoLFxuICAgIHN5bmNTa2lsbFRyaWdnZXIsXG4gICAgcmVwbGFjZVRyaWdnZXJXaXRoQ2hpcCxcbiAgICBzbGFzaFRyaWdnZXIsXG4gICAgdXBkYXRlU2xhc2hUcmlnZ2VyLFxuICAgIGNsb3NlU2xhc2hUcmlnZ2VyLFxuICAgIHJlcGxhY2VUcmlnZ2VyV2l0aFNsYXNoQ2hpcCxcbiAgICBzZXJpYWxpemUsXG4gICAgY2xlYXIsXG4gICAgZm9jdXMsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVNBLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUVyRCxTQUFTQyxnQkFBZ0IsUUFBUSxnQ0FBZ0M7QUFDakUsU0FBU0MscUJBQXFCLFFBQVEsNkJBQTZCO0FBa0JuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNQyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUFJQyxRQUE0QixFQUFFQyxLQUFZLEVBQTBCO0VBQ2hHLElBQUksQ0FBQ0QsUUFBUSxJQUFJLENBQUNBLFFBQVEsQ0FBQ0UsUUFBUSxDQUFDRCxLQUFLLENBQUNFLGNBQWMsQ0FBQyxFQUFFO0lBQ3pELE9BQU87TUFBRUMsTUFBTSxFQUFFLEtBQUs7TUFBRUMsS0FBSyxFQUFFLEVBQUU7TUFBRUMsV0FBVyxFQUFFLENBQUM7TUFBRUMsTUFBTSxFQUFFO0lBQUssQ0FBQztFQUNuRTtFQUNBLElBQU1DLElBQUksR0FBR1AsS0FBSyxDQUFDRSxjQUFjO0VBQ2pDLElBQUlL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
|
|
503
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZVN0YXRlIiwic2VyaWFsaXplTWVudGlvbiIsInNlcmlhbGl6ZVNsYXNoQ29tbWFuZCIsImRldGVjdE1lbnRpb25UcmlnZ2VyIiwiZWRpdG9yRWwiLCJyYW5nZSIsImNvbnRhaW5zIiwic3RhcnRDb250YWluZXIiLCJhY3RpdmUiLCJxdWVyeSIsImF0UnVuTGVuZ3RoIiwiYW5jaG9yIiwibm9kZSIsIm5vZGVUeXBlIiwiTm9kZSIsIlRFWFRfTk9ERSIsInRleHQiLCJkYXRhIiwiY2FyZXQiLCJzdGFydE9mZnNldCIsImkiLCJydW5FbmQiLCJydW5TdGFydCIsInByZXYiLCJjaGFyQXQiLCJpc0JvdW5kYXJ5IiwidGVzdCIsImhhc1NsYXNoU3VmZml4IiwicXVlcnlTdGFydCIsInNsaWNlIiwiaW5jbHVkZXMiLCJvZmZzZXQiLCJkZXRlY3RDaGFyVHJpZ2dlciIsImNoYXIiLCJ0cmlnZ2VySW5kZXgiLCJ1c2VDb250ZXh0TWVudGlvbnMiLCJlZGl0b3JSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJ0cmlnZ2VyIiwic2V0VHJpZ2dlciIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwic2xhc2hUcmlnZ2VyIiwic2V0U2xhc2hUcmlnZ2VyIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJoYXNoVHJpZ2dlciIsInNldEhhc2hUcmlnZ2VyIiwiZGV0ZWN0VHJpZ2dlciIsInNlbGVjdGlvbiIsIndpbmRvdyIsImdldFNlbGVjdGlvbiIsInJhbmdlQ291bnQiLCJjdXJyZW50IiwiZ2V0UmFuZ2VBdCIsImRldGVjdFNsYXNoIiwiZGV0ZWN0SGFzaCIsInVwZGF0ZVRyaWdnZXIiLCJuZXh0IiwiY2xvc2VUcmlnZ2VyIiwidXBkYXRlU2xhc2hUcmlnZ2VyIiwiY2xvc2VTbGFzaFRyaWdnZXIiLCJ1cGRhdGVIYXNoVHJpZ2dlciIsImNsb3NlSGFzaFRyaWdnZXIiLCJzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoIiwibmV4dEF0UnVuTGVuZ3RoIiwibmV4dEhhc1NsYXNoIiwic2FmZU5leHQiLCJNYXRoIiwibWF4IiwiZmxvb3IiLCJhYnMiLCJfY3VycmVudCRhbmNob3IiLCJ0ZXh0Tm9kZSIsImZ1bGwiLCJjdXJyZW50UnVuTGVuIiwiY3VycmVudEhhc1NsYXNoIiwicXVlcnlMZW4iLCJsZW5ndGgiLCJiZWZvcmUiLCJhZnRlciIsIm5leHRSdW4iLCJjb25jYXQiLCJyZXBlYXQiLCJjbGVhblF1ZXJ5Iiwic3RhcnRzV2l0aCIsIm5leHRWYWx1ZSIsImRvY3VtZW50IiwiY3JlYXRlUmFuZ2UiLCJjYXJldE9mZnNldCIsInNldFN0YXJ0IiwibWluIiwiY29sbGFwc2UiLCJyZW1vdmVBbGxSYW5nZXMiLCJhZGRSYW5nZSIsInVwZGF0ZWQiLCJyZXBsYWNlVHJpZ2dlcldpdGhDaGlwIiwiY2hpcE5vZGUiLCJtZW50aW9uIiwiX2N1cnJlbnQkYW5jaG9yMiIsInNldEF0dHJpYnV0ZSIsIlN0cmluZyIsImlkIiwidHlwZSIsImxhYmVsIiwicGFyZW50IiwicGFyZW50Tm9kZSIsInNwYWNlTm9kZSIsImNyZWF0ZVRleHROb2RlIiwiaW5zZXJ0QmVmb3JlIiwibmV4dFNpYmxpbmciLCJyZW1vdmUiLCJyZXBsYWNlVHJpZ2dlcldpdGhTbGFzaENoaXAiLCJzbGFzaENvbW1hbmQiLCJfY3VycmVudCRhbmNob3IzIiwidHJpZ2dlckxlbiIsInJlcGxhY2VUcmlnZ2VyV2l0aFNraWxsQ2hpcCIsIl9jdXJyZW50JGFuY2hvcjQiLCJzZXJpYWxpemUiLCJlbCIsIm1lbnRpb25zIiwic2xhc2hDb21tYW5kcyIsIndhbGsiLCJFTEVNRU5UX05PREUiLCJfZWxOb2RlJGRhdGFzZXQiLCJfZWxOb2RlJGRhdGFzZXQyIiwiZWxOb2RlIiwiZGF0YXNldCIsIl9lbE5vZGUkZGF0YXNldCRtZW50aSIsIl9yZWYiLCJfcmVmMiIsIl9lbE5vZGUkZGF0YXNldCRtZW50aTIiLCJtZW50aW9uSWQiLCJtZW50aW9uVHlwZSIsIm1lbnRpb25MYWJlbCIsInRleHRDb250ZW50IiwicHVzaCIsIl9lbE5vZGUkZGF0YXNldCRzbGFzaCIsIl9yZWYzIiwiX2VsTm9kZSRkYXRhc2V0JHNsYXNoMiIsIl9lbE5vZGUkdGV4dENvbnRlbnQiLCJzbGFzaCIsInNsYXNoSWQiLCJzbGFzaExhYmVsIiwicmVwbGFjZSIsInRhZ05hbWUiLCJjaGlsZE5vZGVzIiwiZm9yRWFjaCIsImNsZWFyIiwiaW5uZXJIVE1MIiwiZm9jdXMiLCJfZWRpdG9yUmVmJGN1cnJlbnQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlQ29udGV4dE1lbnRpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgc2VyaWFsaXplTWVudGlvbiB9IGZyb20gJy4uL3V0aWxzL3JlbmRlckNvbnRleHRNZW50aW9ucydcbmltcG9ydCB7IHNlcmlhbGl6ZVNsYXNoQ29tbWFuZCB9IGZyb20gJy4uL3V0aWxzL3NsYXNoQ29tbWFuZE1hcmtlcidcbmltcG9ydCB0eXBlIHsgU2xhc2hDb21tYW5kQ2hpcERhdGEgfSBmcm9tICcuLi9jb21wb25lbnRzL2F0b21zL1NsYXNoQ29tbWFuZENoaXAvYnVpbGRTbGFzaENoaXBFbGVtZW50J1xuXG5leHBvcnQgdHlwZSBNZW50aW9uVHJpZ2dlclN0YXRlID0ge1xuICBhY3RpdmU6IGJvb2xlYW5cbiAgcXVlcnk6IHN0cmluZ1xuICAvKiogQ2FudGlkYWQgZGUgYEBgIGNvbnNlY3V0aXZvcyBkZWwgdHJpZ2dlciAoYEBgIOKGkiAxLCBgQEBgIOKGkiAyKS4gTWFwZWEgYSBsYSB0YWIgZW4gb3JkZW4uICovXG4gIGF0UnVuTGVuZ3RoOiBudW1iZXJcbiAgLyoqIFBvc2ljacOzbiBkZWwgcHJpbWVyIGBAYCBkZWwgcnVuIChyZWVtcGxhem8gZGVsIGNoaXApLiAqL1xuICBhbmNob3I6IHsgbm9kZTogTm9kZTsgb2Zmc2V0OiBudW1iZXIgfSB8IG51bGxcbn1cblxuZXhwb3J0IHR5cGUgU2xhc2hUcmlnZ2VyU3RhdGUgPSB7XG4gIGFjdGl2ZTogYm9vbGVhblxuICBxdWVyeTogc3RyaW5nXG4gIGFuY2hvcjogeyBub2RlOiBOb2RlOyBvZmZzZXQ6IG51bWJlciB9IHwgbnVsbFxufVxuXG4vKiogVHJpZ2dlciBgI2AgcXVlIGFicmUgZWwgbGlzdGFkbyBkZSBza2lsbHMuIE1pc21hIGZvcm1hIHF1ZSBlbCBkZSBzbGFzaC4gKi9cbmV4cG9ydCB0eXBlIEhhc2hUcmlnZ2VyU3RhdGUgPSBTbGFzaFRyaWdnZXJTdGF0ZVxuXG4vKipcbiAqIEluc3BlY2Npb25hIGxhIHNlbGVjY2nDs24gYWN0dWFsLiBGb3JtYXRvOiBbbMOtbWl0ZSBkZSBwYWxhYnJhXSBAKyBxdWVyeSBoYXN0YSBlbCBjYXJldC5cbiAqIFBlcm1pdGUgZXNwYWNpb3Mgc2ltcGxlcyBkZW50cm8gZGVsIHF1ZXJ5IChwLiBlai4gXCJASnVhbiBQZXJlelwiKSB5IGNpZXJyYVxuICogZWwgdHJpZ2dlciBjdWFuZG8gZGV0ZWN0YSBkb3MgZXNwYWNpb3MgY29uc2VjdXRpdm9zLlxuICogTGEgdGFiIG9iamV0aXZvIGVzIGxhIHF1ZSBjb3JyZXNwb25kZSBhbCBuw7ptZXJvIGRlIGBAYCAoMSA9IHByaW1lcmEgdGFiIHZpc2libGUsIGV0Yy4pLlxuICovXG5jb25zdCBkZXRlY3RNZW50aW9uVHJpZ2dlciA9IChlZGl0b3JFbDogSFRNTEVsZW1lbnQgfCBudWxsLCByYW5nZTogUmFuZ2UpOiBNZW50aW9uVHJpZ2dlclN0YXRlID0+IHtcbiAgaWYgKCFlZGl0b3JFbCB8fCAhZWRpdG9yRWwuY29udGFpbnMocmFuZ2Uuc3RhcnRDb250YWluZXIpKSB7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCwgYW5jaG9yOiBudWxsIH1cbiAgfVxuICBjb25zdCBub2RlID0gcmFuZ2Uuc3RhcnRDb250YWluZXJcbiAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCwgYW5jaG9yOiBudWxsIH1cbiAgfVxuICBjb25zdCB0ZXh0ID0gKG5vZGUgYXMgVGV4dCkuZGF0YVxuICBjb25zdCBjYXJldCA9IHJhbmdlLnN0YXJ0T2Zmc2V0XG4gIGxldCBpID0gY2FyZXQgLSAxXG4gIGlmIChpIDwgMCkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYXRSdW5MZW5ndGg6IDAsIGFuY2hvcjogbnVsbCB9XG4gIH1cblxuICB3aGlsZSAoaSA+PSAwICYmIHRleHRbaV0gIT09ICdAJykgaSAtPSAxXG4gIGlmIChpIDwgMCB8fCB0ZXh0W2ldICE9PSAnQCcpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwLCBhbmNob3I6IG51bGwgfVxuICB9XG5cbiAgY29uc3QgcnVuRW5kID0gaVxuICB3aGlsZSAoaSA+PSAwICYmIHRleHRbaV0gPT09ICdAJykge1xuICAgIGkgLT0gMVxuICB9XG4gIGNvbnN0IHJ1blN0YXJ0ID0gaSArIDFcbiAgY29uc3QgYXRSdW5MZW5ndGggPSBydW5FbmQgLSBydW5TdGFydCArIDFcbiAgY29uc3QgcHJldiA9IHJ1blN0YXJ0ID4gMCA/IHRleHQuY2hhckF0KHJ1blN0YXJ0IC0gMSkgOiAnJ1xuICBjb25zdCBpc0JvdW5kYXJ5ID0gIXByZXYgfHwgL1tcXHMoW3tdLy50ZXN0KHByZXYpXG4gIGlmICghaXNCb3VuZGFyeSkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYXRSdW5MZW5ndGg6IDAsIGFuY2hvcjogbnVsbCB9XG4gIH1cblxuICBjb25zdCBoYXNTbGFzaFN1ZmZpeCA9IHRleHRbcnVuRW5kICsgMV0gPT09ICcvJ1xuICBjb25zdCBxdWVyeVN0YXJ0ID0gaGFzU2xhc2hTdWZmaXggPyBydW5FbmQgKyAyIDogcnVuRW5kICsgMVxuICBjb25zdCBxdWVyeSA9IHRleHQuc2xpY2UocXVlcnlTdGFydCwgY2FyZXQpXG4gIGlmICgvXFxufFxcci8udGVzdChxdWVyeSkpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGF0UnVuTGVuZ3RoOiAwLCBhbmNob3I6IG51bGwgfVxuICB9XG4gIGlmIChxdWVyeS5pbmNsdWRlcygnICAnKSkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYXRSdW5MZW5ndGg6IDAsIGFuY2hvcjogbnVsbCB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICBxdWVyeSxcbiAgICBhdFJ1bkxlbmd0aDogaGFzU2xhc2hTdWZmaXggPyAtYXRSdW5MZW5ndGggOiBhdFJ1bkxlbmd0aCxcbiAgICBhbmNob3I6IHsgbm9kZSwgb2Zmc2V0OiBydW5TdGFydCB9LFxuICB9XG59XG5cbi8qKiBEZXRlY3RhIHVuIHRyaWdnZXIgZGUgdW4gc29sbyBjYXJhY3RlciAoYC9gIG8gYCNgKSBlbiBsw61taXRlIGRlIHBhbGFicmEsIGNvbiBxdWVyeSBoYXN0YSBlbCBjYXJldC4gKi9cbmNvbnN0IGRldGVjdENoYXJUcmlnZ2VyID0gKGVkaXRvckVsOiBIVE1MRWxlbWVudCB8IG51bGwsIHJhbmdlOiBSYW5nZSwgY2hhcjogc3RyaW5nKTogU2xhc2hUcmlnZ2VyU3RhdGUgPT4ge1xuICBpZiAoIWVkaXRvckVsIHx8ICFlZGl0b3JFbC5jb250YWlucyhyYW5nZS5zdGFydENvbnRhaW5lcikpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9XG4gIH1cbiAgY29uc3Qgbm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyXG4gIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYW5jaG9yOiBudWxsIH1cbiAgfVxuICBjb25zdCB0ZXh0ID0gKG5vZGUgYXMgVGV4dCkuZGF0YVxuICBjb25zdCBjYXJldCA9IHJhbmdlLnN0YXJ0T2Zmc2V0XG4gIGxldCBpID0gY2FyZXQgLSAxXG4gIGlmIChpIDwgMCkge1xuICAgIHJldHVybiB7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYW5jaG9yOiBudWxsIH1cbiAgfVxuXG4gIHdoaWxlIChpID49IDAgJiYgdGV4dFtpXSAhPT0gY2hhcikgaSAtPSAxXG4gIGlmIChpIDwgMCB8fCB0ZXh0W2ldICE9PSBjaGFyKSB7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhbmNob3I6IG51bGwgfVxuICB9XG5cbiAgY29uc3QgdHJpZ2dlckluZGV4ID0gaVxuICBjb25zdCBwcmV2ID0gdHJpZ2dlckluZGV4ID4gMCA/IHRleHQuY2hhckF0KHRyaWdnZXJJbmRleCAtIDEpIDogJydcbiAgY29uc3QgaXNCb3VuZGFyeSA9ICFwcmV2IHx8IC9bXFxzKFt7XS8udGVzdChwcmV2KVxuICBpZiAoIWlzQm91bmRhcnkpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9XG4gIH1cblxuICBjb25zdCBxdWVyeSA9IHRleHQuc2xpY2UodHJpZ2dlckluZGV4ICsgMSwgY2FyZXQpXG4gIGlmICgvXFxufFxcci8udGVzdChxdWVyeSkpIHtcbiAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9XG4gIH1cbiAgaWYgKHF1ZXJ5LmluY2x1ZGVzKCcgICcpKSB7XG4gICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhbmNob3I6IG51bGwgfVxuICB9XG5cbiAgcmV0dXJuIHsgYWN0aXZlOiB0cnVlLCBxdWVyeSwgYW5jaG9yOiB7IG5vZGUsIG9mZnNldDogdHJpZ2dlckluZGV4IH0gfVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ29udGV4dE1lbnRpb25zID0gKCkgPT4ge1xuICBjb25zdCBlZGl0b3JSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKVxuICBjb25zdCBbdHJpZ2dlciwgc2V0VHJpZ2dlcl0gPSB1c2VTdGF0ZTxNZW50aW9uVHJpZ2dlclN0YXRlPih7XG4gICAgYWN0aXZlOiBmYWxzZSxcbiAgICBxdWVyeTogJycsXG4gICAgYXRSdW5MZW5ndGg6IDAsXG4gICAgYW5jaG9yOiBudWxsLFxuICB9KVxuICBjb25zdCBbc2xhc2hUcmlnZ2VyLCBzZXRTbGFzaFRyaWdnZXJdID0gdXNlU3RhdGU8U2xhc2hUcmlnZ2VyU3RhdGU+KHtcbiAgICBhY3RpdmU6IGZhbHNlLFxuICAgIHF1ZXJ5OiAnJyxcbiAgICBhbmNob3I6IG51bGwsXG4gIH0pXG4gIGNvbnN0IFtoYXNoVHJpZ2dlciwgc2V0SGFzaFRyaWdnZXJdID0gdXNlU3RhdGU8SGFzaFRyaWdnZXJTdGF0ZT4oe1xuICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgcXVlcnk6ICcnLFxuICAgIGFuY2hvcjogbnVsbCxcbiAgfSlcblxuICBjb25zdCBkZXRlY3RUcmlnZ2VyID0gdXNlQ2FsbGJhY2soKCk6IE1lbnRpb25UcmlnZ2VyU3RhdGUgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwIHx8ICFlZGl0b3JSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhdFJ1bkxlbmd0aDogMCwgYW5jaG9yOiBudWxsIH1cbiAgICB9XG4gICAgcmV0dXJuIGRldGVjdE1lbnRpb25UcmlnZ2VyKGVkaXRvclJlZi5jdXJyZW50LCBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKSlcbiAgfSwgW10pXG5cbiAgY29uc3QgZGV0ZWN0U2xhc2ggPSB1c2VDYWxsYmFjaygoKTogU2xhc2hUcmlnZ2VyU3RhdGUgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwIHx8ICFlZGl0b3JSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhbmNob3I6IG51bGwgfVxuICAgIH1cbiAgICByZXR1cm4gZGV0ZWN0Q2hhclRyaWdnZXIoZWRpdG9yUmVmLmN1cnJlbnQsIHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLCAnLycpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGRldGVjdEhhc2ggPSB1c2VDYWxsYmFjaygoKTogSGFzaFRyaWdnZXJTdGF0ZSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDAgfHwgIWVkaXRvclJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm4geyBhY3RpdmU6IGZhbHNlLCBxdWVyeTogJycsIGFuY2hvcjogbnVsbCB9XG4gICAgfVxuICAgIHJldHVybiBkZXRlY3RDaGFyVHJpZ2dlcihlZGl0b3JSZWYuY3VycmVudCwgc2VsZWN0aW9uLmdldFJhbmdlQXQoMCksICcjJylcbiAgfSwgW10pXG5cbiAgY29uc3QgdXBkYXRlVHJpZ2dlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBuZXh0ID0gZGV0ZWN0VHJpZ2dlcigpXG4gICAgc2V0VHJpZ2dlcihuZXh0KVxuICAgIHJldHVybiBuZXh0XG4gIH0sIFtkZXRlY3RUcmlnZ2VyXSlcblxuICBjb25zdCBjbG9zZVRyaWdnZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0VHJpZ2dlcih7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYXRSdW5MZW5ndGg6IDAsIGFuY2hvcjogbnVsbCB9KVxuICB9LCBbXSlcblxuICBjb25zdCB1cGRhdGVTbGFzaFRyaWdnZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgbmV4dCA9IGRldGVjdFNsYXNoKClcbiAgICBzZXRTbGFzaFRyaWdnZXIobmV4dClcbiAgICByZXR1cm4gbmV4dFxuICB9LCBbZGV0ZWN0U2xhc2hdKVxuXG4gIGNvbnN0IGNsb3NlU2xhc2hUcmlnZ2VyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNsYXNoVHJpZ2dlcih7IGFjdGl2ZTogZmFsc2UsIHF1ZXJ5OiAnJywgYW5jaG9yOiBudWxsIH0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHVwZGF0ZUhhc2hUcmlnZ2VyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IG5leHQgPSBkZXRlY3RIYXNoKClcbiAgICBzZXRIYXNoVHJpZ2dlcihuZXh0KVxuICAgIHJldHVybiBuZXh0XG4gIH0sIFtkZXRlY3RIYXNoXSlcblxuICBjb25zdCBjbG9zZUhhc2hUcmlnZ2VyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEhhc2hUcmlnZ2VyKHsgYWN0aXZlOiBmYWxzZSwgcXVlcnk6ICcnLCBhbmNob3I6IG51bGwgfSlcbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIEFqdXN0YSBsYSBjYW50aWRhZCBkZSBgQGAgZGVsIHRyaWdnZXIgYWN0aXZvIHNpbiBwZXJkZXIgZWwgcXVlcnkgYWN0dWFsLlxuICAgKiBFai46IGBAQGFiY2AgLT4gYEBhYmNgIGFsIGNhbWJpYXIgZGUgdGFiLlxuICAgKi9cbiAgY29uc3Qgc3luY1RyaWdnZXJBdFJ1bkxlbmd0aCA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXh0QXRSdW5MZW5ndGg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgbmV4dEhhc1NsYXNoID0gbmV4dEF0UnVuTGVuZ3RoIDwgMFxuICAgICAgY29uc3Qgc2FmZU5leHQgPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKE1hdGguYWJzKG5leHRBdFJ1bkxlbmd0aCkpKVxuICAgICAgY29uc3QgY3VycmVudCA9IGRldGVjdFRyaWdnZXIoKVxuICAgICAgaWYgKCFjdXJyZW50LmFjdGl2ZSB8fCAhY3VycmVudC5hbmNob3IpIHJldHVyblxuXG4gICAgICBjb25zdCB7IG5vZGUsIG9mZnNldCB9ID0gY3VycmVudC5hbmNob3JcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSkgcmV0dXJuXG4gICAgICBjb25zdCB0ZXh0Tm9kZSA9IG5vZGUgYXMgVGV4dFxuICAgICAgY29uc3QgZnVsbCA9IHRleHROb2RlLmRhdGFcbiAgICAgIGNvbnN0IGN1cnJlbnRSdW5MZW4gPSBNYXRoLmFicyhjdXJyZW50LmF0UnVuTGVuZ3RoKVxuICAgICAgY29uc3QgY3VycmVudEhhc1NsYXNoID0gY3VycmVudC5hdFJ1bkxlbmd0aCA8IDBcbiAgICAgIGNvbnN0IHF1ZXJ5TGVuID0gY3VycmVudFJ1bkxlbiArIChjdXJyZW50SGFzU2xhc2ggPyAxIDogMCkgKyBjdXJyZW50LnF1ZXJ5Lmxlbmd0aFxuICAgICAgY29uc3QgYmVmb3JlID0gZnVsbC5zbGljZSgwLCBvZmZzZXQpXG4gICAgICBjb25zdCBhZnRlciA9IGZ1bGwuc2xpY2Uob2Zmc2V0ICsgcXVlcnlMZW4pXG4gICAgICBjb25zdCBuZXh0UnVuID0gbmV4dEhhc1NsYXNoID8gYCR7J0AnLnJlcGVhdChzYWZlTmV4dCl9L2AgOiAnQCcucmVwZWF0KHNhZmVOZXh0KVxuICAgICAgLy8gU2kgdmVuaW1vcyBkZWwgdGFiIHNraWxsLCBlbCBxdWVyeSB0aWVuZSAnLycgY29tbyBwcmVmaWpvIOKAlCBsaW1waWFybG8gYWwgY2FtYmlhciBkZSB0YWIuXG4gICAgICBjb25zdCBjbGVhblF1ZXJ5ID0gY3VycmVudC5xdWVyeS5zdGFydHNXaXRoKCcvJykgPyBjdXJyZW50LnF1ZXJ5LnNsaWNlKDEpIDogY3VycmVudC5xdWVyeVxuICAgICAgY29uc3QgbmV4dFZhbHVlID0gYCR7YmVmb3JlfSR7bmV4dFJ1bn0ke2NsZWFuUXVlcnl9JHthZnRlcn1gXG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgdGV4dE5vZGUuZGF0YSA9IG5leHRWYWx1ZVxuXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICAgIGNvbnN0IGNhcmV0T2Zmc2V0ID0gYmVmb3JlLmxlbmd0aCArIG5leHRSdW4ubGVuZ3RoICsgY2xlYW5RdWVyeS5sZW5ndGhcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQodGV4dE5vZGUsIE1hdGgubWluKGNhcmV0T2Zmc2V0LCB0ZXh0Tm9kZS5kYXRhLmxlbmd0aCkpXG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKVxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVwZGF0ZWQgPSBkZXRlY3RUcmlnZ2VyKClcbiAgICAgIHNldFRyaWdnZXIodXBkYXRlZClcbiAgICB9LFxuICAgIFtkZXRlY3RUcmlnZ2VyXVxuICApXG5cbiAgLyoqXG4gICAqIFJlZW1wbGF6YSBlbCBgQHF1ZXJ5YCBwZW5kaWVudGUgcG9yIHVuIGNoaXAgYXTDs21pY28gY29uIGxhIG1lbnRpb24uXG4gICAqIFJlcXVpZXJlIHF1ZSBlbCBjYWxsZXIgcHJvdmVhIGVsIERPTSBkZWwgY2hpcCAoc2UgaW5zZXJ0YSB0YWwgY3VhbCkuXG4gICAqL1xuICBjb25zdCByZXBsYWNlVHJpZ2dlcldpdGhDaGlwID0gdXNlQ2FsbGJhY2soXG4gICAgKGNoaXBOb2RlOiBIVE1MRWxlbWVudCwgbWVudGlvbjogQ29udGV4dE1lbnRpb24pID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBkZXRlY3RUcmlnZ2VyKClcbiAgICAgIGlmICghY3VycmVudC5hY3RpdmUgfHwgIWN1cnJlbnQuYW5jaG9yKSByZXR1cm5cblxuICAgICAgY29uc3QgeyBub2RlLCBvZmZzZXQgfSA9IGN1cnJlbnQuYW5jaG9yXG4gICAgICBjb25zdCB0ZXh0Tm9kZSA9IG5vZGUgYXMgVGV4dFxuICAgICAgY29uc3QgZnVsbCA9IHRleHROb2RlLmRhdGFcbiAgICAgIGNvbnN0IGN1cnJlbnRSdW5MZW4gPSBNYXRoLmFicyhjdXJyZW50LmF0UnVuTGVuZ3RoKVxuICAgICAgY29uc3QgY3VycmVudEhhc1NsYXNoID0gY3VycmVudC5hdFJ1bkxlbmd0aCA8IDBcbiAgICAgIGNvbnN0IHF1ZXJ5TGVuID0gY3VycmVudFJ1bkxlbiArIChjdXJyZW50SGFzU2xhc2ggPyAxIDogMCkgKyBjdXJyZW50LnF1ZXJ5Lmxlbmd0aFxuICAgICAgY29uc3QgYWZ0ZXIgPSBmdWxsLnNsaWNlKG9mZnNldCArIHF1ZXJ5TGVuKVxuXG4gICAgICAvLyBUcnVuY2FyIGVsIHRleHRvIGhhc3RhIGFudGVzIGRlbCBydW4gZGUgYEDigKZgXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIHRleHROb2RlLmRhdGEgPSBmdWxsLnNsaWNlKDAsIG9mZnNldClcblxuICAgICAgLy8gSW5zZXJ0YXIgZWwgY2hpcCBqdXN0byBkZXNwdcOpcyBkZWwgbm9kbyBkZSB0ZXh0b1xuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24nLCAndHJ1ZScpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi1pZCcsIFN0cmluZyhtZW50aW9uLmlkKSlcbiAgICAgIGNoaXBOb2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uLXR5cGUnLCBtZW50aW9uLnR5cGUpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi1sYWJlbCcsIG1lbnRpb24ubGFiZWwpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsICdmYWxzZScpXG5cbiAgICAgIGNvbnN0IHBhcmVudCA9IHRleHROb2RlLnBhcmVudE5vZGVcbiAgICAgIGlmICghcGFyZW50KSByZXR1cm5cblxuICAgICAgY29uc3Qgc3BhY2VOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYFxcdTAwYTAke2FmdGVyfWApXG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaXBOb2RlLCB0ZXh0Tm9kZS5uZXh0U2libGluZylcbiAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoc3BhY2VOb2RlLCBjaGlwTm9kZS5uZXh0U2libGluZylcblxuICAgICAgLy8gUmVwb3NpY2lvbmFyIGNhcmV0IGRlc3B1w6lzIGRlbCBjaGlwIChhbnRlcyBkZWwgZXNwYWNpbyBub24tYnJlYWtpbmcpXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKClcbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpXG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KHNwYWNlTm9kZSwgMSlcbiAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpXG4gICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSlcbiAgICAgIH1cblxuICAgICAgaWYgKHRleHROb2RlLmRhdGEgPT09ICcnKSB0ZXh0Tm9kZS5yZW1vdmUoKVxuXG4gICAgICBjbG9zZVRyaWdnZXIoKVxuICAgIH0sXG4gICAgW2RldGVjdFRyaWdnZXIsIGNsb3NlVHJpZ2dlcl1cbiAgKVxuXG4gIGNvbnN0IHJlcGxhY2VUcmlnZ2VyV2l0aFNsYXNoQ2hpcCA9IHVzZUNhbGxiYWNrKFxuICAgIChjaGlwTm9kZTogSFRNTEVsZW1lbnQsIHNsYXNoQ29tbWFuZDogU2xhc2hDb21tYW5kQ2hpcERhdGEpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBkZXRlY3RTbGFzaCgpXG4gICAgICBpZiAoIWN1cnJlbnQuYWN0aXZlIHx8ICFjdXJyZW50LmFuY2hvcikgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHsgbm9kZSwgb2Zmc2V0IH0gPSBjdXJyZW50LmFuY2hvclxuICAgICAgY29uc3QgdGV4dE5vZGUgPSBub2RlIGFzIFRleHRcbiAgICAgIGNvbnN0IGZ1bGwgPSB0ZXh0Tm9kZS5kYXRhXG4gICAgICBjb25zdCB0cmlnZ2VyTGVuID0gMSArIGN1cnJlbnQucXVlcnkubGVuZ3RoXG4gICAgICBjb25zdCBhZnRlciA9IGZ1bGwuc2xpY2Uob2Zmc2V0ICsgdHJpZ2dlckxlbilcblxuICAgICAgdGV4dE5vZGUuZGF0YSA9IGZ1bGwuc2xpY2UoMCwgb2Zmc2V0KVxuXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2xhc2gtY29tbWFuZCcsICd0cnVlJylcbiAgICAgIGNoaXBOb2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1zbGFzaC1pZCcsIFN0cmluZyhzbGFzaENvbW1hbmQuaWQpKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLXNsYXNoLWxhYmVsJywgc2xhc2hDb21tYW5kLmxhYmVsKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAnZmFsc2UnKVxuXG4gICAgICBjb25zdCBwYXJlbnQgPSB0ZXh0Tm9kZS5wYXJlbnROb2RlXG4gICAgICBpZiAoIXBhcmVudCkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHNwYWNlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGAgJHthZnRlcn1gKVxuICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShjaGlwTm9kZSwgdGV4dE5vZGUubmV4dFNpYmxpbmcpXG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKHNwYWNlTm9kZSwgY2hpcE5vZGUubmV4dFNpYmxpbmcpXG5cbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKClcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoc3BhY2VOb2RlLCAxKVxuICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKClcbiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKVxuICAgICAgfVxuXG4gICAgICBpZiAodGV4dE5vZGUuZGF0YSA9PT0gJycpIHRleHROb2RlLnJlbW92ZSgpXG5cbiAgICAgIGNsb3NlU2xhc2hUcmlnZ2VyKClcbiAgICB9LFxuICAgIFtkZXRlY3RTbGFzaCwgY2xvc2VTbGFzaFRyaWdnZXJdXG4gIClcblxuICAvKipcbiAgICogUmVlbXBsYXphIGVsIGAjcXVlcnlgIHBlbmRpZW50ZSBwb3IgdW4gY2hpcCBkZSBza2lsbC4gTGEgc2tpbGwgc2lndWUgdmlhamFuZG9cbiAgICogY29tbyBtZW50aW9uIChgZGF0YS1tZW50aW9uKmApIHBhcmEgcXVlIGVsIGJhY2tlbmQgbGEgcmVzdWVsdmEgcG9yIGlkLlxuICAgKi9cbiAgY29uc3QgcmVwbGFjZVRyaWdnZXJXaXRoU2tpbGxDaGlwID0gdXNlQ2FsbGJhY2soXG4gICAgKGNoaXBOb2RlOiBIVE1MRWxlbWVudCwgbWVudGlvbjogQ29udGV4dE1lbnRpb24pID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBkZXRlY3RIYXNoKClcbiAgICAgIGlmICghY3VycmVudC5hY3RpdmUgfHwgIWN1cnJlbnQuYW5jaG9yKSByZXR1cm5cblxuICAgICAgY29uc3QgeyBub2RlLCBvZmZzZXQgfSA9IGN1cnJlbnQuYW5jaG9yXG4gICAgICBjb25zdCB0ZXh0Tm9kZSA9IG5vZGUgYXMgVGV4dFxuICAgICAgY29uc3QgZnVsbCA9IHRleHROb2RlLmRhdGFcbiAgICAgIGNvbnN0IHRyaWdnZXJMZW4gPSAxICsgY3VycmVudC5xdWVyeS5sZW5ndGhcbiAgICAgIGNvbnN0IGFmdGVyID0gZnVsbC5zbGljZShvZmZzZXQgKyB0cmlnZ2VyTGVuKVxuXG4gICAgICB0ZXh0Tm9kZS5kYXRhID0gZnVsbC5zbGljZSgwLCBvZmZzZXQpXG5cbiAgICAgIGNoaXBOb2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1tZW50aW9uJywgJ3RydWUnKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24taWQnLCBTdHJpbmcobWVudGlvbi5pZCkpXG4gICAgICBjaGlwTm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWVudGlvbi10eXBlJywgbWVudGlvbi50eXBlKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdkYXRhLW1lbnRpb24tbGFiZWwnLCBtZW50aW9uLmxhYmVsKVxuICAgICAgY2hpcE5vZGUuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAnZmFsc2UnKVxuXG4gICAgICBjb25zdCBwYXJlbnQgPSB0ZXh0Tm9kZS5wYXJlbnROb2RlXG4gICAgICBpZiAoIXBhcmVudCkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHNwYWNlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGBcXHUwMGEwJHthZnRlcn1gKVxuICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShjaGlwTm9kZSwgdGV4dE5vZGUubmV4dFNpYmxpbmcpXG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKHNwYWNlTm9kZSwgY2hpcE5vZGUubmV4dFNpYmxpbmcpXG5cbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKVxuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKClcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoc3BhY2VOb2RlLCAxKVxuICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKVxuICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKClcbiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKVxuICAgICAgfVxuXG4gICAgICBpZiAodGV4dE5vZGUuZGF0YSA9PT0gJycpIHRleHROb2RlLnJlbW92ZSgpXG5cbiAgICAgIGNsb3NlSGFzaFRyaWdnZXIoKVxuICAgIH0sXG4gICAgW2RldGVjdEhhc2gsIGNsb3NlSGFzaFRyaWdnZXJdXG4gIClcblxuICBjb25zdCBzZXJpYWxpemUgPSB1c2VDYWxsYmFjaygoKToge1xuICAgIHRleHQ6IHN0cmluZ1xuICAgIG1lbnRpb25zOiBDb250ZXh0TWVudGlvbltdXG4gICAgc2xhc2hDb21tYW5kczogU2xhc2hDb21tYW5kQ2hpcERhdGFbXVxuICB9ID0+IHtcbiAgICBjb25zdCBlbCA9IGVkaXRvclJlZi5jdXJyZW50XG4gICAgaWYgKCFlbCkgcmV0dXJuIHsgdGV4dDogJycsIG1lbnRpb25zOiBbXSwgc2xhc2hDb21tYW5kczogW10gfVxuICAgIGNvbnN0IG1lbnRpb25zOiBDb250ZXh0TWVudGlvbltdID0gW11cbiAgICBjb25zdCBzbGFzaENvbW1hbmRzOiBTbGFzaENvbW1hbmRDaGlwRGF0YVtdID0gW11cbiAgICBsZXQgdGV4dCA9ICcnXG5cbiAgICBjb25zdCB3YWxrID0gKG5vZGU6IE5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICB0ZXh0ICs9IChub2RlIGFzIFRleHQpLmRhdGFcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICAgICAgY29uc3QgZWxOb2RlID0gbm9kZSBhcyBIVE1MRWxlbWVudFxuICAgICAgICBpZiAoZWxOb2RlLmRhdGFzZXQ/Lm1lbnRpb24gPT09ICd0cnVlJykge1xuICAgICAgICAgIGNvbnN0IG1lbnRpb246IENvbnRleHRNZW50aW9uID0ge1xuICAgICAgICAgICAgaWQ6IGVsTm9kZS5kYXRhc2V0Lm1lbnRpb25JZCA/PyAnJyxcbiAgICAgICAgICAgIHR5cGU6IChlbE5vZGUuZGF0YXNldC5tZW50aW9uVHlwZSBhcyBDb250ZXh0TWVudGlvblsndHlwZSddKSA/PyAndXNlcicsXG4gICAgICAgICAgICBsYWJlbDogZWxOb2RlLmRhdGFzZXQubWVudGlvbkxhYmVsID8/IGVsTm9kZS50ZXh0Q29udGVudCA/PyAnJyxcbiAgICAgICAgICB9XG4gICAgICAgICAgbWVudGlvbnMucHVzaChtZW50aW9uKVxuICAgICAgICAgIHRleHQgKz0gc2VyaWFsaXplTWVudGlvbihtZW50aW9uKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChlbE5vZGUuZGF0YXNldD8uc2xhc2hDb21tYW5kID09PSAndHJ1ZScpIHtcbiAgICAgICAgICBjb25zdCBzbGFzaDogU2xhc2hDb21tYW5kQ2hpcERhdGEgPSB7XG4gICAgICAgICAgICBpZDogZWxOb2RlLmRhdGFzZXQuc2xhc2hJZCA/PyAnJyxcbiAgICAgICAgICAgIGxhYmVsOiBlbE5vZGUuZGF0YXNldC5zbGFzaExhYmVsID8/IGVsTm9kZS50ZXh0Q29udGVudD8ucmVwbGFjZSgvXlxcLy8sICcnKSA/PyAnJyxcbiAgICAgICAgICB9XG4gICAgICAgICAgc2xhc2hDb21tYW5kcy5wdXNoKHNsYXNoKVxuICAgICAgICAgIHRleHQgKz0gc2VyaWFsaXplU2xhc2hDb21tYW5kKHNsYXNoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChlbE5vZGUudGFnTmFtZSA9PT0gJ0JSJykge1xuICAgICAgICAgIHRleHQgKz0gJ1xcbidcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBlbE5vZGUuY2hpbGROb2Rlcy5mb3JFYWNoKHdhbGspXG4gICAgICAgIGlmIChlbE5vZGUudGFnTmFtZSA9PT0gJ0RJVicgfHwgZWxOb2RlLnRhZ05hbWUgPT09ICdQJykgdGV4dCArPSAnXFxuJ1xuICAgICAgfVxuICAgIH1cblxuICAgIGVsLmNoaWxkTm9kZXMuZm9yRWFjaCh3YWxrKVxuICAgIHJldHVybiB7IHRleHQ6IHRleHQucmVwbGFjZSgvXFxuKyQvLCAnJyksIG1lbnRpb25zLCBzbGFzaENvbW1hbmRzIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgY2xlYXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGVkaXRvclJlZi5jdXJyZW50KSBlZGl0b3JSZWYuY3VycmVudC5pbm5lckhUTUwgPSAnJ1xuICAgIGNsb3NlVHJpZ2dlcigpXG4gICAgY2xvc2VTbGFzaFRyaWdnZXIoKVxuICAgIGNsb3NlSGFzaFRyaWdnZXIoKVxuICB9LCBbY2xvc2VUcmlnZ2VyLCBjbG9zZVNsYXNoVHJpZ2dlciwgY2xvc2VIYXNoVHJpZ2dlcl0pXG5cbiAgY29uc3QgZm9jdXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgfSwgW10pXG5cbiAgcmV0dXJuIHtcbiAgICBlZGl0b3JSZWYsXG4gICAgdHJpZ2dlcixcbiAgICB1cGRhdGVUcmlnZ2VyLFxuICAgIGNsb3NlVHJpZ2dlcixcbiAgICBzeW5jVHJpZ2dlckF0UnVuTGVuZ3RoLFxuICAgIHJlcGxhY2VUcmlnZ2VyV2l0aENoaXAsXG4gICAgc2xhc2hUcmlnZ2VyLFxuICAgIHVwZGF0ZVNsYXNoVHJpZ2dlcixcbiAgICBjbG9zZVNsYXNoVHJpZ2dlcixcbiAgICByZXBsYWNlVHJpZ2dlcldpdGhTbGFzaENoaXAsXG4gICAgaGFzaFRyaWdnZXIsXG4gICAgdXBkYXRlSGFzaFRyaWdnZXIsXG4gICAgY2xvc2VIYXNoVHJpZ2dlcixcbiAgICByZXBsYWNlVHJpZ2dlcldpdGhTa2lsbENoaXAsXG4gICAgc2VyaWFsaXplLFxuICAgIGNsZWFy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
|