@sapui5/sap.fe.controls 1.145.0 → 1.146.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/package.json +1 -1
- package/src/sap/fe/controls/.library +2 -2
- package/src/sap/fe/controls/AINotice.js +172 -0
- package/src/sap/fe/controls/AINotice.tsx +150 -0
- package/src/sap/fe/controls/easyFill/EasyFillPlaceholder.js +1 -1
- package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.js +41 -7
- package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.tsx +42 -6
- package/src/sap/fe/controls/easyFilter/EasyFilterInput.js +14 -10
- package/src/sap/fe/controls/easyFilter/EasyFilterInput.tsx +14 -10
- package/src/sap/fe/controls/easyFilter/ErrorMessageHandler.js +1 -1
- package/src/sap/fe/controls/easyFilter/PXFeedback.js +1 -1
- package/src/sap/fe/controls/easyFilter/ShellHistoryProvider.js +1 -1
- package/src/sap/fe/controls/easyFilter/Token.js +4 -4
- package/src/sap/fe/controls/easyFilter/Token.tsx +2 -2
- package/src/sap/fe/controls/easyFilter/innerControls/BaseFactory.js +1 -1
- package/src/sap/fe/controls/easyFilter/innerControls/CalendarFactory.js +1 -1
- package/src/sap/fe/controls/easyFilter/innerControls/MenuWithCheckBoxFactory.js +1 -1
- package/src/sap/fe/controls/easyFilter/innerControls/MenuWithSingleSelectFactory.js +1 -1
- package/src/sap/fe/controls/easyFilter/innerControls/TimeFactory.js +1 -1
- package/src/sap/fe/controls/easyFilter/innerControls/ValueHelpPreviewFactory.js +1 -1
- package/src/sap/fe/controls/easyFilter/utils.js +1 -1
- package/src/sap/fe/controls/inlineEdit/InlineEditIndicator.js +1 -1
- package/src/sap/fe/controls/library.js +2 -2
- package/src/sap/fe/controls/messagebundle.properties +14 -0
- package/src/sap/fe/controls/messagebundle_ar.properties +6 -5
- package/src/sap/fe/controls/messagebundle_bg.properties +6 -5
- package/src/sap/fe/controls/messagebundle_ca.properties +6 -5
- package/src/sap/fe/controls/messagebundle_cnr.properties +6 -5
- package/src/sap/fe/controls/messagebundle_cs.properties +6 -5
- package/src/sap/fe/controls/messagebundle_cy.properties +6 -5
- package/src/sap/fe/controls/messagebundle_da.properties +6 -5
- package/src/sap/fe/controls/messagebundle_de.properties +6 -5
- package/src/sap/fe/controls/messagebundle_el.properties +6 -5
- package/src/sap/fe/controls/messagebundle_en.properties +6 -5
- package/src/sap/fe/controls/messagebundle_en_GB.properties +6 -5
- package/src/sap/fe/controls/messagebundle_en_US_saprigi.properties +6 -5
- package/src/sap/fe/controls/messagebundle_es.properties +6 -5
- package/src/sap/fe/controls/messagebundle_es_MX.properties +6 -5
- package/src/sap/fe/controls/messagebundle_et.properties +6 -5
- package/src/sap/fe/controls/messagebundle_fi.properties +6 -5
- package/src/sap/fe/controls/messagebundle_fr.properties +6 -5
- package/src/sap/fe/controls/messagebundle_fr_CA.properties +6 -5
- package/src/sap/fe/controls/messagebundle_hi.properties +6 -5
- package/src/sap/fe/controls/messagebundle_hr.properties +6 -5
- package/src/sap/fe/controls/messagebundle_hu.properties +6 -5
- package/src/sap/fe/controls/messagebundle_id.properties +6 -5
- package/src/sap/fe/controls/messagebundle_it.properties +6 -5
- package/src/sap/fe/controls/messagebundle_iw.properties +6 -5
- package/src/sap/fe/controls/messagebundle_ja.properties +6 -5
- package/src/sap/fe/controls/messagebundle_kk.properties +6 -5
- package/src/sap/fe/controls/messagebundle_ko.properties +6 -5
- package/src/sap/fe/controls/messagebundle_lt.properties +6 -5
- package/src/sap/fe/controls/messagebundle_lv.properties +6 -5
- package/src/sap/fe/controls/messagebundle_mk.properties +6 -5
- package/src/sap/fe/controls/messagebundle_ms.properties +6 -5
- package/src/sap/fe/controls/messagebundle_nl.properties +6 -5
- package/src/sap/fe/controls/messagebundle_no.properties +6 -5
- package/src/sap/fe/controls/messagebundle_pl.properties +6 -5
- package/src/sap/fe/controls/messagebundle_pt.properties +6 -5
- package/src/sap/fe/controls/messagebundle_pt_PT.properties +6 -5
- package/src/sap/fe/controls/messagebundle_ro.properties +6 -5
- package/src/sap/fe/controls/messagebundle_ru.properties +6 -5
- package/src/sap/fe/controls/messagebundle_sh.properties +6 -5
- package/src/sap/fe/controls/messagebundle_sk.properties +6 -5
- package/src/sap/fe/controls/messagebundle_sl.properties +6 -5
- package/src/sap/fe/controls/messagebundle_sr.properties +6 -5
- package/src/sap/fe/controls/messagebundle_sv.properties +6 -5
- package/src/sap/fe/controls/messagebundle_th.properties +6 -5
- package/src/sap/fe/controls/messagebundle_tr.properties +6 -5
- package/src/sap/fe/controls/messagebundle_uk.properties +6 -5
- package/src/sap/fe/controls/messagebundle_vi.properties +6 -5
- package/src/sap/fe/controls/messagebundle_zh_CN.properties +6 -5
- package/src/sap/fe/controls/messagebundle_zh_TW.properties +6 -5
- package/src/sap/fe/controls/shortcuts/ShortcutExplanationProvider.js +1 -1
- package/src/sap/fe/controls/shortcuts/popup/ShortcutTool.js +1 -1
- package/src/sap/fe/controls/themes/base/InlineEditIndicator.less +9 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2026 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runtime/jsx", "sap/fe/controls/easyFilter/Token", "sap/m/Button", "sap/m/FlexBox", "sap/m/Popover", "sap/m/Tokenizer", "sap/m/VBox", "sap/m/library", "sap/ui/core/Control", "sap/ui/core/CustomData", "sap/ui/core/Lib", "sap/ui/core/library", "sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/controls/easyFilter/EasyFilterInput", "sap/m/HBox", "sap/m/MessageStrip", "sap/m/MessageToast", "sap/m/OverflowToolbar", "sap/m/ToggleButton", "sap/m/ToolbarSpacer", "sap/ui/core/message/MessageType", "sap/ui/model/FilterOperator", "sap/ui/performance/trace/FESRHelper", "./PXFeedback", "./utils", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/Fragment", "sap/fe/base/jsx-runtime/jsxs"], function (Log, ClassSupport, jsx, Token, Button, FlexBox, Popover, Tokenizer, VBox, library, Control, CustomData, Lib, coreLibrary, deepClone, BindingToolkit, EasyFilterInput, HBox, MessageStrip, MessageToast, OverflowToolbar, ToggleButton, ToolbarSpacer, MessageType, FilterOperator, FESRHelper, PXFeedback, EasyFilterUtils, _jsx, _Fragment, _jsxs) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runtime/jsx", "sap/fe/controls/easyFilter/Token", "sap/m/Button", "sap/m/FlexBox", "sap/m/Popover", "sap/m/Text", "sap/m/Tokenizer", "sap/m/VBox", "sap/m/library", "sap/ui/core/Control", "sap/ui/core/CustomData", "sap/ui/core/Lib", "sap/ui/core/library", "sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/controls/AINotice", "sap/fe/controls/easyFilter/EasyFilterInput", "sap/m/HBox", "sap/m/MessageStrip", "sap/m/MessageToast", "sap/m/OverflowToolbar", "sap/m/ToggleButton", "sap/m/ToolbarSpacer", "sap/ui/core/InvisibleMessage", "sap/ui/core/message/MessageType", "sap/ui/model/FilterOperator", "sap/ui/performance/trace/FESRHelper", "./PXFeedback", "./utils", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/Fragment", "sap/fe/base/jsx-runtime/jsxs"], function (Log, ClassSupport, jsx, Token, Button, FlexBox, Popover, Text, Tokenizer, VBox, library, Control, CustomData, Lib, coreLibrary, deepClone, BindingToolkit, AINotice, EasyFilterInput, HBox, MessageStrip, MessageToast, OverflowToolbar, ToggleButton, ToolbarSpacer, InvisibleMessage, MessageType, FilterOperator, FESRHelper, PXFeedback, EasyFilterUtils, _jsx, _Fragment, _jsxs) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17;
|
|
@@ -29,6 +29,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
|
|
|
29
29
|
var bindState = BindingToolkit.bindState;
|
|
30
30
|
var and = BindingToolkit.and;
|
|
31
31
|
var ValueState = coreLibrary.ValueState;
|
|
32
|
+
var InvisibleMessageMode = coreLibrary.InvisibleMessageMode;
|
|
32
33
|
var TokenizerRenderMode = library.TokenizerRenderMode;
|
|
33
34
|
var PlacementType = library.PlacementType;
|
|
34
35
|
var FlexWrap = library.FlexWrap;
|
|
@@ -92,11 +93,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
|
|
|
92
93
|
_initializerDefineProperty(_this, "afterQueryProcessing", _descriptor16, _this);
|
|
93
94
|
_initializerDefineProperty(_this, "state", _descriptor17, _this);
|
|
94
95
|
_this.shouldTokenChangeEventFired = true;
|
|
96
|
+
_this.isResettingToDefaultTokens = false;
|
|
95
97
|
_this.inputFieldReady = new Promise(resolve => {
|
|
96
98
|
_this.resolveContentReady = resolve;
|
|
97
99
|
});
|
|
98
100
|
_this.shouldMessageStripRemove = true;
|
|
99
101
|
_this.initialize();
|
|
102
|
+
_this.invisibleMessage = InvisibleMessage.getInstance();
|
|
100
103
|
return _this;
|
|
101
104
|
}
|
|
102
105
|
_exports = EasyFilterBarContainer;
|
|
@@ -246,6 +249,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
|
|
|
246
249
|
// error
|
|
247
250
|
this.removeNonMandatoryTokens();
|
|
248
251
|
this.setMessageStrip(easyFilterResult.message);
|
|
252
|
+
this.invisibleMessage.announce(this.resourceBundle.getText(easyFilterResult.message), InvisibleMessageMode.Assertive);
|
|
249
253
|
this.state.messageStripType = MessageType.Warning;
|
|
250
254
|
Log.error("Error while generating filter criteria: ", easyFilterResult.message);
|
|
251
255
|
}
|
|
@@ -426,7 +430,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
|
|
|
426
430
|
if (changedProps.includes("tokens")) {
|
|
427
431
|
if (this.shouldTokenChangeEventFired) {
|
|
428
432
|
this.fireEvent("tokensChanged", {
|
|
429
|
-
tokens: this.formatTokens(this.state.tokens)
|
|
433
|
+
tokens: this.formatTokens(this.state.tokens),
|
|
434
|
+
reset: this.isResettingToDefaultTokens
|
|
430
435
|
});
|
|
431
436
|
}
|
|
432
437
|
this.state.showResult = this.state.tokens.length > 0;
|
|
@@ -448,6 +453,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
|
|
|
448
453
|
//Resetting to default values
|
|
449
454
|
this.isMandatoryCheckRequired = false;
|
|
450
455
|
this.shouldTokenChangeEventFired = true;
|
|
456
|
+
this.isResettingToDefaultTokens = false;
|
|
451
457
|
|
|
452
458
|
// onsapfocusleave method in sap.m.Tokenizer is automatically converting the rendermode of tokenizer to "Narrow" from "loose"
|
|
453
459
|
// In this process there are multiple popover issues happening
|
|
@@ -516,6 +522,19 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
|
|
|
516
522
|
pressed: bindState(this.state, "thumbDownButtonPressed")
|
|
517
523
|
});
|
|
518
524
|
FESRHelper.setSemanticStepname(thumbDownButtonMessageStripe, "press", "fe4:eft:ms:thumbDown");
|
|
525
|
+
const resourceBundle = Lib.getResourceBundleFor("sap.fe.controls");
|
|
526
|
+
const aiNoticeControl = this.aiNotice ? this.aiNotice.clone() : _jsx(AINotice, {
|
|
527
|
+
type: "Button",
|
|
528
|
+
children: _jsxs(VBox, {
|
|
529
|
+
children: [_jsx(Text, {
|
|
530
|
+
class: "sapFeControlsAiPopoverText1",
|
|
531
|
+
text: resourceBundle.getText("M_NOTICE_AI_POPOVER_TEXT_1")
|
|
532
|
+
}), _jsx(Text, {
|
|
533
|
+
class: "sapFeControlsAiPopoverText2",
|
|
534
|
+
text: resourceBundle.getText("M_NOTICE_AI_POPOVER_TEXT_2")
|
|
535
|
+
})]
|
|
536
|
+
})
|
|
537
|
+
});
|
|
519
538
|
const outVBox = _jsxs(VBox, {
|
|
520
539
|
children: [_jsxs(FlexBox, {
|
|
521
540
|
renderType: "Bare",
|
|
@@ -551,7 +570,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
|
|
|
551
570
|
renderType: "Bare",
|
|
552
571
|
alignItems: FlexAlignItems.Center,
|
|
553
572
|
wrap: FlexWrap.Wrap,
|
|
554
|
-
children: [
|
|
573
|
+
children: [aiNoticeControl, _jsx(Tokenizer, {
|
|
555
574
|
editable: and(bindState(this.state, "tokenizerEditable"), true),
|
|
556
575
|
class: "sapFeControlsTokenizer",
|
|
557
576
|
tokens: bindState(this.state, "tokens"),
|
|
@@ -592,7 +611,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
|
|
|
592
611
|
text: this.resourceBundle.getText("M_EASY_FILTER_RESET"),
|
|
593
612
|
type: ButtonType.Transparent,
|
|
594
613
|
press: () => {
|
|
595
|
-
this.resetState();
|
|
614
|
+
this.resetState(true, true);
|
|
596
615
|
//Retaining the focus on popover doesn't make the popover close on every interaction
|
|
597
616
|
this.easyFilterInput.current?.$searchInput.focus();
|
|
598
617
|
}
|
|
@@ -641,11 +660,26 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
|
|
|
641
660
|
currentInputValue = currentInputPlaceholder;
|
|
642
661
|
}
|
|
643
662
|
await this.onGoPress(currentInputValue);
|
|
644
|
-
}
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
/**
|
|
666
|
+
* Resets the state of the EasyFilterBarContainer to its initial configuration.
|
|
667
|
+
*
|
|
668
|
+
* This method performs the following actions:
|
|
669
|
+
* - Clears all non-mandatory tokens and resets mandatory tokens to their default values
|
|
670
|
+
* - Resets the input field to its default placeholder text
|
|
671
|
+
* - Clears all error value states and messages from tokens
|
|
672
|
+
* - Clears any displayed message strips
|
|
673
|
+
* - Optionally fires the clearFilters event to notify consumers
|
|
674
|
+
* @param clearAllFilters If true, fires the clearFilters event to notify consumers that filters should be cleared else just resets the tokens without firing the event
|
|
675
|
+
* @param isResettingToDefaultTokens If true, indicates that the resetButton is restoring tokens to their default values
|
|
676
|
+
*/;
|
|
645
677
|
_proto.resetState = function resetState() {
|
|
646
678
|
let clearAllFilters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
679
|
+
let isResettingToDefaultTokens = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
647
680
|
if (clearAllFilters) {
|
|
648
681
|
this.fireEvent("clearFilters");
|
|
682
|
+
this.isResettingToDefaultTokens = isResettingToDefaultTokens;
|
|
649
683
|
} else {
|
|
650
684
|
this.shouldTokenChangeEventFired = false;
|
|
651
685
|
}
|
|
@@ -859,4 +893,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
|
|
|
859
893
|
_exports = EasyFilterBarContainer;
|
|
860
894
|
return _exports;
|
|
861
895
|
}, false);
|
|
862
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVyQmFyQ29udGFpbmVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwcm9wZXJ0eSIsInR5cGUiLCJfZGVjMyIsIl9kZWM0IiwiX2RlYzUiLCJfZGVjNiIsIl9kZWM3IiwiX2RlYzgiLCJkZWZpbmVSZWZlcmVuY2UiLCJfZGVjOSIsIl9kZWMxMCIsImFnZ3JlZ2F0aW9uIiwiX2RlYzExIiwiX2RlYzEyIiwiZXZlbnQiLCJfZGVjMTMiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJfZGVjMTciLCJfZGVjMTgiLCJkZWZpbmVTdGF0ZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbCIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJfZGVzY3JpcHRvcjEyIiwiX2Rlc2NyaXB0b3IxMyIsIl9kZXNjcmlwdG9yMTQiLCJfZGVzY3JpcHRvcjE1IiwiX2Rlc2NyaXB0b3IxNiIsIl9kZXNjcmlwdG9yMTciLCJzaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQiLCJpbnB1dEZpZWxkUmVhZHkiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlc29sdmVDb250ZW50UmVhZHkiLCJzaG91bGRNZXNzYWdlU3RyaXBSZW1vdmUiLCJpbml0aWFsaXplIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInNldEVhc3lGaWx0ZXJMaWIiLCJlYXN5RmlsdGVyTGliIiwic2V0UHJvcGVydHkiLCJlYXN5ZmlsdGVyIiwiX191aTVfcmVxdWlyZV9hc3luYyIsInNldEFwcElkIiwiYXBwSWQiLCJlYXN5RmlsdGVySW5wdXQiLCJjdXJyZW50IiwiaW5pdFNoZWxsSGlzdG9yeVByb3ZpZGVyIiwic2V0RmlsdGVyQmFyTWV0YWRhdGEiLCJmaWx0ZXJCYXJNZXRhZGF0YSIsInRva2VucyIsImdldERlZmF1bHRUb2tlbnMiLCJpbm5lckNvbnRyb2xQb3BvdmVyIiwiY3JlYXRlUG9wb3ZlckZvcklubmVyQ29udHJvbHMiLCJhZGREZXBlbmRlbnQiLCJzdGF0ZSIsInNob3dSZXN1bHQiLCJsZW5ndGgiLCJpc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQiLCJpbml0IiwicmVzb3VyY2VCdW5kbGUiLCJMaWIiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImNvbnRlbnQiLCJjcmVhdGVDb250ZW50IiwibWFuZGF0b3J5S2V5TWFwIiwiZm9yRWFjaCIsImRhdGEiLCJpc1JlcXVpcmVkIiwicmVxdWlyZWQiLCJuYW1lIiwicHVzaCIsImtleSIsImxhYmVsIiwia2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyIsImRlZmF1bHRWYWx1ZSIsImJ1c3kiLCJvbkVudGVyUHJlc3NlZCIsImUiLCJvbkdvUHJlc3MiLCJnZXRQYXJhbWV0ZXIiLCJjaGVja0lmQWxsTWFuZGF0b3J5VG9rZW5zRmlsbGVkIiwidG9rZW5zSW5TdGF0ZSIsImdldFVuU2V0TWFuZGF0b3J5VG9rZW5zSW5DdXJyZW50U3RhdGUiLCJnZXRBY3R1YWxUb2tlbnNGcm9tU3RhdGUiLCJ0b2tlbiIsIlZhbHVlU3RhdGUiLCJFcnJvciIsImdldFRleHQiLCJvcGVuVmFsdWVTdGF0ZU1lc3NhZ2UiLCJjbG9zZUFsbE1hbmRhdG9yeVZhbHVlU3RhdGVNZXNzYWdlcyIsImVhc3lUb2tlbnMiLCJ0b2tlbml6ZXIiLCJnZXRUb2tlbnMiLCJjbG9zZVZhbHVlU3RhdGVNZXNzYWdlIiwibWFnaWNRdWVyeSIsInJlc2V0U3RhdGUiLCJ0b2tlbml6ZXJFZGl0YWJsZSIsImZpcmVFdmVudCIsImVhc3lGaWx0ZXJNZXRhZGF0YSIsInZlcnNpb24iLCJlbnRpdHlTZXQiLCJjb250ZXh0UGF0aCIsImZpZWxkcyIsImVhc3lGaWx0ZXJSZXN1bHQiLCJlYXN5RmlsdGVyIiwic3VjY2VzcyIsImlzSGlzdG9yeUVuYWJsZWQiLCJhZGRSZWNlbnRRdWVyeSIsImhhbmRsZVYxU3VjY2VzcyIsInJlbW92ZU5vbk1hbmRhdG9yeVRva2VucyIsInNldE1lc3NhZ2VTdHJpcCIsIm1lc3NhZ2UiLCJtZXNzYWdlU3RyaXBUeXBlIiwiTWVzc2FnZVR5cGUiLCJXYXJuaW5nIiwiTG9nIiwiZXJyb3IiLCJmaWx0ZXIiLCJkZWJ1ZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjbGVhck1lc3NhZ2VTdHJpcCIsIkVhc3lGaWx0ZXJVdGlscyIsImZvcm1hdERhdGEiLCJiaW5kIiwiYWxsVmFsdWVIZWxwVG9rZW5zIiwicmVzdWx0IiwicmVxdWlyZWRWYWx1ZUhlbHBUb2tlbnMiLCJ2YWx1ZUhlbHBUb2tlbiIsImZpbmQiLCJsbG1SZXN1bHQiLCJkYXRhRmV0Y2hlciIsInVwZGF0ZWRUb2tlbnMiLCJrZXlTcGVjaWZpY1ZhbHVlIiwiaWR4Iiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIkJUIiwiTkIiLCJzZWxlY3RlZFZhbHVlcyIsInZhbHVlIiwiZGVzY3JpcHRpb24iLCJzdWJJbmR4IiwidmVyaWZ5U2luZ2xlU2VsZWN0VG9rZW5WYWx1ZXMiLCJ0aHVtYkJ1dHRvbkVuYWJsZWQiLCJ0aHVtYkRvd25CdXR0b25QcmVzc2VkIiwidGh1bWJVcEJ1dHRvblByZXNzZWQiLCJzaW5nbGVTZWxlY3RUb2tlbkxhYmVscyIsInNwbGljZSIsInNpbmdsZVZhbHVlTWVzc2FnZVN0cmlwVGV4dCIsImpvaW4iLCJzaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXAiLCJzaG93TWVzc2FnZVN0cmlwIiwibWVzc2FnZVN0cmlwVGV4dCIsImNsZWFyTWVzc2FnZVN0cmlwRm9yU2luZ2xlVmFsdWUiLCJ0ZXh0IiwiX2pzeCIsIlBvcG92ZXIiLCJpZCIsImdldElkIiwic2hvd0Fycm93Iiwic2hvd0hlYWRlciIsInBsYWNlbWVudCIsIlBsYWNlbWVudFR5cGUiLCJCb3R0b20iLCJjbGFzcyIsImNoaWxkcmVuIiwiZm9vdGVyIiwiZ2V0VG9vbGJhciIsInRvb2xiYXIiLCJva0J1dHRvbiIsImdldE9rQnV0dG9uIiwic2hvd0FsbEJ1dHRvbiIsImdldFNob3dBbGxCdXR0b24iLCJPdmVyZmxvd1Rvb2xiYXIiLCJfanN4cyIsIl9GcmFnbWVudCIsIlRvb2xiYXJTcGFjZXIiLCJCdXR0b24iLCJCdXR0b25UeXBlIiwiRW1waGFzaXplZCIsImZvcm1hdFRva2VucyIsIm1hcCIsInZhbCIsImRlZXBDbG9uZSIsIm9uU3RhdGVDaGFuZ2UiLCJjaGFuZ2VkUHJvcHMiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJpbmNsdWRlcyIsIm9uc2FwZm9jdXNsZWF2ZSIsIm9uVGh1bWJVcFByZXNzZWQiLCJ0cmlnZ2VyUFhJbnRlZ3JhdGlvbiIsIm9uVGh1bWJQcmVzc2VkIiwib25UaHVtYkRvd25QcmVzc2VkIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsIiR0b3BHb0J0biIsImNyZWF0ZVJlZmVyZW5jZSIsInRodW1iVXBCdXR0b25Ub2tlbml6ZXIiLCJUb2dnbGVCdXR0b24iLCJpY29uIiwidG9vbHRpcCIsInByZXNzIiwiZW5hYmxlZCIsImJpbmRTdGF0ZSIsInByZXNzZWQiLCJGRVNSSGVscGVyIiwic2V0U2VtYW50aWNTdGVwbmFtZSIsInRodW1iRG93bkJ1dHRvblRva2VuaXplciIsInRodW1iVXBCdXR0b25NZXNzYWdlU3RyaXBlIiwidGh1bWJEb3duQnV0dG9uTWVzc2FnZVN0cmlwZSIsIm91dFZCb3giLCJWQm94IiwiRmxleEJveCIsInJlbmRlclR5cGUiLCJFYXN5RmlsdGVySW5wdXQiLCJyZWNvbW1lbmRlZFZhbHVlcyIsInJlZiIsImVudGVyUHJlc3NlZCIsInF1ZXJ5Q2hhbmdlZCIsInF1ZXJ5IiwibGl2ZUNoYW5nZSIsIm9uR29CdXR0b25QcmVzcyIsInZpc2libGUiLCJhbGlnbkl0ZW1zIiwiRmxleEFsaWduSXRlbXMiLCJDZW50ZXIiLCJ3cmFwIiwiRmxleFdyYXAiLCJXcmFwIiwianVzdGlmeUNvbnRlbnQiLCJGbGV4SnVzdGlmeUNvbnRlbnQiLCJTcGFjZUJldHdlZW4iLCJhaU5vdGljZSIsImNsb25lIiwiVG9rZW5pemVyIiwiZWRpdGFibGUiLCJhbmQiLCJyZW5kZXJNb2RlIiwiVG9rZW5pemVyUmVuZGVyTW9kZSIsIkxvb3NlIiwiY3R4Iiwib2JqZWN0IiwiZ2V0T2JqZWN0IiwiVG9rZW4iLCJpdGVtcyIsIm1hbmRhdG9yeSIsImlzS2V5TWFuZGF0b3J5IiwiZGVsZXRlIiwidG9rZW5JbmRleCIsImZpbmRJbmRleCIsIm5ld1Rva2VucyIsImNvbmNhdCIsInVwZGF0ZUZpbHRlcklucHV0IiwiY3VzdG9tRGF0YSIsIkN1c3RvbURhdGEiLCJjb2RlTGlzdCIsIkhCb3giLCJUcmFuc3BhcmVudCIsIiRzZWFyY2hJbnB1dCIsImZvY3VzIiwiTWVzc2FnZVN0cmlwIiwic2hvd0ljb24iLCJlbmFibGVGb3JtYXR0ZWRUZXh0Iiwic2hvd0Nsb3NlQnV0dG9uIiwiY2xvc2UiLCJub3QiLCJjdXJyZW50SW5wdXRWYWx1ZSIsImdldFZhbHVlIiwiY3VycmVudElucHV0UGxhY2Vob2xkZXIiLCJnZXRQbGFjZWhvbGRlciIsInNldFZhbHVlIiwiY2xlYXJBbGxGaWx0ZXJzIiwiTm9uZSIsInVwZGF0ZVRva2VuQXJyYXkiLCJjaGFuZ2VUeXBlIiwibmV3VG9rZW5TcGVjaWZpY1ZhbHVlcyIsInRva2VuS2V5IiwidCIsInNldFNlbGVjdGVkVmFsdWVzIiwiY2xvc2VJbm5lckNvbnRyb2xQb3BvdmVyIiwibmV3VG9rZW4iLCJjdXJyVmFsdWUiLCJzZXRQbGFjZWhvbGRlciIsImdldFRva2Vuc0luSW5pdGlhbFN0YXRlIiwibWFuZGF0b3J5VG9rZW5zIiwicmVxdWlyZWRLZXlzIiwiZ2V0S2V5IiwicmVuZGVyIiwicm0iLCJjb250cm9sIiwianN4IiwicmVuZGVyVXNpbmdSZW5kZXJNYW5hZ2VyIiwiZ2V0QWdncmVnYXRpb24iLCJDb250cm9sIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJFYXN5RmlsdGVyQmFyQ29udGFpbmVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUsIFN0YXRlT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQge1xuXHRhZ2dyZWdhdGlvbixcblx0Y3JlYXRlUmVmZXJlbmNlLFxuXHRkZWZpbmVSZWZlcmVuY2UsXG5cdGRlZmluZVN0YXRlLFxuXHRkZWZpbmVVSTVDbGFzcyxcblx0ZXZlbnQsXG5cdHByb3BlcnR5LFxuXHR0eXBlIFByb3BlcnRpZXNPZlxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IFRva2VuIGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9Ub2tlblwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRmxleEJveCBmcm9tIFwic2FwL20vRmxleEJveFwiO1xuaW1wb3J0IFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCBUb2tlbml6ZXIgZnJvbSBcInNhcC9tL1Rva2VuaXplclwiO1xuaW1wb3J0IFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB7IEJ1dHRvblR5cGUsIEZsZXhBbGlnbkl0ZW1zLCBGbGV4SnVzdGlmeUNvbnRlbnQsIEZsZXhXcmFwLCBQbGFjZW1lbnRUeXBlLCBUb2tlbml6ZXJSZW5kZXJNb2RlIH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ3VzdG9tRGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IExpYiBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSBSZW5kZXJNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9SZW5kZXJNYW5hZ2VyXCI7XG5pbXBvcnQgeyBWYWx1ZVN0YXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5cbmltcG9ydCB0eXBlIHsgUHJpbWl0aXZlVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgeyBhbmQsIGJpbmRTdGF0ZSwgbm90IH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgRWFzeUZpbHRlcklucHV0IGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9FYXN5RmlsdGVySW5wdXRcIjtcbmltcG9ydCB0eXBlIEVhc3lGaWx0ZXJUb2tlbiBmcm9tIFwic2FwL2ZlL2NvbnRyb2xzL2Vhc3lGaWx0ZXIvVG9rZW5cIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgTWVzc2FnZVN0cmlwIGZyb20gXCJzYXAvbS9NZXNzYWdlU3RyaXBcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IE92ZXJmbG93VG9vbGJhciBmcm9tIFwic2FwL20vT3ZlcmZsb3dUb29sYmFyXCI7XG5pbXBvcnQgVG9nZ2xlQnV0dG9uIGZyb20gXCJzYXAvbS9Ub2dnbGVCdXR0b25cIjtcbmltcG9ydCBUb29sYmFyU3BhY2VyIGZyb20gXCJzYXAvbS9Ub29sYmFyU3BhY2VyXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgRkVTUkhlbHBlciBmcm9tIFwic2FwL3VpL3BlcmZvcm1hbmNlL3RyYWNlL0ZFU1JIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEVhc3lGaWx0ZXIgZnJvbSBcInV4L2VuZy9maW9yaWFpL3JldXNlL2Vhc3lmaWx0ZXIvRWFzeUZpbHRlclwiO1xuaW1wb3J0IHR5cGUgeyBFYXN5RmlsdGVyTWV0YWRhdGEsIEVhc3lGaWx0ZXJSZXN1bHQsIFByb3BlcnR5TWV0YWRhdGEgfSBmcm9tIFwidXgvZW5nL2Zpb3JpYWkvcmV1c2UvZWFzeWZpbHRlci9FYXN5RmlsdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFN1Y2Nlc3MgfSBmcm9tIFwidXgvZW5nL2Zpb3JpYWkvcmV1c2Uvc2hhcmVkXCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB7IHRyaWdnZXJQWEludGVncmF0aW9uIH0gZnJvbSBcIi4vUFhGZWVkYmFja1wiO1xuaW1wb3J0IEVhc3lGaWx0ZXJVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuXG4vL0ZvciBjdXJyZW50IHJlbGVhc2Ugd2UgYXJlIGlnbm9yaW5nIFwiQWxsXCIgYW5kIFwiQW55XCJcbi8vV2UgY2FuIGluY29ycG9yYXRlIHRoZXNlIHZhbHVlcyBpbiBmdXR1cmVcbmV4cG9ydCB0eXBlIEJldHdlZW5TZWxlY3RlZFZhbHVlcyA9IFtib29sZWFuLCBib29sZWFuXSB8IFtzdHJpbmcsIHN0cmluZ10gfCBbbnVtYmVyLCBudW1iZXJdIHwgW0RhdGUsIERhdGVdO1xuXG50eXBlIGxsbVJlc3VsdEZvclNlbGVjdGVkVmFsdWVzVHlwZSA9IHN0cmluZyB8IERhdGUgfCBib29sZWFuIHwgbnVtYmVyO1xuXG5leHBvcnQgdHlwZSBDb2RlTGlzdFR5cGUgPSB7XG5cdHZhbHVlOiBQcmltaXRpdmVUeXBlO1xuXHRkZXNjcmlwdGlvbjogbGxtUmVzdWx0Rm9yU2VsZWN0ZWRWYWx1ZXNUeXBlO1xufTtcblxuZXhwb3J0IHR5cGUgVmFsdWVIZWxwQmV0d2VlblNlbGVjdGVkVmFsdWVzID0gW0NvZGVMaXN0VHlwZSwgQ29kZUxpc3RUeXBlXTtcblxuZXhwb3J0IHR5cGUgVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uID1cblx0fCB7XG5cdFx0XHRvcGVyYXRvcjogRXhjbHVkZTxGaWx0ZXJPcGVyYXRvciwgRmlsdGVyT3BlcmF0b3IuQlQgfCBGaWx0ZXJPcGVyYXRvci5OQj47XG5cdFx0XHRzZWxlY3RlZFZhbHVlczogQ29kZUxpc3RUeXBlW107XG5cdFx0XHRub01hdGNoPzogYm9vbGVhbjtcblx0ICB9XG5cdHwge1xuXHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkJUIHwgRmlsdGVyT3BlcmF0b3IuTkI7XG5cdFx0XHRzZWxlY3RlZFZhbHVlczogVmFsdWVIZWxwQmV0d2VlblNlbGVjdGVkVmFsdWVzO1xuXHRcdFx0bm9NYXRjaD86IGJvb2xlYW47XG5cdCAgfTtcblxuLy9XZSB3aWxsIGJlIGhhbmRsaW5nIFwiQUxMXCIgYW5kIFwiQU5ZXCIgYXQgbGF0ZXIgcG9pbnQgb2YgdGltZVxuZXhwb3J0IHR5cGUgVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb24gPVxuXHR8IHtcblx0XHRcdG9wZXJhdG9yOiBFeGNsdWRlPEZpbHRlck9wZXJhdG9yLCBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CPjtcblx0XHRcdHNlbGVjdGVkVmFsdWVzOiBzdHJpbmdbXSB8IGJvb2xlYW5bXSB8IG51bWJlcltdIHwgRGF0ZVtdO1xuXHQgIH1cblx0fCB7XG5cdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuQlQgfCBGaWx0ZXJPcGVyYXRvci5OQjtcblx0XHRcdHNlbGVjdGVkVmFsdWVzOiBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXM7XG5cdCAgfTtcblxuZXhwb3J0IHR5cGUgVG9rZW5UeXBlID0gXCJNZW51V2l0aENoZWNrQm94XCIgfCBcIkNhbGVuZGFyXCIgfCBcIlRpbWVcIiB8IFwiVmFsdWVIZWxwXCIgfCBcIk1lbnVXaXRoU2luZ2xlU2VsZWN0XCI7XG5cbmV4cG9ydCB0eXBlIFZhbHVlSGVscFRva2VuRGVmaW5pdGlvbiA9IHtcblx0a2V5OiBzdHJpbmc7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdO1xuXHR0eXBlOiBcIlZhbHVlSGVscFwiO1xuXHRidXN5OiBib29sZWFuO1xuXHRpc1JlcXVpcmVkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIE5vblZhbHVlSGVscFRva2VuRGVmaW5pdGlvbiA9IHtcblx0a2V5OiBzdHJpbmc7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW107XG5cdHR5cGU6IEV4Y2x1ZGU8VG9rZW5UeXBlLCBcIlZhbHVlSGVscFwiPjtcblx0aXNSZXF1aXJlZD86IGJvb2xlYW47XG5cdGJ1c3k6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUb2tlbkRlZmluaXRpb24gPSBWYWx1ZUhlbHBUb2tlbkRlZmluaXRpb24gfCBOb25WYWx1ZUhlbHBUb2tlbkRlZmluaXRpb247XG5cbmV4cG9ydCB0eXBlIFRva2VuU2V0dGVycyA9IFwic2V0U2VsZWN0ZWRWYWx1ZXNcIjtcblxuZXhwb3J0IHR5cGUgRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGEgPSBQcm9wZXJ0eU1ldGFkYXRhICZcblx0KFxuXHRcdHwge1xuXHRcdFx0XHR0eXBlOiBcIlZhbHVlSGVscFwiO1xuXHRcdFx0XHRkZWZhdWx0VmFsdWU/OiBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXTtcblx0XHQgIH1cblx0XHR8IHtcblx0XHRcdFx0dHlwZTogRXhjbHVkZTxUb2tlblR5cGUsIFwiVmFsdWVIZWxwXCI+O1xuXHRcdFx0XHRkZWZhdWx0VmFsdWU/OiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdO1xuXHRcdCAgfVxuXHQpO1xuXG4vLyBXZSBuZWVkIHRoZSB0aGlyZCBhcmd1ZW1lbnQgYmVjYXVzZSB0aGVyZSBtaWdodCBiZSBhIGNoYW5jZSBvZiBjb21wb3NpdGUga2V5cyBzY2VuYXJpb1xudHlwZSBEYXRhRmV0Y2hlciA9IChcblx0cHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdHZhbHVlT2ZDdXJyZW50UHJvcGVydHk6IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10sXG5cdGxsbVJlc3VsdDogU3VjY2VzczxFYXN5RmlsdGVyUmVzdWx0PlxuKSA9PiBQcm9taXNlPFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdPjtcblxuaW50ZXJmYWNlIEZvY3VzSGFuZGxpbmdDb250cm9sIHtcblx0b25zYXBmb2N1c2xlYXZlPzogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgRWFzeUZpbHRlckJhckNvbnRhaW5lciRTaG93VmFsdWVIZWxwRXZlbnQgPSBVSTVFdmVudDxcblx0e1xuXHRcdGtleTogc3RyaW5nO1xuXHRcdHZhbHVlczogdW5rbm93bltdO1xuXHRcdHJlc29sdmU6ICh2YWx1ZTogVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10pID0+IHZvaWQ7XG5cdFx0cmVqZWN0OiAocmVhc29uPzogRXJyb3IpID0+IHZvaWQ7XG5cdH0sXG5cdEVhc3lGaWx0ZXJCYXJDb250YWluZXJcbj47XG5cbi8qXG4gKiBEZWxpdmVyeSBmb3IgYmV0YSByZWxlYXNlIGZvciB0aGUgZWFzeSBmaWx0ZXIgZmVhdHVyZS5cbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvbnRyb2xzLmVhc3lGaWx0ZXIuRWFzeUZpbHRlckJhckNvbnRhaW5lclwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWFzeUZpbHRlckJhckNvbnRhaW5lciBleHRlbmRzIENvbnRyb2wge1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0YXBwSWQ/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRlYXN5RmlsdGVyTGliPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYXJyYXlcIiB9KVxuXHRmaWx0ZXJCYXJNZXRhZGF0YT86IEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhW107XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJhcnJheVwiIH0pXG5cdHJlY29tbWVuZGVkVmFsdWVzPzogc3RyaW5nW107XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJmdW5jdGlvblwiIH0pXG5cdGRhdGFGZXRjaGVyPzogRGF0YUZldGNoZXI7XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdGVhc3lGaWx0ZXJJbnB1dCE6IFJlZjxFbmhhbmNlV2l0aFVJNTxFYXN5RmlsdGVySW5wdXQ+PjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0dG9rZW5pemVyITogUmVmPFRva2VuaXplcj47XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5Db250cm9sXCIgfSlcblx0Y29udGVudD86IENvbnRyb2w7XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5Db250cm9sXCIgfSlcblx0YWlOb3RpY2U/OiBDb250cm9sO1xuXG5cdEBldmVudCgpXG5cdHRva2Vuc0NoYW5nZWQ/OiBFdmVudEhhbmRsZXI8VUk1RXZlbnQ8eyB0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdIH0sIEVhc3lGaWx0ZXJCYXJDb250YWluZXI+PjtcblxuXHRAZXZlbnQoKVxuXHRxdWVyeUNoYW5nZWQ/OiBFdmVudEhhbmRsZXI8VUk1RXZlbnQ8eyBxdWVyeTogc3RyaW5nIH0sIEVhc3lGaWx0ZXJCYXJDb250YWluZXI+PjtcblxuXHRAZXZlbnQoKVxuXHRzaG93VmFsdWVIZWxwPzogRXZlbnRIYW5kbGVyPEVhc3lGaWx0ZXJCYXJDb250YWluZXIkU2hvd1ZhbHVlSGVscEV2ZW50PjtcblxuXHRAZXZlbnQoKVxuXHRjbGVhckZpbHRlcnM/OiBFdmVudEhhbmRsZXI7XG5cblx0QGV2ZW50KClcblx0YmVmb3JlUXVlcnlQcm9jZXNzaW5nPzogRXZlbnRIYW5kbGVyO1xuXG5cdEBldmVudCgpXG5cdGFmdGVyUXVlcnlQcm9jZXNzaW5nPzogRXZlbnRIYW5kbGVyO1xuXG5cdHByaXZhdGUgcmVzb3VyY2VCdW5kbGUhOiBSZXNvdXJjZUJ1bmRsZTtcblxuXHRAZGVmaW5lU3RhdGUoKVxuXHRwcm90ZWN0ZWQgc3RhdGU6IFN0YXRlT2Y8e1xuXHRcdHNob3dSZXN1bHQ6IGJvb2xlYW47XG5cdFx0dG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXTtcblx0XHR0b2tlbml6ZXJFZGl0YWJsZTogYm9vbGVhbjtcblx0XHRzaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXA/OiBib29sZWFuO1xuXHRcdHNpbmdsZVZhbHVlTWVzc2FnZVN0cmlwVGV4dD86IHN0cmluZztcblx0XHRtZXNzYWdlU3RyaXBUZXh0Pzogc3RyaW5nO1xuXHRcdHNob3dNZXNzYWdlU3RyaXA/OiBib29sZWFuO1xuXHRcdG1lc3NhZ2VTdHJpcFR5cGU6IE1lc3NhZ2VUeXBlO1xuXHRcdHRodW1iQnV0dG9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHR0aHVtYlVwQnV0dG9uUHJlc3NlZDogYm9vbGVhbjtcblx0XHR0aHVtYkRvd25CdXR0b25QcmVzc2VkOiBib29sZWFuO1xuXHR9PiA9IHtcblx0XHRzaG93UmVzdWx0OiBmYWxzZSxcblx0XHR0b2tlbnM6IFtdIGFzIFRva2VuRGVmaW5pdGlvbltdLFxuXHRcdHRva2VuaXplckVkaXRhYmxlOiB0cnVlLFxuXHRcdHNob3dTaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcDogZmFsc2UsXG5cdFx0c2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBUZXh0OiBcIlwiLFxuXHRcdG1lc3NhZ2VTdHJpcFRleHQ6IFwiXCIsXG5cdFx0c2hvd01lc3NhZ2VTdHJpcDogZmFsc2UsXG5cdFx0bWVzc2FnZVN0cmlwVHlwZTogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFx0dGh1bWJCdXR0b25FbmFibGVkOiB0cnVlLFxuXHRcdHRodW1iVXBCdXR0b25QcmVzc2VkOiBmYWxzZSxcblx0XHR0aHVtYkRvd25CdXR0b25QcmVzc2VkOiBmYWxzZVxuXHR9O1xuXG5cdHByaXZhdGUgaW5uZXJDb250cm9sUG9wb3Zlcj86IFBvcG92ZXI7XG5cblx0cHJpdmF0ZSBva0J1dHRvbj86IEJ1dHRvbjtcblxuXHRwcml2YXRlIHNob3dBbGxCdXR0b24/OiBCdXR0b247XG5cblx0cHJpdmF0ZSB0b29sYmFyPzogT3ZlcmZsb3dUb29sYmFyO1xuXG5cdHByaXZhdGUgbWFuZGF0b3J5S2V5TWFwPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG5cblx0Ly9JZiBzZXQgdG8gdHJ1ZSB0aGUgZXJyb3Igc3RhdGUgY2FuIGJlIHNlZW4gb24gdGhlIHRva2Vuc1xuXHRwcml2YXRlIGlzTWFuZGF0b3J5Q2hlY2tSZXF1aXJlZD86IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBzaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQgPSB0cnVlO1xuXG5cdGVhc3lmaWx0ZXI/OiBQcm9taXNlPHR5cGVvZiBFYXN5RmlsdGVyIHwgdW5kZWZpbmVkPjtcblxuXHRwcml2YXRlIHJlc29sdmVDb250ZW50UmVhZHkhOiAoKSA9PiB2b2lkO1xuXG5cdHByaXZhdGUgaW5wdXRGaWVsZFJlYWR5OiBQcm9taXNlPHZvaWQ+ID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHR0aGlzLnJlc29sdmVDb250ZW50UmVhZHkgPSByZXNvbHZlO1xuXHR9KTtcblxuXHRwcml2YXRlIHNob3VsZE1lc3NhZ2VTdHJpcFJlbW92ZSA9IHRydWU7XG5cblx0Y29uc3RydWN0b3IocHJvcGVydGllczogc3RyaW5nIHwgKCRDb250cm9sU2V0dGluZ3MgJiBQcm9wZXJ0aWVzT2Y8RWFzeUZpbHRlckJhckNvbnRhaW5lcj4pLCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcyBhcyBzdHJpbmcsIG90aGVycyk7XG5cdFx0dGhpcy5pbml0aWFsaXplKCk7XG5cdH1cblxuXHRzZXRFYXN5RmlsdGVyTGliKGVhc3lGaWx0ZXJMaWI6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJlYXN5RmlsdGVyTGliXCIsIGVhc3lGaWx0ZXJMaWIpO1xuXHRcdGlmICh0aGlzLmVhc3lGaWx0ZXJMaWIpIHtcblx0XHRcdHRoaXMuZWFzeWZpbHRlciA9IGltcG9ydCh0aGlzLmVhc3lGaWx0ZXJMaWIpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIHNldEFwcElkKGFwcElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIXRoaXMuYXBwSWQpIHtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJhcHBJZFwiLCBhcHBJZCwgdHJ1ZSk7XG5cdFx0XHRhd2FpdCB0aGlzLmlucHV0RmllbGRSZWFkeTtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFByb3BlcnR5KFwiYXBwSWRcIiwgYXBwSWQsIHRydWUpO1xuXHRcdFx0YXdhaXQgdGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uaW5pdFNoZWxsSGlzdG9yeVByb3ZpZGVyKCk7XG5cdFx0fVxuXHR9XG5cblx0c2V0RmlsdGVyQmFyTWV0YWRhdGEoZmlsdGVyQmFyTWV0YWRhdGE6IEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhW10pOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuZmlsdGVyQmFyTWV0YWRhdGEpIHtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJmaWx0ZXJCYXJNZXRhZGF0YVwiLCBmaWx0ZXJCYXJNZXRhZGF0YSwgdHJ1ZSk7XG5cdFx0XHQvLyBwb3B1bGF0ZSB0aGUgdG9rZW5zIHdpdGggZGVmYXVsdCB2YWx1ZVxuXHRcdFx0Y29uc3QgdG9rZW5zID0gdGhpcy5nZXREZWZhdWx0VG9rZW5zKCk7XG5cdFx0XHRpZiAoIXRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcikge1xuXHRcdFx0XHR0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIgPSB0aGlzLmNyZWF0ZVBvcG92ZXJGb3JJbm5lckNvbnRyb2xzKCk7XG5cdFx0XHRcdHRoaXMuYWRkRGVwZW5kZW50KHRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcik7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnN0YXRlLnRva2VucyA9IHRva2Vucztcblx0XHRcdHRoaXMuc3RhdGUuc2hvd1Jlc3VsdCA9IHRva2Vucy5sZW5ndGggPiAwO1xuXHRcdFx0Ly8vV2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IGVycm9yIHZhbHVlU3RhdGVNZXNzYWdlIGFzIHNvb24gdGhlIGNvbnRyb2wgcmVuZGVyc1xuXHRcdFx0dGhpcy5pc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQgPSB0cnVlO1xuXHRcdFx0Ly9vblRva2VuQ2hhbmdlIGV2ZW50IHNob3VsZCBub3QgYmUgZmlyZWQgd2hlbiBpbml0aWFsIHNldCBvZiB0b2tlbnMgYXJlIHNldFxuXHRcdFx0dGhpcy5zaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdHRoaXMucmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29udHJvbHNcIikhO1xuXHR9XG5cblx0aW5pdGlhbGl6ZSgpOiB2b2lkIHtcblx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0XHR0aGlzLnJlc29sdmVDb250ZW50UmVhZHkoKTtcblx0XHRpZiAoIXRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcikge1xuXHRcdFx0dGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyID0gdGhpcy5jcmVhdGVQb3BvdmVyRm9ySW5uZXJDb250cm9scygpO1xuXHRcdFx0dGhpcy5hZGREZXBlbmRlbnQodGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyKTtcblx0XHR9XG5cdFx0Ly9XZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgZXJyb3IgdmFsdWVTdGF0ZU1lc3NhZ2UgYXMgc29vbiB0aGUgY29udHJvbCByZW5kZXJzXG5cdFx0dGhpcy5pc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQgPSB0cnVlO1xuXHRcdC8vb25Ub2tlbkNoYW5nZSBldmVudCBzaG91bGQgbm90IGJlIGZpcmVkIHdoZW4gaW5pdGlhbCBzZXQgb2YgdG9rZW5zIGFyZSBzZXRcblx0XHR0aGlzLnNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IGZhbHNlO1xuXHR9XG5cblx0Ly8gVGhpcyBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgYmVmb3JlIHVwZGF0aW5nIHRoZSBzdGF0ZSwgb25jZSB0aGUgc3RhdGUgaXMgdXBkYXRlZCB0aGUgcHJldmlvdXMgb3ZlcnJpZGRlbiBkZWZhdWx0IHZhbHVlcyB3b3VsZCBiZSBnb25lIGZvcmV2ZXJcblx0Z2V0RGVmYXVsdFRva2VucygpOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0Y29uc3QgdG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXSA9IFtdO1xuXHRcdGlmICghdGhpcy5tYW5kYXRvcnlLZXlNYXApIHtcblx0XHRcdHRoaXMubWFuZGF0b3J5S2V5TWFwID0ge307XG5cdFx0fVxuXHRcdHRoaXMuZmlsdGVyQmFyTWV0YWRhdGE/LmZvckVhY2goKGRhdGEpID0+IHtcblx0XHRcdGNvbnN0IGlzUmVxdWlyZWQgPSBkYXRhLnJlcXVpcmVkO1xuXHRcdFx0aWYgKGlzUmVxdWlyZWQpIHtcblx0XHRcdFx0KHRoaXMubWFuZGF0b3J5S2V5TWFwIGFzIFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+KVtkYXRhLm5hbWVdID0gdHJ1ZTtcblx0XHRcdFx0Ly9DaGVjayB3aGV0aGVyIHRoZSBrZXlzIGV4aXN0IGluIHRoZSBjdXJyZW50IHN0YXRlIGVsc2UgcHVzaCBpdCBhY3Jvc3Ncblx0XHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJWYWx1ZUhlbHBcIikge1xuXHRcdFx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0XHRcdGtleTogZGF0YS5uYW1lLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGRhdGEubGFiZWwgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogKGRhdGEuZGVmYXVsdFZhbHVlIGFzIFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdKSA/PyBbXSxcblx0XHRcdFx0XHRcdHR5cGU6IGRhdGEudHlwZSxcblx0XHRcdFx0XHRcdGJ1c3k6IGZhbHNlLFxuXHRcdFx0XHRcdFx0aXNSZXF1aXJlZFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0XHRcdGtleTogZGF0YS5uYW1lLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGRhdGEubGFiZWwgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogKGRhdGEuZGVmYXVsdFZhbHVlIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10pID8/IFtdLFxuXHRcdFx0XHRcdFx0dHlwZTogZGF0YS50eXBlLFxuXHRcdFx0XHRcdFx0YnVzeTogZmFsc2UsXG5cdFx0XHRcdFx0XHRpc1JlcXVpcmVkXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gdG9rZW5zO1xuXHR9XG5cblx0b25FbnRlclByZXNzZWQoZTogVUk1RXZlbnQ8eyBxdWVyeTogc3RyaW5nIH0sIEVhc3lGaWx0ZXJJbnB1dD4pOiB2b2lkIHtcblx0XHR0aGlzLm9uR29QcmVzcyhlLmdldFBhcmFtZXRlcihcInF1ZXJ5XCIpKTtcblx0fVxuXG5cdC8vTWFraW5nIGl0IHB1YmxpYyBiZWNhdXNlIGluIGxpdmUgbW9kZSB0aGUgYXBwIGRldmVsb3BlciBjYW4gZGVjaWRlIHdoZXRoZXIgdG8gZGlzcGxheSB0aGUgZXJyb3IgVmFsdWVTdGF0ZU1lc3NhZ2Vcblx0Ly9JbiBub24tbGl2ZSBtb2RlICwgd2UgYXJlIGFscmVhZHkgaW50ZXJuYWxseSBoYW5kbGluZyBpdCBvbiBldmVyeSB0aW1lIHRpbWUgYSB1c2VyIGNsaWNrcyBvbiBHTy9FbnRlciBidXR0b25zXG5cdHB1YmxpYyBjaGVja0lmQWxsTWFuZGF0b3J5VG9rZW5zRmlsbGVkKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHRva2Vuc0luU3RhdGUgPSB0aGlzLmdldFVuU2V0TWFuZGF0b3J5VG9rZW5zSW5DdXJyZW50U3RhdGUoKTtcblx0XHRpZiAodG9rZW5zSW5TdGF0ZS5sZW5ndGggIT09IDApIHtcblx0XHRcdGNvbnN0IHRva2VucyA9IHRoaXMuZ2V0QWN0dWFsVG9rZW5zRnJvbVN0YXRlKHRva2Vuc0luU3RhdGUpO1xuXHRcdFx0dG9rZW5zPy5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0XHR0b2tlbi5zZXRQcm9wZXJ0eShcInZhbHVlU3RhdGVcIiwgVmFsdWVTdGF0ZS5FcnJvcik7XG5cdFx0XHRcdHRva2VuLnNldFByb3BlcnR5KFwidmFsdWVTdGF0ZVRleHRcIiwgdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9NQU5EQVRPUllfVE9LRU5fRVJST1JcIikpO1xuXHRcdFx0XHR0b2tlbi5vcGVuVmFsdWVTdGF0ZU1lc3NhZ2UoKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHB1YmxpYyBjbG9zZUFsbE1hbmRhdG9yeVZhbHVlU3RhdGVNZXNzYWdlcygpOiB2b2lkIHtcblx0XHRjb25zdCBlYXN5VG9rZW5zID0gdGhpcy50b2tlbml6ZXIuY3VycmVudD8uZ2V0VG9rZW5zKCkgYXMgRWFzeUZpbHRlclRva2VuW107XG5cdFx0ZWFzeVRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4gdG9rZW4uY2xvc2VWYWx1ZVN0YXRlTWVzc2FnZSgpKTtcblx0fVxuXG5cdGFzeW5jIG9uR29QcmVzcyhtYWdpY1F1ZXJ5OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIW1hZ2ljUXVlcnkpIHtcblx0XHRcdHRoaXMucmVzZXRTdGF0ZSgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLnN0YXRlLnRva2VuaXplckVkaXRhYmxlID0gdHJ1ZTtcblxuXHRcdC8vIENhbGwgQUkgc2VydmljZSB0byBnZXQgdGhlIGZpbHRlciBjcml0ZXJpYVxuXHRcdGNvbnN0IGVhc3lmaWx0ZXIgPSBhd2FpdCB0aGlzLmVhc3lmaWx0ZXI7XG5cdFx0aWYgKCFlYXN5ZmlsdGVyKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuZmlyZUV2ZW50KFwiYmVmb3JlUXVlcnlQcm9jZXNzaW5nXCIpO1xuXG5cdFx0Y29uc3QgZWFzeUZpbHRlck1ldGFkYXRhOiBFYXN5RmlsdGVyTWV0YWRhdGEgPSB7XG5cdFx0XHR2ZXJzaW9uOiAxLFxuXHRcdFx0ZW50aXR5U2V0OiB0aGlzLmNvbnRleHRQYXRoLFxuXHRcdFx0ZmllbGRzOiB0aGlzLmZpbHRlckJhck1ldGFkYXRhIGFzIEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhW11cblx0XHR9O1xuXG5cdFx0Y29uc3QgZWFzeUZpbHRlclJlc3VsdCA9IGF3YWl0IGVhc3lmaWx0ZXIuZWFzeUZpbHRlcihtYWdpY1F1ZXJ5LCBlYXN5RmlsdGVyTWV0YWRhdGEpO1xuXG5cdFx0Ly9XZSBzaG91bGQgbm90IGNoYW5nZSB0aGUgbWVzc2FnZSBzdHJpcCBmb3IgdGhlIGZpcnN0IHRpbWUgd2hlbiB0aGUgR08gYnV0dG9uIGlzIHByZXNzZWQsIGJlY2F1c2UgaXQgaGFzIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIGluIHRoZSBFYXN5RmlsdGVyVXRpbHMuZm9ybWF0RGF0YSBtZXRob2Rcblx0XHR0aGlzLnNob3VsZE1lc3NhZ2VTdHJpcFJlbW92ZSA9IGZhbHNlO1xuXHRcdGlmIChlYXN5RmlsdGVyUmVzdWx0LnN1Y2Nlc3MpIHtcblx0XHRcdC8vT25seSBhZGQgdGhlIHJlY2VudCBxdWVyeSB3aGVuIHRoZSBjYWxsIGlzIHN1Y2Nlc3Ncblx0XHRcdC8vRG8gbm90IHRyYWNrIHRoZSByZWNlbnQgcXVlcmllcyB3aGVuIHRoZSBpc0hpc3RvcnlFbmFibGVkIGlzIHNldCB0byBmYWxzZVxuXHRcdFx0Ly9JdCB3b3VsZCBiZSBhIHZpb2xhdGlvbiB0byB1c2VycyBwcml2YWN5XG5cdFx0XHRpZiAodGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uaXNIaXN0b3J5RW5hYmxlZCgpID8/IGZhbHNlKSB7XG5cdFx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmFkZFJlY2VudFF1ZXJ5KG1hZ2ljUXVlcnkpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS52ZXJzaW9uID09PSAxKSB7XG5cdFx0XHRcdHRoaXMuaGFuZGxlVjFTdWNjZXNzKGVhc3lGaWx0ZXJSZXN1bHQpO1xuXHRcdFx0fSBlbHNlIGlmIChlYXN5RmlsdGVyUmVzdWx0LmRhdGEudmVyc2lvbiA9PT0gMikge1xuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIHNhcC51aS5tb2RlbC5GaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIGFuZCBhcHBseSBpdCBkaXJlY3RseSB0byB0aGUgbGlzdCBiaW5kaW5nXG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGVycm9yXG5cdFx0XHR0aGlzLnJlbW92ZU5vbk1hbmRhdG9yeVRva2VucygpO1xuXHRcdFx0dGhpcy5zZXRNZXNzYWdlU3RyaXAoZWFzeUZpbHRlclJlc3VsdC5tZXNzYWdlKTtcblx0XHRcdHRoaXMuc3RhdGUubWVzc2FnZVN0cmlwVHlwZSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBnZW5lcmF0aW5nIGZpbHRlciBjcml0ZXJpYTogXCIsIGVhc3lGaWx0ZXJSZXN1bHQubWVzc2FnZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5maXJlRXZlbnQoXCJhZnRlclF1ZXJ5UHJvY2Vzc2luZ1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBzdWNjZXNzIHJlc3BvbnNlIGZyb20gdGhlIEFJIHNlcnZpY2UgZm9yIHZlcnNpb24gMSBvZiB0aGUgZWFzeSBmaWx0ZXIuXG5cdCAqIEBwYXJhbSBlYXN5RmlsdGVyUmVzdWx0IFRoZSByZXN1bHQgZnJvbSB0aGUgQUkgc2VydmljZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBoYW5kbGVWMVN1Y2Nlc3MoZWFzeUZpbHRlclJlc3VsdDogU3VjY2VzczxFYXN5RmlsdGVyLkVhc3lGaWx0ZXJSZXN1bHQ+KTogdm9pZCB7XG5cdFx0aWYgKGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5maWx0ZXIpIHtcblx0XHRcdC8vIFdlIG5lZWQgdG8gc2hvdyBhIG1lc3NhZ2UgdG8gdGhlIHVzZXIgdGhhdCB0aGUgZmlsdGVyIGNyaXRlcmlhIGhhcyBiZWVuIGdlbmVyYXRlZFxuXHRcdFx0TG9nLmRlYnVnKFwiRmlsdGVyIGNyaXRlcmlhIGdlbmVyYXRlZDogXCIsIEpTT04uc3RyaW5naWZ5KGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5maWx0ZXIsIG51bGwsIDIpKTtcblxuXHRcdFx0Y29uc3QgdG9rZW5zID0gWy4uLnRoaXMuc3RhdGUudG9rZW5zXS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5pc1JlcXVpcmVkKTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGhlIHByZXZpb3VzIG1lc3NhZ2Ugc3RyaXAgZm9yIHZhbGlkYXRlZCBmaWx0ZXJzXG5cdFx0XHR0aGlzLmNsZWFyTWVzc2FnZVN0cmlwKCk7XG5cblx0XHRcdC8vIFZhbGlkYXRlIGFuZCBhcHBseSB0aGUgZmlsdGVyIGNyaXRlcmlhXG5cdFx0XHRFYXN5RmlsdGVyVXRpbHMuZm9ybWF0RGF0YShcblx0XHRcdFx0dG9rZW5zLFxuXHRcdFx0XHRlYXN5RmlsdGVyUmVzdWx0LmRhdGEuZmlsdGVyLFxuXHRcdFx0XHR0aGlzLmZpbHRlckJhck1ldGFkYXRhIGFzIEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhW10sXG5cdFx0XHRcdHRoaXMuc2V0TWVzc2FnZVN0cmlwLmJpbmQodGhpcylcblx0XHRcdCk7XG5cblx0XHRcdC8vV2Ugb25seSBoYXZlIHRvIGNhbGwgdGhlIGRhdGFGZXRjaGVyIG9uIHRoZSBWSCB0b2tlbnMgd2hpY2ggaGF2ZSBiZWVuIGFza2VkIGJ5IHRoZSB1c2VyXG5cdFx0XHQvL0luIE1hZG5hdG9yeSB0b2tlbnMgY2FzZSB0aGUgZGVmYXVsdFZhbHVlcyBhcmUgYWxyZWFkeSBnaXZlbiwgc28gbm8gbmVlZCB0byBjYWxsIGRhdGFGZXRjaGVyIG9uIGl0XG5cblx0XHRcdGNvbnN0IGFsbFZhbHVlSGVscFRva2VucyA9IHRva2Vucy5maWx0ZXIoKHJlc3VsdCkgPT4gcmVzdWx0LnR5cGUgPT09IFwiVmFsdWVIZWxwXCIpO1xuXHRcdFx0Y29uc3QgcmVxdWlyZWRWYWx1ZUhlbHBUb2tlbnMgPSBhbGxWYWx1ZUhlbHBUb2tlbnMuZmlsdGVyKCh2YWx1ZUhlbHBUb2tlbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZWFzeUZpbHRlclJlc3VsdC5kYXRhLmZpbHRlcj8uZmluZCgobGxtUmVzdWx0KSA9PiBsbG1SZXN1bHQubmFtZSA9PT0gdmFsdWVIZWxwVG9rZW4ua2V5KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAodGhpcy5kYXRhRmV0Y2hlcikge1xuXHRcdFx0XHQocmVxdWlyZWRWYWx1ZUhlbHBUb2tlbnMgYXMgdW5rbm93biBhcyBWYWx1ZUhlbHBUb2tlbkRlZmluaXRpb25bXSkuZm9yRWFjaChhc3luYyAodmFsdWVIZWxwVG9rZW4pID0+IHtcblx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmRhdGFGZXRjaGVyPy4oXG5cdFx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXksXG5cdFx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzIGFzIHVua25vd24gYXMgVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSxcblx0XHRcdFx0XHRcdGVhc3lGaWx0ZXJSZXN1bHRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmJ1c3kgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRcdFx0XHQvL1dlIHNob3VsZCBub3QgY2hhbmdlIHRoZSBtZXNzYWdlIHN0cmlwIGZvciB0aGUgZmlyc3QgdGltZSB3aGVuIHRoZSBHTyBidXR0b24gaXMgcHJlc3NlZCwgYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIGNhbGN1bGF0ZWQgaW4gdGhlIEVhc3lGaWx0ZXJVdGlscy5mb3JtYXREYXRhIG1ldGhvZFxuXHRcdFx0XHRcdFx0dGhpcy5zaG91bGRNZXNzYWdlU3RyaXBSZW1vdmUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgPSByZXN1bHQ7XG5cdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSB1cGRhdGVkVG9rZW5zO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL0lmIGRhdGFGZXRjaGVyIGlzIG5vdCB0aGVyZSwgdGhlbiBtb2NrIHRoZSB2YWx1ZSBhbmQgZGVzY3JpcHRpb24gd2l0aCB0aGUgc2FtZSByZXN1bHQgY29taW5nIGZyb20gdGhlIExMTVxuXHRcdFx0XHRyZXF1aXJlZFZhbHVlSGVscFRva2Vucy5mb3JFYWNoKCh2YWx1ZUhlbHBUb2tlbikgPT4ge1xuXHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmJ1c3kgPSBmYWxzZTtcblx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzLmZvckVhY2goKGtleVNwZWNpZmljVmFsdWUsIGlkeCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGtleVNwZWNpZmljVmFsdWUub3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLkJUIHx8IGtleVNwZWNpZmljVmFsdWUub3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLk5CKSB7XG5cdFx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNbaWR4XS5zZWxlY3RlZFZhbHVlcyA9IFtcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZToga2V5U3BlY2lmaWNWYWx1ZS5zZWxlY3RlZFZhbHVlc1swXSxcblx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBrZXlTcGVjaWZpY1ZhbHVlLnNlbGVjdGVkVmFsdWVzWzBdIGFzIHVua25vd24gYXMgbGxtUmVzdWx0Rm9yU2VsZWN0ZWRWYWx1ZXNUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZToga2V5U3BlY2lmaWNWYWx1ZS5zZWxlY3RlZFZhbHVlc1sxXSxcblx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBrZXlTcGVjaWZpY1ZhbHVlLnNlbGVjdGVkVmFsdWVzWzFdIGFzIHVua25vd24gYXMgbGxtUmVzdWx0Rm9yU2VsZWN0ZWRWYWx1ZXNUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc1tpZHhdLnNlbGVjdGVkVmFsdWVzLmZvckVhY2goKHZhbHVlLCBzdWJJbmR4KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc1tpZHhdLnNlbGVjdGVkVmFsdWVzW3N1YkluZHhdID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogdmFsdWUgYXMgdW5rbm93biBhcyBsbG1SZXN1bHRGb3JTZWxlY3RlZFZhbHVlc1R5cGVcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHVwZGF0ZWRUb2tlbnMgPSB0aGlzLnZlcmlmeVNpbmdsZVNlbGVjdFRva2VuVmFsdWVzKHRva2Vucyk7XG5cdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSB0cnVlO1xuXHRcdFx0dGhpcy5zdGF0ZS50aHVtYkJ1dHRvbkVuYWJsZWQgPSB0cnVlO1xuXHRcdFx0dGhpcy5zdGF0ZS50aHVtYkRvd25CdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0XHR0aGlzLnN0YXRlLnRodW1iVXBCdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0XHR0aGlzLnN0YXRlLnRva2VucyA9IHVwZGF0ZWRUb2tlbnM7XG5cdFx0fVxuXHR9XG5cblx0Ly9ldmVyeSBzaW5nbGUgc2VsZWN0IG1lbnUgdHlwZSBzaG91bGQgaGF2ZSBvbmx5IG9uZSB2YWx1ZSwgZWxzZSBzcGxpY2UgdG8gb25lIHZhbHVlIGFuZCB1cGRhdGUgdGhlICBtZXNzYWdlIHN0cmlwXG5cdHZlcmlmeVNpbmdsZVNlbGVjdFRva2VuVmFsdWVzKHRva2VuczogVG9rZW5EZWZpbml0aW9uW10pOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0Y29uc3Qgc2luZ2xlU2VsZWN0VG9rZW5MYWJlbHM6IHN0cmluZ1tdID0gW107XG5cdFx0dG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRpZiAodG9rZW4udHlwZSA9PT0gXCJNZW51V2l0aFNpbmdsZVNlbGVjdFwiKSB7XG5cdFx0XHRcdGlmICh0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzWzBdLnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRzaW5nbGVTZWxlY3RUb2tlbkxhYmVscy5wdXNoKHRva2VuLmxhYmVsKTtcblx0XHRcdFx0XHR0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzWzBdLnNlbGVjdGVkVmFsdWVzLnNwbGljZSgxKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChzaW5nbGVTZWxlY3RUb2tlbkxhYmVscy5sZW5ndGgpIHtcblx0XHRcdHRoaXMuc3RhdGUuc2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBUZXh0ID0gdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9TSU5HTEVfVkFMVUVfTUVTU0FHRVwiLCBbXG5cdFx0XHRcdGA8c3Ryb25nPiR7c2luZ2xlU2VsZWN0VG9rZW5MYWJlbHMuam9pbihcIiwgXCIpfTwvc3Ryb25nPmBcblx0XHRcdF0pO1xuXHRcdFx0dGhpcy5zdGF0ZS5zaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXAgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gdG9rZW5zO1xuXHR9XG5cblx0Y2xlYXJNZXNzYWdlU3RyaXAoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYkRvd25CdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYlVwQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUuc2hvd01lc3NhZ2VTdHJpcCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUubWVzc2FnZVN0cmlwVGV4dCA9IFwiXCI7XG5cdFx0dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUeXBlID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH1cblxuXHRjbGVhck1lc3NhZ2VTdHJpcEZvclNpbmdsZVZhbHVlKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUuc2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS5zaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQgPSBcIlwiO1xuXHR9XG5cblx0c2V0TWVzc2FnZVN0cmlwKHRleHQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUudGh1bWJEb3duQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUudGh1bWJVcEJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLnRodW1iQnV0dG9uRW5hYmxlZCA9IHRydWU7XG5cdFx0dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUZXh0ID0gdGV4dDtcblx0XHR0aGlzLnN0YXRlLnNob3dNZXNzYWdlU3RyaXAgPSB0cnVlO1xuXHR9XG5cblx0Y3JlYXRlUG9wb3ZlckZvcklubmVyQ29udHJvbHMoKTogUG9wb3ZlciB7XG5cdFx0aWYgKCF0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIpIHtcblx0XHRcdHRoaXMuaW5uZXJDb250cm9sUG9wb3ZlciA9IChcblx0XHRcdFx0PFBvcG92ZXJcblx0XHRcdFx0XHRpZD17dGhpcy5nZXRJZCgpICsgXCItaW5uZXJQb3BvdmVyXCJ9XG5cdFx0XHRcdFx0c2hvd0Fycm93PXtmYWxzZX1cblx0XHRcdFx0XHRzaG93SGVhZGVyPXt0cnVlfVxuXHRcdFx0XHRcdHBsYWNlbWVudD17UGxhY2VtZW50VHlwZS5Cb3R0b219XG5cdFx0XHRcdFx0Y2xhc3M9XCJzYXBVaU1lZGl1bU1hcmdpbkJvdHRvbVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Zm9vdGVyOiB0aGlzLmdldFRvb2xiYXIoKVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvUG9wb3Zlcj5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIgYXMgUG9wb3Zlcjtcblx0fVxuXG5cdGdldFRvb2xiYXIoKTogT3ZlcmZsb3dUb29sYmFyIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMudG9vbGJhcikge1xuXHRcdFx0Y29uc3Qgb2tCdXR0b24gPSB0aGlzLmdldE9rQnV0dG9uKCk7XG5cdFx0XHRjb25zdCBzaG93QWxsQnV0dG9uID0gdGhpcy5nZXRTaG93QWxsQnV0dG9uKCk7XG5cdFx0XHR0aGlzLnRvb2xiYXIgPSAoXG5cdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXI+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0XHQ8VG9vbGJhclNwYWNlciAvPlxuXHRcdFx0XHRcdFx0XHRcdHtva0J1dHRvbn1cblx0XHRcdFx0XHRcdFx0XHR7c2hvd0FsbEJ1dHRvbn1cblx0XHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9PdmVyZmxvd1Rvb2xiYXI+XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy50b29sYmFyO1xuXHR9XG5cblx0Z2V0T2tCdXR0b24oKTogQnV0dG9uIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMub2tCdXR0b24pIHtcblx0XHRcdHRoaXMub2tCdXR0b24gPSA8QnV0dG9uIHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9PS1wiKX0gdHlwZT17QnV0dG9uVHlwZS5FbXBoYXNpemVkfSAvPjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMub2tCdXR0b247XG5cdH1cblxuXHRnZXRTaG93QWxsQnV0dG9uKCk6IEJ1dHRvbiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCF0aGlzLnNob3dBbGxCdXR0b24pIHtcblx0XHRcdHRoaXMuc2hvd0FsbEJ1dHRvbiA9IDxCdXR0b24gdGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX1NIT1dfQUxMX0lURU1TXCIpfSAvPjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuc2hvd0FsbEJ1dHRvbjtcblx0fVxuXG5cdGZvcm1hdFRva2Vucyh0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdKTogVG9rZW5EZWZpbml0aW9uW10ge1xuXHRcdHJldHVybiB0b2tlbnMubWFwKCh0b2tlbikgPT4ge1xuXHRcdFx0aWYgKHRva2VuLnR5cGUgPT09IFwiVmFsdWVIZWxwXCIpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHQuLi50b2tlbixcblx0XHRcdFx0XHRrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzOiB0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzLm1hcCgodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdC8vTWFraW5nIHN1cmUgdGhhdCBvbmx5IHRoZSBpZCBwYXJ0IGlzIHBhc3NlZFxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IHZhbHVlLm9wZXJhdG9yLFxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZFZhbHVlczogdmFsdWUuc2VsZWN0ZWRWYWx1ZXMubWFwKCh2YWwpID0+IHZhbC52YWx1ZSlcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSBhcyBUb2tlbkRlZmluaXRpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZGVlcENsb25lKHRva2VuKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdG9uU3RhdGVDaGFuZ2UoY2hhbmdlZFByb3BzOiBzdHJpbmdbXSA9IFtdKTogdm9pZCB7XG5cdFx0aWYgKGNoYW5nZWRQcm9wcy5pbmNsdWRlcyhcInRva2Vuc1wiKSkge1xuXHRcdFx0aWYgKHRoaXMuc2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkKSB7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KFwidG9rZW5zQ2hhbmdlZFwiLCB7XG5cdFx0XHRcdFx0dG9rZW5zOiB0aGlzLmZvcm1hdFRva2Vucyh0aGlzLnN0YXRlLnRva2VucyBhcyB1bmtub3duIGFzIFRva2VuRGVmaW5pdGlvbltdKVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc3RhdGUuc2hvd1Jlc3VsdCA9IHRoaXMuc3RhdGUudG9rZW5zLmxlbmd0aCA+IDA7XG5cdFx0XHRpZiAoISh0aGlzLmlzTWFuZGF0b3J5Q2hlY2tSZXF1aXJlZCA/PyBmYWxzZSkpIHtcblx0XHRcdFx0dGhpcy5jaGVja0lmQWxsTWFuZGF0b3J5VG9rZW5zRmlsbGVkKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnNob3VsZE1lc3NhZ2VTdHJpcFJlbW92ZSkge1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogVGhlIHVzZXIgaGFzIGFja25vd2xlZGdlZCB0aGUgbWVzc2FnZSBzdHJpcCBhbmQgdW5kZXJzdG9vZCB0aGUgaXNzdWUuXG5cdFx0XHRcdCAqIFdoZW4gdGhlIHRva2VucyBhcmUgdXBkYXRlZCBuZXh0IHRpbWUsIGRpc3BsYXlpbmcgdGhlIG1lc3NhZ2Ugc3RyaXAgYWdhaW4gc2VydmVzIG5vIHB1cnBvc2UuXG5cdFx0XHRcdCAqIEFkZGl0aW9uYWxseSwgb25jZSB0aGUgdG9rZW5zIGFyZSB1cGRhdGVkLCB0aGUgaW5wdXQgZmllbGQgdGV4dCB3aWxsIGJlIHJlbW92ZWRcblx0XHRcdFx0ICogcmVuZGVyaW5nIHRoZSBtZXNzYWdlIHN0cmlwIGlycmVsZXZhbnQuIEhvd2V2ZXIsIHRoZSBtZXNzYWdlIHN0cmlwIHdpbGwgYmUgZGlzcGxheWVkIGFnYWluIHRoZSBuZXh0IHRpbWUgdGhlIFwiR09cIiBidXR0b24gaXMgcHJlc3NlZC5cblx0XHRcdFx0ICovXG5cdFx0XHRcdHRoaXMuY2xlYXJNZXNzYWdlU3RyaXAoKTtcblx0XHRcdFx0dGhpcy5jbGVhck1lc3NhZ2VTdHJpcEZvclNpbmdsZVZhbHVlKCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnNob3VsZE1lc3NhZ2VTdHJpcFJlbW92ZSA9IHRydWU7XG5cdFx0fVxuXHRcdC8vUmVzZXR0aW5nIHRvIGRlZmF1bHQgdmFsdWVzXG5cdFx0dGhpcy5pc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQgPSBmYWxzZTtcblx0XHR0aGlzLnNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IHRydWU7XG5cblx0XHQvLyAgb25zYXBmb2N1c2xlYXZlIG1ldGhvZCBpbiBzYXAubS5Ub2tlbml6ZXIgaXMgYXV0b21hdGljYWxseSBjb252ZXJ0aW5nIHRoZSByZW5kZXJtb2RlIG9mIHRva2VuaXplciB0byBcIk5hcnJvd1wiIGZyb20gXCJsb29zZVwiXG5cdFx0Ly8gIEluIHRoaXMgcHJvY2VzcyB0aGVyZSBhcmUgbXVsdGlwbGUgcG9wb3ZlciBpc3N1ZXMgaGFwcGVuaW5nXG5cdFx0Ly8gIFNvIGFzIGEgdGVtcG9yYXJ5IGZpeCBvdmVycmlkaW5nIHRoZSBmdW5jdGlvblxuXHRcdCh0aGlzLnRva2VuaXplcj8uY3VycmVudCBhcyBGb2N1c0hhbmRsaW5nQ29udHJvbCkub25zYXBmb2N1c2xlYXZlID0gKCk6IHZvaWQgPT4ge307XG5cdH1cblxuXHRwcml2YXRlIG9uVGh1bWJVcFByZXNzZWQoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYlVwQnV0dG9uUHJlc3NlZCA9IHRydWU7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYkRvd25CdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0dHJpZ2dlclBYSW50ZWdyYXRpb24oXCJ0aHVtYlVwXCIpO1xuXHRcdHRoaXMub25UaHVtYlByZXNzZWQoKTtcblx0fVxuXG5cdHByaXZhdGUgb25UaHVtYkRvd25QcmVzc2VkKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUudGh1bWJEb3duQnV0dG9uUHJlc3NlZCA9IHRydWU7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYlVwQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRyaWdnZXJQWEludGVncmF0aW9uKFwidGh1bWJEb3duXCIpO1xuXHRcdHRoaXMub25UaHVtYlByZXNzZWQoKTtcblx0fVxuXG5cdHByaXZhdGUgb25UaHVtYlByZXNzZWQoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYkJ1dHRvbkVuYWJsZWQgPSBmYWxzZTtcblx0XHRNZXNzYWdlVG9hc3Quc2hvdyh0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0VBU1lfRklMVEVSX0ZFRURCQUNLX1NFTlRcIikpO1xuXHR9XG5cblx0Y3JlYXRlQ29udGVudCgpOiBWQm94IHtcblx0XHRjb25zdCAkdG9wR29CdG4gPSBjcmVhdGVSZWZlcmVuY2U8QnV0dG9uPigpO1xuXHRcdGNvbnN0IHRodW1iVXBCdXR0b25Ub2tlbml6ZXIgPSAoXG5cdFx0XHQ8VG9nZ2xlQnV0dG9uXG5cdFx0XHRcdGljb249e1wic2FwLWljb246Ly90aHVtYi11cFwifVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0VBU1lfRklMVEVSX1RIVU1CU19VUFwiKX1cblx0XHRcdFx0dHlwZT17XCJUcmFuc3BhcmVudFwifVxuXHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLm9uVGh1bWJVcFByZXNzZWQoKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0ZW5hYmxlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJCdXR0b25FbmFibGVkXCIpfVxuXHRcdFx0XHRwcmVzc2VkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYlVwQnV0dG9uUHJlc3NlZFwiKX1cblx0XHRcdC8+XG5cdFx0KTtcblx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUodGh1bWJVcEJ1dHRvblRva2VuaXplciwgXCJwcmVzc1wiLCBcImZlNDplZnQ6dDp0aHVtYlVwXCIpO1xuXHRcdGNvbnN0IHRodW1iRG93bkJ1dHRvblRva2VuaXplciA9IChcblx0XHRcdDxUb2dnbGVCdXR0b25cblx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL3RodW1iLWRvd25cIn1cblx0XHRcdFx0dG9vbHRpcD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19FQVNZX0ZJTFRFUl9USFVNQlNfRE9XTlwiKX1cblx0XHRcdFx0dHlwZT17XCJUcmFuc3BhcmVudFwifVxuXHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLm9uVGh1bWJEb3duUHJlc3NlZCgpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRlbmFibGVkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYkJ1dHRvbkVuYWJsZWRcIil9XG5cdFx0XHRcdHByZXNzZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iRG93bkJ1dHRvblByZXNzZWRcIil9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKHRodW1iRG93bkJ1dHRvblRva2VuaXplciwgXCJwcmVzc1wiLCBcImZlNDplZnQ6dDp0aHVtYkRvd25cIik7XG5cdFx0Y29uc3QgdGh1bWJVcEJ1dHRvbk1lc3NhZ2VTdHJpcGUgPSAoXG5cdFx0XHQ8VG9nZ2xlQnV0dG9uXG5cdFx0XHRcdGljb249e1wic2FwLWljb246Ly90aHVtYi11cFwifVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0VBU1lfRklMVEVSX1RIVU1CU19VUFwiKX1cblx0XHRcdFx0dHlwZT17XCJUcmFuc3BhcmVudFwifVxuXHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLm9uVGh1bWJVcFByZXNzZWQoKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0ZW5hYmxlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJCdXR0b25FbmFibGVkXCIpfVxuXHRcdFx0XHRwcmVzc2VkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYlVwQnV0dG9uUHJlc3NlZFwiKX1cblx0XHRcdC8+XG5cdFx0KTtcblx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUodGh1bWJVcEJ1dHRvbk1lc3NhZ2VTdHJpcGUsIFwicHJlc3NcIiwgXCJmZTQ6ZWZ0Om1zOnRodW1iVXBcIik7XG5cdFx0Y29uc3QgdGh1bWJEb3duQnV0dG9uTWVzc2FnZVN0cmlwZSA9IChcblx0XHRcdDxUb2dnbGVCdXR0b25cblx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL3RodW1iLWRvd25cIn1cblx0XHRcdFx0dG9vbHRpcD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19FQVNZX0ZJTFRFUl9USFVNQlNfRE9XTlwiKX1cblx0XHRcdFx0dHlwZT17XCJUcmFuc3BhcmVudFwifVxuXHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLm9uVGh1bWJEb3duUHJlc3NlZCgpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRlbmFibGVkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYkJ1dHRvbkVuYWJsZWRcIil9XG5cdFx0XHRcdHByZXNzZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iRG93bkJ1dHRvblByZXNzZWRcIil9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKHRodW1iRG93bkJ1dHRvbk1lc3NhZ2VTdHJpcGUsIFwicHJlc3NcIiwgXCJmZTQ6ZWZ0Om1zOnRodW1iRG93blwiKTtcblx0XHRjb25zdCBvdXRWQm94ID0gKFxuXHRcdFx0PFZCb3g+XG5cdFx0XHRcdDxGbGV4Qm94IHJlbmRlclR5cGU9XCJCYXJlXCI+XG5cdFx0XHRcdFx0PEVhc3lGaWx0ZXJJbnB1dFxuXHRcdFx0XHRcdFx0cmVjb21tZW5kZWRWYWx1ZXM9e3RoaXMucmVjb21tZW5kZWRWYWx1ZXN9XG5cdFx0XHRcdFx0XHRyZWY9e3RoaXMuZWFzeUZpbHRlcklucHV0fVxuXHRcdFx0XHRcdFx0ZW50ZXJQcmVzc2VkPXt0aGlzLm9uRW50ZXJQcmVzc2VkLmJpbmQodGhpcyl9XG5cdFx0XHRcdFx0XHRxdWVyeUNoYW5nZWQ9eyhlKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuZmlyZUV2ZW50KFwicXVlcnlDaGFuZ2VkXCIsIHsgcXVlcnk6IGUuZ2V0UGFyYW1ldGVyKFwicXVlcnlcIikgfSk7XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0bGl2ZUNoYW5nZT17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnRva2VuaXplckVkaXRhYmxlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdC8+XG5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vYWlcIn1cblx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcFVpU21hbGxNYXJnaW5CZWdpblwifVxuXHRcdFx0XHRcdFx0cmVmPXskdG9wR29CdG59XG5cdFx0XHRcdFx0XHR0ZXh0PXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX0dPXCIpfVxuXHRcdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5FbXBoYXNpemVkfVxuXHRcdFx0XHRcdFx0cHJlc3M9e3RoaXMub25Hb0J1dHRvblByZXNzLmJpbmQodGhpcyl9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHQ8RmxleEJveFxuXHRcdFx0XHRcdHJlbmRlclR5cGU9XCJCYXJlXCJcblx0XHRcdFx0XHR2aXNpYmxlPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJzaG93UmVzdWx0XCIpfVxuXHRcdFx0XHRcdGFsaWduSXRlbXM9e0ZsZXhBbGlnbkl0ZW1zLkNlbnRlcn1cblx0XHRcdFx0XHR3cmFwPXtGbGV4V3JhcC5XcmFwfVxuXHRcdFx0XHRcdGp1c3RpZnlDb250ZW50PXtGbGV4SnVzdGlmeUNvbnRlbnQuU3BhY2VCZXR3ZWVufVxuXHRcdFx0XHRcdGNsYXNzPXtcInNhcFVpVGlueU1hcmdpblRvcFwifVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PEZsZXhCb3ggY2xhc3M9e1wic2FwRmVDb250cm9sc0dhcDhweFwifSByZW5kZXJUeXBlPVwiQmFyZVwiIGFsaWduSXRlbXM9e0ZsZXhBbGlnbkl0ZW1zLkNlbnRlcn0gd3JhcD17RmxleFdyYXAuV3JhcH0+XG5cdFx0XHRcdFx0XHR7dGhpcy5haU5vdGljZT8uY2xvbmUoKX1cblx0XHRcdFx0XHRcdDxUb2tlbml6ZXJcblx0XHRcdFx0XHRcdFx0ZWRpdGFibGU9e2FuZChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0b2tlbml6ZXJFZGl0YWJsZVwiKSwgdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcEZlQ29udHJvbHNUb2tlbml6ZXJcIn1cblx0XHRcdFx0XHRcdFx0dG9rZW5zPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0b2tlbnNcIil9XG5cdFx0XHRcdFx0XHRcdHJlbmRlck1vZGU9e1Rva2VuaXplclJlbmRlck1vZGUuTG9vc2V9XG5cdFx0XHRcdFx0XHRcdHJlZj17dGhpcy50b2tlbml6ZXJ9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0dG9rZW5zOiAoaWR4OiBudW1iZXIsIGN0eDogQ29udGV4dCk6IFRva2VuID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9iamVjdCA9IGN0eC5nZXRPYmplY3QoKSBhcyBUb2tlbkRlZmluaXRpb247XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8VG9rZW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e3RoaXMuc3RhdGUudG9rZW5zLmtleX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbD17dGhpcy5zdGF0ZS50b2tlbnMubGFiZWx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbXM9e3RoaXMuc3RhdGUudG9rZW5zLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXN9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWFuZGF0b3J5PXt0aGlzLmlzS2V5TWFuZGF0b3J5KG9iamVjdC5rZXkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJ1c3k9e3RoaXMuc3RhdGUudG9rZW5zLmJ1c3l9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB0b2tlbkluZGV4ID0gdGhpcy5zdGF0ZS50b2tlbnMuZmluZEluZGV4KCh0b2tlbikgPT4gdG9rZW4ua2V5ID09PSBvYmplY3Qua2V5KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG5ld1Rva2VucyA9IHRoaXMuc3RhdGUudG9rZW5zLmNvbmNhdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmV3VG9rZW5zLnNwbGljZSh0b2tlbkluZGV4LCAxKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUudG9rZW5zID0gbmV3VG9rZW5zO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy51cGRhdGVGaWx0ZXJJbnB1dChcInRva2VuVXBkYXRlZFwiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN1c3RvbURhdGE6IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbURhdGEga2V5PVwiVG9rZW5JbmZvXCIgdmFsdWU9e29iamVjdH0gLz4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxDdXN0b21EYXRhIGtleT1cInBvcG92ZXJcIiB2YWx1ZT17dGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyfSAvPixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbURhdGEga2V5PVwiZWFzeUZpbHRlckJhckNvbnRhaW5lclwiIHZhbHVlPXt0aGlzfSAvPixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbURhdGFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9XCJjb2RlTGlzdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e3RoaXMuZmlsdGVyQmFyTWV0YWRhdGE/LmZpbmQoKGRhdGEpID0+IGRhdGEubmFtZSA9PT0gb2JqZWN0LmtleSk/LmNvZGVMaXN0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvVG9rZW4+XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdDwvVG9rZW5pemVyPlxuXHRcdFx0XHRcdFx0PEhCb3g+XG5cdFx0XHRcdFx0XHRcdHt0aHVtYlVwQnV0dG9uVG9rZW5pemVyfSwge3RodW1iRG93bkJ1dHRvblRva2VuaXplcn1cblx0XHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9SRVNFVFwiKX1cblx0XHRcdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlc2V0U3RhdGUoKTtcblx0XHRcdFx0XHRcdFx0XHQvL1JldGFpbmluZyB0aGUgZm9jdXMgb24gcG9wb3ZlciBkb2Vzbid0IG1ha2UgdGhlIHBvcG92ZXIgY2xvc2Ugb24gZXZlcnkgaW50ZXJhY3Rpb25cblx0XHRcdFx0XHRcdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py4kc2VhcmNoSW5wdXQuZm9jdXMoKTtcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdDxGbGV4Qm94IHJlbmRlclR5cGU9XCJCYXJlXCI+XG5cdFx0XHRcdFx0PE1lc3NhZ2VTdHJpcFxuXHRcdFx0XHRcdFx0dGV4dD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBUZXh0XCIpfVxuXHRcdFx0XHRcdFx0c2hvd0ljb249e3RydWV9XG5cdFx0XHRcdFx0XHRlbmFibGVGb3JtYXR0ZWRUZXh0PXt0cnVlfVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwXCIpfVxuXHRcdFx0XHRcdFx0c2hvd0Nsb3NlQnV0dG9uPXt0cnVlfVxuXHRcdFx0XHRcdFx0Y2xvc2U9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5jbGVhck1lc3NhZ2VTdHJpcEZvclNpbmdsZVZhbHVlKCk7XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdD48L01lc3NhZ2VTdHJpcD5cblx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHQ8RmxleEJveCByZW5kZXJUeXBlPVwiQmFyZVwiIGNsYXNzPXtcInNhcEZlQ29udHJvbHNHYXA4cHhcIn0+XG5cdFx0XHRcdFx0PE1lc3NhZ2VTdHJpcFxuXHRcdFx0XHRcdFx0dHlwZT17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwibWVzc2FnZVN0cmlwVHlwZVwiKX1cblx0XHRcdFx0XHRcdHRleHQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcIm1lc3NhZ2VTdHJpcFRleHRcIil9XG5cdFx0XHRcdFx0XHRzaG93SWNvbj17dHJ1ZX1cblx0XHRcdFx0XHRcdGVuYWJsZUZvcm1hdHRlZFRleHQ9e3RydWV9XG5cdFx0XHRcdFx0XHRzaG93Q2xvc2VCdXR0b249e3RydWV9XG5cdFx0XHRcdFx0XHRjbG9zZT17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNsZWFyTWVzc2FnZVN0cmlwKCk7XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2hvd01lc3NhZ2VTdHJpcFwiKX1cblx0XHRcdFx0XHQ+PC9NZXNzYWdlU3RyaXA+XG5cdFx0XHRcdFx0PEhCb3ggdmlzaWJsZT17YW5kKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInNob3dNZXNzYWdlU3RyaXBcIiksIG5vdChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJzaG93UmVzdWx0XCIpKSl9PlxuXHRcdFx0XHRcdFx0e3RodW1iVXBCdXR0b25NZXNzYWdlU3RyaXBlfSwge3RodW1iRG93bkJ1dHRvbk1lc3NhZ2VTdHJpcGV9XG5cdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHQ8L1ZCb3g+XG5cdFx0KSBhcyBWQm94O1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSgkdG9wR29CdG4uY3VycmVudCEsIFwicHJlc3NcIiwgXCJmZTphaTpzZWFyY2hcIik7XG5cdFx0cmV0dXJuIG91dFZCb3g7XG5cdH1cblxuXHRhc3luYyBvbkdvQnV0dG9uUHJlc3MoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5zdGF0ZS50b2tlbml6ZXJFZGl0YWJsZSA9IHRydWU7XG5cdFx0bGV0IGN1cnJlbnRJbnB1dFZhbHVlID0gdGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uZ2V0VmFsdWUoKTtcblx0XHRjb25zdCBjdXJyZW50SW5wdXRQbGFjZWhvbGRlciA9IHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmdldFBsYWNlaG9sZGVyKCk7XG5cblx0XHRpZiAoY3VycmVudElucHV0VmFsdWUgPT09IFwiXCIgJiYgY3VycmVudElucHV0UGxhY2Vob2xkZXIgIT09IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUExBQ0VIT0xERVJcIikpIHtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFZhbHVlKGN1cnJlbnRJbnB1dFBsYWNlaG9sZGVyIHx8IFwiXCIpO1xuXHRcdFx0Y3VycmVudElucHV0VmFsdWUgPSBjdXJyZW50SW5wdXRQbGFjZWhvbGRlcjtcblx0XHR9XG5cdFx0YXdhaXQgdGhpcy5vbkdvUHJlc3MoY3VycmVudElucHV0VmFsdWUpO1xuXHR9XG5cblx0cmVzZXRTdGF0ZShjbGVhckFsbEZpbHRlcnMgPSB0cnVlKTogdm9pZCB7XG5cdFx0aWYgKGNsZWFyQWxsRmlsdGVycykge1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJjbGVhckZpbHRlcnNcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkID0gZmFsc2U7XG5cdFx0fVxuXHRcdHRoaXMuc3RhdGUudG9rZW5zID0gdGhpcy5nZXREZWZhdWx0VG9rZW5zKCk7XG5cdFx0dGhpcy51cGRhdGVGaWx0ZXJJbnB1dChcInRva2VuUmVzZXRcIik7XG5cdFx0dGhpcy5zdGF0ZS50b2tlbml6ZXJFZGl0YWJsZSA9IHRydWU7XG5cdFx0dGhpcy5pc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQgPSB0cnVlO1xuXHRcdC8vU2V0IHRoZSBWYWx1ZSBTdGF0ZXMgb2YgYWxsIHRoZSBUb2tlbnMgYmFjayB0byBOb25lXG5cdFx0dGhpcy50b2tlbml6ZXIuY3VycmVudD8uZ2V0VG9rZW5zKCkuZm9yRWFjaCgodG9rZW4pID0+IHRva2VuLnNldFByb3BlcnR5KFwidmFsdWVTdGF0ZVwiLCBWYWx1ZVN0YXRlLk5vbmUpKTtcblx0XHR0aGlzLnRva2VuaXplci5jdXJyZW50Py5nZXRUb2tlbnMoKS5mb3JFYWNoKCh0b2tlbikgPT4gdG9rZW4uc2V0UHJvcGVydHkoXCJ2YWx1ZVN0YXRlVGV4dFwiLCBudWxsKSk7XG5cdFx0dGhpcy5jbGVhck1lc3NhZ2VTdHJpcCgpOyAvL2NsZWFyIHRoZSBtZXNzYWdlIHN0cmlwIGZvciB2YWxpZGF0ZWQgZmlsdGVyc1xuXHR9XG5cblx0Ly9UaGUgYmVsb3cgY29kZSB1cGRhdGVzIHRoZSBleGlzdGluZyBzdGF0ZSBieSBmZXRjaGluZyB0aGUga2V5IGFuZCBzZWxlY3RlZFZhbHVlc1xuXHR1cGRhdGVUb2tlbkFycmF5KFxuXHRcdGNoYW5nZVR5cGU6IFRva2VuU2V0dGVycyxcblx0XHRuZXdUb2tlblNwZWNpZmljVmFsdWVzOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdIHwgVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10sXG5cdFx0dG9rZW5LZXk6IHN0cmluZ1xuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBuZXdUb2tlbnMgPSB0aGlzLnN0YXRlLnRva2Vucy5tYXAoKHRva2VuKSA9PiAoeyAuLi50b2tlbiwga2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogWy4uLnRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNdIH0pKTtcblx0XHRjb25zdCB0b2tlbkluZGV4ID0gbmV3VG9rZW5zLmZpbmRJbmRleCgodCkgPT4gdC5rZXkgPT09IHRva2VuS2V5KTtcblx0XHRjb25zdCB0b2tlbiA9IG5ld1Rva2Vuc1t0b2tlbkluZGV4XTtcblx0XHRpZiAodG9rZW5JbmRleCAhPSAtMSkge1xuXHRcdFx0c3dpdGNoIChjaGFuZ2VUeXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJzZXRTZWxlY3RlZFZhbHVlc1wiOlxuXHRcdFx0XHRcdHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZXModG9rZW4gYXMgVG9rZW5EZWZpbml0aW9uLCBuZXdUb2tlblNwZWNpZmljVmFsdWVzLCB0b2tlbkluZGV4LCBuZXdUb2tlbnMgYXMgVG9rZW5EZWZpbml0aW9uW10pO1xuXHRcdFx0XHRcdHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgPSBuZXdUb2tlblNwZWNpZmljVmFsdWVzO1xuXHRcdFx0XHRcdC8vUmVtb3ZlIHRoZSB0b2tlbiBlbnRpcmVseVxuXHRcdFx0XHRcdGlmICghdGhpcy5pc0tleU1hbmRhdG9yeSh0b2tlbi5rZXkpICYmIHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRuZXdUb2tlbnMuc3BsaWNlKHRva2VuSW5kZXgsIDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJTcGVjaWZ5aW5nIGEgc2V0dGVyIHRoYXQgaXMgb3V0IG9mIHRoZSBib3VuZGFyeVwiKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdC8vIFVwZGF0ZSB0aGUgc3RhdGUgYnkgYXNzaWduaW5nIHRoZSBuZXcgdG9rZW5zIGFycmF5XG5cdFx0XHR0aGlzLnN0YXRlLnRva2VucyA9IG5ld1Rva2VucyBhcyBUb2tlbkRlZmluaXRpb25bXTtcblx0XHRcdHRoaXMuc3RhdGUuc2hvd1Jlc3VsdCA9IG5ld1Rva2Vucy5sZW5ndGggPiAwO1xuXHRcdFx0dGhpcy51cGRhdGVGaWx0ZXJJbnB1dChcInRva2VuVXBkYXRlZFwiKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgY2xvc2VJbm5lckNvbnRyb2xQb3BvdmVyKCk6IHZvaWQge1xuXHRcdHRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcj8uY2xvc2UoKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0U2VsZWN0ZWRWYWx1ZXMoXG5cdFx0dG9rZW46IFRva2VuRGVmaW5pdGlvbixcblx0XHRuZXdUb2tlblNwZWNpZmljVmFsdWVzOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdIHwgVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10sXG5cdFx0dG9rZW5JbmRleDogbnVtYmVyLFxuXHRcdG5ld1Rva2VuczogVG9rZW5EZWZpbml0aW9uW11cblx0KTogdm9pZCB7XG5cdFx0dG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyA9IG5ld1Rva2VuU3BlY2lmaWNWYWx1ZXM7XG5cdFx0aWYgKCF0aGlzLmlzS2V5TWFuZGF0b3J5KHRva2VuLmtleSkgJiYgdG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdG5ld1Rva2Vucy5zcGxpY2UodG9rZW5JbmRleCwgMSk7XG5cdFx0fVxuXHR9XG5cblx0aXNLZXlNYW5kYXRvcnkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRpZiAoIXRoaXMubWFuZGF0b3J5S2V5TWFwKSB7XG5cdFx0XHR0aGlzLm1hbmRhdG9yeUtleU1hcCA9IHt9O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5tYW5kYXRvcnlLZXlNYXBba2V5XSA/IHRydWUgOiBmYWxzZTtcblx0fVxuXG5cdHJlbW92ZU5vbk1hbmRhdG9yeVRva2VucygpOiB0aGlzIHtcblx0XHRjb25zdCBuZXdUb2tlbjogVG9rZW5EZWZpbml0aW9uW10gPSB0aGlzLnN0YXRlLnRva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pc0tleU1hbmRhdG9yeSh0b2tlbi5rZXkpO1xuXHRcdH0pO1xuXHRcdHRoaXMuc3RhdGUudG9rZW5zID0gbmV3VG9rZW47XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR1cGRhdGVGaWx0ZXJJbnB1dCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgY3VyclZhbHVlOiBzdHJpbmcgPSB0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5nZXRWYWx1ZSgpIHx8IFwiXCI7XG5cdFx0aWYgKHZhbHVlID09PSBcInRva2VuVXBkYXRlZFwiICYmIGN1cnJWYWx1ZSAhPT0gXCJcIikge1xuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0VmFsdWUoXCJcIik7XG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRQbGFjZWhvbGRlcihjdXJyVmFsdWUpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgPT09IFwidG9rZW5SZXNldFwiKSB7XG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRWYWx1ZShcIlwiKTtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFBsYWNlaG9sZGVyKHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUExBQ0VIT0xERVJcIikpO1xuXHRcdH1cblx0fVxuXG5cdGdldFRva2Vuc0luSW5pdGlhbFN0YXRlKCk6IFRva2VuRGVmaW5pdGlvbltdIHtcblx0XHRjb25zdCBuZXdUb2tlbnMgPSB0aGlzLnN0YXRlLnRva2Vucy5tYXAoKHRva2VuKSA9PiAoeyAuLi50b2tlbiwga2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogWy4uLnRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNdIH0pKTtcblx0XHRjb25zdCBtYW5kYXRvcnlUb2tlbnMgPSBuZXdUb2tlbnMuZmlsdGVyKCh0b2tlbikgPT4ge1xuXHRcdFx0aWYgKHRoaXMuaXNLZXlNYW5kYXRvcnkodG9rZW4ua2V5KSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gbWFuZGF0b3J5VG9rZW5zLm1hcCgodG9rZW4pID0+ICh7IC4uLnRva2VuLCBrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzOiBbXSB9KSk7XG5cdH1cblxuXHRnZXRVblNldE1hbmRhdG9yeVRva2Vuc0luQ3VycmVudFN0YXRlKCk6IFRva2VuRGVmaW5pdGlvbltdIHtcblx0XHRyZXR1cm4gdGhpcy5zdGF0ZS50b2tlbnMuZmlsdGVyKCh0b2tlbikgPT4ge1xuXHRcdFx0Y29uc3QgaXNLZXlNYW5kYXRvcnkgPSB0aGlzLmlzS2V5TWFuZGF0b3J5KHRva2VuLmtleSk7XG5cdFx0XHRpZiAoaXNLZXlNYW5kYXRvcnkpIHtcblx0XHRcdFx0cmV0dXJuIHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID09PSAwO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Z2V0QWN0dWFsVG9rZW5zRnJvbVN0YXRlKHRva2VuczogVG9rZW5EZWZpbml0aW9uW10pOiBFYXN5RmlsdGVyVG9rZW5bXSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgcmVxdWlyZWRLZXlzID0gdG9rZW5zLm1hcCgodG9rZW4pID0+IHRva2VuLmtleSk7XG5cdFx0cmV0dXJuIHRoaXMudG9rZW5pemVyLmN1cnJlbnQ/LmdldFRva2VucygpLmZpbHRlcigodG9rZW4pID0+IHJlcXVpcmVkS2V5cy5pbmNsdWRlcyh0b2tlbi5nZXRLZXkoKSkpIGFzXG5cdFx0XHR8IEVhc3lGaWx0ZXJUb2tlbltdXG5cdFx0XHR8IHVuZGVmaW5lZDtcblx0fVxuXG5cdHN0YXRpYyByZW5kZXIocm06IFJlbmRlck1hbmFnZXIsIGNvbnRyb2w6IEVhc3lGaWx0ZXJCYXJDb250YWluZXIpOiB2b2lkIHtcblx0XHRyZXR1cm4ganN4LnJlbmRlclVzaW5nUmVuZGVyTWFuYWdlcihybSwgY29udHJvbCwgKCkgPT4ge1xuXHRcdFx0cmV0dXJuIDxzcGFuIHJlZj17Y29udHJvbH0+e2NvbnRyb2wuZ2V0QWdncmVnYXRpb24oXCJjb250ZW50XCIpfTwvc3Bhbj47XG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|
|
896
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVyQmFyQ29udGFpbmVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwcm9wZXJ0eSIsInR5cGUiLCJfZGVjMyIsIl9kZWM0IiwiX2RlYzUiLCJfZGVjNiIsIl9kZWM3IiwiX2RlYzgiLCJkZWZpbmVSZWZlcmVuY2UiLCJfZGVjOSIsIl9kZWMxMCIsImFnZ3JlZ2F0aW9uIiwiX2RlYzExIiwiX2RlYzEyIiwiZXZlbnQiLCJfZGVjMTMiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJfZGVjMTciLCJfZGVjMTgiLCJkZWZpbmVTdGF0ZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbCIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJfZGVzY3JpcHRvcjEyIiwiX2Rlc2NyaXB0b3IxMyIsIl9kZXNjcmlwdG9yMTQiLCJfZGVzY3JpcHRvcjE1IiwiX2Rlc2NyaXB0b3IxNiIsIl9kZXNjcmlwdG9yMTciLCJzaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQiLCJpc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2VucyIsImlucHV0RmllbGRSZWFkeSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVzb2x2ZUNvbnRlbnRSZWFkeSIsInNob3VsZE1lc3NhZ2VTdHJpcFJlbW92ZSIsImluaXRpYWxpemUiLCJpbnZpc2libGVNZXNzYWdlIiwiSW52aXNpYmxlTWVzc2FnZSIsImdldEluc3RhbmNlIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInNldEVhc3lGaWx0ZXJMaWIiLCJlYXN5RmlsdGVyTGliIiwic2V0UHJvcGVydHkiLCJlYXN5ZmlsdGVyIiwiX191aTVfcmVxdWlyZV9hc3luYyIsInNldEFwcElkIiwiYXBwSWQiLCJlYXN5RmlsdGVySW5wdXQiLCJjdXJyZW50IiwiaW5pdFNoZWxsSGlzdG9yeVByb3ZpZGVyIiwic2V0RmlsdGVyQmFyTWV0YWRhdGEiLCJmaWx0ZXJCYXJNZXRhZGF0YSIsInRva2VucyIsImdldERlZmF1bHRUb2tlbnMiLCJpbm5lckNvbnRyb2xQb3BvdmVyIiwiY3JlYXRlUG9wb3ZlckZvcklubmVyQ29udHJvbHMiLCJhZGREZXBlbmRlbnQiLCJzdGF0ZSIsInNob3dSZXN1bHQiLCJsZW5ndGgiLCJpc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQiLCJpbml0IiwicmVzb3VyY2VCdW5kbGUiLCJMaWIiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImNvbnRlbnQiLCJjcmVhdGVDb250ZW50IiwibWFuZGF0b3J5S2V5TWFwIiwiZm9yRWFjaCIsImRhdGEiLCJpc1JlcXVpcmVkIiwicmVxdWlyZWQiLCJuYW1lIiwicHVzaCIsImtleSIsImxhYmVsIiwia2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyIsImRlZmF1bHRWYWx1ZSIsImJ1c3kiLCJvbkVudGVyUHJlc3NlZCIsImUiLCJvbkdvUHJlc3MiLCJnZXRQYXJhbWV0ZXIiLCJjaGVja0lmQWxsTWFuZGF0b3J5VG9rZW5zRmlsbGVkIiwidG9rZW5zSW5TdGF0ZSIsImdldFVuU2V0TWFuZGF0b3J5VG9rZW5zSW5DdXJyZW50U3RhdGUiLCJnZXRBY3R1YWxUb2tlbnNGcm9tU3RhdGUiLCJ0b2tlbiIsIlZhbHVlU3RhdGUiLCJFcnJvciIsImdldFRleHQiLCJvcGVuVmFsdWVTdGF0ZU1lc3NhZ2UiLCJjbG9zZUFsbE1hbmRhdG9yeVZhbHVlU3RhdGVNZXNzYWdlcyIsImVhc3lUb2tlbnMiLCJ0b2tlbml6ZXIiLCJnZXRUb2tlbnMiLCJjbG9zZVZhbHVlU3RhdGVNZXNzYWdlIiwibWFnaWNRdWVyeSIsInJlc2V0U3RhdGUiLCJ0b2tlbml6ZXJFZGl0YWJsZSIsImZpcmVFdmVudCIsImVhc3lGaWx0ZXJNZXRhZGF0YSIsInZlcnNpb24iLCJlbnRpdHlTZXQiLCJjb250ZXh0UGF0aCIsImZpZWxkcyIsImVhc3lGaWx0ZXJSZXN1bHQiLCJlYXN5RmlsdGVyIiwic3VjY2VzcyIsImlzSGlzdG9yeUVuYWJsZWQiLCJhZGRSZWNlbnRRdWVyeSIsImhhbmRsZVYxU3VjY2VzcyIsInJlbW92ZU5vbk1hbmRhdG9yeVRva2VucyIsInNldE1lc3NhZ2VTdHJpcCIsIm1lc3NhZ2UiLCJhbm5vdW5jZSIsIkludmlzaWJsZU1lc3NhZ2VNb2RlIiwiQXNzZXJ0aXZlIiwibWVzc2FnZVN0cmlwVHlwZSIsIk1lc3NhZ2VUeXBlIiwiV2FybmluZyIsIkxvZyIsImVycm9yIiwiZmlsdGVyIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwiY2xlYXJNZXNzYWdlU3RyaXAiLCJFYXN5RmlsdGVyVXRpbHMiLCJmb3JtYXREYXRhIiwiYmluZCIsImFsbFZhbHVlSGVscFRva2VucyIsInJlc3VsdCIsInJlcXVpcmVkVmFsdWVIZWxwVG9rZW5zIiwidmFsdWVIZWxwVG9rZW4iLCJmaW5kIiwibGxtUmVzdWx0IiwiZGF0YUZldGNoZXIiLCJ1cGRhdGVkVG9rZW5zIiwia2V5U3BlY2lmaWNWYWx1ZSIsImlkeCIsIm9wZXJhdG9yIiwiRmlsdGVyT3BlcmF0b3IiLCJCVCIsIk5CIiwic2VsZWN0ZWRWYWx1ZXMiLCJ2YWx1ZSIsImRlc2NyaXB0aW9uIiwic3ViSW5keCIsInZlcmlmeVNpbmdsZVNlbGVjdFRva2VuVmFsdWVzIiwidGh1bWJCdXR0b25FbmFibGVkIiwidGh1bWJEb3duQnV0dG9uUHJlc3NlZCIsInRodW1iVXBCdXR0b25QcmVzc2VkIiwic2luZ2xlU2VsZWN0VG9rZW5MYWJlbHMiLCJzcGxpY2UiLCJzaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQiLCJqb2luIiwic2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwIiwic2hvd01lc3NhZ2VTdHJpcCIsIm1lc3NhZ2VTdHJpcFRleHQiLCJjbGVhck1lc3NhZ2VTdHJpcEZvclNpbmdsZVZhbHVlIiwidGV4dCIsIl9qc3giLCJQb3BvdmVyIiwiaWQiLCJnZXRJZCIsInNob3dBcnJvdyIsInNob3dIZWFkZXIiLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnRUeXBlIiwiQm90dG9tIiwiY2xhc3MiLCJjaGlsZHJlbiIsImZvb3RlciIsImdldFRvb2xiYXIiLCJ0b29sYmFyIiwib2tCdXR0b24iLCJnZXRPa0J1dHRvbiIsInNob3dBbGxCdXR0b24iLCJnZXRTaG93QWxsQnV0dG9uIiwiT3ZlcmZsb3dUb29sYmFyIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJUb29sYmFyU3BhY2VyIiwiQnV0dG9uIiwiQnV0dG9uVHlwZSIsIkVtcGhhc2l6ZWQiLCJmb3JtYXRUb2tlbnMiLCJtYXAiLCJ2YWwiLCJkZWVwQ2xvbmUiLCJvblN0YXRlQ2hhbmdlIiwiY2hhbmdlZFByb3BzIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiaW5jbHVkZXMiLCJyZXNldCIsIm9uc2FwZm9jdXNsZWF2ZSIsIm9uVGh1bWJVcFByZXNzZWQiLCJ0cmlnZ2VyUFhJbnRlZ3JhdGlvbiIsIm9uVGh1bWJQcmVzc2VkIiwib25UaHVtYkRvd25QcmVzc2VkIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsIiR0b3BHb0J0biIsImNyZWF0ZVJlZmVyZW5jZSIsInRodW1iVXBCdXR0b25Ub2tlbml6ZXIiLCJUb2dnbGVCdXR0b24iLCJpY29uIiwidG9vbHRpcCIsInByZXNzIiwiZW5hYmxlZCIsImJpbmRTdGF0ZSIsInByZXNzZWQiLCJGRVNSSGVscGVyIiwic2V0U2VtYW50aWNTdGVwbmFtZSIsInRodW1iRG93bkJ1dHRvblRva2VuaXplciIsInRodW1iVXBCdXR0b25NZXNzYWdlU3RyaXBlIiwidGh1bWJEb3duQnV0dG9uTWVzc2FnZVN0cmlwZSIsImFpTm90aWNlQ29udHJvbCIsImFpTm90aWNlIiwiY2xvbmUiLCJBSU5vdGljZSIsIlZCb3giLCJUZXh0Iiwib3V0VkJveCIsIkZsZXhCb3giLCJyZW5kZXJUeXBlIiwiRWFzeUZpbHRlcklucHV0IiwicmVjb21tZW5kZWRWYWx1ZXMiLCJyZWYiLCJlbnRlclByZXNzZWQiLCJxdWVyeUNoYW5nZWQiLCJxdWVyeSIsImxpdmVDaGFuZ2UiLCJvbkdvQnV0dG9uUHJlc3MiLCJ2aXNpYmxlIiwiYWxpZ25JdGVtcyIsIkZsZXhBbGlnbkl0ZW1zIiwiQ2VudGVyIiwid3JhcCIsIkZsZXhXcmFwIiwiV3JhcCIsImp1c3RpZnlDb250ZW50IiwiRmxleEp1c3RpZnlDb250ZW50IiwiU3BhY2VCZXR3ZWVuIiwiVG9rZW5pemVyIiwiZWRpdGFibGUiLCJhbmQiLCJyZW5kZXJNb2RlIiwiVG9rZW5pemVyUmVuZGVyTW9kZSIsIkxvb3NlIiwiY3R4Iiwib2JqZWN0IiwiZ2V0T2JqZWN0IiwiVG9rZW4iLCJpdGVtcyIsIm1hbmRhdG9yeSIsImlzS2V5TWFuZGF0b3J5IiwiZGVsZXRlIiwidG9rZW5JbmRleCIsImZpbmRJbmRleCIsIm5ld1Rva2VucyIsImNvbmNhdCIsInVwZGF0ZUZpbHRlcklucHV0IiwiY3VzdG9tRGF0YSIsIkN1c3RvbURhdGEiLCJjb2RlTGlzdCIsIkhCb3giLCJUcmFuc3BhcmVudCIsIiRzZWFyY2hJbnB1dCIsImZvY3VzIiwiTWVzc2FnZVN0cmlwIiwic2hvd0ljb24iLCJlbmFibGVGb3JtYXR0ZWRUZXh0Iiwic2hvd0Nsb3NlQnV0dG9uIiwiY2xvc2UiLCJub3QiLCJjdXJyZW50SW5wdXRWYWx1ZSIsImdldFZhbHVlIiwiY3VycmVudElucHV0UGxhY2Vob2xkZXIiLCJnZXRQbGFjZWhvbGRlciIsInNldFZhbHVlIiwiY2xlYXJBbGxGaWx0ZXJzIiwiTm9uZSIsInVwZGF0ZVRva2VuQXJyYXkiLCJjaGFuZ2VUeXBlIiwibmV3VG9rZW5TcGVjaWZpY1ZhbHVlcyIsInRva2VuS2V5IiwidCIsInNldFNlbGVjdGVkVmFsdWVzIiwiY2xvc2VJbm5lckNvbnRyb2xQb3BvdmVyIiwibmV3VG9rZW4iLCJjdXJyVmFsdWUiLCJzZXRQbGFjZWhvbGRlciIsImdldFRva2Vuc0luSW5pdGlhbFN0YXRlIiwibWFuZGF0b3J5VG9rZW5zIiwicmVxdWlyZWRLZXlzIiwiZ2V0S2V5IiwicmVuZGVyIiwicm0iLCJjb250cm9sIiwianN4IiwicmVuZGVyVXNpbmdSZW5kZXJNYW5hZ2VyIiwiZ2V0QWdncmVnYXRpb24iLCJDb250cm9sIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJFYXN5RmlsdGVyQmFyQ29udGFpbmVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUsIFN0YXRlT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQge1xuXHRhZ2dyZWdhdGlvbixcblx0Y3JlYXRlUmVmZXJlbmNlLFxuXHRkZWZpbmVSZWZlcmVuY2UsXG5cdGRlZmluZVN0YXRlLFxuXHRkZWZpbmVVSTVDbGFzcyxcblx0ZXZlbnQsXG5cdHByb3BlcnR5LFxuXHR0eXBlIFByb3BlcnRpZXNPZlxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IFRva2VuIGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9Ub2tlblwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRmxleEJveCBmcm9tIFwic2FwL20vRmxleEJveFwiO1xuaW1wb3J0IFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgVG9rZW5pemVyIGZyb20gXCJzYXAvbS9Ub2tlbml6ZXJcIjtcbmltcG9ydCBWQm94IGZyb20gXCJzYXAvbS9WQm94XCI7XG5pbXBvcnQgeyBCdXR0b25UeXBlLCBGbGV4QWxpZ25JdGVtcywgRmxleEp1c3RpZnlDb250ZW50LCBGbGV4V3JhcCwgUGxhY2VtZW50VHlwZSwgVG9rZW5pemVyUmVuZGVyTW9kZSB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCBMaWIgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgUmVuZGVyTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvUmVuZGVyTWFuYWdlclwiO1xuaW1wb3J0IHsgSW52aXNpYmxlTWVzc2FnZU1vZGUsIFZhbHVlU3RhdGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcblxuaW1wb3J0IHR5cGUgeyBQcmltaXRpdmVUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCB7IGFuZCwgYmluZFN0YXRlLCBub3QgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCBBSU5vdGljZSBmcm9tIFwic2FwL2ZlL2NvbnRyb2xzL0FJTm90aWNlXCI7XG5pbXBvcnQgRWFzeUZpbHRlcklucHV0IGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9FYXN5RmlsdGVySW5wdXRcIjtcbmltcG9ydCB0eXBlIEVhc3lGaWx0ZXJUb2tlbiBmcm9tIFwic2FwL2ZlL2NvbnRyb2xzL2Vhc3lGaWx0ZXIvVG9rZW5cIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgTWVzc2FnZVN0cmlwIGZyb20gXCJzYXAvbS9NZXNzYWdlU3RyaXBcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IE92ZXJmbG93VG9vbGJhciBmcm9tIFwic2FwL20vT3ZlcmZsb3dUb29sYmFyXCI7XG5pbXBvcnQgVG9nZ2xlQnV0dG9uIGZyb20gXCJzYXAvbS9Ub2dnbGVCdXR0b25cIjtcbmltcG9ydCBUb29sYmFyU3BhY2VyIGZyb20gXCJzYXAvbS9Ub29sYmFyU3BhY2VyXCI7XG5pbXBvcnQgSW52aXNpYmxlTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IEZFU1JIZWxwZXIgZnJvbSBcInNhcC91aS9wZXJmb3JtYW5jZS90cmFjZS9GRVNSSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBFYXN5RmlsdGVyIGZyb20gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcbmltcG9ydCB0eXBlIHsgRWFzeUZpbHRlck1ldGFkYXRhLCBFYXN5RmlsdGVyUmVzdWx0LCBQcm9wZXJ0eU1ldGFkYXRhIH0gZnJvbSBcInV4L2VuZy9maW9yaWFpL3JldXNlL2Vhc3lmaWx0ZXIvRWFzeUZpbHRlclwiO1xuaW1wb3J0IHR5cGUgeyBTdWNjZXNzIH0gZnJvbSBcInV4L2VuZy9maW9yaWFpL3JldXNlL3NoYXJlZFwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudEhhbmRsZXIgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgeyB0cmlnZ2VyUFhJbnRlZ3JhdGlvbiB9IGZyb20gXCIuL1BYRmVlZGJhY2tcIjtcbmltcG9ydCBFYXN5RmlsdGVyVXRpbHMgZnJvbSBcIi4vdXRpbHNcIjtcblxuLy9Gb3IgY3VycmVudCByZWxlYXNlIHdlIGFyZSBpZ25vcmluZyBcIkFsbFwiIGFuZCBcIkFueVwiXG4vL1dlIGNhbiBpbmNvcnBvcmF0ZSB0aGVzZSB2YWx1ZXMgaW4gZnV0dXJlXG5leHBvcnQgdHlwZSBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMgPSBbYm9vbGVhbiwgYm9vbGVhbl0gfCBbc3RyaW5nLCBzdHJpbmddIHwgW251bWJlciwgbnVtYmVyXSB8IFtEYXRlLCBEYXRlXTtcblxudHlwZSBsbG1SZXN1bHRGb3JTZWxlY3RlZFZhbHVlc1R5cGUgPSBzdHJpbmcgfCBEYXRlIHwgYm9vbGVhbiB8IG51bWJlcjtcblxuZXhwb3J0IHR5cGUgQ29kZUxpc3RUeXBlID0ge1xuXHR2YWx1ZTogUHJpbWl0aXZlVHlwZTtcblx0ZGVzY3JpcHRpb246IGxsbVJlc3VsdEZvclNlbGVjdGVkVmFsdWVzVHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIFZhbHVlSGVscEJldHdlZW5TZWxlY3RlZFZhbHVlcyA9IFtDb2RlTGlzdFR5cGUsIENvZGVMaXN0VHlwZV07XG5cbmV4cG9ydCB0eXBlIFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbiA9XG5cdHwge1xuXHRcdFx0b3BlcmF0b3I6IEV4Y2x1ZGU8RmlsdGVyT3BlcmF0b3IsIEZpbHRlck9wZXJhdG9yLkJUIHwgRmlsdGVyT3BlcmF0b3IuTkI+O1xuXHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IENvZGVMaXN0VHlwZVtdO1xuXHRcdFx0bm9NYXRjaD86IGJvb2xlYW47XG5cdCAgfVxuXHR8IHtcblx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CO1xuXHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IFZhbHVlSGVscEJldHdlZW5TZWxlY3RlZFZhbHVlcztcblx0XHRcdG5vTWF0Y2g/OiBib29sZWFuO1xuXHQgIH07XG5cbi8vV2Ugd2lsbCBiZSBoYW5kbGluZyBcIkFMTFwiIGFuZCBcIkFOWVwiIGF0IGxhdGVyIHBvaW50IG9mIHRpbWVcbmV4cG9ydCB0eXBlIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uID1cblx0fCB7XG5cdFx0XHRvcGVyYXRvcjogRXhjbHVkZTxGaWx0ZXJPcGVyYXRvciwgRmlsdGVyT3BlcmF0b3IuQlQgfCBGaWx0ZXJPcGVyYXRvci5OQj47XG5cdFx0XHRzZWxlY3RlZFZhbHVlczogc3RyaW5nW10gfCBib29sZWFuW10gfCBudW1iZXJbXSB8IERhdGVbXTtcblx0ICB9XG5cdHwge1xuXHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkJUIHwgRmlsdGVyT3BlcmF0b3IuTkI7XG5cdFx0XHRzZWxlY3RlZFZhbHVlczogQmV0d2VlblNlbGVjdGVkVmFsdWVzO1xuXHQgIH07XG5cbmV4cG9ydCB0eXBlIFRva2VuVHlwZSA9IFwiTWVudVdpdGhDaGVja0JveFwiIHwgXCJDYWxlbmRhclwiIHwgXCJUaW1lXCIgfCBcIlZhbHVlSGVscFwiIHwgXCJNZW51V2l0aFNpbmdsZVNlbGVjdFwiO1xuXG5leHBvcnQgdHlwZSBWYWx1ZUhlbHBUb2tlbkRlZmluaXRpb24gPSB7XG5cdGtleTogc3RyaW5nO1xuXHRsYWJlbDogc3RyaW5nO1xuXHRrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzOiBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXTtcblx0dHlwZTogXCJWYWx1ZUhlbHBcIjtcblx0YnVzeTogYm9vbGVhbjtcblx0aXNSZXF1aXJlZD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBOb25WYWx1ZUhlbHBUb2tlbkRlZmluaXRpb24gPSB7XG5cdGtleTogc3RyaW5nO1xuXHRsYWJlbDogc3RyaW5nO1xuXHRrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdO1xuXHR0eXBlOiBFeGNsdWRlPFRva2VuVHlwZSwgXCJWYWx1ZUhlbHBcIj47XG5cdGlzUmVxdWlyZWQ/OiBib29sZWFuO1xuXHRidXN5OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgVG9rZW5EZWZpbml0aW9uID0gVmFsdWVIZWxwVG9rZW5EZWZpbml0aW9uIHwgTm9uVmFsdWVIZWxwVG9rZW5EZWZpbml0aW9uO1xuXG5leHBvcnQgdHlwZSBUb2tlblNldHRlcnMgPSBcInNldFNlbGVjdGVkVmFsdWVzXCI7XG5cbmV4cG9ydCB0eXBlIEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhID0gUHJvcGVydHlNZXRhZGF0YSAmXG5cdChcblx0XHR8IHtcblx0XHRcdFx0dHlwZTogXCJWYWx1ZUhlbHBcIjtcblx0XHRcdFx0ZGVmYXVsdFZhbHVlPzogVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW107XG5cdFx0ICB9XG5cdFx0fCB7XG5cdFx0XHRcdHR5cGU6IEV4Y2x1ZGU8VG9rZW5UeXBlLCBcIlZhbHVlSGVscFwiPjtcblx0XHRcdFx0ZGVmYXVsdFZhbHVlPzogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXTtcblx0XHQgIH1cblx0KTtcblxuLy8gV2UgbmVlZCB0aGUgdGhpcmQgYXJndWVtZW50IGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgYSBjaGFuY2Ugb2YgY29tcG9zaXRlIGtleXMgc2NlbmFyaW9cbnR5cGUgRGF0YUZldGNoZXIgPSAoXG5cdHByb3BlcnR5TmFtZTogc3RyaW5nLFxuXHR2YWx1ZU9mQ3VycmVudFByb3BlcnR5OiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdLFxuXHRsbG1SZXN1bHQ6IFN1Y2Nlc3M8RWFzeUZpbHRlclJlc3VsdD5cbikgPT4gUHJvbWlzZTxWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXT47XG5cbmludGVyZmFjZSBGb2N1c0hhbmRsaW5nQ29udHJvbCB7XG5cdG9uc2FwZm9jdXNsZWF2ZT86ICgpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIEVhc3lGaWx0ZXJCYXJDb250YWluZXIkU2hvd1ZhbHVlSGVscEV2ZW50ID0gVUk1RXZlbnQ8XG5cdHtcblx0XHRrZXk6IHN0cmluZztcblx0XHR2YWx1ZXM6IHVua25vd25bXTtcblx0XHRyZXNvbHZlOiAodmFsdWU6IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdKSA9PiB2b2lkO1xuXHRcdHJlamVjdDogKHJlYXNvbj86IEVycm9yKSA9PiB2b2lkO1xuXHR9LFxuXHRFYXN5RmlsdGVyQmFyQ29udGFpbmVyXG4+O1xuXG4vKlxuICogRGVsaXZlcnkgZm9yIGJldGEgcmVsZWFzZSBmb3IgdGhlIGVhc3kgZmlsdGVyIGZlYXR1cmUuXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb250cm9scy5lYXN5RmlsdGVyLkVhc3lGaWx0ZXJCYXJDb250YWluZXJcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVhc3lGaWx0ZXJCYXJDb250YWluZXIgZXh0ZW5kcyBDb250cm9sIHtcblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRjb250ZXh0UGF0aD86IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGFwcElkPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0ZWFzeUZpbHRlckxpYj86IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImFycmF5XCIgfSlcblx0ZmlsdGVyQmFyTWV0YWRhdGE/OiBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YVtdO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYXJyYXlcIiB9KVxuXHRyZWNvbW1lbmRlZFZhbHVlcz86IHN0cmluZ1tdO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiZnVuY3Rpb25cIiB9KVxuXHRkYXRhRmV0Y2hlcj86IERhdGFGZXRjaGVyO1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRlYXN5RmlsdGVySW5wdXQhOiBSZWY8RW5oYW5jZVdpdGhVSTU8RWFzeUZpbHRlcklucHV0Pj47XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdHRva2VuaXplciE6IFJlZjxUb2tlbml6ZXI+O1xuXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLnVpLmNvcmUuQ29udHJvbFwiIH0pXG5cdGNvbnRlbnQ/OiBDb250cm9sO1xuXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLnVpLmNvcmUuQ29udHJvbFwiIH0pXG5cdGFpTm90aWNlPzogQ29udHJvbDtcblxuXHRAZXZlbnQoKVxuXHR0b2tlbnNDaGFuZ2VkPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgdG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXTsgcmVzZXQ6IGJvb2xlYW4gfSwgRWFzeUZpbHRlckJhckNvbnRhaW5lcj4+O1xuXG5cdEBldmVudCgpXG5cdHF1ZXJ5Q2hhbmdlZD86IEV2ZW50SGFuZGxlcjxVSTVFdmVudDx7IHF1ZXJ5OiBzdHJpbmcgfSwgRWFzeUZpbHRlckJhckNvbnRhaW5lcj4+O1xuXG5cdEBldmVudCgpXG5cdHNob3dWYWx1ZUhlbHA/OiBFdmVudEhhbmRsZXI8RWFzeUZpbHRlckJhckNvbnRhaW5lciRTaG93VmFsdWVIZWxwRXZlbnQ+O1xuXG5cdEBldmVudCgpXG5cdGNsZWFyRmlsdGVycz86IEV2ZW50SGFuZGxlcjtcblxuXHRAZXZlbnQoKVxuXHRiZWZvcmVRdWVyeVByb2Nlc3Npbmc/OiBFdmVudEhhbmRsZXI7XG5cblx0QGV2ZW50KClcblx0YWZ0ZXJRdWVyeVByb2Nlc3Npbmc/OiBFdmVudEhhbmRsZXI7XG5cblx0cHJpdmF0ZSByZXNvdXJjZUJ1bmRsZSE6IFJlc291cmNlQnVuZGxlO1xuXG5cdEBkZWZpbmVTdGF0ZSgpXG5cdHByb3RlY3RlZCBzdGF0ZTogU3RhdGVPZjx7XG5cdFx0c2hvd1Jlc3VsdDogYm9vbGVhbjtcblx0XHR0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdO1xuXHRcdHRva2VuaXplckVkaXRhYmxlOiBib29sZWFuO1xuXHRcdHNob3dTaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcD86IGJvb2xlYW47XG5cdFx0c2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBUZXh0Pzogc3RyaW5nO1xuXHRcdG1lc3NhZ2VTdHJpcFRleHQ/OiBzdHJpbmc7XG5cdFx0c2hvd01lc3NhZ2VTdHJpcD86IGJvb2xlYW47XG5cdFx0bWVzc2FnZVN0cmlwVHlwZTogTWVzc2FnZVR5cGU7XG5cdFx0dGh1bWJCdXR0b25FbmFibGVkOiBib29sZWFuO1xuXHRcdHRodW1iVXBCdXR0b25QcmVzc2VkOiBib29sZWFuO1xuXHRcdHRodW1iRG93bkJ1dHRvblByZXNzZWQ6IGJvb2xlYW47XG5cdH0+ID0ge1xuXHRcdHNob3dSZXN1bHQ6IGZhbHNlLFxuXHRcdHRva2VuczogW10gYXMgVG9rZW5EZWZpbml0aW9uW10sXG5cdFx0dG9rZW5pemVyRWRpdGFibGU6IHRydWUsXG5cdFx0c2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwOiBmYWxzZSxcblx0XHRzaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQ6IFwiXCIsXG5cdFx0bWVzc2FnZVN0cmlwVGV4dDogXCJcIixcblx0XHRzaG93TWVzc2FnZVN0cmlwOiBmYWxzZSxcblx0XHRtZXNzYWdlU3RyaXBUeXBlOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XHR0aHVtYkJ1dHRvbkVuYWJsZWQ6IHRydWUsXG5cdFx0dGh1bWJVcEJ1dHRvblByZXNzZWQ6IGZhbHNlLFxuXHRcdHRodW1iRG93bkJ1dHRvblByZXNzZWQ6IGZhbHNlXG5cdH07XG5cblx0cHJpdmF0ZSBpbm5lckNvbnRyb2xQb3BvdmVyPzogUG9wb3ZlcjtcblxuXHRwcml2YXRlIG9rQnV0dG9uPzogQnV0dG9uO1xuXG5cdHByaXZhdGUgc2hvd0FsbEJ1dHRvbj86IEJ1dHRvbjtcblxuXHRwcml2YXRlIHRvb2xiYXI/OiBPdmVyZmxvd1Rvb2xiYXI7XG5cblx0cHJpdmF0ZSBtYW5kYXRvcnlLZXlNYXA/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcblxuXHQvL0lmIHNldCB0byB0cnVlIHRoZSBlcnJvciBzdGF0ZSBjYW4gYmUgc2VlbiBvbiB0aGUgdG9rZW5zXG5cdHByaXZhdGUgaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIHNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IHRydWU7XG5cblx0cHJpdmF0ZSBpc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2VucyA9IGZhbHNlO1xuXG5cdHByaXZhdGUgaW52aXNpYmxlTWVzc2FnZSE6IEludmlzaWJsZU1lc3NhZ2U7XG5cblx0ZWFzeWZpbHRlcj86IFByb21pc2U8dHlwZW9mIEVhc3lGaWx0ZXIgfCB1bmRlZmluZWQ+O1xuXG5cdHByaXZhdGUgcmVzb2x2ZUNvbnRlbnRSZWFkeSE6ICgpID0+IHZvaWQ7XG5cblx0cHJpdmF0ZSBpbnB1dEZpZWxkUmVhZHk6IFByb21pc2U8dm9pZD4gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdHRoaXMucmVzb2x2ZUNvbnRlbnRSZWFkeSA9IHJlc29sdmU7XG5cdH0pO1xuXG5cdHByaXZhdGUgc2hvdWxkTWVzc2FnZVN0cmlwUmVtb3ZlID0gdHJ1ZTtcblxuXHRjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBzdHJpbmcgfCAoJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxFYXN5RmlsdGVyQmFyQ29udGFpbmVyPiksIG90aGVycz86ICRDb250cm9sU2V0dGluZ3MpIHtcblx0XHRzdXBlcihwcm9wZXJ0aWVzIGFzIHN0cmluZywgb3RoZXJzKTtcblx0XHR0aGlzLmluaXRpYWxpemUoKTtcblx0XHR0aGlzLmludmlzaWJsZU1lc3NhZ2UgPSBJbnZpc2libGVNZXNzYWdlLmdldEluc3RhbmNlKCk7XG5cdH1cblxuXHRzZXRFYXN5RmlsdGVyTGliKGVhc3lGaWx0ZXJMaWI6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuc2V0UHJvcGVydHkoXCJlYXN5RmlsdGVyTGliXCIsIGVhc3lGaWx0ZXJMaWIpO1xuXHRcdGlmICh0aGlzLmVhc3lGaWx0ZXJMaWIpIHtcblx0XHRcdHRoaXMuZWFzeWZpbHRlciA9IGltcG9ydCh0aGlzLmVhc3lGaWx0ZXJMaWIpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIHNldEFwcElkKGFwcElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIXRoaXMuYXBwSWQpIHtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJhcHBJZFwiLCBhcHBJZCwgdHJ1ZSk7XG5cdFx0XHRhd2FpdCB0aGlzLmlucHV0RmllbGRSZWFkeTtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFByb3BlcnR5KFwiYXBwSWRcIiwgYXBwSWQsIHRydWUpO1xuXHRcdFx0YXdhaXQgdGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uaW5pdFNoZWxsSGlzdG9yeVByb3ZpZGVyKCk7XG5cdFx0fVxuXHR9XG5cblx0c2V0RmlsdGVyQmFyTWV0YWRhdGEoZmlsdGVyQmFyTWV0YWRhdGE6IEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhW10pOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuZmlsdGVyQmFyTWV0YWRhdGEpIHtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJmaWx0ZXJCYXJNZXRhZGF0YVwiLCBmaWx0ZXJCYXJNZXRhZGF0YSwgdHJ1ZSk7XG5cdFx0XHQvLyBwb3B1bGF0ZSB0aGUgdG9rZW5zIHdpdGggZGVmYXVsdCB2YWx1ZVxuXHRcdFx0Y29uc3QgdG9rZW5zID0gdGhpcy5nZXREZWZhdWx0VG9rZW5zKCk7XG5cdFx0XHRpZiAoIXRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcikge1xuXHRcdFx0XHR0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIgPSB0aGlzLmNyZWF0ZVBvcG92ZXJGb3JJbm5lckNvbnRyb2xzKCk7XG5cdFx0XHRcdHRoaXMuYWRkRGVwZW5kZW50KHRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcik7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnN0YXRlLnRva2VucyA9IHRva2Vucztcblx0XHRcdHRoaXMuc3RhdGUuc2hvd1Jlc3VsdCA9IHRva2Vucy5sZW5ndGggPiAwO1xuXHRcdFx0Ly8vV2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IGVycm9yIHZhbHVlU3RhdGVNZXNzYWdlIGFzIHNvb24gdGhlIGNvbnRyb2wgcmVuZGVyc1xuXHRcdFx0dGhpcy5pc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQgPSB0cnVlO1xuXHRcdFx0Ly9vblRva2VuQ2hhbmdlIGV2ZW50IHNob3VsZCBub3QgYmUgZmlyZWQgd2hlbiBpbml0aWFsIHNldCBvZiB0b2tlbnMgYXJlIHNldFxuXHRcdFx0dGhpcy5zaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdHRoaXMucmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29udHJvbHNcIikhO1xuXHR9XG5cblx0aW5pdGlhbGl6ZSgpOiB2b2lkIHtcblx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0XHR0aGlzLnJlc29sdmVDb250ZW50UmVhZHkoKTtcblx0XHRpZiAoIXRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcikge1xuXHRcdFx0dGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyID0gdGhpcy5jcmVhdGVQb3BvdmVyRm9ySW5uZXJDb250cm9scygpO1xuXHRcdFx0dGhpcy5hZGREZXBlbmRlbnQodGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyKTtcblx0XHR9XG5cdFx0Ly9XZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgZXJyb3IgdmFsdWVTdGF0ZU1lc3NhZ2UgYXMgc29vbiB0aGUgY29udHJvbCByZW5kZXJzXG5cdFx0dGhpcy5pc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQgPSB0cnVlO1xuXHRcdC8vb25Ub2tlbkNoYW5nZSBldmVudCBzaG91bGQgbm90IGJlIGZpcmVkIHdoZW4gaW5pdGlhbCBzZXQgb2YgdG9rZW5zIGFyZSBzZXRcblx0XHR0aGlzLnNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IGZhbHNlO1xuXHR9XG5cblx0Ly8gVGhpcyBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgYmVmb3JlIHVwZGF0aW5nIHRoZSBzdGF0ZSwgb25jZSB0aGUgc3RhdGUgaXMgdXBkYXRlZCB0aGUgcHJldmlvdXMgb3ZlcnJpZGRlbiBkZWZhdWx0IHZhbHVlcyB3b3VsZCBiZSBnb25lIGZvcmV2ZXJcblx0Z2V0RGVmYXVsdFRva2VucygpOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0Y29uc3QgdG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXSA9IFtdO1xuXHRcdGlmICghdGhpcy5tYW5kYXRvcnlLZXlNYXApIHtcblx0XHRcdHRoaXMubWFuZGF0b3J5S2V5TWFwID0ge307XG5cdFx0fVxuXHRcdHRoaXMuZmlsdGVyQmFyTWV0YWRhdGE/LmZvckVhY2goKGRhdGEpID0+IHtcblx0XHRcdGNvbnN0IGlzUmVxdWlyZWQgPSBkYXRhLnJlcXVpcmVkO1xuXHRcdFx0aWYgKGlzUmVxdWlyZWQpIHtcblx0XHRcdFx0KHRoaXMubWFuZGF0b3J5S2V5TWFwIGFzIFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+KVtkYXRhLm5hbWVdID0gdHJ1ZTtcblx0XHRcdFx0Ly9DaGVjayB3aGV0aGVyIHRoZSBrZXlzIGV4aXN0IGluIHRoZSBjdXJyZW50IHN0YXRlIGVsc2UgcHVzaCBpdCBhY3Jvc3Ncblx0XHRcdFx0aWYgKGRhdGEudHlwZSA9PT0gXCJWYWx1ZUhlbHBcIikge1xuXHRcdFx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0XHRcdGtleTogZGF0YS5uYW1lLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGRhdGEubGFiZWwgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogKGRhdGEuZGVmYXVsdFZhbHVlIGFzIFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdKSA/PyBbXSxcblx0XHRcdFx0XHRcdHR5cGU6IGRhdGEudHlwZSxcblx0XHRcdFx0XHRcdGJ1c3k6IGZhbHNlLFxuXHRcdFx0XHRcdFx0aXNSZXF1aXJlZFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRva2Vucy5wdXNoKHtcblx0XHRcdFx0XHRcdGtleTogZGF0YS5uYW1lLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGRhdGEubGFiZWwgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogKGRhdGEuZGVmYXVsdFZhbHVlIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10pID8/IFtdLFxuXHRcdFx0XHRcdFx0dHlwZTogZGF0YS50eXBlLFxuXHRcdFx0XHRcdFx0YnVzeTogZmFsc2UsXG5cdFx0XHRcdFx0XHRpc1JlcXVpcmVkXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gdG9rZW5zO1xuXHR9XG5cblx0b25FbnRlclByZXNzZWQoZTogVUk1RXZlbnQ8eyBxdWVyeTogc3RyaW5nIH0sIEVhc3lGaWx0ZXJJbnB1dD4pOiB2b2lkIHtcblx0XHR0aGlzLm9uR29QcmVzcyhlLmdldFBhcmFtZXRlcihcInF1ZXJ5XCIpKTtcblx0fVxuXG5cdC8vTWFraW5nIGl0IHB1YmxpYyBiZWNhdXNlIGluIGxpdmUgbW9kZSB0aGUgYXBwIGRldmVsb3BlciBjYW4gZGVjaWRlIHdoZXRoZXIgdG8gZGlzcGxheSB0aGUgZXJyb3IgVmFsdWVTdGF0ZU1lc3NhZ2Vcblx0Ly9JbiBub24tbGl2ZSBtb2RlICwgd2UgYXJlIGFscmVhZHkgaW50ZXJuYWxseSBoYW5kbGluZyBpdCBvbiBldmVyeSB0aW1lIHRpbWUgYSB1c2VyIGNsaWNrcyBvbiBHTy9FbnRlciBidXR0b25zXG5cdHB1YmxpYyBjaGVja0lmQWxsTWFuZGF0b3J5VG9rZW5zRmlsbGVkKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHRva2Vuc0luU3RhdGUgPSB0aGlzLmdldFVuU2V0TWFuZGF0b3J5VG9rZW5zSW5DdXJyZW50U3RhdGUoKTtcblx0XHRpZiAodG9rZW5zSW5TdGF0ZS5sZW5ndGggIT09IDApIHtcblx0XHRcdGNvbnN0IHRva2VucyA9IHRoaXMuZ2V0QWN0dWFsVG9rZW5zRnJvbVN0YXRlKHRva2Vuc0luU3RhdGUpO1xuXHRcdFx0dG9rZW5zPy5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0XHR0b2tlbi5zZXRQcm9wZXJ0eShcInZhbHVlU3RhdGVcIiwgVmFsdWVTdGF0ZS5FcnJvcik7XG5cdFx0XHRcdHRva2VuLnNldFByb3BlcnR5KFwidmFsdWVTdGF0ZVRleHRcIiwgdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9NQU5EQVRPUllfVE9LRU5fRVJST1JcIikpO1xuXHRcdFx0XHR0b2tlbi5vcGVuVmFsdWVTdGF0ZU1lc3NhZ2UoKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHB1YmxpYyBjbG9zZUFsbE1hbmRhdG9yeVZhbHVlU3RhdGVNZXNzYWdlcygpOiB2b2lkIHtcblx0XHRjb25zdCBlYXN5VG9rZW5zID0gdGhpcy50b2tlbml6ZXIuY3VycmVudD8uZ2V0VG9rZW5zKCkgYXMgRWFzeUZpbHRlclRva2VuW107XG5cdFx0ZWFzeVRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4gdG9rZW4uY2xvc2VWYWx1ZVN0YXRlTWVzc2FnZSgpKTtcblx0fVxuXG5cdGFzeW5jIG9uR29QcmVzcyhtYWdpY1F1ZXJ5OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIW1hZ2ljUXVlcnkpIHtcblx0XHRcdHRoaXMucmVzZXRTdGF0ZSgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLnN0YXRlLnRva2VuaXplckVkaXRhYmxlID0gdHJ1ZTtcblxuXHRcdC8vIENhbGwgQUkgc2VydmljZSB0byBnZXQgdGhlIGZpbHRlciBjcml0ZXJpYVxuXHRcdGNvbnN0IGVhc3lmaWx0ZXIgPSBhd2FpdCB0aGlzLmVhc3lmaWx0ZXI7XG5cdFx0aWYgKCFlYXN5ZmlsdGVyKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuZmlyZUV2ZW50KFwiYmVmb3JlUXVlcnlQcm9jZXNzaW5nXCIpO1xuXG5cdFx0Y29uc3QgZWFzeUZpbHRlck1ldGFkYXRhOiBFYXN5RmlsdGVyTWV0YWRhdGEgPSB7XG5cdFx0XHR2ZXJzaW9uOiAxLFxuXHRcdFx0ZW50aXR5U2V0OiB0aGlzLmNvbnRleHRQYXRoLFxuXHRcdFx0ZmllbGRzOiB0aGlzLmZpbHRlckJhck1ldGFkYXRhIGFzIEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhW11cblx0XHR9O1xuXG5cdFx0Y29uc3QgZWFzeUZpbHRlclJlc3VsdCA9IGF3YWl0IGVhc3lmaWx0ZXIuZWFzeUZpbHRlcihtYWdpY1F1ZXJ5LCBlYXN5RmlsdGVyTWV0YWRhdGEpO1xuXG5cdFx0Ly9XZSBzaG91bGQgbm90IGNoYW5nZSB0aGUgbWVzc2FnZSBzdHJpcCBmb3IgdGhlIGZpcnN0IHRpbWUgd2hlbiB0aGUgR08gYnV0dG9uIGlzIHByZXNzZWQsIGJlY2F1c2UgaXQgaGFzIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIGluIHRoZSBFYXN5RmlsdGVyVXRpbHMuZm9ybWF0RGF0YSBtZXRob2Rcblx0XHR0aGlzLnNob3VsZE1lc3NhZ2VTdHJpcFJlbW92ZSA9IGZhbHNlO1xuXHRcdGlmIChlYXN5RmlsdGVyUmVzdWx0LnN1Y2Nlc3MpIHtcblx0XHRcdC8vT25seSBhZGQgdGhlIHJlY2VudCBxdWVyeSB3aGVuIHRoZSBjYWxsIGlzIHN1Y2Nlc3Ncblx0XHRcdC8vRG8gbm90IHRyYWNrIHRoZSByZWNlbnQgcXVlcmllcyB3aGVuIHRoZSBpc0hpc3RvcnlFbmFibGVkIGlzIHNldCB0byBmYWxzZVxuXHRcdFx0Ly9JdCB3b3VsZCBiZSBhIHZpb2xhdGlvbiB0byB1c2VycyBwcml2YWN5XG5cdFx0XHRpZiAodGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uaXNIaXN0b3J5RW5hYmxlZCgpID8/IGZhbHNlKSB7XG5cdFx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmFkZFJlY2VudFF1ZXJ5KG1hZ2ljUXVlcnkpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS52ZXJzaW9uID09PSAxKSB7XG5cdFx0XHRcdHRoaXMuaGFuZGxlVjFTdWNjZXNzKGVhc3lGaWx0ZXJSZXN1bHQpO1xuXHRcdFx0fSBlbHNlIGlmIChlYXN5RmlsdGVyUmVzdWx0LmRhdGEudmVyc2lvbiA9PT0gMikge1xuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIHNhcC51aS5tb2RlbC5GaWx0ZXIgZnJvbSB0aGUgZmlsdGVyIGFuZCBhcHBseSBpdCBkaXJlY3RseSB0byB0aGUgbGlzdCBiaW5kaW5nXG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGVycm9yXG5cdFx0XHR0aGlzLnJlbW92ZU5vbk1hbmRhdG9yeVRva2VucygpO1xuXHRcdFx0dGhpcy5zZXRNZXNzYWdlU3RyaXAoZWFzeUZpbHRlclJlc3VsdC5tZXNzYWdlKTtcblx0XHRcdHRoaXMuaW52aXNpYmxlTWVzc2FnZS5hbm5vdW5jZSh0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoZWFzeUZpbHRlclJlc3VsdC5tZXNzYWdlKSwgSW52aXNpYmxlTWVzc2FnZU1vZGUuQXNzZXJ0aXZlKTtcblx0XHRcdHRoaXMuc3RhdGUubWVzc2FnZVN0cmlwVHlwZSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBnZW5lcmF0aW5nIGZpbHRlciBjcml0ZXJpYTogXCIsIGVhc3lGaWx0ZXJSZXN1bHQubWVzc2FnZSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5maXJlRXZlbnQoXCJhZnRlclF1ZXJ5UHJvY2Vzc2luZ1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBzdWNjZXNzIHJlc3BvbnNlIGZyb20gdGhlIEFJIHNlcnZpY2UgZm9yIHZlcnNpb24gMSBvZiB0aGUgZWFzeSBmaWx0ZXIuXG5cdCAqIEBwYXJhbSBlYXN5RmlsdGVyUmVzdWx0IFRoZSByZXN1bHQgZnJvbSB0aGUgQUkgc2VydmljZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBoYW5kbGVWMVN1Y2Nlc3MoZWFzeUZpbHRlclJlc3VsdDogU3VjY2VzczxFYXN5RmlsdGVyLkVhc3lGaWx0ZXJSZXN1bHQ+KTogdm9pZCB7XG5cdFx0aWYgKGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5maWx0ZXIpIHtcblx0XHRcdC8vIFdlIG5lZWQgdG8gc2hvdyBhIG1lc3NhZ2UgdG8gdGhlIHVzZXIgdGhhdCB0aGUgZmlsdGVyIGNyaXRlcmlhIGhhcyBiZWVuIGdlbmVyYXRlZFxuXHRcdFx0TG9nLmRlYnVnKFwiRmlsdGVyIGNyaXRlcmlhIGdlbmVyYXRlZDogXCIsIEpTT04uc3RyaW5naWZ5KGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5maWx0ZXIsIG51bGwsIDIpKTtcblxuXHRcdFx0Y29uc3QgdG9rZW5zID0gWy4uLnRoaXMuc3RhdGUudG9rZW5zXS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5pc1JlcXVpcmVkKTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGhlIHByZXZpb3VzIG1lc3NhZ2Ugc3RyaXAgZm9yIHZhbGlkYXRlZCBmaWx0ZXJzXG5cdFx0XHR0aGlzLmNsZWFyTWVzc2FnZVN0cmlwKCk7XG5cblx0XHRcdC8vIFZhbGlkYXRlIGFuZCBhcHBseSB0aGUgZmlsdGVyIGNyaXRlcmlhXG5cdFx0XHRFYXN5RmlsdGVyVXRpbHMuZm9ybWF0RGF0YShcblx0XHRcdFx0dG9rZW5zLFxuXHRcdFx0XHRlYXN5RmlsdGVyUmVzdWx0LmRhdGEuZmlsdGVyLFxuXHRcdFx0XHR0aGlzLmZpbHRlckJhck1ldGFkYXRhIGFzIEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhW10sXG5cdFx0XHRcdHRoaXMuc2V0TWVzc2FnZVN0cmlwLmJpbmQodGhpcylcblx0XHRcdCk7XG5cblx0XHRcdC8vV2Ugb25seSBoYXZlIHRvIGNhbGwgdGhlIGRhdGFGZXRjaGVyIG9uIHRoZSBWSCB0b2tlbnMgd2hpY2ggaGF2ZSBiZWVuIGFza2VkIGJ5IHRoZSB1c2VyXG5cdFx0XHQvL0luIE1hZG5hdG9yeSB0b2tlbnMgY2FzZSB0aGUgZGVmYXVsdFZhbHVlcyBhcmUgYWxyZWFkeSBnaXZlbiwgc28gbm8gbmVlZCB0byBjYWxsIGRhdGFGZXRjaGVyIG9uIGl0XG5cblx0XHRcdGNvbnN0IGFsbFZhbHVlSGVscFRva2VucyA9IHRva2Vucy5maWx0ZXIoKHJlc3VsdCkgPT4gcmVzdWx0LnR5cGUgPT09IFwiVmFsdWVIZWxwXCIpO1xuXHRcdFx0Y29uc3QgcmVxdWlyZWRWYWx1ZUhlbHBUb2tlbnMgPSBhbGxWYWx1ZUhlbHBUb2tlbnMuZmlsdGVyKCh2YWx1ZUhlbHBUb2tlbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZWFzeUZpbHRlclJlc3VsdC5kYXRhLmZpbHRlcj8uZmluZCgobGxtUmVzdWx0KSA9PiBsbG1SZXN1bHQubmFtZSA9PT0gdmFsdWVIZWxwVG9rZW4ua2V5KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAodGhpcy5kYXRhRmV0Y2hlcikge1xuXHRcdFx0XHQocmVxdWlyZWRWYWx1ZUhlbHBUb2tlbnMgYXMgdW5rbm93biBhcyBWYWx1ZUhlbHBUb2tlbkRlZmluaXRpb25bXSkuZm9yRWFjaChhc3luYyAodmFsdWVIZWxwVG9rZW4pID0+IHtcblx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmRhdGFGZXRjaGVyPy4oXG5cdFx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXksXG5cdFx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzIGFzIHVua25vd24gYXMgVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSxcblx0XHRcdFx0XHRcdGVhc3lGaWx0ZXJSZXN1bHRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmJ1c3kgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRcdFx0XHQvL1dlIHNob3VsZCBub3QgY2hhbmdlIHRoZSBtZXNzYWdlIHN0cmlwIGZvciB0aGUgZmlyc3QgdGltZSB3aGVuIHRoZSBHTyBidXR0b24gaXMgcHJlc3NlZCwgYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIGNhbGN1bGF0ZWQgaW4gdGhlIEVhc3lGaWx0ZXJVdGlscy5mb3JtYXREYXRhIG1ldGhvZFxuXHRcdFx0XHRcdFx0dGhpcy5zaG91bGRNZXNzYWdlU3RyaXBSZW1vdmUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgPSByZXN1bHQ7XG5cdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSB1cGRhdGVkVG9rZW5zO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL0lmIGRhdGFGZXRjaGVyIGlzIG5vdCB0aGVyZSwgdGhlbiBtb2NrIHRoZSB2YWx1ZSBhbmQgZGVzY3JpcHRpb24gd2l0aCB0aGUgc2FtZSByZXN1bHQgY29taW5nIGZyb20gdGhlIExMTVxuXHRcdFx0XHRyZXF1aXJlZFZhbHVlSGVscFRva2Vucy5mb3JFYWNoKCh2YWx1ZUhlbHBUb2tlbikgPT4ge1xuXHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmJ1c3kgPSBmYWxzZTtcblx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzLmZvckVhY2goKGtleVNwZWNpZmljVmFsdWUsIGlkeCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGtleVNwZWNpZmljVmFsdWUub3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLkJUIHx8IGtleVNwZWNpZmljVmFsdWUub3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLk5CKSB7XG5cdFx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNbaWR4XS5zZWxlY3RlZFZhbHVlcyA9IFtcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZToga2V5U3BlY2lmaWNWYWx1ZS5zZWxlY3RlZFZhbHVlc1swXSxcblx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBrZXlTcGVjaWZpY1ZhbHVlLnNlbGVjdGVkVmFsdWVzWzBdIGFzIHVua25vd24gYXMgbGxtUmVzdWx0Rm9yU2VsZWN0ZWRWYWx1ZXNUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZToga2V5U3BlY2lmaWNWYWx1ZS5zZWxlY3RlZFZhbHVlc1sxXSxcblx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiBrZXlTcGVjaWZpY1ZhbHVlLnNlbGVjdGVkVmFsdWVzWzFdIGFzIHVua25vd24gYXMgbGxtUmVzdWx0Rm9yU2VsZWN0ZWRWYWx1ZXNUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc1tpZHhdLnNlbGVjdGVkVmFsdWVzLmZvckVhY2goKHZhbHVlLCBzdWJJbmR4KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc1tpZHhdLnNlbGVjdGVkVmFsdWVzW3N1YkluZHhdID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogdmFsdWUgYXMgdW5rbm93biBhcyBsbG1SZXN1bHRGb3JTZWxlY3RlZFZhbHVlc1R5cGVcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHVwZGF0ZWRUb2tlbnMgPSB0aGlzLnZlcmlmeVNpbmdsZVNlbGVjdFRva2VuVmFsdWVzKHRva2Vucyk7XG5cdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSB0cnVlO1xuXHRcdFx0dGhpcy5zdGF0ZS50aHVtYkJ1dHRvbkVuYWJsZWQgPSB0cnVlO1xuXHRcdFx0dGhpcy5zdGF0ZS50aHVtYkRvd25CdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0XHR0aGlzLnN0YXRlLnRodW1iVXBCdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0XHR0aGlzLnN0YXRlLnRva2VucyA9IHVwZGF0ZWRUb2tlbnM7XG5cdFx0fVxuXHR9XG5cblx0Ly9ldmVyeSBzaW5nbGUgc2VsZWN0IG1lbnUgdHlwZSBzaG91bGQgaGF2ZSBvbmx5IG9uZSB2YWx1ZSwgZWxzZSBzcGxpY2UgdG8gb25lIHZhbHVlIGFuZCB1cGRhdGUgdGhlICBtZXNzYWdlIHN0cmlwXG5cdHZlcmlmeVNpbmdsZVNlbGVjdFRva2VuVmFsdWVzKHRva2VuczogVG9rZW5EZWZpbml0aW9uW10pOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0Y29uc3Qgc2luZ2xlU2VsZWN0VG9rZW5MYWJlbHM6IHN0cmluZ1tdID0gW107XG5cdFx0dG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRpZiAodG9rZW4udHlwZSA9PT0gXCJNZW51V2l0aFNpbmdsZVNlbGVjdFwiKSB7XG5cdFx0XHRcdGlmICh0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzWzBdLnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRzaW5nbGVTZWxlY3RUb2tlbkxhYmVscy5wdXNoKHRva2VuLmxhYmVsKTtcblx0XHRcdFx0XHR0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzWzBdLnNlbGVjdGVkVmFsdWVzLnNwbGljZSgxKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChzaW5nbGVTZWxlY3RUb2tlbkxhYmVscy5sZW5ndGgpIHtcblx0XHRcdHRoaXMuc3RhdGUuc2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBUZXh0ID0gdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9TSU5HTEVfVkFMVUVfTUVTU0FHRVwiLCBbXG5cdFx0XHRcdGA8c3Ryb25nPiR7c2luZ2xlU2VsZWN0VG9rZW5MYWJlbHMuam9pbihcIiwgXCIpfTwvc3Ryb25nPmBcblx0XHRcdF0pO1xuXHRcdFx0dGhpcy5zdGF0ZS5zaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXAgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gdG9rZW5zO1xuXHR9XG5cblx0Y2xlYXJNZXNzYWdlU3RyaXAoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYkRvd25CdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYlVwQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUuc2hvd01lc3NhZ2VTdHJpcCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUubWVzc2FnZVN0cmlwVGV4dCA9IFwiXCI7XG5cdFx0dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUeXBlID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH1cblxuXHRjbGVhck1lc3NhZ2VTdHJpcEZvclNpbmdsZVZhbHVlKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUuc2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS5zaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQgPSBcIlwiO1xuXHR9XG5cblx0c2V0TWVzc2FnZVN0cmlwKHRleHQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUudGh1bWJEb3duQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUudGh1bWJVcEJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLnRodW1iQnV0dG9uRW5hYmxlZCA9IHRydWU7XG5cdFx0dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUZXh0ID0gdGV4dDtcblx0XHR0aGlzLnN0YXRlLnNob3dNZXNzYWdlU3RyaXAgPSB0cnVlO1xuXHR9XG5cblx0Y3JlYXRlUG9wb3ZlckZvcklubmVyQ29udHJvbHMoKTogUG9wb3ZlciB7XG5cdFx0aWYgKCF0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIpIHtcblx0XHRcdHRoaXMuaW5uZXJDb250cm9sUG9wb3ZlciA9IChcblx0XHRcdFx0PFBvcG92ZXJcblx0XHRcdFx0XHRpZD17dGhpcy5nZXRJZCgpICsgXCItaW5uZXJQb3BvdmVyXCJ9XG5cdFx0XHRcdFx0c2hvd0Fycm93PXtmYWxzZX1cblx0XHRcdFx0XHRzaG93SGVhZGVyPXt0cnVlfVxuXHRcdFx0XHRcdHBsYWNlbWVudD17UGxhY2VtZW50VHlwZS5Cb3R0b219XG5cdFx0XHRcdFx0Y2xhc3M9XCJzYXBVaU1lZGl1bU1hcmdpbkJvdHRvbVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Zm9vdGVyOiB0aGlzLmdldFRvb2xiYXIoKVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvUG9wb3Zlcj5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIgYXMgUG9wb3Zlcjtcblx0fVxuXG5cdGdldFRvb2xiYXIoKTogT3ZlcmZsb3dUb29sYmFyIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMudG9vbGJhcikge1xuXHRcdFx0Y29uc3Qgb2tCdXR0b24gPSB0aGlzLmdldE9rQnV0dG9uKCk7XG5cdFx0XHRjb25zdCBzaG93QWxsQnV0dG9uID0gdGhpcy5nZXRTaG93QWxsQnV0dG9uKCk7XG5cdFx0XHR0aGlzLnRvb2xiYXIgPSAoXG5cdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXI+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0XHQ8VG9vbGJhclNwYWNlciAvPlxuXHRcdFx0XHRcdFx0XHRcdHtva0J1dHRvbn1cblx0XHRcdFx0XHRcdFx0XHR7c2hvd0FsbEJ1dHRvbn1cblx0XHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9PdmVyZmxvd1Rvb2xiYXI+XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy50b29sYmFyO1xuXHR9XG5cblx0Z2V0T2tCdXR0b24oKTogQnV0dG9uIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMub2tCdXR0b24pIHtcblx0XHRcdHRoaXMub2tCdXR0b24gPSA8QnV0dG9uIHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9PS1wiKX0gdHlwZT17QnV0dG9uVHlwZS5FbXBoYXNpemVkfSAvPjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMub2tCdXR0b247XG5cdH1cblxuXHRnZXRTaG93QWxsQnV0dG9uKCk6IEJ1dHRvbiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCF0aGlzLnNob3dBbGxCdXR0b24pIHtcblx0XHRcdHRoaXMuc2hvd0FsbEJ1dHRvbiA9IDxCdXR0b24gdGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX1NIT1dfQUxMX0lURU1TXCIpfSAvPjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuc2hvd0FsbEJ1dHRvbjtcblx0fVxuXG5cdGZvcm1hdFRva2Vucyh0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdKTogVG9rZW5EZWZpbml0aW9uW10ge1xuXHRcdHJldHVybiB0b2tlbnMubWFwKCh0b2tlbikgPT4ge1xuXHRcdFx0aWYgKHRva2VuLnR5cGUgPT09IFwiVmFsdWVIZWxwXCIpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHQuLi50b2tlbixcblx0XHRcdFx0XHRrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzOiB0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzLm1hcCgodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdC8vTWFraW5nIHN1cmUgdGhhdCBvbmx5IHRoZSBpZCBwYXJ0IGlzIHBhc3NlZFxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IHZhbHVlLm9wZXJhdG9yLFxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZFZhbHVlczogdmFsdWUuc2VsZWN0ZWRWYWx1ZXMubWFwKCh2YWwpID0+IHZhbC52YWx1ZSlcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSBhcyBUb2tlbkRlZmluaXRpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZGVlcENsb25lKHRva2VuKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdG9uU3RhdGVDaGFuZ2UoY2hhbmdlZFByb3BzOiBzdHJpbmdbXSA9IFtdKTogdm9pZCB7XG5cdFx0aWYgKGNoYW5nZWRQcm9wcy5pbmNsdWRlcyhcInRva2Vuc1wiKSkge1xuXHRcdFx0aWYgKHRoaXMuc2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkKSB7XG5cdFx0XHRcdHRoaXMuZmlyZUV2ZW50KFwidG9rZW5zQ2hhbmdlZFwiLCB7XG5cdFx0XHRcdFx0dG9rZW5zOiB0aGlzLmZvcm1hdFRva2Vucyh0aGlzLnN0YXRlLnRva2VucyBhcyB1bmtub3duIGFzIFRva2VuRGVmaW5pdGlvbltdKSxcblx0XHRcdFx0XHRyZXNldDogdGhpcy5pc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2Vuc1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc3RhdGUuc2hvd1Jlc3VsdCA9IHRoaXMuc3RhdGUudG9rZW5zLmxlbmd0aCA+IDA7XG5cdFx0XHRpZiAoISh0aGlzLmlzTWFuZGF0b3J5Q2hlY2tSZXF1aXJlZCA/PyBmYWxzZSkpIHtcblx0XHRcdFx0dGhpcy5jaGVja0lmQWxsTWFuZGF0b3J5VG9rZW5zRmlsbGVkKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLnNob3VsZE1lc3NhZ2VTdHJpcFJlbW92ZSkge1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogVGhlIHVzZXIgaGFzIGFja25vd2xlZGdlZCB0aGUgbWVzc2FnZSBzdHJpcCBhbmQgdW5kZXJzdG9vZCB0aGUgaXNzdWUuXG5cdFx0XHRcdCAqIFdoZW4gdGhlIHRva2VucyBhcmUgdXBkYXRlZCBuZXh0IHRpbWUsIGRpc3BsYXlpbmcgdGhlIG1lc3NhZ2Ugc3RyaXAgYWdhaW4gc2VydmVzIG5vIHB1cnBvc2UuXG5cdFx0XHRcdCAqIEFkZGl0aW9uYWxseSwgb25jZSB0aGUgdG9rZW5zIGFyZSB1cGRhdGVkLCB0aGUgaW5wdXQgZmllbGQgdGV4dCB3aWxsIGJlIHJlbW92ZWRcblx0XHRcdFx0ICogcmVuZGVyaW5nIHRoZSBtZXNzYWdlIHN0cmlwIGlycmVsZXZhbnQuIEhvd2V2ZXIsIHRoZSBtZXNzYWdlIHN0cmlwIHdpbGwgYmUgZGlzcGxheWVkIGFnYWluIHRoZSBuZXh0IHRpbWUgdGhlIFwiR09cIiBidXR0b24gaXMgcHJlc3NlZC5cblx0XHRcdFx0ICovXG5cdFx0XHRcdHRoaXMuY2xlYXJNZXNzYWdlU3RyaXAoKTtcblx0XHRcdFx0dGhpcy5jbGVhck1lc3NhZ2VTdHJpcEZvclNpbmdsZVZhbHVlKCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnNob3VsZE1lc3NhZ2VTdHJpcFJlbW92ZSA9IHRydWU7XG5cdFx0fVxuXHRcdC8vUmVzZXR0aW5nIHRvIGRlZmF1bHQgdmFsdWVzXG5cdFx0dGhpcy5pc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQgPSBmYWxzZTtcblx0XHR0aGlzLnNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IHRydWU7XG5cdFx0dGhpcy5pc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2VucyA9IGZhbHNlO1xuXG5cdFx0Ly8gIG9uc2FwZm9jdXNsZWF2ZSBtZXRob2QgaW4gc2FwLm0uVG9rZW5pemVyIGlzIGF1dG9tYXRpY2FsbHkgY29udmVydGluZyB0aGUgcmVuZGVybW9kZSBvZiB0b2tlbml6ZXIgdG8gXCJOYXJyb3dcIiBmcm9tIFwibG9vc2VcIlxuXHRcdC8vICBJbiB0aGlzIHByb2Nlc3MgdGhlcmUgYXJlIG11bHRpcGxlIHBvcG92ZXIgaXNzdWVzIGhhcHBlbmluZ1xuXHRcdC8vICBTbyBhcyBhIHRlbXBvcmFyeSBmaXggb3ZlcnJpZGluZyB0aGUgZnVuY3Rpb25cblx0XHQodGhpcy50b2tlbml6ZXI/LmN1cnJlbnQgYXMgRm9jdXNIYW5kbGluZ0NvbnRyb2wpLm9uc2FwZm9jdXNsZWF2ZSA9ICgpOiB2b2lkID0+IHt9O1xuXHR9XG5cblx0cHJpdmF0ZSBvblRodW1iVXBQcmVzc2VkKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUudGh1bWJVcEJ1dHRvblByZXNzZWQgPSB0cnVlO1xuXHRcdHRoaXMuc3RhdGUudGh1bWJEb3duQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRyaWdnZXJQWEludGVncmF0aW9uKFwidGh1bWJVcFwiKTtcblx0XHR0aGlzLm9uVGh1bWJQcmVzc2VkKCk7XG5cdH1cblxuXHRwcml2YXRlIG9uVGh1bWJEb3duUHJlc3NlZCgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLnRodW1iRG93bkJ1dHRvblByZXNzZWQgPSB0cnVlO1xuXHRcdHRoaXMuc3RhdGUudGh1bWJVcEJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHR0cmlnZ2VyUFhJbnRlZ3JhdGlvbihcInRodW1iRG93blwiKTtcblx0XHR0aGlzLm9uVGh1bWJQcmVzc2VkKCk7XG5cdH1cblxuXHRwcml2YXRlIG9uVGh1bWJQcmVzc2VkKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUudGh1bWJCdXR0b25FbmFibGVkID0gZmFsc2U7XG5cdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19FQVNZX0ZJTFRFUl9GRUVEQkFDS19TRU5UXCIpKTtcblx0fVxuXG5cdGNyZWF0ZUNvbnRlbnQoKTogVkJveCB7XG5cdFx0Y29uc3QgJHRvcEdvQnRuID0gY3JlYXRlUmVmZXJlbmNlPEJ1dHRvbj4oKTtcblx0XHRjb25zdCB0aHVtYlVwQnV0dG9uVG9rZW5pemVyID0gKFxuXHRcdFx0PFRvZ2dsZUJ1dHRvblxuXHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vdGh1bWItdXBcIn1cblx0XHRcdFx0dG9vbHRpcD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19FQVNZX0ZJTFRFUl9USFVNQlNfVVBcIil9XG5cdFx0XHRcdHR5cGU9e1wiVHJhbnNwYXJlbnRcIn1cblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vblRodW1iVXBQcmVzc2VkKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVuYWJsZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iQnV0dG9uRW5hYmxlZFwiKX1cblx0XHRcdFx0cHJlc3NlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJVcEJ1dHRvblByZXNzZWRcIil9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKHRodW1iVXBCdXR0b25Ub2tlbml6ZXIsIFwicHJlc3NcIiwgXCJmZTQ6ZWZ0OnQ6dGh1bWJVcFwiKTtcblx0XHRjb25zdCB0aHVtYkRvd25CdXR0b25Ub2tlbml6ZXIgPSAoXG5cdFx0XHQ8VG9nZ2xlQnV0dG9uXG5cdFx0XHRcdGljb249e1wic2FwLWljb246Ly90aHVtYi1kb3duXCJ9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRUFTWV9GSUxURVJfVEhVTUJTX0RPV05cIil9XG5cdFx0XHRcdHR5cGU9e1wiVHJhbnNwYXJlbnRcIn1cblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vblRodW1iRG93blByZXNzZWQoKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0ZW5hYmxlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJCdXR0b25FbmFibGVkXCIpfVxuXHRcdFx0XHRwcmVzc2VkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYkRvd25CdXR0b25QcmVzc2VkXCIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSh0aHVtYkRvd25CdXR0b25Ub2tlbml6ZXIsIFwicHJlc3NcIiwgXCJmZTQ6ZWZ0OnQ6dGh1bWJEb3duXCIpO1xuXHRcdGNvbnN0IHRodW1iVXBCdXR0b25NZXNzYWdlU3RyaXBlID0gKFxuXHRcdFx0PFRvZ2dsZUJ1dHRvblxuXHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vdGh1bWItdXBcIn1cblx0XHRcdFx0dG9vbHRpcD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19FQVNZX0ZJTFRFUl9USFVNQlNfVVBcIil9XG5cdFx0XHRcdHR5cGU9e1wiVHJhbnNwYXJlbnRcIn1cblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vblRodW1iVXBQcmVzc2VkKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVuYWJsZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iQnV0dG9uRW5hYmxlZFwiKX1cblx0XHRcdFx0cHJlc3NlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJVcEJ1dHRvblByZXNzZWRcIil9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKHRodW1iVXBCdXR0b25NZXNzYWdlU3RyaXBlLCBcInByZXNzXCIsIFwiZmU0OmVmdDptczp0aHVtYlVwXCIpO1xuXHRcdGNvbnN0IHRodW1iRG93bkJ1dHRvbk1lc3NhZ2VTdHJpcGUgPSAoXG5cdFx0XHQ8VG9nZ2xlQnV0dG9uXG5cdFx0XHRcdGljb249e1wic2FwLWljb246Ly90aHVtYi1kb3duXCJ9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRUFTWV9GSUxURVJfVEhVTUJTX0RPV05cIil9XG5cdFx0XHRcdHR5cGU9e1wiVHJhbnNwYXJlbnRcIn1cblx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vblRodW1iRG93blByZXNzZWQoKTtcblx0XHRcdFx0fX1cblx0XHRcdFx0ZW5hYmxlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJCdXR0b25FbmFibGVkXCIpfVxuXHRcdFx0XHRwcmVzc2VkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYkRvd25CdXR0b25QcmVzc2VkXCIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSh0aHVtYkRvd25CdXR0b25NZXNzYWdlU3RyaXBlLCBcInByZXNzXCIsIFwiZmU0OmVmdDptczp0aHVtYkRvd25cIik7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29udHJvbHNcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdFx0Y29uc3QgYWlOb3RpY2VDb250cm9sID0gdGhpcy5haU5vdGljZSA/IChcblx0XHRcdHRoaXMuYWlOb3RpY2UuY2xvbmUoKVxuXHRcdCkgOiAoXG5cdFx0XHQ8QUlOb3RpY2UgdHlwZT1cIkJ1dHRvblwiPlxuXHRcdFx0XHQ8VkJveD5cblx0XHRcdFx0XHQ8VGV4dCBjbGFzcz1cInNhcEZlQ29udHJvbHNBaVBvcG92ZXJUZXh0MVwiIHRleHQ9e3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX05PVElDRV9BSV9QT1BPVkVSX1RFWFRfMVwiKX0gLz5cblx0XHRcdFx0XHQ8VGV4dCBjbGFzcz1cInNhcEZlQ29udHJvbHNBaVBvcG92ZXJUZXh0MlwiIHRleHQ9e3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX05PVElDRV9BSV9QT1BPVkVSX1RFWFRfMlwiKX0gLz5cblx0XHRcdFx0PC9WQm94PlxuXHRcdFx0PC9BSU5vdGljZT5cblx0XHQpO1xuXHRcdGNvbnN0IG91dFZCb3ggPSAoXG5cdFx0XHQ8VkJveD5cblx0XHRcdFx0PEZsZXhCb3ggcmVuZGVyVHlwZT1cIkJhcmVcIj5cblx0XHRcdFx0XHQ8RWFzeUZpbHRlcklucHV0XG5cdFx0XHRcdFx0XHRyZWNvbW1lbmRlZFZhbHVlcz17dGhpcy5yZWNvbW1lbmRlZFZhbHVlc31cblx0XHRcdFx0XHRcdHJlZj17dGhpcy5lYXN5RmlsdGVySW5wdXR9XG5cdFx0XHRcdFx0XHRlbnRlclByZXNzZWQ9e3RoaXMub25FbnRlclByZXNzZWQuYmluZCh0aGlzKX1cblx0XHRcdFx0XHRcdHF1ZXJ5Q2hhbmdlZD17KGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJxdWVyeUNoYW5nZWRcIiwgeyBxdWVyeTogZS5nZXRQYXJhbWV0ZXIoXCJxdWVyeVwiKSB9KTtcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRsaXZlQ2hhbmdlPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUudG9rZW5pemVyRWRpdGFibGUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0Lz5cblxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGljb249e1wic2FwLWljb246Ly9haVwifVxuXHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlTbWFsbE1hcmdpbkJlZ2luXCJ9XG5cdFx0XHRcdFx0XHRyZWY9eyR0b3BHb0J0bn1cblx0XHRcdFx0XHRcdHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfR09cIil9XG5cdFx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLkVtcGhhc2l6ZWR9XG5cdFx0XHRcdFx0XHRwcmVzcz17dGhpcy5vbkdvQnV0dG9uUHJlc3MuYmluZCh0aGlzKX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdDxGbGV4Qm94XG5cdFx0XHRcdFx0cmVuZGVyVHlwZT1cIkJhcmVcIlxuXHRcdFx0XHRcdHZpc2libGU9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInNob3dSZXN1bHRcIil9XG5cdFx0XHRcdFx0YWxpZ25JdGVtcz17RmxleEFsaWduSXRlbXMuQ2VudGVyfVxuXHRcdFx0XHRcdHdyYXA9e0ZsZXhXcmFwLldyYXB9XG5cdFx0XHRcdFx0anVzdGlmeUNvbnRlbnQ9e0ZsZXhKdXN0aWZ5Q29udGVudC5TcGFjZUJldHdlZW59XG5cdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlUaW55TWFyZ2luVG9wXCJ9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8RmxleEJveCBjbGFzcz17XCJzYXBGZUNvbnRyb2xzR2FwOHB4XCJ9IHJlbmRlclR5cGU9XCJCYXJlXCIgYWxpZ25JdGVtcz17RmxleEFsaWduSXRlbXMuQ2VudGVyfSB3cmFwPXtGbGV4V3JhcC5XcmFwfT5cblx0XHRcdFx0XHRcdHthaU5vdGljZUNvbnRyb2x9XG5cdFx0XHRcdFx0XHQ8VG9rZW5pemVyXG5cdFx0XHRcdFx0XHRcdGVkaXRhYmxlPXthbmQoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidG9rZW5pemVyRWRpdGFibGVcIiksIHRydWUpfVxuXHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBGZUNvbnRyb2xzVG9rZW5pemVyXCJ9XG5cdFx0XHRcdFx0XHRcdHRva2Vucz17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidG9rZW5zXCIpfVxuXHRcdFx0XHRcdFx0XHRyZW5kZXJNb2RlPXtUb2tlbml6ZXJSZW5kZXJNb2RlLkxvb3NlfVxuXHRcdFx0XHRcdFx0XHRyZWY9e3RoaXMudG9rZW5pemVyfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdHRva2VuczogKGlkeDogbnVtYmVyLCBjdHg6IENvbnRleHQpOiBUb2tlbiA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBvYmplY3QgPSBjdHguZ2V0T2JqZWN0KCkgYXMgVG9rZW5EZWZpbml0aW9uO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PFRva2VuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXt0aGlzLnN0YXRlLnRva2Vucy5rZXl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGFiZWw9e3RoaXMuc3RhdGUudG9rZW5zLmxhYmVsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zPXt0aGlzLnN0YXRlLnRva2Vucy5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1hbmRhdG9yeT17dGhpcy5pc0tleU1hbmRhdG9yeShvYmplY3Qua2V5KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRidXN5PXt0aGlzLnN0YXRlLnRva2Vucy5idXN5fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlbGV0ZT17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgdG9rZW5JbmRleCA9IHRoaXMuc3RhdGUudG9rZW5zLmZpbmRJbmRleCgodG9rZW4pID0+IHRva2VuLmtleSA9PT0gb2JqZWN0LmtleSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBuZXdUb2tlbnMgPSB0aGlzLnN0YXRlLnRva2Vucy5jb25jYXQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5ld1Rva2Vucy5zcGxpY2UodG9rZW5JbmRleCwgMSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnRva2VucyA9IG5ld1Rva2Vucztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMudXBkYXRlRmlsdGVySW5wdXQoXCJ0b2tlblVwZGF0ZWRcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdXN0b21EYXRhOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxDdXN0b21EYXRhIGtleT1cIlRva2VuSW5mb1wiIHZhbHVlPXtvYmplY3R9IC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tRGF0YSBrZXk9XCJwb3BvdmVyXCIgdmFsdWU9e3RoaXMuaW5uZXJDb250cm9sUG9wb3Zlcn0gLz4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxDdXN0b21EYXRhIGtleT1cImVhc3lGaWx0ZXJCYXJDb250YWluZXJcIiB2YWx1ZT17dGhpc30gLz4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxDdXN0b21EYXRhXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PVwiY29kZUxpc3RcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXt0aGlzLmZpbHRlckJhck1ldGFkYXRhPy5maW5kKChkYXRhKSA9PiBkYXRhLm5hbWUgPT09IG9iamVjdC5rZXkpPy5jb2RlTGlzdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L1Rva2VuPlxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQ8L1Rva2VuaXplcj5cblx0XHRcdFx0XHRcdDxIQm94PlxuXHRcdFx0XHRcdFx0XHR7dGh1bWJVcEJ1dHRvblRva2VuaXplcn0sIHt0aHVtYkRvd25CdXR0b25Ub2tlbml6ZXJ9XG5cdFx0XHRcdFx0XHQ8L0hCb3g+XG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUkVTRVRcIil9XG5cdFx0XHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5yZXNldFN0YXRlKHRydWUsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdC8vUmV0YWluaW5nIHRoZSBmb2N1cyBvbiBwb3BvdmVyIGRvZXNuJ3QgbWFrZSB0aGUgcG9wb3ZlciBjbG9zZSBvbiBldmVyeSBpbnRlcmFjdGlvblxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LiRzZWFyY2hJbnB1dC5mb2N1cygpO1xuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0PEZsZXhCb3ggcmVuZGVyVHlwZT1cIkJhcmVcIj5cblx0XHRcdFx0XHQ8TWVzc2FnZVN0cmlwXG5cdFx0XHRcdFx0XHR0ZXh0PXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJzaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHRcIil9XG5cdFx0XHRcdFx0XHRzaG93SWNvbj17dHJ1ZX1cblx0XHRcdFx0XHRcdGVuYWJsZUZvcm1hdHRlZFRleHQ9e3RydWV9XG5cdFx0XHRcdFx0XHR2aXNpYmxlPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJzaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBcIil9XG5cdFx0XHRcdFx0XHRzaG93Q2xvc2VCdXR0b249e3RydWV9XG5cdFx0XHRcdFx0XHRjbG9zZT17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNsZWFyTWVzc2FnZVN0cmlwRm9yU2luZ2xlVmFsdWUoKTtcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0PjwvTWVzc2FnZVN0cmlwPlxuXHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdDxGbGV4Qm94IHJlbmRlclR5cGU9XCJCYXJlXCIgY2xhc3M9e1wic2FwRmVDb250cm9sc0dhcDhweFwifT5cblx0XHRcdFx0XHQ8TWVzc2FnZVN0cmlwXG5cdFx0XHRcdFx0XHR0eXBlPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJtZXNzYWdlU3RyaXBUeXBlXCIpfVxuXHRcdFx0XHRcdFx0dGV4dD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwibWVzc2FnZVN0cmlwVGV4dFwiKX1cblx0XHRcdFx0XHRcdHNob3dJY29uPXt0cnVlfVxuXHRcdFx0XHRcdFx0ZW5hYmxlRm9ybWF0dGVkVGV4dD17dHJ1ZX1cblx0XHRcdFx0XHRcdHNob3dDbG9zZUJ1dHRvbj17dHJ1ZX1cblx0XHRcdFx0XHRcdGNsb3NlPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuY2xlYXJNZXNzYWdlU3RyaXAoKTtcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHR2aXNpYmxlPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJzaG93TWVzc2FnZVN0cmlwXCIpfVxuXHRcdFx0XHRcdD48L01lc3NhZ2VTdHJpcD5cblx0XHRcdFx0XHQ8SEJveCB2aXNpYmxlPXthbmQoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2hvd01lc3NhZ2VTdHJpcFwiKSwgbm90KGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInNob3dSZXN1bHRcIikpKX0+XG5cdFx0XHRcdFx0XHR7dGh1bWJVcEJ1dHRvbk1lc3NhZ2VTdHJpcGV9LCB7dGh1bWJEb3duQnV0dG9uTWVzc2FnZVN0cmlwZX1cblx0XHRcdFx0XHQ8L0hCb3g+XG5cdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdDwvVkJveD5cblx0XHQpIGFzIFZCb3g7XG5cdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKCR0b3BHb0J0bi5jdXJyZW50ISwgXCJwcmVzc1wiLCBcImZlOmFpOnNlYXJjaFwiKTtcblx0XHRyZXR1cm4gb3V0VkJveDtcblx0fVxuXG5cdGFzeW5jIG9uR29CdXR0b25QcmVzcygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLnN0YXRlLnRva2VuaXplckVkaXRhYmxlID0gdHJ1ZTtcblx0XHRsZXQgY3VycmVudElucHV0VmFsdWUgPSB0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5nZXRWYWx1ZSgpO1xuXHRcdGNvbnN0IGN1cnJlbnRJbnB1dFBsYWNlaG9sZGVyID0gdGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uZ2V0UGxhY2Vob2xkZXIoKTtcblxuXHRcdGlmIChjdXJyZW50SW5wdXRWYWx1ZSA9PT0gXCJcIiAmJiBjdXJyZW50SW5wdXRQbGFjZWhvbGRlciAhPT0gdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QTEFDRUhPTERFUlwiKSkge1xuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0VmFsdWUoY3VycmVudElucHV0UGxhY2Vob2xkZXIgfHwgXCJcIik7XG5cdFx0XHRjdXJyZW50SW5wdXRWYWx1ZSA9IGN1cnJlbnRJbnB1dFBsYWNlaG9sZGVyO1xuXHRcdH1cblx0XHRhd2FpdCB0aGlzLm9uR29QcmVzcyhjdXJyZW50SW5wdXRWYWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVzZXRzIHRoZSBzdGF0ZSBvZiB0aGUgRWFzeUZpbHRlckJhckNvbnRhaW5lciB0byBpdHMgaW5pdGlhbCBjb25maWd1cmF0aW9uLlxuXHQgKlxuXHQgKiBUaGlzIG1ldGhvZCBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIGFjdGlvbnM6XG5cdCAqIC0gQ2xlYXJzIGFsbCBub24tbWFuZGF0b3J5IHRva2VucyBhbmQgcmVzZXRzIG1hbmRhdG9yeSB0b2tlbnMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXNcblx0ICogLSBSZXNldHMgdGhlIGlucHV0IGZpZWxkIHRvIGl0cyBkZWZhdWx0IHBsYWNlaG9sZGVyIHRleHRcblx0ICogLSBDbGVhcnMgYWxsIGVycm9yIHZhbHVlIHN0YXRlcyBhbmQgbWVzc2FnZXMgZnJvbSB0b2tlbnNcblx0ICogLSBDbGVhcnMgYW55IGRpc3BsYXllZCBtZXNzYWdlIHN0cmlwc1xuXHQgKiAtIE9wdGlvbmFsbHkgZmlyZXMgdGhlIGNsZWFyRmlsdGVycyBldmVudCB0byBub3RpZnkgY29uc3VtZXJzXG5cdCAqIEBwYXJhbSBjbGVhckFsbEZpbHRlcnMgSWYgdHJ1ZSwgZmlyZXMgdGhlIGNsZWFyRmlsdGVycyBldmVudCB0byBub3RpZnkgY29uc3VtZXJzIHRoYXQgZmlsdGVycyBzaG91bGQgYmUgY2xlYXJlZCBlbHNlIGp1c3QgcmVzZXRzIHRoZSB0b2tlbnMgd2l0aG91dCBmaXJpbmcgdGhlIGV2ZW50XG5cdCAqIEBwYXJhbSBpc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2VucyBJZiB0cnVlLCBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVzZXRCdXR0b24gaXMgcmVzdG9yaW5nIHRva2VucyB0byB0aGVpciBkZWZhdWx0IHZhbHVlc1xuXHQgKi9cblxuXHRyZXNldFN0YXRlKGNsZWFyQWxsRmlsdGVycyA9IHRydWUsIGlzUmVzZXR0aW5nVG9EZWZhdWx0VG9rZW5zID0gZmFsc2UpOiB2b2lkIHtcblx0XHRpZiAoY2xlYXJBbGxGaWx0ZXJzKSB7XG5cdFx0XHR0aGlzLmZpcmVFdmVudChcImNsZWFyRmlsdGVyc1wiKTtcblx0XHRcdHRoaXMuaXNSZXNldHRpbmdUb0RlZmF1bHRUb2tlbnMgPSBpc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2Vucztcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQgPSBmYWxzZTtcblx0XHR9XG5cdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSB0aGlzLmdldERlZmF1bHRUb2tlbnMoKTtcblx0XHR0aGlzLnVwZGF0ZUZpbHRlcklucHV0KFwidG9rZW5SZXNldFwiKTtcblx0XHR0aGlzLnN0YXRlLnRva2VuaXplckVkaXRhYmxlID0gdHJ1ZTtcblx0XHR0aGlzLmlzTWFuZGF0b3J5Q2hlY2tSZXF1aXJlZCA9IHRydWU7XG5cdFx0Ly9TZXQgdGhlIFZhbHVlIFN0YXRlcyBvZiBhbGwgdGhlIFRva2VucyBiYWNrIHRvIE5vbmVcblx0XHR0aGlzLnRva2VuaXplci5jdXJyZW50Py5nZXRUb2tlbnMoKS5mb3JFYWNoKCh0b2tlbikgPT4gdG9rZW4uc2V0UHJvcGVydHkoXCJ2YWx1ZVN0YXRlXCIsIFZhbHVlU3RhdGUuTm9uZSkpO1xuXHRcdHRoaXMudG9rZW5pemVyLmN1cnJlbnQ/LmdldFRva2VucygpLmZvckVhY2goKHRva2VuKSA9PiB0b2tlbi5zZXRQcm9wZXJ0eShcInZhbHVlU3RhdGVUZXh0XCIsIG51bGwpKTtcblx0XHR0aGlzLmNsZWFyTWVzc2FnZVN0cmlwKCk7IC8vY2xlYXIgdGhlIG1lc3NhZ2Ugc3RyaXAgZm9yIHZhbGlkYXRlZCBmaWx0ZXJzXG5cdH1cblxuXHQvL1RoZSBiZWxvdyBjb2RlIHVwZGF0ZXMgdGhlIGV4aXN0aW5nIHN0YXRlIGJ5IGZldGNoaW5nIHRoZSBrZXkgYW5kIHNlbGVjdGVkVmFsdWVzXG5cdHVwZGF0ZVRva2VuQXJyYXkoXG5cdFx0Y2hhbmdlVHlwZTogVG9rZW5TZXR0ZXJzLFxuXHRcdG5ld1Rva2VuU3BlY2lmaWNWYWx1ZXM6IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10gfCBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSxcblx0XHR0b2tlbktleTogc3RyaW5nXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IG5ld1Rva2VucyA9IHRoaXMuc3RhdGUudG9rZW5zLm1hcCgodG9rZW4pID0+ICh7IC4uLnRva2VuLCBrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzOiBbLi4udG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc10gfSkpO1xuXHRcdGNvbnN0IHRva2VuSW5kZXggPSBuZXdUb2tlbnMuZmluZEluZGV4KCh0KSA9PiB0LmtleSA9PT0gdG9rZW5LZXkpO1xuXHRcdGNvbnN0IHRva2VuID0gbmV3VG9rZW5zW3Rva2VuSW5kZXhdO1xuXHRcdGlmICh0b2tlbkluZGV4ICE9IC0xKSB7XG5cdFx0XHRzd2l0Y2ggKGNoYW5nZVR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcInNldFNlbGVjdGVkVmFsdWVzXCI6XG5cdFx0XHRcdFx0dGhpcy5zZXRTZWxlY3RlZFZhbHVlcyh0b2tlbiBhcyBUb2tlbkRlZmluaXRpb24sIG5ld1Rva2VuU3BlY2lmaWNWYWx1ZXMsIHRva2VuSW5kZXgsIG5ld1Rva2VucyBhcyBUb2tlbkRlZmluaXRpb25bXSk7XG5cdFx0XHRcdFx0dG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyA9IG5ld1Rva2VuU3BlY2lmaWNWYWx1ZXM7XG5cdFx0XHRcdFx0Ly9SZW1vdmUgdGhlIHRva2VuIGVudGlyZWx5XG5cdFx0XHRcdFx0aWYgKCF0aGlzLmlzS2V5TWFuZGF0b3J5KHRva2VuLmtleSkgJiYgdG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRcdG5ld1Rva2Vucy5zcGxpY2UodG9rZW5JbmRleCwgMSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdExvZy5lcnJvcihcIlNwZWNpZnlpbmcgYSBzZXR0ZXIgdGhhdCBpcyBvdXQgb2YgdGhlIGJvdW5kYXJ5XCIpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Ly8gVXBkYXRlIHRoZSBzdGF0ZSBieSBhc3NpZ25pbmcgdGhlIG5ldyB0b2tlbnMgYXJyYXlcblx0XHRcdHRoaXMuc3RhdGUudG9rZW5zID0gbmV3VG9rZW5zIGFzIFRva2VuRGVmaW5pdGlvbltdO1xuXHRcdFx0dGhpcy5zdGF0ZS5zaG93UmVzdWx0ID0gbmV3VG9rZW5zLmxlbmd0aCA+IDA7XG5cdFx0XHR0aGlzLnVwZGF0ZUZpbHRlcklucHV0KFwidG9rZW5VcGRhdGVkXCIpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBjbG9zZUlubmVyQ29udHJvbFBvcG92ZXIoKTogdm9pZCB7XG5cdFx0dGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyPy5jbG9zZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRTZWxlY3RlZFZhbHVlcyhcblx0XHR0b2tlbjogVG9rZW5EZWZpbml0aW9uLFxuXHRcdG5ld1Rva2VuU3BlY2lmaWNWYWx1ZXM6IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10gfCBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSxcblx0XHR0b2tlbkluZGV4OiBudW1iZXIsXG5cdFx0bmV3VG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXVxuXHQpOiB2b2lkIHtcblx0XHR0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzID0gbmV3VG9rZW5TcGVjaWZpY1ZhbHVlcztcblx0XHRpZiAoIXRoaXMuaXNLZXlNYW5kYXRvcnkodG9rZW4ua2V5KSAmJiB0b2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0bmV3VG9rZW5zLnNwbGljZSh0b2tlbkluZGV4LCAxKTtcblx0XHR9XG5cdH1cblxuXHRpc0tleU1hbmRhdG9yeShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGlmICghdGhpcy5tYW5kYXRvcnlLZXlNYXApIHtcblx0XHRcdHRoaXMubWFuZGF0b3J5S2V5TWFwID0ge307XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm1hbmRhdG9yeUtleU1hcFtrZXldID8gdHJ1ZSA6IGZhbHNlO1xuXHR9XG5cblx0cmVtb3ZlTm9uTWFuZGF0b3J5VG9rZW5zKCk6IHRoaXMge1xuXHRcdGNvbnN0IG5ld1Rva2VuOiBUb2tlbkRlZmluaXRpb25bXSA9IHRoaXMuc3RhdGUudG9rZW5zLmZpbHRlcigodG9rZW4pID0+IHtcblx0XHRcdHJldHVybiB0aGlzLmlzS2V5TWFuZGF0b3J5KHRva2VuLmtleSk7XG5cdFx0fSk7XG5cdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSBuZXdUb2tlbjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHVwZGF0ZUZpbHRlcklucHV0KHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBjdXJyVmFsdWU6IHN0cmluZyA9IHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmdldFZhbHVlKCkgfHwgXCJcIjtcblx0XHRpZiAodmFsdWUgPT09IFwidG9rZW5VcGRhdGVkXCIgJiYgY3VyclZhbHVlICE9PSBcIlwiKSB7XG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRWYWx1ZShcIlwiKTtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFBsYWNlaG9sZGVyKGN1cnJWYWx1ZSk7XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSA9PT0gXCJ0b2tlblJlc2V0XCIpIHtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFZhbHVlKFwiXCIpO1xuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0UGxhY2Vob2xkZXIodGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QTEFDRUhPTERFUlwiKSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0VG9rZW5zSW5Jbml0aWFsU3RhdGUoKTogVG9rZW5EZWZpbml0aW9uW10ge1xuXHRcdGNvbnN0IG5ld1Rva2VucyA9IHRoaXMuc3RhdGUudG9rZW5zLm1hcCgodG9rZW4pID0+ICh7IC4uLnRva2VuLCBrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzOiBbLi4udG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc10gfSkpO1xuXHRcdGNvbnN0IG1hbmRhdG9yeVRva2VucyA9IG5ld1Rva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5pc0tleU1hbmRhdG9yeSh0b2tlbi5rZXkpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBtYW5kYXRvcnlUb2tlbnMubWFwKCh0b2tlbikgPT4gKHsgLi4udG9rZW4sIGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IFtdIH0pKTtcblx0fVxuXG5cdGdldFVuU2V0TWFuZGF0b3J5VG9rZW5zSW5DdXJyZW50U3RhdGUoKTogVG9rZW5EZWZpbml0aW9uW10ge1xuXHRcdHJldHVybiB0aGlzLnN0YXRlLnRva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB7XG5cdFx0XHRjb25zdCBpc0tleU1hbmRhdG9yeSA9IHRoaXMuaXNLZXlNYW5kYXRvcnkodG9rZW4ua2V5KTtcblx0XHRcdGlmIChpc0tleU1hbmRhdG9yeSkge1xuXHRcdFx0XHRyZXR1cm4gdG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcy5sZW5ndGggPT09IDA7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRnZXRBY3R1YWxUb2tlbnNGcm9tU3RhdGUodG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXSk6IEVhc3lGaWx0ZXJUb2tlbltdIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCByZXF1aXJlZEtleXMgPSB0b2tlbnMubWFwKCh0b2tlbikgPT4gdG9rZW4ua2V5KTtcblx0XHRyZXR1cm4gdGhpcy50b2tlbml6ZXIuY3VycmVudD8uZ2V0VG9rZW5zKCkuZmlsdGVyKCh0b2tlbikgPT4gcmVxdWlyZWRLZXlzLmluY2x1ZGVzKHRva2VuLmdldEtleSgpKSkgYXNcblx0XHRcdHwgRWFzeUZpbHRlclRva2VuW11cblx0XHRcdHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0c3RhdGljIHJlbmRlcihybTogUmVuZGVyTWFuYWdlciwgY29udHJvbDogRWFzeUZpbHRlckJhckNvbnRhaW5lcik6IHZvaWQge1xuXHRcdHJldHVybiBqc3gucmVuZGVyVXNpbmdSZW5kZXJNYW5hZ2VyKHJtLCBjb250cm9sLCAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gPHNwYW4gcmVmPXtjb250cm9sfT57Y29udHJvbC5nZXRBZ2dyZWdhdGlvbihcImNvbnRlbnRcIil9PC9zcGFuPjtcblx0XHR9KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXVEQTtFQUNBO0VBd0JBO0VBK0NBO0VBcUJBO0FBQ0E7QUFDQTtFQUZBLElBSXFCQSxzQkFBc0IsSUFBQUMsSUFBQSxHQUQxQ0MsY0FBYyxDQUFDLG1EQUFtRCxDQUFDLEVBQUFDLEtBQUEsR0FFbEVDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUc1QkYsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBRSxLQUFBLEdBRzVCSCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFHLEtBQUEsR0FHNUJKLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUSxDQUFDLENBQUMsRUFBQUksS0FBQSxHQUczQkwsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFRLENBQUMsQ0FBQyxFQUFBSyxLQUFBLEdBRzNCTixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVcsQ0FBQyxDQUFDLEVBQUFNLEtBQUEsR0FHOUJDLGVBQWUsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHakJELGVBQWUsQ0FBQyxDQUFDLEVBQUFFLE1BQUEs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
|