@sapui5/sap.fe.templates 1.103.0 → 1.104.1
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 +3 -4
- package/src/sap/fe/templates/.library +1 -1
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +1 -2
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +60 -296
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +52 -264
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +367 -0
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +259 -0
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +16 -9
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.ts +15 -9
- package/src/sap/fe/templates/ListReport/overrides/ViewState.js +19 -27
- package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +23 -27
- package/src/sap/fe/templates/ListReport/view/fragments/CollectionVisualization.fragment.xml +1 -1
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.js +19 -3
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.ts +75 -47
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +149 -108
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +56 -62
- package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.tsx +132 -0
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.ts +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Share.js +55 -29
- package/src/sap/fe/templates/ObjectPage/overrides/Share.ts +28 -29
- package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +2 -14
- package/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +5 -3
- package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.fragment.xml +1 -1
- package/src/sap/fe/templates/controls/Table.fragment.xml +1 -1
- package/src/sap/fe/templates/library.js +4 -3
- package/src/sap/fe/templates/library.ts +2 -0
- package/src/sap/fe/templates/messagebundle.properties +2 -5
- package/src/sap/fe/templates/messagebundle_ar.properties +3 -12
- package/src/sap/fe/templates/messagebundle_bg.properties +0 -9
- package/src/sap/fe/templates/messagebundle_ca.properties +2 -11
- package/src/sap/fe/templates/messagebundle_cs.properties +3 -12
- package/src/sap/fe/templates/messagebundle_cy.properties +0 -9
- package/src/sap/fe/templates/messagebundle_da.properties +3 -12
- package/src/sap/fe/templates/messagebundle_de.properties +2 -11
- package/src/sap/fe/templates/messagebundle_el.properties +2 -11
- package/src/sap/fe/templates/messagebundle_en.properties +2 -11
- package/src/sap/fe/templates/messagebundle_en_GB.properties +2 -11
- package/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +2 -11
- package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +2 -11
- package/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +1 -5
- package/src/sap/fe/templates/messagebundle_es.properties +0 -9
- package/src/sap/fe/templates/messagebundle_es_MX.properties +2 -11
- package/src/sap/fe/templates/messagebundle_et.properties +0 -9
- package/src/sap/fe/templates/messagebundle_fi.properties +2 -11
- package/src/sap/fe/templates/messagebundle_fr.properties +3 -12
- package/src/sap/fe/templates/messagebundle_fr_CA.properties +2 -11
- package/src/sap/fe/templates/messagebundle_hi.properties +2 -11
- package/src/sap/fe/templates/messagebundle_hr.properties +2 -11
- package/src/sap/fe/templates/messagebundle_hu.properties +2 -11
- package/src/sap/fe/templates/messagebundle_id.properties +2 -11
- package/src/sap/fe/templates/messagebundle_it.properties +2 -11
- package/src/sap/fe/templates/messagebundle_iw.properties +2 -11
- package/src/sap/fe/templates/messagebundle_ja.properties +2 -11
- package/src/sap/fe/templates/messagebundle_kk.properties +2 -11
- package/src/sap/fe/templates/messagebundle_ko.properties +2 -11
- package/src/sap/fe/templates/messagebundle_lt.properties +2 -11
- package/src/sap/fe/templates/messagebundle_lv.properties +0 -9
- package/src/sap/fe/templates/messagebundle_ms.properties +2 -11
- package/src/sap/fe/templates/messagebundle_nl.properties +2 -11
- package/src/sap/fe/templates/messagebundle_no.properties +0 -9
- package/src/sap/fe/templates/messagebundle_pl.properties +0 -9
- package/src/sap/fe/templates/messagebundle_pt.properties +2 -11
- package/src/sap/fe/templates/messagebundle_pt_PT.properties +2 -11
- package/src/sap/fe/templates/messagebundle_ro.properties +0 -9
- package/src/sap/fe/templates/messagebundle_ru.properties +2 -11
- package/src/sap/fe/templates/messagebundle_sh.properties +2 -11
- package/src/sap/fe/templates/messagebundle_sk.properties +2 -11
- package/src/sap/fe/templates/messagebundle_sl.properties +2 -11
- package/src/sap/fe/templates/messagebundle_sv.properties +2 -11
- package/src/sap/fe/templates/messagebundle_th.properties +1 -10
- package/src/sap/fe/templates/messagebundle_tr.properties +2 -11
- package/src/sap/fe/templates/messagebundle_uk.properties +2 -11
- package/src/sap/fe/templates/messagebundle_vi.properties +0 -9
- package/src/sap/fe/templates/messagebundle_zh_CN.properties +0 -9
- package/src/sap/fe/templates/messagebundle_zh_TW.properties +2 -11
- package/src/sap/fe/templates/ObjectPage/handler/DraftHandler.js +0 -103
- package/src/sap/fe/templates/ObjectPage/handler/DraftHandler.ts +0 -97
- package/src/sap/fe/templates/ObjectPage/view/fragments/SwitchDraftAndActiveObjectPopOver.fragment.xml +0 -27
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/collaboration/ActivitySync", "sap/fe/core/controllerextensions/collaboration/Manage", "sap/fe/core/controllerextensions/EditFlow", "sap/fe/core/controllerextensions/editFlow/draft", "sap/fe/core/controllerextensions/IntentBasedNavigation", "sap/fe/core/controllerextensions/InternalEditFlow", "sap/fe/core/controllerextensions/InternalIntentBasedNavigation", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/MassEdit", "sap/fe/core/controllerextensions/MessageHandler", "sap/fe/core/controllerextensions/PageReady", "sap/fe/core/controllerextensions/Paginator", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/PageController", "sap/fe/macros/chart/ChartRuntime", "sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/table/Utils", "sap/fe/navigation/SelectionVariant", "sap/fe/templates/ObjectPage/ExtensionAPI", "sap/fe/templates/RootContainer/overrides/EditFlow", "sap/fe/templates/TableScroller", "sap/m/InstanceManager", "sap/m/Link", "sap/m/MessageBox", "sap/ui/core/Core", "sap/ui/core/mvc/OverrideExecution", "sap/ui/model/odata/v4/ODataListBinding", "./
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/collaboration/ActivitySync", "sap/fe/core/controllerextensions/collaboration/Manage", "sap/fe/core/controllerextensions/EditFlow", "sap/fe/core/controllerextensions/editFlow/draft", "sap/fe/core/controllerextensions/IntentBasedNavigation", "sap/fe/core/controllerextensions/InternalEditFlow", "sap/fe/core/controllerextensions/InternalIntentBasedNavigation", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/MassEdit", "sap/fe/core/controllerextensions/MessageHandler", "sap/fe/core/controllerextensions/PageReady", "sap/fe/core/controllerextensions/Paginator", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/PageController", "sap/fe/macros/chart/ChartRuntime", "sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/table/Utils", "sap/fe/navigation/SelectionVariant", "sap/fe/templates/ObjectPage/ExtensionAPI", "sap/fe/templates/RootContainer/overrides/EditFlow", "sap/fe/templates/TableScroller", "sap/m/InstanceManager", "sap/m/Link", "sap/m/MessageBox", "sap/ui/core/Core", "sap/ui/core/mvc/OverrideExecution", "sap/ui/model/odata/v4/ODataListBinding", "./overrides/IntentBasedNavigation", "./overrides/InternalRouting", "./overrides/MessageHandler", "./overrides/Paginator", "./overrides/Share", "./overrides/ViewState"], function (Log, merge, CommonUtils, BusyLocker, ActivitySync, Manage, EditFlow, draft, IntentBasedNavigation, InternalEditFlow, InternalIntentBasedNavigation, InternalRouting, MassEdit, MessageHandler, PageReady, Paginator, Placeholder, Share, ViewState, ClassSupport, ModelHelper, PageController, ChartRuntime, CommonHelper, DelegateUtil, TableUtils, SelectionVariant, ExtensionAPI, EditFlowOverrides, TableScroller, InstanceManager, Link, MessageBox, Core, OverrideExecution, ODataListBinding, IntentBasedNavigationOverride, InternalRoutingOverride, MessageHandlerOverride, PaginatorOverride, ShareOverrides, ViewStateOverrides) {
|
|
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, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12;
|
|
@@ -36,6 +36,20 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
36
36
|
return result;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
+
function _finallyRethrows(body, finalizer) {
|
|
40
|
+
try {
|
|
41
|
+
var result = body();
|
|
42
|
+
} catch (e) {
|
|
43
|
+
return finalizer(true, e);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (result && result.then) {
|
|
47
|
+
return result.then(finalizer.bind(null, false), finalizer.bind(null, true));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return finalizer(false, result);
|
|
51
|
+
}
|
|
52
|
+
|
|
39
53
|
function _initializerDefineProperty(target, property, descriptor, context) { if (!descriptor) return; Object.defineProperty(target, property, { enumerable: descriptor.enumerable, configurable: descriptor.configurable, writable: descriptor.writable, value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 }); }
|
|
40
54
|
|
|
41
55
|
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
@@ -93,8 +107,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
93
107
|
|
|
94
108
|
_initializerDefineProperty(_this, "massEdit", _descriptor12, _assertThisInitialized(_this));
|
|
95
109
|
|
|
96
|
-
_this._showSwitchDraftAndActivePopover = DraftHandler.showSwitchDraftAndActivePopover;
|
|
97
|
-
_this._switchDraftAndActivePopoverListSelect = DraftHandler.switchDraftAndActivePopoverListSelect;
|
|
98
110
|
_this.handlers = {
|
|
99
111
|
onTableContextChange: function (oEvent) {
|
|
100
112
|
var _this2 = this;
|
|
@@ -625,6 +637,67 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
625
637
|
_proto._onAfterBinding = function _onAfterBinding(oBindingContext, mParameters) {
|
|
626
638
|
var _this6 = this;
|
|
627
639
|
|
|
640
|
+
// TODO: this should be moved into an init event of the MDC tables (not yet existing) and should be part
|
|
641
|
+
// of any controller extension
|
|
642
|
+
|
|
643
|
+
/**
|
|
644
|
+
* @param oTable
|
|
645
|
+
* @param oListBinding
|
|
646
|
+
*/
|
|
647
|
+
var enableFastCreationRow = function (oTable, oListBinding) {
|
|
648
|
+
try {
|
|
649
|
+
var oFastCreationRow = oTable.getCreationRow();
|
|
650
|
+
var oFastCreationListBinding, oFastCreationContext;
|
|
651
|
+
|
|
652
|
+
var _temp5 = function () {
|
|
653
|
+
if (oFastCreationRow) {
|
|
654
|
+
var _temp6 = _catch(function () {
|
|
655
|
+
return Promise.resolve(oFinalUIState).then(function () {
|
|
656
|
+
var _temp2 = function () {
|
|
657
|
+
if (oFastCreationRow.getModel("ui").getProperty("/isEditable")) {
|
|
658
|
+
oFastCreationListBinding = oModel.bindList(oListBinding.getPath(), oListBinding.getContext(), [], [], {
|
|
659
|
+
$$updateGroupId: "doNotSubmit",
|
|
660
|
+
$$groupId: "doNotSubmit"
|
|
661
|
+
}); // Workaround suggested by OData model v4 colleagues
|
|
662
|
+
|
|
663
|
+
oFastCreationListBinding.refreshInternal = function () {
|
|
664
|
+
/* do nothing */
|
|
665
|
+
};
|
|
666
|
+
|
|
667
|
+
oFastCreationContext = oFastCreationListBinding.create();
|
|
668
|
+
oFastCreationRow.setBindingContext(oFastCreationContext); // this is needed to avoid console error
|
|
669
|
+
|
|
670
|
+
var _temp7 = _catch(function () {
|
|
671
|
+
return Promise.resolve(oFastCreationContext.created()).then(function () {});
|
|
672
|
+
}, function () {
|
|
673
|
+
Log.trace("transient fast creation context deleted");
|
|
674
|
+
});
|
|
675
|
+
|
|
676
|
+
if (_temp7 && _temp7.then) return _temp7.then(function () {});
|
|
677
|
+
}
|
|
678
|
+
}();
|
|
679
|
+
|
|
680
|
+
if (_temp2 && _temp2.then) return _temp2.then(function () {});
|
|
681
|
+
});
|
|
682
|
+
}, function (oError) {
|
|
683
|
+
Log.error("Error while computing the final UI state", oError);
|
|
684
|
+
});
|
|
685
|
+
|
|
686
|
+
if (_temp6 && _temp6.then) return _temp6.then(function () {});
|
|
687
|
+
}
|
|
688
|
+
}();
|
|
689
|
+
|
|
690
|
+
return Promise.resolve(_temp5 && _temp5.then ? _temp5.then(function () {}) : void 0);
|
|
691
|
+
} catch (e) {
|
|
692
|
+
return Promise.reject(e);
|
|
693
|
+
}
|
|
694
|
+
}; // this should not be needed at the all
|
|
695
|
+
|
|
696
|
+
/**
|
|
697
|
+
* @param oTable
|
|
698
|
+
*/
|
|
699
|
+
|
|
700
|
+
|
|
628
701
|
var oObjectPage = this._getObjectPageLayoutControl();
|
|
629
702
|
|
|
630
703
|
var aTables = this._findTables();
|
|
@@ -677,53 +750,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
677
750
|
aIBNHeaderActions = CommonUtils.getIBNActions(oObjectPageTitle, aIBNHeaderActions);
|
|
678
751
|
aIBNActions = aIBNActions.concat(aIBNHeaderActions);
|
|
679
752
|
CommonUtils.updateDataFieldForIBNButtonsVisibility(aIBNActions, this.getView());
|
|
680
|
-
var oModel, oFinalUIState;
|
|
681
|
-
// of any controller extension
|
|
682
|
-
|
|
683
|
-
/**
|
|
684
|
-
* @param oTable
|
|
685
|
-
* @param oListBinding
|
|
686
|
-
*/
|
|
687
|
-
|
|
688
|
-
function enableFastCreationRow(oTable, oListBinding) {
|
|
689
|
-
var oFastCreationRow = oTable.getCreationRow();
|
|
690
|
-
var oFastCreationListBinding, oFastCreationContext;
|
|
691
|
-
|
|
692
|
-
if (oFastCreationRow) {
|
|
693
|
-
oFinalUIState.then(function () {
|
|
694
|
-
if (oFastCreationRow.getModel("ui").getProperty("/isEditable")) {
|
|
695
|
-
oFastCreationListBinding = oModel.bindList(oListBinding.getPath(), oListBinding.getContext(), [], [], {
|
|
696
|
-
$$updateGroupId: "doNotSubmit",
|
|
697
|
-
$$groupId: "doNotSubmit"
|
|
698
|
-
}); // Workaround suggested by OData model v4 colleagues
|
|
699
|
-
|
|
700
|
-
oFastCreationListBinding.refreshInternal = function () {
|
|
701
|
-
/* do nothing */
|
|
702
|
-
};
|
|
703
|
-
/*
|
|
704
|
-
oFastCreationListBinding.hasPendingChanges = function() {
|
|
705
|
-
return false;
|
|
706
|
-
};
|
|
707
|
-
*/
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
oFastCreationContext = oFastCreationListBinding.create();
|
|
711
|
-
oFastCreationRow.setBindingContext(oFastCreationContext); // this is needed to avoid console error
|
|
712
|
-
|
|
713
|
-
oFastCreationContext.created().catch(function () {
|
|
714
|
-
Log.trace("transient fast creation context deleted");
|
|
715
|
-
});
|
|
716
|
-
}
|
|
717
|
-
}).catch(function (oError) {
|
|
718
|
-
Log.error("Error while computing the final UI state", oError);
|
|
719
|
-
});
|
|
720
|
-
}
|
|
721
|
-
} // this should not be needed at the all
|
|
722
|
-
|
|
723
|
-
/**
|
|
724
|
-
* @param oTable
|
|
725
|
-
*/
|
|
726
|
-
|
|
753
|
+
var oModel, oFinalUIState;
|
|
727
754
|
|
|
728
755
|
var handleTableModifications = function (oTable) {
|
|
729
756
|
var oBinding = _this6._getTableBinding(oTable),
|
|
@@ -976,59 +1003,71 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
976
1003
|
};
|
|
977
1004
|
|
|
978
1005
|
_proto._saveDocument = function _saveDocument(oContext) {
|
|
979
|
-
|
|
1006
|
+
try {
|
|
1007
|
+
var _this9 = this;
|
|
980
1008
|
|
|
981
|
-
|
|
982
|
-
|
|
1009
|
+
var oModel = _this9.getView().getModel("ui"),
|
|
1010
|
+
aWaitCreateDocuments = []; // indicates if we are creating a new row in the OP
|
|
983
1011
|
|
|
984
|
-
var bExecuteSideEffectsOnError = false;
|
|
985
|
-
BusyLocker.lock(oModel);
|
|
986
1012
|
|
|
987
|
-
|
|
988
|
-
|
|
1013
|
+
var bExecuteSideEffectsOnError = false;
|
|
1014
|
+
BusyLocker.lock(oModel);
|
|
989
1015
|
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
creationRow: oTable.getCreationRow(),
|
|
993
|
-
createAtEnd: oTable.data("createAtEnd") === "true"
|
|
994
|
-
};
|
|
995
|
-
var bCreateDocument = mParameters.creationRow && mParameters.creationRow.getBindingContext() && Object.keys(mParameters.creationRow.getBindingContext().getObject()).length > 1;
|
|
996
|
-
|
|
997
|
-
if (bCreateDocument) {
|
|
998
|
-
// the bSkipSideEffects is a parameter created when we click the save key. If we press this key
|
|
999
|
-
// we don't execute the handleSideEffects funciton to avoid batch redundancy
|
|
1000
|
-
mParameters.bSkipSideEffects = true;
|
|
1001
|
-
bExecuteSideEffectsOnError = true;
|
|
1002
|
-
aWaitCreateDocuments.push(_this8.editFlow.createDocument(oBinding, mParameters).then(function () {
|
|
1003
|
-
return oBinding;
|
|
1004
|
-
}));
|
|
1005
|
-
}
|
|
1006
|
-
});
|
|
1016
|
+
_this9._findTables().forEach(function (oTable) {
|
|
1017
|
+
var oBinding = _this9._getTableBinding(oTable);
|
|
1007
1018
|
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
return Promise.reject.apply(Promise, arguments);
|
|
1019
|
+
var mParameters = {
|
|
1020
|
+
creationMode: oTable.data("creationMode"),
|
|
1021
|
+
creationRow: oTable.getCreationRow(),
|
|
1022
|
+
createAtEnd: oTable.data("createAtEnd") === "true"
|
|
1023
|
+
};
|
|
1024
|
+
var bCreateDocument = mParameters.creationRow && mParameters.creationRow.getBindingContext() && Object.keys(mParameters.creationRow.getBindingContext().getObject()).length > 1;
|
|
1025
|
+
|
|
1026
|
+
if (bCreateDocument) {
|
|
1027
|
+
// the bSkipSideEffects is a parameter created when we click the save key. If we press this key
|
|
1028
|
+
// we don't execute the handleSideEffects funciton to avoid batch redundancy
|
|
1029
|
+
mParameters.bSkipSideEffects = true;
|
|
1030
|
+
bExecuteSideEffectsOnError = true;
|
|
1031
|
+
aWaitCreateDocuments.push(_this9.editFlow.createDocument(oBinding, mParameters).then(function () {
|
|
1032
|
+
return oBinding;
|
|
1033
|
+
}));
|
|
1034
|
+
}
|
|
1026
1035
|
});
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1036
|
+
|
|
1037
|
+
return Promise.resolve(_finallyRethrows(function () {
|
|
1038
|
+
return Promise.resolve(Promise.all(aWaitCreateDocuments)).then(function (aBindings) {
|
|
1039
|
+
var mParameters = {
|
|
1040
|
+
bExecuteSideEffectsOnError: bExecuteSideEffectsOnError,
|
|
1041
|
+
bindings: aBindings
|
|
1042
|
+
}; // We need to either reject or resolve a promise here and return it since this save
|
|
1043
|
+
// function is not only called when pressing the save button in the footer, but also
|
|
1044
|
+
// when the user selects create or save in a dataloss popup.
|
|
1045
|
+
// The logic of the dataloss popup needs to detect if the save had errors or not in order
|
|
1046
|
+
// to decide if the subsequent action - like a back navigation - has to be executed or not.
|
|
1047
|
+
|
|
1048
|
+
return _catch(function () {
|
|
1049
|
+
return Promise.resolve(_this9.editFlow.saveDocument(oContext, mParameters)).then(function () {});
|
|
1050
|
+
}, function (error) {
|
|
1051
|
+
// If the saveDocument in editFlow returns errors we need
|
|
1052
|
+
// to show the message popover here and ensure that the
|
|
1053
|
+
// dataloss logic does not perform the follow up function
|
|
1054
|
+
// like e.g. a back navigation hence we return a promise and reject it
|
|
1055
|
+
_this9._showMessagePopover(error);
|
|
1056
|
+
|
|
1057
|
+
throw error;
|
|
1058
|
+
});
|
|
1059
|
+
});
|
|
1060
|
+
}, function (_wasThrown, _result) {
|
|
1061
|
+
if (BusyLocker.isLocked(oModel)) {
|
|
1062
|
+
BusyLocker.unlock(oModel);
|
|
1063
|
+
}
|
|
1064
|
+
|
|
1065
|
+
if (_wasThrown) throw _result;
|
|
1066
|
+
return _result;
|
|
1067
|
+
}));
|
|
1068
|
+
} catch (e) {
|
|
1069
|
+
return Promise.reject(e);
|
|
1070
|
+
}
|
|
1032
1071
|
};
|
|
1033
1072
|
|
|
1034
1073
|
_proto._manageCollaboration = function _manageCollaboration() {
|
|
@@ -1046,10 +1085,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
1046
1085
|
};
|
|
1047
1086
|
|
|
1048
1087
|
_proto._applyDocument = function _applyDocument(oContext) {
|
|
1049
|
-
var
|
|
1088
|
+
var _this10 = this;
|
|
1050
1089
|
|
|
1051
1090
|
return this.editFlow.applyDocument(oContext).catch(function () {
|
|
1052
|
-
return
|
|
1091
|
+
return _this10._showMessagePopover();
|
|
1053
1092
|
});
|
|
1054
1093
|
};
|
|
1055
1094
|
|
|
@@ -1204,7 +1243,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
1204
1243
|
;
|
|
1205
1244
|
|
|
1206
1245
|
_proto._mergeMultipleContexts = function _mergeMultipleContexts(oPageContext, aLineContext, sChartPath) {
|
|
1207
|
-
var
|
|
1246
|
+
var _this11 = this;
|
|
1208
1247
|
|
|
1209
1248
|
var aAttributes = [],
|
|
1210
1249
|
aPageAttributes = [],
|
|
@@ -1221,7 +1260,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
1221
1260
|
sMetaPathLine = oMetaModel && oMetaModel.getMetaPath(sPathLine).replace(/^\/*/, "");
|
|
1222
1261
|
aLineContext.forEach(function (oSingleContext) {
|
|
1223
1262
|
if (sChartPath) {
|
|
1224
|
-
var oChartContextData =
|
|
1263
|
+
var oChartContextData = _this11._getChartContextData(oSingleContext, sChartPath);
|
|
1225
1264
|
|
|
1226
1265
|
if (oChartContextData) {
|
|
1227
1266
|
aAttributes = oChartContextData.map(function (oSubChartContextData) {
|
|
@@ -1289,14 +1328,16 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
1289
1328
|
|
|
1290
1329
|
_proto._setBreadcrumbLinks = function _setBreadcrumbLinks(oSource) {
|
|
1291
1330
|
try {
|
|
1292
|
-
var
|
|
1331
|
+
var _sNewPath$split;
|
|
1332
|
+
|
|
1333
|
+
var _this13 = this;
|
|
1293
1334
|
|
|
1294
1335
|
var oContext = oSource.getBindingContext(),
|
|
1295
|
-
oAppComponent =
|
|
1336
|
+
oAppComponent = _this13.getAppComponent(),
|
|
1296
1337
|
aPromises = [],
|
|
1297
1338
|
aSkipParameterized = [],
|
|
1298
|
-
sNewPath = oContext
|
|
1299
|
-
aPathParts = sNewPath
|
|
1339
|
+
sNewPath = oContext === null || oContext === void 0 ? void 0 : oContext.getPath(),
|
|
1340
|
+
aPathParts = (_sNewPath$split = sNewPath === null || sNewPath === void 0 ? void 0 : sNewPath.split("/")) !== null && _sNewPath$split !== void 0 ? _sNewPath$split : [],
|
|
1300
1341
|
oMetaModel = oAppComponent && oAppComponent.getMetaModel();
|
|
1301
1342
|
|
|
1302
1343
|
var sPath = "";
|
|
@@ -1319,7 +1360,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
1319
1360
|
aPromises.push(oRootViewController.getTitleInfoFromPath(sPath));
|
|
1320
1361
|
});
|
|
1321
1362
|
|
|
1322
|
-
var
|
|
1363
|
+
var _temp9 = _catch(function () {
|
|
1323
1364
|
return Promise.resolve(Promise.all(aPromises)).then(function (titleHierarchyInfos) {
|
|
1324
1365
|
var idx, hierarchyPosition, oLink;
|
|
1325
1366
|
|
|
@@ -1350,7 +1391,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
1350
1391
|
Log.error("Error while setting the breadcrumb links:" + error);
|
|
1351
1392
|
});
|
|
1352
1393
|
|
|
1353
|
-
return Promise.resolve(
|
|
1394
|
+
return Promise.resolve(_temp9 && _temp9.then ? _temp9.then(function () {}) : void 0);
|
|
1354
1395
|
} catch (e) {
|
|
1355
1396
|
return Promise.reject(e);
|
|
1356
1397
|
}
|
|
@@ -1519,4 +1560,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
1519
1560
|
}), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype)), _class2)) || _class);
|
|
1520
1561
|
return ObjectPageController;
|
|
1521
1562
|
}, false);
|
|
1522
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOlsiYm9keSIsInJlY292ZXIiLCJyZXN1bHQiLCJlIiwidGhlbiIsIk9iamVjdFBhZ2VDb250cm9sbGVyIiwiZGVmaW5lVUk1Q2xhc3MiLCJ1c2luZ0V4dGVuc2lvbiIsIlBsYWNlaG9sZGVyIiwiRWRpdEZsb3ciLCJTaGFyZSIsIm92ZXJyaWRlIiwiU2hhcmVPdmVycmlkZXMiLCJJbnRlcm5hbEVkaXRGbG93IiwiRWRpdEZsb3dPdmVycmlkZXMiLCJJbnRlcm5hbFJvdXRpbmciLCJJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSIsIlBhZ2luYXRvciIsIlBhZ2luYXRvck92ZXJyaWRlIiwiTWVzc2FnZUhhbmRsZXIiLCJNZXNzYWdlSGFuZGxlck92ZXJyaWRlIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwiYklzU3RpY2t5RWRpdE1vZGUiLCJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldFN0aWNreUVkaXRNb2RlIiwidW5kZWZpbmVkIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiUGFnZVJlYWR5IiwiaXNDb250ZXh0RXhwZWN0ZWQiLCJNYXNzRWRpdCIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJfc2hvd1N3aXRjaERyYWZ0QW5kQWN0aXZlUG9wb3ZlciIsIkRyYWZ0SGFuZGxlciIsInNob3dTd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcG92ZXIiLCJfc3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BvdmVyTGlzdFNlbGVjdCIsInN3aXRjaERyYWZ0QW5kQWN0aXZlUG9wb3Zlckxpc3RTZWxlY3QiLCJoYW5kbGVycyIsIm9uVGFibGVDb250ZXh0Q2hhbmdlIiwib0V2ZW50Iiwib1NvdXJjZSIsImdldFNvdXJjZSIsIm9UYWJsZSIsIl9maW5kVGFibGVzIiwic29tZSIsIl9vVGFibGUiLCJnZXRSb3dCaW5kaW5nIiwib0N1cnJlbnRBY3Rpb25Qcm9taXNlIiwiX2VkaXRGbG93IiwiZ2V0Q3VycmVudEFjdGlvblByb21pc2UiLCJhVGFibGVDb250ZXh0cyIsImdldFR5cGUiLCJnZXRNZXRhZGF0YSIsImlzQSIsImdldENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwib0FjdGlvblJlc3BvbnNlIiwiY29udHJvbElkIiwic0lkIiwib0FjdGlvbkRhdGEiLCJvRGF0YSIsImFLZXlzIiwia2V5cyIsImlOZXdJdGVtcCIsImZpbmQiLCJvVGFibGVDb250ZXh0IiwiaSIsIm9UYWJsZURhdGEiLCJnZXRPYmplY3QiLCJiQ29tcGFyZSIsImV2ZXJ5Iiwic0tleSIsImFEaWFsb2dzIiwiSW5zdGFuY2VNYW5hZ2VyIiwiZ2V0T3BlbkRpYWxvZ3MiLCJvRGlhbG9nIiwibGVuZ3RoIiwiZGlhbG9nIiwiZGF0YSIsImF0dGFjaEV2ZW50T25jZSIsImZvY3VzUm93IiwiZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UiLCJjYXRjaCIsImVyciIsIkxvZyIsImVycm9yIiwib01lc3NhZ2VCdXR0b24iLCJieUlkIiwiZmlyZU1vZGVsQ29udGV4dENoYW5nZSIsIm9uQ2FsbEFjdGlvbiIsIm9WaWV3Iiwic0FjdGlvbk5hbWUiLCJtUGFyYW1ldGVycyIsIm9Db250cm9sbGVyIiwiZWRpdEZsb3ciLCJpbnZva2VBY3Rpb24iLCJfc2hvd01lc3NhZ2VQb3BvdmVyIiwiYmluZCIsIm9uRGF0YVBvaW50VGl0bGVQcmVzc2VkIiwib01hbmlmZXN0T3V0Ym91bmQiLCJzQ29udHJvbENvbmZpZyIsInNDb2xsZWN0aW9uUGF0aCIsIkpTT04iLCJwYXJzZSIsIm9UYXJnZXRJbmZvIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsIkNvbW1vblV0aWxzIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwib0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic01ldGFQYXRoIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJhTmF2aWdhdGlvbkRhdGEiLCJfZ2V0Q2hhcnRDb250ZXh0RGF0YSIsImFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm1hcCIsIm9OYXZpZ2F0aW9uRGF0YSIsIm1ldGFQYXRoIiwicGFyYW1ldGVycyIsIm9QYXJhbXMiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0T3V0Ym91bmRQYXJhbXMiLCJPYmplY3QiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsIm5hdmlnYXRlIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwic091dGJvdW5kVGFyZ2V0Iiwib0NvbnRleHQiLCJzQ3JlYXRlUGF0aCIsIm9uTmF2aWdhdGVDaGFuZ2UiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsImJTZWN0aW9uTmF2aWdhdGVkIiwib0ludGVybmFsTW9kZWxDb250ZXh0Iiwib09iamVjdFBhZ2UiLCJfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2wiLCJnZXRQcm9wZXJ0eSIsImdldFZpZXdEYXRhIiwic2VjdGlvbkxheW91dCIsIm9TdWJTZWN0aW9uIiwiZ2V0UGFyYW1ldGVyIiwiX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZSIsIm9uVmFyaWFudFNlbGVjdGVkIiwib25WYXJpYW50U2F2ZWQiLCJzZXRUaW1lb3V0IiwibmF2aWdhdGVUb1N1YlNlY3Rpb24iLCJ2RGV0YWlsQ29uZmlnIiwib0RldGFpbENvbmZpZyIsIm9TZWN0aW9uIiwic2VjdGlvbklkIiwic3ViU2VjdGlvbklkIiwiZ2V0U3ViU2VjdGlvbnMiLCJnZXRQYXJlbnQiLCJnZXRWaXNpYmxlIiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJvUmVzb3VyY2VCdW5kbGUiLCJzVGl0bGUiLCJnZXRUcmFuc2xhdGVkVGV4dCIsImVudGl0eVNldCIsIk1lc3NhZ2VCb3giLCJzY3JvbGxUb1NlY3Rpb24iLCJnZXRJZCIsImZpcmVOYXZpZ2F0ZSIsInNlY3Rpb24iLCJzdWJTZWN0aW9uIiwib25DaGFydFNlbGVjdGlvbkNoYW5nZWQiLCJDaGFydFJ1bnRpbWUiLCJmblVwZGF0ZUNoYXJ0IiwibUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzIiwiRXh0ZW5zaW9uQVBJIiwiZXh0ZW5zaW9uQVBJIiwib25Jbml0Iiwic2V0UHJvcGVydHkiLCJ2aXNpYmlsaXR5IiwiaXRlbXMiLCJfZ2V0QmF0Y2hHcm91cHNGb3JWaWV3IiwidXNlTmV3TGF6eUxvYWRpbmciLCJnZXRFbmFibGVMYXp5TG9hZGluZyIsImF0dGFjaEV2ZW50IiwiX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQiLCJvbkV4aXQiLCJkZXN0cm95Iiwib01lc3NhZ2VQb3BvdmVyIiwiaXNPcGVuIiwiY2xvc2UiLCJpc0tlZXBBbGl2ZSIsInNldEtlZXBBbGl2ZSIsIl9nZXRUYWJsZUJpbmRpbmciLCJvbkJlZm9yZVJlbmRlcmluZyIsIlBhZ2VDb250cm9sbGVyIiwicHJvdG90eXBlIiwiYXBwbHkiLCJvVmlld0RhdGEiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiQ29tbW9uSGVscGVyIiwic2V0TWV0YU1vZGVsIiwiZ2V0QXBwQ29tcG9uZW50Iiwib25BZnRlclJlbmRlcmluZyIsInJlc3BvbnNlIiwib0Vycm9yIiwiX29uQmVmb3JlQmluZGluZyIsImFUYWJsZXMiLCJvSW50ZXJuYWxNb2RlbCIsImFCYXRjaEdyb3VwcyIsImlWaWV3TGV2ZWwiLCJ2aWV3TGV2ZWwiLCJvRmFzdENyZWF0aW9uUm93IiwicHVzaCIsImJEcmFmdE5hdmlnYXRpb24iLCJfY2xvc2VTaWRlQ29udGVudCIsIm9wQ29udGV4dCIsImhhc1BlbmRpbmdDaGFuZ2VzIiwiZ2V0QmluZGluZyIsInJlc2V0Q2hhbmdlcyIsImdldENyZWF0aW9uUm93Iiwic2V0QmluZGluZ0NvbnRleHQiLCJmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24iLCJpc0ZpcnN0UmVuZGVyaW5nIiwiYlBlcnNpc3RPUFNjcm9sbCIsInNldFNlbGVjdGVkU2VjdGlvbiIsIm9EZWxlZ2F0ZU9uQmVmb3JlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsInBhZ2VSZWFkeSIsInJlbW92ZUV2ZW50RGVsZWdhdGUiLCJvQmluZGluZyIsImxpc3RCaW5kaW5nIiwib1BhZ2luYXRvckN1cnJlbnRDb250ZXh0Iiwib0JpbmRpbmdUb1VzZSIsInBhZ2luYXRvciIsImluaXRpYWxpemUiLCJzQ29udGV4dFBhdGgiLCJyZXBsYWNlIiwiT0RhdGFMaXN0QmluZGluZyIsIm9Nb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiX3NldExpc3RCaW5kaW5nQXN5bmMiLCJkZXRhY2hFdmVudCIsImFTZWN0aW9ucyIsImdldFNlY3Rpb25zIiwiYlVzZUljb25UYWJCYXIiLCJnZXRVc2VJY29uVGFiQmFyIiwiaVNraXAiLCJiSXNJbkVkaXRNb2RlIiwiYkVkaXRhYmxlSGVhZGVyIiwiZWRpdGFibGVIZWFkZXJDb250ZW50IiwiaVNlY3Rpb24iLCJhU3ViU2VjdGlvbnMiLCJpU3ViU2VjdGlvbiIsImlzVmlzaWJpbGl0eUR5bmFtaWMiLCJwbGFjZWhvbGRlciIsImlzUGxhY2Vob2xkZXJFbmFibGVkIiwic2hvd1BsYWNlaG9sZGVyIiwib05hdkNvbnRhaW5lciIsIm9Db250YWluZXIiLCJfZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50Iiwib0ZpcnN0Q2xpY2thYmxlRWxlbWVudCIsImFBY3Rpb25zIiwiZ2V0SGVhZGVyVGl0bGUiLCJnZXRBY3Rpb25zIiwib0FjdGlvbiIsImdldEVuYWJsZWQiLCJfZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24iLCJhQmxvY2tzIiwiZ2V0QmxvY2tzIiwiYmxvY2siLCJhRm9ybUNvbnRhaW5lcnMiLCJnZXRGb3JtQ29udGFpbmVycyIsImdldENvbnRlbnQiLCJmb3JtQ29udGFpbmVyIiwiYUZvcm1FbGVtZW50cyIsImdldEZvcm1FbGVtZW50cyIsImZvcm1FbGVtZW50IiwiYUZpZWxkcyIsImdldEZpZWxkcyIsImdldFJlcXVpcmVkIiwiZ2V0VmFsdWUiLCJkZWJ1ZyIsIm9NYW5kYXRvcnlGaWVsZCIsIm9GaWVsZFRvRm9jdXMiLCJjb250ZW50IiwiZ2V0Q29udGVudEVkaXQiLCJfZ2V0Rmlyc3RFZGl0YWJsZUlucHV0IiwiZm9jdXMiLCJfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQiLCJnZXRSb3V0ZXJQcm94eSIsImNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQiLCJoaXN0b3J5IiwiYmFjayIsImRyYWZ0IiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJGdW5jdGlvbiIsIk5hdmlnYXRpb25UeXBlIiwiQmFja05hdmlnYXRpb24iLCJfb25BZnRlckJpbmRpbmciLCJvQmluZGluZ0NvbnRleHQiLCJfc2lkZUVmZmVjdHMiLCJjbGVhclByb3BlcnRpZXNTdGF0dXMiLCJhSUJOQWN0aW9ucyIsImZvckVhY2giLCJnZXRJQk5BY3Rpb25zIiwib1RhYmxlUm93QmluZGluZyIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwicmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwicGFyc2VDdXN0b21EYXRhIiwiRGVsZWdhdGVVdGlsIiwiZ2V0Q3VzdG9tRGF0YSIsImFTZWxlY3RlZENvbnRleHRzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJnZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsIiwib09iamVjdFBhZ2VUaXRsZSIsImFJQk5IZWFkZXJBY3Rpb25zIiwiY29uY2F0IiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJvRmluYWxVSVN0YXRlIiwiZW5hYmxlRmFzdENyZWF0aW9uUm93Iiwib0xpc3RCaW5kaW5nIiwib0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nIiwib0Zhc3RDcmVhdGlvbkNvbnRleHQiLCJiaW5kTGlzdCIsImdldENvbnRleHQiLCIkJHVwZGF0ZUdyb3VwSWQiLCIkJGdyb3VwSWQiLCJyZWZyZXNoSW50ZXJuYWwiLCJjcmVhdGUiLCJjcmVhdGVkIiwidHJhY2UiLCJoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMiLCJmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMiLCJmbkhhbmRsZUNoYW5nZSIsImRldGFjaENoYW5nZSIsImF0dGFjaENoYW5nZSIsImNvbXB1dGVFZGl0TW9kZSIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkIiwiY29ubmVjdCIsIm9DYWNoZSIsIl91cGRhdGVSZWxhdGVkQXBwcyIsImZuVXBkYXRlUmVsYXRlZEFwcHMiLCJkZXRhY2hEYXRhUmVjZWl2ZWQiLCJhdHRhY2hEYXRhUmVjZWl2ZWQiLCJjdXJyZW50QmluZGluZyIsImhhbmRsZVBhdGNoU2VudCIsIlRhYmxlVXRpbHMiLCJ3aGVuQm91bmQiLCJfdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cyIsIm9uUGFnZVJlYWR5Iiwic2V0Rm9jdXMiLCJpc0luRGlzcGxheU1vZGUiLCJvU2VsZWN0ZWRTZWN0aW9uIiwiQ29yZSIsImdldFNlbGVjdGVkU2VjdGlvbiIsImJJc1N0aWNreU1vZGUiLCJvQXBwQ29tcG9uZW50IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEJhY2tOYXZpZ2F0aW9uIiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwiYXBwbHlBcHBTdGF0ZSIsImZvcmNlRm9jdXMiLCJFcnJvciIsIl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwiX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uIiwib09iamVjdFBhZ2VTdWJ0aXRsZSIsIm9DdXN0b21EYXRhIiwiZ2V0S2V5IiwidGl0bGUiLCJzdWJ0aXRsZSIsImludGVudCIsImljb24iLCJfZXhlY3V0ZUhlYWRlclNob3J0Y3V0Iiwic0J1dHRvbklkIiwib0J1dHRvbiIsIm9FbGVtZW50IiwiZmlyZUJ1dHRvblByZXNzIiwiX2V4ZWN1dGVGb290ZXJTaG9ydGN1dCIsImdldEZvb3RlciIsImdldE5hbWUiLCJfZXhlY3V0ZVRhYlNob3J0Q3V0Iiwib0V4ZWN1dGlvbiIsImlTZWN0aW9uSW5kZXhNYXgiLCJzQ29tbWFuZCIsImdldENvbW1hbmQiLCJuZXdTZWN0aW9uIiwiaVNlbGVjdGVkU2VjdGlvbkluZGV4IiwiaW5kZXhPZlNlY3Rpb24iLCJfZ2V0Rm9vdGVyVmlzaWJpbGl0eSIsInNWaWV3SWQiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJnZXRNZXNzYWdlTWFuYWdlciIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJvTWVzc2FnZSIsInZhbGlkYXRpb24iLCJ0eXBlIiwidGFyZ2V0IiwiaW5kZXhPZiIsIm9SZXQiLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvSXRlbUJpbmRpbmciLCJnZXRMZW5ndGgiLCJzZXRWaXNpYmxlIiwib3BlbkJ5IiwiX2VkaXREb2N1bWVudCIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiZWRpdERvY3VtZW50IiwiZmluYWxseSIsInVubG9jayIsIl9zYXZlRG9jdW1lbnQiLCJhV2FpdENyZWF0ZURvY3VtZW50cyIsImJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRpb25Sb3ciLCJjcmVhdGVBdEVuZCIsImJDcmVhdGVEb2N1bWVudCIsImJTa2lwU2lkZUVmZmVjdHMiLCJjcmVhdGVEb2N1bWVudCIsIlByb21pc2UiLCJhbGwiLCJhQmluZGluZ3MiLCJiaW5kaW5ncyIsInNhdmVEb2N1bWVudCIsInJlamVjdCIsImlzTG9ja2VkIiwiX21hbmFnZUNvbGxhYm9yYXRpb24iLCJvcGVuTWFuYWdlRGlhbG9nIiwiX3Nob3dDb2xsYWJvcmF0aW9uVXNlckRldGFpbHMiLCJldmVudCIsInNob3dVc2VyRGV0YWlscyIsIl9jYW5jZWxEb2N1bWVudCIsImNhbmNlbEJ1dHRvbiIsImNhbmNlbERvY3VtZW50IiwiX2FwcGx5RG9jdW1lbnQiLCJhcHBseURvY3VtZW50IiwicmVzb2x2ZVN0cmluZ3RvQm9vbGVhbiIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsIl9maW5kVGFibGVJblN1YlNlY3Rpb24iLCJhUGFyZW50RWxlbWVudCIsImFTdWJzZWN0aW9uIiwiYVN1YlNlY3Rpb25UYWJsZXMiLCJlbGVtZW50IiwiZ2V0TWFpbkNvbnRlbnQiLCJncmlkVGFibGUiLCJoYXNTdHlsZUNsYXNzIiwiYWRkU3R5bGVDbGFzcyIsInRhYmxlIiwic2V0Um93Q291bnQiLCJfZ2V0QWxsU3ViU2VjdGlvbnMiLCJfZ2V0QWxsQmxvY2tzIiwiZ2V0TW9yZUJsb2NrcyIsIm9CbG9jayIsIm9Db250ZW50Iiwic2V0U2hvd1NpZGVDb250ZW50Iiwib0NoYXJ0Q29udGV4dCIsInNDaGFydFBhdGgiLCJvQ29udGV4dERhdGEiLCJvQ2hhcnRDb250ZXh0RGF0YSIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsInNSb3dQYXRoIiwiVGFibGVTY3JvbGxlciIsInNjcm9sbFRhYmxlVG9Sb3ciLCJfbWVyZ2VNdWx0aXBsZUNvbnRleHRzIiwib1BhZ2VDb250ZXh0IiwiYUxpbmVDb250ZXh0IiwiYUF0dHJpYnV0ZXMiLCJhUGFnZUF0dHJpYnV0ZXMiLCJzTWV0YVBhdGhMaW5lIiwic1BhdGhMaW5lIiwic1BhZ2VQYXRoIiwib01ldGFNb2RlbCIsInNNZXRhUGF0aFBhZ2UiLCJvU2luZ2xlQ29udGV4dCIsIm9TdWJDaGFydENvbnRleHREYXRhIiwiY29udGV4dERhdGEiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwib1BhZ2VMZXZlbFNWIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudCIsImF0dHJpYnV0ZXMiLCJvQ29uZmlndXJhdGlvbnMiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImFDb25maWd1cmF0aW9ucyIsIm9Db25maWd1cmF0aW9uIiwicmVxdWVzdEdyb3VwSWQiLCJfc2V0QnJlYWRjcnVtYkxpbmtzIiwiYVByb21pc2VzIiwiYVNraXBQYXJhbWV0ZXJpemVkIiwic05ld1BhdGgiLCJhUGF0aFBhcnRzIiwic3BsaXQiLCJzUGF0aCIsInNoaWZ0Iiwic3BsaWNlIiwic1BhdGhQYXJ0Iiwib1Jvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsInNQYXJhbWV0ZXJQYXRoIiwiYlJlc3VsdENvbnRleHQiLCJnZXRUaXRsZUluZm9Gcm9tUGF0aCIsInRpdGxlSGllcmFyY2h5SW5mb3MiLCJpZHgiLCJoaWVyYXJjaHlQb3NpdGlvbiIsIm9MaW5rIiwidGl0bGVIaWVyYXJjaHlJbmZvIiwiZ2V0TGlua3MiLCJMaW5rIiwic2V0VGV4dCIsInNldEhyZWYiLCJhZGRMaW5rIiwib0RhdGFQb2ludHMiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJnZXRSb3V0aW5nU2VydmljZSIsImdldE91dGJvdW5kcyIsIm9TaGVsbFNlcnZpY2VzIiwicmVxdWVzdE9iamVjdCIsImZuR2V0TGlua3MiLCJmbk9uRXJyb3IiLCJmblNldExpbmtFbmFibGVtZW50IiwiaWQiLCJhU3VwcG9ydGVkTGlua3MiLCJzTGlua0lkIiwic3VwcG9ydGVkIiwib1N1YkRhdGFQb2ludHMiLCJvUGFnZURhdGEiLCJvRGF0YVBvaW50Iiwib0xpbmtDb250ZXh0Iiwib0xpbmtEYXRhIiwib01peGVkQ29udGV4dCIsIm1lcmdlIiwiaXRlbSIsIm9NYXBwaW5nIiwic01haW5Qcm9wZXJ0eSIsInNNYXBwZWRQcm9wZXJ0eSIsImhhc093blByb3BlcnR5Iiwib05ld01hcHBpbmciLCJpc05hdmlnYXRpb25TdXBwb3J0ZWQiLCJwYXJhbXMiLCJh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QUFJLENBQUM2VSxPQUFMLENBQWEsZUFBYixNQUFrQyxDQUFDLENBQWxFLEVBQXFFO0FBQ3BFMVIsZ0JBQUFBLE9BQU8sQ0FBQ25ELElBQUQsQ0FBUCxHQUFnQm1kLGFBQWEsQ0FBQ25kLElBQUQsQ0FBN0I7QUFDQTtBQUNEO0FBQ0QsV0FwQ3NELENBcUN2RDs7O0FBQ0FxYyxVQUFBQSxjQUFjLENBQ1pzQixxQkFERixDQUN3QixDQUN0QjtBQUNDL0ksWUFBQUEsTUFBTSxFQUFFO0FBQ1ByUixjQUFBQSxjQUFjLEVBQUV5WixVQUFVLENBQUN6WixjQURwQjtBQUVQQyxjQUFBQSxNQUFNLEVBQUV3WixVQUFVLENBQUN4WjtBQUZaLGFBRFQ7QUFLQ29hLFlBQUFBLE1BQU0sRUFBRXphO0FBTFQsV0FEc0IsQ0FEeEIsRUFVRTlILElBVkYsQ0FVTyxVQUFDd2lCLE1BQUQsRUFBWTtBQUNqQixtQkFBT3BCLG1CQUFtQixDQUFDdGQsR0FBRCxFQUFNMGUsTUFBTixDQUExQjtBQUNBLFdBWkYsRUFhRWxkLEtBYkYsQ0FhUTZiLFNBYlI7QUF0Q3VEOztBQUN4RCxhQUFLLElBQU1yZCxHQUFYLElBQWtCMmQsY0FBbEIsRUFBa0M7QUFBQSwyQkFBdkIzZCxHQUF1Qjs7QUFBQSxtQ0FNaEM7QUE2Q0Q7QUFDRDtBQUNELEs7OztJQTdtQ2lDeUksYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQTJ6Q3BCdE0sb0IiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9BY3Rpdml0eVN5bmNcIjtcbmltcG9ydCB7IG9wZW5NYW5hZ2VEaWFsb2csIHNob3dVc2VyRGV0YWlscyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL01hbmFnZVwiO1xuaW1wb3J0IEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9FZGl0Rmxvd1wiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxFZGl0RmxvdyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxFZGl0Rmxvd1wiO1xuaW1wb3J0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgTWFzc0VkaXQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01hc3NFZGl0XCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnZVJlYWR5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdlUmVhZHlcIjtcbmltcG9ydCBQYWdpbmF0b3IgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2luYXRvclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiwgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ2hhcnRSdW50aW1lIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0UnVudGltZVwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgVGFibGVVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB0eXBlIFJvb3RDb250YWluZXJCYXNlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9Sb290Q29udGFpbmVyL2NvbnRyb2xsZXIvUm9vdENvbnRhaW5lckJhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgRWRpdEZsb3dPdmVycmlkZXMgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvUm9vdENvbnRhaW5lci9vdmVycmlkZXMvRWRpdEZsb3dcIjtcbmltcG9ydCBUYWJsZVNjcm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1RhYmxlU2Nyb2xsZXJcIjtcbmltcG9ydCBJbnN0YW5jZU1hbmFnZXIgZnJvbSBcInNhcC9tL0luc3RhbmNlTWFuYWdlclwiO1xuaW1wb3J0IExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvcmVzb3VyY2UvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCBEcmFmdEhhbmRsZXIgZnJvbSBcIi4vaGFuZGxlci9EcmFmdEhhbmRsZXJcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnaW5hdG9yT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL1BhZ2luYXRvclwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiKVxuY2xhc3MgT2JqZWN0UGFnZUNvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdG9WaWV3ITogYW55O1xuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdHBsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cdEB1c2luZ0V4dGVuc2lvbihFZGl0Rmxvdylcblx0ZWRpdEZsb3chOiBFZGl0Rmxvdztcblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblx0QHVzaW5nRXh0ZW5zaW9uKEludGVybmFsRWRpdEZsb3cub3ZlcnJpZGUoRWRpdEZsb3dPdmVycmlkZXMpKVxuXHRfZWRpdEZsb3chOiBJbnRlcm5hbEVkaXRGbG93O1xuXHRAdXNpbmdFeHRlbnNpb24oSW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKEludGVybmFsUm91dGluZ092ZXJyaWRlKSlcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cdEB1c2luZ0V4dGVuc2lvbihQYWdpbmF0b3Iub3ZlcnJpZGUoUGFnaW5hdG9yT3ZlcnJpZGUpKVxuXHRwYWdpbmF0b3IhOiBQYWdpbmF0b3I7XG5cdEB1c2luZ0V4dGVuc2lvbihNZXNzYWdlSGFuZGxlci5vdmVycmlkZShNZXNzYWdlSGFuZGxlck92ZXJyaWRlKSlcblx0bWVzc2FnZUhhbmRsZXIhOiBNZXNzYWdlSGFuZGxlcjtcblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldE5hdmlnYXRpb25Nb2RlOiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgYklzU3RpY2t5RWRpdE1vZGUgPVxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlICYmXG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUoKTtcblx0XHRcdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlID8gXCJleHBsYWNlXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0UGFnZVJlYWR5Lm92ZXJyaWRlKHtcblx0XHRcdGlzQ29udGV4dEV4cGVjdGVkOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0cGFnZVJlYWR5ITogUGFnZVJlYWR5O1xuXHRAdXNpbmdFeHRlbnNpb24oTWFzc0VkaXQpXG5cdG1hc3NFZGl0ITogTWFzc0VkaXQ7XG5cdHByaXZhdGUgbUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzPzogUmVjb3JkPHN0cmluZywgT2JqZWN0UGFnZUV4dGVuc2lvbkFQST47XG5cdHByaXZhdGUgZXh0ZW5zaW9uQVBJPzogT2JqZWN0UGFnZUV4dGVuc2lvbkFQSTtcblx0cHJpdmF0ZSBvUmVzb3VyY2VCdW5kbGU/OiBSZXNvdXJjZUJ1bmRsZTtcblx0cHJpdmF0ZSBiU2VjdGlvbk5hdmlnYXRlZD86IGJvb2xlYW47XG5cdHByaXZhdGUgc3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BPdmVyPzogUG9wb3Zlcjtcblx0cHJpdmF0ZSBjdXJyZW50QmluZGluZz86IEJpbmRpbmc7XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldEV4dGVuc2lvbkFQSShzSWQ/OiBzdHJpbmcpOiBFeHRlbnNpb25BUEkge1xuXHRcdGlmIChzSWQpIHtcblx0XHRcdC8vIHRvIGFsbG93IGxvY2FsIElEIHVzYWdlIGZvciBjdXN0b20gcGFnZXMgd2UnbGwgY3JlYXRlL3JldHVybiBvd24gaW5zdGFuY2VzIGZvciBjdXN0b20gc2VjdGlvbnNcblx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzID0gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgfHwge307XG5cblx0XHRcdGlmICghdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSkge1xuXHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzLCBzSWQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICghdGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHRcdH1cblx0fVxuXG5cdG9uSW5pdCgpIHtcblx0XHRzdXBlci5vbkluaXQoKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cblx0XHQvLyBTZXR0aW5nIGRlZmF1bHRzIG9mIGludGVybmFsIG1vZGVsIGNvbnRleHRcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImV4dGVybmFsTmF2aWdhdGlvbkNvbnRleHRcIiwgeyBcInBhZ2VcIjogdHJ1ZSB9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwc1wiLCB7XG5cdFx0XHR2aXNpYmlsaXR5OiBmYWxzZSxcblx0XHRcdGl0ZW1zOiBudWxsXG5cdFx0fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIiwgdGhpcy5fZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblx0XHRpZiAoISh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudXNlTmV3TGF6eUxvYWRpbmcgJiYgKG9PYmplY3RQYWdlIGFzIGFueSkuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSkge1xuXHRcdFx0Ly9BdHRhY2hpbmcgdGhlIGV2ZW50IHRvIG1ha2UgdGhlIHN1YnNlY3Rpb24gY29udGV4dCBiaW5kaW5nIGFjdGl2ZSB3aGVuIGl0IGlzIHZpc2libGUuXG5cdFx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudChcInN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnRcIiwgdGhpcy5faGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydC5iaW5kKHRoaXMpKTtcblx0XHR9XG5cdH1cblxuXHRvbkV4aXQoKSB7XG5cdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBvZiBPYmplY3Qua2V5cyh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykpIHtcblx0XHRcdFx0aWYgKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdLmRlc3Ryb3koKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlIHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5leHRlbnNpb25BUEkpIHtcblx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXG5cdFx0Y29uc3Qgb01lc3NhZ2VCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OkZvb3RlckJhcjo6TWVzc2FnZUJ1dHRvblwiKSxcblx0XHRcdG9NZXNzYWdlUG9wb3ZlciA9IG9NZXNzYWdlQnV0dG9uID8gKG9NZXNzYWdlQnV0dG9uIGFzIGFueSkub01lc3NhZ2VQb3BvdmVyIDogbnVsbDtcblx0XHRpZiAob01lc3NhZ2VQb3BvdmVyICYmIG9NZXNzYWdlUG9wb3Zlci5pc09wZW4oKSkge1xuXHRcdFx0b01lc3NhZ2VQb3BvdmVyLmNsb3NlKCk7XG5cdFx0fVxuXHRcdC8vd2hlbiBleGl0aW5nIHdlIHNldCBrZWVwQWxpdmUgY29udGV4dCB0byBmYWxzZVxuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc0tlZXBBbGl2ZSgpKSB7XG5cdFx0XHRvQ29udGV4dC5zZXRLZWVwQWxpdmUoZmFsc2UpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRUYWJsZUJpbmRpbmcob1RhYmxlOiBhbnkpIHtcblx0XHRyZXR1cm4gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdH1cblxuXHRvbkJlZm9yZVJlbmRlcmluZygpIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmcuYXBwbHkodGhpcyk7XG5cdFx0Ly8gSW4gdGhlIHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Qgc2NlbmFyaW8gd2UgbmVlZCB0byBlbnN1cmUgaW4gY2FzZSBvZiByZWxvYWQvcmVmcmVzaCB0aGF0IHRoZSBtZXRhIG1vZGVsIGluIHRoZSBtZXRob2RlIHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Qgb2YgdGhlIEZpZWxkUnVudGltZSBpcyBhdmFpbGFibGVcblx0XHRpZiAodGhpcy5vVmlldy5vVmlld0RhdGE/LnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgJiYgQ29tbW9uSGVscGVyLmdldE1ldGFNb2RlbCgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdENvbW1vbkhlbHBlci5zZXRNZXRhTW9kZWwodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0b25BZnRlclJlbmRlcmluZygpIHtcblx0XHQoKHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwic2FwLmZlLmkxOG5cIikgYXMgUmVzb3VyY2VNb2RlbCkuZ2V0UmVzb3VyY2VCdW5kbGUoKSBhcyBQcm9taXNlPFJlc291cmNlQnVuZGxlPilcblx0XHRcdC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XG5cdFx0XHRcdHRoaXMub1Jlc291cmNlQnVuZGxlID0gcmVzcG9uc2U7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSByZXNvdXJjZSBidW5kbGVcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0X29uQmVmb3JlQmluZGluZyhvQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Ly8gVE9ETzogd2Ugc2hvdWxkIGNoZWNrIGhvdyB0aGlzIGNvbWVzIHRvZ2V0aGVyIHdpdGggdGhlIHRyYW5zYWN0aW9uIGhlbHBlciwgc2FtZSB0byB0aGUgY2hhbmdlIGluIHRoZSBhZnRlckJpbmRpbmdcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpLFxuXHRcdFx0b09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdG9JbnRlcm5hbE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwsXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiKSxcblx0XHRcdGlWaWV3TGV2ZWwgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnZpZXdMZXZlbDtcblx0XHRsZXQgb0Zhc3RDcmVhdGlvblJvdztcblx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvXCIpO1xuXHRcdGlmIChtUGFyYW1ldGVycy5iRHJhZnROYXZpZ2F0aW9uICE9PSB0cnVlKSB7XG5cdFx0XHR0aGlzLl9jbG9zZVNpZGVDb250ZW50KCk7XG5cdFx0fVxuXHRcdGNvbnN0IG9wQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRpZiAoXG5cdFx0XHRvcENvbnRleHQgJiZcblx0XHRcdG9wQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpICYmXG5cdFx0XHQhYUJhdGNoR3JvdXBzLnNvbWUoKG9wQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmhhc1BlbmRpbmdDaGFuZ2VzLmJpbmQob3BDb250ZXh0LmdldE1vZGVsKCkpKVxuXHRcdCkge1xuXHRcdFx0LyogXHRJbiBjYXNlIHRoZXJlIGFyZSBwZW5kaW5nIGNoYW5nZXMgZm9yIHRoZSBjcmVhdGlvbiByb3cgYW5kIG5vIG90aGVycyB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBjaGFuZ2VzXG4gICAgXHRcdFx0XHRcdFx0VE9ETzogdGhpcyBpcyBqdXN0IGEgcXVpY2sgc29sdXRpb24sIHRoaXMgbmVlZHMgdG8gYmUgcmV3b3JrZWRcbiAgICBcdFx0XHRcdCBcdCovXG5cblx0XHRcdG9wQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIG5vdyB3ZSBoYXZlIHRvIHNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93XG5cdFx0Ly8gVE9ETzogR2V0IHJpZCBvZiB0aGlzIGNvZGluZyBvciBtb3ZlIGl0IHRvIGFub3RoZXIgbGF5ZXIgLSB0byBiZSBkaXNjdXNzZWQgd2l0aCBNREMgYW5kIG1vZGVsXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhVGFibGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRvRmFzdENyZWF0aW9uUm93ID0gYVRhYmxlc1tpXS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0aWYgKG9GYXN0Q3JlYXRpb25Sb3cpIHtcblx0XHRcdFx0b0Zhc3RDcmVhdGlvblJvdy5zZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTY3JvbGwgdG8gcHJlc2VudCBTZWN0aW9uIHNvIHRoYXQgYmluZGluZ3MgYXJlIGVuYWJsZWQgZHVyaW5nIG5hdmlnYXRpb24gdGhyb3VnaCBwYWdpbmF0b3IgYnV0dG9ucywgYXMgdGhlcmUgaXMgbm8gdmlldyByZXJlbmRlcmluZy9yZWJpbmRcblx0XHRjb25zdCBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAoIShvT2JqZWN0UGFnZSBhcyBhbnkpLmlzRmlyc3RSZW5kZXJpbmcoKSAmJiAhbVBhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbCkge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRTZWxlY3RlZFNlY3Rpb24obnVsbCBhcyBhbnkpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnRPbmNlKFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbik7XG5cblx0XHQvLyBpZiB0aGUgc3RydWN0dXJlIG9mIHRoZSBPYmplY3RQYWdlTGF5b3V0IGlzIGNoYW5nZWQgdGhlbiBzY3JvbGwgdG8gcHJlc2VudCBTZWN0aW9uXG5cdFx0Ly8gRklYTUUgSXMgdGhpcyByZWFsbHkgd29ya2luZyBhcyBpbnRlbmRlZCA/IEluaXRpYWxseSB0aGlzIHdhcyBvbkJlZm9yZVJlbmRlcmluZywgYnV0IG5ldmVyIHRyaWdnZXJlZCBvbkJlZm9yZVJlbmRlcmluZyBiZWNhdXNlIGl0IHdhcyByZWdpc3RlcmVkIGFmdGVyIGl0XG5cdFx0Y29uc3Qgb0RlbGVnYXRlT25CZWZvcmUgPSB7XG5cdFx0XHRvbkFmdGVyUmVuZGVyaW5nOiBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb25cblx0XHR9O1xuXHRcdG9PYmplY3RQYWdlLmFkZEV2ZW50RGVsZWdhdGUob0RlbGVnYXRlT25CZWZvcmUsIHRoaXMpO1xuXHRcdHRoaXMucGFnZVJlYWR5LmF0dGFjaEV2ZW50T25jZShcInBhZ2VSZWFkeVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRvT2JqZWN0UGFnZS5yZW1vdmVFdmVudERlbGVnYXRlKG9EZWxlZ2F0ZU9uQmVmb3JlKTtcblx0XHR9KTtcblxuXHRcdC8vU2V0IHRoZSBCaW5kaW5nIGZvciBQYWdpbmF0b3JzIHVzaW5nIExpc3RCaW5kaW5nIElEXG5cdFx0aWYgKGlWaWV3TGV2ZWwgPiAxKSB7XG5cdFx0XHRsZXQgb0JpbmRpbmcgPSBtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5saXN0QmluZGluZztcblx0XHRcdGNvbnN0IG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCA9IG9JbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIpO1xuXHRcdFx0aWYgKG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBvQmluZGluZ1RvVXNlID0gb1BhZ2luYXRvckN1cnJlbnRDb250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShvQmluZGluZ1RvVXNlLCBvUGFnaW5hdG9yQ3VycmVudENvbnRleHQpO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiLCBudWxsKTtcblx0XHRcdH0gZWxzZSBpZiAob0JpbmRpbmcpIHtcblx0XHRcdFx0aWYgKG9CaW5kaW5nLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShvQmluZGluZywgb0NvbnRleHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vaWYgdGhlIGJpbmRpbmcgdHlwZSBpcyBub3QgT0RhdGFMaXN0QmluZGluZyBiZWNhdXNlIG9mIGEgZGVlcGxpbmsgbmF2aWdhdGlvbiBvciBhIHJlZnJlc2ggb2YgdGhlIHBhZ2Vcblx0XHRcdFx0XHQvLyB3ZSBuZWVkIHRvIGNyZWF0ZSBpdFxuXHRcdFx0XHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9IG9CaW5kaW5nLmdldFBhdGgoKS5yZXBsYWNlKC9cXChbXlxcKV0qXFwpKiQvLCBcIlwiKTsgLy9yZW1vdmluZyB0aGUgbGFzdCB0dXBsZVxuXHRcdFx0XHRcdG9CaW5kaW5nID0gbmV3IChPRGF0YUxpc3RCaW5kaW5nIGFzIGFueSkob0JpbmRpbmcub01vZGVsLCBcIlwiLCBvQmluZGluZy5vTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0NvbnRleHRQYXRoKSk7XG5cdFx0XHRcdFx0Y29uc3QgX3NldExpc3RCaW5kaW5nQXN5bmMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAob0JpbmRpbmcuZ2V0Q29udGV4dHMoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUob0JpbmRpbmcsIG9Db250ZXh0KTtcblx0XHRcdFx0XHRcdFx0b0JpbmRpbmcuZGV0YWNoRXZlbnQoXCJjaGFuZ2VcIiwgX3NldExpc3RCaW5kaW5nQXN5bmMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0b0JpbmRpbmcuZ2V0Q29udGV4dHMoMCk7XG5cdFx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoRXZlbnQoXCJjaGFuZ2VcIiwgX3NldExpc3RCaW5kaW5nQXN5bmMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS51c2VOZXdMYXp5TG9hZGluZyAmJiBvT2JqZWN0UGFnZS5nZXRFbmFibGVMYXp5TG9hZGluZygpKSB7XG5cdFx0XHRjb25zdCBhU2VjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpO1xuXHRcdFx0Y29uc3QgYlVzZUljb25UYWJCYXIgPSBvT2JqZWN0UGFnZS5nZXRVc2VJY29uVGFiQmFyKCk7XG5cdFx0XHRsZXQgaVNraXAgPSAyO1xuXHRcdFx0Y29uc3QgYklzSW5FZGl0TW9kZSA9IG9PYmplY3RQYWdlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0XHRcdGNvbnN0IGJFZGl0YWJsZUhlYWRlciA9ICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuZWRpdGFibGVIZWFkZXJDb250ZW50O1xuXHRcdFx0Zm9yIChsZXQgaVNlY3Rpb24gPSAwOyBpU2VjdGlvbiA8IGFTZWN0aW9ucy5sZW5ndGg7IGlTZWN0aW9uKyspIHtcblx0XHRcdFx0Y29uc3Qgb1NlY3Rpb24gPSBhU2VjdGlvbnNbaVNlY3Rpb25dO1xuXHRcdFx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHRmb3IgKGxldCBpU3ViU2VjdGlvbiA9IDA7IGlTdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgaVN1YlNlY3Rpb24rKywgaVNraXAtLSkge1xuXHRcdFx0XHRcdC8vIEluIEljb25UYWJCYXIgbW9kZSBrZWVwIHRoZSBzZWNvbmQgc2VjdGlvbiBib3VuZCBpZiB0aGVyZSBpcyBhbiBlZGl0YWJsZSBoZWFkZXIgYW5kIHdlIGFyZSBzd2l0Y2hpbmcgdG8gZGlzcGxheSBtb2RlXG5cdFx0XHRcdFx0aWYgKGlTa2lwIDwgMSB8fCAoYlVzZUljb25UYWJCYXIgJiYgKGlTZWN0aW9uID4gMSB8fCAoaVNlY3Rpb24gPT09IDEgJiYgIWJFZGl0YWJsZUhlYWRlciAmJiAhYklzSW5FZGl0TW9kZSkpKSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBhU3ViU2VjdGlvbnNbaVN1YlNlY3Rpb25dO1xuXHRcdFx0XHRcdFx0aWYgKG9TdWJTZWN0aW9uLmRhdGEoKS5pc1Zpc2liaWxpdHlEeW5hbWljICE9PSBcInRydWVcIikge1xuXHRcdFx0XHRcdFx0XHRvU3ViU2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dChudWxsIGFzIGFueSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMucGxhY2Vob2xkZXIuaXNQbGFjZWhvbGRlckVuYWJsZWQoKSAmJiBtUGFyYW1ldGVycy5zaG93UGxhY2Vob2xkZXIpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRjb25zdCBvTmF2Q29udGFpbmVyID0gKG9WaWV3LmdldFBhcmVudCgpIGFzIGFueSkub0NvbnRhaW5lci5nZXRQYXJlbnQoKTtcblx0XHRcdGlmIChvTmF2Q29udGFpbmVyKSB7XG5cdFx0XHRcdG9OYXZDb250YWluZXIuc2hvd1BsYWNlaG9sZGVyKHt9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlOiBhbnkpIHtcblx0XHRsZXQgb0ZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0XHRjb25zdCBhQWN0aW9ucyA9IG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgJiYgb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKS5nZXRBY3Rpb25zKCk7XG5cdFx0aWYgKGFBY3Rpb25zICYmIGFBY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0b0ZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IGFBY3Rpb25zLmZpbmQoZnVuY3Rpb24gKG9BY3Rpb246IGFueSkge1xuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIGxlZnQgYWxpZ25tZW50IG9mIHRoZSBEcmFmdCBzd2l0Y2ggYW5kIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0IGF2YXRhciBjb250cm9sc1xuXHRcdFx0XHQvLyB0aGVyZSBpcyBhIFRvb2xiYXJTcGFjZXIgaW4gdGhlIGFjdGlvbnMgYWdncmVnYXRpb24gd2hpY2ggd2UgbmVlZCB0byBleGNsdWRlIGhlcmUhXG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgQUNDIHJlcG9ydCwgd2UgYWxzbyBuZWVkIG5vdCB0byBjaGVjayBmb3IgdGhlIEludmlzaWJsZVRleHQgZWxlbWVudHNcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQhb0FjdGlvbi5pc0EoXCJzYXAudWkuY29yZS5JbnZpc2libGVUZXh0XCIpICYmXG5cdFx0XHRcdFx0IW9BY3Rpb24uaXNBKFwic2FwLm0uVG9vbGJhclNwYWNlclwiKSAmJlxuXHRcdFx0XHRcdG9BY3Rpb24uZ2V0VmlzaWJsZSgpICYmXG5cdFx0XHRcdFx0b0FjdGlvbi5nZXRFbmFibGVkKClcblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gb0ZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0fVxuXG5cdF9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnM6IGFueSkge1xuXHRcdGlmIChhU3ViU2VjdGlvbnMpIHtcblx0XHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHRcdGNvbnN0IGFCbG9ja3MgPSBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCk7XG5cblx0XHRcdFx0aWYgKGFCbG9ja3MpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBibG9jayA9IDA7IGJsb2NrIDwgYUJsb2Nrcy5sZW5ndGg7IGJsb2NrKyspIHtcblx0XHRcdFx0XHRcdGxldCBhRm9ybUNvbnRhaW5lcnM7XG5cblx0XHRcdFx0XHRcdGlmIChhQmxvY2tzW2Jsb2NrXS5pc0EoXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKSkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSBhQmxvY2tzW2Jsb2NrXS5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRcdFx0YUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCAmJlxuXHRcdFx0XHRcdFx0XHRhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50KCkgJiZcblx0XHRcdFx0XHRcdFx0YUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCgpLmlzQShcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gYUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCgpLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChhRm9ybUNvbnRhaW5lcnMpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgZm9ybUNvbnRhaW5lciA9IDA7IGZvcm1Db250YWluZXIgPCBhRm9ybUNvbnRhaW5lcnMubGVuZ3RoOyBmb3JtQ29udGFpbmVyKyspIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRm9ybUVsZW1lbnRzID0gYUZvcm1Db250YWluZXJzW2Zvcm1Db250YWluZXJdLmdldEZvcm1FbGVtZW50cygpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhRm9ybUVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBmb3JtRWxlbWVudCA9IDA7IGZvcm1FbGVtZW50IDwgYUZvcm1FbGVtZW50cy5sZW5ndGg7IGZvcm1FbGVtZW50KyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZpZWxkcyA9IGFGb3JtRWxlbWVudHNbZm9ybUVsZW1lbnRdLmdldEZpZWxkcygpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFRoZSBmaXJzdCBmaWVsZCBpcyBub3QgbmVjZXNzYXJpbHkgYW4gSW5wdXRCYXNlIChlLmcuIGNvdWxkIGJlIGEgVGV4dClcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU28gd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIGl0IGhhcyBhIGdldFJlcXVpcmVkIG1ldGhvZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhRmllbGRzWzBdLmdldFJlcXVpcmVkICYmIGFGaWVsZHNbMF0uZ2V0UmVxdWlyZWQoKSAmJiAhYUZpZWxkc1swXS5nZXRWYWx1ZSgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gYUZpZWxkc1swXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0TG9nLmRlYnVnKGBFcnJvciB3aGVuIHNlYXJjaGluZyBmb3IgbWFuZGFvdHJ5IGVtcHR5IGZpZWxkOiAke2Vycm9yfWApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfdXBkYXRlRm9jdXNJbkVkaXRNb2RlKGFTdWJTZWN0aW9uczogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXG5cdFx0Y29uc3Qgb01hbmRhdG9yeUZpZWxkID0gdGhpcy5fZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zKTtcblx0XHRsZXQgb0ZpZWxkVG9Gb2N1czogYW55O1xuXHRcdGlmIChvTWFuZGF0b3J5RmllbGQpIHtcblx0XHRcdG9GaWVsZFRvRm9jdXMgPSBvTWFuZGF0b3J5RmllbGQuY29udGVudC5nZXRDb250ZW50RWRpdCgpWzBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvRmllbGRUb0ZvY3VzID0gKG9PYmplY3RQYWdlIGFzIGFueSkuX2dldEZpcnN0RWRpdGFibGVJbnB1dCgpIHx8IHRoaXMuX2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZSk7XG5cdFx0fVxuXG5cdFx0aWYgKG9GaWVsZFRvRm9jdXMpIHtcblx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHQvLyBXZSBzZXQgdGhlIGZvY3VzIGluIGEgdGltZWVvdXQsIG90aGVyd2lzZSB0aGUgZm9jdXMgc29tZXRpbWVzIGdvZXMgdG8gdGhlIFRhYkJhclxuXHRcdFx0XHRvRmllbGRUb0ZvY3VzLmZvY3VzKCk7XG5cdFx0XHR9LCAwKTtcblx0XHR9XG5cdH1cblxuXHRfaGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydChvRXZlbnQ6IGFueSkge1xuXHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInN1YlNlY3Rpb25cIik7XG5cdFx0b1N1YlNlY3Rpb24uc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKTtcblx0fVxuXG5cdF9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQ29udGV4dDogYW55KSB7XG5cdFx0aWYgKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGVyUHJveHkoKS5jaGVja0lmQmFja0hhc1NhbWVDb250ZXh0KCkpIHtcblx0XHRcdC8vIEJhY2sgbmF2IHdpbGwga2VlcCB0aGUgc2FtZSBjb250ZXh0IC0tPiBubyBuZWVkIHRvIGRpc3BsYXkgdGhlIGRpYWxvZ1xuXHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0b0NvbnRleHQsXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRkcmFmdC5OYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvblxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdF9vbkFmdGVyQmluZGluZyhvQmluZGluZ0NvbnRleHQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpO1xuXG5cdFx0dGhpcy5fc2lkZUVmZmVjdHMuY2xlYXJQcm9wZXJ0aWVzU3RhdHVzKCk7XG5cblx0XHQvLyBUT0RPOiB0aGlzIGlzIG9ubHkgYSB0ZW1wIHNvbHV0aW9uIGFzIGxvbmcgYXMgdGhlIG1vZGVsIGZpeCB0aGUgY2FjaGUgaXNzdWUgYW5kIHdlIHVzZSB0aGlzIGFkZGl0aW9uYWxcblx0XHQvLyBiaW5kaW5nIHdpdGggb3duUmVxdWVzdFxuXHRcdG9CaW5kaW5nQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cblx0XHRsZXQgYUlCTkFjdGlvbnM6IGFueVtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogYW55KSB7XG5cdFx0XHRvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9TdWJTZWN0aW9uLCBhSUJOQWN0aW9ucyk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdC8vIEFzc2lnbiBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHRzIHRvIG9Gb3JtQ29udGFpbmVyOlxuXHRcdC8vIDEuIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhc3NpZ24gdGhlIGludGVybmFsIGJpbmRpbmcgY29udGV4dCB0byB0aGUgWE1MIGZyYWdtZW50XG5cdFx0Ly8gKEZvcm1Db250YWluZXIuZnJhZ21lbnQueG1sKSB5ZXQgLSBpdCBpcyB1c2VkIGFscmVhZHkgZm9yIHRoZSBkYXRhLXN0cnVjdHVyZS5cblx0XHQvLyAyLiBBbm90aGVyIHByb2JsZW0gaXMsIHRoYXQgRm9ybUNvbnRhaW5lcnMgYXNzaWduZWQgdG8gYSAnTW9yZUJsb2NrJyBkb2VzIG5vdCBoYXZlIGFuXG5cdFx0Ly8gaW50ZXJuYWwgbW9kZWwgY29udGV4dCBhdCBhbGwuXG5cblx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93RmllbGRWYWxpZGl0eVwiLCB7fSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjcmVhdGlvblJvd0N1c3RvbVZhbGlkaXR5XCIsIHt9KTtcblxuXHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXHRcdFx0Ly8gdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIEJDUDogMjA4MDIxODAwNFxuXHRcdFx0Ly8gTmVlZCB0byBmaXggd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTE1Mjc0XG5cdFx0XHQvLyBvbmx5IGZvciBlZGl0IG1vZGUsIHdlIGNsZWFyIHRoZSB0YWJsZSBjYWNoZVxuXHRcdFx0Ly8gV29ya2Fyb3VuZCBzdGFydHMgaGVyZSEhXG5cdFx0XHRjb25zdCBvVGFibGVSb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdGlmIChvVGFibGVSb3dCaW5kaW5nKSB7XG5cdFx0XHRcdGlmIChNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob1RhYmxlUm93QmluZGluZy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKSkge1xuXHRcdFx0XHRcdC8vIGFwcGx5IGZvciBib3RoIGVkaXQgYW5kIGRpc3BsYXkgbW9kZSBpbiBzdGlja3lcblx0XHRcdFx0XHRvVGFibGVSb3dCaW5kaW5nLnJlbW92ZUNhY2hlc0FuZE1lc3NhZ2VzKFwiXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBXb3JrYXJvdW5kIGVuZHMgaGVyZSEhXG5cblx0XHRcdC8vIFVwZGF0ZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgRGF0YUZpZWxkRm9yQWN0aW9uIGJ1dHRvbnMgb24gdGFibGUgdG9vbGJhclxuXHRcdFx0Ly8gVGhlIHNhbWUgaXMgYWxzbyBwZXJmb3JtZWQgb24gVGFibGUgc2VsZWN0aW9uQ2hhbmdlIGV2ZW50XG5cdFx0XHRjb25zdCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gSlNPTi5wYXJzZShcblx0XHRcdFx0XHRDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwgXCJvcGVyYXRpb25BdmFpbGFibGVNYXBcIikpXG5cdFx0XHRcdCksXG5cdFx0XHRcdGFTZWxlY3RlZENvbnRleHRzID0gb1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKTtcblxuXHRcdFx0Q29tbW9uVXRpbHMuc2V0QWN0aW9uRW5hYmxlbWVudChvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAsIGFTZWxlY3RlZENvbnRleHRzKTtcblx0XHR9KTtcblx0XHRDb21tb25VdGlscy5nZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsKHRoaXMsIFwiX3BhZ2VNb2RlbFwiKTtcblx0XHQvL1JldHJpZXZlIE9iamVjdCBQYWdlIGhlYWRlciBhY3Rpb25zIGZyb20gT2JqZWN0IFBhZ2UgdGl0bGUgY29udHJvbFxuXHRcdGNvbnN0IG9PYmplY3RQYWdlVGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpO1xuXHRcdGxldCBhSUJOSGVhZGVyQWN0aW9uczogYW55W10gPSBbXTtcblx0XHRhSUJOSGVhZGVyQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob09iamVjdFBhZ2VUaXRsZSwgYUlCTkhlYWRlckFjdGlvbnMpO1xuXHRcdGFJQk5BY3Rpb25zID0gYUlCTkFjdGlvbnMuY29uY2F0KGFJQk5IZWFkZXJBY3Rpb25zKTtcblx0XHRDb21tb25VdGlscy51cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eShhSUJOQWN0aW9ucywgdGhpcy5nZXRWaWV3KCkpO1xuXG5cdFx0bGV0IG9Nb2RlbDogYW55LCBvRmluYWxVSVN0YXRlOiBhbnk7XG5cblx0XHQvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBtb3ZlZCBpbnRvIGFuIGluaXQgZXZlbnQgb2YgdGhlIE1EQyB0YWJsZXMgKG5vdCB5ZXQgZXhpc3RpbmcpIGFuZCBzaG91bGQgYmUgcGFydFxuXHRcdC8vIG9mIGFueSBjb250cm9sbGVyIGV4dGVuc2lvblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvVGFibGVcblx0XHQgKiBAcGFyYW0gb0xpc3RCaW5kaW5nXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZW5hYmxlRmFzdENyZWF0aW9uUm93KG9UYWJsZTogYW55LCBvTGlzdEJpbmRpbmc6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0Zhc3RDcmVhdGlvblJvdyA9IG9UYWJsZS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0bGV0IG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZywgb0Zhc3RDcmVhdGlvbkNvbnRleHQ7XG5cblx0XHRcdGlmIChvRmFzdENyZWF0aW9uUm93KSB7XG5cdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdy5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikpIHtcblx0XHRcdFx0XHRcdFx0b0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nID0gb01vZGVsLmJpbmRMaXN0KG9MaXN0QmluZGluZy5nZXRQYXRoKCksIG9MaXN0QmluZGluZy5nZXRDb250ZXh0KCksIFtdLCBbXSwge1xuXHRcdFx0XHRcdFx0XHRcdCQkdXBkYXRlR3JvdXBJZDogXCJkb05vdFN1Ym1pdFwiLFxuXHRcdFx0XHRcdFx0XHRcdCQkZ3JvdXBJZDogXCJkb05vdFN1Ym1pdFwiXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHQvLyBXb3JrYXJvdW5kIHN1Z2dlc3RlZCBieSBPRGF0YSBtb2RlbCB2NCBjb2xsZWFndWVzXG5cdFx0XHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZy5yZWZyZXNoSW50ZXJuYWwgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0LyogZG8gbm90aGluZyAqL1xuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHQvKlxuICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25MaXN0QmluZGluZy5oYXNQZW5kaW5nQ2hhbmdlcyA9IGZ1bmN0aW9uKCkge1xuICAgIFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gICAgXHRcdFx0XHRcdFx0XHR9O1xuICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCovXG5cblx0XHRcdFx0XHRcdFx0b0Zhc3RDcmVhdGlvbkNvbnRleHQgPSBvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmcuY3JlYXRlKCk7XG5cdFx0XHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQob0Zhc3RDcmVhdGlvbkNvbnRleHQpO1xuXG5cdFx0XHRcdFx0XHRcdC8vIHRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIGNvbnNvbGUgZXJyb3Jcblx0XHRcdFx0XHRcdFx0b0Zhc3RDcmVhdGlvbkNvbnRleHQuY3JlYXRlZCgpLmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRMb2cudHJhY2UoXCJ0cmFuc2llbnQgZmFzdCBjcmVhdGlvbiBjb250ZXh0IGRlbGV0ZWRcIik7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY29tcHV0aW5nIHRoZSBmaW5hbCBVSSBzdGF0ZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHRoaXMgc2hvdWxkIG5vdCBiZSBuZWVkZWQgYXQgdGhlIGFsbFxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvVGFibGVcblx0XHQgKi9cblx0XHRjb25zdCBoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMgPSAob1RhYmxlOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSksXG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRlbmFibGVGYXN0Q3JlYXRpb25Sb3cob1RhYmxlLCBvQmluZGluZyk7XG5cdFx0XHRcdH07XG5cblx0XHRcdGlmICghb0JpbmRpbmcpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBFeHBlY3RlZCBiaW5kaW5nIG1pc3NpbmcgZm9yIHRhYmxlOiAke29UYWJsZS5nZXRJZCgpfWApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvQmluZGluZy5vQ29udGV4dCkge1xuXHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZuSGFuZGxlQ2hhbmdlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGlmIChvQmluZGluZy5vQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHRcdFx0XHRvQmluZGluZy5kZXRhY2hDaGFuZ2UoZm5IYW5kbGVDaGFuZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0b01vZGVsID0gb0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCk7XG5cblx0XHRcdC8vIENvbXB1dGUgRWRpdCBNb2RlXG5cdFx0XHRvRmluYWxVSVN0YXRlID0gdGhpcy5fZWRpdEZsb3cuY29tcHV0ZUVkaXRNb2RlKG9CaW5kaW5nQ29udGV4dCk7XG5cblx0XHRcdGlmIChNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChvTW9kZWwuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbm5lY3QodGhpcy5nZXRWaWV3KCkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIGZpbmFsIFVJIFN0YXRlXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHVwZGF0ZSByZWxhdGVkIGFwcHMgb25jZSBEYXRhIGlzIHJlY2VpdmVkIGluIGNhc2Ugb2YgYmluZGluZyBjYWNoZSBpcyBub3QgYXZhaWxhYmxlXG5cdFx0XHQvLyBUT0RPOiB0aGlzIGlzIG9ubHkgYSB0ZW1wIHNvbHV0aW9uIHNpbmNlIHdlIG5lZWQgdG8gY2FsbCBfdXBkYXRlUmVsYXRlZEFwcHMgbWV0aG9kIG9ubHkgYWZ0ZXIgZGF0YSBmb3IgT2JqZWN0IFBhZ2UgaXMgcmVjZWl2ZWQgKGlmIHRoZXJlIGlzIG5vIGJpbmRpbmcpXG5cdFx0XHRpZiAob0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKS5vQ2FjaGUpIHtcblx0XHRcdFx0dGhpcy5fdXBkYXRlUmVsYXRlZEFwcHMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZuVXBkYXRlUmVsYXRlZEFwcHMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlUmVsYXRlZEFwcHMoKTtcblx0XHRcdFx0XHRvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpLmRldGFjaERhdGFSZWNlaXZlZChmblVwZGF0ZVJlbGF0ZWRBcHBzKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKS5hdHRhY2hEYXRhUmVjZWl2ZWQoZm5VcGRhdGVSZWxhdGVkQXBwcyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vQXR0YWNoIHRoZSBwYXRjaCBzZW50IGFuZCBwYXRjaCBjb21wbGV0ZWQgZXZlbnQgdG8gdGhlIG9iamVjdCBwYWdlIGJpbmRpbmcgc28gdGhhdCB3ZSBjYW4gcmVhY3Rcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gKG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nICYmIG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkpIHx8IG9CaW5kaW5nQ29udGV4dDtcblxuXHRcdFx0Ly8gQXR0YWNoIHRoZSBldmVudCBoYW5kbGVyIG9ubHkgb25jZSB0byB0aGUgc2FtZSBiaW5kaW5nXG5cdFx0XHRpZiAodGhpcy5jdXJyZW50QmluZGluZyAhPT0gb0JpbmRpbmcpIHtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoRXZlbnQoXCJwYXRjaFNlbnRcIiwgdGhpcy5lZGl0Rmxvdy5oYW5kbGVQYXRjaFNlbnQsIHRoaXMpO1xuXHRcdFx0XHR0aGlzLmN1cnJlbnRCaW5kaW5nID0gb0JpbmRpbmc7XG5cdFx0XHR9XG5cblx0XHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdFx0Ly8gYWNjZXNzIGJpbmRpbmcgb25seSBhZnRlciB0YWJsZSBpcyBib3VuZFxuXHRcdFx0XHRUYWJsZVV0aWxzLndoZW5Cb3VuZChvVGFibGUpXG5cdFx0XHRcdFx0LnRoZW4oaGFuZGxlVGFibGVNb2RpZmljYXRpb25zKVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0YWJsZSB0byBiZSBib3VuZFwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmICghKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS51c2VOZXdMYXp5TG9hZGluZykge1xuXHRcdFx0XHQvLyBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgYmluZGluZyBpcyByZWFkeSBoZW5jZSBjYWxsaW5nIGl0IGluIG9uQWZ0ZXJCaW5kaW5nXG5cdFx0XHRcdChvT2JqZWN0UGFnZSBhcyBhbnkpLl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblBhZ2VSZWFkeShtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Y29uc3Qgc2V0Rm9jdXMgPSAoKSA9PiB7XG5cdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBmaXJzdCBhY3Rpb24gYnV0dG9uLCBvciB0byB0aGUgZmlyc3QgZWRpdGFibGUgaW5wdXQgaWYgaW4gZWRpdGFibGUgbW9kZVxuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3QgaXNJbkRpc3BsYXlNb2RlID0gIW9PYmplY3RQYWdlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblxuXHRcdFx0aWYgKGlzSW5EaXNwbGF5TW9kZSkge1xuXHRcdFx0XHRjb25zdCBvRmlyc3RDbGlja2FibGVFbGVtZW50ID0gdGhpcy5fZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHRcdFx0aWYgKG9GaXJzdENsaWNrYWJsZUVsZW1lbnQpIHtcblx0XHRcdFx0XHRvRmlyc3RDbGlja2FibGVFbGVtZW50LmZvY3VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG9TZWxlY3RlZFNlY3Rpb246IGFueSA9IENvcmUuYnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSk7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShvU2VsZWN0ZWRTZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Ly8gQXBwbHkgYXBwIHN0YXRlIG9ubHkgYWZ0ZXIgdGhlIHBhZ2UgaXMgcmVhZHkgd2l0aCB0aGUgZmlyc3Qgc2VjdGlvbiBzZWxlY3RlZFxuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdC8vU2hvdyBwb3B1cCB3aGlsZSBuYXZpZ2F0aW5nIGJhY2sgZnJvbSBvYmplY3QgcGFnZSBpbiBjYXNlIG9mIGRyYWZ0XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCgob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0aWYgKCFiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbigoKSA9PiB0aGlzLl9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQmluZGluZ0NvbnRleHQpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKVxuXHRcdFx0LmdldEFwcFN0YXRlSGFuZGxlcigpXG5cdFx0XHQuYXBwbHlBcHBTdGF0ZSgpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGlmIChtUGFyYW1ldGVycy5mb3JjZUZvY3VzKSB7XG5cdFx0XHRcdFx0c2V0Rm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoRXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgc2V0dGluZyB0aGUgZm9jdXNcIiwgRXJyb3IpO1xuXHRcdFx0fSk7XG5cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0dGhpcy5fY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb24uXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvblxuXHQgKi9cblx0Z2V0U3RpY2t5RWRpdE1vZGUoKSB7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQgJiYgKHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk7XG5cdFx0bGV0IGJJc1N0aWNreUVkaXRNb2RlID0gZmFsc2U7XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCk7XG5cdFx0XHRpZiAoYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRiSXNTdGlja3lFZGl0TW9kZSA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlO1xuXHR9XG5cblx0X2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkge1xuXHRcdHJldHVybiB0aGlzLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHR9XG5cblx0X2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKCkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZVN1YnRpdGxlID0gb09iamVjdFBhZ2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoZnVuY3Rpb24gKG9DdXN0b21EYXRhOiBhbnkpIHtcblx0XHRcdHJldHVybiBvQ3VzdG9tRGF0YS5nZXRLZXkoKSA9PT0gXCJPYmplY3RQYWdlU3VidGl0bGVcIjtcblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGU6IG9PYmplY3RQYWdlLmRhdGEoXCJPYmplY3RQYWdlVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdHN1YnRpdGxlOiBvT2JqZWN0UGFnZVN1YnRpdGxlICYmIG9PYmplY3RQYWdlU3VidGl0bGUuZ2V0VmFsdWUoKSxcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCJcblx0XHR9O1xuXHR9XG5cblx0X2V4ZWN1dGVIZWFkZXJTaG9ydGN1dChzSWQ6IGFueSkge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IGAke3RoaXMuZ2V0VmlldygpLmdldElkKCl9LS0ke3NJZH1gLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSlcblx0XHRcdFx0LmdldEFjdGlvbnMoKVxuXHRcdFx0XHQuZmluZChmdW5jdGlvbiAob0VsZW1lbnQ6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBvRWxlbWVudC5nZXRJZCgpID09PSBzQnV0dG9uSWQ7XG5cdFx0XHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0fVxuXG5cdF9leGVjdXRlRm9vdGVyU2hvcnRjdXQoc0lkOiBhbnkpIHtcblx0XHRjb25zdCBzQnV0dG9uSWQgPSBgJHt0aGlzLmdldFZpZXcoKS5nZXRJZCgpfS0tJHtzSWR9YCxcblx0XHRcdG9CdXR0b24gPSAodGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRGb290ZXIoKSBhcyBhbnkpLmdldENvbnRlbnQoKS5maW5kKGZ1bmN0aW9uIChvRWxlbWVudDogYW55KSB7XG5cdFx0XHRcdHJldHVybiBvRWxlbWVudC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSA9PT0gXCJzYXAubS5CdXR0b25cIiAmJiBvRWxlbWVudC5nZXRJZCgpID09PSBzQnV0dG9uSWQ7XG5cdFx0XHR9KTtcblx0XHRDb21tb25VdGlscy5maXJlQnV0dG9uUHJlc3Mob0J1dHRvbik7XG5cdH1cblxuXHRfZXhlY3V0ZVRhYlNob3J0Q3V0KG9FeGVjdXRpb246IGFueSkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSxcblx0XHRcdGFTZWN0aW9ucyA9IG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCksXG5cdFx0XHRpU2VjdGlvbkluZGV4TWF4ID0gYVNlY3Rpb25zLmxlbmd0aCAtIDEsXG5cdFx0XHRzQ29tbWFuZCA9IG9FeGVjdXRpb24ub1NvdXJjZS5nZXRDb21tYW5kKCk7XG5cdFx0bGV0IG5ld1NlY3Rpb24sXG5cdFx0XHRpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPSBvT2JqZWN0UGFnZS5pbmRleE9mU2VjdGlvbih0aGlzLmJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkpIGFzIE9iamVjdFBhZ2VTZWN0aW9uKTtcblx0XHRpZiAoaVNlbGVjdGVkU2VjdGlvbkluZGV4ICE9PSAtMSAmJiBpU2VjdGlvbkluZGV4TWF4ID4gMCkge1xuXHRcdFx0aWYgKHNDb21tYW5kID09PSBcIk5leHRUYWJcIikge1xuXHRcdFx0XHRpZiAoaVNlbGVjdGVkU2VjdGlvbkluZGV4IDw9IGlTZWN0aW9uSW5kZXhNYXggLSAxKSB7XG5cdFx0XHRcdFx0bmV3U2VjdGlvbiA9IGFTZWN0aW9uc1srK2lTZWxlY3RlZFNlY3Rpb25JbmRleF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoaVNlbGVjdGVkU2VjdGlvbkluZGV4ICE9PSAwKSB7XG5cdFx0XHRcdC8vIFByZXZpb3VzVGFiXG5cdFx0XHRcdG5ld1NlY3Rpb24gPSBhU2VjdGlvbnNbLS1pU2VsZWN0ZWRTZWN0aW9uSW5kZXhdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobmV3U2VjdGlvbikge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRTZWxlY3RlZFNlY3Rpb24obmV3U2VjdGlvbik7XG5cdFx0XHRcdG5ld1NlY3Rpb24uZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0Rm9vdGVyVmlzaWJpbGl0eSgpIHtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IHNWaWV3SWQgPSB0aGlzLmdldFZpZXcoKS5nZXRJZCgpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm1lc3NhZ2VGb290ZXJDb250YWluc0Vycm9yc1wiLCBmYWxzZSk7XG5cdFx0c2FwLnVpXG5cdFx0XHQuZ2V0Q29yZSgpXG5cdFx0XHQuZ2V0TWVzc2FnZU1hbmFnZXIoKVxuXHRcdFx0LmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHQuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IGFueSkge1xuXHRcdFx0XHRpZiAob01lc3NhZ2UudmFsaWRhdGlvbiAmJiBvTWVzc2FnZS50eXBlID09PSBcIkVycm9yXCIgJiYgb01lc3NhZ2UudGFyZ2V0LmluZGV4T2Yoc1ZpZXdJZCkgPiAtMSkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm1lc3NhZ2VGb290ZXJDb250YWluc0Vycm9yc1wiLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cblxuXHRfc2hvd01lc3NhZ2VQb3BvdmVyKGVycj86IGFueSwgb1JldD86IGFueSkge1xuXHRcdGlmIChlcnIpIHtcblx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdH1cblx0XHRpZiAoISh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RDb250YWluZXIoKSBhcyBhbnkpLmdldEN1cnJlbnRQYWdlKCkuaXNBKFwic2FwLm0uTWVzc2FnZVBhZ2VcIikpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChcImZlOjpGb290ZXJCYXI6Ok1lc3NhZ2VCdXR0b25cIikgYXMgYW55LFxuXHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIgPSBvTWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIsXG5cdFx0XHRcdG9JdGVtQmluZGluZyA9IG9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIik7XG5cblx0XHRcdGlmIChvSXRlbUJpbmRpbmcuZ2V0TGVuZ3RoKCkgPiAwICYmICFvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdFx0b01lc3NhZ2VCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCBvTWVzc2FnZUJ1dHRvbiBpcyByZW5kZXJlZCB3aGVuIG9wZW5CeSBpcyBjYWxsZWRcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyLm9wZW5CeShvTWVzc2FnZUJ1dHRvbik7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1JldDtcblx0fVxuXG5cdF9lZGl0RG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIik7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuZWRpdERvY3VtZW50LmFwcGx5KHRoaXMuZWRpdEZsb3csIFtvQ29udGV4dF0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHR9KTtcblx0fVxuXG5cdF9zYXZlRG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIiksXG5cdFx0XHRhV2FpdENyZWF0ZURvY3VtZW50czogYW55W10gPSBbXTtcblx0XHQvLyBpbmRpY2F0ZXMgaWYgd2UgYXJlIGNyZWF0aW5nIGEgbmV3IHJvdyBpbiB0aGUgT1Bcblx0XHRsZXQgYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSBmYWxzZTtcblx0XHRCdXN5TG9ja2VyLmxvY2sob01vZGVsKTtcblx0XHR0aGlzLl9maW5kVGFibGVzKCkuZm9yRWFjaCgob1RhYmxlOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSk7XG5cdFx0XHRjb25zdCBtUGFyYW1ldGVyczogYW55ID0ge1xuXHRcdFx0XHRjcmVhdGlvbk1vZGU6IG9UYWJsZS5kYXRhKFwiY3JlYXRpb25Nb2RlXCIpLFxuXHRcdFx0XHRjcmVhdGlvblJvdzogb1RhYmxlLmdldENyZWF0aW9uUm93KCksXG5cdFx0XHRcdGNyZWF0ZUF0RW5kOiBvVGFibGUuZGF0YShcImNyZWF0ZUF0RW5kXCIpID09PSBcInRydWVcIlxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGJDcmVhdGVEb2N1bWVudCA9XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmNyZWF0aW9uUm93ICYmXG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmNyZWF0aW9uUm93LmdldEJpbmRpbmdDb250ZXh0KCkgJiZcblx0XHRcdFx0T2JqZWN0LmtleXMobVBhcmFtZXRlcnMuY3JlYXRpb25Sb3cuZ2V0QmluZGluZ0NvbnRleHQoKS5nZXRPYmplY3QoKSkubGVuZ3RoID4gMTtcblx0XHRcdGlmIChiQ3JlYXRlRG9jdW1lbnQpIHtcblx0XHRcdFx0Ly8gdGhlIGJTa2lwU2lkZUVmZmVjdHMgaXMgYSBwYXJhbWV0ZXIgY3JlYXRlZCB3aGVuIHdlIGNsaWNrIHRoZSBzYXZlIGtleS4gSWYgd2UgcHJlc3MgdGhpcyBrZXlcblx0XHRcdFx0Ly8gd2UgZG9uJ3QgZXhlY3V0ZSB0aGUgaGFuZGxlU2lkZUVmZmVjdHMgZnVuY2l0b24gdG8gYXZvaWQgYmF0Y2ggcmVkdW5kYW5jeVxuXHRcdFx0XHRtUGFyYW1ldGVycy5iU2tpcFNpZGVFZmZlY3RzID0gdHJ1ZTtcblx0XHRcdFx0YkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRhV2FpdENyZWF0ZURvY3VtZW50cy5wdXNoKFxuXHRcdFx0XHRcdHRoaXMuZWRpdEZsb3cuY3JlYXRlRG9jdW1lbnQob0JpbmRpbmcsIG1QYXJhbWV0ZXJzKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvQmluZGluZztcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChhV2FpdENyZWF0ZURvY3VtZW50cylcblx0XHRcdC50aGVuKChhQmluZGluZ3M6IGFueVtdKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG1QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRcdGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yOiBiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcixcblx0XHRcdFx0XHRiaW5kaW5nczogYUJpbmRpbmdzXG5cdFx0XHRcdH07XG5cdFx0XHRcdC8vIFdlIG5lZWQgdG8gZWl0aGVyIHJlamVjdCBvciByZXNvbHZlIGEgcHJvbWlzZSBoZXJlIGFuZCByZXR1cm4gaXQgc2luY2UgdGhpcyBzYXZlXG5cdFx0XHRcdC8vIGZ1bmN0aW9uIGlzIG5vdCBvbmx5IGNhbGxlZCB3aGVuIHByZXNzaW5nIHRoZSBzYXZlIGJ1dHRvbiBpbiB0aGUgZm9vdGVyLCBidXQgYWxzb1xuXHRcdFx0XHQvLyB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgY3JlYXRlIG9yIHNhdmUgaW4gYSBkYXRhbG9zcyBwb3B1cC5cblx0XHRcdFx0Ly8gVGhlIGxvZ2ljIG9mIHRoZSBkYXRhbG9zcyBwb3B1cCBuZWVkcyB0byBkZXRlY3QgaWYgdGhlIHNhdmUgaGFkIGVycm9ycyBvciBub3QgaW4gb3JkZXJcblx0XHRcdFx0Ly8gdG8gZGVjaWRlIGlmIHRoZSBzdWJzZXF1ZW50IGFjdGlvbiAtIGxpa2UgYSBiYWNrIG5hdmlnYXRpb24gLSBoYXMgdG8gYmUgZXhlY3V0ZWQgb3Igbm90LlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5zYXZlRG9jdW1lbnQob0NvbnRleHQsIG1QYXJhbWV0ZXJzKS5jYXRjaCgoLi4uYXJncykgPT4ge1xuXHRcdFx0XHRcdC8vIElmIHRoZSBzYXZlRG9jdW1lbnQgaW4gZWRpdEZsb3cgcmV0dXJucyBlcnJvcnMgd2UgbmVlZFxuXHRcdFx0XHRcdC8vIHRvIHNob3cgdGhlIG1lc3NhZ2UgcG9wb3ZlciBoZXJlIGFuZCBlbnN1cmUgdGhhdCB0aGVcblx0XHRcdFx0XHQvLyBkYXRhbG9zcyBsb2dpYyBkb2VzIG5vdCBwZXJmb3JtIHRoZSBmb2xsb3cgdXAgZnVuY3Rpb25cblx0XHRcdFx0XHQvLyBsaWtlIGUuZy4gYSBiYWNrIG5hdmlnYXRpb24gaGVuY2Ugd2UgcmV0dXJuIGEgcHJvbWlzZSBhbmQgcmVqZWN0IGl0XG5cdFx0XHRcdFx0dGhpcy5fc2hvd01lc3NhZ2VQb3BvdmVyKC4uLmFyZ3MpO1xuXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdCguLi5hcmdzKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChvTW9kZWwpKSB7XG5cdFx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cblxuXHRfbWFuYWdlQ29sbGFib3JhdGlvbigpIHtcblx0XHRvcGVuTWFuYWdlRGlhbG9nKHRoaXMuZ2V0VmlldygpKTtcblx0fVxuXG5cdF9zaG93Q29sbGFib3JhdGlvblVzZXJEZXRhaWxzKGV2ZW50OiBhbnkpIHtcblx0XHRzaG93VXNlckRldGFpbHMoZXZlbnQsIHRoaXMuZ2V0VmlldygpKTtcblx0fVxuXG5cdF9jYW5jZWxEb2N1bWVudChvQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0bVBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChtUGFyYW1ldGVycy5jYW5jZWxCdXR0b24pOyAvL3RvIGdldCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBjYW5jZWwgYnV0dG9uIGZyb20gY29tbWFuZCBleGVjdXRpb25cblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5jYW5jZWxEb2N1bWVudChvQ29udGV4dCwgbVBhcmFtZXRlcnMpO1xuXHR9XG5cblx0X2FwcGx5RG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmFwcGx5RG9jdW1lbnQob0NvbnRleHQpLmNhdGNoKCgpID0+IHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcigpKTtcblx0fVxuXG5cdF9zaG93U3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BvdmVyID0gRHJhZnRIYW5kbGVyLnNob3dTd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcG92ZXI7XG5cdF9zd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcG92ZXJMaXN0U2VsZWN0ID0gRHJhZnRIYW5kbGVyLnN3aXRjaERyYWZ0QW5kQWN0aXZlUG9wb3Zlckxpc3RTZWxlY3Q7XG5cblx0X3VwZGF0ZVJlbGF0ZWRBcHBzKCkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRpZiAoQ29tbW9uVXRpbHMucmVzb2x2ZVN0cmluZ3RvQm9vbGVhbihvT2JqZWN0UGFnZS5kYXRhKFwic2hvd1JlbGF0ZWRBcHBzXCIpKSkge1xuXHRcdFx0Q29tbW9uVXRpbHMudXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzKG9PYmplY3RQYWdlKTtcblx0XHR9XG5cdH1cblxuXHRfZmluZFRhYmxlSW5TdWJTZWN0aW9uKGFQYXJlbnRFbGVtZW50OiBhbnksIGFTdWJzZWN0aW9uOiBhbnksIGFUYWJsZXM6IGFueSkge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9uVGFibGVzID0gW107XG5cdFx0Zm9yIChsZXQgZWxlbWVudCA9IDA7IGVsZW1lbnQgPCBhUGFyZW50RWxlbWVudC5sZW5ndGg7IGVsZW1lbnQrKykge1xuXHRcdFx0bGV0IG9FbGVtZW50ID0gYVBhcmVudEVsZW1lbnRbZWxlbWVudF0uZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIGFQYXJlbnRFbGVtZW50W2VsZW1lbnRdLmdldENvbnRlbnQoKTtcblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5nZXRNYWluQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9FbGVtZW50LmdldE1haW5Db250ZW50KCk7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudFswXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAuZmUubWFjcm9zLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnQuZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9FbGVtZW50LmdldENvbnRlbnQoKTtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50WzBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0YVRhYmxlcy5wdXNoKG9FbGVtZW50KTtcblx0XHRcdFx0YVN1YlNlY3Rpb25UYWJsZXMucHVzaCh7XG5cdFx0XHRcdFx0XCJ0YWJsZVwiOiBvRWxlbWVudCxcblx0XHRcdFx0XHRcImdyaWRUYWJsZVwiOiBvRWxlbWVudC5nZXRUeXBlKCkuaXNBKFwic2FwLnVpLm1kYy50YWJsZS5HcmlkVGFibGVUeXBlXCIpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHRhU3ViU2VjdGlvblRhYmxlcy5sZW5ndGggPT09IDEgJiZcblx0XHRcdGFQYXJlbnRFbGVtZW50Lmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0YVN1YlNlY3Rpb25UYWJsZXNbMF0uZ3JpZFRhYmxlICYmXG5cdFx0XHQhYVN1YnNlY3Rpb24uaGFzU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKVxuXHRcdCkge1xuXHRcdFx0Ly9JbiBjYXNlIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgdGFibGUgaW4gYSBzZWN0aW9uIHdlIGZpdCB0aGF0IHRvIHRoZSB3aG9sZSBwYWdlIHNvIHRoYXQgdGhlIHNjcm9sbGJhciBjb21lcyBvbmx5IG9uIHRhYmxlIGFuZCBub3Qgb24gcGFnZVxuXHRcdFx0YVN1YnNlY3Rpb24uYWRkU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKTtcblx0XHR9IGVsc2UgaWYgKGFTdWJTZWN0aW9uVGFibGVzICYmICFhU3Vic2VjdGlvbi5oYXNTdHlsZUNsYXNzKFwic2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyXCIpKSB7XG5cdFx0XHRhU3ViU2VjdGlvblRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IHsgdGFibGU6IGFueTsgZ3JpZFRhYmxlOiBhbnkgfSkge1xuXHRcdFx0XHRpZiAob1RhYmxlLmdyaWRUYWJsZSkge1xuXHRcdFx0XHRcdC8vUmVzZXR0aW5nIHRoZSByb3cgY291bnQgdG8gZGVmYXVsdCB2YWx1ZSBpbiBjYXNlIHdlIGhhdmUgYSBjb21iaW5hdGlvbiBvZiBmb3JtcyBhbmQgdGFibGVzIG9yIG11bHRpcGxlIHRhYmxlcyBpbiBhIHN1YnNlY3Rpb25cblx0XHRcdFx0XHRvVGFibGUudGFibGUuZ2V0VHlwZSgpLnNldFJvd0NvdW50KG51bGwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0QWxsU3ViU2VjdGlvbnMoKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGxldCBhU3ViU2VjdGlvbnM6IGFueVtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogYW55KSB7XG5cdFx0XHRhU3ViU2VjdGlvbnMgPSBhU3ViU2VjdGlvbnMuY29uY2F0KG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhU3ViU2VjdGlvbnM7XG5cdH1cblxuXHRfZ2V0QWxsQmxvY2tzKCkge1xuXHRcdGxldCBhQmxvY2tzOiBhbnlbXSA9IFtdO1xuXHRcdHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IGFueSkge1xuXHRcdFx0YUJsb2NrcyA9IGFCbG9ja3MuY29uY2F0KG9TdWJTZWN0aW9uLmdldEJsb2NrcygpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYUJsb2Nrcztcblx0fVxuXG5cdF9maW5kVGFibGVzKCkge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYVRhYmxlczogYW55W10gPSBbXTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0dGhpcy5fZmluZFRhYmxlSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhVGFibGVzKTtcblx0XHRcdHRoaXMuX2ZpbmRUYWJsZUluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVRhYmxlcztcblx0fVxuXG5cdF9jbG9zZVNpZGVDb250ZW50KCkge1xuXHRcdHRoaXMuX2dldEFsbEJsb2NrcygpLmZvckVhY2goZnVuY3Rpb24gKG9CbG9jazogYW55KSB7XG5cdFx0XHRjb25zdCBvQ29udGVudCA9IG9CbG9jay5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0Jsb2NrLmdldENvbnRlbnQoKTtcblx0XHRcdGlmIChvQ29udGVudCAmJiBvQ29udGVudC5pc0EgJiYgb0NvbnRlbnQuaXNBKFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0aWYgKG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0b0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYXJ0IENvbnRleHQgaXMgcmVzb2x2ZWQgZm9yIDE6biBtaWNyb2NoYXJ0cy5cblx0ICpcblx0ICogQHBhcmFtIG9DaGFydENvbnRleHQgVGhlIENvbnRleHQgb2YgdGhlIE1pY3JvQ2hhcnRcblx0ICogQHBhcmFtIHNDaGFydFBhdGggVGhlIGNvbGxlY3Rpb25QYXRoIG9mIHRoZSB0aGUgY2hhcnRcblx0ICogQHJldHVybnMgQXJyYXkgb2YgQXR0cmlidXRlcyBvZiB0aGUgY2hhcnQgQ29udGV4dFxuXHQgKi9cblx0X2dldENoYXJ0Q29udGV4dERhdGEob0NoYXJ0Q29udGV4dDogYW55LCBzQ2hhcnRQYXRoOiBzdHJpbmcpIHtcblx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvQ2hhcnRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdGxldCBvQ2hhcnRDb250ZXh0RGF0YSA9IFtvQ29udGV4dERhdGFdO1xuXHRcdGlmIChvQ2hhcnRDb250ZXh0ICYmIHNDaGFydFBhdGgpIHtcblx0XHRcdGlmIChvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF0pIHtcblx0XHRcdFx0b0NoYXJ0Q29udGV4dERhdGEgPSBvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF07XG5cdFx0XHRcdGRlbGV0ZSBvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF07XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhLnB1c2gob0NvbnRleHREYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9DaGFydENvbnRleHREYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNjcm9sbCB0aGUgdGFibGVzIHRvIHRoZSByb3cgd2l0aCB0aGUgc1BhdGhcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyI19zY3JvbGxUYWJsZXNUb1Jvd1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1Jvd1BhdGggJ3NQYXRoIG9mIHRoZSB0YWJsZSByb3cnXG5cdCAqL1xuXG5cdF9zY3JvbGxUYWJsZXNUb1JvdyhzUm93UGF0aDogc3RyaW5nKSB7XG5cdFx0aWYgKHRoaXMuX2ZpbmRUYWJsZXMgJiYgdGhpcy5fZmluZFRhYmxlcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFUYWJsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0VGFibGVTY3JvbGxlci5zY3JvbGxUYWJsZVRvUm93KGFUYWJsZXNbaV0sIHNSb3dQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIG1lcmdlIHNlbGVjdGVkIGNvbnRleHRzIGFuZCBmaWx0ZXJzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX21lcmdlTXVsdGlwbGVDb250ZXh0c1xuXHQgKiBAcGFyYW0gb1BhZ2VDb250ZXh0IFBhZ2UgY29udGV4dFxuXHQgKiBAcGFyYW0gYUxpbmVDb250ZXh0IFNlbGVjdGVkIENvbnRleHRzXG5cdCAqIEBwYXJhbSBzQ2hhcnRQYXRoIENvbGxlY3Rpb24gbmFtZSBvZiB0aGUgY2hhcnRcblx0ICogQHJldHVybnMgU2VsZWN0aW9uIFZhcmlhbnQgT2JqZWN0XG5cdCAqL1xuXHRfbWVyZ2VNdWx0aXBsZUNvbnRleHRzKG9QYWdlQ29udGV4dDogQ29udGV4dCwgYUxpbmVDb250ZXh0OiBhbnlbXSwgc0NoYXJ0UGF0aDogc3RyaW5nKSB7XG5cdFx0bGV0IGFBdHRyaWJ1dGVzOiBhbnlbXSA9IFtdLFxuXHRcdFx0YVBhZ2VBdHRyaWJ1dGVzID0gW10sXG5cdFx0XHRvQ29udGV4dCxcblx0XHRcdHNNZXRhUGF0aExpbmU6IHN0cmluZyxcblx0XHRcdHNQYXRoTGluZTtcblxuXHRcdGNvbnN0IHNQYWdlUGF0aCA9IG9QYWdlQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9QYWdlQ29udGV4dCAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKSAmJiAob1BhZ2VDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwpO1xuXHRcdGNvbnN0IHNNZXRhUGF0aFBhZ2UgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhZ2VQYXRoKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0Ly8gR2V0IHNpbmdsZSBsaW5lIGNvbnRleHQgaWYgbmVjZXNzYXJ5XG5cdFx0aWYgKGFMaW5lQ29udGV4dCAmJiBhTGluZUNvbnRleHQubGVuZ3RoKSB7XG5cdFx0XHRvQ29udGV4dCA9IGFMaW5lQ29udGV4dFswXTtcblx0XHRcdHNQYXRoTGluZSA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRcdHNNZXRhUGF0aExpbmUgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGhMaW5lKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0XHRhTGluZUNvbnRleHQuZm9yRWFjaCgob1NpbmdsZUNvbnRleHQ6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAoc0NoYXJ0UGF0aCkge1xuXHRcdFx0XHRcdGNvbnN0IG9DaGFydENvbnRleHREYXRhID0gdGhpcy5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvU2luZ2xlQ29udGV4dCwgc0NoYXJ0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKG9DaGFydENvbnRleHREYXRhKSB7XG5cdFx0XHRcdFx0XHRhQXR0cmlidXRlcyA9IG9DaGFydENvbnRleHREYXRhLm1hcChmdW5jdGlvbiAob1N1YkNoYXJ0Q29udGV4dERhdGE6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHREYXRhOiBvU3ViQ2hhcnRDb250ZXh0RGF0YSxcblx0XHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IGAke3NNZXRhUGF0aFBhZ2V9LyR7c0NoYXJ0UGF0aH1gXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1NpbmdsZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aExpbmVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGFQYWdlQXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdGNvbnRleHREYXRhOiBvUGFnZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aFBhZ2Vcblx0XHR9KTtcblx0XHQvLyBBZGRpbmcgUGFnZSBDb250ZXh0IHRvIHNlbGVjdGlvbiB2YXJpYW50XG5cdFx0YVBhZ2VBdHRyaWJ1dGVzID0gQ29tbW9uVXRpbHMucmVtb3ZlU2Vuc2l0aXZlRGF0YShhUGFnZUF0dHJpYnV0ZXMsIG9NZXRhTW9kZWwpO1xuXHRcdGNvbnN0IG9QYWdlTGV2ZWxTViA9IENvbW1vblV0aWxzLmFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50KG5ldyBTZWxlY3Rpb25WYXJpYW50KCksIGFQYWdlQXR0cmlidXRlcywgdGhpcy5nZXRWaWV3KCkpO1xuXHRcdGFBdHRyaWJ1dGVzID0gQ29tbW9uVXRpbHMucmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlcywgb01ldGFNb2RlbCk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9QYWdlTGV2ZWxTVixcblx0XHRcdGF0dHJpYnV0ZXM6IGFBdHRyaWJ1dGVzXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKSB7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnksXG5cdFx0XHRvQ29uZmlndXJhdGlvbnMgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sXG5cdFx0XHRhQ29uZmlndXJhdGlvbnMgPSBvQ29uZmlndXJhdGlvbnMgJiYgT2JqZWN0LmtleXMob0NvbmZpZ3VyYXRpb25zKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IFtcIiRhdXRvLkhlcm9lc1wiLCBcIiRhdXRvLkRlY29yYXRpb25cIiwgXCIkYXV0by5Xb3JrZXJzXCJdO1xuXG5cdFx0aWYgKGFDb25maWd1cmF0aW9ucyAmJiBhQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvQ29uZmlndXJhdGlvbiA9IG9Db25maWd1cmF0aW9uc1tzS2V5XTtcblx0XHRcdFx0aWYgKG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkID09PSBcIkxvbmdSdW5uZXJzXCIpIHtcblx0XHRcdFx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvLkxvbmdSdW5uZXJzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFCYXRjaEdyb3Vwcztcblx0fVxuXG5cdC8qXG5cdCAqIFJlc2V0IEJyZWFkY3J1bWIgbGlua3Ncblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c2FwLm0uQnJlYWRjcnVtYnN9IFtvU291cmNlXSBwYXJlbnQgY29udHJvbFxuXHQgKiBAZGVzY3JpcHRpb24gVXNlZCB3aGVuIGNvbnRleHQgb2YgdGhlIG9iamVjdCBwYWdlIGNoYW5nZXMuXG5cdCAqICAgICAgICAgICAgICBUaGlzIGV2ZW50IGNhbGxiYWNrIGlzIGF0dGFjaGVkIHRvIG1vZGVsQ29udGV4dENoYW5nZVxuXHQgKiAgICAgICAgICAgICAgZXZlbnQgb2YgdGhlIEJyZWFkY3J1bWIgY29udHJvbCB0byBjYXRjaCBjb250ZXh0IGNoYW5nZS5cblx0ICogICAgICAgICAgICAgIFRoZW4gZWxlbWVudCBiaW5kaW5nIGFuZCBocmVmcyBhcmUgdXBkYXRlZCBmb3IgZWFjaCBsaW5rLlxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGV4cGVyaW1lbnRhbFxuXHQgKi9cblx0YXN5bmMgX3NldEJyZWFkY3J1bWJMaW5rcyhvU291cmNlOiBhbnkpIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IG9Tb3VyY2UuZ2V0QmluZGluZ0NvbnRleHQoKSxcblx0XHRcdG9BcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLFxuXHRcdFx0YVByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gPSBbXSxcblx0XHRcdGFTa2lwUGFyYW1ldGVyaXplZDogYW55W10gPSBbXSxcblx0XHRcdHNOZXdQYXRoID0gb0NvbnRleHQgJiYgb0NvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0YVBhdGhQYXJ0cyA9IHNOZXdQYXRoICYmIHNOZXdQYXRoLnNwbGl0KFwiL1wiKSxcblx0XHRcdG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50ICYmIG9BcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0bGV0IHNQYXRoID0gXCJcIjtcblx0XHRhUGF0aFBhcnRzLnNoaWZ0KCk7XG5cdFx0YVBhdGhQYXJ0cy5zcGxpY2UoLTEsIDEpO1xuXHRcdGFQYXRoUGFydHMuZm9yRWFjaChmdW5jdGlvbiAoc1BhdGhQYXJ0OiBhbnkpIHtcblx0XHRcdHNQYXRoICs9IGAvJHtzUGF0aFBhcnR9YDtcblx0XHRcdGNvbnN0IG9Sb290Vmlld0NvbnRyb2xsZXIgPSBvQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIFJvb3RDb250YWluZXJCYXNlQ29udHJvbGxlcjtcblx0XHRcdGNvbnN0IHNQYXJhbWV0ZXJQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aCk7XG5cdFx0XHRjb25zdCBiUmVzdWx0Q29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXJhbWV0ZXJQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRgKTtcblx0XHRcdGlmIChiUmVzdWx0Q29udGV4dCkge1xuXHRcdFx0XHQvLyBXZSBkb250IG5lZWQgdG8gY3JlYXRlIGEgYnJlYWRjcnVtYiBmb3IgUGFyYW1ldGVyIHBhdGhcblx0XHRcdFx0YVNraXBQYXJhbWV0ZXJpemVkLnB1c2goMSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFTa2lwUGFyYW1ldGVyaXplZC5wdXNoKDApO1xuXHRcdFx0fVxuXHRcdFx0YVByb21pc2VzLnB1c2gob1Jvb3RWaWV3Q29udHJvbGxlci5nZXRUaXRsZUluZm9Gcm9tUGF0aChzUGF0aCkpO1xuXHRcdH0pO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB0aXRsZUhpZXJhcmNoeUluZm9zOiBhbnlbXSA9IGF3YWl0IFByb21pc2UuYWxsKGFQcm9taXNlcyk7XG5cdFx0XHRsZXQgaWR4LCBoaWVyYXJjaHlQb3NpdGlvbiwgb0xpbms7XG5cdFx0XHRmb3IgKGNvbnN0IHRpdGxlSGllcmFyY2h5SW5mbyBvZiB0aXRsZUhpZXJhcmNoeUluZm9zKSB7XG5cdFx0XHRcdGhpZXJhcmNoeVBvc2l0aW9uID0gdGl0bGVIaWVyYXJjaHlJbmZvcy5pbmRleE9mKHRpdGxlSGllcmFyY2h5SW5mbyk7XG5cdFx0XHRcdGlkeCA9IGhpZXJhcmNoeVBvc2l0aW9uIC0gYVNraXBQYXJhbWV0ZXJpemVkW2hpZXJhcmNoeVBvc2l0aW9uXTtcblx0XHRcdFx0b0xpbmsgPSBvU291cmNlLmdldExpbmtzKClbaWR4XSA/IG9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdIDogbmV3IExpbmsoKTtcblx0XHRcdFx0Ly9zQ3VycmVudEVudGl0eSBpcyBhIGZhbGxiYWNrIHZhbHVlIGluIGNhc2Ugb2YgZW1wdHkgdGl0bGVcblx0XHRcdFx0b0xpbmsuc2V0VGV4dCh0aXRsZUhpZXJhcmNoeUluZm8uc3VidGl0bGUgfHwgdGl0bGVIaWVyYXJjaHlJbmZvLnRpdGxlKTtcblx0XHRcdFx0b0xpbmsuc2V0SHJlZih0aXRsZUhpZXJhcmNoeUluZm8uaW50ZW50KTtcblx0XHRcdFx0aWYgKCFvU291cmNlLmdldExpbmtzKClbaWR4XSkge1xuXHRcdFx0XHRcdG9Tb3VyY2UuYWRkTGluayhvTGluayk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcjogYW55KSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBzZXR0aW5nIHRoZSBicmVhZGNydW1iIGxpbmtzOlwiICsgZXJyb3IpO1xuXHRcdH1cblx0fVxuXG5cdF9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKCkge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBvRGF0YVBvaW50cyA9IENvbW1vblV0aWxzLmdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbihcblx0XHRcdG9WaWV3LmdldFZpZXdEYXRhKCksXG5cdFx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRpbmdTZXJ2aWNlKCkuZ2V0T3V0Ym91bmRzKClcblx0XHQpO1xuXHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VzID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0Y29uc3Qgb1BhZ2VDb250ZXh0ID0gb1ZpZXcgJiYgKG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNIZWFkZXJEUExpbmtWaXNpYmxlXCIsIHt9KTtcblx0XHRpZiAob1BhZ2VDb250ZXh0KSB7XG5cdFx0XHRvUGFnZUNvbnRleHRcblx0XHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob0RhdGE6IGFueSkge1xuXHRcdFx0XHRcdGZuR2V0TGlua3Mob0RhdGFQb2ludHMsIG9EYXRhKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb0Vycm9yXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZm5PbkVycm9yKG9FcnJvcjogYW55KSB7XG5cdFx0XHRMb2cuZXJyb3Iob0Vycm9yKTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBmblNldExpbmtFbmFibGVtZW50KGlkOiBzdHJpbmcsIGFTdXBwb3J0ZWRMaW5rczogYW55KSB7XG5cdFx0XHRjb25zdCBzTGlua0lkID0gaWQ7XG5cdFx0XHQvLyBwcm9jZXNzIHZpYWJsZSBsaW5rcyBmcm9tIGdldExpbmtzIGZvciBhbGwgZGF0YXBvaW50cyBoYXZpbmcgb3V0Ym91bmRcblx0XHRcdGlmIChhU3VwcG9ydGVkTGlua3MgJiYgYVN1cHBvcnRlZExpbmtzLmxlbmd0aCA9PT0gMSAmJiBhU3VwcG9ydGVkTGlua3NbMF0uc3VwcG9ydGVkKSB7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgaXNIZWFkZXJEUExpbmtWaXNpYmxlLyR7c0xpbmtJZH1gLCB0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1N1YkRhdGFQb2ludHNcblx0XHQgKiBAcGFyYW0gb1BhZ2VEYXRhXG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZm5HZXRMaW5rcyhvU3ViRGF0YVBvaW50czogYW55LCBvUGFnZURhdGE6IGFueSkge1xuXHRcdFx0Zm9yIChjb25zdCBzSWQgaW4gb1N1YkRhdGFQb2ludHMpIHtcblx0XHRcdFx0Y29uc3Qgb0RhdGFQb2ludCA9IG9TdWJEYXRhUG9pbnRzW3NJZF07XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXM6IGFueSA9IHt9O1xuXHRcdFx0XHRjb25zdCBvTGluayA9IG9WaWV3LmJ5SWQoc0lkKTtcblx0XHRcdFx0aWYgKCFvTGluaykge1xuXHRcdFx0XHRcdC8vIGZvciBkYXRhIHBvaW50cyBjb25maWd1cmVkIGluIGFwcCBkZXNjcmlwdG9yIGJ1dCBub3QgYW5ub3RhdGVkIGluIHRoZSBoZWFkZXJcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBvTGlua0NvbnRleHQgPSBvTGluay5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBvTGlua0RhdGE6IGFueSA9IG9MaW5rQ29udGV4dCAmJiBvTGlua0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGxldCBvTWl4ZWRDb250ZXh0OiBhbnkgPSBtZXJnZSh7fSwgb1BhZ2VEYXRhLCBvTGlua0RhdGEpO1xuXHRcdFx0XHQvLyBwcm9jZXNzIHNlbWFudGljIG9iamVjdCBtYXBwaW5nc1xuXHRcdFx0XHRpZiAob0RhdGFQb2ludC5zZW1hbnRpY09iamVjdE1hcHBpbmcpIHtcblx0XHRcdFx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gb0RhdGFQb2ludC5zZW1hbnRpY09iamVjdE1hcHBpbmc7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIGluIGFTZW1hbnRpY09iamVjdE1hcHBpbmcpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9NYXBwaW5nID0gYVNlbWFudGljT2JqZWN0TWFwcGluZ1tpdGVtXTtcblx0XHRcdFx0XHRcdGNvbnN0IHNNYWluUHJvcGVydHkgPSBvTWFwcGluZ1tcIkxvY2FsUHJvcGVydHlcIl1bXCIkUHJvcGVydHlQYXRoXCJdO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01hcHBlZFByb3BlcnR5ID0gb01hcHBpbmdbXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdO1xuXHRcdFx0XHRcdFx0aWYgKHNNYWluUHJvcGVydHkgIT09IHNNYXBwZWRQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0XHRpZiAob01peGVkQ29udGV4dC5oYXNPd25Qcm9wZXJ0eShzTWFpblByb3BlcnR5KSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9OZXdNYXBwaW5nOiBhbnkgPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRvTmV3TWFwcGluZ1tzTWFwcGVkUHJvcGVydHldID0gb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0XHRvTWl4ZWRDb250ZXh0ID0gbWVyZ2Uoe30sIG9NaXhlZENvbnRleHQsIG9OZXdNYXBwaW5nKTtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb01peGVkQ29udGV4dFtzTWFpblByb3BlcnR5XTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRcdGlmIChzS2V5LmluZGV4T2YoXCJfXCIpICE9PSAwICYmIHNLZXkuaW5kZXhPZihcIm9kYXRhLmNvbnRleHRcIikgPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdG9QYXJhbXNbc0tleV0gPSBvTWl4ZWRDb250ZXh0W3NLZXldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyB2YWxpZGF0ZSBpZiBhIGxpbmsgbXVzdCBiZSByZW5kZXJlZFxuXHRcdFx0XHRvU2hlbGxTZXJ2aWNlc1xuXHRcdFx0XHRcdC5pc05hdmlnYXRpb25TdXBwb3J0ZWQoW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb0RhdGFQb2ludC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb246IG9EYXRhUG9pbnQuYWN0aW9uXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHBhcmFtczogb1BhcmFtc1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0LnRoZW4oKGFMaW5rcykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuU2V0TGlua0VuYWJsZW1lbnQoc0lkLCBhTGlua3MpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZuT25FcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aGFuZGxlcnMgPSB7XG5cdFx0b25UYWJsZUNvbnRleHRDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBvU291cmNlID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0bGV0IG9UYWJsZTogYW55O1xuXHRcdFx0dGhpcy5fZmluZFRhYmxlcygpLnNvbWUoZnVuY3Rpb24gKF9vVGFibGU6IGFueSkge1xuXHRcdFx0XHRpZiAoX29UYWJsZS5nZXRSb3dCaW5kaW5nKCkgPT09IG9Tb3VyY2UpIHtcblx0XHRcdFx0XHRvVGFibGUgPSBfb1RhYmxlO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCBvQ3VycmVudEFjdGlvblByb21pc2UgPSB0aGlzLl9lZGl0Rmxvdy5nZXRDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0aWYgKG9DdXJyZW50QWN0aW9uUHJvbWlzZSkge1xuXHRcdFx0XHRsZXQgYVRhYmxlQ29udGV4dHM6IGFueTtcblx0XHRcdFx0aWYgKG9UYWJsZS5nZXRUeXBlKCkuZ2V0TWV0YWRhdGEoKS5pc0EoXCJzYXAudWkubWRjLnRhYmxlLkdyaWRUYWJsZVR5cGVcIikpIHtcblx0XHRcdFx0XHRhVGFibGVDb250ZXh0cyA9IG9Tb3VyY2UuZ2V0Q29udGV4dHMoMCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YVRhYmxlQ29udGV4dHMgPSBvU291cmNlLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vaWYgY29udGV4dHMgYXJlIG5vdCBmdWxseSBsb2FkZWQgdGhlIGdldGNvbnRleHRzIGZ1bmN0aW9uIGFib3ZlIHdpbGwgdHJpZ2dlciBhIG5ldyBjaGFuZ2UgZXZlbnQgY2FsbFxuXHRcdFx0XHRpZiAoIWFUYWJsZUNvbnRleHRzWzBdKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9DdXJyZW50QWN0aW9uUHJvbWlzZVxuXHRcdFx0XHRcdC50aGVuKChvQWN0aW9uUmVzcG9uc2U6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCFvQWN0aW9uUmVzcG9uc2UgfHwgb0FjdGlvblJlc3BvbnNlLmNvbnRyb2xJZCAhPT0gb1RhYmxlLnNJZCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCBvQWN0aW9uRGF0YSA9IG9BY3Rpb25SZXNwb25zZS5vRGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IGFLZXlzID0gb0FjdGlvblJlc3BvbnNlLmtleXM7XG5cdFx0XHRcdFx0XHRsZXQgaU5ld0l0ZW1wID0gLTE7XG5cdFx0XHRcdFx0XHRhVGFibGVDb250ZXh0cy5maW5kKGZ1bmN0aW9uIChvVGFibGVDb250ZXh0OiBhbnksIGk6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvVGFibGVEYXRhID0gb1RhYmxlQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYkNvbXBhcmUgPSBhS2V5cy5ldmVyeShmdW5jdGlvbiAoc0tleTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9UYWJsZURhdGFbc0tleV0gPT09IG9BY3Rpb25EYXRhW3NLZXldO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0aWYgKGJDb21wYXJlKSB7XG5cdFx0XHRcdFx0XHRcdFx0aU5ld0l0ZW1wID0gaTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYkNvbXBhcmU7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChpTmV3SXRlbXAgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFEaWFsb2dzID0gSW5zdGFuY2VNYW5hZ2VyLmdldE9wZW5EaWFsb2dzKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9EaWFsb2cgPVxuXHRcdFx0XHRcdFx0XHRcdGFEaWFsb2dzLmxlbmd0aCA+IDAgPyBhRGlhbG9ncy5maW5kKChkaWFsb2cpID0+IGRpYWxvZy5kYXRhKFwiRnVsbFNjcmVlbkRpYWxvZ1wiKSAhPT0gdHJ1ZSkgOiBudWxsO1xuXHRcdFx0XHRcdFx0XHRpZiAob0RpYWxvZykge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGJ5IGRlc2lnbiwgYSBzYXAubS5kaWFsb2cgc2V0IHRoZSBmb2N1cyB0byB0aGUgcHJldmlvdXMgZm9jdXNlZCBlbGVtZW50IHdoZW4gY2xvc2luZy5cblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBzaG91bGQgd2FpdCBmb3IgdGhlIGRpYWxvZyB0byBiZSBjbG9zZSBiZWZvcmUgdG8gZm9jdXMgYW5vdGhlciBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0b0RpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9UYWJsZS5mb2N1c1JvdyhpTmV3SXRlbXAsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG9UYWJsZS5mb2N1c1JvdyhpTmV3SXRlbXAsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2VkaXRGbG93LmRlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoYEFuIGVycm9yIG9jY3VycyB3aGlsZSBzY3JvbGxpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgSXRlbTogJHtlcnJ9YCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBmaXJlIE1vZGVsQ29udGV4dENoYW5nZSBvbiB0aGUgbWVzc2FnZSBidXR0b24gd2hlbmV2ZXIgdGhlIHRhYmxlIGNvbnRleHQgY2hhbmdlc1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2VCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OkZvb3RlckJhcjo6TWVzc2FnZUJ1dHRvblwiKTtcblx0XHRcdG9NZXNzYWdlQnV0dG9uLmZpcmVNb2RlbENvbnRleHRDaGFuZ2UoKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogSW52b2tlcyBhbiBhY3Rpb24gLSBib3VuZC91bmJvdW5kIGFuZCBzZXRzIHRoZSBwYWdlIGRpcnR5LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIG9WaWV3XG5cdFx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gdG8gYmUgY2FsbGVkXG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVyc10gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuY29udGV4dHNdIE1hbmRhdG9yeSBmb3IgYSBib3VuZCBhY3Rpb24sIGVpdGhlciBvbmUgY29udGV4dCBvciBhbiBhcnJheSB3aXRoIGNvbnRleHRzIGZvciB3aGljaCB0aGUgYWN0aW9uIHNoYWxsIGJlIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubW9kZWxdIE1hbmRhdG9yeSBmb3IgYW4gdW5ib3VuZCBhY3Rpb247IGFuIGluc3RhbmNlIG9mIGFuIE9EYXRhIFY0IG1vZGVsXG5cdFx0ICogQHJldHVybnMgVGhlIGFjdGlvbiBwcm9taXNlXG5cdFx0ICogQHVpNS1yZXN0cmljdGVkXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0b25DYWxsQWN0aW9uKG9WaWV3OiBhbnksIHNBY3Rpb25OYW1lOiBzdHJpbmcsIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLmVkaXRGbG93XG5cdFx0XHRcdC5pbnZva2VBY3Rpb24oc0FjdGlvbk5hbWUsIG1QYXJhbWV0ZXJzKVxuXHRcdFx0XHQudGhlbihvQ29udHJvbGxlci5fc2hvd01lc3NhZ2VQb3BvdmVyLmJpbmQob0NvbnRyb2xsZXIsIHVuZGVmaW5lZCkpXG5cdFx0XHRcdC5jYXRjaChvQ29udHJvbGxlci5fc2hvd01lc3NhZ2VQb3BvdmVyLmJpbmQob0NvbnRyb2xsZXIpKTtcblx0XHR9LFxuXHRcdG9uRGF0YVBvaW50VGl0bGVQcmVzc2VkKG9Db250cm9sbGVyOiBhbnksIG9Tb3VyY2U6IGFueSwgb01hbmlmZXN0T3V0Ym91bmQ6IGFueSwgc0NvbnRyb2xDb25maWc6IGFueSwgc0NvbGxlY3Rpb25QYXRoOiBhbnkpIHtcblx0XHRcdG9NYW5pZmVzdE91dGJvdW5kID0gdHlwZW9mIG9NYW5pZmVzdE91dGJvdW5kID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShvTWFuaWZlc3RPdXRib3VuZCkgOiBvTWFuaWZlc3RPdXRib3VuZDtcblx0XHRcdGNvbnN0IG9UYXJnZXRJbmZvID0gb01hbmlmZXN0T3V0Ym91bmRbc0NvbnRyb2xDb25maWddLFxuXHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKG9UYXJnZXRJbmZvKSxcblx0XHRcdFx0b0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCA9IG9Tb3VyY2UuZ2V0QmluZGluZ0NvbnRleHQoKSxcblx0XHRcdFx0c01ldGFQYXRoID0gb0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dFxuXHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0LmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdFx0LmdldE1ldGFQYXRoKG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdGxldCBhTmF2aWdhdGlvbkRhdGEgPSBvQ29udHJvbGxlci5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LCBzQ29sbGVjdGlvblBhdGgpO1xuXHRcdFx0bGV0IGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycztcblxuXHRcdFx0YU5hdmlnYXRpb25EYXRhID0gYU5hdmlnYXRpb25EYXRhLm1hcChmdW5jdGlvbiAob05hdmlnYXRpb25EYXRhOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRkYXRhOiBvTmF2aWdhdGlvbkRhdGEsXG5cdFx0XHRcdFx0bWV0YVBhdGg6IHNNZXRhUGF0aCArIChzQ29sbGVjdGlvblBhdGggPyBgLyR7c0NvbGxlY3Rpb25QYXRofWAgOiBcIlwiKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAob1RhcmdldEluZm8gJiYgb1RhcmdldEluZm8ucGFyYW1ldGVycykge1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zID0gb1RhcmdldEluZm8ucGFyYW1ldGVycyAmJiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLmdldE91dGJvdW5kUGFyYW1zKG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMpO1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMob1BhcmFtcykubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IG9QYXJhbXM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdCAmJiBvVGFyZ2V0SW5mby5hY3Rpb24pIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdCwgb1RhcmdldEluZm8uYWN0aW9uLCB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiBhTmF2aWdhdGlvbkRhdGEsXG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRcdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVyczogYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogVHJpZ2dlcnMgYW4gb3V0Ym91bmQgbmF2aWdhdGlvbiB3aGVuIGEgdXNlciBjaG9vc2VzIHRoZSBjaGV2cm9uLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIG9Db250cm9sbGVyXG5cdFx0ICogQHBhcmFtIHNPdXRib3VuZFRhcmdldCBOYW1lIG9mIHRoZSBvdXRib3VuZCB0YXJnZXQgKG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KVxuXHRcdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHRcdCAqIEBwYXJhbSBzQ3JlYXRlUGF0aCBDcmVhdGUgcGF0aCB3aGVuIHRoZSBjaGV2cm9uIGlzIGNyZWF0ZWQuXG5cdFx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZCAoPz8/IG1heWJlIG9ubHkgb25jZSBmaW5pc2hlZD8pXG5cdFx0ICogQHVpNS1yZXN0cmljdGVkXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0b25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0OiBzdHJpbmcsIG9Db250ZXh0OiBhbnksIHNDcmVhdGVQYXRoOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cblx0XHRvbk5hdmlnYXRlQ2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0Ly93aWxsIGJlIGNhbGxlZCBhbHdheXMgd2hlbiB3ZSBjbGljayBvbiBhIHNlY3Rpb24gdGFiXG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR0aGlzLmJTZWN0aW9uTmF2aWdhdGVkID0gdHJ1ZTtcblxuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGlmIChcblx0XHRcdFx0b09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpICYmXG5cdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCIgJiZcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIikgPT09IGZhbHNlXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKFtvU3ViU2VjdGlvbl0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcikge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0b25WYXJpYW50U2F2ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcikge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDUwMCk7XG5cdFx0fSxcblx0XHRuYXZpZ2F0ZVRvU3ViU2VjdGlvbjogZnVuY3Rpb24gKG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlciwgdkRldGFpbENvbmZpZzogYW55KSB7XG5cdFx0XHRjb25zdCBvRGV0YWlsQ29uZmlnID0gdHlwZW9mIHZEZXRhaWxDb25maWcgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZEZXRhaWxDb25maWcpIDogdkRldGFpbENvbmZpZztcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHRcdFx0bGV0IG9TZWN0aW9uO1xuXHRcdFx0bGV0IG9TdWJTZWN0aW9uO1xuXHRcdFx0aWYgKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSB7XG5cdFx0XHRcdG9TZWN0aW9uID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zZWN0aW9uSWQpIGFzIE9iamVjdFBhZ2VTZWN0aW9uO1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IChcblx0XHRcdFx0XHRvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZFxuXHRcdFx0XHRcdFx0PyBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZClcblx0XHRcdFx0XHRcdDogb1NlY3Rpb24gJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSAmJiBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpWzBdXG5cdFx0XHRcdCkgYXMgT2JqZWN0UGFnZVN1YlNlY3Rpb247XG5cdFx0XHR9IGVsc2UgaWYgKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSB7XG5cdFx0XHRcdG9TdWJTZWN0aW9uID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9TdWJTZWN0aW9uICYmIChvU3ViU2VjdGlvbi5nZXRQYXJlbnQoKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW9TZWN0aW9uIHx8ICFvU3ViU2VjdGlvbiB8fCAhb1NlY3Rpb24uZ2V0VmlzaWJsZSgpIHx8ICFvU3ViU2VjdGlvbi5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0KChvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKSBhcyBSZXNvdXJjZU1vZGVsKS5nZXRSZXNvdXJjZUJ1bmRsZSgpIGFzIFByb21pc2U8UmVzb3VyY2VCdW5kbGU+KVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvUmVzb3VyY2VCdW5kbGUpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNUaXRsZSA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcIkNfUk9VVElOR19OQVZJR0FUSU9OX0RJU0FCTEVEX1RJVExFXCIsXG5cdFx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdFx0KG9Db250cm9sbGVyLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuZW50aXR5U2V0XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKHNUaXRsZSk7XG5cdFx0XHRcdFx0XHRNZXNzYWdlQm94LmVycm9yKHNUaXRsZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2Nyb2xsVG9TZWN0aW9uKG9TdWJTZWN0aW9uLmdldElkKCkpO1xuXHRcdFx0XHQvLyB0cmlnZ2VyIGlhcHAgc3RhdGUgY2hhbmdlXG5cdFx0XHRcdG9PYmplY3RQYWdlLmZpcmVOYXZpZ2F0ZSh7XG5cdFx0XHRcdFx0c2VjdGlvbjogb1NlY3Rpb24sXG5cdFx0XHRcdFx0c3ViU2VjdGlvbjogb1N1YlNlY3Rpb25cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvbkNoYXJ0U2VsZWN0aW9uQ2hhbmdlZDogZnVuY3Rpb24gKG9FdmVudDogYW55KSB7XG5cdFx0XHRDaGFydFJ1bnRpbWUuZm5VcGRhdGVDaGFydChvRXZlbnQpO1xuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG4iXX0=
|
|
1563
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOlsiYm9keSIsInJlY292ZXIiLCJyZXN1bHQiLCJlIiwidGhlbiIsImZpbmFsaXplciIsImJpbmQiLCJPYmplY3RQYWdlQ29udHJvbGxlciIsImRlZmluZVVJNUNsYXNzIiwidXNpbmdFeHRlbnNpb24iLCJQbGFjZWhvbGRlciIsIkVkaXRGbG93IiwiU2hhcmUiLCJvdmVycmlkZSIsIlNoYXJlT3ZlcnJpZGVzIiwiSW50ZXJuYWxFZGl0RmxvdyIsIkVkaXRGbG93T3ZlcnJpZGVzIiwiSW50ZXJuYWxSb3V0aW5nIiwiSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUiLCJQYWdpbmF0b3IiLCJQYWdpbmF0b3JPdmVycmlkZSIsIk1lc3NhZ2VIYW5kbGVyIiwiTWVzc2FnZUhhbmRsZXJPdmVycmlkZSIsIkludGVudEJhc2VkTmF2aWdhdGlvbiIsIkludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIiwiSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXROYXZpZ2F0aW9uTW9kZSIsImJJc1N0aWNreUVkaXRNb2RlIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJnZXRTdGlja3lFZGl0TW9kZSIsInVuZGVmaW5lZCIsIlZpZXdTdGF0ZSIsIlZpZXdTdGF0ZU92ZXJyaWRlcyIsIlBhZ2VSZWFkeSIsImlzQ29udGV4dEV4cGVjdGVkIiwiTWFzc0VkaXQiLCJwdWJsaWNFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkFmdGVyIiwiaGFuZGxlcnMiLCJvblRhYmxlQ29udGV4dENoYW5nZSIsIm9FdmVudCIsIm9Tb3VyY2UiLCJnZXRTb3VyY2UiLCJvVGFibGUiLCJfZmluZFRhYmxlcyIsInNvbWUiLCJfb1RhYmxlIiwiZ2V0Um93QmluZGluZyIsIm9DdXJyZW50QWN0aW9uUHJvbWlzZSIsIl9lZGl0RmxvdyIsImdldEN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiYVRhYmxlQ29udGV4dHMiLCJnZXRUeXBlIiwiZ2V0TWV0YWRhdGEiLCJpc0EiLCJnZXRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsIm9BY3Rpb25SZXNwb25zZSIsImNvbnRyb2xJZCIsInNJZCIsIm9BY3Rpb25EYXRhIiwib0RhdGEiLCJhS2V5cyIsImtleXMiLCJpTmV3SXRlbXAiLCJmaW5kIiwib1RhYmxlQ29udGV4dCIsImkiLCJvVGFibGVEYXRhIiwiZ2V0T2JqZWN0IiwiYkNvbXBhcmUiLCJldmVyeSIsInNLZXkiLCJhRGlhbG9ncyIsIkluc3RhbmNlTWFuYWdlciIsImdldE9wZW5EaWFsb2dzIiwib0RpYWxvZyIsImxlbmd0aCIsImRpYWxvZyIsImRhdGEiLCJhdHRhY2hFdmVudE9uY2UiLCJmb2N1c1JvdyIsImRlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiY2F0Y2giLCJlcnIiLCJMb2ciLCJlcnJvciIsIm9NZXNzYWdlQnV0dG9uIiwiYnlJZCIsImZpcmVNb2RlbENvbnRleHRDaGFuZ2UiLCJvbkNhbGxBY3Rpb24iLCJvVmlldyIsInNBY3Rpb25OYW1lIiwibVBhcmFtZXRlcnMiLCJvQ29udHJvbGxlciIsImVkaXRGbG93IiwiaW52b2tlQWN0aW9uIiwiX3Nob3dNZXNzYWdlUG9wb3ZlciIsIm9uRGF0YVBvaW50VGl0bGVQcmVzc2VkIiwib01hbmlmZXN0T3V0Ym91bmQiLCJzQ29udHJvbENvbmZpZyIsInNDb2xsZWN0aW9uUGF0aCIsIkpTT04iLCJwYXJzZSIsIm9UYXJnZXRJbmZvIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsIkNvbW1vblV0aWxzIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwib0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic01ldGFQYXRoIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJhTmF2aWdhdGlvbkRhdGEiLCJfZ2V0Q2hhcnRDb250ZXh0RGF0YSIsImFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm1hcCIsIm9OYXZpZ2F0aW9uRGF0YSIsIm1ldGFQYXRoIiwicGFyYW1ldGVycyIsIm9QYXJhbXMiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0T3V0Ym91bmRQYXJhbXMiLCJPYmplY3QiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsIm5hdmlnYXRlIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwic091dGJvdW5kVGFyZ2V0Iiwib0NvbnRleHQiLCJzQ3JlYXRlUGF0aCIsIm9uTmF2aWdhdGVDaGFuZ2UiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsImJTZWN0aW9uTmF2aWdhdGVkIiwib0ludGVybmFsTW9kZWxDb250ZXh0Iiwib09iamVjdFBhZ2UiLCJfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2wiLCJnZXRQcm9wZXJ0eSIsImdldFZpZXdEYXRhIiwic2VjdGlvbkxheW91dCIsIm9TdWJTZWN0aW9uIiwiZ2V0UGFyYW1ldGVyIiwiX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZSIsIm9uVmFyaWFudFNlbGVjdGVkIiwib25WYXJpYW50U2F2ZWQiLCJzZXRUaW1lb3V0IiwibmF2aWdhdGVUb1N1YlNlY3Rpb24iLCJ2RGV0YWlsQ29uZmlnIiwib0RldGFpbENvbmZpZyIsIm9TZWN0aW9uIiwic2VjdGlvbklkIiwic3ViU2VjdGlvbklkIiwiZ2V0U3ViU2VjdGlvbnMiLCJnZXRQYXJlbnQiLCJnZXRWaXNpYmxlIiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJvUmVzb3VyY2VCdW5kbGUiLCJzVGl0bGUiLCJnZXRUcmFuc2xhdGVkVGV4dCIsImVudGl0eVNldCIsIk1lc3NhZ2VCb3giLCJzY3JvbGxUb1NlY3Rpb24iLCJnZXRJZCIsImZpcmVOYXZpZ2F0ZSIsInNlY3Rpb24iLCJzdWJTZWN0aW9uIiwib25DaGFydFNlbGVjdGlvbkNoYW5nZWQiLCJDaGFydFJ1bnRpbWUiLCJmblVwZGF0ZUNoYXJ0IiwibUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzIiwiRXh0ZW5zaW9uQVBJIiwiZXh0ZW5zaW9uQVBJIiwib25Jbml0Iiwic2V0UHJvcGVydHkiLCJ2aXNpYmlsaXR5IiwiaXRlbXMiLCJfZ2V0QmF0Y2hHcm91cHNGb3JWaWV3IiwidXNlTmV3TGF6eUxvYWRpbmciLCJnZXRFbmFibGVMYXp5TG9hZGluZyIsImF0dGFjaEV2ZW50IiwiX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQiLCJvbkV4aXQiLCJkZXN0cm95Iiwib01lc3NhZ2VQb3BvdmVyIiwiaXNPcGVuIiwiY2xvc2UiLCJpc0tlZXBBbGl2ZSIsInNldEtlZXBBbGl2ZSIsIl9nZXRUYWJsZUJpbmRpbmciLCJvbkJlZm9yZVJlbmRlcmluZyIsIlBhZ2VDb250cm9sbGVyIiwicHJvdG90eXBlIiwiYXBwbHkiLCJvVmlld0RhdGEiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiQ29tbW9uSGVscGVyIiwic2V0TWV0YU1vZGVsIiwiZ2V0QXBwQ29tcG9uZW50Iiwib25BZnRlclJlbmRlcmluZyIsInJlc3BvbnNlIiwib0Vycm9yIiwiX29uQmVmb3JlQmluZGluZyIsImFUYWJsZXMiLCJvSW50ZXJuYWxNb2RlbCIsImFCYXRjaEdyb3VwcyIsImlWaWV3TGV2ZWwiLCJ2aWV3TGV2ZWwiLCJvRmFzdENyZWF0aW9uUm93IiwicHVzaCIsImJEcmFmdE5hdmlnYXRpb24iLCJfY2xvc2VTaWRlQ29udGVudCIsIm9wQ29udGV4dCIsImhhc1BlbmRpbmdDaGFuZ2VzIiwiZ2V0QmluZGluZyIsInJlc2V0Q2hhbmdlcyIsImdldENyZWF0aW9uUm93Iiwic2V0QmluZGluZ0NvbnRleHQiLCJmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24iLCJpc0ZpcnN0UmVuZGVyaW5nIiwiYlBlcnNpc3RPUFNjcm9sbCIsInNldFNlbGVjdGVkU2VjdGlvbiIsIm9EZWxlZ2F0ZU9uQmVmb3JlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsInBhZ2VSZWFkeSIsInJlbW92ZUV2ZW50RGVsZWdhdGUiLCJvQmluZGluZyIsImxpc3RCaW5kaW5nIiwib1BhZ2luYXRvckN1cnJlbnRDb250ZXh0Iiwib0JpbmRpbmdUb1VzZSIsInBhZ2luYXRvciIsImluaXRpYWxpemUiLCJzQ29udGV4dFBhdGgiLCJyZXBsYWNlIiwiT0RhdGFMaXN0QmluZGluZyIsIm9Nb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiX3NldExpc3RCaW5kaW5nQXN5bmMiLCJkZXRhY2hFdmVudCIsImFTZWN0aW9ucyIsImdldFNlY3Rpb25zIiwiYlVzZUljb25UYWJCYXIiLCJnZXRVc2VJY29uVGFiQmFyIiwiaVNraXAiLCJiSXNJbkVkaXRNb2RlIiwiYkVkaXRhYmxlSGVhZGVyIiwiZWRpdGFibGVIZWFkZXJDb250ZW50IiwiaVNlY3Rpb24iLCJhU3ViU2VjdGlvbnMiLCJpU3ViU2VjdGlvbiIsImlzVmlzaWJpbGl0eUR5bmFtaWMiLCJwbGFjZWhvbGRlciIsImlzUGxhY2Vob2xkZXJFbmFibGVkIiwic2hvd1BsYWNlaG9sZGVyIiwib05hdkNvbnRhaW5lciIsIm9Db250YWluZXIiLCJfZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50Iiwib0ZpcnN0Q2xpY2thYmxlRWxlbWVudCIsImFBY3Rpb25zIiwiZ2V0SGVhZGVyVGl0bGUiLCJnZXRBY3Rpb25zIiwib0FjdGlvbiIsImdldEVuYWJsZWQiLCJfZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24iLCJhQmxvY2tzIiwiZ2V0QmxvY2tzIiwiYmxvY2siLCJhRm9ybUNvbnRhaW5lcnMiLCJnZXRGb3JtQ29udGFpbmVycyIsImdldENvbnRlbnQiLCJmb3JtQ29udGFpbmVyIiwiYUZvcm1FbGVtZW50cyIsImdldEZvcm1FbGVtZW50cyIsImZvcm1FbGVtZW50IiwiYUZpZWxkcyIsImdldEZpZWxkcyIsImdldFJlcXVpcmVkIiwiZ2V0VmFsdWUiLCJkZWJ1ZyIsIm9NYW5kYXRvcnlGaWVsZCIsIm9GaWVsZFRvRm9jdXMiLCJjb250ZW50IiwiZ2V0Q29udGVudEVkaXQiLCJfZ2V0Rmlyc3RFZGl0YWJsZUlucHV0IiwiZm9jdXMiLCJfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQiLCJnZXRSb3V0ZXJQcm94eSIsImNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQiLCJoaXN0b3J5IiwiYmFjayIsImRyYWZ0IiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJGdW5jdGlvbiIsIk5hdmlnYXRpb25UeXBlIiwiQmFja05hdmlnYXRpb24iLCJfb25BZnRlckJpbmRpbmciLCJvQmluZGluZ0NvbnRleHQiLCJlbmFibGVGYXN0Q3JlYXRpb25Sb3ciLCJvTGlzdEJpbmRpbmciLCJvRmFzdENyZWF0aW9uTGlzdEJpbmRpbmciLCJvRmFzdENyZWF0aW9uQ29udGV4dCIsIm9GaW5hbFVJU3RhdGUiLCJiaW5kTGlzdCIsImdldENvbnRleHQiLCIkJHVwZGF0ZUdyb3VwSWQiLCIkJGdyb3VwSWQiLCJyZWZyZXNoSW50ZXJuYWwiLCJjcmVhdGUiLCJjcmVhdGVkIiwidHJhY2UiLCJfc2lkZUVmZmVjdHMiLCJjbGVhclByb3BlcnRpZXNTdGF0dXMiLCJhSUJOQWN0aW9ucyIsImZvckVhY2giLCJnZXRJQk5BY3Rpb25zIiwib1RhYmxlUm93QmluZGluZyIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwicmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwicGFyc2VDdXN0b21EYXRhIiwiRGVsZWdhdGVVdGlsIiwiZ2V0Q3VzdG9tRGF0YSIsImFTZWxlY3RlZENvbnRleHRzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJnZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsIiwib09iamVjdFBhZ2VUaXRsZSIsImFJQk5IZWFkZXJBY3Rpb25zIiwiY29uY2F0IiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMiLCJmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMiLCJmbkhhbmRsZUNoYW5nZSIsImRldGFjaENoYW5nZSIsImF0dGFjaENoYW5nZSIsImNvbXB1dGVFZGl0TW9kZSIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkIiwiY29ubmVjdCIsIm9DYWNoZSIsIl91cGRhdGVSZWxhdGVkQXBwcyIsImZuVXBkYXRlUmVsYXRlZEFwcHMiLCJkZXRhY2hEYXRhUmVjZWl2ZWQiLCJhdHRhY2hEYXRhUmVjZWl2ZWQiLCJjdXJyZW50QmluZGluZyIsImhhbmRsZVBhdGNoU2VudCIsIlRhYmxlVXRpbHMiLCJ3aGVuQm91bmQiLCJfdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cyIsIm9uUGFnZVJlYWR5Iiwic2V0Rm9jdXMiLCJpc0luRGlzcGxheU1vZGUiLCJvU2VsZWN0ZWRTZWN0aW9uIiwiQ29yZSIsImdldFNlbGVjdGVkU2VjdGlvbiIsImJJc1N0aWNreU1vZGUiLCJvQXBwQ29tcG9uZW50IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEJhY2tOYXZpZ2F0aW9uIiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwiYXBwbHlBcHBTdGF0ZSIsImZvcmNlRm9jdXMiLCJFcnJvciIsIl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwiX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uIiwib09iamVjdFBhZ2VTdWJ0aXRsZSIsIm9DdXN0b21EYXRhIiwiZ2V0S2V5IiwidGl0bGUiLCJzdWJ0aXRsZSIsImludGVudCIsImljb24iLCJfZXhlY3V0ZUhlYWRlclNob3J0Y3V0Iiwic0J1dHRvbklkIiwib0J1dHRvbiIsIm9FbGVtZW50IiwiZmlyZUJ1dHRvblByZXNzIiwiX2V4ZWN1dGVGb290ZXJTaG9ydGN1dCIsImdldEZvb3RlciIsImdldE5hbWUiLCJfZXhlY3V0ZVRhYlNob3J0Q3V0Iiwib0V4ZWN1dGlvbiIsImlTZWN0aW9uSW5kZXhNYXgiLCJzQ29tbWFuZCIsImdldENvbW1hbmQiLCJuZXdTZWN0aW9uIiwiaVNlbGVjdGVkU2VjdGlvbkluZGV4IiwiaW5kZXhPZlNlY3Rpb24iLCJfZ2V0Rm9vdGVyVmlzaWJpbGl0eSIsInNWaWV3SWQiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJnZXRNZXNzYWdlTWFuYWdlciIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJvTWVzc2FnZSIsInZhbGlkYXRpb24iLCJ0eXBlIiwidGFyZ2V0IiwiaW5kZXhPZiIsIm9SZXQiLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvSXRlbUJpbmRpbmciLCJnZXRMZW5ndGgiLCJzZXRWaXNpYmxlIiwib3BlbkJ5IiwiX2VkaXREb2N1bWVudCIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiZWRpdERvY3VtZW50IiwiZmluYWxseSIsInVubG9jayIsIl9zYXZlRG9jdW1lbnQiLCJhV2FpdENyZWF0ZURvY3VtZW50cyIsImJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRpb25Sb3ciLCJjcmVhdGVBdEVuZCIsImJDcmVhdGVEb2N1bWVudCIsImJTa2lwU2lkZUVmZmVjdHMiLCJjcmVhdGVEb2N1bWVudCIsIlByb21pc2UiLCJhbGwiLCJhQmluZGluZ3MiLCJiaW5kaW5ncyIsInNhdmVEb2N1bWVudCIsImlzTG9ja2VkIiwiX21hbmFnZUNvbGxhYm9yYXRpb24iLCJvcGVuTWFuYWdlRGlhbG9nIiwiX3Nob3dDb2xsYWJvcmF0aW9uVXNlckRldGFpbHMiLCJldmVudCIsInNob3dVc2VyRGV0YWlscyIsIl9jYW5jZWxEb2N1bWVudCIsImNhbmNlbEJ1dHRvbiIsImNhbmNlbERvY3VtZW50IiwiX2FwcGx5RG9jdW1lbnQiLCJhcHBseURvY3VtZW50IiwicmVzb2x2ZVN0cmluZ3RvQm9vbGVhbiIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsIl9maW5kVGFibGVJblN1YlNlY3Rpb24iLCJhUGFyZW50RWxlbWVudCIsImFTdWJzZWN0aW9uIiwiYVN1YlNlY3Rpb25UYWJsZXMiLCJlbGVtZW50IiwiZ2V0TWFpbkNvbnRlbnQiLCJncmlkVGFibGUiLCJoYXNTdHlsZUNsYXNzIiwiYWRkU3R5bGVDbGFzcyIsInRhYmxlIiwic2V0Um93Q291bnQiLCJfZ2V0QWxsU3ViU2VjdGlvbnMiLCJfZ2V0QWxsQmxvY2tzIiwiZ2V0TW9yZUJsb2NrcyIsIm9CbG9jayIsIm9Db250ZW50Iiwic2V0U2hvd1NpZGVDb250ZW50Iiwib0NoYXJ0Q29udGV4dCIsInNDaGFydFBhdGgiLCJvQ29udGV4dERhdGEiLCJvQ2hhcnRDb250ZXh0RGF0YSIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsInNSb3dQYXRoIiwiVGFibGVTY3JvbGxlciIsInNjcm9sbFRhYmxlVG9Sb3ciLCJfbWVyZ2VNdWx0aXBsZUNvbnRleHRzIiwib1BhZ2VDb250ZXh0IiwiYUxpbmVDb250ZXh0IiwiYUF0dHJpYnV0ZXMiLCJhUGFnZUF0dHJpYnV0ZXMiLCJzTWV0YVBhdGhMaW5lIiwic1BhdGhMaW5lIiwic1BhZ2VQYXRoIiwib01ldGFNb2RlbCIsInNNZXRhUGF0aFBhZ2UiLCJvU2luZ2xlQ29udGV4dCIsIm9TdWJDaGFydENvbnRleHREYXRhIiwiY29udGV4dERhdGEiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwib1BhZ2VMZXZlbFNWIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudCIsImF0dHJpYnV0ZXMiLCJvQ29uZmlndXJhdGlvbnMiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImFDb25maWd1cmF0aW9ucyIsIm9Db25maWd1cmF0aW9uIiwicmVxdWVzdEdyb3VwSWQiLCJfc2V0QnJlYWRjcnVtYkxpbmtzIiwiYVByb21pc2VzIiwiYVNraXBQYXJhbWV0ZXJpemVkIiwic05ld1BhdGgiLCJhUGF0aFBhcnRzIiwic3BsaXQiLCJzUGF0aCIsInNoaWZ0Iiwic3BsaWNlIiwic1BhdGhQYXJ0Iiwib1Jvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsInNQYXJhbWV0ZXJQYXRoIiwiYlJlc3VsdENvbnRleHQiLCJnZXRUaXRsZUluZm9Gcm9tUGF0aCIsInRpdGxlSGllcmFyY2h5SW5mb3MiLCJpZHgiLCJoaWVyYXJjaHlQb3NpdGlvbiIsIm9MaW5rIiwidGl0bGVIaWVyYXJjaHlJbmZvIiwiZ2V0TGlua3MiLCJMaW5rIiwic2V0VGV4dCIsInNldEhyZWYiLCJhZGRMaW5rIiwib0RhdGFQb2ludHMiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJnZXRSb3V0aW5nU2VydmljZSIsImdldE91dGJvdW5kcyIsIm9TaGVsbFNlcnZpY2VzIiwicmVxdWVzdE9iamVjdCIsImZuR2V0TGlua3MiLCJmbk9uRXJyb3IiLCJmblNldExpbmtFbmFibGVtZW50IiwiaWQiLCJhU3VwcG9ydGVkTGlua3MiLCJzTGlua0lkIiwic3VwcG9ydGVkIiwib1N1YkRhdGFQb2ludHMiLCJvUGFnZURhdGEiLCJvRGF0YVBvaW50Iiwib0xpbmtDb250ZXh0Iiwib0xpbmtEYXRhIiwib01peGVkQ29udGV4dCIsIm1lcmdlIiwiaXRlbSIsIm9NYXBwaW5nIiwic01haW5Qcm9wZXJ0eSIsInNNYXBwZWRQcm9wZXJ0eSIsImhhc093blByb3BlcnR5Iiwib05ld01hcHBpbmciLCJpc05hdmlnYXRpb25TdXBwb3J0ZWQiLCJwYXJhbXMiLCJhTGlua3MiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdqQk8sa0JBQWdCQSxJQUFoQixFQUFzQkMsT0FBdEIsRUFBK0I7QUFDckMsUUFBSTtBQUNILFVBQUlDLE1BQU0sR0FBR0YsSUFBSSxFQUFqQjtBQUNBLEtBRkQsQ0FFRSxPQUFNRyxD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dCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9BY3Rpdml0eVN5bmNcIjtcbmltcG9ydCB7IG9wZW5NYW5hZ2VEaWFsb2csIHNob3dVc2VyRGV0YWlscyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL01hbmFnZVwiO1xuaW1wb3J0IEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9FZGl0Rmxvd1wiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxFZGl0RmxvdyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxFZGl0Rmxvd1wiO1xuaW1wb3J0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgTWFzc0VkaXQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01hc3NFZGl0XCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnZVJlYWR5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdlUmVhZHlcIjtcbmltcG9ydCBQYWdpbmF0b3IgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2luYXRvclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiwgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ2hhcnRSdW50aW1lIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0UnVudGltZVwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBEZWxlZ2F0ZVV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgVGFibGVVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB0eXBlIFJvb3RDb250YWluZXJCYXNlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9Sb290Q29udGFpbmVyL2NvbnRyb2xsZXIvUm9vdENvbnRhaW5lckJhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgRWRpdEZsb3dPdmVycmlkZXMgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvUm9vdENvbnRhaW5lci9vdmVycmlkZXMvRWRpdEZsb3dcIjtcbmltcG9ydCBUYWJsZVNjcm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1RhYmxlU2Nyb2xsZXJcIjtcbmltcG9ydCBJbnN0YW5jZU1hbmFnZXIgZnJvbSBcInNhcC9tL0luc3RhbmNlTWFuYWdlclwiO1xuaW1wb3J0IExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvcmVzb3VyY2UvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQnJlYWRDcnVtYnMgZnJvbSBcInNhcC91eGFwL0JyZWFkQ3J1bWJzXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU3ViU2VjdGlvblwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXJPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQYWdpbmF0b3JPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvUGFnaW5hdG9yXCI7XG5pbXBvcnQgU2hhcmVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9WaWV3U3RhdGVcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VDb250cm9sbGVyXCIpXG5jbGFzcyBPYmplY3RQYWdlQ29udHJvbGxlciBleHRlbmRzIFBhZ2VDb250cm9sbGVyIHtcblx0b1ZpZXchOiBhbnk7XG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0cGxhY2Vob2xkZXIhOiBQbGFjZWhvbGRlcjtcblx0QHVzaW5nRXh0ZW5zaW9uKEVkaXRGbG93KVxuXHRlZGl0RmxvdyE6IEVkaXRGbG93O1xuXHRAdXNpbmdFeHRlbnNpb24oU2hhcmUub3ZlcnJpZGUoU2hhcmVPdmVycmlkZXMpKVxuXHRzaGFyZSE6IFNoYXJlO1xuXHRAdXNpbmdFeHRlbnNpb24oSW50ZXJuYWxFZGl0Rmxvdy5vdmVycmlkZShFZGl0Rmxvd092ZXJyaWRlcykpXG5cdF9lZGl0RmxvdyE6IEludGVybmFsRWRpdEZsb3c7XG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlcm5hbFJvdXRpbmcub3ZlcnJpZGUoSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUpKVxuXHRfcm91dGluZyE6IEludGVybmFsUm91dGluZztcblx0QHVzaW5nRXh0ZW5zaW9uKFBhZ2luYXRvci5vdmVycmlkZShQYWdpbmF0b3JPdmVycmlkZSkpXG5cdHBhZ2luYXRvciE6IFBhZ2luYXRvcjtcblx0QHVzaW5nRXh0ZW5zaW9uKE1lc3NhZ2VIYW5kbGVyLm92ZXJyaWRlKE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUpKVxuXHRtZXNzYWdlSGFuZGxlciE6IE1lc3NhZ2VIYW5kbGVyO1xuXHRAdXNpbmdFeHRlbnNpb24oSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlKSlcblx0aW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0SW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoe1xuXHRcdFx0Z2V0TmF2aWdhdGlvbk1vZGU6IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHRjb25zdCBiSXNTdGlja3lFZGl0TW9kZSA9XG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUgJiZcblx0XHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5nZXRTdGlja3lFZGl0TW9kZSgpO1xuXHRcdFx0XHRyZXR1cm4gYklzU3RpY2t5RWRpdE1vZGUgPyBcImV4cGxhY2VcIiA6IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9pbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0QHVzaW5nRXh0ZW5zaW9uKFZpZXdTdGF0ZS5vdmVycmlkZShWaWV3U3RhdGVPdmVycmlkZXMpKVxuXHR2aWV3U3RhdGUhOiBWaWV3U3RhdGU7XG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRQYWdlUmVhZHkub3ZlcnJpZGUoe1xuXHRcdFx0aXNDb250ZXh0RXhwZWN0ZWQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRwYWdlUmVhZHkhOiBQYWdlUmVhZHk7XG5cdEB1c2luZ0V4dGVuc2lvbihNYXNzRWRpdClcblx0bWFzc0VkaXQhOiBNYXNzRWRpdDtcblx0cHJpdmF0ZSBtQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXM/OiBSZWNvcmQ8c3RyaW5nLCBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJPjtcblx0cHJpdmF0ZSBleHRlbnNpb25BUEk/OiBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJO1xuXHRwcml2YXRlIG9SZXNvdXJjZUJ1bmRsZT86IFJlc291cmNlQnVuZGxlO1xuXHRwcml2YXRlIGJTZWN0aW9uTmF2aWdhdGVkPzogYm9vbGVhbjtcblx0cHJpdmF0ZSBzd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcE92ZXI/OiBQb3BvdmVyO1xuXHRwcml2YXRlIGN1cnJlbnRCaW5kaW5nPzogQmluZGluZztcblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKHNJZD86IHN0cmluZyk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKHNJZCkge1xuXHRcdFx0Ly8gdG8gYWxsb3cgbG9jYWwgSUQgdXNhZ2UgZm9yIGN1c3RvbSBwYWdlcyB3ZSdsbCBjcmVhdGUvcmV0dXJuIG93biBpbnN0YW5jZXMgZm9yIGN1c3RvbSBzZWN0aW9uc1xuXHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgPSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyB8fCB7fTtcblxuXHRcdFx0aWYgKCF0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0gPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMsIHNJZCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0XHR0aGlzLmV4dGVuc2lvbkFQSSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdFx0fVxuXHR9XG5cblx0b25Jbml0KCkge1xuXHRcdHN1cGVyLm9uSW5pdCgpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblxuXHRcdC8vIFNldHRpbmcgZGVmYXVsdHMgb2YgaW50ZXJuYWwgbW9kZWwgY29udGV4dFxuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dFwiLCB7IFwicGFnZVwiOiB0cnVlIH0pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzXCIsIHtcblx0XHRcdHZpc2liaWxpdHk6IGZhbHNlLFxuXHRcdFx0aXRlbXM6IG51bGxcblx0XHR9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiLCB0aGlzLl9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIiwgZmFsc2UpO1xuXHRcdGlmICghKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS51c2VOZXdMYXp5TG9hZGluZyAmJiAob09iamVjdFBhZ2UgYXMgYW55KS5nZXRFbmFibGVMYXp5TG9hZGluZygpKSB7XG5cdFx0XHQvL0F0dGFjaGluZyB0aGUgZXZlbnQgdG8gbWFrZSB0aGUgc3Vic2VjdGlvbiBjb250ZXh0IGJpbmRpbmcgYWN0aXZlIHdoZW4gaXQgaXMgdmlzaWJsZS5cblx0XHRcdG9PYmplY3RQYWdlLmF0dGFjaEV2ZW50KFwic3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydFwiLCB0aGlzLl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0LmJpbmQodGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdG9uRXhpdCgpIHtcblx0XHRpZiAodGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMpIHtcblx0XHRcdGZvciAoY29uc3Qgc0lkIG9mIE9iamVjdC5rZXlzKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzKSkge1xuXHRcdFx0XHRpZiAodGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSkge1xuXHRcdFx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0uZGVzdHJveSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRkZWxldGUgdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXM7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkuZGVzdHJveSgpO1xuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5leHRlbnNpb25BUEk7XG5cblx0XHRjb25zdCBvTWVzc2FnZUJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpNZXNzYWdlQnV0dG9uXCIpLFxuXHRcdFx0b01lc3NhZ2VQb3BvdmVyID0gb01lc3NhZ2VCdXR0b24gPyAob01lc3NhZ2VCdXR0b24gYXMgYW55KS5vTWVzc2FnZVBvcG92ZXIgOiBudWxsO1xuXHRcdGlmIChvTWVzc2FnZVBvcG92ZXIgJiYgb01lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRvTWVzc2FnZVBvcG92ZXIuY2xvc2UoKTtcblx0XHR9XG5cdFx0Ly93aGVuIGV4aXRpbmcgd2Ugc2V0IGtlZXBBbGl2ZSBjb250ZXh0IHRvIGZhbHNlXG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzS2VlcEFsaXZlKCkpIHtcblx0XHRcdG9Db250ZXh0LnNldEtlZXBBbGl2ZShmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0X2dldFRhYmxlQmluZGluZyhvVGFibGU6IGFueSkge1xuXHRcdHJldHVybiBvVGFibGUgJiYgb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCkge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZy5hcHBseSh0aGlzKTtcblx0XHQvLyBJbiB0aGUgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCBzY2VuYXJpbyB3ZSBuZWVkIHRvIGVuc3VyZSBpbiBjYXNlIG9mIHJlbG9hZC9yZWZyZXNoIHRoYXQgdGhlIG1ldGEgbW9kZWwgaW4gdGhlIG1ldGhvZGUgcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCBvZiB0aGUgRmllbGRSdW50aW1lIGlzIGF2YWlsYWJsZVxuXHRcdGlmICh0aGlzLm9WaWV3Lm9WaWV3RGF0YT8ucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCAmJiBDb21tb25IZWxwZXIuZ2V0TWV0YU1vZGVsKCkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Q29tbW9uSGVscGVyLnNldE1ldGFNb2RlbCh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHR9XG5cdH1cblxuXHRvbkFmdGVyUmVuZGVyaW5nKCkge1xuXHRcdCgodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKSBhcyBSZXNvdXJjZU1vZGVsKS5nZXRSZXNvdXJjZUJ1bmRsZSgpIGFzIFByb21pc2U8UmVzb3VyY2VCdW5kbGU+KVxuXHRcdFx0LnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcblx0XHRcdFx0dGhpcy5vUmVzb3VyY2VCdW5kbGUgPSByZXNwb25zZTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHJlc291cmNlIGJ1bmRsZVwiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRfb25CZWZvcmVCaW5kaW5nKG9Db250ZXh0OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHQvLyBUT0RPOiB3ZSBzaG91bGQgY2hlY2sgaG93IHRoaXMgY29tZXMgdG9nZXRoZXIgd2l0aCB0aGUgdHJhbnNhY3Rpb24gaGVscGVyLCBzYW1lIHRvIHRoZSBjaGFuZ2UgaW4gdGhlIGFmdGVyQmluZGluZ1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCksXG5cdFx0XHRvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCksXG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0b0ludGVybmFsTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbCxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImJhdGNoR3JvdXBzXCIpLFxuXHRcdFx0aVZpZXdMZXZlbCA9ICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudmlld0xldmVsO1xuXHRcdGxldCBvRmFzdENyZWF0aW9uUm93O1xuXHRcdGFCYXRjaEdyb3Vwcy5wdXNoKFwiJGF1dG9cIik7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLmJEcmFmdE5hdmlnYXRpb24gIT09IHRydWUpIHtcblx0XHRcdHRoaXMuX2Nsb3NlU2lkZUNvbnRlbnQoKTtcblx0XHR9XG5cdFx0Y29uc3Qgb3BDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGlmIChcblx0XHRcdG9wQ29udGV4dCAmJlxuXHRcdFx0b3BDb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkgJiZcblx0XHRcdCFhQmF0Y2hHcm91cHMuc29tZSgob3BDb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuaGFzUGVuZGluZ0NoYW5nZXMuYmluZChvcENvbnRleHQuZ2V0TW9kZWwoKSkpXG5cdFx0KSB7XG5cdFx0XHQvKiBcdEluIGNhc2UgdGhlcmUgYXJlIHBlbmRpbmcgY2hhbmdlcyBmb3IgdGhlIGNyZWF0aW9uIHJvdyBhbmQgbm8gb3RoZXJzIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGNoYW5nZXNcbiAgICBcdFx0XHRcdFx0XHRUT0RPOiB0aGlzIGlzIGp1c3QgYSBxdWljayBzb2x1dGlvbiwgdGhpcyBuZWVkcyB0byBiZSByZXdvcmtlZFxuICAgIFx0XHRcdFx0IFx0Ki9cblxuXHRcdFx0b3BDb250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHR9XG5cblx0XHQvLyBGb3Igbm93IHdlIGhhdmUgdG8gc2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgdG8gbnVsbCBmb3IgZXZlcnkgZmFzdCBjcmVhdGlvbiByb3dcblx0XHQvLyBUT0RPOiBHZXQgcmlkIG9mIHRoaXMgY29kaW5nIG9yIG1vdmUgaXQgdG8gYW5vdGhlciBsYXllciAtIHRvIGJlIGRpc2N1c3NlZCB3aXRoIE1EQyBhbmQgbW9kZWxcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFUYWJsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cgPSBhVGFibGVzW2ldLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHRvRmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNjcm9sbCB0byBwcmVzZW50IFNlY3Rpb24gc28gdGhhdCBiaW5kaW5ncyBhcmUgZW5hYmxlZCBkdXJpbmcgbmF2aWdhdGlvbiB0aHJvdWdoIHBhZ2luYXRvciBidXR0b25zLCBhcyB0aGVyZSBpcyBubyB2aWV3IHJlcmVuZGVyaW5nL3JlYmluZFxuXHRcdGNvbnN0IGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmICghKG9PYmplY3RQYWdlIGFzIGFueSkuaXNGaXJzdFJlbmRlcmluZygpICYmICFtUGFyYW1ldGVycy5iUGVyc2lzdE9QU2Nyb2xsKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihudWxsIGFzIGFueSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudE9uY2UoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uKTtcblxuXHRcdC8vIGlmIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIE9iamVjdFBhZ2VMYXlvdXQgaXMgY2hhbmdlZCB0aGVuIHNjcm9sbCB0byBwcmVzZW50IFNlY3Rpb25cblx0XHQvLyBGSVhNRSBJcyB0aGlzIHJlYWxseSB3b3JraW5nIGFzIGludGVuZGVkID8gSW5pdGlhbGx5IHRoaXMgd2FzIG9uQmVmb3JlUmVuZGVyaW5nLCBidXQgbmV2ZXIgdHJpZ2dlcmVkIG9uQmVmb3JlUmVuZGVyaW5nIGJlY2F1c2UgaXQgd2FzIHJlZ2lzdGVyZWQgYWZ0ZXIgaXRcblx0XHRjb25zdCBvRGVsZWdhdGVPbkJlZm9yZSA9IHtcblx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmc6IGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvblxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYWRkRXZlbnREZWxlZ2F0ZShvRGVsZWdhdGVPbkJlZm9yZSwgdGhpcyk7XG5cdFx0dGhpcy5wYWdlUmVhZHkuYXR0YWNoRXZlbnRPbmNlKFwicGFnZVJlYWR5XCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdG9PYmplY3RQYWdlLnJlbW92ZUV2ZW50RGVsZWdhdGUob0RlbGVnYXRlT25CZWZvcmUpO1xuXHRcdH0pO1xuXG5cdFx0Ly9TZXQgdGhlIEJpbmRpbmcgZm9yIFBhZ2luYXRvcnMgdXNpbmcgTGlzdEJpbmRpbmcgSURcblx0XHRpZiAoaVZpZXdMZXZlbCA+IDEpIHtcblx0XHRcdGxldCBvQmluZGluZyA9IG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmxpc3RCaW5kaW5nO1xuXHRcdFx0Y29uc3Qgb1BhZ2luYXRvckN1cnJlbnRDb250ZXh0ID0gb0ludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIik7XG5cdFx0XHRpZiAob1BhZ2luYXRvckN1cnJlbnRDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG9CaW5kaW5nVG9Vc2UgPSBvUGFnaW5hdG9yQ3VycmVudENvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKG9CaW5kaW5nVG9Vc2UsIG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXHRcdFx0fSBlbHNlIGlmIChvQmluZGluZykge1xuXHRcdFx0XHRpZiAob0JpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKG9CaW5kaW5nLCBvQ29udGV4dCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly9pZiB0aGUgYmluZGluZyB0eXBlIGlzIG5vdCBPRGF0YUxpc3RCaW5kaW5nIGJlY2F1c2Ugb2YgYSBkZWVwbGluayBuYXZpZ2F0aW9uIG9yIGEgcmVmcmVzaCBvZiB0aGUgcGFnZVxuXHRcdFx0XHRcdC8vIHdlIG5lZWQgdG8gY3JlYXRlIGl0XG5cdFx0XHRcdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb0JpbmRpbmcuZ2V0UGF0aCgpLnJlcGxhY2UoL1xcKFteXFwpXSpcXCkqJC8sIFwiXCIpOyAvL3JlbW92aW5nIHRoZSBsYXN0IHR1cGxlXG5cdFx0XHRcdFx0b0JpbmRpbmcgPSBuZXcgKE9EYXRhTGlzdEJpbmRpbmcgYXMgYW55KShvQmluZGluZy5vTW9kZWwsIFwiXCIsIG9CaW5kaW5nLm9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQ29udGV4dFBhdGgpKTtcblx0XHRcdFx0XHRjb25zdCBfc2V0TGlzdEJpbmRpbmdBc3luYyA9ICgpID0+IHtcblx0XHRcdFx0XHRcdGlmIChvQmluZGluZy5nZXRDb250ZXh0cygpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShvQmluZGluZywgb0NvbnRleHQpO1xuXHRcdFx0XHRcdFx0XHRvQmluZGluZy5kZXRhY2hFdmVudChcImNoYW5nZVwiLCBfc2V0TGlzdEJpbmRpbmdBc3luYyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRvQmluZGluZy5nZXRDb250ZXh0cygwKTtcblx0XHRcdFx0XHRvQmluZGluZy5hdHRhY2hFdmVudChcImNoYW5nZVwiLCBfc2V0TGlzdEJpbmRpbmdBc3luYyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCEodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnVzZU5ld0xhenlMb2FkaW5nICYmIG9PYmplY3RQYWdlLmdldEVuYWJsZUxhenlMb2FkaW5nKCkpIHtcblx0XHRcdGNvbnN0IGFTZWN0aW9ucyA9IG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCk7XG5cdFx0XHRjb25zdCBiVXNlSWNvblRhYkJhciA9IG9PYmplY3RQYWdlLmdldFVzZUljb25UYWJCYXIoKTtcblx0XHRcdGxldCBpU2tpcCA9IDI7XG5cdFx0XHRjb25zdCBiSXNJbkVkaXRNb2RlID0gb09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXHRcdFx0Y29uc3QgYkVkaXRhYmxlSGVhZGVyID0gKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5lZGl0YWJsZUhlYWRlckNvbnRlbnQ7XG5cdFx0XHRmb3IgKGxldCBpU2VjdGlvbiA9IDA7IGlTZWN0aW9uIDwgYVNlY3Rpb25zLmxlbmd0aDsgaVNlY3Rpb24rKykge1xuXHRcdFx0XHRjb25zdCBvU2VjdGlvbiA9IGFTZWN0aW9uc1tpU2VjdGlvbl07XG5cdFx0XHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRcdGZvciAobGV0IGlTdWJTZWN0aW9uID0gMDsgaVN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBpU3ViU2VjdGlvbisrLCBpU2tpcC0tKSB7XG5cdFx0XHRcdFx0Ly8gSW4gSWNvblRhYkJhciBtb2RlIGtlZXAgdGhlIHNlY29uZCBzZWN0aW9uIGJvdW5kIGlmIHRoZXJlIGlzIGFuIGVkaXRhYmxlIGhlYWRlciBhbmQgd2UgYXJlIHN3aXRjaGluZyB0byBkaXNwbGF5IG1vZGVcblx0XHRcdFx0XHRpZiAoaVNraXAgPCAxIHx8IChiVXNlSWNvblRhYkJhciAmJiAoaVNlY3Rpb24gPiAxIHx8IChpU2VjdGlvbiA9PT0gMSAmJiAhYkVkaXRhYmxlSGVhZGVyICYmICFiSXNJbkVkaXRNb2RlKSkpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IGFTdWJTZWN0aW9uc1tpU3ViU2VjdGlvbl07XG5cdFx0XHRcdFx0XHRpZiAob1N1YlNlY3Rpb24uZGF0YSgpLmlzVmlzaWJpbGl0eUR5bmFtaWMgIT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLnNldEJpbmRpbmdDb250ZXh0KG51bGwgYXMgYW55KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5wbGFjZWhvbGRlci5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpICYmIG1QYXJhbWV0ZXJzLnNob3dQbGFjZWhvbGRlcikge1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IG9OYXZDb250YWluZXIgPSAob1ZpZXcuZ2V0UGFyZW50KCkgYXMgYW55KS5vQ29udGFpbmVyLmdldFBhcmVudCgpO1xuXHRcdFx0aWYgKG9OYXZDb250YWluZXIpIHtcblx0XHRcdFx0b05hdkNvbnRhaW5lci5zaG93UGxhY2Vob2xkZXIoe30pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2U6IGFueSkge1xuXHRcdGxldCBvRmlyc3RDbGlja2FibGVFbGVtZW50O1xuXHRcdGNvbnN0IGFBY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSAmJiBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpLmdldEFjdGlvbnMoKTtcblx0XHRpZiAoYUFjdGlvbnMgJiYgYUFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRvRmlyc3RDbGlja2FibGVFbGVtZW50ID0gYUFjdGlvbnMuZmluZChmdW5jdGlvbiAob0FjdGlvbjogYW55KSB7XG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgbGVmdCBhbGlnbm1lbnQgb2YgdGhlIERyYWZ0IHN3aXRjaCBhbmQgdGhlIGNvbGxhYm9yYXRpdmUgZHJhZnQgYXZhdGFyIGNvbnRyb2xzXG5cdFx0XHRcdC8vIHRoZXJlIGlzIGEgVG9vbGJhclNwYWNlciBpbiB0aGUgYWN0aW9ucyBhZ2dyZWdhdGlvbiB3aGljaCB3ZSBuZWVkIHRvIGV4Y2x1ZGUgaGVyZSFcblx0XHRcdFx0Ly8gRHVlIHRvIHRoZSBBQ0MgcmVwb3J0LCB3ZSBhbHNvIG5lZWQgbm90IHRvIGNoZWNrIGZvciB0aGUgSW52aXNpYmxlVGV4dCBlbGVtZW50c1xuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdCFvQWN0aW9uLmlzQShcInNhcC51aS5jb3JlLkludmlzaWJsZVRleHRcIikgJiZcblx0XHRcdFx0XHQhb0FjdGlvbi5pc0EoXCJzYXAubS5Ub29sYmFyU3BhY2VyXCIpICYmXG5cdFx0XHRcdFx0b0FjdGlvbi5nZXRWaXNpYmxlKCkgJiZcblx0XHRcdFx0XHRvQWN0aW9uLmdldEVuYWJsZWQoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBvRmlyc3RDbGlja2FibGVFbGVtZW50O1xuXHR9XG5cblx0X2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9uczogYW55KSB7XG5cdFx0aWYgKGFTdWJTZWN0aW9ucykge1xuXHRcdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdFx0Y29uc3QgYUJsb2NrcyA9IGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKTtcblxuXHRcdFx0XHRpZiAoYUJsb2Nrcykge1xuXHRcdFx0XHRcdGZvciAobGV0IGJsb2NrID0gMDsgYmxvY2sgPCBhQmxvY2tzLmxlbmd0aDsgYmxvY2srKykge1xuXHRcdFx0XHRcdFx0bGV0IGFGb3JtQ29udGFpbmVycztcblxuXHRcdFx0XHRcdFx0aWYgKGFCbG9ja3NbYmxvY2tdLmlzQShcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9IGFCbG9ja3NbYmxvY2tdLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0XHRhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50ICYmXG5cdFx0XHRcdFx0XHRcdGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQoKSAmJlxuXHRcdFx0XHRcdFx0XHRhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50KCkuaXNBKFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIilcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSBhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50KCkuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGFGb3JtQ29udGFpbmVycykge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBmb3JtQ29udGFpbmVyID0gMDsgZm9ybUNvbnRhaW5lciA8IGFGb3JtQ29udGFpbmVycy5sZW5ndGg7IGZvcm1Db250YWluZXIrKykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGb3JtRWxlbWVudHMgPSBhRm9ybUNvbnRhaW5lcnNbZm9ybUNvbnRhaW5lcl0uZ2V0Rm9ybUVsZW1lbnRzKCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFGb3JtRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGZvcm1FbGVtZW50ID0gMDsgZm9ybUVsZW1lbnQgPCBhRm9ybUVsZW1lbnRzLmxlbmd0aDsgZm9ybUVsZW1lbnQrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRmllbGRzID0gYUZvcm1FbGVtZW50c1tmb3JtRWxlbWVudF0uZ2V0RmllbGRzKCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVGhlIGZpcnN0IGZpZWxkIGlzIG5vdCBuZWNlc3NhcmlseSBhbiBJbnB1dEJhc2UgKGUuZy4gY291bGQgYmUgYSBUZXh0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTbyB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgaXQgaGFzIGEgZ2V0UmVxdWlyZWQgbWV0aG9kXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFGaWVsZHNbMF0uZ2V0UmVxdWlyZWQgJiYgYUZpZWxkc1swXS5nZXRSZXF1aXJlZCgpICYmICFhRmllbGRzWzBdLmdldFZhbHVlKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBhRmllbGRzWzBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoZW4gc2VhcmNoaW5nIGZvciBtYW5kYW90cnkgZW1wdHkgZmllbGQ6ICR7ZXJyb3J9YCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdF91cGRhdGVGb2N1c0luRWRpdE1vZGUoYVN1YlNlY3Rpb25zOiBhbnkpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cblx0XHRjb25zdCBvTWFuZGF0b3J5RmllbGQgPSB0aGlzLl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnMpO1xuXHRcdGxldCBvRmllbGRUb0ZvY3VzOiBhbnk7XG5cdFx0aWYgKG9NYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IG9NYW5kYXRvcnlGaWVsZC5jb250ZW50LmdldENvbnRlbnRFZGl0KClbMF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9GaWVsZFRvRm9jdXMgPSAob09iamVjdFBhZ2UgYXMgYW55KS5fZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCkgfHwgdGhpcy5fZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHR9XG5cblx0XHRpZiAob0ZpZWxkVG9Gb2N1cykge1xuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdC8vIFdlIHNldCB0aGUgZm9jdXMgaW4gYSB0aW1lZW91dCwgb3RoZXJ3aXNlIHRoZSBmb2N1cyBzb21ldGltZXMgZ29lcyB0byB0aGUgVGFiQmFyXG5cdFx0XHRcdG9GaWVsZFRvRm9jdXMuZm9jdXMoKTtcblx0XHRcdH0sIDApO1xuXHRcdH1cblx0fVxuXG5cdF9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0KG9FdmVudDogYW55KSB7XG5cdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRvU3ViU2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpO1xuXHR9XG5cblx0X29uQmFja05hdmlnYXRpb25JbkRyYWZ0KG9Db250ZXh0OiBhbnkpIHtcblx0XHRpZiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0ZXJQcm94eSgpLmNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQoKSkge1xuXHRcdFx0Ly8gQmFjayBuYXYgd2lsbCBrZWVwIHRoZSBzYW1lIGNvbnRleHQgLS0+IG5vIG5lZWQgdG8gZGlzcGxheSB0aGUgZGlhbG9nXG5cdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0X29uQWZ0ZXJCaW5kaW5nKG9CaW5kaW5nQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCk7XG5cblx0XHR0aGlzLl9zaWRlRWZmZWN0cy5jbGVhclByb3BlcnRpZXNTdGF0dXMoKTtcblxuXHRcdC8vIFRPRE86IHRoaXMgaXMgb25seSBhIHRlbXAgc29sdXRpb24gYXMgbG9uZyBhcyB0aGUgbW9kZWwgZml4IHRoZSBjYWNoZSBpc3N1ZSBhbmQgd2UgdXNlIHRoaXMgYWRkaXRpb25hbFxuXHRcdC8vIGJpbmRpbmcgd2l0aCBvd25SZXF1ZXN0XG5cdFx0b0JpbmRpbmdDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKTtcblxuXHRcdGxldCBhSUJOQWN0aW9uczogYW55W10gPSBbXTtcblx0XHRvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBhbnkpIHtcblx0XHRcdG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IGFueSkge1xuXHRcdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1N1YlNlY3Rpb24sIGFJQk5BY3Rpb25zKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0Ly8gQXNzaWduIGludGVybmFsIGJpbmRpbmcgY29udGV4dHMgdG8gb0Zvcm1Db250YWluZXI6XG5cdFx0Ly8gMS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGFzc2lnbiB0aGUgaW50ZXJuYWwgYmluZGluZyBjb250ZXh0IHRvIHRoZSBYTUwgZnJhZ21lbnRcblx0XHQvLyAoRm9ybUNvbnRhaW5lci5mcmFnbWVudC54bWwpIHlldCAtIGl0IGlzIHVzZWQgYWxyZWFkeSBmb3IgdGhlIGRhdGEtc3RydWN0dXJlLlxuXHRcdC8vIDIuIEFub3RoZXIgcHJvYmxlbSBpcywgdGhhdCBGb3JtQ29udGFpbmVycyBhc3NpZ25lZCB0byBhICdNb3JlQmxvY2snIGRvZXMgbm90IGhhdmUgYW5cblx0XHQvLyBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IGF0IGFsbC5cblxuXHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIHt9KTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93Q3VzdG9tVmFsaWRpdHlcIiwge30pO1xuXG5cdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1RhYmxlLCBhSUJOQWN0aW9ucyk7XG5cdFx0XHQvLyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgQkNQOiAyMDgwMjE4MDA0XG5cdFx0XHQvLyBOZWVkIHRvIGZpeCB3aXRoIEJMSTogRklPUklURUNIUDEtMTUyNzRcblx0XHRcdC8vIG9ubHkgZm9yIGVkaXQgbW9kZSwgd2UgY2xlYXIgdGhlIHRhYmxlIGNhY2hlXG5cdFx0XHQvLyBXb3JrYXJvdW5kIHN0YXJ0cyBoZXJlISFcblx0XHRcdGNvbnN0IG9UYWJsZVJvd0JpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmcpIHtcblx0XHRcdFx0aWYgKE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvVGFibGVSb3dCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRcdFx0Ly8gYXBwbHkgZm9yIGJvdGggZWRpdCBhbmQgZGlzcGxheSBtb2RlIGluIHN0aWNreVxuXHRcdFx0XHRcdG9UYWJsZVJvd0JpbmRpbmcucmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMoXCJcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIFdvcmthcm91bmQgZW5kcyBoZXJlISFcblxuXHRcdFx0Ly8gVXBkYXRlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBEYXRhRmllbGRGb3JBY3Rpb24gYnV0dG9ucyBvbiB0YWJsZSB0b29sYmFyXG5cdFx0XHQvLyBUaGUgc2FtZSBpcyBhbHNvIHBlcmZvcm1lZCBvbiBUYWJsZSBzZWxlY3Rpb25DaGFuZ2UgZXZlbnRcblx0XHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKFxuXHRcdFx0XHRcdENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEoRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEob1RhYmxlLCBcIm9wZXJhdGlvbkF2YWlsYWJsZU1hcFwiKSlcblx0XHRcdFx0KSxcblx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHMgPSBvVGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpO1xuXG5cdFx0XHRDb21tb25VdGlscy5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgYVNlbGVjdGVkQ29udGV4dHMpO1xuXHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLmdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwodGhpcywgXCJfcGFnZU1vZGVsXCIpO1xuXHRcdC8vUmV0cmlldmUgT2JqZWN0IFBhZ2UgaGVhZGVyIGFjdGlvbnMgZnJvbSBPYmplY3QgUGFnZSB0aXRsZSBjb250cm9sXG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VUaXRsZSA9IG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCk7XG5cdFx0bGV0IGFJQk5IZWFkZXJBY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRcdGFJQk5IZWFkZXJBY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvT2JqZWN0UGFnZVRpdGxlLCBhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0YUlCTkFjdGlvbnMgPSBhSUJOQWN0aW9ucy5jb25jYXQoYUlCTkhlYWRlckFjdGlvbnMpO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zLCB0aGlzLmdldFZpZXcoKSk7XG5cblx0XHRsZXQgb01vZGVsOiBhbnksIG9GaW5hbFVJU3RhdGU6IGFueTtcblxuXHRcdC8vIFRPRE86IHRoaXMgc2hvdWxkIGJlIG1vdmVkIGludG8gYW4gaW5pdCBldmVudCBvZiB0aGUgTURDIHRhYmxlcyAobm90IHlldCBleGlzdGluZykgYW5kIHNob3VsZCBiZSBwYXJ0XG5cdFx0Ly8gb2YgYW55IGNvbnRyb2xsZXIgZXh0ZW5zaW9uXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9UYWJsZVxuXHRcdCAqIEBwYXJhbSBvTGlzdEJpbmRpbmdcblx0XHQgKi9cblx0XHRhc3luYyBmdW5jdGlvbiBlbmFibGVGYXN0Q3JlYXRpb25Sb3cob1RhYmxlOiBhbnksIG9MaXN0QmluZGluZzogYW55KSB7XG5cdFx0XHRjb25zdCBvRmFzdENyZWF0aW9uUm93ID0gb1RhYmxlLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRsZXQgb0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nLCBvRmFzdENyZWF0aW9uQ29udGV4dDtcblxuXHRcdFx0aWYgKG9GYXN0Q3JlYXRpb25Sb3cpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhd2FpdCBvRmluYWxVSVN0YXRlO1xuXHRcdFx0XHRcdGlmIChvRmFzdENyZWF0aW9uUm93LmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0XHRcdFx0b0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nID0gb01vZGVsLmJpbmRMaXN0KG9MaXN0QmluZGluZy5nZXRQYXRoKCksIG9MaXN0QmluZGluZy5nZXRDb250ZXh0KCksIFtdLCBbXSwge1xuXHRcdFx0XHRcdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwiZG9Ob3RTdWJtaXRcIixcblx0XHRcdFx0XHRcdFx0JCRncm91cElkOiBcImRvTm90U3VibWl0XCJcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0Ly8gV29ya2Fyb3VuZCBzdWdnZXN0ZWQgYnkgT0RhdGEgbW9kZWwgdjQgY29sbGVhZ3Vlc1xuXHRcdFx0XHRcdFx0b0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nLnJlZnJlc2hJbnRlcm5hbCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0LyogZG8gbm90aGluZyAqL1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdG9GYXN0Q3JlYXRpb25Db250ZXh0ID0gb0Zhc3RDcmVhdGlvbkxpc3RCaW5kaW5nLmNyZWF0ZSgpO1xuXHRcdFx0XHRcdFx0b0Zhc3RDcmVhdGlvblJvdy5zZXRCaW5kaW5nQ29udGV4dChvRmFzdENyZWF0aW9uQ29udGV4dCk7XG5cblx0XHRcdFx0XHRcdC8vIHRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIGNvbnNvbGUgZXJyb3Jcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IG9GYXN0Q3JlYXRpb25Db250ZXh0LmNyZWF0ZWQoKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0TG9nLnRyYWNlKFwidHJhbnNpZW50IGZhc3QgY3JlYXRpb24gY29udGV4dCBkZWxldGVkXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjb21wdXRpbmcgdGhlIGZpbmFsIFVJIHN0YXRlXCIsIG9FcnJvcik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyB0aGlzIHNob3VsZCBub3QgYmUgbmVlZGVkIGF0IHRoZSBhbGxcblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1RhYmxlXG5cdFx0ICovXG5cdFx0Y29uc3QgaGFuZGxlVGFibGVNb2RpZmljYXRpb25zID0gKG9UYWJsZTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyhvVGFibGUpLFxuXHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0ZW5hYmxlRmFzdENyZWF0aW9uUm93KG9UYWJsZSwgb0JpbmRpbmcpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoIW9CaW5kaW5nKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgRXhwZWN0ZWQgYmluZGluZyBtaXNzaW5nIGZvciB0YWJsZTogJHtvVGFibGUuZ2V0SWQoKX1gKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0JpbmRpbmcub0NvbnRleHQpIHtcblx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmbkhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRpZiAob0JpbmRpbmcub0NvbnRleHQpIHtcblx0XHRcdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZGV0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaENoYW5nZShmbkhhbmRsZUNoYW5nZSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdG9Nb2RlbCA9IG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXG5cdFx0XHQvLyBDb21wdXRlIEVkaXQgTW9kZVxuXHRcdFx0b0ZpbmFsVUlTdGF0ZSA9IHRoaXMuX2VkaXRGbG93LmNvbXB1dGVFZGl0TW9kZShvQmluZGluZ0NvbnRleHQpO1xuXG5cdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQob01vZGVsLmdldE1ldGFNb2RlbCgpKSkge1xuXHRcdFx0XHRvRmluYWxVSVN0YXRlXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0XHRcdFx0XHRjb25uZWN0KHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBmaW5hbCBVSSBTdGF0ZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyB1cGRhdGUgcmVsYXRlZCBhcHBzIG9uY2UgRGF0YSBpcyByZWNlaXZlZCBpbiBjYXNlIG9mIGJpbmRpbmcgY2FjaGUgaXMgbm90IGF2YWlsYWJsZVxuXHRcdFx0Ly8gVE9ETzogdGhpcyBpcyBvbmx5IGEgdGVtcCBzb2x1dGlvbiBzaW5jZSB3ZSBuZWVkIHRvIGNhbGwgX3VwZGF0ZVJlbGF0ZWRBcHBzIG1ldGhvZCBvbmx5IGFmdGVyIGRhdGEgZm9yIE9iamVjdCBQYWdlIGlzIHJlY2VpdmVkIChpZiB0aGVyZSBpcyBubyBiaW5kaW5nKVxuXHRcdFx0aWYgKG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkub0NhY2hlKSB7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZVJlbGF0ZWRBcHBzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmblVwZGF0ZVJlbGF0ZWRBcHBzID0gKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZVJlbGF0ZWRBcHBzKCk7XG5cdFx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKS5kZXRhY2hEYXRhUmVjZWl2ZWQoZm5VcGRhdGVSZWxhdGVkQXBwcyk7XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkuYXR0YWNoRGF0YVJlY2VpdmVkKGZuVXBkYXRlUmVsYXRlZEFwcHMpO1xuXHRcdFx0fVxuXG5cdFx0XHQvL0F0dGFjaCB0aGUgcGF0Y2ggc2VudCBhbmQgcGF0Y2ggY29tcGxldGVkIGV2ZW50IHRvIHRoZSBvYmplY3QgcGFnZSBiaW5kaW5nIHNvIHRoYXQgd2UgY2FuIHJlYWN0XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IChvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZyAmJiBvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpKSB8fCBvQmluZGluZ0NvbnRleHQ7XG5cblx0XHRcdC8vIEF0dGFjaCB0aGUgZXZlbnQgaGFuZGxlciBvbmx5IG9uY2UgdG8gdGhlIHNhbWUgYmluZGluZ1xuXHRcdFx0aWYgKHRoaXMuY3VycmVudEJpbmRpbmcgIT09IG9CaW5kaW5nKSB7XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwicGF0Y2hTZW50XCIsIHRoaXMuZWRpdEZsb3cuaGFuZGxlUGF0Y2hTZW50LCB0aGlzKTtcblx0XHRcdFx0dGhpcy5jdXJyZW50QmluZGluZyA9IG9CaW5kaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRcdC8vIGFjY2VzcyBiaW5kaW5nIG9ubHkgYWZ0ZXIgdGFibGUgaXMgYm91bmRcblx0XHRcdFx0VGFibGVVdGlscy53aGVuQm91bmQob1RhYmxlKVxuXHRcdFx0XHRcdC50aGVuKGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucylcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgdGFibGUgdG8gYmUgYm91bmRcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoISh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudXNlTmV3TGF6eUxvYWRpbmcpIHtcblx0XHRcdFx0Ly8gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGJpbmRpbmcgaXMgcmVhZHkgaGVuY2UgY2FsbGluZyBpdCBpbiBvbkFmdGVyQmluZGluZ1xuXHRcdFx0XHQob09iamVjdFBhZ2UgYXMgYW55KS5fdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25QYWdlUmVhZHkobVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGNvbnN0IHNldEZvY3VzID0gKCkgPT4ge1xuXHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZmlyc3QgYWN0aW9uIGJ1dHRvbiwgb3IgdG8gdGhlIGZpcnN0IGVkaXRhYmxlIGlucHV0IGlmIGluIGVkaXRhYmxlIG1vZGVcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGNvbnN0IGlzSW5EaXNwbGF5TW9kZSA9ICFvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cblx0XHRcdGlmIChpc0luRGlzcGxheU1vZGUpIHtcblx0XHRcdFx0Y29uc3Qgb0ZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IHRoaXMuX2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZSk7XG5cdFx0XHRcdGlmIChvRmlyc3RDbGlja2FibGVFbGVtZW50KSB7XG5cdFx0XHRcdFx0b0ZpcnN0Q2xpY2thYmxlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRTZWN0aW9uOiBhbnkgPSBDb3JlLmJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkpO1xuXHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUob1NlbGVjdGVkU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdC8vIEFwcGx5IGFwcCBzdGF0ZSBvbmx5IGFmdGVyIHRoZSBwYWdlIGlzIHJlYWR5IHdpdGggdGhlIGZpcnN0IHNlY3Rpb24gc2VsZWN0ZWRcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHQvL1Nob3cgcG9wdXAgd2hpbGUgbmF2aWdhdGluZyBiYWNrIGZyb20gb2JqZWN0IHBhZ2UgaW4gY2FzZSBvZiBkcmFmdFxuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoKG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdGlmICghYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24oKCkgPT4gdGhpcy5fb25CYWNrTmF2aWdhdGlvbkluRHJhZnQob0JpbmRpbmdDb250ZXh0KSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdC5nZXRBcHBTdGF0ZUhhbmRsZXIoKVxuXHRcdFx0LmFwcGx5QXBwU3RhdGUoKVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRpZiAobVBhcmFtZXRlcnMuZm9yY2VGb2N1cykge1xuXHRcdFx0XHRcdHNldEZvY3VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKEVycm9yKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgdGhlIGZvY3VzXCIsIEVycm9yKTtcblx0XHRcdH0pO1xuXG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIiwgZmFsc2UpO1xuXHRcdHRoaXMuX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb25cblx0ICovXG5cdGdldFN0aWNreUVkaXRNb2RlKCkge1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0ICYmICh0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQpO1xuXHRcdGxldCBiSXNTdGlja3lFZGl0TW9kZSA9IGZhbHNlO1xuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwpO1xuXHRcdFx0aWYgKGJJc1N0aWNreU1vZGUpIHtcblx0XHRcdFx0YklzU3RpY2t5RWRpdE1vZGUgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBiSXNTdGlja3lFZGl0TW9kZTtcblx0fVxuXG5cdF9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VcIikgYXMgT2JqZWN0UGFnZUxheW91dDtcblx0fVxuXG5cdF9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VTdWJ0aXRsZSA9IG9PYmplY3RQYWdlLmdldEN1c3RvbURhdGEoKS5maW5kKGZ1bmN0aW9uIChvQ3VzdG9tRGF0YTogYW55KSB7XG5cdFx0XHRyZXR1cm4gb0N1c3RvbURhdGEuZ2V0S2V5KCkgPT09IFwiT2JqZWN0UGFnZVN1YnRpdGxlXCI7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpdGxlOiBvT2JqZWN0UGFnZS5kYXRhKFwiT2JqZWN0UGFnZVRpdGxlXCIpIHx8IFwiXCIsXG5cdFx0XHRzdWJ0aXRsZTogb09iamVjdFBhZ2VTdWJ0aXRsZSAmJiBvT2JqZWN0UGFnZVN1YnRpdGxlLmdldFZhbHVlKCksXG5cdFx0XHRpbnRlbnQ6IFwiXCIsXG5cdFx0XHRpY29uOiBcIlwiXG5cdFx0fTtcblx0fVxuXG5cdF9leGVjdXRlSGVhZGVyU2hvcnRjdXQoc0lkOiBhbnkpIHtcblx0XHRjb25zdCBzQnV0dG9uSWQgPSBgJHt0aGlzLmdldFZpZXcoKS5nZXRJZCgpfS0tJHtzSWR9YCxcblx0XHRcdG9CdXR0b24gPSAodGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRIZWFkZXJUaXRsZSgpIGFzIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUpXG5cdFx0XHRcdC5nZXRBY3Rpb25zKClcblx0XHRcdFx0LmZpbmQoZnVuY3Rpb24gKG9FbGVtZW50OiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0VsZW1lbnQuZ2V0SWQoKSA9PT0gc0J1dHRvbklkO1xuXHRcdFx0XHR9KTtcblx0XHRDb21tb25VdGlscy5maXJlQnV0dG9uUHJlc3Mob0J1dHRvbik7XG5cdH1cblxuXHRfZXhlY3V0ZUZvb3RlclNob3J0Y3V0KHNJZDogYW55KSB7XG5cdFx0Y29uc3Qgc0J1dHRvbklkID0gYCR7dGhpcy5nZXRWaWV3KCkuZ2V0SWQoKX0tLSR7c0lkfWAsXG5cdFx0XHRvQnV0dG9uID0gKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0Rm9vdGVyKCkgYXMgYW55KS5nZXRDb250ZW50KCkuZmluZChmdW5jdGlvbiAob0VsZW1lbnQ6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gb0VsZW1lbnQuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLm0uQnV0dG9uXCIgJiYgb0VsZW1lbnQuZ2V0SWQoKSA9PT0gc0J1dHRvbklkO1xuXHRcdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMuZmlyZUJ1dHRvblByZXNzKG9CdXR0b24pO1xuXHR9XG5cblx0X2V4ZWN1dGVUYWJTaG9ydEN1dChvRXhlY3V0aW9uOiBhbnkpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCksXG5cdFx0XHRhU2VjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLFxuXHRcdFx0aVNlY3Rpb25JbmRleE1heCA9IGFTZWN0aW9ucy5sZW5ndGggLSAxLFxuXHRcdFx0c0NvbW1hbmQgPSBvRXhlY3V0aW9uLm9Tb3VyY2UuZ2V0Q29tbWFuZCgpO1xuXHRcdGxldCBuZXdTZWN0aW9uLFxuXHRcdFx0aVNlbGVjdGVkU2VjdGlvbkluZGV4ID0gb09iamVjdFBhZ2UuaW5kZXhPZlNlY3Rpb24odGhpcy5ieUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gLTEgJiYgaVNlY3Rpb25JbmRleE1heCA+IDApIHtcblx0XHRcdGlmIChzQ29tbWFuZCA9PT0gXCJOZXh0VGFiXCIpIHtcblx0XHRcdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCA8PSBpU2VjdGlvbkluZGV4TWF4IC0gMSkge1xuXHRcdFx0XHRcdG5ld1NlY3Rpb24gPSBhU2VjdGlvbnNbKytpU2VsZWN0ZWRTZWN0aW9uSW5kZXhdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gMCkge1xuXHRcdFx0XHQvLyBQcmV2aW91c1RhYlxuXHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWy0taVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG5ld1NlY3Rpb24pIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG5ld1NlY3Rpb24pO1xuXHRcdFx0XHRuZXdTZWN0aW9uLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZvb3RlclZpc2liaWxpdHkoKSB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzVmlld0lkID0gdGhpcy5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgZmFsc2UpO1xuXHRcdHNhcC51aVxuXHRcdFx0LmdldENvcmUoKVxuXHRcdFx0LmdldE1lc3NhZ2VNYW5hZ2VyKClcblx0XHRcdC5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0LmdldERhdGEoKVxuXHRcdFx0LmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBhbnkpIHtcblx0XHRcdFx0aWYgKG9NZXNzYWdlLnZhbGlkYXRpb24gJiYgb01lc3NhZ2UudHlwZSA9PT0gXCJFcnJvclwiICYmIG9NZXNzYWdlLnRhcmdldC5pbmRleE9mKHNWaWV3SWQpID4gLTEpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0X3Nob3dNZXNzYWdlUG9wb3ZlcihlcnI/OiBhbnksIG9SZXQ/OiBhbnkpIHtcblx0XHRpZiAoZXJyKSB7XG5cdFx0XHRMb2cuZXJyb3IoZXJyKTtcblx0XHR9XG5cdFx0aWYgKCEodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Q29udGFpbmVyKCkgYXMgYW55KS5nZXRDdXJyZW50UGFnZSgpLmlzQShcInNhcC5tLk1lc3NhZ2VQYWdlXCIpKSB7XG5cdFx0XHRjb25zdCBvTWVzc2FnZUJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpNZXNzYWdlQnV0dG9uXCIpIGFzIGFueSxcblx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyID0gb01lc3NhZ2VCdXR0b24ub01lc3NhZ2VQb3BvdmVyLFxuXHRcdFx0XHRvSXRlbUJpbmRpbmcgPSBvTWVzc2FnZVBvcG92ZXIuZ2V0QmluZGluZyhcIml0ZW1zXCIpO1xuXG5cdFx0XHRpZiAob0l0ZW1CaW5kaW5nLmdldExlbmd0aCgpID4gMCAmJiAhb01lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRcdG9NZXNzYWdlQnV0dG9uLnNldFZpc2libGUodHJ1ZSk7XG5cdFx0XHRcdC8vIHdvcmthcm91bmQgdG8gZW5zdXJlIHRoYXQgb01lc3NhZ2VCdXR0b24gaXMgcmVuZGVyZWQgd2hlbiBvcGVuQnkgaXMgY2FsbGVkXG5cdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdG9NZXNzYWdlUG9wb3Zlci5vcGVuQnkob01lc3NhZ2VCdXR0b24pO1xuXHRcdFx0XHR9LCAwKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9SZXQ7XG5cdH1cblxuXHRfZWRpdERvY3VtZW50KG9Db250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpO1xuXHRcdEJ1c3lMb2NrZXIubG9jayhvTW9kZWwpO1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmVkaXREb2N1bWVudC5hcHBseSh0aGlzLmVkaXRGbG93LCBbb0NvbnRleHRdKS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Nb2RlbCk7XG5cdFx0fSk7XG5cdH1cblxuXHRhc3luYyBfc2F2ZURvY3VtZW50KG9Db250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLFxuXHRcdFx0YVdhaXRDcmVhdGVEb2N1bWVudHM6IGFueVtdID0gW107XG5cdFx0Ly8gaW5kaWNhdGVzIGlmIHdlIGFyZSBjcmVhdGluZyBhIG5ldyByb3cgaW4gdGhlIE9QXG5cdFx0bGV0IGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gZmFsc2U7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0dGhpcy5fZmluZFRhYmxlcygpLmZvckVhY2goKG9UYWJsZTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyhvVGFibGUpO1xuXHRcdFx0Y29uc3QgbVBhcmFtZXRlcnM6IGFueSA9IHtcblx0XHRcdFx0Y3JlYXRpb25Nb2RlOiBvVGFibGUuZGF0YShcImNyZWF0aW9uTW9kZVwiKSxcblx0XHRcdFx0Y3JlYXRpb25Sb3c6IG9UYWJsZS5nZXRDcmVhdGlvblJvdygpLFxuXHRcdFx0XHRjcmVhdGVBdEVuZDogb1RhYmxlLmRhdGEoXCJjcmVhdGVBdEVuZFwiKSA9PT0gXCJ0cnVlXCJcblx0XHRcdH07XG5cdFx0XHRjb25zdCBiQ3JlYXRlRG9jdW1lbnQgPVxuXHRcdFx0XHRtUGFyYW1ldGVycy5jcmVhdGlvblJvdyAmJlxuXHRcdFx0XHRtUGFyYW1ldGVycy5jcmVhdGlvblJvdy5nZXRCaW5kaW5nQ29udGV4dCgpICYmXG5cdFx0XHRcdE9iamVjdC5rZXlzKG1QYXJhbWV0ZXJzLmNyZWF0aW9uUm93LmdldEJpbmRpbmdDb250ZXh0KCkuZ2V0T2JqZWN0KCkpLmxlbmd0aCA+IDE7XG5cdFx0XHRpZiAoYkNyZWF0ZURvY3VtZW50KSB7XG5cdFx0XHRcdC8vIHRoZSBiU2tpcFNpZGVFZmZlY3RzIGlzIGEgcGFyYW1ldGVyIGNyZWF0ZWQgd2hlbiB3ZSBjbGljayB0aGUgc2F2ZSBrZXkuIElmIHdlIHByZXNzIHRoaXMga2V5XG5cdFx0XHRcdC8vIHdlIGRvbid0IGV4ZWN1dGUgdGhlIGhhbmRsZVNpZGVFZmZlY3RzIGZ1bmNpdG9uIHRvIGF2b2lkIGJhdGNoIHJlZHVuZGFuY3lcblx0XHRcdFx0bVBhcmFtZXRlcnMuYlNraXBTaWRlRWZmZWN0cyA9IHRydWU7XG5cdFx0XHRcdGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gdHJ1ZTtcblx0XHRcdFx0YVdhaXRDcmVhdGVEb2N1bWVudHMucHVzaChcblx0XHRcdFx0XHR0aGlzLmVkaXRGbG93LmNyZWF0ZURvY3VtZW50KG9CaW5kaW5nLCBtUGFyYW1ldGVycykudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0JpbmRpbmc7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBhQmluZGluZ3MgPSBhd2FpdCBQcm9taXNlLmFsbChhV2FpdENyZWF0ZURvY3VtZW50cyk7XG5cdFx0XHRjb25zdCBtUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0YkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3I6IGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yLFxuXHRcdFx0XHRiaW5kaW5nczogYUJpbmRpbmdzXG5cdFx0XHR9O1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBlaXRoZXIgcmVqZWN0IG9yIHJlc29sdmUgYSBwcm9taXNlIGhlcmUgYW5kIHJldHVybiBpdCBzaW5jZSB0aGlzIHNhdmVcblx0XHRcdC8vIGZ1bmN0aW9uIGlzIG5vdCBvbmx5IGNhbGxlZCB3aGVuIHByZXNzaW5nIHRoZSBzYXZlIGJ1dHRvbiBpbiB0aGUgZm9vdGVyLCBidXQgYWxzb1xuXHRcdFx0Ly8gd2hlbiB0aGUgdXNlciBzZWxlY3RzIGNyZWF0ZSBvciBzYXZlIGluIGEgZGF0YWxvc3MgcG9wdXAuXG5cdFx0XHQvLyBUaGUgbG9naWMgb2YgdGhlIGRhdGFsb3NzIHBvcHVwIG5lZWRzIHRvIGRldGVjdCBpZiB0aGUgc2F2ZSBoYWQgZXJyb3JzIG9yIG5vdCBpbiBvcmRlclxuXHRcdFx0Ly8gdG8gZGVjaWRlIGlmIHRoZSBzdWJzZXF1ZW50IGFjdGlvbiAtIGxpa2UgYSBiYWNrIG5hdmlnYXRpb24gLSBoYXMgdG8gYmUgZXhlY3V0ZWQgb3Igbm90LlxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zYXZlRG9jdW1lbnQob0NvbnRleHQsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHNhdmVEb2N1bWVudCBpbiBlZGl0RmxvdyByZXR1cm5zIGVycm9ycyB3ZSBuZWVkXG5cdFx0XHRcdC8vIHRvIHNob3cgdGhlIG1lc3NhZ2UgcG9wb3ZlciBoZXJlIGFuZCBlbnN1cmUgdGhhdCB0aGVcblx0XHRcdFx0Ly8gZGF0YWxvc3MgbG9naWMgZG9lcyBub3QgcGVyZm9ybSB0aGUgZm9sbG93IHVwIGZ1bmN0aW9uXG5cdFx0XHRcdC8vIGxpa2UgZS5nLiBhIGJhY2sgbmF2aWdhdGlvbiBoZW5jZSB3ZSByZXR1cm4gYSBwcm9taXNlIGFuZCByZWplY3QgaXRcblx0XHRcdFx0dGhpcy5fc2hvd01lc3NhZ2VQb3BvdmVyKGVycm9yKTtcblx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHR9XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKG9Nb2RlbCkpIHtcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfbWFuYWdlQ29sbGFib3JhdGlvbigpIHtcblx0XHRvcGVuTWFuYWdlRGlhbG9nKHRoaXMuZ2V0VmlldygpKTtcblx0fVxuXG5cdF9zaG93Q29sbGFib3JhdGlvblVzZXJEZXRhaWxzKGV2ZW50OiBhbnkpIHtcblx0XHRzaG93VXNlckRldGFpbHMoZXZlbnQsIHRoaXMuZ2V0VmlldygpKTtcblx0fVxuXG5cdF9jYW5jZWxEb2N1bWVudChvQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0bVBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChtUGFyYW1ldGVycy5jYW5jZWxCdXR0b24pOyAvL3RvIGdldCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBjYW5jZWwgYnV0dG9uIGZyb20gY29tbWFuZCBleGVjdXRpb25cblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5jYW5jZWxEb2N1bWVudChvQ29udGV4dCwgbVBhcmFtZXRlcnMpO1xuXHR9XG5cblx0X2FwcGx5RG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmFwcGx5RG9jdW1lbnQob0NvbnRleHQpLmNhdGNoKCgpID0+IHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcigpKTtcblx0fVxuXG5cdF91cGRhdGVSZWxhdGVkQXBwcygpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0aWYgKENvbW1vblV0aWxzLnJlc29sdmVTdHJpbmd0b0Jvb2xlYW4ob09iamVjdFBhZ2UuZGF0YShcInNob3dSZWxhdGVkQXBwc1wiKSkpIHtcblx0XHRcdENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyhvT2JqZWN0UGFnZSk7XG5cdFx0fVxuXHR9XG5cblx0X2ZpbmRUYWJsZUluU3ViU2VjdGlvbihhUGFyZW50RWxlbWVudDogYW55LCBhU3Vic2VjdGlvbjogYW55LCBhVGFibGVzOiBhbnkpIHtcblx0XHRjb25zdCBhU3ViU2VjdGlvblRhYmxlcyA9IFtdO1xuXHRcdGZvciAobGV0IGVsZW1lbnQgPSAwOyBlbGVtZW50IDwgYVBhcmVudEVsZW1lbnQubGVuZ3RoOyBlbGVtZW50KyspIHtcblx0XHRcdGxldCBvRWxlbWVudCA9IGFQYXJlbnRFbGVtZW50W2VsZW1lbnRdLmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBhUGFyZW50RWxlbWVudFtlbGVtZW50XS5nZXRDb250ZW50KCk7XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvRWxlbWVudC5nZXRNYWluQ29udGVudCgpO1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLmZlLm1hY3Jvcy5UYWJsZUFQSVwiKSkge1xuXHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvRWxlbWVudC5nZXRDb250ZW50KCk7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudFswXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdGFUYWJsZXMucHVzaChvRWxlbWVudCk7XG5cdFx0XHRcdGFTdWJTZWN0aW9uVGFibGVzLnB1c2goe1xuXHRcdFx0XHRcdFwidGFibGVcIjogb0VsZW1lbnQsXG5cdFx0XHRcdFx0XCJncmlkVGFibGVcIjogb0VsZW1lbnQuZ2V0VHlwZSgpLmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKFxuXHRcdFx0YVN1YlNlY3Rpb25UYWJsZXMubGVuZ3RoID09PSAxICYmXG5cdFx0XHRhUGFyZW50RWxlbWVudC5sZW5ndGggPT09IDEgJiZcblx0XHRcdGFTdWJTZWN0aW9uVGFibGVzWzBdLmdyaWRUYWJsZSAmJlxuXHRcdFx0IWFTdWJzZWN0aW9uLmhhc1N0eWxlQ2xhc3MoXCJzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXJcIilcblx0XHQpIHtcblx0XHRcdC8vSW4gY2FzZSB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIHRhYmxlIGluIGEgc2VjdGlvbiB3ZSBmaXQgdGhhdCB0byB0aGUgd2hvbGUgcGFnZSBzbyB0aGF0IHRoZSBzY3JvbGxiYXIgY29tZXMgb25seSBvbiB0YWJsZSBhbmQgbm90IG9uIHBhZ2Vcblx0XHRcdGFTdWJzZWN0aW9uLmFkZFN0eWxlQ2xhc3MoXCJzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXJcIik7XG5cdFx0fSBlbHNlIGlmIChhU3ViU2VjdGlvblRhYmxlcyAmJiAhYVN1YnNlY3Rpb24uaGFzU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKSkge1xuXHRcdFx0YVN1YlNlY3Rpb25UYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiB7IHRhYmxlOiBhbnk7IGdyaWRUYWJsZTogYW55IH0pIHtcblx0XHRcdFx0aWYgKG9UYWJsZS5ncmlkVGFibGUpIHtcblx0XHRcdFx0XHQvL1Jlc2V0dGluZyB0aGUgcm93IGNvdW50IHRvIGRlZmF1bHQgdmFsdWUgaW4gY2FzZSB3ZSBoYXZlIGEgY29tYmluYXRpb24gb2YgZm9ybXMgYW5kIHRhYmxlcyBvciBtdWx0aXBsZSB0YWJsZXMgaW4gYSBzdWJzZWN0aW9uXG5cdFx0XHRcdFx0b1RhYmxlLnRhYmxlLmdldFR5cGUoKS5zZXRSb3dDb3VudChudWxsKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0X2dldEFsbFN1YlNlY3Rpb25zKCkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRsZXQgYVN1YlNlY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IGFueSkge1xuXHRcdFx0YVN1YlNlY3Rpb25zID0gYVN1YlNlY3Rpb25zLmNvbmNhdChvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYVN1YlNlY3Rpb25zO1xuXHR9XG5cblx0X2dldEFsbEJsb2NrcygpIHtcblx0XHRsZXQgYUJsb2NrczogYW55W10gPSBbXTtcblx0XHR0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBhbnkpIHtcblx0XHRcdGFCbG9ja3MgPSBhQmxvY2tzLmNvbmNhdChvU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFCbG9ja3M7XG5cdH1cblxuXHRfZmluZFRhYmxlcygpIHtcblx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGFUYWJsZXM6IGFueVtdID0gW107XG5cdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdHRoaXMuX2ZpbmRUYWJsZUluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0XHR0aGlzLl9maW5kVGFibGVJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldE1vcmVCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhVGFibGVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFUYWJsZXM7XG5cdH1cblxuXHRfY2xvc2VTaWRlQ29udGVudCgpIHtcblx0XHR0aGlzLl9nZXRBbGxCbG9ja3MoKS5mb3JFYWNoKGZ1bmN0aW9uIChvQmxvY2s6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRlbnQgPSBvQmxvY2suZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9CbG9jay5nZXRDb250ZW50KCk7XG5cdFx0XHRpZiAob0NvbnRlbnQgJiYgb0NvbnRlbnQuaXNBICYmIG9Db250ZW50LmlzQShcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdGlmIChvQ29udGVudC5zZXRTaG93U2lkZUNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuXHRcdFx0XHRcdG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFydCBDb250ZXh0IGlzIHJlc29sdmVkIGZvciAxOm4gbWljcm9jaGFydHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ2hhcnRDb250ZXh0IFRoZSBDb250ZXh0IG9mIHRoZSBNaWNyb0NoYXJ0XG5cdCAqIEBwYXJhbSBzQ2hhcnRQYXRoIFRoZSBjb2xsZWN0aW9uUGF0aCBvZiB0aGUgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIEF0dHJpYnV0ZXMgb2YgdGhlIGNoYXJ0IENvbnRleHRcblx0ICovXG5cdF9nZXRDaGFydENvbnRleHREYXRhKG9DaGFydENvbnRleHQ6IGFueSwgc0NoYXJ0UGF0aDogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb0NoYXJ0Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRsZXQgb0NoYXJ0Q29udGV4dERhdGEgPSBbb0NvbnRleHREYXRhXTtcblx0XHRpZiAob0NoYXJ0Q29udGV4dCAmJiBzQ2hhcnRQYXRoKSB7XG5cdFx0XHRpZiAob0NvbnRleHREYXRhW3NDaGFydFBhdGhdKSB7XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhID0gb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRkZWxldGUgb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YS5wdXNoKG9Db250ZXh0RGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvQ2hhcnRDb250ZXh0RGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTY3JvbGwgdGhlIHRhYmxlcyB0byB0aGUgcm93IHdpdGggdGhlIHNQYXRoXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuT2JqZWN0UGFnZUNvbnRyb2xsZXIuY29udHJvbGxlciNfc2Nyb2xsVGFibGVzVG9Sb3dcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSb3dQYXRoICdzUGF0aCBvZiB0aGUgdGFibGUgcm93J1xuXHQgKi9cblxuXHRfc2Nyb2xsVGFibGVzVG9Sb3coc1Jvd1BhdGg6IHN0cmluZykge1xuXHRcdGlmICh0aGlzLl9maW5kVGFibGVzICYmIHRoaXMuX2ZpbmRUYWJsZXMoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhVGFibGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhhVGFibGVzW2ldLCBzUm93UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBtZXJnZSBzZWxlY3RlZCBjb250ZXh0cyBhbmQgZmlsdGVycy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9tZXJnZU11bHRpcGxlQ29udGV4dHNcblx0ICogQHBhcmFtIG9QYWdlQ29udGV4dCBQYWdlIGNvbnRleHRcblx0ICogQHBhcmFtIGFMaW5lQ29udGV4dCBTZWxlY3RlZCBDb250ZXh0c1xuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBDb2xsZWN0aW9uIG5hbWUgb2YgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIFNlbGVjdGlvbiBWYXJpYW50IE9iamVjdFxuXHQgKi9cblx0X21lcmdlTXVsdGlwbGVDb250ZXh0cyhvUGFnZUNvbnRleHQ6IENvbnRleHQsIGFMaW5lQ29udGV4dDogYW55W10sIHNDaGFydFBhdGg6IHN0cmluZykge1xuXHRcdGxldCBhQXR0cmlidXRlczogYW55W10gPSBbXSxcblx0XHRcdGFQYWdlQXR0cmlidXRlcyA9IFtdLFxuXHRcdFx0b0NvbnRleHQsXG5cdFx0XHRzTWV0YVBhdGhMaW5lOiBzdHJpbmcsXG5cdFx0XHRzUGF0aExpbmU7XG5cblx0XHRjb25zdCBzUGFnZVBhdGggPSBvUGFnZUNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvUGFnZUNvbnRleHQgJiYgb1BhZ2VDb250ZXh0LmdldE1vZGVsKCkgJiYgKG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKTtcblx0XHRjb25zdCBzTWV0YVBhdGhQYWdlID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYWdlUGF0aCkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdC8vIEdldCBzaW5nbGUgbGluZSBjb250ZXh0IGlmIG5lY2Vzc2FyeVxuXHRcdGlmIChhTGluZUNvbnRleHQgJiYgYUxpbmVDb250ZXh0Lmxlbmd0aCkge1xuXHRcdFx0b0NvbnRleHQgPSBhTGluZUNvbnRleHRbMF07XG5cdFx0XHRzUGF0aExpbmUgPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRzTWV0YVBhdGhMaW5lID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoTGluZSkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdFx0YUxpbmVDb250ZXh0LmZvckVhY2goKG9TaW5nbGVDb250ZXh0OiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKHNDaGFydFBhdGgpIHtcblx0XHRcdFx0XHRjb25zdCBvQ2hhcnRDb250ZXh0RGF0YSA9IHRoaXMuX2dldENoYXJ0Q29udGV4dERhdGEob1NpbmdsZUNvbnRleHQsIHNDaGFydFBhdGgpO1xuXHRcdFx0XHRcdGlmIChvQ2hhcnRDb250ZXh0RGF0YSkge1xuXHRcdFx0XHRcdFx0YUF0dHJpYnV0ZXMgPSBvQ2hhcnRDb250ZXh0RGF0YS5tYXAoZnVuY3Rpb24gKG9TdWJDaGFydENvbnRleHREYXRhOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1N1YkNoYXJ0Q29udGV4dERhdGEsXG5cdFx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBgJHtzTWV0YVBhdGhQYWdlfS8ke3NDaGFydFBhdGh9YFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TaW5nbGVDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhMaW5lXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRhUGFnZUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRjb250ZXh0RGF0YTogb1BhZ2VDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhQYWdlXG5cdFx0fSk7XG5cdFx0Ly8gQWRkaW5nIFBhZ2UgQ29udGV4dCB0byBzZWxlY3Rpb24gdmFyaWFudFxuXHRcdGFQYWdlQXR0cmlidXRlcyA9IENvbW1vblV0aWxzLnJlbW92ZVNlbnNpdGl2ZURhdGEoYVBhZ2VBdHRyaWJ1dGVzLCBvTWV0YU1vZGVsKTtcblx0XHRjb25zdCBvUGFnZUxldmVsU1YgPSBDb21tb25VdGlscy5hZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudChuZXcgU2VsZWN0aW9uVmFyaWFudCgpLCBhUGFnZUF0dHJpYnV0ZXMsIHRoaXMuZ2V0VmlldygpKTtcblx0XHRhQXR0cmlidXRlcyA9IENvbW1vblV0aWxzLnJlbW92ZVNlbnNpdGl2ZURhdGEoYUF0dHJpYnV0ZXMsIG9NZXRhTW9kZWwpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50OiBvUGFnZUxldmVsU1YsXG5cdFx0XHRhdHRyaWJ1dGVzOiBhQXR0cmlidXRlc1xuXHRcdH07XG5cdH1cblxuXHRfZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkge1xuXHRcdGNvbnN0IG9WaWV3RGF0YSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55LFxuXHRcdFx0b0NvbmZpZ3VyYXRpb25zID0gb1ZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRcdFx0YUNvbmZpZ3VyYXRpb25zID0gb0NvbmZpZ3VyYXRpb25zICYmIE9iamVjdC5rZXlzKG9Db25maWd1cmF0aW9ucyksXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBbXCIkYXV0by5IZXJvZXNcIiwgXCIkYXV0by5EZWNvcmF0aW9uXCIsIFwiJGF1dG8uV29ya2Vyc1wiXTtcblxuXHRcdGlmIChhQ29uZmlndXJhdGlvbnMgJiYgYUNvbmZpZ3VyYXRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdGFDb25maWd1cmF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmZpZ3VyYXRpb24gPSBvQ29uZmlndXJhdGlvbnNbc0tleV07XG5cdFx0XHRcdGlmIChvQ29uZmlndXJhdGlvbi5yZXF1ZXN0R3JvdXBJZCA9PT0gXCJMb25nUnVubmVyc1wiKSB7XG5cdFx0XHRcdFx0YUJhdGNoR3JvdXBzLnB1c2goXCIkYXV0by5Mb25nUnVubmVyc1wiKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBhQmF0Y2hHcm91cHM7XG5cdH1cblxuXHQvKlxuXHQgKiBSZXNldCBCcmVhZGNydW1iIGxpbmtzXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge3NhcC5tLkJyZWFkY3J1bWJzfSBbb1NvdXJjZV0gcGFyZW50IGNvbnRyb2xcblx0ICogQGRlc2NyaXB0aW9uIFVzZWQgd2hlbiBjb250ZXh0IG9mIHRoZSBvYmplY3QgcGFnZSBjaGFuZ2VzLlxuXHQgKiAgICAgICAgICAgICAgVGhpcyBldmVudCBjYWxsYmFjayBpcyBhdHRhY2hlZCB0byBtb2RlbENvbnRleHRDaGFuZ2Vcblx0ICogICAgICAgICAgICAgIGV2ZW50IG9mIHRoZSBCcmVhZGNydW1iIGNvbnRyb2wgdG8gY2F0Y2ggY29udGV4dCBjaGFuZ2UuXG5cdCAqICAgICAgICAgICAgICBUaGVuIGVsZW1lbnQgYmluZGluZyBhbmQgaHJlZnMgYXJlIHVwZGF0ZWQgZm9yIGVhY2ggbGluay5cblx0ICpcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBleHBlcmltZW50YWxcblx0ICovXG5cdGFzeW5jIF9zZXRCcmVhZGNydW1iTGlua3Mob1NvdXJjZTogQnJlYWRDcnVtYnMpIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IG9Tb3VyY2UuZ2V0QmluZGluZ0NvbnRleHQoKSxcblx0XHRcdG9BcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLFxuXHRcdFx0YVByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gPSBbXSxcblx0XHRcdGFTa2lwUGFyYW1ldGVyaXplZDogYW55W10gPSBbXSxcblx0XHRcdHNOZXdQYXRoID0gb0NvbnRleHQ/LmdldFBhdGgoKSxcblx0XHRcdGFQYXRoUGFydHMgPSBzTmV3UGF0aD8uc3BsaXQoXCIvXCIpID8/IFtdLFxuXHRcdFx0b01ldGFNb2RlbCA9IG9BcHBDb21wb25lbnQgJiYgb0FwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKTtcblx0XHRsZXQgc1BhdGggPSBcIlwiO1xuXHRcdGFQYXRoUGFydHMuc2hpZnQoKTtcblx0XHRhUGF0aFBhcnRzLnNwbGljZSgtMSwgMSk7XG5cdFx0YVBhdGhQYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChzUGF0aFBhcnQ6IGFueSkge1xuXHRcdFx0c1BhdGggKz0gYC8ke3NQYXRoUGFydH1gO1xuXHRcdFx0Y29uc3Qgb1Jvb3RWaWV3Q29udHJvbGxlciA9IG9BcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgUm9vdENvbnRhaW5lckJhc2VDb250cm9sbGVyO1xuXHRcdFx0Y29uc3Qgc1BhcmFtZXRlclBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0XHRcdGNvbnN0IGJSZXN1bHRDb250ZXh0ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhcmFtZXRlclBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApO1xuXHRcdFx0aWYgKGJSZXN1bHRDb250ZXh0KSB7XG5cdFx0XHRcdC8vIFdlIGRvbnQgbmVlZCB0byBjcmVhdGUgYSBicmVhZGNydW1iIGZvciBQYXJhbWV0ZXIgcGF0aFxuXHRcdFx0XHRhU2tpcFBhcmFtZXRlcml6ZWQucHVzaCgxKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YVNraXBQYXJhbWV0ZXJpemVkLnB1c2goMCk7XG5cdFx0XHR9XG5cdFx0XHRhUHJvbWlzZXMucHVzaChvUm9vdFZpZXdDb250cm9sbGVyLmdldFRpdGxlSW5mb0Zyb21QYXRoKHNQYXRoKSk7XG5cdFx0fSk7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHRpdGxlSGllcmFyY2h5SW5mb3M6IGFueVtdID0gYXdhaXQgUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcblx0XHRcdGxldCBpZHgsIGhpZXJhcmNoeVBvc2l0aW9uLCBvTGluaztcblx0XHRcdGZvciAoY29uc3QgdGl0bGVIaWVyYXJjaHlJbmZvIG9mIHRpdGxlSGllcmFyY2h5SW5mb3MpIHtcblx0XHRcdFx0aGllcmFyY2h5UG9zaXRpb24gPSB0aXRsZUhpZXJhcmNoeUluZm9zLmluZGV4T2YodGl0bGVIaWVyYXJjaHlJbmZvKTtcblx0XHRcdFx0aWR4ID0gaGllcmFyY2h5UG9zaXRpb24gLSBhU2tpcFBhcmFtZXRlcml6ZWRbaGllcmFyY2h5UG9zaXRpb25dO1xuXHRcdFx0XHRvTGluayA9IG9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdID8gb1NvdXJjZS5nZXRMaW5rcygpW2lkeF0gOiBuZXcgTGluaygpO1xuXHRcdFx0XHQvL3NDdXJyZW50RW50aXR5IGlzIGEgZmFsbGJhY2sgdmFsdWUgaW4gY2FzZSBvZiBlbXB0eSB0aXRsZVxuXHRcdFx0XHRvTGluay5zZXRUZXh0KHRpdGxlSGllcmFyY2h5SW5mby5zdWJ0aXRsZSB8fCB0aXRsZUhpZXJhcmNoeUluZm8udGl0bGUpO1xuXHRcdFx0XHRvTGluay5zZXRIcmVmKHRpdGxlSGllcmFyY2h5SW5mby5pbnRlbnQpO1xuXHRcdFx0XHRpZiAoIW9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdKSB7XG5cdFx0XHRcdFx0b1NvdXJjZS5hZGRMaW5rKG9MaW5rKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgdGhlIGJyZWFkY3J1bWIgbGlua3M6XCIgKyBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0X2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKSB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9EYXRhUG9pbnRzID0gQ29tbW9uVXRpbHMuZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKFxuXHRcdFx0b1ZpZXcuZ2V0Vmlld0RhdGEoKSxcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5nZXRPdXRib3VuZHMoKVxuXHRcdCk7XG5cdFx0Y29uc3Qgb1NoZWxsU2VydmljZXMgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRjb25zdCBvUGFnZUNvbnRleHQgPSBvVmlldyAmJiAob1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpc0hlYWRlckRQTGlua1Zpc2libGVcIiwge30pO1xuXHRcdGlmIChvUGFnZUNvbnRleHQpIHtcblx0XHRcdG9QYWdlQ29udGV4dFxuXHRcdFx0XHQucmVxdWVzdE9iamVjdCgpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvRGF0YTogYW55KSB7XG5cdFx0XHRcdFx0Zm5HZXRMaW5rcyhvRGF0YVBvaW50cywgb0RhdGEpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvRXJyb3Jcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbk9uRXJyb3Iob0Vycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihvRXJyb3IpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGZuU2V0TGlua0VuYWJsZW1lbnQoaWQ6IHN0cmluZywgYVN1cHBvcnRlZExpbmtzOiBhbnkpIHtcblx0XHRcdGNvbnN0IHNMaW5rSWQgPSBpZDtcblx0XHRcdC8vIHByb2Nlc3MgdmlhYmxlIGxpbmtzIGZyb20gZ2V0TGlua3MgZm9yIGFsbCBkYXRhcG9pbnRzIGhhdmluZyBvdXRib3VuZFxuXHRcdFx0aWYgKGFTdXBwb3J0ZWRMaW5rcyAmJiBhU3VwcG9ydGVkTGlua3MubGVuZ3RoID09PSAxICYmIGFTdXBwb3J0ZWRMaW5rc1swXS5zdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBpc0hlYWRlckRQTGlua1Zpc2libGUvJHtzTGlua0lkfWAsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvU3ViRGF0YVBvaW50c1xuXHRcdCAqIEBwYXJhbSBvUGFnZURhdGFcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbkdldExpbmtzKG9TdWJEYXRhUG9pbnRzOiBhbnksIG9QYWdlRGF0YTogYW55KSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBpbiBvU3ViRGF0YVBvaW50cykge1xuXHRcdFx0XHRjb25zdCBvRGF0YVBvaW50ID0gb1N1YkRhdGFQb2ludHNbc0lkXTtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtczogYW55ID0ge307XG5cdFx0XHRcdGNvbnN0IG9MaW5rID0gb1ZpZXcuYnlJZChzSWQpO1xuXHRcdFx0XHRpZiAoIW9MaW5rKSB7XG5cdFx0XHRcdFx0Ly8gZm9yIGRhdGEgcG9pbnRzIGNvbmZpZ3VyZWQgaW4gYXBwIGRlc2NyaXB0b3IgYnV0IG5vdCBhbm5vdGF0ZWQgaW4gdGhlIGhlYWRlclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG9MaW5rQ29udGV4dCA9IG9MaW5rLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnN0IG9MaW5rRGF0YTogYW55ID0gb0xpbmtDb250ZXh0ICYmIG9MaW5rQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0bGV0IG9NaXhlZENvbnRleHQ6IGFueSA9IG1lcmdlKHt9LCBvUGFnZURhdGEsIG9MaW5rRGF0YSk7XG5cdFx0XHRcdC8vIHByb2Nlc3Mgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzXG5cdFx0XHRcdGlmIChvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBhU2VtYW50aWNPYmplY3RNYXBwaW5nW2l0ZW1dO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01haW5Qcm9wZXJ0eSA9IG9NYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl07XG5cdFx0XHRcdFx0XHRjb25zdCBzTWFwcGVkUHJvcGVydHkgPSBvTWFwcGluZ1tcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl07XG5cdFx0XHRcdFx0XHRpZiAoc01haW5Qcm9wZXJ0eSAhPT0gc01hcHBlZFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0Lmhhc093blByb3BlcnR5KHNNYWluUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb05ld01hcHBpbmc6IGFueSA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdG9OZXdNYXBwaW5nW3NNYXBwZWRQcm9wZXJ0eV0gPSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHRcdG9NaXhlZENvbnRleHQgPSBtZXJnZSh7fSwgb01peGVkQ29udGV4dCwgb05ld01hcHBpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb01peGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0aWYgKHNLZXkuaW5kZXhPZihcIl9cIikgIT09IDAgJiYgc0tleS5pbmRleE9mKFwib2RhdGEuY29udGV4dFwiKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IG9NaXhlZENvbnRleHRbc0tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhbGlkYXRlIGlmIGEgbGluayBtdXN0IGJlIHJlbmRlcmVkXG5cdFx0XHRcdG9TaGVsbFNlcnZpY2VzXG5cdFx0XHRcdFx0LmlzTmF2aWdhdGlvblN1cHBvcnRlZChbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogb0RhdGFQb2ludC5hY3Rpb25cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm5TZXRMaW5rRW5hYmxlbWVudChzSWQsIGFMaW5rcyk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZm5PbkVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHRvblRhYmxlQ29udGV4dENoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Tb3VyY2UgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0XHRsZXQgb1RhYmxlOiBhbnk7XG5cdFx0XHR0aGlzLl9maW5kVGFibGVzKCkuc29tZShmdW5jdGlvbiAoX29UYWJsZTogYW55KSB7XG5cdFx0XHRcdGlmIChfb1RhYmxlLmdldFJvd0JpbmRpbmcoKSA9PT0gb1NvdXJjZSkge1xuXHRcdFx0XHRcdG9UYWJsZSA9IF9vVGFibGU7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IG9DdXJyZW50QWN0aW9uUHJvbWlzZSA9IHRoaXMuX2VkaXRGbG93LmdldEN1cnJlbnRBY3Rpb25Qcm9taXNlKCk7XG5cdFx0XHRpZiAob0N1cnJlbnRBY3Rpb25Qcm9taXNlKSB7XG5cdFx0XHRcdGxldCBhVGFibGVDb250ZXh0czogYW55O1xuXHRcdFx0XHRpZiAob1RhYmxlLmdldFR5cGUoKS5nZXRNZXRhZGF0YSgpLmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKSkge1xuXHRcdFx0XHRcdGFUYWJsZUNvbnRleHRzID0gb1NvdXJjZS5nZXRDb250ZXh0cygwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhVGFibGVDb250ZXh0cyA9IG9Tb3VyY2UuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly9pZiBjb250ZXh0cyBhcmUgbm90IGZ1bGx5IGxvYWRlZCB0aGUgZ2V0Y29udGV4dHMgZnVuY3Rpb24gYWJvdmUgd2lsbCB0cmlnZ2VyIGEgbmV3IGNoYW5nZSBldmVudCBjYWxsXG5cdFx0XHRcdGlmICghYVRhYmxlQ29udGV4dHNbMF0pIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0b0N1cnJlbnRBY3Rpb25Qcm9taXNlXG5cdFx0XHRcdFx0LnRoZW4oKG9BY3Rpb25SZXNwb25zZTogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoIW9BY3Rpb25SZXNwb25zZSB8fCBvQWN0aW9uUmVzcG9uc2UuY29udHJvbElkICE9PSBvVGFibGUuc0lkKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IG9BY3Rpb25EYXRhID0gb0FjdGlvblJlc3BvbnNlLm9EYXRhO1xuXHRcdFx0XHRcdFx0Y29uc3QgYUtleXMgPSBvQWN0aW9uUmVzcG9uc2Uua2V5cztcblx0XHRcdFx0XHRcdGxldCBpTmV3SXRlbXAgPSAtMTtcblx0XHRcdFx0XHRcdGFUYWJsZUNvbnRleHRzLmZpbmQoZnVuY3Rpb24gKG9UYWJsZUNvbnRleHQ6IGFueSwgaTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9UYWJsZURhdGEgPSBvVGFibGVDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBiQ29tcGFyZSA9IGFLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChzS2V5OiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb1RhYmxlRGF0YVtzS2V5XSA9PT0gb0FjdGlvbkRhdGFbc0tleV07XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRpZiAoYkNvbXBhcmUpIHtcblx0XHRcdFx0XHRcdFx0XHRpTmV3SXRlbXAgPSBpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiQ29tcGFyZTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYgKGlOZXdJdGVtcCAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYURpYWxvZ3MgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0T3BlbkRpYWxvZ3MoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0RpYWxvZyA9XG5cdFx0XHRcdFx0XHRcdFx0YURpYWxvZ3MubGVuZ3RoID4gMCA/IGFEaWFsb2dzLmZpbmQoKGRpYWxvZykgPT4gZGlhbG9nLmRhdGEoXCJGdWxsU2NyZWVuRGlhbG9nXCIpICE9PSB0cnVlKSA6IG51bGw7XG5cdFx0XHRcdFx0XHRcdGlmIChvRGlhbG9nKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gYnkgZGVzaWduLCBhIHNhcC5tLmRpYWxvZyBzZXQgdGhlIGZvY3VzIHRvIHRoZSBwcmV2aW91cyBmb2N1c2VkIGVsZW1lbnQgd2hlbiBjbG9zaW5nLlxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIHNob3VsZCB3YWl0IGZvciB0aGUgZGlhbG9nIHRvIGJlIGNsb3NlIGJlZm9yZSB0byBmb2N1cyBhbm90aGVyIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRvRGlhbG9nLmF0dGFjaEV2ZW50T25jZShcImFmdGVyQ2xvc2VcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b1RhYmxlLmZvY3VzUm93KGlOZXdJdGVtcCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0b1RhYmxlLmZvY3VzUm93KGlOZXdJdGVtcCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dGhpcy5fZWRpdEZsb3cuZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIHNjcm9sbGluZyB0byB0aGUgbmV3bHkgY3JlYXRlZCBJdGVtOiAke2Vycn1gKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdC8vIGZpcmUgTW9kZWxDb250ZXh0Q2hhbmdlIG9uIHRoZSBtZXNzYWdlIGJ1dHRvbiB3aGVuZXZlciB0aGUgdGFibGUgY29udGV4dCBjaGFuZ2VzXG5cdFx0XHRjb25zdCBvTWVzc2FnZUJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpNZXNzYWdlQnV0dG9uXCIpO1xuXHRcdFx0b01lc3NhZ2VCdXR0b24uZmlyZU1vZGVsQ29udGV4dENoYW5nZSgpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBJbnZva2VzIGFuIGFjdGlvbiAtIGJvdW5kL3VuYm91bmQgYW5kIHNldHMgdGhlIHBhZ2UgZGlydHkuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb1ZpZXdcblx0XHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzXSBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5jb250ZXh0c10gTWFuZGF0b3J5IGZvciBhIGJvdW5kIGFjdGlvbiwgZWl0aGVyIG9uZSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgZm9yIHdoaWNoIHRoZSBhY3Rpb24gc2hhbGwgYmUgY2FsbGVkXG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5tb2RlbF0gTWFuZGF0b3J5IGZvciBhbiB1bmJvdW5kIGFjdGlvbjsgYW4gaW5zdGFuY2Ugb2YgYW4gT0RhdGEgVjQgbW9kZWxcblx0XHQgKiBAcmV0dXJucyBUaGUgYWN0aW9uIHByb21pc2Vcblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvbkNhbGxBY3Rpb24ob1ZpZXc6IGFueSwgc0FjdGlvbk5hbWU6IHN0cmluZywgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuZWRpdEZsb3dcblx0XHRcdFx0Lmludm9rZUFjdGlvbihzQWN0aW9uTmFtZSwgbVBhcmFtZXRlcnMpXG5cdFx0XHRcdC50aGVuKG9Db250cm9sbGVyLl9zaG93TWVzc2FnZVBvcG92ZXIuYmluZChvQ29udHJvbGxlciwgdW5kZWZpbmVkKSlcblx0XHRcdFx0LmNhdGNoKG9Db250cm9sbGVyLl9zaG93TWVzc2FnZVBvcG92ZXIuYmluZChvQ29udHJvbGxlcikpO1xuXHRcdH0sXG5cdFx0b25EYXRhUG9pbnRUaXRsZVByZXNzZWQob0NvbnRyb2xsZXI6IGFueSwgb1NvdXJjZTogYW55LCBvTWFuaWZlc3RPdXRib3VuZDogYW55LCBzQ29udHJvbENvbmZpZzogYW55LCBzQ29sbGVjdGlvblBhdGg6IGFueSkge1xuXHRcdFx0b01hbmlmZXN0T3V0Ym91bmQgPSB0eXBlb2Ygb01hbmlmZXN0T3V0Ym91bmQgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKG9NYW5pZmVzdE91dGJvdW5kKSA6IG9NYW5pZmVzdE91dGJvdW5kO1xuXHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSBvTWFuaWZlc3RPdXRib3VuZFtzQ29udHJvbENvbmZpZ10sXG5cdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob1RhcmdldEluZm8pLFxuXHRcdFx0XHRvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0XG5cdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YVBhdGgob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0bGV0IGFOYXZpZ2F0aW9uRGF0YSA9IG9Db250cm9sbGVyLl9nZXRDaGFydENvbnRleHREYXRhKG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQsIHNDb2xsZWN0aW9uUGF0aCk7XG5cdFx0XHRsZXQgYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzO1xuXG5cdFx0XHRhTmF2aWdhdGlvbkRhdGEgPSBhTmF2aWdhdGlvbkRhdGEubWFwKGZ1bmN0aW9uIChvTmF2aWdhdGlvbkRhdGE6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGRhdGE6IG9OYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRtZXRhUGF0aDogc01ldGFQYXRoICsgKHNDb2xsZWN0aW9uUGF0aCA/IGAvJHtzQ29sbGVjdGlvblBhdGh9YCA6IFwiXCIpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzICYmIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24uZ2V0T3V0Ym91bmRQYXJhbXMob1RhcmdldEluZm8ucGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvUGFyYW1zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gb1BhcmFtcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0ICYmIG9UYXJnZXRJbmZvLmFjdGlvbikge1xuXHRcdFx0XHRvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0LCBvVGFyZ2V0SW5mby5hY3Rpb24sIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IGFOYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzOiBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBUcmlnZ2VycyBhbiBvdXRib3VuZCBuYXZpZ2F0aW9uIHdoZW4gYSB1c2VyIGNob29zZXMgdGhlIGNoZXZyb24uXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkICg/Pz8gbWF5YmUgb25seSBvbmNlIGZpbmlzaGVkPylcblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZywgb0NvbnRleHQ6IGFueSwgc0NyZWF0ZVBhdGg6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQsIG9Db250ZXh0LCBzQ3JlYXRlUGF0aCk7XG5cdFx0fSxcblxuXHRcdG9uTmF2aWdhdGVDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHQvL3dpbGwgYmUgY2FsbGVkIGFsd2F5cyB3aGVuIHdlIGNsaWNrIG9uIGEgc2VjdGlvbiB0YWJcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdHRoaXMuYlNlY3Rpb25OYXZpZ2F0ZWQgPSB0cnVlO1xuXG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgJiZcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5zZWN0aW9uTGF5b3V0ID09PSBcIlRhYnNcIiAmJlxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiKSA9PT0gZmFsc2Vcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUoW29TdWJTZWN0aW9uXSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTZWxlY3RlZDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTYXZlZDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0XHQvL1RPRE86IFNob3VsZCByZW1vdmUgdGhpcyBzZXRUaW1lT3V0IG9uY2UgVmFyaWFudCBNYW5hZ2VtZW50IHByb3ZpZGVzIGFuIGFwaSB0byBmZXRjaCB0aGUgY3VycmVudCB2YXJpYW50IGtleSBvbiBzYXZlXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fSwgNTAwKTtcblx0XHR9LFxuXHRcdG5hdmlnYXRlVG9TdWJTZWN0aW9uOiBmdW5jdGlvbiAob0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLCB2RGV0YWlsQ29uZmlnOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9EZXRhaWxDb25maWcgPSB0eXBlb2YgdkRldGFpbENvbmZpZyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2UodkRldGFpbENvbmZpZykgOiB2RGV0YWlsQ29uZmlnO1xuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdFx0XHRsZXQgb1NlY3Rpb247XG5cdFx0XHRsZXQgb1N1YlNlY3Rpb247XG5cdFx0XHRpZiAob0RldGFpbENvbmZpZy5zZWN0aW9uSWQpIHtcblx0XHRcdFx0b1NlY3Rpb24gPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnNlY3Rpb25JZCkgYXMgT2JqZWN0UGFnZVNlY3Rpb247XG5cdFx0XHRcdG9TdWJTZWN0aW9uID0gKFxuXHRcdFx0XHRcdG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkXG5cdFx0XHRcdFx0XHQ/IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKVxuXHRcdFx0XHRcdFx0OiBvU2VjdGlvbiAmJiBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpICYmIG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKClbMF1cblx0XHRcdFx0KSBhcyBPYmplY3RQYWdlU3ViU2VjdGlvbjtcblx0XHRcdH0gZWxzZSBpZiAob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpIHtcblx0XHRcdFx0b1N1YlNlY3Rpb24gPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZCkgYXMgT2JqZWN0UGFnZVN1YlNlY3Rpb247XG5cdFx0XHRcdG9TZWN0aW9uID0gb1N1YlNlY3Rpb24gJiYgKG9TdWJTZWN0aW9uLmdldFBhcmVudCgpIGFzIE9iamVjdFBhZ2VTZWN0aW9uKTtcblx0XHRcdH1cblx0XHRcdGlmICghb1NlY3Rpb24gfHwgIW9TdWJTZWN0aW9uIHx8ICFvU2VjdGlvbi5nZXRWaXNpYmxlKCkgfHwgIW9TdWJTZWN0aW9uLmdldFZpc2libGUoKSkge1xuXHRcdFx0XHQoKG9Db250cm9sbGVyLmdldFZpZXcoKS5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCkgYXMgUHJvbWlzZTxSZXNvdXJjZUJ1bmRsZT4pXG5cdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9SZXNvdXJjZUJ1bmRsZSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc1RpdGxlID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcdFx0XHRcdFwiQ19ST1VUSU5HX05BVklHQVRJT05fRElTQUJMRURfVElUTEVcIixcblx0XHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlLFxuXHRcdFx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdFx0XHQob0NvbnRyb2xsZXIuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5lbnRpdHlTZXRcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3Ioc1RpdGxlKTtcblx0XHRcdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3Ioc1RpdGxlKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnJvcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zY3JvbGxUb1NlY3Rpb24ob1N1YlNlY3Rpb24uZ2V0SWQoKSk7XG5cdFx0XHRcdC8vIHRyaWdnZXIgaWFwcCBzdGF0ZSBjaGFuZ2Vcblx0XHRcdFx0b09iamVjdFBhZ2UuZmlyZU5hdmlnYXRlKHtcblx0XHRcdFx0XHRzZWN0aW9uOiBvU2VjdGlvbixcblx0XHRcdFx0XHRzdWJTZWN0aW9uOiBvU3ViU2VjdGlvblxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uQ2hhcnRTZWxlY3Rpb25DaGFuZ2VkOiBmdW5jdGlvbiAob0V2ZW50OiBhbnkpIHtcblx0XHRcdENoYXJ0UnVudGltZS5mblVwZGF0ZUNoYXJ0KG9FdmVudCk7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBPYmplY3RQYWdlQ29udHJvbGxlcjtcbiJdfQ==
|